diff --git a/examples/different-input-types/package.json b/examples/different-input-types/package.json index 792925786..a8bff51d8 100644 --- a/examples/different-input-types/package.json +++ b/examples/different-input-types/package.json @@ -1,18 +1,18 @@ { "name": "itk-wasm-different-input-types-example", - "version": "1.0.0", + "version": "1.0.1", "description": "An itk-wasm pipeline example that demonstrates accepting different input types", "type": "module", "scripts": { "build": "npm run build:wasi", - "build:wasi": "itk-wasm -b wasi-build -i itkwasm/wasi build", + "build:wasi": "itk-wasm -b wasi-build -i itkwasm/wasi:latest-debug build", "test": "npm run test:wasi && npm run test:wasi:help", - "test:wasi": "itk-wasm -b wasi-build run different-input-types.wasi.wasm -- -- ./Gourds.png label.png overlay.png", - "test:wasi:help": "itk-wasm -b wasi-build run different-input-types.wasi.wasm -- -- --help" + "test:wasi": "itk-wasm -b wasi-build run different-input-types.wasi.wasm -- ./Gourds.png label.png overlay.png", + "test:wasi:help": "itk-wasm -b wasi-build run different-input-types.wasi.wasm -- --help" }, "author": "Matt McCormick ", "license": "Apache-2.0", "dependencies": { - "itk-wasm": "^1.0.0-b.66" + "itk-wasm": "^1.0.0-b.185" } } diff --git a/examples/hello-pipeline/package.json b/examples/hello-pipeline/package.json index 5143f8112..1233ecc14 100644 --- a/examples/hello-pipeline/package.json +++ b/examples/hello-pipeline/package.json @@ -1,18 +1,18 @@ { "name": "itk-wasm-hello-pipeline", - "version": "1.0.1", + "version": "1.0.2", "description": "An itk-wasm Hello Pipeline World! example", "type": "module", "scripts": { "build": "itk-wasm -i itkwasm/wasi build", - "test": "itk-wasm run wasi-build/hello-pipeline.wasi.wasm -- -- cthead1.png", - "test:quiet": "itk-wasm run wasi-build/hello-pipeline.wasi.wasm -- -- --quiet cthead1.png", - "test:help": "itk-wasm run wasi-build/hello-pipeline.wasi.wasm -- -- --help" + "test": "itk-wasm run wasi-build/hello-pipeline.wasi.wasm -- cthead1.png", + "test:quiet": "itk-wasm run wasi-build/hello-pipeline.wasi.wasm -- --quiet cthead1.png", + "test:help": "itk-wasm run wasi-build/hello-pipeline.wasi.wasm -- --help" }, "author": "Matt McCormick ", "license": "Apache-2.0", "dependencies": { "fs-extra": "^10.0.0", - "itk-wasm": "^1.0.0-b.76" + "itk-wasm": "^1.0.0-b.185" } } diff --git a/packages/compare-images/package.json b/packages/compare-images/package.json index 898b388a4..fdc4a62da 100644 --- a/packages/compare-images/package.json +++ b/packages/compare-images/package.json @@ -1,6 +1,6 @@ { "name": "@itk-wasm/compare-images-build", - "version": "5.2.3", + "version": "5.3.1", "private": true, "description": "@itk-wasm/compare-stringify build configuration", "type": "module", diff --git a/packages/compare-images/python/itkwasm-compare-images-emscripten/itkwasm_compare_images_emscripten/_version.py b/packages/compare-images/python/itkwasm-compare-images-emscripten/itkwasm_compare_images_emscripten/_version.py index fd4cdef3e..0419a93d2 100644 --- a/packages/compare-images/python/itkwasm-compare-images-emscripten/itkwasm_compare_images_emscripten/_version.py +++ b/packages/compare-images/python/itkwasm-compare-images-emscripten/itkwasm_compare_images_emscripten/_version.py @@ -1 +1 @@ -__version__ = "5.2.3" +__version__ = "5.3.1" diff --git a/packages/compare-images/python/itkwasm-compare-images-emscripten/itkwasm_compare_images_emscripten/js_package.py b/packages/compare-images/python/itkwasm-compare-images-emscripten/itkwasm_compare_images_emscripten/js_package.py index f7302748f..711f40fd7 100644 --- a/packages/compare-images/python/itkwasm-compare-images-emscripten/itkwasm_compare_images_emscripten/js_package.py +++ b/packages/compare-images/python/itkwasm-compare-images-emscripten/itkwasm_compare_images_emscripten/js_package.py @@ -3,6 +3,6 @@ from itkwasm.pyodide import JsPackageConfig, JsPackage from ._version import __version__ -default_js_module = """data:text/javascript;base64,dmFyIFd0PU9iamVjdC5kZWZpbmVQcm9wZXJ0eTt2YXIganQ9KEEsZSk9Pntmb3IodmFyIHIgaW4gZSlXdChBLHIse2dldDplW3JdLGVudW1lcmFibGU6ITB9KX07dmFyIF90PSI1LjIuMyIscUE9X3Q7dmFyIFZ0PXtJbnQ4OiJpbnQ4IixVSW50ODoidWludDgiLEludDE2OiJpbnQxNiIsVUludDE2OiJ1aW50MTYiLEludDMyOiJpbnQzMiIsVUludDMyOiJ1aW50MzIiLEludDY0OiJpbnQ2NCIsVUludDY0OiJ1aW50NjQiLFNpemVWYWx1ZVR5cGU6InVpbnQ2NCIsSWRlbnRpZmllclR5cGU6InVpbnQ2NCIsSW5kZXhWYWx1ZVR5cGU6ImludDY0IixPZmZzZXRWYWx1ZVR5cGU6ImludDY0In0scD1WdDt2YXIgenQ9e0Zsb2F0MzI6ImZsb2F0MzIiLEZsb2F0NjQ6ImZsb2F0NjQiLFNwYWNlUHJlY2lzaW9uVHlwZToiZmxvYXQ2NCJ9LFI9enQ7ZnVuY3Rpb24gWnQoQSxlKXtsZXQgcj1udWxsO3N3aXRjaChBKXtjYXNlIHAuVUludDg6e3I9bmV3IFVpbnQ4QXJyYXkoZSk7YnJlYWt9Y2FzZSBwLkludDg6e3I9bmV3IEludDhBcnJheShlKTticmVha31jYXNlIHAuVUludDE2OntyPW5ldyBVaW50MTZBcnJheShlKTticmVha31jYXNlIHAuSW50MTY6e3I9bmV3IEludDE2QXJyYXkoZSk7YnJlYWt9Y2FzZSBwLlVJbnQzMjp7cj1uZXcgVWludDMyQXJyYXkoZSk7YnJlYWt9Y2FzZSBwLkludDMyOntyPW5ldyBJbnQzMkFycmF5KGUpO2JyZWFrfWNhc2UgcC5VSW50NjQ6e3R5cGVvZiBnbG9iYWxUaGlzLkJpZ1VpbnQ2NEFycmF5PT0iZnVuY3Rpb24iP3I9bmV3IEJpZ1VpbnQ2NEFycmF5KGUpOnI9bmV3IFVpbnQ4QXJyYXkoZSk7YnJlYWt9Y2FzZSBwLkludDY0Ont0eXBlb2YgZ2xvYmFsVGhpcy5CaWdJbnQ2NEFycmF5PT0iZnVuY3Rpb24iP3I9bmV3IEJpZ0ludDY0QXJyYXkoZSk6cj1uZXcgVWludDhBcnJheShlKTticmVha31jYXNlIFIuRmxvYXQzMjp7cj1uZXcgRmxvYXQzMkFycmF5KGUpO2JyZWFrfWNhc2UgUi5GbG9hdDY0OntyPW5ldyBGbG9hdDY0QXJyYXkoZSk7YnJlYWt9Y2FzZSJudWxsIjp7cj1udWxsO2JyZWFrfWNhc2UgbnVsbDp7cj1udWxsO2JyZWFrfWRlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKCJUeXBlIGlzIG5vdCBzdXBwb3J0ZWQgYXMgYSBUeXBlZEFycmF5Iil9cmV0dXJuIHJ9dmFyIE89WnQ7dmFyIFh0PXtVbmtub3duOiJVbmtub3duIixTY2FsYXI6IlNjYWxhciIsUkdCOiJSR0IiLFJHQkE6IlJHQkEiLE9mZnNldDoiT2Zmc2V0IixWZWN0b3I6IlZlY3RvciIsUG9pbnQ6IlBvaW50IixDb3ZhcmlhbnRWZWN0b3I6IkNvdmFyaWFudFZlY3RvciIsU3ltbWV0cmljU2Vjb25kUmFua1RlbnNvcjoiU3ltbWV0cmljU2Vjb25kUmFua1RlbnNvciIsRGlmZnVzaW9uVGVuc29yM0Q6IkRpZmZ1c2lvblRlbnNvcjNEIixDb21wbGV4OiJDb21wbGV4IixGaXhlZEFycmF5OiJGaXhlZEFycmF5IixBcnJheToiQXJyYXkiLE1hdHJpeDoiTWF0cml4IixWYXJpYWJsZUxlbmd0aFZlY3RvcjoiVmFyaWFibGVMZW5ndGhWZWN0b3IiLFZhcmlhYmxlU2l6ZU1hdHJpeDoiVmFyaWFibGVTaXplTWF0cml4In0saz1YdDt2YXIgWUE9Y2xhc3N7ZGltZW5zaW9uO2NvbXBvbmVudFR5cGU7cGl4ZWxUeXBlO2NvbXBvbmVudHM7Y29uc3RydWN0b3IoZT0yLHI9cC5VSW50OCx0PWsuU2NhbGFyLG49MSl7dGhpcy5kaW1lbnNpb249ZSx0aGlzLmNvbXBvbmVudFR5cGU9cix0aGlzLnBpeGVsVHlwZT10LHRoaXMuY29tcG9uZW50cz1ufX0sRmU9WUE7ZnVuY3Rpb24gJHQoQSxlLHIsdCxuKXtBW3QrciplXT1ufXZhciBrZT0kdDt2YXIgS0E9Y2xhc3N7aW1hZ2VUeXBlO25hbWU9IkltYWdlIjtvcmlnaW47c3BhY2luZztkaXJlY3Rpb247c2l6ZTttZXRhZGF0YTtkYXRhO2NvbnN0cnVjdG9yKGU9bmV3IEZlKXt0aGlzLmltYWdlVHlwZT1lO2xldCByPWUuZGltZW5zaW9uO3RoaXMub3JpZ2luPW5ldyBBcnJheShyKSx0aGlzLm9yaWdpbi5maWxsKDApLHRoaXMuc3BhY2luZz1uZXcgQXJyYXkociksdGhpcy5zcGFjaW5nLmZpbGwoMSksdGhpcy5kaXJlY3Rpb249bmV3IEZsb2F0NjRBcnJheShyKnIpLHRoaXMuZGlyZWN0aW9uLmZpbGwoMCk7Zm9yKGxldCB0PTA7dDxyO3QrKylrZSh0aGlzLmRpcmVjdGlvbixyLHQsdCwxKTt0aGlzLnNpemU9bmV3IEFycmF5KHIpLHRoaXMuc2l6ZS5maWxsKDApLHRoaXMubWV0YWRhdGE9bmV3IE1hcCx0aGlzLmRhdGE9bnVsbH19LFVlPUtBO2Z1bmN0aW9uIEFyKEEsZSl7bGV0IHI9ey4uLkEuaW1hZ2VUeXBlfTtpZih0eXBlb2YgZTwidSImJnR5cGVvZiBlLnBpeGVsVHlwZTwidSImJihyLnBpeGVsVHlwZT1lLnBpeGVsVHlwZSxlLnBpeGVsVHlwZT09PWsuU2NhbGFyJiZyLmNvbXBvbmVudHMhPT0xKSl0aHJvdyBuZXcgRXJyb3IoIkNhbm5vdCBjYXN0IG11bHRpLWNvbXBvbmVudCBpbWFnZSB0byBhIHNjYWxhciBpbWFnZSIpO3R5cGVvZiBlPCJ1IiYmdHlwZW9mIGUuY29tcG9uZW50VHlwZTwidSImJmUuY29tcG9uZW50VHlwZSE9PUEuaW1hZ2VUeXBlLmNvbXBvbmVudFR5cGUmJihyLmNvbXBvbmVudFR5cGU9ZS5jb21wb25lbnRUeXBlKTtsZXQgdD1uZXcgVWUocik7aWYodC5uYW1lPUEubmFtZSx0Lm9yaWdpbj1BcnJheS5mcm9tKEEub3JpZ2luKSx0LnNwYWNpbmc9QXJyYXkuZnJvbShBLnNwYWNpbmcpLHQuZGlyZWN0aW9uPUEuZGlyZWN0aW9uLnNsaWNlKCksdC5zaXplPUFycmF5LmZyb20oQS5zaXplKSx0Lm1ldGFkYXRhPW5ldyBNYXAoSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShBcnJheS5mcm9tKEEubWV0YWRhdGEpKSkpLEEuZGF0YSE9PW51bGwpaWYodHlwZW9mIGU8InUiJiZ0eXBlb2YgZS5jb21wb25lbnRUeXBlPCJ1IiYmZS5jb21wb25lbnRUeXBlIT09QS5pbWFnZVR5cGUuY29tcG9uZW50VHlwZSlzd2l0Y2goQS5pbWFnZVR5cGUuY29tcG9uZW50VHlwZSl7Y2FzZSBwLlVJbnQ4OmNhc2UgcC5JbnQ4OmNhc2UgcC5VSW50MTY6Y2FzZSBwLkludDE2OmNhc2UgcC5VSW50MzI6Y2FzZSBwLkludDMyOmNhc2UgUi5GbG9hdDMyOmNhc2UgUi5GbG9hdDY0OnN3aXRjaCh0LmltYWdlVHlwZS5jb21wb25lbnRUeXBlKXtjYXNlIHAuVUludDg6dC5kYXRhPW5ldyBVaW50OEFycmF5KEEuZGF0YSk7YnJlYWs7Y2FzZSBwLkludDg6dC5kYXRhPW5ldyBJbnQ4QXJyYXkoQS5kYXRhKTticmVhaztjYXNlIHAuVUludDE2OnQuZGF0YT1uZXcgVWludDE2QXJyYXkoQS5kYXRhKTticmVhaztjYXNlIHAuSW50MTY6dC5kYXRhPW5ldyBJbnQxNkFycmF5KEEuZGF0YSk7YnJlYWs7Y2FzZSBwLlVJbnQzMjp0LmRhdGE9bmV3IFVpbnQzMkFycmF5KEEuZGF0YSk7YnJlYWs7Y2FzZSBwLkludDMyOnQuZGF0YT1uZXcgSW50MzJBcnJheShBLmRhdGEpO2JyZWFrO2Nhc2UgUi5GbG9hdDMyOnQuZGF0YT1uZXcgRmxvYXQzMkFycmF5KEEuZGF0YSk7YnJlYWs7Y2FzZSBSLkZsb2F0NjQ6dC5kYXRhPW5ldyBGbG9hdDY0QXJyYXkoQS5kYXRhKTticmVhaztjYXNlIHAuVUludDY0OnQuZGF0YT1uZXcgQmlnVWludDY0QXJyYXkoQS5kYXRhLmxlbmd0aCk7Zm9yKGxldCBuPTA7bjx0LmRhdGEubGVuZ3RoO24rKyl0LmRhdGFbbl09QmlnSW50LmFzSW50Tig2NCxCaWdJbnQoQS5kYXRhW25dKSk7YnJlYWs7Y2FzZSBwLkludDY0OnQuZGF0YT1uZXcgQmlnSW50NjRBcnJheShBLmRhdGEubGVuZ3RoKTtmb3IobGV0IG49MDtuPHQuZGF0YS5sZW5ndGg7bisrKXQuZGF0YVtuXT1CaWdJbnQuYXNVaW50Tig2NCxCaWdJbnQoQS5kYXRhW25dKSk7YnJlYWt9YnJlYWs7Y2FzZSBwLlVJbnQ2NDpjYXNlIHAuSW50NjQ6c3dpdGNoKHQuaW1hZ2VUeXBlLmNvbXBvbmVudFR5cGUpe2Nhc2UgcC5VSW50ODp0LmRhdGE9bmV3IFVpbnQ4QXJyYXkoQS5kYXRhLmxlbmd0aCk7Zm9yKGxldCBuPTA7bjx0LmRhdGEubGVuZ3RoO24rKyl0LmRhdGFbbl09TnVtYmVyKEEuZGF0YVtuXSk7YnJlYWs7Y2FzZSBwLkludDg6dC5kYXRhPW5ldyBJbnQ4QXJyYXkoQS5kYXRhLmxlbmd0aCk7Zm9yKGxldCBuPTA7bjx0LmRhdGEubGVuZ3RoO24rKyl0LmRhdGFbbl09TnVtYmVyKEEuZGF0YVtuXSk7YnJlYWs7Y2FzZSBwLlVJbnQxNjp0LmRhdGE9bmV3IFVpbnQxNkFycmF5KEEuZGF0YS5sZW5ndGgpO2ZvcihsZXQgbj0wO248dC5kYXRhLmxlbmd0aDtuKyspdC5kYXRhW25dPU51bWJlcihBLmRhdGFbbl0pO2JyZWFrO2Nhc2UgcC5JbnQxNjp0LmRhdGE9bmV3IEludDE2QXJyYXkoQS5kYXRhLmxlbmd0aCk7Zm9yKGxldCBuPTA7bjx0LmRhdGEubGVuZ3RoO24rKyl0LmRhdGFbbl09TnVtYmVyKEEuZGF0YVtuXSk7YnJlYWs7Y2FzZSBwLlVJbnQzMjp0LmRhdGE9bmV3IFVpbnQzMkFycmF5KEEuZGF0YS5sZW5ndGgpO2ZvcihsZXQgbj0wO248dC5kYXRhLmxlbmd0aDtuKyspdC5kYXRhW25dPU51bWJlcihBLmRhdGFbbl0pO2JyZWFrO2Nhc2UgcC5JbnQzMjp0LmRhdGE9bmV3IEludDMyQXJyYXkoQS5kYXRhLmxlbmd0aCk7Zm9yKGxldCBuPTA7bjx0LmRhdGEubGVuZ3RoO24rKyl0LmRhdGFbbl09TnVtYmVyKEEuZGF0YVtuXSk7YnJlYWs7Y2FzZSBSLkZsb2F0MzI6dC5kYXRhPW5ldyBGbG9hdDMyQXJyYXkoQS5kYXRhLmxlbmd0aCk7Zm9yKGxldCBuPTA7bjx0LmRhdGEubGVuZ3RoO24rKyl0LmRhdGFbbl09TnVtYmVyKEEuZGF0YVtuXSk7YnJlYWs7Y2FzZSBSLkZsb2F0NjQ6dC5kYXRhPW5ldyBGbG9hdDY0QXJyYXkoQS5kYXRhLmxlbmd0aCk7Zm9yKGxldCBuPTA7bjx0LmRhdGEubGVuZ3RoO24rKyl0LmRhdGFbbl09TnVtYmVyKEEuZGF0YVtuXSk7YnJlYWs7Y2FzZSBwLlVJbnQ2NDp0LmRhdGE9bmV3IEJpZ1VpbnQ2NEFycmF5KEEuZGF0YSk7YnJlYWs7Y2FzZSBwLkludDY0OnQuZGF0YT1uZXcgQmlnSW50NjRBcnJheShBLmRhdGEpO2JyZWFrfWJyZWFrfWVsc2V7bGV0IG49QS5kYXRhLmNvbnN0cnVjdG9yO3QuZGF0YT1uZXcgbihBLmRhdGEubGVuZ3RoKSx0LmRhdGEhPW51bGwmJnQuZGF0YS5zZXQoQS5kYXRhLDApfXJldHVybiB0fXZhciBFQT1Bcjt2YXIgZXI9e1RleHRGaWxlOiJUZXh0RmlsZSIsQmluYXJ5RmlsZToiQmluYXJ5RmlsZSIsVGV4dFN0cmVhbToiVGV4dFN0cmVhbSIsQmluYXJ5U3RyZWFtOiJCaW5hcnlTdHJlYW0iLEltYWdlOiJJbWFnZSIsUG9pbnRTZXQ6IlBvaW50U2V0IixNZXNoOiJNZXNoIixQb2x5RGF0YToiUG9seURhdGEiLFRyYW5zZm9ybUxpc3Q6IlRyYW5zZm9ybUxpc3QiLEpzb25Db21wYXRpYmxlOiJKc29uQ29tcGF0aWJsZSJ9LG09ZXI7dmFyIFRlPVN5bWJvbCgiQ29tbGluay5wcm94eSIpLHRyPVN5bWJvbCgiQ29tbGluay5lbmRwb2ludCIpLGpBPVN5bWJvbCgiQ29tbGluay5yZWxlYXNlUHJveHkiKSx2QT1TeW1ib2woIkNvbWxpbmsuZmluYWxpemVyIiksdUE9U3ltYm9sKCJDb21saW5rLnRocm93biIpLExlPUE9PnR5cGVvZiBBPT0ib2JqZWN0IiYmQSE9PW51bGx8fHR5cGVvZiBBPT0iZnVuY3Rpb24iLHJyPXtjYW5IYW5kbGU6QT0+TGUoQSkmJkFbVGVdLHNlcmlhbGl6ZShBKXtsZXR7cG9ydDE6ZSxwb3J0MjpyfT1uZXcgTWVzc2FnZUNoYW5uZWw7cmV0dXJuIHhlKEEsZSksW3IsW3JdXX0sZGVzZXJpYWxpemUoQSl7cmV0dXJuIEEuc3RhcnQoKSxfQShBKX19LG5yPXtjYW5IYW5kbGU6QT0+TGUoQSkmJnVBIGluIEEsc2VyaWFsaXplKHt2YWx1ZTpBfSl7bGV0IGU7cmV0dXJuIEEgaW5zdGFuY2VvZiBFcnJvcj9lPXtpc0Vycm9yOiEwLHZhbHVlOnttZXNzYWdlOkEubWVzc2FnZSxuYW1lOkEubmFtZSxzdGFjazpBLnN0YWNrfX06ZT17aXNFcnJvcjohMSx2YWx1ZTpBfSxbZSxbXV19LGRlc2VyaWFsaXplKEEpe3Rocm93IEEuaXNFcnJvcj9PYmplY3QuYXNzaWduKG5ldyBFcnJvcihBLnZhbHVlLm1lc3NhZ2UpLEEudmFsdWUpOkEudmFsdWV9fSxHZT1uZXcgTWFwKFtbInByb3h5Iixycl0sWyJ0aHJvdyIsbnJdXSk7ZnVuY3Rpb24gb3IoQSxlKXtmb3IobGV0IHIgb2YgQSlpZihlPT09cnx8cj09PSIqInx8ciBpbnN0YW5jZW9mIFJlZ0V4cCYmci50ZXN0KGUpKXJldHVybiEwO3JldHVybiExfWZ1bmN0aW9uIHhlKEEsZT1nbG9iYWxUaGlzLHI9WyIqIl0pe2UuYWRkRXZlbnRMaXN0ZW5lcigibWVzc2FnZSIsZnVuY3Rpb24gdChuKXtpZighbnx8IW4uZGF0YSlyZXR1cm47aWYoIW9yKHIsbi5vcmlnaW4pKXtjb25zb2xlLndhcm4oYEludmFsaWQgb3JpZ2luICcke24ub3JpZ2lufScgZm9yIGNvbWxpbmsgcHJveHlgKTtyZXR1cm59bGV0e2lkOm8sdHlwZTppLHBhdGg6bH09T2JqZWN0LmFzc2lnbih7cGF0aDpbXX0sbi5kYXRhKSxjPShuLmRhdGEuYXJndW1lbnRMaXN0fHxbXSkubWFwKFkpLEM7dHJ5e2xldCBzPWwuc2xpY2UoMCwtMSkucmVkdWNlKChmLGcpPT5mW2ddLEEpLEk9bC5yZWR1Y2UoKGYsZyk9PmZbZ10sQSk7c3dpdGNoKGkpe2Nhc2UiR0VUIjpDPUk7YnJlYWs7Y2FzZSJTRVQiOnNbbC5zbGljZSgtMSlbMF1dPVkobi5kYXRhLnZhbHVlKSxDPSEwO2JyZWFrO2Nhc2UiQVBQTFkiOkM9SS5hcHBseShzLGMpO2JyZWFrO2Nhc2UiQ09OU1RSVUNUIjp7bGV0IGY9bmV3IEkoLi4uYyk7Qz1ncihmKX1icmVhaztjYXNlIkVORFBPSU5UIjp7bGV0e3BvcnQxOmYscG9ydDI6Z309bmV3IE1lc3NhZ2VDaGFubmVsO3hlKEEsZyksQz1WQShmLFtmXSl9YnJlYWs7Y2FzZSJSRUxFQVNFIjpDPXZvaWQgMDticmVhaztkZWZhdWx0OnJldHVybn19Y2F0Y2gocyl7Qz17dmFsdWU6cyxbdUFdOjB9fVByb21pc2UucmVzb2x2ZShDKS5jYXRjaChzPT4oe3ZhbHVlOnMsW3VBXTowfSkpLnRoZW4ocz0+e2xldFtJLGZdPWRBKHMpO2UucG9zdE1lc3NhZ2UoT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LEkpLHtpZDpvfSksZiksaT09PSJSRUxFQVNFIiYmKGUucmVtb3ZlRXZlbnRMaXN0ZW5lcigibWVzc2FnZSIsdCksT2UoZSksdkEgaW4gQSYmdHlwZW9mIEFbdkFdPT0iZnVuY3Rpb24iJiZBW3ZBXSgpKX0pLmNhdGNoKHM9PntsZXRbSSxmXT1kQSh7dmFsdWU6bmV3IFR5cGVFcnJvcigiVW5zZXJpYWxpemFibGUgcmV0dXJuIHZhbHVlIiksW3VBXTowfSk7ZS5wb3N0TWVzc2FnZShPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sSSkse2lkOm99KSxmKX0pfSksZS5zdGFydCYmZS5zdGFydCgpfWZ1bmN0aW9uIGlyKEEpe3JldHVybiBBLmNvbnN0cnVjdG9yLm5hbWU9PT0iTWVzc2FnZVBvcnQifWZ1bmN0aW9uIE9lKEEpe2lyKEEpJiZBLmNsb3NlKCl9ZnVuY3Rpb24gX0EoQSxlKXtyZXR1cm4gV0EoQSxbXSxlKX1mdW5jdGlvbiBmQShBKXtpZihBKXRocm93IG5ldyBFcnJvcigiUHJveHkgaGFzIGJlZW4gcmVsZWFzZWQgYW5kIGlzIG5vdCB1c2VhYmxlIil9ZnVuY3Rpb24gUGUoQSl7cmV0dXJuIHYoQSx7dHlwZToiUkVMRUFTRSJ9KS50aGVuKCgpPT57T2UoQSl9KX12YXIgUUE9bmV3IFdlYWtNYXAscEE9IkZpbmFsaXphdGlvblJlZ2lzdHJ5ImluIGdsb2JhbFRoaXMmJm5ldyBGaW5hbGl6YXRpb25SZWdpc3RyeShBPT57bGV0IGU9KFFBLmdldChBKXx8MCktMTtRQS5zZXQoQSxlKSxlPT09MCYmUGUoQSl9KTtmdW5jdGlvbiBhcihBLGUpe2xldCByPShRQS5nZXQoZSl8fDApKzE7UUEuc2V0KGUscikscEEmJnBBLnJlZ2lzdGVyKEEsZSxBKX1mdW5jdGlvbiBzcihBKXtwQSYmcEEudW5yZWdpc3RlcihBKX1mdW5jdGlvbiBXQShBLGU9W10scj1mdW5jdGlvbigpe30pe2xldCB0PSExLG49bmV3IFByb3h5KHIse2dldChvLGkpe2lmKGZBKHQpLGk9PT1qQSlyZXR1cm4oKT0+e3NyKG4pLFBlKEEpLHQ9ITB9O2lmKGk9PT0idGhlbiIpe2lmKGUubGVuZ3RoPT09MClyZXR1cm57dGhlbjooKT0+bn07bGV0IGw9dihBLHt0eXBlOiJHRVQiLHBhdGg6ZS5tYXAoYz0+Yy50b1N0cmluZygpKX0pLnRoZW4oWSk7cmV0dXJuIGwudGhlbi5iaW5kKGwpfXJldHVybiBXQShBLFsuLi5lLGldKX0sc2V0KG8saSxsKXtmQSh0KTtsZXRbYyxDXT1kQShsKTtyZXR1cm4gdihBLHt0eXBlOiJTRVQiLHBhdGg6Wy4uLmUsaV0ubWFwKHM9PnMudG9TdHJpbmcoKSksdmFsdWU6Y30sQykudGhlbihZKX0sYXBwbHkobyxpLGwpe2ZBKHQpO2xldCBjPWVbZS5sZW5ndGgtMV07aWYoYz09PXRyKXJldHVybiB2KEEse3R5cGU6IkVORFBPSU5UIn0pLnRoZW4oWSk7aWYoYz09PSJiaW5kIilyZXR1cm4gV0EoQSxlLnNsaWNlKDAsLTEpKTtsZXRbQyxzXT1OZShsKTtyZXR1cm4gdihBLHt0eXBlOiJBUFBMWSIscGF0aDplLm1hcChJPT5JLnRvU3RyaW5nKCkpLGFyZ3VtZW50TGlzdDpDfSxzKS50aGVuKFkpfSxjb25zdHJ1Y3QobyxpKXtmQSh0KTtsZXRbbCxjXT1OZShpKTtyZXR1cm4gdihBLHt0eXBlOiJDT05TVFJVQ1QiLHBhdGg6ZS5tYXAoQz0+Qy50b1N0cmluZygpKSxhcmd1bWVudExpc3Q6bH0sYykudGhlbihZKX19KTtyZXR1cm4gYXIobixBKSxufWZ1bmN0aW9uIElyKEEpe3JldHVybiBBcnJheS5wcm90b3R5cGUuY29uY2F0LmFwcGx5KFtdLEEpfWZ1bmN0aW9uIE5lKEEpe2xldCBlPUEubWFwKGRBKTtyZXR1cm5bZS5tYXAocj0+clswXSksSXIoZS5tYXAocj0+clsxXSkpXX12YXIgSmU9bmV3IFdlYWtNYXA7ZnVuY3Rpb24gVkEoQSxlKXtyZXR1cm4gSmUuc2V0KEEsZSksQX1mdW5jdGlvbiBncihBKXtyZXR1cm4gT2JqZWN0LmFzc2lnbihBLHtbVGVdOiEwfSl9ZnVuY3Rpb24gZEEoQSl7Zm9yKGxldFtlLHJdb2YgR2UpaWYoci5jYW5IYW5kbGUoQSkpe2xldFt0LG5dPXIuc2VyaWFsaXplKEEpO3JldHVyblt7dHlwZToiSEFORExFUiIsbmFtZTplLHZhbHVlOnR9LG5dfXJldHVyblt7dHlwZToiUkFXIix2YWx1ZTpBfSxKZS5nZXQoQSl8fFtdXX1mdW5jdGlvbiBZKEEpe3N3aXRjaChBLnR5cGUpe2Nhc2UiSEFORExFUiI6cmV0dXJuIEdlLmdldChBLm5hbWUpLmRlc2VyaWFsaXplKEEudmFsdWUpO2Nhc2UiUkFXIjpyZXR1cm4gQS52YWx1ZX19ZnVuY3Rpb24gdihBLGUscil7cmV0dXJuIG5ldyBQcm9taXNlKHQ9PntsZXQgbj1scigpO0EuYWRkRXZlbnRMaXN0ZW5lcigibWVzc2FnZSIsZnVuY3Rpb24gbyhpKXshaS5kYXRhfHwhaS5kYXRhLmlkfHxpLmRhdGEuaWQhPT1ufHwoQS5yZW1vdmVFdmVudExpc3RlbmVyKCJtZXNzYWdlIixvKSx0KGkuZGF0YSkpfSksQS5zdGFydCYmQS5zdGFydCgpLEEucG9zdE1lc3NhZ2UoT2JqZWN0LmFzc2lnbih7aWQ6bn0sZSkscil9KX1mdW5jdGlvbiBscigpe3JldHVybiBuZXcgQXJyYXkoNCkuZmlsbCgwKS5tYXAoKCk9Pk1hdGguZmxvb3IoTWF0aC5yYW5kb20oKSpOdW1iZXIuTUFYX1NBRkVfSU5URUdFUikudG9TdHJpbmcoMTYpKS5qb2luKCItIil9ZnVuY3Rpb24gZUEoQSxlKXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gQS5hcHBseShlLGFyZ3VtZW50cyl9fXZhcnt0b1N0cmluZzpDcn09T2JqZWN0LnByb3RvdHlwZSx7Z2V0UHJvdG90eXBlT2Y6WEF9PU9iamVjdCxoQT0oQT0+ZT0+e2xldCByPUNyLmNhbGwoZSk7cmV0dXJuIEFbcl18fChBW3JdPXIuc2xpY2UoOCwtMSkudG9Mb3dlckNhc2UoKSl9KShPYmplY3QuY3JlYXRlKG51bGwpKSxUPUE9PihBPUEudG9Mb3dlckNhc2UoKSxlPT5oQShlKT09PUEpLHlBPUE9PmU9PnR5cGVvZiBlPT09QSx7aXNBcnJheTpXfT1BcnJheSx0QT15QSgidW5kZWZpbmVkIik7ZnVuY3Rpb24gY3IoQSl7cmV0dXJuIEEhPT1udWxsJiYhdEEoQSkmJkEuY29uc3RydWN0b3IhPT1udWxsJiYhdEEoQS5jb25zdHJ1Y3RvcikmJlUoQS5jb25zdHJ1Y3Rvci5pc0J1ZmZlcikmJkEuY29uc3RydWN0b3IuaXNCdWZmZXIoQSl9dmFyIFllPVQoIkFycmF5QnVmZmVyIik7ZnVuY3Rpb24gQnIoQSl7bGV0IGU7cmV0dXJuIHR5cGVvZiBBcnJheUJ1ZmZlcjwidSImJkFycmF5QnVmZmVyLmlzVmlldz9lPUFycmF5QnVmZmVyLmlzVmlldyhBKTplPUEmJkEuYnVmZmVyJiZZZShBLmJ1ZmZlciksZX12YXIgRXI9eUEoInN0cmluZyIpLFU9eUEoImZ1bmN0aW9uIiksS2U9eUEoIm51bWJlciIpLHdBPUE9PkEhPT1udWxsJiZ0eXBlb2YgQT09Im9iamVjdCIsZnI9QT0+QT09PSEwfHxBPT09ITEsbUE9QT0+e2lmKGhBKEEpIT09Im9iamVjdCIpcmV0dXJuITE7bGV0IGU9WEEoQSk7cmV0dXJuKGU9PT1udWxsfHxlPT09T2JqZWN0LnByb3RvdHlwZXx8T2JqZWN0LmdldFByb3RvdHlwZU9mKGUpPT09bnVsbCkmJiEoU3ltYm9sLnRvU3RyaW5nVGFnIGluIEEpJiYhKFN5bWJvbC5pdGVyYXRvciBpbiBBKX0sdXI9VCgiRGF0ZSIpLFFyPVQoIkZpbGUiKSxwcj1UKCJCbG9iIiksZHI9VCgiRmlsZUxpc3QiKSxtcj1BPT53QShBKSYmVShBLnBpcGUpLGhyPUE9PntsZXQgZTtyZXR1cm4gQSYmKHR5cGVvZiBGb3JtRGF0YT09ImZ1bmN0aW9uIiYmQSBpbnN0YW5jZW9mIEZvcm1EYXRhfHxVKEEuYXBwZW5kKSYmKChlPWhBKEEpKT09PSJmb3JtZGF0YSJ8fGU9PT0ib2JqZWN0IiYmVShBLnRvU3RyaW5nKSYmQS50b1N0cmluZygpPT09IltvYmplY3QgRm9ybURhdGFdIikpfSx5cj1UKCJVUkxTZWFyY2hQYXJhbXMiKSxbd3IsRHIsU3IsYnJdPVsiUmVhZGFibGVTdHJlYW0iLCJSZXF1ZXN0IiwiUmVzcG9uc2UiLCJIZWFkZXJzIl0ubWFwKFQpLFJyPUE9PkEudHJpbT9BLnRyaW0oKTpBLnJlcGxhY2UoL15bXHNcdUZFRkZceEEwXSt8W1xzXHVGRUZGXHhBMF0rJC9nLCIiKTtmdW5jdGlvbiByQShBLGUse2FsbE93bktleXM6cj0hMX09e30pe2lmKEE9PT1udWxsfHx0eXBlb2YgQT4idSIpcmV0dXJuO2xldCB0LG47aWYodHlwZW9mIEEhPSJvYmplY3QiJiYoQT1bQV0pLFcoQSkpZm9yKHQ9MCxuPUEubGVuZ3RoO3Q8bjt0KyspZS5jYWxsKG51bGwsQVt0XSx0LEEpO2Vsc2V7bGV0IG89cj9PYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhBKTpPYmplY3Qua2V5cyhBKSxpPW8ubGVuZ3RoLGw7Zm9yKHQ9MDt0PGk7dCsrKWw9b1t0XSxlLmNhbGwobnVsbCxBW2xdLGwsQSl9fWZ1bmN0aW9uIHZlKEEsZSl7ZT1lLnRvTG93ZXJDYXNlKCk7bGV0IHI9T2JqZWN0LmtleXMoQSksdD1yLmxlbmd0aCxuO2Zvcig7dC0tID4wOylpZihuPXJbdF0sZT09PW4udG9Mb3dlckNhc2UoKSlyZXR1cm4gbjtyZXR1cm4gbnVsbH12YXIgSz10eXBlb2YgZ2xvYmFsVGhpczwidSI/Z2xvYmFsVGhpczp0eXBlb2Ygc2VsZjwidSI/c2VsZjp0eXBlb2Ygd2luZG93PCJ1Ij93aW5kb3c6Z2xvYmFsLFdlPUE9PiF0QShBKSYmQSE9PUs7ZnVuY3Rpb24gWkEoKXtsZXR7Y2FzZWxlc3M6QX09V2UodGhpcykmJnRoaXN8fHt9LGU9e30scj0odCxuKT0+e2xldCBvPUEmJnZlKGUsbil8fG47bUEoZVtvXSkmJm1BKHQpP2Vbb109WkEoZVtvXSx0KTptQSh0KT9lW29dPVpBKHt9LHQpOlcodCk/ZVtvXT10LnNsaWNlKCk6ZVtvXT10fTtmb3IobGV0IHQ9MCxuPWFyZ3VtZW50cy5sZW5ndGg7dDxuO3QrKylhcmd1bWVudHNbdF0mJnJBKGFyZ3VtZW50c1t0XSxyKTtyZXR1cm4gZX12YXIgRnI9KEEsZSxyLHthbGxPd25LZXlzOnR9PXt9KT0+KHJBKGUsKG4sbyk9PntyJiZVKG4pP0Fbb109ZUEobixyKTpBW29dPW59LHthbGxPd25LZXlzOnR9KSxBKSxrcj1BPT4oQS5jaGFyQ29kZUF0KDApPT09NjUyNzkmJihBPUEuc2xpY2UoMSkpLEEpLFVyPShBLGUscix0KT0+e0EucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoZS5wcm90b3R5cGUsdCksQS5wcm90b3R5cGUuY29uc3RydWN0b3I9QSxPYmplY3QuZGVmaW5lUHJvcGVydHkoQSwic3VwZXIiLHt2YWx1ZTplLnByb3RvdHlwZX0pLHImJk9iamVjdC5hc3NpZ24oQS5wcm90b3R5cGUscil9LE5yPShBLGUscix0KT0+e2xldCBuLG8saSxsPXt9O2lmKGU9ZXx8e30sQT09bnVsbClyZXR1cm4gZTtkb3tmb3Iobj1PYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhBKSxvPW4ubGVuZ3RoO28tLSA+MDspaT1uW29dLCghdHx8dChpLEEsZSkpJiYhbFtpXSYmKGVbaV09QVtpXSxsW2ldPSEwKTtBPXIhPT0hMSYmWEEoQSl9d2hpbGUoQSYmKCFyfHxyKEEsZSkpJiZBIT09T2JqZWN0LnByb3RvdHlwZSk7cmV0dXJuIGV9LFRyPShBLGUscik9PntBPVN0cmluZyhBKSwocj09PXZvaWQgMHx8cj5BLmxlbmd0aCkmJihyPUEubGVuZ3RoKSxyLT1lLmxlbmd0aDtsZXQgdD1BLmluZGV4T2YoZSxyKTtyZXR1cm4gdCE9PS0xJiZ0PT09cn0sTHI9QT0+e2lmKCFBKXJldHVybiBudWxsO2lmKFcoQSkpcmV0dXJuIEE7bGV0IGU9QS5sZW5ndGg7aWYoIUtlKGUpKXJldHVybiBudWxsO2xldCByPW5ldyBBcnJheShlKTtmb3IoO2UtLSA+MDspcltlXT1BW2VdO3JldHVybiByfSxHcj0oQT0+ZT0+QSYmZSBpbnN0YW5jZW9mIEEpKHR5cGVvZiBVaW50OEFycmF5PCJ1IiYmWEEoVWludDhBcnJheSkpLHhyPShBLGUpPT57bGV0IHQ9KEEmJkFbU3ltYm9sLml0ZXJhdG9yXSkuY2FsbChBKSxuO2Zvcig7KG49dC5uZXh0KCkpJiYhbi5kb25lOyl7bGV0IG89bi52YWx1ZTtlLmNhbGwoQSxvWzBdLG9bMV0pfX0sT3I9KEEsZSk9PntsZXQgcix0PVtdO2Zvcig7KHI9QS5leGVjKGUpKSE9PW51bGw7KXQucHVzaChyKTtyZXR1cm4gdH0sUHI9VCgiSFRNTEZvcm1FbGVtZW50IiksSnI9QT0+QS50b0xvd2VyQ2FzZSgpLnJlcGxhY2UoL1stX1xzXShbYS16XGRdKShcdyopL2csZnVuY3Rpb24ocix0LG4pe3JldHVybiB0LnRvVXBwZXJDYXNlKCkrbn0pLEhlPSgoe2hhc093blByb3BlcnR5OkF9KT0+KGUscik9PkEuY2FsbChlLHIpKShPYmplY3QucHJvdG90eXBlKSxNcj1UKCJSZWdFeHAiKSxqZT0oQSxlKT0+e2xldCByPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKEEpLHQ9e307ckEociwobixvKT0+e2xldCBpOyhpPWUobixvLEEpKSE9PSExJiYodFtvXT1pfHxuKX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKEEsdCl9LEhyPUE9PntqZShBLChlLHIpPT57aWYoVShBKSYmWyJhcmd1bWVudHMiLCJjYWxsZXIiLCJjYWxsZWUiXS5pbmRleE9mKHIpIT09LTEpcmV0dXJuITE7bGV0IHQ9QVtyXTtpZihVKHQpKXtpZihlLmVudW1lcmFibGU9ITEsIndyaXRhYmxlImluIGUpe2Uud3JpdGFibGU9ITE7cmV0dXJufWUuc2V0fHwoZS5zZXQ9KCk9Pnt0aHJvdyBFcnJvcigiQ2FuIG5vdCByZXdyaXRlIHJlYWQtb25seSBtZXRob2QgJyIrcisiJyIpfSl9fSl9LHFyPShBLGUpPT57bGV0IHI9e30sdD1uPT57bi5mb3JFYWNoKG89PntyW29dPSEwfSl9O3JldHVybiBXKEEpP3QoQSk6dChTdHJpbmcoQSkuc3BsaXQoZSkpLHJ9LFlyPSgpPT57fSxLcj0oQSxlKT0+QSE9bnVsbCYmTnVtYmVyLmlzRmluaXRlKEE9K0EpP0E6ZSx6QT0iYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXoiLHFlPSIwMTIzNDU2Nzg5IixfZT17RElHSVQ6cWUsQUxQSEE6ekEsQUxQSEFfRElHSVQ6ekErekEudG9VcHBlckNhc2UoKStxZX0sdnI9KEE9MTYsZT1fZS5BTFBIQV9ESUdJVCk9PntsZXQgcj0iIix7bGVuZ3RoOnR9PWU7Zm9yKDtBLS07KXIrPWVbTWF0aC5yYW5kb20oKSp0fDBdO3JldHVybiByfTtmdW5jdGlvbiBXcihBKXtyZXR1cm4hIShBJiZVKEEuYXBwZW5kKSYmQVtTeW1ib2wudG9TdHJpbmdUYWddPT09IkZvcm1EYXRhIiYmQVtTeW1ib2wuaXRlcmF0b3JdKX12YXIganI9QT0+e2xldCBlPW5ldyBBcnJheSgxMCkscj0odCxuKT0+e2lmKHdBKHQpKXtpZihlLmluZGV4T2YodCk+PTApcmV0dXJuO2lmKCEoInRvSlNPTiJpbiB0KSl7ZVtuXT10O2xldCBvPVcodCk/W106e307cmV0dXJuIHJBKHQsKGksbCk9PntsZXQgYz1yKGksbisxKTshdEEoYykmJihvW2xdPWMpfSksZVtuXT12b2lkIDAsb319cmV0dXJuIHR9O3JldHVybiByKEEsMCl9LF9yPVQoIkFzeW5jRnVuY3Rpb24iKSxWcj1BPT5BJiYod0EoQSl8fFUoQSkpJiZVKEEudGhlbikmJlUoQS5jYXRjaCksVmU9KChBLGUpPT5BP3NldEltbWVkaWF0ZTplPygocix0KT0+KEsuYWRkRXZlbnRMaXN0ZW5lcigibWVzc2FnZSIsKHtzb3VyY2U6bixkYXRhOm99KT0+e249PT1LJiZvPT09ciYmdC5sZW5ndGgmJnQuc2hpZnQoKSgpfSwhMSksbj0+e3QucHVzaChuKSxLLnBvc3RNZXNzYWdlKHIsIioiKX0pKShgYXhpb3NAJHtNYXRoLnJhbmRvbSgpfWAsW10pOnI9PnNldFRpbWVvdXQocikpKHR5cGVvZiBzZXRJbW1lZGlhdGU9PSJmdW5jdGlvbiIsVShLLnBvc3RNZXNzYWdlKSksenI9dHlwZW9mIHF1ZXVlTWljcm90YXNrPCJ1Ij9xdWV1ZU1pY3JvdGFzay5iaW5kKEspOnR5cGVvZiBwcm9jZXNzPCJ1IiYmcHJvY2Vzcy5uZXh0VGlja3x8VmUsYT17aXNBcnJheTpXLGlzQXJyYXlCdWZmZXI6WWUsaXNCdWZmZXI6Y3IsaXNGb3JtRGF0YTpocixpc0FycmF5QnVmZmVyVmlldzpCcixpc1N0cmluZzpFcixpc051bWJlcjpLZSxpc0Jvb2xlYW46ZnIsaXNPYmplY3Q6d0EsaXNQbGFpbk9iamVjdDptQSxpc1JlYWRhYmxlU3RyZWFtOndyLGlzUmVxdWVzdDpEcixpc1Jlc3BvbnNlOlNyLGlzSGVhZGVyczpicixpc1VuZGVmaW5lZDp0QSxpc0RhdGU6dXIsaXNGaWxlOlFyLGlzQmxvYjpwcixpc1JlZ0V4cDpNcixpc0Z1bmN0aW9uOlUsaXNTdHJlYW06bXIsaXNVUkxTZWFyY2hQYXJhbXM6eXIsaXNUeXBlZEFycmF5OkdyLGlzRmlsZUxpc3Q6ZHIsZm9yRWFjaDpyQSxtZXJnZTpaQSxleHRlbmQ6RnIsdHJpbTpScixzdHJpcEJPTTprcixpbmhlcml0czpVcix0b0ZsYXRPYmplY3Q6TnIsa2luZE9mOmhBLGtpbmRPZlRlc3Q6VCxlbmRzV2l0aDpUcix0b0FycmF5OkxyLGZvckVhY2hFbnRyeTp4cixtYXRjaEFsbDpPcixpc0hUTUxGb3JtOlByLGhhc093blByb3BlcnR5OkhlLGhhc093blByb3A6SGUscmVkdWNlRGVzY3JpcHRvcnM6amUsZnJlZXplTWV0aG9kczpIcix0b09iamVjdFNldDpxcix0b0NhbWVsQ2FzZTpKcixub29wOllyLHRvRmluaXRlTnVtYmVyOktyLGZpbmRLZXk6dmUsZ2xvYmFsOkssaXNDb250ZXh0RGVmaW5lZDpXZSxBTFBIQUJFVDpfZSxnZW5lcmF0ZVN0cmluZzp2cixpc1NwZWNDb21wbGlhbnRGb3JtOldyLHRvSlNPTk9iamVjdDpqcixpc0FzeW5jRm46X3IsaXNUaGVuYWJsZTpWcixzZXRJbW1lZGlhdGU6VmUsYXNhcDp6cn07ZnVuY3Rpb24gaihBLGUscix0LG4pe0Vycm9yLmNhbGwodGhpcyksRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2U/RXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UodGhpcyx0aGlzLmNvbnN0cnVjdG9yKTp0aGlzLnN0YWNrPW5ldyBFcnJvcigpLnN0YWNrLHRoaXMubWVzc2FnZT1BLHRoaXMubmFtZT0iQXhpb3NFcnJvciIsZSYmKHRoaXMuY29kZT1lKSxyJiYodGhpcy5jb25maWc9ciksdCYmKHRoaXMucmVxdWVzdD10KSxuJiYodGhpcy5yZXNwb25zZT1uKX1hLmluaGVyaXRzKGosRXJyb3Ise3RvSlNPTjpmdW5jdGlvbigpe3JldHVybnttZXNzYWdlOnRoaXMubWVzc2FnZSxuYW1lOnRoaXMubmFtZSxkZXNjcmlwdGlvbjp0aGlzLmRlc2NyaXB0aW9uLG51bWJlcjp0aGlzLm51bWJlcixmaWxlTmFtZTp0aGlzLmZpbGVOYW1lLGxpbmVOdW1iZXI6dGhpcy5saW5lTnVtYmVyLGNvbHVtbk51bWJlcjp0aGlzLmNvbHVtbk51bWJlcixzdGFjazp0aGlzLnN0YWNrLGNvbmZpZzphLnRvSlNPTk9iamVjdCh0aGlzLmNvbmZpZyksY29kZTp0aGlzLmNvZGUsc3RhdHVzOnRoaXMucmVzcG9uc2UmJnRoaXMucmVzcG9uc2Uuc3RhdHVzP3RoaXMucmVzcG9uc2Uuc3RhdHVzOm51bGx9fX0pO3ZhciB6ZT1qLnByb3RvdHlwZSxaZT17fTtbIkVSUl9CQURfT1BUSU9OX1ZBTFVFIiwiRVJSX0JBRF9PUFRJT04iLCJFQ09OTkFCT1JURUQiLCJFVElNRURPVVQiLCJFUlJfTkVUV09SSyIsIkVSUl9GUl9UT09fTUFOWV9SRURJUkVDVFMiLCJFUlJfREVQUkVDQVRFRCIsIkVSUl9CQURfUkVTUE9OU0UiLCJFUlJfQkFEX1JFUVVFU1QiLCJFUlJfQ0FOQ0VMRUQiLCJFUlJfTk9UX1NVUFBPUlQiLCJFUlJfSU5WQUxJRF9VUkwiXS5mb3JFYWNoKEE9PntaZVtBXT17dmFsdWU6QX19KTtPYmplY3QuZGVmaW5lUHJvcGVydGllcyhqLFplKTtPYmplY3QuZGVmaW5lUHJvcGVydHkoemUsImlzQXhpb3NFcnJvciIse3ZhbHVlOiEwfSk7ai5mcm9tPShBLGUscix0LG4sbyk9PntsZXQgaT1PYmplY3QuY3JlYXRlKHplKTtyZXR1cm4gYS50b0ZsYXRPYmplY3QoQSxpLGZ1bmN0aW9uKGMpe3JldHVybiBjIT09RXJyb3IucHJvdG90eXBlfSxsPT5sIT09ImlzQXhpb3NFcnJvciIpLGouY2FsbChpLEEubWVzc2FnZSxlLHIsdCxuKSxpLmNhdXNlPUEsaS5uYW1lPUEubmFtZSxvJiZPYmplY3QuYXNzaWduKGksbyksaX07dmFyIFE9ajt2YXIgREE9bnVsbDtmdW5jdGlvbiAkQShBKXtyZXR1cm4gYS5pc1BsYWluT2JqZWN0KEEpfHxhLmlzQXJyYXkoQSl9ZnVuY3Rpb24gJGUoQSl7cmV0dXJuIGEuZW5kc1dpdGgoQSwiW10iKT9BLnNsaWNlKDAsLTIpOkF9ZnVuY3Rpb24gWGUoQSxlLHIpe3JldHVybiBBP0EuY29uY2F0KGUpLm1hcChmdW5jdGlvbihuLG8pe3JldHVybiBuPSRlKG4pLCFyJiZvPyJbIituKyJdIjpufSkuam9pbihyPyIuIjoiIik6ZX1mdW5jdGlvbiBacihBKXtyZXR1cm4gYS5pc0FycmF5KEEpJiYhQS5zb21lKCRBKX12YXIgWHI9YS50b0ZsYXRPYmplY3QoYSx7fSxudWxsLGZ1bmN0aW9uKGUpe3JldHVybi9eaXNbQS1aXS8udGVzdChlKX0pO2Z1bmN0aW9uICRyKEEsZSxyKXtpZighYS5pc09iamVjdChBKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJ0YXJnZXQgbXVzdCBiZSBhbiBvYmplY3QiKTtlPWV8fG5ldyhEQXx8Rm9ybURhdGEpLHI9YS50b0ZsYXRPYmplY3Qocix7bWV0YVRva2VuczohMCxkb3RzOiExLGluZGV4ZXM6ITF9LCExLGZ1bmN0aW9uKHUsQil7cmV0dXJuIWEuaXNVbmRlZmluZWQoQlt1XSl9KTtsZXQgdD1yLm1ldGFUb2tlbnMsbj1yLnZpc2l0b3J8fHMsbz1yLmRvdHMsaT1yLmluZGV4ZXMsYz0oci5CbG9ifHx0eXBlb2YgQmxvYjwidSImJkJsb2IpJiZhLmlzU3BlY0NvbXBsaWFudEZvcm0oZSk7aWYoIWEuaXNGdW5jdGlvbihuKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJ2aXNpdG9yIG11c3QgYmUgYSBmdW5jdGlvbiIpO2Z1bmN0aW9uIEMoRSl7aWYoRT09PW51bGwpcmV0dXJuIiI7aWYoYS5pc0RhdGUoRSkpcmV0dXJuIEUudG9JU09TdHJpbmcoKTtpZighYyYmYS5pc0Jsb2IoRSkpdGhyb3cgbmV3IFEoIkJsb2IgaXMgbm90IHN1cHBvcnRlZC4gVXNlIGEgQnVmZmVyIGluc3RlYWQuIik7cmV0dXJuIGEuaXNBcnJheUJ1ZmZlcihFKXx8YS5pc1R5cGVkQXJyYXkoRSk/YyYmdHlwZW9mIEJsb2I9PSJmdW5jdGlvbiI/bmV3IEJsb2IoW0VdKTpCdWZmZXIuZnJvbShFKTpFfWZ1bmN0aW9uIHMoRSx1LEIpe2xldCBoPUU7aWYoRSYmIUImJnR5cGVvZiBFPT0ib2JqZWN0Iil7aWYoYS5lbmRzV2l0aCh1LCJ7fSIpKXU9dD91OnUuc2xpY2UoMCwtMiksRT1KU09OLnN0cmluZ2lmeShFKTtlbHNlIGlmKGEuaXNBcnJheShFKSYmWnIoRSl8fChhLmlzRmlsZUxpc3QoRSl8fGEuZW5kc1dpdGgodSwiW10iKSkmJihoPWEudG9BcnJheShFKSkpcmV0dXJuIHU9JGUodSksaC5mb3JFYWNoKGZ1bmN0aW9uKGQsTil7IShhLmlzVW5kZWZpbmVkKGQpfHxkPT09bnVsbCkmJmUuYXBwZW5kKGk9PT0hMD9YZShbdV0sTixvKTppPT09bnVsbD91OnUrIltdIixDKGQpKX0pLCExfXJldHVybiAkQShFKT8hMDooZS5hcHBlbmQoWGUoQix1LG8pLEMoRSkpLCExKX1sZXQgST1bXSxmPU9iamVjdC5hc3NpZ24oWHIse2RlZmF1bHRWaXNpdG9yOnMsY29udmVydFZhbHVlOkMsaXNWaXNpdGFibGU6JEF9KTtmdW5jdGlvbiBnKEUsdSl7aWYoIWEuaXNVbmRlZmluZWQoRSkpe2lmKEkuaW5kZXhPZihFKSE9PS0xKXRocm93IEVycm9yKCJDaXJjdWxhciByZWZlcmVuY2UgZGV0ZWN0ZWQgaW4gIit1LmpvaW4oIi4iKSk7SS5wdXNoKEUpLGEuZm9yRWFjaChFLGZ1bmN0aW9uKGgsYil7KCEoYS5pc1VuZGVmaW5lZChoKXx8aD09PW51bGwpJiZuLmNhbGwoZSxoLGEuaXNTdHJpbmcoYik/Yi50cmltKCk6Yix1LGYpKT09PSEwJiZnKGgsdT91LmNvbmNhdChiKTpbYl0pfSksSS5wb3AoKX19aWYoIWEuaXNPYmplY3QoQSkpdGhyb3cgbmV3IFR5cGVFcnJvcigiZGF0YSBtdXN0IGJlIGFuIG9iamVjdCIpO3JldHVybiBnKEEpLGV9dmFyIEo9JHI7ZnVuY3Rpb24gQXQoQSl7bGV0IGU9eyIhIjoiJTIxIiwiJyI6IiUyNyIsIigiOiIlMjgiLCIpIjoiJTI5IiwifiI6IiU3RSIsIiUyMCI6IisiLCIlMDAiOiJcMCJ9O3JldHVybiBlbmNvZGVVUklDb21wb25lbnQoQSkucmVwbGFjZSgvWyEnKCl+XXwlMjB8JTAwL2csZnVuY3Rpb24odCl7cmV0dXJuIGVbdF19KX1mdW5jdGlvbiBldChBLGUpe3RoaXMuX3BhaXJzPVtdLEEmJkooQSx0aGlzLGUpfXZhciB0dD1ldC5wcm90b3R5cGU7dHQuYXBwZW5kPWZ1bmN0aW9uKGUscil7dGhpcy5fcGFpcnMucHVzaChbZSxyXSl9O3R0LnRvU3RyaW5nPWZ1bmN0aW9uKGUpe2xldCByPWU/ZnVuY3Rpb24odCl7cmV0dXJuIGUuY2FsbCh0aGlzLHQsQXQpfTpBdDtyZXR1cm4gdGhpcy5fcGFpcnMubWFwKGZ1bmN0aW9uKG4pe3JldHVybiByKG5bMF0pKyI9IityKG5bMV0pfSwiIikuam9pbigiJiIpfTt2YXIgU0E9ZXQ7ZnVuY3Rpb24gQW4oQSl7cmV0dXJuIGVuY29kZVVSSUNvbXBvbmVudChBKS5yZXBsYWNlKC8lM0EvZ2ksIjoiKS5yZXBsYWNlKC8lMjQvZywiJCIpLnJlcGxhY2UoLyUyQy9naSwiLCIpLnJlcGxhY2UoLyUyMC9nLCIrIikucmVwbGFjZSgvJTVCL2dpLCJbIikucmVwbGFjZSgvJTVEL2dpLCJdIil9ZnVuY3Rpb24gbkEoQSxlLHIpe2lmKCFlKXJldHVybiBBO2xldCB0PXImJnIuZW5jb2RlfHxBbixuPXImJnIuc2VyaWFsaXplLG87aWYobj9vPW4oZSxyKTpvPWEuaXNVUkxTZWFyY2hQYXJhbXMoZSk/ZS50b1N0cmluZygpOm5ldyBTQShlLHIpLnRvU3RyaW5nKHQpLG8pe2xldCBpPUEuaW5kZXhPZigiIyIpO2khPT0tMSYmKEE9QS5zbGljZSgwLGkpKSxBKz0oQS5pbmRleE9mKCI/Iik9PT0tMT8iPyI6IiYiKStvfXJldHVybiBBfXZhciBBZT1jbGFzc3tjb25zdHJ1Y3Rvcigpe3RoaXMuaGFuZGxlcnM9W119dXNlKGUscix0KXtyZXR1cm4gdGhpcy5oYW5kbGVycy5wdXNoKHtmdWxmaWxsZWQ6ZSxyZWplY3RlZDpyLHN5bmNocm9ub3VzOnQ/dC5zeW5jaHJvbm91czohMSxydW5XaGVuOnQ/dC5ydW5XaGVuOm51bGx9KSx0aGlzLmhhbmRsZXJzLmxlbmd0aC0xfWVqZWN0KGUpe3RoaXMuaGFuZGxlcnNbZV0mJih0aGlzLmhhbmRsZXJzW2VdPW51bGwpfWNsZWFyKCl7dGhpcy5oYW5kbGVycyYmKHRoaXMuaGFuZGxlcnM9W10pfWZvckVhY2goZSl7YS5mb3JFYWNoKHRoaXMuaGFuZGxlcnMsZnVuY3Rpb24odCl7dCE9PW51bGwmJmUodCl9KX19LGVlPUFlO3ZhciBiQT17c2lsZW50SlNPTlBhcnNpbmc6ITAsZm9yY2VkSlNPTlBhcnNpbmc6ITAsY2xhcmlmeVRpbWVvdXRFcnJvcjohMX07dmFyIHJ0PXR5cGVvZiBVUkxTZWFyY2hQYXJhbXM8InUiP1VSTFNlYXJjaFBhcmFtczpTQTt2YXIgbnQ9dHlwZW9mIEZvcm1EYXRhPCJ1Ij9Gb3JtRGF0YTpudWxsO3ZhciBvdD10eXBlb2YgQmxvYjwidSI/QmxvYjpudWxsO3ZhciBpdD17aXNCcm93c2VyOiEwLGNsYXNzZXM6e1VSTFNlYXJjaFBhcmFtczpydCxGb3JtRGF0YTpudCxCbG9iOm90fSxwcm90b2NvbHM6WyJodHRwIiwiaHR0cHMiLCJmaWxlIiwiYmxvYiIsInVybCIsImRhdGEiXX07dmFyIHJlPXt9O2p0KHJlLHtoYXNCcm93c2VyRW52OigpPT50ZSxoYXNTdGFuZGFyZEJyb3dzZXJFbnY6KCk9PmVuLGhhc1N0YW5kYXJkQnJvd3NlcldlYldvcmtlckVudjooKT0+dG4sb3JpZ2luOigpPT5ybn0pO3ZhciB0ZT10eXBlb2Ygd2luZG93PCJ1IiYmdHlwZW9mIGRvY3VtZW50PCJ1Iixlbj0oQT0+dGUmJlsiUmVhY3ROYXRpdmUiLCJOYXRpdmVTY3JpcHQiLCJOUyJdLmluZGV4T2YoQSk8MCkodHlwZW9mIG5hdmlnYXRvcjwidSImJm5hdmlnYXRvci5wcm9kdWN0KSx0bj10eXBlb2YgV29ya2VyR2xvYmFsU2NvcGU8InUiJiZzZWxmIGluc3RhbmNlb2YgV29ya2VyR2xvYmFsU2NvcGUmJnR5cGVvZiBzZWxmLmltcG9ydFNjcmlwdHM9PSJmdW5jdGlvbiIscm49dGUmJndpbmRvdy5sb2NhdGlvbi5ocmVmfHwiaHR0cDovL2xvY2FsaG9zdCI7dmFyIFM9ey4uLnJlLC4uLml0fTtmdW5jdGlvbiBuZShBLGUpe3JldHVybiBKKEEsbmV3IFMuY2xhc3Nlcy5VUkxTZWFyY2hQYXJhbXMsT2JqZWN0LmFzc2lnbih7dmlzaXRvcjpmdW5jdGlvbihyLHQsbixvKXtyZXR1cm4gUy5pc05vZGUmJmEuaXNCdWZmZXIocik/KHRoaXMuYXBwZW5kKHQsci50b1N0cmluZygiYmFzZTY0IikpLCExKTpvLmRlZmF1bHRWaXNpdG9yLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19LGUpKX1mdW5jdGlvbiBubihBKXtyZXR1cm4gYS5tYXRjaEFsbCgvXHcrfFxbKFx3KildL2csQSkubWFwKGU9PmVbMF09PT0iW10iPyIiOmVbMV18fGVbMF0pfWZ1bmN0aW9uIG9uKEEpe2xldCBlPXt9LHI9T2JqZWN0LmtleXMoQSksdCxuPXIubGVuZ3RoLG87Zm9yKHQ9MDt0PG47dCsrKW89clt0XSxlW29dPUFbb107cmV0dXJuIGV9ZnVuY3Rpb24gYW4oQSl7ZnVuY3Rpb24gZShyLHQsbixvKXtsZXQgaT1yW28rK107aWYoaT09PSJfX3Byb3RvX18iKXJldHVybiEwO2xldCBsPU51bWJlci5pc0Zpbml0ZSgraSksYz1vPj1yLmxlbmd0aDtyZXR1cm4gaT0haSYmYS5pc0FycmF5KG4pP24ubGVuZ3RoOmksYz8oYS5oYXNPd25Qcm9wKG4saSk/bltpXT1bbltpXSx0XTpuW2ldPXQsIWwpOigoIW5baV18fCFhLmlzT2JqZWN0KG5baV0pKSYmKG5baV09W10pLGUocix0LG5baV0sbykmJmEuaXNBcnJheShuW2ldKSYmKG5baV09b24obltpXSkpLCFsKX1pZihhLmlzRm9ybURhdGEoQSkmJmEuaXNGdW5jdGlvbihBLmVudHJpZXMpKXtsZXQgcj17fTtyZXR1cm4gYS5mb3JFYWNoRW50cnkoQSwodCxuKT0+e2Uobm4odCksbixyLDApfSkscn1yZXR1cm4gbnVsbH12YXIgUkE9YW47ZnVuY3Rpb24gc24oQSxlLHIpe2lmKGEuaXNTdHJpbmcoQSkpdHJ5e3JldHVybihlfHxKU09OLnBhcnNlKShBKSxhLnRyaW0oQSl9Y2F0Y2godCl7aWYodC5uYW1lIT09IlN5bnRheEVycm9yIil0aHJvdyB0fXJldHVybihyfHxKU09OLnN0cmluZ2lmeSkoQSl9dmFyIG9lPXt0cmFuc2l0aW9uYWw6YkEsYWRhcHRlcjpbInhociIsImh0dHAiLCJmZXRjaCJdLHRyYW5zZm9ybVJlcXVlc3Q6W2Z1bmN0aW9uKGUscil7bGV0IHQ9ci5nZXRDb250ZW50VHlwZSgpfHwiIixuPXQuaW5kZXhPZigiYXBwbGljYXRpb24vanNvbiIpPi0xLG89YS5pc09iamVjdChlKTtpZihvJiZhLmlzSFRNTEZvcm0oZSkmJihlPW5ldyBGb3JtRGF0YShlKSksYS5pc0Zvcm1EYXRhKGUpKXJldHVybiBuP0pTT04uc3RyaW5naWZ5KFJBKGUpKTplO2lmKGEuaXNBcnJheUJ1ZmZlcihlKXx8YS5pc0J1ZmZlcihlKXx8YS5pc1N0cmVhbShlKXx8YS5pc0ZpbGUoZSl8fGEuaXNCbG9iKGUpfHxhLmlzUmVhZGFibGVTdHJlYW0oZSkpcmV0dXJuIGU7aWYoYS5pc0FycmF5QnVmZmVyVmlldyhlKSlyZXR1cm4gZS5idWZmZXI7aWYoYS5pc1VSTFNlYXJjaFBhcmFtcyhlKSlyZXR1cm4gci5zZXRDb250ZW50VHlwZSgiYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkO2NoYXJzZXQ9dXRmLTgiLCExKSxlLnRvU3RyaW5nKCk7bGV0IGw7aWYobyl7aWYodC5pbmRleE9mKCJhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQiKT4tMSlyZXR1cm4gbmUoZSx0aGlzLmZvcm1TZXJpYWxpemVyKS50b1N0cmluZygpO2lmKChsPWEuaXNGaWxlTGlzdChlKSl8fHQuaW5kZXhPZigibXVsdGlwYXJ0L2Zvcm0tZGF0YSIpPi0xKXtsZXQgYz10aGlzLmVudiYmdGhpcy5lbnYuRm9ybURhdGE7cmV0dXJuIEoobD97ImZpbGVzW10iOmV9OmUsYyYmbmV3IGMsdGhpcy5mb3JtU2VyaWFsaXplcil9fXJldHVybiBvfHxuPyhyLnNldENvbnRlbnRUeXBlKCJhcHBsaWNhdGlvbi9qc29uIiwhMSksc24oZSkpOmV9XSx0cmFuc2Zvcm1SZXNwb25zZTpbZnVuY3Rpb24oZSl7bGV0IHI9dGhpcy50cmFuc2l0aW9uYWx8fG9lLnRyYW5zaXRpb25hbCx0PXImJnIuZm9yY2VkSlNPTlBhcnNpbmcsbj10aGlzLnJlc3BvbnNlVHlwZT09PSJqc29uIjtpZihhLmlzUmVzcG9uc2UoZSl8fGEuaXNSZWFkYWJsZVN0cmVhbShlKSlyZXR1cm4gZTtpZihlJiZhLmlzU3RyaW5nKGUpJiYodCYmIXRoaXMucmVzcG9uc2VUeXBlfHxuKSl7bGV0IGk9IShyJiZyLnNpbGVudEpTT05QYXJzaW5nKSYmbjt0cnl7cmV0dXJuIEpTT04ucGFyc2UoZSl9Y2F0Y2gobCl7aWYoaSl0aHJvdyBsLm5hbWU9PT0iU3ludGF4RXJyb3IiP1EuZnJvbShsLFEuRVJSX0JBRF9SRVNQT05TRSx0aGlzLG51bGwsdGhpcy5yZXNwb25zZSk6bH19cmV0dXJuIGV9XSx0aW1lb3V0OjAseHNyZkNvb2tpZU5hbWU6IlhTUkYtVE9LRU4iLHhzcmZIZWFkZXJOYW1lOiJYLVhTUkYtVE9LRU4iLG1heENvbnRlbnRMZW5ndGg6LTEsbWF4Qm9keUxlbmd0aDotMSxlbnY6e0Zvcm1EYXRhOlMuY2xhc3Nlcy5Gb3JtRGF0YSxCbG9iOlMuY2xhc3Nlcy5CbG9ifSx2YWxpZGF0ZVN0YXR1czpmdW5jdGlvbihlKXtyZXR1cm4gZT49MjAwJiZlPDMwMH0saGVhZGVyczp7Y29tbW9uOntBY2NlcHQ6ImFwcGxpY2F0aW9uL2pzb24sIHRleHQvcGxhaW4sICovKiIsIkNvbnRlbnQtVHlwZSI6dm9pZCAwfX19O2EuZm9yRWFjaChbImRlbGV0ZSIsImdldCIsImhlYWQiLCJwb3N0IiwicHV0IiwicGF0Y2giXSxBPT57b2UuaGVhZGVyc1tBXT17fX0pO3ZhciBfPW9lO3ZhciBJbj1hLnRvT2JqZWN0U2V0KFsiYWdlIiwiYXV0aG9yaXphdGlvbiIsImNvbnRlbnQtbGVuZ3RoIiwiY29udGVudC10eXBlIiwiZXRhZyIsImV4cGlyZXMiLCJmcm9tIiwiaG9zdCIsImlmLW1vZGlmaWVkLXNpbmNlIiwiaWYtdW5tb2RpZmllZC1zaW5jZSIsImxhc3QtbW9kaWZpZWQiLCJsb2NhdGlvbiIsIm1heC1mb3J3YXJkcyIsInByb3h5LWF1dGhvcml6YXRpb24iLCJyZWZlcmVyIiwicmV0cnktYWZ0ZXIiLCJ1c2VyLWFnZW50Il0pLGF0PUE9PntsZXQgZT17fSxyLHQsbjtyZXR1cm4gQSYmQS5zcGxpdChgCmApLmZvckVhY2goZnVuY3Rpb24oaSl7bj1pLmluZGV4T2YoIjoiKSxyPWkuc3Vic3RyaW5nKDAsbikudHJpbSgpLnRvTG93ZXJDYXNlKCksdD1pLnN1YnN0cmluZyhuKzEpLnRyaW0oKSwhKCFyfHxlW3JdJiZJbltyXSkmJihyPT09InNldC1jb29raWUiP2Vbcl0/ZVtyXS5wdXNoKHQpOmVbcl09W3RdOmVbcl09ZVtyXT9lW3JdKyIsICIrdDp0KX0pLGV9O3ZhciBzdD1TeW1ib2woImludGVybmFscyIpO2Z1bmN0aW9uIG9BKEEpe3JldHVybiBBJiZTdHJpbmcoQSkudHJpbSgpLnRvTG93ZXJDYXNlKCl9ZnVuY3Rpb24gRkEoQSl7cmV0dXJuIEE9PT0hMXx8QT09bnVsbD9BOmEuaXNBcnJheShBKT9BLm1hcChGQSk6U3RyaW5nKEEpfWZ1bmN0aW9uIGduKEEpe2xldCBlPU9iamVjdC5jcmVhdGUobnVsbCkscj0vKFteXHMsOz1dKylccyooPzo9XHMqKFteLDtdKykpPy9nLHQ7Zm9yKDt0PXIuZXhlYyhBKTspZVt0WzFdXT10WzJdO3JldHVybiBlfXZhciBsbj1BPT4vXlstX2EtekEtWjAtOV5gfH4sISMkJSYnKisuXSskLy50ZXN0KEEudHJpbSgpKTtmdW5jdGlvbiBpZShBLGUscix0LG4pe2lmKGEuaXNGdW5jdGlvbih0KSlyZXR1cm4gdC5jYWxsKHRoaXMsZSxyKTtpZihuJiYoZT1yKSwhIWEuaXNTdHJpbmcoZSkpe2lmKGEuaXNTdHJpbmcodCkpcmV0dXJuIGUuaW5kZXhPZih0KSE9PS0xO2lmKGEuaXNSZWdFeHAodCkpcmV0dXJuIHQudGVzdChlKX19ZnVuY3Rpb24gQ24oQSl7cmV0dXJuIEEudHJpbSgpLnRvTG93ZXJDYXNlKCkucmVwbGFjZSgvKFthLXpcZF0pKFx3KikvZywoZSxyLHQpPT5yLnRvVXBwZXJDYXNlKCkrdCl9ZnVuY3Rpb24gY24oQSxlKXtsZXQgcj1hLnRvQ2FtZWxDYXNlKCIgIitlKTtbImdldCIsInNldCIsImhhcyJdLmZvckVhY2godD0+e09iamVjdC5kZWZpbmVQcm9wZXJ0eShBLHQrcix7dmFsdWU6ZnVuY3Rpb24obixvLGkpe3JldHVybiB0aGlzW3RdLmNhbGwodGhpcyxlLG4sbyxpKX0sY29uZmlndXJhYmxlOiEwfSl9KX12YXIgVj1jbGFzc3tjb25zdHJ1Y3RvcihlKXtlJiZ0aGlzLnNldChlKX1zZXQoZSxyLHQpe2xldCBuPXRoaXM7ZnVuY3Rpb24gbyhsLGMsQyl7bGV0IHM9b0EoYyk7aWYoIXMpdGhyb3cgbmV3IEVycm9yKCJoZWFkZXIgbmFtZSBtdXN0IGJlIGEgbm9uLWVtcHR5IHN0cmluZyIpO2xldCBJPWEuZmluZEtleShuLHMpOyghSXx8bltJXT09PXZvaWQgMHx8Qz09PSEwfHxDPT09dm9pZCAwJiZuW0ldIT09ITEpJiYobltJfHxjXT1GQShsKSl9bGV0IGk9KGwsYyk9PmEuZm9yRWFjaChsLChDLHMpPT5vKEMscyxjKSk7aWYoYS5pc1BsYWluT2JqZWN0KGUpfHxlIGluc3RhbmNlb2YgdGhpcy5jb25zdHJ1Y3RvcilpKGUscik7ZWxzZSBpZihhLmlzU3RyaW5nKGUpJiYoZT1lLnRyaW0oKSkmJiFsbihlKSlpKGF0KGUpLHIpO2Vsc2UgaWYoYS5pc0hlYWRlcnMoZSkpZm9yKGxldFtsLGNdb2YgZS5lbnRyaWVzKCkpbyhjLGwsdCk7ZWxzZSBlIT1udWxsJiZvKHIsZSx0KTtyZXR1cm4gdGhpc31nZXQoZSxyKXtpZihlPW9BKGUpLGUpe2xldCB0PWEuZmluZEtleSh0aGlzLGUpO2lmKHQpe2xldCBuPXRoaXNbdF07aWYoIXIpcmV0dXJuIG47aWYocj09PSEwKXJldHVybiBnbihuKTtpZihhLmlzRnVuY3Rpb24ocikpcmV0dXJuIHIuY2FsbCh0aGlzLG4sdCk7aWYoYS5pc1JlZ0V4cChyKSlyZXR1cm4gci5leGVjKG4pO3Rocm93IG5ldyBUeXBlRXJyb3IoInBhcnNlciBtdXN0IGJlIGJvb2xlYW58cmVnZXhwfGZ1bmN0aW9uIil9fX1oYXMoZSxyKXtpZihlPW9BKGUpLGUpe2xldCB0PWEuZmluZEtleSh0aGlzLGUpO3JldHVybiEhKHQmJnRoaXNbdF0hPT12b2lkIDAmJighcnx8aWUodGhpcyx0aGlzW3RdLHQscikpKX1yZXR1cm4hMX1kZWxldGUoZSxyKXtsZXQgdD10aGlzLG49ITE7ZnVuY3Rpb24gbyhpKXtpZihpPW9BKGkpLGkpe2xldCBsPWEuZmluZEtleSh0LGkpO2wmJighcnx8aWUodCx0W2xdLGwscikpJiYoZGVsZXRlIHRbbF0sbj0hMCl9fXJldHVybiBhLmlzQXJyYXkoZSk/ZS5mb3JFYWNoKG8pOm8oZSksbn1jbGVhcihlKXtsZXQgcj1PYmplY3Qua2V5cyh0aGlzKSx0PXIubGVuZ3RoLG49ITE7Zm9yKDt0LS07KXtsZXQgbz1yW3RdOyghZXx8aWUodGhpcyx0aGlzW29dLG8sZSwhMCkpJiYoZGVsZXRlIHRoaXNbb10sbj0hMCl9cmV0dXJuIG59bm9ybWFsaXplKGUpe2xldCByPXRoaXMsdD17fTtyZXR1cm4gYS5mb3JFYWNoKHRoaXMsKG4sbyk9PntsZXQgaT1hLmZpbmRLZXkodCxvKTtpZihpKXtyW2ldPUZBKG4pLGRlbGV0ZSByW29dO3JldHVybn1sZXQgbD1lP0NuKG8pOlN0cmluZyhvKS50cmltKCk7bCE9PW8mJmRlbGV0ZSByW29dLHJbbF09RkEobiksdFtsXT0hMH0pLHRoaXN9Y29uY2F0KC4uLmUpe3JldHVybiB0aGlzLmNvbnN0cnVjdG9yLmNvbmNhdCh0aGlzLC4uLmUpfXRvSlNPTihlKXtsZXQgcj1PYmplY3QuY3JlYXRlKG51bGwpO3JldHVybiBhLmZvckVhY2godGhpcywodCxuKT0+e3QhPW51bGwmJnQhPT0hMSYmKHJbbl09ZSYmYS5pc0FycmF5KHQpP3Quam9pbigiLCAiKTp0KX0pLHJ9W1N5bWJvbC5pdGVyYXRvcl0oKXtyZXR1cm4gT2JqZWN0LmVudHJpZXModGhpcy50b0pTT04oKSlbU3ltYm9sLml0ZXJhdG9yXSgpfXRvU3RyaW5nKCl7cmV0dXJuIE9iamVjdC5lbnRyaWVzKHRoaXMudG9KU09OKCkpLm1hcCgoW2Uscl0pPT5lKyI6ICIrcikuam9pbihgCmApfWdldFtTeW1ib2wudG9TdHJpbmdUYWddKCl7cmV0dXJuIkF4aW9zSGVhZGVycyJ9c3RhdGljIGZyb20oZSl7cmV0dXJuIGUgaW5zdGFuY2VvZiB0aGlzP2U6bmV3IHRoaXMoZSl9c3RhdGljIGNvbmNhdChlLC4uLnIpe2xldCB0PW5ldyB0aGlzKGUpO3JldHVybiByLmZvckVhY2gobj0+dC5zZXQobikpLHR9c3RhdGljIGFjY2Vzc29yKGUpe2xldCB0PSh0aGlzW3N0XT10aGlzW3N0XT17YWNjZXNzb3JzOnt9fSkuYWNjZXNzb3JzLG49dGhpcy5wcm90b3R5cGU7ZnVuY3Rpb24gbyhpKXtsZXQgbD1vQShpKTt0W2xdfHwoY24obixpKSx0W2xdPSEwKX1yZXR1cm4gYS5pc0FycmF5KGUpP2UuZm9yRWFjaChvKTpvKGUpLHRoaXN9fTtWLmFjY2Vzc29yKFsiQ29udGVudC1UeXBlIiwiQ29udGVudC1MZW5ndGgiLCJBY2NlcHQiLCJBY2NlcHQtRW5jb2RpbmciLCJVc2VyLUFnZW50IiwiQXV0aG9yaXphdGlvbiJdKTthLnJlZHVjZURlc2NyaXB0b3JzKFYucHJvdG90eXBlLCh7dmFsdWU6QX0sZSk9PntsZXQgcj1lWzBdLnRvVXBwZXJDYXNlKCkrZS5zbGljZSgxKTtyZXR1cm57Z2V0OigpPT5BLHNldCh0KXt0aGlzW3JdPXR9fX0pO2EuZnJlZXplTWV0aG9kcyhWKTt2YXIgRD1WO2Z1bmN0aW9uIGlBKEEsZSl7bGV0IHI9dGhpc3x8Xyx0PWV8fHIsbj1ELmZyb20odC5oZWFkZXJzKSxvPXQuZGF0YTtyZXR1cm4gYS5mb3JFYWNoKEEsZnVuY3Rpb24obCl7bz1sLmNhbGwocixvLG4ubm9ybWFsaXplKCksZT9lLnN0YXR1czp2b2lkIDApfSksbi5ub3JtYWxpemUoKSxvfWZ1bmN0aW9uIGFBKEEpe3JldHVybiEhKEEmJkEuX19DQU5DRUxfXyl9ZnVuY3Rpb24gSXQoQSxlLHIpe1EuY2FsbCh0aGlzLEE/PyJjYW5jZWxlZCIsUS5FUlJfQ0FOQ0VMRUQsZSxyKSx0aGlzLm5hbWU9IkNhbmNlbGVkRXJyb3IifWEuaW5oZXJpdHMoSXQsUSx7X19DQU5DRUxfXzohMH0pO3ZhciBQPUl0O2Z1bmN0aW9uIHNBKEEsZSxyKXtsZXQgdD1yLmNvbmZpZy52YWxpZGF0ZVN0YXR1czshci5zdGF0dXN8fCF0fHx0KHIuc3RhdHVzKT9BKHIpOmUobmV3IFEoIlJlcXVlc3QgZmFpbGVkIHdpdGggc3RhdHVzIGNvZGUgIityLnN0YXR1cyxbUS5FUlJfQkFEX1JFUVVFU1QsUS5FUlJfQkFEX1JFU1BPTlNFXVtNYXRoLmZsb29yKHIuc3RhdHVzLzEwMCktNF0sci5jb25maWcsci5yZXF1ZXN0LHIpKX1mdW5jdGlvbiBhZShBKXtsZXQgZT0vXihbLStcd117MSwyNX0pKDo/XC9cL3w6KS8uZXhlYyhBKTtyZXR1cm4gZSYmZVsxXXx8IiJ9ZnVuY3Rpb24gQm4oQSxlKXtBPUF8fDEwO2xldCByPW5ldyBBcnJheShBKSx0PW5ldyBBcnJheShBKSxuPTAsbz0wLGk7cmV0dXJuIGU9ZSE9PXZvaWQgMD9lOjFlMyxmdW5jdGlvbihjKXtsZXQgQz1EYXRlLm5vdygpLHM9dFtvXTtpfHwoaT1DKSxyW25dPWMsdFtuXT1DO2xldCBJPW8sZj0wO2Zvcig7SSE9PW47KWYrPXJbSSsrXSxJPUklQTtpZihuPShuKzEpJUEsbj09PW8mJihvPShvKzEpJUEpLEMtaTxlKXJldHVybjtsZXQgZz1zJiZDLXM7cmV0dXJuIGc/TWF0aC5yb3VuZChmKjFlMy9nKTp2b2lkIDB9fXZhciBndD1CbjtmdW5jdGlvbiBFbihBLGUpe2xldCByPTAsdD0xZTMvZSxuLG8saT0oQyxzPURhdGUubm93KCkpPT57cj1zLG49bnVsbCxvJiYoY2xlYXJUaW1lb3V0KG8pLG89bnVsbCksQS5hcHBseShudWxsLEMpfTtyZXR1cm5bKC4uLkMpPT57bGV0IHM9RGF0ZS5ub3coKSxJPXMtcjtJPj10P2koQyxzKToobj1DLG98fChvPXNldFRpbWVvdXQoKCk9PntvPW51bGwsaShuKX0sdC1JKSkpfSwoKT0+biYmaShuKV19dmFyIGx0PUVuO3ZhciB6PShBLGUscj0zKT0+e2xldCB0PTAsbj1ndCg1MCwyNTApO3JldHVybiBsdChvPT57bGV0IGk9by5sb2FkZWQsbD1vLmxlbmd0aENvbXB1dGFibGU/by50b3RhbDp2b2lkIDAsYz1pLXQsQz1uKGMpLHM9aTw9bDt0PWk7bGV0IEk9e2xvYWRlZDppLHRvdGFsOmwscHJvZ3Jlc3M6bD9pL2w6dm9pZCAwLGJ5dGVzOmMscmF0ZTpDfHx2b2lkIDAsZXN0aW1hdGVkOkMmJmwmJnM/KGwtaSkvQzp2b2lkIDAsZXZlbnQ6byxsZW5ndGhDb21wdXRhYmxlOmwhPW51bGwsW2U/ImRvd25sb2FkIjoidXBsb2FkIl06ITB9O0EoSSl9LHIpfSxzZT0oQSxlKT0+e2xldCByPUEhPW51bGw7cmV0dXJuW3Q9PmVbMF0oe2xlbmd0aENvbXB1dGFibGU6cix0b3RhbDpBLGxvYWRlZDp0fSksZVsxXV19LEllPUE9PiguLi5lKT0+YS5hc2FwKCgpPT5BKC4uLmUpKTt2YXIgQ3Q9Uy5oYXNTdGFuZGFyZEJyb3dzZXJFbnY/ZnVuY3Rpb24oKXtsZXQgZT0vKG1zaWV8dHJpZGVudCkvaS50ZXN0KG5hdmlnYXRvci51c2VyQWdlbnQpLHI9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiYSIpLHQ7ZnVuY3Rpb24gbihvKXtsZXQgaT1vO3JldHVybiBlJiYoci5zZXRBdHRyaWJ1dGUoImhyZWYiLGkpLGk9ci5ocmVmKSxyLnNldEF0dHJpYnV0ZSgiaHJlZiIsaSkse2hyZWY6ci5ocmVmLHByb3RvY29sOnIucHJvdG9jb2w/ci5wcm90b2NvbC5yZXBsYWNlKC86JC8sIiIpOiIiLGhvc3Q6ci5ob3N0LHNlYXJjaDpyLnNlYXJjaD9yLnNlYXJjaC5yZXBsYWNlKC9eXD8vLCIiKToiIixoYXNoOnIuaGFzaD9yLmhhc2gucmVwbGFjZSgvXiMvLCIiKToiIixob3N0bmFtZTpyLmhvc3RuYW1lLHBvcnQ6ci5wb3J0LHBhdGhuYW1lOnIucGF0aG5hbWUuY2hhckF0KDApPT09Ii8iP3IucGF0aG5hbWU6Ii8iK3IucGF0aG5hbWV9fXJldHVybiB0PW4od2luZG93LmxvY2F0aW9uLmhyZWYpLGZ1bmN0aW9uKGkpe2xldCBsPWEuaXNTdHJpbmcoaSk/bihpKTppO3JldHVybiBsLnByb3RvY29sPT09dC5wcm90b2NvbCYmbC5ob3N0PT09dC5ob3N0fX0oKTpmdW5jdGlvbigpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiEwfX0oKTt2YXIgY3Q9Uy5oYXNTdGFuZGFyZEJyb3dzZXJFbnY/e3dyaXRlKEEsZSxyLHQsbixvKXtsZXQgaT1bQSsiPSIrZW5jb2RlVVJJQ29tcG9uZW50KGUpXTthLmlzTnVtYmVyKHIpJiZpLnB1c2goImV4cGlyZXM9IituZXcgRGF0ZShyKS50b0dNVFN0cmluZygpKSxhLmlzU3RyaW5nKHQpJiZpLnB1c2goInBhdGg9Iit0KSxhLmlzU3RyaW5nKG4pJiZpLnB1c2goImRvbWFpbj0iK24pLG89PT0hMCYmaS5wdXNoKCJzZWN1cmUiKSxkb2N1bWVudC5jb29raWU9aS5qb2luKCI7ICIpfSxyZWFkKEEpe2xldCBlPWRvY3VtZW50LmNvb2tpZS5tYXRjaChuZXcgUmVnRXhwKCIoXnw7XFxzKikoIitBKyIpPShbXjtdKikiKSk7cmV0dXJuIGU/ZGVjb2RlVVJJQ29tcG9uZW50KGVbM10pOm51bGx9LHJlbW92ZShBKXt0aGlzLndyaXRlKEEsIiIsRGF0ZS5ub3coKS04NjRlNSl9fTp7d3JpdGUoKXt9LHJlYWQoKXtyZXR1cm4gbnVsbH0scmVtb3ZlKCl7fX07ZnVuY3Rpb24gZ2UoQSl7cmV0dXJuL14oW2Etel1bYS16XGQrXC0uXSo6KT9cL1wvL2kudGVzdChBKX1mdW5jdGlvbiBsZShBLGUpe3JldHVybiBlP0EucmVwbGFjZSgvXC8/XC8kLywiIikrIi8iK2UucmVwbGFjZSgvXlwvKy8sIiIpOkF9ZnVuY3Rpb24gSUEoQSxlKXtyZXR1cm4gQSYmIWdlKGUpP2xlKEEsZSk6ZX12YXIgQnQ9QT0+QSBpbnN0YW5jZW9mIEQ/ey4uLkF9OkE7ZnVuY3Rpb24gTChBLGUpe2U9ZXx8e307bGV0IHI9e307ZnVuY3Rpb24gdChDLHMsSSl7cmV0dXJuIGEuaXNQbGFpbk9iamVjdChDKSYmYS5pc1BsYWluT2JqZWN0KHMpP2EubWVyZ2UuY2FsbCh7Y2FzZWxlc3M6SX0sQyxzKTphLmlzUGxhaW5PYmplY3Qocyk/YS5tZXJnZSh7fSxzKTphLmlzQXJyYXkocyk/cy5zbGljZSgpOnN9ZnVuY3Rpb24gbihDLHMsSSl7aWYoYS5pc1VuZGVmaW5lZChzKSl7aWYoIWEuaXNVbmRlZmluZWQoQykpcmV0dXJuIHQodm9pZCAwLEMsSSl9ZWxzZSByZXR1cm4gdChDLHMsSSl9ZnVuY3Rpb24gbyhDLHMpe2lmKCFhLmlzVW5kZWZpbmVkKHMpKXJldHVybiB0KHZvaWQgMCxzKX1mdW5jdGlvbiBpKEMscyl7aWYoYS5pc1VuZGVmaW5lZChzKSl7aWYoIWEuaXNVbmRlZmluZWQoQykpcmV0dXJuIHQodm9pZCAwLEMpfWVsc2UgcmV0dXJuIHQodm9pZCAwLHMpfWZ1bmN0aW9uIGwoQyxzLEkpe2lmKEkgaW4gZSlyZXR1cm4gdChDLHMpO2lmKEkgaW4gQSlyZXR1cm4gdCh2b2lkIDAsQyl9bGV0IGM9e3VybDpvLG1ldGhvZDpvLGRhdGE6byxiYXNlVVJMOmksdHJhbnNmb3JtUmVxdWVzdDppLHRyYW5zZm9ybVJlc3BvbnNlOmkscGFyYW1zU2VyaWFsaXplcjppLHRpbWVvdXQ6aSx0aW1lb3V0TWVzc2FnZTppLHdpdGhDcmVkZW50aWFsczppLHdpdGhYU1JGVG9rZW46aSxhZGFwdGVyOmkscmVzcG9uc2VUeXBlOmkseHNyZkNvb2tpZU5hbWU6aSx4c3JmSGVhZGVyTmFtZTppLG9uVXBsb2FkUHJvZ3Jlc3M6aSxvbkRvd25sb2FkUHJvZ3Jlc3M6aSxkZWNvbXByZXNzOmksbWF4Q29udGVudExlbmd0aDppLG1heEJvZHlMZW5ndGg6aSxiZWZvcmVSZWRpcmVjdDppLHRyYW5zcG9ydDppLGh0dHBBZ2VudDppLGh0dHBzQWdlbnQ6aSxjYW5jZWxUb2tlbjppLHNvY2tldFBhdGg6aSxyZXNwb25zZUVuY29kaW5nOmksdmFsaWRhdGVTdGF0dXM6bCxoZWFkZXJzOihDLHMpPT5uKEJ0KEMpLEJ0KHMpLCEwKX07cmV0dXJuIGEuZm9yRWFjaChPYmplY3Qua2V5cyhPYmplY3QuYXNzaWduKHt9LEEsZSkpLGZ1bmN0aW9uKHMpe2xldCBJPWNbc118fG4sZj1JKEFbc10sZVtzXSxzKTthLmlzVW5kZWZpbmVkKGYpJiZJIT09bHx8KHJbc109Zil9KSxyfXZhciBrQT1BPT57bGV0IGU9TCh7fSxBKSx7ZGF0YTpyLHdpdGhYU1JGVG9rZW46dCx4c3JmSGVhZGVyTmFtZTpuLHhzcmZDb29raWVOYW1lOm8saGVhZGVyczppLGF1dGg6bH09ZTtlLmhlYWRlcnM9aT1ELmZyb20oaSksZS51cmw9bkEoSUEoZS5iYXNlVVJMLGUudXJsKSxBLnBhcmFtcyxBLnBhcmFtc1NlcmlhbGl6ZXIpLGwmJmkuc2V0KCJBdXRob3JpemF0aW9uIiwiQmFzaWMgIitidG9hKChsLnVzZXJuYW1lfHwiIikrIjoiKyhsLnBhc3N3b3JkP3VuZXNjYXBlKGVuY29kZVVSSUNvbXBvbmVudChsLnBhc3N3b3JkKSk6IiIpKSk7bGV0IGM7aWYoYS5pc0Zvcm1EYXRhKHIpKXtpZihTLmhhc1N0YW5kYXJkQnJvd3NlckVudnx8Uy5oYXNTdGFuZGFyZEJyb3dzZXJXZWJXb3JrZXJFbnYpaS5zZXRDb250ZW50VHlwZSh2b2lkIDApO2Vsc2UgaWYoKGM9aS5nZXRDb250ZW50VHlwZSgpKSE9PSExKXtsZXRbQywuLi5zXT1jP2Muc3BsaXQoIjsiKS5tYXAoST0+SS50cmltKCkpLmZpbHRlcihCb29sZWFuKTpbXTtpLnNldENvbnRlbnRUeXBlKFtDfHwibXVsdGlwYXJ0L2Zvcm0tZGF0YSIsLi4uc10uam9pbigiOyAiKSl9fWlmKFMuaGFzU3RhbmRhcmRCcm93c2VyRW52JiYodCYmYS5pc0Z1bmN0aW9uKHQpJiYodD10KGUpKSx0fHx0IT09ITEmJkN0KGUudXJsKSkpe2xldCBDPW4mJm8mJmN0LnJlYWQobyk7QyYmaS5zZXQobixDKX1yZXR1cm4gZX07dmFyIGZuPXR5cGVvZiBYTUxIdHRwUmVxdWVzdDwidSIsRXQ9Zm4mJmZ1bmN0aW9uKEEpe3JldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbihyLHQpe2xldCBuPWtBKEEpLG89bi5kYXRhLGk9RC5mcm9tKG4uaGVhZGVycykubm9ybWFsaXplKCkse3Jlc3BvbnNlVHlwZTpsLG9uVXBsb2FkUHJvZ3Jlc3M6YyxvbkRvd25sb2FkUHJvZ3Jlc3M6Q309bixzLEksZixnLEU7ZnVuY3Rpb24gdSgpe2cmJmcoKSxFJiZFKCksbi5jYW5jZWxUb2tlbiYmbi5jYW5jZWxUb2tlbi51bnN1YnNjcmliZShzKSxuLnNpZ25hbCYmbi5zaWduYWwucmVtb3ZlRXZlbnRMaXN0ZW5lcigiYWJvcnQiLHMpfWxldCBCPW5ldyBYTUxIdHRwUmVxdWVzdDtCLm9wZW4obi5tZXRob2QudG9VcHBlckNhc2UoKSxuLnVybCwhMCksQi50aW1lb3V0PW4udGltZW91dDtmdW5jdGlvbiBoKCl7aWYoIUIpcmV0dXJuO2xldCBkPUQuZnJvbSgiZ2V0QWxsUmVzcG9uc2VIZWFkZXJzImluIEImJkIuZ2V0QWxsUmVzcG9uc2VIZWFkZXJzKCkpLHE9e2RhdGE6IWx8fGw9PT0idGV4dCJ8fGw9PT0ianNvbiI/Qi5yZXNwb25zZVRleHQ6Qi5yZXNwb25zZSxzdGF0dXM6Qi5zdGF0dXMsc3RhdHVzVGV4dDpCLnN0YXR1c1RleHQsaGVhZGVyczpkLGNvbmZpZzpBLHJlcXVlc3Q6Qn07c0EoZnVuY3Rpb24oeCl7cih4KSx1KCl9LGZ1bmN0aW9uKHgpe3QoeCksdSgpfSxxKSxCPW51bGx9Im9ubG9hZGVuZCJpbiBCP0Iub25sb2FkZW5kPWg6Qi5vbnJlYWR5c3RhdGVjaGFuZ2U9ZnVuY3Rpb24oKXshQnx8Qi5yZWFkeVN0YXRlIT09NHx8Qi5zdGF0dXM9PT0wJiYhKEIucmVzcG9uc2VVUkwmJkIucmVzcG9uc2VVUkwuaW5kZXhPZigiZmlsZToiKT09PTApfHxzZXRUaW1lb3V0KGgpfSxCLm9uYWJvcnQ9ZnVuY3Rpb24oKXtCJiYodChuZXcgUSgiUmVxdWVzdCBhYm9ydGVkIixRLkVDT05OQUJPUlRFRCxBLEIpKSxCPW51bGwpfSxCLm9uZXJyb3I9ZnVuY3Rpb24oKXt0KG5ldyBRKCJOZXR3b3JrIEVycm9yIixRLkVSUl9ORVRXT1JLLEEsQikpLEI9bnVsbH0sQi5vbnRpbWVvdXQ9ZnVuY3Rpb24oKXtsZXQgTj1uLnRpbWVvdXQ/InRpbWVvdXQgb2YgIituLnRpbWVvdXQrIm1zIGV4Y2VlZGVkIjoidGltZW91dCBleGNlZWRlZCIscT1uLnRyYW5zaXRpb25hbHx8YkE7bi50aW1lb3V0RXJyb3JNZXNzYWdlJiYoTj1uLnRpbWVvdXRFcnJvck1lc3NhZ2UpLHQobmV3IFEoTixxLmNsYXJpZnlUaW1lb3V0RXJyb3I/US5FVElNRURPVVQ6US5FQ09OTkFCT1JURUQsQSxCKSksQj1udWxsfSxvPT09dm9pZCAwJiZpLnNldENvbnRlbnRUeXBlKG51bGwpLCJzZXRSZXF1ZXN0SGVhZGVyImluIEImJmEuZm9yRWFjaChpLnRvSlNPTigpLGZ1bmN0aW9uKE4scSl7Qi5zZXRSZXF1ZXN0SGVhZGVyKHEsTil9KSxhLmlzVW5kZWZpbmVkKG4ud2l0aENyZWRlbnRpYWxzKXx8KEIud2l0aENyZWRlbnRpYWxzPSEhbi53aXRoQ3JlZGVudGlhbHMpLGwmJmwhPT0ianNvbiImJihCLnJlc3BvbnNlVHlwZT1uLnJlc3BvbnNlVHlwZSksQyYmKFtmLEVdPXooQywhMCksQi5hZGRFdmVudExpc3RlbmVyKCJwcm9ncmVzcyIsZikpLGMmJkIudXBsb2FkJiYoW0ksZ109eihjKSxCLnVwbG9hZC5hZGRFdmVudExpc3RlbmVyKCJwcm9ncmVzcyIsSSksQi51cGxvYWQuYWRkRXZlbnRMaXN0ZW5lcigibG9hZGVuZCIsZykpLChuLmNhbmNlbFRva2VufHxuLnNpZ25hbCkmJihzPWQ9PntCJiYodCghZHx8ZC50eXBlP25ldyBQKG51bGwsQSxCKTpkKSxCLmFib3J0KCksQj1udWxsKX0sbi5jYW5jZWxUb2tlbiYmbi5jYW5jZWxUb2tlbi5zdWJzY3JpYmUocyksbi5zaWduYWwmJihuLnNpZ25hbC5hYm9ydGVkP3MoKTpuLnNpZ25hbC5hZGRFdmVudExpc3RlbmVyKCJhYm9ydCIscykpKTtsZXQgYj1hZShuLnVybCk7aWYoYiYmUy5wcm90b2NvbHMuaW5kZXhPZihiKT09PS0xKXt0KG5ldyBRKCJVbnN1cHBvcnRlZCBwcm90b2NvbCAiK2IrIjoiLFEuRVJSX0JBRF9SRVFVRVNULEEpKTtyZXR1cm59Qi5zZW5kKG98fG51bGwpfSl9O3ZhciB1bj0oQSxlKT0+e2xldCByPW5ldyBBYm9ydENvbnRyb2xsZXIsdCxuPWZ1bmN0aW9uKGMpe2lmKCF0KXt0PSEwLGkoKTtsZXQgQz1jIGluc3RhbmNlb2YgRXJyb3I/Yzp0aGlzLnJlYXNvbjtyLmFib3J0KEMgaW5zdGFuY2VvZiBRP0M6bmV3IFAoQyBpbnN0YW5jZW9mIEVycm9yP0MubWVzc2FnZTpDKSl9fSxvPWUmJnNldFRpbWVvdXQoKCk9PntuKG5ldyBRKGB0aW1lb3V0ICR7ZX0gb2YgbXMgZXhjZWVkZWRgLFEuRVRJTUVET1VUKSl9LGUpLGk9KCk9PntBJiYobyYmY2xlYXJUaW1lb3V0KG8pLG89bnVsbCxBLmZvckVhY2goYz0+e2MmJihjLnJlbW92ZUV2ZW50TGlzdGVuZXI/Yy5yZW1vdmVFdmVudExpc3RlbmVyKCJhYm9ydCIsbik6Yy51bnN1YnNjcmliZShuKSl9KSxBPW51bGwpfTtBLmZvckVhY2goYz0+YyYmYy5hZGRFdmVudExpc3RlbmVyJiZjLmFkZEV2ZW50TGlzdGVuZXIoImFib3J0IixuKSk7bGV0e3NpZ25hbDpsfT1yO3JldHVybiBsLnVuc3Vic2NyaWJlPWksW2wsKCk9PntvJiZjbGVhclRpbWVvdXQobyksbz1udWxsfV19LGZ0PXVuO3ZhciBRbj1mdW5jdGlvbiooQSxlKXtsZXQgcj1BLmJ5dGVMZW5ndGg7aWYoIWV8fHI8ZSl7eWllbGQgQTtyZXR1cm59bGV0IHQ9MCxuO2Zvcig7dDxyOyluPXQrZSx5aWVsZCBBLnNsaWNlKHQsbiksdD1ufSxwbj1hc3luYyBmdW5jdGlvbiooQSxlLHIpe2ZvciBhd2FpdChsZXQgdCBvZiBBKXlpZWxkKlFuKEFycmF5QnVmZmVyLmlzVmlldyh0KT90OmF3YWl0IHIoU3RyaW5nKHQpKSxlKX0sQ2U9KEEsZSxyLHQsbik9PntsZXQgbz1wbihBLGUsbiksaT0wLGwsYz1DPT57bHx8KGw9ITAsdCYmdChDKSl9O3JldHVybiBuZXcgUmVhZGFibGVTdHJlYW0oe2FzeW5jIHB1bGwoQyl7dHJ5e2xldHtkb25lOnMsdmFsdWU6SX09YXdhaXQgby5uZXh0KCk7aWYocyl7YygpLEMuY2xvc2UoKTtyZXR1cm59bGV0IGY9SS5ieXRlTGVuZ3RoO2lmKHIpe2xldCBnPWkrPWY7cihnKX1DLmVucXVldWUobmV3IFVpbnQ4QXJyYXkoSSkpfWNhdGNoKHMpe3Rocm93IGMocyksc319LGNhbmNlbChDKXtyZXR1cm4gYyhDKSxvLnJldHVybigpfX0se2hpZ2hXYXRlck1hcms6Mn0pfTt2YXIgTkE9dHlwZW9mIGZldGNoPT0iZnVuY3Rpb24iJiZ0eXBlb2YgUmVxdWVzdD09ImZ1bmN0aW9uIiYmdHlwZW9mIFJlc3BvbnNlPT0iZnVuY3Rpb24iLFF0PU5BJiZ0eXBlb2YgUmVhZGFibGVTdHJlYW09PSJmdW5jdGlvbiIsY2U9TkEmJih0eXBlb2YgVGV4dEVuY29kZXI9PSJmdW5jdGlvbiI/KEE9PmU9PkEuZW5jb2RlKGUpKShuZXcgVGV4dEVuY29kZXIpOmFzeW5jIEE9Pm5ldyBVaW50OEFycmF5KGF3YWl0IG5ldyBSZXNwb25zZShBKS5hcnJheUJ1ZmZlcigpKSkscHQ9KEEsLi4uZSk9Pnt0cnl7cmV0dXJuISFBKC4uLmUpfWNhdGNoe3JldHVybiExfX0sZG49UXQmJnB0KCgpPT57bGV0IEE9ITEsZT1uZXcgUmVxdWVzdChTLm9yaWdpbix7Ym9keTpuZXcgUmVhZGFibGVTdHJlYW0sbWV0aG9kOiJQT1NUIixnZXQgZHVwbGV4KCl7cmV0dXJuIEE9ITAsImhhbGYifX0pLmhlYWRlcnMuaGFzKCJDb250ZW50LVR5cGUiKTtyZXR1cm4gQSYmIWV9KSx1dD02NCoxMDI0LEJlPVF0JiZwdCgoKT0+YS5pc1JlYWRhYmxlU3RyZWFtKG5ldyBSZXNwb25zZSgiIikuYm9keSkpLFVBPXtzdHJlYW06QmUmJihBPT5BLmJvZHkpfTtOQSYmKEE9PntbInRleHQiLCJhcnJheUJ1ZmZlciIsImJsb2IiLCJmb3JtRGF0YSIsInN0cmVhbSJdLmZvckVhY2goZT0+eyFVQVtlXSYmKFVBW2VdPWEuaXNGdW5jdGlvbihBW2VdKT9yPT5yW2VdKCk6KHIsdCk9Pnt0aHJvdyBuZXcgUShgUmVzcG9uc2UgdHlwZSAnJHtlfScgaXMgbm90IHN1cHBvcnRlZGAsUS5FUlJfTk9UX1NVUFBPUlQsdCl9KX0pfSkobmV3IFJlc3BvbnNlKTt2YXIgbW49YXN5bmMgQT0+e2lmKEE9PW51bGwpcmV0dXJuIDA7aWYoYS5pc0Jsb2IoQSkpcmV0dXJuIEEuc2l6ZTtpZihhLmlzU3BlY0NvbXBsaWFudEZvcm0oQSkpcmV0dXJuKGF3YWl0IG5ldyBSZXF1ZXN0KEEpLmFycmF5QnVmZmVyKCkpLmJ5dGVMZW5ndGg7aWYoYS5pc0FycmF5QnVmZmVyVmlldyhBKXx8YS5pc0FycmF5QnVmZmVyKEEpKXJldHVybiBBLmJ5dGVMZW5ndGg7aWYoYS5pc1VSTFNlYXJjaFBhcmFtcyhBKSYmKEE9QSsiIiksYS5pc1N0cmluZyhBKSlyZXR1cm4oYXdhaXQgY2UoQSkpLmJ5dGVMZW5ndGh9LGhuPWFzeW5jKEEsZSk9PntsZXQgcj1hLnRvRmluaXRlTnVtYmVyKEEuZ2V0Q29udGVudExlbmd0aCgpKTtyZXR1cm4gcj8/bW4oZSl9LGR0PU5BJiYoYXN5bmMgQT0+e2xldHt1cmw6ZSxtZXRob2Q6cixkYXRhOnQsc2lnbmFsOm4sY2FuY2VsVG9rZW46byx0aW1lb3V0Omksb25Eb3dubG9hZFByb2dyZXNzOmwsb25VcGxvYWRQcm9ncmVzczpjLHJlc3BvbnNlVHlwZTpDLGhlYWRlcnM6cyx3aXRoQ3JlZGVudGlhbHM6ST0ic2FtZS1vcmlnaW4iLGZldGNoT3B0aW9uczpmfT1rQShBKTtDPUM/KEMrIiIpLnRvTG93ZXJDYXNlKCk6InRleHQiO2xldFtnLEVdPW58fG98fGk/ZnQoW24sb10saSk6W10sdSxCLGg9KCk9PnshdSYmc2V0VGltZW91dCgoKT0+e2cmJmcudW5zdWJzY3JpYmUoKX0pLHU9ITB9LGI7dHJ5e2lmKGMmJmRuJiZyIT09ImdldCImJnIhPT0iaGVhZCImJihiPWF3YWl0IGhuKHMsdCkpIT09MCl7bGV0IEc9bmV3IFJlcXVlc3QoZSx7bWV0aG9kOiJQT1NUIixib2R5OnQsZHVwbGV4OiJoYWxmIn0pLHg7aWYoYS5pc0Zvcm1EYXRhKHQpJiYoeD1HLmhlYWRlcnMuZ2V0KCJjb250ZW50LXR5cGUiKSkmJnMuc2V0Q29udGVudFR5cGUoeCksRy5ib2R5KXtsZXRbSEEsQkFdPXNlKGIseihJZShjKSkpO3Q9Q2UoRy5ib2R5LHV0LEhBLEJBLGNlKX19YS5pc1N0cmluZyhJKXx8KEk9ST8iaW5jbHVkZSI6Im9taXQiKSxCPW5ldyBSZXF1ZXN0KGUsey4uLmYsc2lnbmFsOmcsbWV0aG9kOnIudG9VcHBlckNhc2UoKSxoZWFkZXJzOnMubm9ybWFsaXplKCkudG9KU09OKCksYm9keTp0LGR1cGxleDoiaGFsZiIsY3JlZGVudGlhbHM6SX0pO2xldCBkPWF3YWl0IGZldGNoKEIpLE49QmUmJihDPT09InN0cmVhbSJ8fEM9PT0icmVzcG9uc2UiKTtpZihCZSYmKGx8fE4pKXtsZXQgRz17fTtbInN0YXR1cyIsInN0YXR1c1RleHQiLCJoZWFkZXJzIl0uZm9yRWFjaChSZT0+e0dbUmVdPWRbUmVdfSk7bGV0IHg9YS50b0Zpbml0ZU51bWJlcihkLmhlYWRlcnMuZ2V0KCJjb250ZW50LWxlbmd0aCIpKSxbSEEsQkFdPWwmJnNlKHgseihJZShsKSwhMCkpfHxbXTtkPW5ldyBSZXNwb25zZShDZShkLmJvZHksdXQsSEEsKCk9PntCQSYmQkEoKSxOJiZoKCl9LGNlKSxHKX1DPUN8fCJ0ZXh0IjtsZXQgcT1hd2FpdCBVQVthLmZpbmRLZXkoVUEsQyl8fCJ0ZXh0Il0oZCxBKTtyZXR1cm4hTiYmaCgpLEUmJkUoKSxhd2FpdCBuZXcgUHJvbWlzZSgoRyx4KT0+e3NBKEcseCx7ZGF0YTpxLGhlYWRlcnM6RC5mcm9tKGQuaGVhZGVycyksc3RhdHVzOmQuc3RhdHVzLHN0YXR1c1RleHQ6ZC5zdGF0dXNUZXh0LGNvbmZpZzpBLHJlcXVlc3Q6Qn0pfSl9Y2F0Y2goZCl7dGhyb3cgaCgpLGQmJmQubmFtZT09PSJUeXBlRXJyb3IiJiYvZmV0Y2gvaS50ZXN0KGQubWVzc2FnZSk/T2JqZWN0LmFzc2lnbihuZXcgUSgiTmV0d29yayBFcnJvciIsUS5FUlJfTkVUV09SSyxBLEIpLHtjYXVzZTpkLmNhdXNlfHxkfSk6US5mcm9tKGQsZCYmZC5jb2RlLEEsQil9fSk7dmFyIEVlPXtodHRwOkRBLHhocjpFdCxmZXRjaDpkdH07YS5mb3JFYWNoKEVlLChBLGUpPT57aWYoQSl7dHJ5e09iamVjdC5kZWZpbmVQcm9wZXJ0eShBLCJuYW1lIix7dmFsdWU6ZX0pfWNhdGNoe31PYmplY3QuZGVmaW5lUHJvcGVydHkoQSwiYWRhcHRlck5hbWUiLHt2YWx1ZTplfSl9fSk7dmFyIG10PUE9PmAtICR7QX1gLHluPUE9PmEuaXNGdW5jdGlvbihBKXx8QT09PW51bGx8fEE9PT0hMSxUQT17Z2V0QWRhcHRlcjpBPT57QT1hLmlzQXJyYXkoQSk/QTpbQV07bGV0e2xlbmd0aDplfT1BLHIsdCxuPXt9O2ZvcihsZXQgbz0wO288ZTtvKyspe3I9QVtvXTtsZXQgaTtpZih0PXIsIXluKHIpJiYodD1FZVsoaT1TdHJpbmcocikpLnRvTG93ZXJDYXNlKCldLHQ9PT12b2lkIDApKXRocm93IG5ldyBRKGBVbmtub3duIGFkYXB0ZXIgJyR7aX0nYCk7aWYodClicmVhaztuW2l8fCIjIitvXT10fWlmKCF0KXtsZXQgbz1PYmplY3QuZW50cmllcyhuKS5tYXAoKFtsLGNdKT0+YGFkYXB0ZXIgJHtsfSBgKyhjPT09ITE/ImlzIG5vdCBzdXBwb3J0ZWQgYnkgdGhlIGVudmlyb25tZW50IjoiaXMgbm90IGF2YWlsYWJsZSBpbiB0aGUgYnVpbGQiKSksaT1lP28ubGVuZ3RoPjE/YHNpbmNlIDoKYCtvLm1hcChtdCkuam9pbihgCmApOiIgIittdChvWzBdKToiYXMgbm8gYWRhcHRlciBzcGVjaWZpZWQiO3Rocm93IG5ldyBRKCJUaGVyZSBpcyBubyBzdWl0YWJsZSBhZGFwdGVyIHRvIGRpc3BhdGNoIHRoZSByZXF1ZXN0ICIraSwiRVJSX05PVF9TVVBQT1JUIil9cmV0dXJuIHR9LGFkYXB0ZXJzOkVlfTtmdW5jdGlvbiBmZShBKXtpZihBLmNhbmNlbFRva2VuJiZBLmNhbmNlbFRva2VuLnRocm93SWZSZXF1ZXN0ZWQoKSxBLnNpZ25hbCYmQS5zaWduYWwuYWJvcnRlZCl0aHJvdyBuZXcgUChudWxsLEEpfWZ1bmN0aW9uIExBKEEpe3JldHVybiBmZShBKSxBLmhlYWRlcnM9RC5mcm9tKEEuaGVhZGVycyksQS5kYXRhPWlBLmNhbGwoQSxBLnRyYW5zZm9ybVJlcXVlc3QpLFsicG9zdCIsInB1dCIsInBhdGNoIl0uaW5kZXhPZihBLm1ldGhvZCkhPT0tMSYmQS5oZWFkZXJzLnNldENvbnRlbnRUeXBlKCJhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQiLCExKSxUQS5nZXRBZGFwdGVyKEEuYWRhcHRlcnx8Xy5hZGFwdGVyKShBKS50aGVuKGZ1bmN0aW9uKHQpe3JldHVybiBmZShBKSx0LmRhdGE9aUEuY2FsbChBLEEudHJhbnNmb3JtUmVzcG9uc2UsdCksdC5oZWFkZXJzPUQuZnJvbSh0LmhlYWRlcnMpLHR9LGZ1bmN0aW9uKHQpe3JldHVybiBhQSh0KXx8KGZlKEEpLHQmJnQucmVzcG9uc2UmJih0LnJlc3BvbnNlLmRhdGE9aUEuY2FsbChBLEEudHJhbnNmb3JtUmVzcG9uc2UsdC5yZXNwb25zZSksdC5yZXNwb25zZS5oZWFkZXJzPUQuZnJvbSh0LnJlc3BvbnNlLmhlYWRlcnMpKSksUHJvbWlzZS5yZWplY3QodCl9KX12YXIgR0E9IjEuNy40Ijt2YXIgdWU9e307WyJvYmplY3QiLCJib29sZWFuIiwibnVtYmVyIiwiZnVuY3Rpb24iLCJzdHJpbmciLCJzeW1ib2wiXS5mb3JFYWNoKChBLGUpPT57dWVbQV09ZnVuY3Rpb24odCl7cmV0dXJuIHR5cGVvZiB0PT09QXx8ImEiKyhlPDE/Im4gIjoiICIpK0F9fSk7dmFyIGh0PXt9O3VlLnRyYW5zaXRpb25hbD1mdW5jdGlvbihlLHIsdCl7ZnVuY3Rpb24gbihvLGkpe3JldHVybiJbQXhpb3MgdiIrR0ErIl0gVHJhbnNpdGlvbmFsIG9wdGlvbiAnIitvKyInIitpKyh0PyIuICIrdDoiIil9cmV0dXJuKG8saSxsKT0+e2lmKGU9PT0hMSl0aHJvdyBuZXcgUShuKGksIiBoYXMgYmVlbiByZW1vdmVkIisocj8iIGluICIrcjoiIikpLFEuRVJSX0RFUFJFQ0FURUQpO3JldHVybiByJiYhaHRbaV0mJihodFtpXT0hMCxjb25zb2xlLndhcm4obihpLCIgaGFzIGJlZW4gZGVwcmVjYXRlZCBzaW5jZSB2IityKyIgYW5kIHdpbGwgYmUgcmVtb3ZlZCBpbiB0aGUgbmVhciBmdXR1cmUiKSkpLGU/ZShvLGksbCk6ITB9fTtmdW5jdGlvbiB3bihBLGUscil7aWYodHlwZW9mIEEhPSJvYmplY3QiKXRocm93IG5ldyBRKCJvcHRpb25zIG11c3QgYmUgYW4gb2JqZWN0IixRLkVSUl9CQURfT1BUSU9OX1ZBTFVFKTtsZXQgdD1PYmplY3Qua2V5cyhBKSxuPXQubGVuZ3RoO2Zvcig7bi0tID4wOyl7bGV0IG89dFtuXSxpPWVbb107aWYoaSl7bGV0IGw9QVtvXSxjPWw9PT12b2lkIDB8fGkobCxvLEEpO2lmKGMhPT0hMCl0aHJvdyBuZXcgUSgib3B0aW9uICIrbysiIG11c3QgYmUgIitjLFEuRVJSX0JBRF9PUFRJT05fVkFMVUUpO2NvbnRpbnVlfWlmKHIhPT0hMCl0aHJvdyBuZXcgUSgiVW5rbm93biBvcHRpb24gIitvLFEuRVJSX0JBRF9PUFRJT04pfX12YXIgeEE9e2Fzc2VydE9wdGlvbnM6d24sdmFsaWRhdG9yczp1ZX07dmFyIE09eEEudmFsaWRhdG9ycyxaPWNsYXNze2NvbnN0cnVjdG9yKGUpe3RoaXMuZGVmYXVsdHM9ZSx0aGlzLmludGVyY2VwdG9ycz17cmVxdWVzdDpuZXcgZWUscmVzcG9uc2U6bmV3IGVlfX1hc3luYyByZXF1ZXN0KGUscil7dHJ5e3JldHVybiBhd2FpdCB0aGlzLl9yZXF1ZXN0KGUscil9Y2F0Y2godCl7aWYodCBpbnN0YW5jZW9mIEVycm9yKXtsZXQgbjtFcnJvci5jYXB0dXJlU3RhY2tUcmFjZT9FcnJvci5jYXB0dXJlU3RhY2tUcmFjZShuPXt9KTpuPW5ldyBFcnJvcjtsZXQgbz1uLnN0YWNrP24uc3RhY2sucmVwbGFjZSgvXi4rXG4vLCIiKToiIjt0cnl7dC5zdGFjaz9vJiYhU3RyaW5nKHQuc3RhY2spLmVuZHNXaXRoKG8ucmVwbGFjZSgvXi4rXG4uK1xuLywiIikpJiYodC5zdGFjays9YApgK28pOnQuc3RhY2s9b31jYXRjaHt9fXRocm93IHR9fV9yZXF1ZXN0KGUscil7dHlwZW9mIGU9PSJzdHJpbmciPyhyPXJ8fHt9LHIudXJsPWUpOnI9ZXx8e30scj1MKHRoaXMuZGVmYXVsdHMscik7bGV0e3RyYW5zaXRpb25hbDp0LHBhcmFtc1NlcmlhbGl6ZXI6bixoZWFkZXJzOm99PXI7dCE9PXZvaWQgMCYmeEEuYXNzZXJ0T3B0aW9ucyh0LHtzaWxlbnRKU09OUGFyc2luZzpNLnRyYW5zaXRpb25hbChNLmJvb2xlYW4pLGZvcmNlZEpTT05QYXJzaW5nOk0udHJhbnNpdGlvbmFsKE0uYm9vbGVhbiksY2xhcmlmeVRpbWVvdXRFcnJvcjpNLnRyYW5zaXRpb25hbChNLmJvb2xlYW4pfSwhMSksbiE9bnVsbCYmKGEuaXNGdW5jdGlvbihuKT9yLnBhcmFtc1NlcmlhbGl6ZXI9e3NlcmlhbGl6ZTpufTp4QS5hc3NlcnRPcHRpb25zKG4se2VuY29kZTpNLmZ1bmN0aW9uLHNlcmlhbGl6ZTpNLmZ1bmN0aW9ufSwhMCkpLHIubWV0aG9kPShyLm1ldGhvZHx8dGhpcy5kZWZhdWx0cy5tZXRob2R8fCJnZXQiKS50b0xvd2VyQ2FzZSgpO2xldCBpPW8mJmEubWVyZ2Uoby5jb21tb24sb1tyLm1ldGhvZF0pO28mJmEuZm9yRWFjaChbImRlbGV0ZSIsImdldCIsImhlYWQiLCJwb3N0IiwicHV0IiwicGF0Y2giLCJjb21tb24iXSxFPT57ZGVsZXRlIG9bRV19KSxyLmhlYWRlcnM9RC5jb25jYXQoaSxvKTtsZXQgbD1bXSxjPSEwO3RoaXMuaW50ZXJjZXB0b3JzLnJlcXVlc3QuZm9yRWFjaChmdW5jdGlvbih1KXt0eXBlb2YgdS5ydW5XaGVuPT0iZnVuY3Rpb24iJiZ1LnJ1bldoZW4ocik9PT0hMXx8KGM9YyYmdS5zeW5jaHJvbm91cyxsLnVuc2hpZnQodS5mdWxmaWxsZWQsdS5yZWplY3RlZCkpfSk7bGV0IEM9W107dGhpcy5pbnRlcmNlcHRvcnMucmVzcG9uc2UuZm9yRWFjaChmdW5jdGlvbih1KXtDLnB1c2godS5mdWxmaWxsZWQsdS5yZWplY3RlZCl9KTtsZXQgcyxJPTAsZjtpZighYyl7bGV0IEU9W0xBLmJpbmQodGhpcyksdm9pZCAwXTtmb3IoRS51bnNoaWZ0LmFwcGx5KEUsbCksRS5wdXNoLmFwcGx5KEUsQyksZj1FLmxlbmd0aCxzPVByb21pc2UucmVzb2x2ZShyKTtJPGY7KXM9cy50aGVuKEVbSSsrXSxFW0krK10pO3JldHVybiBzfWY9bC5sZW5ndGg7bGV0IGc9cjtmb3IoST0wO0k8Zjspe2xldCBFPWxbSSsrXSx1PWxbSSsrXTt0cnl7Zz1FKGcpfWNhdGNoKEIpe3UuY2FsbCh0aGlzLEIpO2JyZWFrfX10cnl7cz1MQS5jYWxsKHRoaXMsZyl9Y2F0Y2goRSl7cmV0dXJuIFByb21pc2UucmVqZWN0KEUpfWZvcihJPTAsZj1DLmxlbmd0aDtJPGY7KXM9cy50aGVuKENbSSsrXSxDW0krK10pO3JldHVybiBzfWdldFVyaShlKXtlPUwodGhpcy5kZWZhdWx0cyxlKTtsZXQgcj1JQShlLmJhc2VVUkwsZS51cmwpO3JldHVybiBuQShyLGUucGFyYW1zLGUucGFyYW1zU2VyaWFsaXplcil9fTthLmZvckVhY2goWyJkZWxldGUiLCJnZXQiLCJoZWFkIiwib3B0aW9ucyJdLGZ1bmN0aW9uKGUpe1oucHJvdG90eXBlW2VdPWZ1bmN0aW9uKHIsdCl7cmV0dXJuIHRoaXMucmVxdWVzdChMKHR8fHt9LHttZXRob2Q6ZSx1cmw6cixkYXRhOih0fHx7fSkuZGF0YX0pKX19KTthLmZvckVhY2goWyJwb3N0IiwicHV0IiwicGF0Y2giXSxmdW5jdGlvbihlKXtmdW5jdGlvbiByKHQpe3JldHVybiBmdW5jdGlvbihvLGksbCl7cmV0dXJuIHRoaXMucmVxdWVzdChMKGx8fHt9LHttZXRob2Q6ZSxoZWFkZXJzOnQ/eyJDb250ZW50LVR5cGUiOiJtdWx0aXBhcnQvZm9ybS1kYXRhIn06e30sdXJsOm8sZGF0YTppfSkpfX1aLnByb3RvdHlwZVtlXT1yKCksWi5wcm90b3R5cGVbZSsiRm9ybSJdPXIoITApfSk7dmFyIGdBPVo7dmFyIFFlPWNsYXNzIEF7Y29uc3RydWN0b3IoZSl7aWYodHlwZW9mIGUhPSJmdW5jdGlvbiIpdGhyb3cgbmV3IFR5cGVFcnJvcigiZXhlY3V0b3IgbXVzdCBiZSBhIGZ1bmN0aW9uLiIpO2xldCByO3RoaXMucHJvbWlzZT1uZXcgUHJvbWlzZShmdW5jdGlvbihvKXtyPW99KTtsZXQgdD10aGlzO3RoaXMucHJvbWlzZS50aGVuKG49PntpZighdC5fbGlzdGVuZXJzKXJldHVybjtsZXQgbz10Ll9saXN0ZW5lcnMubGVuZ3RoO2Zvcig7by0tID4wOyl0Ll9saXN0ZW5lcnNbb10obik7dC5fbGlzdGVuZXJzPW51bGx9KSx0aGlzLnByb21pc2UudGhlbj1uPT57bGV0IG8saT1uZXcgUHJvbWlzZShsPT57dC5zdWJzY3JpYmUobCksbz1sfSkudGhlbihuKTtyZXR1cm4gaS5jYW5jZWw9ZnVuY3Rpb24oKXt0LnVuc3Vic2NyaWJlKG8pfSxpfSxlKGZ1bmN0aW9uKG8saSxsKXt0LnJlYXNvbnx8KHQucmVhc29uPW5ldyBQKG8saSxsKSxyKHQucmVhc29uKSl9KX10aHJvd0lmUmVxdWVzdGVkKCl7aWYodGhpcy5yZWFzb24pdGhyb3cgdGhpcy5yZWFzb259c3Vic2NyaWJlKGUpe2lmKHRoaXMucmVhc29uKXtlKHRoaXMucmVhc29uKTtyZXR1cm59dGhpcy5fbGlzdGVuZXJzP3RoaXMuX2xpc3RlbmVycy5wdXNoKGUpOnRoaXMuX2xpc3RlbmVycz1bZV19dW5zdWJzY3JpYmUoZSl7aWYoIXRoaXMuX2xpc3RlbmVycylyZXR1cm47bGV0IHI9dGhpcy5fbGlzdGVuZXJzLmluZGV4T2YoZSk7ciE9PS0xJiZ0aGlzLl9saXN0ZW5lcnMuc3BsaWNlKHIsMSl9c3RhdGljIHNvdXJjZSgpe2xldCBlO3JldHVybnt0b2tlbjpuZXcgQShmdW5jdGlvbihuKXtlPW59KSxjYW5jZWw6ZX19fSx5dD1RZTtmdW5jdGlvbiBwZShBKXtyZXR1cm4gZnVuY3Rpb24ocil7cmV0dXJuIEEuYXBwbHkobnVsbCxyKX19ZnVuY3Rpb24gZGUoQSl7cmV0dXJuIGEuaXNPYmplY3QoQSkmJkEuaXNBeGlvc0Vycm9yPT09ITB9dmFyIG1lPXtDb250aW51ZToxMDAsU3dpdGNoaW5nUHJvdG9jb2xzOjEwMSxQcm9jZXNzaW5nOjEwMixFYXJseUhpbnRzOjEwMyxPazoyMDAsQ3JlYXRlZDoyMDEsQWNjZXB0ZWQ6MjAyLE5vbkF1dGhvcml0YXRpdmVJbmZvcm1hdGlvbjoyMDMsTm9Db250ZW50OjIwNCxSZXNldENvbnRlbnQ6MjA1LFBhcnRpYWxDb250ZW50OjIwNixNdWx0aVN0YXR1czoyMDcsQWxyZWFkeVJlcG9ydGVkOjIwOCxJbVVzZWQ6MjI2LE11bHRpcGxlQ2hvaWNlczozMDAsTW92ZWRQZXJtYW5lbnRseTozMDEsRm91bmQ6MzAyLFNlZU90aGVyOjMwMyxOb3RNb2RpZmllZDozMDQsVXNlUHJveHk6MzA1LFVudXNlZDozMDYsVGVtcG9yYXJ5UmVkaXJlY3Q6MzA3LFBlcm1hbmVudFJlZGlyZWN0OjMwOCxCYWRSZXF1ZXN0OjQwMCxVbmF1dGhvcml6ZWQ6NDAxLFBheW1lbnRSZXF1aXJlZDo0MDIsRm9yYmlkZGVuOjQwMyxOb3RGb3VuZDo0MDQsTWV0aG9kTm90QWxsb3dlZDo0MDUsTm90QWNjZXB0YWJsZTo0MDYsUHJveHlBdXRoZW50aWNhdGlvblJlcXVpcmVkOjQwNyxSZXF1ZXN0VGltZW91dDo0MDgsQ29uZmxpY3Q6NDA5LEdvbmU6NDEwLExlbmd0aFJlcXVpcmVkOjQxMSxQcmVjb25kaXRpb25GYWlsZWQ6NDEyLFBheWxvYWRUb29MYXJnZTo0MTMsVXJpVG9vTG9uZzo0MTQsVW5zdXBwb3J0ZWRNZWRpYVR5cGU6NDE1LFJhbmdlTm90U2F0aXNmaWFibGU6NDE2LEV4cGVjdGF0aW9uRmFpbGVkOjQxNyxJbUFUZWFwb3Q6NDE4LE1pc2RpcmVjdGVkUmVxdWVzdDo0MjEsVW5wcm9jZXNzYWJsZUVudGl0eTo0MjIsTG9ja2VkOjQyMyxGYWlsZWREZXBlbmRlbmN5OjQyNCxUb29FYXJseTo0MjUsVXBncmFkZVJlcXVpcmVkOjQyNixQcmVjb25kaXRpb25SZXF1aXJlZDo0MjgsVG9vTWFueVJlcXVlc3RzOjQyOSxSZXF1ZXN0SGVhZGVyRmllbGRzVG9vTGFyZ2U6NDMxLFVuYXZhaWxhYmxlRm9yTGVnYWxSZWFzb25zOjQ1MSxJbnRlcm5hbFNlcnZlckVycm9yOjUwMCxOb3RJbXBsZW1lbnRlZDo1MDEsQmFkR2F0ZXdheTo1MDIsU2VydmljZVVuYXZhaWxhYmxlOjUwMyxHYXRld2F5VGltZW91dDo1MDQsSHR0cFZlcnNpb25Ob3RTdXBwb3J0ZWQ6NTA1LFZhcmlhbnRBbHNvTmVnb3RpYXRlczo1MDYsSW5zdWZmaWNpZW50U3RvcmFnZTo1MDcsTG9vcERldGVjdGVkOjUwOCxOb3RFeHRlbmRlZDo1MTAsTmV0d29ya0F1dGhlbnRpY2F0aW9uUmVxdWlyZWQ6NTExfTtPYmplY3QuZW50cmllcyhtZSkuZm9yRWFjaCgoW0EsZV0pPT57bWVbZV09QX0pO3ZhciB3dD1tZTtmdW5jdGlvbiBEdChBKXtsZXQgZT1uZXcgZ0EoQSkscj1lQShnQS5wcm90b3R5cGUucmVxdWVzdCxlKTtyZXR1cm4gYS5leHRlbmQocixnQS5wcm90b3R5cGUsZSx7YWxsT3duS2V5czohMH0pLGEuZXh0ZW5kKHIsZSxudWxsLHthbGxPd25LZXlzOiEwfSksci5jcmVhdGU9ZnVuY3Rpb24obil7cmV0dXJuIER0KEwoQSxuKSl9LHJ9dmFyIHk9RHQoXyk7eS5BeGlvcz1nQTt5LkNhbmNlbGVkRXJyb3I9UDt5LkNhbmNlbFRva2VuPXl0O3kuaXNDYW5jZWw9YUE7eS5WRVJTSU9OPUdBO3kudG9Gb3JtRGF0YT1KO3kuQXhpb3NFcnJvcj1RO3kuQ2FuY2VsPXkuQ2FuY2VsZWRFcnJvcjt5LmFsbD1mdW5jdGlvbihlKXtyZXR1cm4gUHJvbWlzZS5hbGwoZSl9O3kuc3ByZWFkPXBlO3kuaXNBeGlvc0Vycm9yPWRlO3kubWVyZ2VDb25maWc9TDt5LkF4aW9zSGVhZGVycz1EO3kuZm9ybVRvSlNPTj1BPT5SQShhLmlzSFRNTEZvcm0oQSk/bmV3IEZvcm1EYXRhKEEpOkEpO3kuZ2V0QWRhcHRlcj1UQS5nZXRBZGFwdGVyO3kuSHR0cFN0YXR1c0NvZGU9d3Q7eS5kZWZhdWx0PXk7dmFyIFg9eTt2YXJ7QXhpb3M6VXMsQXhpb3NFcnJvcjpOcyxDYW5jZWxlZEVycm9yOlRzLGlzQ2FuY2VsOkxzLENhbmNlbFRva2VuOkdzLFZFUlNJT046eHMsYWxsOk9zLENhbmNlbDpQcyxpc0F4aW9zRXJyb3I6SnMsc3ByZWFkOk1zLHRvRm9ybURhdGE6SHMsQXhpb3NIZWFkZXJzOnFzLEh0dHBTdGF0dXNDb2RlOllzLGZvcm1Ub0pTT046S3MsZ2V0QWRhcHRlcjp2cyxtZXJnZUNvbmZpZzpXc309WDthc3luYyBmdW5jdGlvbiBEbihBLGUpe2xldCByPUEsdD1udWxsO2lmKHI9PW51bGwpdD1uZXcgV29ya2VyKG5ldyBVUkwoIi4vd2ViLXdvcmtlcnMvaXRrLXdhc20tcGlwZWxpbmUud29ya2VyLmpzIixpbXBvcnQubWV0YS51cmwpLHt0eXBlOiJtb2R1bGUifSk7ZWxzZSBpZihyLnN0YXJ0c1dpdGgoImh0dHAiKSl7bGV0IG49YXdhaXQgWC5nZXQocix7cmVzcG9uc2VUeXBlOiJibG9iIixwYXJhbXM6ZX0pLG89VVJMLmNyZWF0ZU9iamVjdFVSTChuLmRhdGEpO3Q9bmV3IFdvcmtlcihvLHt0eXBlOiJtb2R1bGUifSl9ZWxzZSB0PW5ldyBXb3JrZXIocix7dHlwZToibW9kdWxlIn0pO3JldHVybiB0fXZhciBsQT1EbjtmdW5jdGlvbiBTdChBKXtsZXQgZT1fQShBKSxyPUE7cmV0dXJuIHIudGVybWluYXRlZD0hMSxyLndvcmtlclByb3h5PWUsci5vcmlnaW5hbFRlcm1pbmF0ZT1yLnRlcm1pbmF0ZSxyLnRlcm1pbmF0ZT0oKT0+e3IudGVybWluYXRlZD0hMCxyLndvcmtlclByb3h5W2pBXSgpLHIub3JpZ2luYWxUZXJtaW5hdGUoKX0se3dvcmtlclByb3h5OmUsd29ya2VyOnJ9fWFzeW5jIGZ1bmN0aW9uIFNuKEEsZSxyKXtsZXQgdDtpZihBIT1udWxsKXtsZXQgbz1BO3JldHVybiBvLndvcmtlclByb3h5IT09dm9pZCAwPyh0PW8ud29ya2VyUHJveHkse3dvcmtlclByb3h5OnQsd29ya2VyOm99KTpTdChBKX1sZXQgbj1hd2FpdCBsQShlLHIpO3JldHVybiBTdChuKX12YXIgYnQ9U247YXN5bmMgZnVuY3Rpb24gYm4oQSxlLHIpe2xldCB0PSJ1bmtub3duIjt0eXBlb2YgQSE9InN0cmluZyI/dD1BLmhyZWY6QS5zdGFydHNXaXRoKCJodHRwIik/dD1BOnQ9dHlwZW9mIGU8InUiP2Ake2V9LyR7QX1gOkEsdC5lbmRzV2l0aCgiLmpzIikmJih0PXQuc3Vic3RyaW5nKDAsdC5sZW5ndGgtMykpLHQuZW5kc1dpdGgoIi53YXNtIikmJih0PXQuc3Vic3RyaW5nKDAsdC5sZW5ndGgtNSkpO2xldCBuPWAke3R9Lndhc21gLGk9KGF3YWl0IFguZ2V0KG4se3Jlc3BvbnNlVHlwZToiYXJyYXlidWZmZXIiLHBhcmFtczpyfSkpLmRhdGE7cmV0dXJuKGF3YWl0IGltcG9ydChgJHt0fS5qc2ApKS5kZWZhdWx0KHt3YXNtQmluYXJ5Oml9KX12YXIgUnQ9Ym47dmFyIEZ0PWFzeW5jKCk9PldlYkFzc2VtYmx5LnZhbGlkYXRlKG5ldyBVaW50OEFycmF5KFswLDk3LDExNSwxMDksMSwwLDAsMCwxLDUsMSw5NiwwLDEsMTIzLDMsMiwxLDAsMTAsMTAsMSw4LDAsNjUsMCwyNTMsMTUsMjUzLDk4LDExXSkpO3ZhciBOdD10eXBlb2YgZ2xvYmFsVGhpcy5TaGFyZWRBcnJheUJ1ZmZlcj09ImZ1bmN0aW9uIixrdD1uZXcgVGV4dEVuY29kZXIsVXQ9bmV3IFRleHREZWNvZGVyKCJ1dGYtOCIpO2Z1bmN0aW9uIFJuKEEsZSl7bGV0IHI9e2ZsYWdzOiJyIixlbmNvZGluZzoiYmluYXJ5In0sdD1BLmZzX29wZW4oZSxyLmZsYWdzKSxvPUEuZnNfc3RhdChlKS5zaXplLGk9bnVsbDtOdD9pPW5ldyBTaGFyZWRBcnJheUJ1ZmZlcihvKTppPW5ldyBBcnJheUJ1ZmZlcihvKTtsZXQgbD1uZXcgVWludDhBcnJheShpKTtyZXR1cm4gQS5mc19yZWFkKHQsbCwwLG8sMCksQS5mc19jbG9zZSh0KSxsfWZ1bmN0aW9uIFR0KEEsZSxyKXtsZXQgdD1udWxsO050P3Q9bmV3IFNoYXJlZEFycmF5QnVmZmVyKHIpOnQ9bmV3IEFycmF5QnVmZmVyKHIpO2xldCBuPW5ldyBVaW50OEFycmF5KHQpLG89bmV3IFVpbnQ4QXJyYXkoQS5IRUFQVTguYnVmZmVyLGUscik7cmV0dXJuIG4uc2V0KG8pLG59ZnVuY3Rpb24gdyhBLGUscix0KXtsZXQgbj0wO3JldHVybiBlIT09bnVsbCYmKG49QS5jY2FsbCgiaXRrX3dhc21faW5wdXRfYXJyYXlfYWxsb2MiLCJudW1iZXIiLFsibnVtYmVyIiwibnVtYmVyIiwibnVtYmVyIiwibnVtYmVyIl0sWzAscix0LGUuYnVmZmVyLmJ5dGVMZW5ndGhdKSxBLkhFQVBVOC5zZXQobmV3IFVpbnQ4QXJyYXkoZS5idWZmZXIpLG4pKSxufWZ1bmN0aW9uIEgoQSxlLHIpe2xldCB0PUpTT04uc3RyaW5naWZ5KGUpLG49QS5sZW5ndGhCeXRlc1VURjgodCkrMSxvPUEuY2NhbGwoIml0a193YXNtX2lucHV0X2pzb25fYWxsb2MiLCJudW1iZXIiLFsibnVtYmVyIiwibnVtYmVyIiwibnVtYmVyIl0sWzAscixuXSk7QS5zdHJpbmdUb1VURjgodCxvLG4pfWZ1bmN0aW9uIEYoQSxlLHIsdCl7bGV0IG49QS5jY2FsbCgiaXRrX3dhc21fb3V0cHV0X2FycmF5X2FkZHJlc3MiLCJudW1iZXIiLFsibnVtYmVyIiwibnVtYmVyIiwibnVtYmVyIl0sWzAsZSxyXSksbz1BLmNjYWxsKCJpdGtfd2FzbV9vdXRwdXRfYXJyYXlfc2l6ZSIsIm51bWJlciIsWyJudW1iZXIiLCJudW1iZXIiLCJudW1iZXIiXSxbMCxlLHJdKSxpPVR0KEEsbixvKTtyZXR1cm4gTyh0LGkuYnVmZmVyKX1mdW5jdGlvbiBDQShBLGUpe2xldCByPUEuY2NhbGwoIml0a193YXNtX291dHB1dF9qc29uX2FkZHJlc3MiLCJudW1iZXIiLFsibnVtYmVyIiwibnVtYmVyIl0sWzAsZV0pLHQ9QS5VVEY4VG9TdHJpbmcocik7cmV0dXJuIEpTT04ucGFyc2UodCl9ZnVuY3Rpb24gRm4oQSxlLHIsdCl7dCE9bnVsbCYmdC5sZW5ndGg+MCYmdC5mb3JFYWNoKGZ1bmN0aW9uKEMscyl7c3dpdGNoKEMudHlwZSl7Y2FzZSBtLlRleHRTdHJlYW06e2xldCBJPWt0LmVuY29kZShDLmRhdGEuZGF0YSksZj13KEEsSSxzLDApLGc9e3NpemU6SS5idWZmZXIuYnl0ZUxlbmd0aCxkYXRhOmBkYXRhOmFwcGxpY2F0aW9uL3ZuZC5pdGsuYWRkcmVzcywwOiR7Zn1gfTtIKEEsZyxzKTticmVha31jYXNlIG0uSnNvbkNvbXBhdGlibGU6e2xldCBJPWt0LmVuY29kZShKU09OLnN0cmluZ2lmeShDLmRhdGEpKSxmPXcoQSxJLHMsMCksZz17c2l6ZTpJLmJ1ZmZlci5ieXRlTGVuZ3RoLGRhdGE6YGRhdGE6YXBwbGljYXRpb24vdm5kLml0ay5hZGRyZXNzLDA6JHtmfWB9O0goQSxnLHMpO2JyZWFrfWNhc2UgbS5CaW5hcnlTdHJlYW06e2xldCBJPUMuZGF0YS5kYXRhLGY9dyhBLEkscywwKSxnPXtzaXplOkkuYnVmZmVyLmJ5dGVMZW5ndGgsZGF0YTpgZGF0YTphcHBsaWNhdGlvbi92bmQuaXRrLmFkZHJlc3MsMDoke2Z9YH07SChBLGcscyk7YnJlYWt9Y2FzZSBtLlRleHRGaWxlOntBLmZzX3dyaXRlRmlsZShDLmRhdGEucGF0aCxDLmRhdGEuZGF0YSk7YnJlYWt9Y2FzZSBtLkJpbmFyeUZpbGU6e0EuZnNfd3JpdGVGaWxlKEMuZGF0YS5wYXRoLEMuZGF0YS5kYXRhKTticmVha31jYXNlIG0uSW1hZ2U6e2xldCBJPUMuZGF0YSxmPXcoQSxJLmRhdGEscywwKSxnPXcoQSxJLmRpcmVjdGlvbixzLDEpLEU9dHlwZW9mIEkubWV0YWRhdGE/LmVudHJpZXM8InUiP0FycmF5LmZyb20oSS5tZXRhZGF0YS5lbnRyaWVzKCkpOltdLHU9e2ltYWdlVHlwZTpJLmltYWdlVHlwZSxuYW1lOkkubmFtZSxvcmlnaW46SS5vcmlnaW4sc3BhY2luZzpJLnNwYWNpbmcsZGlyZWN0aW9uOmBkYXRhOmFwcGxpY2F0aW9uL3ZuZC5pdGsuYWRkcmVzcywwOiR7Z31gLHNpemU6SS5zaXplLGRhdGE6YGRhdGE6YXBwbGljYXRpb24vdm5kLml0ay5hZGRyZXNzLDA6JHtmfWAsbWV0YWRhdGE6RX07SChBLHUscyk7YnJlYWt9Y2FzZSBtLk1lc2g6e2xldCBJPUMuZGF0YSxmPXcoQSxJLnBvaW50cyxzLDApLGc9dyhBLEkuY2VsbHMscywxKSxFPXcoQSxJLnBvaW50RGF0YSxzLDIpLHU9dyhBLEkuY2VsbERhdGEscywzKSxCPXttZXNoVHlwZTpJLm1lc2hUeXBlLG5hbWU6SS5uYW1lLG51bWJlck9mUG9pbnRzOkkubnVtYmVyT2ZQb2ludHMscG9pbnRzOmBkYXRhOmFwcGxpY2F0aW9uL3ZuZC5pdGsuYWRkcmVzcywwOiR7Zn1gLG51bWJlck9mQ2VsbHM6SS5udW1iZXJPZkNlbGxzLGNlbGxzOmBkYXRhOmFwcGxpY2F0aW9uL3ZuZC5pdGsuYWRkcmVzcywwOiR7Z31gLGNlbGxCdWZmZXJTaXplOkkuY2VsbEJ1ZmZlclNpemUsbnVtYmVyT2ZQb2ludFBpeGVsczpJLm51bWJlck9mUG9pbnRQaXhlbHMscG9pbnREYXRhOmBkYXRhOmFwcGxpY2F0aW9uL3ZuZC5pdGsuYWRkcmVzcywwOiR7RX1gLG51bWJlck9mQ2VsbFBpeGVsczpJLm51bWJlck9mQ2VsbFBpeGVscyxjZWxsRGF0YTpgZGF0YTphcHBsaWNhdGlvbi92bmQuaXRrLmFkZHJlc3MsMDoke3V9YH07SChBLEIscyk7YnJlYWt9Y2FzZSBtLlBvaW50U2V0OntsZXQgST1DLmRhdGEsZj13KEEsSS5wb2ludHMscywwKSxnPXcoQSxJLnBvaW50RGF0YSxzLDEpLEU9e3BvaW50U2V0VHlwZTpJLnBvaW50U2V0VHlwZSxuYW1lOkkubmFtZSxudW1iZXJPZlBvaW50czpJLm51bWJlck9mUG9pbnRzLHBvaW50czpgZGF0YTphcHBsaWNhdGlvbi92bmQuaXRrLmFkZHJlc3MsMDoke2Z9YCxudW1iZXJPZlBvaW50UGl4ZWxzOkkubnVtYmVyT2ZQb2ludFBpeGVscyxwb2ludERhdGE6YGRhdGE6YXBwbGljYXRpb24vdm5kLml0ay5hZGRyZXNzLDA6JHtnfWB9O0goQSxFLHMpO2JyZWFrfWNhc2UgbS5UcmFuc2Zvcm1MaXN0OntsZXQgST1DLmRhdGEsZj1bXTtJLmZvckVhY2goKGcsRSk9PntsZXQgQj1gZGF0YTphcHBsaWNhdGlvbi92bmQuaXRrLmFkZHJlc3MsMDoke3coQSxnLmZpeGVkUGFyYW1ldGVycyxzLEUqMil9YCxiPWBkYXRhOmFwcGxpY2F0aW9uL3ZuZC5pdGsuYWRkcmVzcywwOiR7dyhBLGcucGFyYW1ldGVycyxzLEUqMisxKX1gLGQ9e3RyYW5zZm9ybVR5cGU6Zy50cmFuc2Zvcm1UeXBlLG51bWJlck9mRml4ZWRQYXJhbWV0ZXJzOmcubnVtYmVyT2ZGaXhlZFBhcmFtZXRlcnMsbnVtYmVyT2ZQYXJhbWV0ZXJzOmcubnVtYmVyT2ZQYXJhbWV0ZXJzLG5hbWU6Zy5uYW1lLGlucHV0U3BhY2VOYW1lOmcuaW5wdXRTcGFjZU5hbWUsb3V0cHV0U3BhY2VOYW1lOmcub3V0cHV0U3BhY2VOYW1lLHBhcmFtZXRlcnM6YixmaXhlZFBhcmFtZXRlcnM6Qn07Zi5wdXNoKGQpfSksSChBLGYscyk7YnJlYWt9Y2FzZSBtLlBvbHlEYXRhOntsZXQgST1DLmRhdGEsZj13KEEsSS5wb2ludHMscywwKSxnPXcoQSxJLnZlcnRpY2VzLHMsMSksRT13KEEsSS5saW5lcyxzLDIpLHU9dyhBLEkucG9seWdvbnMscywzKSxCPXcoQSxJLnRyaWFuZ2xlU3RyaXBzLHMsNCksaD13KEEsSS5wb2ludERhdGEscyw1KSxiPXcoQSxJLnBvaW50RGF0YSxzLDYpLGQ9e3BvbHlEYXRhVHlwZTpJLnBvbHlEYXRhVHlwZSxuYW1lOkkubmFtZSxudW1iZXJPZlBvaW50czpJLm51bWJlck9mUG9pbnRzLHBvaW50czpgZGF0YTphcHBsaWNhdGlvbi92bmQuaXRrLmFkZHJlc3MsMDoke2Z9YCx2ZXJ0aWNlc0J1ZmZlclNpemU6SS52ZXJ0aWNlc0J1ZmZlclNpemUsdmVydGljZXM6YGRhdGE6YXBwbGljYXRpb24vdm5kLml0ay5hZGRyZXNzLDA6JHtnfWAsbGluZXNCdWZmZXJTaXplOkkubGluZXNCdWZmZXJTaXplLGxpbmVzOmBkYXRhOmFwcGxpY2F0aW9uL3ZuZC5pdGsuYWRkcmVzcywwOiR7RX1gLHBvbHlnb25zQnVmZmVyU2l6ZTpJLnBvbHlnb25zQnVmZmVyU2l6ZSxwb2x5Z29uczpgZGF0YTphcHBsaWNhdGlvbi92bmQuaXRrLmFkZHJlc3MsMDoke3V9YCx0cmlhbmdsZVN0cmlwc0J1ZmZlclNpemU6SS50cmlhbmdsZVN0cmlwc0J1ZmZlclNpemUsdHJpYW5nbGVTdHJpcHM6YGRhdGE6YXBwbGljYXRpb24vdm5kLml0ay5hZGRyZXNzLDA6JHtCfWAsbnVtYmVyT2ZQb2ludFBpeGVsczpJLm51bWJlck9mUG9pbnRQaXhlbHMscG9pbnREYXRhOmBkYXRhOmFwcGxpY2F0aW9uL3ZuZC5pdGsuYWRkcmVzcywwOiR7aH1gLG51bWJlck9mQ2VsbFBpeGVsczpJLm51bWJlck9mQ2VsbFBpeGVscyxjZWxsRGF0YTpgZGF0YTphcHBsaWNhdGlvbi92bmQuaXRrLmFkZHJlc3MsMDoke2J9YH07SChBLGQscyk7YnJlYWt9ZGVmYXVsdDp0aHJvdyBFcnJvcigiVW5zdXBwb3J0ZWQgaW5wdXQgSW50ZXJmYWNlVHlwZSIpfX0pLEEucmVzZXRNb2R1bGVTdGRvdXQoKSxBLnJlc2V0TW9kdWxlU3RkZXJyKCk7bGV0IG49QS5zdGFja1NhdmUoKSxvPTA7dHJ5e289QS5jYWxsTWFpbihlLnNsaWNlKCkpfWNhdGNoKEMpe3Rocm93IHR5cGVvZiBDPT0ibnVtYmVyIiYmKGNvbnNvbGUubG9nKCJFeGNlcHRpb24gd2hpbGUgcnVubmluZyBwaXBlbGluZToiKSxjb25zb2xlLmxvZygic3Rkb3V0OiIsQS5nZXRNb2R1bGVTdGRvdXQoKSksY29uc29sZS5lcnJvcigic3RkZXJyOiIsQS5nZXRNb2R1bGVTdGRlcnIoKSksdHlwZW9mIEEuZ2V0RXhjZXB0aW9uTWVzc2FnZTwidSI/Y29uc29sZS5lcnJvcigiZXhjZXB0aW9uOiIsQS5nZXRFeGNlcHRpb25NZXNzYWdlKEMpKTpjb25zb2xlLmVycm9yKCJCdWlsZCBtb2R1bGUgaW4gRGVidWcgbW9kZSBmb3IgZXhjZXB0aW9uIG1lc3NhZ2UgaW5mb3JtYXRpb24uIikpLEN9ZmluYWxseXtBLnN0YWNrUmVzdG9yZShuKX1sZXQgaT1BLmdldE1vZHVsZVN0ZG91dCgpLGw9QS5nZXRNb2R1bGVTdGRlcnIoKSxjPVtdO3JldHVybiByIT1udWxsJiZyLmxlbmd0aD4wJiZvPT09MCYmci5mb3JFYWNoKGZ1bmN0aW9uKEMscyl7bGV0IEk9bnVsbDtzd2l0Y2goQy50eXBlKXtjYXNlIG0uVGV4dFN0cmVhbTp7bGV0IGc9QS5jY2FsbCgiaXRrX3dhc21fb3V0cHV0X2FycmF5X2FkZHJlc3MiLCJudW1iZXIiLFsibnVtYmVyIiwibnVtYmVyIiwibnVtYmVyIl0sWzAscywwXSksRT1BLmNjYWxsKCJpdGtfd2FzbV9vdXRwdXRfYXJyYXlfc2l6ZSIsIm51bWJlciIsWyJudW1iZXIiLCJudW1iZXIiLCJudW1iZXIiXSxbMCxzLDBdKSx1PW5ldyBVaW50OEFycmF5KEEuSEVBUFU4LmJ1ZmZlcixnLEUpO0k9e2RhdGE6VXQuZGVjb2RlKHUpfTticmVha31jYXNlIG0uSnNvbkNvbXBhdGlibGU6e2xldCBnPUEuY2NhbGwoIml0a193YXNtX291dHB1dF9hcnJheV9hZGRyZXNzIiwibnVtYmVyIixbIm51bWJlciIsIm51bWJlciIsIm51bWJlciJdLFswLHMsMF0pLEU9QS5jY2FsbCgiaXRrX3dhc21fb3V0cHV0X2FycmF5X3NpemUiLCJudW1iZXIiLFsibnVtYmVyIiwibnVtYmVyIiwibnVtYmVyIl0sWzAscywwXSksdT1uZXcgVWludDhBcnJheShBLkhFQVBVOC5idWZmZXIsZyxFKTtJPUpTT04ucGFyc2UoVXQuZGVjb2RlKHUpKTticmVha31jYXNlIG0uQmluYXJ5U3RyZWFtOntsZXQgZz1BLmNjYWxsKCJpdGtfd2FzbV9vdXRwdXRfYXJyYXlfYWRkcmVzcyIsIm51bWJlciIsWyJudW1iZXIiLCJudW1iZXIiLCJudW1iZXIiXSxbMCxzLDBdKSxFPUEuY2NhbGwoIml0a193YXNtX291dHB1dF9hcnJheV9zaXplIiwibnVtYmVyIixbIm51bWJlciIsIm51bWJlciIsIm51bWJlciJdLFswLHMsMF0pO0k9e2RhdGE6VHQoQSxnLEUpfTticmVha31jYXNlIG0uVGV4dEZpbGU6e0k9e3BhdGg6Qy5kYXRhLnBhdGgsZGF0YTpBLmZzX3JlYWRGaWxlKEMuZGF0YS5wYXRoLHtlbmNvZGluZzoidXRmOCJ9KX07YnJlYWt9Y2FzZSBtLkJpbmFyeUZpbGU6e0k9e3BhdGg6Qy5kYXRhLnBhdGgsZGF0YTpSbihBLEMuZGF0YS5wYXRoKX07YnJlYWt9Y2FzZSBtLkltYWdlOntsZXQgZz1DQShBLHMpO2cuZGF0YT1GKEEscywwLGcuaW1hZ2VUeXBlLmNvbXBvbmVudFR5cGUpLGcuZGlyZWN0aW9uPUYoQSxzLDEsUi5GbG9hdDY0KSxnLm1ldGFkYXRhPW5ldyBNYXAoZy5tZXRhZGF0YSksST1nO2JyZWFrfWNhc2UgbS5NZXNoOntsZXQgZz1DQShBLHMpO2cubnVtYmVyT2ZQb2ludHM+MD9nLnBvaW50cz1GKEEscywwLGcubWVzaFR5cGUucG9pbnRDb21wb25lbnRUeXBlKTpnLnBvaW50cz1PKGcubWVzaFR5cGUucG9pbnRDb21wb25lbnRUeXBlLG5ldyBBcnJheUJ1ZmZlcigwKSksZy5udW1iZXJPZkNlbGxzPjA/Zy5jZWxscz1GKEEscywxLGcubWVzaFR5cGUuY2VsbENvbXBvbmVudFR5cGUpOmcuY2VsbHM9TyhnLm1lc2hUeXBlLmNlbGxDb21wb25lbnRUeXBlLG5ldyBBcnJheUJ1ZmZlcigwKSksZy5udW1iZXJPZlBvaW50UGl4ZWxzPjA/Zy5wb2ludERhdGE9RihBLHMsMixnLm1lc2hUeXBlLnBvaW50UGl4ZWxDb21wb25lbnRUeXBlKTpnLnBvaW50RGF0YT1PKGcubWVzaFR5cGUucG9pbnRQaXhlbENvbXBvbmVudFR5cGUsbmV3IEFycmF5QnVmZmVyKDApKSxnLm51bWJlck9mQ2VsbFBpeGVscz4wP2cuY2VsbERhdGE9RihBLHMsMyxnLm1lc2hUeXBlLmNlbGxQaXhlbENvbXBvbmVudFR5cGUpOmcuY2VsbERhdGE9TyhnLm1lc2hUeXBlLmNlbGxQaXhlbENvbXBvbmVudFR5cGUsbmV3IEFycmF5QnVmZmVyKDApKSxJPWc7YnJlYWt9Y2FzZSBtLlBvaW50U2V0OntsZXQgZz1DQShBLHMpO2cubnVtYmVyT2ZQb2ludHM+MD9nLnBvaW50cz1GKEEscywwLGcucG9pbnRTZXRUeXBlLnBvaW50Q29tcG9uZW50VHlwZSk6Zy5wb2ludHM9TyhnLnBvaW50U2V0VHlwZS5wb2ludENvbXBvbmVudFR5cGUsbmV3IEFycmF5QnVmZmVyKDApKSxnLm51bWJlck9mUG9pbnRQaXhlbHM+MD9nLnBvaW50RGF0YT1GKEEscywxLGcucG9pbnRTZXRUeXBlLnBvaW50UGl4ZWxDb21wb25lbnRUeXBlKTpnLnBvaW50RGF0YT1PKGcucG9pbnRTZXRUeXBlLnBvaW50UGl4ZWxDb21wb25lbnRUeXBlLG5ldyBBcnJheUJ1ZmZlcigwKSksST1nO2JyZWFrfWNhc2UgbS5UcmFuc2Zvcm1MaXN0OntsZXQgZz1DQShBLHMpO2cuZm9yRWFjaCgoRSx1KT0+e0UubnVtYmVyT2ZGaXhlZFBhcmFtZXRlcnM+MCYmKGdbdV0uZml4ZWRQYXJhbWV0ZXJzPUYoQSxzLHUqMixFLnRyYW5zZm9ybVR5cGUucGFyYW1ldGVyc1ZhbHVlVHlwZSkpLEUubnVtYmVyT2ZGaXhlZFBhcmFtZXRlcnM+MCYmKGdbdV0ucGFyYW1ldGVycz1GKEEscyx1KjIrMSxFLnRyYW5zZm9ybVR5cGUucGFyYW1ldGVyc1ZhbHVlVHlwZSkpfSksST1nO2JyZWFrfWNhc2UgbS5Qb2x5RGF0YTp7bGV0IGc9Q0EoQSxzKTtnLm51bWJlck9mUG9pbnRzPjA/Zy5wb2ludHM9RihBLHMsMCxSLkZsb2F0MzIpOmcucG9pbnRzPW5ldyBGbG9hdDMyQXJyYXksZy52ZXJ0aWNlc0J1ZmZlclNpemU+MD9nLnZlcnRpY2VzPUYoQSxzLDEscC5VSW50MzIpOmcudmVydGljZXM9bmV3IFVpbnQzMkFycmF5LGcubGluZXNCdWZmZXJTaXplPjA/Zy5saW5lcz1GKEEscywyLHAuVUludDMyKTpnLmxpbmVzPW5ldyBVaW50MzJBcnJheSxnLnBvbHlnb25zQnVmZmVyU2l6ZT4wP2cucG9seWdvbnM9RihBLHMsMyxwLlVJbnQzMik6Zy5wb2x5Z29ucz1uZXcgVWludDMyQXJyYXksZy50cmlhbmdsZVN0cmlwc0J1ZmZlclNpemU+MD9nLnRyaWFuZ2xlU3RyaXBzPUYoQSxzLDQscC5VSW50MzIpOmcudHJpYW5nbGVTdHJpcHM9bmV3IFVpbnQzMkFycmF5LGcubnVtYmVyT2ZQb2ludFBpeGVscz4wP2cucG9pbnREYXRhPUYoQSxzLDUsZy5wb2x5RGF0YVR5cGUucG9pbnRQaXhlbENvbXBvbmVudFR5cGUpOmcucG9pbnREYXRhPU8oZy5wb2x5RGF0YVR5cGUucG9pbnRQaXhlbENvbXBvbmVudFR5cGUsbmV3IEFycmF5QnVmZmVyKDApKSxnLm51bWJlck9mQ2VsbFBpeGVscz4wP2cuY2VsbERhdGE9RihBLHMsNixnLnBvbHlEYXRhVHlwZS5jZWxsUGl4ZWxDb21wb25lbnRUeXBlKTpnLmNlbGxEYXRhPU8oZy5wb2x5RGF0YVR5cGUuY2VsbFBpeGVsQ29tcG9uZW50VHlwZSxuZXcgQXJyYXlCdWZmZXIoMCkpLEk9ZzticmVha31kZWZhdWx0OnRocm93IEVycm9yKCJVbnN1cHBvcnRlZCBvdXRwdXQgSW50ZXJmYWNlVHlwZSIpfWxldCBmPXt0eXBlOkMudHlwZSxkYXRhOkl9O2MucHVzaChmKX0pLHtyZXR1cm5WYWx1ZTpvLHN0ZG91dDppLHN0ZGVycjpsLG91dHB1dHM6Y319dmFyIEx0PUZuO3ZhciBrbj10eXBlb2YgZ2xvYmFsVGhpcy5TaGFyZWRBcnJheUJ1ZmZlcjwidSI7ZnVuY3Rpb24gVW4oQSxlKXtpZihBPT1udWxsKXJldHVybltdO2xldCByPVtdO2ZvcihsZXQgdD0wO3Q8QS5sZW5ndGg7dCsrKXtsZXQgbj1ObihBW3RdLGUpO24hPT1udWxsJiZyLnB1c2gobil9cmV0dXJuIHJ9ZnVuY3Rpb24gTm4oQSxlKXtpZihBPT1udWxsKXJldHVybiBudWxsO2xldCByPW51bGw7cmV0dXJuIEEuYnVmZmVyIT09dm9pZCAwP3I9QS5idWZmZXI6QS5ieXRlTGVuZ3RoIT09dm9pZCAwJiYocj1BKSxrbiYmciBpbnN0YW5jZW9mIFNoYXJlZEFycmF5QnVmZmVyP251bGw6ZT9yOnIuc2xpY2UoMCl9dmFyIEd0PVVuO2Z1bmN0aW9uIFRuKEEpe3JldHVybltBLmRhdGEsQS5kaXJlY3Rpb25dfXZhciB4dD1UbjtmdW5jdGlvbiBMbihBKXtyZXR1cm5bQS5wb2ludHMsQS5wb2ludERhdGEsQS5jZWxscyxBLmNlbGxEYXRhXX12YXIgT3Q9TG47ZnVuY3Rpb24gR24oQSl7cmV0dXJuW0EucG9pbnRzLEEudmVydGljZXMsQS5saW5lcyxBLnBvbHlnb25zLEEudHJpYW5nbGVTdHJpcHMsQS5wb2ludERhdGEsQS5jZWxsRGF0YV19dmFyIFB0PUduO3ZhciB4bjtmdW5jdGlvbiBPQSgpe3JldHVybiB4bn12YXIgT247ZnVuY3Rpb24gSnQoKXtyZXR1cm4gT259dmFyIFBuO2Z1bmN0aW9uIFBBKCl7cmV0dXJuIFBufXZhciBoZT1uZXcgTWFwO2Z1bmN0aW9uIEpuKCl7bGV0IEE9UEEoKTtyZXR1cm4gdHlwZW9mIEE+InUiJiYoQT1udWxsKSxBfWZ1bmN0aW9uIE10KCl7bGV0IEE9T0EoKTtyZXR1cm4gdHlwZW9mIEE+InUiJiYoQT1uZXcgVVJMKCIvcGlwZWxpbmVzIixkb2N1bWVudC5sb2NhdGlvbi5vcmlnaW4pLmhyZWYpLEF9ZnVuY3Rpb24gSkEoKXtsZXQgQT1KdCgpO3JldHVybiB0eXBlb2YgQT4idSImJihBPXt9KSxBfWFzeW5jIGZ1bmN0aW9uIE1uKEEsZSxyKXtsZXQgdD1BLG49QTtpZih0eXBlb2YgQSE9InN0cmluZyImJih0PW5ldyBVUkwoQS5ocmVmKSxuPXQuaHJlZiksaGUuaGFzKG4pKXJldHVybiBoZS5nZXQobik7e2xldCBvPWF3YWl0IFJ0KEEsZT8udG9TdHJpbmcoKT8/TXQoKSxyPz9KQSgpKTtyZXR1cm4gaGUuc2V0KG4sbyksb319YXN5bmMgZnVuY3Rpb24gSG4oQSxlLHIsdCxuKXtpZighYXdhaXQgRnQoKSl7bGV0IEI9IldlYkFzc2VtYmx5IFNJTUQgc3VwcG9ydCBpcyByZXF1aXJlZCAtLSBwbGVhc2UgdXBkYXRlIHlvdXIgYnJvd3Nlci4iO3Rocm93IGFsZXJ0KEIpLG5ldyBFcnJvcihCKX1sZXQgbz1uPy53ZWJXb3JrZXI/P251bGw7aWYobz09PSExKXtsZXQgQj1hd2FpdCBNbihBLnRvU3RyaW5nKCksbj8ucGlwZWxpbmVCYXNlVXJsLG4/LnBpcGVsaW5lUXVlcnlQYXJhbXM/P0pBKCkpO3JldHVybiBMdChCLGUscix0KX1sZXQgaT1vLGw9bj8ucGlwZWxpbmVXb3JrZXJVcmw/P0puKCksYz10eXBlb2YgbCE9InN0cmluZyImJnR5cGVvZiBsPy5ocmVmPCJ1Ij9sLmhyZWY6bCx7d29ya2VyUHJveHk6Qyx3b3JrZXI6c309YXdhaXQgYnQoaSxjLG4/LnBpcGVsaW5lUXVlcnlQYXJhbXM/P0pBKCkpO2k9cztsZXQgST1bXTt0IT1udWxsJiZ0Lmxlbmd0aD4wJiZ0LmZvckVhY2goZnVuY3Rpb24oQil7aWYoQi50eXBlPT09bS5CaW5hcnlTdHJlYW0pe2xldCBoPUIuZGF0YS5kYXRhO0kucHVzaChoKX1lbHNlIGlmKEIudHlwZT09PW0uQmluYXJ5RmlsZSl7bGV0IGg9Qi5kYXRhLmRhdGE7SS5wdXNoKGgpfWVsc2UgaWYoQi50eXBlPT09bS5JbWFnZSl7bGV0IGg9Qi5kYXRhO2guZGF0YSE9PW51bGwmJkkucHVzaCguLi54dChoKSl9ZWxzZSBpZihCLnR5cGU9PT1tLk1lc2gpe2xldCBoPUIuZGF0YTtJLnB1c2goLi4uT3QoaCkpfWVsc2UgaWYoQi50eXBlPT09bS5Qb2x5RGF0YSl7bGV0IGg9Qi5kYXRhO0kucHVzaCguLi5QdChoKSl9fSk7bGV0IGY9bj8ucGlwZWxpbmVCYXNlVXJsPz9NdCgpLGc9dHlwZW9mIGYhPSJzdHJpbmciJiZ0eXBlb2YgZj8uaHJlZjwidSI/Zi5ocmVmOmYsRT10IT1udWxsP1ZBKHQsR3QoSSxuPy5ub0NvcHkpKTpudWxsLHU9YXdhaXQgQy5ydW5QaXBlbGluZShBLnRvU3RyaW5nKCksZyxlLHIsRSxuPy5waXBlbGluZVF1ZXJ5UGFyYW1zPz9KQSgpKTtyZXR1cm57cmV0dXJuVmFsdWU6dS5yZXR1cm5WYWx1ZSxzdGRvdXQ6dS5zdGRvdXQsc3RkZXJyOnUuc3RkZXJyLG91dHB1dHM6dS5vdXRwdXRzLHdlYldvcmtlcjppfX12YXIgY0E9SG47dmFyIHFuPW51bGw7ZnVuY3Rpb24gSHQoKXtyZXR1cm4gcW59dmFyIHllLFluPWBodHRwczovL2Nkbi5qc2RlbGl2ci5uZXQvbnBtL0BpdGstd2FzbS9jb21wYXJlLWltYWdlc0Ake3FBfS9kaXN0L3BpcGVsaW5lc2A7ZnVuY3Rpb24geEkoQSl7eWU9QX1mdW5jdGlvbiBNQSgpe2lmKHR5cGVvZiB5ZTwidSIpcmV0dXJuIHllO2xldCBBPU9BKCk7cmV0dXJuIHR5cGVvZiBBPCJ1Ij9BOllufXZhciB3ZSxLbj1udWxsO2Z1bmN0aW9uIHF0KEEpe3dlPUF9ZnVuY3Rpb24gJCgpe2lmKHR5cGVvZiB3ZTwidSIpcmV0dXJuIHdlO2xldCBBPVBBKCk7cmV0dXJuIHR5cGVvZiBBPCJ1Ij9BOktufXZhciBBQT1udWxsO2FzeW5jIGZ1bmN0aW9uIFl0KCl7bGV0IEE9JCgpLGU9dHlwZW9mIEEhPSJzdHJpbmciJiZ0eXBlb2YgQT8uaHJlZjwidSI/QS5ocmVmOkE7QUE9YXdhaXQgbEEoZSl9ZnVuY3Rpb24gWUkoQSl7QUE9QX1hc3luYyBmdW5jdGlvbiBLdCgpe2lmKEFBIT09bnVsbClyZXR1cm4gQUEudGVybWluYXRlZCYmYXdhaXQgWXQoKSxBQTtsZXQgQT1IdCgpO3JldHVybiBBIT09bnVsbD9BOihhd2FpdCBZdCgpLEFBKX1hc3luYyBmdW5jdGlvbiB2bihBLGU9e2Jhc2VsaW5lSW1hZ2VzOltdfSl7bGV0IHI9W3t0eXBlOm0uSnNvbkNvbXBhdGlibGV9LHt0eXBlOm0uSW1hZ2V9LHt0eXBlOm0uSW1hZ2V9XSx0PVt7dHlwZTptLkltYWdlLGRhdGE6QX1dLG49W107aWYobi5wdXNoKCIwIiksbi5wdXNoKCIwIiksbi5wdXNoKCIxIiksbi5wdXNoKCIyIiksbi5wdXNoKCItLW1lbW9yeS1pbyIpLHR5cGVvZiBlLmJhc2VsaW5lSW1hZ2VzPCJ1Iil7aWYoZS5iYXNlbGluZUltYWdlcy5sZW5ndGg8MSl0aHJvdyBuZXcgRXJyb3IoJyJiYXNlbGluZS1pbWFnZXMiIG9wdGlvbiBtdXN0IGhhdmUgYSBsZW5ndGggPiAxJyk7bi5wdXNoKCItLWJhc2VsaW5lLWltYWdlcyIpLGF3YWl0IFByb21pc2UuYWxsKGUuYmFzZWxpbmVJbWFnZXMubWFwKGFzeW5jIHU9PntsZXQgQj10Lmxlbmd0aC50b1N0cmluZygpO3QucHVzaCh7dHlwZTptLkltYWdlLGRhdGE6dX0pLG4ucHVzaChCKX0pKX10eXBlb2YgZS5kaWZmZXJlbmNlVGhyZXNob2xkPCJ1IiYmbi5wdXNoKCItLWRpZmZlcmVuY2UtdGhyZXNob2xkIixlLmRpZmZlcmVuY2VUaHJlc2hvbGQudG9TdHJpbmcoKSksdHlwZW9mIGUucmFkaXVzVG9sZXJhbmNlPCJ1IiYmbi5wdXNoKCItLXJhZGl1cy10b2xlcmFuY2UiLGUucmFkaXVzVG9sZXJhbmNlLnRvU3RyaW5nKCkpLHR5cGVvZiBlLnNwYXRpYWxUb2xlcmFuY2U8InUiJiZuLnB1c2goIi0tc3BhdGlhbC10b2xlcmFuY2UiLGUuc3BhdGlhbFRvbGVyYW5jZS50b1N0cmluZygpKSx0eXBlb2YgZS5udW1iZXJPZlBpeGVsc1RvbGVyYW5jZTwidSImJm4ucHVzaCgiLS1udW1iZXItb2YtcGl4ZWxzLXRvbGVyYW5jZSIsZS5udW1iZXJPZlBpeGVsc1RvbGVyYW5jZS50b1N0cmluZygpKSx0eXBlb2YgZS5pZ25vcmVCb3VuZGFyeVBpeGVsczwidSImJmUuaWdub3JlQm91bmRhcnlQaXhlbHMmJm4ucHVzaCgiLS1pZ25vcmUtYm91bmRhcnktcGl4ZWxzIik7bGV0IEM9ImNvbXBhcmUtZG91YmxlLWltYWdlcyIse3dlYldvcmtlcjpzLHJldHVyblZhbHVlOkksc3RkZXJyOmYsb3V0cHV0czpnfT1hd2FpdCBjQShDLG4scix0LHtwaXBlbGluZUJhc2VVcmw6TUEoKSxwaXBlbGluZVdvcmtlclVybDokKCksd2ViV29ya2VyOmU/LndlYldvcmtlcj8/bnVsbH0pO2lmKEkhPT0wKXRocm93IG5ldyBFcnJvcihmKTtyZXR1cm57d2ViV29ya2VyOnMsbWV0cmljczpnWzBdLmRhdGEsZGlmZmVyZW5jZUltYWdlOmdbMV0uZGF0YSxkaWZmZXJlbmNlVWNoYXIyZEltYWdlOmdbMl0uZGF0YX19dmFyIERlPXZuO2FzeW5jIGZ1bmN0aW9uIFduKEEsZSl7bGV0IHI9ZTtpZihyLmltYWdlVHlwZS5jb21wb25lbnRUeXBlIT09Ui5GbG9hdDY0KXtsZXQgdDtlLmltYWdlVHlwZS5waXhlbFR5cGUhPT1rLlNjYWxhciYmZS5pbWFnZVR5cGUucGl4ZWxUeXBlIT09ay5WYXJpYWJsZUxlbmd0aFZlY3RvciYmKHQ9ay5WYXJpYWJsZUxlbmd0aFZlY3Rvcikscj1FQShlLHtjb21wb25lbnRUeXBlOlIuRmxvYXQ2NCxwaXhlbFR5cGU6dH0pfWVsc2UgaWYoZS5pbWFnZVR5cGUucGl4ZWxUeXBlIT09ay5TY2FsYXImJmUuaW1hZ2VUeXBlLnBpeGVsVHlwZSE9PWsuVmFyaWFibGVMZW5ndGhWZWN0b3Ipe2xldCB0PWsuVmFyaWFibGVMZW5ndGhWZWN0b3I7cj1FQShlLHtwaXhlbFR5cGU6dH0pfXJldHVybiByLmltYWdlVHlwZS5waXhlbFR5cGU9PT1rLlZhcmlhYmxlTGVuZ3RoVmVjdG9yJiYocj0oYXdhaXQgQShyKSkubWFnbml0dWRlSW1hZ2UpLHJ9dmFyIFNlPVduO2FzeW5jIGZ1bmN0aW9uIGpuKEEsZT17fSl7bGV0IHI9W3t0eXBlOm0uSW1hZ2V9XSx0PVt7dHlwZTptLkltYWdlLGRhdGE6QX1dLG49W107bi5wdXNoKCIwIiksbi5wdXNoKCIwIiksbi5wdXNoKCItLW1lbW9yeS1pbyIpO2xldCBsPSJ2ZWN0b3ItbWFnbml0dWRlIixjPWU/LndlYldvcmtlcjtjPT09dm9pZCAwJiYoYz1hd2FpdCBLdCgpKTtsZXR7d2ViV29ya2VyOkMscmV0dXJuVmFsdWU6cyxzdGRlcnI6SSxvdXRwdXRzOmZ9PWF3YWl0IGNBKGwsbixyLHQse3BpcGVsaW5lQmFzZVVybDpNQSgpLHBpcGVsaW5lV29ya2VyVXJsOiQoKSx3ZWJXb3JrZXI6Yyxub0NvcHk6ZT8ubm9Db3B5fSk7aWYocyE9PTAmJkkhPT0iIil0aHJvdyBuZXcgRXJyb3IoSSk7cmV0dXJue3dlYldvcmtlcjpDLG1hZ25pdHVkZUltYWdlOmZbMF0/LmRhdGF9fXZhciBiZT1qbjthc3luYyBmdW5jdGlvbiBfbihBLGU9e2Jhc2VsaW5lSW1hZ2VzOltdfSl7YXN5bmMgZnVuY3Rpb24gcihpKXtsZXR7d2ViV29ya2VyOmwsbWFnbml0dWRlSW1hZ2U6Y309YXdhaXQgYmUoaSk7cmV0dXJuIGw/LnRlcm1pbmF0ZSgpLHttYWduaXR1ZGVJbWFnZTpjfX1sZXQgdD1hd2FpdCBTZShyLEEpLG49YXdhaXQgUHJvbWlzZS5hbGwoZS5iYXNlbGluZUltYWdlcy5tYXAoYXN5bmMgaT0+YXdhaXQgU2UocixpKSkpLG89ey4uLmV9O3JldHVybiBvLmJhc2VsaW5lSW1hZ2VzPW4sRGUodCxvKX12YXIgVm49X247dmFyIHZ0PSdkYXRhOnRleHQvamF2YXNjcmlwdDtjaGFyc2V0PXV0Zi04LHZhciBtZT1PYmplY3QuZGVmaW5lUHJvcGVydHk7dmFyIHdlPShBLHQpPT57Zm9yKHZhciBlIGluIHQpbWUoQSxlLHtnZXQ6dFtlXSxlbnVtZXJhYmxlOiEwfSl9O3ZhciBmdD1TeW1ib2woIkNvbWxpbmsucHJveHkiKSxwZT1TeW1ib2woIkNvbWxpbmsuZW5kcG9pbnQiKSxTZT1TeW1ib2woIkNvbWxpbmsucmVsZWFzZVByb3h5IiksWUE9U3ltYm9sKCJDb21saW5rLmZpbmFsaXplciIpLGFBPVN5bWJvbCgiQ29tbGluay50aHJvd24iKSxsdD1BPT50eXBlb2YgQT09Im9iamVjdCImJkEhPT1udWxsfHx0eXBlb2YgQT09ImZ1bmN0aW9uIixGZT17Y2FuSGFuZGxlOkE9Pmx0KEEpJiZBW2Z0XSxzZXJpYWxpemUoQSl7bGV0e3BvcnQxOnQscG9ydDI6ZX09bmV3IE1lc3NhZ2VDaGFubmVsO3JldHVybiBmQShBLHQpLFtlLFtlXV19LGRlc2VyaWFsaXplKEEpe3JldHVybiBBLnN0YXJ0KCksR2UoQSl9fSxSZT17Y2FuSGFuZGxlOkE9Pmx0KEEpJiZhQSBpbiBBLHNlcmlhbGl6ZSh7dmFsdWU6QX0pe2xldCB0O3JldHVybiBBIGluc3RhbmNlb2YgRXJyb3I/dD17aXNFcnJvcjohMCx2YWx1ZTp7bWVzc2FnZTpBLm1lc3NhZ2UsbmFtZTpBLm5hbWUsc3RhY2s6QS5zdGFja319OnQ9e2lzRXJyb3I6ITEsdmFsdWU6QX0sW3QsW11dfSxkZXNlcmlhbGl6ZShBKXt0aHJvdyBBLmlzRXJyb3I/T2JqZWN0LmFzc2lnbihuZXcgRXJyb3IoQS52YWx1ZS5tZXNzYWdlKSxBLnZhbHVlKTpBLnZhbHVlfX0sdXQ9bmV3IE1hcChbWyJwcm94eSIsRmVdLFsidGhyb3ciLFJlXV0pO2Z1bmN0aW9uIE5lKEEsdCl7Zm9yKGxldCBlIG9mIEEpaWYodD09PWV8fGU9PT0iKiJ8fGUgaW5zdGFuY2VvZiBSZWdFeHAmJmUudGVzdCh0KSlyZXR1cm4hMDtyZXR1cm4hMX1mdW5jdGlvbiBmQShBLHQ9Z2xvYmFsVGhpcyxlPVsiKiJdKXt0LmFkZEV2ZW50TGlzdGVuZXIoIm1lc3NhZ2UiLGZ1bmN0aW9uIEkocil7aWYoIXJ8fCFyLmRhdGEpcmV0dXJuO2lmKCFOZShlLHIub3JpZ2luKSl7Y29uc29sZS53YXJuKGBJbnZhbGlkIG9yaWdpbiBcJyR7ci5vcmlnaW59XCcgZm9yIGNvbWxpbmsgcHJveHlgKTtyZXR1cm59bGV0e2lkOm8sdHlwZTpnLHBhdGg6Q309T2JqZWN0LmFzc2lnbih7cGF0aDpbXX0sci5kYXRhKSxRPShyLmRhdGEuYXJndW1lbnRMaXN0fHxbXSkubWFwKE8pLGE7dHJ5e2xldCBuPUMuc2xpY2UoMCwtMSkucmVkdWNlKChmLEIpPT5mW0JdLEEpLHM9Qy5yZWR1Y2UoKGYsQik9PmZbQl0sQSk7c3dpdGNoKGcpe2Nhc2UiR0VUIjphPXM7YnJlYWs7Y2FzZSJTRVQiOm5bQy5zbGljZSgtMSlbMF1dPU8oci5kYXRhLnZhbHVlKSxhPSEwO2JyZWFrO2Nhc2UiQVBQTFkiOmE9cy5hcHBseShuLFEpO2JyZWFrO2Nhc2UiQ09OU1RSVUNUIjp7bGV0IGY9bmV3IHMoLi4uUSk7YT1iZShmKX1icmVhaztjYXNlIkVORFBPSU5UIjp7bGV0e3BvcnQxOmYscG9ydDI6Qn09bmV3IE1lc3NhZ2VDaGFubmVsO2ZBKEEsQiksYT1NQShmLFtmXSl9YnJlYWs7Y2FzZSJSRUxFQVNFIjphPXZvaWQgMDticmVhaztkZWZhdWx0OnJldHVybn19Y2F0Y2gobil7YT17dmFsdWU6bixbYUFdOjB9fVByb21pc2UucmVzb2x2ZShhKS5jYXRjaChuPT4oe3ZhbHVlOm4sW2FBXTowfSkpLnRoZW4obj0+e2xldFtzLGZdPWNBKG4pO3QucG9zdE1lc3NhZ2UoT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LHMpLHtpZDpvfSksZiksZz09PSJSRUxFQVNFIiYmKHQucmVtb3ZlRXZlbnRMaXN0ZW5lcigibWVzc2FnZSIsSSksRHQodCksWUEgaW4gQSYmdHlwZW9mIEFbWUFdPT0iZnVuY3Rpb24iJiZBW1lBXSgpKX0pLmNhdGNoKG49PntsZXRbcyxmXT1jQSh7dmFsdWU6bmV3IFR5cGVFcnJvcigiVW5zZXJpYWxpemFibGUgcmV0dXJuIHZhbHVlIiksW2FBXTowfSk7dC5wb3N0TWVzc2FnZShPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30scykse2lkOm99KSxmKX0pfSksdC5zdGFydCYmdC5zdGFydCgpfWZ1bmN0aW9uIFVlKEEpe3JldHVybiBBLmNvbnN0cnVjdG9yLm5hbWU9PT0iTWVzc2FnZVBvcnQifWZ1bmN0aW9uIER0KEEpe1VlKEEpJiZBLmNsb3NlKCl9ZnVuY3Rpb24gR2UoQSx0KXtyZXR1cm4gcUEoQSxbXSx0KX1mdW5jdGlvbiBCQShBKXtpZihBKXRocm93IG5ldyBFcnJvcigiUHJveHkgaGFzIGJlZW4gcmVsZWFzZWQgYW5kIGlzIG5vdCB1c2VhYmxlIil9ZnVuY3Rpb24gaHQoQSl7cmV0dXJuIFAoQSx7dHlwZToiUkVMRUFTRSJ9KS50aGVuKCgpPT57RHQoQSl9KX12YXIgUUE9bmV3IFdlYWtNYXAsRUE9IkZpbmFsaXphdGlvblJlZ2lzdHJ5ImluIGdsb2JhbFRoaXMmJm5ldyBGaW5hbGl6YXRpb25SZWdpc3RyeShBPT57bGV0IHQ9KFFBLmdldChBKXx8MCktMTtRQS5zZXQoQSx0KSx0PT09MCYmaHQoQSl9KTtmdW5jdGlvbiBrZShBLHQpe2xldCBlPShRQS5nZXQodCl8fDApKzE7UUEuc2V0KHQsZSksRUEmJkVBLnJlZ2lzdGVyKEEsdCxBKX1mdW5jdGlvbiBMZShBKXtFQSYmRUEudW5yZWdpc3RlcihBKX1mdW5jdGlvbiBxQShBLHQ9W10sZT1mdW5jdGlvbigpe30pe2xldCBJPSExLHI9bmV3IFByb3h5KGUse2dldChvLGcpe2lmKEJBKEkpLGc9PT1TZSlyZXR1cm4oKT0+e0xlKHIpLGh0KEEpLEk9ITB9O2lmKGc9PT0idGhlbiIpe2lmKHQubGVuZ3RoPT09MClyZXR1cm57dGhlbjooKT0+cn07bGV0IEM9UChBLHt0eXBlOiJHRVQiLHBhdGg6dC5tYXAoUT0+US50b1N0cmluZygpKX0pLnRoZW4oTyk7cmV0dXJuIEMudGhlbi5iaW5kKEMpfXJldHVybiBxQShBLFsuLi50LGddKX0sc2V0KG8sZyxDKXtCQShJKTtsZXRbUSxhXT1jQShDKTtyZXR1cm4gUChBLHt0eXBlOiJTRVQiLHBhdGg6Wy4uLnQsZ10ubWFwKG49Pm4udG9TdHJpbmcoKSksdmFsdWU6UX0sYSkudGhlbihPKX0sYXBwbHkobyxnLEMpe0JBKEkpO2xldCBRPXRbdC5sZW5ndGgtMV07aWYoUT09PXBlKXJldHVybiBQKEEse3R5cGU6IkVORFBPSU5UIn0pLnRoZW4oTyk7aWYoUT09PSJiaW5kIilyZXR1cm4gcUEoQSx0LnNsaWNlKDAsLTEpKTtsZXRbYSxuXT1jdChDKTtyZXR1cm4gUChBLHt0eXBlOiJBUFBMWSIscGF0aDp0Lm1hcChzPT5zLnRvU3RyaW5nKCkpLGFyZ3VtZW50TGlzdDphfSxuKS50aGVuKE8pfSxjb25zdHJ1Y3QobyxnKXtCQShJKTtsZXRbQyxRXT1jdChnKTtyZXR1cm4gUChBLHt0eXBlOiJDT05TVFJVQ1QiLHBhdGg6dC5tYXAoYT0+YS50b1N0cmluZygpKSxhcmd1bWVudExpc3Q6Q30sUSkudGhlbihPKX19KTtyZXR1cm4ga2UocixBKSxyfWZ1bmN0aW9uIEplKEEpe3JldHVybiBBcnJheS5wcm90b3R5cGUuY29uY2F0LmFwcGx5KFtdLEEpfWZ1bmN0aW9uIGN0KEEpe2xldCB0PUEubWFwKGNBKTtyZXR1cm5bdC5tYXAoZT0+ZVswXSksSmUodC5tYXAoZT0+ZVsxXSkpXX12YXIgZHQ9bmV3IFdlYWtNYXA7ZnVuY3Rpb24gTUEoQSx0KXtyZXR1cm4gZHQuc2V0KEEsdCksQX1mdW5jdGlvbiBiZShBKXtyZXR1cm4gT2JqZWN0LmFzc2lnbihBLHtbZnRdOiEwfSl9ZnVuY3Rpb24gY0EoQSl7Zm9yKGxldFt0LGVdb2YgdXQpaWYoZS5jYW5IYW5kbGUoQSkpe2xldFtJLHJdPWUuc2VyaWFsaXplKEEpO3JldHVyblt7dHlwZToiSEFORExFUiIsbmFtZTp0LHZhbHVlOkl9LHJdfXJldHVyblt7dHlwZToiUkFXIix2YWx1ZTpBfSxkdC5nZXQoQSl8fFtdXX1mdW5jdGlvbiBPKEEpe3N3aXRjaChBLnR5cGUpe2Nhc2UiSEFORExFUiI6cmV0dXJuIHV0LmdldChBLm5hbWUpLmRlc2VyaWFsaXplKEEudmFsdWUpO2Nhc2UiUkFXIjpyZXR1cm4gQS52YWx1ZX19ZnVuY3Rpb24gUChBLHQsZSl7cmV0dXJuIG5ldyBQcm9taXNlKEk9PntsZXQgcj1IZSgpO0EuYWRkRXZlbnRMaXN0ZW5lcigibWVzc2FnZSIsZnVuY3Rpb24gbyhnKXshZy5kYXRhfHwhZy5kYXRhLmlkfHxnLmRhdGEuaWQhPT1yfHwoQS5yZW1vdmVFdmVudExpc3RlbmVyKCJtZXNzYWdlIixvKSxJKGcuZGF0YSkpfSksQS5zdGFydCYmQS5zdGFydCgpLEEucG9zdE1lc3NhZ2UoT2JqZWN0LmFzc2lnbih7aWQ6cn0sdCksZSl9KX1mdW5jdGlvbiBIZSgpe3JldHVybiBuZXcgQXJyYXkoNCkuZmlsbCgwKS5tYXAoKCk9Pk1hdGguZmxvb3IoTWF0aC5yYW5kb20oKSpOdW1iZXIuTUFYX1NBRkVfSU5URUdFUikudG9TdHJpbmcoMTYpKS5qb2luKCItIil9ZnVuY3Rpb24gdihBLHQpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiBBLmFwcGx5KHQsYXJndW1lbnRzKX19dmFye3RvU3RyaW5nOlllfT1PYmplY3QucHJvdG90eXBlLHtnZXRQcm90b3R5cGVPZjpPQX09T2JqZWN0LHVBPShBPT50PT57bGV0IGU9WWUuY2FsbCh0KTtyZXR1cm4gQVtlXXx8KEFbZV09ZS5zbGljZSg4LC0xKS50b0xvd2VyQ2FzZSgpKX0pKE9iamVjdC5jcmVhdGUobnVsbCkpLEc9QT0+KEE9QS50b0xvd2VyQ2FzZSgpLHQ9PnVBKHQpPT09QSksREE9QT0+dD0+dHlwZW9mIHQ9PT1BLHtpc0FycmF5Omp9PUFycmF5LCQ9REEoInVuZGVmaW5lZCIpO2Z1bmN0aW9uIHFlKEEpe3JldHVybiBBIT09bnVsbCYmISQoQSkmJkEuY29uc3RydWN0b3IhPT1udWxsJiYhJChBLmNvbnN0cnVjdG9yKSYmTihBLmNvbnN0cnVjdG9yLmlzQnVmZmVyKSYmQS5jb25zdHJ1Y3Rvci5pc0J1ZmZlcihBKX12YXIgcHQ9RygiQXJyYXlCdWZmZXIiKTtmdW5jdGlvbiBNZShBKXtsZXQgdDtyZXR1cm4gdHlwZW9mIEFycmF5QnVmZmVyPCJ1IiYmQXJyYXlCdWZmZXIuaXNWaWV3P3Q9QXJyYXlCdWZmZXIuaXNWaWV3KEEpOnQ9QSYmQS5idWZmZXImJnB0KEEuYnVmZmVyKSx0fXZhciBUZT1EQSgic3RyaW5nIiksTj1EQSgiZnVuY3Rpb24iKSxTdD1EQSgibnVtYmVyIiksaEE9QT0+QSE9PW51bGwmJnR5cGVvZiBBPT0ib2JqZWN0IixLZT1BPT5BPT09ITB8fEE9PT0hMSxsQT1BPT57aWYodUEoQSkhPT0ib2JqZWN0IilyZXR1cm4hMTtsZXQgdD1PQShBKTtyZXR1cm4odD09PW51bGx8fHQ9PT1PYmplY3QucHJvdG90eXBlfHxPYmplY3QuZ2V0UHJvdG90eXBlT2YodCk9PT1udWxsKSYmIShTeW1ib2wudG9TdHJpbmdUYWcgaW4gQSkmJiEoU3ltYm9sLml0ZXJhdG9yIGluIEEpfSxPZT1HKCJEYXRlIikseGU9RygiRmlsZSIpLFBlPUcoIkJsb2IiKSxqZT1HKCJGaWxlTGlzdCIpLFdlPUE9PmhBKEEpJiZOKEEucGlwZSksWmU9QT0+e2xldCB0O3JldHVybiBBJiYodHlwZW9mIEZvcm1EYXRhPT0iZnVuY3Rpb24iJiZBIGluc3RhbmNlb2YgRm9ybURhdGF8fE4oQS5hcHBlbmQpJiYoKHQ9dUEoQSkpPT09ImZvcm1kYXRhInx8dD09PSJvYmplY3QiJiZOKEEudG9TdHJpbmcpJiZBLnRvU3RyaW5nKCk9PT0iW29iamVjdCBGb3JtRGF0YV0iKSl9LFZlPUcoIlVSTFNlYXJjaFBhcmFtcyIpLFtfZSxYZSx6ZSx2ZV09WyJSZWFkYWJsZVN0cmVhbSIsIlJlcXVlc3QiLCJSZXNwb25zZSIsIkhlYWRlcnMiXS5tYXAoRyksJGU9QT0+QS50cmltP0EudHJpbSgpOkEucmVwbGFjZSgvXltcXHNcXHVGRUZGXFx4QTBdK3xbXFxzXFx1RkVGRlxceEEwXSskL2csIiIpO2Z1bmN0aW9uIEFBKEEsdCx7YWxsT3duS2V5czplPSExfT17fSl7aWYoQT09PW51bGx8fHR5cGVvZiBBPiJ1IilyZXR1cm47bGV0IEkscjtpZih0eXBlb2YgQSE9Im9iamVjdCImJihBPVtBXSksaihBKSlmb3IoST0wLHI9QS5sZW5ndGg7STxyO0krKyl0LmNhbGwobnVsbCxBW0ldLEksQSk7ZWxzZXtsZXQgbz1lP09iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKEEpOk9iamVjdC5rZXlzKEEpLGc9by5sZW5ndGgsQztmb3IoST0wO0k8ZztJKyspQz1vW0ldLHQuY2FsbChudWxsLEFbQ10sQyxBKX19ZnVuY3Rpb24gRnQoQSx0KXt0PXQudG9Mb3dlckNhc2UoKTtsZXQgZT1PYmplY3Qua2V5cyhBKSxJPWUubGVuZ3RoLHI7Zm9yKDtJLS0gPjA7KWlmKHI9ZVtJXSx0PT09ci50b0xvd2VyQ2FzZSgpKXJldHVybiByO3JldHVybiBudWxsfXZhciB4PXR5cGVvZiBnbG9iYWxUaGlzPCJ1Ij9nbG9iYWxUaGlzOnR5cGVvZiBzZWxmPCJ1Ij9zZWxmOnR5cGVvZiB3aW5kb3c8InUiP3dpbmRvdzpnbG9iYWwsUnQ9QT0+ISQoQSkmJkEhPT14O2Z1bmN0aW9uIEtBKCl7bGV0e2Nhc2VsZXNzOkF9PVJ0KHRoaXMpJiZ0aGlzfHx7fSx0PXt9LGU9KEkscik9PntsZXQgbz1BJiZGdCh0LHIpfHxyO2xBKHRbb10pJiZsQShJKT90W29dPUtBKHRbb10sSSk6bEEoSSk/dFtvXT1LQSh7fSxJKTpqKEkpP3Rbb109SS5zbGljZSgpOnRbb109SX07Zm9yKGxldCBJPTAscj1hcmd1bWVudHMubGVuZ3RoO0k8cjtJKyspYXJndW1lbnRzW0ldJiZBQShhcmd1bWVudHNbSV0sZSk7cmV0dXJuIHR9dmFyIEFJPShBLHQsZSx7YWxsT3duS2V5czpJfT17fSk9PihBQSh0LChyLG8pPT57ZSYmTihyKT9BW29dPXYocixlKTpBW29dPXJ9LHthbGxPd25LZXlzOkl9KSxBKSx0ST1BPT4oQS5jaGFyQ29kZUF0KDApPT09NjUyNzkmJihBPUEuc2xpY2UoMSkpLEEpLGVJPShBLHQsZSxJKT0+e0EucHJvdG90eXBlPU9iamVjdC5jcmVhdGUodC5wcm90b3R5cGUsSSksQS5wcm90b3R5cGUuY29uc3RydWN0b3I9QSxPYmplY3QuZGVmaW5lUHJvcGVydHkoQSwic3VwZXIiLHt2YWx1ZTp0LnByb3RvdHlwZX0pLGUmJk9iamVjdC5hc3NpZ24oQS5wcm90b3R5cGUsZSl9LElJPShBLHQsZSxJKT0+e2xldCByLG8sZyxDPXt9O2lmKHQ9dHx8e30sQT09bnVsbClyZXR1cm4gdDtkb3tmb3Iocj1PYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhBKSxvPXIubGVuZ3RoO28tLSA+MDspZz1yW29dLCghSXx8SShnLEEsdCkpJiYhQ1tnXSYmKHRbZ109QVtnXSxDW2ddPSEwKTtBPWUhPT0hMSYmT0EoQSl9d2hpbGUoQSYmKCFlfHxlKEEsdCkpJiZBIT09T2JqZWN0LnByb3RvdHlwZSk7cmV0dXJuIHR9LHJJPShBLHQsZSk9PntBPVN0cmluZyhBKSwoZT09PXZvaWQgMHx8ZT5BLmxlbmd0aCkmJihlPUEubGVuZ3RoKSxlLT10Lmxlbmd0aDtsZXQgST1BLmluZGV4T2YodCxlKTtyZXR1cm4gSSE9PS0xJiZJPT09ZX0sb0k9QT0+e2lmKCFBKXJldHVybiBudWxsO2lmKGooQSkpcmV0dXJuIEE7bGV0IHQ9QS5sZW5ndGg7aWYoIVN0KHQpKXJldHVybiBudWxsO2xldCBlPW5ldyBBcnJheSh0KTtmb3IoO3QtLSA+MDspZVt0XT1BW3RdO3JldHVybiBlfSxnST0oQT0+dD0+QSYmdCBpbnN0YW5jZW9mIEEpKHR5cGVvZiBVaW50OEFycmF5PCJ1IiYmT0EoVWludDhBcnJheSkpLGlJPShBLHQpPT57bGV0IEk9KEEmJkFbU3ltYm9sLml0ZXJhdG9yXSkuY2FsbChBKSxyO2Zvcig7KHI9SS5uZXh0KCkpJiYhci5kb25lOyl7bGV0IG89ci52YWx1ZTt0LmNhbGwoQSxvWzBdLG9bMV0pfX0sbkk9KEEsdCk9PntsZXQgZSxJPVtdO2Zvcig7KGU9QS5leGVjKHQpKSE9PW51bGw7KUkucHVzaChlKTtyZXR1cm4gSX0sc0k9RygiSFRNTEZvcm1FbGVtZW50IiksQ0k9QT0+QS50b0xvd2VyQ2FzZSgpLnJlcGxhY2UoL1stX1xcc10oW2EtelxcZF0pKFxcdyopL2csZnVuY3Rpb24oZSxJLHIpe3JldHVybiBJLnRvVXBwZXJDYXNlKCkrcn0pLG10PSgoe2hhc093blByb3BlcnR5OkF9KT0+KHQsZSk9PkEuY2FsbCh0LGUpKShPYmplY3QucHJvdG90eXBlKSxCST1HKCJSZWdFeHAiKSxOdD0oQSx0KT0+e2xldCBlPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKEEpLEk9e307QUEoZSwocixvKT0+e2xldCBnOyhnPXQocixvLEEpKSE9PSExJiYoSVtvXT1nfHxyKX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKEEsSSl9LGFJPUE9PntOdChBLCh0LGUpPT57aWYoTihBKSYmWyJhcmd1bWVudHMiLCJjYWxsZXIiLCJjYWxsZWUiXS5pbmRleE9mKGUpIT09LTEpcmV0dXJuITE7bGV0IEk9QVtlXTtpZihOKEkpKXtpZih0LmVudW1lcmFibGU9ITEsIndyaXRhYmxlImluIHQpe3Qud3JpdGFibGU9ITE7cmV0dXJufXQuc2V0fHwodC5zZXQ9KCk9Pnt0aHJvdyBFcnJvcigiQ2FuIG5vdCByZXdyaXRlIHJlYWQtb25seSBtZXRob2QgXCciK2UrIlwnIil9KX19KX0sUUk9KEEsdCk9PntsZXQgZT17fSxJPXI9PntyLmZvckVhY2gobz0+e2Vbb109ITB9KX07cmV0dXJuIGooQSk/SShBKTpJKFN0cmluZyhBKS5zcGxpdCh0KSksZX0sRUk9KCk9Pnt9LGNJPShBLHQpPT5BIT1udWxsJiZOdW1iZXIuaXNGaW5pdGUoQT0rQSk/QTp0LFRBPSJhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5eiIsd3Q9IjAxMjM0NTY3ODkiLFV0PXtESUdJVDp3dCxBTFBIQTpUQSxBTFBIQV9ESUdJVDpUQStUQS50b1VwcGVyQ2FzZSgpK3d0fSxmST0oQT0xNix0PVV0LkFMUEhBX0RJR0lUKT0+e2xldCBlPSIiLHtsZW5ndGg6SX09dDtmb3IoO0EtLTspZSs9dFtNYXRoLnJhbmRvbSgpKkl8MF07cmV0dXJuIGV9O2Z1bmN0aW9uIGxJKEEpe3JldHVybiEhKEEmJk4oQS5hcHBlbmQpJiZBW1N5bWJvbC50b1N0cmluZ1RhZ109PT0iRm9ybURhdGEiJiZBW1N5bWJvbC5pdGVyYXRvcl0pfXZhciB1ST1BPT57bGV0IHQ9bmV3IEFycmF5KDEwKSxlPShJLHIpPT57aWYoaEEoSSkpe2lmKHQuaW5kZXhPZihJKT49MClyZXR1cm47aWYoISgidG9KU09OImluIEkpKXt0W3JdPUk7bGV0IG89aihJKT9bXTp7fTtyZXR1cm4gQUEoSSwoZyxDKT0+e2xldCBRPWUoZyxyKzEpOyEkKFEpJiYob1tDXT1RKX0pLHRbcl09dm9pZCAwLG99fXJldHVybiBJfTtyZXR1cm4gZShBLDApfSxEST1HKCJBc3luY0Z1bmN0aW9uIiksaEk9QT0+QSYmKGhBKEEpfHxOKEEpKSYmTihBLnRoZW4pJiZOKEEuY2F0Y2gpLEd0PSgoQSx0KT0+QT9zZXRJbW1lZGlhdGU6dD8oKGUsSSk9Pih4LmFkZEV2ZW50TGlzdGVuZXIoIm1lc3NhZ2UiLCh7c291cmNlOnIsZGF0YTpvfSk9PntyPT09eCYmbz09PWUmJkkubGVuZ3RoJiZJLnNoaWZ0KCkoKX0sITEpLHI9PntJLnB1c2gocikseC5wb3N0TWVzc2FnZShlLCIqIil9KSkoYGF4aW9zQCR7TWF0aC5yYW5kb20oKX1gLFtdKTplPT5zZXRUaW1lb3V0KGUpKSh0eXBlb2Ygc2V0SW1tZWRpYXRlPT0iZnVuY3Rpb24iLE4oeC5wb3N0TWVzc2FnZSkpLGRJPXR5cGVvZiBxdWV1ZU1pY3JvdGFzazwidSI/cXVldWVNaWNyb3Rhc2suYmluZCh4KTp0eXBlb2YgcHJvY2VzczwidSImJnByb2Nlc3MubmV4dFRpY2t8fEd0LGk9e2lzQXJyYXk6aixpc0FycmF5QnVmZmVyOnB0LGlzQnVmZmVyOnFlLGlzRm9ybURhdGE6WmUsaXNBcnJheUJ1ZmZlclZpZXc6TWUsaXNTdHJpbmc6VGUsaXNOdW1iZXI6U3QsaXNCb29sZWFuOktlLGlzT2JqZWN0OmhBLGlzUGxhaW5PYmplY3Q6bEEsaXNSZWFkYWJsZVN0cmVhbTpfZSxpc1JlcXVlc3Q6WGUsaXNSZXNwb25zZTp6ZSxpc0hlYWRlcnM6dmUsaXNVbmRlZmluZWQ6JCxpc0RhdGU6T2UsaXNGaWxlOnhlLGlzQmxvYjpQZSxpc1JlZ0V4cDpCSSxpc0Z1bmN0aW9uOk4saXNTdHJlYW06V2UsaXNVUkxTZWFyY2hQYXJhbXM6VmUsaXNUeXBlZEFycmF5OmdJLGlzRmlsZUxpc3Q6amUsZm9yRWFjaDpBQSxtZXJnZTpLQSxleHRlbmQ6QUksdHJpbTokZSxzdHJpcEJPTTp0SSxpbmhlcml0czplSSx0b0ZsYXRPYmplY3Q6SUksa2luZE9mOnVBLGtpbmRPZlRlc3Q6RyxlbmRzV2l0aDpySSx0b0FycmF5Om9JLGZvckVhY2hFbnRyeTppSSxtYXRjaEFsbDpuSSxpc0hUTUxGb3JtOnNJLGhhc093blByb3BlcnR5Om10LGhhc093blByb3A6bXQscmVkdWNlRGVzY3JpcHRvcnM6TnQsZnJlZXplTWV0aG9kczphSSx0b09iamVjdFNldDpRSSx0b0NhbWVsQ2FzZTpDSSxub29wOkVJLHRvRmluaXRlTnVtYmVyOmNJLGZpbmRLZXk6RnQsZ2xvYmFsOngsaXNDb250ZXh0RGVmaW5lZDpSdCxBTFBIQUJFVDpVdCxnZW5lcmF0ZVN0cmluZzpmSSxpc1NwZWNDb21wbGlhbnRGb3JtOmxJLHRvSlNPTk9iamVjdDp1SSxpc0FzeW5jRm46REksaXNUaGVuYWJsZTpoSSxzZXRJbW1lZGlhdGU6R3QsYXNhcDpkSX07ZnVuY3Rpb24gVyhBLHQsZSxJLHIpe0Vycm9yLmNhbGwodGhpcyksRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2U/RXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UodGhpcyx0aGlzLmNvbnN0cnVjdG9yKTp0aGlzLnN0YWNrPW5ldyBFcnJvcigpLnN0YWNrLHRoaXMubWVzc2FnZT1BLHRoaXMubmFtZT0iQXhpb3NFcnJvciIsdCYmKHRoaXMuY29kZT10KSxlJiYodGhpcy5jb25maWc9ZSksSSYmKHRoaXMucmVxdWVzdD1JKSxyJiYodGhpcy5yZXNwb25zZT1yKX1pLmluaGVyaXRzKFcsRXJyb3Ise3RvSlNPTjpmdW5jdGlvbigpe3JldHVybnttZXNzYWdlOnRoaXMubWVzc2FnZSxuYW1lOnRoaXMubmFtZSxkZXNjcmlwdGlvbjp0aGlzLmRlc2NyaXB0aW9uLG51bWJlcjp0aGlzLm51bWJlcixmaWxlTmFtZTp0aGlzLmZpbGVOYW1lLGxpbmVOdW1iZXI6dGhpcy5saW5lTnVtYmVyLGNvbHVtbk51bWJlcjp0aGlzLmNvbHVtbk51bWJlcixzdGFjazp0aGlzLnN0YWNrLGNvbmZpZzppLnRvSlNPTk9iamVjdCh0aGlzLmNvbmZpZyksY29kZTp0aGlzLmNvZGUsc3RhdHVzOnRoaXMucmVzcG9uc2UmJnRoaXMucmVzcG9uc2Uuc3RhdHVzP3RoaXMucmVzcG9uc2Uuc3RhdHVzOm51bGx9fX0pO3ZhciBrdD1XLnByb3RvdHlwZSxMdD17fTtbIkVSUl9CQURfT1BUSU9OX1ZBTFVFIiwiRVJSX0JBRF9PUFRJT04iLCJFQ09OTkFCT1JURUQiLCJFVElNRURPVVQiLCJFUlJfTkVUV09SSyIsIkVSUl9GUl9UT09fTUFOWV9SRURJUkVDVFMiLCJFUlJfREVQUkVDQVRFRCIsIkVSUl9CQURfUkVTUE9OU0UiLCJFUlJfQkFEX1JFUVVFU1QiLCJFUlJfQ0FOQ0VMRUQiLCJFUlJfTk9UX1NVUFBPUlQiLCJFUlJfSU5WQUxJRF9VUkwiXS5mb3JFYWNoKEE9PntMdFtBXT17dmFsdWU6QX19KTtPYmplY3QuZGVmaW5lUHJvcGVydGllcyhXLEx0KTtPYmplY3QuZGVmaW5lUHJvcGVydHkoa3QsImlzQXhpb3NFcnJvciIse3ZhbHVlOiEwfSk7Vy5mcm9tPShBLHQsZSxJLHIsbyk9PntsZXQgZz1PYmplY3QuY3JlYXRlKGt0KTtyZXR1cm4gaS50b0ZsYXRPYmplY3QoQSxnLGZ1bmN0aW9uKFEpe3JldHVybiBRIT09RXJyb3IucHJvdG90eXBlfSxDPT5DIT09ImlzQXhpb3NFcnJvciIpLFcuY2FsbChnLEEubWVzc2FnZSx0LGUsSSxyKSxnLmNhdXNlPUEsZy5uYW1lPUEubmFtZSxvJiZPYmplY3QuYXNzaWduKGcsbyksZ307dmFyIHU9Vzt2YXIgZEE9bnVsbDtmdW5jdGlvbiB4QShBKXtyZXR1cm4gaS5pc1BsYWluT2JqZWN0KEEpfHxpLmlzQXJyYXkoQSl9ZnVuY3Rpb24gYnQoQSl7cmV0dXJuIGkuZW5kc1dpdGgoQSwiW10iKT9BLnNsaWNlKDAsLTIpOkF9ZnVuY3Rpb24gSnQoQSx0LGUpe3JldHVybiBBP0EuY29uY2F0KHQpLm1hcChmdW5jdGlvbihyLG8pe3JldHVybiByPWJ0KHIpLCFlJiZvPyJbIityKyJdIjpyfSkuam9pbihlPyIuIjoiIik6dH1mdW5jdGlvbiB5SShBKXtyZXR1cm4gaS5pc0FycmF5KEEpJiYhQS5zb21lKHhBKX12YXIgbUk9aS50b0ZsYXRPYmplY3QoaSx7fSxudWxsLGZ1bmN0aW9uKHQpe3JldHVybi9eaXNbQS1aXS8udGVzdCh0KX0pO2Z1bmN0aW9uIHdJKEEsdCxlKXtpZighaS5pc09iamVjdChBKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJ0YXJnZXQgbXVzdCBiZSBhbiBvYmplY3QiKTt0PXR8fG5ldyhkQXx8Rm9ybURhdGEpLGU9aS50b0ZsYXRPYmplY3QoZSx7bWV0YVRva2VuczohMCxkb3RzOiExLGluZGV4ZXM6ITF9LCExLGZ1bmN0aW9uKGwsYyl7cmV0dXJuIWkuaXNVbmRlZmluZWQoY1tsXSl9KTtsZXQgST1lLm1ldGFUb2tlbnMscj1lLnZpc2l0b3J8fG4sbz1lLmRvdHMsZz1lLmluZGV4ZXMsUT0oZS5CbG9ifHx0eXBlb2YgQmxvYjwidSImJkJsb2IpJiZpLmlzU3BlY0NvbXBsaWFudEZvcm0odCk7aWYoIWkuaXNGdW5jdGlvbihyKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJ2aXNpdG9yIG11c3QgYmUgYSBmdW5jdGlvbiIpO2Z1bmN0aW9uIGEoRSl7aWYoRT09PW51bGwpcmV0dXJuIiI7aWYoaS5pc0RhdGUoRSkpcmV0dXJuIEUudG9JU09TdHJpbmcoKTtpZighUSYmaS5pc0Jsb2IoRSkpdGhyb3cgbmV3IHUoIkJsb2IgaXMgbm90IHN1cHBvcnRlZC4gVXNlIGEgQnVmZmVyIGluc3RlYWQuIik7cmV0dXJuIGkuaXNBcnJheUJ1ZmZlcihFKXx8aS5pc1R5cGVkQXJyYXkoRSk/USYmdHlwZW9mIEJsb2I9PSJmdW5jdGlvbiI/bmV3IEJsb2IoW0VdKTpCdWZmZXIuZnJvbShFKTpFfWZ1bmN0aW9uIG4oRSxsLGMpe2xldCBwPUU7aWYoRSYmIWMmJnR5cGVvZiBFPT0ib2JqZWN0Iil7aWYoaS5lbmRzV2l0aChsLCJ7fSIpKWw9ST9sOmwuc2xpY2UoMCwtMiksRT1KU09OLnN0cmluZ2lmeShFKTtlbHNlIGlmKGkuaXNBcnJheShFKSYmeUkoRSl8fChpLmlzRmlsZUxpc3QoRSl8fGkuZW5kc1dpdGgobCwiW10iKSkmJihwPWkudG9BcnJheShFKSkpcmV0dXJuIGw9YnQobCkscC5mb3JFYWNoKGZ1bmN0aW9uKEQsVSl7IShpLmlzVW5kZWZpbmVkKEQpfHxEPT09bnVsbCkmJnQuYXBwZW5kKGc9PT0hMD9KdChbbF0sVSxvKTpnPT09bnVsbD9sOmwrIltdIixhKEQpKX0pLCExfXJldHVybiB4QShFKT8hMDoodC5hcHBlbmQoSnQoYyxsLG8pLGEoRSkpLCExKX1sZXQgcz1bXSxmPU9iamVjdC5hc3NpZ24obUkse2RlZmF1bHRWaXNpdG9yOm4sY29udmVydFZhbHVlOmEsaXNWaXNpdGFibGU6eEF9KTtmdW5jdGlvbiBCKEUsbCl7aWYoIWkuaXNVbmRlZmluZWQoRSkpe2lmKHMuaW5kZXhPZihFKSE9PS0xKXRocm93IEVycm9yKCJDaXJjdWxhciByZWZlcmVuY2UgZGV0ZWN0ZWQgaW4gIitsLmpvaW4oIi4iKSk7cy5wdXNoKEUpLGkuZm9yRWFjaChFLGZ1bmN0aW9uKHAsUyl7KCEoaS5pc1VuZGVmaW5lZChwKXx8cD09PW51bGwpJiZyLmNhbGwodCxwLGkuaXNTdHJpbmcoUyk/Uy50cmltKCk6UyxsLGYpKT09PSEwJiZCKHAsbD9sLmNvbmNhdChTKTpbU10pfSkscy5wb3AoKX19aWYoIWkuaXNPYmplY3QoQSkpdGhyb3cgbmV3IFR5cGVFcnJvcigiZGF0YSBtdXN0IGJlIGFuIG9iamVjdCIpO3JldHVybiBCKEEpLHR9dmFyIHE9d0k7ZnVuY3Rpb24gSHQoQSl7bGV0IHQ9eyIhIjoiJTI1MjEiLCJcJyI6IiUyNTI3IiwiKCI6IiUyNTI4IiwiKSI6IiUyNTI5IiwifiI6IiUyNTdFIiwiJTI1MjAiOiIrIiwiJTI1MDAiOiJcXDAifTtyZXR1cm4gZW5jb2RlVVJJQ29tcG9uZW50KEEpLnJlcGxhY2UoL1shXCcoKX5dfCUyNTIwfCUyNTAwL2csZnVuY3Rpb24oSSl7cmV0dXJuIHRbSV19KX1mdW5jdGlvbiBZdChBLHQpe3RoaXMuX3BhaXJzPVtdLEEmJnEoQSx0aGlzLHQpfXZhciBxdD1ZdC5wcm90b3R5cGU7cXQuYXBwZW5kPWZ1bmN0aW9uKHQsZSl7dGhpcy5fcGFpcnMucHVzaChbdCxlXSl9O3F0LnRvU3RyaW5nPWZ1bmN0aW9uKHQpe2xldCBlPXQ/ZnVuY3Rpb24oSSl7cmV0dXJuIHQuY2FsbCh0aGlzLEksSHQpfTpIdDtyZXR1cm4gdGhpcy5fcGFpcnMubWFwKGZ1bmN0aW9uKHIpe3JldHVybiBlKHJbMF0pKyI9IitlKHJbMV0pfSwiIikuam9pbigiJiIpfTt2YXIgeUE9WXQ7ZnVuY3Rpb24gcEkoQSl7cmV0dXJuIGVuY29kZVVSSUNvbXBvbmVudChBKS5yZXBsYWNlKC8lMjUzQS9naSwiOiIpLnJlcGxhY2UoLyUyNTI0L2csIiQiKS5yZXBsYWNlKC8lMjUyQy9naSwiLCIpLnJlcGxhY2UoLyUyNTIwL2csIisiKS5yZXBsYWNlKC8lMjU1Qi9naSwiWyIpLnJlcGxhY2UoLyUyNTVEL2dpLCJdIil9ZnVuY3Rpb24gdEEoQSx0LGUpe2lmKCF0KXJldHVybiBBO2xldCBJPWUmJmUuZW5jb2RlfHxwSSxyPWUmJmUuc2VyaWFsaXplLG87aWYocj9vPXIodCxlKTpvPWkuaXNVUkxTZWFyY2hQYXJhbXModCk/dC50b1N0cmluZygpOm5ldyB5QSh0LGUpLnRvU3RyaW5nKEkpLG8pe2xldCBnPUEuaW5kZXhPZigiJTIzIik7ZyE9PS0xJiYoQT1BLnNsaWNlKDAsZykpLEErPShBLmluZGV4T2YoIj8iKT09PS0xPyI/IjoiJiIpK299cmV0dXJuIEF9dmFyIFBBPWNsYXNze2NvbnN0cnVjdG9yKCl7dGhpcy5oYW5kbGVycz1bXX11c2UodCxlLEkpe3JldHVybiB0aGlzLmhhbmRsZXJzLnB1c2goe2Z1bGZpbGxlZDp0LHJlamVjdGVkOmUsc3luY2hyb25vdXM6ST9JLnN5bmNocm9ub3VzOiExLHJ1bldoZW46ST9JLnJ1bldoZW46bnVsbH0pLHRoaXMuaGFuZGxlcnMubGVuZ3RoLTF9ZWplY3QodCl7dGhpcy5oYW5kbGVyc1t0XSYmKHRoaXMuaGFuZGxlcnNbdF09bnVsbCl9Y2xlYXIoKXt0aGlzLmhhbmRsZXJzJiYodGhpcy5oYW5kbGVycz1bXSl9Zm9yRWFjaCh0KXtpLmZvckVhY2godGhpcy5oYW5kbGVycyxmdW5jdGlvbihJKXtJIT09bnVsbCYmdChJKX0pfX0sakE9UEE7dmFyIG1BPXtzaWxlbnRKU09OUGFyc2luZzohMCxmb3JjZWRKU09OUGFyc2luZzohMCxjbGFyaWZ5VGltZW91dEVycm9yOiExfTt2YXIgTXQ9dHlwZW9mIFVSTFNlYXJjaFBhcmFtczwidSI/VVJMU2VhcmNoUGFyYW1zOnlBO3ZhciBUdD10eXBlb2YgRm9ybURhdGE8InUiP0Zvcm1EYXRhOm51bGw7dmFyIEt0PXR5cGVvZiBCbG9iPCJ1Ij9CbG9iOm51bGw7dmFyIE90PXtpc0Jyb3dzZXI6ITAsY2xhc3Nlczp7VVJMU2VhcmNoUGFyYW1zOk10LEZvcm1EYXRhOlR0LEJsb2I6S3R9LHByb3RvY29sczpbImh0dHAiLCJodHRwcyIsImZpbGUiLCJibG9iIiwidXJsIiwiZGF0YSJdfTt2YXIgWkE9e307d2UoWkEse2hhc0Jyb3dzZXJFbnY6KCk9PldBLGhhc1N0YW5kYXJkQnJvd3NlckVudjooKT0+U0ksaGFzU3RhbmRhcmRCcm93c2VyV2ViV29ya2VyRW52OigpPT5GSSxvcmlnaW46KCk9PlJJfSk7dmFyIFdBPXR5cGVvZiB3aW5kb3c8InUiJiZ0eXBlb2YgZG9jdW1lbnQ8InUiLFNJPShBPT5XQSYmWyJSZWFjdE5hdGl2ZSIsIk5hdGl2ZVNjcmlwdCIsIk5TIl0uaW5kZXhPZihBKTwwKSh0eXBlb2YgbmF2aWdhdG9yPCJ1IiYmbmF2aWdhdG9yLnByb2R1Y3QpLEZJPXR5cGVvZiBXb3JrZXJHbG9iYWxTY29wZTwidSImJnNlbGYgaW5zdGFuY2VvZiBXb3JrZXJHbG9iYWxTY29wZSYmdHlwZW9mIHNlbGYuaW1wb3J0U2NyaXB0cz09ImZ1bmN0aW9uIixSST1XQSYmd2luZG93LmxvY2F0aW9uLmhyZWZ8fCJodHRwOi8vbG9jYWxob3N0Ijt2YXIgdz17Li4uWkEsLi4uT3R9O2Z1bmN0aW9uIFZBKEEsdCl7cmV0dXJuIHEoQSxuZXcgdy5jbGFzc2VzLlVSTFNlYXJjaFBhcmFtcyxPYmplY3QuYXNzaWduKHt2aXNpdG9yOmZ1bmN0aW9uKGUsSSxyLG8pe3JldHVybiB3LmlzTm9kZSYmaS5pc0J1ZmZlcihlKT8odGhpcy5hcHBlbmQoSSxlLnRvU3RyaW5nKCJiYXNlNjQiKSksITEpOm8uZGVmYXVsdFZpc2l0b3IuYXBwbHkodGhpcyxhcmd1bWVudHMpfX0sdCkpfWZ1bmN0aW9uIE5JKEEpe3JldHVybiBpLm1hdGNoQWxsKC9cXHcrfFxcWyhcXHcqKV0vZyxBKS5tYXAodD0+dFswXT09PSJbXSI/IiI6dFsxXXx8dFswXSl9ZnVuY3Rpb24gVUkoQSl7bGV0IHQ9e30sZT1PYmplY3Qua2V5cyhBKSxJLHI9ZS5sZW5ndGgsbztmb3IoST0wO0k8cjtJKyspbz1lW0ldLHRbb109QVtvXTtyZXR1cm4gdH1mdW5jdGlvbiBHSShBKXtmdW5jdGlvbiB0KGUsSSxyLG8pe2xldCBnPWVbbysrXTtpZihnPT09Il9fcHJvdG9fXyIpcmV0dXJuITA7bGV0IEM9TnVtYmVyLmlzRmluaXRlKCtnKSxRPW8+PWUubGVuZ3RoO3JldHVybiBnPSFnJiZpLmlzQXJyYXkocik/ci5sZW5ndGg6ZyxRPyhpLmhhc093blByb3AocixnKT9yW2ddPVtyW2ddLEldOnJbZ109SSwhQyk6KCghcltnXXx8IWkuaXNPYmplY3QocltnXSkpJiYocltnXT1bXSksdChlLEkscltnXSxvKSYmaS5pc0FycmF5KHJbZ10pJiYocltnXT1VSShyW2ddKSksIUMpfWlmKGkuaXNGb3JtRGF0YShBKSYmaS5pc0Z1bmN0aW9uKEEuZW50cmllcykpe2xldCBlPXt9O3JldHVybiBpLmZvckVhY2hFbnRyeShBLChJLHIpPT57dChOSShJKSxyLGUsMCl9KSxlfXJldHVybiBudWxsfXZhciB3QT1HSTtmdW5jdGlvbiBrSShBLHQsZSl7aWYoaS5pc1N0cmluZyhBKSl0cnl7cmV0dXJuKHR8fEpTT04ucGFyc2UpKEEpLGkudHJpbShBKX1jYXRjaChJKXtpZihJLm5hbWUhPT0iU3ludGF4RXJyb3IiKXRocm93IEl9cmV0dXJuKGV8fEpTT04uc3RyaW5naWZ5KShBKX12YXIgX0E9e3RyYW5zaXRpb25hbDptQSxhZGFwdGVyOlsieGhyIiwiaHR0cCIsImZldGNoIl0sdHJhbnNmb3JtUmVxdWVzdDpbZnVuY3Rpb24odCxlKXtsZXQgST1lLmdldENvbnRlbnRUeXBlKCl8fCIiLHI9SS5pbmRleE9mKCJhcHBsaWNhdGlvbi9qc29uIik+LTEsbz1pLmlzT2JqZWN0KHQpO2lmKG8mJmkuaXNIVE1MRm9ybSh0KSYmKHQ9bmV3IEZvcm1EYXRhKHQpKSxpLmlzRm9ybURhdGEodCkpcmV0dXJuIHI/SlNPTi5zdHJpbmdpZnkod0EodCkpOnQ7aWYoaS5pc0FycmF5QnVmZmVyKHQpfHxpLmlzQnVmZmVyKHQpfHxpLmlzU3RyZWFtKHQpfHxpLmlzRmlsZSh0KXx8aS5pc0Jsb2IodCl8fGkuaXNSZWFkYWJsZVN0cmVhbSh0KSlyZXR1cm4gdDtpZihpLmlzQXJyYXlCdWZmZXJWaWV3KHQpKXJldHVybiB0LmJ1ZmZlcjtpZihpLmlzVVJMU2VhcmNoUGFyYW1zKHQpKXJldHVybiBlLnNldENvbnRlbnRUeXBlKCJhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQ7Y2hhcnNldD11dGYtOCIsITEpLHQudG9TdHJpbmcoKTtsZXQgQztpZihvKXtpZihJLmluZGV4T2YoImFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCIpPi0xKXJldHVybiBWQSh0LHRoaXMuZm9ybVNlcmlhbGl6ZXIpLnRvU3RyaW5nKCk7aWYoKEM9aS5pc0ZpbGVMaXN0KHQpKXx8SS5pbmRleE9mKCJtdWx0aXBhcnQvZm9ybS1kYXRhIik+LTEpe2xldCBRPXRoaXMuZW52JiZ0aGlzLmVudi5Gb3JtRGF0YTtyZXR1cm4gcShDP3siZmlsZXNbXSI6dH06dCxRJiZuZXcgUSx0aGlzLmZvcm1TZXJpYWxpemVyKX19cmV0dXJuIG98fHI/KGUuc2V0Q29udGVudFR5cGUoImFwcGxpY2F0aW9uL2pzb24iLCExKSxrSSh0KSk6dH1dLHRyYW5zZm9ybVJlc3BvbnNlOltmdW5jdGlvbih0KXtsZXQgZT10aGlzLnRyYW5zaXRpb25hbHx8X0EudHJhbnNpdGlvbmFsLEk9ZSYmZS5mb3JjZWRKU09OUGFyc2luZyxyPXRoaXMucmVzcG9uc2VUeXBlPT09Impzb24iO2lmKGkuaXNSZXNwb25zZSh0KXx8aS5pc1JlYWRhYmxlU3RyZWFtKHQpKXJldHVybiB0O2lmKHQmJmkuaXNTdHJpbmcodCkmJihJJiYhdGhpcy5yZXNwb25zZVR5cGV8fHIpKXtsZXQgZz0hKGUmJmUuc2lsZW50SlNPTlBhcnNpbmcpJiZyO3RyeXtyZXR1cm4gSlNPTi5wYXJzZSh0KX1jYXRjaChDKXtpZihnKXRocm93IEMubmFtZT09PSJTeW50YXhFcnJvciI/dS5mcm9tKEMsdS5FUlJfQkFEX1JFU1BPTlNFLHRoaXMsbnVsbCx0aGlzLnJlc3BvbnNlKTpDfX1yZXR1cm4gdH1dLHRpbWVvdXQ6MCx4c3JmQ29va2llTmFtZToiWFNSRi1UT0tFTiIseHNyZkhlYWRlck5hbWU6IlgtWFNSRi1UT0tFTiIsbWF4Q29udGVudExlbmd0aDotMSxtYXhCb2R5TGVuZ3RoOi0xLGVudjp7Rm9ybURhdGE6dy5jbGFzc2VzLkZvcm1EYXRhLEJsb2I6dy5jbGFzc2VzLkJsb2J9LHZhbGlkYXRlU3RhdHVzOmZ1bmN0aW9uKHQpe3JldHVybiB0Pj0yMDAmJnQ8MzAwfSxoZWFkZXJzOntjb21tb246e0FjY2VwdDoiYXBwbGljYXRpb24vanNvbiwgdGV4dC9wbGFpbiwgKi8qIiwiQ29udGVudC1UeXBlIjp2b2lkIDB9fX07aS5mb3JFYWNoKFsiZGVsZXRlIiwiZ2V0IiwiaGVhZCIsInBvc3QiLCJwdXQiLCJwYXRjaCJdLEE9PntfQS5oZWFkZXJzW0FdPXt9fSk7dmFyIFo9X0E7dmFyIExJPWkudG9PYmplY3RTZXQoWyJhZ2UiLCJhdXRob3JpemF0aW9uIiwiY29udGVudC1sZW5ndGgiLCJjb250ZW50LXR5cGUiLCJldGFnIiwiZXhwaXJlcyIsImZyb20iLCJob3N0IiwiaWYtbW9kaWZpZWQtc2luY2UiLCJpZi11bm1vZGlmaWVkLXNpbmNlIiwibGFzdC1tb2RpZmllZCIsImxvY2F0aW9uIiwibWF4LWZvcndhcmRzIiwicHJveHktYXV0aG9yaXphdGlvbiIsInJlZmVyZXIiLCJyZXRyeS1hZnRlciIsInVzZXItYWdlbnQiXSkseHQ9QT0+e2xldCB0PXt9LGUsSSxyO3JldHVybiBBJiZBLnNwbGl0KGAlMEFgKS5mb3JFYWNoKGZ1bmN0aW9uKGcpe3I9Zy5pbmRleE9mKCI6IiksZT1nLnN1YnN0cmluZygwLHIpLnRyaW0oKS50b0xvd2VyQ2FzZSgpLEk9Zy5zdWJzdHJpbmcocisxKS50cmltKCksISghZXx8dFtlXSYmTElbZV0pJiYoZT09PSJzZXQtY29va2llIj90W2VdP3RbZV0ucHVzaChJKTp0W2VdPVtJXTp0W2VdPXRbZV0/dFtlXSsiLCAiK0k6SSl9KSx0fTt2YXIgUHQ9U3ltYm9sKCJpbnRlcm5hbHMiKTtmdW5jdGlvbiBlQShBKXtyZXR1cm4gQSYmU3RyaW5nKEEpLnRyaW0oKS50b0xvd2VyQ2FzZSgpfWZ1bmN0aW9uIHBBKEEpe3JldHVybiBBPT09ITF8fEE9PW51bGw/QTppLmlzQXJyYXkoQSk/QS5tYXAocEEpOlN0cmluZyhBKX1mdW5jdGlvbiBKSShBKXtsZXQgdD1PYmplY3QuY3JlYXRlKG51bGwpLGU9LyhbXlxccyw7PV0rKVxccyooPzo9XFxzKihbXiw7XSspKT8vZyxJO2Zvcig7ST1lLmV4ZWMoQSk7KXRbSVsxXV09SVsyXTtyZXR1cm4gdH12YXIgYkk9QT0+L15bLV9hLXpBLVowLTleYHx+LCElMjMkJSZcJyorLl0rJC8udGVzdChBLnRyaW0oKSk7ZnVuY3Rpb24gWEEoQSx0LGUsSSxyKXtpZihpLmlzRnVuY3Rpb24oSSkpcmV0dXJuIEkuY2FsbCh0aGlzLHQsZSk7aWYociYmKHQ9ZSksISFpLmlzU3RyaW5nKHQpKXtpZihpLmlzU3RyaW5nKEkpKXJldHVybiB0LmluZGV4T2YoSSkhPT0tMTtpZihpLmlzUmVnRXhwKEkpKXJldHVybiBJLnRlc3QodCl9fWZ1bmN0aW9uIEhJKEEpe3JldHVybiBBLnRyaW0oKS50b0xvd2VyQ2FzZSgpLnJlcGxhY2UoLyhbYS16XFxkXSkoXFx3KikvZywodCxlLEkpPT5lLnRvVXBwZXJDYXNlKCkrSSl9ZnVuY3Rpb24gWUkoQSx0KXtsZXQgZT1pLnRvQ2FtZWxDYXNlKCIgIit0KTtbImdldCIsInNldCIsImhhcyJdLmZvckVhY2goST0+e09iamVjdC5kZWZpbmVQcm9wZXJ0eShBLEkrZSx7dmFsdWU6ZnVuY3Rpb24ocixvLGcpe3JldHVybiB0aGlzW0ldLmNhbGwodGhpcyx0LHIsbyxnKX0sY29uZmlndXJhYmxlOiEwfSl9KX12YXIgVj1jbGFzc3tjb25zdHJ1Y3Rvcih0KXt0JiZ0aGlzLnNldCh0KX1zZXQodCxlLEkpe2xldCByPXRoaXM7ZnVuY3Rpb24gbyhDLFEsYSl7bGV0IG49ZUEoUSk7aWYoIW4pdGhyb3cgbmV3IEVycm9yKCJoZWFkZXIgbmFtZSBtdXN0IGJlIGEgbm9uLWVtcHR5IHN0cmluZyIpO2xldCBzPWkuZmluZEtleShyLG4pOyghc3x8cltzXT09PXZvaWQgMHx8YT09PSEwfHxhPT09dm9pZCAwJiZyW3NdIT09ITEpJiYocltzfHxRXT1wQShDKSl9bGV0IGc9KEMsUSk9PmkuZm9yRWFjaChDLChhLG4pPT5vKGEsbixRKSk7aWYoaS5pc1BsYWluT2JqZWN0KHQpfHx0IGluc3RhbmNlb2YgdGhpcy5jb25zdHJ1Y3RvcilnKHQsZSk7ZWxzZSBpZihpLmlzU3RyaW5nKHQpJiYodD10LnRyaW0oKSkmJiFiSSh0KSlnKHh0KHQpLGUpO2Vsc2UgaWYoaS5pc0hlYWRlcnModCkpZm9yKGxldFtDLFFdb2YgdC5lbnRyaWVzKCkpbyhRLEMsSSk7ZWxzZSB0IT1udWxsJiZvKGUsdCxJKTtyZXR1cm4gdGhpc31nZXQodCxlKXtpZih0PWVBKHQpLHQpe2xldCBJPWkuZmluZEtleSh0aGlzLHQpO2lmKEkpe2xldCByPXRoaXNbSV07aWYoIWUpcmV0dXJuIHI7aWYoZT09PSEwKXJldHVybiBKSShyKTtpZihpLmlzRnVuY3Rpb24oZSkpcmV0dXJuIGUuY2FsbCh0aGlzLHIsSSk7aWYoaS5pc1JlZ0V4cChlKSlyZXR1cm4gZS5leGVjKHIpO3Rocm93IG5ldyBUeXBlRXJyb3IoInBhcnNlciBtdXN0IGJlIGJvb2xlYW58cmVnZXhwfGZ1bmN0aW9uIil9fX1oYXModCxlKXtpZih0PWVBKHQpLHQpe2xldCBJPWkuZmluZEtleSh0aGlzLHQpO3JldHVybiEhKEkmJnRoaXNbSV0hPT12b2lkIDAmJighZXx8WEEodGhpcyx0aGlzW0ldLEksZSkpKX1yZXR1cm4hMX1kZWxldGUodCxlKXtsZXQgST10aGlzLHI9ITE7ZnVuY3Rpb24gbyhnKXtpZihnPWVBKGcpLGcpe2xldCBDPWkuZmluZEtleShJLGcpO0MmJighZXx8WEEoSSxJW0NdLEMsZSkpJiYoZGVsZXRlIElbQ10scj0hMCl9fXJldHVybiBpLmlzQXJyYXkodCk/dC5mb3JFYWNoKG8pOm8odCkscn1jbGVhcih0KXtsZXQgZT1PYmplY3Qua2V5cyh0aGlzKSxJPWUubGVuZ3RoLHI9ITE7Zm9yKDtJLS07KXtsZXQgbz1lW0ldOyghdHx8WEEodGhpcyx0aGlzW29dLG8sdCwhMCkpJiYoZGVsZXRlIHRoaXNbb10scj0hMCl9cmV0dXJuIHJ9bm9ybWFsaXplKHQpe2xldCBlPXRoaXMsST17fTtyZXR1cm4gaS5mb3JFYWNoKHRoaXMsKHIsbyk9PntsZXQgZz1pLmZpbmRLZXkoSSxvKTtpZihnKXtlW2ddPXBBKHIpLGRlbGV0ZSBlW29dO3JldHVybn1sZXQgQz10P0hJKG8pOlN0cmluZyhvKS50cmltKCk7QyE9PW8mJmRlbGV0ZSBlW29dLGVbQ109cEEociksSVtDXT0hMH0pLHRoaXN9Y29uY2F0KC4uLnQpe3JldHVybiB0aGlzLmNvbnN0cnVjdG9yLmNvbmNhdCh0aGlzLC4uLnQpfXRvSlNPTih0KXtsZXQgZT1PYmplY3QuY3JlYXRlKG51bGwpO3JldHVybiBpLmZvckVhY2godGhpcywoSSxyKT0+e0khPW51bGwmJkkhPT0hMSYmKGVbcl09dCYmaS5pc0FycmF5KEkpP0kuam9pbigiLCAiKTpJKX0pLGV9W1N5bWJvbC5pdGVyYXRvcl0oKXtyZXR1cm4gT2JqZWN0LmVudHJpZXModGhpcy50b0pTT04oKSlbU3ltYm9sLml0ZXJhdG9yXSgpfXRvU3RyaW5nKCl7cmV0dXJuIE9iamVjdC5lbnRyaWVzKHRoaXMudG9KU09OKCkpLm1hcCgoW3QsZV0pPT50KyI6ICIrZSkuam9pbihgJTBBYCl9Z2V0W1N5bWJvbC50b1N0cmluZ1RhZ10oKXtyZXR1cm4iQXhpb3NIZWFkZXJzIn1zdGF0aWMgZnJvbSh0KXtyZXR1cm4gdCBpbnN0YW5jZW9mIHRoaXM/dDpuZXcgdGhpcyh0KX1zdGF0aWMgY29uY2F0KHQsLi4uZSl7bGV0IEk9bmV3IHRoaXModCk7cmV0dXJuIGUuZm9yRWFjaChyPT5JLnNldChyKSksSX1zdGF0aWMgYWNjZXNzb3IodCl7bGV0IEk9KHRoaXNbUHRdPXRoaXNbUHRdPXthY2Nlc3NvcnM6e319KS5hY2Nlc3NvcnMscj10aGlzLnByb3RvdHlwZTtmdW5jdGlvbiBvKGcpe2xldCBDPWVBKGcpO0lbQ118fChZSShyLGcpLElbQ109ITApfXJldHVybiBpLmlzQXJyYXkodCk/dC5mb3JFYWNoKG8pOm8odCksdGhpc319O1YuYWNjZXNzb3IoWyJDb250ZW50LVR5cGUiLCJDb250ZW50LUxlbmd0aCIsIkFjY2VwdCIsIkFjY2VwdC1FbmNvZGluZyIsIlVzZXItQWdlbnQiLCJBdXRob3JpemF0aW9uIl0pO2kucmVkdWNlRGVzY3JpcHRvcnMoVi5wcm90b3R5cGUsKHt2YWx1ZTpBfSx0KT0+e2xldCBlPXRbMF0udG9VcHBlckNhc2UoKSt0LnNsaWNlKDEpO3JldHVybntnZXQ6KCk9PkEsc2V0KEkpe3RoaXNbZV09SX19fSk7aS5mcmVlemVNZXRob2RzKFYpO3ZhciBtPVY7ZnVuY3Rpb24gSUEoQSx0KXtsZXQgZT10aGlzfHxaLEk9dHx8ZSxyPW0uZnJvbShJLmhlYWRlcnMpLG89SS5kYXRhO3JldHVybiBpLmZvckVhY2goQSxmdW5jdGlvbihDKXtvPUMuY2FsbChlLG8sci5ub3JtYWxpemUoKSx0P3Quc3RhdHVzOnZvaWQgMCl9KSxyLm5vcm1hbGl6ZSgpLG99ZnVuY3Rpb24gckEoQSl7cmV0dXJuISEoQSYmQS5fX0NBTkNFTF9fKX1mdW5jdGlvbiBqdChBLHQsZSl7dS5jYWxsKHRoaXMsQT8/ImNhbmNlbGVkIix1LkVSUl9DQU5DRUxFRCx0LGUpLHRoaXMubmFtZT0iQ2FuY2VsZWRFcnJvciJ9aS5pbmhlcml0cyhqdCx1LHtfX0NBTkNFTF9fOiEwfSk7dmFyIGI9anQ7ZnVuY3Rpb24gb0EoQSx0LGUpe2xldCBJPWUuY29uZmlnLnZhbGlkYXRlU3RhdHVzOyFlLnN0YXR1c3x8IUl8fEkoZS5zdGF0dXMpP0EoZSk6dChuZXcgdSgiUmVxdWVzdCBmYWlsZWQgd2l0aCBzdGF0dXMgY29kZSAiK2Uuc3RhdHVzLFt1LkVSUl9CQURfUkVRVUVTVCx1LkVSUl9CQURfUkVTUE9OU0VdW01hdGguZmxvb3IoZS5zdGF0dXMvMTAwKS00XSxlLmNvbmZpZyxlLnJlcXVlc3QsZSkpfWZ1bmN0aW9uIHpBKEEpe2xldCB0PS9eKFstK1xcd117MSwyNX0pKDo/XFwvXFwvfDopLy5leGVjKEEpO3JldHVybiB0JiZ0WzFdfHwiIn1mdW5jdGlvbiBxSShBLHQpe0E9QXx8MTA7bGV0IGU9bmV3IEFycmF5KEEpLEk9bmV3IEFycmF5KEEpLHI9MCxvPTAsZztyZXR1cm4gdD10IT09dm9pZCAwP3Q6MWUzLGZ1bmN0aW9uKFEpe2xldCBhPURhdGUubm93KCksbj1JW29dO2d8fChnPWEpLGVbcl09USxJW3JdPWE7bGV0IHM9byxmPTA7Zm9yKDtzIT09cjspZis9ZVtzKytdLHM9cyVBO2lmKHI9KHIrMSklQSxyPT09byYmKG89KG8rMSklQSksYS1nPHQpcmV0dXJuO2xldCBCPW4mJmEtbjtyZXR1cm4gQj9NYXRoLnJvdW5kKGYqMWUzL0IpOnZvaWQgMH19dmFyIFd0PXFJO2Z1bmN0aW9uIE1JKEEsdCl7bGV0IGU9MCxJPTFlMy90LHIsbyxnPShhLG49RGF0ZS5ub3coKSk9PntlPW4scj1udWxsLG8mJihjbGVhclRpbWVvdXQobyksbz1udWxsKSxBLmFwcGx5KG51bGwsYSl9O3JldHVyblsoLi4uYSk9PntsZXQgbj1EYXRlLm5vdygpLHM9bi1lO3M+PUk/ZyhhLG4pOihyPWEsb3x8KG89c2V0VGltZW91dCgoKT0+e289bnVsbCxnKHIpfSxJLXMpKSl9LCgpPT5yJiZnKHIpXX12YXIgWnQ9TUk7dmFyIF89KEEsdCxlPTMpPT57bGV0IEk9MCxyPVd0KDUwLDI1MCk7cmV0dXJuIFp0KG89PntsZXQgZz1vLmxvYWRlZCxDPW8ubGVuZ3RoQ29tcHV0YWJsZT9vLnRvdGFsOnZvaWQgMCxRPWctSSxhPXIoUSksbj1nPD1DO0k9ZztsZXQgcz17bG9hZGVkOmcsdG90YWw6Qyxwcm9ncmVzczpDP2cvQzp2b2lkIDAsYnl0ZXM6USxyYXRlOmF8fHZvaWQgMCxlc3RpbWF0ZWQ6YSYmQyYmbj8oQy1nKS9hOnZvaWQgMCxldmVudDpvLGxlbmd0aENvbXB1dGFibGU6QyE9bnVsbCxbdD8iZG93bmxvYWQiOiJ1cGxvYWQiXTohMH07QShzKX0sZSl9LHZBPShBLHQpPT57bGV0IGU9QSE9bnVsbDtyZXR1cm5bST0+dFswXSh7bGVuZ3RoQ29tcHV0YWJsZTplLHRvdGFsOkEsbG9hZGVkOkl9KSx0WzFdXX0sJEE9QT0+KC4uLnQpPT5pLmFzYXAoKCk9PkEoLi4udCkpO3ZhciBWdD13Lmhhc1N0YW5kYXJkQnJvd3NlckVudj9mdW5jdGlvbigpe2xldCB0PS8obXNpZXx0cmlkZW50KS9pLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCksZT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJhIiksSTtmdW5jdGlvbiByKG8pe2xldCBnPW87cmV0dXJuIHQmJihlLnNldEF0dHJpYnV0ZSgiaHJlZiIsZyksZz1lLmhyZWYpLGUuc2V0QXR0cmlidXRlKCJocmVmIixnKSx7aHJlZjplLmhyZWYscHJvdG9jb2w6ZS5wcm90b2NvbD9lLnByb3RvY29sLnJlcGxhY2UoLzokLywiIik6IiIsaG9zdDplLmhvc3Qsc2VhcmNoOmUuc2VhcmNoP2Uuc2VhcmNoLnJlcGxhY2UoL15cXD8vLCIiKToiIixoYXNoOmUuaGFzaD9lLmhhc2gucmVwbGFjZSgvXiUyMy8sIiIpOiIiLGhvc3RuYW1lOmUuaG9zdG5hbWUscG9ydDplLnBvcnQscGF0aG5hbWU6ZS5wYXRobmFtZS5jaGFyQXQoMCk9PT0iLyI/ZS5wYXRobmFtZToiLyIrZS5wYXRobmFtZX19cmV0dXJuIEk9cih3aW5kb3cubG9jYXRpb24uaHJlZiksZnVuY3Rpb24oZyl7bGV0IEM9aS5pc1N0cmluZyhnKT9yKGcpOmc7cmV0dXJuIEMucHJvdG9jb2w9PT1JLnByb3RvY29sJiZDLmhvc3Q9PT1JLmhvc3R9fSgpOmZ1bmN0aW9uKCl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuITB9fSgpO3ZhciBfdD13Lmhhc1N0YW5kYXJkQnJvd3NlckVudj97d3JpdGUoQSx0LGUsSSxyLG8pe2xldCBnPVtBKyI9IitlbmNvZGVVUklDb21wb25lbnQodCldO2kuaXNOdW1iZXIoZSkmJmcucHVzaCgiZXhwaXJlcz0iK25ldyBEYXRlKGUpLnRvR01UU3RyaW5nKCkpLGkuaXNTdHJpbmcoSSkmJmcucHVzaCgicGF0aD0iK0kpLGkuaXNTdHJpbmcocikmJmcucHVzaCgiZG9tYWluPSIrciksbz09PSEwJiZnLnB1c2goInNlY3VyZSIpLGRvY3VtZW50LmNvb2tpZT1nLmpvaW4oIjsgIil9LHJlYWQoQSl7bGV0IHQ9ZG9jdW1lbnQuY29va2llLm1hdGNoKG5ldyBSZWdFeHAoIihefDtcXFxccyopKCIrQSsiKT0oW147XSopIikpO3JldHVybiB0P2RlY29kZVVSSUNvbXBvbmVudCh0WzNdKTpudWxsfSxyZW1vdmUoQSl7dGhpcy53cml0ZShBLCIiLERhdGUubm93KCktODY0ZTUpfX06e3dyaXRlKCl7fSxyZWFkKCl7cmV0dXJuIG51bGx9LHJlbW92ZSgpe319O2Z1bmN0aW9uIEF0KEEpe3JldHVybi9eKFthLXpdW2EtelxcZCtcXC0uXSo6KT9cXC9cXC8vaS50ZXN0KEEpfWZ1bmN0aW9uIHR0KEEsdCl7cmV0dXJuIHQ/QS5yZXBsYWNlKC9cXC8/XFwvJC8sIiIpKyIvIit0LnJlcGxhY2UoL15cXC8rLywiIik6QX1mdW5jdGlvbiBnQShBLHQpe3JldHVybiBBJiYhQXQodCk/dHQoQSx0KTp0fXZhciBYdD1BPT5BIGluc3RhbmNlb2YgbT97Li4uQX06QTtmdW5jdGlvbiBrKEEsdCl7dD10fHx7fTtsZXQgZT17fTtmdW5jdGlvbiBJKGEsbixzKXtyZXR1cm4gaS5pc1BsYWluT2JqZWN0KGEpJiZpLmlzUGxhaW5PYmplY3Qobik/aS5tZXJnZS5jYWxsKHtjYXNlbGVzczpzfSxhLG4pOmkuaXNQbGFpbk9iamVjdChuKT9pLm1lcmdlKHt9LG4pOmkuaXNBcnJheShuKT9uLnNsaWNlKCk6bn1mdW5jdGlvbiByKGEsbixzKXtpZihpLmlzVW5kZWZpbmVkKG4pKXtpZighaS5pc1VuZGVmaW5lZChhKSlyZXR1cm4gSSh2b2lkIDAsYSxzKX1lbHNlIHJldHVybiBJKGEsbixzKX1mdW5jdGlvbiBvKGEsbil7aWYoIWkuaXNVbmRlZmluZWQobikpcmV0dXJuIEkodm9pZCAwLG4pfWZ1bmN0aW9uIGcoYSxuKXtpZihpLmlzVW5kZWZpbmVkKG4pKXtpZighaS5pc1VuZGVmaW5lZChhKSlyZXR1cm4gSSh2b2lkIDAsYSl9ZWxzZSByZXR1cm4gSSh2b2lkIDAsbil9ZnVuY3Rpb24gQyhhLG4scyl7aWYocyBpbiB0KXJldHVybiBJKGEsbik7aWYocyBpbiBBKXJldHVybiBJKHZvaWQgMCxhKX1sZXQgUT17dXJsOm8sbWV0aG9kOm8sZGF0YTpvLGJhc2VVUkw6Zyx0cmFuc2Zvcm1SZXF1ZXN0OmcsdHJhbnNmb3JtUmVzcG9uc2U6ZyxwYXJhbXNTZXJpYWxpemVyOmcsdGltZW91dDpnLHRpbWVvdXRNZXNzYWdlOmcsd2l0aENyZWRlbnRpYWxzOmcsd2l0aFhTUkZUb2tlbjpnLGFkYXB0ZXI6ZyxyZXNwb25zZVR5cGU6Zyx4c3JmQ29va2llTmFtZTpnLHhzcmZIZWFkZXJOYW1lOmcsb25VcGxvYWRQcm9ncmVzczpnLG9uRG93bmxvYWRQcm9ncmVzczpnLGRlY29tcHJlc3M6ZyxtYXhDb250ZW50TGVuZ3RoOmcsbWF4Qm9keUxlbmd0aDpnLGJlZm9yZVJlZGlyZWN0OmcsdHJhbnNwb3J0OmcsaHR0cEFnZW50OmcsaHR0cHNBZ2VudDpnLGNhbmNlbFRva2VuOmcsc29ja2V0UGF0aDpnLHJlc3BvbnNlRW5jb2Rpbmc6Zyx2YWxpZGF0ZVN0YXR1czpDLGhlYWRlcnM6KGEsbik9PnIoWHQoYSksWHQobiksITApfTtyZXR1cm4gaS5mb3JFYWNoKE9iamVjdC5rZXlzKE9iamVjdC5hc3NpZ24oe30sQSx0KSksZnVuY3Rpb24obil7bGV0IHM9UVtuXXx8cixmPXMoQVtuXSx0W25dLG4pO2kuaXNVbmRlZmluZWQoZikmJnMhPT1DfHwoZVtuXT1mKX0pLGV9dmFyIFNBPUE9PntsZXQgdD1rKHt9LEEpLHtkYXRhOmUsd2l0aFhTUkZUb2tlbjpJLHhzcmZIZWFkZXJOYW1lOnIseHNyZkNvb2tpZU5hbWU6byxoZWFkZXJzOmcsYXV0aDpDfT10O3QuaGVhZGVycz1nPW0uZnJvbShnKSx0LnVybD10QShnQSh0LmJhc2VVUkwsdC51cmwpLEEucGFyYW1zLEEucGFyYW1zU2VyaWFsaXplciksQyYmZy5zZXQoIkF1dGhvcml6YXRpb24iLCJCYXNpYyAiK2J0b2EoKEMudXNlcm5hbWV8fCIiKSsiOiIrKEMucGFzc3dvcmQ/dW5lc2NhcGUoZW5jb2RlVVJJQ29tcG9uZW50KEMucGFzc3dvcmQpKToiIikpKTtsZXQgUTtpZihpLmlzRm9ybURhdGEoZSkpe2lmKHcuaGFzU3RhbmRhcmRCcm93c2VyRW52fHx3Lmhhc1N0YW5kYXJkQnJvd3NlcldlYldvcmtlckVudilnLnNldENvbnRlbnRUeXBlKHZvaWQgMCk7ZWxzZSBpZigoUT1nLmdldENvbnRlbnRUeXBlKCkpIT09ITEpe2xldFthLC4uLm5dPVE/US5zcGxpdCgiOyIpLm1hcChzPT5zLnRyaW0oKSkuZmlsdGVyKEJvb2xlYW4pOltdO2cuc2V0Q29udGVudFR5cGUoW2F8fCJtdWx0aXBhcnQvZm9ybS1kYXRhIiwuLi5uXS5qb2luKCI7ICIpKX19aWYody5oYXNTdGFuZGFyZEJyb3dzZXJFbnYmJihJJiZpLmlzRnVuY3Rpb24oSSkmJihJPUkodCkpLEl8fEkhPT0hMSYmVnQodC51cmwpKSl7bGV0IGE9ciYmbyYmX3QucmVhZChvKTthJiZnLnNldChyLGEpfXJldHVybiB0fTt2YXIgVEk9dHlwZW9mIFhNTEh0dHBSZXF1ZXN0PCJ1Iix6dD1USSYmZnVuY3Rpb24oQSl7cmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKGUsSSl7bGV0IHI9U0EoQSksbz1yLmRhdGEsZz1tLmZyb20oci5oZWFkZXJzKS5ub3JtYWxpemUoKSx7cmVzcG9uc2VUeXBlOkMsb25VcGxvYWRQcm9ncmVzczpRLG9uRG93bmxvYWRQcm9ncmVzczphfT1yLG4scyxmLEIsRTtmdW5jdGlvbiBsKCl7QiYmQigpLEUmJkUoKSxyLmNhbmNlbFRva2VuJiZyLmNhbmNlbFRva2VuLnVuc3Vic2NyaWJlKG4pLHIuc2lnbmFsJiZyLnNpZ25hbC5yZW1vdmVFdmVudExpc3RlbmVyKCJhYm9ydCIsbil9bGV0IGM9bmV3IFhNTEh0dHBSZXF1ZXN0O2Mub3BlbihyLm1ldGhvZC50b1VwcGVyQ2FzZSgpLHIudXJsLCEwKSxjLnRpbWVvdXQ9ci50aW1lb3V0O2Z1bmN0aW9uIHAoKXtpZighYylyZXR1cm47bGV0IEQ9bS5mcm9tKCJnZXRBbGxSZXNwb25zZUhlYWRlcnMiaW4gYyYmYy5nZXRBbGxSZXNwb25zZUhlYWRlcnMoKSksSz17ZGF0YTohQ3x8Qz09PSJ0ZXh0Inx8Qz09PSJqc29uIj9jLnJlc3BvbnNlVGV4dDpjLnJlc3BvbnNlLHN0YXR1czpjLnN0YXR1cyxzdGF0dXNUZXh0OmMuc3RhdHVzVGV4dCxoZWFkZXJzOkQsY29uZmlnOkEscmVxdWVzdDpjfTtvQShmdW5jdGlvbihKKXtlKEopLGwoKX0sZnVuY3Rpb24oSil7SShKKSxsKCl9LEspLGM9bnVsbH0ib25sb2FkZW5kImluIGM/Yy5vbmxvYWRlbmQ9cDpjLm9ucmVhZHlzdGF0ZWNoYW5nZT1mdW5jdGlvbigpeyFjfHxjLnJlYWR5U3RhdGUhPT00fHxjLnN0YXR1cz09PTAmJiEoYy5yZXNwb25zZVVSTCYmYy5yZXNwb25zZVVSTC5pbmRleE9mKCJmaWxlOiIpPT09MCl8fHNldFRpbWVvdXQocCl9LGMub25hYm9ydD1mdW5jdGlvbigpe2MmJihJKG5ldyB1KCJSZXF1ZXN0IGFib3J0ZWQiLHUuRUNPTk5BQk9SVEVELEEsYykpLGM9bnVsbCl9LGMub25lcnJvcj1mdW5jdGlvbigpe0kobmV3IHUoIk5ldHdvcmsgRXJyb3IiLHUuRVJSX05FVFdPUkssQSxjKSksYz1udWxsfSxjLm9udGltZW91dD1mdW5jdGlvbigpe2xldCBVPXIudGltZW91dD8idGltZW91dCBvZiAiK3IudGltZW91dCsibXMgZXhjZWVkZWQiOiJ0aW1lb3V0IGV4Y2VlZGVkIixLPXIudHJhbnNpdGlvbmFsfHxtQTtyLnRpbWVvdXRFcnJvck1lc3NhZ2UmJihVPXIudGltZW91dEVycm9yTWVzc2FnZSksSShuZXcgdShVLEsuY2xhcmlmeVRpbWVvdXRFcnJvcj91LkVUSU1FRE9VVDp1LkVDT05OQUJPUlRFRCxBLGMpKSxjPW51bGx9LG89PT12b2lkIDAmJmcuc2V0Q29udGVudFR5cGUobnVsbCksInNldFJlcXVlc3RIZWFkZXIiaW4gYyYmaS5mb3JFYWNoKGcudG9KU09OKCksZnVuY3Rpb24oVSxLKXtjLnNldFJlcXVlc3RIZWFkZXIoSyxVKX0pLGkuaXNVbmRlZmluZWQoci53aXRoQ3JlZGVudGlhbHMpfHwoYy53aXRoQ3JlZGVudGlhbHM9ISFyLndpdGhDcmVkZW50aWFscyksQyYmQyE9PSJqc29uIiYmKGMucmVzcG9uc2VUeXBlPXIucmVzcG9uc2VUeXBlKSxhJiYoW2YsRV09XyhhLCEwKSxjLmFkZEV2ZW50TGlzdGVuZXIoInByb2dyZXNzIixmKSksUSYmYy51cGxvYWQmJihbcyxCXT1fKFEpLGMudXBsb2FkLmFkZEV2ZW50TGlzdGVuZXIoInByb2dyZXNzIixzKSxjLnVwbG9hZC5hZGRFdmVudExpc3RlbmVyKCJsb2FkZW5kIixCKSksKHIuY2FuY2VsVG9rZW58fHIuc2lnbmFsKSYmKG49RD0+e2MmJihJKCFEfHxELnR5cGU/bmV3IGIobnVsbCxBLGMpOkQpLGMuYWJvcnQoKSxjPW51bGwpfSxyLmNhbmNlbFRva2VuJiZyLmNhbmNlbFRva2VuLnN1YnNjcmliZShuKSxyLnNpZ25hbCYmKHIuc2lnbmFsLmFib3J0ZWQ/bigpOnIuc2lnbmFsLmFkZEV2ZW50TGlzdGVuZXIoImFib3J0IixuKSkpO2xldCBTPXpBKHIudXJsKTtpZihTJiZ3LnByb3RvY29scy5pbmRleE9mKFMpPT09LTEpe0kobmV3IHUoIlVuc3VwcG9ydGVkIHByb3RvY29sICIrUysiOiIsdS5FUlJfQkFEX1JFUVVFU1QsQSkpO3JldHVybn1jLnNlbmQob3x8bnVsbCl9KX07dmFyIEtJPShBLHQpPT57bGV0IGU9bmV3IEFib3J0Q29udHJvbGxlcixJLHI9ZnVuY3Rpb24oUSl7aWYoIUkpe0k9ITAsZygpO2xldCBhPVEgaW5zdGFuY2VvZiBFcnJvcj9ROnRoaXMucmVhc29uO2UuYWJvcnQoYSBpbnN0YW5jZW9mIHU/YTpuZXcgYihhIGluc3RhbmNlb2YgRXJyb3I/YS5tZXNzYWdlOmEpKX19LG89dCYmc2V0VGltZW91dCgoKT0+e3IobmV3IHUoYHRpbWVvdXQgJHt0fSBvZiBtcyBleGNlZWRlZGAsdS5FVElNRURPVVQpKX0sdCksZz0oKT0+e0EmJihvJiZjbGVhclRpbWVvdXQobyksbz1udWxsLEEuZm9yRWFjaChRPT57USYmKFEucmVtb3ZlRXZlbnRMaXN0ZW5lcj9RLnJlbW92ZUV2ZW50TGlzdGVuZXIoImFib3J0IixyKTpRLnVuc3Vic2NyaWJlKHIpKX0pLEE9bnVsbCl9O0EuZm9yRWFjaChRPT5RJiZRLmFkZEV2ZW50TGlzdGVuZXImJlEuYWRkRXZlbnRMaXN0ZW5lcigiYWJvcnQiLHIpKTtsZXR7c2lnbmFsOkN9PWU7cmV0dXJuIEMudW5zdWJzY3JpYmU9ZyxbQywoKT0+e28mJmNsZWFyVGltZW91dChvKSxvPW51bGx9XX0sdnQ9S0k7dmFyIE9JPWZ1bmN0aW9uKihBLHQpe2xldCBlPUEuYnl0ZUxlbmd0aDtpZighdHx8ZTx0KXt5aWVsZCBBO3JldHVybn1sZXQgST0wLHI7Zm9yKDtJPGU7KXI9SSt0LHlpZWxkIEEuc2xpY2UoSSxyKSxJPXJ9LHhJPWFzeW5jIGZ1bmN0aW9uKihBLHQsZSl7Zm9yIGF3YWl0KGxldCBJIG9mIEEpeWllbGQqT0koQXJyYXlCdWZmZXIuaXNWaWV3KEkpP0k6YXdhaXQgZShTdHJpbmcoSSkpLHQpfSxldD0oQSx0LGUsSSxyKT0+e2xldCBvPXhJKEEsdCxyKSxnPTAsQyxRPWE9PntDfHwoQz0hMCxJJiZJKGEpKX07cmV0dXJuIG5ldyBSZWFkYWJsZVN0cmVhbSh7YXN5bmMgcHVsbChhKXt0cnl7bGV0e2RvbmU6bix2YWx1ZTpzfT1hd2FpdCBvLm5leHQoKTtpZihuKXtRKCksYS5jbG9zZSgpO3JldHVybn1sZXQgZj1zLmJ5dGVMZW5ndGg7aWYoZSl7bGV0IEI9Zys9ZjtlKEIpfWEuZW5xdWV1ZShuZXcgVWludDhBcnJheShzKSl9Y2F0Y2gobil7dGhyb3cgUShuKSxufX0sY2FuY2VsKGEpe3JldHVybiBRKGEpLG8ucmV0dXJuKCl9fSx7aGlnaFdhdGVyTWFyazoyfSl9O3ZhciBSQT10eXBlb2YgZmV0Y2g9PSJmdW5jdGlvbiImJnR5cGVvZiBSZXF1ZXN0PT0iZnVuY3Rpb24iJiZ0eXBlb2YgUmVzcG9uc2U9PSJmdW5jdGlvbiIsQWU9UkEmJnR5cGVvZiBSZWFkYWJsZVN0cmVhbT09ImZ1bmN0aW9uIixJdD1SQSYmKHR5cGVvZiBUZXh0RW5jb2Rlcj09ImZ1bmN0aW9uIj8oQT0+dD0+QS5lbmNvZGUodCkpKG5ldyBUZXh0RW5jb2Rlcik6YXN5bmMgQT0+bmV3IFVpbnQ4QXJyYXkoYXdhaXQgbmV3IFJlc3BvbnNlKEEpLmFycmF5QnVmZmVyKCkpKSx0ZT0oQSwuLi50KT0+e3RyeXtyZXR1cm4hIUEoLi4udCl9Y2F0Y2h7cmV0dXJuITF9fSxQST1BZSYmdGUoKCk9PntsZXQgQT0hMSx0PW5ldyBSZXF1ZXN0KHcub3JpZ2luLHtib2R5Om5ldyBSZWFkYWJsZVN0cmVhbSxtZXRob2Q6IlBPU1QiLGdldCBkdXBsZXgoKXtyZXR1cm4gQT0hMCwiaGFsZiJ9fSkuaGVhZGVycy5oYXMoIkNvbnRlbnQtVHlwZSIpO3JldHVybiBBJiYhdH0pLCR0PTY0KjEwMjQscnQ9QWUmJnRlKCgpPT5pLmlzUmVhZGFibGVTdHJlYW0obmV3IFJlc3BvbnNlKCIiKS5ib2R5KSksRkE9e3N0cmVhbTpydCYmKEE9PkEuYm9keSl9O1JBJiYoQT0+e1sidGV4dCIsImFycmF5QnVmZmVyIiwiYmxvYiIsImZvcm1EYXRhIiwic3RyZWFtIl0uZm9yRWFjaCh0PT57IUZBW3RdJiYoRkFbdF09aS5pc0Z1bmN0aW9uKEFbdF0pP2U9PmVbdF0oKTooZSxJKT0+e3Rocm93IG5ldyB1KGBSZXNwb25zZSB0eXBlIFwnJHt0fVwnIGlzIG5vdCBzdXBwb3J0ZWRgLHUuRVJSX05PVF9TVVBQT1JULEkpfSl9KX0pKG5ldyBSZXNwb25zZSk7dmFyIGpJPWFzeW5jIEE9PntpZihBPT1udWxsKXJldHVybiAwO2lmKGkuaXNCbG9iKEEpKXJldHVybiBBLnNpemU7aWYoaS5pc1NwZWNDb21wbGlhbnRGb3JtKEEpKXJldHVybihhd2FpdCBuZXcgUmVxdWVzdChBKS5hcnJheUJ1ZmZlcigpKS5ieXRlTGVuZ3RoO2lmKGkuaXNBcnJheUJ1ZmZlclZpZXcoQSl8fGkuaXNBcnJheUJ1ZmZlcihBKSlyZXR1cm4gQS5ieXRlTGVuZ3RoO2lmKGkuaXNVUkxTZWFyY2hQYXJhbXMoQSkmJihBPUErIiIpLGkuaXNTdHJpbmcoQSkpcmV0dXJuKGF3YWl0IEl0KEEpKS5ieXRlTGVuZ3RofSxXST1hc3luYyhBLHQpPT57bGV0IGU9aS50b0Zpbml0ZU51bWJlcihBLmdldENvbnRlbnRMZW5ndGgoKSk7cmV0dXJuIGU/P2pJKHQpfSxlZT1SQSYmKGFzeW5jIEE9PntsZXR7dXJsOnQsbWV0aG9kOmUsZGF0YTpJLHNpZ25hbDpyLGNhbmNlbFRva2VuOm8sdGltZW91dDpnLG9uRG93bmxvYWRQcm9ncmVzczpDLG9uVXBsb2FkUHJvZ3Jlc3M6USxyZXNwb25zZVR5cGU6YSxoZWFkZXJzOm4sd2l0aENyZWRlbnRpYWxzOnM9InNhbWUtb3JpZ2luIixmZXRjaE9wdGlvbnM6Zn09U0EoQSk7YT1hPyhhKyIiKS50b0xvd2VyQ2FzZSgpOiJ0ZXh0IjtsZXRbQixFXT1yfHxvfHxnP3Z0KFtyLG9dLGcpOltdLGwsYyxwPSgpPT57IWwmJnNldFRpbWVvdXQoKCk9PntCJiZCLnVuc3Vic2NyaWJlKCl9KSxsPSEwfSxTO3RyeXtpZihRJiZQSSYmZSE9PSJnZXQiJiZlIT09ImhlYWQiJiYoUz1hd2FpdCBXSShuLEkpKSE9PTApe2xldCBMPW5ldyBSZXF1ZXN0KHQse21ldGhvZDoiUE9TVCIsYm9keTpJLGR1cGxleDoiaGFsZiJ9KSxKO2lmKGkuaXNGb3JtRGF0YShJKSYmKEo9TC5oZWFkZXJzLmdldCgiY29udGVudC10eXBlIikpJiZuLnNldENvbnRlbnRUeXBlKEopLEwuYm9keSl7bGV0W0hBLENBXT12QShTLF8oJEEoUSkpKTtJPWV0KEwuYm9keSwkdCxIQSxDQSxJdCl9fWkuaXNTdHJpbmcocyl8fChzPXM/ImluY2x1ZGUiOiJvbWl0IiksYz1uZXcgUmVxdWVzdCh0LHsuLi5mLHNpZ25hbDpCLG1ldGhvZDplLnRvVXBwZXJDYXNlKCksaGVhZGVyczpuLm5vcm1hbGl6ZSgpLnRvSlNPTigpLGJvZHk6SSxkdXBsZXg6ImhhbGYiLGNyZWRlbnRpYWxzOnN9KTtsZXQgRD1hd2FpdCBmZXRjaChjKSxVPXJ0JiYoYT09PSJzdHJlYW0ifHxhPT09InJlc3BvbnNlIik7aWYocnQmJihDfHxVKSl7bGV0IEw9e307WyJzdGF0dXMiLCJzdGF0dXNUZXh0IiwiaGVhZGVycyJdLmZvckVhY2goRXQ9PntMW0V0XT1EW0V0XX0pO2xldCBKPWkudG9GaW5pdGVOdW1iZXIoRC5oZWFkZXJzLmdldCgiY29udGVudC1sZW5ndGgiKSksW0hBLENBXT1DJiZ2QShKLF8oJEEoQyksITApKXx8W107RD1uZXcgUmVzcG9uc2UoZXQoRC5ib2R5LCR0LEhBLCgpPT57Q0EmJkNBKCksVSYmcCgpfSxJdCksTCl9YT1hfHwidGV4dCI7bGV0IEs9YXdhaXQgRkFbaS5maW5kS2V5KEZBLGEpfHwidGV4dCJdKEQsQSk7cmV0dXJuIVUmJnAoKSxFJiZFKCksYXdhaXQgbmV3IFByb21pc2UoKEwsSik9PntvQShMLEose2RhdGE6SyxoZWFkZXJzOm0uZnJvbShELmhlYWRlcnMpLHN0YXR1czpELnN0YXR1cyxzdGF0dXNUZXh0OkQuc3RhdHVzVGV4dCxjb25maWc6QSxyZXF1ZXN0OmN9KX0pfWNhdGNoKEQpe3Rocm93IHAoKSxEJiZELm5hbWU9PT0iVHlwZUVycm9yIiYmL2ZldGNoL2kudGVzdChELm1lc3NhZ2UpP09iamVjdC5hc3NpZ24obmV3IHUoIk5ldHdvcmsgRXJyb3IiLHUuRVJSX05FVFdPUkssQSxjKSx7Y2F1c2U6RC5jYXVzZXx8RH0pOnUuZnJvbShELEQmJkQuY29kZSxBLGMpfX0pO3ZhciBvdD17aHR0cDpkQSx4aHI6enQsZmV0Y2g6ZWV9O2kuZm9yRWFjaChvdCwoQSx0KT0+e2lmKEEpe3RyeXtPYmplY3QuZGVmaW5lUHJvcGVydHkoQSwibmFtZSIse3ZhbHVlOnR9KX1jYXRjaHt9T2JqZWN0LmRlZmluZVByb3BlcnR5KEEsImFkYXB0ZXJOYW1lIix7dmFsdWU6dH0pfX0pO3ZhciBJZT1BPT5gLSAke0F9YCxaST1BPT5pLmlzRnVuY3Rpb24oQSl8fEE9PT1udWxsfHxBPT09ITEsTkE9e2dldEFkYXB0ZXI6QT0+e0E9aS5pc0FycmF5KEEpP0E6W0FdO2xldHtsZW5ndGg6dH09QSxlLEkscj17fTtmb3IobGV0IG89MDtvPHQ7bysrKXtlPUFbb107bGV0IGc7aWYoST1lLCFaSShlKSYmKEk9b3RbKGc9U3RyaW5nKGUpKS50b0xvd2VyQ2FzZSgpXSxJPT09dm9pZCAwKSl0aHJvdyBuZXcgdShgVW5rbm93biBhZGFwdGVyIFwnJHtnfVwnYCk7aWYoSSlicmVhaztyW2d8fCIlMjMiK29dPUl9aWYoIUkpe2xldCBvPU9iamVjdC5lbnRyaWVzKHIpLm1hcCgoW0MsUV0pPT5gYWRhcHRlciAke0N9IGArKFE9PT0hMT8iaXMgbm90IHN1cHBvcnRlZCBieSB0aGUgZW52aXJvbm1lbnQiOiJpcyBub3QgYXZhaWxhYmxlIGluIHRoZSBidWlsZCIpKSxnPXQ/by5sZW5ndGg+MT9gc2luY2UgOiUwQWArby5tYXAoSWUpLmpvaW4oYCUwQWApOiIgIitJZShvWzBdKToiYXMgbm8gYWRhcHRlciBzcGVjaWZpZWQiO3Rocm93IG5ldyB1KCJUaGVyZSBpcyBubyBzdWl0YWJsZSBhZGFwdGVyIHRvIGRpc3BhdGNoIHRoZSByZXF1ZXN0ICIrZywiRVJSX05PVF9TVVBQT1JUIil9cmV0dXJuIEl9LGFkYXB0ZXJzOm90fTtmdW5jdGlvbiBndChBKXtpZihBLmNhbmNlbFRva2VuJiZBLmNhbmNlbFRva2VuLnRocm93SWZSZXF1ZXN0ZWQoKSxBLnNpZ25hbCYmQS5zaWduYWwuYWJvcnRlZCl0aHJvdyBuZXcgYihudWxsLEEpfWZ1bmN0aW9uIFVBKEEpe3JldHVybiBndChBKSxBLmhlYWRlcnM9bS5mcm9tKEEuaGVhZGVycyksQS5kYXRhPUlBLmNhbGwoQSxBLnRyYW5zZm9ybVJlcXVlc3QpLFsicG9zdCIsInB1dCIsInBhdGNoIl0uaW5kZXhPZihBLm1ldGhvZCkhPT0tMSYmQS5oZWFkZXJzLnNldENvbnRlbnRUeXBlKCJhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQiLCExKSxOQS5nZXRBZGFwdGVyKEEuYWRhcHRlcnx8Wi5hZGFwdGVyKShBKS50aGVuKGZ1bmN0aW9uKEkpe3JldHVybiBndChBKSxJLmRhdGE9SUEuY2FsbChBLEEudHJhbnNmb3JtUmVzcG9uc2UsSSksSS5oZWFkZXJzPW0uZnJvbShJLmhlYWRlcnMpLEl9LGZ1bmN0aW9uKEkpe3JldHVybiByQShJKXx8KGd0KEEpLEkmJkkucmVzcG9uc2UmJihJLnJlc3BvbnNlLmRhdGE9SUEuY2FsbChBLEEudHJhbnNmb3JtUmVzcG9uc2UsSS5yZXNwb25zZSksSS5yZXNwb25zZS5oZWFkZXJzPW0uZnJvbShJLnJlc3BvbnNlLmhlYWRlcnMpKSksUHJvbWlzZS5yZWplY3QoSSl9KX12YXIgR0E9IjEuNy40Ijt2YXIgaXQ9e307WyJvYmplY3QiLCJib29sZWFuIiwibnVtYmVyIiwiZnVuY3Rpb24iLCJzdHJpbmciLCJzeW1ib2wiXS5mb3JFYWNoKChBLHQpPT57aXRbQV09ZnVuY3Rpb24oSSl7cmV0dXJuIHR5cGVvZiBJPT09QXx8ImEiKyh0PDE/Im4gIjoiICIpK0F9fSk7dmFyIHJlPXt9O2l0LnRyYW5zaXRpb25hbD1mdW5jdGlvbih0LGUsSSl7ZnVuY3Rpb24gcihvLGcpe3JldHVybiJbQXhpb3MgdiIrR0ErIl0gVHJhbnNpdGlvbmFsIG9wdGlvbiBcJyIrbysiXCciK2crKEk/Ii4gIitJOiIiKX1yZXR1cm4obyxnLEMpPT57aWYodD09PSExKXRocm93IG5ldyB1KHIoZywiIGhhcyBiZWVuIHJlbW92ZWQiKyhlPyIgaW4gIitlOiIiKSksdS5FUlJfREVQUkVDQVRFRCk7cmV0dXJuIGUmJiFyZVtnXSYmKHJlW2ddPSEwLGNvbnNvbGUud2FybihyKGcsIiBoYXMgYmVlbiBkZXByZWNhdGVkIHNpbmNlIHYiK2UrIiBhbmQgd2lsbCBiZSByZW1vdmVkIGluIHRoZSBuZWFyIGZ1dHVyZSIpKSksdD90KG8sZyxDKTohMH19O2Z1bmN0aW9uIFZJKEEsdCxlKXtpZih0eXBlb2YgQSE9Im9iamVjdCIpdGhyb3cgbmV3IHUoIm9wdGlvbnMgbXVzdCBiZSBhbiBvYmplY3QiLHUuRVJSX0JBRF9PUFRJT05fVkFMVUUpO2xldCBJPU9iamVjdC5rZXlzKEEpLHI9SS5sZW5ndGg7Zm9yKDtyLS0gPjA7KXtsZXQgbz1JW3JdLGc9dFtvXTtpZihnKXtsZXQgQz1BW29dLFE9Qz09PXZvaWQgMHx8ZyhDLG8sQSk7aWYoUSE9PSEwKXRocm93IG5ldyB1KCJvcHRpb24gIitvKyIgbXVzdCBiZSAiK1EsdS5FUlJfQkFEX09QVElPTl9WQUxVRSk7Y29udGludWV9aWYoZSE9PSEwKXRocm93IG5ldyB1KCJVbmtub3duIG9wdGlvbiAiK28sdS5FUlJfQkFEX09QVElPTil9fXZhciBrQT17YXNzZXJ0T3B0aW9uczpWSSx2YWxpZGF0b3JzOml0fTt2YXIgTT1rQS52YWxpZGF0b3JzLFg9Y2xhc3N7Y29uc3RydWN0b3IodCl7dGhpcy5kZWZhdWx0cz10LHRoaXMuaW50ZXJjZXB0b3JzPXtyZXF1ZXN0Om5ldyBqQSxyZXNwb25zZTpuZXcgakF9fWFzeW5jIHJlcXVlc3QodCxlKXt0cnl7cmV0dXJuIGF3YWl0IHRoaXMuX3JlcXVlc3QodCxlKX1jYXRjaChJKXtpZihJIGluc3RhbmNlb2YgRXJyb3Ipe2xldCByO0Vycm9yLmNhcHR1cmVTdGFja1RyYWNlP0Vycm9yLmNhcHR1cmVTdGFja1RyYWNlKHI9e30pOnI9bmV3IEVycm9yO2xldCBvPXIuc3RhY2s/ci5zdGFjay5yZXBsYWNlKC9eLitcXG4vLCIiKToiIjt0cnl7SS5zdGFjaz9vJiYhU3RyaW5nKEkuc3RhY2spLmVuZHNXaXRoKG8ucmVwbGFjZSgvXi4rXFxuLitcXG4vLCIiKSkmJihJLnN0YWNrKz1gJTBBYCtvKTpJLnN0YWNrPW99Y2F0Y2h7fX10aHJvdyBJfX1fcmVxdWVzdCh0LGUpe3R5cGVvZiB0PT0ic3RyaW5nIj8oZT1lfHx7fSxlLnVybD10KTplPXR8fHt9LGU9ayh0aGlzLmRlZmF1bHRzLGUpO2xldHt0cmFuc2l0aW9uYWw6SSxwYXJhbXNTZXJpYWxpemVyOnIsaGVhZGVyczpvfT1lO0khPT12b2lkIDAmJmtBLmFzc2VydE9wdGlvbnMoSSx7c2lsZW50SlNPTlBhcnNpbmc6TS50cmFuc2l0aW9uYWwoTS5ib29sZWFuKSxmb3JjZWRKU09OUGFyc2luZzpNLnRyYW5zaXRpb25hbChNLmJvb2xlYW4pLGNsYXJpZnlUaW1lb3V0RXJyb3I6TS50cmFuc2l0aW9uYWwoTS5ib29sZWFuKX0sITEpLHIhPW51bGwmJihpLmlzRnVuY3Rpb24ocik/ZS5wYXJhbXNTZXJpYWxpemVyPXtzZXJpYWxpemU6cn06a0EuYXNzZXJ0T3B0aW9ucyhyLHtlbmNvZGU6TS5mdW5jdGlvbixzZXJpYWxpemU6TS5mdW5jdGlvbn0sITApKSxlLm1ldGhvZD0oZS5tZXRob2R8fHRoaXMuZGVmYXVsdHMubWV0aG9kfHwiZ2V0IikudG9Mb3dlckNhc2UoKTtsZXQgZz1vJiZpLm1lcmdlKG8uY29tbW9uLG9bZS5tZXRob2RdKTtvJiZpLmZvckVhY2goWyJkZWxldGUiLCJnZXQiLCJoZWFkIiwicG9zdCIsInB1dCIsInBhdGNoIiwiY29tbW9uIl0sRT0+e2RlbGV0ZSBvW0VdfSksZS5oZWFkZXJzPW0uY29uY2F0KGcsbyk7bGV0IEM9W10sUT0hMDt0aGlzLmludGVyY2VwdG9ycy5yZXF1ZXN0LmZvckVhY2goZnVuY3Rpb24obCl7dHlwZW9mIGwucnVuV2hlbj09ImZ1bmN0aW9uIiYmbC5ydW5XaGVuKGUpPT09ITF8fChRPVEmJmwuc3luY2hyb25vdXMsQy51bnNoaWZ0KGwuZnVsZmlsbGVkLGwucmVqZWN0ZWQpKX0pO2xldCBhPVtdO3RoaXMuaW50ZXJjZXB0b3JzLnJlc3BvbnNlLmZvckVhY2goZnVuY3Rpb24obCl7YS5wdXNoKGwuZnVsZmlsbGVkLGwucmVqZWN0ZWQpfSk7bGV0IG4scz0wLGY7aWYoIVEpe2xldCBFPVtVQS5iaW5kKHRoaXMpLHZvaWQgMF07Zm9yKEUudW5zaGlmdC5hcHBseShFLEMpLEUucHVzaC5hcHBseShFLGEpLGY9RS5sZW5ndGgsbj1Qcm9taXNlLnJlc29sdmUoZSk7czxmOyluPW4udGhlbihFW3MrK10sRVtzKytdKTtyZXR1cm4gbn1mPUMubGVuZ3RoO2xldCBCPWU7Zm9yKHM9MDtzPGY7KXtsZXQgRT1DW3MrK10sbD1DW3MrK107dHJ5e0I9RShCKX1jYXRjaChjKXtsLmNhbGwodGhpcyxjKTticmVha319dHJ5e249VUEuY2FsbCh0aGlzLEIpfWNhdGNoKEUpe3JldHVybiBQcm9taXNlLnJlamVjdChFKX1mb3Iocz0wLGY9YS5sZW5ndGg7czxmOyluPW4udGhlbihhW3MrK10sYVtzKytdKTtyZXR1cm4gbn1nZXRVcmkodCl7dD1rKHRoaXMuZGVmYXVsdHMsdCk7bGV0IGU9Z0EodC5iYXNlVVJMLHQudXJsKTtyZXR1cm4gdEEoZSx0LnBhcmFtcyx0LnBhcmFtc1NlcmlhbGl6ZXIpfX07aS5mb3JFYWNoKFsiZGVsZXRlIiwiZ2V0IiwiaGVhZCIsIm9wdGlvbnMiXSxmdW5jdGlvbih0KXtYLnByb3RvdHlwZVt0XT1mdW5jdGlvbihlLEkpe3JldHVybiB0aGlzLnJlcXVlc3QoayhJfHx7fSx7bWV0aG9kOnQsdXJsOmUsZGF0YTooSXx8e30pLmRhdGF9KSl9fSk7aS5mb3JFYWNoKFsicG9zdCIsInB1dCIsInBhdGNoIl0sZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShJKXtyZXR1cm4gZnVuY3Rpb24obyxnLEMpe3JldHVybiB0aGlzLnJlcXVlc3QoayhDfHx7fSx7bWV0aG9kOnQsaGVhZGVyczpJP3siQ29udGVudC1UeXBlIjoibXVsdGlwYXJ0L2Zvcm0tZGF0YSJ9Ont9LHVybDpvLGRhdGE6Z30pKX19WC5wcm90b3R5cGVbdF09ZSgpLFgucHJvdG90eXBlW3QrIkZvcm0iXT1lKCEwKX0pO3ZhciBpQT1YO3ZhciBudD1jbGFzcyBBe2NvbnN0cnVjdG9yKHQpe2lmKHR5cGVvZiB0IT0iZnVuY3Rpb24iKXRocm93IG5ldyBUeXBlRXJyb3IoImV4ZWN1dG9yIG11c3QgYmUgYSBmdW5jdGlvbi4iKTtsZXQgZTt0aGlzLnByb21pc2U9bmV3IFByb21pc2UoZnVuY3Rpb24obyl7ZT1vfSk7bGV0IEk9dGhpczt0aGlzLnByb21pc2UudGhlbihyPT57aWYoIUkuX2xpc3RlbmVycylyZXR1cm47bGV0IG89SS5fbGlzdGVuZXJzLmxlbmd0aDtmb3IoO28tLSA+MDspSS5fbGlzdGVuZXJzW29dKHIpO0kuX2xpc3RlbmVycz1udWxsfSksdGhpcy5wcm9taXNlLnRoZW49cj0+e2xldCBvLGc9bmV3IFByb21pc2UoQz0+e0kuc3Vic2NyaWJlKEMpLG89Q30pLnRoZW4ocik7cmV0dXJuIGcuY2FuY2VsPWZ1bmN0aW9uKCl7SS51bnN1YnNjcmliZShvKX0sZ30sdChmdW5jdGlvbihvLGcsQyl7SS5yZWFzb258fChJLnJlYXNvbj1uZXcgYihvLGcsQyksZShJLnJlYXNvbikpfSl9dGhyb3dJZlJlcXVlc3RlZCgpe2lmKHRoaXMucmVhc29uKXRocm93IHRoaXMucmVhc29ufXN1YnNjcmliZSh0KXtpZih0aGlzLnJlYXNvbil7dCh0aGlzLnJlYXNvbik7cmV0dXJufXRoaXMuX2xpc3RlbmVycz90aGlzLl9saXN0ZW5lcnMucHVzaCh0KTp0aGlzLl9saXN0ZW5lcnM9W3RdfXVuc3Vic2NyaWJlKHQpe2lmKCF0aGlzLl9saXN0ZW5lcnMpcmV0dXJuO2xldCBlPXRoaXMuX2xpc3RlbmVycy5pbmRleE9mKHQpO2UhPT0tMSYmdGhpcy5fbGlzdGVuZXJzLnNwbGljZShlLDEpfXN0YXRpYyBzb3VyY2UoKXtsZXQgdDtyZXR1cm57dG9rZW46bmV3IEEoZnVuY3Rpb24ocil7dD1yfSksY2FuY2VsOnR9fX0sb2U9bnQ7ZnVuY3Rpb24gc3QoQSl7cmV0dXJuIGZ1bmN0aW9uKGUpe3JldHVybiBBLmFwcGx5KG51bGwsZSl9fWZ1bmN0aW9uIEN0KEEpe3JldHVybiBpLmlzT2JqZWN0KEEpJiZBLmlzQXhpb3NFcnJvcj09PSEwfXZhciBCdD17Q29udGludWU6MTAwLFN3aXRjaGluZ1Byb3RvY29sczoxMDEsUHJvY2Vzc2luZzoxMDIsRWFybHlIaW50czoxMDMsT2s6MjAwLENyZWF0ZWQ6MjAxLEFjY2VwdGVkOjIwMixOb25BdXRob3JpdGF0aXZlSW5mb3JtYXRpb246MjAzLE5vQ29udGVudDoyMDQsUmVzZXRDb250ZW50OjIwNSxQYXJ0aWFsQ29udGVudDoyMDYsTXVsdGlTdGF0dXM6MjA3LEFscmVhZHlSZXBvcnRlZDoyMDgsSW1Vc2VkOjIyNixNdWx0aXBsZUNob2ljZXM6MzAwLE1vdmVkUGVybWFuZW50bHk6MzAxLEZvdW5kOjMwMixTZWVPdGhlcjozMDMsTm90TW9kaWZpZWQ6MzA0LFVzZVByb3h5OjMwNSxVbnVzZWQ6MzA2LFRlbXBvcmFyeVJlZGlyZWN0OjMwNyxQZXJtYW5lbnRSZWRpcmVjdDozMDgsQmFkUmVxdWVzdDo0MDAsVW5hdXRob3JpemVkOjQwMSxQYXltZW50UmVxdWlyZWQ6NDAyLEZvcmJpZGRlbjo0MDMsTm90Rm91bmQ6NDA0LE1ldGhvZE5vdEFsbG93ZWQ6NDA1LE5vdEFjY2VwdGFibGU6NDA2LFByb3h5QXV0aGVudGljYXRpb25SZXF1aXJlZDo0MDcsUmVxdWVzdFRpbWVvdXQ6NDA4LENvbmZsaWN0OjQwOSxHb25lOjQxMCxMZW5ndGhSZXF1aXJlZDo0MTEsUHJlY29uZGl0aW9uRmFpbGVkOjQxMixQYXlsb2FkVG9vTGFyZ2U6NDEzLFVyaVRvb0xvbmc6NDE0LFVuc3VwcG9ydGVkTWVkaWFUeXBlOjQxNSxSYW5nZU5vdFNhdGlzZmlhYmxlOjQxNixFeHBlY3RhdGlvbkZhaWxlZDo0MTcsSW1BVGVhcG90OjQxOCxNaXNkaXJlY3RlZFJlcXVlc3Q6NDIxLFVucHJvY2Vzc2FibGVFbnRpdHk6NDIyLExvY2tlZDo0MjMsRmFpbGVkRGVwZW5kZW5jeTo0MjQsVG9vRWFybHk6NDI1LFVwZ3JhZGVSZXF1aXJlZDo0MjYsUHJlY29uZGl0aW9uUmVxdWlyZWQ6NDI4LFRvb01hbnlSZXF1ZXN0czo0MjksUmVxdWVzdEhlYWRlckZpZWxkc1Rvb0xhcmdlOjQzMSxVbmF2YWlsYWJsZUZvckxlZ2FsUmVhc29uczo0NTEsSW50ZXJuYWxTZXJ2ZXJFcnJvcjo1MDAsTm90SW1wbGVtZW50ZWQ6NTAxLEJhZEdhdGV3YXk6NTAyLFNlcnZpY2VVbmF2YWlsYWJsZTo1MDMsR2F0ZXdheVRpbWVvdXQ6NTA0LEh0dHBWZXJzaW9uTm90U3VwcG9ydGVkOjUwNSxWYXJpYW50QWxzb05lZ290aWF0ZXM6NTA2LEluc3VmZmljaWVudFN0b3JhZ2U6NTA3LExvb3BEZXRlY3RlZDo1MDgsTm90RXh0ZW5kZWQ6NTEwLE5ldHdvcmtBdXRoZW50aWNhdGlvblJlcXVpcmVkOjUxMX07T2JqZWN0LmVudHJpZXMoQnQpLmZvckVhY2goKFtBLHRdKT0+e0J0W3RdPUF9KTt2YXIgZ2U9QnQ7ZnVuY3Rpb24gaWUoQSl7bGV0IHQ9bmV3IGlBKEEpLGU9dihpQS5wcm90b3R5cGUucmVxdWVzdCx0KTtyZXR1cm4gaS5leHRlbmQoZSxpQS5wcm90b3R5cGUsdCx7YWxsT3duS2V5czohMH0pLGkuZXh0ZW5kKGUsdCxudWxsLHthbGxPd25LZXlzOiEwfSksZS5jcmVhdGU9ZnVuY3Rpb24ocil7cmV0dXJuIGllKGsoQSxyKSl9LGV9dmFyIGQ9aWUoWik7ZC5BeGlvcz1pQTtkLkNhbmNlbGVkRXJyb3I9YjtkLkNhbmNlbFRva2VuPW9lO2QuaXNDYW5jZWw9ckE7ZC5WRVJTSU9OPUdBO2QudG9Gb3JtRGF0YT1xO2QuQXhpb3NFcnJvcj11O2QuQ2FuY2VsPWQuQ2FuY2VsZWRFcnJvcjtkLmFsbD1mdW5jdGlvbih0KXtyZXR1cm4gUHJvbWlzZS5hbGwodCl9O2Quc3ByZWFkPXN0O2QuaXNBeGlvc0Vycm9yPUN0O2QubWVyZ2VDb25maWc9aztkLkF4aW9zSGVhZGVycz1tO2QuZm9ybVRvSlNPTj1BPT53QShpLmlzSFRNTEZvcm0oQSk/bmV3IEZvcm1EYXRhKEEpOkEpO2QuZ2V0QWRhcHRlcj1OQS5nZXRBZGFwdGVyO2QuSHR0cFN0YXR1c0NvZGU9Z2U7ZC5kZWZhdWx0PWQ7dmFyIExBPWQ7dmFye0F4aW9zOkVpLEF4aW9zRXJyb3I6Y2ksQ2FuY2VsZWRFcnJvcjpmaSxpc0NhbmNlbDpsaSxDYW5jZWxUb2tlbjp1aSxWRVJTSU9OOkRpLGFsbDpoaSxDYW5jZWw6ZGksaXNBeGlvc0Vycm9yOnlpLHNwcmVhZDptaSx0b0Zvcm1EYXRhOndpLEF4aW9zSGVhZGVyczpwaSxIdHRwU3RhdHVzQ29kZTpTaSxmb3JtVG9KU09OOkZpLGdldEFkYXB0ZXI6UmksbWVyZ2VDb25maWc6Tml9PUxBO3ZhciBuQSxZLFF0LGF0PXtlbnY6e2Vtc2NyaXB0ZW5fbm90aWZ5X21lbW9yeV9ncm93dGg6ZnVuY3Rpb24oQSl7UXQ9bmV3IFVpbnQ4QXJyYXkoWS5leHBvcnRzLm1lbW9yeS5idWZmZXIpfX19LEpBPWNsYXNze2luaXQoKXtyZXR1cm4gbkF8fCh0eXBlb2YgZmV0Y2g8InUiP25BPWZldGNoKCJkYXRhOmFwcGxpY2F0aW9uL3dhc207YmFzZTY0LCIrbmUpLnRoZW4odD0+dC5hcnJheUJ1ZmZlcigpKS50aGVuKHQ9PldlYkFzc2VtYmx5Lmluc3RhbnRpYXRlKHQsYXQpKS50aGVuKHRoaXMuX2luaXQpOm5BPVdlYkFzc2VtYmx5Lmluc3RhbnRpYXRlKEJ1ZmZlci5mcm9tKG5lLCJiYXNlNjQiKSxhdCkudGhlbih0aGlzLl9pbml0KSxuQSl9X2luaXQodCl7WT10Lmluc3RhbmNlLGF0LmVudi5lbXNjcmlwdGVuX25vdGlmeV9tZW1vcnlfZ3Jvd3RoKDApfWRlY29kZSh0LGU9MCl7aWYoIVkpdGhyb3cgbmV3IEVycm9yKCJaU1RERGVjb2RlcjogQXdhaXQgLmluaXQoKSBiZWZvcmUgZGVjb2RpbmcuIik7bGV0IEk9dC5ieXRlTGVuZ3RoLHI9WS5leHBvcnRzLm1hbGxvYyhJKTtRdC5zZXQodCxyKSxlPWV8fE51bWJlcihZLmV4cG9ydHMuWlNURF9maW5kRGVjb21wcmVzc2VkU2l6ZShyLEkpKTtsZXQgbz1ZLmV4cG9ydHMubWFsbG9jKGUpLGc9WS5leHBvcnRzLlpTVERfZGVjb21wcmVzcyhvLGUscixJKSxDPVF0LnNsaWNlKG8sbytnKTtyZXR1cm4gWS5leHBvcnRzLmZyZWUociksWS5leHBvcnRzLmZyZWUobyksQ319LG5lPSJBR0Z6YlFFQUFBQUJiZzVnQTM5L2Z3Ri9ZQUYvQVg5Z0FuOS9BR0FCZndCZ0JYOS9mMzkvQVg5Z0EzOS9md0JnQkg5L2YzOEJmMkFBQVg5Z0FuOS9BWDlnQjM5L2YzOS9mMzhCZjJBQ2YzOEJmbUFJZjM5L2YzOS9mMzhCZjJBRmYzOS9mMzhBWUE1L2YzOS9mMzkvZjM5L2YzOS9md0YvQWljQkEyVnVkaDlsYlhOamNtbHdkR1Z1WDI1dmRHbG1lVjl0WlcxdmNubGZaM0p2ZDNSb0FBTURJeUlIQUFBQkFRTUhBd0VBQ1FRQUJRRUlDQUVGQmdRRUJBTUdBQUFLQUFVTERBMEdCQVVCY0FFQkFRVUhBUUdBQW9DQUFnWUlBWDhCUVlDakJBc0hyZ0VMQm0xbGJXOXllUUlBQm0xaGJHeHZZd0FGQkdaeVpXVUFCZ3hhVTFSRVgybHpSWEp5YjNJQUVobGFVMVJFWDJacGJtUkVaV052YlhCeVpYTnpaV1JUYVhwbEFCd1BXbE5VUkY5a1pXTnZiWEJ5WlhOekFDSVpYMTlwYm1ScGNtVmpkRjltZFc1amRHbHZibDkwWVdKc1pRRUFFRjlmWlhKeWJtOWZiRzlqWVhScGIyNEFBUWx6ZEdGamExTmhkbVVBQnd4emRHRmphMUpsYzNSdmNtVUFDQXB6ZEdGamEwRnNiRzlqQUFrS2kvSUJJZ1VBUVlRZkN6TUJBWDhnQWdSQUlBQWhBd05BSUFNZ0FTMEFBRG9BQUNBRFFRRnFJUU1nQVVFQmFpRUJJQUpCQVdzaUFnMEFDd3NnQUFzcEFRRi9JQUlFUUNBQUlRTURRQ0FESUFFNkFBQWdBMEVCYWlFRElBSkJBV3NpQWcwQUN3c2dBQXRzQVFKL1FZQWZLQUlBSWdFZ0FFRUhha0Y0Y1NJQ2FpRUFBa0FnQWtFQUlBQWdBVTBiRFFBZ0FEOEFRUkIwU3dSQUlBQS9BRUVRZEd0Qi8vOERha0VRZGtBQVFYOUdCSDlCQUFWQkFCQUFRUUVMUlEwQkMwR0FIeUFBTmdJQUlBRVBDMEdFSDBFd05nSUFRWDhMdVNjQkMzOGpBRUVRYXlJS0pBQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFJQUJCOUFGTkJFQkJpQjhvQWdBaUJrRVFJQUJCQzJwQmVIRWdBRUVMU1JzaUJVRURkaUlBZGlJQlFRTnhCRUFDUUNBQlFYOXpRUUZ4SUFCcUlnSkJBM1FpQVVHd0gyb2lBQ0FCUWJnZmFpZ0NBQ0lCS0FJSUlnUkdCRUJCaUI4Z0JrRitJQUozY1RZQ0FBd0JDeUFFSUFBMkFnd2dBQ0FFTmdJSUN5QUJRUWhxSVFBZ0FTQUNRUU4wSWdKQkEzSTJBZ1FnQVNBQ2FpSUJJQUVvQWdSQkFYSTJBZ1FNRHdzZ0JVR1FIeWdDQUNJSFRRMEJJQUVFUUFKQVFRSWdBSFFpQWtFQUlBSnJjaUFCSUFCMGNXZ2lBVUVEZENJQVFiQWZhaUlDSUFCQnVCOXFLQUlBSWdBb0FnZ2lCRVlFUUVHSUh5QUdRWDRnQVhkeElnWTJBZ0FNQVFzZ0JDQUNOZ0lNSUFJZ0JEWUNDQXNnQUNBRlFRTnlOZ0lFSUFBZ0JXb2lDQ0FCUVFOMElnRWdCV3NpQkVFQmNqWUNCQ0FBSUFGcUlBUTJBZ0FnQndSQUlBZEJlSEZCc0I5cUlRRkJuQjhvQWdBaEFnSi9JQVpCQVNBSFFRTjJkQ0lEY1VVRVFFR0lIeUFESUFaeU5nSUFJQUVNQVFzZ0FTZ0NDQXNoQXlBQklBSTJBZ2dnQXlBQ05nSU1JQUlnQVRZQ0RDQUNJQU0yQWdnTElBQkJDR29oQUVHY0h5QUlOZ0lBUVpBZklBUTJBZ0FNRHd0QmpCOG9BZ0FpQzBVTkFTQUxhRUVDZEVHNElXb29BZ0FpQWlnQ0JFRjRjU0FGYXlFRElBSWhBUU5BQWtBZ0FTZ0NFQ0lBUlFSQUlBRW9BaFFpQUVVTkFRc2dBQ2dDQkVGNGNTQUZheUlCSUFNZ0FTQURTU0lCR3lFRElBQWdBaUFCR3lFQ0lBQWhBUXdCQ3dzZ0FpZ0NHQ0VKSUFJZ0FpZ0NEQ0lFUndSQVFaZ2ZLQUlBR2lBQ0tBSUlJZ0FnQkRZQ0RDQUVJQUEyQWdnTURnc2dBa0VVYWlJQktBSUFJZ0JGQkVBZ0FpZ0NFQ0lBUlEwRElBSkJFR29oQVFzRFFDQUJJUWdnQUNJRVFSUnFJZ0VvQWdBaUFBMEFJQVJCRUdvaEFTQUVLQUlRSWdBTkFBc2dDRUVBTmdJQURBMExRWDhoQlNBQVFiOS9TdzBBSUFCQkMyb2lBRUY0Y1NFRlFZd2ZLQUlBSWdoRkRRQkJBQ0FGYXlFREFrQUNRQUpBQW45QkFDQUZRWUFDU1EwQUdrRWZJQVZCLy8vL0Iwc05BQm9nQlVFbUlBQkJDSFpuSWdCcmRrRUJjU0FBUVFGMGEwRSthZ3NpQjBFQ2RFRzRJV29vQWdBaUFVVUVRRUVBSVFBTUFRdEJBQ0VBSUFWQkdTQUhRUUYyYTBFQUlBZEJIMGNiZENFQ0EwQUNRQ0FCS0FJRVFYaHhJQVZySWdZZ0EwOE5BQ0FCSVFRZ0JpSUREUUJCQUNFRElBRWhBQXdEQ3lBQUlBRW9BaFFpQmlBR0lBRWdBa0VkZGtFRWNXb29BaEFpQVVZYklBQWdCaHNoQUNBQ1FRRjBJUUlnQVEwQUN3c2dBQ0FFY2tVRVFFRUFJUVJCQWlBSGRDSUFRUUFnQUd0eUlBaHhJZ0JGRFFNZ0FHaEJBblJCdUNGcUtBSUFJUUFMSUFCRkRRRUxBMEFnQUNnQ0JFRjRjU0FGYXlJQ0lBTkpJUUVnQWlBRElBRWJJUU1nQUNBRUlBRWJJUVFnQUNnQ0VDSUJCSDhnQVFVZ0FDZ0NGQXNpQUEwQUN3c2dCRVVOQUNBRFFaQWZLQUlBSUFWclR3MEFJQVFvQWhnaEJ5QUVJQVFvQWd3aUFrY0VRRUdZSHlnQ0FCb2dCQ2dDQ0NJQUlBSTJBZ3dnQWlBQU5nSUlEQXdMSUFSQkZHb2lBU2dDQUNJQVJRUkFJQVFvQWhBaUFFVU5BeUFFUVJCcUlRRUxBMEFnQVNFR0lBQWlBa0VVYWlJQktBSUFJZ0FOQUNBQ1FSQnFJUUVnQWlnQ0VDSUFEUUFMSUFaQkFEWUNBQXdMQ3lBRlFaQWZLQUlBSWdSTkJFQkJuQjhvQWdBaEFBSkFJQVFnQldzaUFVRVFUd1JBSUFBZ0JXb2lBaUFCUVFGeU5nSUVJQUFnQkdvZ0FUWUNBQ0FBSUFWQkEzSTJBZ1FNQVFzZ0FDQUVRUU55TmdJRUlBQWdCR29pQVNBQktBSUVRUUZ5TmdJRVFRQWhBa0VBSVFFTFFaQWZJQUUyQWdCQm5COGdBallDQUNBQVFRaHFJUUFNRFFzZ0JVR1VIeWdDQUNJQ1NRUkFRWlFmSUFJZ0JXc2lBVFlDQUVHZ0gwR2dIeWdDQUNJQUlBVnFJZ0kyQWdBZ0FpQUJRUUZ5TmdJRUlBQWdCVUVEY2pZQ0JDQUFRUWhxSVFBTURRdEJBQ0VBSUFWQkwyb2lBd0ovUWVBaUtBSUFCRUJCNkNJb0FnQU1BUXRCN0NKQ2Z6Y0NBRUhrSWtLQW9JQ0FnSUFFTndJQVFlQWlJQXBCREdwQmNIRkIyS3JWcWdWek5nSUFRZlFpUVFBMkFnQkJ4Q0pCQURZQ0FFR0FJQXNpQVdvaUJrRUFJQUZySWdoeElnRWdCVTBOREVIQUlpZ0NBQ0lFQkVCQnVDSW9BZ0FpQnlBQmFpSUpJQWROSUFRZ0NVbHlEUTBMQWtCQnhDSXRBQUJCQkhGRkJFQUNRQUpBQWtBQ1FFR2dIeWdDQUNJRUJFQkJ5Q0loQUFOQUlBUWdBQ2dDQUNJSFR3UkFJQWNnQUNnQ0JHb2dCRXNOQXdzZ0FDZ0NDQ0lBRFFBTEMwRUFFQVFpQWtGL1JnMERJQUVoQmtIa0lpZ0NBQ0lBUVFGcklnUWdBbkVFUUNBQklBSnJJQUlnQkdwQkFDQUFhM0ZxSVFZTElBVWdCazhOQTBIQUlpZ0NBQ0lBQkVCQnVDSW9BZ0FpQkNBR2FpSUlJQVJOSUFBZ0NFbHlEUVFMSUFZUUJDSUFJQUpIRFFFTUJRc2dCaUFDYXlBSWNTSUdFQVFpQWlBQUtBSUFJQUFvQWdScVJnMEJJQUloQUFzZ0FFRi9SZzBCSUFWQk1Hb2dCazBFUUNBQUlRSU1CQXRCNkNJb0FnQWlBaUFESUFacmFrRUFJQUpyY1NJQ0VBUkJmMFlOQVNBQ0lBWnFJUVlnQUNFQ0RBTUxJQUpCZjBjTkFndEJ4Q0pCeENJb0FnQkJCSEkyQWdBTElBRVFCQ0lDUVg5R1FRQVFCQ0lBUVg5R2NpQUFJQUpOY2cwRklBQWdBbXNpQmlBRlFTaHFUUTBGQzBHNElrRzRJaWdDQUNBR2FpSUFOZ0lBUWJ3aUtBSUFJQUJKQkVCQnZDSWdBRFlDQUFzQ1FFR2dIeWdDQUNJREJFQkJ5Q0loQUFOQUlBSWdBQ2dDQUNJQklBQW9BZ1FpQkdwR0RRSWdBQ2dDQ0NJQURRQUxEQVFMUVpnZktBSUFJZ0JCQUNBQUlBSk5HMFVFUUVHWUh5QUNOZ0lBQzBFQUlRQkJ6Q0lnQmpZQ0FFSElJaUFDTmdJQVFhZ2ZRWDgyQWdCQnJCOUI0Q0lvQWdBMkFnQkIxQ0pCQURZQ0FBTkFJQUJCQTNRaUFVRzRIMm9nQVVHd0gyb2lCRFlDQUNBQlFid2ZhaUFFTmdJQUlBQkJBV29pQUVFZ1J3MEFDMEdVSHlBR1FTaHJJZ0JCZUNBQ2EwRUhjU0lCYXlJRU5nSUFRYUFmSUFFZ0Ftb2lBVFlDQUNBQklBUkJBWEkyQWdRZ0FDQUNha0VvTmdJRVFhUWZRZkFpS0FJQU5nSUFEQVFMSUFJZ0EwMGdBU0FEUzNJTkFpQUFLQUlNUVFoeERRSWdBQ0FFSUFacU5nSUVRYUFmSUFOQmVDQURhMEVIY1NJQWFpSUJOZ0lBUVpRZlFaUWZLQUlBSUFacUlnSWdBR3NpQURZQ0FDQUJJQUJCQVhJMkFnUWdBaUFEYWtFb05nSUVRYVFmUWZBaUtBSUFOZ0lBREFNTFFRQWhCQXdLQzBFQUlRSU1DQXRCbUI4b0FnQWdBa3NFUUVHWUh5QUNOZ0lBQ3lBQ0lBWnFJUUZCeUNJaEFBSkFBa0FDUUFOQUlBRWdBQ2dDQUVjRVFDQUFLQUlJSWdBTkFRd0NDd3NnQUMwQURFRUljVVVOQVF0QnlDSWhBQU5BSUFNZ0FDZ0NBQ0lCVHdSQUlBRWdBQ2dDQkdvaUJDQURTdzBEQ3lBQUtBSUlJUUFNQUFzQUN5QUFJQUkyQWdBZ0FDQUFLQUlFSUFacU5nSUVJQUpCZUNBQ2EwRUhjV29pQnlBRlFRTnlOZ0lFSUFGQmVDQUJhMEVIY1dvaUJpQUZJQWRxSWdWcklRQWdBeUFHUmdSQVFhQWZJQVUyQWdCQmxCOUJsQjhvQWdBZ0FHb2lBRFlDQUNBRklBQkJBWEkyQWdRTUNBdEJuQjhvQWdBZ0JrWUVRRUdjSHlBRk5nSUFRWkFmUVpBZktBSUFJQUJxSWdBMkFnQWdCU0FBUVFGeU5nSUVJQUFnQldvZ0FEWUNBQXdJQ3lBR0tBSUVJZ05CQTNGQkFVY05CaUFEUVhoeElRa2dBMEgvQVUwRVFDQUdLQUlNSWdFZ0JpZ0NDQ0lDUmdSQVFZZ2ZRWWdmS0FJQVFYNGdBMEVEZG5keE5nSUFEQWNMSUFJZ0FUWUNEQ0FCSUFJMkFnZ01CZ3NnQmlnQ0dDRUlJQVlnQmlnQ0RDSUNSd1JBSUFZb0FnZ2lBU0FDTmdJTUlBSWdBVFlDQ0F3RkN5QUdRUlJxSWdFb0FnQWlBMFVFUUNBR0tBSVFJZ05GRFFRZ0JrRVFhaUVCQ3dOQUlBRWhCQ0FESWdKQkZHb2lBU2dDQUNJRERRQWdBa0VRYWlFQklBSW9BaEFpQXcwQUN5QUVRUUEyQWdBTUJBdEJsQjhnQmtFb2F5SUFRWGdnQW10QkIzRWlBV3NpQ0RZQ0FFR2dIeUFCSUFKcUlnRTJBZ0FnQVNBSVFRRnlOZ0lFSUFBZ0FtcEJLRFlDQkVHa0gwSHdJaWdDQURZQ0FDQURJQVJCSnlBRWEwRUhjV3BCTDJzaUFDQUFJQU5CRUdwSkd5SUJRUnMyQWdRZ0FVSFFJaWtDQURjQ0VDQUJRY2dpS1FJQU53SUlRZEFpSUFGQkNHbzJBZ0JCekNJZ0JqWUNBRUhJSWlBQ05nSUFRZFFpUVFBMkFnQWdBVUVZYWlFQUEwQWdBRUVITmdJRUlBQkJDR29nQUVFRWFpRUFJQVJKRFFBTElBRWdBMFlOQUNBQklBRW9BZ1JCZm5FMkFnUWdBeUFCSUFOcklnSkJBWEkyQWdRZ0FTQUNOZ0lBSUFKQi93Rk5CRUFnQWtGNGNVR3dIMm9oQUFKL1FZZ2ZLQUlBSWdGQkFTQUNRUU4yZENJQ2NVVUVRRUdJSHlBQklBSnlOZ0lBSUFBTUFRc2dBQ2dDQ0FzaEFTQUFJQU0yQWdnZ0FTQUROZ0lNSUFNZ0FEWUNEQ0FESUFFMkFnZ01BUXRCSHlFQUlBSkIvLy8vQjAwRVFDQUNRU1lnQWtFSWRtY2lBR3QyUVFGeElBQkJBWFJyUVQ1cUlRQUxJQU1nQURZQ0hDQURRZ0EzQWhBZ0FFRUNkRUc0SVdvaEFRSkFBa0JCakI4b0FnQWlCRUVCSUFCMElnWnhSUVJBUVl3ZklBUWdCbkkyQWdBZ0FTQUROZ0lBREFFTElBSkJHU0FBUVFGMmEwRUFJQUJCSDBjYmRDRUFJQUVvQWdBaEJBTkFJQVFpQVNnQ0JFRjRjU0FDUmcwQ0lBQkJIWFloQkNBQVFRRjBJUUFnQVNBRVFRUnhhaUlHS0FJUUlnUU5BQXNnQmlBRE5nSVFDeUFESUFFMkFoZ2dBeUFETmdJTUlBTWdBellDQ0F3QkN5QUJLQUlJSWdBZ0F6WUNEQ0FCSUFNMkFnZ2dBMEVBTmdJWUlBTWdBVFlDRENBRElBQTJBZ2dMUVpRZktBSUFJZ0FnQlUwTkFFR1VIeUFBSUFWcklnRTJBZ0JCb0I5Qm9COG9BZ0FpQUNBRmFpSUNOZ0lBSUFJZ0FVRUJjallDQkNBQUlBVkJBM0kyQWdRZ0FFRUlhaUVBREFnTFFZUWZRVEEyQWdCQkFDRUFEQWNMUVFBaEFnc2dDRVVOQUFKQUlBWW9BaHdpQVVFQ2RFRzRJV29pQkNnQ0FDQUdSZ1JBSUFRZ0FqWUNBQ0FDRFFGQmpCOUJqQjhvQWdCQmZpQUJkM0UyQWdBTUFnc2dDRUVRUVJRZ0NDZ0NFQ0FHUmh0cUlBSTJBZ0FnQWtVTkFRc2dBaUFJTmdJWUlBWW9BaEFpQVFSQUlBSWdBVFlDRUNBQklBSTJBaGdMSUFZb0FoUWlBVVVOQUNBQ0lBRTJBaFFnQVNBQ05nSVlDeUFBSUFscUlRQWdCaUFKYWlJR0tBSUVJUU1MSUFZZ0EwRitjVFlDQkNBRklBQkJBWEkyQWdRZ0FDQUZhaUFBTmdJQUlBQkIvd0ZOQkVBZ0FFRjRjVUd3SDJvaEFRSi9RWWdmS0FJQUlnSkJBU0FBUVFOMmRDSUFjVVVFUUVHSUh5QUFJQUp5TmdJQUlBRU1BUXNnQVNnQ0NBc2hBQ0FCSUFVMkFnZ2dBQ0FGTmdJTUlBVWdBVFlDRENBRklBQTJBZ2dNQVF0Qkh5RURJQUJCLy8vL0IwMEVRQ0FBUVNZZ0FFRUlkbWNpQVd0MlFRRnhJQUZCQVhSclFUNXFJUU1MSUFVZ0F6WUNIQ0FGUWdBM0FoQWdBMEVDZEVHNElXb2hBUUpBQWtCQmpCOG9BZ0FpQWtFQklBTjBJZ1J4UlFSQVFZd2ZJQUlnQkhJMkFnQWdBU0FGTmdJQURBRUxJQUJCR1NBRFFRRjJhMEVBSUFOQkgwY2JkQ0VESUFFb0FnQWhBZ05BSUFJaUFTZ0NCRUY0Y1NBQVJnMENJQU5CSFhZaEFpQURRUUYwSVFNZ0FTQUNRUVJ4YWlJRUtBSVFJZ0lOQUFzZ0JDQUZOZ0lRQ3lBRklBRTJBaGdnQlNBRk5nSU1JQVVnQlRZQ0NBd0JDeUFCS0FJSUlnQWdCVFlDRENBQklBVTJBZ2dnQlVFQU5nSVlJQVVnQVRZQ0RDQUZJQUEyQWdnTElBZEJDR29oQUF3Q0N3SkFJQWRGRFFBQ1FDQUVLQUljSWdCQkFuUkJ1Q0ZxSWdFb0FnQWdCRVlFUUNBQklBSTJBZ0FnQWcwQlFZd2ZJQWhCZmlBQWQzRWlDRFlDQUF3Q0N5QUhRUkJCRkNBSEtBSVFJQVJHRzJvZ0FqWUNBQ0FDUlEwQkN5QUNJQWMyQWhnZ0JDZ0NFQ0lBQkVBZ0FpQUFOZ0lRSUFBZ0FqWUNHQXNnQkNnQ0ZDSUFSUTBBSUFJZ0FEWUNGQ0FBSUFJMkFoZ0xBa0FnQTBFUFRRUkFJQVFnQXlBRmFpSUFRUU55TmdJRUlBQWdCR29pQUNBQUtBSUVRUUZ5TmdJRURBRUxJQVFnQlVFRGNqWUNCQ0FFSUFWcUlnSWdBMEVCY2pZQ0JDQUNJQU5xSUFNMkFnQWdBMEgvQVUwRVFDQURRWGh4UWJBZmFpRUFBbjlCaUI4b0FnQWlBVUVCSUFOQkEzWjBJZ054UlFSQVFZZ2ZJQUVnQTNJMkFnQWdBQXdCQ3lBQUtBSUlDeUVCSUFBZ0FqWUNDQ0FCSUFJMkFnd2dBaUFBTmdJTUlBSWdBVFlDQ0F3QkMwRWZJUUFnQTBILy8vOEhUUVJBSUFOQkppQURRUWgyWnlJQWEzWkJBWEVnQUVFQmRHdEJQbW9oQUFzZ0FpQUFOZ0ljSUFKQ0FEY0NFQ0FBUVFKMFFiZ2hhaUVCQWtBQ1FDQUlRUUVnQUhRaUJuRkZCRUJCakI4Z0JpQUljallDQUNBQklBSTJBZ0FNQVFzZ0EwRVpJQUJCQVhaclFRQWdBRUVmUnh0MElRQWdBU2dDQUNFRkEwQWdCU0lCS0FJRVFYaHhJQU5HRFFJZ0FFRWRkaUVHSUFCQkFYUWhBQ0FCSUFaQkJIRnFJZ1lvQWhBaUJRMEFDeUFHSUFJMkFoQUxJQUlnQVRZQ0dDQUNJQUkyQWd3Z0FpQUNOZ0lJREFFTElBRW9BZ2dpQUNBQ05nSU1JQUVnQWpZQ0NDQUNRUUEyQWhnZ0FpQUJOZ0lNSUFJZ0FEWUNDQXNnQkVFSWFpRUFEQUVMQWtBZ0NVVU5BQUpBSUFJb0Fod2lBRUVDZEVHNElXb2lBU2dDQUNBQ1JnUkFJQUVnQkRZQ0FDQUVEUUZCakI4Z0MwRitJQUIzY1RZQ0FBd0NDeUFKUVJCQkZDQUpLQUlRSUFKR0cyb2dCRFlDQUNBRVJRMEJDeUFFSUFrMkFoZ2dBaWdDRUNJQUJFQWdCQ0FBTmdJUUlBQWdCRFlDR0FzZ0FpZ0NGQ0lBUlEwQUlBUWdBRFlDRkNBQUlBUTJBaGdMQWtBZ0EwRVBUUVJBSUFJZ0F5QUZhaUlBUVFOeU5nSUVJQUFnQW1vaUFDQUFLQUlFUVFGeU5nSUVEQUVMSUFJZ0JVRURjallDQkNBQ0lBVnFJZ1FnQTBFQmNqWUNCQ0FESUFScUlBTTJBZ0FnQndSQUlBZEJlSEZCc0I5cUlRQkJuQjhvQWdBaEFRSi9RUUVnQjBFRGRuUWlCU0FHY1VVRVFFR0lIeUFGSUFaeU5nSUFJQUFNQVFzZ0FDZ0NDQXNoQmlBQUlBRTJBZ2dnQmlBQk5nSU1JQUVnQURZQ0RDQUJJQVkyQWdnTFFad2ZJQVEyQWdCQmtCOGdBellDQUFzZ0FrRUlhaUVBQ3lBS1FSQnFKQUFnQUF2U0N3RUhmd0pBSUFCRkRRQWdBRUVJYXlJQ0lBQkJCR3NvQWdBaUFVRjRjU0lBYWlFRkFrQWdBVUVCY1EwQUlBRkJBM0ZGRFFFZ0FpQUNLQUlBSWdGcklnSkJtQjhvQWdCSkRRRWdBQ0FCYWlFQUFrQUNRRUdjSHlnQ0FDQUNSd1JBSUFGQi93Rk5CRUFnQVVFRGRpRUVJQUlvQWd3aUFTQUNLQUlJSWdOR0JFQkJpQjlCaUI4b0FnQkJmaUFFZDNFMkFnQU1CUXNnQXlBQk5nSU1JQUVnQXpZQ0NBd0VDeUFDS0FJWUlRWWdBaUFDS0FJTUlnRkhCRUFnQWlnQ0NDSURJQUUyQWd3Z0FTQUROZ0lJREFNTElBSkJGR29pQkNnQ0FDSURSUVJBSUFJb0FoQWlBMFVOQWlBQ1FSQnFJUVFMQTBBZ0JDRUhJQU1pQVVFVWFpSUVLQUlBSWdNTkFDQUJRUkJxSVFRZ0FTZ0NFQ0lERFFBTElBZEJBRFlDQUF3Q0N5QUZLQUlFSWdGQkEzRkJBMGNOQWtHUUh5QUFOZ0lBSUFVZ0FVRitjVFlDQkNBQ0lBQkJBWEkyQWdRZ0JTQUFOZ0lBRHd0QkFDRUJDeUFHUlEwQUFrQWdBaWdDSENJRFFRSjBRYmdoYWlJRUtBSUFJQUpHQkVBZ0JDQUJOZ0lBSUFFTkFVR01IMEdNSHlnQ0FFRitJQU4zY1RZQ0FBd0NDeUFHUVJCQkZDQUdLQUlRSUFKR0cyb2dBVFlDQUNBQlJRMEJDeUFCSUFZMkFoZ2dBaWdDRUNJREJFQWdBU0FETmdJUUlBTWdBVFlDR0FzZ0FpZ0NGQ0lEUlEwQUlBRWdBellDRkNBRElBRTJBaGdMSUFJZ0JVOE5BQ0FGS0FJRUlnRkJBWEZGRFFBQ1FBSkFBa0FDUUNBQlFRSnhSUVJBUWFBZktBSUFJQVZHQkVCQm9COGdBallDQUVHVUgwR1VIeWdDQUNBQWFpSUFOZ0lBSUFJZ0FFRUJjallDQkNBQ1Fad2ZLQUlBUncwR1FaQWZRUUEyQWdCQm5COUJBRFlDQUE4TFFad2ZLQUlBSUFWR0JFQkJuQjhnQWpZQ0FFR1FIMEdRSHlnQ0FDQUFhaUlBTmdJQUlBSWdBRUVCY2pZQ0JDQUFJQUpxSUFBMkFnQVBDeUFCUVhoeElBQnFJUUFnQVVIL0FVMEVRQ0FCUVFOMklRUWdCU2dDRENJQklBVW9BZ2dpQTBZRVFFR0lIMEdJSHlnQ0FFRitJQVIzY1RZQ0FBd0ZDeUFESUFFMkFnd2dBU0FETmdJSURBUUxJQVVvQWhnaEJpQUZJQVVvQWd3aUFVY0VRRUdZSHlnQ0FCb2dCU2dDQ0NJRElBRTJBZ3dnQVNBRE5nSUlEQU1MSUFWQkZHb2lCQ2dDQUNJRFJRUkFJQVVvQWhBaUEwVU5BaUFGUVJCcUlRUUxBMEFnQkNFSElBTWlBVUVVYWlJRUtBSUFJZ01OQUNBQlFSQnFJUVFnQVNnQ0VDSUREUUFMSUFkQkFEWUNBQXdDQ3lBRklBRkJmbkUyQWdRZ0FpQUFRUUZ5TmdJRUlBQWdBbW9nQURZQ0FBd0RDMEVBSVFFTElBWkZEUUFDUUNBRktBSWNJZ05CQW5SQnVDRnFJZ1FvQWdBZ0JVWUVRQ0FFSUFFMkFnQWdBUTBCUVl3ZlFZd2ZLQUlBUVg0Z0EzZHhOZ0lBREFJTElBWkJFRUVVSUFZb0FoQWdCVVliYWlBQk5nSUFJQUZGRFFFTElBRWdCallDR0NBRktBSVFJZ01FUUNBQklBTTJBaEFnQXlBQk5nSVlDeUFGS0FJVUlnTkZEUUFnQVNBRE5nSVVJQU1nQVRZQ0dBc2dBaUFBUVFGeU5nSUVJQUFnQW1vZ0FEWUNBQ0FDUVp3ZktBSUFSdzBBUVpBZklBQTJBZ0FQQ3lBQVFmOEJUUVJBSUFCQmVIRkJzQjlxSVFFQ2YwR0lIeWdDQUNJRFFRRWdBRUVEZG5RaUFIRkZCRUJCaUI4Z0FDQURjallDQUNBQkRBRUxJQUVvQWdnTElRQWdBU0FDTmdJSUlBQWdBallDRENBQ0lBRTJBZ3dnQWlBQU5nSUlEd3RCSHlFRElBQkIvLy8vQjAwRVFDQUFRU1lnQUVFSWRtY2lBV3QyUVFGeElBRkJBWFJyUVQ1cUlRTUxJQUlnQXpZQ0hDQUNRZ0EzQWhBZ0EwRUNkRUc0SVdvaEFRSkFBa0FDUUVHTUh5Z0NBQ0lFUVFFZ0EzUWlCM0ZGQkVCQmpCOGdCQ0FIY2pZQ0FDQUJJQUkyQWdBZ0FpQUJOZ0lZREFFTElBQkJHU0FEUVFGMmEwRUFJQU5CSDBjYmRDRURJQUVvQWdBaEFRTkFJQUVpQkNnQ0JFRjRjU0FBUmcwQ0lBTkJIWFloQVNBRFFRRjBJUU1nQkNBQlFRUnhhaUlIUVJCcUtBSUFJZ0VOQUFzZ0J5QUNOZ0lRSUFJZ0JEWUNHQXNnQWlBQ05nSU1JQUlnQWpZQ0NBd0JDeUFFS0FJSUlnQWdBallDRENBRUlBSTJBZ2dnQWtFQU5nSVlJQUlnQkRZQ0RDQUNJQUEyQWdnTFFhZ2ZRYWdmS0FJQVFRRnJJZ0JCZnlBQUd6WUNBQXNMQkFBakFBc0dBQ0FBSkFBTEVBQWpBQ0FBYTBGd2NTSUFKQUFnQUF0S0FRRi9JQUFnQVVrRVFDQUFJQUVnQWhBQ0R3c2dBZ1JBSUFBZ0Ftb2hBeUFCSUFKcUlRRURRQ0FEUVFGcklnTWdBVUVCYXlJQkxRQUFPZ0FBSUFKQkFXc2lBZzBBQ3dzZ0FBdjlEZ0lSZndGK0l3QkJNR3NpQnlRQVFiaC9JUWdDUUNBRlJRMEFJQVFzQUFBaUNVSC9BWEVoQ3dKQUlBbEJBRWdFUUNBTFFmNEFhMEVCZGlJR0lBVlBEUUpCYkNFSUlBdEIvd0JySWd0Qi93RkxEUUlnQkVFQmFpRUlRUUFoQlFOQUlBVWdDMDhFUUNBTElRZ2dCaUVMREFNRklBQWdCV29nQ0NBRlFRRjJhaUlFTFFBQVFRUjJPZ0FBSUFBZ0JVRUJjbW9nQkMwQUFFRVBjVG9BQUNBRlFRSnFJUVVNQVFzQUN3QUxJQVVnQzAwTkFTQUhRZjhCTmdJRUlBWWdCMEVFYWlBSFFRaHFJQVJCQVdvaURpQUxFQXdpQkVHSWYwc0VRQ0FFSVFnTUFndEJWQ0VJSUFjb0FnZ2lFRUVHU3cwQklBY29BZ1FpRVVFQmRDSUpRUUpxclVJQklCQ3RoaUlZUVFFZ0VIUWlEVUVCYWlJRnJVSUNobng4UWd0OFF2ei8vLy8vLy8vLy93Q0RRdVFDVmcwQlFWSWhDQ0FSUWY4QlN3MEJJQTFCZjNOQkFuUkI1QUpxclNBUlFRRnFJaFZCQVhTdElCaDhRZ2g4VkEwQklBc2dCR3NoRmlBRUlBNXFJUmNnQmtHQUJHb2lFaUFGUVFKMGFpSVJJQWxxUVFKcUlRNGdCa0dFQkdvaEUwR0FnQUlnRUhSQkVIWWhDVUVBSVFWQkFTRVBJQTFCQVdzaUZDRUtBMEFnQlNBVlJrVUVRQUpBSUFZZ0JVRUJkQ0lJYWk4QkFDSUVRZi8vQTBZRVFDQVRJQXBCQW5ScUlBVTZBQUlnQ2tFQmF5RUtRUUVoQkF3QkN5QVBRUUFnQ1NBRXdVb2JJUThMSUFnZ0VXb2dCRHNCQUNBRlFRRnFJUVVNQVFzTElBWWdEenNCZ2dRZ0JpQVFPd0dBQkFKQUlBb2dGRVlFUUNBTlFRTjJJUWhDQUNFWVFRQWhEd05BSUF3Z0ZVWUVRQ0FJSUExQkFYWnFRUU5xSWdsQkFYUWhDRUVBSVFSQkFDRUtBMEJCQUNFRklBb2dEVThOQkFOQUlBVkJBa1pGQkVBZ0V5QUZJQWxzSUFScUlCUnhRUUowYWlBT0lBVWdDbXBxTFFBQU9nQUNJQVZCQVdvaEJRd0JDd3NnQ2tFQ2FpRUtJQVFnQ0dvZ0ZIRWhCQXdBQ3dBRklBWWdERUVCZEdvdUFRQWhDU0FPSUE5cUlnUWdHRGNBQUVFSUlRVURRQ0FGSUFsT1JRUkFJQVFnQldvZ0dEY0FBQ0FGUVFocUlRVU1BUXNMSUJoQ2dZS0VpSkNnd0lBQmZDRVlJQXhCQVdvaERDQUpJQTlxSVE4TUFRc0FDd0FMSUExQkEzWWdEVUVCZG1wQkEyb2hDRUVBSVFVRFFDQU1JQlZHUlFSQVFRQWhDU0FHSUF4QkFYUnFMZ0VBSWdSQkFDQUVRUUJLR3lFRUEwQWdCQ0FKUmtVRVFDQVRJQVZCQW5ScUlBdzZBQUlEUUNBRklBaHFJQlJ4SWdVZ0Nrc05BQXNnQ1VFQmFpRUpEQUVMQ3lBTVFRRnFJUXdNQVFzTFFYOGhDQ0FGRFFJTElCQkJBV29oQ0VFQUlRVURRQ0FGSUExR1JRUkFJQkVnRXlBRlFRSjBhaUlPTFFBQ1FRRjBhaUlFSUFRdkFRQWlDVUVCYWpzQkFDQU9JQWdnQ1dkQllITnFJZ1E2QUFNZ0RpQUpJQVIwSUExck93RUFJQVZCQVdvaEJRd0JDd3NDUUFKQUlBWXZBWUlFQkVBZ0IwRWNhaUlFSUJjZ0ZoQU5JZ2hCaUg5TERRSWdCMEVVYWlBRUlCSVFEaUFIUVF4cUlBUWdFaEFPUVFBaEJRTkFJQWRCSEdvaUJCQVBJQVZCK3dGTGNnMENJQUFnQldvaUJpQUhRUlJxSUFRUUVEb0FBQ0FHSUFkQkRHb2dCQkFRT2dBQklBVkJBbkloQkNBSFFSeHFFQThFUUNBRUlRVU1Bd1VnQUNBRWFpQUhRUlJxSUFkQkhHb2lCQkFRT2dBQUlBWWdCMEVNYWlBRUVCQTZBQU1nQlVFRWFpRUZEQUVMQUFzQUN5QUhRUnhxSWdRZ0Z5QVdFQTBpQ0VHSWYwc05BU0FIUVJScUlBUWdFaEFPSUFkQkRHb2dCQ0FTRUE1QkFDRUZBMEFnQjBFY2FpSUVFQThnQlVIN0FVdHlSUVJBSUFBZ0JXb2lCaUFIUVJScUlBUVFFVG9BQUNBR0lBZEJER29nQkJBUk9nQUJJQVZCQW5JaEJDQUhRUnhxRUE4RVFDQUVJUVVGSUFBZ0JHb2dCMEVVYWlBSFFSeHFJZ1FRRVRvQUFDQUdJQWRCREdvZ0JCQVJPZ0FESUFWQkJHb2hCUXdDQ3dzTEFuOERRRUc2ZnlFSUlBVkIvUUZMRFFNZ0FDQUZhaUlHSUFkQkZHb2dCMEVjYWlJSkVCRTZBQUFnQmtFQmFpRUVJQWtRRDBFRFJnUkFJQWRCREdvaENFRUNEQUlMSUFWQi9BRkxEUU1nQmlBSFFReHFJQWRCSEdvaUJCQVJPZ0FCSUFWQkFtb2hCU0FFRUE5QkEwY05BQXNnQUNBRmFpRUVJQWRCRkdvaENFRURDeUFFSUFnZ0IwRWNhaEFST2dBQUlBWnFJQUJySVFnTUFRc0Nmd05BUWJwL0lRZ2dCVUg5QVVzTkFpQUFJQVZxSWdZZ0IwRVVhaUFIUVJ4cUlna1FFRG9BQUNBR1FRRnFJUVFnQ1JBUFFRTkdCRUFnQjBFTWFpRUlRUUlNQWdzZ0JVSDhBVXNOQWlBR0lBZEJER29nQjBFY2FpSUVFQkE2QUFFZ0JVRUNhaUVGSUFRUUQwRURSdzBBQ3lBQUlBVnFJUVFnQjBFVWFpRUlRUU1MSUFRZ0NDQUhRUnhxRUJBNkFBQWdCbW9nQUdzaENBc2dDRUdJZjBzTkFRc2dDQ0VFUVFBaEJTQUJRUUJCTkJBRElRbEJBQ0VLQTBBZ0JDQUZSd1JBSUFBZ0JXb2lCaTBBQUNJQlFRdExCRUJCYkNFSURBTUZJQWtnQVVFQ2RHb2lBU0FCS0FJQVFRRnFOZ0lBSUFWQkFXb2hCVUVCSUFZdEFBQjBRUUYxSUFwcUlRb01BZ3NBQ3d0QmJDRUlJQXBGRFFBZ0NtY2lCVUVmY3lJQlFRdExEUUFnQTBFZ0lBVnJOZ0lBUVFGQkFpQUJkQ0FLYXlJRFowRWZjeUlCZENBRFJ3MEFJQUFnQkdvZ0FVRUJhaUlBT2dBQUlBa2dBRUVDZEdvaUFDQUFLQUlBUVFGcU5nSUFJQWtvQWdRaUFFRUNTU0FBUVFGeGNnMEFJQUlnQkVFQmFqWUNBQ0FMUVFGcUlRZ0xJQWRCTUdva0FDQUlDNkFGQVF4L0l3QkJFR3NpRENRQUFuOGdCRUVIVFFSQUlBeENBRGNEQ0NBTVFRaHFJZ1VnQXlBRUVBSWFRV3dnQUNBQklBSWdCVUVJRUF3aUFDQUFJQVJMR3lBQUlBQkJpWDlKR3d3QkN5QUFRUUFnQVNnQ0FFRUJhaUlOUVFGMEVBTWhEMEZVSUFNb0FBQWlCa0VQY1NJQVFRcExEUUFhSUFJZ0FFRUZhallDQUNBRElBUnFJZ0pCQkdzaEJ5QUNRUWRySVFzZ0FFRUdhaUVPUVFRaEFpQUdRUVIySVFWQklDQUFkQ0lJUVFGeUlRbEJBQ0VBUVFFaEJpQURJUVFEUUFKQUlBWkJBWEZGQkVBRFFDQUZRWDl6UVlDQWdJQjRjbWdpQmtFWVNVVUVRQ0FBUVNScUlRQWdCQ0FMVFFSL0lBUkJBMm9GSUFRZ0MydEJBM1FnQW1wQkgzRWhBaUFIQ3lJRUtBQUFJQUoySVFVTUFRc0xJQUlnQmtFZWNTSUtha0VDYWlFQ0lBWkJBWFpCQTJ3Z0FHb2dCU0FLZGtFRGNXb2lBQ0FOVHcwQkFuOGdCQ0FMU3lBQ1FRTjJJQVJxSWdVZ0IwdHhSUVJBSUFKQkIzRWhBaUFGREFFTElBUWdCMnRCQTNRZ0FtcEJIM0VoQWlBSEN5SUVLQUFBSUFKMklRVUxJQVVnQ0VFQmEzRWlCaUFJUVFGMFFRRnJJZ29nQ1dzaUVFa0VmeUFPUVFGckJTQUZJQXB4SWdVZ0VFRUFJQVVnQ0U0YmF5RUdJQTRMSVFVZ0R5QUFRUUYwYWlBR1FRRnJJZ283QVFBZ0FFRUJhaUVBSUFJZ0JXb2hBaUFJUVFFZ0Jtc2dDaUFHUVFCS0d5QUphaUlKU2dSQUlBbEJBa2dOQVVFZ0lBbG5JZ1ZySVE1QkFTQUZRUjl6ZENFSUN5QUFJQTFQRFFBZ0NrRUFSeUVHQW44Z0JDQUxTeUFDUVFOMUlBUnFJZ1VnQjB0eFJRUkFJQUpCQjNFaEFpQUZEQUVMSUFJZ0JDQUhhMEVEZEdwQkgzRWhBaUFIQ3lJRUtBQUFJQUoySVFVTUFRc0xRV3dnQ1VFQlJ3MEFHa0ZRSUFBZ0RVc05BQnBCYkNBQ1FTQktEUUFhSUFFZ0FFRUJhellDQUNBRUlBSkJCMnBCQTNWcUlBTnJDeUFNUVJCcUpBQUw4Z0VCQVg4Z0FrVUVRQ0FBUWdBM0FnQWdBRUVBTmdJUUlBQkNBRGNDQ0VHNGZ3OExJQUFnQVRZQ0RDQUFJQUZCQkdvMkFoQWdBa0VFVHdSQUlBQWdBU0FDYWlJQlFRUnJJZ00yQWdnZ0FDQURLQUFBTmdJQUlBRkJBV3N0QUFBaUFRUkFJQUFnQVdkQkYyczJBZ1FnQWc4TElBQkJBRFlDQkVGL0R3c2dBQ0FCTmdJSUlBQWdBUzBBQUNJRE5nSUFBa0FDUUFKQUlBSkJBbXNPQWdFQUFnc2dBQ0FCTFFBQ1FSQjBJQU55SWdNMkFnQUxJQUFnQVMwQUFVRUlkQ0FEYWpZQ0FBc2dBU0FDYWtFQmF5MEFBQ0lCUlFSQUlBQkJBRFlDQkVGc0R3c2dBQ0FCWnlBQ1FRTjBhMEVKYWpZQ0JDQUNDMFFCQW44Z0FTQUNMd0VBSWdNZ0FTZ0NCR29pQkRZQ0JDQUFJQU5CQW5SQm9CMXFLQUlBSUFFb0FnQkJBQ0FFYTNaeE5nSUFJQUVRRHhvZ0FDQUNRUVJxTmdJRUM1OEJBUVIvUVFNaEFTQUFLQUlFSWdKQklFMEVRQ0FBS0FJSUlnRWdBQ2dDRUU4RVFDQUFJQUpCQjNFMkFnUWdBQ0FCSUFKQkEzWnJJZ0kyQWdnZ0FDQUNLQUFBTmdJQVFRQVBDeUFBS0FJTUlnTWdBVVlFUUVFQlFRSWdBa0VnU1JzUEN5QUFJQUVnQVNBRGF5QUNRUU4ySWdRZ0FTQUVheUFEU1NJQkd5SURheUlFTmdJSUlBQWdBaUFEUVFOMGF6WUNCQ0FBSUFRb0FBQTJBZ0FMSUFFTFNBRUVmeUFBS0FJRUlBQW9BZ0JCQW5ScUlnSXRBQUlnQWk4QkFDRUVJQUVnQVNnQ0JDSUZJQUl0QUFNaUFtbzJBZ1FnQUNBRUlBRW9BZ0FnQlhSQkFDQUNhM1pxTmdJQUMxSUJCSDhnQUNnQ0JDQUFLQUlBUVFKMGFpSUNMUUFDSUFJdkFRQWhCQ0FCSUFJdEFBTWlBaUFCS0FJRWFpSUZOZ0lFSUFBZ0JDQUNRUUowUWFBZGFpZ0NBQ0FCS0FJQVFRQWdCV3QyY1dvMkFnQUxDQUFnQUVHSWYwc0xHZ0FnQUFSQUlBRUVRQ0FDSUFBZ0FSRUNBQThMSUFBUUJnc0xwZ2dDRFg4QmZpTUFRUkJySWdra0FDQUpRUUEyQWd3Z0NVRUFOZ0lJQW44Q1FDQURRZWdKYWlBRElBbEJDR29nQ1VFTWFpQUJJQUlnQTBHQUFXb1FDeUlQUVloL1N3MEFRVlFnQ1NnQ0RDSUVJQUFvQWdBaUFVSC9BWEZCQVdwTERRRWFJQUJCQkdvaEN5QUFJQUZCLzRHQWVIRWdCRUVRZEVHQWdQd0hjWEkyQWdCQmZ5QUVJQVJCQUVnYlFRRnFJUUJCQUNFQklBa29BZ2doQlVFQUlRSURRQ0FBSUFKR0JFQWdCVUVEYXlFQlFRQWhBQU5BQWtCQkFDRUNJQUFnQVU0RVFBTkFJQUFnQlU0TkFpQURJQUFnQTJwQjZBbHFMUUFBUVFKMGFrRkFheUlCSUFFb0FnQWlBVUVCYWpZQ0FDQUJJQU5xSUFBNkFPZ0hJQUJCQVdvaEFBd0FDd0FGQTBBZ0FrRUVSa1VFUUNBRElBTWdBQ0FDYWlJSGFrSG9DV290QUFCQkFuUnFRVUJySWdnZ0NDZ0NBQ0lJUVFGcU5nSUFJQU1nQ0dvZ0J6b0E2QWNnQWtFQmFpRUNEQUVMQ3lBQVFRUnFJUUFNQWdzQUN3c2dCRUVCYWlFT0lBTW9BZ0FoQjBFQUlRQkJBU0VJQTBBZ0NDQU9SZzBESUE0Z0NHc2hCQ0FESUFoQkFuUnFLQUlBSVFVQ1FBSkFBa0FDUUFKQUFrQkJBU0FJZEVFQmRTSU5RUUZyRGdnQUFRUUNCQVFFQXdRTFFRQWhBaUFGUVFBZ0JVRUFTaHNoQmlBQUlRRURRQ0FDSUFaR0RRVWdBeUFDSUFkcWFpMEE2QWNoQ2lBTElBRkJBWFJxSWd3Z0JEb0FBU0FNSUFvNkFBQWdBa0VCYWlFQ0lBRkJBV29oQVF3QUN3QUxRUUFoQWlBRlFRQWdCVUVBU2hzaENpQUFJUUVEUUNBQ0lBcEdEUVFnQ3lBQlFRRjBhaUlHSUFNZ0FpQUhhbW90QU9nSElndzZBQUlnQmlBRU9nQUJJQVlnRERvQUFDQUdJQVE2QUFNZ0FrRUJhaUVDSUFGQkFtb2hBUXdBQ3dBTFFRQWhBaUFGUVFBZ0JVRUFTaHNoQmlBRVFRaDBRWUQrQTNFaEJDQUFJUUVEUUNBQ0lBWkdEUU1nQ3lBQlFRRjBhaUFFSUFNZ0FpQUhhbW90QU9nSGNxMUNnWUNFZ0pDQXdBQitOd0FBSUFKQkFXb2hBaUFCUVFScUlRRU1BQXNBQzBFQUlRSWdCVUVBSUFWQkFFb2JJUVlnQkVFSWRFR0EvZ054SVFRZ0FDRUJBMEFnQWlBR1JnMENJQXNnQVVFQmRHb2lDaUFFSUFNZ0FpQUhhbW90QU9nSGNxMUNnWUNFZ0pDQXdBQitJaEUzQUFnZ0NpQVJOd0FBSUFKQkFXb2hBaUFCUVFocUlRRU1BQXNBQzBFQUlRRWdCVUVBSUFWQkFFb2JJUW9nQkVFSWRFR0EvZ054SVF3Z0FDRUVBMEFnQVNBS1JnMEJJQXNnQkVFQmRHb2hFQ0FNSUFNZ0FTQUhhbW90QU9nSGNxMUNnWUNFZ0pDQXdBQitJUkZCQUNFQ0EwQWdBaUFOVGtVRVFDQVFJQUpCQVhScUlnWWdFVGNBR0NBR0lCRTNBQkFnQmlBUk53QUlJQVlnRVRjQUFDQUNRUkJxSVFJTUFRc0xJQUZCQVdvaEFTQUVJQTFxSVFRTUFBc0FDeUFJUVFGcUlRZ2dCU0FIYWlFSElBVWdEV3dnQUdvaEFBd0FDd0FGSUFNZ0FrRUNkR29pQjBGQWF5QUJOZ0lBSUFKQkFXb2hBaUFIS0FJQUlBRnFJUUVNQVFzQUN3QUxJQThMSUFsQkVHb2tBQXZ5QWdFR2Z5TUFRU0JySWdVa0FDQUVLQUlBSVFZZ0JVRU1haUFDSUFNUURTSURRWWgvVFFSQUlBUkJCR29oQWlBQUlBRnFJZ2xCQTJzaEJFRUFJQVpCRUhaclFSOXhJUU1EUUNBRlFReHFFQThnQUNBRVQzSkZCRUFnQWlBRktBSU1JZ1lnQlNnQ0VDSUhkQ0FEZGtFQmRHb2lDQzBBQVNFS0lBQWdDQzBBQURvQUFDQUNJQVlnQnlBS2FpSUdkQ0FEZGtFQmRHb2lCeTBBQUNFSUlBVWdCaUFITFFBQmFqWUNFQ0FBSUFnNkFBRWdBRUVDYWlFQURBRUxDd05BSUFWQkRHb1FEeUVISUFVb0Fnd2hCaUFGS0FJUUlRUWdBQ0FKVHlBSGNrVUVRQ0FDSUFZZ0JIUWdBM1pCQVhScUlnWXRBQUFoQnlBRklBUWdCaTBBQVdvMkFoQWdBQ0FIT2dBQUlBQkJBV29oQUF3QkN3c0RRQ0FBSUFsUFJRUkFJQUlnQmlBRWRDQURka0VCZEdvaUJ5MEFBU0VJSUFBZ0J5MEFBRG9BQUNBQVFRRnFJUUFnQkNBSWFpRUVEQUVMQzBGc1FXd2dBU0FGS0FJVUlBVW9BaGhIR3lBRVFTQkhHeUVEQ3lBRlFTQnFKQUFnQXd2UEZBRWpmeU1BUWRBQWF5SUZKQUJCYkNFSkFrQWdBMEVLU1EwQUFrQWdBeUFDTHdBRUlnY2dBaThBQUNJSUlBSXZBQUlpRFdwcVFRWnFJZ3hKRFFBZ0JDOEJBaUVHSUFWQlBHb2dBa0VHYWlJQ0lBZ1FEU0lKUVloL1N3MEJJQVZCS0dvZ0FpQUlhaUlDSUEwUURTSUpRWWgvU3cwQklBVkJGR29nQWlBTmFpSUNJQWNRRFNJSlFZaC9TdzBCSUFVZ0FpQUhhaUFESUF4ckVBMGlDVUdJZjBzTkFTQUVRUVJxSVFvZ0FDQUJhaUlmUVFOcklTQkJBQ0FHYTBFZmNTRUxJQVVvQWdnaEVTQUZLQUljSVJJZ0JTZ0NNQ0VUSUFVb0FrUWhGQ0FGS0FJRUlRa2dCU2dDR0NFTklBVW9BaXdoRENBRktBSkFJUVlnQlNnQ0VDRWhJQVVvQWlRaElpQUZLQUk0SVNNZ0JTZ0NUQ0VrSUFVb0FnQWhGU0FGS0FJVUlSWWdCU2dDS0NFWElBVW9BandoR0VFQklROGdBQ0FCUVFOcVFRSjJJZ1JxSWdNZ0JHb2lBaUFFYWlJWklRUWdBaUVJSUFNaEJ3TkFJQTlCQVhGRklBUWdJRTl5UlFSQUlBQWdDaUFZSUFaMElBdDJRUUowYWlJT0x3RUFPd0FBSUE0dEFBSWhHaUFPTFFBRElSQWdCeUFLSUJjZ0RIUWdDM1pCQW5ScUlnNHZBUUE3QUFBZ0RpMEFBaUViSUE0dEFBTWhEeUFJSUFvZ0ZpQU5kQ0FMZGtFQ2RHb2lEaThCQURzQUFDQU9MUUFDSVJ3Z0RpMEFBeUVkSUFRZ0NpQVZJQWwwSUF0MlFRSjBhaUlPTHdFQU93QUFJQTR0QUFJaEhpQU9MUUFESVE0Z0FDQVFhaUlsSUFvZ0dDQUdJQnBxSWdaMElBdDJRUUowYWlJUUx3RUFPd0FBSUJBdEFBSWdFQzBBQXlFbUlBY2dEMm9pSnlBS0lCY2dEQ0FiYWlJYWRDQUxka0VDZEdvaUJ5OEJBRHNBQUNBSExRQUNJUXdnQnkwQUF5RVFJQWdnSFdvaUd5QUtJQllnRFNBY2FpSVBkQ0FMZGtFQ2RHb2lDQzhCQURzQUFDQUlMUUFDSVEwZ0NDMEFBeUVjSUFRZ0Rtb2lIU0FLSUJVZ0NTQWVhaUlPZENBTGRrRUNkR29pQ1M4QkFEc0FBQ0FHYWlFQVFRTWhCd0ovSUJRZ0pFa0VRQ0FBSVFaQkF3d0JDeUFBUVFkeElRWWdGQ0FBUVFOMmF5SVVLQUFBSVJoQkFBc2dDUzBBQXlFZUlBa3RBQUloQ0NBTUlCcHFJUUFnRXlBalNRUi9JQUFGSUJNZ0FFRURkbXNpRXlnQUFDRVhRUUFoQnlBQVFRZHhDeUVNSUEwZ0Qyb2hBQ0FIY2lFSlFRTWhEd0ovSUJJZ0lra0VRQ0FBSVExQkF3d0JDeUFBUVFkeElRMGdFaUFBUVFOMmF5SVNLQUFBSVJaQkFBc2dDQ0FPYWlFQUlBbHlJQkVnSVVrRWZ5QUFCU0FSSUFCQkEzWnJJaEVvQUFBaEZVRUFJUThnQUVFSGNRc2hDU0FsSUNacUlRQWdFQ0FuYWlFSElCc2dIR29oQ0NBZElCNXFJUVFnRDNKRklROE1BUXNMSUFVZ0REWUNMQ0FGSUFZMkFrQWdCU0FOTmdJWUlBVWdDVFlDQkNBRklCUTJBa1FnQlNBVE5nSXdJQVVnRWpZQ0hDQUZJQkUyQWdnZ0JTQVlOZ0k4SUFVZ0Z6WUNLQ0FGSUJZMkFoUWdCU0FWTmdJQUlBSWdCMGtnQUNBRFMzSU5BRUZzSVFrZ0NDQVpTdzBCSUFOQkEyc2hDUU5BSUFWQlBHb1FEMFVnQUNBSlNYRUVRQ0FBSUFvZ0JTZ0NQQ0lOSUFVb0FrQWlESFFnQzNaQkFuUnFJZzR2QVFBN0FBQWdBQ0FPTFFBRGFpSUdJQW9nRFNBTUlBNHRBQUpxSWdCMElBdDJRUUowYWlJTUx3RUFPd0FBSUFVZ0FDQU1MUUFDYWpZQ1FDQUdJQXd0QUFOcUlRQU1BUVVnQTBFQ2F5RU1BMEFnQlVFOGFoQVBJUVlnQlNnQ1BDRU5JQVVvQWtBaENTQUFJQXhMSUFaeVJRUkFJQUFnQ2lBTklBbDBJQXQyUVFKMGFpSUdMd0VBT3dBQUlBVWdDU0FHTFFBQ2FqWUNRQ0FBSUFZdEFBTnFJUUFNQVFzTEEwQWdBQ0FNUzBVRVFDQUFJQW9nRFNBSmRDQUxka0VDZEdvaUJpOEJBRHNBQUNBQUlBWXRBQU5xSVFBZ0NTQUdMUUFDYWlFSkRBRUxDd0pBSUFBZ0EwOE5BQ0FBSUFvZ0RTQUpkQ0FMZGlJQVFRSjBhaUlETFFBQU9nQUFJQU10QUFOQkFVWUVRQ0FKSUFNdEFBSnFJUWtNQVFzZ0NVRWZTdzBBUVNBZ0NTQUtJQUJCQW5ScUxRQUNhaUlBSUFCQklFOGJJUWtMSUFKQkEyc2hEQU5BSUFWQktHb1FEMFVnQnlBTVNYRUVRQ0FISUFvZ0JTZ0NLQ0lHSUFVb0Fpd2lBSFFnQzNaQkFuUnFJZzB2QVFBN0FBQWdCeUFOTFFBRGFpSURJQW9nQmlBQUlBMHRBQUpxSWdCMElBdDJRUUowYWlJR0x3RUFPd0FBSUFVZ0FDQUdMUUFDYWpZQ0xDQURJQVl0QUFOcUlRY01BUVVnQWtFQ2F5RUdBMEFnQlVFb2FoQVBJUU1nQlNnQ0tDRU1JQVVvQWl3aEFDQUdJQWRKSUFOeVJRUkFJQWNnQ2lBTUlBQjBJQXQyUVFKMGFpSURMd0VBT3dBQUlBVWdBQ0FETFFBQ2FqWUNMQ0FISUFNdEFBTnFJUWNNQVFzTEEwQWdCaUFIU1VVRVFDQUhJQW9nRENBQWRDQUxka0VDZEdvaUF5OEJBRHNBQUNBSElBTXRBQU5xSVFjZ0FDQURMUUFDYWlFQURBRUxDd0pBSUFJZ0IwME5BQ0FISUFvZ0RDQUFkQ0FMZGlJQ1FRSjBhaUlETFFBQU9nQUFJQU10QUFOQkFVWUVRQ0FBSUFNdEFBSnFJUUFNQVFzZ0FFRWZTdzBBUVNBZ0FDQUtJQUpCQW5ScUxRQUNhaUlBSUFCQklFOGJJUUFMSUJsQkEyc2hEQU5BSUFWQkZHb1FEMFVnQ0NBTVNYRUVRQ0FJSUFvZ0JTZ0NGQ0lHSUFVb0FoZ2lBblFnQzNaQkFuUnFJZzB2QVFBN0FBQWdDQ0FOTFFBRGFpSURJQW9nQmlBQ0lBMHRBQUpxSWdKMElBdDJRUUowYWlJR0x3RUFPd0FBSUFVZ0FpQUdMUUFDYWpZQ0dDQURJQVl0QUFOcUlRZ01BUVVnR1VFQ2F5RURBMEFnQlVFVWFoQVBJUUlnQlNnQ0ZDRUdJQVVvQWhnaEJ5QURJQWhKSUFKeVJRUkFJQWdnQ2lBR0lBZDBJQXQyUVFKMGFpSUNMd0VBT3dBQUlBVWdCeUFDTFFBQ2FqWUNHQ0FJSUFJdEFBTnFJUWdNQVFzTEEwQWdBeUFJU1VVRVFDQUlJQW9nQmlBSGRDQUxka0VDZEdvaUFpOEJBRHNBQUNBSUlBSXRBQU5xSVFnZ0J5QUNMUUFDYWlFSERBRUxDd0pBSUFnZ0dVOE5BQ0FJSUFvZ0JpQUhkQ0FMZGlJQ1FRSjBhaUlETFFBQU9nQUFJQU10QUFOQkFVWUVRQ0FISUFNdEFBSnFJUWNNQVFzZ0IwRWZTdzBBUVNBZ0J5QUtJQUpCQW5ScUxRQUNhaUlDSUFKQklFOGJJUWNMQTBBZ0JSQVBSU0FFSUNCSmNRUkFJQVFnQ2lBRktBSUFJZ1lnQlNnQ0JDSUNkQ0FMZGtFQ2RHb2lEQzhCQURzQUFDQUVJQXd0QUFOcUlnTWdDaUFHSUFJZ0RDMEFBbW9pQW5RZ0MzWkJBblJxSWdRdkFRQTdBQUFnQlNBQ0lBUXRBQUpxTmdJRUlBTWdCQzBBQTJvaEJBd0JCU0FmUVFKcklRTURRQ0FGRUE4aEFpQUZLQUlBSVFZZ0JTZ0NCQ0VJSUFNZ0JFa2dBbkpGQkVBZ0JDQUtJQVlnQ0hRZ0MzWkJBblJxSWdJdkFRQTdBQUFnQlNBSUlBSXRBQUpxTmdJRUlBUWdBaTBBQTJvaEJBd0JDd3NEUUNBRElBUkpSUVJBSUFRZ0NpQUdJQWgwSUF0MlFRSjBhaUlDTHdFQU93QUFJQVFnQWkwQUEyb2hCQ0FJSUFJdEFBSnFJUWdNQVFzTEFrQWdCQ0FmVHcwQUlBUWdDaUFHSUFoMElBdDJJZ0pCQW5ScUlnTXRBQUE2QUFBZ0F5MEFBMEVCUmdSQUlBZ2dBeTBBQW1vaENBd0JDeUFJUVI5TERRQkJJQ0FJSUFvZ0FrRUNkR290QUFKcUlnSWdBa0VnVHhzaENBdEJiRUZzUVd4QmJFRnNRV3hCYkVGc0lBRWdDRUVnUnhzZ0JTZ0NDQ0FGS0FJTVJ4c2dCMEVnUnhzZ0JTZ0NIQ0FGS0FJZ1J4c2dBRUVnUnhzZ0JTZ0NNQ0FGS0FJMFJ4c2dDVUVnUnhzZ0JTZ0NSQ0FGS0FKSVJ4c2hDUXdKQ3dBTEFBc0FDd0FMQUFzQUN3QUxBQXRCYkNFSkN5QUZRZEFBYWlRQUlBa0w3QkFCSG44akFFSFFBR3NpQlNRQVFXd2hDUUpBSUFOQkNra05BQUpBSUFNZ0FpOEFCQ0lHSUFJdkFBQWlCeUFDTHdBQ0lnaHFha0VHYWlJT1NRMEFJQVF2QVFJaER5QUZRVHhxSUFKQkJtb2lBaUFIRUEwaUNVR0lmMHNOQVNBRlFTaHFJQUlnQjJvaUFpQUlFQTBpQ1VHSWYwc05BU0FGUVJScUlBSWdDR29pQWlBR0VBMGlDVUdJZjBzTkFTQUZJQUlnQm1vZ0F5QU9heEFOSWdsQmlIOUxEUUVnQkVFRWFpRUtJQUFnQVdvaUhFRURheUVkUVFBZ0QydEJIM0VoQ3lBRktBSUlJUkVnQlNnQ0hDRVNJQVVvQWpBaEV5QUZLQUpFSVJRZ0JTZ0NCQ0VKSUFVb0FoZ2hCaUFGS0FJc0lRY2dCU2dDUUNFSUlBVW9BaEFoSGlBRktBSWtJUjhnQlNnQ09DRWdJQVVvQWt3aElTQUZLQUlBSVJVZ0JTZ0NGQ0VXSUFVb0FpZ2hGeUFGS0FJOElSaEJBU0VOSUFBZ0FVRURha0VDZGlJQ2FpSU9JQUpxSWc4Z0Ftb2lHU0VFSUE4aEFpQU9JUU1EUUNBTlJTQUVJQjFQY2tVRVFDQUtJQmdnQ0hRZ0MzWkJBWFJxSWd3dEFBRWhEU0FBSUF3dEFBQTZBQUFnQ2lBWElBZDBJQXQyUVFGMGFpSU1MUUFCSVJBZ0F5QU1MUUFBT2dBQUlBb2dGaUFHZENBTGRrRUJkR29pREMwQUFTRWFJQUlnREMwQUFEb0FBQ0FLSUJVZ0NYUWdDM1pCQVhScUlnd3RBQUVoR3lBRUlBd3RBQUE2QUFBZ0NpQVlJQWdnRFdvaUNIUWdDM1pCQVhScUlnd3RBQUVoRFNBQUlBd3RBQUE2QUFFZ0NpQVhJQWNnRUdvaUIzUWdDM1pCQVhScUlnd3RBQUVoRUNBRElBd3RBQUE2QUFFZ0NpQVdJQVlnR21vaURIUWdDM1pCQVhScUlnWXRBQUVoR2lBQ0lBWXRBQUE2QUFFZ0NpQVZJQWtnRzJvaUczUWdDM1pCQVhScUlna3RBQUVoSWlBRUlBa3RBQUE2QUFFZ0NDQU5haUVHUVFNaENRSi9JQlFnSVVrRVFFRURJUTBnQmd3QkN5QVVJQVpCQTNackloUW9BQUFoR0VFQUlRMGdCa0VIY1FzaENDQUhJQkJxSVFZZ0V5QWdTUVIvSUFZRklCTWdCa0VEZG1zaUV5Z0FBQ0VYUVFBaENTQUdRUWR4Q3lFSElBd2dHbW9oRENBSklBMXlJUkJCQXlFTkFuOGdFaUFmU1FSQUlBd2hCa0VEREFFTElBeEJCM0VoQmlBU0lBeEJBM1pySWhJb0FBQWhGa0VBQ3lBYklDSnFJUXdnRUhJaEVDQVJJQjVKQkg4Z0RBVWdFU0FNUVFOMmF5SVJLQUFBSVJWQkFDRU5JQXhCQjNFTElRa2dCRUVDYWlFRUlBSkJBbW9oQWlBRFFRSnFJUU1nQUVFQ2FpRUFJQTBnRUhKRklRME1BUXNMSUFVZ0J6WUNMQ0FGSUFnMkFrQWdCU0FHTmdJWUlBVWdDVFlDQkNBRklCUTJBa1FnQlNBVE5nSXdJQVVnRWpZQ0hDQUZJQkUyQWdnZ0JTQVlOZ0k4SUFVZ0Z6WUNLQ0FGSUJZMkFoUWdCU0FWTmdJQUlBQWdEa3NnQXlBUFMzSU5BRUZzSVFrZ0FpQVpTdzBCSUE1QkEyc2hDUU5BSUFWQlBHb1FEeUFBSUFsUGNrVUVRQ0FLSUFVb0Fqd2lCaUFGS0FKQUlnZDBJQXQyUVFGMGFpSUlMUUFCSVF3Z0FDQUlMUUFBT2dBQUlBb2dCaUFISUF4cUlnWjBJQXQyUVFGMGFpSUhMUUFBSVFnZ0JTQUdJQWN0QUFGcU5nSkFJQUFnQ0RvQUFTQUFRUUpxSVFBTUFRc0xBMEFnQlVFOGFoQVBJUWNnQlNnQ1BDRUdJQVVvQWtBaENTQUFJQTVQSUFkeVJRUkFJQW9nQmlBSmRDQUxka0VCZEdvaUJpMEFBQ0VISUFVZ0NTQUdMUUFCYWpZQ1FDQUFJQWM2QUFBZ0FFRUJhaUVBREFFTEN3TkFJQUFnRGs5RkJFQWdDaUFHSUFsMElBdDJRUUYwYWlJSExRQUJJQUFnQnkwQUFEb0FBQ0FBUVFGcUlRQWdDV29oQ1F3QkN3c2dEMEVEYXlFQUEwQWdCVUVvYWhBUElBQWdBMDF5UlFSQUlBb2dCU2dDS0NJR0lBVW9BaXdpQjNRZ0MzWkJBWFJxSWdndEFBRWhEaUFESUFndEFBQTZBQUFnQ2lBR0lBY2dEbW9pQm5RZ0MzWkJBWFJxSWdjdEFBQWhDQ0FGSUFZZ0J5MEFBV28yQWl3Z0F5QUlPZ0FCSUFOQkFtb2hBd3dCQ3dzRFFDQUZRU2hxRUE4aEJ5QUZLQUlvSVFZZ0JTZ0NMQ0VBSUFNZ0QwOGdCM0pGQkVBZ0NpQUdJQUIwSUF0MlFRRjBhaUlHTFFBQUlRY2dCU0FBSUFZdEFBRnFOZ0lzSUFNZ0J6b0FBQ0FEUVFGcUlRTU1BUXNMQTBBZ0F5QVBUMFVFUUNBS0lBWWdBSFFnQzNaQkFYUnFJZ2N0QUFFaENDQURJQWN0QUFBNkFBQWdBMEVCYWlFRElBQWdDR29oQUF3QkN3c2dHVUVEYXlFREEwQWdCVUVVYWhBUElBSWdBMDl5UlFSQUlBb2dCU2dDRkNJR0lBVW9BaGdpQjNRZ0MzWkJBWFJxSWdndEFBRWhEaUFDSUFndEFBQTZBQUFnQ2lBR0lBY2dEbW9pQm5RZ0MzWkJBWFJxSWdjdEFBQWhDQ0FGSUFZZ0J5MEFBV28yQWhnZ0FpQUlPZ0FCSUFKQkFtb2hBZ3dCQ3dzRFFDQUZRUlJxRUE4aEJ5QUZLQUlVSVFZZ0JTZ0NHQ0VESUFJZ0dVOGdCM0pGQkVBZ0NpQUdJQU4wSUF0MlFRRjBhaUlHTFFBQUlRY2dCU0FESUFZdEFBRnFOZ0lZSUFJZ0J6b0FBQ0FDUVFGcUlRSU1BUXNMQTBBZ0FpQVpUMFVFUUNBS0lBWWdBM1FnQzNaQkFYUnFJZ2N0QUFFaENDQUNJQWN0QUFBNkFBQWdBa0VCYWlFQ0lBTWdDR29oQXd3QkN3c0RRQ0FGRUE4Z0JDQWRUM0pGQkVBZ0NpQUZLQUlBSWdJZ0JTZ0NCQ0lHZENBTGRrRUJkR29pQnkwQUFTRUlJQVFnQnkwQUFEb0FBQ0FLSUFJZ0JpQUlhaUlDZENBTGRrRUJkR29pQmkwQUFDRUhJQVVnQWlBR0xRQUJhallDQkNBRUlBYzZBQUVnQkVFQ2FpRUVEQUVMQ3dOQUlBVVFEeUVISUFVb0FnQWhCaUFGS0FJRUlRSWdCQ0FjVHlBSGNrVUVRQ0FLSUFZZ0FuUWdDM1pCQVhScUlnWXRBQUFoQnlBRklBSWdCaTBBQVdvMkFnUWdCQ0FIT2dBQUlBUkJBV29oQkF3QkN3c0RRQ0FFSUJ4UFJRUkFJQW9nQmlBQ2RDQUxka0VCZEdvaUJ5MEFBU0VJSUFRZ0J5MEFBRG9BQUNBRVFRRnFJUVFnQWlBSWFpRUNEQUVMQzBGc1FXeEJiRUZzUVd4QmJFRnNRV3dnQVNBQ1FTQkhHeUFGS0FJSUlBVW9BZ3hIR3lBRFFTQkhHeUFGS0FJY0lBVW9BaUJIR3lBQVFTQkhHeUFGS0FJd0lBVW9BalJIR3lBSlFTQkhHeUFGS0FKRUlBVW9Ba2hIR3lFSkRBRUxRV3doQ1FzZ0JVSFFBR29rQUNBSkMxZ0JBMzhDUUNBQUtBS1E2d0VpQVVVTkFDQUJLQUlBSUFGQnROVUJhaWdDQUNJQ0lBRkJ1TlVCYWlnQ0FDSURFQk1nQWdSQUlBTWdBU0FDRVFJQURBRUxJQUVRQmdzZ0FFRUFOZ0tnNndFZ0FFSUFOd09RNndFTDZRTUNCSDhDZmlBQVFRQkJLQkFESVFRZ0FrRUJRUVVnQXhzaUFFa0VRQ0FBRHdzZ0FVVUVRRUYvRHd0QkFTRUdBa0FDUUNBRFFRRkdEUUFnQXlFR0lBRW9BQUFpQlVHbzZyNXBSZzBBUVhZaEF5QUZRWEJ4UWREVXRNSUJSdzBCUVFnaEF5QUNRUWhKRFFFZ0FUVUFCQ0VJSUFSQkFUWUNGQ0FFSUFnM0F3QkJBQThMSUFFZ0FpQUdFQm9pQXlBQ1N3MEFJQVFnQXpZQ0dFRnlJUU1nQUNBQmFpSUZRUUZyTFFBQUlnSkJDSEVOQUNBQ1FTQnhJZ1pGQkVCQmNDRURJQVV0QUFBaUJVR25BVXNOQVNBRlFRZHhyVUlCSUFWQkEzWkJDbXF0aGlJSVFnT0lmaUFJZkNFSklBQkJBV29oQUFzZ0FrRUdkaUVGSUFKQkFuWkJBQ0VEQWtBQ1FBSkFBa0FnQWtFRGNVRUJhdzREQUFFQ0F3c2dBQ0FCYWkwQUFDRURJQUJCQVdvaEFBd0NDeUFBSUFGcUx3QUFJUU1nQUVFQ2FpRUFEQUVMSUFBZ0FXb29BQUFoQXlBQVFRUnFJUUFMUVFGeElRSUNmZ0pBQWtBQ1FBSkFJQVZCQVdzT0F3RUNBd0FMUW44Z0JrVU5BeG9nQUNBQmFqRUFBQXdEQ3lBQUlBRnFNd0FBUW9BQ2ZBd0NDeUFBSUFGcU5RQUFEQUVMSUFBZ0FXb3BBQUFMSVFnZ0JDQUNOZ0lnSUFRZ0F6WUNIQ0FFSUFnM0F3QkJBQ0VESUFSQkFEWUNGQ0FFSUFnZ0NTQUdHeUlJTndNSUlBUkNnSUFJSUFnZ0NFS0FnQWhhR3o0Q0VBc2dBd3RmQVFGL1FiaC9JUU1nQVVFQlFRVWdBaHNpQWs4RWZ5QUFJQUpxUVFGckxRQUFJZ0JCQTNGQkFuUkJvQjVxS0FJQUlBSnFJQUJCQkhaQkRIRkJzQjVxS0FJQWFpQUFRU0J4SWdGRmFpQUJRUVYySUFCQndBQkpjV29GUWJoL0N3c01BQ0FBSUFFZ0FrRUFFQmtMbHdNQ0JYOENmaU1BUVVCcUlnUWtBQUpBQTBBZ0FVRUZUd1JBQWtBZ0FDZ0FBRUZ3Y1VIUTFMVENBVVlFUUVKK0lRY2dBVUVJU1EwRUlBQW9BQVFpQWtGM1N3MEVJQUpCQ0dvaUF5QUJTdzBFSUFKQmdYOUpEUUVNQkFzZ0JFRVlhaUFBSUFFUUd5RUNRbjRnQkNrREdFSUFJQVFvQWl4QkFVY2JJQUliSWdkQ2ZWWU5BeUFISUFoOElnZ2dCMVJDZmlFSERRTUNRQUpBSUFGQkNFa05BQ0FBS0FBQVFYQnhRZERVdE1JQlJ3MEFJQUFvQUFRaUFrRjNTdzBGUWJoL0lBSkJDR29pQWlBQklBSkpHeUVEREFFTElBUkJHR29nQUNBQkVCc2lBa0dJZjBzRVFDQUNJUU1NQVF0QnVIOGhBeUFDRFFBZ0FTQUVLQUl3SWdKcklRVWdBQ0FDYWlFR0EwQWdCaUFGSUFSQkRHb1FIU0lEUVloL1N3MEJJQU5CQTJvaUFpQUZTd1JBUWJoL0lRTU1BZ3NnQlNBQ2F5RUZJQUlnQm1vaEJpQUVLQUlRUlEwQUN5QUVLQUk0Qkg5QnVIOGhBeUFGUVFSSkRRRWdCa0VFYWdVZ0Jnc2dBR3NoQXdzZ0EwR0lmMHNOQXdzZ0FTQURheUVCSUFBZ0Eyb2hBQXdCQ3d0Q2ZpQUlJQUViSVFjTElBUkJRR3NrQUNBSEMyUUJBWDlCdUg4aEF3SkFJQUZCQTBrTkFDQUFMUUFDSVFFZ0FpQUFMd0FBSWdCQkFYRTJBZ1FnQWlBQVFRRjJRUU54SWdNMkFnQWdBaUFBSUFGQkVIUnlRUU4ySWdBMkFnZ0NRQUpBSUFOQkFXc09Bd0lCQUFFTFFXd1BDeUFBSVFNTElBTUxSQUVDZnlBQklBSW9BZ1FpQXlBQktBSUVhaUlFTmdJRUlBQWdBMEVDZEVHZ0hXb29BZ0FnQVNnQ0FFRUFJQVJyZG5FMkFnQWdBUkFQR2lBQUlBSkJDR28yQWdRTHpnRUJCbjlCdW44aENnSkFJQUlvQWdRaUNDQUNLQUlBSWdscUlnMGdBU0FBYTBzTkFFRnNJUW9nQ1NBRUlBTW9BZ0FpQzJ0TERRQWdBQ0FKYWlJRUlBSW9BZ2dpREdzaEFpQUFJQUZCSUdzaUFDQUxJQWxCQUJBZ0lBTWdDU0FMYWpZQ0FBSkFBa0FnQkNBRmF5QU1Ud1JBSUFJaEJRd0JDeUFNSUFRZ0JtdExEUUlnQnlBSElBSWdCV3NpQW1vaUFTQUlhazhFUUNBRUlBRWdDQkFLR2d3Q0N5QUNJQWhxSVFnZ0JDQUJRUUFnQW1zUUNpQUNheUVFQ3lBRUlBQWdCU0FJUVFFUUlBc2dEU0VLQ3lBS0M4Y0VBUUovSUFBZ0Eyb2hCZ0pBSUFOQkIwd0VRQU5BSUFBZ0JrOE5BaUFBSUFJdEFBQTZBQUFnQUVFQmFpRUFJQUpCQVdvaEFnd0FDd0FMSUFSQkFVWUVRQUpBSUFBZ0Ftc2lCVUVIVFFSQUlBQWdBaTBBQURvQUFDQUFJQUl0QUFFNkFBRWdBQ0FDTFFBQ09nQUNJQUFnQWkwQUF6b0FBeUFBSUFJZ0JVRUNkQ0lGUWNBZWFpZ0NBR29pQWlnQUFEWUFCQ0FDSUFWQjRCNXFLQUlBYXlFQ0RBRUxJQUFnQWlrQUFEY0FBQXNnQWtFSWFpRUNJQUJCQ0dvaEFBc2dBU0FHVHdSQUlBQWdBMm9oQVNBRVFRRkhJQUFnQW10QkQwcHlSUVJBQTBBZ0FDQUNLUUFBTndBQUlBSkJDR29oQWlBQVFRaHFJZ0FnQVVrTkFBd0RDd0FMSUFBZ0Fpa0FBRGNBQUNBQUlBSXBBQWczQUFnZ0EwRVJTUTBCSUFCQkVHb2hBQU5BSUFBZ0Fpa0FFRGNBQUNBQUlBSXBBQmczQUFnZ0FDQUNLUUFnTndBUUlBQWdBaWtBS0RjQUdDQUNRU0JxSVFJZ0FFRWdhaUlBSUFGSkRRQUxEQUVMQWtBZ0FDQUJTd1JBSUFBaEFRd0JDeUFCSUFCcklRVUNRQ0FFUVFGSElBQWdBbXRCRDBweVJRUkFJQUloQXdOQUlBQWdBeWtBQURjQUFDQURRUWhxSVFNZ0FFRUlhaUlBSUFGSkRRQUxEQUVMSUFBZ0Fpa0FBRGNBQUNBQUlBSXBBQWczQUFnZ0JVRVJTQTBBSUFCQkVHb2hBQ0FDSVFNRFFDQUFJQU1wQUJBM0FBQWdBQ0FES1FBWU53QUlJQUFnQXlrQUlEY0FFQ0FBSUFNcEFDZzNBQmdnQTBFZ2FpRURJQUJCSUdvaUFDQUJTUTBBQ3dzZ0FpQUZhaUVDQ3dOQUlBRWdCazhOQVNBQklBSXRBQUE2QUFBZ0FVRUJhaUVCSUFKQkFXb2hBZ3dBQ3dBTEM2NEhBZ1YvQVg0akFFR0FBV3NpRVNRQUlCRWdBellDZkVGL0lROENRQUpBQWtBQ1FBSkFJQUlPQkFFQUF3SUVDeUFHUlFSQVFiaC9JUThNQkF0QmJDRVBJQVV0QUFBaUFpQURTdzBESUFnZ0FrRUNkQ0lDYWlnQ0FDRURJQUlnQjJvb0FnQWhBaUFBUVFBNkFBc2dBRUlBTndJQUlBQWdBallDRENBQUlBTTZBQW9nQUVFQU93RUlJQUVnQURZQ0FFRUJJUThNQXdzZ0FTQUpOZ0lBUVFBaER3d0NDeUFLUlFSQVFXd2hEd3dDQzBFQUlROGdDMFVnREVFWlNISU5BVUVJSUFSMFFRaHFJUUJCQUNFREEwQWdBQ0FEVFEwQ0lBTkJRR3NoQXd3QUN3QUxRV3doRHlBUklCRkIvQUJxSUJGQitBQnFJQVVnQmhBTUlnTkJpSDlMRFFBZ0VTZ0NlQ0lDSUFSTERRQWdFU2dDZkVFQmFpRUpJQUJCQ0dvaEMwR0FnQUlnQW5SQkVIVWhCVUVCSVJCQkFTQUNkQ0lQUVFGcklnb2hFZ05BSUFrZ0RrY0VRQUpBSUJFZ0RrRUJkQ0lFYWk4QkFDSU1RZi8vQTBZRVFDQUxJQkpCQTNScUlBNDJBZ1FnRWtFQmF5RVNRUUVoREF3QkN5QVFRUUFnQlNBTXdVb2JJUkFMSUFRZ0RXb2dERHNCQUNBT1FRRnFJUTRNQVFzTElBQWdBallDQkNBQUlCQTJBZ0FDUUNBS0lCSkdCRUFnRFVIcUFHb2hCa0VBSVJCQkFDRU1BMEFnQ1NBUVJnUkFJQTlCQTNZZ0QwRUJkbXBCQTJvaUJVRUJkQ0VFUVFBaERFRUFJUklEUUVFQUlRNGdEeUFTVFEwRUEwQWdEa0VDUndSQUlBc2dCU0FPYkNBTWFpQUtjVUVEZEdvZ0JpQU9JQkpxYWkwQUFEWUNCQ0FPUVFGcUlRNE1BUXNMSUJKQkFtb2hFaUFFSUF4cUlBcHhJUXdNQUFzQUJTQVJJQkJCQVhScUxnRUFJUVVnQmlBTWFpSUVJQk0zQUFCQkNDRU9BMEFnQlNBT1NnUkFJQVFnRG1vZ0V6Y0FBQ0FPUVFocUlRNE1BUXNMSUJOQ2dZS0VpSkNnd0lBQmZDRVRJQkJCQVdvaEVDQUZJQXhxSVF3TUFRc0FDd0FMSUE5QkEzWWdEMEVCZG1wQkEyb2hCVUVBSVJCQkFDRU9BMEFnQ1NBUVJnMEJRUUFoRENBUklCQkJBWFJxTGdFQUlnUkJBQ0FFUVFCS0d5RUVBMEFnQkNBTVJ3UkFJQXNnRGtFRGRHb2dFRFlDQkFOQUlBVWdEbW9nQ25FaURpQVNTdzBBQ3lBTVFRRnFJUXdNQVFzTElCQkJBV29oRUF3QUN3QUxJQUpCQVdvaEJVRUFJUXdEUUNBTUlBOUhCRUFnRFNBTElBeEJBM1JxSWdrb0FnUWlCRUVCZEdvaUFpQUNMd0VBSWdaQkFXbzdBUUFnQ1NBRklBWm5RV0J6YWlJQ09nQURJQWtnQmlBQ2RDQVBhenNCQUNBSklBZ2dCRUVDZENJQ2FpZ0NBRG9BQWlBSklBSWdCMm9vQWdBMkFnUWdERUVCYWlFTURBRUxDeUFCSUFBMkFnQWdBeUVQQ3lBUlFZQUJhaVFBSUE4TDdWb0NPMzhHZmlNQVFlQUJheUlFSkFBQ1FFR3c3QWtRQlNJRlJRUkFRVUFoQnd3QkN5QUZRZ0EzQXZUcUFTQUZRUUEyQXNUckFTQUZRUUEyQXJUckFTQUZRZ0EzQXB6ckFTQUZRUUEyQXJqcEFTQUZRUUEyQXF6c0NTQUZRZ0EzQXRUckFTQUZRZ0EzQXF6ckFTQUZRZ0EzQTRqckFTQUZRZ0EzQXVUcUFTQUZRZ0EzQXVUckFTQUZRWUdBZ01BQU5nSzg2d0VnQlVJQU53S2s2d0VnQlVIODZnRnFRUUEyQWdBZ0JVR1E2d0ZxUWdBM0F3QWdCUkFZSUFWQnJOVUJhaUVVSUFWQitPc0JhaUVjSUFWQnNPb0JhaUVpSUFWQm9EQnFJU29nQlVHWUlHb2hLeUFGUWFqUUFHb2hIaUFGUVJCcUlTd2dCVUVJYWlFb0lBVkJCR29oTFNBRlFjRHBBV29oS1NBRlFZanJBV29nQkVHVUFXb2hMeUFFUVl3QmFpRXdJQVJCaEFGcUlURWdCRUhjQUdvaE1pQUVRZFFBYWlFeklBUkJ6QUJxSVRRZ0FDRWRBa0FDUUFKQUFrQUNRQU5BUVFGQkJTQUZLQUxrNmdFYklRWUNRQU5BSUFNZ0Jra05BU0FDS0FBQVFYQnhRZERVdE1JQlJnUkFRYmgvSVFjZ0EwRUlTUTBJSUFJb0FBUWlEa0YzU3dSQVFYSWhCd3dKQ3lBRElBNUJDR29pQ1VrTkNDQU9RWUIvU3dSQUlBa2hCd3dKQ3lBRElBbHJJUU1nQWlBSmFpRUNEQUVMQ3lBRlFnQTNBcXpwQVNBRlFnQTNBK2pwQVNBRlFRQTJBcGpyQVNBRlFnQTNBNERxQVNBRlFnTTNBL2pwQVNBRlFiVHBBV3BDQURjQ0FDQUZRZkRwQVdwQ0FEY0RBQ0FGUWFqUUFHb2lDVUdNZ0lEZ0FEWUNBQ0FGUWF6UUFXcEI0QklwQWdBM0FnQWdCVUcwMEFGcVFlZ1NLQUlBTmdJQUlBVWdCVUVRYWpZQ0FDQUZJQVZCb0RCcU5nSUVJQVVnQlVHWUlHbzJBZ2dnQlNBSk5nSU1JQVZCQVVFRklBVW9BdVRxQVJzMkFyenBBUUpBSUFGRkRRQWdCU2dDck9rQklna2dIVVlOQUNBRklBazJBcmpwQVNBRklCMDJBcXpwQVNBRktBS3c2UUVoRGlBRklCMDJBckRwQVNBRklCMGdEaUFKYTJvMkFyVHBBUXRCdUg4aENTQURRUVZCQ1NBRktBTGs2Z0VpQmh0SkRRVWdBa0VCUVFVZ0Joc2dCaEFhSWc1QmlIOUxCRUFnRGlFSkRBVUxJQU1nRGtFRGFra05CU0FwSUFJZ0RpQUdFQmtpQmtHSWYwc0VRQ0FHSVFrTUJRc2dCZzBGQWtBQ1FDQUZLQUtvNndGQkFVY05BQ0FGS0FLazZ3RWlDVVVOQUNBRktBS1U2d0ZGRFFBZ0NTZ0NCRUVCYXlJSElBVW9BdHpwQVNJS3JVS0hsYSt2bUxiZW01NS9ma0xKejlteThlVzY2aWVGUWhlSlFzL1cwNzdTeDZ2WlFuNUMrZlBkOFpuMm1hc1dmQ0kvUWlHSUlEK0ZRcy9XMDc3U3g2dlpRbjRpUDBJZGlDQS9oVUw1ODkzeG1mYVpxeForSWo5Q0lJZ2dQNFduY1NFR0lBa29BZ0FoRlFOQVFRQWhDQUpBSUJVZ0JrRUNkR29vQWdBaUNVVU5BQ0FKS0FJSVFRaEpEUUFnQ1NnQ0JDSVNLQUFBUWJmSXd1RitSdzBBSUJJb0FBUWhDQXNnQ0NBS1J3UkFJQVlnQjNGQkFXb2hCaUFJRFFFTEN5QUpSUTBBSUFVUUdDQUZRWDgyQXFEckFTQUZJQWsyQXBUckFTQUZJQVVvQXR6cEFTSUlOZ0tZNndFTUFRc2dCU2dDM09rQklRZ0xBa0FnQ0VVTkFDQUZLQUtZNndFZ0NFWU5BRUZnSVFrTUJnc0NRQ0FGS0FMZzZRRUVRQ0FGSUFVb0F1anFBU0lKUlRZQzdPb0JJQWtOQVNBRlF2bnEwTkRueWFIazRRQTNBNmpxQVNBRlFnQTNBNkRxQVNBRlFzL1cwNzdTeDZ2WlFqY0RtT29CSUFWQzF1dUM3dXI5aWZYZ0FEY0RrT29CSUFWQ0FEY0RpT29CSUNKQkFFRW9FQU1hREFFTElBVkJBRFlDN09vQkN5QUJJQjFxSVNVZ0JTQUZLUVBvNlFFZ0RxMThOd1BvNlFFZ0F5QU9heUVESUFJZ0Rtb2hBaUFkSVE0RFFDQUNJQU1nQkVFc2FoQWRJaFZCaUg5TEJFQWdGU0VKREFZTElBTkJBMnNpTlNBVlNRMEVJQUpCQTJvaEcwRnNJUWtDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FDQUVLQUlzRGdNQ0FRQVZDeUFWUWYvL0Iwc05FeUFWUVFOSkRSSWdCU2tEeU9rQklUOENRQUpBSUJzdEFBQWlDVUVEY1NJYVFRRnJEZ01HQVFBSEN5QUZLQUtBNmdFTkFFRmlJUWtNRlFzZ0ZVRUZTUTBTSUJzb0FBQWhBd0ovQWtBQ1FBSkFJQWxCQW5aQkEzRWlDVUVDYXc0Q0FRSUFDeUFKUVFCSElRY2dBMEVFZGtIL0IzRWhDMEVESVFZZ0EwRU9ka0gvQjNFTUFndEJCQ0VHSUFOQkJIWkIvLzhBY1NFTFFRRWhCeUFEUVJKMkRBRUxJQU5CQkhaQi8vOFBjU0lMUVlDQUNFc05FMEVCSVFkQkJTRUdJQUl0QUFkQkNuUWdBMEVXZG5JTElnZ2dCbW9pQ1NBVlN3MFNBa0FnQzBHQkJra05BQ0FGS0FLYzZ3RkZEUUJCQUNFREEwQWdBMEdEZ0FGTERRRWdBMEZBYXlFRERBQUxBQXNnQmlBYmFpRVBJQnBCQTBjTkJpQUZLQUlNSWdJdEFBRkJDSFFoQXlBSERRY2dBMFVOQ0NBRVFmQUFhaUFQSUFnUURTSURRWWgvU3cwSklBSkJCR29oQmlBTElCeHFJaEpCQTJzaENrRUFJQUl2QVFKclFSOXhJUWNnSENFREEwQWdCRUh3QUdvUUQwVWdBeUFLU1hFRVFDQURJQVlnQkNnQ2NDSUlJQVFvQW5RaUQzUWdCM1pCQW5ScUlnSXZBUUE3QUFBZ0F5QUNMUUFEYWlJRElBWWdDQ0FQSUFJdEFBSnFJZ2gwSUFkMlFRSjBhaUlDTHdFQU93QUFJQVFnQ0NBQ0xRQUNhallDZENBRElBSXRBQU5xSVFNTUFRVWdFa0VDYXlFSUEwQWdCRUh3QUdvUUR5RVBJQVFvQW5BaENpQUVLQUowSVFJZ0F5QUlTeUFQY2tVRVFDQURJQVlnQ2lBQ2RDQUhka0VDZEdvaUNpOEJBRHNBQUNBRUlBSWdDaTBBQW1vMkFuUWdBeUFLTFFBRGFpRUREQUVMQ3dOQUlBTWdDRTBFUUNBRElBWWdDaUFDZENBSGRrRUNkR29pRHk4QkFEc0FBQ0FESUE4dEFBTnFJUU1nQWlBUExRQUNhaUVDREFFTEN3SkFJQU1nRWs4TkFDQURJQVlnQ2lBQ2RDQUhka0VDZEdvaUF5MEFBRG9BQUNBRExRQURRUUZHQkVBZ0FpQURMUUFDYWlFQ0RBRUxJQUpCSDBzTkFFRWdJQUlnQXkwQUFtb2lBaUFDUVNCUEd5RUNDMEZzUVd3Z0N5QUVLQUo0SUFRb0FueEhHeUFDUVNCSEd5RUREQXNMQUFzQUN5QUVLQUkwSWdJZ0pTQU9hMHNOQ2lBT1JRUkFRUUFoQ1NBQ0RRSU1EZ3NnRGlBYkxRQUFJQUlRQXhvZ0FpRUpEQXdMSUJVZ0pTQU9hMHNOQ1NBT0RRRkJBQ0VKSUJWRkRRd0xRYlovSVFrTUVRc2dEaUFiSUJVUUFob2dGU0VKREFvTElCd2dHd0ovQWtBQ1FBSkFJQWxCQW5aQkEzRkJBV3NPQXdFQUFnQUxJQWxCQTNZaEEwRUJEQUlMSUJzdkFBQkJCSFloQTBFQ0RBRUxJQlZCQkVrTkRpQUNMd0FESUFJdEFBVkJFSFJ5SWdKQmo0Q0FBVXNORGlBQ1FRUjJJUU5CQXdzaUFtb3RBQUFnQTBFZ2FoQURJUWtnQlNBRE5nS0E2d0VnQlNBSk5nTHc2Z0VnQWtFQmFpRUpEQVVMSUJVQ2Z3SkFBa0FDUUNBSlFRSjJRUU54UVFGckRnTUJBQUlBQ3lBSlFRTjJJUU5CQVF3Q0N5QWJMd0FBUVFSMklRTkJBZ3dCQ3lBQ0x3QURJQUl0QUFWQkVIUnlRUVIySVFOQkF3c2lBaUFEYWlJSlFTQnFTUVJBSUFrZ0ZVc05EU0FjSUFJZ0cyb2dBeEFDSVFJZ0JTQUROZ0tBNndFZ0JTQUNOZ0x3NmdFZ0FpQURhaUlDUWdBM0FCZ2dBa0lBTndBUUlBSkNBRGNBQ0NBQ1FnQTNBQUFNQlFzZ0JTQUROZ0tBNndFZ0JTQUNJQnRxTmdMdzZnRU1CQXNnQjBVRVFDQWVJQThnQ0NBVUVCUWlBa0dJZjBzZ0FpQUlUM0lORENBY0lBc2dBaUFQYWlBSUlBSnJJQjRRRlNFRERBTUxJQXRGSUFoRmNnMExJQXRCQ0hZaUF5QUlJQXRKQkg4Z0NFRUVkQ0FMYmdWQkR3dEJHR3dpQWtHTUNHb29BZ0JzSUFKQmlBaHFLQUlBYWlJR1FRTjJJQVpxSUFKQmdBaHFLQUlBSUFKQmhBaHFLQUlBSUFOc2Fra0VRQ01BUVJCckloQWtBQ0FlS0FJQUlRTWdGRUh3QkdwQkFFSHNBQkFESVFaQlZDRUNBa0FnQTBIL0FYRWlERUVNU3cwQUFrQWdGRUhjQ1dvZ0JpQVFRUWhxSUJCQkRHb2dEeUFJSUJSQjNBdHFJaGNRQ3lJU1FZaC9TdzBBSUJBb0Fnd2lCaUFNU3cwQklCUkJxQVZxSVEwZ0ZFR2tCV29oTmlBZVFRUnFJUkVnQTBHQWdJQjRjU0UzSUFaQkFXb2lFeUVDSUFZaEF3TkFJQUlpQjBFQmF5RUNJQU1pQ2tFQmF5RURJQlFnQ2tFQ2RHb29BdkFFUlEwQUMwRUJJQWNnQjBFQlRSc2hGa0VBSVFkQkFTRUNBMEFnQWlBV1J3UkFJQlFnQWtFQ2RDSURhaWdDOEFRaEdDQURJQTFxSUFjMkFnQWdBa0VCYWlFQ0lBY2dHR29oQnd3QkN3c2dEU0FITmdJQVFRQWhBaUFRS0FJSUlRTURRQ0FDSUFOSEJFQWdEU0FDSUJScVFkd0phaTBBQUNJWVFRSjBhaUlaSUJrb0FnQWlHVUVCYWpZQ0FDQVVJQmxCQVhScUloa2dHRG9BM1FVZ0dTQUNPZ0RjQlNBQ1FRRnFJUUlNQVFzTFFRQWhBeUFOUVFBMkFnQWdEQ0FHUVg5emFpRUdRUUVoQWdOQUlBSWdGa2NFUUNBVUlBSkJBblJxSWcwZ0F6WUNBQ0FOS0FMd0JDQUNJQVpxZENBRGFpRURJQUpCQVdvaEFnd0JDd3NnRENBVElBcHJJZ1pyUVFGcUlRb2dCaUVEQTBBZ0F5QUtTUVJBSUJRZ0EwRTBiR29oRFVFQklRSURRQ0FDSUJaSEJFQWdEU0FDUVFKMEloaHFJQlFnR0dvb0FnQWdBM1kyQWdBZ0FrRUJhaUVDREFFTEN5QURRUUZxSVFNTUFRc0xJQmNnRkVFMEVBSWhPQ0FVUVpBTWFpRTVJQk1nREdzaE9pQVVRZHdGYWlFWFFRQWhDZ05BQWtBQ1FDQUhJQXBIQkVCQkFTQU1JQk1nRnlBS1FRRjBhaUlDTFFBQklnMXJJZ05ySWhoMElSa2dBaTBBQUNFV0lEZ2dEVUVDZEdvaUh5Z0NBQ0VDSUFZZ0dFMEVRQ0EyUVFFZ0F5QTZhaUlOSUExQkFVd2JJaUJCQW5RaUpHb29BZ0FoRFNBNUlCUWdBMEUwYkdwQk5CQUNJU0VnRFVFQmRDRW1JQkVnQWtFQ2RHb2hJeUFnUVFGTkRRSWdBMEVRZEVHQWdQd0hjU0FXY2tHQWdJQUljaUVnSUNFZ0pHb29BZ0FoSkVFQUlRSURRQ0FDSUNSR0RRTWdJeUFDUVFKMGFpQWdOZ0VBSUFKQkFXb2hBZ3dBQ3dBTElBSWdBaUFaYWlJTklBSWdEVXNiSVEwZ0EwRVFkRUdBZ1B3SGNTQVdja0dBZ0lBSWNpRURBMEFnQWlBTlJnMERJQkVnQWtFQ2RHb2dBellCQUNBQ1FRRnFJUUlNQUFzQUN5QWVJQXhCRUhRZ04zSWdESEpCZ0FKeU5nSUFEQU1MSUFjZ0RXc2hKQ0FYSUNacUlTWkJBQ0VOQTBBZ0RTQWtSZzBCUVFFZ0dDQVRJQ1lnRFVFQmRHb2lKeTBBQVNJQ2F5STdhM1FpUENBaElBSkJBblJxSWlBb0FnQWlBbW9oUFNBRElEdHFRUkIwUVlDQS9BZHhJQ2N0QUFCQkNIUnlJQlp5UVlDQWdCQnlJU2NEUUNBaklBSkJBblJxSUNjMkFRQWdBa0VCYWlJQ0lEMUpEUUFMSUNBZ0lDZ0NBQ0E4YWpZQ0FDQU5RUUZxSVEwTUFBc0FDeUFmSUI4b0FnQWdHV28yQWdBZ0NrRUJhaUVLREFBTEFBc2dFaUVDQ3lBUVFSQnFKQUFnQWtHSWYwc2dBaUFJVDNJTkRDQWNJQXNnQWlBUGFpQUlJQUpySUI0UUZpRUREQU1MSUI0Z0R5QUlJQlFRRkNJQ1FZaC9TeUFDSUFoUGNnMExJQndnQ3lBQ0lBOXFJQWdnQW1zZ0hoQVhJUU1NQWdzZ0F3UkFJQndnQ3lBUElBZ2dBaEFXSVFNTUFnc2dIQ0FMSUE4Z0NDQUNFQmNoQXd3QkN5QWNJQXNnRHlBSUlBSVFGU0VEQ3lBRFFZaC9TdzBJSUFVZ0N6WUNnT3NCSUFVZ0hEWUM4T29CSUFWQkFUWUNnT29CSUJwQkFrWUVRQ0FGSUI0MkFnd0xJQXNnSEdvaUFrSUFOd0FBSUFKQ0FEY0FHQ0FDUWdBM0FCQWdBa0lBTndBSUlBbEJpSDlMRFFvTElBa2dGVVlOQ0NBVklBbHJJUVlnQlNnQ25Pc0JJUW9DUUNBSklCdHFJZ010QUFBaUQwVUVRRUVCSVFKQkFDRVBRYmgvSVFrZ0JrRUJSZzBCREFzTEFuOGdBMEVCYWlBUHdDSUNRUUJPRFFBYUlBSkJmMFlFUUNBR1FRTklEUXNnQXk4QUFVR0EvZ0ZxSVE4Z0EwRURhZ3dCQ3lBR1FRSklEUW9nQXkwQUFTQVBRUWgwY2tHQWdBSnJJUThnQTBFQ2Fnc2hFa0c0ZnlFSklCSkJBV29pQWlBVklCdHFJZ2RMRFFvZ0xDQUZJQkl0QUFBaUVrRUdka0VqUVFrZ0FpQUhJQUpyUWNBUVFkQVJRZkFTSUFVb0FvVHFBU0FLSUE4Z0ZCQWhJZ2xCaUg5TERRZ2dLeUFvSUJKQkJIWkJBM0ZCSDBFSUlBSWdDV29pQWlBSElBSnJRWUFMUVlBTVFZQVhJQVVvQW9UcUFTQUZLQUtjNndFZ0R5QVVFQ0VpQ0VHSWYwc05DRUZzSVFrZ0tpQXRJQkpCQW5aQkEzRkJORUVKSUFJZ0NHb2lBaUFISUFKclFZQU5RZUFPUVpBWklBVW9Bb1RxQVNBRktBS2M2d0VnRHlBVUVDRWlCMEdJZjBzTkNpQUNJQWRxSUFOcklnSWhDU0FDUVloL1N3MEtDeUFPSUE5QkFFeHlEUUVMUWJwL0lRa01DQXNnSlNBT2F5RUpJQVlnQW1zaEJpQUNJQU5xSVFjQ1FBSkFBa0FnQ2tVRVFDQVBRUWxJSUFVcEE4anBBVUtCZ0lBSVZISU5BaUFvS0FJQUlnSkJDR29oRWlBQ0tBSUVJUXBCQUNFRFFRQWhBZ05BSUFNZ0NuWkZCRUFnQWlBU0lBTkJBM1JxTFFBQ1FSWkxhaUVDSUFOQkFXb2hBd3dCQ3dzZ0JVRUFOZ0tjNndFZ0FrRUlJQXByZEVFVVR3MEJEQU1MSUFWQkFEWUNuT3NCQ3lBRUlBVW9BdkRxQVNJRE5nTGNBU0FKSUE1cUlSWWdBeUFGS0FLQTZ3RnFJUmNDUUNBUFJRUkFJQTRoQnd3QkN5QUZLQUs0NlFFaEdpQUZLQUswNlFFaEdDQUZLQUt3NlFFaEVpQUZRUUUyQW9UcUFVRUFJUU1EUUNBRFFRTkhCRUFnQkNBRFFRSjBJZ0pxSUFJZ0JXcEJyTkFCYWlnQ0FEWUNaQ0FEUVFGcUlRTU1BUXNMUVd3aENTQUVRVGhxSWdJZ0J5QUdFQTFCaUg5TERRTkJDQ0FQSUE5QkNFNGJJUjhnTkNBQ0lBVW9BZ0FRSGlBeklBSWdCU2dDQ0JBZUlESWdBaUFGS0FJRUVCNGdEaUFTYXlFWlFRQWhDQU5BSUFSQk9Hb1FEMEVEUmlBSUlCOU9ja1VFUUNBRUtBSlFJQVFvQWt4QkEzUnFLUUlBSWtDbklnZEJFSFlpRVVIL0FYRWhDeUFFS0FKZ0lBUW9BbHhCQTNScUtRSUFJa0duSWd4QkVIWWlJVUgvQVhFaEVDQUVLQUpZSUFRb0FsUkJBM1JxS1FJQUlrSkNJSWluSVFZZ1FVSWdpQ0JBUWlDSXB5RURBa0FnUWtJUWlLY2lDa0gvQVhFaUFrRUNUd1JBQWtBZ0FrRVpTU0EvUW9HQWdCQlVja1VFUUNBRVFTQWdCQ2dDUENJS2F5SU5JQUlnQWlBTlN4c2lFeUFLYWpZQ1BDQUdJQVFvQWpnZ0NuUkJBQ0FUYTNZZ0FpQVRheUlUZEdvaENpQUVRVGhxRUE4YUlBSWdEVTBOQVNBRUlBUW9BandpQWlBVGFqWUNQQ0FFS0FJNElBSjBRUUFnRTJ0MklBcHFJUW9NQVFzZ0JDQUNJQVFvQWp3aURXbzJBandnQkNnQ09DQU5kRUVBSUFwcmRpQUdhaUVLSUFSQk9Hb1FEeG9MSUFRcEFtUWhSQ0FFSUFvMkFtUWdCQ0JFTndKb0RBRUxBa0FnQWtVRVFDQURCRUFnQkNnQ1pDRUtEQU1MSUFRb0FtZ2hDZ3dCQ3lBRUlBUW9BandpQWtFQmFqWUNQQUovSUFZZ0EwVnFJQVFvQWpnZ0FuUkJIM1pxSWdKQkEwWUVRQ0FFS0FKa1FRRnJEQUVMSUFKQkFuUWdCR29vQW1RTElnWkZJQVpxSVFvZ0FrRUJSd1JBSUFRZ0JDZ0NhRFlDYkFzTElBUWdCQ2dDWkRZQ2FDQUVJQW8yQW1RTHB5RUNJRUZDZ0lEOEI0TlFSUVJBSUFRZ0JDZ0NQQ0lHSUJCcU5nSThJQVFvQWpnZ0JuUkJBQ0FoYTNZZ0Ftb2hBZ3NnQ3lBUWFrRVVUd1JBSUFSQk9Hb1FEeG9MSUVCQ2dJRDhCNE5RUlFSQUlBUWdCQ2dDUENJR0lBdHFOZ0k4SUFRb0FqZ2dCblJCQUNBUmEzWWdBMm9oQXdzZ0JFRTRhaEFQR2lBRUlBUW9BamdpQmtFQUlBZEJHSFlpQ3lBRUtBSThhaUlRYTNZZ0MwRUNkRUdnSFdvb0FnQnhJQWRCLy84RGNXbzJBa3dnQkNBUUlBeEJHSFlpQjJvaUN6WUNQQ0FFSUFkQkFuUkJvQjFxS0FJQUlBWkJBQ0FMYTNaeElBeEIvLzhEY1dvMkFsd2dCRUU0YWhBUEdpQUVJRUtuSWdaQkdIWWlCeUFFS0FJOGFpSUxOZ0k4SUFRZ0IwRUNkRUdnSFdvb0FnQWdCQ2dDT0VFQUlBdHJkbkVnQmtILy93TnhhallDVkNBRVFmQUFhaUFJUVF4c2FpSUdJQW8yQWdnZ0JpQUNOZ0lFSUFZZ0F6WUNBQ0FJUVFGcUlRZ2dBeUFaYWlBQ2FpRVpEQUVMQ3lBSUlCOUlEUU1nRmtFZ2F5RWhJQTRoQndOQUlBUkJPR29RRDBFRFJpQUlJQTlPY2tVRVFDQUVLQUpRSUFRb0FreEJBM1JxS1FJQUlrQ25JZ1pCRUhZaUkwSC9BWEVoQ2lBRUtBSmdJQVFvQWx4QkEzUnFLUUlBSWtHbklnMUJFSFlpSUVIL0FYRWhFeUFFS0FKWUlBUW9BbFJCQTNScUtRSUFJa0pDSUlpbklRTWdRVUlnaUNCQVFpQ0lweUVMQWtBZ1FrSVFpS2NpREVIL0FYRWlBa0VDVHdSQUFrQWdBa0VaU1NBL1FvR0FnQkJVY2tVRVFDQUVRU0FnQkNnQ1BDSU1heUlSSUFJZ0FpQVJTeHNpRUNBTWFqWUNQQ0FESUFRb0FqZ2dESFJCQUNBUWEzWWdBaUFRYXlJTWRHb2hFQ0FFUVRocUVBOGFJQUlnRVUwTkFTQUVJQVFvQWp3aUFpQU1hallDUENBRUtBSTRJQUowUVFBZ0RHdDJJQkJxSVJBTUFRc2dCQ0FDSUFRb0Fqd2lFR28yQWp3Z0JDZ0NPQ0FRZEVFQUlBeHJkaUFEYWlFUUlBUkJPR29RRHhvTElBUXBBbVFoUkNBRUlCQTJBbVFnQkNCRU53Sm9EQUVMQWtBZ0FrVUVRQ0FMQkVBZ0JDZ0NaQ0VRREFNTElBUW9BbWdoRUF3QkN5QUVJQVFvQWp3aUFrRUJhallDUEFKL0lBTWdDMFZxSUFRb0FqZ2dBblJCSDNacUlnSkJBMFlFUUNBRUtBSmtRUUZyREFFTElBSkJBblFnQkdvb0FtUUxJZ05GSUFOcUlSQWdBa0VCUndSQUlBUWdCQ2dDYURZQ2JBc0xJQVFnQkNnQ1pEWUNhQ0FFSUJBMkFtUUxweUVNSUVGQ2dJRDhCNE5RUlFSQUlBUWdCQ2dDUENJQ0lCTnFOZ0k4SUFRb0FqZ2dBblJCQUNBZ2EzWWdER29oREFzZ0NpQVRha0VVVHdSQUlBUkJPR29RRHhvTElFQkNnSUQ4QjROUVJRUkFJQVFnQkNnQ1BDSUNJQXBxTmdJOElBUW9BamdnQW5SQkFDQWphM1lnQzJvaEN3c2dCRUU0YWhBUEdpQUVJQVFvQWpnaUFrRUFJQVpCR0hZaUF5QUVLQUk4YWlJS2EzWWdBMEVDZEVHZ0hXb29BZ0J4SUFaQi8vOERjV28yQWt3Z0JDQUtJQTFCR0hZaUEyb2lCallDUENBRUlBTkJBblJCb0IxcUtBSUFJQUpCQUNBR2EzWnhJQTFCLy84RGNXbzJBbHdnQkVFNGFoQVBHaUFFSUVLbklnSkJHSFlpQXlBRUtBSThhaUlHTmdJOElBUWdBMEVDZEVHZ0hXb29BZ0FnQkNnQ09FRUFJQVpyZG5FZ0FrSC8vd054YWpZQ1ZBSkFBa0FDUUNBRUtBTGNBU0lESUFSQjhBQnFJQWhCQjNGQkRHeHFJaE1vQWdBaUVXb2lJeUFYU3cwQUlBY2dFeWdDQkNJTklCRnFJZ3BxSUNGTERRQWdDa0VnYWlBV0lBZHJUUTBCQ3lBRUlCTW9BZ2cyQWhnZ0JDQVRLUUlBTndNUUlBY2dGaUFFUVJCcUlBUkIzQUZxSUJjZ0VpQVlJQm9RSHlFS0RBRUxJQWNnRVdvaEFpQVRLQUlJSVFZZ0J5QURLUUFBTndBQUlBY2dBeWtBQ0RjQUNBSkFJQkZCRVVrTkFDQUhJQU1wQUJBM0FCQWdCeUFES1FBWU53QVlJQkZCRUd0QkVVZ05BQ0FEUVJCcUlRTWdCMEVnYWlFUkEwQWdFU0FES1FBUU53QUFJQkVnQXlrQUdEY0FDQ0FSSUFNcEFDQTNBQkFnRVNBREtRQW9Od0FZSUFOQklHb2hBeUFSUVNCcUloRWdBa2tOQUFzTElBSWdCbXNoQXlBRUlDTTJBdHdCSUFJZ0Vtc2dCa2tFUUNBR0lBSWdHR3RMRFFjZ0dpQWFJQU1nRW1zaUEyb2lFU0FOYWs4RVFDQUNJQkVnRFJBS0dnd0NDeUFESUExcUlRMGdBaUFSUVFBZ0Eyc1FDaUFEYXlFQ0lCSWhBd3NnQmtFUVR3UkFJQUlnQXlrQUFEY0FBQ0FDSUFNcEFBZzNBQWdnRFVFUlNBMEJJQUlnRFdvaEJpQUNRUkJxSVFJRFFDQUNJQU1wQUJBM0FBQWdBaUFES1FBWU53QUlJQUlnQXlrQUlEY0FFQ0FDSUFNcEFDZzNBQmdnQTBFZ2FpRURJQUpCSUdvaUFpQUdTUTBBQ3d3QkN3SkFJQVpCQjAwRVFDQUNJQU10QUFBNkFBQWdBaUFETFFBQk9nQUJJQUlnQXkwQUFqb0FBaUFDSUFNdEFBTTZBQU1nQWlBRElBWkJBblFpQmtIQUhtb29BZ0JxSWdNb0FBQTJBQVFnQXlBR1FlQWVhaWdDQUdzaEF3d0JDeUFDSUFNcEFBQTNBQUFMSUExQkNVa05BQ0FDSUExcUlSRWdBa0VJYWlJR0lBTkJDR29pQTJ0QkQwd0VRQU5BSUFZZ0F5a0FBRGNBQUNBRFFRaHFJUU1nQmtFSWFpSUdJQkZKRFFBTUFnc0FDeUFHSUFNcEFBQTNBQUFnQmlBREtRQUlOd0FJSUExQkdVZ05BQ0FDUVJocUlRSURRQ0FDSUFNcEFCQTNBQUFnQWlBREtRQVlOd0FJSUFJZ0F5a0FJRGNBRUNBQ0lBTXBBQ2czQUJnZ0EwRWdhaUVESUFKQklHb2lBaUFSU1EwQUN3c2dDa0dJZjBzRVFDQUtJUWtNQmdVZ0V5QVFOZ0lJSUJNZ0REWUNCQ0FUSUFzMkFnQWdDRUVCYWlFSUlBY2dDbW9oQnlBTElCbHFJQXhxSVJrTUFnc0FDd3NnQ0NBUFNBMERJQWdnSDJzaEJnTkFBa0FnQmlBUFRnUkFRUUFoQXdOQUlBTkJBMFlOQWlBRklBTkJBblFpQW1wQnJOQUJhaUFDSUFScUtBSmtOZ0lBSUFOQkFXb2hBd3dBQ3dBTEFrQUNRQUpBSUFRb0F0d0JJZ01nQkVId0FHb2dCa0VIY1VFTWJHb2lDQ2dDQUNJTWFpSVFJQmRMRFFBZ0J5QUlLQUlFSWdzZ0RHb2lDbW9nSVVzTkFDQUtRU0JxSUJZZ0IydE5EUUVMSUFRZ0NDZ0NDRFlDS0NBRUlBZ3BBZ0EzQXlBZ0J5QVdJQVJCSUdvZ0JFSGNBV29nRnlBU0lCZ2dHaEFmSVFvTUFRc2dCeUFNYWlFQ0lBZ29BZ2doQ0NBSElBTXBBQUEzQUFBZ0J5QURLUUFJTndBSUFrQWdERUVSU1EwQUlBY2dBeWtBRURjQUVDQUhJQU1wQUJnM0FCZ2dERUVRYTBFUlNBMEFJQU5CRUdvaEF5QUhRU0JxSVF3RFFDQU1JQU1wQUJBM0FBQWdEQ0FES1FBWU53QUlJQXdnQXlrQUlEY0FFQ0FNSUFNcEFDZzNBQmdnQTBFZ2FpRURJQXhCSUdvaURDQUNTUTBBQ3dzZ0FpQUlheUVESUFRZ0VEWUMzQUVnQWlBU2F5QUlTUVJBSUFnZ0FpQVlhMHNOQnlBYUlCb2dBeUFTYXlJRGFpSU1JQXRxVHdSQUlBSWdEQ0FMRUFvYURBSUxJQU1nQzJvaEN5QUNJQXhCQUNBRGF4QUtJQU5ySVFJZ0VpRURDeUFJUVJCUEJFQWdBaUFES1FBQU53QUFJQUlnQXlrQUNEY0FDQ0FMUVJGSURRRWdBaUFMYWlFSUlBSkJFR29oQWdOQUlBSWdBeWtBRURjQUFDQUNJQU1wQUJnM0FBZ2dBaUFES1FBZ053QVFJQUlnQXlrQUtEY0FHQ0FEUVNCcUlRTWdBa0VnYWlJQ0lBaEpEUUFMREFFTEFrQWdDRUVIVFFSQUlBSWdBeTBBQURvQUFDQUNJQU10QUFFNkFBRWdBaUFETFFBQ09nQUNJQUlnQXkwQUF6b0FBeUFDSUFNZ0NFRUNkQ0lJUWNBZWFpZ0NBR29pQXlnQUFEWUFCQ0FESUFoQjRCNXFLQUlBYXlFRERBRUxJQUlnQXlrQUFEY0FBQXNnQzBFSlNRMEFJQUlnQzJvaERDQUNRUWhxSWdnZ0EwRUlhaUlEYTBFUFRBUkFBMEFnQ0NBREtRQUFOd0FBSUFOQkNHb2hBeUFJUVFocUlnZ2dERWtOQUF3Q0N3QUxJQWdnQXlrQUFEY0FBQ0FJSUFNcEFBZzNBQWdnQzBFWlNBMEFJQUpCR0dvaEFnTkFJQUlnQXlrQUVEY0FBQ0FDSUFNcEFCZzNBQWdnQWlBREtRQWdOd0FRSUFJZ0F5a0FLRGNBR0NBRFFTQnFJUU1nQWtFZ2FpSUNJQXhKRFFBTEN5QUtRWWgvU3dSQUlBb2hDUXdHQlNBR1FRRnFJUVlnQnlBS2FpRUhEQUlMQUFzTElBUW9BdHdCSVFNTFFicC9JUWtnRnlBRGF5SUNJQllnQjJ0TERRSWdCd1IvSUFjZ0F5QUNFQUlnQW1vRlFRQUxJQTVySVFrTUFnc2dCVUVBTmdLYzZ3RUxJQVFnQlNnQzhPb0JJZ00yQXR3QklBa2dEbW9oRENBRElBVW9Bb0RyQVdvaEVBSkFJQTlGQkVBZ0RpRUdEQUVMSUFVb0FyanBBU0VOSUFVb0FyVHBBU0VUSUFVb0FyRHBBU0VTSUFWQkFUWUNoT29CUVFBaEF3TkFJQU5CQTBjRVFDQUVJQU5CQW5RaUFtb2dBaUFGYWtHczBBRnFLQUlBTmdLY0FTQURRUUZxSVFNTUFRc0xRV3doQ1NBRVFmQUFhaUlDSUFjZ0JoQU5RWWgvU3cwQklERWdBaUFGS0FJQUVCNGdNQ0FDSUFVb0FnZ1FIaUF2SUFJZ0JTZ0NCQkFlSUF4QklHc2hHQ0FPSVFZRFFDQUVLQUtJQVNBRUtBS0VBVUVEZEdvcEFnQWlRS2NpQ2tFUWRpSVpRZjhCY1NFTElBUW9BcGdCSUFRb0FwUUJRUU4wYWlrQ0FDSkJweUlXUVJCMkloOUIvd0Z4SVJvZ0JDZ0NrQUVnQkNnQ2pBRkJBM1JxS1FJQUlrSkNJSWluSVFjZ1FVSWdpQ0JBUWlDSXB5RURBa0FnUWtJUWlLY2lDRUgvQVhFaUFrRUNUd1JBQWtBZ0FrRVpTU0EvUW9HQWdCQlVja1VFUUNBRVFTQWdCQ2dDZENJSWF5SVJJQUlnQWlBUlN4c2lGeUFJYWpZQ2RDQUhJQVFvQW5BZ0NIUkJBQ0FYYTNZZ0FpQVhheUlYZEdvaENDQUVRZkFBYWhBUEdpQUNJQkZORFFFZ0JDQUVLQUowSWdJZ0YybzJBblFnQkNnQ2NDQUNkRUVBSUJkcmRpQUlhaUVJREFFTElBUWdBaUFFS0FKMEloRnFOZ0owSUFRb0FuQWdFWFJCQUNBSWEzWWdCMm9oQ0NBRVFmQUFhaEFQR2dzZ0JDa0NuQUVoUkNBRUlBZzJBcHdCSUFRZ1JEY0NvQUVNQVFzQ1FDQUNSUVJBSUFNRVFDQUVLQUtjQVNFSURBTUxJQVFvQXFBQklRZ01BUXNnQkNBRUtBSjBJZ0pCQVdvMkFuUUNmeUFISUFORmFpQUVLQUp3SUFKMFFSOTJhaUlDUVFOR0JFQWdCQ2dDbkFGQkFXc01BUXNnQWtFQ2RDQUVhaWdDbkFFTElnZEZJQWRxSVFnZ0FrRUJSd1JBSUFRZ0JDZ0NvQUUyQXFRQkN3c2dCQ0FFS0FLY0FUWUNvQUVnQkNBSU5nS2NBUXVuSVFJZ1FVS0FnUHdIZzFCRkJFQWdCQ0FFS0FKMElnY2dHbW8yQW5RZ0JDZ0NjQ0FIZEVFQUlCOXJkaUFDYWlFQ0N5QUxJQnBxUVJSUEJFQWdCRUh3QUdvUUR4b0xJRUJDZ0lEOEI0TlFSUVJBSUFRZ0JDZ0NkQ0lISUF0cU5nSjBJQVFvQW5BZ0IzUkJBQ0FaYTNZZ0Eyb2hBd3NnQkVId0FHb1FEeG9nQkNBRUtBSndJZ2RCQUNBS1FSaDJJZ3NnQkNnQ2RHb2lHbXQySUF0QkFuUkJvQjFxS0FJQWNTQUtRZi8vQTNGcU5nS0VBU0FFSUJvZ0ZrRVlkaUlLYWlJTE5nSjBJQVFnQ2tFQ2RFR2dIV29vQWdBZ0IwRUFJQXRyZG5FZ0ZrSC8vd054YWpZQ2xBRWdCRUh3QUdvUUR4b2dCQ0JDcHlJSFFSaDJJZ29nQkNnQ2RHb2lDellDZENBRUlBcEJBblJCb0IxcUtBSUFJQVFvQW5CQkFDQUxhM1p4SUFkQi8vOERjV28yQW93QklBUWdBellDT0NBRUlBSTJBandnQkNBSU5nSkFBa0FDUUFKQUlBUW9BdHdCSWdzZ0Eyb2lGaUFRU3cwQUlBWWdBaUFEYWlJS2FpQVlTdzBBSUFwQklHb2dEQ0FHYTAwTkFRc2dCQ0FFUVVCcktBSUFOZ0lJSUFRZ0JDa0RPRGNEQUNBR0lBd2dCQ0FFUWR3QmFpQVFJQklnRXlBTkVCOGhDZ3dCQ3lBRElBWnFJUWNnQmlBTEtRQUFOd0FBSUFZZ0N5a0FDRGNBQ0FKQUlBTkJFVWtOQUNBR0lBc3BBQkEzQUJBZ0JpQUxLUUFZTndBWUlBTkJFR3RCRVVnTkFDQUxRUkJxSVFNZ0JrRWdhaUVMQTBBZ0N5QURLUUFRTndBQUlBc2dBeWtBR0RjQUNDQUxJQU1wQUNBM0FCQWdDeUFES1FBb053QVlJQU5CSUdvaEF5QUxRU0JxSWdzZ0Iwa05BQXNMSUFjZ0NHc2hBeUFFSUJZMkF0d0JJQWNnRW1zZ0NFa0VRQ0FJSUFjZ0UydExEUVFnRFNBTklBTWdFbXNpQTJvaUN5QUNhazhFUUNBSElBc2dBaEFLR2d3Q0N5QUhJQXRCQUNBRGF4QUtJQVFnQWlBRGFpSUNOZ0k4SUFOcklRY2dFaUVEQ3lBSVFSQlBCRUFnQnlBREtRQUFOd0FBSUFjZ0F5a0FDRGNBQ0NBQ1FSRklEUUVnQWlBSGFpRUlJQWRCRUdvaEFnTkFJQUlnQXlrQUVEY0FBQ0FDSUFNcEFCZzNBQWdnQWlBREtRQWdOd0FRSUFJZ0F5a0FLRGNBR0NBRFFTQnFJUU1nQWtFZ2FpSUNJQWhKRFFBTERBRUxBa0FnQ0VFSFRRUkFJQWNnQXkwQUFEb0FBQ0FISUFNdEFBRTZBQUVnQnlBRExRQUNPZ0FDSUFjZ0F5MEFBem9BQXlBSElBTWdDRUVDZENJSVFjQWVhaWdDQUdvaUF5Z0FBRFlBQkNBRElBaEI0QjVxS0FJQWF5RUREQUVMSUFjZ0F5a0FBRGNBQUFzZ0FrRUpTUTBBSUFJZ0Iyb2hDeUFIUVFocUlnZ2dBMEVJYWlJRGEwRVBUQVJBQTBBZ0NDQURLUUFBTndBQUlBTkJDR29oQXlBSVFRaHFJZ2dnQzBrTkFBd0NDd0FMSUFnZ0F5a0FBRGNBQUNBSUlBTXBBQWczQUFnZ0FrRVpTQTBBSUFkQkdHb2hBZ05BSUFJZ0F5a0FFRGNBQUNBQ0lBTXBBQmczQUFnZ0FpQURLUUFnTndBUUlBSWdBeWtBS0RjQUdDQURRU0JxSVFNZ0FrRWdhaUlDSUF0SkRRQUxDeUFLUVloL1N3UkFJQW9oQ1F3REN5QUdJQXBxSVFZZ0JFSHdBR29RRHlFRElBOUJBV3NpRHcwQUMwRUFJUUlnQTBFQ1NRMEJBMEFnQWtFRFJ3UkFJQVVnQWtFQ2RDSURha0dzMEFGcUlBTWdCR29vQXB3Qk5nSUFJQUpCQVdvaEFnd0JDd3NnQkNnQzNBRWhBd3RCdW44aENTQVFJQU5ySWdJZ0RDQUdhMHNOQUNBR0JIOGdCaUFESUFJUUFpQUNhZ1ZCQUFzZ0Rtc2hDUXNnQ1VHSWYwc05CZ3NDUUNBRktBTHM2Z0ZGRFFBZ0JTQUZLUU9JNmdFZ0NhMThOd09JNmdFQ1FDQUZLQUxRNmdFaUFpQUphaUlJUVI5TkJFQWdEa1VOQVNBQ0lDSnFJQTRnQ1JBQ0dpQUZLQUxRNmdFZ0NXb2hDQXdCQ3lBT0lRTWdBZ1JBSUFJZ0ltb2dBMEVnSUFKckVBSWFJQVVvQXREcUFTRUNJQVZCQURZQzBPb0JJQVVnQlNrRGtPb0JJQVVwQUxEcUFVTFAxdE8rMHNlcjJVSitmRUlmaVVLSGxhK3ZtTGJlbTU1L2ZqY0RrT29CSUFVZ0JTa0RtT29CSUFVcEFManFBVUxQMXRPKzBzZXIyVUorZkVJZmlVS0hsYSt2bUxiZW01NS9mamNEbU9vQklBVWdCU2tEb09vQklBVXBBTURxQVVMUDF0Tyswc2VyMlVKK2ZFSWZpVUtIbGErdm1MYmVtNTUvZmpjRG9Pb0JJQVVnQlNrRHFPb0JJQVVwQU1qcUFVTFAxdE8rMHNlcjJVSitmRUlmaVVLSGxhK3ZtTGJlbTU1L2ZqY0RxT29CSUFNZ0FtdEJJR29oQXdzZ0NTQU9haUlDSUFOQklHcFBCRUFnQWtFZ2F5RUdJQVVwQTZqcUFTRS9JQVVwQTZEcUFTRkFJQVVwQTVqcUFTRkJJQVVwQTVEcUFTRkNBMEFnQXlrQUdFTFAxdE8rMHNlcjJVSitJRDk4UWgrSlFvZVZyNitZdHQ2Ym5uOStJVDhnQXlrQUVFTFAxdE8rMHNlcjJVSitJRUI4UWgrSlFvZVZyNitZdHQ2Ym5uOStJVUFnQXlrQUNFTFAxdE8rMHNlcjJVSitJRUY4UWgrSlFvZVZyNitZdHQ2Ym5uOStJVUVnQXlrQUFFTFAxdE8rMHNlcjJVSitJRUo4UWgrSlFvZVZyNitZdHQ2Ym5uOStJVUlnQTBFZ2FpSURJQVpORFFBTElBVWdQemNEcU9vQklBVWdRRGNEb09vQklBVWdRVGNEbU9vQklBVWdRamNEa09vQkN5QUNJQU5ORFFFZ0lpQURJQUlnQTJzaUNCQUNHZ3NnQlNBSU5nTFE2Z0VMSURVZ0ZXc2hBeUFWSUJ0cUlRSWdDU0FPYWlFT0lBUW9BakJGRFFBTElDa3BBd0FpUDBKL1VTQS9JQTRnSFd1c1VYSkZCRUJCYkNFSkRBWUxJQVVvQXVEcEFRUkFRV29oQ1NBRFFRUkpEUVlnQlNnQzZPb0JSUVJBSUNJZ0JTZ0MwT29CYWlFS0FuNGdCU2tEaU9vQklqOUNJRm9FUUNBRktRT1k2Z0VpUUVJSGlTQUZLUU9RNmdFaVFVSUJpWHdnQlNrRG9Pb0JJa0pDRElsOElBVXBBNmpxQVNKRFFoS0pmQ0JCUXMvVzA3N1N4NnZaUW41Q0g0bENoNVd2cjVpMjNwdWVmMzZGUW9lVnI2K1l0dDZibm45K1FwMmp0ZXFEc1kySytnQjlJRUJDejliVHZ0TEhxOWxDZmtJZmlVS0hsYSt2bUxiZW01NS9mb1ZDaDVXdnI1aTIzcHVlZjM1Q25hTzE2b094allyNkFIMGdRa0xQMXRPKzBzZXIyVUorUWgrSlFvZVZyNitZdHQ2Ym5uOStoVUtIbGErdm1MYmVtNTUvZmtLZG83WHFnN0dOaXZvQWZTQkRRcy9XMDc3U3g2dlpRbjVDSDRsQ2g1V3ZyNWkyM3B1ZWYzNkZRb2VWcjYrWXR0NmJubjkrUXAyanRlcURzWTJLK2dCOURBRUxJQVVwQTZEcUFVTEZ6OW15OGVXNjZpZDhDeUEvZkNFL0lDSWhCZ05BSUFvZ0JrRUlhaUlIVHdSQUlBWXBBQUJDejliVHZ0TEhxOWxDZmtJZmlVS0hsYSt2bUxiZW01NS9maUEvaFVJYmlVS0hsYSt2bUxiZW01NS9ma0tkbzdYcWc3R05pdm9BZlNFL0lBY2hCZ3dCQ3dzQ1FDQUtJQVpCQkdvaUNFa0VRQ0FHSVFnTUFRc2dCalVBQUVLSGxhK3ZtTGJlbTU1L2ZpQS9oVUlYaVVMUDF0Tyswc2VyMlVKK1F2bnozZkdaOXBtckZud2hQd3NEUUNBSUlBcEpCRUFnQ0RFQUFFTEZ6OW15OGVXNjZpZCtJRCtGUWd1SlFvZVZyNitZdHQ2Ym5uOStJVDhnQ0VFQmFpRUlEQUVMQ3lBQ0tBQUFJRDlDSVlnZ1A0VkN6OWJUdnRMSHE5bENmaUkvUWgySUlEK0ZRdm56M2ZHWjlwbXJGbjRpUDBJZ2lDQS9oYWRIRFFjTElBTkJCR3NoQXlBQ1FRUnFJUUlMSUE0Z0hXc2lDVUdKZjA4TkJDQUJJQWxySVFFZ0NTQWRhaUVkUVFFaFBnd0JDd3RCdUg4aEJ5QUREUVFnSFNBQWF5RUhEQVFMUVd3aENRd0JDMEc0ZnlFSkMwRzRmeUVISUFsQmRrWWdQbkVOQVFzZ0NTRUhDeWdDQUEwQUlBVkIvT29CYWlnQ0FDRUJJQVZCK09vQmFpZ0NBQ0VBSUFVUUdDQUZLQUt3NndFZ0FDQUJFQk1nQlVFQU5nS3c2d0VnQlNnQ3BPc0JJZ0lFUUFKQUFrQUNRQUpBSUFJb0FnQWlBd1JBSUFCRkRRSWdBU0FESUFBUkFnQU1BUXNnQUVVTkFnc2dBU0FDSUFBUkFnQU1BZ3NnQXhBR0N5QUNFQVlMSUFWQkFEWUNwT3NCQ3lBQUJFQWdBU0FGSUFBUkFnQU1BUXNnQlJBR0N5QUVRZUFCYWlRQUlBY0xDNmdWQ1FCQmlBZ0xEUUVBQUFBQkFBQUFBZ0FBQUFJQVFhQUlDN01HQVFBQUFBRUFBQUFDQUFBQUFnQUFBQ1lBQUFDQ0FBQUFJUVVBQUVvQUFBQm5DQUFBSmdBQUFNQUJBQUNBQUFBQVNRVUFBRW9BQUFDK0NBQUFLUUFBQUN3Q0FBQ0FBQUFBU1FVQUFFb0FBQUMrQ0FBQUx3QUFBTW9DQUFDQUFBQUFpZ1VBQUVvQUFBQ0VDUUFBTlFBQUFITURBQUNBQUFBQW5RVUFBRW9BQUFDZ0NRQUFQUUFBQUlFREFBQ0FBQUFBNndVQUFFc0FBQUErQ2dBQVJBQUFBSjREQUFDQUFBQUFUUVlBQUVzQUFBQ3FDZ0FBU3dBQUFMTURBQUNBQUFBQXdRWUFBRTBBQUFBZkRRQUFUUUFBQUZNRUFBQ0FBQUFBSXdnQUFGRUFBQUNtRHdBQVZBQUFBSmtFQUFDQUFBQUFTd2tBQUZjQUFBQ3hFZ0FBV0FBQUFOb0VBQUNBQUFBQWJ3a0FBRjBBQUFBakZBQUFWQUFBQUVVRkFBQ0FBQUFBVkFvQUFHb0FBQUNNRkFBQWFnQUFBSzhGQUFDQUFBQUFkZ2tBQUh3QUFBQk9FQUFBZkFBQUFOSUNBQUNBQUFBQVl3Y0FBSkVBQUFDUUJ3QUFrZ0FBQUFBQUFBQUJBQUFBQVFBQUFBVUFBQUFOQUFBQUhRQUFBRDBBQUFCOUFBQUEvUUFBQVAwQkFBRDlBd0FBL1FjQUFQMFBBQUQ5SHdBQS9UOEFBUDEvQUFEOS93QUEvZjhCQVAzL0F3RDkvd2NBL2Y4UEFQMy9Id0Q5L3o4QS9mOS9BUDMvL3dEOS8vOEIvZi8vQS8zLy93ZjkvLzhQL2YvL0gvMy8vei85Ly85L0FBQUFBQUVBQUFBQ0FBQUFBd0FBQUFRQUFBQUZBQUFBQmdBQUFBY0FBQUFJQUFBQUNRQUFBQW9BQUFBTEFBQUFEQUFBQUEwQUFBQU9BQUFBRHdBQUFCQUFBQUFSQUFBQUVnQUFBQk1BQUFBVUFBQUFGUUFBQUJZQUFBQVhBQUFBR0FBQUFCa0FBQUFhQUFBQUd3QUFBQndBQUFBZEFBQUFIZ0FBQUI4QUFBQURBQUFBQkFBQUFBVUFBQUFHQUFBQUJ3QUFBQWdBQUFBSkFBQUFDZ0FBQUFzQUFBQU1BQUFBRFFBQUFBNEFBQUFQQUFBQUVBQUFBQkVBQUFBU0FBQUFFd0FBQUJRQUFBQVZBQUFBRmdBQUFCY0FBQUFZQUFBQUdRQUFBQm9BQUFBYkFBQUFIQUFBQUIwQUFBQWVBQUFBSHdBQUFDQUFBQUFoQUFBQUlnQUFBQ01BQUFBbEFBQUFKd0FBQUNrQUFBQXJBQUFBTHdBQUFETUFBQUE3QUFBQVF3QUFBRk1BQUFCakFBQUFnd0FBQUFNQkFBQURBZ0FBQXdRQUFBTUlBQUFERUFBQUF5QUFBQU5BQUFBRGdBQUFBd0FCQUVIZ0R3dFJBUUFBQUFFQUFBQUJBQUFBQVFBQUFBSUFBQUFDQUFBQUF3QUFBQU1BQUFBRUFBQUFCQUFBQUFVQUFBQUhBQUFBQ0FBQUFBa0FBQUFLQUFBQUN3QUFBQXdBQUFBTkFBQUFEZ0FBQUE4QUFBQVFBRUhFRUF1TEFRRUFBQUFDQUFBQUF3QUFBQVFBQUFBRkFBQUFCZ0FBQUFjQUFBQUlBQUFBQ1FBQUFBb0FBQUFMQUFBQURBQUFBQTBBQUFBT0FBQUFEd0FBQUJBQUFBQVNBQUFBRkFBQUFCWUFBQUFZQUFBQUhBQUFBQ0FBQUFBb0FBQUFNQUFBQUVBQUFBQ0FBQUFBQUFFQUFBQUNBQUFBQkFBQUFBZ0FBQUFRQUFBQUlBQUFBRUFBQUFDQUFBQUFBQUVBUVpBU0MrWUVBUUFBQUFFQUFBQUJBQUFBQVFBQUFBSUFBQUFDQUFBQUF3QUFBQU1BQUFBRUFBQUFCZ0FBQUFjQUFBQUlBQUFBQ1FBQUFBb0FBQUFMQUFBQURBQUFBQTBBQUFBT0FBQUFEd0FBQUJBQUFBQUJBQUFBQkFBQUFBZ0FBQUFBQUFBQUFRQUJBUVlBQUFBQUFBQUVBQUFBQUJBQUFBUUFBQUFBSUFBQUJRRUFBQUFBQUFBRkF3QUFBQUFBQUFVRUFBQUFBQUFBQlFZQUFBQUFBQUFGQndBQUFBQUFBQVVKQUFBQUFBQUFCUW9BQUFBQUFBQUZEQUFBQUFBQUFBWU9BQUFBQUFBQkJSQUFBQUFBQUFFRkZBQUFBQUFBQVFVV0FBQUFBQUFDQlJ3QUFBQUFBQU1GSUFBQUFBQUFCQVV3QUFBQUlBQUdCVUFBQUFBQUFBY0ZnQUFBQUFBQUNBWUFBUUFBQUFBS0JnQUVBQUFBQUF3R0FCQUFBQ0FBQUFRQUFBQUFBQUFBQkFFQUFBQUFBQUFGQWdBQUFDQUFBQVVFQUFBQUFBQUFCUVVBQUFBZ0FBQUZCd0FBQUFBQUFBVUlBQUFBSUFBQUJRb0FBQUFBQUFBRkN3QUFBQUFBQUFZTkFBQUFJQUFCQlJBQUFBQUFBQUVGRWdBQUFDQUFBUVVXQUFBQUFBQUNCUmdBQUFBZ0FBTUZJQUFBQUFBQUF3VW9BQUFBQUFBR0JFQUFBQUFRQUFZRVFBQUFBQ0FBQndXQUFBQUFBQUFKQmdBQ0FBQUFBQXNHQUFnQUFEQUFBQVFBQUFBQUVBQUFCQUVBQUFBZ0FBQUZBZ0FBQUNBQUFBVURBQUFBSUFBQUJRVUFBQUFnQUFBRkJnQUFBQ0FBQUFVSUFBQUFJQUFBQlFrQUFBQWdBQUFGQ3dBQUFDQUFBQVVNQUFBQUFBQUFCZzhBQUFBZ0FBRUZFZ0FBQUNBQUFRVVVBQUFBSUFBQ0JSZ0FBQUFnQUFJRkhBQUFBQ0FBQXdVb0FBQUFJQUFFQlRBQUFBQUFBQkFHQUFBQkFBQUFEd1lBZ0FBQUFBQU9CZ0JBQUFBQUFBMEdBQ0FBUVlBWEM0Y0NBUUFCQVFVQUFBQUFBQUFGQUFBQUFBQUFCZ1E5QUFBQUFBQUpCZjBCQUFBQUFBOEYvWDhBQUFBQUZRWDkveDhBQUFBREJRVUFBQUFBQUFjRWZRQUFBQUFBREFYOUR3QUFBQUFTQmYzL0F3QUFBQmNGL2Y5L0FBQUFCUVVkQUFBQUFBQUlCUDBBQUFBQUFBNEYvVDhBQUFBQUZBWDkvdzhBQUFBQ0JRRUFBQUFRQUFjRWZRQUFBQUFBQ3dYOUJ3QUFBQUFSQmYzL0FRQUFBQllGL2Y4L0FBQUFCQVVOQUFBQUVBQUlCUDBBQUFBQUFBMEYvUjhBQUFBQUV3WDkvd2NBQUFBQkJRRUFBQUFRQUFZRVBRQUFBQUFBQ2dYOUF3QUFBQUFRQmYzL0FBQUFBQndGL2YvL0R3QUFHd1g5Ly84SEFBQWFCZjMvL3dNQUFCa0YvZi8vQVFBQUdBWDkvLzhBUVpBWkM0WUVBUUFCQVFZQUFBQUFBQUFHQXdBQUFBQUFBQVFFQUFBQUlBQUFCUVVBQUFBQUFBQUZCZ0FBQUFBQUFBVUlBQUFBQUFBQUJRa0FBQUFBQUFBRkN3QUFBQUFBQUFZTkFBQUFBQUFBQmhBQUFBQUFBQUFHRXdBQUFBQUFBQVlXQUFBQUFBQUFCaGtBQUFBQUFBQUdIQUFBQUFBQUFBWWZBQUFBQUFBQUJpSUFBQUFBQUFFR0pRQUFBQUFBQVFZcEFBQUFBQUFDQmk4QUFBQUFBQU1HT3dBQUFBQUFCQVpUQUFBQUFBQUhCb01BQUFBQUFBa0dBd0lBQUJBQUFBUUVBQUFBQUFBQUJBVUFBQUFnQUFBRkJnQUFBQUFBQUFVSEFBQUFJQUFBQlFrQUFBQUFBQUFGQ2dBQUFBQUFBQVlNQUFBQUFBQUFCZzhBQUFBQUFBQUdFZ0FBQUFBQUFBWVZBQUFBQUFBQUJoZ0FBQUFBQUFBR0d3QUFBQUFBQUFZZUFBQUFBQUFBQmlFQUFBQUFBQUVHSXdBQUFBQUFBUVluQUFBQUFBQUNCaXNBQUFBQUFBTUdNd0FBQUFBQUJBWkRBQUFBQUFBRkJtTUFBQUFBQUFnR0F3RUFBQ0FBQUFRRUFBQUFNQUFBQkFRQUFBQVFBQUFFQlFBQUFDQUFBQVVIQUFBQUlBQUFCUWdBQUFBZ0FBQUZDZ0FBQUNBQUFBVUxBQUFBQUFBQUJnNEFBQUFBQUFBR0VRQUFBQUFBQUFZVUFBQUFBQUFBQmhjQUFBQUFBQUFHR2dBQUFBQUFBQVlkQUFBQUFBQUFCaUFBQUFBQUFCQUdBd0FCQUFBQUR3WURnQUFBQUFBT0JnTkFBQUFBQUEwR0F5QUFBQUFBREFZREVBQUFBQUFMQmdNSUFBQUFBQW9HQXdRQVFhUWRDOWtCQVFBQUFBTUFBQUFIQUFBQUR3QUFBQjhBQUFBL0FBQUFmd0FBQVA4QUFBRC9BUUFBL3dNQUFQOEhBQUQvRHdBQS94OEFBUDgvQUFEL2Z3QUEvLzhBQVAvL0FRRC8vd01BLy84SEFQLy9Ed0QvL3g4QS8vOC9BUC8vZndELy8vOEEvLy8vQWYvLy93UC8vLzhILy8vL0QvLy8veC8vLy84Ly8vLy9md0FBQUFBQkFBQUFBZ0FBQUFRQUFBQUFBQUFBQWdBQUFBUUFBQUFJQUFBQUFBQUFBQUVBQUFBQ0FBQUFBUUFBQUFRQUFBQUVBQUFBQkFBQUFBUUFBQUFJQUFBQUNBQUFBQWdBQUFBSEFBQUFDQUFBQUFrQUFBQUtBQUFBQ3dCQmdCOExBNEFSQVE9PSI7dmFyIHNlPW5ldyBKQSxDZT0hMTthc3luYyBmdW5jdGlvbiBfSShBLHQsZSl7bGV0IEk9bnVsbDt0eXBlb2YgQSE9InN0cmluZyI/ST1BLmhyZWY6QS5zdGFydHNXaXRoKCJodHRwIik/ST1BOkk9YCR7dH0vJHtBfWAsSS5lbmRzV2l0aCgiLmpzIikmJihJPUkuc3Vic3RyaW5nKDAsSS5sZW5ndGgtMykpLEkuZW5kc1dpdGgoIi53YXNtIikmJihJPUkuc3Vic3RyaW5nKDAsSS5sZW5ndGgtNSkpO2xldCByPWAke0l9Lndhc21gLG89YXdhaXQgTEEuZ2V0KGAke3J9LnpzdGAse3Jlc3BvbnNlVHlwZToiYXJyYXlidWZmZXIiLHBhcmFtczplfSk7Q2V8fChhd2FpdCBzZS5pbml0KCksQ2U9ITApO2xldCBDPXNlLmRlY29kZShuZXcgVWludDhBcnJheShvLmRhdGEpKS5idWZmZXI7cmV0dXJuKGF3YWl0IGltcG9ydChgJHtJfS5qc2ApKS5kZWZhdWx0KHt3YXNtQmluYXJ5OkN9KX12YXIgQmU9X0k7dmFyIGJBPW5ldyBNYXA7YXN5bmMgZnVuY3Rpb24gWEkoQSx0LGUpe2xldCBJPUEscj1BLG89bnVsbDtyZXR1cm4gdHlwZW9mIEEhPSJzdHJpbmciJiYoST1uZXcgVVJMKEEuaHJlZikscj1JLmhyZWYpLGJBLmhhcyhyKT9vPWF3YWl0IGJBLmdldChyKTooYkEuc2V0KHIsQmUoSSx0LGUpKSxvPWF3YWl0IGJBLmdldChyKSksb312YXIgYWU9WEk7dmFyIHpJPXtUZXh0RmlsZToiVGV4dEZpbGUiLEJpbmFyeUZpbGU6IkJpbmFyeUZpbGUiLFRleHRTdHJlYW06IlRleHRTdHJlYW0iLEJpbmFyeVN0cmVhbToiQmluYXJ5U3RyZWFtIixJbWFnZToiSW1hZ2UiLFBvaW50U2V0OiJQb2ludFNldCIsTWVzaDoiTWVzaCIsUG9seURhdGE6IlBvbHlEYXRhIixUcmFuc2Zvcm1MaXN0OiJUcmFuc2Zvcm1MaXN0IixKc29uQ29tcGF0aWJsZToiSnNvbkNvbXBhdGlibGUifSxoPXpJO3ZhciB2ST17SW50ODoiaW50OCIsVUludDg6InVpbnQ4IixJbnQxNjoiaW50MTYiLFVJbnQxNjoidWludDE2IixJbnQzMjoiaW50MzIiLFVJbnQzMjoidWludDMyIixJbnQ2NDoiaW50NjQiLFVJbnQ2NDoidWludDY0IixTaXplVmFsdWVUeXBlOiJ1aW50NjQiLElkZW50aWZpZXJUeXBlOiJ1aW50NjQiLEluZGV4VmFsdWVUeXBlOiJpbnQ2NCIsT2Zmc2V0VmFsdWVUeXBlOiJpbnQ2NCJ9LFI9dkk7dmFyICRJPXtGbG9hdDMyOiJmbG9hdDMyIixGbG9hdDY0OiJmbG9hdDY0IixTcGFjZVByZWNpc2lvblR5cGU6ImZsb2F0NjQifSx6PSRJO2Z1bmN0aW9uIEFyKEEsdCl7bGV0IGU9bnVsbDtzd2l0Y2goQSl7Y2FzZSBSLlVJbnQ4OntlPW5ldyBVaW50OEFycmF5KHQpO2JyZWFrfWNhc2UgUi5JbnQ4OntlPW5ldyBJbnQ4QXJyYXkodCk7YnJlYWt9Y2FzZSBSLlVJbnQxNjp7ZT1uZXcgVWludDE2QXJyYXkodCk7YnJlYWt9Y2FzZSBSLkludDE2OntlPW5ldyBJbnQxNkFycmF5KHQpO2JyZWFrfWNhc2UgUi5VSW50MzI6e2U9bmV3IFVpbnQzMkFycmF5KHQpO2JyZWFrfWNhc2UgUi5JbnQzMjp7ZT1uZXcgSW50MzJBcnJheSh0KTticmVha31jYXNlIFIuVUludDY0Ont0eXBlb2YgZ2xvYmFsVGhpcy5CaWdVaW50NjRBcnJheT09ImZ1bmN0aW9uIj9lPW5ldyBCaWdVaW50NjRBcnJheSh0KTplPW5ldyBVaW50OEFycmF5KHQpO2JyZWFrfWNhc2UgUi5JbnQ2NDp7dHlwZW9mIGdsb2JhbFRoaXMuQmlnSW50NjRBcnJheT09ImZ1bmN0aW9uIj9lPW5ldyBCaWdJbnQ2NEFycmF5KHQpOmU9bmV3IFVpbnQ4QXJyYXkodCk7YnJlYWt9Y2FzZSB6LkZsb2F0MzI6e2U9bmV3IEZsb2F0MzJBcnJheSh0KTticmVha31jYXNlIHouRmxvYXQ2NDp7ZT1uZXcgRmxvYXQ2NEFycmF5KHQpO2JyZWFrfWNhc2UibnVsbCI6e2U9bnVsbDticmVha31jYXNlIG51bGw6e2U9bnVsbDticmVha31kZWZhdWx0OnRocm93IG5ldyBFcnJvcigiVHlwZSBpcyBub3Qgc3VwcG9ydGVkIGFzIGEgVHlwZWRBcnJheSIpfXJldHVybiBlfXZhciBIPUFyO3ZhciBjZT10eXBlb2YgZ2xvYmFsVGhpcy5TaGFyZWRBcnJheUJ1ZmZlcj09ImZ1bmN0aW9uIixRZT1uZXcgVGV4dEVuY29kZXIsRWU9bmV3IFRleHREZWNvZGVyKCJ1dGYtOCIpO2Z1bmN0aW9uIHRyKEEsdCl7bGV0IGU9e2ZsYWdzOiJyIixlbmNvZGluZzoiYmluYXJ5In0sST1BLmZzX29wZW4odCxlLmZsYWdzKSxvPUEuZnNfc3RhdCh0KS5zaXplLGc9bnVsbDtjZT9nPW5ldyBTaGFyZWRBcnJheUJ1ZmZlcihvKTpnPW5ldyBBcnJheUJ1ZmZlcihvKTtsZXQgQz1uZXcgVWludDhBcnJheShnKTtyZXR1cm4gQS5mc19yZWFkKEksQywwLG8sMCksQS5mc19jbG9zZShJKSxDfWZ1bmN0aW9uIGZlKEEsdCxlKXtsZXQgST1udWxsO2NlP0k9bmV3IFNoYXJlZEFycmF5QnVmZmVyKGUpOkk9bmV3IEFycmF5QnVmZmVyKGUpO2xldCByPW5ldyBVaW50OEFycmF5KEkpLG89bmV3IFVpbnQ4QXJyYXkoQS5IRUFQVTguYnVmZmVyLHQsZSk7cmV0dXJuIHIuc2V0KG8pLHJ9ZnVuY3Rpb24geShBLHQsZSxJKXtsZXQgcj0wO3JldHVybiB0IT09bnVsbCYmKHI9QS5jY2FsbCgiaXRrX3dhc21faW5wdXRfYXJyYXlfYWxsb2MiLCJudW1iZXIiLFsibnVtYmVyIiwibnVtYmVyIiwibnVtYmVyIiwibnVtYmVyIl0sWzAsZSxJLHQuYnVmZmVyLmJ5dGVMZW5ndGhdKSxBLkhFQVBVOC5zZXQobmV3IFVpbnQ4QXJyYXkodC5idWZmZXIpLHIpKSxyfWZ1bmN0aW9uIFQoQSx0LGUpe2xldCBJPUpTT04uc3RyaW5naWZ5KHQpLHI9QS5sZW5ndGhCeXRlc1VURjgoSSkrMSxvPUEuY2NhbGwoIml0a193YXNtX2lucHV0X2pzb25fYWxsb2MiLCJudW1iZXIiLFsibnVtYmVyIiwibnVtYmVyIiwibnVtYmVyIl0sWzAsZSxyXSk7QS5zdHJpbmdUb1VURjgoSSxvLHIpfWZ1bmN0aW9uIEYoQSx0LGUsSSl7bGV0IHI9QS5jY2FsbCgiaXRrX3dhc21fb3V0cHV0X2FycmF5X2FkZHJlc3MiLCJudW1iZXIiLFsibnVtYmVyIiwibnVtYmVyIiwibnVtYmVyIl0sWzAsdCxlXSksbz1BLmNjYWxsKCJpdGtfd2FzbV9vdXRwdXRfYXJyYXlfc2l6ZSIsIm51bWJlciIsWyJudW1iZXIiLCJudW1iZXIiLCJudW1iZXIiXSxbMCx0LGVdKSxnPWZlKEEscixvKTtyZXR1cm4gSChJLGcuYnVmZmVyKX1mdW5jdGlvbiBzQShBLHQpe2xldCBlPUEuY2NhbGwoIml0a193YXNtX291dHB1dF9qc29uX2FkZHJlc3MiLCJudW1iZXIiLFsibnVtYmVyIiwibnVtYmVyIl0sWzAsdF0pLEk9QS5VVEY4VG9TdHJpbmcoZSk7cmV0dXJuIEpTT04ucGFyc2UoSSl9ZnVuY3Rpb24gZXIoQSx0LGUsSSl7SSE9bnVsbCYmSS5sZW5ndGg+MCYmSS5mb3JFYWNoKGZ1bmN0aW9uKGEsbil7c3dpdGNoKGEudHlwZSl7Y2FzZSBoLlRleHRTdHJlYW06e2xldCBzPVFlLmVuY29kZShhLmRhdGEuZGF0YSksZj15KEEscyxuLDApLEI9e3NpemU6cy5idWZmZXIuYnl0ZUxlbmd0aCxkYXRhOmBkYXRhOmFwcGxpY2F0aW9uL3ZuZC5pdGsuYWRkcmVzcywwOiR7Zn1gfTtUKEEsQixuKTticmVha31jYXNlIGguSnNvbkNvbXBhdGlibGU6e2xldCBzPVFlLmVuY29kZShKU09OLnN0cmluZ2lmeShhLmRhdGEpKSxmPXkoQSxzLG4sMCksQj17c2l6ZTpzLmJ1ZmZlci5ieXRlTGVuZ3RoLGRhdGE6YGRhdGE6YXBwbGljYXRpb24vdm5kLml0ay5hZGRyZXNzLDA6JHtmfWB9O1QoQSxCLG4pO2JyZWFrfWNhc2UgaC5CaW5hcnlTdHJlYW06e2xldCBzPWEuZGF0YS5kYXRhLGY9eShBLHMsbiwwKSxCPXtzaXplOnMuYnVmZmVyLmJ5dGVMZW5ndGgsZGF0YTpgZGF0YTphcHBsaWNhdGlvbi92bmQuaXRrLmFkZHJlc3MsMDoke2Z9YH07VChBLEIsbik7YnJlYWt9Y2FzZSBoLlRleHRGaWxlOntBLmZzX3dyaXRlRmlsZShhLmRhdGEucGF0aCxhLmRhdGEuZGF0YSk7YnJlYWt9Y2FzZSBoLkJpbmFyeUZpbGU6e0EuZnNfd3JpdGVGaWxlKGEuZGF0YS5wYXRoLGEuZGF0YS5kYXRhKTticmVha31jYXNlIGguSW1hZ2U6e2xldCBzPWEuZGF0YSxmPXkoQSxzLmRhdGEsbiwwKSxCPXkoQSxzLmRpcmVjdGlvbixuLDEpLEU9dHlwZW9mIHMubWV0YWRhdGE/LmVudHJpZXM8InUiP0FycmF5LmZyb20ocy5tZXRhZGF0YS5lbnRyaWVzKCkpOltdLGw9e2ltYWdlVHlwZTpzLmltYWdlVHlwZSxuYW1lOnMubmFtZSxvcmlnaW46cy5vcmlnaW4sc3BhY2luZzpzLnNwYWNpbmcsZGlyZWN0aW9uOmBkYXRhOmFwcGxpY2F0aW9uL3ZuZC5pdGsuYWRkcmVzcywwOiR7Qn1gLHNpemU6cy5zaXplLGRhdGE6YGRhdGE6YXBwbGljYXRpb24vdm5kLml0ay5hZGRyZXNzLDA6JHtmfWAsbWV0YWRhdGE6RX07VChBLGwsbik7YnJlYWt9Y2FzZSBoLk1lc2g6e2xldCBzPWEuZGF0YSxmPXkoQSxzLnBvaW50cyxuLDApLEI9eShBLHMuY2VsbHMsbiwxKSxFPXkoQSxzLnBvaW50RGF0YSxuLDIpLGw9eShBLHMuY2VsbERhdGEsbiwzKSxjPXttZXNoVHlwZTpzLm1lc2hUeXBlLG5hbWU6cy5uYW1lLG51bWJlck9mUG9pbnRzOnMubnVtYmVyT2ZQb2ludHMscG9pbnRzOmBkYXRhOmFwcGxpY2F0aW9uL3ZuZC5pdGsuYWRkcmVzcywwOiR7Zn1gLG51bWJlck9mQ2VsbHM6cy5udW1iZXJPZkNlbGxzLGNlbGxzOmBkYXRhOmFwcGxpY2F0aW9uL3ZuZC5pdGsuYWRkcmVzcywwOiR7Qn1gLGNlbGxCdWZmZXJTaXplOnMuY2VsbEJ1ZmZlclNpemUsbnVtYmVyT2ZQb2ludFBpeGVsczpzLm51bWJlck9mUG9pbnRQaXhlbHMscG9pbnREYXRhOmBkYXRhOmFwcGxpY2F0aW9uL3ZuZC5pdGsuYWRkcmVzcywwOiR7RX1gLG51bWJlck9mQ2VsbFBpeGVsczpzLm51bWJlck9mQ2VsbFBpeGVscyxjZWxsRGF0YTpgZGF0YTphcHBsaWNhdGlvbi92bmQuaXRrLmFkZHJlc3MsMDoke2x9YH07VChBLGMsbik7YnJlYWt9Y2FzZSBoLlBvaW50U2V0OntsZXQgcz1hLmRhdGEsZj15KEEscy5wb2ludHMsbiwwKSxCPXkoQSxzLnBvaW50RGF0YSxuLDEpLEU9e3BvaW50U2V0VHlwZTpzLnBvaW50U2V0VHlwZSxuYW1lOnMubmFtZSxudW1iZXJPZlBvaW50czpzLm51bWJlck9mUG9pbnRzLHBvaW50czpgZGF0YTphcHBsaWNhdGlvbi92bmQuaXRrLmFkZHJlc3MsMDoke2Z9YCxudW1iZXJPZlBvaW50UGl4ZWxzOnMubnVtYmVyT2ZQb2ludFBpeGVscyxwb2ludERhdGE6YGRhdGE6YXBwbGljYXRpb24vdm5kLml0ay5hZGRyZXNzLDA6JHtCfWB9O1QoQSxFLG4pO2JyZWFrfWNhc2UgaC5UcmFuc2Zvcm1MaXN0OntsZXQgcz1hLmRhdGEsZj1bXTtzLmZvckVhY2goKEIsRSk9PntsZXQgYz1gZGF0YTphcHBsaWNhdGlvbi92bmQuaXRrLmFkZHJlc3MsMDoke3koQSxCLmZpeGVkUGFyYW1ldGVycyxuLEUqMil9YCxTPWBkYXRhOmFwcGxpY2F0aW9uL3ZuZC5pdGsuYWRkcmVzcywwOiR7eShBLEIucGFyYW1ldGVycyxuLEUqMisxKX1gLEQ9e3RyYW5zZm9ybVR5cGU6Qi50cmFuc2Zvcm1UeXBlLG51bWJlck9mRml4ZWRQYXJhbWV0ZXJzOkIubnVtYmVyT2ZGaXhlZFBhcmFtZXRlcnMsbnVtYmVyT2ZQYXJhbWV0ZXJzOkIubnVtYmVyT2ZQYXJhbWV0ZXJzLG5hbWU6Qi5uYW1lLGlucHV0U3BhY2VOYW1lOkIuaW5wdXRTcGFjZU5hbWUsb3V0cHV0U3BhY2VOYW1lOkIub3V0cHV0U3BhY2VOYW1lLHBhcmFtZXRlcnM6UyxmaXhlZFBhcmFtZXRlcnM6Y307Zi5wdXNoKEQpfSksVChBLGYsbik7YnJlYWt9Y2FzZSBoLlBvbHlEYXRhOntsZXQgcz1hLmRhdGEsZj15KEEscy5wb2ludHMsbiwwKSxCPXkoQSxzLnZlcnRpY2VzLG4sMSksRT15KEEscy5saW5lcyxuLDIpLGw9eShBLHMucG9seWdvbnMsbiwzKSxjPXkoQSxzLnRyaWFuZ2xlU3RyaXBzLG4sNCkscD15KEEscy5wb2ludERhdGEsbiw1KSxTPXkoQSxzLnBvaW50RGF0YSxuLDYpLEQ9e3BvbHlEYXRhVHlwZTpzLnBvbHlEYXRhVHlwZSxuYW1lOnMubmFtZSxudW1iZXJPZlBvaW50czpzLm51bWJlck9mUG9pbnRzLHBvaW50czpgZGF0YTphcHBsaWNhdGlvbi92bmQuaXRrLmFkZHJlc3MsMDoke2Z9YCx2ZXJ0aWNlc0J1ZmZlclNpemU6cy52ZXJ0aWNlc0J1ZmZlclNpemUsdmVydGljZXM6YGRhdGE6YXBwbGljYXRpb24vdm5kLml0ay5hZGRyZXNzLDA6JHtCfWAsbGluZXNCdWZmZXJTaXplOnMubGluZXNCdWZmZXJTaXplLGxpbmVzOmBkYXRhOmFwcGxpY2F0aW9uL3ZuZC5pdGsuYWRkcmVzcywwOiR7RX1gLHBvbHlnb25zQnVmZmVyU2l6ZTpzLnBvbHlnb25zQnVmZmVyU2l6ZSxwb2x5Z29uczpgZGF0YTphcHBsaWNhdGlvbi92bmQuaXRrLmFkZHJlc3MsMDoke2x9YCx0cmlhbmdsZVN0cmlwc0J1ZmZlclNpemU6cy50cmlhbmdsZVN0cmlwc0J1ZmZlclNpemUsdHJpYW5nbGVTdHJpcHM6YGRhdGE6YXBwbGljYXRpb24vdm5kLml0ay5hZGRyZXNzLDA6JHtjfWAsbnVtYmVyT2ZQb2ludFBpeGVsczpzLm51bWJlck9mUG9pbnRQaXhlbHMscG9pbnREYXRhOmBkYXRhOmFwcGxpY2F0aW9uL3ZuZC5pdGsuYWRkcmVzcywwOiR7cH1gLG51bWJlck9mQ2VsbFBpeGVsczpzLm51bWJlck9mQ2VsbFBpeGVscyxjZWxsRGF0YTpgZGF0YTphcHBsaWNhdGlvbi92bmQuaXRrLmFkZHJlc3MsMDoke1N9YH07VChBLEQsbik7YnJlYWt9ZGVmYXVsdDp0aHJvdyBFcnJvcigiVW5zdXBwb3J0ZWQgaW5wdXQgSW50ZXJmYWNlVHlwZSIpfX0pLEEucmVzZXRNb2R1bGVTdGRvdXQoKSxBLnJlc2V0TW9kdWxlU3RkZXJyKCk7bGV0IHI9QS5zdGFja1NhdmUoKSxvPTA7dHJ5e289QS5jYWxsTWFpbih0LnNsaWNlKCkpfWNhdGNoKGEpe3Rocm93IHR5cGVvZiBhPT0ibnVtYmVyIiYmKGNvbnNvbGUubG9nKCJFeGNlcHRpb24gd2hpbGUgcnVubmluZyBwaXBlbGluZToiKSxjb25zb2xlLmxvZygic3Rkb3V0OiIsQS5nZXRNb2R1bGVTdGRvdXQoKSksY29uc29sZS5lcnJvcigic3RkZXJyOiIsQS5nZXRNb2R1bGVTdGRlcnIoKSksdHlwZW9mIEEuZ2V0RXhjZXB0aW9uTWVzc2FnZTwidSI/Y29uc29sZS5lcnJvcigiZXhjZXB0aW9uOiIsQS5nZXRFeGNlcHRpb25NZXNzYWdlKGEpKTpjb25zb2xlLmVycm9yKCJCdWlsZCBtb2R1bGUgaW4gRGVidWcgbW9kZSBmb3IgZXhjZXB0aW9uIG1lc3NhZ2UgaW5mb3JtYXRpb24uIikpLGF9ZmluYWxseXtBLnN0YWNrUmVzdG9yZShyKX1sZXQgZz1BLmdldE1vZHVsZVN0ZG91dCgpLEM9QS5nZXRNb2R1bGVTdGRlcnIoKSxRPVtdO3JldHVybiBlIT1udWxsJiZlLmxlbmd0aD4wJiZvPT09MCYmZS5mb3JFYWNoKGZ1bmN0aW9uKGEsbil7bGV0IHM9bnVsbDtzd2l0Y2goYS50eXBlKXtjYXNlIGguVGV4dFN0cmVhbTp7bGV0IEI9QS5jY2FsbCgiaXRrX3dhc21fb3V0cHV0X2FycmF5X2FkZHJlc3MiLCJudW1iZXIiLFsibnVtYmVyIiwibnVtYmVyIiwibnVtYmVyIl0sWzAsbiwwXSksRT1BLmNjYWxsKCJpdGtfd2FzbV9vdXRwdXRfYXJyYXlfc2l6ZSIsIm51bWJlciIsWyJudW1iZXIiLCJudW1iZXIiLCJudW1iZXIiXSxbMCxuLDBdKSxsPW5ldyBVaW50OEFycmF5KEEuSEVBUFU4LmJ1ZmZlcixCLEUpO3M9e2RhdGE6RWUuZGVjb2RlKGwpfTticmVha31jYXNlIGguSnNvbkNvbXBhdGlibGU6e2xldCBCPUEuY2NhbGwoIml0a193YXNtX291dHB1dF9hcnJheV9hZGRyZXNzIiwibnVtYmVyIixbIm51bWJlciIsIm51bWJlciIsIm51bWJlciJdLFswLG4sMF0pLEU9QS5jY2FsbCgiaXRrX3dhc21fb3V0cHV0X2FycmF5X3NpemUiLCJudW1iZXIiLFsibnVtYmVyIiwibnVtYmVyIiwibnVtYmVyIl0sWzAsbiwwXSksbD1uZXcgVWludDhBcnJheShBLkhFQVBVOC5idWZmZXIsQixFKTtzPUpTT04ucGFyc2UoRWUuZGVjb2RlKGwpKTticmVha31jYXNlIGguQmluYXJ5U3RyZWFtOntsZXQgQj1BLmNjYWxsKCJpdGtfd2FzbV9vdXRwdXRfYXJyYXlfYWRkcmVzcyIsIm51bWJlciIsWyJudW1iZXIiLCJudW1iZXIiLCJudW1iZXIiXSxbMCxuLDBdKSxFPUEuY2NhbGwoIml0a193YXNtX291dHB1dF9hcnJheV9zaXplIiwibnVtYmVyIixbIm51bWJlciIsIm51bWJlciIsIm51bWJlciJdLFswLG4sMF0pO3M9e2RhdGE6ZmUoQSxCLEUpfTticmVha31jYXNlIGguVGV4dEZpbGU6e3M9e3BhdGg6YS5kYXRhLnBhdGgsZGF0YTpBLmZzX3JlYWRGaWxlKGEuZGF0YS5wYXRoLHtlbmNvZGluZzoidXRmOCJ9KX07YnJlYWt9Y2FzZSBoLkJpbmFyeUZpbGU6e3M9e3BhdGg6YS5kYXRhLnBhdGgsZGF0YTp0cihBLGEuZGF0YS5wYXRoKX07YnJlYWt9Y2FzZSBoLkltYWdlOntsZXQgQj1zQShBLG4pO0IuZGF0YT1GKEEsbiwwLEIuaW1hZ2VUeXBlLmNvbXBvbmVudFR5cGUpLEIuZGlyZWN0aW9uPUYoQSxuLDEsei5GbG9hdDY0KSxCLm1ldGFkYXRhPW5ldyBNYXAoQi5tZXRhZGF0YSkscz1CO2JyZWFrfWNhc2UgaC5NZXNoOntsZXQgQj1zQShBLG4pO0IubnVtYmVyT2ZQb2ludHM+MD9CLnBvaW50cz1GKEEsbiwwLEIubWVzaFR5cGUucG9pbnRDb21wb25lbnRUeXBlKTpCLnBvaW50cz1IKEIubWVzaFR5cGUucG9pbnRDb21wb25lbnRUeXBlLG5ldyBBcnJheUJ1ZmZlcigwKSksQi5udW1iZXJPZkNlbGxzPjA/Qi5jZWxscz1GKEEsbiwxLEIubWVzaFR5cGUuY2VsbENvbXBvbmVudFR5cGUpOkIuY2VsbHM9SChCLm1lc2hUeXBlLmNlbGxDb21wb25lbnRUeXBlLG5ldyBBcnJheUJ1ZmZlcigwKSksQi5udW1iZXJPZlBvaW50UGl4ZWxzPjA/Qi5wb2ludERhdGE9RihBLG4sMixCLm1lc2hUeXBlLnBvaW50UGl4ZWxDb21wb25lbnRUeXBlKTpCLnBvaW50RGF0YT1IKEIubWVzaFR5cGUucG9pbnRQaXhlbENvbXBvbmVudFR5cGUsbmV3IEFycmF5QnVmZmVyKDApKSxCLm51bWJlck9mQ2VsbFBpeGVscz4wP0IuY2VsbERhdGE9RihBLG4sMyxCLm1lc2hUeXBlLmNlbGxQaXhlbENvbXBvbmVudFR5cGUpOkIuY2VsbERhdGE9SChCLm1lc2hUeXBlLmNlbGxQaXhlbENvbXBvbmVudFR5cGUsbmV3IEFycmF5QnVmZmVyKDApKSxzPUI7YnJlYWt9Y2FzZSBoLlBvaW50U2V0OntsZXQgQj1zQShBLG4pO0IubnVtYmVyT2ZQb2ludHM+MD9CLnBvaW50cz1GKEEsbiwwLEIucG9pbnRTZXRUeXBlLnBvaW50Q29tcG9uZW50VHlwZSk6Qi5wb2ludHM9SChCLnBvaW50U2V0VHlwZS5wb2ludENvbXBvbmVudFR5cGUsbmV3IEFycmF5QnVmZmVyKDApKSxCLm51bWJlck9mUG9pbnRQaXhlbHM+MD9CLnBvaW50RGF0YT1GKEEsbiwxLEIucG9pbnRTZXRUeXBlLnBvaW50UGl4ZWxDb21wb25lbnRUeXBlKTpCLnBvaW50RGF0YT1IKEIucG9pbnRTZXRUeXBlLnBvaW50UGl4ZWxDb21wb25lbnRUeXBlLG5ldyBBcnJheUJ1ZmZlcigwKSkscz1CO2JyZWFrfWNhc2UgaC5UcmFuc2Zvcm1MaXN0OntsZXQgQj1zQShBLG4pO0IuZm9yRWFjaCgoRSxsKT0+e0UubnVtYmVyT2ZGaXhlZFBhcmFtZXRlcnM+MCYmKEJbbF0uZml4ZWRQYXJhbWV0ZXJzPUYoQSxuLGwqMixFLnRyYW5zZm9ybVR5cGUucGFyYW1ldGVyc1ZhbHVlVHlwZSkpLEUubnVtYmVyT2ZGaXhlZFBhcmFtZXRlcnM+MCYmKEJbbF0ucGFyYW1ldGVycz1GKEEsbixsKjIrMSxFLnRyYW5zZm9ybVR5cGUucGFyYW1ldGVyc1ZhbHVlVHlwZSkpfSkscz1CO2JyZWFrfWNhc2UgaC5Qb2x5RGF0YTp7bGV0IEI9c0EoQSxuKTtCLm51bWJlck9mUG9pbnRzPjA/Qi5wb2ludHM9RihBLG4sMCx6LkZsb2F0MzIpOkIucG9pbnRzPW5ldyBGbG9hdDMyQXJyYXksQi52ZXJ0aWNlc0J1ZmZlclNpemU+MD9CLnZlcnRpY2VzPUYoQSxuLDEsUi5VSW50MzIpOkIudmVydGljZXM9bmV3IFVpbnQzMkFycmF5LEIubGluZXNCdWZmZXJTaXplPjA/Qi5saW5lcz1GKEEsbiwyLFIuVUludDMyKTpCLmxpbmVzPW5ldyBVaW50MzJBcnJheSxCLnBvbHlnb25zQnVmZmVyU2l6ZT4wP0IucG9seWdvbnM9RihBLG4sMyxSLlVJbnQzMik6Qi5wb2x5Z29ucz1uZXcgVWludDMyQXJyYXksQi50cmlhbmdsZVN0cmlwc0J1ZmZlclNpemU+MD9CLnRyaWFuZ2xlU3RyaXBzPUYoQSxuLDQsUi5VSW50MzIpOkIudHJpYW5nbGVTdHJpcHM9bmV3IFVpbnQzMkFycmF5LEIubnVtYmVyT2ZQb2ludFBpeGVscz4wP0IucG9pbnREYXRhPUYoQSxuLDUsQi5wb2x5RGF0YVR5cGUucG9pbnRQaXhlbENvbXBvbmVudFR5cGUpOkIucG9pbnREYXRhPUgoQi5wb2x5RGF0YVR5cGUucG9pbnRQaXhlbENvbXBvbmVudFR5cGUsbmV3IEFycmF5QnVmZmVyKDApKSxCLm51bWJlck9mQ2VsbFBpeGVscz4wP0IuY2VsbERhdGE9RihBLG4sNixCLnBvbHlEYXRhVHlwZS5jZWxsUGl4ZWxDb21wb25lbnRUeXBlKTpCLmNlbGxEYXRhPUgoQi5wb2x5RGF0YVR5cGUuY2VsbFBpeGVsQ29tcG9uZW50VHlwZSxuZXcgQXJyYXlCdWZmZXIoMCkpLHM9QjticmVha31kZWZhdWx0OnRocm93IEVycm9yKCJVbnN1cHBvcnRlZCBvdXRwdXQgSW50ZXJmYWNlVHlwZSIpfWxldCBmPXt0eXBlOmEudHlwZSxkYXRhOnN9O1EucHVzaChmKX0pLHtyZXR1cm5WYWx1ZTpvLHN0ZG91dDpnLHN0ZGVycjpDLG91dHB1dHM6UX19dmFyIGxlPWVyO3ZhciBJcj10eXBlb2YgZ2xvYmFsVGhpcy5TaGFyZWRBcnJheUJ1ZmZlcjwidSI7ZnVuY3Rpb24gcnIoQSx0KXtpZihBPT1udWxsKXJldHVybltdO2xldCBlPVtdO2ZvcihsZXQgST0wO0k8QS5sZW5ndGg7SSsrKXtsZXQgcj1vcihBW0ldLHQpO3IhPT1udWxsJiZlLnB1c2gocil9cmV0dXJuIGV9ZnVuY3Rpb24gb3IoQSx0KXtpZihBPT1udWxsKXJldHVybiBudWxsO2xldCBlPW51bGw7cmV0dXJuIEEuYnVmZmVyIT09dm9pZCAwP2U9QS5idWZmZXI6QS5ieXRlTGVuZ3RoIT09dm9pZCAwJiYoZT1BKSxJciYmZSBpbnN0YW5jZW9mIFNoYXJlZEFycmF5QnVmZmVyP251bGw6dD9lOmUuc2xpY2UoMCl9dmFyIHVlPXJyO2Z1bmN0aW9uIGdyKEEpe3JldHVybltBLmRhdGEsQS5kaXJlY3Rpb25dfXZhciBEZT1ncjtmdW5jdGlvbiBpcihBKXtyZXR1cm5bQS5wb2ludHMsQS5wb2ludERhdGEsQS5jZWxscyxBLmNlbGxEYXRhXX12YXIgaGU9aXI7ZnVuY3Rpb24gbnIoQSl7cmV0dXJuW0EucG9pbnRzLEEudmVydGljZXMsQS5saW5lcyxBLnBvbHlnb25zLEEudHJpYW5nbGVTdHJpcHMsQS5wb2ludERhdGEsQS5jZWxsRGF0YV19dmFyIGRlPW5yO2FzeW5jIGZ1bmN0aW9uIHNyKEEsdCxlLEkpe2xldCByPWxlKEEsdCxlLEkpLG89W107cmV0dXJuIHIub3V0cHV0cy5mb3JFYWNoKGZ1bmN0aW9uKGcpe2lmKGcudHlwZT09PWguQmluYXJ5U3RyZWFtfHxnLnR5cGU9PT1oLkJpbmFyeUZpbGUpe2xldCBDPWcuZGF0YTtvLnB1c2goQyl9ZWxzZSBpZihnLnR5cGU9PT1oLkltYWdlKXtsZXQgQz1nLmRhdGE7by5wdXNoKC4uLkRlKEMpKX1lbHNlIGlmKGcudHlwZT09PWguTWVzaCl7bGV0IEM9Zy5kYXRhO28ucHVzaCguLi5oZShDKSl9ZWxzZSBpZihnLnR5cGU9PT1oLlBvbHlEYXRhKXtsZXQgQz1nLmRhdGE7by5wdXNoKC4uLmRlKEMpKX19KSxNQShyLHVlKG8sITApKX12YXIgeWU9c3I7dmFyIENyPXtydW5QaXBlbGluZTphc3luYyBmdW5jdGlvbihBLHQsZSxJLHIsbyl7bGV0IGc9YXdhaXQgYWUoQSx0LG8pO3JldHVybiBhd2FpdCB5ZShnLGUsSSxyKX19O2ZBKENyKTslMEEvKiEgQnVuZGxlZCBsaWNlbnNlIGluZm9ybWF0aW9uOiUwQSUwQWNvbWxpbmsvZGlzdC9lc20vY29tbGluay5tanM6JTBBICAoKiolMEEgICAqIEBsaWNlbnNlJTBBICAgKiBDb3B5cmlnaHQgMjAxOSBHb29nbGUgTExDJTBBICAgKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMCUwQSAgICopJTBBKi8lMEEnO3F0KHZ0KTtleHBvcnR7RGUgYXMgY29tcGFyZURvdWJsZUltYWdlcyxWbiBhcyBjb21wYXJlSW1hZ2VzLEt0IGFzIGdldERlZmF1bHRXZWJXb3JrZXIsJCBhcyBnZXRQaXBlbGluZVdvcmtlclVybCxNQSBhcyBnZXRQaXBlbGluZXNCYXNlVXJsLFlJIGFzIHNldERlZmF1bHRXZWJXb3JrZXIscXQgYXMgc2V0UGlwZWxpbmVXb3JrZXJVcmwseEkgYXMgc2V0UGlwZWxpbmVzQmFzZVVybCxiZSBhcyB2ZWN0b3JNYWduaXR1ZGUscUEgYXMgdmVyc2lvbn07Ci8qISBCdW5kbGVkIGxpY2Vuc2UgaW5mb3JtYXRpb246Cgpjb21saW5rL2Rpc3QvZXNtL2NvbWxpbmsubWpzOgogICgqKgogICAqIEBsaWNlbnNlCiAgICogQ29weXJpZ2h0IDIwMTkgR29vZ2xlIExMQwogICAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wCiAgICopCiovCg==""" +default_js_module = """data:text/javascript;base64,dmFyIFd0PU9iamVjdC5kZWZpbmVQcm9wZXJ0eTt2YXIganQ9KEEsZSk9Pntmb3IodmFyIHIgaW4gZSlXdChBLHIse2dldDplW3JdLGVudW1lcmFibGU6ITB9KX07dmFyIF90PSI1LjMuMSIscUE9X3Q7dmFyIFZ0PXtJbnQ4OiJpbnQ4IixVSW50ODoidWludDgiLEludDE2OiJpbnQxNiIsVUludDE2OiJ1aW50MTYiLEludDMyOiJpbnQzMiIsVUludDMyOiJ1aW50MzIiLEludDY0OiJpbnQ2NCIsVUludDY0OiJ1aW50NjQiLFNpemVWYWx1ZVR5cGU6InVpbnQ2NCIsSWRlbnRpZmllclR5cGU6InVpbnQ2NCIsSW5kZXhWYWx1ZVR5cGU6ImludDY0IixPZmZzZXRWYWx1ZVR5cGU6ImludDY0In0scD1WdDt2YXIgenQ9e0Zsb2F0MzI6ImZsb2F0MzIiLEZsb2F0NjQ6ImZsb2F0NjQiLFNwYWNlUHJlY2lzaW9uVHlwZToiZmxvYXQ2NCJ9LFI9enQ7ZnVuY3Rpb24gWnQoQSxlKXtsZXQgcj1udWxsO3N3aXRjaChBKXtjYXNlIHAuVUludDg6e3I9bmV3IFVpbnQ4QXJyYXkoZSk7YnJlYWt9Y2FzZSBwLkludDg6e3I9bmV3IEludDhBcnJheShlKTticmVha31jYXNlIHAuVUludDE2OntyPW5ldyBVaW50MTZBcnJheShlKTticmVha31jYXNlIHAuSW50MTY6e3I9bmV3IEludDE2QXJyYXkoZSk7YnJlYWt9Y2FzZSBwLlVJbnQzMjp7cj1uZXcgVWludDMyQXJyYXkoZSk7YnJlYWt9Y2FzZSBwLkludDMyOntyPW5ldyBJbnQzMkFycmF5KGUpO2JyZWFrfWNhc2UgcC5VSW50NjQ6e3R5cGVvZiBnbG9iYWxUaGlzLkJpZ1VpbnQ2NEFycmF5PT0iZnVuY3Rpb24iP3I9bmV3IEJpZ1VpbnQ2NEFycmF5KGUpOnI9bmV3IFVpbnQ4QXJyYXkoZSk7YnJlYWt9Y2FzZSBwLkludDY0Ont0eXBlb2YgZ2xvYmFsVGhpcy5CaWdJbnQ2NEFycmF5PT0iZnVuY3Rpb24iP3I9bmV3IEJpZ0ludDY0QXJyYXkoZSk6cj1uZXcgVWludDhBcnJheShlKTticmVha31jYXNlIFIuRmxvYXQzMjp7cj1uZXcgRmxvYXQzMkFycmF5KGUpO2JyZWFrfWNhc2UgUi5GbG9hdDY0OntyPW5ldyBGbG9hdDY0QXJyYXkoZSk7YnJlYWt9Y2FzZSJudWxsIjp7cj1udWxsO2JyZWFrfWNhc2UgbnVsbDp7cj1udWxsO2JyZWFrfWRlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKCJUeXBlIGlzIG5vdCBzdXBwb3J0ZWQgYXMgYSBUeXBlZEFycmF5Iil9cmV0dXJuIHJ9dmFyIE89WnQ7dmFyIFh0PXtVbmtub3duOiJVbmtub3duIixTY2FsYXI6IlNjYWxhciIsUkdCOiJSR0IiLFJHQkE6IlJHQkEiLE9mZnNldDoiT2Zmc2V0IixWZWN0b3I6IlZlY3RvciIsUG9pbnQ6IlBvaW50IixDb3ZhcmlhbnRWZWN0b3I6IkNvdmFyaWFudFZlY3RvciIsU3ltbWV0cmljU2Vjb25kUmFua1RlbnNvcjoiU3ltbWV0cmljU2Vjb25kUmFua1RlbnNvciIsRGlmZnVzaW9uVGVuc29yM0Q6IkRpZmZ1c2lvblRlbnNvcjNEIixDb21wbGV4OiJDb21wbGV4IixGaXhlZEFycmF5OiJGaXhlZEFycmF5IixBcnJheToiQXJyYXkiLE1hdHJpeDoiTWF0cml4IixWYXJpYWJsZUxlbmd0aFZlY3RvcjoiVmFyaWFibGVMZW5ndGhWZWN0b3IiLFZhcmlhYmxlU2l6ZU1hdHJpeDoiVmFyaWFibGVTaXplTWF0cml4In0saz1YdDt2YXIgWUE9Y2xhc3N7ZGltZW5zaW9uO2NvbXBvbmVudFR5cGU7cGl4ZWxUeXBlO2NvbXBvbmVudHM7Y29uc3RydWN0b3IoZT0yLHI9cC5VSW50OCx0PWsuU2NhbGFyLG49MSl7dGhpcy5kaW1lbnNpb249ZSx0aGlzLmNvbXBvbmVudFR5cGU9cix0aGlzLnBpeGVsVHlwZT10LHRoaXMuY29tcG9uZW50cz1ufX0sRmU9WUE7ZnVuY3Rpb24gJHQoQSxlLHIsdCxuKXtBW3QrciplXT1ufXZhciBrZT0kdDt2YXIgS0E9Y2xhc3N7aW1hZ2VUeXBlO25hbWU9IkltYWdlIjtvcmlnaW47c3BhY2luZztkaXJlY3Rpb247c2l6ZTttZXRhZGF0YTtkYXRhO2NvbnN0cnVjdG9yKGU9bmV3IEZlKXt0aGlzLmltYWdlVHlwZT1lO2xldCByPWUuZGltZW5zaW9uO3RoaXMub3JpZ2luPW5ldyBBcnJheShyKSx0aGlzLm9yaWdpbi5maWxsKDApLHRoaXMuc3BhY2luZz1uZXcgQXJyYXkociksdGhpcy5zcGFjaW5nLmZpbGwoMSksdGhpcy5kaXJlY3Rpb249bmV3IEZsb2F0NjRBcnJheShyKnIpLHRoaXMuZGlyZWN0aW9uLmZpbGwoMCk7Zm9yKGxldCB0PTA7dDxyO3QrKylrZSh0aGlzLmRpcmVjdGlvbixyLHQsdCwxKTt0aGlzLnNpemU9bmV3IEFycmF5KHIpLHRoaXMuc2l6ZS5maWxsKDApLHRoaXMubWV0YWRhdGE9bmV3IE1hcCx0aGlzLmRhdGE9bnVsbH19LFVlPUtBO2Z1bmN0aW9uIEFyKEEsZSl7bGV0IHI9ey4uLkEuaW1hZ2VUeXBlfTtpZih0eXBlb2YgZTwidSImJnR5cGVvZiBlLnBpeGVsVHlwZTwidSImJihyLnBpeGVsVHlwZT1lLnBpeGVsVHlwZSxlLnBpeGVsVHlwZT09PWsuU2NhbGFyJiZyLmNvbXBvbmVudHMhPT0xKSl0aHJvdyBuZXcgRXJyb3IoIkNhbm5vdCBjYXN0IG11bHRpLWNvbXBvbmVudCBpbWFnZSB0byBhIHNjYWxhciBpbWFnZSIpO3R5cGVvZiBlPCJ1IiYmdHlwZW9mIGUuY29tcG9uZW50VHlwZTwidSImJmUuY29tcG9uZW50VHlwZSE9PUEuaW1hZ2VUeXBlLmNvbXBvbmVudFR5cGUmJihyLmNvbXBvbmVudFR5cGU9ZS5jb21wb25lbnRUeXBlKTtsZXQgdD1uZXcgVWUocik7aWYodC5uYW1lPUEubmFtZSx0Lm9yaWdpbj1BcnJheS5mcm9tKEEub3JpZ2luKSx0LnNwYWNpbmc9QXJyYXkuZnJvbShBLnNwYWNpbmcpLHQuZGlyZWN0aW9uPUEuZGlyZWN0aW9uLnNsaWNlKCksdC5zaXplPUFycmF5LmZyb20oQS5zaXplKSx0Lm1ldGFkYXRhPW5ldyBNYXAoSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShBcnJheS5mcm9tKEEubWV0YWRhdGEpKSkpLEEuZGF0YSE9PW51bGwpaWYodHlwZW9mIGU8InUiJiZ0eXBlb2YgZS5jb21wb25lbnRUeXBlPCJ1IiYmZS5jb21wb25lbnRUeXBlIT09QS5pbWFnZVR5cGUuY29tcG9uZW50VHlwZSlzd2l0Y2goQS5pbWFnZVR5cGUuY29tcG9uZW50VHlwZSl7Y2FzZSBwLlVJbnQ4OmNhc2UgcC5JbnQ4OmNhc2UgcC5VSW50MTY6Y2FzZSBwLkludDE2OmNhc2UgcC5VSW50MzI6Y2FzZSBwLkludDMyOmNhc2UgUi5GbG9hdDMyOmNhc2UgUi5GbG9hdDY0OnN3aXRjaCh0LmltYWdlVHlwZS5jb21wb25lbnRUeXBlKXtjYXNlIHAuVUludDg6dC5kYXRhPW5ldyBVaW50OEFycmF5KEEuZGF0YSk7YnJlYWs7Y2FzZSBwLkludDg6dC5kYXRhPW5ldyBJbnQ4QXJyYXkoQS5kYXRhKTticmVhaztjYXNlIHAuVUludDE2OnQuZGF0YT1uZXcgVWludDE2QXJyYXkoQS5kYXRhKTticmVhaztjYXNlIHAuSW50MTY6dC5kYXRhPW5ldyBJbnQxNkFycmF5KEEuZGF0YSk7YnJlYWs7Y2FzZSBwLlVJbnQzMjp0LmRhdGE9bmV3IFVpbnQzMkFycmF5KEEuZGF0YSk7YnJlYWs7Y2FzZSBwLkludDMyOnQuZGF0YT1uZXcgSW50MzJBcnJheShBLmRhdGEpO2JyZWFrO2Nhc2UgUi5GbG9hdDMyOnQuZGF0YT1uZXcgRmxvYXQzMkFycmF5KEEuZGF0YSk7YnJlYWs7Y2FzZSBSLkZsb2F0NjQ6dC5kYXRhPW5ldyBGbG9hdDY0QXJyYXkoQS5kYXRhKTticmVhaztjYXNlIHAuVUludDY0OnQuZGF0YT1uZXcgQmlnVWludDY0QXJyYXkoQS5kYXRhLmxlbmd0aCk7Zm9yKGxldCBuPTA7bjx0LmRhdGEubGVuZ3RoO24rKyl0LmRhdGFbbl09QmlnSW50LmFzSW50Tig2NCxCaWdJbnQoQS5kYXRhW25dKSk7YnJlYWs7Y2FzZSBwLkludDY0OnQuZGF0YT1uZXcgQmlnSW50NjRBcnJheShBLmRhdGEubGVuZ3RoKTtmb3IobGV0IG49MDtuPHQuZGF0YS5sZW5ndGg7bisrKXQuZGF0YVtuXT1CaWdJbnQuYXNVaW50Tig2NCxCaWdJbnQoQS5kYXRhW25dKSk7YnJlYWt9YnJlYWs7Y2FzZSBwLlVJbnQ2NDpjYXNlIHAuSW50NjQ6c3dpdGNoKHQuaW1hZ2VUeXBlLmNvbXBvbmVudFR5cGUpe2Nhc2UgcC5VSW50ODp0LmRhdGE9bmV3IFVpbnQ4QXJyYXkoQS5kYXRhLmxlbmd0aCk7Zm9yKGxldCBuPTA7bjx0LmRhdGEubGVuZ3RoO24rKyl0LmRhdGFbbl09TnVtYmVyKEEuZGF0YVtuXSk7YnJlYWs7Y2FzZSBwLkludDg6dC5kYXRhPW5ldyBJbnQ4QXJyYXkoQS5kYXRhLmxlbmd0aCk7Zm9yKGxldCBuPTA7bjx0LmRhdGEubGVuZ3RoO24rKyl0LmRhdGFbbl09TnVtYmVyKEEuZGF0YVtuXSk7YnJlYWs7Y2FzZSBwLlVJbnQxNjp0LmRhdGE9bmV3IFVpbnQxNkFycmF5KEEuZGF0YS5sZW5ndGgpO2ZvcihsZXQgbj0wO248dC5kYXRhLmxlbmd0aDtuKyspdC5kYXRhW25dPU51bWJlcihBLmRhdGFbbl0pO2JyZWFrO2Nhc2UgcC5JbnQxNjp0LmRhdGE9bmV3IEludDE2QXJyYXkoQS5kYXRhLmxlbmd0aCk7Zm9yKGxldCBuPTA7bjx0LmRhdGEubGVuZ3RoO24rKyl0LmRhdGFbbl09TnVtYmVyKEEuZGF0YVtuXSk7YnJlYWs7Y2FzZSBwLlVJbnQzMjp0LmRhdGE9bmV3IFVpbnQzMkFycmF5KEEuZGF0YS5sZW5ndGgpO2ZvcihsZXQgbj0wO248dC5kYXRhLmxlbmd0aDtuKyspdC5kYXRhW25dPU51bWJlcihBLmRhdGFbbl0pO2JyZWFrO2Nhc2UgcC5JbnQzMjp0LmRhdGE9bmV3IEludDMyQXJyYXkoQS5kYXRhLmxlbmd0aCk7Zm9yKGxldCBuPTA7bjx0LmRhdGEubGVuZ3RoO24rKyl0LmRhdGFbbl09TnVtYmVyKEEuZGF0YVtuXSk7YnJlYWs7Y2FzZSBSLkZsb2F0MzI6dC5kYXRhPW5ldyBGbG9hdDMyQXJyYXkoQS5kYXRhLmxlbmd0aCk7Zm9yKGxldCBuPTA7bjx0LmRhdGEubGVuZ3RoO24rKyl0LmRhdGFbbl09TnVtYmVyKEEuZGF0YVtuXSk7YnJlYWs7Y2FzZSBSLkZsb2F0NjQ6dC5kYXRhPW5ldyBGbG9hdDY0QXJyYXkoQS5kYXRhLmxlbmd0aCk7Zm9yKGxldCBuPTA7bjx0LmRhdGEubGVuZ3RoO24rKyl0LmRhdGFbbl09TnVtYmVyKEEuZGF0YVtuXSk7YnJlYWs7Y2FzZSBwLlVJbnQ2NDp0LmRhdGE9bmV3IEJpZ1VpbnQ2NEFycmF5KEEuZGF0YSk7YnJlYWs7Y2FzZSBwLkludDY0OnQuZGF0YT1uZXcgQmlnSW50NjRBcnJheShBLmRhdGEpO2JyZWFrfWJyZWFrfWVsc2V7bGV0IG49QS5kYXRhLmNvbnN0cnVjdG9yO3QuZGF0YT1uZXcgbihBLmRhdGEubGVuZ3RoKSx0LmRhdGEhPW51bGwmJnQuZGF0YS5zZXQoQS5kYXRhLDApfXJldHVybiB0fXZhciBFQT1Bcjt2YXIgZXI9e1RleHRGaWxlOiJUZXh0RmlsZSIsQmluYXJ5RmlsZToiQmluYXJ5RmlsZSIsVGV4dFN0cmVhbToiVGV4dFN0cmVhbSIsQmluYXJ5U3RyZWFtOiJCaW5hcnlTdHJlYW0iLEltYWdlOiJJbWFnZSIsUG9pbnRTZXQ6IlBvaW50U2V0IixNZXNoOiJNZXNoIixQb2x5RGF0YToiUG9seURhdGEiLFRyYW5zZm9ybUxpc3Q6IlRyYW5zZm9ybUxpc3QiLEpzb25Db21wYXRpYmxlOiJKc29uQ29tcGF0aWJsZSJ9LG09ZXI7dmFyIFRlPVN5bWJvbCgiQ29tbGluay5wcm94eSIpLHRyPVN5bWJvbCgiQ29tbGluay5lbmRwb2ludCIpLGpBPVN5bWJvbCgiQ29tbGluay5yZWxlYXNlUHJveHkiKSx2QT1TeW1ib2woIkNvbWxpbmsuZmluYWxpemVyIiksdUE9U3ltYm9sKCJDb21saW5rLnRocm93biIpLExlPUE9PnR5cGVvZiBBPT0ib2JqZWN0IiYmQSE9PW51bGx8fHR5cGVvZiBBPT0iZnVuY3Rpb24iLHJyPXtjYW5IYW5kbGU6QT0+TGUoQSkmJkFbVGVdLHNlcmlhbGl6ZShBKXtsZXR7cG9ydDE6ZSxwb3J0MjpyfT1uZXcgTWVzc2FnZUNoYW5uZWw7cmV0dXJuIHhlKEEsZSksW3IsW3JdXX0sZGVzZXJpYWxpemUoQSl7cmV0dXJuIEEuc3RhcnQoKSxfQShBKX19LG5yPXtjYW5IYW5kbGU6QT0+TGUoQSkmJnVBIGluIEEsc2VyaWFsaXplKHt2YWx1ZTpBfSl7bGV0IGU7cmV0dXJuIEEgaW5zdGFuY2VvZiBFcnJvcj9lPXtpc0Vycm9yOiEwLHZhbHVlOnttZXNzYWdlOkEubWVzc2FnZSxuYW1lOkEubmFtZSxzdGFjazpBLnN0YWNrfX06ZT17aXNFcnJvcjohMSx2YWx1ZTpBfSxbZSxbXV19LGRlc2VyaWFsaXplKEEpe3Rocm93IEEuaXNFcnJvcj9PYmplY3QuYXNzaWduKG5ldyBFcnJvcihBLnZhbHVlLm1lc3NhZ2UpLEEudmFsdWUpOkEudmFsdWV9fSxHZT1uZXcgTWFwKFtbInByb3h5Iixycl0sWyJ0aHJvdyIsbnJdXSk7ZnVuY3Rpb24gb3IoQSxlKXtmb3IobGV0IHIgb2YgQSlpZihlPT09cnx8cj09PSIqInx8ciBpbnN0YW5jZW9mIFJlZ0V4cCYmci50ZXN0KGUpKXJldHVybiEwO3JldHVybiExfWZ1bmN0aW9uIHhlKEEsZT1nbG9iYWxUaGlzLHI9WyIqIl0pe2UuYWRkRXZlbnRMaXN0ZW5lcigibWVzc2FnZSIsZnVuY3Rpb24gdChuKXtpZighbnx8IW4uZGF0YSlyZXR1cm47aWYoIW9yKHIsbi5vcmlnaW4pKXtjb25zb2xlLndhcm4oYEludmFsaWQgb3JpZ2luICcke24ub3JpZ2lufScgZm9yIGNvbWxpbmsgcHJveHlgKTtyZXR1cm59bGV0e2lkOm8sdHlwZTppLHBhdGg6bH09T2JqZWN0LmFzc2lnbih7cGF0aDpbXX0sbi5kYXRhKSxjPShuLmRhdGEuYXJndW1lbnRMaXN0fHxbXSkubWFwKFkpLEM7dHJ5e2xldCBzPWwuc2xpY2UoMCwtMSkucmVkdWNlKChmLGcpPT5mW2ddLEEpLEk9bC5yZWR1Y2UoKGYsZyk9PmZbZ10sQSk7c3dpdGNoKGkpe2Nhc2UiR0VUIjpDPUk7YnJlYWs7Y2FzZSJTRVQiOnNbbC5zbGljZSgtMSlbMF1dPVkobi5kYXRhLnZhbHVlKSxDPSEwO2JyZWFrO2Nhc2UiQVBQTFkiOkM9SS5hcHBseShzLGMpO2JyZWFrO2Nhc2UiQ09OU1RSVUNUIjp7bGV0IGY9bmV3IEkoLi4uYyk7Qz1ncihmKX1icmVhaztjYXNlIkVORFBPSU5UIjp7bGV0e3BvcnQxOmYscG9ydDI6Z309bmV3IE1lc3NhZ2VDaGFubmVsO3hlKEEsZyksQz1WQShmLFtmXSl9YnJlYWs7Y2FzZSJSRUxFQVNFIjpDPXZvaWQgMDticmVhaztkZWZhdWx0OnJldHVybn19Y2F0Y2gocyl7Qz17dmFsdWU6cyxbdUFdOjB9fVByb21pc2UucmVzb2x2ZShDKS5jYXRjaChzPT4oe3ZhbHVlOnMsW3VBXTowfSkpLnRoZW4ocz0+e2xldFtJLGZdPWRBKHMpO2UucG9zdE1lc3NhZ2UoT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LEkpLHtpZDpvfSksZiksaT09PSJSRUxFQVNFIiYmKGUucmVtb3ZlRXZlbnRMaXN0ZW5lcigibWVzc2FnZSIsdCksT2UoZSksdkEgaW4gQSYmdHlwZW9mIEFbdkFdPT0iZnVuY3Rpb24iJiZBW3ZBXSgpKX0pLmNhdGNoKHM9PntsZXRbSSxmXT1kQSh7dmFsdWU6bmV3IFR5cGVFcnJvcigiVW5zZXJpYWxpemFibGUgcmV0dXJuIHZhbHVlIiksW3VBXTowfSk7ZS5wb3N0TWVzc2FnZShPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sSSkse2lkOm99KSxmKX0pfSksZS5zdGFydCYmZS5zdGFydCgpfWZ1bmN0aW9uIGlyKEEpe3JldHVybiBBLmNvbnN0cnVjdG9yLm5hbWU9PT0iTWVzc2FnZVBvcnQifWZ1bmN0aW9uIE9lKEEpe2lyKEEpJiZBLmNsb3NlKCl9ZnVuY3Rpb24gX0EoQSxlKXtyZXR1cm4gV0EoQSxbXSxlKX1mdW5jdGlvbiBmQShBKXtpZihBKXRocm93IG5ldyBFcnJvcigiUHJveHkgaGFzIGJlZW4gcmVsZWFzZWQgYW5kIGlzIG5vdCB1c2VhYmxlIil9ZnVuY3Rpb24gUGUoQSl7cmV0dXJuIHYoQSx7dHlwZToiUkVMRUFTRSJ9KS50aGVuKCgpPT57T2UoQSl9KX12YXIgUUE9bmV3IFdlYWtNYXAscEE9IkZpbmFsaXphdGlvblJlZ2lzdHJ5ImluIGdsb2JhbFRoaXMmJm5ldyBGaW5hbGl6YXRpb25SZWdpc3RyeShBPT57bGV0IGU9KFFBLmdldChBKXx8MCktMTtRQS5zZXQoQSxlKSxlPT09MCYmUGUoQSl9KTtmdW5jdGlvbiBhcihBLGUpe2xldCByPShRQS5nZXQoZSl8fDApKzE7UUEuc2V0KGUscikscEEmJnBBLnJlZ2lzdGVyKEEsZSxBKX1mdW5jdGlvbiBzcihBKXtwQSYmcEEudW5yZWdpc3RlcihBKX1mdW5jdGlvbiBXQShBLGU9W10scj1mdW5jdGlvbigpe30pe2xldCB0PSExLG49bmV3IFByb3h5KHIse2dldChvLGkpe2lmKGZBKHQpLGk9PT1qQSlyZXR1cm4oKT0+e3NyKG4pLFBlKEEpLHQ9ITB9O2lmKGk9PT0idGhlbiIpe2lmKGUubGVuZ3RoPT09MClyZXR1cm57dGhlbjooKT0+bn07bGV0IGw9dihBLHt0eXBlOiJHRVQiLHBhdGg6ZS5tYXAoYz0+Yy50b1N0cmluZygpKX0pLnRoZW4oWSk7cmV0dXJuIGwudGhlbi5iaW5kKGwpfXJldHVybiBXQShBLFsuLi5lLGldKX0sc2V0KG8saSxsKXtmQSh0KTtsZXRbYyxDXT1kQShsKTtyZXR1cm4gdihBLHt0eXBlOiJTRVQiLHBhdGg6Wy4uLmUsaV0ubWFwKHM9PnMudG9TdHJpbmcoKSksdmFsdWU6Y30sQykudGhlbihZKX0sYXBwbHkobyxpLGwpe2ZBKHQpO2xldCBjPWVbZS5sZW5ndGgtMV07aWYoYz09PXRyKXJldHVybiB2KEEse3R5cGU6IkVORFBPSU5UIn0pLnRoZW4oWSk7aWYoYz09PSJiaW5kIilyZXR1cm4gV0EoQSxlLnNsaWNlKDAsLTEpKTtsZXRbQyxzXT1OZShsKTtyZXR1cm4gdihBLHt0eXBlOiJBUFBMWSIscGF0aDplLm1hcChJPT5JLnRvU3RyaW5nKCkpLGFyZ3VtZW50TGlzdDpDfSxzKS50aGVuKFkpfSxjb25zdHJ1Y3QobyxpKXtmQSh0KTtsZXRbbCxjXT1OZShpKTtyZXR1cm4gdihBLHt0eXBlOiJDT05TVFJVQ1QiLHBhdGg6ZS5tYXAoQz0+Qy50b1N0cmluZygpKSxhcmd1bWVudExpc3Q6bH0sYykudGhlbihZKX19KTtyZXR1cm4gYXIobixBKSxufWZ1bmN0aW9uIElyKEEpe3JldHVybiBBcnJheS5wcm90b3R5cGUuY29uY2F0LmFwcGx5KFtdLEEpfWZ1bmN0aW9uIE5lKEEpe2xldCBlPUEubWFwKGRBKTtyZXR1cm5bZS5tYXAocj0+clswXSksSXIoZS5tYXAocj0+clsxXSkpXX12YXIgSmU9bmV3IFdlYWtNYXA7ZnVuY3Rpb24gVkEoQSxlKXtyZXR1cm4gSmUuc2V0KEEsZSksQX1mdW5jdGlvbiBncihBKXtyZXR1cm4gT2JqZWN0LmFzc2lnbihBLHtbVGVdOiEwfSl9ZnVuY3Rpb24gZEEoQSl7Zm9yKGxldFtlLHJdb2YgR2UpaWYoci5jYW5IYW5kbGUoQSkpe2xldFt0LG5dPXIuc2VyaWFsaXplKEEpO3JldHVyblt7dHlwZToiSEFORExFUiIsbmFtZTplLHZhbHVlOnR9LG5dfXJldHVyblt7dHlwZToiUkFXIix2YWx1ZTpBfSxKZS5nZXQoQSl8fFtdXX1mdW5jdGlvbiBZKEEpe3N3aXRjaChBLnR5cGUpe2Nhc2UiSEFORExFUiI6cmV0dXJuIEdlLmdldChBLm5hbWUpLmRlc2VyaWFsaXplKEEudmFsdWUpO2Nhc2UiUkFXIjpyZXR1cm4gQS52YWx1ZX19ZnVuY3Rpb24gdihBLGUscil7cmV0dXJuIG5ldyBQcm9taXNlKHQ9PntsZXQgbj1scigpO0EuYWRkRXZlbnRMaXN0ZW5lcigibWVzc2FnZSIsZnVuY3Rpb24gbyhpKXshaS5kYXRhfHwhaS5kYXRhLmlkfHxpLmRhdGEuaWQhPT1ufHwoQS5yZW1vdmVFdmVudExpc3RlbmVyKCJtZXNzYWdlIixvKSx0KGkuZGF0YSkpfSksQS5zdGFydCYmQS5zdGFydCgpLEEucG9zdE1lc3NhZ2UoT2JqZWN0LmFzc2lnbih7aWQ6bn0sZSkscil9KX1mdW5jdGlvbiBscigpe3JldHVybiBuZXcgQXJyYXkoNCkuZmlsbCgwKS5tYXAoKCk9Pk1hdGguZmxvb3IoTWF0aC5yYW5kb20oKSpOdW1iZXIuTUFYX1NBRkVfSU5URUdFUikudG9TdHJpbmcoMTYpKS5qb2luKCItIil9ZnVuY3Rpb24gZUEoQSxlKXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gQS5hcHBseShlLGFyZ3VtZW50cyl9fXZhcnt0b1N0cmluZzpDcn09T2JqZWN0LnByb3RvdHlwZSx7Z2V0UHJvdG90eXBlT2Y6WEF9PU9iamVjdCxoQT0oQT0+ZT0+e2xldCByPUNyLmNhbGwoZSk7cmV0dXJuIEFbcl18fChBW3JdPXIuc2xpY2UoOCwtMSkudG9Mb3dlckNhc2UoKSl9KShPYmplY3QuY3JlYXRlKG51bGwpKSxUPUE9PihBPUEudG9Mb3dlckNhc2UoKSxlPT5oQShlKT09PUEpLHlBPUE9PmU9PnR5cGVvZiBlPT09QSx7aXNBcnJheTpXfT1BcnJheSx0QT15QSgidW5kZWZpbmVkIik7ZnVuY3Rpb24gY3IoQSl7cmV0dXJuIEEhPT1udWxsJiYhdEEoQSkmJkEuY29uc3RydWN0b3IhPT1udWxsJiYhdEEoQS5jb25zdHJ1Y3RvcikmJlUoQS5jb25zdHJ1Y3Rvci5pc0J1ZmZlcikmJkEuY29uc3RydWN0b3IuaXNCdWZmZXIoQSl9dmFyIFllPVQoIkFycmF5QnVmZmVyIik7ZnVuY3Rpb24gQnIoQSl7bGV0IGU7cmV0dXJuIHR5cGVvZiBBcnJheUJ1ZmZlcjwidSImJkFycmF5QnVmZmVyLmlzVmlldz9lPUFycmF5QnVmZmVyLmlzVmlldyhBKTplPUEmJkEuYnVmZmVyJiZZZShBLmJ1ZmZlciksZX12YXIgRXI9eUEoInN0cmluZyIpLFU9eUEoImZ1bmN0aW9uIiksS2U9eUEoIm51bWJlciIpLHdBPUE9PkEhPT1udWxsJiZ0eXBlb2YgQT09Im9iamVjdCIsZnI9QT0+QT09PSEwfHxBPT09ITEsbUE9QT0+e2lmKGhBKEEpIT09Im9iamVjdCIpcmV0dXJuITE7bGV0IGU9WEEoQSk7cmV0dXJuKGU9PT1udWxsfHxlPT09T2JqZWN0LnByb3RvdHlwZXx8T2JqZWN0LmdldFByb3RvdHlwZU9mKGUpPT09bnVsbCkmJiEoU3ltYm9sLnRvU3RyaW5nVGFnIGluIEEpJiYhKFN5bWJvbC5pdGVyYXRvciBpbiBBKX0sdXI9VCgiRGF0ZSIpLFFyPVQoIkZpbGUiKSxwcj1UKCJCbG9iIiksZHI9VCgiRmlsZUxpc3QiKSxtcj1BPT53QShBKSYmVShBLnBpcGUpLGhyPUE9PntsZXQgZTtyZXR1cm4gQSYmKHR5cGVvZiBGb3JtRGF0YT09ImZ1bmN0aW9uIiYmQSBpbnN0YW5jZW9mIEZvcm1EYXRhfHxVKEEuYXBwZW5kKSYmKChlPWhBKEEpKT09PSJmb3JtZGF0YSJ8fGU9PT0ib2JqZWN0IiYmVShBLnRvU3RyaW5nKSYmQS50b1N0cmluZygpPT09IltvYmplY3QgRm9ybURhdGFdIikpfSx5cj1UKCJVUkxTZWFyY2hQYXJhbXMiKSxbd3IsRHIsU3IsYnJdPVsiUmVhZGFibGVTdHJlYW0iLCJSZXF1ZXN0IiwiUmVzcG9uc2UiLCJIZWFkZXJzIl0ubWFwKFQpLFJyPUE9PkEudHJpbT9BLnRyaW0oKTpBLnJlcGxhY2UoL15bXHNcdUZFRkZceEEwXSt8W1xzXHVGRUZGXHhBMF0rJC9nLCIiKTtmdW5jdGlvbiByQShBLGUse2FsbE93bktleXM6cj0hMX09e30pe2lmKEE9PT1udWxsfHx0eXBlb2YgQT4idSIpcmV0dXJuO2xldCB0LG47aWYodHlwZW9mIEEhPSJvYmplY3QiJiYoQT1bQV0pLFcoQSkpZm9yKHQ9MCxuPUEubGVuZ3RoO3Q8bjt0KyspZS5jYWxsKG51bGwsQVt0XSx0LEEpO2Vsc2V7bGV0IG89cj9PYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhBKTpPYmplY3Qua2V5cyhBKSxpPW8ubGVuZ3RoLGw7Zm9yKHQ9MDt0PGk7dCsrKWw9b1t0XSxlLmNhbGwobnVsbCxBW2xdLGwsQSl9fWZ1bmN0aW9uIHZlKEEsZSl7ZT1lLnRvTG93ZXJDYXNlKCk7bGV0IHI9T2JqZWN0LmtleXMoQSksdD1yLmxlbmd0aCxuO2Zvcig7dC0tID4wOylpZihuPXJbdF0sZT09PW4udG9Mb3dlckNhc2UoKSlyZXR1cm4gbjtyZXR1cm4gbnVsbH12YXIgSz10eXBlb2YgZ2xvYmFsVGhpczwidSI/Z2xvYmFsVGhpczp0eXBlb2Ygc2VsZjwidSI/c2VsZjp0eXBlb2Ygd2luZG93PCJ1Ij93aW5kb3c6Z2xvYmFsLFdlPUE9PiF0QShBKSYmQSE9PUs7ZnVuY3Rpb24gWkEoKXtsZXR7Y2FzZWxlc3M6QX09V2UodGhpcykmJnRoaXN8fHt9LGU9e30scj0odCxuKT0+e2xldCBvPUEmJnZlKGUsbil8fG47bUEoZVtvXSkmJm1BKHQpP2Vbb109WkEoZVtvXSx0KTptQSh0KT9lW29dPVpBKHt9LHQpOlcodCk/ZVtvXT10LnNsaWNlKCk6ZVtvXT10fTtmb3IobGV0IHQ9MCxuPWFyZ3VtZW50cy5sZW5ndGg7dDxuO3QrKylhcmd1bWVudHNbdF0mJnJBKGFyZ3VtZW50c1t0XSxyKTtyZXR1cm4gZX12YXIgRnI9KEEsZSxyLHthbGxPd25LZXlzOnR9PXt9KT0+KHJBKGUsKG4sbyk9PntyJiZVKG4pP0Fbb109ZUEobixyKTpBW29dPW59LHthbGxPd25LZXlzOnR9KSxBKSxrcj1BPT4oQS5jaGFyQ29kZUF0KDApPT09NjUyNzkmJihBPUEuc2xpY2UoMSkpLEEpLFVyPShBLGUscix0KT0+e0EucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoZS5wcm90b3R5cGUsdCksQS5wcm90b3R5cGUuY29uc3RydWN0b3I9QSxPYmplY3QuZGVmaW5lUHJvcGVydHkoQSwic3VwZXIiLHt2YWx1ZTplLnByb3RvdHlwZX0pLHImJk9iamVjdC5hc3NpZ24oQS5wcm90b3R5cGUscil9LE5yPShBLGUscix0KT0+e2xldCBuLG8saSxsPXt9O2lmKGU9ZXx8e30sQT09bnVsbClyZXR1cm4gZTtkb3tmb3Iobj1PYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhBKSxvPW4ubGVuZ3RoO28tLSA+MDspaT1uW29dLCghdHx8dChpLEEsZSkpJiYhbFtpXSYmKGVbaV09QVtpXSxsW2ldPSEwKTtBPXIhPT0hMSYmWEEoQSl9d2hpbGUoQSYmKCFyfHxyKEEsZSkpJiZBIT09T2JqZWN0LnByb3RvdHlwZSk7cmV0dXJuIGV9LFRyPShBLGUscik9PntBPVN0cmluZyhBKSwocj09PXZvaWQgMHx8cj5BLmxlbmd0aCkmJihyPUEubGVuZ3RoKSxyLT1lLmxlbmd0aDtsZXQgdD1BLmluZGV4T2YoZSxyKTtyZXR1cm4gdCE9PS0xJiZ0PT09cn0sTHI9QT0+e2lmKCFBKXJldHVybiBudWxsO2lmKFcoQSkpcmV0dXJuIEE7bGV0IGU9QS5sZW5ndGg7aWYoIUtlKGUpKXJldHVybiBudWxsO2xldCByPW5ldyBBcnJheShlKTtmb3IoO2UtLSA+MDspcltlXT1BW2VdO3JldHVybiByfSxHcj0oQT0+ZT0+QSYmZSBpbnN0YW5jZW9mIEEpKHR5cGVvZiBVaW50OEFycmF5PCJ1IiYmWEEoVWludDhBcnJheSkpLHhyPShBLGUpPT57bGV0IHQ9KEEmJkFbU3ltYm9sLml0ZXJhdG9yXSkuY2FsbChBKSxuO2Zvcig7KG49dC5uZXh0KCkpJiYhbi5kb25lOyl7bGV0IG89bi52YWx1ZTtlLmNhbGwoQSxvWzBdLG9bMV0pfX0sT3I9KEEsZSk9PntsZXQgcix0PVtdO2Zvcig7KHI9QS5leGVjKGUpKSE9PW51bGw7KXQucHVzaChyKTtyZXR1cm4gdH0sUHI9VCgiSFRNTEZvcm1FbGVtZW50IiksSnI9QT0+QS50b0xvd2VyQ2FzZSgpLnJlcGxhY2UoL1stX1xzXShbYS16XGRdKShcdyopL2csZnVuY3Rpb24ocix0LG4pe3JldHVybiB0LnRvVXBwZXJDYXNlKCkrbn0pLEhlPSgoe2hhc093blByb3BlcnR5OkF9KT0+KGUscik9PkEuY2FsbChlLHIpKShPYmplY3QucHJvdG90eXBlKSxNcj1UKCJSZWdFeHAiKSxqZT0oQSxlKT0+e2xldCByPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKEEpLHQ9e307ckEociwobixvKT0+e2xldCBpOyhpPWUobixvLEEpKSE9PSExJiYodFtvXT1pfHxuKX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKEEsdCl9LEhyPUE9PntqZShBLChlLHIpPT57aWYoVShBKSYmWyJhcmd1bWVudHMiLCJjYWxsZXIiLCJjYWxsZWUiXS5pbmRleE9mKHIpIT09LTEpcmV0dXJuITE7bGV0IHQ9QVtyXTtpZihVKHQpKXtpZihlLmVudW1lcmFibGU9ITEsIndyaXRhYmxlImluIGUpe2Uud3JpdGFibGU9ITE7cmV0dXJufWUuc2V0fHwoZS5zZXQ9KCk9Pnt0aHJvdyBFcnJvcigiQ2FuIG5vdCByZXdyaXRlIHJlYWQtb25seSBtZXRob2QgJyIrcisiJyIpfSl9fSl9LHFyPShBLGUpPT57bGV0IHI9e30sdD1uPT57bi5mb3JFYWNoKG89PntyW29dPSEwfSl9O3JldHVybiBXKEEpP3QoQSk6dChTdHJpbmcoQSkuc3BsaXQoZSkpLHJ9LFlyPSgpPT57fSxLcj0oQSxlKT0+QSE9bnVsbCYmTnVtYmVyLmlzRmluaXRlKEE9K0EpP0E6ZSx6QT0iYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXoiLHFlPSIwMTIzNDU2Nzg5IixfZT17RElHSVQ6cWUsQUxQSEE6ekEsQUxQSEFfRElHSVQ6ekErekEudG9VcHBlckNhc2UoKStxZX0sdnI9KEE9MTYsZT1fZS5BTFBIQV9ESUdJVCk9PntsZXQgcj0iIix7bGVuZ3RoOnR9PWU7Zm9yKDtBLS07KXIrPWVbTWF0aC5yYW5kb20oKSp0fDBdO3JldHVybiByfTtmdW5jdGlvbiBXcihBKXtyZXR1cm4hIShBJiZVKEEuYXBwZW5kKSYmQVtTeW1ib2wudG9TdHJpbmdUYWddPT09IkZvcm1EYXRhIiYmQVtTeW1ib2wuaXRlcmF0b3JdKX12YXIganI9QT0+e2xldCBlPW5ldyBBcnJheSgxMCkscj0odCxuKT0+e2lmKHdBKHQpKXtpZihlLmluZGV4T2YodCk+PTApcmV0dXJuO2lmKCEoInRvSlNPTiJpbiB0KSl7ZVtuXT10O2xldCBvPVcodCk/W106e307cmV0dXJuIHJBKHQsKGksbCk9PntsZXQgYz1yKGksbisxKTshdEEoYykmJihvW2xdPWMpfSksZVtuXT12b2lkIDAsb319cmV0dXJuIHR9O3JldHVybiByKEEsMCl9LF9yPVQoIkFzeW5jRnVuY3Rpb24iKSxWcj1BPT5BJiYod0EoQSl8fFUoQSkpJiZVKEEudGhlbikmJlUoQS5jYXRjaCksVmU9KChBLGUpPT5BP3NldEltbWVkaWF0ZTplPygocix0KT0+KEsuYWRkRXZlbnRMaXN0ZW5lcigibWVzc2FnZSIsKHtzb3VyY2U6bixkYXRhOm99KT0+e249PT1LJiZvPT09ciYmdC5sZW5ndGgmJnQuc2hpZnQoKSgpfSwhMSksbj0+e3QucHVzaChuKSxLLnBvc3RNZXNzYWdlKHIsIioiKX0pKShgYXhpb3NAJHtNYXRoLnJhbmRvbSgpfWAsW10pOnI9PnNldFRpbWVvdXQocikpKHR5cGVvZiBzZXRJbW1lZGlhdGU9PSJmdW5jdGlvbiIsVShLLnBvc3RNZXNzYWdlKSksenI9dHlwZW9mIHF1ZXVlTWljcm90YXNrPCJ1Ij9xdWV1ZU1pY3JvdGFzay5iaW5kKEspOnR5cGVvZiBwcm9jZXNzPCJ1IiYmcHJvY2Vzcy5uZXh0VGlja3x8VmUsYT17aXNBcnJheTpXLGlzQXJyYXlCdWZmZXI6WWUsaXNCdWZmZXI6Y3IsaXNGb3JtRGF0YTpocixpc0FycmF5QnVmZmVyVmlldzpCcixpc1N0cmluZzpFcixpc051bWJlcjpLZSxpc0Jvb2xlYW46ZnIsaXNPYmplY3Q6d0EsaXNQbGFpbk9iamVjdDptQSxpc1JlYWRhYmxlU3RyZWFtOndyLGlzUmVxdWVzdDpEcixpc1Jlc3BvbnNlOlNyLGlzSGVhZGVyczpicixpc1VuZGVmaW5lZDp0QSxpc0RhdGU6dXIsaXNGaWxlOlFyLGlzQmxvYjpwcixpc1JlZ0V4cDpNcixpc0Z1bmN0aW9uOlUsaXNTdHJlYW06bXIsaXNVUkxTZWFyY2hQYXJhbXM6eXIsaXNUeXBlZEFycmF5OkdyLGlzRmlsZUxpc3Q6ZHIsZm9yRWFjaDpyQSxtZXJnZTpaQSxleHRlbmQ6RnIsdHJpbTpScixzdHJpcEJPTTprcixpbmhlcml0czpVcix0b0ZsYXRPYmplY3Q6TnIsa2luZE9mOmhBLGtpbmRPZlRlc3Q6VCxlbmRzV2l0aDpUcix0b0FycmF5OkxyLGZvckVhY2hFbnRyeTp4cixtYXRjaEFsbDpPcixpc0hUTUxGb3JtOlByLGhhc093blByb3BlcnR5OkhlLGhhc093blByb3A6SGUscmVkdWNlRGVzY3JpcHRvcnM6amUsZnJlZXplTWV0aG9kczpIcix0b09iamVjdFNldDpxcix0b0NhbWVsQ2FzZTpKcixub29wOllyLHRvRmluaXRlTnVtYmVyOktyLGZpbmRLZXk6dmUsZ2xvYmFsOkssaXNDb250ZXh0RGVmaW5lZDpXZSxBTFBIQUJFVDpfZSxnZW5lcmF0ZVN0cmluZzp2cixpc1NwZWNDb21wbGlhbnRGb3JtOldyLHRvSlNPTk9iamVjdDpqcixpc0FzeW5jRm46X3IsaXNUaGVuYWJsZTpWcixzZXRJbW1lZGlhdGU6VmUsYXNhcDp6cn07ZnVuY3Rpb24gaihBLGUscix0LG4pe0Vycm9yLmNhbGwodGhpcyksRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2U/RXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UodGhpcyx0aGlzLmNvbnN0cnVjdG9yKTp0aGlzLnN0YWNrPW5ldyBFcnJvcigpLnN0YWNrLHRoaXMubWVzc2FnZT1BLHRoaXMubmFtZT0iQXhpb3NFcnJvciIsZSYmKHRoaXMuY29kZT1lKSxyJiYodGhpcy5jb25maWc9ciksdCYmKHRoaXMucmVxdWVzdD10KSxuJiYodGhpcy5yZXNwb25zZT1uKX1hLmluaGVyaXRzKGosRXJyb3Ise3RvSlNPTjpmdW5jdGlvbigpe3JldHVybnttZXNzYWdlOnRoaXMubWVzc2FnZSxuYW1lOnRoaXMubmFtZSxkZXNjcmlwdGlvbjp0aGlzLmRlc2NyaXB0aW9uLG51bWJlcjp0aGlzLm51bWJlcixmaWxlTmFtZTp0aGlzLmZpbGVOYW1lLGxpbmVOdW1iZXI6dGhpcy5saW5lTnVtYmVyLGNvbHVtbk51bWJlcjp0aGlzLmNvbHVtbk51bWJlcixzdGFjazp0aGlzLnN0YWNrLGNvbmZpZzphLnRvSlNPTk9iamVjdCh0aGlzLmNvbmZpZyksY29kZTp0aGlzLmNvZGUsc3RhdHVzOnRoaXMucmVzcG9uc2UmJnRoaXMucmVzcG9uc2Uuc3RhdHVzP3RoaXMucmVzcG9uc2Uuc3RhdHVzOm51bGx9fX0pO3ZhciB6ZT1qLnByb3RvdHlwZSxaZT17fTtbIkVSUl9CQURfT1BUSU9OX1ZBTFVFIiwiRVJSX0JBRF9PUFRJT04iLCJFQ09OTkFCT1JURUQiLCJFVElNRURPVVQiLCJFUlJfTkVUV09SSyIsIkVSUl9GUl9UT09fTUFOWV9SRURJUkVDVFMiLCJFUlJfREVQUkVDQVRFRCIsIkVSUl9CQURfUkVTUE9OU0UiLCJFUlJfQkFEX1JFUVVFU1QiLCJFUlJfQ0FOQ0VMRUQiLCJFUlJfTk9UX1NVUFBPUlQiLCJFUlJfSU5WQUxJRF9VUkwiXS5mb3JFYWNoKEE9PntaZVtBXT17dmFsdWU6QX19KTtPYmplY3QuZGVmaW5lUHJvcGVydGllcyhqLFplKTtPYmplY3QuZGVmaW5lUHJvcGVydHkoemUsImlzQXhpb3NFcnJvciIse3ZhbHVlOiEwfSk7ai5mcm9tPShBLGUscix0LG4sbyk9PntsZXQgaT1PYmplY3QuY3JlYXRlKHplKTtyZXR1cm4gYS50b0ZsYXRPYmplY3QoQSxpLGZ1bmN0aW9uKGMpe3JldHVybiBjIT09RXJyb3IucHJvdG90eXBlfSxsPT5sIT09ImlzQXhpb3NFcnJvciIpLGouY2FsbChpLEEubWVzc2FnZSxlLHIsdCxuKSxpLmNhdXNlPUEsaS5uYW1lPUEubmFtZSxvJiZPYmplY3QuYXNzaWduKGksbyksaX07dmFyIFE9ajt2YXIgREE9bnVsbDtmdW5jdGlvbiAkQShBKXtyZXR1cm4gYS5pc1BsYWluT2JqZWN0KEEpfHxhLmlzQXJyYXkoQSl9ZnVuY3Rpb24gJGUoQSl7cmV0dXJuIGEuZW5kc1dpdGgoQSwiW10iKT9BLnNsaWNlKDAsLTIpOkF9ZnVuY3Rpb24gWGUoQSxlLHIpe3JldHVybiBBP0EuY29uY2F0KGUpLm1hcChmdW5jdGlvbihuLG8pe3JldHVybiBuPSRlKG4pLCFyJiZvPyJbIituKyJdIjpufSkuam9pbihyPyIuIjoiIik6ZX1mdW5jdGlvbiBacihBKXtyZXR1cm4gYS5pc0FycmF5KEEpJiYhQS5zb21lKCRBKX12YXIgWHI9YS50b0ZsYXRPYmplY3QoYSx7fSxudWxsLGZ1bmN0aW9uKGUpe3JldHVybi9eaXNbQS1aXS8udGVzdChlKX0pO2Z1bmN0aW9uICRyKEEsZSxyKXtpZighYS5pc09iamVjdChBKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJ0YXJnZXQgbXVzdCBiZSBhbiBvYmplY3QiKTtlPWV8fG5ldyhEQXx8Rm9ybURhdGEpLHI9YS50b0ZsYXRPYmplY3Qocix7bWV0YVRva2VuczohMCxkb3RzOiExLGluZGV4ZXM6ITF9LCExLGZ1bmN0aW9uKHUsQil7cmV0dXJuIWEuaXNVbmRlZmluZWQoQlt1XSl9KTtsZXQgdD1yLm1ldGFUb2tlbnMsbj1yLnZpc2l0b3J8fHMsbz1yLmRvdHMsaT1yLmluZGV4ZXMsYz0oci5CbG9ifHx0eXBlb2YgQmxvYjwidSImJkJsb2IpJiZhLmlzU3BlY0NvbXBsaWFudEZvcm0oZSk7aWYoIWEuaXNGdW5jdGlvbihuKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJ2aXNpdG9yIG11c3QgYmUgYSBmdW5jdGlvbiIpO2Z1bmN0aW9uIEMoRSl7aWYoRT09PW51bGwpcmV0dXJuIiI7aWYoYS5pc0RhdGUoRSkpcmV0dXJuIEUudG9JU09TdHJpbmcoKTtpZighYyYmYS5pc0Jsb2IoRSkpdGhyb3cgbmV3IFEoIkJsb2IgaXMgbm90IHN1cHBvcnRlZC4gVXNlIGEgQnVmZmVyIGluc3RlYWQuIik7cmV0dXJuIGEuaXNBcnJheUJ1ZmZlcihFKXx8YS5pc1R5cGVkQXJyYXkoRSk/YyYmdHlwZW9mIEJsb2I9PSJmdW5jdGlvbiI/bmV3IEJsb2IoW0VdKTpCdWZmZXIuZnJvbShFKTpFfWZ1bmN0aW9uIHMoRSx1LEIpe2xldCBoPUU7aWYoRSYmIUImJnR5cGVvZiBFPT0ib2JqZWN0Iil7aWYoYS5lbmRzV2l0aCh1LCJ7fSIpKXU9dD91OnUuc2xpY2UoMCwtMiksRT1KU09OLnN0cmluZ2lmeShFKTtlbHNlIGlmKGEuaXNBcnJheShFKSYmWnIoRSl8fChhLmlzRmlsZUxpc3QoRSl8fGEuZW5kc1dpdGgodSwiW10iKSkmJihoPWEudG9BcnJheShFKSkpcmV0dXJuIHU9JGUodSksaC5mb3JFYWNoKGZ1bmN0aW9uKGQsTil7IShhLmlzVW5kZWZpbmVkKGQpfHxkPT09bnVsbCkmJmUuYXBwZW5kKGk9PT0hMD9YZShbdV0sTixvKTppPT09bnVsbD91OnUrIltdIixDKGQpKX0pLCExfXJldHVybiAkQShFKT8hMDooZS5hcHBlbmQoWGUoQix1LG8pLEMoRSkpLCExKX1sZXQgST1bXSxmPU9iamVjdC5hc3NpZ24oWHIse2RlZmF1bHRWaXNpdG9yOnMsY29udmVydFZhbHVlOkMsaXNWaXNpdGFibGU6JEF9KTtmdW5jdGlvbiBnKEUsdSl7aWYoIWEuaXNVbmRlZmluZWQoRSkpe2lmKEkuaW5kZXhPZihFKSE9PS0xKXRocm93IEVycm9yKCJDaXJjdWxhciByZWZlcmVuY2UgZGV0ZWN0ZWQgaW4gIit1LmpvaW4oIi4iKSk7SS5wdXNoKEUpLGEuZm9yRWFjaChFLGZ1bmN0aW9uKGgsYil7KCEoYS5pc1VuZGVmaW5lZChoKXx8aD09PW51bGwpJiZuLmNhbGwoZSxoLGEuaXNTdHJpbmcoYik/Yi50cmltKCk6Yix1LGYpKT09PSEwJiZnKGgsdT91LmNvbmNhdChiKTpbYl0pfSksSS5wb3AoKX19aWYoIWEuaXNPYmplY3QoQSkpdGhyb3cgbmV3IFR5cGVFcnJvcigiZGF0YSBtdXN0IGJlIGFuIG9iamVjdCIpO3JldHVybiBnKEEpLGV9dmFyIEo9JHI7ZnVuY3Rpb24gQXQoQSl7bGV0IGU9eyIhIjoiJTIxIiwiJyI6IiUyNyIsIigiOiIlMjgiLCIpIjoiJTI5IiwifiI6IiU3RSIsIiUyMCI6IisiLCIlMDAiOiJcMCJ9O3JldHVybiBlbmNvZGVVUklDb21wb25lbnQoQSkucmVwbGFjZSgvWyEnKCl+XXwlMjB8JTAwL2csZnVuY3Rpb24odCl7cmV0dXJuIGVbdF19KX1mdW5jdGlvbiBldChBLGUpe3RoaXMuX3BhaXJzPVtdLEEmJkooQSx0aGlzLGUpfXZhciB0dD1ldC5wcm90b3R5cGU7dHQuYXBwZW5kPWZ1bmN0aW9uKGUscil7dGhpcy5fcGFpcnMucHVzaChbZSxyXSl9O3R0LnRvU3RyaW5nPWZ1bmN0aW9uKGUpe2xldCByPWU/ZnVuY3Rpb24odCl7cmV0dXJuIGUuY2FsbCh0aGlzLHQsQXQpfTpBdDtyZXR1cm4gdGhpcy5fcGFpcnMubWFwKGZ1bmN0aW9uKG4pe3JldHVybiByKG5bMF0pKyI9IityKG5bMV0pfSwiIikuam9pbigiJiIpfTt2YXIgU0E9ZXQ7ZnVuY3Rpb24gQW4oQSl7cmV0dXJuIGVuY29kZVVSSUNvbXBvbmVudChBKS5yZXBsYWNlKC8lM0EvZ2ksIjoiKS5yZXBsYWNlKC8lMjQvZywiJCIpLnJlcGxhY2UoLyUyQy9naSwiLCIpLnJlcGxhY2UoLyUyMC9nLCIrIikucmVwbGFjZSgvJTVCL2dpLCJbIikucmVwbGFjZSgvJTVEL2dpLCJdIil9ZnVuY3Rpb24gbkEoQSxlLHIpe2lmKCFlKXJldHVybiBBO2xldCB0PXImJnIuZW5jb2RlfHxBbixuPXImJnIuc2VyaWFsaXplLG87aWYobj9vPW4oZSxyKTpvPWEuaXNVUkxTZWFyY2hQYXJhbXMoZSk/ZS50b1N0cmluZygpOm5ldyBTQShlLHIpLnRvU3RyaW5nKHQpLG8pe2xldCBpPUEuaW5kZXhPZigiIyIpO2khPT0tMSYmKEE9QS5zbGljZSgwLGkpKSxBKz0oQS5pbmRleE9mKCI/Iik9PT0tMT8iPyI6IiYiKStvfXJldHVybiBBfXZhciBBZT1jbGFzc3tjb25zdHJ1Y3Rvcigpe3RoaXMuaGFuZGxlcnM9W119dXNlKGUscix0KXtyZXR1cm4gdGhpcy5oYW5kbGVycy5wdXNoKHtmdWxmaWxsZWQ6ZSxyZWplY3RlZDpyLHN5bmNocm9ub3VzOnQ/dC5zeW5jaHJvbm91czohMSxydW5XaGVuOnQ/dC5ydW5XaGVuOm51bGx9KSx0aGlzLmhhbmRsZXJzLmxlbmd0aC0xfWVqZWN0KGUpe3RoaXMuaGFuZGxlcnNbZV0mJih0aGlzLmhhbmRsZXJzW2VdPW51bGwpfWNsZWFyKCl7dGhpcy5oYW5kbGVycyYmKHRoaXMuaGFuZGxlcnM9W10pfWZvckVhY2goZSl7YS5mb3JFYWNoKHRoaXMuaGFuZGxlcnMsZnVuY3Rpb24odCl7dCE9PW51bGwmJmUodCl9KX19LGVlPUFlO3ZhciBiQT17c2lsZW50SlNPTlBhcnNpbmc6ITAsZm9yY2VkSlNPTlBhcnNpbmc6ITAsY2xhcmlmeVRpbWVvdXRFcnJvcjohMX07dmFyIHJ0PXR5cGVvZiBVUkxTZWFyY2hQYXJhbXM8InUiP1VSTFNlYXJjaFBhcmFtczpTQTt2YXIgbnQ9dHlwZW9mIEZvcm1EYXRhPCJ1Ij9Gb3JtRGF0YTpudWxsO3ZhciBvdD10eXBlb2YgQmxvYjwidSI/QmxvYjpudWxsO3ZhciBpdD17aXNCcm93c2VyOiEwLGNsYXNzZXM6e1VSTFNlYXJjaFBhcmFtczpydCxGb3JtRGF0YTpudCxCbG9iOm90fSxwcm90b2NvbHM6WyJodHRwIiwiaHR0cHMiLCJmaWxlIiwiYmxvYiIsInVybCIsImRhdGEiXX07dmFyIHJlPXt9O2p0KHJlLHtoYXNCcm93c2VyRW52OigpPT50ZSxoYXNTdGFuZGFyZEJyb3dzZXJFbnY6KCk9PmVuLGhhc1N0YW5kYXJkQnJvd3NlcldlYldvcmtlckVudjooKT0+dG4sb3JpZ2luOigpPT5ybn0pO3ZhciB0ZT10eXBlb2Ygd2luZG93PCJ1IiYmdHlwZW9mIGRvY3VtZW50PCJ1Iixlbj0oQT0+dGUmJlsiUmVhY3ROYXRpdmUiLCJOYXRpdmVTY3JpcHQiLCJOUyJdLmluZGV4T2YoQSk8MCkodHlwZW9mIG5hdmlnYXRvcjwidSImJm5hdmlnYXRvci5wcm9kdWN0KSx0bj10eXBlb2YgV29ya2VyR2xvYmFsU2NvcGU8InUiJiZzZWxmIGluc3RhbmNlb2YgV29ya2VyR2xvYmFsU2NvcGUmJnR5cGVvZiBzZWxmLmltcG9ydFNjcmlwdHM9PSJmdW5jdGlvbiIscm49dGUmJndpbmRvdy5sb2NhdGlvbi5ocmVmfHwiaHR0cDovL2xvY2FsaG9zdCI7dmFyIFM9ey4uLnJlLC4uLml0fTtmdW5jdGlvbiBuZShBLGUpe3JldHVybiBKKEEsbmV3IFMuY2xhc3Nlcy5VUkxTZWFyY2hQYXJhbXMsT2JqZWN0LmFzc2lnbih7dmlzaXRvcjpmdW5jdGlvbihyLHQsbixvKXtyZXR1cm4gUy5pc05vZGUmJmEuaXNCdWZmZXIocik/KHRoaXMuYXBwZW5kKHQsci50b1N0cmluZygiYmFzZTY0IikpLCExKTpvLmRlZmF1bHRWaXNpdG9yLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19LGUpKX1mdW5jdGlvbiBubihBKXtyZXR1cm4gYS5tYXRjaEFsbCgvXHcrfFxbKFx3KildL2csQSkubWFwKGU9PmVbMF09PT0iW10iPyIiOmVbMV18fGVbMF0pfWZ1bmN0aW9uIG9uKEEpe2xldCBlPXt9LHI9T2JqZWN0LmtleXMoQSksdCxuPXIubGVuZ3RoLG87Zm9yKHQ9MDt0PG47dCsrKW89clt0XSxlW29dPUFbb107cmV0dXJuIGV9ZnVuY3Rpb24gYW4oQSl7ZnVuY3Rpb24gZShyLHQsbixvKXtsZXQgaT1yW28rK107aWYoaT09PSJfX3Byb3RvX18iKXJldHVybiEwO2xldCBsPU51bWJlci5pc0Zpbml0ZSgraSksYz1vPj1yLmxlbmd0aDtyZXR1cm4gaT0haSYmYS5pc0FycmF5KG4pP24ubGVuZ3RoOmksYz8oYS5oYXNPd25Qcm9wKG4saSk/bltpXT1bbltpXSx0XTpuW2ldPXQsIWwpOigoIW5baV18fCFhLmlzT2JqZWN0KG5baV0pKSYmKG5baV09W10pLGUocix0LG5baV0sbykmJmEuaXNBcnJheShuW2ldKSYmKG5baV09b24obltpXSkpLCFsKX1pZihhLmlzRm9ybURhdGEoQSkmJmEuaXNGdW5jdGlvbihBLmVudHJpZXMpKXtsZXQgcj17fTtyZXR1cm4gYS5mb3JFYWNoRW50cnkoQSwodCxuKT0+e2Uobm4odCksbixyLDApfSkscn1yZXR1cm4gbnVsbH12YXIgUkE9YW47ZnVuY3Rpb24gc24oQSxlLHIpe2lmKGEuaXNTdHJpbmcoQSkpdHJ5e3JldHVybihlfHxKU09OLnBhcnNlKShBKSxhLnRyaW0oQSl9Y2F0Y2godCl7aWYodC5uYW1lIT09IlN5bnRheEVycm9yIil0aHJvdyB0fXJldHVybihyfHxKU09OLnN0cmluZ2lmeSkoQSl9dmFyIG9lPXt0cmFuc2l0aW9uYWw6YkEsYWRhcHRlcjpbInhociIsImh0dHAiLCJmZXRjaCJdLHRyYW5zZm9ybVJlcXVlc3Q6W2Z1bmN0aW9uKGUscil7bGV0IHQ9ci5nZXRDb250ZW50VHlwZSgpfHwiIixuPXQuaW5kZXhPZigiYXBwbGljYXRpb24vanNvbiIpPi0xLG89YS5pc09iamVjdChlKTtpZihvJiZhLmlzSFRNTEZvcm0oZSkmJihlPW5ldyBGb3JtRGF0YShlKSksYS5pc0Zvcm1EYXRhKGUpKXJldHVybiBuP0pTT04uc3RyaW5naWZ5KFJBKGUpKTplO2lmKGEuaXNBcnJheUJ1ZmZlcihlKXx8YS5pc0J1ZmZlcihlKXx8YS5pc1N0cmVhbShlKXx8YS5pc0ZpbGUoZSl8fGEuaXNCbG9iKGUpfHxhLmlzUmVhZGFibGVTdHJlYW0oZSkpcmV0dXJuIGU7aWYoYS5pc0FycmF5QnVmZmVyVmlldyhlKSlyZXR1cm4gZS5idWZmZXI7aWYoYS5pc1VSTFNlYXJjaFBhcmFtcyhlKSlyZXR1cm4gci5zZXRDb250ZW50VHlwZSgiYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkO2NoYXJzZXQ9dXRmLTgiLCExKSxlLnRvU3RyaW5nKCk7bGV0IGw7aWYobyl7aWYodC5pbmRleE9mKCJhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQiKT4tMSlyZXR1cm4gbmUoZSx0aGlzLmZvcm1TZXJpYWxpemVyKS50b1N0cmluZygpO2lmKChsPWEuaXNGaWxlTGlzdChlKSl8fHQuaW5kZXhPZigibXVsdGlwYXJ0L2Zvcm0tZGF0YSIpPi0xKXtsZXQgYz10aGlzLmVudiYmdGhpcy5lbnYuRm9ybURhdGE7cmV0dXJuIEoobD97ImZpbGVzW10iOmV9OmUsYyYmbmV3IGMsdGhpcy5mb3JtU2VyaWFsaXplcil9fXJldHVybiBvfHxuPyhyLnNldENvbnRlbnRUeXBlKCJhcHBsaWNhdGlvbi9qc29uIiwhMSksc24oZSkpOmV9XSx0cmFuc2Zvcm1SZXNwb25zZTpbZnVuY3Rpb24oZSl7bGV0IHI9dGhpcy50cmFuc2l0aW9uYWx8fG9lLnRyYW5zaXRpb25hbCx0PXImJnIuZm9yY2VkSlNPTlBhcnNpbmcsbj10aGlzLnJlc3BvbnNlVHlwZT09PSJqc29uIjtpZihhLmlzUmVzcG9uc2UoZSl8fGEuaXNSZWFkYWJsZVN0cmVhbShlKSlyZXR1cm4gZTtpZihlJiZhLmlzU3RyaW5nKGUpJiYodCYmIXRoaXMucmVzcG9uc2VUeXBlfHxuKSl7bGV0IGk9IShyJiZyLnNpbGVudEpTT05QYXJzaW5nKSYmbjt0cnl7cmV0dXJuIEpTT04ucGFyc2UoZSl9Y2F0Y2gobCl7aWYoaSl0aHJvdyBsLm5hbWU9PT0iU3ludGF4RXJyb3IiP1EuZnJvbShsLFEuRVJSX0JBRF9SRVNQT05TRSx0aGlzLG51bGwsdGhpcy5yZXNwb25zZSk6bH19cmV0dXJuIGV9XSx0aW1lb3V0OjAseHNyZkNvb2tpZU5hbWU6IlhTUkYtVE9LRU4iLHhzcmZIZWFkZXJOYW1lOiJYLVhTUkYtVE9LRU4iLG1heENvbnRlbnRMZW5ndGg6LTEsbWF4Qm9keUxlbmd0aDotMSxlbnY6e0Zvcm1EYXRhOlMuY2xhc3Nlcy5Gb3JtRGF0YSxCbG9iOlMuY2xhc3Nlcy5CbG9ifSx2YWxpZGF0ZVN0YXR1czpmdW5jdGlvbihlKXtyZXR1cm4gZT49MjAwJiZlPDMwMH0saGVhZGVyczp7Y29tbW9uOntBY2NlcHQ6ImFwcGxpY2F0aW9uL2pzb24sIHRleHQvcGxhaW4sICovKiIsIkNvbnRlbnQtVHlwZSI6dm9pZCAwfX19O2EuZm9yRWFjaChbImRlbGV0ZSIsImdldCIsImhlYWQiLCJwb3N0IiwicHV0IiwicGF0Y2giXSxBPT57b2UuaGVhZGVyc1tBXT17fX0pO3ZhciBfPW9lO3ZhciBJbj1hLnRvT2JqZWN0U2V0KFsiYWdlIiwiYXV0aG9yaXphdGlvbiIsImNvbnRlbnQtbGVuZ3RoIiwiY29udGVudC10eXBlIiwiZXRhZyIsImV4cGlyZXMiLCJmcm9tIiwiaG9zdCIsImlmLW1vZGlmaWVkLXNpbmNlIiwiaWYtdW5tb2RpZmllZC1zaW5jZSIsImxhc3QtbW9kaWZpZWQiLCJsb2NhdGlvbiIsIm1heC1mb3J3YXJkcyIsInByb3h5LWF1dGhvcml6YXRpb24iLCJyZWZlcmVyIiwicmV0cnktYWZ0ZXIiLCJ1c2VyLWFnZW50Il0pLGF0PUE9PntsZXQgZT17fSxyLHQsbjtyZXR1cm4gQSYmQS5zcGxpdChgCmApLmZvckVhY2goZnVuY3Rpb24oaSl7bj1pLmluZGV4T2YoIjoiKSxyPWkuc3Vic3RyaW5nKDAsbikudHJpbSgpLnRvTG93ZXJDYXNlKCksdD1pLnN1YnN0cmluZyhuKzEpLnRyaW0oKSwhKCFyfHxlW3JdJiZJbltyXSkmJihyPT09InNldC1jb29raWUiP2Vbcl0/ZVtyXS5wdXNoKHQpOmVbcl09W3RdOmVbcl09ZVtyXT9lW3JdKyIsICIrdDp0KX0pLGV9O3ZhciBzdD1TeW1ib2woImludGVybmFscyIpO2Z1bmN0aW9uIG9BKEEpe3JldHVybiBBJiZTdHJpbmcoQSkudHJpbSgpLnRvTG93ZXJDYXNlKCl9ZnVuY3Rpb24gRkEoQSl7cmV0dXJuIEE9PT0hMXx8QT09bnVsbD9BOmEuaXNBcnJheShBKT9BLm1hcChGQSk6U3RyaW5nKEEpfWZ1bmN0aW9uIGduKEEpe2xldCBlPU9iamVjdC5jcmVhdGUobnVsbCkscj0vKFteXHMsOz1dKylccyooPzo9XHMqKFteLDtdKykpPy9nLHQ7Zm9yKDt0PXIuZXhlYyhBKTspZVt0WzFdXT10WzJdO3JldHVybiBlfXZhciBsbj1BPT4vXlstX2EtekEtWjAtOV5gfH4sISMkJSYnKisuXSskLy50ZXN0KEEudHJpbSgpKTtmdW5jdGlvbiBpZShBLGUscix0LG4pe2lmKGEuaXNGdW5jdGlvbih0KSlyZXR1cm4gdC5jYWxsKHRoaXMsZSxyKTtpZihuJiYoZT1yKSwhIWEuaXNTdHJpbmcoZSkpe2lmKGEuaXNTdHJpbmcodCkpcmV0dXJuIGUuaW5kZXhPZih0KSE9PS0xO2lmKGEuaXNSZWdFeHAodCkpcmV0dXJuIHQudGVzdChlKX19ZnVuY3Rpb24gQ24oQSl7cmV0dXJuIEEudHJpbSgpLnRvTG93ZXJDYXNlKCkucmVwbGFjZSgvKFthLXpcZF0pKFx3KikvZywoZSxyLHQpPT5yLnRvVXBwZXJDYXNlKCkrdCl9ZnVuY3Rpb24gY24oQSxlKXtsZXQgcj1hLnRvQ2FtZWxDYXNlKCIgIitlKTtbImdldCIsInNldCIsImhhcyJdLmZvckVhY2godD0+e09iamVjdC5kZWZpbmVQcm9wZXJ0eShBLHQrcix7dmFsdWU6ZnVuY3Rpb24obixvLGkpe3JldHVybiB0aGlzW3RdLmNhbGwodGhpcyxlLG4sbyxpKX0sY29uZmlndXJhYmxlOiEwfSl9KX12YXIgVj1jbGFzc3tjb25zdHJ1Y3RvcihlKXtlJiZ0aGlzLnNldChlKX1zZXQoZSxyLHQpe2xldCBuPXRoaXM7ZnVuY3Rpb24gbyhsLGMsQyl7bGV0IHM9b0EoYyk7aWYoIXMpdGhyb3cgbmV3IEVycm9yKCJoZWFkZXIgbmFtZSBtdXN0IGJlIGEgbm9uLWVtcHR5IHN0cmluZyIpO2xldCBJPWEuZmluZEtleShuLHMpOyghSXx8bltJXT09PXZvaWQgMHx8Qz09PSEwfHxDPT09dm9pZCAwJiZuW0ldIT09ITEpJiYobltJfHxjXT1GQShsKSl9bGV0IGk9KGwsYyk9PmEuZm9yRWFjaChsLChDLHMpPT5vKEMscyxjKSk7aWYoYS5pc1BsYWluT2JqZWN0KGUpfHxlIGluc3RhbmNlb2YgdGhpcy5jb25zdHJ1Y3RvcilpKGUscik7ZWxzZSBpZihhLmlzU3RyaW5nKGUpJiYoZT1lLnRyaW0oKSkmJiFsbihlKSlpKGF0KGUpLHIpO2Vsc2UgaWYoYS5pc0hlYWRlcnMoZSkpZm9yKGxldFtsLGNdb2YgZS5lbnRyaWVzKCkpbyhjLGwsdCk7ZWxzZSBlIT1udWxsJiZvKHIsZSx0KTtyZXR1cm4gdGhpc31nZXQoZSxyKXtpZihlPW9BKGUpLGUpe2xldCB0PWEuZmluZEtleSh0aGlzLGUpO2lmKHQpe2xldCBuPXRoaXNbdF07aWYoIXIpcmV0dXJuIG47aWYocj09PSEwKXJldHVybiBnbihuKTtpZihhLmlzRnVuY3Rpb24ocikpcmV0dXJuIHIuY2FsbCh0aGlzLG4sdCk7aWYoYS5pc1JlZ0V4cChyKSlyZXR1cm4gci5leGVjKG4pO3Rocm93IG5ldyBUeXBlRXJyb3IoInBhcnNlciBtdXN0IGJlIGJvb2xlYW58cmVnZXhwfGZ1bmN0aW9uIil9fX1oYXMoZSxyKXtpZihlPW9BKGUpLGUpe2xldCB0PWEuZmluZEtleSh0aGlzLGUpO3JldHVybiEhKHQmJnRoaXNbdF0hPT12b2lkIDAmJighcnx8aWUodGhpcyx0aGlzW3RdLHQscikpKX1yZXR1cm4hMX1kZWxldGUoZSxyKXtsZXQgdD10aGlzLG49ITE7ZnVuY3Rpb24gbyhpKXtpZihpPW9BKGkpLGkpe2xldCBsPWEuZmluZEtleSh0LGkpO2wmJighcnx8aWUodCx0W2xdLGwscikpJiYoZGVsZXRlIHRbbF0sbj0hMCl9fXJldHVybiBhLmlzQXJyYXkoZSk/ZS5mb3JFYWNoKG8pOm8oZSksbn1jbGVhcihlKXtsZXQgcj1PYmplY3Qua2V5cyh0aGlzKSx0PXIubGVuZ3RoLG49ITE7Zm9yKDt0LS07KXtsZXQgbz1yW3RdOyghZXx8aWUodGhpcyx0aGlzW29dLG8sZSwhMCkpJiYoZGVsZXRlIHRoaXNbb10sbj0hMCl9cmV0dXJuIG59bm9ybWFsaXplKGUpe2xldCByPXRoaXMsdD17fTtyZXR1cm4gYS5mb3JFYWNoKHRoaXMsKG4sbyk9PntsZXQgaT1hLmZpbmRLZXkodCxvKTtpZihpKXtyW2ldPUZBKG4pLGRlbGV0ZSByW29dO3JldHVybn1sZXQgbD1lP0NuKG8pOlN0cmluZyhvKS50cmltKCk7bCE9PW8mJmRlbGV0ZSByW29dLHJbbF09RkEobiksdFtsXT0hMH0pLHRoaXN9Y29uY2F0KC4uLmUpe3JldHVybiB0aGlzLmNvbnN0cnVjdG9yLmNvbmNhdCh0aGlzLC4uLmUpfXRvSlNPTihlKXtsZXQgcj1PYmplY3QuY3JlYXRlKG51bGwpO3JldHVybiBhLmZvckVhY2godGhpcywodCxuKT0+e3QhPW51bGwmJnQhPT0hMSYmKHJbbl09ZSYmYS5pc0FycmF5KHQpP3Quam9pbigiLCAiKTp0KX0pLHJ9W1N5bWJvbC5pdGVyYXRvcl0oKXtyZXR1cm4gT2JqZWN0LmVudHJpZXModGhpcy50b0pTT04oKSlbU3ltYm9sLml0ZXJhdG9yXSgpfXRvU3RyaW5nKCl7cmV0dXJuIE9iamVjdC5lbnRyaWVzKHRoaXMudG9KU09OKCkpLm1hcCgoW2Uscl0pPT5lKyI6ICIrcikuam9pbihgCmApfWdldFtTeW1ib2wudG9TdHJpbmdUYWddKCl7cmV0dXJuIkF4aW9zSGVhZGVycyJ9c3RhdGljIGZyb20oZSl7cmV0dXJuIGUgaW5zdGFuY2VvZiB0aGlzP2U6bmV3IHRoaXMoZSl9c3RhdGljIGNvbmNhdChlLC4uLnIpe2xldCB0PW5ldyB0aGlzKGUpO3JldHVybiByLmZvckVhY2gobj0+dC5zZXQobikpLHR9c3RhdGljIGFjY2Vzc29yKGUpe2xldCB0PSh0aGlzW3N0XT10aGlzW3N0XT17YWNjZXNzb3JzOnt9fSkuYWNjZXNzb3JzLG49dGhpcy5wcm90b3R5cGU7ZnVuY3Rpb24gbyhpKXtsZXQgbD1vQShpKTt0W2xdfHwoY24obixpKSx0W2xdPSEwKX1yZXR1cm4gYS5pc0FycmF5KGUpP2UuZm9yRWFjaChvKTpvKGUpLHRoaXN9fTtWLmFjY2Vzc29yKFsiQ29udGVudC1UeXBlIiwiQ29udGVudC1MZW5ndGgiLCJBY2NlcHQiLCJBY2NlcHQtRW5jb2RpbmciLCJVc2VyLUFnZW50IiwiQXV0aG9yaXphdGlvbiJdKTthLnJlZHVjZURlc2NyaXB0b3JzKFYucHJvdG90eXBlLCh7dmFsdWU6QX0sZSk9PntsZXQgcj1lWzBdLnRvVXBwZXJDYXNlKCkrZS5zbGljZSgxKTtyZXR1cm57Z2V0OigpPT5BLHNldCh0KXt0aGlzW3JdPXR9fX0pO2EuZnJlZXplTWV0aG9kcyhWKTt2YXIgRD1WO2Z1bmN0aW9uIGlBKEEsZSl7bGV0IHI9dGhpc3x8Xyx0PWV8fHIsbj1ELmZyb20odC5oZWFkZXJzKSxvPXQuZGF0YTtyZXR1cm4gYS5mb3JFYWNoKEEsZnVuY3Rpb24obCl7bz1sLmNhbGwocixvLG4ubm9ybWFsaXplKCksZT9lLnN0YXR1czp2b2lkIDApfSksbi5ub3JtYWxpemUoKSxvfWZ1bmN0aW9uIGFBKEEpe3JldHVybiEhKEEmJkEuX19DQU5DRUxfXyl9ZnVuY3Rpb24gSXQoQSxlLHIpe1EuY2FsbCh0aGlzLEE/PyJjYW5jZWxlZCIsUS5FUlJfQ0FOQ0VMRUQsZSxyKSx0aGlzLm5hbWU9IkNhbmNlbGVkRXJyb3IifWEuaW5oZXJpdHMoSXQsUSx7X19DQU5DRUxfXzohMH0pO3ZhciBQPUl0O2Z1bmN0aW9uIHNBKEEsZSxyKXtsZXQgdD1yLmNvbmZpZy52YWxpZGF0ZVN0YXR1czshci5zdGF0dXN8fCF0fHx0KHIuc3RhdHVzKT9BKHIpOmUobmV3IFEoIlJlcXVlc3QgZmFpbGVkIHdpdGggc3RhdHVzIGNvZGUgIityLnN0YXR1cyxbUS5FUlJfQkFEX1JFUVVFU1QsUS5FUlJfQkFEX1JFU1BPTlNFXVtNYXRoLmZsb29yKHIuc3RhdHVzLzEwMCktNF0sci5jb25maWcsci5yZXF1ZXN0LHIpKX1mdW5jdGlvbiBhZShBKXtsZXQgZT0vXihbLStcd117MSwyNX0pKDo/XC9cL3w6KS8uZXhlYyhBKTtyZXR1cm4gZSYmZVsxXXx8IiJ9ZnVuY3Rpb24gQm4oQSxlKXtBPUF8fDEwO2xldCByPW5ldyBBcnJheShBKSx0PW5ldyBBcnJheShBKSxuPTAsbz0wLGk7cmV0dXJuIGU9ZSE9PXZvaWQgMD9lOjFlMyxmdW5jdGlvbihjKXtsZXQgQz1EYXRlLm5vdygpLHM9dFtvXTtpfHwoaT1DKSxyW25dPWMsdFtuXT1DO2xldCBJPW8sZj0wO2Zvcig7SSE9PW47KWYrPXJbSSsrXSxJPUklQTtpZihuPShuKzEpJUEsbj09PW8mJihvPShvKzEpJUEpLEMtaTxlKXJldHVybjtsZXQgZz1zJiZDLXM7cmV0dXJuIGc/TWF0aC5yb3VuZChmKjFlMy9nKTp2b2lkIDB9fXZhciBndD1CbjtmdW5jdGlvbiBFbihBLGUpe2xldCByPTAsdD0xZTMvZSxuLG8saT0oQyxzPURhdGUubm93KCkpPT57cj1zLG49bnVsbCxvJiYoY2xlYXJUaW1lb3V0KG8pLG89bnVsbCksQS5hcHBseShudWxsLEMpfTtyZXR1cm5bKC4uLkMpPT57bGV0IHM9RGF0ZS5ub3coKSxJPXMtcjtJPj10P2koQyxzKToobj1DLG98fChvPXNldFRpbWVvdXQoKCk9PntvPW51bGwsaShuKX0sdC1JKSkpfSwoKT0+biYmaShuKV19dmFyIGx0PUVuO3ZhciB6PShBLGUscj0zKT0+e2xldCB0PTAsbj1ndCg1MCwyNTApO3JldHVybiBsdChvPT57bGV0IGk9by5sb2FkZWQsbD1vLmxlbmd0aENvbXB1dGFibGU/by50b3RhbDp2b2lkIDAsYz1pLXQsQz1uKGMpLHM9aTw9bDt0PWk7bGV0IEk9e2xvYWRlZDppLHRvdGFsOmwscHJvZ3Jlc3M6bD9pL2w6dm9pZCAwLGJ5dGVzOmMscmF0ZTpDfHx2b2lkIDAsZXN0aW1hdGVkOkMmJmwmJnM/KGwtaSkvQzp2b2lkIDAsZXZlbnQ6byxsZW5ndGhDb21wdXRhYmxlOmwhPW51bGwsW2U/ImRvd25sb2FkIjoidXBsb2FkIl06ITB9O0EoSSl9LHIpfSxzZT0oQSxlKT0+e2xldCByPUEhPW51bGw7cmV0dXJuW3Q9PmVbMF0oe2xlbmd0aENvbXB1dGFibGU6cix0b3RhbDpBLGxvYWRlZDp0fSksZVsxXV19LEllPUE9PiguLi5lKT0+YS5hc2FwKCgpPT5BKC4uLmUpKTt2YXIgQ3Q9Uy5oYXNTdGFuZGFyZEJyb3dzZXJFbnY/ZnVuY3Rpb24oKXtsZXQgZT0vKG1zaWV8dHJpZGVudCkvaS50ZXN0KG5hdmlnYXRvci51c2VyQWdlbnQpLHI9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiYSIpLHQ7ZnVuY3Rpb24gbihvKXtsZXQgaT1vO3JldHVybiBlJiYoci5zZXRBdHRyaWJ1dGUoImhyZWYiLGkpLGk9ci5ocmVmKSxyLnNldEF0dHJpYnV0ZSgiaHJlZiIsaSkse2hyZWY6ci5ocmVmLHByb3RvY29sOnIucHJvdG9jb2w/ci5wcm90b2NvbC5yZXBsYWNlKC86JC8sIiIpOiIiLGhvc3Q6ci5ob3N0LHNlYXJjaDpyLnNlYXJjaD9yLnNlYXJjaC5yZXBsYWNlKC9eXD8vLCIiKToiIixoYXNoOnIuaGFzaD9yLmhhc2gucmVwbGFjZSgvXiMvLCIiKToiIixob3N0bmFtZTpyLmhvc3RuYW1lLHBvcnQ6ci5wb3J0LHBhdGhuYW1lOnIucGF0aG5hbWUuY2hhckF0KDApPT09Ii8iP3IucGF0aG5hbWU6Ii8iK3IucGF0aG5hbWV9fXJldHVybiB0PW4od2luZG93LmxvY2F0aW9uLmhyZWYpLGZ1bmN0aW9uKGkpe2xldCBsPWEuaXNTdHJpbmcoaSk/bihpKTppO3JldHVybiBsLnByb3RvY29sPT09dC5wcm90b2NvbCYmbC5ob3N0PT09dC5ob3N0fX0oKTpmdW5jdGlvbigpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiEwfX0oKTt2YXIgY3Q9Uy5oYXNTdGFuZGFyZEJyb3dzZXJFbnY/e3dyaXRlKEEsZSxyLHQsbixvKXtsZXQgaT1bQSsiPSIrZW5jb2RlVVJJQ29tcG9uZW50KGUpXTthLmlzTnVtYmVyKHIpJiZpLnB1c2goImV4cGlyZXM9IituZXcgRGF0ZShyKS50b0dNVFN0cmluZygpKSxhLmlzU3RyaW5nKHQpJiZpLnB1c2goInBhdGg9Iit0KSxhLmlzU3RyaW5nKG4pJiZpLnB1c2goImRvbWFpbj0iK24pLG89PT0hMCYmaS5wdXNoKCJzZWN1cmUiKSxkb2N1bWVudC5jb29raWU9aS5qb2luKCI7ICIpfSxyZWFkKEEpe2xldCBlPWRvY3VtZW50LmNvb2tpZS5tYXRjaChuZXcgUmVnRXhwKCIoXnw7XFxzKikoIitBKyIpPShbXjtdKikiKSk7cmV0dXJuIGU/ZGVjb2RlVVJJQ29tcG9uZW50KGVbM10pOm51bGx9LHJlbW92ZShBKXt0aGlzLndyaXRlKEEsIiIsRGF0ZS5ub3coKS04NjRlNSl9fTp7d3JpdGUoKXt9LHJlYWQoKXtyZXR1cm4gbnVsbH0scmVtb3ZlKCl7fX07ZnVuY3Rpb24gZ2UoQSl7cmV0dXJuL14oW2Etel1bYS16XGQrXC0uXSo6KT9cL1wvL2kudGVzdChBKX1mdW5jdGlvbiBsZShBLGUpe3JldHVybiBlP0EucmVwbGFjZSgvXC8/XC8kLywiIikrIi8iK2UucmVwbGFjZSgvXlwvKy8sIiIpOkF9ZnVuY3Rpb24gSUEoQSxlKXtyZXR1cm4gQSYmIWdlKGUpP2xlKEEsZSk6ZX12YXIgQnQ9QT0+QSBpbnN0YW5jZW9mIEQ/ey4uLkF9OkE7ZnVuY3Rpb24gTChBLGUpe2U9ZXx8e307bGV0IHI9e307ZnVuY3Rpb24gdChDLHMsSSl7cmV0dXJuIGEuaXNQbGFpbk9iamVjdChDKSYmYS5pc1BsYWluT2JqZWN0KHMpP2EubWVyZ2UuY2FsbCh7Y2FzZWxlc3M6SX0sQyxzKTphLmlzUGxhaW5PYmplY3Qocyk/YS5tZXJnZSh7fSxzKTphLmlzQXJyYXkocyk/cy5zbGljZSgpOnN9ZnVuY3Rpb24gbihDLHMsSSl7aWYoYS5pc1VuZGVmaW5lZChzKSl7aWYoIWEuaXNVbmRlZmluZWQoQykpcmV0dXJuIHQodm9pZCAwLEMsSSl9ZWxzZSByZXR1cm4gdChDLHMsSSl9ZnVuY3Rpb24gbyhDLHMpe2lmKCFhLmlzVW5kZWZpbmVkKHMpKXJldHVybiB0KHZvaWQgMCxzKX1mdW5jdGlvbiBpKEMscyl7aWYoYS5pc1VuZGVmaW5lZChzKSl7aWYoIWEuaXNVbmRlZmluZWQoQykpcmV0dXJuIHQodm9pZCAwLEMpfWVsc2UgcmV0dXJuIHQodm9pZCAwLHMpfWZ1bmN0aW9uIGwoQyxzLEkpe2lmKEkgaW4gZSlyZXR1cm4gdChDLHMpO2lmKEkgaW4gQSlyZXR1cm4gdCh2b2lkIDAsQyl9bGV0IGM9e3VybDpvLG1ldGhvZDpvLGRhdGE6byxiYXNlVVJMOmksdHJhbnNmb3JtUmVxdWVzdDppLHRyYW5zZm9ybVJlc3BvbnNlOmkscGFyYW1zU2VyaWFsaXplcjppLHRpbWVvdXQ6aSx0aW1lb3V0TWVzc2FnZTppLHdpdGhDcmVkZW50aWFsczppLHdpdGhYU1JGVG9rZW46aSxhZGFwdGVyOmkscmVzcG9uc2VUeXBlOmkseHNyZkNvb2tpZU5hbWU6aSx4c3JmSGVhZGVyTmFtZTppLG9uVXBsb2FkUHJvZ3Jlc3M6aSxvbkRvd25sb2FkUHJvZ3Jlc3M6aSxkZWNvbXByZXNzOmksbWF4Q29udGVudExlbmd0aDppLG1heEJvZHlMZW5ndGg6aSxiZWZvcmVSZWRpcmVjdDppLHRyYW5zcG9ydDppLGh0dHBBZ2VudDppLGh0dHBzQWdlbnQ6aSxjYW5jZWxUb2tlbjppLHNvY2tldFBhdGg6aSxyZXNwb25zZUVuY29kaW5nOmksdmFsaWRhdGVTdGF0dXM6bCxoZWFkZXJzOihDLHMpPT5uKEJ0KEMpLEJ0KHMpLCEwKX07cmV0dXJuIGEuZm9yRWFjaChPYmplY3Qua2V5cyhPYmplY3QuYXNzaWduKHt9LEEsZSkpLGZ1bmN0aW9uKHMpe2xldCBJPWNbc118fG4sZj1JKEFbc10sZVtzXSxzKTthLmlzVW5kZWZpbmVkKGYpJiZJIT09bHx8KHJbc109Zil9KSxyfXZhciBrQT1BPT57bGV0IGU9TCh7fSxBKSx7ZGF0YTpyLHdpdGhYU1JGVG9rZW46dCx4c3JmSGVhZGVyTmFtZTpuLHhzcmZDb29raWVOYW1lOm8saGVhZGVyczppLGF1dGg6bH09ZTtlLmhlYWRlcnM9aT1ELmZyb20oaSksZS51cmw9bkEoSUEoZS5iYXNlVVJMLGUudXJsKSxBLnBhcmFtcyxBLnBhcmFtc1NlcmlhbGl6ZXIpLGwmJmkuc2V0KCJBdXRob3JpemF0aW9uIiwiQmFzaWMgIitidG9hKChsLnVzZXJuYW1lfHwiIikrIjoiKyhsLnBhc3N3b3JkP3VuZXNjYXBlKGVuY29kZVVSSUNvbXBvbmVudChsLnBhc3N3b3JkKSk6IiIpKSk7bGV0IGM7aWYoYS5pc0Zvcm1EYXRhKHIpKXtpZihTLmhhc1N0YW5kYXJkQnJvd3NlckVudnx8Uy5oYXNTdGFuZGFyZEJyb3dzZXJXZWJXb3JrZXJFbnYpaS5zZXRDb250ZW50VHlwZSh2b2lkIDApO2Vsc2UgaWYoKGM9aS5nZXRDb250ZW50VHlwZSgpKSE9PSExKXtsZXRbQywuLi5zXT1jP2Muc3BsaXQoIjsiKS5tYXAoST0+SS50cmltKCkpLmZpbHRlcihCb29sZWFuKTpbXTtpLnNldENvbnRlbnRUeXBlKFtDfHwibXVsdGlwYXJ0L2Zvcm0tZGF0YSIsLi4uc10uam9pbigiOyAiKSl9fWlmKFMuaGFzU3RhbmRhcmRCcm93c2VyRW52JiYodCYmYS5pc0Z1bmN0aW9uKHQpJiYodD10KGUpKSx0fHx0IT09ITEmJkN0KGUudXJsKSkpe2xldCBDPW4mJm8mJmN0LnJlYWQobyk7QyYmaS5zZXQobixDKX1yZXR1cm4gZX07dmFyIGZuPXR5cGVvZiBYTUxIdHRwUmVxdWVzdDwidSIsRXQ9Zm4mJmZ1bmN0aW9uKEEpe3JldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbihyLHQpe2xldCBuPWtBKEEpLG89bi5kYXRhLGk9RC5mcm9tKG4uaGVhZGVycykubm9ybWFsaXplKCkse3Jlc3BvbnNlVHlwZTpsLG9uVXBsb2FkUHJvZ3Jlc3M6YyxvbkRvd25sb2FkUHJvZ3Jlc3M6Q309bixzLEksZixnLEU7ZnVuY3Rpb24gdSgpe2cmJmcoKSxFJiZFKCksbi5jYW5jZWxUb2tlbiYmbi5jYW5jZWxUb2tlbi51bnN1YnNjcmliZShzKSxuLnNpZ25hbCYmbi5zaWduYWwucmVtb3ZlRXZlbnRMaXN0ZW5lcigiYWJvcnQiLHMpfWxldCBCPW5ldyBYTUxIdHRwUmVxdWVzdDtCLm9wZW4obi5tZXRob2QudG9VcHBlckNhc2UoKSxuLnVybCwhMCksQi50aW1lb3V0PW4udGltZW91dDtmdW5jdGlvbiBoKCl7aWYoIUIpcmV0dXJuO2xldCBkPUQuZnJvbSgiZ2V0QWxsUmVzcG9uc2VIZWFkZXJzImluIEImJkIuZ2V0QWxsUmVzcG9uc2VIZWFkZXJzKCkpLHE9e2RhdGE6IWx8fGw9PT0idGV4dCJ8fGw9PT0ianNvbiI/Qi5yZXNwb25zZVRleHQ6Qi5yZXNwb25zZSxzdGF0dXM6Qi5zdGF0dXMsc3RhdHVzVGV4dDpCLnN0YXR1c1RleHQsaGVhZGVyczpkLGNvbmZpZzpBLHJlcXVlc3Q6Qn07c0EoZnVuY3Rpb24oeCl7cih4KSx1KCl9LGZ1bmN0aW9uKHgpe3QoeCksdSgpfSxxKSxCPW51bGx9Im9ubG9hZGVuZCJpbiBCP0Iub25sb2FkZW5kPWg6Qi5vbnJlYWR5c3RhdGVjaGFuZ2U9ZnVuY3Rpb24oKXshQnx8Qi5yZWFkeVN0YXRlIT09NHx8Qi5zdGF0dXM9PT0wJiYhKEIucmVzcG9uc2VVUkwmJkIucmVzcG9uc2VVUkwuaW5kZXhPZigiZmlsZToiKT09PTApfHxzZXRUaW1lb3V0KGgpfSxCLm9uYWJvcnQ9ZnVuY3Rpb24oKXtCJiYodChuZXcgUSgiUmVxdWVzdCBhYm9ydGVkIixRLkVDT05OQUJPUlRFRCxBLEIpKSxCPW51bGwpfSxCLm9uZXJyb3I9ZnVuY3Rpb24oKXt0KG5ldyBRKCJOZXR3b3JrIEVycm9yIixRLkVSUl9ORVRXT1JLLEEsQikpLEI9bnVsbH0sQi5vbnRpbWVvdXQ9ZnVuY3Rpb24oKXtsZXQgTj1uLnRpbWVvdXQ/InRpbWVvdXQgb2YgIituLnRpbWVvdXQrIm1zIGV4Y2VlZGVkIjoidGltZW91dCBleGNlZWRlZCIscT1uLnRyYW5zaXRpb25hbHx8YkE7bi50aW1lb3V0RXJyb3JNZXNzYWdlJiYoTj1uLnRpbWVvdXRFcnJvck1lc3NhZ2UpLHQobmV3IFEoTixxLmNsYXJpZnlUaW1lb3V0RXJyb3I/US5FVElNRURPVVQ6US5FQ09OTkFCT1JURUQsQSxCKSksQj1udWxsfSxvPT09dm9pZCAwJiZpLnNldENvbnRlbnRUeXBlKG51bGwpLCJzZXRSZXF1ZXN0SGVhZGVyImluIEImJmEuZm9yRWFjaChpLnRvSlNPTigpLGZ1bmN0aW9uKE4scSl7Qi5zZXRSZXF1ZXN0SGVhZGVyKHEsTil9KSxhLmlzVW5kZWZpbmVkKG4ud2l0aENyZWRlbnRpYWxzKXx8KEIud2l0aENyZWRlbnRpYWxzPSEhbi53aXRoQ3JlZGVudGlhbHMpLGwmJmwhPT0ianNvbiImJihCLnJlc3BvbnNlVHlwZT1uLnJlc3BvbnNlVHlwZSksQyYmKFtmLEVdPXooQywhMCksQi5hZGRFdmVudExpc3RlbmVyKCJwcm9ncmVzcyIsZikpLGMmJkIudXBsb2FkJiYoW0ksZ109eihjKSxCLnVwbG9hZC5hZGRFdmVudExpc3RlbmVyKCJwcm9ncmVzcyIsSSksQi51cGxvYWQuYWRkRXZlbnRMaXN0ZW5lcigibG9hZGVuZCIsZykpLChuLmNhbmNlbFRva2VufHxuLnNpZ25hbCkmJihzPWQ9PntCJiYodCghZHx8ZC50eXBlP25ldyBQKG51bGwsQSxCKTpkKSxCLmFib3J0KCksQj1udWxsKX0sbi5jYW5jZWxUb2tlbiYmbi5jYW5jZWxUb2tlbi5zdWJzY3JpYmUocyksbi5zaWduYWwmJihuLnNpZ25hbC5hYm9ydGVkP3MoKTpuLnNpZ25hbC5hZGRFdmVudExpc3RlbmVyKCJhYm9ydCIscykpKTtsZXQgYj1hZShuLnVybCk7aWYoYiYmUy5wcm90b2NvbHMuaW5kZXhPZihiKT09PS0xKXt0KG5ldyBRKCJVbnN1cHBvcnRlZCBwcm90b2NvbCAiK2IrIjoiLFEuRVJSX0JBRF9SRVFVRVNULEEpKTtyZXR1cm59Qi5zZW5kKG98fG51bGwpfSl9O3ZhciB1bj0oQSxlKT0+e2xldCByPW5ldyBBYm9ydENvbnRyb2xsZXIsdCxuPWZ1bmN0aW9uKGMpe2lmKCF0KXt0PSEwLGkoKTtsZXQgQz1jIGluc3RhbmNlb2YgRXJyb3I/Yzp0aGlzLnJlYXNvbjtyLmFib3J0KEMgaW5zdGFuY2VvZiBRP0M6bmV3IFAoQyBpbnN0YW5jZW9mIEVycm9yP0MubWVzc2FnZTpDKSl9fSxvPWUmJnNldFRpbWVvdXQoKCk9PntuKG5ldyBRKGB0aW1lb3V0ICR7ZX0gb2YgbXMgZXhjZWVkZWRgLFEuRVRJTUVET1VUKSl9LGUpLGk9KCk9PntBJiYobyYmY2xlYXJUaW1lb3V0KG8pLG89bnVsbCxBLmZvckVhY2goYz0+e2MmJihjLnJlbW92ZUV2ZW50TGlzdGVuZXI/Yy5yZW1vdmVFdmVudExpc3RlbmVyKCJhYm9ydCIsbik6Yy51bnN1YnNjcmliZShuKSl9KSxBPW51bGwpfTtBLmZvckVhY2goYz0+YyYmYy5hZGRFdmVudExpc3RlbmVyJiZjLmFkZEV2ZW50TGlzdGVuZXIoImFib3J0IixuKSk7bGV0e3NpZ25hbDpsfT1yO3JldHVybiBsLnVuc3Vic2NyaWJlPWksW2wsKCk9PntvJiZjbGVhclRpbWVvdXQobyksbz1udWxsfV19LGZ0PXVuO3ZhciBRbj1mdW5jdGlvbiooQSxlKXtsZXQgcj1BLmJ5dGVMZW5ndGg7aWYoIWV8fHI8ZSl7eWllbGQgQTtyZXR1cm59bGV0IHQ9MCxuO2Zvcig7dDxyOyluPXQrZSx5aWVsZCBBLnNsaWNlKHQsbiksdD1ufSxwbj1hc3luYyBmdW5jdGlvbiooQSxlLHIpe2ZvciBhd2FpdChsZXQgdCBvZiBBKXlpZWxkKlFuKEFycmF5QnVmZmVyLmlzVmlldyh0KT90OmF3YWl0IHIoU3RyaW5nKHQpKSxlKX0sQ2U9KEEsZSxyLHQsbik9PntsZXQgbz1wbihBLGUsbiksaT0wLGwsYz1DPT57bHx8KGw9ITAsdCYmdChDKSl9O3JldHVybiBuZXcgUmVhZGFibGVTdHJlYW0oe2FzeW5jIHB1bGwoQyl7dHJ5e2xldHtkb25lOnMsdmFsdWU6SX09YXdhaXQgby5uZXh0KCk7aWYocyl7YygpLEMuY2xvc2UoKTtyZXR1cm59bGV0IGY9SS5ieXRlTGVuZ3RoO2lmKHIpe2xldCBnPWkrPWY7cihnKX1DLmVucXVldWUobmV3IFVpbnQ4QXJyYXkoSSkpfWNhdGNoKHMpe3Rocm93IGMocyksc319LGNhbmNlbChDKXtyZXR1cm4gYyhDKSxvLnJldHVybigpfX0se2hpZ2hXYXRlck1hcms6Mn0pfTt2YXIgTkE9dHlwZW9mIGZldGNoPT0iZnVuY3Rpb24iJiZ0eXBlb2YgUmVxdWVzdD09ImZ1bmN0aW9uIiYmdHlwZW9mIFJlc3BvbnNlPT0iZnVuY3Rpb24iLFF0PU5BJiZ0eXBlb2YgUmVhZGFibGVTdHJlYW09PSJmdW5jdGlvbiIsY2U9TkEmJih0eXBlb2YgVGV4dEVuY29kZXI9PSJmdW5jdGlvbiI/KEE9PmU9PkEuZW5jb2RlKGUpKShuZXcgVGV4dEVuY29kZXIpOmFzeW5jIEE9Pm5ldyBVaW50OEFycmF5KGF3YWl0IG5ldyBSZXNwb25zZShBKS5hcnJheUJ1ZmZlcigpKSkscHQ9KEEsLi4uZSk9Pnt0cnl7cmV0dXJuISFBKC4uLmUpfWNhdGNoe3JldHVybiExfX0sZG49UXQmJnB0KCgpPT57bGV0IEE9ITEsZT1uZXcgUmVxdWVzdChTLm9yaWdpbix7Ym9keTpuZXcgUmVhZGFibGVTdHJlYW0sbWV0aG9kOiJQT1NUIixnZXQgZHVwbGV4KCl7cmV0dXJuIEE9ITAsImhhbGYifX0pLmhlYWRlcnMuaGFzKCJDb250ZW50LVR5cGUiKTtyZXR1cm4gQSYmIWV9KSx1dD02NCoxMDI0LEJlPVF0JiZwdCgoKT0+YS5pc1JlYWRhYmxlU3RyZWFtKG5ldyBSZXNwb25zZSgiIikuYm9keSkpLFVBPXtzdHJlYW06QmUmJihBPT5BLmJvZHkpfTtOQSYmKEE9PntbInRleHQiLCJhcnJheUJ1ZmZlciIsImJsb2IiLCJmb3JtRGF0YSIsInN0cmVhbSJdLmZvckVhY2goZT0+eyFVQVtlXSYmKFVBW2VdPWEuaXNGdW5jdGlvbihBW2VdKT9yPT5yW2VdKCk6KHIsdCk9Pnt0aHJvdyBuZXcgUShgUmVzcG9uc2UgdHlwZSAnJHtlfScgaXMgbm90IHN1cHBvcnRlZGAsUS5FUlJfTk9UX1NVUFBPUlQsdCl9KX0pfSkobmV3IFJlc3BvbnNlKTt2YXIgbW49YXN5bmMgQT0+e2lmKEE9PW51bGwpcmV0dXJuIDA7aWYoYS5pc0Jsb2IoQSkpcmV0dXJuIEEuc2l6ZTtpZihhLmlzU3BlY0NvbXBsaWFudEZvcm0oQSkpcmV0dXJuKGF3YWl0IG5ldyBSZXF1ZXN0KEEpLmFycmF5QnVmZmVyKCkpLmJ5dGVMZW5ndGg7aWYoYS5pc0FycmF5QnVmZmVyVmlldyhBKXx8YS5pc0FycmF5QnVmZmVyKEEpKXJldHVybiBBLmJ5dGVMZW5ndGg7aWYoYS5pc1VSTFNlYXJjaFBhcmFtcyhBKSYmKEE9QSsiIiksYS5pc1N0cmluZyhBKSlyZXR1cm4oYXdhaXQgY2UoQSkpLmJ5dGVMZW5ndGh9LGhuPWFzeW5jKEEsZSk9PntsZXQgcj1hLnRvRmluaXRlTnVtYmVyKEEuZ2V0Q29udGVudExlbmd0aCgpKTtyZXR1cm4gcj8/bW4oZSl9LGR0PU5BJiYoYXN5bmMgQT0+e2xldHt1cmw6ZSxtZXRob2Q6cixkYXRhOnQsc2lnbmFsOm4sY2FuY2VsVG9rZW46byx0aW1lb3V0Omksb25Eb3dubG9hZFByb2dyZXNzOmwsb25VcGxvYWRQcm9ncmVzczpjLHJlc3BvbnNlVHlwZTpDLGhlYWRlcnM6cyx3aXRoQ3JlZGVudGlhbHM6ST0ic2FtZS1vcmlnaW4iLGZldGNoT3B0aW9uczpmfT1rQShBKTtDPUM/KEMrIiIpLnRvTG93ZXJDYXNlKCk6InRleHQiO2xldFtnLEVdPW58fG98fGk/ZnQoW24sb10saSk6W10sdSxCLGg9KCk9PnshdSYmc2V0VGltZW91dCgoKT0+e2cmJmcudW5zdWJzY3JpYmUoKX0pLHU9ITB9LGI7dHJ5e2lmKGMmJmRuJiZyIT09ImdldCImJnIhPT0iaGVhZCImJihiPWF3YWl0IGhuKHMsdCkpIT09MCl7bGV0IEc9bmV3IFJlcXVlc3QoZSx7bWV0aG9kOiJQT1NUIixib2R5OnQsZHVwbGV4OiJoYWxmIn0pLHg7aWYoYS5pc0Zvcm1EYXRhKHQpJiYoeD1HLmhlYWRlcnMuZ2V0KCJjb250ZW50LXR5cGUiKSkmJnMuc2V0Q29udGVudFR5cGUoeCksRy5ib2R5KXtsZXRbSEEsQkFdPXNlKGIseihJZShjKSkpO3Q9Q2UoRy5ib2R5LHV0LEhBLEJBLGNlKX19YS5pc1N0cmluZyhJKXx8KEk9ST8iaW5jbHVkZSI6Im9taXQiKSxCPW5ldyBSZXF1ZXN0KGUsey4uLmYsc2lnbmFsOmcsbWV0aG9kOnIudG9VcHBlckNhc2UoKSxoZWFkZXJzOnMubm9ybWFsaXplKCkudG9KU09OKCksYm9keTp0LGR1cGxleDoiaGFsZiIsY3JlZGVudGlhbHM6SX0pO2xldCBkPWF3YWl0IGZldGNoKEIpLE49QmUmJihDPT09InN0cmVhbSJ8fEM9PT0icmVzcG9uc2UiKTtpZihCZSYmKGx8fE4pKXtsZXQgRz17fTtbInN0YXR1cyIsInN0YXR1c1RleHQiLCJoZWFkZXJzIl0uZm9yRWFjaChSZT0+e0dbUmVdPWRbUmVdfSk7bGV0IHg9YS50b0Zpbml0ZU51bWJlcihkLmhlYWRlcnMuZ2V0KCJjb250ZW50LWxlbmd0aCIpKSxbSEEsQkFdPWwmJnNlKHgseihJZShsKSwhMCkpfHxbXTtkPW5ldyBSZXNwb25zZShDZShkLmJvZHksdXQsSEEsKCk9PntCQSYmQkEoKSxOJiZoKCl9LGNlKSxHKX1DPUN8fCJ0ZXh0IjtsZXQgcT1hd2FpdCBVQVthLmZpbmRLZXkoVUEsQyl8fCJ0ZXh0Il0oZCxBKTtyZXR1cm4hTiYmaCgpLEUmJkUoKSxhd2FpdCBuZXcgUHJvbWlzZSgoRyx4KT0+e3NBKEcseCx7ZGF0YTpxLGhlYWRlcnM6RC5mcm9tKGQuaGVhZGVycyksc3RhdHVzOmQuc3RhdHVzLHN0YXR1c1RleHQ6ZC5zdGF0dXNUZXh0LGNvbmZpZzpBLHJlcXVlc3Q6Qn0pfSl9Y2F0Y2goZCl7dGhyb3cgaCgpLGQmJmQubmFtZT09PSJUeXBlRXJyb3IiJiYvZmV0Y2gvaS50ZXN0KGQubWVzc2FnZSk/T2JqZWN0LmFzc2lnbihuZXcgUSgiTmV0d29yayBFcnJvciIsUS5FUlJfTkVUV09SSyxBLEIpLHtjYXVzZTpkLmNhdXNlfHxkfSk6US5mcm9tKGQsZCYmZC5jb2RlLEEsQil9fSk7dmFyIEVlPXtodHRwOkRBLHhocjpFdCxmZXRjaDpkdH07YS5mb3JFYWNoKEVlLChBLGUpPT57aWYoQSl7dHJ5e09iamVjdC5kZWZpbmVQcm9wZXJ0eShBLCJuYW1lIix7dmFsdWU6ZX0pfWNhdGNoe31PYmplY3QuZGVmaW5lUHJvcGVydHkoQSwiYWRhcHRlck5hbWUiLHt2YWx1ZTplfSl9fSk7dmFyIG10PUE9PmAtICR7QX1gLHluPUE9PmEuaXNGdW5jdGlvbihBKXx8QT09PW51bGx8fEE9PT0hMSxUQT17Z2V0QWRhcHRlcjpBPT57QT1hLmlzQXJyYXkoQSk/QTpbQV07bGV0e2xlbmd0aDplfT1BLHIsdCxuPXt9O2ZvcihsZXQgbz0wO288ZTtvKyspe3I9QVtvXTtsZXQgaTtpZih0PXIsIXluKHIpJiYodD1FZVsoaT1TdHJpbmcocikpLnRvTG93ZXJDYXNlKCldLHQ9PT12b2lkIDApKXRocm93IG5ldyBRKGBVbmtub3duIGFkYXB0ZXIgJyR7aX0nYCk7aWYodClicmVhaztuW2l8fCIjIitvXT10fWlmKCF0KXtsZXQgbz1PYmplY3QuZW50cmllcyhuKS5tYXAoKFtsLGNdKT0+YGFkYXB0ZXIgJHtsfSBgKyhjPT09ITE/ImlzIG5vdCBzdXBwb3J0ZWQgYnkgdGhlIGVudmlyb25tZW50IjoiaXMgbm90IGF2YWlsYWJsZSBpbiB0aGUgYnVpbGQiKSksaT1lP28ubGVuZ3RoPjE/YHNpbmNlIDoKYCtvLm1hcChtdCkuam9pbihgCmApOiIgIittdChvWzBdKToiYXMgbm8gYWRhcHRlciBzcGVjaWZpZWQiO3Rocm93IG5ldyBRKCJUaGVyZSBpcyBubyBzdWl0YWJsZSBhZGFwdGVyIHRvIGRpc3BhdGNoIHRoZSByZXF1ZXN0ICIraSwiRVJSX05PVF9TVVBQT1JUIil9cmV0dXJuIHR9LGFkYXB0ZXJzOkVlfTtmdW5jdGlvbiBmZShBKXtpZihBLmNhbmNlbFRva2VuJiZBLmNhbmNlbFRva2VuLnRocm93SWZSZXF1ZXN0ZWQoKSxBLnNpZ25hbCYmQS5zaWduYWwuYWJvcnRlZCl0aHJvdyBuZXcgUChudWxsLEEpfWZ1bmN0aW9uIExBKEEpe3JldHVybiBmZShBKSxBLmhlYWRlcnM9RC5mcm9tKEEuaGVhZGVycyksQS5kYXRhPWlBLmNhbGwoQSxBLnRyYW5zZm9ybVJlcXVlc3QpLFsicG9zdCIsInB1dCIsInBhdGNoIl0uaW5kZXhPZihBLm1ldGhvZCkhPT0tMSYmQS5oZWFkZXJzLnNldENvbnRlbnRUeXBlKCJhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQiLCExKSxUQS5nZXRBZGFwdGVyKEEuYWRhcHRlcnx8Xy5hZGFwdGVyKShBKS50aGVuKGZ1bmN0aW9uKHQpe3JldHVybiBmZShBKSx0LmRhdGE9aUEuY2FsbChBLEEudHJhbnNmb3JtUmVzcG9uc2UsdCksdC5oZWFkZXJzPUQuZnJvbSh0LmhlYWRlcnMpLHR9LGZ1bmN0aW9uKHQpe3JldHVybiBhQSh0KXx8KGZlKEEpLHQmJnQucmVzcG9uc2UmJih0LnJlc3BvbnNlLmRhdGE9aUEuY2FsbChBLEEudHJhbnNmb3JtUmVzcG9uc2UsdC5yZXNwb25zZSksdC5yZXNwb25zZS5oZWFkZXJzPUQuZnJvbSh0LnJlc3BvbnNlLmhlYWRlcnMpKSksUHJvbWlzZS5yZWplY3QodCl9KX12YXIgR0E9IjEuNy40Ijt2YXIgdWU9e307WyJvYmplY3QiLCJib29sZWFuIiwibnVtYmVyIiwiZnVuY3Rpb24iLCJzdHJpbmciLCJzeW1ib2wiXS5mb3JFYWNoKChBLGUpPT57dWVbQV09ZnVuY3Rpb24odCl7cmV0dXJuIHR5cGVvZiB0PT09QXx8ImEiKyhlPDE/Im4gIjoiICIpK0F9fSk7dmFyIGh0PXt9O3VlLnRyYW5zaXRpb25hbD1mdW5jdGlvbihlLHIsdCl7ZnVuY3Rpb24gbihvLGkpe3JldHVybiJbQXhpb3MgdiIrR0ErIl0gVHJhbnNpdGlvbmFsIG9wdGlvbiAnIitvKyInIitpKyh0PyIuICIrdDoiIil9cmV0dXJuKG8saSxsKT0+e2lmKGU9PT0hMSl0aHJvdyBuZXcgUShuKGksIiBoYXMgYmVlbiByZW1vdmVkIisocj8iIGluICIrcjoiIikpLFEuRVJSX0RFUFJFQ0FURUQpO3JldHVybiByJiYhaHRbaV0mJihodFtpXT0hMCxjb25zb2xlLndhcm4obihpLCIgaGFzIGJlZW4gZGVwcmVjYXRlZCBzaW5jZSB2IityKyIgYW5kIHdpbGwgYmUgcmVtb3ZlZCBpbiB0aGUgbmVhciBmdXR1cmUiKSkpLGU/ZShvLGksbCk6ITB9fTtmdW5jdGlvbiB3bihBLGUscil7aWYodHlwZW9mIEEhPSJvYmplY3QiKXRocm93IG5ldyBRKCJvcHRpb25zIG11c3QgYmUgYW4gb2JqZWN0IixRLkVSUl9CQURfT1BUSU9OX1ZBTFVFKTtsZXQgdD1PYmplY3Qua2V5cyhBKSxuPXQubGVuZ3RoO2Zvcig7bi0tID4wOyl7bGV0IG89dFtuXSxpPWVbb107aWYoaSl7bGV0IGw9QVtvXSxjPWw9PT12b2lkIDB8fGkobCxvLEEpO2lmKGMhPT0hMCl0aHJvdyBuZXcgUSgib3B0aW9uICIrbysiIG11c3QgYmUgIitjLFEuRVJSX0JBRF9PUFRJT05fVkFMVUUpO2NvbnRpbnVlfWlmKHIhPT0hMCl0aHJvdyBuZXcgUSgiVW5rbm93biBvcHRpb24gIitvLFEuRVJSX0JBRF9PUFRJT04pfX12YXIgeEE9e2Fzc2VydE9wdGlvbnM6d24sdmFsaWRhdG9yczp1ZX07dmFyIE09eEEudmFsaWRhdG9ycyxaPWNsYXNze2NvbnN0cnVjdG9yKGUpe3RoaXMuZGVmYXVsdHM9ZSx0aGlzLmludGVyY2VwdG9ycz17cmVxdWVzdDpuZXcgZWUscmVzcG9uc2U6bmV3IGVlfX1hc3luYyByZXF1ZXN0KGUscil7dHJ5e3JldHVybiBhd2FpdCB0aGlzLl9yZXF1ZXN0KGUscil9Y2F0Y2godCl7aWYodCBpbnN0YW5jZW9mIEVycm9yKXtsZXQgbjtFcnJvci5jYXB0dXJlU3RhY2tUcmFjZT9FcnJvci5jYXB0dXJlU3RhY2tUcmFjZShuPXt9KTpuPW5ldyBFcnJvcjtsZXQgbz1uLnN0YWNrP24uc3RhY2sucmVwbGFjZSgvXi4rXG4vLCIiKToiIjt0cnl7dC5zdGFjaz9vJiYhU3RyaW5nKHQuc3RhY2spLmVuZHNXaXRoKG8ucmVwbGFjZSgvXi4rXG4uK1xuLywiIikpJiYodC5zdGFjays9YApgK28pOnQuc3RhY2s9b31jYXRjaHt9fXRocm93IHR9fV9yZXF1ZXN0KGUscil7dHlwZW9mIGU9PSJzdHJpbmciPyhyPXJ8fHt9LHIudXJsPWUpOnI9ZXx8e30scj1MKHRoaXMuZGVmYXVsdHMscik7bGV0e3RyYW5zaXRpb25hbDp0LHBhcmFtc1NlcmlhbGl6ZXI6bixoZWFkZXJzOm99PXI7dCE9PXZvaWQgMCYmeEEuYXNzZXJ0T3B0aW9ucyh0LHtzaWxlbnRKU09OUGFyc2luZzpNLnRyYW5zaXRpb25hbChNLmJvb2xlYW4pLGZvcmNlZEpTT05QYXJzaW5nOk0udHJhbnNpdGlvbmFsKE0uYm9vbGVhbiksY2xhcmlmeVRpbWVvdXRFcnJvcjpNLnRyYW5zaXRpb25hbChNLmJvb2xlYW4pfSwhMSksbiE9bnVsbCYmKGEuaXNGdW5jdGlvbihuKT9yLnBhcmFtc1NlcmlhbGl6ZXI9e3NlcmlhbGl6ZTpufTp4QS5hc3NlcnRPcHRpb25zKG4se2VuY29kZTpNLmZ1bmN0aW9uLHNlcmlhbGl6ZTpNLmZ1bmN0aW9ufSwhMCkpLHIubWV0aG9kPShyLm1ldGhvZHx8dGhpcy5kZWZhdWx0cy5tZXRob2R8fCJnZXQiKS50b0xvd2VyQ2FzZSgpO2xldCBpPW8mJmEubWVyZ2Uoby5jb21tb24sb1tyLm1ldGhvZF0pO28mJmEuZm9yRWFjaChbImRlbGV0ZSIsImdldCIsImhlYWQiLCJwb3N0IiwicHV0IiwicGF0Y2giLCJjb21tb24iXSxFPT57ZGVsZXRlIG9bRV19KSxyLmhlYWRlcnM9RC5jb25jYXQoaSxvKTtsZXQgbD1bXSxjPSEwO3RoaXMuaW50ZXJjZXB0b3JzLnJlcXVlc3QuZm9yRWFjaChmdW5jdGlvbih1KXt0eXBlb2YgdS5ydW5XaGVuPT0iZnVuY3Rpb24iJiZ1LnJ1bldoZW4ocik9PT0hMXx8KGM9YyYmdS5zeW5jaHJvbm91cyxsLnVuc2hpZnQodS5mdWxmaWxsZWQsdS5yZWplY3RlZCkpfSk7bGV0IEM9W107dGhpcy5pbnRlcmNlcHRvcnMucmVzcG9uc2UuZm9yRWFjaChmdW5jdGlvbih1KXtDLnB1c2godS5mdWxmaWxsZWQsdS5yZWplY3RlZCl9KTtsZXQgcyxJPTAsZjtpZighYyl7bGV0IEU9W0xBLmJpbmQodGhpcyksdm9pZCAwXTtmb3IoRS51bnNoaWZ0LmFwcGx5KEUsbCksRS5wdXNoLmFwcGx5KEUsQyksZj1FLmxlbmd0aCxzPVByb21pc2UucmVzb2x2ZShyKTtJPGY7KXM9cy50aGVuKEVbSSsrXSxFW0krK10pO3JldHVybiBzfWY9bC5sZW5ndGg7bGV0IGc9cjtmb3IoST0wO0k8Zjspe2xldCBFPWxbSSsrXSx1PWxbSSsrXTt0cnl7Zz1FKGcpfWNhdGNoKEIpe3UuY2FsbCh0aGlzLEIpO2JyZWFrfX10cnl7cz1MQS5jYWxsKHRoaXMsZyl9Y2F0Y2goRSl7cmV0dXJuIFByb21pc2UucmVqZWN0KEUpfWZvcihJPTAsZj1DLmxlbmd0aDtJPGY7KXM9cy50aGVuKENbSSsrXSxDW0krK10pO3JldHVybiBzfWdldFVyaShlKXtlPUwodGhpcy5kZWZhdWx0cyxlKTtsZXQgcj1JQShlLmJhc2VVUkwsZS51cmwpO3JldHVybiBuQShyLGUucGFyYW1zLGUucGFyYW1zU2VyaWFsaXplcil9fTthLmZvckVhY2goWyJkZWxldGUiLCJnZXQiLCJoZWFkIiwib3B0aW9ucyJdLGZ1bmN0aW9uKGUpe1oucHJvdG90eXBlW2VdPWZ1bmN0aW9uKHIsdCl7cmV0dXJuIHRoaXMucmVxdWVzdChMKHR8fHt9LHttZXRob2Q6ZSx1cmw6cixkYXRhOih0fHx7fSkuZGF0YX0pKX19KTthLmZvckVhY2goWyJwb3N0IiwicHV0IiwicGF0Y2giXSxmdW5jdGlvbihlKXtmdW5jdGlvbiByKHQpe3JldHVybiBmdW5jdGlvbihvLGksbCl7cmV0dXJuIHRoaXMucmVxdWVzdChMKGx8fHt9LHttZXRob2Q6ZSxoZWFkZXJzOnQ/eyJDb250ZW50LVR5cGUiOiJtdWx0aXBhcnQvZm9ybS1kYXRhIn06e30sdXJsOm8sZGF0YTppfSkpfX1aLnByb3RvdHlwZVtlXT1yKCksWi5wcm90b3R5cGVbZSsiRm9ybSJdPXIoITApfSk7dmFyIGdBPVo7dmFyIFFlPWNsYXNzIEF7Y29uc3RydWN0b3IoZSl7aWYodHlwZW9mIGUhPSJmdW5jdGlvbiIpdGhyb3cgbmV3IFR5cGVFcnJvcigiZXhlY3V0b3IgbXVzdCBiZSBhIGZ1bmN0aW9uLiIpO2xldCByO3RoaXMucHJvbWlzZT1uZXcgUHJvbWlzZShmdW5jdGlvbihvKXtyPW99KTtsZXQgdD10aGlzO3RoaXMucHJvbWlzZS50aGVuKG49PntpZighdC5fbGlzdGVuZXJzKXJldHVybjtsZXQgbz10Ll9saXN0ZW5lcnMubGVuZ3RoO2Zvcig7by0tID4wOyl0Ll9saXN0ZW5lcnNbb10obik7dC5fbGlzdGVuZXJzPW51bGx9KSx0aGlzLnByb21pc2UudGhlbj1uPT57bGV0IG8saT1uZXcgUHJvbWlzZShsPT57dC5zdWJzY3JpYmUobCksbz1sfSkudGhlbihuKTtyZXR1cm4gaS5jYW5jZWw9ZnVuY3Rpb24oKXt0LnVuc3Vic2NyaWJlKG8pfSxpfSxlKGZ1bmN0aW9uKG8saSxsKXt0LnJlYXNvbnx8KHQucmVhc29uPW5ldyBQKG8saSxsKSxyKHQucmVhc29uKSl9KX10aHJvd0lmUmVxdWVzdGVkKCl7aWYodGhpcy5yZWFzb24pdGhyb3cgdGhpcy5yZWFzb259c3Vic2NyaWJlKGUpe2lmKHRoaXMucmVhc29uKXtlKHRoaXMucmVhc29uKTtyZXR1cm59dGhpcy5fbGlzdGVuZXJzP3RoaXMuX2xpc3RlbmVycy5wdXNoKGUpOnRoaXMuX2xpc3RlbmVycz1bZV19dW5zdWJzY3JpYmUoZSl7aWYoIXRoaXMuX2xpc3RlbmVycylyZXR1cm47bGV0IHI9dGhpcy5fbGlzdGVuZXJzLmluZGV4T2YoZSk7ciE9PS0xJiZ0aGlzLl9saXN0ZW5lcnMuc3BsaWNlKHIsMSl9c3RhdGljIHNvdXJjZSgpe2xldCBlO3JldHVybnt0b2tlbjpuZXcgQShmdW5jdGlvbihuKXtlPW59KSxjYW5jZWw6ZX19fSx5dD1RZTtmdW5jdGlvbiBwZShBKXtyZXR1cm4gZnVuY3Rpb24ocil7cmV0dXJuIEEuYXBwbHkobnVsbCxyKX19ZnVuY3Rpb24gZGUoQSl7cmV0dXJuIGEuaXNPYmplY3QoQSkmJkEuaXNBeGlvc0Vycm9yPT09ITB9dmFyIG1lPXtDb250aW51ZToxMDAsU3dpdGNoaW5nUHJvdG9jb2xzOjEwMSxQcm9jZXNzaW5nOjEwMixFYXJseUhpbnRzOjEwMyxPazoyMDAsQ3JlYXRlZDoyMDEsQWNjZXB0ZWQ6MjAyLE5vbkF1dGhvcml0YXRpdmVJbmZvcm1hdGlvbjoyMDMsTm9Db250ZW50OjIwNCxSZXNldENvbnRlbnQ6MjA1LFBhcnRpYWxDb250ZW50OjIwNixNdWx0aVN0YXR1czoyMDcsQWxyZWFkeVJlcG9ydGVkOjIwOCxJbVVzZWQ6MjI2LE11bHRpcGxlQ2hvaWNlczozMDAsTW92ZWRQZXJtYW5lbnRseTozMDEsRm91bmQ6MzAyLFNlZU90aGVyOjMwMyxOb3RNb2RpZmllZDozMDQsVXNlUHJveHk6MzA1LFVudXNlZDozMDYsVGVtcG9yYXJ5UmVkaXJlY3Q6MzA3LFBlcm1hbmVudFJlZGlyZWN0OjMwOCxCYWRSZXF1ZXN0OjQwMCxVbmF1dGhvcml6ZWQ6NDAxLFBheW1lbnRSZXF1aXJlZDo0MDIsRm9yYmlkZGVuOjQwMyxOb3RGb3VuZDo0MDQsTWV0aG9kTm90QWxsb3dlZDo0MDUsTm90QWNjZXB0YWJsZTo0MDYsUHJveHlBdXRoZW50aWNhdGlvblJlcXVpcmVkOjQwNyxSZXF1ZXN0VGltZW91dDo0MDgsQ29uZmxpY3Q6NDA5LEdvbmU6NDEwLExlbmd0aFJlcXVpcmVkOjQxMSxQcmVjb25kaXRpb25GYWlsZWQ6NDEyLFBheWxvYWRUb29MYXJnZTo0MTMsVXJpVG9vTG9uZzo0MTQsVW5zdXBwb3J0ZWRNZWRpYVR5cGU6NDE1LFJhbmdlTm90U2F0aXNmaWFibGU6NDE2LEV4cGVjdGF0aW9uRmFpbGVkOjQxNyxJbUFUZWFwb3Q6NDE4LE1pc2RpcmVjdGVkUmVxdWVzdDo0MjEsVW5wcm9jZXNzYWJsZUVudGl0eTo0MjIsTG9ja2VkOjQyMyxGYWlsZWREZXBlbmRlbmN5OjQyNCxUb29FYXJseTo0MjUsVXBncmFkZVJlcXVpcmVkOjQyNixQcmVjb25kaXRpb25SZXF1aXJlZDo0MjgsVG9vTWFueVJlcXVlc3RzOjQyOSxSZXF1ZXN0SGVhZGVyRmllbGRzVG9vTGFyZ2U6NDMxLFVuYXZhaWxhYmxlRm9yTGVnYWxSZWFzb25zOjQ1MSxJbnRlcm5hbFNlcnZlckVycm9yOjUwMCxOb3RJbXBsZW1lbnRlZDo1MDEsQmFkR2F0ZXdheTo1MDIsU2VydmljZVVuYXZhaWxhYmxlOjUwMyxHYXRld2F5VGltZW91dDo1MDQsSHR0cFZlcnNpb25Ob3RTdXBwb3J0ZWQ6NTA1LFZhcmlhbnRBbHNvTmVnb3RpYXRlczo1MDYsSW5zdWZmaWNpZW50U3RvcmFnZTo1MDcsTG9vcERldGVjdGVkOjUwOCxOb3RFeHRlbmRlZDo1MTAsTmV0d29ya0F1dGhlbnRpY2F0aW9uUmVxdWlyZWQ6NTExfTtPYmplY3QuZW50cmllcyhtZSkuZm9yRWFjaCgoW0EsZV0pPT57bWVbZV09QX0pO3ZhciB3dD1tZTtmdW5jdGlvbiBEdChBKXtsZXQgZT1uZXcgZ0EoQSkscj1lQShnQS5wcm90b3R5cGUucmVxdWVzdCxlKTtyZXR1cm4gYS5leHRlbmQocixnQS5wcm90b3R5cGUsZSx7YWxsT3duS2V5czohMH0pLGEuZXh0ZW5kKHIsZSxudWxsLHthbGxPd25LZXlzOiEwfSksci5jcmVhdGU9ZnVuY3Rpb24obil7cmV0dXJuIER0KEwoQSxuKSl9LHJ9dmFyIHk9RHQoXyk7eS5BeGlvcz1nQTt5LkNhbmNlbGVkRXJyb3I9UDt5LkNhbmNlbFRva2VuPXl0O3kuaXNDYW5jZWw9YUE7eS5WRVJTSU9OPUdBO3kudG9Gb3JtRGF0YT1KO3kuQXhpb3NFcnJvcj1RO3kuQ2FuY2VsPXkuQ2FuY2VsZWRFcnJvcjt5LmFsbD1mdW5jdGlvbihlKXtyZXR1cm4gUHJvbWlzZS5hbGwoZSl9O3kuc3ByZWFkPXBlO3kuaXNBeGlvc0Vycm9yPWRlO3kubWVyZ2VDb25maWc9TDt5LkF4aW9zSGVhZGVycz1EO3kuZm9ybVRvSlNPTj1BPT5SQShhLmlzSFRNTEZvcm0oQSk/bmV3IEZvcm1EYXRhKEEpOkEpO3kuZ2V0QWRhcHRlcj1UQS5nZXRBZGFwdGVyO3kuSHR0cFN0YXR1c0NvZGU9d3Q7eS5kZWZhdWx0PXk7dmFyIFg9eTt2YXJ7QXhpb3M6VXMsQXhpb3NFcnJvcjpOcyxDYW5jZWxlZEVycm9yOlRzLGlzQ2FuY2VsOkxzLENhbmNlbFRva2VuOkdzLFZFUlNJT046eHMsYWxsOk9zLENhbmNlbDpQcyxpc0F4aW9zRXJyb3I6SnMsc3ByZWFkOk1zLHRvRm9ybURhdGE6SHMsQXhpb3NIZWFkZXJzOnFzLEh0dHBTdGF0dXNDb2RlOllzLGZvcm1Ub0pTT046S3MsZ2V0QWRhcHRlcjp2cyxtZXJnZUNvbmZpZzpXc309WDthc3luYyBmdW5jdGlvbiBEbihBLGUpe2xldCByPUEsdD1udWxsO2lmKHI9PW51bGwpdD1uZXcgV29ya2VyKG5ldyBVUkwoIi4vd2ViLXdvcmtlcnMvaXRrLXdhc20tcGlwZWxpbmUud29ya2VyLmpzIixpbXBvcnQubWV0YS51cmwpLHt0eXBlOiJtb2R1bGUifSk7ZWxzZSBpZihyLnN0YXJ0c1dpdGgoImh0dHAiKSl7bGV0IG49YXdhaXQgWC5nZXQocix7cmVzcG9uc2VUeXBlOiJibG9iIixwYXJhbXM6ZX0pLG89VVJMLmNyZWF0ZU9iamVjdFVSTChuLmRhdGEpO3Q9bmV3IFdvcmtlcihvLHt0eXBlOiJtb2R1bGUifSl9ZWxzZSB0PW5ldyBXb3JrZXIocix7dHlwZToibW9kdWxlIn0pO3JldHVybiB0fXZhciBsQT1EbjtmdW5jdGlvbiBTdChBKXtsZXQgZT1fQShBKSxyPUE7cmV0dXJuIHIudGVybWluYXRlZD0hMSxyLndvcmtlclByb3h5PWUsci5vcmlnaW5hbFRlcm1pbmF0ZT1yLnRlcm1pbmF0ZSxyLnRlcm1pbmF0ZT0oKT0+e3IudGVybWluYXRlZD0hMCxyLndvcmtlclByb3h5W2pBXSgpLHIub3JpZ2luYWxUZXJtaW5hdGUoKX0se3dvcmtlclByb3h5OmUsd29ya2VyOnJ9fWFzeW5jIGZ1bmN0aW9uIFNuKEEsZSxyKXtsZXQgdDtpZihBIT1udWxsKXtsZXQgbz1BO3JldHVybiBvLndvcmtlclByb3h5IT09dm9pZCAwPyh0PW8ud29ya2VyUHJveHkse3dvcmtlclByb3h5OnQsd29ya2VyOm99KTpTdChBKX1sZXQgbj1hd2FpdCBsQShlLHIpO3JldHVybiBTdChuKX12YXIgYnQ9U247YXN5bmMgZnVuY3Rpb24gYm4oQSxlLHIpe2xldCB0PSJ1bmtub3duIjt0eXBlb2YgQSE9InN0cmluZyI/dD1BLmhyZWY6QS5zdGFydHNXaXRoKCJodHRwIik/dD1BOnQ9dHlwZW9mIGU8InUiP2Ake2V9LyR7QX1gOkEsdC5lbmRzV2l0aCgiLmpzIikmJih0PXQuc3Vic3RyaW5nKDAsdC5sZW5ndGgtMykpLHQuZW5kc1dpdGgoIi53YXNtIikmJih0PXQuc3Vic3RyaW5nKDAsdC5sZW5ndGgtNSkpO2xldCBuPWAke3R9Lndhc21gLGk9KGF3YWl0IFguZ2V0KG4se3Jlc3BvbnNlVHlwZToiYXJyYXlidWZmZXIiLHBhcmFtczpyfSkpLmRhdGE7cmV0dXJuKGF3YWl0IGltcG9ydChgJHt0fS5qc2ApKS5kZWZhdWx0KHt3YXNtQmluYXJ5Oml9KX12YXIgUnQ9Ym47dmFyIEZ0PWFzeW5jKCk9PldlYkFzc2VtYmx5LnZhbGlkYXRlKG5ldyBVaW50OEFycmF5KFswLDk3LDExNSwxMDksMSwwLDAsMCwxLDUsMSw5NiwwLDEsMTIzLDMsMiwxLDAsMTAsMTAsMSw4LDAsNjUsMCwyNTMsMTUsMjUzLDk4LDExXSkpO3ZhciBOdD10eXBlb2YgZ2xvYmFsVGhpcy5TaGFyZWRBcnJheUJ1ZmZlcj09ImZ1bmN0aW9uIixrdD1uZXcgVGV4dEVuY29kZXIsVXQ9bmV3IFRleHREZWNvZGVyKCJ1dGYtOCIpO2Z1bmN0aW9uIFJuKEEsZSl7bGV0IHI9e2ZsYWdzOiJyIixlbmNvZGluZzoiYmluYXJ5In0sdD1BLmZzX29wZW4oZSxyLmZsYWdzKSxvPUEuZnNfc3RhdChlKS5zaXplLGk9bnVsbDtOdD9pPW5ldyBTaGFyZWRBcnJheUJ1ZmZlcihvKTppPW5ldyBBcnJheUJ1ZmZlcihvKTtsZXQgbD1uZXcgVWludDhBcnJheShpKTtyZXR1cm4gQS5mc19yZWFkKHQsbCwwLG8sMCksQS5mc19jbG9zZSh0KSxsfWZ1bmN0aW9uIFR0KEEsZSxyKXtsZXQgdD1udWxsO050P3Q9bmV3IFNoYXJlZEFycmF5QnVmZmVyKHIpOnQ9bmV3IEFycmF5QnVmZmVyKHIpO2xldCBuPW5ldyBVaW50OEFycmF5KHQpLG89bmV3IFVpbnQ4QXJyYXkoQS5IRUFQVTguYnVmZmVyLGUscik7cmV0dXJuIG4uc2V0KG8pLG59ZnVuY3Rpb24gdyhBLGUscix0KXtsZXQgbj0wO3JldHVybiBlIT09bnVsbCYmKG49QS5jY2FsbCgiaXRrX3dhc21faW5wdXRfYXJyYXlfYWxsb2MiLCJudW1iZXIiLFsibnVtYmVyIiwibnVtYmVyIiwibnVtYmVyIiwibnVtYmVyIl0sWzAscix0LGUuYnVmZmVyLmJ5dGVMZW5ndGhdKSxBLkhFQVBVOC5zZXQobmV3IFVpbnQ4QXJyYXkoZS5idWZmZXIpLG4pKSxufWZ1bmN0aW9uIEgoQSxlLHIpe2xldCB0PUpTT04uc3RyaW5naWZ5KGUpLG49QS5sZW5ndGhCeXRlc1VURjgodCkrMSxvPUEuY2NhbGwoIml0a193YXNtX2lucHV0X2pzb25fYWxsb2MiLCJudW1iZXIiLFsibnVtYmVyIiwibnVtYmVyIiwibnVtYmVyIl0sWzAscixuXSk7QS5zdHJpbmdUb1VURjgodCxvLG4pfWZ1bmN0aW9uIEYoQSxlLHIsdCl7bGV0IG49QS5jY2FsbCgiaXRrX3dhc21fb3V0cHV0X2FycmF5X2FkZHJlc3MiLCJudW1iZXIiLFsibnVtYmVyIiwibnVtYmVyIiwibnVtYmVyIl0sWzAsZSxyXSksbz1BLmNjYWxsKCJpdGtfd2FzbV9vdXRwdXRfYXJyYXlfc2l6ZSIsIm51bWJlciIsWyJudW1iZXIiLCJudW1iZXIiLCJudW1iZXIiXSxbMCxlLHJdKSxpPVR0KEEsbixvKTtyZXR1cm4gTyh0LGkuYnVmZmVyKX1mdW5jdGlvbiBDQShBLGUpe2xldCByPUEuY2NhbGwoIml0a193YXNtX291dHB1dF9qc29uX2FkZHJlc3MiLCJudW1iZXIiLFsibnVtYmVyIiwibnVtYmVyIl0sWzAsZV0pLHQ9QS5VVEY4VG9TdHJpbmcocik7cmV0dXJuIEpTT04ucGFyc2UodCl9ZnVuY3Rpb24gRm4oQSxlLHIsdCl7dCE9bnVsbCYmdC5sZW5ndGg+MCYmdC5mb3JFYWNoKGZ1bmN0aW9uKEMscyl7c3dpdGNoKEMudHlwZSl7Y2FzZSBtLlRleHRTdHJlYW06e2xldCBJPWt0LmVuY29kZShDLmRhdGEuZGF0YSksZj13KEEsSSxzLDApLGc9e3NpemU6SS5idWZmZXIuYnl0ZUxlbmd0aCxkYXRhOmBkYXRhOmFwcGxpY2F0aW9uL3ZuZC5pdGsuYWRkcmVzcywwOiR7Zn1gfTtIKEEsZyxzKTticmVha31jYXNlIG0uSnNvbkNvbXBhdGlibGU6e2xldCBJPWt0LmVuY29kZShKU09OLnN0cmluZ2lmeShDLmRhdGEpKSxmPXcoQSxJLHMsMCksZz17c2l6ZTpJLmJ1ZmZlci5ieXRlTGVuZ3RoLGRhdGE6YGRhdGE6YXBwbGljYXRpb24vdm5kLml0ay5hZGRyZXNzLDA6JHtmfWB9O0goQSxnLHMpO2JyZWFrfWNhc2UgbS5CaW5hcnlTdHJlYW06e2xldCBJPUMuZGF0YS5kYXRhLGY9dyhBLEkscywwKSxnPXtzaXplOkkuYnVmZmVyLmJ5dGVMZW5ndGgsZGF0YTpgZGF0YTphcHBsaWNhdGlvbi92bmQuaXRrLmFkZHJlc3MsMDoke2Z9YH07SChBLGcscyk7YnJlYWt9Y2FzZSBtLlRleHRGaWxlOntBLmZzX3dyaXRlRmlsZShDLmRhdGEucGF0aCxDLmRhdGEuZGF0YSk7YnJlYWt9Y2FzZSBtLkJpbmFyeUZpbGU6e0EuZnNfd3JpdGVGaWxlKEMuZGF0YS5wYXRoLEMuZGF0YS5kYXRhKTticmVha31jYXNlIG0uSW1hZ2U6e2xldCBJPUMuZGF0YSxmPXcoQSxJLmRhdGEscywwKSxnPXcoQSxJLmRpcmVjdGlvbixzLDEpLEU9dHlwZW9mIEkubWV0YWRhdGE/LmVudHJpZXM8InUiP0FycmF5LmZyb20oSS5tZXRhZGF0YS5lbnRyaWVzKCkpOltdLHU9e2ltYWdlVHlwZTpJLmltYWdlVHlwZSxuYW1lOkkubmFtZSxvcmlnaW46SS5vcmlnaW4sc3BhY2luZzpJLnNwYWNpbmcsZGlyZWN0aW9uOmBkYXRhOmFwcGxpY2F0aW9uL3ZuZC5pdGsuYWRkcmVzcywwOiR7Z31gLHNpemU6SS5zaXplLGRhdGE6YGRhdGE6YXBwbGljYXRpb24vdm5kLml0ay5hZGRyZXNzLDA6JHtmfWAsbWV0YWRhdGE6RX07SChBLHUscyk7YnJlYWt9Y2FzZSBtLk1lc2g6e2xldCBJPUMuZGF0YSxmPXcoQSxJLnBvaW50cyxzLDApLGc9dyhBLEkuY2VsbHMscywxKSxFPXcoQSxJLnBvaW50RGF0YSxzLDIpLHU9dyhBLEkuY2VsbERhdGEscywzKSxCPXttZXNoVHlwZTpJLm1lc2hUeXBlLG5hbWU6SS5uYW1lLG51bWJlck9mUG9pbnRzOkkubnVtYmVyT2ZQb2ludHMscG9pbnRzOmBkYXRhOmFwcGxpY2F0aW9uL3ZuZC5pdGsuYWRkcmVzcywwOiR7Zn1gLG51bWJlck9mQ2VsbHM6SS5udW1iZXJPZkNlbGxzLGNlbGxzOmBkYXRhOmFwcGxpY2F0aW9uL3ZuZC5pdGsuYWRkcmVzcywwOiR7Z31gLGNlbGxCdWZmZXJTaXplOkkuY2VsbEJ1ZmZlclNpemUsbnVtYmVyT2ZQb2ludFBpeGVsczpJLm51bWJlck9mUG9pbnRQaXhlbHMscG9pbnREYXRhOmBkYXRhOmFwcGxpY2F0aW9uL3ZuZC5pdGsuYWRkcmVzcywwOiR7RX1gLG51bWJlck9mQ2VsbFBpeGVsczpJLm51bWJlck9mQ2VsbFBpeGVscyxjZWxsRGF0YTpgZGF0YTphcHBsaWNhdGlvbi92bmQuaXRrLmFkZHJlc3MsMDoke3V9YH07SChBLEIscyk7YnJlYWt9Y2FzZSBtLlBvaW50U2V0OntsZXQgST1DLmRhdGEsZj13KEEsSS5wb2ludHMscywwKSxnPXcoQSxJLnBvaW50RGF0YSxzLDEpLEU9e3BvaW50U2V0VHlwZTpJLnBvaW50U2V0VHlwZSxuYW1lOkkubmFtZSxudW1iZXJPZlBvaW50czpJLm51bWJlck9mUG9pbnRzLHBvaW50czpgZGF0YTphcHBsaWNhdGlvbi92bmQuaXRrLmFkZHJlc3MsMDoke2Z9YCxudW1iZXJPZlBvaW50UGl4ZWxzOkkubnVtYmVyT2ZQb2ludFBpeGVscyxwb2ludERhdGE6YGRhdGE6YXBwbGljYXRpb24vdm5kLml0ay5hZGRyZXNzLDA6JHtnfWB9O0goQSxFLHMpO2JyZWFrfWNhc2UgbS5UcmFuc2Zvcm1MaXN0OntsZXQgST1DLmRhdGEsZj1bXTtJLmZvckVhY2goKGcsRSk9PntsZXQgQj1gZGF0YTphcHBsaWNhdGlvbi92bmQuaXRrLmFkZHJlc3MsMDoke3coQSxnLmZpeGVkUGFyYW1ldGVycyxzLEUqMil9YCxiPWBkYXRhOmFwcGxpY2F0aW9uL3ZuZC5pdGsuYWRkcmVzcywwOiR7dyhBLGcucGFyYW1ldGVycyxzLEUqMisxKX1gLGQ9e3RyYW5zZm9ybVR5cGU6Zy50cmFuc2Zvcm1UeXBlLG51bWJlck9mRml4ZWRQYXJhbWV0ZXJzOmcubnVtYmVyT2ZGaXhlZFBhcmFtZXRlcnMsbnVtYmVyT2ZQYXJhbWV0ZXJzOmcubnVtYmVyT2ZQYXJhbWV0ZXJzLG5hbWU6Zy5uYW1lLGlucHV0U3BhY2VOYW1lOmcuaW5wdXRTcGFjZU5hbWUsb3V0cHV0U3BhY2VOYW1lOmcub3V0cHV0U3BhY2VOYW1lLHBhcmFtZXRlcnM6YixmaXhlZFBhcmFtZXRlcnM6Qn07Zi5wdXNoKGQpfSksSChBLGYscyk7YnJlYWt9Y2FzZSBtLlBvbHlEYXRhOntsZXQgST1DLmRhdGEsZj13KEEsSS5wb2ludHMscywwKSxnPXcoQSxJLnZlcnRpY2VzLHMsMSksRT13KEEsSS5saW5lcyxzLDIpLHU9dyhBLEkucG9seWdvbnMscywzKSxCPXcoQSxJLnRyaWFuZ2xlU3RyaXBzLHMsNCksaD13KEEsSS5wb2ludERhdGEscyw1KSxiPXcoQSxJLnBvaW50RGF0YSxzLDYpLGQ9e3BvbHlEYXRhVHlwZTpJLnBvbHlEYXRhVHlwZSxuYW1lOkkubmFtZSxudW1iZXJPZlBvaW50czpJLm51bWJlck9mUG9pbnRzLHBvaW50czpgZGF0YTphcHBsaWNhdGlvbi92bmQuaXRrLmFkZHJlc3MsMDoke2Z9YCx2ZXJ0aWNlc0J1ZmZlclNpemU6SS52ZXJ0aWNlc0J1ZmZlclNpemUsdmVydGljZXM6YGRhdGE6YXBwbGljYXRpb24vdm5kLml0ay5hZGRyZXNzLDA6JHtnfWAsbGluZXNCdWZmZXJTaXplOkkubGluZXNCdWZmZXJTaXplLGxpbmVzOmBkYXRhOmFwcGxpY2F0aW9uL3ZuZC5pdGsuYWRkcmVzcywwOiR7RX1gLHBvbHlnb25zQnVmZmVyU2l6ZTpJLnBvbHlnb25zQnVmZmVyU2l6ZSxwb2x5Z29uczpgZGF0YTphcHBsaWNhdGlvbi92bmQuaXRrLmFkZHJlc3MsMDoke3V9YCx0cmlhbmdsZVN0cmlwc0J1ZmZlclNpemU6SS50cmlhbmdsZVN0cmlwc0J1ZmZlclNpemUsdHJpYW5nbGVTdHJpcHM6YGRhdGE6YXBwbGljYXRpb24vdm5kLml0ay5hZGRyZXNzLDA6JHtCfWAsbnVtYmVyT2ZQb2ludFBpeGVsczpJLm51bWJlck9mUG9pbnRQaXhlbHMscG9pbnREYXRhOmBkYXRhOmFwcGxpY2F0aW9uL3ZuZC5pdGsuYWRkcmVzcywwOiR7aH1gLG51bWJlck9mQ2VsbFBpeGVsczpJLm51bWJlck9mQ2VsbFBpeGVscyxjZWxsRGF0YTpgZGF0YTphcHBsaWNhdGlvbi92bmQuaXRrLmFkZHJlc3MsMDoke2J9YH07SChBLGQscyk7YnJlYWt9ZGVmYXVsdDp0aHJvdyBFcnJvcigiVW5zdXBwb3J0ZWQgaW5wdXQgSW50ZXJmYWNlVHlwZSIpfX0pLEEucmVzZXRNb2R1bGVTdGRvdXQoKSxBLnJlc2V0TW9kdWxlU3RkZXJyKCk7bGV0IG49QS5zdGFja1NhdmUoKSxvPTA7dHJ5e289QS5jYWxsTWFpbihlLnNsaWNlKCkpfWNhdGNoKEMpe3Rocm93IHR5cGVvZiBDPT0ibnVtYmVyIiYmKGNvbnNvbGUubG9nKCJFeGNlcHRpb24gd2hpbGUgcnVubmluZyBwaXBlbGluZToiKSxjb25zb2xlLmxvZygic3Rkb3V0OiIsQS5nZXRNb2R1bGVTdGRvdXQoKSksY29uc29sZS5lcnJvcigic3RkZXJyOiIsQS5nZXRNb2R1bGVTdGRlcnIoKSksdHlwZW9mIEEuZ2V0RXhjZXB0aW9uTWVzc2FnZTwidSI/Y29uc29sZS5lcnJvcigiZXhjZXB0aW9uOiIsQS5nZXRFeGNlcHRpb25NZXNzYWdlKEMpKTpjb25zb2xlLmVycm9yKCJCdWlsZCBtb2R1bGUgaW4gRGVidWcgbW9kZSBmb3IgZXhjZXB0aW9uIG1lc3NhZ2UgaW5mb3JtYXRpb24uIikpLEN9ZmluYWxseXtBLnN0YWNrUmVzdG9yZShuKX1sZXQgaT1BLmdldE1vZHVsZVN0ZG91dCgpLGw9QS5nZXRNb2R1bGVTdGRlcnIoKSxjPVtdO3JldHVybiByIT1udWxsJiZyLmxlbmd0aD4wJiZvPT09MCYmci5mb3JFYWNoKGZ1bmN0aW9uKEMscyl7bGV0IEk9bnVsbDtzd2l0Y2goQy50eXBlKXtjYXNlIG0uVGV4dFN0cmVhbTp7bGV0IGc9QS5jY2FsbCgiaXRrX3dhc21fb3V0cHV0X2FycmF5X2FkZHJlc3MiLCJudW1iZXIiLFsibnVtYmVyIiwibnVtYmVyIiwibnVtYmVyIl0sWzAscywwXSksRT1BLmNjYWxsKCJpdGtfd2FzbV9vdXRwdXRfYXJyYXlfc2l6ZSIsIm51bWJlciIsWyJudW1iZXIiLCJudW1iZXIiLCJudW1iZXIiXSxbMCxzLDBdKSx1PW5ldyBVaW50OEFycmF5KEEuSEVBUFU4LmJ1ZmZlcixnLEUpO0k9e2RhdGE6VXQuZGVjb2RlKHUpfTticmVha31jYXNlIG0uSnNvbkNvbXBhdGlibGU6e2xldCBnPUEuY2NhbGwoIml0a193YXNtX291dHB1dF9hcnJheV9hZGRyZXNzIiwibnVtYmVyIixbIm51bWJlciIsIm51bWJlciIsIm51bWJlciJdLFswLHMsMF0pLEU9QS5jY2FsbCgiaXRrX3dhc21fb3V0cHV0X2FycmF5X3NpemUiLCJudW1iZXIiLFsibnVtYmVyIiwibnVtYmVyIiwibnVtYmVyIl0sWzAscywwXSksdT1uZXcgVWludDhBcnJheShBLkhFQVBVOC5idWZmZXIsZyxFKTtJPUpTT04ucGFyc2UoVXQuZGVjb2RlKHUpKTticmVha31jYXNlIG0uQmluYXJ5U3RyZWFtOntsZXQgZz1BLmNjYWxsKCJpdGtfd2FzbV9vdXRwdXRfYXJyYXlfYWRkcmVzcyIsIm51bWJlciIsWyJudW1iZXIiLCJudW1iZXIiLCJudW1iZXIiXSxbMCxzLDBdKSxFPUEuY2NhbGwoIml0a193YXNtX291dHB1dF9hcnJheV9zaXplIiwibnVtYmVyIixbIm51bWJlciIsIm51bWJlciIsIm51bWJlciJdLFswLHMsMF0pO0k9e2RhdGE6VHQoQSxnLEUpfTticmVha31jYXNlIG0uVGV4dEZpbGU6e0k9e3BhdGg6Qy5kYXRhLnBhdGgsZGF0YTpBLmZzX3JlYWRGaWxlKEMuZGF0YS5wYXRoLHtlbmNvZGluZzoidXRmOCJ9KX07YnJlYWt9Y2FzZSBtLkJpbmFyeUZpbGU6e0k9e3BhdGg6Qy5kYXRhLnBhdGgsZGF0YTpSbihBLEMuZGF0YS5wYXRoKX07YnJlYWt9Y2FzZSBtLkltYWdlOntsZXQgZz1DQShBLHMpO2cuZGF0YT1GKEEscywwLGcuaW1hZ2VUeXBlLmNvbXBvbmVudFR5cGUpLGcuZGlyZWN0aW9uPUYoQSxzLDEsUi5GbG9hdDY0KSxnLm1ldGFkYXRhPW5ldyBNYXAoZy5tZXRhZGF0YSksST1nO2JyZWFrfWNhc2UgbS5NZXNoOntsZXQgZz1DQShBLHMpO2cubnVtYmVyT2ZQb2ludHM+MD9nLnBvaW50cz1GKEEscywwLGcubWVzaFR5cGUucG9pbnRDb21wb25lbnRUeXBlKTpnLnBvaW50cz1PKGcubWVzaFR5cGUucG9pbnRDb21wb25lbnRUeXBlLG5ldyBBcnJheUJ1ZmZlcigwKSksZy5udW1iZXJPZkNlbGxzPjA/Zy5jZWxscz1GKEEscywxLGcubWVzaFR5cGUuY2VsbENvbXBvbmVudFR5cGUpOmcuY2VsbHM9TyhnLm1lc2hUeXBlLmNlbGxDb21wb25lbnRUeXBlLG5ldyBBcnJheUJ1ZmZlcigwKSksZy5udW1iZXJPZlBvaW50UGl4ZWxzPjA/Zy5wb2ludERhdGE9RihBLHMsMixnLm1lc2hUeXBlLnBvaW50UGl4ZWxDb21wb25lbnRUeXBlKTpnLnBvaW50RGF0YT1PKGcubWVzaFR5cGUucG9pbnRQaXhlbENvbXBvbmVudFR5cGUsbmV3IEFycmF5QnVmZmVyKDApKSxnLm51bWJlck9mQ2VsbFBpeGVscz4wP2cuY2VsbERhdGE9RihBLHMsMyxnLm1lc2hUeXBlLmNlbGxQaXhlbENvbXBvbmVudFR5cGUpOmcuY2VsbERhdGE9TyhnLm1lc2hUeXBlLmNlbGxQaXhlbENvbXBvbmVudFR5cGUsbmV3IEFycmF5QnVmZmVyKDApKSxJPWc7YnJlYWt9Y2FzZSBtLlBvaW50U2V0OntsZXQgZz1DQShBLHMpO2cubnVtYmVyT2ZQb2ludHM+MD9nLnBvaW50cz1GKEEscywwLGcucG9pbnRTZXRUeXBlLnBvaW50Q29tcG9uZW50VHlwZSk6Zy5wb2ludHM9TyhnLnBvaW50U2V0VHlwZS5wb2ludENvbXBvbmVudFR5cGUsbmV3IEFycmF5QnVmZmVyKDApKSxnLm51bWJlck9mUG9pbnRQaXhlbHM+MD9nLnBvaW50RGF0YT1GKEEscywxLGcucG9pbnRTZXRUeXBlLnBvaW50UGl4ZWxDb21wb25lbnRUeXBlKTpnLnBvaW50RGF0YT1PKGcucG9pbnRTZXRUeXBlLnBvaW50UGl4ZWxDb21wb25lbnRUeXBlLG5ldyBBcnJheUJ1ZmZlcigwKSksST1nO2JyZWFrfWNhc2UgbS5UcmFuc2Zvcm1MaXN0OntsZXQgZz1DQShBLHMpO2cuZm9yRWFjaCgoRSx1KT0+e0UubnVtYmVyT2ZGaXhlZFBhcmFtZXRlcnM+MCYmKGdbdV0uZml4ZWRQYXJhbWV0ZXJzPUYoQSxzLHUqMixFLnRyYW5zZm9ybVR5cGUucGFyYW1ldGVyc1ZhbHVlVHlwZSkpLEUubnVtYmVyT2ZGaXhlZFBhcmFtZXRlcnM+MCYmKGdbdV0ucGFyYW1ldGVycz1GKEEscyx1KjIrMSxFLnRyYW5zZm9ybVR5cGUucGFyYW1ldGVyc1ZhbHVlVHlwZSkpfSksST1nO2JyZWFrfWNhc2UgbS5Qb2x5RGF0YTp7bGV0IGc9Q0EoQSxzKTtnLm51bWJlck9mUG9pbnRzPjA/Zy5wb2ludHM9RihBLHMsMCxSLkZsb2F0MzIpOmcucG9pbnRzPW5ldyBGbG9hdDMyQXJyYXksZy52ZXJ0aWNlc0J1ZmZlclNpemU+MD9nLnZlcnRpY2VzPUYoQSxzLDEscC5VSW50MzIpOmcudmVydGljZXM9bmV3IFVpbnQzMkFycmF5LGcubGluZXNCdWZmZXJTaXplPjA/Zy5saW5lcz1GKEEscywyLHAuVUludDMyKTpnLmxpbmVzPW5ldyBVaW50MzJBcnJheSxnLnBvbHlnb25zQnVmZmVyU2l6ZT4wP2cucG9seWdvbnM9RihBLHMsMyxwLlVJbnQzMik6Zy5wb2x5Z29ucz1uZXcgVWludDMyQXJyYXksZy50cmlhbmdsZVN0cmlwc0J1ZmZlclNpemU+MD9nLnRyaWFuZ2xlU3RyaXBzPUYoQSxzLDQscC5VSW50MzIpOmcudHJpYW5nbGVTdHJpcHM9bmV3IFVpbnQzMkFycmF5LGcubnVtYmVyT2ZQb2ludFBpeGVscz4wP2cucG9pbnREYXRhPUYoQSxzLDUsZy5wb2x5RGF0YVR5cGUucG9pbnRQaXhlbENvbXBvbmVudFR5cGUpOmcucG9pbnREYXRhPU8oZy5wb2x5RGF0YVR5cGUucG9pbnRQaXhlbENvbXBvbmVudFR5cGUsbmV3IEFycmF5QnVmZmVyKDApKSxnLm51bWJlck9mQ2VsbFBpeGVscz4wP2cuY2VsbERhdGE9RihBLHMsNixnLnBvbHlEYXRhVHlwZS5jZWxsUGl4ZWxDb21wb25lbnRUeXBlKTpnLmNlbGxEYXRhPU8oZy5wb2x5RGF0YVR5cGUuY2VsbFBpeGVsQ29tcG9uZW50VHlwZSxuZXcgQXJyYXlCdWZmZXIoMCkpLEk9ZzticmVha31kZWZhdWx0OnRocm93IEVycm9yKCJVbnN1cHBvcnRlZCBvdXRwdXQgSW50ZXJmYWNlVHlwZSIpfWxldCBmPXt0eXBlOkMudHlwZSxkYXRhOkl9O2MucHVzaChmKX0pLHtyZXR1cm5WYWx1ZTpvLHN0ZG91dDppLHN0ZGVycjpsLG91dHB1dHM6Y319dmFyIEx0PUZuO3ZhciBrbj10eXBlb2YgZ2xvYmFsVGhpcy5TaGFyZWRBcnJheUJ1ZmZlcjwidSI7ZnVuY3Rpb24gVW4oQSxlKXtpZihBPT1udWxsKXJldHVybltdO2xldCByPVtdO2ZvcihsZXQgdD0wO3Q8QS5sZW5ndGg7dCsrKXtsZXQgbj1ObihBW3RdLGUpO24hPT1udWxsJiZyLnB1c2gobil9cmV0dXJuIHJ9ZnVuY3Rpb24gTm4oQSxlKXtpZihBPT1udWxsKXJldHVybiBudWxsO2xldCByPW51bGw7cmV0dXJuIEEuYnVmZmVyIT09dm9pZCAwP3I9QS5idWZmZXI6QS5ieXRlTGVuZ3RoIT09dm9pZCAwJiYocj1BKSxrbiYmciBpbnN0YW5jZW9mIFNoYXJlZEFycmF5QnVmZmVyP251bGw6ZT9yOnIuc2xpY2UoMCl9dmFyIEd0PVVuO2Z1bmN0aW9uIFRuKEEpe3JldHVybltBLmRhdGEsQS5kaXJlY3Rpb25dfXZhciB4dD1UbjtmdW5jdGlvbiBMbihBKXtyZXR1cm5bQS5wb2ludHMsQS5wb2ludERhdGEsQS5jZWxscyxBLmNlbGxEYXRhXX12YXIgT3Q9TG47ZnVuY3Rpb24gR24oQSl7cmV0dXJuW0EucG9pbnRzLEEudmVydGljZXMsQS5saW5lcyxBLnBvbHlnb25zLEEudHJpYW5nbGVTdHJpcHMsQS5wb2ludERhdGEsQS5jZWxsRGF0YV19dmFyIFB0PUduO3ZhciB4bjtmdW5jdGlvbiBPQSgpe3JldHVybiB4bn12YXIgT247ZnVuY3Rpb24gSnQoKXtyZXR1cm4gT259dmFyIFBuO2Z1bmN0aW9uIFBBKCl7cmV0dXJuIFBufXZhciBoZT1uZXcgTWFwO2Z1bmN0aW9uIEpuKCl7bGV0IEE9UEEoKTtyZXR1cm4gdHlwZW9mIEE+InUiJiYoQT1udWxsKSxBfWZ1bmN0aW9uIE10KCl7bGV0IEE9T0EoKTtyZXR1cm4gdHlwZW9mIEE+InUiJiYoQT1uZXcgVVJMKCIvcGlwZWxpbmVzIixkb2N1bWVudC5sb2NhdGlvbi5vcmlnaW4pLmhyZWYpLEF9ZnVuY3Rpb24gSkEoKXtsZXQgQT1KdCgpO3JldHVybiB0eXBlb2YgQT4idSImJihBPXt9KSxBfWFzeW5jIGZ1bmN0aW9uIE1uKEEsZSxyKXtsZXQgdD1BLG49QTtpZih0eXBlb2YgQSE9InN0cmluZyImJih0PW5ldyBVUkwoQS5ocmVmKSxuPXQuaHJlZiksaGUuaGFzKG4pKXJldHVybiBoZS5nZXQobik7e2xldCBvPWF3YWl0IFJ0KEEsZT8udG9TdHJpbmcoKT8/TXQoKSxyPz9KQSgpKTtyZXR1cm4gaGUuc2V0KG4sbyksb319YXN5bmMgZnVuY3Rpb24gSG4oQSxlLHIsdCxuKXtpZighYXdhaXQgRnQoKSl7bGV0IEI9IldlYkFzc2VtYmx5IFNJTUQgc3VwcG9ydCBpcyByZXF1aXJlZCAtLSBwbGVhc2UgdXBkYXRlIHlvdXIgYnJvd3Nlci4iO3Rocm93IGFsZXJ0KEIpLG5ldyBFcnJvcihCKX1sZXQgbz1uPy53ZWJXb3JrZXI/P251bGw7aWYobz09PSExKXtsZXQgQj1hd2FpdCBNbihBLnRvU3RyaW5nKCksbj8ucGlwZWxpbmVCYXNlVXJsLG4/LnBpcGVsaW5lUXVlcnlQYXJhbXM/P0pBKCkpO3JldHVybiBMdChCLGUscix0KX1sZXQgaT1vLGw9bj8ucGlwZWxpbmVXb3JrZXJVcmw/P0puKCksYz10eXBlb2YgbCE9InN0cmluZyImJnR5cGVvZiBsPy5ocmVmPCJ1Ij9sLmhyZWY6bCx7d29ya2VyUHJveHk6Qyx3b3JrZXI6c309YXdhaXQgYnQoaSxjLG4/LnBpcGVsaW5lUXVlcnlQYXJhbXM/P0pBKCkpO2k9cztsZXQgST1bXTt0IT1udWxsJiZ0Lmxlbmd0aD4wJiZ0LmZvckVhY2goZnVuY3Rpb24oQil7aWYoQi50eXBlPT09bS5CaW5hcnlTdHJlYW0pe2xldCBoPUIuZGF0YS5kYXRhO0kucHVzaChoKX1lbHNlIGlmKEIudHlwZT09PW0uQmluYXJ5RmlsZSl7bGV0IGg9Qi5kYXRhLmRhdGE7SS5wdXNoKGgpfWVsc2UgaWYoQi50eXBlPT09bS5JbWFnZSl7bGV0IGg9Qi5kYXRhO2guZGF0YSE9PW51bGwmJkkucHVzaCguLi54dChoKSl9ZWxzZSBpZihCLnR5cGU9PT1tLk1lc2gpe2xldCBoPUIuZGF0YTtJLnB1c2goLi4uT3QoaCkpfWVsc2UgaWYoQi50eXBlPT09bS5Qb2x5RGF0YSl7bGV0IGg9Qi5kYXRhO0kucHVzaCguLi5QdChoKSl9fSk7bGV0IGY9bj8ucGlwZWxpbmVCYXNlVXJsPz9NdCgpLGc9dHlwZW9mIGYhPSJzdHJpbmciJiZ0eXBlb2YgZj8uaHJlZjwidSI/Zi5ocmVmOmYsRT10IT1udWxsP1ZBKHQsR3QoSSxuPy5ub0NvcHkpKTpudWxsLHU9YXdhaXQgQy5ydW5QaXBlbGluZShBLnRvU3RyaW5nKCksZyxlLHIsRSxuPy5waXBlbGluZVF1ZXJ5UGFyYW1zPz9KQSgpKTtyZXR1cm57cmV0dXJuVmFsdWU6dS5yZXR1cm5WYWx1ZSxzdGRvdXQ6dS5zdGRvdXQsc3RkZXJyOnUuc3RkZXJyLG91dHB1dHM6dS5vdXRwdXRzLHdlYldvcmtlcjppfX12YXIgY0E9SG47dmFyIHFuPW51bGw7ZnVuY3Rpb24gSHQoKXtyZXR1cm4gcW59dmFyIHllLFluPWBodHRwczovL2Nkbi5qc2RlbGl2ci5uZXQvbnBtL0BpdGstd2FzbS9jb21wYXJlLWltYWdlc0Ake3FBfS9kaXN0L3BpcGVsaW5lc2A7ZnVuY3Rpb24geEkoQSl7eWU9QX1mdW5jdGlvbiBNQSgpe2lmKHR5cGVvZiB5ZTwidSIpcmV0dXJuIHllO2xldCBBPU9BKCk7cmV0dXJuIHR5cGVvZiBBPCJ1Ij9BOllufXZhciB3ZSxLbj1udWxsO2Z1bmN0aW9uIHF0KEEpe3dlPUF9ZnVuY3Rpb24gJCgpe2lmKHR5cGVvZiB3ZTwidSIpcmV0dXJuIHdlO2xldCBBPVBBKCk7cmV0dXJuIHR5cGVvZiBBPCJ1Ij9BOktufXZhciBBQT1udWxsO2FzeW5jIGZ1bmN0aW9uIFl0KCl7bGV0IEE9JCgpLGU9dHlwZW9mIEEhPSJzdHJpbmciJiZ0eXBlb2YgQT8uaHJlZjwidSI/QS5ocmVmOkE7QUE9YXdhaXQgbEEoZSl9ZnVuY3Rpb24gWUkoQSl7QUE9QX1hc3luYyBmdW5jdGlvbiBLdCgpe2lmKEFBIT09bnVsbClyZXR1cm4gQUEudGVybWluYXRlZCYmYXdhaXQgWXQoKSxBQTtsZXQgQT1IdCgpO3JldHVybiBBIT09bnVsbD9BOihhd2FpdCBZdCgpLEFBKX1hc3luYyBmdW5jdGlvbiB2bihBLGU9e2Jhc2VsaW5lSW1hZ2VzOltdfSl7bGV0IHI9W3t0eXBlOm0uSnNvbkNvbXBhdGlibGV9LHt0eXBlOm0uSW1hZ2V9LHt0eXBlOm0uSW1hZ2V9XSx0PVt7dHlwZTptLkltYWdlLGRhdGE6QX1dLG49W107aWYobi5wdXNoKCIwIiksbi5wdXNoKCIwIiksbi5wdXNoKCIxIiksbi5wdXNoKCIyIiksbi5wdXNoKCItLW1lbW9yeS1pbyIpLHR5cGVvZiBlLmJhc2VsaW5lSW1hZ2VzPCJ1Iil7aWYoZS5iYXNlbGluZUltYWdlcy5sZW5ndGg8MSl0aHJvdyBuZXcgRXJyb3IoJyJiYXNlbGluZS1pbWFnZXMiIG9wdGlvbiBtdXN0IGhhdmUgYSBsZW5ndGggPiAxJyk7bi5wdXNoKCItLWJhc2VsaW5lLWltYWdlcyIpLGF3YWl0IFByb21pc2UuYWxsKGUuYmFzZWxpbmVJbWFnZXMubWFwKGFzeW5jIHU9PntsZXQgQj10Lmxlbmd0aC50b1N0cmluZygpO3QucHVzaCh7dHlwZTptLkltYWdlLGRhdGE6dX0pLG4ucHVzaChCKX0pKX10eXBlb2YgZS5kaWZmZXJlbmNlVGhyZXNob2xkPCJ1IiYmbi5wdXNoKCItLWRpZmZlcmVuY2UtdGhyZXNob2xkIixlLmRpZmZlcmVuY2VUaHJlc2hvbGQudG9TdHJpbmcoKSksdHlwZW9mIGUucmFkaXVzVG9sZXJhbmNlPCJ1IiYmbi5wdXNoKCItLXJhZGl1cy10b2xlcmFuY2UiLGUucmFkaXVzVG9sZXJhbmNlLnRvU3RyaW5nKCkpLHR5cGVvZiBlLnNwYXRpYWxUb2xlcmFuY2U8InUiJiZuLnB1c2goIi0tc3BhdGlhbC10b2xlcmFuY2UiLGUuc3BhdGlhbFRvbGVyYW5jZS50b1N0cmluZygpKSx0eXBlb2YgZS5udW1iZXJPZlBpeGVsc1RvbGVyYW5jZTwidSImJm4ucHVzaCgiLS1udW1iZXItb2YtcGl4ZWxzLXRvbGVyYW5jZSIsZS5udW1iZXJPZlBpeGVsc1RvbGVyYW5jZS50b1N0cmluZygpKSx0eXBlb2YgZS5pZ25vcmVCb3VuZGFyeVBpeGVsczwidSImJmUuaWdub3JlQm91bmRhcnlQaXhlbHMmJm4ucHVzaCgiLS1pZ25vcmUtYm91bmRhcnktcGl4ZWxzIik7bGV0IEM9ImNvbXBhcmUtZG91YmxlLWltYWdlcyIse3dlYldvcmtlcjpzLHJldHVyblZhbHVlOkksc3RkZXJyOmYsb3V0cHV0czpnfT1hd2FpdCBjQShDLG4scix0LHtwaXBlbGluZUJhc2VVcmw6TUEoKSxwaXBlbGluZVdvcmtlclVybDokKCksd2ViV29ya2VyOmU/LndlYldvcmtlcj8/bnVsbH0pO2lmKEkhPT0wKXRocm93IG5ldyBFcnJvcihmKTtyZXR1cm57d2ViV29ya2VyOnMsbWV0cmljczpnWzBdLmRhdGEsZGlmZmVyZW5jZUltYWdlOmdbMV0uZGF0YSxkaWZmZXJlbmNlVWNoYXIyZEltYWdlOmdbMl0uZGF0YX19dmFyIERlPXZuO2FzeW5jIGZ1bmN0aW9uIFduKEEsZSl7bGV0IHI9ZTtpZihyLmltYWdlVHlwZS5jb21wb25lbnRUeXBlIT09Ui5GbG9hdDY0KXtsZXQgdDtlLmltYWdlVHlwZS5waXhlbFR5cGUhPT1rLlNjYWxhciYmZS5pbWFnZVR5cGUucGl4ZWxUeXBlIT09ay5WYXJpYWJsZUxlbmd0aFZlY3RvciYmKHQ9ay5WYXJpYWJsZUxlbmd0aFZlY3Rvcikscj1FQShlLHtjb21wb25lbnRUeXBlOlIuRmxvYXQ2NCxwaXhlbFR5cGU6dH0pfWVsc2UgaWYoZS5pbWFnZVR5cGUucGl4ZWxUeXBlIT09ay5TY2FsYXImJmUuaW1hZ2VUeXBlLnBpeGVsVHlwZSE9PWsuVmFyaWFibGVMZW5ndGhWZWN0b3Ipe2xldCB0PWsuVmFyaWFibGVMZW5ndGhWZWN0b3I7cj1FQShlLHtwaXhlbFR5cGU6dH0pfXJldHVybiByLmltYWdlVHlwZS5waXhlbFR5cGU9PT1rLlZhcmlhYmxlTGVuZ3RoVmVjdG9yJiYocj0oYXdhaXQgQShyKSkubWFnbml0dWRlSW1hZ2UpLHJ9dmFyIFNlPVduO2FzeW5jIGZ1bmN0aW9uIGpuKEEsZT17fSl7bGV0IHI9W3t0eXBlOm0uSW1hZ2V9XSx0PVt7dHlwZTptLkltYWdlLGRhdGE6QX1dLG49W107bi5wdXNoKCIwIiksbi5wdXNoKCIwIiksbi5wdXNoKCItLW1lbW9yeS1pbyIpO2xldCBsPSJ2ZWN0b3ItbWFnbml0dWRlIixjPWU/LndlYldvcmtlcjtjPT09dm9pZCAwJiYoYz1hd2FpdCBLdCgpKTtsZXR7d2ViV29ya2VyOkMscmV0dXJuVmFsdWU6cyxzdGRlcnI6SSxvdXRwdXRzOmZ9PWF3YWl0IGNBKGwsbixyLHQse3BpcGVsaW5lQmFzZVVybDpNQSgpLHBpcGVsaW5lV29ya2VyVXJsOiQoKSx3ZWJXb3JrZXI6Yyxub0NvcHk6ZT8ubm9Db3B5fSk7aWYocyE9PTAmJkkhPT0iIil0aHJvdyBuZXcgRXJyb3IoSSk7cmV0dXJue3dlYldvcmtlcjpDLG1hZ25pdHVkZUltYWdlOmZbMF0/LmRhdGF9fXZhciBiZT1qbjthc3luYyBmdW5jdGlvbiBfbihBLGU9e2Jhc2VsaW5lSW1hZ2VzOltdfSl7YXN5bmMgZnVuY3Rpb24gcihpKXtsZXR7d2ViV29ya2VyOmwsbWFnbml0dWRlSW1hZ2U6Y309YXdhaXQgYmUoaSk7cmV0dXJuIGw/LnRlcm1pbmF0ZSgpLHttYWduaXR1ZGVJbWFnZTpjfX1sZXQgdD1hd2FpdCBTZShyLEEpLG49YXdhaXQgUHJvbWlzZS5hbGwoZS5iYXNlbGluZUltYWdlcy5tYXAoYXN5bmMgaT0+YXdhaXQgU2UocixpKSkpLG89ey4uLmV9O3JldHVybiBvLmJhc2VsaW5lSW1hZ2VzPW4sRGUodCxvKX12YXIgVm49X247dmFyIHZ0PSdkYXRhOnRleHQvamF2YXNjcmlwdDtjaGFyc2V0PXV0Zi04LHZhciBtZT1PYmplY3QuZGVmaW5lUHJvcGVydHk7dmFyIHdlPShBLHQpPT57Zm9yKHZhciBlIGluIHQpbWUoQSxlLHtnZXQ6dFtlXSxlbnVtZXJhYmxlOiEwfSl9O3ZhciBmdD1TeW1ib2woIkNvbWxpbmsucHJveHkiKSxwZT1TeW1ib2woIkNvbWxpbmsuZW5kcG9pbnQiKSxTZT1TeW1ib2woIkNvbWxpbmsucmVsZWFzZVByb3h5IiksWUE9U3ltYm9sKCJDb21saW5rLmZpbmFsaXplciIpLGFBPVN5bWJvbCgiQ29tbGluay50aHJvd24iKSxsdD1BPT50eXBlb2YgQT09Im9iamVjdCImJkEhPT1udWxsfHx0eXBlb2YgQT09ImZ1bmN0aW9uIixGZT17Y2FuSGFuZGxlOkE9Pmx0KEEpJiZBW2Z0XSxzZXJpYWxpemUoQSl7bGV0e3BvcnQxOnQscG9ydDI6ZX09bmV3IE1lc3NhZ2VDaGFubmVsO3JldHVybiBmQShBLHQpLFtlLFtlXV19LGRlc2VyaWFsaXplKEEpe3JldHVybiBBLnN0YXJ0KCksR2UoQSl9fSxSZT17Y2FuSGFuZGxlOkE9Pmx0KEEpJiZhQSBpbiBBLHNlcmlhbGl6ZSh7dmFsdWU6QX0pe2xldCB0O3JldHVybiBBIGluc3RhbmNlb2YgRXJyb3I/dD17aXNFcnJvcjohMCx2YWx1ZTp7bWVzc2FnZTpBLm1lc3NhZ2UsbmFtZTpBLm5hbWUsc3RhY2s6QS5zdGFja319OnQ9e2lzRXJyb3I6ITEsdmFsdWU6QX0sW3QsW11dfSxkZXNlcmlhbGl6ZShBKXt0aHJvdyBBLmlzRXJyb3I/T2JqZWN0LmFzc2lnbihuZXcgRXJyb3IoQS52YWx1ZS5tZXNzYWdlKSxBLnZhbHVlKTpBLnZhbHVlfX0sdXQ9bmV3IE1hcChbWyJwcm94eSIsRmVdLFsidGhyb3ciLFJlXV0pO2Z1bmN0aW9uIE5lKEEsdCl7Zm9yKGxldCBlIG9mIEEpaWYodD09PWV8fGU9PT0iKiJ8fGUgaW5zdGFuY2VvZiBSZWdFeHAmJmUudGVzdCh0KSlyZXR1cm4hMDtyZXR1cm4hMX1mdW5jdGlvbiBmQShBLHQ9Z2xvYmFsVGhpcyxlPVsiKiJdKXt0LmFkZEV2ZW50TGlzdGVuZXIoIm1lc3NhZ2UiLGZ1bmN0aW9uIEkocil7aWYoIXJ8fCFyLmRhdGEpcmV0dXJuO2lmKCFOZShlLHIub3JpZ2luKSl7Y29uc29sZS53YXJuKGBJbnZhbGlkIG9yaWdpbiBcJyR7ci5vcmlnaW59XCcgZm9yIGNvbWxpbmsgcHJveHlgKTtyZXR1cm59bGV0e2lkOm8sdHlwZTpnLHBhdGg6Q309T2JqZWN0LmFzc2lnbih7cGF0aDpbXX0sci5kYXRhKSxRPShyLmRhdGEuYXJndW1lbnRMaXN0fHxbXSkubWFwKE8pLGE7dHJ5e2xldCBuPUMuc2xpY2UoMCwtMSkucmVkdWNlKChmLEIpPT5mW0JdLEEpLHM9Qy5yZWR1Y2UoKGYsQik9PmZbQl0sQSk7c3dpdGNoKGcpe2Nhc2UiR0VUIjphPXM7YnJlYWs7Y2FzZSJTRVQiOm5bQy5zbGljZSgtMSlbMF1dPU8oci5kYXRhLnZhbHVlKSxhPSEwO2JyZWFrO2Nhc2UiQVBQTFkiOmE9cy5hcHBseShuLFEpO2JyZWFrO2Nhc2UiQ09OU1RSVUNUIjp7bGV0IGY9bmV3IHMoLi4uUSk7YT1iZShmKX1icmVhaztjYXNlIkVORFBPSU5UIjp7bGV0e3BvcnQxOmYscG9ydDI6Qn09bmV3IE1lc3NhZ2VDaGFubmVsO2ZBKEEsQiksYT1NQShmLFtmXSl9YnJlYWs7Y2FzZSJSRUxFQVNFIjphPXZvaWQgMDticmVhaztkZWZhdWx0OnJldHVybn19Y2F0Y2gobil7YT17dmFsdWU6bixbYUFdOjB9fVByb21pc2UucmVzb2x2ZShhKS5jYXRjaChuPT4oe3ZhbHVlOm4sW2FBXTowfSkpLnRoZW4obj0+e2xldFtzLGZdPWNBKG4pO3QucG9zdE1lc3NhZ2UoT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LHMpLHtpZDpvfSksZiksZz09PSJSRUxFQVNFIiYmKHQucmVtb3ZlRXZlbnRMaXN0ZW5lcigibWVzc2FnZSIsSSksRHQodCksWUEgaW4gQSYmdHlwZW9mIEFbWUFdPT0iZnVuY3Rpb24iJiZBW1lBXSgpKX0pLmNhdGNoKG49PntsZXRbcyxmXT1jQSh7dmFsdWU6bmV3IFR5cGVFcnJvcigiVW5zZXJpYWxpemFibGUgcmV0dXJuIHZhbHVlIiksW2FBXTowfSk7dC5wb3N0TWVzc2FnZShPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30scykse2lkOm99KSxmKX0pfSksdC5zdGFydCYmdC5zdGFydCgpfWZ1bmN0aW9uIFVlKEEpe3JldHVybiBBLmNvbnN0cnVjdG9yLm5hbWU9PT0iTWVzc2FnZVBvcnQifWZ1bmN0aW9uIER0KEEpe1VlKEEpJiZBLmNsb3NlKCl9ZnVuY3Rpb24gR2UoQSx0KXtyZXR1cm4gcUEoQSxbXSx0KX1mdW5jdGlvbiBCQShBKXtpZihBKXRocm93IG5ldyBFcnJvcigiUHJveHkgaGFzIGJlZW4gcmVsZWFzZWQgYW5kIGlzIG5vdCB1c2VhYmxlIil9ZnVuY3Rpb24gaHQoQSl7cmV0dXJuIFAoQSx7dHlwZToiUkVMRUFTRSJ9KS50aGVuKCgpPT57RHQoQSl9KX12YXIgUUE9bmV3IFdlYWtNYXAsRUE9IkZpbmFsaXphdGlvblJlZ2lzdHJ5ImluIGdsb2JhbFRoaXMmJm5ldyBGaW5hbGl6YXRpb25SZWdpc3RyeShBPT57bGV0IHQ9KFFBLmdldChBKXx8MCktMTtRQS5zZXQoQSx0KSx0PT09MCYmaHQoQSl9KTtmdW5jdGlvbiBrZShBLHQpe2xldCBlPShRQS5nZXQodCl8fDApKzE7UUEuc2V0KHQsZSksRUEmJkVBLnJlZ2lzdGVyKEEsdCxBKX1mdW5jdGlvbiBMZShBKXtFQSYmRUEudW5yZWdpc3RlcihBKX1mdW5jdGlvbiBxQShBLHQ9W10sZT1mdW5jdGlvbigpe30pe2xldCBJPSExLHI9bmV3IFByb3h5KGUse2dldChvLGcpe2lmKEJBKEkpLGc9PT1TZSlyZXR1cm4oKT0+e0xlKHIpLGh0KEEpLEk9ITB9O2lmKGc9PT0idGhlbiIpe2lmKHQubGVuZ3RoPT09MClyZXR1cm57dGhlbjooKT0+cn07bGV0IEM9UChBLHt0eXBlOiJHRVQiLHBhdGg6dC5tYXAoUT0+US50b1N0cmluZygpKX0pLnRoZW4oTyk7cmV0dXJuIEMudGhlbi5iaW5kKEMpfXJldHVybiBxQShBLFsuLi50LGddKX0sc2V0KG8sZyxDKXtCQShJKTtsZXRbUSxhXT1jQShDKTtyZXR1cm4gUChBLHt0eXBlOiJTRVQiLHBhdGg6Wy4uLnQsZ10ubWFwKG49Pm4udG9TdHJpbmcoKSksdmFsdWU6UX0sYSkudGhlbihPKX0sYXBwbHkobyxnLEMpe0JBKEkpO2xldCBRPXRbdC5sZW5ndGgtMV07aWYoUT09PXBlKXJldHVybiBQKEEse3R5cGU6IkVORFBPSU5UIn0pLnRoZW4oTyk7aWYoUT09PSJiaW5kIilyZXR1cm4gcUEoQSx0LnNsaWNlKDAsLTEpKTtsZXRbYSxuXT1jdChDKTtyZXR1cm4gUChBLHt0eXBlOiJBUFBMWSIscGF0aDp0Lm1hcChzPT5zLnRvU3RyaW5nKCkpLGFyZ3VtZW50TGlzdDphfSxuKS50aGVuKE8pfSxjb25zdHJ1Y3QobyxnKXtCQShJKTtsZXRbQyxRXT1jdChnKTtyZXR1cm4gUChBLHt0eXBlOiJDT05TVFJVQ1QiLHBhdGg6dC5tYXAoYT0+YS50b1N0cmluZygpKSxhcmd1bWVudExpc3Q6Q30sUSkudGhlbihPKX19KTtyZXR1cm4ga2UocixBKSxyfWZ1bmN0aW9uIEplKEEpe3JldHVybiBBcnJheS5wcm90b3R5cGUuY29uY2F0LmFwcGx5KFtdLEEpfWZ1bmN0aW9uIGN0KEEpe2xldCB0PUEubWFwKGNBKTtyZXR1cm5bdC5tYXAoZT0+ZVswXSksSmUodC5tYXAoZT0+ZVsxXSkpXX12YXIgZHQ9bmV3IFdlYWtNYXA7ZnVuY3Rpb24gTUEoQSx0KXtyZXR1cm4gZHQuc2V0KEEsdCksQX1mdW5jdGlvbiBiZShBKXtyZXR1cm4gT2JqZWN0LmFzc2lnbihBLHtbZnRdOiEwfSl9ZnVuY3Rpb24gY0EoQSl7Zm9yKGxldFt0LGVdb2YgdXQpaWYoZS5jYW5IYW5kbGUoQSkpe2xldFtJLHJdPWUuc2VyaWFsaXplKEEpO3JldHVyblt7dHlwZToiSEFORExFUiIsbmFtZTp0LHZhbHVlOkl9LHJdfXJldHVyblt7dHlwZToiUkFXIix2YWx1ZTpBfSxkdC5nZXQoQSl8fFtdXX1mdW5jdGlvbiBPKEEpe3N3aXRjaChBLnR5cGUpe2Nhc2UiSEFORExFUiI6cmV0dXJuIHV0LmdldChBLm5hbWUpLmRlc2VyaWFsaXplKEEudmFsdWUpO2Nhc2UiUkFXIjpyZXR1cm4gQS52YWx1ZX19ZnVuY3Rpb24gUChBLHQsZSl7cmV0dXJuIG5ldyBQcm9taXNlKEk9PntsZXQgcj1IZSgpO0EuYWRkRXZlbnRMaXN0ZW5lcigibWVzc2FnZSIsZnVuY3Rpb24gbyhnKXshZy5kYXRhfHwhZy5kYXRhLmlkfHxnLmRhdGEuaWQhPT1yfHwoQS5yZW1vdmVFdmVudExpc3RlbmVyKCJtZXNzYWdlIixvKSxJKGcuZGF0YSkpfSksQS5zdGFydCYmQS5zdGFydCgpLEEucG9zdE1lc3NhZ2UoT2JqZWN0LmFzc2lnbih7aWQ6cn0sdCksZSl9KX1mdW5jdGlvbiBIZSgpe3JldHVybiBuZXcgQXJyYXkoNCkuZmlsbCgwKS5tYXAoKCk9Pk1hdGguZmxvb3IoTWF0aC5yYW5kb20oKSpOdW1iZXIuTUFYX1NBRkVfSU5URUdFUikudG9TdHJpbmcoMTYpKS5qb2luKCItIil9ZnVuY3Rpb24gdihBLHQpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiBBLmFwcGx5KHQsYXJndW1lbnRzKX19dmFye3RvU3RyaW5nOlllfT1PYmplY3QucHJvdG90eXBlLHtnZXRQcm90b3R5cGVPZjpPQX09T2JqZWN0LHVBPShBPT50PT57bGV0IGU9WWUuY2FsbCh0KTtyZXR1cm4gQVtlXXx8KEFbZV09ZS5zbGljZSg4LC0xKS50b0xvd2VyQ2FzZSgpKX0pKE9iamVjdC5jcmVhdGUobnVsbCkpLEc9QT0+KEE9QS50b0xvd2VyQ2FzZSgpLHQ9PnVBKHQpPT09QSksREE9QT0+dD0+dHlwZW9mIHQ9PT1BLHtpc0FycmF5Omp9PUFycmF5LCQ9REEoInVuZGVmaW5lZCIpO2Z1bmN0aW9uIHFlKEEpe3JldHVybiBBIT09bnVsbCYmISQoQSkmJkEuY29uc3RydWN0b3IhPT1udWxsJiYhJChBLmNvbnN0cnVjdG9yKSYmTihBLmNvbnN0cnVjdG9yLmlzQnVmZmVyKSYmQS5jb25zdHJ1Y3Rvci5pc0J1ZmZlcihBKX12YXIgcHQ9RygiQXJyYXlCdWZmZXIiKTtmdW5jdGlvbiBNZShBKXtsZXQgdDtyZXR1cm4gdHlwZW9mIEFycmF5QnVmZmVyPCJ1IiYmQXJyYXlCdWZmZXIuaXNWaWV3P3Q9QXJyYXlCdWZmZXIuaXNWaWV3KEEpOnQ9QSYmQS5idWZmZXImJnB0KEEuYnVmZmVyKSx0fXZhciBUZT1EQSgic3RyaW5nIiksTj1EQSgiZnVuY3Rpb24iKSxTdD1EQSgibnVtYmVyIiksaEE9QT0+QSE9PW51bGwmJnR5cGVvZiBBPT0ib2JqZWN0IixLZT1BPT5BPT09ITB8fEE9PT0hMSxsQT1BPT57aWYodUEoQSkhPT0ib2JqZWN0IilyZXR1cm4hMTtsZXQgdD1PQShBKTtyZXR1cm4odD09PW51bGx8fHQ9PT1PYmplY3QucHJvdG90eXBlfHxPYmplY3QuZ2V0UHJvdG90eXBlT2YodCk9PT1udWxsKSYmIShTeW1ib2wudG9TdHJpbmdUYWcgaW4gQSkmJiEoU3ltYm9sLml0ZXJhdG9yIGluIEEpfSxPZT1HKCJEYXRlIikseGU9RygiRmlsZSIpLFBlPUcoIkJsb2IiKSxqZT1HKCJGaWxlTGlzdCIpLFdlPUE9PmhBKEEpJiZOKEEucGlwZSksWmU9QT0+e2xldCB0O3JldHVybiBBJiYodHlwZW9mIEZvcm1EYXRhPT0iZnVuY3Rpb24iJiZBIGluc3RhbmNlb2YgRm9ybURhdGF8fE4oQS5hcHBlbmQpJiYoKHQ9dUEoQSkpPT09ImZvcm1kYXRhInx8dD09PSJvYmplY3QiJiZOKEEudG9TdHJpbmcpJiZBLnRvU3RyaW5nKCk9PT0iW29iamVjdCBGb3JtRGF0YV0iKSl9LFZlPUcoIlVSTFNlYXJjaFBhcmFtcyIpLFtfZSxYZSx6ZSx2ZV09WyJSZWFkYWJsZVN0cmVhbSIsIlJlcXVlc3QiLCJSZXNwb25zZSIsIkhlYWRlcnMiXS5tYXAoRyksJGU9QT0+QS50cmltP0EudHJpbSgpOkEucmVwbGFjZSgvXltcXHNcXHVGRUZGXFx4QTBdK3xbXFxzXFx1RkVGRlxceEEwXSskL2csIiIpO2Z1bmN0aW9uIEFBKEEsdCx7YWxsT3duS2V5czplPSExfT17fSl7aWYoQT09PW51bGx8fHR5cGVvZiBBPiJ1IilyZXR1cm47bGV0IEkscjtpZih0eXBlb2YgQSE9Im9iamVjdCImJihBPVtBXSksaihBKSlmb3IoST0wLHI9QS5sZW5ndGg7STxyO0krKyl0LmNhbGwobnVsbCxBW0ldLEksQSk7ZWxzZXtsZXQgbz1lP09iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKEEpOk9iamVjdC5rZXlzKEEpLGc9by5sZW5ndGgsQztmb3IoST0wO0k8ZztJKyspQz1vW0ldLHQuY2FsbChudWxsLEFbQ10sQyxBKX19ZnVuY3Rpb24gRnQoQSx0KXt0PXQudG9Mb3dlckNhc2UoKTtsZXQgZT1PYmplY3Qua2V5cyhBKSxJPWUubGVuZ3RoLHI7Zm9yKDtJLS0gPjA7KWlmKHI9ZVtJXSx0PT09ci50b0xvd2VyQ2FzZSgpKXJldHVybiByO3JldHVybiBudWxsfXZhciB4PXR5cGVvZiBnbG9iYWxUaGlzPCJ1Ij9nbG9iYWxUaGlzOnR5cGVvZiBzZWxmPCJ1Ij9zZWxmOnR5cGVvZiB3aW5kb3c8InUiP3dpbmRvdzpnbG9iYWwsUnQ9QT0+ISQoQSkmJkEhPT14O2Z1bmN0aW9uIEtBKCl7bGV0e2Nhc2VsZXNzOkF9PVJ0KHRoaXMpJiZ0aGlzfHx7fSx0PXt9LGU9KEkscik9PntsZXQgbz1BJiZGdCh0LHIpfHxyO2xBKHRbb10pJiZsQShJKT90W29dPUtBKHRbb10sSSk6bEEoSSk/dFtvXT1LQSh7fSxJKTpqKEkpP3Rbb109SS5zbGljZSgpOnRbb109SX07Zm9yKGxldCBJPTAscj1hcmd1bWVudHMubGVuZ3RoO0k8cjtJKyspYXJndW1lbnRzW0ldJiZBQShhcmd1bWVudHNbSV0sZSk7cmV0dXJuIHR9dmFyIEFJPShBLHQsZSx7YWxsT3duS2V5czpJfT17fSk9PihBQSh0LChyLG8pPT57ZSYmTihyKT9BW29dPXYocixlKTpBW29dPXJ9LHthbGxPd25LZXlzOkl9KSxBKSx0ST1BPT4oQS5jaGFyQ29kZUF0KDApPT09NjUyNzkmJihBPUEuc2xpY2UoMSkpLEEpLGVJPShBLHQsZSxJKT0+e0EucHJvdG90eXBlPU9iamVjdC5jcmVhdGUodC5wcm90b3R5cGUsSSksQS5wcm90b3R5cGUuY29uc3RydWN0b3I9QSxPYmplY3QuZGVmaW5lUHJvcGVydHkoQSwic3VwZXIiLHt2YWx1ZTp0LnByb3RvdHlwZX0pLGUmJk9iamVjdC5hc3NpZ24oQS5wcm90b3R5cGUsZSl9LElJPShBLHQsZSxJKT0+e2xldCByLG8sZyxDPXt9O2lmKHQ9dHx8e30sQT09bnVsbClyZXR1cm4gdDtkb3tmb3Iocj1PYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhBKSxvPXIubGVuZ3RoO28tLSA+MDspZz1yW29dLCghSXx8SShnLEEsdCkpJiYhQ1tnXSYmKHRbZ109QVtnXSxDW2ddPSEwKTtBPWUhPT0hMSYmT0EoQSl9d2hpbGUoQSYmKCFlfHxlKEEsdCkpJiZBIT09T2JqZWN0LnByb3RvdHlwZSk7cmV0dXJuIHR9LHJJPShBLHQsZSk9PntBPVN0cmluZyhBKSwoZT09PXZvaWQgMHx8ZT5BLmxlbmd0aCkmJihlPUEubGVuZ3RoKSxlLT10Lmxlbmd0aDtsZXQgST1BLmluZGV4T2YodCxlKTtyZXR1cm4gSSE9PS0xJiZJPT09ZX0sb0k9QT0+e2lmKCFBKXJldHVybiBudWxsO2lmKGooQSkpcmV0dXJuIEE7bGV0IHQ9QS5sZW5ndGg7aWYoIVN0KHQpKXJldHVybiBudWxsO2xldCBlPW5ldyBBcnJheSh0KTtmb3IoO3QtLSA+MDspZVt0XT1BW3RdO3JldHVybiBlfSxnST0oQT0+dD0+QSYmdCBpbnN0YW5jZW9mIEEpKHR5cGVvZiBVaW50OEFycmF5PCJ1IiYmT0EoVWludDhBcnJheSkpLGlJPShBLHQpPT57bGV0IEk9KEEmJkFbU3ltYm9sLml0ZXJhdG9yXSkuY2FsbChBKSxyO2Zvcig7KHI9SS5uZXh0KCkpJiYhci5kb25lOyl7bGV0IG89ci52YWx1ZTt0LmNhbGwoQSxvWzBdLG9bMV0pfX0sbkk9KEEsdCk9PntsZXQgZSxJPVtdO2Zvcig7KGU9QS5leGVjKHQpKSE9PW51bGw7KUkucHVzaChlKTtyZXR1cm4gSX0sc0k9RygiSFRNTEZvcm1FbGVtZW50IiksQ0k9QT0+QS50b0xvd2VyQ2FzZSgpLnJlcGxhY2UoL1stX1xcc10oW2EtelxcZF0pKFxcdyopL2csZnVuY3Rpb24oZSxJLHIpe3JldHVybiBJLnRvVXBwZXJDYXNlKCkrcn0pLG10PSgoe2hhc093blByb3BlcnR5OkF9KT0+KHQsZSk9PkEuY2FsbCh0LGUpKShPYmplY3QucHJvdG90eXBlKSxCST1HKCJSZWdFeHAiKSxOdD0oQSx0KT0+e2xldCBlPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKEEpLEk9e307QUEoZSwocixvKT0+e2xldCBnOyhnPXQocixvLEEpKSE9PSExJiYoSVtvXT1nfHxyKX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKEEsSSl9LGFJPUE9PntOdChBLCh0LGUpPT57aWYoTihBKSYmWyJhcmd1bWVudHMiLCJjYWxsZXIiLCJjYWxsZWUiXS5pbmRleE9mKGUpIT09LTEpcmV0dXJuITE7bGV0IEk9QVtlXTtpZihOKEkpKXtpZih0LmVudW1lcmFibGU9ITEsIndyaXRhYmxlImluIHQpe3Qud3JpdGFibGU9ITE7cmV0dXJufXQuc2V0fHwodC5zZXQ9KCk9Pnt0aHJvdyBFcnJvcigiQ2FuIG5vdCByZXdyaXRlIHJlYWQtb25seSBtZXRob2QgXCciK2UrIlwnIil9KX19KX0sUUk9KEEsdCk9PntsZXQgZT17fSxJPXI9PntyLmZvckVhY2gobz0+e2Vbb109ITB9KX07cmV0dXJuIGooQSk/SShBKTpJKFN0cmluZyhBKS5zcGxpdCh0KSksZX0sRUk9KCk9Pnt9LGNJPShBLHQpPT5BIT1udWxsJiZOdW1iZXIuaXNGaW5pdGUoQT0rQSk/QTp0LFRBPSJhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5eiIsd3Q9IjAxMjM0NTY3ODkiLFV0PXtESUdJVDp3dCxBTFBIQTpUQSxBTFBIQV9ESUdJVDpUQStUQS50b1VwcGVyQ2FzZSgpK3d0fSxmST0oQT0xNix0PVV0LkFMUEhBX0RJR0lUKT0+e2xldCBlPSIiLHtsZW5ndGg6SX09dDtmb3IoO0EtLTspZSs9dFtNYXRoLnJhbmRvbSgpKkl8MF07cmV0dXJuIGV9O2Z1bmN0aW9uIGxJKEEpe3JldHVybiEhKEEmJk4oQS5hcHBlbmQpJiZBW1N5bWJvbC50b1N0cmluZ1RhZ109PT0iRm9ybURhdGEiJiZBW1N5bWJvbC5pdGVyYXRvcl0pfXZhciB1ST1BPT57bGV0IHQ9bmV3IEFycmF5KDEwKSxlPShJLHIpPT57aWYoaEEoSSkpe2lmKHQuaW5kZXhPZihJKT49MClyZXR1cm47aWYoISgidG9KU09OImluIEkpKXt0W3JdPUk7bGV0IG89aihJKT9bXTp7fTtyZXR1cm4gQUEoSSwoZyxDKT0+e2xldCBRPWUoZyxyKzEpOyEkKFEpJiYob1tDXT1RKX0pLHRbcl09dm9pZCAwLG99fXJldHVybiBJfTtyZXR1cm4gZShBLDApfSxEST1HKCJBc3luY0Z1bmN0aW9uIiksaEk9QT0+QSYmKGhBKEEpfHxOKEEpKSYmTihBLnRoZW4pJiZOKEEuY2F0Y2gpLEd0PSgoQSx0KT0+QT9zZXRJbW1lZGlhdGU6dD8oKGUsSSk9Pih4LmFkZEV2ZW50TGlzdGVuZXIoIm1lc3NhZ2UiLCh7c291cmNlOnIsZGF0YTpvfSk9PntyPT09eCYmbz09PWUmJkkubGVuZ3RoJiZJLnNoaWZ0KCkoKX0sITEpLHI9PntJLnB1c2gocikseC5wb3N0TWVzc2FnZShlLCIqIil9KSkoYGF4aW9zQCR7TWF0aC5yYW5kb20oKX1gLFtdKTplPT5zZXRUaW1lb3V0KGUpKSh0eXBlb2Ygc2V0SW1tZWRpYXRlPT0iZnVuY3Rpb24iLE4oeC5wb3N0TWVzc2FnZSkpLGRJPXR5cGVvZiBxdWV1ZU1pY3JvdGFzazwidSI/cXVldWVNaWNyb3Rhc2suYmluZCh4KTp0eXBlb2YgcHJvY2VzczwidSImJnByb2Nlc3MubmV4dFRpY2t8fEd0LGk9e2lzQXJyYXk6aixpc0FycmF5QnVmZmVyOnB0LGlzQnVmZmVyOnFlLGlzRm9ybURhdGE6WmUsaXNBcnJheUJ1ZmZlclZpZXc6TWUsaXNTdHJpbmc6VGUsaXNOdW1iZXI6U3QsaXNCb29sZWFuOktlLGlzT2JqZWN0OmhBLGlzUGxhaW5PYmplY3Q6bEEsaXNSZWFkYWJsZVN0cmVhbTpfZSxpc1JlcXVlc3Q6WGUsaXNSZXNwb25zZTp6ZSxpc0hlYWRlcnM6dmUsaXNVbmRlZmluZWQ6JCxpc0RhdGU6T2UsaXNGaWxlOnhlLGlzQmxvYjpQZSxpc1JlZ0V4cDpCSSxpc0Z1bmN0aW9uOk4saXNTdHJlYW06V2UsaXNVUkxTZWFyY2hQYXJhbXM6VmUsaXNUeXBlZEFycmF5OmdJLGlzRmlsZUxpc3Q6amUsZm9yRWFjaDpBQSxtZXJnZTpLQSxleHRlbmQ6QUksdHJpbTokZSxzdHJpcEJPTTp0SSxpbmhlcml0czplSSx0b0ZsYXRPYmplY3Q6SUksa2luZE9mOnVBLGtpbmRPZlRlc3Q6RyxlbmRzV2l0aDpySSx0b0FycmF5Om9JLGZvckVhY2hFbnRyeTppSSxtYXRjaEFsbDpuSSxpc0hUTUxGb3JtOnNJLGhhc093blByb3BlcnR5Om10LGhhc093blByb3A6bXQscmVkdWNlRGVzY3JpcHRvcnM6TnQsZnJlZXplTWV0aG9kczphSSx0b09iamVjdFNldDpRSSx0b0NhbWVsQ2FzZTpDSSxub29wOkVJLHRvRmluaXRlTnVtYmVyOmNJLGZpbmRLZXk6RnQsZ2xvYmFsOngsaXNDb250ZXh0RGVmaW5lZDpSdCxBTFBIQUJFVDpVdCxnZW5lcmF0ZVN0cmluZzpmSSxpc1NwZWNDb21wbGlhbnRGb3JtOmxJLHRvSlNPTk9iamVjdDp1SSxpc0FzeW5jRm46REksaXNUaGVuYWJsZTpoSSxzZXRJbW1lZGlhdGU6R3QsYXNhcDpkSX07ZnVuY3Rpb24gVyhBLHQsZSxJLHIpe0Vycm9yLmNhbGwodGhpcyksRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2U/RXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UodGhpcyx0aGlzLmNvbnN0cnVjdG9yKTp0aGlzLnN0YWNrPW5ldyBFcnJvcigpLnN0YWNrLHRoaXMubWVzc2FnZT1BLHRoaXMubmFtZT0iQXhpb3NFcnJvciIsdCYmKHRoaXMuY29kZT10KSxlJiYodGhpcy5jb25maWc9ZSksSSYmKHRoaXMucmVxdWVzdD1JKSxyJiYodGhpcy5yZXNwb25zZT1yKX1pLmluaGVyaXRzKFcsRXJyb3Ise3RvSlNPTjpmdW5jdGlvbigpe3JldHVybnttZXNzYWdlOnRoaXMubWVzc2FnZSxuYW1lOnRoaXMubmFtZSxkZXNjcmlwdGlvbjp0aGlzLmRlc2NyaXB0aW9uLG51bWJlcjp0aGlzLm51bWJlcixmaWxlTmFtZTp0aGlzLmZpbGVOYW1lLGxpbmVOdW1iZXI6dGhpcy5saW5lTnVtYmVyLGNvbHVtbk51bWJlcjp0aGlzLmNvbHVtbk51bWJlcixzdGFjazp0aGlzLnN0YWNrLGNvbmZpZzppLnRvSlNPTk9iamVjdCh0aGlzLmNvbmZpZyksY29kZTp0aGlzLmNvZGUsc3RhdHVzOnRoaXMucmVzcG9uc2UmJnRoaXMucmVzcG9uc2Uuc3RhdHVzP3RoaXMucmVzcG9uc2Uuc3RhdHVzOm51bGx9fX0pO3ZhciBrdD1XLnByb3RvdHlwZSxMdD17fTtbIkVSUl9CQURfT1BUSU9OX1ZBTFVFIiwiRVJSX0JBRF9PUFRJT04iLCJFQ09OTkFCT1JURUQiLCJFVElNRURPVVQiLCJFUlJfTkVUV09SSyIsIkVSUl9GUl9UT09fTUFOWV9SRURJUkVDVFMiLCJFUlJfREVQUkVDQVRFRCIsIkVSUl9CQURfUkVTUE9OU0UiLCJFUlJfQkFEX1JFUVVFU1QiLCJFUlJfQ0FOQ0VMRUQiLCJFUlJfTk9UX1NVUFBPUlQiLCJFUlJfSU5WQUxJRF9VUkwiXS5mb3JFYWNoKEE9PntMdFtBXT17dmFsdWU6QX19KTtPYmplY3QuZGVmaW5lUHJvcGVydGllcyhXLEx0KTtPYmplY3QuZGVmaW5lUHJvcGVydHkoa3QsImlzQXhpb3NFcnJvciIse3ZhbHVlOiEwfSk7Vy5mcm9tPShBLHQsZSxJLHIsbyk9PntsZXQgZz1PYmplY3QuY3JlYXRlKGt0KTtyZXR1cm4gaS50b0ZsYXRPYmplY3QoQSxnLGZ1bmN0aW9uKFEpe3JldHVybiBRIT09RXJyb3IucHJvdG90eXBlfSxDPT5DIT09ImlzQXhpb3NFcnJvciIpLFcuY2FsbChnLEEubWVzc2FnZSx0LGUsSSxyKSxnLmNhdXNlPUEsZy5uYW1lPUEubmFtZSxvJiZPYmplY3QuYXNzaWduKGcsbyksZ307dmFyIHU9Vzt2YXIgZEE9bnVsbDtmdW5jdGlvbiB4QShBKXtyZXR1cm4gaS5pc1BsYWluT2JqZWN0KEEpfHxpLmlzQXJyYXkoQSl9ZnVuY3Rpb24gYnQoQSl7cmV0dXJuIGkuZW5kc1dpdGgoQSwiW10iKT9BLnNsaWNlKDAsLTIpOkF9ZnVuY3Rpb24gSnQoQSx0LGUpe3JldHVybiBBP0EuY29uY2F0KHQpLm1hcChmdW5jdGlvbihyLG8pe3JldHVybiByPWJ0KHIpLCFlJiZvPyJbIityKyJdIjpyfSkuam9pbihlPyIuIjoiIik6dH1mdW5jdGlvbiB5SShBKXtyZXR1cm4gaS5pc0FycmF5KEEpJiYhQS5zb21lKHhBKX12YXIgbUk9aS50b0ZsYXRPYmplY3QoaSx7fSxudWxsLGZ1bmN0aW9uKHQpe3JldHVybi9eaXNbQS1aXS8udGVzdCh0KX0pO2Z1bmN0aW9uIHdJKEEsdCxlKXtpZighaS5pc09iamVjdChBKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJ0YXJnZXQgbXVzdCBiZSBhbiBvYmplY3QiKTt0PXR8fG5ldyhkQXx8Rm9ybURhdGEpLGU9aS50b0ZsYXRPYmplY3QoZSx7bWV0YVRva2VuczohMCxkb3RzOiExLGluZGV4ZXM6ITF9LCExLGZ1bmN0aW9uKGwsYyl7cmV0dXJuIWkuaXNVbmRlZmluZWQoY1tsXSl9KTtsZXQgST1lLm1ldGFUb2tlbnMscj1lLnZpc2l0b3J8fG4sbz1lLmRvdHMsZz1lLmluZGV4ZXMsUT0oZS5CbG9ifHx0eXBlb2YgQmxvYjwidSImJkJsb2IpJiZpLmlzU3BlY0NvbXBsaWFudEZvcm0odCk7aWYoIWkuaXNGdW5jdGlvbihyKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJ2aXNpdG9yIG11c3QgYmUgYSBmdW5jdGlvbiIpO2Z1bmN0aW9uIGEoRSl7aWYoRT09PW51bGwpcmV0dXJuIiI7aWYoaS5pc0RhdGUoRSkpcmV0dXJuIEUudG9JU09TdHJpbmcoKTtpZighUSYmaS5pc0Jsb2IoRSkpdGhyb3cgbmV3IHUoIkJsb2IgaXMgbm90IHN1cHBvcnRlZC4gVXNlIGEgQnVmZmVyIGluc3RlYWQuIik7cmV0dXJuIGkuaXNBcnJheUJ1ZmZlcihFKXx8aS5pc1R5cGVkQXJyYXkoRSk/USYmdHlwZW9mIEJsb2I9PSJmdW5jdGlvbiI/bmV3IEJsb2IoW0VdKTpCdWZmZXIuZnJvbShFKTpFfWZ1bmN0aW9uIG4oRSxsLGMpe2xldCBwPUU7aWYoRSYmIWMmJnR5cGVvZiBFPT0ib2JqZWN0Iil7aWYoaS5lbmRzV2l0aChsLCJ7fSIpKWw9ST9sOmwuc2xpY2UoMCwtMiksRT1KU09OLnN0cmluZ2lmeShFKTtlbHNlIGlmKGkuaXNBcnJheShFKSYmeUkoRSl8fChpLmlzRmlsZUxpc3QoRSl8fGkuZW5kc1dpdGgobCwiW10iKSkmJihwPWkudG9BcnJheShFKSkpcmV0dXJuIGw9YnQobCkscC5mb3JFYWNoKGZ1bmN0aW9uKEQsVSl7IShpLmlzVW5kZWZpbmVkKEQpfHxEPT09bnVsbCkmJnQuYXBwZW5kKGc9PT0hMD9KdChbbF0sVSxvKTpnPT09bnVsbD9sOmwrIltdIixhKEQpKX0pLCExfXJldHVybiB4QShFKT8hMDoodC5hcHBlbmQoSnQoYyxsLG8pLGEoRSkpLCExKX1sZXQgcz1bXSxmPU9iamVjdC5hc3NpZ24obUkse2RlZmF1bHRWaXNpdG9yOm4sY29udmVydFZhbHVlOmEsaXNWaXNpdGFibGU6eEF9KTtmdW5jdGlvbiBCKEUsbCl7aWYoIWkuaXNVbmRlZmluZWQoRSkpe2lmKHMuaW5kZXhPZihFKSE9PS0xKXRocm93IEVycm9yKCJDaXJjdWxhciByZWZlcmVuY2UgZGV0ZWN0ZWQgaW4gIitsLmpvaW4oIi4iKSk7cy5wdXNoKEUpLGkuZm9yRWFjaChFLGZ1bmN0aW9uKHAsUyl7KCEoaS5pc1VuZGVmaW5lZChwKXx8cD09PW51bGwpJiZyLmNhbGwodCxwLGkuaXNTdHJpbmcoUyk/Uy50cmltKCk6UyxsLGYpKT09PSEwJiZCKHAsbD9sLmNvbmNhdChTKTpbU10pfSkscy5wb3AoKX19aWYoIWkuaXNPYmplY3QoQSkpdGhyb3cgbmV3IFR5cGVFcnJvcigiZGF0YSBtdXN0IGJlIGFuIG9iamVjdCIpO3JldHVybiBCKEEpLHR9dmFyIHE9d0k7ZnVuY3Rpb24gSHQoQSl7bGV0IHQ9eyIhIjoiJTI1MjEiLCJcJyI6IiUyNTI3IiwiKCI6IiUyNTI4IiwiKSI6IiUyNTI5IiwifiI6IiUyNTdFIiwiJTI1MjAiOiIrIiwiJTI1MDAiOiJcXDAifTtyZXR1cm4gZW5jb2RlVVJJQ29tcG9uZW50KEEpLnJlcGxhY2UoL1shXCcoKX5dfCUyNTIwfCUyNTAwL2csZnVuY3Rpb24oSSl7cmV0dXJuIHRbSV19KX1mdW5jdGlvbiBZdChBLHQpe3RoaXMuX3BhaXJzPVtdLEEmJnEoQSx0aGlzLHQpfXZhciBxdD1ZdC5wcm90b3R5cGU7cXQuYXBwZW5kPWZ1bmN0aW9uKHQsZSl7dGhpcy5fcGFpcnMucHVzaChbdCxlXSl9O3F0LnRvU3RyaW5nPWZ1bmN0aW9uKHQpe2xldCBlPXQ/ZnVuY3Rpb24oSSl7cmV0dXJuIHQuY2FsbCh0aGlzLEksSHQpfTpIdDtyZXR1cm4gdGhpcy5fcGFpcnMubWFwKGZ1bmN0aW9uKHIpe3JldHVybiBlKHJbMF0pKyI9IitlKHJbMV0pfSwiIikuam9pbigiJiIpfTt2YXIgeUE9WXQ7ZnVuY3Rpb24gcEkoQSl7cmV0dXJuIGVuY29kZVVSSUNvbXBvbmVudChBKS5yZXBsYWNlKC8lMjUzQS9naSwiOiIpLnJlcGxhY2UoLyUyNTI0L2csIiQiKS5yZXBsYWNlKC8lMjUyQy9naSwiLCIpLnJlcGxhY2UoLyUyNTIwL2csIisiKS5yZXBsYWNlKC8lMjU1Qi9naSwiWyIpLnJlcGxhY2UoLyUyNTVEL2dpLCJdIil9ZnVuY3Rpb24gdEEoQSx0LGUpe2lmKCF0KXJldHVybiBBO2xldCBJPWUmJmUuZW5jb2RlfHxwSSxyPWUmJmUuc2VyaWFsaXplLG87aWYocj9vPXIodCxlKTpvPWkuaXNVUkxTZWFyY2hQYXJhbXModCk/dC50b1N0cmluZygpOm5ldyB5QSh0LGUpLnRvU3RyaW5nKEkpLG8pe2xldCBnPUEuaW5kZXhPZigiJTIzIik7ZyE9PS0xJiYoQT1BLnNsaWNlKDAsZykpLEErPShBLmluZGV4T2YoIj8iKT09PS0xPyI/IjoiJiIpK299cmV0dXJuIEF9dmFyIFBBPWNsYXNze2NvbnN0cnVjdG9yKCl7dGhpcy5oYW5kbGVycz1bXX11c2UodCxlLEkpe3JldHVybiB0aGlzLmhhbmRsZXJzLnB1c2goe2Z1bGZpbGxlZDp0LHJlamVjdGVkOmUsc3luY2hyb25vdXM6ST9JLnN5bmNocm9ub3VzOiExLHJ1bldoZW46ST9JLnJ1bldoZW46bnVsbH0pLHRoaXMuaGFuZGxlcnMubGVuZ3RoLTF9ZWplY3QodCl7dGhpcy5oYW5kbGVyc1t0XSYmKHRoaXMuaGFuZGxlcnNbdF09bnVsbCl9Y2xlYXIoKXt0aGlzLmhhbmRsZXJzJiYodGhpcy5oYW5kbGVycz1bXSl9Zm9yRWFjaCh0KXtpLmZvckVhY2godGhpcy5oYW5kbGVycyxmdW5jdGlvbihJKXtJIT09bnVsbCYmdChJKX0pfX0sakE9UEE7dmFyIG1BPXtzaWxlbnRKU09OUGFyc2luZzohMCxmb3JjZWRKU09OUGFyc2luZzohMCxjbGFyaWZ5VGltZW91dEVycm9yOiExfTt2YXIgTXQ9dHlwZW9mIFVSTFNlYXJjaFBhcmFtczwidSI/VVJMU2VhcmNoUGFyYW1zOnlBO3ZhciBUdD10eXBlb2YgRm9ybURhdGE8InUiP0Zvcm1EYXRhOm51bGw7dmFyIEt0PXR5cGVvZiBCbG9iPCJ1Ij9CbG9iOm51bGw7dmFyIE90PXtpc0Jyb3dzZXI6ITAsY2xhc3Nlczp7VVJMU2VhcmNoUGFyYW1zOk10LEZvcm1EYXRhOlR0LEJsb2I6S3R9LHByb3RvY29sczpbImh0dHAiLCJodHRwcyIsImZpbGUiLCJibG9iIiwidXJsIiwiZGF0YSJdfTt2YXIgWkE9e307d2UoWkEse2hhc0Jyb3dzZXJFbnY6KCk9PldBLGhhc1N0YW5kYXJkQnJvd3NlckVudjooKT0+U0ksaGFzU3RhbmRhcmRCcm93c2VyV2ViV29ya2VyRW52OigpPT5GSSxvcmlnaW46KCk9PlJJfSk7dmFyIFdBPXR5cGVvZiB3aW5kb3c8InUiJiZ0eXBlb2YgZG9jdW1lbnQ8InUiLFNJPShBPT5XQSYmWyJSZWFjdE5hdGl2ZSIsIk5hdGl2ZVNjcmlwdCIsIk5TIl0uaW5kZXhPZihBKTwwKSh0eXBlb2YgbmF2aWdhdG9yPCJ1IiYmbmF2aWdhdG9yLnByb2R1Y3QpLEZJPXR5cGVvZiBXb3JrZXJHbG9iYWxTY29wZTwidSImJnNlbGYgaW5zdGFuY2VvZiBXb3JrZXJHbG9iYWxTY29wZSYmdHlwZW9mIHNlbGYuaW1wb3J0U2NyaXB0cz09ImZ1bmN0aW9uIixSST1XQSYmd2luZG93LmxvY2F0aW9uLmhyZWZ8fCJodHRwOi8vbG9jYWxob3N0Ijt2YXIgdz17Li4uWkEsLi4uT3R9O2Z1bmN0aW9uIFZBKEEsdCl7cmV0dXJuIHEoQSxuZXcgdy5jbGFzc2VzLlVSTFNlYXJjaFBhcmFtcyxPYmplY3QuYXNzaWduKHt2aXNpdG9yOmZ1bmN0aW9uKGUsSSxyLG8pe3JldHVybiB3LmlzTm9kZSYmaS5pc0J1ZmZlcihlKT8odGhpcy5hcHBlbmQoSSxlLnRvU3RyaW5nKCJiYXNlNjQiKSksITEpOm8uZGVmYXVsdFZpc2l0b3IuYXBwbHkodGhpcyxhcmd1bWVudHMpfX0sdCkpfWZ1bmN0aW9uIE5JKEEpe3JldHVybiBpLm1hdGNoQWxsKC9cXHcrfFxcWyhcXHcqKV0vZyxBKS5tYXAodD0+dFswXT09PSJbXSI/IiI6dFsxXXx8dFswXSl9ZnVuY3Rpb24gVUkoQSl7bGV0IHQ9e30sZT1PYmplY3Qua2V5cyhBKSxJLHI9ZS5sZW5ndGgsbztmb3IoST0wO0k8cjtJKyspbz1lW0ldLHRbb109QVtvXTtyZXR1cm4gdH1mdW5jdGlvbiBHSShBKXtmdW5jdGlvbiB0KGUsSSxyLG8pe2xldCBnPWVbbysrXTtpZihnPT09Il9fcHJvdG9fXyIpcmV0dXJuITA7bGV0IEM9TnVtYmVyLmlzRmluaXRlKCtnKSxRPW8+PWUubGVuZ3RoO3JldHVybiBnPSFnJiZpLmlzQXJyYXkocik/ci5sZW5ndGg6ZyxRPyhpLmhhc093blByb3AocixnKT9yW2ddPVtyW2ddLEldOnJbZ109SSwhQyk6KCghcltnXXx8IWkuaXNPYmplY3QocltnXSkpJiYocltnXT1bXSksdChlLEkscltnXSxvKSYmaS5pc0FycmF5KHJbZ10pJiYocltnXT1VSShyW2ddKSksIUMpfWlmKGkuaXNGb3JtRGF0YShBKSYmaS5pc0Z1bmN0aW9uKEEuZW50cmllcykpe2xldCBlPXt9O3JldHVybiBpLmZvckVhY2hFbnRyeShBLChJLHIpPT57dChOSShJKSxyLGUsMCl9KSxlfXJldHVybiBudWxsfXZhciB3QT1HSTtmdW5jdGlvbiBrSShBLHQsZSl7aWYoaS5pc1N0cmluZyhBKSl0cnl7cmV0dXJuKHR8fEpTT04ucGFyc2UpKEEpLGkudHJpbShBKX1jYXRjaChJKXtpZihJLm5hbWUhPT0iU3ludGF4RXJyb3IiKXRocm93IEl9cmV0dXJuKGV8fEpTT04uc3RyaW5naWZ5KShBKX12YXIgX0E9e3RyYW5zaXRpb25hbDptQSxhZGFwdGVyOlsieGhyIiwiaHR0cCIsImZldGNoIl0sdHJhbnNmb3JtUmVxdWVzdDpbZnVuY3Rpb24odCxlKXtsZXQgST1lLmdldENvbnRlbnRUeXBlKCl8fCIiLHI9SS5pbmRleE9mKCJhcHBsaWNhdGlvbi9qc29uIik+LTEsbz1pLmlzT2JqZWN0KHQpO2lmKG8mJmkuaXNIVE1MRm9ybSh0KSYmKHQ9bmV3IEZvcm1EYXRhKHQpKSxpLmlzRm9ybURhdGEodCkpcmV0dXJuIHI/SlNPTi5zdHJpbmdpZnkod0EodCkpOnQ7aWYoaS5pc0FycmF5QnVmZmVyKHQpfHxpLmlzQnVmZmVyKHQpfHxpLmlzU3RyZWFtKHQpfHxpLmlzRmlsZSh0KXx8aS5pc0Jsb2IodCl8fGkuaXNSZWFkYWJsZVN0cmVhbSh0KSlyZXR1cm4gdDtpZihpLmlzQXJyYXlCdWZmZXJWaWV3KHQpKXJldHVybiB0LmJ1ZmZlcjtpZihpLmlzVVJMU2VhcmNoUGFyYW1zKHQpKXJldHVybiBlLnNldENvbnRlbnRUeXBlKCJhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQ7Y2hhcnNldD11dGYtOCIsITEpLHQudG9TdHJpbmcoKTtsZXQgQztpZihvKXtpZihJLmluZGV4T2YoImFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCIpPi0xKXJldHVybiBWQSh0LHRoaXMuZm9ybVNlcmlhbGl6ZXIpLnRvU3RyaW5nKCk7aWYoKEM9aS5pc0ZpbGVMaXN0KHQpKXx8SS5pbmRleE9mKCJtdWx0aXBhcnQvZm9ybS1kYXRhIik+LTEpe2xldCBRPXRoaXMuZW52JiZ0aGlzLmVudi5Gb3JtRGF0YTtyZXR1cm4gcShDP3siZmlsZXNbXSI6dH06dCxRJiZuZXcgUSx0aGlzLmZvcm1TZXJpYWxpemVyKX19cmV0dXJuIG98fHI/KGUuc2V0Q29udGVudFR5cGUoImFwcGxpY2F0aW9uL2pzb24iLCExKSxrSSh0KSk6dH1dLHRyYW5zZm9ybVJlc3BvbnNlOltmdW5jdGlvbih0KXtsZXQgZT10aGlzLnRyYW5zaXRpb25hbHx8X0EudHJhbnNpdGlvbmFsLEk9ZSYmZS5mb3JjZWRKU09OUGFyc2luZyxyPXRoaXMucmVzcG9uc2VUeXBlPT09Impzb24iO2lmKGkuaXNSZXNwb25zZSh0KXx8aS5pc1JlYWRhYmxlU3RyZWFtKHQpKXJldHVybiB0O2lmKHQmJmkuaXNTdHJpbmcodCkmJihJJiYhdGhpcy5yZXNwb25zZVR5cGV8fHIpKXtsZXQgZz0hKGUmJmUuc2lsZW50SlNPTlBhcnNpbmcpJiZyO3RyeXtyZXR1cm4gSlNPTi5wYXJzZSh0KX1jYXRjaChDKXtpZihnKXRocm93IEMubmFtZT09PSJTeW50YXhFcnJvciI/dS5mcm9tKEMsdS5FUlJfQkFEX1JFU1BPTlNFLHRoaXMsbnVsbCx0aGlzLnJlc3BvbnNlKTpDfX1yZXR1cm4gdH1dLHRpbWVvdXQ6MCx4c3JmQ29va2llTmFtZToiWFNSRi1UT0tFTiIseHNyZkhlYWRlck5hbWU6IlgtWFNSRi1UT0tFTiIsbWF4Q29udGVudExlbmd0aDotMSxtYXhCb2R5TGVuZ3RoOi0xLGVudjp7Rm9ybURhdGE6dy5jbGFzc2VzLkZvcm1EYXRhLEJsb2I6dy5jbGFzc2VzLkJsb2J9LHZhbGlkYXRlU3RhdHVzOmZ1bmN0aW9uKHQpe3JldHVybiB0Pj0yMDAmJnQ8MzAwfSxoZWFkZXJzOntjb21tb246e0FjY2VwdDoiYXBwbGljYXRpb24vanNvbiwgdGV4dC9wbGFpbiwgKi8qIiwiQ29udGVudC1UeXBlIjp2b2lkIDB9fX07aS5mb3JFYWNoKFsiZGVsZXRlIiwiZ2V0IiwiaGVhZCIsInBvc3QiLCJwdXQiLCJwYXRjaCJdLEE9PntfQS5oZWFkZXJzW0FdPXt9fSk7dmFyIFo9X0E7dmFyIExJPWkudG9PYmplY3RTZXQoWyJhZ2UiLCJhdXRob3JpemF0aW9uIiwiY29udGVudC1sZW5ndGgiLCJjb250ZW50LXR5cGUiLCJldGFnIiwiZXhwaXJlcyIsImZyb20iLCJob3N0IiwiaWYtbW9kaWZpZWQtc2luY2UiLCJpZi11bm1vZGlmaWVkLXNpbmNlIiwibGFzdC1tb2RpZmllZCIsImxvY2F0aW9uIiwibWF4LWZvcndhcmRzIiwicHJveHktYXV0aG9yaXphdGlvbiIsInJlZmVyZXIiLCJyZXRyeS1hZnRlciIsInVzZXItYWdlbnQiXSkseHQ9QT0+e2xldCB0PXt9LGUsSSxyO3JldHVybiBBJiZBLnNwbGl0KGAlMEFgKS5mb3JFYWNoKGZ1bmN0aW9uKGcpe3I9Zy5pbmRleE9mKCI6IiksZT1nLnN1YnN0cmluZygwLHIpLnRyaW0oKS50b0xvd2VyQ2FzZSgpLEk9Zy5zdWJzdHJpbmcocisxKS50cmltKCksISghZXx8dFtlXSYmTElbZV0pJiYoZT09PSJzZXQtY29va2llIj90W2VdP3RbZV0ucHVzaChJKTp0W2VdPVtJXTp0W2VdPXRbZV0/dFtlXSsiLCAiK0k6SSl9KSx0fTt2YXIgUHQ9U3ltYm9sKCJpbnRlcm5hbHMiKTtmdW5jdGlvbiBlQShBKXtyZXR1cm4gQSYmU3RyaW5nKEEpLnRyaW0oKS50b0xvd2VyQ2FzZSgpfWZ1bmN0aW9uIHBBKEEpe3JldHVybiBBPT09ITF8fEE9PW51bGw/QTppLmlzQXJyYXkoQSk/QS5tYXAocEEpOlN0cmluZyhBKX1mdW5jdGlvbiBKSShBKXtsZXQgdD1PYmplY3QuY3JlYXRlKG51bGwpLGU9LyhbXlxccyw7PV0rKVxccyooPzo9XFxzKihbXiw7XSspKT8vZyxJO2Zvcig7ST1lLmV4ZWMoQSk7KXRbSVsxXV09SVsyXTtyZXR1cm4gdH12YXIgYkk9QT0+L15bLV9hLXpBLVowLTleYHx+LCElMjMkJSZcJyorLl0rJC8udGVzdChBLnRyaW0oKSk7ZnVuY3Rpb24gWEEoQSx0LGUsSSxyKXtpZihpLmlzRnVuY3Rpb24oSSkpcmV0dXJuIEkuY2FsbCh0aGlzLHQsZSk7aWYociYmKHQ9ZSksISFpLmlzU3RyaW5nKHQpKXtpZihpLmlzU3RyaW5nKEkpKXJldHVybiB0LmluZGV4T2YoSSkhPT0tMTtpZihpLmlzUmVnRXhwKEkpKXJldHVybiBJLnRlc3QodCl9fWZ1bmN0aW9uIEhJKEEpe3JldHVybiBBLnRyaW0oKS50b0xvd2VyQ2FzZSgpLnJlcGxhY2UoLyhbYS16XFxkXSkoXFx3KikvZywodCxlLEkpPT5lLnRvVXBwZXJDYXNlKCkrSSl9ZnVuY3Rpb24gWUkoQSx0KXtsZXQgZT1pLnRvQ2FtZWxDYXNlKCIgIit0KTtbImdldCIsInNldCIsImhhcyJdLmZvckVhY2goST0+e09iamVjdC5kZWZpbmVQcm9wZXJ0eShBLEkrZSx7dmFsdWU6ZnVuY3Rpb24ocixvLGcpe3JldHVybiB0aGlzW0ldLmNhbGwodGhpcyx0LHIsbyxnKX0sY29uZmlndXJhYmxlOiEwfSl9KX12YXIgVj1jbGFzc3tjb25zdHJ1Y3Rvcih0KXt0JiZ0aGlzLnNldCh0KX1zZXQodCxlLEkpe2xldCByPXRoaXM7ZnVuY3Rpb24gbyhDLFEsYSl7bGV0IG49ZUEoUSk7aWYoIW4pdGhyb3cgbmV3IEVycm9yKCJoZWFkZXIgbmFtZSBtdXN0IGJlIGEgbm9uLWVtcHR5IHN0cmluZyIpO2xldCBzPWkuZmluZEtleShyLG4pOyghc3x8cltzXT09PXZvaWQgMHx8YT09PSEwfHxhPT09dm9pZCAwJiZyW3NdIT09ITEpJiYocltzfHxRXT1wQShDKSl9bGV0IGc9KEMsUSk9PmkuZm9yRWFjaChDLChhLG4pPT5vKGEsbixRKSk7aWYoaS5pc1BsYWluT2JqZWN0KHQpfHx0IGluc3RhbmNlb2YgdGhpcy5jb25zdHJ1Y3RvcilnKHQsZSk7ZWxzZSBpZihpLmlzU3RyaW5nKHQpJiYodD10LnRyaW0oKSkmJiFiSSh0KSlnKHh0KHQpLGUpO2Vsc2UgaWYoaS5pc0hlYWRlcnModCkpZm9yKGxldFtDLFFdb2YgdC5lbnRyaWVzKCkpbyhRLEMsSSk7ZWxzZSB0IT1udWxsJiZvKGUsdCxJKTtyZXR1cm4gdGhpc31nZXQodCxlKXtpZih0PWVBKHQpLHQpe2xldCBJPWkuZmluZEtleSh0aGlzLHQpO2lmKEkpe2xldCByPXRoaXNbSV07aWYoIWUpcmV0dXJuIHI7aWYoZT09PSEwKXJldHVybiBKSShyKTtpZihpLmlzRnVuY3Rpb24oZSkpcmV0dXJuIGUuY2FsbCh0aGlzLHIsSSk7aWYoaS5pc1JlZ0V4cChlKSlyZXR1cm4gZS5leGVjKHIpO3Rocm93IG5ldyBUeXBlRXJyb3IoInBhcnNlciBtdXN0IGJlIGJvb2xlYW58cmVnZXhwfGZ1bmN0aW9uIil9fX1oYXModCxlKXtpZih0PWVBKHQpLHQpe2xldCBJPWkuZmluZEtleSh0aGlzLHQpO3JldHVybiEhKEkmJnRoaXNbSV0hPT12b2lkIDAmJighZXx8WEEodGhpcyx0aGlzW0ldLEksZSkpKX1yZXR1cm4hMX1kZWxldGUodCxlKXtsZXQgST10aGlzLHI9ITE7ZnVuY3Rpb24gbyhnKXtpZihnPWVBKGcpLGcpe2xldCBDPWkuZmluZEtleShJLGcpO0MmJighZXx8WEEoSSxJW0NdLEMsZSkpJiYoZGVsZXRlIElbQ10scj0hMCl9fXJldHVybiBpLmlzQXJyYXkodCk/dC5mb3JFYWNoKG8pOm8odCkscn1jbGVhcih0KXtsZXQgZT1PYmplY3Qua2V5cyh0aGlzKSxJPWUubGVuZ3RoLHI9ITE7Zm9yKDtJLS07KXtsZXQgbz1lW0ldOyghdHx8WEEodGhpcyx0aGlzW29dLG8sdCwhMCkpJiYoZGVsZXRlIHRoaXNbb10scj0hMCl9cmV0dXJuIHJ9bm9ybWFsaXplKHQpe2xldCBlPXRoaXMsST17fTtyZXR1cm4gaS5mb3JFYWNoKHRoaXMsKHIsbyk9PntsZXQgZz1pLmZpbmRLZXkoSSxvKTtpZihnKXtlW2ddPXBBKHIpLGRlbGV0ZSBlW29dO3JldHVybn1sZXQgQz10P0hJKG8pOlN0cmluZyhvKS50cmltKCk7QyE9PW8mJmRlbGV0ZSBlW29dLGVbQ109cEEociksSVtDXT0hMH0pLHRoaXN9Y29uY2F0KC4uLnQpe3JldHVybiB0aGlzLmNvbnN0cnVjdG9yLmNvbmNhdCh0aGlzLC4uLnQpfXRvSlNPTih0KXtsZXQgZT1PYmplY3QuY3JlYXRlKG51bGwpO3JldHVybiBpLmZvckVhY2godGhpcywoSSxyKT0+e0khPW51bGwmJkkhPT0hMSYmKGVbcl09dCYmaS5pc0FycmF5KEkpP0kuam9pbigiLCAiKTpJKX0pLGV9W1N5bWJvbC5pdGVyYXRvcl0oKXtyZXR1cm4gT2JqZWN0LmVudHJpZXModGhpcy50b0pTT04oKSlbU3ltYm9sLml0ZXJhdG9yXSgpfXRvU3RyaW5nKCl7cmV0dXJuIE9iamVjdC5lbnRyaWVzKHRoaXMudG9KU09OKCkpLm1hcCgoW3QsZV0pPT50KyI6ICIrZSkuam9pbihgJTBBYCl9Z2V0W1N5bWJvbC50b1N0cmluZ1RhZ10oKXtyZXR1cm4iQXhpb3NIZWFkZXJzIn1zdGF0aWMgZnJvbSh0KXtyZXR1cm4gdCBpbnN0YW5jZW9mIHRoaXM/dDpuZXcgdGhpcyh0KX1zdGF0aWMgY29uY2F0KHQsLi4uZSl7bGV0IEk9bmV3IHRoaXModCk7cmV0dXJuIGUuZm9yRWFjaChyPT5JLnNldChyKSksSX1zdGF0aWMgYWNjZXNzb3IodCl7bGV0IEk9KHRoaXNbUHRdPXRoaXNbUHRdPXthY2Nlc3NvcnM6e319KS5hY2Nlc3NvcnMscj10aGlzLnByb3RvdHlwZTtmdW5jdGlvbiBvKGcpe2xldCBDPWVBKGcpO0lbQ118fChZSShyLGcpLElbQ109ITApfXJldHVybiBpLmlzQXJyYXkodCk/dC5mb3JFYWNoKG8pOm8odCksdGhpc319O1YuYWNjZXNzb3IoWyJDb250ZW50LVR5cGUiLCJDb250ZW50LUxlbmd0aCIsIkFjY2VwdCIsIkFjY2VwdC1FbmNvZGluZyIsIlVzZXItQWdlbnQiLCJBdXRob3JpemF0aW9uIl0pO2kucmVkdWNlRGVzY3JpcHRvcnMoVi5wcm90b3R5cGUsKHt2YWx1ZTpBfSx0KT0+e2xldCBlPXRbMF0udG9VcHBlckNhc2UoKSt0LnNsaWNlKDEpO3JldHVybntnZXQ6KCk9PkEsc2V0KEkpe3RoaXNbZV09SX19fSk7aS5mcmVlemVNZXRob2RzKFYpO3ZhciBtPVY7ZnVuY3Rpb24gSUEoQSx0KXtsZXQgZT10aGlzfHxaLEk9dHx8ZSxyPW0uZnJvbShJLmhlYWRlcnMpLG89SS5kYXRhO3JldHVybiBpLmZvckVhY2goQSxmdW5jdGlvbihDKXtvPUMuY2FsbChlLG8sci5ub3JtYWxpemUoKSx0P3Quc3RhdHVzOnZvaWQgMCl9KSxyLm5vcm1hbGl6ZSgpLG99ZnVuY3Rpb24gckEoQSl7cmV0dXJuISEoQSYmQS5fX0NBTkNFTF9fKX1mdW5jdGlvbiBqdChBLHQsZSl7dS5jYWxsKHRoaXMsQT8/ImNhbmNlbGVkIix1LkVSUl9DQU5DRUxFRCx0LGUpLHRoaXMubmFtZT0iQ2FuY2VsZWRFcnJvciJ9aS5pbmhlcml0cyhqdCx1LHtfX0NBTkNFTF9fOiEwfSk7dmFyIGI9anQ7ZnVuY3Rpb24gb0EoQSx0LGUpe2xldCBJPWUuY29uZmlnLnZhbGlkYXRlU3RhdHVzOyFlLnN0YXR1c3x8IUl8fEkoZS5zdGF0dXMpP0EoZSk6dChuZXcgdSgiUmVxdWVzdCBmYWlsZWQgd2l0aCBzdGF0dXMgY29kZSAiK2Uuc3RhdHVzLFt1LkVSUl9CQURfUkVRVUVTVCx1LkVSUl9CQURfUkVTUE9OU0VdW01hdGguZmxvb3IoZS5zdGF0dXMvMTAwKS00XSxlLmNvbmZpZyxlLnJlcXVlc3QsZSkpfWZ1bmN0aW9uIHpBKEEpe2xldCB0PS9eKFstK1xcd117MSwyNX0pKDo/XFwvXFwvfDopLy5leGVjKEEpO3JldHVybiB0JiZ0WzFdfHwiIn1mdW5jdGlvbiBxSShBLHQpe0E9QXx8MTA7bGV0IGU9bmV3IEFycmF5KEEpLEk9bmV3IEFycmF5KEEpLHI9MCxvPTAsZztyZXR1cm4gdD10IT09dm9pZCAwP3Q6MWUzLGZ1bmN0aW9uKFEpe2xldCBhPURhdGUubm93KCksbj1JW29dO2d8fChnPWEpLGVbcl09USxJW3JdPWE7bGV0IHM9byxmPTA7Zm9yKDtzIT09cjspZis9ZVtzKytdLHM9cyVBO2lmKHI9KHIrMSklQSxyPT09byYmKG89KG8rMSklQSksYS1nPHQpcmV0dXJuO2xldCBCPW4mJmEtbjtyZXR1cm4gQj9NYXRoLnJvdW5kKGYqMWUzL0IpOnZvaWQgMH19dmFyIFd0PXFJO2Z1bmN0aW9uIE1JKEEsdCl7bGV0IGU9MCxJPTFlMy90LHIsbyxnPShhLG49RGF0ZS5ub3coKSk9PntlPW4scj1udWxsLG8mJihjbGVhclRpbWVvdXQobyksbz1udWxsKSxBLmFwcGx5KG51bGwsYSl9O3JldHVyblsoLi4uYSk9PntsZXQgbj1EYXRlLm5vdygpLHM9bi1lO3M+PUk/ZyhhLG4pOihyPWEsb3x8KG89c2V0VGltZW91dCgoKT0+e289bnVsbCxnKHIpfSxJLXMpKSl9LCgpPT5yJiZnKHIpXX12YXIgWnQ9TUk7dmFyIF89KEEsdCxlPTMpPT57bGV0IEk9MCxyPVd0KDUwLDI1MCk7cmV0dXJuIFp0KG89PntsZXQgZz1vLmxvYWRlZCxDPW8ubGVuZ3RoQ29tcHV0YWJsZT9vLnRvdGFsOnZvaWQgMCxRPWctSSxhPXIoUSksbj1nPD1DO0k9ZztsZXQgcz17bG9hZGVkOmcsdG90YWw6Qyxwcm9ncmVzczpDP2cvQzp2b2lkIDAsYnl0ZXM6USxyYXRlOmF8fHZvaWQgMCxlc3RpbWF0ZWQ6YSYmQyYmbj8oQy1nKS9hOnZvaWQgMCxldmVudDpvLGxlbmd0aENvbXB1dGFibGU6QyE9bnVsbCxbdD8iZG93bmxvYWQiOiJ1cGxvYWQiXTohMH07QShzKX0sZSl9LHZBPShBLHQpPT57bGV0IGU9QSE9bnVsbDtyZXR1cm5bST0+dFswXSh7bGVuZ3RoQ29tcHV0YWJsZTplLHRvdGFsOkEsbG9hZGVkOkl9KSx0WzFdXX0sJEE9QT0+KC4uLnQpPT5pLmFzYXAoKCk9PkEoLi4udCkpO3ZhciBWdD13Lmhhc1N0YW5kYXJkQnJvd3NlckVudj9mdW5jdGlvbigpe2xldCB0PS8obXNpZXx0cmlkZW50KS9pLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCksZT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJhIiksSTtmdW5jdGlvbiByKG8pe2xldCBnPW87cmV0dXJuIHQmJihlLnNldEF0dHJpYnV0ZSgiaHJlZiIsZyksZz1lLmhyZWYpLGUuc2V0QXR0cmlidXRlKCJocmVmIixnKSx7aHJlZjplLmhyZWYscHJvdG9jb2w6ZS5wcm90b2NvbD9lLnByb3RvY29sLnJlcGxhY2UoLzokLywiIik6IiIsaG9zdDplLmhvc3Qsc2VhcmNoOmUuc2VhcmNoP2Uuc2VhcmNoLnJlcGxhY2UoL15cXD8vLCIiKToiIixoYXNoOmUuaGFzaD9lLmhhc2gucmVwbGFjZSgvXiUyMy8sIiIpOiIiLGhvc3RuYW1lOmUuaG9zdG5hbWUscG9ydDplLnBvcnQscGF0aG5hbWU6ZS5wYXRobmFtZS5jaGFyQXQoMCk9PT0iLyI/ZS5wYXRobmFtZToiLyIrZS5wYXRobmFtZX19cmV0dXJuIEk9cih3aW5kb3cubG9jYXRpb24uaHJlZiksZnVuY3Rpb24oZyl7bGV0IEM9aS5pc1N0cmluZyhnKT9yKGcpOmc7cmV0dXJuIEMucHJvdG9jb2w9PT1JLnByb3RvY29sJiZDLmhvc3Q9PT1JLmhvc3R9fSgpOmZ1bmN0aW9uKCl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuITB9fSgpO3ZhciBfdD13Lmhhc1N0YW5kYXJkQnJvd3NlckVudj97d3JpdGUoQSx0LGUsSSxyLG8pe2xldCBnPVtBKyI9IitlbmNvZGVVUklDb21wb25lbnQodCldO2kuaXNOdW1iZXIoZSkmJmcucHVzaCgiZXhwaXJlcz0iK25ldyBEYXRlKGUpLnRvR01UU3RyaW5nKCkpLGkuaXNTdHJpbmcoSSkmJmcucHVzaCgicGF0aD0iK0kpLGkuaXNTdHJpbmcocikmJmcucHVzaCgiZG9tYWluPSIrciksbz09PSEwJiZnLnB1c2goInNlY3VyZSIpLGRvY3VtZW50LmNvb2tpZT1nLmpvaW4oIjsgIil9LHJlYWQoQSl7bGV0IHQ9ZG9jdW1lbnQuY29va2llLm1hdGNoKG5ldyBSZWdFeHAoIihefDtcXFxccyopKCIrQSsiKT0oW147XSopIikpO3JldHVybiB0P2RlY29kZVVSSUNvbXBvbmVudCh0WzNdKTpudWxsfSxyZW1vdmUoQSl7dGhpcy53cml0ZShBLCIiLERhdGUubm93KCktODY0ZTUpfX06e3dyaXRlKCl7fSxyZWFkKCl7cmV0dXJuIG51bGx9LHJlbW92ZSgpe319O2Z1bmN0aW9uIEF0KEEpe3JldHVybi9eKFthLXpdW2EtelxcZCtcXC0uXSo6KT9cXC9cXC8vaS50ZXN0KEEpfWZ1bmN0aW9uIHR0KEEsdCl7cmV0dXJuIHQ/QS5yZXBsYWNlKC9cXC8/XFwvJC8sIiIpKyIvIit0LnJlcGxhY2UoL15cXC8rLywiIik6QX1mdW5jdGlvbiBnQShBLHQpe3JldHVybiBBJiYhQXQodCk/dHQoQSx0KTp0fXZhciBYdD1BPT5BIGluc3RhbmNlb2YgbT97Li4uQX06QTtmdW5jdGlvbiBrKEEsdCl7dD10fHx7fTtsZXQgZT17fTtmdW5jdGlvbiBJKGEsbixzKXtyZXR1cm4gaS5pc1BsYWluT2JqZWN0KGEpJiZpLmlzUGxhaW5PYmplY3Qobik/aS5tZXJnZS5jYWxsKHtjYXNlbGVzczpzfSxhLG4pOmkuaXNQbGFpbk9iamVjdChuKT9pLm1lcmdlKHt9LG4pOmkuaXNBcnJheShuKT9uLnNsaWNlKCk6bn1mdW5jdGlvbiByKGEsbixzKXtpZihpLmlzVW5kZWZpbmVkKG4pKXtpZighaS5pc1VuZGVmaW5lZChhKSlyZXR1cm4gSSh2b2lkIDAsYSxzKX1lbHNlIHJldHVybiBJKGEsbixzKX1mdW5jdGlvbiBvKGEsbil7aWYoIWkuaXNVbmRlZmluZWQobikpcmV0dXJuIEkodm9pZCAwLG4pfWZ1bmN0aW9uIGcoYSxuKXtpZihpLmlzVW5kZWZpbmVkKG4pKXtpZighaS5pc1VuZGVmaW5lZChhKSlyZXR1cm4gSSh2b2lkIDAsYSl9ZWxzZSByZXR1cm4gSSh2b2lkIDAsbil9ZnVuY3Rpb24gQyhhLG4scyl7aWYocyBpbiB0KXJldHVybiBJKGEsbik7aWYocyBpbiBBKXJldHVybiBJKHZvaWQgMCxhKX1sZXQgUT17dXJsOm8sbWV0aG9kOm8sZGF0YTpvLGJhc2VVUkw6Zyx0cmFuc2Zvcm1SZXF1ZXN0OmcsdHJhbnNmb3JtUmVzcG9uc2U6ZyxwYXJhbXNTZXJpYWxpemVyOmcsdGltZW91dDpnLHRpbWVvdXRNZXNzYWdlOmcsd2l0aENyZWRlbnRpYWxzOmcsd2l0aFhTUkZUb2tlbjpnLGFkYXB0ZXI6ZyxyZXNwb25zZVR5cGU6Zyx4c3JmQ29va2llTmFtZTpnLHhzcmZIZWFkZXJOYW1lOmcsb25VcGxvYWRQcm9ncmVzczpnLG9uRG93bmxvYWRQcm9ncmVzczpnLGRlY29tcHJlc3M6ZyxtYXhDb250ZW50TGVuZ3RoOmcsbWF4Qm9keUxlbmd0aDpnLGJlZm9yZVJlZGlyZWN0OmcsdHJhbnNwb3J0OmcsaHR0cEFnZW50OmcsaHR0cHNBZ2VudDpnLGNhbmNlbFRva2VuOmcsc29ja2V0UGF0aDpnLHJlc3BvbnNlRW5jb2Rpbmc6Zyx2YWxpZGF0ZVN0YXR1czpDLGhlYWRlcnM6KGEsbik9PnIoWHQoYSksWHQobiksITApfTtyZXR1cm4gaS5mb3JFYWNoKE9iamVjdC5rZXlzKE9iamVjdC5hc3NpZ24oe30sQSx0KSksZnVuY3Rpb24obil7bGV0IHM9UVtuXXx8cixmPXMoQVtuXSx0W25dLG4pO2kuaXNVbmRlZmluZWQoZikmJnMhPT1DfHwoZVtuXT1mKX0pLGV9dmFyIFNBPUE9PntsZXQgdD1rKHt9LEEpLHtkYXRhOmUsd2l0aFhTUkZUb2tlbjpJLHhzcmZIZWFkZXJOYW1lOnIseHNyZkNvb2tpZU5hbWU6byxoZWFkZXJzOmcsYXV0aDpDfT10O3QuaGVhZGVycz1nPW0uZnJvbShnKSx0LnVybD10QShnQSh0LmJhc2VVUkwsdC51cmwpLEEucGFyYW1zLEEucGFyYW1zU2VyaWFsaXplciksQyYmZy5zZXQoIkF1dGhvcml6YXRpb24iLCJCYXNpYyAiK2J0b2EoKEMudXNlcm5hbWV8fCIiKSsiOiIrKEMucGFzc3dvcmQ/dW5lc2NhcGUoZW5jb2RlVVJJQ29tcG9uZW50KEMucGFzc3dvcmQpKToiIikpKTtsZXQgUTtpZihpLmlzRm9ybURhdGEoZSkpe2lmKHcuaGFzU3RhbmRhcmRCcm93c2VyRW52fHx3Lmhhc1N0YW5kYXJkQnJvd3NlcldlYldvcmtlckVudilnLnNldENvbnRlbnRUeXBlKHZvaWQgMCk7ZWxzZSBpZigoUT1nLmdldENvbnRlbnRUeXBlKCkpIT09ITEpe2xldFthLC4uLm5dPVE/US5zcGxpdCgiOyIpLm1hcChzPT5zLnRyaW0oKSkuZmlsdGVyKEJvb2xlYW4pOltdO2cuc2V0Q29udGVudFR5cGUoW2F8fCJtdWx0aXBhcnQvZm9ybS1kYXRhIiwuLi5uXS5qb2luKCI7ICIpKX19aWYody5oYXNTdGFuZGFyZEJyb3dzZXJFbnYmJihJJiZpLmlzRnVuY3Rpb24oSSkmJihJPUkodCkpLEl8fEkhPT0hMSYmVnQodC51cmwpKSl7bGV0IGE9ciYmbyYmX3QucmVhZChvKTthJiZnLnNldChyLGEpfXJldHVybiB0fTt2YXIgVEk9dHlwZW9mIFhNTEh0dHBSZXF1ZXN0PCJ1Iix6dD1USSYmZnVuY3Rpb24oQSl7cmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKGUsSSl7bGV0IHI9U0EoQSksbz1yLmRhdGEsZz1tLmZyb20oci5oZWFkZXJzKS5ub3JtYWxpemUoKSx7cmVzcG9uc2VUeXBlOkMsb25VcGxvYWRQcm9ncmVzczpRLG9uRG93bmxvYWRQcm9ncmVzczphfT1yLG4scyxmLEIsRTtmdW5jdGlvbiBsKCl7QiYmQigpLEUmJkUoKSxyLmNhbmNlbFRva2VuJiZyLmNhbmNlbFRva2VuLnVuc3Vic2NyaWJlKG4pLHIuc2lnbmFsJiZyLnNpZ25hbC5yZW1vdmVFdmVudExpc3RlbmVyKCJhYm9ydCIsbil9bGV0IGM9bmV3IFhNTEh0dHBSZXF1ZXN0O2Mub3BlbihyLm1ldGhvZC50b1VwcGVyQ2FzZSgpLHIudXJsLCEwKSxjLnRpbWVvdXQ9ci50aW1lb3V0O2Z1bmN0aW9uIHAoKXtpZighYylyZXR1cm47bGV0IEQ9bS5mcm9tKCJnZXRBbGxSZXNwb25zZUhlYWRlcnMiaW4gYyYmYy5nZXRBbGxSZXNwb25zZUhlYWRlcnMoKSksSz17ZGF0YTohQ3x8Qz09PSJ0ZXh0Inx8Qz09PSJqc29uIj9jLnJlc3BvbnNlVGV4dDpjLnJlc3BvbnNlLHN0YXR1czpjLnN0YXR1cyxzdGF0dXNUZXh0OmMuc3RhdHVzVGV4dCxoZWFkZXJzOkQsY29uZmlnOkEscmVxdWVzdDpjfTtvQShmdW5jdGlvbihKKXtlKEopLGwoKX0sZnVuY3Rpb24oSil7SShKKSxsKCl9LEspLGM9bnVsbH0ib25sb2FkZW5kImluIGM/Yy5vbmxvYWRlbmQ9cDpjLm9ucmVhZHlzdGF0ZWNoYW5nZT1mdW5jdGlvbigpeyFjfHxjLnJlYWR5U3RhdGUhPT00fHxjLnN0YXR1cz09PTAmJiEoYy5yZXNwb25zZVVSTCYmYy5yZXNwb25zZVVSTC5pbmRleE9mKCJmaWxlOiIpPT09MCl8fHNldFRpbWVvdXQocCl9LGMub25hYm9ydD1mdW5jdGlvbigpe2MmJihJKG5ldyB1KCJSZXF1ZXN0IGFib3J0ZWQiLHUuRUNPTk5BQk9SVEVELEEsYykpLGM9bnVsbCl9LGMub25lcnJvcj1mdW5jdGlvbigpe0kobmV3IHUoIk5ldHdvcmsgRXJyb3IiLHUuRVJSX05FVFdPUkssQSxjKSksYz1udWxsfSxjLm9udGltZW91dD1mdW5jdGlvbigpe2xldCBVPXIudGltZW91dD8idGltZW91dCBvZiAiK3IudGltZW91dCsibXMgZXhjZWVkZWQiOiJ0aW1lb3V0IGV4Y2VlZGVkIixLPXIudHJhbnNpdGlvbmFsfHxtQTtyLnRpbWVvdXRFcnJvck1lc3NhZ2UmJihVPXIudGltZW91dEVycm9yTWVzc2FnZSksSShuZXcgdShVLEsuY2xhcmlmeVRpbWVvdXRFcnJvcj91LkVUSU1FRE9VVDp1LkVDT05OQUJPUlRFRCxBLGMpKSxjPW51bGx9LG89PT12b2lkIDAmJmcuc2V0Q29udGVudFR5cGUobnVsbCksInNldFJlcXVlc3RIZWFkZXIiaW4gYyYmaS5mb3JFYWNoKGcudG9KU09OKCksZnVuY3Rpb24oVSxLKXtjLnNldFJlcXVlc3RIZWFkZXIoSyxVKX0pLGkuaXNVbmRlZmluZWQoci53aXRoQ3JlZGVudGlhbHMpfHwoYy53aXRoQ3JlZGVudGlhbHM9ISFyLndpdGhDcmVkZW50aWFscyksQyYmQyE9PSJqc29uIiYmKGMucmVzcG9uc2VUeXBlPXIucmVzcG9uc2VUeXBlKSxhJiYoW2YsRV09XyhhLCEwKSxjLmFkZEV2ZW50TGlzdGVuZXIoInByb2dyZXNzIixmKSksUSYmYy51cGxvYWQmJihbcyxCXT1fKFEpLGMudXBsb2FkLmFkZEV2ZW50TGlzdGVuZXIoInByb2dyZXNzIixzKSxjLnVwbG9hZC5hZGRFdmVudExpc3RlbmVyKCJsb2FkZW5kIixCKSksKHIuY2FuY2VsVG9rZW58fHIuc2lnbmFsKSYmKG49RD0+e2MmJihJKCFEfHxELnR5cGU/bmV3IGIobnVsbCxBLGMpOkQpLGMuYWJvcnQoKSxjPW51bGwpfSxyLmNhbmNlbFRva2VuJiZyLmNhbmNlbFRva2VuLnN1YnNjcmliZShuKSxyLnNpZ25hbCYmKHIuc2lnbmFsLmFib3J0ZWQ/bigpOnIuc2lnbmFsLmFkZEV2ZW50TGlzdGVuZXIoImFib3J0IixuKSkpO2xldCBTPXpBKHIudXJsKTtpZihTJiZ3LnByb3RvY29scy5pbmRleE9mKFMpPT09LTEpe0kobmV3IHUoIlVuc3VwcG9ydGVkIHByb3RvY29sICIrUysiOiIsdS5FUlJfQkFEX1JFUVVFU1QsQSkpO3JldHVybn1jLnNlbmQob3x8bnVsbCl9KX07dmFyIEtJPShBLHQpPT57bGV0IGU9bmV3IEFib3J0Q29udHJvbGxlcixJLHI9ZnVuY3Rpb24oUSl7aWYoIUkpe0k9ITAsZygpO2xldCBhPVEgaW5zdGFuY2VvZiBFcnJvcj9ROnRoaXMucmVhc29uO2UuYWJvcnQoYSBpbnN0YW5jZW9mIHU/YTpuZXcgYihhIGluc3RhbmNlb2YgRXJyb3I/YS5tZXNzYWdlOmEpKX19LG89dCYmc2V0VGltZW91dCgoKT0+e3IobmV3IHUoYHRpbWVvdXQgJHt0fSBvZiBtcyBleGNlZWRlZGAsdS5FVElNRURPVVQpKX0sdCksZz0oKT0+e0EmJihvJiZjbGVhclRpbWVvdXQobyksbz1udWxsLEEuZm9yRWFjaChRPT57USYmKFEucmVtb3ZlRXZlbnRMaXN0ZW5lcj9RLnJlbW92ZUV2ZW50TGlzdGVuZXIoImFib3J0IixyKTpRLnVuc3Vic2NyaWJlKHIpKX0pLEE9bnVsbCl9O0EuZm9yRWFjaChRPT5RJiZRLmFkZEV2ZW50TGlzdGVuZXImJlEuYWRkRXZlbnRMaXN0ZW5lcigiYWJvcnQiLHIpKTtsZXR7c2lnbmFsOkN9PWU7cmV0dXJuIEMudW5zdWJzY3JpYmU9ZyxbQywoKT0+e28mJmNsZWFyVGltZW91dChvKSxvPW51bGx9XX0sdnQ9S0k7dmFyIE9JPWZ1bmN0aW9uKihBLHQpe2xldCBlPUEuYnl0ZUxlbmd0aDtpZighdHx8ZTx0KXt5aWVsZCBBO3JldHVybn1sZXQgST0wLHI7Zm9yKDtJPGU7KXI9SSt0LHlpZWxkIEEuc2xpY2UoSSxyKSxJPXJ9LHhJPWFzeW5jIGZ1bmN0aW9uKihBLHQsZSl7Zm9yIGF3YWl0KGxldCBJIG9mIEEpeWllbGQqT0koQXJyYXlCdWZmZXIuaXNWaWV3KEkpP0k6YXdhaXQgZShTdHJpbmcoSSkpLHQpfSxldD0oQSx0LGUsSSxyKT0+e2xldCBvPXhJKEEsdCxyKSxnPTAsQyxRPWE9PntDfHwoQz0hMCxJJiZJKGEpKX07cmV0dXJuIG5ldyBSZWFkYWJsZVN0cmVhbSh7YXN5bmMgcHVsbChhKXt0cnl7bGV0e2RvbmU6bix2YWx1ZTpzfT1hd2FpdCBvLm5leHQoKTtpZihuKXtRKCksYS5jbG9zZSgpO3JldHVybn1sZXQgZj1zLmJ5dGVMZW5ndGg7aWYoZSl7bGV0IEI9Zys9ZjtlKEIpfWEuZW5xdWV1ZShuZXcgVWludDhBcnJheShzKSl9Y2F0Y2gobil7dGhyb3cgUShuKSxufX0sY2FuY2VsKGEpe3JldHVybiBRKGEpLG8ucmV0dXJuKCl9fSx7aGlnaFdhdGVyTWFyazoyfSl9O3ZhciBSQT10eXBlb2YgZmV0Y2g9PSJmdW5jdGlvbiImJnR5cGVvZiBSZXF1ZXN0PT0iZnVuY3Rpb24iJiZ0eXBlb2YgUmVzcG9uc2U9PSJmdW5jdGlvbiIsQWU9UkEmJnR5cGVvZiBSZWFkYWJsZVN0cmVhbT09ImZ1bmN0aW9uIixJdD1SQSYmKHR5cGVvZiBUZXh0RW5jb2Rlcj09ImZ1bmN0aW9uIj8oQT0+dD0+QS5lbmNvZGUodCkpKG5ldyBUZXh0RW5jb2Rlcik6YXN5bmMgQT0+bmV3IFVpbnQ4QXJyYXkoYXdhaXQgbmV3IFJlc3BvbnNlKEEpLmFycmF5QnVmZmVyKCkpKSx0ZT0oQSwuLi50KT0+e3RyeXtyZXR1cm4hIUEoLi4udCl9Y2F0Y2h7cmV0dXJuITF9fSxQST1BZSYmdGUoKCk9PntsZXQgQT0hMSx0PW5ldyBSZXF1ZXN0KHcub3JpZ2luLHtib2R5Om5ldyBSZWFkYWJsZVN0cmVhbSxtZXRob2Q6IlBPU1QiLGdldCBkdXBsZXgoKXtyZXR1cm4gQT0hMCwiaGFsZiJ9fSkuaGVhZGVycy5oYXMoIkNvbnRlbnQtVHlwZSIpO3JldHVybiBBJiYhdH0pLCR0PTY0KjEwMjQscnQ9QWUmJnRlKCgpPT5pLmlzUmVhZGFibGVTdHJlYW0obmV3IFJlc3BvbnNlKCIiKS5ib2R5KSksRkE9e3N0cmVhbTpydCYmKEE9PkEuYm9keSl9O1JBJiYoQT0+e1sidGV4dCIsImFycmF5QnVmZmVyIiwiYmxvYiIsImZvcm1EYXRhIiwic3RyZWFtIl0uZm9yRWFjaCh0PT57IUZBW3RdJiYoRkFbdF09aS5pc0Z1bmN0aW9uKEFbdF0pP2U9PmVbdF0oKTooZSxJKT0+e3Rocm93IG5ldyB1KGBSZXNwb25zZSB0eXBlIFwnJHt0fVwnIGlzIG5vdCBzdXBwb3J0ZWRgLHUuRVJSX05PVF9TVVBQT1JULEkpfSl9KX0pKG5ldyBSZXNwb25zZSk7dmFyIGpJPWFzeW5jIEE9PntpZihBPT1udWxsKXJldHVybiAwO2lmKGkuaXNCbG9iKEEpKXJldHVybiBBLnNpemU7aWYoaS5pc1NwZWNDb21wbGlhbnRGb3JtKEEpKXJldHVybihhd2FpdCBuZXcgUmVxdWVzdChBKS5hcnJheUJ1ZmZlcigpKS5ieXRlTGVuZ3RoO2lmKGkuaXNBcnJheUJ1ZmZlclZpZXcoQSl8fGkuaXNBcnJheUJ1ZmZlcihBKSlyZXR1cm4gQS5ieXRlTGVuZ3RoO2lmKGkuaXNVUkxTZWFyY2hQYXJhbXMoQSkmJihBPUErIiIpLGkuaXNTdHJpbmcoQSkpcmV0dXJuKGF3YWl0IEl0KEEpKS5ieXRlTGVuZ3RofSxXST1hc3luYyhBLHQpPT57bGV0IGU9aS50b0Zpbml0ZU51bWJlcihBLmdldENvbnRlbnRMZW5ndGgoKSk7cmV0dXJuIGU/P2pJKHQpfSxlZT1SQSYmKGFzeW5jIEE9PntsZXR7dXJsOnQsbWV0aG9kOmUsZGF0YTpJLHNpZ25hbDpyLGNhbmNlbFRva2VuOm8sdGltZW91dDpnLG9uRG93bmxvYWRQcm9ncmVzczpDLG9uVXBsb2FkUHJvZ3Jlc3M6USxyZXNwb25zZVR5cGU6YSxoZWFkZXJzOm4sd2l0aENyZWRlbnRpYWxzOnM9InNhbWUtb3JpZ2luIixmZXRjaE9wdGlvbnM6Zn09U0EoQSk7YT1hPyhhKyIiKS50b0xvd2VyQ2FzZSgpOiJ0ZXh0IjtsZXRbQixFXT1yfHxvfHxnP3Z0KFtyLG9dLGcpOltdLGwsYyxwPSgpPT57IWwmJnNldFRpbWVvdXQoKCk9PntCJiZCLnVuc3Vic2NyaWJlKCl9KSxsPSEwfSxTO3RyeXtpZihRJiZQSSYmZSE9PSJnZXQiJiZlIT09ImhlYWQiJiYoUz1hd2FpdCBXSShuLEkpKSE9PTApe2xldCBMPW5ldyBSZXF1ZXN0KHQse21ldGhvZDoiUE9TVCIsYm9keTpJLGR1cGxleDoiaGFsZiJ9KSxKO2lmKGkuaXNGb3JtRGF0YShJKSYmKEo9TC5oZWFkZXJzLmdldCgiY29udGVudC10eXBlIikpJiZuLnNldENvbnRlbnRUeXBlKEopLEwuYm9keSl7bGV0W0hBLENBXT12QShTLF8oJEEoUSkpKTtJPWV0KEwuYm9keSwkdCxIQSxDQSxJdCl9fWkuaXNTdHJpbmcocyl8fChzPXM/ImluY2x1ZGUiOiJvbWl0IiksYz1uZXcgUmVxdWVzdCh0LHsuLi5mLHNpZ25hbDpCLG1ldGhvZDplLnRvVXBwZXJDYXNlKCksaGVhZGVyczpuLm5vcm1hbGl6ZSgpLnRvSlNPTigpLGJvZHk6SSxkdXBsZXg6ImhhbGYiLGNyZWRlbnRpYWxzOnN9KTtsZXQgRD1hd2FpdCBmZXRjaChjKSxVPXJ0JiYoYT09PSJzdHJlYW0ifHxhPT09InJlc3BvbnNlIik7aWYocnQmJihDfHxVKSl7bGV0IEw9e307WyJzdGF0dXMiLCJzdGF0dXNUZXh0IiwiaGVhZGVycyJdLmZvckVhY2goRXQ9PntMW0V0XT1EW0V0XX0pO2xldCBKPWkudG9GaW5pdGVOdW1iZXIoRC5oZWFkZXJzLmdldCgiY29udGVudC1sZW5ndGgiKSksW0hBLENBXT1DJiZ2QShKLF8oJEEoQyksITApKXx8W107RD1uZXcgUmVzcG9uc2UoZXQoRC5ib2R5LCR0LEhBLCgpPT57Q0EmJkNBKCksVSYmcCgpfSxJdCksTCl9YT1hfHwidGV4dCI7bGV0IEs9YXdhaXQgRkFbaS5maW5kS2V5KEZBLGEpfHwidGV4dCJdKEQsQSk7cmV0dXJuIVUmJnAoKSxFJiZFKCksYXdhaXQgbmV3IFByb21pc2UoKEwsSik9PntvQShMLEose2RhdGE6SyxoZWFkZXJzOm0uZnJvbShELmhlYWRlcnMpLHN0YXR1czpELnN0YXR1cyxzdGF0dXNUZXh0OkQuc3RhdHVzVGV4dCxjb25maWc6QSxyZXF1ZXN0OmN9KX0pfWNhdGNoKEQpe3Rocm93IHAoKSxEJiZELm5hbWU9PT0iVHlwZUVycm9yIiYmL2ZldGNoL2kudGVzdChELm1lc3NhZ2UpP09iamVjdC5hc3NpZ24obmV3IHUoIk5ldHdvcmsgRXJyb3IiLHUuRVJSX05FVFdPUkssQSxjKSx7Y2F1c2U6RC5jYXVzZXx8RH0pOnUuZnJvbShELEQmJkQuY29kZSxBLGMpfX0pO3ZhciBvdD17aHR0cDpkQSx4aHI6enQsZmV0Y2g6ZWV9O2kuZm9yRWFjaChvdCwoQSx0KT0+e2lmKEEpe3RyeXtPYmplY3QuZGVmaW5lUHJvcGVydHkoQSwibmFtZSIse3ZhbHVlOnR9KX1jYXRjaHt9T2JqZWN0LmRlZmluZVByb3BlcnR5KEEsImFkYXB0ZXJOYW1lIix7dmFsdWU6dH0pfX0pO3ZhciBJZT1BPT5gLSAke0F9YCxaST1BPT5pLmlzRnVuY3Rpb24oQSl8fEE9PT1udWxsfHxBPT09ITEsTkE9e2dldEFkYXB0ZXI6QT0+e0E9aS5pc0FycmF5KEEpP0E6W0FdO2xldHtsZW5ndGg6dH09QSxlLEkscj17fTtmb3IobGV0IG89MDtvPHQ7bysrKXtlPUFbb107bGV0IGc7aWYoST1lLCFaSShlKSYmKEk9b3RbKGc9U3RyaW5nKGUpKS50b0xvd2VyQ2FzZSgpXSxJPT09dm9pZCAwKSl0aHJvdyBuZXcgdShgVW5rbm93biBhZGFwdGVyIFwnJHtnfVwnYCk7aWYoSSlicmVhaztyW2d8fCIlMjMiK29dPUl9aWYoIUkpe2xldCBvPU9iamVjdC5lbnRyaWVzKHIpLm1hcCgoW0MsUV0pPT5gYWRhcHRlciAke0N9IGArKFE9PT0hMT8iaXMgbm90IHN1cHBvcnRlZCBieSB0aGUgZW52aXJvbm1lbnQiOiJpcyBub3QgYXZhaWxhYmxlIGluIHRoZSBidWlsZCIpKSxnPXQ/by5sZW5ndGg+MT9gc2luY2UgOiUwQWArby5tYXAoSWUpLmpvaW4oYCUwQWApOiIgIitJZShvWzBdKToiYXMgbm8gYWRhcHRlciBzcGVjaWZpZWQiO3Rocm93IG5ldyB1KCJUaGVyZSBpcyBubyBzdWl0YWJsZSBhZGFwdGVyIHRvIGRpc3BhdGNoIHRoZSByZXF1ZXN0ICIrZywiRVJSX05PVF9TVVBQT1JUIil9cmV0dXJuIEl9LGFkYXB0ZXJzOm90fTtmdW5jdGlvbiBndChBKXtpZihBLmNhbmNlbFRva2VuJiZBLmNhbmNlbFRva2VuLnRocm93SWZSZXF1ZXN0ZWQoKSxBLnNpZ25hbCYmQS5zaWduYWwuYWJvcnRlZCl0aHJvdyBuZXcgYihudWxsLEEpfWZ1bmN0aW9uIFVBKEEpe3JldHVybiBndChBKSxBLmhlYWRlcnM9bS5mcm9tKEEuaGVhZGVycyksQS5kYXRhPUlBLmNhbGwoQSxBLnRyYW5zZm9ybVJlcXVlc3QpLFsicG9zdCIsInB1dCIsInBhdGNoIl0uaW5kZXhPZihBLm1ldGhvZCkhPT0tMSYmQS5oZWFkZXJzLnNldENvbnRlbnRUeXBlKCJhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQiLCExKSxOQS5nZXRBZGFwdGVyKEEuYWRhcHRlcnx8Wi5hZGFwdGVyKShBKS50aGVuKGZ1bmN0aW9uKEkpe3JldHVybiBndChBKSxJLmRhdGE9SUEuY2FsbChBLEEudHJhbnNmb3JtUmVzcG9uc2UsSSksSS5oZWFkZXJzPW0uZnJvbShJLmhlYWRlcnMpLEl9LGZ1bmN0aW9uKEkpe3JldHVybiByQShJKXx8KGd0KEEpLEkmJkkucmVzcG9uc2UmJihJLnJlc3BvbnNlLmRhdGE9SUEuY2FsbChBLEEudHJhbnNmb3JtUmVzcG9uc2UsSS5yZXNwb25zZSksSS5yZXNwb25zZS5oZWFkZXJzPW0uZnJvbShJLnJlc3BvbnNlLmhlYWRlcnMpKSksUHJvbWlzZS5yZWplY3QoSSl9KX12YXIgR0E9IjEuNy40Ijt2YXIgaXQ9e307WyJvYmplY3QiLCJib29sZWFuIiwibnVtYmVyIiwiZnVuY3Rpb24iLCJzdHJpbmciLCJzeW1ib2wiXS5mb3JFYWNoKChBLHQpPT57aXRbQV09ZnVuY3Rpb24oSSl7cmV0dXJuIHR5cGVvZiBJPT09QXx8ImEiKyh0PDE/Im4gIjoiICIpK0F9fSk7dmFyIHJlPXt9O2l0LnRyYW5zaXRpb25hbD1mdW5jdGlvbih0LGUsSSl7ZnVuY3Rpb24gcihvLGcpe3JldHVybiJbQXhpb3MgdiIrR0ErIl0gVHJhbnNpdGlvbmFsIG9wdGlvbiBcJyIrbysiXCciK2crKEk/Ii4gIitJOiIiKX1yZXR1cm4obyxnLEMpPT57aWYodD09PSExKXRocm93IG5ldyB1KHIoZywiIGhhcyBiZWVuIHJlbW92ZWQiKyhlPyIgaW4gIitlOiIiKSksdS5FUlJfREVQUkVDQVRFRCk7cmV0dXJuIGUmJiFyZVtnXSYmKHJlW2ddPSEwLGNvbnNvbGUud2FybihyKGcsIiBoYXMgYmVlbiBkZXByZWNhdGVkIHNpbmNlIHYiK2UrIiBhbmQgd2lsbCBiZSByZW1vdmVkIGluIHRoZSBuZWFyIGZ1dHVyZSIpKSksdD90KG8sZyxDKTohMH19O2Z1bmN0aW9uIFZJKEEsdCxlKXtpZih0eXBlb2YgQSE9Im9iamVjdCIpdGhyb3cgbmV3IHUoIm9wdGlvbnMgbXVzdCBiZSBhbiBvYmplY3QiLHUuRVJSX0JBRF9PUFRJT05fVkFMVUUpO2xldCBJPU9iamVjdC5rZXlzKEEpLHI9SS5sZW5ndGg7Zm9yKDtyLS0gPjA7KXtsZXQgbz1JW3JdLGc9dFtvXTtpZihnKXtsZXQgQz1BW29dLFE9Qz09PXZvaWQgMHx8ZyhDLG8sQSk7aWYoUSE9PSEwKXRocm93IG5ldyB1KCJvcHRpb24gIitvKyIgbXVzdCBiZSAiK1EsdS5FUlJfQkFEX09QVElPTl9WQUxVRSk7Y29udGludWV9aWYoZSE9PSEwKXRocm93IG5ldyB1KCJVbmtub3duIG9wdGlvbiAiK28sdS5FUlJfQkFEX09QVElPTil9fXZhciBrQT17YXNzZXJ0T3B0aW9uczpWSSx2YWxpZGF0b3JzOml0fTt2YXIgTT1rQS52YWxpZGF0b3JzLFg9Y2xhc3N7Y29uc3RydWN0b3IodCl7dGhpcy5kZWZhdWx0cz10LHRoaXMuaW50ZXJjZXB0b3JzPXtyZXF1ZXN0Om5ldyBqQSxyZXNwb25zZTpuZXcgakF9fWFzeW5jIHJlcXVlc3QodCxlKXt0cnl7cmV0dXJuIGF3YWl0IHRoaXMuX3JlcXVlc3QodCxlKX1jYXRjaChJKXtpZihJIGluc3RhbmNlb2YgRXJyb3Ipe2xldCByO0Vycm9yLmNhcHR1cmVTdGFja1RyYWNlP0Vycm9yLmNhcHR1cmVTdGFja1RyYWNlKHI9e30pOnI9bmV3IEVycm9yO2xldCBvPXIuc3RhY2s/ci5zdGFjay5yZXBsYWNlKC9eLitcXG4vLCIiKToiIjt0cnl7SS5zdGFjaz9vJiYhU3RyaW5nKEkuc3RhY2spLmVuZHNXaXRoKG8ucmVwbGFjZSgvXi4rXFxuLitcXG4vLCIiKSkmJihJLnN0YWNrKz1gJTBBYCtvKTpJLnN0YWNrPW99Y2F0Y2h7fX10aHJvdyBJfX1fcmVxdWVzdCh0LGUpe3R5cGVvZiB0PT0ic3RyaW5nIj8oZT1lfHx7fSxlLnVybD10KTplPXR8fHt9LGU9ayh0aGlzLmRlZmF1bHRzLGUpO2xldHt0cmFuc2l0aW9uYWw6SSxwYXJhbXNTZXJpYWxpemVyOnIsaGVhZGVyczpvfT1lO0khPT12b2lkIDAmJmtBLmFzc2VydE9wdGlvbnMoSSx7c2lsZW50SlNPTlBhcnNpbmc6TS50cmFuc2l0aW9uYWwoTS5ib29sZWFuKSxmb3JjZWRKU09OUGFyc2luZzpNLnRyYW5zaXRpb25hbChNLmJvb2xlYW4pLGNsYXJpZnlUaW1lb3V0RXJyb3I6TS50cmFuc2l0aW9uYWwoTS5ib29sZWFuKX0sITEpLHIhPW51bGwmJihpLmlzRnVuY3Rpb24ocik/ZS5wYXJhbXNTZXJpYWxpemVyPXtzZXJpYWxpemU6cn06a0EuYXNzZXJ0T3B0aW9ucyhyLHtlbmNvZGU6TS5mdW5jdGlvbixzZXJpYWxpemU6TS5mdW5jdGlvbn0sITApKSxlLm1ldGhvZD0oZS5tZXRob2R8fHRoaXMuZGVmYXVsdHMubWV0aG9kfHwiZ2V0IikudG9Mb3dlckNhc2UoKTtsZXQgZz1vJiZpLm1lcmdlKG8uY29tbW9uLG9bZS5tZXRob2RdKTtvJiZpLmZvckVhY2goWyJkZWxldGUiLCJnZXQiLCJoZWFkIiwicG9zdCIsInB1dCIsInBhdGNoIiwiY29tbW9uIl0sRT0+e2RlbGV0ZSBvW0VdfSksZS5oZWFkZXJzPW0uY29uY2F0KGcsbyk7bGV0IEM9W10sUT0hMDt0aGlzLmludGVyY2VwdG9ycy5yZXF1ZXN0LmZvckVhY2goZnVuY3Rpb24obCl7dHlwZW9mIGwucnVuV2hlbj09ImZ1bmN0aW9uIiYmbC5ydW5XaGVuKGUpPT09ITF8fChRPVEmJmwuc3luY2hyb25vdXMsQy51bnNoaWZ0KGwuZnVsZmlsbGVkLGwucmVqZWN0ZWQpKX0pO2xldCBhPVtdO3RoaXMuaW50ZXJjZXB0b3JzLnJlc3BvbnNlLmZvckVhY2goZnVuY3Rpb24obCl7YS5wdXNoKGwuZnVsZmlsbGVkLGwucmVqZWN0ZWQpfSk7bGV0IG4scz0wLGY7aWYoIVEpe2xldCBFPVtVQS5iaW5kKHRoaXMpLHZvaWQgMF07Zm9yKEUudW5zaGlmdC5hcHBseShFLEMpLEUucHVzaC5hcHBseShFLGEpLGY9RS5sZW5ndGgsbj1Qcm9taXNlLnJlc29sdmUoZSk7czxmOyluPW4udGhlbihFW3MrK10sRVtzKytdKTtyZXR1cm4gbn1mPUMubGVuZ3RoO2xldCBCPWU7Zm9yKHM9MDtzPGY7KXtsZXQgRT1DW3MrK10sbD1DW3MrK107dHJ5e0I9RShCKX1jYXRjaChjKXtsLmNhbGwodGhpcyxjKTticmVha319dHJ5e249VUEuY2FsbCh0aGlzLEIpfWNhdGNoKEUpe3JldHVybiBQcm9taXNlLnJlamVjdChFKX1mb3Iocz0wLGY9YS5sZW5ndGg7czxmOyluPW4udGhlbihhW3MrK10sYVtzKytdKTtyZXR1cm4gbn1nZXRVcmkodCl7dD1rKHRoaXMuZGVmYXVsdHMsdCk7bGV0IGU9Z0EodC5iYXNlVVJMLHQudXJsKTtyZXR1cm4gdEEoZSx0LnBhcmFtcyx0LnBhcmFtc1NlcmlhbGl6ZXIpfX07aS5mb3JFYWNoKFsiZGVsZXRlIiwiZ2V0IiwiaGVhZCIsIm9wdGlvbnMiXSxmdW5jdGlvbih0KXtYLnByb3RvdHlwZVt0XT1mdW5jdGlvbihlLEkpe3JldHVybiB0aGlzLnJlcXVlc3QoayhJfHx7fSx7bWV0aG9kOnQsdXJsOmUsZGF0YTooSXx8e30pLmRhdGF9KSl9fSk7aS5mb3JFYWNoKFsicG9zdCIsInB1dCIsInBhdGNoIl0sZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShJKXtyZXR1cm4gZnVuY3Rpb24obyxnLEMpe3JldHVybiB0aGlzLnJlcXVlc3QoayhDfHx7fSx7bWV0aG9kOnQsaGVhZGVyczpJP3siQ29udGVudC1UeXBlIjoibXVsdGlwYXJ0L2Zvcm0tZGF0YSJ9Ont9LHVybDpvLGRhdGE6Z30pKX19WC5wcm90b3R5cGVbdF09ZSgpLFgucHJvdG90eXBlW3QrIkZvcm0iXT1lKCEwKX0pO3ZhciBpQT1YO3ZhciBudD1jbGFzcyBBe2NvbnN0cnVjdG9yKHQpe2lmKHR5cGVvZiB0IT0iZnVuY3Rpb24iKXRocm93IG5ldyBUeXBlRXJyb3IoImV4ZWN1dG9yIG11c3QgYmUgYSBmdW5jdGlvbi4iKTtsZXQgZTt0aGlzLnByb21pc2U9bmV3IFByb21pc2UoZnVuY3Rpb24obyl7ZT1vfSk7bGV0IEk9dGhpczt0aGlzLnByb21pc2UudGhlbihyPT57aWYoIUkuX2xpc3RlbmVycylyZXR1cm47bGV0IG89SS5fbGlzdGVuZXJzLmxlbmd0aDtmb3IoO28tLSA+MDspSS5fbGlzdGVuZXJzW29dKHIpO0kuX2xpc3RlbmVycz1udWxsfSksdGhpcy5wcm9taXNlLnRoZW49cj0+e2xldCBvLGc9bmV3IFByb21pc2UoQz0+e0kuc3Vic2NyaWJlKEMpLG89Q30pLnRoZW4ocik7cmV0dXJuIGcuY2FuY2VsPWZ1bmN0aW9uKCl7SS51bnN1YnNjcmliZShvKX0sZ30sdChmdW5jdGlvbihvLGcsQyl7SS5yZWFzb258fChJLnJlYXNvbj1uZXcgYihvLGcsQyksZShJLnJlYXNvbikpfSl9dGhyb3dJZlJlcXVlc3RlZCgpe2lmKHRoaXMucmVhc29uKXRocm93IHRoaXMucmVhc29ufXN1YnNjcmliZSh0KXtpZih0aGlzLnJlYXNvbil7dCh0aGlzLnJlYXNvbik7cmV0dXJufXRoaXMuX2xpc3RlbmVycz90aGlzLl9saXN0ZW5lcnMucHVzaCh0KTp0aGlzLl9saXN0ZW5lcnM9W3RdfXVuc3Vic2NyaWJlKHQpe2lmKCF0aGlzLl9saXN0ZW5lcnMpcmV0dXJuO2xldCBlPXRoaXMuX2xpc3RlbmVycy5pbmRleE9mKHQpO2UhPT0tMSYmdGhpcy5fbGlzdGVuZXJzLnNwbGljZShlLDEpfXN0YXRpYyBzb3VyY2UoKXtsZXQgdDtyZXR1cm57dG9rZW46bmV3IEEoZnVuY3Rpb24ocil7dD1yfSksY2FuY2VsOnR9fX0sb2U9bnQ7ZnVuY3Rpb24gc3QoQSl7cmV0dXJuIGZ1bmN0aW9uKGUpe3JldHVybiBBLmFwcGx5KG51bGwsZSl9fWZ1bmN0aW9uIEN0KEEpe3JldHVybiBpLmlzT2JqZWN0KEEpJiZBLmlzQXhpb3NFcnJvcj09PSEwfXZhciBCdD17Q29udGludWU6MTAwLFN3aXRjaGluZ1Byb3RvY29sczoxMDEsUHJvY2Vzc2luZzoxMDIsRWFybHlIaW50czoxMDMsT2s6MjAwLENyZWF0ZWQ6MjAxLEFjY2VwdGVkOjIwMixOb25BdXRob3JpdGF0aXZlSW5mb3JtYXRpb246MjAzLE5vQ29udGVudDoyMDQsUmVzZXRDb250ZW50OjIwNSxQYXJ0aWFsQ29udGVudDoyMDYsTXVsdGlTdGF0dXM6MjA3LEFscmVhZHlSZXBvcnRlZDoyMDgsSW1Vc2VkOjIyNixNdWx0aXBsZUNob2ljZXM6MzAwLE1vdmVkUGVybWFuZW50bHk6MzAxLEZvdW5kOjMwMixTZWVPdGhlcjozMDMsTm90TW9kaWZpZWQ6MzA0LFVzZVByb3h5OjMwNSxVbnVzZWQ6MzA2LFRlbXBvcmFyeVJlZGlyZWN0OjMwNyxQZXJtYW5lbnRSZWRpcmVjdDozMDgsQmFkUmVxdWVzdDo0MDAsVW5hdXRob3JpemVkOjQwMSxQYXltZW50UmVxdWlyZWQ6NDAyLEZvcmJpZGRlbjo0MDMsTm90Rm91bmQ6NDA0LE1ldGhvZE5vdEFsbG93ZWQ6NDA1LE5vdEFjY2VwdGFibGU6NDA2LFByb3h5QXV0aGVudGljYXRpb25SZXF1aXJlZDo0MDcsUmVxdWVzdFRpbWVvdXQ6NDA4LENvbmZsaWN0OjQwOSxHb25lOjQxMCxMZW5ndGhSZXF1aXJlZDo0MTEsUHJlY29uZGl0aW9uRmFpbGVkOjQxMixQYXlsb2FkVG9vTGFyZ2U6NDEzLFVyaVRvb0xvbmc6NDE0LFVuc3VwcG9ydGVkTWVkaWFUeXBlOjQxNSxSYW5nZU5vdFNhdGlzZmlhYmxlOjQxNixFeHBlY3RhdGlvbkZhaWxlZDo0MTcsSW1BVGVhcG90OjQxOCxNaXNkaXJlY3RlZFJlcXVlc3Q6NDIxLFVucHJvY2Vzc2FibGVFbnRpdHk6NDIyLExvY2tlZDo0MjMsRmFpbGVkRGVwZW5kZW5jeTo0MjQsVG9vRWFybHk6NDI1LFVwZ3JhZGVSZXF1aXJlZDo0MjYsUHJlY29uZGl0aW9uUmVxdWlyZWQ6NDI4LFRvb01hbnlSZXF1ZXN0czo0MjksUmVxdWVzdEhlYWRlckZpZWxkc1Rvb0xhcmdlOjQzMSxVbmF2YWlsYWJsZUZvckxlZ2FsUmVhc29uczo0NTEsSW50ZXJuYWxTZXJ2ZXJFcnJvcjo1MDAsTm90SW1wbGVtZW50ZWQ6NTAxLEJhZEdhdGV3YXk6NTAyLFNlcnZpY2VVbmF2YWlsYWJsZTo1MDMsR2F0ZXdheVRpbWVvdXQ6NTA0LEh0dHBWZXJzaW9uTm90U3VwcG9ydGVkOjUwNSxWYXJpYW50QWxzb05lZ290aWF0ZXM6NTA2LEluc3VmZmljaWVudFN0b3JhZ2U6NTA3LExvb3BEZXRlY3RlZDo1MDgsTm90RXh0ZW5kZWQ6NTEwLE5ldHdvcmtBdXRoZW50aWNhdGlvblJlcXVpcmVkOjUxMX07T2JqZWN0LmVudHJpZXMoQnQpLmZvckVhY2goKFtBLHRdKT0+e0J0W3RdPUF9KTt2YXIgZ2U9QnQ7ZnVuY3Rpb24gaWUoQSl7bGV0IHQ9bmV3IGlBKEEpLGU9dihpQS5wcm90b3R5cGUucmVxdWVzdCx0KTtyZXR1cm4gaS5leHRlbmQoZSxpQS5wcm90b3R5cGUsdCx7YWxsT3duS2V5czohMH0pLGkuZXh0ZW5kKGUsdCxudWxsLHthbGxPd25LZXlzOiEwfSksZS5jcmVhdGU9ZnVuY3Rpb24ocil7cmV0dXJuIGllKGsoQSxyKSl9LGV9dmFyIGQ9aWUoWik7ZC5BeGlvcz1pQTtkLkNhbmNlbGVkRXJyb3I9YjtkLkNhbmNlbFRva2VuPW9lO2QuaXNDYW5jZWw9ckE7ZC5WRVJTSU9OPUdBO2QudG9Gb3JtRGF0YT1xO2QuQXhpb3NFcnJvcj11O2QuQ2FuY2VsPWQuQ2FuY2VsZWRFcnJvcjtkLmFsbD1mdW5jdGlvbih0KXtyZXR1cm4gUHJvbWlzZS5hbGwodCl9O2Quc3ByZWFkPXN0O2QuaXNBeGlvc0Vycm9yPUN0O2QubWVyZ2VDb25maWc9aztkLkF4aW9zSGVhZGVycz1tO2QuZm9ybVRvSlNPTj1BPT53QShpLmlzSFRNTEZvcm0oQSk/bmV3IEZvcm1EYXRhKEEpOkEpO2QuZ2V0QWRhcHRlcj1OQS5nZXRBZGFwdGVyO2QuSHR0cFN0YXR1c0NvZGU9Z2U7ZC5kZWZhdWx0PWQ7dmFyIExBPWQ7dmFye0F4aW9zOkVpLEF4aW9zRXJyb3I6Y2ksQ2FuY2VsZWRFcnJvcjpmaSxpc0NhbmNlbDpsaSxDYW5jZWxUb2tlbjp1aSxWRVJTSU9OOkRpLGFsbDpoaSxDYW5jZWw6ZGksaXNBeGlvc0Vycm9yOnlpLHNwcmVhZDptaSx0b0Zvcm1EYXRhOndpLEF4aW9zSGVhZGVyczpwaSxIdHRwU3RhdHVzQ29kZTpTaSxmb3JtVG9KU09OOkZpLGdldEFkYXB0ZXI6UmksbWVyZ2VDb25maWc6Tml9PUxBO3ZhciBuQSxZLFF0LGF0PXtlbnY6e2Vtc2NyaXB0ZW5fbm90aWZ5X21lbW9yeV9ncm93dGg6ZnVuY3Rpb24oQSl7UXQ9bmV3IFVpbnQ4QXJyYXkoWS5leHBvcnRzLm1lbW9yeS5idWZmZXIpfX19LEpBPWNsYXNze2luaXQoKXtyZXR1cm4gbkF8fCh0eXBlb2YgZmV0Y2g8InUiP25BPWZldGNoKCJkYXRhOmFwcGxpY2F0aW9uL3dhc207YmFzZTY0LCIrbmUpLnRoZW4odD0+dC5hcnJheUJ1ZmZlcigpKS50aGVuKHQ9PldlYkFzc2VtYmx5Lmluc3RhbnRpYXRlKHQsYXQpKS50aGVuKHRoaXMuX2luaXQpOm5BPVdlYkFzc2VtYmx5Lmluc3RhbnRpYXRlKEJ1ZmZlci5mcm9tKG5lLCJiYXNlNjQiKSxhdCkudGhlbih0aGlzLl9pbml0KSxuQSl9X2luaXQodCl7WT10Lmluc3RhbmNlLGF0LmVudi5lbXNjcmlwdGVuX25vdGlmeV9tZW1vcnlfZ3Jvd3RoKDApfWRlY29kZSh0LGU9MCl7aWYoIVkpdGhyb3cgbmV3IEVycm9yKCJaU1RERGVjb2RlcjogQXdhaXQgLmluaXQoKSBiZWZvcmUgZGVjb2RpbmcuIik7bGV0IEk9dC5ieXRlTGVuZ3RoLHI9WS5leHBvcnRzLm1hbGxvYyhJKTtRdC5zZXQodCxyKSxlPWV8fE51bWJlcihZLmV4cG9ydHMuWlNURF9maW5kRGVjb21wcmVzc2VkU2l6ZShyLEkpKTtsZXQgbz1ZLmV4cG9ydHMubWFsbG9jKGUpLGc9WS5leHBvcnRzLlpTVERfZGVjb21wcmVzcyhvLGUscixJKSxDPVF0LnNsaWNlKG8sbytnKTtyZXR1cm4gWS5leHBvcnRzLmZyZWUociksWS5leHBvcnRzLmZyZWUobyksQ319LG5lPSJBR0Z6YlFFQUFBQUJiZzVnQTM5L2Z3Ri9ZQUYvQVg5Z0FuOS9BR0FCZndCZ0JYOS9mMzkvQVg5Z0EzOS9md0JnQkg5L2YzOEJmMkFBQVg5Z0FuOS9BWDlnQjM5L2YzOS9mMzhCZjJBQ2YzOEJmbUFJZjM5L2YzOS9mMzhCZjJBRmYzOS9mMzhBWUE1L2YzOS9mMzkvZjM5L2YzOS9md0YvQWljQkEyVnVkaDlsYlhOamNtbHdkR1Z1WDI1dmRHbG1lVjl0WlcxdmNubGZaM0p2ZDNSb0FBTURJeUlIQUFBQkFRTUhBd0VBQ1FRQUJRRUlDQUVGQmdRRUJBTUdBQUFLQUFVTERBMEdCQVVCY0FFQkFRVUhBUUdBQW9DQUFnWUlBWDhCUVlDakJBc0hyZ0VMQm0xbGJXOXllUUlBQm0xaGJHeHZZd0FGQkdaeVpXVUFCZ3hhVTFSRVgybHpSWEp5YjNJQUVobGFVMVJFWDJacGJtUkVaV052YlhCeVpYTnpaV1JUYVhwbEFCd1BXbE5VUkY5a1pXTnZiWEJ5WlhOekFDSVpYMTlwYm1ScGNtVmpkRjltZFc1amRHbHZibDkwWVdKc1pRRUFFRjlmWlhKeWJtOWZiRzlqWVhScGIyNEFBUWx6ZEdGamExTmhkbVVBQnd4emRHRmphMUpsYzNSdmNtVUFDQXB6ZEdGamEwRnNiRzlqQUFrS2kvSUJJZ1VBUVlRZkN6TUJBWDhnQWdSQUlBQWhBd05BSUFNZ0FTMEFBRG9BQUNBRFFRRnFJUU1nQVVFQmFpRUJJQUpCQVdzaUFnMEFDd3NnQUFzcEFRRi9JQUlFUUNBQUlRTURRQ0FESUFFNkFBQWdBMEVCYWlFRElBSkJBV3NpQWcwQUN3c2dBQXRzQVFKL1FZQWZLQUlBSWdFZ0FFRUhha0Y0Y1NJQ2FpRUFBa0FnQWtFQUlBQWdBVTBiRFFBZ0FEOEFRUkIwU3dSQUlBQS9BRUVRZEd0Qi8vOERha0VRZGtBQVFYOUdCSDlCQUFWQkFCQUFRUUVMUlEwQkMwR0FIeUFBTmdJQUlBRVBDMEdFSDBFd05nSUFRWDhMdVNjQkMzOGpBRUVRYXlJS0pBQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFJQUJCOUFGTkJFQkJpQjhvQWdBaUJrRVFJQUJCQzJwQmVIRWdBRUVMU1JzaUJVRURkaUlBZGlJQlFRTnhCRUFDUUNBQlFYOXpRUUZ4SUFCcUlnSkJBM1FpQVVHd0gyb2lBQ0FCUWJnZmFpZ0NBQ0lCS0FJSUlnUkdCRUJCaUI4Z0JrRitJQUozY1RZQ0FBd0JDeUFFSUFBMkFnd2dBQ0FFTmdJSUN5QUJRUWhxSVFBZ0FTQUNRUU4wSWdKQkEzSTJBZ1FnQVNBQ2FpSUJJQUVvQWdSQkFYSTJBZ1FNRHdzZ0JVR1FIeWdDQUNJSFRRMEJJQUVFUUFKQVFRSWdBSFFpQWtFQUlBSnJjaUFCSUFCMGNXZ2lBVUVEZENJQVFiQWZhaUlDSUFCQnVCOXFLQUlBSWdBb0FnZ2lCRVlFUUVHSUh5QUdRWDRnQVhkeElnWTJBZ0FNQVFzZ0JDQUNOZ0lNSUFJZ0JEWUNDQXNnQUNBRlFRTnlOZ0lFSUFBZ0JXb2lDQ0FCUVFOMElnRWdCV3NpQkVFQmNqWUNCQ0FBSUFGcUlBUTJBZ0FnQndSQUlBZEJlSEZCc0I5cUlRRkJuQjhvQWdBaEFnSi9JQVpCQVNBSFFRTjJkQ0lEY1VVRVFFR0lIeUFESUFaeU5nSUFJQUVNQVFzZ0FTZ0NDQXNoQXlBQklBSTJBZ2dnQXlBQ05nSU1JQUlnQVRZQ0RDQUNJQU0yQWdnTElBQkJDR29oQUVHY0h5QUlOZ0lBUVpBZklBUTJBZ0FNRHd0QmpCOG9BZ0FpQzBVTkFTQUxhRUVDZEVHNElXb29BZ0FpQWlnQ0JFRjRjU0FGYXlFRElBSWhBUU5BQWtBZ0FTZ0NFQ0lBUlFSQUlBRW9BaFFpQUVVTkFRc2dBQ2dDQkVGNGNTQUZheUlCSUFNZ0FTQURTU0lCR3lFRElBQWdBaUFCR3lFQ0lBQWhBUXdCQ3dzZ0FpZ0NHQ0VKSUFJZ0FpZ0NEQ0lFUndSQVFaZ2ZLQUlBR2lBQ0tBSUlJZ0FnQkRZQ0RDQUVJQUEyQWdnTURnc2dBa0VVYWlJQktBSUFJZ0JGQkVBZ0FpZ0NFQ0lBUlEwRElBSkJFR29oQVFzRFFDQUJJUWdnQUNJRVFSUnFJZ0VvQWdBaUFBMEFJQVJCRUdvaEFTQUVLQUlRSWdBTkFBc2dDRUVBTmdJQURBMExRWDhoQlNBQVFiOS9TdzBBSUFCQkMyb2lBRUY0Y1NFRlFZd2ZLQUlBSWdoRkRRQkJBQ0FGYXlFREFrQUNRQUpBQW45QkFDQUZRWUFDU1EwQUdrRWZJQVZCLy8vL0Iwc05BQm9nQlVFbUlBQkJDSFpuSWdCcmRrRUJjU0FBUVFGMGEwRSthZ3NpQjBFQ2RFRzRJV29vQWdBaUFVVUVRRUVBSVFBTUFRdEJBQ0VBSUFWQkdTQUhRUUYyYTBFQUlBZEJIMGNiZENFQ0EwQUNRQ0FCS0FJRVFYaHhJQVZySWdZZ0EwOE5BQ0FCSVFRZ0JpSUREUUJCQUNFRElBRWhBQXdEQ3lBQUlBRW9BaFFpQmlBR0lBRWdBa0VkZGtFRWNXb29BaEFpQVVZYklBQWdCaHNoQUNBQ1FRRjBJUUlnQVEwQUN3c2dBQ0FFY2tVRVFFRUFJUVJCQWlBSGRDSUFRUUFnQUd0eUlBaHhJZ0JGRFFNZ0FHaEJBblJCdUNGcUtBSUFJUUFMSUFCRkRRRUxBMEFnQUNnQ0JFRjRjU0FGYXlJQ0lBTkpJUUVnQWlBRElBRWJJUU1nQUNBRUlBRWJJUVFnQUNnQ0VDSUJCSDhnQVFVZ0FDZ0NGQXNpQUEwQUN3c2dCRVVOQUNBRFFaQWZLQUlBSUFWclR3MEFJQVFvQWhnaEJ5QUVJQVFvQWd3aUFrY0VRRUdZSHlnQ0FCb2dCQ2dDQ0NJQUlBSTJBZ3dnQWlBQU5nSUlEQXdMSUFSQkZHb2lBU2dDQUNJQVJRUkFJQVFvQWhBaUFFVU5BeUFFUVJCcUlRRUxBMEFnQVNFR0lBQWlBa0VVYWlJQktBSUFJZ0FOQUNBQ1FSQnFJUUVnQWlnQ0VDSUFEUUFMSUFaQkFEWUNBQXdMQ3lBRlFaQWZLQUlBSWdSTkJFQkJuQjhvQWdBaEFBSkFJQVFnQldzaUFVRVFUd1JBSUFBZ0JXb2lBaUFCUVFGeU5nSUVJQUFnQkdvZ0FUWUNBQ0FBSUFWQkEzSTJBZ1FNQVFzZ0FDQUVRUU55TmdJRUlBQWdCR29pQVNBQktBSUVRUUZ5TmdJRVFRQWhBa0VBSVFFTFFaQWZJQUUyQWdCQm5COGdBallDQUNBQVFRaHFJUUFNRFFzZ0JVR1VIeWdDQUNJQ1NRUkFRWlFmSUFJZ0JXc2lBVFlDQUVHZ0gwR2dIeWdDQUNJQUlBVnFJZ0kyQWdBZ0FpQUJRUUZ5TmdJRUlBQWdCVUVEY2pZQ0JDQUFRUWhxSVFBTURRdEJBQ0VBSUFWQkwyb2lBd0ovUWVBaUtBSUFCRUJCNkNJb0FnQU1BUXRCN0NKQ2Z6Y0NBRUhrSWtLQW9JQ0FnSUFFTndJQVFlQWlJQXBCREdwQmNIRkIyS3JWcWdWek5nSUFRZlFpUVFBMkFnQkJ4Q0pCQURZQ0FFR0FJQXNpQVdvaUJrRUFJQUZySWdoeElnRWdCVTBOREVIQUlpZ0NBQ0lFQkVCQnVDSW9BZ0FpQnlBQmFpSUpJQWROSUFRZ0NVbHlEUTBMQWtCQnhDSXRBQUJCQkhGRkJFQUNRQUpBQWtBQ1FFR2dIeWdDQUNJRUJFQkJ5Q0loQUFOQUlBUWdBQ2dDQUNJSFR3UkFJQWNnQUNnQ0JHb2dCRXNOQXdzZ0FDZ0NDQ0lBRFFBTEMwRUFFQVFpQWtGL1JnMERJQUVoQmtIa0lpZ0NBQ0lBUVFGcklnUWdBbkVFUUNBQklBSnJJQUlnQkdwQkFDQUFhM0ZxSVFZTElBVWdCazhOQTBIQUlpZ0NBQ0lBQkVCQnVDSW9BZ0FpQkNBR2FpSUlJQVJOSUFBZ0NFbHlEUVFMSUFZUUJDSUFJQUpIRFFFTUJRc2dCaUFDYXlBSWNTSUdFQVFpQWlBQUtBSUFJQUFvQWdScVJnMEJJQUloQUFzZ0FFRi9SZzBCSUFWQk1Hb2dCazBFUUNBQUlRSU1CQXRCNkNJb0FnQWlBaUFESUFacmFrRUFJQUpyY1NJQ0VBUkJmMFlOQVNBQ0lBWnFJUVlnQUNFQ0RBTUxJQUpCZjBjTkFndEJ4Q0pCeENJb0FnQkJCSEkyQWdBTElBRVFCQ0lDUVg5R1FRQVFCQ0lBUVg5R2NpQUFJQUpOY2cwRklBQWdBbXNpQmlBRlFTaHFUUTBGQzBHNElrRzRJaWdDQUNBR2FpSUFOZ0lBUWJ3aUtBSUFJQUJKQkVCQnZDSWdBRFlDQUFzQ1FFR2dIeWdDQUNJREJFQkJ5Q0loQUFOQUlBSWdBQ2dDQUNJQklBQW9BZ1FpQkdwR0RRSWdBQ2dDQ0NJQURRQUxEQVFMUVpnZktBSUFJZ0JCQUNBQUlBSk5HMFVFUUVHWUh5QUNOZ0lBQzBFQUlRQkJ6Q0lnQmpZQ0FFSElJaUFDTmdJQVFhZ2ZRWDgyQWdCQnJCOUI0Q0lvQWdBMkFnQkIxQ0pCQURZQ0FBTkFJQUJCQTNRaUFVRzRIMm9nQVVHd0gyb2lCRFlDQUNBQlFid2ZhaUFFTmdJQUlBQkJBV29pQUVFZ1J3MEFDMEdVSHlBR1FTaHJJZ0JCZUNBQ2EwRUhjU0lCYXlJRU5nSUFRYUFmSUFFZ0Ftb2lBVFlDQUNBQklBUkJBWEkyQWdRZ0FDQUNha0VvTmdJRVFhUWZRZkFpS0FJQU5nSUFEQVFMSUFJZ0EwMGdBU0FEUzNJTkFpQUFLQUlNUVFoeERRSWdBQ0FFSUFacU5nSUVRYUFmSUFOQmVDQURhMEVIY1NJQWFpSUJOZ0lBUVpRZlFaUWZLQUlBSUFacUlnSWdBR3NpQURZQ0FDQUJJQUJCQVhJMkFnUWdBaUFEYWtFb05nSUVRYVFmUWZBaUtBSUFOZ0lBREFNTFFRQWhCQXdLQzBFQUlRSU1DQXRCbUI4b0FnQWdBa3NFUUVHWUh5QUNOZ0lBQ3lBQ0lBWnFJUUZCeUNJaEFBSkFBa0FDUUFOQUlBRWdBQ2dDQUVjRVFDQUFLQUlJSWdBTkFRd0NDd3NnQUMwQURFRUljVVVOQVF0QnlDSWhBQU5BSUFNZ0FDZ0NBQ0lCVHdSQUlBRWdBQ2dDQkdvaUJDQURTdzBEQ3lBQUtBSUlJUUFNQUFzQUN5QUFJQUkyQWdBZ0FDQUFLQUlFSUFacU5nSUVJQUpCZUNBQ2EwRUhjV29pQnlBRlFRTnlOZ0lFSUFGQmVDQUJhMEVIY1dvaUJpQUZJQWRxSWdWcklRQWdBeUFHUmdSQVFhQWZJQVUyQWdCQmxCOUJsQjhvQWdBZ0FHb2lBRFlDQUNBRklBQkJBWEkyQWdRTUNBdEJuQjhvQWdBZ0JrWUVRRUdjSHlBRk5nSUFRWkFmUVpBZktBSUFJQUJxSWdBMkFnQWdCU0FBUVFGeU5nSUVJQUFnQldvZ0FEWUNBQXdJQ3lBR0tBSUVJZ05CQTNGQkFVY05CaUFEUVhoeElRa2dBMEgvQVUwRVFDQUdLQUlNSWdFZ0JpZ0NDQ0lDUmdSQVFZZ2ZRWWdmS0FJQVFYNGdBMEVEZG5keE5nSUFEQWNMSUFJZ0FUWUNEQ0FCSUFJMkFnZ01CZ3NnQmlnQ0dDRUlJQVlnQmlnQ0RDSUNSd1JBSUFZb0FnZ2lBU0FDTmdJTUlBSWdBVFlDQ0F3RkN5QUdRUlJxSWdFb0FnQWlBMFVFUUNBR0tBSVFJZ05GRFFRZ0JrRVFhaUVCQ3dOQUlBRWhCQ0FESWdKQkZHb2lBU2dDQUNJRERRQWdBa0VRYWlFQklBSW9BaEFpQXcwQUN5QUVRUUEyQWdBTUJBdEJsQjhnQmtFb2F5SUFRWGdnQW10QkIzRWlBV3NpQ0RZQ0FFR2dIeUFCSUFKcUlnRTJBZ0FnQVNBSVFRRnlOZ0lFSUFBZ0FtcEJLRFlDQkVHa0gwSHdJaWdDQURZQ0FDQURJQVJCSnlBRWEwRUhjV3BCTDJzaUFDQUFJQU5CRUdwSkd5SUJRUnMyQWdRZ0FVSFFJaWtDQURjQ0VDQUJRY2dpS1FJQU53SUlRZEFpSUFGQkNHbzJBZ0JCekNJZ0JqWUNBRUhJSWlBQ05nSUFRZFFpUVFBMkFnQWdBVUVZYWlFQUEwQWdBRUVITmdJRUlBQkJDR29nQUVFRWFpRUFJQVJKRFFBTElBRWdBMFlOQUNBQklBRW9BZ1JCZm5FMkFnUWdBeUFCSUFOcklnSkJBWEkyQWdRZ0FTQUNOZ0lBSUFKQi93Rk5CRUFnQWtGNGNVR3dIMm9oQUFKL1FZZ2ZLQUlBSWdGQkFTQUNRUU4yZENJQ2NVVUVRRUdJSHlBQklBSnlOZ0lBSUFBTUFRc2dBQ2dDQ0FzaEFTQUFJQU0yQWdnZ0FTQUROZ0lNSUFNZ0FEWUNEQ0FESUFFMkFnZ01BUXRCSHlFQUlBSkIvLy8vQjAwRVFDQUNRU1lnQWtFSWRtY2lBR3QyUVFGeElBQkJBWFJyUVQ1cUlRQUxJQU1nQURZQ0hDQURRZ0EzQWhBZ0FFRUNkRUc0SVdvaEFRSkFBa0JCakI4b0FnQWlCRUVCSUFCMElnWnhSUVJBUVl3ZklBUWdCbkkyQWdBZ0FTQUROZ0lBREFFTElBSkJHU0FBUVFGMmEwRUFJQUJCSDBjYmRDRUFJQUVvQWdBaEJBTkFJQVFpQVNnQ0JFRjRjU0FDUmcwQ0lBQkJIWFloQkNBQVFRRjBJUUFnQVNBRVFRUnhhaUlHS0FJUUlnUU5BQXNnQmlBRE5nSVFDeUFESUFFMkFoZ2dBeUFETmdJTUlBTWdBellDQ0F3QkN5QUJLQUlJSWdBZ0F6WUNEQ0FCSUFNMkFnZ2dBMEVBTmdJWUlBTWdBVFlDRENBRElBQTJBZ2dMUVpRZktBSUFJZ0FnQlUwTkFFR1VIeUFBSUFWcklnRTJBZ0JCb0I5Qm9COG9BZ0FpQUNBRmFpSUNOZ0lBSUFJZ0FVRUJjallDQkNBQUlBVkJBM0kyQWdRZ0FFRUlhaUVBREFnTFFZUWZRVEEyQWdCQkFDRUFEQWNMUVFBaEFnc2dDRVVOQUFKQUlBWW9BaHdpQVVFQ2RFRzRJV29pQkNnQ0FDQUdSZ1JBSUFRZ0FqWUNBQ0FDRFFGQmpCOUJqQjhvQWdCQmZpQUJkM0UyQWdBTUFnc2dDRUVRUVJRZ0NDZ0NFQ0FHUmh0cUlBSTJBZ0FnQWtVTkFRc2dBaUFJTmdJWUlBWW9BaEFpQVFSQUlBSWdBVFlDRUNBQklBSTJBaGdMSUFZb0FoUWlBVVVOQUNBQ0lBRTJBaFFnQVNBQ05nSVlDeUFBSUFscUlRQWdCaUFKYWlJR0tBSUVJUU1MSUFZZ0EwRitjVFlDQkNBRklBQkJBWEkyQWdRZ0FDQUZhaUFBTmdJQUlBQkIvd0ZOQkVBZ0FFRjRjVUd3SDJvaEFRSi9RWWdmS0FJQUlnSkJBU0FBUVFOMmRDSUFjVVVFUUVHSUh5QUFJQUp5TmdJQUlBRU1BUXNnQVNnQ0NBc2hBQ0FCSUFVMkFnZ2dBQ0FGTmdJTUlBVWdBVFlDRENBRklBQTJBZ2dNQVF0Qkh5RURJQUJCLy8vL0IwMEVRQ0FBUVNZZ0FFRUlkbWNpQVd0MlFRRnhJQUZCQVhSclFUNXFJUU1MSUFVZ0F6WUNIQ0FGUWdBM0FoQWdBMEVDZEVHNElXb2hBUUpBQWtCQmpCOG9BZ0FpQWtFQklBTjBJZ1J4UlFSQVFZd2ZJQUlnQkhJMkFnQWdBU0FGTmdJQURBRUxJQUJCR1NBRFFRRjJhMEVBSUFOQkgwY2JkQ0VESUFFb0FnQWhBZ05BSUFJaUFTZ0NCRUY0Y1NBQVJnMENJQU5CSFhZaEFpQURRUUYwSVFNZ0FTQUNRUVJ4YWlJRUtBSVFJZ0lOQUFzZ0JDQUZOZ0lRQ3lBRklBRTJBaGdnQlNBRk5nSU1JQVVnQlRZQ0NBd0JDeUFCS0FJSUlnQWdCVFlDRENBQklBVTJBZ2dnQlVFQU5nSVlJQVVnQVRZQ0RDQUZJQUEyQWdnTElBZEJDR29oQUF3Q0N3SkFJQWRGRFFBQ1FDQUVLQUljSWdCQkFuUkJ1Q0ZxSWdFb0FnQWdCRVlFUUNBQklBSTJBZ0FnQWcwQlFZd2ZJQWhCZmlBQWQzRWlDRFlDQUF3Q0N5QUhRUkJCRkNBSEtBSVFJQVJHRzJvZ0FqWUNBQ0FDUlEwQkN5QUNJQWMyQWhnZ0JDZ0NFQ0lBQkVBZ0FpQUFOZ0lRSUFBZ0FqWUNHQXNnQkNnQ0ZDSUFSUTBBSUFJZ0FEWUNGQ0FBSUFJMkFoZ0xBa0FnQTBFUFRRUkFJQVFnQXlBRmFpSUFRUU55TmdJRUlBQWdCR29pQUNBQUtBSUVRUUZ5TmdJRURBRUxJQVFnQlVFRGNqWUNCQ0FFSUFWcUlnSWdBMEVCY2pZQ0JDQUNJQU5xSUFNMkFnQWdBMEgvQVUwRVFDQURRWGh4UWJBZmFpRUFBbjlCaUI4b0FnQWlBVUVCSUFOQkEzWjBJZ054UlFSQVFZZ2ZJQUVnQTNJMkFnQWdBQXdCQ3lBQUtBSUlDeUVCSUFBZ0FqWUNDQ0FCSUFJMkFnd2dBaUFBTmdJTUlBSWdBVFlDQ0F3QkMwRWZJUUFnQTBILy8vOEhUUVJBSUFOQkppQURRUWgyWnlJQWEzWkJBWEVnQUVFQmRHdEJQbW9oQUFzZ0FpQUFOZ0ljSUFKQ0FEY0NFQ0FBUVFKMFFiZ2hhaUVCQWtBQ1FDQUlRUUVnQUhRaUJuRkZCRUJCakI4Z0JpQUljallDQUNBQklBSTJBZ0FNQVFzZ0EwRVpJQUJCQVhaclFRQWdBRUVmUnh0MElRQWdBU2dDQUNFRkEwQWdCU0lCS0FJRVFYaHhJQU5HRFFJZ0FFRWRkaUVHSUFCQkFYUWhBQ0FCSUFaQkJIRnFJZ1lvQWhBaUJRMEFDeUFHSUFJMkFoQUxJQUlnQVRZQ0dDQUNJQUkyQWd3Z0FpQUNOZ0lJREFFTElBRW9BZ2dpQUNBQ05nSU1JQUVnQWpZQ0NDQUNRUUEyQWhnZ0FpQUJOZ0lNSUFJZ0FEWUNDQXNnQkVFSWFpRUFEQUVMQWtBZ0NVVU5BQUpBSUFJb0Fod2lBRUVDZEVHNElXb2lBU2dDQUNBQ1JnUkFJQUVnQkRZQ0FDQUVEUUZCakI4Z0MwRitJQUIzY1RZQ0FBd0NDeUFKUVJCQkZDQUpLQUlRSUFKR0cyb2dCRFlDQUNBRVJRMEJDeUFFSUFrMkFoZ2dBaWdDRUNJQUJFQWdCQ0FBTmdJUUlBQWdCRFlDR0FzZ0FpZ0NGQ0lBUlEwQUlBUWdBRFlDRkNBQUlBUTJBaGdMQWtBZ0EwRVBUUVJBSUFJZ0F5QUZhaUlBUVFOeU5nSUVJQUFnQW1vaUFDQUFLQUlFUVFGeU5nSUVEQUVMSUFJZ0JVRURjallDQkNBQ0lBVnFJZ1FnQTBFQmNqWUNCQ0FESUFScUlBTTJBZ0FnQndSQUlBZEJlSEZCc0I5cUlRQkJuQjhvQWdBaEFRSi9RUUVnQjBFRGRuUWlCU0FHY1VVRVFFR0lIeUFGSUFaeU5nSUFJQUFNQVFzZ0FDZ0NDQXNoQmlBQUlBRTJBZ2dnQmlBQk5nSU1JQUVnQURZQ0RDQUJJQVkyQWdnTFFad2ZJQVEyQWdCQmtCOGdBellDQUFzZ0FrRUlhaUVBQ3lBS1FSQnFKQUFnQUF2U0N3RUhmd0pBSUFCRkRRQWdBRUVJYXlJQ0lBQkJCR3NvQWdBaUFVRjRjU0lBYWlFRkFrQWdBVUVCY1EwQUlBRkJBM0ZGRFFFZ0FpQUNLQUlBSWdGcklnSkJtQjhvQWdCSkRRRWdBQ0FCYWlFQUFrQUNRRUdjSHlnQ0FDQUNSd1JBSUFGQi93Rk5CRUFnQVVFRGRpRUVJQUlvQWd3aUFTQUNLQUlJSWdOR0JFQkJpQjlCaUI4b0FnQkJmaUFFZDNFMkFnQU1CUXNnQXlBQk5nSU1JQUVnQXpZQ0NBd0VDeUFDS0FJWUlRWWdBaUFDS0FJTUlnRkhCRUFnQWlnQ0NDSURJQUUyQWd3Z0FTQUROZ0lJREFNTElBSkJGR29pQkNnQ0FDSURSUVJBSUFJb0FoQWlBMFVOQWlBQ1FSQnFJUVFMQTBBZ0JDRUhJQU1pQVVFVWFpSUVLQUlBSWdNTkFDQUJRUkJxSVFRZ0FTZ0NFQ0lERFFBTElBZEJBRFlDQUF3Q0N5QUZLQUlFSWdGQkEzRkJBMGNOQWtHUUh5QUFOZ0lBSUFVZ0FVRitjVFlDQkNBQ0lBQkJBWEkyQWdRZ0JTQUFOZ0lBRHd0QkFDRUJDeUFHUlEwQUFrQWdBaWdDSENJRFFRSjBRYmdoYWlJRUtBSUFJQUpHQkVBZ0JDQUJOZ0lBSUFFTkFVR01IMEdNSHlnQ0FFRitJQU4zY1RZQ0FBd0NDeUFHUVJCQkZDQUdLQUlRSUFKR0cyb2dBVFlDQUNBQlJRMEJDeUFCSUFZMkFoZ2dBaWdDRUNJREJFQWdBU0FETmdJUUlBTWdBVFlDR0FzZ0FpZ0NGQ0lEUlEwQUlBRWdBellDRkNBRElBRTJBaGdMSUFJZ0JVOE5BQ0FGS0FJRUlnRkJBWEZGRFFBQ1FBSkFBa0FDUUNBQlFRSnhSUVJBUWFBZktBSUFJQVZHQkVCQm9COGdBallDQUVHVUgwR1VIeWdDQUNBQWFpSUFOZ0lBSUFJZ0FFRUJjallDQkNBQ1Fad2ZLQUlBUncwR1FaQWZRUUEyQWdCQm5COUJBRFlDQUE4TFFad2ZLQUlBSUFWR0JFQkJuQjhnQWpZQ0FFR1FIMEdRSHlnQ0FDQUFhaUlBTmdJQUlBSWdBRUVCY2pZQ0JDQUFJQUpxSUFBMkFnQVBDeUFCUVhoeElBQnFJUUFnQVVIL0FVMEVRQ0FCUVFOMklRUWdCU2dDRENJQklBVW9BZ2dpQTBZRVFFR0lIMEdJSHlnQ0FFRitJQVIzY1RZQ0FBd0ZDeUFESUFFMkFnd2dBU0FETmdJSURBUUxJQVVvQWhnaEJpQUZJQVVvQWd3aUFVY0VRRUdZSHlnQ0FCb2dCU2dDQ0NJRElBRTJBZ3dnQVNBRE5nSUlEQU1MSUFWQkZHb2lCQ2dDQUNJRFJRUkFJQVVvQWhBaUEwVU5BaUFGUVJCcUlRUUxBMEFnQkNFSElBTWlBVUVVYWlJRUtBSUFJZ01OQUNBQlFSQnFJUVFnQVNnQ0VDSUREUUFMSUFkQkFEWUNBQXdDQ3lBRklBRkJmbkUyQWdRZ0FpQUFRUUZ5TmdJRUlBQWdBbW9nQURZQ0FBd0RDMEVBSVFFTElBWkZEUUFDUUNBRktBSWNJZ05CQW5SQnVDRnFJZ1FvQWdBZ0JVWUVRQ0FFSUFFMkFnQWdBUTBCUVl3ZlFZd2ZLQUlBUVg0Z0EzZHhOZ0lBREFJTElBWkJFRUVVSUFZb0FoQWdCVVliYWlBQk5nSUFJQUZGRFFFTElBRWdCallDR0NBRktBSVFJZ01FUUNBQklBTTJBaEFnQXlBQk5nSVlDeUFGS0FJVUlnTkZEUUFnQVNBRE5nSVVJQU1nQVRZQ0dBc2dBaUFBUVFGeU5nSUVJQUFnQW1vZ0FEWUNBQ0FDUVp3ZktBSUFSdzBBUVpBZklBQTJBZ0FQQ3lBQVFmOEJUUVJBSUFCQmVIRkJzQjlxSVFFQ2YwR0lIeWdDQUNJRFFRRWdBRUVEZG5RaUFIRkZCRUJCaUI4Z0FDQURjallDQUNBQkRBRUxJQUVvQWdnTElRQWdBU0FDTmdJSUlBQWdBallDRENBQ0lBRTJBZ3dnQWlBQU5nSUlEd3RCSHlFRElBQkIvLy8vQjAwRVFDQUFRU1lnQUVFSWRtY2lBV3QyUVFGeElBRkJBWFJyUVQ1cUlRTUxJQUlnQXpZQ0hDQUNRZ0EzQWhBZ0EwRUNkRUc0SVdvaEFRSkFBa0FDUUVHTUh5Z0NBQ0lFUVFFZ0EzUWlCM0ZGQkVCQmpCOGdCQ0FIY2pZQ0FDQUJJQUkyQWdBZ0FpQUJOZ0lZREFFTElBQkJHU0FEUVFGMmEwRUFJQU5CSDBjYmRDRURJQUVvQWdBaEFRTkFJQUVpQkNnQ0JFRjRjU0FBUmcwQ0lBTkJIWFloQVNBRFFRRjBJUU1nQkNBQlFRUnhhaUlIUVJCcUtBSUFJZ0VOQUFzZ0J5QUNOZ0lRSUFJZ0JEWUNHQXNnQWlBQ05nSU1JQUlnQWpZQ0NBd0JDeUFFS0FJSUlnQWdBallDRENBRUlBSTJBZ2dnQWtFQU5nSVlJQUlnQkRZQ0RDQUNJQUEyQWdnTFFhZ2ZRYWdmS0FJQVFRRnJJZ0JCZnlBQUd6WUNBQXNMQkFBakFBc0dBQ0FBSkFBTEVBQWpBQ0FBYTBGd2NTSUFKQUFnQUF0S0FRRi9JQUFnQVVrRVFDQUFJQUVnQWhBQ0R3c2dBZ1JBSUFBZ0Ftb2hBeUFCSUFKcUlRRURRQ0FEUVFGcklnTWdBVUVCYXlJQkxRQUFPZ0FBSUFKQkFXc2lBZzBBQ3dzZ0FBdjlEZ0lSZndGK0l3QkJNR3NpQnlRQVFiaC9JUWdDUUNBRlJRMEFJQVFzQUFBaUNVSC9BWEVoQ3dKQUlBbEJBRWdFUUNBTFFmNEFhMEVCZGlJR0lBVlBEUUpCYkNFSUlBdEIvd0JySWd0Qi93RkxEUUlnQkVFQmFpRUlRUUFoQlFOQUlBVWdDMDhFUUNBTElRZ2dCaUVMREFNRklBQWdCV29nQ0NBRlFRRjJhaUlFTFFBQVFRUjJPZ0FBSUFBZ0JVRUJjbW9nQkMwQUFFRVBjVG9BQUNBRlFRSnFJUVVNQVFzQUN3QUxJQVVnQzAwTkFTQUhRZjhCTmdJRUlBWWdCMEVFYWlBSFFRaHFJQVJCQVdvaURpQUxFQXdpQkVHSWYwc0VRQ0FFSVFnTUFndEJWQ0VJSUFjb0FnZ2lFRUVHU3cwQklBY29BZ1FpRVVFQmRDSUpRUUpxclVJQklCQ3RoaUlZUVFFZ0VIUWlEVUVCYWlJRnJVSUNobng4UWd0OFF2ei8vLy8vLy8vLy93Q0RRdVFDVmcwQlFWSWhDQ0FSUWY4QlN3MEJJQTFCZjNOQkFuUkI1QUpxclNBUlFRRnFJaFZCQVhTdElCaDhRZ2g4VkEwQklBc2dCR3NoRmlBRUlBNXFJUmNnQmtHQUJHb2lFaUFGUVFKMGFpSVJJQWxxUVFKcUlRNGdCa0dFQkdvaEUwR0FnQUlnRUhSQkVIWWhDVUVBSVFWQkFTRVBJQTFCQVdzaUZDRUtBMEFnQlNBVlJrVUVRQUpBSUFZZ0JVRUJkQ0lJYWk4QkFDSUVRZi8vQTBZRVFDQVRJQXBCQW5ScUlBVTZBQUlnQ2tFQmF5RUtRUUVoQkF3QkN5QVBRUUFnQ1NBRXdVb2JJUThMSUFnZ0VXb2dCRHNCQUNBRlFRRnFJUVVNQVFzTElBWWdEenNCZ2dRZ0JpQVFPd0dBQkFKQUlBb2dGRVlFUUNBTlFRTjJJUWhDQUNFWVFRQWhEd05BSUF3Z0ZVWUVRQ0FJSUExQkFYWnFRUU5xSWdsQkFYUWhDRUVBSVFSQkFDRUtBMEJCQUNFRklBb2dEVThOQkFOQUlBVkJBa1pGQkVBZ0V5QUZJQWxzSUFScUlCUnhRUUowYWlBT0lBVWdDbXBxTFFBQU9nQUNJQVZCQVdvaEJRd0JDd3NnQ2tFQ2FpRUtJQVFnQ0dvZ0ZIRWhCQXdBQ3dBRklBWWdERUVCZEdvdUFRQWhDU0FPSUE5cUlnUWdHRGNBQUVFSUlRVURRQ0FGSUFsT1JRUkFJQVFnQldvZ0dEY0FBQ0FGUVFocUlRVU1BUXNMSUJoQ2dZS0VpSkNnd0lBQmZDRVlJQXhCQVdvaERDQUpJQTlxSVE4TUFRc0FDd0FMSUExQkEzWWdEVUVCZG1wQkEyb2hDRUVBSVFVRFFDQU1JQlZHUlFSQVFRQWhDU0FHSUF4QkFYUnFMZ0VBSWdSQkFDQUVRUUJLR3lFRUEwQWdCQ0FKUmtVRVFDQVRJQVZCQW5ScUlBdzZBQUlEUUNBRklBaHFJQlJ4SWdVZ0Nrc05BQXNnQ1VFQmFpRUpEQUVMQ3lBTVFRRnFJUXdNQVFzTFFYOGhDQ0FGRFFJTElCQkJBV29oQ0VFQUlRVURRQ0FGSUExR1JRUkFJQkVnRXlBRlFRSjBhaUlPTFFBQ1FRRjBhaUlFSUFRdkFRQWlDVUVCYWpzQkFDQU9JQWdnQ1dkQllITnFJZ1E2QUFNZ0RpQUpJQVIwSUExck93RUFJQVZCQVdvaEJRd0JDd3NDUUFKQUlBWXZBWUlFQkVBZ0IwRWNhaUlFSUJjZ0ZoQU5JZ2hCaUg5TERRSWdCMEVVYWlBRUlCSVFEaUFIUVF4cUlBUWdFaEFPUVFBaEJRTkFJQWRCSEdvaUJCQVBJQVZCK3dGTGNnMENJQUFnQldvaUJpQUhRUlJxSUFRUUVEb0FBQ0FHSUFkQkRHb2dCQkFRT2dBQklBVkJBbkloQkNBSFFSeHFFQThFUUNBRUlRVU1Bd1VnQUNBRWFpQUhRUlJxSUFkQkhHb2lCQkFRT2dBQUlBWWdCMEVNYWlBRUVCQTZBQU1nQlVFRWFpRUZEQUVMQUFzQUN5QUhRUnhxSWdRZ0Z5QVdFQTBpQ0VHSWYwc05BU0FIUVJScUlBUWdFaEFPSUFkQkRHb2dCQ0FTRUE1QkFDRUZBMEFnQjBFY2FpSUVFQThnQlVIN0FVdHlSUVJBSUFBZ0JXb2lCaUFIUVJScUlBUVFFVG9BQUNBR0lBZEJER29nQkJBUk9nQUJJQVZCQW5JaEJDQUhRUnhxRUE4RVFDQUVJUVVGSUFBZ0JHb2dCMEVVYWlBSFFSeHFJZ1FRRVRvQUFDQUdJQWRCREdvZ0JCQVJPZ0FESUFWQkJHb2hCUXdDQ3dzTEFuOERRRUc2ZnlFSUlBVkIvUUZMRFFNZ0FDQUZhaUlHSUFkQkZHb2dCMEVjYWlJSkVCRTZBQUFnQmtFQmFpRUVJQWtRRDBFRFJnUkFJQWRCREdvaENFRUNEQUlMSUFWQi9BRkxEUU1nQmlBSFFReHFJQWRCSEdvaUJCQVJPZ0FCSUFWQkFtb2hCU0FFRUE5QkEwY05BQXNnQUNBRmFpRUVJQWRCRkdvaENFRURDeUFFSUFnZ0IwRWNhaEFST2dBQUlBWnFJQUJySVFnTUFRc0Nmd05BUWJwL0lRZ2dCVUg5QVVzTkFpQUFJQVZxSWdZZ0IwRVVhaUFIUVJ4cUlna1FFRG9BQUNBR1FRRnFJUVFnQ1JBUFFRTkdCRUFnQjBFTWFpRUlRUUlNQWdzZ0JVSDhBVXNOQWlBR0lBZEJER29nQjBFY2FpSUVFQkE2QUFFZ0JVRUNhaUVGSUFRUUQwRURSdzBBQ3lBQUlBVnFJUVFnQjBFVWFpRUlRUU1MSUFRZ0NDQUhRUnhxRUJBNkFBQWdCbW9nQUdzaENBc2dDRUdJZjBzTkFRc2dDQ0VFUVFBaEJTQUJRUUJCTkJBRElRbEJBQ0VLQTBBZ0JDQUZSd1JBSUFBZ0JXb2lCaTBBQUNJQlFRdExCRUJCYkNFSURBTUZJQWtnQVVFQ2RHb2lBU0FCS0FJQVFRRnFOZ0lBSUFWQkFXb2hCVUVCSUFZdEFBQjBRUUYxSUFwcUlRb01BZ3NBQ3d0QmJDRUlJQXBGRFFBZ0NtY2lCVUVmY3lJQlFRdExEUUFnQTBFZ0lBVnJOZ0lBUVFGQkFpQUJkQ0FLYXlJRFowRWZjeUlCZENBRFJ3MEFJQUFnQkdvZ0FVRUJhaUlBT2dBQUlBa2dBRUVDZEdvaUFDQUFLQUlBUVFGcU5nSUFJQWtvQWdRaUFFRUNTU0FBUVFGeGNnMEFJQUlnQkVFQmFqWUNBQ0FMUVFGcUlRZ0xJQWRCTUdva0FDQUlDNkFGQVF4L0l3QkJFR3NpRENRQUFuOGdCRUVIVFFSQUlBeENBRGNEQ0NBTVFRaHFJZ1VnQXlBRUVBSWFRV3dnQUNBQklBSWdCVUVJRUF3aUFDQUFJQVJMR3lBQUlBQkJpWDlKR3d3QkN5QUFRUUFnQVNnQ0FFRUJhaUlOUVFGMEVBTWhEMEZVSUFNb0FBQWlCa0VQY1NJQVFRcExEUUFhSUFJZ0FFRUZhallDQUNBRElBUnFJZ0pCQkdzaEJ5QUNRUWRySVFzZ0FFRUdhaUVPUVFRaEFpQUdRUVIySVFWQklDQUFkQ0lJUVFGeUlRbEJBQ0VBUVFFaEJpQURJUVFEUUFKQUlBWkJBWEZGQkVBRFFDQUZRWDl6UVlDQWdJQjRjbWdpQmtFWVNVVUVRQ0FBUVNScUlRQWdCQ0FMVFFSL0lBUkJBMm9GSUFRZ0MydEJBM1FnQW1wQkgzRWhBaUFIQ3lJRUtBQUFJQUoySVFVTUFRc0xJQUlnQmtFZWNTSUtha0VDYWlFQ0lBWkJBWFpCQTJ3Z0FHb2dCU0FLZGtFRGNXb2lBQ0FOVHcwQkFuOGdCQ0FMU3lBQ1FRTjJJQVJxSWdVZ0IwdHhSUVJBSUFKQkIzRWhBaUFGREFFTElBUWdCMnRCQTNRZ0FtcEJIM0VoQWlBSEN5SUVLQUFBSUFKMklRVUxJQVVnQ0VFQmEzRWlCaUFJUVFGMFFRRnJJZ29nQ1dzaUVFa0VmeUFPUVFGckJTQUZJQXB4SWdVZ0VFRUFJQVVnQ0U0YmF5RUdJQTRMSVFVZ0R5QUFRUUYwYWlBR1FRRnJJZ283QVFBZ0FFRUJhaUVBSUFJZ0JXb2hBaUFJUVFFZ0Jtc2dDaUFHUVFCS0d5QUphaUlKU2dSQUlBbEJBa2dOQVVFZ0lBbG5JZ1ZySVE1QkFTQUZRUjl6ZENFSUN5QUFJQTFQRFFBZ0NrRUFSeUVHQW44Z0JDQUxTeUFDUVFOMUlBUnFJZ1VnQjB0eFJRUkFJQUpCQjNFaEFpQUZEQUVMSUFJZ0JDQUhhMEVEZEdwQkgzRWhBaUFIQ3lJRUtBQUFJQUoySVFVTUFRc0xRV3dnQ1VFQlJ3MEFHa0ZRSUFBZ0RVc05BQnBCYkNBQ1FTQktEUUFhSUFFZ0FFRUJhellDQUNBRUlBSkJCMnBCQTNWcUlBTnJDeUFNUVJCcUpBQUw4Z0VCQVg4Z0FrVUVRQ0FBUWdBM0FnQWdBRUVBTmdJUUlBQkNBRGNDQ0VHNGZ3OExJQUFnQVRZQ0RDQUFJQUZCQkdvMkFoQWdBa0VFVHdSQUlBQWdBU0FDYWlJQlFRUnJJZ00yQWdnZ0FDQURLQUFBTmdJQUlBRkJBV3N0QUFBaUFRUkFJQUFnQVdkQkYyczJBZ1FnQWc4TElBQkJBRFlDQkVGL0R3c2dBQ0FCTmdJSUlBQWdBUzBBQUNJRE5nSUFBa0FDUUFKQUlBSkJBbXNPQWdFQUFnc2dBQ0FCTFFBQ1FSQjBJQU55SWdNMkFnQUxJQUFnQVMwQUFVRUlkQ0FEYWpZQ0FBc2dBU0FDYWtFQmF5MEFBQ0lCUlFSQUlBQkJBRFlDQkVGc0R3c2dBQ0FCWnlBQ1FRTjBhMEVKYWpZQ0JDQUNDMFFCQW44Z0FTQUNMd0VBSWdNZ0FTZ0NCR29pQkRZQ0JDQUFJQU5CQW5SQm9CMXFLQUlBSUFFb0FnQkJBQ0FFYTNaeE5nSUFJQUVRRHhvZ0FDQUNRUVJxTmdJRUM1OEJBUVIvUVFNaEFTQUFLQUlFSWdKQklFMEVRQ0FBS0FJSUlnRWdBQ2dDRUU4RVFDQUFJQUpCQjNFMkFnUWdBQ0FCSUFKQkEzWnJJZ0kyQWdnZ0FDQUNLQUFBTmdJQVFRQVBDeUFBS0FJTUlnTWdBVVlFUUVFQlFRSWdBa0VnU1JzUEN5QUFJQUVnQVNBRGF5QUNRUU4ySWdRZ0FTQUVheUFEU1NJQkd5SURheUlFTmdJSUlBQWdBaUFEUVFOMGF6WUNCQ0FBSUFRb0FBQTJBZ0FMSUFFTFNBRUVmeUFBS0FJRUlBQW9BZ0JCQW5ScUlnSXRBQUlnQWk4QkFDRUVJQUVnQVNnQ0JDSUZJQUl0QUFNaUFtbzJBZ1FnQUNBRUlBRW9BZ0FnQlhSQkFDQUNhM1pxTmdJQUMxSUJCSDhnQUNnQ0JDQUFLQUlBUVFKMGFpSUNMUUFDSUFJdkFRQWhCQ0FCSUFJdEFBTWlBaUFCS0FJRWFpSUZOZ0lFSUFBZ0JDQUNRUUowUWFBZGFpZ0NBQ0FCS0FJQVFRQWdCV3QyY1dvMkFnQUxDQUFnQUVHSWYwc0xHZ0FnQUFSQUlBRUVRQ0FDSUFBZ0FSRUNBQThMSUFBUUJnc0xwZ2dDRFg4QmZpTUFRUkJySWdra0FDQUpRUUEyQWd3Z0NVRUFOZ0lJQW44Q1FDQURRZWdKYWlBRElBbEJDR29nQ1VFTWFpQUJJQUlnQTBHQUFXb1FDeUlQUVloL1N3MEFRVlFnQ1NnQ0RDSUVJQUFvQWdBaUFVSC9BWEZCQVdwTERRRWFJQUJCQkdvaEN5QUFJQUZCLzRHQWVIRWdCRUVRZEVHQWdQd0hjWEkyQWdCQmZ5QUVJQVJCQUVnYlFRRnFJUUJCQUNFQklBa29BZ2doQlVFQUlRSURRQ0FBSUFKR0JFQWdCVUVEYXlFQlFRQWhBQU5BQWtCQkFDRUNJQUFnQVU0RVFBTkFJQUFnQlU0TkFpQURJQUFnQTJwQjZBbHFMUUFBUVFKMGFrRkFheUlCSUFFb0FnQWlBVUVCYWpZQ0FDQUJJQU5xSUFBNkFPZ0hJQUJCQVdvaEFBd0FDd0FGQTBBZ0FrRUVSa1VFUUNBRElBTWdBQ0FDYWlJSGFrSG9DV290QUFCQkFuUnFRVUJySWdnZ0NDZ0NBQ0lJUVFGcU5nSUFJQU1nQ0dvZ0J6b0E2QWNnQWtFQmFpRUNEQUVMQ3lBQVFRUnFJUUFNQWdzQUN3c2dCRUVCYWlFT0lBTW9BZ0FoQjBFQUlRQkJBU0VJQTBBZ0NDQU9SZzBESUE0Z0NHc2hCQ0FESUFoQkFuUnFLQUlBSVFVQ1FBSkFBa0FDUUFKQUFrQkJBU0FJZEVFQmRTSU5RUUZyRGdnQUFRUUNCQVFFQXdRTFFRQWhBaUFGUVFBZ0JVRUFTaHNoQmlBQUlRRURRQ0FDSUFaR0RRVWdBeUFDSUFkcWFpMEE2QWNoQ2lBTElBRkJBWFJxSWd3Z0JEb0FBU0FNSUFvNkFBQWdBa0VCYWlFQ0lBRkJBV29oQVF3QUN3QUxRUUFoQWlBRlFRQWdCVUVBU2hzaENpQUFJUUVEUUNBQ0lBcEdEUVFnQ3lBQlFRRjBhaUlHSUFNZ0FpQUhhbW90QU9nSElndzZBQUlnQmlBRU9nQUJJQVlnRERvQUFDQUdJQVE2QUFNZ0FrRUJhaUVDSUFGQkFtb2hBUXdBQ3dBTFFRQWhBaUFGUVFBZ0JVRUFTaHNoQmlBRVFRaDBRWUQrQTNFaEJDQUFJUUVEUUNBQ0lBWkdEUU1nQ3lBQlFRRjBhaUFFSUFNZ0FpQUhhbW90QU9nSGNxMUNnWUNFZ0pDQXdBQitOd0FBSUFKQkFXb2hBaUFCUVFScUlRRU1BQXNBQzBFQUlRSWdCVUVBSUFWQkFFb2JJUVlnQkVFSWRFR0EvZ054SVFRZ0FDRUJBMEFnQWlBR1JnMENJQXNnQVVFQmRHb2lDaUFFSUFNZ0FpQUhhbW90QU9nSGNxMUNnWUNFZ0pDQXdBQitJaEUzQUFnZ0NpQVJOd0FBSUFKQkFXb2hBaUFCUVFocUlRRU1BQXNBQzBFQUlRRWdCVUVBSUFWQkFFb2JJUW9nQkVFSWRFR0EvZ054SVF3Z0FDRUVBMEFnQVNBS1JnMEJJQXNnQkVFQmRHb2hFQ0FNSUFNZ0FTQUhhbW90QU9nSGNxMUNnWUNFZ0pDQXdBQitJUkZCQUNFQ0EwQWdBaUFOVGtVRVFDQVFJQUpCQVhScUlnWWdFVGNBR0NBR0lCRTNBQkFnQmlBUk53QUlJQVlnRVRjQUFDQUNRUkJxSVFJTUFRc0xJQUZCQVdvaEFTQUVJQTFxSVFRTUFBc0FDeUFJUVFGcUlRZ2dCU0FIYWlFSElBVWdEV3dnQUdvaEFBd0FDd0FGSUFNZ0FrRUNkR29pQjBGQWF5QUJOZ0lBSUFKQkFXb2hBaUFIS0FJQUlBRnFJUUVNQVFzQUN3QUxJQThMSUFsQkVHb2tBQXZ5QWdFR2Z5TUFRU0JySWdVa0FDQUVLQUlBSVFZZ0JVRU1haUFDSUFNUURTSURRWWgvVFFSQUlBUkJCR29oQWlBQUlBRnFJZ2xCQTJzaEJFRUFJQVpCRUhaclFSOXhJUU1EUUNBRlFReHFFQThnQUNBRVQzSkZCRUFnQWlBRktBSU1JZ1lnQlNnQ0VDSUhkQ0FEZGtFQmRHb2lDQzBBQVNFS0lBQWdDQzBBQURvQUFDQUNJQVlnQnlBS2FpSUdkQ0FEZGtFQmRHb2lCeTBBQUNFSUlBVWdCaUFITFFBQmFqWUNFQ0FBSUFnNkFBRWdBRUVDYWlFQURBRUxDd05BSUFWQkRHb1FEeUVISUFVb0Fnd2hCaUFGS0FJUUlRUWdBQ0FKVHlBSGNrVUVRQ0FDSUFZZ0JIUWdBM1pCQVhScUlnWXRBQUFoQnlBRklBUWdCaTBBQVdvMkFoQWdBQ0FIT2dBQUlBQkJBV29oQUF3QkN3c0RRQ0FBSUFsUFJRUkFJQUlnQmlBRWRDQURka0VCZEdvaUJ5MEFBU0VJSUFBZ0J5MEFBRG9BQUNBQVFRRnFJUUFnQkNBSWFpRUVEQUVMQzBGc1FXd2dBU0FGS0FJVUlBVW9BaGhIR3lBRVFTQkhHeUVEQ3lBRlFTQnFKQUFnQXd2UEZBRWpmeU1BUWRBQWF5SUZKQUJCYkNFSkFrQWdBMEVLU1EwQUFrQWdBeUFDTHdBRUlnY2dBaThBQUNJSUlBSXZBQUlpRFdwcVFRWnFJZ3hKRFFBZ0JDOEJBaUVHSUFWQlBHb2dBa0VHYWlJQ0lBZ1FEU0lKUVloL1N3MEJJQVZCS0dvZ0FpQUlhaUlDSUEwUURTSUpRWWgvU3cwQklBVkJGR29nQWlBTmFpSUNJQWNRRFNJSlFZaC9TdzBCSUFVZ0FpQUhhaUFESUF4ckVBMGlDVUdJZjBzTkFTQUVRUVJxSVFvZ0FDQUJhaUlmUVFOcklTQkJBQ0FHYTBFZmNTRUxJQVVvQWdnaEVTQUZLQUljSVJJZ0JTZ0NNQ0VUSUFVb0FrUWhGQ0FGS0FJRUlRa2dCU2dDR0NFTklBVW9BaXdoRENBRktBSkFJUVlnQlNnQ0VDRWhJQVVvQWlRaElpQUZLQUk0SVNNZ0JTZ0NUQ0VrSUFVb0FnQWhGU0FGS0FJVUlSWWdCU2dDS0NFWElBVW9BandoR0VFQklROGdBQ0FCUVFOcVFRSjJJZ1JxSWdNZ0JHb2lBaUFFYWlJWklRUWdBaUVJSUFNaEJ3TkFJQTlCQVhGRklBUWdJRTl5UlFSQUlBQWdDaUFZSUFaMElBdDJRUUowYWlJT0x3RUFPd0FBSUE0dEFBSWhHaUFPTFFBRElSQWdCeUFLSUJjZ0RIUWdDM1pCQW5ScUlnNHZBUUE3QUFBZ0RpMEFBaUViSUE0dEFBTWhEeUFJSUFvZ0ZpQU5kQ0FMZGtFQ2RHb2lEaThCQURzQUFDQU9MUUFDSVJ3Z0RpMEFBeUVkSUFRZ0NpQVZJQWwwSUF0MlFRSjBhaUlPTHdFQU93QUFJQTR0QUFJaEhpQU9MUUFESVE0Z0FDQVFhaUlsSUFvZ0dDQUdJQnBxSWdaMElBdDJRUUowYWlJUUx3RUFPd0FBSUJBdEFBSWdFQzBBQXlFbUlBY2dEMm9pSnlBS0lCY2dEQ0FiYWlJYWRDQUxka0VDZEdvaUJ5OEJBRHNBQUNBSExRQUNJUXdnQnkwQUF5RVFJQWdnSFdvaUd5QUtJQllnRFNBY2FpSVBkQ0FMZGtFQ2RHb2lDQzhCQURzQUFDQUlMUUFDSVEwZ0NDMEFBeUVjSUFRZ0Rtb2lIU0FLSUJVZ0NTQWVhaUlPZENBTGRrRUNkR29pQ1M4QkFEc0FBQ0FHYWlFQVFRTWhCd0ovSUJRZ0pFa0VRQ0FBSVFaQkF3d0JDeUFBUVFkeElRWWdGQ0FBUVFOMmF5SVVLQUFBSVJoQkFBc2dDUzBBQXlFZUlBa3RBQUloQ0NBTUlCcHFJUUFnRXlBalNRUi9JQUFGSUJNZ0FFRURkbXNpRXlnQUFDRVhRUUFoQnlBQVFRZHhDeUVNSUEwZ0Qyb2hBQ0FIY2lFSlFRTWhEd0ovSUJJZ0lra0VRQ0FBSVExQkF3d0JDeUFBUVFkeElRMGdFaUFBUVFOMmF5SVNLQUFBSVJaQkFBc2dDQ0FPYWlFQUlBbHlJQkVnSVVrRWZ5QUFCU0FSSUFCQkEzWnJJaEVvQUFBaEZVRUFJUThnQUVFSGNRc2hDU0FsSUNacUlRQWdFQ0FuYWlFSElCc2dIR29oQ0NBZElCNXFJUVFnRDNKRklROE1BUXNMSUFVZ0REWUNMQ0FGSUFZMkFrQWdCU0FOTmdJWUlBVWdDVFlDQkNBRklCUTJBa1FnQlNBVE5nSXdJQVVnRWpZQ0hDQUZJQkUyQWdnZ0JTQVlOZ0k4SUFVZ0Z6WUNLQ0FGSUJZMkFoUWdCU0FWTmdJQUlBSWdCMGtnQUNBRFMzSU5BRUZzSVFrZ0NDQVpTdzBCSUFOQkEyc2hDUU5BSUFWQlBHb1FEMFVnQUNBSlNYRUVRQ0FBSUFvZ0JTZ0NQQ0lOSUFVb0FrQWlESFFnQzNaQkFuUnFJZzR2QVFBN0FBQWdBQ0FPTFFBRGFpSUdJQW9nRFNBTUlBNHRBQUpxSWdCMElBdDJRUUowYWlJTUx3RUFPd0FBSUFVZ0FDQU1MUUFDYWpZQ1FDQUdJQXd0QUFOcUlRQU1BUVVnQTBFQ2F5RU1BMEFnQlVFOGFoQVBJUVlnQlNnQ1BDRU5JQVVvQWtBaENTQUFJQXhMSUFaeVJRUkFJQUFnQ2lBTklBbDBJQXQyUVFKMGFpSUdMd0VBT3dBQUlBVWdDU0FHTFFBQ2FqWUNRQ0FBSUFZdEFBTnFJUUFNQVFzTEEwQWdBQ0FNUzBVRVFDQUFJQW9nRFNBSmRDQUxka0VDZEdvaUJpOEJBRHNBQUNBQUlBWXRBQU5xSVFBZ0NTQUdMUUFDYWlFSkRBRUxDd0pBSUFBZ0EwOE5BQ0FBSUFvZ0RTQUpkQ0FMZGlJQVFRSjBhaUlETFFBQU9nQUFJQU10QUFOQkFVWUVRQ0FKSUFNdEFBSnFJUWtNQVFzZ0NVRWZTdzBBUVNBZ0NTQUtJQUJCQW5ScUxRQUNhaUlBSUFCQklFOGJJUWtMSUFKQkEyc2hEQU5BSUFWQktHb1FEMFVnQnlBTVNYRUVRQ0FISUFvZ0JTZ0NLQ0lHSUFVb0Fpd2lBSFFnQzNaQkFuUnFJZzB2QVFBN0FBQWdCeUFOTFFBRGFpSURJQW9nQmlBQUlBMHRBQUpxSWdCMElBdDJRUUowYWlJR0x3RUFPd0FBSUFVZ0FDQUdMUUFDYWpZQ0xDQURJQVl0QUFOcUlRY01BUVVnQWtFQ2F5RUdBMEFnQlVFb2FoQVBJUU1nQlNnQ0tDRU1JQVVvQWl3aEFDQUdJQWRKSUFOeVJRUkFJQWNnQ2lBTUlBQjBJQXQyUVFKMGFpSURMd0VBT3dBQUlBVWdBQ0FETFFBQ2FqWUNMQ0FISUFNdEFBTnFJUWNNQVFzTEEwQWdCaUFIU1VVRVFDQUhJQW9nRENBQWRDQUxka0VDZEdvaUF5OEJBRHNBQUNBSElBTXRBQU5xSVFjZ0FDQURMUUFDYWlFQURBRUxDd0pBSUFJZ0IwME5BQ0FISUFvZ0RDQUFkQ0FMZGlJQ1FRSjBhaUlETFFBQU9nQUFJQU10QUFOQkFVWUVRQ0FBSUFNdEFBSnFJUUFNQVFzZ0FFRWZTdzBBUVNBZ0FDQUtJQUpCQW5ScUxRQUNhaUlBSUFCQklFOGJJUUFMSUJsQkEyc2hEQU5BSUFWQkZHb1FEMFVnQ0NBTVNYRUVRQ0FJSUFvZ0JTZ0NGQ0lHSUFVb0FoZ2lBblFnQzNaQkFuUnFJZzB2QVFBN0FBQWdDQ0FOTFFBRGFpSURJQW9nQmlBQ0lBMHRBQUpxSWdKMElBdDJRUUowYWlJR0x3RUFPd0FBSUFVZ0FpQUdMUUFDYWpZQ0dDQURJQVl0QUFOcUlRZ01BUVVnR1VFQ2F5RURBMEFnQlVFVWFoQVBJUUlnQlNnQ0ZDRUdJQVVvQWhnaEJ5QURJQWhKSUFKeVJRUkFJQWdnQ2lBR0lBZDBJQXQyUVFKMGFpSUNMd0VBT3dBQUlBVWdCeUFDTFFBQ2FqWUNHQ0FJSUFJdEFBTnFJUWdNQVFzTEEwQWdBeUFJU1VVRVFDQUlJQW9nQmlBSGRDQUxka0VDZEdvaUFpOEJBRHNBQUNBSUlBSXRBQU5xSVFnZ0J5QUNMUUFDYWlFSERBRUxDd0pBSUFnZ0dVOE5BQ0FJSUFvZ0JpQUhkQ0FMZGlJQ1FRSjBhaUlETFFBQU9nQUFJQU10QUFOQkFVWUVRQ0FISUFNdEFBSnFJUWNNQVFzZ0IwRWZTdzBBUVNBZ0J5QUtJQUpCQW5ScUxRQUNhaUlDSUFKQklFOGJJUWNMQTBBZ0JSQVBSU0FFSUNCSmNRUkFJQVFnQ2lBRktBSUFJZ1lnQlNnQ0JDSUNkQ0FMZGtFQ2RHb2lEQzhCQURzQUFDQUVJQXd0QUFOcUlnTWdDaUFHSUFJZ0RDMEFBbW9pQW5RZ0MzWkJBblJxSWdRdkFRQTdBQUFnQlNBQ0lBUXRBQUpxTmdJRUlBTWdCQzBBQTJvaEJBd0JCU0FmUVFKcklRTURRQ0FGRUE4aEFpQUZLQUlBSVFZZ0JTZ0NCQ0VJSUFNZ0JFa2dBbkpGQkVBZ0JDQUtJQVlnQ0hRZ0MzWkJBblJxSWdJdkFRQTdBQUFnQlNBSUlBSXRBQUpxTmdJRUlBUWdBaTBBQTJvaEJBd0JDd3NEUUNBRElBUkpSUVJBSUFRZ0NpQUdJQWgwSUF0MlFRSjBhaUlDTHdFQU93QUFJQVFnQWkwQUEyb2hCQ0FJSUFJdEFBSnFJUWdNQVFzTEFrQWdCQ0FmVHcwQUlBUWdDaUFHSUFoMElBdDJJZ0pCQW5ScUlnTXRBQUE2QUFBZ0F5MEFBMEVCUmdSQUlBZ2dBeTBBQW1vaENBd0JDeUFJUVI5TERRQkJJQ0FJSUFvZ0FrRUNkR290QUFKcUlnSWdBa0VnVHhzaENBdEJiRUZzUVd4QmJFRnNRV3hCYkVGc0lBRWdDRUVnUnhzZ0JTZ0NDQ0FGS0FJTVJ4c2dCMEVnUnhzZ0JTZ0NIQ0FGS0FJZ1J4c2dBRUVnUnhzZ0JTZ0NNQ0FGS0FJMFJ4c2dDVUVnUnhzZ0JTZ0NSQ0FGS0FKSVJ4c2hDUXdKQ3dBTEFBc0FDd0FMQUFzQUN3QUxBQXRCYkNFSkN5QUZRZEFBYWlRQUlBa0w3QkFCSG44akFFSFFBR3NpQlNRQVFXd2hDUUpBSUFOQkNra05BQUpBSUFNZ0FpOEFCQ0lHSUFJdkFBQWlCeUFDTHdBQ0lnaHFha0VHYWlJT1NRMEFJQVF2QVFJaER5QUZRVHhxSUFKQkJtb2lBaUFIRUEwaUNVR0lmMHNOQVNBRlFTaHFJQUlnQjJvaUFpQUlFQTBpQ1VHSWYwc05BU0FGUVJScUlBSWdDR29pQWlBR0VBMGlDVUdJZjBzTkFTQUZJQUlnQm1vZ0F5QU9heEFOSWdsQmlIOUxEUUVnQkVFRWFpRUtJQUFnQVdvaUhFRURheUVkUVFBZ0QydEJIM0VoQ3lBRktBSUlJUkVnQlNnQ0hDRVNJQVVvQWpBaEV5QUZLQUpFSVJRZ0JTZ0NCQ0VKSUFVb0FoZ2hCaUFGS0FJc0lRY2dCU2dDUUNFSUlBVW9BaEFoSGlBRktBSWtJUjhnQlNnQ09DRWdJQVVvQWt3aElTQUZLQUlBSVJVZ0JTZ0NGQ0VXSUFVb0FpZ2hGeUFGS0FJOElSaEJBU0VOSUFBZ0FVRURha0VDZGlJQ2FpSU9JQUpxSWc4Z0Ftb2lHU0VFSUE4aEFpQU9JUU1EUUNBTlJTQUVJQjFQY2tVRVFDQUtJQmdnQ0hRZ0MzWkJBWFJxSWd3dEFBRWhEU0FBSUF3dEFBQTZBQUFnQ2lBWElBZDBJQXQyUVFGMGFpSU1MUUFCSVJBZ0F5QU1MUUFBT2dBQUlBb2dGaUFHZENBTGRrRUJkR29pREMwQUFTRWFJQUlnREMwQUFEb0FBQ0FLSUJVZ0NYUWdDM1pCQVhScUlnd3RBQUVoR3lBRUlBd3RBQUE2QUFBZ0NpQVlJQWdnRFdvaUNIUWdDM1pCQVhScUlnd3RBQUVoRFNBQUlBd3RBQUE2QUFFZ0NpQVhJQWNnRUdvaUIzUWdDM1pCQVhScUlnd3RBQUVoRUNBRElBd3RBQUE2QUFFZ0NpQVdJQVlnR21vaURIUWdDM1pCQVhScUlnWXRBQUVoR2lBQ0lBWXRBQUE2QUFFZ0NpQVZJQWtnRzJvaUczUWdDM1pCQVhScUlna3RBQUVoSWlBRUlBa3RBQUE2QUFFZ0NDQU5haUVHUVFNaENRSi9JQlFnSVVrRVFFRURJUTBnQmd3QkN5QVVJQVpCQTNackloUW9BQUFoR0VFQUlRMGdCa0VIY1FzaENDQUhJQkJxSVFZZ0V5QWdTUVIvSUFZRklCTWdCa0VEZG1zaUV5Z0FBQ0VYUVFBaENTQUdRUWR4Q3lFSElBd2dHbW9oRENBSklBMXlJUkJCQXlFTkFuOGdFaUFmU1FSQUlBd2hCa0VEREFFTElBeEJCM0VoQmlBU0lBeEJBM1pySWhJb0FBQWhGa0VBQ3lBYklDSnFJUXdnRUhJaEVDQVJJQjVKQkg4Z0RBVWdFU0FNUVFOMmF5SVJLQUFBSVJWQkFDRU5JQXhCQjNFTElRa2dCRUVDYWlFRUlBSkJBbW9oQWlBRFFRSnFJUU1nQUVFQ2FpRUFJQTBnRUhKRklRME1BUXNMSUFVZ0J6WUNMQ0FGSUFnMkFrQWdCU0FHTmdJWUlBVWdDVFlDQkNBRklCUTJBa1FnQlNBVE5nSXdJQVVnRWpZQ0hDQUZJQkUyQWdnZ0JTQVlOZ0k4SUFVZ0Z6WUNLQ0FGSUJZMkFoUWdCU0FWTmdJQUlBQWdEa3NnQXlBUFMzSU5BRUZzSVFrZ0FpQVpTdzBCSUE1QkEyc2hDUU5BSUFWQlBHb1FEeUFBSUFsUGNrVUVRQ0FLSUFVb0Fqd2lCaUFGS0FKQUlnZDBJQXQyUVFGMGFpSUlMUUFCSVF3Z0FDQUlMUUFBT2dBQUlBb2dCaUFISUF4cUlnWjBJQXQyUVFGMGFpSUhMUUFBSVFnZ0JTQUdJQWN0QUFGcU5nSkFJQUFnQ0RvQUFTQUFRUUpxSVFBTUFRc0xBMEFnQlVFOGFoQVBJUWNnQlNnQ1BDRUdJQVVvQWtBaENTQUFJQTVQSUFkeVJRUkFJQW9nQmlBSmRDQUxka0VCZEdvaUJpMEFBQ0VISUFVZ0NTQUdMUUFCYWpZQ1FDQUFJQWM2QUFBZ0FFRUJhaUVBREFFTEN3TkFJQUFnRGs5RkJFQWdDaUFHSUFsMElBdDJRUUYwYWlJSExRQUJJQUFnQnkwQUFEb0FBQ0FBUVFGcUlRQWdDV29oQ1F3QkN3c2dEMEVEYXlFQUEwQWdCVUVvYWhBUElBQWdBMDF5UlFSQUlBb2dCU2dDS0NJR0lBVW9BaXdpQjNRZ0MzWkJBWFJxSWdndEFBRWhEaUFESUFndEFBQTZBQUFnQ2lBR0lBY2dEbW9pQm5RZ0MzWkJBWFJxSWdjdEFBQWhDQ0FGSUFZZ0J5MEFBV28yQWl3Z0F5QUlPZ0FCSUFOQkFtb2hBd3dCQ3dzRFFDQUZRU2hxRUE4aEJ5QUZLQUlvSVFZZ0JTZ0NMQ0VBSUFNZ0QwOGdCM0pGQkVBZ0NpQUdJQUIwSUF0MlFRRjBhaUlHTFFBQUlRY2dCU0FBSUFZdEFBRnFOZ0lzSUFNZ0J6b0FBQ0FEUVFGcUlRTU1BUXNMQTBBZ0F5QVBUMFVFUUNBS0lBWWdBSFFnQzNaQkFYUnFJZ2N0QUFFaENDQURJQWN0QUFBNkFBQWdBMEVCYWlFRElBQWdDR29oQUF3QkN3c2dHVUVEYXlFREEwQWdCVUVVYWhBUElBSWdBMDl5UlFSQUlBb2dCU2dDRkNJR0lBVW9BaGdpQjNRZ0MzWkJBWFJxSWdndEFBRWhEaUFDSUFndEFBQTZBQUFnQ2lBR0lBY2dEbW9pQm5RZ0MzWkJBWFJxSWdjdEFBQWhDQ0FGSUFZZ0J5MEFBV28yQWhnZ0FpQUlPZ0FCSUFKQkFtb2hBZ3dCQ3dzRFFDQUZRUlJxRUE4aEJ5QUZLQUlVSVFZZ0JTZ0NHQ0VESUFJZ0dVOGdCM0pGQkVBZ0NpQUdJQU4wSUF0MlFRRjBhaUlHTFFBQUlRY2dCU0FESUFZdEFBRnFOZ0lZSUFJZ0J6b0FBQ0FDUVFGcUlRSU1BUXNMQTBBZ0FpQVpUMFVFUUNBS0lBWWdBM1FnQzNaQkFYUnFJZ2N0QUFFaENDQUNJQWN0QUFBNkFBQWdBa0VCYWlFQ0lBTWdDR29oQXd3QkN3c0RRQ0FGRUE4Z0JDQWRUM0pGQkVBZ0NpQUZLQUlBSWdJZ0JTZ0NCQ0lHZENBTGRrRUJkR29pQnkwQUFTRUlJQVFnQnkwQUFEb0FBQ0FLSUFJZ0JpQUlhaUlDZENBTGRrRUJkR29pQmkwQUFDRUhJQVVnQWlBR0xRQUJhallDQkNBRUlBYzZBQUVnQkVFQ2FpRUVEQUVMQ3dOQUlBVVFEeUVISUFVb0FnQWhCaUFGS0FJRUlRSWdCQ0FjVHlBSGNrVUVRQ0FLSUFZZ0FuUWdDM1pCQVhScUlnWXRBQUFoQnlBRklBSWdCaTBBQVdvMkFnUWdCQ0FIT2dBQUlBUkJBV29oQkF3QkN3c0RRQ0FFSUJ4UFJRUkFJQW9nQmlBQ2RDQUxka0VCZEdvaUJ5MEFBU0VJSUFRZ0J5MEFBRG9BQUNBRVFRRnFJUVFnQWlBSWFpRUNEQUVMQzBGc1FXeEJiRUZzUVd4QmJFRnNRV3dnQVNBQ1FTQkhHeUFGS0FJSUlBVW9BZ3hIR3lBRFFTQkhHeUFGS0FJY0lBVW9BaUJIR3lBQVFTQkhHeUFGS0FJd0lBVW9BalJIR3lBSlFTQkhHeUFGS0FKRUlBVW9Ba2hIR3lFSkRBRUxRV3doQ1FzZ0JVSFFBR29rQUNBSkMxZ0JBMzhDUUNBQUtBS1E2d0VpQVVVTkFDQUJLQUlBSUFGQnROVUJhaWdDQUNJQ0lBRkJ1TlVCYWlnQ0FDSURFQk1nQWdSQUlBTWdBU0FDRVFJQURBRUxJQUVRQmdzZ0FFRUFOZ0tnNndFZ0FFSUFOd09RNndFTDZRTUNCSDhDZmlBQVFRQkJLQkFESVFRZ0FrRUJRUVVnQXhzaUFFa0VRQ0FBRHdzZ0FVVUVRRUYvRHd0QkFTRUdBa0FDUUNBRFFRRkdEUUFnQXlFR0lBRW9BQUFpQlVHbzZyNXBSZzBBUVhZaEF5QUZRWEJ4UWREVXRNSUJSdzBCUVFnaEF5QUNRUWhKRFFFZ0FUVUFCQ0VJSUFSQkFUWUNGQ0FFSUFnM0F3QkJBQThMSUFFZ0FpQUdFQm9pQXlBQ1N3MEFJQVFnQXpZQ0dFRnlJUU1nQUNBQmFpSUZRUUZyTFFBQUlnSkJDSEVOQUNBQ1FTQnhJZ1pGQkVCQmNDRURJQVV0QUFBaUJVR25BVXNOQVNBRlFRZHhyVUlCSUFWQkEzWkJDbXF0aGlJSVFnT0lmaUFJZkNFSklBQkJBV29oQUFzZ0FrRUdkaUVGSUFKQkFuWkJBQ0VEQWtBQ1FBSkFBa0FnQWtFRGNVRUJhdzREQUFFQ0F3c2dBQ0FCYWkwQUFDRURJQUJCQVdvaEFBd0NDeUFBSUFGcUx3QUFJUU1nQUVFQ2FpRUFEQUVMSUFBZ0FXb29BQUFoQXlBQVFRUnFJUUFMUVFGeElRSUNmZ0pBQWtBQ1FBSkFJQVZCQVdzT0F3RUNBd0FMUW44Z0JrVU5BeG9nQUNBQmFqRUFBQXdEQ3lBQUlBRnFNd0FBUW9BQ2ZBd0NDeUFBSUFGcU5RQUFEQUVMSUFBZ0FXb3BBQUFMSVFnZ0JDQUNOZ0lnSUFRZ0F6WUNIQ0FFSUFnM0F3QkJBQ0VESUFSQkFEWUNGQ0FFSUFnZ0NTQUdHeUlJTndNSUlBUkNnSUFJSUFnZ0NFS0FnQWhhR3o0Q0VBc2dBd3RmQVFGL1FiaC9JUU1nQVVFQlFRVWdBaHNpQWs4RWZ5QUFJQUpxUVFGckxRQUFJZ0JCQTNGQkFuUkJvQjVxS0FJQUlBSnFJQUJCQkhaQkRIRkJzQjVxS0FJQWFpQUFRU0J4SWdGRmFpQUJRUVYySUFCQndBQkpjV29GUWJoL0N3c01BQ0FBSUFFZ0FrRUFFQmtMbHdNQ0JYOENmaU1BUVVCcUlnUWtBQUpBQTBBZ0FVRUZUd1JBQWtBZ0FDZ0FBRUZ3Y1VIUTFMVENBVVlFUUVKK0lRY2dBVUVJU1EwRUlBQW9BQVFpQWtGM1N3MEVJQUpCQ0dvaUF5QUJTdzBFSUFKQmdYOUpEUUVNQkFzZ0JFRVlhaUFBSUFFUUd5RUNRbjRnQkNrREdFSUFJQVFvQWl4QkFVY2JJQUliSWdkQ2ZWWU5BeUFISUFoOElnZ2dCMVJDZmlFSERRTUNRQUpBSUFGQkNFa05BQ0FBS0FBQVFYQnhRZERVdE1JQlJ3MEFJQUFvQUFRaUFrRjNTdzBGUWJoL0lBSkJDR29pQWlBQklBSkpHeUVEREFFTElBUkJHR29nQUNBQkVCc2lBa0dJZjBzRVFDQUNJUU1NQVF0QnVIOGhBeUFDRFFBZ0FTQUVLQUl3SWdKcklRVWdBQ0FDYWlFR0EwQWdCaUFGSUFSQkRHb1FIU0lEUVloL1N3MEJJQU5CQTJvaUFpQUZTd1JBUWJoL0lRTU1BZ3NnQlNBQ2F5RUZJQUlnQm1vaEJpQUVLQUlRUlEwQUN5QUVLQUk0Qkg5QnVIOGhBeUFGUVFSSkRRRWdCa0VFYWdVZ0Jnc2dBR3NoQXdzZ0EwR0lmMHNOQXdzZ0FTQURheUVCSUFBZ0Eyb2hBQXdCQ3d0Q2ZpQUlJQUViSVFjTElBUkJRR3NrQUNBSEMyUUJBWDlCdUg4aEF3SkFJQUZCQTBrTkFDQUFMUUFDSVFFZ0FpQUFMd0FBSWdCQkFYRTJBZ1FnQWlBQVFRRjJRUU54SWdNMkFnQWdBaUFBSUFGQkVIUnlRUU4ySWdBMkFnZ0NRQUpBSUFOQkFXc09Bd0lCQUFFTFFXd1BDeUFBSVFNTElBTUxSQUVDZnlBQklBSW9BZ1FpQXlBQktBSUVhaUlFTmdJRUlBQWdBMEVDZEVHZ0hXb29BZ0FnQVNnQ0FFRUFJQVJyZG5FMkFnQWdBUkFQR2lBQUlBSkJDR28yQWdRTHpnRUJCbjlCdW44aENnSkFJQUlvQWdRaUNDQUNLQUlBSWdscUlnMGdBU0FBYTBzTkFFRnNJUW9nQ1NBRUlBTW9BZ0FpQzJ0TERRQWdBQ0FKYWlJRUlBSW9BZ2dpREdzaEFpQUFJQUZCSUdzaUFDQUxJQWxCQUJBZ0lBTWdDU0FMYWpZQ0FBSkFBa0FnQkNBRmF5QU1Ud1JBSUFJaEJRd0JDeUFNSUFRZ0JtdExEUUlnQnlBSElBSWdCV3NpQW1vaUFTQUlhazhFUUNBRUlBRWdDQkFLR2d3Q0N5QUNJQWhxSVFnZ0JDQUJRUUFnQW1zUUNpQUNheUVFQ3lBRUlBQWdCU0FJUVFFUUlBc2dEU0VLQ3lBS0M4Y0VBUUovSUFBZ0Eyb2hCZ0pBSUFOQkIwd0VRQU5BSUFBZ0JrOE5BaUFBSUFJdEFBQTZBQUFnQUVFQmFpRUFJQUpCQVdvaEFnd0FDd0FMSUFSQkFVWUVRQUpBSUFBZ0Ftc2lCVUVIVFFSQUlBQWdBaTBBQURvQUFDQUFJQUl0QUFFNkFBRWdBQ0FDTFFBQ09nQUNJQUFnQWkwQUF6b0FBeUFBSUFJZ0JVRUNkQ0lGUWNBZWFpZ0NBR29pQWlnQUFEWUFCQ0FDSUFWQjRCNXFLQUlBYXlFQ0RBRUxJQUFnQWlrQUFEY0FBQXNnQWtFSWFpRUNJQUJCQ0dvaEFBc2dBU0FHVHdSQUlBQWdBMm9oQVNBRVFRRkhJQUFnQW10QkQwcHlSUVJBQTBBZ0FDQUNLUUFBTndBQUlBSkJDR29oQWlBQVFRaHFJZ0FnQVVrTkFBd0RDd0FMSUFBZ0Fpa0FBRGNBQUNBQUlBSXBBQWczQUFnZ0EwRVJTUTBCSUFCQkVHb2hBQU5BSUFBZ0Fpa0FFRGNBQUNBQUlBSXBBQmczQUFnZ0FDQUNLUUFnTndBUUlBQWdBaWtBS0RjQUdDQUNRU0JxSVFJZ0FFRWdhaUlBSUFGSkRRQUxEQUVMQWtBZ0FDQUJTd1JBSUFBaEFRd0JDeUFCSUFCcklRVUNRQ0FFUVFGSElBQWdBbXRCRDBweVJRUkFJQUloQXdOQUlBQWdBeWtBQURjQUFDQURRUWhxSVFNZ0FFRUlhaUlBSUFGSkRRQUxEQUVMSUFBZ0Fpa0FBRGNBQUNBQUlBSXBBQWczQUFnZ0JVRVJTQTBBSUFCQkVHb2hBQ0FDSVFNRFFDQUFJQU1wQUJBM0FBQWdBQ0FES1FBWU53QUlJQUFnQXlrQUlEY0FFQ0FBSUFNcEFDZzNBQmdnQTBFZ2FpRURJQUJCSUdvaUFDQUJTUTBBQ3dzZ0FpQUZhaUVDQ3dOQUlBRWdCazhOQVNBQklBSXRBQUE2QUFBZ0FVRUJhaUVCSUFKQkFXb2hBZ3dBQ3dBTEM2NEhBZ1YvQVg0akFFR0FBV3NpRVNRQUlCRWdBellDZkVGL0lROENRQUpBQWtBQ1FBSkFJQUlPQkFFQUF3SUVDeUFHUlFSQVFiaC9JUThNQkF0QmJDRVBJQVV0QUFBaUFpQURTdzBESUFnZ0FrRUNkQ0lDYWlnQ0FDRURJQUlnQjJvb0FnQWhBaUFBUVFBNkFBc2dBRUlBTndJQUlBQWdBallDRENBQUlBTTZBQW9nQUVFQU93RUlJQUVnQURZQ0FFRUJJUThNQXdzZ0FTQUpOZ0lBUVFBaER3d0NDeUFLUlFSQVFXd2hEd3dDQzBFQUlROGdDMFVnREVFWlNISU5BVUVJSUFSMFFRaHFJUUJCQUNFREEwQWdBQ0FEVFEwQ0lBTkJRR3NoQXd3QUN3QUxRV3doRHlBUklCRkIvQUJxSUJGQitBQnFJQVVnQmhBTUlnTkJpSDlMRFFBZ0VTZ0NlQ0lDSUFSTERRQWdFU2dDZkVFQmFpRUpJQUJCQ0dvaEMwR0FnQUlnQW5SQkVIVWhCVUVCSVJCQkFTQUNkQ0lQUVFGcklnb2hFZ05BSUFrZ0RrY0VRQUpBSUJFZ0RrRUJkQ0lFYWk4QkFDSU1RZi8vQTBZRVFDQUxJQkpCQTNScUlBNDJBZ1FnRWtFQmF5RVNRUUVoREF3QkN5QVFRUUFnQlNBTXdVb2JJUkFMSUFRZ0RXb2dERHNCQUNBT1FRRnFJUTRNQVFzTElBQWdBallDQkNBQUlCQTJBZ0FDUUNBS0lCSkdCRUFnRFVIcUFHb2hCa0VBSVJCQkFDRU1BMEFnQ1NBUVJnUkFJQTlCQTNZZ0QwRUJkbXBCQTJvaUJVRUJkQ0VFUVFBaERFRUFJUklEUUVFQUlRNGdEeUFTVFEwRUEwQWdEa0VDUndSQUlBc2dCU0FPYkNBTWFpQUtjVUVEZEdvZ0JpQU9JQkpxYWkwQUFEWUNCQ0FPUVFGcUlRNE1BUXNMSUJKQkFtb2hFaUFFSUF4cUlBcHhJUXdNQUFzQUJTQVJJQkJCQVhScUxnRUFJUVVnQmlBTWFpSUVJQk0zQUFCQkNDRU9BMEFnQlNBT1NnUkFJQVFnRG1vZ0V6Y0FBQ0FPUVFocUlRNE1BUXNMSUJOQ2dZS0VpSkNnd0lBQmZDRVRJQkJCQVdvaEVDQUZJQXhxSVF3TUFRc0FDd0FMSUE5QkEzWWdEMEVCZG1wQkEyb2hCVUVBSVJCQkFDRU9BMEFnQ1NBUVJnMEJRUUFoRENBUklCQkJBWFJxTGdFQUlnUkJBQ0FFUVFCS0d5RUVBMEFnQkNBTVJ3UkFJQXNnRGtFRGRHb2dFRFlDQkFOQUlBVWdEbW9nQ25FaURpQVNTdzBBQ3lBTVFRRnFJUXdNQVFzTElCQkJBV29oRUF3QUN3QUxJQUpCQVdvaEJVRUFJUXdEUUNBTUlBOUhCRUFnRFNBTElBeEJBM1JxSWdrb0FnUWlCRUVCZEdvaUFpQUNMd0VBSWdaQkFXbzdBUUFnQ1NBRklBWm5RV0J6YWlJQ09nQURJQWtnQmlBQ2RDQVBhenNCQUNBSklBZ2dCRUVDZENJQ2FpZ0NBRG9BQWlBSklBSWdCMm9vQWdBMkFnUWdERUVCYWlFTURBRUxDeUFCSUFBMkFnQWdBeUVQQ3lBUlFZQUJhaVFBSUE4TDdWb0NPMzhHZmlNQVFlQUJheUlFSkFBQ1FFR3c3QWtRQlNJRlJRUkFRVUFoQnd3QkN5QUZRZ0EzQXZUcUFTQUZRUUEyQXNUckFTQUZRUUEyQXJUckFTQUZRZ0EzQXB6ckFTQUZRUUEyQXJqcEFTQUZRUUEyQXF6c0NTQUZRZ0EzQXRUckFTQUZRZ0EzQXF6ckFTQUZRZ0EzQTRqckFTQUZRZ0EzQXVUcUFTQUZRZ0EzQXVUckFTQUZRWUdBZ01BQU5nSzg2d0VnQlVJQU53S2s2d0VnQlVIODZnRnFRUUEyQWdBZ0JVR1E2d0ZxUWdBM0F3QWdCUkFZSUFWQnJOVUJhaUVVSUFWQitPc0JhaUVjSUFWQnNPb0JhaUVpSUFWQm9EQnFJU29nQlVHWUlHb2hLeUFGUWFqUUFHb2hIaUFGUVJCcUlTd2dCVUVJYWlFb0lBVkJCR29oTFNBRlFjRHBBV29oS1NBRlFZanJBV29nQkVHVUFXb2hMeUFFUVl3QmFpRXdJQVJCaEFGcUlURWdCRUhjQUdvaE1pQUVRZFFBYWlFeklBUkJ6QUJxSVRRZ0FDRWRBa0FDUUFKQUFrQUNRQU5BUVFGQkJTQUZLQUxrNmdFYklRWUNRQU5BSUFNZ0Jra05BU0FDS0FBQVFYQnhRZERVdE1JQlJnUkFRYmgvSVFjZ0EwRUlTUTBJSUFJb0FBUWlEa0YzU3dSQVFYSWhCd3dKQ3lBRElBNUJDR29pQ1VrTkNDQU9RWUIvU3dSQUlBa2hCd3dKQ3lBRElBbHJJUU1nQWlBSmFpRUNEQUVMQ3lBRlFnQTNBcXpwQVNBRlFnQTNBK2pwQVNBRlFRQTJBcGpyQVNBRlFnQTNBNERxQVNBRlFnTTNBL2pwQVNBRlFiVHBBV3BDQURjQ0FDQUZRZkRwQVdwQ0FEY0RBQ0FGUWFqUUFHb2lDVUdNZ0lEZ0FEWUNBQ0FGUWF6UUFXcEI0QklwQWdBM0FnQWdCVUcwMEFGcVFlZ1NLQUlBTmdJQUlBVWdCVUVRYWpZQ0FDQUZJQVZCb0RCcU5nSUVJQVVnQlVHWUlHbzJBZ2dnQlNBSk5nSU1JQVZCQVVFRklBVW9BdVRxQVJzMkFyenBBUUpBSUFGRkRRQWdCU2dDck9rQklna2dIVVlOQUNBRklBazJBcmpwQVNBRklCMDJBcXpwQVNBRktBS3c2UUVoRGlBRklCMDJBckRwQVNBRklCMGdEaUFKYTJvMkFyVHBBUXRCdUg4aENTQURRUVZCQ1NBRktBTGs2Z0VpQmh0SkRRVWdBa0VCUVFVZ0Joc2dCaEFhSWc1QmlIOUxCRUFnRGlFSkRBVUxJQU1nRGtFRGFra05CU0FwSUFJZ0RpQUdFQmtpQmtHSWYwc0VRQ0FHSVFrTUJRc2dCZzBGQWtBQ1FDQUZLQUtvNndGQkFVY05BQ0FGS0FLazZ3RWlDVVVOQUNBRktBS1U2d0ZGRFFBZ0NTZ0NCRUVCYXlJSElBVW9BdHpwQVNJS3JVS0hsYSt2bUxiZW01NS9ma0xKejlteThlVzY2aWVGUWhlSlFzL1cwNzdTeDZ2WlFuNUMrZlBkOFpuMm1hc1dmQ0kvUWlHSUlEK0ZRcy9XMDc3U3g2dlpRbjRpUDBJZGlDQS9oVUw1ODkzeG1mYVpxeForSWo5Q0lJZ2dQNFduY1NFR0lBa29BZ0FoRlFOQVFRQWhDQUpBSUJVZ0JrRUNkR29vQWdBaUNVVU5BQ0FKS0FJSVFRaEpEUUFnQ1NnQ0JDSVNLQUFBUWJmSXd1RitSdzBBSUJJb0FBUWhDQXNnQ0NBS1J3UkFJQVlnQjNGQkFXb2hCaUFJRFFFTEN5QUpSUTBBSUFVUUdDQUZRWDgyQXFEckFTQUZJQWsyQXBUckFTQUZJQVVvQXR6cEFTSUlOZ0tZNndFTUFRc2dCU2dDM09rQklRZ0xBa0FnQ0VVTkFDQUZLQUtZNndFZ0NFWU5BRUZnSVFrTUJnc0NRQ0FGS0FMZzZRRUVRQ0FGSUFVb0F1anFBU0lKUlRZQzdPb0JJQWtOQVNBRlF2bnEwTkRueWFIazRRQTNBNmpxQVNBRlFnQTNBNkRxQVNBRlFzL1cwNzdTeDZ2WlFqY0RtT29CSUFWQzF1dUM3dXI5aWZYZ0FEY0RrT29CSUFWQ0FEY0RpT29CSUNKQkFFRW9FQU1hREFFTElBVkJBRFlDN09vQkN5QUJJQjFxSVNVZ0JTQUZLUVBvNlFFZ0RxMThOd1BvNlFFZ0F5QU9heUVESUFJZ0Rtb2hBaUFkSVE0RFFDQUNJQU1nQkVFc2FoQWRJaFZCaUg5TEJFQWdGU0VKREFZTElBTkJBMnNpTlNBVlNRMEVJQUpCQTJvaEcwRnNJUWtDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FDQUVLQUlzRGdNQ0FRQVZDeUFWUWYvL0Iwc05FeUFWUVFOSkRSSWdCU2tEeU9rQklUOENRQUpBSUJzdEFBQWlDVUVEY1NJYVFRRnJEZ01HQVFBSEN5QUZLQUtBNmdFTkFFRmlJUWtNRlFzZ0ZVRUZTUTBTSUJzb0FBQWhBd0ovQWtBQ1FBSkFJQWxCQW5aQkEzRWlDVUVDYXc0Q0FRSUFDeUFKUVFCSElRY2dBMEVFZGtIL0IzRWhDMEVESVFZZ0EwRU9ka0gvQjNFTUFndEJCQ0VHSUFOQkJIWkIvLzhBY1NFTFFRRWhCeUFEUVJKMkRBRUxJQU5CQkhaQi8vOFBjU0lMUVlDQUNFc05FMEVCSVFkQkJTRUdJQUl0QUFkQkNuUWdBMEVXZG5JTElnZ2dCbW9pQ1NBVlN3MFNBa0FnQzBHQkJra05BQ0FGS0FLYzZ3RkZEUUJCQUNFREEwQWdBMEdEZ0FGTERRRWdBMEZBYXlFRERBQUxBQXNnQmlBYmFpRVBJQnBCQTBjTkJpQUZLQUlNSWdJdEFBRkJDSFFoQXlBSERRY2dBMFVOQ0NBRVFmQUFhaUFQSUFnUURTSURRWWgvU3cwSklBSkJCR29oQmlBTElCeHFJaEpCQTJzaENrRUFJQUl2QVFKclFSOXhJUWNnSENFREEwQWdCRUh3QUdvUUQwVWdBeUFLU1hFRVFDQURJQVlnQkNnQ2NDSUlJQVFvQW5RaUQzUWdCM1pCQW5ScUlnSXZBUUE3QUFBZ0F5QUNMUUFEYWlJRElBWWdDQ0FQSUFJdEFBSnFJZ2gwSUFkMlFRSjBhaUlDTHdFQU93QUFJQVFnQ0NBQ0xRQUNhallDZENBRElBSXRBQU5xSVFNTUFRVWdFa0VDYXlFSUEwQWdCRUh3QUdvUUR5RVBJQVFvQW5BaENpQUVLQUowSVFJZ0F5QUlTeUFQY2tVRVFDQURJQVlnQ2lBQ2RDQUhka0VDZEdvaUNpOEJBRHNBQUNBRUlBSWdDaTBBQW1vMkFuUWdBeUFLTFFBRGFpRUREQUVMQ3dOQUlBTWdDRTBFUUNBRElBWWdDaUFDZENBSGRrRUNkR29pRHk4QkFEc0FBQ0FESUE4dEFBTnFJUU1nQWlBUExRQUNhaUVDREFFTEN3SkFJQU1nRWs4TkFDQURJQVlnQ2lBQ2RDQUhka0VDZEdvaUF5MEFBRG9BQUNBRExRQURRUUZHQkVBZ0FpQURMUUFDYWlFQ0RBRUxJQUpCSDBzTkFFRWdJQUlnQXkwQUFtb2lBaUFDUVNCUEd5RUNDMEZzUVd3Z0N5QUVLQUo0SUFRb0FueEhHeUFDUVNCSEd5RUREQXNMQUFzQUN5QUVLQUkwSWdJZ0pTQU9hMHNOQ2lBT1JRUkFRUUFoQ1NBQ0RRSU1EZ3NnRGlBYkxRQUFJQUlRQXhvZ0FpRUpEQXdMSUJVZ0pTQU9hMHNOQ1NBT0RRRkJBQ0VKSUJWRkRRd0xRYlovSVFrTUVRc2dEaUFiSUJVUUFob2dGU0VKREFvTElCd2dHd0ovQWtBQ1FBSkFJQWxCQW5aQkEzRkJBV3NPQXdFQUFnQUxJQWxCQTNZaEEwRUJEQUlMSUJzdkFBQkJCSFloQTBFQ0RBRUxJQlZCQkVrTkRpQUNMd0FESUFJdEFBVkJFSFJ5SWdKQmo0Q0FBVXNORGlBQ1FRUjJJUU5CQXdzaUFtb3RBQUFnQTBFZ2FoQURJUWtnQlNBRE5nS0E2d0VnQlNBSk5nTHc2Z0VnQWtFQmFpRUpEQVVMSUJVQ2Z3SkFBa0FDUUNBSlFRSjJRUU54UVFGckRnTUJBQUlBQ3lBSlFRTjJJUU5CQVF3Q0N5QWJMd0FBUVFSMklRTkJBZ3dCQ3lBQ0x3QURJQUl0QUFWQkVIUnlRUVIySVFOQkF3c2lBaUFEYWlJSlFTQnFTUVJBSUFrZ0ZVc05EU0FjSUFJZ0cyb2dBeEFDSVFJZ0JTQUROZ0tBNndFZ0JTQUNOZ0x3NmdFZ0FpQURhaUlDUWdBM0FCZ2dBa0lBTndBUUlBSkNBRGNBQ0NBQ1FnQTNBQUFNQlFzZ0JTQUROZ0tBNndFZ0JTQUNJQnRxTmdMdzZnRU1CQXNnQjBVRVFDQWVJQThnQ0NBVUVCUWlBa0dJZjBzZ0FpQUlUM0lORENBY0lBc2dBaUFQYWlBSUlBSnJJQjRRRlNFRERBTUxJQXRGSUFoRmNnMExJQXRCQ0hZaUF5QUlJQXRKQkg4Z0NFRUVkQ0FMYmdWQkR3dEJHR3dpQWtHTUNHb29BZ0JzSUFKQmlBaHFLQUlBYWlJR1FRTjJJQVpxSUFKQmdBaHFLQUlBSUFKQmhBaHFLQUlBSUFOc2Fra0VRQ01BUVJCckloQWtBQ0FlS0FJQUlRTWdGRUh3QkdwQkFFSHNBQkFESVFaQlZDRUNBa0FnQTBIL0FYRWlERUVNU3cwQUFrQWdGRUhjQ1dvZ0JpQVFRUWhxSUJCQkRHb2dEeUFJSUJSQjNBdHFJaGNRQ3lJU1FZaC9TdzBBSUJBb0Fnd2lCaUFNU3cwQklCUkJxQVZxSVEwZ0ZFR2tCV29oTmlBZVFRUnFJUkVnQTBHQWdJQjRjU0UzSUFaQkFXb2lFeUVDSUFZaEF3TkFJQUlpQjBFQmF5RUNJQU1pQ2tFQmF5RURJQlFnQ2tFQ2RHb29BdkFFUlEwQUMwRUJJQWNnQjBFQlRSc2hGa0VBSVFkQkFTRUNBMEFnQWlBV1J3UkFJQlFnQWtFQ2RDSURhaWdDOEFRaEdDQURJQTFxSUFjMkFnQWdBa0VCYWlFQ0lBY2dHR29oQnd3QkN3c2dEU0FITmdJQVFRQWhBaUFRS0FJSUlRTURRQ0FDSUFOSEJFQWdEU0FDSUJScVFkd0phaTBBQUNJWVFRSjBhaUlaSUJrb0FnQWlHVUVCYWpZQ0FDQVVJQmxCQVhScUloa2dHRG9BM1FVZ0dTQUNPZ0RjQlNBQ1FRRnFJUUlNQVFzTFFRQWhBeUFOUVFBMkFnQWdEQ0FHUVg5emFpRUdRUUVoQWdOQUlBSWdGa2NFUUNBVUlBSkJBblJxSWcwZ0F6WUNBQ0FOS0FMd0JDQUNJQVpxZENBRGFpRURJQUpCQVdvaEFnd0JDd3NnRENBVElBcHJJZ1pyUVFGcUlRb2dCaUVEQTBBZ0F5QUtTUVJBSUJRZ0EwRTBiR29oRFVFQklRSURRQ0FDSUJaSEJFQWdEU0FDUVFKMEloaHFJQlFnR0dvb0FnQWdBM1kyQWdBZ0FrRUJhaUVDREFFTEN5QURRUUZxSVFNTUFRc0xJQmNnRkVFMEVBSWhPQ0FVUVpBTWFpRTVJQk1nREdzaE9pQVVRZHdGYWlFWFFRQWhDZ05BQWtBQ1FDQUhJQXBIQkVCQkFTQU1JQk1nRnlBS1FRRjBhaUlDTFFBQklnMXJJZ05ySWhoMElSa2dBaTBBQUNFV0lEZ2dEVUVDZEdvaUh5Z0NBQ0VDSUFZZ0dFMEVRQ0EyUVFFZ0F5QTZhaUlOSUExQkFVd2JJaUJCQW5RaUpHb29BZ0FoRFNBNUlCUWdBMEUwYkdwQk5CQUNJU0VnRFVFQmRDRW1JQkVnQWtFQ2RHb2hJeUFnUVFGTkRRSWdBMEVRZEVHQWdQd0hjU0FXY2tHQWdJQUljaUVnSUNFZ0pHb29BZ0FoSkVFQUlRSURRQ0FDSUNSR0RRTWdJeUFDUVFKMGFpQWdOZ0VBSUFKQkFXb2hBZ3dBQ3dBTElBSWdBaUFaYWlJTklBSWdEVXNiSVEwZ0EwRVFkRUdBZ1B3SGNTQVdja0dBZ0lBSWNpRURBMEFnQWlBTlJnMERJQkVnQWtFQ2RHb2dBellCQUNBQ1FRRnFJUUlNQUFzQUN5QWVJQXhCRUhRZ04zSWdESEpCZ0FKeU5nSUFEQU1MSUFjZ0RXc2hKQ0FYSUNacUlTWkJBQ0VOQTBBZ0RTQWtSZzBCUVFFZ0dDQVRJQ1lnRFVFQmRHb2lKeTBBQVNJQ2F5STdhM1FpUENBaElBSkJBblJxSWlBb0FnQWlBbW9oUFNBRElEdHFRUkIwUVlDQS9BZHhJQ2N0QUFCQkNIUnlJQlp5UVlDQWdCQnlJU2NEUUNBaklBSkJBblJxSUNjMkFRQWdBa0VCYWlJQ0lEMUpEUUFMSUNBZ0lDZ0NBQ0E4YWpZQ0FDQU5RUUZxSVEwTUFBc0FDeUFmSUI4b0FnQWdHV28yQWdBZ0NrRUJhaUVLREFBTEFBc2dFaUVDQ3lBUVFSQnFKQUFnQWtHSWYwc2dBaUFJVDNJTkRDQWNJQXNnQWlBUGFpQUlJQUpySUI0UUZpRUREQU1MSUI0Z0R5QUlJQlFRRkNJQ1FZaC9TeUFDSUFoUGNnMExJQndnQ3lBQ0lBOXFJQWdnQW1zZ0hoQVhJUU1NQWdzZ0F3UkFJQndnQ3lBUElBZ2dBaEFXSVFNTUFnc2dIQ0FMSUE4Z0NDQUNFQmNoQXd3QkN5QWNJQXNnRHlBSUlBSVFGU0VEQ3lBRFFZaC9TdzBJSUFVZ0N6WUNnT3NCSUFVZ0hEWUM4T29CSUFWQkFUWUNnT29CSUJwQkFrWUVRQ0FGSUI0MkFnd0xJQXNnSEdvaUFrSUFOd0FBSUFKQ0FEY0FHQ0FDUWdBM0FCQWdBa0lBTndBSUlBbEJpSDlMRFFvTElBa2dGVVlOQ0NBVklBbHJJUVlnQlNnQ25Pc0JJUW9DUUNBSklCdHFJZ010QUFBaUQwVUVRRUVCSVFKQkFDRVBRYmgvSVFrZ0JrRUJSZzBCREFzTEFuOGdBMEVCYWlBUHdDSUNRUUJPRFFBYUlBSkJmMFlFUUNBR1FRTklEUXNnQXk4QUFVR0EvZ0ZxSVE4Z0EwRURhZ3dCQ3lBR1FRSklEUW9nQXkwQUFTQVBRUWgwY2tHQWdBSnJJUThnQTBFQ2Fnc2hFa0c0ZnlFSklCSkJBV29pQWlBVklCdHFJZ2RMRFFvZ0xDQUZJQkl0QUFBaUVrRUdka0VqUVFrZ0FpQUhJQUpyUWNBUVFkQVJRZkFTSUFVb0FvVHFBU0FLSUE4Z0ZCQWhJZ2xCaUg5TERRZ2dLeUFvSUJKQkJIWkJBM0ZCSDBFSUlBSWdDV29pQWlBSElBSnJRWUFMUVlBTVFZQVhJQVVvQW9UcUFTQUZLQUtjNndFZ0R5QVVFQ0VpQ0VHSWYwc05DRUZzSVFrZ0tpQXRJQkpCQW5aQkEzRkJORUVKSUFJZ0NHb2lBaUFISUFKclFZQU5RZUFPUVpBWklBVW9Bb1RxQVNBRktBS2M2d0VnRHlBVUVDRWlCMEdJZjBzTkNpQUNJQWRxSUFOcklnSWhDU0FDUVloL1N3MEtDeUFPSUE5QkFFeHlEUUVMUWJwL0lRa01DQXNnSlNBT2F5RUpJQVlnQW1zaEJpQUNJQU5xSVFjQ1FBSkFBa0FnQ2tVRVFDQVBRUWxJSUFVcEE4anBBVUtCZ0lBSVZISU5BaUFvS0FJQUlnSkJDR29oRWlBQ0tBSUVJUXBCQUNFRFFRQWhBZ05BSUFNZ0NuWkZCRUFnQWlBU0lBTkJBM1JxTFFBQ1FSWkxhaUVDSUFOQkFXb2hBd3dCQ3dzZ0JVRUFOZ0tjNndFZ0FrRUlJQXByZEVFVVR3MEJEQU1MSUFWQkFEWUNuT3NCQ3lBRUlBVW9BdkRxQVNJRE5nTGNBU0FKSUE1cUlSWWdBeUFGS0FLQTZ3RnFJUmNDUUNBUFJRUkFJQTRoQnd3QkN5QUZLQUs0NlFFaEdpQUZLQUswNlFFaEdDQUZLQUt3NlFFaEVpQUZRUUUyQW9UcUFVRUFJUU1EUUNBRFFRTkhCRUFnQkNBRFFRSjBJZ0pxSUFJZ0JXcEJyTkFCYWlnQ0FEWUNaQ0FEUVFGcUlRTU1BUXNMUVd3aENTQUVRVGhxSWdJZ0J5QUdFQTFCaUg5TERRTkJDQ0FQSUE5QkNFNGJJUjhnTkNBQ0lBVW9BZ0FRSGlBeklBSWdCU2dDQ0JBZUlESWdBaUFGS0FJRUVCNGdEaUFTYXlFWlFRQWhDQU5BSUFSQk9Hb1FEMEVEUmlBSUlCOU9ja1VFUUNBRUtBSlFJQVFvQWt4QkEzUnFLUUlBSWtDbklnZEJFSFlpRVVIL0FYRWhDeUFFS0FKZ0lBUW9BbHhCQTNScUtRSUFJa0duSWd4QkVIWWlJVUgvQVhFaEVDQUVLQUpZSUFRb0FsUkJBM1JxS1FJQUlrSkNJSWluSVFZZ1FVSWdpQ0JBUWlDSXB5RURBa0FnUWtJUWlLY2lDa0gvQVhFaUFrRUNUd1JBQWtBZ0FrRVpTU0EvUW9HQWdCQlVja1VFUUNBRVFTQWdCQ2dDUENJS2F5SU5JQUlnQWlBTlN4c2lFeUFLYWpZQ1BDQUdJQVFvQWpnZ0NuUkJBQ0FUYTNZZ0FpQVRheUlUZEdvaENpQUVRVGhxRUE4YUlBSWdEVTBOQVNBRUlBUW9BandpQWlBVGFqWUNQQ0FFS0FJNElBSjBRUUFnRTJ0MklBcHFJUW9NQVFzZ0JDQUNJQVFvQWp3aURXbzJBandnQkNnQ09DQU5kRUVBSUFwcmRpQUdhaUVLSUFSQk9Hb1FEeG9MSUFRcEFtUWhSQ0FFSUFvMkFtUWdCQ0JFTndKb0RBRUxBa0FnQWtVRVFDQURCRUFnQkNnQ1pDRUtEQU1MSUFRb0FtZ2hDZ3dCQ3lBRUlBUW9BandpQWtFQmFqWUNQQUovSUFZZ0EwVnFJQVFvQWpnZ0FuUkJIM1pxSWdKQkEwWUVRQ0FFS0FKa1FRRnJEQUVMSUFKQkFuUWdCR29vQW1RTElnWkZJQVpxSVFvZ0FrRUJSd1JBSUFRZ0JDZ0NhRFlDYkFzTElBUWdCQ2dDWkRZQ2FDQUVJQW8yQW1RTHB5RUNJRUZDZ0lEOEI0TlFSUVJBSUFRZ0JDZ0NQQ0lHSUJCcU5nSThJQVFvQWpnZ0JuUkJBQ0FoYTNZZ0Ftb2hBZ3NnQ3lBUWFrRVVUd1JBSUFSQk9Hb1FEeG9MSUVCQ2dJRDhCNE5RUlFSQUlBUWdCQ2dDUENJR0lBdHFOZ0k4SUFRb0FqZ2dCblJCQUNBUmEzWWdBMm9oQXdzZ0JFRTRhaEFQR2lBRUlBUW9BamdpQmtFQUlBZEJHSFlpQ3lBRUtBSThhaUlRYTNZZ0MwRUNkRUdnSFdvb0FnQnhJQWRCLy84RGNXbzJBa3dnQkNBUUlBeEJHSFlpQjJvaUN6WUNQQ0FFSUFkQkFuUkJvQjFxS0FJQUlBWkJBQ0FMYTNaeElBeEIvLzhEY1dvMkFsd2dCRUU0YWhBUEdpQUVJRUtuSWdaQkdIWWlCeUFFS0FJOGFpSUxOZ0k4SUFRZ0IwRUNkRUdnSFdvb0FnQWdCQ2dDT0VFQUlBdHJkbkVnQmtILy93TnhhallDVkNBRVFmQUFhaUFJUVF4c2FpSUdJQW8yQWdnZ0JpQUNOZ0lFSUFZZ0F6WUNBQ0FJUVFGcUlRZ2dBeUFaYWlBQ2FpRVpEQUVMQ3lBSUlCOUlEUU1nRmtFZ2F5RWhJQTRoQndOQUlBUkJPR29RRDBFRFJpQUlJQTlPY2tVRVFDQUVLQUpRSUFRb0FreEJBM1JxS1FJQUlrQ25JZ1pCRUhZaUkwSC9BWEVoQ2lBRUtBSmdJQVFvQWx4QkEzUnFLUUlBSWtHbklnMUJFSFlpSUVIL0FYRWhFeUFFS0FKWUlBUW9BbFJCQTNScUtRSUFJa0pDSUlpbklRTWdRVUlnaUNCQVFpQ0lweUVMQWtBZ1FrSVFpS2NpREVIL0FYRWlBa0VDVHdSQUFrQWdBa0VaU1NBL1FvR0FnQkJVY2tVRVFDQUVRU0FnQkNnQ1BDSU1heUlSSUFJZ0FpQVJTeHNpRUNBTWFqWUNQQ0FESUFRb0FqZ2dESFJCQUNBUWEzWWdBaUFRYXlJTWRHb2hFQ0FFUVRocUVBOGFJQUlnRVUwTkFTQUVJQVFvQWp3aUFpQU1hallDUENBRUtBSTRJQUowUVFBZ0RHdDJJQkJxSVJBTUFRc2dCQ0FDSUFRb0Fqd2lFR28yQWp3Z0JDZ0NPQ0FRZEVFQUlBeHJkaUFEYWlFUUlBUkJPR29RRHhvTElBUXBBbVFoUkNBRUlCQTJBbVFnQkNCRU53Sm9EQUVMQWtBZ0FrVUVRQ0FMQkVBZ0JDZ0NaQ0VRREFNTElBUW9BbWdoRUF3QkN5QUVJQVFvQWp3aUFrRUJhallDUEFKL0lBTWdDMFZxSUFRb0FqZ2dBblJCSDNacUlnSkJBMFlFUUNBRUtBSmtRUUZyREFFTElBSkJBblFnQkdvb0FtUUxJZ05GSUFOcUlSQWdBa0VCUndSQUlBUWdCQ2dDYURZQ2JBc0xJQVFnQkNnQ1pEWUNhQ0FFSUJBMkFtUUxweUVNSUVGQ2dJRDhCNE5RUlFSQUlBUWdCQ2dDUENJQ0lCTnFOZ0k4SUFRb0FqZ2dBblJCQUNBZ2EzWWdER29oREFzZ0NpQVRha0VVVHdSQUlBUkJPR29RRHhvTElFQkNnSUQ4QjROUVJRUkFJQVFnQkNnQ1BDSUNJQXBxTmdJOElBUW9BamdnQW5SQkFDQWphM1lnQzJvaEN3c2dCRUU0YWhBUEdpQUVJQVFvQWpnaUFrRUFJQVpCR0hZaUF5QUVLQUk4YWlJS2EzWWdBMEVDZEVHZ0hXb29BZ0J4SUFaQi8vOERjV28yQWt3Z0JDQUtJQTFCR0hZaUEyb2lCallDUENBRUlBTkJBblJCb0IxcUtBSUFJQUpCQUNBR2EzWnhJQTFCLy84RGNXbzJBbHdnQkVFNGFoQVBHaUFFSUVLbklnSkJHSFlpQXlBRUtBSThhaUlHTmdJOElBUWdBMEVDZEVHZ0hXb29BZ0FnQkNnQ09FRUFJQVpyZG5FZ0FrSC8vd054YWpZQ1ZBSkFBa0FDUUNBRUtBTGNBU0lESUFSQjhBQnFJQWhCQjNGQkRHeHFJaE1vQWdBaUVXb2lJeUFYU3cwQUlBY2dFeWdDQkNJTklCRnFJZ3BxSUNGTERRQWdDa0VnYWlBV0lBZHJUUTBCQ3lBRUlCTW9BZ2cyQWhnZ0JDQVRLUUlBTndNUUlBY2dGaUFFUVJCcUlBUkIzQUZxSUJjZ0VpQVlJQm9RSHlFS0RBRUxJQWNnRVdvaEFpQVRLQUlJSVFZZ0J5QURLUUFBTndBQUlBY2dBeWtBQ0RjQUNBSkFJQkZCRVVrTkFDQUhJQU1wQUJBM0FCQWdCeUFES1FBWU53QVlJQkZCRUd0QkVVZ05BQ0FEUVJCcUlRTWdCMEVnYWlFUkEwQWdFU0FES1FBUU53QUFJQkVnQXlrQUdEY0FDQ0FSSUFNcEFDQTNBQkFnRVNBREtRQW9Od0FZSUFOQklHb2hBeUFSUVNCcUloRWdBa2tOQUFzTElBSWdCbXNoQXlBRUlDTTJBdHdCSUFJZ0Vtc2dCa2tFUUNBR0lBSWdHR3RMRFFjZ0dpQWFJQU1nRW1zaUEyb2lFU0FOYWs4RVFDQUNJQkVnRFJBS0dnd0NDeUFESUExcUlRMGdBaUFSUVFBZ0Eyc1FDaUFEYXlFQ0lCSWhBd3NnQmtFUVR3UkFJQUlnQXlrQUFEY0FBQ0FDSUFNcEFBZzNBQWdnRFVFUlNBMEJJQUlnRFdvaEJpQUNRUkJxSVFJRFFDQUNJQU1wQUJBM0FBQWdBaUFES1FBWU53QUlJQUlnQXlrQUlEY0FFQ0FDSUFNcEFDZzNBQmdnQTBFZ2FpRURJQUpCSUdvaUFpQUdTUTBBQ3d3QkN3SkFJQVpCQjAwRVFDQUNJQU10QUFBNkFBQWdBaUFETFFBQk9nQUJJQUlnQXkwQUFqb0FBaUFDSUFNdEFBTTZBQU1nQWlBRElBWkJBblFpQmtIQUhtb29BZ0JxSWdNb0FBQTJBQVFnQXlBR1FlQWVhaWdDQUdzaEF3d0JDeUFDSUFNcEFBQTNBQUFMSUExQkNVa05BQ0FDSUExcUlSRWdBa0VJYWlJR0lBTkJDR29pQTJ0QkQwd0VRQU5BSUFZZ0F5a0FBRGNBQUNBRFFRaHFJUU1nQmtFSWFpSUdJQkZKRFFBTUFnc0FDeUFHSUFNcEFBQTNBQUFnQmlBREtRQUlOd0FJSUExQkdVZ05BQ0FDUVJocUlRSURRQ0FDSUFNcEFCQTNBQUFnQWlBREtRQVlOd0FJSUFJZ0F5a0FJRGNBRUNBQ0lBTXBBQ2czQUJnZ0EwRWdhaUVESUFKQklHb2lBaUFSU1EwQUN3c2dDa0dJZjBzRVFDQUtJUWtNQmdVZ0V5QVFOZ0lJSUJNZ0REWUNCQ0FUSUFzMkFnQWdDRUVCYWlFSUlBY2dDbW9oQnlBTElCbHFJQXhxSVJrTUFnc0FDd3NnQ0NBUFNBMERJQWdnSDJzaEJnTkFBa0FnQmlBUFRnUkFRUUFoQXdOQUlBTkJBMFlOQWlBRklBTkJBblFpQW1wQnJOQUJhaUFDSUFScUtBSmtOZ0lBSUFOQkFXb2hBd3dBQ3dBTEFrQUNRQUpBSUFRb0F0d0JJZ01nQkVId0FHb2dCa0VIY1VFTWJHb2lDQ2dDQUNJTWFpSVFJQmRMRFFBZ0J5QUlLQUlFSWdzZ0RHb2lDbW9nSVVzTkFDQUtRU0JxSUJZZ0IydE5EUUVMSUFRZ0NDZ0NDRFlDS0NBRUlBZ3BBZ0EzQXlBZ0J5QVdJQVJCSUdvZ0JFSGNBV29nRnlBU0lCZ2dHaEFmSVFvTUFRc2dCeUFNYWlFQ0lBZ29BZ2doQ0NBSElBTXBBQUEzQUFBZ0J5QURLUUFJTndBSUFrQWdERUVSU1EwQUlBY2dBeWtBRURjQUVDQUhJQU1wQUJnM0FCZ2dERUVRYTBFUlNBMEFJQU5CRUdvaEF5QUhRU0JxSVF3RFFDQU1JQU1wQUJBM0FBQWdEQ0FES1FBWU53QUlJQXdnQXlrQUlEY0FFQ0FNSUFNcEFDZzNBQmdnQTBFZ2FpRURJQXhCSUdvaURDQUNTUTBBQ3dzZ0FpQUlheUVESUFRZ0VEWUMzQUVnQWlBU2F5QUlTUVJBSUFnZ0FpQVlhMHNOQnlBYUlCb2dBeUFTYXlJRGFpSU1JQXRxVHdSQUlBSWdEQ0FMRUFvYURBSUxJQU1nQzJvaEN5QUNJQXhCQUNBRGF4QUtJQU5ySVFJZ0VpRURDeUFJUVJCUEJFQWdBaUFES1FBQU53QUFJQUlnQXlrQUNEY0FDQ0FMUVJGSURRRWdBaUFMYWlFSUlBSkJFR29oQWdOQUlBSWdBeWtBRURjQUFDQUNJQU1wQUJnM0FBZ2dBaUFES1FBZ053QVFJQUlnQXlrQUtEY0FHQ0FEUVNCcUlRTWdBa0VnYWlJQ0lBaEpEUUFMREFFTEFrQWdDRUVIVFFSQUlBSWdBeTBBQURvQUFDQUNJQU10QUFFNkFBRWdBaUFETFFBQ09nQUNJQUlnQXkwQUF6b0FBeUFDSUFNZ0NFRUNkQ0lJUWNBZWFpZ0NBR29pQXlnQUFEWUFCQ0FESUFoQjRCNXFLQUlBYXlFRERBRUxJQUlnQXlrQUFEY0FBQXNnQzBFSlNRMEFJQUlnQzJvaERDQUNRUWhxSWdnZ0EwRUlhaUlEYTBFUFRBUkFBMEFnQ0NBREtRQUFOd0FBSUFOQkNHb2hBeUFJUVFocUlnZ2dERWtOQUF3Q0N3QUxJQWdnQXlrQUFEY0FBQ0FJSUFNcEFBZzNBQWdnQzBFWlNBMEFJQUpCR0dvaEFnTkFJQUlnQXlrQUVEY0FBQ0FDSUFNcEFCZzNBQWdnQWlBREtRQWdOd0FRSUFJZ0F5a0FLRGNBR0NBRFFTQnFJUU1nQWtFZ2FpSUNJQXhKRFFBTEN5QUtRWWgvU3dSQUlBb2hDUXdHQlNBR1FRRnFJUVlnQnlBS2FpRUhEQUlMQUFzTElBUW9BdHdCSVFNTFFicC9JUWtnRnlBRGF5SUNJQllnQjJ0TERRSWdCd1IvSUFjZ0F5QUNFQUlnQW1vRlFRQUxJQTVySVFrTUFnc2dCVUVBTmdLYzZ3RUxJQVFnQlNnQzhPb0JJZ00yQXR3QklBa2dEbW9oRENBRElBVW9Bb0RyQVdvaEVBSkFJQTlGQkVBZ0RpRUdEQUVMSUFVb0FyanBBU0VOSUFVb0FyVHBBU0VUSUFVb0FyRHBBU0VTSUFWQkFUWUNoT29CUVFBaEF3TkFJQU5CQTBjRVFDQUVJQU5CQW5RaUFtb2dBaUFGYWtHczBBRnFLQUlBTmdLY0FTQURRUUZxSVFNTUFRc0xRV3doQ1NBRVFmQUFhaUlDSUFjZ0JoQU5RWWgvU3cwQklERWdBaUFGS0FJQUVCNGdNQ0FDSUFVb0FnZ1FIaUF2SUFJZ0JTZ0NCQkFlSUF4QklHc2hHQ0FPSVFZRFFDQUVLQUtJQVNBRUtBS0VBVUVEZEdvcEFnQWlRS2NpQ2tFUWRpSVpRZjhCY1NFTElBUW9BcGdCSUFRb0FwUUJRUU4wYWlrQ0FDSkJweUlXUVJCMkloOUIvd0Z4SVJvZ0JDZ0NrQUVnQkNnQ2pBRkJBM1JxS1FJQUlrSkNJSWluSVFjZ1FVSWdpQ0JBUWlDSXB5RURBa0FnUWtJUWlLY2lDRUgvQVhFaUFrRUNUd1JBQWtBZ0FrRVpTU0EvUW9HQWdCQlVja1VFUUNBRVFTQWdCQ2dDZENJSWF5SVJJQUlnQWlBUlN4c2lGeUFJYWpZQ2RDQUhJQVFvQW5BZ0NIUkJBQ0FYYTNZZ0FpQVhheUlYZEdvaENDQUVRZkFBYWhBUEdpQUNJQkZORFFFZ0JDQUVLQUowSWdJZ0YybzJBblFnQkNnQ2NDQUNkRUVBSUJkcmRpQUlhaUVJREFFTElBUWdBaUFFS0FKMEloRnFOZ0owSUFRb0FuQWdFWFJCQUNBSWEzWWdCMm9oQ0NBRVFmQUFhaEFQR2dzZ0JDa0NuQUVoUkNBRUlBZzJBcHdCSUFRZ1JEY0NvQUVNQVFzQ1FDQUNSUVJBSUFNRVFDQUVLQUtjQVNFSURBTUxJQVFvQXFBQklRZ01BUXNnQkNBRUtBSjBJZ0pCQVdvMkFuUUNmeUFISUFORmFpQUVLQUp3SUFKMFFSOTJhaUlDUVFOR0JFQWdCQ2dDbkFGQkFXc01BUXNnQWtFQ2RDQUVhaWdDbkFFTElnZEZJQWRxSVFnZ0FrRUJSd1JBSUFRZ0JDZ0NvQUUyQXFRQkN3c2dCQ0FFS0FLY0FUWUNvQUVnQkNBSU5nS2NBUXVuSVFJZ1FVS0FnUHdIZzFCRkJFQWdCQ0FFS0FKMElnY2dHbW8yQW5RZ0JDZ0NjQ0FIZEVFQUlCOXJkaUFDYWlFQ0N5QUxJQnBxUVJSUEJFQWdCRUh3QUdvUUR4b0xJRUJDZ0lEOEI0TlFSUVJBSUFRZ0JDZ0NkQ0lISUF0cU5nSjBJQVFvQW5BZ0IzUkJBQ0FaYTNZZ0Eyb2hBd3NnQkVId0FHb1FEeG9nQkNBRUtBSndJZ2RCQUNBS1FSaDJJZ3NnQkNnQ2RHb2lHbXQySUF0QkFuUkJvQjFxS0FJQWNTQUtRZi8vQTNGcU5nS0VBU0FFSUJvZ0ZrRVlkaUlLYWlJTE5nSjBJQVFnQ2tFQ2RFR2dIV29vQWdBZ0IwRUFJQXRyZG5FZ0ZrSC8vd054YWpZQ2xBRWdCRUh3QUdvUUR4b2dCQ0JDcHlJSFFSaDJJZ29nQkNnQ2RHb2lDellDZENBRUlBcEJBblJCb0IxcUtBSUFJQVFvQW5CQkFDQUxhM1p4SUFkQi8vOERjV28yQW93QklBUWdBellDT0NBRUlBSTJBandnQkNBSU5nSkFBa0FDUUFKQUlBUW9BdHdCSWdzZ0Eyb2lGaUFRU3cwQUlBWWdBaUFEYWlJS2FpQVlTdzBBSUFwQklHb2dEQ0FHYTAwTkFRc2dCQ0FFUVVCcktBSUFOZ0lJSUFRZ0JDa0RPRGNEQUNBR0lBd2dCQ0FFUWR3QmFpQVFJQklnRXlBTkVCOGhDZ3dCQ3lBRElBWnFJUWNnQmlBTEtRQUFOd0FBSUFZZ0N5a0FDRGNBQ0FKQUlBTkJFVWtOQUNBR0lBc3BBQkEzQUJBZ0JpQUxLUUFZTndBWUlBTkJFR3RCRVVnTkFDQUxRUkJxSVFNZ0JrRWdhaUVMQTBBZ0N5QURLUUFRTndBQUlBc2dBeWtBR0RjQUNDQUxJQU1wQUNBM0FCQWdDeUFES1FBb053QVlJQU5CSUdvaEF5QUxRU0JxSWdzZ0Iwa05BQXNMSUFjZ0NHc2hBeUFFSUJZMkF0d0JJQWNnRW1zZ0NFa0VRQ0FJSUFjZ0UydExEUVFnRFNBTklBTWdFbXNpQTJvaUN5QUNhazhFUUNBSElBc2dBaEFLR2d3Q0N5QUhJQXRCQUNBRGF4QUtJQVFnQWlBRGFpSUNOZ0k4SUFOcklRY2dFaUVEQ3lBSVFSQlBCRUFnQnlBREtRQUFOd0FBSUFjZ0F5a0FDRGNBQ0NBQ1FSRklEUUVnQWlBSGFpRUlJQWRCRUdvaEFnTkFJQUlnQXlrQUVEY0FBQ0FDSUFNcEFCZzNBQWdnQWlBREtRQWdOd0FRSUFJZ0F5a0FLRGNBR0NBRFFTQnFJUU1nQWtFZ2FpSUNJQWhKRFFBTERBRUxBa0FnQ0VFSFRRUkFJQWNnQXkwQUFEb0FBQ0FISUFNdEFBRTZBQUVnQnlBRExRQUNPZ0FDSUFjZ0F5MEFBem9BQXlBSElBTWdDRUVDZENJSVFjQWVhaWdDQUdvaUF5Z0FBRFlBQkNBRElBaEI0QjVxS0FJQWF5RUREQUVMSUFjZ0F5a0FBRGNBQUFzZ0FrRUpTUTBBSUFJZ0Iyb2hDeUFIUVFocUlnZ2dBMEVJYWlJRGEwRVBUQVJBQTBBZ0NDQURLUUFBTndBQUlBTkJDR29oQXlBSVFRaHFJZ2dnQzBrTkFBd0NDd0FMSUFnZ0F5a0FBRGNBQUNBSUlBTXBBQWczQUFnZ0FrRVpTQTBBSUFkQkdHb2hBZ05BSUFJZ0F5a0FFRGNBQUNBQ0lBTXBBQmczQUFnZ0FpQURLUUFnTndBUUlBSWdBeWtBS0RjQUdDQURRU0JxSVFNZ0FrRWdhaUlDSUF0SkRRQUxDeUFLUVloL1N3UkFJQW9oQ1F3REN5QUdJQXBxSVFZZ0JFSHdBR29RRHlFRElBOUJBV3NpRHcwQUMwRUFJUUlnQTBFQ1NRMEJBMEFnQWtFRFJ3UkFJQVVnQWtFQ2RDSURha0dzMEFGcUlBTWdCR29vQXB3Qk5nSUFJQUpCQVdvaEFnd0JDd3NnQkNnQzNBRWhBd3RCdW44aENTQVFJQU5ySWdJZ0RDQUdhMHNOQUNBR0JIOGdCaUFESUFJUUFpQUNhZ1ZCQUFzZ0Rtc2hDUXNnQ1VHSWYwc05CZ3NDUUNBRktBTHM2Z0ZGRFFBZ0JTQUZLUU9JNmdFZ0NhMThOd09JNmdFQ1FDQUZLQUxRNmdFaUFpQUphaUlJUVI5TkJFQWdEa1VOQVNBQ0lDSnFJQTRnQ1JBQ0dpQUZLQUxRNmdFZ0NXb2hDQXdCQ3lBT0lRTWdBZ1JBSUFJZ0ltb2dBMEVnSUFKckVBSWFJQVVvQXREcUFTRUNJQVZCQURZQzBPb0JJQVVnQlNrRGtPb0JJQVVwQUxEcUFVTFAxdE8rMHNlcjJVSitmRUlmaVVLSGxhK3ZtTGJlbTU1L2ZqY0RrT29CSUFVZ0JTa0RtT29CSUFVcEFManFBVUxQMXRPKzBzZXIyVUorZkVJZmlVS0hsYSt2bUxiZW01NS9mamNEbU9vQklBVWdCU2tEb09vQklBVXBBTURxQVVMUDF0Tyswc2VyMlVKK2ZFSWZpVUtIbGErdm1MYmVtNTUvZmpjRG9Pb0JJQVVnQlNrRHFPb0JJQVVwQU1qcUFVTFAxdE8rMHNlcjJVSitmRUlmaVVLSGxhK3ZtTGJlbTU1L2ZqY0RxT29CSUFNZ0FtdEJJR29oQXdzZ0NTQU9haUlDSUFOQklHcFBCRUFnQWtFZ2F5RUdJQVVwQTZqcUFTRS9JQVVwQTZEcUFTRkFJQVVwQTVqcUFTRkJJQVVwQTVEcUFTRkNBMEFnQXlrQUdFTFAxdE8rMHNlcjJVSitJRDk4UWgrSlFvZVZyNitZdHQ2Ym5uOStJVDhnQXlrQUVFTFAxdE8rMHNlcjJVSitJRUI4UWgrSlFvZVZyNitZdHQ2Ym5uOStJVUFnQXlrQUNFTFAxdE8rMHNlcjJVSitJRUY4UWgrSlFvZVZyNitZdHQ2Ym5uOStJVUVnQXlrQUFFTFAxdE8rMHNlcjJVSitJRUo4UWgrSlFvZVZyNitZdHQ2Ym5uOStJVUlnQTBFZ2FpSURJQVpORFFBTElBVWdQemNEcU9vQklBVWdRRGNEb09vQklBVWdRVGNEbU9vQklBVWdRamNEa09vQkN5QUNJQU5ORFFFZ0lpQURJQUlnQTJzaUNCQUNHZ3NnQlNBSU5nTFE2Z0VMSURVZ0ZXc2hBeUFWSUJ0cUlRSWdDU0FPYWlFT0lBUW9BakJGRFFBTElDa3BBd0FpUDBKL1VTQS9JQTRnSFd1c1VYSkZCRUJCYkNFSkRBWUxJQVVvQXVEcEFRUkFRV29oQ1NBRFFRUkpEUVlnQlNnQzZPb0JSUVJBSUNJZ0JTZ0MwT29CYWlFS0FuNGdCU2tEaU9vQklqOUNJRm9FUUNBRktRT1k2Z0VpUUVJSGlTQUZLUU9RNmdFaVFVSUJpWHdnQlNrRG9Pb0JJa0pDRElsOElBVXBBNmpxQVNKRFFoS0pmQ0JCUXMvVzA3N1N4NnZaUW41Q0g0bENoNVd2cjVpMjNwdWVmMzZGUW9lVnI2K1l0dDZibm45K1FwMmp0ZXFEc1kySytnQjlJRUJDejliVHZ0TEhxOWxDZmtJZmlVS0hsYSt2bUxiZW01NS9mb1ZDaDVXdnI1aTIzcHVlZjM1Q25hTzE2b094allyNkFIMGdRa0xQMXRPKzBzZXIyVUorUWgrSlFvZVZyNitZdHQ2Ym5uOStoVUtIbGErdm1MYmVtNTUvZmtLZG83WHFnN0dOaXZvQWZTQkRRcy9XMDc3U3g2dlpRbjVDSDRsQ2g1V3ZyNWkyM3B1ZWYzNkZRb2VWcjYrWXR0NmJubjkrUXAyanRlcURzWTJLK2dCOURBRUxJQVVwQTZEcUFVTEZ6OW15OGVXNjZpZDhDeUEvZkNFL0lDSWhCZ05BSUFvZ0JrRUlhaUlIVHdSQUlBWXBBQUJDejliVHZ0TEhxOWxDZmtJZmlVS0hsYSt2bUxiZW01NS9maUEvaFVJYmlVS0hsYSt2bUxiZW01NS9ma0tkbzdYcWc3R05pdm9BZlNFL0lBY2hCZ3dCQ3dzQ1FDQUtJQVpCQkdvaUNFa0VRQ0FHSVFnTUFRc2dCalVBQUVLSGxhK3ZtTGJlbTU1L2ZpQS9oVUlYaVVMUDF0Tyswc2VyMlVKK1F2bnozZkdaOXBtckZud2hQd3NEUUNBSUlBcEpCRUFnQ0RFQUFFTEZ6OW15OGVXNjZpZCtJRCtGUWd1SlFvZVZyNitZdHQ2Ym5uOStJVDhnQ0VFQmFpRUlEQUVMQ3lBQ0tBQUFJRDlDSVlnZ1A0VkN6OWJUdnRMSHE5bENmaUkvUWgySUlEK0ZRdm56M2ZHWjlwbXJGbjRpUDBJZ2lDQS9oYWRIRFFjTElBTkJCR3NoQXlBQ1FRUnFJUUlMSUE0Z0hXc2lDVUdKZjA4TkJDQUJJQWxySVFFZ0NTQWRhaUVkUVFFaFBnd0JDd3RCdUg4aEJ5QUREUVFnSFNBQWF5RUhEQVFMUVd3aENRd0JDMEc0ZnlFSkMwRzRmeUVISUFsQmRrWWdQbkVOQVFzZ0NTRUhDeWdDQUEwQUlBVkIvT29CYWlnQ0FDRUJJQVZCK09vQmFpZ0NBQ0VBSUFVUUdDQUZLQUt3NndFZ0FDQUJFQk1nQlVFQU5nS3c2d0VnQlNnQ3BPc0JJZ0lFUUFKQUFrQUNRQUpBSUFJb0FnQWlBd1JBSUFCRkRRSWdBU0FESUFBUkFnQU1BUXNnQUVVTkFnc2dBU0FDSUFBUkFnQU1BZ3NnQXhBR0N5QUNFQVlMSUFWQkFEWUNwT3NCQ3lBQUJFQWdBU0FGSUFBUkFnQU1BUXNnQlJBR0N5QUVRZUFCYWlRQUlBY0xDNmdWQ1FCQmlBZ0xEUUVBQUFBQkFBQUFBZ0FBQUFJQVFhQUlDN01HQVFBQUFBRUFBQUFDQUFBQUFnQUFBQ1lBQUFDQ0FBQUFJUVVBQUVvQUFBQm5DQUFBSmdBQUFNQUJBQUNBQUFBQVNRVUFBRW9BQUFDK0NBQUFLUUFBQUN3Q0FBQ0FBQUFBU1FVQUFFb0FBQUMrQ0FBQUx3QUFBTW9DQUFDQUFBQUFpZ1VBQUVvQUFBQ0VDUUFBTlFBQUFITURBQUNBQUFBQW5RVUFBRW9BQUFDZ0NRQUFQUUFBQUlFREFBQ0FBQUFBNndVQUFFc0FBQUErQ2dBQVJBQUFBSjREQUFDQUFBQUFUUVlBQUVzQUFBQ3FDZ0FBU3dBQUFMTURBQUNBQUFBQXdRWUFBRTBBQUFBZkRRQUFUUUFBQUZNRUFBQ0FBQUFBSXdnQUFGRUFBQUNtRHdBQVZBQUFBSmtFQUFDQUFBQUFTd2tBQUZjQUFBQ3hFZ0FBV0FBQUFOb0VBQUNBQUFBQWJ3a0FBRjBBQUFBakZBQUFWQUFBQUVVRkFBQ0FBQUFBVkFvQUFHb0FBQUNNRkFBQWFnQUFBSzhGQUFDQUFBQUFkZ2tBQUh3QUFBQk9FQUFBZkFBQUFOSUNBQUNBQUFBQVl3Y0FBSkVBQUFDUUJ3QUFrZ0FBQUFBQUFBQUJBQUFBQVFBQUFBVUFBQUFOQUFBQUhRQUFBRDBBQUFCOUFBQUEvUUFBQVAwQkFBRDlBd0FBL1FjQUFQMFBBQUQ5SHdBQS9UOEFBUDEvQUFEOS93QUEvZjhCQVAzL0F3RDkvd2NBL2Y4UEFQMy9Id0Q5L3o4QS9mOS9BUDMvL3dEOS8vOEIvZi8vQS8zLy93ZjkvLzhQL2YvL0gvMy8vei85Ly85L0FBQUFBQUVBQUFBQ0FBQUFBd0FBQUFRQUFBQUZBQUFBQmdBQUFBY0FBQUFJQUFBQUNRQUFBQW9BQUFBTEFBQUFEQUFBQUEwQUFBQU9BQUFBRHdBQUFCQUFBQUFSQUFBQUVnQUFBQk1BQUFBVUFBQUFGUUFBQUJZQUFBQVhBQUFBR0FBQUFCa0FBQUFhQUFBQUd3QUFBQndBQUFBZEFBQUFIZ0FBQUI4QUFBQURBQUFBQkFBQUFBVUFBQUFHQUFBQUJ3QUFBQWdBQUFBSkFBQUFDZ0FBQUFzQUFBQU1BQUFBRFFBQUFBNEFBQUFQQUFBQUVBQUFBQkVBQUFBU0FBQUFFd0FBQUJRQUFBQVZBQUFBRmdBQUFCY0FBQUFZQUFBQUdRQUFBQm9BQUFBYkFBQUFIQUFBQUIwQUFBQWVBQUFBSHdBQUFDQUFBQUFoQUFBQUlnQUFBQ01BQUFBbEFBQUFKd0FBQUNrQUFBQXJBQUFBTHdBQUFETUFBQUE3QUFBQVF3QUFBRk1BQUFCakFBQUFnd0FBQUFNQkFBQURBZ0FBQXdRQUFBTUlBQUFERUFBQUF5QUFBQU5BQUFBRGdBQUFBd0FCQUVIZ0R3dFJBUUFBQUFFQUFBQUJBQUFBQVFBQUFBSUFBQUFDQUFBQUF3QUFBQU1BQUFBRUFBQUFCQUFBQUFVQUFBQUhBQUFBQ0FBQUFBa0FBQUFLQUFBQUN3QUFBQXdBQUFBTkFBQUFEZ0FBQUE4QUFBQVFBRUhFRUF1TEFRRUFBQUFDQUFBQUF3QUFBQVFBQUFBRkFBQUFCZ0FBQUFjQUFBQUlBQUFBQ1FBQUFBb0FBQUFMQUFBQURBQUFBQTBBQUFBT0FBQUFEd0FBQUJBQUFBQVNBQUFBRkFBQUFCWUFBQUFZQUFBQUhBQUFBQ0FBQUFBb0FBQUFNQUFBQUVBQUFBQ0FBQUFBQUFFQUFBQUNBQUFBQkFBQUFBZ0FBQUFRQUFBQUlBQUFBRUFBQUFDQUFBQUFBQUVBUVpBU0MrWUVBUUFBQUFFQUFBQUJBQUFBQVFBQUFBSUFBQUFDQUFBQUF3QUFBQU1BQUFBRUFBQUFCZ0FBQUFjQUFBQUlBQUFBQ1FBQUFBb0FBQUFMQUFBQURBQUFBQTBBQUFBT0FBQUFEd0FBQUJBQUFBQUJBQUFBQkFBQUFBZ0FBQUFBQUFBQUFRQUJBUVlBQUFBQUFBQUVBQUFBQUJBQUFBUUFBQUFBSUFBQUJRRUFBQUFBQUFBRkF3QUFBQUFBQUFVRUFBQUFBQUFBQlFZQUFBQUFBQUFGQndBQUFBQUFBQVVKQUFBQUFBQUFCUW9BQUFBQUFBQUZEQUFBQUFBQUFBWU9BQUFBQUFBQkJSQUFBQUFBQUFFRkZBQUFBQUFBQVFVV0FBQUFBQUFDQlJ3QUFBQUFBQU1GSUFBQUFBQUFCQVV3QUFBQUlBQUdCVUFBQUFBQUFBY0ZnQUFBQUFBQUNBWUFBUUFBQUFBS0JnQUVBQUFBQUF3R0FCQUFBQ0FBQUFRQUFBQUFBQUFBQkFFQUFBQUFBQUFGQWdBQUFDQUFBQVVFQUFBQUFBQUFCUVVBQUFBZ0FBQUZCd0FBQUFBQUFBVUlBQUFBSUFBQUJRb0FBQUFBQUFBRkN3QUFBQUFBQUFZTkFBQUFJQUFCQlJBQUFBQUFBQUVGRWdBQUFDQUFBUVVXQUFBQUFBQUNCUmdBQUFBZ0FBTUZJQUFBQUFBQUF3VW9BQUFBQUFBR0JFQUFBQUFRQUFZRVFBQUFBQ0FBQndXQUFBQUFBQUFKQmdBQ0FBQUFBQXNHQUFnQUFEQUFBQVFBQUFBQUVBQUFCQUVBQUFBZ0FBQUZBZ0FBQUNBQUFBVURBQUFBSUFBQUJRVUFBQUFnQUFBRkJnQUFBQ0FBQUFVSUFBQUFJQUFBQlFrQUFBQWdBQUFGQ3dBQUFDQUFBQVVNQUFBQUFBQUFCZzhBQUFBZ0FBRUZFZ0FBQUNBQUFRVVVBQUFBSUFBQ0JSZ0FBQUFnQUFJRkhBQUFBQ0FBQXdVb0FBQUFJQUFFQlRBQUFBQUFBQkFHQUFBQkFBQUFEd1lBZ0FBQUFBQU9CZ0JBQUFBQUFBMEdBQ0FBUVlBWEM0Y0NBUUFCQVFVQUFBQUFBQUFGQUFBQUFBQUFCZ1E5QUFBQUFBQUpCZjBCQUFBQUFBOEYvWDhBQUFBQUZRWDkveDhBQUFBREJRVUFBQUFBQUFjRWZRQUFBQUFBREFYOUR3QUFBQUFTQmYzL0F3QUFBQmNGL2Y5L0FBQUFCUVVkQUFBQUFBQUlCUDBBQUFBQUFBNEYvVDhBQUFBQUZBWDkvdzhBQUFBQ0JRRUFBQUFRQUFjRWZRQUFBQUFBQ3dYOUJ3QUFBQUFSQmYzL0FRQUFBQllGL2Y4L0FBQUFCQVVOQUFBQUVBQUlCUDBBQUFBQUFBMEYvUjhBQUFBQUV3WDkvd2NBQUFBQkJRRUFBQUFRQUFZRVBRQUFBQUFBQ2dYOUF3QUFBQUFRQmYzL0FBQUFBQndGL2YvL0R3QUFHd1g5Ly84SEFBQWFCZjMvL3dNQUFCa0YvZi8vQVFBQUdBWDkvLzhBUVpBWkM0WUVBUUFCQVFZQUFBQUFBQUFHQXdBQUFBQUFBQVFFQUFBQUlBQUFCUVVBQUFBQUFBQUZCZ0FBQUFBQUFBVUlBQUFBQUFBQUJRa0FBQUFBQUFBRkN3QUFBQUFBQUFZTkFBQUFBQUFBQmhBQUFBQUFBQUFHRXdBQUFBQUFBQVlXQUFBQUFBQUFCaGtBQUFBQUFBQUdIQUFBQUFBQUFBWWZBQUFBQUFBQUJpSUFBQUFBQUFFR0pRQUFBQUFBQVFZcEFBQUFBQUFDQmk4QUFBQUFBQU1HT3dBQUFBQUFCQVpUQUFBQUFBQUhCb01BQUFBQUFBa0dBd0lBQUJBQUFBUUVBQUFBQUFBQUJBVUFBQUFnQUFBRkJnQUFBQUFBQUFVSEFBQUFJQUFBQlFrQUFBQUFBQUFGQ2dBQUFBQUFBQVlNQUFBQUFBQUFCZzhBQUFBQUFBQUdFZ0FBQUFBQUFBWVZBQUFBQUFBQUJoZ0FBQUFBQUFBR0d3QUFBQUFBQUFZZUFBQUFBQUFBQmlFQUFBQUFBQUVHSXdBQUFBQUFBUVluQUFBQUFBQUNCaXNBQUFBQUFBTUdNd0FBQUFBQUJBWkRBQUFBQUFBRkJtTUFBQUFBQUFnR0F3RUFBQ0FBQUFRRUFBQUFNQUFBQkFRQUFBQVFBQUFFQlFBQUFDQUFBQVVIQUFBQUlBQUFCUWdBQUFBZ0FBQUZDZ0FBQUNBQUFBVUxBQUFBQUFBQUJnNEFBQUFBQUFBR0VRQUFBQUFBQUFZVUFBQUFBQUFBQmhjQUFBQUFBQUFHR2dBQUFBQUFBQVlkQUFBQUFBQUFCaUFBQUFBQUFCQUdBd0FCQUFBQUR3WURnQUFBQUFBT0JnTkFBQUFBQUEwR0F5QUFBQUFBREFZREVBQUFBQUFMQmdNSUFBQUFBQW9HQXdRQVFhUWRDOWtCQVFBQUFBTUFBQUFIQUFBQUR3QUFBQjhBQUFBL0FBQUFmd0FBQVA4QUFBRC9BUUFBL3dNQUFQOEhBQUQvRHdBQS94OEFBUDgvQUFEL2Z3QUEvLzhBQVAvL0FRRC8vd01BLy84SEFQLy9Ed0QvL3g4QS8vOC9BUC8vZndELy8vOEEvLy8vQWYvLy93UC8vLzhILy8vL0QvLy8veC8vLy84Ly8vLy9md0FBQUFBQkFBQUFBZ0FBQUFRQUFBQUFBQUFBQWdBQUFBUUFBQUFJQUFBQUFBQUFBQUVBQUFBQ0FBQUFBUUFBQUFRQUFBQUVBQUFBQkFBQUFBUUFBQUFJQUFBQUNBQUFBQWdBQUFBSEFBQUFDQUFBQUFrQUFBQUtBQUFBQ3dCQmdCOExBNEFSQVE9PSI7dmFyIHNlPW5ldyBKQSxDZT0hMTthc3luYyBmdW5jdGlvbiBfSShBLHQsZSl7bGV0IEk9bnVsbDt0eXBlb2YgQSE9InN0cmluZyI/ST1BLmhyZWY6QS5zdGFydHNXaXRoKCJodHRwIik/ST1BOkk9YCR7dH0vJHtBfWAsSS5lbmRzV2l0aCgiLmpzIikmJihJPUkuc3Vic3RyaW5nKDAsSS5sZW5ndGgtMykpLEkuZW5kc1dpdGgoIi53YXNtIikmJihJPUkuc3Vic3RyaW5nKDAsSS5sZW5ndGgtNSkpO2xldCByPWAke0l9Lndhc21gLG89YXdhaXQgTEEuZ2V0KGAke3J9LnpzdGAse3Jlc3BvbnNlVHlwZToiYXJyYXlidWZmZXIiLHBhcmFtczplfSk7Q2V8fChhd2FpdCBzZS5pbml0KCksQ2U9ITApO2xldCBDPXNlLmRlY29kZShuZXcgVWludDhBcnJheShvLmRhdGEpKS5idWZmZXI7cmV0dXJuKGF3YWl0IGltcG9ydChgJHtJfS5qc2ApKS5kZWZhdWx0KHt3YXNtQmluYXJ5OkN9KX12YXIgQmU9X0k7dmFyIGJBPW5ldyBNYXA7YXN5bmMgZnVuY3Rpb24gWEkoQSx0LGUpe2xldCBJPUEscj1BLG89bnVsbDtyZXR1cm4gdHlwZW9mIEEhPSJzdHJpbmciJiYoST1uZXcgVVJMKEEuaHJlZikscj1JLmhyZWYpLGJBLmhhcyhyKT9vPWF3YWl0IGJBLmdldChyKTooYkEuc2V0KHIsQmUoSSx0LGUpKSxvPWF3YWl0IGJBLmdldChyKSksb312YXIgYWU9WEk7dmFyIHpJPXtUZXh0RmlsZToiVGV4dEZpbGUiLEJpbmFyeUZpbGU6IkJpbmFyeUZpbGUiLFRleHRTdHJlYW06IlRleHRTdHJlYW0iLEJpbmFyeVN0cmVhbToiQmluYXJ5U3RyZWFtIixJbWFnZToiSW1hZ2UiLFBvaW50U2V0OiJQb2ludFNldCIsTWVzaDoiTWVzaCIsUG9seURhdGE6IlBvbHlEYXRhIixUcmFuc2Zvcm1MaXN0OiJUcmFuc2Zvcm1MaXN0IixKc29uQ29tcGF0aWJsZToiSnNvbkNvbXBhdGlibGUifSxoPXpJO3ZhciB2ST17SW50ODoiaW50OCIsVUludDg6InVpbnQ4IixJbnQxNjoiaW50MTYiLFVJbnQxNjoidWludDE2IixJbnQzMjoiaW50MzIiLFVJbnQzMjoidWludDMyIixJbnQ2NDoiaW50NjQiLFVJbnQ2NDoidWludDY0IixTaXplVmFsdWVUeXBlOiJ1aW50NjQiLElkZW50aWZpZXJUeXBlOiJ1aW50NjQiLEluZGV4VmFsdWVUeXBlOiJpbnQ2NCIsT2Zmc2V0VmFsdWVUeXBlOiJpbnQ2NCJ9LFI9dkk7dmFyICRJPXtGbG9hdDMyOiJmbG9hdDMyIixGbG9hdDY0OiJmbG9hdDY0IixTcGFjZVByZWNpc2lvblR5cGU6ImZsb2F0NjQifSx6PSRJO2Z1bmN0aW9uIEFyKEEsdCl7bGV0IGU9bnVsbDtzd2l0Y2goQSl7Y2FzZSBSLlVJbnQ4OntlPW5ldyBVaW50OEFycmF5KHQpO2JyZWFrfWNhc2UgUi5JbnQ4OntlPW5ldyBJbnQ4QXJyYXkodCk7YnJlYWt9Y2FzZSBSLlVJbnQxNjp7ZT1uZXcgVWludDE2QXJyYXkodCk7YnJlYWt9Y2FzZSBSLkludDE2OntlPW5ldyBJbnQxNkFycmF5KHQpO2JyZWFrfWNhc2UgUi5VSW50MzI6e2U9bmV3IFVpbnQzMkFycmF5KHQpO2JyZWFrfWNhc2UgUi5JbnQzMjp7ZT1uZXcgSW50MzJBcnJheSh0KTticmVha31jYXNlIFIuVUludDY0Ont0eXBlb2YgZ2xvYmFsVGhpcy5CaWdVaW50NjRBcnJheT09ImZ1bmN0aW9uIj9lPW5ldyBCaWdVaW50NjRBcnJheSh0KTplPW5ldyBVaW50OEFycmF5KHQpO2JyZWFrfWNhc2UgUi5JbnQ2NDp7dHlwZW9mIGdsb2JhbFRoaXMuQmlnSW50NjRBcnJheT09ImZ1bmN0aW9uIj9lPW5ldyBCaWdJbnQ2NEFycmF5KHQpOmU9bmV3IFVpbnQ4QXJyYXkodCk7YnJlYWt9Y2FzZSB6LkZsb2F0MzI6e2U9bmV3IEZsb2F0MzJBcnJheSh0KTticmVha31jYXNlIHouRmxvYXQ2NDp7ZT1uZXcgRmxvYXQ2NEFycmF5KHQpO2JyZWFrfWNhc2UibnVsbCI6e2U9bnVsbDticmVha31jYXNlIG51bGw6e2U9bnVsbDticmVha31kZWZhdWx0OnRocm93IG5ldyBFcnJvcigiVHlwZSBpcyBub3Qgc3VwcG9ydGVkIGFzIGEgVHlwZWRBcnJheSIpfXJldHVybiBlfXZhciBIPUFyO3ZhciBjZT10eXBlb2YgZ2xvYmFsVGhpcy5TaGFyZWRBcnJheUJ1ZmZlcj09ImZ1bmN0aW9uIixRZT1uZXcgVGV4dEVuY29kZXIsRWU9bmV3IFRleHREZWNvZGVyKCJ1dGYtOCIpO2Z1bmN0aW9uIHRyKEEsdCl7bGV0IGU9e2ZsYWdzOiJyIixlbmNvZGluZzoiYmluYXJ5In0sST1BLmZzX29wZW4odCxlLmZsYWdzKSxvPUEuZnNfc3RhdCh0KS5zaXplLGc9bnVsbDtjZT9nPW5ldyBTaGFyZWRBcnJheUJ1ZmZlcihvKTpnPW5ldyBBcnJheUJ1ZmZlcihvKTtsZXQgQz1uZXcgVWludDhBcnJheShnKTtyZXR1cm4gQS5mc19yZWFkKEksQywwLG8sMCksQS5mc19jbG9zZShJKSxDfWZ1bmN0aW9uIGZlKEEsdCxlKXtsZXQgST1udWxsO2NlP0k9bmV3IFNoYXJlZEFycmF5QnVmZmVyKGUpOkk9bmV3IEFycmF5QnVmZmVyKGUpO2xldCByPW5ldyBVaW50OEFycmF5KEkpLG89bmV3IFVpbnQ4QXJyYXkoQS5IRUFQVTguYnVmZmVyLHQsZSk7cmV0dXJuIHIuc2V0KG8pLHJ9ZnVuY3Rpb24geShBLHQsZSxJKXtsZXQgcj0wO3JldHVybiB0IT09bnVsbCYmKHI9QS5jY2FsbCgiaXRrX3dhc21faW5wdXRfYXJyYXlfYWxsb2MiLCJudW1iZXIiLFsibnVtYmVyIiwibnVtYmVyIiwibnVtYmVyIiwibnVtYmVyIl0sWzAsZSxJLHQuYnVmZmVyLmJ5dGVMZW5ndGhdKSxBLkhFQVBVOC5zZXQobmV3IFVpbnQ4QXJyYXkodC5idWZmZXIpLHIpKSxyfWZ1bmN0aW9uIFQoQSx0LGUpe2xldCBJPUpTT04uc3RyaW5naWZ5KHQpLHI9QS5sZW5ndGhCeXRlc1VURjgoSSkrMSxvPUEuY2NhbGwoIml0a193YXNtX2lucHV0X2pzb25fYWxsb2MiLCJudW1iZXIiLFsibnVtYmVyIiwibnVtYmVyIiwibnVtYmVyIl0sWzAsZSxyXSk7QS5zdHJpbmdUb1VURjgoSSxvLHIpfWZ1bmN0aW9uIEYoQSx0LGUsSSl7bGV0IHI9QS5jY2FsbCgiaXRrX3dhc21fb3V0cHV0X2FycmF5X2FkZHJlc3MiLCJudW1iZXIiLFsibnVtYmVyIiwibnVtYmVyIiwibnVtYmVyIl0sWzAsdCxlXSksbz1BLmNjYWxsKCJpdGtfd2FzbV9vdXRwdXRfYXJyYXlfc2l6ZSIsIm51bWJlciIsWyJudW1iZXIiLCJudW1iZXIiLCJudW1iZXIiXSxbMCx0LGVdKSxnPWZlKEEscixvKTtyZXR1cm4gSChJLGcuYnVmZmVyKX1mdW5jdGlvbiBzQShBLHQpe2xldCBlPUEuY2NhbGwoIml0a193YXNtX291dHB1dF9qc29uX2FkZHJlc3MiLCJudW1iZXIiLFsibnVtYmVyIiwibnVtYmVyIl0sWzAsdF0pLEk9QS5VVEY4VG9TdHJpbmcoZSk7cmV0dXJuIEpTT04ucGFyc2UoSSl9ZnVuY3Rpb24gZXIoQSx0LGUsSSl7SSE9bnVsbCYmSS5sZW5ndGg+MCYmSS5mb3JFYWNoKGZ1bmN0aW9uKGEsbil7c3dpdGNoKGEudHlwZSl7Y2FzZSBoLlRleHRTdHJlYW06e2xldCBzPVFlLmVuY29kZShhLmRhdGEuZGF0YSksZj15KEEscyxuLDApLEI9e3NpemU6cy5idWZmZXIuYnl0ZUxlbmd0aCxkYXRhOmBkYXRhOmFwcGxpY2F0aW9uL3ZuZC5pdGsuYWRkcmVzcywwOiR7Zn1gfTtUKEEsQixuKTticmVha31jYXNlIGguSnNvbkNvbXBhdGlibGU6e2xldCBzPVFlLmVuY29kZShKU09OLnN0cmluZ2lmeShhLmRhdGEpKSxmPXkoQSxzLG4sMCksQj17c2l6ZTpzLmJ1ZmZlci5ieXRlTGVuZ3RoLGRhdGE6YGRhdGE6YXBwbGljYXRpb24vdm5kLml0ay5hZGRyZXNzLDA6JHtmfWB9O1QoQSxCLG4pO2JyZWFrfWNhc2UgaC5CaW5hcnlTdHJlYW06e2xldCBzPWEuZGF0YS5kYXRhLGY9eShBLHMsbiwwKSxCPXtzaXplOnMuYnVmZmVyLmJ5dGVMZW5ndGgsZGF0YTpgZGF0YTphcHBsaWNhdGlvbi92bmQuaXRrLmFkZHJlc3MsMDoke2Z9YH07VChBLEIsbik7YnJlYWt9Y2FzZSBoLlRleHRGaWxlOntBLmZzX3dyaXRlRmlsZShhLmRhdGEucGF0aCxhLmRhdGEuZGF0YSk7YnJlYWt9Y2FzZSBoLkJpbmFyeUZpbGU6e0EuZnNfd3JpdGVGaWxlKGEuZGF0YS5wYXRoLGEuZGF0YS5kYXRhKTticmVha31jYXNlIGguSW1hZ2U6e2xldCBzPWEuZGF0YSxmPXkoQSxzLmRhdGEsbiwwKSxCPXkoQSxzLmRpcmVjdGlvbixuLDEpLEU9dHlwZW9mIHMubWV0YWRhdGE/LmVudHJpZXM8InUiP0FycmF5LmZyb20ocy5tZXRhZGF0YS5lbnRyaWVzKCkpOltdLGw9e2ltYWdlVHlwZTpzLmltYWdlVHlwZSxuYW1lOnMubmFtZSxvcmlnaW46cy5vcmlnaW4sc3BhY2luZzpzLnNwYWNpbmcsZGlyZWN0aW9uOmBkYXRhOmFwcGxpY2F0aW9uL3ZuZC5pdGsuYWRkcmVzcywwOiR7Qn1gLHNpemU6cy5zaXplLGRhdGE6YGRhdGE6YXBwbGljYXRpb24vdm5kLml0ay5hZGRyZXNzLDA6JHtmfWAsbWV0YWRhdGE6RX07VChBLGwsbik7YnJlYWt9Y2FzZSBoLk1lc2g6e2xldCBzPWEuZGF0YSxmPXkoQSxzLnBvaW50cyxuLDApLEI9eShBLHMuY2VsbHMsbiwxKSxFPXkoQSxzLnBvaW50RGF0YSxuLDIpLGw9eShBLHMuY2VsbERhdGEsbiwzKSxjPXttZXNoVHlwZTpzLm1lc2hUeXBlLG5hbWU6cy5uYW1lLG51bWJlck9mUG9pbnRzOnMubnVtYmVyT2ZQb2ludHMscG9pbnRzOmBkYXRhOmFwcGxpY2F0aW9uL3ZuZC5pdGsuYWRkcmVzcywwOiR7Zn1gLG51bWJlck9mQ2VsbHM6cy5udW1iZXJPZkNlbGxzLGNlbGxzOmBkYXRhOmFwcGxpY2F0aW9uL3ZuZC5pdGsuYWRkcmVzcywwOiR7Qn1gLGNlbGxCdWZmZXJTaXplOnMuY2VsbEJ1ZmZlclNpemUsbnVtYmVyT2ZQb2ludFBpeGVsczpzLm51bWJlck9mUG9pbnRQaXhlbHMscG9pbnREYXRhOmBkYXRhOmFwcGxpY2F0aW9uL3ZuZC5pdGsuYWRkcmVzcywwOiR7RX1gLG51bWJlck9mQ2VsbFBpeGVsczpzLm51bWJlck9mQ2VsbFBpeGVscyxjZWxsRGF0YTpgZGF0YTphcHBsaWNhdGlvbi92bmQuaXRrLmFkZHJlc3MsMDoke2x9YH07VChBLGMsbik7YnJlYWt9Y2FzZSBoLlBvaW50U2V0OntsZXQgcz1hLmRhdGEsZj15KEEscy5wb2ludHMsbiwwKSxCPXkoQSxzLnBvaW50RGF0YSxuLDEpLEU9e3BvaW50U2V0VHlwZTpzLnBvaW50U2V0VHlwZSxuYW1lOnMubmFtZSxudW1iZXJPZlBvaW50czpzLm51bWJlck9mUG9pbnRzLHBvaW50czpgZGF0YTphcHBsaWNhdGlvbi92bmQuaXRrLmFkZHJlc3MsMDoke2Z9YCxudW1iZXJPZlBvaW50UGl4ZWxzOnMubnVtYmVyT2ZQb2ludFBpeGVscyxwb2ludERhdGE6YGRhdGE6YXBwbGljYXRpb24vdm5kLml0ay5hZGRyZXNzLDA6JHtCfWB9O1QoQSxFLG4pO2JyZWFrfWNhc2UgaC5UcmFuc2Zvcm1MaXN0OntsZXQgcz1hLmRhdGEsZj1bXTtzLmZvckVhY2goKEIsRSk9PntsZXQgYz1gZGF0YTphcHBsaWNhdGlvbi92bmQuaXRrLmFkZHJlc3MsMDoke3koQSxCLmZpeGVkUGFyYW1ldGVycyxuLEUqMil9YCxTPWBkYXRhOmFwcGxpY2F0aW9uL3ZuZC5pdGsuYWRkcmVzcywwOiR7eShBLEIucGFyYW1ldGVycyxuLEUqMisxKX1gLEQ9e3RyYW5zZm9ybVR5cGU6Qi50cmFuc2Zvcm1UeXBlLG51bWJlck9mRml4ZWRQYXJhbWV0ZXJzOkIubnVtYmVyT2ZGaXhlZFBhcmFtZXRlcnMsbnVtYmVyT2ZQYXJhbWV0ZXJzOkIubnVtYmVyT2ZQYXJhbWV0ZXJzLG5hbWU6Qi5uYW1lLGlucHV0U3BhY2VOYW1lOkIuaW5wdXRTcGFjZU5hbWUsb3V0cHV0U3BhY2VOYW1lOkIub3V0cHV0U3BhY2VOYW1lLHBhcmFtZXRlcnM6UyxmaXhlZFBhcmFtZXRlcnM6Y307Zi5wdXNoKEQpfSksVChBLGYsbik7YnJlYWt9Y2FzZSBoLlBvbHlEYXRhOntsZXQgcz1hLmRhdGEsZj15KEEscy5wb2ludHMsbiwwKSxCPXkoQSxzLnZlcnRpY2VzLG4sMSksRT15KEEscy5saW5lcyxuLDIpLGw9eShBLHMucG9seWdvbnMsbiwzKSxjPXkoQSxzLnRyaWFuZ2xlU3RyaXBzLG4sNCkscD15KEEscy5wb2ludERhdGEsbiw1KSxTPXkoQSxzLnBvaW50RGF0YSxuLDYpLEQ9e3BvbHlEYXRhVHlwZTpzLnBvbHlEYXRhVHlwZSxuYW1lOnMubmFtZSxudW1iZXJPZlBvaW50czpzLm51bWJlck9mUG9pbnRzLHBvaW50czpgZGF0YTphcHBsaWNhdGlvbi92bmQuaXRrLmFkZHJlc3MsMDoke2Z9YCx2ZXJ0aWNlc0J1ZmZlclNpemU6cy52ZXJ0aWNlc0J1ZmZlclNpemUsdmVydGljZXM6YGRhdGE6YXBwbGljYXRpb24vdm5kLml0ay5hZGRyZXNzLDA6JHtCfWAsbGluZXNCdWZmZXJTaXplOnMubGluZXNCdWZmZXJTaXplLGxpbmVzOmBkYXRhOmFwcGxpY2F0aW9uL3ZuZC5pdGsuYWRkcmVzcywwOiR7RX1gLHBvbHlnb25zQnVmZmVyU2l6ZTpzLnBvbHlnb25zQnVmZmVyU2l6ZSxwb2x5Z29uczpgZGF0YTphcHBsaWNhdGlvbi92bmQuaXRrLmFkZHJlc3MsMDoke2x9YCx0cmlhbmdsZVN0cmlwc0J1ZmZlclNpemU6cy50cmlhbmdsZVN0cmlwc0J1ZmZlclNpemUsdHJpYW5nbGVTdHJpcHM6YGRhdGE6YXBwbGljYXRpb24vdm5kLml0ay5hZGRyZXNzLDA6JHtjfWAsbnVtYmVyT2ZQb2ludFBpeGVsczpzLm51bWJlck9mUG9pbnRQaXhlbHMscG9pbnREYXRhOmBkYXRhOmFwcGxpY2F0aW9uL3ZuZC5pdGsuYWRkcmVzcywwOiR7cH1gLG51bWJlck9mQ2VsbFBpeGVsczpzLm51bWJlck9mQ2VsbFBpeGVscyxjZWxsRGF0YTpgZGF0YTphcHBsaWNhdGlvbi92bmQuaXRrLmFkZHJlc3MsMDoke1N9YH07VChBLEQsbik7YnJlYWt9ZGVmYXVsdDp0aHJvdyBFcnJvcigiVW5zdXBwb3J0ZWQgaW5wdXQgSW50ZXJmYWNlVHlwZSIpfX0pLEEucmVzZXRNb2R1bGVTdGRvdXQoKSxBLnJlc2V0TW9kdWxlU3RkZXJyKCk7bGV0IHI9QS5zdGFja1NhdmUoKSxvPTA7dHJ5e289QS5jYWxsTWFpbih0LnNsaWNlKCkpfWNhdGNoKGEpe3Rocm93IHR5cGVvZiBhPT0ibnVtYmVyIiYmKGNvbnNvbGUubG9nKCJFeGNlcHRpb24gd2hpbGUgcnVubmluZyBwaXBlbGluZToiKSxjb25zb2xlLmxvZygic3Rkb3V0OiIsQS5nZXRNb2R1bGVTdGRvdXQoKSksY29uc29sZS5lcnJvcigic3RkZXJyOiIsQS5nZXRNb2R1bGVTdGRlcnIoKSksdHlwZW9mIEEuZ2V0RXhjZXB0aW9uTWVzc2FnZTwidSI/Y29uc29sZS5lcnJvcigiZXhjZXB0aW9uOiIsQS5nZXRFeGNlcHRpb25NZXNzYWdlKGEpKTpjb25zb2xlLmVycm9yKCJCdWlsZCBtb2R1bGUgaW4gRGVidWcgbW9kZSBmb3IgZXhjZXB0aW9uIG1lc3NhZ2UgaW5mb3JtYXRpb24uIikpLGF9ZmluYWxseXtBLnN0YWNrUmVzdG9yZShyKX1sZXQgZz1BLmdldE1vZHVsZVN0ZG91dCgpLEM9QS5nZXRNb2R1bGVTdGRlcnIoKSxRPVtdO3JldHVybiBlIT1udWxsJiZlLmxlbmd0aD4wJiZvPT09MCYmZS5mb3JFYWNoKGZ1bmN0aW9uKGEsbil7bGV0IHM9bnVsbDtzd2l0Y2goYS50eXBlKXtjYXNlIGguVGV4dFN0cmVhbTp7bGV0IEI9QS5jY2FsbCgiaXRrX3dhc21fb3V0cHV0X2FycmF5X2FkZHJlc3MiLCJudW1iZXIiLFsibnVtYmVyIiwibnVtYmVyIiwibnVtYmVyIl0sWzAsbiwwXSksRT1BLmNjYWxsKCJpdGtfd2FzbV9vdXRwdXRfYXJyYXlfc2l6ZSIsIm51bWJlciIsWyJudW1iZXIiLCJudW1iZXIiLCJudW1iZXIiXSxbMCxuLDBdKSxsPW5ldyBVaW50OEFycmF5KEEuSEVBUFU4LmJ1ZmZlcixCLEUpO3M9e2RhdGE6RWUuZGVjb2RlKGwpfTticmVha31jYXNlIGguSnNvbkNvbXBhdGlibGU6e2xldCBCPUEuY2NhbGwoIml0a193YXNtX291dHB1dF9hcnJheV9hZGRyZXNzIiwibnVtYmVyIixbIm51bWJlciIsIm51bWJlciIsIm51bWJlciJdLFswLG4sMF0pLEU9QS5jY2FsbCgiaXRrX3dhc21fb3V0cHV0X2FycmF5X3NpemUiLCJudW1iZXIiLFsibnVtYmVyIiwibnVtYmVyIiwibnVtYmVyIl0sWzAsbiwwXSksbD1uZXcgVWludDhBcnJheShBLkhFQVBVOC5idWZmZXIsQixFKTtzPUpTT04ucGFyc2UoRWUuZGVjb2RlKGwpKTticmVha31jYXNlIGguQmluYXJ5U3RyZWFtOntsZXQgQj1BLmNjYWxsKCJpdGtfd2FzbV9vdXRwdXRfYXJyYXlfYWRkcmVzcyIsIm51bWJlciIsWyJudW1iZXIiLCJudW1iZXIiLCJudW1iZXIiXSxbMCxuLDBdKSxFPUEuY2NhbGwoIml0a193YXNtX291dHB1dF9hcnJheV9zaXplIiwibnVtYmVyIixbIm51bWJlciIsIm51bWJlciIsIm51bWJlciJdLFswLG4sMF0pO3M9e2RhdGE6ZmUoQSxCLEUpfTticmVha31jYXNlIGguVGV4dEZpbGU6e3M9e3BhdGg6YS5kYXRhLnBhdGgsZGF0YTpBLmZzX3JlYWRGaWxlKGEuZGF0YS5wYXRoLHtlbmNvZGluZzoidXRmOCJ9KX07YnJlYWt9Y2FzZSBoLkJpbmFyeUZpbGU6e3M9e3BhdGg6YS5kYXRhLnBhdGgsZGF0YTp0cihBLGEuZGF0YS5wYXRoKX07YnJlYWt9Y2FzZSBoLkltYWdlOntsZXQgQj1zQShBLG4pO0IuZGF0YT1GKEEsbiwwLEIuaW1hZ2VUeXBlLmNvbXBvbmVudFR5cGUpLEIuZGlyZWN0aW9uPUYoQSxuLDEsei5GbG9hdDY0KSxCLm1ldGFkYXRhPW5ldyBNYXAoQi5tZXRhZGF0YSkscz1CO2JyZWFrfWNhc2UgaC5NZXNoOntsZXQgQj1zQShBLG4pO0IubnVtYmVyT2ZQb2ludHM+MD9CLnBvaW50cz1GKEEsbiwwLEIubWVzaFR5cGUucG9pbnRDb21wb25lbnRUeXBlKTpCLnBvaW50cz1IKEIubWVzaFR5cGUucG9pbnRDb21wb25lbnRUeXBlLG5ldyBBcnJheUJ1ZmZlcigwKSksQi5udW1iZXJPZkNlbGxzPjA/Qi5jZWxscz1GKEEsbiwxLEIubWVzaFR5cGUuY2VsbENvbXBvbmVudFR5cGUpOkIuY2VsbHM9SChCLm1lc2hUeXBlLmNlbGxDb21wb25lbnRUeXBlLG5ldyBBcnJheUJ1ZmZlcigwKSksQi5udW1iZXJPZlBvaW50UGl4ZWxzPjA/Qi5wb2ludERhdGE9RihBLG4sMixCLm1lc2hUeXBlLnBvaW50UGl4ZWxDb21wb25lbnRUeXBlKTpCLnBvaW50RGF0YT1IKEIubWVzaFR5cGUucG9pbnRQaXhlbENvbXBvbmVudFR5cGUsbmV3IEFycmF5QnVmZmVyKDApKSxCLm51bWJlck9mQ2VsbFBpeGVscz4wP0IuY2VsbERhdGE9RihBLG4sMyxCLm1lc2hUeXBlLmNlbGxQaXhlbENvbXBvbmVudFR5cGUpOkIuY2VsbERhdGE9SChCLm1lc2hUeXBlLmNlbGxQaXhlbENvbXBvbmVudFR5cGUsbmV3IEFycmF5QnVmZmVyKDApKSxzPUI7YnJlYWt9Y2FzZSBoLlBvaW50U2V0OntsZXQgQj1zQShBLG4pO0IubnVtYmVyT2ZQb2ludHM+MD9CLnBvaW50cz1GKEEsbiwwLEIucG9pbnRTZXRUeXBlLnBvaW50Q29tcG9uZW50VHlwZSk6Qi5wb2ludHM9SChCLnBvaW50U2V0VHlwZS5wb2ludENvbXBvbmVudFR5cGUsbmV3IEFycmF5QnVmZmVyKDApKSxCLm51bWJlck9mUG9pbnRQaXhlbHM+MD9CLnBvaW50RGF0YT1GKEEsbiwxLEIucG9pbnRTZXRUeXBlLnBvaW50UGl4ZWxDb21wb25lbnRUeXBlKTpCLnBvaW50RGF0YT1IKEIucG9pbnRTZXRUeXBlLnBvaW50UGl4ZWxDb21wb25lbnRUeXBlLG5ldyBBcnJheUJ1ZmZlcigwKSkscz1CO2JyZWFrfWNhc2UgaC5UcmFuc2Zvcm1MaXN0OntsZXQgQj1zQShBLG4pO0IuZm9yRWFjaCgoRSxsKT0+e0UubnVtYmVyT2ZGaXhlZFBhcmFtZXRlcnM+MCYmKEJbbF0uZml4ZWRQYXJhbWV0ZXJzPUYoQSxuLGwqMixFLnRyYW5zZm9ybVR5cGUucGFyYW1ldGVyc1ZhbHVlVHlwZSkpLEUubnVtYmVyT2ZGaXhlZFBhcmFtZXRlcnM+MCYmKEJbbF0ucGFyYW1ldGVycz1GKEEsbixsKjIrMSxFLnRyYW5zZm9ybVR5cGUucGFyYW1ldGVyc1ZhbHVlVHlwZSkpfSkscz1CO2JyZWFrfWNhc2UgaC5Qb2x5RGF0YTp7bGV0IEI9c0EoQSxuKTtCLm51bWJlck9mUG9pbnRzPjA/Qi5wb2ludHM9RihBLG4sMCx6LkZsb2F0MzIpOkIucG9pbnRzPW5ldyBGbG9hdDMyQXJyYXksQi52ZXJ0aWNlc0J1ZmZlclNpemU+MD9CLnZlcnRpY2VzPUYoQSxuLDEsUi5VSW50MzIpOkIudmVydGljZXM9bmV3IFVpbnQzMkFycmF5LEIubGluZXNCdWZmZXJTaXplPjA/Qi5saW5lcz1GKEEsbiwyLFIuVUludDMyKTpCLmxpbmVzPW5ldyBVaW50MzJBcnJheSxCLnBvbHlnb25zQnVmZmVyU2l6ZT4wP0IucG9seWdvbnM9RihBLG4sMyxSLlVJbnQzMik6Qi5wb2x5Z29ucz1uZXcgVWludDMyQXJyYXksQi50cmlhbmdsZVN0cmlwc0J1ZmZlclNpemU+MD9CLnRyaWFuZ2xlU3RyaXBzPUYoQSxuLDQsUi5VSW50MzIpOkIudHJpYW5nbGVTdHJpcHM9bmV3IFVpbnQzMkFycmF5LEIubnVtYmVyT2ZQb2ludFBpeGVscz4wP0IucG9pbnREYXRhPUYoQSxuLDUsQi5wb2x5RGF0YVR5cGUucG9pbnRQaXhlbENvbXBvbmVudFR5cGUpOkIucG9pbnREYXRhPUgoQi5wb2x5RGF0YVR5cGUucG9pbnRQaXhlbENvbXBvbmVudFR5cGUsbmV3IEFycmF5QnVmZmVyKDApKSxCLm51bWJlck9mQ2VsbFBpeGVscz4wP0IuY2VsbERhdGE9RihBLG4sNixCLnBvbHlEYXRhVHlwZS5jZWxsUGl4ZWxDb21wb25lbnRUeXBlKTpCLmNlbGxEYXRhPUgoQi5wb2x5RGF0YVR5cGUuY2VsbFBpeGVsQ29tcG9uZW50VHlwZSxuZXcgQXJyYXlCdWZmZXIoMCkpLHM9QjticmVha31kZWZhdWx0OnRocm93IEVycm9yKCJVbnN1cHBvcnRlZCBvdXRwdXQgSW50ZXJmYWNlVHlwZSIpfWxldCBmPXt0eXBlOmEudHlwZSxkYXRhOnN9O1EucHVzaChmKX0pLHtyZXR1cm5WYWx1ZTpvLHN0ZG91dDpnLHN0ZGVycjpDLG91dHB1dHM6UX19dmFyIGxlPWVyO3ZhciBJcj10eXBlb2YgZ2xvYmFsVGhpcy5TaGFyZWRBcnJheUJ1ZmZlcjwidSI7ZnVuY3Rpb24gcnIoQSx0KXtpZihBPT1udWxsKXJldHVybltdO2xldCBlPVtdO2ZvcihsZXQgST0wO0k8QS5sZW5ndGg7SSsrKXtsZXQgcj1vcihBW0ldLHQpO3IhPT1udWxsJiZlLnB1c2gocil9cmV0dXJuIGV9ZnVuY3Rpb24gb3IoQSx0KXtpZihBPT1udWxsKXJldHVybiBudWxsO2xldCBlPW51bGw7cmV0dXJuIEEuYnVmZmVyIT09dm9pZCAwP2U9QS5idWZmZXI6QS5ieXRlTGVuZ3RoIT09dm9pZCAwJiYoZT1BKSxJciYmZSBpbnN0YW5jZW9mIFNoYXJlZEFycmF5QnVmZmVyP251bGw6dD9lOmUuc2xpY2UoMCl9dmFyIHVlPXJyO2Z1bmN0aW9uIGdyKEEpe3JldHVybltBLmRhdGEsQS5kaXJlY3Rpb25dfXZhciBEZT1ncjtmdW5jdGlvbiBpcihBKXtyZXR1cm5bQS5wb2ludHMsQS5wb2ludERhdGEsQS5jZWxscyxBLmNlbGxEYXRhXX12YXIgaGU9aXI7ZnVuY3Rpb24gbnIoQSl7cmV0dXJuW0EucG9pbnRzLEEudmVydGljZXMsQS5saW5lcyxBLnBvbHlnb25zLEEudHJpYW5nbGVTdHJpcHMsQS5wb2ludERhdGEsQS5jZWxsRGF0YV19dmFyIGRlPW5yO2FzeW5jIGZ1bmN0aW9uIHNyKEEsdCxlLEkpe2xldCByPWxlKEEsdCxlLEkpLG89W107cmV0dXJuIHIub3V0cHV0cy5mb3JFYWNoKGZ1bmN0aW9uKGcpe2lmKGcudHlwZT09PWguQmluYXJ5U3RyZWFtfHxnLnR5cGU9PT1oLkJpbmFyeUZpbGUpe2xldCBDPWcuZGF0YTtvLnB1c2goQyl9ZWxzZSBpZihnLnR5cGU9PT1oLkltYWdlKXtsZXQgQz1nLmRhdGE7by5wdXNoKC4uLkRlKEMpKX1lbHNlIGlmKGcudHlwZT09PWguTWVzaCl7bGV0IEM9Zy5kYXRhO28ucHVzaCguLi5oZShDKSl9ZWxzZSBpZihnLnR5cGU9PT1oLlBvbHlEYXRhKXtsZXQgQz1nLmRhdGE7by5wdXNoKC4uLmRlKEMpKX19KSxNQShyLHVlKG8sITApKX12YXIgeWU9c3I7dmFyIENyPXtydW5QaXBlbGluZTphc3luYyBmdW5jdGlvbihBLHQsZSxJLHIsbyl7bGV0IGc9YXdhaXQgYWUoQSx0LG8pO3JldHVybiBhd2FpdCB5ZShnLGUsSSxyKX19O2ZBKENyKTslMEEvKiEgQnVuZGxlZCBsaWNlbnNlIGluZm9ybWF0aW9uOiUwQSUwQWNvbWxpbmsvZGlzdC9lc20vY29tbGluay5tanM6JTBBICAoKiolMEEgICAqIEBsaWNlbnNlJTBBICAgKiBDb3B5cmlnaHQgMjAxOSBHb29nbGUgTExDJTBBICAgKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMCUwQSAgICopJTBBKi8lMEEnO3F0KHZ0KTtleHBvcnR7RGUgYXMgY29tcGFyZURvdWJsZUltYWdlcyxWbiBhcyBjb21wYXJlSW1hZ2VzLEt0IGFzIGdldERlZmF1bHRXZWJXb3JrZXIsJCBhcyBnZXRQaXBlbGluZVdvcmtlclVybCxNQSBhcyBnZXRQaXBlbGluZXNCYXNlVXJsLFlJIGFzIHNldERlZmF1bHRXZWJXb3JrZXIscXQgYXMgc2V0UGlwZWxpbmVXb3JrZXJVcmwseEkgYXMgc2V0UGlwZWxpbmVzQmFzZVVybCxiZSBhcyB2ZWN0b3JNYWduaXR1ZGUscUEgYXMgdmVyc2lvbn07Ci8qISBCdW5kbGVkIGxpY2Vuc2UgaW5mb3JtYXRpb246Cgpjb21saW5rL2Rpc3QvZXNtL2NvbWxpbmsubWpzOgogICgqKgogICAqIEBsaWNlbnNlCiAgICogQ29weXJpZ2h0IDIwMTkgR29vZ2xlIExMQwogICAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wCiAgICopCiovCg==""" default_config = JsPackageConfig(default_js_module) js_package = JsPackage(default_config) diff --git a/packages/compare-images/python/itkwasm-compare-images-wasi/itkwasm_compare_images_wasi/_version.py b/packages/compare-images/python/itkwasm-compare-images-wasi/itkwasm_compare_images_wasi/_version.py index fd4cdef3e..0419a93d2 100644 --- a/packages/compare-images/python/itkwasm-compare-images-wasi/itkwasm_compare_images_wasi/_version.py +++ b/packages/compare-images/python/itkwasm-compare-images-wasi/itkwasm_compare_images_wasi/_version.py @@ -1 +1 @@ -__version__ = "5.2.3" +__version__ = "5.3.1" diff --git a/packages/compare-images/python/itkwasm-compare-images-wasi/itkwasm_compare_images_wasi/wasm_modules/compare-double-images.wasi.wasm b/packages/compare-images/python/itkwasm-compare-images-wasi/itkwasm_compare_images_wasi/wasm_modules/compare-double-images.wasi.wasm index 0f658e1f7..1654c1545 100755 Binary files a/packages/compare-images/python/itkwasm-compare-images-wasi/itkwasm_compare_images_wasi/wasm_modules/compare-double-images.wasi.wasm and b/packages/compare-images/python/itkwasm-compare-images-wasi/itkwasm_compare_images_wasi/wasm_modules/compare-double-images.wasi.wasm differ diff --git a/packages/compare-images/python/itkwasm-compare-images-wasi/itkwasm_compare_images_wasi/wasm_modules/vector-magnitude.wasi.wasm b/packages/compare-images/python/itkwasm-compare-images-wasi/itkwasm_compare_images_wasi/wasm_modules/vector-magnitude.wasi.wasm index 5b3bee2d7..30736f4df 100755 Binary files a/packages/compare-images/python/itkwasm-compare-images-wasi/itkwasm_compare_images_wasi/wasm_modules/vector-magnitude.wasi.wasm and b/packages/compare-images/python/itkwasm-compare-images-wasi/itkwasm_compare_images_wasi/wasm_modules/vector-magnitude.wasi.wasm differ diff --git a/packages/compare-images/python/itkwasm-compare-images/itkwasm_compare_images/_version.py b/packages/compare-images/python/itkwasm-compare-images/itkwasm_compare_images/_version.py index fd4cdef3e..0419a93d2 100644 --- a/packages/compare-images/python/itkwasm-compare-images/itkwasm_compare_images/_version.py +++ b/packages/compare-images/python/itkwasm-compare-images/itkwasm_compare_images/_version.py @@ -1 +1 @@ -__version__ = "5.2.3" +__version__ = "5.3.1" diff --git a/packages/compare-images/typescript/package.json b/packages/compare-images/typescript/package.json index 3b330620d..84285d47f 100644 --- a/packages/compare-images/typescript/package.json +++ b/packages/compare-images/typescript/package.json @@ -1,6 +1,6 @@ { "name": "@itk-wasm/compare-images", - "version": "5.2.3", + "version": "5.3.1", "description": "Compare images with a tolerance for regression testing.", "type": "module", "module": "./dist/index.js", diff --git a/packages/compare-meshes/package.json b/packages/compare-meshes/package.json index 464b57a4f..df53b6be2 100644 --- a/packages/compare-meshes/package.json +++ b/packages/compare-meshes/package.json @@ -1,6 +1,6 @@ { "name": "@itk-wasm/compare-meshes-build", - "version": "0.4.1", + "version": "0.5.0", "private": true, "description": "@itk-wasm/compare-meshes build configuration.", "type": "module", diff --git a/packages/compare-meshes/typescript/package.json b/packages/compare-meshes/typescript/package.json index 0f385bf21..ac803f3c4 100644 --- a/packages/compare-meshes/typescript/package.json +++ b/packages/compare-meshes/typescript/package.json @@ -1,6 +1,6 @@ { "name": "@itk-wasm/compare-meshes", - "version": "0.4.1", + "version": "0.5.0", "description": "Compare meshes and polydata for regression testing.", "type": "module", "module": "./dist/index.js", diff --git a/packages/compress-stringify/package.json b/packages/compress-stringify/package.json index e52fe3b71..459fe87d6 100644 --- a/packages/compress-stringify/package.json +++ b/packages/compress-stringify/package.json @@ -1,6 +1,6 @@ { "name": "@itk-wasm/compress-stringify-build", - "version": "3.3.1", + "version": "3.4.0", "private": true, "description": "@itk-wasm/compare-stringify build configuration.", "type": "module", diff --git a/packages/compress-stringify/python/itkwasm-compress-stringify-emscripten/itkwasm_compress_stringify_emscripten/_version.py b/packages/compress-stringify/python/itkwasm-compress-stringify-emscripten/itkwasm_compress_stringify_emscripten/_version.py index ff0416876..903a158ad 100644 --- a/packages/compress-stringify/python/itkwasm-compress-stringify-emscripten/itkwasm_compress_stringify_emscripten/_version.py +++ b/packages/compress-stringify/python/itkwasm-compress-stringify-emscripten/itkwasm_compress_stringify_emscripten/_version.py @@ -1 +1 @@ -__version__ = "3.3.1" +__version__ = "3.4.0" diff --git a/packages/compress-stringify/python/itkwasm-compress-stringify-emscripten/itkwasm_compress_stringify_emscripten/js_package.py b/packages/compress-stringify/python/itkwasm-compress-stringify-emscripten/itkwasm_compress_stringify_emscripten/js_package.py index 775e6b533..076a3104c 100644 --- a/packages/compress-stringify/python/itkwasm-compress-stringify-emscripten/itkwasm_compress_stringify_emscripten/js_package.py +++ b/packages/compress-stringify/python/itkwasm-compress-stringify-emscripten/itkwasm_compress_stringify_emscripten/js_package.py @@ -3,6 +3,6 @@ from itkwasm.pyodide import JsPackageConfig, JsPackage from ._version import __version__ -default_js_module = """data:text/javascript;base64,dmFyIFh0PU9iamVjdC5kZWZpbmVQcm9wZXJ0eTt2YXIgJHQ9KEEsZSk9Pntmb3IodmFyIHQgaW4gZSlYdChBLHQse2dldDplW3RdLGVudW1lcmFibGU6ITB9KX07dmFyIEFyPSIzLjMuMSIsS0E9QXI7dmFyIGVyPXtJbnQ4OiJpbnQ4IixVSW50ODoidWludDgiLEludDE2OiJpbnQxNiIsVUludDE2OiJ1aW50MTYiLEludDMyOiJpbnQzMiIsVUludDMyOiJ1aW50MzIiLEludDY0OiJpbnQ2NCIsVUludDY0OiJ1aW50NjQiLFNpemVWYWx1ZVR5cGU6InVpbnQ2NCIsSWRlbnRpZmllclR5cGU6InVpbnQ2NCIsSW5kZXhWYWx1ZVR5cGU6ImludDY0IixPZmZzZXRWYWx1ZVR5cGU6ImludDY0In0sRD1lcjt2YXIgdHI9e0Zsb2F0MzI6ImZsb2F0MzIiLEZsb2F0NjQ6ImZsb2F0NjQiLFNwYWNlUHJlY2lzaW9uVHlwZToiZmxvYXQ2NCJ9LEY9dHI7ZnVuY3Rpb24gcnIoQSxlKXtsZXQgdD1udWxsO3N3aXRjaChBKXtjYXNlIEQuVUludDg6e3Q9bmV3IFVpbnQ4QXJyYXkoZSk7YnJlYWt9Y2FzZSBELkludDg6e3Q9bmV3IEludDhBcnJheShlKTticmVha31jYXNlIEQuVUludDE2Ont0PW5ldyBVaW50MTZBcnJheShlKTticmVha31jYXNlIEQuSW50MTY6e3Q9bmV3IEludDE2QXJyYXkoZSk7YnJlYWt9Y2FzZSBELlVJbnQzMjp7dD1uZXcgVWludDMyQXJyYXkoZSk7YnJlYWt9Y2FzZSBELkludDMyOnt0PW5ldyBJbnQzMkFycmF5KGUpO2JyZWFrfWNhc2UgRC5VSW50NjQ6e3R5cGVvZiBnbG9iYWxUaGlzLkJpZ1VpbnQ2NEFycmF5PT0iZnVuY3Rpb24iP3Q9bmV3IEJpZ1VpbnQ2NEFycmF5KGUpOnQ9bmV3IFVpbnQ4QXJyYXkoZSk7YnJlYWt9Y2FzZSBELkludDY0Ont0eXBlb2YgZ2xvYmFsVGhpcy5CaWdJbnQ2NEFycmF5PT0iZnVuY3Rpb24iP3Q9bmV3IEJpZ0ludDY0QXJyYXkoZSk6dD1uZXcgVWludDhBcnJheShlKTticmVha31jYXNlIEYuRmxvYXQzMjp7dD1uZXcgRmxvYXQzMkFycmF5KGUpO2JyZWFrfWNhc2UgRi5GbG9hdDY0Ont0PW5ldyBGbG9hdDY0QXJyYXkoZSk7YnJlYWt9Y2FzZSJudWxsIjp7dD1udWxsO2JyZWFrfWNhc2UgbnVsbDp7dD1udWxsO2JyZWFrfWRlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKCJUeXBlIGlzIG5vdCBzdXBwb3J0ZWQgYXMgYSBUeXBlZEFycmF5Iil9cmV0dXJuIHR9dmFyIGs9cnI7dmFyIG5yPXtVbmtub3duOiJVbmtub3duIixTY2FsYXI6IlNjYWxhciIsUkdCOiJSR0IiLFJHQkE6IlJHQkEiLE9mZnNldDoiT2Zmc2V0IixWZWN0b3I6IlZlY3RvciIsUG9pbnQ6IlBvaW50IixDb3ZhcmlhbnRWZWN0b3I6IkNvdmFyaWFudFZlY3RvciIsU3ltbWV0cmljU2Vjb25kUmFua1RlbnNvcjoiU3ltbWV0cmljU2Vjb25kUmFua1RlbnNvciIsRGlmZnVzaW9uVGVuc29yM0Q6IkRpZmZ1c2lvblRlbnNvcjNEIixDb21wbGV4OiJDb21wbGV4IixGaXhlZEFycmF5OiJGaXhlZEFycmF5IixBcnJheToiQXJyYXkiLE1hdHJpeDoiTWF0cml4IixWYXJpYWJsZUxlbmd0aFZlY3RvcjoiVmFyaWFibGVMZW5ndGhWZWN0b3IiLFZhcmlhYmxlU2l6ZU1hdHJpeDoiVmFyaWFibGVTaXplTWF0cml4In0sTz1ucjt2YXIgV0E9Y2xhc3N7ZGltZW5zaW9uO2NvbXBvbmVudFR5cGU7cGl4ZWxUeXBlO2NvbXBvbmVudHM7Y29uc3RydWN0b3IoZT0yLHQ9RC5VSW50OCxyPU8uU2NhbGFyLG49MSl7dGhpcy5kaW1lbnNpb249ZSx0aGlzLmNvbXBvbmVudFR5cGU9dCx0aGlzLnBpeGVsVHlwZT1yLHRoaXMuY29tcG9uZW50cz1ufX0seGU9V0E7ZnVuY3Rpb24gb3IoQSxlLHQscixuKXtBW3IrdCplXT1ufXZhciBMZT1vcjt2YXIgdkE9Y2xhc3N7aW1hZ2VUeXBlO25hbWU9IkltYWdlIjtvcmlnaW47c3BhY2luZztkaXJlY3Rpb247c2l6ZTttZXRhZGF0YTtkYXRhO2NvbnN0cnVjdG9yKGU9bmV3IHhlKXt0aGlzLmltYWdlVHlwZT1lO2xldCB0PWUuZGltZW5zaW9uO3RoaXMub3JpZ2luPW5ldyBBcnJheSh0KSx0aGlzLm9yaWdpbi5maWxsKDApLHRoaXMuc3BhY2luZz1uZXcgQXJyYXkodCksdGhpcy5zcGFjaW5nLmZpbGwoMSksdGhpcy5kaXJlY3Rpb249bmV3IEZsb2F0NjRBcnJheSh0KnQpLHRoaXMuZGlyZWN0aW9uLmZpbGwoMCk7Zm9yKGxldCByPTA7cjx0O3IrKylMZSh0aGlzLmRpcmVjdGlvbix0LHIsciwxKTt0aGlzLnNpemU9bmV3IEFycmF5KHQpLHRoaXMuc2l6ZS5maWxsKDApLHRoaXMubWV0YWRhdGE9bmV3IE1hcCx0aGlzLmRhdGE9bnVsbH19LGpBPXZBO3ZhciBfQT1jbGFzc3tkaW1lbnNpb247cG9pbnRDb21wb25lbnRUeXBlO3BvaW50UGl4ZWxDb21wb25lbnRUeXBlO3BvaW50UGl4ZWxUeXBlO3BvaW50UGl4ZWxDb21wb25lbnRzO2NlbGxDb21wb25lbnRUeXBlO2NlbGxQaXhlbENvbXBvbmVudFR5cGU7Y2VsbFBpeGVsVHlwZTtjZWxsUGl4ZWxDb21wb25lbnRzO2NvbnN0cnVjdG9yKGU9Mix0PUYuRmxvYXQzMixyPUYuRmxvYXQzMixuPU8uU2NhbGFyLG89MSxpPUQuSW50MzIsZz1GLkZsb2F0MzIsQz1PLlNjYWxhcixjPTEpe3RoaXMuZGltZW5zaW9uPWUsdGhpcy5wb2ludENvbXBvbmVudFR5cGU9dCx0aGlzLnBvaW50UGl4ZWxDb21wb25lbnRUeXBlPXIsdGhpcy5wb2ludFBpeGVsVHlwZT1uLHRoaXMucG9pbnRQaXhlbENvbXBvbmVudHM9byx0aGlzLmNlbGxDb21wb25lbnRUeXBlPWksdGhpcy5jZWxsUGl4ZWxDb21wb25lbnRUeXBlPWcsdGhpcy5jZWxsUGl4ZWxUeXBlPUMsdGhpcy5jZWxsUGl4ZWxDb21wb25lbnRzPWN9fSxHZT1fQTt2YXIgekE9Y2xhc3N7bWVzaFR5cGU7bmFtZT0iTWVzaCI7bnVtYmVyT2ZQb2ludHM7cG9pbnRzO251bWJlck9mUG9pbnRQaXhlbHM7cG9pbnREYXRhO251bWJlck9mQ2VsbHM7Y2VsbHM7Y2VsbEJ1ZmZlclNpemU7bnVtYmVyT2ZDZWxsUGl4ZWxzO2NlbGxEYXRhO2NvbnN0cnVjdG9yKGU9bmV3IEdlKXt0aGlzLm1lc2hUeXBlPWUsdGhpcy5uYW1lPSJNZXNoIix0aGlzLm51bWJlck9mUG9pbnRzPTAsdGhpcy5wb2ludHM9bnVsbCx0aGlzLm51bWJlck9mUG9pbnRQaXhlbHM9MCx0aGlzLnBvaW50RGF0YT1udWxsLHRoaXMubnVtYmVyT2ZDZWxscz0wLHRoaXMuY2VsbEJ1ZmZlclNpemU9MCx0aGlzLmNlbGxzPW51bGwsdGhpcy5udW1iZXJPZkNlbGxQaXhlbHM9MCx0aGlzLmNlbGxEYXRhPW51bGx9fSxWQT16QTt2YXIgWkE9Y2xhc3N7cG9pbnRQaXhlbENvbXBvbmVudFR5cGU7cG9pbnRQaXhlbFR5cGU7cG9pbnRQaXhlbENvbXBvbmVudHM7Y2VsbFBpeGVsQ29tcG9uZW50VHlwZTtjZWxsUGl4ZWxUeXBlO2NlbGxQaXhlbENvbXBvbmVudHM7Y29uc3RydWN0b3IoZT1GLkZsb2F0MzIsdD1PLlNjYWxhcixyPTEsbj1GLkZsb2F0MzIsbz1PLlNjYWxhcixpPTEpe3RoaXMucG9pbnRQaXhlbENvbXBvbmVudFR5cGU9ZSx0aGlzLnBvaW50UGl4ZWxUeXBlPXQsdGhpcy5wb2ludFBpeGVsQ29tcG9uZW50cz1yLHRoaXMuY2VsbFBpeGVsQ29tcG9uZW50VHlwZT1uLHRoaXMuY2VsbFBpeGVsVHlwZT1vLHRoaXMuY2VsbFBpeGVsQ29tcG9uZW50cz1pfX0sT2U9WkE7dmFyIFhBPWNsYXNze3BvbHlEYXRhVHlwZTtuYW1lPSJQb2x5RGF0YSI7bnVtYmVyT2ZQb2ludHM7cG9pbnRzO3ZlcnRpY2VzQnVmZmVyU2l6ZTt2ZXJ0aWNlcztsaW5lc0J1ZmZlclNpemU7bGluZXM7cG9seWdvbnNCdWZmZXJTaXplO3BvbHlnb25zO3RyaWFuZ2xlU3RyaXBzQnVmZmVyU2l6ZTt0cmlhbmdsZVN0cmlwcztudW1iZXJPZlBvaW50UGl4ZWxzO3BvaW50RGF0YTtudW1iZXJPZkNlbGxQaXhlbHM7Y2VsbERhdGE7Y29uc3RydWN0b3IoZT1uZXcgT2Upe3RoaXMucG9seURhdGFUeXBlPWUsdGhpcy5wb2x5RGF0YVR5cGU9ZSx0aGlzLm5hbWU9IlBvbHlEYXRhIix0aGlzLm51bWJlck9mUG9pbnRzPTAsdGhpcy5wb2ludHM9bmV3IEZsb2F0MzJBcnJheSx0aGlzLnZlcnRpY2VzQnVmZmVyU2l6ZT0wLHRoaXMudmVydGljZXM9bnVsbCx0aGlzLmxpbmVzQnVmZmVyU2l6ZT0wLHRoaXMubGluZXM9bnVsbCx0aGlzLnBvbHlnb25zQnVmZmVyU2l6ZT0wLHRoaXMucG9seWdvbnM9bnVsbCx0aGlzLnRyaWFuZ2xlU3RyaXBzQnVmZmVyU2l6ZT0wLHRoaXMudHJpYW5nbGVTdHJpcHM9bnVsbCx0aGlzLm51bWJlck9mUG9pbnRQaXhlbHM9MCx0aGlzLnBvaW50RGF0YT1udWxsLHRoaXMubnVtYmVyT2ZDZWxsUGl4ZWxzPTAsdGhpcy5jZWxsRGF0YT1udWxsfX0sJEE9WEE7dmFyIGlyPXtUZXh0RmlsZToiVGV4dEZpbGUiLEJpbmFyeUZpbGU6IkJpbmFyeUZpbGUiLFRleHRTdHJlYW06IlRleHRTdHJlYW0iLEJpbmFyeVN0cmVhbToiQmluYXJ5U3RyZWFtIixJbWFnZToiSW1hZ2UiLFBvaW50U2V0OiJQb2ludFNldCIsTWVzaDoiTWVzaCIsUG9seURhdGE6IlBvbHlEYXRhIixUcmFuc2Zvcm1MaXN0OiJUcmFuc2Zvcm1MaXN0IixKc29uQ29tcGF0aWJsZToiSnNvbkNvbXBhdGlibGUifSxkPWlyO3ZhciBNZT1TeW1ib2woIkNvbWxpbmsucHJveHkiKSxzcj1TeW1ib2woIkNvbWxpbmsuZW5kcG9pbnQiKSx0ZT1TeW1ib2woIkNvbWxpbmsucmVsZWFzZVByb3h5IiksQWU9U3ltYm9sKCJDb21saW5rLmZpbmFsaXplciIpLFFBPVN5bWJvbCgiQ29tbGluay50aHJvd24iKSxIZT1BPT50eXBlb2YgQT09Im9iamVjdCImJkEhPT1udWxsfHx0eXBlb2YgQT09ImZ1bmN0aW9uIixhcj17Y2FuSGFuZGxlOkE9PkhlKEEpJiZBW01lXSxzZXJpYWxpemUoQSl7bGV0e3BvcnQxOmUscG9ydDI6dH09bmV3IE1lc3NhZ2VDaGFubmVsO3JldHVybiBZZShBLGUpLFt0LFt0XV19LGRlc2VyaWFsaXplKEEpe3JldHVybiBBLnN0YXJ0KCkscmUoQSl9fSxJcj17Y2FuSGFuZGxlOkE9PkhlKEEpJiZRQSBpbiBBLHNlcmlhbGl6ZSh7dmFsdWU6QX0pe2xldCBlO3JldHVybiBBIGluc3RhbmNlb2YgRXJyb3I/ZT17aXNFcnJvcjohMCx2YWx1ZTp7bWVzc2FnZTpBLm1lc3NhZ2UsbmFtZTpBLm5hbWUsc3RhY2s6QS5zdGFja319OmU9e2lzRXJyb3I6ITEsdmFsdWU6QX0sW2UsW11dfSxkZXNlcmlhbGl6ZShBKXt0aHJvdyBBLmlzRXJyb3I/T2JqZWN0LmFzc2lnbihuZXcgRXJyb3IoQS52YWx1ZS5tZXNzYWdlKSxBLnZhbHVlKTpBLnZhbHVlfX0scWU9bmV3IE1hcChbWyJwcm94eSIsYXJdLFsidGhyb3ciLElyXV0pO2Z1bmN0aW9uIGdyKEEsZSl7Zm9yKGxldCB0IG9mIEEpaWYoZT09PXR8fHQ9PT0iKiJ8fHQgaW5zdGFuY2VvZiBSZWdFeHAmJnQudGVzdChlKSlyZXR1cm4hMDtyZXR1cm4hMX1mdW5jdGlvbiBZZShBLGU9Z2xvYmFsVGhpcyx0PVsiKiJdKXtlLmFkZEV2ZW50TGlzdGVuZXIoIm1lc3NhZ2UiLGZ1bmN0aW9uIHIobil7aWYoIW58fCFuLmRhdGEpcmV0dXJuO2lmKCFncih0LG4ub3JpZ2luKSl7Y29uc29sZS53YXJuKGBJbnZhbGlkIG9yaWdpbiAnJHtuLm9yaWdpbn0nIGZvciBjb21saW5rIHByb3h5YCk7cmV0dXJufWxldHtpZDpvLHR5cGU6aSxwYXRoOmd9PU9iamVjdC5hc3NpZ24oe3BhdGg6W119LG4uZGF0YSksQz0obi5kYXRhLmFyZ3VtZW50TGlzdHx8W10pLm1hcChZKSxjO3RyeXtsZXQgYT1nLnNsaWNlKDAsLTEpLnJlZHVjZSgoZixsKT0+ZltsXSxBKSxJPWcucmVkdWNlKChmLGwpPT5mW2xdLEEpO3N3aXRjaChpKXtjYXNlIkdFVCI6Yz1JO2JyZWFrO2Nhc2UiU0VUIjphW2cuc2xpY2UoLTEpWzBdXT1ZKG4uZGF0YS52YWx1ZSksYz0hMDticmVhaztjYXNlIkFQUExZIjpjPUkuYXBwbHkoYSxDKTticmVhaztjYXNlIkNPTlNUUlVDVCI6e2xldCBmPW5ldyBJKC4uLkMpO2M9dXIoZil9YnJlYWs7Y2FzZSJFTkRQT0lOVCI6e2xldHtwb3J0MTpmLHBvcnQyOmx9PW5ldyBNZXNzYWdlQ2hhbm5lbDtZZShBLGwpLGM9bmUoZixbZl0pfWJyZWFrO2Nhc2UiUkVMRUFTRSI6Yz12b2lkIDA7YnJlYWs7ZGVmYXVsdDpyZXR1cm59fWNhdGNoKGEpe2M9e3ZhbHVlOmEsW1FBXTowfX1Qcm9taXNlLnJlc29sdmUoYykuY2F0Y2goYT0+KHt2YWx1ZTphLFtRQV06MH0pKS50aGVuKGE9PntsZXRbSSxmXT1tQShhKTtlLnBvc3RNZXNzYWdlKE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSxJKSx7aWQ6b30pLGYpLGk9PT0iUkVMRUFTRSImJihlLnJlbW92ZUV2ZW50TGlzdGVuZXIoIm1lc3NhZ2UiLHIpLEtlKGUpLEFlIGluIEEmJnR5cGVvZiBBW0FlXT09ImZ1bmN0aW9uIiYmQVtBZV0oKSl9KS5jYXRjaChhPT57bGV0W0ksZl09bUEoe3ZhbHVlOm5ldyBUeXBlRXJyb3IoIlVuc2VyaWFsaXphYmxlIHJldHVybiB2YWx1ZSIpLFtRQV06MH0pO2UucG9zdE1lc3NhZ2UoT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LEkpLHtpZDpvfSksZil9KX0pLGUuc3RhcnQmJmUuc3RhcnQoKX1mdW5jdGlvbiBscihBKXtyZXR1cm4gQS5jb25zdHJ1Y3Rvci5uYW1lPT09Ik1lc3NhZ2VQb3J0In1mdW5jdGlvbiBLZShBKXtscihBKSYmQS5jbG9zZSgpfWZ1bmN0aW9uIHJlKEEsZSl7cmV0dXJuIGVlKEEsW10sZSl9ZnVuY3Rpb24gRUEoQSl7aWYoQSl0aHJvdyBuZXcgRXJyb3IoIlByb3h5IGhhcyBiZWVuIHJlbGVhc2VkIGFuZCBpcyBub3QgdXNlYWJsZSIpfWZ1bmN0aW9uIFdlKEEpe3JldHVybiBXKEEse3R5cGU6IlJFTEVBU0UifSkudGhlbigoKT0+e0tlKEEpfSl9dmFyIHBBPW5ldyBXZWFrTWFwLGRBPSJGaW5hbGl6YXRpb25SZWdpc3RyeSJpbiBnbG9iYWxUaGlzJiZuZXcgRmluYWxpemF0aW9uUmVnaXN0cnkoQT0+e2xldCBlPShwQS5nZXQoQSl8fDApLTE7cEEuc2V0KEEsZSksZT09PTAmJldlKEEpfSk7ZnVuY3Rpb24gY3IoQSxlKXtsZXQgdD0ocEEuZ2V0KGUpfHwwKSsxO3BBLnNldChlLHQpLGRBJiZkQS5yZWdpc3RlcihBLGUsQSl9ZnVuY3Rpb24gQ3IoQSl7ZEEmJmRBLnVucmVnaXN0ZXIoQSl9ZnVuY3Rpb24gZWUoQSxlPVtdLHQ9ZnVuY3Rpb24oKXt9KXtsZXQgcj0hMSxuPW5ldyBQcm94eSh0LHtnZXQobyxpKXtpZihFQShyKSxpPT09dGUpcmV0dXJuKCk9PntDcihuKSxXZShBKSxyPSEwfTtpZihpPT09InRoZW4iKXtpZihlLmxlbmd0aD09PTApcmV0dXJue3RoZW46KCk9Pm59O2xldCBnPVcoQSx7dHlwZToiR0VUIixwYXRoOmUubWFwKEM9PkMudG9TdHJpbmcoKSl9KS50aGVuKFkpO3JldHVybiBnLnRoZW4uYmluZChnKX1yZXR1cm4gZWUoQSxbLi4uZSxpXSl9LHNldChvLGksZyl7RUEocik7bGV0W0MsY109bUEoZyk7cmV0dXJuIFcoQSx7dHlwZToiU0VUIixwYXRoOlsuLi5lLGldLm1hcChhPT5hLnRvU3RyaW5nKCkpLHZhbHVlOkN9LGMpLnRoZW4oWSl9LGFwcGx5KG8saSxnKXtFQShyKTtsZXQgQz1lW2UubGVuZ3RoLTFdO2lmKEM9PT1zcilyZXR1cm4gVyhBLHt0eXBlOiJFTkRQT0lOVCJ9KS50aGVuKFkpO2lmKEM9PT0iYmluZCIpcmV0dXJuIGVlKEEsZS5zbGljZSgwLC0xKSk7bGV0W2MsYV09SmUoZyk7cmV0dXJuIFcoQSx7dHlwZToiQVBQTFkiLHBhdGg6ZS5tYXAoST0+SS50b1N0cmluZygpKSxhcmd1bWVudExpc3Q6Y30sYSkudGhlbihZKX0sY29uc3RydWN0KG8saSl7RUEocik7bGV0W2csQ109SmUoaSk7cmV0dXJuIFcoQSx7dHlwZToiQ09OU1RSVUNUIixwYXRoOmUubWFwKGM9PmMudG9TdHJpbmcoKSksYXJndW1lbnRMaXN0Omd9LEMpLnRoZW4oWSl9fSk7cmV0dXJuIGNyKG4sQSksbn1mdW5jdGlvbiBCcihBKXtyZXR1cm4gQXJyYXkucHJvdG90eXBlLmNvbmNhdC5hcHBseShbXSxBKX1mdW5jdGlvbiBKZShBKXtsZXQgZT1BLm1hcChtQSk7cmV0dXJuW2UubWFwKHQ9PnRbMF0pLEJyKGUubWFwKHQ9PnRbMV0pKV19dmFyIHZlPW5ldyBXZWFrTWFwO2Z1bmN0aW9uIG5lKEEsZSl7cmV0dXJuIHZlLnNldChBLGUpLEF9ZnVuY3Rpb24gdXIoQSl7cmV0dXJuIE9iamVjdC5hc3NpZ24oQSx7W01lXTohMH0pfWZ1bmN0aW9uIG1BKEEpe2ZvcihsZXRbZSx0XW9mIHFlKWlmKHQuY2FuSGFuZGxlKEEpKXtsZXRbcixuXT10LnNlcmlhbGl6ZShBKTtyZXR1cm5be3R5cGU6IkhBTkRMRVIiLG5hbWU6ZSx2YWx1ZTpyfSxuXX1yZXR1cm5be3R5cGU6IlJBVyIsdmFsdWU6QX0sdmUuZ2V0KEEpfHxbXV19ZnVuY3Rpb24gWShBKXtzd2l0Y2goQS50eXBlKXtjYXNlIkhBTkRMRVIiOnJldHVybiBxZS5nZXQoQS5uYW1lKS5kZXNlcmlhbGl6ZShBLnZhbHVlKTtjYXNlIlJBVyI6cmV0dXJuIEEudmFsdWV9fWZ1bmN0aW9uIFcoQSxlLHQpe3JldHVybiBuZXcgUHJvbWlzZShyPT57bGV0IG49ZnIoKTtBLmFkZEV2ZW50TGlzdGVuZXIoIm1lc3NhZ2UiLGZ1bmN0aW9uIG8oaSl7IWkuZGF0YXx8IWkuZGF0YS5pZHx8aS5kYXRhLmlkIT09bnx8KEEucmVtb3ZlRXZlbnRMaXN0ZW5lcigibWVzc2FnZSIsbykscihpLmRhdGEpKX0pLEEuc3RhcnQmJkEuc3RhcnQoKSxBLnBvc3RNZXNzYWdlKE9iamVjdC5hc3NpZ24oe2lkOm59LGUpLHQpfSl9ZnVuY3Rpb24gZnIoKXtyZXR1cm4gbmV3IEFycmF5KDQpLmZpbGwoMCkubWFwKCgpPT5NYXRoLmZsb29yKE1hdGgucmFuZG9tKCkqTnVtYmVyLk1BWF9TQUZFX0lOVEVHRVIpLnRvU3RyaW5nKDE2KSkuam9pbigiLSIpfWZ1bmN0aW9uIHJBKEEsZSl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIEEuYXBwbHkoZSxhcmd1bWVudHMpfX12YXJ7dG9TdHJpbmc6RXJ9PU9iamVjdC5wcm90b3R5cGUse2dldFByb3RvdHlwZU9mOnNlfT1PYmplY3QsaEE9KEE9PmU9PntsZXQgdD1Fci5jYWxsKGUpO3JldHVybiBBW3RdfHwoQVt0XT10LnNsaWNlKDgsLTEpLnRvTG93ZXJDYXNlKCkpfSkoT2JqZWN0LmNyZWF0ZShudWxsKSksVD1BPT4oQT1BLnRvTG93ZXJDYXNlKCksZT0+aEEoZSk9PT1BKSx3QT1BPT5lPT50eXBlb2YgZT09PUEse2lzQXJyYXk6dn09QXJyYXksbkE9d0EoInVuZGVmaW5lZCIpO2Z1bmN0aW9uIFFyKEEpe3JldHVybiBBIT09bnVsbCYmIW5BKEEpJiZBLmNvbnN0cnVjdG9yIT09bnVsbCYmIW5BKEEuY29uc3RydWN0b3IpJiZVKEEuY29uc3RydWN0b3IuaXNCdWZmZXIpJiZBLmNvbnN0cnVjdG9yLmlzQnVmZmVyKEEpfXZhciBWZT1UKCJBcnJheUJ1ZmZlciIpO2Z1bmN0aW9uIHByKEEpe2xldCBlO3JldHVybiB0eXBlb2YgQXJyYXlCdWZmZXI8InUiJiZBcnJheUJ1ZmZlci5pc1ZpZXc/ZT1BcnJheUJ1ZmZlci5pc1ZpZXcoQSk6ZT1BJiZBLmJ1ZmZlciYmVmUoQS5idWZmZXIpLGV9dmFyIGRyPXdBKCJzdHJpbmciKSxVPXdBKCJmdW5jdGlvbiIpLFplPXdBKCJudW1iZXIiKSxEQT1BPT5BIT09bnVsbCYmdHlwZW9mIEE9PSJvYmplY3QiLG1yPUE9PkE9PT0hMHx8QT09PSExLHlBPUE9PntpZihoQShBKSE9PSJvYmplY3QiKXJldHVybiExO2xldCBlPXNlKEEpO3JldHVybihlPT09bnVsbHx8ZT09PU9iamVjdC5wcm90b3R5cGV8fE9iamVjdC5nZXRQcm90b3R5cGVPZihlKT09PW51bGwpJiYhKFN5bWJvbC50b1N0cmluZ1RhZyBpbiBBKSYmIShTeW1ib2wuaXRlcmF0b3IgaW4gQSl9LHlyPVQoIkRhdGUiKSxocj1UKCJGaWxlIiksd3I9VCgiQmxvYiIpLERyPVQoIkZpbGVMaXN0IiksU3I9QT0+REEoQSkmJlUoQS5waXBlKSxicj1BPT57bGV0IGU7cmV0dXJuIEEmJih0eXBlb2YgRm9ybURhdGE9PSJmdW5jdGlvbiImJkEgaW5zdGFuY2VvZiBGb3JtRGF0YXx8VShBLmFwcGVuZCkmJigoZT1oQShBKSk9PT0iZm9ybWRhdGEifHxlPT09Im9iamVjdCImJlUoQS50b1N0cmluZykmJkEudG9TdHJpbmcoKT09PSJbb2JqZWN0IEZvcm1EYXRhXSIpKX0sUnI9VCgiVVJMU2VhcmNoUGFyYW1zIiksW2tyLEZyLFVyLE5yXT1bIlJlYWRhYmxlU3RyZWFtIiwiUmVxdWVzdCIsIlJlc3BvbnNlIiwiSGVhZGVycyJdLm1hcChUKSxUcj1BPT5BLnRyaW0/QS50cmltKCk6QS5yZXBsYWNlKC9eW1xzXHVGRUZGXHhBMF0rfFtcc1x1RkVGRlx4QTBdKyQvZywiIik7ZnVuY3Rpb24gb0EoQSxlLHthbGxPd25LZXlzOnQ9ITF9PXt9KXtpZihBPT09bnVsbHx8dHlwZW9mIEE+InUiKXJldHVybjtsZXQgcixuO2lmKHR5cGVvZiBBIT0ib2JqZWN0IiYmKEE9W0FdKSx2KEEpKWZvcihyPTAsbj1BLmxlbmd0aDtyPG47cisrKWUuY2FsbChudWxsLEFbcl0scixBKTtlbHNle2xldCBvPXQ/T2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoQSk6T2JqZWN0LmtleXMoQSksaT1vLmxlbmd0aCxnO2ZvcihyPTA7cjxpO3IrKylnPW9bcl0sZS5jYWxsKG51bGwsQVtnXSxnLEEpfX1mdW5jdGlvbiBYZShBLGUpe2U9ZS50b0xvd2VyQ2FzZSgpO2xldCB0PU9iamVjdC5rZXlzKEEpLHI9dC5sZW5ndGgsbjtmb3IoO3ItLSA+MDspaWYobj10W3JdLGU9PT1uLnRvTG93ZXJDYXNlKCkpcmV0dXJuIG47cmV0dXJuIG51bGx9dmFyIEs9dHlwZW9mIGdsb2JhbFRoaXM8InUiP2dsb2JhbFRoaXM6dHlwZW9mIHNlbGY8InUiP3NlbGY6dHlwZW9mIHdpbmRvdzwidSI/d2luZG93Omdsb2JhbCwkZT1BPT4hbkEoQSkmJkEhPT1LO2Z1bmN0aW9uIGllKCl7bGV0e2Nhc2VsZXNzOkF9PSRlKHRoaXMpJiZ0aGlzfHx7fSxlPXt9LHQ9KHIsbik9PntsZXQgbz1BJiZYZShlLG4pfHxuO3lBKGVbb10pJiZ5QShyKT9lW29dPWllKGVbb10scik6eUEocik/ZVtvXT1pZSh7fSxyKTp2KHIpP2Vbb109ci5zbGljZSgpOmVbb109cn07Zm9yKGxldCByPTAsbj1hcmd1bWVudHMubGVuZ3RoO3I8bjtyKyspYXJndW1lbnRzW3JdJiZvQShhcmd1bWVudHNbcl0sdCk7cmV0dXJuIGV9dmFyIFByPShBLGUsdCx7YWxsT3duS2V5czpyfT17fSk9PihvQShlLChuLG8pPT57dCYmVShuKT9BW29dPXJBKG4sdCk6QVtvXT1ufSx7YWxsT3duS2V5czpyfSksQSkseHI9QT0+KEEuY2hhckNvZGVBdCgwKT09PTY1Mjc5JiYoQT1BLnNsaWNlKDEpKSxBKSxMcj0oQSxlLHQscik9PntBLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKGUucHJvdG90eXBlLHIpLEEucHJvdG90eXBlLmNvbnN0cnVjdG9yPUEsT2JqZWN0LmRlZmluZVByb3BlcnR5KEEsInN1cGVyIix7dmFsdWU6ZS5wcm90b3R5cGV9KSx0JiZPYmplY3QuYXNzaWduKEEucHJvdG90eXBlLHQpfSxHcj0oQSxlLHQscik9PntsZXQgbixvLGksZz17fTtpZihlPWV8fHt9LEE9PW51bGwpcmV0dXJuIGU7ZG97Zm9yKG49T2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoQSksbz1uLmxlbmd0aDtvLS0gPjA7KWk9bltvXSwoIXJ8fHIoaSxBLGUpKSYmIWdbaV0mJihlW2ldPUFbaV0sZ1tpXT0hMCk7QT10IT09ITEmJnNlKEEpfXdoaWxlKEEmJighdHx8dChBLGUpKSYmQSE9PU9iamVjdC5wcm90b3R5cGUpO3JldHVybiBlfSxPcj0oQSxlLHQpPT57QT1TdHJpbmcoQSksKHQ9PT12b2lkIDB8fHQ+QS5sZW5ndGgpJiYodD1BLmxlbmd0aCksdC09ZS5sZW5ndGg7bGV0IHI9QS5pbmRleE9mKGUsdCk7cmV0dXJuIHIhPT0tMSYmcj09PXR9LEpyPUE9PntpZighQSlyZXR1cm4gbnVsbDtpZih2KEEpKXJldHVybiBBO2xldCBlPUEubGVuZ3RoO2lmKCFaZShlKSlyZXR1cm4gbnVsbDtsZXQgdD1uZXcgQXJyYXkoZSk7Zm9yKDtlLS0gPjA7KXRbZV09QVtlXTtyZXR1cm4gdH0sTXI9KEE9PmU9PkEmJmUgaW5zdGFuY2VvZiBBKSh0eXBlb2YgVWludDhBcnJheTwidSImJnNlKFVpbnQ4QXJyYXkpKSxIcj0oQSxlKT0+e2xldCByPShBJiZBW1N5bWJvbC5pdGVyYXRvcl0pLmNhbGwoQSksbjtmb3IoOyhuPXIubmV4dCgpKSYmIW4uZG9uZTspe2xldCBvPW4udmFsdWU7ZS5jYWxsKEEsb1swXSxvWzFdKX19LHFyPShBLGUpPT57bGV0IHQscj1bXTtmb3IoOyh0PUEuZXhlYyhlKSkhPT1udWxsOylyLnB1c2godCk7cmV0dXJuIHJ9LFlyPVQoIkhUTUxGb3JtRWxlbWVudCIpLEtyPUE9PkEudG9Mb3dlckNhc2UoKS5yZXBsYWNlKC9bLV9cc10oW2EtelxkXSkoXHcqKS9nLGZ1bmN0aW9uKHQscixuKXtyZXR1cm4gci50b1VwcGVyQ2FzZSgpK259KSxfZT0oKHtoYXNPd25Qcm9wZXJ0eTpBfSk9PihlLHQpPT5BLmNhbGwoZSx0KSkoT2JqZWN0LnByb3RvdHlwZSksV3I9VCgiUmVnRXhwIiksQXQ9KEEsZSk9PntsZXQgdD1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyhBKSxyPXt9O29BKHQsKG4sbyk9PntsZXQgaTsoaT1lKG4sbyxBKSkhPT0hMSYmKHJbb109aXx8bil9KSxPYmplY3QuZGVmaW5lUHJvcGVydGllcyhBLHIpfSx2cj1BPT57QXQoQSwoZSx0KT0+e2lmKFUoQSkmJlsiYXJndW1lbnRzIiwiY2FsbGVyIiwiY2FsbGVlIl0uaW5kZXhPZih0KSE9PS0xKXJldHVybiExO2xldCByPUFbdF07aWYoVShyKSl7aWYoZS5lbnVtZXJhYmxlPSExLCJ3cml0YWJsZSJpbiBlKXtlLndyaXRhYmxlPSExO3JldHVybn1lLnNldHx8KGUuc2V0PSgpPT57dGhyb3cgRXJyb3IoIkNhbiBub3QgcmV3cml0ZSByZWFkLW9ubHkgbWV0aG9kICciK3QrIiciKX0pfX0pfSxqcj0oQSxlKT0+e2xldCB0PXt9LHI9bj0+e24uZm9yRWFjaChvPT57dFtvXT0hMH0pfTtyZXR1cm4gdihBKT9yKEEpOnIoU3RyaW5nKEEpLnNwbGl0KGUpKSx0fSxfcj0oKT0+e30senI9KEEsZSk9PkEhPW51bGwmJk51bWJlci5pc0Zpbml0ZShBPStBKT9BOmUsb2U9ImFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6Iix6ZT0iMDEyMzQ1Njc4OSIsZXQ9e0RJR0lUOnplLEFMUEhBOm9lLEFMUEhBX0RJR0lUOm9lK29lLnRvVXBwZXJDYXNlKCkremV9LFZyPShBPTE2LGU9ZXQuQUxQSEFfRElHSVQpPT57bGV0IHQ9IiIse2xlbmd0aDpyfT1lO2Zvcig7QS0tOyl0Kz1lW01hdGgucmFuZG9tKCkqcnwwXTtyZXR1cm4gdH07ZnVuY3Rpb24gWnIoQSl7cmV0dXJuISEoQSYmVShBLmFwcGVuZCkmJkFbU3ltYm9sLnRvU3RyaW5nVGFnXT09PSJGb3JtRGF0YSImJkFbU3ltYm9sLml0ZXJhdG9yXSl9dmFyIFhyPUE9PntsZXQgZT1uZXcgQXJyYXkoMTApLHQ9KHIsbik9PntpZihEQShyKSl7aWYoZS5pbmRleE9mKHIpPj0wKXJldHVybjtpZighKCJ0b0pTT04iaW4gcikpe2Vbbl09cjtsZXQgbz12KHIpP1tdOnt9O3JldHVybiBvQShyLChpLGcpPT57bGV0IEM9dChpLG4rMSk7IW5BKEMpJiYob1tnXT1DKX0pLGVbbl09dm9pZCAwLG99fXJldHVybiByfTtyZXR1cm4gdChBLDApfSwkcj1UKCJBc3luY0Z1bmN0aW9uIiksQW49QT0+QSYmKERBKEEpfHxVKEEpKSYmVShBLnRoZW4pJiZVKEEuY2F0Y2gpLHR0PSgoQSxlKT0+QT9zZXRJbW1lZGlhdGU6ZT8oKHQscik9PihLLmFkZEV2ZW50TGlzdGVuZXIoIm1lc3NhZ2UiLCh7c291cmNlOm4sZGF0YTpvfSk9PntuPT09SyYmbz09PXQmJnIubGVuZ3RoJiZyLnNoaWZ0KCkoKX0sITEpLG49PntyLnB1c2gobiksSy5wb3N0TWVzc2FnZSh0LCIqIil9KSkoYGF4aW9zQCR7TWF0aC5yYW5kb20oKX1gLFtdKTp0PT5zZXRUaW1lb3V0KHQpKSh0eXBlb2Ygc2V0SW1tZWRpYXRlPT0iZnVuY3Rpb24iLFUoSy5wb3N0TWVzc2FnZSkpLGVuPXR5cGVvZiBxdWV1ZU1pY3JvdGFzazwidSI/cXVldWVNaWNyb3Rhc2suYmluZChLKTp0eXBlb2YgcHJvY2VzczwidSImJnByb2Nlc3MubmV4dFRpY2t8fHR0LHM9e2lzQXJyYXk6dixpc0FycmF5QnVmZmVyOlZlLGlzQnVmZmVyOlFyLGlzRm9ybURhdGE6YnIsaXNBcnJheUJ1ZmZlclZpZXc6cHIsaXNTdHJpbmc6ZHIsaXNOdW1iZXI6WmUsaXNCb29sZWFuOm1yLGlzT2JqZWN0OkRBLGlzUGxhaW5PYmplY3Q6eUEsaXNSZWFkYWJsZVN0cmVhbTprcixpc1JlcXVlc3Q6RnIsaXNSZXNwb25zZTpVcixpc0hlYWRlcnM6TnIsaXNVbmRlZmluZWQ6bkEsaXNEYXRlOnlyLGlzRmlsZTpocixpc0Jsb2I6d3IsaXNSZWdFeHA6V3IsaXNGdW5jdGlvbjpVLGlzU3RyZWFtOlNyLGlzVVJMU2VhcmNoUGFyYW1zOlJyLGlzVHlwZWRBcnJheTpNcixpc0ZpbGVMaXN0OkRyLGZvckVhY2g6b0EsbWVyZ2U6aWUsZXh0ZW5kOlByLHRyaW06VHIsc3RyaXBCT006eHIsaW5oZXJpdHM6THIsdG9GbGF0T2JqZWN0OkdyLGtpbmRPZjpoQSxraW5kT2ZUZXN0OlQsZW5kc1dpdGg6T3IsdG9BcnJheTpKcixmb3JFYWNoRW50cnk6SHIsbWF0Y2hBbGw6cXIsaXNIVE1MRm9ybTpZcixoYXNPd25Qcm9wZXJ0eTpfZSxoYXNPd25Qcm9wOl9lLHJlZHVjZURlc2NyaXB0b3JzOkF0LGZyZWV6ZU1ldGhvZHM6dnIsdG9PYmplY3RTZXQ6anIsdG9DYW1lbENhc2U6S3Isbm9vcDpfcix0b0Zpbml0ZU51bWJlcjp6cixmaW5kS2V5OlhlLGdsb2JhbDpLLGlzQ29udGV4dERlZmluZWQ6JGUsQUxQSEFCRVQ6ZXQsZ2VuZXJhdGVTdHJpbmc6VnIsaXNTcGVjQ29tcGxpYW50Rm9ybTpacix0b0pTT05PYmplY3Q6WHIsaXNBc3luY0ZuOiRyLGlzVGhlbmFibGU6QW4sc2V0SW1tZWRpYXRlOnR0LGFzYXA6ZW59O2Z1bmN0aW9uIGooQSxlLHQscixuKXtFcnJvci5jYWxsKHRoaXMpLEVycm9yLmNhcHR1cmVTdGFja1RyYWNlP0Vycm9yLmNhcHR1cmVTdGFja1RyYWNlKHRoaXMsdGhpcy5jb25zdHJ1Y3Rvcik6dGhpcy5zdGFjaz1uZXcgRXJyb3IoKS5zdGFjayx0aGlzLm1lc3NhZ2U9QSx0aGlzLm5hbWU9IkF4aW9zRXJyb3IiLGUmJih0aGlzLmNvZGU9ZSksdCYmKHRoaXMuY29uZmlnPXQpLHImJih0aGlzLnJlcXVlc3Q9ciksbiYmKHRoaXMucmVzcG9uc2U9bil9cy5pbmhlcml0cyhqLEVycm9yLHt0b0pTT046ZnVuY3Rpb24oKXtyZXR1cm57bWVzc2FnZTp0aGlzLm1lc3NhZ2UsbmFtZTp0aGlzLm5hbWUsZGVzY3JpcHRpb246dGhpcy5kZXNjcmlwdGlvbixudW1iZXI6dGhpcy5udW1iZXIsZmlsZU5hbWU6dGhpcy5maWxlTmFtZSxsaW5lTnVtYmVyOnRoaXMubGluZU51bWJlcixjb2x1bW5OdW1iZXI6dGhpcy5jb2x1bW5OdW1iZXIsc3RhY2s6dGhpcy5zdGFjayxjb25maWc6cy50b0pTT05PYmplY3QodGhpcy5jb25maWcpLGNvZGU6dGhpcy5jb2RlLHN0YXR1czp0aGlzLnJlc3BvbnNlJiZ0aGlzLnJlc3BvbnNlLnN0YXR1cz90aGlzLnJlc3BvbnNlLnN0YXR1czpudWxsfX19KTt2YXIgcnQ9ai5wcm90b3R5cGUsbnQ9e307WyJFUlJfQkFEX09QVElPTl9WQUxVRSIsIkVSUl9CQURfT1BUSU9OIiwiRUNPTk5BQk9SVEVEIiwiRVRJTUVET1VUIiwiRVJSX05FVFdPUksiLCJFUlJfRlJfVE9PX01BTllfUkVESVJFQ1RTIiwiRVJSX0RFUFJFQ0FURUQiLCJFUlJfQkFEX1JFU1BPTlNFIiwiRVJSX0JBRF9SRVFVRVNUIiwiRVJSX0NBTkNFTEVEIiwiRVJSX05PVF9TVVBQT1JUIiwiRVJSX0lOVkFMSURfVVJMIl0uZm9yRWFjaChBPT57bnRbQV09e3ZhbHVlOkF9fSk7T2JqZWN0LmRlZmluZVByb3BlcnRpZXMoaixudCk7T2JqZWN0LmRlZmluZVByb3BlcnR5KHJ0LCJpc0F4aW9zRXJyb3IiLHt2YWx1ZTohMH0pO2ouZnJvbT0oQSxlLHQscixuLG8pPT57bGV0IGk9T2JqZWN0LmNyZWF0ZShydCk7cmV0dXJuIHMudG9GbGF0T2JqZWN0KEEsaSxmdW5jdGlvbihDKXtyZXR1cm4gQyE9PUVycm9yLnByb3RvdHlwZX0sZz0+ZyE9PSJpc0F4aW9zRXJyb3IiKSxqLmNhbGwoaSxBLm1lc3NhZ2UsZSx0LHIsbiksaS5jYXVzZT1BLGkubmFtZT1BLm5hbWUsbyYmT2JqZWN0LmFzc2lnbihpLG8pLGl9O3ZhciBRPWo7dmFyIFNBPW51bGw7ZnVuY3Rpb24gYWUoQSl7cmV0dXJuIHMuaXNQbGFpbk9iamVjdChBKXx8cy5pc0FycmF5KEEpfWZ1bmN0aW9uIGl0KEEpe3JldHVybiBzLmVuZHNXaXRoKEEsIltdIik/QS5zbGljZSgwLC0yKTpBfWZ1bmN0aW9uIG90KEEsZSx0KXtyZXR1cm4gQT9BLmNvbmNhdChlKS5tYXAoZnVuY3Rpb24obixvKXtyZXR1cm4gbj1pdChuKSwhdCYmbz8iWyIrbisiXSI6bn0pLmpvaW4odD8iLiI6IiIpOmV9ZnVuY3Rpb24gdG4oQSl7cmV0dXJuIHMuaXNBcnJheShBKSYmIUEuc29tZShhZSl9dmFyIHJuPXMudG9GbGF0T2JqZWN0KHMse30sbnVsbCxmdW5jdGlvbihlKXtyZXR1cm4vXmlzW0EtWl0vLnRlc3QoZSl9KTtmdW5jdGlvbiBubihBLGUsdCl7aWYoIXMuaXNPYmplY3QoQSkpdGhyb3cgbmV3IFR5cGVFcnJvcigidGFyZ2V0IG11c3QgYmUgYW4gb2JqZWN0Iik7ZT1lfHxuZXcoU0F8fEZvcm1EYXRhKSx0PXMudG9GbGF0T2JqZWN0KHQse21ldGFUb2tlbnM6ITAsZG90czohMSxpbmRleGVzOiExfSwhMSxmdW5jdGlvbihFLEIpe3JldHVybiFzLmlzVW5kZWZpbmVkKEJbRV0pfSk7bGV0IHI9dC5tZXRhVG9rZW5zLG49dC52aXNpdG9yfHxhLG89dC5kb3RzLGk9dC5pbmRleGVzLEM9KHQuQmxvYnx8dHlwZW9mIEJsb2I8InUiJiZCbG9iKSYmcy5pc1NwZWNDb21wbGlhbnRGb3JtKGUpO2lmKCFzLmlzRnVuY3Rpb24obikpdGhyb3cgbmV3IFR5cGVFcnJvcigidmlzaXRvciBtdXN0IGJlIGEgZnVuY3Rpb24iKTtmdW5jdGlvbiBjKHUpe2lmKHU9PT1udWxsKXJldHVybiIiO2lmKHMuaXNEYXRlKHUpKXJldHVybiB1LnRvSVNPU3RyaW5nKCk7aWYoIUMmJnMuaXNCbG9iKHUpKXRocm93IG5ldyBRKCJCbG9iIGlzIG5vdCBzdXBwb3J0ZWQuIFVzZSBhIEJ1ZmZlciBpbnN0ZWFkLiIpO3JldHVybiBzLmlzQXJyYXlCdWZmZXIodSl8fHMuaXNUeXBlZEFycmF5KHUpP0MmJnR5cGVvZiBCbG9iPT0iZnVuY3Rpb24iP25ldyBCbG9iKFt1XSk6QnVmZmVyLmZyb20odSk6dX1mdW5jdGlvbiBhKHUsRSxCKXtsZXQgbT11O2lmKHUmJiFCJiZ0eXBlb2YgdT09Im9iamVjdCIpe2lmKHMuZW5kc1dpdGgoRSwie30iKSlFPXI/RTpFLnNsaWNlKDAsLTIpLHU9SlNPTi5zdHJpbmdpZnkodSk7ZWxzZSBpZihzLmlzQXJyYXkodSkmJnRuKHUpfHwocy5pc0ZpbGVMaXN0KHUpfHxzLmVuZHNXaXRoKEUsIltdIikpJiYobT1zLnRvQXJyYXkodSkpKXJldHVybiBFPWl0KEUpLG0uZm9yRWFjaChmdW5jdGlvbihwLE4peyEocy5pc1VuZGVmaW5lZChwKXx8cD09PW51bGwpJiZlLmFwcGVuZChpPT09ITA/b3QoW0VdLE4sbyk6aT09PW51bGw/RTpFKyJbXSIsYyhwKSl9KSwhMX1yZXR1cm4gYWUodSk/ITA6KGUuYXBwZW5kKG90KEIsRSxvKSxjKHUpKSwhMSl9bGV0IEk9W10sZj1PYmplY3QuYXNzaWduKHJuLHtkZWZhdWx0VmlzaXRvcjphLGNvbnZlcnRWYWx1ZTpjLGlzVmlzaXRhYmxlOmFlfSk7ZnVuY3Rpb24gbCh1LEUpe2lmKCFzLmlzVW5kZWZpbmVkKHUpKXtpZihJLmluZGV4T2YodSkhPT0tMSl0aHJvdyBFcnJvcigiQ2lyY3VsYXIgcmVmZXJlbmNlIGRldGVjdGVkIGluICIrRS5qb2luKCIuIikpO0kucHVzaCh1KSxzLmZvckVhY2godSxmdW5jdGlvbihtLGIpeyghKHMuaXNVbmRlZmluZWQobSl8fG09PT1udWxsKSYmbi5jYWxsKGUsbSxzLmlzU3RyaW5nKGIpP2IudHJpbSgpOmIsRSxmKSk9PT0hMCYmbChtLEU/RS5jb25jYXQoYik6W2JdKX0pLEkucG9wKCl9fWlmKCFzLmlzT2JqZWN0KEEpKXRocm93IG5ldyBUeXBlRXJyb3IoImRhdGEgbXVzdCBiZSBhbiBvYmplY3QiKTtyZXR1cm4gbChBKSxlfXZhciBKPW5uO2Z1bmN0aW9uIHN0KEEpe2xldCBlPXsiISI6IiUyMSIsIiciOiIlMjciLCIoIjoiJTI4IiwiKSI6IiUyOSIsIn4iOiIlN0UiLCIlMjAiOiIrIiwiJTAwIjoiXDAifTtyZXR1cm4gZW5jb2RlVVJJQ29tcG9uZW50KEEpLnJlcGxhY2UoL1shJygpfl18JTIwfCUwMC9nLGZ1bmN0aW9uKHIpe3JldHVybiBlW3JdfSl9ZnVuY3Rpb24gYXQoQSxlKXt0aGlzLl9wYWlycz1bXSxBJiZKKEEsdGhpcyxlKX12YXIgSXQ9YXQucHJvdG90eXBlO0l0LmFwcGVuZD1mdW5jdGlvbihlLHQpe3RoaXMuX3BhaXJzLnB1c2goW2UsdF0pfTtJdC50b1N0cmluZz1mdW5jdGlvbihlKXtsZXQgdD1lP2Z1bmN0aW9uKHIpe3JldHVybiBlLmNhbGwodGhpcyxyLHN0KX06c3Q7cmV0dXJuIHRoaXMuX3BhaXJzLm1hcChmdW5jdGlvbihuKXtyZXR1cm4gdChuWzBdKSsiPSIrdChuWzFdKX0sIiIpLmpvaW4oIiYiKX07dmFyIGJBPWF0O2Z1bmN0aW9uIG9uKEEpe3JldHVybiBlbmNvZGVVUklDb21wb25lbnQoQSkucmVwbGFjZSgvJTNBL2dpLCI6IikucmVwbGFjZSgvJTI0L2csIiQiKS5yZXBsYWNlKC8lMkMvZ2ksIiwiKS5yZXBsYWNlKC8lMjAvZywiKyIpLnJlcGxhY2UoLyU1Qi9naSwiWyIpLnJlcGxhY2UoLyU1RC9naSwiXSIpfWZ1bmN0aW9uIGlBKEEsZSx0KXtpZighZSlyZXR1cm4gQTtsZXQgcj10JiZ0LmVuY29kZXx8b24sbj10JiZ0LnNlcmlhbGl6ZSxvO2lmKG4/bz1uKGUsdCk6bz1zLmlzVVJMU2VhcmNoUGFyYW1zKGUpP2UudG9TdHJpbmcoKTpuZXcgYkEoZSx0KS50b1N0cmluZyhyKSxvKXtsZXQgaT1BLmluZGV4T2YoIiMiKTtpIT09LTEmJihBPUEuc2xpY2UoMCxpKSksQSs9KEEuaW5kZXhPZigiPyIpPT09LTE/Ij8iOiImIikrb31yZXR1cm4gQX12YXIgSWU9Y2xhc3N7Y29uc3RydWN0b3IoKXt0aGlzLmhhbmRsZXJzPVtdfXVzZShlLHQscil7cmV0dXJuIHRoaXMuaGFuZGxlcnMucHVzaCh7ZnVsZmlsbGVkOmUscmVqZWN0ZWQ6dCxzeW5jaHJvbm91czpyP3Iuc3luY2hyb25vdXM6ITEscnVuV2hlbjpyP3IucnVuV2hlbjpudWxsfSksdGhpcy5oYW5kbGVycy5sZW5ndGgtMX1lamVjdChlKXt0aGlzLmhhbmRsZXJzW2VdJiYodGhpcy5oYW5kbGVyc1tlXT1udWxsKX1jbGVhcigpe3RoaXMuaGFuZGxlcnMmJih0aGlzLmhhbmRsZXJzPVtdKX1mb3JFYWNoKGUpe3MuZm9yRWFjaCh0aGlzLmhhbmRsZXJzLGZ1bmN0aW9uKHIpe3IhPT1udWxsJiZlKHIpfSl9fSxnZT1JZTt2YXIgUkE9e3NpbGVudEpTT05QYXJzaW5nOiEwLGZvcmNlZEpTT05QYXJzaW5nOiEwLGNsYXJpZnlUaW1lb3V0RXJyb3I6ITF9O3ZhciBndD10eXBlb2YgVVJMU2VhcmNoUGFyYW1zPCJ1Ij9VUkxTZWFyY2hQYXJhbXM6YkE7dmFyIGx0PXR5cGVvZiBGb3JtRGF0YTwidSI/Rm9ybURhdGE6bnVsbDt2YXIgY3Q9dHlwZW9mIEJsb2I8InUiP0Jsb2I6bnVsbDt2YXIgQ3Q9e2lzQnJvd3NlcjohMCxjbGFzc2VzOntVUkxTZWFyY2hQYXJhbXM6Z3QsRm9ybURhdGE6bHQsQmxvYjpjdH0scHJvdG9jb2xzOlsiaHR0cCIsImh0dHBzIiwiZmlsZSIsImJsb2IiLCJ1cmwiLCJkYXRhIl19O3ZhciBjZT17fTskdChjZSx7aGFzQnJvd3NlckVudjooKT0+bGUsaGFzU3RhbmRhcmRCcm93c2VyRW52OigpPT5zbixoYXNTdGFuZGFyZEJyb3dzZXJXZWJXb3JrZXJFbnY6KCk9PmFuLG9yaWdpbjooKT0+SW59KTt2YXIgbGU9dHlwZW9mIHdpbmRvdzwidSImJnR5cGVvZiBkb2N1bWVudDwidSIsc249KEE9PmxlJiZbIlJlYWN0TmF0aXZlIiwiTmF0aXZlU2NyaXB0IiwiTlMiXS5pbmRleE9mKEEpPDApKHR5cGVvZiBuYXZpZ2F0b3I8InUiJiZuYXZpZ2F0b3IucHJvZHVjdCksYW49dHlwZW9mIFdvcmtlckdsb2JhbFNjb3BlPCJ1IiYmc2VsZiBpbnN0YW5jZW9mIFdvcmtlckdsb2JhbFNjb3BlJiZ0eXBlb2Ygc2VsZi5pbXBvcnRTY3JpcHRzPT0iZnVuY3Rpb24iLEluPWxlJiZ3aW5kb3cubG9jYXRpb24uaHJlZnx8Imh0dHA6Ly9sb2NhbGhvc3QiO3ZhciBTPXsuLi5jZSwuLi5DdH07ZnVuY3Rpb24gQ2UoQSxlKXtyZXR1cm4gSihBLG5ldyBTLmNsYXNzZXMuVVJMU2VhcmNoUGFyYW1zLE9iamVjdC5hc3NpZ24oe3Zpc2l0b3I6ZnVuY3Rpb24odCxyLG4sbyl7cmV0dXJuIFMuaXNOb2RlJiZzLmlzQnVmZmVyKHQpPyh0aGlzLmFwcGVuZChyLHQudG9TdHJpbmcoImJhc2U2NCIpKSwhMSk6by5kZWZhdWx0VmlzaXRvci5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSxlKSl9ZnVuY3Rpb24gZ24oQSl7cmV0dXJuIHMubWF0Y2hBbGwoL1x3K3xcWyhcdyopXS9nLEEpLm1hcChlPT5lWzBdPT09IltdIj8iIjplWzFdfHxlWzBdKX1mdW5jdGlvbiBsbihBKXtsZXQgZT17fSx0PU9iamVjdC5rZXlzKEEpLHIsbj10Lmxlbmd0aCxvO2ZvcihyPTA7cjxuO3IrKylvPXRbcl0sZVtvXT1BW29dO3JldHVybiBlfWZ1bmN0aW9uIGNuKEEpe2Z1bmN0aW9uIGUodCxyLG4sbyl7bGV0IGk9dFtvKytdO2lmKGk9PT0iX19wcm90b19fIilyZXR1cm4hMDtsZXQgZz1OdW1iZXIuaXNGaW5pdGUoK2kpLEM9bz49dC5sZW5ndGg7cmV0dXJuIGk9IWkmJnMuaXNBcnJheShuKT9uLmxlbmd0aDppLEM/KHMuaGFzT3duUHJvcChuLGkpP25baV09W25baV0scl06bltpXT1yLCFnKTooKCFuW2ldfHwhcy5pc09iamVjdChuW2ldKSkmJihuW2ldPVtdKSxlKHQscixuW2ldLG8pJiZzLmlzQXJyYXkobltpXSkmJihuW2ldPWxuKG5baV0pKSwhZyl9aWYocy5pc0Zvcm1EYXRhKEEpJiZzLmlzRnVuY3Rpb24oQS5lbnRyaWVzKSl7bGV0IHQ9e307cmV0dXJuIHMuZm9yRWFjaEVudHJ5KEEsKHIsbik9PntlKGduKHIpLG4sdCwwKX0pLHR9cmV0dXJuIG51bGx9dmFyIGtBPWNuO2Z1bmN0aW9uIENuKEEsZSx0KXtpZihzLmlzU3RyaW5nKEEpKXRyeXtyZXR1cm4oZXx8SlNPTi5wYXJzZSkoQSkscy50cmltKEEpfWNhdGNoKHIpe2lmKHIubmFtZSE9PSJTeW50YXhFcnJvciIpdGhyb3cgcn1yZXR1cm4odHx8SlNPTi5zdHJpbmdpZnkpKEEpfXZhciBCZT17dHJhbnNpdGlvbmFsOlJBLGFkYXB0ZXI6WyJ4aHIiLCJodHRwIiwiZmV0Y2giXSx0cmFuc2Zvcm1SZXF1ZXN0OltmdW5jdGlvbihlLHQpe2xldCByPXQuZ2V0Q29udGVudFR5cGUoKXx8IiIsbj1yLmluZGV4T2YoImFwcGxpY2F0aW9uL2pzb24iKT4tMSxvPXMuaXNPYmplY3QoZSk7aWYobyYmcy5pc0hUTUxGb3JtKGUpJiYoZT1uZXcgRm9ybURhdGEoZSkpLHMuaXNGb3JtRGF0YShlKSlyZXR1cm4gbj9KU09OLnN0cmluZ2lmeShrQShlKSk6ZTtpZihzLmlzQXJyYXlCdWZmZXIoZSl8fHMuaXNCdWZmZXIoZSl8fHMuaXNTdHJlYW0oZSl8fHMuaXNGaWxlKGUpfHxzLmlzQmxvYihlKXx8cy5pc1JlYWRhYmxlU3RyZWFtKGUpKXJldHVybiBlO2lmKHMuaXNBcnJheUJ1ZmZlclZpZXcoZSkpcmV0dXJuIGUuYnVmZmVyO2lmKHMuaXNVUkxTZWFyY2hQYXJhbXMoZSkpcmV0dXJuIHQuc2V0Q29udGVudFR5cGUoImFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZDtjaGFyc2V0PXV0Zi04IiwhMSksZS50b1N0cmluZygpO2xldCBnO2lmKG8pe2lmKHIuaW5kZXhPZigiYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkIik+LTEpcmV0dXJuIENlKGUsdGhpcy5mb3JtU2VyaWFsaXplcikudG9TdHJpbmcoKTtpZigoZz1zLmlzRmlsZUxpc3QoZSkpfHxyLmluZGV4T2YoIm11bHRpcGFydC9mb3JtLWRhdGEiKT4tMSl7bGV0IEM9dGhpcy5lbnYmJnRoaXMuZW52LkZvcm1EYXRhO3JldHVybiBKKGc/eyJmaWxlc1tdIjplfTplLEMmJm5ldyBDLHRoaXMuZm9ybVNlcmlhbGl6ZXIpfX1yZXR1cm4gb3x8bj8odC5zZXRDb250ZW50VHlwZSgiYXBwbGljYXRpb24vanNvbiIsITEpLENuKGUpKTplfV0sdHJhbnNmb3JtUmVzcG9uc2U6W2Z1bmN0aW9uKGUpe2xldCB0PXRoaXMudHJhbnNpdGlvbmFsfHxCZS50cmFuc2l0aW9uYWwscj10JiZ0LmZvcmNlZEpTT05QYXJzaW5nLG49dGhpcy5yZXNwb25zZVR5cGU9PT0ianNvbiI7aWYocy5pc1Jlc3BvbnNlKGUpfHxzLmlzUmVhZGFibGVTdHJlYW0oZSkpcmV0dXJuIGU7aWYoZSYmcy5pc1N0cmluZyhlKSYmKHImJiF0aGlzLnJlc3BvbnNlVHlwZXx8bikpe2xldCBpPSEodCYmdC5zaWxlbnRKU09OUGFyc2luZykmJm47dHJ5e3JldHVybiBKU09OLnBhcnNlKGUpfWNhdGNoKGcpe2lmKGkpdGhyb3cgZy5uYW1lPT09IlN5bnRheEVycm9yIj9RLmZyb20oZyxRLkVSUl9CQURfUkVTUE9OU0UsdGhpcyxudWxsLHRoaXMucmVzcG9uc2UpOmd9fXJldHVybiBlfV0sdGltZW91dDowLHhzcmZDb29raWVOYW1lOiJYU1JGLVRPS0VOIix4c3JmSGVhZGVyTmFtZToiWC1YU1JGLVRPS0VOIixtYXhDb250ZW50TGVuZ3RoOi0xLG1heEJvZHlMZW5ndGg6LTEsZW52OntGb3JtRGF0YTpTLmNsYXNzZXMuRm9ybURhdGEsQmxvYjpTLmNsYXNzZXMuQmxvYn0sdmFsaWRhdGVTdGF0dXM6ZnVuY3Rpb24oZSl7cmV0dXJuIGU+PTIwMCYmZTwzMDB9LGhlYWRlcnM6e2NvbW1vbjp7QWNjZXB0OiJhcHBsaWNhdGlvbi9qc29uLCB0ZXh0L3BsYWluLCAqLyoiLCJDb250ZW50LVR5cGUiOnZvaWQgMH19fTtzLmZvckVhY2goWyJkZWxldGUiLCJnZXQiLCJoZWFkIiwicG9zdCIsInB1dCIsInBhdGNoIl0sQT0+e0JlLmhlYWRlcnNbQV09e319KTt2YXIgXz1CZTt2YXIgQm49cy50b09iamVjdFNldChbImFnZSIsImF1dGhvcml6YXRpb24iLCJjb250ZW50LWxlbmd0aCIsImNvbnRlbnQtdHlwZSIsImV0YWciLCJleHBpcmVzIiwiZnJvbSIsImhvc3QiLCJpZi1tb2RpZmllZC1zaW5jZSIsImlmLXVubW9kaWZpZWQtc2luY2UiLCJsYXN0LW1vZGlmaWVkIiwibG9jYXRpb24iLCJtYXgtZm9yd2FyZHMiLCJwcm94eS1hdXRob3JpemF0aW9uIiwicmVmZXJlciIsInJldHJ5LWFmdGVyIiwidXNlci1hZ2VudCJdKSxCdD1BPT57bGV0IGU9e30sdCxyLG47cmV0dXJuIEEmJkEuc3BsaXQoYApgKS5mb3JFYWNoKGZ1bmN0aW9uKGkpe249aS5pbmRleE9mKCI6IiksdD1pLnN1YnN0cmluZygwLG4pLnRyaW0oKS50b0xvd2VyQ2FzZSgpLHI9aS5zdWJzdHJpbmcobisxKS50cmltKCksISghdHx8ZVt0XSYmQm5bdF0pJiYodD09PSJzZXQtY29va2llIj9lW3RdP2VbdF0ucHVzaChyKTplW3RdPVtyXTplW3RdPWVbdF0/ZVt0XSsiLCAiK3I6cil9KSxlfTt2YXIgdXQ9U3ltYm9sKCJpbnRlcm5hbHMiKTtmdW5jdGlvbiBzQShBKXtyZXR1cm4gQSYmU3RyaW5nKEEpLnRyaW0oKS50b0xvd2VyQ2FzZSgpfWZ1bmN0aW9uIEZBKEEpe3JldHVybiBBPT09ITF8fEE9PW51bGw/QTpzLmlzQXJyYXkoQSk/QS5tYXAoRkEpOlN0cmluZyhBKX1mdW5jdGlvbiB1bihBKXtsZXQgZT1PYmplY3QuY3JlYXRlKG51bGwpLHQ9LyhbXlxzLDs9XSspXHMqKD86PVxzKihbXiw7XSspKT8vZyxyO2Zvcig7cj10LmV4ZWMoQSk7KWVbclsxXV09clsyXTtyZXR1cm4gZX12YXIgZm49QT0+L15bLV9hLXpBLVowLTleYHx+LCEjJCUmJyorLl0rJC8udGVzdChBLnRyaW0oKSk7ZnVuY3Rpb24gdWUoQSxlLHQscixuKXtpZihzLmlzRnVuY3Rpb24ocikpcmV0dXJuIHIuY2FsbCh0aGlzLGUsdCk7aWYobiYmKGU9dCksISFzLmlzU3RyaW5nKGUpKXtpZihzLmlzU3RyaW5nKHIpKXJldHVybiBlLmluZGV4T2YocikhPT0tMTtpZihzLmlzUmVnRXhwKHIpKXJldHVybiByLnRlc3QoZSl9fWZ1bmN0aW9uIEVuKEEpe3JldHVybiBBLnRyaW0oKS50b0xvd2VyQ2FzZSgpLnJlcGxhY2UoLyhbYS16XGRdKShcdyopL2csKGUsdCxyKT0+dC50b1VwcGVyQ2FzZSgpK3IpfWZ1bmN0aW9uIFFuKEEsZSl7bGV0IHQ9cy50b0NhbWVsQ2FzZSgiICIrZSk7WyJnZXQiLCJzZXQiLCJoYXMiXS5mb3JFYWNoKHI9PntPYmplY3QuZGVmaW5lUHJvcGVydHkoQSxyK3Qse3ZhbHVlOmZ1bmN0aW9uKG4sbyxpKXtyZXR1cm4gdGhpc1tyXS5jYWxsKHRoaXMsZSxuLG8saSl9LGNvbmZpZ3VyYWJsZTohMH0pfSl9dmFyIHo9Y2xhc3N7Y29uc3RydWN0b3IoZSl7ZSYmdGhpcy5zZXQoZSl9c2V0KGUsdCxyKXtsZXQgbj10aGlzO2Z1bmN0aW9uIG8oZyxDLGMpe2xldCBhPXNBKEMpO2lmKCFhKXRocm93IG5ldyBFcnJvcigiaGVhZGVyIG5hbWUgbXVzdCBiZSBhIG5vbi1lbXB0eSBzdHJpbmciKTtsZXQgST1zLmZpbmRLZXkobixhKTsoIUl8fG5bSV09PT12b2lkIDB8fGM9PT0hMHx8Yz09PXZvaWQgMCYmbltJXSE9PSExKSYmKG5bSXx8Q109RkEoZykpfWxldCBpPShnLEMpPT5zLmZvckVhY2goZywoYyxhKT0+byhjLGEsQykpO2lmKHMuaXNQbGFpbk9iamVjdChlKXx8ZSBpbnN0YW5jZW9mIHRoaXMuY29uc3RydWN0b3IpaShlLHQpO2Vsc2UgaWYocy5pc1N0cmluZyhlKSYmKGU9ZS50cmltKCkpJiYhZm4oZSkpaShCdChlKSx0KTtlbHNlIGlmKHMuaXNIZWFkZXJzKGUpKWZvcihsZXRbZyxDXW9mIGUuZW50cmllcygpKW8oQyxnLHIpO2Vsc2UgZSE9bnVsbCYmbyh0LGUscik7cmV0dXJuIHRoaXN9Z2V0KGUsdCl7aWYoZT1zQShlKSxlKXtsZXQgcj1zLmZpbmRLZXkodGhpcyxlKTtpZihyKXtsZXQgbj10aGlzW3JdO2lmKCF0KXJldHVybiBuO2lmKHQ9PT0hMClyZXR1cm4gdW4obik7aWYocy5pc0Z1bmN0aW9uKHQpKXJldHVybiB0LmNhbGwodGhpcyxuLHIpO2lmKHMuaXNSZWdFeHAodCkpcmV0dXJuIHQuZXhlYyhuKTt0aHJvdyBuZXcgVHlwZUVycm9yKCJwYXJzZXIgbXVzdCBiZSBib29sZWFufHJlZ2V4cHxmdW5jdGlvbiIpfX19aGFzKGUsdCl7aWYoZT1zQShlKSxlKXtsZXQgcj1zLmZpbmRLZXkodGhpcyxlKTtyZXR1cm4hIShyJiZ0aGlzW3JdIT09dm9pZCAwJiYoIXR8fHVlKHRoaXMsdGhpc1tyXSxyLHQpKSl9cmV0dXJuITF9ZGVsZXRlKGUsdCl7bGV0IHI9dGhpcyxuPSExO2Z1bmN0aW9uIG8oaSl7aWYoaT1zQShpKSxpKXtsZXQgZz1zLmZpbmRLZXkocixpKTtnJiYoIXR8fHVlKHIscltnXSxnLHQpKSYmKGRlbGV0ZSByW2ddLG49ITApfX1yZXR1cm4gcy5pc0FycmF5KGUpP2UuZm9yRWFjaChvKTpvKGUpLG59Y2xlYXIoZSl7bGV0IHQ9T2JqZWN0LmtleXModGhpcykscj10Lmxlbmd0aCxuPSExO2Zvcig7ci0tOyl7bGV0IG89dFtyXTsoIWV8fHVlKHRoaXMsdGhpc1tvXSxvLGUsITApKSYmKGRlbGV0ZSB0aGlzW29dLG49ITApfXJldHVybiBufW5vcm1hbGl6ZShlKXtsZXQgdD10aGlzLHI9e307cmV0dXJuIHMuZm9yRWFjaCh0aGlzLChuLG8pPT57bGV0IGk9cy5maW5kS2V5KHIsbyk7aWYoaSl7dFtpXT1GQShuKSxkZWxldGUgdFtvXTtyZXR1cm59bGV0IGc9ZT9FbihvKTpTdHJpbmcobykudHJpbSgpO2chPT1vJiZkZWxldGUgdFtvXSx0W2ddPUZBKG4pLHJbZ109ITB9KSx0aGlzfWNvbmNhdCguLi5lKXtyZXR1cm4gdGhpcy5jb25zdHJ1Y3Rvci5jb25jYXQodGhpcywuLi5lKX10b0pTT04oZSl7bGV0IHQ9T2JqZWN0LmNyZWF0ZShudWxsKTtyZXR1cm4gcy5mb3JFYWNoKHRoaXMsKHIsbik9PntyIT1udWxsJiZyIT09ITEmJih0W25dPWUmJnMuaXNBcnJheShyKT9yLmpvaW4oIiwgIik6cil9KSx0fVtTeW1ib2wuaXRlcmF0b3JdKCl7cmV0dXJuIE9iamVjdC5lbnRyaWVzKHRoaXMudG9KU09OKCkpW1N5bWJvbC5pdGVyYXRvcl0oKX10b1N0cmluZygpe3JldHVybiBPYmplY3QuZW50cmllcyh0aGlzLnRvSlNPTigpKS5tYXAoKFtlLHRdKT0+ZSsiOiAiK3QpLmpvaW4oYApgKX1nZXRbU3ltYm9sLnRvU3RyaW5nVGFnXSgpe3JldHVybiJBeGlvc0hlYWRlcnMifXN0YXRpYyBmcm9tKGUpe3JldHVybiBlIGluc3RhbmNlb2YgdGhpcz9lOm5ldyB0aGlzKGUpfXN0YXRpYyBjb25jYXQoZSwuLi50KXtsZXQgcj1uZXcgdGhpcyhlKTtyZXR1cm4gdC5mb3JFYWNoKG49PnIuc2V0KG4pKSxyfXN0YXRpYyBhY2Nlc3NvcihlKXtsZXQgcj0odGhpc1t1dF09dGhpc1t1dF09e2FjY2Vzc29yczp7fX0pLmFjY2Vzc29ycyxuPXRoaXMucHJvdG90eXBlO2Z1bmN0aW9uIG8oaSl7bGV0IGc9c0EoaSk7cltnXXx8KFFuKG4saSkscltnXT0hMCl9cmV0dXJuIHMuaXNBcnJheShlKT9lLmZvckVhY2gobyk6byhlKSx0aGlzfX07ei5hY2Nlc3NvcihbIkNvbnRlbnQtVHlwZSIsIkNvbnRlbnQtTGVuZ3RoIiwiQWNjZXB0IiwiQWNjZXB0LUVuY29kaW5nIiwiVXNlci1BZ2VudCIsIkF1dGhvcml6YXRpb24iXSk7cy5yZWR1Y2VEZXNjcmlwdG9ycyh6LnByb3RvdHlwZSwoe3ZhbHVlOkF9LGUpPT57bGV0IHQ9ZVswXS50b1VwcGVyQ2FzZSgpK2Uuc2xpY2UoMSk7cmV0dXJue2dldDooKT0+QSxzZXQocil7dGhpc1t0XT1yfX19KTtzLmZyZWV6ZU1ldGhvZHMoeik7dmFyIHc9ejtmdW5jdGlvbiBhQShBLGUpe2xldCB0PXRoaXN8fF8scj1lfHx0LG49dy5mcm9tKHIuaGVhZGVycyksbz1yLmRhdGE7cmV0dXJuIHMuZm9yRWFjaChBLGZ1bmN0aW9uKGcpe289Zy5jYWxsKHQsbyxuLm5vcm1hbGl6ZSgpLGU/ZS5zdGF0dXM6dm9pZCAwKX0pLG4ubm9ybWFsaXplKCksb31mdW5jdGlvbiBJQShBKXtyZXR1cm4hIShBJiZBLl9fQ0FOQ0VMX18pfWZ1bmN0aW9uIGZ0KEEsZSx0KXtRLmNhbGwodGhpcyxBPz8iY2FuY2VsZWQiLFEuRVJSX0NBTkNFTEVELGUsdCksdGhpcy5uYW1lPSJDYW5jZWxlZEVycm9yIn1zLmluaGVyaXRzKGZ0LFEse19fQ0FOQ0VMX186ITB9KTt2YXIgRz1mdDtmdW5jdGlvbiBnQShBLGUsdCl7bGV0IHI9dC5jb25maWcudmFsaWRhdGVTdGF0dXM7IXQuc3RhdHVzfHwhcnx8cih0LnN0YXR1cyk/QSh0KTplKG5ldyBRKCJSZXF1ZXN0IGZhaWxlZCB3aXRoIHN0YXR1cyBjb2RlICIrdC5zdGF0dXMsW1EuRVJSX0JBRF9SRVFVRVNULFEuRVJSX0JBRF9SRVNQT05TRV1bTWF0aC5mbG9vcih0LnN0YXR1cy8xMDApLTRdLHQuY29uZmlnLHQucmVxdWVzdCx0KSl9ZnVuY3Rpb24gZmUoQSl7bGV0IGU9L14oWy0rXHddezEsMjV9KSg6P1wvXC98OikvLmV4ZWMoQSk7cmV0dXJuIGUmJmVbMV18fCIifWZ1bmN0aW9uIHBuKEEsZSl7QT1BfHwxMDtsZXQgdD1uZXcgQXJyYXkoQSkscj1uZXcgQXJyYXkoQSksbj0wLG89MCxpO3JldHVybiBlPWUhPT12b2lkIDA/ZToxZTMsZnVuY3Rpb24oQyl7bGV0IGM9RGF0ZS5ub3coKSxhPXJbb107aXx8KGk9YyksdFtuXT1DLHJbbl09YztsZXQgST1vLGY9MDtmb3IoO0khPT1uOylmKz10W0krK10sST1JJUE7aWYobj0obisxKSVBLG49PT1vJiYobz0obysxKSVBKSxjLWk8ZSlyZXR1cm47bGV0IGw9YSYmYy1hO3JldHVybiBsP01hdGgucm91bmQoZioxZTMvbCk6dm9pZCAwfX12YXIgRXQ9cG47ZnVuY3Rpb24gZG4oQSxlKXtsZXQgdD0wLHI9MWUzL2UsbixvLGk9KGMsYT1EYXRlLm5vdygpKT0+e3Q9YSxuPW51bGwsbyYmKGNsZWFyVGltZW91dChvKSxvPW51bGwpLEEuYXBwbHkobnVsbCxjKX07cmV0dXJuWyguLi5jKT0+e2xldCBhPURhdGUubm93KCksST1hLXQ7ST49cj9pKGMsYSk6KG49YyxvfHwobz1zZXRUaW1lb3V0KCgpPT57bz1udWxsLGkobil9LHItSSkpKX0sKCk9Pm4mJmkobildfXZhciBRdD1kbjt2YXIgVj0oQSxlLHQ9Myk9PntsZXQgcj0wLG49RXQoNTAsMjUwKTtyZXR1cm4gUXQobz0+e2xldCBpPW8ubG9hZGVkLGc9by5sZW5ndGhDb21wdXRhYmxlP28udG90YWw6dm9pZCAwLEM9aS1yLGM9bihDKSxhPWk8PWc7cj1pO2xldCBJPXtsb2FkZWQ6aSx0b3RhbDpnLHByb2dyZXNzOmc/aS9nOnZvaWQgMCxieXRlczpDLHJhdGU6Y3x8dm9pZCAwLGVzdGltYXRlZDpjJiZnJiZhPyhnLWkpL2M6dm9pZCAwLGV2ZW50Om8sbGVuZ3RoQ29tcHV0YWJsZTpnIT1udWxsLFtlPyJkb3dubG9hZCI6InVwbG9hZCJdOiEwfTtBKEkpfSx0KX0sRWU9KEEsZSk9PntsZXQgdD1BIT1udWxsO3JldHVybltyPT5lWzBdKHtsZW5ndGhDb21wdXRhYmxlOnQsdG90YWw6QSxsb2FkZWQ6cn0pLGVbMV1dfSxRZT1BPT4oLi4uZSk9PnMuYXNhcCgoKT0+QSguLi5lKSk7dmFyIHB0PVMuaGFzU3RhbmRhcmRCcm93c2VyRW52P2Z1bmN0aW9uKCl7bGV0IGU9Lyhtc2llfHRyaWRlbnQpL2kudGVzdChuYXZpZ2F0b3IudXNlckFnZW50KSx0PWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImEiKSxyO2Z1bmN0aW9uIG4obyl7bGV0IGk9bztyZXR1cm4gZSYmKHQuc2V0QXR0cmlidXRlKCJocmVmIixpKSxpPXQuaHJlZiksdC5zZXRBdHRyaWJ1dGUoImhyZWYiLGkpLHtocmVmOnQuaHJlZixwcm90b2NvbDp0LnByb3RvY29sP3QucHJvdG9jb2wucmVwbGFjZSgvOiQvLCIiKToiIixob3N0OnQuaG9zdCxzZWFyY2g6dC5zZWFyY2g/dC5zZWFyY2gucmVwbGFjZSgvXlw/LywiIik6IiIsaGFzaDp0Lmhhc2g/dC5oYXNoLnJlcGxhY2UoL14jLywiIik6IiIsaG9zdG5hbWU6dC5ob3N0bmFtZSxwb3J0OnQucG9ydCxwYXRobmFtZTp0LnBhdGhuYW1lLmNoYXJBdCgwKT09PSIvIj90LnBhdGhuYW1lOiIvIit0LnBhdGhuYW1lfX1yZXR1cm4gcj1uKHdpbmRvdy5sb2NhdGlvbi5ocmVmKSxmdW5jdGlvbihpKXtsZXQgZz1zLmlzU3RyaW5nKGkpP24oaSk6aTtyZXR1cm4gZy5wcm90b2NvbD09PXIucHJvdG9jb2wmJmcuaG9zdD09PXIuaG9zdH19KCk6ZnVuY3Rpb24oKXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4hMH19KCk7dmFyIGR0PVMuaGFzU3RhbmRhcmRCcm93c2VyRW52P3t3cml0ZShBLGUsdCxyLG4sbyl7bGV0IGk9W0ErIj0iK2VuY29kZVVSSUNvbXBvbmVudChlKV07cy5pc051bWJlcih0KSYmaS5wdXNoKCJleHBpcmVzPSIrbmV3IERhdGUodCkudG9HTVRTdHJpbmcoKSkscy5pc1N0cmluZyhyKSYmaS5wdXNoKCJwYXRoPSIrcikscy5pc1N0cmluZyhuKSYmaS5wdXNoKCJkb21haW49IituKSxvPT09ITAmJmkucHVzaCgic2VjdXJlIiksZG9jdW1lbnQuY29va2llPWkuam9pbigiOyAiKX0scmVhZChBKXtsZXQgZT1kb2N1bWVudC5jb29raWUubWF0Y2gobmV3IFJlZ0V4cCgiKF58O1xccyopKCIrQSsiKT0oW147XSopIikpO3JldHVybiBlP2RlY29kZVVSSUNvbXBvbmVudChlWzNdKTpudWxsfSxyZW1vdmUoQSl7dGhpcy53cml0ZShBLCIiLERhdGUubm93KCktODY0ZTUpfX06e3dyaXRlKCl7fSxyZWFkKCl7cmV0dXJuIG51bGx9LHJlbW92ZSgpe319O2Z1bmN0aW9uIHBlKEEpe3JldHVybi9eKFthLXpdW2EtelxkK1wtLl0qOik/XC9cLy9pLnRlc3QoQSl9ZnVuY3Rpb24gZGUoQSxlKXtyZXR1cm4gZT9BLnJlcGxhY2UoL1wvP1wvJC8sIiIpKyIvIitlLnJlcGxhY2UoL15cLysvLCIiKTpBfWZ1bmN0aW9uIGxBKEEsZSl7cmV0dXJuIEEmJiFwZShlKT9kZShBLGUpOmV9dmFyIG10PUE9PkEgaW5zdGFuY2VvZiB3P3suLi5BfTpBO2Z1bmN0aW9uIFAoQSxlKXtlPWV8fHt9O2xldCB0PXt9O2Z1bmN0aW9uIHIoYyxhLEkpe3JldHVybiBzLmlzUGxhaW5PYmplY3QoYykmJnMuaXNQbGFpbk9iamVjdChhKT9zLm1lcmdlLmNhbGwoe2Nhc2VsZXNzOkl9LGMsYSk6cy5pc1BsYWluT2JqZWN0KGEpP3MubWVyZ2Uoe30sYSk6cy5pc0FycmF5KGEpP2Euc2xpY2UoKTphfWZ1bmN0aW9uIG4oYyxhLEkpe2lmKHMuaXNVbmRlZmluZWQoYSkpe2lmKCFzLmlzVW5kZWZpbmVkKGMpKXJldHVybiByKHZvaWQgMCxjLEkpfWVsc2UgcmV0dXJuIHIoYyxhLEkpfWZ1bmN0aW9uIG8oYyxhKXtpZighcy5pc1VuZGVmaW5lZChhKSlyZXR1cm4gcih2b2lkIDAsYSl9ZnVuY3Rpb24gaShjLGEpe2lmKHMuaXNVbmRlZmluZWQoYSkpe2lmKCFzLmlzVW5kZWZpbmVkKGMpKXJldHVybiByKHZvaWQgMCxjKX1lbHNlIHJldHVybiByKHZvaWQgMCxhKX1mdW5jdGlvbiBnKGMsYSxJKXtpZihJIGluIGUpcmV0dXJuIHIoYyxhKTtpZihJIGluIEEpcmV0dXJuIHIodm9pZCAwLGMpfWxldCBDPXt1cmw6byxtZXRob2Q6byxkYXRhOm8sYmFzZVVSTDppLHRyYW5zZm9ybVJlcXVlc3Q6aSx0cmFuc2Zvcm1SZXNwb25zZTppLHBhcmFtc1NlcmlhbGl6ZXI6aSx0aW1lb3V0OmksdGltZW91dE1lc3NhZ2U6aSx3aXRoQ3JlZGVudGlhbHM6aSx3aXRoWFNSRlRva2VuOmksYWRhcHRlcjppLHJlc3BvbnNlVHlwZTppLHhzcmZDb29raWVOYW1lOmkseHNyZkhlYWRlck5hbWU6aSxvblVwbG9hZFByb2dyZXNzOmksb25Eb3dubG9hZFByb2dyZXNzOmksZGVjb21wcmVzczppLG1heENvbnRlbnRMZW5ndGg6aSxtYXhCb2R5TGVuZ3RoOmksYmVmb3JlUmVkaXJlY3Q6aSx0cmFuc3BvcnQ6aSxodHRwQWdlbnQ6aSxodHRwc0FnZW50OmksY2FuY2VsVG9rZW46aSxzb2NrZXRQYXRoOmkscmVzcG9uc2VFbmNvZGluZzppLHZhbGlkYXRlU3RhdHVzOmcsaGVhZGVyczooYyxhKT0+bihtdChjKSxtdChhKSwhMCl9O3JldHVybiBzLmZvckVhY2goT2JqZWN0LmtleXMoT2JqZWN0LmFzc2lnbih7fSxBLGUpKSxmdW5jdGlvbihhKXtsZXQgST1DW2FdfHxuLGY9SShBW2FdLGVbYV0sYSk7cy5pc1VuZGVmaW5lZChmKSYmSSE9PWd8fCh0W2FdPWYpfSksdH12YXIgVUE9QT0+e2xldCBlPVAoe30sQSkse2RhdGE6dCx3aXRoWFNSRlRva2VuOnIseHNyZkhlYWRlck5hbWU6bix4c3JmQ29va2llTmFtZTpvLGhlYWRlcnM6aSxhdXRoOmd9PWU7ZS5oZWFkZXJzPWk9dy5mcm9tKGkpLGUudXJsPWlBKGxBKGUuYmFzZVVSTCxlLnVybCksQS5wYXJhbXMsQS5wYXJhbXNTZXJpYWxpemVyKSxnJiZpLnNldCgiQXV0aG9yaXphdGlvbiIsIkJhc2ljICIrYnRvYSgoZy51c2VybmFtZXx8IiIpKyI6IisoZy5wYXNzd29yZD91bmVzY2FwZShlbmNvZGVVUklDb21wb25lbnQoZy5wYXNzd29yZCkpOiIiKSkpO2xldCBDO2lmKHMuaXNGb3JtRGF0YSh0KSl7aWYoUy5oYXNTdGFuZGFyZEJyb3dzZXJFbnZ8fFMuaGFzU3RhbmRhcmRCcm93c2VyV2ViV29ya2VyRW52KWkuc2V0Q29udGVudFR5cGUodm9pZCAwKTtlbHNlIGlmKChDPWkuZ2V0Q29udGVudFR5cGUoKSkhPT0hMSl7bGV0W2MsLi4uYV09Qz9DLnNwbGl0KCI7IikubWFwKEk9PkkudHJpbSgpKS5maWx0ZXIoQm9vbGVhbik6W107aS5zZXRDb250ZW50VHlwZShbY3x8Im11bHRpcGFydC9mb3JtLWRhdGEiLC4uLmFdLmpvaW4oIjsgIikpfX1pZihTLmhhc1N0YW5kYXJkQnJvd3NlckVudiYmKHImJnMuaXNGdW5jdGlvbihyKSYmKHI9cihlKSkscnx8ciE9PSExJiZwdChlLnVybCkpKXtsZXQgYz1uJiZvJiZkdC5yZWFkKG8pO2MmJmkuc2V0KG4sYyl9cmV0dXJuIGV9O3ZhciBtbj10eXBlb2YgWE1MSHR0cFJlcXVlc3Q8InUiLHl0PW1uJiZmdW5jdGlvbihBKXtyZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24odCxyKXtsZXQgbj1VQShBKSxvPW4uZGF0YSxpPXcuZnJvbShuLmhlYWRlcnMpLm5vcm1hbGl6ZSgpLHtyZXNwb25zZVR5cGU6ZyxvblVwbG9hZFByb2dyZXNzOkMsb25Eb3dubG9hZFByb2dyZXNzOmN9PW4sYSxJLGYsbCx1O2Z1bmN0aW9uIEUoKXtsJiZsKCksdSYmdSgpLG4uY2FuY2VsVG9rZW4mJm4uY2FuY2VsVG9rZW4udW5zdWJzY3JpYmUoYSksbi5zaWduYWwmJm4uc2lnbmFsLnJlbW92ZUV2ZW50TGlzdGVuZXIoImFib3J0IixhKX1sZXQgQj1uZXcgWE1MSHR0cFJlcXVlc3Q7Qi5vcGVuKG4ubWV0aG9kLnRvVXBwZXJDYXNlKCksbi51cmwsITApLEIudGltZW91dD1uLnRpbWVvdXQ7ZnVuY3Rpb24gbSgpe2lmKCFCKXJldHVybjtsZXQgcD13LmZyb20oImdldEFsbFJlc3BvbnNlSGVhZGVycyJpbiBCJiZCLmdldEFsbFJlc3BvbnNlSGVhZGVycygpKSxxPXtkYXRhOiFnfHxnPT09InRleHQifHxnPT09Impzb24iP0IucmVzcG9uc2VUZXh0OkIucmVzcG9uc2Usc3RhdHVzOkIuc3RhdHVzLHN0YXR1c1RleHQ6Qi5zdGF0dXNUZXh0LGhlYWRlcnM6cCxjb25maWc6QSxyZXF1ZXN0OkJ9O2dBKGZ1bmN0aW9uKEwpe3QoTCksRSgpfSxmdW5jdGlvbihMKXtyKEwpLEUoKX0scSksQj1udWxsfSJvbmxvYWRlbmQiaW4gQj9CLm9ubG9hZGVuZD1tOkIub25yZWFkeXN0YXRlY2hhbmdlPWZ1bmN0aW9uKCl7IUJ8fEIucmVhZHlTdGF0ZSE9PTR8fEIuc3RhdHVzPT09MCYmIShCLnJlc3BvbnNlVVJMJiZCLnJlc3BvbnNlVVJMLmluZGV4T2YoImZpbGU6Iik9PT0wKXx8c2V0VGltZW91dChtKX0sQi5vbmFib3J0PWZ1bmN0aW9uKCl7QiYmKHIobmV3IFEoIlJlcXVlc3QgYWJvcnRlZCIsUS5FQ09OTkFCT1JURUQsQSxCKSksQj1udWxsKX0sQi5vbmVycm9yPWZ1bmN0aW9uKCl7cihuZXcgUSgiTmV0d29yayBFcnJvciIsUS5FUlJfTkVUV09SSyxBLEIpKSxCPW51bGx9LEIub250aW1lb3V0PWZ1bmN0aW9uKCl7bGV0IE49bi50aW1lb3V0PyJ0aW1lb3V0IG9mICIrbi50aW1lb3V0KyJtcyBleGNlZWRlZCI6InRpbWVvdXQgZXhjZWVkZWQiLHE9bi50cmFuc2l0aW9uYWx8fFJBO24udGltZW91dEVycm9yTWVzc2FnZSYmKE49bi50aW1lb3V0RXJyb3JNZXNzYWdlKSxyKG5ldyBRKE4scS5jbGFyaWZ5VGltZW91dEVycm9yP1EuRVRJTUVET1VUOlEuRUNPTk5BQk9SVEVELEEsQikpLEI9bnVsbH0sbz09PXZvaWQgMCYmaS5zZXRDb250ZW50VHlwZShudWxsKSwic2V0UmVxdWVzdEhlYWRlciJpbiBCJiZzLmZvckVhY2goaS50b0pTT04oKSxmdW5jdGlvbihOLHEpe0Iuc2V0UmVxdWVzdEhlYWRlcihxLE4pfSkscy5pc1VuZGVmaW5lZChuLndpdGhDcmVkZW50aWFscyl8fChCLndpdGhDcmVkZW50aWFscz0hIW4ud2l0aENyZWRlbnRpYWxzKSxnJiZnIT09Impzb24iJiYoQi5yZXNwb25zZVR5cGU9bi5yZXNwb25zZVR5cGUpLGMmJihbZix1XT1WKGMsITApLEIuYWRkRXZlbnRMaXN0ZW5lcigicHJvZ3Jlc3MiLGYpKSxDJiZCLnVwbG9hZCYmKFtJLGxdPVYoQyksQi51cGxvYWQuYWRkRXZlbnRMaXN0ZW5lcigicHJvZ3Jlc3MiLEkpLEIudXBsb2FkLmFkZEV2ZW50TGlzdGVuZXIoImxvYWRlbmQiLGwpKSwobi5jYW5jZWxUb2tlbnx8bi5zaWduYWwpJiYoYT1wPT57QiYmKHIoIXB8fHAudHlwZT9uZXcgRyhudWxsLEEsQik6cCksQi5hYm9ydCgpLEI9bnVsbCl9LG4uY2FuY2VsVG9rZW4mJm4uY2FuY2VsVG9rZW4uc3Vic2NyaWJlKGEpLG4uc2lnbmFsJiYobi5zaWduYWwuYWJvcnRlZD9hKCk6bi5zaWduYWwuYWRkRXZlbnRMaXN0ZW5lcigiYWJvcnQiLGEpKSk7bGV0IGI9ZmUobi51cmwpO2lmKGImJlMucHJvdG9jb2xzLmluZGV4T2YoYik9PT0tMSl7cihuZXcgUSgiVW5zdXBwb3J0ZWQgcHJvdG9jb2wgIitiKyI6IixRLkVSUl9CQURfUkVRVUVTVCxBKSk7cmV0dXJufUIuc2VuZChvfHxudWxsKX0pfTt2YXIgeW49KEEsZSk9PntsZXQgdD1uZXcgQWJvcnRDb250cm9sbGVyLHIsbj1mdW5jdGlvbihDKXtpZighcil7cj0hMCxpKCk7bGV0IGM9QyBpbnN0YW5jZW9mIEVycm9yP0M6dGhpcy5yZWFzb247dC5hYm9ydChjIGluc3RhbmNlb2YgUT9jOm5ldyBHKGMgaW5zdGFuY2VvZiBFcnJvcj9jLm1lc3NhZ2U6YykpfX0sbz1lJiZzZXRUaW1lb3V0KCgpPT57bihuZXcgUShgdGltZW91dCAke2V9IG9mIG1zIGV4Y2VlZGVkYCxRLkVUSU1FRE9VVCkpfSxlKSxpPSgpPT57QSYmKG8mJmNsZWFyVGltZW91dChvKSxvPW51bGwsQS5mb3JFYWNoKEM9PntDJiYoQy5yZW1vdmVFdmVudExpc3RlbmVyP0MucmVtb3ZlRXZlbnRMaXN0ZW5lcigiYWJvcnQiLG4pOkMudW5zdWJzY3JpYmUobikpfSksQT1udWxsKX07QS5mb3JFYWNoKEM9PkMmJkMuYWRkRXZlbnRMaXN0ZW5lciYmQy5hZGRFdmVudExpc3RlbmVyKCJhYm9ydCIsbikpO2xldHtzaWduYWw6Z309dDtyZXR1cm4gZy51bnN1YnNjcmliZT1pLFtnLCgpPT57byYmY2xlYXJUaW1lb3V0KG8pLG89bnVsbH1dfSxodD15bjt2YXIgaG49ZnVuY3Rpb24qKEEsZSl7bGV0IHQ9QS5ieXRlTGVuZ3RoO2lmKCFlfHx0PGUpe3lpZWxkIEE7cmV0dXJufWxldCByPTAsbjtmb3IoO3I8dDspbj1yK2UseWllbGQgQS5zbGljZShyLG4pLHI9bn0sd249YXN5bmMgZnVuY3Rpb24qKEEsZSx0KXtmb3IgYXdhaXQobGV0IHIgb2YgQSl5aWVsZCpobihBcnJheUJ1ZmZlci5pc1ZpZXcocik/cjphd2FpdCB0KFN0cmluZyhyKSksZSl9LG1lPShBLGUsdCxyLG4pPT57bGV0IG89d24oQSxlLG4pLGk9MCxnLEM9Yz0+e2d8fChnPSEwLHImJnIoYykpfTtyZXR1cm4gbmV3IFJlYWRhYmxlU3RyZWFtKHthc3luYyBwdWxsKGMpe3RyeXtsZXR7ZG9uZTphLHZhbHVlOkl9PWF3YWl0IG8ubmV4dCgpO2lmKGEpe0MoKSxjLmNsb3NlKCk7cmV0dXJufWxldCBmPUkuYnl0ZUxlbmd0aDtpZih0KXtsZXQgbD1pKz1mO3QobCl9Yy5lbnF1ZXVlKG5ldyBVaW50OEFycmF5KEkpKX1jYXRjaChhKXt0aHJvdyBDKGEpLGF9fSxjYW5jZWwoYyl7cmV0dXJuIEMoYyksby5yZXR1cm4oKX19LHtoaWdoV2F0ZXJNYXJrOjJ9KX07dmFyIFRBPXR5cGVvZiBmZXRjaD09ImZ1bmN0aW9uIiYmdHlwZW9mIFJlcXVlc3Q9PSJmdW5jdGlvbiImJnR5cGVvZiBSZXNwb25zZT09ImZ1bmN0aW9uIixEdD1UQSYmdHlwZW9mIFJlYWRhYmxlU3RyZWFtPT0iZnVuY3Rpb24iLHllPVRBJiYodHlwZW9mIFRleHRFbmNvZGVyPT0iZnVuY3Rpb24iPyhBPT5lPT5BLmVuY29kZShlKSkobmV3IFRleHRFbmNvZGVyKTphc3luYyBBPT5uZXcgVWludDhBcnJheShhd2FpdCBuZXcgUmVzcG9uc2UoQSkuYXJyYXlCdWZmZXIoKSkpLFN0PShBLC4uLmUpPT57dHJ5e3JldHVybiEhQSguLi5lKX1jYXRjaHtyZXR1cm4hMX19LERuPUR0JiZTdCgoKT0+e2xldCBBPSExLGU9bmV3IFJlcXVlc3QoUy5vcmlnaW4se2JvZHk6bmV3IFJlYWRhYmxlU3RyZWFtLG1ldGhvZDoiUE9TVCIsZ2V0IGR1cGxleCgpe3JldHVybiBBPSEwLCJoYWxmIn19KS5oZWFkZXJzLmhhcygiQ29udGVudC1UeXBlIik7cmV0dXJuIEEmJiFlfSksd3Q9NjQqMTAyNCxoZT1EdCYmU3QoKCk9PnMuaXNSZWFkYWJsZVN0cmVhbShuZXcgUmVzcG9uc2UoIiIpLmJvZHkpKSxOQT17c3RyZWFtOmhlJiYoQT0+QS5ib2R5KX07VEEmJihBPT57WyJ0ZXh0IiwiYXJyYXlCdWZmZXIiLCJibG9iIiwiZm9ybURhdGEiLCJzdHJlYW0iXS5mb3JFYWNoKGU9PnshTkFbZV0mJihOQVtlXT1zLmlzRnVuY3Rpb24oQVtlXSk/dD0+dFtlXSgpOih0LHIpPT57dGhyb3cgbmV3IFEoYFJlc3BvbnNlIHR5cGUgJyR7ZX0nIGlzIG5vdCBzdXBwb3J0ZWRgLFEuRVJSX05PVF9TVVBQT1JULHIpfSl9KX0pKG5ldyBSZXNwb25zZSk7dmFyIFNuPWFzeW5jIEE9PntpZihBPT1udWxsKXJldHVybiAwO2lmKHMuaXNCbG9iKEEpKXJldHVybiBBLnNpemU7aWYocy5pc1NwZWNDb21wbGlhbnRGb3JtKEEpKXJldHVybihhd2FpdCBuZXcgUmVxdWVzdChBKS5hcnJheUJ1ZmZlcigpKS5ieXRlTGVuZ3RoO2lmKHMuaXNBcnJheUJ1ZmZlclZpZXcoQSl8fHMuaXNBcnJheUJ1ZmZlcihBKSlyZXR1cm4gQS5ieXRlTGVuZ3RoO2lmKHMuaXNVUkxTZWFyY2hQYXJhbXMoQSkmJihBPUErIiIpLHMuaXNTdHJpbmcoQSkpcmV0dXJuKGF3YWl0IHllKEEpKS5ieXRlTGVuZ3RofSxibj1hc3luYyhBLGUpPT57bGV0IHQ9cy50b0Zpbml0ZU51bWJlcihBLmdldENvbnRlbnRMZW5ndGgoKSk7cmV0dXJuIHQ/P1NuKGUpfSxidD1UQSYmKGFzeW5jIEE9PntsZXR7dXJsOmUsbWV0aG9kOnQsZGF0YTpyLHNpZ25hbDpuLGNhbmNlbFRva2VuOm8sdGltZW91dDppLG9uRG93bmxvYWRQcm9ncmVzczpnLG9uVXBsb2FkUHJvZ3Jlc3M6QyxyZXNwb25zZVR5cGU6YyxoZWFkZXJzOmEsd2l0aENyZWRlbnRpYWxzOkk9InNhbWUtb3JpZ2luIixmZXRjaE9wdGlvbnM6Zn09VUEoQSk7Yz1jPyhjKyIiKS50b0xvd2VyQ2FzZSgpOiJ0ZXh0IjtsZXRbbCx1XT1ufHxvfHxpP2h0KFtuLG9dLGkpOltdLEUsQixtPSgpPT57IUUmJnNldFRpbWVvdXQoKCk9PntsJiZsLnVuc3Vic2NyaWJlKCl9KSxFPSEwfSxiO3RyeXtpZihDJiZEbiYmdCE9PSJnZXQiJiZ0IT09ImhlYWQiJiYoYj1hd2FpdCBibihhLHIpKSE9PTApe2xldCB4PW5ldyBSZXF1ZXN0KGUse21ldGhvZDoiUE9TVCIsYm9keTpyLGR1cGxleDoiaGFsZiJ9KSxMO2lmKHMuaXNGb3JtRGF0YShyKSYmKEw9eC5oZWFkZXJzLmdldCgiY29udGVudC10eXBlIikpJiZhLnNldENvbnRlbnRUeXBlKEwpLHguYm9keSl7bGV0W1lBLGZBXT1FZShiLFYoUWUoQykpKTtyPW1lKHguYm9keSx3dCxZQSxmQSx5ZSl9fXMuaXNTdHJpbmcoSSl8fChJPUk/ImluY2x1ZGUiOiJvbWl0IiksQj1uZXcgUmVxdWVzdChlLHsuLi5mLHNpZ25hbDpsLG1ldGhvZDp0LnRvVXBwZXJDYXNlKCksaGVhZGVyczphLm5vcm1hbGl6ZSgpLnRvSlNPTigpLGJvZHk6cixkdXBsZXg6ImhhbGYiLGNyZWRlbnRpYWxzOkl9KTtsZXQgcD1hd2FpdCBmZXRjaChCKSxOPWhlJiYoYz09PSJzdHJlYW0ifHxjPT09InJlc3BvbnNlIik7aWYoaGUmJihnfHxOKSl7bGV0IHg9e307WyJzdGF0dXMiLCJzdGF0dXNUZXh0IiwiaGVhZGVycyJdLmZvckVhY2goUGU9Pnt4W1BlXT1wW1BlXX0pO2xldCBMPXMudG9GaW5pdGVOdW1iZXIocC5oZWFkZXJzLmdldCgiY29udGVudC1sZW5ndGgiKSksW1lBLGZBXT1nJiZFZShMLFYoUWUoZyksITApKXx8W107cD1uZXcgUmVzcG9uc2UobWUocC5ib2R5LHd0LFlBLCgpPT57ZkEmJmZBKCksTiYmbSgpfSx5ZSkseCl9Yz1jfHwidGV4dCI7bGV0IHE9YXdhaXQgTkFbcy5maW5kS2V5KE5BLGMpfHwidGV4dCJdKHAsQSk7cmV0dXJuIU4mJm0oKSx1JiZ1KCksYXdhaXQgbmV3IFByb21pc2UoKHgsTCk9PntnQSh4LEwse2RhdGE6cSxoZWFkZXJzOncuZnJvbShwLmhlYWRlcnMpLHN0YXR1czpwLnN0YXR1cyxzdGF0dXNUZXh0OnAuc3RhdHVzVGV4dCxjb25maWc6QSxyZXF1ZXN0OkJ9KX0pfWNhdGNoKHApe3Rocm93IG0oKSxwJiZwLm5hbWU9PT0iVHlwZUVycm9yIiYmL2ZldGNoL2kudGVzdChwLm1lc3NhZ2UpP09iamVjdC5hc3NpZ24obmV3IFEoIk5ldHdvcmsgRXJyb3IiLFEuRVJSX05FVFdPUkssQSxCKSx7Y2F1c2U6cC5jYXVzZXx8cH0pOlEuZnJvbShwLHAmJnAuY29kZSxBLEIpfX0pO3ZhciB3ZT17aHR0cDpTQSx4aHI6eXQsZmV0Y2g6YnR9O3MuZm9yRWFjaCh3ZSwoQSxlKT0+e2lmKEEpe3RyeXtPYmplY3QuZGVmaW5lUHJvcGVydHkoQSwibmFtZSIse3ZhbHVlOmV9KX1jYXRjaHt9T2JqZWN0LmRlZmluZVByb3BlcnR5KEEsImFkYXB0ZXJOYW1lIix7dmFsdWU6ZX0pfX0pO3ZhciBSdD1BPT5gLSAke0F9YCxSbj1BPT5zLmlzRnVuY3Rpb24oQSl8fEE9PT1udWxsfHxBPT09ITEsUEE9e2dldEFkYXB0ZXI6QT0+e0E9cy5pc0FycmF5KEEpP0E6W0FdO2xldHtsZW5ndGg6ZX09QSx0LHIsbj17fTtmb3IobGV0IG89MDtvPGU7bysrKXt0PUFbb107bGV0IGk7aWYocj10LCFSbih0KSYmKHI9d2VbKGk9U3RyaW5nKHQpKS50b0xvd2VyQ2FzZSgpXSxyPT09dm9pZCAwKSl0aHJvdyBuZXcgUShgVW5rbm93biBhZGFwdGVyICcke2l9J2ApO2lmKHIpYnJlYWs7bltpfHwiIyIrb109cn1pZighcil7bGV0IG89T2JqZWN0LmVudHJpZXMobikubWFwKChbZyxDXSk9PmBhZGFwdGVyICR7Z30gYCsoQz09PSExPyJpcyBub3Qgc3VwcG9ydGVkIGJ5IHRoZSBlbnZpcm9ubWVudCI6ImlzIG5vdCBhdmFpbGFibGUgaW4gdGhlIGJ1aWxkIikpLGk9ZT9vLmxlbmd0aD4xP2BzaW5jZSA6CmArby5tYXAoUnQpLmpvaW4oYApgKToiICIrUnQob1swXSk6ImFzIG5vIGFkYXB0ZXIgc3BlY2lmaWVkIjt0aHJvdyBuZXcgUSgiVGhlcmUgaXMgbm8gc3VpdGFibGUgYWRhcHRlciB0byBkaXNwYXRjaCB0aGUgcmVxdWVzdCAiK2ksIkVSUl9OT1RfU1VQUE9SVCIpfXJldHVybiByfSxhZGFwdGVyczp3ZX07ZnVuY3Rpb24gRGUoQSl7aWYoQS5jYW5jZWxUb2tlbiYmQS5jYW5jZWxUb2tlbi50aHJvd0lmUmVxdWVzdGVkKCksQS5zaWduYWwmJkEuc2lnbmFsLmFib3J0ZWQpdGhyb3cgbmV3IEcobnVsbCxBKX1mdW5jdGlvbiB4QShBKXtyZXR1cm4gRGUoQSksQS5oZWFkZXJzPXcuZnJvbShBLmhlYWRlcnMpLEEuZGF0YT1hQS5jYWxsKEEsQS50cmFuc2Zvcm1SZXF1ZXN0KSxbInBvc3QiLCJwdXQiLCJwYXRjaCJdLmluZGV4T2YoQS5tZXRob2QpIT09LTEmJkEuaGVhZGVycy5zZXRDb250ZW50VHlwZSgiYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkIiwhMSksUEEuZ2V0QWRhcHRlcihBLmFkYXB0ZXJ8fF8uYWRhcHRlcikoQSkudGhlbihmdW5jdGlvbihyKXtyZXR1cm4gRGUoQSksci5kYXRhPWFBLmNhbGwoQSxBLnRyYW5zZm9ybVJlc3BvbnNlLHIpLHIuaGVhZGVycz13LmZyb20oci5oZWFkZXJzKSxyfSxmdW5jdGlvbihyKXtyZXR1cm4gSUEocil8fChEZShBKSxyJiZyLnJlc3BvbnNlJiYoci5yZXNwb25zZS5kYXRhPWFBLmNhbGwoQSxBLnRyYW5zZm9ybVJlc3BvbnNlLHIucmVzcG9uc2UpLHIucmVzcG9uc2UuaGVhZGVycz13LmZyb20oci5yZXNwb25zZS5oZWFkZXJzKSkpLFByb21pc2UucmVqZWN0KHIpfSl9dmFyIExBPSIxLjcuNCI7dmFyIFNlPXt9O1sib2JqZWN0IiwiYm9vbGVhbiIsIm51bWJlciIsImZ1bmN0aW9uIiwic3RyaW5nIiwic3ltYm9sIl0uZm9yRWFjaCgoQSxlKT0+e1NlW0FdPWZ1bmN0aW9uKHIpe3JldHVybiB0eXBlb2Ygcj09PUF8fCJhIisoZTwxPyJuICI6IiAiKStBfX0pO3ZhciBrdD17fTtTZS50cmFuc2l0aW9uYWw9ZnVuY3Rpb24oZSx0LHIpe2Z1bmN0aW9uIG4obyxpKXtyZXR1cm4iW0F4aW9zIHYiK0xBKyJdIFRyYW5zaXRpb25hbCBvcHRpb24gJyIrbysiJyIraSsocj8iLiAiK3I6IiIpfXJldHVybihvLGksZyk9PntpZihlPT09ITEpdGhyb3cgbmV3IFEobihpLCIgaGFzIGJlZW4gcmVtb3ZlZCIrKHQ/IiBpbiAiK3Q6IiIpKSxRLkVSUl9ERVBSRUNBVEVEKTtyZXR1cm4gdCYmIWt0W2ldJiYoa3RbaV09ITAsY29uc29sZS53YXJuKG4oaSwiIGhhcyBiZWVuIGRlcHJlY2F0ZWQgc2luY2UgdiIrdCsiIGFuZCB3aWxsIGJlIHJlbW92ZWQgaW4gdGhlIG5lYXIgZnV0dXJlIikpKSxlP2UobyxpLGcpOiEwfX07ZnVuY3Rpb24ga24oQSxlLHQpe2lmKHR5cGVvZiBBIT0ib2JqZWN0Iil0aHJvdyBuZXcgUSgib3B0aW9ucyBtdXN0IGJlIGFuIG9iamVjdCIsUS5FUlJfQkFEX09QVElPTl9WQUxVRSk7bGV0IHI9T2JqZWN0LmtleXMoQSksbj1yLmxlbmd0aDtmb3IoO24tLSA+MDspe2xldCBvPXJbbl0saT1lW29dO2lmKGkpe2xldCBnPUFbb10sQz1nPT09dm9pZCAwfHxpKGcsbyxBKTtpZihDIT09ITApdGhyb3cgbmV3IFEoIm9wdGlvbiAiK28rIiBtdXN0IGJlICIrQyxRLkVSUl9CQURfT1BUSU9OX1ZBTFVFKTtjb250aW51ZX1pZih0IT09ITApdGhyb3cgbmV3IFEoIlVua25vd24gb3B0aW9uICIrbyxRLkVSUl9CQURfT1BUSU9OKX19dmFyIEdBPXthc3NlcnRPcHRpb25zOmtuLHZhbGlkYXRvcnM6U2V9O3ZhciBNPUdBLnZhbGlkYXRvcnMsWj1jbGFzc3tjb25zdHJ1Y3RvcihlKXt0aGlzLmRlZmF1bHRzPWUsdGhpcy5pbnRlcmNlcHRvcnM9e3JlcXVlc3Q6bmV3IGdlLHJlc3BvbnNlOm5ldyBnZX19YXN5bmMgcmVxdWVzdChlLHQpe3RyeXtyZXR1cm4gYXdhaXQgdGhpcy5fcmVxdWVzdChlLHQpfWNhdGNoKHIpe2lmKHIgaW5zdGFuY2VvZiBFcnJvcil7bGV0IG47RXJyb3IuY2FwdHVyZVN0YWNrVHJhY2U/RXJyb3IuY2FwdHVyZVN0YWNrVHJhY2Uobj17fSk6bj1uZXcgRXJyb3I7bGV0IG89bi5zdGFjaz9uLnN0YWNrLnJlcGxhY2UoL14uK1xuLywiIik6IiI7dHJ5e3Iuc3RhY2s/byYmIVN0cmluZyhyLnN0YWNrKS5lbmRzV2l0aChvLnJlcGxhY2UoL14uK1xuLitcbi8sIiIpKSYmKHIuc3RhY2srPWAKYCtvKTpyLnN0YWNrPW99Y2F0Y2h7fX10aHJvdyByfX1fcmVxdWVzdChlLHQpe3R5cGVvZiBlPT0ic3RyaW5nIj8odD10fHx7fSx0LnVybD1lKTp0PWV8fHt9LHQ9UCh0aGlzLmRlZmF1bHRzLHQpO2xldHt0cmFuc2l0aW9uYWw6cixwYXJhbXNTZXJpYWxpemVyOm4saGVhZGVyczpvfT10O3IhPT12b2lkIDAmJkdBLmFzc2VydE9wdGlvbnMocix7c2lsZW50SlNPTlBhcnNpbmc6TS50cmFuc2l0aW9uYWwoTS5ib29sZWFuKSxmb3JjZWRKU09OUGFyc2luZzpNLnRyYW5zaXRpb25hbChNLmJvb2xlYW4pLGNsYXJpZnlUaW1lb3V0RXJyb3I6TS50cmFuc2l0aW9uYWwoTS5ib29sZWFuKX0sITEpLG4hPW51bGwmJihzLmlzRnVuY3Rpb24obik/dC5wYXJhbXNTZXJpYWxpemVyPXtzZXJpYWxpemU6bn06R0EuYXNzZXJ0T3B0aW9ucyhuLHtlbmNvZGU6TS5mdW5jdGlvbixzZXJpYWxpemU6TS5mdW5jdGlvbn0sITApKSx0Lm1ldGhvZD0odC5tZXRob2R8fHRoaXMuZGVmYXVsdHMubWV0aG9kfHwiZ2V0IikudG9Mb3dlckNhc2UoKTtsZXQgaT1vJiZzLm1lcmdlKG8uY29tbW9uLG9bdC5tZXRob2RdKTtvJiZzLmZvckVhY2goWyJkZWxldGUiLCJnZXQiLCJoZWFkIiwicG9zdCIsInB1dCIsInBhdGNoIiwiY29tbW9uIl0sdT0+e2RlbGV0ZSBvW3VdfSksdC5oZWFkZXJzPXcuY29uY2F0KGksbyk7bGV0IGc9W10sQz0hMDt0aGlzLmludGVyY2VwdG9ycy5yZXF1ZXN0LmZvckVhY2goZnVuY3Rpb24oRSl7dHlwZW9mIEUucnVuV2hlbj09ImZ1bmN0aW9uIiYmRS5ydW5XaGVuKHQpPT09ITF8fChDPUMmJkUuc3luY2hyb25vdXMsZy51bnNoaWZ0KEUuZnVsZmlsbGVkLEUucmVqZWN0ZWQpKX0pO2xldCBjPVtdO3RoaXMuaW50ZXJjZXB0b3JzLnJlc3BvbnNlLmZvckVhY2goZnVuY3Rpb24oRSl7Yy5wdXNoKEUuZnVsZmlsbGVkLEUucmVqZWN0ZWQpfSk7bGV0IGEsST0wLGY7aWYoIUMpe2xldCB1PVt4QS5iaW5kKHRoaXMpLHZvaWQgMF07Zm9yKHUudW5zaGlmdC5hcHBseSh1LGcpLHUucHVzaC5hcHBseSh1LGMpLGY9dS5sZW5ndGgsYT1Qcm9taXNlLnJlc29sdmUodCk7STxmOylhPWEudGhlbih1W0krK10sdVtJKytdKTtyZXR1cm4gYX1mPWcubGVuZ3RoO2xldCBsPXQ7Zm9yKEk9MDtJPGY7KXtsZXQgdT1nW0krK10sRT1nW0krK107dHJ5e2w9dShsKX1jYXRjaChCKXtFLmNhbGwodGhpcyxCKTticmVha319dHJ5e2E9eEEuY2FsbCh0aGlzLGwpfWNhdGNoKHUpe3JldHVybiBQcm9taXNlLnJlamVjdCh1KX1mb3IoST0wLGY9Yy5sZW5ndGg7STxmOylhPWEudGhlbihjW0krK10sY1tJKytdKTtyZXR1cm4gYX1nZXRVcmkoZSl7ZT1QKHRoaXMuZGVmYXVsdHMsZSk7bGV0IHQ9bEEoZS5iYXNlVVJMLGUudXJsKTtyZXR1cm4gaUEodCxlLnBhcmFtcyxlLnBhcmFtc1NlcmlhbGl6ZXIpfX07cy5mb3JFYWNoKFsiZGVsZXRlIiwiZ2V0IiwiaGVhZCIsIm9wdGlvbnMiXSxmdW5jdGlvbihlKXtaLnByb3RvdHlwZVtlXT1mdW5jdGlvbih0LHIpe3JldHVybiB0aGlzLnJlcXVlc3QoUChyfHx7fSx7bWV0aG9kOmUsdXJsOnQsZGF0YToocnx8e30pLmRhdGF9KSl9fSk7cy5mb3JFYWNoKFsicG9zdCIsInB1dCIsInBhdGNoIl0sZnVuY3Rpb24oZSl7ZnVuY3Rpb24gdChyKXtyZXR1cm4gZnVuY3Rpb24obyxpLGcpe3JldHVybiB0aGlzLnJlcXVlc3QoUChnfHx7fSx7bWV0aG9kOmUsaGVhZGVyczpyP3siQ29udGVudC1UeXBlIjoibXVsdGlwYXJ0L2Zvcm0tZGF0YSJ9Ont9LHVybDpvLGRhdGE6aX0pKX19Wi5wcm90b3R5cGVbZV09dCgpLFoucHJvdG90eXBlW2UrIkZvcm0iXT10KCEwKX0pO3ZhciBjQT1aO3ZhciBiZT1jbGFzcyBBe2NvbnN0cnVjdG9yKGUpe2lmKHR5cGVvZiBlIT0iZnVuY3Rpb24iKXRocm93IG5ldyBUeXBlRXJyb3IoImV4ZWN1dG9yIG11c3QgYmUgYSBmdW5jdGlvbi4iKTtsZXQgdDt0aGlzLnByb21pc2U9bmV3IFByb21pc2UoZnVuY3Rpb24obyl7dD1vfSk7bGV0IHI9dGhpczt0aGlzLnByb21pc2UudGhlbihuPT57aWYoIXIuX2xpc3RlbmVycylyZXR1cm47bGV0IG89ci5fbGlzdGVuZXJzLmxlbmd0aDtmb3IoO28tLSA+MDspci5fbGlzdGVuZXJzW29dKG4pO3IuX2xpc3RlbmVycz1udWxsfSksdGhpcy5wcm9taXNlLnRoZW49bj0+e2xldCBvLGk9bmV3IFByb21pc2UoZz0+e3Iuc3Vic2NyaWJlKGcpLG89Z30pLnRoZW4obik7cmV0dXJuIGkuY2FuY2VsPWZ1bmN0aW9uKCl7ci51bnN1YnNjcmliZShvKX0saX0sZShmdW5jdGlvbihvLGksZyl7ci5yZWFzb258fChyLnJlYXNvbj1uZXcgRyhvLGksZyksdChyLnJlYXNvbikpfSl9dGhyb3dJZlJlcXVlc3RlZCgpe2lmKHRoaXMucmVhc29uKXRocm93IHRoaXMucmVhc29ufXN1YnNjcmliZShlKXtpZih0aGlzLnJlYXNvbil7ZSh0aGlzLnJlYXNvbik7cmV0dXJufXRoaXMuX2xpc3RlbmVycz90aGlzLl9saXN0ZW5lcnMucHVzaChlKTp0aGlzLl9saXN0ZW5lcnM9W2VdfXVuc3Vic2NyaWJlKGUpe2lmKCF0aGlzLl9saXN0ZW5lcnMpcmV0dXJuO2xldCB0PXRoaXMuX2xpc3RlbmVycy5pbmRleE9mKGUpO3QhPT0tMSYmdGhpcy5fbGlzdGVuZXJzLnNwbGljZSh0LDEpfXN0YXRpYyBzb3VyY2UoKXtsZXQgZTtyZXR1cm57dG9rZW46bmV3IEEoZnVuY3Rpb24obil7ZT1ufSksY2FuY2VsOmV9fX0sRnQ9YmU7ZnVuY3Rpb24gUmUoQSl7cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybiBBLmFwcGx5KG51bGwsdCl9fWZ1bmN0aW9uIGtlKEEpe3JldHVybiBzLmlzT2JqZWN0KEEpJiZBLmlzQXhpb3NFcnJvcj09PSEwfXZhciBGZT17Q29udGludWU6MTAwLFN3aXRjaGluZ1Byb3RvY29sczoxMDEsUHJvY2Vzc2luZzoxMDIsRWFybHlIaW50czoxMDMsT2s6MjAwLENyZWF0ZWQ6MjAxLEFjY2VwdGVkOjIwMixOb25BdXRob3JpdGF0aXZlSW5mb3JtYXRpb246MjAzLE5vQ29udGVudDoyMDQsUmVzZXRDb250ZW50OjIwNSxQYXJ0aWFsQ29udGVudDoyMDYsTXVsdGlTdGF0dXM6MjA3LEFscmVhZHlSZXBvcnRlZDoyMDgsSW1Vc2VkOjIyNixNdWx0aXBsZUNob2ljZXM6MzAwLE1vdmVkUGVybWFuZW50bHk6MzAxLEZvdW5kOjMwMixTZWVPdGhlcjozMDMsTm90TW9kaWZpZWQ6MzA0LFVzZVByb3h5OjMwNSxVbnVzZWQ6MzA2LFRlbXBvcmFyeVJlZGlyZWN0OjMwNyxQZXJtYW5lbnRSZWRpcmVjdDozMDgsQmFkUmVxdWVzdDo0MDAsVW5hdXRob3JpemVkOjQwMSxQYXltZW50UmVxdWlyZWQ6NDAyLEZvcmJpZGRlbjo0MDMsTm90Rm91bmQ6NDA0LE1ldGhvZE5vdEFsbG93ZWQ6NDA1LE5vdEFjY2VwdGFibGU6NDA2LFByb3h5QXV0aGVudGljYXRpb25SZXF1aXJlZDo0MDcsUmVxdWVzdFRpbWVvdXQ6NDA4LENvbmZsaWN0OjQwOSxHb25lOjQxMCxMZW5ndGhSZXF1aXJlZDo0MTEsUHJlY29uZGl0aW9uRmFpbGVkOjQxMixQYXlsb2FkVG9vTGFyZ2U6NDEzLFVyaVRvb0xvbmc6NDE0LFVuc3VwcG9ydGVkTWVkaWFUeXBlOjQxNSxSYW5nZU5vdFNhdGlzZmlhYmxlOjQxNixFeHBlY3RhdGlvbkZhaWxlZDo0MTcsSW1BVGVhcG90OjQxOCxNaXNkaXJlY3RlZFJlcXVlc3Q6NDIxLFVucHJvY2Vzc2FibGVFbnRpdHk6NDIyLExvY2tlZDo0MjMsRmFpbGVkRGVwZW5kZW5jeTo0MjQsVG9vRWFybHk6NDI1LFVwZ3JhZGVSZXF1aXJlZDo0MjYsUHJlY29uZGl0aW9uUmVxdWlyZWQ6NDI4LFRvb01hbnlSZXF1ZXN0czo0MjksUmVxdWVzdEhlYWRlckZpZWxkc1Rvb0xhcmdlOjQzMSxVbmF2YWlsYWJsZUZvckxlZ2FsUmVhc29uczo0NTEsSW50ZXJuYWxTZXJ2ZXJFcnJvcjo1MDAsTm90SW1wbGVtZW50ZWQ6NTAxLEJhZEdhdGV3YXk6NTAyLFNlcnZpY2VVbmF2YWlsYWJsZTo1MDMsR2F0ZXdheVRpbWVvdXQ6NTA0LEh0dHBWZXJzaW9uTm90U3VwcG9ydGVkOjUwNSxWYXJpYW50QWxzb05lZ290aWF0ZXM6NTA2LEluc3VmZmljaWVudFN0b3JhZ2U6NTA3LExvb3BEZXRlY3RlZDo1MDgsTm90RXh0ZW5kZWQ6NTEwLE5ldHdvcmtBdXRoZW50aWNhdGlvblJlcXVpcmVkOjUxMX07T2JqZWN0LmVudHJpZXMoRmUpLmZvckVhY2goKFtBLGVdKT0+e0ZlW2VdPUF9KTt2YXIgVXQ9RmU7ZnVuY3Rpb24gTnQoQSl7bGV0IGU9bmV3IGNBKEEpLHQ9ckEoY0EucHJvdG90eXBlLnJlcXVlc3QsZSk7cmV0dXJuIHMuZXh0ZW5kKHQsY0EucHJvdG90eXBlLGUse2FsbE93bktleXM6ITB9KSxzLmV4dGVuZCh0LGUsbnVsbCx7YWxsT3duS2V5czohMH0pLHQuY3JlYXRlPWZ1bmN0aW9uKG4pe3JldHVybiBOdChQKEEsbikpfSx0fXZhciB5PU50KF8pO3kuQXhpb3M9Y0E7eS5DYW5jZWxlZEVycm9yPUc7eS5DYW5jZWxUb2tlbj1GdDt5LmlzQ2FuY2VsPUlBO3kuVkVSU0lPTj1MQTt5LnRvRm9ybURhdGE9Sjt5LkF4aW9zRXJyb3I9UTt5LkNhbmNlbD15LkNhbmNlbGVkRXJyb3I7eS5hbGw9ZnVuY3Rpb24oZSl7cmV0dXJuIFByb21pc2UuYWxsKGUpfTt5LnNwcmVhZD1SZTt5LmlzQXhpb3NFcnJvcj1rZTt5Lm1lcmdlQ29uZmlnPVA7eS5BeGlvc0hlYWRlcnM9dzt5LmZvcm1Ub0pTT049QT0+a0Eocy5pc0hUTUxGb3JtKEEpP25ldyBGb3JtRGF0YShBKTpBKTt5LmdldEFkYXB0ZXI9UEEuZ2V0QWRhcHRlcjt5Lkh0dHBTdGF0dXNDb2RlPVV0O3kuZGVmYXVsdD15O3ZhciBYPXk7dmFye0F4aW9zOnZhLEF4aW9zRXJyb3I6amEsQ2FuY2VsZWRFcnJvcjpfYSxpc0NhbmNlbDp6YSxDYW5jZWxUb2tlbjpWYSxWRVJTSU9OOlphLGFsbDpYYSxDYW5jZWw6JGEsaXNBeGlvc0Vycm9yOkFJLHNwcmVhZDplSSx0b0Zvcm1EYXRhOnRJLEF4aW9zSGVhZGVyczpySSxIdHRwU3RhdHVzQ29kZTpuSSxmb3JtVG9KU09OOm9JLGdldEFkYXB0ZXI6aUksbWVyZ2VDb25maWc6c0l9PVg7YXN5bmMgZnVuY3Rpb24gRm4oQSxlKXtsZXQgdD1BLHI9bnVsbDtpZih0PT1udWxsKXI9bmV3IFdvcmtlcihuZXcgVVJMKCIuL3dlYi13b3JrZXJzL2l0ay13YXNtLXBpcGVsaW5lLndvcmtlci5qcyIsaW1wb3J0Lm1ldGEudXJsKSx7dHlwZToibW9kdWxlIn0pO2Vsc2UgaWYodC5zdGFydHNXaXRoKCJodHRwIikpe2xldCBuPWF3YWl0IFguZ2V0KHQse3Jlc3BvbnNlVHlwZToiYmxvYiIscGFyYW1zOmV9KSxvPVVSTC5jcmVhdGVPYmplY3RVUkwobi5kYXRhKTtyPW5ldyBXb3JrZXIobyx7dHlwZToibW9kdWxlIn0pfWVsc2Ugcj1uZXcgV29ya2VyKHQse3R5cGU6Im1vZHVsZSJ9KTtyZXR1cm4gcn12YXIgQ0E9Rm47ZnVuY3Rpb24gVHQoQSl7bGV0IGU9cmUoQSksdD1BO3JldHVybiB0LnRlcm1pbmF0ZWQ9ITEsdC53b3JrZXJQcm94eT1lLHQub3JpZ2luYWxUZXJtaW5hdGU9dC50ZXJtaW5hdGUsdC50ZXJtaW5hdGU9KCk9Pnt0LnRlcm1pbmF0ZWQ9ITAsdC53b3JrZXJQcm94eVt0ZV0oKSx0Lm9yaWdpbmFsVGVybWluYXRlKCl9LHt3b3JrZXJQcm94eTplLHdvcmtlcjp0fX1hc3luYyBmdW5jdGlvbiBVbihBLGUsdCl7bGV0IHI7aWYoQSE9bnVsbCl7bGV0IG89QTtyZXR1cm4gby53b3JrZXJQcm94eSE9PXZvaWQgMD8ocj1vLndvcmtlclByb3h5LHt3b3JrZXJQcm94eTpyLHdvcmtlcjpvfSk6VHQoQSl9bGV0IG49YXdhaXQgQ0EoZSx0KTtyZXR1cm4gVHQobil9dmFyIFB0PVVuO2FzeW5jIGZ1bmN0aW9uIE5uKEEsZSx0KXtsZXQgcj0idW5rbm93biI7dHlwZW9mIEEhPSJzdHJpbmciP3I9QS5ocmVmOkEuc3RhcnRzV2l0aCgiaHR0cCIpP3I9QTpyPXR5cGVvZiBlPCJ1Ij9gJHtlfS8ke0F9YDpBLHIuZW5kc1dpdGgoIi5qcyIpJiYocj1yLnN1YnN0cmluZygwLHIubGVuZ3RoLTMpKSxyLmVuZHNXaXRoKCIud2FzbSIpJiYocj1yLnN1YnN0cmluZygwLHIubGVuZ3RoLTUpKTtsZXQgbj1gJHtyfS53YXNtYCxpPShhd2FpdCBYLmdldChuLHtyZXNwb25zZVR5cGU6ImFycmF5YnVmZmVyIixwYXJhbXM6dH0pKS5kYXRhO3JldHVybihhd2FpdCBpbXBvcnQoYCR7cn0uanNgKSkuZGVmYXVsdCh7d2FzbUJpbmFyeTppfSl9dmFyIHh0PU5uO3ZhciBMdD1hc3luYygpPT5XZWJBc3NlbWJseS52YWxpZGF0ZShuZXcgVWludDhBcnJheShbMCw5NywxMTUsMTA5LDEsMCwwLDAsMSw1LDEsOTYsMCwxLDEyMywzLDIsMSwwLDEwLDEwLDEsOCwwLDY1LDAsMjUzLDE1LDI1Myw5OCwxMV0pKTt2YXIgSnQ9dHlwZW9mIGdsb2JhbFRoaXMuU2hhcmVkQXJyYXlCdWZmZXI9PSJmdW5jdGlvbiIsR3Q9bmV3IFRleHRFbmNvZGVyLE90PW5ldyBUZXh0RGVjb2RlcigidXRmLTgiKTtmdW5jdGlvbiBUbihBLGUpe2xldCB0PXtmbGFnczoiciIsZW5jb2Rpbmc6ImJpbmFyeSJ9LHI9QS5mc19vcGVuKGUsdC5mbGFncyksbz1BLmZzX3N0YXQoZSkuc2l6ZSxpPW51bGw7SnQ/aT1uZXcgU2hhcmVkQXJyYXlCdWZmZXIobyk6aT1uZXcgQXJyYXlCdWZmZXIobyk7bGV0IGc9bmV3IFVpbnQ4QXJyYXkoaSk7cmV0dXJuIEEuZnNfcmVhZChyLGcsMCxvLDApLEEuZnNfY2xvc2UociksZ31mdW5jdGlvbiBNdChBLGUsdCl7bGV0IHI9bnVsbDtKdD9yPW5ldyBTaGFyZWRBcnJheUJ1ZmZlcih0KTpyPW5ldyBBcnJheUJ1ZmZlcih0KTtsZXQgbj1uZXcgVWludDhBcnJheShyKSxvPW5ldyBVaW50OEFycmF5KEEuSEVBUFU4LmJ1ZmZlcixlLHQpO3JldHVybiBuLnNldChvKSxufWZ1bmN0aW9uIGgoQSxlLHQscil7bGV0IG49MDtyZXR1cm4gZSE9PW51bGwmJihuPUEuY2NhbGwoIml0a193YXNtX2lucHV0X2FycmF5X2FsbG9jIiwibnVtYmVyIixbIm51bWJlciIsIm51bWJlciIsIm51bWJlciIsIm51bWJlciJdLFswLHQscixlLmJ1ZmZlci5ieXRlTGVuZ3RoXSksQS5IRUFQVTguc2V0KG5ldyBVaW50OEFycmF5KGUuYnVmZmVyKSxuKSksbn1mdW5jdGlvbiBIKEEsZSx0KXtsZXQgcj1KU09OLnN0cmluZ2lmeShlKSxuPUEubGVuZ3RoQnl0ZXNVVEY4KHIpKzEsbz1BLmNjYWxsKCJpdGtfd2FzbV9pbnB1dF9qc29uX2FsbG9jIiwibnVtYmVyIixbIm51bWJlciIsIm51bWJlciIsIm51bWJlciJdLFswLHQsbl0pO0Euc3RyaW5nVG9VVEY4KHIsbyxuKX1mdW5jdGlvbiBSKEEsZSx0LHIpe2xldCBuPUEuY2NhbGwoIml0a193YXNtX291dHB1dF9hcnJheV9hZGRyZXNzIiwibnVtYmVyIixbIm51bWJlciIsIm51bWJlciIsIm51bWJlciJdLFswLGUsdF0pLG89QS5jY2FsbCgiaXRrX3dhc21fb3V0cHV0X2FycmF5X3NpemUiLCJudW1iZXIiLFsibnVtYmVyIiwibnVtYmVyIiwibnVtYmVyIl0sWzAsZSx0XSksaT1NdChBLG4sbyk7cmV0dXJuIGsocixpLmJ1ZmZlcil9ZnVuY3Rpb24gQkEoQSxlKXtsZXQgdD1BLmNjYWxsKCJpdGtfd2FzbV9vdXRwdXRfanNvbl9hZGRyZXNzIiwibnVtYmVyIixbIm51bWJlciIsIm51bWJlciJdLFswLGVdKSxyPUEuVVRGOFRvU3RyaW5nKHQpO3JldHVybiBKU09OLnBhcnNlKHIpfWZ1bmN0aW9uIFBuKEEsZSx0LHIpe3IhPW51bGwmJnIubGVuZ3RoPjAmJnIuZm9yRWFjaChmdW5jdGlvbihjLGEpe3N3aXRjaChjLnR5cGUpe2Nhc2UgZC5UZXh0U3RyZWFtOntsZXQgST1HdC5lbmNvZGUoYy5kYXRhLmRhdGEpLGY9aChBLEksYSwwKSxsPXtzaXplOkkuYnVmZmVyLmJ5dGVMZW5ndGgsZGF0YTpgZGF0YTphcHBsaWNhdGlvbi92bmQuaXRrLmFkZHJlc3MsMDoke2Z9YH07SChBLGwsYSk7YnJlYWt9Y2FzZSBkLkpzb25Db21wYXRpYmxlOntsZXQgST1HdC5lbmNvZGUoSlNPTi5zdHJpbmdpZnkoYy5kYXRhKSksZj1oKEEsSSxhLDApLGw9e3NpemU6SS5idWZmZXIuYnl0ZUxlbmd0aCxkYXRhOmBkYXRhOmFwcGxpY2F0aW9uL3ZuZC5pdGsuYWRkcmVzcywwOiR7Zn1gfTtIKEEsbCxhKTticmVha31jYXNlIGQuQmluYXJ5U3RyZWFtOntsZXQgST1jLmRhdGEuZGF0YSxmPWgoQSxJLGEsMCksbD17c2l6ZTpJLmJ1ZmZlci5ieXRlTGVuZ3RoLGRhdGE6YGRhdGE6YXBwbGljYXRpb24vdm5kLml0ay5hZGRyZXNzLDA6JHtmfWB9O0goQSxsLGEpO2JyZWFrfWNhc2UgZC5UZXh0RmlsZTp7QS5mc193cml0ZUZpbGUoYy5kYXRhLnBhdGgsYy5kYXRhLmRhdGEpO2JyZWFrfWNhc2UgZC5CaW5hcnlGaWxlOntBLmZzX3dyaXRlRmlsZShjLmRhdGEucGF0aCxjLmRhdGEuZGF0YSk7YnJlYWt9Y2FzZSBkLkltYWdlOntsZXQgST1jLmRhdGEsZj1oKEEsSS5kYXRhLGEsMCksbD1oKEEsSS5kaXJlY3Rpb24sYSwxKSx1PXR5cGVvZiBJLm1ldGFkYXRhPy5lbnRyaWVzPCJ1Ij9BcnJheS5mcm9tKEkubWV0YWRhdGEuZW50cmllcygpKTpbXSxFPXtpbWFnZVR5cGU6SS5pbWFnZVR5cGUsbmFtZTpJLm5hbWUsb3JpZ2luOkkub3JpZ2luLHNwYWNpbmc6SS5zcGFjaW5nLGRpcmVjdGlvbjpgZGF0YTphcHBsaWNhdGlvbi92bmQuaXRrLmFkZHJlc3MsMDoke2x9YCxzaXplOkkuc2l6ZSxkYXRhOmBkYXRhOmFwcGxpY2F0aW9uL3ZuZC5pdGsuYWRkcmVzcywwOiR7Zn1gLG1ldGFkYXRhOnV9O0goQSxFLGEpO2JyZWFrfWNhc2UgZC5NZXNoOntsZXQgST1jLmRhdGEsZj1oKEEsSS5wb2ludHMsYSwwKSxsPWgoQSxJLmNlbGxzLGEsMSksdT1oKEEsSS5wb2ludERhdGEsYSwyKSxFPWgoQSxJLmNlbGxEYXRhLGEsMyksQj17bWVzaFR5cGU6SS5tZXNoVHlwZSxuYW1lOkkubmFtZSxudW1iZXJPZlBvaW50czpJLm51bWJlck9mUG9pbnRzLHBvaW50czpgZGF0YTphcHBsaWNhdGlvbi92bmQuaXRrLmFkZHJlc3MsMDoke2Z9YCxudW1iZXJPZkNlbGxzOkkubnVtYmVyT2ZDZWxscyxjZWxsczpgZGF0YTphcHBsaWNhdGlvbi92bmQuaXRrLmFkZHJlc3MsMDoke2x9YCxjZWxsQnVmZmVyU2l6ZTpJLmNlbGxCdWZmZXJTaXplLG51bWJlck9mUG9pbnRQaXhlbHM6SS5udW1iZXJPZlBvaW50UGl4ZWxzLHBvaW50RGF0YTpgZGF0YTphcHBsaWNhdGlvbi92bmQuaXRrLmFkZHJlc3MsMDoke3V9YCxudW1iZXJPZkNlbGxQaXhlbHM6SS5udW1iZXJPZkNlbGxQaXhlbHMsY2VsbERhdGE6YGRhdGE6YXBwbGljYXRpb24vdm5kLml0ay5hZGRyZXNzLDA6JHtFfWB9O0goQSxCLGEpO2JyZWFrfWNhc2UgZC5Qb2ludFNldDp7bGV0IEk9Yy5kYXRhLGY9aChBLEkucG9pbnRzLGEsMCksbD1oKEEsSS5wb2ludERhdGEsYSwxKSx1PXtwb2ludFNldFR5cGU6SS5wb2ludFNldFR5cGUsbmFtZTpJLm5hbWUsbnVtYmVyT2ZQb2ludHM6SS5udW1iZXJPZlBvaW50cyxwb2ludHM6YGRhdGE6YXBwbGljYXRpb24vdm5kLml0ay5hZGRyZXNzLDA6JHtmfWAsbnVtYmVyT2ZQb2ludFBpeGVsczpJLm51bWJlck9mUG9pbnRQaXhlbHMscG9pbnREYXRhOmBkYXRhOmFwcGxpY2F0aW9uL3ZuZC5pdGsuYWRkcmVzcywwOiR7bH1gfTtIKEEsdSxhKTticmVha31jYXNlIGQuVHJhbnNmb3JtTGlzdDp7bGV0IEk9Yy5kYXRhLGY9W107SS5mb3JFYWNoKChsLHUpPT57bGV0IEI9YGRhdGE6YXBwbGljYXRpb24vdm5kLml0ay5hZGRyZXNzLDA6JHtoKEEsbC5maXhlZFBhcmFtZXRlcnMsYSx1KjIpfWAsYj1gZGF0YTphcHBsaWNhdGlvbi92bmQuaXRrLmFkZHJlc3MsMDoke2goQSxsLnBhcmFtZXRlcnMsYSx1KjIrMSl9YCxwPXt0cmFuc2Zvcm1UeXBlOmwudHJhbnNmb3JtVHlwZSxudW1iZXJPZkZpeGVkUGFyYW1ldGVyczpsLm51bWJlck9mRml4ZWRQYXJhbWV0ZXJzLG51bWJlck9mUGFyYW1ldGVyczpsLm51bWJlck9mUGFyYW1ldGVycyxuYW1lOmwubmFtZSxpbnB1dFNwYWNlTmFtZTpsLmlucHV0U3BhY2VOYW1lLG91dHB1dFNwYWNlTmFtZTpsLm91dHB1dFNwYWNlTmFtZSxwYXJhbWV0ZXJzOmIsZml4ZWRQYXJhbWV0ZXJzOkJ9O2YucHVzaChwKX0pLEgoQSxmLGEpO2JyZWFrfWNhc2UgZC5Qb2x5RGF0YTp7bGV0IEk9Yy5kYXRhLGY9aChBLEkucG9pbnRzLGEsMCksbD1oKEEsSS52ZXJ0aWNlcyxhLDEpLHU9aChBLEkubGluZXMsYSwyKSxFPWgoQSxJLnBvbHlnb25zLGEsMyksQj1oKEEsSS50cmlhbmdsZVN0cmlwcyxhLDQpLG09aChBLEkucG9pbnREYXRhLGEsNSksYj1oKEEsSS5wb2ludERhdGEsYSw2KSxwPXtwb2x5RGF0YVR5cGU6SS5wb2x5RGF0YVR5cGUsbmFtZTpJLm5hbWUsbnVtYmVyT2ZQb2ludHM6SS5udW1iZXJPZlBvaW50cyxwb2ludHM6YGRhdGE6YXBwbGljYXRpb24vdm5kLml0ay5hZGRyZXNzLDA6JHtmfWAsdmVydGljZXNCdWZmZXJTaXplOkkudmVydGljZXNCdWZmZXJTaXplLHZlcnRpY2VzOmBkYXRhOmFwcGxpY2F0aW9uL3ZuZC5pdGsuYWRkcmVzcywwOiR7bH1gLGxpbmVzQnVmZmVyU2l6ZTpJLmxpbmVzQnVmZmVyU2l6ZSxsaW5lczpgZGF0YTphcHBsaWNhdGlvbi92bmQuaXRrLmFkZHJlc3MsMDoke3V9YCxwb2x5Z29uc0J1ZmZlclNpemU6SS5wb2x5Z29uc0J1ZmZlclNpemUscG9seWdvbnM6YGRhdGE6YXBwbGljYXRpb24vdm5kLml0ay5hZGRyZXNzLDA6JHtFfWAsdHJpYW5nbGVTdHJpcHNCdWZmZXJTaXplOkkudHJpYW5nbGVTdHJpcHNCdWZmZXJTaXplLHRyaWFuZ2xlU3RyaXBzOmBkYXRhOmFwcGxpY2F0aW9uL3ZuZC5pdGsuYWRkcmVzcywwOiR7Qn1gLG51bWJlck9mUG9pbnRQaXhlbHM6SS5udW1iZXJPZlBvaW50UGl4ZWxzLHBvaW50RGF0YTpgZGF0YTphcHBsaWNhdGlvbi92bmQuaXRrLmFkZHJlc3MsMDoke219YCxudW1iZXJPZkNlbGxQaXhlbHM6SS5udW1iZXJPZkNlbGxQaXhlbHMsY2VsbERhdGE6YGRhdGE6YXBwbGljYXRpb24vdm5kLml0ay5hZGRyZXNzLDA6JHtifWB9O0goQSxwLGEpO2JyZWFrfWRlZmF1bHQ6dGhyb3cgRXJyb3IoIlVuc3VwcG9ydGVkIGlucHV0IEludGVyZmFjZVR5cGUiKX19KSxBLnJlc2V0TW9kdWxlU3Rkb3V0KCksQS5yZXNldE1vZHVsZVN0ZGVycigpO2xldCBuPUEuc3RhY2tTYXZlKCksbz0wO3RyeXtvPUEuY2FsbE1haW4oZS5zbGljZSgpKX1jYXRjaChjKXt0aHJvdyB0eXBlb2YgYz09Im51bWJlciImJihjb25zb2xlLmxvZygiRXhjZXB0aW9uIHdoaWxlIHJ1bm5pbmcgcGlwZWxpbmU6IiksY29uc29sZS5sb2coInN0ZG91dDoiLEEuZ2V0TW9kdWxlU3Rkb3V0KCkpLGNvbnNvbGUuZXJyb3IoInN0ZGVycjoiLEEuZ2V0TW9kdWxlU3RkZXJyKCkpLHR5cGVvZiBBLmdldEV4Y2VwdGlvbk1lc3NhZ2U8InUiP2NvbnNvbGUuZXJyb3IoImV4Y2VwdGlvbjoiLEEuZ2V0RXhjZXB0aW9uTWVzc2FnZShjKSk6Y29uc29sZS5lcnJvcigiQnVpbGQgbW9kdWxlIGluIERlYnVnIG1vZGUgZm9yIGV4Y2VwdGlvbiBtZXNzYWdlIGluZm9ybWF0aW9uLiIpKSxjfWZpbmFsbHl7QS5zdGFja1Jlc3RvcmUobil9bGV0IGk9QS5nZXRNb2R1bGVTdGRvdXQoKSxnPUEuZ2V0TW9kdWxlU3RkZXJyKCksQz1bXTtyZXR1cm4gdCE9bnVsbCYmdC5sZW5ndGg+MCYmbz09PTAmJnQuZm9yRWFjaChmdW5jdGlvbihjLGEpe2xldCBJPW51bGw7c3dpdGNoKGMudHlwZSl7Y2FzZSBkLlRleHRTdHJlYW06e2xldCBsPUEuY2NhbGwoIml0a193YXNtX291dHB1dF9hcnJheV9hZGRyZXNzIiwibnVtYmVyIixbIm51bWJlciIsIm51bWJlciIsIm51bWJlciJdLFswLGEsMF0pLHU9QS5jY2FsbCgiaXRrX3dhc21fb3V0cHV0X2FycmF5X3NpemUiLCJudW1iZXIiLFsibnVtYmVyIiwibnVtYmVyIiwibnVtYmVyIl0sWzAsYSwwXSksRT1uZXcgVWludDhBcnJheShBLkhFQVBVOC5idWZmZXIsbCx1KTtJPXtkYXRhOk90LmRlY29kZShFKX07YnJlYWt9Y2FzZSBkLkpzb25Db21wYXRpYmxlOntsZXQgbD1BLmNjYWxsKCJpdGtfd2FzbV9vdXRwdXRfYXJyYXlfYWRkcmVzcyIsIm51bWJlciIsWyJudW1iZXIiLCJudW1iZXIiLCJudW1iZXIiXSxbMCxhLDBdKSx1PUEuY2NhbGwoIml0a193YXNtX291dHB1dF9hcnJheV9zaXplIiwibnVtYmVyIixbIm51bWJlciIsIm51bWJlciIsIm51bWJlciJdLFswLGEsMF0pLEU9bmV3IFVpbnQ4QXJyYXkoQS5IRUFQVTguYnVmZmVyLGwsdSk7ST1KU09OLnBhcnNlKE90LmRlY29kZShFKSk7YnJlYWt9Y2FzZSBkLkJpbmFyeVN0cmVhbTp7bGV0IGw9QS5jY2FsbCgiaXRrX3dhc21fb3V0cHV0X2FycmF5X2FkZHJlc3MiLCJudW1iZXIiLFsibnVtYmVyIiwibnVtYmVyIiwibnVtYmVyIl0sWzAsYSwwXSksdT1BLmNjYWxsKCJpdGtfd2FzbV9vdXRwdXRfYXJyYXlfc2l6ZSIsIm51bWJlciIsWyJudW1iZXIiLCJudW1iZXIiLCJudW1iZXIiXSxbMCxhLDBdKTtJPXtkYXRhOk10KEEsbCx1KX07YnJlYWt9Y2FzZSBkLlRleHRGaWxlOntJPXtwYXRoOmMuZGF0YS5wYXRoLGRhdGE6QS5mc19yZWFkRmlsZShjLmRhdGEucGF0aCx7ZW5jb2Rpbmc6InV0ZjgifSl9O2JyZWFrfWNhc2UgZC5CaW5hcnlGaWxlOntJPXtwYXRoOmMuZGF0YS5wYXRoLGRhdGE6VG4oQSxjLmRhdGEucGF0aCl9O2JyZWFrfWNhc2UgZC5JbWFnZTp7bGV0IGw9QkEoQSxhKTtsLmRhdGE9UihBLGEsMCxsLmltYWdlVHlwZS5jb21wb25lbnRUeXBlKSxsLmRpcmVjdGlvbj1SKEEsYSwxLEYuRmxvYXQ2NCksbC5tZXRhZGF0YT1uZXcgTWFwKGwubWV0YWRhdGEpLEk9bDticmVha31jYXNlIGQuTWVzaDp7bGV0IGw9QkEoQSxhKTtsLm51bWJlck9mUG9pbnRzPjA/bC5wb2ludHM9UihBLGEsMCxsLm1lc2hUeXBlLnBvaW50Q29tcG9uZW50VHlwZSk6bC5wb2ludHM9ayhsLm1lc2hUeXBlLnBvaW50Q29tcG9uZW50VHlwZSxuZXcgQXJyYXlCdWZmZXIoMCkpLGwubnVtYmVyT2ZDZWxscz4wP2wuY2VsbHM9UihBLGEsMSxsLm1lc2hUeXBlLmNlbGxDb21wb25lbnRUeXBlKTpsLmNlbGxzPWsobC5tZXNoVHlwZS5jZWxsQ29tcG9uZW50VHlwZSxuZXcgQXJyYXlCdWZmZXIoMCkpLGwubnVtYmVyT2ZQb2ludFBpeGVscz4wP2wucG9pbnREYXRhPVIoQSxhLDIsbC5tZXNoVHlwZS5wb2ludFBpeGVsQ29tcG9uZW50VHlwZSk6bC5wb2ludERhdGE9ayhsLm1lc2hUeXBlLnBvaW50UGl4ZWxDb21wb25lbnRUeXBlLG5ldyBBcnJheUJ1ZmZlcigwKSksbC5udW1iZXJPZkNlbGxQaXhlbHM+MD9sLmNlbGxEYXRhPVIoQSxhLDMsbC5tZXNoVHlwZS5jZWxsUGl4ZWxDb21wb25lbnRUeXBlKTpsLmNlbGxEYXRhPWsobC5tZXNoVHlwZS5jZWxsUGl4ZWxDb21wb25lbnRUeXBlLG5ldyBBcnJheUJ1ZmZlcigwKSksST1sO2JyZWFrfWNhc2UgZC5Qb2ludFNldDp7bGV0IGw9QkEoQSxhKTtsLm51bWJlck9mUG9pbnRzPjA/bC5wb2ludHM9UihBLGEsMCxsLnBvaW50U2V0VHlwZS5wb2ludENvbXBvbmVudFR5cGUpOmwucG9pbnRzPWsobC5wb2ludFNldFR5cGUucG9pbnRDb21wb25lbnRUeXBlLG5ldyBBcnJheUJ1ZmZlcigwKSksbC5udW1iZXJPZlBvaW50UGl4ZWxzPjA/bC5wb2ludERhdGE9UihBLGEsMSxsLnBvaW50U2V0VHlwZS5wb2ludFBpeGVsQ29tcG9uZW50VHlwZSk6bC5wb2ludERhdGE9ayhsLnBvaW50U2V0VHlwZS5wb2ludFBpeGVsQ29tcG9uZW50VHlwZSxuZXcgQXJyYXlCdWZmZXIoMCkpLEk9bDticmVha31jYXNlIGQuVHJhbnNmb3JtTGlzdDp7bGV0IGw9QkEoQSxhKTtsLmZvckVhY2goKHUsRSk9Pnt1Lm51bWJlck9mRml4ZWRQYXJhbWV0ZXJzPjAmJihsW0VdLmZpeGVkUGFyYW1ldGVycz1SKEEsYSxFKjIsdS50cmFuc2Zvcm1UeXBlLnBhcmFtZXRlcnNWYWx1ZVR5cGUpKSx1Lm51bWJlck9mRml4ZWRQYXJhbWV0ZXJzPjAmJihsW0VdLnBhcmFtZXRlcnM9UihBLGEsRSoyKzEsdS50cmFuc2Zvcm1UeXBlLnBhcmFtZXRlcnNWYWx1ZVR5cGUpKX0pLEk9bDticmVha31jYXNlIGQuUG9seURhdGE6e2xldCBsPUJBKEEsYSk7bC5udW1iZXJPZlBvaW50cz4wP2wucG9pbnRzPVIoQSxhLDAsRi5GbG9hdDMyKTpsLnBvaW50cz1uZXcgRmxvYXQzMkFycmF5LGwudmVydGljZXNCdWZmZXJTaXplPjA/bC52ZXJ0aWNlcz1SKEEsYSwxLEQuVUludDMyKTpsLnZlcnRpY2VzPW5ldyBVaW50MzJBcnJheSxsLmxpbmVzQnVmZmVyU2l6ZT4wP2wubGluZXM9UihBLGEsMixELlVJbnQzMik6bC5saW5lcz1uZXcgVWludDMyQXJyYXksbC5wb2x5Z29uc0J1ZmZlclNpemU+MD9sLnBvbHlnb25zPVIoQSxhLDMsRC5VSW50MzIpOmwucG9seWdvbnM9bmV3IFVpbnQzMkFycmF5LGwudHJpYW5nbGVTdHJpcHNCdWZmZXJTaXplPjA/bC50cmlhbmdsZVN0cmlwcz1SKEEsYSw0LEQuVUludDMyKTpsLnRyaWFuZ2xlU3RyaXBzPW5ldyBVaW50MzJBcnJheSxsLm51bWJlck9mUG9pbnRQaXhlbHM+MD9sLnBvaW50RGF0YT1SKEEsYSw1LGwucG9seURhdGFUeXBlLnBvaW50UGl4ZWxDb21wb25lbnRUeXBlKTpsLnBvaW50RGF0YT1rKGwucG9seURhdGFUeXBlLnBvaW50UGl4ZWxDb21wb25lbnRUeXBlLG5ldyBBcnJheUJ1ZmZlcigwKSksbC5udW1iZXJPZkNlbGxQaXhlbHM+MD9sLmNlbGxEYXRhPVIoQSxhLDYsbC5wb2x5RGF0YVR5cGUuY2VsbFBpeGVsQ29tcG9uZW50VHlwZSk6bC5jZWxsRGF0YT1rKGwucG9seURhdGFUeXBlLmNlbGxQaXhlbENvbXBvbmVudFR5cGUsbmV3IEFycmF5QnVmZmVyKDApKSxJPWw7YnJlYWt9ZGVmYXVsdDp0aHJvdyBFcnJvcigiVW5zdXBwb3J0ZWQgb3V0cHV0IEludGVyZmFjZVR5cGUiKX1sZXQgZj17dHlwZTpjLnR5cGUsZGF0YTpJfTtDLnB1c2goZil9KSx7cmV0dXJuVmFsdWU6byxzdGRvdXQ6aSxzdGRlcnI6ZyxvdXRwdXRzOkN9fXZhciBIdD1Qbjt2YXIgeG49dHlwZW9mIGdsb2JhbFRoaXMuU2hhcmVkQXJyYXlCdWZmZXI8InUiO2Z1bmN0aW9uIExuKEEsZSl7aWYoQT09bnVsbClyZXR1cm5bXTtsZXQgdD1bXTtmb3IobGV0IHI9MDtyPEEubGVuZ3RoO3IrKyl7bGV0IG49R24oQVtyXSxlKTtuIT09bnVsbCYmdC5wdXNoKG4pfXJldHVybiB0fWZ1bmN0aW9uIEduKEEsZSl7aWYoQT09bnVsbClyZXR1cm4gbnVsbDtsZXQgdD1udWxsO3JldHVybiBBLmJ1ZmZlciE9PXZvaWQgMD90PUEuYnVmZmVyOkEuYnl0ZUxlbmd0aCE9PXZvaWQgMCYmKHQ9QSkseG4mJnQgaW5zdGFuY2VvZiBTaGFyZWRBcnJheUJ1ZmZlcj9udWxsOmU/dDp0LnNsaWNlKDApfXZhciBxdD1MbjtmdW5jdGlvbiBPbihBKXtyZXR1cm5bQS5kYXRhLEEuZGlyZWN0aW9uXX12YXIgWXQ9T247ZnVuY3Rpb24gSm4oQSl7cmV0dXJuW0EucG9pbnRzLEEucG9pbnREYXRhLEEuY2VsbHMsQS5jZWxsRGF0YV19dmFyIEt0PUpuO2Z1bmN0aW9uIE1uKEEpe3JldHVybltBLnBvaW50cyxBLnZlcnRpY2VzLEEubGluZXMsQS5wb2x5Z29ucyxBLnRyaWFuZ2xlU3RyaXBzLEEucG9pbnREYXRhLEEuY2VsbERhdGFdfXZhciBXdD1Nbjt2YXIgSG47ZnVuY3Rpb24gT0EoKXtyZXR1cm4gSG59dmFyIHFuO2Z1bmN0aW9uIHZ0KCl7cmV0dXJuIHFufXZhciBZbjtmdW5jdGlvbiBKQSgpe3JldHVybiBZbn12YXIgVWU9bmV3IE1hcDtmdW5jdGlvbiBLbigpe2xldCBBPUpBKCk7cmV0dXJuIHR5cGVvZiBBPiJ1IiYmKEE9bnVsbCksQX1mdW5jdGlvbiBqdCgpe2xldCBBPU9BKCk7cmV0dXJuIHR5cGVvZiBBPiJ1IiYmKEE9bmV3IFVSTCgiL3BpcGVsaW5lcyIsZG9jdW1lbnQubG9jYXRpb24ub3JpZ2luKS5ocmVmKSxBfWZ1bmN0aW9uIE1BKCl7bGV0IEE9dnQoKTtyZXR1cm4gdHlwZW9mIEE+InUiJiYoQT17fSksQX1hc3luYyBmdW5jdGlvbiBXbihBLGUsdCl7bGV0IHI9QSxuPUE7aWYodHlwZW9mIEEhPSJzdHJpbmciJiYocj1uZXcgVVJMKEEuaHJlZiksbj1yLmhyZWYpLFVlLmhhcyhuKSlyZXR1cm4gVWUuZ2V0KG4pO3tsZXQgbz1hd2FpdCB4dChBLGU/LnRvU3RyaW5nKCk/P2p0KCksdD8/TUEoKSk7cmV0dXJuIFVlLnNldChuLG8pLG99fWFzeW5jIGZ1bmN0aW9uIHZuKEEsZSx0LHIsbil7aWYoIWF3YWl0IEx0KCkpe2xldCBCPSJXZWJBc3NlbWJseSBTSU1EIHN1cHBvcnQgaXMgcmVxdWlyZWQgLS0gcGxlYXNlIHVwZGF0ZSB5b3VyIGJyb3dzZXIuIjt0aHJvdyBhbGVydChCKSxuZXcgRXJyb3IoQil9bGV0IG89bj8ud2ViV29ya2VyPz9udWxsO2lmKG89PT0hMSl7bGV0IEI9YXdhaXQgV24oQS50b1N0cmluZygpLG4/LnBpcGVsaW5lQmFzZVVybCxuPy5waXBlbGluZVF1ZXJ5UGFyYW1zPz9NQSgpKTtyZXR1cm4gSHQoQixlLHQscil9bGV0IGk9byxnPW4/LnBpcGVsaW5lV29ya2VyVXJsPz9LbigpLEM9dHlwZW9mIGchPSJzdHJpbmciJiZ0eXBlb2YgZz8uaHJlZjwidSI/Zy5ocmVmOmcse3dvcmtlclByb3h5OmMsd29ya2VyOmF9PWF3YWl0IFB0KGksQyxuPy5waXBlbGluZVF1ZXJ5UGFyYW1zPz9NQSgpKTtpPWE7bGV0IEk9W107ciE9bnVsbCYmci5sZW5ndGg+MCYmci5mb3JFYWNoKGZ1bmN0aW9uKEIpe2lmKEIudHlwZT09PWQuQmluYXJ5U3RyZWFtKXtsZXQgbT1CLmRhdGEuZGF0YTtJLnB1c2gobSl9ZWxzZSBpZihCLnR5cGU9PT1kLkJpbmFyeUZpbGUpe2xldCBtPUIuZGF0YS5kYXRhO0kucHVzaChtKX1lbHNlIGlmKEIudHlwZT09PWQuSW1hZ2Upe2xldCBtPUIuZGF0YTttLmRhdGEhPT1udWxsJiZJLnB1c2goLi4uWXQobSkpfWVsc2UgaWYoQi50eXBlPT09ZC5NZXNoKXtsZXQgbT1CLmRhdGE7SS5wdXNoKC4uLkt0KG0pKX1lbHNlIGlmKEIudHlwZT09PWQuUG9seURhdGEpe2xldCBtPUIuZGF0YTtJLnB1c2goLi4uV3QobSkpfX0pO2xldCBmPW4/LnBpcGVsaW5lQmFzZVVybD8/anQoKSxsPXR5cGVvZiBmIT0ic3RyaW5nIiYmdHlwZW9mIGY/LmhyZWY8InUiP2YuaHJlZjpmLHU9ciE9bnVsbD9uZShyLHF0KEksbj8ubm9Db3B5KSk6bnVsbCxFPWF3YWl0IGMucnVuUGlwZWxpbmUoQS50b1N0cmluZygpLGwsZSx0LHUsbj8ucGlwZWxpbmVRdWVyeVBhcmFtcz8/TUEoKSk7cmV0dXJue3JldHVyblZhbHVlOkUucmV0dXJuVmFsdWUsc3Rkb3V0OkUuc3Rkb3V0LHN0ZGVycjpFLnN0ZGVycixvdXRwdXRzOkUub3V0cHV0cyx3ZWJXb3JrZXI6aX19dmFyIHVBPXZuO3ZhciBqbj1udWxsO2Z1bmN0aW9uIF90KCl7cmV0dXJuIGpufXZhciBOZSxfbj1gaHR0cHM6Ly9jZG4uanNkZWxpdnIubmV0L25wbS9AaXRrLXdhc20vY29tcHJlc3Mtc3RyaW5naWZ5QCR7S0F9L2Rpc3QvcGlwZWxpbmVzYDtmdW5jdGlvbiBaSShBKXtOZT1BfWZ1bmN0aW9uIEhBKCl7aWYodHlwZW9mIE5lPCJ1IilyZXR1cm4gTmU7bGV0IEE9T0EoKTtyZXR1cm4gdHlwZW9mIEE8InUiP0E6X259dmFyIFRlLHpuPW51bGw7ZnVuY3Rpb24genQoQSl7VGU9QX1mdW5jdGlvbiAkKCl7aWYodHlwZW9mIFRlPCJ1IilyZXR1cm4gVGU7bGV0IEE9SkEoKTtyZXR1cm4gdHlwZW9mIEE8InUiP0E6em59dmFyIEFBPW51bGw7YXN5bmMgZnVuY3Rpb24gVnQoKXtsZXQgQT0kKCksZT10eXBlb2YgQSE9InN0cmluZyImJnR5cGVvZiBBPy5ocmVmPCJ1Ij9BLmhyZWY6QTtBQT1hd2FpdCBDQShlKX1mdW5jdGlvbiBuZyhBKXtBQT1BfWFzeW5jIGZ1bmN0aW9uIHFBKCl7aWYoQUEhPT1udWxsKXJldHVybiBBQS50ZXJtaW5hdGVkJiZhd2FpdCBWdCgpLEFBO2xldCBBPV90KCk7cmV0dXJuIEEhPT1udWxsP0E6KGF3YWl0IFZ0KCksQUEpfWFzeW5jIGZ1bmN0aW9uIFZuKEEsZT17fSl7bGV0IHQ9W3t0eXBlOmQuQmluYXJ5U3RyZWFtfV0scj1be3R5cGU6ZC5CaW5hcnlTdHJlYW0sZGF0YTp7ZGF0YTpBfX1dLG49W107bi5wdXNoKCIwIiksbi5wdXNoKCIwIiksbi5wdXNoKCItLW1lbW9yeS1pbyIpLGUuc3RyaW5naWZ5JiZlLnN0cmluZ2lmeSYmbi5wdXNoKCItLXN0cmluZ2lmeSIpLGUuY29tcHJlc3Npb25MZXZlbCYmbi5wdXNoKCItLWNvbXByZXNzaW9uLWxldmVsIixlLmNvbXByZXNzaW9uTGV2ZWwudG9TdHJpbmcoKSksZS5kYXRhVXJsUHJlZml4JiZuLnB1c2goIi0tZGF0YS11cmwtcHJlZml4IixlLmRhdGFVcmxQcmVmaXgudG9TdHJpbmcoKSk7bGV0IGc9ImNvbXByZXNzLXN0cmluZ2lmeSIsQz1lPy53ZWJXb3JrZXI7Qz09PXZvaWQgMCYmKEM9YXdhaXQgcUEoKSk7bGV0e3dlYldvcmtlcjpjLHJldHVyblZhbHVlOmEsc3RkZXJyOkksb3V0cHV0czpmfT1hd2FpdCB1QShnLG4sdCxyLHtwaXBlbGluZUJhc2VVcmw6SEEoKSxwaXBlbGluZVdvcmtlclVybDokKCksd2ViV29ya2VyOkMsbm9Db3B5OmU/Lm5vQ29weX0pO2lmKGEhPT0wJiZJIT09IiIpdGhyb3cgbmV3IEVycm9yKEkpO3JldHVybnt3ZWJXb3JrZXI6YyxvdXRwdXQ6KGZbMF0/LmRhdGEpLmRhdGF9fXZhciBlQT1Wbjthc3luYyBmdW5jdGlvbiBabihBLGU9e30pe2xldCB0PVt7dHlwZTpkLkJpbmFyeVN0cmVhbX1dLHI9W3t0eXBlOmQuQmluYXJ5U3RyZWFtLGRhdGE6e2RhdGE6QX19XSxuPVtdO24ucHVzaCgiMCIpLG4ucHVzaCgiMCIpLG4ucHVzaCgiLS1tZW1vcnktaW8iKSxlLnBhcnNlU3RyaW5nJiZlLnBhcnNlU3RyaW5nJiZuLnB1c2goIi0tcGFyc2Utc3RyaW5nIik7bGV0IGc9InBhcnNlLXN0cmluZy1kZWNvbXByZXNzIixDPWU/LndlYldvcmtlcjtDPT09dm9pZCAwJiYoQz1hd2FpdCBxQSgpKTtsZXR7d2ViV29ya2VyOmMscmV0dXJuVmFsdWU6YSxzdGRlcnI6SSxvdXRwdXRzOmZ9PWF3YWl0IHVBKGcsbix0LHIse3BpcGVsaW5lQmFzZVVybDpIQSgpLHBpcGVsaW5lV29ya2VyVXJsOiQoKSx3ZWJXb3JrZXI6Qyxub0NvcHk6ZT8ubm9Db3B5fSk7aWYoYSE9PTAmJkkhPT0iIil0aHJvdyBuZXcgRXJyb3IoSSk7cmV0dXJue3dlYldvcmtlcjpjLG91dHB1dDooZlswXT8uZGF0YSkuZGF0YX19dmFyIHRBPVpuO2FzeW5jIGZ1bmN0aW9uIFhuKEEsZT17fSl7bGV0IHI9bmV3IGpBKEEuaW1hZ2VUeXBlKTtyLm9yaWdpbj1BLm9yaWdpbixyLnNwYWNpbmc9QS5zcGFjaW5nLHIuc2l6ZT1BLnNpemUsci5tZXRhZGF0YT1BLm1ldGFkYXRhO2xldCBuPW5ldyBUZXh0RGVjb2RlcigidXRmLTgiKSxvPW5ldyBVaW50OEFycmF5KEEuZGlyZWN0aW9uLmJ1ZmZlciksaT1hd2FpdCBlQShvLHtjb21wcmVzc2lvbkxldmVsOjUsc3RyaW5naWZ5OiEwLHdlYldvcmtlcjplLndlYldvcmtlcixub0NvcHk6ZS5ub0NvcHl9KSxnPWkud2ViV29ya2VyO2lmKHIuZGlyZWN0aW9uPW4uZGVjb2RlKGkub3V0cHV0LmJ1ZmZlciksQS5kYXRhPT09bnVsbClyLmRhdGE9bnVsbDtlbHNle2xldCBDPW5ldyBVaW50OEFycmF5KEEuZGF0YS5idWZmZXIpLGM9YXdhaXQgZUEoQyx7Y29tcHJlc3Npb25MZXZlbDo1LHN0cmluZ2lmeTohMCx3ZWJXb3JrZXI6Zyxub0NvcHk6ZS5ub0NvcHl9KTtyLmRhdGE9bi5kZWNvZGUoYy5vdXRwdXQuYnVmZmVyKX1yZXR1cm57ZW5jb2RlZDpyLHdlYldvcmtlcjpnfX1hc3luYyBmdW5jdGlvbiAkbihBLGU9e30pe2xldCB0PUEscj1uZXcgVGV4dEVuY29kZXIsbj1uZXcgVWludDhBcnJheShyLmVuY29kZShBLmRpcmVjdGlvbikpLG89YXdhaXQgdEEobix7cGFyc2VTdHJpbmc6ITAsd2ViV29ya2VyOmUud2ViV29ya2VyLG5vQ29weTohMH0pLGk9by53ZWJXb3JrZXI7aWYodC5kaXJlY3Rpb249bmV3IEZsb2F0NjRBcnJheShvLm91dHB1dC5idWZmZXIpLCF0LmRhdGEpdC5kYXRhPW51bGw7ZWxzZXtsZXQgZz1uZXcgVWludDhBcnJheShyLmVuY29kZShBLmRhdGEpKSxDPWF3YWl0IHRBKGcse3BhcnNlU3RyaW5nOiEwLHdlYldvcmtlcjppLG5vQ29weTohMH0pO3QuZGF0YT1rKHQuaW1hZ2VUeXBlLmNvbXBvbmVudFR5cGUsQy5vdXRwdXQuYnVmZmVyKX1yZXR1cm57ZGVjb2RlZDp0LHdlYldvcmtlcjppfX1hc3luYyBmdW5jdGlvbiBBbyhBLGU9e30pe2xldCByPW5ldyBWQShBLm1lc2hUeXBlKTtyLm5hbWU9QS5uYW1lLHIubnVtYmVyT2ZQb2ludHM9QS5udW1iZXJPZlBvaW50cyxyLm51bWJlck9mQ2VsbHM9QS5udW1iZXJPZkNlbGxzLHIubnVtYmVyT2ZQb2ludFBpeGVscz1BLm51bWJlck9mUG9pbnRQaXhlbHMsci5udW1iZXJPZkNlbGxQaXhlbHM9QS5udW1iZXJPZkNlbGxQaXhlbHMsci5jZWxsQnVmZmVyU2l6ZT1BLmNlbGxCdWZmZXJTaXplO2xldCBuPWUud2ViV29ya2VyLG89bmV3IFRleHREZWNvZGVyKCJ1dGYtOCIpO2ZvcihsZXQgaSBvZlsicG9pbnRzIiwicG9pbnREYXRhIiwiY2VsbHMiLCJjZWxsRGF0YSJdKWlmKEFbaV09PT1udWxsKXJbaV09bnVsbDtlbHNle2xldCBnPW5ldyBVaW50OEFycmF5KEFbaV0uYnVmZmVyKSxDPWF3YWl0IGVBKGcse2NvbXByZXNzaW9uTGV2ZWw6NSxzdHJpbmdpZnk6ITAsd2ViV29ya2VyOm4sbm9Db3B5OmUubm9Db3B5fSk7bj1DLndlYldvcmtlcixyW2ldPW8uZGVjb2RlKEMub3V0cHV0LmJ1ZmZlcil9cmV0dXJue2VuY29kZWQ6cix3ZWJXb3JrZXI6bn19YXN5bmMgZnVuY3Rpb24gZW8oQSxlPXt9KXtsZXQgdD1BLHI9bmV3IE1hcChbWyJwb2ludHMiLCJwb2ludENvbXBvbmVudFR5cGUiXSxbInBvaW50RGF0YSIsInBvaW50UGl4ZWxDb21wb25lbnRUeXBlIl0sWyJjZWxscyIsImNlbGxDb21wb25lbnRUeXBlIl0sWyJjZWxsRGF0YSIsImNlbGxQaXhlbENvbXBvbmVudFR5cGUiXV0pLG49bmV3IFRleHRFbmNvZGVyLG89ZS53ZWJXb3JrZXI7Zm9yKGxldCBpIG9mWyJwb2ludHMiLCJwb2ludERhdGEiLCJjZWxscyIsImNlbGxEYXRhIl0paWYodFtpXT09PW51bGwpdFtpXT1udWxsO2Vsc2V7bGV0IGc9bmV3IFVpbnQ4QXJyYXkobi5lbmNvZGUodFtpXSkpLEM9YXdhaXQgdEEoZyx7cGFyc2VTdHJpbmc6ITAsd2ViV29ya2VyOm8sbm9Db3B5OiEwfSk7bz1DLndlYldvcmtlcix0W2ldPWsodC5tZXNoVHlwZVtyLmdldChpKV0sQy5vdXRwdXQuYnVmZmVyKX1yZXR1cm57ZGVjb2RlZDp0LHdlYldvcmtlcjpvfX1hc3luYyBmdW5jdGlvbiB0byhBLGU9e30pe2xldCByPW5ldyAkQShBLnBvbHlEYXRhVHlwZSk7ci5uYW1lPUEubmFtZSxyLm51bWJlck9mUG9pbnRzPUEubnVtYmVyT2ZQb2ludHMsci52ZXJ0aWNlc0J1ZmZlclNpemU9QS52ZXJ0aWNlc0J1ZmZlclNpemUsci5saW5lc0J1ZmZlclNpemU9QS5saW5lc0J1ZmZlclNpemUsci5wb2x5Z29uc0J1ZmZlclNpemU9QS5wb2x5Z29uc0J1ZmZlclNpemUsci50cmlhbmdsZVN0cmlwc0J1ZmZlclNpemU9QS50cmlhbmdsZVN0cmlwc0J1ZmZlclNpemUsci5udW1iZXJPZlBvaW50UGl4ZWxzPUEubnVtYmVyT2ZQb2ludFBpeGVscyxyLm51bWJlck9mQ2VsbFBpeGVscz1BLm51bWJlck9mQ2VsbFBpeGVscztsZXQgbj1lLndlYldvcmtlcixvPW5ldyBUZXh0RGVjb2RlcigidXRmLTgiKTtmb3IobGV0IGkgb2ZbInBvaW50cyIsInZlcnRpY2VzIiwibGluZXMiLCJwb2x5Z29ucyIsInRyaWFuZ2xlU3RyaXBzIiwicG9pbnREYXRhIiwiY2VsbERhdGEiXSlpZihBW2ldPT09bnVsbClyW2ldPW51bGw7ZWxzZXtsZXQgZz1uZXcgVWludDhBcnJheShBW2ldLmJ1ZmZlciksQz1hd2FpdCBlQShnLHtjb21wcmVzc2lvbkxldmVsOjUsc3RyaW5naWZ5OiEwLHdlYldvcmtlcjpuLG5vQ29weTplLm5vQ29weX0pO249Qy53ZWJXb3JrZXIscltpXT1vLmRlY29kZShDLm91dHB1dC5idWZmZXIpfXJldHVybntlbmNvZGVkOnIsd2ViV29ya2VyOm59fWFzeW5jIGZ1bmN0aW9uIHJvKEEsZT17fSl7bGV0IHQ9QSxyPW5ldyBNYXAoW1sicG9pbnRzIiwiZmxvYXQzMiJdLFsidmVydGljZXMiLCJ1aW50MzIiXSxbImxpbmVzIiwidWludDMyIl0sWyJwb2x5Z29ucyIsInVpbnQzMiJdLFsidHJpYW5nbGVTdHJpcHMiLCJ1aW50MzIiXSxbInBvaW50RGF0YSIsdC5wb2x5RGF0YVR5cGUucG9pbnRQaXhlbENvbXBvbmVudFR5cGVdLFsiY2VsbERhdGEiLHQucG9seURhdGFUeXBlLmNlbGxQaXhlbENvbXBvbmVudFR5cGVdXSksbj1uZXcgVGV4dEVuY29kZXIsbz1lLndlYldvcmtlcjtmb3IobGV0IGkgb2ZbInBvaW50cyIsInZlcnRpY2VzIiwibGluZXMiLCJwb2x5Z29ucyIsInRyaWFuZ2xlU3RyaXBzIiwicG9pbnREYXRhIiwiY2VsbERhdGEiXSlpZih0W2ldPT09bnVsbCl0W2ldPW51bGw7ZWxzZXtsZXQgZz1uZXcgVWludDhBcnJheShuLmVuY29kZSh0W2ldKSksQz1hd2FpdCB0QShnLHtwYXJzZVN0cmluZzohMCx3ZWJXb3JrZXI6byxub0NvcHk6ITB9KTtvPUMud2ViV29ya2VyLHRbaV09ayhyLmdldChpKSxDLm91dHB1dC5idWZmZXIpfXJldHVybntkZWNvZGVkOnQsd2ViV29ya2VyOm99fXZhciBadD0nZGF0YTp0ZXh0L2phdmFzY3JpcHQ7Y2hhcnNldD11dGYtOCx2YXIgbWU9T2JqZWN0LmRlZmluZVByb3BlcnR5O3ZhciB3ZT0oQSx0KT0+e2Zvcih2YXIgZSBpbiB0KW1lKEEsZSx7Z2V0OnRbZV0sZW51bWVyYWJsZTohMH0pfTt2YXIgZnQ9U3ltYm9sKCJDb21saW5rLnByb3h5IikscGU9U3ltYm9sKCJDb21saW5rLmVuZHBvaW50IiksU2U9U3ltYm9sKCJDb21saW5rLnJlbGVhc2VQcm94eSIpLFlBPVN5bWJvbCgiQ29tbGluay5maW5hbGl6ZXIiKSxhQT1TeW1ib2woIkNvbWxpbmsudGhyb3duIiksbHQ9QT0+dHlwZW9mIEE9PSJvYmplY3QiJiZBIT09bnVsbHx8dHlwZW9mIEE9PSJmdW5jdGlvbiIsRmU9e2NhbkhhbmRsZTpBPT5sdChBKSYmQVtmdF0sc2VyaWFsaXplKEEpe2xldHtwb3J0MTp0LHBvcnQyOmV9PW5ldyBNZXNzYWdlQ2hhbm5lbDtyZXR1cm4gZkEoQSx0KSxbZSxbZV1dfSxkZXNlcmlhbGl6ZShBKXtyZXR1cm4gQS5zdGFydCgpLEdlKEEpfX0sUmU9e2NhbkhhbmRsZTpBPT5sdChBKSYmYUEgaW4gQSxzZXJpYWxpemUoe3ZhbHVlOkF9KXtsZXQgdDtyZXR1cm4gQSBpbnN0YW5jZW9mIEVycm9yP3Q9e2lzRXJyb3I6ITAsdmFsdWU6e21lc3NhZ2U6QS5tZXNzYWdlLG5hbWU6QS5uYW1lLHN0YWNrOkEuc3RhY2t9fTp0PXtpc0Vycm9yOiExLHZhbHVlOkF9LFt0LFtdXX0sZGVzZXJpYWxpemUoQSl7dGhyb3cgQS5pc0Vycm9yP09iamVjdC5hc3NpZ24obmV3IEVycm9yKEEudmFsdWUubWVzc2FnZSksQS52YWx1ZSk6QS52YWx1ZX19LHV0PW5ldyBNYXAoW1sicHJveHkiLEZlXSxbInRocm93IixSZV1dKTtmdW5jdGlvbiBOZShBLHQpe2ZvcihsZXQgZSBvZiBBKWlmKHQ9PT1lfHxlPT09IioifHxlIGluc3RhbmNlb2YgUmVnRXhwJiZlLnRlc3QodCkpcmV0dXJuITA7cmV0dXJuITF9ZnVuY3Rpb24gZkEoQSx0PWdsb2JhbFRoaXMsZT1bIioiXSl7dC5hZGRFdmVudExpc3RlbmVyKCJtZXNzYWdlIixmdW5jdGlvbiBJKHIpe2lmKCFyfHwhci5kYXRhKXJldHVybjtpZighTmUoZSxyLm9yaWdpbikpe2NvbnNvbGUud2FybihgSW52YWxpZCBvcmlnaW4gXCcke3Iub3JpZ2lufVwnIGZvciBjb21saW5rIHByb3h5YCk7cmV0dXJufWxldHtpZDpvLHR5cGU6ZyxwYXRoOkN9PU9iamVjdC5hc3NpZ24oe3BhdGg6W119LHIuZGF0YSksUT0oci5kYXRhLmFyZ3VtZW50TGlzdHx8W10pLm1hcChPKSxhO3RyeXtsZXQgbj1DLnNsaWNlKDAsLTEpLnJlZHVjZSgoZixCKT0+ZltCXSxBKSxzPUMucmVkdWNlKChmLEIpPT5mW0JdLEEpO3N3aXRjaChnKXtjYXNlIkdFVCI6YT1zO2JyZWFrO2Nhc2UiU0VUIjpuW0Muc2xpY2UoLTEpWzBdXT1PKHIuZGF0YS52YWx1ZSksYT0hMDticmVhaztjYXNlIkFQUExZIjphPXMuYXBwbHkobixRKTticmVhaztjYXNlIkNPTlNUUlVDVCI6e2xldCBmPW5ldyBzKC4uLlEpO2E9YmUoZil9YnJlYWs7Y2FzZSJFTkRQT0lOVCI6e2xldHtwb3J0MTpmLHBvcnQyOkJ9PW5ldyBNZXNzYWdlQ2hhbm5lbDtmQShBLEIpLGE9TUEoZixbZl0pfWJyZWFrO2Nhc2UiUkVMRUFTRSI6YT12b2lkIDA7YnJlYWs7ZGVmYXVsdDpyZXR1cm59fWNhdGNoKG4pe2E9e3ZhbHVlOm4sW2FBXTowfX1Qcm9taXNlLnJlc29sdmUoYSkuY2F0Y2gobj0+KHt2YWx1ZTpuLFthQV06MH0pKS50aGVuKG49PntsZXRbcyxmXT1jQShuKTt0LnBvc3RNZXNzYWdlKE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSxzKSx7aWQ6b30pLGYpLGc9PT0iUkVMRUFTRSImJih0LnJlbW92ZUV2ZW50TGlzdGVuZXIoIm1lc3NhZ2UiLEkpLER0KHQpLFlBIGluIEEmJnR5cGVvZiBBW1lBXT09ImZ1bmN0aW9uIiYmQVtZQV0oKSl9KS5jYXRjaChuPT57bGV0W3MsZl09Y0Eoe3ZhbHVlOm5ldyBUeXBlRXJyb3IoIlVuc2VyaWFsaXphYmxlIHJldHVybiB2YWx1ZSIpLFthQV06MH0pO3QucG9zdE1lc3NhZ2UoT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LHMpLHtpZDpvfSksZil9KX0pLHQuc3RhcnQmJnQuc3RhcnQoKX1mdW5jdGlvbiBVZShBKXtyZXR1cm4gQS5jb25zdHJ1Y3Rvci5uYW1lPT09Ik1lc3NhZ2VQb3J0In1mdW5jdGlvbiBEdChBKXtVZShBKSYmQS5jbG9zZSgpfWZ1bmN0aW9uIEdlKEEsdCl7cmV0dXJuIHFBKEEsW10sdCl9ZnVuY3Rpb24gQkEoQSl7aWYoQSl0aHJvdyBuZXcgRXJyb3IoIlByb3h5IGhhcyBiZWVuIHJlbGVhc2VkIGFuZCBpcyBub3QgdXNlYWJsZSIpfWZ1bmN0aW9uIGh0KEEpe3JldHVybiBQKEEse3R5cGU6IlJFTEVBU0UifSkudGhlbigoKT0+e0R0KEEpfSl9dmFyIFFBPW5ldyBXZWFrTWFwLEVBPSJGaW5hbGl6YXRpb25SZWdpc3RyeSJpbiBnbG9iYWxUaGlzJiZuZXcgRmluYWxpemF0aW9uUmVnaXN0cnkoQT0+e2xldCB0PShRQS5nZXQoQSl8fDApLTE7UUEuc2V0KEEsdCksdD09PTAmJmh0KEEpfSk7ZnVuY3Rpb24ga2UoQSx0KXtsZXQgZT0oUUEuZ2V0KHQpfHwwKSsxO1FBLnNldCh0LGUpLEVBJiZFQS5yZWdpc3RlcihBLHQsQSl9ZnVuY3Rpb24gTGUoQSl7RUEmJkVBLnVucmVnaXN0ZXIoQSl9ZnVuY3Rpb24gcUEoQSx0PVtdLGU9ZnVuY3Rpb24oKXt9KXtsZXQgST0hMSxyPW5ldyBQcm94eShlLHtnZXQobyxnKXtpZihCQShJKSxnPT09U2UpcmV0dXJuKCk9PntMZShyKSxodChBKSxJPSEwfTtpZihnPT09InRoZW4iKXtpZih0Lmxlbmd0aD09PTApcmV0dXJue3RoZW46KCk9PnJ9O2xldCBDPVAoQSx7dHlwZToiR0VUIixwYXRoOnQubWFwKFE9PlEudG9TdHJpbmcoKSl9KS50aGVuKE8pO3JldHVybiBDLnRoZW4uYmluZChDKX1yZXR1cm4gcUEoQSxbLi4udCxnXSl9LHNldChvLGcsQyl7QkEoSSk7bGV0W1EsYV09Y0EoQyk7cmV0dXJuIFAoQSx7dHlwZToiU0VUIixwYXRoOlsuLi50LGddLm1hcChuPT5uLnRvU3RyaW5nKCkpLHZhbHVlOlF9LGEpLnRoZW4oTyl9LGFwcGx5KG8sZyxDKXtCQShJKTtsZXQgUT10W3QubGVuZ3RoLTFdO2lmKFE9PT1wZSlyZXR1cm4gUChBLHt0eXBlOiJFTkRQT0lOVCJ9KS50aGVuKE8pO2lmKFE9PT0iYmluZCIpcmV0dXJuIHFBKEEsdC5zbGljZSgwLC0xKSk7bGV0W2Esbl09Y3QoQyk7cmV0dXJuIFAoQSx7dHlwZToiQVBQTFkiLHBhdGg6dC5tYXAocz0+cy50b1N0cmluZygpKSxhcmd1bWVudExpc3Q6YX0sbikudGhlbihPKX0sY29uc3RydWN0KG8sZyl7QkEoSSk7bGV0W0MsUV09Y3QoZyk7cmV0dXJuIFAoQSx7dHlwZToiQ09OU1RSVUNUIixwYXRoOnQubWFwKGE9PmEudG9TdHJpbmcoKSksYXJndW1lbnRMaXN0OkN9LFEpLnRoZW4oTyl9fSk7cmV0dXJuIGtlKHIsQSkscn1mdW5jdGlvbiBKZShBKXtyZXR1cm4gQXJyYXkucHJvdG90eXBlLmNvbmNhdC5hcHBseShbXSxBKX1mdW5jdGlvbiBjdChBKXtsZXQgdD1BLm1hcChjQSk7cmV0dXJuW3QubWFwKGU9PmVbMF0pLEplKHQubWFwKGU9PmVbMV0pKV19dmFyIGR0PW5ldyBXZWFrTWFwO2Z1bmN0aW9uIE1BKEEsdCl7cmV0dXJuIGR0LnNldChBLHQpLEF9ZnVuY3Rpb24gYmUoQSl7cmV0dXJuIE9iamVjdC5hc3NpZ24oQSx7W2Z0XTohMH0pfWZ1bmN0aW9uIGNBKEEpe2ZvcihsZXRbdCxlXW9mIHV0KWlmKGUuY2FuSGFuZGxlKEEpKXtsZXRbSSxyXT1lLnNlcmlhbGl6ZShBKTtyZXR1cm5be3R5cGU6IkhBTkRMRVIiLG5hbWU6dCx2YWx1ZTpJfSxyXX1yZXR1cm5be3R5cGU6IlJBVyIsdmFsdWU6QX0sZHQuZ2V0KEEpfHxbXV19ZnVuY3Rpb24gTyhBKXtzd2l0Y2goQS50eXBlKXtjYXNlIkhBTkRMRVIiOnJldHVybiB1dC5nZXQoQS5uYW1lKS5kZXNlcmlhbGl6ZShBLnZhbHVlKTtjYXNlIlJBVyI6cmV0dXJuIEEudmFsdWV9fWZ1bmN0aW9uIFAoQSx0LGUpe3JldHVybiBuZXcgUHJvbWlzZShJPT57bGV0IHI9SGUoKTtBLmFkZEV2ZW50TGlzdGVuZXIoIm1lc3NhZ2UiLGZ1bmN0aW9uIG8oZyl7IWcuZGF0YXx8IWcuZGF0YS5pZHx8Zy5kYXRhLmlkIT09cnx8KEEucmVtb3ZlRXZlbnRMaXN0ZW5lcigibWVzc2FnZSIsbyksSShnLmRhdGEpKX0pLEEuc3RhcnQmJkEuc3RhcnQoKSxBLnBvc3RNZXNzYWdlKE9iamVjdC5hc3NpZ24oe2lkOnJ9LHQpLGUpfSl9ZnVuY3Rpb24gSGUoKXtyZXR1cm4gbmV3IEFycmF5KDQpLmZpbGwoMCkubWFwKCgpPT5NYXRoLmZsb29yKE1hdGgucmFuZG9tKCkqTnVtYmVyLk1BWF9TQUZFX0lOVEVHRVIpLnRvU3RyaW5nKDE2KSkuam9pbigiLSIpfWZ1bmN0aW9uIHYoQSx0KXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gQS5hcHBseSh0LGFyZ3VtZW50cyl9fXZhcnt0b1N0cmluZzpZZX09T2JqZWN0LnByb3RvdHlwZSx7Z2V0UHJvdG90eXBlT2Y6T0F9PU9iamVjdCx1QT0oQT0+dD0+e2xldCBlPVllLmNhbGwodCk7cmV0dXJuIEFbZV18fChBW2VdPWUuc2xpY2UoOCwtMSkudG9Mb3dlckNhc2UoKSl9KShPYmplY3QuY3JlYXRlKG51bGwpKSxHPUE9PihBPUEudG9Mb3dlckNhc2UoKSx0PT51QSh0KT09PUEpLERBPUE9PnQ9PnR5cGVvZiB0PT09QSx7aXNBcnJheTpqfT1BcnJheSwkPURBKCJ1bmRlZmluZWQiKTtmdW5jdGlvbiBxZShBKXtyZXR1cm4gQSE9PW51bGwmJiEkKEEpJiZBLmNvbnN0cnVjdG9yIT09bnVsbCYmISQoQS5jb25zdHJ1Y3RvcikmJk4oQS5jb25zdHJ1Y3Rvci5pc0J1ZmZlcikmJkEuY29uc3RydWN0b3IuaXNCdWZmZXIoQSl9dmFyIHB0PUcoIkFycmF5QnVmZmVyIik7ZnVuY3Rpb24gTWUoQSl7bGV0IHQ7cmV0dXJuIHR5cGVvZiBBcnJheUJ1ZmZlcjwidSImJkFycmF5QnVmZmVyLmlzVmlldz90PUFycmF5QnVmZmVyLmlzVmlldyhBKTp0PUEmJkEuYnVmZmVyJiZwdChBLmJ1ZmZlciksdH12YXIgVGU9REEoInN0cmluZyIpLE49REEoImZ1bmN0aW9uIiksU3Q9REEoIm51bWJlciIpLGhBPUE9PkEhPT1udWxsJiZ0eXBlb2YgQT09Im9iamVjdCIsS2U9QT0+QT09PSEwfHxBPT09ITEsbEE9QT0+e2lmKHVBKEEpIT09Im9iamVjdCIpcmV0dXJuITE7bGV0IHQ9T0EoQSk7cmV0dXJuKHQ9PT1udWxsfHx0PT09T2JqZWN0LnByb3RvdHlwZXx8T2JqZWN0LmdldFByb3RvdHlwZU9mKHQpPT09bnVsbCkmJiEoU3ltYm9sLnRvU3RyaW5nVGFnIGluIEEpJiYhKFN5bWJvbC5pdGVyYXRvciBpbiBBKX0sT2U9RygiRGF0ZSIpLHhlPUcoIkZpbGUiKSxQZT1HKCJCbG9iIiksamU9RygiRmlsZUxpc3QiKSxXZT1BPT5oQShBKSYmTihBLnBpcGUpLFplPUE9PntsZXQgdDtyZXR1cm4gQSYmKHR5cGVvZiBGb3JtRGF0YT09ImZ1bmN0aW9uIiYmQSBpbnN0YW5jZW9mIEZvcm1EYXRhfHxOKEEuYXBwZW5kKSYmKCh0PXVBKEEpKT09PSJmb3JtZGF0YSJ8fHQ9PT0ib2JqZWN0IiYmTihBLnRvU3RyaW5nKSYmQS50b1N0cmluZygpPT09IltvYmplY3QgRm9ybURhdGFdIikpfSxWZT1HKCJVUkxTZWFyY2hQYXJhbXMiKSxbX2UsWGUsemUsdmVdPVsiUmVhZGFibGVTdHJlYW0iLCJSZXF1ZXN0IiwiUmVzcG9uc2UiLCJIZWFkZXJzIl0ubWFwKEcpLCRlPUE9PkEudHJpbT9BLnRyaW0oKTpBLnJlcGxhY2UoL15bXFxzXFx1RkVGRlxceEEwXSt8W1xcc1xcdUZFRkZcXHhBMF0rJC9nLCIiKTtmdW5jdGlvbiBBQShBLHQse2FsbE93bktleXM6ZT0hMX09e30pe2lmKEE9PT1udWxsfHx0eXBlb2YgQT4idSIpcmV0dXJuO2xldCBJLHI7aWYodHlwZW9mIEEhPSJvYmplY3QiJiYoQT1bQV0pLGooQSkpZm9yKEk9MCxyPUEubGVuZ3RoO0k8cjtJKyspdC5jYWxsKG51bGwsQVtJXSxJLEEpO2Vsc2V7bGV0IG89ZT9PYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhBKTpPYmplY3Qua2V5cyhBKSxnPW8ubGVuZ3RoLEM7Zm9yKEk9MDtJPGc7SSsrKUM9b1tJXSx0LmNhbGwobnVsbCxBW0NdLEMsQSl9fWZ1bmN0aW9uIEZ0KEEsdCl7dD10LnRvTG93ZXJDYXNlKCk7bGV0IGU9T2JqZWN0LmtleXMoQSksST1lLmxlbmd0aCxyO2Zvcig7SS0tID4wOylpZihyPWVbSV0sdD09PXIudG9Mb3dlckNhc2UoKSlyZXR1cm4gcjtyZXR1cm4gbnVsbH12YXIgeD10eXBlb2YgZ2xvYmFsVGhpczwidSI/Z2xvYmFsVGhpczp0eXBlb2Ygc2VsZjwidSI/c2VsZjp0eXBlb2Ygd2luZG93PCJ1Ij93aW5kb3c6Z2xvYmFsLFJ0PUE9PiEkKEEpJiZBIT09eDtmdW5jdGlvbiBLQSgpe2xldHtjYXNlbGVzczpBfT1SdCh0aGlzKSYmdGhpc3x8e30sdD17fSxlPShJLHIpPT57bGV0IG89QSYmRnQodCxyKXx8cjtsQSh0W29dKSYmbEEoSSk/dFtvXT1LQSh0W29dLEkpOmxBKEkpP3Rbb109S0Eoe30sSSk6aihJKT90W29dPUkuc2xpY2UoKTp0W29dPUl9O2ZvcihsZXQgST0wLHI9YXJndW1lbnRzLmxlbmd0aDtJPHI7SSsrKWFyZ3VtZW50c1tJXSYmQUEoYXJndW1lbnRzW0ldLGUpO3JldHVybiB0fXZhciBBST0oQSx0LGUse2FsbE93bktleXM6SX09e30pPT4oQUEodCwocixvKT0+e2UmJk4ocik/QVtvXT12KHIsZSk6QVtvXT1yfSx7YWxsT3duS2V5czpJfSksQSksdEk9QT0+KEEuY2hhckNvZGVBdCgwKT09PTY1Mjc5JiYoQT1BLnNsaWNlKDEpKSxBKSxlST0oQSx0LGUsSSk9PntBLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHQucHJvdG90eXBlLEkpLEEucHJvdG90eXBlLmNvbnN0cnVjdG9yPUEsT2JqZWN0LmRlZmluZVByb3BlcnR5KEEsInN1cGVyIix7dmFsdWU6dC5wcm90b3R5cGV9KSxlJiZPYmplY3QuYXNzaWduKEEucHJvdG90eXBlLGUpfSxJST0oQSx0LGUsSSk9PntsZXQgcixvLGcsQz17fTtpZih0PXR8fHt9LEE9PW51bGwpcmV0dXJuIHQ7ZG97Zm9yKHI9T2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoQSksbz1yLmxlbmd0aDtvLS0gPjA7KWc9cltvXSwoIUl8fEkoZyxBLHQpKSYmIUNbZ10mJih0W2ddPUFbZ10sQ1tnXT0hMCk7QT1lIT09ITEmJk9BKEEpfXdoaWxlKEEmJighZXx8ZShBLHQpKSYmQSE9PU9iamVjdC5wcm90b3R5cGUpO3JldHVybiB0fSxyST0oQSx0LGUpPT57QT1TdHJpbmcoQSksKGU9PT12b2lkIDB8fGU+QS5sZW5ndGgpJiYoZT1BLmxlbmd0aCksZS09dC5sZW5ndGg7bGV0IEk9QS5pbmRleE9mKHQsZSk7cmV0dXJuIEkhPT0tMSYmST09PWV9LG9JPUE9PntpZighQSlyZXR1cm4gbnVsbDtpZihqKEEpKXJldHVybiBBO2xldCB0PUEubGVuZ3RoO2lmKCFTdCh0KSlyZXR1cm4gbnVsbDtsZXQgZT1uZXcgQXJyYXkodCk7Zm9yKDt0LS0gPjA7KWVbdF09QVt0XTtyZXR1cm4gZX0sZ0k9KEE9PnQ9PkEmJnQgaW5zdGFuY2VvZiBBKSh0eXBlb2YgVWludDhBcnJheTwidSImJk9BKFVpbnQ4QXJyYXkpKSxpST0oQSx0KT0+e2xldCBJPShBJiZBW1N5bWJvbC5pdGVyYXRvcl0pLmNhbGwoQSkscjtmb3IoOyhyPUkubmV4dCgpKSYmIXIuZG9uZTspe2xldCBvPXIudmFsdWU7dC5jYWxsKEEsb1swXSxvWzFdKX19LG5JPShBLHQpPT57bGV0IGUsST1bXTtmb3IoOyhlPUEuZXhlYyh0KSkhPT1udWxsOylJLnB1c2goZSk7cmV0dXJuIEl9LHNJPUcoIkhUTUxGb3JtRWxlbWVudCIpLENJPUE9PkEudG9Mb3dlckNhc2UoKS5yZXBsYWNlKC9bLV9cXHNdKFthLXpcXGRdKShcXHcqKS9nLGZ1bmN0aW9uKGUsSSxyKXtyZXR1cm4gSS50b1VwcGVyQ2FzZSgpK3J9KSxtdD0oKHtoYXNPd25Qcm9wZXJ0eTpBfSk9Pih0LGUpPT5BLmNhbGwodCxlKSkoT2JqZWN0LnByb3RvdHlwZSksQkk9RygiUmVnRXhwIiksTnQ9KEEsdCk9PntsZXQgZT1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyhBKSxJPXt9O0FBKGUsKHIsbyk9PntsZXQgZzsoZz10KHIsbyxBKSkhPT0hMSYmKElbb109Z3x8cil9KSxPYmplY3QuZGVmaW5lUHJvcGVydGllcyhBLEkpfSxhST1BPT57TnQoQSwodCxlKT0+e2lmKE4oQSkmJlsiYXJndW1lbnRzIiwiY2FsbGVyIiwiY2FsbGVlIl0uaW5kZXhPZihlKSE9PS0xKXJldHVybiExO2xldCBJPUFbZV07aWYoTihJKSl7aWYodC5lbnVtZXJhYmxlPSExLCJ3cml0YWJsZSJpbiB0KXt0LndyaXRhYmxlPSExO3JldHVybn10LnNldHx8KHQuc2V0PSgpPT57dGhyb3cgRXJyb3IoIkNhbiBub3QgcmV3cml0ZSByZWFkLW9ubHkgbWV0aG9kIFwnIitlKyJcJyIpfSl9fSl9LFFJPShBLHQpPT57bGV0IGU9e30sST1yPT57ci5mb3JFYWNoKG89PntlW29dPSEwfSl9O3JldHVybiBqKEEpP0koQSk6SShTdHJpbmcoQSkuc3BsaXQodCkpLGV9LEVJPSgpPT57fSxjST0oQSx0KT0+QSE9bnVsbCYmTnVtYmVyLmlzRmluaXRlKEE9K0EpP0E6dCxUQT0iYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXoiLHd0PSIwMTIzNDU2Nzg5IixVdD17RElHSVQ6d3QsQUxQSEE6VEEsQUxQSEFfRElHSVQ6VEErVEEudG9VcHBlckNhc2UoKSt3dH0sZkk9KEE9MTYsdD1VdC5BTFBIQV9ESUdJVCk9PntsZXQgZT0iIix7bGVuZ3RoOkl9PXQ7Zm9yKDtBLS07KWUrPXRbTWF0aC5yYW5kb20oKSpJfDBdO3JldHVybiBlfTtmdW5jdGlvbiBsSShBKXtyZXR1cm4hIShBJiZOKEEuYXBwZW5kKSYmQVtTeW1ib2wudG9TdHJpbmdUYWddPT09IkZvcm1EYXRhIiYmQVtTeW1ib2wuaXRlcmF0b3JdKX12YXIgdUk9QT0+e2xldCB0PW5ldyBBcnJheSgxMCksZT0oSSxyKT0+e2lmKGhBKEkpKXtpZih0LmluZGV4T2YoSSk+PTApcmV0dXJuO2lmKCEoInRvSlNPTiJpbiBJKSl7dFtyXT1JO2xldCBvPWooSSk/W106e307cmV0dXJuIEFBKEksKGcsQyk9PntsZXQgUT1lKGcscisxKTshJChRKSYmKG9bQ109USl9KSx0W3JdPXZvaWQgMCxvfX1yZXR1cm4gSX07cmV0dXJuIGUoQSwwKX0sREk9RygiQXN5bmNGdW5jdGlvbiIpLGhJPUE9PkEmJihoQShBKXx8TihBKSkmJk4oQS50aGVuKSYmTihBLmNhdGNoKSxHdD0oKEEsdCk9PkE/c2V0SW1tZWRpYXRlOnQ/KChlLEkpPT4oeC5hZGRFdmVudExpc3RlbmVyKCJtZXNzYWdlIiwoe3NvdXJjZTpyLGRhdGE6b30pPT57cj09PXgmJm89PT1lJiZJLmxlbmd0aCYmSS5zaGlmdCgpKCl9LCExKSxyPT57SS5wdXNoKHIpLHgucG9zdE1lc3NhZ2UoZSwiKiIpfSkpKGBheGlvc0Ake01hdGgucmFuZG9tKCl9YCxbXSk6ZT0+c2V0VGltZW91dChlKSkodHlwZW9mIHNldEltbWVkaWF0ZT09ImZ1bmN0aW9uIixOKHgucG9zdE1lc3NhZ2UpKSxkST10eXBlb2YgcXVldWVNaWNyb3Rhc2s8InUiP3F1ZXVlTWljcm90YXNrLmJpbmQoeCk6dHlwZW9mIHByb2Nlc3M8InUiJiZwcm9jZXNzLm5leHRUaWNrfHxHdCxpPXtpc0FycmF5OmosaXNBcnJheUJ1ZmZlcjpwdCxpc0J1ZmZlcjpxZSxpc0Zvcm1EYXRhOlplLGlzQXJyYXlCdWZmZXJWaWV3Ok1lLGlzU3RyaW5nOlRlLGlzTnVtYmVyOlN0LGlzQm9vbGVhbjpLZSxpc09iamVjdDpoQSxpc1BsYWluT2JqZWN0OmxBLGlzUmVhZGFibGVTdHJlYW06X2UsaXNSZXF1ZXN0OlhlLGlzUmVzcG9uc2U6emUsaXNIZWFkZXJzOnZlLGlzVW5kZWZpbmVkOiQsaXNEYXRlOk9lLGlzRmlsZTp4ZSxpc0Jsb2I6UGUsaXNSZWdFeHA6QkksaXNGdW5jdGlvbjpOLGlzU3RyZWFtOldlLGlzVVJMU2VhcmNoUGFyYW1zOlZlLGlzVHlwZWRBcnJheTpnSSxpc0ZpbGVMaXN0OmplLGZvckVhY2g6QUEsbWVyZ2U6S0EsZXh0ZW5kOkFJLHRyaW06JGUsc3RyaXBCT006dEksaW5oZXJpdHM6ZUksdG9GbGF0T2JqZWN0OklJLGtpbmRPZjp1QSxraW5kT2ZUZXN0OkcsZW5kc1dpdGg6ckksdG9BcnJheTpvSSxmb3JFYWNoRW50cnk6aUksbWF0Y2hBbGw6bkksaXNIVE1MRm9ybTpzSSxoYXNPd25Qcm9wZXJ0eTptdCxoYXNPd25Qcm9wOm10LHJlZHVjZURlc2NyaXB0b3JzOk50LGZyZWV6ZU1ldGhvZHM6YUksdG9PYmplY3RTZXQ6UUksdG9DYW1lbENhc2U6Q0ksbm9vcDpFSSx0b0Zpbml0ZU51bWJlcjpjSSxmaW5kS2V5OkZ0LGdsb2JhbDp4LGlzQ29udGV4dERlZmluZWQ6UnQsQUxQSEFCRVQ6VXQsZ2VuZXJhdGVTdHJpbmc6ZkksaXNTcGVjQ29tcGxpYW50Rm9ybTpsSSx0b0pTT05PYmplY3Q6dUksaXNBc3luY0ZuOkRJLGlzVGhlbmFibGU6aEksc2V0SW1tZWRpYXRlOkd0LGFzYXA6ZEl9O2Z1bmN0aW9uIFcoQSx0LGUsSSxyKXtFcnJvci5jYWxsKHRoaXMpLEVycm9yLmNhcHR1cmVTdGFja1RyYWNlP0Vycm9yLmNhcHR1cmVTdGFja1RyYWNlKHRoaXMsdGhpcy5jb25zdHJ1Y3Rvcik6dGhpcy5zdGFjaz1uZXcgRXJyb3IoKS5zdGFjayx0aGlzLm1lc3NhZ2U9QSx0aGlzLm5hbWU9IkF4aW9zRXJyb3IiLHQmJih0aGlzLmNvZGU9dCksZSYmKHRoaXMuY29uZmlnPWUpLEkmJih0aGlzLnJlcXVlc3Q9SSksciYmKHRoaXMucmVzcG9uc2U9cil9aS5pbmhlcml0cyhXLEVycm9yLHt0b0pTT046ZnVuY3Rpb24oKXtyZXR1cm57bWVzc2FnZTp0aGlzLm1lc3NhZ2UsbmFtZTp0aGlzLm5hbWUsZGVzY3JpcHRpb246dGhpcy5kZXNjcmlwdGlvbixudW1iZXI6dGhpcy5udW1iZXIsZmlsZU5hbWU6dGhpcy5maWxlTmFtZSxsaW5lTnVtYmVyOnRoaXMubGluZU51bWJlcixjb2x1bW5OdW1iZXI6dGhpcy5jb2x1bW5OdW1iZXIsc3RhY2s6dGhpcy5zdGFjayxjb25maWc6aS50b0pTT05PYmplY3QodGhpcy5jb25maWcpLGNvZGU6dGhpcy5jb2RlLHN0YXR1czp0aGlzLnJlc3BvbnNlJiZ0aGlzLnJlc3BvbnNlLnN0YXR1cz90aGlzLnJlc3BvbnNlLnN0YXR1czpudWxsfX19KTt2YXIga3Q9Vy5wcm90b3R5cGUsTHQ9e307WyJFUlJfQkFEX09QVElPTl9WQUxVRSIsIkVSUl9CQURfT1BUSU9OIiwiRUNPTk5BQk9SVEVEIiwiRVRJTUVET1VUIiwiRVJSX05FVFdPUksiLCJFUlJfRlJfVE9PX01BTllfUkVESVJFQ1RTIiwiRVJSX0RFUFJFQ0FURUQiLCJFUlJfQkFEX1JFU1BPTlNFIiwiRVJSX0JBRF9SRVFVRVNUIiwiRVJSX0NBTkNFTEVEIiwiRVJSX05PVF9TVVBQT1JUIiwiRVJSX0lOVkFMSURfVVJMIl0uZm9yRWFjaChBPT57THRbQV09e3ZhbHVlOkF9fSk7T2JqZWN0LmRlZmluZVByb3BlcnRpZXMoVyxMdCk7T2JqZWN0LmRlZmluZVByb3BlcnR5KGt0LCJpc0F4aW9zRXJyb3IiLHt2YWx1ZTohMH0pO1cuZnJvbT0oQSx0LGUsSSxyLG8pPT57bGV0IGc9T2JqZWN0LmNyZWF0ZShrdCk7cmV0dXJuIGkudG9GbGF0T2JqZWN0KEEsZyxmdW5jdGlvbihRKXtyZXR1cm4gUSE9PUVycm9yLnByb3RvdHlwZX0sQz0+QyE9PSJpc0F4aW9zRXJyb3IiKSxXLmNhbGwoZyxBLm1lc3NhZ2UsdCxlLEksciksZy5jYXVzZT1BLGcubmFtZT1BLm5hbWUsbyYmT2JqZWN0LmFzc2lnbihnLG8pLGd9O3ZhciB1PVc7dmFyIGRBPW51bGw7ZnVuY3Rpb24geEEoQSl7cmV0dXJuIGkuaXNQbGFpbk9iamVjdChBKXx8aS5pc0FycmF5KEEpfWZ1bmN0aW9uIGJ0KEEpe3JldHVybiBpLmVuZHNXaXRoKEEsIltdIik/QS5zbGljZSgwLC0yKTpBfWZ1bmN0aW9uIEp0KEEsdCxlKXtyZXR1cm4gQT9BLmNvbmNhdCh0KS5tYXAoZnVuY3Rpb24ocixvKXtyZXR1cm4gcj1idChyKSwhZSYmbz8iWyIrcisiXSI6cn0pLmpvaW4oZT8iLiI6IiIpOnR9ZnVuY3Rpb24geUkoQSl7cmV0dXJuIGkuaXNBcnJheShBKSYmIUEuc29tZSh4QSl9dmFyIG1JPWkudG9GbGF0T2JqZWN0KGkse30sbnVsbCxmdW5jdGlvbih0KXtyZXR1cm4vXmlzW0EtWl0vLnRlc3QodCl9KTtmdW5jdGlvbiB3SShBLHQsZSl7aWYoIWkuaXNPYmplY3QoQSkpdGhyb3cgbmV3IFR5cGVFcnJvcigidGFyZ2V0IG11c3QgYmUgYW4gb2JqZWN0Iik7dD10fHxuZXcoZEF8fEZvcm1EYXRhKSxlPWkudG9GbGF0T2JqZWN0KGUse21ldGFUb2tlbnM6ITAsZG90czohMSxpbmRleGVzOiExfSwhMSxmdW5jdGlvbihsLGMpe3JldHVybiFpLmlzVW5kZWZpbmVkKGNbbF0pfSk7bGV0IEk9ZS5tZXRhVG9rZW5zLHI9ZS52aXNpdG9yfHxuLG89ZS5kb3RzLGc9ZS5pbmRleGVzLFE9KGUuQmxvYnx8dHlwZW9mIEJsb2I8InUiJiZCbG9iKSYmaS5pc1NwZWNDb21wbGlhbnRGb3JtKHQpO2lmKCFpLmlzRnVuY3Rpb24ocikpdGhyb3cgbmV3IFR5cGVFcnJvcigidmlzaXRvciBtdXN0IGJlIGEgZnVuY3Rpb24iKTtmdW5jdGlvbiBhKEUpe2lmKEU9PT1udWxsKXJldHVybiIiO2lmKGkuaXNEYXRlKEUpKXJldHVybiBFLnRvSVNPU3RyaW5nKCk7aWYoIVEmJmkuaXNCbG9iKEUpKXRocm93IG5ldyB1KCJCbG9iIGlzIG5vdCBzdXBwb3J0ZWQuIFVzZSBhIEJ1ZmZlciBpbnN0ZWFkLiIpO3JldHVybiBpLmlzQXJyYXlCdWZmZXIoRSl8fGkuaXNUeXBlZEFycmF5KEUpP1EmJnR5cGVvZiBCbG9iPT0iZnVuY3Rpb24iP25ldyBCbG9iKFtFXSk6QnVmZmVyLmZyb20oRSk6RX1mdW5jdGlvbiBuKEUsbCxjKXtsZXQgcD1FO2lmKEUmJiFjJiZ0eXBlb2YgRT09Im9iamVjdCIpe2lmKGkuZW5kc1dpdGgobCwie30iKSlsPUk/bDpsLnNsaWNlKDAsLTIpLEU9SlNPTi5zdHJpbmdpZnkoRSk7ZWxzZSBpZihpLmlzQXJyYXkoRSkmJnlJKEUpfHwoaS5pc0ZpbGVMaXN0KEUpfHxpLmVuZHNXaXRoKGwsIltdIikpJiYocD1pLnRvQXJyYXkoRSkpKXJldHVybiBsPWJ0KGwpLHAuZm9yRWFjaChmdW5jdGlvbihELFUpeyEoaS5pc1VuZGVmaW5lZChEKXx8RD09PW51bGwpJiZ0LmFwcGVuZChnPT09ITA/SnQoW2xdLFUsbyk6Zz09PW51bGw/bDpsKyJbXSIsYShEKSl9KSwhMX1yZXR1cm4geEEoRSk/ITA6KHQuYXBwZW5kKEp0KGMsbCxvKSxhKEUpKSwhMSl9bGV0IHM9W10sZj1PYmplY3QuYXNzaWduKG1JLHtkZWZhdWx0VmlzaXRvcjpuLGNvbnZlcnRWYWx1ZTphLGlzVmlzaXRhYmxlOnhBfSk7ZnVuY3Rpb24gQihFLGwpe2lmKCFpLmlzVW5kZWZpbmVkKEUpKXtpZihzLmluZGV4T2YoRSkhPT0tMSl0aHJvdyBFcnJvcigiQ2lyY3VsYXIgcmVmZXJlbmNlIGRldGVjdGVkIGluICIrbC5qb2luKCIuIikpO3MucHVzaChFKSxpLmZvckVhY2goRSxmdW5jdGlvbihwLFMpeyghKGkuaXNVbmRlZmluZWQocCl8fHA9PT1udWxsKSYmci5jYWxsKHQscCxpLmlzU3RyaW5nKFMpP1MudHJpbSgpOlMsbCxmKSk9PT0hMCYmQihwLGw/bC5jb25jYXQoUyk6W1NdKX0pLHMucG9wKCl9fWlmKCFpLmlzT2JqZWN0KEEpKXRocm93IG5ldyBUeXBlRXJyb3IoImRhdGEgbXVzdCBiZSBhbiBvYmplY3QiKTtyZXR1cm4gQihBKSx0fXZhciBxPXdJO2Z1bmN0aW9uIEh0KEEpe2xldCB0PXsiISI6IiUyNTIxIiwiXCciOiIlMjUyNyIsIigiOiIlMjUyOCIsIikiOiIlMjUyOSIsIn4iOiIlMjU3RSIsIiUyNTIwIjoiKyIsIiUyNTAwIjoiXFwwIn07cmV0dXJuIGVuY29kZVVSSUNvbXBvbmVudChBKS5yZXBsYWNlKC9bIVwnKCl+XXwlMjUyMHwlMjUwMC9nLGZ1bmN0aW9uKEkpe3JldHVybiB0W0ldfSl9ZnVuY3Rpb24gWXQoQSx0KXt0aGlzLl9wYWlycz1bXSxBJiZxKEEsdGhpcyx0KX12YXIgcXQ9WXQucHJvdG90eXBlO3F0LmFwcGVuZD1mdW5jdGlvbih0LGUpe3RoaXMuX3BhaXJzLnB1c2goW3QsZV0pfTtxdC50b1N0cmluZz1mdW5jdGlvbih0KXtsZXQgZT10P2Z1bmN0aW9uKEkpe3JldHVybiB0LmNhbGwodGhpcyxJLEh0KX06SHQ7cmV0dXJuIHRoaXMuX3BhaXJzLm1hcChmdW5jdGlvbihyKXtyZXR1cm4gZShyWzBdKSsiPSIrZShyWzFdKX0sIiIpLmpvaW4oIiYiKX07dmFyIHlBPVl0O2Z1bmN0aW9uIHBJKEEpe3JldHVybiBlbmNvZGVVUklDb21wb25lbnQoQSkucmVwbGFjZSgvJTI1M0EvZ2ksIjoiKS5yZXBsYWNlKC8lMjUyNC9nLCIkIikucmVwbGFjZSgvJTI1MkMvZ2ksIiwiKS5yZXBsYWNlKC8lMjUyMC9nLCIrIikucmVwbGFjZSgvJTI1NUIvZ2ksIlsiKS5yZXBsYWNlKC8lMjU1RC9naSwiXSIpfWZ1bmN0aW9uIHRBKEEsdCxlKXtpZighdClyZXR1cm4gQTtsZXQgST1lJiZlLmVuY29kZXx8cEkscj1lJiZlLnNlcmlhbGl6ZSxvO2lmKHI/bz1yKHQsZSk6bz1pLmlzVVJMU2VhcmNoUGFyYW1zKHQpP3QudG9TdHJpbmcoKTpuZXcgeUEodCxlKS50b1N0cmluZyhJKSxvKXtsZXQgZz1BLmluZGV4T2YoIiUyMyIpO2chPT0tMSYmKEE9QS5zbGljZSgwLGcpKSxBKz0oQS5pbmRleE9mKCI/Iik9PT0tMT8iPyI6IiYiKStvfXJldHVybiBBfXZhciBQQT1jbGFzc3tjb25zdHJ1Y3Rvcigpe3RoaXMuaGFuZGxlcnM9W119dXNlKHQsZSxJKXtyZXR1cm4gdGhpcy5oYW5kbGVycy5wdXNoKHtmdWxmaWxsZWQ6dCxyZWplY3RlZDplLHN5bmNocm9ub3VzOkk/SS5zeW5jaHJvbm91czohMSxydW5XaGVuOkk/SS5ydW5XaGVuOm51bGx9KSx0aGlzLmhhbmRsZXJzLmxlbmd0aC0xfWVqZWN0KHQpe3RoaXMuaGFuZGxlcnNbdF0mJih0aGlzLmhhbmRsZXJzW3RdPW51bGwpfWNsZWFyKCl7dGhpcy5oYW5kbGVycyYmKHRoaXMuaGFuZGxlcnM9W10pfWZvckVhY2godCl7aS5mb3JFYWNoKHRoaXMuaGFuZGxlcnMsZnVuY3Rpb24oSSl7SSE9PW51bGwmJnQoSSl9KX19LGpBPVBBO3ZhciBtQT17c2lsZW50SlNPTlBhcnNpbmc6ITAsZm9yY2VkSlNPTlBhcnNpbmc6ITAsY2xhcmlmeVRpbWVvdXRFcnJvcjohMX07dmFyIE10PXR5cGVvZiBVUkxTZWFyY2hQYXJhbXM8InUiP1VSTFNlYXJjaFBhcmFtczp5QTt2YXIgVHQ9dHlwZW9mIEZvcm1EYXRhPCJ1Ij9Gb3JtRGF0YTpudWxsO3ZhciBLdD10eXBlb2YgQmxvYjwidSI/QmxvYjpudWxsO3ZhciBPdD17aXNCcm93c2VyOiEwLGNsYXNzZXM6e1VSTFNlYXJjaFBhcmFtczpNdCxGb3JtRGF0YTpUdCxCbG9iOkt0fSxwcm90b2NvbHM6WyJodHRwIiwiaHR0cHMiLCJmaWxlIiwiYmxvYiIsInVybCIsImRhdGEiXX07dmFyIFpBPXt9O3dlKFpBLHtoYXNCcm93c2VyRW52OigpPT5XQSxoYXNTdGFuZGFyZEJyb3dzZXJFbnY6KCk9PlNJLGhhc1N0YW5kYXJkQnJvd3NlcldlYldvcmtlckVudjooKT0+Rkksb3JpZ2luOigpPT5SSX0pO3ZhciBXQT10eXBlb2Ygd2luZG93PCJ1IiYmdHlwZW9mIGRvY3VtZW50PCJ1IixTST0oQT0+V0EmJlsiUmVhY3ROYXRpdmUiLCJOYXRpdmVTY3JpcHQiLCJOUyJdLmluZGV4T2YoQSk8MCkodHlwZW9mIG5hdmlnYXRvcjwidSImJm5hdmlnYXRvci5wcm9kdWN0KSxGST10eXBlb2YgV29ya2VyR2xvYmFsU2NvcGU8InUiJiZzZWxmIGluc3RhbmNlb2YgV29ya2VyR2xvYmFsU2NvcGUmJnR5cGVvZiBzZWxmLmltcG9ydFNjcmlwdHM9PSJmdW5jdGlvbiIsUkk9V0EmJndpbmRvdy5sb2NhdGlvbi5ocmVmfHwiaHR0cDovL2xvY2FsaG9zdCI7dmFyIHc9ey4uLlpBLC4uLk90fTtmdW5jdGlvbiBWQShBLHQpe3JldHVybiBxKEEsbmV3IHcuY2xhc3Nlcy5VUkxTZWFyY2hQYXJhbXMsT2JqZWN0LmFzc2lnbih7dmlzaXRvcjpmdW5jdGlvbihlLEkscixvKXtyZXR1cm4gdy5pc05vZGUmJmkuaXNCdWZmZXIoZSk/KHRoaXMuYXBwZW5kKEksZS50b1N0cmluZygiYmFzZTY0IikpLCExKTpvLmRlZmF1bHRWaXNpdG9yLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19LHQpKX1mdW5jdGlvbiBOSShBKXtyZXR1cm4gaS5tYXRjaEFsbCgvXFx3K3xcXFsoXFx3KildL2csQSkubWFwKHQ9PnRbMF09PT0iW10iPyIiOnRbMV18fHRbMF0pfWZ1bmN0aW9uIFVJKEEpe2xldCB0PXt9LGU9T2JqZWN0LmtleXMoQSksSSxyPWUubGVuZ3RoLG87Zm9yKEk9MDtJPHI7SSsrKW89ZVtJXSx0W29dPUFbb107cmV0dXJuIHR9ZnVuY3Rpb24gR0koQSl7ZnVuY3Rpb24gdChlLEkscixvKXtsZXQgZz1lW28rK107aWYoZz09PSJfX3Byb3RvX18iKXJldHVybiEwO2xldCBDPU51bWJlci5pc0Zpbml0ZSgrZyksUT1vPj1lLmxlbmd0aDtyZXR1cm4gZz0hZyYmaS5pc0FycmF5KHIpP3IubGVuZ3RoOmcsUT8oaS5oYXNPd25Qcm9wKHIsZyk/cltnXT1bcltnXSxJXTpyW2ddPUksIUMpOigoIXJbZ118fCFpLmlzT2JqZWN0KHJbZ10pKSYmKHJbZ109W10pLHQoZSxJLHJbZ10sbykmJmkuaXNBcnJheShyW2ddKSYmKHJbZ109VUkocltnXSkpLCFDKX1pZihpLmlzRm9ybURhdGEoQSkmJmkuaXNGdW5jdGlvbihBLmVudHJpZXMpKXtsZXQgZT17fTtyZXR1cm4gaS5mb3JFYWNoRW50cnkoQSwoSSxyKT0+e3QoTkkoSSkscixlLDApfSksZX1yZXR1cm4gbnVsbH12YXIgd0E9R0k7ZnVuY3Rpb24ga0koQSx0LGUpe2lmKGkuaXNTdHJpbmcoQSkpdHJ5e3JldHVybih0fHxKU09OLnBhcnNlKShBKSxpLnRyaW0oQSl9Y2F0Y2goSSl7aWYoSS5uYW1lIT09IlN5bnRheEVycm9yIil0aHJvdyBJfXJldHVybihlfHxKU09OLnN0cmluZ2lmeSkoQSl9dmFyIF9BPXt0cmFuc2l0aW9uYWw6bUEsYWRhcHRlcjpbInhociIsImh0dHAiLCJmZXRjaCJdLHRyYW5zZm9ybVJlcXVlc3Q6W2Z1bmN0aW9uKHQsZSl7bGV0IEk9ZS5nZXRDb250ZW50VHlwZSgpfHwiIixyPUkuaW5kZXhPZigiYXBwbGljYXRpb24vanNvbiIpPi0xLG89aS5pc09iamVjdCh0KTtpZihvJiZpLmlzSFRNTEZvcm0odCkmJih0PW5ldyBGb3JtRGF0YSh0KSksaS5pc0Zvcm1EYXRhKHQpKXJldHVybiByP0pTT04uc3RyaW5naWZ5KHdBKHQpKTp0O2lmKGkuaXNBcnJheUJ1ZmZlcih0KXx8aS5pc0J1ZmZlcih0KXx8aS5pc1N0cmVhbSh0KXx8aS5pc0ZpbGUodCl8fGkuaXNCbG9iKHQpfHxpLmlzUmVhZGFibGVTdHJlYW0odCkpcmV0dXJuIHQ7aWYoaS5pc0FycmF5QnVmZmVyVmlldyh0KSlyZXR1cm4gdC5idWZmZXI7aWYoaS5pc1VSTFNlYXJjaFBhcmFtcyh0KSlyZXR1cm4gZS5zZXRDb250ZW50VHlwZSgiYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkO2NoYXJzZXQ9dXRmLTgiLCExKSx0LnRvU3RyaW5nKCk7bGV0IEM7aWYobyl7aWYoSS5pbmRleE9mKCJhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQiKT4tMSlyZXR1cm4gVkEodCx0aGlzLmZvcm1TZXJpYWxpemVyKS50b1N0cmluZygpO2lmKChDPWkuaXNGaWxlTGlzdCh0KSl8fEkuaW5kZXhPZigibXVsdGlwYXJ0L2Zvcm0tZGF0YSIpPi0xKXtsZXQgUT10aGlzLmVudiYmdGhpcy5lbnYuRm9ybURhdGE7cmV0dXJuIHEoQz97ImZpbGVzW10iOnR9OnQsUSYmbmV3IFEsdGhpcy5mb3JtU2VyaWFsaXplcil9fXJldHVybiBvfHxyPyhlLnNldENvbnRlbnRUeXBlKCJhcHBsaWNhdGlvbi9qc29uIiwhMSksa0kodCkpOnR9XSx0cmFuc2Zvcm1SZXNwb25zZTpbZnVuY3Rpb24odCl7bGV0IGU9dGhpcy50cmFuc2l0aW9uYWx8fF9BLnRyYW5zaXRpb25hbCxJPWUmJmUuZm9yY2VkSlNPTlBhcnNpbmcscj10aGlzLnJlc3BvbnNlVHlwZT09PSJqc29uIjtpZihpLmlzUmVzcG9uc2UodCl8fGkuaXNSZWFkYWJsZVN0cmVhbSh0KSlyZXR1cm4gdDtpZih0JiZpLmlzU3RyaW5nKHQpJiYoSSYmIXRoaXMucmVzcG9uc2VUeXBlfHxyKSl7bGV0IGc9IShlJiZlLnNpbGVudEpTT05QYXJzaW5nKSYmcjt0cnl7cmV0dXJuIEpTT04ucGFyc2UodCl9Y2F0Y2goQyl7aWYoZyl0aHJvdyBDLm5hbWU9PT0iU3ludGF4RXJyb3IiP3UuZnJvbShDLHUuRVJSX0JBRF9SRVNQT05TRSx0aGlzLG51bGwsdGhpcy5yZXNwb25zZSk6Q319cmV0dXJuIHR9XSx0aW1lb3V0OjAseHNyZkNvb2tpZU5hbWU6IlhTUkYtVE9LRU4iLHhzcmZIZWFkZXJOYW1lOiJYLVhTUkYtVE9LRU4iLG1heENvbnRlbnRMZW5ndGg6LTEsbWF4Qm9keUxlbmd0aDotMSxlbnY6e0Zvcm1EYXRhOncuY2xhc3Nlcy5Gb3JtRGF0YSxCbG9iOncuY2xhc3Nlcy5CbG9ifSx2YWxpZGF0ZVN0YXR1czpmdW5jdGlvbih0KXtyZXR1cm4gdD49MjAwJiZ0PDMwMH0saGVhZGVyczp7Y29tbW9uOntBY2NlcHQ6ImFwcGxpY2F0aW9uL2pzb24sIHRleHQvcGxhaW4sICovKiIsIkNvbnRlbnQtVHlwZSI6dm9pZCAwfX19O2kuZm9yRWFjaChbImRlbGV0ZSIsImdldCIsImhlYWQiLCJwb3N0IiwicHV0IiwicGF0Y2giXSxBPT57X0EuaGVhZGVyc1tBXT17fX0pO3ZhciBaPV9BO3ZhciBMST1pLnRvT2JqZWN0U2V0KFsiYWdlIiwiYXV0aG9yaXphdGlvbiIsImNvbnRlbnQtbGVuZ3RoIiwiY29udGVudC10eXBlIiwiZXRhZyIsImV4cGlyZXMiLCJmcm9tIiwiaG9zdCIsImlmLW1vZGlmaWVkLXNpbmNlIiwiaWYtdW5tb2RpZmllZC1zaW5jZSIsImxhc3QtbW9kaWZpZWQiLCJsb2NhdGlvbiIsIm1heC1mb3J3YXJkcyIsInByb3h5LWF1dGhvcml6YXRpb24iLCJyZWZlcmVyIiwicmV0cnktYWZ0ZXIiLCJ1c2VyLWFnZW50Il0pLHh0PUE9PntsZXQgdD17fSxlLEkscjtyZXR1cm4gQSYmQS5zcGxpdChgJTBBYCkuZm9yRWFjaChmdW5jdGlvbihnKXtyPWcuaW5kZXhPZigiOiIpLGU9Zy5zdWJzdHJpbmcoMCxyKS50cmltKCkudG9Mb3dlckNhc2UoKSxJPWcuc3Vic3RyaW5nKHIrMSkudHJpbSgpLCEoIWV8fHRbZV0mJkxJW2VdKSYmKGU9PT0ic2V0LWNvb2tpZSI/dFtlXT90W2VdLnB1c2goSSk6dFtlXT1bSV06dFtlXT10W2VdP3RbZV0rIiwgIitJOkkpfSksdH07dmFyIFB0PVN5bWJvbCgiaW50ZXJuYWxzIik7ZnVuY3Rpb24gZUEoQSl7cmV0dXJuIEEmJlN0cmluZyhBKS50cmltKCkudG9Mb3dlckNhc2UoKX1mdW5jdGlvbiBwQShBKXtyZXR1cm4gQT09PSExfHxBPT1udWxsP0E6aS5pc0FycmF5KEEpP0EubWFwKHBBKTpTdHJpbmcoQSl9ZnVuY3Rpb24gSkkoQSl7bGV0IHQ9T2JqZWN0LmNyZWF0ZShudWxsKSxlPS8oW15cXHMsOz1dKylcXHMqKD86PVxccyooW14sO10rKSk/L2csSTtmb3IoO0k9ZS5leGVjKEEpOyl0W0lbMV1dPUlbMl07cmV0dXJuIHR9dmFyIGJJPUE9Pi9eWy1fYS16QS1aMC05XmB8fiwhJTIzJCUmXCcqKy5dKyQvLnRlc3QoQS50cmltKCkpO2Z1bmN0aW9uIFhBKEEsdCxlLEkscil7aWYoaS5pc0Z1bmN0aW9uKEkpKXJldHVybiBJLmNhbGwodGhpcyx0LGUpO2lmKHImJih0PWUpLCEhaS5pc1N0cmluZyh0KSl7aWYoaS5pc1N0cmluZyhJKSlyZXR1cm4gdC5pbmRleE9mKEkpIT09LTE7aWYoaS5pc1JlZ0V4cChJKSlyZXR1cm4gSS50ZXN0KHQpfX1mdW5jdGlvbiBISShBKXtyZXR1cm4gQS50cmltKCkudG9Mb3dlckNhc2UoKS5yZXBsYWNlKC8oW2EtelxcZF0pKFxcdyopL2csKHQsZSxJKT0+ZS50b1VwcGVyQ2FzZSgpK0kpfWZ1bmN0aW9uIFlJKEEsdCl7bGV0IGU9aS50b0NhbWVsQ2FzZSgiICIrdCk7WyJnZXQiLCJzZXQiLCJoYXMiXS5mb3JFYWNoKEk9PntPYmplY3QuZGVmaW5lUHJvcGVydHkoQSxJK2Use3ZhbHVlOmZ1bmN0aW9uKHIsbyxnKXtyZXR1cm4gdGhpc1tJXS5jYWxsKHRoaXMsdCxyLG8sZyl9LGNvbmZpZ3VyYWJsZTohMH0pfSl9dmFyIFY9Y2xhc3N7Y29uc3RydWN0b3IodCl7dCYmdGhpcy5zZXQodCl9c2V0KHQsZSxJKXtsZXQgcj10aGlzO2Z1bmN0aW9uIG8oQyxRLGEpe2xldCBuPWVBKFEpO2lmKCFuKXRocm93IG5ldyBFcnJvcigiaGVhZGVyIG5hbWUgbXVzdCBiZSBhIG5vbi1lbXB0eSBzdHJpbmciKTtsZXQgcz1pLmZpbmRLZXkocixuKTsoIXN8fHJbc109PT12b2lkIDB8fGE9PT0hMHx8YT09PXZvaWQgMCYmcltzXSE9PSExKSYmKHJbc3x8UV09cEEoQykpfWxldCBnPShDLFEpPT5pLmZvckVhY2goQywoYSxuKT0+byhhLG4sUSkpO2lmKGkuaXNQbGFpbk9iamVjdCh0KXx8dCBpbnN0YW5jZW9mIHRoaXMuY29uc3RydWN0b3IpZyh0LGUpO2Vsc2UgaWYoaS5pc1N0cmluZyh0KSYmKHQ9dC50cmltKCkpJiYhYkkodCkpZyh4dCh0KSxlKTtlbHNlIGlmKGkuaXNIZWFkZXJzKHQpKWZvcihsZXRbQyxRXW9mIHQuZW50cmllcygpKW8oUSxDLEkpO2Vsc2UgdCE9bnVsbCYmbyhlLHQsSSk7cmV0dXJuIHRoaXN9Z2V0KHQsZSl7aWYodD1lQSh0KSx0KXtsZXQgST1pLmZpbmRLZXkodGhpcyx0KTtpZihJKXtsZXQgcj10aGlzW0ldO2lmKCFlKXJldHVybiByO2lmKGU9PT0hMClyZXR1cm4gSkkocik7aWYoaS5pc0Z1bmN0aW9uKGUpKXJldHVybiBlLmNhbGwodGhpcyxyLEkpO2lmKGkuaXNSZWdFeHAoZSkpcmV0dXJuIGUuZXhlYyhyKTt0aHJvdyBuZXcgVHlwZUVycm9yKCJwYXJzZXIgbXVzdCBiZSBib29sZWFufHJlZ2V4cHxmdW5jdGlvbiIpfX19aGFzKHQsZSl7aWYodD1lQSh0KSx0KXtsZXQgST1pLmZpbmRLZXkodGhpcyx0KTtyZXR1cm4hIShJJiZ0aGlzW0ldIT09dm9pZCAwJiYoIWV8fFhBKHRoaXMsdGhpc1tJXSxJLGUpKSl9cmV0dXJuITF9ZGVsZXRlKHQsZSl7bGV0IEk9dGhpcyxyPSExO2Z1bmN0aW9uIG8oZyl7aWYoZz1lQShnKSxnKXtsZXQgQz1pLmZpbmRLZXkoSSxnKTtDJiYoIWV8fFhBKEksSVtDXSxDLGUpKSYmKGRlbGV0ZSBJW0NdLHI9ITApfX1yZXR1cm4gaS5pc0FycmF5KHQpP3QuZm9yRWFjaChvKTpvKHQpLHJ9Y2xlYXIodCl7bGV0IGU9T2JqZWN0LmtleXModGhpcyksST1lLmxlbmd0aCxyPSExO2Zvcig7SS0tOyl7bGV0IG89ZVtJXTsoIXR8fFhBKHRoaXMsdGhpc1tvXSxvLHQsITApKSYmKGRlbGV0ZSB0aGlzW29dLHI9ITApfXJldHVybiByfW5vcm1hbGl6ZSh0KXtsZXQgZT10aGlzLEk9e307cmV0dXJuIGkuZm9yRWFjaCh0aGlzLChyLG8pPT57bGV0IGc9aS5maW5kS2V5KEksbyk7aWYoZyl7ZVtnXT1wQShyKSxkZWxldGUgZVtvXTtyZXR1cm59bGV0IEM9dD9ISShvKTpTdHJpbmcobykudHJpbSgpO0MhPT1vJiZkZWxldGUgZVtvXSxlW0NdPXBBKHIpLElbQ109ITB9KSx0aGlzfWNvbmNhdCguLi50KXtyZXR1cm4gdGhpcy5jb25zdHJ1Y3Rvci5jb25jYXQodGhpcywuLi50KX10b0pTT04odCl7bGV0IGU9T2JqZWN0LmNyZWF0ZShudWxsKTtyZXR1cm4gaS5mb3JFYWNoKHRoaXMsKEkscik9PntJIT1udWxsJiZJIT09ITEmJihlW3JdPXQmJmkuaXNBcnJheShJKT9JLmpvaW4oIiwgIik6SSl9KSxlfVtTeW1ib2wuaXRlcmF0b3JdKCl7cmV0dXJuIE9iamVjdC5lbnRyaWVzKHRoaXMudG9KU09OKCkpW1N5bWJvbC5pdGVyYXRvcl0oKX10b1N0cmluZygpe3JldHVybiBPYmplY3QuZW50cmllcyh0aGlzLnRvSlNPTigpKS5tYXAoKFt0LGVdKT0+dCsiOiAiK2UpLmpvaW4oYCUwQWApfWdldFtTeW1ib2wudG9TdHJpbmdUYWddKCl7cmV0dXJuIkF4aW9zSGVhZGVycyJ9c3RhdGljIGZyb20odCl7cmV0dXJuIHQgaW5zdGFuY2VvZiB0aGlzP3Q6bmV3IHRoaXModCl9c3RhdGljIGNvbmNhdCh0LC4uLmUpe2xldCBJPW5ldyB0aGlzKHQpO3JldHVybiBlLmZvckVhY2gocj0+SS5zZXQocikpLEl9c3RhdGljIGFjY2Vzc29yKHQpe2xldCBJPSh0aGlzW1B0XT10aGlzW1B0XT17YWNjZXNzb3JzOnt9fSkuYWNjZXNzb3JzLHI9dGhpcy5wcm90b3R5cGU7ZnVuY3Rpb24gbyhnKXtsZXQgQz1lQShnKTtJW0NdfHwoWUkocixnKSxJW0NdPSEwKX1yZXR1cm4gaS5pc0FycmF5KHQpP3QuZm9yRWFjaChvKTpvKHQpLHRoaXN9fTtWLmFjY2Vzc29yKFsiQ29udGVudC1UeXBlIiwiQ29udGVudC1MZW5ndGgiLCJBY2NlcHQiLCJBY2NlcHQtRW5jb2RpbmciLCJVc2VyLUFnZW50IiwiQXV0aG9yaXphdGlvbiJdKTtpLnJlZHVjZURlc2NyaXB0b3JzKFYucHJvdG90eXBlLCh7dmFsdWU6QX0sdCk9PntsZXQgZT10WzBdLnRvVXBwZXJDYXNlKCkrdC5zbGljZSgxKTtyZXR1cm57Z2V0OigpPT5BLHNldChJKXt0aGlzW2VdPUl9fX0pO2kuZnJlZXplTWV0aG9kcyhWKTt2YXIgbT1WO2Z1bmN0aW9uIElBKEEsdCl7bGV0IGU9dGhpc3x8WixJPXR8fGUscj1tLmZyb20oSS5oZWFkZXJzKSxvPUkuZGF0YTtyZXR1cm4gaS5mb3JFYWNoKEEsZnVuY3Rpb24oQyl7bz1DLmNhbGwoZSxvLHIubm9ybWFsaXplKCksdD90LnN0YXR1czp2b2lkIDApfSksci5ub3JtYWxpemUoKSxvfWZ1bmN0aW9uIHJBKEEpe3JldHVybiEhKEEmJkEuX19DQU5DRUxfXyl9ZnVuY3Rpb24ganQoQSx0LGUpe3UuY2FsbCh0aGlzLEE/PyJjYW5jZWxlZCIsdS5FUlJfQ0FOQ0VMRUQsdCxlKSx0aGlzLm5hbWU9IkNhbmNlbGVkRXJyb3IifWkuaW5oZXJpdHMoanQsdSx7X19DQU5DRUxfXzohMH0pO3ZhciBiPWp0O2Z1bmN0aW9uIG9BKEEsdCxlKXtsZXQgST1lLmNvbmZpZy52YWxpZGF0ZVN0YXR1czshZS5zdGF0dXN8fCFJfHxJKGUuc3RhdHVzKT9BKGUpOnQobmV3IHUoIlJlcXVlc3QgZmFpbGVkIHdpdGggc3RhdHVzIGNvZGUgIitlLnN0YXR1cyxbdS5FUlJfQkFEX1JFUVVFU1QsdS5FUlJfQkFEX1JFU1BPTlNFXVtNYXRoLmZsb29yKGUuc3RhdHVzLzEwMCktNF0sZS5jb25maWcsZS5yZXF1ZXN0LGUpKX1mdW5jdGlvbiB6QShBKXtsZXQgdD0vXihbLStcXHddezEsMjV9KSg6P1xcL1xcL3w6KS8uZXhlYyhBKTtyZXR1cm4gdCYmdFsxXXx8IiJ9ZnVuY3Rpb24gcUkoQSx0KXtBPUF8fDEwO2xldCBlPW5ldyBBcnJheShBKSxJPW5ldyBBcnJheShBKSxyPTAsbz0wLGc7cmV0dXJuIHQ9dCE9PXZvaWQgMD90OjFlMyxmdW5jdGlvbihRKXtsZXQgYT1EYXRlLm5vdygpLG49SVtvXTtnfHwoZz1hKSxlW3JdPVEsSVtyXT1hO2xldCBzPW8sZj0wO2Zvcig7cyE9PXI7KWYrPWVbcysrXSxzPXMlQTtpZihyPShyKzEpJUEscj09PW8mJihvPShvKzEpJUEpLGEtZzx0KXJldHVybjtsZXQgQj1uJiZhLW47cmV0dXJuIEI/TWF0aC5yb3VuZChmKjFlMy9CKTp2b2lkIDB9fXZhciBXdD1xSTtmdW5jdGlvbiBNSShBLHQpe2xldCBlPTAsST0xZTMvdCxyLG8sZz0oYSxuPURhdGUubm93KCkpPT57ZT1uLHI9bnVsbCxvJiYoY2xlYXJUaW1lb3V0KG8pLG89bnVsbCksQS5hcHBseShudWxsLGEpfTtyZXR1cm5bKC4uLmEpPT57bGV0IG49RGF0ZS5ub3coKSxzPW4tZTtzPj1JP2coYSxuKToocj1hLG98fChvPXNldFRpbWVvdXQoKCk9PntvPW51bGwsZyhyKX0sSS1zKSkpfSwoKT0+ciYmZyhyKV19dmFyIFp0PU1JO3ZhciBfPShBLHQsZT0zKT0+e2xldCBJPTAscj1XdCg1MCwyNTApO3JldHVybiBadChvPT57bGV0IGc9by5sb2FkZWQsQz1vLmxlbmd0aENvbXB1dGFibGU/by50b3RhbDp2b2lkIDAsUT1nLUksYT1yKFEpLG49Zzw9QztJPWc7bGV0IHM9e2xvYWRlZDpnLHRvdGFsOkMscHJvZ3Jlc3M6Qz9nL0M6dm9pZCAwLGJ5dGVzOlEscmF0ZTphfHx2b2lkIDAsZXN0aW1hdGVkOmEmJkMmJm4/KEMtZykvYTp2b2lkIDAsZXZlbnQ6byxsZW5ndGhDb21wdXRhYmxlOkMhPW51bGwsW3Q/ImRvd25sb2FkIjoidXBsb2FkIl06ITB9O0Eocyl9LGUpfSx2QT0oQSx0KT0+e2xldCBlPUEhPW51bGw7cmV0dXJuW0k9PnRbMF0oe2xlbmd0aENvbXB1dGFibGU6ZSx0b3RhbDpBLGxvYWRlZDpJfSksdFsxXV19LCRBPUE9PiguLi50KT0+aS5hc2FwKCgpPT5BKC4uLnQpKTt2YXIgVnQ9dy5oYXNTdGFuZGFyZEJyb3dzZXJFbnY/ZnVuY3Rpb24oKXtsZXQgdD0vKG1zaWV8dHJpZGVudCkvaS50ZXN0KG5hdmlnYXRvci51c2VyQWdlbnQpLGU9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiYSIpLEk7ZnVuY3Rpb24gcihvKXtsZXQgZz1vO3JldHVybiB0JiYoZS5zZXRBdHRyaWJ1dGUoImhyZWYiLGcpLGc9ZS5ocmVmKSxlLnNldEF0dHJpYnV0ZSgiaHJlZiIsZykse2hyZWY6ZS5ocmVmLHByb3RvY29sOmUucHJvdG9jb2w/ZS5wcm90b2NvbC5yZXBsYWNlKC86JC8sIiIpOiIiLGhvc3Q6ZS5ob3N0LHNlYXJjaDplLnNlYXJjaD9lLnNlYXJjaC5yZXBsYWNlKC9eXFw/LywiIik6IiIsaGFzaDplLmhhc2g/ZS5oYXNoLnJlcGxhY2UoL14lMjMvLCIiKToiIixob3N0bmFtZTplLmhvc3RuYW1lLHBvcnQ6ZS5wb3J0LHBhdGhuYW1lOmUucGF0aG5hbWUuY2hhckF0KDApPT09Ii8iP2UucGF0aG5hbWU6Ii8iK2UucGF0aG5hbWV9fXJldHVybiBJPXIod2luZG93LmxvY2F0aW9uLmhyZWYpLGZ1bmN0aW9uKGcpe2xldCBDPWkuaXNTdHJpbmcoZyk/cihnKTpnO3JldHVybiBDLnByb3RvY29sPT09SS5wcm90b2NvbCYmQy5ob3N0PT09SS5ob3N0fX0oKTpmdW5jdGlvbigpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiEwfX0oKTt2YXIgX3Q9dy5oYXNTdGFuZGFyZEJyb3dzZXJFbnY/e3dyaXRlKEEsdCxlLEkscixvKXtsZXQgZz1bQSsiPSIrZW5jb2RlVVJJQ29tcG9uZW50KHQpXTtpLmlzTnVtYmVyKGUpJiZnLnB1c2goImV4cGlyZXM9IituZXcgRGF0ZShlKS50b0dNVFN0cmluZygpKSxpLmlzU3RyaW5nKEkpJiZnLnB1c2goInBhdGg9IitJKSxpLmlzU3RyaW5nKHIpJiZnLnB1c2goImRvbWFpbj0iK3IpLG89PT0hMCYmZy5wdXNoKCJzZWN1cmUiKSxkb2N1bWVudC5jb29raWU9Zy5qb2luKCI7ICIpfSxyZWFkKEEpe2xldCB0PWRvY3VtZW50LmNvb2tpZS5tYXRjaChuZXcgUmVnRXhwKCIoXnw7XFxcXHMqKSgiK0ErIik9KFteO10qKSIpKTtyZXR1cm4gdD9kZWNvZGVVUklDb21wb25lbnQodFszXSk6bnVsbH0scmVtb3ZlKEEpe3RoaXMud3JpdGUoQSwiIixEYXRlLm5vdygpLTg2NGU1KX19Ont3cml0ZSgpe30scmVhZCgpe3JldHVybiBudWxsfSxyZW1vdmUoKXt9fTtmdW5jdGlvbiBBdChBKXtyZXR1cm4vXihbYS16XVthLXpcXGQrXFwtLl0qOik/XFwvXFwvL2kudGVzdChBKX1mdW5jdGlvbiB0dChBLHQpe3JldHVybiB0P0EucmVwbGFjZSgvXFwvP1xcLyQvLCIiKSsiLyIrdC5yZXBsYWNlKC9eXFwvKy8sIiIpOkF9ZnVuY3Rpb24gZ0EoQSx0KXtyZXR1cm4gQSYmIUF0KHQpP3R0KEEsdCk6dH12YXIgWHQ9QT0+QSBpbnN0YW5jZW9mIG0/ey4uLkF9OkE7ZnVuY3Rpb24gayhBLHQpe3Q9dHx8e307bGV0IGU9e307ZnVuY3Rpb24gSShhLG4scyl7cmV0dXJuIGkuaXNQbGFpbk9iamVjdChhKSYmaS5pc1BsYWluT2JqZWN0KG4pP2kubWVyZ2UuY2FsbCh7Y2FzZWxlc3M6c30sYSxuKTppLmlzUGxhaW5PYmplY3Qobik/aS5tZXJnZSh7fSxuKTppLmlzQXJyYXkobik/bi5zbGljZSgpOm59ZnVuY3Rpb24gcihhLG4scyl7aWYoaS5pc1VuZGVmaW5lZChuKSl7aWYoIWkuaXNVbmRlZmluZWQoYSkpcmV0dXJuIEkodm9pZCAwLGEscyl9ZWxzZSByZXR1cm4gSShhLG4scyl9ZnVuY3Rpb24gbyhhLG4pe2lmKCFpLmlzVW5kZWZpbmVkKG4pKXJldHVybiBJKHZvaWQgMCxuKX1mdW5jdGlvbiBnKGEsbil7aWYoaS5pc1VuZGVmaW5lZChuKSl7aWYoIWkuaXNVbmRlZmluZWQoYSkpcmV0dXJuIEkodm9pZCAwLGEpfWVsc2UgcmV0dXJuIEkodm9pZCAwLG4pfWZ1bmN0aW9uIEMoYSxuLHMpe2lmKHMgaW4gdClyZXR1cm4gSShhLG4pO2lmKHMgaW4gQSlyZXR1cm4gSSh2b2lkIDAsYSl9bGV0IFE9e3VybDpvLG1ldGhvZDpvLGRhdGE6byxiYXNlVVJMOmcsdHJhbnNmb3JtUmVxdWVzdDpnLHRyYW5zZm9ybVJlc3BvbnNlOmcscGFyYW1zU2VyaWFsaXplcjpnLHRpbWVvdXQ6Zyx0aW1lb3V0TWVzc2FnZTpnLHdpdGhDcmVkZW50aWFsczpnLHdpdGhYU1JGVG9rZW46ZyxhZGFwdGVyOmcscmVzcG9uc2VUeXBlOmcseHNyZkNvb2tpZU5hbWU6Zyx4c3JmSGVhZGVyTmFtZTpnLG9uVXBsb2FkUHJvZ3Jlc3M6ZyxvbkRvd25sb2FkUHJvZ3Jlc3M6ZyxkZWNvbXByZXNzOmcsbWF4Q29udGVudExlbmd0aDpnLG1heEJvZHlMZW5ndGg6ZyxiZWZvcmVSZWRpcmVjdDpnLHRyYW5zcG9ydDpnLGh0dHBBZ2VudDpnLGh0dHBzQWdlbnQ6ZyxjYW5jZWxUb2tlbjpnLHNvY2tldFBhdGg6ZyxyZXNwb25zZUVuY29kaW5nOmcsdmFsaWRhdGVTdGF0dXM6QyxoZWFkZXJzOihhLG4pPT5yKFh0KGEpLFh0KG4pLCEwKX07cmV0dXJuIGkuZm9yRWFjaChPYmplY3Qua2V5cyhPYmplY3QuYXNzaWduKHt9LEEsdCkpLGZ1bmN0aW9uKG4pe2xldCBzPVFbbl18fHIsZj1zKEFbbl0sdFtuXSxuKTtpLmlzVW5kZWZpbmVkKGYpJiZzIT09Q3x8KGVbbl09Zil9KSxlfXZhciBTQT1BPT57bGV0IHQ9ayh7fSxBKSx7ZGF0YTplLHdpdGhYU1JGVG9rZW46SSx4c3JmSGVhZGVyTmFtZTpyLHhzcmZDb29raWVOYW1lOm8saGVhZGVyczpnLGF1dGg6Q309dDt0LmhlYWRlcnM9Zz1tLmZyb20oZyksdC51cmw9dEEoZ0EodC5iYXNlVVJMLHQudXJsKSxBLnBhcmFtcyxBLnBhcmFtc1NlcmlhbGl6ZXIpLEMmJmcuc2V0KCJBdXRob3JpemF0aW9uIiwiQmFzaWMgIitidG9hKChDLnVzZXJuYW1lfHwiIikrIjoiKyhDLnBhc3N3b3JkP3VuZXNjYXBlKGVuY29kZVVSSUNvbXBvbmVudChDLnBhc3N3b3JkKSk6IiIpKSk7bGV0IFE7aWYoaS5pc0Zvcm1EYXRhKGUpKXtpZih3Lmhhc1N0YW5kYXJkQnJvd3NlckVudnx8dy5oYXNTdGFuZGFyZEJyb3dzZXJXZWJXb3JrZXJFbnYpZy5zZXRDb250ZW50VHlwZSh2b2lkIDApO2Vsc2UgaWYoKFE9Zy5nZXRDb250ZW50VHlwZSgpKSE9PSExKXtsZXRbYSwuLi5uXT1RP1Euc3BsaXQoIjsiKS5tYXAocz0+cy50cmltKCkpLmZpbHRlcihCb29sZWFuKTpbXTtnLnNldENvbnRlbnRUeXBlKFthfHwibXVsdGlwYXJ0L2Zvcm0tZGF0YSIsLi4ubl0uam9pbigiOyAiKSl9fWlmKHcuaGFzU3RhbmRhcmRCcm93c2VyRW52JiYoSSYmaS5pc0Z1bmN0aW9uKEkpJiYoST1JKHQpKSxJfHxJIT09ITEmJlZ0KHQudXJsKSkpe2xldCBhPXImJm8mJl90LnJlYWQobyk7YSYmZy5zZXQocixhKX1yZXR1cm4gdH07dmFyIFRJPXR5cGVvZiBYTUxIdHRwUmVxdWVzdDwidSIsenQ9VEkmJmZ1bmN0aW9uKEEpe3JldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbihlLEkpe2xldCByPVNBKEEpLG89ci5kYXRhLGc9bS5mcm9tKHIuaGVhZGVycykubm9ybWFsaXplKCkse3Jlc3BvbnNlVHlwZTpDLG9uVXBsb2FkUHJvZ3Jlc3M6USxvbkRvd25sb2FkUHJvZ3Jlc3M6YX09cixuLHMsZixCLEU7ZnVuY3Rpb24gbCgpe0ImJkIoKSxFJiZFKCksci5jYW5jZWxUb2tlbiYmci5jYW5jZWxUb2tlbi51bnN1YnNjcmliZShuKSxyLnNpZ25hbCYmci5zaWduYWwucmVtb3ZlRXZlbnRMaXN0ZW5lcigiYWJvcnQiLG4pfWxldCBjPW5ldyBYTUxIdHRwUmVxdWVzdDtjLm9wZW4oci5tZXRob2QudG9VcHBlckNhc2UoKSxyLnVybCwhMCksYy50aW1lb3V0PXIudGltZW91dDtmdW5jdGlvbiBwKCl7aWYoIWMpcmV0dXJuO2xldCBEPW0uZnJvbSgiZ2V0QWxsUmVzcG9uc2VIZWFkZXJzImluIGMmJmMuZ2V0QWxsUmVzcG9uc2VIZWFkZXJzKCkpLEs9e2RhdGE6IUN8fEM9PT0idGV4dCJ8fEM9PT0ianNvbiI/Yy5yZXNwb25zZVRleHQ6Yy5yZXNwb25zZSxzdGF0dXM6Yy5zdGF0dXMsc3RhdHVzVGV4dDpjLnN0YXR1c1RleHQsaGVhZGVyczpELGNvbmZpZzpBLHJlcXVlc3Q6Y307b0EoZnVuY3Rpb24oSil7ZShKKSxsKCl9LGZ1bmN0aW9uKEope0koSiksbCgpfSxLKSxjPW51bGx9Im9ubG9hZGVuZCJpbiBjP2Mub25sb2FkZW5kPXA6Yy5vbnJlYWR5c3RhdGVjaGFuZ2U9ZnVuY3Rpb24oKXshY3x8Yy5yZWFkeVN0YXRlIT09NHx8Yy5zdGF0dXM9PT0wJiYhKGMucmVzcG9uc2VVUkwmJmMucmVzcG9uc2VVUkwuaW5kZXhPZigiZmlsZToiKT09PTApfHxzZXRUaW1lb3V0KHApfSxjLm9uYWJvcnQ9ZnVuY3Rpb24oKXtjJiYoSShuZXcgdSgiUmVxdWVzdCBhYm9ydGVkIix1LkVDT05OQUJPUlRFRCxBLGMpKSxjPW51bGwpfSxjLm9uZXJyb3I9ZnVuY3Rpb24oKXtJKG5ldyB1KCJOZXR3b3JrIEVycm9yIix1LkVSUl9ORVRXT1JLLEEsYykpLGM9bnVsbH0sYy5vbnRpbWVvdXQ9ZnVuY3Rpb24oKXtsZXQgVT1yLnRpbWVvdXQ/InRpbWVvdXQgb2YgIityLnRpbWVvdXQrIm1zIGV4Y2VlZGVkIjoidGltZW91dCBleGNlZWRlZCIsSz1yLnRyYW5zaXRpb25hbHx8bUE7ci50aW1lb3V0RXJyb3JNZXNzYWdlJiYoVT1yLnRpbWVvdXRFcnJvck1lc3NhZ2UpLEkobmV3IHUoVSxLLmNsYXJpZnlUaW1lb3V0RXJyb3I/dS5FVElNRURPVVQ6dS5FQ09OTkFCT1JURUQsQSxjKSksYz1udWxsfSxvPT09dm9pZCAwJiZnLnNldENvbnRlbnRUeXBlKG51bGwpLCJzZXRSZXF1ZXN0SGVhZGVyImluIGMmJmkuZm9yRWFjaChnLnRvSlNPTigpLGZ1bmN0aW9uKFUsSyl7Yy5zZXRSZXF1ZXN0SGVhZGVyKEssVSl9KSxpLmlzVW5kZWZpbmVkKHIud2l0aENyZWRlbnRpYWxzKXx8KGMud2l0aENyZWRlbnRpYWxzPSEhci53aXRoQ3JlZGVudGlhbHMpLEMmJkMhPT0ianNvbiImJihjLnJlc3BvbnNlVHlwZT1yLnJlc3BvbnNlVHlwZSksYSYmKFtmLEVdPV8oYSwhMCksYy5hZGRFdmVudExpc3RlbmVyKCJwcm9ncmVzcyIsZikpLFEmJmMudXBsb2FkJiYoW3MsQl09XyhRKSxjLnVwbG9hZC5hZGRFdmVudExpc3RlbmVyKCJwcm9ncmVzcyIscyksYy51cGxvYWQuYWRkRXZlbnRMaXN0ZW5lcigibG9hZGVuZCIsQikpLChyLmNhbmNlbFRva2VufHxyLnNpZ25hbCkmJihuPUQ9PntjJiYoSSghRHx8RC50eXBlP25ldyBiKG51bGwsQSxjKTpEKSxjLmFib3J0KCksYz1udWxsKX0sci5jYW5jZWxUb2tlbiYmci5jYW5jZWxUb2tlbi5zdWJzY3JpYmUobiksci5zaWduYWwmJihyLnNpZ25hbC5hYm9ydGVkP24oKTpyLnNpZ25hbC5hZGRFdmVudExpc3RlbmVyKCJhYm9ydCIsbikpKTtsZXQgUz16QShyLnVybCk7aWYoUyYmdy5wcm90b2NvbHMuaW5kZXhPZihTKT09PS0xKXtJKG5ldyB1KCJVbnN1cHBvcnRlZCBwcm90b2NvbCAiK1MrIjoiLHUuRVJSX0JBRF9SRVFVRVNULEEpKTtyZXR1cm59Yy5zZW5kKG98fG51bGwpfSl9O3ZhciBLST0oQSx0KT0+e2xldCBlPW5ldyBBYm9ydENvbnRyb2xsZXIsSSxyPWZ1bmN0aW9uKFEpe2lmKCFJKXtJPSEwLGcoKTtsZXQgYT1RIGluc3RhbmNlb2YgRXJyb3I/UTp0aGlzLnJlYXNvbjtlLmFib3J0KGEgaW5zdGFuY2VvZiB1P2E6bmV3IGIoYSBpbnN0YW5jZW9mIEVycm9yP2EubWVzc2FnZTphKSl9fSxvPXQmJnNldFRpbWVvdXQoKCk9PntyKG5ldyB1KGB0aW1lb3V0ICR7dH0gb2YgbXMgZXhjZWVkZWRgLHUuRVRJTUVET1VUKSl9LHQpLGc9KCk9PntBJiYobyYmY2xlYXJUaW1lb3V0KG8pLG89bnVsbCxBLmZvckVhY2goUT0+e1EmJihRLnJlbW92ZUV2ZW50TGlzdGVuZXI/US5yZW1vdmVFdmVudExpc3RlbmVyKCJhYm9ydCIscik6US51bnN1YnNjcmliZShyKSl9KSxBPW51bGwpfTtBLmZvckVhY2goUT0+USYmUS5hZGRFdmVudExpc3RlbmVyJiZRLmFkZEV2ZW50TGlzdGVuZXIoImFib3J0IixyKSk7bGV0e3NpZ25hbDpDfT1lO3JldHVybiBDLnVuc3Vic2NyaWJlPWcsW0MsKCk9PntvJiZjbGVhclRpbWVvdXQobyksbz1udWxsfV19LHZ0PUtJO3ZhciBPST1mdW5jdGlvbiooQSx0KXtsZXQgZT1BLmJ5dGVMZW5ndGg7aWYoIXR8fGU8dCl7eWllbGQgQTtyZXR1cm59bGV0IEk9MCxyO2Zvcig7STxlOylyPUkrdCx5aWVsZCBBLnNsaWNlKEksciksST1yfSx4ST1hc3luYyBmdW5jdGlvbiooQSx0LGUpe2ZvciBhd2FpdChsZXQgSSBvZiBBKXlpZWxkKk9JKEFycmF5QnVmZmVyLmlzVmlldyhJKT9JOmF3YWl0IGUoU3RyaW5nKEkpKSx0KX0sZXQ9KEEsdCxlLEkscik9PntsZXQgbz14SShBLHQsciksZz0wLEMsUT1hPT57Q3x8KEM9ITAsSSYmSShhKSl9O3JldHVybiBuZXcgUmVhZGFibGVTdHJlYW0oe2FzeW5jIHB1bGwoYSl7dHJ5e2xldHtkb25lOm4sdmFsdWU6c309YXdhaXQgby5uZXh0KCk7aWYobil7USgpLGEuY2xvc2UoKTtyZXR1cm59bGV0IGY9cy5ieXRlTGVuZ3RoO2lmKGUpe2xldCBCPWcrPWY7ZShCKX1hLmVucXVldWUobmV3IFVpbnQ4QXJyYXkocykpfWNhdGNoKG4pe3Rocm93IFEobiksbn19LGNhbmNlbChhKXtyZXR1cm4gUShhKSxvLnJldHVybigpfX0se2hpZ2hXYXRlck1hcms6Mn0pfTt2YXIgUkE9dHlwZW9mIGZldGNoPT0iZnVuY3Rpb24iJiZ0eXBlb2YgUmVxdWVzdD09ImZ1bmN0aW9uIiYmdHlwZW9mIFJlc3BvbnNlPT0iZnVuY3Rpb24iLEFlPVJBJiZ0eXBlb2YgUmVhZGFibGVTdHJlYW09PSJmdW5jdGlvbiIsSXQ9UkEmJih0eXBlb2YgVGV4dEVuY29kZXI9PSJmdW5jdGlvbiI/KEE9PnQ9PkEuZW5jb2RlKHQpKShuZXcgVGV4dEVuY29kZXIpOmFzeW5jIEE9Pm5ldyBVaW50OEFycmF5KGF3YWl0IG5ldyBSZXNwb25zZShBKS5hcnJheUJ1ZmZlcigpKSksdGU9KEEsLi4udCk9Pnt0cnl7cmV0dXJuISFBKC4uLnQpfWNhdGNoe3JldHVybiExfX0sUEk9QWUmJnRlKCgpPT57bGV0IEE9ITEsdD1uZXcgUmVxdWVzdCh3Lm9yaWdpbix7Ym9keTpuZXcgUmVhZGFibGVTdHJlYW0sbWV0aG9kOiJQT1NUIixnZXQgZHVwbGV4KCl7cmV0dXJuIEE9ITAsImhhbGYifX0pLmhlYWRlcnMuaGFzKCJDb250ZW50LVR5cGUiKTtyZXR1cm4gQSYmIXR9KSwkdD02NCoxMDI0LHJ0PUFlJiZ0ZSgoKT0+aS5pc1JlYWRhYmxlU3RyZWFtKG5ldyBSZXNwb25zZSgiIikuYm9keSkpLEZBPXtzdHJlYW06cnQmJihBPT5BLmJvZHkpfTtSQSYmKEE9PntbInRleHQiLCJhcnJheUJ1ZmZlciIsImJsb2IiLCJmb3JtRGF0YSIsInN0cmVhbSJdLmZvckVhY2godD0+eyFGQVt0XSYmKEZBW3RdPWkuaXNGdW5jdGlvbihBW3RdKT9lPT5lW3RdKCk6KGUsSSk9Pnt0aHJvdyBuZXcgdShgUmVzcG9uc2UgdHlwZSBcJyR7dH1cJyBpcyBub3Qgc3VwcG9ydGVkYCx1LkVSUl9OT1RfU1VQUE9SVCxJKX0pfSl9KShuZXcgUmVzcG9uc2UpO3ZhciBqST1hc3luYyBBPT57aWYoQT09bnVsbClyZXR1cm4gMDtpZihpLmlzQmxvYihBKSlyZXR1cm4gQS5zaXplO2lmKGkuaXNTcGVjQ29tcGxpYW50Rm9ybShBKSlyZXR1cm4oYXdhaXQgbmV3IFJlcXVlc3QoQSkuYXJyYXlCdWZmZXIoKSkuYnl0ZUxlbmd0aDtpZihpLmlzQXJyYXlCdWZmZXJWaWV3KEEpfHxpLmlzQXJyYXlCdWZmZXIoQSkpcmV0dXJuIEEuYnl0ZUxlbmd0aDtpZihpLmlzVVJMU2VhcmNoUGFyYW1zKEEpJiYoQT1BKyIiKSxpLmlzU3RyaW5nKEEpKXJldHVybihhd2FpdCBJdChBKSkuYnl0ZUxlbmd0aH0sV0k9YXN5bmMoQSx0KT0+e2xldCBlPWkudG9GaW5pdGVOdW1iZXIoQS5nZXRDb250ZW50TGVuZ3RoKCkpO3JldHVybiBlPz9qSSh0KX0sZWU9UkEmJihhc3luYyBBPT57bGV0e3VybDp0LG1ldGhvZDplLGRhdGE6SSxzaWduYWw6cixjYW5jZWxUb2tlbjpvLHRpbWVvdXQ6ZyxvbkRvd25sb2FkUHJvZ3Jlc3M6QyxvblVwbG9hZFByb2dyZXNzOlEscmVzcG9uc2VUeXBlOmEsaGVhZGVyczpuLHdpdGhDcmVkZW50aWFsczpzPSJzYW1lLW9yaWdpbiIsZmV0Y2hPcHRpb25zOmZ9PVNBKEEpO2E9YT8oYSsiIikudG9Mb3dlckNhc2UoKToidGV4dCI7bGV0W0IsRV09cnx8b3x8Zz92dChbcixvXSxnKTpbXSxsLGMscD0oKT0+eyFsJiZzZXRUaW1lb3V0KCgpPT57QiYmQi51bnN1YnNjcmliZSgpfSksbD0hMH0sUzt0cnl7aWYoUSYmUEkmJmUhPT0iZ2V0IiYmZSE9PSJoZWFkIiYmKFM9YXdhaXQgV0kobixJKSkhPT0wKXtsZXQgTD1uZXcgUmVxdWVzdCh0LHttZXRob2Q6IlBPU1QiLGJvZHk6SSxkdXBsZXg6ImhhbGYifSksSjtpZihpLmlzRm9ybURhdGEoSSkmJihKPUwuaGVhZGVycy5nZXQoImNvbnRlbnQtdHlwZSIpKSYmbi5zZXRDb250ZW50VHlwZShKKSxMLmJvZHkpe2xldFtIQSxDQV09dkEoUyxfKCRBKFEpKSk7ST1ldChMLmJvZHksJHQsSEEsQ0EsSXQpfX1pLmlzU3RyaW5nKHMpfHwocz1zPyJpbmNsdWRlIjoib21pdCIpLGM9bmV3IFJlcXVlc3QodCx7Li4uZixzaWduYWw6QixtZXRob2Q6ZS50b1VwcGVyQ2FzZSgpLGhlYWRlcnM6bi5ub3JtYWxpemUoKS50b0pTT04oKSxib2R5OkksZHVwbGV4OiJoYWxmIixjcmVkZW50aWFsczpzfSk7bGV0IEQ9YXdhaXQgZmV0Y2goYyksVT1ydCYmKGE9PT0ic3RyZWFtInx8YT09PSJyZXNwb25zZSIpO2lmKHJ0JiYoQ3x8VSkpe2xldCBMPXt9O1sic3RhdHVzIiwic3RhdHVzVGV4dCIsImhlYWRlcnMiXS5mb3JFYWNoKEV0PT57TFtFdF09RFtFdF19KTtsZXQgSj1pLnRvRmluaXRlTnVtYmVyKEQuaGVhZGVycy5nZXQoImNvbnRlbnQtbGVuZ3RoIikpLFtIQSxDQV09QyYmdkEoSixfKCRBKEMpLCEwKSl8fFtdO0Q9bmV3IFJlc3BvbnNlKGV0KEQuYm9keSwkdCxIQSwoKT0+e0NBJiZDQSgpLFUmJnAoKX0sSXQpLEwpfWE9YXx8InRleHQiO2xldCBLPWF3YWl0IEZBW2kuZmluZEtleShGQSxhKXx8InRleHQiXShELEEpO3JldHVybiFVJiZwKCksRSYmRSgpLGF3YWl0IG5ldyBQcm9taXNlKChMLEopPT57b0EoTCxKLHtkYXRhOkssaGVhZGVyczptLmZyb20oRC5oZWFkZXJzKSxzdGF0dXM6RC5zdGF0dXMsc3RhdHVzVGV4dDpELnN0YXR1c1RleHQsY29uZmlnOkEscmVxdWVzdDpjfSl9KX1jYXRjaChEKXt0aHJvdyBwKCksRCYmRC5uYW1lPT09IlR5cGVFcnJvciImJi9mZXRjaC9pLnRlc3QoRC5tZXNzYWdlKT9PYmplY3QuYXNzaWduKG5ldyB1KCJOZXR3b3JrIEVycm9yIix1LkVSUl9ORVRXT1JLLEEsYykse2NhdXNlOkQuY2F1c2V8fER9KTp1LmZyb20oRCxEJiZELmNvZGUsQSxjKX19KTt2YXIgb3Q9e2h0dHA6ZEEseGhyOnp0LGZldGNoOmVlfTtpLmZvckVhY2gob3QsKEEsdCk9PntpZihBKXt0cnl7T2JqZWN0LmRlZmluZVByb3BlcnR5KEEsIm5hbWUiLHt2YWx1ZTp0fSl9Y2F0Y2h7fU9iamVjdC5kZWZpbmVQcm9wZXJ0eShBLCJhZGFwdGVyTmFtZSIse3ZhbHVlOnR9KX19KTt2YXIgSWU9QT0+YC0gJHtBfWAsWkk9QT0+aS5pc0Z1bmN0aW9uKEEpfHxBPT09bnVsbHx8QT09PSExLE5BPXtnZXRBZGFwdGVyOkE9PntBPWkuaXNBcnJheShBKT9BOltBXTtsZXR7bGVuZ3RoOnR9PUEsZSxJLHI9e307Zm9yKGxldCBvPTA7bzx0O28rKyl7ZT1BW29dO2xldCBnO2lmKEk9ZSwhWkkoZSkmJihJPW90WyhnPVN0cmluZyhlKSkudG9Mb3dlckNhc2UoKV0sST09PXZvaWQgMCkpdGhyb3cgbmV3IHUoYFVua25vd24gYWRhcHRlciBcJyR7Z31cJ2ApO2lmKEkpYnJlYWs7cltnfHwiJTIzIitvXT1JfWlmKCFJKXtsZXQgbz1PYmplY3QuZW50cmllcyhyKS5tYXAoKFtDLFFdKT0+YGFkYXB0ZXIgJHtDfSBgKyhRPT09ITE/ImlzIG5vdCBzdXBwb3J0ZWQgYnkgdGhlIGVudmlyb25tZW50IjoiaXMgbm90IGF2YWlsYWJsZSBpbiB0aGUgYnVpbGQiKSksZz10P28ubGVuZ3RoPjE/YHNpbmNlIDolMEFgK28ubWFwKEllKS5qb2luKGAlMEFgKToiICIrSWUob1swXSk6ImFzIG5vIGFkYXB0ZXIgc3BlY2lmaWVkIjt0aHJvdyBuZXcgdSgiVGhlcmUgaXMgbm8gc3VpdGFibGUgYWRhcHRlciB0byBkaXNwYXRjaCB0aGUgcmVxdWVzdCAiK2csIkVSUl9OT1RfU1VQUE9SVCIpfXJldHVybiBJfSxhZGFwdGVyczpvdH07ZnVuY3Rpb24gZ3QoQSl7aWYoQS5jYW5jZWxUb2tlbiYmQS5jYW5jZWxUb2tlbi50aHJvd0lmUmVxdWVzdGVkKCksQS5zaWduYWwmJkEuc2lnbmFsLmFib3J0ZWQpdGhyb3cgbmV3IGIobnVsbCxBKX1mdW5jdGlvbiBVQShBKXtyZXR1cm4gZ3QoQSksQS5oZWFkZXJzPW0uZnJvbShBLmhlYWRlcnMpLEEuZGF0YT1JQS5jYWxsKEEsQS50cmFuc2Zvcm1SZXF1ZXN0KSxbInBvc3QiLCJwdXQiLCJwYXRjaCJdLmluZGV4T2YoQS5tZXRob2QpIT09LTEmJkEuaGVhZGVycy5zZXRDb250ZW50VHlwZSgiYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkIiwhMSksTkEuZ2V0QWRhcHRlcihBLmFkYXB0ZXJ8fFouYWRhcHRlcikoQSkudGhlbihmdW5jdGlvbihJKXtyZXR1cm4gZ3QoQSksSS5kYXRhPUlBLmNhbGwoQSxBLnRyYW5zZm9ybVJlc3BvbnNlLEkpLEkuaGVhZGVycz1tLmZyb20oSS5oZWFkZXJzKSxJfSxmdW5jdGlvbihJKXtyZXR1cm4gckEoSSl8fChndChBKSxJJiZJLnJlc3BvbnNlJiYoSS5yZXNwb25zZS5kYXRhPUlBLmNhbGwoQSxBLnRyYW5zZm9ybVJlc3BvbnNlLEkucmVzcG9uc2UpLEkucmVzcG9uc2UuaGVhZGVycz1tLmZyb20oSS5yZXNwb25zZS5oZWFkZXJzKSkpLFByb21pc2UucmVqZWN0KEkpfSl9dmFyIEdBPSIxLjcuNCI7dmFyIGl0PXt9O1sib2JqZWN0IiwiYm9vbGVhbiIsIm51bWJlciIsImZ1bmN0aW9uIiwic3RyaW5nIiwic3ltYm9sIl0uZm9yRWFjaCgoQSx0KT0+e2l0W0FdPWZ1bmN0aW9uKEkpe3JldHVybiB0eXBlb2YgST09PUF8fCJhIisodDwxPyJuICI6IiAiKStBfX0pO3ZhciByZT17fTtpdC50cmFuc2l0aW9uYWw9ZnVuY3Rpb24odCxlLEkpe2Z1bmN0aW9uIHIobyxnKXtyZXR1cm4iW0F4aW9zIHYiK0dBKyJdIFRyYW5zaXRpb25hbCBvcHRpb24gXCciK28rIlwnIitnKyhJPyIuICIrSToiIil9cmV0dXJuKG8sZyxDKT0+e2lmKHQ9PT0hMSl0aHJvdyBuZXcgdShyKGcsIiBoYXMgYmVlbiByZW1vdmVkIisoZT8iIGluICIrZToiIikpLHUuRVJSX0RFUFJFQ0FURUQpO3JldHVybiBlJiYhcmVbZ10mJihyZVtnXT0hMCxjb25zb2xlLndhcm4ocihnLCIgaGFzIGJlZW4gZGVwcmVjYXRlZCBzaW5jZSB2IitlKyIgYW5kIHdpbGwgYmUgcmVtb3ZlZCBpbiB0aGUgbmVhciBmdXR1cmUiKSkpLHQ/dChvLGcsQyk6ITB9fTtmdW5jdGlvbiBWSShBLHQsZSl7aWYodHlwZW9mIEEhPSJvYmplY3QiKXRocm93IG5ldyB1KCJvcHRpb25zIG11c3QgYmUgYW4gb2JqZWN0Iix1LkVSUl9CQURfT1BUSU9OX1ZBTFVFKTtsZXQgST1PYmplY3Qua2V5cyhBKSxyPUkubGVuZ3RoO2Zvcig7ci0tID4wOyl7bGV0IG89SVtyXSxnPXRbb107aWYoZyl7bGV0IEM9QVtvXSxRPUM9PT12b2lkIDB8fGcoQyxvLEEpO2lmKFEhPT0hMCl0aHJvdyBuZXcgdSgib3B0aW9uICIrbysiIG11c3QgYmUgIitRLHUuRVJSX0JBRF9PUFRJT05fVkFMVUUpO2NvbnRpbnVlfWlmKGUhPT0hMCl0aHJvdyBuZXcgdSgiVW5rbm93biBvcHRpb24gIitvLHUuRVJSX0JBRF9PUFRJT04pfX12YXIga0E9e2Fzc2VydE9wdGlvbnM6VkksdmFsaWRhdG9yczppdH07dmFyIE09a0EudmFsaWRhdG9ycyxYPWNsYXNze2NvbnN0cnVjdG9yKHQpe3RoaXMuZGVmYXVsdHM9dCx0aGlzLmludGVyY2VwdG9ycz17cmVxdWVzdDpuZXcgakEscmVzcG9uc2U6bmV3IGpBfX1hc3luYyByZXF1ZXN0KHQsZSl7dHJ5e3JldHVybiBhd2FpdCB0aGlzLl9yZXF1ZXN0KHQsZSl9Y2F0Y2goSSl7aWYoSSBpbnN0YW5jZW9mIEVycm9yKXtsZXQgcjtFcnJvci5jYXB0dXJlU3RhY2tUcmFjZT9FcnJvci5jYXB0dXJlU3RhY2tUcmFjZShyPXt9KTpyPW5ldyBFcnJvcjtsZXQgbz1yLnN0YWNrP3Iuc3RhY2sucmVwbGFjZSgvXi4rXFxuLywiIik6IiI7dHJ5e0kuc3RhY2s/byYmIVN0cmluZyhJLnN0YWNrKS5lbmRzV2l0aChvLnJlcGxhY2UoL14uK1xcbi4rXFxuLywiIikpJiYoSS5zdGFjays9YCUwQWArbyk6SS5zdGFjaz1vfWNhdGNoe319dGhyb3cgSX19X3JlcXVlc3QodCxlKXt0eXBlb2YgdD09InN0cmluZyI/KGU9ZXx8e30sZS51cmw9dCk6ZT10fHx7fSxlPWsodGhpcy5kZWZhdWx0cyxlKTtsZXR7dHJhbnNpdGlvbmFsOkkscGFyYW1zU2VyaWFsaXplcjpyLGhlYWRlcnM6b309ZTtJIT09dm9pZCAwJiZrQS5hc3NlcnRPcHRpb25zKEkse3NpbGVudEpTT05QYXJzaW5nOk0udHJhbnNpdGlvbmFsKE0uYm9vbGVhbiksZm9yY2VkSlNPTlBhcnNpbmc6TS50cmFuc2l0aW9uYWwoTS5ib29sZWFuKSxjbGFyaWZ5VGltZW91dEVycm9yOk0udHJhbnNpdGlvbmFsKE0uYm9vbGVhbil9LCExKSxyIT1udWxsJiYoaS5pc0Z1bmN0aW9uKHIpP2UucGFyYW1zU2VyaWFsaXplcj17c2VyaWFsaXplOnJ9OmtBLmFzc2VydE9wdGlvbnMocix7ZW5jb2RlOk0uZnVuY3Rpb24sc2VyaWFsaXplOk0uZnVuY3Rpb259LCEwKSksZS5tZXRob2Q9KGUubWV0aG9kfHx0aGlzLmRlZmF1bHRzLm1ldGhvZHx8ImdldCIpLnRvTG93ZXJDYXNlKCk7bGV0IGc9byYmaS5tZXJnZShvLmNvbW1vbixvW2UubWV0aG9kXSk7byYmaS5mb3JFYWNoKFsiZGVsZXRlIiwiZ2V0IiwiaGVhZCIsInBvc3QiLCJwdXQiLCJwYXRjaCIsImNvbW1vbiJdLEU9PntkZWxldGUgb1tFXX0pLGUuaGVhZGVycz1tLmNvbmNhdChnLG8pO2xldCBDPVtdLFE9ITA7dGhpcy5pbnRlcmNlcHRvcnMucmVxdWVzdC5mb3JFYWNoKGZ1bmN0aW9uKGwpe3R5cGVvZiBsLnJ1bldoZW49PSJmdW5jdGlvbiImJmwucnVuV2hlbihlKT09PSExfHwoUT1RJiZsLnN5bmNocm9ub3VzLEMudW5zaGlmdChsLmZ1bGZpbGxlZCxsLnJlamVjdGVkKSl9KTtsZXQgYT1bXTt0aGlzLmludGVyY2VwdG9ycy5yZXNwb25zZS5mb3JFYWNoKGZ1bmN0aW9uKGwpe2EucHVzaChsLmZ1bGZpbGxlZCxsLnJlamVjdGVkKX0pO2xldCBuLHM9MCxmO2lmKCFRKXtsZXQgRT1bVUEuYmluZCh0aGlzKSx2b2lkIDBdO2ZvcihFLnVuc2hpZnQuYXBwbHkoRSxDKSxFLnB1c2guYXBwbHkoRSxhKSxmPUUubGVuZ3RoLG49UHJvbWlzZS5yZXNvbHZlKGUpO3M8Zjspbj1uLnRoZW4oRVtzKytdLEVbcysrXSk7cmV0dXJuIG59Zj1DLmxlbmd0aDtsZXQgQj1lO2ZvcihzPTA7czxmOyl7bGV0IEU9Q1tzKytdLGw9Q1tzKytdO3RyeXtCPUUoQil9Y2F0Y2goYyl7bC5jYWxsKHRoaXMsYyk7YnJlYWt9fXRyeXtuPVVBLmNhbGwodGhpcyxCKX1jYXRjaChFKXtyZXR1cm4gUHJvbWlzZS5yZWplY3QoRSl9Zm9yKHM9MCxmPWEubGVuZ3RoO3M8Zjspbj1uLnRoZW4oYVtzKytdLGFbcysrXSk7cmV0dXJuIG59Z2V0VXJpKHQpe3Q9ayh0aGlzLmRlZmF1bHRzLHQpO2xldCBlPWdBKHQuYmFzZVVSTCx0LnVybCk7cmV0dXJuIHRBKGUsdC5wYXJhbXMsdC5wYXJhbXNTZXJpYWxpemVyKX19O2kuZm9yRWFjaChbImRlbGV0ZSIsImdldCIsImhlYWQiLCJvcHRpb25zIl0sZnVuY3Rpb24odCl7WC5wcm90b3R5cGVbdF09ZnVuY3Rpb24oZSxJKXtyZXR1cm4gdGhpcy5yZXF1ZXN0KGsoSXx8e30se21ldGhvZDp0LHVybDplLGRhdGE6KEl8fHt9KS5kYXRhfSkpfX0pO2kuZm9yRWFjaChbInBvc3QiLCJwdXQiLCJwYXRjaCJdLGZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoSSl7cmV0dXJuIGZ1bmN0aW9uKG8sZyxDKXtyZXR1cm4gdGhpcy5yZXF1ZXN0KGsoQ3x8e30se21ldGhvZDp0LGhlYWRlcnM6ST97IkNvbnRlbnQtVHlwZSI6Im11bHRpcGFydC9mb3JtLWRhdGEifTp7fSx1cmw6byxkYXRhOmd9KSl9fVgucHJvdG90eXBlW3RdPWUoKSxYLnByb3RvdHlwZVt0KyJGb3JtIl09ZSghMCl9KTt2YXIgaUE9WDt2YXIgbnQ9Y2xhc3MgQXtjb25zdHJ1Y3Rvcih0KXtpZih0eXBlb2YgdCE9ImZ1bmN0aW9uIil0aHJvdyBuZXcgVHlwZUVycm9yKCJleGVjdXRvciBtdXN0IGJlIGEgZnVuY3Rpb24uIik7bGV0IGU7dGhpcy5wcm9taXNlPW5ldyBQcm9taXNlKGZ1bmN0aW9uKG8pe2U9b30pO2xldCBJPXRoaXM7dGhpcy5wcm9taXNlLnRoZW4ocj0+e2lmKCFJLl9saXN0ZW5lcnMpcmV0dXJuO2xldCBvPUkuX2xpc3RlbmVycy5sZW5ndGg7Zm9yKDtvLS0gPjA7KUkuX2xpc3RlbmVyc1tvXShyKTtJLl9saXN0ZW5lcnM9bnVsbH0pLHRoaXMucHJvbWlzZS50aGVuPXI9PntsZXQgbyxnPW5ldyBQcm9taXNlKEM9PntJLnN1YnNjcmliZShDKSxvPUN9KS50aGVuKHIpO3JldHVybiBnLmNhbmNlbD1mdW5jdGlvbigpe0kudW5zdWJzY3JpYmUobyl9LGd9LHQoZnVuY3Rpb24obyxnLEMpe0kucmVhc29ufHwoSS5yZWFzb249bmV3IGIobyxnLEMpLGUoSS5yZWFzb24pKX0pfXRocm93SWZSZXF1ZXN0ZWQoKXtpZih0aGlzLnJlYXNvbil0aHJvdyB0aGlzLnJlYXNvbn1zdWJzY3JpYmUodCl7aWYodGhpcy5yZWFzb24pe3QodGhpcy5yZWFzb24pO3JldHVybn10aGlzLl9saXN0ZW5lcnM/dGhpcy5fbGlzdGVuZXJzLnB1c2godCk6dGhpcy5fbGlzdGVuZXJzPVt0XX11bnN1YnNjcmliZSh0KXtpZighdGhpcy5fbGlzdGVuZXJzKXJldHVybjtsZXQgZT10aGlzLl9saXN0ZW5lcnMuaW5kZXhPZih0KTtlIT09LTEmJnRoaXMuX2xpc3RlbmVycy5zcGxpY2UoZSwxKX1zdGF0aWMgc291cmNlKCl7bGV0IHQ7cmV0dXJue3Rva2VuOm5ldyBBKGZ1bmN0aW9uKHIpe3Q9cn0pLGNhbmNlbDp0fX19LG9lPW50O2Z1bmN0aW9uIHN0KEEpe3JldHVybiBmdW5jdGlvbihlKXtyZXR1cm4gQS5hcHBseShudWxsLGUpfX1mdW5jdGlvbiBDdChBKXtyZXR1cm4gaS5pc09iamVjdChBKSYmQS5pc0F4aW9zRXJyb3I9PT0hMH12YXIgQnQ9e0NvbnRpbnVlOjEwMCxTd2l0Y2hpbmdQcm90b2NvbHM6MTAxLFByb2Nlc3Npbmc6MTAyLEVhcmx5SGludHM6MTAzLE9rOjIwMCxDcmVhdGVkOjIwMSxBY2NlcHRlZDoyMDIsTm9uQXV0aG9yaXRhdGl2ZUluZm9ybWF0aW9uOjIwMyxOb0NvbnRlbnQ6MjA0LFJlc2V0Q29udGVudDoyMDUsUGFydGlhbENvbnRlbnQ6MjA2LE11bHRpU3RhdHVzOjIwNyxBbHJlYWR5UmVwb3J0ZWQ6MjA4LEltVXNlZDoyMjYsTXVsdGlwbGVDaG9pY2VzOjMwMCxNb3ZlZFBlcm1hbmVudGx5OjMwMSxGb3VuZDozMDIsU2VlT3RoZXI6MzAzLE5vdE1vZGlmaWVkOjMwNCxVc2VQcm94eTozMDUsVW51c2VkOjMwNixUZW1wb3JhcnlSZWRpcmVjdDozMDcsUGVybWFuZW50UmVkaXJlY3Q6MzA4LEJhZFJlcXVlc3Q6NDAwLFVuYXV0aG9yaXplZDo0MDEsUGF5bWVudFJlcXVpcmVkOjQwMixGb3JiaWRkZW46NDAzLE5vdEZvdW5kOjQwNCxNZXRob2ROb3RBbGxvd2VkOjQwNSxOb3RBY2NlcHRhYmxlOjQwNixQcm94eUF1dGhlbnRpY2F0aW9uUmVxdWlyZWQ6NDA3LFJlcXVlc3RUaW1lb3V0OjQwOCxDb25mbGljdDo0MDksR29uZTo0MTAsTGVuZ3RoUmVxdWlyZWQ6NDExLFByZWNvbmRpdGlvbkZhaWxlZDo0MTIsUGF5bG9hZFRvb0xhcmdlOjQxMyxVcmlUb29Mb25nOjQxNCxVbnN1cHBvcnRlZE1lZGlhVHlwZTo0MTUsUmFuZ2VOb3RTYXRpc2ZpYWJsZTo0MTYsRXhwZWN0YXRpb25GYWlsZWQ6NDE3LEltQVRlYXBvdDo0MTgsTWlzZGlyZWN0ZWRSZXF1ZXN0OjQyMSxVbnByb2Nlc3NhYmxlRW50aXR5OjQyMixMb2NrZWQ6NDIzLEZhaWxlZERlcGVuZGVuY3k6NDI0LFRvb0Vhcmx5OjQyNSxVcGdyYWRlUmVxdWlyZWQ6NDI2LFByZWNvbmRpdGlvblJlcXVpcmVkOjQyOCxUb29NYW55UmVxdWVzdHM6NDI5LFJlcXVlc3RIZWFkZXJGaWVsZHNUb29MYXJnZTo0MzEsVW5hdmFpbGFibGVGb3JMZWdhbFJlYXNvbnM6NDUxLEludGVybmFsU2VydmVyRXJyb3I6NTAwLE5vdEltcGxlbWVudGVkOjUwMSxCYWRHYXRld2F5OjUwMixTZXJ2aWNlVW5hdmFpbGFibGU6NTAzLEdhdGV3YXlUaW1lb3V0OjUwNCxIdHRwVmVyc2lvbk5vdFN1cHBvcnRlZDo1MDUsVmFyaWFudEFsc29OZWdvdGlhdGVzOjUwNixJbnN1ZmZpY2llbnRTdG9yYWdlOjUwNyxMb29wRGV0ZWN0ZWQ6NTA4LE5vdEV4dGVuZGVkOjUxMCxOZXR3b3JrQXV0aGVudGljYXRpb25SZXF1aXJlZDo1MTF9O09iamVjdC5lbnRyaWVzKEJ0KS5mb3JFYWNoKChbQSx0XSk9PntCdFt0XT1BfSk7dmFyIGdlPUJ0O2Z1bmN0aW9uIGllKEEpe2xldCB0PW5ldyBpQShBKSxlPXYoaUEucHJvdG90eXBlLnJlcXVlc3QsdCk7cmV0dXJuIGkuZXh0ZW5kKGUsaUEucHJvdG90eXBlLHQse2FsbE93bktleXM6ITB9KSxpLmV4dGVuZChlLHQsbnVsbCx7YWxsT3duS2V5czohMH0pLGUuY3JlYXRlPWZ1bmN0aW9uKHIpe3JldHVybiBpZShrKEEscikpfSxlfXZhciBkPWllKFopO2QuQXhpb3M9aUE7ZC5DYW5jZWxlZEVycm9yPWI7ZC5DYW5jZWxUb2tlbj1vZTtkLmlzQ2FuY2VsPXJBO2QuVkVSU0lPTj1HQTtkLnRvRm9ybURhdGE9cTtkLkF4aW9zRXJyb3I9dTtkLkNhbmNlbD1kLkNhbmNlbGVkRXJyb3I7ZC5hbGw9ZnVuY3Rpb24odCl7cmV0dXJuIFByb21pc2UuYWxsKHQpfTtkLnNwcmVhZD1zdDtkLmlzQXhpb3NFcnJvcj1DdDtkLm1lcmdlQ29uZmlnPWs7ZC5BeGlvc0hlYWRlcnM9bTtkLmZvcm1Ub0pTT049QT0+d0EoaS5pc0hUTUxGb3JtKEEpP25ldyBGb3JtRGF0YShBKTpBKTtkLmdldEFkYXB0ZXI9TkEuZ2V0QWRhcHRlcjtkLkh0dHBTdGF0dXNDb2RlPWdlO2QuZGVmYXVsdD1kO3ZhciBMQT1kO3ZhcntBeGlvczpFaSxBeGlvc0Vycm9yOmNpLENhbmNlbGVkRXJyb3I6ZmksaXNDYW5jZWw6bGksQ2FuY2VsVG9rZW46dWksVkVSU0lPTjpEaSxhbGw6aGksQ2FuY2VsOmRpLGlzQXhpb3NFcnJvcjp5aSxzcHJlYWQ6bWksdG9Gb3JtRGF0YTp3aSxBeGlvc0hlYWRlcnM6cGksSHR0cFN0YXR1c0NvZGU6U2ksZm9ybVRvSlNPTjpGaSxnZXRBZGFwdGVyOlJpLG1lcmdlQ29uZmlnOk5pfT1MQTt2YXIgbkEsWSxRdCxhdD17ZW52OntlbXNjcmlwdGVuX25vdGlmeV9tZW1vcnlfZ3Jvd3RoOmZ1bmN0aW9uKEEpe1F0PW5ldyBVaW50OEFycmF5KFkuZXhwb3J0cy5tZW1vcnkuYnVmZmVyKX19fSxKQT1jbGFzc3tpbml0KCl7cmV0dXJuIG5BfHwodHlwZW9mIGZldGNoPCJ1Ij9uQT1mZXRjaCgiZGF0YTphcHBsaWNhdGlvbi93YXNtO2Jhc2U2NCwiK25lKS50aGVuKHQ9PnQuYXJyYXlCdWZmZXIoKSkudGhlbih0PT5XZWJBc3NlbWJseS5pbnN0YW50aWF0ZSh0LGF0KSkudGhlbih0aGlzLl9pbml0KTpuQT1XZWJBc3NlbWJseS5pbnN0YW50aWF0ZShCdWZmZXIuZnJvbShuZSwiYmFzZTY0IiksYXQpLnRoZW4odGhpcy5faW5pdCksbkEpfV9pbml0KHQpe1k9dC5pbnN0YW5jZSxhdC5lbnYuZW1zY3JpcHRlbl9ub3RpZnlfbWVtb3J5X2dyb3d0aCgwKX1kZWNvZGUodCxlPTApe2lmKCFZKXRocm93IG5ldyBFcnJvcigiWlNURERlY29kZXI6IEF3YWl0IC5pbml0KCkgYmVmb3JlIGRlY29kaW5nLiIpO2xldCBJPXQuYnl0ZUxlbmd0aCxyPVkuZXhwb3J0cy5tYWxsb2MoSSk7UXQuc2V0KHQsciksZT1lfHxOdW1iZXIoWS5leHBvcnRzLlpTVERfZmluZERlY29tcHJlc3NlZFNpemUocixJKSk7bGV0IG89WS5leHBvcnRzLm1hbGxvYyhlKSxnPVkuZXhwb3J0cy5aU1REX2RlY29tcHJlc3MobyxlLHIsSSksQz1RdC5zbGljZShvLG8rZyk7cmV0dXJuIFkuZXhwb3J0cy5mcmVlKHIpLFkuZXhwb3J0cy5mcmVlKG8pLEN9fSxuZT0iQUdGemJRRUFBQUFCYmc1Z0EzOS9md0YvWUFGL0FYOWdBbjkvQUdBQmZ3QmdCWDkvZjM5L0FYOWdBMzkvZndCZ0JIOS9mMzhCZjJBQUFYOWdBbjkvQVg5Z0IzOS9mMzkvZjM4QmYyQUNmMzhCZm1BSWYzOS9mMzkvZjM4QmYyQUZmMzkvZjM4QVlBNS9mMzkvZjM5L2YzOS9mMzkvZndGL0FpY0JBMlZ1ZGg5bGJYTmpjbWx3ZEdWdVgyNXZkR2xtZVY5dFpXMXZjbmxmWjNKdmQzUm9BQU1ESXlJSEFBQUJBUU1IQXdFQUNRUUFCUUVJQ0FFRkJnUUVCQU1HQUFBS0FBVUxEQTBHQkFVQmNBRUJBUVVIQVFHQUFvQ0FBZ1lJQVg4QlFZQ2pCQXNIcmdFTEJtMWxiVzl5ZVFJQUJtMWhiR3h2WXdBRkJHWnlaV1VBQmd4YVUxUkVYMmx6UlhKeWIzSUFFaGxhVTFSRVgyWnBibVJFWldOdmJYQnlaWE56WldSVGFYcGxBQndQV2xOVVJGOWtaV052YlhCeVpYTnpBQ0laWDE5cGJtUnBjbVZqZEY5bWRXNWpkR2x2Ymw5MFlXSnNaUUVBRUY5ZlpYSnlibTlmYkc5allYUnBiMjRBQVFsemRHRmphMU5oZG1VQUJ3eHpkR0ZqYTFKbGMzUnZjbVVBQ0FwemRHRmphMEZzYkc5akFBa0tpL0lCSWdVQVFZUWZDek1CQVg4Z0FnUkFJQUFoQXdOQUlBTWdBUzBBQURvQUFDQURRUUZxSVFNZ0FVRUJhaUVCSUFKQkFXc2lBZzBBQ3dzZ0FBc3BBUUYvSUFJRVFDQUFJUU1EUUNBRElBRTZBQUFnQTBFQmFpRURJQUpCQVdzaUFnMEFDd3NnQUF0c0FRSi9RWUFmS0FJQUlnRWdBRUVIYWtGNGNTSUNhaUVBQWtBZ0FrRUFJQUFnQVUwYkRRQWdBRDhBUVJCMFN3UkFJQUEvQUVFUWRHdEIvLzhEYWtFUWRrQUFRWDlHQkg5QkFBVkJBQkFBUVFFTFJRMEJDMEdBSHlBQU5nSUFJQUVQQzBHRUgwRXdOZ0lBUVg4THVTY0JDMzhqQUVFUWF5SUtKQUFDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBSUFCQjlBRk5CRUJCaUI4b0FnQWlCa0VRSUFCQkMycEJlSEVnQUVFTFNSc2lCVUVEZGlJQWRpSUJRUU54QkVBQ1FDQUJRWDl6UVFGeElBQnFJZ0pCQTNRaUFVR3dIMm9pQUNBQlFiZ2ZhaWdDQUNJQktBSUlJZ1JHQkVCQmlCOGdCa0YrSUFKM2NUWUNBQXdCQ3lBRUlBQTJBZ3dnQUNBRU5nSUlDeUFCUVFocUlRQWdBU0FDUVFOMElnSkJBM0kyQWdRZ0FTQUNhaUlCSUFFb0FnUkJBWEkyQWdRTUR3c2dCVUdRSHlnQ0FDSUhUUTBCSUFFRVFBSkFRUUlnQUhRaUFrRUFJQUpyY2lBQklBQjBjV2dpQVVFRGRDSUFRYkFmYWlJQ0lBQkJ1QjlxS0FJQUlnQW9BZ2dpQkVZRVFFR0lIeUFHUVg0Z0FYZHhJZ1kyQWdBTUFRc2dCQ0FDTmdJTUlBSWdCRFlDQ0FzZ0FDQUZRUU55TmdJRUlBQWdCV29pQ0NBQlFRTjBJZ0VnQldzaUJFRUJjallDQkNBQUlBRnFJQVEyQWdBZ0J3UkFJQWRCZUhGQnNCOXFJUUZCbkI4b0FnQWhBZ0ovSUFaQkFTQUhRUU4yZENJRGNVVUVRRUdJSHlBRElBWnlOZ0lBSUFFTUFRc2dBU2dDQ0FzaEF5QUJJQUkyQWdnZ0F5QUNOZ0lNSUFJZ0FUWUNEQ0FDSUFNMkFnZ0xJQUJCQ0dvaEFFR2NIeUFJTmdJQVFaQWZJQVEyQWdBTUR3dEJqQjhvQWdBaUMwVU5BU0FMYUVFQ2RFRzRJV29vQWdBaUFpZ0NCRUY0Y1NBRmF5RURJQUloQVFOQUFrQWdBU2dDRUNJQVJRUkFJQUVvQWhRaUFFVU5BUXNnQUNnQ0JFRjRjU0FGYXlJQklBTWdBU0FEU1NJQkd5RURJQUFnQWlBQkd5RUNJQUFoQVF3QkN3c2dBaWdDR0NFSklBSWdBaWdDRENJRVJ3UkFRWmdmS0FJQUdpQUNLQUlJSWdBZ0JEWUNEQ0FFSUFBMkFnZ01EZ3NnQWtFVWFpSUJLQUlBSWdCRkJFQWdBaWdDRUNJQVJRMERJQUpCRUdvaEFRc0RRQ0FCSVFnZ0FDSUVRUlJxSWdFb0FnQWlBQTBBSUFSQkVHb2hBU0FFS0FJUUlnQU5BQXNnQ0VFQU5nSUFEQTBMUVg4aEJTQUFRYjkvU3cwQUlBQkJDMm9pQUVGNGNTRUZRWXdmS0FJQUlnaEZEUUJCQUNBRmF5RURBa0FDUUFKQUFuOUJBQ0FGUVlBQ1NRMEFHa0VmSUFWQi8vLy9CMHNOQUJvZ0JVRW1JQUJCQ0habklnQnJka0VCY1NBQVFRRjBhMEUrYWdzaUIwRUNkRUc0SVdvb0FnQWlBVVVFUUVFQUlRQU1BUXRCQUNFQUlBVkJHU0FIUVFGMmEwRUFJQWRCSDBjYmRDRUNBMEFDUUNBQktBSUVRWGh4SUFWcklnWWdBMDhOQUNBQklRUWdCaUlERFFCQkFDRURJQUVoQUF3REN5QUFJQUVvQWhRaUJpQUdJQUVnQWtFZGRrRUVjV29vQWhBaUFVWWJJQUFnQmhzaEFDQUNRUUYwSVFJZ0FRMEFDd3NnQUNBRWNrVUVRRUVBSVFSQkFpQUhkQ0lBUVFBZ0FHdHlJQWh4SWdCRkRRTWdBR2hCQW5SQnVDRnFLQUlBSVFBTElBQkZEUUVMQTBBZ0FDZ0NCRUY0Y1NBRmF5SUNJQU5KSVFFZ0FpQURJQUViSVFNZ0FDQUVJQUViSVFRZ0FDZ0NFQ0lCQkg4Z0FRVWdBQ2dDRkFzaUFBMEFDd3NnQkVVTkFDQURRWkFmS0FJQUlBVnJUdzBBSUFRb0FoZ2hCeUFFSUFRb0Fnd2lBa2NFUUVHWUh5Z0NBQm9nQkNnQ0NDSUFJQUkyQWd3Z0FpQUFOZ0lJREF3TElBUkJGR29pQVNnQ0FDSUFSUVJBSUFRb0FoQWlBRVVOQXlBRVFSQnFJUUVMQTBBZ0FTRUdJQUFpQWtFVWFpSUJLQUlBSWdBTkFDQUNRUkJxSVFFZ0FpZ0NFQ0lBRFFBTElBWkJBRFlDQUF3TEN5QUZRWkFmS0FJQUlnUk5CRUJCbkI4b0FnQWhBQUpBSUFRZ0JXc2lBVUVRVHdSQUlBQWdCV29pQWlBQlFRRnlOZ0lFSUFBZ0JHb2dBVFlDQUNBQUlBVkJBM0kyQWdRTUFRc2dBQ0FFUVFOeU5nSUVJQUFnQkdvaUFTQUJLQUlFUVFGeU5nSUVRUUFoQWtFQUlRRUxRWkFmSUFFMkFnQkJuQjhnQWpZQ0FDQUFRUWhxSVFBTURRc2dCVUdVSHlnQ0FDSUNTUVJBUVpRZklBSWdCV3NpQVRZQ0FFR2dIMEdnSHlnQ0FDSUFJQVZxSWdJMkFnQWdBaUFCUVFGeU5nSUVJQUFnQlVFRGNqWUNCQ0FBUVFocUlRQU1EUXRCQUNFQUlBVkJMMm9pQXdKL1FlQWlLQUlBQkVCQjZDSW9BZ0FNQVF0QjdDSkNmemNDQUVIa0lrS0FvSUNBZ0lBRU53SUFRZUFpSUFwQkRHcEJjSEZCMktyVnFnVnpOZ0lBUWZRaVFRQTJBZ0JCeENKQkFEWUNBRUdBSUFzaUFXb2lCa0VBSUFGcklnaHhJZ0VnQlUwTkRFSEFJaWdDQUNJRUJFQkJ1Q0lvQWdBaUJ5QUJhaUlKSUFkTklBUWdDVWx5RFEwTEFrQkJ4Q0l0QUFCQkJIRkZCRUFDUUFKQUFrQUNRRUdnSHlnQ0FDSUVCRUJCeUNJaEFBTkFJQVFnQUNnQ0FDSUhUd1JBSUFjZ0FDZ0NCR29nQkVzTkF3c2dBQ2dDQ0NJQURRQUxDMEVBRUFRaUFrRi9SZzBESUFFaEJrSGtJaWdDQUNJQVFRRnJJZ1FnQW5FRVFDQUJJQUpySUFJZ0JHcEJBQ0FBYTNGcUlRWUxJQVVnQms4TkEwSEFJaWdDQUNJQUJFQkJ1Q0lvQWdBaUJDQUdhaUlJSUFSTklBQWdDRWx5RFFRTElBWVFCQ0lBSUFKSERRRU1CUXNnQmlBQ2F5QUljU0lHRUFRaUFpQUFLQUlBSUFBb0FnUnFSZzBCSUFJaEFBc2dBRUYvUmcwQklBVkJNR29nQmswRVFDQUFJUUlNQkF0QjZDSW9BZ0FpQWlBRElBWnJha0VBSUFKcmNTSUNFQVJCZjBZTkFTQUNJQVpxSVFZZ0FDRUNEQU1MSUFKQmYwY05BZ3RCeENKQnhDSW9BZ0JCQkhJMkFnQUxJQUVRQkNJQ1FYOUdRUUFRQkNJQVFYOUdjaUFBSUFKTmNnMEZJQUFnQW1zaUJpQUZRU2hxVFEwRkMwRzRJa0c0SWlnQ0FDQUdhaUlBTmdJQVFid2lLQUlBSUFCSkJFQkJ2Q0lnQURZQ0FBc0NRRUdnSHlnQ0FDSURCRUJCeUNJaEFBTkFJQUlnQUNnQ0FDSUJJQUFvQWdRaUJHcEdEUUlnQUNnQ0NDSUFEUUFMREFRTFFaZ2ZLQUlBSWdCQkFDQUFJQUpORzBVRVFFR1lIeUFDTmdJQUMwRUFJUUJCekNJZ0JqWUNBRUhJSWlBQ05nSUFRYWdmUVg4MkFnQkJyQjlCNENJb0FnQTJBZ0JCMUNKQkFEWUNBQU5BSUFCQkEzUWlBVUc0SDJvZ0FVR3dIMm9pQkRZQ0FDQUJRYndmYWlBRU5nSUFJQUJCQVdvaUFFRWdSdzBBQzBHVUh5QUdRU2hySWdCQmVDQUNhMEVIY1NJQmF5SUVOZ0lBUWFBZklBRWdBbW9pQVRZQ0FDQUJJQVJCQVhJMkFnUWdBQ0FDYWtFb05nSUVRYVFmUWZBaUtBSUFOZ0lBREFRTElBSWdBMDBnQVNBRFMzSU5BaUFBS0FJTVFRaHhEUUlnQUNBRUlBWnFOZ0lFUWFBZklBTkJlQ0FEYTBFSGNTSUFhaUlCTmdJQVFaUWZRWlFmS0FJQUlBWnFJZ0lnQUdzaUFEWUNBQ0FCSUFCQkFYSTJBZ1FnQWlBRGFrRW9OZ0lFUWFRZlFmQWlLQUlBTmdJQURBTUxRUUFoQkF3S0MwRUFJUUlNQ0F0Qm1COG9BZ0FnQWtzRVFFR1lIeUFDTmdJQUN5QUNJQVpxSVFGQnlDSWhBQUpBQWtBQ1FBTkFJQUVnQUNnQ0FFY0VRQ0FBS0FJSUlnQU5BUXdDQ3dzZ0FDMEFERUVJY1VVTkFRdEJ5Q0loQUFOQUlBTWdBQ2dDQUNJQlR3UkFJQUVnQUNnQ0JHb2lCQ0FEU3cwREN5QUFLQUlJSVFBTUFBc0FDeUFBSUFJMkFnQWdBQ0FBS0FJRUlBWnFOZ0lFSUFKQmVDQUNhMEVIY1dvaUJ5QUZRUU55TmdJRUlBRkJlQ0FCYTBFSGNXb2lCaUFGSUFkcUlnVnJJUUFnQXlBR1JnUkFRYUFmSUFVMkFnQkJsQjlCbEI4b0FnQWdBR29pQURZQ0FDQUZJQUJCQVhJMkFnUU1DQXRCbkI4b0FnQWdCa1lFUUVHY0h5QUZOZ0lBUVpBZlFaQWZLQUlBSUFCcUlnQTJBZ0FnQlNBQVFRRnlOZ0lFSUFBZ0JXb2dBRFlDQUF3SUN5QUdLQUlFSWdOQkEzRkJBVWNOQmlBRFFYaHhJUWtnQTBIL0FVMEVRQ0FHS0FJTUlnRWdCaWdDQ0NJQ1JnUkFRWWdmUVlnZktBSUFRWDRnQTBFRGRuZHhOZ0lBREFjTElBSWdBVFlDRENBQklBSTJBZ2dNQmdzZ0JpZ0NHQ0VJSUFZZ0JpZ0NEQ0lDUndSQUlBWW9BZ2dpQVNBQ05nSU1JQUlnQVRZQ0NBd0ZDeUFHUVJScUlnRW9BZ0FpQTBVRVFDQUdLQUlRSWdORkRRUWdCa0VRYWlFQkN3TkFJQUVoQkNBRElnSkJGR29pQVNnQ0FDSUREUUFnQWtFUWFpRUJJQUlvQWhBaUF3MEFDeUFFUVFBMkFnQU1CQXRCbEI4Z0JrRW9heUlBUVhnZ0FtdEJCM0VpQVdzaUNEWUNBRUdnSHlBQklBSnFJZ0UyQWdBZ0FTQUlRUUZ5TmdJRUlBQWdBbXBCS0RZQ0JFR2tIMEh3SWlnQ0FEWUNBQ0FESUFSQkp5QUVhMEVIY1dwQkwyc2lBQ0FBSUFOQkVHcEpHeUlCUVJzMkFnUWdBVUhRSWlrQ0FEY0NFQ0FCUWNnaUtRSUFOd0lJUWRBaUlBRkJDR28yQWdCQnpDSWdCallDQUVISUlpQUNOZ0lBUWRRaVFRQTJBZ0FnQVVFWWFpRUFBMEFnQUVFSE5nSUVJQUJCQ0dvZ0FFRUVhaUVBSUFSSkRRQUxJQUVnQTBZTkFDQUJJQUVvQWdSQmZuRTJBZ1FnQXlBQklBTnJJZ0pCQVhJMkFnUWdBU0FDTmdJQUlBSkIvd0ZOQkVBZ0FrRjRjVUd3SDJvaEFBSi9RWWdmS0FJQUlnRkJBU0FDUVFOMmRDSUNjVVVFUUVHSUh5QUJJQUp5TmdJQUlBQU1BUXNnQUNnQ0NBc2hBU0FBSUFNMkFnZ2dBU0FETmdJTUlBTWdBRFlDRENBRElBRTJBZ2dNQVF0Qkh5RUFJQUpCLy8vL0IwMEVRQ0FDUVNZZ0FrRUlkbWNpQUd0MlFRRnhJQUJCQVhSclFUNXFJUUFMSUFNZ0FEWUNIQ0FEUWdBM0FoQWdBRUVDZEVHNElXb2hBUUpBQWtCQmpCOG9BZ0FpQkVFQklBQjBJZ1p4UlFSQVFZd2ZJQVFnQm5JMkFnQWdBU0FETmdJQURBRUxJQUpCR1NBQVFRRjJhMEVBSUFCQkgwY2JkQ0VBSUFFb0FnQWhCQU5BSUFRaUFTZ0NCRUY0Y1NBQ1JnMENJQUJCSFhZaEJDQUFRUUYwSVFBZ0FTQUVRUVJ4YWlJR0tBSVFJZ1FOQUFzZ0JpQUROZ0lRQ3lBRElBRTJBaGdnQXlBRE5nSU1JQU1nQXpZQ0NBd0JDeUFCS0FJSUlnQWdBellDRENBQklBTTJBZ2dnQTBFQU5nSVlJQU1nQVRZQ0RDQURJQUEyQWdnTFFaUWZLQUlBSWdBZ0JVME5BRUdVSHlBQUlBVnJJZ0UyQWdCQm9COUJvQjhvQWdBaUFDQUZhaUlDTmdJQUlBSWdBVUVCY2pZQ0JDQUFJQVZCQTNJMkFnUWdBRUVJYWlFQURBZ0xRWVFmUVRBMkFnQkJBQ0VBREFjTFFRQWhBZ3NnQ0VVTkFBSkFJQVlvQWh3aUFVRUNkRUc0SVdvaUJDZ0NBQ0FHUmdSQUlBUWdBallDQUNBQ0RRRkJqQjlCakI4b0FnQkJmaUFCZDNFMkFnQU1BZ3NnQ0VFUVFSUWdDQ2dDRUNBR1JodHFJQUkyQWdBZ0FrVU5BUXNnQWlBSU5nSVlJQVlvQWhBaUFRUkFJQUlnQVRZQ0VDQUJJQUkyQWhnTElBWW9BaFFpQVVVTkFDQUNJQUUyQWhRZ0FTQUNOZ0lZQ3lBQUlBbHFJUUFnQmlBSmFpSUdLQUlFSVFNTElBWWdBMEYrY1RZQ0JDQUZJQUJCQVhJMkFnUWdBQ0FGYWlBQU5nSUFJQUJCL3dGTkJFQWdBRUY0Y1VHd0gyb2hBUUovUVlnZktBSUFJZ0pCQVNBQVFRTjJkQ0lBY1VVRVFFR0lIeUFBSUFKeU5nSUFJQUVNQVFzZ0FTZ0NDQXNoQUNBQklBVTJBZ2dnQUNBRk5nSU1JQVVnQVRZQ0RDQUZJQUEyQWdnTUFRdEJIeUVESUFCQi8vLy9CMDBFUUNBQVFTWWdBRUVJZG1jaUFXdDJRUUZ4SUFGQkFYUnJRVDVxSVFNTElBVWdBellDSENBRlFnQTNBaEFnQTBFQ2RFRzRJV29oQVFKQUFrQkJqQjhvQWdBaUFrRUJJQU4wSWdSeFJRUkFRWXdmSUFJZ0JISTJBZ0FnQVNBRk5nSUFEQUVMSUFCQkdTQURRUUYyYTBFQUlBTkJIMGNiZENFRElBRW9BZ0FoQWdOQUlBSWlBU2dDQkVGNGNTQUFSZzBDSUFOQkhYWWhBaUFEUVFGMElRTWdBU0FDUVFSeGFpSUVLQUlRSWdJTkFBc2dCQ0FGTmdJUUN5QUZJQUUyQWhnZ0JTQUZOZ0lNSUFVZ0JUWUNDQXdCQ3lBQktBSUlJZ0FnQlRZQ0RDQUJJQVUyQWdnZ0JVRUFOZ0lZSUFVZ0FUWUNEQ0FGSUFBMkFnZ0xJQWRCQ0dvaEFBd0NDd0pBSUFkRkRRQUNRQ0FFS0FJY0lnQkJBblJCdUNGcUlnRW9BZ0FnQkVZRVFDQUJJQUkyQWdBZ0FnMEJRWXdmSUFoQmZpQUFkM0VpQ0RZQ0FBd0NDeUFIUVJCQkZDQUhLQUlRSUFSR0cyb2dBallDQUNBQ1JRMEJDeUFDSUFjMkFoZ2dCQ2dDRUNJQUJFQWdBaUFBTmdJUUlBQWdBallDR0FzZ0JDZ0NGQ0lBUlEwQUlBSWdBRFlDRkNBQUlBSTJBaGdMQWtBZ0EwRVBUUVJBSUFRZ0F5QUZhaUlBUVFOeU5nSUVJQUFnQkdvaUFDQUFLQUlFUVFGeU5nSUVEQUVMSUFRZ0JVRURjallDQkNBRUlBVnFJZ0lnQTBFQmNqWUNCQ0FDSUFOcUlBTTJBZ0FnQTBIL0FVMEVRQ0FEUVhoeFFiQWZhaUVBQW45QmlCOG9BZ0FpQVVFQklBTkJBM1owSWdOeFJRUkFRWWdmSUFFZ0EzSTJBZ0FnQUF3QkN5QUFLQUlJQ3lFQklBQWdBallDQ0NBQklBSTJBZ3dnQWlBQU5nSU1JQUlnQVRZQ0NBd0JDMEVmSVFBZ0EwSC8vLzhIVFFSQUlBTkJKaUFEUVFoMlp5SUFhM1pCQVhFZ0FFRUJkR3RCUG1vaEFBc2dBaUFBTmdJY0lBSkNBRGNDRUNBQVFRSjBRYmdoYWlFQkFrQUNRQ0FJUVFFZ0FIUWlCbkZGQkVCQmpCOGdCaUFJY2pZQ0FDQUJJQUkyQWdBTUFRc2dBMEVaSUFCQkFYWnJRUUFnQUVFZlJ4dDBJUUFnQVNnQ0FDRUZBMEFnQlNJQktBSUVRWGh4SUFOR0RRSWdBRUVkZGlFR0lBQkJBWFFoQUNBQklBWkJCSEZxSWdZb0FoQWlCUTBBQ3lBR0lBSTJBaEFMSUFJZ0FUWUNHQ0FDSUFJMkFnd2dBaUFDTmdJSURBRUxJQUVvQWdnaUFDQUNOZ0lNSUFFZ0FqWUNDQ0FDUVFBMkFoZ2dBaUFCTmdJTUlBSWdBRFlDQ0FzZ0JFRUlhaUVBREFFTEFrQWdDVVVOQUFKQUlBSW9BaHdpQUVFQ2RFRzRJV29pQVNnQ0FDQUNSZ1JBSUFFZ0JEWUNBQ0FFRFFGQmpCOGdDMEYrSUFCM2NUWUNBQXdDQ3lBSlFSQkJGQ0FKS0FJUUlBSkdHMm9nQkRZQ0FDQUVSUTBCQ3lBRUlBazJBaGdnQWlnQ0VDSUFCRUFnQkNBQU5nSVFJQUFnQkRZQ0dBc2dBaWdDRkNJQVJRMEFJQVFnQURZQ0ZDQUFJQVEyQWhnTEFrQWdBMEVQVFFSQUlBSWdBeUFGYWlJQVFRTnlOZ0lFSUFBZ0Ftb2lBQ0FBS0FJRVFRRnlOZ0lFREFFTElBSWdCVUVEY2pZQ0JDQUNJQVZxSWdRZ0EwRUJjallDQkNBRElBUnFJQU0yQWdBZ0J3UkFJQWRCZUhGQnNCOXFJUUJCbkI4b0FnQWhBUUovUVFFZ0IwRURkblFpQlNBR2NVVUVRRUdJSHlBRklBWnlOZ0lBSUFBTUFRc2dBQ2dDQ0FzaEJpQUFJQUUyQWdnZ0JpQUJOZ0lNSUFFZ0FEWUNEQ0FCSUFZMkFnZ0xRWndmSUFRMkFnQkJrQjhnQXpZQ0FBc2dBa0VJYWlFQUN5QUtRUkJxSkFBZ0FBdlNDd0VIZndKQUlBQkZEUUFnQUVFSWF5SUNJQUJCQkdzb0FnQWlBVUY0Y1NJQWFpRUZBa0FnQVVFQmNRMEFJQUZCQTNGRkRRRWdBaUFDS0FJQUlnRnJJZ0pCbUI4b0FnQkpEUUVnQUNBQmFpRUFBa0FDUUVHY0h5Z0NBQ0FDUndSQUlBRkIvd0ZOQkVBZ0FVRURkaUVFSUFJb0Fnd2lBU0FDS0FJSUlnTkdCRUJCaUI5QmlCOG9BZ0JCZmlBRWQzRTJBZ0FNQlFzZ0F5QUJOZ0lNSUFFZ0F6WUNDQXdFQ3lBQ0tBSVlJUVlnQWlBQ0tBSU1JZ0ZIQkVBZ0FpZ0NDQ0lESUFFMkFnd2dBU0FETmdJSURBTUxJQUpCRkdvaUJDZ0NBQ0lEUlFSQUlBSW9BaEFpQTBVTkFpQUNRUkJxSVFRTEEwQWdCQ0VISUFNaUFVRVVhaUlFS0FJQUlnTU5BQ0FCUVJCcUlRUWdBU2dDRUNJRERRQUxJQWRCQURZQ0FBd0NDeUFGS0FJRUlnRkJBM0ZCQTBjTkFrR1FIeUFBTmdJQUlBVWdBVUYrY1RZQ0JDQUNJQUJCQVhJMkFnUWdCU0FBTmdJQUR3dEJBQ0VCQ3lBR1JRMEFBa0FnQWlnQ0hDSURRUUowUWJnaGFpSUVLQUlBSUFKR0JFQWdCQ0FCTmdJQUlBRU5BVUdNSDBHTUh5Z0NBRUYrSUFOM2NUWUNBQXdDQ3lBR1FSQkJGQ0FHS0FJUUlBSkdHMm9nQVRZQ0FDQUJSUTBCQ3lBQklBWTJBaGdnQWlnQ0VDSURCRUFnQVNBRE5nSVFJQU1nQVRZQ0dBc2dBaWdDRkNJRFJRMEFJQUVnQXpZQ0ZDQURJQUUyQWhnTElBSWdCVThOQUNBRktBSUVJZ0ZCQVhGRkRRQUNRQUpBQWtBQ1FDQUJRUUp4UlFSQVFhQWZLQUlBSUFWR0JFQkJvQjhnQWpZQ0FFR1VIMEdVSHlnQ0FDQUFhaUlBTmdJQUlBSWdBRUVCY2pZQ0JDQUNRWndmS0FJQVJ3MEdRWkFmUVFBMkFnQkJuQjlCQURZQ0FBOExRWndmS0FJQUlBVkdCRUJCbkI4Z0FqWUNBRUdRSDBHUUh5Z0NBQ0FBYWlJQU5nSUFJQUlnQUVFQmNqWUNCQ0FBSUFKcUlBQTJBZ0FQQ3lBQlFYaHhJQUJxSVFBZ0FVSC9BVTBFUUNBQlFRTjJJUVFnQlNnQ0RDSUJJQVVvQWdnaUEwWUVRRUdJSDBHSUh5Z0NBRUYrSUFSM2NUWUNBQXdGQ3lBRElBRTJBZ3dnQVNBRE5nSUlEQVFMSUFVb0FoZ2hCaUFGSUFVb0Fnd2lBVWNFUUVHWUh5Z0NBQm9nQlNnQ0NDSURJQUUyQWd3Z0FTQUROZ0lJREFNTElBVkJGR29pQkNnQ0FDSURSUVJBSUFVb0FoQWlBMFVOQWlBRlFSQnFJUVFMQTBBZ0JDRUhJQU1pQVVFVWFpSUVLQUlBSWdNTkFDQUJRUkJxSVFRZ0FTZ0NFQ0lERFFBTElBZEJBRFlDQUF3Q0N5QUZJQUZCZm5FMkFnUWdBaUFBUVFGeU5nSUVJQUFnQW1vZ0FEWUNBQXdEQzBFQUlRRUxJQVpGRFFBQ1FDQUZLQUljSWdOQkFuUkJ1Q0ZxSWdRb0FnQWdCVVlFUUNBRUlBRTJBZ0FnQVEwQlFZd2ZRWXdmS0FJQVFYNGdBM2R4TmdJQURBSUxJQVpCRUVFVUlBWW9BaEFnQlVZYmFpQUJOZ0lBSUFGRkRRRUxJQUVnQmpZQ0dDQUZLQUlRSWdNRVFDQUJJQU0yQWhBZ0F5QUJOZ0lZQ3lBRktBSVVJZ05GRFFBZ0FTQUROZ0lVSUFNZ0FUWUNHQXNnQWlBQVFRRnlOZ0lFSUFBZ0Ftb2dBRFlDQUNBQ1Fad2ZLQUlBUncwQVFaQWZJQUEyQWdBUEN5QUFRZjhCVFFSQUlBQkJlSEZCc0I5cUlRRUNmMEdJSHlnQ0FDSURRUUVnQUVFRGRuUWlBSEZGQkVCQmlCOGdBQ0FEY2pZQ0FDQUJEQUVMSUFFb0FnZ0xJUUFnQVNBQ05nSUlJQUFnQWpZQ0RDQUNJQUUyQWd3Z0FpQUFOZ0lJRHd0Qkh5RURJQUJCLy8vL0IwMEVRQ0FBUVNZZ0FFRUlkbWNpQVd0MlFRRnhJQUZCQVhSclFUNXFJUU1MSUFJZ0F6WUNIQ0FDUWdBM0FoQWdBMEVDZEVHNElXb2hBUUpBQWtBQ1FFR01IeWdDQUNJRVFRRWdBM1FpQjNGRkJFQkJqQjhnQkNBSGNqWUNBQ0FCSUFJMkFnQWdBaUFCTmdJWURBRUxJQUJCR1NBRFFRRjJhMEVBSUFOQkgwY2JkQ0VESUFFb0FnQWhBUU5BSUFFaUJDZ0NCRUY0Y1NBQVJnMENJQU5CSFhZaEFTQURRUUYwSVFNZ0JDQUJRUVJ4YWlJSFFSQnFLQUlBSWdFTkFBc2dCeUFDTmdJUUlBSWdCRFlDR0FzZ0FpQUNOZ0lNSUFJZ0FqWUNDQXdCQ3lBRUtBSUlJZ0FnQWpZQ0RDQUVJQUkyQWdnZ0FrRUFOZ0lZSUFJZ0JEWUNEQ0FDSUFBMkFnZ0xRYWdmUWFnZktBSUFRUUZySWdCQmZ5QUFHellDQUFzTEJBQWpBQXNHQUNBQUpBQUxFQUFqQUNBQWEwRndjU0lBSkFBZ0FBdEtBUUYvSUFBZ0FVa0VRQ0FBSUFFZ0FoQUNEd3NnQWdSQUlBQWdBbW9oQXlBQklBSnFJUUVEUUNBRFFRRnJJZ01nQVVFQmF5SUJMUUFBT2dBQUlBSkJBV3NpQWcwQUN3c2dBQXY5RGdJUmZ3RitJd0JCTUdzaUJ5UUFRYmgvSVFnQ1FDQUZSUTBBSUFRc0FBQWlDVUgvQVhFaEN3SkFJQWxCQUVnRVFDQUxRZjRBYTBFQmRpSUdJQVZQRFFKQmJDRUlJQXRCL3dCcklndEIvd0ZMRFFJZ0JFRUJhaUVJUVFBaEJRTkFJQVVnQzA4RVFDQUxJUWdnQmlFTERBTUZJQUFnQldvZ0NDQUZRUUYyYWlJRUxRQUFRUVIyT2dBQUlBQWdCVUVCY21vZ0JDMEFBRUVQY1RvQUFDQUZRUUpxSVFVTUFRc0FDd0FMSUFVZ0MwME5BU0FIUWY4Qk5nSUVJQVlnQjBFRWFpQUhRUWhxSUFSQkFXb2lEaUFMRUF3aUJFR0lmMHNFUUNBRUlRZ01BZ3RCVkNFSUlBY29BZ2dpRUVFR1N3MEJJQWNvQWdRaUVVRUJkQ0lKUVFKcXJVSUJJQkN0aGlJWVFRRWdFSFFpRFVFQmFpSUZyVUlDaG54OFFndDhRdnovLy8vLy8vLy8vd0NEUXVRQ1ZnMEJRVkloQ0NBUlFmOEJTdzBCSUExQmYzTkJBblJCNUFKcXJTQVJRUUZxSWhWQkFYU3RJQmg4UWdoOFZBMEJJQXNnQkdzaEZpQUVJQTVxSVJjZ0JrR0FCR29pRWlBRlFRSjBhaUlSSUFscVFRSnFJUTRnQmtHRUJHb2hFMEdBZ0FJZ0VIUkJFSFloQ1VFQUlRVkJBU0VQSUExQkFXc2lGQ0VLQTBBZ0JTQVZSa1VFUUFKQUlBWWdCVUVCZENJSWFpOEJBQ0lFUWYvL0EwWUVRQ0FUSUFwQkFuUnFJQVU2QUFJZ0NrRUJheUVLUVFFaEJBd0JDeUFQUVFBZ0NTQUV3VW9iSVE4TElBZ2dFV29nQkRzQkFDQUZRUUZxSVFVTUFRc0xJQVlnRHpzQmdnUWdCaUFRT3dHQUJBSkFJQW9nRkVZRVFDQU5RUU4ySVFoQ0FDRVlRUUFoRHdOQUlBd2dGVVlFUUNBSUlBMUJBWFpxUVFOcUlnbEJBWFFoQ0VFQUlRUkJBQ0VLQTBCQkFDRUZJQW9nRFU4TkJBTkFJQVZCQWtaRkJFQWdFeUFGSUFsc0lBUnFJQlJ4UVFKMGFpQU9JQVVnQ21wcUxRQUFPZ0FDSUFWQkFXb2hCUXdCQ3dzZ0NrRUNhaUVLSUFRZ0NHb2dGSEVoQkF3QUN3QUZJQVlnREVFQmRHb3VBUUFoQ1NBT0lBOXFJZ1FnR0RjQUFFRUlJUVVEUUNBRklBbE9SUVJBSUFRZ0JXb2dHRGNBQUNBRlFRaHFJUVVNQVFzTElCaENnWUtFaUpDZ3dJQUJmQ0VZSUF4QkFXb2hEQ0FKSUE5cUlROE1BUXNBQ3dBTElBMUJBM1lnRFVFQmRtcEJBMm9oQ0VFQUlRVURRQ0FNSUJWR1JRUkFRUUFoQ1NBR0lBeEJBWFJxTGdFQUlnUkJBQ0FFUVFCS0d5RUVBMEFnQkNBSlJrVUVRQ0FUSUFWQkFuUnFJQXc2QUFJRFFDQUZJQWhxSUJSeElnVWdDa3NOQUFzZ0NVRUJhaUVKREFFTEN5QU1RUUZxSVF3TUFRc0xRWDhoQ0NBRkRRSUxJQkJCQVdvaENFRUFJUVVEUUNBRklBMUdSUVJBSUJFZ0V5QUZRUUowYWlJT0xRQUNRUUYwYWlJRUlBUXZBUUFpQ1VFQmFqc0JBQ0FPSUFnZ0NXZEJZSE5xSWdRNkFBTWdEaUFKSUFSMElBMXJPd0VBSUFWQkFXb2hCUXdCQ3dzQ1FBSkFJQVl2QVlJRUJFQWdCMEVjYWlJRUlCY2dGaEFOSWdoQmlIOUxEUUlnQjBFVWFpQUVJQklRRGlBSFFReHFJQVFnRWhBT1FRQWhCUU5BSUFkQkhHb2lCQkFQSUFWQit3RkxjZzBDSUFBZ0JXb2lCaUFIUVJScUlBUVFFRG9BQUNBR0lBZEJER29nQkJBUU9nQUJJQVZCQW5JaEJDQUhRUnhxRUE4RVFDQUVJUVVNQXdVZ0FDQUVhaUFIUVJScUlBZEJIR29pQkJBUU9nQUFJQVlnQjBFTWFpQUVFQkE2QUFNZ0JVRUVhaUVGREFFTEFBc0FDeUFIUVJ4cUlnUWdGeUFXRUEwaUNFR0lmMHNOQVNBSFFSUnFJQVFnRWhBT0lBZEJER29nQkNBU0VBNUJBQ0VGQTBBZ0IwRWNhaUlFRUE4Z0JVSDdBVXR5UlFSQUlBQWdCV29pQmlBSFFSUnFJQVFRRVRvQUFDQUdJQWRCREdvZ0JCQVJPZ0FCSUFWQkFuSWhCQ0FIUVJ4cUVBOEVRQ0FFSVFVRklBQWdCR29nQjBFVWFpQUhRUnhxSWdRUUVUb0FBQ0FHSUFkQkRHb2dCQkFST2dBRElBVkJCR29oQlF3Q0N3c0xBbjhEUUVHNmZ5RUlJQVZCL1FGTERRTWdBQ0FGYWlJR0lBZEJGR29nQjBFY2FpSUpFQkU2QUFBZ0JrRUJhaUVFSUFrUUQwRURSZ1JBSUFkQkRHb2hDRUVDREFJTElBVkIvQUZMRFFNZ0JpQUhRUXhxSUFkQkhHb2lCQkFST2dBQklBVkJBbW9oQlNBRUVBOUJBMGNOQUFzZ0FDQUZhaUVFSUFkQkZHb2hDRUVEQ3lBRUlBZ2dCMEVjYWhBUk9nQUFJQVpxSUFCcklRZ01BUXNDZndOQVFicC9JUWdnQlVIOUFVc05BaUFBSUFWcUlnWWdCMEVVYWlBSFFSeHFJZ2tRRURvQUFDQUdRUUZxSVFRZ0NSQVBRUU5HQkVBZ0IwRU1haUVJUVFJTUFnc2dCVUg4QVVzTkFpQUdJQWRCREdvZ0IwRWNhaUlFRUJBNkFBRWdCVUVDYWlFRklBUVFEMEVEUncwQUN5QUFJQVZxSVFRZ0IwRVVhaUVJUVFNTElBUWdDQ0FIUVJ4cUVCQTZBQUFnQm1vZ0FHc2hDQXNnQ0VHSWYwc05BUXNnQ0NFRVFRQWhCU0FCUVFCQk5CQURJUWxCQUNFS0EwQWdCQ0FGUndSQUlBQWdCV29pQmkwQUFDSUJRUXRMQkVCQmJDRUlEQU1GSUFrZ0FVRUNkR29pQVNBQktBSUFRUUZxTmdJQUlBVkJBV29oQlVFQklBWXRBQUIwUVFGMUlBcHFJUW9NQWdzQUN3dEJiQ0VJSUFwRkRRQWdDbWNpQlVFZmN5SUJRUXRMRFFBZ0EwRWdJQVZyTmdJQVFRRkJBaUFCZENBS2F5SURaMEVmY3lJQmRDQURSdzBBSUFBZ0JHb2dBVUVCYWlJQU9nQUFJQWtnQUVFQ2RHb2lBQ0FBS0FJQVFRRnFOZ0lBSUFrb0FnUWlBRUVDU1NBQVFRRnhjZzBBSUFJZ0JFRUJhallDQUNBTFFRRnFJUWdMSUFkQk1Hb2tBQ0FJQzZBRkFReC9Jd0JCRUdzaURDUUFBbjhnQkVFSFRRUkFJQXhDQURjRENDQU1RUWhxSWdVZ0F5QUVFQUlhUVd3Z0FDQUJJQUlnQlVFSUVBd2lBQ0FBSUFSTEd5QUFJQUJCaVg5Skd3d0JDeUFBUVFBZ0FTZ0NBRUVCYWlJTlFRRjBFQU1oRDBGVUlBTW9BQUFpQmtFUGNTSUFRUXBMRFFBYUlBSWdBRUVGYWpZQ0FDQURJQVJxSWdKQkJHc2hCeUFDUVFkcklRc2dBRUVHYWlFT1FRUWhBaUFHUVFSMklRVkJJQ0FBZENJSVFRRnlJUWxCQUNFQVFRRWhCaUFESVFRRFFBSkFJQVpCQVhGRkJFQURRQ0FGUVg5elFZQ0FnSUI0Y21naUJrRVlTVVVFUUNBQVFTUnFJUUFnQkNBTFRRUi9JQVJCQTJvRklBUWdDMnRCQTNRZ0FtcEJIM0VoQWlBSEN5SUVLQUFBSUFKMklRVU1BUXNMSUFJZ0JrRWVjU0lLYWtFQ2FpRUNJQVpCQVhaQkEyd2dBR29nQlNBS2RrRURjV29pQUNBTlR3MEJBbjhnQkNBTFN5QUNRUU4ySUFScUlnVWdCMHR4UlFSQUlBSkJCM0VoQWlBRkRBRUxJQVFnQjJ0QkEzUWdBbXBCSDNFaEFpQUhDeUlFS0FBQUlBSjJJUVVMSUFVZ0NFRUJhM0VpQmlBSVFRRjBRUUZySWdvZ0NXc2lFRWtFZnlBT1FRRnJCU0FGSUFweElnVWdFRUVBSUFVZ0NFNGJheUVHSUE0TElRVWdEeUFBUVFGMGFpQUdRUUZySWdvN0FRQWdBRUVCYWlFQUlBSWdCV29oQWlBSVFRRWdCbXNnQ2lBR1FRQktHeUFKYWlJSlNnUkFJQWxCQWtnTkFVRWdJQWxuSWdWcklRNUJBU0FGUVI5emRDRUlDeUFBSUExUERRQWdDa0VBUnlFR0FuOGdCQ0FMU3lBQ1FRTjFJQVJxSWdVZ0IwdHhSUVJBSUFKQkIzRWhBaUFGREFFTElBSWdCQ0FIYTBFRGRHcEJIM0VoQWlBSEN5SUVLQUFBSUFKMklRVU1BUXNMUVd3Z0NVRUJSdzBBR2tGUUlBQWdEVXNOQUJwQmJDQUNRU0JLRFFBYUlBRWdBRUVCYXpZQ0FDQUVJQUpCQjJwQkEzVnFJQU5yQ3lBTVFSQnFKQUFMOGdFQkFYOGdBa1VFUUNBQVFnQTNBZ0FnQUVFQU5nSVFJQUJDQURjQ0NFRzRmdzhMSUFBZ0FUWUNEQ0FBSUFGQkJHbzJBaEFnQWtFRVR3UkFJQUFnQVNBQ2FpSUJRUVJySWdNMkFnZ2dBQ0FES0FBQU5nSUFJQUZCQVdzdEFBQWlBUVJBSUFBZ0FXZEJGMnMyQWdRZ0FnOExJQUJCQURZQ0JFRi9Ed3NnQUNBQk5nSUlJQUFnQVMwQUFDSUROZ0lBQWtBQ1FBSkFJQUpCQW1zT0FnRUFBZ3NnQUNBQkxRQUNRUkIwSUFOeUlnTTJBZ0FMSUFBZ0FTMEFBVUVJZENBRGFqWUNBQXNnQVNBQ2FrRUJheTBBQUNJQlJRUkFJQUJCQURZQ0JFRnNEd3NnQUNBQlp5QUNRUU4wYTBFSmFqWUNCQ0FDQzBRQkFuOGdBU0FDTHdFQUlnTWdBU2dDQkdvaUJEWUNCQ0FBSUFOQkFuUkJvQjFxS0FJQUlBRW9BZ0JCQUNBRWEzWnhOZ0lBSUFFUUR4b2dBQ0FDUVFScU5nSUVDNThCQVFSL1FRTWhBU0FBS0FJRUlnSkJJRTBFUUNBQUtBSUlJZ0VnQUNnQ0VFOEVRQ0FBSUFKQkIzRTJBZ1FnQUNBQklBSkJBM1pySWdJMkFnZ2dBQ0FDS0FBQU5nSUFRUUFQQ3lBQUtBSU1JZ01nQVVZRVFFRUJRUUlnQWtFZ1NSc1BDeUFBSUFFZ0FTQURheUFDUVFOMklnUWdBU0FFYXlBRFNTSUJHeUlEYXlJRU5nSUlJQUFnQWlBRFFRTjBhellDQkNBQUlBUW9BQUEyQWdBTElBRUxTQUVFZnlBQUtBSUVJQUFvQWdCQkFuUnFJZ0l0QUFJZ0FpOEJBQ0VFSUFFZ0FTZ0NCQ0lGSUFJdEFBTWlBbW8yQWdRZ0FDQUVJQUVvQWdBZ0JYUkJBQ0FDYTNacU5nSUFDMUlCQkg4Z0FDZ0NCQ0FBS0FJQVFRSjBhaUlDTFFBQ0lBSXZBUUFoQkNBQklBSXRBQU1pQWlBQktBSUVhaUlGTmdJRUlBQWdCQ0FDUVFKMFFhQWRhaWdDQUNBQktBSUFRUUFnQld0MmNXbzJBZ0FMQ0FBZ0FFR0lmMHNMR2dBZ0FBUkFJQUVFUUNBQ0lBQWdBUkVDQUE4TElBQVFCZ3NMcGdnQ0RYOEJmaU1BUVJCcklna2tBQ0FKUVFBMkFnd2dDVUVBTmdJSUFuOENRQ0FEUWVnSmFpQURJQWxCQ0dvZ0NVRU1haUFCSUFJZ0EwR0FBV29RQ3lJUFFZaC9TdzBBUVZRZ0NTZ0NEQ0lFSUFBb0FnQWlBVUgvQVhGQkFXcExEUUVhSUFCQkJHb2hDeUFBSUFGQi80R0FlSEVnQkVFUWRFR0FnUHdIY1hJMkFnQkJmeUFFSUFSQkFFZ2JRUUZxSVFCQkFDRUJJQWtvQWdnaEJVRUFJUUlEUUNBQUlBSkdCRUFnQlVFRGF5RUJRUUFoQUFOQUFrQkJBQ0VDSUFBZ0FVNEVRQU5BSUFBZ0JVNE5BaUFESUFBZ0EycEI2QWxxTFFBQVFRSjBha0ZBYXlJQklBRW9BZ0FpQVVFQmFqWUNBQ0FCSUFOcUlBQTZBT2dISUFCQkFXb2hBQXdBQ3dBRkEwQWdBa0VFUmtVRVFDQURJQU1nQUNBQ2FpSUhha0hvQ1dvdEFBQkJBblJxUVVCcklnZ2dDQ2dDQUNJSVFRRnFOZ0lBSUFNZ0NHb2dCem9BNkFjZ0FrRUJhaUVDREFFTEN5QUFRUVJxSVFBTUFnc0FDd3NnQkVFQmFpRU9JQU1vQWdBaEIwRUFJUUJCQVNFSUEwQWdDQ0FPUmcwRElBNGdDR3NoQkNBRElBaEJBblJxS0FJQUlRVUNRQUpBQWtBQ1FBSkFBa0JCQVNBSWRFRUJkU0lOUVFGckRnZ0FBUVFDQkFRRUF3UUxRUUFoQWlBRlFRQWdCVUVBU2hzaEJpQUFJUUVEUUNBQ0lBWkdEUVVnQXlBQ0lBZHFhaTBBNkFjaENpQUxJQUZCQVhScUlnd2dCRG9BQVNBTUlBbzZBQUFnQWtFQmFpRUNJQUZCQVdvaEFRd0FDd0FMUVFBaEFpQUZRUUFnQlVFQVNoc2hDaUFBSVFFRFFDQUNJQXBHRFFRZ0N5QUJRUUYwYWlJR0lBTWdBaUFIYW1vdEFPZ0hJZ3c2QUFJZ0JpQUVPZ0FCSUFZZ0REb0FBQ0FHSUFRNkFBTWdBa0VCYWlFQ0lBRkJBbW9oQVF3QUN3QUxRUUFoQWlBRlFRQWdCVUVBU2hzaEJpQUVRUWgwUVlEK0EzRWhCQ0FBSVFFRFFDQUNJQVpHRFFNZ0N5QUJRUUYwYWlBRUlBTWdBaUFIYW1vdEFPZ0hjcTFDZ1lDRWdKQ0F3QUIrTndBQUlBSkJBV29oQWlBQlFRUnFJUUVNQUFzQUMwRUFJUUlnQlVFQUlBVkJBRW9iSVFZZ0JFRUlkRUdBL2dOeElRUWdBQ0VCQTBBZ0FpQUdSZzBDSUFzZ0FVRUJkR29pQ2lBRUlBTWdBaUFIYW1vdEFPZ0hjcTFDZ1lDRWdKQ0F3QUIrSWhFM0FBZ2dDaUFSTndBQUlBSkJBV29oQWlBQlFRaHFJUUVNQUFzQUMwRUFJUUVnQlVFQUlBVkJBRW9iSVFvZ0JFRUlkRUdBL2dOeElRd2dBQ0VFQTBBZ0FTQUtSZzBCSUFzZ0JFRUJkR29oRUNBTUlBTWdBU0FIYW1vdEFPZ0hjcTFDZ1lDRWdKQ0F3QUIrSVJGQkFDRUNBMEFnQWlBTlRrVUVRQ0FRSUFKQkFYUnFJZ1lnRVRjQUdDQUdJQkUzQUJBZ0JpQVJOd0FJSUFZZ0VUY0FBQ0FDUVJCcUlRSU1BUXNMSUFGQkFXb2hBU0FFSUExcUlRUU1BQXNBQ3lBSVFRRnFJUWdnQlNBSGFpRUhJQVVnRFd3Z0FHb2hBQXdBQ3dBRklBTWdBa0VDZEdvaUIwRkFheUFCTmdJQUlBSkJBV29oQWlBSEtBSUFJQUZxSVFFTUFRc0FDd0FMSUE4TElBbEJFR29rQUF2eUFnRUdmeU1BUVNCcklnVWtBQ0FFS0FJQUlRWWdCVUVNYWlBQ0lBTVFEU0lEUVloL1RRUkFJQVJCQkdvaEFpQUFJQUZxSWdsQkEyc2hCRUVBSUFaQkVIWnJRUjl4SVFNRFFDQUZRUXhxRUE4Z0FDQUVUM0pGQkVBZ0FpQUZLQUlNSWdZZ0JTZ0NFQ0lIZENBRGRrRUJkR29pQ0MwQUFTRUtJQUFnQ0MwQUFEb0FBQ0FDSUFZZ0J5QUthaUlHZENBRGRrRUJkR29pQnkwQUFDRUlJQVVnQmlBSExRQUJhallDRUNBQUlBZzZBQUVnQUVFQ2FpRUFEQUVMQ3dOQUlBVkJER29RRHlFSElBVW9BZ3doQmlBRktBSVFJUVFnQUNBSlR5QUhja1VFUUNBQ0lBWWdCSFFnQTNaQkFYUnFJZ1l0QUFBaEJ5QUZJQVFnQmkwQUFXbzJBaEFnQUNBSE9nQUFJQUJCQVdvaEFBd0JDd3NEUUNBQUlBbFBSUVJBSUFJZ0JpQUVkQ0FEZGtFQmRHb2lCeTBBQVNFSUlBQWdCeTBBQURvQUFDQUFRUUZxSVFBZ0JDQUlhaUVFREFFTEMwRnNRV3dnQVNBRktBSVVJQVVvQWhoSEd5QUVRU0JIR3lFREN5QUZRU0JxSkFBZ0F3dlBGQUVqZnlNQVFkQUFheUlGSkFCQmJDRUpBa0FnQTBFS1NRMEFBa0FnQXlBQ0x3QUVJZ2NnQWk4QUFDSUlJQUl2QUFJaURXcHFRUVpxSWd4SkRRQWdCQzhCQWlFR0lBVkJQR29nQWtFR2FpSUNJQWdRRFNJSlFZaC9TdzBCSUFWQktHb2dBaUFJYWlJQ0lBMFFEU0lKUVloL1N3MEJJQVZCRkdvZ0FpQU5haUlDSUFjUURTSUpRWWgvU3cwQklBVWdBaUFIYWlBRElBeHJFQTBpQ1VHSWYwc05BU0FFUVFScUlRb2dBQ0FCYWlJZlFRTnJJU0JCQUNBR2EwRWZjU0VMSUFVb0FnZ2hFU0FGS0FJY0lSSWdCU2dDTUNFVElBVW9Ba1FoRkNBRktBSUVJUWtnQlNnQ0dDRU5JQVVvQWl3aERDQUZLQUpBSVFZZ0JTZ0NFQ0VoSUFVb0FpUWhJaUFGS0FJNElTTWdCU2dDVENFa0lBVW9BZ0FoRlNBRktBSVVJUllnQlNnQ0tDRVhJQVVvQWp3aEdFRUJJUThnQUNBQlFRTnFRUUoySWdScUlnTWdCR29pQWlBRWFpSVpJUVFnQWlFSUlBTWhCd05BSUE5QkFYRkZJQVFnSUU5eVJRUkFJQUFnQ2lBWUlBWjBJQXQyUVFKMGFpSU9Md0VBT3dBQUlBNHRBQUloR2lBT0xRQURJUkFnQnlBS0lCY2dESFFnQzNaQkFuUnFJZzR2QVFBN0FBQWdEaTBBQWlFYklBNHRBQU1oRHlBSUlBb2dGaUFOZENBTGRrRUNkR29pRGk4QkFEc0FBQ0FPTFFBQ0lSd2dEaTBBQXlFZElBUWdDaUFWSUFsMElBdDJRUUowYWlJT0x3RUFPd0FBSUE0dEFBSWhIaUFPTFFBRElRNGdBQ0FRYWlJbElBb2dHQ0FHSUJwcUlnWjBJQXQyUVFKMGFpSVFMd0VBT3dBQUlCQXRBQUlnRUMwQUF5RW1JQWNnRDJvaUp5QUtJQmNnRENBYmFpSWFkQ0FMZGtFQ2RHb2lCeThCQURzQUFDQUhMUUFDSVF3Z0J5MEFBeUVRSUFnZ0hXb2lHeUFLSUJZZ0RTQWNhaUlQZENBTGRrRUNkR29pQ0M4QkFEc0FBQ0FJTFFBQ0lRMGdDQzBBQXlFY0lBUWdEbW9pSFNBS0lCVWdDU0FlYWlJT2RDQUxka0VDZEdvaUNTOEJBRHNBQUNBR2FpRUFRUU1oQndKL0lCUWdKRWtFUUNBQUlRWkJBd3dCQ3lBQVFRZHhJUVlnRkNBQVFRTjJheUlVS0FBQUlSaEJBQXNnQ1MwQUF5RWVJQWt0QUFJaENDQU1JQnBxSVFBZ0V5QWpTUVIvSUFBRklCTWdBRUVEZG1zaUV5Z0FBQ0VYUVFBaEJ5QUFRUWR4Q3lFTUlBMGdEMm9oQUNBSGNpRUpRUU1oRHdKL0lCSWdJa2tFUUNBQUlRMUJBd3dCQ3lBQVFRZHhJUTBnRWlBQVFRTjJheUlTS0FBQUlSWkJBQXNnQ0NBT2FpRUFJQWx5SUJFZ0lVa0VmeUFBQlNBUklBQkJBM1pySWhFb0FBQWhGVUVBSVE4Z0FFRUhjUXNoQ1NBbElDWnFJUUFnRUNBbmFpRUhJQnNnSEdvaENDQWRJQjVxSVFRZ0QzSkZJUThNQVFzTElBVWdERFlDTENBRklBWTJBa0FnQlNBTk5nSVlJQVVnQ1RZQ0JDQUZJQlEyQWtRZ0JTQVROZ0l3SUFVZ0VqWUNIQ0FGSUJFMkFnZ2dCU0FZTmdJOElBVWdGellDS0NBRklCWTJBaFFnQlNBVk5nSUFJQUlnQjBrZ0FDQURTM0lOQUVGc0lRa2dDQ0FaU3cwQklBTkJBMnNoQ1FOQUlBVkJQR29RRDBVZ0FDQUpTWEVFUUNBQUlBb2dCU2dDUENJTklBVW9Ba0FpREhRZ0MzWkJBblJxSWc0dkFRQTdBQUFnQUNBT0xRQURhaUlHSUFvZ0RTQU1JQTR0QUFKcUlnQjBJQXQyUVFKMGFpSU1Md0VBT3dBQUlBVWdBQ0FNTFFBQ2FqWUNRQ0FHSUF3dEFBTnFJUUFNQVFVZ0EwRUNheUVNQTBBZ0JVRThhaEFQSVFZZ0JTZ0NQQ0VOSUFVb0FrQWhDU0FBSUF4TElBWnlSUVJBSUFBZ0NpQU5JQWwwSUF0MlFRSjBhaUlHTHdFQU93QUFJQVVnQ1NBR0xRQUNhallDUUNBQUlBWXRBQU5xSVFBTUFRc0xBMEFnQUNBTVMwVUVRQ0FBSUFvZ0RTQUpkQ0FMZGtFQ2RHb2lCaThCQURzQUFDQUFJQVl0QUFOcUlRQWdDU0FHTFFBQ2FpRUpEQUVMQ3dKQUlBQWdBMDhOQUNBQUlBb2dEU0FKZENBTGRpSUFRUUowYWlJRExRQUFPZ0FBSUFNdEFBTkJBVVlFUUNBSklBTXRBQUpxSVFrTUFRc2dDVUVmU3cwQVFTQWdDU0FLSUFCQkFuUnFMUUFDYWlJQUlBQkJJRThiSVFrTElBSkJBMnNoREFOQUlBVkJLR29RRDBVZ0J5QU1TWEVFUUNBSElBb2dCU2dDS0NJR0lBVW9BaXdpQUhRZ0MzWkJBblJxSWcwdkFRQTdBQUFnQnlBTkxRQURhaUlESUFvZ0JpQUFJQTB0QUFKcUlnQjBJQXQyUVFKMGFpSUdMd0VBT3dBQUlBVWdBQ0FHTFFBQ2FqWUNMQ0FESUFZdEFBTnFJUWNNQVFVZ0FrRUNheUVHQTBBZ0JVRW9haEFQSVFNZ0JTZ0NLQ0VNSUFVb0Fpd2hBQ0FHSUFkSklBTnlSUVJBSUFjZ0NpQU1JQUIwSUF0MlFRSjBhaUlETHdFQU93QUFJQVVnQUNBRExRQUNhallDTENBSElBTXRBQU5xSVFjTUFRc0xBMEFnQmlBSFNVVUVRQ0FISUFvZ0RDQUFkQ0FMZGtFQ2RHb2lBeThCQURzQUFDQUhJQU10QUFOcUlRY2dBQ0FETFFBQ2FpRUFEQUVMQ3dKQUlBSWdCMDBOQUNBSElBb2dEQ0FBZENBTGRpSUNRUUowYWlJRExRQUFPZ0FBSUFNdEFBTkJBVVlFUUNBQUlBTXRBQUpxSVFBTUFRc2dBRUVmU3cwQVFTQWdBQ0FLSUFKQkFuUnFMUUFDYWlJQUlBQkJJRThiSVFBTElCbEJBMnNoREFOQUlBVkJGR29RRDBVZ0NDQU1TWEVFUUNBSUlBb2dCU2dDRkNJR0lBVW9BaGdpQW5RZ0MzWkJBblJxSWcwdkFRQTdBQUFnQ0NBTkxRQURhaUlESUFvZ0JpQUNJQTB0QUFKcUlnSjBJQXQyUVFKMGFpSUdMd0VBT3dBQUlBVWdBaUFHTFFBQ2FqWUNHQ0FESUFZdEFBTnFJUWdNQVFVZ0dVRUNheUVEQTBBZ0JVRVVhaEFQSVFJZ0JTZ0NGQ0VHSUFVb0FoZ2hCeUFESUFoSklBSnlSUVJBSUFnZ0NpQUdJQWQwSUF0MlFRSjBhaUlDTHdFQU93QUFJQVVnQnlBQ0xRQUNhallDR0NBSUlBSXRBQU5xSVFnTUFRc0xBMEFnQXlBSVNVVUVRQ0FJSUFvZ0JpQUhkQ0FMZGtFQ2RHb2lBaThCQURzQUFDQUlJQUl0QUFOcUlRZ2dCeUFDTFFBQ2FpRUhEQUVMQ3dKQUlBZ2dHVThOQUNBSUlBb2dCaUFIZENBTGRpSUNRUUowYWlJRExRQUFPZ0FBSUFNdEFBTkJBVVlFUUNBSElBTXRBQUpxSVFjTUFRc2dCMEVmU3cwQVFTQWdCeUFLSUFKQkFuUnFMUUFDYWlJQ0lBSkJJRThiSVFjTEEwQWdCUkFQUlNBRUlDQkpjUVJBSUFRZ0NpQUZLQUlBSWdZZ0JTZ0NCQ0lDZENBTGRrRUNkR29pREM4QkFEc0FBQ0FFSUF3dEFBTnFJZ01nQ2lBR0lBSWdEQzBBQW1vaUFuUWdDM1pCQW5ScUlnUXZBUUE3QUFBZ0JTQUNJQVF0QUFKcU5nSUVJQU1nQkMwQUEyb2hCQXdCQlNBZlFRSnJJUU1EUUNBRkVBOGhBaUFGS0FJQUlRWWdCU2dDQkNFSUlBTWdCRWtnQW5KRkJFQWdCQ0FLSUFZZ0NIUWdDM1pCQW5ScUlnSXZBUUE3QUFBZ0JTQUlJQUl0QUFKcU5nSUVJQVFnQWkwQUEyb2hCQXdCQ3dzRFFDQURJQVJKUlFSQUlBUWdDaUFHSUFoMElBdDJRUUowYWlJQ0x3RUFPd0FBSUFRZ0FpMEFBMm9oQkNBSUlBSXRBQUpxSVFnTUFRc0xBa0FnQkNBZlR3MEFJQVFnQ2lBR0lBaDBJQXQySWdKQkFuUnFJZ010QUFBNkFBQWdBeTBBQTBFQlJnUkFJQWdnQXkwQUFtb2hDQXdCQ3lBSVFSOUxEUUJCSUNBSUlBb2dBa0VDZEdvdEFBSnFJZ0lnQWtFZ1R4c2hDQXRCYkVGc1FXeEJiRUZzUVd4QmJFRnNJQUVnQ0VFZ1J4c2dCU2dDQ0NBRktBSU1SeHNnQjBFZ1J4c2dCU2dDSENBRktBSWdSeHNnQUVFZ1J4c2dCU2dDTUNBRktBSTBSeHNnQ1VFZ1J4c2dCU2dDUkNBRktBSklSeHNoQ1F3SkN3QUxBQXNBQ3dBTEFBc0FDd0FMQUF0QmJDRUpDeUFGUWRBQWFpUUFJQWtMN0JBQkhuOGpBRUhRQUdzaUJTUUFRV3doQ1FKQUlBTkJDa2tOQUFKQUlBTWdBaThBQkNJR0lBSXZBQUFpQnlBQ0x3QUNJZ2hxYWtFR2FpSU9TUTBBSUFRdkFRSWhEeUFGUVR4cUlBSkJCbW9pQWlBSEVBMGlDVUdJZjBzTkFTQUZRU2hxSUFJZ0Iyb2lBaUFJRUEwaUNVR0lmMHNOQVNBRlFSUnFJQUlnQ0dvaUFpQUdFQTBpQ1VHSWYwc05BU0FGSUFJZ0Jtb2dBeUFPYXhBTklnbEJpSDlMRFFFZ0JFRUVhaUVLSUFBZ0FXb2lIRUVEYXlFZFFRQWdEMnRCSDNFaEN5QUZLQUlJSVJFZ0JTZ0NIQ0VTSUFVb0FqQWhFeUFGS0FKRUlSUWdCU2dDQkNFSklBVW9BaGdoQmlBRktBSXNJUWNnQlNnQ1FDRUlJQVVvQWhBaEhpQUZLQUlrSVI4Z0JTZ0NPQ0VnSUFVb0Frd2hJU0FGS0FJQUlSVWdCU2dDRkNFV0lBVW9BaWdoRnlBRktBSThJUmhCQVNFTklBQWdBVUVEYWtFQ2RpSUNhaUlPSUFKcUlnOGdBbW9pR1NFRUlBOGhBaUFPSVFNRFFDQU5SU0FFSUIxUGNrVUVRQ0FLSUJnZ0NIUWdDM1pCQVhScUlnd3RBQUVoRFNBQUlBd3RBQUE2QUFBZ0NpQVhJQWQwSUF0MlFRRjBhaUlNTFFBQklSQWdBeUFNTFFBQU9nQUFJQW9nRmlBR2RDQUxka0VCZEdvaURDMEFBU0VhSUFJZ0RDMEFBRG9BQUNBS0lCVWdDWFFnQzNaQkFYUnFJZ3d0QUFFaEd5QUVJQXd0QUFBNkFBQWdDaUFZSUFnZ0RXb2lDSFFnQzNaQkFYUnFJZ3d0QUFFaERTQUFJQXd0QUFBNkFBRWdDaUFYSUFjZ0VHb2lCM1FnQzNaQkFYUnFJZ3d0QUFFaEVDQURJQXd0QUFBNkFBRWdDaUFXSUFZZ0dtb2lESFFnQzNaQkFYUnFJZ1l0QUFFaEdpQUNJQVl0QUFBNkFBRWdDaUFWSUFrZ0cyb2lHM1FnQzNaQkFYUnFJZ2t0QUFFaElpQUVJQWt0QUFBNkFBRWdDQ0FOYWlFR1FRTWhDUUovSUJRZ0lVa0VRRUVESVEwZ0Jnd0JDeUFVSUFaQkEzWnJJaFFvQUFBaEdFRUFJUTBnQmtFSGNRc2hDQ0FISUJCcUlRWWdFeUFnU1FSL0lBWUZJQk1nQmtFRGRtc2lFeWdBQUNFWFFRQWhDU0FHUVFkeEN5RUhJQXdnR21vaERDQUpJQTF5SVJCQkF5RU5BbjhnRWlBZlNRUkFJQXdoQmtFRERBRUxJQXhCQjNFaEJpQVNJQXhCQTNackloSW9BQUFoRmtFQUN5QWJJQ0pxSVF3Z0VISWhFQ0FSSUI1SkJIOGdEQVVnRVNBTVFRTjJheUlSS0FBQUlSVkJBQ0VOSUF4QkIzRUxJUWtnQkVFQ2FpRUVJQUpCQW1vaEFpQURRUUpxSVFNZ0FFRUNhaUVBSUEwZ0VISkZJUTBNQVFzTElBVWdCellDTENBRklBZzJBa0FnQlNBR05nSVlJQVVnQ1RZQ0JDQUZJQlEyQWtRZ0JTQVROZ0l3SUFVZ0VqWUNIQ0FGSUJFMkFnZ2dCU0FZTmdJOElBVWdGellDS0NBRklCWTJBaFFnQlNBVk5nSUFJQUFnRGtzZ0F5QVBTM0lOQUVGc0lRa2dBaUFaU3cwQklBNUJBMnNoQ1FOQUlBVkJQR29RRHlBQUlBbFBja1VFUUNBS0lBVW9BandpQmlBRktBSkFJZ2QwSUF0MlFRRjBhaUlJTFFBQklRd2dBQ0FJTFFBQU9nQUFJQW9nQmlBSElBeHFJZ1owSUF0MlFRRjBhaUlITFFBQUlRZ2dCU0FHSUFjdEFBRnFOZ0pBSUFBZ0NEb0FBU0FBUVFKcUlRQU1BUXNMQTBBZ0JVRThhaEFQSVFjZ0JTZ0NQQ0VHSUFVb0FrQWhDU0FBSUE1UElBZHlSUVJBSUFvZ0JpQUpkQ0FMZGtFQmRHb2lCaTBBQUNFSElBVWdDU0FHTFFBQmFqWUNRQ0FBSUFjNkFBQWdBRUVCYWlFQURBRUxDd05BSUFBZ0RrOUZCRUFnQ2lBR0lBbDBJQXQyUVFGMGFpSUhMUUFCSUFBZ0J5MEFBRG9BQUNBQVFRRnFJUUFnQ1dvaENRd0JDd3NnRDBFRGF5RUFBMEFnQlVFb2FoQVBJQUFnQTAxeVJRUkFJQW9nQlNnQ0tDSUdJQVVvQWl3aUIzUWdDM1pCQVhScUlnZ3RBQUVoRGlBRElBZ3RBQUE2QUFBZ0NpQUdJQWNnRG1vaUJuUWdDM1pCQVhScUlnY3RBQUFoQ0NBRklBWWdCeTBBQVdvMkFpd2dBeUFJT2dBQklBTkJBbW9oQXd3QkN3c0RRQ0FGUVNocUVBOGhCeUFGS0FJb0lRWWdCU2dDTENFQUlBTWdEMDhnQjNKRkJFQWdDaUFHSUFCMElBdDJRUUYwYWlJR0xRQUFJUWNnQlNBQUlBWXRBQUZxTmdJc0lBTWdCem9BQUNBRFFRRnFJUU1NQVFzTEEwQWdBeUFQVDBVRVFDQUtJQVlnQUhRZ0MzWkJBWFJxSWdjdEFBRWhDQ0FESUFjdEFBQTZBQUFnQTBFQmFpRURJQUFnQ0dvaEFBd0JDd3NnR1VFRGF5RURBMEFnQlVFVWFoQVBJQUlnQTA5eVJRUkFJQW9nQlNnQ0ZDSUdJQVVvQWhnaUIzUWdDM1pCQVhScUlnZ3RBQUVoRGlBQ0lBZ3RBQUE2QUFBZ0NpQUdJQWNnRG1vaUJuUWdDM1pCQVhScUlnY3RBQUFoQ0NBRklBWWdCeTBBQVdvMkFoZ2dBaUFJT2dBQklBSkJBbW9oQWd3QkN3c0RRQ0FGUVJScUVBOGhCeUFGS0FJVUlRWWdCU2dDR0NFRElBSWdHVThnQjNKRkJFQWdDaUFHSUFOMElBdDJRUUYwYWlJR0xRQUFJUWNnQlNBRElBWXRBQUZxTmdJWUlBSWdCem9BQUNBQ1FRRnFJUUlNQVFzTEEwQWdBaUFaVDBVRVFDQUtJQVlnQTNRZ0MzWkJBWFJxSWdjdEFBRWhDQ0FDSUFjdEFBQTZBQUFnQWtFQmFpRUNJQU1nQ0dvaEF3d0JDd3NEUUNBRkVBOGdCQ0FkVDNKRkJFQWdDaUFGS0FJQUlnSWdCU2dDQkNJR2RDQUxka0VCZEdvaUJ5MEFBU0VJSUFRZ0J5MEFBRG9BQUNBS0lBSWdCaUFJYWlJQ2RDQUxka0VCZEdvaUJpMEFBQ0VISUFVZ0FpQUdMUUFCYWpZQ0JDQUVJQWM2QUFFZ0JFRUNhaUVFREFFTEN3TkFJQVVRRHlFSElBVW9BZ0FoQmlBRktBSUVJUUlnQkNBY1R5QUhja1VFUUNBS0lBWWdBblFnQzNaQkFYUnFJZ1l0QUFBaEJ5QUZJQUlnQmkwQUFXbzJBZ1FnQkNBSE9nQUFJQVJCQVdvaEJBd0JDd3NEUUNBRUlCeFBSUVJBSUFvZ0JpQUNkQ0FMZGtFQmRHb2lCeTBBQVNFSUlBUWdCeTBBQURvQUFDQUVRUUZxSVFRZ0FpQUlhaUVDREFFTEMwRnNRV3hCYkVGc1FXeEJiRUZzUVd3Z0FTQUNRU0JIR3lBRktBSUlJQVVvQWd4SEd5QURRU0JIR3lBRktBSWNJQVVvQWlCSEd5QUFRU0JIR3lBRktBSXdJQVVvQWpSSEd5QUpRU0JIR3lBRktBSkVJQVVvQWtoSEd5RUpEQUVMUVd3aENRc2dCVUhRQUdva0FDQUpDMWdCQTM4Q1FDQUFLQUtRNndFaUFVVU5BQ0FCS0FJQUlBRkJ0TlVCYWlnQ0FDSUNJQUZCdU5VQmFpZ0NBQ0lERUJNZ0FnUkFJQU1nQVNBQ0VRSUFEQUVMSUFFUUJnc2dBRUVBTmdLZzZ3RWdBRUlBTndPUTZ3RUw2UU1DQkg4Q2ZpQUFRUUJCS0JBRElRUWdBa0VCUVFVZ0F4c2lBRWtFUUNBQUR3c2dBVVVFUUVGL0R3dEJBU0VHQWtBQ1FDQURRUUZHRFFBZ0F5RUdJQUVvQUFBaUJVR282cjVwUmcwQVFYWWhBeUFGUVhCeFFkRFV0TUlCUncwQlFRZ2hBeUFDUVFoSkRRRWdBVFVBQkNFSUlBUkJBVFlDRkNBRUlBZzNBd0JCQUE4TElBRWdBaUFHRUJvaUF5QUNTdzBBSUFRZ0F6WUNHRUZ5SVFNZ0FDQUJhaUlGUVFGckxRQUFJZ0pCQ0hFTkFDQUNRU0J4SWdaRkJFQkJjQ0VESUFVdEFBQWlCVUduQVVzTkFTQUZRUWR4clVJQklBVkJBM1pCQ21xdGhpSUlRZ09JZmlBSWZDRUpJQUJCQVdvaEFBc2dBa0VHZGlFRklBSkJBblpCQUNFREFrQUNRQUpBQWtBZ0FrRURjVUVCYXc0REFBRUNBd3NnQUNBQmFpMEFBQ0VESUFCQkFXb2hBQXdDQ3lBQUlBRnFMd0FBSVFNZ0FFRUNhaUVBREFFTElBQWdBV29vQUFBaEF5QUFRUVJxSVFBTFFRRnhJUUlDZmdKQUFrQUNRQUpBSUFWQkFXc09Bd0VDQXdBTFFuOGdCa1VOQXhvZ0FDQUJhakVBQUF3REN5QUFJQUZxTXdBQVFvQUNmQXdDQ3lBQUlBRnFOUUFBREFFTElBQWdBV29wQUFBTElRZ2dCQ0FDTmdJZ0lBUWdBellDSENBRUlBZzNBd0JCQUNFRElBUkJBRFlDRkNBRUlBZ2dDU0FHR3lJSU53TUlJQVJDZ0lBSUlBZ2dDRUtBZ0FoYUd6NENFQXNnQXd0ZkFRRi9RYmgvSVFNZ0FVRUJRUVVnQWhzaUFrOEVmeUFBSUFKcVFRRnJMUUFBSWdCQkEzRkJBblJCb0I1cUtBSUFJQUpxSUFCQkJIWkJESEZCc0I1cUtBSUFhaUFBUVNCeElnRkZhaUFCUVFWMklBQkJ3QUJKY1dvRlFiaC9Dd3NNQUNBQUlBRWdBa0VBRUJrTGx3TUNCWDhDZmlNQVFVQnFJZ1FrQUFKQUEwQWdBVUVGVHdSQUFrQWdBQ2dBQUVGd2NVSFExTFRDQVVZRVFFSitJUWNnQVVFSVNRMEVJQUFvQUFRaUFrRjNTdzBFSUFKQkNHb2lBeUFCU3cwRUlBSkJnWDlKRFFFTUJBc2dCRUVZYWlBQUlBRVFHeUVDUW40Z0JDa0RHRUlBSUFRb0FpeEJBVWNiSUFJYklnZENmVllOQXlBSElBaDhJZ2dnQjFSQ2ZpRUhEUU1DUUFKQUlBRkJDRWtOQUNBQUtBQUFRWEJ4UWREVXRNSUJSdzBBSUFBb0FBUWlBa0YzU3cwRlFiaC9JQUpCQ0dvaUFpQUJJQUpKR3lFRERBRUxJQVJCR0dvZ0FDQUJFQnNpQWtHSWYwc0VRQ0FDSVFNTUFRdEJ1SDhoQXlBQ0RRQWdBU0FFS0FJd0lnSnJJUVVnQUNBQ2FpRUdBMEFnQmlBRklBUkJER29RSFNJRFFZaC9TdzBCSUFOQkEyb2lBaUFGU3dSQVFiaC9JUU1NQWdzZ0JTQUNheUVGSUFJZ0Jtb2hCaUFFS0FJUVJRMEFDeUFFS0FJNEJIOUJ1SDhoQXlBRlFRUkpEUUVnQmtFRWFnVWdCZ3NnQUdzaEF3c2dBMEdJZjBzTkF3c2dBU0FEYXlFQklBQWdBMm9oQUF3QkN3dENmaUFJSUFFYklRY0xJQVJCUUdza0FDQUhDMlFCQVg5QnVIOGhBd0pBSUFGQkEwa05BQ0FBTFFBQ0lRRWdBaUFBTHdBQUlnQkJBWEUyQWdRZ0FpQUFRUUYyUVFOeElnTTJBZ0FnQWlBQUlBRkJFSFJ5UVFOMklnQTJBZ2dDUUFKQUlBTkJBV3NPQXdJQkFBRUxRV3dQQ3lBQUlRTUxJQU1MUkFFQ2Z5QUJJQUlvQWdRaUF5QUJLQUlFYWlJRU5nSUVJQUFnQTBFQ2RFR2dIV29vQWdBZ0FTZ0NBRUVBSUFScmRuRTJBZ0FnQVJBUEdpQUFJQUpCQ0dvMkFnUUx6Z0VCQm45QnVuOGhDZ0pBSUFJb0FnUWlDQ0FDS0FJQUlnbHFJZzBnQVNBQWEwc05BRUZzSVFvZ0NTQUVJQU1vQWdBaUMydExEUUFnQUNBSmFpSUVJQUlvQWdnaURHc2hBaUFBSUFGQklHc2lBQ0FMSUFsQkFCQWdJQU1nQ1NBTGFqWUNBQUpBQWtBZ0JDQUZheUFNVHdSQUlBSWhCUXdCQ3lBTUlBUWdCbXRMRFFJZ0J5QUhJQUlnQldzaUFtb2lBU0FJYWs4RVFDQUVJQUVnQ0JBS0dnd0NDeUFDSUFocUlRZ2dCQ0FCUVFBZ0Ftc1FDaUFDYXlFRUN5QUVJQUFnQlNBSVFRRVFJQXNnRFNFS0N5QUtDOGNFQVFKL0lBQWdBMm9oQmdKQUlBTkJCMHdFUUFOQUlBQWdCazhOQWlBQUlBSXRBQUE2QUFBZ0FFRUJhaUVBSUFKQkFXb2hBZ3dBQ3dBTElBUkJBVVlFUUFKQUlBQWdBbXNpQlVFSFRRUkFJQUFnQWkwQUFEb0FBQ0FBSUFJdEFBRTZBQUVnQUNBQ0xRQUNPZ0FDSUFBZ0FpMEFBem9BQXlBQUlBSWdCVUVDZENJRlFjQWVhaWdDQUdvaUFpZ0FBRFlBQkNBQ0lBVkI0QjVxS0FJQWF5RUNEQUVMSUFBZ0Fpa0FBRGNBQUFzZ0FrRUlhaUVDSUFCQkNHb2hBQXNnQVNBR1R3UkFJQUFnQTJvaEFTQUVRUUZISUFBZ0FtdEJEMHB5UlFSQUEwQWdBQ0FDS1FBQU53QUFJQUpCQ0dvaEFpQUFRUWhxSWdBZ0FVa05BQXdEQ3dBTElBQWdBaWtBQURjQUFDQUFJQUlwQUFnM0FBZ2dBMEVSU1EwQklBQkJFR29oQUFOQUlBQWdBaWtBRURjQUFDQUFJQUlwQUJnM0FBZ2dBQ0FDS1FBZ053QVFJQUFnQWlrQUtEY0FHQ0FDUVNCcUlRSWdBRUVnYWlJQUlBRkpEUUFMREFFTEFrQWdBQ0FCU3dSQUlBQWhBUXdCQ3lBQklBQnJJUVVDUUNBRVFRRkhJQUFnQW10QkQwcHlSUVJBSUFJaEF3TkFJQUFnQXlrQUFEY0FBQ0FEUVFocUlRTWdBRUVJYWlJQUlBRkpEUUFMREFFTElBQWdBaWtBQURjQUFDQUFJQUlwQUFnM0FBZ2dCVUVSU0EwQUlBQkJFR29oQUNBQ0lRTURRQ0FBSUFNcEFCQTNBQUFnQUNBREtRQVlOd0FJSUFBZ0F5a0FJRGNBRUNBQUlBTXBBQ2czQUJnZ0EwRWdhaUVESUFCQklHb2lBQ0FCU1EwQUN3c2dBaUFGYWlFQ0N3TkFJQUVnQms4TkFTQUJJQUl0QUFBNkFBQWdBVUVCYWlFQklBSkJBV29oQWd3QUN3QUxDNjRIQWdWL0FYNGpBRUdBQVdzaUVTUUFJQkVnQXpZQ2ZFRi9JUThDUUFKQUFrQUNRQUpBSUFJT0JBRUFBd0lFQ3lBR1JRUkFRYmgvSVE4TUJBdEJiQ0VQSUFVdEFBQWlBaUFEU3cwRElBZ2dBa0VDZENJQ2FpZ0NBQ0VESUFJZ0Iyb29BZ0FoQWlBQVFRQTZBQXNnQUVJQU53SUFJQUFnQWpZQ0RDQUFJQU02QUFvZ0FFRUFPd0VJSUFFZ0FEWUNBRUVCSVE4TUF3c2dBU0FKTmdJQVFRQWhEd3dDQ3lBS1JRUkFRV3doRHd3Q0MwRUFJUThnQzBVZ0RFRVpTSElOQVVFSUlBUjBRUWhxSVFCQkFDRURBMEFnQUNBRFRRMENJQU5CUUdzaEF3d0FDd0FMUVd3aER5QVJJQkZCL0FCcUlCRkIrQUJxSUFVZ0JoQU1JZ05CaUg5TERRQWdFU2dDZUNJQ0lBUkxEUUFnRVNnQ2ZFRUJhaUVKSUFCQkNHb2hDMEdBZ0FJZ0FuUkJFSFVoQlVFQklSQkJBU0FDZENJUFFRRnJJZ29oRWdOQUlBa2dEa2NFUUFKQUlCRWdEa0VCZENJRWFpOEJBQ0lNUWYvL0EwWUVRQ0FMSUJKQkEzUnFJQTQyQWdRZ0VrRUJheUVTUVFFaERBd0JDeUFRUVFBZ0JTQU13VW9iSVJBTElBUWdEV29nRERzQkFDQU9RUUZxSVE0TUFRc0xJQUFnQWpZQ0JDQUFJQkEyQWdBQ1FDQUtJQkpHQkVBZ0RVSHFBR29oQmtFQUlSQkJBQ0VNQTBBZ0NTQVFSZ1JBSUE5QkEzWWdEMEVCZG1wQkEyb2lCVUVCZENFRVFRQWhERUVBSVJJRFFFRUFJUTRnRHlBU1RRMEVBMEFnRGtFQ1J3UkFJQXNnQlNBT2JDQU1haUFLY1VFRGRHb2dCaUFPSUJKcWFpMEFBRFlDQkNBT1FRRnFJUTRNQVFzTElCSkJBbW9oRWlBRUlBeHFJQXB4SVF3TUFBc0FCU0FSSUJCQkFYUnFMZ0VBSVFVZ0JpQU1haUlFSUJNM0FBQkJDQ0VPQTBBZ0JTQU9TZ1JBSUFRZ0Rtb2dFemNBQUNBT1FRaHFJUTRNQVFzTElCTkNnWUtFaUpDZ3dJQUJmQ0VUSUJCQkFXb2hFQ0FGSUF4cUlRd01BUXNBQ3dBTElBOUJBM1lnRDBFQmRtcEJBMm9oQlVFQUlSQkJBQ0VPQTBBZ0NTQVFSZzBCUVFBaERDQVJJQkJCQVhScUxnRUFJZ1JCQUNBRVFRQktHeUVFQTBBZ0JDQU1Sd1JBSUFzZ0RrRURkR29nRURZQ0JBTkFJQVVnRG1vZ0NuRWlEaUFTU3cwQUN5QU1RUUZxSVF3TUFRc0xJQkJCQVdvaEVBd0FDd0FMSUFKQkFXb2hCVUVBSVF3RFFDQU1JQTlIQkVBZ0RTQUxJQXhCQTNScUlna29BZ1FpQkVFQmRHb2lBaUFDTHdFQUlnWkJBV283QVFBZ0NTQUZJQVpuUVdCemFpSUNPZ0FESUFrZ0JpQUNkQ0FQYXpzQkFDQUpJQWdnQkVFQ2RDSUNhaWdDQURvQUFpQUpJQUlnQjJvb0FnQTJBZ1FnREVFQmFpRU1EQUVMQ3lBQklBQTJBZ0FnQXlFUEN5QVJRWUFCYWlRQUlBOEw3Vm9DTzM4R2ZpTUFRZUFCYXlJRUpBQUNRRUd3N0FrUUJTSUZSUVJBUVVBaEJ3d0JDeUFGUWdBM0F2VHFBU0FGUVFBMkFzVHJBU0FGUVFBMkFyVHJBU0FGUWdBM0FwenJBU0FGUVFBMkFyanBBU0FGUVFBMkFxenNDU0FGUWdBM0F0VHJBU0FGUWdBM0FxenJBU0FGUWdBM0E0anJBU0FGUWdBM0F1VHFBU0FGUWdBM0F1VHJBU0FGUVlHQWdNQUFOZ0s4NndFZ0JVSUFOd0trNndFZ0JVSDg2Z0ZxUVFBMkFnQWdCVUdRNndGcVFnQTNBd0FnQlJBWUlBVkJyTlVCYWlFVUlBVkIrT3NCYWlFY0lBVkJzT29CYWlFaUlBVkJvREJxSVNvZ0JVR1lJR29oS3lBRlFhalFBR29oSGlBRlFSQnFJU3dnQlVFSWFpRW9JQVZCQkdvaExTQUZRY0RwQVdvaEtTQUZRWWpyQVdvZ0JFR1VBV29oTHlBRVFZd0JhaUV3SUFSQmhBRnFJVEVnQkVIY0FHb2hNaUFFUWRRQWFpRXpJQVJCekFCcUlUUWdBQ0VkQWtBQ1FBSkFBa0FDUUFOQVFRRkJCU0FGS0FMazZnRWJJUVlDUUFOQUlBTWdCa2tOQVNBQ0tBQUFRWEJ4UWREVXRNSUJSZ1JBUWJoL0lRY2dBMEVJU1EwSUlBSW9BQVFpRGtGM1N3UkFRWEloQnd3SkN5QURJQTVCQ0dvaUNVa05DQ0FPUVlCL1N3UkFJQWtoQnd3SkN5QURJQWxySVFNZ0FpQUphaUVDREFFTEN5QUZRZ0EzQXF6cEFTQUZRZ0EzQStqcEFTQUZRUUEyQXBqckFTQUZRZ0EzQTREcUFTQUZRZ00zQS9qcEFTQUZRYlRwQVdwQ0FEY0NBQ0FGUWZEcEFXcENBRGNEQUNBRlFhalFBR29pQ1VHTWdJRGdBRFlDQUNBRlFhelFBV3BCNEJJcEFnQTNBZ0FnQlVHMDBBRnFRZWdTS0FJQU5nSUFJQVVnQlVFUWFqWUNBQ0FGSUFWQm9EQnFOZ0lFSUFVZ0JVR1lJR28yQWdnZ0JTQUpOZ0lNSUFWQkFVRUZJQVVvQXVUcUFSczJBcnpwQVFKQUlBRkZEUUFnQlNnQ3JPa0JJZ2tnSFVZTkFDQUZJQWsyQXJqcEFTQUZJQjAyQXF6cEFTQUZLQUt3NlFFaERpQUZJQjAyQXJEcEFTQUZJQjBnRGlBSmEybzJBclRwQVF0QnVIOGhDU0FEUVFWQkNTQUZLQUxrNmdFaUJodEpEUVVnQWtFQlFRVWdCaHNnQmhBYUlnNUJpSDlMQkVBZ0RpRUpEQVVMSUFNZ0RrRURha2tOQlNBcElBSWdEaUFHRUJraUJrR0lmMHNFUUNBR0lRa01CUXNnQmcwRkFrQUNRQ0FGS0FLbzZ3RkJBVWNOQUNBRktBS2s2d0VpQ1VVTkFDQUZLQUtVNndGRkRRQWdDU2dDQkVFQmF5SUhJQVVvQXR6cEFTSUtyVUtIbGErdm1MYmVtNTUvZmtMSno5bXk4ZVc2NmllRlFoZUpRcy9XMDc3U3g2dlpRbjVDK2ZQZDhabjJtYXNXZkNJL1FpR0lJRCtGUXMvVzA3N1N4NnZaUW40aVAwSWRpQ0EvaFVMNTg5M3htZmFacXhaK0lqOUNJSWdnUDRXbmNTRUdJQWtvQWdBaEZRTkFRUUFoQ0FKQUlCVWdCa0VDZEdvb0FnQWlDVVVOQUNBSktBSUlRUWhKRFFBZ0NTZ0NCQ0lTS0FBQVFiZkl3dUYrUncwQUlCSW9BQVFoQ0FzZ0NDQUtSd1JBSUFZZ0IzRkJBV29oQmlBSURRRUxDeUFKUlEwQUlBVVFHQ0FGUVg4MkFxRHJBU0FGSUFrMkFwVHJBU0FGSUFVb0F0enBBU0lJTmdLWTZ3RU1BUXNnQlNnQzNPa0JJUWdMQWtBZ0NFVU5BQ0FGS0FLWTZ3RWdDRVlOQUVGZ0lRa01CZ3NDUUNBRktBTGc2UUVFUUNBRklBVW9BdWpxQVNJSlJUWUM3T29CSUFrTkFTQUZRdm5xME5EbnlhSGs0UUEzQTZqcUFTQUZRZ0EzQTZEcUFTQUZRcy9XMDc3U3g2dlpRamNEbU9vQklBVkMxdXVDN3VyOWlmWGdBRGNEa09vQklBVkNBRGNEaU9vQklDSkJBRUVvRUFNYURBRUxJQVZCQURZQzdPb0JDeUFCSUIxcUlTVWdCU0FGS1FQbzZRRWdEcTE4TndQbzZRRWdBeUFPYXlFRElBSWdEbW9oQWlBZElRNERRQ0FDSUFNZ0JFRXNhaEFkSWhWQmlIOUxCRUFnRlNFSkRBWUxJQU5CQTJzaU5TQVZTUTBFSUFKQkEyb2hHMEZzSVFrQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQ0FFS0FJc0RnTUNBUUFWQ3lBVlFmLy9CMHNORXlBVlFRTkpEUklnQlNrRHlPa0JJVDhDUUFKQUlCc3RBQUFpQ1VFRGNTSWFRUUZyRGdNR0FRQUhDeUFGS0FLQTZnRU5BRUZpSVFrTUZRc2dGVUVGU1EwU0lCc29BQUFoQXdKL0FrQUNRQUpBSUFsQkFuWkJBM0VpQ1VFQ2F3NENBUUlBQ3lBSlFRQkhJUWNnQTBFRWRrSC9CM0VoQzBFRElRWWdBMEVPZGtIL0IzRU1BZ3RCQkNFR0lBTkJCSFpCLy84QWNTRUxRUUVoQnlBRFFSSjJEQUVMSUFOQkJIWkIvLzhQY1NJTFFZQ0FDRXNORTBFQklRZEJCU0VHSUFJdEFBZEJDblFnQTBFV2RuSUxJZ2dnQm1vaUNTQVZTdzBTQWtBZ0MwR0JCa2tOQUNBRktBS2M2d0ZGRFFCQkFDRURBMEFnQTBHRGdBRkxEUUVnQTBGQWF5RUREQUFMQUFzZ0JpQWJhaUVQSUJwQkEwY05CaUFGS0FJTUlnSXRBQUZCQ0hRaEF5QUhEUWNnQTBVTkNDQUVRZkFBYWlBUElBZ1FEU0lEUVloL1N3MEpJQUpCQkdvaEJpQUxJQnhxSWhKQkEyc2hDa0VBSUFJdkFRSnJRUjl4SVFjZ0hDRURBMEFnQkVId0FHb1FEMFVnQXlBS1NYRUVRQ0FESUFZZ0JDZ0NjQ0lJSUFRb0FuUWlEM1FnQjNaQkFuUnFJZ0l2QVFBN0FBQWdBeUFDTFFBRGFpSURJQVlnQ0NBUElBSXRBQUpxSWdoMElBZDJRUUowYWlJQ0x3RUFPd0FBSUFRZ0NDQUNMUUFDYWpZQ2RDQURJQUl0QUFOcUlRTU1BUVVnRWtFQ2F5RUlBMEFnQkVId0FHb1FEeUVQSUFRb0FuQWhDaUFFS0FKMElRSWdBeUFJU3lBUGNrVUVRQ0FESUFZZ0NpQUNkQ0FIZGtFQ2RHb2lDaThCQURzQUFDQUVJQUlnQ2kwQUFtbzJBblFnQXlBS0xRQURhaUVEREFFTEN3TkFJQU1nQ0UwRVFDQURJQVlnQ2lBQ2RDQUhka0VDZEdvaUR5OEJBRHNBQUNBRElBOHRBQU5xSVFNZ0FpQVBMUUFDYWlFQ0RBRUxDd0pBSUFNZ0VrOE5BQ0FESUFZZ0NpQUNkQ0FIZGtFQ2RHb2lBeTBBQURvQUFDQURMUUFEUVFGR0JFQWdBaUFETFFBQ2FpRUNEQUVMSUFKQkgwc05BRUVnSUFJZ0F5MEFBbW9pQWlBQ1FTQlBHeUVDQzBGc1FXd2dDeUFFS0FKNElBUW9BbnhIR3lBQ1FTQkhHeUVEREFzTEFBc0FDeUFFS0FJMElnSWdKU0FPYTBzTkNpQU9SUVJBUVFBaENTQUNEUUlNRGdzZ0RpQWJMUUFBSUFJUUF4b2dBaUVKREF3TElCVWdKU0FPYTBzTkNTQU9EUUZCQUNFSklCVkZEUXdMUWJaL0lRa01FUXNnRGlBYklCVVFBaG9nRlNFSkRBb0xJQndnR3dKL0FrQUNRQUpBSUFsQkFuWkJBM0ZCQVdzT0F3RUFBZ0FMSUFsQkEzWWhBMEVCREFJTElCc3ZBQUJCQkhZaEEwRUNEQUVMSUJWQkJFa05EaUFDTHdBRElBSXRBQVZCRUhSeUlnSkJqNENBQVVzTkRpQUNRUVIySVFOQkF3c2lBbW90QUFBZ0EwRWdhaEFESVFrZ0JTQUROZ0tBNndFZ0JTQUpOZ0x3NmdFZ0FrRUJhaUVKREFVTElCVUNmd0pBQWtBQ1FDQUpRUUoyUVFOeFFRRnJEZ01CQUFJQUN5QUpRUU4ySVFOQkFRd0NDeUFiTHdBQVFRUjJJUU5CQWd3QkN5QUNMd0FESUFJdEFBVkJFSFJ5UVFSMklRTkJBd3NpQWlBRGFpSUpRU0JxU1FSQUlBa2dGVXNORFNBY0lBSWdHMm9nQXhBQ0lRSWdCU0FETmdLQTZ3RWdCU0FDTmdMdzZnRWdBaUFEYWlJQ1FnQTNBQmdnQWtJQU53QVFJQUpDQURjQUNDQUNRZ0EzQUFBTUJRc2dCU0FETmdLQTZ3RWdCU0FDSUJ0cU5nTHc2Z0VNQkFzZ0IwVUVRQ0FlSUE4Z0NDQVVFQlFpQWtHSWYwc2dBaUFJVDNJTkRDQWNJQXNnQWlBUGFpQUlJQUpySUI0UUZTRUREQU1MSUF0RklBaEZjZzBMSUF0QkNIWWlBeUFJSUF0SkJIOGdDRUVFZENBTGJnVkJEd3RCR0d3aUFrR01DR29vQWdCc0lBSkJpQWhxS0FJQWFpSUdRUU4ySUFacUlBSkJnQWhxS0FJQUlBSkJoQWhxS0FJQUlBTnNha2tFUUNNQVFSQnJJaEFrQUNBZUtBSUFJUU1nRkVId0JHcEJBRUhzQUJBRElRWkJWQ0VDQWtBZ0EwSC9BWEVpREVFTVN3MEFBa0FnRkVIY0NXb2dCaUFRUVFocUlCQkJER29nRHlBSUlCUkIzQXRxSWhjUUN5SVNRWWgvU3cwQUlCQW9BZ3dpQmlBTVN3MEJJQlJCcUFWcUlRMGdGRUdrQldvaE5pQWVRUVJxSVJFZ0EwR0FnSUI0Y1NFM0lBWkJBV29pRXlFQ0lBWWhBd05BSUFJaUIwRUJheUVDSUFNaUNrRUJheUVESUJRZ0NrRUNkR29vQXZBRVJRMEFDMEVCSUFjZ0IwRUJUUnNoRmtFQUlRZEJBU0VDQTBBZ0FpQVdSd1JBSUJRZ0FrRUNkQ0lEYWlnQzhBUWhHQ0FESUExcUlBYzJBZ0FnQWtFQmFpRUNJQWNnR0dvaEJ3d0JDd3NnRFNBSE5nSUFRUUFoQWlBUUtBSUlJUU1EUUNBQ0lBTkhCRUFnRFNBQ0lCUnFRZHdKYWkwQUFDSVlRUUowYWlJWklCa29BZ0FpR1VFQmFqWUNBQ0FVSUJsQkFYUnFJaGtnR0RvQTNRVWdHU0FDT2dEY0JTQUNRUUZxSVFJTUFRc0xRUUFoQXlBTlFRQTJBZ0FnRENBR1FYOXphaUVHUVFFaEFnTkFJQUlnRmtjRVFDQVVJQUpCQW5ScUlnMGdBellDQUNBTktBTHdCQ0FDSUFacWRDQURhaUVESUFKQkFXb2hBZ3dCQ3dzZ0RDQVRJQXBySWdaclFRRnFJUW9nQmlFREEwQWdBeUFLU1FSQUlCUWdBMEUwYkdvaERVRUJJUUlEUUNBQ0lCWkhCRUFnRFNBQ1FRSjBJaGhxSUJRZ0dHb29BZ0FnQTNZMkFnQWdBa0VCYWlFQ0RBRUxDeUFEUVFGcUlRTU1BUXNMSUJjZ0ZFRTBFQUloT0NBVVFaQU1haUU1SUJNZ0RHc2hPaUFVUWR3RmFpRVhRUUFoQ2dOQUFrQUNRQ0FISUFwSEJFQkJBU0FNSUJNZ0Z5QUtRUUYwYWlJQ0xRQUJJZzFySWdOckloaDBJUmtnQWkwQUFDRVdJRGdnRFVFQ2RHb2lIeWdDQUNFQ0lBWWdHRTBFUUNBMlFRRWdBeUE2YWlJTklBMUJBVXdiSWlCQkFuUWlKR29vQWdBaERTQTVJQlFnQTBFMGJHcEJOQkFDSVNFZ0RVRUJkQ0VtSUJFZ0FrRUNkR29oSXlBZ1FRRk5EUUlnQTBFUWRFR0FnUHdIY1NBV2NrR0FnSUFJY2lFZ0lDRWdKR29vQWdBaEpFRUFJUUlEUUNBQ0lDUkdEUU1nSXlBQ1FRSjBhaUFnTmdFQUlBSkJBV29oQWd3QUN3QUxJQUlnQWlBWmFpSU5JQUlnRFVzYklRMGdBMEVRZEVHQWdQd0hjU0FXY2tHQWdJQUljaUVEQTBBZ0FpQU5SZzBESUJFZ0FrRUNkR29nQXpZQkFDQUNRUUZxSVFJTUFBc0FDeUFlSUF4QkVIUWdOM0lnREhKQmdBSnlOZ0lBREFNTElBY2dEV3NoSkNBWElDWnFJU1pCQUNFTkEwQWdEU0FrUmcwQlFRRWdHQ0FUSUNZZ0RVRUJkR29pSnkwQUFTSUNheUk3YTNRaVBDQWhJQUpCQW5ScUlpQW9BZ0FpQW1vaFBTQURJRHRxUVJCMFFZQ0EvQWR4SUNjdEFBQkJDSFJ5SUJaeVFZQ0FnQkJ5SVNjRFFDQWpJQUpCQW5ScUlDYzJBUUFnQWtFQmFpSUNJRDFKRFFBTElDQWdJQ2dDQUNBOGFqWUNBQ0FOUVFGcUlRME1BQXNBQ3lBZklCOG9BZ0FnR1dvMkFnQWdDa0VCYWlFS0RBQUxBQXNnRWlFQ0N5QVFRUkJxSkFBZ0FrR0lmMHNnQWlBSVQzSU5EQ0FjSUFzZ0FpQVBhaUFJSUFKcklCNFFGaUVEREFNTElCNGdEeUFJSUJRUUZDSUNRWWgvU3lBQ0lBaFBjZzBMSUJ3Z0N5QUNJQTlxSUFnZ0Ftc2dIaEFYSVFNTUFnc2dBd1JBSUJ3Z0N5QVBJQWdnQWhBV0lRTU1BZ3NnSENBTElBOGdDQ0FDRUJjaEF3d0JDeUFjSUFzZ0R5QUlJQUlRRlNFREN5QURRWWgvU3cwSUlBVWdDellDZ09zQklBVWdIRFlDOE9vQklBVkJBVFlDZ09vQklCcEJBa1lFUUNBRklCNDJBZ3dMSUFzZ0hHb2lBa0lBTndBQUlBSkNBRGNBR0NBQ1FnQTNBQkFnQWtJQU53QUlJQWxCaUg5TERRb0xJQWtnRlVZTkNDQVZJQWxySVFZZ0JTZ0NuT3NCSVFvQ1FDQUpJQnRxSWdNdEFBQWlEMFVFUUVFQklRSkJBQ0VQUWJoL0lRa2dCa0VCUmcwQkRBc0xBbjhnQTBFQmFpQVB3Q0lDUVFCT0RRQWFJQUpCZjBZRVFDQUdRUU5JRFFzZ0F5OEFBVUdBL2dGcUlROGdBMEVEYWd3QkN5QUdRUUpJRFFvZ0F5MEFBU0FQUVFoMGNrR0FnQUpySVE4Z0EwRUNhZ3NoRWtHNGZ5RUpJQkpCQVdvaUFpQVZJQnRxSWdkTERRb2dMQ0FGSUJJdEFBQWlFa0VHZGtFalFRa2dBaUFISUFKclFjQVFRZEFSUWZBU0lBVW9Bb1RxQVNBS0lBOGdGQkFoSWdsQmlIOUxEUWdnS3lBb0lCSkJCSFpCQTNGQkgwRUlJQUlnQ1dvaUFpQUhJQUpyUVlBTFFZQU1RWUFYSUFVb0FvVHFBU0FGS0FLYzZ3RWdEeUFVRUNFaUNFR0lmMHNOQ0VGc0lRa2dLaUF0SUJKQkFuWkJBM0ZCTkVFSklBSWdDR29pQWlBSElBSnJRWUFOUWVBT1FaQVpJQVVvQW9UcUFTQUZLQUtjNndFZ0R5QVVFQ0VpQjBHSWYwc05DaUFDSUFkcUlBTnJJZ0loQ1NBQ1FZaC9TdzBLQ3lBT0lBOUJBRXh5RFFFTFFicC9JUWtNQ0FzZ0pTQU9heUVKSUFZZ0Ftc2hCaUFDSUFOcUlRY0NRQUpBQWtBZ0NrVUVRQ0FQUVFsSUlBVXBBOGpwQVVLQmdJQUlWSElOQWlBb0tBSUFJZ0pCQ0dvaEVpQUNLQUlFSVFwQkFDRURRUUFoQWdOQUlBTWdDblpGQkVBZ0FpQVNJQU5CQTNScUxRQUNRUlpMYWlFQ0lBTkJBV29oQXd3QkN3c2dCVUVBTmdLYzZ3RWdBa0VJSUFwcmRFRVVUdzBCREFNTElBVkJBRFlDbk9zQkN5QUVJQVVvQXZEcUFTSUROZ0xjQVNBSklBNXFJUllnQXlBRktBS0E2d0ZxSVJjQ1FDQVBSUVJBSUE0aEJ3d0JDeUFGS0FLNDZRRWhHaUFGS0FLMDZRRWhHQ0FGS0FLdzZRRWhFaUFGUVFFMkFvVHFBVUVBSVFNRFFDQURRUU5IQkVBZ0JDQURRUUowSWdKcUlBSWdCV3BCck5BQmFpZ0NBRFlDWkNBRFFRRnFJUU1NQVFzTFFXd2hDU0FFUVRocUlnSWdCeUFHRUExQmlIOUxEUU5CQ0NBUElBOUJDRTRiSVI4Z05DQUNJQVVvQWdBUUhpQXpJQUlnQlNnQ0NCQWVJRElnQWlBRktBSUVFQjRnRGlBU2F5RVpRUUFoQ0FOQUlBUkJPR29RRDBFRFJpQUlJQjlPY2tVRVFDQUVLQUpRSUFRb0FreEJBM1JxS1FJQUlrQ25JZ2RCRUhZaUVVSC9BWEVoQ3lBRUtBSmdJQVFvQWx4QkEzUnFLUUlBSWtHbklneEJFSFlpSVVIL0FYRWhFQ0FFS0FKWUlBUW9BbFJCQTNScUtRSUFJa0pDSUlpbklRWWdRVUlnaUNCQVFpQ0lweUVEQWtBZ1FrSVFpS2NpQ2tIL0FYRWlBa0VDVHdSQUFrQWdBa0VaU1NBL1FvR0FnQkJVY2tVRVFDQUVRU0FnQkNnQ1BDSUtheUlOSUFJZ0FpQU5TeHNpRXlBS2FqWUNQQ0FHSUFRb0FqZ2dDblJCQUNBVGEzWWdBaUFUYXlJVGRHb2hDaUFFUVRocUVBOGFJQUlnRFUwTkFTQUVJQVFvQWp3aUFpQVRhallDUENBRUtBSTRJQUowUVFBZ0UydDJJQXBxSVFvTUFRc2dCQ0FDSUFRb0Fqd2lEV28yQWp3Z0JDZ0NPQ0FOZEVFQUlBcHJkaUFHYWlFS0lBUkJPR29RRHhvTElBUXBBbVFoUkNBRUlBbzJBbVFnQkNCRU53Sm9EQUVMQWtBZ0FrVUVRQ0FEQkVBZ0JDZ0NaQ0VLREFNTElBUW9BbWdoQ2d3QkN5QUVJQVFvQWp3aUFrRUJhallDUEFKL0lBWWdBMFZxSUFRb0FqZ2dBblJCSDNacUlnSkJBMFlFUUNBRUtBSmtRUUZyREFFTElBSkJBblFnQkdvb0FtUUxJZ1pGSUFacUlRb2dBa0VCUndSQUlBUWdCQ2dDYURZQ2JBc0xJQVFnQkNnQ1pEWUNhQ0FFSUFvMkFtUUxweUVDSUVGQ2dJRDhCNE5RUlFSQUlBUWdCQ2dDUENJR0lCQnFOZ0k4SUFRb0FqZ2dCblJCQUNBaGEzWWdBbW9oQWdzZ0N5QVFha0VVVHdSQUlBUkJPR29RRHhvTElFQkNnSUQ4QjROUVJRUkFJQVFnQkNnQ1BDSUdJQXRxTmdJOElBUW9BamdnQm5SQkFDQVJhM1lnQTJvaEF3c2dCRUU0YWhBUEdpQUVJQVFvQWpnaUJrRUFJQWRCR0hZaUN5QUVLQUk4YWlJUWEzWWdDMEVDZEVHZ0hXb29BZ0J4SUFkQi8vOERjV28yQWt3Z0JDQVFJQXhCR0hZaUIyb2lDellDUENBRUlBZEJBblJCb0IxcUtBSUFJQVpCQUNBTGEzWnhJQXhCLy84RGNXbzJBbHdnQkVFNGFoQVBHaUFFSUVLbklnWkJHSFlpQnlBRUtBSThhaUlMTmdJOElBUWdCMEVDZEVHZ0hXb29BZ0FnQkNnQ09FRUFJQXRyZG5FZ0JrSC8vd054YWpZQ1ZDQUVRZkFBYWlBSVFReHNhaUlHSUFvMkFnZ2dCaUFDTmdJRUlBWWdBellDQUNBSVFRRnFJUWdnQXlBWmFpQUNhaUVaREFFTEN5QUlJQjlJRFFNZ0ZrRWdheUVoSUE0aEJ3TkFJQVJCT0dvUUQwRURSaUFJSUE5T2NrVUVRQ0FFS0FKUUlBUW9Ba3hCQTNScUtRSUFJa0NuSWdaQkVIWWlJMEgvQVhFaENpQUVLQUpnSUFRb0FseEJBM1JxS1FJQUlrR25JZzFCRUhZaUlFSC9BWEVoRXlBRUtBSllJQVFvQWxSQkEzUnFLUUlBSWtKQ0lJaW5JUU1nUVVJZ2lDQkFRaUNJcHlFTEFrQWdRa0lRaUtjaURFSC9BWEVpQWtFQ1R3UkFBa0FnQWtFWlNTQS9Rb0dBZ0JCVWNrVUVRQ0FFUVNBZ0JDZ0NQQ0lNYXlJUklBSWdBaUFSU3hzaUVDQU1hallDUENBRElBUW9BamdnREhSQkFDQVFhM1lnQWlBUWF5SU1kR29oRUNBRVFUaHFFQThhSUFJZ0VVME5BU0FFSUFRb0Fqd2lBaUFNYWpZQ1BDQUVLQUk0SUFKMFFRQWdER3QySUJCcUlSQU1BUXNnQkNBQ0lBUW9BandpRUdvMkFqd2dCQ2dDT0NBUWRFRUFJQXhyZGlBRGFpRVFJQVJCT0dvUUR4b0xJQVFwQW1RaFJDQUVJQkEyQW1RZ0JDQkVOd0pvREFFTEFrQWdBa1VFUUNBTEJFQWdCQ2dDWkNFUURBTUxJQVFvQW1naEVBd0JDeUFFSUFRb0Fqd2lBa0VCYWpZQ1BBSi9JQU1nQzBWcUlBUW9BamdnQW5SQkgzWnFJZ0pCQTBZRVFDQUVLQUprUVFGckRBRUxJQUpCQW5RZ0JHb29BbVFMSWdORklBTnFJUkFnQWtFQlJ3UkFJQVFnQkNnQ2FEWUNiQXNMSUFRZ0JDZ0NaRFlDYUNBRUlCQTJBbVFMcHlFTUlFRkNnSUQ4QjROUVJRUkFJQVFnQkNnQ1BDSUNJQk5xTmdJOElBUW9BamdnQW5SQkFDQWdhM1lnREdvaERBc2dDaUFUYWtFVVR3UkFJQVJCT0dvUUR4b0xJRUJDZ0lEOEI0TlFSUVJBSUFRZ0JDZ0NQQ0lDSUFwcU5nSThJQVFvQWpnZ0FuUkJBQ0FqYTNZZ0Myb2hDd3NnQkVFNGFoQVBHaUFFSUFRb0FqZ2lBa0VBSUFaQkdIWWlBeUFFS0FJOGFpSUthM1lnQTBFQ2RFR2dIV29vQWdCeElBWkIvLzhEY1dvMkFrd2dCQ0FLSUExQkdIWWlBMm9pQmpZQ1BDQUVJQU5CQW5SQm9CMXFLQUlBSUFKQkFDQUdhM1p4SUExQi8vOERjV28yQWx3Z0JFRTRhaEFQR2lBRUlFS25JZ0pCR0hZaUF5QUVLQUk4YWlJR05nSThJQVFnQTBFQ2RFR2dIV29vQWdBZ0JDZ0NPRUVBSUFacmRuRWdBa0gvL3dOeGFqWUNWQUpBQWtBQ1FDQUVLQUxjQVNJRElBUkI4QUJxSUFoQkIzRkJER3hxSWhNb0FnQWlFV29pSXlBWFN3MEFJQWNnRXlnQ0JDSU5JQkZxSWdwcUlDRkxEUUFnQ2tFZ2FpQVdJQWRyVFEwQkN5QUVJQk1vQWdnMkFoZ2dCQ0FUS1FJQU53TVFJQWNnRmlBRVFSQnFJQVJCM0FGcUlCY2dFaUFZSUJvUUh5RUtEQUVMSUFjZ0VXb2hBaUFUS0FJSUlRWWdCeUFES1FBQU53QUFJQWNnQXlrQUNEY0FDQUpBSUJGQkVVa05BQ0FISUFNcEFCQTNBQkFnQnlBREtRQVlOd0FZSUJGQkVHdEJFVWdOQUNBRFFSQnFJUU1nQjBFZ2FpRVJBMEFnRVNBREtRQVFOd0FBSUJFZ0F5a0FHRGNBQ0NBUklBTXBBQ0EzQUJBZ0VTQURLUUFvTndBWUlBTkJJR29oQXlBUlFTQnFJaEVnQWtrTkFBc0xJQUlnQm1zaEF5QUVJQ00yQXR3QklBSWdFbXNnQmtrRVFDQUdJQUlnR0d0TERRY2dHaUFhSUFNZ0Vtc2lBMm9pRVNBTmFrOEVRQ0FDSUJFZ0RSQUtHZ3dDQ3lBRElBMXFJUTBnQWlBUlFRQWdBMnNRQ2lBRGF5RUNJQkloQXdzZ0JrRVFUd1JBSUFJZ0F5a0FBRGNBQUNBQ0lBTXBBQWczQUFnZ0RVRVJTQTBCSUFJZ0RXb2hCaUFDUVJCcUlRSURRQ0FDSUFNcEFCQTNBQUFnQWlBREtRQVlOd0FJSUFJZ0F5a0FJRGNBRUNBQ0lBTXBBQ2czQUJnZ0EwRWdhaUVESUFKQklHb2lBaUFHU1EwQUN3d0JDd0pBSUFaQkIwMEVRQ0FDSUFNdEFBQTZBQUFnQWlBRExRQUJPZ0FCSUFJZ0F5MEFBam9BQWlBQ0lBTXRBQU02QUFNZ0FpQURJQVpCQW5RaUJrSEFIbW9vQWdCcUlnTW9BQUEyQUFRZ0F5QUdRZUFlYWlnQ0FHc2hBd3dCQ3lBQ0lBTXBBQUEzQUFBTElBMUJDVWtOQUNBQ0lBMXFJUkVnQWtFSWFpSUdJQU5CQ0dvaUEydEJEMHdFUUFOQUlBWWdBeWtBQURjQUFDQURRUWhxSVFNZ0JrRUlhaUlHSUJGSkRRQU1BZ3NBQ3lBR0lBTXBBQUEzQUFBZ0JpQURLUUFJTndBSUlBMUJHVWdOQUNBQ1FSaHFJUUlEUUNBQ0lBTXBBQkEzQUFBZ0FpQURLUUFZTndBSUlBSWdBeWtBSURjQUVDQUNJQU1wQUNnM0FCZ2dBMEVnYWlFRElBSkJJR29pQWlBUlNRMEFDd3NnQ2tHSWYwc0VRQ0FLSVFrTUJnVWdFeUFRTmdJSUlCTWdERFlDQkNBVElBczJBZ0FnQ0VFQmFpRUlJQWNnQ21vaEJ5QUxJQmxxSUF4cUlSa01BZ3NBQ3dzZ0NDQVBTQTBESUFnZ0gyc2hCZ05BQWtBZ0JpQVBUZ1JBUVFBaEF3TkFJQU5CQTBZTkFpQUZJQU5CQW5RaUFtcEJyTkFCYWlBQ0lBUnFLQUprTmdJQUlBTkJBV29oQXd3QUN3QUxBa0FDUUFKQUlBUW9BdHdCSWdNZ0JFSHdBR29nQmtFSGNVRU1iR29pQ0NnQ0FDSU1haUlRSUJkTERRQWdCeUFJS0FJRUlnc2dER29pQ21vZ0lVc05BQ0FLUVNCcUlCWWdCMnRORFFFTElBUWdDQ2dDQ0RZQ0tDQUVJQWdwQWdBM0F5QWdCeUFXSUFSQklHb2dCRUhjQVdvZ0Z5QVNJQmdnR2hBZklRb01BUXNnQnlBTWFpRUNJQWdvQWdnaENDQUhJQU1wQUFBM0FBQWdCeUFES1FBSU53QUlBa0FnREVFUlNRMEFJQWNnQXlrQUVEY0FFQ0FISUFNcEFCZzNBQmdnREVFUWEwRVJTQTBBSUFOQkVHb2hBeUFIUVNCcUlRd0RRQ0FNSUFNcEFCQTNBQUFnRENBREtRQVlOd0FJSUF3Z0F5a0FJRGNBRUNBTUlBTXBBQ2czQUJnZ0EwRWdhaUVESUF4QklHb2lEQ0FDU1EwQUN3c2dBaUFJYXlFRElBUWdFRFlDM0FFZ0FpQVNheUFJU1FSQUlBZ2dBaUFZYTBzTkJ5QWFJQm9nQXlBU2F5SURhaUlNSUF0cVR3UkFJQUlnRENBTEVBb2FEQUlMSUFNZ0Myb2hDeUFDSUF4QkFDQURheEFLSUFOcklRSWdFaUVEQ3lBSVFSQlBCRUFnQWlBREtRQUFOd0FBSUFJZ0F5a0FDRGNBQ0NBTFFSRklEUUVnQWlBTGFpRUlJQUpCRUdvaEFnTkFJQUlnQXlrQUVEY0FBQ0FDSUFNcEFCZzNBQWdnQWlBREtRQWdOd0FRSUFJZ0F5a0FLRGNBR0NBRFFTQnFJUU1nQWtFZ2FpSUNJQWhKRFFBTERBRUxBa0FnQ0VFSFRRUkFJQUlnQXkwQUFEb0FBQ0FDSUFNdEFBRTZBQUVnQWlBRExRQUNPZ0FDSUFJZ0F5MEFBem9BQXlBQ0lBTWdDRUVDZENJSVFjQWVhaWdDQUdvaUF5Z0FBRFlBQkNBRElBaEI0QjVxS0FJQWF5RUREQUVMSUFJZ0F5a0FBRGNBQUFzZ0MwRUpTUTBBSUFJZ0Myb2hEQ0FDUVFocUlnZ2dBMEVJYWlJRGEwRVBUQVJBQTBBZ0NDQURLUUFBTndBQUlBTkJDR29oQXlBSVFRaHFJZ2dnREVrTkFBd0NDd0FMSUFnZ0F5a0FBRGNBQUNBSUlBTXBBQWczQUFnZ0MwRVpTQTBBSUFKQkdHb2hBZ05BSUFJZ0F5a0FFRGNBQUNBQ0lBTXBBQmczQUFnZ0FpQURLUUFnTndBUUlBSWdBeWtBS0RjQUdDQURRU0JxSVFNZ0FrRWdhaUlDSUF4SkRRQUxDeUFLUVloL1N3UkFJQW9oQ1F3R0JTQUdRUUZxSVFZZ0J5QUthaUVIREFJTEFBc0xJQVFvQXR3QklRTUxRYnAvSVFrZ0Z5QURheUlDSUJZZ0IydExEUUlnQndSL0lBY2dBeUFDRUFJZ0Ftb0ZRUUFMSUE1cklRa01BZ3NnQlVFQU5nS2M2d0VMSUFRZ0JTZ0M4T29CSWdNMkF0d0JJQWtnRG1vaERDQURJQVVvQW9EckFXb2hFQUpBSUE5RkJFQWdEaUVHREFFTElBVW9BcmpwQVNFTklBVW9BclRwQVNFVElBVW9BckRwQVNFU0lBVkJBVFlDaE9vQlFRQWhBd05BSUFOQkEwY0VRQ0FFSUFOQkFuUWlBbW9nQWlBRmFrR3MwQUZxS0FJQU5nS2NBU0FEUVFGcUlRTU1BUXNMUVd3aENTQUVRZkFBYWlJQ0lBY2dCaEFOUVloL1N3MEJJREVnQWlBRktBSUFFQjRnTUNBQ0lBVW9BZ2dRSGlBdklBSWdCU2dDQkJBZUlBeEJJR3NoR0NBT0lRWURRQ0FFS0FLSUFTQUVLQUtFQVVFRGRHb3BBZ0FpUUtjaUNrRVFkaUlaUWY4QmNTRUxJQVFvQXBnQklBUW9BcFFCUVFOMGFpa0NBQ0pCcHlJV1FSQjJJaDlCL3dGeElSb2dCQ2dDa0FFZ0JDZ0NqQUZCQTNScUtRSUFJa0pDSUlpbklRY2dRVUlnaUNCQVFpQ0lweUVEQWtBZ1FrSVFpS2NpQ0VIL0FYRWlBa0VDVHdSQUFrQWdBa0VaU1NBL1FvR0FnQkJVY2tVRVFDQUVRU0FnQkNnQ2RDSUlheUlSSUFJZ0FpQVJTeHNpRnlBSWFqWUNkQ0FISUFRb0FuQWdDSFJCQUNBWGEzWWdBaUFYYXlJWGRHb2hDQ0FFUWZBQWFoQVBHaUFDSUJGTkRRRWdCQ0FFS0FKMElnSWdGMm8yQW5RZ0JDZ0NjQ0FDZEVFQUlCZHJkaUFJYWlFSURBRUxJQVFnQWlBRUtBSjBJaEZxTmdKMElBUW9BbkFnRVhSQkFDQUlhM1lnQjJvaENDQUVRZkFBYWhBUEdnc2dCQ2tDbkFFaFJDQUVJQWcyQXB3QklBUWdSRGNDb0FFTUFRc0NRQ0FDUlFSQUlBTUVRQ0FFS0FLY0FTRUlEQU1MSUFRb0FxQUJJUWdNQVFzZ0JDQUVLQUowSWdKQkFXbzJBblFDZnlBSElBTkZhaUFFS0FKd0lBSjBRUjkyYWlJQ1FRTkdCRUFnQkNnQ25BRkJBV3NNQVFzZ0FrRUNkQ0FFYWlnQ25BRUxJZ2RGSUFkcUlRZ2dBa0VCUndSQUlBUWdCQ2dDb0FFMkFxUUJDd3NnQkNBRUtBS2NBVFlDb0FFZ0JDQUlOZ0tjQVF1bklRSWdRVUtBZ1B3SGcxQkZCRUFnQkNBRUtBSjBJZ2NnR21vMkFuUWdCQ2dDY0NBSGRFRUFJQjlyZGlBQ2FpRUNDeUFMSUJwcVFSUlBCRUFnQkVId0FHb1FEeG9MSUVCQ2dJRDhCNE5RUlFSQUlBUWdCQ2dDZENJSElBdHFOZ0owSUFRb0FuQWdCM1JCQUNBWmEzWWdBMm9oQXdzZ0JFSHdBR29RRHhvZ0JDQUVLQUp3SWdkQkFDQUtRUmgySWdzZ0JDZ0NkR29pR210MklBdEJBblJCb0IxcUtBSUFjU0FLUWYvL0EzRnFOZ0tFQVNBRUlCb2dGa0VZZGlJS2FpSUxOZ0owSUFRZ0NrRUNkRUdnSFdvb0FnQWdCMEVBSUF0cmRuRWdGa0gvL3dOeGFqWUNsQUVnQkVId0FHb1FEeG9nQkNCQ3B5SUhRUmgySWdvZ0JDZ0NkR29pQ3pZQ2RDQUVJQXBCQW5SQm9CMXFLQUlBSUFRb0FuQkJBQ0FMYTNaeElBZEIvLzhEY1dvMkFvd0JJQVFnQXpZQ09DQUVJQUkyQWp3Z0JDQUlOZ0pBQWtBQ1FBSkFJQVFvQXR3Qklnc2dBMm9pRmlBUVN3MEFJQVlnQWlBRGFpSUthaUFZU3cwQUlBcEJJR29nRENBR2EwME5BUXNnQkNBRVFVQnJLQUlBTmdJSUlBUWdCQ2tET0RjREFDQUdJQXdnQkNBRVFkd0JhaUFRSUJJZ0V5QU5FQjhoQ2d3QkN5QURJQVpxSVFjZ0JpQUxLUUFBTndBQUlBWWdDeWtBQ0RjQUNBSkFJQU5CRVVrTkFDQUdJQXNwQUJBM0FCQWdCaUFMS1FBWU53QVlJQU5CRUd0QkVVZ05BQ0FMUVJCcUlRTWdCa0VnYWlFTEEwQWdDeUFES1FBUU53QUFJQXNnQXlrQUdEY0FDQ0FMSUFNcEFDQTNBQkFnQ3lBREtRQW9Od0FZSUFOQklHb2hBeUFMUVNCcUlnc2dCMGtOQUFzTElBY2dDR3NoQXlBRUlCWTJBdHdCSUFjZ0Vtc2dDRWtFUUNBSUlBY2dFMnRMRFFRZ0RTQU5JQU1nRW1zaUEyb2lDeUFDYWs4RVFDQUhJQXNnQWhBS0dnd0NDeUFISUF0QkFDQURheEFLSUFRZ0FpQURhaUlDTmdJOElBTnJJUWNnRWlFREN5QUlRUkJQQkVBZ0J5QURLUUFBTndBQUlBY2dBeWtBQ0RjQUNDQUNRUkZJRFFFZ0FpQUhhaUVJSUFkQkVHb2hBZ05BSUFJZ0F5a0FFRGNBQUNBQ0lBTXBBQmczQUFnZ0FpQURLUUFnTndBUUlBSWdBeWtBS0RjQUdDQURRU0JxSVFNZ0FrRWdhaUlDSUFoSkRRQUxEQUVMQWtBZ0NFRUhUUVJBSUFjZ0F5MEFBRG9BQUNBSElBTXRBQUU2QUFFZ0J5QURMUUFDT2dBQ0lBY2dBeTBBQXpvQUF5QUhJQU1nQ0VFQ2RDSUlRY0FlYWlnQ0FHb2lBeWdBQURZQUJDQURJQWhCNEI1cUtBSUFheUVEREFFTElBY2dBeWtBQURjQUFBc2dBa0VKU1EwQUlBSWdCMm9oQ3lBSFFRaHFJZ2dnQTBFSWFpSURhMEVQVEFSQUEwQWdDQ0FES1FBQU53QUFJQU5CQ0dvaEF5QUlRUWhxSWdnZ0Mwa05BQXdDQ3dBTElBZ2dBeWtBQURjQUFDQUlJQU1wQUFnM0FBZ2dBa0VaU0EwQUlBZEJHR29oQWdOQUlBSWdBeWtBRURjQUFDQUNJQU1wQUJnM0FBZ2dBaUFES1FBZ053QVFJQUlnQXlrQUtEY0FHQ0FEUVNCcUlRTWdBa0VnYWlJQ0lBdEpEUUFMQ3lBS1FZaC9Td1JBSUFvaENRd0RDeUFHSUFwcUlRWWdCRUh3QUdvUUR5RURJQTlCQVdzaUR3MEFDMEVBSVFJZ0EwRUNTUTBCQTBBZ0FrRURSd1JBSUFVZ0FrRUNkQ0lEYWtHczBBRnFJQU1nQkdvb0Fwd0JOZ0lBSUFKQkFXb2hBZ3dCQ3dzZ0JDZ0MzQUVoQXd0QnVuOGhDU0FRSUFOcklnSWdEQ0FHYTBzTkFDQUdCSDhnQmlBRElBSVFBaUFDYWdWQkFBc2dEbXNoQ1FzZ0NVR0lmMHNOQmdzQ1FDQUZLQUxzNmdGRkRRQWdCU0FGS1FPSTZnRWdDYTE4TndPSTZnRUNRQ0FGS0FMUTZnRWlBaUFKYWlJSVFSOU5CRUFnRGtVTkFTQUNJQ0pxSUE0Z0NSQUNHaUFGS0FMUTZnRWdDV29oQ0F3QkN5QU9JUU1nQWdSQUlBSWdJbW9nQTBFZ0lBSnJFQUlhSUFVb0F0RHFBU0VDSUFWQkFEWUMwT29CSUFVZ0JTa0RrT29CSUFVcEFMRHFBVUxQMXRPKzBzZXIyVUorZkVJZmlVS0hsYSt2bUxiZW01NS9mamNEa09vQklBVWdCU2tEbU9vQklBVXBBTGpxQVVMUDF0Tyswc2VyMlVKK2ZFSWZpVUtIbGErdm1MYmVtNTUvZmpjRG1Pb0JJQVVnQlNrRG9Pb0JJQVVwQU1EcUFVTFAxdE8rMHNlcjJVSitmRUlmaVVLSGxhK3ZtTGJlbTU1L2ZqY0RvT29CSUFVZ0JTa0RxT29CSUFVcEFNanFBVUxQMXRPKzBzZXIyVUorZkVJZmlVS0hsYSt2bUxiZW01NS9mamNEcU9vQklBTWdBbXRCSUdvaEF3c2dDU0FPYWlJQ0lBTkJJR3BQQkVBZ0FrRWdheUVHSUFVcEE2anFBU0UvSUFVcEE2RHFBU0ZBSUFVcEE1anFBU0ZCSUFVcEE1RHFBU0ZDQTBBZ0F5a0FHRUxQMXRPKzBzZXIyVUorSUQ5OFFoK0pRb2VWcjYrWXR0NmJubjkrSVQ4Z0F5a0FFRUxQMXRPKzBzZXIyVUorSUVCOFFoK0pRb2VWcjYrWXR0NmJubjkrSVVBZ0F5a0FDRUxQMXRPKzBzZXIyVUorSUVGOFFoK0pRb2VWcjYrWXR0NmJubjkrSVVFZ0F5a0FBRUxQMXRPKzBzZXIyVUorSUVKOFFoK0pRb2VWcjYrWXR0NmJubjkrSVVJZ0EwRWdhaUlESUFaTkRRQUxJQVVnUHpjRHFPb0JJQVVnUURjRG9Pb0JJQVVnUVRjRG1Pb0JJQVVnUWpjRGtPb0JDeUFDSUFOTkRRRWdJaUFESUFJZ0Eyc2lDQkFDR2dzZ0JTQUlOZ0xRNmdFTElEVWdGV3NoQXlBVklCdHFJUUlnQ1NBT2FpRU9JQVFvQWpCRkRRQUxJQ2twQXdBaVAwSi9VU0EvSUE0Z0hXdXNVWEpGQkVCQmJDRUpEQVlMSUFVb0F1RHBBUVJBUVdvaENTQURRUVJKRFFZZ0JTZ0M2T29CUlFSQUlDSWdCU2dDME9vQmFpRUtBbjRnQlNrRGlPb0JJajlDSUZvRVFDQUZLUU9ZNmdFaVFFSUhpU0FGS1FPUTZnRWlRVUlCaVh3Z0JTa0RvT29CSWtKQ0RJbDhJQVVwQTZqcUFTSkRRaEtKZkNCQlFzL1cwNzdTeDZ2WlFuNUNINGxDaDVXdnI1aTIzcHVlZjM2RlFvZVZyNitZdHQ2Ym5uOStRcDJqdGVxRHNZMksrZ0I5SUVCQ3o5YlR2dExIcTlsQ2ZrSWZpVUtIbGErdm1MYmVtNTUvZm9WQ2g1V3ZyNWkyM3B1ZWYzNUNuYU8xNm9PeGpZcjZBSDBnUWtMUDF0Tyswc2VyMlVKK1FoK0pRb2VWcjYrWXR0NmJubjkraFVLSGxhK3ZtTGJlbTU1L2ZrS2RvN1hxZzdHTml2b0FmU0JEUXMvVzA3N1N4NnZaUW41Q0g0bENoNVd2cjVpMjNwdWVmMzZGUW9lVnI2K1l0dDZibm45K1FwMmp0ZXFEc1kySytnQjlEQUVMSUFVcEE2RHFBVUxGejlteThlVzY2aWQ4Q3lBL2ZDRS9JQ0loQmdOQUlBb2dCa0VJYWlJSFR3UkFJQVlwQUFCQ3o5YlR2dExIcTlsQ2ZrSWZpVUtIbGErdm1MYmVtNTUvZmlBL2hVSWJpVUtIbGErdm1MYmVtNTUvZmtLZG83WHFnN0dOaXZvQWZTRS9JQWNoQmd3QkN3c0NRQ0FLSUFaQkJHb2lDRWtFUUNBR0lRZ01BUXNnQmpVQUFFS0hsYSt2bUxiZW01NS9maUEvaFVJWGlVTFAxdE8rMHNlcjJVSitRdm56M2ZHWjlwbXJGbndoUHdzRFFDQUlJQXBKQkVBZ0NERUFBRUxGejlteThlVzY2aWQrSUQrRlFndUpRb2VWcjYrWXR0NmJubjkrSVQ4Z0NFRUJhaUVJREFFTEN5QUNLQUFBSUQ5Q0lZZ2dQNFZDejliVHZ0TEhxOWxDZmlJL1FoMklJRCtGUXZuejNmR1o5cG1yRm40aVAwSWdpQ0EvaGFkSERRY0xJQU5CQkdzaEF5QUNRUVJxSVFJTElBNGdIV3NpQ1VHSmYwOE5CQ0FCSUFscklRRWdDU0FkYWlFZFFRRWhQZ3dCQ3d0QnVIOGhCeUFERFFRZ0hTQUFheUVIREFRTFFXd2hDUXdCQzBHNGZ5RUpDMEc0ZnlFSElBbEJka1lnUG5FTkFRc2dDU0VIQ3lnQ0FBMEFJQVZCL09vQmFpZ0NBQ0VCSUFWQitPb0JhaWdDQUNFQUlBVVFHQ0FGS0FLdzZ3RWdBQ0FCRUJNZ0JVRUFOZ0t3NndFZ0JTZ0NwT3NCSWdJRVFBSkFBa0FDUUFKQUlBSW9BZ0FpQXdSQUlBQkZEUUlnQVNBRElBQVJBZ0FNQVFzZ0FFVU5BZ3NnQVNBQ0lBQVJBZ0FNQWdzZ0F4QUdDeUFDRUFZTElBVkJBRFlDcE9zQkN5QUFCRUFnQVNBRklBQVJBZ0FNQVFzZ0JSQUdDeUFFUWVBQmFpUUFJQWNMQzZnVkNRQkJpQWdMRFFFQUFBQUJBQUFBQWdBQUFBSUFRYUFJQzdNR0FRQUFBQUVBQUFBQ0FBQUFBZ0FBQUNZQUFBQ0NBQUFBSVFVQUFFb0FBQUJuQ0FBQUpnQUFBTUFCQUFDQUFBQUFTUVVBQUVvQUFBQytDQUFBS1FBQUFDd0NBQUNBQUFBQVNRVUFBRW9BQUFDK0NBQUFMd0FBQU1vQ0FBQ0FBQUFBaWdVQUFFb0FBQUNFQ1FBQU5RQUFBSE1EQUFDQUFBQUFuUVVBQUVvQUFBQ2dDUUFBUFFBQUFJRURBQUNBQUFBQTZ3VUFBRXNBQUFBK0NnQUFSQUFBQUo0REFBQ0FBQUFBVFFZQUFFc0FBQUNxQ2dBQVN3QUFBTE1EQUFDQUFBQUF3UVlBQUUwQUFBQWZEUUFBVFFBQUFGTUVBQUNBQUFBQUl3Z0FBRkVBQUFDbUR3QUFWQUFBQUprRUFBQ0FBQUFBU3drQUFGY0FBQUN4RWdBQVdBQUFBTm9FQUFDQUFBQUFid2tBQUYwQUFBQWpGQUFBVkFBQUFFVUZBQUNBQUFBQVZBb0FBR29BQUFDTUZBQUFhZ0FBQUs4RkFBQ0FBQUFBZGdrQUFId0FBQUJPRUFBQWZBQUFBTklDQUFDQUFBQUFZd2NBQUpFQUFBQ1FCd0FBa2dBQUFBQUFBQUFCQUFBQUFRQUFBQVVBQUFBTkFBQUFIUUFBQUQwQUFBQjlBQUFBL1FBQUFQMEJBQUQ5QXdBQS9RY0FBUDBQQUFEOUh3QUEvVDhBQVAxL0FBRDkvd0FBL2Y4QkFQMy9Bd0Q5L3djQS9mOFBBUDMvSHdEOS96OEEvZjkvQVAzLy93RDkvLzhCL2YvL0EvMy8vd2Y5Ly84UC9mLy9ILzMvL3ovOS8vOS9BQUFBQUFFQUFBQUNBQUFBQXdBQUFBUUFBQUFGQUFBQUJnQUFBQWNBQUFBSUFBQUFDUUFBQUFvQUFBQUxBQUFBREFBQUFBMEFBQUFPQUFBQUR3QUFBQkFBQUFBUkFBQUFFZ0FBQUJNQUFBQVVBQUFBRlFBQUFCWUFBQUFYQUFBQUdBQUFBQmtBQUFBYUFBQUFHd0FBQUJ3QUFBQWRBQUFBSGdBQUFCOEFBQUFEQUFBQUJBQUFBQVVBQUFBR0FBQUFCd0FBQUFnQUFBQUpBQUFBQ2dBQUFBc0FBQUFNQUFBQURRQUFBQTRBQUFBUEFBQUFFQUFBQUJFQUFBQVNBQUFBRXdBQUFCUUFBQUFWQUFBQUZnQUFBQmNBQUFBWUFBQUFHUUFBQUJvQUFBQWJBQUFBSEFBQUFCMEFBQUFlQUFBQUh3QUFBQ0FBQUFBaEFBQUFJZ0FBQUNNQUFBQWxBQUFBSndBQUFDa0FBQUFyQUFBQUx3QUFBRE1BQUFBN0FBQUFRd0FBQUZNQUFBQmpBQUFBZ3dBQUFBTUJBQUFEQWdBQUF3UUFBQU1JQUFBREVBQUFBeUFBQUFOQUFBQURnQUFBQXdBQkFFSGdEd3RSQVFBQUFBRUFBQUFCQUFBQUFRQUFBQUlBQUFBQ0FBQUFBd0FBQUFNQUFBQUVBQUFBQkFBQUFBVUFBQUFIQUFBQUNBQUFBQWtBQUFBS0FBQUFDd0FBQUF3QUFBQU5BQUFBRGdBQUFBOEFBQUFRQUVIRUVBdUxBUUVBQUFBQ0FBQUFBd0FBQUFRQUFBQUZBQUFBQmdBQUFBY0FBQUFJQUFBQUNRQUFBQW9BQUFBTEFBQUFEQUFBQUEwQUFBQU9BQUFBRHdBQUFCQUFBQUFTQUFBQUZBQUFBQllBQUFBWUFBQUFIQUFBQUNBQUFBQW9BQUFBTUFBQUFFQUFBQUNBQUFBQUFBRUFBQUFDQUFBQUJBQUFBQWdBQUFBUUFBQUFJQUFBQUVBQUFBQ0FBQUFBQUFFQVFaQVNDK1lFQVFBQUFBRUFBQUFCQUFBQUFRQUFBQUlBQUFBQ0FBQUFBd0FBQUFNQUFBQUVBQUFBQmdBQUFBY0FBQUFJQUFBQUNRQUFBQW9BQUFBTEFBQUFEQUFBQUEwQUFBQU9BQUFBRHdBQUFCQUFBQUFCQUFBQUJBQUFBQWdBQUFBQUFBQUFBUUFCQVFZQUFBQUFBQUFFQUFBQUFCQUFBQVFBQUFBQUlBQUFCUUVBQUFBQUFBQUZBd0FBQUFBQUFBVUVBQUFBQUFBQUJRWUFBQUFBQUFBRkJ3QUFBQUFBQUFVSkFBQUFBQUFBQlFvQUFBQUFBQUFGREFBQUFBQUFBQVlPQUFBQUFBQUJCUkFBQUFBQUFBRUZGQUFBQUFBQUFRVVdBQUFBQUFBQ0JSd0FBQUFBQUFNRklBQUFBQUFBQkFVd0FBQUFJQUFHQlVBQUFBQUFBQWNGZ0FBQUFBQUFDQVlBQVFBQUFBQUtCZ0FFQUFBQUFBd0dBQkFBQUNBQUFBUUFBQUFBQUFBQUJBRUFBQUFBQUFBRkFnQUFBQ0FBQUFVRUFBQUFBQUFBQlFVQUFBQWdBQUFGQndBQUFBQUFBQVVJQUFBQUlBQUFCUW9BQUFBQUFBQUZDd0FBQUFBQUFBWU5BQUFBSUFBQkJSQUFBQUFBQUFFRkVnQUFBQ0FBQVFVV0FBQUFBQUFDQlJnQUFBQWdBQU1GSUFBQUFBQUFBd1VvQUFBQUFBQUdCRUFBQUFBUUFBWUVRQUFBQUNBQUJ3V0FBQUFBQUFBSkJnQUNBQUFBQUFzR0FBZ0FBREFBQUFRQUFBQUFFQUFBQkFFQUFBQWdBQUFGQWdBQUFDQUFBQVVEQUFBQUlBQUFCUVVBQUFBZ0FBQUZCZ0FBQUNBQUFBVUlBQUFBSUFBQUJRa0FBQUFnQUFBRkN3QUFBQ0FBQUFVTUFBQUFBQUFBQmc4QUFBQWdBQUVGRWdBQUFDQUFBUVVVQUFBQUlBQUNCUmdBQUFBZ0FBSUZIQUFBQUNBQUF3VW9BQUFBSUFBRUJUQUFBQUFBQUJBR0FBQUJBQUFBRHdZQWdBQUFBQUFPQmdCQUFBQUFBQTBHQUNBQVFZQVhDNGNDQVFBQkFRVUFBQUFBQUFBRkFBQUFBQUFBQmdROUFBQUFBQUFKQmYwQkFBQUFBQThGL1g4QUFBQUFGUVg5L3g4QUFBQURCUVVBQUFBQUFBY0VmUUFBQUFBQURBWDlEd0FBQUFBU0JmMy9Bd0FBQUJjRi9mOS9BQUFBQlFVZEFBQUFBQUFJQlAwQUFBQUFBQTRGL1Q4QUFBQUFGQVg5L3c4QUFBQUNCUUVBQUFBUUFBY0VmUUFBQUFBQUN3WDlCd0FBQUFBUkJmMy9BUUFBQUJZRi9mOC9BQUFBQkFVTkFBQUFFQUFJQlAwQUFBQUFBQTBGL1I4QUFBQUFFd1g5L3djQUFBQUJCUUVBQUFBUUFBWUVQUUFBQUFBQUNnWDlBd0FBQUFBUUJmMy9BQUFBQUJ3Ri9mLy9Ed0FBR3dYOS8vOEhBQUFhQmYzLy93TUFBQmtGL2YvL0FRQUFHQVg5Ly84QVFaQVpDNFlFQVFBQkFRWUFBQUFBQUFBR0F3QUFBQUFBQUFRRUFBQUFJQUFBQlFVQUFBQUFBQUFGQmdBQUFBQUFBQVVJQUFBQUFBQUFCUWtBQUFBQUFBQUZDd0FBQUFBQUFBWU5BQUFBQUFBQUJoQUFBQUFBQUFBR0V3QUFBQUFBQUFZV0FBQUFBQUFBQmhrQUFBQUFBQUFHSEFBQUFBQUFBQVlmQUFBQUFBQUFCaUlBQUFBQUFBRUdKUUFBQUFBQUFRWXBBQUFBQUFBQ0JpOEFBQUFBQUFNR093QUFBQUFBQkFaVEFBQUFBQUFIQm9NQUFBQUFBQWtHQXdJQUFCQUFBQVFFQUFBQUFBQUFCQVVBQUFBZ0FBQUZCZ0FBQUFBQUFBVUhBQUFBSUFBQUJRa0FBQUFBQUFBRkNnQUFBQUFBQUFZTUFBQUFBQUFBQmc4QUFBQUFBQUFHRWdBQUFBQUFBQVlWQUFBQUFBQUFCaGdBQUFBQUFBQUdHd0FBQUFBQUFBWWVBQUFBQUFBQUJpRUFBQUFBQUFFR0l3QUFBQUFBQVFZbkFBQUFBQUFDQmlzQUFBQUFBQU1HTXdBQUFBQUFCQVpEQUFBQUFBQUZCbU1BQUFBQUFBZ0dBd0VBQUNBQUFBUUVBQUFBTUFBQUJBUUFBQUFRQUFBRUJRQUFBQ0FBQUFVSEFBQUFJQUFBQlFnQUFBQWdBQUFGQ2dBQUFDQUFBQVVMQUFBQUFBQUFCZzRBQUFBQUFBQUdFUUFBQUFBQUFBWVVBQUFBQUFBQUJoY0FBQUFBQUFBR0dnQUFBQUFBQUFZZEFBQUFBQUFBQmlBQUFBQUFBQkFHQXdBQkFBQUFEd1lEZ0FBQUFBQU9CZ05BQUFBQUFBMEdBeUFBQUFBQURBWURFQUFBQUFBTEJnTUlBQUFBQUFvR0F3UUFRYVFkQzlrQkFRQUFBQU1BQUFBSEFBQUFEd0FBQUI4QUFBQS9BQUFBZndBQUFQOEFBQUQvQVFBQS93TUFBUDhIQUFEL0R3QUEveDhBQVA4L0FBRC9md0FBLy84QUFQLy9BUUQvL3dNQS8vOEhBUC8vRHdELy94OEEvLzgvQVAvL2Z3RC8vLzhBLy8vL0FmLy8vd1AvLy84SC8vLy9ELy8vL3gvLy8vOC8vLy8vZndBQUFBQUJBQUFBQWdBQUFBUUFBQUFBQUFBQUFnQUFBQVFBQUFBSUFBQUFBQUFBQUFFQUFBQUNBQUFBQVFBQUFBUUFBQUFFQUFBQUJBQUFBQVFBQUFBSUFBQUFDQUFBQUFnQUFBQUhBQUFBQ0FBQUFBa0FBQUFLQUFBQUN3QkJnQjhMQTRBUkFRPT0iO3ZhciBzZT1uZXcgSkEsQ2U9ITE7YXN5bmMgZnVuY3Rpb24gX0koQSx0LGUpe2xldCBJPW51bGw7dHlwZW9mIEEhPSJzdHJpbmciP0k9QS5ocmVmOkEuc3RhcnRzV2l0aCgiaHR0cCIpP0k9QTpJPWAke3R9LyR7QX1gLEkuZW5kc1dpdGgoIi5qcyIpJiYoST1JLnN1YnN0cmluZygwLEkubGVuZ3RoLTMpKSxJLmVuZHNXaXRoKCIud2FzbSIpJiYoST1JLnN1YnN0cmluZygwLEkubGVuZ3RoLTUpKTtsZXQgcj1gJHtJfS53YXNtYCxvPWF3YWl0IExBLmdldChgJHtyfS56c3RgLHtyZXNwb25zZVR5cGU6ImFycmF5YnVmZmVyIixwYXJhbXM6ZX0pO0NlfHwoYXdhaXQgc2UuaW5pdCgpLENlPSEwKTtsZXQgQz1zZS5kZWNvZGUobmV3IFVpbnQ4QXJyYXkoby5kYXRhKSkuYnVmZmVyO3JldHVybihhd2FpdCBpbXBvcnQoYCR7SX0uanNgKSkuZGVmYXVsdCh7d2FzbUJpbmFyeTpDfSl9dmFyIEJlPV9JO3ZhciBiQT1uZXcgTWFwO2FzeW5jIGZ1bmN0aW9uIFhJKEEsdCxlKXtsZXQgST1BLHI9QSxvPW51bGw7cmV0dXJuIHR5cGVvZiBBIT0ic3RyaW5nIiYmKEk9bmV3IFVSTChBLmhyZWYpLHI9SS5ocmVmKSxiQS5oYXMocik/bz1hd2FpdCBiQS5nZXQocik6KGJBLnNldChyLEJlKEksdCxlKSksbz1hd2FpdCBiQS5nZXQocikpLG99dmFyIGFlPVhJO3ZhciB6ST17VGV4dEZpbGU6IlRleHRGaWxlIixCaW5hcnlGaWxlOiJCaW5hcnlGaWxlIixUZXh0U3RyZWFtOiJUZXh0U3RyZWFtIixCaW5hcnlTdHJlYW06IkJpbmFyeVN0cmVhbSIsSW1hZ2U6IkltYWdlIixQb2ludFNldDoiUG9pbnRTZXQiLE1lc2g6Ik1lc2giLFBvbHlEYXRhOiJQb2x5RGF0YSIsVHJhbnNmb3JtTGlzdDoiVHJhbnNmb3JtTGlzdCIsSnNvbkNvbXBhdGlibGU6Ikpzb25Db21wYXRpYmxlIn0saD16STt2YXIgdkk9e0ludDg6ImludDgiLFVJbnQ4OiJ1aW50OCIsSW50MTY6ImludDE2IixVSW50MTY6InVpbnQxNiIsSW50MzI6ImludDMyIixVSW50MzI6InVpbnQzMiIsSW50NjQ6ImludDY0IixVSW50NjQ6InVpbnQ2NCIsU2l6ZVZhbHVlVHlwZToidWludDY0IixJZGVudGlmaWVyVHlwZToidWludDY0IixJbmRleFZhbHVlVHlwZToiaW50NjQiLE9mZnNldFZhbHVlVHlwZToiaW50NjQifSxSPXZJO3ZhciAkST17RmxvYXQzMjoiZmxvYXQzMiIsRmxvYXQ2NDoiZmxvYXQ2NCIsU3BhY2VQcmVjaXNpb25UeXBlOiJmbG9hdDY0In0sej0kSTtmdW5jdGlvbiBBcihBLHQpe2xldCBlPW51bGw7c3dpdGNoKEEpe2Nhc2UgUi5VSW50ODp7ZT1uZXcgVWludDhBcnJheSh0KTticmVha31jYXNlIFIuSW50ODp7ZT1uZXcgSW50OEFycmF5KHQpO2JyZWFrfWNhc2UgUi5VSW50MTY6e2U9bmV3IFVpbnQxNkFycmF5KHQpO2JyZWFrfWNhc2UgUi5JbnQxNjp7ZT1uZXcgSW50MTZBcnJheSh0KTticmVha31jYXNlIFIuVUludDMyOntlPW5ldyBVaW50MzJBcnJheSh0KTticmVha31jYXNlIFIuSW50MzI6e2U9bmV3IEludDMyQXJyYXkodCk7YnJlYWt9Y2FzZSBSLlVJbnQ2NDp7dHlwZW9mIGdsb2JhbFRoaXMuQmlnVWludDY0QXJyYXk9PSJmdW5jdGlvbiI/ZT1uZXcgQmlnVWludDY0QXJyYXkodCk6ZT1uZXcgVWludDhBcnJheSh0KTticmVha31jYXNlIFIuSW50NjQ6e3R5cGVvZiBnbG9iYWxUaGlzLkJpZ0ludDY0QXJyYXk9PSJmdW5jdGlvbiI/ZT1uZXcgQmlnSW50NjRBcnJheSh0KTplPW5ldyBVaW50OEFycmF5KHQpO2JyZWFrfWNhc2Ugei5GbG9hdDMyOntlPW5ldyBGbG9hdDMyQXJyYXkodCk7YnJlYWt9Y2FzZSB6LkZsb2F0NjQ6e2U9bmV3IEZsb2F0NjRBcnJheSh0KTticmVha31jYXNlIm51bGwiOntlPW51bGw7YnJlYWt9Y2FzZSBudWxsOntlPW51bGw7YnJlYWt9ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoIlR5cGUgaXMgbm90IHN1cHBvcnRlZCBhcyBhIFR5cGVkQXJyYXkiKX1yZXR1cm4gZX12YXIgSD1Bcjt2YXIgY2U9dHlwZW9mIGdsb2JhbFRoaXMuU2hhcmVkQXJyYXlCdWZmZXI9PSJmdW5jdGlvbiIsUWU9bmV3IFRleHRFbmNvZGVyLEVlPW5ldyBUZXh0RGVjb2RlcigidXRmLTgiKTtmdW5jdGlvbiB0cihBLHQpe2xldCBlPXtmbGFnczoiciIsZW5jb2Rpbmc6ImJpbmFyeSJ9LEk9QS5mc19vcGVuKHQsZS5mbGFncyksbz1BLmZzX3N0YXQodCkuc2l6ZSxnPW51bGw7Y2U/Zz1uZXcgU2hhcmVkQXJyYXlCdWZmZXIobyk6Zz1uZXcgQXJyYXlCdWZmZXIobyk7bGV0IEM9bmV3IFVpbnQ4QXJyYXkoZyk7cmV0dXJuIEEuZnNfcmVhZChJLEMsMCxvLDApLEEuZnNfY2xvc2UoSSksQ31mdW5jdGlvbiBmZShBLHQsZSl7bGV0IEk9bnVsbDtjZT9JPW5ldyBTaGFyZWRBcnJheUJ1ZmZlcihlKTpJPW5ldyBBcnJheUJ1ZmZlcihlKTtsZXQgcj1uZXcgVWludDhBcnJheShJKSxvPW5ldyBVaW50OEFycmF5KEEuSEVBUFU4LmJ1ZmZlcix0LGUpO3JldHVybiByLnNldChvKSxyfWZ1bmN0aW9uIHkoQSx0LGUsSSl7bGV0IHI9MDtyZXR1cm4gdCE9PW51bGwmJihyPUEuY2NhbGwoIml0a193YXNtX2lucHV0X2FycmF5X2FsbG9jIiwibnVtYmVyIixbIm51bWJlciIsIm51bWJlciIsIm51bWJlciIsIm51bWJlciJdLFswLGUsSSx0LmJ1ZmZlci5ieXRlTGVuZ3RoXSksQS5IRUFQVTguc2V0KG5ldyBVaW50OEFycmF5KHQuYnVmZmVyKSxyKSkscn1mdW5jdGlvbiBUKEEsdCxlKXtsZXQgST1KU09OLnN0cmluZ2lmeSh0KSxyPUEubGVuZ3RoQnl0ZXNVVEY4KEkpKzEsbz1BLmNjYWxsKCJpdGtfd2FzbV9pbnB1dF9qc29uX2FsbG9jIiwibnVtYmVyIixbIm51bWJlciIsIm51bWJlciIsIm51bWJlciJdLFswLGUscl0pO0Euc3RyaW5nVG9VVEY4KEksbyxyKX1mdW5jdGlvbiBGKEEsdCxlLEkpe2xldCByPUEuY2NhbGwoIml0a193YXNtX291dHB1dF9hcnJheV9hZGRyZXNzIiwibnVtYmVyIixbIm51bWJlciIsIm51bWJlciIsIm51bWJlciJdLFswLHQsZV0pLG89QS5jY2FsbCgiaXRrX3dhc21fb3V0cHV0X2FycmF5X3NpemUiLCJudW1iZXIiLFsibnVtYmVyIiwibnVtYmVyIiwibnVtYmVyIl0sWzAsdCxlXSksZz1mZShBLHIsbyk7cmV0dXJuIEgoSSxnLmJ1ZmZlcil9ZnVuY3Rpb24gc0EoQSx0KXtsZXQgZT1BLmNjYWxsKCJpdGtfd2FzbV9vdXRwdXRfanNvbl9hZGRyZXNzIiwibnVtYmVyIixbIm51bWJlciIsIm51bWJlciJdLFswLHRdKSxJPUEuVVRGOFRvU3RyaW5nKGUpO3JldHVybiBKU09OLnBhcnNlKEkpfWZ1bmN0aW9uIGVyKEEsdCxlLEkpe0khPW51bGwmJkkubGVuZ3RoPjAmJkkuZm9yRWFjaChmdW5jdGlvbihhLG4pe3N3aXRjaChhLnR5cGUpe2Nhc2UgaC5UZXh0U3RyZWFtOntsZXQgcz1RZS5lbmNvZGUoYS5kYXRhLmRhdGEpLGY9eShBLHMsbiwwKSxCPXtzaXplOnMuYnVmZmVyLmJ5dGVMZW5ndGgsZGF0YTpgZGF0YTphcHBsaWNhdGlvbi92bmQuaXRrLmFkZHJlc3MsMDoke2Z9YH07VChBLEIsbik7YnJlYWt9Y2FzZSBoLkpzb25Db21wYXRpYmxlOntsZXQgcz1RZS5lbmNvZGUoSlNPTi5zdHJpbmdpZnkoYS5kYXRhKSksZj15KEEscyxuLDApLEI9e3NpemU6cy5idWZmZXIuYnl0ZUxlbmd0aCxkYXRhOmBkYXRhOmFwcGxpY2F0aW9uL3ZuZC5pdGsuYWRkcmVzcywwOiR7Zn1gfTtUKEEsQixuKTticmVha31jYXNlIGguQmluYXJ5U3RyZWFtOntsZXQgcz1hLmRhdGEuZGF0YSxmPXkoQSxzLG4sMCksQj17c2l6ZTpzLmJ1ZmZlci5ieXRlTGVuZ3RoLGRhdGE6YGRhdGE6YXBwbGljYXRpb24vdm5kLml0ay5hZGRyZXNzLDA6JHtmfWB9O1QoQSxCLG4pO2JyZWFrfWNhc2UgaC5UZXh0RmlsZTp7QS5mc193cml0ZUZpbGUoYS5kYXRhLnBhdGgsYS5kYXRhLmRhdGEpO2JyZWFrfWNhc2UgaC5CaW5hcnlGaWxlOntBLmZzX3dyaXRlRmlsZShhLmRhdGEucGF0aCxhLmRhdGEuZGF0YSk7YnJlYWt9Y2FzZSBoLkltYWdlOntsZXQgcz1hLmRhdGEsZj15KEEscy5kYXRhLG4sMCksQj15KEEscy5kaXJlY3Rpb24sbiwxKSxFPXR5cGVvZiBzLm1ldGFkYXRhPy5lbnRyaWVzPCJ1Ij9BcnJheS5mcm9tKHMubWV0YWRhdGEuZW50cmllcygpKTpbXSxsPXtpbWFnZVR5cGU6cy5pbWFnZVR5cGUsbmFtZTpzLm5hbWUsb3JpZ2luOnMub3JpZ2luLHNwYWNpbmc6cy5zcGFjaW5nLGRpcmVjdGlvbjpgZGF0YTphcHBsaWNhdGlvbi92bmQuaXRrLmFkZHJlc3MsMDoke0J9YCxzaXplOnMuc2l6ZSxkYXRhOmBkYXRhOmFwcGxpY2F0aW9uL3ZuZC5pdGsuYWRkcmVzcywwOiR7Zn1gLG1ldGFkYXRhOkV9O1QoQSxsLG4pO2JyZWFrfWNhc2UgaC5NZXNoOntsZXQgcz1hLmRhdGEsZj15KEEscy5wb2ludHMsbiwwKSxCPXkoQSxzLmNlbGxzLG4sMSksRT15KEEscy5wb2ludERhdGEsbiwyKSxsPXkoQSxzLmNlbGxEYXRhLG4sMyksYz17bWVzaFR5cGU6cy5tZXNoVHlwZSxuYW1lOnMubmFtZSxudW1iZXJPZlBvaW50czpzLm51bWJlck9mUG9pbnRzLHBvaW50czpgZGF0YTphcHBsaWNhdGlvbi92bmQuaXRrLmFkZHJlc3MsMDoke2Z9YCxudW1iZXJPZkNlbGxzOnMubnVtYmVyT2ZDZWxscyxjZWxsczpgZGF0YTphcHBsaWNhdGlvbi92bmQuaXRrLmFkZHJlc3MsMDoke0J9YCxjZWxsQnVmZmVyU2l6ZTpzLmNlbGxCdWZmZXJTaXplLG51bWJlck9mUG9pbnRQaXhlbHM6cy5udW1iZXJPZlBvaW50UGl4ZWxzLHBvaW50RGF0YTpgZGF0YTphcHBsaWNhdGlvbi92bmQuaXRrLmFkZHJlc3MsMDoke0V9YCxudW1iZXJPZkNlbGxQaXhlbHM6cy5udW1iZXJPZkNlbGxQaXhlbHMsY2VsbERhdGE6YGRhdGE6YXBwbGljYXRpb24vdm5kLml0ay5hZGRyZXNzLDA6JHtsfWB9O1QoQSxjLG4pO2JyZWFrfWNhc2UgaC5Qb2ludFNldDp7bGV0IHM9YS5kYXRhLGY9eShBLHMucG9pbnRzLG4sMCksQj15KEEscy5wb2ludERhdGEsbiwxKSxFPXtwb2ludFNldFR5cGU6cy5wb2ludFNldFR5cGUsbmFtZTpzLm5hbWUsbnVtYmVyT2ZQb2ludHM6cy5udW1iZXJPZlBvaW50cyxwb2ludHM6YGRhdGE6YXBwbGljYXRpb24vdm5kLml0ay5hZGRyZXNzLDA6JHtmfWAsbnVtYmVyT2ZQb2ludFBpeGVsczpzLm51bWJlck9mUG9pbnRQaXhlbHMscG9pbnREYXRhOmBkYXRhOmFwcGxpY2F0aW9uL3ZuZC5pdGsuYWRkcmVzcywwOiR7Qn1gfTtUKEEsRSxuKTticmVha31jYXNlIGguVHJhbnNmb3JtTGlzdDp7bGV0IHM9YS5kYXRhLGY9W107cy5mb3JFYWNoKChCLEUpPT57bGV0IGM9YGRhdGE6YXBwbGljYXRpb24vdm5kLml0ay5hZGRyZXNzLDA6JHt5KEEsQi5maXhlZFBhcmFtZXRlcnMsbixFKjIpfWAsUz1gZGF0YTphcHBsaWNhdGlvbi92bmQuaXRrLmFkZHJlc3MsMDoke3koQSxCLnBhcmFtZXRlcnMsbixFKjIrMSl9YCxEPXt0cmFuc2Zvcm1UeXBlOkIudHJhbnNmb3JtVHlwZSxudW1iZXJPZkZpeGVkUGFyYW1ldGVyczpCLm51bWJlck9mRml4ZWRQYXJhbWV0ZXJzLG51bWJlck9mUGFyYW1ldGVyczpCLm51bWJlck9mUGFyYW1ldGVycyxuYW1lOkIubmFtZSxpbnB1dFNwYWNlTmFtZTpCLmlucHV0U3BhY2VOYW1lLG91dHB1dFNwYWNlTmFtZTpCLm91dHB1dFNwYWNlTmFtZSxwYXJhbWV0ZXJzOlMsZml4ZWRQYXJhbWV0ZXJzOmN9O2YucHVzaChEKX0pLFQoQSxmLG4pO2JyZWFrfWNhc2UgaC5Qb2x5RGF0YTp7bGV0IHM9YS5kYXRhLGY9eShBLHMucG9pbnRzLG4sMCksQj15KEEscy52ZXJ0aWNlcyxuLDEpLEU9eShBLHMubGluZXMsbiwyKSxsPXkoQSxzLnBvbHlnb25zLG4sMyksYz15KEEscy50cmlhbmdsZVN0cmlwcyxuLDQpLHA9eShBLHMucG9pbnREYXRhLG4sNSksUz15KEEscy5wb2ludERhdGEsbiw2KSxEPXtwb2x5RGF0YVR5cGU6cy5wb2x5RGF0YVR5cGUsbmFtZTpzLm5hbWUsbnVtYmVyT2ZQb2ludHM6cy5udW1iZXJPZlBvaW50cyxwb2ludHM6YGRhdGE6YXBwbGljYXRpb24vdm5kLml0ay5hZGRyZXNzLDA6JHtmfWAsdmVydGljZXNCdWZmZXJTaXplOnMudmVydGljZXNCdWZmZXJTaXplLHZlcnRpY2VzOmBkYXRhOmFwcGxpY2F0aW9uL3ZuZC5pdGsuYWRkcmVzcywwOiR7Qn1gLGxpbmVzQnVmZmVyU2l6ZTpzLmxpbmVzQnVmZmVyU2l6ZSxsaW5lczpgZGF0YTphcHBsaWNhdGlvbi92bmQuaXRrLmFkZHJlc3MsMDoke0V9YCxwb2x5Z29uc0J1ZmZlclNpemU6cy5wb2x5Z29uc0J1ZmZlclNpemUscG9seWdvbnM6YGRhdGE6YXBwbGljYXRpb24vdm5kLml0ay5hZGRyZXNzLDA6JHtsfWAsdHJpYW5nbGVTdHJpcHNCdWZmZXJTaXplOnMudHJpYW5nbGVTdHJpcHNCdWZmZXJTaXplLHRyaWFuZ2xlU3RyaXBzOmBkYXRhOmFwcGxpY2F0aW9uL3ZuZC5pdGsuYWRkcmVzcywwOiR7Y31gLG51bWJlck9mUG9pbnRQaXhlbHM6cy5udW1iZXJPZlBvaW50UGl4ZWxzLHBvaW50RGF0YTpgZGF0YTphcHBsaWNhdGlvbi92bmQuaXRrLmFkZHJlc3MsMDoke3B9YCxudW1iZXJPZkNlbGxQaXhlbHM6cy5udW1iZXJPZkNlbGxQaXhlbHMsY2VsbERhdGE6YGRhdGE6YXBwbGljYXRpb24vdm5kLml0ay5hZGRyZXNzLDA6JHtTfWB9O1QoQSxELG4pO2JyZWFrfWRlZmF1bHQ6dGhyb3cgRXJyb3IoIlVuc3VwcG9ydGVkIGlucHV0IEludGVyZmFjZVR5cGUiKX19KSxBLnJlc2V0TW9kdWxlU3Rkb3V0KCksQS5yZXNldE1vZHVsZVN0ZGVycigpO2xldCByPUEuc3RhY2tTYXZlKCksbz0wO3RyeXtvPUEuY2FsbE1haW4odC5zbGljZSgpKX1jYXRjaChhKXt0aHJvdyB0eXBlb2YgYT09Im51bWJlciImJihjb25zb2xlLmxvZygiRXhjZXB0aW9uIHdoaWxlIHJ1bm5pbmcgcGlwZWxpbmU6IiksY29uc29sZS5sb2coInN0ZG91dDoiLEEuZ2V0TW9kdWxlU3Rkb3V0KCkpLGNvbnNvbGUuZXJyb3IoInN0ZGVycjoiLEEuZ2V0TW9kdWxlU3RkZXJyKCkpLHR5cGVvZiBBLmdldEV4Y2VwdGlvbk1lc3NhZ2U8InUiP2NvbnNvbGUuZXJyb3IoImV4Y2VwdGlvbjoiLEEuZ2V0RXhjZXB0aW9uTWVzc2FnZShhKSk6Y29uc29sZS5lcnJvcigiQnVpbGQgbW9kdWxlIGluIERlYnVnIG1vZGUgZm9yIGV4Y2VwdGlvbiBtZXNzYWdlIGluZm9ybWF0aW9uLiIpKSxhfWZpbmFsbHl7QS5zdGFja1Jlc3RvcmUocil9bGV0IGc9QS5nZXRNb2R1bGVTdGRvdXQoKSxDPUEuZ2V0TW9kdWxlU3RkZXJyKCksUT1bXTtyZXR1cm4gZSE9bnVsbCYmZS5sZW5ndGg+MCYmbz09PTAmJmUuZm9yRWFjaChmdW5jdGlvbihhLG4pe2xldCBzPW51bGw7c3dpdGNoKGEudHlwZSl7Y2FzZSBoLlRleHRTdHJlYW06e2xldCBCPUEuY2NhbGwoIml0a193YXNtX291dHB1dF9hcnJheV9hZGRyZXNzIiwibnVtYmVyIixbIm51bWJlciIsIm51bWJlciIsIm51bWJlciJdLFswLG4sMF0pLEU9QS5jY2FsbCgiaXRrX3dhc21fb3V0cHV0X2FycmF5X3NpemUiLCJudW1iZXIiLFsibnVtYmVyIiwibnVtYmVyIiwibnVtYmVyIl0sWzAsbiwwXSksbD1uZXcgVWludDhBcnJheShBLkhFQVBVOC5idWZmZXIsQixFKTtzPXtkYXRhOkVlLmRlY29kZShsKX07YnJlYWt9Y2FzZSBoLkpzb25Db21wYXRpYmxlOntsZXQgQj1BLmNjYWxsKCJpdGtfd2FzbV9vdXRwdXRfYXJyYXlfYWRkcmVzcyIsIm51bWJlciIsWyJudW1iZXIiLCJudW1iZXIiLCJudW1iZXIiXSxbMCxuLDBdKSxFPUEuY2NhbGwoIml0a193YXNtX291dHB1dF9hcnJheV9zaXplIiwibnVtYmVyIixbIm51bWJlciIsIm51bWJlciIsIm51bWJlciJdLFswLG4sMF0pLGw9bmV3IFVpbnQ4QXJyYXkoQS5IRUFQVTguYnVmZmVyLEIsRSk7cz1KU09OLnBhcnNlKEVlLmRlY29kZShsKSk7YnJlYWt9Y2FzZSBoLkJpbmFyeVN0cmVhbTp7bGV0IEI9QS5jY2FsbCgiaXRrX3dhc21fb3V0cHV0X2FycmF5X2FkZHJlc3MiLCJudW1iZXIiLFsibnVtYmVyIiwibnVtYmVyIiwibnVtYmVyIl0sWzAsbiwwXSksRT1BLmNjYWxsKCJpdGtfd2FzbV9vdXRwdXRfYXJyYXlfc2l6ZSIsIm51bWJlciIsWyJudW1iZXIiLCJudW1iZXIiLCJudW1iZXIiXSxbMCxuLDBdKTtzPXtkYXRhOmZlKEEsQixFKX07YnJlYWt9Y2FzZSBoLlRleHRGaWxlOntzPXtwYXRoOmEuZGF0YS5wYXRoLGRhdGE6QS5mc19yZWFkRmlsZShhLmRhdGEucGF0aCx7ZW5jb2Rpbmc6InV0ZjgifSl9O2JyZWFrfWNhc2UgaC5CaW5hcnlGaWxlOntzPXtwYXRoOmEuZGF0YS5wYXRoLGRhdGE6dHIoQSxhLmRhdGEucGF0aCl9O2JyZWFrfWNhc2UgaC5JbWFnZTp7bGV0IEI9c0EoQSxuKTtCLmRhdGE9RihBLG4sMCxCLmltYWdlVHlwZS5jb21wb25lbnRUeXBlKSxCLmRpcmVjdGlvbj1GKEEsbiwxLHouRmxvYXQ2NCksQi5tZXRhZGF0YT1uZXcgTWFwKEIubWV0YWRhdGEpLHM9QjticmVha31jYXNlIGguTWVzaDp7bGV0IEI9c0EoQSxuKTtCLm51bWJlck9mUG9pbnRzPjA/Qi5wb2ludHM9RihBLG4sMCxCLm1lc2hUeXBlLnBvaW50Q29tcG9uZW50VHlwZSk6Qi5wb2ludHM9SChCLm1lc2hUeXBlLnBvaW50Q29tcG9uZW50VHlwZSxuZXcgQXJyYXlCdWZmZXIoMCkpLEIubnVtYmVyT2ZDZWxscz4wP0IuY2VsbHM9RihBLG4sMSxCLm1lc2hUeXBlLmNlbGxDb21wb25lbnRUeXBlKTpCLmNlbGxzPUgoQi5tZXNoVHlwZS5jZWxsQ29tcG9uZW50VHlwZSxuZXcgQXJyYXlCdWZmZXIoMCkpLEIubnVtYmVyT2ZQb2ludFBpeGVscz4wP0IucG9pbnREYXRhPUYoQSxuLDIsQi5tZXNoVHlwZS5wb2ludFBpeGVsQ29tcG9uZW50VHlwZSk6Qi5wb2ludERhdGE9SChCLm1lc2hUeXBlLnBvaW50UGl4ZWxDb21wb25lbnRUeXBlLG5ldyBBcnJheUJ1ZmZlcigwKSksQi5udW1iZXJPZkNlbGxQaXhlbHM+MD9CLmNlbGxEYXRhPUYoQSxuLDMsQi5tZXNoVHlwZS5jZWxsUGl4ZWxDb21wb25lbnRUeXBlKTpCLmNlbGxEYXRhPUgoQi5tZXNoVHlwZS5jZWxsUGl4ZWxDb21wb25lbnRUeXBlLG5ldyBBcnJheUJ1ZmZlcigwKSkscz1CO2JyZWFrfWNhc2UgaC5Qb2ludFNldDp7bGV0IEI9c0EoQSxuKTtCLm51bWJlck9mUG9pbnRzPjA/Qi5wb2ludHM9RihBLG4sMCxCLnBvaW50U2V0VHlwZS5wb2ludENvbXBvbmVudFR5cGUpOkIucG9pbnRzPUgoQi5wb2ludFNldFR5cGUucG9pbnRDb21wb25lbnRUeXBlLG5ldyBBcnJheUJ1ZmZlcigwKSksQi5udW1iZXJPZlBvaW50UGl4ZWxzPjA/Qi5wb2ludERhdGE9RihBLG4sMSxCLnBvaW50U2V0VHlwZS5wb2ludFBpeGVsQ29tcG9uZW50VHlwZSk6Qi5wb2ludERhdGE9SChCLnBvaW50U2V0VHlwZS5wb2ludFBpeGVsQ29tcG9uZW50VHlwZSxuZXcgQXJyYXlCdWZmZXIoMCkpLHM9QjticmVha31jYXNlIGguVHJhbnNmb3JtTGlzdDp7bGV0IEI9c0EoQSxuKTtCLmZvckVhY2goKEUsbCk9PntFLm51bWJlck9mRml4ZWRQYXJhbWV0ZXJzPjAmJihCW2xdLmZpeGVkUGFyYW1ldGVycz1GKEEsbixsKjIsRS50cmFuc2Zvcm1UeXBlLnBhcmFtZXRlcnNWYWx1ZVR5cGUpKSxFLm51bWJlck9mRml4ZWRQYXJhbWV0ZXJzPjAmJihCW2xdLnBhcmFtZXRlcnM9RihBLG4sbCoyKzEsRS50cmFuc2Zvcm1UeXBlLnBhcmFtZXRlcnNWYWx1ZVR5cGUpKX0pLHM9QjticmVha31jYXNlIGguUG9seURhdGE6e2xldCBCPXNBKEEsbik7Qi5udW1iZXJPZlBvaW50cz4wP0IucG9pbnRzPUYoQSxuLDAsei5GbG9hdDMyKTpCLnBvaW50cz1uZXcgRmxvYXQzMkFycmF5LEIudmVydGljZXNCdWZmZXJTaXplPjA/Qi52ZXJ0aWNlcz1GKEEsbiwxLFIuVUludDMyKTpCLnZlcnRpY2VzPW5ldyBVaW50MzJBcnJheSxCLmxpbmVzQnVmZmVyU2l6ZT4wP0IubGluZXM9RihBLG4sMixSLlVJbnQzMik6Qi5saW5lcz1uZXcgVWludDMyQXJyYXksQi5wb2x5Z29uc0J1ZmZlclNpemU+MD9CLnBvbHlnb25zPUYoQSxuLDMsUi5VSW50MzIpOkIucG9seWdvbnM9bmV3IFVpbnQzMkFycmF5LEIudHJpYW5nbGVTdHJpcHNCdWZmZXJTaXplPjA/Qi50cmlhbmdsZVN0cmlwcz1GKEEsbiw0LFIuVUludDMyKTpCLnRyaWFuZ2xlU3RyaXBzPW5ldyBVaW50MzJBcnJheSxCLm51bWJlck9mUG9pbnRQaXhlbHM+MD9CLnBvaW50RGF0YT1GKEEsbiw1LEIucG9seURhdGFUeXBlLnBvaW50UGl4ZWxDb21wb25lbnRUeXBlKTpCLnBvaW50RGF0YT1IKEIucG9seURhdGFUeXBlLnBvaW50UGl4ZWxDb21wb25lbnRUeXBlLG5ldyBBcnJheUJ1ZmZlcigwKSksQi5udW1iZXJPZkNlbGxQaXhlbHM+MD9CLmNlbGxEYXRhPUYoQSxuLDYsQi5wb2x5RGF0YVR5cGUuY2VsbFBpeGVsQ29tcG9uZW50VHlwZSk6Qi5jZWxsRGF0YT1IKEIucG9seURhdGFUeXBlLmNlbGxQaXhlbENvbXBvbmVudFR5cGUsbmV3IEFycmF5QnVmZmVyKDApKSxzPUI7YnJlYWt9ZGVmYXVsdDp0aHJvdyBFcnJvcigiVW5zdXBwb3J0ZWQgb3V0cHV0IEludGVyZmFjZVR5cGUiKX1sZXQgZj17dHlwZTphLnR5cGUsZGF0YTpzfTtRLnB1c2goZil9KSx7cmV0dXJuVmFsdWU6byxzdGRvdXQ6ZyxzdGRlcnI6QyxvdXRwdXRzOlF9fXZhciBsZT1lcjt2YXIgSXI9dHlwZW9mIGdsb2JhbFRoaXMuU2hhcmVkQXJyYXlCdWZmZXI8InUiO2Z1bmN0aW9uIHJyKEEsdCl7aWYoQT09bnVsbClyZXR1cm5bXTtsZXQgZT1bXTtmb3IobGV0IEk9MDtJPEEubGVuZ3RoO0krKyl7bGV0IHI9b3IoQVtJXSx0KTtyIT09bnVsbCYmZS5wdXNoKHIpfXJldHVybiBlfWZ1bmN0aW9uIG9yKEEsdCl7aWYoQT09bnVsbClyZXR1cm4gbnVsbDtsZXQgZT1udWxsO3JldHVybiBBLmJ1ZmZlciE9PXZvaWQgMD9lPUEuYnVmZmVyOkEuYnl0ZUxlbmd0aCE9PXZvaWQgMCYmKGU9QSksSXImJmUgaW5zdGFuY2VvZiBTaGFyZWRBcnJheUJ1ZmZlcj9udWxsOnQ/ZTplLnNsaWNlKDApfXZhciB1ZT1ycjtmdW5jdGlvbiBncihBKXtyZXR1cm5bQS5kYXRhLEEuZGlyZWN0aW9uXX12YXIgRGU9Z3I7ZnVuY3Rpb24gaXIoQSl7cmV0dXJuW0EucG9pbnRzLEEucG9pbnREYXRhLEEuY2VsbHMsQS5jZWxsRGF0YV19dmFyIGhlPWlyO2Z1bmN0aW9uIG5yKEEpe3JldHVybltBLnBvaW50cyxBLnZlcnRpY2VzLEEubGluZXMsQS5wb2x5Z29ucyxBLnRyaWFuZ2xlU3RyaXBzLEEucG9pbnREYXRhLEEuY2VsbERhdGFdfXZhciBkZT1ucjthc3luYyBmdW5jdGlvbiBzcihBLHQsZSxJKXtsZXQgcj1sZShBLHQsZSxJKSxvPVtdO3JldHVybiByLm91dHB1dHMuZm9yRWFjaChmdW5jdGlvbihnKXtpZihnLnR5cGU9PT1oLkJpbmFyeVN0cmVhbXx8Zy50eXBlPT09aC5CaW5hcnlGaWxlKXtsZXQgQz1nLmRhdGE7by5wdXNoKEMpfWVsc2UgaWYoZy50eXBlPT09aC5JbWFnZSl7bGV0IEM9Zy5kYXRhO28ucHVzaCguLi5EZShDKSl9ZWxzZSBpZihnLnR5cGU9PT1oLk1lc2gpe2xldCBDPWcuZGF0YTtvLnB1c2goLi4uaGUoQykpfWVsc2UgaWYoZy50eXBlPT09aC5Qb2x5RGF0YSl7bGV0IEM9Zy5kYXRhO28ucHVzaCguLi5kZShDKSl9fSksTUEocix1ZShvLCEwKSl9dmFyIHllPXNyO3ZhciBDcj17cnVuUGlwZWxpbmU6YXN5bmMgZnVuY3Rpb24oQSx0LGUsSSxyLG8pe2xldCBnPWF3YWl0IGFlKEEsdCxvKTtyZXR1cm4gYXdhaXQgeWUoZyxlLEkscil9fTtmQShDcik7JTBBLyohIEJ1bmRsZWQgbGljZW5zZSBpbmZvcm1hdGlvbjolMEElMEFjb21saW5rL2Rpc3QvZXNtL2NvbWxpbmsubWpzOiUwQSAgKCoqJTBBICAgKiBAbGljZW5zZSUwQSAgICogQ29weXJpZ2h0IDIwMTkgR29vZ2xlIExMQyUwQSAgICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjAlMEEgICAqKSUwQSovJTBBJzt6dChadCk7ZXhwb3J0e2VBIGFzIGNvbXByZXNzU3RyaW5naWZ5LHFBIGFzIGdldERlZmF1bHRXZWJXb3JrZXIsJCBhcyBnZXRQaXBlbGluZVdvcmtlclVybCxIQSBhcyBnZXRQaXBlbGluZXNCYXNlVXJsLFhuIGFzIGltYWdlVG9Kc29uLCRuIGFzIGpzb25Ub0ltYWdlLGVvIGFzIGpzb25Ub01lc2gscm8gYXMganNvblRvUG9seURhdGEsQW8gYXMgbWVzaFRvSnNvbix0QSBhcyBwYXJzZVN0cmluZ0RlY29tcHJlc3MsdG8gYXMgcG9seURhdGFUb0pzb24sbmcgYXMgc2V0RGVmYXVsdFdlYldvcmtlcix6dCBhcyBzZXRQaXBlbGluZVdvcmtlclVybCxaSSBhcyBzZXRQaXBlbGluZXNCYXNlVXJsLEtBIGFzIHZlcnNpb259OwovKiEgQnVuZGxlZCBsaWNlbnNlIGluZm9ybWF0aW9uOgoKY29tbGluay9kaXN0L2VzbS9jb21saW5rLm1qczoKICAoKioKICAgKiBAbGljZW5zZQogICAqIENvcHlyaWdodCAyMDE5IEdvb2dsZSBMTEMKICAgKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMAogICAqKQoqLwo=""" +default_js_module = """data:text/javascript;base64,dmFyIFh0PU9iamVjdC5kZWZpbmVQcm9wZXJ0eTt2YXIgJHQ9KEEsZSk9Pntmb3IodmFyIHQgaW4gZSlYdChBLHQse2dldDplW3RdLGVudW1lcmFibGU6ITB9KX07dmFyIEFyPSIzLjQuMCIsS0E9QXI7dmFyIGVyPXtJbnQ4OiJpbnQ4IixVSW50ODoidWludDgiLEludDE2OiJpbnQxNiIsVUludDE2OiJ1aW50MTYiLEludDMyOiJpbnQzMiIsVUludDMyOiJ1aW50MzIiLEludDY0OiJpbnQ2NCIsVUludDY0OiJ1aW50NjQiLFNpemVWYWx1ZVR5cGU6InVpbnQ2NCIsSWRlbnRpZmllclR5cGU6InVpbnQ2NCIsSW5kZXhWYWx1ZVR5cGU6ImludDY0IixPZmZzZXRWYWx1ZVR5cGU6ImludDY0In0sRD1lcjt2YXIgdHI9e0Zsb2F0MzI6ImZsb2F0MzIiLEZsb2F0NjQ6ImZsb2F0NjQiLFNwYWNlUHJlY2lzaW9uVHlwZToiZmxvYXQ2NCJ9LEY9dHI7ZnVuY3Rpb24gcnIoQSxlKXtsZXQgdD1udWxsO3N3aXRjaChBKXtjYXNlIEQuVUludDg6e3Q9bmV3IFVpbnQ4QXJyYXkoZSk7YnJlYWt9Y2FzZSBELkludDg6e3Q9bmV3IEludDhBcnJheShlKTticmVha31jYXNlIEQuVUludDE2Ont0PW5ldyBVaW50MTZBcnJheShlKTticmVha31jYXNlIEQuSW50MTY6e3Q9bmV3IEludDE2QXJyYXkoZSk7YnJlYWt9Y2FzZSBELlVJbnQzMjp7dD1uZXcgVWludDMyQXJyYXkoZSk7YnJlYWt9Y2FzZSBELkludDMyOnt0PW5ldyBJbnQzMkFycmF5KGUpO2JyZWFrfWNhc2UgRC5VSW50NjQ6e3R5cGVvZiBnbG9iYWxUaGlzLkJpZ1VpbnQ2NEFycmF5PT0iZnVuY3Rpb24iP3Q9bmV3IEJpZ1VpbnQ2NEFycmF5KGUpOnQ9bmV3IFVpbnQ4QXJyYXkoZSk7YnJlYWt9Y2FzZSBELkludDY0Ont0eXBlb2YgZ2xvYmFsVGhpcy5CaWdJbnQ2NEFycmF5PT0iZnVuY3Rpb24iP3Q9bmV3IEJpZ0ludDY0QXJyYXkoZSk6dD1uZXcgVWludDhBcnJheShlKTticmVha31jYXNlIEYuRmxvYXQzMjp7dD1uZXcgRmxvYXQzMkFycmF5KGUpO2JyZWFrfWNhc2UgRi5GbG9hdDY0Ont0PW5ldyBGbG9hdDY0QXJyYXkoZSk7YnJlYWt9Y2FzZSJudWxsIjp7dD1udWxsO2JyZWFrfWNhc2UgbnVsbDp7dD1udWxsO2JyZWFrfWRlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKCJUeXBlIGlzIG5vdCBzdXBwb3J0ZWQgYXMgYSBUeXBlZEFycmF5Iil9cmV0dXJuIHR9dmFyIGs9cnI7dmFyIG5yPXtVbmtub3duOiJVbmtub3duIixTY2FsYXI6IlNjYWxhciIsUkdCOiJSR0IiLFJHQkE6IlJHQkEiLE9mZnNldDoiT2Zmc2V0IixWZWN0b3I6IlZlY3RvciIsUG9pbnQ6IlBvaW50IixDb3ZhcmlhbnRWZWN0b3I6IkNvdmFyaWFudFZlY3RvciIsU3ltbWV0cmljU2Vjb25kUmFua1RlbnNvcjoiU3ltbWV0cmljU2Vjb25kUmFua1RlbnNvciIsRGlmZnVzaW9uVGVuc29yM0Q6IkRpZmZ1c2lvblRlbnNvcjNEIixDb21wbGV4OiJDb21wbGV4IixGaXhlZEFycmF5OiJGaXhlZEFycmF5IixBcnJheToiQXJyYXkiLE1hdHJpeDoiTWF0cml4IixWYXJpYWJsZUxlbmd0aFZlY3RvcjoiVmFyaWFibGVMZW5ndGhWZWN0b3IiLFZhcmlhYmxlU2l6ZU1hdHJpeDoiVmFyaWFibGVTaXplTWF0cml4In0sTz1ucjt2YXIgV0E9Y2xhc3N7ZGltZW5zaW9uO2NvbXBvbmVudFR5cGU7cGl4ZWxUeXBlO2NvbXBvbmVudHM7Y29uc3RydWN0b3IoZT0yLHQ9RC5VSW50OCxyPU8uU2NhbGFyLG49MSl7dGhpcy5kaW1lbnNpb249ZSx0aGlzLmNvbXBvbmVudFR5cGU9dCx0aGlzLnBpeGVsVHlwZT1yLHRoaXMuY29tcG9uZW50cz1ufX0seGU9V0E7ZnVuY3Rpb24gb3IoQSxlLHQscixuKXtBW3IrdCplXT1ufXZhciBMZT1vcjt2YXIgdkE9Y2xhc3N7aW1hZ2VUeXBlO25hbWU9IkltYWdlIjtvcmlnaW47c3BhY2luZztkaXJlY3Rpb247c2l6ZTttZXRhZGF0YTtkYXRhO2NvbnN0cnVjdG9yKGU9bmV3IHhlKXt0aGlzLmltYWdlVHlwZT1lO2xldCB0PWUuZGltZW5zaW9uO3RoaXMub3JpZ2luPW5ldyBBcnJheSh0KSx0aGlzLm9yaWdpbi5maWxsKDApLHRoaXMuc3BhY2luZz1uZXcgQXJyYXkodCksdGhpcy5zcGFjaW5nLmZpbGwoMSksdGhpcy5kaXJlY3Rpb249bmV3IEZsb2F0NjRBcnJheSh0KnQpLHRoaXMuZGlyZWN0aW9uLmZpbGwoMCk7Zm9yKGxldCByPTA7cjx0O3IrKylMZSh0aGlzLmRpcmVjdGlvbix0LHIsciwxKTt0aGlzLnNpemU9bmV3IEFycmF5KHQpLHRoaXMuc2l6ZS5maWxsKDApLHRoaXMubWV0YWRhdGE9bmV3IE1hcCx0aGlzLmRhdGE9bnVsbH19LGpBPXZBO3ZhciBfQT1jbGFzc3tkaW1lbnNpb247cG9pbnRDb21wb25lbnRUeXBlO3BvaW50UGl4ZWxDb21wb25lbnRUeXBlO3BvaW50UGl4ZWxUeXBlO3BvaW50UGl4ZWxDb21wb25lbnRzO2NlbGxDb21wb25lbnRUeXBlO2NlbGxQaXhlbENvbXBvbmVudFR5cGU7Y2VsbFBpeGVsVHlwZTtjZWxsUGl4ZWxDb21wb25lbnRzO2NvbnN0cnVjdG9yKGU9Mix0PUYuRmxvYXQzMixyPUYuRmxvYXQzMixuPU8uU2NhbGFyLG89MSxpPUQuSW50MzIsZz1GLkZsb2F0MzIsQz1PLlNjYWxhcixjPTEpe3RoaXMuZGltZW5zaW9uPWUsdGhpcy5wb2ludENvbXBvbmVudFR5cGU9dCx0aGlzLnBvaW50UGl4ZWxDb21wb25lbnRUeXBlPXIsdGhpcy5wb2ludFBpeGVsVHlwZT1uLHRoaXMucG9pbnRQaXhlbENvbXBvbmVudHM9byx0aGlzLmNlbGxDb21wb25lbnRUeXBlPWksdGhpcy5jZWxsUGl4ZWxDb21wb25lbnRUeXBlPWcsdGhpcy5jZWxsUGl4ZWxUeXBlPUMsdGhpcy5jZWxsUGl4ZWxDb21wb25lbnRzPWN9fSxHZT1fQTt2YXIgekE9Y2xhc3N7bWVzaFR5cGU7bmFtZT0iTWVzaCI7bnVtYmVyT2ZQb2ludHM7cG9pbnRzO251bWJlck9mUG9pbnRQaXhlbHM7cG9pbnREYXRhO251bWJlck9mQ2VsbHM7Y2VsbHM7Y2VsbEJ1ZmZlclNpemU7bnVtYmVyT2ZDZWxsUGl4ZWxzO2NlbGxEYXRhO2NvbnN0cnVjdG9yKGU9bmV3IEdlKXt0aGlzLm1lc2hUeXBlPWUsdGhpcy5uYW1lPSJNZXNoIix0aGlzLm51bWJlck9mUG9pbnRzPTAsdGhpcy5wb2ludHM9bnVsbCx0aGlzLm51bWJlck9mUG9pbnRQaXhlbHM9MCx0aGlzLnBvaW50RGF0YT1udWxsLHRoaXMubnVtYmVyT2ZDZWxscz0wLHRoaXMuY2VsbEJ1ZmZlclNpemU9MCx0aGlzLmNlbGxzPW51bGwsdGhpcy5udW1iZXJPZkNlbGxQaXhlbHM9MCx0aGlzLmNlbGxEYXRhPW51bGx9fSxWQT16QTt2YXIgWkE9Y2xhc3N7cG9pbnRQaXhlbENvbXBvbmVudFR5cGU7cG9pbnRQaXhlbFR5cGU7cG9pbnRQaXhlbENvbXBvbmVudHM7Y2VsbFBpeGVsQ29tcG9uZW50VHlwZTtjZWxsUGl4ZWxUeXBlO2NlbGxQaXhlbENvbXBvbmVudHM7Y29uc3RydWN0b3IoZT1GLkZsb2F0MzIsdD1PLlNjYWxhcixyPTEsbj1GLkZsb2F0MzIsbz1PLlNjYWxhcixpPTEpe3RoaXMucG9pbnRQaXhlbENvbXBvbmVudFR5cGU9ZSx0aGlzLnBvaW50UGl4ZWxUeXBlPXQsdGhpcy5wb2ludFBpeGVsQ29tcG9uZW50cz1yLHRoaXMuY2VsbFBpeGVsQ29tcG9uZW50VHlwZT1uLHRoaXMuY2VsbFBpeGVsVHlwZT1vLHRoaXMuY2VsbFBpeGVsQ29tcG9uZW50cz1pfX0sT2U9WkE7dmFyIFhBPWNsYXNze3BvbHlEYXRhVHlwZTtuYW1lPSJQb2x5RGF0YSI7bnVtYmVyT2ZQb2ludHM7cG9pbnRzO3ZlcnRpY2VzQnVmZmVyU2l6ZTt2ZXJ0aWNlcztsaW5lc0J1ZmZlclNpemU7bGluZXM7cG9seWdvbnNCdWZmZXJTaXplO3BvbHlnb25zO3RyaWFuZ2xlU3RyaXBzQnVmZmVyU2l6ZTt0cmlhbmdsZVN0cmlwcztudW1iZXJPZlBvaW50UGl4ZWxzO3BvaW50RGF0YTtudW1iZXJPZkNlbGxQaXhlbHM7Y2VsbERhdGE7Y29uc3RydWN0b3IoZT1uZXcgT2Upe3RoaXMucG9seURhdGFUeXBlPWUsdGhpcy5wb2x5RGF0YVR5cGU9ZSx0aGlzLm5hbWU9IlBvbHlEYXRhIix0aGlzLm51bWJlck9mUG9pbnRzPTAsdGhpcy5wb2ludHM9bmV3IEZsb2F0MzJBcnJheSx0aGlzLnZlcnRpY2VzQnVmZmVyU2l6ZT0wLHRoaXMudmVydGljZXM9bnVsbCx0aGlzLmxpbmVzQnVmZmVyU2l6ZT0wLHRoaXMubGluZXM9bnVsbCx0aGlzLnBvbHlnb25zQnVmZmVyU2l6ZT0wLHRoaXMucG9seWdvbnM9bnVsbCx0aGlzLnRyaWFuZ2xlU3RyaXBzQnVmZmVyU2l6ZT0wLHRoaXMudHJpYW5nbGVTdHJpcHM9bnVsbCx0aGlzLm51bWJlck9mUG9pbnRQaXhlbHM9MCx0aGlzLnBvaW50RGF0YT1udWxsLHRoaXMubnVtYmVyT2ZDZWxsUGl4ZWxzPTAsdGhpcy5jZWxsRGF0YT1udWxsfX0sJEE9WEE7dmFyIGlyPXtUZXh0RmlsZToiVGV4dEZpbGUiLEJpbmFyeUZpbGU6IkJpbmFyeUZpbGUiLFRleHRTdHJlYW06IlRleHRTdHJlYW0iLEJpbmFyeVN0cmVhbToiQmluYXJ5U3RyZWFtIixJbWFnZToiSW1hZ2UiLFBvaW50U2V0OiJQb2ludFNldCIsTWVzaDoiTWVzaCIsUG9seURhdGE6IlBvbHlEYXRhIixUcmFuc2Zvcm1MaXN0OiJUcmFuc2Zvcm1MaXN0IixKc29uQ29tcGF0aWJsZToiSnNvbkNvbXBhdGlibGUifSxkPWlyO3ZhciBNZT1TeW1ib2woIkNvbWxpbmsucHJveHkiKSxzcj1TeW1ib2woIkNvbWxpbmsuZW5kcG9pbnQiKSx0ZT1TeW1ib2woIkNvbWxpbmsucmVsZWFzZVByb3h5IiksQWU9U3ltYm9sKCJDb21saW5rLmZpbmFsaXplciIpLFFBPVN5bWJvbCgiQ29tbGluay50aHJvd24iKSxIZT1BPT50eXBlb2YgQT09Im9iamVjdCImJkEhPT1udWxsfHx0eXBlb2YgQT09ImZ1bmN0aW9uIixhcj17Y2FuSGFuZGxlOkE9PkhlKEEpJiZBW01lXSxzZXJpYWxpemUoQSl7bGV0e3BvcnQxOmUscG9ydDI6dH09bmV3IE1lc3NhZ2VDaGFubmVsO3JldHVybiBZZShBLGUpLFt0LFt0XV19LGRlc2VyaWFsaXplKEEpe3JldHVybiBBLnN0YXJ0KCkscmUoQSl9fSxJcj17Y2FuSGFuZGxlOkE9PkhlKEEpJiZRQSBpbiBBLHNlcmlhbGl6ZSh7dmFsdWU6QX0pe2xldCBlO3JldHVybiBBIGluc3RhbmNlb2YgRXJyb3I/ZT17aXNFcnJvcjohMCx2YWx1ZTp7bWVzc2FnZTpBLm1lc3NhZ2UsbmFtZTpBLm5hbWUsc3RhY2s6QS5zdGFja319OmU9e2lzRXJyb3I6ITEsdmFsdWU6QX0sW2UsW11dfSxkZXNlcmlhbGl6ZShBKXt0aHJvdyBBLmlzRXJyb3I/T2JqZWN0LmFzc2lnbihuZXcgRXJyb3IoQS52YWx1ZS5tZXNzYWdlKSxBLnZhbHVlKTpBLnZhbHVlfX0scWU9bmV3IE1hcChbWyJwcm94eSIsYXJdLFsidGhyb3ciLElyXV0pO2Z1bmN0aW9uIGdyKEEsZSl7Zm9yKGxldCB0IG9mIEEpaWYoZT09PXR8fHQ9PT0iKiJ8fHQgaW5zdGFuY2VvZiBSZWdFeHAmJnQudGVzdChlKSlyZXR1cm4hMDtyZXR1cm4hMX1mdW5jdGlvbiBZZShBLGU9Z2xvYmFsVGhpcyx0PVsiKiJdKXtlLmFkZEV2ZW50TGlzdGVuZXIoIm1lc3NhZ2UiLGZ1bmN0aW9uIHIobil7aWYoIW58fCFuLmRhdGEpcmV0dXJuO2lmKCFncih0LG4ub3JpZ2luKSl7Y29uc29sZS53YXJuKGBJbnZhbGlkIG9yaWdpbiAnJHtuLm9yaWdpbn0nIGZvciBjb21saW5rIHByb3h5YCk7cmV0dXJufWxldHtpZDpvLHR5cGU6aSxwYXRoOmd9PU9iamVjdC5hc3NpZ24oe3BhdGg6W119LG4uZGF0YSksQz0obi5kYXRhLmFyZ3VtZW50TGlzdHx8W10pLm1hcChZKSxjO3RyeXtsZXQgYT1nLnNsaWNlKDAsLTEpLnJlZHVjZSgoZixsKT0+ZltsXSxBKSxJPWcucmVkdWNlKChmLGwpPT5mW2xdLEEpO3N3aXRjaChpKXtjYXNlIkdFVCI6Yz1JO2JyZWFrO2Nhc2UiU0VUIjphW2cuc2xpY2UoLTEpWzBdXT1ZKG4uZGF0YS52YWx1ZSksYz0hMDticmVhaztjYXNlIkFQUExZIjpjPUkuYXBwbHkoYSxDKTticmVhaztjYXNlIkNPTlNUUlVDVCI6e2xldCBmPW5ldyBJKC4uLkMpO2M9dXIoZil9YnJlYWs7Y2FzZSJFTkRQT0lOVCI6e2xldHtwb3J0MTpmLHBvcnQyOmx9PW5ldyBNZXNzYWdlQ2hhbm5lbDtZZShBLGwpLGM9bmUoZixbZl0pfWJyZWFrO2Nhc2UiUkVMRUFTRSI6Yz12b2lkIDA7YnJlYWs7ZGVmYXVsdDpyZXR1cm59fWNhdGNoKGEpe2M9e3ZhbHVlOmEsW1FBXTowfX1Qcm9taXNlLnJlc29sdmUoYykuY2F0Y2goYT0+KHt2YWx1ZTphLFtRQV06MH0pKS50aGVuKGE9PntsZXRbSSxmXT1tQShhKTtlLnBvc3RNZXNzYWdlKE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSxJKSx7aWQ6b30pLGYpLGk9PT0iUkVMRUFTRSImJihlLnJlbW92ZUV2ZW50TGlzdGVuZXIoIm1lc3NhZ2UiLHIpLEtlKGUpLEFlIGluIEEmJnR5cGVvZiBBW0FlXT09ImZ1bmN0aW9uIiYmQVtBZV0oKSl9KS5jYXRjaChhPT57bGV0W0ksZl09bUEoe3ZhbHVlOm5ldyBUeXBlRXJyb3IoIlVuc2VyaWFsaXphYmxlIHJldHVybiB2YWx1ZSIpLFtRQV06MH0pO2UucG9zdE1lc3NhZ2UoT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LEkpLHtpZDpvfSksZil9KX0pLGUuc3RhcnQmJmUuc3RhcnQoKX1mdW5jdGlvbiBscihBKXtyZXR1cm4gQS5jb25zdHJ1Y3Rvci5uYW1lPT09Ik1lc3NhZ2VQb3J0In1mdW5jdGlvbiBLZShBKXtscihBKSYmQS5jbG9zZSgpfWZ1bmN0aW9uIHJlKEEsZSl7cmV0dXJuIGVlKEEsW10sZSl9ZnVuY3Rpb24gRUEoQSl7aWYoQSl0aHJvdyBuZXcgRXJyb3IoIlByb3h5IGhhcyBiZWVuIHJlbGVhc2VkIGFuZCBpcyBub3QgdXNlYWJsZSIpfWZ1bmN0aW9uIFdlKEEpe3JldHVybiBXKEEse3R5cGU6IlJFTEVBU0UifSkudGhlbigoKT0+e0tlKEEpfSl9dmFyIHBBPW5ldyBXZWFrTWFwLGRBPSJGaW5hbGl6YXRpb25SZWdpc3RyeSJpbiBnbG9iYWxUaGlzJiZuZXcgRmluYWxpemF0aW9uUmVnaXN0cnkoQT0+e2xldCBlPShwQS5nZXQoQSl8fDApLTE7cEEuc2V0KEEsZSksZT09PTAmJldlKEEpfSk7ZnVuY3Rpb24gY3IoQSxlKXtsZXQgdD0ocEEuZ2V0KGUpfHwwKSsxO3BBLnNldChlLHQpLGRBJiZkQS5yZWdpc3RlcihBLGUsQSl9ZnVuY3Rpb24gQ3IoQSl7ZEEmJmRBLnVucmVnaXN0ZXIoQSl9ZnVuY3Rpb24gZWUoQSxlPVtdLHQ9ZnVuY3Rpb24oKXt9KXtsZXQgcj0hMSxuPW5ldyBQcm94eSh0LHtnZXQobyxpKXtpZihFQShyKSxpPT09dGUpcmV0dXJuKCk9PntDcihuKSxXZShBKSxyPSEwfTtpZihpPT09InRoZW4iKXtpZihlLmxlbmd0aD09PTApcmV0dXJue3RoZW46KCk9Pm59O2xldCBnPVcoQSx7dHlwZToiR0VUIixwYXRoOmUubWFwKEM9PkMudG9TdHJpbmcoKSl9KS50aGVuKFkpO3JldHVybiBnLnRoZW4uYmluZChnKX1yZXR1cm4gZWUoQSxbLi4uZSxpXSl9LHNldChvLGksZyl7RUEocik7bGV0W0MsY109bUEoZyk7cmV0dXJuIFcoQSx7dHlwZToiU0VUIixwYXRoOlsuLi5lLGldLm1hcChhPT5hLnRvU3RyaW5nKCkpLHZhbHVlOkN9LGMpLnRoZW4oWSl9LGFwcGx5KG8saSxnKXtFQShyKTtsZXQgQz1lW2UubGVuZ3RoLTFdO2lmKEM9PT1zcilyZXR1cm4gVyhBLHt0eXBlOiJFTkRQT0lOVCJ9KS50aGVuKFkpO2lmKEM9PT0iYmluZCIpcmV0dXJuIGVlKEEsZS5zbGljZSgwLC0xKSk7bGV0W2MsYV09SmUoZyk7cmV0dXJuIFcoQSx7dHlwZToiQVBQTFkiLHBhdGg6ZS5tYXAoST0+SS50b1N0cmluZygpKSxhcmd1bWVudExpc3Q6Y30sYSkudGhlbihZKX0sY29uc3RydWN0KG8saSl7RUEocik7bGV0W2csQ109SmUoaSk7cmV0dXJuIFcoQSx7dHlwZToiQ09OU1RSVUNUIixwYXRoOmUubWFwKGM9PmMudG9TdHJpbmcoKSksYXJndW1lbnRMaXN0Omd9LEMpLnRoZW4oWSl9fSk7cmV0dXJuIGNyKG4sQSksbn1mdW5jdGlvbiBCcihBKXtyZXR1cm4gQXJyYXkucHJvdG90eXBlLmNvbmNhdC5hcHBseShbXSxBKX1mdW5jdGlvbiBKZShBKXtsZXQgZT1BLm1hcChtQSk7cmV0dXJuW2UubWFwKHQ9PnRbMF0pLEJyKGUubWFwKHQ9PnRbMV0pKV19dmFyIHZlPW5ldyBXZWFrTWFwO2Z1bmN0aW9uIG5lKEEsZSl7cmV0dXJuIHZlLnNldChBLGUpLEF9ZnVuY3Rpb24gdXIoQSl7cmV0dXJuIE9iamVjdC5hc3NpZ24oQSx7W01lXTohMH0pfWZ1bmN0aW9uIG1BKEEpe2ZvcihsZXRbZSx0XW9mIHFlKWlmKHQuY2FuSGFuZGxlKEEpKXtsZXRbcixuXT10LnNlcmlhbGl6ZShBKTtyZXR1cm5be3R5cGU6IkhBTkRMRVIiLG5hbWU6ZSx2YWx1ZTpyfSxuXX1yZXR1cm5be3R5cGU6IlJBVyIsdmFsdWU6QX0sdmUuZ2V0KEEpfHxbXV19ZnVuY3Rpb24gWShBKXtzd2l0Y2goQS50eXBlKXtjYXNlIkhBTkRMRVIiOnJldHVybiBxZS5nZXQoQS5uYW1lKS5kZXNlcmlhbGl6ZShBLnZhbHVlKTtjYXNlIlJBVyI6cmV0dXJuIEEudmFsdWV9fWZ1bmN0aW9uIFcoQSxlLHQpe3JldHVybiBuZXcgUHJvbWlzZShyPT57bGV0IG49ZnIoKTtBLmFkZEV2ZW50TGlzdGVuZXIoIm1lc3NhZ2UiLGZ1bmN0aW9uIG8oaSl7IWkuZGF0YXx8IWkuZGF0YS5pZHx8aS5kYXRhLmlkIT09bnx8KEEucmVtb3ZlRXZlbnRMaXN0ZW5lcigibWVzc2FnZSIsbykscihpLmRhdGEpKX0pLEEuc3RhcnQmJkEuc3RhcnQoKSxBLnBvc3RNZXNzYWdlKE9iamVjdC5hc3NpZ24oe2lkOm59LGUpLHQpfSl9ZnVuY3Rpb24gZnIoKXtyZXR1cm4gbmV3IEFycmF5KDQpLmZpbGwoMCkubWFwKCgpPT5NYXRoLmZsb29yKE1hdGgucmFuZG9tKCkqTnVtYmVyLk1BWF9TQUZFX0lOVEVHRVIpLnRvU3RyaW5nKDE2KSkuam9pbigiLSIpfWZ1bmN0aW9uIHJBKEEsZSl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIEEuYXBwbHkoZSxhcmd1bWVudHMpfX12YXJ7dG9TdHJpbmc6RXJ9PU9iamVjdC5wcm90b3R5cGUse2dldFByb3RvdHlwZU9mOnNlfT1PYmplY3QsaEE9KEE9PmU9PntsZXQgdD1Fci5jYWxsKGUpO3JldHVybiBBW3RdfHwoQVt0XT10LnNsaWNlKDgsLTEpLnRvTG93ZXJDYXNlKCkpfSkoT2JqZWN0LmNyZWF0ZShudWxsKSksVD1BPT4oQT1BLnRvTG93ZXJDYXNlKCksZT0+aEEoZSk9PT1BKSx3QT1BPT5lPT50eXBlb2YgZT09PUEse2lzQXJyYXk6dn09QXJyYXksbkE9d0EoInVuZGVmaW5lZCIpO2Z1bmN0aW9uIFFyKEEpe3JldHVybiBBIT09bnVsbCYmIW5BKEEpJiZBLmNvbnN0cnVjdG9yIT09bnVsbCYmIW5BKEEuY29uc3RydWN0b3IpJiZVKEEuY29uc3RydWN0b3IuaXNCdWZmZXIpJiZBLmNvbnN0cnVjdG9yLmlzQnVmZmVyKEEpfXZhciBWZT1UKCJBcnJheUJ1ZmZlciIpO2Z1bmN0aW9uIHByKEEpe2xldCBlO3JldHVybiB0eXBlb2YgQXJyYXlCdWZmZXI8InUiJiZBcnJheUJ1ZmZlci5pc1ZpZXc/ZT1BcnJheUJ1ZmZlci5pc1ZpZXcoQSk6ZT1BJiZBLmJ1ZmZlciYmVmUoQS5idWZmZXIpLGV9dmFyIGRyPXdBKCJzdHJpbmciKSxVPXdBKCJmdW5jdGlvbiIpLFplPXdBKCJudW1iZXIiKSxEQT1BPT5BIT09bnVsbCYmdHlwZW9mIEE9PSJvYmplY3QiLG1yPUE9PkE9PT0hMHx8QT09PSExLHlBPUE9PntpZihoQShBKSE9PSJvYmplY3QiKXJldHVybiExO2xldCBlPXNlKEEpO3JldHVybihlPT09bnVsbHx8ZT09PU9iamVjdC5wcm90b3R5cGV8fE9iamVjdC5nZXRQcm90b3R5cGVPZihlKT09PW51bGwpJiYhKFN5bWJvbC50b1N0cmluZ1RhZyBpbiBBKSYmIShTeW1ib2wuaXRlcmF0b3IgaW4gQSl9LHlyPVQoIkRhdGUiKSxocj1UKCJGaWxlIiksd3I9VCgiQmxvYiIpLERyPVQoIkZpbGVMaXN0IiksU3I9QT0+REEoQSkmJlUoQS5waXBlKSxicj1BPT57bGV0IGU7cmV0dXJuIEEmJih0eXBlb2YgRm9ybURhdGE9PSJmdW5jdGlvbiImJkEgaW5zdGFuY2VvZiBGb3JtRGF0YXx8VShBLmFwcGVuZCkmJigoZT1oQShBKSk9PT0iZm9ybWRhdGEifHxlPT09Im9iamVjdCImJlUoQS50b1N0cmluZykmJkEudG9TdHJpbmcoKT09PSJbb2JqZWN0IEZvcm1EYXRhXSIpKX0sUnI9VCgiVVJMU2VhcmNoUGFyYW1zIiksW2tyLEZyLFVyLE5yXT1bIlJlYWRhYmxlU3RyZWFtIiwiUmVxdWVzdCIsIlJlc3BvbnNlIiwiSGVhZGVycyJdLm1hcChUKSxUcj1BPT5BLnRyaW0/QS50cmltKCk6QS5yZXBsYWNlKC9eW1xzXHVGRUZGXHhBMF0rfFtcc1x1RkVGRlx4QTBdKyQvZywiIik7ZnVuY3Rpb24gb0EoQSxlLHthbGxPd25LZXlzOnQ9ITF9PXt9KXtpZihBPT09bnVsbHx8dHlwZW9mIEE+InUiKXJldHVybjtsZXQgcixuO2lmKHR5cGVvZiBBIT0ib2JqZWN0IiYmKEE9W0FdKSx2KEEpKWZvcihyPTAsbj1BLmxlbmd0aDtyPG47cisrKWUuY2FsbChudWxsLEFbcl0scixBKTtlbHNle2xldCBvPXQ/T2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoQSk6T2JqZWN0LmtleXMoQSksaT1vLmxlbmd0aCxnO2ZvcihyPTA7cjxpO3IrKylnPW9bcl0sZS5jYWxsKG51bGwsQVtnXSxnLEEpfX1mdW5jdGlvbiBYZShBLGUpe2U9ZS50b0xvd2VyQ2FzZSgpO2xldCB0PU9iamVjdC5rZXlzKEEpLHI9dC5sZW5ndGgsbjtmb3IoO3ItLSA+MDspaWYobj10W3JdLGU9PT1uLnRvTG93ZXJDYXNlKCkpcmV0dXJuIG47cmV0dXJuIG51bGx9dmFyIEs9dHlwZW9mIGdsb2JhbFRoaXM8InUiP2dsb2JhbFRoaXM6dHlwZW9mIHNlbGY8InUiP3NlbGY6dHlwZW9mIHdpbmRvdzwidSI/d2luZG93Omdsb2JhbCwkZT1BPT4hbkEoQSkmJkEhPT1LO2Z1bmN0aW9uIGllKCl7bGV0e2Nhc2VsZXNzOkF9PSRlKHRoaXMpJiZ0aGlzfHx7fSxlPXt9LHQ9KHIsbik9PntsZXQgbz1BJiZYZShlLG4pfHxuO3lBKGVbb10pJiZ5QShyKT9lW29dPWllKGVbb10scik6eUEocik/ZVtvXT1pZSh7fSxyKTp2KHIpP2Vbb109ci5zbGljZSgpOmVbb109cn07Zm9yKGxldCByPTAsbj1hcmd1bWVudHMubGVuZ3RoO3I8bjtyKyspYXJndW1lbnRzW3JdJiZvQShhcmd1bWVudHNbcl0sdCk7cmV0dXJuIGV9dmFyIFByPShBLGUsdCx7YWxsT3duS2V5czpyfT17fSk9PihvQShlLChuLG8pPT57dCYmVShuKT9BW29dPXJBKG4sdCk6QVtvXT1ufSx7YWxsT3duS2V5czpyfSksQSkseHI9QT0+KEEuY2hhckNvZGVBdCgwKT09PTY1Mjc5JiYoQT1BLnNsaWNlKDEpKSxBKSxMcj0oQSxlLHQscik9PntBLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKGUucHJvdG90eXBlLHIpLEEucHJvdG90eXBlLmNvbnN0cnVjdG9yPUEsT2JqZWN0LmRlZmluZVByb3BlcnR5KEEsInN1cGVyIix7dmFsdWU6ZS5wcm90b3R5cGV9KSx0JiZPYmplY3QuYXNzaWduKEEucHJvdG90eXBlLHQpfSxHcj0oQSxlLHQscik9PntsZXQgbixvLGksZz17fTtpZihlPWV8fHt9LEE9PW51bGwpcmV0dXJuIGU7ZG97Zm9yKG49T2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoQSksbz1uLmxlbmd0aDtvLS0gPjA7KWk9bltvXSwoIXJ8fHIoaSxBLGUpKSYmIWdbaV0mJihlW2ldPUFbaV0sZ1tpXT0hMCk7QT10IT09ITEmJnNlKEEpfXdoaWxlKEEmJighdHx8dChBLGUpKSYmQSE9PU9iamVjdC5wcm90b3R5cGUpO3JldHVybiBlfSxPcj0oQSxlLHQpPT57QT1TdHJpbmcoQSksKHQ9PT12b2lkIDB8fHQ+QS5sZW5ndGgpJiYodD1BLmxlbmd0aCksdC09ZS5sZW5ndGg7bGV0IHI9QS5pbmRleE9mKGUsdCk7cmV0dXJuIHIhPT0tMSYmcj09PXR9LEpyPUE9PntpZighQSlyZXR1cm4gbnVsbDtpZih2KEEpKXJldHVybiBBO2xldCBlPUEubGVuZ3RoO2lmKCFaZShlKSlyZXR1cm4gbnVsbDtsZXQgdD1uZXcgQXJyYXkoZSk7Zm9yKDtlLS0gPjA7KXRbZV09QVtlXTtyZXR1cm4gdH0sTXI9KEE9PmU9PkEmJmUgaW5zdGFuY2VvZiBBKSh0eXBlb2YgVWludDhBcnJheTwidSImJnNlKFVpbnQ4QXJyYXkpKSxIcj0oQSxlKT0+e2xldCByPShBJiZBW1N5bWJvbC5pdGVyYXRvcl0pLmNhbGwoQSksbjtmb3IoOyhuPXIubmV4dCgpKSYmIW4uZG9uZTspe2xldCBvPW4udmFsdWU7ZS5jYWxsKEEsb1swXSxvWzFdKX19LHFyPShBLGUpPT57bGV0IHQscj1bXTtmb3IoOyh0PUEuZXhlYyhlKSkhPT1udWxsOylyLnB1c2godCk7cmV0dXJuIHJ9LFlyPVQoIkhUTUxGb3JtRWxlbWVudCIpLEtyPUE9PkEudG9Mb3dlckNhc2UoKS5yZXBsYWNlKC9bLV9cc10oW2EtelxkXSkoXHcqKS9nLGZ1bmN0aW9uKHQscixuKXtyZXR1cm4gci50b1VwcGVyQ2FzZSgpK259KSxfZT0oKHtoYXNPd25Qcm9wZXJ0eTpBfSk9PihlLHQpPT5BLmNhbGwoZSx0KSkoT2JqZWN0LnByb3RvdHlwZSksV3I9VCgiUmVnRXhwIiksQXQ9KEEsZSk9PntsZXQgdD1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyhBKSxyPXt9O29BKHQsKG4sbyk9PntsZXQgaTsoaT1lKG4sbyxBKSkhPT0hMSYmKHJbb109aXx8bil9KSxPYmplY3QuZGVmaW5lUHJvcGVydGllcyhBLHIpfSx2cj1BPT57QXQoQSwoZSx0KT0+e2lmKFUoQSkmJlsiYXJndW1lbnRzIiwiY2FsbGVyIiwiY2FsbGVlIl0uaW5kZXhPZih0KSE9PS0xKXJldHVybiExO2xldCByPUFbdF07aWYoVShyKSl7aWYoZS5lbnVtZXJhYmxlPSExLCJ3cml0YWJsZSJpbiBlKXtlLndyaXRhYmxlPSExO3JldHVybn1lLnNldHx8KGUuc2V0PSgpPT57dGhyb3cgRXJyb3IoIkNhbiBub3QgcmV3cml0ZSByZWFkLW9ubHkgbWV0aG9kICciK3QrIiciKX0pfX0pfSxqcj0oQSxlKT0+e2xldCB0PXt9LHI9bj0+e24uZm9yRWFjaChvPT57dFtvXT0hMH0pfTtyZXR1cm4gdihBKT9yKEEpOnIoU3RyaW5nKEEpLnNwbGl0KGUpKSx0fSxfcj0oKT0+e30senI9KEEsZSk9PkEhPW51bGwmJk51bWJlci5pc0Zpbml0ZShBPStBKT9BOmUsb2U9ImFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6Iix6ZT0iMDEyMzQ1Njc4OSIsZXQ9e0RJR0lUOnplLEFMUEhBOm9lLEFMUEhBX0RJR0lUOm9lK29lLnRvVXBwZXJDYXNlKCkremV9LFZyPShBPTE2LGU9ZXQuQUxQSEFfRElHSVQpPT57bGV0IHQ9IiIse2xlbmd0aDpyfT1lO2Zvcig7QS0tOyl0Kz1lW01hdGgucmFuZG9tKCkqcnwwXTtyZXR1cm4gdH07ZnVuY3Rpb24gWnIoQSl7cmV0dXJuISEoQSYmVShBLmFwcGVuZCkmJkFbU3ltYm9sLnRvU3RyaW5nVGFnXT09PSJGb3JtRGF0YSImJkFbU3ltYm9sLml0ZXJhdG9yXSl9dmFyIFhyPUE9PntsZXQgZT1uZXcgQXJyYXkoMTApLHQ9KHIsbik9PntpZihEQShyKSl7aWYoZS5pbmRleE9mKHIpPj0wKXJldHVybjtpZighKCJ0b0pTT04iaW4gcikpe2Vbbl09cjtsZXQgbz12KHIpP1tdOnt9O3JldHVybiBvQShyLChpLGcpPT57bGV0IEM9dChpLG4rMSk7IW5BKEMpJiYob1tnXT1DKX0pLGVbbl09dm9pZCAwLG99fXJldHVybiByfTtyZXR1cm4gdChBLDApfSwkcj1UKCJBc3luY0Z1bmN0aW9uIiksQW49QT0+QSYmKERBKEEpfHxVKEEpKSYmVShBLnRoZW4pJiZVKEEuY2F0Y2gpLHR0PSgoQSxlKT0+QT9zZXRJbW1lZGlhdGU6ZT8oKHQscik9PihLLmFkZEV2ZW50TGlzdGVuZXIoIm1lc3NhZ2UiLCh7c291cmNlOm4sZGF0YTpvfSk9PntuPT09SyYmbz09PXQmJnIubGVuZ3RoJiZyLnNoaWZ0KCkoKX0sITEpLG49PntyLnB1c2gobiksSy5wb3N0TWVzc2FnZSh0LCIqIil9KSkoYGF4aW9zQCR7TWF0aC5yYW5kb20oKX1gLFtdKTp0PT5zZXRUaW1lb3V0KHQpKSh0eXBlb2Ygc2V0SW1tZWRpYXRlPT0iZnVuY3Rpb24iLFUoSy5wb3N0TWVzc2FnZSkpLGVuPXR5cGVvZiBxdWV1ZU1pY3JvdGFzazwidSI/cXVldWVNaWNyb3Rhc2suYmluZChLKTp0eXBlb2YgcHJvY2VzczwidSImJnByb2Nlc3MubmV4dFRpY2t8fHR0LHM9e2lzQXJyYXk6dixpc0FycmF5QnVmZmVyOlZlLGlzQnVmZmVyOlFyLGlzRm9ybURhdGE6YnIsaXNBcnJheUJ1ZmZlclZpZXc6cHIsaXNTdHJpbmc6ZHIsaXNOdW1iZXI6WmUsaXNCb29sZWFuOm1yLGlzT2JqZWN0OkRBLGlzUGxhaW5PYmplY3Q6eUEsaXNSZWFkYWJsZVN0cmVhbTprcixpc1JlcXVlc3Q6RnIsaXNSZXNwb25zZTpVcixpc0hlYWRlcnM6TnIsaXNVbmRlZmluZWQ6bkEsaXNEYXRlOnlyLGlzRmlsZTpocixpc0Jsb2I6d3IsaXNSZWdFeHA6V3IsaXNGdW5jdGlvbjpVLGlzU3RyZWFtOlNyLGlzVVJMU2VhcmNoUGFyYW1zOlJyLGlzVHlwZWRBcnJheTpNcixpc0ZpbGVMaXN0OkRyLGZvckVhY2g6b0EsbWVyZ2U6aWUsZXh0ZW5kOlByLHRyaW06VHIsc3RyaXBCT006eHIsaW5oZXJpdHM6THIsdG9GbGF0T2JqZWN0OkdyLGtpbmRPZjpoQSxraW5kT2ZUZXN0OlQsZW5kc1dpdGg6T3IsdG9BcnJheTpKcixmb3JFYWNoRW50cnk6SHIsbWF0Y2hBbGw6cXIsaXNIVE1MRm9ybTpZcixoYXNPd25Qcm9wZXJ0eTpfZSxoYXNPd25Qcm9wOl9lLHJlZHVjZURlc2NyaXB0b3JzOkF0LGZyZWV6ZU1ldGhvZHM6dnIsdG9PYmplY3RTZXQ6anIsdG9DYW1lbENhc2U6S3Isbm9vcDpfcix0b0Zpbml0ZU51bWJlcjp6cixmaW5kS2V5OlhlLGdsb2JhbDpLLGlzQ29udGV4dERlZmluZWQ6JGUsQUxQSEFCRVQ6ZXQsZ2VuZXJhdGVTdHJpbmc6VnIsaXNTcGVjQ29tcGxpYW50Rm9ybTpacix0b0pTT05PYmplY3Q6WHIsaXNBc3luY0ZuOiRyLGlzVGhlbmFibGU6QW4sc2V0SW1tZWRpYXRlOnR0LGFzYXA6ZW59O2Z1bmN0aW9uIGooQSxlLHQscixuKXtFcnJvci5jYWxsKHRoaXMpLEVycm9yLmNhcHR1cmVTdGFja1RyYWNlP0Vycm9yLmNhcHR1cmVTdGFja1RyYWNlKHRoaXMsdGhpcy5jb25zdHJ1Y3Rvcik6dGhpcy5zdGFjaz1uZXcgRXJyb3IoKS5zdGFjayx0aGlzLm1lc3NhZ2U9QSx0aGlzLm5hbWU9IkF4aW9zRXJyb3IiLGUmJih0aGlzLmNvZGU9ZSksdCYmKHRoaXMuY29uZmlnPXQpLHImJih0aGlzLnJlcXVlc3Q9ciksbiYmKHRoaXMucmVzcG9uc2U9bil9cy5pbmhlcml0cyhqLEVycm9yLHt0b0pTT046ZnVuY3Rpb24oKXtyZXR1cm57bWVzc2FnZTp0aGlzLm1lc3NhZ2UsbmFtZTp0aGlzLm5hbWUsZGVzY3JpcHRpb246dGhpcy5kZXNjcmlwdGlvbixudW1iZXI6dGhpcy5udW1iZXIsZmlsZU5hbWU6dGhpcy5maWxlTmFtZSxsaW5lTnVtYmVyOnRoaXMubGluZU51bWJlcixjb2x1bW5OdW1iZXI6dGhpcy5jb2x1bW5OdW1iZXIsc3RhY2s6dGhpcy5zdGFjayxjb25maWc6cy50b0pTT05PYmplY3QodGhpcy5jb25maWcpLGNvZGU6dGhpcy5jb2RlLHN0YXR1czp0aGlzLnJlc3BvbnNlJiZ0aGlzLnJlc3BvbnNlLnN0YXR1cz90aGlzLnJlc3BvbnNlLnN0YXR1czpudWxsfX19KTt2YXIgcnQ9ai5wcm90b3R5cGUsbnQ9e307WyJFUlJfQkFEX09QVElPTl9WQUxVRSIsIkVSUl9CQURfT1BUSU9OIiwiRUNPTk5BQk9SVEVEIiwiRVRJTUVET1VUIiwiRVJSX05FVFdPUksiLCJFUlJfRlJfVE9PX01BTllfUkVESVJFQ1RTIiwiRVJSX0RFUFJFQ0FURUQiLCJFUlJfQkFEX1JFU1BPTlNFIiwiRVJSX0JBRF9SRVFVRVNUIiwiRVJSX0NBTkNFTEVEIiwiRVJSX05PVF9TVVBQT1JUIiwiRVJSX0lOVkFMSURfVVJMIl0uZm9yRWFjaChBPT57bnRbQV09e3ZhbHVlOkF9fSk7T2JqZWN0LmRlZmluZVByb3BlcnRpZXMoaixudCk7T2JqZWN0LmRlZmluZVByb3BlcnR5KHJ0LCJpc0F4aW9zRXJyb3IiLHt2YWx1ZTohMH0pO2ouZnJvbT0oQSxlLHQscixuLG8pPT57bGV0IGk9T2JqZWN0LmNyZWF0ZShydCk7cmV0dXJuIHMudG9GbGF0T2JqZWN0KEEsaSxmdW5jdGlvbihDKXtyZXR1cm4gQyE9PUVycm9yLnByb3RvdHlwZX0sZz0+ZyE9PSJpc0F4aW9zRXJyb3IiKSxqLmNhbGwoaSxBLm1lc3NhZ2UsZSx0LHIsbiksaS5jYXVzZT1BLGkubmFtZT1BLm5hbWUsbyYmT2JqZWN0LmFzc2lnbihpLG8pLGl9O3ZhciBRPWo7dmFyIFNBPW51bGw7ZnVuY3Rpb24gYWUoQSl7cmV0dXJuIHMuaXNQbGFpbk9iamVjdChBKXx8cy5pc0FycmF5KEEpfWZ1bmN0aW9uIGl0KEEpe3JldHVybiBzLmVuZHNXaXRoKEEsIltdIik/QS5zbGljZSgwLC0yKTpBfWZ1bmN0aW9uIG90KEEsZSx0KXtyZXR1cm4gQT9BLmNvbmNhdChlKS5tYXAoZnVuY3Rpb24obixvKXtyZXR1cm4gbj1pdChuKSwhdCYmbz8iWyIrbisiXSI6bn0pLmpvaW4odD8iLiI6IiIpOmV9ZnVuY3Rpb24gdG4oQSl7cmV0dXJuIHMuaXNBcnJheShBKSYmIUEuc29tZShhZSl9dmFyIHJuPXMudG9GbGF0T2JqZWN0KHMse30sbnVsbCxmdW5jdGlvbihlKXtyZXR1cm4vXmlzW0EtWl0vLnRlc3QoZSl9KTtmdW5jdGlvbiBubihBLGUsdCl7aWYoIXMuaXNPYmplY3QoQSkpdGhyb3cgbmV3IFR5cGVFcnJvcigidGFyZ2V0IG11c3QgYmUgYW4gb2JqZWN0Iik7ZT1lfHxuZXcoU0F8fEZvcm1EYXRhKSx0PXMudG9GbGF0T2JqZWN0KHQse21ldGFUb2tlbnM6ITAsZG90czohMSxpbmRleGVzOiExfSwhMSxmdW5jdGlvbihFLEIpe3JldHVybiFzLmlzVW5kZWZpbmVkKEJbRV0pfSk7bGV0IHI9dC5tZXRhVG9rZW5zLG49dC52aXNpdG9yfHxhLG89dC5kb3RzLGk9dC5pbmRleGVzLEM9KHQuQmxvYnx8dHlwZW9mIEJsb2I8InUiJiZCbG9iKSYmcy5pc1NwZWNDb21wbGlhbnRGb3JtKGUpO2lmKCFzLmlzRnVuY3Rpb24obikpdGhyb3cgbmV3IFR5cGVFcnJvcigidmlzaXRvciBtdXN0IGJlIGEgZnVuY3Rpb24iKTtmdW5jdGlvbiBjKHUpe2lmKHU9PT1udWxsKXJldHVybiIiO2lmKHMuaXNEYXRlKHUpKXJldHVybiB1LnRvSVNPU3RyaW5nKCk7aWYoIUMmJnMuaXNCbG9iKHUpKXRocm93IG5ldyBRKCJCbG9iIGlzIG5vdCBzdXBwb3J0ZWQuIFVzZSBhIEJ1ZmZlciBpbnN0ZWFkLiIpO3JldHVybiBzLmlzQXJyYXlCdWZmZXIodSl8fHMuaXNUeXBlZEFycmF5KHUpP0MmJnR5cGVvZiBCbG9iPT0iZnVuY3Rpb24iP25ldyBCbG9iKFt1XSk6QnVmZmVyLmZyb20odSk6dX1mdW5jdGlvbiBhKHUsRSxCKXtsZXQgbT11O2lmKHUmJiFCJiZ0eXBlb2YgdT09Im9iamVjdCIpe2lmKHMuZW5kc1dpdGgoRSwie30iKSlFPXI/RTpFLnNsaWNlKDAsLTIpLHU9SlNPTi5zdHJpbmdpZnkodSk7ZWxzZSBpZihzLmlzQXJyYXkodSkmJnRuKHUpfHwocy5pc0ZpbGVMaXN0KHUpfHxzLmVuZHNXaXRoKEUsIltdIikpJiYobT1zLnRvQXJyYXkodSkpKXJldHVybiBFPWl0KEUpLG0uZm9yRWFjaChmdW5jdGlvbihwLE4peyEocy5pc1VuZGVmaW5lZChwKXx8cD09PW51bGwpJiZlLmFwcGVuZChpPT09ITA/b3QoW0VdLE4sbyk6aT09PW51bGw/RTpFKyJbXSIsYyhwKSl9KSwhMX1yZXR1cm4gYWUodSk/ITA6KGUuYXBwZW5kKG90KEIsRSxvKSxjKHUpKSwhMSl9bGV0IEk9W10sZj1PYmplY3QuYXNzaWduKHJuLHtkZWZhdWx0VmlzaXRvcjphLGNvbnZlcnRWYWx1ZTpjLGlzVmlzaXRhYmxlOmFlfSk7ZnVuY3Rpb24gbCh1LEUpe2lmKCFzLmlzVW5kZWZpbmVkKHUpKXtpZihJLmluZGV4T2YodSkhPT0tMSl0aHJvdyBFcnJvcigiQ2lyY3VsYXIgcmVmZXJlbmNlIGRldGVjdGVkIGluICIrRS5qb2luKCIuIikpO0kucHVzaCh1KSxzLmZvckVhY2godSxmdW5jdGlvbihtLGIpeyghKHMuaXNVbmRlZmluZWQobSl8fG09PT1udWxsKSYmbi5jYWxsKGUsbSxzLmlzU3RyaW5nKGIpP2IudHJpbSgpOmIsRSxmKSk9PT0hMCYmbChtLEU/RS5jb25jYXQoYik6W2JdKX0pLEkucG9wKCl9fWlmKCFzLmlzT2JqZWN0KEEpKXRocm93IG5ldyBUeXBlRXJyb3IoImRhdGEgbXVzdCBiZSBhbiBvYmplY3QiKTtyZXR1cm4gbChBKSxlfXZhciBKPW5uO2Z1bmN0aW9uIHN0KEEpe2xldCBlPXsiISI6IiUyMSIsIiciOiIlMjciLCIoIjoiJTI4IiwiKSI6IiUyOSIsIn4iOiIlN0UiLCIlMjAiOiIrIiwiJTAwIjoiXDAifTtyZXR1cm4gZW5jb2RlVVJJQ29tcG9uZW50KEEpLnJlcGxhY2UoL1shJygpfl18JTIwfCUwMC9nLGZ1bmN0aW9uKHIpe3JldHVybiBlW3JdfSl9ZnVuY3Rpb24gYXQoQSxlKXt0aGlzLl9wYWlycz1bXSxBJiZKKEEsdGhpcyxlKX12YXIgSXQ9YXQucHJvdG90eXBlO0l0LmFwcGVuZD1mdW5jdGlvbihlLHQpe3RoaXMuX3BhaXJzLnB1c2goW2UsdF0pfTtJdC50b1N0cmluZz1mdW5jdGlvbihlKXtsZXQgdD1lP2Z1bmN0aW9uKHIpe3JldHVybiBlLmNhbGwodGhpcyxyLHN0KX06c3Q7cmV0dXJuIHRoaXMuX3BhaXJzLm1hcChmdW5jdGlvbihuKXtyZXR1cm4gdChuWzBdKSsiPSIrdChuWzFdKX0sIiIpLmpvaW4oIiYiKX07dmFyIGJBPWF0O2Z1bmN0aW9uIG9uKEEpe3JldHVybiBlbmNvZGVVUklDb21wb25lbnQoQSkucmVwbGFjZSgvJTNBL2dpLCI6IikucmVwbGFjZSgvJTI0L2csIiQiKS5yZXBsYWNlKC8lMkMvZ2ksIiwiKS5yZXBsYWNlKC8lMjAvZywiKyIpLnJlcGxhY2UoLyU1Qi9naSwiWyIpLnJlcGxhY2UoLyU1RC9naSwiXSIpfWZ1bmN0aW9uIGlBKEEsZSx0KXtpZighZSlyZXR1cm4gQTtsZXQgcj10JiZ0LmVuY29kZXx8b24sbj10JiZ0LnNlcmlhbGl6ZSxvO2lmKG4/bz1uKGUsdCk6bz1zLmlzVVJMU2VhcmNoUGFyYW1zKGUpP2UudG9TdHJpbmcoKTpuZXcgYkEoZSx0KS50b1N0cmluZyhyKSxvKXtsZXQgaT1BLmluZGV4T2YoIiMiKTtpIT09LTEmJihBPUEuc2xpY2UoMCxpKSksQSs9KEEuaW5kZXhPZigiPyIpPT09LTE/Ij8iOiImIikrb31yZXR1cm4gQX12YXIgSWU9Y2xhc3N7Y29uc3RydWN0b3IoKXt0aGlzLmhhbmRsZXJzPVtdfXVzZShlLHQscil7cmV0dXJuIHRoaXMuaGFuZGxlcnMucHVzaCh7ZnVsZmlsbGVkOmUscmVqZWN0ZWQ6dCxzeW5jaHJvbm91czpyP3Iuc3luY2hyb25vdXM6ITEscnVuV2hlbjpyP3IucnVuV2hlbjpudWxsfSksdGhpcy5oYW5kbGVycy5sZW5ndGgtMX1lamVjdChlKXt0aGlzLmhhbmRsZXJzW2VdJiYodGhpcy5oYW5kbGVyc1tlXT1udWxsKX1jbGVhcigpe3RoaXMuaGFuZGxlcnMmJih0aGlzLmhhbmRsZXJzPVtdKX1mb3JFYWNoKGUpe3MuZm9yRWFjaCh0aGlzLmhhbmRsZXJzLGZ1bmN0aW9uKHIpe3IhPT1udWxsJiZlKHIpfSl9fSxnZT1JZTt2YXIgUkE9e3NpbGVudEpTT05QYXJzaW5nOiEwLGZvcmNlZEpTT05QYXJzaW5nOiEwLGNsYXJpZnlUaW1lb3V0RXJyb3I6ITF9O3ZhciBndD10eXBlb2YgVVJMU2VhcmNoUGFyYW1zPCJ1Ij9VUkxTZWFyY2hQYXJhbXM6YkE7dmFyIGx0PXR5cGVvZiBGb3JtRGF0YTwidSI/Rm9ybURhdGE6bnVsbDt2YXIgY3Q9dHlwZW9mIEJsb2I8InUiP0Jsb2I6bnVsbDt2YXIgQ3Q9e2lzQnJvd3NlcjohMCxjbGFzc2VzOntVUkxTZWFyY2hQYXJhbXM6Z3QsRm9ybURhdGE6bHQsQmxvYjpjdH0scHJvdG9jb2xzOlsiaHR0cCIsImh0dHBzIiwiZmlsZSIsImJsb2IiLCJ1cmwiLCJkYXRhIl19O3ZhciBjZT17fTskdChjZSx7aGFzQnJvd3NlckVudjooKT0+bGUsaGFzU3RhbmRhcmRCcm93c2VyRW52OigpPT5zbixoYXNTdGFuZGFyZEJyb3dzZXJXZWJXb3JrZXJFbnY6KCk9PmFuLG9yaWdpbjooKT0+SW59KTt2YXIgbGU9dHlwZW9mIHdpbmRvdzwidSImJnR5cGVvZiBkb2N1bWVudDwidSIsc249KEE9PmxlJiZbIlJlYWN0TmF0aXZlIiwiTmF0aXZlU2NyaXB0IiwiTlMiXS5pbmRleE9mKEEpPDApKHR5cGVvZiBuYXZpZ2F0b3I8InUiJiZuYXZpZ2F0b3IucHJvZHVjdCksYW49dHlwZW9mIFdvcmtlckdsb2JhbFNjb3BlPCJ1IiYmc2VsZiBpbnN0YW5jZW9mIFdvcmtlckdsb2JhbFNjb3BlJiZ0eXBlb2Ygc2VsZi5pbXBvcnRTY3JpcHRzPT0iZnVuY3Rpb24iLEluPWxlJiZ3aW5kb3cubG9jYXRpb24uaHJlZnx8Imh0dHA6Ly9sb2NhbGhvc3QiO3ZhciBTPXsuLi5jZSwuLi5DdH07ZnVuY3Rpb24gQ2UoQSxlKXtyZXR1cm4gSihBLG5ldyBTLmNsYXNzZXMuVVJMU2VhcmNoUGFyYW1zLE9iamVjdC5hc3NpZ24oe3Zpc2l0b3I6ZnVuY3Rpb24odCxyLG4sbyl7cmV0dXJuIFMuaXNOb2RlJiZzLmlzQnVmZmVyKHQpPyh0aGlzLmFwcGVuZChyLHQudG9TdHJpbmcoImJhc2U2NCIpKSwhMSk6by5kZWZhdWx0VmlzaXRvci5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSxlKSl9ZnVuY3Rpb24gZ24oQSl7cmV0dXJuIHMubWF0Y2hBbGwoL1x3K3xcWyhcdyopXS9nLEEpLm1hcChlPT5lWzBdPT09IltdIj8iIjplWzFdfHxlWzBdKX1mdW5jdGlvbiBsbihBKXtsZXQgZT17fSx0PU9iamVjdC5rZXlzKEEpLHIsbj10Lmxlbmd0aCxvO2ZvcihyPTA7cjxuO3IrKylvPXRbcl0sZVtvXT1BW29dO3JldHVybiBlfWZ1bmN0aW9uIGNuKEEpe2Z1bmN0aW9uIGUodCxyLG4sbyl7bGV0IGk9dFtvKytdO2lmKGk9PT0iX19wcm90b19fIilyZXR1cm4hMDtsZXQgZz1OdW1iZXIuaXNGaW5pdGUoK2kpLEM9bz49dC5sZW5ndGg7cmV0dXJuIGk9IWkmJnMuaXNBcnJheShuKT9uLmxlbmd0aDppLEM/KHMuaGFzT3duUHJvcChuLGkpP25baV09W25baV0scl06bltpXT1yLCFnKTooKCFuW2ldfHwhcy5pc09iamVjdChuW2ldKSkmJihuW2ldPVtdKSxlKHQscixuW2ldLG8pJiZzLmlzQXJyYXkobltpXSkmJihuW2ldPWxuKG5baV0pKSwhZyl9aWYocy5pc0Zvcm1EYXRhKEEpJiZzLmlzRnVuY3Rpb24oQS5lbnRyaWVzKSl7bGV0IHQ9e307cmV0dXJuIHMuZm9yRWFjaEVudHJ5KEEsKHIsbik9PntlKGduKHIpLG4sdCwwKX0pLHR9cmV0dXJuIG51bGx9dmFyIGtBPWNuO2Z1bmN0aW9uIENuKEEsZSx0KXtpZihzLmlzU3RyaW5nKEEpKXRyeXtyZXR1cm4oZXx8SlNPTi5wYXJzZSkoQSkscy50cmltKEEpfWNhdGNoKHIpe2lmKHIubmFtZSE9PSJTeW50YXhFcnJvciIpdGhyb3cgcn1yZXR1cm4odHx8SlNPTi5zdHJpbmdpZnkpKEEpfXZhciBCZT17dHJhbnNpdGlvbmFsOlJBLGFkYXB0ZXI6WyJ4aHIiLCJodHRwIiwiZmV0Y2giXSx0cmFuc2Zvcm1SZXF1ZXN0OltmdW5jdGlvbihlLHQpe2xldCByPXQuZ2V0Q29udGVudFR5cGUoKXx8IiIsbj1yLmluZGV4T2YoImFwcGxpY2F0aW9uL2pzb24iKT4tMSxvPXMuaXNPYmplY3QoZSk7aWYobyYmcy5pc0hUTUxGb3JtKGUpJiYoZT1uZXcgRm9ybURhdGEoZSkpLHMuaXNGb3JtRGF0YShlKSlyZXR1cm4gbj9KU09OLnN0cmluZ2lmeShrQShlKSk6ZTtpZihzLmlzQXJyYXlCdWZmZXIoZSl8fHMuaXNCdWZmZXIoZSl8fHMuaXNTdHJlYW0oZSl8fHMuaXNGaWxlKGUpfHxzLmlzQmxvYihlKXx8cy5pc1JlYWRhYmxlU3RyZWFtKGUpKXJldHVybiBlO2lmKHMuaXNBcnJheUJ1ZmZlclZpZXcoZSkpcmV0dXJuIGUuYnVmZmVyO2lmKHMuaXNVUkxTZWFyY2hQYXJhbXMoZSkpcmV0dXJuIHQuc2V0Q29udGVudFR5cGUoImFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZDtjaGFyc2V0PXV0Zi04IiwhMSksZS50b1N0cmluZygpO2xldCBnO2lmKG8pe2lmKHIuaW5kZXhPZigiYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkIik+LTEpcmV0dXJuIENlKGUsdGhpcy5mb3JtU2VyaWFsaXplcikudG9TdHJpbmcoKTtpZigoZz1zLmlzRmlsZUxpc3QoZSkpfHxyLmluZGV4T2YoIm11bHRpcGFydC9mb3JtLWRhdGEiKT4tMSl7bGV0IEM9dGhpcy5lbnYmJnRoaXMuZW52LkZvcm1EYXRhO3JldHVybiBKKGc/eyJmaWxlc1tdIjplfTplLEMmJm5ldyBDLHRoaXMuZm9ybVNlcmlhbGl6ZXIpfX1yZXR1cm4gb3x8bj8odC5zZXRDb250ZW50VHlwZSgiYXBwbGljYXRpb24vanNvbiIsITEpLENuKGUpKTplfV0sdHJhbnNmb3JtUmVzcG9uc2U6W2Z1bmN0aW9uKGUpe2xldCB0PXRoaXMudHJhbnNpdGlvbmFsfHxCZS50cmFuc2l0aW9uYWwscj10JiZ0LmZvcmNlZEpTT05QYXJzaW5nLG49dGhpcy5yZXNwb25zZVR5cGU9PT0ianNvbiI7aWYocy5pc1Jlc3BvbnNlKGUpfHxzLmlzUmVhZGFibGVTdHJlYW0oZSkpcmV0dXJuIGU7aWYoZSYmcy5pc1N0cmluZyhlKSYmKHImJiF0aGlzLnJlc3BvbnNlVHlwZXx8bikpe2xldCBpPSEodCYmdC5zaWxlbnRKU09OUGFyc2luZykmJm47dHJ5e3JldHVybiBKU09OLnBhcnNlKGUpfWNhdGNoKGcpe2lmKGkpdGhyb3cgZy5uYW1lPT09IlN5bnRheEVycm9yIj9RLmZyb20oZyxRLkVSUl9CQURfUkVTUE9OU0UsdGhpcyxudWxsLHRoaXMucmVzcG9uc2UpOmd9fXJldHVybiBlfV0sdGltZW91dDowLHhzcmZDb29raWVOYW1lOiJYU1JGLVRPS0VOIix4c3JmSGVhZGVyTmFtZToiWC1YU1JGLVRPS0VOIixtYXhDb250ZW50TGVuZ3RoOi0xLG1heEJvZHlMZW5ndGg6LTEsZW52OntGb3JtRGF0YTpTLmNsYXNzZXMuRm9ybURhdGEsQmxvYjpTLmNsYXNzZXMuQmxvYn0sdmFsaWRhdGVTdGF0dXM6ZnVuY3Rpb24oZSl7cmV0dXJuIGU+PTIwMCYmZTwzMDB9LGhlYWRlcnM6e2NvbW1vbjp7QWNjZXB0OiJhcHBsaWNhdGlvbi9qc29uLCB0ZXh0L3BsYWluLCAqLyoiLCJDb250ZW50LVR5cGUiOnZvaWQgMH19fTtzLmZvckVhY2goWyJkZWxldGUiLCJnZXQiLCJoZWFkIiwicG9zdCIsInB1dCIsInBhdGNoIl0sQT0+e0JlLmhlYWRlcnNbQV09e319KTt2YXIgXz1CZTt2YXIgQm49cy50b09iamVjdFNldChbImFnZSIsImF1dGhvcml6YXRpb24iLCJjb250ZW50LWxlbmd0aCIsImNvbnRlbnQtdHlwZSIsImV0YWciLCJleHBpcmVzIiwiZnJvbSIsImhvc3QiLCJpZi1tb2RpZmllZC1zaW5jZSIsImlmLXVubW9kaWZpZWQtc2luY2UiLCJsYXN0LW1vZGlmaWVkIiwibG9jYXRpb24iLCJtYXgtZm9yd2FyZHMiLCJwcm94eS1hdXRob3JpemF0aW9uIiwicmVmZXJlciIsInJldHJ5LWFmdGVyIiwidXNlci1hZ2VudCJdKSxCdD1BPT57bGV0IGU9e30sdCxyLG47cmV0dXJuIEEmJkEuc3BsaXQoYApgKS5mb3JFYWNoKGZ1bmN0aW9uKGkpe249aS5pbmRleE9mKCI6IiksdD1pLnN1YnN0cmluZygwLG4pLnRyaW0oKS50b0xvd2VyQ2FzZSgpLHI9aS5zdWJzdHJpbmcobisxKS50cmltKCksISghdHx8ZVt0XSYmQm5bdF0pJiYodD09PSJzZXQtY29va2llIj9lW3RdP2VbdF0ucHVzaChyKTplW3RdPVtyXTplW3RdPWVbdF0/ZVt0XSsiLCAiK3I6cil9KSxlfTt2YXIgdXQ9U3ltYm9sKCJpbnRlcm5hbHMiKTtmdW5jdGlvbiBzQShBKXtyZXR1cm4gQSYmU3RyaW5nKEEpLnRyaW0oKS50b0xvd2VyQ2FzZSgpfWZ1bmN0aW9uIEZBKEEpe3JldHVybiBBPT09ITF8fEE9PW51bGw/QTpzLmlzQXJyYXkoQSk/QS5tYXAoRkEpOlN0cmluZyhBKX1mdW5jdGlvbiB1bihBKXtsZXQgZT1PYmplY3QuY3JlYXRlKG51bGwpLHQ9LyhbXlxzLDs9XSspXHMqKD86PVxzKihbXiw7XSspKT8vZyxyO2Zvcig7cj10LmV4ZWMoQSk7KWVbclsxXV09clsyXTtyZXR1cm4gZX12YXIgZm49QT0+L15bLV9hLXpBLVowLTleYHx+LCEjJCUmJyorLl0rJC8udGVzdChBLnRyaW0oKSk7ZnVuY3Rpb24gdWUoQSxlLHQscixuKXtpZihzLmlzRnVuY3Rpb24ocikpcmV0dXJuIHIuY2FsbCh0aGlzLGUsdCk7aWYobiYmKGU9dCksISFzLmlzU3RyaW5nKGUpKXtpZihzLmlzU3RyaW5nKHIpKXJldHVybiBlLmluZGV4T2YocikhPT0tMTtpZihzLmlzUmVnRXhwKHIpKXJldHVybiByLnRlc3QoZSl9fWZ1bmN0aW9uIEVuKEEpe3JldHVybiBBLnRyaW0oKS50b0xvd2VyQ2FzZSgpLnJlcGxhY2UoLyhbYS16XGRdKShcdyopL2csKGUsdCxyKT0+dC50b1VwcGVyQ2FzZSgpK3IpfWZ1bmN0aW9uIFFuKEEsZSl7bGV0IHQ9cy50b0NhbWVsQ2FzZSgiICIrZSk7WyJnZXQiLCJzZXQiLCJoYXMiXS5mb3JFYWNoKHI9PntPYmplY3QuZGVmaW5lUHJvcGVydHkoQSxyK3Qse3ZhbHVlOmZ1bmN0aW9uKG4sbyxpKXtyZXR1cm4gdGhpc1tyXS5jYWxsKHRoaXMsZSxuLG8saSl9LGNvbmZpZ3VyYWJsZTohMH0pfSl9dmFyIHo9Y2xhc3N7Y29uc3RydWN0b3IoZSl7ZSYmdGhpcy5zZXQoZSl9c2V0KGUsdCxyKXtsZXQgbj10aGlzO2Z1bmN0aW9uIG8oZyxDLGMpe2xldCBhPXNBKEMpO2lmKCFhKXRocm93IG5ldyBFcnJvcigiaGVhZGVyIG5hbWUgbXVzdCBiZSBhIG5vbi1lbXB0eSBzdHJpbmciKTtsZXQgST1zLmZpbmRLZXkobixhKTsoIUl8fG5bSV09PT12b2lkIDB8fGM9PT0hMHx8Yz09PXZvaWQgMCYmbltJXSE9PSExKSYmKG5bSXx8Q109RkEoZykpfWxldCBpPShnLEMpPT5zLmZvckVhY2goZywoYyxhKT0+byhjLGEsQykpO2lmKHMuaXNQbGFpbk9iamVjdChlKXx8ZSBpbnN0YW5jZW9mIHRoaXMuY29uc3RydWN0b3IpaShlLHQpO2Vsc2UgaWYocy5pc1N0cmluZyhlKSYmKGU9ZS50cmltKCkpJiYhZm4oZSkpaShCdChlKSx0KTtlbHNlIGlmKHMuaXNIZWFkZXJzKGUpKWZvcihsZXRbZyxDXW9mIGUuZW50cmllcygpKW8oQyxnLHIpO2Vsc2UgZSE9bnVsbCYmbyh0LGUscik7cmV0dXJuIHRoaXN9Z2V0KGUsdCl7aWYoZT1zQShlKSxlKXtsZXQgcj1zLmZpbmRLZXkodGhpcyxlKTtpZihyKXtsZXQgbj10aGlzW3JdO2lmKCF0KXJldHVybiBuO2lmKHQ9PT0hMClyZXR1cm4gdW4obik7aWYocy5pc0Z1bmN0aW9uKHQpKXJldHVybiB0LmNhbGwodGhpcyxuLHIpO2lmKHMuaXNSZWdFeHAodCkpcmV0dXJuIHQuZXhlYyhuKTt0aHJvdyBuZXcgVHlwZUVycm9yKCJwYXJzZXIgbXVzdCBiZSBib29sZWFufHJlZ2V4cHxmdW5jdGlvbiIpfX19aGFzKGUsdCl7aWYoZT1zQShlKSxlKXtsZXQgcj1zLmZpbmRLZXkodGhpcyxlKTtyZXR1cm4hIShyJiZ0aGlzW3JdIT09dm9pZCAwJiYoIXR8fHVlKHRoaXMsdGhpc1tyXSxyLHQpKSl9cmV0dXJuITF9ZGVsZXRlKGUsdCl7bGV0IHI9dGhpcyxuPSExO2Z1bmN0aW9uIG8oaSl7aWYoaT1zQShpKSxpKXtsZXQgZz1zLmZpbmRLZXkocixpKTtnJiYoIXR8fHVlKHIscltnXSxnLHQpKSYmKGRlbGV0ZSByW2ddLG49ITApfX1yZXR1cm4gcy5pc0FycmF5KGUpP2UuZm9yRWFjaChvKTpvKGUpLG59Y2xlYXIoZSl7bGV0IHQ9T2JqZWN0LmtleXModGhpcykscj10Lmxlbmd0aCxuPSExO2Zvcig7ci0tOyl7bGV0IG89dFtyXTsoIWV8fHVlKHRoaXMsdGhpc1tvXSxvLGUsITApKSYmKGRlbGV0ZSB0aGlzW29dLG49ITApfXJldHVybiBufW5vcm1hbGl6ZShlKXtsZXQgdD10aGlzLHI9e307cmV0dXJuIHMuZm9yRWFjaCh0aGlzLChuLG8pPT57bGV0IGk9cy5maW5kS2V5KHIsbyk7aWYoaSl7dFtpXT1GQShuKSxkZWxldGUgdFtvXTtyZXR1cm59bGV0IGc9ZT9FbihvKTpTdHJpbmcobykudHJpbSgpO2chPT1vJiZkZWxldGUgdFtvXSx0W2ddPUZBKG4pLHJbZ109ITB9KSx0aGlzfWNvbmNhdCguLi5lKXtyZXR1cm4gdGhpcy5jb25zdHJ1Y3Rvci5jb25jYXQodGhpcywuLi5lKX10b0pTT04oZSl7bGV0IHQ9T2JqZWN0LmNyZWF0ZShudWxsKTtyZXR1cm4gcy5mb3JFYWNoKHRoaXMsKHIsbik9PntyIT1udWxsJiZyIT09ITEmJih0W25dPWUmJnMuaXNBcnJheShyKT9yLmpvaW4oIiwgIik6cil9KSx0fVtTeW1ib2wuaXRlcmF0b3JdKCl7cmV0dXJuIE9iamVjdC5lbnRyaWVzKHRoaXMudG9KU09OKCkpW1N5bWJvbC5pdGVyYXRvcl0oKX10b1N0cmluZygpe3JldHVybiBPYmplY3QuZW50cmllcyh0aGlzLnRvSlNPTigpKS5tYXAoKFtlLHRdKT0+ZSsiOiAiK3QpLmpvaW4oYApgKX1nZXRbU3ltYm9sLnRvU3RyaW5nVGFnXSgpe3JldHVybiJBeGlvc0hlYWRlcnMifXN0YXRpYyBmcm9tKGUpe3JldHVybiBlIGluc3RhbmNlb2YgdGhpcz9lOm5ldyB0aGlzKGUpfXN0YXRpYyBjb25jYXQoZSwuLi50KXtsZXQgcj1uZXcgdGhpcyhlKTtyZXR1cm4gdC5mb3JFYWNoKG49PnIuc2V0KG4pKSxyfXN0YXRpYyBhY2Nlc3NvcihlKXtsZXQgcj0odGhpc1t1dF09dGhpc1t1dF09e2FjY2Vzc29yczp7fX0pLmFjY2Vzc29ycyxuPXRoaXMucHJvdG90eXBlO2Z1bmN0aW9uIG8oaSl7bGV0IGc9c0EoaSk7cltnXXx8KFFuKG4saSkscltnXT0hMCl9cmV0dXJuIHMuaXNBcnJheShlKT9lLmZvckVhY2gobyk6byhlKSx0aGlzfX07ei5hY2Nlc3NvcihbIkNvbnRlbnQtVHlwZSIsIkNvbnRlbnQtTGVuZ3RoIiwiQWNjZXB0IiwiQWNjZXB0LUVuY29kaW5nIiwiVXNlci1BZ2VudCIsIkF1dGhvcml6YXRpb24iXSk7cy5yZWR1Y2VEZXNjcmlwdG9ycyh6LnByb3RvdHlwZSwoe3ZhbHVlOkF9LGUpPT57bGV0IHQ9ZVswXS50b1VwcGVyQ2FzZSgpK2Uuc2xpY2UoMSk7cmV0dXJue2dldDooKT0+QSxzZXQocil7dGhpc1t0XT1yfX19KTtzLmZyZWV6ZU1ldGhvZHMoeik7dmFyIHc9ejtmdW5jdGlvbiBhQShBLGUpe2xldCB0PXRoaXN8fF8scj1lfHx0LG49dy5mcm9tKHIuaGVhZGVycyksbz1yLmRhdGE7cmV0dXJuIHMuZm9yRWFjaChBLGZ1bmN0aW9uKGcpe289Zy5jYWxsKHQsbyxuLm5vcm1hbGl6ZSgpLGU/ZS5zdGF0dXM6dm9pZCAwKX0pLG4ubm9ybWFsaXplKCksb31mdW5jdGlvbiBJQShBKXtyZXR1cm4hIShBJiZBLl9fQ0FOQ0VMX18pfWZ1bmN0aW9uIGZ0KEEsZSx0KXtRLmNhbGwodGhpcyxBPz8iY2FuY2VsZWQiLFEuRVJSX0NBTkNFTEVELGUsdCksdGhpcy5uYW1lPSJDYW5jZWxlZEVycm9yIn1zLmluaGVyaXRzKGZ0LFEse19fQ0FOQ0VMX186ITB9KTt2YXIgRz1mdDtmdW5jdGlvbiBnQShBLGUsdCl7bGV0IHI9dC5jb25maWcudmFsaWRhdGVTdGF0dXM7IXQuc3RhdHVzfHwhcnx8cih0LnN0YXR1cyk/QSh0KTplKG5ldyBRKCJSZXF1ZXN0IGZhaWxlZCB3aXRoIHN0YXR1cyBjb2RlICIrdC5zdGF0dXMsW1EuRVJSX0JBRF9SRVFVRVNULFEuRVJSX0JBRF9SRVNQT05TRV1bTWF0aC5mbG9vcih0LnN0YXR1cy8xMDApLTRdLHQuY29uZmlnLHQucmVxdWVzdCx0KSl9ZnVuY3Rpb24gZmUoQSl7bGV0IGU9L14oWy0rXHddezEsMjV9KSg6P1wvXC98OikvLmV4ZWMoQSk7cmV0dXJuIGUmJmVbMV18fCIifWZ1bmN0aW9uIHBuKEEsZSl7QT1BfHwxMDtsZXQgdD1uZXcgQXJyYXkoQSkscj1uZXcgQXJyYXkoQSksbj0wLG89MCxpO3JldHVybiBlPWUhPT12b2lkIDA/ZToxZTMsZnVuY3Rpb24oQyl7bGV0IGM9RGF0ZS5ub3coKSxhPXJbb107aXx8KGk9YyksdFtuXT1DLHJbbl09YztsZXQgST1vLGY9MDtmb3IoO0khPT1uOylmKz10W0krK10sST1JJUE7aWYobj0obisxKSVBLG49PT1vJiYobz0obysxKSVBKSxjLWk8ZSlyZXR1cm47bGV0IGw9YSYmYy1hO3JldHVybiBsP01hdGgucm91bmQoZioxZTMvbCk6dm9pZCAwfX12YXIgRXQ9cG47ZnVuY3Rpb24gZG4oQSxlKXtsZXQgdD0wLHI9MWUzL2UsbixvLGk9KGMsYT1EYXRlLm5vdygpKT0+e3Q9YSxuPW51bGwsbyYmKGNsZWFyVGltZW91dChvKSxvPW51bGwpLEEuYXBwbHkobnVsbCxjKX07cmV0dXJuWyguLi5jKT0+e2xldCBhPURhdGUubm93KCksST1hLXQ7ST49cj9pKGMsYSk6KG49YyxvfHwobz1zZXRUaW1lb3V0KCgpPT57bz1udWxsLGkobil9LHItSSkpKX0sKCk9Pm4mJmkobildfXZhciBRdD1kbjt2YXIgVj0oQSxlLHQ9Myk9PntsZXQgcj0wLG49RXQoNTAsMjUwKTtyZXR1cm4gUXQobz0+e2xldCBpPW8ubG9hZGVkLGc9by5sZW5ndGhDb21wdXRhYmxlP28udG90YWw6dm9pZCAwLEM9aS1yLGM9bihDKSxhPWk8PWc7cj1pO2xldCBJPXtsb2FkZWQ6aSx0b3RhbDpnLHByb2dyZXNzOmc/aS9nOnZvaWQgMCxieXRlczpDLHJhdGU6Y3x8dm9pZCAwLGVzdGltYXRlZDpjJiZnJiZhPyhnLWkpL2M6dm9pZCAwLGV2ZW50Om8sbGVuZ3RoQ29tcHV0YWJsZTpnIT1udWxsLFtlPyJkb3dubG9hZCI6InVwbG9hZCJdOiEwfTtBKEkpfSx0KX0sRWU9KEEsZSk9PntsZXQgdD1BIT1udWxsO3JldHVybltyPT5lWzBdKHtsZW5ndGhDb21wdXRhYmxlOnQsdG90YWw6QSxsb2FkZWQ6cn0pLGVbMV1dfSxRZT1BPT4oLi4uZSk9PnMuYXNhcCgoKT0+QSguLi5lKSk7dmFyIHB0PVMuaGFzU3RhbmRhcmRCcm93c2VyRW52P2Z1bmN0aW9uKCl7bGV0IGU9Lyhtc2llfHRyaWRlbnQpL2kudGVzdChuYXZpZ2F0b3IudXNlckFnZW50KSx0PWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImEiKSxyO2Z1bmN0aW9uIG4obyl7bGV0IGk9bztyZXR1cm4gZSYmKHQuc2V0QXR0cmlidXRlKCJocmVmIixpKSxpPXQuaHJlZiksdC5zZXRBdHRyaWJ1dGUoImhyZWYiLGkpLHtocmVmOnQuaHJlZixwcm90b2NvbDp0LnByb3RvY29sP3QucHJvdG9jb2wucmVwbGFjZSgvOiQvLCIiKToiIixob3N0OnQuaG9zdCxzZWFyY2g6dC5zZWFyY2g/dC5zZWFyY2gucmVwbGFjZSgvXlw/LywiIik6IiIsaGFzaDp0Lmhhc2g/dC5oYXNoLnJlcGxhY2UoL14jLywiIik6IiIsaG9zdG5hbWU6dC5ob3N0bmFtZSxwb3J0OnQucG9ydCxwYXRobmFtZTp0LnBhdGhuYW1lLmNoYXJBdCgwKT09PSIvIj90LnBhdGhuYW1lOiIvIit0LnBhdGhuYW1lfX1yZXR1cm4gcj1uKHdpbmRvdy5sb2NhdGlvbi5ocmVmKSxmdW5jdGlvbihpKXtsZXQgZz1zLmlzU3RyaW5nKGkpP24oaSk6aTtyZXR1cm4gZy5wcm90b2NvbD09PXIucHJvdG9jb2wmJmcuaG9zdD09PXIuaG9zdH19KCk6ZnVuY3Rpb24oKXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4hMH19KCk7dmFyIGR0PVMuaGFzU3RhbmRhcmRCcm93c2VyRW52P3t3cml0ZShBLGUsdCxyLG4sbyl7bGV0IGk9W0ErIj0iK2VuY29kZVVSSUNvbXBvbmVudChlKV07cy5pc051bWJlcih0KSYmaS5wdXNoKCJleHBpcmVzPSIrbmV3IERhdGUodCkudG9HTVRTdHJpbmcoKSkscy5pc1N0cmluZyhyKSYmaS5wdXNoKCJwYXRoPSIrcikscy5pc1N0cmluZyhuKSYmaS5wdXNoKCJkb21haW49IituKSxvPT09ITAmJmkucHVzaCgic2VjdXJlIiksZG9jdW1lbnQuY29va2llPWkuam9pbigiOyAiKX0scmVhZChBKXtsZXQgZT1kb2N1bWVudC5jb29raWUubWF0Y2gobmV3IFJlZ0V4cCgiKF58O1xccyopKCIrQSsiKT0oW147XSopIikpO3JldHVybiBlP2RlY29kZVVSSUNvbXBvbmVudChlWzNdKTpudWxsfSxyZW1vdmUoQSl7dGhpcy53cml0ZShBLCIiLERhdGUubm93KCktODY0ZTUpfX06e3dyaXRlKCl7fSxyZWFkKCl7cmV0dXJuIG51bGx9LHJlbW92ZSgpe319O2Z1bmN0aW9uIHBlKEEpe3JldHVybi9eKFthLXpdW2EtelxkK1wtLl0qOik/XC9cLy9pLnRlc3QoQSl9ZnVuY3Rpb24gZGUoQSxlKXtyZXR1cm4gZT9BLnJlcGxhY2UoL1wvP1wvJC8sIiIpKyIvIitlLnJlcGxhY2UoL15cLysvLCIiKTpBfWZ1bmN0aW9uIGxBKEEsZSl7cmV0dXJuIEEmJiFwZShlKT9kZShBLGUpOmV9dmFyIG10PUE9PkEgaW5zdGFuY2VvZiB3P3suLi5BfTpBO2Z1bmN0aW9uIFAoQSxlKXtlPWV8fHt9O2xldCB0PXt9O2Z1bmN0aW9uIHIoYyxhLEkpe3JldHVybiBzLmlzUGxhaW5PYmplY3QoYykmJnMuaXNQbGFpbk9iamVjdChhKT9zLm1lcmdlLmNhbGwoe2Nhc2VsZXNzOkl9LGMsYSk6cy5pc1BsYWluT2JqZWN0KGEpP3MubWVyZ2Uoe30sYSk6cy5pc0FycmF5KGEpP2Euc2xpY2UoKTphfWZ1bmN0aW9uIG4oYyxhLEkpe2lmKHMuaXNVbmRlZmluZWQoYSkpe2lmKCFzLmlzVW5kZWZpbmVkKGMpKXJldHVybiByKHZvaWQgMCxjLEkpfWVsc2UgcmV0dXJuIHIoYyxhLEkpfWZ1bmN0aW9uIG8oYyxhKXtpZighcy5pc1VuZGVmaW5lZChhKSlyZXR1cm4gcih2b2lkIDAsYSl9ZnVuY3Rpb24gaShjLGEpe2lmKHMuaXNVbmRlZmluZWQoYSkpe2lmKCFzLmlzVW5kZWZpbmVkKGMpKXJldHVybiByKHZvaWQgMCxjKX1lbHNlIHJldHVybiByKHZvaWQgMCxhKX1mdW5jdGlvbiBnKGMsYSxJKXtpZihJIGluIGUpcmV0dXJuIHIoYyxhKTtpZihJIGluIEEpcmV0dXJuIHIodm9pZCAwLGMpfWxldCBDPXt1cmw6byxtZXRob2Q6byxkYXRhOm8sYmFzZVVSTDppLHRyYW5zZm9ybVJlcXVlc3Q6aSx0cmFuc2Zvcm1SZXNwb25zZTppLHBhcmFtc1NlcmlhbGl6ZXI6aSx0aW1lb3V0OmksdGltZW91dE1lc3NhZ2U6aSx3aXRoQ3JlZGVudGlhbHM6aSx3aXRoWFNSRlRva2VuOmksYWRhcHRlcjppLHJlc3BvbnNlVHlwZTppLHhzcmZDb29raWVOYW1lOmkseHNyZkhlYWRlck5hbWU6aSxvblVwbG9hZFByb2dyZXNzOmksb25Eb3dubG9hZFByb2dyZXNzOmksZGVjb21wcmVzczppLG1heENvbnRlbnRMZW5ndGg6aSxtYXhCb2R5TGVuZ3RoOmksYmVmb3JlUmVkaXJlY3Q6aSx0cmFuc3BvcnQ6aSxodHRwQWdlbnQ6aSxodHRwc0FnZW50OmksY2FuY2VsVG9rZW46aSxzb2NrZXRQYXRoOmkscmVzcG9uc2VFbmNvZGluZzppLHZhbGlkYXRlU3RhdHVzOmcsaGVhZGVyczooYyxhKT0+bihtdChjKSxtdChhKSwhMCl9O3JldHVybiBzLmZvckVhY2goT2JqZWN0LmtleXMoT2JqZWN0LmFzc2lnbih7fSxBLGUpKSxmdW5jdGlvbihhKXtsZXQgST1DW2FdfHxuLGY9SShBW2FdLGVbYV0sYSk7cy5pc1VuZGVmaW5lZChmKSYmSSE9PWd8fCh0W2FdPWYpfSksdH12YXIgVUE9QT0+e2xldCBlPVAoe30sQSkse2RhdGE6dCx3aXRoWFNSRlRva2VuOnIseHNyZkhlYWRlck5hbWU6bix4c3JmQ29va2llTmFtZTpvLGhlYWRlcnM6aSxhdXRoOmd9PWU7ZS5oZWFkZXJzPWk9dy5mcm9tKGkpLGUudXJsPWlBKGxBKGUuYmFzZVVSTCxlLnVybCksQS5wYXJhbXMsQS5wYXJhbXNTZXJpYWxpemVyKSxnJiZpLnNldCgiQXV0aG9yaXphdGlvbiIsIkJhc2ljICIrYnRvYSgoZy51c2VybmFtZXx8IiIpKyI6IisoZy5wYXNzd29yZD91bmVzY2FwZShlbmNvZGVVUklDb21wb25lbnQoZy5wYXNzd29yZCkpOiIiKSkpO2xldCBDO2lmKHMuaXNGb3JtRGF0YSh0KSl7aWYoUy5oYXNTdGFuZGFyZEJyb3dzZXJFbnZ8fFMuaGFzU3RhbmRhcmRCcm93c2VyV2ViV29ya2VyRW52KWkuc2V0Q29udGVudFR5cGUodm9pZCAwKTtlbHNlIGlmKChDPWkuZ2V0Q29udGVudFR5cGUoKSkhPT0hMSl7bGV0W2MsLi4uYV09Qz9DLnNwbGl0KCI7IikubWFwKEk9PkkudHJpbSgpKS5maWx0ZXIoQm9vbGVhbik6W107aS5zZXRDb250ZW50VHlwZShbY3x8Im11bHRpcGFydC9mb3JtLWRhdGEiLC4uLmFdLmpvaW4oIjsgIikpfX1pZihTLmhhc1N0YW5kYXJkQnJvd3NlckVudiYmKHImJnMuaXNGdW5jdGlvbihyKSYmKHI9cihlKSkscnx8ciE9PSExJiZwdChlLnVybCkpKXtsZXQgYz1uJiZvJiZkdC5yZWFkKG8pO2MmJmkuc2V0KG4sYyl9cmV0dXJuIGV9O3ZhciBtbj10eXBlb2YgWE1MSHR0cFJlcXVlc3Q8InUiLHl0PW1uJiZmdW5jdGlvbihBKXtyZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24odCxyKXtsZXQgbj1VQShBKSxvPW4uZGF0YSxpPXcuZnJvbShuLmhlYWRlcnMpLm5vcm1hbGl6ZSgpLHtyZXNwb25zZVR5cGU6ZyxvblVwbG9hZFByb2dyZXNzOkMsb25Eb3dubG9hZFByb2dyZXNzOmN9PW4sYSxJLGYsbCx1O2Z1bmN0aW9uIEUoKXtsJiZsKCksdSYmdSgpLG4uY2FuY2VsVG9rZW4mJm4uY2FuY2VsVG9rZW4udW5zdWJzY3JpYmUoYSksbi5zaWduYWwmJm4uc2lnbmFsLnJlbW92ZUV2ZW50TGlzdGVuZXIoImFib3J0IixhKX1sZXQgQj1uZXcgWE1MSHR0cFJlcXVlc3Q7Qi5vcGVuKG4ubWV0aG9kLnRvVXBwZXJDYXNlKCksbi51cmwsITApLEIudGltZW91dD1uLnRpbWVvdXQ7ZnVuY3Rpb24gbSgpe2lmKCFCKXJldHVybjtsZXQgcD13LmZyb20oImdldEFsbFJlc3BvbnNlSGVhZGVycyJpbiBCJiZCLmdldEFsbFJlc3BvbnNlSGVhZGVycygpKSxxPXtkYXRhOiFnfHxnPT09InRleHQifHxnPT09Impzb24iP0IucmVzcG9uc2VUZXh0OkIucmVzcG9uc2Usc3RhdHVzOkIuc3RhdHVzLHN0YXR1c1RleHQ6Qi5zdGF0dXNUZXh0LGhlYWRlcnM6cCxjb25maWc6QSxyZXF1ZXN0OkJ9O2dBKGZ1bmN0aW9uKEwpe3QoTCksRSgpfSxmdW5jdGlvbihMKXtyKEwpLEUoKX0scSksQj1udWxsfSJvbmxvYWRlbmQiaW4gQj9CLm9ubG9hZGVuZD1tOkIub25yZWFkeXN0YXRlY2hhbmdlPWZ1bmN0aW9uKCl7IUJ8fEIucmVhZHlTdGF0ZSE9PTR8fEIuc3RhdHVzPT09MCYmIShCLnJlc3BvbnNlVVJMJiZCLnJlc3BvbnNlVVJMLmluZGV4T2YoImZpbGU6Iik9PT0wKXx8c2V0VGltZW91dChtKX0sQi5vbmFib3J0PWZ1bmN0aW9uKCl7QiYmKHIobmV3IFEoIlJlcXVlc3QgYWJvcnRlZCIsUS5FQ09OTkFCT1JURUQsQSxCKSksQj1udWxsKX0sQi5vbmVycm9yPWZ1bmN0aW9uKCl7cihuZXcgUSgiTmV0d29yayBFcnJvciIsUS5FUlJfTkVUV09SSyxBLEIpKSxCPW51bGx9LEIub250aW1lb3V0PWZ1bmN0aW9uKCl7bGV0IE49bi50aW1lb3V0PyJ0aW1lb3V0IG9mICIrbi50aW1lb3V0KyJtcyBleGNlZWRlZCI6InRpbWVvdXQgZXhjZWVkZWQiLHE9bi50cmFuc2l0aW9uYWx8fFJBO24udGltZW91dEVycm9yTWVzc2FnZSYmKE49bi50aW1lb3V0RXJyb3JNZXNzYWdlKSxyKG5ldyBRKE4scS5jbGFyaWZ5VGltZW91dEVycm9yP1EuRVRJTUVET1VUOlEuRUNPTk5BQk9SVEVELEEsQikpLEI9bnVsbH0sbz09PXZvaWQgMCYmaS5zZXRDb250ZW50VHlwZShudWxsKSwic2V0UmVxdWVzdEhlYWRlciJpbiBCJiZzLmZvckVhY2goaS50b0pTT04oKSxmdW5jdGlvbihOLHEpe0Iuc2V0UmVxdWVzdEhlYWRlcihxLE4pfSkscy5pc1VuZGVmaW5lZChuLndpdGhDcmVkZW50aWFscyl8fChCLndpdGhDcmVkZW50aWFscz0hIW4ud2l0aENyZWRlbnRpYWxzKSxnJiZnIT09Impzb24iJiYoQi5yZXNwb25zZVR5cGU9bi5yZXNwb25zZVR5cGUpLGMmJihbZix1XT1WKGMsITApLEIuYWRkRXZlbnRMaXN0ZW5lcigicHJvZ3Jlc3MiLGYpKSxDJiZCLnVwbG9hZCYmKFtJLGxdPVYoQyksQi51cGxvYWQuYWRkRXZlbnRMaXN0ZW5lcigicHJvZ3Jlc3MiLEkpLEIudXBsb2FkLmFkZEV2ZW50TGlzdGVuZXIoImxvYWRlbmQiLGwpKSwobi5jYW5jZWxUb2tlbnx8bi5zaWduYWwpJiYoYT1wPT57QiYmKHIoIXB8fHAudHlwZT9uZXcgRyhudWxsLEEsQik6cCksQi5hYm9ydCgpLEI9bnVsbCl9LG4uY2FuY2VsVG9rZW4mJm4uY2FuY2VsVG9rZW4uc3Vic2NyaWJlKGEpLG4uc2lnbmFsJiYobi5zaWduYWwuYWJvcnRlZD9hKCk6bi5zaWduYWwuYWRkRXZlbnRMaXN0ZW5lcigiYWJvcnQiLGEpKSk7bGV0IGI9ZmUobi51cmwpO2lmKGImJlMucHJvdG9jb2xzLmluZGV4T2YoYik9PT0tMSl7cihuZXcgUSgiVW5zdXBwb3J0ZWQgcHJvdG9jb2wgIitiKyI6IixRLkVSUl9CQURfUkVRVUVTVCxBKSk7cmV0dXJufUIuc2VuZChvfHxudWxsKX0pfTt2YXIgeW49KEEsZSk9PntsZXQgdD1uZXcgQWJvcnRDb250cm9sbGVyLHIsbj1mdW5jdGlvbihDKXtpZighcil7cj0hMCxpKCk7bGV0IGM9QyBpbnN0YW5jZW9mIEVycm9yP0M6dGhpcy5yZWFzb247dC5hYm9ydChjIGluc3RhbmNlb2YgUT9jOm5ldyBHKGMgaW5zdGFuY2VvZiBFcnJvcj9jLm1lc3NhZ2U6YykpfX0sbz1lJiZzZXRUaW1lb3V0KCgpPT57bihuZXcgUShgdGltZW91dCAke2V9IG9mIG1zIGV4Y2VlZGVkYCxRLkVUSU1FRE9VVCkpfSxlKSxpPSgpPT57QSYmKG8mJmNsZWFyVGltZW91dChvKSxvPW51bGwsQS5mb3JFYWNoKEM9PntDJiYoQy5yZW1vdmVFdmVudExpc3RlbmVyP0MucmVtb3ZlRXZlbnRMaXN0ZW5lcigiYWJvcnQiLG4pOkMudW5zdWJzY3JpYmUobikpfSksQT1udWxsKX07QS5mb3JFYWNoKEM9PkMmJkMuYWRkRXZlbnRMaXN0ZW5lciYmQy5hZGRFdmVudExpc3RlbmVyKCJhYm9ydCIsbikpO2xldHtzaWduYWw6Z309dDtyZXR1cm4gZy51bnN1YnNjcmliZT1pLFtnLCgpPT57byYmY2xlYXJUaW1lb3V0KG8pLG89bnVsbH1dfSxodD15bjt2YXIgaG49ZnVuY3Rpb24qKEEsZSl7bGV0IHQ9QS5ieXRlTGVuZ3RoO2lmKCFlfHx0PGUpe3lpZWxkIEE7cmV0dXJufWxldCByPTAsbjtmb3IoO3I8dDspbj1yK2UseWllbGQgQS5zbGljZShyLG4pLHI9bn0sd249YXN5bmMgZnVuY3Rpb24qKEEsZSx0KXtmb3IgYXdhaXQobGV0IHIgb2YgQSl5aWVsZCpobihBcnJheUJ1ZmZlci5pc1ZpZXcocik/cjphd2FpdCB0KFN0cmluZyhyKSksZSl9LG1lPShBLGUsdCxyLG4pPT57bGV0IG89d24oQSxlLG4pLGk9MCxnLEM9Yz0+e2d8fChnPSEwLHImJnIoYykpfTtyZXR1cm4gbmV3IFJlYWRhYmxlU3RyZWFtKHthc3luYyBwdWxsKGMpe3RyeXtsZXR7ZG9uZTphLHZhbHVlOkl9PWF3YWl0IG8ubmV4dCgpO2lmKGEpe0MoKSxjLmNsb3NlKCk7cmV0dXJufWxldCBmPUkuYnl0ZUxlbmd0aDtpZih0KXtsZXQgbD1pKz1mO3QobCl9Yy5lbnF1ZXVlKG5ldyBVaW50OEFycmF5KEkpKX1jYXRjaChhKXt0aHJvdyBDKGEpLGF9fSxjYW5jZWwoYyl7cmV0dXJuIEMoYyksby5yZXR1cm4oKX19LHtoaWdoV2F0ZXJNYXJrOjJ9KX07dmFyIFRBPXR5cGVvZiBmZXRjaD09ImZ1bmN0aW9uIiYmdHlwZW9mIFJlcXVlc3Q9PSJmdW5jdGlvbiImJnR5cGVvZiBSZXNwb25zZT09ImZ1bmN0aW9uIixEdD1UQSYmdHlwZW9mIFJlYWRhYmxlU3RyZWFtPT0iZnVuY3Rpb24iLHllPVRBJiYodHlwZW9mIFRleHRFbmNvZGVyPT0iZnVuY3Rpb24iPyhBPT5lPT5BLmVuY29kZShlKSkobmV3IFRleHRFbmNvZGVyKTphc3luYyBBPT5uZXcgVWludDhBcnJheShhd2FpdCBuZXcgUmVzcG9uc2UoQSkuYXJyYXlCdWZmZXIoKSkpLFN0PShBLC4uLmUpPT57dHJ5e3JldHVybiEhQSguLi5lKX1jYXRjaHtyZXR1cm4hMX19LERuPUR0JiZTdCgoKT0+e2xldCBBPSExLGU9bmV3IFJlcXVlc3QoUy5vcmlnaW4se2JvZHk6bmV3IFJlYWRhYmxlU3RyZWFtLG1ldGhvZDoiUE9TVCIsZ2V0IGR1cGxleCgpe3JldHVybiBBPSEwLCJoYWxmIn19KS5oZWFkZXJzLmhhcygiQ29udGVudC1UeXBlIik7cmV0dXJuIEEmJiFlfSksd3Q9NjQqMTAyNCxoZT1EdCYmU3QoKCk9PnMuaXNSZWFkYWJsZVN0cmVhbShuZXcgUmVzcG9uc2UoIiIpLmJvZHkpKSxOQT17c3RyZWFtOmhlJiYoQT0+QS5ib2R5KX07VEEmJihBPT57WyJ0ZXh0IiwiYXJyYXlCdWZmZXIiLCJibG9iIiwiZm9ybURhdGEiLCJzdHJlYW0iXS5mb3JFYWNoKGU9PnshTkFbZV0mJihOQVtlXT1zLmlzRnVuY3Rpb24oQVtlXSk/dD0+dFtlXSgpOih0LHIpPT57dGhyb3cgbmV3IFEoYFJlc3BvbnNlIHR5cGUgJyR7ZX0nIGlzIG5vdCBzdXBwb3J0ZWRgLFEuRVJSX05PVF9TVVBQT1JULHIpfSl9KX0pKG5ldyBSZXNwb25zZSk7dmFyIFNuPWFzeW5jIEE9PntpZihBPT1udWxsKXJldHVybiAwO2lmKHMuaXNCbG9iKEEpKXJldHVybiBBLnNpemU7aWYocy5pc1NwZWNDb21wbGlhbnRGb3JtKEEpKXJldHVybihhd2FpdCBuZXcgUmVxdWVzdChBKS5hcnJheUJ1ZmZlcigpKS5ieXRlTGVuZ3RoO2lmKHMuaXNBcnJheUJ1ZmZlclZpZXcoQSl8fHMuaXNBcnJheUJ1ZmZlcihBKSlyZXR1cm4gQS5ieXRlTGVuZ3RoO2lmKHMuaXNVUkxTZWFyY2hQYXJhbXMoQSkmJihBPUErIiIpLHMuaXNTdHJpbmcoQSkpcmV0dXJuKGF3YWl0IHllKEEpKS5ieXRlTGVuZ3RofSxibj1hc3luYyhBLGUpPT57bGV0IHQ9cy50b0Zpbml0ZU51bWJlcihBLmdldENvbnRlbnRMZW5ndGgoKSk7cmV0dXJuIHQ/P1NuKGUpfSxidD1UQSYmKGFzeW5jIEE9PntsZXR7dXJsOmUsbWV0aG9kOnQsZGF0YTpyLHNpZ25hbDpuLGNhbmNlbFRva2VuOm8sdGltZW91dDppLG9uRG93bmxvYWRQcm9ncmVzczpnLG9uVXBsb2FkUHJvZ3Jlc3M6QyxyZXNwb25zZVR5cGU6YyxoZWFkZXJzOmEsd2l0aENyZWRlbnRpYWxzOkk9InNhbWUtb3JpZ2luIixmZXRjaE9wdGlvbnM6Zn09VUEoQSk7Yz1jPyhjKyIiKS50b0xvd2VyQ2FzZSgpOiJ0ZXh0IjtsZXRbbCx1XT1ufHxvfHxpP2h0KFtuLG9dLGkpOltdLEUsQixtPSgpPT57IUUmJnNldFRpbWVvdXQoKCk9PntsJiZsLnVuc3Vic2NyaWJlKCl9KSxFPSEwfSxiO3RyeXtpZihDJiZEbiYmdCE9PSJnZXQiJiZ0IT09ImhlYWQiJiYoYj1hd2FpdCBibihhLHIpKSE9PTApe2xldCB4PW5ldyBSZXF1ZXN0KGUse21ldGhvZDoiUE9TVCIsYm9keTpyLGR1cGxleDoiaGFsZiJ9KSxMO2lmKHMuaXNGb3JtRGF0YShyKSYmKEw9eC5oZWFkZXJzLmdldCgiY29udGVudC10eXBlIikpJiZhLnNldENvbnRlbnRUeXBlKEwpLHguYm9keSl7bGV0W1lBLGZBXT1FZShiLFYoUWUoQykpKTtyPW1lKHguYm9keSx3dCxZQSxmQSx5ZSl9fXMuaXNTdHJpbmcoSSl8fChJPUk/ImluY2x1ZGUiOiJvbWl0IiksQj1uZXcgUmVxdWVzdChlLHsuLi5mLHNpZ25hbDpsLG1ldGhvZDp0LnRvVXBwZXJDYXNlKCksaGVhZGVyczphLm5vcm1hbGl6ZSgpLnRvSlNPTigpLGJvZHk6cixkdXBsZXg6ImhhbGYiLGNyZWRlbnRpYWxzOkl9KTtsZXQgcD1hd2FpdCBmZXRjaChCKSxOPWhlJiYoYz09PSJzdHJlYW0ifHxjPT09InJlc3BvbnNlIik7aWYoaGUmJihnfHxOKSl7bGV0IHg9e307WyJzdGF0dXMiLCJzdGF0dXNUZXh0IiwiaGVhZGVycyJdLmZvckVhY2goUGU9Pnt4W1BlXT1wW1BlXX0pO2xldCBMPXMudG9GaW5pdGVOdW1iZXIocC5oZWFkZXJzLmdldCgiY29udGVudC1sZW5ndGgiKSksW1lBLGZBXT1nJiZFZShMLFYoUWUoZyksITApKXx8W107cD1uZXcgUmVzcG9uc2UobWUocC5ib2R5LHd0LFlBLCgpPT57ZkEmJmZBKCksTiYmbSgpfSx5ZSkseCl9Yz1jfHwidGV4dCI7bGV0IHE9YXdhaXQgTkFbcy5maW5kS2V5KE5BLGMpfHwidGV4dCJdKHAsQSk7cmV0dXJuIU4mJm0oKSx1JiZ1KCksYXdhaXQgbmV3IFByb21pc2UoKHgsTCk9PntnQSh4LEwse2RhdGE6cSxoZWFkZXJzOncuZnJvbShwLmhlYWRlcnMpLHN0YXR1czpwLnN0YXR1cyxzdGF0dXNUZXh0OnAuc3RhdHVzVGV4dCxjb25maWc6QSxyZXF1ZXN0OkJ9KX0pfWNhdGNoKHApe3Rocm93IG0oKSxwJiZwLm5hbWU9PT0iVHlwZUVycm9yIiYmL2ZldGNoL2kudGVzdChwLm1lc3NhZ2UpP09iamVjdC5hc3NpZ24obmV3IFEoIk5ldHdvcmsgRXJyb3IiLFEuRVJSX05FVFdPUkssQSxCKSx7Y2F1c2U6cC5jYXVzZXx8cH0pOlEuZnJvbShwLHAmJnAuY29kZSxBLEIpfX0pO3ZhciB3ZT17aHR0cDpTQSx4aHI6eXQsZmV0Y2g6YnR9O3MuZm9yRWFjaCh3ZSwoQSxlKT0+e2lmKEEpe3RyeXtPYmplY3QuZGVmaW5lUHJvcGVydHkoQSwibmFtZSIse3ZhbHVlOmV9KX1jYXRjaHt9T2JqZWN0LmRlZmluZVByb3BlcnR5KEEsImFkYXB0ZXJOYW1lIix7dmFsdWU6ZX0pfX0pO3ZhciBSdD1BPT5gLSAke0F9YCxSbj1BPT5zLmlzRnVuY3Rpb24oQSl8fEE9PT1udWxsfHxBPT09ITEsUEE9e2dldEFkYXB0ZXI6QT0+e0E9cy5pc0FycmF5KEEpP0E6W0FdO2xldHtsZW5ndGg6ZX09QSx0LHIsbj17fTtmb3IobGV0IG89MDtvPGU7bysrKXt0PUFbb107bGV0IGk7aWYocj10LCFSbih0KSYmKHI9d2VbKGk9U3RyaW5nKHQpKS50b0xvd2VyQ2FzZSgpXSxyPT09dm9pZCAwKSl0aHJvdyBuZXcgUShgVW5rbm93biBhZGFwdGVyICcke2l9J2ApO2lmKHIpYnJlYWs7bltpfHwiIyIrb109cn1pZighcil7bGV0IG89T2JqZWN0LmVudHJpZXMobikubWFwKChbZyxDXSk9PmBhZGFwdGVyICR7Z30gYCsoQz09PSExPyJpcyBub3Qgc3VwcG9ydGVkIGJ5IHRoZSBlbnZpcm9ubWVudCI6ImlzIG5vdCBhdmFpbGFibGUgaW4gdGhlIGJ1aWxkIikpLGk9ZT9vLmxlbmd0aD4xP2BzaW5jZSA6CmArby5tYXAoUnQpLmpvaW4oYApgKToiICIrUnQob1swXSk6ImFzIG5vIGFkYXB0ZXIgc3BlY2lmaWVkIjt0aHJvdyBuZXcgUSgiVGhlcmUgaXMgbm8gc3VpdGFibGUgYWRhcHRlciB0byBkaXNwYXRjaCB0aGUgcmVxdWVzdCAiK2ksIkVSUl9OT1RfU1VQUE9SVCIpfXJldHVybiByfSxhZGFwdGVyczp3ZX07ZnVuY3Rpb24gRGUoQSl7aWYoQS5jYW5jZWxUb2tlbiYmQS5jYW5jZWxUb2tlbi50aHJvd0lmUmVxdWVzdGVkKCksQS5zaWduYWwmJkEuc2lnbmFsLmFib3J0ZWQpdGhyb3cgbmV3IEcobnVsbCxBKX1mdW5jdGlvbiB4QShBKXtyZXR1cm4gRGUoQSksQS5oZWFkZXJzPXcuZnJvbShBLmhlYWRlcnMpLEEuZGF0YT1hQS5jYWxsKEEsQS50cmFuc2Zvcm1SZXF1ZXN0KSxbInBvc3QiLCJwdXQiLCJwYXRjaCJdLmluZGV4T2YoQS5tZXRob2QpIT09LTEmJkEuaGVhZGVycy5zZXRDb250ZW50VHlwZSgiYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkIiwhMSksUEEuZ2V0QWRhcHRlcihBLmFkYXB0ZXJ8fF8uYWRhcHRlcikoQSkudGhlbihmdW5jdGlvbihyKXtyZXR1cm4gRGUoQSksci5kYXRhPWFBLmNhbGwoQSxBLnRyYW5zZm9ybVJlc3BvbnNlLHIpLHIuaGVhZGVycz13LmZyb20oci5oZWFkZXJzKSxyfSxmdW5jdGlvbihyKXtyZXR1cm4gSUEocil8fChEZShBKSxyJiZyLnJlc3BvbnNlJiYoci5yZXNwb25zZS5kYXRhPWFBLmNhbGwoQSxBLnRyYW5zZm9ybVJlc3BvbnNlLHIucmVzcG9uc2UpLHIucmVzcG9uc2UuaGVhZGVycz13LmZyb20oci5yZXNwb25zZS5oZWFkZXJzKSkpLFByb21pc2UucmVqZWN0KHIpfSl9dmFyIExBPSIxLjcuNCI7dmFyIFNlPXt9O1sib2JqZWN0IiwiYm9vbGVhbiIsIm51bWJlciIsImZ1bmN0aW9uIiwic3RyaW5nIiwic3ltYm9sIl0uZm9yRWFjaCgoQSxlKT0+e1NlW0FdPWZ1bmN0aW9uKHIpe3JldHVybiB0eXBlb2Ygcj09PUF8fCJhIisoZTwxPyJuICI6IiAiKStBfX0pO3ZhciBrdD17fTtTZS50cmFuc2l0aW9uYWw9ZnVuY3Rpb24oZSx0LHIpe2Z1bmN0aW9uIG4obyxpKXtyZXR1cm4iW0F4aW9zIHYiK0xBKyJdIFRyYW5zaXRpb25hbCBvcHRpb24gJyIrbysiJyIraSsocj8iLiAiK3I6IiIpfXJldHVybihvLGksZyk9PntpZihlPT09ITEpdGhyb3cgbmV3IFEobihpLCIgaGFzIGJlZW4gcmVtb3ZlZCIrKHQ/IiBpbiAiK3Q6IiIpKSxRLkVSUl9ERVBSRUNBVEVEKTtyZXR1cm4gdCYmIWt0W2ldJiYoa3RbaV09ITAsY29uc29sZS53YXJuKG4oaSwiIGhhcyBiZWVuIGRlcHJlY2F0ZWQgc2luY2UgdiIrdCsiIGFuZCB3aWxsIGJlIHJlbW92ZWQgaW4gdGhlIG5lYXIgZnV0dXJlIikpKSxlP2UobyxpLGcpOiEwfX07ZnVuY3Rpb24ga24oQSxlLHQpe2lmKHR5cGVvZiBBIT0ib2JqZWN0Iil0aHJvdyBuZXcgUSgib3B0aW9ucyBtdXN0IGJlIGFuIG9iamVjdCIsUS5FUlJfQkFEX09QVElPTl9WQUxVRSk7bGV0IHI9T2JqZWN0LmtleXMoQSksbj1yLmxlbmd0aDtmb3IoO24tLSA+MDspe2xldCBvPXJbbl0saT1lW29dO2lmKGkpe2xldCBnPUFbb10sQz1nPT09dm9pZCAwfHxpKGcsbyxBKTtpZihDIT09ITApdGhyb3cgbmV3IFEoIm9wdGlvbiAiK28rIiBtdXN0IGJlICIrQyxRLkVSUl9CQURfT1BUSU9OX1ZBTFVFKTtjb250aW51ZX1pZih0IT09ITApdGhyb3cgbmV3IFEoIlVua25vd24gb3B0aW9uICIrbyxRLkVSUl9CQURfT1BUSU9OKX19dmFyIEdBPXthc3NlcnRPcHRpb25zOmtuLHZhbGlkYXRvcnM6U2V9O3ZhciBNPUdBLnZhbGlkYXRvcnMsWj1jbGFzc3tjb25zdHJ1Y3RvcihlKXt0aGlzLmRlZmF1bHRzPWUsdGhpcy5pbnRlcmNlcHRvcnM9e3JlcXVlc3Q6bmV3IGdlLHJlc3BvbnNlOm5ldyBnZX19YXN5bmMgcmVxdWVzdChlLHQpe3RyeXtyZXR1cm4gYXdhaXQgdGhpcy5fcmVxdWVzdChlLHQpfWNhdGNoKHIpe2lmKHIgaW5zdGFuY2VvZiBFcnJvcil7bGV0IG47RXJyb3IuY2FwdHVyZVN0YWNrVHJhY2U/RXJyb3IuY2FwdHVyZVN0YWNrVHJhY2Uobj17fSk6bj1uZXcgRXJyb3I7bGV0IG89bi5zdGFjaz9uLnN0YWNrLnJlcGxhY2UoL14uK1xuLywiIik6IiI7dHJ5e3Iuc3RhY2s/byYmIVN0cmluZyhyLnN0YWNrKS5lbmRzV2l0aChvLnJlcGxhY2UoL14uK1xuLitcbi8sIiIpKSYmKHIuc3RhY2srPWAKYCtvKTpyLnN0YWNrPW99Y2F0Y2h7fX10aHJvdyByfX1fcmVxdWVzdChlLHQpe3R5cGVvZiBlPT0ic3RyaW5nIj8odD10fHx7fSx0LnVybD1lKTp0PWV8fHt9LHQ9UCh0aGlzLmRlZmF1bHRzLHQpO2xldHt0cmFuc2l0aW9uYWw6cixwYXJhbXNTZXJpYWxpemVyOm4saGVhZGVyczpvfT10O3IhPT12b2lkIDAmJkdBLmFzc2VydE9wdGlvbnMocix7c2lsZW50SlNPTlBhcnNpbmc6TS50cmFuc2l0aW9uYWwoTS5ib29sZWFuKSxmb3JjZWRKU09OUGFyc2luZzpNLnRyYW5zaXRpb25hbChNLmJvb2xlYW4pLGNsYXJpZnlUaW1lb3V0RXJyb3I6TS50cmFuc2l0aW9uYWwoTS5ib29sZWFuKX0sITEpLG4hPW51bGwmJihzLmlzRnVuY3Rpb24obik/dC5wYXJhbXNTZXJpYWxpemVyPXtzZXJpYWxpemU6bn06R0EuYXNzZXJ0T3B0aW9ucyhuLHtlbmNvZGU6TS5mdW5jdGlvbixzZXJpYWxpemU6TS5mdW5jdGlvbn0sITApKSx0Lm1ldGhvZD0odC5tZXRob2R8fHRoaXMuZGVmYXVsdHMubWV0aG9kfHwiZ2V0IikudG9Mb3dlckNhc2UoKTtsZXQgaT1vJiZzLm1lcmdlKG8uY29tbW9uLG9bdC5tZXRob2RdKTtvJiZzLmZvckVhY2goWyJkZWxldGUiLCJnZXQiLCJoZWFkIiwicG9zdCIsInB1dCIsInBhdGNoIiwiY29tbW9uIl0sdT0+e2RlbGV0ZSBvW3VdfSksdC5oZWFkZXJzPXcuY29uY2F0KGksbyk7bGV0IGc9W10sQz0hMDt0aGlzLmludGVyY2VwdG9ycy5yZXF1ZXN0LmZvckVhY2goZnVuY3Rpb24oRSl7dHlwZW9mIEUucnVuV2hlbj09ImZ1bmN0aW9uIiYmRS5ydW5XaGVuKHQpPT09ITF8fChDPUMmJkUuc3luY2hyb25vdXMsZy51bnNoaWZ0KEUuZnVsZmlsbGVkLEUucmVqZWN0ZWQpKX0pO2xldCBjPVtdO3RoaXMuaW50ZXJjZXB0b3JzLnJlc3BvbnNlLmZvckVhY2goZnVuY3Rpb24oRSl7Yy5wdXNoKEUuZnVsZmlsbGVkLEUucmVqZWN0ZWQpfSk7bGV0IGEsST0wLGY7aWYoIUMpe2xldCB1PVt4QS5iaW5kKHRoaXMpLHZvaWQgMF07Zm9yKHUudW5zaGlmdC5hcHBseSh1LGcpLHUucHVzaC5hcHBseSh1LGMpLGY9dS5sZW5ndGgsYT1Qcm9taXNlLnJlc29sdmUodCk7STxmOylhPWEudGhlbih1W0krK10sdVtJKytdKTtyZXR1cm4gYX1mPWcubGVuZ3RoO2xldCBsPXQ7Zm9yKEk9MDtJPGY7KXtsZXQgdT1nW0krK10sRT1nW0krK107dHJ5e2w9dShsKX1jYXRjaChCKXtFLmNhbGwodGhpcyxCKTticmVha319dHJ5e2E9eEEuY2FsbCh0aGlzLGwpfWNhdGNoKHUpe3JldHVybiBQcm9taXNlLnJlamVjdCh1KX1mb3IoST0wLGY9Yy5sZW5ndGg7STxmOylhPWEudGhlbihjW0krK10sY1tJKytdKTtyZXR1cm4gYX1nZXRVcmkoZSl7ZT1QKHRoaXMuZGVmYXVsdHMsZSk7bGV0IHQ9bEEoZS5iYXNlVVJMLGUudXJsKTtyZXR1cm4gaUEodCxlLnBhcmFtcyxlLnBhcmFtc1NlcmlhbGl6ZXIpfX07cy5mb3JFYWNoKFsiZGVsZXRlIiwiZ2V0IiwiaGVhZCIsIm9wdGlvbnMiXSxmdW5jdGlvbihlKXtaLnByb3RvdHlwZVtlXT1mdW5jdGlvbih0LHIpe3JldHVybiB0aGlzLnJlcXVlc3QoUChyfHx7fSx7bWV0aG9kOmUsdXJsOnQsZGF0YToocnx8e30pLmRhdGF9KSl9fSk7cy5mb3JFYWNoKFsicG9zdCIsInB1dCIsInBhdGNoIl0sZnVuY3Rpb24oZSl7ZnVuY3Rpb24gdChyKXtyZXR1cm4gZnVuY3Rpb24obyxpLGcpe3JldHVybiB0aGlzLnJlcXVlc3QoUChnfHx7fSx7bWV0aG9kOmUsaGVhZGVyczpyP3siQ29udGVudC1UeXBlIjoibXVsdGlwYXJ0L2Zvcm0tZGF0YSJ9Ont9LHVybDpvLGRhdGE6aX0pKX19Wi5wcm90b3R5cGVbZV09dCgpLFoucHJvdG90eXBlW2UrIkZvcm0iXT10KCEwKX0pO3ZhciBjQT1aO3ZhciBiZT1jbGFzcyBBe2NvbnN0cnVjdG9yKGUpe2lmKHR5cGVvZiBlIT0iZnVuY3Rpb24iKXRocm93IG5ldyBUeXBlRXJyb3IoImV4ZWN1dG9yIG11c3QgYmUgYSBmdW5jdGlvbi4iKTtsZXQgdDt0aGlzLnByb21pc2U9bmV3IFByb21pc2UoZnVuY3Rpb24obyl7dD1vfSk7bGV0IHI9dGhpczt0aGlzLnByb21pc2UudGhlbihuPT57aWYoIXIuX2xpc3RlbmVycylyZXR1cm47bGV0IG89ci5fbGlzdGVuZXJzLmxlbmd0aDtmb3IoO28tLSA+MDspci5fbGlzdGVuZXJzW29dKG4pO3IuX2xpc3RlbmVycz1udWxsfSksdGhpcy5wcm9taXNlLnRoZW49bj0+e2xldCBvLGk9bmV3IFByb21pc2UoZz0+e3Iuc3Vic2NyaWJlKGcpLG89Z30pLnRoZW4obik7cmV0dXJuIGkuY2FuY2VsPWZ1bmN0aW9uKCl7ci51bnN1YnNjcmliZShvKX0saX0sZShmdW5jdGlvbihvLGksZyl7ci5yZWFzb258fChyLnJlYXNvbj1uZXcgRyhvLGksZyksdChyLnJlYXNvbikpfSl9dGhyb3dJZlJlcXVlc3RlZCgpe2lmKHRoaXMucmVhc29uKXRocm93IHRoaXMucmVhc29ufXN1YnNjcmliZShlKXtpZih0aGlzLnJlYXNvbil7ZSh0aGlzLnJlYXNvbik7cmV0dXJufXRoaXMuX2xpc3RlbmVycz90aGlzLl9saXN0ZW5lcnMucHVzaChlKTp0aGlzLl9saXN0ZW5lcnM9W2VdfXVuc3Vic2NyaWJlKGUpe2lmKCF0aGlzLl9saXN0ZW5lcnMpcmV0dXJuO2xldCB0PXRoaXMuX2xpc3RlbmVycy5pbmRleE9mKGUpO3QhPT0tMSYmdGhpcy5fbGlzdGVuZXJzLnNwbGljZSh0LDEpfXN0YXRpYyBzb3VyY2UoKXtsZXQgZTtyZXR1cm57dG9rZW46bmV3IEEoZnVuY3Rpb24obil7ZT1ufSksY2FuY2VsOmV9fX0sRnQ9YmU7ZnVuY3Rpb24gUmUoQSl7cmV0dXJuIGZ1bmN0aW9uKHQpe3JldHVybiBBLmFwcGx5KG51bGwsdCl9fWZ1bmN0aW9uIGtlKEEpe3JldHVybiBzLmlzT2JqZWN0KEEpJiZBLmlzQXhpb3NFcnJvcj09PSEwfXZhciBGZT17Q29udGludWU6MTAwLFN3aXRjaGluZ1Byb3RvY29sczoxMDEsUHJvY2Vzc2luZzoxMDIsRWFybHlIaW50czoxMDMsT2s6MjAwLENyZWF0ZWQ6MjAxLEFjY2VwdGVkOjIwMixOb25BdXRob3JpdGF0aXZlSW5mb3JtYXRpb246MjAzLE5vQ29udGVudDoyMDQsUmVzZXRDb250ZW50OjIwNSxQYXJ0aWFsQ29udGVudDoyMDYsTXVsdGlTdGF0dXM6MjA3LEFscmVhZHlSZXBvcnRlZDoyMDgsSW1Vc2VkOjIyNixNdWx0aXBsZUNob2ljZXM6MzAwLE1vdmVkUGVybWFuZW50bHk6MzAxLEZvdW5kOjMwMixTZWVPdGhlcjozMDMsTm90TW9kaWZpZWQ6MzA0LFVzZVByb3h5OjMwNSxVbnVzZWQ6MzA2LFRlbXBvcmFyeVJlZGlyZWN0OjMwNyxQZXJtYW5lbnRSZWRpcmVjdDozMDgsQmFkUmVxdWVzdDo0MDAsVW5hdXRob3JpemVkOjQwMSxQYXltZW50UmVxdWlyZWQ6NDAyLEZvcmJpZGRlbjo0MDMsTm90Rm91bmQ6NDA0LE1ldGhvZE5vdEFsbG93ZWQ6NDA1LE5vdEFjY2VwdGFibGU6NDA2LFByb3h5QXV0aGVudGljYXRpb25SZXF1aXJlZDo0MDcsUmVxdWVzdFRpbWVvdXQ6NDA4LENvbmZsaWN0OjQwOSxHb25lOjQxMCxMZW5ndGhSZXF1aXJlZDo0MTEsUHJlY29uZGl0aW9uRmFpbGVkOjQxMixQYXlsb2FkVG9vTGFyZ2U6NDEzLFVyaVRvb0xvbmc6NDE0LFVuc3VwcG9ydGVkTWVkaWFUeXBlOjQxNSxSYW5nZU5vdFNhdGlzZmlhYmxlOjQxNixFeHBlY3RhdGlvbkZhaWxlZDo0MTcsSW1BVGVhcG90OjQxOCxNaXNkaXJlY3RlZFJlcXVlc3Q6NDIxLFVucHJvY2Vzc2FibGVFbnRpdHk6NDIyLExvY2tlZDo0MjMsRmFpbGVkRGVwZW5kZW5jeTo0MjQsVG9vRWFybHk6NDI1LFVwZ3JhZGVSZXF1aXJlZDo0MjYsUHJlY29uZGl0aW9uUmVxdWlyZWQ6NDI4LFRvb01hbnlSZXF1ZXN0czo0MjksUmVxdWVzdEhlYWRlckZpZWxkc1Rvb0xhcmdlOjQzMSxVbmF2YWlsYWJsZUZvckxlZ2FsUmVhc29uczo0NTEsSW50ZXJuYWxTZXJ2ZXJFcnJvcjo1MDAsTm90SW1wbGVtZW50ZWQ6NTAxLEJhZEdhdGV3YXk6NTAyLFNlcnZpY2VVbmF2YWlsYWJsZTo1MDMsR2F0ZXdheVRpbWVvdXQ6NTA0LEh0dHBWZXJzaW9uTm90U3VwcG9ydGVkOjUwNSxWYXJpYW50QWxzb05lZ290aWF0ZXM6NTA2LEluc3VmZmljaWVudFN0b3JhZ2U6NTA3LExvb3BEZXRlY3RlZDo1MDgsTm90RXh0ZW5kZWQ6NTEwLE5ldHdvcmtBdXRoZW50aWNhdGlvblJlcXVpcmVkOjUxMX07T2JqZWN0LmVudHJpZXMoRmUpLmZvckVhY2goKFtBLGVdKT0+e0ZlW2VdPUF9KTt2YXIgVXQ9RmU7ZnVuY3Rpb24gTnQoQSl7bGV0IGU9bmV3IGNBKEEpLHQ9ckEoY0EucHJvdG90eXBlLnJlcXVlc3QsZSk7cmV0dXJuIHMuZXh0ZW5kKHQsY0EucHJvdG90eXBlLGUse2FsbE93bktleXM6ITB9KSxzLmV4dGVuZCh0LGUsbnVsbCx7YWxsT3duS2V5czohMH0pLHQuY3JlYXRlPWZ1bmN0aW9uKG4pe3JldHVybiBOdChQKEEsbikpfSx0fXZhciB5PU50KF8pO3kuQXhpb3M9Y0E7eS5DYW5jZWxlZEVycm9yPUc7eS5DYW5jZWxUb2tlbj1GdDt5LmlzQ2FuY2VsPUlBO3kuVkVSU0lPTj1MQTt5LnRvRm9ybURhdGE9Sjt5LkF4aW9zRXJyb3I9UTt5LkNhbmNlbD15LkNhbmNlbGVkRXJyb3I7eS5hbGw9ZnVuY3Rpb24oZSl7cmV0dXJuIFByb21pc2UuYWxsKGUpfTt5LnNwcmVhZD1SZTt5LmlzQXhpb3NFcnJvcj1rZTt5Lm1lcmdlQ29uZmlnPVA7eS5BeGlvc0hlYWRlcnM9dzt5LmZvcm1Ub0pTT049QT0+a0Eocy5pc0hUTUxGb3JtKEEpP25ldyBGb3JtRGF0YShBKTpBKTt5LmdldEFkYXB0ZXI9UEEuZ2V0QWRhcHRlcjt5Lkh0dHBTdGF0dXNDb2RlPVV0O3kuZGVmYXVsdD15O3ZhciBYPXk7dmFye0F4aW9zOnZhLEF4aW9zRXJyb3I6amEsQ2FuY2VsZWRFcnJvcjpfYSxpc0NhbmNlbDp6YSxDYW5jZWxUb2tlbjpWYSxWRVJTSU9OOlphLGFsbDpYYSxDYW5jZWw6JGEsaXNBeGlvc0Vycm9yOkFJLHNwcmVhZDplSSx0b0Zvcm1EYXRhOnRJLEF4aW9zSGVhZGVyczpySSxIdHRwU3RhdHVzQ29kZTpuSSxmb3JtVG9KU09OOm9JLGdldEFkYXB0ZXI6aUksbWVyZ2VDb25maWc6c0l9PVg7YXN5bmMgZnVuY3Rpb24gRm4oQSxlKXtsZXQgdD1BLHI9bnVsbDtpZih0PT1udWxsKXI9bmV3IFdvcmtlcihuZXcgVVJMKCIuL3dlYi13b3JrZXJzL2l0ay13YXNtLXBpcGVsaW5lLndvcmtlci5qcyIsaW1wb3J0Lm1ldGEudXJsKSx7dHlwZToibW9kdWxlIn0pO2Vsc2UgaWYodC5zdGFydHNXaXRoKCJodHRwIikpe2xldCBuPWF3YWl0IFguZ2V0KHQse3Jlc3BvbnNlVHlwZToiYmxvYiIscGFyYW1zOmV9KSxvPVVSTC5jcmVhdGVPYmplY3RVUkwobi5kYXRhKTtyPW5ldyBXb3JrZXIobyx7dHlwZToibW9kdWxlIn0pfWVsc2Ugcj1uZXcgV29ya2VyKHQse3R5cGU6Im1vZHVsZSJ9KTtyZXR1cm4gcn12YXIgQ0E9Rm47ZnVuY3Rpb24gVHQoQSl7bGV0IGU9cmUoQSksdD1BO3JldHVybiB0LnRlcm1pbmF0ZWQ9ITEsdC53b3JrZXJQcm94eT1lLHQub3JpZ2luYWxUZXJtaW5hdGU9dC50ZXJtaW5hdGUsdC50ZXJtaW5hdGU9KCk9Pnt0LnRlcm1pbmF0ZWQ9ITAsdC53b3JrZXJQcm94eVt0ZV0oKSx0Lm9yaWdpbmFsVGVybWluYXRlKCl9LHt3b3JrZXJQcm94eTplLHdvcmtlcjp0fX1hc3luYyBmdW5jdGlvbiBVbihBLGUsdCl7bGV0IHI7aWYoQSE9bnVsbCl7bGV0IG89QTtyZXR1cm4gby53b3JrZXJQcm94eSE9PXZvaWQgMD8ocj1vLndvcmtlclByb3h5LHt3b3JrZXJQcm94eTpyLHdvcmtlcjpvfSk6VHQoQSl9bGV0IG49YXdhaXQgQ0EoZSx0KTtyZXR1cm4gVHQobil9dmFyIFB0PVVuO2FzeW5jIGZ1bmN0aW9uIE5uKEEsZSx0KXtsZXQgcj0idW5rbm93biI7dHlwZW9mIEEhPSJzdHJpbmciP3I9QS5ocmVmOkEuc3RhcnRzV2l0aCgiaHR0cCIpP3I9QTpyPXR5cGVvZiBlPCJ1Ij9gJHtlfS8ke0F9YDpBLHIuZW5kc1dpdGgoIi5qcyIpJiYocj1yLnN1YnN0cmluZygwLHIubGVuZ3RoLTMpKSxyLmVuZHNXaXRoKCIud2FzbSIpJiYocj1yLnN1YnN0cmluZygwLHIubGVuZ3RoLTUpKTtsZXQgbj1gJHtyfS53YXNtYCxpPShhd2FpdCBYLmdldChuLHtyZXNwb25zZVR5cGU6ImFycmF5YnVmZmVyIixwYXJhbXM6dH0pKS5kYXRhO3JldHVybihhd2FpdCBpbXBvcnQoYCR7cn0uanNgKSkuZGVmYXVsdCh7d2FzbUJpbmFyeTppfSl9dmFyIHh0PU5uO3ZhciBMdD1hc3luYygpPT5XZWJBc3NlbWJseS52YWxpZGF0ZShuZXcgVWludDhBcnJheShbMCw5NywxMTUsMTA5LDEsMCwwLDAsMSw1LDEsOTYsMCwxLDEyMywzLDIsMSwwLDEwLDEwLDEsOCwwLDY1LDAsMjUzLDE1LDI1Myw5OCwxMV0pKTt2YXIgSnQ9dHlwZW9mIGdsb2JhbFRoaXMuU2hhcmVkQXJyYXlCdWZmZXI9PSJmdW5jdGlvbiIsR3Q9bmV3IFRleHRFbmNvZGVyLE90PW5ldyBUZXh0RGVjb2RlcigidXRmLTgiKTtmdW5jdGlvbiBUbihBLGUpe2xldCB0PXtmbGFnczoiciIsZW5jb2Rpbmc6ImJpbmFyeSJ9LHI9QS5mc19vcGVuKGUsdC5mbGFncyksbz1BLmZzX3N0YXQoZSkuc2l6ZSxpPW51bGw7SnQ/aT1uZXcgU2hhcmVkQXJyYXlCdWZmZXIobyk6aT1uZXcgQXJyYXlCdWZmZXIobyk7bGV0IGc9bmV3IFVpbnQ4QXJyYXkoaSk7cmV0dXJuIEEuZnNfcmVhZChyLGcsMCxvLDApLEEuZnNfY2xvc2UociksZ31mdW5jdGlvbiBNdChBLGUsdCl7bGV0IHI9bnVsbDtKdD9yPW5ldyBTaGFyZWRBcnJheUJ1ZmZlcih0KTpyPW5ldyBBcnJheUJ1ZmZlcih0KTtsZXQgbj1uZXcgVWludDhBcnJheShyKSxvPW5ldyBVaW50OEFycmF5KEEuSEVBUFU4LmJ1ZmZlcixlLHQpO3JldHVybiBuLnNldChvKSxufWZ1bmN0aW9uIGgoQSxlLHQscil7bGV0IG49MDtyZXR1cm4gZSE9PW51bGwmJihuPUEuY2NhbGwoIml0a193YXNtX2lucHV0X2FycmF5X2FsbG9jIiwibnVtYmVyIixbIm51bWJlciIsIm51bWJlciIsIm51bWJlciIsIm51bWJlciJdLFswLHQscixlLmJ1ZmZlci5ieXRlTGVuZ3RoXSksQS5IRUFQVTguc2V0KG5ldyBVaW50OEFycmF5KGUuYnVmZmVyKSxuKSksbn1mdW5jdGlvbiBIKEEsZSx0KXtsZXQgcj1KU09OLnN0cmluZ2lmeShlKSxuPUEubGVuZ3RoQnl0ZXNVVEY4KHIpKzEsbz1BLmNjYWxsKCJpdGtfd2FzbV9pbnB1dF9qc29uX2FsbG9jIiwibnVtYmVyIixbIm51bWJlciIsIm51bWJlciIsIm51bWJlciJdLFswLHQsbl0pO0Euc3RyaW5nVG9VVEY4KHIsbyxuKX1mdW5jdGlvbiBSKEEsZSx0LHIpe2xldCBuPUEuY2NhbGwoIml0a193YXNtX291dHB1dF9hcnJheV9hZGRyZXNzIiwibnVtYmVyIixbIm51bWJlciIsIm51bWJlciIsIm51bWJlciJdLFswLGUsdF0pLG89QS5jY2FsbCgiaXRrX3dhc21fb3V0cHV0X2FycmF5X3NpemUiLCJudW1iZXIiLFsibnVtYmVyIiwibnVtYmVyIiwibnVtYmVyIl0sWzAsZSx0XSksaT1NdChBLG4sbyk7cmV0dXJuIGsocixpLmJ1ZmZlcil9ZnVuY3Rpb24gQkEoQSxlKXtsZXQgdD1BLmNjYWxsKCJpdGtfd2FzbV9vdXRwdXRfanNvbl9hZGRyZXNzIiwibnVtYmVyIixbIm51bWJlciIsIm51bWJlciJdLFswLGVdKSxyPUEuVVRGOFRvU3RyaW5nKHQpO3JldHVybiBKU09OLnBhcnNlKHIpfWZ1bmN0aW9uIFBuKEEsZSx0LHIpe3IhPW51bGwmJnIubGVuZ3RoPjAmJnIuZm9yRWFjaChmdW5jdGlvbihjLGEpe3N3aXRjaChjLnR5cGUpe2Nhc2UgZC5UZXh0U3RyZWFtOntsZXQgST1HdC5lbmNvZGUoYy5kYXRhLmRhdGEpLGY9aChBLEksYSwwKSxsPXtzaXplOkkuYnVmZmVyLmJ5dGVMZW5ndGgsZGF0YTpgZGF0YTphcHBsaWNhdGlvbi92bmQuaXRrLmFkZHJlc3MsMDoke2Z9YH07SChBLGwsYSk7YnJlYWt9Y2FzZSBkLkpzb25Db21wYXRpYmxlOntsZXQgST1HdC5lbmNvZGUoSlNPTi5zdHJpbmdpZnkoYy5kYXRhKSksZj1oKEEsSSxhLDApLGw9e3NpemU6SS5idWZmZXIuYnl0ZUxlbmd0aCxkYXRhOmBkYXRhOmFwcGxpY2F0aW9uL3ZuZC5pdGsuYWRkcmVzcywwOiR7Zn1gfTtIKEEsbCxhKTticmVha31jYXNlIGQuQmluYXJ5U3RyZWFtOntsZXQgST1jLmRhdGEuZGF0YSxmPWgoQSxJLGEsMCksbD17c2l6ZTpJLmJ1ZmZlci5ieXRlTGVuZ3RoLGRhdGE6YGRhdGE6YXBwbGljYXRpb24vdm5kLml0ay5hZGRyZXNzLDA6JHtmfWB9O0goQSxsLGEpO2JyZWFrfWNhc2UgZC5UZXh0RmlsZTp7QS5mc193cml0ZUZpbGUoYy5kYXRhLnBhdGgsYy5kYXRhLmRhdGEpO2JyZWFrfWNhc2UgZC5CaW5hcnlGaWxlOntBLmZzX3dyaXRlRmlsZShjLmRhdGEucGF0aCxjLmRhdGEuZGF0YSk7YnJlYWt9Y2FzZSBkLkltYWdlOntsZXQgST1jLmRhdGEsZj1oKEEsSS5kYXRhLGEsMCksbD1oKEEsSS5kaXJlY3Rpb24sYSwxKSx1PXR5cGVvZiBJLm1ldGFkYXRhPy5lbnRyaWVzPCJ1Ij9BcnJheS5mcm9tKEkubWV0YWRhdGEuZW50cmllcygpKTpbXSxFPXtpbWFnZVR5cGU6SS5pbWFnZVR5cGUsbmFtZTpJLm5hbWUsb3JpZ2luOkkub3JpZ2luLHNwYWNpbmc6SS5zcGFjaW5nLGRpcmVjdGlvbjpgZGF0YTphcHBsaWNhdGlvbi92bmQuaXRrLmFkZHJlc3MsMDoke2x9YCxzaXplOkkuc2l6ZSxkYXRhOmBkYXRhOmFwcGxpY2F0aW9uL3ZuZC5pdGsuYWRkcmVzcywwOiR7Zn1gLG1ldGFkYXRhOnV9O0goQSxFLGEpO2JyZWFrfWNhc2UgZC5NZXNoOntsZXQgST1jLmRhdGEsZj1oKEEsSS5wb2ludHMsYSwwKSxsPWgoQSxJLmNlbGxzLGEsMSksdT1oKEEsSS5wb2ludERhdGEsYSwyKSxFPWgoQSxJLmNlbGxEYXRhLGEsMyksQj17bWVzaFR5cGU6SS5tZXNoVHlwZSxuYW1lOkkubmFtZSxudW1iZXJPZlBvaW50czpJLm51bWJlck9mUG9pbnRzLHBvaW50czpgZGF0YTphcHBsaWNhdGlvbi92bmQuaXRrLmFkZHJlc3MsMDoke2Z9YCxudW1iZXJPZkNlbGxzOkkubnVtYmVyT2ZDZWxscyxjZWxsczpgZGF0YTphcHBsaWNhdGlvbi92bmQuaXRrLmFkZHJlc3MsMDoke2x9YCxjZWxsQnVmZmVyU2l6ZTpJLmNlbGxCdWZmZXJTaXplLG51bWJlck9mUG9pbnRQaXhlbHM6SS5udW1iZXJPZlBvaW50UGl4ZWxzLHBvaW50RGF0YTpgZGF0YTphcHBsaWNhdGlvbi92bmQuaXRrLmFkZHJlc3MsMDoke3V9YCxudW1iZXJPZkNlbGxQaXhlbHM6SS5udW1iZXJPZkNlbGxQaXhlbHMsY2VsbERhdGE6YGRhdGE6YXBwbGljYXRpb24vdm5kLml0ay5hZGRyZXNzLDA6JHtFfWB9O0goQSxCLGEpO2JyZWFrfWNhc2UgZC5Qb2ludFNldDp7bGV0IEk9Yy5kYXRhLGY9aChBLEkucG9pbnRzLGEsMCksbD1oKEEsSS5wb2ludERhdGEsYSwxKSx1PXtwb2ludFNldFR5cGU6SS5wb2ludFNldFR5cGUsbmFtZTpJLm5hbWUsbnVtYmVyT2ZQb2ludHM6SS5udW1iZXJPZlBvaW50cyxwb2ludHM6YGRhdGE6YXBwbGljYXRpb24vdm5kLml0ay5hZGRyZXNzLDA6JHtmfWAsbnVtYmVyT2ZQb2ludFBpeGVsczpJLm51bWJlck9mUG9pbnRQaXhlbHMscG9pbnREYXRhOmBkYXRhOmFwcGxpY2F0aW9uL3ZuZC5pdGsuYWRkcmVzcywwOiR7bH1gfTtIKEEsdSxhKTticmVha31jYXNlIGQuVHJhbnNmb3JtTGlzdDp7bGV0IEk9Yy5kYXRhLGY9W107SS5mb3JFYWNoKChsLHUpPT57bGV0IEI9YGRhdGE6YXBwbGljYXRpb24vdm5kLml0ay5hZGRyZXNzLDA6JHtoKEEsbC5maXhlZFBhcmFtZXRlcnMsYSx1KjIpfWAsYj1gZGF0YTphcHBsaWNhdGlvbi92bmQuaXRrLmFkZHJlc3MsMDoke2goQSxsLnBhcmFtZXRlcnMsYSx1KjIrMSl9YCxwPXt0cmFuc2Zvcm1UeXBlOmwudHJhbnNmb3JtVHlwZSxudW1iZXJPZkZpeGVkUGFyYW1ldGVyczpsLm51bWJlck9mRml4ZWRQYXJhbWV0ZXJzLG51bWJlck9mUGFyYW1ldGVyczpsLm51bWJlck9mUGFyYW1ldGVycyxuYW1lOmwubmFtZSxpbnB1dFNwYWNlTmFtZTpsLmlucHV0U3BhY2VOYW1lLG91dHB1dFNwYWNlTmFtZTpsLm91dHB1dFNwYWNlTmFtZSxwYXJhbWV0ZXJzOmIsZml4ZWRQYXJhbWV0ZXJzOkJ9O2YucHVzaChwKX0pLEgoQSxmLGEpO2JyZWFrfWNhc2UgZC5Qb2x5RGF0YTp7bGV0IEk9Yy5kYXRhLGY9aChBLEkucG9pbnRzLGEsMCksbD1oKEEsSS52ZXJ0aWNlcyxhLDEpLHU9aChBLEkubGluZXMsYSwyKSxFPWgoQSxJLnBvbHlnb25zLGEsMyksQj1oKEEsSS50cmlhbmdsZVN0cmlwcyxhLDQpLG09aChBLEkucG9pbnREYXRhLGEsNSksYj1oKEEsSS5wb2ludERhdGEsYSw2KSxwPXtwb2x5RGF0YVR5cGU6SS5wb2x5RGF0YVR5cGUsbmFtZTpJLm5hbWUsbnVtYmVyT2ZQb2ludHM6SS5udW1iZXJPZlBvaW50cyxwb2ludHM6YGRhdGE6YXBwbGljYXRpb24vdm5kLml0ay5hZGRyZXNzLDA6JHtmfWAsdmVydGljZXNCdWZmZXJTaXplOkkudmVydGljZXNCdWZmZXJTaXplLHZlcnRpY2VzOmBkYXRhOmFwcGxpY2F0aW9uL3ZuZC5pdGsuYWRkcmVzcywwOiR7bH1gLGxpbmVzQnVmZmVyU2l6ZTpJLmxpbmVzQnVmZmVyU2l6ZSxsaW5lczpgZGF0YTphcHBsaWNhdGlvbi92bmQuaXRrLmFkZHJlc3MsMDoke3V9YCxwb2x5Z29uc0J1ZmZlclNpemU6SS5wb2x5Z29uc0J1ZmZlclNpemUscG9seWdvbnM6YGRhdGE6YXBwbGljYXRpb24vdm5kLml0ay5hZGRyZXNzLDA6JHtFfWAsdHJpYW5nbGVTdHJpcHNCdWZmZXJTaXplOkkudHJpYW5nbGVTdHJpcHNCdWZmZXJTaXplLHRyaWFuZ2xlU3RyaXBzOmBkYXRhOmFwcGxpY2F0aW9uL3ZuZC5pdGsuYWRkcmVzcywwOiR7Qn1gLG51bWJlck9mUG9pbnRQaXhlbHM6SS5udW1iZXJPZlBvaW50UGl4ZWxzLHBvaW50RGF0YTpgZGF0YTphcHBsaWNhdGlvbi92bmQuaXRrLmFkZHJlc3MsMDoke219YCxudW1iZXJPZkNlbGxQaXhlbHM6SS5udW1iZXJPZkNlbGxQaXhlbHMsY2VsbERhdGE6YGRhdGE6YXBwbGljYXRpb24vdm5kLml0ay5hZGRyZXNzLDA6JHtifWB9O0goQSxwLGEpO2JyZWFrfWRlZmF1bHQ6dGhyb3cgRXJyb3IoIlVuc3VwcG9ydGVkIGlucHV0IEludGVyZmFjZVR5cGUiKX19KSxBLnJlc2V0TW9kdWxlU3Rkb3V0KCksQS5yZXNldE1vZHVsZVN0ZGVycigpO2xldCBuPUEuc3RhY2tTYXZlKCksbz0wO3RyeXtvPUEuY2FsbE1haW4oZS5zbGljZSgpKX1jYXRjaChjKXt0aHJvdyB0eXBlb2YgYz09Im51bWJlciImJihjb25zb2xlLmxvZygiRXhjZXB0aW9uIHdoaWxlIHJ1bm5pbmcgcGlwZWxpbmU6IiksY29uc29sZS5sb2coInN0ZG91dDoiLEEuZ2V0TW9kdWxlU3Rkb3V0KCkpLGNvbnNvbGUuZXJyb3IoInN0ZGVycjoiLEEuZ2V0TW9kdWxlU3RkZXJyKCkpLHR5cGVvZiBBLmdldEV4Y2VwdGlvbk1lc3NhZ2U8InUiP2NvbnNvbGUuZXJyb3IoImV4Y2VwdGlvbjoiLEEuZ2V0RXhjZXB0aW9uTWVzc2FnZShjKSk6Y29uc29sZS5lcnJvcigiQnVpbGQgbW9kdWxlIGluIERlYnVnIG1vZGUgZm9yIGV4Y2VwdGlvbiBtZXNzYWdlIGluZm9ybWF0aW9uLiIpKSxjfWZpbmFsbHl7QS5zdGFja1Jlc3RvcmUobil9bGV0IGk9QS5nZXRNb2R1bGVTdGRvdXQoKSxnPUEuZ2V0TW9kdWxlU3RkZXJyKCksQz1bXTtyZXR1cm4gdCE9bnVsbCYmdC5sZW5ndGg+MCYmbz09PTAmJnQuZm9yRWFjaChmdW5jdGlvbihjLGEpe2xldCBJPW51bGw7c3dpdGNoKGMudHlwZSl7Y2FzZSBkLlRleHRTdHJlYW06e2xldCBsPUEuY2NhbGwoIml0a193YXNtX291dHB1dF9hcnJheV9hZGRyZXNzIiwibnVtYmVyIixbIm51bWJlciIsIm51bWJlciIsIm51bWJlciJdLFswLGEsMF0pLHU9QS5jY2FsbCgiaXRrX3dhc21fb3V0cHV0X2FycmF5X3NpemUiLCJudW1iZXIiLFsibnVtYmVyIiwibnVtYmVyIiwibnVtYmVyIl0sWzAsYSwwXSksRT1uZXcgVWludDhBcnJheShBLkhFQVBVOC5idWZmZXIsbCx1KTtJPXtkYXRhOk90LmRlY29kZShFKX07YnJlYWt9Y2FzZSBkLkpzb25Db21wYXRpYmxlOntsZXQgbD1BLmNjYWxsKCJpdGtfd2FzbV9vdXRwdXRfYXJyYXlfYWRkcmVzcyIsIm51bWJlciIsWyJudW1iZXIiLCJudW1iZXIiLCJudW1iZXIiXSxbMCxhLDBdKSx1PUEuY2NhbGwoIml0a193YXNtX291dHB1dF9hcnJheV9zaXplIiwibnVtYmVyIixbIm51bWJlciIsIm51bWJlciIsIm51bWJlciJdLFswLGEsMF0pLEU9bmV3IFVpbnQ4QXJyYXkoQS5IRUFQVTguYnVmZmVyLGwsdSk7ST1KU09OLnBhcnNlKE90LmRlY29kZShFKSk7YnJlYWt9Y2FzZSBkLkJpbmFyeVN0cmVhbTp7bGV0IGw9QS5jY2FsbCgiaXRrX3dhc21fb3V0cHV0X2FycmF5X2FkZHJlc3MiLCJudW1iZXIiLFsibnVtYmVyIiwibnVtYmVyIiwibnVtYmVyIl0sWzAsYSwwXSksdT1BLmNjYWxsKCJpdGtfd2FzbV9vdXRwdXRfYXJyYXlfc2l6ZSIsIm51bWJlciIsWyJudW1iZXIiLCJudW1iZXIiLCJudW1iZXIiXSxbMCxhLDBdKTtJPXtkYXRhOk10KEEsbCx1KX07YnJlYWt9Y2FzZSBkLlRleHRGaWxlOntJPXtwYXRoOmMuZGF0YS5wYXRoLGRhdGE6QS5mc19yZWFkRmlsZShjLmRhdGEucGF0aCx7ZW5jb2Rpbmc6InV0ZjgifSl9O2JyZWFrfWNhc2UgZC5CaW5hcnlGaWxlOntJPXtwYXRoOmMuZGF0YS5wYXRoLGRhdGE6VG4oQSxjLmRhdGEucGF0aCl9O2JyZWFrfWNhc2UgZC5JbWFnZTp7bGV0IGw9QkEoQSxhKTtsLmRhdGE9UihBLGEsMCxsLmltYWdlVHlwZS5jb21wb25lbnRUeXBlKSxsLmRpcmVjdGlvbj1SKEEsYSwxLEYuRmxvYXQ2NCksbC5tZXRhZGF0YT1uZXcgTWFwKGwubWV0YWRhdGEpLEk9bDticmVha31jYXNlIGQuTWVzaDp7bGV0IGw9QkEoQSxhKTtsLm51bWJlck9mUG9pbnRzPjA/bC5wb2ludHM9UihBLGEsMCxsLm1lc2hUeXBlLnBvaW50Q29tcG9uZW50VHlwZSk6bC5wb2ludHM9ayhsLm1lc2hUeXBlLnBvaW50Q29tcG9uZW50VHlwZSxuZXcgQXJyYXlCdWZmZXIoMCkpLGwubnVtYmVyT2ZDZWxscz4wP2wuY2VsbHM9UihBLGEsMSxsLm1lc2hUeXBlLmNlbGxDb21wb25lbnRUeXBlKTpsLmNlbGxzPWsobC5tZXNoVHlwZS5jZWxsQ29tcG9uZW50VHlwZSxuZXcgQXJyYXlCdWZmZXIoMCkpLGwubnVtYmVyT2ZQb2ludFBpeGVscz4wP2wucG9pbnREYXRhPVIoQSxhLDIsbC5tZXNoVHlwZS5wb2ludFBpeGVsQ29tcG9uZW50VHlwZSk6bC5wb2ludERhdGE9ayhsLm1lc2hUeXBlLnBvaW50UGl4ZWxDb21wb25lbnRUeXBlLG5ldyBBcnJheUJ1ZmZlcigwKSksbC5udW1iZXJPZkNlbGxQaXhlbHM+MD9sLmNlbGxEYXRhPVIoQSxhLDMsbC5tZXNoVHlwZS5jZWxsUGl4ZWxDb21wb25lbnRUeXBlKTpsLmNlbGxEYXRhPWsobC5tZXNoVHlwZS5jZWxsUGl4ZWxDb21wb25lbnRUeXBlLG5ldyBBcnJheUJ1ZmZlcigwKSksST1sO2JyZWFrfWNhc2UgZC5Qb2ludFNldDp7bGV0IGw9QkEoQSxhKTtsLm51bWJlck9mUG9pbnRzPjA/bC5wb2ludHM9UihBLGEsMCxsLnBvaW50U2V0VHlwZS5wb2ludENvbXBvbmVudFR5cGUpOmwucG9pbnRzPWsobC5wb2ludFNldFR5cGUucG9pbnRDb21wb25lbnRUeXBlLG5ldyBBcnJheUJ1ZmZlcigwKSksbC5udW1iZXJPZlBvaW50UGl4ZWxzPjA/bC5wb2ludERhdGE9UihBLGEsMSxsLnBvaW50U2V0VHlwZS5wb2ludFBpeGVsQ29tcG9uZW50VHlwZSk6bC5wb2ludERhdGE9ayhsLnBvaW50U2V0VHlwZS5wb2ludFBpeGVsQ29tcG9uZW50VHlwZSxuZXcgQXJyYXlCdWZmZXIoMCkpLEk9bDticmVha31jYXNlIGQuVHJhbnNmb3JtTGlzdDp7bGV0IGw9QkEoQSxhKTtsLmZvckVhY2goKHUsRSk9Pnt1Lm51bWJlck9mRml4ZWRQYXJhbWV0ZXJzPjAmJihsW0VdLmZpeGVkUGFyYW1ldGVycz1SKEEsYSxFKjIsdS50cmFuc2Zvcm1UeXBlLnBhcmFtZXRlcnNWYWx1ZVR5cGUpKSx1Lm51bWJlck9mRml4ZWRQYXJhbWV0ZXJzPjAmJihsW0VdLnBhcmFtZXRlcnM9UihBLGEsRSoyKzEsdS50cmFuc2Zvcm1UeXBlLnBhcmFtZXRlcnNWYWx1ZVR5cGUpKX0pLEk9bDticmVha31jYXNlIGQuUG9seURhdGE6e2xldCBsPUJBKEEsYSk7bC5udW1iZXJPZlBvaW50cz4wP2wucG9pbnRzPVIoQSxhLDAsRi5GbG9hdDMyKTpsLnBvaW50cz1uZXcgRmxvYXQzMkFycmF5LGwudmVydGljZXNCdWZmZXJTaXplPjA/bC52ZXJ0aWNlcz1SKEEsYSwxLEQuVUludDMyKTpsLnZlcnRpY2VzPW5ldyBVaW50MzJBcnJheSxsLmxpbmVzQnVmZmVyU2l6ZT4wP2wubGluZXM9UihBLGEsMixELlVJbnQzMik6bC5saW5lcz1uZXcgVWludDMyQXJyYXksbC5wb2x5Z29uc0J1ZmZlclNpemU+MD9sLnBvbHlnb25zPVIoQSxhLDMsRC5VSW50MzIpOmwucG9seWdvbnM9bmV3IFVpbnQzMkFycmF5LGwudHJpYW5nbGVTdHJpcHNCdWZmZXJTaXplPjA/bC50cmlhbmdsZVN0cmlwcz1SKEEsYSw0LEQuVUludDMyKTpsLnRyaWFuZ2xlU3RyaXBzPW5ldyBVaW50MzJBcnJheSxsLm51bWJlck9mUG9pbnRQaXhlbHM+MD9sLnBvaW50RGF0YT1SKEEsYSw1LGwucG9seURhdGFUeXBlLnBvaW50UGl4ZWxDb21wb25lbnRUeXBlKTpsLnBvaW50RGF0YT1rKGwucG9seURhdGFUeXBlLnBvaW50UGl4ZWxDb21wb25lbnRUeXBlLG5ldyBBcnJheUJ1ZmZlcigwKSksbC5udW1iZXJPZkNlbGxQaXhlbHM+MD9sLmNlbGxEYXRhPVIoQSxhLDYsbC5wb2x5RGF0YVR5cGUuY2VsbFBpeGVsQ29tcG9uZW50VHlwZSk6bC5jZWxsRGF0YT1rKGwucG9seURhdGFUeXBlLmNlbGxQaXhlbENvbXBvbmVudFR5cGUsbmV3IEFycmF5QnVmZmVyKDApKSxJPWw7YnJlYWt9ZGVmYXVsdDp0aHJvdyBFcnJvcigiVW5zdXBwb3J0ZWQgb3V0cHV0IEludGVyZmFjZVR5cGUiKX1sZXQgZj17dHlwZTpjLnR5cGUsZGF0YTpJfTtDLnB1c2goZil9KSx7cmV0dXJuVmFsdWU6byxzdGRvdXQ6aSxzdGRlcnI6ZyxvdXRwdXRzOkN9fXZhciBIdD1Qbjt2YXIgeG49dHlwZW9mIGdsb2JhbFRoaXMuU2hhcmVkQXJyYXlCdWZmZXI8InUiO2Z1bmN0aW9uIExuKEEsZSl7aWYoQT09bnVsbClyZXR1cm5bXTtsZXQgdD1bXTtmb3IobGV0IHI9MDtyPEEubGVuZ3RoO3IrKyl7bGV0IG49R24oQVtyXSxlKTtuIT09bnVsbCYmdC5wdXNoKG4pfXJldHVybiB0fWZ1bmN0aW9uIEduKEEsZSl7aWYoQT09bnVsbClyZXR1cm4gbnVsbDtsZXQgdD1udWxsO3JldHVybiBBLmJ1ZmZlciE9PXZvaWQgMD90PUEuYnVmZmVyOkEuYnl0ZUxlbmd0aCE9PXZvaWQgMCYmKHQ9QSkseG4mJnQgaW5zdGFuY2VvZiBTaGFyZWRBcnJheUJ1ZmZlcj9udWxsOmU/dDp0LnNsaWNlKDApfXZhciBxdD1MbjtmdW5jdGlvbiBPbihBKXtyZXR1cm5bQS5kYXRhLEEuZGlyZWN0aW9uXX12YXIgWXQ9T247ZnVuY3Rpb24gSm4oQSl7cmV0dXJuW0EucG9pbnRzLEEucG9pbnREYXRhLEEuY2VsbHMsQS5jZWxsRGF0YV19dmFyIEt0PUpuO2Z1bmN0aW9uIE1uKEEpe3JldHVybltBLnBvaW50cyxBLnZlcnRpY2VzLEEubGluZXMsQS5wb2x5Z29ucyxBLnRyaWFuZ2xlU3RyaXBzLEEucG9pbnREYXRhLEEuY2VsbERhdGFdfXZhciBXdD1Nbjt2YXIgSG47ZnVuY3Rpb24gT0EoKXtyZXR1cm4gSG59dmFyIHFuO2Z1bmN0aW9uIHZ0KCl7cmV0dXJuIHFufXZhciBZbjtmdW5jdGlvbiBKQSgpe3JldHVybiBZbn12YXIgVWU9bmV3IE1hcDtmdW5jdGlvbiBLbigpe2xldCBBPUpBKCk7cmV0dXJuIHR5cGVvZiBBPiJ1IiYmKEE9bnVsbCksQX1mdW5jdGlvbiBqdCgpe2xldCBBPU9BKCk7cmV0dXJuIHR5cGVvZiBBPiJ1IiYmKEE9bmV3IFVSTCgiL3BpcGVsaW5lcyIsZG9jdW1lbnQubG9jYXRpb24ub3JpZ2luKS5ocmVmKSxBfWZ1bmN0aW9uIE1BKCl7bGV0IEE9dnQoKTtyZXR1cm4gdHlwZW9mIEE+InUiJiYoQT17fSksQX1hc3luYyBmdW5jdGlvbiBXbihBLGUsdCl7bGV0IHI9QSxuPUE7aWYodHlwZW9mIEEhPSJzdHJpbmciJiYocj1uZXcgVVJMKEEuaHJlZiksbj1yLmhyZWYpLFVlLmhhcyhuKSlyZXR1cm4gVWUuZ2V0KG4pO3tsZXQgbz1hd2FpdCB4dChBLGU/LnRvU3RyaW5nKCk/P2p0KCksdD8/TUEoKSk7cmV0dXJuIFVlLnNldChuLG8pLG99fWFzeW5jIGZ1bmN0aW9uIHZuKEEsZSx0LHIsbil7aWYoIWF3YWl0IEx0KCkpe2xldCBCPSJXZWJBc3NlbWJseSBTSU1EIHN1cHBvcnQgaXMgcmVxdWlyZWQgLS0gcGxlYXNlIHVwZGF0ZSB5b3VyIGJyb3dzZXIuIjt0aHJvdyBhbGVydChCKSxuZXcgRXJyb3IoQil9bGV0IG89bj8ud2ViV29ya2VyPz9udWxsO2lmKG89PT0hMSl7bGV0IEI9YXdhaXQgV24oQS50b1N0cmluZygpLG4/LnBpcGVsaW5lQmFzZVVybCxuPy5waXBlbGluZVF1ZXJ5UGFyYW1zPz9NQSgpKTtyZXR1cm4gSHQoQixlLHQscil9bGV0IGk9byxnPW4/LnBpcGVsaW5lV29ya2VyVXJsPz9LbigpLEM9dHlwZW9mIGchPSJzdHJpbmciJiZ0eXBlb2YgZz8uaHJlZjwidSI/Zy5ocmVmOmcse3dvcmtlclByb3h5OmMsd29ya2VyOmF9PWF3YWl0IFB0KGksQyxuPy5waXBlbGluZVF1ZXJ5UGFyYW1zPz9NQSgpKTtpPWE7bGV0IEk9W107ciE9bnVsbCYmci5sZW5ndGg+MCYmci5mb3JFYWNoKGZ1bmN0aW9uKEIpe2lmKEIudHlwZT09PWQuQmluYXJ5U3RyZWFtKXtsZXQgbT1CLmRhdGEuZGF0YTtJLnB1c2gobSl9ZWxzZSBpZihCLnR5cGU9PT1kLkJpbmFyeUZpbGUpe2xldCBtPUIuZGF0YS5kYXRhO0kucHVzaChtKX1lbHNlIGlmKEIudHlwZT09PWQuSW1hZ2Upe2xldCBtPUIuZGF0YTttLmRhdGEhPT1udWxsJiZJLnB1c2goLi4uWXQobSkpfWVsc2UgaWYoQi50eXBlPT09ZC5NZXNoKXtsZXQgbT1CLmRhdGE7SS5wdXNoKC4uLkt0KG0pKX1lbHNlIGlmKEIudHlwZT09PWQuUG9seURhdGEpe2xldCBtPUIuZGF0YTtJLnB1c2goLi4uV3QobSkpfX0pO2xldCBmPW4/LnBpcGVsaW5lQmFzZVVybD8/anQoKSxsPXR5cGVvZiBmIT0ic3RyaW5nIiYmdHlwZW9mIGY/LmhyZWY8InUiP2YuaHJlZjpmLHU9ciE9bnVsbD9uZShyLHF0KEksbj8ubm9Db3B5KSk6bnVsbCxFPWF3YWl0IGMucnVuUGlwZWxpbmUoQS50b1N0cmluZygpLGwsZSx0LHUsbj8ucGlwZWxpbmVRdWVyeVBhcmFtcz8/TUEoKSk7cmV0dXJue3JldHVyblZhbHVlOkUucmV0dXJuVmFsdWUsc3Rkb3V0OkUuc3Rkb3V0LHN0ZGVycjpFLnN0ZGVycixvdXRwdXRzOkUub3V0cHV0cyx3ZWJXb3JrZXI6aX19dmFyIHVBPXZuO3ZhciBqbj1udWxsO2Z1bmN0aW9uIF90KCl7cmV0dXJuIGpufXZhciBOZSxfbj1gaHR0cHM6Ly9jZG4uanNkZWxpdnIubmV0L25wbS9AaXRrLXdhc20vY29tcHJlc3Mtc3RyaW5naWZ5QCR7S0F9L2Rpc3QvcGlwZWxpbmVzYDtmdW5jdGlvbiBaSShBKXtOZT1BfWZ1bmN0aW9uIEhBKCl7aWYodHlwZW9mIE5lPCJ1IilyZXR1cm4gTmU7bGV0IEE9T0EoKTtyZXR1cm4gdHlwZW9mIEE8InUiP0E6X259dmFyIFRlLHpuPW51bGw7ZnVuY3Rpb24genQoQSl7VGU9QX1mdW5jdGlvbiAkKCl7aWYodHlwZW9mIFRlPCJ1IilyZXR1cm4gVGU7bGV0IEE9SkEoKTtyZXR1cm4gdHlwZW9mIEE8InUiP0E6em59dmFyIEFBPW51bGw7YXN5bmMgZnVuY3Rpb24gVnQoKXtsZXQgQT0kKCksZT10eXBlb2YgQSE9InN0cmluZyImJnR5cGVvZiBBPy5ocmVmPCJ1Ij9BLmhyZWY6QTtBQT1hd2FpdCBDQShlKX1mdW5jdGlvbiBuZyhBKXtBQT1BfWFzeW5jIGZ1bmN0aW9uIHFBKCl7aWYoQUEhPT1udWxsKXJldHVybiBBQS50ZXJtaW5hdGVkJiZhd2FpdCBWdCgpLEFBO2xldCBBPV90KCk7cmV0dXJuIEEhPT1udWxsP0E6KGF3YWl0IFZ0KCksQUEpfWFzeW5jIGZ1bmN0aW9uIFZuKEEsZT17fSl7bGV0IHQ9W3t0eXBlOmQuQmluYXJ5U3RyZWFtfV0scj1be3R5cGU6ZC5CaW5hcnlTdHJlYW0sZGF0YTp7ZGF0YTpBfX1dLG49W107bi5wdXNoKCIwIiksbi5wdXNoKCIwIiksbi5wdXNoKCItLW1lbW9yeS1pbyIpLGUuc3RyaW5naWZ5JiZlLnN0cmluZ2lmeSYmbi5wdXNoKCItLXN0cmluZ2lmeSIpLGUuY29tcHJlc3Npb25MZXZlbCYmbi5wdXNoKCItLWNvbXByZXNzaW9uLWxldmVsIixlLmNvbXByZXNzaW9uTGV2ZWwudG9TdHJpbmcoKSksZS5kYXRhVXJsUHJlZml4JiZuLnB1c2goIi0tZGF0YS11cmwtcHJlZml4IixlLmRhdGFVcmxQcmVmaXgudG9TdHJpbmcoKSk7bGV0IGc9ImNvbXByZXNzLXN0cmluZ2lmeSIsQz1lPy53ZWJXb3JrZXI7Qz09PXZvaWQgMCYmKEM9YXdhaXQgcUEoKSk7bGV0e3dlYldvcmtlcjpjLHJldHVyblZhbHVlOmEsc3RkZXJyOkksb3V0cHV0czpmfT1hd2FpdCB1QShnLG4sdCxyLHtwaXBlbGluZUJhc2VVcmw6SEEoKSxwaXBlbGluZVdvcmtlclVybDokKCksd2ViV29ya2VyOkMsbm9Db3B5OmU/Lm5vQ29weX0pO2lmKGEhPT0wJiZJIT09IiIpdGhyb3cgbmV3IEVycm9yKEkpO3JldHVybnt3ZWJXb3JrZXI6YyxvdXRwdXQ6KGZbMF0/LmRhdGEpLmRhdGF9fXZhciBlQT1Wbjthc3luYyBmdW5jdGlvbiBabihBLGU9e30pe2xldCB0PVt7dHlwZTpkLkJpbmFyeVN0cmVhbX1dLHI9W3t0eXBlOmQuQmluYXJ5U3RyZWFtLGRhdGE6e2RhdGE6QX19XSxuPVtdO24ucHVzaCgiMCIpLG4ucHVzaCgiMCIpLG4ucHVzaCgiLS1tZW1vcnktaW8iKSxlLnBhcnNlU3RyaW5nJiZlLnBhcnNlU3RyaW5nJiZuLnB1c2goIi0tcGFyc2Utc3RyaW5nIik7bGV0IGc9InBhcnNlLXN0cmluZy1kZWNvbXByZXNzIixDPWU/LndlYldvcmtlcjtDPT09dm9pZCAwJiYoQz1hd2FpdCBxQSgpKTtsZXR7d2ViV29ya2VyOmMscmV0dXJuVmFsdWU6YSxzdGRlcnI6SSxvdXRwdXRzOmZ9PWF3YWl0IHVBKGcsbix0LHIse3BpcGVsaW5lQmFzZVVybDpIQSgpLHBpcGVsaW5lV29ya2VyVXJsOiQoKSx3ZWJXb3JrZXI6Qyxub0NvcHk6ZT8ubm9Db3B5fSk7aWYoYSE9PTAmJkkhPT0iIil0aHJvdyBuZXcgRXJyb3IoSSk7cmV0dXJue3dlYldvcmtlcjpjLG91dHB1dDooZlswXT8uZGF0YSkuZGF0YX19dmFyIHRBPVpuO2FzeW5jIGZ1bmN0aW9uIFhuKEEsZT17fSl7bGV0IHI9bmV3IGpBKEEuaW1hZ2VUeXBlKTtyLm9yaWdpbj1BLm9yaWdpbixyLnNwYWNpbmc9QS5zcGFjaW5nLHIuc2l6ZT1BLnNpemUsci5tZXRhZGF0YT1BLm1ldGFkYXRhO2xldCBuPW5ldyBUZXh0RGVjb2RlcigidXRmLTgiKSxvPW5ldyBVaW50OEFycmF5KEEuZGlyZWN0aW9uLmJ1ZmZlciksaT1hd2FpdCBlQShvLHtjb21wcmVzc2lvbkxldmVsOjUsc3RyaW5naWZ5OiEwLHdlYldvcmtlcjplLndlYldvcmtlcixub0NvcHk6ZS5ub0NvcHl9KSxnPWkud2ViV29ya2VyO2lmKHIuZGlyZWN0aW9uPW4uZGVjb2RlKGkub3V0cHV0LmJ1ZmZlciksQS5kYXRhPT09bnVsbClyLmRhdGE9bnVsbDtlbHNle2xldCBDPW5ldyBVaW50OEFycmF5KEEuZGF0YS5idWZmZXIpLGM9YXdhaXQgZUEoQyx7Y29tcHJlc3Npb25MZXZlbDo1LHN0cmluZ2lmeTohMCx3ZWJXb3JrZXI6Zyxub0NvcHk6ZS5ub0NvcHl9KTtyLmRhdGE9bi5kZWNvZGUoYy5vdXRwdXQuYnVmZmVyKX1yZXR1cm57ZW5jb2RlZDpyLHdlYldvcmtlcjpnfX1hc3luYyBmdW5jdGlvbiAkbihBLGU9e30pe2xldCB0PUEscj1uZXcgVGV4dEVuY29kZXIsbj1uZXcgVWludDhBcnJheShyLmVuY29kZShBLmRpcmVjdGlvbikpLG89YXdhaXQgdEEobix7cGFyc2VTdHJpbmc6ITAsd2ViV29ya2VyOmUud2ViV29ya2VyLG5vQ29weTohMH0pLGk9by53ZWJXb3JrZXI7aWYodC5kaXJlY3Rpb249bmV3IEZsb2F0NjRBcnJheShvLm91dHB1dC5idWZmZXIpLCF0LmRhdGEpdC5kYXRhPW51bGw7ZWxzZXtsZXQgZz1uZXcgVWludDhBcnJheShyLmVuY29kZShBLmRhdGEpKSxDPWF3YWl0IHRBKGcse3BhcnNlU3RyaW5nOiEwLHdlYldvcmtlcjppLG5vQ29weTohMH0pO3QuZGF0YT1rKHQuaW1hZ2VUeXBlLmNvbXBvbmVudFR5cGUsQy5vdXRwdXQuYnVmZmVyKX1yZXR1cm57ZGVjb2RlZDp0LHdlYldvcmtlcjppfX1hc3luYyBmdW5jdGlvbiBBbyhBLGU9e30pe2xldCByPW5ldyBWQShBLm1lc2hUeXBlKTtyLm5hbWU9QS5uYW1lLHIubnVtYmVyT2ZQb2ludHM9QS5udW1iZXJPZlBvaW50cyxyLm51bWJlck9mQ2VsbHM9QS5udW1iZXJPZkNlbGxzLHIubnVtYmVyT2ZQb2ludFBpeGVscz1BLm51bWJlck9mUG9pbnRQaXhlbHMsci5udW1iZXJPZkNlbGxQaXhlbHM9QS5udW1iZXJPZkNlbGxQaXhlbHMsci5jZWxsQnVmZmVyU2l6ZT1BLmNlbGxCdWZmZXJTaXplO2xldCBuPWUud2ViV29ya2VyLG89bmV3IFRleHREZWNvZGVyKCJ1dGYtOCIpO2ZvcihsZXQgaSBvZlsicG9pbnRzIiwicG9pbnREYXRhIiwiY2VsbHMiLCJjZWxsRGF0YSJdKWlmKEFbaV09PT1udWxsKXJbaV09bnVsbDtlbHNle2xldCBnPW5ldyBVaW50OEFycmF5KEFbaV0uYnVmZmVyKSxDPWF3YWl0IGVBKGcse2NvbXByZXNzaW9uTGV2ZWw6NSxzdHJpbmdpZnk6ITAsd2ViV29ya2VyOm4sbm9Db3B5OmUubm9Db3B5fSk7bj1DLndlYldvcmtlcixyW2ldPW8uZGVjb2RlKEMub3V0cHV0LmJ1ZmZlcil9cmV0dXJue2VuY29kZWQ6cix3ZWJXb3JrZXI6bn19YXN5bmMgZnVuY3Rpb24gZW8oQSxlPXt9KXtsZXQgdD1BLHI9bmV3IE1hcChbWyJwb2ludHMiLCJwb2ludENvbXBvbmVudFR5cGUiXSxbInBvaW50RGF0YSIsInBvaW50UGl4ZWxDb21wb25lbnRUeXBlIl0sWyJjZWxscyIsImNlbGxDb21wb25lbnRUeXBlIl0sWyJjZWxsRGF0YSIsImNlbGxQaXhlbENvbXBvbmVudFR5cGUiXV0pLG49bmV3IFRleHRFbmNvZGVyLG89ZS53ZWJXb3JrZXI7Zm9yKGxldCBpIG9mWyJwb2ludHMiLCJwb2ludERhdGEiLCJjZWxscyIsImNlbGxEYXRhIl0paWYodFtpXT09PW51bGwpdFtpXT1udWxsO2Vsc2V7bGV0IGc9bmV3IFVpbnQ4QXJyYXkobi5lbmNvZGUodFtpXSkpLEM9YXdhaXQgdEEoZyx7cGFyc2VTdHJpbmc6ITAsd2ViV29ya2VyOm8sbm9Db3B5OiEwfSk7bz1DLndlYldvcmtlcix0W2ldPWsodC5tZXNoVHlwZVtyLmdldChpKV0sQy5vdXRwdXQuYnVmZmVyKX1yZXR1cm57ZGVjb2RlZDp0LHdlYldvcmtlcjpvfX1hc3luYyBmdW5jdGlvbiB0byhBLGU9e30pe2xldCByPW5ldyAkQShBLnBvbHlEYXRhVHlwZSk7ci5uYW1lPUEubmFtZSxyLm51bWJlck9mUG9pbnRzPUEubnVtYmVyT2ZQb2ludHMsci52ZXJ0aWNlc0J1ZmZlclNpemU9QS52ZXJ0aWNlc0J1ZmZlclNpemUsci5saW5lc0J1ZmZlclNpemU9QS5saW5lc0J1ZmZlclNpemUsci5wb2x5Z29uc0J1ZmZlclNpemU9QS5wb2x5Z29uc0J1ZmZlclNpemUsci50cmlhbmdsZVN0cmlwc0J1ZmZlclNpemU9QS50cmlhbmdsZVN0cmlwc0J1ZmZlclNpemUsci5udW1iZXJPZlBvaW50UGl4ZWxzPUEubnVtYmVyT2ZQb2ludFBpeGVscyxyLm51bWJlck9mQ2VsbFBpeGVscz1BLm51bWJlck9mQ2VsbFBpeGVscztsZXQgbj1lLndlYldvcmtlcixvPW5ldyBUZXh0RGVjb2RlcigidXRmLTgiKTtmb3IobGV0IGkgb2ZbInBvaW50cyIsInZlcnRpY2VzIiwibGluZXMiLCJwb2x5Z29ucyIsInRyaWFuZ2xlU3RyaXBzIiwicG9pbnREYXRhIiwiY2VsbERhdGEiXSlpZihBW2ldPT09bnVsbClyW2ldPW51bGw7ZWxzZXtsZXQgZz1uZXcgVWludDhBcnJheShBW2ldLmJ1ZmZlciksQz1hd2FpdCBlQShnLHtjb21wcmVzc2lvbkxldmVsOjUsc3RyaW5naWZ5OiEwLHdlYldvcmtlcjpuLG5vQ29weTplLm5vQ29weX0pO249Qy53ZWJXb3JrZXIscltpXT1vLmRlY29kZShDLm91dHB1dC5idWZmZXIpfXJldHVybntlbmNvZGVkOnIsd2ViV29ya2VyOm59fWFzeW5jIGZ1bmN0aW9uIHJvKEEsZT17fSl7bGV0IHQ9QSxyPW5ldyBNYXAoW1sicG9pbnRzIiwiZmxvYXQzMiJdLFsidmVydGljZXMiLCJ1aW50MzIiXSxbImxpbmVzIiwidWludDMyIl0sWyJwb2x5Z29ucyIsInVpbnQzMiJdLFsidHJpYW5nbGVTdHJpcHMiLCJ1aW50MzIiXSxbInBvaW50RGF0YSIsdC5wb2x5RGF0YVR5cGUucG9pbnRQaXhlbENvbXBvbmVudFR5cGVdLFsiY2VsbERhdGEiLHQucG9seURhdGFUeXBlLmNlbGxQaXhlbENvbXBvbmVudFR5cGVdXSksbj1uZXcgVGV4dEVuY29kZXIsbz1lLndlYldvcmtlcjtmb3IobGV0IGkgb2ZbInBvaW50cyIsInZlcnRpY2VzIiwibGluZXMiLCJwb2x5Z29ucyIsInRyaWFuZ2xlU3RyaXBzIiwicG9pbnREYXRhIiwiY2VsbERhdGEiXSlpZih0W2ldPT09bnVsbCl0W2ldPW51bGw7ZWxzZXtsZXQgZz1uZXcgVWludDhBcnJheShuLmVuY29kZSh0W2ldKSksQz1hd2FpdCB0QShnLHtwYXJzZVN0cmluZzohMCx3ZWJXb3JrZXI6byxub0NvcHk6ITB9KTtvPUMud2ViV29ya2VyLHRbaV09ayhyLmdldChpKSxDLm91dHB1dC5idWZmZXIpfXJldHVybntkZWNvZGVkOnQsd2ViV29ya2VyOm99fXZhciBadD0nZGF0YTp0ZXh0L2phdmFzY3JpcHQ7Y2hhcnNldD11dGYtOCx2YXIgbWU9T2JqZWN0LmRlZmluZVByb3BlcnR5O3ZhciB3ZT0oQSx0KT0+e2Zvcih2YXIgZSBpbiB0KW1lKEEsZSx7Z2V0OnRbZV0sZW51bWVyYWJsZTohMH0pfTt2YXIgZnQ9U3ltYm9sKCJDb21saW5rLnByb3h5IikscGU9U3ltYm9sKCJDb21saW5rLmVuZHBvaW50IiksU2U9U3ltYm9sKCJDb21saW5rLnJlbGVhc2VQcm94eSIpLFlBPVN5bWJvbCgiQ29tbGluay5maW5hbGl6ZXIiKSxhQT1TeW1ib2woIkNvbWxpbmsudGhyb3duIiksbHQ9QT0+dHlwZW9mIEE9PSJvYmplY3QiJiZBIT09bnVsbHx8dHlwZW9mIEE9PSJmdW5jdGlvbiIsRmU9e2NhbkhhbmRsZTpBPT5sdChBKSYmQVtmdF0sc2VyaWFsaXplKEEpe2xldHtwb3J0MTp0LHBvcnQyOmV9PW5ldyBNZXNzYWdlQ2hhbm5lbDtyZXR1cm4gZkEoQSx0KSxbZSxbZV1dfSxkZXNlcmlhbGl6ZShBKXtyZXR1cm4gQS5zdGFydCgpLEdlKEEpfX0sUmU9e2NhbkhhbmRsZTpBPT5sdChBKSYmYUEgaW4gQSxzZXJpYWxpemUoe3ZhbHVlOkF9KXtsZXQgdDtyZXR1cm4gQSBpbnN0YW5jZW9mIEVycm9yP3Q9e2lzRXJyb3I6ITAsdmFsdWU6e21lc3NhZ2U6QS5tZXNzYWdlLG5hbWU6QS5uYW1lLHN0YWNrOkEuc3RhY2t9fTp0PXtpc0Vycm9yOiExLHZhbHVlOkF9LFt0LFtdXX0sZGVzZXJpYWxpemUoQSl7dGhyb3cgQS5pc0Vycm9yP09iamVjdC5hc3NpZ24obmV3IEVycm9yKEEudmFsdWUubWVzc2FnZSksQS52YWx1ZSk6QS52YWx1ZX19LHV0PW5ldyBNYXAoW1sicHJveHkiLEZlXSxbInRocm93IixSZV1dKTtmdW5jdGlvbiBOZShBLHQpe2ZvcihsZXQgZSBvZiBBKWlmKHQ9PT1lfHxlPT09IioifHxlIGluc3RhbmNlb2YgUmVnRXhwJiZlLnRlc3QodCkpcmV0dXJuITA7cmV0dXJuITF9ZnVuY3Rpb24gZkEoQSx0PWdsb2JhbFRoaXMsZT1bIioiXSl7dC5hZGRFdmVudExpc3RlbmVyKCJtZXNzYWdlIixmdW5jdGlvbiBJKHIpe2lmKCFyfHwhci5kYXRhKXJldHVybjtpZighTmUoZSxyLm9yaWdpbikpe2NvbnNvbGUud2FybihgSW52YWxpZCBvcmlnaW4gXCcke3Iub3JpZ2lufVwnIGZvciBjb21saW5rIHByb3h5YCk7cmV0dXJufWxldHtpZDpvLHR5cGU6ZyxwYXRoOkN9PU9iamVjdC5hc3NpZ24oe3BhdGg6W119LHIuZGF0YSksUT0oci5kYXRhLmFyZ3VtZW50TGlzdHx8W10pLm1hcChPKSxhO3RyeXtsZXQgbj1DLnNsaWNlKDAsLTEpLnJlZHVjZSgoZixCKT0+ZltCXSxBKSxzPUMucmVkdWNlKChmLEIpPT5mW0JdLEEpO3N3aXRjaChnKXtjYXNlIkdFVCI6YT1zO2JyZWFrO2Nhc2UiU0VUIjpuW0Muc2xpY2UoLTEpWzBdXT1PKHIuZGF0YS52YWx1ZSksYT0hMDticmVhaztjYXNlIkFQUExZIjphPXMuYXBwbHkobixRKTticmVhaztjYXNlIkNPTlNUUlVDVCI6e2xldCBmPW5ldyBzKC4uLlEpO2E9YmUoZil9YnJlYWs7Y2FzZSJFTkRQT0lOVCI6e2xldHtwb3J0MTpmLHBvcnQyOkJ9PW5ldyBNZXNzYWdlQ2hhbm5lbDtmQShBLEIpLGE9TUEoZixbZl0pfWJyZWFrO2Nhc2UiUkVMRUFTRSI6YT12b2lkIDA7YnJlYWs7ZGVmYXVsdDpyZXR1cm59fWNhdGNoKG4pe2E9e3ZhbHVlOm4sW2FBXTowfX1Qcm9taXNlLnJlc29sdmUoYSkuY2F0Y2gobj0+KHt2YWx1ZTpuLFthQV06MH0pKS50aGVuKG49PntsZXRbcyxmXT1jQShuKTt0LnBvc3RNZXNzYWdlKE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSxzKSx7aWQ6b30pLGYpLGc9PT0iUkVMRUFTRSImJih0LnJlbW92ZUV2ZW50TGlzdGVuZXIoIm1lc3NhZ2UiLEkpLER0KHQpLFlBIGluIEEmJnR5cGVvZiBBW1lBXT09ImZ1bmN0aW9uIiYmQVtZQV0oKSl9KS5jYXRjaChuPT57bGV0W3MsZl09Y0Eoe3ZhbHVlOm5ldyBUeXBlRXJyb3IoIlVuc2VyaWFsaXphYmxlIHJldHVybiB2YWx1ZSIpLFthQV06MH0pO3QucG9zdE1lc3NhZ2UoT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LHMpLHtpZDpvfSksZil9KX0pLHQuc3RhcnQmJnQuc3RhcnQoKX1mdW5jdGlvbiBVZShBKXtyZXR1cm4gQS5jb25zdHJ1Y3Rvci5uYW1lPT09Ik1lc3NhZ2VQb3J0In1mdW5jdGlvbiBEdChBKXtVZShBKSYmQS5jbG9zZSgpfWZ1bmN0aW9uIEdlKEEsdCl7cmV0dXJuIHFBKEEsW10sdCl9ZnVuY3Rpb24gQkEoQSl7aWYoQSl0aHJvdyBuZXcgRXJyb3IoIlByb3h5IGhhcyBiZWVuIHJlbGVhc2VkIGFuZCBpcyBub3QgdXNlYWJsZSIpfWZ1bmN0aW9uIGh0KEEpe3JldHVybiBQKEEse3R5cGU6IlJFTEVBU0UifSkudGhlbigoKT0+e0R0KEEpfSl9dmFyIFFBPW5ldyBXZWFrTWFwLEVBPSJGaW5hbGl6YXRpb25SZWdpc3RyeSJpbiBnbG9iYWxUaGlzJiZuZXcgRmluYWxpemF0aW9uUmVnaXN0cnkoQT0+e2xldCB0PShRQS5nZXQoQSl8fDApLTE7UUEuc2V0KEEsdCksdD09PTAmJmh0KEEpfSk7ZnVuY3Rpb24ga2UoQSx0KXtsZXQgZT0oUUEuZ2V0KHQpfHwwKSsxO1FBLnNldCh0LGUpLEVBJiZFQS5yZWdpc3RlcihBLHQsQSl9ZnVuY3Rpb24gTGUoQSl7RUEmJkVBLnVucmVnaXN0ZXIoQSl9ZnVuY3Rpb24gcUEoQSx0PVtdLGU9ZnVuY3Rpb24oKXt9KXtsZXQgST0hMSxyPW5ldyBQcm94eShlLHtnZXQobyxnKXtpZihCQShJKSxnPT09U2UpcmV0dXJuKCk9PntMZShyKSxodChBKSxJPSEwfTtpZihnPT09InRoZW4iKXtpZih0Lmxlbmd0aD09PTApcmV0dXJue3RoZW46KCk9PnJ9O2xldCBDPVAoQSx7dHlwZToiR0VUIixwYXRoOnQubWFwKFE9PlEudG9TdHJpbmcoKSl9KS50aGVuKE8pO3JldHVybiBDLnRoZW4uYmluZChDKX1yZXR1cm4gcUEoQSxbLi4udCxnXSl9LHNldChvLGcsQyl7QkEoSSk7bGV0W1EsYV09Y0EoQyk7cmV0dXJuIFAoQSx7dHlwZToiU0VUIixwYXRoOlsuLi50LGddLm1hcChuPT5uLnRvU3RyaW5nKCkpLHZhbHVlOlF9LGEpLnRoZW4oTyl9LGFwcGx5KG8sZyxDKXtCQShJKTtsZXQgUT10W3QubGVuZ3RoLTFdO2lmKFE9PT1wZSlyZXR1cm4gUChBLHt0eXBlOiJFTkRQT0lOVCJ9KS50aGVuKE8pO2lmKFE9PT0iYmluZCIpcmV0dXJuIHFBKEEsdC5zbGljZSgwLC0xKSk7bGV0W2Esbl09Y3QoQyk7cmV0dXJuIFAoQSx7dHlwZToiQVBQTFkiLHBhdGg6dC5tYXAocz0+cy50b1N0cmluZygpKSxhcmd1bWVudExpc3Q6YX0sbikudGhlbihPKX0sY29uc3RydWN0KG8sZyl7QkEoSSk7bGV0W0MsUV09Y3QoZyk7cmV0dXJuIFAoQSx7dHlwZToiQ09OU1RSVUNUIixwYXRoOnQubWFwKGE9PmEudG9TdHJpbmcoKSksYXJndW1lbnRMaXN0OkN9LFEpLnRoZW4oTyl9fSk7cmV0dXJuIGtlKHIsQSkscn1mdW5jdGlvbiBKZShBKXtyZXR1cm4gQXJyYXkucHJvdG90eXBlLmNvbmNhdC5hcHBseShbXSxBKX1mdW5jdGlvbiBjdChBKXtsZXQgdD1BLm1hcChjQSk7cmV0dXJuW3QubWFwKGU9PmVbMF0pLEplKHQubWFwKGU9PmVbMV0pKV19dmFyIGR0PW5ldyBXZWFrTWFwO2Z1bmN0aW9uIE1BKEEsdCl7cmV0dXJuIGR0LnNldChBLHQpLEF9ZnVuY3Rpb24gYmUoQSl7cmV0dXJuIE9iamVjdC5hc3NpZ24oQSx7W2Z0XTohMH0pfWZ1bmN0aW9uIGNBKEEpe2ZvcihsZXRbdCxlXW9mIHV0KWlmKGUuY2FuSGFuZGxlKEEpKXtsZXRbSSxyXT1lLnNlcmlhbGl6ZShBKTtyZXR1cm5be3R5cGU6IkhBTkRMRVIiLG5hbWU6dCx2YWx1ZTpJfSxyXX1yZXR1cm5be3R5cGU6IlJBVyIsdmFsdWU6QX0sZHQuZ2V0KEEpfHxbXV19ZnVuY3Rpb24gTyhBKXtzd2l0Y2goQS50eXBlKXtjYXNlIkhBTkRMRVIiOnJldHVybiB1dC5nZXQoQS5uYW1lKS5kZXNlcmlhbGl6ZShBLnZhbHVlKTtjYXNlIlJBVyI6cmV0dXJuIEEudmFsdWV9fWZ1bmN0aW9uIFAoQSx0LGUpe3JldHVybiBuZXcgUHJvbWlzZShJPT57bGV0IHI9SGUoKTtBLmFkZEV2ZW50TGlzdGVuZXIoIm1lc3NhZ2UiLGZ1bmN0aW9uIG8oZyl7IWcuZGF0YXx8IWcuZGF0YS5pZHx8Zy5kYXRhLmlkIT09cnx8KEEucmVtb3ZlRXZlbnRMaXN0ZW5lcigibWVzc2FnZSIsbyksSShnLmRhdGEpKX0pLEEuc3RhcnQmJkEuc3RhcnQoKSxBLnBvc3RNZXNzYWdlKE9iamVjdC5hc3NpZ24oe2lkOnJ9LHQpLGUpfSl9ZnVuY3Rpb24gSGUoKXtyZXR1cm4gbmV3IEFycmF5KDQpLmZpbGwoMCkubWFwKCgpPT5NYXRoLmZsb29yKE1hdGgucmFuZG9tKCkqTnVtYmVyLk1BWF9TQUZFX0lOVEVHRVIpLnRvU3RyaW5nKDE2KSkuam9pbigiLSIpfWZ1bmN0aW9uIHYoQSx0KXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gQS5hcHBseSh0LGFyZ3VtZW50cyl9fXZhcnt0b1N0cmluZzpZZX09T2JqZWN0LnByb3RvdHlwZSx7Z2V0UHJvdG90eXBlT2Y6T0F9PU9iamVjdCx1QT0oQT0+dD0+e2xldCBlPVllLmNhbGwodCk7cmV0dXJuIEFbZV18fChBW2VdPWUuc2xpY2UoOCwtMSkudG9Mb3dlckNhc2UoKSl9KShPYmplY3QuY3JlYXRlKG51bGwpKSxHPUE9PihBPUEudG9Mb3dlckNhc2UoKSx0PT51QSh0KT09PUEpLERBPUE9PnQ9PnR5cGVvZiB0PT09QSx7aXNBcnJheTpqfT1BcnJheSwkPURBKCJ1bmRlZmluZWQiKTtmdW5jdGlvbiBxZShBKXtyZXR1cm4gQSE9PW51bGwmJiEkKEEpJiZBLmNvbnN0cnVjdG9yIT09bnVsbCYmISQoQS5jb25zdHJ1Y3RvcikmJk4oQS5jb25zdHJ1Y3Rvci5pc0J1ZmZlcikmJkEuY29uc3RydWN0b3IuaXNCdWZmZXIoQSl9dmFyIHB0PUcoIkFycmF5QnVmZmVyIik7ZnVuY3Rpb24gTWUoQSl7bGV0IHQ7cmV0dXJuIHR5cGVvZiBBcnJheUJ1ZmZlcjwidSImJkFycmF5QnVmZmVyLmlzVmlldz90PUFycmF5QnVmZmVyLmlzVmlldyhBKTp0PUEmJkEuYnVmZmVyJiZwdChBLmJ1ZmZlciksdH12YXIgVGU9REEoInN0cmluZyIpLE49REEoImZ1bmN0aW9uIiksU3Q9REEoIm51bWJlciIpLGhBPUE9PkEhPT1udWxsJiZ0eXBlb2YgQT09Im9iamVjdCIsS2U9QT0+QT09PSEwfHxBPT09ITEsbEE9QT0+e2lmKHVBKEEpIT09Im9iamVjdCIpcmV0dXJuITE7bGV0IHQ9T0EoQSk7cmV0dXJuKHQ9PT1udWxsfHx0PT09T2JqZWN0LnByb3RvdHlwZXx8T2JqZWN0LmdldFByb3RvdHlwZU9mKHQpPT09bnVsbCkmJiEoU3ltYm9sLnRvU3RyaW5nVGFnIGluIEEpJiYhKFN5bWJvbC5pdGVyYXRvciBpbiBBKX0sT2U9RygiRGF0ZSIpLHhlPUcoIkZpbGUiKSxQZT1HKCJCbG9iIiksamU9RygiRmlsZUxpc3QiKSxXZT1BPT5oQShBKSYmTihBLnBpcGUpLFplPUE9PntsZXQgdDtyZXR1cm4gQSYmKHR5cGVvZiBGb3JtRGF0YT09ImZ1bmN0aW9uIiYmQSBpbnN0YW5jZW9mIEZvcm1EYXRhfHxOKEEuYXBwZW5kKSYmKCh0PXVBKEEpKT09PSJmb3JtZGF0YSJ8fHQ9PT0ib2JqZWN0IiYmTihBLnRvU3RyaW5nKSYmQS50b1N0cmluZygpPT09IltvYmplY3QgRm9ybURhdGFdIikpfSxWZT1HKCJVUkxTZWFyY2hQYXJhbXMiKSxbX2UsWGUsemUsdmVdPVsiUmVhZGFibGVTdHJlYW0iLCJSZXF1ZXN0IiwiUmVzcG9uc2UiLCJIZWFkZXJzIl0ubWFwKEcpLCRlPUE9PkEudHJpbT9BLnRyaW0oKTpBLnJlcGxhY2UoL15bXFxzXFx1RkVGRlxceEEwXSt8W1xcc1xcdUZFRkZcXHhBMF0rJC9nLCIiKTtmdW5jdGlvbiBBQShBLHQse2FsbE93bktleXM6ZT0hMX09e30pe2lmKEE9PT1udWxsfHx0eXBlb2YgQT4idSIpcmV0dXJuO2xldCBJLHI7aWYodHlwZW9mIEEhPSJvYmplY3QiJiYoQT1bQV0pLGooQSkpZm9yKEk9MCxyPUEubGVuZ3RoO0k8cjtJKyspdC5jYWxsKG51bGwsQVtJXSxJLEEpO2Vsc2V7bGV0IG89ZT9PYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhBKTpPYmplY3Qua2V5cyhBKSxnPW8ubGVuZ3RoLEM7Zm9yKEk9MDtJPGc7SSsrKUM9b1tJXSx0LmNhbGwobnVsbCxBW0NdLEMsQSl9fWZ1bmN0aW9uIEZ0KEEsdCl7dD10LnRvTG93ZXJDYXNlKCk7bGV0IGU9T2JqZWN0LmtleXMoQSksST1lLmxlbmd0aCxyO2Zvcig7SS0tID4wOylpZihyPWVbSV0sdD09PXIudG9Mb3dlckNhc2UoKSlyZXR1cm4gcjtyZXR1cm4gbnVsbH12YXIgeD10eXBlb2YgZ2xvYmFsVGhpczwidSI/Z2xvYmFsVGhpczp0eXBlb2Ygc2VsZjwidSI/c2VsZjp0eXBlb2Ygd2luZG93PCJ1Ij93aW5kb3c6Z2xvYmFsLFJ0PUE9PiEkKEEpJiZBIT09eDtmdW5jdGlvbiBLQSgpe2xldHtjYXNlbGVzczpBfT1SdCh0aGlzKSYmdGhpc3x8e30sdD17fSxlPShJLHIpPT57bGV0IG89QSYmRnQodCxyKXx8cjtsQSh0W29dKSYmbEEoSSk/dFtvXT1LQSh0W29dLEkpOmxBKEkpP3Rbb109S0Eoe30sSSk6aihJKT90W29dPUkuc2xpY2UoKTp0W29dPUl9O2ZvcihsZXQgST0wLHI9YXJndW1lbnRzLmxlbmd0aDtJPHI7SSsrKWFyZ3VtZW50c1tJXSYmQUEoYXJndW1lbnRzW0ldLGUpO3JldHVybiB0fXZhciBBST0oQSx0LGUse2FsbE93bktleXM6SX09e30pPT4oQUEodCwocixvKT0+e2UmJk4ocik/QVtvXT12KHIsZSk6QVtvXT1yfSx7YWxsT3duS2V5czpJfSksQSksdEk9QT0+KEEuY2hhckNvZGVBdCgwKT09PTY1Mjc5JiYoQT1BLnNsaWNlKDEpKSxBKSxlST0oQSx0LGUsSSk9PntBLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHQucHJvdG90eXBlLEkpLEEucHJvdG90eXBlLmNvbnN0cnVjdG9yPUEsT2JqZWN0LmRlZmluZVByb3BlcnR5KEEsInN1cGVyIix7dmFsdWU6dC5wcm90b3R5cGV9KSxlJiZPYmplY3QuYXNzaWduKEEucHJvdG90eXBlLGUpfSxJST0oQSx0LGUsSSk9PntsZXQgcixvLGcsQz17fTtpZih0PXR8fHt9LEE9PW51bGwpcmV0dXJuIHQ7ZG97Zm9yKHI9T2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoQSksbz1yLmxlbmd0aDtvLS0gPjA7KWc9cltvXSwoIUl8fEkoZyxBLHQpKSYmIUNbZ10mJih0W2ddPUFbZ10sQ1tnXT0hMCk7QT1lIT09ITEmJk9BKEEpfXdoaWxlKEEmJighZXx8ZShBLHQpKSYmQSE9PU9iamVjdC5wcm90b3R5cGUpO3JldHVybiB0fSxyST0oQSx0LGUpPT57QT1TdHJpbmcoQSksKGU9PT12b2lkIDB8fGU+QS5sZW5ndGgpJiYoZT1BLmxlbmd0aCksZS09dC5sZW5ndGg7bGV0IEk9QS5pbmRleE9mKHQsZSk7cmV0dXJuIEkhPT0tMSYmST09PWV9LG9JPUE9PntpZighQSlyZXR1cm4gbnVsbDtpZihqKEEpKXJldHVybiBBO2xldCB0PUEubGVuZ3RoO2lmKCFTdCh0KSlyZXR1cm4gbnVsbDtsZXQgZT1uZXcgQXJyYXkodCk7Zm9yKDt0LS0gPjA7KWVbdF09QVt0XTtyZXR1cm4gZX0sZ0k9KEE9PnQ9PkEmJnQgaW5zdGFuY2VvZiBBKSh0eXBlb2YgVWludDhBcnJheTwidSImJk9BKFVpbnQ4QXJyYXkpKSxpST0oQSx0KT0+e2xldCBJPShBJiZBW1N5bWJvbC5pdGVyYXRvcl0pLmNhbGwoQSkscjtmb3IoOyhyPUkubmV4dCgpKSYmIXIuZG9uZTspe2xldCBvPXIudmFsdWU7dC5jYWxsKEEsb1swXSxvWzFdKX19LG5JPShBLHQpPT57bGV0IGUsST1bXTtmb3IoOyhlPUEuZXhlYyh0KSkhPT1udWxsOylJLnB1c2goZSk7cmV0dXJuIEl9LHNJPUcoIkhUTUxGb3JtRWxlbWVudCIpLENJPUE9PkEudG9Mb3dlckNhc2UoKS5yZXBsYWNlKC9bLV9cXHNdKFthLXpcXGRdKShcXHcqKS9nLGZ1bmN0aW9uKGUsSSxyKXtyZXR1cm4gSS50b1VwcGVyQ2FzZSgpK3J9KSxtdD0oKHtoYXNPd25Qcm9wZXJ0eTpBfSk9Pih0LGUpPT5BLmNhbGwodCxlKSkoT2JqZWN0LnByb3RvdHlwZSksQkk9RygiUmVnRXhwIiksTnQ9KEEsdCk9PntsZXQgZT1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyhBKSxJPXt9O0FBKGUsKHIsbyk9PntsZXQgZzsoZz10KHIsbyxBKSkhPT0hMSYmKElbb109Z3x8cil9KSxPYmplY3QuZGVmaW5lUHJvcGVydGllcyhBLEkpfSxhST1BPT57TnQoQSwodCxlKT0+e2lmKE4oQSkmJlsiYXJndW1lbnRzIiwiY2FsbGVyIiwiY2FsbGVlIl0uaW5kZXhPZihlKSE9PS0xKXJldHVybiExO2xldCBJPUFbZV07aWYoTihJKSl7aWYodC5lbnVtZXJhYmxlPSExLCJ3cml0YWJsZSJpbiB0KXt0LndyaXRhYmxlPSExO3JldHVybn10LnNldHx8KHQuc2V0PSgpPT57dGhyb3cgRXJyb3IoIkNhbiBub3QgcmV3cml0ZSByZWFkLW9ubHkgbWV0aG9kIFwnIitlKyJcJyIpfSl9fSl9LFFJPShBLHQpPT57bGV0IGU9e30sST1yPT57ci5mb3JFYWNoKG89PntlW29dPSEwfSl9O3JldHVybiBqKEEpP0koQSk6SShTdHJpbmcoQSkuc3BsaXQodCkpLGV9LEVJPSgpPT57fSxjST0oQSx0KT0+QSE9bnVsbCYmTnVtYmVyLmlzRmluaXRlKEE9K0EpP0E6dCxUQT0iYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXoiLHd0PSIwMTIzNDU2Nzg5IixVdD17RElHSVQ6d3QsQUxQSEE6VEEsQUxQSEFfRElHSVQ6VEErVEEudG9VcHBlckNhc2UoKSt3dH0sZkk9KEE9MTYsdD1VdC5BTFBIQV9ESUdJVCk9PntsZXQgZT0iIix7bGVuZ3RoOkl9PXQ7Zm9yKDtBLS07KWUrPXRbTWF0aC5yYW5kb20oKSpJfDBdO3JldHVybiBlfTtmdW5jdGlvbiBsSShBKXtyZXR1cm4hIShBJiZOKEEuYXBwZW5kKSYmQVtTeW1ib2wudG9TdHJpbmdUYWddPT09IkZvcm1EYXRhIiYmQVtTeW1ib2wuaXRlcmF0b3JdKX12YXIgdUk9QT0+e2xldCB0PW5ldyBBcnJheSgxMCksZT0oSSxyKT0+e2lmKGhBKEkpKXtpZih0LmluZGV4T2YoSSk+PTApcmV0dXJuO2lmKCEoInRvSlNPTiJpbiBJKSl7dFtyXT1JO2xldCBvPWooSSk/W106e307cmV0dXJuIEFBKEksKGcsQyk9PntsZXQgUT1lKGcscisxKTshJChRKSYmKG9bQ109USl9KSx0W3JdPXZvaWQgMCxvfX1yZXR1cm4gSX07cmV0dXJuIGUoQSwwKX0sREk9RygiQXN5bmNGdW5jdGlvbiIpLGhJPUE9PkEmJihoQShBKXx8TihBKSkmJk4oQS50aGVuKSYmTihBLmNhdGNoKSxHdD0oKEEsdCk9PkE/c2V0SW1tZWRpYXRlOnQ/KChlLEkpPT4oeC5hZGRFdmVudExpc3RlbmVyKCJtZXNzYWdlIiwoe3NvdXJjZTpyLGRhdGE6b30pPT57cj09PXgmJm89PT1lJiZJLmxlbmd0aCYmSS5zaGlmdCgpKCl9LCExKSxyPT57SS5wdXNoKHIpLHgucG9zdE1lc3NhZ2UoZSwiKiIpfSkpKGBheGlvc0Ake01hdGgucmFuZG9tKCl9YCxbXSk6ZT0+c2V0VGltZW91dChlKSkodHlwZW9mIHNldEltbWVkaWF0ZT09ImZ1bmN0aW9uIixOKHgucG9zdE1lc3NhZ2UpKSxkST10eXBlb2YgcXVldWVNaWNyb3Rhc2s8InUiP3F1ZXVlTWljcm90YXNrLmJpbmQoeCk6dHlwZW9mIHByb2Nlc3M8InUiJiZwcm9jZXNzLm5leHRUaWNrfHxHdCxpPXtpc0FycmF5OmosaXNBcnJheUJ1ZmZlcjpwdCxpc0J1ZmZlcjpxZSxpc0Zvcm1EYXRhOlplLGlzQXJyYXlCdWZmZXJWaWV3Ok1lLGlzU3RyaW5nOlRlLGlzTnVtYmVyOlN0LGlzQm9vbGVhbjpLZSxpc09iamVjdDpoQSxpc1BsYWluT2JqZWN0OmxBLGlzUmVhZGFibGVTdHJlYW06X2UsaXNSZXF1ZXN0OlhlLGlzUmVzcG9uc2U6emUsaXNIZWFkZXJzOnZlLGlzVW5kZWZpbmVkOiQsaXNEYXRlOk9lLGlzRmlsZTp4ZSxpc0Jsb2I6UGUsaXNSZWdFeHA6QkksaXNGdW5jdGlvbjpOLGlzU3RyZWFtOldlLGlzVVJMU2VhcmNoUGFyYW1zOlZlLGlzVHlwZWRBcnJheTpnSSxpc0ZpbGVMaXN0OmplLGZvckVhY2g6QUEsbWVyZ2U6S0EsZXh0ZW5kOkFJLHRyaW06JGUsc3RyaXBCT006dEksaW5oZXJpdHM6ZUksdG9GbGF0T2JqZWN0OklJLGtpbmRPZjp1QSxraW5kT2ZUZXN0OkcsZW5kc1dpdGg6ckksdG9BcnJheTpvSSxmb3JFYWNoRW50cnk6aUksbWF0Y2hBbGw6bkksaXNIVE1MRm9ybTpzSSxoYXNPd25Qcm9wZXJ0eTptdCxoYXNPd25Qcm9wOm10LHJlZHVjZURlc2NyaXB0b3JzOk50LGZyZWV6ZU1ldGhvZHM6YUksdG9PYmplY3RTZXQ6UUksdG9DYW1lbENhc2U6Q0ksbm9vcDpFSSx0b0Zpbml0ZU51bWJlcjpjSSxmaW5kS2V5OkZ0LGdsb2JhbDp4LGlzQ29udGV4dERlZmluZWQ6UnQsQUxQSEFCRVQ6VXQsZ2VuZXJhdGVTdHJpbmc6ZkksaXNTcGVjQ29tcGxpYW50Rm9ybTpsSSx0b0pTT05PYmplY3Q6dUksaXNBc3luY0ZuOkRJLGlzVGhlbmFibGU6aEksc2V0SW1tZWRpYXRlOkd0LGFzYXA6ZEl9O2Z1bmN0aW9uIFcoQSx0LGUsSSxyKXtFcnJvci5jYWxsKHRoaXMpLEVycm9yLmNhcHR1cmVTdGFja1RyYWNlP0Vycm9yLmNhcHR1cmVTdGFja1RyYWNlKHRoaXMsdGhpcy5jb25zdHJ1Y3Rvcik6dGhpcy5zdGFjaz1uZXcgRXJyb3IoKS5zdGFjayx0aGlzLm1lc3NhZ2U9QSx0aGlzLm5hbWU9IkF4aW9zRXJyb3IiLHQmJih0aGlzLmNvZGU9dCksZSYmKHRoaXMuY29uZmlnPWUpLEkmJih0aGlzLnJlcXVlc3Q9SSksciYmKHRoaXMucmVzcG9uc2U9cil9aS5pbmhlcml0cyhXLEVycm9yLHt0b0pTT046ZnVuY3Rpb24oKXtyZXR1cm57bWVzc2FnZTp0aGlzLm1lc3NhZ2UsbmFtZTp0aGlzLm5hbWUsZGVzY3JpcHRpb246dGhpcy5kZXNjcmlwdGlvbixudW1iZXI6dGhpcy5udW1iZXIsZmlsZU5hbWU6dGhpcy5maWxlTmFtZSxsaW5lTnVtYmVyOnRoaXMubGluZU51bWJlcixjb2x1bW5OdW1iZXI6dGhpcy5jb2x1bW5OdW1iZXIsc3RhY2s6dGhpcy5zdGFjayxjb25maWc6aS50b0pTT05PYmplY3QodGhpcy5jb25maWcpLGNvZGU6dGhpcy5jb2RlLHN0YXR1czp0aGlzLnJlc3BvbnNlJiZ0aGlzLnJlc3BvbnNlLnN0YXR1cz90aGlzLnJlc3BvbnNlLnN0YXR1czpudWxsfX19KTt2YXIga3Q9Vy5wcm90b3R5cGUsTHQ9e307WyJFUlJfQkFEX09QVElPTl9WQUxVRSIsIkVSUl9CQURfT1BUSU9OIiwiRUNPTk5BQk9SVEVEIiwiRVRJTUVET1VUIiwiRVJSX05FVFdPUksiLCJFUlJfRlJfVE9PX01BTllfUkVESVJFQ1RTIiwiRVJSX0RFUFJFQ0FURUQiLCJFUlJfQkFEX1JFU1BPTlNFIiwiRVJSX0JBRF9SRVFVRVNUIiwiRVJSX0NBTkNFTEVEIiwiRVJSX05PVF9TVVBQT1JUIiwiRVJSX0lOVkFMSURfVVJMIl0uZm9yRWFjaChBPT57THRbQV09e3ZhbHVlOkF9fSk7T2JqZWN0LmRlZmluZVByb3BlcnRpZXMoVyxMdCk7T2JqZWN0LmRlZmluZVByb3BlcnR5KGt0LCJpc0F4aW9zRXJyb3IiLHt2YWx1ZTohMH0pO1cuZnJvbT0oQSx0LGUsSSxyLG8pPT57bGV0IGc9T2JqZWN0LmNyZWF0ZShrdCk7cmV0dXJuIGkudG9GbGF0T2JqZWN0KEEsZyxmdW5jdGlvbihRKXtyZXR1cm4gUSE9PUVycm9yLnByb3RvdHlwZX0sQz0+QyE9PSJpc0F4aW9zRXJyb3IiKSxXLmNhbGwoZyxBLm1lc3NhZ2UsdCxlLEksciksZy5jYXVzZT1BLGcubmFtZT1BLm5hbWUsbyYmT2JqZWN0LmFzc2lnbihnLG8pLGd9O3ZhciB1PVc7dmFyIGRBPW51bGw7ZnVuY3Rpb24geEEoQSl7cmV0dXJuIGkuaXNQbGFpbk9iamVjdChBKXx8aS5pc0FycmF5KEEpfWZ1bmN0aW9uIGJ0KEEpe3JldHVybiBpLmVuZHNXaXRoKEEsIltdIik/QS5zbGljZSgwLC0yKTpBfWZ1bmN0aW9uIEp0KEEsdCxlKXtyZXR1cm4gQT9BLmNvbmNhdCh0KS5tYXAoZnVuY3Rpb24ocixvKXtyZXR1cm4gcj1idChyKSwhZSYmbz8iWyIrcisiXSI6cn0pLmpvaW4oZT8iLiI6IiIpOnR9ZnVuY3Rpb24geUkoQSl7cmV0dXJuIGkuaXNBcnJheShBKSYmIUEuc29tZSh4QSl9dmFyIG1JPWkudG9GbGF0T2JqZWN0KGkse30sbnVsbCxmdW5jdGlvbih0KXtyZXR1cm4vXmlzW0EtWl0vLnRlc3QodCl9KTtmdW5jdGlvbiB3SShBLHQsZSl7aWYoIWkuaXNPYmplY3QoQSkpdGhyb3cgbmV3IFR5cGVFcnJvcigidGFyZ2V0IG11c3QgYmUgYW4gb2JqZWN0Iik7dD10fHxuZXcoZEF8fEZvcm1EYXRhKSxlPWkudG9GbGF0T2JqZWN0KGUse21ldGFUb2tlbnM6ITAsZG90czohMSxpbmRleGVzOiExfSwhMSxmdW5jdGlvbihsLGMpe3JldHVybiFpLmlzVW5kZWZpbmVkKGNbbF0pfSk7bGV0IEk9ZS5tZXRhVG9rZW5zLHI9ZS52aXNpdG9yfHxuLG89ZS5kb3RzLGc9ZS5pbmRleGVzLFE9KGUuQmxvYnx8dHlwZW9mIEJsb2I8InUiJiZCbG9iKSYmaS5pc1NwZWNDb21wbGlhbnRGb3JtKHQpO2lmKCFpLmlzRnVuY3Rpb24ocikpdGhyb3cgbmV3IFR5cGVFcnJvcigidmlzaXRvciBtdXN0IGJlIGEgZnVuY3Rpb24iKTtmdW5jdGlvbiBhKEUpe2lmKEU9PT1udWxsKXJldHVybiIiO2lmKGkuaXNEYXRlKEUpKXJldHVybiBFLnRvSVNPU3RyaW5nKCk7aWYoIVEmJmkuaXNCbG9iKEUpKXRocm93IG5ldyB1KCJCbG9iIGlzIG5vdCBzdXBwb3J0ZWQuIFVzZSBhIEJ1ZmZlciBpbnN0ZWFkLiIpO3JldHVybiBpLmlzQXJyYXlCdWZmZXIoRSl8fGkuaXNUeXBlZEFycmF5KEUpP1EmJnR5cGVvZiBCbG9iPT0iZnVuY3Rpb24iP25ldyBCbG9iKFtFXSk6QnVmZmVyLmZyb20oRSk6RX1mdW5jdGlvbiBuKEUsbCxjKXtsZXQgcD1FO2lmKEUmJiFjJiZ0eXBlb2YgRT09Im9iamVjdCIpe2lmKGkuZW5kc1dpdGgobCwie30iKSlsPUk/bDpsLnNsaWNlKDAsLTIpLEU9SlNPTi5zdHJpbmdpZnkoRSk7ZWxzZSBpZihpLmlzQXJyYXkoRSkmJnlJKEUpfHwoaS5pc0ZpbGVMaXN0KEUpfHxpLmVuZHNXaXRoKGwsIltdIikpJiYocD1pLnRvQXJyYXkoRSkpKXJldHVybiBsPWJ0KGwpLHAuZm9yRWFjaChmdW5jdGlvbihELFUpeyEoaS5pc1VuZGVmaW5lZChEKXx8RD09PW51bGwpJiZ0LmFwcGVuZChnPT09ITA/SnQoW2xdLFUsbyk6Zz09PW51bGw/bDpsKyJbXSIsYShEKSl9KSwhMX1yZXR1cm4geEEoRSk/ITA6KHQuYXBwZW5kKEp0KGMsbCxvKSxhKEUpKSwhMSl9bGV0IHM9W10sZj1PYmplY3QuYXNzaWduKG1JLHtkZWZhdWx0VmlzaXRvcjpuLGNvbnZlcnRWYWx1ZTphLGlzVmlzaXRhYmxlOnhBfSk7ZnVuY3Rpb24gQihFLGwpe2lmKCFpLmlzVW5kZWZpbmVkKEUpKXtpZihzLmluZGV4T2YoRSkhPT0tMSl0aHJvdyBFcnJvcigiQ2lyY3VsYXIgcmVmZXJlbmNlIGRldGVjdGVkIGluICIrbC5qb2luKCIuIikpO3MucHVzaChFKSxpLmZvckVhY2goRSxmdW5jdGlvbihwLFMpeyghKGkuaXNVbmRlZmluZWQocCl8fHA9PT1udWxsKSYmci5jYWxsKHQscCxpLmlzU3RyaW5nKFMpP1MudHJpbSgpOlMsbCxmKSk9PT0hMCYmQihwLGw/bC5jb25jYXQoUyk6W1NdKX0pLHMucG9wKCl9fWlmKCFpLmlzT2JqZWN0KEEpKXRocm93IG5ldyBUeXBlRXJyb3IoImRhdGEgbXVzdCBiZSBhbiBvYmplY3QiKTtyZXR1cm4gQihBKSx0fXZhciBxPXdJO2Z1bmN0aW9uIEh0KEEpe2xldCB0PXsiISI6IiUyNTIxIiwiXCciOiIlMjUyNyIsIigiOiIlMjUyOCIsIikiOiIlMjUyOSIsIn4iOiIlMjU3RSIsIiUyNTIwIjoiKyIsIiUyNTAwIjoiXFwwIn07cmV0dXJuIGVuY29kZVVSSUNvbXBvbmVudChBKS5yZXBsYWNlKC9bIVwnKCl+XXwlMjUyMHwlMjUwMC9nLGZ1bmN0aW9uKEkpe3JldHVybiB0W0ldfSl9ZnVuY3Rpb24gWXQoQSx0KXt0aGlzLl9wYWlycz1bXSxBJiZxKEEsdGhpcyx0KX12YXIgcXQ9WXQucHJvdG90eXBlO3F0LmFwcGVuZD1mdW5jdGlvbih0LGUpe3RoaXMuX3BhaXJzLnB1c2goW3QsZV0pfTtxdC50b1N0cmluZz1mdW5jdGlvbih0KXtsZXQgZT10P2Z1bmN0aW9uKEkpe3JldHVybiB0LmNhbGwodGhpcyxJLEh0KX06SHQ7cmV0dXJuIHRoaXMuX3BhaXJzLm1hcChmdW5jdGlvbihyKXtyZXR1cm4gZShyWzBdKSsiPSIrZShyWzFdKX0sIiIpLmpvaW4oIiYiKX07dmFyIHlBPVl0O2Z1bmN0aW9uIHBJKEEpe3JldHVybiBlbmNvZGVVUklDb21wb25lbnQoQSkucmVwbGFjZSgvJTI1M0EvZ2ksIjoiKS5yZXBsYWNlKC8lMjUyNC9nLCIkIikucmVwbGFjZSgvJTI1MkMvZ2ksIiwiKS5yZXBsYWNlKC8lMjUyMC9nLCIrIikucmVwbGFjZSgvJTI1NUIvZ2ksIlsiKS5yZXBsYWNlKC8lMjU1RC9naSwiXSIpfWZ1bmN0aW9uIHRBKEEsdCxlKXtpZighdClyZXR1cm4gQTtsZXQgST1lJiZlLmVuY29kZXx8cEkscj1lJiZlLnNlcmlhbGl6ZSxvO2lmKHI/bz1yKHQsZSk6bz1pLmlzVVJMU2VhcmNoUGFyYW1zKHQpP3QudG9TdHJpbmcoKTpuZXcgeUEodCxlKS50b1N0cmluZyhJKSxvKXtsZXQgZz1BLmluZGV4T2YoIiUyMyIpO2chPT0tMSYmKEE9QS5zbGljZSgwLGcpKSxBKz0oQS5pbmRleE9mKCI/Iik9PT0tMT8iPyI6IiYiKStvfXJldHVybiBBfXZhciBQQT1jbGFzc3tjb25zdHJ1Y3Rvcigpe3RoaXMuaGFuZGxlcnM9W119dXNlKHQsZSxJKXtyZXR1cm4gdGhpcy5oYW5kbGVycy5wdXNoKHtmdWxmaWxsZWQ6dCxyZWplY3RlZDplLHN5bmNocm9ub3VzOkk/SS5zeW5jaHJvbm91czohMSxydW5XaGVuOkk/SS5ydW5XaGVuOm51bGx9KSx0aGlzLmhhbmRsZXJzLmxlbmd0aC0xfWVqZWN0KHQpe3RoaXMuaGFuZGxlcnNbdF0mJih0aGlzLmhhbmRsZXJzW3RdPW51bGwpfWNsZWFyKCl7dGhpcy5oYW5kbGVycyYmKHRoaXMuaGFuZGxlcnM9W10pfWZvckVhY2godCl7aS5mb3JFYWNoKHRoaXMuaGFuZGxlcnMsZnVuY3Rpb24oSSl7SSE9PW51bGwmJnQoSSl9KX19LGpBPVBBO3ZhciBtQT17c2lsZW50SlNPTlBhcnNpbmc6ITAsZm9yY2VkSlNPTlBhcnNpbmc6ITAsY2xhcmlmeVRpbWVvdXRFcnJvcjohMX07dmFyIE10PXR5cGVvZiBVUkxTZWFyY2hQYXJhbXM8InUiP1VSTFNlYXJjaFBhcmFtczp5QTt2YXIgVHQ9dHlwZW9mIEZvcm1EYXRhPCJ1Ij9Gb3JtRGF0YTpudWxsO3ZhciBLdD10eXBlb2YgQmxvYjwidSI/QmxvYjpudWxsO3ZhciBPdD17aXNCcm93c2VyOiEwLGNsYXNzZXM6e1VSTFNlYXJjaFBhcmFtczpNdCxGb3JtRGF0YTpUdCxCbG9iOkt0fSxwcm90b2NvbHM6WyJodHRwIiwiaHR0cHMiLCJmaWxlIiwiYmxvYiIsInVybCIsImRhdGEiXX07dmFyIFpBPXt9O3dlKFpBLHtoYXNCcm93c2VyRW52OigpPT5XQSxoYXNTdGFuZGFyZEJyb3dzZXJFbnY6KCk9PlNJLGhhc1N0YW5kYXJkQnJvd3NlcldlYldvcmtlckVudjooKT0+Rkksb3JpZ2luOigpPT5SSX0pO3ZhciBXQT10eXBlb2Ygd2luZG93PCJ1IiYmdHlwZW9mIGRvY3VtZW50PCJ1IixTST0oQT0+V0EmJlsiUmVhY3ROYXRpdmUiLCJOYXRpdmVTY3JpcHQiLCJOUyJdLmluZGV4T2YoQSk8MCkodHlwZW9mIG5hdmlnYXRvcjwidSImJm5hdmlnYXRvci5wcm9kdWN0KSxGST10eXBlb2YgV29ya2VyR2xvYmFsU2NvcGU8InUiJiZzZWxmIGluc3RhbmNlb2YgV29ya2VyR2xvYmFsU2NvcGUmJnR5cGVvZiBzZWxmLmltcG9ydFNjcmlwdHM9PSJmdW5jdGlvbiIsUkk9V0EmJndpbmRvdy5sb2NhdGlvbi5ocmVmfHwiaHR0cDovL2xvY2FsaG9zdCI7dmFyIHc9ey4uLlpBLC4uLk90fTtmdW5jdGlvbiBWQShBLHQpe3JldHVybiBxKEEsbmV3IHcuY2xhc3Nlcy5VUkxTZWFyY2hQYXJhbXMsT2JqZWN0LmFzc2lnbih7dmlzaXRvcjpmdW5jdGlvbihlLEkscixvKXtyZXR1cm4gdy5pc05vZGUmJmkuaXNCdWZmZXIoZSk/KHRoaXMuYXBwZW5kKEksZS50b1N0cmluZygiYmFzZTY0IikpLCExKTpvLmRlZmF1bHRWaXNpdG9yLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19LHQpKX1mdW5jdGlvbiBOSShBKXtyZXR1cm4gaS5tYXRjaEFsbCgvXFx3K3xcXFsoXFx3KildL2csQSkubWFwKHQ9PnRbMF09PT0iW10iPyIiOnRbMV18fHRbMF0pfWZ1bmN0aW9uIFVJKEEpe2xldCB0PXt9LGU9T2JqZWN0LmtleXMoQSksSSxyPWUubGVuZ3RoLG87Zm9yKEk9MDtJPHI7SSsrKW89ZVtJXSx0W29dPUFbb107cmV0dXJuIHR9ZnVuY3Rpb24gR0koQSl7ZnVuY3Rpb24gdChlLEkscixvKXtsZXQgZz1lW28rK107aWYoZz09PSJfX3Byb3RvX18iKXJldHVybiEwO2xldCBDPU51bWJlci5pc0Zpbml0ZSgrZyksUT1vPj1lLmxlbmd0aDtyZXR1cm4gZz0hZyYmaS5pc0FycmF5KHIpP3IubGVuZ3RoOmcsUT8oaS5oYXNPd25Qcm9wKHIsZyk/cltnXT1bcltnXSxJXTpyW2ddPUksIUMpOigoIXJbZ118fCFpLmlzT2JqZWN0KHJbZ10pKSYmKHJbZ109W10pLHQoZSxJLHJbZ10sbykmJmkuaXNBcnJheShyW2ddKSYmKHJbZ109VUkocltnXSkpLCFDKX1pZihpLmlzRm9ybURhdGEoQSkmJmkuaXNGdW5jdGlvbihBLmVudHJpZXMpKXtsZXQgZT17fTtyZXR1cm4gaS5mb3JFYWNoRW50cnkoQSwoSSxyKT0+e3QoTkkoSSkscixlLDApfSksZX1yZXR1cm4gbnVsbH12YXIgd0E9R0k7ZnVuY3Rpb24ga0koQSx0LGUpe2lmKGkuaXNTdHJpbmcoQSkpdHJ5e3JldHVybih0fHxKU09OLnBhcnNlKShBKSxpLnRyaW0oQSl9Y2F0Y2goSSl7aWYoSS5uYW1lIT09IlN5bnRheEVycm9yIil0aHJvdyBJfXJldHVybihlfHxKU09OLnN0cmluZ2lmeSkoQSl9dmFyIF9BPXt0cmFuc2l0aW9uYWw6bUEsYWRhcHRlcjpbInhociIsImh0dHAiLCJmZXRjaCJdLHRyYW5zZm9ybVJlcXVlc3Q6W2Z1bmN0aW9uKHQsZSl7bGV0IEk9ZS5nZXRDb250ZW50VHlwZSgpfHwiIixyPUkuaW5kZXhPZigiYXBwbGljYXRpb24vanNvbiIpPi0xLG89aS5pc09iamVjdCh0KTtpZihvJiZpLmlzSFRNTEZvcm0odCkmJih0PW5ldyBGb3JtRGF0YSh0KSksaS5pc0Zvcm1EYXRhKHQpKXJldHVybiByP0pTT04uc3RyaW5naWZ5KHdBKHQpKTp0O2lmKGkuaXNBcnJheUJ1ZmZlcih0KXx8aS5pc0J1ZmZlcih0KXx8aS5pc1N0cmVhbSh0KXx8aS5pc0ZpbGUodCl8fGkuaXNCbG9iKHQpfHxpLmlzUmVhZGFibGVTdHJlYW0odCkpcmV0dXJuIHQ7aWYoaS5pc0FycmF5QnVmZmVyVmlldyh0KSlyZXR1cm4gdC5idWZmZXI7aWYoaS5pc1VSTFNlYXJjaFBhcmFtcyh0KSlyZXR1cm4gZS5zZXRDb250ZW50VHlwZSgiYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkO2NoYXJzZXQ9dXRmLTgiLCExKSx0LnRvU3RyaW5nKCk7bGV0IEM7aWYobyl7aWYoSS5pbmRleE9mKCJhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQiKT4tMSlyZXR1cm4gVkEodCx0aGlzLmZvcm1TZXJpYWxpemVyKS50b1N0cmluZygpO2lmKChDPWkuaXNGaWxlTGlzdCh0KSl8fEkuaW5kZXhPZigibXVsdGlwYXJ0L2Zvcm0tZGF0YSIpPi0xKXtsZXQgUT10aGlzLmVudiYmdGhpcy5lbnYuRm9ybURhdGE7cmV0dXJuIHEoQz97ImZpbGVzW10iOnR9OnQsUSYmbmV3IFEsdGhpcy5mb3JtU2VyaWFsaXplcil9fXJldHVybiBvfHxyPyhlLnNldENvbnRlbnRUeXBlKCJhcHBsaWNhdGlvbi9qc29uIiwhMSksa0kodCkpOnR9XSx0cmFuc2Zvcm1SZXNwb25zZTpbZnVuY3Rpb24odCl7bGV0IGU9dGhpcy50cmFuc2l0aW9uYWx8fF9BLnRyYW5zaXRpb25hbCxJPWUmJmUuZm9yY2VkSlNPTlBhcnNpbmcscj10aGlzLnJlc3BvbnNlVHlwZT09PSJqc29uIjtpZihpLmlzUmVzcG9uc2UodCl8fGkuaXNSZWFkYWJsZVN0cmVhbSh0KSlyZXR1cm4gdDtpZih0JiZpLmlzU3RyaW5nKHQpJiYoSSYmIXRoaXMucmVzcG9uc2VUeXBlfHxyKSl7bGV0IGc9IShlJiZlLnNpbGVudEpTT05QYXJzaW5nKSYmcjt0cnl7cmV0dXJuIEpTT04ucGFyc2UodCl9Y2F0Y2goQyl7aWYoZyl0aHJvdyBDLm5hbWU9PT0iU3ludGF4RXJyb3IiP3UuZnJvbShDLHUuRVJSX0JBRF9SRVNQT05TRSx0aGlzLG51bGwsdGhpcy5yZXNwb25zZSk6Q319cmV0dXJuIHR9XSx0aW1lb3V0OjAseHNyZkNvb2tpZU5hbWU6IlhTUkYtVE9LRU4iLHhzcmZIZWFkZXJOYW1lOiJYLVhTUkYtVE9LRU4iLG1heENvbnRlbnRMZW5ndGg6LTEsbWF4Qm9keUxlbmd0aDotMSxlbnY6e0Zvcm1EYXRhOncuY2xhc3Nlcy5Gb3JtRGF0YSxCbG9iOncuY2xhc3Nlcy5CbG9ifSx2YWxpZGF0ZVN0YXR1czpmdW5jdGlvbih0KXtyZXR1cm4gdD49MjAwJiZ0PDMwMH0saGVhZGVyczp7Y29tbW9uOntBY2NlcHQ6ImFwcGxpY2F0aW9uL2pzb24sIHRleHQvcGxhaW4sICovKiIsIkNvbnRlbnQtVHlwZSI6dm9pZCAwfX19O2kuZm9yRWFjaChbImRlbGV0ZSIsImdldCIsImhlYWQiLCJwb3N0IiwicHV0IiwicGF0Y2giXSxBPT57X0EuaGVhZGVyc1tBXT17fX0pO3ZhciBaPV9BO3ZhciBMST1pLnRvT2JqZWN0U2V0KFsiYWdlIiwiYXV0aG9yaXphdGlvbiIsImNvbnRlbnQtbGVuZ3RoIiwiY29udGVudC10eXBlIiwiZXRhZyIsImV4cGlyZXMiLCJmcm9tIiwiaG9zdCIsImlmLW1vZGlmaWVkLXNpbmNlIiwiaWYtdW5tb2RpZmllZC1zaW5jZSIsImxhc3QtbW9kaWZpZWQiLCJsb2NhdGlvbiIsIm1heC1mb3J3YXJkcyIsInByb3h5LWF1dGhvcml6YXRpb24iLCJyZWZlcmVyIiwicmV0cnktYWZ0ZXIiLCJ1c2VyLWFnZW50Il0pLHh0PUE9PntsZXQgdD17fSxlLEkscjtyZXR1cm4gQSYmQS5zcGxpdChgJTBBYCkuZm9yRWFjaChmdW5jdGlvbihnKXtyPWcuaW5kZXhPZigiOiIpLGU9Zy5zdWJzdHJpbmcoMCxyKS50cmltKCkudG9Mb3dlckNhc2UoKSxJPWcuc3Vic3RyaW5nKHIrMSkudHJpbSgpLCEoIWV8fHRbZV0mJkxJW2VdKSYmKGU9PT0ic2V0LWNvb2tpZSI/dFtlXT90W2VdLnB1c2goSSk6dFtlXT1bSV06dFtlXT10W2VdP3RbZV0rIiwgIitJOkkpfSksdH07dmFyIFB0PVN5bWJvbCgiaW50ZXJuYWxzIik7ZnVuY3Rpb24gZUEoQSl7cmV0dXJuIEEmJlN0cmluZyhBKS50cmltKCkudG9Mb3dlckNhc2UoKX1mdW5jdGlvbiBwQShBKXtyZXR1cm4gQT09PSExfHxBPT1udWxsP0E6aS5pc0FycmF5KEEpP0EubWFwKHBBKTpTdHJpbmcoQSl9ZnVuY3Rpb24gSkkoQSl7bGV0IHQ9T2JqZWN0LmNyZWF0ZShudWxsKSxlPS8oW15cXHMsOz1dKylcXHMqKD86PVxccyooW14sO10rKSk/L2csSTtmb3IoO0k9ZS5leGVjKEEpOyl0W0lbMV1dPUlbMl07cmV0dXJuIHR9dmFyIGJJPUE9Pi9eWy1fYS16QS1aMC05XmB8fiwhJTIzJCUmXCcqKy5dKyQvLnRlc3QoQS50cmltKCkpO2Z1bmN0aW9uIFhBKEEsdCxlLEkscil7aWYoaS5pc0Z1bmN0aW9uKEkpKXJldHVybiBJLmNhbGwodGhpcyx0LGUpO2lmKHImJih0PWUpLCEhaS5pc1N0cmluZyh0KSl7aWYoaS5pc1N0cmluZyhJKSlyZXR1cm4gdC5pbmRleE9mKEkpIT09LTE7aWYoaS5pc1JlZ0V4cChJKSlyZXR1cm4gSS50ZXN0KHQpfX1mdW5jdGlvbiBISShBKXtyZXR1cm4gQS50cmltKCkudG9Mb3dlckNhc2UoKS5yZXBsYWNlKC8oW2EtelxcZF0pKFxcdyopL2csKHQsZSxJKT0+ZS50b1VwcGVyQ2FzZSgpK0kpfWZ1bmN0aW9uIFlJKEEsdCl7bGV0IGU9aS50b0NhbWVsQ2FzZSgiICIrdCk7WyJnZXQiLCJzZXQiLCJoYXMiXS5mb3JFYWNoKEk9PntPYmplY3QuZGVmaW5lUHJvcGVydHkoQSxJK2Use3ZhbHVlOmZ1bmN0aW9uKHIsbyxnKXtyZXR1cm4gdGhpc1tJXS5jYWxsKHRoaXMsdCxyLG8sZyl9LGNvbmZpZ3VyYWJsZTohMH0pfSl9dmFyIFY9Y2xhc3N7Y29uc3RydWN0b3IodCl7dCYmdGhpcy5zZXQodCl9c2V0KHQsZSxJKXtsZXQgcj10aGlzO2Z1bmN0aW9uIG8oQyxRLGEpe2xldCBuPWVBKFEpO2lmKCFuKXRocm93IG5ldyBFcnJvcigiaGVhZGVyIG5hbWUgbXVzdCBiZSBhIG5vbi1lbXB0eSBzdHJpbmciKTtsZXQgcz1pLmZpbmRLZXkocixuKTsoIXN8fHJbc109PT12b2lkIDB8fGE9PT0hMHx8YT09PXZvaWQgMCYmcltzXSE9PSExKSYmKHJbc3x8UV09cEEoQykpfWxldCBnPShDLFEpPT5pLmZvckVhY2goQywoYSxuKT0+byhhLG4sUSkpO2lmKGkuaXNQbGFpbk9iamVjdCh0KXx8dCBpbnN0YW5jZW9mIHRoaXMuY29uc3RydWN0b3IpZyh0LGUpO2Vsc2UgaWYoaS5pc1N0cmluZyh0KSYmKHQ9dC50cmltKCkpJiYhYkkodCkpZyh4dCh0KSxlKTtlbHNlIGlmKGkuaXNIZWFkZXJzKHQpKWZvcihsZXRbQyxRXW9mIHQuZW50cmllcygpKW8oUSxDLEkpO2Vsc2UgdCE9bnVsbCYmbyhlLHQsSSk7cmV0dXJuIHRoaXN9Z2V0KHQsZSl7aWYodD1lQSh0KSx0KXtsZXQgST1pLmZpbmRLZXkodGhpcyx0KTtpZihJKXtsZXQgcj10aGlzW0ldO2lmKCFlKXJldHVybiByO2lmKGU9PT0hMClyZXR1cm4gSkkocik7aWYoaS5pc0Z1bmN0aW9uKGUpKXJldHVybiBlLmNhbGwodGhpcyxyLEkpO2lmKGkuaXNSZWdFeHAoZSkpcmV0dXJuIGUuZXhlYyhyKTt0aHJvdyBuZXcgVHlwZUVycm9yKCJwYXJzZXIgbXVzdCBiZSBib29sZWFufHJlZ2V4cHxmdW5jdGlvbiIpfX19aGFzKHQsZSl7aWYodD1lQSh0KSx0KXtsZXQgST1pLmZpbmRLZXkodGhpcyx0KTtyZXR1cm4hIShJJiZ0aGlzW0ldIT09dm9pZCAwJiYoIWV8fFhBKHRoaXMsdGhpc1tJXSxJLGUpKSl9cmV0dXJuITF9ZGVsZXRlKHQsZSl7bGV0IEk9dGhpcyxyPSExO2Z1bmN0aW9uIG8oZyl7aWYoZz1lQShnKSxnKXtsZXQgQz1pLmZpbmRLZXkoSSxnKTtDJiYoIWV8fFhBKEksSVtDXSxDLGUpKSYmKGRlbGV0ZSBJW0NdLHI9ITApfX1yZXR1cm4gaS5pc0FycmF5KHQpP3QuZm9yRWFjaChvKTpvKHQpLHJ9Y2xlYXIodCl7bGV0IGU9T2JqZWN0LmtleXModGhpcyksST1lLmxlbmd0aCxyPSExO2Zvcig7SS0tOyl7bGV0IG89ZVtJXTsoIXR8fFhBKHRoaXMsdGhpc1tvXSxvLHQsITApKSYmKGRlbGV0ZSB0aGlzW29dLHI9ITApfXJldHVybiByfW5vcm1hbGl6ZSh0KXtsZXQgZT10aGlzLEk9e307cmV0dXJuIGkuZm9yRWFjaCh0aGlzLChyLG8pPT57bGV0IGc9aS5maW5kS2V5KEksbyk7aWYoZyl7ZVtnXT1wQShyKSxkZWxldGUgZVtvXTtyZXR1cm59bGV0IEM9dD9ISShvKTpTdHJpbmcobykudHJpbSgpO0MhPT1vJiZkZWxldGUgZVtvXSxlW0NdPXBBKHIpLElbQ109ITB9KSx0aGlzfWNvbmNhdCguLi50KXtyZXR1cm4gdGhpcy5jb25zdHJ1Y3Rvci5jb25jYXQodGhpcywuLi50KX10b0pTT04odCl7bGV0IGU9T2JqZWN0LmNyZWF0ZShudWxsKTtyZXR1cm4gaS5mb3JFYWNoKHRoaXMsKEkscik9PntJIT1udWxsJiZJIT09ITEmJihlW3JdPXQmJmkuaXNBcnJheShJKT9JLmpvaW4oIiwgIik6SSl9KSxlfVtTeW1ib2wuaXRlcmF0b3JdKCl7cmV0dXJuIE9iamVjdC5lbnRyaWVzKHRoaXMudG9KU09OKCkpW1N5bWJvbC5pdGVyYXRvcl0oKX10b1N0cmluZygpe3JldHVybiBPYmplY3QuZW50cmllcyh0aGlzLnRvSlNPTigpKS5tYXAoKFt0LGVdKT0+dCsiOiAiK2UpLmpvaW4oYCUwQWApfWdldFtTeW1ib2wudG9TdHJpbmdUYWddKCl7cmV0dXJuIkF4aW9zSGVhZGVycyJ9c3RhdGljIGZyb20odCl7cmV0dXJuIHQgaW5zdGFuY2VvZiB0aGlzP3Q6bmV3IHRoaXModCl9c3RhdGljIGNvbmNhdCh0LC4uLmUpe2xldCBJPW5ldyB0aGlzKHQpO3JldHVybiBlLmZvckVhY2gocj0+SS5zZXQocikpLEl9c3RhdGljIGFjY2Vzc29yKHQpe2xldCBJPSh0aGlzW1B0XT10aGlzW1B0XT17YWNjZXNzb3JzOnt9fSkuYWNjZXNzb3JzLHI9dGhpcy5wcm90b3R5cGU7ZnVuY3Rpb24gbyhnKXtsZXQgQz1lQShnKTtJW0NdfHwoWUkocixnKSxJW0NdPSEwKX1yZXR1cm4gaS5pc0FycmF5KHQpP3QuZm9yRWFjaChvKTpvKHQpLHRoaXN9fTtWLmFjY2Vzc29yKFsiQ29udGVudC1UeXBlIiwiQ29udGVudC1MZW5ndGgiLCJBY2NlcHQiLCJBY2NlcHQtRW5jb2RpbmciLCJVc2VyLUFnZW50IiwiQXV0aG9yaXphdGlvbiJdKTtpLnJlZHVjZURlc2NyaXB0b3JzKFYucHJvdG90eXBlLCh7dmFsdWU6QX0sdCk9PntsZXQgZT10WzBdLnRvVXBwZXJDYXNlKCkrdC5zbGljZSgxKTtyZXR1cm57Z2V0OigpPT5BLHNldChJKXt0aGlzW2VdPUl9fX0pO2kuZnJlZXplTWV0aG9kcyhWKTt2YXIgbT1WO2Z1bmN0aW9uIElBKEEsdCl7bGV0IGU9dGhpc3x8WixJPXR8fGUscj1tLmZyb20oSS5oZWFkZXJzKSxvPUkuZGF0YTtyZXR1cm4gaS5mb3JFYWNoKEEsZnVuY3Rpb24oQyl7bz1DLmNhbGwoZSxvLHIubm9ybWFsaXplKCksdD90LnN0YXR1czp2b2lkIDApfSksci5ub3JtYWxpemUoKSxvfWZ1bmN0aW9uIHJBKEEpe3JldHVybiEhKEEmJkEuX19DQU5DRUxfXyl9ZnVuY3Rpb24ganQoQSx0LGUpe3UuY2FsbCh0aGlzLEE/PyJjYW5jZWxlZCIsdS5FUlJfQ0FOQ0VMRUQsdCxlKSx0aGlzLm5hbWU9IkNhbmNlbGVkRXJyb3IifWkuaW5oZXJpdHMoanQsdSx7X19DQU5DRUxfXzohMH0pO3ZhciBiPWp0O2Z1bmN0aW9uIG9BKEEsdCxlKXtsZXQgST1lLmNvbmZpZy52YWxpZGF0ZVN0YXR1czshZS5zdGF0dXN8fCFJfHxJKGUuc3RhdHVzKT9BKGUpOnQobmV3IHUoIlJlcXVlc3QgZmFpbGVkIHdpdGggc3RhdHVzIGNvZGUgIitlLnN0YXR1cyxbdS5FUlJfQkFEX1JFUVVFU1QsdS5FUlJfQkFEX1JFU1BPTlNFXVtNYXRoLmZsb29yKGUuc3RhdHVzLzEwMCktNF0sZS5jb25maWcsZS5yZXF1ZXN0LGUpKX1mdW5jdGlvbiB6QShBKXtsZXQgdD0vXihbLStcXHddezEsMjV9KSg6P1xcL1xcL3w6KS8uZXhlYyhBKTtyZXR1cm4gdCYmdFsxXXx8IiJ9ZnVuY3Rpb24gcUkoQSx0KXtBPUF8fDEwO2xldCBlPW5ldyBBcnJheShBKSxJPW5ldyBBcnJheShBKSxyPTAsbz0wLGc7cmV0dXJuIHQ9dCE9PXZvaWQgMD90OjFlMyxmdW5jdGlvbihRKXtsZXQgYT1EYXRlLm5vdygpLG49SVtvXTtnfHwoZz1hKSxlW3JdPVEsSVtyXT1hO2xldCBzPW8sZj0wO2Zvcig7cyE9PXI7KWYrPWVbcysrXSxzPXMlQTtpZihyPShyKzEpJUEscj09PW8mJihvPShvKzEpJUEpLGEtZzx0KXJldHVybjtsZXQgQj1uJiZhLW47cmV0dXJuIEI/TWF0aC5yb3VuZChmKjFlMy9CKTp2b2lkIDB9fXZhciBXdD1xSTtmdW5jdGlvbiBNSShBLHQpe2xldCBlPTAsST0xZTMvdCxyLG8sZz0oYSxuPURhdGUubm93KCkpPT57ZT1uLHI9bnVsbCxvJiYoY2xlYXJUaW1lb3V0KG8pLG89bnVsbCksQS5hcHBseShudWxsLGEpfTtyZXR1cm5bKC4uLmEpPT57bGV0IG49RGF0ZS5ub3coKSxzPW4tZTtzPj1JP2coYSxuKToocj1hLG98fChvPXNldFRpbWVvdXQoKCk9PntvPW51bGwsZyhyKX0sSS1zKSkpfSwoKT0+ciYmZyhyKV19dmFyIFp0PU1JO3ZhciBfPShBLHQsZT0zKT0+e2xldCBJPTAscj1XdCg1MCwyNTApO3JldHVybiBadChvPT57bGV0IGc9by5sb2FkZWQsQz1vLmxlbmd0aENvbXB1dGFibGU/by50b3RhbDp2b2lkIDAsUT1nLUksYT1yKFEpLG49Zzw9QztJPWc7bGV0IHM9e2xvYWRlZDpnLHRvdGFsOkMscHJvZ3Jlc3M6Qz9nL0M6dm9pZCAwLGJ5dGVzOlEscmF0ZTphfHx2b2lkIDAsZXN0aW1hdGVkOmEmJkMmJm4/KEMtZykvYTp2b2lkIDAsZXZlbnQ6byxsZW5ndGhDb21wdXRhYmxlOkMhPW51bGwsW3Q/ImRvd25sb2FkIjoidXBsb2FkIl06ITB9O0Eocyl9LGUpfSx2QT0oQSx0KT0+e2xldCBlPUEhPW51bGw7cmV0dXJuW0k9PnRbMF0oe2xlbmd0aENvbXB1dGFibGU6ZSx0b3RhbDpBLGxvYWRlZDpJfSksdFsxXV19LCRBPUE9PiguLi50KT0+aS5hc2FwKCgpPT5BKC4uLnQpKTt2YXIgVnQ9dy5oYXNTdGFuZGFyZEJyb3dzZXJFbnY/ZnVuY3Rpb24oKXtsZXQgdD0vKG1zaWV8dHJpZGVudCkvaS50ZXN0KG5hdmlnYXRvci51c2VyQWdlbnQpLGU9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiYSIpLEk7ZnVuY3Rpb24gcihvKXtsZXQgZz1vO3JldHVybiB0JiYoZS5zZXRBdHRyaWJ1dGUoImhyZWYiLGcpLGc9ZS5ocmVmKSxlLnNldEF0dHJpYnV0ZSgiaHJlZiIsZykse2hyZWY6ZS5ocmVmLHByb3RvY29sOmUucHJvdG9jb2w/ZS5wcm90b2NvbC5yZXBsYWNlKC86JC8sIiIpOiIiLGhvc3Q6ZS5ob3N0LHNlYXJjaDplLnNlYXJjaD9lLnNlYXJjaC5yZXBsYWNlKC9eXFw/LywiIik6IiIsaGFzaDplLmhhc2g/ZS5oYXNoLnJlcGxhY2UoL14lMjMvLCIiKToiIixob3N0bmFtZTplLmhvc3RuYW1lLHBvcnQ6ZS5wb3J0LHBhdGhuYW1lOmUucGF0aG5hbWUuY2hhckF0KDApPT09Ii8iP2UucGF0aG5hbWU6Ii8iK2UucGF0aG5hbWV9fXJldHVybiBJPXIod2luZG93LmxvY2F0aW9uLmhyZWYpLGZ1bmN0aW9uKGcpe2xldCBDPWkuaXNTdHJpbmcoZyk/cihnKTpnO3JldHVybiBDLnByb3RvY29sPT09SS5wcm90b2NvbCYmQy5ob3N0PT09SS5ob3N0fX0oKTpmdW5jdGlvbigpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiEwfX0oKTt2YXIgX3Q9dy5oYXNTdGFuZGFyZEJyb3dzZXJFbnY/e3dyaXRlKEEsdCxlLEkscixvKXtsZXQgZz1bQSsiPSIrZW5jb2RlVVJJQ29tcG9uZW50KHQpXTtpLmlzTnVtYmVyKGUpJiZnLnB1c2goImV4cGlyZXM9IituZXcgRGF0ZShlKS50b0dNVFN0cmluZygpKSxpLmlzU3RyaW5nKEkpJiZnLnB1c2goInBhdGg9IitJKSxpLmlzU3RyaW5nKHIpJiZnLnB1c2goImRvbWFpbj0iK3IpLG89PT0hMCYmZy5wdXNoKCJzZWN1cmUiKSxkb2N1bWVudC5jb29raWU9Zy5qb2luKCI7ICIpfSxyZWFkKEEpe2xldCB0PWRvY3VtZW50LmNvb2tpZS5tYXRjaChuZXcgUmVnRXhwKCIoXnw7XFxcXHMqKSgiK0ErIik9KFteO10qKSIpKTtyZXR1cm4gdD9kZWNvZGVVUklDb21wb25lbnQodFszXSk6bnVsbH0scmVtb3ZlKEEpe3RoaXMud3JpdGUoQSwiIixEYXRlLm5vdygpLTg2NGU1KX19Ont3cml0ZSgpe30scmVhZCgpe3JldHVybiBudWxsfSxyZW1vdmUoKXt9fTtmdW5jdGlvbiBBdChBKXtyZXR1cm4vXihbYS16XVthLXpcXGQrXFwtLl0qOik/XFwvXFwvL2kudGVzdChBKX1mdW5jdGlvbiB0dChBLHQpe3JldHVybiB0P0EucmVwbGFjZSgvXFwvP1xcLyQvLCIiKSsiLyIrdC5yZXBsYWNlKC9eXFwvKy8sIiIpOkF9ZnVuY3Rpb24gZ0EoQSx0KXtyZXR1cm4gQSYmIUF0KHQpP3R0KEEsdCk6dH12YXIgWHQ9QT0+QSBpbnN0YW5jZW9mIG0/ey4uLkF9OkE7ZnVuY3Rpb24gayhBLHQpe3Q9dHx8e307bGV0IGU9e307ZnVuY3Rpb24gSShhLG4scyl7cmV0dXJuIGkuaXNQbGFpbk9iamVjdChhKSYmaS5pc1BsYWluT2JqZWN0KG4pP2kubWVyZ2UuY2FsbCh7Y2FzZWxlc3M6c30sYSxuKTppLmlzUGxhaW5PYmplY3Qobik/aS5tZXJnZSh7fSxuKTppLmlzQXJyYXkobik/bi5zbGljZSgpOm59ZnVuY3Rpb24gcihhLG4scyl7aWYoaS5pc1VuZGVmaW5lZChuKSl7aWYoIWkuaXNVbmRlZmluZWQoYSkpcmV0dXJuIEkodm9pZCAwLGEscyl9ZWxzZSByZXR1cm4gSShhLG4scyl9ZnVuY3Rpb24gbyhhLG4pe2lmKCFpLmlzVW5kZWZpbmVkKG4pKXJldHVybiBJKHZvaWQgMCxuKX1mdW5jdGlvbiBnKGEsbil7aWYoaS5pc1VuZGVmaW5lZChuKSl7aWYoIWkuaXNVbmRlZmluZWQoYSkpcmV0dXJuIEkodm9pZCAwLGEpfWVsc2UgcmV0dXJuIEkodm9pZCAwLG4pfWZ1bmN0aW9uIEMoYSxuLHMpe2lmKHMgaW4gdClyZXR1cm4gSShhLG4pO2lmKHMgaW4gQSlyZXR1cm4gSSh2b2lkIDAsYSl9bGV0IFE9e3VybDpvLG1ldGhvZDpvLGRhdGE6byxiYXNlVVJMOmcsdHJhbnNmb3JtUmVxdWVzdDpnLHRyYW5zZm9ybVJlc3BvbnNlOmcscGFyYW1zU2VyaWFsaXplcjpnLHRpbWVvdXQ6Zyx0aW1lb3V0TWVzc2FnZTpnLHdpdGhDcmVkZW50aWFsczpnLHdpdGhYU1JGVG9rZW46ZyxhZGFwdGVyOmcscmVzcG9uc2VUeXBlOmcseHNyZkNvb2tpZU5hbWU6Zyx4c3JmSGVhZGVyTmFtZTpnLG9uVXBsb2FkUHJvZ3Jlc3M6ZyxvbkRvd25sb2FkUHJvZ3Jlc3M6ZyxkZWNvbXByZXNzOmcsbWF4Q29udGVudExlbmd0aDpnLG1heEJvZHlMZW5ndGg6ZyxiZWZvcmVSZWRpcmVjdDpnLHRyYW5zcG9ydDpnLGh0dHBBZ2VudDpnLGh0dHBzQWdlbnQ6ZyxjYW5jZWxUb2tlbjpnLHNvY2tldFBhdGg6ZyxyZXNwb25zZUVuY29kaW5nOmcsdmFsaWRhdGVTdGF0dXM6QyxoZWFkZXJzOihhLG4pPT5yKFh0KGEpLFh0KG4pLCEwKX07cmV0dXJuIGkuZm9yRWFjaChPYmplY3Qua2V5cyhPYmplY3QuYXNzaWduKHt9LEEsdCkpLGZ1bmN0aW9uKG4pe2xldCBzPVFbbl18fHIsZj1zKEFbbl0sdFtuXSxuKTtpLmlzVW5kZWZpbmVkKGYpJiZzIT09Q3x8KGVbbl09Zil9KSxlfXZhciBTQT1BPT57bGV0IHQ9ayh7fSxBKSx7ZGF0YTplLHdpdGhYU1JGVG9rZW46SSx4c3JmSGVhZGVyTmFtZTpyLHhzcmZDb29raWVOYW1lOm8saGVhZGVyczpnLGF1dGg6Q309dDt0LmhlYWRlcnM9Zz1tLmZyb20oZyksdC51cmw9dEEoZ0EodC5iYXNlVVJMLHQudXJsKSxBLnBhcmFtcyxBLnBhcmFtc1NlcmlhbGl6ZXIpLEMmJmcuc2V0KCJBdXRob3JpemF0aW9uIiwiQmFzaWMgIitidG9hKChDLnVzZXJuYW1lfHwiIikrIjoiKyhDLnBhc3N3b3JkP3VuZXNjYXBlKGVuY29kZVVSSUNvbXBvbmVudChDLnBhc3N3b3JkKSk6IiIpKSk7bGV0IFE7aWYoaS5pc0Zvcm1EYXRhKGUpKXtpZih3Lmhhc1N0YW5kYXJkQnJvd3NlckVudnx8dy5oYXNTdGFuZGFyZEJyb3dzZXJXZWJXb3JrZXJFbnYpZy5zZXRDb250ZW50VHlwZSh2b2lkIDApO2Vsc2UgaWYoKFE9Zy5nZXRDb250ZW50VHlwZSgpKSE9PSExKXtsZXRbYSwuLi5uXT1RP1Euc3BsaXQoIjsiKS5tYXAocz0+cy50cmltKCkpLmZpbHRlcihCb29sZWFuKTpbXTtnLnNldENvbnRlbnRUeXBlKFthfHwibXVsdGlwYXJ0L2Zvcm0tZGF0YSIsLi4ubl0uam9pbigiOyAiKSl9fWlmKHcuaGFzU3RhbmRhcmRCcm93c2VyRW52JiYoSSYmaS5pc0Z1bmN0aW9uKEkpJiYoST1JKHQpKSxJfHxJIT09ITEmJlZ0KHQudXJsKSkpe2xldCBhPXImJm8mJl90LnJlYWQobyk7YSYmZy5zZXQocixhKX1yZXR1cm4gdH07dmFyIFRJPXR5cGVvZiBYTUxIdHRwUmVxdWVzdDwidSIsenQ9VEkmJmZ1bmN0aW9uKEEpe3JldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbihlLEkpe2xldCByPVNBKEEpLG89ci5kYXRhLGc9bS5mcm9tKHIuaGVhZGVycykubm9ybWFsaXplKCkse3Jlc3BvbnNlVHlwZTpDLG9uVXBsb2FkUHJvZ3Jlc3M6USxvbkRvd25sb2FkUHJvZ3Jlc3M6YX09cixuLHMsZixCLEU7ZnVuY3Rpb24gbCgpe0ImJkIoKSxFJiZFKCksci5jYW5jZWxUb2tlbiYmci5jYW5jZWxUb2tlbi51bnN1YnNjcmliZShuKSxyLnNpZ25hbCYmci5zaWduYWwucmVtb3ZlRXZlbnRMaXN0ZW5lcigiYWJvcnQiLG4pfWxldCBjPW5ldyBYTUxIdHRwUmVxdWVzdDtjLm9wZW4oci5tZXRob2QudG9VcHBlckNhc2UoKSxyLnVybCwhMCksYy50aW1lb3V0PXIudGltZW91dDtmdW5jdGlvbiBwKCl7aWYoIWMpcmV0dXJuO2xldCBEPW0uZnJvbSgiZ2V0QWxsUmVzcG9uc2VIZWFkZXJzImluIGMmJmMuZ2V0QWxsUmVzcG9uc2VIZWFkZXJzKCkpLEs9e2RhdGE6IUN8fEM9PT0idGV4dCJ8fEM9PT0ianNvbiI/Yy5yZXNwb25zZVRleHQ6Yy5yZXNwb25zZSxzdGF0dXM6Yy5zdGF0dXMsc3RhdHVzVGV4dDpjLnN0YXR1c1RleHQsaGVhZGVyczpELGNvbmZpZzpBLHJlcXVlc3Q6Y307b0EoZnVuY3Rpb24oSil7ZShKKSxsKCl9LGZ1bmN0aW9uKEope0koSiksbCgpfSxLKSxjPW51bGx9Im9ubG9hZGVuZCJpbiBjP2Mub25sb2FkZW5kPXA6Yy5vbnJlYWR5c3RhdGVjaGFuZ2U9ZnVuY3Rpb24oKXshY3x8Yy5yZWFkeVN0YXRlIT09NHx8Yy5zdGF0dXM9PT0wJiYhKGMucmVzcG9uc2VVUkwmJmMucmVzcG9uc2VVUkwuaW5kZXhPZigiZmlsZToiKT09PTApfHxzZXRUaW1lb3V0KHApfSxjLm9uYWJvcnQ9ZnVuY3Rpb24oKXtjJiYoSShuZXcgdSgiUmVxdWVzdCBhYm9ydGVkIix1LkVDT05OQUJPUlRFRCxBLGMpKSxjPW51bGwpfSxjLm9uZXJyb3I9ZnVuY3Rpb24oKXtJKG5ldyB1KCJOZXR3b3JrIEVycm9yIix1LkVSUl9ORVRXT1JLLEEsYykpLGM9bnVsbH0sYy5vbnRpbWVvdXQ9ZnVuY3Rpb24oKXtsZXQgVT1yLnRpbWVvdXQ/InRpbWVvdXQgb2YgIityLnRpbWVvdXQrIm1zIGV4Y2VlZGVkIjoidGltZW91dCBleGNlZWRlZCIsSz1yLnRyYW5zaXRpb25hbHx8bUE7ci50aW1lb3V0RXJyb3JNZXNzYWdlJiYoVT1yLnRpbWVvdXRFcnJvck1lc3NhZ2UpLEkobmV3IHUoVSxLLmNsYXJpZnlUaW1lb3V0RXJyb3I/dS5FVElNRURPVVQ6dS5FQ09OTkFCT1JURUQsQSxjKSksYz1udWxsfSxvPT09dm9pZCAwJiZnLnNldENvbnRlbnRUeXBlKG51bGwpLCJzZXRSZXF1ZXN0SGVhZGVyImluIGMmJmkuZm9yRWFjaChnLnRvSlNPTigpLGZ1bmN0aW9uKFUsSyl7Yy5zZXRSZXF1ZXN0SGVhZGVyKEssVSl9KSxpLmlzVW5kZWZpbmVkKHIud2l0aENyZWRlbnRpYWxzKXx8KGMud2l0aENyZWRlbnRpYWxzPSEhci53aXRoQ3JlZGVudGlhbHMpLEMmJkMhPT0ianNvbiImJihjLnJlc3BvbnNlVHlwZT1yLnJlc3BvbnNlVHlwZSksYSYmKFtmLEVdPV8oYSwhMCksYy5hZGRFdmVudExpc3RlbmVyKCJwcm9ncmVzcyIsZikpLFEmJmMudXBsb2FkJiYoW3MsQl09XyhRKSxjLnVwbG9hZC5hZGRFdmVudExpc3RlbmVyKCJwcm9ncmVzcyIscyksYy51cGxvYWQuYWRkRXZlbnRMaXN0ZW5lcigibG9hZGVuZCIsQikpLChyLmNhbmNlbFRva2VufHxyLnNpZ25hbCkmJihuPUQ9PntjJiYoSSghRHx8RC50eXBlP25ldyBiKG51bGwsQSxjKTpEKSxjLmFib3J0KCksYz1udWxsKX0sci5jYW5jZWxUb2tlbiYmci5jYW5jZWxUb2tlbi5zdWJzY3JpYmUobiksci5zaWduYWwmJihyLnNpZ25hbC5hYm9ydGVkP24oKTpyLnNpZ25hbC5hZGRFdmVudExpc3RlbmVyKCJhYm9ydCIsbikpKTtsZXQgUz16QShyLnVybCk7aWYoUyYmdy5wcm90b2NvbHMuaW5kZXhPZihTKT09PS0xKXtJKG5ldyB1KCJVbnN1cHBvcnRlZCBwcm90b2NvbCAiK1MrIjoiLHUuRVJSX0JBRF9SRVFVRVNULEEpKTtyZXR1cm59Yy5zZW5kKG98fG51bGwpfSl9O3ZhciBLST0oQSx0KT0+e2xldCBlPW5ldyBBYm9ydENvbnRyb2xsZXIsSSxyPWZ1bmN0aW9uKFEpe2lmKCFJKXtJPSEwLGcoKTtsZXQgYT1RIGluc3RhbmNlb2YgRXJyb3I/UTp0aGlzLnJlYXNvbjtlLmFib3J0KGEgaW5zdGFuY2VvZiB1P2E6bmV3IGIoYSBpbnN0YW5jZW9mIEVycm9yP2EubWVzc2FnZTphKSl9fSxvPXQmJnNldFRpbWVvdXQoKCk9PntyKG5ldyB1KGB0aW1lb3V0ICR7dH0gb2YgbXMgZXhjZWVkZWRgLHUuRVRJTUVET1VUKSl9LHQpLGc9KCk9PntBJiYobyYmY2xlYXJUaW1lb3V0KG8pLG89bnVsbCxBLmZvckVhY2goUT0+e1EmJihRLnJlbW92ZUV2ZW50TGlzdGVuZXI/US5yZW1vdmVFdmVudExpc3RlbmVyKCJhYm9ydCIscik6US51bnN1YnNjcmliZShyKSl9KSxBPW51bGwpfTtBLmZvckVhY2goUT0+USYmUS5hZGRFdmVudExpc3RlbmVyJiZRLmFkZEV2ZW50TGlzdGVuZXIoImFib3J0IixyKSk7bGV0e3NpZ25hbDpDfT1lO3JldHVybiBDLnVuc3Vic2NyaWJlPWcsW0MsKCk9PntvJiZjbGVhclRpbWVvdXQobyksbz1udWxsfV19LHZ0PUtJO3ZhciBPST1mdW5jdGlvbiooQSx0KXtsZXQgZT1BLmJ5dGVMZW5ndGg7aWYoIXR8fGU8dCl7eWllbGQgQTtyZXR1cm59bGV0IEk9MCxyO2Zvcig7STxlOylyPUkrdCx5aWVsZCBBLnNsaWNlKEksciksST1yfSx4ST1hc3luYyBmdW5jdGlvbiooQSx0LGUpe2ZvciBhd2FpdChsZXQgSSBvZiBBKXlpZWxkKk9JKEFycmF5QnVmZmVyLmlzVmlldyhJKT9JOmF3YWl0IGUoU3RyaW5nKEkpKSx0KX0sZXQ9KEEsdCxlLEkscik9PntsZXQgbz14SShBLHQsciksZz0wLEMsUT1hPT57Q3x8KEM9ITAsSSYmSShhKSl9O3JldHVybiBuZXcgUmVhZGFibGVTdHJlYW0oe2FzeW5jIHB1bGwoYSl7dHJ5e2xldHtkb25lOm4sdmFsdWU6c309YXdhaXQgby5uZXh0KCk7aWYobil7USgpLGEuY2xvc2UoKTtyZXR1cm59bGV0IGY9cy5ieXRlTGVuZ3RoO2lmKGUpe2xldCBCPWcrPWY7ZShCKX1hLmVucXVldWUobmV3IFVpbnQ4QXJyYXkocykpfWNhdGNoKG4pe3Rocm93IFEobiksbn19LGNhbmNlbChhKXtyZXR1cm4gUShhKSxvLnJldHVybigpfX0se2hpZ2hXYXRlck1hcms6Mn0pfTt2YXIgUkE9dHlwZW9mIGZldGNoPT0iZnVuY3Rpb24iJiZ0eXBlb2YgUmVxdWVzdD09ImZ1bmN0aW9uIiYmdHlwZW9mIFJlc3BvbnNlPT0iZnVuY3Rpb24iLEFlPVJBJiZ0eXBlb2YgUmVhZGFibGVTdHJlYW09PSJmdW5jdGlvbiIsSXQ9UkEmJih0eXBlb2YgVGV4dEVuY29kZXI9PSJmdW5jdGlvbiI/KEE9PnQ9PkEuZW5jb2RlKHQpKShuZXcgVGV4dEVuY29kZXIpOmFzeW5jIEE9Pm5ldyBVaW50OEFycmF5KGF3YWl0IG5ldyBSZXNwb25zZShBKS5hcnJheUJ1ZmZlcigpKSksdGU9KEEsLi4udCk9Pnt0cnl7cmV0dXJuISFBKC4uLnQpfWNhdGNoe3JldHVybiExfX0sUEk9QWUmJnRlKCgpPT57bGV0IEE9ITEsdD1uZXcgUmVxdWVzdCh3Lm9yaWdpbix7Ym9keTpuZXcgUmVhZGFibGVTdHJlYW0sbWV0aG9kOiJQT1NUIixnZXQgZHVwbGV4KCl7cmV0dXJuIEE9ITAsImhhbGYifX0pLmhlYWRlcnMuaGFzKCJDb250ZW50LVR5cGUiKTtyZXR1cm4gQSYmIXR9KSwkdD02NCoxMDI0LHJ0PUFlJiZ0ZSgoKT0+aS5pc1JlYWRhYmxlU3RyZWFtKG5ldyBSZXNwb25zZSgiIikuYm9keSkpLEZBPXtzdHJlYW06cnQmJihBPT5BLmJvZHkpfTtSQSYmKEE9PntbInRleHQiLCJhcnJheUJ1ZmZlciIsImJsb2IiLCJmb3JtRGF0YSIsInN0cmVhbSJdLmZvckVhY2godD0+eyFGQVt0XSYmKEZBW3RdPWkuaXNGdW5jdGlvbihBW3RdKT9lPT5lW3RdKCk6KGUsSSk9Pnt0aHJvdyBuZXcgdShgUmVzcG9uc2UgdHlwZSBcJyR7dH1cJyBpcyBub3Qgc3VwcG9ydGVkYCx1LkVSUl9OT1RfU1VQUE9SVCxJKX0pfSl9KShuZXcgUmVzcG9uc2UpO3ZhciBqST1hc3luYyBBPT57aWYoQT09bnVsbClyZXR1cm4gMDtpZihpLmlzQmxvYihBKSlyZXR1cm4gQS5zaXplO2lmKGkuaXNTcGVjQ29tcGxpYW50Rm9ybShBKSlyZXR1cm4oYXdhaXQgbmV3IFJlcXVlc3QoQSkuYXJyYXlCdWZmZXIoKSkuYnl0ZUxlbmd0aDtpZihpLmlzQXJyYXlCdWZmZXJWaWV3KEEpfHxpLmlzQXJyYXlCdWZmZXIoQSkpcmV0dXJuIEEuYnl0ZUxlbmd0aDtpZihpLmlzVVJMU2VhcmNoUGFyYW1zKEEpJiYoQT1BKyIiKSxpLmlzU3RyaW5nKEEpKXJldHVybihhd2FpdCBJdChBKSkuYnl0ZUxlbmd0aH0sV0k9YXN5bmMoQSx0KT0+e2xldCBlPWkudG9GaW5pdGVOdW1iZXIoQS5nZXRDb250ZW50TGVuZ3RoKCkpO3JldHVybiBlPz9qSSh0KX0sZWU9UkEmJihhc3luYyBBPT57bGV0e3VybDp0LG1ldGhvZDplLGRhdGE6SSxzaWduYWw6cixjYW5jZWxUb2tlbjpvLHRpbWVvdXQ6ZyxvbkRvd25sb2FkUHJvZ3Jlc3M6QyxvblVwbG9hZFByb2dyZXNzOlEscmVzcG9uc2VUeXBlOmEsaGVhZGVyczpuLHdpdGhDcmVkZW50aWFsczpzPSJzYW1lLW9yaWdpbiIsZmV0Y2hPcHRpb25zOmZ9PVNBKEEpO2E9YT8oYSsiIikudG9Mb3dlckNhc2UoKToidGV4dCI7bGV0W0IsRV09cnx8b3x8Zz92dChbcixvXSxnKTpbXSxsLGMscD0oKT0+eyFsJiZzZXRUaW1lb3V0KCgpPT57QiYmQi51bnN1YnNjcmliZSgpfSksbD0hMH0sUzt0cnl7aWYoUSYmUEkmJmUhPT0iZ2V0IiYmZSE9PSJoZWFkIiYmKFM9YXdhaXQgV0kobixJKSkhPT0wKXtsZXQgTD1uZXcgUmVxdWVzdCh0LHttZXRob2Q6IlBPU1QiLGJvZHk6SSxkdXBsZXg6ImhhbGYifSksSjtpZihpLmlzRm9ybURhdGEoSSkmJihKPUwuaGVhZGVycy5nZXQoImNvbnRlbnQtdHlwZSIpKSYmbi5zZXRDb250ZW50VHlwZShKKSxMLmJvZHkpe2xldFtIQSxDQV09dkEoUyxfKCRBKFEpKSk7ST1ldChMLmJvZHksJHQsSEEsQ0EsSXQpfX1pLmlzU3RyaW5nKHMpfHwocz1zPyJpbmNsdWRlIjoib21pdCIpLGM9bmV3IFJlcXVlc3QodCx7Li4uZixzaWduYWw6QixtZXRob2Q6ZS50b1VwcGVyQ2FzZSgpLGhlYWRlcnM6bi5ub3JtYWxpemUoKS50b0pTT04oKSxib2R5OkksZHVwbGV4OiJoYWxmIixjcmVkZW50aWFsczpzfSk7bGV0IEQ9YXdhaXQgZmV0Y2goYyksVT1ydCYmKGE9PT0ic3RyZWFtInx8YT09PSJyZXNwb25zZSIpO2lmKHJ0JiYoQ3x8VSkpe2xldCBMPXt9O1sic3RhdHVzIiwic3RhdHVzVGV4dCIsImhlYWRlcnMiXS5mb3JFYWNoKEV0PT57TFtFdF09RFtFdF19KTtsZXQgSj1pLnRvRmluaXRlTnVtYmVyKEQuaGVhZGVycy5nZXQoImNvbnRlbnQtbGVuZ3RoIikpLFtIQSxDQV09QyYmdkEoSixfKCRBKEMpLCEwKSl8fFtdO0Q9bmV3IFJlc3BvbnNlKGV0KEQuYm9keSwkdCxIQSwoKT0+e0NBJiZDQSgpLFUmJnAoKX0sSXQpLEwpfWE9YXx8InRleHQiO2xldCBLPWF3YWl0IEZBW2kuZmluZEtleShGQSxhKXx8InRleHQiXShELEEpO3JldHVybiFVJiZwKCksRSYmRSgpLGF3YWl0IG5ldyBQcm9taXNlKChMLEopPT57b0EoTCxKLHtkYXRhOkssaGVhZGVyczptLmZyb20oRC5oZWFkZXJzKSxzdGF0dXM6RC5zdGF0dXMsc3RhdHVzVGV4dDpELnN0YXR1c1RleHQsY29uZmlnOkEscmVxdWVzdDpjfSl9KX1jYXRjaChEKXt0aHJvdyBwKCksRCYmRC5uYW1lPT09IlR5cGVFcnJvciImJi9mZXRjaC9pLnRlc3QoRC5tZXNzYWdlKT9PYmplY3QuYXNzaWduKG5ldyB1KCJOZXR3b3JrIEVycm9yIix1LkVSUl9ORVRXT1JLLEEsYykse2NhdXNlOkQuY2F1c2V8fER9KTp1LmZyb20oRCxEJiZELmNvZGUsQSxjKX19KTt2YXIgb3Q9e2h0dHA6ZEEseGhyOnp0LGZldGNoOmVlfTtpLmZvckVhY2gob3QsKEEsdCk9PntpZihBKXt0cnl7T2JqZWN0LmRlZmluZVByb3BlcnR5KEEsIm5hbWUiLHt2YWx1ZTp0fSl9Y2F0Y2h7fU9iamVjdC5kZWZpbmVQcm9wZXJ0eShBLCJhZGFwdGVyTmFtZSIse3ZhbHVlOnR9KX19KTt2YXIgSWU9QT0+YC0gJHtBfWAsWkk9QT0+aS5pc0Z1bmN0aW9uKEEpfHxBPT09bnVsbHx8QT09PSExLE5BPXtnZXRBZGFwdGVyOkE9PntBPWkuaXNBcnJheShBKT9BOltBXTtsZXR7bGVuZ3RoOnR9PUEsZSxJLHI9e307Zm9yKGxldCBvPTA7bzx0O28rKyl7ZT1BW29dO2xldCBnO2lmKEk9ZSwhWkkoZSkmJihJPW90WyhnPVN0cmluZyhlKSkudG9Mb3dlckNhc2UoKV0sST09PXZvaWQgMCkpdGhyb3cgbmV3IHUoYFVua25vd24gYWRhcHRlciBcJyR7Z31cJ2ApO2lmKEkpYnJlYWs7cltnfHwiJTIzIitvXT1JfWlmKCFJKXtsZXQgbz1PYmplY3QuZW50cmllcyhyKS5tYXAoKFtDLFFdKT0+YGFkYXB0ZXIgJHtDfSBgKyhRPT09ITE/ImlzIG5vdCBzdXBwb3J0ZWQgYnkgdGhlIGVudmlyb25tZW50IjoiaXMgbm90IGF2YWlsYWJsZSBpbiB0aGUgYnVpbGQiKSksZz10P28ubGVuZ3RoPjE/YHNpbmNlIDolMEFgK28ubWFwKEllKS5qb2luKGAlMEFgKToiICIrSWUob1swXSk6ImFzIG5vIGFkYXB0ZXIgc3BlY2lmaWVkIjt0aHJvdyBuZXcgdSgiVGhlcmUgaXMgbm8gc3VpdGFibGUgYWRhcHRlciB0byBkaXNwYXRjaCB0aGUgcmVxdWVzdCAiK2csIkVSUl9OT1RfU1VQUE9SVCIpfXJldHVybiBJfSxhZGFwdGVyczpvdH07ZnVuY3Rpb24gZ3QoQSl7aWYoQS5jYW5jZWxUb2tlbiYmQS5jYW5jZWxUb2tlbi50aHJvd0lmUmVxdWVzdGVkKCksQS5zaWduYWwmJkEuc2lnbmFsLmFib3J0ZWQpdGhyb3cgbmV3IGIobnVsbCxBKX1mdW5jdGlvbiBVQShBKXtyZXR1cm4gZ3QoQSksQS5oZWFkZXJzPW0uZnJvbShBLmhlYWRlcnMpLEEuZGF0YT1JQS5jYWxsKEEsQS50cmFuc2Zvcm1SZXF1ZXN0KSxbInBvc3QiLCJwdXQiLCJwYXRjaCJdLmluZGV4T2YoQS5tZXRob2QpIT09LTEmJkEuaGVhZGVycy5zZXRDb250ZW50VHlwZSgiYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkIiwhMSksTkEuZ2V0QWRhcHRlcihBLmFkYXB0ZXJ8fFouYWRhcHRlcikoQSkudGhlbihmdW5jdGlvbihJKXtyZXR1cm4gZ3QoQSksSS5kYXRhPUlBLmNhbGwoQSxBLnRyYW5zZm9ybVJlc3BvbnNlLEkpLEkuaGVhZGVycz1tLmZyb20oSS5oZWFkZXJzKSxJfSxmdW5jdGlvbihJKXtyZXR1cm4gckEoSSl8fChndChBKSxJJiZJLnJlc3BvbnNlJiYoSS5yZXNwb25zZS5kYXRhPUlBLmNhbGwoQSxBLnRyYW5zZm9ybVJlc3BvbnNlLEkucmVzcG9uc2UpLEkucmVzcG9uc2UuaGVhZGVycz1tLmZyb20oSS5yZXNwb25zZS5oZWFkZXJzKSkpLFByb21pc2UucmVqZWN0KEkpfSl9dmFyIEdBPSIxLjcuNCI7dmFyIGl0PXt9O1sib2JqZWN0IiwiYm9vbGVhbiIsIm51bWJlciIsImZ1bmN0aW9uIiwic3RyaW5nIiwic3ltYm9sIl0uZm9yRWFjaCgoQSx0KT0+e2l0W0FdPWZ1bmN0aW9uKEkpe3JldHVybiB0eXBlb2YgST09PUF8fCJhIisodDwxPyJuICI6IiAiKStBfX0pO3ZhciByZT17fTtpdC50cmFuc2l0aW9uYWw9ZnVuY3Rpb24odCxlLEkpe2Z1bmN0aW9uIHIobyxnKXtyZXR1cm4iW0F4aW9zIHYiK0dBKyJdIFRyYW5zaXRpb25hbCBvcHRpb24gXCciK28rIlwnIitnKyhJPyIuICIrSToiIil9cmV0dXJuKG8sZyxDKT0+e2lmKHQ9PT0hMSl0aHJvdyBuZXcgdShyKGcsIiBoYXMgYmVlbiByZW1vdmVkIisoZT8iIGluICIrZToiIikpLHUuRVJSX0RFUFJFQ0FURUQpO3JldHVybiBlJiYhcmVbZ10mJihyZVtnXT0hMCxjb25zb2xlLndhcm4ocihnLCIgaGFzIGJlZW4gZGVwcmVjYXRlZCBzaW5jZSB2IitlKyIgYW5kIHdpbGwgYmUgcmVtb3ZlZCBpbiB0aGUgbmVhciBmdXR1cmUiKSkpLHQ/dChvLGcsQyk6ITB9fTtmdW5jdGlvbiBWSShBLHQsZSl7aWYodHlwZW9mIEEhPSJvYmplY3QiKXRocm93IG5ldyB1KCJvcHRpb25zIG11c3QgYmUgYW4gb2JqZWN0Iix1LkVSUl9CQURfT1BUSU9OX1ZBTFVFKTtsZXQgST1PYmplY3Qua2V5cyhBKSxyPUkubGVuZ3RoO2Zvcig7ci0tID4wOyl7bGV0IG89SVtyXSxnPXRbb107aWYoZyl7bGV0IEM9QVtvXSxRPUM9PT12b2lkIDB8fGcoQyxvLEEpO2lmKFEhPT0hMCl0aHJvdyBuZXcgdSgib3B0aW9uICIrbysiIG11c3QgYmUgIitRLHUuRVJSX0JBRF9PUFRJT05fVkFMVUUpO2NvbnRpbnVlfWlmKGUhPT0hMCl0aHJvdyBuZXcgdSgiVW5rbm93biBvcHRpb24gIitvLHUuRVJSX0JBRF9PUFRJT04pfX12YXIga0E9e2Fzc2VydE9wdGlvbnM6VkksdmFsaWRhdG9yczppdH07dmFyIE09a0EudmFsaWRhdG9ycyxYPWNsYXNze2NvbnN0cnVjdG9yKHQpe3RoaXMuZGVmYXVsdHM9dCx0aGlzLmludGVyY2VwdG9ycz17cmVxdWVzdDpuZXcgakEscmVzcG9uc2U6bmV3IGpBfX1hc3luYyByZXF1ZXN0KHQsZSl7dHJ5e3JldHVybiBhd2FpdCB0aGlzLl9yZXF1ZXN0KHQsZSl9Y2F0Y2goSSl7aWYoSSBpbnN0YW5jZW9mIEVycm9yKXtsZXQgcjtFcnJvci5jYXB0dXJlU3RhY2tUcmFjZT9FcnJvci5jYXB0dXJlU3RhY2tUcmFjZShyPXt9KTpyPW5ldyBFcnJvcjtsZXQgbz1yLnN0YWNrP3Iuc3RhY2sucmVwbGFjZSgvXi4rXFxuLywiIik6IiI7dHJ5e0kuc3RhY2s/byYmIVN0cmluZyhJLnN0YWNrKS5lbmRzV2l0aChvLnJlcGxhY2UoL14uK1xcbi4rXFxuLywiIikpJiYoSS5zdGFjays9YCUwQWArbyk6SS5zdGFjaz1vfWNhdGNoe319dGhyb3cgSX19X3JlcXVlc3QodCxlKXt0eXBlb2YgdD09InN0cmluZyI/KGU9ZXx8e30sZS51cmw9dCk6ZT10fHx7fSxlPWsodGhpcy5kZWZhdWx0cyxlKTtsZXR7dHJhbnNpdGlvbmFsOkkscGFyYW1zU2VyaWFsaXplcjpyLGhlYWRlcnM6b309ZTtJIT09dm9pZCAwJiZrQS5hc3NlcnRPcHRpb25zKEkse3NpbGVudEpTT05QYXJzaW5nOk0udHJhbnNpdGlvbmFsKE0uYm9vbGVhbiksZm9yY2VkSlNPTlBhcnNpbmc6TS50cmFuc2l0aW9uYWwoTS5ib29sZWFuKSxjbGFyaWZ5VGltZW91dEVycm9yOk0udHJhbnNpdGlvbmFsKE0uYm9vbGVhbil9LCExKSxyIT1udWxsJiYoaS5pc0Z1bmN0aW9uKHIpP2UucGFyYW1zU2VyaWFsaXplcj17c2VyaWFsaXplOnJ9OmtBLmFzc2VydE9wdGlvbnMocix7ZW5jb2RlOk0uZnVuY3Rpb24sc2VyaWFsaXplOk0uZnVuY3Rpb259LCEwKSksZS5tZXRob2Q9KGUubWV0aG9kfHx0aGlzLmRlZmF1bHRzLm1ldGhvZHx8ImdldCIpLnRvTG93ZXJDYXNlKCk7bGV0IGc9byYmaS5tZXJnZShvLmNvbW1vbixvW2UubWV0aG9kXSk7byYmaS5mb3JFYWNoKFsiZGVsZXRlIiwiZ2V0IiwiaGVhZCIsInBvc3QiLCJwdXQiLCJwYXRjaCIsImNvbW1vbiJdLEU9PntkZWxldGUgb1tFXX0pLGUuaGVhZGVycz1tLmNvbmNhdChnLG8pO2xldCBDPVtdLFE9ITA7dGhpcy5pbnRlcmNlcHRvcnMucmVxdWVzdC5mb3JFYWNoKGZ1bmN0aW9uKGwpe3R5cGVvZiBsLnJ1bldoZW49PSJmdW5jdGlvbiImJmwucnVuV2hlbihlKT09PSExfHwoUT1RJiZsLnN5bmNocm9ub3VzLEMudW5zaGlmdChsLmZ1bGZpbGxlZCxsLnJlamVjdGVkKSl9KTtsZXQgYT1bXTt0aGlzLmludGVyY2VwdG9ycy5yZXNwb25zZS5mb3JFYWNoKGZ1bmN0aW9uKGwpe2EucHVzaChsLmZ1bGZpbGxlZCxsLnJlamVjdGVkKX0pO2xldCBuLHM9MCxmO2lmKCFRKXtsZXQgRT1bVUEuYmluZCh0aGlzKSx2b2lkIDBdO2ZvcihFLnVuc2hpZnQuYXBwbHkoRSxDKSxFLnB1c2guYXBwbHkoRSxhKSxmPUUubGVuZ3RoLG49UHJvbWlzZS5yZXNvbHZlKGUpO3M8Zjspbj1uLnRoZW4oRVtzKytdLEVbcysrXSk7cmV0dXJuIG59Zj1DLmxlbmd0aDtsZXQgQj1lO2ZvcihzPTA7czxmOyl7bGV0IEU9Q1tzKytdLGw9Q1tzKytdO3RyeXtCPUUoQil9Y2F0Y2goYyl7bC5jYWxsKHRoaXMsYyk7YnJlYWt9fXRyeXtuPVVBLmNhbGwodGhpcyxCKX1jYXRjaChFKXtyZXR1cm4gUHJvbWlzZS5yZWplY3QoRSl9Zm9yKHM9MCxmPWEubGVuZ3RoO3M8Zjspbj1uLnRoZW4oYVtzKytdLGFbcysrXSk7cmV0dXJuIG59Z2V0VXJpKHQpe3Q9ayh0aGlzLmRlZmF1bHRzLHQpO2xldCBlPWdBKHQuYmFzZVVSTCx0LnVybCk7cmV0dXJuIHRBKGUsdC5wYXJhbXMsdC5wYXJhbXNTZXJpYWxpemVyKX19O2kuZm9yRWFjaChbImRlbGV0ZSIsImdldCIsImhlYWQiLCJvcHRpb25zIl0sZnVuY3Rpb24odCl7WC5wcm90b3R5cGVbdF09ZnVuY3Rpb24oZSxJKXtyZXR1cm4gdGhpcy5yZXF1ZXN0KGsoSXx8e30se21ldGhvZDp0LHVybDplLGRhdGE6KEl8fHt9KS5kYXRhfSkpfX0pO2kuZm9yRWFjaChbInBvc3QiLCJwdXQiLCJwYXRjaCJdLGZ1bmN0aW9uKHQpe2Z1bmN0aW9uIGUoSSl7cmV0dXJuIGZ1bmN0aW9uKG8sZyxDKXtyZXR1cm4gdGhpcy5yZXF1ZXN0KGsoQ3x8e30se21ldGhvZDp0LGhlYWRlcnM6ST97IkNvbnRlbnQtVHlwZSI6Im11bHRpcGFydC9mb3JtLWRhdGEifTp7fSx1cmw6byxkYXRhOmd9KSl9fVgucHJvdG90eXBlW3RdPWUoKSxYLnByb3RvdHlwZVt0KyJGb3JtIl09ZSghMCl9KTt2YXIgaUE9WDt2YXIgbnQ9Y2xhc3MgQXtjb25zdHJ1Y3Rvcih0KXtpZih0eXBlb2YgdCE9ImZ1bmN0aW9uIil0aHJvdyBuZXcgVHlwZUVycm9yKCJleGVjdXRvciBtdXN0IGJlIGEgZnVuY3Rpb24uIik7bGV0IGU7dGhpcy5wcm9taXNlPW5ldyBQcm9taXNlKGZ1bmN0aW9uKG8pe2U9b30pO2xldCBJPXRoaXM7dGhpcy5wcm9taXNlLnRoZW4ocj0+e2lmKCFJLl9saXN0ZW5lcnMpcmV0dXJuO2xldCBvPUkuX2xpc3RlbmVycy5sZW5ndGg7Zm9yKDtvLS0gPjA7KUkuX2xpc3RlbmVyc1tvXShyKTtJLl9saXN0ZW5lcnM9bnVsbH0pLHRoaXMucHJvbWlzZS50aGVuPXI9PntsZXQgbyxnPW5ldyBQcm9taXNlKEM9PntJLnN1YnNjcmliZShDKSxvPUN9KS50aGVuKHIpO3JldHVybiBnLmNhbmNlbD1mdW5jdGlvbigpe0kudW5zdWJzY3JpYmUobyl9LGd9LHQoZnVuY3Rpb24obyxnLEMpe0kucmVhc29ufHwoSS5yZWFzb249bmV3IGIobyxnLEMpLGUoSS5yZWFzb24pKX0pfXRocm93SWZSZXF1ZXN0ZWQoKXtpZih0aGlzLnJlYXNvbil0aHJvdyB0aGlzLnJlYXNvbn1zdWJzY3JpYmUodCl7aWYodGhpcy5yZWFzb24pe3QodGhpcy5yZWFzb24pO3JldHVybn10aGlzLl9saXN0ZW5lcnM/dGhpcy5fbGlzdGVuZXJzLnB1c2godCk6dGhpcy5fbGlzdGVuZXJzPVt0XX11bnN1YnNjcmliZSh0KXtpZighdGhpcy5fbGlzdGVuZXJzKXJldHVybjtsZXQgZT10aGlzLl9saXN0ZW5lcnMuaW5kZXhPZih0KTtlIT09LTEmJnRoaXMuX2xpc3RlbmVycy5zcGxpY2UoZSwxKX1zdGF0aWMgc291cmNlKCl7bGV0IHQ7cmV0dXJue3Rva2VuOm5ldyBBKGZ1bmN0aW9uKHIpe3Q9cn0pLGNhbmNlbDp0fX19LG9lPW50O2Z1bmN0aW9uIHN0KEEpe3JldHVybiBmdW5jdGlvbihlKXtyZXR1cm4gQS5hcHBseShudWxsLGUpfX1mdW5jdGlvbiBDdChBKXtyZXR1cm4gaS5pc09iamVjdChBKSYmQS5pc0F4aW9zRXJyb3I9PT0hMH12YXIgQnQ9e0NvbnRpbnVlOjEwMCxTd2l0Y2hpbmdQcm90b2NvbHM6MTAxLFByb2Nlc3Npbmc6MTAyLEVhcmx5SGludHM6MTAzLE9rOjIwMCxDcmVhdGVkOjIwMSxBY2NlcHRlZDoyMDIsTm9uQXV0aG9yaXRhdGl2ZUluZm9ybWF0aW9uOjIwMyxOb0NvbnRlbnQ6MjA0LFJlc2V0Q29udGVudDoyMDUsUGFydGlhbENvbnRlbnQ6MjA2LE11bHRpU3RhdHVzOjIwNyxBbHJlYWR5UmVwb3J0ZWQ6MjA4LEltVXNlZDoyMjYsTXVsdGlwbGVDaG9pY2VzOjMwMCxNb3ZlZFBlcm1hbmVudGx5OjMwMSxGb3VuZDozMDIsU2VlT3RoZXI6MzAzLE5vdE1vZGlmaWVkOjMwNCxVc2VQcm94eTozMDUsVW51c2VkOjMwNixUZW1wb3JhcnlSZWRpcmVjdDozMDcsUGVybWFuZW50UmVkaXJlY3Q6MzA4LEJhZFJlcXVlc3Q6NDAwLFVuYXV0aG9yaXplZDo0MDEsUGF5bWVudFJlcXVpcmVkOjQwMixGb3JiaWRkZW46NDAzLE5vdEZvdW5kOjQwNCxNZXRob2ROb3RBbGxvd2VkOjQwNSxOb3RBY2NlcHRhYmxlOjQwNixQcm94eUF1dGhlbnRpY2F0aW9uUmVxdWlyZWQ6NDA3LFJlcXVlc3RUaW1lb3V0OjQwOCxDb25mbGljdDo0MDksR29uZTo0MTAsTGVuZ3RoUmVxdWlyZWQ6NDExLFByZWNvbmRpdGlvbkZhaWxlZDo0MTIsUGF5bG9hZFRvb0xhcmdlOjQxMyxVcmlUb29Mb25nOjQxNCxVbnN1cHBvcnRlZE1lZGlhVHlwZTo0MTUsUmFuZ2VOb3RTYXRpc2ZpYWJsZTo0MTYsRXhwZWN0YXRpb25GYWlsZWQ6NDE3LEltQVRlYXBvdDo0MTgsTWlzZGlyZWN0ZWRSZXF1ZXN0OjQyMSxVbnByb2Nlc3NhYmxlRW50aXR5OjQyMixMb2NrZWQ6NDIzLEZhaWxlZERlcGVuZGVuY3k6NDI0LFRvb0Vhcmx5OjQyNSxVcGdyYWRlUmVxdWlyZWQ6NDI2LFByZWNvbmRpdGlvblJlcXVpcmVkOjQyOCxUb29NYW55UmVxdWVzdHM6NDI5LFJlcXVlc3RIZWFkZXJGaWVsZHNUb29MYXJnZTo0MzEsVW5hdmFpbGFibGVGb3JMZWdhbFJlYXNvbnM6NDUxLEludGVybmFsU2VydmVyRXJyb3I6NTAwLE5vdEltcGxlbWVudGVkOjUwMSxCYWRHYXRld2F5OjUwMixTZXJ2aWNlVW5hdmFpbGFibGU6NTAzLEdhdGV3YXlUaW1lb3V0OjUwNCxIdHRwVmVyc2lvbk5vdFN1cHBvcnRlZDo1MDUsVmFyaWFudEFsc29OZWdvdGlhdGVzOjUwNixJbnN1ZmZpY2llbnRTdG9yYWdlOjUwNyxMb29wRGV0ZWN0ZWQ6NTA4LE5vdEV4dGVuZGVkOjUxMCxOZXR3b3JrQXV0aGVudGljYXRpb25SZXF1aXJlZDo1MTF9O09iamVjdC5lbnRyaWVzKEJ0KS5mb3JFYWNoKChbQSx0XSk9PntCdFt0XT1BfSk7dmFyIGdlPUJ0O2Z1bmN0aW9uIGllKEEpe2xldCB0PW5ldyBpQShBKSxlPXYoaUEucHJvdG90eXBlLnJlcXVlc3QsdCk7cmV0dXJuIGkuZXh0ZW5kKGUsaUEucHJvdG90eXBlLHQse2FsbE93bktleXM6ITB9KSxpLmV4dGVuZChlLHQsbnVsbCx7YWxsT3duS2V5czohMH0pLGUuY3JlYXRlPWZ1bmN0aW9uKHIpe3JldHVybiBpZShrKEEscikpfSxlfXZhciBkPWllKFopO2QuQXhpb3M9aUE7ZC5DYW5jZWxlZEVycm9yPWI7ZC5DYW5jZWxUb2tlbj1vZTtkLmlzQ2FuY2VsPXJBO2QuVkVSU0lPTj1HQTtkLnRvRm9ybURhdGE9cTtkLkF4aW9zRXJyb3I9dTtkLkNhbmNlbD1kLkNhbmNlbGVkRXJyb3I7ZC5hbGw9ZnVuY3Rpb24odCl7cmV0dXJuIFByb21pc2UuYWxsKHQpfTtkLnNwcmVhZD1zdDtkLmlzQXhpb3NFcnJvcj1DdDtkLm1lcmdlQ29uZmlnPWs7ZC5BeGlvc0hlYWRlcnM9bTtkLmZvcm1Ub0pTT049QT0+d0EoaS5pc0hUTUxGb3JtKEEpP25ldyBGb3JtRGF0YShBKTpBKTtkLmdldEFkYXB0ZXI9TkEuZ2V0QWRhcHRlcjtkLkh0dHBTdGF0dXNDb2RlPWdlO2QuZGVmYXVsdD1kO3ZhciBMQT1kO3ZhcntBeGlvczpFaSxBeGlvc0Vycm9yOmNpLENhbmNlbGVkRXJyb3I6ZmksaXNDYW5jZWw6bGksQ2FuY2VsVG9rZW46dWksVkVSU0lPTjpEaSxhbGw6aGksQ2FuY2VsOmRpLGlzQXhpb3NFcnJvcjp5aSxzcHJlYWQ6bWksdG9Gb3JtRGF0YTp3aSxBeGlvc0hlYWRlcnM6cGksSHR0cFN0YXR1c0NvZGU6U2ksZm9ybVRvSlNPTjpGaSxnZXRBZGFwdGVyOlJpLG1lcmdlQ29uZmlnOk5pfT1MQTt2YXIgbkEsWSxRdCxhdD17ZW52OntlbXNjcmlwdGVuX25vdGlmeV9tZW1vcnlfZ3Jvd3RoOmZ1bmN0aW9uKEEpe1F0PW5ldyBVaW50OEFycmF5KFkuZXhwb3J0cy5tZW1vcnkuYnVmZmVyKX19fSxKQT1jbGFzc3tpbml0KCl7cmV0dXJuIG5BfHwodHlwZW9mIGZldGNoPCJ1Ij9uQT1mZXRjaCgiZGF0YTphcHBsaWNhdGlvbi93YXNtO2Jhc2U2NCwiK25lKS50aGVuKHQ9PnQuYXJyYXlCdWZmZXIoKSkudGhlbih0PT5XZWJBc3NlbWJseS5pbnN0YW50aWF0ZSh0LGF0KSkudGhlbih0aGlzLl9pbml0KTpuQT1XZWJBc3NlbWJseS5pbnN0YW50aWF0ZShCdWZmZXIuZnJvbShuZSwiYmFzZTY0IiksYXQpLnRoZW4odGhpcy5faW5pdCksbkEpfV9pbml0KHQpe1k9dC5pbnN0YW5jZSxhdC5lbnYuZW1zY3JpcHRlbl9ub3RpZnlfbWVtb3J5X2dyb3d0aCgwKX1kZWNvZGUodCxlPTApe2lmKCFZKXRocm93IG5ldyBFcnJvcigiWlNURERlY29kZXI6IEF3YWl0IC5pbml0KCkgYmVmb3JlIGRlY29kaW5nLiIpO2xldCBJPXQuYnl0ZUxlbmd0aCxyPVkuZXhwb3J0cy5tYWxsb2MoSSk7UXQuc2V0KHQsciksZT1lfHxOdW1iZXIoWS5leHBvcnRzLlpTVERfZmluZERlY29tcHJlc3NlZFNpemUocixJKSk7bGV0IG89WS5leHBvcnRzLm1hbGxvYyhlKSxnPVkuZXhwb3J0cy5aU1REX2RlY29tcHJlc3MobyxlLHIsSSksQz1RdC5zbGljZShvLG8rZyk7cmV0dXJuIFkuZXhwb3J0cy5mcmVlKHIpLFkuZXhwb3J0cy5mcmVlKG8pLEN9fSxuZT0iQUdGemJRRUFBQUFCYmc1Z0EzOS9md0YvWUFGL0FYOWdBbjkvQUdBQmZ3QmdCWDkvZjM5L0FYOWdBMzkvZndCZ0JIOS9mMzhCZjJBQUFYOWdBbjkvQVg5Z0IzOS9mMzkvZjM4QmYyQUNmMzhCZm1BSWYzOS9mMzkvZjM4QmYyQUZmMzkvZjM4QVlBNS9mMzkvZjM5L2YzOS9mMzkvZndGL0FpY0JBMlZ1ZGg5bGJYTmpjbWx3ZEdWdVgyNXZkR2xtZVY5dFpXMXZjbmxmWjNKdmQzUm9BQU1ESXlJSEFBQUJBUU1IQXdFQUNRUUFCUUVJQ0FFRkJnUUVCQU1HQUFBS0FBVUxEQTBHQkFVQmNBRUJBUVVIQVFHQUFvQ0FBZ1lJQVg4QlFZQ2pCQXNIcmdFTEJtMWxiVzl5ZVFJQUJtMWhiR3h2WXdBRkJHWnlaV1VBQmd4YVUxUkVYMmx6UlhKeWIzSUFFaGxhVTFSRVgyWnBibVJFWldOdmJYQnlaWE56WldSVGFYcGxBQndQV2xOVVJGOWtaV052YlhCeVpYTnpBQ0laWDE5cGJtUnBjbVZqZEY5bWRXNWpkR2x2Ymw5MFlXSnNaUUVBRUY5ZlpYSnlibTlmYkc5allYUnBiMjRBQVFsemRHRmphMU5oZG1VQUJ3eHpkR0ZqYTFKbGMzUnZjbVVBQ0FwemRHRmphMEZzYkc5akFBa0tpL0lCSWdVQVFZUWZDek1CQVg4Z0FnUkFJQUFoQXdOQUlBTWdBUzBBQURvQUFDQURRUUZxSVFNZ0FVRUJhaUVCSUFKQkFXc2lBZzBBQ3dzZ0FBc3BBUUYvSUFJRVFDQUFJUU1EUUNBRElBRTZBQUFnQTBFQmFpRURJQUpCQVdzaUFnMEFDd3NnQUF0c0FRSi9RWUFmS0FJQUlnRWdBRUVIYWtGNGNTSUNhaUVBQWtBZ0FrRUFJQUFnQVUwYkRRQWdBRDhBUVJCMFN3UkFJQUEvQUVFUWRHdEIvLzhEYWtFUWRrQUFRWDlHQkg5QkFBVkJBQkFBUVFFTFJRMEJDMEdBSHlBQU5nSUFJQUVQQzBHRUgwRXdOZ0lBUVg4THVTY0JDMzhqQUVFUWF5SUtKQUFDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBSUFCQjlBRk5CRUJCaUI4b0FnQWlCa0VRSUFCQkMycEJlSEVnQUVFTFNSc2lCVUVEZGlJQWRpSUJRUU54QkVBQ1FDQUJRWDl6UVFGeElBQnFJZ0pCQTNRaUFVR3dIMm9pQUNBQlFiZ2ZhaWdDQUNJQktBSUlJZ1JHQkVCQmlCOGdCa0YrSUFKM2NUWUNBQXdCQ3lBRUlBQTJBZ3dnQUNBRU5nSUlDeUFCUVFocUlRQWdBU0FDUVFOMElnSkJBM0kyQWdRZ0FTQUNhaUlCSUFFb0FnUkJBWEkyQWdRTUR3c2dCVUdRSHlnQ0FDSUhUUTBCSUFFRVFBSkFRUUlnQUhRaUFrRUFJQUpyY2lBQklBQjBjV2dpQVVFRGRDSUFRYkFmYWlJQ0lBQkJ1QjlxS0FJQUlnQW9BZ2dpQkVZRVFFR0lIeUFHUVg0Z0FYZHhJZ1kyQWdBTUFRc2dCQ0FDTmdJTUlBSWdCRFlDQ0FzZ0FDQUZRUU55TmdJRUlBQWdCV29pQ0NBQlFRTjBJZ0VnQldzaUJFRUJjallDQkNBQUlBRnFJQVEyQWdBZ0J3UkFJQWRCZUhGQnNCOXFJUUZCbkI4b0FnQWhBZ0ovSUFaQkFTQUhRUU4yZENJRGNVVUVRRUdJSHlBRElBWnlOZ0lBSUFFTUFRc2dBU2dDQ0FzaEF5QUJJQUkyQWdnZ0F5QUNOZ0lNSUFJZ0FUWUNEQ0FDSUFNMkFnZ0xJQUJCQ0dvaEFFR2NIeUFJTmdJQVFaQWZJQVEyQWdBTUR3dEJqQjhvQWdBaUMwVU5BU0FMYUVFQ2RFRzRJV29vQWdBaUFpZ0NCRUY0Y1NBRmF5RURJQUloQVFOQUFrQWdBU2dDRUNJQVJRUkFJQUVvQWhRaUFFVU5BUXNnQUNnQ0JFRjRjU0FGYXlJQklBTWdBU0FEU1NJQkd5RURJQUFnQWlBQkd5RUNJQUFoQVF3QkN3c2dBaWdDR0NFSklBSWdBaWdDRENJRVJ3UkFRWmdmS0FJQUdpQUNLQUlJSWdBZ0JEWUNEQ0FFSUFBMkFnZ01EZ3NnQWtFVWFpSUJLQUlBSWdCRkJFQWdBaWdDRUNJQVJRMERJQUpCRUdvaEFRc0RRQ0FCSVFnZ0FDSUVRUlJxSWdFb0FnQWlBQTBBSUFSQkVHb2hBU0FFS0FJUUlnQU5BQXNnQ0VFQU5nSUFEQTBMUVg4aEJTQUFRYjkvU3cwQUlBQkJDMm9pQUVGNGNTRUZRWXdmS0FJQUlnaEZEUUJCQUNBRmF5RURBa0FDUUFKQUFuOUJBQ0FGUVlBQ1NRMEFHa0VmSUFWQi8vLy9CMHNOQUJvZ0JVRW1JQUJCQ0habklnQnJka0VCY1NBQVFRRjBhMEUrYWdzaUIwRUNkRUc0SVdvb0FnQWlBVVVFUUVFQUlRQU1BUXRCQUNFQUlBVkJHU0FIUVFGMmEwRUFJQWRCSDBjYmRDRUNBMEFDUUNBQktBSUVRWGh4SUFWcklnWWdBMDhOQUNBQklRUWdCaUlERFFCQkFDRURJQUVoQUF3REN5QUFJQUVvQWhRaUJpQUdJQUVnQWtFZGRrRUVjV29vQWhBaUFVWWJJQUFnQmhzaEFDQUNRUUYwSVFJZ0FRMEFDd3NnQUNBRWNrVUVRRUVBSVFSQkFpQUhkQ0lBUVFBZ0FHdHlJQWh4SWdCRkRRTWdBR2hCQW5SQnVDRnFLQUlBSVFBTElBQkZEUUVMQTBBZ0FDZ0NCRUY0Y1NBRmF5SUNJQU5KSVFFZ0FpQURJQUViSVFNZ0FDQUVJQUViSVFRZ0FDZ0NFQ0lCQkg4Z0FRVWdBQ2dDRkFzaUFBMEFDd3NnQkVVTkFDQURRWkFmS0FJQUlBVnJUdzBBSUFRb0FoZ2hCeUFFSUFRb0Fnd2lBa2NFUUVHWUh5Z0NBQm9nQkNnQ0NDSUFJQUkyQWd3Z0FpQUFOZ0lJREF3TElBUkJGR29pQVNnQ0FDSUFSUVJBSUFRb0FoQWlBRVVOQXlBRVFSQnFJUUVMQTBBZ0FTRUdJQUFpQWtFVWFpSUJLQUlBSWdBTkFDQUNRUkJxSVFFZ0FpZ0NFQ0lBRFFBTElBWkJBRFlDQUF3TEN5QUZRWkFmS0FJQUlnUk5CRUJCbkI4b0FnQWhBQUpBSUFRZ0JXc2lBVUVRVHdSQUlBQWdCV29pQWlBQlFRRnlOZ0lFSUFBZ0JHb2dBVFlDQUNBQUlBVkJBM0kyQWdRTUFRc2dBQ0FFUVFOeU5nSUVJQUFnQkdvaUFTQUJLQUlFUVFGeU5nSUVRUUFoQWtFQUlRRUxRWkFmSUFFMkFnQkJuQjhnQWpZQ0FDQUFRUWhxSVFBTURRc2dCVUdVSHlnQ0FDSUNTUVJBUVpRZklBSWdCV3NpQVRZQ0FFR2dIMEdnSHlnQ0FDSUFJQVZxSWdJMkFnQWdBaUFCUVFGeU5nSUVJQUFnQlVFRGNqWUNCQ0FBUVFocUlRQU1EUXRCQUNFQUlBVkJMMm9pQXdKL1FlQWlLQUlBQkVCQjZDSW9BZ0FNQVF0QjdDSkNmemNDQUVIa0lrS0FvSUNBZ0lBRU53SUFRZUFpSUFwQkRHcEJjSEZCMktyVnFnVnpOZ0lBUWZRaVFRQTJBZ0JCeENKQkFEWUNBRUdBSUFzaUFXb2lCa0VBSUFGcklnaHhJZ0VnQlUwTkRFSEFJaWdDQUNJRUJFQkJ1Q0lvQWdBaUJ5QUJhaUlKSUFkTklBUWdDVWx5RFEwTEFrQkJ4Q0l0QUFCQkJIRkZCRUFDUUFKQUFrQUNRRUdnSHlnQ0FDSUVCRUJCeUNJaEFBTkFJQVFnQUNnQ0FDSUhUd1JBSUFjZ0FDZ0NCR29nQkVzTkF3c2dBQ2dDQ0NJQURRQUxDMEVBRUFRaUFrRi9SZzBESUFFaEJrSGtJaWdDQUNJQVFRRnJJZ1FnQW5FRVFDQUJJQUpySUFJZ0JHcEJBQ0FBYTNGcUlRWUxJQVVnQms4TkEwSEFJaWdDQUNJQUJFQkJ1Q0lvQWdBaUJDQUdhaUlJSUFSTklBQWdDRWx5RFFRTElBWVFCQ0lBSUFKSERRRU1CUXNnQmlBQ2F5QUljU0lHRUFRaUFpQUFLQUlBSUFBb0FnUnFSZzBCSUFJaEFBc2dBRUYvUmcwQklBVkJNR29nQmswRVFDQUFJUUlNQkF0QjZDSW9BZ0FpQWlBRElBWnJha0VBSUFKcmNTSUNFQVJCZjBZTkFTQUNJQVpxSVFZZ0FDRUNEQU1MSUFKQmYwY05BZ3RCeENKQnhDSW9BZ0JCQkhJMkFnQUxJQUVRQkNJQ1FYOUdRUUFRQkNJQVFYOUdjaUFBSUFKTmNnMEZJQUFnQW1zaUJpQUZRU2hxVFEwRkMwRzRJa0c0SWlnQ0FDQUdhaUlBTmdJQVFid2lLQUlBSUFCSkJFQkJ2Q0lnQURZQ0FBc0NRRUdnSHlnQ0FDSURCRUJCeUNJaEFBTkFJQUlnQUNnQ0FDSUJJQUFvQWdRaUJHcEdEUUlnQUNnQ0NDSUFEUUFMREFRTFFaZ2ZLQUlBSWdCQkFDQUFJQUpORzBVRVFFR1lIeUFDTmdJQUMwRUFJUUJCekNJZ0JqWUNBRUhJSWlBQ05nSUFRYWdmUVg4MkFnQkJyQjlCNENJb0FnQTJBZ0JCMUNKQkFEWUNBQU5BSUFCQkEzUWlBVUc0SDJvZ0FVR3dIMm9pQkRZQ0FDQUJRYndmYWlBRU5nSUFJQUJCQVdvaUFFRWdSdzBBQzBHVUh5QUdRU2hySWdCQmVDQUNhMEVIY1NJQmF5SUVOZ0lBUWFBZklBRWdBbW9pQVRZQ0FDQUJJQVJCQVhJMkFnUWdBQ0FDYWtFb05nSUVRYVFmUWZBaUtBSUFOZ0lBREFRTElBSWdBMDBnQVNBRFMzSU5BaUFBS0FJTVFRaHhEUUlnQUNBRUlBWnFOZ0lFUWFBZklBTkJlQ0FEYTBFSGNTSUFhaUlCTmdJQVFaUWZRWlFmS0FJQUlBWnFJZ0lnQUdzaUFEWUNBQ0FCSUFCQkFYSTJBZ1FnQWlBRGFrRW9OZ0lFUWFRZlFmQWlLQUlBTmdJQURBTUxRUUFoQkF3S0MwRUFJUUlNQ0F0Qm1COG9BZ0FnQWtzRVFFR1lIeUFDTmdJQUN5QUNJQVpxSVFGQnlDSWhBQUpBQWtBQ1FBTkFJQUVnQUNnQ0FFY0VRQ0FBS0FJSUlnQU5BUXdDQ3dzZ0FDMEFERUVJY1VVTkFRdEJ5Q0loQUFOQUlBTWdBQ2dDQUNJQlR3UkFJQUVnQUNnQ0JHb2lCQ0FEU3cwREN5QUFLQUlJSVFBTUFBc0FDeUFBSUFJMkFnQWdBQ0FBS0FJRUlBWnFOZ0lFSUFKQmVDQUNhMEVIY1dvaUJ5QUZRUU55TmdJRUlBRkJlQ0FCYTBFSGNXb2lCaUFGSUFkcUlnVnJJUUFnQXlBR1JnUkFRYUFmSUFVMkFnQkJsQjlCbEI4b0FnQWdBR29pQURZQ0FDQUZJQUJCQVhJMkFnUU1DQXRCbkI4b0FnQWdCa1lFUUVHY0h5QUZOZ0lBUVpBZlFaQWZLQUlBSUFCcUlnQTJBZ0FnQlNBQVFRRnlOZ0lFSUFBZ0JXb2dBRFlDQUF3SUN5QUdLQUlFSWdOQkEzRkJBVWNOQmlBRFFYaHhJUWtnQTBIL0FVMEVRQ0FHS0FJTUlnRWdCaWdDQ0NJQ1JnUkFRWWdmUVlnZktBSUFRWDRnQTBFRGRuZHhOZ0lBREFjTElBSWdBVFlDRENBQklBSTJBZ2dNQmdzZ0JpZ0NHQ0VJSUFZZ0JpZ0NEQ0lDUndSQUlBWW9BZ2dpQVNBQ05nSU1JQUlnQVRZQ0NBd0ZDeUFHUVJScUlnRW9BZ0FpQTBVRVFDQUdLQUlRSWdORkRRUWdCa0VRYWlFQkN3TkFJQUVoQkNBRElnSkJGR29pQVNnQ0FDSUREUUFnQWtFUWFpRUJJQUlvQWhBaUF3MEFDeUFFUVFBMkFnQU1CQXRCbEI4Z0JrRW9heUlBUVhnZ0FtdEJCM0VpQVdzaUNEWUNBRUdnSHlBQklBSnFJZ0UyQWdBZ0FTQUlRUUZ5TmdJRUlBQWdBbXBCS0RZQ0JFR2tIMEh3SWlnQ0FEWUNBQ0FESUFSQkp5QUVhMEVIY1dwQkwyc2lBQ0FBSUFOQkVHcEpHeUlCUVJzMkFnUWdBVUhRSWlrQ0FEY0NFQ0FCUWNnaUtRSUFOd0lJUWRBaUlBRkJDR28yQWdCQnpDSWdCallDQUVISUlpQUNOZ0lBUWRRaVFRQTJBZ0FnQVVFWWFpRUFBMEFnQUVFSE5nSUVJQUJCQ0dvZ0FFRUVhaUVBSUFSSkRRQUxJQUVnQTBZTkFDQUJJQUVvQWdSQmZuRTJBZ1FnQXlBQklBTnJJZ0pCQVhJMkFnUWdBU0FDTmdJQUlBSkIvd0ZOQkVBZ0FrRjRjVUd3SDJvaEFBSi9RWWdmS0FJQUlnRkJBU0FDUVFOMmRDSUNjVVVFUUVHSUh5QUJJQUp5TmdJQUlBQU1BUXNnQUNnQ0NBc2hBU0FBSUFNMkFnZ2dBU0FETmdJTUlBTWdBRFlDRENBRElBRTJBZ2dNQVF0Qkh5RUFJQUpCLy8vL0IwMEVRQ0FDUVNZZ0FrRUlkbWNpQUd0MlFRRnhJQUJCQVhSclFUNXFJUUFMSUFNZ0FEWUNIQ0FEUWdBM0FoQWdBRUVDZEVHNElXb2hBUUpBQWtCQmpCOG9BZ0FpQkVFQklBQjBJZ1p4UlFSQVFZd2ZJQVFnQm5JMkFnQWdBU0FETmdJQURBRUxJQUpCR1NBQVFRRjJhMEVBSUFCQkgwY2JkQ0VBSUFFb0FnQWhCQU5BSUFRaUFTZ0NCRUY0Y1NBQ1JnMENJQUJCSFhZaEJDQUFRUUYwSVFBZ0FTQUVRUVJ4YWlJR0tBSVFJZ1FOQUFzZ0JpQUROZ0lRQ3lBRElBRTJBaGdnQXlBRE5nSU1JQU1nQXpZQ0NBd0JDeUFCS0FJSUlnQWdBellDRENBQklBTTJBZ2dnQTBFQU5nSVlJQU1nQVRZQ0RDQURJQUEyQWdnTFFaUWZLQUlBSWdBZ0JVME5BRUdVSHlBQUlBVnJJZ0UyQWdCQm9COUJvQjhvQWdBaUFDQUZhaUlDTmdJQUlBSWdBVUVCY2pZQ0JDQUFJQVZCQTNJMkFnUWdBRUVJYWlFQURBZ0xRWVFmUVRBMkFnQkJBQ0VBREFjTFFRQWhBZ3NnQ0VVTkFBSkFJQVlvQWh3aUFVRUNkRUc0SVdvaUJDZ0NBQ0FHUmdSQUlBUWdBallDQUNBQ0RRRkJqQjlCakI4b0FnQkJmaUFCZDNFMkFnQU1BZ3NnQ0VFUVFSUWdDQ2dDRUNBR1JodHFJQUkyQWdBZ0FrVU5BUXNnQWlBSU5nSVlJQVlvQWhBaUFRUkFJQUlnQVRZQ0VDQUJJQUkyQWhnTElBWW9BaFFpQVVVTkFDQUNJQUUyQWhRZ0FTQUNOZ0lZQ3lBQUlBbHFJUUFnQmlBSmFpSUdLQUlFSVFNTElBWWdBMEYrY1RZQ0JDQUZJQUJCQVhJMkFnUWdBQ0FGYWlBQU5nSUFJQUJCL3dGTkJFQWdBRUY0Y1VHd0gyb2hBUUovUVlnZktBSUFJZ0pCQVNBQVFRTjJkQ0lBY1VVRVFFR0lIeUFBSUFKeU5nSUFJQUVNQVFzZ0FTZ0NDQXNoQUNBQklBVTJBZ2dnQUNBRk5nSU1JQVVnQVRZQ0RDQUZJQUEyQWdnTUFRdEJIeUVESUFCQi8vLy9CMDBFUUNBQVFTWWdBRUVJZG1jaUFXdDJRUUZ4SUFGQkFYUnJRVDVxSVFNTElBVWdBellDSENBRlFnQTNBaEFnQTBFQ2RFRzRJV29oQVFKQUFrQkJqQjhvQWdBaUFrRUJJQU4wSWdSeFJRUkFRWXdmSUFJZ0JISTJBZ0FnQVNBRk5nSUFEQUVMSUFCQkdTQURRUUYyYTBFQUlBTkJIMGNiZENFRElBRW9BZ0FoQWdOQUlBSWlBU2dDQkVGNGNTQUFSZzBDSUFOQkhYWWhBaUFEUVFGMElRTWdBU0FDUVFSeGFpSUVLQUlRSWdJTkFBc2dCQ0FGTmdJUUN5QUZJQUUyQWhnZ0JTQUZOZ0lNSUFVZ0JUWUNDQXdCQ3lBQktBSUlJZ0FnQlRZQ0RDQUJJQVUyQWdnZ0JVRUFOZ0lZSUFVZ0FUWUNEQ0FGSUFBMkFnZ0xJQWRCQ0dvaEFBd0NDd0pBSUFkRkRRQUNRQ0FFS0FJY0lnQkJBblJCdUNGcUlnRW9BZ0FnQkVZRVFDQUJJQUkyQWdBZ0FnMEJRWXdmSUFoQmZpQUFkM0VpQ0RZQ0FBd0NDeUFIUVJCQkZDQUhLQUlRSUFSR0cyb2dBallDQUNBQ1JRMEJDeUFDSUFjMkFoZ2dCQ2dDRUNJQUJFQWdBaUFBTmdJUUlBQWdBallDR0FzZ0JDZ0NGQ0lBUlEwQUlBSWdBRFlDRkNBQUlBSTJBaGdMQWtBZ0EwRVBUUVJBSUFRZ0F5QUZhaUlBUVFOeU5nSUVJQUFnQkdvaUFDQUFLQUlFUVFGeU5nSUVEQUVMSUFRZ0JVRURjallDQkNBRUlBVnFJZ0lnQTBFQmNqWUNCQ0FDSUFOcUlBTTJBZ0FnQTBIL0FVMEVRQ0FEUVhoeFFiQWZhaUVBQW45QmlCOG9BZ0FpQVVFQklBTkJBM1owSWdOeFJRUkFRWWdmSUFFZ0EzSTJBZ0FnQUF3QkN5QUFLQUlJQ3lFQklBQWdBallDQ0NBQklBSTJBZ3dnQWlBQU5nSU1JQUlnQVRZQ0NBd0JDMEVmSVFBZ0EwSC8vLzhIVFFSQUlBTkJKaUFEUVFoMlp5SUFhM1pCQVhFZ0FFRUJkR3RCUG1vaEFBc2dBaUFBTmdJY0lBSkNBRGNDRUNBQVFRSjBRYmdoYWlFQkFrQUNRQ0FJUVFFZ0FIUWlCbkZGQkVCQmpCOGdCaUFJY2pZQ0FDQUJJQUkyQWdBTUFRc2dBMEVaSUFCQkFYWnJRUUFnQUVFZlJ4dDBJUUFnQVNnQ0FDRUZBMEFnQlNJQktBSUVRWGh4SUFOR0RRSWdBRUVkZGlFR0lBQkJBWFFoQUNBQklBWkJCSEZxSWdZb0FoQWlCUTBBQ3lBR0lBSTJBaEFMSUFJZ0FUWUNHQ0FDSUFJMkFnd2dBaUFDTmdJSURBRUxJQUVvQWdnaUFDQUNOZ0lNSUFFZ0FqWUNDQ0FDUVFBMkFoZ2dBaUFCTmdJTUlBSWdBRFlDQ0FzZ0JFRUlhaUVBREFFTEFrQWdDVVVOQUFKQUlBSW9BaHdpQUVFQ2RFRzRJV29pQVNnQ0FDQUNSZ1JBSUFFZ0JEWUNBQ0FFRFFGQmpCOGdDMEYrSUFCM2NUWUNBQXdDQ3lBSlFSQkJGQ0FKS0FJUUlBSkdHMm9nQkRZQ0FDQUVSUTBCQ3lBRUlBazJBaGdnQWlnQ0VDSUFCRUFnQkNBQU5nSVFJQUFnQkRZQ0dBc2dBaWdDRkNJQVJRMEFJQVFnQURZQ0ZDQUFJQVEyQWhnTEFrQWdBMEVQVFFSQUlBSWdBeUFGYWlJQVFRTnlOZ0lFSUFBZ0Ftb2lBQ0FBS0FJRVFRRnlOZ0lFREFFTElBSWdCVUVEY2pZQ0JDQUNJQVZxSWdRZ0EwRUJjallDQkNBRElBUnFJQU0yQWdBZ0J3UkFJQWRCZUhGQnNCOXFJUUJCbkI4b0FnQWhBUUovUVFFZ0IwRURkblFpQlNBR2NVVUVRRUdJSHlBRklBWnlOZ0lBSUFBTUFRc2dBQ2dDQ0FzaEJpQUFJQUUyQWdnZ0JpQUJOZ0lNSUFFZ0FEWUNEQ0FCSUFZMkFnZ0xRWndmSUFRMkFnQkJrQjhnQXpZQ0FBc2dBa0VJYWlFQUN5QUtRUkJxSkFBZ0FBdlNDd0VIZndKQUlBQkZEUUFnQUVFSWF5SUNJQUJCQkdzb0FnQWlBVUY0Y1NJQWFpRUZBa0FnQVVFQmNRMEFJQUZCQTNGRkRRRWdBaUFDS0FJQUlnRnJJZ0pCbUI4b0FnQkpEUUVnQUNBQmFpRUFBa0FDUUVHY0h5Z0NBQ0FDUndSQUlBRkIvd0ZOQkVBZ0FVRURkaUVFSUFJb0Fnd2lBU0FDS0FJSUlnTkdCRUJCaUI5QmlCOG9BZ0JCZmlBRWQzRTJBZ0FNQlFzZ0F5QUJOZ0lNSUFFZ0F6WUNDQXdFQ3lBQ0tBSVlJUVlnQWlBQ0tBSU1JZ0ZIQkVBZ0FpZ0NDQ0lESUFFMkFnd2dBU0FETmdJSURBTUxJQUpCRkdvaUJDZ0NBQ0lEUlFSQUlBSW9BaEFpQTBVTkFpQUNRUkJxSVFRTEEwQWdCQ0VISUFNaUFVRVVhaUlFS0FJQUlnTU5BQ0FCUVJCcUlRUWdBU2dDRUNJRERRQUxJQWRCQURZQ0FBd0NDeUFGS0FJRUlnRkJBM0ZCQTBjTkFrR1FIeUFBTmdJQUlBVWdBVUYrY1RZQ0JDQUNJQUJCQVhJMkFnUWdCU0FBTmdJQUR3dEJBQ0VCQ3lBR1JRMEFBa0FnQWlnQ0hDSURRUUowUWJnaGFpSUVLQUlBSUFKR0JFQWdCQ0FCTmdJQUlBRU5BVUdNSDBHTUh5Z0NBRUYrSUFOM2NUWUNBQXdDQ3lBR1FSQkJGQ0FHS0FJUUlBSkdHMm9nQVRZQ0FDQUJSUTBCQ3lBQklBWTJBaGdnQWlnQ0VDSURCRUFnQVNBRE5nSVFJQU1nQVRZQ0dBc2dBaWdDRkNJRFJRMEFJQUVnQXpZQ0ZDQURJQUUyQWhnTElBSWdCVThOQUNBRktBSUVJZ0ZCQVhGRkRRQUNRQUpBQWtBQ1FDQUJRUUp4UlFSQVFhQWZLQUlBSUFWR0JFQkJvQjhnQWpZQ0FFR1VIMEdVSHlnQ0FDQUFhaUlBTmdJQUlBSWdBRUVCY2pZQ0JDQUNRWndmS0FJQVJ3MEdRWkFmUVFBMkFnQkJuQjlCQURZQ0FBOExRWndmS0FJQUlBVkdCRUJCbkI4Z0FqWUNBRUdRSDBHUUh5Z0NBQ0FBYWlJQU5nSUFJQUlnQUVFQmNqWUNCQ0FBSUFKcUlBQTJBZ0FQQ3lBQlFYaHhJQUJxSVFBZ0FVSC9BVTBFUUNBQlFRTjJJUVFnQlNnQ0RDSUJJQVVvQWdnaUEwWUVRRUdJSDBHSUh5Z0NBRUYrSUFSM2NUWUNBQXdGQ3lBRElBRTJBZ3dnQVNBRE5nSUlEQVFMSUFVb0FoZ2hCaUFGSUFVb0Fnd2lBVWNFUUVHWUh5Z0NBQm9nQlNnQ0NDSURJQUUyQWd3Z0FTQUROZ0lJREFNTElBVkJGR29pQkNnQ0FDSURSUVJBSUFVb0FoQWlBMFVOQWlBRlFSQnFJUVFMQTBBZ0JDRUhJQU1pQVVFVWFpSUVLQUlBSWdNTkFDQUJRUkJxSVFRZ0FTZ0NFQ0lERFFBTElBZEJBRFlDQUF3Q0N5QUZJQUZCZm5FMkFnUWdBaUFBUVFGeU5nSUVJQUFnQW1vZ0FEWUNBQXdEQzBFQUlRRUxJQVpGRFFBQ1FDQUZLQUljSWdOQkFuUkJ1Q0ZxSWdRb0FnQWdCVVlFUUNBRUlBRTJBZ0FnQVEwQlFZd2ZRWXdmS0FJQVFYNGdBM2R4TmdJQURBSUxJQVpCRUVFVUlBWW9BaEFnQlVZYmFpQUJOZ0lBSUFGRkRRRUxJQUVnQmpZQ0dDQUZLQUlRSWdNRVFDQUJJQU0yQWhBZ0F5QUJOZ0lZQ3lBRktBSVVJZ05GRFFBZ0FTQUROZ0lVSUFNZ0FUWUNHQXNnQWlBQVFRRnlOZ0lFSUFBZ0Ftb2dBRFlDQUNBQ1Fad2ZLQUlBUncwQVFaQWZJQUEyQWdBUEN5QUFRZjhCVFFSQUlBQkJlSEZCc0I5cUlRRUNmMEdJSHlnQ0FDSURRUUVnQUVFRGRuUWlBSEZGQkVCQmlCOGdBQ0FEY2pZQ0FDQUJEQUVMSUFFb0FnZ0xJUUFnQVNBQ05nSUlJQUFnQWpZQ0RDQUNJQUUyQWd3Z0FpQUFOZ0lJRHd0Qkh5RURJQUJCLy8vL0IwMEVRQ0FBUVNZZ0FFRUlkbWNpQVd0MlFRRnhJQUZCQVhSclFUNXFJUU1MSUFJZ0F6WUNIQ0FDUWdBM0FoQWdBMEVDZEVHNElXb2hBUUpBQWtBQ1FFR01IeWdDQUNJRVFRRWdBM1FpQjNGRkJFQkJqQjhnQkNBSGNqWUNBQ0FCSUFJMkFnQWdBaUFCTmdJWURBRUxJQUJCR1NBRFFRRjJhMEVBSUFOQkgwY2JkQ0VESUFFb0FnQWhBUU5BSUFFaUJDZ0NCRUY0Y1NBQVJnMENJQU5CSFhZaEFTQURRUUYwSVFNZ0JDQUJRUVJ4YWlJSFFSQnFLQUlBSWdFTkFBc2dCeUFDTmdJUUlBSWdCRFlDR0FzZ0FpQUNOZ0lNSUFJZ0FqWUNDQXdCQ3lBRUtBSUlJZ0FnQWpZQ0RDQUVJQUkyQWdnZ0FrRUFOZ0lZSUFJZ0JEWUNEQ0FDSUFBMkFnZ0xRYWdmUWFnZktBSUFRUUZySWdCQmZ5QUFHellDQUFzTEJBQWpBQXNHQUNBQUpBQUxFQUFqQUNBQWEwRndjU0lBSkFBZ0FBdEtBUUYvSUFBZ0FVa0VRQ0FBSUFFZ0FoQUNEd3NnQWdSQUlBQWdBbW9oQXlBQklBSnFJUUVEUUNBRFFRRnJJZ01nQVVFQmF5SUJMUUFBT2dBQUlBSkJBV3NpQWcwQUN3c2dBQXY5RGdJUmZ3RitJd0JCTUdzaUJ5UUFRYmgvSVFnQ1FDQUZSUTBBSUFRc0FBQWlDVUgvQVhFaEN3SkFJQWxCQUVnRVFDQUxRZjRBYTBFQmRpSUdJQVZQRFFKQmJDRUlJQXRCL3dCcklndEIvd0ZMRFFJZ0JFRUJhaUVJUVFBaEJRTkFJQVVnQzA4RVFDQUxJUWdnQmlFTERBTUZJQUFnQldvZ0NDQUZRUUYyYWlJRUxRQUFRUVIyT2dBQUlBQWdCVUVCY21vZ0JDMEFBRUVQY1RvQUFDQUZRUUpxSVFVTUFRc0FDd0FMSUFVZ0MwME5BU0FIUWY4Qk5nSUVJQVlnQjBFRWFpQUhRUWhxSUFSQkFXb2lEaUFMRUF3aUJFR0lmMHNFUUNBRUlRZ01BZ3RCVkNFSUlBY29BZ2dpRUVFR1N3MEJJQWNvQWdRaUVVRUJkQ0lKUVFKcXJVSUJJQkN0aGlJWVFRRWdFSFFpRFVFQmFpSUZyVUlDaG54OFFndDhRdnovLy8vLy8vLy8vd0NEUXVRQ1ZnMEJRVkloQ0NBUlFmOEJTdzBCSUExQmYzTkJBblJCNUFKcXJTQVJRUUZxSWhWQkFYU3RJQmg4UWdoOFZBMEJJQXNnQkdzaEZpQUVJQTVxSVJjZ0JrR0FCR29pRWlBRlFRSjBhaUlSSUFscVFRSnFJUTRnQmtHRUJHb2hFMEdBZ0FJZ0VIUkJFSFloQ1VFQUlRVkJBU0VQSUExQkFXc2lGQ0VLQTBBZ0JTQVZSa1VFUUFKQUlBWWdCVUVCZENJSWFpOEJBQ0lFUWYvL0EwWUVRQ0FUSUFwQkFuUnFJQVU2QUFJZ0NrRUJheUVLUVFFaEJBd0JDeUFQUVFBZ0NTQUV3VW9iSVE4TElBZ2dFV29nQkRzQkFDQUZRUUZxSVFVTUFRc0xJQVlnRHpzQmdnUWdCaUFRT3dHQUJBSkFJQW9nRkVZRVFDQU5RUU4ySVFoQ0FDRVlRUUFoRHdOQUlBd2dGVVlFUUNBSUlBMUJBWFpxUVFOcUlnbEJBWFFoQ0VFQUlRUkJBQ0VLQTBCQkFDRUZJQW9nRFU4TkJBTkFJQVZCQWtaRkJFQWdFeUFGSUFsc0lBUnFJQlJ4UVFKMGFpQU9JQVVnQ21wcUxRQUFPZ0FDSUFWQkFXb2hCUXdCQ3dzZ0NrRUNhaUVLSUFRZ0NHb2dGSEVoQkF3QUN3QUZJQVlnREVFQmRHb3VBUUFoQ1NBT0lBOXFJZ1FnR0RjQUFFRUlJUVVEUUNBRklBbE9SUVJBSUFRZ0JXb2dHRGNBQUNBRlFRaHFJUVVNQVFzTElCaENnWUtFaUpDZ3dJQUJmQ0VZSUF4QkFXb2hEQ0FKSUE5cUlROE1BUXNBQ3dBTElBMUJBM1lnRFVFQmRtcEJBMm9oQ0VFQUlRVURRQ0FNSUJWR1JRUkFRUUFoQ1NBR0lBeEJBWFJxTGdFQUlnUkJBQ0FFUVFCS0d5RUVBMEFnQkNBSlJrVUVRQ0FUSUFWQkFuUnFJQXc2QUFJRFFDQUZJQWhxSUJSeElnVWdDa3NOQUFzZ0NVRUJhaUVKREFFTEN5QU1RUUZxSVF3TUFRc0xRWDhoQ0NBRkRRSUxJQkJCQVdvaENFRUFJUVVEUUNBRklBMUdSUVJBSUJFZ0V5QUZRUUowYWlJT0xRQUNRUUYwYWlJRUlBUXZBUUFpQ1VFQmFqc0JBQ0FPSUFnZ0NXZEJZSE5xSWdRNkFBTWdEaUFKSUFSMElBMXJPd0VBSUFWQkFXb2hCUXdCQ3dzQ1FBSkFJQVl2QVlJRUJFQWdCMEVjYWlJRUlCY2dGaEFOSWdoQmlIOUxEUUlnQjBFVWFpQUVJQklRRGlBSFFReHFJQVFnRWhBT1FRQWhCUU5BSUFkQkhHb2lCQkFQSUFWQit3RkxjZzBDSUFBZ0JXb2lCaUFIUVJScUlBUVFFRG9BQUNBR0lBZEJER29nQkJBUU9nQUJJQVZCQW5JaEJDQUhRUnhxRUE4RVFDQUVJUVVNQXdVZ0FDQUVhaUFIUVJScUlBZEJIR29pQkJBUU9nQUFJQVlnQjBFTWFpQUVFQkE2QUFNZ0JVRUVhaUVGREFFTEFBc0FDeUFIUVJ4cUlnUWdGeUFXRUEwaUNFR0lmMHNOQVNBSFFSUnFJQVFnRWhBT0lBZEJER29nQkNBU0VBNUJBQ0VGQTBBZ0IwRWNhaUlFRUE4Z0JVSDdBVXR5UlFSQUlBQWdCV29pQmlBSFFSUnFJQVFRRVRvQUFDQUdJQWRCREdvZ0JCQVJPZ0FCSUFWQkFuSWhCQ0FIUVJ4cUVBOEVRQ0FFSVFVRklBQWdCR29nQjBFVWFpQUhRUnhxSWdRUUVUb0FBQ0FHSUFkQkRHb2dCQkFST2dBRElBVkJCR29oQlF3Q0N3c0xBbjhEUUVHNmZ5RUlJQVZCL1FGTERRTWdBQ0FGYWlJR0lBZEJGR29nQjBFY2FpSUpFQkU2QUFBZ0JrRUJhaUVFSUFrUUQwRURSZ1JBSUFkQkRHb2hDRUVDREFJTElBVkIvQUZMRFFNZ0JpQUhRUXhxSUFkQkhHb2lCQkFST2dBQklBVkJBbW9oQlNBRUVBOUJBMGNOQUFzZ0FDQUZhaUVFSUFkQkZHb2hDRUVEQ3lBRUlBZ2dCMEVjYWhBUk9nQUFJQVpxSUFCcklRZ01BUXNDZndOQVFicC9JUWdnQlVIOUFVc05BaUFBSUFWcUlnWWdCMEVVYWlBSFFSeHFJZ2tRRURvQUFDQUdRUUZxSVFRZ0NSQVBRUU5HQkVBZ0IwRU1haUVJUVFJTUFnc2dCVUg4QVVzTkFpQUdJQWRCREdvZ0IwRWNhaUlFRUJBNkFBRWdCVUVDYWlFRklBUVFEMEVEUncwQUN5QUFJQVZxSVFRZ0IwRVVhaUVJUVFNTElBUWdDQ0FIUVJ4cUVCQTZBQUFnQm1vZ0FHc2hDQXNnQ0VHSWYwc05BUXNnQ0NFRVFRQWhCU0FCUVFCQk5CQURJUWxCQUNFS0EwQWdCQ0FGUndSQUlBQWdCV29pQmkwQUFDSUJRUXRMQkVCQmJDRUlEQU1GSUFrZ0FVRUNkR29pQVNBQktBSUFRUUZxTmdJQUlBVkJBV29oQlVFQklBWXRBQUIwUVFGMUlBcHFJUW9NQWdzQUN3dEJiQ0VJSUFwRkRRQWdDbWNpQlVFZmN5SUJRUXRMRFFBZ0EwRWdJQVZyTmdJQVFRRkJBaUFCZENBS2F5SURaMEVmY3lJQmRDQURSdzBBSUFBZ0JHb2dBVUVCYWlJQU9nQUFJQWtnQUVFQ2RHb2lBQ0FBS0FJQVFRRnFOZ0lBSUFrb0FnUWlBRUVDU1NBQVFRRnhjZzBBSUFJZ0JFRUJhallDQUNBTFFRRnFJUWdMSUFkQk1Hb2tBQ0FJQzZBRkFReC9Jd0JCRUdzaURDUUFBbjhnQkVFSFRRUkFJQXhDQURjRENDQU1RUWhxSWdVZ0F5QUVFQUlhUVd3Z0FDQUJJQUlnQlVFSUVBd2lBQ0FBSUFSTEd5QUFJQUJCaVg5Skd3d0JDeUFBUVFBZ0FTZ0NBRUVCYWlJTlFRRjBFQU1oRDBGVUlBTW9BQUFpQmtFUGNTSUFRUXBMRFFBYUlBSWdBRUVGYWpZQ0FDQURJQVJxSWdKQkJHc2hCeUFDUVFkcklRc2dBRUVHYWlFT1FRUWhBaUFHUVFSMklRVkJJQ0FBZENJSVFRRnlJUWxCQUNFQVFRRWhCaUFESVFRRFFBSkFJQVpCQVhGRkJFQURRQ0FGUVg5elFZQ0FnSUI0Y21naUJrRVlTVVVFUUNBQVFTUnFJUUFnQkNBTFRRUi9JQVJCQTJvRklBUWdDMnRCQTNRZ0FtcEJIM0VoQWlBSEN5SUVLQUFBSUFKMklRVU1BUXNMSUFJZ0JrRWVjU0lLYWtFQ2FpRUNJQVpCQVhaQkEyd2dBR29nQlNBS2RrRURjV29pQUNBTlR3MEJBbjhnQkNBTFN5QUNRUU4ySUFScUlnVWdCMHR4UlFSQUlBSkJCM0VoQWlBRkRBRUxJQVFnQjJ0QkEzUWdBbXBCSDNFaEFpQUhDeUlFS0FBQUlBSjJJUVVMSUFVZ0NFRUJhM0VpQmlBSVFRRjBRUUZySWdvZ0NXc2lFRWtFZnlBT1FRRnJCU0FGSUFweElnVWdFRUVBSUFVZ0NFNGJheUVHSUE0TElRVWdEeUFBUVFGMGFpQUdRUUZySWdvN0FRQWdBRUVCYWlFQUlBSWdCV29oQWlBSVFRRWdCbXNnQ2lBR1FRQktHeUFKYWlJSlNnUkFJQWxCQWtnTkFVRWdJQWxuSWdWcklRNUJBU0FGUVI5emRDRUlDeUFBSUExUERRQWdDa0VBUnlFR0FuOGdCQ0FMU3lBQ1FRTjFJQVJxSWdVZ0IwdHhSUVJBSUFKQkIzRWhBaUFGREFFTElBSWdCQ0FIYTBFRGRHcEJIM0VoQWlBSEN5SUVLQUFBSUFKMklRVU1BUXNMUVd3Z0NVRUJSdzBBR2tGUUlBQWdEVXNOQUJwQmJDQUNRU0JLRFFBYUlBRWdBRUVCYXpZQ0FDQUVJQUpCQjJwQkEzVnFJQU5yQ3lBTVFSQnFKQUFMOGdFQkFYOGdBa1VFUUNBQVFnQTNBZ0FnQUVFQU5nSVFJQUJDQURjQ0NFRzRmdzhMSUFBZ0FUWUNEQ0FBSUFGQkJHbzJBaEFnQWtFRVR3UkFJQUFnQVNBQ2FpSUJRUVJySWdNMkFnZ2dBQ0FES0FBQU5nSUFJQUZCQVdzdEFBQWlBUVJBSUFBZ0FXZEJGMnMyQWdRZ0FnOExJQUJCQURZQ0JFRi9Ed3NnQUNBQk5nSUlJQUFnQVMwQUFDSUROZ0lBQWtBQ1FBSkFJQUpCQW1zT0FnRUFBZ3NnQUNBQkxRQUNRUkIwSUFOeUlnTTJBZ0FMSUFBZ0FTMEFBVUVJZENBRGFqWUNBQXNnQVNBQ2FrRUJheTBBQUNJQlJRUkFJQUJCQURZQ0JFRnNEd3NnQUNBQlp5QUNRUU4wYTBFSmFqWUNCQ0FDQzBRQkFuOGdBU0FDTHdFQUlnTWdBU2dDQkdvaUJEWUNCQ0FBSUFOQkFuUkJvQjFxS0FJQUlBRW9BZ0JCQUNBRWEzWnhOZ0lBSUFFUUR4b2dBQ0FDUVFScU5nSUVDNThCQVFSL1FRTWhBU0FBS0FJRUlnSkJJRTBFUUNBQUtBSUlJZ0VnQUNnQ0VFOEVRQ0FBSUFKQkIzRTJBZ1FnQUNBQklBSkJBM1pySWdJMkFnZ2dBQ0FDS0FBQU5nSUFRUUFQQ3lBQUtBSU1JZ01nQVVZRVFFRUJRUUlnQWtFZ1NSc1BDeUFBSUFFZ0FTQURheUFDUVFOMklnUWdBU0FFYXlBRFNTSUJHeUlEYXlJRU5nSUlJQUFnQWlBRFFRTjBhellDQkNBQUlBUW9BQUEyQWdBTElBRUxTQUVFZnlBQUtBSUVJQUFvQWdCQkFuUnFJZ0l0QUFJZ0FpOEJBQ0VFSUFFZ0FTZ0NCQ0lGSUFJdEFBTWlBbW8yQWdRZ0FDQUVJQUVvQWdBZ0JYUkJBQ0FDYTNacU5nSUFDMUlCQkg4Z0FDZ0NCQ0FBS0FJQVFRSjBhaUlDTFFBQ0lBSXZBUUFoQkNBQklBSXRBQU1pQWlBQktBSUVhaUlGTmdJRUlBQWdCQ0FDUVFKMFFhQWRhaWdDQUNBQktBSUFRUUFnQld0MmNXbzJBZ0FMQ0FBZ0FFR0lmMHNMR2dBZ0FBUkFJQUVFUUNBQ0lBQWdBUkVDQUE4TElBQVFCZ3NMcGdnQ0RYOEJmaU1BUVJCcklna2tBQ0FKUVFBMkFnd2dDVUVBTmdJSUFuOENRQ0FEUWVnSmFpQURJQWxCQ0dvZ0NVRU1haUFCSUFJZ0EwR0FBV29RQ3lJUFFZaC9TdzBBUVZRZ0NTZ0NEQ0lFSUFBb0FnQWlBVUgvQVhGQkFXcExEUUVhSUFCQkJHb2hDeUFBSUFGQi80R0FlSEVnQkVFUWRFR0FnUHdIY1hJMkFnQkJmeUFFSUFSQkFFZ2JRUUZxSVFCQkFDRUJJQWtvQWdnaEJVRUFJUUlEUUNBQUlBSkdCRUFnQlVFRGF5RUJRUUFoQUFOQUFrQkJBQ0VDSUFBZ0FVNEVRQU5BSUFBZ0JVNE5BaUFESUFBZ0EycEI2QWxxTFFBQVFRSjBha0ZBYXlJQklBRW9BZ0FpQVVFQmFqWUNBQ0FCSUFOcUlBQTZBT2dISUFCQkFXb2hBQXdBQ3dBRkEwQWdBa0VFUmtVRVFDQURJQU1nQUNBQ2FpSUhha0hvQ1dvdEFBQkJBblJxUVVCcklnZ2dDQ2dDQUNJSVFRRnFOZ0lBSUFNZ0NHb2dCem9BNkFjZ0FrRUJhaUVDREFFTEN5QUFRUVJxSVFBTUFnc0FDd3NnQkVFQmFpRU9JQU1vQWdBaEIwRUFJUUJCQVNFSUEwQWdDQ0FPUmcwRElBNGdDR3NoQkNBRElBaEJBblJxS0FJQUlRVUNRQUpBQWtBQ1FBSkFBa0JCQVNBSWRFRUJkU0lOUVFGckRnZ0FBUVFDQkFRRUF3UUxRUUFoQWlBRlFRQWdCVUVBU2hzaEJpQUFJUUVEUUNBQ0lBWkdEUVVnQXlBQ0lBZHFhaTBBNkFjaENpQUxJQUZCQVhScUlnd2dCRG9BQVNBTUlBbzZBQUFnQWtFQmFpRUNJQUZCQVdvaEFRd0FDd0FMUVFBaEFpQUZRUUFnQlVFQVNoc2hDaUFBSVFFRFFDQUNJQXBHRFFRZ0N5QUJRUUYwYWlJR0lBTWdBaUFIYW1vdEFPZ0hJZ3c2QUFJZ0JpQUVPZ0FCSUFZZ0REb0FBQ0FHSUFRNkFBTWdBa0VCYWlFQ0lBRkJBbW9oQVF3QUN3QUxRUUFoQWlBRlFRQWdCVUVBU2hzaEJpQUVRUWgwUVlEK0EzRWhCQ0FBSVFFRFFDQUNJQVpHRFFNZ0N5QUJRUUYwYWlBRUlBTWdBaUFIYW1vdEFPZ0hjcTFDZ1lDRWdKQ0F3QUIrTndBQUlBSkJBV29oQWlBQlFRUnFJUUVNQUFzQUMwRUFJUUlnQlVFQUlBVkJBRW9iSVFZZ0JFRUlkRUdBL2dOeElRUWdBQ0VCQTBBZ0FpQUdSZzBDSUFzZ0FVRUJkR29pQ2lBRUlBTWdBaUFIYW1vdEFPZ0hjcTFDZ1lDRWdKQ0F3QUIrSWhFM0FBZ2dDaUFSTndBQUlBSkJBV29oQWlBQlFRaHFJUUVNQUFzQUMwRUFJUUVnQlVFQUlBVkJBRW9iSVFvZ0JFRUlkRUdBL2dOeElRd2dBQ0VFQTBBZ0FTQUtSZzBCSUFzZ0JFRUJkR29oRUNBTUlBTWdBU0FIYW1vdEFPZ0hjcTFDZ1lDRWdKQ0F3QUIrSVJGQkFDRUNBMEFnQWlBTlRrVUVRQ0FRSUFKQkFYUnFJZ1lnRVRjQUdDQUdJQkUzQUJBZ0JpQVJOd0FJSUFZZ0VUY0FBQ0FDUVJCcUlRSU1BUXNMSUFGQkFXb2hBU0FFSUExcUlRUU1BQXNBQ3lBSVFRRnFJUWdnQlNBSGFpRUhJQVVnRFd3Z0FHb2hBQXdBQ3dBRklBTWdBa0VDZEdvaUIwRkFheUFCTmdJQUlBSkJBV29oQWlBSEtBSUFJQUZxSVFFTUFRc0FDd0FMSUE4TElBbEJFR29rQUF2eUFnRUdmeU1BUVNCcklnVWtBQ0FFS0FJQUlRWWdCVUVNYWlBQ0lBTVFEU0lEUVloL1RRUkFJQVJCQkdvaEFpQUFJQUZxSWdsQkEyc2hCRUVBSUFaQkVIWnJRUjl4SVFNRFFDQUZRUXhxRUE4Z0FDQUVUM0pGQkVBZ0FpQUZLQUlNSWdZZ0JTZ0NFQ0lIZENBRGRrRUJkR29pQ0MwQUFTRUtJQUFnQ0MwQUFEb0FBQ0FDSUFZZ0J5QUthaUlHZENBRGRrRUJkR29pQnkwQUFDRUlJQVVnQmlBSExRQUJhallDRUNBQUlBZzZBQUVnQUVFQ2FpRUFEQUVMQ3dOQUlBVkJER29RRHlFSElBVW9BZ3doQmlBRktBSVFJUVFnQUNBSlR5QUhja1VFUUNBQ0lBWWdCSFFnQTNaQkFYUnFJZ1l0QUFBaEJ5QUZJQVFnQmkwQUFXbzJBaEFnQUNBSE9nQUFJQUJCQVdvaEFBd0JDd3NEUUNBQUlBbFBSUVJBSUFJZ0JpQUVkQ0FEZGtFQmRHb2lCeTBBQVNFSUlBQWdCeTBBQURvQUFDQUFRUUZxSVFBZ0JDQUlhaUVFREFFTEMwRnNRV3dnQVNBRktBSVVJQVVvQWhoSEd5QUVRU0JIR3lFREN5QUZRU0JxSkFBZ0F3dlBGQUVqZnlNQVFkQUFheUlGSkFCQmJDRUpBa0FnQTBFS1NRMEFBa0FnQXlBQ0x3QUVJZ2NnQWk4QUFDSUlJQUl2QUFJaURXcHFRUVpxSWd4SkRRQWdCQzhCQWlFR0lBVkJQR29nQWtFR2FpSUNJQWdRRFNJSlFZaC9TdzBCSUFWQktHb2dBaUFJYWlJQ0lBMFFEU0lKUVloL1N3MEJJQVZCRkdvZ0FpQU5haUlDSUFjUURTSUpRWWgvU3cwQklBVWdBaUFIYWlBRElBeHJFQTBpQ1VHSWYwc05BU0FFUVFScUlRb2dBQ0FCYWlJZlFRTnJJU0JCQUNBR2EwRWZjU0VMSUFVb0FnZ2hFU0FGS0FJY0lSSWdCU2dDTUNFVElBVW9Ba1FoRkNBRktBSUVJUWtnQlNnQ0dDRU5JQVVvQWl3aERDQUZLQUpBSVFZZ0JTZ0NFQ0VoSUFVb0FpUWhJaUFGS0FJNElTTWdCU2dDVENFa0lBVW9BZ0FoRlNBRktBSVVJUllnQlNnQ0tDRVhJQVVvQWp3aEdFRUJJUThnQUNBQlFRTnFRUUoySWdScUlnTWdCR29pQWlBRWFpSVpJUVFnQWlFSUlBTWhCd05BSUE5QkFYRkZJQVFnSUU5eVJRUkFJQUFnQ2lBWUlBWjBJQXQyUVFKMGFpSU9Md0VBT3dBQUlBNHRBQUloR2lBT0xRQURJUkFnQnlBS0lCY2dESFFnQzNaQkFuUnFJZzR2QVFBN0FBQWdEaTBBQWlFYklBNHRBQU1oRHlBSUlBb2dGaUFOZENBTGRrRUNkR29pRGk4QkFEc0FBQ0FPTFFBQ0lSd2dEaTBBQXlFZElBUWdDaUFWSUFsMElBdDJRUUowYWlJT0x3RUFPd0FBSUE0dEFBSWhIaUFPTFFBRElRNGdBQ0FRYWlJbElBb2dHQ0FHSUJwcUlnWjBJQXQyUVFKMGFpSVFMd0VBT3dBQUlCQXRBQUlnRUMwQUF5RW1JQWNnRDJvaUp5QUtJQmNnRENBYmFpSWFkQ0FMZGtFQ2RHb2lCeThCQURzQUFDQUhMUUFDSVF3Z0J5MEFBeUVRSUFnZ0hXb2lHeUFLSUJZZ0RTQWNhaUlQZENBTGRrRUNkR29pQ0M4QkFEc0FBQ0FJTFFBQ0lRMGdDQzBBQXlFY0lBUWdEbW9pSFNBS0lCVWdDU0FlYWlJT2RDQUxka0VDZEdvaUNTOEJBRHNBQUNBR2FpRUFRUU1oQndKL0lCUWdKRWtFUUNBQUlRWkJBd3dCQ3lBQVFRZHhJUVlnRkNBQVFRTjJheUlVS0FBQUlSaEJBQXNnQ1MwQUF5RWVJQWt0QUFJaENDQU1JQnBxSVFBZ0V5QWpTUVIvSUFBRklCTWdBRUVEZG1zaUV5Z0FBQ0VYUVFBaEJ5QUFRUWR4Q3lFTUlBMGdEMm9oQUNBSGNpRUpRUU1oRHdKL0lCSWdJa2tFUUNBQUlRMUJBd3dCQ3lBQVFRZHhJUTBnRWlBQVFRTjJheUlTS0FBQUlSWkJBQXNnQ0NBT2FpRUFJQWx5SUJFZ0lVa0VmeUFBQlNBUklBQkJBM1pySWhFb0FBQWhGVUVBSVE4Z0FFRUhjUXNoQ1NBbElDWnFJUUFnRUNBbmFpRUhJQnNnSEdvaENDQWRJQjVxSVFRZ0QzSkZJUThNQVFzTElBVWdERFlDTENBRklBWTJBa0FnQlNBTk5nSVlJQVVnQ1RZQ0JDQUZJQlEyQWtRZ0JTQVROZ0l3SUFVZ0VqWUNIQ0FGSUJFMkFnZ2dCU0FZTmdJOElBVWdGellDS0NBRklCWTJBaFFnQlNBVk5nSUFJQUlnQjBrZ0FDQURTM0lOQUVGc0lRa2dDQ0FaU3cwQklBTkJBMnNoQ1FOQUlBVkJQR29RRDBVZ0FDQUpTWEVFUUNBQUlBb2dCU2dDUENJTklBVW9Ba0FpREhRZ0MzWkJBblJxSWc0dkFRQTdBQUFnQUNBT0xRQURhaUlHSUFvZ0RTQU1JQTR0QUFKcUlnQjBJQXQyUVFKMGFpSU1Md0VBT3dBQUlBVWdBQ0FNTFFBQ2FqWUNRQ0FHSUF3dEFBTnFJUUFNQVFVZ0EwRUNheUVNQTBBZ0JVRThhaEFQSVFZZ0JTZ0NQQ0VOSUFVb0FrQWhDU0FBSUF4TElBWnlSUVJBSUFBZ0NpQU5JQWwwSUF0MlFRSjBhaUlHTHdFQU93QUFJQVVnQ1NBR0xRQUNhallDUUNBQUlBWXRBQU5xSVFBTUFRc0xBMEFnQUNBTVMwVUVRQ0FBSUFvZ0RTQUpkQ0FMZGtFQ2RHb2lCaThCQURzQUFDQUFJQVl0QUFOcUlRQWdDU0FHTFFBQ2FpRUpEQUVMQ3dKQUlBQWdBMDhOQUNBQUlBb2dEU0FKZENBTGRpSUFRUUowYWlJRExRQUFPZ0FBSUFNdEFBTkJBVVlFUUNBSklBTXRBQUpxSVFrTUFRc2dDVUVmU3cwQVFTQWdDU0FLSUFCQkFuUnFMUUFDYWlJQUlBQkJJRThiSVFrTElBSkJBMnNoREFOQUlBVkJLR29RRDBVZ0J5QU1TWEVFUUNBSElBb2dCU2dDS0NJR0lBVW9BaXdpQUhRZ0MzWkJBblJxSWcwdkFRQTdBQUFnQnlBTkxRQURhaUlESUFvZ0JpQUFJQTB0QUFKcUlnQjBJQXQyUVFKMGFpSUdMd0VBT3dBQUlBVWdBQ0FHTFFBQ2FqWUNMQ0FESUFZdEFBTnFJUWNNQVFVZ0FrRUNheUVHQTBBZ0JVRW9haEFQSVFNZ0JTZ0NLQ0VNSUFVb0Fpd2hBQ0FHSUFkSklBTnlSUVJBSUFjZ0NpQU1JQUIwSUF0MlFRSjBhaUlETHdFQU93QUFJQVVnQUNBRExRQUNhallDTENBSElBTXRBQU5xSVFjTUFRc0xBMEFnQmlBSFNVVUVRQ0FISUFvZ0RDQUFkQ0FMZGtFQ2RHb2lBeThCQURzQUFDQUhJQU10QUFOcUlRY2dBQ0FETFFBQ2FpRUFEQUVMQ3dKQUlBSWdCMDBOQUNBSElBb2dEQ0FBZENBTGRpSUNRUUowYWlJRExRQUFPZ0FBSUFNdEFBTkJBVVlFUUNBQUlBTXRBQUpxSVFBTUFRc2dBRUVmU3cwQVFTQWdBQ0FLSUFKQkFuUnFMUUFDYWlJQUlBQkJJRThiSVFBTElCbEJBMnNoREFOQUlBVkJGR29RRDBVZ0NDQU1TWEVFUUNBSUlBb2dCU2dDRkNJR0lBVW9BaGdpQW5RZ0MzWkJBblJxSWcwdkFRQTdBQUFnQ0NBTkxRQURhaUlESUFvZ0JpQUNJQTB0QUFKcUlnSjBJQXQyUVFKMGFpSUdMd0VBT3dBQUlBVWdBaUFHTFFBQ2FqWUNHQ0FESUFZdEFBTnFJUWdNQVFVZ0dVRUNheUVEQTBBZ0JVRVVhaEFQSVFJZ0JTZ0NGQ0VHSUFVb0FoZ2hCeUFESUFoSklBSnlSUVJBSUFnZ0NpQUdJQWQwSUF0MlFRSjBhaUlDTHdFQU93QUFJQVVnQnlBQ0xRQUNhallDR0NBSUlBSXRBQU5xSVFnTUFRc0xBMEFnQXlBSVNVVUVRQ0FJSUFvZ0JpQUhkQ0FMZGtFQ2RHb2lBaThCQURzQUFDQUlJQUl0QUFOcUlRZ2dCeUFDTFFBQ2FpRUhEQUVMQ3dKQUlBZ2dHVThOQUNBSUlBb2dCaUFIZENBTGRpSUNRUUowYWlJRExRQUFPZ0FBSUFNdEFBTkJBVVlFUUNBSElBTXRBQUpxSVFjTUFRc2dCMEVmU3cwQVFTQWdCeUFLSUFKQkFuUnFMUUFDYWlJQ0lBSkJJRThiSVFjTEEwQWdCUkFQUlNBRUlDQkpjUVJBSUFRZ0NpQUZLQUlBSWdZZ0JTZ0NCQ0lDZENBTGRrRUNkR29pREM4QkFEc0FBQ0FFSUF3dEFBTnFJZ01nQ2lBR0lBSWdEQzBBQW1vaUFuUWdDM1pCQW5ScUlnUXZBUUE3QUFBZ0JTQUNJQVF0QUFKcU5nSUVJQU1nQkMwQUEyb2hCQXdCQlNBZlFRSnJJUU1EUUNBRkVBOGhBaUFGS0FJQUlRWWdCU2dDQkNFSUlBTWdCRWtnQW5KRkJFQWdCQ0FLSUFZZ0NIUWdDM1pCQW5ScUlnSXZBUUE3QUFBZ0JTQUlJQUl0QUFKcU5nSUVJQVFnQWkwQUEyb2hCQXdCQ3dzRFFDQURJQVJKUlFSQUlBUWdDaUFHSUFoMElBdDJRUUowYWlJQ0x3RUFPd0FBSUFRZ0FpMEFBMm9oQkNBSUlBSXRBQUpxSVFnTUFRc0xBa0FnQkNBZlR3MEFJQVFnQ2lBR0lBaDBJQXQySWdKQkFuUnFJZ010QUFBNkFBQWdBeTBBQTBFQlJnUkFJQWdnQXkwQUFtb2hDQXdCQ3lBSVFSOUxEUUJCSUNBSUlBb2dBa0VDZEdvdEFBSnFJZ0lnQWtFZ1R4c2hDQXRCYkVGc1FXeEJiRUZzUVd4QmJFRnNJQUVnQ0VFZ1J4c2dCU2dDQ0NBRktBSU1SeHNnQjBFZ1J4c2dCU2dDSENBRktBSWdSeHNnQUVFZ1J4c2dCU2dDTUNBRktBSTBSeHNnQ1VFZ1J4c2dCU2dDUkNBRktBSklSeHNoQ1F3SkN3QUxBQXNBQ3dBTEFBc0FDd0FMQUF0QmJDRUpDeUFGUWRBQWFpUUFJQWtMN0JBQkhuOGpBRUhRQUdzaUJTUUFRV3doQ1FKQUlBTkJDa2tOQUFKQUlBTWdBaThBQkNJR0lBSXZBQUFpQnlBQ0x3QUNJZ2hxYWtFR2FpSU9TUTBBSUFRdkFRSWhEeUFGUVR4cUlBSkJCbW9pQWlBSEVBMGlDVUdJZjBzTkFTQUZRU2hxSUFJZ0Iyb2lBaUFJRUEwaUNVR0lmMHNOQVNBRlFSUnFJQUlnQ0dvaUFpQUdFQTBpQ1VHSWYwc05BU0FGSUFJZ0Jtb2dBeUFPYXhBTklnbEJpSDlMRFFFZ0JFRUVhaUVLSUFBZ0FXb2lIRUVEYXlFZFFRQWdEMnRCSDNFaEN5QUZLQUlJSVJFZ0JTZ0NIQ0VTSUFVb0FqQWhFeUFGS0FKRUlSUWdCU2dDQkNFSklBVW9BaGdoQmlBRktBSXNJUWNnQlNnQ1FDRUlJQVVvQWhBaEhpQUZLQUlrSVI4Z0JTZ0NPQ0VnSUFVb0Frd2hJU0FGS0FJQUlSVWdCU2dDRkNFV0lBVW9BaWdoRnlBRktBSThJUmhCQVNFTklBQWdBVUVEYWtFQ2RpSUNhaUlPSUFKcUlnOGdBbW9pR1NFRUlBOGhBaUFPSVFNRFFDQU5SU0FFSUIxUGNrVUVRQ0FLSUJnZ0NIUWdDM1pCQVhScUlnd3RBQUVoRFNBQUlBd3RBQUE2QUFBZ0NpQVhJQWQwSUF0MlFRRjBhaUlNTFFBQklSQWdBeUFNTFFBQU9nQUFJQW9nRmlBR2RDQUxka0VCZEdvaURDMEFBU0VhSUFJZ0RDMEFBRG9BQUNBS0lCVWdDWFFnQzNaQkFYUnFJZ3d0QUFFaEd5QUVJQXd0QUFBNkFBQWdDaUFZSUFnZ0RXb2lDSFFnQzNaQkFYUnFJZ3d0QUFFaERTQUFJQXd0QUFBNkFBRWdDaUFYSUFjZ0VHb2lCM1FnQzNaQkFYUnFJZ3d0QUFFaEVDQURJQXd0QUFBNkFBRWdDaUFXSUFZZ0dtb2lESFFnQzNaQkFYUnFJZ1l0QUFFaEdpQUNJQVl0QUFBNkFBRWdDaUFWSUFrZ0cyb2lHM1FnQzNaQkFYUnFJZ2t0QUFFaElpQUVJQWt0QUFBNkFBRWdDQ0FOYWlFR1FRTWhDUUovSUJRZ0lVa0VRRUVESVEwZ0Jnd0JDeUFVSUFaQkEzWnJJaFFvQUFBaEdFRUFJUTBnQmtFSGNRc2hDQ0FISUJCcUlRWWdFeUFnU1FSL0lBWUZJQk1nQmtFRGRtc2lFeWdBQUNFWFFRQWhDU0FHUVFkeEN5RUhJQXdnR21vaERDQUpJQTF5SVJCQkF5RU5BbjhnRWlBZlNRUkFJQXdoQmtFRERBRUxJQXhCQjNFaEJpQVNJQXhCQTNackloSW9BQUFoRmtFQUN5QWJJQ0pxSVF3Z0VISWhFQ0FSSUI1SkJIOGdEQVVnRVNBTVFRTjJheUlSS0FBQUlSVkJBQ0VOSUF4QkIzRUxJUWtnQkVFQ2FpRUVJQUpCQW1vaEFpQURRUUpxSVFNZ0FFRUNhaUVBSUEwZ0VISkZJUTBNQVFzTElBVWdCellDTENBRklBZzJBa0FnQlNBR05nSVlJQVVnQ1RZQ0JDQUZJQlEyQWtRZ0JTQVROZ0l3SUFVZ0VqWUNIQ0FGSUJFMkFnZ2dCU0FZTmdJOElBVWdGellDS0NBRklCWTJBaFFnQlNBVk5nSUFJQUFnRGtzZ0F5QVBTM0lOQUVGc0lRa2dBaUFaU3cwQklBNUJBMnNoQ1FOQUlBVkJQR29RRHlBQUlBbFBja1VFUUNBS0lBVW9BandpQmlBRktBSkFJZ2QwSUF0MlFRRjBhaUlJTFFBQklRd2dBQ0FJTFFBQU9nQUFJQW9nQmlBSElBeHFJZ1owSUF0MlFRRjBhaUlITFFBQUlRZ2dCU0FHSUFjdEFBRnFOZ0pBSUFBZ0NEb0FBU0FBUVFKcUlRQU1BUXNMQTBBZ0JVRThhaEFQSVFjZ0JTZ0NQQ0VHSUFVb0FrQWhDU0FBSUE1UElBZHlSUVJBSUFvZ0JpQUpkQ0FMZGtFQmRHb2lCaTBBQUNFSElBVWdDU0FHTFFBQmFqWUNRQ0FBSUFjNkFBQWdBRUVCYWlFQURBRUxDd05BSUFBZ0RrOUZCRUFnQ2lBR0lBbDBJQXQyUVFGMGFpSUhMUUFCSUFBZ0J5MEFBRG9BQUNBQVFRRnFJUUFnQ1dvaENRd0JDd3NnRDBFRGF5RUFBMEFnQlVFb2FoQVBJQUFnQTAxeVJRUkFJQW9nQlNnQ0tDSUdJQVVvQWl3aUIzUWdDM1pCQVhScUlnZ3RBQUVoRGlBRElBZ3RBQUE2QUFBZ0NpQUdJQWNnRG1vaUJuUWdDM1pCQVhScUlnY3RBQUFoQ0NBRklBWWdCeTBBQVdvMkFpd2dBeUFJT2dBQklBTkJBbW9oQXd3QkN3c0RRQ0FGUVNocUVBOGhCeUFGS0FJb0lRWWdCU2dDTENFQUlBTWdEMDhnQjNKRkJFQWdDaUFHSUFCMElBdDJRUUYwYWlJR0xRQUFJUWNnQlNBQUlBWXRBQUZxTmdJc0lBTWdCem9BQUNBRFFRRnFJUU1NQVFzTEEwQWdBeUFQVDBVRVFDQUtJQVlnQUhRZ0MzWkJBWFJxSWdjdEFBRWhDQ0FESUFjdEFBQTZBQUFnQTBFQmFpRURJQUFnQ0dvaEFBd0JDd3NnR1VFRGF5RURBMEFnQlVFVWFoQVBJQUlnQTA5eVJRUkFJQW9nQlNnQ0ZDSUdJQVVvQWhnaUIzUWdDM1pCQVhScUlnZ3RBQUVoRGlBQ0lBZ3RBQUE2QUFBZ0NpQUdJQWNnRG1vaUJuUWdDM1pCQVhScUlnY3RBQUFoQ0NBRklBWWdCeTBBQVdvMkFoZ2dBaUFJT2dBQklBSkJBbW9oQWd3QkN3c0RRQ0FGUVJScUVBOGhCeUFGS0FJVUlRWWdCU2dDR0NFRElBSWdHVThnQjNKRkJFQWdDaUFHSUFOMElBdDJRUUYwYWlJR0xRQUFJUWNnQlNBRElBWXRBQUZxTmdJWUlBSWdCem9BQUNBQ1FRRnFJUUlNQVFzTEEwQWdBaUFaVDBVRVFDQUtJQVlnQTNRZ0MzWkJBWFJxSWdjdEFBRWhDQ0FDSUFjdEFBQTZBQUFnQWtFQmFpRUNJQU1nQ0dvaEF3d0JDd3NEUUNBRkVBOGdCQ0FkVDNKRkJFQWdDaUFGS0FJQUlnSWdCU2dDQkNJR2RDQUxka0VCZEdvaUJ5MEFBU0VJSUFRZ0J5MEFBRG9BQUNBS0lBSWdCaUFJYWlJQ2RDQUxka0VCZEdvaUJpMEFBQ0VISUFVZ0FpQUdMUUFCYWpZQ0JDQUVJQWM2QUFFZ0JFRUNhaUVFREFFTEN3TkFJQVVRRHlFSElBVW9BZ0FoQmlBRktBSUVJUUlnQkNBY1R5QUhja1VFUUNBS0lBWWdBblFnQzNaQkFYUnFJZ1l0QUFBaEJ5QUZJQUlnQmkwQUFXbzJBZ1FnQkNBSE9nQUFJQVJCQVdvaEJBd0JDd3NEUUNBRUlCeFBSUVJBSUFvZ0JpQUNkQ0FMZGtFQmRHb2lCeTBBQVNFSUlBUWdCeTBBQURvQUFDQUVRUUZxSVFRZ0FpQUlhaUVDREFFTEMwRnNRV3hCYkVGc1FXeEJiRUZzUVd3Z0FTQUNRU0JIR3lBRktBSUlJQVVvQWd4SEd5QURRU0JIR3lBRktBSWNJQVVvQWlCSEd5QUFRU0JIR3lBRktBSXdJQVVvQWpSSEd5QUpRU0JIR3lBRktBSkVJQVVvQWtoSEd5RUpEQUVMUVd3aENRc2dCVUhRQUdva0FDQUpDMWdCQTM4Q1FDQUFLQUtRNndFaUFVVU5BQ0FCS0FJQUlBRkJ0TlVCYWlnQ0FDSUNJQUZCdU5VQmFpZ0NBQ0lERUJNZ0FnUkFJQU1nQVNBQ0VRSUFEQUVMSUFFUUJnc2dBRUVBTmdLZzZ3RWdBRUlBTndPUTZ3RUw2UU1DQkg4Q2ZpQUFRUUJCS0JBRElRUWdBa0VCUVFVZ0F4c2lBRWtFUUNBQUR3c2dBVVVFUUVGL0R3dEJBU0VHQWtBQ1FDQURRUUZHRFFBZ0F5RUdJQUVvQUFBaUJVR282cjVwUmcwQVFYWWhBeUFGUVhCeFFkRFV0TUlCUncwQlFRZ2hBeUFDUVFoSkRRRWdBVFVBQkNFSUlBUkJBVFlDRkNBRUlBZzNBd0JCQUE4TElBRWdBaUFHRUJvaUF5QUNTdzBBSUFRZ0F6WUNHRUZ5SVFNZ0FDQUJhaUlGUVFGckxRQUFJZ0pCQ0hFTkFDQUNRU0J4SWdaRkJFQkJjQ0VESUFVdEFBQWlCVUduQVVzTkFTQUZRUWR4clVJQklBVkJBM1pCQ21xdGhpSUlRZ09JZmlBSWZDRUpJQUJCQVdvaEFBc2dBa0VHZGlFRklBSkJBblpCQUNFREFrQUNRQUpBQWtBZ0FrRURjVUVCYXc0REFBRUNBd3NnQUNBQmFpMEFBQ0VESUFCQkFXb2hBQXdDQ3lBQUlBRnFMd0FBSVFNZ0FFRUNhaUVBREFFTElBQWdBV29vQUFBaEF5QUFRUVJxSVFBTFFRRnhJUUlDZmdKQUFrQUNRQUpBSUFWQkFXc09Bd0VDQXdBTFFuOGdCa1VOQXhvZ0FDQUJhakVBQUF3REN5QUFJQUZxTXdBQVFvQUNmQXdDQ3lBQUlBRnFOUUFBREFFTElBQWdBV29wQUFBTElRZ2dCQ0FDTmdJZ0lBUWdBellDSENBRUlBZzNBd0JCQUNFRElBUkJBRFlDRkNBRUlBZ2dDU0FHR3lJSU53TUlJQVJDZ0lBSUlBZ2dDRUtBZ0FoYUd6NENFQXNnQXd0ZkFRRi9RYmgvSVFNZ0FVRUJRUVVnQWhzaUFrOEVmeUFBSUFKcVFRRnJMUUFBSWdCQkEzRkJBblJCb0I1cUtBSUFJQUpxSUFCQkJIWkJESEZCc0I1cUtBSUFhaUFBUVNCeElnRkZhaUFCUVFWMklBQkJ3QUJKY1dvRlFiaC9Dd3NNQUNBQUlBRWdBa0VBRUJrTGx3TUNCWDhDZmlNQVFVQnFJZ1FrQUFKQUEwQWdBVUVGVHdSQUFrQWdBQ2dBQUVGd2NVSFExTFRDQVVZRVFFSitJUWNnQVVFSVNRMEVJQUFvQUFRaUFrRjNTdzBFSUFKQkNHb2lBeUFCU3cwRUlBSkJnWDlKRFFFTUJBc2dCRUVZYWlBQUlBRVFHeUVDUW40Z0JDa0RHRUlBSUFRb0FpeEJBVWNiSUFJYklnZENmVllOQXlBSElBaDhJZ2dnQjFSQ2ZpRUhEUU1DUUFKQUlBRkJDRWtOQUNBQUtBQUFRWEJ4UWREVXRNSUJSdzBBSUFBb0FBUWlBa0YzU3cwRlFiaC9JQUpCQ0dvaUFpQUJJQUpKR3lFRERBRUxJQVJCR0dvZ0FDQUJFQnNpQWtHSWYwc0VRQ0FDSVFNTUFRdEJ1SDhoQXlBQ0RRQWdBU0FFS0FJd0lnSnJJUVVnQUNBQ2FpRUdBMEFnQmlBRklBUkJER29RSFNJRFFZaC9TdzBCSUFOQkEyb2lBaUFGU3dSQVFiaC9JUU1NQWdzZ0JTQUNheUVGSUFJZ0Jtb2hCaUFFS0FJUVJRMEFDeUFFS0FJNEJIOUJ1SDhoQXlBRlFRUkpEUUVnQmtFRWFnVWdCZ3NnQUdzaEF3c2dBMEdJZjBzTkF3c2dBU0FEYXlFQklBQWdBMm9oQUF3QkN3dENmaUFJSUFFYklRY0xJQVJCUUdza0FDQUhDMlFCQVg5QnVIOGhBd0pBSUFGQkEwa05BQ0FBTFFBQ0lRRWdBaUFBTHdBQUlnQkJBWEUyQWdRZ0FpQUFRUUYyUVFOeElnTTJBZ0FnQWlBQUlBRkJFSFJ5UVFOMklnQTJBZ2dDUUFKQUlBTkJBV3NPQXdJQkFBRUxRV3dQQ3lBQUlRTUxJQU1MUkFFQ2Z5QUJJQUlvQWdRaUF5QUJLQUlFYWlJRU5nSUVJQUFnQTBFQ2RFR2dIV29vQWdBZ0FTZ0NBRUVBSUFScmRuRTJBZ0FnQVJBUEdpQUFJQUpCQ0dvMkFnUUx6Z0VCQm45QnVuOGhDZ0pBSUFJb0FnUWlDQ0FDS0FJQUlnbHFJZzBnQVNBQWEwc05BRUZzSVFvZ0NTQUVJQU1vQWdBaUMydExEUUFnQUNBSmFpSUVJQUlvQWdnaURHc2hBaUFBSUFGQklHc2lBQ0FMSUFsQkFCQWdJQU1nQ1NBTGFqWUNBQUpBQWtBZ0JDQUZheUFNVHdSQUlBSWhCUXdCQ3lBTUlBUWdCbXRMRFFJZ0J5QUhJQUlnQldzaUFtb2lBU0FJYWs4RVFDQUVJQUVnQ0JBS0dnd0NDeUFDSUFocUlRZ2dCQ0FCUVFBZ0Ftc1FDaUFDYXlFRUN5QUVJQUFnQlNBSVFRRVFJQXNnRFNFS0N5QUtDOGNFQVFKL0lBQWdBMm9oQmdKQUlBTkJCMHdFUUFOQUlBQWdCazhOQWlBQUlBSXRBQUE2QUFBZ0FFRUJhaUVBSUFKQkFXb2hBZ3dBQ3dBTElBUkJBVVlFUUFKQUlBQWdBbXNpQlVFSFRRUkFJQUFnQWkwQUFEb0FBQ0FBSUFJdEFBRTZBQUVnQUNBQ0xRQUNPZ0FDSUFBZ0FpMEFBem9BQXlBQUlBSWdCVUVDZENJRlFjQWVhaWdDQUdvaUFpZ0FBRFlBQkNBQ0lBVkI0QjVxS0FJQWF5RUNEQUVMSUFBZ0Fpa0FBRGNBQUFzZ0FrRUlhaUVDSUFCQkNHb2hBQXNnQVNBR1R3UkFJQUFnQTJvaEFTQUVRUUZISUFBZ0FtdEJEMHB5UlFSQUEwQWdBQ0FDS1FBQU53QUFJQUpCQ0dvaEFpQUFRUWhxSWdBZ0FVa05BQXdEQ3dBTElBQWdBaWtBQURjQUFDQUFJQUlwQUFnM0FBZ2dBMEVSU1EwQklBQkJFR29oQUFOQUlBQWdBaWtBRURjQUFDQUFJQUlwQUJnM0FBZ2dBQ0FDS1FBZ053QVFJQUFnQWlrQUtEY0FHQ0FDUVNCcUlRSWdBRUVnYWlJQUlBRkpEUUFMREFFTEFrQWdBQ0FCU3dSQUlBQWhBUXdCQ3lBQklBQnJJUVVDUUNBRVFRRkhJQUFnQW10QkQwcHlSUVJBSUFJaEF3TkFJQUFnQXlrQUFEY0FBQ0FEUVFocUlRTWdBRUVJYWlJQUlBRkpEUUFMREFFTElBQWdBaWtBQURjQUFDQUFJQUlwQUFnM0FBZ2dCVUVSU0EwQUlBQkJFR29oQUNBQ0lRTURRQ0FBSUFNcEFCQTNBQUFnQUNBREtRQVlOd0FJSUFBZ0F5a0FJRGNBRUNBQUlBTXBBQ2czQUJnZ0EwRWdhaUVESUFCQklHb2lBQ0FCU1EwQUN3c2dBaUFGYWlFQ0N3TkFJQUVnQms4TkFTQUJJQUl0QUFBNkFBQWdBVUVCYWlFQklBSkJBV29oQWd3QUN3QUxDNjRIQWdWL0FYNGpBRUdBQVdzaUVTUUFJQkVnQXpZQ2ZFRi9JUThDUUFKQUFrQUNRQUpBSUFJT0JBRUFBd0lFQ3lBR1JRUkFRYmgvSVE4TUJBdEJiQ0VQSUFVdEFBQWlBaUFEU3cwRElBZ2dBa0VDZENJQ2FpZ0NBQ0VESUFJZ0Iyb29BZ0FoQWlBQVFRQTZBQXNnQUVJQU53SUFJQUFnQWpZQ0RDQUFJQU02QUFvZ0FFRUFPd0VJSUFFZ0FEWUNBRUVCSVE4TUF3c2dBU0FKTmdJQVFRQWhEd3dDQ3lBS1JRUkFRV3doRHd3Q0MwRUFJUThnQzBVZ0RFRVpTSElOQVVFSUlBUjBRUWhxSVFCQkFDRURBMEFnQUNBRFRRMENJQU5CUUdzaEF3d0FDd0FMUVd3aER5QVJJQkZCL0FCcUlCRkIrQUJxSUFVZ0JoQU1JZ05CaUg5TERRQWdFU2dDZUNJQ0lBUkxEUUFnRVNnQ2ZFRUJhaUVKSUFCQkNHb2hDMEdBZ0FJZ0FuUkJFSFVoQlVFQklSQkJBU0FDZENJUFFRRnJJZ29oRWdOQUlBa2dEa2NFUUFKQUlCRWdEa0VCZENJRWFpOEJBQ0lNUWYvL0EwWUVRQ0FMSUJKQkEzUnFJQTQyQWdRZ0VrRUJheUVTUVFFaERBd0JDeUFRUVFBZ0JTQU13VW9iSVJBTElBUWdEV29nRERzQkFDQU9RUUZxSVE0TUFRc0xJQUFnQWpZQ0JDQUFJQkEyQWdBQ1FDQUtJQkpHQkVBZ0RVSHFBR29oQmtFQUlSQkJBQ0VNQTBBZ0NTQVFSZ1JBSUE5QkEzWWdEMEVCZG1wQkEyb2lCVUVCZENFRVFRQWhERUVBSVJJRFFFRUFJUTRnRHlBU1RRMEVBMEFnRGtFQ1J3UkFJQXNnQlNBT2JDQU1haUFLY1VFRGRHb2dCaUFPSUJKcWFpMEFBRFlDQkNBT1FRRnFJUTRNQVFzTElCSkJBbW9oRWlBRUlBeHFJQXB4SVF3TUFBc0FCU0FSSUJCQkFYUnFMZ0VBSVFVZ0JpQU1haUlFSUJNM0FBQkJDQ0VPQTBBZ0JTQU9TZ1JBSUFRZ0Rtb2dFemNBQUNBT1FRaHFJUTRNQVFzTElCTkNnWUtFaUpDZ3dJQUJmQ0VUSUJCQkFXb2hFQ0FGSUF4cUlRd01BUXNBQ3dBTElBOUJBM1lnRDBFQmRtcEJBMm9oQlVFQUlSQkJBQ0VPQTBBZ0NTQVFSZzBCUVFBaERDQVJJQkJCQVhScUxnRUFJZ1JCQUNBRVFRQktHeUVFQTBBZ0JDQU1Sd1JBSUFzZ0RrRURkR29nRURZQ0JBTkFJQVVnRG1vZ0NuRWlEaUFTU3cwQUN5QU1RUUZxSVF3TUFRc0xJQkJCQVdvaEVBd0FDd0FMSUFKQkFXb2hCVUVBSVF3RFFDQU1JQTlIQkVBZ0RTQUxJQXhCQTNScUlna29BZ1FpQkVFQmRHb2lBaUFDTHdFQUlnWkJBV283QVFBZ0NTQUZJQVpuUVdCemFpSUNPZ0FESUFrZ0JpQUNkQ0FQYXpzQkFDQUpJQWdnQkVFQ2RDSUNhaWdDQURvQUFpQUpJQUlnQjJvb0FnQTJBZ1FnREVFQmFpRU1EQUVMQ3lBQklBQTJBZ0FnQXlFUEN5QVJRWUFCYWlRQUlBOEw3Vm9DTzM4R2ZpTUFRZUFCYXlJRUpBQUNRRUd3N0FrUUJTSUZSUVJBUVVBaEJ3d0JDeUFGUWdBM0F2VHFBU0FGUVFBMkFzVHJBU0FGUVFBMkFyVHJBU0FGUWdBM0FwenJBU0FGUVFBMkFyanBBU0FGUVFBMkFxenNDU0FGUWdBM0F0VHJBU0FGUWdBM0FxenJBU0FGUWdBM0E0anJBU0FGUWdBM0F1VHFBU0FGUWdBM0F1VHJBU0FGUVlHQWdNQUFOZ0s4NndFZ0JVSUFOd0trNndFZ0JVSDg2Z0ZxUVFBMkFnQWdCVUdRNndGcVFnQTNBd0FnQlJBWUlBVkJyTlVCYWlFVUlBVkIrT3NCYWlFY0lBVkJzT29CYWlFaUlBVkJvREJxSVNvZ0JVR1lJR29oS3lBRlFhalFBR29oSGlBRlFSQnFJU3dnQlVFSWFpRW9JQVZCQkdvaExTQUZRY0RwQVdvaEtTQUZRWWpyQVdvZ0JFR1VBV29oTHlBRVFZd0JhaUV3SUFSQmhBRnFJVEVnQkVIY0FHb2hNaUFFUWRRQWFpRXpJQVJCekFCcUlUUWdBQ0VkQWtBQ1FBSkFBa0FDUUFOQVFRRkJCU0FGS0FMazZnRWJJUVlDUUFOQUlBTWdCa2tOQVNBQ0tBQUFRWEJ4UWREVXRNSUJSZ1JBUWJoL0lRY2dBMEVJU1EwSUlBSW9BQVFpRGtGM1N3UkFRWEloQnd3SkN5QURJQTVCQ0dvaUNVa05DQ0FPUVlCL1N3UkFJQWtoQnd3SkN5QURJQWxySVFNZ0FpQUphaUVDREFFTEN5QUZRZ0EzQXF6cEFTQUZRZ0EzQStqcEFTQUZRUUEyQXBqckFTQUZRZ0EzQTREcUFTQUZRZ00zQS9qcEFTQUZRYlRwQVdwQ0FEY0NBQ0FGUWZEcEFXcENBRGNEQUNBRlFhalFBR29pQ1VHTWdJRGdBRFlDQUNBRlFhelFBV3BCNEJJcEFnQTNBZ0FnQlVHMDBBRnFRZWdTS0FJQU5nSUFJQVVnQlVFUWFqWUNBQ0FGSUFWQm9EQnFOZ0lFSUFVZ0JVR1lJR28yQWdnZ0JTQUpOZ0lNSUFWQkFVRUZJQVVvQXVUcUFSczJBcnpwQVFKQUlBRkZEUUFnQlNnQ3JPa0JJZ2tnSFVZTkFDQUZJQWsyQXJqcEFTQUZJQjAyQXF6cEFTQUZLQUt3NlFFaERpQUZJQjAyQXJEcEFTQUZJQjBnRGlBSmEybzJBclRwQVF0QnVIOGhDU0FEUVFWQkNTQUZLQUxrNmdFaUJodEpEUVVnQWtFQlFRVWdCaHNnQmhBYUlnNUJpSDlMQkVBZ0RpRUpEQVVMSUFNZ0RrRURha2tOQlNBcElBSWdEaUFHRUJraUJrR0lmMHNFUUNBR0lRa01CUXNnQmcwRkFrQUNRQ0FGS0FLbzZ3RkJBVWNOQUNBRktBS2s2d0VpQ1VVTkFDQUZLQUtVNndGRkRRQWdDU2dDQkVFQmF5SUhJQVVvQXR6cEFTSUtyVUtIbGErdm1MYmVtNTUvZmtMSno5bXk4ZVc2NmllRlFoZUpRcy9XMDc3U3g2dlpRbjVDK2ZQZDhabjJtYXNXZkNJL1FpR0lJRCtGUXMvVzA3N1N4NnZaUW40aVAwSWRpQ0EvaFVMNTg5M3htZmFacXhaK0lqOUNJSWdnUDRXbmNTRUdJQWtvQWdBaEZRTkFRUUFoQ0FKQUlCVWdCa0VDZEdvb0FnQWlDVVVOQUNBSktBSUlRUWhKRFFBZ0NTZ0NCQ0lTS0FBQVFiZkl3dUYrUncwQUlCSW9BQVFoQ0FzZ0NDQUtSd1JBSUFZZ0IzRkJBV29oQmlBSURRRUxDeUFKUlEwQUlBVVFHQ0FGUVg4MkFxRHJBU0FGSUFrMkFwVHJBU0FGSUFVb0F0enBBU0lJTmdLWTZ3RU1BUXNnQlNnQzNPa0JJUWdMQWtBZ0NFVU5BQ0FGS0FLWTZ3RWdDRVlOQUVGZ0lRa01CZ3NDUUNBRktBTGc2UUVFUUNBRklBVW9BdWpxQVNJSlJUWUM3T29CSUFrTkFTQUZRdm5xME5EbnlhSGs0UUEzQTZqcUFTQUZRZ0EzQTZEcUFTQUZRcy9XMDc3U3g2dlpRamNEbU9vQklBVkMxdXVDN3VyOWlmWGdBRGNEa09vQklBVkNBRGNEaU9vQklDSkJBRUVvRUFNYURBRUxJQVZCQURZQzdPb0JDeUFCSUIxcUlTVWdCU0FGS1FQbzZRRWdEcTE4TndQbzZRRWdBeUFPYXlFRElBSWdEbW9oQWlBZElRNERRQ0FDSUFNZ0JFRXNhaEFkSWhWQmlIOUxCRUFnRlNFSkRBWUxJQU5CQTJzaU5TQVZTUTBFSUFKQkEyb2hHMEZzSVFrQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQ0FFS0FJc0RnTUNBUUFWQ3lBVlFmLy9CMHNORXlBVlFRTkpEUklnQlNrRHlPa0JJVDhDUUFKQUlCc3RBQUFpQ1VFRGNTSWFRUUZyRGdNR0FRQUhDeUFGS0FLQTZnRU5BRUZpSVFrTUZRc2dGVUVGU1EwU0lCc29BQUFoQXdKL0FrQUNRQUpBSUFsQkFuWkJBM0VpQ1VFQ2F3NENBUUlBQ3lBSlFRQkhJUWNnQTBFRWRrSC9CM0VoQzBFRElRWWdBMEVPZGtIL0IzRU1BZ3RCQkNFR0lBTkJCSFpCLy84QWNTRUxRUUVoQnlBRFFSSjJEQUVMSUFOQkJIWkIvLzhQY1NJTFFZQ0FDRXNORTBFQklRZEJCU0VHSUFJdEFBZEJDblFnQTBFV2RuSUxJZ2dnQm1vaUNTQVZTdzBTQWtBZ0MwR0JCa2tOQUNBRktBS2M2d0ZGRFFCQkFDRURBMEFnQTBHRGdBRkxEUUVnQTBGQWF5RUREQUFMQUFzZ0JpQWJhaUVQSUJwQkEwY05CaUFGS0FJTUlnSXRBQUZCQ0hRaEF5QUhEUWNnQTBVTkNDQUVRZkFBYWlBUElBZ1FEU0lEUVloL1N3MEpJQUpCQkdvaEJpQUxJQnhxSWhKQkEyc2hDa0VBSUFJdkFRSnJRUjl4SVFjZ0hDRURBMEFnQkVId0FHb1FEMFVnQXlBS1NYRUVRQ0FESUFZZ0JDZ0NjQ0lJSUFRb0FuUWlEM1FnQjNaQkFuUnFJZ0l2QVFBN0FBQWdBeUFDTFFBRGFpSURJQVlnQ0NBUElBSXRBQUpxSWdoMElBZDJRUUowYWlJQ0x3RUFPd0FBSUFRZ0NDQUNMUUFDYWpZQ2RDQURJQUl0QUFOcUlRTU1BUVVnRWtFQ2F5RUlBMEFnQkVId0FHb1FEeUVQSUFRb0FuQWhDaUFFS0FKMElRSWdBeUFJU3lBUGNrVUVRQ0FESUFZZ0NpQUNkQ0FIZGtFQ2RHb2lDaThCQURzQUFDQUVJQUlnQ2kwQUFtbzJBblFnQXlBS0xRQURhaUVEREFFTEN3TkFJQU1nQ0UwRVFDQURJQVlnQ2lBQ2RDQUhka0VDZEdvaUR5OEJBRHNBQUNBRElBOHRBQU5xSVFNZ0FpQVBMUUFDYWlFQ0RBRUxDd0pBSUFNZ0VrOE5BQ0FESUFZZ0NpQUNkQ0FIZGtFQ2RHb2lBeTBBQURvQUFDQURMUUFEUVFGR0JFQWdBaUFETFFBQ2FpRUNEQUVMSUFKQkgwc05BRUVnSUFJZ0F5MEFBbW9pQWlBQ1FTQlBHeUVDQzBGc1FXd2dDeUFFS0FKNElBUW9BbnhIR3lBQ1FTQkhHeUVEREFzTEFBc0FDeUFFS0FJMElnSWdKU0FPYTBzTkNpQU9SUVJBUVFBaENTQUNEUUlNRGdzZ0RpQWJMUUFBSUFJUUF4b2dBaUVKREF3TElCVWdKU0FPYTBzTkNTQU9EUUZCQUNFSklCVkZEUXdMUWJaL0lRa01FUXNnRGlBYklCVVFBaG9nRlNFSkRBb0xJQndnR3dKL0FrQUNRQUpBSUFsQkFuWkJBM0ZCQVdzT0F3RUFBZ0FMSUFsQkEzWWhBMEVCREFJTElCc3ZBQUJCQkhZaEEwRUNEQUVMSUJWQkJFa05EaUFDTHdBRElBSXRBQVZCRUhSeUlnSkJqNENBQVVzTkRpQUNRUVIySVFOQkF3c2lBbW90QUFBZ0EwRWdhaEFESVFrZ0JTQUROZ0tBNndFZ0JTQUpOZ0x3NmdFZ0FrRUJhaUVKREFVTElCVUNmd0pBQWtBQ1FDQUpRUUoyUVFOeFFRRnJEZ01CQUFJQUN5QUpRUU4ySVFOQkFRd0NDeUFiTHdBQVFRUjJJUU5CQWd3QkN5QUNMd0FESUFJdEFBVkJFSFJ5UVFSMklRTkJBd3NpQWlBRGFpSUpRU0JxU1FSQUlBa2dGVXNORFNBY0lBSWdHMm9nQXhBQ0lRSWdCU0FETmdLQTZ3RWdCU0FDTmdMdzZnRWdBaUFEYWlJQ1FnQTNBQmdnQWtJQU53QVFJQUpDQURjQUNDQUNRZ0EzQUFBTUJRc2dCU0FETmdLQTZ3RWdCU0FDSUJ0cU5nTHc2Z0VNQkFzZ0IwVUVRQ0FlSUE4Z0NDQVVFQlFpQWtHSWYwc2dBaUFJVDNJTkRDQWNJQXNnQWlBUGFpQUlJQUpySUI0UUZTRUREQU1MSUF0RklBaEZjZzBMSUF0QkNIWWlBeUFJSUF0SkJIOGdDRUVFZENBTGJnVkJEd3RCR0d3aUFrR01DR29vQWdCc0lBSkJpQWhxS0FJQWFpSUdRUU4ySUFacUlBSkJnQWhxS0FJQUlBSkJoQWhxS0FJQUlBTnNha2tFUUNNQVFSQnJJaEFrQUNBZUtBSUFJUU1nRkVId0JHcEJBRUhzQUJBRElRWkJWQ0VDQWtBZ0EwSC9BWEVpREVFTVN3MEFBa0FnRkVIY0NXb2dCaUFRUVFocUlCQkJER29nRHlBSUlCUkIzQXRxSWhjUUN5SVNRWWgvU3cwQUlCQW9BZ3dpQmlBTVN3MEJJQlJCcUFWcUlRMGdGRUdrQldvaE5pQWVRUVJxSVJFZ0EwR0FnSUI0Y1NFM0lBWkJBV29pRXlFQ0lBWWhBd05BSUFJaUIwRUJheUVDSUFNaUNrRUJheUVESUJRZ0NrRUNkR29vQXZBRVJRMEFDMEVCSUFjZ0IwRUJUUnNoRmtFQUlRZEJBU0VDQTBBZ0FpQVdSd1JBSUJRZ0FrRUNkQ0lEYWlnQzhBUWhHQ0FESUExcUlBYzJBZ0FnQWtFQmFpRUNJQWNnR0dvaEJ3d0JDd3NnRFNBSE5nSUFRUUFoQWlBUUtBSUlJUU1EUUNBQ0lBTkhCRUFnRFNBQ0lCUnFRZHdKYWkwQUFDSVlRUUowYWlJWklCa29BZ0FpR1VFQmFqWUNBQ0FVSUJsQkFYUnFJaGtnR0RvQTNRVWdHU0FDT2dEY0JTQUNRUUZxSVFJTUFRc0xRUUFoQXlBTlFRQTJBZ0FnRENBR1FYOXphaUVHUVFFaEFnTkFJQUlnRmtjRVFDQVVJQUpCQW5ScUlnMGdBellDQUNBTktBTHdCQ0FDSUFacWRDQURhaUVESUFKQkFXb2hBZ3dCQ3dzZ0RDQVRJQXBySWdaclFRRnFJUW9nQmlFREEwQWdBeUFLU1FSQUlCUWdBMEUwYkdvaERVRUJJUUlEUUNBQ0lCWkhCRUFnRFNBQ1FRSjBJaGhxSUJRZ0dHb29BZ0FnQTNZMkFnQWdBa0VCYWlFQ0RBRUxDeUFEUVFGcUlRTU1BUXNMSUJjZ0ZFRTBFQUloT0NBVVFaQU1haUU1SUJNZ0RHc2hPaUFVUWR3RmFpRVhRUUFoQ2dOQUFrQUNRQ0FISUFwSEJFQkJBU0FNSUJNZ0Z5QUtRUUYwYWlJQ0xRQUJJZzFySWdOckloaDBJUmtnQWkwQUFDRVdJRGdnRFVFQ2RHb2lIeWdDQUNFQ0lBWWdHRTBFUUNBMlFRRWdBeUE2YWlJTklBMUJBVXdiSWlCQkFuUWlKR29vQWdBaERTQTVJQlFnQTBFMGJHcEJOQkFDSVNFZ0RVRUJkQ0VtSUJFZ0FrRUNkR29oSXlBZ1FRRk5EUUlnQTBFUWRFR0FnUHdIY1NBV2NrR0FnSUFJY2lFZ0lDRWdKR29vQWdBaEpFRUFJUUlEUUNBQ0lDUkdEUU1nSXlBQ1FRSjBhaUFnTmdFQUlBSkJBV29oQWd3QUN3QUxJQUlnQWlBWmFpSU5JQUlnRFVzYklRMGdBMEVRZEVHQWdQd0hjU0FXY2tHQWdJQUljaUVEQTBBZ0FpQU5SZzBESUJFZ0FrRUNkR29nQXpZQkFDQUNRUUZxSVFJTUFBc0FDeUFlSUF4QkVIUWdOM0lnREhKQmdBSnlOZ0lBREFNTElBY2dEV3NoSkNBWElDWnFJU1pCQUNFTkEwQWdEU0FrUmcwQlFRRWdHQ0FUSUNZZ0RVRUJkR29pSnkwQUFTSUNheUk3YTNRaVBDQWhJQUpCQW5ScUlpQW9BZ0FpQW1vaFBTQURJRHRxUVJCMFFZQ0EvQWR4SUNjdEFBQkJDSFJ5SUJaeVFZQ0FnQkJ5SVNjRFFDQWpJQUpCQW5ScUlDYzJBUUFnQWtFQmFpSUNJRDFKRFFBTElDQWdJQ2dDQUNBOGFqWUNBQ0FOUVFGcUlRME1BQXNBQ3lBZklCOG9BZ0FnR1dvMkFnQWdDa0VCYWlFS0RBQUxBQXNnRWlFQ0N5QVFRUkJxSkFBZ0FrR0lmMHNnQWlBSVQzSU5EQ0FjSUFzZ0FpQVBhaUFJSUFKcklCNFFGaUVEREFNTElCNGdEeUFJSUJRUUZDSUNRWWgvU3lBQ0lBaFBjZzBMSUJ3Z0N5QUNJQTlxSUFnZ0Ftc2dIaEFYSVFNTUFnc2dBd1JBSUJ3Z0N5QVBJQWdnQWhBV0lRTU1BZ3NnSENBTElBOGdDQ0FDRUJjaEF3d0JDeUFjSUFzZ0R5QUlJQUlRRlNFREN5QURRWWgvU3cwSUlBVWdDellDZ09zQklBVWdIRFlDOE9vQklBVkJBVFlDZ09vQklCcEJBa1lFUUNBRklCNDJBZ3dMSUFzZ0hHb2lBa0lBTndBQUlBSkNBRGNBR0NBQ1FnQTNBQkFnQWtJQU53QUlJQWxCaUg5TERRb0xJQWtnRlVZTkNDQVZJQWxySVFZZ0JTZ0NuT3NCSVFvQ1FDQUpJQnRxSWdNdEFBQWlEMFVFUUVFQklRSkJBQ0VQUWJoL0lRa2dCa0VCUmcwQkRBc0xBbjhnQTBFQmFpQVB3Q0lDUVFCT0RRQWFJQUpCZjBZRVFDQUdRUU5JRFFzZ0F5OEFBVUdBL2dGcUlROGdBMEVEYWd3QkN5QUdRUUpJRFFvZ0F5MEFBU0FQUVFoMGNrR0FnQUpySVE4Z0EwRUNhZ3NoRWtHNGZ5RUpJQkpCQVdvaUFpQVZJQnRxSWdkTERRb2dMQ0FGSUJJdEFBQWlFa0VHZGtFalFRa2dBaUFISUFKclFjQVFRZEFSUWZBU0lBVW9Bb1RxQVNBS0lBOGdGQkFoSWdsQmlIOUxEUWdnS3lBb0lCSkJCSFpCQTNGQkgwRUlJQUlnQ1dvaUFpQUhJQUpyUVlBTFFZQU1RWUFYSUFVb0FvVHFBU0FGS0FLYzZ3RWdEeUFVRUNFaUNFR0lmMHNOQ0VGc0lRa2dLaUF0SUJKQkFuWkJBM0ZCTkVFSklBSWdDR29pQWlBSElBSnJRWUFOUWVBT1FaQVpJQVVvQW9UcUFTQUZLQUtjNndFZ0R5QVVFQ0VpQjBHSWYwc05DaUFDSUFkcUlBTnJJZ0loQ1NBQ1FZaC9TdzBLQ3lBT0lBOUJBRXh5RFFFTFFicC9JUWtNQ0FzZ0pTQU9heUVKSUFZZ0Ftc2hCaUFDSUFOcUlRY0NRQUpBQWtBZ0NrVUVRQ0FQUVFsSUlBVXBBOGpwQVVLQmdJQUlWSElOQWlBb0tBSUFJZ0pCQ0dvaEVpQUNLQUlFSVFwQkFDRURRUUFoQWdOQUlBTWdDblpGQkVBZ0FpQVNJQU5CQTNScUxRQUNRUlpMYWlFQ0lBTkJBV29oQXd3QkN3c2dCVUVBTmdLYzZ3RWdBa0VJSUFwcmRFRVVUdzBCREFNTElBVkJBRFlDbk9zQkN5QUVJQVVvQXZEcUFTSUROZ0xjQVNBSklBNXFJUllnQXlBRktBS0E2d0ZxSVJjQ1FDQVBSUVJBSUE0aEJ3d0JDeUFGS0FLNDZRRWhHaUFGS0FLMDZRRWhHQ0FGS0FLdzZRRWhFaUFGUVFFMkFvVHFBVUVBSVFNRFFDQURRUU5IQkVBZ0JDQURRUUowSWdKcUlBSWdCV3BCck5BQmFpZ0NBRFlDWkNBRFFRRnFJUU1NQVFzTFFXd2hDU0FFUVRocUlnSWdCeUFHRUExQmlIOUxEUU5CQ0NBUElBOUJDRTRiSVI4Z05DQUNJQVVvQWdBUUhpQXpJQUlnQlNnQ0NCQWVJRElnQWlBRktBSUVFQjRnRGlBU2F5RVpRUUFoQ0FOQUlBUkJPR29RRDBFRFJpQUlJQjlPY2tVRVFDQUVLQUpRSUFRb0FreEJBM1JxS1FJQUlrQ25JZ2RCRUhZaUVVSC9BWEVoQ3lBRUtBSmdJQVFvQWx4QkEzUnFLUUlBSWtHbklneEJFSFlpSVVIL0FYRWhFQ0FFS0FKWUlBUW9BbFJCQTNScUtRSUFJa0pDSUlpbklRWWdRVUlnaUNCQVFpQ0lweUVEQWtBZ1FrSVFpS2NpQ2tIL0FYRWlBa0VDVHdSQUFrQWdBa0VaU1NBL1FvR0FnQkJVY2tVRVFDQUVRU0FnQkNnQ1BDSUtheUlOSUFJZ0FpQU5TeHNpRXlBS2FqWUNQQ0FHSUFRb0FqZ2dDblJCQUNBVGEzWWdBaUFUYXlJVGRHb2hDaUFFUVRocUVBOGFJQUlnRFUwTkFTQUVJQVFvQWp3aUFpQVRhallDUENBRUtBSTRJQUowUVFBZ0UydDJJQXBxSVFvTUFRc2dCQ0FDSUFRb0Fqd2lEV28yQWp3Z0JDZ0NPQ0FOZEVFQUlBcHJkaUFHYWlFS0lBUkJPR29RRHhvTElBUXBBbVFoUkNBRUlBbzJBbVFnQkNCRU53Sm9EQUVMQWtBZ0FrVUVRQ0FEQkVBZ0JDZ0NaQ0VLREFNTElBUW9BbWdoQ2d3QkN5QUVJQVFvQWp3aUFrRUJhallDUEFKL0lBWWdBMFZxSUFRb0FqZ2dBblJCSDNacUlnSkJBMFlFUUNBRUtBSmtRUUZyREFFTElBSkJBblFnQkdvb0FtUUxJZ1pGSUFacUlRb2dBa0VCUndSQUlBUWdCQ2dDYURZQ2JBc0xJQVFnQkNnQ1pEWUNhQ0FFSUFvMkFtUUxweUVDSUVGQ2dJRDhCNE5RUlFSQUlBUWdCQ2dDUENJR0lCQnFOZ0k4SUFRb0FqZ2dCblJCQUNBaGEzWWdBbW9oQWdzZ0N5QVFha0VVVHdSQUlBUkJPR29RRHhvTElFQkNnSUQ4QjROUVJRUkFJQVFnQkNnQ1BDSUdJQXRxTmdJOElBUW9BamdnQm5SQkFDQVJhM1lnQTJvaEF3c2dCRUU0YWhBUEdpQUVJQVFvQWpnaUJrRUFJQWRCR0hZaUN5QUVLQUk4YWlJUWEzWWdDMEVDZEVHZ0hXb29BZ0J4SUFkQi8vOERjV28yQWt3Z0JDQVFJQXhCR0hZaUIyb2lDellDUENBRUlBZEJBblJCb0IxcUtBSUFJQVpCQUNBTGEzWnhJQXhCLy84RGNXbzJBbHdnQkVFNGFoQVBHaUFFSUVLbklnWkJHSFlpQnlBRUtBSThhaUlMTmdJOElBUWdCMEVDZEVHZ0hXb29BZ0FnQkNnQ09FRUFJQXRyZG5FZ0JrSC8vd054YWpZQ1ZDQUVRZkFBYWlBSVFReHNhaUlHSUFvMkFnZ2dCaUFDTmdJRUlBWWdBellDQUNBSVFRRnFJUWdnQXlBWmFpQUNhaUVaREFFTEN5QUlJQjlJRFFNZ0ZrRWdheUVoSUE0aEJ3TkFJQVJCT0dvUUQwRURSaUFJSUE5T2NrVUVRQ0FFS0FKUUlBUW9Ba3hCQTNScUtRSUFJa0NuSWdaQkVIWWlJMEgvQVhFaENpQUVLQUpnSUFRb0FseEJBM1JxS1FJQUlrR25JZzFCRUhZaUlFSC9BWEVoRXlBRUtBSllJQVFvQWxSQkEzUnFLUUlBSWtKQ0lJaW5JUU1nUVVJZ2lDQkFRaUNJcHlFTEFrQWdRa0lRaUtjaURFSC9BWEVpQWtFQ1R3UkFBa0FnQWtFWlNTQS9Rb0dBZ0JCVWNrVUVRQ0FFUVNBZ0JDZ0NQQ0lNYXlJUklBSWdBaUFSU3hzaUVDQU1hallDUENBRElBUW9BamdnREhSQkFDQVFhM1lnQWlBUWF5SU1kR29oRUNBRVFUaHFFQThhSUFJZ0VVME5BU0FFSUFRb0Fqd2lBaUFNYWpZQ1BDQUVLQUk0SUFKMFFRQWdER3QySUJCcUlSQU1BUXNnQkNBQ0lBUW9BandpRUdvMkFqd2dCQ2dDT0NBUWRFRUFJQXhyZGlBRGFpRVFJQVJCT0dvUUR4b0xJQVFwQW1RaFJDQUVJQkEyQW1RZ0JDQkVOd0pvREFFTEFrQWdBa1VFUUNBTEJFQWdCQ2dDWkNFUURBTUxJQVFvQW1naEVBd0JDeUFFSUFRb0Fqd2lBa0VCYWpZQ1BBSi9JQU1nQzBWcUlBUW9BamdnQW5SQkgzWnFJZ0pCQTBZRVFDQUVLQUprUVFGckRBRUxJQUpCQW5RZ0JHb29BbVFMSWdORklBTnFJUkFnQWtFQlJ3UkFJQVFnQkNnQ2FEWUNiQXNMSUFRZ0JDZ0NaRFlDYUNBRUlCQTJBbVFMcHlFTUlFRkNnSUQ4QjROUVJRUkFJQVFnQkNnQ1BDSUNJQk5xTmdJOElBUW9BamdnQW5SQkFDQWdhM1lnREdvaERBc2dDaUFUYWtFVVR3UkFJQVJCT0dvUUR4b0xJRUJDZ0lEOEI0TlFSUVJBSUFRZ0JDZ0NQQ0lDSUFwcU5nSThJQVFvQWpnZ0FuUkJBQ0FqYTNZZ0Myb2hDd3NnQkVFNGFoQVBHaUFFSUFRb0FqZ2lBa0VBSUFaQkdIWWlBeUFFS0FJOGFpSUthM1lnQTBFQ2RFR2dIV29vQWdCeElBWkIvLzhEY1dvMkFrd2dCQ0FLSUExQkdIWWlBMm9pQmpZQ1BDQUVJQU5CQW5SQm9CMXFLQUlBSUFKQkFDQUdhM1p4SUExQi8vOERjV28yQWx3Z0JFRTRhaEFQR2lBRUlFS25JZ0pCR0hZaUF5QUVLQUk4YWlJR05nSThJQVFnQTBFQ2RFR2dIV29vQWdBZ0JDZ0NPRUVBSUFacmRuRWdBa0gvL3dOeGFqWUNWQUpBQWtBQ1FDQUVLQUxjQVNJRElBUkI4QUJxSUFoQkIzRkJER3hxSWhNb0FnQWlFV29pSXlBWFN3MEFJQWNnRXlnQ0JDSU5JQkZxSWdwcUlDRkxEUUFnQ2tFZ2FpQVdJQWRyVFEwQkN5QUVJQk1vQWdnMkFoZ2dCQ0FUS1FJQU53TVFJQWNnRmlBRVFSQnFJQVJCM0FGcUlCY2dFaUFZSUJvUUh5RUtEQUVMSUFjZ0VXb2hBaUFUS0FJSUlRWWdCeUFES1FBQU53QUFJQWNnQXlrQUNEY0FDQUpBSUJGQkVVa05BQ0FISUFNcEFCQTNBQkFnQnlBREtRQVlOd0FZSUJGQkVHdEJFVWdOQUNBRFFSQnFJUU1nQjBFZ2FpRVJBMEFnRVNBREtRQVFOd0FBSUJFZ0F5a0FHRGNBQ0NBUklBTXBBQ0EzQUJBZ0VTQURLUUFvTndBWUlBTkJJR29oQXlBUlFTQnFJaEVnQWtrTkFBc0xJQUlnQm1zaEF5QUVJQ00yQXR3QklBSWdFbXNnQmtrRVFDQUdJQUlnR0d0TERRY2dHaUFhSUFNZ0Vtc2lBMm9pRVNBTmFrOEVRQ0FDSUJFZ0RSQUtHZ3dDQ3lBRElBMXFJUTBnQWlBUlFRQWdBMnNRQ2lBRGF5RUNJQkloQXdzZ0JrRVFUd1JBSUFJZ0F5a0FBRGNBQUNBQ0lBTXBBQWczQUFnZ0RVRVJTQTBCSUFJZ0RXb2hCaUFDUVJCcUlRSURRQ0FDSUFNcEFCQTNBQUFnQWlBREtRQVlOd0FJSUFJZ0F5a0FJRGNBRUNBQ0lBTXBBQ2czQUJnZ0EwRWdhaUVESUFKQklHb2lBaUFHU1EwQUN3d0JDd0pBSUFaQkIwMEVRQ0FDSUFNdEFBQTZBQUFnQWlBRExRQUJPZ0FCSUFJZ0F5MEFBam9BQWlBQ0lBTXRBQU02QUFNZ0FpQURJQVpCQW5RaUJrSEFIbW9vQWdCcUlnTW9BQUEyQUFRZ0F5QUdRZUFlYWlnQ0FHc2hBd3dCQ3lBQ0lBTXBBQUEzQUFBTElBMUJDVWtOQUNBQ0lBMXFJUkVnQWtFSWFpSUdJQU5CQ0dvaUEydEJEMHdFUUFOQUlBWWdBeWtBQURjQUFDQURRUWhxSVFNZ0JrRUlhaUlHSUJGSkRRQU1BZ3NBQ3lBR0lBTXBBQUEzQUFBZ0JpQURLUUFJTndBSUlBMUJHVWdOQUNBQ1FSaHFJUUlEUUNBQ0lBTXBBQkEzQUFBZ0FpQURLUUFZTndBSUlBSWdBeWtBSURjQUVDQUNJQU1wQUNnM0FCZ2dBMEVnYWlFRElBSkJJR29pQWlBUlNRMEFDd3NnQ2tHSWYwc0VRQ0FLSVFrTUJnVWdFeUFRTmdJSUlCTWdERFlDQkNBVElBczJBZ0FnQ0VFQmFpRUlJQWNnQ21vaEJ5QUxJQmxxSUF4cUlSa01BZ3NBQ3dzZ0NDQVBTQTBESUFnZ0gyc2hCZ05BQWtBZ0JpQVBUZ1JBUVFBaEF3TkFJQU5CQTBZTkFpQUZJQU5CQW5RaUFtcEJyTkFCYWlBQ0lBUnFLQUprTmdJQUlBTkJBV29oQXd3QUN3QUxBa0FDUUFKQUlBUW9BdHdCSWdNZ0JFSHdBR29nQmtFSGNVRU1iR29pQ0NnQ0FDSU1haUlRSUJkTERRQWdCeUFJS0FJRUlnc2dER29pQ21vZ0lVc05BQ0FLUVNCcUlCWWdCMnRORFFFTElBUWdDQ2dDQ0RZQ0tDQUVJQWdwQWdBM0F5QWdCeUFXSUFSQklHb2dCRUhjQVdvZ0Z5QVNJQmdnR2hBZklRb01BUXNnQnlBTWFpRUNJQWdvQWdnaENDQUhJQU1wQUFBM0FBQWdCeUFES1FBSU53QUlBa0FnREVFUlNRMEFJQWNnQXlrQUVEY0FFQ0FISUFNcEFCZzNBQmdnREVFUWEwRVJTQTBBSUFOQkVHb2hBeUFIUVNCcUlRd0RRQ0FNSUFNcEFCQTNBQUFnRENBREtRQVlOd0FJSUF3Z0F5a0FJRGNBRUNBTUlBTXBBQ2czQUJnZ0EwRWdhaUVESUF4QklHb2lEQ0FDU1EwQUN3c2dBaUFJYXlFRElBUWdFRFlDM0FFZ0FpQVNheUFJU1FSQUlBZ2dBaUFZYTBzTkJ5QWFJQm9nQXlBU2F5SURhaUlNSUF0cVR3UkFJQUlnRENBTEVBb2FEQUlMSUFNZ0Myb2hDeUFDSUF4QkFDQURheEFLSUFOcklRSWdFaUVEQ3lBSVFSQlBCRUFnQWlBREtRQUFOd0FBSUFJZ0F5a0FDRGNBQ0NBTFFSRklEUUVnQWlBTGFpRUlJQUpCRUdvaEFnTkFJQUlnQXlrQUVEY0FBQ0FDSUFNcEFCZzNBQWdnQWlBREtRQWdOd0FRSUFJZ0F5a0FLRGNBR0NBRFFTQnFJUU1nQWtFZ2FpSUNJQWhKRFFBTERBRUxBa0FnQ0VFSFRRUkFJQUlnQXkwQUFEb0FBQ0FDSUFNdEFBRTZBQUVnQWlBRExRQUNPZ0FDSUFJZ0F5MEFBem9BQXlBQ0lBTWdDRUVDZENJSVFjQWVhaWdDQUdvaUF5Z0FBRFlBQkNBRElBaEI0QjVxS0FJQWF5RUREQUVMSUFJZ0F5a0FBRGNBQUFzZ0MwRUpTUTBBSUFJZ0Myb2hEQ0FDUVFocUlnZ2dBMEVJYWlJRGEwRVBUQVJBQTBBZ0NDQURLUUFBTndBQUlBTkJDR29oQXlBSVFRaHFJZ2dnREVrTkFBd0NDd0FMSUFnZ0F5a0FBRGNBQUNBSUlBTXBBQWczQUFnZ0MwRVpTQTBBSUFKQkdHb2hBZ05BSUFJZ0F5a0FFRGNBQUNBQ0lBTXBBQmczQUFnZ0FpQURLUUFnTndBUUlBSWdBeWtBS0RjQUdDQURRU0JxSVFNZ0FrRWdhaUlDSUF4SkRRQUxDeUFLUVloL1N3UkFJQW9oQ1F3R0JTQUdRUUZxSVFZZ0J5QUthaUVIREFJTEFBc0xJQVFvQXR3QklRTUxRYnAvSVFrZ0Z5QURheUlDSUJZZ0IydExEUUlnQndSL0lBY2dBeUFDRUFJZ0Ftb0ZRUUFMSUE1cklRa01BZ3NnQlVFQU5nS2M2d0VMSUFRZ0JTZ0M4T29CSWdNMkF0d0JJQWtnRG1vaERDQURJQVVvQW9EckFXb2hFQUpBSUE5RkJFQWdEaUVHREFFTElBVW9BcmpwQVNFTklBVW9BclRwQVNFVElBVW9BckRwQVNFU0lBVkJBVFlDaE9vQlFRQWhBd05BSUFOQkEwY0VRQ0FFSUFOQkFuUWlBbW9nQWlBRmFrR3MwQUZxS0FJQU5nS2NBU0FEUVFGcUlRTU1BUXNMUVd3aENTQUVRZkFBYWlJQ0lBY2dCaEFOUVloL1N3MEJJREVnQWlBRktBSUFFQjRnTUNBQ0lBVW9BZ2dRSGlBdklBSWdCU2dDQkJBZUlBeEJJR3NoR0NBT0lRWURRQ0FFS0FLSUFTQUVLQUtFQVVFRGRHb3BBZ0FpUUtjaUNrRVFkaUlaUWY4QmNTRUxJQVFvQXBnQklBUW9BcFFCUVFOMGFpa0NBQ0pCcHlJV1FSQjJJaDlCL3dGeElSb2dCQ2dDa0FFZ0JDZ0NqQUZCQTNScUtRSUFJa0pDSUlpbklRY2dRVUlnaUNCQVFpQ0lweUVEQWtBZ1FrSVFpS2NpQ0VIL0FYRWlBa0VDVHdSQUFrQWdBa0VaU1NBL1FvR0FnQkJVY2tVRVFDQUVRU0FnQkNnQ2RDSUlheUlSSUFJZ0FpQVJTeHNpRnlBSWFqWUNkQ0FISUFRb0FuQWdDSFJCQUNBWGEzWWdBaUFYYXlJWGRHb2hDQ0FFUWZBQWFoQVBHaUFDSUJGTkRRRWdCQ0FFS0FKMElnSWdGMm8yQW5RZ0JDZ0NjQ0FDZEVFQUlCZHJkaUFJYWlFSURBRUxJQVFnQWlBRUtBSjBJaEZxTmdKMElBUW9BbkFnRVhSQkFDQUlhM1lnQjJvaENDQUVRZkFBYWhBUEdnc2dCQ2tDbkFFaFJDQUVJQWcyQXB3QklBUWdSRGNDb0FFTUFRc0NRQ0FDUlFSQUlBTUVRQ0FFS0FLY0FTRUlEQU1MSUFRb0FxQUJJUWdNQVFzZ0JDQUVLQUowSWdKQkFXbzJBblFDZnlBSElBTkZhaUFFS0FKd0lBSjBRUjkyYWlJQ1FRTkdCRUFnQkNnQ25BRkJBV3NNQVFzZ0FrRUNkQ0FFYWlnQ25BRUxJZ2RGSUFkcUlRZ2dBa0VCUndSQUlBUWdCQ2dDb0FFMkFxUUJDd3NnQkNBRUtBS2NBVFlDb0FFZ0JDQUlOZ0tjQVF1bklRSWdRVUtBZ1B3SGcxQkZCRUFnQkNBRUtBSjBJZ2NnR21vMkFuUWdCQ2dDY0NBSGRFRUFJQjlyZGlBQ2FpRUNDeUFMSUJwcVFSUlBCRUFnQkVId0FHb1FEeG9MSUVCQ2dJRDhCNE5RUlFSQUlBUWdCQ2dDZENJSElBdHFOZ0owSUFRb0FuQWdCM1JCQUNBWmEzWWdBMm9oQXdzZ0JFSHdBR29RRHhvZ0JDQUVLQUp3SWdkQkFDQUtRUmgySWdzZ0JDZ0NkR29pR210MklBdEJBblJCb0IxcUtBSUFjU0FLUWYvL0EzRnFOZ0tFQVNBRUlCb2dGa0VZZGlJS2FpSUxOZ0owSUFRZ0NrRUNkRUdnSFdvb0FnQWdCMEVBSUF0cmRuRWdGa0gvL3dOeGFqWUNsQUVnQkVId0FHb1FEeG9nQkNCQ3B5SUhRUmgySWdvZ0JDZ0NkR29pQ3pZQ2RDQUVJQXBCQW5SQm9CMXFLQUlBSUFRb0FuQkJBQ0FMYTNaeElBZEIvLzhEY1dvMkFvd0JJQVFnQXpZQ09DQUVJQUkyQWp3Z0JDQUlOZ0pBQWtBQ1FBSkFJQVFvQXR3Qklnc2dBMm9pRmlBUVN3MEFJQVlnQWlBRGFpSUthaUFZU3cwQUlBcEJJR29nRENBR2EwME5BUXNnQkNBRVFVQnJLQUlBTmdJSUlBUWdCQ2tET0RjREFDQUdJQXdnQkNBRVFkd0JhaUFRSUJJZ0V5QU5FQjhoQ2d3QkN5QURJQVpxSVFjZ0JpQUxLUUFBTndBQUlBWWdDeWtBQ0RjQUNBSkFJQU5CRVVrTkFDQUdJQXNwQUJBM0FCQWdCaUFMS1FBWU53QVlJQU5CRUd0QkVVZ05BQ0FMUVJCcUlRTWdCa0VnYWlFTEEwQWdDeUFES1FBUU53QUFJQXNnQXlrQUdEY0FDQ0FMSUFNcEFDQTNBQkFnQ3lBREtRQW9Od0FZSUFOQklHb2hBeUFMUVNCcUlnc2dCMGtOQUFzTElBY2dDR3NoQXlBRUlCWTJBdHdCSUFjZ0Vtc2dDRWtFUUNBSUlBY2dFMnRMRFFRZ0RTQU5JQU1nRW1zaUEyb2lDeUFDYWs4RVFDQUhJQXNnQWhBS0dnd0NDeUFISUF0QkFDQURheEFLSUFRZ0FpQURhaUlDTmdJOElBTnJJUWNnRWlFREN5QUlRUkJQQkVBZ0J5QURLUUFBTndBQUlBY2dBeWtBQ0RjQUNDQUNRUkZJRFFFZ0FpQUhhaUVJSUFkQkVHb2hBZ05BSUFJZ0F5a0FFRGNBQUNBQ0lBTXBBQmczQUFnZ0FpQURLUUFnTndBUUlBSWdBeWtBS0RjQUdDQURRU0JxSVFNZ0FrRWdhaUlDSUFoSkRRQUxEQUVMQWtBZ0NFRUhUUVJBSUFjZ0F5MEFBRG9BQUNBSElBTXRBQUU2QUFFZ0J5QURMUUFDT2dBQ0lBY2dBeTBBQXpvQUF5QUhJQU1nQ0VFQ2RDSUlRY0FlYWlnQ0FHb2lBeWdBQURZQUJDQURJQWhCNEI1cUtBSUFheUVEREFFTElBY2dBeWtBQURjQUFBc2dBa0VKU1EwQUlBSWdCMm9oQ3lBSFFRaHFJZ2dnQTBFSWFpSURhMEVQVEFSQUEwQWdDQ0FES1FBQU53QUFJQU5CQ0dvaEF5QUlRUWhxSWdnZ0Mwa05BQXdDQ3dBTElBZ2dBeWtBQURjQUFDQUlJQU1wQUFnM0FBZ2dBa0VaU0EwQUlBZEJHR29oQWdOQUlBSWdBeWtBRURjQUFDQUNJQU1wQUJnM0FBZ2dBaUFES1FBZ053QVFJQUlnQXlrQUtEY0FHQ0FEUVNCcUlRTWdBa0VnYWlJQ0lBdEpEUUFMQ3lBS1FZaC9Td1JBSUFvaENRd0RDeUFHSUFwcUlRWWdCRUh3QUdvUUR5RURJQTlCQVdzaUR3MEFDMEVBSVFJZ0EwRUNTUTBCQTBBZ0FrRURSd1JBSUFVZ0FrRUNkQ0lEYWtHczBBRnFJQU1nQkdvb0Fwd0JOZ0lBSUFKQkFXb2hBZ3dCQ3dzZ0JDZ0MzQUVoQXd0QnVuOGhDU0FRSUFOcklnSWdEQ0FHYTBzTkFDQUdCSDhnQmlBRElBSVFBaUFDYWdWQkFBc2dEbXNoQ1FzZ0NVR0lmMHNOQmdzQ1FDQUZLQUxzNmdGRkRRQWdCU0FGS1FPSTZnRWdDYTE4TndPSTZnRUNRQ0FGS0FMUTZnRWlBaUFKYWlJSVFSOU5CRUFnRGtVTkFTQUNJQ0pxSUE0Z0NSQUNHaUFGS0FMUTZnRWdDV29oQ0F3QkN5QU9JUU1nQWdSQUlBSWdJbW9nQTBFZ0lBSnJFQUlhSUFVb0F0RHFBU0VDSUFWQkFEWUMwT29CSUFVZ0JTa0RrT29CSUFVcEFMRHFBVUxQMXRPKzBzZXIyVUorZkVJZmlVS0hsYSt2bUxiZW01NS9mamNEa09vQklBVWdCU2tEbU9vQklBVXBBTGpxQVVMUDF0Tyswc2VyMlVKK2ZFSWZpVUtIbGErdm1MYmVtNTUvZmpjRG1Pb0JJQVVnQlNrRG9Pb0JJQVVwQU1EcUFVTFAxdE8rMHNlcjJVSitmRUlmaVVLSGxhK3ZtTGJlbTU1L2ZqY0RvT29CSUFVZ0JTa0RxT29CSUFVcEFNanFBVUxQMXRPKzBzZXIyVUorZkVJZmlVS0hsYSt2bUxiZW01NS9mamNEcU9vQklBTWdBbXRCSUdvaEF3c2dDU0FPYWlJQ0lBTkJJR3BQQkVBZ0FrRWdheUVHSUFVcEE2anFBU0UvSUFVcEE2RHFBU0ZBSUFVcEE1anFBU0ZCSUFVcEE1RHFBU0ZDQTBBZ0F5a0FHRUxQMXRPKzBzZXIyVUorSUQ5OFFoK0pRb2VWcjYrWXR0NmJubjkrSVQ4Z0F5a0FFRUxQMXRPKzBzZXIyVUorSUVCOFFoK0pRb2VWcjYrWXR0NmJubjkrSVVBZ0F5a0FDRUxQMXRPKzBzZXIyVUorSUVGOFFoK0pRb2VWcjYrWXR0NmJubjkrSVVFZ0F5a0FBRUxQMXRPKzBzZXIyVUorSUVKOFFoK0pRb2VWcjYrWXR0NmJubjkrSVVJZ0EwRWdhaUlESUFaTkRRQUxJQVVnUHpjRHFPb0JJQVVnUURjRG9Pb0JJQVVnUVRjRG1Pb0JJQVVnUWpjRGtPb0JDeUFDSUFOTkRRRWdJaUFESUFJZ0Eyc2lDQkFDR2dzZ0JTQUlOZ0xRNmdFTElEVWdGV3NoQXlBVklCdHFJUUlnQ1NBT2FpRU9JQVFvQWpCRkRRQUxJQ2twQXdBaVAwSi9VU0EvSUE0Z0hXdXNVWEpGQkVCQmJDRUpEQVlMSUFVb0F1RHBBUVJBUVdvaENTQURRUVJKRFFZZ0JTZ0M2T29CUlFSQUlDSWdCU2dDME9vQmFpRUtBbjRnQlNrRGlPb0JJajlDSUZvRVFDQUZLUU9ZNmdFaVFFSUhpU0FGS1FPUTZnRWlRVUlCaVh3Z0JTa0RvT29CSWtKQ0RJbDhJQVVwQTZqcUFTSkRRaEtKZkNCQlFzL1cwNzdTeDZ2WlFuNUNINGxDaDVXdnI1aTIzcHVlZjM2RlFvZVZyNitZdHQ2Ym5uOStRcDJqdGVxRHNZMksrZ0I5SUVCQ3o5YlR2dExIcTlsQ2ZrSWZpVUtIbGErdm1MYmVtNTUvZm9WQ2g1V3ZyNWkyM3B1ZWYzNUNuYU8xNm9PeGpZcjZBSDBnUWtMUDF0Tyswc2VyMlVKK1FoK0pRb2VWcjYrWXR0NmJubjkraFVLSGxhK3ZtTGJlbTU1L2ZrS2RvN1hxZzdHTml2b0FmU0JEUXMvVzA3N1N4NnZaUW41Q0g0bENoNVd2cjVpMjNwdWVmMzZGUW9lVnI2K1l0dDZibm45K1FwMmp0ZXFEc1kySytnQjlEQUVMSUFVcEE2RHFBVUxGejlteThlVzY2aWQ4Q3lBL2ZDRS9JQ0loQmdOQUlBb2dCa0VJYWlJSFR3UkFJQVlwQUFCQ3o5YlR2dExIcTlsQ2ZrSWZpVUtIbGErdm1MYmVtNTUvZmlBL2hVSWJpVUtIbGErdm1MYmVtNTUvZmtLZG83WHFnN0dOaXZvQWZTRS9JQWNoQmd3QkN3c0NRQ0FLSUFaQkJHb2lDRWtFUUNBR0lRZ01BUXNnQmpVQUFFS0hsYSt2bUxiZW01NS9maUEvaFVJWGlVTFAxdE8rMHNlcjJVSitRdm56M2ZHWjlwbXJGbndoUHdzRFFDQUlJQXBKQkVBZ0NERUFBRUxGejlteThlVzY2aWQrSUQrRlFndUpRb2VWcjYrWXR0NmJubjkrSVQ4Z0NFRUJhaUVJREFFTEN5QUNLQUFBSUQ5Q0lZZ2dQNFZDejliVHZ0TEhxOWxDZmlJL1FoMklJRCtGUXZuejNmR1o5cG1yRm40aVAwSWdpQ0EvaGFkSERRY0xJQU5CQkdzaEF5QUNRUVJxSVFJTElBNGdIV3NpQ1VHSmYwOE5CQ0FCSUFscklRRWdDU0FkYWlFZFFRRWhQZ3dCQ3d0QnVIOGhCeUFERFFRZ0hTQUFheUVIREFRTFFXd2hDUXdCQzBHNGZ5RUpDMEc0ZnlFSElBbEJka1lnUG5FTkFRc2dDU0VIQ3lnQ0FBMEFJQVZCL09vQmFpZ0NBQ0VCSUFWQitPb0JhaWdDQUNFQUlBVVFHQ0FGS0FLdzZ3RWdBQ0FCRUJNZ0JVRUFOZ0t3NndFZ0JTZ0NwT3NCSWdJRVFBSkFBa0FDUUFKQUlBSW9BZ0FpQXdSQUlBQkZEUUlnQVNBRElBQVJBZ0FNQVFzZ0FFVU5BZ3NnQVNBQ0lBQVJBZ0FNQWdzZ0F4QUdDeUFDRUFZTElBVkJBRFlDcE9zQkN5QUFCRUFnQVNBRklBQVJBZ0FNQVFzZ0JSQUdDeUFFUWVBQmFpUUFJQWNMQzZnVkNRQkJpQWdMRFFFQUFBQUJBQUFBQWdBQUFBSUFRYUFJQzdNR0FRQUFBQUVBQUFBQ0FBQUFBZ0FBQUNZQUFBQ0NBQUFBSVFVQUFFb0FBQUJuQ0FBQUpnQUFBTUFCQUFDQUFBQUFTUVVBQUVvQUFBQytDQUFBS1FBQUFDd0NBQUNBQUFBQVNRVUFBRW9BQUFDK0NBQUFMd0FBQU1vQ0FBQ0FBQUFBaWdVQUFFb0FBQUNFQ1FBQU5RQUFBSE1EQUFDQUFBQUFuUVVBQUVvQUFBQ2dDUUFBUFFBQUFJRURBQUNBQUFBQTZ3VUFBRXNBQUFBK0NnQUFSQUFBQUo0REFBQ0FBQUFBVFFZQUFFc0FBQUNxQ2dBQVN3QUFBTE1EQUFDQUFBQUF3UVlBQUUwQUFBQWZEUUFBVFFBQUFGTUVBQUNBQUFBQUl3Z0FBRkVBQUFDbUR3QUFWQUFBQUprRUFBQ0FBQUFBU3drQUFGY0FBQUN4RWdBQVdBQUFBTm9FQUFDQUFBQUFid2tBQUYwQUFBQWpGQUFBVkFBQUFFVUZBQUNBQUFBQVZBb0FBR29BQUFDTUZBQUFhZ0FBQUs4RkFBQ0FBQUFBZGdrQUFId0FBQUJPRUFBQWZBQUFBTklDQUFDQUFBQUFZd2NBQUpFQUFBQ1FCd0FBa2dBQUFBQUFBQUFCQUFBQUFRQUFBQVVBQUFBTkFBQUFIUUFBQUQwQUFBQjlBQUFBL1FBQUFQMEJBQUQ5QXdBQS9RY0FBUDBQQUFEOUh3QUEvVDhBQVAxL0FBRDkvd0FBL2Y4QkFQMy9Bd0Q5L3djQS9mOFBBUDMvSHdEOS96OEEvZjkvQVAzLy93RDkvLzhCL2YvL0EvMy8vd2Y5Ly84UC9mLy9ILzMvL3ovOS8vOS9BQUFBQUFFQUFBQUNBQUFBQXdBQUFBUUFBQUFGQUFBQUJnQUFBQWNBQUFBSUFBQUFDUUFBQUFvQUFBQUxBQUFBREFBQUFBMEFBQUFPQUFBQUR3QUFBQkFBQUFBUkFBQUFFZ0FBQUJNQUFBQVVBQUFBRlFBQUFCWUFBQUFYQUFBQUdBQUFBQmtBQUFBYUFBQUFHd0FBQUJ3QUFBQWRBQUFBSGdBQUFCOEFBQUFEQUFBQUJBQUFBQVVBQUFBR0FBQUFCd0FBQUFnQUFBQUpBQUFBQ2dBQUFBc0FBQUFNQUFBQURRQUFBQTRBQUFBUEFBQUFFQUFBQUJFQUFBQVNBQUFBRXdBQUFCUUFBQUFWQUFBQUZnQUFBQmNBQUFBWUFBQUFHUUFBQUJvQUFBQWJBQUFBSEFBQUFCMEFBQUFlQUFBQUh3QUFBQ0FBQUFBaEFBQUFJZ0FBQUNNQUFBQWxBQUFBSndBQUFDa0FBQUFyQUFBQUx3QUFBRE1BQUFBN0FBQUFRd0FBQUZNQUFBQmpBQUFBZ3dBQUFBTUJBQUFEQWdBQUF3UUFBQU1JQUFBREVBQUFBeUFBQUFOQUFBQURnQUFBQXdBQkFFSGdEd3RSQVFBQUFBRUFBQUFCQUFBQUFRQUFBQUlBQUFBQ0FBQUFBd0FBQUFNQUFBQUVBQUFBQkFBQUFBVUFBQUFIQUFBQUNBQUFBQWtBQUFBS0FBQUFDd0FBQUF3QUFBQU5BQUFBRGdBQUFBOEFBQUFRQUVIRUVBdUxBUUVBQUFBQ0FBQUFBd0FBQUFRQUFBQUZBQUFBQmdBQUFBY0FBQUFJQUFBQUNRQUFBQW9BQUFBTEFBQUFEQUFBQUEwQUFBQU9BQUFBRHdBQUFCQUFBQUFTQUFBQUZBQUFBQllBQUFBWUFBQUFIQUFBQUNBQUFBQW9BQUFBTUFBQUFFQUFBQUNBQUFBQUFBRUFBQUFDQUFBQUJBQUFBQWdBQUFBUUFBQUFJQUFBQUVBQUFBQ0FBQUFBQUFFQVFaQVNDK1lFQVFBQUFBRUFBQUFCQUFBQUFRQUFBQUlBQUFBQ0FBQUFBd0FBQUFNQUFBQUVBQUFBQmdBQUFBY0FBQUFJQUFBQUNRQUFBQW9BQUFBTEFBQUFEQUFBQUEwQUFBQU9BQUFBRHdBQUFCQUFBQUFCQUFBQUJBQUFBQWdBQUFBQUFBQUFBUUFCQVFZQUFBQUFBQUFFQUFBQUFCQUFBQVFBQUFBQUlBQUFCUUVBQUFBQUFBQUZBd0FBQUFBQUFBVUVBQUFBQUFBQUJRWUFBQUFBQUFBRkJ3QUFBQUFBQUFVSkFBQUFBQUFBQlFvQUFBQUFBQUFGREFBQUFBQUFBQVlPQUFBQUFBQUJCUkFBQUFBQUFBRUZGQUFBQUFBQUFRVVdBQUFBQUFBQ0JSd0FBQUFBQUFNRklBQUFBQUFBQkFVd0FBQUFJQUFHQlVBQUFBQUFBQWNGZ0FBQUFBQUFDQVlBQVFBQUFBQUtCZ0FFQUFBQUFBd0dBQkFBQUNBQUFBUUFBQUFBQUFBQUJBRUFBQUFBQUFBRkFnQUFBQ0FBQUFVRUFBQUFBQUFBQlFVQUFBQWdBQUFGQndBQUFBQUFBQVVJQUFBQUlBQUFCUW9BQUFBQUFBQUZDd0FBQUFBQUFBWU5BQUFBSUFBQkJSQUFBQUFBQUFFRkVnQUFBQ0FBQVFVV0FBQUFBQUFDQlJnQUFBQWdBQU1GSUFBQUFBQUFBd1VvQUFBQUFBQUdCRUFBQUFBUUFBWUVRQUFBQUNBQUJ3V0FBQUFBQUFBSkJnQUNBQUFBQUFzR0FBZ0FBREFBQUFRQUFBQUFFQUFBQkFFQUFBQWdBQUFGQWdBQUFDQUFBQVVEQUFBQUlBQUFCUVVBQUFBZ0FBQUZCZ0FBQUNBQUFBVUlBQUFBSUFBQUJRa0FBQUFnQUFBRkN3QUFBQ0FBQUFVTUFBQUFBQUFBQmc4QUFBQWdBQUVGRWdBQUFDQUFBUVVVQUFBQUlBQUNCUmdBQUFBZ0FBSUZIQUFBQUNBQUF3VW9BQUFBSUFBRUJUQUFBQUFBQUJBR0FBQUJBQUFBRHdZQWdBQUFBQUFPQmdCQUFBQUFBQTBHQUNBQVFZQVhDNGNDQVFBQkFRVUFBQUFBQUFBRkFBQUFBQUFBQmdROUFBQUFBQUFKQmYwQkFBQUFBQThGL1g4QUFBQUFGUVg5L3g4QUFBQURCUVVBQUFBQUFBY0VmUUFBQUFBQURBWDlEd0FBQUFBU0JmMy9Bd0FBQUJjRi9mOS9BQUFBQlFVZEFBQUFBQUFJQlAwQUFBQUFBQTRGL1Q4QUFBQUFGQVg5L3c4QUFBQUNCUUVBQUFBUUFBY0VmUUFBQUFBQUN3WDlCd0FBQUFBUkJmMy9BUUFBQUJZRi9mOC9BQUFBQkFVTkFBQUFFQUFJQlAwQUFBQUFBQTBGL1I4QUFBQUFFd1g5L3djQUFBQUJCUUVBQUFBUUFBWUVQUUFBQUFBQUNnWDlBd0FBQUFBUUJmMy9BQUFBQUJ3Ri9mLy9Ed0FBR3dYOS8vOEhBQUFhQmYzLy93TUFBQmtGL2YvL0FRQUFHQVg5Ly84QVFaQVpDNFlFQVFBQkFRWUFBQUFBQUFBR0F3QUFBQUFBQUFRRUFBQUFJQUFBQlFVQUFBQUFBQUFGQmdBQUFBQUFBQVVJQUFBQUFBQUFCUWtBQUFBQUFBQUZDd0FBQUFBQUFBWU5BQUFBQUFBQUJoQUFBQUFBQUFBR0V3QUFBQUFBQUFZV0FBQUFBQUFBQmhrQUFBQUFBQUFHSEFBQUFBQUFBQVlmQUFBQUFBQUFCaUlBQUFBQUFBRUdKUUFBQUFBQUFRWXBBQUFBQUFBQ0JpOEFBQUFBQUFNR093QUFBQUFBQkFaVEFBQUFBQUFIQm9NQUFBQUFBQWtHQXdJQUFCQUFBQVFFQUFBQUFBQUFCQVVBQUFBZ0FBQUZCZ0FBQUFBQUFBVUhBQUFBSUFBQUJRa0FBQUFBQUFBRkNnQUFBQUFBQUFZTUFBQUFBQUFBQmc4QUFBQUFBQUFHRWdBQUFBQUFBQVlWQUFBQUFBQUFCaGdBQUFBQUFBQUdHd0FBQUFBQUFBWWVBQUFBQUFBQUJpRUFBQUFBQUFFR0l3QUFBQUFBQVFZbkFBQUFBQUFDQmlzQUFBQUFBQU1HTXdBQUFBQUFCQVpEQUFBQUFBQUZCbU1BQUFBQUFBZ0dBd0VBQUNBQUFBUUVBQUFBTUFBQUJBUUFBQUFRQUFBRUJRQUFBQ0FBQUFVSEFBQUFJQUFBQlFnQUFBQWdBQUFGQ2dBQUFDQUFBQVVMQUFBQUFBQUFCZzRBQUFBQUFBQUdFUUFBQUFBQUFBWVVBQUFBQUFBQUJoY0FBQUFBQUFBR0dnQUFBQUFBQUFZZEFBQUFBQUFBQmlBQUFBQUFBQkFHQXdBQkFBQUFEd1lEZ0FBQUFBQU9CZ05BQUFBQUFBMEdBeUFBQUFBQURBWURFQUFBQUFBTEJnTUlBQUFBQUFvR0F3UUFRYVFkQzlrQkFRQUFBQU1BQUFBSEFBQUFEd0FBQUI4QUFBQS9BQUFBZndBQUFQOEFBQUQvQVFBQS93TUFBUDhIQUFEL0R3QUEveDhBQVA4L0FBRC9md0FBLy84QUFQLy9BUUQvL3dNQS8vOEhBUC8vRHdELy94OEEvLzgvQVAvL2Z3RC8vLzhBLy8vL0FmLy8vd1AvLy84SC8vLy9ELy8vL3gvLy8vOC8vLy8vZndBQUFBQUJBQUFBQWdBQUFBUUFBQUFBQUFBQUFnQUFBQVFBQUFBSUFBQUFBQUFBQUFFQUFBQUNBQUFBQVFBQUFBUUFBQUFFQUFBQUJBQUFBQVFBQUFBSUFBQUFDQUFBQUFnQUFBQUhBQUFBQ0FBQUFBa0FBQUFLQUFBQUN3QkJnQjhMQTRBUkFRPT0iO3ZhciBzZT1uZXcgSkEsQ2U9ITE7YXN5bmMgZnVuY3Rpb24gX0koQSx0LGUpe2xldCBJPW51bGw7dHlwZW9mIEEhPSJzdHJpbmciP0k9QS5ocmVmOkEuc3RhcnRzV2l0aCgiaHR0cCIpP0k9QTpJPWAke3R9LyR7QX1gLEkuZW5kc1dpdGgoIi5qcyIpJiYoST1JLnN1YnN0cmluZygwLEkubGVuZ3RoLTMpKSxJLmVuZHNXaXRoKCIud2FzbSIpJiYoST1JLnN1YnN0cmluZygwLEkubGVuZ3RoLTUpKTtsZXQgcj1gJHtJfS53YXNtYCxvPWF3YWl0IExBLmdldChgJHtyfS56c3RgLHtyZXNwb25zZVR5cGU6ImFycmF5YnVmZmVyIixwYXJhbXM6ZX0pO0NlfHwoYXdhaXQgc2UuaW5pdCgpLENlPSEwKTtsZXQgQz1zZS5kZWNvZGUobmV3IFVpbnQ4QXJyYXkoby5kYXRhKSkuYnVmZmVyO3JldHVybihhd2FpdCBpbXBvcnQoYCR7SX0uanNgKSkuZGVmYXVsdCh7d2FzbUJpbmFyeTpDfSl9dmFyIEJlPV9JO3ZhciBiQT1uZXcgTWFwO2FzeW5jIGZ1bmN0aW9uIFhJKEEsdCxlKXtsZXQgST1BLHI9QSxvPW51bGw7cmV0dXJuIHR5cGVvZiBBIT0ic3RyaW5nIiYmKEk9bmV3IFVSTChBLmhyZWYpLHI9SS5ocmVmKSxiQS5oYXMocik/bz1hd2FpdCBiQS5nZXQocik6KGJBLnNldChyLEJlKEksdCxlKSksbz1hd2FpdCBiQS5nZXQocikpLG99dmFyIGFlPVhJO3ZhciB6ST17VGV4dEZpbGU6IlRleHRGaWxlIixCaW5hcnlGaWxlOiJCaW5hcnlGaWxlIixUZXh0U3RyZWFtOiJUZXh0U3RyZWFtIixCaW5hcnlTdHJlYW06IkJpbmFyeVN0cmVhbSIsSW1hZ2U6IkltYWdlIixQb2ludFNldDoiUG9pbnRTZXQiLE1lc2g6Ik1lc2giLFBvbHlEYXRhOiJQb2x5RGF0YSIsVHJhbnNmb3JtTGlzdDoiVHJhbnNmb3JtTGlzdCIsSnNvbkNvbXBhdGlibGU6Ikpzb25Db21wYXRpYmxlIn0saD16STt2YXIgdkk9e0ludDg6ImludDgiLFVJbnQ4OiJ1aW50OCIsSW50MTY6ImludDE2IixVSW50MTY6InVpbnQxNiIsSW50MzI6ImludDMyIixVSW50MzI6InVpbnQzMiIsSW50NjQ6ImludDY0IixVSW50NjQ6InVpbnQ2NCIsU2l6ZVZhbHVlVHlwZToidWludDY0IixJZGVudGlmaWVyVHlwZToidWludDY0IixJbmRleFZhbHVlVHlwZToiaW50NjQiLE9mZnNldFZhbHVlVHlwZToiaW50NjQifSxSPXZJO3ZhciAkST17RmxvYXQzMjoiZmxvYXQzMiIsRmxvYXQ2NDoiZmxvYXQ2NCIsU3BhY2VQcmVjaXNpb25UeXBlOiJmbG9hdDY0In0sej0kSTtmdW5jdGlvbiBBcihBLHQpe2xldCBlPW51bGw7c3dpdGNoKEEpe2Nhc2UgUi5VSW50ODp7ZT1uZXcgVWludDhBcnJheSh0KTticmVha31jYXNlIFIuSW50ODp7ZT1uZXcgSW50OEFycmF5KHQpO2JyZWFrfWNhc2UgUi5VSW50MTY6e2U9bmV3IFVpbnQxNkFycmF5KHQpO2JyZWFrfWNhc2UgUi5JbnQxNjp7ZT1uZXcgSW50MTZBcnJheSh0KTticmVha31jYXNlIFIuVUludDMyOntlPW5ldyBVaW50MzJBcnJheSh0KTticmVha31jYXNlIFIuSW50MzI6e2U9bmV3IEludDMyQXJyYXkodCk7YnJlYWt9Y2FzZSBSLlVJbnQ2NDp7dHlwZW9mIGdsb2JhbFRoaXMuQmlnVWludDY0QXJyYXk9PSJmdW5jdGlvbiI/ZT1uZXcgQmlnVWludDY0QXJyYXkodCk6ZT1uZXcgVWludDhBcnJheSh0KTticmVha31jYXNlIFIuSW50NjQ6e3R5cGVvZiBnbG9iYWxUaGlzLkJpZ0ludDY0QXJyYXk9PSJmdW5jdGlvbiI/ZT1uZXcgQmlnSW50NjRBcnJheSh0KTplPW5ldyBVaW50OEFycmF5KHQpO2JyZWFrfWNhc2Ugei5GbG9hdDMyOntlPW5ldyBGbG9hdDMyQXJyYXkodCk7YnJlYWt9Y2FzZSB6LkZsb2F0NjQ6e2U9bmV3IEZsb2F0NjRBcnJheSh0KTticmVha31jYXNlIm51bGwiOntlPW51bGw7YnJlYWt9Y2FzZSBudWxsOntlPW51bGw7YnJlYWt9ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoIlR5cGUgaXMgbm90IHN1cHBvcnRlZCBhcyBhIFR5cGVkQXJyYXkiKX1yZXR1cm4gZX12YXIgSD1Bcjt2YXIgY2U9dHlwZW9mIGdsb2JhbFRoaXMuU2hhcmVkQXJyYXlCdWZmZXI9PSJmdW5jdGlvbiIsUWU9bmV3IFRleHRFbmNvZGVyLEVlPW5ldyBUZXh0RGVjb2RlcigidXRmLTgiKTtmdW5jdGlvbiB0cihBLHQpe2xldCBlPXtmbGFnczoiciIsZW5jb2Rpbmc6ImJpbmFyeSJ9LEk9QS5mc19vcGVuKHQsZS5mbGFncyksbz1BLmZzX3N0YXQodCkuc2l6ZSxnPW51bGw7Y2U/Zz1uZXcgU2hhcmVkQXJyYXlCdWZmZXIobyk6Zz1uZXcgQXJyYXlCdWZmZXIobyk7bGV0IEM9bmV3IFVpbnQ4QXJyYXkoZyk7cmV0dXJuIEEuZnNfcmVhZChJLEMsMCxvLDApLEEuZnNfY2xvc2UoSSksQ31mdW5jdGlvbiBmZShBLHQsZSl7bGV0IEk9bnVsbDtjZT9JPW5ldyBTaGFyZWRBcnJheUJ1ZmZlcihlKTpJPW5ldyBBcnJheUJ1ZmZlcihlKTtsZXQgcj1uZXcgVWludDhBcnJheShJKSxvPW5ldyBVaW50OEFycmF5KEEuSEVBUFU4LmJ1ZmZlcix0LGUpO3JldHVybiByLnNldChvKSxyfWZ1bmN0aW9uIHkoQSx0LGUsSSl7bGV0IHI9MDtyZXR1cm4gdCE9PW51bGwmJihyPUEuY2NhbGwoIml0a193YXNtX2lucHV0X2FycmF5X2FsbG9jIiwibnVtYmVyIixbIm51bWJlciIsIm51bWJlciIsIm51bWJlciIsIm51bWJlciJdLFswLGUsSSx0LmJ1ZmZlci5ieXRlTGVuZ3RoXSksQS5IRUFQVTguc2V0KG5ldyBVaW50OEFycmF5KHQuYnVmZmVyKSxyKSkscn1mdW5jdGlvbiBUKEEsdCxlKXtsZXQgST1KU09OLnN0cmluZ2lmeSh0KSxyPUEubGVuZ3RoQnl0ZXNVVEY4KEkpKzEsbz1BLmNjYWxsKCJpdGtfd2FzbV9pbnB1dF9qc29uX2FsbG9jIiwibnVtYmVyIixbIm51bWJlciIsIm51bWJlciIsIm51bWJlciJdLFswLGUscl0pO0Euc3RyaW5nVG9VVEY4KEksbyxyKX1mdW5jdGlvbiBGKEEsdCxlLEkpe2xldCByPUEuY2NhbGwoIml0a193YXNtX291dHB1dF9hcnJheV9hZGRyZXNzIiwibnVtYmVyIixbIm51bWJlciIsIm51bWJlciIsIm51bWJlciJdLFswLHQsZV0pLG89QS5jY2FsbCgiaXRrX3dhc21fb3V0cHV0X2FycmF5X3NpemUiLCJudW1iZXIiLFsibnVtYmVyIiwibnVtYmVyIiwibnVtYmVyIl0sWzAsdCxlXSksZz1mZShBLHIsbyk7cmV0dXJuIEgoSSxnLmJ1ZmZlcil9ZnVuY3Rpb24gc0EoQSx0KXtsZXQgZT1BLmNjYWxsKCJpdGtfd2FzbV9vdXRwdXRfanNvbl9hZGRyZXNzIiwibnVtYmVyIixbIm51bWJlciIsIm51bWJlciJdLFswLHRdKSxJPUEuVVRGOFRvU3RyaW5nKGUpO3JldHVybiBKU09OLnBhcnNlKEkpfWZ1bmN0aW9uIGVyKEEsdCxlLEkpe0khPW51bGwmJkkubGVuZ3RoPjAmJkkuZm9yRWFjaChmdW5jdGlvbihhLG4pe3N3aXRjaChhLnR5cGUpe2Nhc2UgaC5UZXh0U3RyZWFtOntsZXQgcz1RZS5lbmNvZGUoYS5kYXRhLmRhdGEpLGY9eShBLHMsbiwwKSxCPXtzaXplOnMuYnVmZmVyLmJ5dGVMZW5ndGgsZGF0YTpgZGF0YTphcHBsaWNhdGlvbi92bmQuaXRrLmFkZHJlc3MsMDoke2Z9YH07VChBLEIsbik7YnJlYWt9Y2FzZSBoLkpzb25Db21wYXRpYmxlOntsZXQgcz1RZS5lbmNvZGUoSlNPTi5zdHJpbmdpZnkoYS5kYXRhKSksZj15KEEscyxuLDApLEI9e3NpemU6cy5idWZmZXIuYnl0ZUxlbmd0aCxkYXRhOmBkYXRhOmFwcGxpY2F0aW9uL3ZuZC5pdGsuYWRkcmVzcywwOiR7Zn1gfTtUKEEsQixuKTticmVha31jYXNlIGguQmluYXJ5U3RyZWFtOntsZXQgcz1hLmRhdGEuZGF0YSxmPXkoQSxzLG4sMCksQj17c2l6ZTpzLmJ1ZmZlci5ieXRlTGVuZ3RoLGRhdGE6YGRhdGE6YXBwbGljYXRpb24vdm5kLml0ay5hZGRyZXNzLDA6JHtmfWB9O1QoQSxCLG4pO2JyZWFrfWNhc2UgaC5UZXh0RmlsZTp7QS5mc193cml0ZUZpbGUoYS5kYXRhLnBhdGgsYS5kYXRhLmRhdGEpO2JyZWFrfWNhc2UgaC5CaW5hcnlGaWxlOntBLmZzX3dyaXRlRmlsZShhLmRhdGEucGF0aCxhLmRhdGEuZGF0YSk7YnJlYWt9Y2FzZSBoLkltYWdlOntsZXQgcz1hLmRhdGEsZj15KEEscy5kYXRhLG4sMCksQj15KEEscy5kaXJlY3Rpb24sbiwxKSxFPXR5cGVvZiBzLm1ldGFkYXRhPy5lbnRyaWVzPCJ1Ij9BcnJheS5mcm9tKHMubWV0YWRhdGEuZW50cmllcygpKTpbXSxsPXtpbWFnZVR5cGU6cy5pbWFnZVR5cGUsbmFtZTpzLm5hbWUsb3JpZ2luOnMub3JpZ2luLHNwYWNpbmc6cy5zcGFjaW5nLGRpcmVjdGlvbjpgZGF0YTphcHBsaWNhdGlvbi92bmQuaXRrLmFkZHJlc3MsMDoke0J9YCxzaXplOnMuc2l6ZSxkYXRhOmBkYXRhOmFwcGxpY2F0aW9uL3ZuZC5pdGsuYWRkcmVzcywwOiR7Zn1gLG1ldGFkYXRhOkV9O1QoQSxsLG4pO2JyZWFrfWNhc2UgaC5NZXNoOntsZXQgcz1hLmRhdGEsZj15KEEscy5wb2ludHMsbiwwKSxCPXkoQSxzLmNlbGxzLG4sMSksRT15KEEscy5wb2ludERhdGEsbiwyKSxsPXkoQSxzLmNlbGxEYXRhLG4sMyksYz17bWVzaFR5cGU6cy5tZXNoVHlwZSxuYW1lOnMubmFtZSxudW1iZXJPZlBvaW50czpzLm51bWJlck9mUG9pbnRzLHBvaW50czpgZGF0YTphcHBsaWNhdGlvbi92bmQuaXRrLmFkZHJlc3MsMDoke2Z9YCxudW1iZXJPZkNlbGxzOnMubnVtYmVyT2ZDZWxscyxjZWxsczpgZGF0YTphcHBsaWNhdGlvbi92bmQuaXRrLmFkZHJlc3MsMDoke0J9YCxjZWxsQnVmZmVyU2l6ZTpzLmNlbGxCdWZmZXJTaXplLG51bWJlck9mUG9pbnRQaXhlbHM6cy5udW1iZXJPZlBvaW50UGl4ZWxzLHBvaW50RGF0YTpgZGF0YTphcHBsaWNhdGlvbi92bmQuaXRrLmFkZHJlc3MsMDoke0V9YCxudW1iZXJPZkNlbGxQaXhlbHM6cy5udW1iZXJPZkNlbGxQaXhlbHMsY2VsbERhdGE6YGRhdGE6YXBwbGljYXRpb24vdm5kLml0ay5hZGRyZXNzLDA6JHtsfWB9O1QoQSxjLG4pO2JyZWFrfWNhc2UgaC5Qb2ludFNldDp7bGV0IHM9YS5kYXRhLGY9eShBLHMucG9pbnRzLG4sMCksQj15KEEscy5wb2ludERhdGEsbiwxKSxFPXtwb2ludFNldFR5cGU6cy5wb2ludFNldFR5cGUsbmFtZTpzLm5hbWUsbnVtYmVyT2ZQb2ludHM6cy5udW1iZXJPZlBvaW50cyxwb2ludHM6YGRhdGE6YXBwbGljYXRpb24vdm5kLml0ay5hZGRyZXNzLDA6JHtmfWAsbnVtYmVyT2ZQb2ludFBpeGVsczpzLm51bWJlck9mUG9pbnRQaXhlbHMscG9pbnREYXRhOmBkYXRhOmFwcGxpY2F0aW9uL3ZuZC5pdGsuYWRkcmVzcywwOiR7Qn1gfTtUKEEsRSxuKTticmVha31jYXNlIGguVHJhbnNmb3JtTGlzdDp7bGV0IHM9YS5kYXRhLGY9W107cy5mb3JFYWNoKChCLEUpPT57bGV0IGM9YGRhdGE6YXBwbGljYXRpb24vdm5kLml0ay5hZGRyZXNzLDA6JHt5KEEsQi5maXhlZFBhcmFtZXRlcnMsbixFKjIpfWAsUz1gZGF0YTphcHBsaWNhdGlvbi92bmQuaXRrLmFkZHJlc3MsMDoke3koQSxCLnBhcmFtZXRlcnMsbixFKjIrMSl9YCxEPXt0cmFuc2Zvcm1UeXBlOkIudHJhbnNmb3JtVHlwZSxudW1iZXJPZkZpeGVkUGFyYW1ldGVyczpCLm51bWJlck9mRml4ZWRQYXJhbWV0ZXJzLG51bWJlck9mUGFyYW1ldGVyczpCLm51bWJlck9mUGFyYW1ldGVycyxuYW1lOkIubmFtZSxpbnB1dFNwYWNlTmFtZTpCLmlucHV0U3BhY2VOYW1lLG91dHB1dFNwYWNlTmFtZTpCLm91dHB1dFNwYWNlTmFtZSxwYXJhbWV0ZXJzOlMsZml4ZWRQYXJhbWV0ZXJzOmN9O2YucHVzaChEKX0pLFQoQSxmLG4pO2JyZWFrfWNhc2UgaC5Qb2x5RGF0YTp7bGV0IHM9YS5kYXRhLGY9eShBLHMucG9pbnRzLG4sMCksQj15KEEscy52ZXJ0aWNlcyxuLDEpLEU9eShBLHMubGluZXMsbiwyKSxsPXkoQSxzLnBvbHlnb25zLG4sMyksYz15KEEscy50cmlhbmdsZVN0cmlwcyxuLDQpLHA9eShBLHMucG9pbnREYXRhLG4sNSksUz15KEEscy5wb2ludERhdGEsbiw2KSxEPXtwb2x5RGF0YVR5cGU6cy5wb2x5RGF0YVR5cGUsbmFtZTpzLm5hbWUsbnVtYmVyT2ZQb2ludHM6cy5udW1iZXJPZlBvaW50cyxwb2ludHM6YGRhdGE6YXBwbGljYXRpb24vdm5kLml0ay5hZGRyZXNzLDA6JHtmfWAsdmVydGljZXNCdWZmZXJTaXplOnMudmVydGljZXNCdWZmZXJTaXplLHZlcnRpY2VzOmBkYXRhOmFwcGxpY2F0aW9uL3ZuZC5pdGsuYWRkcmVzcywwOiR7Qn1gLGxpbmVzQnVmZmVyU2l6ZTpzLmxpbmVzQnVmZmVyU2l6ZSxsaW5lczpgZGF0YTphcHBsaWNhdGlvbi92bmQuaXRrLmFkZHJlc3MsMDoke0V9YCxwb2x5Z29uc0J1ZmZlclNpemU6cy5wb2x5Z29uc0J1ZmZlclNpemUscG9seWdvbnM6YGRhdGE6YXBwbGljYXRpb24vdm5kLml0ay5hZGRyZXNzLDA6JHtsfWAsdHJpYW5nbGVTdHJpcHNCdWZmZXJTaXplOnMudHJpYW5nbGVTdHJpcHNCdWZmZXJTaXplLHRyaWFuZ2xlU3RyaXBzOmBkYXRhOmFwcGxpY2F0aW9uL3ZuZC5pdGsuYWRkcmVzcywwOiR7Y31gLG51bWJlck9mUG9pbnRQaXhlbHM6cy5udW1iZXJPZlBvaW50UGl4ZWxzLHBvaW50RGF0YTpgZGF0YTphcHBsaWNhdGlvbi92bmQuaXRrLmFkZHJlc3MsMDoke3B9YCxudW1iZXJPZkNlbGxQaXhlbHM6cy5udW1iZXJPZkNlbGxQaXhlbHMsY2VsbERhdGE6YGRhdGE6YXBwbGljYXRpb24vdm5kLml0ay5hZGRyZXNzLDA6JHtTfWB9O1QoQSxELG4pO2JyZWFrfWRlZmF1bHQ6dGhyb3cgRXJyb3IoIlVuc3VwcG9ydGVkIGlucHV0IEludGVyZmFjZVR5cGUiKX19KSxBLnJlc2V0TW9kdWxlU3Rkb3V0KCksQS5yZXNldE1vZHVsZVN0ZGVycigpO2xldCByPUEuc3RhY2tTYXZlKCksbz0wO3RyeXtvPUEuY2FsbE1haW4odC5zbGljZSgpKX1jYXRjaChhKXt0aHJvdyB0eXBlb2YgYT09Im51bWJlciImJihjb25zb2xlLmxvZygiRXhjZXB0aW9uIHdoaWxlIHJ1bm5pbmcgcGlwZWxpbmU6IiksY29uc29sZS5sb2coInN0ZG91dDoiLEEuZ2V0TW9kdWxlU3Rkb3V0KCkpLGNvbnNvbGUuZXJyb3IoInN0ZGVycjoiLEEuZ2V0TW9kdWxlU3RkZXJyKCkpLHR5cGVvZiBBLmdldEV4Y2VwdGlvbk1lc3NhZ2U8InUiP2NvbnNvbGUuZXJyb3IoImV4Y2VwdGlvbjoiLEEuZ2V0RXhjZXB0aW9uTWVzc2FnZShhKSk6Y29uc29sZS5lcnJvcigiQnVpbGQgbW9kdWxlIGluIERlYnVnIG1vZGUgZm9yIGV4Y2VwdGlvbiBtZXNzYWdlIGluZm9ybWF0aW9uLiIpKSxhfWZpbmFsbHl7QS5zdGFja1Jlc3RvcmUocil9bGV0IGc9QS5nZXRNb2R1bGVTdGRvdXQoKSxDPUEuZ2V0TW9kdWxlU3RkZXJyKCksUT1bXTtyZXR1cm4gZSE9bnVsbCYmZS5sZW5ndGg+MCYmbz09PTAmJmUuZm9yRWFjaChmdW5jdGlvbihhLG4pe2xldCBzPW51bGw7c3dpdGNoKGEudHlwZSl7Y2FzZSBoLlRleHRTdHJlYW06e2xldCBCPUEuY2NhbGwoIml0a193YXNtX291dHB1dF9hcnJheV9hZGRyZXNzIiwibnVtYmVyIixbIm51bWJlciIsIm51bWJlciIsIm51bWJlciJdLFswLG4sMF0pLEU9QS5jY2FsbCgiaXRrX3dhc21fb3V0cHV0X2FycmF5X3NpemUiLCJudW1iZXIiLFsibnVtYmVyIiwibnVtYmVyIiwibnVtYmVyIl0sWzAsbiwwXSksbD1uZXcgVWludDhBcnJheShBLkhFQVBVOC5idWZmZXIsQixFKTtzPXtkYXRhOkVlLmRlY29kZShsKX07YnJlYWt9Y2FzZSBoLkpzb25Db21wYXRpYmxlOntsZXQgQj1BLmNjYWxsKCJpdGtfd2FzbV9vdXRwdXRfYXJyYXlfYWRkcmVzcyIsIm51bWJlciIsWyJudW1iZXIiLCJudW1iZXIiLCJudW1iZXIiXSxbMCxuLDBdKSxFPUEuY2NhbGwoIml0a193YXNtX291dHB1dF9hcnJheV9zaXplIiwibnVtYmVyIixbIm51bWJlciIsIm51bWJlciIsIm51bWJlciJdLFswLG4sMF0pLGw9bmV3IFVpbnQ4QXJyYXkoQS5IRUFQVTguYnVmZmVyLEIsRSk7cz1KU09OLnBhcnNlKEVlLmRlY29kZShsKSk7YnJlYWt9Y2FzZSBoLkJpbmFyeVN0cmVhbTp7bGV0IEI9QS5jY2FsbCgiaXRrX3dhc21fb3V0cHV0X2FycmF5X2FkZHJlc3MiLCJudW1iZXIiLFsibnVtYmVyIiwibnVtYmVyIiwibnVtYmVyIl0sWzAsbiwwXSksRT1BLmNjYWxsKCJpdGtfd2FzbV9vdXRwdXRfYXJyYXlfc2l6ZSIsIm51bWJlciIsWyJudW1iZXIiLCJudW1iZXIiLCJudW1iZXIiXSxbMCxuLDBdKTtzPXtkYXRhOmZlKEEsQixFKX07YnJlYWt9Y2FzZSBoLlRleHRGaWxlOntzPXtwYXRoOmEuZGF0YS5wYXRoLGRhdGE6QS5mc19yZWFkRmlsZShhLmRhdGEucGF0aCx7ZW5jb2Rpbmc6InV0ZjgifSl9O2JyZWFrfWNhc2UgaC5CaW5hcnlGaWxlOntzPXtwYXRoOmEuZGF0YS5wYXRoLGRhdGE6dHIoQSxhLmRhdGEucGF0aCl9O2JyZWFrfWNhc2UgaC5JbWFnZTp7bGV0IEI9c0EoQSxuKTtCLmRhdGE9RihBLG4sMCxCLmltYWdlVHlwZS5jb21wb25lbnRUeXBlKSxCLmRpcmVjdGlvbj1GKEEsbiwxLHouRmxvYXQ2NCksQi5tZXRhZGF0YT1uZXcgTWFwKEIubWV0YWRhdGEpLHM9QjticmVha31jYXNlIGguTWVzaDp7bGV0IEI9c0EoQSxuKTtCLm51bWJlck9mUG9pbnRzPjA/Qi5wb2ludHM9RihBLG4sMCxCLm1lc2hUeXBlLnBvaW50Q29tcG9uZW50VHlwZSk6Qi5wb2ludHM9SChCLm1lc2hUeXBlLnBvaW50Q29tcG9uZW50VHlwZSxuZXcgQXJyYXlCdWZmZXIoMCkpLEIubnVtYmVyT2ZDZWxscz4wP0IuY2VsbHM9RihBLG4sMSxCLm1lc2hUeXBlLmNlbGxDb21wb25lbnRUeXBlKTpCLmNlbGxzPUgoQi5tZXNoVHlwZS5jZWxsQ29tcG9uZW50VHlwZSxuZXcgQXJyYXlCdWZmZXIoMCkpLEIubnVtYmVyT2ZQb2ludFBpeGVscz4wP0IucG9pbnREYXRhPUYoQSxuLDIsQi5tZXNoVHlwZS5wb2ludFBpeGVsQ29tcG9uZW50VHlwZSk6Qi5wb2ludERhdGE9SChCLm1lc2hUeXBlLnBvaW50UGl4ZWxDb21wb25lbnRUeXBlLG5ldyBBcnJheUJ1ZmZlcigwKSksQi5udW1iZXJPZkNlbGxQaXhlbHM+MD9CLmNlbGxEYXRhPUYoQSxuLDMsQi5tZXNoVHlwZS5jZWxsUGl4ZWxDb21wb25lbnRUeXBlKTpCLmNlbGxEYXRhPUgoQi5tZXNoVHlwZS5jZWxsUGl4ZWxDb21wb25lbnRUeXBlLG5ldyBBcnJheUJ1ZmZlcigwKSkscz1CO2JyZWFrfWNhc2UgaC5Qb2ludFNldDp7bGV0IEI9c0EoQSxuKTtCLm51bWJlck9mUG9pbnRzPjA/Qi5wb2ludHM9RihBLG4sMCxCLnBvaW50U2V0VHlwZS5wb2ludENvbXBvbmVudFR5cGUpOkIucG9pbnRzPUgoQi5wb2ludFNldFR5cGUucG9pbnRDb21wb25lbnRUeXBlLG5ldyBBcnJheUJ1ZmZlcigwKSksQi5udW1iZXJPZlBvaW50UGl4ZWxzPjA/Qi5wb2ludERhdGE9RihBLG4sMSxCLnBvaW50U2V0VHlwZS5wb2ludFBpeGVsQ29tcG9uZW50VHlwZSk6Qi5wb2ludERhdGE9SChCLnBvaW50U2V0VHlwZS5wb2ludFBpeGVsQ29tcG9uZW50VHlwZSxuZXcgQXJyYXlCdWZmZXIoMCkpLHM9QjticmVha31jYXNlIGguVHJhbnNmb3JtTGlzdDp7bGV0IEI9c0EoQSxuKTtCLmZvckVhY2goKEUsbCk9PntFLm51bWJlck9mRml4ZWRQYXJhbWV0ZXJzPjAmJihCW2xdLmZpeGVkUGFyYW1ldGVycz1GKEEsbixsKjIsRS50cmFuc2Zvcm1UeXBlLnBhcmFtZXRlcnNWYWx1ZVR5cGUpKSxFLm51bWJlck9mRml4ZWRQYXJhbWV0ZXJzPjAmJihCW2xdLnBhcmFtZXRlcnM9RihBLG4sbCoyKzEsRS50cmFuc2Zvcm1UeXBlLnBhcmFtZXRlcnNWYWx1ZVR5cGUpKX0pLHM9QjticmVha31jYXNlIGguUG9seURhdGE6e2xldCBCPXNBKEEsbik7Qi5udW1iZXJPZlBvaW50cz4wP0IucG9pbnRzPUYoQSxuLDAsei5GbG9hdDMyKTpCLnBvaW50cz1uZXcgRmxvYXQzMkFycmF5LEIudmVydGljZXNCdWZmZXJTaXplPjA/Qi52ZXJ0aWNlcz1GKEEsbiwxLFIuVUludDMyKTpCLnZlcnRpY2VzPW5ldyBVaW50MzJBcnJheSxCLmxpbmVzQnVmZmVyU2l6ZT4wP0IubGluZXM9RihBLG4sMixSLlVJbnQzMik6Qi5saW5lcz1uZXcgVWludDMyQXJyYXksQi5wb2x5Z29uc0J1ZmZlclNpemU+MD9CLnBvbHlnb25zPUYoQSxuLDMsUi5VSW50MzIpOkIucG9seWdvbnM9bmV3IFVpbnQzMkFycmF5LEIudHJpYW5nbGVTdHJpcHNCdWZmZXJTaXplPjA/Qi50cmlhbmdsZVN0cmlwcz1GKEEsbiw0LFIuVUludDMyKTpCLnRyaWFuZ2xlU3RyaXBzPW5ldyBVaW50MzJBcnJheSxCLm51bWJlck9mUG9pbnRQaXhlbHM+MD9CLnBvaW50RGF0YT1GKEEsbiw1LEIucG9seURhdGFUeXBlLnBvaW50UGl4ZWxDb21wb25lbnRUeXBlKTpCLnBvaW50RGF0YT1IKEIucG9seURhdGFUeXBlLnBvaW50UGl4ZWxDb21wb25lbnRUeXBlLG5ldyBBcnJheUJ1ZmZlcigwKSksQi5udW1iZXJPZkNlbGxQaXhlbHM+MD9CLmNlbGxEYXRhPUYoQSxuLDYsQi5wb2x5RGF0YVR5cGUuY2VsbFBpeGVsQ29tcG9uZW50VHlwZSk6Qi5jZWxsRGF0YT1IKEIucG9seURhdGFUeXBlLmNlbGxQaXhlbENvbXBvbmVudFR5cGUsbmV3IEFycmF5QnVmZmVyKDApKSxzPUI7YnJlYWt9ZGVmYXVsdDp0aHJvdyBFcnJvcigiVW5zdXBwb3J0ZWQgb3V0cHV0IEludGVyZmFjZVR5cGUiKX1sZXQgZj17dHlwZTphLnR5cGUsZGF0YTpzfTtRLnB1c2goZil9KSx7cmV0dXJuVmFsdWU6byxzdGRvdXQ6ZyxzdGRlcnI6QyxvdXRwdXRzOlF9fXZhciBsZT1lcjt2YXIgSXI9dHlwZW9mIGdsb2JhbFRoaXMuU2hhcmVkQXJyYXlCdWZmZXI8InUiO2Z1bmN0aW9uIHJyKEEsdCl7aWYoQT09bnVsbClyZXR1cm5bXTtsZXQgZT1bXTtmb3IobGV0IEk9MDtJPEEubGVuZ3RoO0krKyl7bGV0IHI9b3IoQVtJXSx0KTtyIT09bnVsbCYmZS5wdXNoKHIpfXJldHVybiBlfWZ1bmN0aW9uIG9yKEEsdCl7aWYoQT09bnVsbClyZXR1cm4gbnVsbDtsZXQgZT1udWxsO3JldHVybiBBLmJ1ZmZlciE9PXZvaWQgMD9lPUEuYnVmZmVyOkEuYnl0ZUxlbmd0aCE9PXZvaWQgMCYmKGU9QSksSXImJmUgaW5zdGFuY2VvZiBTaGFyZWRBcnJheUJ1ZmZlcj9udWxsOnQ/ZTplLnNsaWNlKDApfXZhciB1ZT1ycjtmdW5jdGlvbiBncihBKXtyZXR1cm5bQS5kYXRhLEEuZGlyZWN0aW9uXX12YXIgRGU9Z3I7ZnVuY3Rpb24gaXIoQSl7cmV0dXJuW0EucG9pbnRzLEEucG9pbnREYXRhLEEuY2VsbHMsQS5jZWxsRGF0YV19dmFyIGhlPWlyO2Z1bmN0aW9uIG5yKEEpe3JldHVybltBLnBvaW50cyxBLnZlcnRpY2VzLEEubGluZXMsQS5wb2x5Z29ucyxBLnRyaWFuZ2xlU3RyaXBzLEEucG9pbnREYXRhLEEuY2VsbERhdGFdfXZhciBkZT1ucjthc3luYyBmdW5jdGlvbiBzcihBLHQsZSxJKXtsZXQgcj1sZShBLHQsZSxJKSxvPVtdO3JldHVybiByLm91dHB1dHMuZm9yRWFjaChmdW5jdGlvbihnKXtpZihnLnR5cGU9PT1oLkJpbmFyeVN0cmVhbXx8Zy50eXBlPT09aC5CaW5hcnlGaWxlKXtsZXQgQz1nLmRhdGE7by5wdXNoKEMpfWVsc2UgaWYoZy50eXBlPT09aC5JbWFnZSl7bGV0IEM9Zy5kYXRhO28ucHVzaCguLi5EZShDKSl9ZWxzZSBpZihnLnR5cGU9PT1oLk1lc2gpe2xldCBDPWcuZGF0YTtvLnB1c2goLi4uaGUoQykpfWVsc2UgaWYoZy50eXBlPT09aC5Qb2x5RGF0YSl7bGV0IEM9Zy5kYXRhO28ucHVzaCguLi5kZShDKSl9fSksTUEocix1ZShvLCEwKSl9dmFyIHllPXNyO3ZhciBDcj17cnVuUGlwZWxpbmU6YXN5bmMgZnVuY3Rpb24oQSx0LGUsSSxyLG8pe2xldCBnPWF3YWl0IGFlKEEsdCxvKTtyZXR1cm4gYXdhaXQgeWUoZyxlLEkscil9fTtmQShDcik7JTBBLyohIEJ1bmRsZWQgbGljZW5zZSBpbmZvcm1hdGlvbjolMEElMEFjb21saW5rL2Rpc3QvZXNtL2NvbWxpbmsubWpzOiUwQSAgKCoqJTBBICAgKiBAbGljZW5zZSUwQSAgICogQ29weXJpZ2h0IDIwMTkgR29vZ2xlIExMQyUwQSAgICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjAlMEEgICAqKSUwQSovJTBBJzt6dChadCk7ZXhwb3J0e2VBIGFzIGNvbXByZXNzU3RyaW5naWZ5LHFBIGFzIGdldERlZmF1bHRXZWJXb3JrZXIsJCBhcyBnZXRQaXBlbGluZVdvcmtlclVybCxIQSBhcyBnZXRQaXBlbGluZXNCYXNlVXJsLFhuIGFzIGltYWdlVG9Kc29uLCRuIGFzIGpzb25Ub0ltYWdlLGVvIGFzIGpzb25Ub01lc2gscm8gYXMganNvblRvUG9seURhdGEsQW8gYXMgbWVzaFRvSnNvbix0QSBhcyBwYXJzZVN0cmluZ0RlY29tcHJlc3MsdG8gYXMgcG9seURhdGFUb0pzb24sbmcgYXMgc2V0RGVmYXVsdFdlYldvcmtlcix6dCBhcyBzZXRQaXBlbGluZVdvcmtlclVybCxaSSBhcyBzZXRQaXBlbGluZXNCYXNlVXJsLEtBIGFzIHZlcnNpb259OwovKiEgQnVuZGxlZCBsaWNlbnNlIGluZm9ybWF0aW9uOgoKY29tbGluay9kaXN0L2VzbS9jb21saW5rLm1qczoKICAoKioKICAgKiBAbGljZW5zZQogICAqIENvcHlyaWdodCAyMDE5IEdvb2dsZSBMTEMKICAgKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMAogICAqKQoqLwo=""" default_config = JsPackageConfig(default_js_module) js_package = JsPackage(default_config) diff --git a/packages/compress-stringify/python/itkwasm-compress-stringify-wasi/itkwasm_compress_stringify_wasi/_version.py b/packages/compress-stringify/python/itkwasm-compress-stringify-wasi/itkwasm_compress_stringify_wasi/_version.py index ff0416876..903a158ad 100644 --- a/packages/compress-stringify/python/itkwasm-compress-stringify-wasi/itkwasm_compress_stringify_wasi/_version.py +++ b/packages/compress-stringify/python/itkwasm-compress-stringify-wasi/itkwasm_compress_stringify_wasi/_version.py @@ -1 +1 @@ -__version__ = "3.3.1" +__version__ = "3.4.0" diff --git a/packages/compress-stringify/python/itkwasm-compress-stringify-wasi/itkwasm_compress_stringify_wasi/wasm_modules/compress-stringify.wasi.wasm b/packages/compress-stringify/python/itkwasm-compress-stringify-wasi/itkwasm_compress_stringify_wasi/wasm_modules/compress-stringify.wasi.wasm index ff79a55eb..3108cb42e 100755 Binary files a/packages/compress-stringify/python/itkwasm-compress-stringify-wasi/itkwasm_compress_stringify_wasi/wasm_modules/compress-stringify.wasi.wasm and b/packages/compress-stringify/python/itkwasm-compress-stringify-wasi/itkwasm_compress_stringify_wasi/wasm_modules/compress-stringify.wasi.wasm differ diff --git a/packages/compress-stringify/python/itkwasm-compress-stringify-wasi/itkwasm_compress_stringify_wasi/wasm_modules/parse-string-decompress.wasi.wasm b/packages/compress-stringify/python/itkwasm-compress-stringify-wasi/itkwasm_compress_stringify_wasi/wasm_modules/parse-string-decompress.wasi.wasm index 7f4d8ac7b..832956e54 100755 Binary files a/packages/compress-stringify/python/itkwasm-compress-stringify-wasi/itkwasm_compress_stringify_wasi/wasm_modules/parse-string-decompress.wasi.wasm and b/packages/compress-stringify/python/itkwasm-compress-stringify-wasi/itkwasm_compress_stringify_wasi/wasm_modules/parse-string-decompress.wasi.wasm differ diff --git a/packages/compress-stringify/python/itkwasm-compress-stringify/itkwasm_compress_stringify/_version.py b/packages/compress-stringify/python/itkwasm-compress-stringify/itkwasm_compress_stringify/_version.py index ff0416876..903a158ad 100644 --- a/packages/compress-stringify/python/itkwasm-compress-stringify/itkwasm_compress_stringify/_version.py +++ b/packages/compress-stringify/python/itkwasm-compress-stringify/itkwasm_compress_stringify/_version.py @@ -1 +1 @@ -__version__ = "3.3.1" +__version__ = "3.4.0" diff --git a/packages/compress-stringify/typescript/package.json b/packages/compress-stringify/typescript/package.json index 912dea989..cb71d44d3 100644 --- a/packages/compress-stringify/typescript/package.json +++ b/packages/compress-stringify/typescript/package.json @@ -1,6 +1,6 @@ { "name": "@itk-wasm/compress-stringify", - "version": "3.3.1", + "version": "3.4.0", "description": "Zstandard compression and decompression and base64 encoding and decoding in WebAssembly.", "type": "module", "module": "./dist/index.js", diff --git a/packages/core/typescript/create-itk-wasm/package.json b/packages/core/typescript/create-itk-wasm/package.json index 02125670b..d17e7a0aa 100644 --- a/packages/core/typescript/create-itk-wasm/package.json +++ b/packages/core/typescript/create-itk-wasm/package.json @@ -1,6 +1,6 @@ { "name": "create-itk-wasm", - "version": "2.0.0", + "version": "2.1.0", "description": "CLI to create a new ITK-Wasm project or add a pipeline to an existing project.", "type": "module", "exports": { diff --git a/packages/core/typescript/create-itk-wasm/src/generate/package-json.ts b/packages/core/typescript/create-itk-wasm/src/generate/package-json.ts index 51350d415..ce014cee5 100644 --- a/packages/core/typescript/create-itk-wasm/src/generate/package-json.ts +++ b/packages/core/typescript/create-itk-wasm/src/generate/package-json.ts @@ -53,7 +53,7 @@ function generatePackageJson(project: ProjectSpec) { }, devDependencies: { '@itk-wasm/dam': '^1.1.1', - 'itk-wasm': '1.0.0-b.182' + 'itk-wasm': '1.0.0-b.185' } } if (project.author) { diff --git a/packages/core/typescript/itk-wasm/package.json b/packages/core/typescript/itk-wasm/package.json index c21136c26..e21cafbe6 100644 --- a/packages/core/typescript/itk-wasm/package.json +++ b/packages/core/typescript/itk-wasm/package.json @@ -1,6 +1,6 @@ { "name": "itk-wasm", - "version": "1.0.0-b.184", + "version": "1.0.0-b.185", "description": "High-performance spatial analysis in a web browser, Node.js, and reproducible execution across programming languages and hardware architectures.", "type": "module", "module": "./dist/index.js", diff --git a/packages/core/typescript/itk-wasm/src/bindgen/typescript/resources/template.package.json b/packages/core/typescript/itk-wasm/src/bindgen/typescript/resources/template.package.json index 77eaec162..dc4f019f3 100644 --- a/packages/core/typescript/itk-wasm/src/bindgen/typescript/resources/template.package.json +++ b/packages/core/typescript/itk-wasm/src/bindgen/typescript/resources/template.package.json @@ -33,7 +33,7 @@ "author": "", "license": "Apache-2.0", "dependencies": { - "itk-wasm": "1.0.0-b.183" + "itk-wasm": "1.0.0-b.185" }, "devDependencies": { "@itk-wasm/demo-app": "^0.2.0", diff --git a/packages/core/typescript/itk-wasm/src/version.ts b/packages/core/typescript/itk-wasm/src/version.ts index 50a2c9489..ba4fbc594 100644 --- a/packages/core/typescript/itk-wasm/src/version.ts +++ b/packages/core/typescript/itk-wasm/src/version.ts @@ -1,3 +1,3 @@ -const version = '1.0.0-b.184' +const version = '1.0.0-b.185' export default version diff --git a/packages/dicom/package.json b/packages/dicom/package.json index b84b5f196..b3072808e 100644 --- a/packages/dicom/package.json +++ b/packages/dicom/package.json @@ -1,6 +1,6 @@ { "name": "@itk-wasm/dicom-build", - "version": "7.2.3", + "version": "7.3.0", "private": true, "description": "@itk-wasm/dicom build configuration.", "type": "module", diff --git a/packages/dicom/python/itkwasm-dicom-emscripten/itkwasm_dicom_emscripten/_version.py b/packages/dicom/python/itkwasm-dicom-emscripten/itkwasm_dicom_emscripten/_version.py index ec28a33e2..74a6beb5f 100644 --- a/packages/dicom/python/itkwasm-dicom-emscripten/itkwasm_dicom_emscripten/_version.py +++ b/packages/dicom/python/itkwasm-dicom-emscripten/itkwasm_dicom_emscripten/_version.py @@ -1 +1 @@ -__version__ = "7.2.3" +__version__ = "7.3.0" diff --git a/packages/dicom/python/itkwasm-dicom-emscripten/itkwasm_dicom_emscripten/js_package.py b/packages/dicom/python/itkwasm-dicom-emscripten/itkwasm_dicom_emscripten/js_package.py index af78ddc03..f2685dec3 100644 --- a/packages/dicom/python/itkwasm-dicom-emscripten/itkwasm_dicom_emscripten/js_package.py +++ b/packages/dicom/python/itkwasm-dicom-emscripten/itkwasm_dicom_emscripten/js_package.py @@ -3,6 +3,6 @@ from itkwasm.pyodide import JsPackageConfig, JsPackage from ._version import __version__ -default_js_module = """data:text/javascript;base64,dmFyIGp0PU9iamVjdC5kZWZpbmVQcm9wZXJ0eTt2YXIgX3Q9KEEsZSk9Pntmb3IodmFyIHQgaW4gZSlqdChBLHQse2dldDplW3RdLGVudW1lcmFibGU6ITB9KX07dmFyIHp0PSI3LjIuMyIsTUE9enQ7dmFyIFZ0PXtJbnQ4OiJpbnQ4IixVSW50ODoidWludDgiLEludDE2OiJpbnQxNiIsVUludDE2OiJ1aW50MTYiLEludDMyOiJpbnQzMiIsVUludDMyOiJ1aW50MzIiLEludDY0OiJpbnQ2NCIsVUludDY0OiJ1aW50NjQiLFNpemVWYWx1ZVR5cGU6InVpbnQ2NCIsSWRlbnRpZmllclR5cGU6InVpbnQ2NCIsSW5kZXhWYWx1ZVR5cGU6ImludDY0IixPZmZzZXRWYWx1ZVR5cGU6ImludDY0In0sTj1WdDt2YXIgWnQ9e0Zsb2F0MzI6ImZsb2F0MzIiLEZsb2F0NjQ6ImZsb2F0NjQiLFNwYWNlUHJlY2lzaW9uVHlwZToiZmxvYXQ2NCJ9LGo9WnQ7ZnVuY3Rpb24gWHQoQSxlKXtsZXQgdD1udWxsO3N3aXRjaChBKXtjYXNlIE4uVUludDg6e3Q9bmV3IFVpbnQ4QXJyYXkoZSk7YnJlYWt9Y2FzZSBOLkludDg6e3Q9bmV3IEludDhBcnJheShlKTticmVha31jYXNlIE4uVUludDE2Ont0PW5ldyBVaW50MTZBcnJheShlKTticmVha31jYXNlIE4uSW50MTY6e3Q9bmV3IEludDE2QXJyYXkoZSk7YnJlYWt9Y2FzZSBOLlVJbnQzMjp7dD1uZXcgVWludDMyQXJyYXkoZSk7YnJlYWt9Y2FzZSBOLkludDMyOnt0PW5ldyBJbnQzMkFycmF5KGUpO2JyZWFrfWNhc2UgTi5VSW50NjQ6e3R5cGVvZiBnbG9iYWxUaGlzLkJpZ1VpbnQ2NEFycmF5PT0iZnVuY3Rpb24iP3Q9bmV3IEJpZ1VpbnQ2NEFycmF5KGUpOnQ9bmV3IFVpbnQ4QXJyYXkoZSk7YnJlYWt9Y2FzZSBOLkludDY0Ont0eXBlb2YgZ2xvYmFsVGhpcy5CaWdJbnQ2NEFycmF5PT0iZnVuY3Rpb24iP3Q9bmV3IEJpZ0ludDY0QXJyYXkoZSk6dD1uZXcgVWludDhBcnJheShlKTticmVha31jYXNlIGouRmxvYXQzMjp7dD1uZXcgRmxvYXQzMkFycmF5KGUpO2JyZWFrfWNhc2Ugai5GbG9hdDY0Ont0PW5ldyBGbG9hdDY0QXJyYXkoZSk7YnJlYWt9Y2FzZSJudWxsIjp7dD1udWxsO2JyZWFrfWNhc2UgbnVsbDp7dD1udWxsO2JyZWFrfWRlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKCJUeXBlIGlzIG5vdCBzdXBwb3J0ZWQgYXMgYSBUeXBlZEFycmF5Iil9cmV0dXJuIHR9dmFyIEo9WHQ7dmFyICR0PXtVbmtub3duOiJVbmtub3duIixTY2FsYXI6IlNjYWxhciIsUkdCOiJSR0IiLFJHQkE6IlJHQkEiLE9mZnNldDoiT2Zmc2V0IixWZWN0b3I6IlZlY3RvciIsUG9pbnQ6IlBvaW50IixDb3ZhcmlhbnRWZWN0b3I6IkNvdmFyaWFudFZlY3RvciIsU3ltbWV0cmljU2Vjb25kUmFua1RlbnNvcjoiU3ltbWV0cmljU2Vjb25kUmFua1RlbnNvciIsRGlmZnVzaW9uVGVuc29yM0Q6IkRpZmZ1c2lvblRlbnNvcjNEIixDb21wbGV4OiJDb21wbGV4IixGaXhlZEFycmF5OiJGaXhlZEFycmF5IixBcnJheToiQXJyYXkiLE1hdHJpeDoiTWF0cml4IixWYXJpYWJsZUxlbmd0aFZlY3RvcjoiVmFyaWFibGVMZW5ndGhWZWN0b3IiLFZhcmlhYmxlU2l6ZU1hdHJpeDoiVmFyaWFibGVTaXplTWF0cml4In0sa2U9JHQ7dmFyIHFBPWNsYXNze2RpbWVuc2lvbjtjb21wb25lbnRUeXBlO3BpeGVsVHlwZTtjb21wb25lbnRzO2NvbnN0cnVjdG9yKGU9Mix0PU4uVUludDgscj1rZS5TY2FsYXIsaT0xKXt0aGlzLmRpbWVuc2lvbj1lLHRoaXMuY29tcG9uZW50VHlwZT10LHRoaXMucGl4ZWxUeXBlPXIsdGhpcy5jb21wb25lbnRzPWl9fSxSZT1xQTtmdW5jdGlvbiBBcihBLGUsdCxyLGkpe0Fbcit0KmVdPWl9dmFyIFVlPUFyO3ZhciBXQT1jbGFzc3tpbWFnZVR5cGU7bmFtZT0iSW1hZ2UiO29yaWdpbjtzcGFjaW5nO2RpcmVjdGlvbjtzaXplO21ldGFkYXRhO2RhdGE7Y29uc3RydWN0b3IoZT1uZXcgUmUpe3RoaXMuaW1hZ2VUeXBlPWU7bGV0IHQ9ZS5kaW1lbnNpb247dGhpcy5vcmlnaW49bmV3IEFycmF5KHQpLHRoaXMub3JpZ2luLmZpbGwoMCksdGhpcy5zcGFjaW5nPW5ldyBBcnJheSh0KSx0aGlzLnNwYWNpbmcuZmlsbCgxKSx0aGlzLmRpcmVjdGlvbj1uZXcgRmxvYXQ2NEFycmF5KHQqdCksdGhpcy5kaXJlY3Rpb24uZmlsbCgwKTtmb3IobGV0IHI9MDtyPHQ7cisrKVVlKHRoaXMuZGlyZWN0aW9uLHQscixyLDEpO3RoaXMuc2l6ZT1uZXcgQXJyYXkodCksdGhpcy5zaXplLmZpbGwoMCksdGhpcy5tZXRhZGF0YT1uZXcgTWFwLHRoaXMuZGF0YT1udWxsfX0sTmU9V0E7ZnVuY3Rpb24gZXIoQSl7aWYoQS5sZW5ndGg8MSl0aHJvdyBFcnJvcigiQXQgbGVhc3Qgb25lIGltYWdlcyBpcyByZXF1aXJlZC4iKTtsZXQgZT1BWzBdO2lmKGUuZGF0YT09PW51bGwpdGhyb3cgRXJyb3IoIkltYWdlIGRhdGEgaXMgbnVsbC4iKTtsZXQgdD1uZXcgTmUoZS5pbWFnZVR5cGUpO3Qub3JpZ2luPUFycmF5LmZyb20oZS5vcmlnaW4pLHQuc3BhY2luZz1BcnJheS5mcm9tKGUuc3BhY2luZyk7bGV0IHI9dC5pbWFnZVR5cGUuZGltZW5zaW9uO3QuZGlyZWN0aW9uPWUuZGlyZWN0aW9uLnNsaWNlKCk7bGV0IGk9ci0xO3Quc2l6ZT1BcnJheS5mcm9tKGUuc2l6ZSk7bGV0IG49QS5yZWR1Y2UoKGEscyk9PmErcy5zaXplW2ldLDApO3Quc2l6ZVtpXT1uO2xldCBvPXQuc2l6ZS5yZWR1Y2UoKGEscyk9PmEqcywxKSp0LmltYWdlVHlwZS5jb21wb25lbnRzLGc9ZS5kYXRhLmNvbnN0cnVjdG9yO3QuZGF0YT1uZXcgZyhvKTtsZXQgYz10LmltYWdlVHlwZS5jb21wb25lbnRzO2ZvcihsZXQgYT0wO2E8dC5zaXplLmxlbmd0aC0xO2ErKyljKj10LnNpemVbYV07bGV0IEk9MDtpZih0LmRhdGEhPW51bGwpZm9yKGxldCBhPTA7YTxBLmxlbmd0aDthKyspdC5kYXRhLnNldChBW2FdLmRhdGEsYypJKSxJKz1BW2FdLnNpemVbaV07ZWxzZSB0aHJvdyBFcnJvcigiQ291bGQgbm90IGNyZWF0ZSByZXN1bHQgaW1hZ2UgZGF0YS4iKTtyZXR1cm4gdH12YXIgWUE9ZXI7dmFyIEtBPWNsYXNze2Zjbjt3b3JrZXJRdWV1ZTtydW5JbmZvO2NvbnN0cnVjdG9yKGUsdCl7dGhpcy5mY249dCx0aGlzLndvcmtlclF1ZXVlPW5ldyBBcnJheShlKSx0aGlzLndvcmtlclF1ZXVlLmZpbGwobnVsbCksdGhpcy5ydW5JbmZvPVtdfXJ1blRhc2tzKGUsdD1udWxsKXtsZXQgcj17dGFza1F1ZXVlOltdLHJlc3VsdHM6W10sYWRkaW5nVGFza3M6ITEscG9zdHBvbmVkOiExLHJ1bm5pbmdXb3JrZXJzOjAsaW5kZXg6MCxjb21wbGV0ZWRUYXNrczowLHByb2dyZXNzQ2FsbGJhY2s6dCxjYW5jZWxlZDohMX07cmV0dXJuIHRoaXMucnVuSW5mby5wdXNoKHIpLHIuaW5kZXg9dGhpcy5ydW5JbmZvLmxlbmd0aC0xLHtwcm9taXNlOm5ldyBQcm9taXNlKChpLG4pPT57ci5yZXNvbHZlPWksci5yZWplY3Q9bixyLnJlc3VsdHM9bmV3IEFycmF5KGUubGVuZ3RoKSxyLmNvbXBsZXRlZFRhc2tzPTAsci5hZGRpbmdUYXNrcz0hMCxlLmZvckVhY2goKG8sZyk9Pnt0aGlzLmFkZFRhc2soci5pbmRleCxnLG8pfSksci5hZGRpbmdUYXNrcz0hMX0pLHJ1bklkOnIuaW5kZXh9fXRlcm1pbmF0ZVdvcmtlcnMoKXtmb3IobGV0IGU9MDtlPHRoaXMud29ya2VyUXVldWUubGVuZ3RoO2UrKyl7bGV0IHQ9dGhpcy53b3JrZXJRdWV1ZVtlXTt0Py50ZXJtaW5hdGUoKSx0aGlzLndvcmtlclF1ZXVlW2VdPW51bGx9fWNhbmNlbChlKXtsZXQgdD10aGlzLnJ1bkluZm9bZV07dCE9bnVsbCYmKHQuY2FuY2VsZWQ9ITApfWFkZFRhc2soZSx0LHIpe2xldCBpPXRoaXMucnVuSW5mb1tlXTtpZihpPy5jYW5jZWxlZD09PSEwKXtpLnJlamVjdCgiUmVtYWluaW5nIHRhc2tzIGNhbmNlbGVkIiksdGhpcy5jbGVhclRhc2soaS5pbmRleCk7cmV0dXJufWlmKHRoaXMud29ya2VyUXVldWUubGVuZ3RoPjApe2xldCBuPXRoaXMud29ya2VyUXVldWUucG9wKCk7aS5ydW5uaW5nV29ya2VycysrLHJbci5sZW5ndGgtMV0ud2ViV29ya2VyPW4sdGhpcy5mY24oLi4ucikudGhlbigoe3dlYldvcmtlcjpvLC4uLmd9KT0+e2lmKHRoaXMud29ya2VyUXVldWUucHVzaChvKSx0aGlzLnJ1bkluZm9bZV0hPT1udWxsKXtpZihpLnJ1bm5pbmdXb3JrZXJzLS0saS5yZXN1bHRzW3RdPWcsaS5jb21wbGV0ZWRUYXNrcysrLGkucHJvZ3Jlc3NDYWxsYmFjayE9bnVsbCYmaS5wcm9ncmVzc0NhbGxiYWNrKGkuY29tcGxldGVkVGFza3MsaS5yZXN1bHRzLmxlbmd0aCksaS50YXNrUXVldWUubGVuZ3RoPjApe2xldCBjPWkudGFza1F1ZXVlLnNoaWZ0KCk7dGhpcy5hZGRUYXNrKGUsY1swXSxjWzFdKX1lbHNlIGlmKCFpLmFkZGluZ1Rhc2tzJiZpLnJ1bm5pbmdXb3JrZXJzPT09MCl7bGV0IGM9aS5yZXN1bHRzO2kucmVzb2x2ZShjKSx0aGlzLmNsZWFyVGFzayhpLmluZGV4KX19fSkuY2F0Y2gobz0+e2kucmVqZWN0KG8pLHRoaXMuY2xlYXJUYXNrKGkuaW5kZXgpfSl9ZWxzZSBpLnJ1bm5pbmdXb3JrZXJzIT09MHx8aS5wb3N0cG9uZWQ/aS50YXNrUXVldWUucHVzaChbdCxyXSk6KGkucG9zdHBvbmVkPSEwLHNldFRpbWVvdXQoKCk9PntpLnBvc3Rwb25lZD0hMSx0aGlzLmFkZFRhc2soaS5pbmRleCx0LHIpfSw1MCkpfWNsZWFyVGFzayhlKXt0aGlzLnJ1bkluZm9bZV0ucmVzdWx0cz1bXSx0aGlzLnJ1bkluZm9bZV0udGFza1F1ZXVlPVtdLHRoaXMucnVuSW5mb1tlXS5wcm9ncmVzc0NhbGxiYWNrPW51bGwsdGhpcy5ydW5JbmZvW2VdLmNhbmNlbGVkPW51bGwsdGhpcy5ydW5JbmZvW2VdLnJlamVjdD0oKT0+e30sdGhpcy5ydW5JbmZvW2VdLnJlc29sdmU9KCk9Pnt9fX0sdkE9S0E7dmFyIHRyPXtUZXh0RmlsZToiVGV4dEZpbGUiLEJpbmFyeUZpbGU6IkJpbmFyeUZpbGUiLFRleHRTdHJlYW06IlRleHRTdHJlYW0iLEJpbmFyeVN0cmVhbToiQmluYXJ5U3RyZWFtIixJbWFnZToiSW1hZ2UiLFBvaW50U2V0OiJQb2ludFNldCIsTWVzaDoiTWVzaCIsUG9seURhdGE6IlBvbHlEYXRhIixUcmFuc2Zvcm1MaXN0OiJUcmFuc2Zvcm1MaXN0IixKc29uQ29tcGF0aWJsZToiSnNvbkNvbXBhdGlibGUifSxFPXRyO3ZhciBMZT1TeW1ib2woIkNvbWxpbmsucHJveHkiKSxycj1TeW1ib2woIkNvbWxpbmsuZW5kcG9pbnQiKSx6QT1TeW1ib2woIkNvbWxpbmsucmVsZWFzZVByb3h5IiksakE9U3ltYm9sKCJDb21saW5rLmZpbmFsaXplciIpLHBBPVN5bWJvbCgiQ29tbGluay50aHJvd24iKSx4ZT1BPT50eXBlb2YgQT09Im9iamVjdCImJkEhPT1udWxsfHx0eXBlb2YgQT09ImZ1bmN0aW9uIixucj17Y2FuSGFuZGxlOkE9PnhlKEEpJiZBW0xlXSxzZXJpYWxpemUoQSl7bGV0e3BvcnQxOmUscG9ydDI6dH09bmV3IE1lc3NhZ2VDaGFubmVsO3JldHVybiBQZShBLGUpLFt0LFt0XV19LGRlc2VyaWFsaXplKEEpe3JldHVybiBBLnN0YXJ0KCksVkEoQSl9fSxpcj17Y2FuSGFuZGxlOkE9PnhlKEEpJiZwQSBpbiBBLHNlcmlhbGl6ZSh7dmFsdWU6QX0pe2xldCBlO3JldHVybiBBIGluc3RhbmNlb2YgRXJyb3I/ZT17aXNFcnJvcjohMCx2YWx1ZTp7bWVzc2FnZTpBLm1lc3NhZ2UsbmFtZTpBLm5hbWUsc3RhY2s6QS5zdGFja319OmU9e2lzRXJyb3I6ITEsdmFsdWU6QX0sW2UsW11dfSxkZXNlcmlhbGl6ZShBKXt0aHJvdyBBLmlzRXJyb3I/T2JqZWN0LmFzc2lnbihuZXcgRXJyb3IoQS52YWx1ZS5tZXNzYWdlKSxBLnZhbHVlKTpBLnZhbHVlfX0sT2U9bmV3IE1hcChbWyJwcm94eSIsbnJdLFsidGhyb3ciLGlyXV0pO2Z1bmN0aW9uIG9yKEEsZSl7Zm9yKGxldCB0IG9mIEEpaWYoZT09PXR8fHQ9PT0iKiJ8fHQgaW5zdGFuY2VvZiBSZWdFeHAmJnQudGVzdChlKSlyZXR1cm4hMDtyZXR1cm4hMX1mdW5jdGlvbiBQZShBLGU9Z2xvYmFsVGhpcyx0PVsiKiJdKXtlLmFkZEV2ZW50TGlzdGVuZXIoIm1lc3NhZ2UiLGZ1bmN0aW9uIHIoaSl7aWYoIWl8fCFpLmRhdGEpcmV0dXJuO2lmKCFvcih0LGkub3JpZ2luKSl7Y29uc29sZS53YXJuKGBJbnZhbGlkIG9yaWdpbiAnJHtpLm9yaWdpbn0nIGZvciBjb21saW5rIHByb3h5YCk7cmV0dXJufWxldHtpZDpuLHR5cGU6byxwYXRoOmd9PU9iamVjdC5hc3NpZ24oe3BhdGg6W119LGkuZGF0YSksYz0oaS5kYXRhLmFyZ3VtZW50TGlzdHx8W10pLm1hcChLKSxJO3RyeXtsZXQgYT1nLnNsaWNlKDAsLTEpLnJlZHVjZSgocCxsKT0+cFtsXSxBKSxzPWcucmVkdWNlKChwLGwpPT5wW2xdLEEpO3N3aXRjaChvKXtjYXNlIkdFVCI6ST1zO2JyZWFrO2Nhc2UiU0VUIjphW2cuc2xpY2UoLTEpWzBdXT1LKGkuZGF0YS52YWx1ZSksST0hMDticmVhaztjYXNlIkFQUExZIjpJPXMuYXBwbHkoYSxjKTticmVhaztjYXNlIkNPTlNUUlVDVCI6e2xldCBwPW5ldyBzKC4uLmMpO0k9bHIocCl9YnJlYWs7Y2FzZSJFTkRQT0lOVCI6e2xldHtwb3J0MTpwLHBvcnQyOmx9PW5ldyBNZXNzYWdlQ2hhbm5lbDtQZShBLGwpLEk9WkEocCxbcF0pfWJyZWFrO2Nhc2UiUkVMRUFTRSI6ST12b2lkIDA7YnJlYWs7ZGVmYXVsdDpyZXR1cm59fWNhdGNoKGEpe0k9e3ZhbHVlOmEsW3BBXTowfX1Qcm9taXNlLnJlc29sdmUoSSkuY2F0Y2goYT0+KHt2YWx1ZTphLFtwQV06MH0pKS50aGVuKGE9PntsZXRbcyxwXT1tQShhKTtlLnBvc3RNZXNzYWdlKE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSxzKSx7aWQ6bn0pLHApLG89PT0iUkVMRUFTRSImJihlLnJlbW92ZUV2ZW50TGlzdGVuZXIoIm1lc3NhZ2UiLHIpLEdlKGUpLGpBIGluIEEmJnR5cGVvZiBBW2pBXT09ImZ1bmN0aW9uIiYmQVtqQV0oKSl9KS5jYXRjaChhPT57bGV0W3MscF09bUEoe3ZhbHVlOm5ldyBUeXBlRXJyb3IoIlVuc2VyaWFsaXphYmxlIHJldHVybiB2YWx1ZSIpLFtwQV06MH0pO2UucG9zdE1lc3NhZ2UoT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LHMpLHtpZDpufSkscCl9KX0pLGUuc3RhcnQmJmUuc3RhcnQoKX1mdW5jdGlvbiBhcihBKXtyZXR1cm4gQS5jb25zdHJ1Y3Rvci5uYW1lPT09Ik1lc3NhZ2VQb3J0In1mdW5jdGlvbiBHZShBKXthcihBKSYmQS5jbG9zZSgpfWZ1bmN0aW9uIFZBKEEsZSl7cmV0dXJuIF9BKEEsW10sZSl9ZnVuY3Rpb24gQ0EoQSl7aWYoQSl0aHJvdyBuZXcgRXJyb3IoIlByb3h5IGhhcyBiZWVuIHJlbGVhc2VkIGFuZCBpcyBub3QgdXNlYWJsZSIpfWZ1bmN0aW9uIEplKEEpe3JldHVybiBfKEEse3R5cGU6IlJFTEVBU0UifSkudGhlbigoKT0+e0dlKEEpfSl9dmFyIEVBPW5ldyBXZWFrTWFwLFFBPSJGaW5hbGl6YXRpb25SZWdpc3RyeSJpbiBnbG9iYWxUaGlzJiZuZXcgRmluYWxpemF0aW9uUmVnaXN0cnkoQT0+e2xldCBlPShFQS5nZXQoQSl8fDApLTE7RUEuc2V0KEEsZSksZT09PTAmJkplKEEpfSk7ZnVuY3Rpb24gc3IoQSxlKXtsZXQgdD0oRUEuZ2V0KGUpfHwwKSsxO0VBLnNldChlLHQpLFFBJiZRQS5yZWdpc3RlcihBLGUsQSl9ZnVuY3Rpb24gSXIoQSl7UUEmJlFBLnVucmVnaXN0ZXIoQSl9ZnVuY3Rpb24gX0EoQSxlPVtdLHQ9ZnVuY3Rpb24oKXt9KXtsZXQgcj0hMSxpPW5ldyBQcm94eSh0LHtnZXQobixvKXtpZihDQShyKSxvPT09ekEpcmV0dXJuKCk9PntJcihpKSxKZShBKSxyPSEwfTtpZihvPT09InRoZW4iKXtpZihlLmxlbmd0aD09PTApcmV0dXJue3RoZW46KCk9Pml9O2xldCBnPV8oQSx7dHlwZToiR0VUIixwYXRoOmUubWFwKGM9PmMudG9TdHJpbmcoKSl9KS50aGVuKEspO3JldHVybiBnLnRoZW4uYmluZChnKX1yZXR1cm4gX0EoQSxbLi4uZSxvXSl9LHNldChuLG8sZyl7Q0Eocik7bGV0W2MsSV09bUEoZyk7cmV0dXJuIF8oQSx7dHlwZToiU0VUIixwYXRoOlsuLi5lLG9dLm1hcChhPT5hLnRvU3RyaW5nKCkpLHZhbHVlOmN9LEkpLnRoZW4oSyl9LGFwcGx5KG4sbyxnKXtDQShyKTtsZXQgYz1lW2UubGVuZ3RoLTFdO2lmKGM9PT1ycilyZXR1cm4gXyhBLHt0eXBlOiJFTkRQT0lOVCJ9KS50aGVuKEspO2lmKGM9PT0iYmluZCIpcmV0dXJuIF9BKEEsZS5zbGljZSgwLC0xKSk7bGV0W0ksYV09VGUoZyk7cmV0dXJuIF8oQSx7dHlwZToiQVBQTFkiLHBhdGg6ZS5tYXAocz0+cy50b1N0cmluZygpKSxhcmd1bWVudExpc3Q6SX0sYSkudGhlbihLKX0sY29uc3RydWN0KG4sbyl7Q0Eocik7bGV0W2csY109VGUobyk7cmV0dXJuIF8oQSx7dHlwZToiQ09OU1RSVUNUIixwYXRoOmUubWFwKEk9PkkudG9TdHJpbmcoKSksYXJndW1lbnRMaXN0Omd9LGMpLnRoZW4oSyl9fSk7cmV0dXJuIHNyKGksQSksaX1mdW5jdGlvbiBncihBKXtyZXR1cm4gQXJyYXkucHJvdG90eXBlLmNvbmNhdC5hcHBseShbXSxBKX1mdW5jdGlvbiBUZShBKXtsZXQgZT1BLm1hcChtQSk7cmV0dXJuW2UubWFwKHQ9PnRbMF0pLGdyKGUubWFwKHQ9PnRbMV0pKV19dmFyIEhlPW5ldyBXZWFrTWFwO2Z1bmN0aW9uIFpBKEEsZSl7cmV0dXJuIEhlLnNldChBLGUpLEF9ZnVuY3Rpb24gbHIoQSl7cmV0dXJuIE9iamVjdC5hc3NpZ24oQSx7W0xlXTohMH0pfWZ1bmN0aW9uIG1BKEEpe2ZvcihsZXRbZSx0XW9mIE9lKWlmKHQuY2FuSGFuZGxlKEEpKXtsZXRbcixpXT10LnNlcmlhbGl6ZShBKTtyZXR1cm5be3R5cGU6IkhBTkRMRVIiLG5hbWU6ZSx2YWx1ZTpyfSxpXX1yZXR1cm5be3R5cGU6IlJBVyIsdmFsdWU6QX0sSGUuZ2V0KEEpfHxbXV19ZnVuY3Rpb24gSyhBKXtzd2l0Y2goQS50eXBlKXtjYXNlIkhBTkRMRVIiOnJldHVybiBPZS5nZXQoQS5uYW1lKS5kZXNlcmlhbGl6ZShBLnZhbHVlKTtjYXNlIlJBVyI6cmV0dXJuIEEudmFsdWV9fWZ1bmN0aW9uIF8oQSxlLHQpe3JldHVybiBuZXcgUHJvbWlzZShyPT57bGV0IGk9dXIoKTtBLmFkZEV2ZW50TGlzdGVuZXIoIm1lc3NhZ2UiLGZ1bmN0aW9uIG4obyl7IW8uZGF0YXx8IW8uZGF0YS5pZHx8by5kYXRhLmlkIT09aXx8KEEucmVtb3ZlRXZlbnRMaXN0ZW5lcigibWVzc2FnZSIsbikscihvLmRhdGEpKX0pLEEuc3RhcnQmJkEuc3RhcnQoKSxBLnBvc3RNZXNzYWdlKE9iamVjdC5hc3NpZ24oe2lkOml9LGUpLHQpfSl9ZnVuY3Rpb24gdXIoKXtyZXR1cm4gbmV3IEFycmF5KDQpLmZpbGwoMCkubWFwKCgpPT5NYXRoLmZsb29yKE1hdGgucmFuZG9tKCkqTnVtYmVyLk1BWF9TQUZFX0lOVEVHRVIpLnRvU3RyaW5nKDE2KSkuam9pbigiLSIpfWZ1bmN0aW9uIHJBKEEsZSl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIEEuYXBwbHkoZSxhcmd1bWVudHMpfX12YXJ7dG9TdHJpbmc6Y3J9PU9iamVjdC5wcm90b3R5cGUse2dldFByb3RvdHlwZU9mOkFlfT1PYmplY3QsaEE9KEE9PmU9PntsZXQgdD1jci5jYWxsKGUpO3JldHVybiBBW3RdfHwoQVt0XT10LnNsaWNlKDgsLTEpLnRvTG93ZXJDYXNlKCkpfSkoT2JqZWN0LmNyZWF0ZShudWxsKSkseD1BPT4oQT1BLnRvTG93ZXJDYXNlKCksZT0+aEEoZSk9PT1BKSx5QT1BPT5lPT50eXBlb2YgZT09PUEse2lzQXJyYXk6en09QXJyYXksbkE9eUEoInVuZGVmaW5lZCIpO2Z1bmN0aW9uIEJyKEEpe3JldHVybiBBIT09bnVsbCYmIW5BKEEpJiZBLmNvbnN0cnVjdG9yIT09bnVsbCYmIW5BKEEuY29uc3RydWN0b3IpJiZMKEEuY29uc3RydWN0b3IuaXNCdWZmZXIpJiZBLmNvbnN0cnVjdG9yLmlzQnVmZmVyKEEpfXZhciBZZT14KCJBcnJheUJ1ZmZlciIpO2Z1bmN0aW9uIGZyKEEpe2xldCBlO3JldHVybiB0eXBlb2YgQXJyYXlCdWZmZXI8InUiJiZBcnJheUJ1ZmZlci5pc1ZpZXc/ZT1BcnJheUJ1ZmZlci5pc1ZpZXcoQSk6ZT1BJiZBLmJ1ZmZlciYmWWUoQS5idWZmZXIpLGV9dmFyIENyPXlBKCJzdHJpbmciKSxMPXlBKCJmdW5jdGlvbiIpLEtlPXlBKCJudW1iZXIiKSx3QT1BPT5BIT09bnVsbCYmdHlwZW9mIEE9PSJvYmplY3QiLHByPUE9PkE9PT0hMHx8QT09PSExLGRBPUE9PntpZihoQShBKSE9PSJvYmplY3QiKXJldHVybiExO2xldCBlPUFlKEEpO3JldHVybihlPT09bnVsbHx8ZT09PU9iamVjdC5wcm90b3R5cGV8fE9iamVjdC5nZXRQcm90b3R5cGVPZihlKT09PW51bGwpJiYhKFN5bWJvbC50b1N0cmluZ1RhZyBpbiBBKSYmIShTeW1ib2wuaXRlcmF0b3IgaW4gQSl9LEVyPXgoIkRhdGUiKSxRcj14KCJGaWxlIiksbXI9eCgiQmxvYiIpLGRyPXgoIkZpbGVMaXN0IiksaHI9QT0+d0EoQSkmJkwoQS5waXBlKSx5cj1BPT57bGV0IGU7cmV0dXJuIEEmJih0eXBlb2YgRm9ybURhdGE9PSJmdW5jdGlvbiImJkEgaW5zdGFuY2VvZiBGb3JtRGF0YXx8TChBLmFwcGVuZCkmJigoZT1oQShBKSk9PT0iZm9ybWRhdGEifHxlPT09Im9iamVjdCImJkwoQS50b1N0cmluZykmJkEudG9TdHJpbmcoKT09PSJbb2JqZWN0IEZvcm1EYXRhXSIpKX0sd3I9eCgiVVJMU2VhcmNoUGFyYW1zIiksW0RyLFNyLGJyLEZyXT1bIlJlYWRhYmxlU3RyZWFtIiwiUmVxdWVzdCIsIlJlc3BvbnNlIiwiSGVhZGVycyJdLm1hcCh4KSxrcj1BPT5BLnRyaW0/QS50cmltKCk6QS5yZXBsYWNlKC9eW1xzXHVGRUZGXHhBMF0rfFtcc1x1RkVGRlx4QTBdKyQvZywiIik7ZnVuY3Rpb24gaUEoQSxlLHthbGxPd25LZXlzOnQ9ITF9PXt9KXtpZihBPT09bnVsbHx8dHlwZW9mIEE+InUiKXJldHVybjtsZXQgcixpO2lmKHR5cGVvZiBBIT0ib2JqZWN0IiYmKEE9W0FdKSx6KEEpKWZvcihyPTAsaT1BLmxlbmd0aDtyPGk7cisrKWUuY2FsbChudWxsLEFbcl0scixBKTtlbHNle2xldCBuPXQ/T2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoQSk6T2JqZWN0LmtleXMoQSksbz1uLmxlbmd0aCxnO2ZvcihyPTA7cjxvO3IrKylnPW5bcl0sZS5jYWxsKG51bGwsQVtnXSxnLEEpfX1mdW5jdGlvbiB2ZShBLGUpe2U9ZS50b0xvd2VyQ2FzZSgpO2xldCB0PU9iamVjdC5rZXlzKEEpLHI9dC5sZW5ndGgsaTtmb3IoO3ItLSA+MDspaWYoaT10W3JdLGU9PT1pLnRvTG93ZXJDYXNlKCkpcmV0dXJuIGk7cmV0dXJuIG51bGx9dmFyIHY9dHlwZW9mIGdsb2JhbFRoaXM8InUiP2dsb2JhbFRoaXM6dHlwZW9mIHNlbGY8InUiP3NlbGY6dHlwZW9mIHdpbmRvdzwidSI/d2luZG93Omdsb2JhbCxqZT1BPT4hbkEoQSkmJkEhPT12O2Z1bmN0aW9uICRBKCl7bGV0e2Nhc2VsZXNzOkF9PWplKHRoaXMpJiZ0aGlzfHx7fSxlPXt9LHQ9KHIsaSk9PntsZXQgbj1BJiZ2ZShlLGkpfHxpO2RBKGVbbl0pJiZkQShyKT9lW25dPSRBKGVbbl0scik6ZEEocik/ZVtuXT0kQSh7fSxyKTp6KHIpP2Vbbl09ci5zbGljZSgpOmVbbl09cn07Zm9yKGxldCByPTAsaT1hcmd1bWVudHMubGVuZ3RoO3I8aTtyKyspYXJndW1lbnRzW3JdJiZpQShhcmd1bWVudHNbcl0sdCk7cmV0dXJuIGV9dmFyIFJyPShBLGUsdCx7YWxsT3duS2V5czpyfT17fSk9PihpQShlLChpLG4pPT57dCYmTChpKT9BW25dPXJBKGksdCk6QVtuXT1pfSx7YWxsT3duS2V5czpyfSksQSksVXI9QT0+KEEuY2hhckNvZGVBdCgwKT09PTY1Mjc5JiYoQT1BLnNsaWNlKDEpKSxBKSxOcj0oQSxlLHQscik9PntBLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKGUucHJvdG90eXBlLHIpLEEucHJvdG90eXBlLmNvbnN0cnVjdG9yPUEsT2JqZWN0LmRlZmluZVByb3BlcnR5KEEsInN1cGVyIix7dmFsdWU6ZS5wcm90b3R5cGV9KSx0JiZPYmplY3QuYXNzaWduKEEucHJvdG90eXBlLHQpfSxUcj0oQSxlLHQscik9PntsZXQgaSxuLG8sZz17fTtpZihlPWV8fHt9LEE9PW51bGwpcmV0dXJuIGU7ZG97Zm9yKGk9T2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoQSksbj1pLmxlbmd0aDtuLS0gPjA7KW89aVtuXSwoIXJ8fHIobyxBLGUpKSYmIWdbb10mJihlW29dPUFbb10sZ1tvXT0hMCk7QT10IT09ITEmJkFlKEEpfXdoaWxlKEEmJighdHx8dChBLGUpKSYmQSE9PU9iamVjdC5wcm90b3R5cGUpO3JldHVybiBlfSxMcj0oQSxlLHQpPT57QT1TdHJpbmcoQSksKHQ9PT12b2lkIDB8fHQ+QS5sZW5ndGgpJiYodD1BLmxlbmd0aCksdC09ZS5sZW5ndGg7bGV0IHI9QS5pbmRleE9mKGUsdCk7cmV0dXJuIHIhPT0tMSYmcj09PXR9LHhyPUE9PntpZighQSlyZXR1cm4gbnVsbDtpZih6KEEpKXJldHVybiBBO2xldCBlPUEubGVuZ3RoO2lmKCFLZShlKSlyZXR1cm4gbnVsbDtsZXQgdD1uZXcgQXJyYXkoZSk7Zm9yKDtlLS0gPjA7KXRbZV09QVtlXTtyZXR1cm4gdH0sT3I9KEE9PmU9PkEmJmUgaW5zdGFuY2VvZiBBKSh0eXBlb2YgVWludDhBcnJheTwidSImJkFlKFVpbnQ4QXJyYXkpKSxQcj0oQSxlKT0+e2xldCByPShBJiZBW1N5bWJvbC5pdGVyYXRvcl0pLmNhbGwoQSksaTtmb3IoOyhpPXIubmV4dCgpKSYmIWkuZG9uZTspe2xldCBuPWkudmFsdWU7ZS5jYWxsKEEsblswXSxuWzFdKX19LEdyPShBLGUpPT57bGV0IHQscj1bXTtmb3IoOyh0PUEuZXhlYyhlKSkhPT1udWxsOylyLnB1c2godCk7cmV0dXJuIHJ9LEpyPXgoIkhUTUxGb3JtRWxlbWVudCIpLEhyPUE9PkEudG9Mb3dlckNhc2UoKS5yZXBsYWNlKC9bLV9cc10oW2EtelxkXSkoXHcqKS9nLGZ1bmN0aW9uKHQscixpKXtyZXR1cm4gci50b1VwcGVyQ2FzZSgpK2l9KSxxZT0oKHtoYXNPd25Qcm9wZXJ0eTpBfSk9PihlLHQpPT5BLmNhbGwoZSx0KSkoT2JqZWN0LnByb3RvdHlwZSksTXI9eCgiUmVnRXhwIiksX2U9KEEsZSk9PntsZXQgdD1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyhBKSxyPXt9O2lBKHQsKGksbik9PntsZXQgbzsobz1lKGksbixBKSkhPT0hMSYmKHJbbl09b3x8aSl9KSxPYmplY3QuZGVmaW5lUHJvcGVydGllcyhBLHIpfSxxcj1BPT57X2UoQSwoZSx0KT0+e2lmKEwoQSkmJlsiYXJndW1lbnRzIiwiY2FsbGVyIiwiY2FsbGVlIl0uaW5kZXhPZih0KSE9PS0xKXJldHVybiExO2xldCByPUFbdF07aWYoTChyKSl7aWYoZS5lbnVtZXJhYmxlPSExLCJ3cml0YWJsZSJpbiBlKXtlLndyaXRhYmxlPSExO3JldHVybn1lLnNldHx8KGUuc2V0PSgpPT57dGhyb3cgRXJyb3IoIkNhbiBub3QgcmV3cml0ZSByZWFkLW9ubHkgbWV0aG9kICciK3QrIiciKX0pfX0pfSxXcj0oQSxlKT0+e2xldCB0PXt9LHI9aT0+e2kuZm9yRWFjaChuPT57dFtuXT0hMH0pfTtyZXR1cm4geihBKT9yKEEpOnIoU3RyaW5nKEEpLnNwbGl0KGUpKSx0fSxZcj0oKT0+e30sS3I9KEEsZSk9PkEhPW51bGwmJk51bWJlci5pc0Zpbml0ZShBPStBKT9BOmUsWEE9ImFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6IixXZT0iMDEyMzQ1Njc4OSIsemU9e0RJR0lUOldlLEFMUEhBOlhBLEFMUEhBX0RJR0lUOlhBK1hBLnRvVXBwZXJDYXNlKCkrV2V9LHZyPShBPTE2LGU9emUuQUxQSEFfRElHSVQpPT57bGV0IHQ9IiIse2xlbmd0aDpyfT1lO2Zvcig7QS0tOyl0Kz1lW01hdGgucmFuZG9tKCkqcnwwXTtyZXR1cm4gdH07ZnVuY3Rpb24ganIoQSl7cmV0dXJuISEoQSYmTChBLmFwcGVuZCkmJkFbU3ltYm9sLnRvU3RyaW5nVGFnXT09PSJGb3JtRGF0YSImJkFbU3ltYm9sLml0ZXJhdG9yXSl9dmFyIF9yPUE9PntsZXQgZT1uZXcgQXJyYXkoMTApLHQ9KHIsaSk9PntpZih3QShyKSl7aWYoZS5pbmRleE9mKHIpPj0wKXJldHVybjtpZighKCJ0b0pTT04iaW4gcikpe2VbaV09cjtsZXQgbj16KHIpP1tdOnt9O3JldHVybiBpQShyLChvLGcpPT57bGV0IGM9dChvLGkrMSk7IW5BKGMpJiYobltnXT1jKX0pLGVbaV09dm9pZCAwLG59fXJldHVybiByfTtyZXR1cm4gdChBLDApfSx6cj14KCJBc3luY0Z1bmN0aW9uIiksVnI9QT0+QSYmKHdBKEEpfHxMKEEpKSYmTChBLnRoZW4pJiZMKEEuY2F0Y2gpLFZlPSgoQSxlKT0+QT9zZXRJbW1lZGlhdGU6ZT8oKHQscik9Pih2LmFkZEV2ZW50TGlzdGVuZXIoIm1lc3NhZ2UiLCh7c291cmNlOmksZGF0YTpufSk9PntpPT09diYmbj09PXQmJnIubGVuZ3RoJiZyLnNoaWZ0KCkoKX0sITEpLGk9PntyLnB1c2goaSksdi5wb3N0TWVzc2FnZSh0LCIqIil9KSkoYGF4aW9zQCR7TWF0aC5yYW5kb20oKX1gLFtdKTp0PT5zZXRUaW1lb3V0KHQpKSh0eXBlb2Ygc2V0SW1tZWRpYXRlPT0iZnVuY3Rpb24iLEwodi5wb3N0TWVzc2FnZSkpLFpyPXR5cGVvZiBxdWV1ZU1pY3JvdGFzazwidSI/cXVldWVNaWNyb3Rhc2suYmluZCh2KTp0eXBlb2YgcHJvY2VzczwidSImJnByb2Nlc3MubmV4dFRpY2t8fFZlLHU9e2lzQXJyYXk6eixpc0FycmF5QnVmZmVyOlllLGlzQnVmZmVyOkJyLGlzRm9ybURhdGE6eXIsaXNBcnJheUJ1ZmZlclZpZXc6ZnIsaXNTdHJpbmc6Q3IsaXNOdW1iZXI6S2UsaXNCb29sZWFuOnByLGlzT2JqZWN0OndBLGlzUGxhaW5PYmplY3Q6ZEEsaXNSZWFkYWJsZVN0cmVhbTpEcixpc1JlcXVlc3Q6U3IsaXNSZXNwb25zZTpicixpc0hlYWRlcnM6RnIsaXNVbmRlZmluZWQ6bkEsaXNEYXRlOkVyLGlzRmlsZTpRcixpc0Jsb2I6bXIsaXNSZWdFeHA6TXIsaXNGdW5jdGlvbjpMLGlzU3RyZWFtOmhyLGlzVVJMU2VhcmNoUGFyYW1zOndyLGlzVHlwZWRBcnJheTpPcixpc0ZpbGVMaXN0OmRyLGZvckVhY2g6aUEsbWVyZ2U6JEEsZXh0ZW5kOlJyLHRyaW06a3Isc3RyaXBCT006VXIsaW5oZXJpdHM6TnIsdG9GbGF0T2JqZWN0OlRyLGtpbmRPZjpoQSxraW5kT2ZUZXN0OngsZW5kc1dpdGg6THIsdG9BcnJheTp4cixmb3JFYWNoRW50cnk6UHIsbWF0Y2hBbGw6R3IsaXNIVE1MRm9ybTpKcixoYXNPd25Qcm9wZXJ0eTpxZSxoYXNPd25Qcm9wOnFlLHJlZHVjZURlc2NyaXB0b3JzOl9lLGZyZWV6ZU1ldGhvZHM6cXIsdG9PYmplY3RTZXQ6V3IsdG9DYW1lbENhc2U6SHIsbm9vcDpZcix0b0Zpbml0ZU51bWJlcjpLcixmaW5kS2V5OnZlLGdsb2JhbDp2LGlzQ29udGV4dERlZmluZWQ6amUsQUxQSEFCRVQ6emUsZ2VuZXJhdGVTdHJpbmc6dnIsaXNTcGVjQ29tcGxpYW50Rm9ybTpqcix0b0pTT05PYmplY3Q6X3IsaXNBc3luY0ZuOnpyLGlzVGhlbmFibGU6VnIsc2V0SW1tZWRpYXRlOlZlLGFzYXA6WnJ9O2Z1bmN0aW9uIFYoQSxlLHQscixpKXtFcnJvci5jYWxsKHRoaXMpLEVycm9yLmNhcHR1cmVTdGFja1RyYWNlP0Vycm9yLmNhcHR1cmVTdGFja1RyYWNlKHRoaXMsdGhpcy5jb25zdHJ1Y3Rvcik6dGhpcy5zdGFjaz1uZXcgRXJyb3IoKS5zdGFjayx0aGlzLm1lc3NhZ2U9QSx0aGlzLm5hbWU9IkF4aW9zRXJyb3IiLGUmJih0aGlzLmNvZGU9ZSksdCYmKHRoaXMuY29uZmlnPXQpLHImJih0aGlzLnJlcXVlc3Q9ciksaSYmKHRoaXMucmVzcG9uc2U9aSl9dS5pbmhlcml0cyhWLEVycm9yLHt0b0pTT046ZnVuY3Rpb24oKXtyZXR1cm57bWVzc2FnZTp0aGlzLm1lc3NhZ2UsbmFtZTp0aGlzLm5hbWUsZGVzY3JpcHRpb246dGhpcy5kZXNjcmlwdGlvbixudW1iZXI6dGhpcy5udW1iZXIsZmlsZU5hbWU6dGhpcy5maWxlTmFtZSxsaW5lTnVtYmVyOnRoaXMubGluZU51bWJlcixjb2x1bW5OdW1iZXI6dGhpcy5jb2x1bW5OdW1iZXIsc3RhY2s6dGhpcy5zdGFjayxjb25maWc6dS50b0pTT05PYmplY3QodGhpcy5jb25maWcpLGNvZGU6dGhpcy5jb2RlLHN0YXR1czp0aGlzLnJlc3BvbnNlJiZ0aGlzLnJlc3BvbnNlLnN0YXR1cz90aGlzLnJlc3BvbnNlLnN0YXR1czpudWxsfX19KTt2YXIgWmU9Vi5wcm90b3R5cGUsWGU9e307WyJFUlJfQkFEX09QVElPTl9WQUxVRSIsIkVSUl9CQURfT1BUSU9OIiwiRUNPTk5BQk9SVEVEIiwiRVRJTUVET1VUIiwiRVJSX05FVFdPUksiLCJFUlJfRlJfVE9PX01BTllfUkVESVJFQ1RTIiwiRVJSX0RFUFJFQ0FURUQiLCJFUlJfQkFEX1JFU1BPTlNFIiwiRVJSX0JBRF9SRVFVRVNUIiwiRVJSX0NBTkNFTEVEIiwiRVJSX05PVF9TVVBQT1JUIiwiRVJSX0lOVkFMSURfVVJMIl0uZm9yRWFjaChBPT57WGVbQV09e3ZhbHVlOkF9fSk7T2JqZWN0LmRlZmluZVByb3BlcnRpZXMoVixYZSk7T2JqZWN0LmRlZmluZVByb3BlcnR5KFplLCJpc0F4aW9zRXJyb3IiLHt2YWx1ZTohMH0pO1YuZnJvbT0oQSxlLHQscixpLG4pPT57bGV0IG89T2JqZWN0LmNyZWF0ZShaZSk7cmV0dXJuIHUudG9GbGF0T2JqZWN0KEEsbyxmdW5jdGlvbihjKXtyZXR1cm4gYyE9PUVycm9yLnByb3RvdHlwZX0sZz0+ZyE9PSJpc0F4aW9zRXJyb3IiKSxWLmNhbGwobyxBLm1lc3NhZ2UsZSx0LHIsaSksby5jYXVzZT1BLG8ubmFtZT1BLm5hbWUsbiYmT2JqZWN0LmFzc2lnbihvLG4pLG99O3ZhciBtPVY7dmFyIERBPW51bGw7ZnVuY3Rpb24gZWUoQSl7cmV0dXJuIHUuaXNQbGFpbk9iamVjdChBKXx8dS5pc0FycmF5KEEpfWZ1bmN0aW9uIEF0KEEpe3JldHVybiB1LmVuZHNXaXRoKEEsIltdIik/QS5zbGljZSgwLC0yKTpBfWZ1bmN0aW9uICRlKEEsZSx0KXtyZXR1cm4gQT9BLmNvbmNhdChlKS5tYXAoZnVuY3Rpb24oaSxuKXtyZXR1cm4gaT1BdChpKSwhdCYmbj8iWyIraSsiXSI6aX0pLmpvaW4odD8iLiI6IiIpOmV9ZnVuY3Rpb24gWHIoQSl7cmV0dXJuIHUuaXNBcnJheShBKSYmIUEuc29tZShlZSl9dmFyICRyPXUudG9GbGF0T2JqZWN0KHUse30sbnVsbCxmdW5jdGlvbihlKXtyZXR1cm4vXmlzW0EtWl0vLnRlc3QoZSl9KTtmdW5jdGlvbiBBbihBLGUsdCl7aWYoIXUuaXNPYmplY3QoQSkpdGhyb3cgbmV3IFR5cGVFcnJvcigidGFyZ2V0IG11c3QgYmUgYW4gb2JqZWN0Iik7ZT1lfHxuZXcoREF8fEZvcm1EYXRhKSx0PXUudG9GbGF0T2JqZWN0KHQse21ldGFUb2tlbnM6ITAsZG90czohMSxpbmRleGVzOiExfSwhMSxmdW5jdGlvbihDLGYpe3JldHVybiF1LmlzVW5kZWZpbmVkKGZbQ10pfSk7bGV0IHI9dC5tZXRhVG9rZW5zLGk9dC52aXNpdG9yfHxhLG49dC5kb3RzLG89dC5pbmRleGVzLGM9KHQuQmxvYnx8dHlwZW9mIEJsb2I8InUiJiZCbG9iKSYmdS5pc1NwZWNDb21wbGlhbnRGb3JtKGUpO2lmKCF1LmlzRnVuY3Rpb24oaSkpdGhyb3cgbmV3IFR5cGVFcnJvcigidmlzaXRvciBtdXN0IGJlIGEgZnVuY3Rpb24iKTtmdW5jdGlvbiBJKEIpe2lmKEI9PT1udWxsKXJldHVybiIiO2lmKHUuaXNEYXRlKEIpKXJldHVybiBCLnRvSVNPU3RyaW5nKCk7aWYoIWMmJnUuaXNCbG9iKEIpKXRocm93IG5ldyBtKCJCbG9iIGlzIG5vdCBzdXBwb3J0ZWQuIFVzZSBhIEJ1ZmZlciBpbnN0ZWFkLiIpO3JldHVybiB1LmlzQXJyYXlCdWZmZXIoQil8fHUuaXNUeXBlZEFycmF5KEIpP2MmJnR5cGVvZiBCbG9iPT0iZnVuY3Rpb24iP25ldyBCbG9iKFtCXSk6QnVmZmVyLmZyb20oQik6Qn1mdW5jdGlvbiBhKEIsQyxmKXtsZXQgUT1CO2lmKEImJiFmJiZ0eXBlb2YgQj09Im9iamVjdCIpe2lmKHUuZW5kc1dpdGgoQywie30iKSlDPXI/QzpDLnNsaWNlKDAsLTIpLEI9SlNPTi5zdHJpbmdpZnkoQik7ZWxzZSBpZih1LmlzQXJyYXkoQikmJlhyKEIpfHwodS5pc0ZpbGVMaXN0KEIpfHx1LmVuZHNXaXRoKEMsIltdIikpJiYoUT11LnRvQXJyYXkoQikpKXJldHVybiBDPUF0KEMpLFEuZm9yRWFjaChmdW5jdGlvbihkLFQpeyEodS5pc1VuZGVmaW5lZChkKXx8ZD09PW51bGwpJiZlLmFwcGVuZChvPT09ITA/JGUoW0NdLFQsbik6bz09PW51bGw/QzpDKyJbXSIsSShkKSl9KSwhMX1yZXR1cm4gZWUoQik/ITA6KGUuYXBwZW5kKCRlKGYsQyxuKSxJKEIpKSwhMSl9bGV0IHM9W10scD1PYmplY3QuYXNzaWduKCRyLHtkZWZhdWx0VmlzaXRvcjphLGNvbnZlcnRWYWx1ZTpJLGlzVmlzaXRhYmxlOmVlfSk7ZnVuY3Rpb24gbChCLEMpe2lmKCF1LmlzVW5kZWZpbmVkKEIpKXtpZihzLmluZGV4T2YoQikhPT0tMSl0aHJvdyBFcnJvcigiQ2lyY3VsYXIgcmVmZXJlbmNlIGRldGVjdGVkIGluICIrQy5qb2luKCIuIikpO3MucHVzaChCKSx1LmZvckVhY2goQixmdW5jdGlvbihRLGgpeyghKHUuaXNVbmRlZmluZWQoUSl8fFE9PT1udWxsKSYmaS5jYWxsKGUsUSx1LmlzU3RyaW5nKGgpP2gudHJpbSgpOmgsQyxwKSk9PT0hMCYmbChRLEM/Qy5jb25jYXQoaCk6W2hdKX0pLHMucG9wKCl9fWlmKCF1LmlzT2JqZWN0KEEpKXRocm93IG5ldyBUeXBlRXJyb3IoImRhdGEgbXVzdCBiZSBhbiBvYmplY3QiKTtyZXR1cm4gbChBKSxlfXZhciBNPUFuO2Z1bmN0aW9uIGV0KEEpe2xldCBlPXsiISI6IiUyMSIsIiciOiIlMjciLCIoIjoiJTI4IiwiKSI6IiUyOSIsIn4iOiIlN0UiLCIlMjAiOiIrIiwiJTAwIjoiXDAifTtyZXR1cm4gZW5jb2RlVVJJQ29tcG9uZW50KEEpLnJlcGxhY2UoL1shJygpfl18JTIwfCUwMC9nLGZ1bmN0aW9uKHIpe3JldHVybiBlW3JdfSl9ZnVuY3Rpb24gdHQoQSxlKXt0aGlzLl9wYWlycz1bXSxBJiZNKEEsdGhpcyxlKX12YXIgcnQ9dHQucHJvdG90eXBlO3J0LmFwcGVuZD1mdW5jdGlvbihlLHQpe3RoaXMuX3BhaXJzLnB1c2goW2UsdF0pfTtydC50b1N0cmluZz1mdW5jdGlvbihlKXtsZXQgdD1lP2Z1bmN0aW9uKHIpe3JldHVybiBlLmNhbGwodGhpcyxyLGV0KX06ZXQ7cmV0dXJuIHRoaXMuX3BhaXJzLm1hcChmdW5jdGlvbihpKXtyZXR1cm4gdChpWzBdKSsiPSIrdChpWzFdKX0sIiIpLmpvaW4oIiYiKX07dmFyIFNBPXR0O2Z1bmN0aW9uIGVuKEEpe3JldHVybiBlbmNvZGVVUklDb21wb25lbnQoQSkucmVwbGFjZSgvJTNBL2dpLCI6IikucmVwbGFjZSgvJTI0L2csIiQiKS5yZXBsYWNlKC8lMkMvZ2ksIiwiKS5yZXBsYWNlKC8lMjAvZywiKyIpLnJlcGxhY2UoLyU1Qi9naSwiWyIpLnJlcGxhY2UoLyU1RC9naSwiXSIpfWZ1bmN0aW9uIG9BKEEsZSx0KXtpZighZSlyZXR1cm4gQTtsZXQgcj10JiZ0LmVuY29kZXx8ZW4saT10JiZ0LnNlcmlhbGl6ZSxuO2lmKGk/bj1pKGUsdCk6bj11LmlzVVJMU2VhcmNoUGFyYW1zKGUpP2UudG9TdHJpbmcoKTpuZXcgU0EoZSx0KS50b1N0cmluZyhyKSxuKXtsZXQgbz1BLmluZGV4T2YoIiMiKTtvIT09LTEmJihBPUEuc2xpY2UoMCxvKSksQSs9KEEuaW5kZXhPZigiPyIpPT09LTE/Ij8iOiImIikrbn1yZXR1cm4gQX12YXIgdGU9Y2xhc3N7Y29uc3RydWN0b3IoKXt0aGlzLmhhbmRsZXJzPVtdfXVzZShlLHQscil7cmV0dXJuIHRoaXMuaGFuZGxlcnMucHVzaCh7ZnVsZmlsbGVkOmUscmVqZWN0ZWQ6dCxzeW5jaHJvbm91czpyP3Iuc3luY2hyb25vdXM6ITEscnVuV2hlbjpyP3IucnVuV2hlbjpudWxsfSksdGhpcy5oYW5kbGVycy5sZW5ndGgtMX1lamVjdChlKXt0aGlzLmhhbmRsZXJzW2VdJiYodGhpcy5oYW5kbGVyc1tlXT1udWxsKX1jbGVhcigpe3RoaXMuaGFuZGxlcnMmJih0aGlzLmhhbmRsZXJzPVtdKX1mb3JFYWNoKGUpe3UuZm9yRWFjaCh0aGlzLmhhbmRsZXJzLGZ1bmN0aW9uKHIpe3IhPT1udWxsJiZlKHIpfSl9fSxyZT10ZTt2YXIgYkE9e3NpbGVudEpTT05QYXJzaW5nOiEwLGZvcmNlZEpTT05QYXJzaW5nOiEwLGNsYXJpZnlUaW1lb3V0RXJyb3I6ITF9O3ZhciBudD10eXBlb2YgVVJMU2VhcmNoUGFyYW1zPCJ1Ij9VUkxTZWFyY2hQYXJhbXM6U0E7dmFyIGl0PXR5cGVvZiBGb3JtRGF0YTwidSI/Rm9ybURhdGE6bnVsbDt2YXIgb3Q9dHlwZW9mIEJsb2I8InUiP0Jsb2I6bnVsbDt2YXIgYXQ9e2lzQnJvd3NlcjohMCxjbGFzc2VzOntVUkxTZWFyY2hQYXJhbXM6bnQsRm9ybURhdGE6aXQsQmxvYjpvdH0scHJvdG9jb2xzOlsiaHR0cCIsImh0dHBzIiwiZmlsZSIsImJsb2IiLCJ1cmwiLCJkYXRhIl19O3ZhciBpZT17fTtfdChpZSx7aGFzQnJvd3NlckVudjooKT0+bmUsaGFzU3RhbmRhcmRCcm93c2VyRW52OigpPT50bixoYXNTdGFuZGFyZEJyb3dzZXJXZWJXb3JrZXJFbnY6KCk9PnJuLG9yaWdpbjooKT0+bm59KTt2YXIgbmU9dHlwZW9mIHdpbmRvdzwidSImJnR5cGVvZiBkb2N1bWVudDwidSIsdG49KEE9Pm5lJiZbIlJlYWN0TmF0aXZlIiwiTmF0aXZlU2NyaXB0IiwiTlMiXS5pbmRleE9mKEEpPDApKHR5cGVvZiBuYXZpZ2F0b3I8InUiJiZuYXZpZ2F0b3IucHJvZHVjdCkscm49dHlwZW9mIFdvcmtlckdsb2JhbFNjb3BlPCJ1IiYmc2VsZiBpbnN0YW5jZW9mIFdvcmtlckdsb2JhbFNjb3BlJiZ0eXBlb2Ygc2VsZi5pbXBvcnRTY3JpcHRzPT0iZnVuY3Rpb24iLG5uPW5lJiZ3aW5kb3cubG9jYXRpb24uaHJlZnx8Imh0dHA6Ly9sb2NhbGhvc3QiO3ZhciBrPXsuLi5pZSwuLi5hdH07ZnVuY3Rpb24gb2UoQSxlKXtyZXR1cm4gTShBLG5ldyBrLmNsYXNzZXMuVVJMU2VhcmNoUGFyYW1zLE9iamVjdC5hc3NpZ24oe3Zpc2l0b3I6ZnVuY3Rpb24odCxyLGksbil7cmV0dXJuIGsuaXNOb2RlJiZ1LmlzQnVmZmVyKHQpPyh0aGlzLmFwcGVuZChyLHQudG9TdHJpbmcoImJhc2U2NCIpKSwhMSk6bi5kZWZhdWx0VmlzaXRvci5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSxlKSl9ZnVuY3Rpb24gb24oQSl7cmV0dXJuIHUubWF0Y2hBbGwoL1x3K3xcWyhcdyopXS9nLEEpLm1hcChlPT5lWzBdPT09IltdIj8iIjplWzFdfHxlWzBdKX1mdW5jdGlvbiBhbihBKXtsZXQgZT17fSx0PU9iamVjdC5rZXlzKEEpLHIsaT10Lmxlbmd0aCxuO2ZvcihyPTA7cjxpO3IrKyluPXRbcl0sZVtuXT1BW25dO3JldHVybiBlfWZ1bmN0aW9uIHNuKEEpe2Z1bmN0aW9uIGUodCxyLGksbil7bGV0IG89dFtuKytdO2lmKG89PT0iX19wcm90b19fIilyZXR1cm4hMDtsZXQgZz1OdW1iZXIuaXNGaW5pdGUoK28pLGM9bj49dC5sZW5ndGg7cmV0dXJuIG89IW8mJnUuaXNBcnJheShpKT9pLmxlbmd0aDpvLGM/KHUuaGFzT3duUHJvcChpLG8pP2lbb109W2lbb10scl06aVtvXT1yLCFnKTooKCFpW29dfHwhdS5pc09iamVjdChpW29dKSkmJihpW29dPVtdKSxlKHQscixpW29dLG4pJiZ1LmlzQXJyYXkoaVtvXSkmJihpW29dPWFuKGlbb10pKSwhZyl9aWYodS5pc0Zvcm1EYXRhKEEpJiZ1LmlzRnVuY3Rpb24oQS5lbnRyaWVzKSl7bGV0IHQ9e307cmV0dXJuIHUuZm9yRWFjaEVudHJ5KEEsKHIsaSk9PntlKG9uKHIpLGksdCwwKX0pLHR9cmV0dXJuIG51bGx9dmFyIEZBPXNuO2Z1bmN0aW9uIEluKEEsZSx0KXtpZih1LmlzU3RyaW5nKEEpKXRyeXtyZXR1cm4oZXx8SlNPTi5wYXJzZSkoQSksdS50cmltKEEpfWNhdGNoKHIpe2lmKHIubmFtZSE9PSJTeW50YXhFcnJvciIpdGhyb3cgcn1yZXR1cm4odHx8SlNPTi5zdHJpbmdpZnkpKEEpfXZhciBhZT17dHJhbnNpdGlvbmFsOmJBLGFkYXB0ZXI6WyJ4aHIiLCJodHRwIiwiZmV0Y2giXSx0cmFuc2Zvcm1SZXF1ZXN0OltmdW5jdGlvbihlLHQpe2xldCByPXQuZ2V0Q29udGVudFR5cGUoKXx8IiIsaT1yLmluZGV4T2YoImFwcGxpY2F0aW9uL2pzb24iKT4tMSxuPXUuaXNPYmplY3QoZSk7aWYobiYmdS5pc0hUTUxGb3JtKGUpJiYoZT1uZXcgRm9ybURhdGEoZSkpLHUuaXNGb3JtRGF0YShlKSlyZXR1cm4gaT9KU09OLnN0cmluZ2lmeShGQShlKSk6ZTtpZih1LmlzQXJyYXlCdWZmZXIoZSl8fHUuaXNCdWZmZXIoZSl8fHUuaXNTdHJlYW0oZSl8fHUuaXNGaWxlKGUpfHx1LmlzQmxvYihlKXx8dS5pc1JlYWRhYmxlU3RyZWFtKGUpKXJldHVybiBlO2lmKHUuaXNBcnJheUJ1ZmZlclZpZXcoZSkpcmV0dXJuIGUuYnVmZmVyO2lmKHUuaXNVUkxTZWFyY2hQYXJhbXMoZSkpcmV0dXJuIHQuc2V0Q29udGVudFR5cGUoImFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZDtjaGFyc2V0PXV0Zi04IiwhMSksZS50b1N0cmluZygpO2xldCBnO2lmKG4pe2lmKHIuaW5kZXhPZigiYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkIik+LTEpcmV0dXJuIG9lKGUsdGhpcy5mb3JtU2VyaWFsaXplcikudG9TdHJpbmcoKTtpZigoZz11LmlzRmlsZUxpc3QoZSkpfHxyLmluZGV4T2YoIm11bHRpcGFydC9mb3JtLWRhdGEiKT4tMSl7bGV0IGM9dGhpcy5lbnYmJnRoaXMuZW52LkZvcm1EYXRhO3JldHVybiBNKGc/eyJmaWxlc1tdIjplfTplLGMmJm5ldyBjLHRoaXMuZm9ybVNlcmlhbGl6ZXIpfX1yZXR1cm4gbnx8aT8odC5zZXRDb250ZW50VHlwZSgiYXBwbGljYXRpb24vanNvbiIsITEpLEluKGUpKTplfV0sdHJhbnNmb3JtUmVzcG9uc2U6W2Z1bmN0aW9uKGUpe2xldCB0PXRoaXMudHJhbnNpdGlvbmFsfHxhZS50cmFuc2l0aW9uYWwscj10JiZ0LmZvcmNlZEpTT05QYXJzaW5nLGk9dGhpcy5yZXNwb25zZVR5cGU9PT0ianNvbiI7aWYodS5pc1Jlc3BvbnNlKGUpfHx1LmlzUmVhZGFibGVTdHJlYW0oZSkpcmV0dXJuIGU7aWYoZSYmdS5pc1N0cmluZyhlKSYmKHImJiF0aGlzLnJlc3BvbnNlVHlwZXx8aSkpe2xldCBvPSEodCYmdC5zaWxlbnRKU09OUGFyc2luZykmJmk7dHJ5e3JldHVybiBKU09OLnBhcnNlKGUpfWNhdGNoKGcpe2lmKG8pdGhyb3cgZy5uYW1lPT09IlN5bnRheEVycm9yIj9tLmZyb20oZyxtLkVSUl9CQURfUkVTUE9OU0UsdGhpcyxudWxsLHRoaXMucmVzcG9uc2UpOmd9fXJldHVybiBlfV0sdGltZW91dDowLHhzcmZDb29raWVOYW1lOiJYU1JGLVRPS0VOIix4c3JmSGVhZGVyTmFtZToiWC1YU1JGLVRPS0VOIixtYXhDb250ZW50TGVuZ3RoOi0xLG1heEJvZHlMZW5ndGg6LTEsZW52OntGb3JtRGF0YTprLmNsYXNzZXMuRm9ybURhdGEsQmxvYjprLmNsYXNzZXMuQmxvYn0sdmFsaWRhdGVTdGF0dXM6ZnVuY3Rpb24oZSl7cmV0dXJuIGU+PTIwMCYmZTwzMDB9LGhlYWRlcnM6e2NvbW1vbjp7QWNjZXB0OiJhcHBsaWNhdGlvbi9qc29uLCB0ZXh0L3BsYWluLCAqLyoiLCJDb250ZW50LVR5cGUiOnZvaWQgMH19fTt1LmZvckVhY2goWyJkZWxldGUiLCJnZXQiLCJoZWFkIiwicG9zdCIsInB1dCIsInBhdGNoIl0sQT0+e2FlLmhlYWRlcnNbQV09e319KTt2YXIgWj1hZTt2YXIgZ249dS50b09iamVjdFNldChbImFnZSIsImF1dGhvcml6YXRpb24iLCJjb250ZW50LWxlbmd0aCIsImNvbnRlbnQtdHlwZSIsImV0YWciLCJleHBpcmVzIiwiZnJvbSIsImhvc3QiLCJpZi1tb2RpZmllZC1zaW5jZSIsImlmLXVubW9kaWZpZWQtc2luY2UiLCJsYXN0LW1vZGlmaWVkIiwibG9jYXRpb24iLCJtYXgtZm9yd2FyZHMiLCJwcm94eS1hdXRob3JpemF0aW9uIiwicmVmZXJlciIsInJldHJ5LWFmdGVyIiwidXNlci1hZ2VudCJdKSxzdD1BPT57bGV0IGU9e30sdCxyLGk7cmV0dXJuIEEmJkEuc3BsaXQoYApgKS5mb3JFYWNoKGZ1bmN0aW9uKG8pe2k9by5pbmRleE9mKCI6IiksdD1vLnN1YnN0cmluZygwLGkpLnRyaW0oKS50b0xvd2VyQ2FzZSgpLHI9by5zdWJzdHJpbmcoaSsxKS50cmltKCksISghdHx8ZVt0XSYmZ25bdF0pJiYodD09PSJzZXQtY29va2llIj9lW3RdP2VbdF0ucHVzaChyKTplW3RdPVtyXTplW3RdPWVbdF0/ZVt0XSsiLCAiK3I6cil9KSxlfTt2YXIgSXQ9U3ltYm9sKCJpbnRlcm5hbHMiKTtmdW5jdGlvbiBhQShBKXtyZXR1cm4gQSYmU3RyaW5nKEEpLnRyaW0oKS50b0xvd2VyQ2FzZSgpfWZ1bmN0aW9uIGtBKEEpe3JldHVybiBBPT09ITF8fEE9PW51bGw/QTp1LmlzQXJyYXkoQSk/QS5tYXAoa0EpOlN0cmluZyhBKX1mdW5jdGlvbiBsbihBKXtsZXQgZT1PYmplY3QuY3JlYXRlKG51bGwpLHQ9LyhbXlxzLDs9XSspXHMqKD86PVxzKihbXiw7XSspKT8vZyxyO2Zvcig7cj10LmV4ZWMoQSk7KWVbclsxXV09clsyXTtyZXR1cm4gZX12YXIgdW49QT0+L15bLV9hLXpBLVowLTleYHx+LCEjJCUmJyorLl0rJC8udGVzdChBLnRyaW0oKSk7ZnVuY3Rpb24gc2UoQSxlLHQscixpKXtpZih1LmlzRnVuY3Rpb24ocikpcmV0dXJuIHIuY2FsbCh0aGlzLGUsdCk7aWYoaSYmKGU9dCksISF1LmlzU3RyaW5nKGUpKXtpZih1LmlzU3RyaW5nKHIpKXJldHVybiBlLmluZGV4T2YocikhPT0tMTtpZih1LmlzUmVnRXhwKHIpKXJldHVybiByLnRlc3QoZSl9fWZ1bmN0aW9uIGNuKEEpe3JldHVybiBBLnRyaW0oKS50b0xvd2VyQ2FzZSgpLnJlcGxhY2UoLyhbYS16XGRdKShcdyopL2csKGUsdCxyKT0+dC50b1VwcGVyQ2FzZSgpK3IpfWZ1bmN0aW9uIEJuKEEsZSl7bGV0IHQ9dS50b0NhbWVsQ2FzZSgiICIrZSk7WyJnZXQiLCJzZXQiLCJoYXMiXS5mb3JFYWNoKHI9PntPYmplY3QuZGVmaW5lUHJvcGVydHkoQSxyK3Qse3ZhbHVlOmZ1bmN0aW9uKGksbixvKXtyZXR1cm4gdGhpc1tyXS5jYWxsKHRoaXMsZSxpLG4sbyl9LGNvbmZpZ3VyYWJsZTohMH0pfSl9dmFyIFg9Y2xhc3N7Y29uc3RydWN0b3IoZSl7ZSYmdGhpcy5zZXQoZSl9c2V0KGUsdCxyKXtsZXQgaT10aGlzO2Z1bmN0aW9uIG4oZyxjLEkpe2xldCBhPWFBKGMpO2lmKCFhKXRocm93IG5ldyBFcnJvcigiaGVhZGVyIG5hbWUgbXVzdCBiZSBhIG5vbi1lbXB0eSBzdHJpbmciKTtsZXQgcz11LmZpbmRLZXkoaSxhKTsoIXN8fGlbc109PT12b2lkIDB8fEk9PT0hMHx8ST09PXZvaWQgMCYmaVtzXSE9PSExKSYmKGlbc3x8Y109a0EoZykpfWxldCBvPShnLGMpPT51LmZvckVhY2goZywoSSxhKT0+bihJLGEsYykpO2lmKHUuaXNQbGFpbk9iamVjdChlKXx8ZSBpbnN0YW5jZW9mIHRoaXMuY29uc3RydWN0b3IpbyhlLHQpO2Vsc2UgaWYodS5pc1N0cmluZyhlKSYmKGU9ZS50cmltKCkpJiYhdW4oZSkpbyhzdChlKSx0KTtlbHNlIGlmKHUuaXNIZWFkZXJzKGUpKWZvcihsZXRbZyxjXW9mIGUuZW50cmllcygpKW4oYyxnLHIpO2Vsc2UgZSE9bnVsbCYmbih0LGUscik7cmV0dXJuIHRoaXN9Z2V0KGUsdCl7aWYoZT1hQShlKSxlKXtsZXQgcj11LmZpbmRLZXkodGhpcyxlKTtpZihyKXtsZXQgaT10aGlzW3JdO2lmKCF0KXJldHVybiBpO2lmKHQ9PT0hMClyZXR1cm4gbG4oaSk7aWYodS5pc0Z1bmN0aW9uKHQpKXJldHVybiB0LmNhbGwodGhpcyxpLHIpO2lmKHUuaXNSZWdFeHAodCkpcmV0dXJuIHQuZXhlYyhpKTt0aHJvdyBuZXcgVHlwZUVycm9yKCJwYXJzZXIgbXVzdCBiZSBib29sZWFufHJlZ2V4cHxmdW5jdGlvbiIpfX19aGFzKGUsdCl7aWYoZT1hQShlKSxlKXtsZXQgcj11LmZpbmRLZXkodGhpcyxlKTtyZXR1cm4hIShyJiZ0aGlzW3JdIT09dm9pZCAwJiYoIXR8fHNlKHRoaXMsdGhpc1tyXSxyLHQpKSl9cmV0dXJuITF9ZGVsZXRlKGUsdCl7bGV0IHI9dGhpcyxpPSExO2Z1bmN0aW9uIG4obyl7aWYobz1hQShvKSxvKXtsZXQgZz11LmZpbmRLZXkocixvKTtnJiYoIXR8fHNlKHIscltnXSxnLHQpKSYmKGRlbGV0ZSByW2ddLGk9ITApfX1yZXR1cm4gdS5pc0FycmF5KGUpP2UuZm9yRWFjaChuKTpuKGUpLGl9Y2xlYXIoZSl7bGV0IHQ9T2JqZWN0LmtleXModGhpcykscj10Lmxlbmd0aCxpPSExO2Zvcig7ci0tOyl7bGV0IG49dFtyXTsoIWV8fHNlKHRoaXMsdGhpc1tuXSxuLGUsITApKSYmKGRlbGV0ZSB0aGlzW25dLGk9ITApfXJldHVybiBpfW5vcm1hbGl6ZShlKXtsZXQgdD10aGlzLHI9e307cmV0dXJuIHUuZm9yRWFjaCh0aGlzLChpLG4pPT57bGV0IG89dS5maW5kS2V5KHIsbik7aWYobyl7dFtvXT1rQShpKSxkZWxldGUgdFtuXTtyZXR1cm59bGV0IGc9ZT9jbihuKTpTdHJpbmcobikudHJpbSgpO2chPT1uJiZkZWxldGUgdFtuXSx0W2ddPWtBKGkpLHJbZ109ITB9KSx0aGlzfWNvbmNhdCguLi5lKXtyZXR1cm4gdGhpcy5jb25zdHJ1Y3Rvci5jb25jYXQodGhpcywuLi5lKX10b0pTT04oZSl7bGV0IHQ9T2JqZWN0LmNyZWF0ZShudWxsKTtyZXR1cm4gdS5mb3JFYWNoKHRoaXMsKHIsaSk9PntyIT1udWxsJiZyIT09ITEmJih0W2ldPWUmJnUuaXNBcnJheShyKT9yLmpvaW4oIiwgIik6cil9KSx0fVtTeW1ib2wuaXRlcmF0b3JdKCl7cmV0dXJuIE9iamVjdC5lbnRyaWVzKHRoaXMudG9KU09OKCkpW1N5bWJvbC5pdGVyYXRvcl0oKX10b1N0cmluZygpe3JldHVybiBPYmplY3QuZW50cmllcyh0aGlzLnRvSlNPTigpKS5tYXAoKFtlLHRdKT0+ZSsiOiAiK3QpLmpvaW4oYApgKX1nZXRbU3ltYm9sLnRvU3RyaW5nVGFnXSgpe3JldHVybiJBeGlvc0hlYWRlcnMifXN0YXRpYyBmcm9tKGUpe3JldHVybiBlIGluc3RhbmNlb2YgdGhpcz9lOm5ldyB0aGlzKGUpfXN0YXRpYyBjb25jYXQoZSwuLi50KXtsZXQgcj1uZXcgdGhpcyhlKTtyZXR1cm4gdC5mb3JFYWNoKGk9PnIuc2V0KGkpKSxyfXN0YXRpYyBhY2Nlc3NvcihlKXtsZXQgcj0odGhpc1tJdF09dGhpc1tJdF09e2FjY2Vzc29yczp7fX0pLmFjY2Vzc29ycyxpPXRoaXMucHJvdG90eXBlO2Z1bmN0aW9uIG4obyl7bGV0IGc9YUEobyk7cltnXXx8KEJuKGksbykscltnXT0hMCl9cmV0dXJuIHUuaXNBcnJheShlKT9lLmZvckVhY2gobik6bihlKSx0aGlzfX07WC5hY2Nlc3NvcihbIkNvbnRlbnQtVHlwZSIsIkNvbnRlbnQtTGVuZ3RoIiwiQWNjZXB0IiwiQWNjZXB0LUVuY29kaW5nIiwiVXNlci1BZ2VudCIsIkF1dGhvcml6YXRpb24iXSk7dS5yZWR1Y2VEZXNjcmlwdG9ycyhYLnByb3RvdHlwZSwoe3ZhbHVlOkF9LGUpPT57bGV0IHQ9ZVswXS50b1VwcGVyQ2FzZSgpK2Uuc2xpY2UoMSk7cmV0dXJue2dldDooKT0+QSxzZXQocil7dGhpc1t0XT1yfX19KTt1LmZyZWV6ZU1ldGhvZHMoWCk7dmFyIEY9WDtmdW5jdGlvbiBzQShBLGUpe2xldCB0PXRoaXN8fFoscj1lfHx0LGk9Ri5mcm9tKHIuaGVhZGVycyksbj1yLmRhdGE7cmV0dXJuIHUuZm9yRWFjaChBLGZ1bmN0aW9uKGcpe249Zy5jYWxsKHQsbixpLm5vcm1hbGl6ZSgpLGU/ZS5zdGF0dXM6dm9pZCAwKX0pLGkubm9ybWFsaXplKCksbn1mdW5jdGlvbiBJQShBKXtyZXR1cm4hIShBJiZBLl9fQ0FOQ0VMX18pfWZ1bmN0aW9uIGd0KEEsZSx0KXttLmNhbGwodGhpcyxBPz8iY2FuY2VsZWQiLG0uRVJSX0NBTkNFTEVELGUsdCksdGhpcy5uYW1lPSJDYW5jZWxlZEVycm9yIn11LmluaGVyaXRzKGd0LG0se19fQ0FOQ0VMX186ITB9KTt2YXIgSD1ndDtmdW5jdGlvbiBnQShBLGUsdCl7bGV0IHI9dC5jb25maWcudmFsaWRhdGVTdGF0dXM7IXQuc3RhdHVzfHwhcnx8cih0LnN0YXR1cyk/QSh0KTplKG5ldyBtKCJSZXF1ZXN0IGZhaWxlZCB3aXRoIHN0YXR1cyBjb2RlICIrdC5zdGF0dXMsW20uRVJSX0JBRF9SRVFVRVNULG0uRVJSX0JBRF9SRVNQT05TRV1bTWF0aC5mbG9vcih0LnN0YXR1cy8xMDApLTRdLHQuY29uZmlnLHQucmVxdWVzdCx0KSl9ZnVuY3Rpb24gSWUoQSl7bGV0IGU9L14oWy0rXHddezEsMjV9KSg6P1wvXC98OikvLmV4ZWMoQSk7cmV0dXJuIGUmJmVbMV18fCIifWZ1bmN0aW9uIGZuKEEsZSl7QT1BfHwxMDtsZXQgdD1uZXcgQXJyYXkoQSkscj1uZXcgQXJyYXkoQSksaT0wLG49MCxvO3JldHVybiBlPWUhPT12b2lkIDA/ZToxZTMsZnVuY3Rpb24oYyl7bGV0IEk9RGF0ZS5ub3coKSxhPXJbbl07b3x8KG89SSksdFtpXT1jLHJbaV09STtsZXQgcz1uLHA9MDtmb3IoO3MhPT1pOylwKz10W3MrK10scz1zJUE7aWYoaT0oaSsxKSVBLGk9PT1uJiYobj0obisxKSVBKSxJLW88ZSlyZXR1cm47bGV0IGw9YSYmSS1hO3JldHVybiBsP01hdGgucm91bmQocCoxZTMvbCk6dm9pZCAwfX12YXIgbHQ9Zm47ZnVuY3Rpb24gQ24oQSxlKXtsZXQgdD0wLHI9MWUzL2UsaSxuLG89KEksYT1EYXRlLm5vdygpKT0+e3Q9YSxpPW51bGwsbiYmKGNsZWFyVGltZW91dChuKSxuPW51bGwpLEEuYXBwbHkobnVsbCxJKX07cmV0dXJuWyguLi5JKT0+e2xldCBhPURhdGUubm93KCkscz1hLXQ7cz49cj9vKEksYSk6KGk9SSxufHwobj1zZXRUaW1lb3V0KCgpPT57bj1udWxsLG8oaSl9LHItcykpKX0sKCk9PmkmJm8oaSldfXZhciB1dD1Dbjt2YXIgJD0oQSxlLHQ9Myk9PntsZXQgcj0wLGk9bHQoNTAsMjUwKTtyZXR1cm4gdXQobj0+e2xldCBvPW4ubG9hZGVkLGc9bi5sZW5ndGhDb21wdXRhYmxlP24udG90YWw6dm9pZCAwLGM9by1yLEk9aShjKSxhPW88PWc7cj1vO2xldCBzPXtsb2FkZWQ6byx0b3RhbDpnLHByb2dyZXNzOmc/by9nOnZvaWQgMCxieXRlczpjLHJhdGU6SXx8dm9pZCAwLGVzdGltYXRlZDpJJiZnJiZhPyhnLW8pL0k6dm9pZCAwLGV2ZW50Om4sbGVuZ3RoQ29tcHV0YWJsZTpnIT1udWxsLFtlPyJkb3dubG9hZCI6InVwbG9hZCJdOiEwfTtBKHMpfSx0KX0sZ2U9KEEsZSk9PntsZXQgdD1BIT1udWxsO3JldHVybltyPT5lWzBdKHtsZW5ndGhDb21wdXRhYmxlOnQsdG90YWw6QSxsb2FkZWQ6cn0pLGVbMV1dfSxsZT1BPT4oLi4uZSk9PnUuYXNhcCgoKT0+QSguLi5lKSk7dmFyIGN0PWsuaGFzU3RhbmRhcmRCcm93c2VyRW52P2Z1bmN0aW9uKCl7bGV0IGU9Lyhtc2llfHRyaWRlbnQpL2kudGVzdChuYXZpZ2F0b3IudXNlckFnZW50KSx0PWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImEiKSxyO2Z1bmN0aW9uIGkobil7bGV0IG89bjtyZXR1cm4gZSYmKHQuc2V0QXR0cmlidXRlKCJocmVmIixvKSxvPXQuaHJlZiksdC5zZXRBdHRyaWJ1dGUoImhyZWYiLG8pLHtocmVmOnQuaHJlZixwcm90b2NvbDp0LnByb3RvY29sP3QucHJvdG9jb2wucmVwbGFjZSgvOiQvLCIiKToiIixob3N0OnQuaG9zdCxzZWFyY2g6dC5zZWFyY2g/dC5zZWFyY2gucmVwbGFjZSgvXlw/LywiIik6IiIsaGFzaDp0Lmhhc2g/dC5oYXNoLnJlcGxhY2UoL14jLywiIik6IiIsaG9zdG5hbWU6dC5ob3N0bmFtZSxwb3J0OnQucG9ydCxwYXRobmFtZTp0LnBhdGhuYW1lLmNoYXJBdCgwKT09PSIvIj90LnBhdGhuYW1lOiIvIit0LnBhdGhuYW1lfX1yZXR1cm4gcj1pKHdpbmRvdy5sb2NhdGlvbi5ocmVmKSxmdW5jdGlvbihvKXtsZXQgZz11LmlzU3RyaW5nKG8pP2kobyk6bztyZXR1cm4gZy5wcm90b2NvbD09PXIucHJvdG9jb2wmJmcuaG9zdD09PXIuaG9zdH19KCk6ZnVuY3Rpb24oKXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4hMH19KCk7dmFyIEJ0PWsuaGFzU3RhbmRhcmRCcm93c2VyRW52P3t3cml0ZShBLGUsdCxyLGksbil7bGV0IG89W0ErIj0iK2VuY29kZVVSSUNvbXBvbmVudChlKV07dS5pc051bWJlcih0KSYmby5wdXNoKCJleHBpcmVzPSIrbmV3IERhdGUodCkudG9HTVRTdHJpbmcoKSksdS5pc1N0cmluZyhyKSYmby5wdXNoKCJwYXRoPSIrciksdS5pc1N0cmluZyhpKSYmby5wdXNoKCJkb21haW49IitpKSxuPT09ITAmJm8ucHVzaCgic2VjdXJlIiksZG9jdW1lbnQuY29va2llPW8uam9pbigiOyAiKX0scmVhZChBKXtsZXQgZT1kb2N1bWVudC5jb29raWUubWF0Y2gobmV3IFJlZ0V4cCgiKF58O1xccyopKCIrQSsiKT0oW147XSopIikpO3JldHVybiBlP2RlY29kZVVSSUNvbXBvbmVudChlWzNdKTpudWxsfSxyZW1vdmUoQSl7dGhpcy53cml0ZShBLCIiLERhdGUubm93KCktODY0ZTUpfX06e3dyaXRlKCl7fSxyZWFkKCl7cmV0dXJuIG51bGx9LHJlbW92ZSgpe319O2Z1bmN0aW9uIHVlKEEpe3JldHVybi9eKFthLXpdW2EtelxkK1wtLl0qOik/XC9cLy9pLnRlc3QoQSl9ZnVuY3Rpb24gY2UoQSxlKXtyZXR1cm4gZT9BLnJlcGxhY2UoL1wvP1wvJC8sIiIpKyIvIitlLnJlcGxhY2UoL15cLysvLCIiKTpBfWZ1bmN0aW9uIGxBKEEsZSl7cmV0dXJuIEEmJiF1ZShlKT9jZShBLGUpOmV9dmFyIGZ0PUE9PkEgaW5zdGFuY2VvZiBGP3suLi5BfTpBO2Z1bmN0aW9uIE8oQSxlKXtlPWV8fHt9O2xldCB0PXt9O2Z1bmN0aW9uIHIoSSxhLHMpe3JldHVybiB1LmlzUGxhaW5PYmplY3QoSSkmJnUuaXNQbGFpbk9iamVjdChhKT91Lm1lcmdlLmNhbGwoe2Nhc2VsZXNzOnN9LEksYSk6dS5pc1BsYWluT2JqZWN0KGEpP3UubWVyZ2Uoe30sYSk6dS5pc0FycmF5KGEpP2Euc2xpY2UoKTphfWZ1bmN0aW9uIGkoSSxhLHMpe2lmKHUuaXNVbmRlZmluZWQoYSkpe2lmKCF1LmlzVW5kZWZpbmVkKEkpKXJldHVybiByKHZvaWQgMCxJLHMpfWVsc2UgcmV0dXJuIHIoSSxhLHMpfWZ1bmN0aW9uIG4oSSxhKXtpZighdS5pc1VuZGVmaW5lZChhKSlyZXR1cm4gcih2b2lkIDAsYSl9ZnVuY3Rpb24gbyhJLGEpe2lmKHUuaXNVbmRlZmluZWQoYSkpe2lmKCF1LmlzVW5kZWZpbmVkKEkpKXJldHVybiByKHZvaWQgMCxJKX1lbHNlIHJldHVybiByKHZvaWQgMCxhKX1mdW5jdGlvbiBnKEksYSxzKXtpZihzIGluIGUpcmV0dXJuIHIoSSxhKTtpZihzIGluIEEpcmV0dXJuIHIodm9pZCAwLEkpfWxldCBjPXt1cmw6bixtZXRob2Q6bixkYXRhOm4sYmFzZVVSTDpvLHRyYW5zZm9ybVJlcXVlc3Q6byx0cmFuc2Zvcm1SZXNwb25zZTpvLHBhcmFtc1NlcmlhbGl6ZXI6byx0aW1lb3V0Om8sdGltZW91dE1lc3NhZ2U6byx3aXRoQ3JlZGVudGlhbHM6byx3aXRoWFNSRlRva2VuOm8sYWRhcHRlcjpvLHJlc3BvbnNlVHlwZTpvLHhzcmZDb29raWVOYW1lOm8seHNyZkhlYWRlck5hbWU6byxvblVwbG9hZFByb2dyZXNzOm8sb25Eb3dubG9hZFByb2dyZXNzOm8sZGVjb21wcmVzczpvLG1heENvbnRlbnRMZW5ndGg6byxtYXhCb2R5TGVuZ3RoOm8sYmVmb3JlUmVkaXJlY3Q6byx0cmFuc3BvcnQ6byxodHRwQWdlbnQ6byxodHRwc0FnZW50Om8sY2FuY2VsVG9rZW46byxzb2NrZXRQYXRoOm8scmVzcG9uc2VFbmNvZGluZzpvLHZhbGlkYXRlU3RhdHVzOmcsaGVhZGVyczooSSxhKT0+aShmdChJKSxmdChhKSwhMCl9O3JldHVybiB1LmZvckVhY2goT2JqZWN0LmtleXMoT2JqZWN0LmFzc2lnbih7fSxBLGUpKSxmdW5jdGlvbihhKXtsZXQgcz1jW2FdfHxpLHA9cyhBW2FdLGVbYV0sYSk7dS5pc1VuZGVmaW5lZChwKSYmcyE9PWd8fCh0W2FdPXApfSksdH12YXIgUkE9QT0+e2xldCBlPU8oe30sQSkse2RhdGE6dCx3aXRoWFNSRlRva2VuOnIseHNyZkhlYWRlck5hbWU6aSx4c3JmQ29va2llTmFtZTpuLGhlYWRlcnM6byxhdXRoOmd9PWU7ZS5oZWFkZXJzPW89Ri5mcm9tKG8pLGUudXJsPW9BKGxBKGUuYmFzZVVSTCxlLnVybCksQS5wYXJhbXMsQS5wYXJhbXNTZXJpYWxpemVyKSxnJiZvLnNldCgiQXV0aG9yaXphdGlvbiIsIkJhc2ljICIrYnRvYSgoZy51c2VybmFtZXx8IiIpKyI6IisoZy5wYXNzd29yZD91bmVzY2FwZShlbmNvZGVVUklDb21wb25lbnQoZy5wYXNzd29yZCkpOiIiKSkpO2xldCBjO2lmKHUuaXNGb3JtRGF0YSh0KSl7aWYoay5oYXNTdGFuZGFyZEJyb3dzZXJFbnZ8fGsuaGFzU3RhbmRhcmRCcm93c2VyV2ViV29ya2VyRW52KW8uc2V0Q29udGVudFR5cGUodm9pZCAwKTtlbHNlIGlmKChjPW8uZ2V0Q29udGVudFR5cGUoKSkhPT0hMSl7bGV0W0ksLi4uYV09Yz9jLnNwbGl0KCI7IikubWFwKHM9PnMudHJpbSgpKS5maWx0ZXIoQm9vbGVhbik6W107by5zZXRDb250ZW50VHlwZShbSXx8Im11bHRpcGFydC9mb3JtLWRhdGEiLC4uLmFdLmpvaW4oIjsgIikpfX1pZihrLmhhc1N0YW5kYXJkQnJvd3NlckVudiYmKHImJnUuaXNGdW5jdGlvbihyKSYmKHI9cihlKSkscnx8ciE9PSExJiZjdChlLnVybCkpKXtsZXQgST1pJiZuJiZCdC5yZWFkKG4pO0kmJm8uc2V0KGksSSl9cmV0dXJuIGV9O3ZhciBwbj10eXBlb2YgWE1MSHR0cFJlcXVlc3Q8InUiLEN0PXBuJiZmdW5jdGlvbihBKXtyZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24odCxyKXtsZXQgaT1SQShBKSxuPWkuZGF0YSxvPUYuZnJvbShpLmhlYWRlcnMpLm5vcm1hbGl6ZSgpLHtyZXNwb25zZVR5cGU6ZyxvblVwbG9hZFByb2dyZXNzOmMsb25Eb3dubG9hZFByb2dyZXNzOkl9PWksYSxzLHAsbCxCO2Z1bmN0aW9uIEMoKXtsJiZsKCksQiYmQigpLGkuY2FuY2VsVG9rZW4mJmkuY2FuY2VsVG9rZW4udW5zdWJzY3JpYmUoYSksaS5zaWduYWwmJmkuc2lnbmFsLnJlbW92ZUV2ZW50TGlzdGVuZXIoImFib3J0IixhKX1sZXQgZj1uZXcgWE1MSHR0cFJlcXVlc3Q7Zi5vcGVuKGkubWV0aG9kLnRvVXBwZXJDYXNlKCksaS51cmwsITApLGYudGltZW91dD1pLnRpbWVvdXQ7ZnVuY3Rpb24gUSgpe2lmKCFmKXJldHVybjtsZXQgZD1GLmZyb20oImdldEFsbFJlc3BvbnNlSGVhZGVycyJpbiBmJiZmLmdldEFsbFJlc3BvbnNlSGVhZGVycygpKSxZPXtkYXRhOiFnfHxnPT09InRleHQifHxnPT09Impzb24iP2YucmVzcG9uc2VUZXh0OmYucmVzcG9uc2Usc3RhdHVzOmYuc3RhdHVzLHN0YXR1c1RleHQ6Zi5zdGF0dXNUZXh0LGhlYWRlcnM6ZCxjb25maWc6QSxyZXF1ZXN0OmZ9O2dBKGZ1bmN0aW9uKEcpe3QoRyksQygpfSxmdW5jdGlvbihHKXtyKEcpLEMoKX0sWSksZj1udWxsfSJvbmxvYWRlbmQiaW4gZj9mLm9ubG9hZGVuZD1ROmYub25yZWFkeXN0YXRlY2hhbmdlPWZ1bmN0aW9uKCl7IWZ8fGYucmVhZHlTdGF0ZSE9PTR8fGYuc3RhdHVzPT09MCYmIShmLnJlc3BvbnNlVVJMJiZmLnJlc3BvbnNlVVJMLmluZGV4T2YoImZpbGU6Iik9PT0wKXx8c2V0VGltZW91dChRKX0sZi5vbmFib3J0PWZ1bmN0aW9uKCl7ZiYmKHIobmV3IG0oIlJlcXVlc3QgYWJvcnRlZCIsbS5FQ09OTkFCT1JURUQsQSxmKSksZj1udWxsKX0sZi5vbmVycm9yPWZ1bmN0aW9uKCl7cihuZXcgbSgiTmV0d29yayBFcnJvciIsbS5FUlJfTkVUV09SSyxBLGYpKSxmPW51bGx9LGYub250aW1lb3V0PWZ1bmN0aW9uKCl7bGV0IFQ9aS50aW1lb3V0PyJ0aW1lb3V0IG9mICIraS50aW1lb3V0KyJtcyBleGNlZWRlZCI6InRpbWVvdXQgZXhjZWVkZWQiLFk9aS50cmFuc2l0aW9uYWx8fGJBO2kudGltZW91dEVycm9yTWVzc2FnZSYmKFQ9aS50aW1lb3V0RXJyb3JNZXNzYWdlKSxyKG5ldyBtKFQsWS5jbGFyaWZ5VGltZW91dEVycm9yP20uRVRJTUVET1VUOm0uRUNPTk5BQk9SVEVELEEsZikpLGY9bnVsbH0sbj09PXZvaWQgMCYmby5zZXRDb250ZW50VHlwZShudWxsKSwic2V0UmVxdWVzdEhlYWRlciJpbiBmJiZ1LmZvckVhY2goby50b0pTT04oKSxmdW5jdGlvbihULFkpe2Yuc2V0UmVxdWVzdEhlYWRlcihZLFQpfSksdS5pc1VuZGVmaW5lZChpLndpdGhDcmVkZW50aWFscyl8fChmLndpdGhDcmVkZW50aWFscz0hIWkud2l0aENyZWRlbnRpYWxzKSxnJiZnIT09Impzb24iJiYoZi5yZXNwb25zZVR5cGU9aS5yZXNwb25zZVR5cGUpLEkmJihbcCxCXT0kKEksITApLGYuYWRkRXZlbnRMaXN0ZW5lcigicHJvZ3Jlc3MiLHApKSxjJiZmLnVwbG9hZCYmKFtzLGxdPSQoYyksZi51cGxvYWQuYWRkRXZlbnRMaXN0ZW5lcigicHJvZ3Jlc3MiLHMpLGYudXBsb2FkLmFkZEV2ZW50TGlzdGVuZXIoImxvYWRlbmQiLGwpKSwoaS5jYW5jZWxUb2tlbnx8aS5zaWduYWwpJiYoYT1kPT57ZiYmKHIoIWR8fGQudHlwZT9uZXcgSChudWxsLEEsZik6ZCksZi5hYm9ydCgpLGY9bnVsbCl9LGkuY2FuY2VsVG9rZW4mJmkuY2FuY2VsVG9rZW4uc3Vic2NyaWJlKGEpLGkuc2lnbmFsJiYoaS5zaWduYWwuYWJvcnRlZD9hKCk6aS5zaWduYWwuYWRkRXZlbnRMaXN0ZW5lcigiYWJvcnQiLGEpKSk7bGV0IGg9SWUoaS51cmwpO2lmKGgmJmsucHJvdG9jb2xzLmluZGV4T2YoaCk9PT0tMSl7cihuZXcgbSgiVW5zdXBwb3J0ZWQgcHJvdG9jb2wgIitoKyI6IixtLkVSUl9CQURfUkVRVUVTVCxBKSk7cmV0dXJufWYuc2VuZChufHxudWxsKX0pfTt2YXIgRW49KEEsZSk9PntsZXQgdD1uZXcgQWJvcnRDb250cm9sbGVyLHIsaT1mdW5jdGlvbihjKXtpZighcil7cj0hMCxvKCk7bGV0IEk9YyBpbnN0YW5jZW9mIEVycm9yP2M6dGhpcy5yZWFzb247dC5hYm9ydChJIGluc3RhbmNlb2YgbT9JOm5ldyBIKEkgaW5zdGFuY2VvZiBFcnJvcj9JLm1lc3NhZ2U6SSkpfX0sbj1lJiZzZXRUaW1lb3V0KCgpPT57aShuZXcgbShgdGltZW91dCAke2V9IG9mIG1zIGV4Y2VlZGVkYCxtLkVUSU1FRE9VVCkpfSxlKSxvPSgpPT57QSYmKG4mJmNsZWFyVGltZW91dChuKSxuPW51bGwsQS5mb3JFYWNoKGM9PntjJiYoYy5yZW1vdmVFdmVudExpc3RlbmVyP2MucmVtb3ZlRXZlbnRMaXN0ZW5lcigiYWJvcnQiLGkpOmMudW5zdWJzY3JpYmUoaSkpfSksQT1udWxsKX07QS5mb3JFYWNoKGM9PmMmJmMuYWRkRXZlbnRMaXN0ZW5lciYmYy5hZGRFdmVudExpc3RlbmVyKCJhYm9ydCIsaSkpO2xldHtzaWduYWw6Z309dDtyZXR1cm4gZy51bnN1YnNjcmliZT1vLFtnLCgpPT57biYmY2xlYXJUaW1lb3V0KG4pLG49bnVsbH1dfSxwdD1Fbjt2YXIgUW49ZnVuY3Rpb24qKEEsZSl7bGV0IHQ9QS5ieXRlTGVuZ3RoO2lmKCFlfHx0PGUpe3lpZWxkIEE7cmV0dXJufWxldCByPTAsaTtmb3IoO3I8dDspaT1yK2UseWllbGQgQS5zbGljZShyLGkpLHI9aX0sbW49YXN5bmMgZnVuY3Rpb24qKEEsZSx0KXtmb3IgYXdhaXQobGV0IHIgb2YgQSl5aWVsZCpRbihBcnJheUJ1ZmZlci5pc1ZpZXcocik/cjphd2FpdCB0KFN0cmluZyhyKSksZSl9LEJlPShBLGUsdCxyLGkpPT57bGV0IG49bW4oQSxlLGkpLG89MCxnLGM9ST0+e2d8fChnPSEwLHImJnIoSSkpfTtyZXR1cm4gbmV3IFJlYWRhYmxlU3RyZWFtKHthc3luYyBwdWxsKEkpe3RyeXtsZXR7ZG9uZTphLHZhbHVlOnN9PWF3YWl0IG4ubmV4dCgpO2lmKGEpe2MoKSxJLmNsb3NlKCk7cmV0dXJufWxldCBwPXMuYnl0ZUxlbmd0aDtpZih0KXtsZXQgbD1vKz1wO3QobCl9SS5lbnF1ZXVlKG5ldyBVaW50OEFycmF5KHMpKX1jYXRjaChhKXt0aHJvdyBjKGEpLGF9fSxjYW5jZWwoSSl7cmV0dXJuIGMoSSksbi5yZXR1cm4oKX19LHtoaWdoV2F0ZXJNYXJrOjJ9KX07dmFyIE5BPXR5cGVvZiBmZXRjaD09ImZ1bmN0aW9uIiYmdHlwZW9mIFJlcXVlc3Q9PSJmdW5jdGlvbiImJnR5cGVvZiBSZXNwb25zZT09ImZ1bmN0aW9uIixRdD1OQSYmdHlwZW9mIFJlYWRhYmxlU3RyZWFtPT0iZnVuY3Rpb24iLGZlPU5BJiYodHlwZW9mIFRleHRFbmNvZGVyPT0iZnVuY3Rpb24iPyhBPT5lPT5BLmVuY29kZShlKSkobmV3IFRleHRFbmNvZGVyKTphc3luYyBBPT5uZXcgVWludDhBcnJheShhd2FpdCBuZXcgUmVzcG9uc2UoQSkuYXJyYXlCdWZmZXIoKSkpLG10PShBLC4uLmUpPT57dHJ5e3JldHVybiEhQSguLi5lKX1jYXRjaHtyZXR1cm4hMX19LGRuPVF0JiZtdCgoKT0+e2xldCBBPSExLGU9bmV3IFJlcXVlc3Qoay5vcmlnaW4se2JvZHk6bmV3IFJlYWRhYmxlU3RyZWFtLG1ldGhvZDoiUE9TVCIsZ2V0IGR1cGxleCgpe3JldHVybiBBPSEwLCJoYWxmIn19KS5oZWFkZXJzLmhhcygiQ29udGVudC1UeXBlIik7cmV0dXJuIEEmJiFlfSksRXQ9NjQqMTAyNCxDZT1RdCYmbXQoKCk9PnUuaXNSZWFkYWJsZVN0cmVhbShuZXcgUmVzcG9uc2UoIiIpLmJvZHkpKSxVQT17c3RyZWFtOkNlJiYoQT0+QS5ib2R5KX07TkEmJihBPT57WyJ0ZXh0IiwiYXJyYXlCdWZmZXIiLCJibG9iIiwiZm9ybURhdGEiLCJzdHJlYW0iXS5mb3JFYWNoKGU9PnshVUFbZV0mJihVQVtlXT11LmlzRnVuY3Rpb24oQVtlXSk/dD0+dFtlXSgpOih0LHIpPT57dGhyb3cgbmV3IG0oYFJlc3BvbnNlIHR5cGUgJyR7ZX0nIGlzIG5vdCBzdXBwb3J0ZWRgLG0uRVJSX05PVF9TVVBQT1JULHIpfSl9KX0pKG5ldyBSZXNwb25zZSk7dmFyIGhuPWFzeW5jIEE9PntpZihBPT1udWxsKXJldHVybiAwO2lmKHUuaXNCbG9iKEEpKXJldHVybiBBLnNpemU7aWYodS5pc1NwZWNDb21wbGlhbnRGb3JtKEEpKXJldHVybihhd2FpdCBuZXcgUmVxdWVzdChBKS5hcnJheUJ1ZmZlcigpKS5ieXRlTGVuZ3RoO2lmKHUuaXNBcnJheUJ1ZmZlclZpZXcoQSl8fHUuaXNBcnJheUJ1ZmZlcihBKSlyZXR1cm4gQS5ieXRlTGVuZ3RoO2lmKHUuaXNVUkxTZWFyY2hQYXJhbXMoQSkmJihBPUErIiIpLHUuaXNTdHJpbmcoQSkpcmV0dXJuKGF3YWl0IGZlKEEpKS5ieXRlTGVuZ3RofSx5bj1hc3luYyhBLGUpPT57bGV0IHQ9dS50b0Zpbml0ZU51bWJlcihBLmdldENvbnRlbnRMZW5ndGgoKSk7cmV0dXJuIHQ/P2huKGUpfSxkdD1OQSYmKGFzeW5jIEE9PntsZXR7dXJsOmUsbWV0aG9kOnQsZGF0YTpyLHNpZ25hbDppLGNhbmNlbFRva2VuOm4sdGltZW91dDpvLG9uRG93bmxvYWRQcm9ncmVzczpnLG9uVXBsb2FkUHJvZ3Jlc3M6YyxyZXNwb25zZVR5cGU6SSxoZWFkZXJzOmEsd2l0aENyZWRlbnRpYWxzOnM9InNhbWUtb3JpZ2luIixmZXRjaE9wdGlvbnM6cH09UkEoQSk7ST1JPyhJKyIiKS50b0xvd2VyQ2FzZSgpOiJ0ZXh0IjtsZXRbbCxCXT1pfHxufHxvP3B0KFtpLG5dLG8pOltdLEMsZixRPSgpPT57IUMmJnNldFRpbWVvdXQoKCk9PntsJiZsLnVuc3Vic2NyaWJlKCl9KSxDPSEwfSxoO3RyeXtpZihjJiZkbiYmdCE9PSJnZXQiJiZ0IT09ImhlYWQiJiYoaD1hd2FpdCB5bihhLHIpKSE9PTApe2xldCBQPW5ldyBSZXF1ZXN0KGUse21ldGhvZDoiUE9TVCIsYm9keTpyLGR1cGxleDoiaGFsZiJ9KSxHO2lmKHUuaXNGb3JtRGF0YShyKSYmKEc9UC5oZWFkZXJzLmdldCgiY29udGVudC10eXBlIikpJiZhLnNldENvbnRlbnRUeXBlKEcpLFAuYm9keSl7bGV0W0hBLGZBXT1nZShoLCQobGUoYykpKTtyPUJlKFAuYm9keSxFdCxIQSxmQSxmZSl9fXUuaXNTdHJpbmcocyl8fChzPXM/ImluY2x1ZGUiOiJvbWl0IiksZj1uZXcgUmVxdWVzdChlLHsuLi5wLHNpZ25hbDpsLG1ldGhvZDp0LnRvVXBwZXJDYXNlKCksaGVhZGVyczphLm5vcm1hbGl6ZSgpLnRvSlNPTigpLGJvZHk6cixkdXBsZXg6ImhhbGYiLGNyZWRlbnRpYWxzOnN9KTtsZXQgZD1hd2FpdCBmZXRjaChmKSxUPUNlJiYoST09PSJzdHJlYW0ifHxJPT09InJlc3BvbnNlIik7aWYoQ2UmJihnfHxUKSl7bGV0IFA9e307WyJzdGF0dXMiLCJzdGF0dXNUZXh0IiwiaGVhZGVycyJdLmZvckVhY2goRmU9PntQW0ZlXT1kW0ZlXX0pO2xldCBHPXUudG9GaW5pdGVOdW1iZXIoZC5oZWFkZXJzLmdldCgiY29udGVudC1sZW5ndGgiKSksW0hBLGZBXT1nJiZnZShHLCQobGUoZyksITApKXx8W107ZD1uZXcgUmVzcG9uc2UoQmUoZC5ib2R5LEV0LEhBLCgpPT57ZkEmJmZBKCksVCYmUSgpfSxmZSksUCl9ST1JfHwidGV4dCI7bGV0IFk9YXdhaXQgVUFbdS5maW5kS2V5KFVBLEkpfHwidGV4dCJdKGQsQSk7cmV0dXJuIVQmJlEoKSxCJiZCKCksYXdhaXQgbmV3IFByb21pc2UoKFAsRyk9PntnQShQLEcse2RhdGE6WSxoZWFkZXJzOkYuZnJvbShkLmhlYWRlcnMpLHN0YXR1czpkLnN0YXR1cyxzdGF0dXNUZXh0OmQuc3RhdHVzVGV4dCxjb25maWc6QSxyZXF1ZXN0OmZ9KX0pfWNhdGNoKGQpe3Rocm93IFEoKSxkJiZkLm5hbWU9PT0iVHlwZUVycm9yIiYmL2ZldGNoL2kudGVzdChkLm1lc3NhZ2UpP09iamVjdC5hc3NpZ24obmV3IG0oIk5ldHdvcmsgRXJyb3IiLG0uRVJSX05FVFdPUkssQSxmKSx7Y2F1c2U6ZC5jYXVzZXx8ZH0pOm0uZnJvbShkLGQmJmQuY29kZSxBLGYpfX0pO3ZhciBwZT17aHR0cDpEQSx4aHI6Q3QsZmV0Y2g6ZHR9O3UuZm9yRWFjaChwZSwoQSxlKT0+e2lmKEEpe3RyeXtPYmplY3QuZGVmaW5lUHJvcGVydHkoQSwibmFtZSIse3ZhbHVlOmV9KX1jYXRjaHt9T2JqZWN0LmRlZmluZVByb3BlcnR5KEEsImFkYXB0ZXJOYW1lIix7dmFsdWU6ZX0pfX0pO3ZhciBodD1BPT5gLSAke0F9YCx3bj1BPT51LmlzRnVuY3Rpb24oQSl8fEE9PT1udWxsfHxBPT09ITEsVEE9e2dldEFkYXB0ZXI6QT0+e0E9dS5pc0FycmF5KEEpP0E6W0FdO2xldHtsZW5ndGg6ZX09QSx0LHIsaT17fTtmb3IobGV0IG49MDtuPGU7bisrKXt0PUFbbl07bGV0IG87aWYocj10LCF3bih0KSYmKHI9cGVbKG89U3RyaW5nKHQpKS50b0xvd2VyQ2FzZSgpXSxyPT09dm9pZCAwKSl0aHJvdyBuZXcgbShgVW5rbm93biBhZGFwdGVyICcke299J2ApO2lmKHIpYnJlYWs7aVtvfHwiIyIrbl09cn1pZighcil7bGV0IG49T2JqZWN0LmVudHJpZXMoaSkubWFwKChbZyxjXSk9PmBhZGFwdGVyICR7Z30gYCsoYz09PSExPyJpcyBub3Qgc3VwcG9ydGVkIGJ5IHRoZSBlbnZpcm9ubWVudCI6ImlzIG5vdCBhdmFpbGFibGUgaW4gdGhlIGJ1aWxkIikpLG89ZT9uLmxlbmd0aD4xP2BzaW5jZSA6CmArbi5tYXAoaHQpLmpvaW4oYApgKToiICIraHQoblswXSk6ImFzIG5vIGFkYXB0ZXIgc3BlY2lmaWVkIjt0aHJvdyBuZXcgbSgiVGhlcmUgaXMgbm8gc3VpdGFibGUgYWRhcHRlciB0byBkaXNwYXRjaCB0aGUgcmVxdWVzdCAiK28sIkVSUl9OT1RfU1VQUE9SVCIpfXJldHVybiByfSxhZGFwdGVyczpwZX07ZnVuY3Rpb24gRWUoQSl7aWYoQS5jYW5jZWxUb2tlbiYmQS5jYW5jZWxUb2tlbi50aHJvd0lmUmVxdWVzdGVkKCksQS5zaWduYWwmJkEuc2lnbmFsLmFib3J0ZWQpdGhyb3cgbmV3IEgobnVsbCxBKX1mdW5jdGlvbiBMQShBKXtyZXR1cm4gRWUoQSksQS5oZWFkZXJzPUYuZnJvbShBLmhlYWRlcnMpLEEuZGF0YT1zQS5jYWxsKEEsQS50cmFuc2Zvcm1SZXF1ZXN0KSxbInBvc3QiLCJwdXQiLCJwYXRjaCJdLmluZGV4T2YoQS5tZXRob2QpIT09LTEmJkEuaGVhZGVycy5zZXRDb250ZW50VHlwZSgiYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkIiwhMSksVEEuZ2V0QWRhcHRlcihBLmFkYXB0ZXJ8fFouYWRhcHRlcikoQSkudGhlbihmdW5jdGlvbihyKXtyZXR1cm4gRWUoQSksci5kYXRhPXNBLmNhbGwoQSxBLnRyYW5zZm9ybVJlc3BvbnNlLHIpLHIuaGVhZGVycz1GLmZyb20oci5oZWFkZXJzKSxyfSxmdW5jdGlvbihyKXtyZXR1cm4gSUEocil8fChFZShBKSxyJiZyLnJlc3BvbnNlJiYoci5yZXNwb25zZS5kYXRhPXNBLmNhbGwoQSxBLnRyYW5zZm9ybVJlc3BvbnNlLHIucmVzcG9uc2UpLHIucmVzcG9uc2UuaGVhZGVycz1GLmZyb20oci5yZXNwb25zZS5oZWFkZXJzKSkpLFByb21pc2UucmVqZWN0KHIpfSl9dmFyIHhBPSIxLjcuNCI7dmFyIFFlPXt9O1sib2JqZWN0IiwiYm9vbGVhbiIsIm51bWJlciIsImZ1bmN0aW9uIiwic3RyaW5nIiwic3ltYm9sIl0uZm9yRWFjaCgoQSxlKT0+e1FlW0FdPWZ1bmN0aW9uKHIpe3JldHVybiB0eXBlb2Ygcj09PUF8fCJhIisoZTwxPyJuICI6IiAiKStBfX0pO3ZhciB5dD17fTtRZS50cmFuc2l0aW9uYWw9ZnVuY3Rpb24oZSx0LHIpe2Z1bmN0aW9uIGkobixvKXtyZXR1cm4iW0F4aW9zIHYiK3hBKyJdIFRyYW5zaXRpb25hbCBvcHRpb24gJyIrbisiJyIrbysocj8iLiAiK3I6IiIpfXJldHVybihuLG8sZyk9PntpZihlPT09ITEpdGhyb3cgbmV3IG0oaShvLCIgaGFzIGJlZW4gcmVtb3ZlZCIrKHQ/IiBpbiAiK3Q6IiIpKSxtLkVSUl9ERVBSRUNBVEVEKTtyZXR1cm4gdCYmIXl0W29dJiYoeXRbb109ITAsY29uc29sZS53YXJuKGkobywiIGhhcyBiZWVuIGRlcHJlY2F0ZWQgc2luY2UgdiIrdCsiIGFuZCB3aWxsIGJlIHJlbW92ZWQgaW4gdGhlIG5lYXIgZnV0dXJlIikpKSxlP2UobixvLGcpOiEwfX07ZnVuY3Rpb24gRG4oQSxlLHQpe2lmKHR5cGVvZiBBIT0ib2JqZWN0Iil0aHJvdyBuZXcgbSgib3B0aW9ucyBtdXN0IGJlIGFuIG9iamVjdCIsbS5FUlJfQkFEX09QVElPTl9WQUxVRSk7bGV0IHI9T2JqZWN0LmtleXMoQSksaT1yLmxlbmd0aDtmb3IoO2ktLSA+MDspe2xldCBuPXJbaV0sbz1lW25dO2lmKG8pe2xldCBnPUFbbl0sYz1nPT09dm9pZCAwfHxvKGcsbixBKTtpZihjIT09ITApdGhyb3cgbmV3IG0oIm9wdGlvbiAiK24rIiBtdXN0IGJlICIrYyxtLkVSUl9CQURfT1BUSU9OX1ZBTFVFKTtjb250aW51ZX1pZih0IT09ITApdGhyb3cgbmV3IG0oIlVua25vd24gb3B0aW9uICIrbixtLkVSUl9CQURfT1BUSU9OKX19dmFyIE9BPXthc3NlcnRPcHRpb25zOkRuLHZhbGlkYXRvcnM6UWV9O3ZhciBxPU9BLnZhbGlkYXRvcnMsQUE9Y2xhc3N7Y29uc3RydWN0b3IoZSl7dGhpcy5kZWZhdWx0cz1lLHRoaXMuaW50ZXJjZXB0b3JzPXtyZXF1ZXN0Om5ldyByZSxyZXNwb25zZTpuZXcgcmV9fWFzeW5jIHJlcXVlc3QoZSx0KXt0cnl7cmV0dXJuIGF3YWl0IHRoaXMuX3JlcXVlc3QoZSx0KX1jYXRjaChyKXtpZihyIGluc3RhbmNlb2YgRXJyb3Ipe2xldCBpO0Vycm9yLmNhcHR1cmVTdGFja1RyYWNlP0Vycm9yLmNhcHR1cmVTdGFja1RyYWNlKGk9e30pOmk9bmV3IEVycm9yO2xldCBuPWkuc3RhY2s/aS5zdGFjay5yZXBsYWNlKC9eLitcbi8sIiIpOiIiO3RyeXtyLnN0YWNrP24mJiFTdHJpbmcoci5zdGFjaykuZW5kc1dpdGgobi5yZXBsYWNlKC9eLitcbi4rXG4vLCIiKSkmJihyLnN0YWNrKz1gCmArbik6ci5zdGFjaz1ufWNhdGNoe319dGhyb3cgcn19X3JlcXVlc3QoZSx0KXt0eXBlb2YgZT09InN0cmluZyI/KHQ9dHx8e30sdC51cmw9ZSk6dD1lfHx7fSx0PU8odGhpcy5kZWZhdWx0cyx0KTtsZXR7dHJhbnNpdGlvbmFsOnIscGFyYW1zU2VyaWFsaXplcjppLGhlYWRlcnM6bn09dDtyIT09dm9pZCAwJiZPQS5hc3NlcnRPcHRpb25zKHIse3NpbGVudEpTT05QYXJzaW5nOnEudHJhbnNpdGlvbmFsKHEuYm9vbGVhbiksZm9yY2VkSlNPTlBhcnNpbmc6cS50cmFuc2l0aW9uYWwocS5ib29sZWFuKSxjbGFyaWZ5VGltZW91dEVycm9yOnEudHJhbnNpdGlvbmFsKHEuYm9vbGVhbil9LCExKSxpIT1udWxsJiYodS5pc0Z1bmN0aW9uKGkpP3QucGFyYW1zU2VyaWFsaXplcj17c2VyaWFsaXplOml9Ok9BLmFzc2VydE9wdGlvbnMoaSx7ZW5jb2RlOnEuZnVuY3Rpb24sc2VyaWFsaXplOnEuZnVuY3Rpb259LCEwKSksdC5tZXRob2Q9KHQubWV0aG9kfHx0aGlzLmRlZmF1bHRzLm1ldGhvZHx8ImdldCIpLnRvTG93ZXJDYXNlKCk7bGV0IG89biYmdS5tZXJnZShuLmNvbW1vbixuW3QubWV0aG9kXSk7biYmdS5mb3JFYWNoKFsiZGVsZXRlIiwiZ2V0IiwiaGVhZCIsInBvc3QiLCJwdXQiLCJwYXRjaCIsImNvbW1vbiJdLEI9PntkZWxldGUgbltCXX0pLHQuaGVhZGVycz1GLmNvbmNhdChvLG4pO2xldCBnPVtdLGM9ITA7dGhpcy5pbnRlcmNlcHRvcnMucmVxdWVzdC5mb3JFYWNoKGZ1bmN0aW9uKEMpe3R5cGVvZiBDLnJ1bldoZW49PSJmdW5jdGlvbiImJkMucnVuV2hlbih0KT09PSExfHwoYz1jJiZDLnN5bmNocm9ub3VzLGcudW5zaGlmdChDLmZ1bGZpbGxlZCxDLnJlamVjdGVkKSl9KTtsZXQgST1bXTt0aGlzLmludGVyY2VwdG9ycy5yZXNwb25zZS5mb3JFYWNoKGZ1bmN0aW9uKEMpe0kucHVzaChDLmZ1bGZpbGxlZCxDLnJlamVjdGVkKX0pO2xldCBhLHM9MCxwO2lmKCFjKXtsZXQgQj1bTEEuYmluZCh0aGlzKSx2b2lkIDBdO2ZvcihCLnVuc2hpZnQuYXBwbHkoQixnKSxCLnB1c2guYXBwbHkoQixJKSxwPUIubGVuZ3RoLGE9UHJvbWlzZS5yZXNvbHZlKHQpO3M8cDspYT1hLnRoZW4oQltzKytdLEJbcysrXSk7cmV0dXJuIGF9cD1nLmxlbmd0aDtsZXQgbD10O2ZvcihzPTA7czxwOyl7bGV0IEI9Z1tzKytdLEM9Z1tzKytdO3RyeXtsPUIobCl9Y2F0Y2goZil7Qy5jYWxsKHRoaXMsZik7YnJlYWt9fXRyeXthPUxBLmNhbGwodGhpcyxsKX1jYXRjaChCKXtyZXR1cm4gUHJvbWlzZS5yZWplY3QoQil9Zm9yKHM9MCxwPUkubGVuZ3RoO3M8cDspYT1hLnRoZW4oSVtzKytdLElbcysrXSk7cmV0dXJuIGF9Z2V0VXJpKGUpe2U9Tyh0aGlzLmRlZmF1bHRzLGUpO2xldCB0PWxBKGUuYmFzZVVSTCxlLnVybCk7cmV0dXJuIG9BKHQsZS5wYXJhbXMsZS5wYXJhbXNTZXJpYWxpemVyKX19O3UuZm9yRWFjaChbImRlbGV0ZSIsImdldCIsImhlYWQiLCJvcHRpb25zIl0sZnVuY3Rpb24oZSl7QUEucHJvdG90eXBlW2VdPWZ1bmN0aW9uKHQscil7cmV0dXJuIHRoaXMucmVxdWVzdChPKHJ8fHt9LHttZXRob2Q6ZSx1cmw6dCxkYXRhOihyfHx7fSkuZGF0YX0pKX19KTt1LmZvckVhY2goWyJwb3N0IiwicHV0IiwicGF0Y2giXSxmdW5jdGlvbihlKXtmdW5jdGlvbiB0KHIpe3JldHVybiBmdW5jdGlvbihuLG8sZyl7cmV0dXJuIHRoaXMucmVxdWVzdChPKGd8fHt9LHttZXRob2Q6ZSxoZWFkZXJzOnI/eyJDb250ZW50LVR5cGUiOiJtdWx0aXBhcnQvZm9ybS1kYXRhIn06e30sdXJsOm4sZGF0YTpvfSkpfX1BQS5wcm90b3R5cGVbZV09dCgpLEFBLnByb3RvdHlwZVtlKyJGb3JtIl09dCghMCl9KTt2YXIgdUE9QUE7dmFyIG1lPWNsYXNzIEF7Y29uc3RydWN0b3IoZSl7aWYodHlwZW9mIGUhPSJmdW5jdGlvbiIpdGhyb3cgbmV3IFR5cGVFcnJvcigiZXhlY3V0b3IgbXVzdCBiZSBhIGZ1bmN0aW9uLiIpO2xldCB0O3RoaXMucHJvbWlzZT1uZXcgUHJvbWlzZShmdW5jdGlvbihuKXt0PW59KTtsZXQgcj10aGlzO3RoaXMucHJvbWlzZS50aGVuKGk9PntpZighci5fbGlzdGVuZXJzKXJldHVybjtsZXQgbj1yLl9saXN0ZW5lcnMubGVuZ3RoO2Zvcig7bi0tID4wOylyLl9saXN0ZW5lcnNbbl0oaSk7ci5fbGlzdGVuZXJzPW51bGx9KSx0aGlzLnByb21pc2UudGhlbj1pPT57bGV0IG4sbz1uZXcgUHJvbWlzZShnPT57ci5zdWJzY3JpYmUoZyksbj1nfSkudGhlbihpKTtyZXR1cm4gby5jYW5jZWw9ZnVuY3Rpb24oKXtyLnVuc3Vic2NyaWJlKG4pfSxvfSxlKGZ1bmN0aW9uKG4sbyxnKXtyLnJlYXNvbnx8KHIucmVhc29uPW5ldyBIKG4sbyxnKSx0KHIucmVhc29uKSl9KX10aHJvd0lmUmVxdWVzdGVkKCl7aWYodGhpcy5yZWFzb24pdGhyb3cgdGhpcy5yZWFzb259c3Vic2NyaWJlKGUpe2lmKHRoaXMucmVhc29uKXtlKHRoaXMucmVhc29uKTtyZXR1cm59dGhpcy5fbGlzdGVuZXJzP3RoaXMuX2xpc3RlbmVycy5wdXNoKGUpOnRoaXMuX2xpc3RlbmVycz1bZV19dW5zdWJzY3JpYmUoZSl7aWYoIXRoaXMuX2xpc3RlbmVycylyZXR1cm47bGV0IHQ9dGhpcy5fbGlzdGVuZXJzLmluZGV4T2YoZSk7dCE9PS0xJiZ0aGlzLl9saXN0ZW5lcnMuc3BsaWNlKHQsMSl9c3RhdGljIHNvdXJjZSgpe2xldCBlO3JldHVybnt0b2tlbjpuZXcgQShmdW5jdGlvbihpKXtlPWl9KSxjYW5jZWw6ZX19fSx3dD1tZTtmdW5jdGlvbiBkZShBKXtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIEEuYXBwbHkobnVsbCx0KX19ZnVuY3Rpb24gaGUoQSl7cmV0dXJuIHUuaXNPYmplY3QoQSkmJkEuaXNBeGlvc0Vycm9yPT09ITB9dmFyIHllPXtDb250aW51ZToxMDAsU3dpdGNoaW5nUHJvdG9jb2xzOjEwMSxQcm9jZXNzaW5nOjEwMixFYXJseUhpbnRzOjEwMyxPazoyMDAsQ3JlYXRlZDoyMDEsQWNjZXB0ZWQ6MjAyLE5vbkF1dGhvcml0YXRpdmVJbmZvcm1hdGlvbjoyMDMsTm9Db250ZW50OjIwNCxSZXNldENvbnRlbnQ6MjA1LFBhcnRpYWxDb250ZW50OjIwNixNdWx0aVN0YXR1czoyMDcsQWxyZWFkeVJlcG9ydGVkOjIwOCxJbVVzZWQ6MjI2LE11bHRpcGxlQ2hvaWNlczozMDAsTW92ZWRQZXJtYW5lbnRseTozMDEsRm91bmQ6MzAyLFNlZU90aGVyOjMwMyxOb3RNb2RpZmllZDozMDQsVXNlUHJveHk6MzA1LFVudXNlZDozMDYsVGVtcG9yYXJ5UmVkaXJlY3Q6MzA3LFBlcm1hbmVudFJlZGlyZWN0OjMwOCxCYWRSZXF1ZXN0OjQwMCxVbmF1dGhvcml6ZWQ6NDAxLFBheW1lbnRSZXF1aXJlZDo0MDIsRm9yYmlkZGVuOjQwMyxOb3RGb3VuZDo0MDQsTWV0aG9kTm90QWxsb3dlZDo0MDUsTm90QWNjZXB0YWJsZTo0MDYsUHJveHlBdXRoZW50aWNhdGlvblJlcXVpcmVkOjQwNyxSZXF1ZXN0VGltZW91dDo0MDgsQ29uZmxpY3Q6NDA5LEdvbmU6NDEwLExlbmd0aFJlcXVpcmVkOjQxMSxQcmVjb25kaXRpb25GYWlsZWQ6NDEyLFBheWxvYWRUb29MYXJnZTo0MTMsVXJpVG9vTG9uZzo0MTQsVW5zdXBwb3J0ZWRNZWRpYVR5cGU6NDE1LFJhbmdlTm90U2F0aXNmaWFibGU6NDE2LEV4cGVjdGF0aW9uRmFpbGVkOjQxNyxJbUFUZWFwb3Q6NDE4LE1pc2RpcmVjdGVkUmVxdWVzdDo0MjEsVW5wcm9jZXNzYWJsZUVudGl0eTo0MjIsTG9ja2VkOjQyMyxGYWlsZWREZXBlbmRlbmN5OjQyNCxUb29FYXJseTo0MjUsVXBncmFkZVJlcXVpcmVkOjQyNixQcmVjb25kaXRpb25SZXF1aXJlZDo0MjgsVG9vTWFueVJlcXVlc3RzOjQyOSxSZXF1ZXN0SGVhZGVyRmllbGRzVG9vTGFyZ2U6NDMxLFVuYXZhaWxhYmxlRm9yTGVnYWxSZWFzb25zOjQ1MSxJbnRlcm5hbFNlcnZlckVycm9yOjUwMCxOb3RJbXBsZW1lbnRlZDo1MDEsQmFkR2F0ZXdheTo1MDIsU2VydmljZVVuYXZhaWxhYmxlOjUwMyxHYXRld2F5VGltZW91dDo1MDQsSHR0cFZlcnNpb25Ob3RTdXBwb3J0ZWQ6NTA1LFZhcmlhbnRBbHNvTmVnb3RpYXRlczo1MDYsSW5zdWZmaWNpZW50U3RvcmFnZTo1MDcsTG9vcERldGVjdGVkOjUwOCxOb3RFeHRlbmRlZDo1MTAsTmV0d29ya0F1dGhlbnRpY2F0aW9uUmVxdWlyZWQ6NTExfTtPYmplY3QuZW50cmllcyh5ZSkuZm9yRWFjaCgoW0EsZV0pPT57eWVbZV09QX0pO3ZhciBEdD15ZTtmdW5jdGlvbiBTdChBKXtsZXQgZT1uZXcgdUEoQSksdD1yQSh1QS5wcm90b3R5cGUucmVxdWVzdCxlKTtyZXR1cm4gdS5leHRlbmQodCx1QS5wcm90b3R5cGUsZSx7YWxsT3duS2V5czohMH0pLHUuZXh0ZW5kKHQsZSxudWxsLHthbGxPd25LZXlzOiEwfSksdC5jcmVhdGU9ZnVuY3Rpb24oaSl7cmV0dXJuIFN0KE8oQSxpKSl9LHR9dmFyIFM9U3QoWik7Uy5BeGlvcz11QTtTLkNhbmNlbGVkRXJyb3I9SDtTLkNhbmNlbFRva2VuPXd0O1MuaXNDYW5jZWw9SUE7Uy5WRVJTSU9OPXhBO1MudG9Gb3JtRGF0YT1NO1MuQXhpb3NFcnJvcj1tO1MuQ2FuY2VsPVMuQ2FuY2VsZWRFcnJvcjtTLmFsbD1mdW5jdGlvbihlKXtyZXR1cm4gUHJvbWlzZS5hbGwoZSl9O1Muc3ByZWFkPWRlO1MuaXNBeGlvc0Vycm9yPWhlO1MubWVyZ2VDb25maWc9TztTLkF4aW9zSGVhZGVycz1GO1MuZm9ybVRvSlNPTj1BPT5GQSh1LmlzSFRNTEZvcm0oQSk/bmV3IEZvcm1EYXRhKEEpOkEpO1MuZ2V0QWRhcHRlcj1UQS5nZXRBZGFwdGVyO1MuSHR0cFN0YXR1c0NvZGU9RHQ7Uy5kZWZhdWx0PVM7dmFyIGVBPVM7dmFye0F4aW9zOnpzLEF4aW9zRXJyb3I6VnMsQ2FuY2VsZWRFcnJvcjpacyxpc0NhbmNlbDpYcyxDYW5jZWxUb2tlbjokcyxWRVJTSU9OOkFJLGFsbDplSSxDYW5jZWw6dEksaXNBeGlvc0Vycm9yOnJJLHNwcmVhZDpuSSx0b0Zvcm1EYXRhOmlJLEF4aW9zSGVhZGVyczpvSSxIdHRwU3RhdHVzQ29kZTphSSxmb3JtVG9KU09OOnNJLGdldEFkYXB0ZXI6SUksbWVyZ2VDb25maWc6Z0l9PWVBO2FzeW5jIGZ1bmN0aW9uIFNuKEEsZSl7bGV0IHQ9QSxyPW51bGw7aWYodD09bnVsbClyPW5ldyBXb3JrZXIobmV3IFVSTCgiLi93ZWItd29ya2Vycy9pdGstd2FzbS1waXBlbGluZS53b3JrZXIuanMiLGltcG9ydC5tZXRhLnVybCkse3R5cGU6Im1vZHVsZSJ9KTtlbHNlIGlmKHQuc3RhcnRzV2l0aCgiaHR0cCIpKXtsZXQgaT1hd2FpdCBlQS5nZXQodCx7cmVzcG9uc2VUeXBlOiJibG9iIixwYXJhbXM6ZX0pLG49VVJMLmNyZWF0ZU9iamVjdFVSTChpLmRhdGEpO3I9bmV3IFdvcmtlcihuLHt0eXBlOiJtb2R1bGUifSl9ZWxzZSByPW5ldyBXb3JrZXIodCx7dHlwZToibW9kdWxlIn0pO3JldHVybiByfXZhciBjQT1TbjtmdW5jdGlvbiBidChBKXtsZXQgZT1WQShBKSx0PUE7cmV0dXJuIHQudGVybWluYXRlZD0hMSx0LndvcmtlclByb3h5PWUsdC5vcmlnaW5hbFRlcm1pbmF0ZT10LnRlcm1pbmF0ZSx0LnRlcm1pbmF0ZT0oKT0+e3QudGVybWluYXRlZD0hMCx0LndvcmtlclByb3h5W3pBXSgpLHQub3JpZ2luYWxUZXJtaW5hdGUoKX0se3dvcmtlclByb3h5OmUsd29ya2VyOnR9fWFzeW5jIGZ1bmN0aW9uIGJuKEEsZSx0KXtsZXQgcjtpZihBIT1udWxsKXtsZXQgbj1BO3JldHVybiBuLndvcmtlclByb3h5IT09dm9pZCAwPyhyPW4ud29ya2VyUHJveHkse3dvcmtlclByb3h5OnIsd29ya2VyOm59KTpidChBKX1sZXQgaT1hd2FpdCBjQShlLHQpO3JldHVybiBidChpKX12YXIgRnQ9Ym47YXN5bmMgZnVuY3Rpb24gRm4oQSxlLHQpe2xldCByPSJ1bmtub3duIjt0eXBlb2YgQSE9InN0cmluZyI/cj1BLmhyZWY6QS5zdGFydHNXaXRoKCJodHRwIik/cj1BOnI9dHlwZW9mIGU8InUiP2Ake2V9LyR7QX1gOkEsci5lbmRzV2l0aCgiLmpzIikmJihyPXIuc3Vic3RyaW5nKDAsci5sZW5ndGgtMykpLHIuZW5kc1dpdGgoIi53YXNtIikmJihyPXIuc3Vic3RyaW5nKDAsci5sZW5ndGgtNSkpO2xldCBpPWAke3J9Lndhc21gLG89KGF3YWl0IGVBLmdldChpLHtyZXNwb25zZVR5cGU6ImFycmF5YnVmZmVyIixwYXJhbXM6dH0pKS5kYXRhO3JldHVybihhd2FpdCBpbXBvcnQoYCR7cn0uanNgKSkuZGVmYXVsdCh7d2FzbUJpbmFyeTpvfSl9dmFyIGt0PUZuO3ZhciBSdD1hc3luYygpPT5XZWJBc3NlbWJseS52YWxpZGF0ZShuZXcgVWludDhBcnJheShbMCw5NywxMTUsMTA5LDEsMCwwLDAsMSw1LDEsOTYsMCwxLDEyMywzLDIsMSwwLDEwLDEwLDEsOCwwLDY1LDAsMjUzLDE1LDI1Myw5OCwxMV0pKTt2YXIgVHQ9dHlwZW9mIGdsb2JhbFRoaXMuU2hhcmVkQXJyYXlCdWZmZXI9PSJmdW5jdGlvbiIsVXQ9bmV3IFRleHRFbmNvZGVyLE50PW5ldyBUZXh0RGVjb2RlcigidXRmLTgiKTtmdW5jdGlvbiBrbihBLGUpe2xldCB0PXtmbGFnczoiciIsZW5jb2Rpbmc6ImJpbmFyeSJ9LHI9QS5mc19vcGVuKGUsdC5mbGFncyksbj1BLmZzX3N0YXQoZSkuc2l6ZSxvPW51bGw7VHQ/bz1uZXcgU2hhcmVkQXJyYXlCdWZmZXIobik6bz1uZXcgQXJyYXlCdWZmZXIobik7bGV0IGc9bmV3IFVpbnQ4QXJyYXkobyk7cmV0dXJuIEEuZnNfcmVhZChyLGcsMCxuLDApLEEuZnNfY2xvc2UociksZ31mdW5jdGlvbiBMdChBLGUsdCl7bGV0IHI9bnVsbDtUdD9yPW5ldyBTaGFyZWRBcnJheUJ1ZmZlcih0KTpyPW5ldyBBcnJheUJ1ZmZlcih0KTtsZXQgaT1uZXcgVWludDhBcnJheShyKSxuPW5ldyBVaW50OEFycmF5KEEuSEVBUFU4LmJ1ZmZlcixlLHQpO3JldHVybiBpLnNldChuKSxpfWZ1bmN0aW9uIGIoQSxlLHQscil7bGV0IGk9MDtyZXR1cm4gZSE9PW51bGwmJihpPUEuY2NhbGwoIml0a193YXNtX2lucHV0X2FycmF5X2FsbG9jIiwibnVtYmVyIixbIm51bWJlciIsIm51bWJlciIsIm51bWJlciIsIm51bWJlciJdLFswLHQscixlLmJ1ZmZlci5ieXRlTGVuZ3RoXSksQS5IRUFQVTguc2V0KG5ldyBVaW50OEFycmF5KGUuYnVmZmVyKSxpKSksaX1mdW5jdGlvbiBXKEEsZSx0KXtsZXQgcj1KU09OLnN0cmluZ2lmeShlKSxpPUEubGVuZ3RoQnl0ZXNVVEY4KHIpKzEsbj1BLmNjYWxsKCJpdGtfd2FzbV9pbnB1dF9qc29uX2FsbG9jIiwibnVtYmVyIixbIm51bWJlciIsIm51bWJlciIsIm51bWJlciJdLFswLHQsaV0pO0Euc3RyaW5nVG9VVEY4KHIsbixpKX1mdW5jdGlvbiBVKEEsZSx0LHIpe2xldCBpPUEuY2NhbGwoIml0a193YXNtX291dHB1dF9hcnJheV9hZGRyZXNzIiwibnVtYmVyIixbIm51bWJlciIsIm51bWJlciIsIm51bWJlciJdLFswLGUsdF0pLG49QS5jY2FsbCgiaXRrX3dhc21fb3V0cHV0X2FycmF5X3NpemUiLCJudW1iZXIiLFsibnVtYmVyIiwibnVtYmVyIiwibnVtYmVyIl0sWzAsZSx0XSksbz1MdChBLGksbik7cmV0dXJuIEoocixvLmJ1ZmZlcil9ZnVuY3Rpb24gQkEoQSxlKXtsZXQgdD1BLmNjYWxsKCJpdGtfd2FzbV9vdXRwdXRfanNvbl9hZGRyZXNzIiwibnVtYmVyIixbIm51bWJlciIsIm51bWJlciJdLFswLGVdKSxyPUEuVVRGOFRvU3RyaW5nKHQpO3JldHVybiBKU09OLnBhcnNlKHIpfWZ1bmN0aW9uIFJuKEEsZSx0LHIpe3IhPW51bGwmJnIubGVuZ3RoPjAmJnIuZm9yRWFjaChmdW5jdGlvbihJLGEpe3N3aXRjaChJLnR5cGUpe2Nhc2UgRS5UZXh0U3RyZWFtOntsZXQgcz1VdC5lbmNvZGUoSS5kYXRhLmRhdGEpLHA9YihBLHMsYSwwKSxsPXtzaXplOnMuYnVmZmVyLmJ5dGVMZW5ndGgsZGF0YTpgZGF0YTphcHBsaWNhdGlvbi92bmQuaXRrLmFkZHJlc3MsMDoke3B9YH07VyhBLGwsYSk7YnJlYWt9Y2FzZSBFLkpzb25Db21wYXRpYmxlOntsZXQgcz1VdC5lbmNvZGUoSlNPTi5zdHJpbmdpZnkoSS5kYXRhKSkscD1iKEEscyxhLDApLGw9e3NpemU6cy5idWZmZXIuYnl0ZUxlbmd0aCxkYXRhOmBkYXRhOmFwcGxpY2F0aW9uL3ZuZC5pdGsuYWRkcmVzcywwOiR7cH1gfTtXKEEsbCxhKTticmVha31jYXNlIEUuQmluYXJ5U3RyZWFtOntsZXQgcz1JLmRhdGEuZGF0YSxwPWIoQSxzLGEsMCksbD17c2l6ZTpzLmJ1ZmZlci5ieXRlTGVuZ3RoLGRhdGE6YGRhdGE6YXBwbGljYXRpb24vdm5kLml0ay5hZGRyZXNzLDA6JHtwfWB9O1coQSxsLGEpO2JyZWFrfWNhc2UgRS5UZXh0RmlsZTp7QS5mc193cml0ZUZpbGUoSS5kYXRhLnBhdGgsSS5kYXRhLmRhdGEpO2JyZWFrfWNhc2UgRS5CaW5hcnlGaWxlOntBLmZzX3dyaXRlRmlsZShJLmRhdGEucGF0aCxJLmRhdGEuZGF0YSk7YnJlYWt9Y2FzZSBFLkltYWdlOntsZXQgcz1JLmRhdGEscD1iKEEscy5kYXRhLGEsMCksbD1iKEEscy5kaXJlY3Rpb24sYSwxKSxCPXR5cGVvZiBzLm1ldGFkYXRhPy5lbnRyaWVzPCJ1Ij9BcnJheS5mcm9tKHMubWV0YWRhdGEuZW50cmllcygpKTpbXSxDPXtpbWFnZVR5cGU6cy5pbWFnZVR5cGUsbmFtZTpzLm5hbWUsb3JpZ2luOnMub3JpZ2luLHNwYWNpbmc6cy5zcGFjaW5nLGRpcmVjdGlvbjpgZGF0YTphcHBsaWNhdGlvbi92bmQuaXRrLmFkZHJlc3MsMDoke2x9YCxzaXplOnMuc2l6ZSxkYXRhOmBkYXRhOmFwcGxpY2F0aW9uL3ZuZC5pdGsuYWRkcmVzcywwOiR7cH1gLG1ldGFkYXRhOkJ9O1coQSxDLGEpO2JyZWFrfWNhc2UgRS5NZXNoOntsZXQgcz1JLmRhdGEscD1iKEEscy5wb2ludHMsYSwwKSxsPWIoQSxzLmNlbGxzLGEsMSksQj1iKEEscy5wb2ludERhdGEsYSwyKSxDPWIoQSxzLmNlbGxEYXRhLGEsMyksZj17bWVzaFR5cGU6cy5tZXNoVHlwZSxuYW1lOnMubmFtZSxudW1iZXJPZlBvaW50czpzLm51bWJlck9mUG9pbnRzLHBvaW50czpgZGF0YTphcHBsaWNhdGlvbi92bmQuaXRrLmFkZHJlc3MsMDoke3B9YCxudW1iZXJPZkNlbGxzOnMubnVtYmVyT2ZDZWxscyxjZWxsczpgZGF0YTphcHBsaWNhdGlvbi92bmQuaXRrLmFkZHJlc3MsMDoke2x9YCxjZWxsQnVmZmVyU2l6ZTpzLmNlbGxCdWZmZXJTaXplLG51bWJlck9mUG9pbnRQaXhlbHM6cy5udW1iZXJPZlBvaW50UGl4ZWxzLHBvaW50RGF0YTpgZGF0YTphcHBsaWNhdGlvbi92bmQuaXRrLmFkZHJlc3MsMDoke0J9YCxudW1iZXJPZkNlbGxQaXhlbHM6cy5udW1iZXJPZkNlbGxQaXhlbHMsY2VsbERhdGE6YGRhdGE6YXBwbGljYXRpb24vdm5kLml0ay5hZGRyZXNzLDA6JHtDfWB9O1coQSxmLGEpO2JyZWFrfWNhc2UgRS5Qb2ludFNldDp7bGV0IHM9SS5kYXRhLHA9YihBLHMucG9pbnRzLGEsMCksbD1iKEEscy5wb2ludERhdGEsYSwxKSxCPXtwb2ludFNldFR5cGU6cy5wb2ludFNldFR5cGUsbmFtZTpzLm5hbWUsbnVtYmVyT2ZQb2ludHM6cy5udW1iZXJPZlBvaW50cyxwb2ludHM6YGRhdGE6YXBwbGljYXRpb24vdm5kLml0ay5hZGRyZXNzLDA6JHtwfWAsbnVtYmVyT2ZQb2ludFBpeGVsczpzLm51bWJlck9mUG9pbnRQaXhlbHMscG9pbnREYXRhOmBkYXRhOmFwcGxpY2F0aW9uL3ZuZC5pdGsuYWRkcmVzcywwOiR7bH1gfTtXKEEsQixhKTticmVha31jYXNlIEUuVHJhbnNmb3JtTGlzdDp7bGV0IHM9SS5kYXRhLHA9W107cy5mb3JFYWNoKChsLEIpPT57bGV0IGY9YGRhdGE6YXBwbGljYXRpb24vdm5kLml0ay5hZGRyZXNzLDA6JHtiKEEsbC5maXhlZFBhcmFtZXRlcnMsYSxCKjIpfWAsaD1gZGF0YTphcHBsaWNhdGlvbi92bmQuaXRrLmFkZHJlc3MsMDoke2IoQSxsLnBhcmFtZXRlcnMsYSxCKjIrMSl9YCxkPXt0cmFuc2Zvcm1UeXBlOmwudHJhbnNmb3JtVHlwZSxudW1iZXJPZkZpeGVkUGFyYW1ldGVyczpsLm51bWJlck9mRml4ZWRQYXJhbWV0ZXJzLG51bWJlck9mUGFyYW1ldGVyczpsLm51bWJlck9mUGFyYW1ldGVycyxuYW1lOmwubmFtZSxpbnB1dFNwYWNlTmFtZTpsLmlucHV0U3BhY2VOYW1lLG91dHB1dFNwYWNlTmFtZTpsLm91dHB1dFNwYWNlTmFtZSxwYXJhbWV0ZXJzOmgsZml4ZWRQYXJhbWV0ZXJzOmZ9O3AucHVzaChkKX0pLFcoQSxwLGEpO2JyZWFrfWNhc2UgRS5Qb2x5RGF0YTp7bGV0IHM9SS5kYXRhLHA9YihBLHMucG9pbnRzLGEsMCksbD1iKEEscy52ZXJ0aWNlcyxhLDEpLEI9YihBLHMubGluZXMsYSwyKSxDPWIoQSxzLnBvbHlnb25zLGEsMyksZj1iKEEscy50cmlhbmdsZVN0cmlwcyxhLDQpLFE9YihBLHMucG9pbnREYXRhLGEsNSksaD1iKEEscy5wb2ludERhdGEsYSw2KSxkPXtwb2x5RGF0YVR5cGU6cy5wb2x5RGF0YVR5cGUsbmFtZTpzLm5hbWUsbnVtYmVyT2ZQb2ludHM6cy5udW1iZXJPZlBvaW50cyxwb2ludHM6YGRhdGE6YXBwbGljYXRpb24vdm5kLml0ay5hZGRyZXNzLDA6JHtwfWAsdmVydGljZXNCdWZmZXJTaXplOnMudmVydGljZXNCdWZmZXJTaXplLHZlcnRpY2VzOmBkYXRhOmFwcGxpY2F0aW9uL3ZuZC5pdGsuYWRkcmVzcywwOiR7bH1gLGxpbmVzQnVmZmVyU2l6ZTpzLmxpbmVzQnVmZmVyU2l6ZSxsaW5lczpgZGF0YTphcHBsaWNhdGlvbi92bmQuaXRrLmFkZHJlc3MsMDoke0J9YCxwb2x5Z29uc0J1ZmZlclNpemU6cy5wb2x5Z29uc0J1ZmZlclNpemUscG9seWdvbnM6YGRhdGE6YXBwbGljYXRpb24vdm5kLml0ay5hZGRyZXNzLDA6JHtDfWAsdHJpYW5nbGVTdHJpcHNCdWZmZXJTaXplOnMudHJpYW5nbGVTdHJpcHNCdWZmZXJTaXplLHRyaWFuZ2xlU3RyaXBzOmBkYXRhOmFwcGxpY2F0aW9uL3ZuZC5pdGsuYWRkcmVzcywwOiR7Zn1gLG51bWJlck9mUG9pbnRQaXhlbHM6cy5udW1iZXJPZlBvaW50UGl4ZWxzLHBvaW50RGF0YTpgZGF0YTphcHBsaWNhdGlvbi92bmQuaXRrLmFkZHJlc3MsMDoke1F9YCxudW1iZXJPZkNlbGxQaXhlbHM6cy5udW1iZXJPZkNlbGxQaXhlbHMsY2VsbERhdGE6YGRhdGE6YXBwbGljYXRpb24vdm5kLml0ay5hZGRyZXNzLDA6JHtofWB9O1coQSxkLGEpO2JyZWFrfWRlZmF1bHQ6dGhyb3cgRXJyb3IoIlVuc3VwcG9ydGVkIGlucHV0IEludGVyZmFjZVR5cGUiKX19KSxBLnJlc2V0TW9kdWxlU3Rkb3V0KCksQS5yZXNldE1vZHVsZVN0ZGVycigpO2xldCBpPUEuc3RhY2tTYXZlKCksbj0wO3RyeXtuPUEuY2FsbE1haW4oZS5zbGljZSgpKX1jYXRjaChJKXt0aHJvdyB0eXBlb2YgST09Im51bWJlciImJihjb25zb2xlLmxvZygiRXhjZXB0aW9uIHdoaWxlIHJ1bm5pbmcgcGlwZWxpbmU6IiksY29uc29sZS5sb2coInN0ZG91dDoiLEEuZ2V0TW9kdWxlU3Rkb3V0KCkpLGNvbnNvbGUuZXJyb3IoInN0ZGVycjoiLEEuZ2V0TW9kdWxlU3RkZXJyKCkpLHR5cGVvZiBBLmdldEV4Y2VwdGlvbk1lc3NhZ2U8InUiP2NvbnNvbGUuZXJyb3IoImV4Y2VwdGlvbjoiLEEuZ2V0RXhjZXB0aW9uTWVzc2FnZShJKSk6Y29uc29sZS5lcnJvcigiQnVpbGQgbW9kdWxlIGluIERlYnVnIG1vZGUgZm9yIGV4Y2VwdGlvbiBtZXNzYWdlIGluZm9ybWF0aW9uLiIpKSxJfWZpbmFsbHl7QS5zdGFja1Jlc3RvcmUoaSl9bGV0IG89QS5nZXRNb2R1bGVTdGRvdXQoKSxnPUEuZ2V0TW9kdWxlU3RkZXJyKCksYz1bXTtyZXR1cm4gdCE9bnVsbCYmdC5sZW5ndGg+MCYmbj09PTAmJnQuZm9yRWFjaChmdW5jdGlvbihJLGEpe2xldCBzPW51bGw7c3dpdGNoKEkudHlwZSl7Y2FzZSBFLlRleHRTdHJlYW06e2xldCBsPUEuY2NhbGwoIml0a193YXNtX291dHB1dF9hcnJheV9hZGRyZXNzIiwibnVtYmVyIixbIm51bWJlciIsIm51bWJlciIsIm51bWJlciJdLFswLGEsMF0pLEI9QS5jY2FsbCgiaXRrX3dhc21fb3V0cHV0X2FycmF5X3NpemUiLCJudW1iZXIiLFsibnVtYmVyIiwibnVtYmVyIiwibnVtYmVyIl0sWzAsYSwwXSksQz1uZXcgVWludDhBcnJheShBLkhFQVBVOC5idWZmZXIsbCxCKTtzPXtkYXRhOk50LmRlY29kZShDKX07YnJlYWt9Y2FzZSBFLkpzb25Db21wYXRpYmxlOntsZXQgbD1BLmNjYWxsKCJpdGtfd2FzbV9vdXRwdXRfYXJyYXlfYWRkcmVzcyIsIm51bWJlciIsWyJudW1iZXIiLCJudW1iZXIiLCJudW1iZXIiXSxbMCxhLDBdKSxCPUEuY2NhbGwoIml0a193YXNtX291dHB1dF9hcnJheV9zaXplIiwibnVtYmVyIixbIm51bWJlciIsIm51bWJlciIsIm51bWJlciJdLFswLGEsMF0pLEM9bmV3IFVpbnQ4QXJyYXkoQS5IRUFQVTguYnVmZmVyLGwsQik7cz1KU09OLnBhcnNlKE50LmRlY29kZShDKSk7YnJlYWt9Y2FzZSBFLkJpbmFyeVN0cmVhbTp7bGV0IGw9QS5jY2FsbCgiaXRrX3dhc21fb3V0cHV0X2FycmF5X2FkZHJlc3MiLCJudW1iZXIiLFsibnVtYmVyIiwibnVtYmVyIiwibnVtYmVyIl0sWzAsYSwwXSksQj1BLmNjYWxsKCJpdGtfd2FzbV9vdXRwdXRfYXJyYXlfc2l6ZSIsIm51bWJlciIsWyJudW1iZXIiLCJudW1iZXIiLCJudW1iZXIiXSxbMCxhLDBdKTtzPXtkYXRhOkx0KEEsbCxCKX07YnJlYWt9Y2FzZSBFLlRleHRGaWxlOntzPXtwYXRoOkkuZGF0YS5wYXRoLGRhdGE6QS5mc19yZWFkRmlsZShJLmRhdGEucGF0aCx7ZW5jb2Rpbmc6InV0ZjgifSl9O2JyZWFrfWNhc2UgRS5CaW5hcnlGaWxlOntzPXtwYXRoOkkuZGF0YS5wYXRoLGRhdGE6a24oQSxJLmRhdGEucGF0aCl9O2JyZWFrfWNhc2UgRS5JbWFnZTp7bGV0IGw9QkEoQSxhKTtsLmRhdGE9VShBLGEsMCxsLmltYWdlVHlwZS5jb21wb25lbnRUeXBlKSxsLmRpcmVjdGlvbj1VKEEsYSwxLGouRmxvYXQ2NCksbC5tZXRhZGF0YT1uZXcgTWFwKGwubWV0YWRhdGEpLHM9bDticmVha31jYXNlIEUuTWVzaDp7bGV0IGw9QkEoQSxhKTtsLm51bWJlck9mUG9pbnRzPjA/bC5wb2ludHM9VShBLGEsMCxsLm1lc2hUeXBlLnBvaW50Q29tcG9uZW50VHlwZSk6bC5wb2ludHM9SihsLm1lc2hUeXBlLnBvaW50Q29tcG9uZW50VHlwZSxuZXcgQXJyYXlCdWZmZXIoMCkpLGwubnVtYmVyT2ZDZWxscz4wP2wuY2VsbHM9VShBLGEsMSxsLm1lc2hUeXBlLmNlbGxDb21wb25lbnRUeXBlKTpsLmNlbGxzPUoobC5tZXNoVHlwZS5jZWxsQ29tcG9uZW50VHlwZSxuZXcgQXJyYXlCdWZmZXIoMCkpLGwubnVtYmVyT2ZQb2ludFBpeGVscz4wP2wucG9pbnREYXRhPVUoQSxhLDIsbC5tZXNoVHlwZS5wb2ludFBpeGVsQ29tcG9uZW50VHlwZSk6bC5wb2ludERhdGE9SihsLm1lc2hUeXBlLnBvaW50UGl4ZWxDb21wb25lbnRUeXBlLG5ldyBBcnJheUJ1ZmZlcigwKSksbC5udW1iZXJPZkNlbGxQaXhlbHM+MD9sLmNlbGxEYXRhPVUoQSxhLDMsbC5tZXNoVHlwZS5jZWxsUGl4ZWxDb21wb25lbnRUeXBlKTpsLmNlbGxEYXRhPUoobC5tZXNoVHlwZS5jZWxsUGl4ZWxDb21wb25lbnRUeXBlLG5ldyBBcnJheUJ1ZmZlcigwKSkscz1sO2JyZWFrfWNhc2UgRS5Qb2ludFNldDp7bGV0IGw9QkEoQSxhKTtsLm51bWJlck9mUG9pbnRzPjA/bC5wb2ludHM9VShBLGEsMCxsLnBvaW50U2V0VHlwZS5wb2ludENvbXBvbmVudFR5cGUpOmwucG9pbnRzPUoobC5wb2ludFNldFR5cGUucG9pbnRDb21wb25lbnRUeXBlLG5ldyBBcnJheUJ1ZmZlcigwKSksbC5udW1iZXJPZlBvaW50UGl4ZWxzPjA/bC5wb2ludERhdGE9VShBLGEsMSxsLnBvaW50U2V0VHlwZS5wb2ludFBpeGVsQ29tcG9uZW50VHlwZSk6bC5wb2ludERhdGE9SihsLnBvaW50U2V0VHlwZS5wb2ludFBpeGVsQ29tcG9uZW50VHlwZSxuZXcgQXJyYXlCdWZmZXIoMCkpLHM9bDticmVha31jYXNlIEUuVHJhbnNmb3JtTGlzdDp7bGV0IGw9QkEoQSxhKTtsLmZvckVhY2goKEIsQyk9PntCLm51bWJlck9mRml4ZWRQYXJhbWV0ZXJzPjAmJihsW0NdLmZpeGVkUGFyYW1ldGVycz1VKEEsYSxDKjIsQi50cmFuc2Zvcm1UeXBlLnBhcmFtZXRlcnNWYWx1ZVR5cGUpKSxCLm51bWJlck9mRml4ZWRQYXJhbWV0ZXJzPjAmJihsW0NdLnBhcmFtZXRlcnM9VShBLGEsQyoyKzEsQi50cmFuc2Zvcm1UeXBlLnBhcmFtZXRlcnNWYWx1ZVR5cGUpKX0pLHM9bDticmVha31jYXNlIEUuUG9seURhdGE6e2xldCBsPUJBKEEsYSk7bC5udW1iZXJPZlBvaW50cz4wP2wucG9pbnRzPVUoQSxhLDAsai5GbG9hdDMyKTpsLnBvaW50cz1uZXcgRmxvYXQzMkFycmF5LGwudmVydGljZXNCdWZmZXJTaXplPjA/bC52ZXJ0aWNlcz1VKEEsYSwxLE4uVUludDMyKTpsLnZlcnRpY2VzPW5ldyBVaW50MzJBcnJheSxsLmxpbmVzQnVmZmVyU2l6ZT4wP2wubGluZXM9VShBLGEsMixOLlVJbnQzMik6bC5saW5lcz1uZXcgVWludDMyQXJyYXksbC5wb2x5Z29uc0J1ZmZlclNpemU+MD9sLnBvbHlnb25zPVUoQSxhLDMsTi5VSW50MzIpOmwucG9seWdvbnM9bmV3IFVpbnQzMkFycmF5LGwudHJpYW5nbGVTdHJpcHNCdWZmZXJTaXplPjA/bC50cmlhbmdsZVN0cmlwcz1VKEEsYSw0LE4uVUludDMyKTpsLnRyaWFuZ2xlU3RyaXBzPW5ldyBVaW50MzJBcnJheSxsLm51bWJlck9mUG9pbnRQaXhlbHM+MD9sLnBvaW50RGF0YT1VKEEsYSw1LGwucG9seURhdGFUeXBlLnBvaW50UGl4ZWxDb21wb25lbnRUeXBlKTpsLnBvaW50RGF0YT1KKGwucG9seURhdGFUeXBlLnBvaW50UGl4ZWxDb21wb25lbnRUeXBlLG5ldyBBcnJheUJ1ZmZlcigwKSksbC5udW1iZXJPZkNlbGxQaXhlbHM+MD9sLmNlbGxEYXRhPVUoQSxhLDYsbC5wb2x5RGF0YVR5cGUuY2VsbFBpeGVsQ29tcG9uZW50VHlwZSk6bC5jZWxsRGF0YT1KKGwucG9seURhdGFUeXBlLmNlbGxQaXhlbENvbXBvbmVudFR5cGUsbmV3IEFycmF5QnVmZmVyKDApKSxzPWw7YnJlYWt9ZGVmYXVsdDp0aHJvdyBFcnJvcigiVW5zdXBwb3J0ZWQgb3V0cHV0IEludGVyZmFjZVR5cGUiKX1sZXQgcD17dHlwZTpJLnR5cGUsZGF0YTpzfTtjLnB1c2gocCl9KSx7cmV0dXJuVmFsdWU6bixzdGRvdXQ6byxzdGRlcnI6ZyxvdXRwdXRzOmN9fXZhciB4dD1Sbjt2YXIgVW49dHlwZW9mIGdsb2JhbFRoaXMuU2hhcmVkQXJyYXlCdWZmZXI8InUiO2Z1bmN0aW9uIE5uKEEsZSl7aWYoQT09bnVsbClyZXR1cm5bXTtsZXQgdD1bXTtmb3IobGV0IHI9MDtyPEEubGVuZ3RoO3IrKyl7bGV0IGk9VG4oQVtyXSxlKTtpIT09bnVsbCYmdC5wdXNoKGkpfXJldHVybiB0fWZ1bmN0aW9uIFRuKEEsZSl7aWYoQT09bnVsbClyZXR1cm4gbnVsbDtsZXQgdD1udWxsO3JldHVybiBBLmJ1ZmZlciE9PXZvaWQgMD90PUEuYnVmZmVyOkEuYnl0ZUxlbmd0aCE9PXZvaWQgMCYmKHQ9QSksVW4mJnQgaW5zdGFuY2VvZiBTaGFyZWRBcnJheUJ1ZmZlcj9udWxsOmU/dDp0LnNsaWNlKDApfXZhciBPdD1ObjtmdW5jdGlvbiBMbihBKXtyZXR1cm5bQS5kYXRhLEEuZGlyZWN0aW9uXX12YXIgUHQ9TG47ZnVuY3Rpb24geG4oQSl7cmV0dXJuW0EucG9pbnRzLEEucG9pbnREYXRhLEEuY2VsbHMsQS5jZWxsRGF0YV19dmFyIEd0PXhuO2Z1bmN0aW9uIE9uKEEpe3JldHVybltBLnBvaW50cyxBLnZlcnRpY2VzLEEubGluZXMsQS5wb2x5Z29ucyxBLnRyaWFuZ2xlU3RyaXBzLEEucG9pbnREYXRhLEEuY2VsbERhdGFdfXZhciBKdD1Pbjt2YXIgUG47ZnVuY3Rpb24gUEEoKXtyZXR1cm4gUG59dmFyIEduO2Z1bmN0aW9uIEh0KCl7cmV0dXJuIEdufXZhciBKbjtmdW5jdGlvbiBHQSgpe3JldHVybiBKbn12YXIgd2U9bmV3IE1hcDtmdW5jdGlvbiBIbigpe2xldCBBPUdBKCk7cmV0dXJuIHR5cGVvZiBBPiJ1IiYmKEE9bnVsbCksQX1mdW5jdGlvbiBNdCgpe2xldCBBPVBBKCk7cmV0dXJuIHR5cGVvZiBBPiJ1IiYmKEE9bmV3IFVSTCgiL3BpcGVsaW5lcyIsZG9jdW1lbnQubG9jYXRpb24ub3JpZ2luKS5ocmVmKSxBfWZ1bmN0aW9uIEpBKCl7bGV0IEE9SHQoKTtyZXR1cm4gdHlwZW9mIEE+InUiJiYoQT17fSksQX1hc3luYyBmdW5jdGlvbiBNbihBLGUsdCl7bGV0IHI9QSxpPUE7aWYodHlwZW9mIEEhPSJzdHJpbmciJiYocj1uZXcgVVJMKEEuaHJlZiksaT1yLmhyZWYpLHdlLmhhcyhpKSlyZXR1cm4gd2UuZ2V0KGkpO3tsZXQgbj1hd2FpdCBrdChBLGU/LnRvU3RyaW5nKCk/P010KCksdD8/SkEoKSk7cmV0dXJuIHdlLnNldChpLG4pLG59fWFzeW5jIGZ1bmN0aW9uIHFuKEEsZSx0LHIsaSl7aWYoIWF3YWl0IFJ0KCkpe2xldCBmPSJXZWJBc3NlbWJseSBTSU1EIHN1cHBvcnQgaXMgcmVxdWlyZWQgLS0gcGxlYXNlIHVwZGF0ZSB5b3VyIGJyb3dzZXIuIjt0aHJvdyBhbGVydChmKSxuZXcgRXJyb3IoZil9bGV0IG49aT8ud2ViV29ya2VyPz9udWxsO2lmKG49PT0hMSl7bGV0IGY9YXdhaXQgTW4oQS50b1N0cmluZygpLGk/LnBpcGVsaW5lQmFzZVVybCxpPy5waXBlbGluZVF1ZXJ5UGFyYW1zPz9KQSgpKTtyZXR1cm4geHQoZixlLHQscil9bGV0IG89bixnPWk/LnBpcGVsaW5lV29ya2VyVXJsPz9IbigpLGM9dHlwZW9mIGchPSJzdHJpbmciJiZ0eXBlb2YgZz8uaHJlZjwidSI/Zy5ocmVmOmcse3dvcmtlclByb3h5Okksd29ya2VyOmF9PWF3YWl0IEZ0KG8sYyxpPy5waXBlbGluZVF1ZXJ5UGFyYW1zPz9KQSgpKTtvPWE7bGV0IHM9W107ciE9bnVsbCYmci5sZW5ndGg+MCYmci5mb3JFYWNoKGZ1bmN0aW9uKGYpe2lmKGYudHlwZT09PUUuQmluYXJ5U3RyZWFtKXtsZXQgUT1mLmRhdGEuZGF0YTtzLnB1c2goUSl9ZWxzZSBpZihmLnR5cGU9PT1FLkJpbmFyeUZpbGUpe2xldCBRPWYuZGF0YS5kYXRhO3MucHVzaChRKX1lbHNlIGlmKGYudHlwZT09PUUuSW1hZ2Upe2xldCBRPWYuZGF0YTtRLmRhdGEhPT1udWxsJiZzLnB1c2goLi4uUHQoUSkpfWVsc2UgaWYoZi50eXBlPT09RS5NZXNoKXtsZXQgUT1mLmRhdGE7cy5wdXNoKC4uLkd0KFEpKX1lbHNlIGlmKGYudHlwZT09PUUuUG9seURhdGEpe2xldCBRPWYuZGF0YTtzLnB1c2goLi4uSnQoUSkpfX0pO2xldCBwPWk/LnBpcGVsaW5lQmFzZVVybD8/TXQoKSxsPXR5cGVvZiBwIT0ic3RyaW5nIiYmdHlwZW9mIHA/LmhyZWY8InUiP3AuaHJlZjpwLEI9ciE9bnVsbD9aQShyLE90KHMsaT8ubm9Db3B5KSk6bnVsbCxDPWF3YWl0IEkucnVuUGlwZWxpbmUoQS50b1N0cmluZygpLGwsZSx0LEIsaT8ucGlwZWxpbmVRdWVyeVBhcmFtcz8/SkEoKSk7cmV0dXJue3JldHVyblZhbHVlOkMucmV0dXJuVmFsdWUsc3Rkb3V0OkMuc3Rkb3V0LHN0ZGVycjpDLnN0ZGVycixvdXRwdXRzOkMub3V0cHV0cyx3ZWJXb3JrZXI6b319dmFyIHc9cW47dmFyIFduPW51bGw7ZnVuY3Rpb24gcXQoKXtyZXR1cm4gV259dmFyIERlLFluPWBodHRwczovL2Nkbi5qc2RlbGl2ci5uZXQvbnBtL0BpdGstd2FzbS9kaWNvbUAke01BfS9kaXN0L3BpcGVsaW5lc2A7ZnVuY3Rpb24gQWcoQSl7RGU9QX1mdW5jdGlvbiBEKCl7aWYodHlwZW9mIERlPCJ1IilyZXR1cm4gRGU7bGV0IEE9UEEoKTtyZXR1cm4gdHlwZW9mIEE8InUiP0E6WW59dmFyIFNlLEtuPW51bGw7ZnVuY3Rpb24gV3QoQSl7U2U9QX1mdW5jdGlvbiB5KCl7aWYodHlwZW9mIFNlPCJ1IilyZXR1cm4gU2U7bGV0IEE9R0EoKTtyZXR1cm4gdHlwZW9mIEE8InUiP0E6S259dmFyIHRBPW51bGw7YXN5bmMgZnVuY3Rpb24gWXQoKXtsZXQgQT15KCksZT10eXBlb2YgQSE9InN0cmluZyImJnR5cGVvZiBBPy5ocmVmPCJ1Ij9BLmhyZWY6QTt0QT1hd2FpdCBjQShlKX1mdW5jdGlvbiBhZyhBKXt0QT1BfWFzeW5jIGZ1bmN0aW9uIFIoKXtpZih0QSE9PW51bGwpcmV0dXJuIHRBLnRlcm1pbmF0ZWQmJmF3YWl0IFl0KCksdEE7bGV0IEE9cXQoKTtyZXR1cm4gQSE9PW51bGw/QTooYXdhaXQgWXQoKSx0QSl9YXN5bmMgZnVuY3Rpb24gdm4oQSxlLHQ9e30pe2xldCByPVt7dHlwZTpFLkpzb25Db21wYXRpYmxlfSx7dHlwZTpFLkltYWdlfV0saT1BO2lmKEEgaW5zdGFuY2VvZiBGaWxlKXtsZXQgZD1hd2FpdCBBLmFycmF5QnVmZmVyKCk7aT17cGF0aDpBLm5hbWUsZGF0YTpuZXcgVWludDhBcnJheShkKX19bGV0IG49ZTtpZihlIGluc3RhbmNlb2YgRmlsZSl7bGV0IGQ9YXdhaXQgZS5hcnJheUJ1ZmZlcigpO249e3BhdGg6ZS5uYW1lLGRhdGE6bmV3IFVpbnQ4QXJyYXkoZCl9fWxldCBvPVt7dHlwZTpFLkJpbmFyeUZpbGUsZGF0YTppfSx7dHlwZTpFLkJpbmFyeUZpbGUsZGF0YTpufV0sZz1bXSxjPWkucGF0aDtnLnB1c2goYyk7bGV0IEk9bi5wYXRoO2cucHVzaChJKSxnLnB1c2goIjAiKSxnLnB1c2goIjEiKSxnLnB1c2goIi0tbWVtb3J5LWlvIiksdC5jb2xvck91dHB1dCYmdC5jb2xvck91dHB1dCYmZy5wdXNoKCItLWNvbG9yLW91dHB1dCIpLHQuY29uZmlnRmlsZSYmZy5wdXNoKCItLWNvbmZpZy1maWxlIix0LmNvbmZpZ0ZpbGUudG9TdHJpbmcoKSksdC5mcmFtZSYmZy5wdXNoKCItLWZyYW1lIix0LmZyYW1lLnRvU3RyaW5nKCkpLHQubm9QcmVzZW50YXRpb25TdGF0ZU91dHB1dCYmdC5ub1ByZXNlbnRhdGlvblN0YXRlT3V0cHV0JiZnLnB1c2goIi0tbm8tcHJlc2VudGF0aW9uLXN0YXRlLW91dHB1dCIpLHQubm9CaXRtYXBPdXRwdXQmJnQubm9CaXRtYXBPdXRwdXQmJmcucHVzaCgiLS1uby1iaXRtYXAtb3V0cHV0Iik7bGV0IHA9ImFwcGx5LXByZXNlbnRhdGlvbi1zdGF0ZS10by1pbWFnZSIsbD10Py53ZWJXb3JrZXI7bD09PXZvaWQgMCYmKGw9YXdhaXQgUigpKTtsZXR7d2ViV29ya2VyOkIscmV0dXJuVmFsdWU6QyxzdGRlcnI6ZixvdXRwdXRzOlF9PWF3YWl0IHcocCxnLHIsbyx7cGlwZWxpbmVCYXNlVXJsOkQoKSxwaXBlbGluZVdvcmtlclVybDp5KCksd2ViV29ya2VyOmwsbm9Db3B5OnQ/Lm5vQ29weX0pO2lmKEMhPT0wJiZmIT09IiIpdGhyb3cgbmV3IEVycm9yKGYpO3JldHVybnt3ZWJXb3JrZXI6QixwcmVzZW50YXRpb25TdGF0ZU91dFN0cmVhbTpRWzBdPy5kYXRhLG91dHB1dEltYWdlOlFbMV0/LmRhdGF9fXZhciBqbj12bjthc3luYyBmdW5jdGlvbiBfbihBLGU9e30pe2xldCB0PVt7dHlwZTpFLkJpbmFyeVN0cmVhbX1dLHI9QTtpZihBIGluc3RhbmNlb2YgRmlsZSl7bGV0IEM9YXdhaXQgQS5hcnJheUJ1ZmZlcigpO3I9e3BhdGg6QS5uYW1lLGRhdGE6bmV3IFVpbnQ4QXJyYXkoQyl9fWxldCBpPVt7dHlwZTpFLkJpbmFyeUZpbGUsZGF0YTpyfV0sbj1bXSxvPXIucGF0aDtuLnB1c2gobyksbi5wdXNoKCIwIiksbi5wdXNoKCItLW1lbW9yeS1pbyIpLGUucmVhZEZpbGVPbmx5JiZlLnJlYWRGaWxlT25seSYmbi5wdXNoKCItLXJlYWQtZmlsZS1vbmx5IiksZS5yZWFkRGF0YXNldCYmZS5yZWFkRGF0YXNldCYmbi5wdXNoKCItLXJlYWQtZGF0YXNldCIpLGUucmVhZFhmZXJBdXRvJiZlLnJlYWRYZmVyQXV0byYmbi5wdXNoKCItLXJlYWQteGZlci1hdXRvIiksZS5yZWFkWGZlckRldGVjdCYmZS5yZWFkWGZlckRldGVjdCYmbi5wdXNoKCItLXJlYWQteGZlci1kZXRlY3QiKSxlLnJlYWRYZmVyTGl0dGxlJiZlLnJlYWRYZmVyTGl0dGxlJiZuLnB1c2goIi0tcmVhZC14ZmVyLWxpdHRsZSIpLGUucmVhZFhmZXJCaWcmJmUucmVhZFhmZXJCaWcmJm4ucHVzaCgiLS1yZWFkLXhmZXItYmlnIiksZS5yZWFkWGZlckltcGxpY2l0JiZlLnJlYWRYZmVySW1wbGljaXQmJm4ucHVzaCgiLS1yZWFkLXhmZXItaW1wbGljaXQiKSxlLmFjY2VwdE9kZExlbmd0aCYmZS5hY2NlcHRPZGRMZW5ndGgmJm4ucHVzaCgiLS1hY2NlcHQtb2RkLWxlbmd0aCIpLGUuYXNzdW1lRXZlbkxlbmd0aCYmZS5hc3N1bWVFdmVuTGVuZ3RoJiZuLnB1c2goIi0tYXNzdW1lLWV2ZW4tbGVuZ3RoIiksZS5lbmFibGVDcDI0NiYmZS5lbmFibGVDcDI0NiYmbi5wdXNoKCItLWVuYWJsZS1jcDI0NiIpLGUuZGlzYWJsZUNwMjQ2JiZlLmRpc2FibGVDcDI0NiYmbi5wdXNoKCItLWRpc2FibGUtY3AyNDYiKSxlLnJldGFpblVuJiZlLnJldGFpblVuJiZuLnB1c2goIi0tcmV0YWluLXVuIiksZS5jb252ZXJ0VW4mJmUuY29udmVydFVuJiZuLnB1c2goIi0tY29udmVydC11biIpLGUuZW5hYmxlQ29ycmVjdGlvbiYmZS5lbmFibGVDb3JyZWN0aW9uJiZuLnB1c2goIi0tZW5hYmxlLWNvcnJlY3Rpb24iKSxlLmRpc2FibGVDb3JyZWN0aW9uJiZlLmRpc2FibGVDb3JyZWN0aW9uJiZuLnB1c2goIi0tZGlzYWJsZS1jb3JyZWN0aW9uIik7bGV0IGM9InJlYWQtZGljb20tZW5jYXBzdWxhdGVkLXBkZiIsST1lPy53ZWJXb3JrZXI7ST09PXZvaWQgMCYmKEk9YXdhaXQgUigpKTtsZXR7d2ViV29ya2VyOmEscmV0dXJuVmFsdWU6cyxzdGRlcnI6cCxvdXRwdXRzOmx9PWF3YWl0IHcoYyxuLHQsaSx7cGlwZWxpbmVCYXNlVXJsOkQoKSxwaXBlbGluZVdvcmtlclVybDp5KCksd2ViV29ya2VyOkksbm9Db3B5OmU/Lm5vQ29weX0pO2lmKHMhPT0wJiZwIT09IiIpdGhyb3cgbmV3IEVycm9yKHApO3JldHVybnt3ZWJXb3JrZXI6YSxwZGZCaW5hcnlPdXRwdXQ6KGxbMF0/LmRhdGEpLmRhdGF9fXZhciB6bj1fbjthc3luYyBmdW5jdGlvbiBWbihBLGU9e30pe2xldCB0PVt7dHlwZTpFLlRleHRTdHJlYW19XSxyPUE7aWYoQSBpbnN0YW5jZW9mIEZpbGUpe2xldCBDPWF3YWl0IEEuYXJyYXlCdWZmZXIoKTtyPXtwYXRoOkEubmFtZSxkYXRhOm5ldyBVaW50OEFycmF5KEMpfX1sZXQgaT1be3R5cGU6RS5CaW5hcnlGaWxlLGRhdGE6cn1dLG49W10sbz1yLnBhdGg7aWYobi5wdXNoKG8pLG4ucHVzaCgiMCIpLG4ucHVzaCgiLS1tZW1vcnktaW8iKSxlLnJlYWRGaWxlT25seSYmZS5yZWFkRmlsZU9ubHkmJm4ucHVzaCgiLS1yZWFkLWZpbGUtb25seSIpLGUucmVhZERhdGFzZXQmJmUucmVhZERhdGFzZXQmJm4ucHVzaCgiLS1yZWFkLWRhdGFzZXQiKSxlLnJlYWRYZmVyQXV0byYmZS5yZWFkWGZlckF1dG8mJm4ucHVzaCgiLS1yZWFkLXhmZXItYXV0byIpLGUucmVhZFhmZXJEZXRlY3QmJmUucmVhZFhmZXJEZXRlY3QmJm4ucHVzaCgiLS1yZWFkLXhmZXItZGV0ZWN0IiksZS5yZWFkWGZlckxpdHRsZSYmZS5yZWFkWGZlckxpdHRsZSYmbi5wdXNoKCItLXJlYWQteGZlci1saXR0bGUiKSxlLnJlYWRYZmVyQmlnJiZlLnJlYWRYZmVyQmlnJiZuLnB1c2goIi0tcmVhZC14ZmVyLWJpZyIpLGUucmVhZFhmZXJJbXBsaWNpdCYmZS5yZWFkWGZlckltcGxpY2l0JiZuLnB1c2goIi0tcmVhZC14ZmVyLWltcGxpY2l0IiksZS5wcm9jZXNzaW5nRGV0YWlscyYmZS5wcm9jZXNzaW5nRGV0YWlscyYmbi5wdXNoKCItLXByb2Nlc3NpbmctZGV0YWlscyIpLGUudW5rbm93blJlbGF0aW9uc2hpcCYmZS51bmtub3duUmVsYXRpb25zaGlwJiZuLnB1c2goIi0tdW5rbm93bi1yZWxhdGlvbnNoaXAiKSxlLmludmFsaWRJdGVtVmFsdWUmJmUuaW52YWxpZEl0ZW1WYWx1ZSYmbi5wdXNoKCItLWludmFsaWQtaXRlbS12YWx1ZSIpLGUuaWdub3JlQ29uc3RyYWludHMmJmUuaWdub3JlQ29uc3RyYWludHMmJm4ucHVzaCgiLS1pZ25vcmUtY29uc3RyYWludHMiKSxlLmlnbm9yZUl0ZW1FcnJvcnMmJmUuaWdub3JlSXRlbUVycm9ycyYmbi5wdXNoKCItLWlnbm9yZS1pdGVtLWVycm9ycyIpLGUuc2tpcEludmFsaWRJdGVtcyYmZS5za2lwSW52YWxpZEl0ZW1zJiZuLnB1c2goIi0tc2tpcC1pbnZhbGlkLWl0ZW1zIiksZS5kaXNhYmxlVnJDaGVja2VyJiZlLmRpc2FibGVWckNoZWNrZXImJm4ucHVzaCgiLS1kaXNhYmxlLXZyLWNoZWNrZXIiKSxlLmNoYXJzZXRSZXF1aXJlJiZlLmNoYXJzZXRSZXF1aXJlJiZuLnB1c2goIi0tY2hhcnNldC1yZXF1aXJlIiksZS5jaGFyc2V0QXNzdW1lJiZuLnB1c2goIi0tY2hhcnNldC1hc3N1bWUiLGUuY2hhcnNldEFzc3VtZS50b1N0cmluZygpKSxlLmNoYXJzZXRDaGVja0FsbCYmZS5jaGFyc2V0Q2hlY2tBbGwmJm4ucHVzaCgiLS1jaGFyc2V0LWNoZWNrLWFsbCIpLGUuY29udmVydFRvVXRmOCYmZS5jb252ZXJ0VG9VdGY4JiZuLnB1c2goIi0tY29udmVydC10by11dGY4IiksZS51cmxQcmVmaXgmJm4ucHVzaCgiLS11cmwtcHJlZml4IixlLnVybFByZWZpeC50b1N0cmluZygpKSxlLmh0bWwzMiYmZS5odG1sMzImJm4ucHVzaCgiLS1odG1sLTMyIiksZS5odG1sNDAmJmUuaHRtbDQwJiZuLnB1c2goIi0taHRtbC00MCIpLGUueGh0bWwxMSYmZS54aHRtbDExJiZuLnB1c2goIi0teGh0bWwtMTEiKSxlLmFkZERvY3VtZW50VHlwZSYmZS5hZGREb2N1bWVudFR5cGUmJm4ucHVzaCgiLS1hZGQtZG9jdW1lbnQtdHlwZSIpLGUuY3NzUmVmZXJlbmNlKXtsZXQgQz1pLmxlbmd0aC50b1N0cmluZygpO2kucHVzaCh7dHlwZTpFLlRleHRTdHJlYW0sZGF0YTp7ZGF0YTplLmNzc1JlZmVyZW5jZX19KSxuLnB1c2goIi0tY3NzLXJlZmVyZW5jZSIsQyl9aWYoZS5jc3NGaWxlKXtsZXQgQz1lLmNzc0ZpbGUsZj1DO2lmKEMgaW5zdGFuY2VvZiBGaWxlKXtsZXQgaD1hd2FpdCBDLmFycmF5QnVmZmVyKCk7Zj17cGF0aDpDLm5hbWUsZGF0YTpuZXcgVGV4dERlY29kZXIoKS5kZWNvZGUoaCl9fW4ucHVzaCgiLS1jc3MtZmlsZSIpLGkucHVzaCh7dHlwZTpFLlRleHRGaWxlLGRhdGE6Zn0pO2xldCBRPUMgaW5zdGFuY2VvZiBGaWxlP0MubmFtZTpDLnBhdGg7bi5wdXNoKFEpfWUuZXhwYW5kSW5saW5lJiZlLmV4cGFuZElubGluZSYmbi5wdXNoKCItLWV4cGFuZC1pbmxpbmUiKSxlLm5ldmVyRXhwYW5kSW5saW5lJiZlLm5ldmVyRXhwYW5kSW5saW5lJiZuLnB1c2goIi0tbmV2ZXItZXhwYW5kLWlubGluZSIpLGUuYWx3YXlzRXhwYW5kSW5saW5lJiZlLmFsd2F5c0V4cGFuZElubGluZSYmbi5wdXNoKCItLWFsd2F5cy1leHBhbmQtaW5saW5lIiksZS5yZW5kZXJGdWxsRGF0YSYmZS5yZW5kZXJGdWxsRGF0YSYmbi5wdXNoKCItLXJlbmRlci1mdWxsLWRhdGEiKSxlLnNlY3Rpb25UaXRsZUlubGluZSYmZS5zZWN0aW9uVGl0bGVJbmxpbmUmJm4ucHVzaCgiLS1zZWN0aW9uLXRpdGxlLWlubGluZSIpLGUuZG9jdW1lbnRUeXBlVGl0bGUmJmUuZG9jdW1lbnRUeXBlVGl0bGUmJm4ucHVzaCgiLS1kb2N1bWVudC10eXBlLXRpdGxlIiksZS5wYXRpZW50SW5mb1RpdGxlJiZlLnBhdGllbnRJbmZvVGl0bGUmJm4ucHVzaCgiLS1wYXRpZW50LWluZm8tdGl0bGUiKSxlLm5vRG9jdW1lbnRIZWFkZXImJmUubm9Eb2N1bWVudEhlYWRlciYmbi5wdXNoKCItLW5vLWRvY3VtZW50LWhlYWRlciIpLGUucmVuZGVySW5saW5lQ29kZXMmJmUucmVuZGVySW5saW5lQ29kZXMmJm4ucHVzaCgiLS1yZW5kZXItaW5saW5lLWNvZGVzIiksZS5jb25jZXB0TmFtZUNvZGVzJiZlLmNvbmNlcHROYW1lQ29kZXMmJm4ucHVzaCgiLS1jb25jZXB0LW5hbWUtY29kZXMiKSxlLm51bWVyaWNVbml0Q29kZXMmJmUubnVtZXJpY1VuaXRDb2RlcyYmbi5wdXNoKCItLW51bWVyaWMtdW5pdC1jb2RlcyIpLGUuY29kZVZhbHVlVW5pdCYmZS5jb2RlVmFsdWVVbml0JiZuLnB1c2goIi0tY29kZS12YWx1ZS11bml0IiksZS5jb2RlTWVhbmluZ1VuaXQmJmUuY29kZU1lYW5pbmdVbml0JiZuLnB1c2goIi0tY29kZS1tZWFuaW5nLXVuaXQiKSxlLnJlbmRlckFsbENvZGVzJiZlLnJlbmRlckFsbENvZGVzJiZuLnB1c2goIi0tcmVuZGVyLWFsbC1jb2RlcyIpLGUuY29kZURldGFpbHNUb29sdGlwJiZlLmNvZGVEZXRhaWxzVG9vbHRpcCYmbi5wdXNoKCItLWNvZGUtZGV0YWlscy10b29sdGlwIik7bGV0IGM9InN0cnVjdHVyZWQtcmVwb3J0LXRvLWh0bWwiLEk9ZT8ud2ViV29ya2VyO0k9PT12b2lkIDAmJihJPWF3YWl0IFIoKSk7bGV0e3dlYldvcmtlcjphLHJldHVyblZhbHVlOnMsc3RkZXJyOnAsb3V0cHV0czpsfT1hd2FpdCB3KGMsbix0LGkse3BpcGVsaW5lQmFzZVVybDpEKCkscGlwZWxpbmVXb3JrZXJVcmw6eSgpLHdlYldvcmtlcjpJLG5vQ29weTplPy5ub0NvcHl9KTtpZihzIT09MCYmcCE9PSIiKXRocm93IG5ldyBFcnJvcihwKTtyZXR1cm57d2ViV29ya2VyOmEsb3V0cHV0VGV4dDoobFswXT8uZGF0YSkuZGF0YX19dmFyIFpuPVZuO2FzeW5jIGZ1bmN0aW9uIFhuKEEsZT17fSl7bGV0IHQ9W3t0eXBlOkUuVGV4dFN0cmVhbX1dLHI9QTtpZihBIGluc3RhbmNlb2YgRmlsZSl7bGV0IEM9YXdhaXQgQS5hcnJheUJ1ZmZlcigpO3I9e3BhdGg6QS5uYW1lLGRhdGE6bmV3IFVpbnQ4QXJyYXkoQyl9fWxldCBpPVt7dHlwZTpFLkJpbmFyeUZpbGUsZGF0YTpyfV0sbj1bXSxvPXIucGF0aDtuLnB1c2gobyksbi5wdXNoKCIwIiksbi5wdXNoKCItLW1lbW9yeS1pbyIpLGUudW5rbm93blJlbGF0aW9uc2hpcCYmZS51bmtub3duUmVsYXRpb25zaGlwJiZuLnB1c2goIi0tdW5rbm93bi1yZWxhdGlvbnNoaXAiKSxlLmludmFsaWRJdGVtVmFsdWUmJmUuaW52YWxpZEl0ZW1WYWx1ZSYmbi5wdXNoKCItLWludmFsaWQtaXRlbS12YWx1ZSIpLGUuaWdub3JlQ29uc3RyYWludHMmJmUuaWdub3JlQ29uc3RyYWludHMmJm4ucHVzaCgiLS1pZ25vcmUtY29uc3RyYWludHMiKSxlLmlnbm9yZUl0ZW1FcnJvcnMmJmUuaWdub3JlSXRlbUVycm9ycyYmbi5wdXNoKCItLWlnbm9yZS1pdGVtLWVycm9ycyIpLGUuc2tpcEludmFsaWRJdGVtcyYmZS5za2lwSW52YWxpZEl0ZW1zJiZuLnB1c2goIi0tc2tpcC1pbnZhbGlkLWl0ZW1zIiksZS5ub0RvY3VtZW50SGVhZGVyJiZlLm5vRG9jdW1lbnRIZWFkZXImJm4ucHVzaCgiLS1uby1kb2N1bWVudC1oZWFkZXIiKSxlLm51bWJlck5lc3RlZEl0ZW1zJiZlLm51bWJlck5lc3RlZEl0ZW1zJiZuLnB1c2goIi0tbnVtYmVyLW5lc3RlZC1pdGVtcyIpLGUuc2hvcnRlbkxvbmdWYWx1ZXMmJmUuc2hvcnRlbkxvbmdWYWx1ZXMmJm4ucHVzaCgiLS1zaG9ydGVuLWxvbmctdmFsdWVzIiksZS5wcmludEluc3RhbmNlVWlkJiZlLnByaW50SW5zdGFuY2VVaWQmJm4ucHVzaCgiLS1wcmludC1pbnN0YW5jZS11aWQiKSxlLnByaW50U29wY2xhc3NTaG9ydCYmZS5wcmludFNvcGNsYXNzU2hvcnQmJm4ucHVzaCgiLS1wcmludC1zb3BjbGFzcy1zaG9ydCIpLGUucHJpbnRTb3BjbGFzc0xvbmcmJmUucHJpbnRTb3BjbGFzc0xvbmcmJm4ucHVzaCgiLS1wcmludC1zb3BjbGFzcy1sb25nIiksZS5wcmludFNvcGNsYXNzVWlkJiZlLnByaW50U29wY2xhc3NVaWQmJm4ucHVzaCgiLS1wcmludC1zb3BjbGFzcy11aWQiKSxlLnByaW50QWxsQ29kZXMmJmUucHJpbnRBbGxDb2RlcyYmbi5wdXNoKCItLXByaW50LWFsbC1jb2RlcyIpLGUucHJpbnRJbnZhbGlkQ29kZXMmJmUucHJpbnRJbnZhbGlkQ29kZXMmJm4ucHVzaCgiLS1wcmludC1pbnZhbGlkLWNvZGVzIiksZS5wcmludFRlbXBsYXRlSWQmJmUucHJpbnRUZW1wbGF0ZUlkJiZuLnB1c2goIi0tcHJpbnQtdGVtcGxhdGUtaWQiKSxlLmluZGljYXRlRW5oYW5jZWQmJmUuaW5kaWNhdGVFbmhhbmNlZCYmbi5wdXNoKCItLWluZGljYXRlLWVuaGFuY2VkIiksZS5wcmludENvbG9yJiZlLnByaW50Q29sb3ImJm4ucHVzaCgiLS1wcmludC1jb2xvciIpO2xldCBjPSJzdHJ1Y3R1cmVkLXJlcG9ydC10by10ZXh0IixJPWU/LndlYldvcmtlcjtJPT09dm9pZCAwJiYoST1hd2FpdCBSKCkpO2xldHt3ZWJXb3JrZXI6YSxyZXR1cm5WYWx1ZTpzLHN0ZGVycjpwLG91dHB1dHM6bH09YXdhaXQgdyhjLG4sdCxpLHtwaXBlbGluZUJhc2VVcmw6RCgpLHBpcGVsaW5lV29ya2VyVXJsOnkoKSx3ZWJXb3JrZXI6SSxub0NvcHk6ZT8ubm9Db3B5fSk7aWYocyE9PTAmJnAhPT0iIil0aHJvdyBuZXcgRXJyb3IocCk7cmV0dXJue3dlYldvcmtlcjphLG91dHB1dFRleHQ6KGxbMF0/LmRhdGEpLmRhdGF9fXZhciAkbj1Ybjthc3luYyBmdW5jdGlvbiBBaShBLGU9e30pe2xldCB0PVt7dHlwZTpFLkpzb25Db21wYXRpYmxlfV0scj1BO2lmKEEgaW5zdGFuY2VvZiBGaWxlKXtsZXQgQj1hd2FpdCBBLmFycmF5QnVmZmVyKCk7cj17cGF0aDpBLm5hbWUsZGF0YTpuZXcgVWludDhBcnJheShCKX19bGV0IGk9W3t0eXBlOkUuQmluYXJ5RmlsZSxkYXRhOnJ9XSxuPVtdLG89ci5wYXRoO2lmKG4ucHVzaChvKSxuLnB1c2goIjAiKSxuLnB1c2goIi0tbWVtb3J5LWlvIiksdHlwZW9mIGUudGFnc1RvUmVhZDwidSIpe2xldCBCPWkubGVuZ3RoLnRvU3RyaW5nKCk7aS5wdXNoKHt0eXBlOkUuSnNvbkNvbXBhdGlibGUsZGF0YTplLnRhZ3NUb1JlYWR9KSxuLnB1c2goIi0tdGFncy10by1yZWFkIixCKX1sZXQgYz0icmVhZC1kaWNvbS10YWdzIix7d2ViV29ya2VyOkkscmV0dXJuVmFsdWU6YSxzdGRlcnI6cyxvdXRwdXRzOnB9PWF3YWl0IHcoYyxuLHQsaSx7cGlwZWxpbmVCYXNlVXJsOkQoKSxwaXBlbGluZVdvcmtlclVybDp5KCksd2ViV29ya2VyOmU/LndlYldvcmtlcj8/bnVsbH0pO2lmKGEhPT0wKXRocm93IG5ldyBFcnJvcihzKTtyZXR1cm57d2ViV29ya2VyOkksdGFnczpwWzBdLmRhdGF9fXZhciBlaT1BaTthc3luYyBmdW5jdGlvbiB0aShBLGU9ITEsdD17fSl7bGV0IHI9W3t0eXBlOkUuSW1hZ2V9LHt0eXBlOkUuSnNvbkNvbXBhdGlibGV9XSxpPVtdLG49W107bi5wdXNoKCIwIiksbi5wdXNoKCIxIiksbi5wdXNoKCItLW1lbW9yeS1pbyIpLG4ucHVzaCgiLS1pbnB1dC1pbWFnZXMiKSxBLmZvckVhY2goQj0+e2kucHVzaCh7dHlwZTpFLkJpbmFyeUZpbGUsZGF0YTpCfSksbi5wdXNoKEIucGF0aCl9KSx0eXBlb2YgZTwidSImJmUmJm4ucHVzaCgiLS1zaW5nbGUtc29ydGVkLXNlcmllcyIpO2xldCBjPSJyZWFkLWltYWdlLWRpY29tLWZpbGUtc2VyaWVzIix7d2ViV29ya2VyOkkscmV0dXJuVmFsdWU6YSxzdGRlcnI6cyxvdXRwdXRzOnB9PWF3YWl0IHcoYyxuLHIsaSx7cGlwZWxpbmVCYXNlVXJsOkQoKSxwaXBlbGluZVdvcmtlclVybDp5KCksd2ViV29ya2VyOnQ/LndlYldvcmtlcj8/bnVsbH0pO2lmKGEhPT0wKXRocm93IG5ldyBFcnJvcihzKTtyZXR1cm57d2ViV29ya2VyOkksb3V0cHV0SW1hZ2U6cFswXS5kYXRhLHNvcnRlZEZpbGVuYW1lczpwWzFdLmRhdGF9fXZhciBiZT10aTt2YXIgcmk9dHlwZW9mIGdsb2JhbFRoaXMubmF2aWdhdG9yPy5oYXJkd2FyZUNvbmN1cnJlbmN5PT0ibnVtYmVyIj9nbG9iYWxUaGlzLm5hdmlnYXRvci5oYXJkd2FyZUNvbmN1cnJlbmN5OjQsS3Q9ODthc3luYyBmdW5jdGlvbiBuaShBPXtpbnB1dEltYWdlczpbXX0pe2xldCBlPUEud2ViV29ya2VyUG9vbD8/bnVsbDtlPT09bnVsbCYmKGU9bmV3IHZBKHJpLGJlKSk7bGV0IHQ9W107aWYoQS5pbnB1dEltYWdlcy5sZW5ndGg8MSl0aHJvdyBuZXcgRXJyb3IoJyJpbnB1dC1pbWFnZXMiIG9wdGlvbiBtdXN0IGhhdmUgYSBsZW5ndGggPiAxJyk7aWYoYXdhaXQgUHJvbWlzZS5hbGwoQS5pbnB1dEltYWdlcy5tYXAoYXN5bmMgcj0+e2xldCBpPXI7aWYociBpbnN0YW5jZW9mIEZpbGUpe2xldCBuPWF3YWl0IHIuYXJyYXlCdWZmZXIoKTtpPXtwYXRoOnIubmFtZSxkYXRhOm5ldyBVaW50OEFycmF5KG4pfX10LnB1c2goaSl9KSksQS5zaW5nbGVTb3J0ZWRTZXJpZXMpe2xldCByPVtdO2ZvcihsZXQgYz0wO2M8dC5sZW5ndGg7Yys9S3Qpe2xldCBJPXQuc2xpY2UoYyxjK0t0KTtyLnB1c2goW0ksQS5zaW5nbGVTb3J0ZWRTZXJpZXMse31dKX1sZXQgaT1hd2FpdCBlLnJ1blRhc2tzKHIpLnByb21pc2Usbj1pLm1hcChjPT5jLm91dHB1dEltYWdlKSxvPWkucmVkdWNlKChjLEkpPT5jLmNvbmNhdChJLnNvcnRlZEZpbGVuYW1lcyksW10pO3JldHVybntvdXRwdXRJbWFnZTpZQShuKSx3ZWJXb3JrZXJQb29sOmUsc29ydGVkRmlsZW5hbWVzOm99fWVsc2V7bGV0IHI9W1t0LEEuc2luZ2xlU29ydGVkU2VyaWVzLHt9XV0saT1hd2FpdCBlLnJ1blRhc2tzKHIpLnByb21pc2U7cmV0dXJue291dHB1dEltYWdlOmlbMF0ub3V0cHV0SW1hZ2Usd2ViV29ya2VyUG9vbDplLHNvcnRlZEZpbGVuYW1lczppWzBdLnNvcnRlZEZpbGVuYW1lc319fXZhciBpaT1uaTthc3luYyBmdW5jdGlvbiBvaShBLGU9e30pe2xldCB0PVt7dHlwZTpFLkltYWdlfSx7dHlwZTpFLkpzb25Db21wYXRpYmxlfV0scj1BO2lmKEEgaW5zdGFuY2VvZiBGaWxlKXtsZXQgZj1hd2FpdCBBLmFycmF5QnVmZmVyKCk7cj17cGF0aDpBLm5hbWUsZGF0YTpuZXcgVWludDhBcnJheShmKX19bGV0IGk9W3t0eXBlOkUuQmluYXJ5RmlsZSxkYXRhOnJ9XSxuPVtdLG89ci5wYXRoO24ucHVzaChvKSxuLnB1c2goIjAiKSxuLnB1c2goIjEiKSxuLnB1c2goIi0tbWVtb3J5LWlvIik7bGV0IEk9InJlYWQtc2VnbWVudGF0aW9uIixhPWU/LndlYldvcmtlcjthPT09dm9pZCAwJiYoYT1hd2FpdCBSKCkpO2xldHt3ZWJXb3JrZXI6cyxyZXR1cm5WYWx1ZTpwLHN0ZGVycjpsLG91dHB1dHM6Qn09YXdhaXQgdyhJLG4sdCxpLHtwaXBlbGluZUJhc2VVcmw6RCgpLHBpcGVsaW5lV29ya2VyVXJsOnkoKSx3ZWJXb3JrZXI6YSxub0NvcHk6ZT8ubm9Db3B5fSk7aWYocCE9PTAmJmwhPT0iIil0aHJvdyBuZXcgRXJyb3IobCk7cmV0dXJue3dlYldvcmtlcjpzLHNlZ0ltYWdlOkJbMF0/LmRhdGEsbWV0YUluZm86QlsxXT8uZGF0YX19dmFyIGFpPW9pO2FzeW5jIGZ1bmN0aW9uIHNpKEEsZT17fSl7bGV0IHQ9W3t0eXBlOkUuSW1hZ2V9LHt0eXBlOkUuSnNvbkNvbXBhdGlibGV9XSxyPUE7aWYoQSBpbnN0YW5jZW9mIEZpbGUpe2xldCBmPWF3YWl0IEEuYXJyYXlCdWZmZXIoKTtyPXtwYXRoOkEubmFtZSxkYXRhOm5ldyBVaW50OEFycmF5KGYpfX1sZXQgaT1be3R5cGU6RS5CaW5hcnlGaWxlLGRhdGE6cn1dLG49W10sbz1yLnBhdGg7bi5wdXNoKG8pLG4ucHVzaCgiMCIpLG4ucHVzaCgiMSIpLG4ucHVzaCgiLS1tZW1vcnktaW8iKSxlLm1lcmdlU2VnbWVudHMmJmUubWVyZ2VTZWdtZW50cyYmbi5wdXNoKCItLW1lcmdlLXNlZ21lbnRzIik7bGV0IEk9InJlYWQtb3ZlcmxhcHBpbmctc2VnbWVudGF0aW9uIixhPWU/LndlYldvcmtlcjthPT09dm9pZCAwJiYoYT1hd2FpdCBSKCkpO2xldHt3ZWJXb3JrZXI6cyxyZXR1cm5WYWx1ZTpwLHN0ZGVycjpsLG91dHB1dHM6Qn09YXdhaXQgdyhJLG4sdCxpLHtwaXBlbGluZUJhc2VVcmw6RCgpLHBpcGVsaW5lV29ya2VyVXJsOnkoKSx3ZWJXb3JrZXI6YSxub0NvcHk6ZT8ubm9Db3B5fSk7aWYocCE9PTAmJmwhPT0iIil0aHJvdyBuZXcgRXJyb3IobCk7cmV0dXJue3dlYldvcmtlcjpzLHNlZ0ltYWdlOkJbMF0/LmRhdGEsbWV0YUluZm86QlsxXT8uZGF0YX19dmFyIElpPXNpO2FzeW5jIGZ1bmN0aW9uIGdpKEEsZSx0LHI9e3JlZkRpY29tU2VyaWVzOltdfSl7bGV0IGk9W3t0eXBlOkUuQmluYXJ5RmlsZSxkYXRhOntwYXRoOnQsZGF0YTpuZXcgVWludDhBcnJheX19XSxuPVt7dHlwZTpFLkltYWdlLGRhdGE6QX0se3R5cGU6RS5Kc29uQ29tcGF0aWJsZSxkYXRhOmV9XSxvPVtdO28ucHVzaCgiMCIpLG8ucHVzaCgiMSIpO2xldCBJPXQ7aWYoby5wdXNoKEkpLG8ucHVzaCgiLS1tZW1vcnktaW8iKSxyLnJlZkRpY29tU2VyaWVzKXtpZihyLnJlZkRpY29tU2VyaWVzLmxlbmd0aDwxKXRocm93IG5ldyBFcnJvcignInJlZi1kaWNvbS1zZXJpZXMiIG9wdGlvbiBtdXN0IGhhdmUgYSBsZW5ndGggPiAxJyk7by5wdXNoKCItLXJlZi1kaWNvbS1zZXJpZXMiKSxhd2FpdCBQcm9taXNlLmFsbChyLnJlZkRpY29tU2VyaWVzLm1hcChhc3luYyBRPT57bGV0IGg9UTtpZihRIGluc3RhbmNlb2YgRmlsZSl7bGV0IFQ9YXdhaXQgUS5hcnJheUJ1ZmZlcigpO2g9e3BhdGg6US5uYW1lLGRhdGE6bmV3IFVpbnQ4QXJyYXkoVCl9fW4ucHVzaCh7dHlwZTpFLkJpbmFyeUZpbGUsZGF0YTpofSk7bGV0IGQ9USBpbnN0YW5jZW9mIEZpbGU/US5uYW1lOmgucGF0aDtvLnB1c2goZCl9KSl9ci5za2lwRW1wdHlTbGljZXMmJnIuc2tpcEVtcHR5U2xpY2VzJiZvLnB1c2goIi0tc2tpcC1lbXB0eS1zbGljZXMiKSxyLnVzZUxhYmVsaWRBc1NlZ21lbnRudW1iZXImJnIudXNlTGFiZWxpZEFzU2VnbWVudG51bWJlciYmby5wdXNoKCItLXVzZS1sYWJlbGlkLWFzLXNlZ21lbnRudW1iZXIiKTtsZXQgYT0id3JpdGUtc2VnbWVudGF0aW9uIixzPXI/LndlYldvcmtlcjtzPT09dm9pZCAwJiYocz1hd2FpdCBSKCkpO2xldHt3ZWJXb3JrZXI6cCxyZXR1cm5WYWx1ZTpsLHN0ZGVycjpCLG91dHB1dHM6Q309YXdhaXQgdyhhLG8saSxuLHtwaXBlbGluZUJhc2VVcmw6RCgpLHBpcGVsaW5lV29ya2VyVXJsOnkoKSx3ZWJXb3JrZXI6cyxub0NvcHk6cj8ubm9Db3B5fSk7aWYobCE9PTAmJkIhPT0iIil0aHJvdyBuZXcgRXJyb3IoQik7cmV0dXJue3dlYldvcmtlcjpwLG91dHB1dERpY29tRmlsZTpDWzBdPy5kYXRhfX12YXIgbGk9Z2k7YXN5bmMgZnVuY3Rpb24gdWkoQSxlLHQscj17cmVmRGljb21TZXJpZXM6W119KXtsZXQgaT1be3R5cGU6RS5CaW5hcnlGaWxlLGRhdGE6e3BhdGg6dCxkYXRhOm5ldyBVaW50OEFycmF5fX1dLG49W3t0eXBlOkUuSW1hZ2UsZGF0YTpBfSx7dHlwZTpFLkpzb25Db21wYXRpYmxlLGRhdGE6ZX1dLG89W107by5wdXNoKCIwIiksby5wdXNoKCIxIik7bGV0IEk9dDtpZihvLnB1c2goSSksby5wdXNoKCItLW1lbW9yeS1pbyIpLHIucmVmRGljb21TZXJpZXMpe2lmKHIucmVmRGljb21TZXJpZXMubGVuZ3RoPDEpdGhyb3cgbmV3IEVycm9yKCcicmVmLWRpY29tLXNlcmllcyIgb3B0aW9uIG11c3QgaGF2ZSBhIGxlbmd0aCA+IDEnKTtvLnB1c2goIi0tcmVmLWRpY29tLXNlcmllcyIpLGF3YWl0IFByb21pc2UuYWxsKHIucmVmRGljb21TZXJpZXMubWFwKGFzeW5jIFE9PntsZXQgaD1RO2lmKFEgaW5zdGFuY2VvZiBGaWxlKXtsZXQgVD1hd2FpdCBRLmFycmF5QnVmZmVyKCk7aD17cGF0aDpRLm5hbWUsZGF0YTpuZXcgVWludDhBcnJheShUKX19bi5wdXNoKHt0eXBlOkUuQmluYXJ5RmlsZSxkYXRhOmh9KTtsZXQgZD1RIGluc3RhbmNlb2YgRmlsZT9RLm5hbWU6aC5wYXRoO28ucHVzaChkKX0pKX1yLnNraXBFbXB0eVNsaWNlcyYmci5za2lwRW1wdHlTbGljZXMmJm8ucHVzaCgiLS1za2lwLWVtcHR5LXNsaWNlcyIpLHIudXNlTGFiZWxpZEFzU2VnbWVudG51bWJlciYmci51c2VMYWJlbGlkQXNTZWdtZW50bnVtYmVyJiZvLnB1c2goIi0tdXNlLWxhYmVsaWQtYXMtc2VnbWVudG51bWJlciIpO2xldCBhPSJ3cml0ZS1vdmVybGFwcGluZy1zZWdtZW50YXRpb24iLHM9cj8ud2ViV29ya2VyO3M9PT12b2lkIDAmJihzPWF3YWl0IFIoKSk7bGV0e3dlYldvcmtlcjpwLHJldHVyblZhbHVlOmwsc3RkZXJyOkIsb3V0cHV0czpDfT1hd2FpdCB3KGEsbyxpLG4se3BpcGVsaW5lQmFzZVVybDpEKCkscGlwZWxpbmVXb3JrZXJVcmw6eSgpLHdlYldvcmtlcjpzLG5vQ29weTpyPy5ub0NvcHl9KTtpZihsIT09MCYmQiE9PSIiKXRocm93IG5ldyBFcnJvcihCKTtyZXR1cm57d2ViV29ya2VyOnAsb3V0cHV0RGljb21GaWxlOkNbMF0/LmRhdGF9fXZhciBjaT11aTthc3luYyBmdW5jdGlvbiBCaShBLGUsdD17cmVmRGljb21TZXJpZXM6W10sc2VnSW1hZ2VzOltdfSl7bGV0IHI9W3t0eXBlOkUuQmluYXJ5RmlsZSxkYXRhOntwYXRoOmUsZGF0YTpuZXcgVWludDhBcnJheX19XSxpPVt7dHlwZTpFLkpzb25Db21wYXRpYmxlLGRhdGE6QX1dLG49W107bi5wdXNoKCIwIik7bGV0IGc9ZTtpZihuLnB1c2goZyksbi5wdXNoKCItLW1lbW9yeS1pbyIpLHQucmVmRGljb21TZXJpZXMpe2lmKHQucmVmRGljb21TZXJpZXMubGVuZ3RoPDEpdGhyb3cgbmV3IEVycm9yKCcicmVmLWRpY29tLXNlcmllcyIgb3B0aW9uIG11c3QgaGF2ZSBhIGxlbmd0aCA+IDEnKTtuLnB1c2goIi0tcmVmLWRpY29tLXNlcmllcyIpLGF3YWl0IFByb21pc2UuYWxsKHQucmVmRGljb21TZXJpZXMubWFwKGFzeW5jIEM9PntsZXQgZj1DO2lmKEMgaW5zdGFuY2VvZiBGaWxlKXtsZXQgaD1hd2FpdCBDLmFycmF5QnVmZmVyKCk7Zj17cGF0aDpDLm5hbWUsZGF0YTpuZXcgVWludDhBcnJheShoKX19aS5wdXNoKHt0eXBlOkUuQmluYXJ5RmlsZSxkYXRhOmZ9KTtsZXQgUT1DIGluc3RhbmNlb2YgRmlsZT9DLm5hbWU6Zi5wYXRoO24ucHVzaChRKX0pKX1pZih0LnNlZ0ltYWdlcyl7aWYodC5zZWdJbWFnZXMubGVuZ3RoPDEpdGhyb3cgbmV3IEVycm9yKCcic2VnLWltYWdlcyIgb3B0aW9uIG11c3QgaGF2ZSBhIGxlbmd0aCA+IDEnKTtuLnB1c2goIi0tc2VnLWltYWdlcyIpLGF3YWl0IFByb21pc2UuYWxsKHQuc2VnSW1hZ2VzLm1hcChhc3luYyBDPT57bGV0IGY9QztpZihDIGluc3RhbmNlb2YgRmlsZSl7bGV0IGg9YXdhaXQgQy5hcnJheUJ1ZmZlcigpO2Y9e3BhdGg6Qy5uYW1lLGRhdGE6bmV3IFVpbnQ4QXJyYXkoaCl9fWkucHVzaCh7dHlwZTpFLkJpbmFyeUZpbGUsZGF0YTpmfSk7bGV0IFE9QyBpbnN0YW5jZW9mIEZpbGU/Qy5uYW1lOmYucGF0aDtuLnB1c2goUSl9KSl9dC5za2lwRW1wdHlTbGljZXMmJnQuc2tpcEVtcHR5U2xpY2VzJiZuLnB1c2goIi0tc2tpcC1lbXB0eS1zbGljZXMiKSx0LnVzZUxhYmVsaWRBc1NlZ21lbnRudW1iZXImJnQudXNlTGFiZWxpZEFzU2VnbWVudG51bWJlciYmbi5wdXNoKCItLXVzZS1sYWJlbGlkLWFzLXNlZ21lbnRudW1iZXIiKTtsZXQgYz0id3JpdGUtbXVsdGktc2VnbWVudGF0aW9uIixJPXQ/LndlYldvcmtlcjtJPT09dm9pZCAwJiYoST1hd2FpdCBSKCkpO2xldHt3ZWJXb3JrZXI6YSxyZXR1cm5WYWx1ZTpzLHN0ZGVycjpwLG91dHB1dHM6bH09YXdhaXQgdyhjLG4scixpLHtwaXBlbGluZUJhc2VVcmw6RCgpLHBpcGVsaW5lV29ya2VyVXJsOnkoKSx3ZWJXb3JrZXI6SSxub0NvcHk6dD8ubm9Db3B5fSk7aWYocyE9PTAmJnAhPT0iIil0aHJvdyBuZXcgRXJyb3IocCk7cmV0dXJue3dlYldvcmtlcjphLG91dHB1dERpY29tRmlsZTpsWzBdPy5kYXRhfX12YXIgZmk9Qmk7dmFyIHZ0PSdkYXRhOnRleHQvamF2YXNjcmlwdDtjaGFyc2V0PXV0Zi04LHZhciBtZT1PYmplY3QuZGVmaW5lUHJvcGVydHk7dmFyIHdlPShBLHQpPT57Zm9yKHZhciBlIGluIHQpbWUoQSxlLHtnZXQ6dFtlXSxlbnVtZXJhYmxlOiEwfSl9O3ZhciBmdD1TeW1ib2woIkNvbWxpbmsucHJveHkiKSxwZT1TeW1ib2woIkNvbWxpbmsuZW5kcG9pbnQiKSxTZT1TeW1ib2woIkNvbWxpbmsucmVsZWFzZVByb3h5IiksWUE9U3ltYm9sKCJDb21saW5rLmZpbmFsaXplciIpLGFBPVN5bWJvbCgiQ29tbGluay50aHJvd24iKSxsdD1BPT50eXBlb2YgQT09Im9iamVjdCImJkEhPT1udWxsfHx0eXBlb2YgQT09ImZ1bmN0aW9uIixGZT17Y2FuSGFuZGxlOkE9Pmx0KEEpJiZBW2Z0XSxzZXJpYWxpemUoQSl7bGV0e3BvcnQxOnQscG9ydDI6ZX09bmV3IE1lc3NhZ2VDaGFubmVsO3JldHVybiBmQShBLHQpLFtlLFtlXV19LGRlc2VyaWFsaXplKEEpe3JldHVybiBBLnN0YXJ0KCksR2UoQSl9fSxSZT17Y2FuSGFuZGxlOkE9Pmx0KEEpJiZhQSBpbiBBLHNlcmlhbGl6ZSh7dmFsdWU6QX0pe2xldCB0O3JldHVybiBBIGluc3RhbmNlb2YgRXJyb3I/dD17aXNFcnJvcjohMCx2YWx1ZTp7bWVzc2FnZTpBLm1lc3NhZ2UsbmFtZTpBLm5hbWUsc3RhY2s6QS5zdGFja319OnQ9e2lzRXJyb3I6ITEsdmFsdWU6QX0sW3QsW11dfSxkZXNlcmlhbGl6ZShBKXt0aHJvdyBBLmlzRXJyb3I/T2JqZWN0LmFzc2lnbihuZXcgRXJyb3IoQS52YWx1ZS5tZXNzYWdlKSxBLnZhbHVlKTpBLnZhbHVlfX0sdXQ9bmV3IE1hcChbWyJwcm94eSIsRmVdLFsidGhyb3ciLFJlXV0pO2Z1bmN0aW9uIE5lKEEsdCl7Zm9yKGxldCBlIG9mIEEpaWYodD09PWV8fGU9PT0iKiJ8fGUgaW5zdGFuY2VvZiBSZWdFeHAmJmUudGVzdCh0KSlyZXR1cm4hMDtyZXR1cm4hMX1mdW5jdGlvbiBmQShBLHQ9Z2xvYmFsVGhpcyxlPVsiKiJdKXt0LmFkZEV2ZW50TGlzdGVuZXIoIm1lc3NhZ2UiLGZ1bmN0aW9uIEkocil7aWYoIXJ8fCFyLmRhdGEpcmV0dXJuO2lmKCFOZShlLHIub3JpZ2luKSl7Y29uc29sZS53YXJuKGBJbnZhbGlkIG9yaWdpbiBcJyR7ci5vcmlnaW59XCcgZm9yIGNvbWxpbmsgcHJveHlgKTtyZXR1cm59bGV0e2lkOm8sdHlwZTpnLHBhdGg6Q309T2JqZWN0LmFzc2lnbih7cGF0aDpbXX0sci5kYXRhKSxRPShyLmRhdGEuYXJndW1lbnRMaXN0fHxbXSkubWFwKE8pLGE7dHJ5e2xldCBuPUMuc2xpY2UoMCwtMSkucmVkdWNlKChmLEIpPT5mW0JdLEEpLHM9Qy5yZWR1Y2UoKGYsQik9PmZbQl0sQSk7c3dpdGNoKGcpe2Nhc2UiR0VUIjphPXM7YnJlYWs7Y2FzZSJTRVQiOm5bQy5zbGljZSgtMSlbMF1dPU8oci5kYXRhLnZhbHVlKSxhPSEwO2JyZWFrO2Nhc2UiQVBQTFkiOmE9cy5hcHBseShuLFEpO2JyZWFrO2Nhc2UiQ09OU1RSVUNUIjp7bGV0IGY9bmV3IHMoLi4uUSk7YT1iZShmKX1icmVhaztjYXNlIkVORFBPSU5UIjp7bGV0e3BvcnQxOmYscG9ydDI6Qn09bmV3IE1lc3NhZ2VDaGFubmVsO2ZBKEEsQiksYT1NQShmLFtmXSl9YnJlYWs7Y2FzZSJSRUxFQVNFIjphPXZvaWQgMDticmVhaztkZWZhdWx0OnJldHVybn19Y2F0Y2gobil7YT17dmFsdWU6bixbYUFdOjB9fVByb21pc2UucmVzb2x2ZShhKS5jYXRjaChuPT4oe3ZhbHVlOm4sW2FBXTowfSkpLnRoZW4obj0+e2xldFtzLGZdPWNBKG4pO3QucG9zdE1lc3NhZ2UoT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LHMpLHtpZDpvfSksZiksZz09PSJSRUxFQVNFIiYmKHQucmVtb3ZlRXZlbnRMaXN0ZW5lcigibWVzc2FnZSIsSSksRHQodCksWUEgaW4gQSYmdHlwZW9mIEFbWUFdPT0iZnVuY3Rpb24iJiZBW1lBXSgpKX0pLmNhdGNoKG49PntsZXRbcyxmXT1jQSh7dmFsdWU6bmV3IFR5cGVFcnJvcigiVW5zZXJpYWxpemFibGUgcmV0dXJuIHZhbHVlIiksW2FBXTowfSk7dC5wb3N0TWVzc2FnZShPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30scykse2lkOm99KSxmKX0pfSksdC5zdGFydCYmdC5zdGFydCgpfWZ1bmN0aW9uIFVlKEEpe3JldHVybiBBLmNvbnN0cnVjdG9yLm5hbWU9PT0iTWVzc2FnZVBvcnQifWZ1bmN0aW9uIER0KEEpe1VlKEEpJiZBLmNsb3NlKCl9ZnVuY3Rpb24gR2UoQSx0KXtyZXR1cm4gcUEoQSxbXSx0KX1mdW5jdGlvbiBCQShBKXtpZihBKXRocm93IG5ldyBFcnJvcigiUHJveHkgaGFzIGJlZW4gcmVsZWFzZWQgYW5kIGlzIG5vdCB1c2VhYmxlIil9ZnVuY3Rpb24gaHQoQSl7cmV0dXJuIFAoQSx7dHlwZToiUkVMRUFTRSJ9KS50aGVuKCgpPT57RHQoQSl9KX12YXIgUUE9bmV3IFdlYWtNYXAsRUE9IkZpbmFsaXphdGlvblJlZ2lzdHJ5ImluIGdsb2JhbFRoaXMmJm5ldyBGaW5hbGl6YXRpb25SZWdpc3RyeShBPT57bGV0IHQ9KFFBLmdldChBKXx8MCktMTtRQS5zZXQoQSx0KSx0PT09MCYmaHQoQSl9KTtmdW5jdGlvbiBrZShBLHQpe2xldCBlPShRQS5nZXQodCl8fDApKzE7UUEuc2V0KHQsZSksRUEmJkVBLnJlZ2lzdGVyKEEsdCxBKX1mdW5jdGlvbiBMZShBKXtFQSYmRUEudW5yZWdpc3RlcihBKX1mdW5jdGlvbiBxQShBLHQ9W10sZT1mdW5jdGlvbigpe30pe2xldCBJPSExLHI9bmV3IFByb3h5KGUse2dldChvLGcpe2lmKEJBKEkpLGc9PT1TZSlyZXR1cm4oKT0+e0xlKHIpLGh0KEEpLEk9ITB9O2lmKGc9PT0idGhlbiIpe2lmKHQubGVuZ3RoPT09MClyZXR1cm57dGhlbjooKT0+cn07bGV0IEM9UChBLHt0eXBlOiJHRVQiLHBhdGg6dC5tYXAoUT0+US50b1N0cmluZygpKX0pLnRoZW4oTyk7cmV0dXJuIEMudGhlbi5iaW5kKEMpfXJldHVybiBxQShBLFsuLi50LGddKX0sc2V0KG8sZyxDKXtCQShJKTtsZXRbUSxhXT1jQShDKTtyZXR1cm4gUChBLHt0eXBlOiJTRVQiLHBhdGg6Wy4uLnQsZ10ubWFwKG49Pm4udG9TdHJpbmcoKSksdmFsdWU6UX0sYSkudGhlbihPKX0sYXBwbHkobyxnLEMpe0JBKEkpO2xldCBRPXRbdC5sZW5ndGgtMV07aWYoUT09PXBlKXJldHVybiBQKEEse3R5cGU6IkVORFBPSU5UIn0pLnRoZW4oTyk7aWYoUT09PSJiaW5kIilyZXR1cm4gcUEoQSx0LnNsaWNlKDAsLTEpKTtsZXRbYSxuXT1jdChDKTtyZXR1cm4gUChBLHt0eXBlOiJBUFBMWSIscGF0aDp0Lm1hcChzPT5zLnRvU3RyaW5nKCkpLGFyZ3VtZW50TGlzdDphfSxuKS50aGVuKE8pfSxjb25zdHJ1Y3QobyxnKXtCQShJKTtsZXRbQyxRXT1jdChnKTtyZXR1cm4gUChBLHt0eXBlOiJDT05TVFJVQ1QiLHBhdGg6dC5tYXAoYT0+YS50b1N0cmluZygpKSxhcmd1bWVudExpc3Q6Q30sUSkudGhlbihPKX19KTtyZXR1cm4ga2UocixBKSxyfWZ1bmN0aW9uIEplKEEpe3JldHVybiBBcnJheS5wcm90b3R5cGUuY29uY2F0LmFwcGx5KFtdLEEpfWZ1bmN0aW9uIGN0KEEpe2xldCB0PUEubWFwKGNBKTtyZXR1cm5bdC5tYXAoZT0+ZVswXSksSmUodC5tYXAoZT0+ZVsxXSkpXX12YXIgZHQ9bmV3IFdlYWtNYXA7ZnVuY3Rpb24gTUEoQSx0KXtyZXR1cm4gZHQuc2V0KEEsdCksQX1mdW5jdGlvbiBiZShBKXtyZXR1cm4gT2JqZWN0LmFzc2lnbihBLHtbZnRdOiEwfSl9ZnVuY3Rpb24gY0EoQSl7Zm9yKGxldFt0LGVdb2YgdXQpaWYoZS5jYW5IYW5kbGUoQSkpe2xldFtJLHJdPWUuc2VyaWFsaXplKEEpO3JldHVyblt7dHlwZToiSEFORExFUiIsbmFtZTp0LHZhbHVlOkl9LHJdfXJldHVyblt7dHlwZToiUkFXIix2YWx1ZTpBfSxkdC5nZXQoQSl8fFtdXX1mdW5jdGlvbiBPKEEpe3N3aXRjaChBLnR5cGUpe2Nhc2UiSEFORExFUiI6cmV0dXJuIHV0LmdldChBLm5hbWUpLmRlc2VyaWFsaXplKEEudmFsdWUpO2Nhc2UiUkFXIjpyZXR1cm4gQS52YWx1ZX19ZnVuY3Rpb24gUChBLHQsZSl7cmV0dXJuIG5ldyBQcm9taXNlKEk9PntsZXQgcj1IZSgpO0EuYWRkRXZlbnRMaXN0ZW5lcigibWVzc2FnZSIsZnVuY3Rpb24gbyhnKXshZy5kYXRhfHwhZy5kYXRhLmlkfHxnLmRhdGEuaWQhPT1yfHwoQS5yZW1vdmVFdmVudExpc3RlbmVyKCJtZXNzYWdlIixvKSxJKGcuZGF0YSkpfSksQS5zdGFydCYmQS5zdGFydCgpLEEucG9zdE1lc3NhZ2UoT2JqZWN0LmFzc2lnbih7aWQ6cn0sdCksZSl9KX1mdW5jdGlvbiBIZSgpe3JldHVybiBuZXcgQXJyYXkoNCkuZmlsbCgwKS5tYXAoKCk9Pk1hdGguZmxvb3IoTWF0aC5yYW5kb20oKSpOdW1iZXIuTUFYX1NBRkVfSU5URUdFUikudG9TdHJpbmcoMTYpKS5qb2luKCItIil9ZnVuY3Rpb24gdihBLHQpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiBBLmFwcGx5KHQsYXJndW1lbnRzKX19dmFye3RvU3RyaW5nOlllfT1PYmplY3QucHJvdG90eXBlLHtnZXRQcm90b3R5cGVPZjpPQX09T2JqZWN0LHVBPShBPT50PT57bGV0IGU9WWUuY2FsbCh0KTtyZXR1cm4gQVtlXXx8KEFbZV09ZS5zbGljZSg4LC0xKS50b0xvd2VyQ2FzZSgpKX0pKE9iamVjdC5jcmVhdGUobnVsbCkpLEc9QT0+KEE9QS50b0xvd2VyQ2FzZSgpLHQ9PnVBKHQpPT09QSksREE9QT0+dD0+dHlwZW9mIHQ9PT1BLHtpc0FycmF5Omp9PUFycmF5LCQ9REEoInVuZGVmaW5lZCIpO2Z1bmN0aW9uIHFlKEEpe3JldHVybiBBIT09bnVsbCYmISQoQSkmJkEuY29uc3RydWN0b3IhPT1udWxsJiYhJChBLmNvbnN0cnVjdG9yKSYmTihBLmNvbnN0cnVjdG9yLmlzQnVmZmVyKSYmQS5jb25zdHJ1Y3Rvci5pc0J1ZmZlcihBKX12YXIgcHQ9RygiQXJyYXlCdWZmZXIiKTtmdW5jdGlvbiBNZShBKXtsZXQgdDtyZXR1cm4gdHlwZW9mIEFycmF5QnVmZmVyPCJ1IiYmQXJyYXlCdWZmZXIuaXNWaWV3P3Q9QXJyYXlCdWZmZXIuaXNWaWV3KEEpOnQ9QSYmQS5idWZmZXImJnB0KEEuYnVmZmVyKSx0fXZhciBUZT1EQSgic3RyaW5nIiksTj1EQSgiZnVuY3Rpb24iKSxTdD1EQSgibnVtYmVyIiksaEE9QT0+QSE9PW51bGwmJnR5cGVvZiBBPT0ib2JqZWN0IixLZT1BPT5BPT09ITB8fEE9PT0hMSxsQT1BPT57aWYodUEoQSkhPT0ib2JqZWN0IilyZXR1cm4hMTtsZXQgdD1PQShBKTtyZXR1cm4odD09PW51bGx8fHQ9PT1PYmplY3QucHJvdG90eXBlfHxPYmplY3QuZ2V0UHJvdG90eXBlT2YodCk9PT1udWxsKSYmIShTeW1ib2wudG9TdHJpbmdUYWcgaW4gQSkmJiEoU3ltYm9sLml0ZXJhdG9yIGluIEEpfSxPZT1HKCJEYXRlIikseGU9RygiRmlsZSIpLFBlPUcoIkJsb2IiKSxqZT1HKCJGaWxlTGlzdCIpLFdlPUE9PmhBKEEpJiZOKEEucGlwZSksWmU9QT0+e2xldCB0O3JldHVybiBBJiYodHlwZW9mIEZvcm1EYXRhPT0iZnVuY3Rpb24iJiZBIGluc3RhbmNlb2YgRm9ybURhdGF8fE4oQS5hcHBlbmQpJiYoKHQ9dUEoQSkpPT09ImZvcm1kYXRhInx8dD09PSJvYmplY3QiJiZOKEEudG9TdHJpbmcpJiZBLnRvU3RyaW5nKCk9PT0iW29iamVjdCBGb3JtRGF0YV0iKSl9LFZlPUcoIlVSTFNlYXJjaFBhcmFtcyIpLFtfZSxYZSx6ZSx2ZV09WyJSZWFkYWJsZVN0cmVhbSIsIlJlcXVlc3QiLCJSZXNwb25zZSIsIkhlYWRlcnMiXS5tYXAoRyksJGU9QT0+QS50cmltP0EudHJpbSgpOkEucmVwbGFjZSgvXltcXHNcXHVGRUZGXFx4QTBdK3xbXFxzXFx1RkVGRlxceEEwXSskL2csIiIpO2Z1bmN0aW9uIEFBKEEsdCx7YWxsT3duS2V5czplPSExfT17fSl7aWYoQT09PW51bGx8fHR5cGVvZiBBPiJ1IilyZXR1cm47bGV0IEkscjtpZih0eXBlb2YgQSE9Im9iamVjdCImJihBPVtBXSksaihBKSlmb3IoST0wLHI9QS5sZW5ndGg7STxyO0krKyl0LmNhbGwobnVsbCxBW0ldLEksQSk7ZWxzZXtsZXQgbz1lP09iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKEEpOk9iamVjdC5rZXlzKEEpLGc9by5sZW5ndGgsQztmb3IoST0wO0k8ZztJKyspQz1vW0ldLHQuY2FsbChudWxsLEFbQ10sQyxBKX19ZnVuY3Rpb24gRnQoQSx0KXt0PXQudG9Mb3dlckNhc2UoKTtsZXQgZT1PYmplY3Qua2V5cyhBKSxJPWUubGVuZ3RoLHI7Zm9yKDtJLS0gPjA7KWlmKHI9ZVtJXSx0PT09ci50b0xvd2VyQ2FzZSgpKXJldHVybiByO3JldHVybiBudWxsfXZhciB4PXR5cGVvZiBnbG9iYWxUaGlzPCJ1Ij9nbG9iYWxUaGlzOnR5cGVvZiBzZWxmPCJ1Ij9zZWxmOnR5cGVvZiB3aW5kb3c8InUiP3dpbmRvdzpnbG9iYWwsUnQ9QT0+ISQoQSkmJkEhPT14O2Z1bmN0aW9uIEtBKCl7bGV0e2Nhc2VsZXNzOkF9PVJ0KHRoaXMpJiZ0aGlzfHx7fSx0PXt9LGU9KEkscik9PntsZXQgbz1BJiZGdCh0LHIpfHxyO2xBKHRbb10pJiZsQShJKT90W29dPUtBKHRbb10sSSk6bEEoSSk/dFtvXT1LQSh7fSxJKTpqKEkpP3Rbb109SS5zbGljZSgpOnRbb109SX07Zm9yKGxldCBJPTAscj1hcmd1bWVudHMubGVuZ3RoO0k8cjtJKyspYXJndW1lbnRzW0ldJiZBQShhcmd1bWVudHNbSV0sZSk7cmV0dXJuIHR9dmFyIEFJPShBLHQsZSx7YWxsT3duS2V5czpJfT17fSk9PihBQSh0LChyLG8pPT57ZSYmTihyKT9BW29dPXYocixlKTpBW29dPXJ9LHthbGxPd25LZXlzOkl9KSxBKSx0ST1BPT4oQS5jaGFyQ29kZUF0KDApPT09NjUyNzkmJihBPUEuc2xpY2UoMSkpLEEpLGVJPShBLHQsZSxJKT0+e0EucHJvdG90eXBlPU9iamVjdC5jcmVhdGUodC5wcm90b3R5cGUsSSksQS5wcm90b3R5cGUuY29uc3RydWN0b3I9QSxPYmplY3QuZGVmaW5lUHJvcGVydHkoQSwic3VwZXIiLHt2YWx1ZTp0LnByb3RvdHlwZX0pLGUmJk9iamVjdC5hc3NpZ24oQS5wcm90b3R5cGUsZSl9LElJPShBLHQsZSxJKT0+e2xldCByLG8sZyxDPXt9O2lmKHQ9dHx8e30sQT09bnVsbClyZXR1cm4gdDtkb3tmb3Iocj1PYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhBKSxvPXIubGVuZ3RoO28tLSA+MDspZz1yW29dLCghSXx8SShnLEEsdCkpJiYhQ1tnXSYmKHRbZ109QVtnXSxDW2ddPSEwKTtBPWUhPT0hMSYmT0EoQSl9d2hpbGUoQSYmKCFlfHxlKEEsdCkpJiZBIT09T2JqZWN0LnByb3RvdHlwZSk7cmV0dXJuIHR9LHJJPShBLHQsZSk9PntBPVN0cmluZyhBKSwoZT09PXZvaWQgMHx8ZT5BLmxlbmd0aCkmJihlPUEubGVuZ3RoKSxlLT10Lmxlbmd0aDtsZXQgST1BLmluZGV4T2YodCxlKTtyZXR1cm4gSSE9PS0xJiZJPT09ZX0sb0k9QT0+e2lmKCFBKXJldHVybiBudWxsO2lmKGooQSkpcmV0dXJuIEE7bGV0IHQ9QS5sZW5ndGg7aWYoIVN0KHQpKXJldHVybiBudWxsO2xldCBlPW5ldyBBcnJheSh0KTtmb3IoO3QtLSA+MDspZVt0XT1BW3RdO3JldHVybiBlfSxnST0oQT0+dD0+QSYmdCBpbnN0YW5jZW9mIEEpKHR5cGVvZiBVaW50OEFycmF5PCJ1IiYmT0EoVWludDhBcnJheSkpLGlJPShBLHQpPT57bGV0IEk9KEEmJkFbU3ltYm9sLml0ZXJhdG9yXSkuY2FsbChBKSxyO2Zvcig7KHI9SS5uZXh0KCkpJiYhci5kb25lOyl7bGV0IG89ci52YWx1ZTt0LmNhbGwoQSxvWzBdLG9bMV0pfX0sbkk9KEEsdCk9PntsZXQgZSxJPVtdO2Zvcig7KGU9QS5leGVjKHQpKSE9PW51bGw7KUkucHVzaChlKTtyZXR1cm4gSX0sc0k9RygiSFRNTEZvcm1FbGVtZW50IiksQ0k9QT0+QS50b0xvd2VyQ2FzZSgpLnJlcGxhY2UoL1stX1xcc10oW2EtelxcZF0pKFxcdyopL2csZnVuY3Rpb24oZSxJLHIpe3JldHVybiBJLnRvVXBwZXJDYXNlKCkrcn0pLG10PSgoe2hhc093blByb3BlcnR5OkF9KT0+KHQsZSk9PkEuY2FsbCh0LGUpKShPYmplY3QucHJvdG90eXBlKSxCST1HKCJSZWdFeHAiKSxOdD0oQSx0KT0+e2xldCBlPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKEEpLEk9e307QUEoZSwocixvKT0+e2xldCBnOyhnPXQocixvLEEpKSE9PSExJiYoSVtvXT1nfHxyKX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKEEsSSl9LGFJPUE9PntOdChBLCh0LGUpPT57aWYoTihBKSYmWyJhcmd1bWVudHMiLCJjYWxsZXIiLCJjYWxsZWUiXS5pbmRleE9mKGUpIT09LTEpcmV0dXJuITE7bGV0IEk9QVtlXTtpZihOKEkpKXtpZih0LmVudW1lcmFibGU9ITEsIndyaXRhYmxlImluIHQpe3Qud3JpdGFibGU9ITE7cmV0dXJufXQuc2V0fHwodC5zZXQ9KCk9Pnt0aHJvdyBFcnJvcigiQ2FuIG5vdCByZXdyaXRlIHJlYWQtb25seSBtZXRob2QgXCciK2UrIlwnIil9KX19KX0sUUk9KEEsdCk9PntsZXQgZT17fSxJPXI9PntyLmZvckVhY2gobz0+e2Vbb109ITB9KX07cmV0dXJuIGooQSk/SShBKTpJKFN0cmluZyhBKS5zcGxpdCh0KSksZX0sRUk9KCk9Pnt9LGNJPShBLHQpPT5BIT1udWxsJiZOdW1iZXIuaXNGaW5pdGUoQT0rQSk/QTp0LFRBPSJhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5eiIsd3Q9IjAxMjM0NTY3ODkiLFV0PXtESUdJVDp3dCxBTFBIQTpUQSxBTFBIQV9ESUdJVDpUQStUQS50b1VwcGVyQ2FzZSgpK3d0fSxmST0oQT0xNix0PVV0LkFMUEhBX0RJR0lUKT0+e2xldCBlPSIiLHtsZW5ndGg6SX09dDtmb3IoO0EtLTspZSs9dFtNYXRoLnJhbmRvbSgpKkl8MF07cmV0dXJuIGV9O2Z1bmN0aW9uIGxJKEEpe3JldHVybiEhKEEmJk4oQS5hcHBlbmQpJiZBW1N5bWJvbC50b1N0cmluZ1RhZ109PT0iRm9ybURhdGEiJiZBW1N5bWJvbC5pdGVyYXRvcl0pfXZhciB1ST1BPT57bGV0IHQ9bmV3IEFycmF5KDEwKSxlPShJLHIpPT57aWYoaEEoSSkpe2lmKHQuaW5kZXhPZihJKT49MClyZXR1cm47aWYoISgidG9KU09OImluIEkpKXt0W3JdPUk7bGV0IG89aihJKT9bXTp7fTtyZXR1cm4gQUEoSSwoZyxDKT0+e2xldCBRPWUoZyxyKzEpOyEkKFEpJiYob1tDXT1RKX0pLHRbcl09dm9pZCAwLG99fXJldHVybiBJfTtyZXR1cm4gZShBLDApfSxEST1HKCJBc3luY0Z1bmN0aW9uIiksaEk9QT0+QSYmKGhBKEEpfHxOKEEpKSYmTihBLnRoZW4pJiZOKEEuY2F0Y2gpLEd0PSgoQSx0KT0+QT9zZXRJbW1lZGlhdGU6dD8oKGUsSSk9Pih4LmFkZEV2ZW50TGlzdGVuZXIoIm1lc3NhZ2UiLCh7c291cmNlOnIsZGF0YTpvfSk9PntyPT09eCYmbz09PWUmJkkubGVuZ3RoJiZJLnNoaWZ0KCkoKX0sITEpLHI9PntJLnB1c2gocikseC5wb3N0TWVzc2FnZShlLCIqIil9KSkoYGF4aW9zQCR7TWF0aC5yYW5kb20oKX1gLFtdKTplPT5zZXRUaW1lb3V0KGUpKSh0eXBlb2Ygc2V0SW1tZWRpYXRlPT0iZnVuY3Rpb24iLE4oeC5wb3N0TWVzc2FnZSkpLGRJPXR5cGVvZiBxdWV1ZU1pY3JvdGFzazwidSI/cXVldWVNaWNyb3Rhc2suYmluZCh4KTp0eXBlb2YgcHJvY2VzczwidSImJnByb2Nlc3MubmV4dFRpY2t8fEd0LGk9e2lzQXJyYXk6aixpc0FycmF5QnVmZmVyOnB0LGlzQnVmZmVyOnFlLGlzRm9ybURhdGE6WmUsaXNBcnJheUJ1ZmZlclZpZXc6TWUsaXNTdHJpbmc6VGUsaXNOdW1iZXI6U3QsaXNCb29sZWFuOktlLGlzT2JqZWN0OmhBLGlzUGxhaW5PYmplY3Q6bEEsaXNSZWFkYWJsZVN0cmVhbTpfZSxpc1JlcXVlc3Q6WGUsaXNSZXNwb25zZTp6ZSxpc0hlYWRlcnM6dmUsaXNVbmRlZmluZWQ6JCxpc0RhdGU6T2UsaXNGaWxlOnhlLGlzQmxvYjpQZSxpc1JlZ0V4cDpCSSxpc0Z1bmN0aW9uOk4saXNTdHJlYW06V2UsaXNVUkxTZWFyY2hQYXJhbXM6VmUsaXNUeXBlZEFycmF5OmdJLGlzRmlsZUxpc3Q6amUsZm9yRWFjaDpBQSxtZXJnZTpLQSxleHRlbmQ6QUksdHJpbTokZSxzdHJpcEJPTTp0SSxpbmhlcml0czplSSx0b0ZsYXRPYmplY3Q6SUksa2luZE9mOnVBLGtpbmRPZlRlc3Q6RyxlbmRzV2l0aDpySSx0b0FycmF5Om9JLGZvckVhY2hFbnRyeTppSSxtYXRjaEFsbDpuSSxpc0hUTUxGb3JtOnNJLGhhc093blByb3BlcnR5Om10LGhhc093blByb3A6bXQscmVkdWNlRGVzY3JpcHRvcnM6TnQsZnJlZXplTWV0aG9kczphSSx0b09iamVjdFNldDpRSSx0b0NhbWVsQ2FzZTpDSSxub29wOkVJLHRvRmluaXRlTnVtYmVyOmNJLGZpbmRLZXk6RnQsZ2xvYmFsOngsaXNDb250ZXh0RGVmaW5lZDpSdCxBTFBIQUJFVDpVdCxnZW5lcmF0ZVN0cmluZzpmSSxpc1NwZWNDb21wbGlhbnRGb3JtOmxJLHRvSlNPTk9iamVjdDp1SSxpc0FzeW5jRm46REksaXNUaGVuYWJsZTpoSSxzZXRJbW1lZGlhdGU6R3QsYXNhcDpkSX07ZnVuY3Rpb24gVyhBLHQsZSxJLHIpe0Vycm9yLmNhbGwodGhpcyksRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2U/RXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UodGhpcyx0aGlzLmNvbnN0cnVjdG9yKTp0aGlzLnN0YWNrPW5ldyBFcnJvcigpLnN0YWNrLHRoaXMubWVzc2FnZT1BLHRoaXMubmFtZT0iQXhpb3NFcnJvciIsdCYmKHRoaXMuY29kZT10KSxlJiYodGhpcy5jb25maWc9ZSksSSYmKHRoaXMucmVxdWVzdD1JKSxyJiYodGhpcy5yZXNwb25zZT1yKX1pLmluaGVyaXRzKFcsRXJyb3Ise3RvSlNPTjpmdW5jdGlvbigpe3JldHVybnttZXNzYWdlOnRoaXMubWVzc2FnZSxuYW1lOnRoaXMubmFtZSxkZXNjcmlwdGlvbjp0aGlzLmRlc2NyaXB0aW9uLG51bWJlcjp0aGlzLm51bWJlcixmaWxlTmFtZTp0aGlzLmZpbGVOYW1lLGxpbmVOdW1iZXI6dGhpcy5saW5lTnVtYmVyLGNvbHVtbk51bWJlcjp0aGlzLmNvbHVtbk51bWJlcixzdGFjazp0aGlzLnN0YWNrLGNvbmZpZzppLnRvSlNPTk9iamVjdCh0aGlzLmNvbmZpZyksY29kZTp0aGlzLmNvZGUsc3RhdHVzOnRoaXMucmVzcG9uc2UmJnRoaXMucmVzcG9uc2Uuc3RhdHVzP3RoaXMucmVzcG9uc2Uuc3RhdHVzOm51bGx9fX0pO3ZhciBrdD1XLnByb3RvdHlwZSxMdD17fTtbIkVSUl9CQURfT1BUSU9OX1ZBTFVFIiwiRVJSX0JBRF9PUFRJT04iLCJFQ09OTkFCT1JURUQiLCJFVElNRURPVVQiLCJFUlJfTkVUV09SSyIsIkVSUl9GUl9UT09fTUFOWV9SRURJUkVDVFMiLCJFUlJfREVQUkVDQVRFRCIsIkVSUl9CQURfUkVTUE9OU0UiLCJFUlJfQkFEX1JFUVVFU1QiLCJFUlJfQ0FOQ0VMRUQiLCJFUlJfTk9UX1NVUFBPUlQiLCJFUlJfSU5WQUxJRF9VUkwiXS5mb3JFYWNoKEE9PntMdFtBXT17dmFsdWU6QX19KTtPYmplY3QuZGVmaW5lUHJvcGVydGllcyhXLEx0KTtPYmplY3QuZGVmaW5lUHJvcGVydHkoa3QsImlzQXhpb3NFcnJvciIse3ZhbHVlOiEwfSk7Vy5mcm9tPShBLHQsZSxJLHIsbyk9PntsZXQgZz1PYmplY3QuY3JlYXRlKGt0KTtyZXR1cm4gaS50b0ZsYXRPYmplY3QoQSxnLGZ1bmN0aW9uKFEpe3JldHVybiBRIT09RXJyb3IucHJvdG90eXBlfSxDPT5DIT09ImlzQXhpb3NFcnJvciIpLFcuY2FsbChnLEEubWVzc2FnZSx0LGUsSSxyKSxnLmNhdXNlPUEsZy5uYW1lPUEubmFtZSxvJiZPYmplY3QuYXNzaWduKGcsbyksZ307dmFyIHU9Vzt2YXIgZEE9bnVsbDtmdW5jdGlvbiB4QShBKXtyZXR1cm4gaS5pc1BsYWluT2JqZWN0KEEpfHxpLmlzQXJyYXkoQSl9ZnVuY3Rpb24gYnQoQSl7cmV0dXJuIGkuZW5kc1dpdGgoQSwiW10iKT9BLnNsaWNlKDAsLTIpOkF9ZnVuY3Rpb24gSnQoQSx0LGUpe3JldHVybiBBP0EuY29uY2F0KHQpLm1hcChmdW5jdGlvbihyLG8pe3JldHVybiByPWJ0KHIpLCFlJiZvPyJbIityKyJdIjpyfSkuam9pbihlPyIuIjoiIik6dH1mdW5jdGlvbiB5SShBKXtyZXR1cm4gaS5pc0FycmF5KEEpJiYhQS5zb21lKHhBKX12YXIgbUk9aS50b0ZsYXRPYmplY3QoaSx7fSxudWxsLGZ1bmN0aW9uKHQpe3JldHVybi9eaXNbQS1aXS8udGVzdCh0KX0pO2Z1bmN0aW9uIHdJKEEsdCxlKXtpZighaS5pc09iamVjdChBKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJ0YXJnZXQgbXVzdCBiZSBhbiBvYmplY3QiKTt0PXR8fG5ldyhkQXx8Rm9ybURhdGEpLGU9aS50b0ZsYXRPYmplY3QoZSx7bWV0YVRva2VuczohMCxkb3RzOiExLGluZGV4ZXM6ITF9LCExLGZ1bmN0aW9uKGwsYyl7cmV0dXJuIWkuaXNVbmRlZmluZWQoY1tsXSl9KTtsZXQgST1lLm1ldGFUb2tlbnMscj1lLnZpc2l0b3J8fG4sbz1lLmRvdHMsZz1lLmluZGV4ZXMsUT0oZS5CbG9ifHx0eXBlb2YgQmxvYjwidSImJkJsb2IpJiZpLmlzU3BlY0NvbXBsaWFudEZvcm0odCk7aWYoIWkuaXNGdW5jdGlvbihyKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJ2aXNpdG9yIG11c3QgYmUgYSBmdW5jdGlvbiIpO2Z1bmN0aW9uIGEoRSl7aWYoRT09PW51bGwpcmV0dXJuIiI7aWYoaS5pc0RhdGUoRSkpcmV0dXJuIEUudG9JU09TdHJpbmcoKTtpZighUSYmaS5pc0Jsb2IoRSkpdGhyb3cgbmV3IHUoIkJsb2IgaXMgbm90IHN1cHBvcnRlZC4gVXNlIGEgQnVmZmVyIGluc3RlYWQuIik7cmV0dXJuIGkuaXNBcnJheUJ1ZmZlcihFKXx8aS5pc1R5cGVkQXJyYXkoRSk/USYmdHlwZW9mIEJsb2I9PSJmdW5jdGlvbiI/bmV3IEJsb2IoW0VdKTpCdWZmZXIuZnJvbShFKTpFfWZ1bmN0aW9uIG4oRSxsLGMpe2xldCBwPUU7aWYoRSYmIWMmJnR5cGVvZiBFPT0ib2JqZWN0Iil7aWYoaS5lbmRzV2l0aChsLCJ7fSIpKWw9ST9sOmwuc2xpY2UoMCwtMiksRT1KU09OLnN0cmluZ2lmeShFKTtlbHNlIGlmKGkuaXNBcnJheShFKSYmeUkoRSl8fChpLmlzRmlsZUxpc3QoRSl8fGkuZW5kc1dpdGgobCwiW10iKSkmJihwPWkudG9BcnJheShFKSkpcmV0dXJuIGw9YnQobCkscC5mb3JFYWNoKGZ1bmN0aW9uKEQsVSl7IShpLmlzVW5kZWZpbmVkKEQpfHxEPT09bnVsbCkmJnQuYXBwZW5kKGc9PT0hMD9KdChbbF0sVSxvKTpnPT09bnVsbD9sOmwrIltdIixhKEQpKX0pLCExfXJldHVybiB4QShFKT8hMDoodC5hcHBlbmQoSnQoYyxsLG8pLGEoRSkpLCExKX1sZXQgcz1bXSxmPU9iamVjdC5hc3NpZ24obUkse2RlZmF1bHRWaXNpdG9yOm4sY29udmVydFZhbHVlOmEsaXNWaXNpdGFibGU6eEF9KTtmdW5jdGlvbiBCKEUsbCl7aWYoIWkuaXNVbmRlZmluZWQoRSkpe2lmKHMuaW5kZXhPZihFKSE9PS0xKXRocm93IEVycm9yKCJDaXJjdWxhciByZWZlcmVuY2UgZGV0ZWN0ZWQgaW4gIitsLmpvaW4oIi4iKSk7cy5wdXNoKEUpLGkuZm9yRWFjaChFLGZ1bmN0aW9uKHAsUyl7KCEoaS5pc1VuZGVmaW5lZChwKXx8cD09PW51bGwpJiZyLmNhbGwodCxwLGkuaXNTdHJpbmcoUyk/Uy50cmltKCk6UyxsLGYpKT09PSEwJiZCKHAsbD9sLmNvbmNhdChTKTpbU10pfSkscy5wb3AoKX19aWYoIWkuaXNPYmplY3QoQSkpdGhyb3cgbmV3IFR5cGVFcnJvcigiZGF0YSBtdXN0IGJlIGFuIG9iamVjdCIpO3JldHVybiBCKEEpLHR9dmFyIHE9d0k7ZnVuY3Rpb24gSHQoQSl7bGV0IHQ9eyIhIjoiJTI1MjEiLCJcJyI6IiUyNTI3IiwiKCI6IiUyNTI4IiwiKSI6IiUyNTI5IiwifiI6IiUyNTdFIiwiJTI1MjAiOiIrIiwiJTI1MDAiOiJcXDAifTtyZXR1cm4gZW5jb2RlVVJJQ29tcG9uZW50KEEpLnJlcGxhY2UoL1shXCcoKX5dfCUyNTIwfCUyNTAwL2csZnVuY3Rpb24oSSl7cmV0dXJuIHRbSV19KX1mdW5jdGlvbiBZdChBLHQpe3RoaXMuX3BhaXJzPVtdLEEmJnEoQSx0aGlzLHQpfXZhciBxdD1ZdC5wcm90b3R5cGU7cXQuYXBwZW5kPWZ1bmN0aW9uKHQsZSl7dGhpcy5fcGFpcnMucHVzaChbdCxlXSl9O3F0LnRvU3RyaW5nPWZ1bmN0aW9uKHQpe2xldCBlPXQ/ZnVuY3Rpb24oSSl7cmV0dXJuIHQuY2FsbCh0aGlzLEksSHQpfTpIdDtyZXR1cm4gdGhpcy5fcGFpcnMubWFwKGZ1bmN0aW9uKHIpe3JldHVybiBlKHJbMF0pKyI9IitlKHJbMV0pfSwiIikuam9pbigiJiIpfTt2YXIgeUE9WXQ7ZnVuY3Rpb24gcEkoQSl7cmV0dXJuIGVuY29kZVVSSUNvbXBvbmVudChBKS5yZXBsYWNlKC8lMjUzQS9naSwiOiIpLnJlcGxhY2UoLyUyNTI0L2csIiQiKS5yZXBsYWNlKC8lMjUyQy9naSwiLCIpLnJlcGxhY2UoLyUyNTIwL2csIisiKS5yZXBsYWNlKC8lMjU1Qi9naSwiWyIpLnJlcGxhY2UoLyUyNTVEL2dpLCJdIil9ZnVuY3Rpb24gdEEoQSx0LGUpe2lmKCF0KXJldHVybiBBO2xldCBJPWUmJmUuZW5jb2RlfHxwSSxyPWUmJmUuc2VyaWFsaXplLG87aWYocj9vPXIodCxlKTpvPWkuaXNVUkxTZWFyY2hQYXJhbXModCk/dC50b1N0cmluZygpOm5ldyB5QSh0LGUpLnRvU3RyaW5nKEkpLG8pe2xldCBnPUEuaW5kZXhPZigiJTIzIik7ZyE9PS0xJiYoQT1BLnNsaWNlKDAsZykpLEErPShBLmluZGV4T2YoIj8iKT09PS0xPyI/IjoiJiIpK299cmV0dXJuIEF9dmFyIFBBPWNsYXNze2NvbnN0cnVjdG9yKCl7dGhpcy5oYW5kbGVycz1bXX11c2UodCxlLEkpe3JldHVybiB0aGlzLmhhbmRsZXJzLnB1c2goe2Z1bGZpbGxlZDp0LHJlamVjdGVkOmUsc3luY2hyb25vdXM6ST9JLnN5bmNocm9ub3VzOiExLHJ1bldoZW46ST9JLnJ1bldoZW46bnVsbH0pLHRoaXMuaGFuZGxlcnMubGVuZ3RoLTF9ZWplY3QodCl7dGhpcy5oYW5kbGVyc1t0XSYmKHRoaXMuaGFuZGxlcnNbdF09bnVsbCl9Y2xlYXIoKXt0aGlzLmhhbmRsZXJzJiYodGhpcy5oYW5kbGVycz1bXSl9Zm9yRWFjaCh0KXtpLmZvckVhY2godGhpcy5oYW5kbGVycyxmdW5jdGlvbihJKXtJIT09bnVsbCYmdChJKX0pfX0sakE9UEE7dmFyIG1BPXtzaWxlbnRKU09OUGFyc2luZzohMCxmb3JjZWRKU09OUGFyc2luZzohMCxjbGFyaWZ5VGltZW91dEVycm9yOiExfTt2YXIgTXQ9dHlwZW9mIFVSTFNlYXJjaFBhcmFtczwidSI/VVJMU2VhcmNoUGFyYW1zOnlBO3ZhciBUdD10eXBlb2YgRm9ybURhdGE8InUiP0Zvcm1EYXRhOm51bGw7dmFyIEt0PXR5cGVvZiBCbG9iPCJ1Ij9CbG9iOm51bGw7dmFyIE90PXtpc0Jyb3dzZXI6ITAsY2xhc3Nlczp7VVJMU2VhcmNoUGFyYW1zOk10LEZvcm1EYXRhOlR0LEJsb2I6S3R9LHByb3RvY29sczpbImh0dHAiLCJodHRwcyIsImZpbGUiLCJibG9iIiwidXJsIiwiZGF0YSJdfTt2YXIgWkE9e307d2UoWkEse2hhc0Jyb3dzZXJFbnY6KCk9PldBLGhhc1N0YW5kYXJkQnJvd3NlckVudjooKT0+U0ksaGFzU3RhbmRhcmRCcm93c2VyV2ViV29ya2VyRW52OigpPT5GSSxvcmlnaW46KCk9PlJJfSk7dmFyIFdBPXR5cGVvZiB3aW5kb3c8InUiJiZ0eXBlb2YgZG9jdW1lbnQ8InUiLFNJPShBPT5XQSYmWyJSZWFjdE5hdGl2ZSIsIk5hdGl2ZVNjcmlwdCIsIk5TIl0uaW5kZXhPZihBKTwwKSh0eXBlb2YgbmF2aWdhdG9yPCJ1IiYmbmF2aWdhdG9yLnByb2R1Y3QpLEZJPXR5cGVvZiBXb3JrZXJHbG9iYWxTY29wZTwidSImJnNlbGYgaW5zdGFuY2VvZiBXb3JrZXJHbG9iYWxTY29wZSYmdHlwZW9mIHNlbGYuaW1wb3J0U2NyaXB0cz09ImZ1bmN0aW9uIixSST1XQSYmd2luZG93LmxvY2F0aW9uLmhyZWZ8fCJodHRwOi8vbG9jYWxob3N0Ijt2YXIgdz17Li4uWkEsLi4uT3R9O2Z1bmN0aW9uIFZBKEEsdCl7cmV0dXJuIHEoQSxuZXcgdy5jbGFzc2VzLlVSTFNlYXJjaFBhcmFtcyxPYmplY3QuYXNzaWduKHt2aXNpdG9yOmZ1bmN0aW9uKGUsSSxyLG8pe3JldHVybiB3LmlzTm9kZSYmaS5pc0J1ZmZlcihlKT8odGhpcy5hcHBlbmQoSSxlLnRvU3RyaW5nKCJiYXNlNjQiKSksITEpOm8uZGVmYXVsdFZpc2l0b3IuYXBwbHkodGhpcyxhcmd1bWVudHMpfX0sdCkpfWZ1bmN0aW9uIE5JKEEpe3JldHVybiBpLm1hdGNoQWxsKC9cXHcrfFxcWyhcXHcqKV0vZyxBKS5tYXAodD0+dFswXT09PSJbXSI/IiI6dFsxXXx8dFswXSl9ZnVuY3Rpb24gVUkoQSl7bGV0IHQ9e30sZT1PYmplY3Qua2V5cyhBKSxJLHI9ZS5sZW5ndGgsbztmb3IoST0wO0k8cjtJKyspbz1lW0ldLHRbb109QVtvXTtyZXR1cm4gdH1mdW5jdGlvbiBHSShBKXtmdW5jdGlvbiB0KGUsSSxyLG8pe2xldCBnPWVbbysrXTtpZihnPT09Il9fcHJvdG9fXyIpcmV0dXJuITA7bGV0IEM9TnVtYmVyLmlzRmluaXRlKCtnKSxRPW8+PWUubGVuZ3RoO3JldHVybiBnPSFnJiZpLmlzQXJyYXkocik/ci5sZW5ndGg6ZyxRPyhpLmhhc093blByb3AocixnKT9yW2ddPVtyW2ddLEldOnJbZ109SSwhQyk6KCghcltnXXx8IWkuaXNPYmplY3QocltnXSkpJiYocltnXT1bXSksdChlLEkscltnXSxvKSYmaS5pc0FycmF5KHJbZ10pJiYocltnXT1VSShyW2ddKSksIUMpfWlmKGkuaXNGb3JtRGF0YShBKSYmaS5pc0Z1bmN0aW9uKEEuZW50cmllcykpe2xldCBlPXt9O3JldHVybiBpLmZvckVhY2hFbnRyeShBLChJLHIpPT57dChOSShJKSxyLGUsMCl9KSxlfXJldHVybiBudWxsfXZhciB3QT1HSTtmdW5jdGlvbiBrSShBLHQsZSl7aWYoaS5pc1N0cmluZyhBKSl0cnl7cmV0dXJuKHR8fEpTT04ucGFyc2UpKEEpLGkudHJpbShBKX1jYXRjaChJKXtpZihJLm5hbWUhPT0iU3ludGF4RXJyb3IiKXRocm93IEl9cmV0dXJuKGV8fEpTT04uc3RyaW5naWZ5KShBKX12YXIgX0E9e3RyYW5zaXRpb25hbDptQSxhZGFwdGVyOlsieGhyIiwiaHR0cCIsImZldGNoIl0sdHJhbnNmb3JtUmVxdWVzdDpbZnVuY3Rpb24odCxlKXtsZXQgST1lLmdldENvbnRlbnRUeXBlKCl8fCIiLHI9SS5pbmRleE9mKCJhcHBsaWNhdGlvbi9qc29uIik+LTEsbz1pLmlzT2JqZWN0KHQpO2lmKG8mJmkuaXNIVE1MRm9ybSh0KSYmKHQ9bmV3IEZvcm1EYXRhKHQpKSxpLmlzRm9ybURhdGEodCkpcmV0dXJuIHI/SlNPTi5zdHJpbmdpZnkod0EodCkpOnQ7aWYoaS5pc0FycmF5QnVmZmVyKHQpfHxpLmlzQnVmZmVyKHQpfHxpLmlzU3RyZWFtKHQpfHxpLmlzRmlsZSh0KXx8aS5pc0Jsb2IodCl8fGkuaXNSZWFkYWJsZVN0cmVhbSh0KSlyZXR1cm4gdDtpZihpLmlzQXJyYXlCdWZmZXJWaWV3KHQpKXJldHVybiB0LmJ1ZmZlcjtpZihpLmlzVVJMU2VhcmNoUGFyYW1zKHQpKXJldHVybiBlLnNldENvbnRlbnRUeXBlKCJhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQ7Y2hhcnNldD11dGYtOCIsITEpLHQudG9TdHJpbmcoKTtsZXQgQztpZihvKXtpZihJLmluZGV4T2YoImFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCIpPi0xKXJldHVybiBWQSh0LHRoaXMuZm9ybVNlcmlhbGl6ZXIpLnRvU3RyaW5nKCk7aWYoKEM9aS5pc0ZpbGVMaXN0KHQpKXx8SS5pbmRleE9mKCJtdWx0aXBhcnQvZm9ybS1kYXRhIik+LTEpe2xldCBRPXRoaXMuZW52JiZ0aGlzLmVudi5Gb3JtRGF0YTtyZXR1cm4gcShDP3siZmlsZXNbXSI6dH06dCxRJiZuZXcgUSx0aGlzLmZvcm1TZXJpYWxpemVyKX19cmV0dXJuIG98fHI/KGUuc2V0Q29udGVudFR5cGUoImFwcGxpY2F0aW9uL2pzb24iLCExKSxrSSh0KSk6dH1dLHRyYW5zZm9ybVJlc3BvbnNlOltmdW5jdGlvbih0KXtsZXQgZT10aGlzLnRyYW5zaXRpb25hbHx8X0EudHJhbnNpdGlvbmFsLEk9ZSYmZS5mb3JjZWRKU09OUGFyc2luZyxyPXRoaXMucmVzcG9uc2VUeXBlPT09Impzb24iO2lmKGkuaXNSZXNwb25zZSh0KXx8aS5pc1JlYWRhYmxlU3RyZWFtKHQpKXJldHVybiB0O2lmKHQmJmkuaXNTdHJpbmcodCkmJihJJiYhdGhpcy5yZXNwb25zZVR5cGV8fHIpKXtsZXQgZz0hKGUmJmUuc2lsZW50SlNPTlBhcnNpbmcpJiZyO3RyeXtyZXR1cm4gSlNPTi5wYXJzZSh0KX1jYXRjaChDKXtpZihnKXRocm93IEMubmFtZT09PSJTeW50YXhFcnJvciI/dS5mcm9tKEMsdS5FUlJfQkFEX1JFU1BPTlNFLHRoaXMsbnVsbCx0aGlzLnJlc3BvbnNlKTpDfX1yZXR1cm4gdH1dLHRpbWVvdXQ6MCx4c3JmQ29va2llTmFtZToiWFNSRi1UT0tFTiIseHNyZkhlYWRlck5hbWU6IlgtWFNSRi1UT0tFTiIsbWF4Q29udGVudExlbmd0aDotMSxtYXhCb2R5TGVuZ3RoOi0xLGVudjp7Rm9ybURhdGE6dy5jbGFzc2VzLkZvcm1EYXRhLEJsb2I6dy5jbGFzc2VzLkJsb2J9LHZhbGlkYXRlU3RhdHVzOmZ1bmN0aW9uKHQpe3JldHVybiB0Pj0yMDAmJnQ8MzAwfSxoZWFkZXJzOntjb21tb246e0FjY2VwdDoiYXBwbGljYXRpb24vanNvbiwgdGV4dC9wbGFpbiwgKi8qIiwiQ29udGVudC1UeXBlIjp2b2lkIDB9fX07aS5mb3JFYWNoKFsiZGVsZXRlIiwiZ2V0IiwiaGVhZCIsInBvc3QiLCJwdXQiLCJwYXRjaCJdLEE9PntfQS5oZWFkZXJzW0FdPXt9fSk7dmFyIFo9X0E7dmFyIExJPWkudG9PYmplY3RTZXQoWyJhZ2UiLCJhdXRob3JpemF0aW9uIiwiY29udGVudC1sZW5ndGgiLCJjb250ZW50LXR5cGUiLCJldGFnIiwiZXhwaXJlcyIsImZyb20iLCJob3N0IiwiaWYtbW9kaWZpZWQtc2luY2UiLCJpZi11bm1vZGlmaWVkLXNpbmNlIiwibGFzdC1tb2RpZmllZCIsImxvY2F0aW9uIiwibWF4LWZvcndhcmRzIiwicHJveHktYXV0aG9yaXphdGlvbiIsInJlZmVyZXIiLCJyZXRyeS1hZnRlciIsInVzZXItYWdlbnQiXSkseHQ9QT0+e2xldCB0PXt9LGUsSSxyO3JldHVybiBBJiZBLnNwbGl0KGAlMEFgKS5mb3JFYWNoKGZ1bmN0aW9uKGcpe3I9Zy5pbmRleE9mKCI6IiksZT1nLnN1YnN0cmluZygwLHIpLnRyaW0oKS50b0xvd2VyQ2FzZSgpLEk9Zy5zdWJzdHJpbmcocisxKS50cmltKCksISghZXx8dFtlXSYmTElbZV0pJiYoZT09PSJzZXQtY29va2llIj90W2VdP3RbZV0ucHVzaChJKTp0W2VdPVtJXTp0W2VdPXRbZV0/dFtlXSsiLCAiK0k6SSl9KSx0fTt2YXIgUHQ9U3ltYm9sKCJpbnRlcm5hbHMiKTtmdW5jdGlvbiBlQShBKXtyZXR1cm4gQSYmU3RyaW5nKEEpLnRyaW0oKS50b0xvd2VyQ2FzZSgpfWZ1bmN0aW9uIHBBKEEpe3JldHVybiBBPT09ITF8fEE9PW51bGw/QTppLmlzQXJyYXkoQSk/QS5tYXAocEEpOlN0cmluZyhBKX1mdW5jdGlvbiBKSShBKXtsZXQgdD1PYmplY3QuY3JlYXRlKG51bGwpLGU9LyhbXlxccyw7PV0rKVxccyooPzo9XFxzKihbXiw7XSspKT8vZyxJO2Zvcig7ST1lLmV4ZWMoQSk7KXRbSVsxXV09SVsyXTtyZXR1cm4gdH12YXIgYkk9QT0+L15bLV9hLXpBLVowLTleYHx+LCElMjMkJSZcJyorLl0rJC8udGVzdChBLnRyaW0oKSk7ZnVuY3Rpb24gWEEoQSx0LGUsSSxyKXtpZihpLmlzRnVuY3Rpb24oSSkpcmV0dXJuIEkuY2FsbCh0aGlzLHQsZSk7aWYociYmKHQ9ZSksISFpLmlzU3RyaW5nKHQpKXtpZihpLmlzU3RyaW5nKEkpKXJldHVybiB0LmluZGV4T2YoSSkhPT0tMTtpZihpLmlzUmVnRXhwKEkpKXJldHVybiBJLnRlc3QodCl9fWZ1bmN0aW9uIEhJKEEpe3JldHVybiBBLnRyaW0oKS50b0xvd2VyQ2FzZSgpLnJlcGxhY2UoLyhbYS16XFxkXSkoXFx3KikvZywodCxlLEkpPT5lLnRvVXBwZXJDYXNlKCkrSSl9ZnVuY3Rpb24gWUkoQSx0KXtsZXQgZT1pLnRvQ2FtZWxDYXNlKCIgIit0KTtbImdldCIsInNldCIsImhhcyJdLmZvckVhY2goST0+e09iamVjdC5kZWZpbmVQcm9wZXJ0eShBLEkrZSx7dmFsdWU6ZnVuY3Rpb24ocixvLGcpe3JldHVybiB0aGlzW0ldLmNhbGwodGhpcyx0LHIsbyxnKX0sY29uZmlndXJhYmxlOiEwfSl9KX12YXIgVj1jbGFzc3tjb25zdHJ1Y3Rvcih0KXt0JiZ0aGlzLnNldCh0KX1zZXQodCxlLEkpe2xldCByPXRoaXM7ZnVuY3Rpb24gbyhDLFEsYSl7bGV0IG49ZUEoUSk7aWYoIW4pdGhyb3cgbmV3IEVycm9yKCJoZWFkZXIgbmFtZSBtdXN0IGJlIGEgbm9uLWVtcHR5IHN0cmluZyIpO2xldCBzPWkuZmluZEtleShyLG4pOyghc3x8cltzXT09PXZvaWQgMHx8YT09PSEwfHxhPT09dm9pZCAwJiZyW3NdIT09ITEpJiYocltzfHxRXT1wQShDKSl9bGV0IGc9KEMsUSk9PmkuZm9yRWFjaChDLChhLG4pPT5vKGEsbixRKSk7aWYoaS5pc1BsYWluT2JqZWN0KHQpfHx0IGluc3RhbmNlb2YgdGhpcy5jb25zdHJ1Y3RvcilnKHQsZSk7ZWxzZSBpZihpLmlzU3RyaW5nKHQpJiYodD10LnRyaW0oKSkmJiFiSSh0KSlnKHh0KHQpLGUpO2Vsc2UgaWYoaS5pc0hlYWRlcnModCkpZm9yKGxldFtDLFFdb2YgdC5lbnRyaWVzKCkpbyhRLEMsSSk7ZWxzZSB0IT1udWxsJiZvKGUsdCxJKTtyZXR1cm4gdGhpc31nZXQodCxlKXtpZih0PWVBKHQpLHQpe2xldCBJPWkuZmluZEtleSh0aGlzLHQpO2lmKEkpe2xldCByPXRoaXNbSV07aWYoIWUpcmV0dXJuIHI7aWYoZT09PSEwKXJldHVybiBKSShyKTtpZihpLmlzRnVuY3Rpb24oZSkpcmV0dXJuIGUuY2FsbCh0aGlzLHIsSSk7aWYoaS5pc1JlZ0V4cChlKSlyZXR1cm4gZS5leGVjKHIpO3Rocm93IG5ldyBUeXBlRXJyb3IoInBhcnNlciBtdXN0IGJlIGJvb2xlYW58cmVnZXhwfGZ1bmN0aW9uIil9fX1oYXModCxlKXtpZih0PWVBKHQpLHQpe2xldCBJPWkuZmluZEtleSh0aGlzLHQpO3JldHVybiEhKEkmJnRoaXNbSV0hPT12b2lkIDAmJighZXx8WEEodGhpcyx0aGlzW0ldLEksZSkpKX1yZXR1cm4hMX1kZWxldGUodCxlKXtsZXQgST10aGlzLHI9ITE7ZnVuY3Rpb24gbyhnKXtpZihnPWVBKGcpLGcpe2xldCBDPWkuZmluZEtleShJLGcpO0MmJighZXx8WEEoSSxJW0NdLEMsZSkpJiYoZGVsZXRlIElbQ10scj0hMCl9fXJldHVybiBpLmlzQXJyYXkodCk/dC5mb3JFYWNoKG8pOm8odCkscn1jbGVhcih0KXtsZXQgZT1PYmplY3Qua2V5cyh0aGlzKSxJPWUubGVuZ3RoLHI9ITE7Zm9yKDtJLS07KXtsZXQgbz1lW0ldOyghdHx8WEEodGhpcyx0aGlzW29dLG8sdCwhMCkpJiYoZGVsZXRlIHRoaXNbb10scj0hMCl9cmV0dXJuIHJ9bm9ybWFsaXplKHQpe2xldCBlPXRoaXMsST17fTtyZXR1cm4gaS5mb3JFYWNoKHRoaXMsKHIsbyk9PntsZXQgZz1pLmZpbmRLZXkoSSxvKTtpZihnKXtlW2ddPXBBKHIpLGRlbGV0ZSBlW29dO3JldHVybn1sZXQgQz10P0hJKG8pOlN0cmluZyhvKS50cmltKCk7QyE9PW8mJmRlbGV0ZSBlW29dLGVbQ109cEEociksSVtDXT0hMH0pLHRoaXN9Y29uY2F0KC4uLnQpe3JldHVybiB0aGlzLmNvbnN0cnVjdG9yLmNvbmNhdCh0aGlzLC4uLnQpfXRvSlNPTih0KXtsZXQgZT1PYmplY3QuY3JlYXRlKG51bGwpO3JldHVybiBpLmZvckVhY2godGhpcywoSSxyKT0+e0khPW51bGwmJkkhPT0hMSYmKGVbcl09dCYmaS5pc0FycmF5KEkpP0kuam9pbigiLCAiKTpJKX0pLGV9W1N5bWJvbC5pdGVyYXRvcl0oKXtyZXR1cm4gT2JqZWN0LmVudHJpZXModGhpcy50b0pTT04oKSlbU3ltYm9sLml0ZXJhdG9yXSgpfXRvU3RyaW5nKCl7cmV0dXJuIE9iamVjdC5lbnRyaWVzKHRoaXMudG9KU09OKCkpLm1hcCgoW3QsZV0pPT50KyI6ICIrZSkuam9pbihgJTBBYCl9Z2V0W1N5bWJvbC50b1N0cmluZ1RhZ10oKXtyZXR1cm4iQXhpb3NIZWFkZXJzIn1zdGF0aWMgZnJvbSh0KXtyZXR1cm4gdCBpbnN0YW5jZW9mIHRoaXM/dDpuZXcgdGhpcyh0KX1zdGF0aWMgY29uY2F0KHQsLi4uZSl7bGV0IEk9bmV3IHRoaXModCk7cmV0dXJuIGUuZm9yRWFjaChyPT5JLnNldChyKSksSX1zdGF0aWMgYWNjZXNzb3IodCl7bGV0IEk9KHRoaXNbUHRdPXRoaXNbUHRdPXthY2Nlc3NvcnM6e319KS5hY2Nlc3NvcnMscj10aGlzLnByb3RvdHlwZTtmdW5jdGlvbiBvKGcpe2xldCBDPWVBKGcpO0lbQ118fChZSShyLGcpLElbQ109ITApfXJldHVybiBpLmlzQXJyYXkodCk/dC5mb3JFYWNoKG8pOm8odCksdGhpc319O1YuYWNjZXNzb3IoWyJDb250ZW50LVR5cGUiLCJDb250ZW50LUxlbmd0aCIsIkFjY2VwdCIsIkFjY2VwdC1FbmNvZGluZyIsIlVzZXItQWdlbnQiLCJBdXRob3JpemF0aW9uIl0pO2kucmVkdWNlRGVzY3JpcHRvcnMoVi5wcm90b3R5cGUsKHt2YWx1ZTpBfSx0KT0+e2xldCBlPXRbMF0udG9VcHBlckNhc2UoKSt0LnNsaWNlKDEpO3JldHVybntnZXQ6KCk9PkEsc2V0KEkpe3RoaXNbZV09SX19fSk7aS5mcmVlemVNZXRob2RzKFYpO3ZhciBtPVY7ZnVuY3Rpb24gSUEoQSx0KXtsZXQgZT10aGlzfHxaLEk9dHx8ZSxyPW0uZnJvbShJLmhlYWRlcnMpLG89SS5kYXRhO3JldHVybiBpLmZvckVhY2goQSxmdW5jdGlvbihDKXtvPUMuY2FsbChlLG8sci5ub3JtYWxpemUoKSx0P3Quc3RhdHVzOnZvaWQgMCl9KSxyLm5vcm1hbGl6ZSgpLG99ZnVuY3Rpb24gckEoQSl7cmV0dXJuISEoQSYmQS5fX0NBTkNFTF9fKX1mdW5jdGlvbiBqdChBLHQsZSl7dS5jYWxsKHRoaXMsQT8/ImNhbmNlbGVkIix1LkVSUl9DQU5DRUxFRCx0LGUpLHRoaXMubmFtZT0iQ2FuY2VsZWRFcnJvciJ9aS5pbmhlcml0cyhqdCx1LHtfX0NBTkNFTF9fOiEwfSk7dmFyIGI9anQ7ZnVuY3Rpb24gb0EoQSx0LGUpe2xldCBJPWUuY29uZmlnLnZhbGlkYXRlU3RhdHVzOyFlLnN0YXR1c3x8IUl8fEkoZS5zdGF0dXMpP0EoZSk6dChuZXcgdSgiUmVxdWVzdCBmYWlsZWQgd2l0aCBzdGF0dXMgY29kZSAiK2Uuc3RhdHVzLFt1LkVSUl9CQURfUkVRVUVTVCx1LkVSUl9CQURfUkVTUE9OU0VdW01hdGguZmxvb3IoZS5zdGF0dXMvMTAwKS00XSxlLmNvbmZpZyxlLnJlcXVlc3QsZSkpfWZ1bmN0aW9uIHpBKEEpe2xldCB0PS9eKFstK1xcd117MSwyNX0pKDo/XFwvXFwvfDopLy5leGVjKEEpO3JldHVybiB0JiZ0WzFdfHwiIn1mdW5jdGlvbiBxSShBLHQpe0E9QXx8MTA7bGV0IGU9bmV3IEFycmF5KEEpLEk9bmV3IEFycmF5KEEpLHI9MCxvPTAsZztyZXR1cm4gdD10IT09dm9pZCAwP3Q6MWUzLGZ1bmN0aW9uKFEpe2xldCBhPURhdGUubm93KCksbj1JW29dO2d8fChnPWEpLGVbcl09USxJW3JdPWE7bGV0IHM9byxmPTA7Zm9yKDtzIT09cjspZis9ZVtzKytdLHM9cyVBO2lmKHI9KHIrMSklQSxyPT09byYmKG89KG8rMSklQSksYS1nPHQpcmV0dXJuO2xldCBCPW4mJmEtbjtyZXR1cm4gQj9NYXRoLnJvdW5kKGYqMWUzL0IpOnZvaWQgMH19dmFyIFd0PXFJO2Z1bmN0aW9uIE1JKEEsdCl7bGV0IGU9MCxJPTFlMy90LHIsbyxnPShhLG49RGF0ZS5ub3coKSk9PntlPW4scj1udWxsLG8mJihjbGVhclRpbWVvdXQobyksbz1udWxsKSxBLmFwcGx5KG51bGwsYSl9O3JldHVyblsoLi4uYSk9PntsZXQgbj1EYXRlLm5vdygpLHM9bi1lO3M+PUk/ZyhhLG4pOihyPWEsb3x8KG89c2V0VGltZW91dCgoKT0+e289bnVsbCxnKHIpfSxJLXMpKSl9LCgpPT5yJiZnKHIpXX12YXIgWnQ9TUk7dmFyIF89KEEsdCxlPTMpPT57bGV0IEk9MCxyPVd0KDUwLDI1MCk7cmV0dXJuIFp0KG89PntsZXQgZz1vLmxvYWRlZCxDPW8ubGVuZ3RoQ29tcHV0YWJsZT9vLnRvdGFsOnZvaWQgMCxRPWctSSxhPXIoUSksbj1nPD1DO0k9ZztsZXQgcz17bG9hZGVkOmcsdG90YWw6Qyxwcm9ncmVzczpDP2cvQzp2b2lkIDAsYnl0ZXM6USxyYXRlOmF8fHZvaWQgMCxlc3RpbWF0ZWQ6YSYmQyYmbj8oQy1nKS9hOnZvaWQgMCxldmVudDpvLGxlbmd0aENvbXB1dGFibGU6QyE9bnVsbCxbdD8iZG93bmxvYWQiOiJ1cGxvYWQiXTohMH07QShzKX0sZSl9LHZBPShBLHQpPT57bGV0IGU9QSE9bnVsbDtyZXR1cm5bST0+dFswXSh7bGVuZ3RoQ29tcHV0YWJsZTplLHRvdGFsOkEsbG9hZGVkOkl9KSx0WzFdXX0sJEE9QT0+KC4uLnQpPT5pLmFzYXAoKCk9PkEoLi4udCkpO3ZhciBWdD13Lmhhc1N0YW5kYXJkQnJvd3NlckVudj9mdW5jdGlvbigpe2xldCB0PS8obXNpZXx0cmlkZW50KS9pLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCksZT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJhIiksSTtmdW5jdGlvbiByKG8pe2xldCBnPW87cmV0dXJuIHQmJihlLnNldEF0dHJpYnV0ZSgiaHJlZiIsZyksZz1lLmhyZWYpLGUuc2V0QXR0cmlidXRlKCJocmVmIixnKSx7aHJlZjplLmhyZWYscHJvdG9jb2w6ZS5wcm90b2NvbD9lLnByb3RvY29sLnJlcGxhY2UoLzokLywiIik6IiIsaG9zdDplLmhvc3Qsc2VhcmNoOmUuc2VhcmNoP2Uuc2VhcmNoLnJlcGxhY2UoL15cXD8vLCIiKToiIixoYXNoOmUuaGFzaD9lLmhhc2gucmVwbGFjZSgvXiUyMy8sIiIpOiIiLGhvc3RuYW1lOmUuaG9zdG5hbWUscG9ydDplLnBvcnQscGF0aG5hbWU6ZS5wYXRobmFtZS5jaGFyQXQoMCk9PT0iLyI/ZS5wYXRobmFtZToiLyIrZS5wYXRobmFtZX19cmV0dXJuIEk9cih3aW5kb3cubG9jYXRpb24uaHJlZiksZnVuY3Rpb24oZyl7bGV0IEM9aS5pc1N0cmluZyhnKT9yKGcpOmc7cmV0dXJuIEMucHJvdG9jb2w9PT1JLnByb3RvY29sJiZDLmhvc3Q9PT1JLmhvc3R9fSgpOmZ1bmN0aW9uKCl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuITB9fSgpO3ZhciBfdD13Lmhhc1N0YW5kYXJkQnJvd3NlckVudj97d3JpdGUoQSx0LGUsSSxyLG8pe2xldCBnPVtBKyI9IitlbmNvZGVVUklDb21wb25lbnQodCldO2kuaXNOdW1iZXIoZSkmJmcucHVzaCgiZXhwaXJlcz0iK25ldyBEYXRlKGUpLnRvR01UU3RyaW5nKCkpLGkuaXNTdHJpbmcoSSkmJmcucHVzaCgicGF0aD0iK0kpLGkuaXNTdHJpbmcocikmJmcucHVzaCgiZG9tYWluPSIrciksbz09PSEwJiZnLnB1c2goInNlY3VyZSIpLGRvY3VtZW50LmNvb2tpZT1nLmpvaW4oIjsgIil9LHJlYWQoQSl7bGV0IHQ9ZG9jdW1lbnQuY29va2llLm1hdGNoKG5ldyBSZWdFeHAoIihefDtcXFxccyopKCIrQSsiKT0oW147XSopIikpO3JldHVybiB0P2RlY29kZVVSSUNvbXBvbmVudCh0WzNdKTpudWxsfSxyZW1vdmUoQSl7dGhpcy53cml0ZShBLCIiLERhdGUubm93KCktODY0ZTUpfX06e3dyaXRlKCl7fSxyZWFkKCl7cmV0dXJuIG51bGx9LHJlbW92ZSgpe319O2Z1bmN0aW9uIEF0KEEpe3JldHVybi9eKFthLXpdW2EtelxcZCtcXC0uXSo6KT9cXC9cXC8vaS50ZXN0KEEpfWZ1bmN0aW9uIHR0KEEsdCl7cmV0dXJuIHQ/QS5yZXBsYWNlKC9cXC8/XFwvJC8sIiIpKyIvIit0LnJlcGxhY2UoL15cXC8rLywiIik6QX1mdW5jdGlvbiBnQShBLHQpe3JldHVybiBBJiYhQXQodCk/dHQoQSx0KTp0fXZhciBYdD1BPT5BIGluc3RhbmNlb2YgbT97Li4uQX06QTtmdW5jdGlvbiBrKEEsdCl7dD10fHx7fTtsZXQgZT17fTtmdW5jdGlvbiBJKGEsbixzKXtyZXR1cm4gaS5pc1BsYWluT2JqZWN0KGEpJiZpLmlzUGxhaW5PYmplY3Qobik/aS5tZXJnZS5jYWxsKHtjYXNlbGVzczpzfSxhLG4pOmkuaXNQbGFpbk9iamVjdChuKT9pLm1lcmdlKHt9LG4pOmkuaXNBcnJheShuKT9uLnNsaWNlKCk6bn1mdW5jdGlvbiByKGEsbixzKXtpZihpLmlzVW5kZWZpbmVkKG4pKXtpZighaS5pc1VuZGVmaW5lZChhKSlyZXR1cm4gSSh2b2lkIDAsYSxzKX1lbHNlIHJldHVybiBJKGEsbixzKX1mdW5jdGlvbiBvKGEsbil7aWYoIWkuaXNVbmRlZmluZWQobikpcmV0dXJuIEkodm9pZCAwLG4pfWZ1bmN0aW9uIGcoYSxuKXtpZihpLmlzVW5kZWZpbmVkKG4pKXtpZighaS5pc1VuZGVmaW5lZChhKSlyZXR1cm4gSSh2b2lkIDAsYSl9ZWxzZSByZXR1cm4gSSh2b2lkIDAsbil9ZnVuY3Rpb24gQyhhLG4scyl7aWYocyBpbiB0KXJldHVybiBJKGEsbik7aWYocyBpbiBBKXJldHVybiBJKHZvaWQgMCxhKX1sZXQgUT17dXJsOm8sbWV0aG9kOm8sZGF0YTpvLGJhc2VVUkw6Zyx0cmFuc2Zvcm1SZXF1ZXN0OmcsdHJhbnNmb3JtUmVzcG9uc2U6ZyxwYXJhbXNTZXJpYWxpemVyOmcsdGltZW91dDpnLHRpbWVvdXRNZXNzYWdlOmcsd2l0aENyZWRlbnRpYWxzOmcsd2l0aFhTUkZUb2tlbjpnLGFkYXB0ZXI6ZyxyZXNwb25zZVR5cGU6Zyx4c3JmQ29va2llTmFtZTpnLHhzcmZIZWFkZXJOYW1lOmcsb25VcGxvYWRQcm9ncmVzczpnLG9uRG93bmxvYWRQcm9ncmVzczpnLGRlY29tcHJlc3M6ZyxtYXhDb250ZW50TGVuZ3RoOmcsbWF4Qm9keUxlbmd0aDpnLGJlZm9yZVJlZGlyZWN0OmcsdHJhbnNwb3J0OmcsaHR0cEFnZW50OmcsaHR0cHNBZ2VudDpnLGNhbmNlbFRva2VuOmcsc29ja2V0UGF0aDpnLHJlc3BvbnNlRW5jb2Rpbmc6Zyx2YWxpZGF0ZVN0YXR1czpDLGhlYWRlcnM6KGEsbik9PnIoWHQoYSksWHQobiksITApfTtyZXR1cm4gaS5mb3JFYWNoKE9iamVjdC5rZXlzKE9iamVjdC5hc3NpZ24oe30sQSx0KSksZnVuY3Rpb24obil7bGV0IHM9UVtuXXx8cixmPXMoQVtuXSx0W25dLG4pO2kuaXNVbmRlZmluZWQoZikmJnMhPT1DfHwoZVtuXT1mKX0pLGV9dmFyIFNBPUE9PntsZXQgdD1rKHt9LEEpLHtkYXRhOmUsd2l0aFhTUkZUb2tlbjpJLHhzcmZIZWFkZXJOYW1lOnIseHNyZkNvb2tpZU5hbWU6byxoZWFkZXJzOmcsYXV0aDpDfT10O3QuaGVhZGVycz1nPW0uZnJvbShnKSx0LnVybD10QShnQSh0LmJhc2VVUkwsdC51cmwpLEEucGFyYW1zLEEucGFyYW1zU2VyaWFsaXplciksQyYmZy5zZXQoIkF1dGhvcml6YXRpb24iLCJCYXNpYyAiK2J0b2EoKEMudXNlcm5hbWV8fCIiKSsiOiIrKEMucGFzc3dvcmQ/dW5lc2NhcGUoZW5jb2RlVVJJQ29tcG9uZW50KEMucGFzc3dvcmQpKToiIikpKTtsZXQgUTtpZihpLmlzRm9ybURhdGEoZSkpe2lmKHcuaGFzU3RhbmRhcmRCcm93c2VyRW52fHx3Lmhhc1N0YW5kYXJkQnJvd3NlcldlYldvcmtlckVudilnLnNldENvbnRlbnRUeXBlKHZvaWQgMCk7ZWxzZSBpZigoUT1nLmdldENvbnRlbnRUeXBlKCkpIT09ITEpe2xldFthLC4uLm5dPVE/US5zcGxpdCgiOyIpLm1hcChzPT5zLnRyaW0oKSkuZmlsdGVyKEJvb2xlYW4pOltdO2cuc2V0Q29udGVudFR5cGUoW2F8fCJtdWx0aXBhcnQvZm9ybS1kYXRhIiwuLi5uXS5qb2luKCI7ICIpKX19aWYody5oYXNTdGFuZGFyZEJyb3dzZXJFbnYmJihJJiZpLmlzRnVuY3Rpb24oSSkmJihJPUkodCkpLEl8fEkhPT0hMSYmVnQodC51cmwpKSl7bGV0IGE9ciYmbyYmX3QucmVhZChvKTthJiZnLnNldChyLGEpfXJldHVybiB0fTt2YXIgVEk9dHlwZW9mIFhNTEh0dHBSZXF1ZXN0PCJ1Iix6dD1USSYmZnVuY3Rpb24oQSl7cmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKGUsSSl7bGV0IHI9U0EoQSksbz1yLmRhdGEsZz1tLmZyb20oci5oZWFkZXJzKS5ub3JtYWxpemUoKSx7cmVzcG9uc2VUeXBlOkMsb25VcGxvYWRQcm9ncmVzczpRLG9uRG93bmxvYWRQcm9ncmVzczphfT1yLG4scyxmLEIsRTtmdW5jdGlvbiBsKCl7QiYmQigpLEUmJkUoKSxyLmNhbmNlbFRva2VuJiZyLmNhbmNlbFRva2VuLnVuc3Vic2NyaWJlKG4pLHIuc2lnbmFsJiZyLnNpZ25hbC5yZW1vdmVFdmVudExpc3RlbmVyKCJhYm9ydCIsbil9bGV0IGM9bmV3IFhNTEh0dHBSZXF1ZXN0O2Mub3BlbihyLm1ldGhvZC50b1VwcGVyQ2FzZSgpLHIudXJsLCEwKSxjLnRpbWVvdXQ9ci50aW1lb3V0O2Z1bmN0aW9uIHAoKXtpZighYylyZXR1cm47bGV0IEQ9bS5mcm9tKCJnZXRBbGxSZXNwb25zZUhlYWRlcnMiaW4gYyYmYy5nZXRBbGxSZXNwb25zZUhlYWRlcnMoKSksSz17ZGF0YTohQ3x8Qz09PSJ0ZXh0Inx8Qz09PSJqc29uIj9jLnJlc3BvbnNlVGV4dDpjLnJlc3BvbnNlLHN0YXR1czpjLnN0YXR1cyxzdGF0dXNUZXh0OmMuc3RhdHVzVGV4dCxoZWFkZXJzOkQsY29uZmlnOkEscmVxdWVzdDpjfTtvQShmdW5jdGlvbihKKXtlKEopLGwoKX0sZnVuY3Rpb24oSil7SShKKSxsKCl9LEspLGM9bnVsbH0ib25sb2FkZW5kImluIGM/Yy5vbmxvYWRlbmQ9cDpjLm9ucmVhZHlzdGF0ZWNoYW5nZT1mdW5jdGlvbigpeyFjfHxjLnJlYWR5U3RhdGUhPT00fHxjLnN0YXR1cz09PTAmJiEoYy5yZXNwb25zZVVSTCYmYy5yZXNwb25zZVVSTC5pbmRleE9mKCJmaWxlOiIpPT09MCl8fHNldFRpbWVvdXQocCl9LGMub25hYm9ydD1mdW5jdGlvbigpe2MmJihJKG5ldyB1KCJSZXF1ZXN0IGFib3J0ZWQiLHUuRUNPTk5BQk9SVEVELEEsYykpLGM9bnVsbCl9LGMub25lcnJvcj1mdW5jdGlvbigpe0kobmV3IHUoIk5ldHdvcmsgRXJyb3IiLHUuRVJSX05FVFdPUkssQSxjKSksYz1udWxsfSxjLm9udGltZW91dD1mdW5jdGlvbigpe2xldCBVPXIudGltZW91dD8idGltZW91dCBvZiAiK3IudGltZW91dCsibXMgZXhjZWVkZWQiOiJ0aW1lb3V0IGV4Y2VlZGVkIixLPXIudHJhbnNpdGlvbmFsfHxtQTtyLnRpbWVvdXRFcnJvck1lc3NhZ2UmJihVPXIudGltZW91dEVycm9yTWVzc2FnZSksSShuZXcgdShVLEsuY2xhcmlmeVRpbWVvdXRFcnJvcj91LkVUSU1FRE9VVDp1LkVDT05OQUJPUlRFRCxBLGMpKSxjPW51bGx9LG89PT12b2lkIDAmJmcuc2V0Q29udGVudFR5cGUobnVsbCksInNldFJlcXVlc3RIZWFkZXIiaW4gYyYmaS5mb3JFYWNoKGcudG9KU09OKCksZnVuY3Rpb24oVSxLKXtjLnNldFJlcXVlc3RIZWFkZXIoSyxVKX0pLGkuaXNVbmRlZmluZWQoci53aXRoQ3JlZGVudGlhbHMpfHwoYy53aXRoQ3JlZGVudGlhbHM9ISFyLndpdGhDcmVkZW50aWFscyksQyYmQyE9PSJqc29uIiYmKGMucmVzcG9uc2VUeXBlPXIucmVzcG9uc2VUeXBlKSxhJiYoW2YsRV09XyhhLCEwKSxjLmFkZEV2ZW50TGlzdGVuZXIoInByb2dyZXNzIixmKSksUSYmYy51cGxvYWQmJihbcyxCXT1fKFEpLGMudXBsb2FkLmFkZEV2ZW50TGlzdGVuZXIoInByb2dyZXNzIixzKSxjLnVwbG9hZC5hZGRFdmVudExpc3RlbmVyKCJsb2FkZW5kIixCKSksKHIuY2FuY2VsVG9rZW58fHIuc2lnbmFsKSYmKG49RD0+e2MmJihJKCFEfHxELnR5cGU/bmV3IGIobnVsbCxBLGMpOkQpLGMuYWJvcnQoKSxjPW51bGwpfSxyLmNhbmNlbFRva2VuJiZyLmNhbmNlbFRva2VuLnN1YnNjcmliZShuKSxyLnNpZ25hbCYmKHIuc2lnbmFsLmFib3J0ZWQ/bigpOnIuc2lnbmFsLmFkZEV2ZW50TGlzdGVuZXIoImFib3J0IixuKSkpO2xldCBTPXpBKHIudXJsKTtpZihTJiZ3LnByb3RvY29scy5pbmRleE9mKFMpPT09LTEpe0kobmV3IHUoIlVuc3VwcG9ydGVkIHByb3RvY29sICIrUysiOiIsdS5FUlJfQkFEX1JFUVVFU1QsQSkpO3JldHVybn1jLnNlbmQob3x8bnVsbCl9KX07dmFyIEtJPShBLHQpPT57bGV0IGU9bmV3IEFib3J0Q29udHJvbGxlcixJLHI9ZnVuY3Rpb24oUSl7aWYoIUkpe0k9ITAsZygpO2xldCBhPVEgaW5zdGFuY2VvZiBFcnJvcj9ROnRoaXMucmVhc29uO2UuYWJvcnQoYSBpbnN0YW5jZW9mIHU/YTpuZXcgYihhIGluc3RhbmNlb2YgRXJyb3I/YS5tZXNzYWdlOmEpKX19LG89dCYmc2V0VGltZW91dCgoKT0+e3IobmV3IHUoYHRpbWVvdXQgJHt0fSBvZiBtcyBleGNlZWRlZGAsdS5FVElNRURPVVQpKX0sdCksZz0oKT0+e0EmJihvJiZjbGVhclRpbWVvdXQobyksbz1udWxsLEEuZm9yRWFjaChRPT57USYmKFEucmVtb3ZlRXZlbnRMaXN0ZW5lcj9RLnJlbW92ZUV2ZW50TGlzdGVuZXIoImFib3J0IixyKTpRLnVuc3Vic2NyaWJlKHIpKX0pLEE9bnVsbCl9O0EuZm9yRWFjaChRPT5RJiZRLmFkZEV2ZW50TGlzdGVuZXImJlEuYWRkRXZlbnRMaXN0ZW5lcigiYWJvcnQiLHIpKTtsZXR7c2lnbmFsOkN9PWU7cmV0dXJuIEMudW5zdWJzY3JpYmU9ZyxbQywoKT0+e28mJmNsZWFyVGltZW91dChvKSxvPW51bGx9XX0sdnQ9S0k7dmFyIE9JPWZ1bmN0aW9uKihBLHQpe2xldCBlPUEuYnl0ZUxlbmd0aDtpZighdHx8ZTx0KXt5aWVsZCBBO3JldHVybn1sZXQgST0wLHI7Zm9yKDtJPGU7KXI9SSt0LHlpZWxkIEEuc2xpY2UoSSxyKSxJPXJ9LHhJPWFzeW5jIGZ1bmN0aW9uKihBLHQsZSl7Zm9yIGF3YWl0KGxldCBJIG9mIEEpeWllbGQqT0koQXJyYXlCdWZmZXIuaXNWaWV3KEkpP0k6YXdhaXQgZShTdHJpbmcoSSkpLHQpfSxldD0oQSx0LGUsSSxyKT0+e2xldCBvPXhJKEEsdCxyKSxnPTAsQyxRPWE9PntDfHwoQz0hMCxJJiZJKGEpKX07cmV0dXJuIG5ldyBSZWFkYWJsZVN0cmVhbSh7YXN5bmMgcHVsbChhKXt0cnl7bGV0e2RvbmU6bix2YWx1ZTpzfT1hd2FpdCBvLm5leHQoKTtpZihuKXtRKCksYS5jbG9zZSgpO3JldHVybn1sZXQgZj1zLmJ5dGVMZW5ndGg7aWYoZSl7bGV0IEI9Zys9ZjtlKEIpfWEuZW5xdWV1ZShuZXcgVWludDhBcnJheShzKSl9Y2F0Y2gobil7dGhyb3cgUShuKSxufX0sY2FuY2VsKGEpe3JldHVybiBRKGEpLG8ucmV0dXJuKCl9fSx7aGlnaFdhdGVyTWFyazoyfSl9O3ZhciBSQT10eXBlb2YgZmV0Y2g9PSJmdW5jdGlvbiImJnR5cGVvZiBSZXF1ZXN0PT0iZnVuY3Rpb24iJiZ0eXBlb2YgUmVzcG9uc2U9PSJmdW5jdGlvbiIsQWU9UkEmJnR5cGVvZiBSZWFkYWJsZVN0cmVhbT09ImZ1bmN0aW9uIixJdD1SQSYmKHR5cGVvZiBUZXh0RW5jb2Rlcj09ImZ1bmN0aW9uIj8oQT0+dD0+QS5lbmNvZGUodCkpKG5ldyBUZXh0RW5jb2Rlcik6YXN5bmMgQT0+bmV3IFVpbnQ4QXJyYXkoYXdhaXQgbmV3IFJlc3BvbnNlKEEpLmFycmF5QnVmZmVyKCkpKSx0ZT0oQSwuLi50KT0+e3RyeXtyZXR1cm4hIUEoLi4udCl9Y2F0Y2h7cmV0dXJuITF9fSxQST1BZSYmdGUoKCk9PntsZXQgQT0hMSx0PW5ldyBSZXF1ZXN0KHcub3JpZ2luLHtib2R5Om5ldyBSZWFkYWJsZVN0cmVhbSxtZXRob2Q6IlBPU1QiLGdldCBkdXBsZXgoKXtyZXR1cm4gQT0hMCwiaGFsZiJ9fSkuaGVhZGVycy5oYXMoIkNvbnRlbnQtVHlwZSIpO3JldHVybiBBJiYhdH0pLCR0PTY0KjEwMjQscnQ9QWUmJnRlKCgpPT5pLmlzUmVhZGFibGVTdHJlYW0obmV3IFJlc3BvbnNlKCIiKS5ib2R5KSksRkE9e3N0cmVhbTpydCYmKEE9PkEuYm9keSl9O1JBJiYoQT0+e1sidGV4dCIsImFycmF5QnVmZmVyIiwiYmxvYiIsImZvcm1EYXRhIiwic3RyZWFtIl0uZm9yRWFjaCh0PT57IUZBW3RdJiYoRkFbdF09aS5pc0Z1bmN0aW9uKEFbdF0pP2U9PmVbdF0oKTooZSxJKT0+e3Rocm93IG5ldyB1KGBSZXNwb25zZSB0eXBlIFwnJHt0fVwnIGlzIG5vdCBzdXBwb3J0ZWRgLHUuRVJSX05PVF9TVVBQT1JULEkpfSl9KX0pKG5ldyBSZXNwb25zZSk7dmFyIGpJPWFzeW5jIEE9PntpZihBPT1udWxsKXJldHVybiAwO2lmKGkuaXNCbG9iKEEpKXJldHVybiBBLnNpemU7aWYoaS5pc1NwZWNDb21wbGlhbnRGb3JtKEEpKXJldHVybihhd2FpdCBuZXcgUmVxdWVzdChBKS5hcnJheUJ1ZmZlcigpKS5ieXRlTGVuZ3RoO2lmKGkuaXNBcnJheUJ1ZmZlclZpZXcoQSl8fGkuaXNBcnJheUJ1ZmZlcihBKSlyZXR1cm4gQS5ieXRlTGVuZ3RoO2lmKGkuaXNVUkxTZWFyY2hQYXJhbXMoQSkmJihBPUErIiIpLGkuaXNTdHJpbmcoQSkpcmV0dXJuKGF3YWl0IEl0KEEpKS5ieXRlTGVuZ3RofSxXST1hc3luYyhBLHQpPT57bGV0IGU9aS50b0Zpbml0ZU51bWJlcihBLmdldENvbnRlbnRMZW5ndGgoKSk7cmV0dXJuIGU/P2pJKHQpfSxlZT1SQSYmKGFzeW5jIEE9PntsZXR7dXJsOnQsbWV0aG9kOmUsZGF0YTpJLHNpZ25hbDpyLGNhbmNlbFRva2VuOm8sdGltZW91dDpnLG9uRG93bmxvYWRQcm9ncmVzczpDLG9uVXBsb2FkUHJvZ3Jlc3M6USxyZXNwb25zZVR5cGU6YSxoZWFkZXJzOm4sd2l0aENyZWRlbnRpYWxzOnM9InNhbWUtb3JpZ2luIixmZXRjaE9wdGlvbnM6Zn09U0EoQSk7YT1hPyhhKyIiKS50b0xvd2VyQ2FzZSgpOiJ0ZXh0IjtsZXRbQixFXT1yfHxvfHxnP3Z0KFtyLG9dLGcpOltdLGwsYyxwPSgpPT57IWwmJnNldFRpbWVvdXQoKCk9PntCJiZCLnVuc3Vic2NyaWJlKCl9KSxsPSEwfSxTO3RyeXtpZihRJiZQSSYmZSE9PSJnZXQiJiZlIT09ImhlYWQiJiYoUz1hd2FpdCBXSShuLEkpKSE9PTApe2xldCBMPW5ldyBSZXF1ZXN0KHQse21ldGhvZDoiUE9TVCIsYm9keTpJLGR1cGxleDoiaGFsZiJ9KSxKO2lmKGkuaXNGb3JtRGF0YShJKSYmKEo9TC5oZWFkZXJzLmdldCgiY29udGVudC10eXBlIikpJiZuLnNldENvbnRlbnRUeXBlKEopLEwuYm9keSl7bGV0W0hBLENBXT12QShTLF8oJEEoUSkpKTtJPWV0KEwuYm9keSwkdCxIQSxDQSxJdCl9fWkuaXNTdHJpbmcocyl8fChzPXM/ImluY2x1ZGUiOiJvbWl0IiksYz1uZXcgUmVxdWVzdCh0LHsuLi5mLHNpZ25hbDpCLG1ldGhvZDplLnRvVXBwZXJDYXNlKCksaGVhZGVyczpuLm5vcm1hbGl6ZSgpLnRvSlNPTigpLGJvZHk6SSxkdXBsZXg6ImhhbGYiLGNyZWRlbnRpYWxzOnN9KTtsZXQgRD1hd2FpdCBmZXRjaChjKSxVPXJ0JiYoYT09PSJzdHJlYW0ifHxhPT09InJlc3BvbnNlIik7aWYocnQmJihDfHxVKSl7bGV0IEw9e307WyJzdGF0dXMiLCJzdGF0dXNUZXh0IiwiaGVhZGVycyJdLmZvckVhY2goRXQ9PntMW0V0XT1EW0V0XX0pO2xldCBKPWkudG9GaW5pdGVOdW1iZXIoRC5oZWFkZXJzLmdldCgiY29udGVudC1sZW5ndGgiKSksW0hBLENBXT1DJiZ2QShKLF8oJEEoQyksITApKXx8W107RD1uZXcgUmVzcG9uc2UoZXQoRC5ib2R5LCR0LEhBLCgpPT57Q0EmJkNBKCksVSYmcCgpfSxJdCksTCl9YT1hfHwidGV4dCI7bGV0IEs9YXdhaXQgRkFbaS5maW5kS2V5KEZBLGEpfHwidGV4dCJdKEQsQSk7cmV0dXJuIVUmJnAoKSxFJiZFKCksYXdhaXQgbmV3IFByb21pc2UoKEwsSik9PntvQShMLEose2RhdGE6SyxoZWFkZXJzOm0uZnJvbShELmhlYWRlcnMpLHN0YXR1czpELnN0YXR1cyxzdGF0dXNUZXh0OkQuc3RhdHVzVGV4dCxjb25maWc6QSxyZXF1ZXN0OmN9KX0pfWNhdGNoKEQpe3Rocm93IHAoKSxEJiZELm5hbWU9PT0iVHlwZUVycm9yIiYmL2ZldGNoL2kudGVzdChELm1lc3NhZ2UpP09iamVjdC5hc3NpZ24obmV3IHUoIk5ldHdvcmsgRXJyb3IiLHUuRVJSX05FVFdPUkssQSxjKSx7Y2F1c2U6RC5jYXVzZXx8RH0pOnUuZnJvbShELEQmJkQuY29kZSxBLGMpfX0pO3ZhciBvdD17aHR0cDpkQSx4aHI6enQsZmV0Y2g6ZWV9O2kuZm9yRWFjaChvdCwoQSx0KT0+e2lmKEEpe3RyeXtPYmplY3QuZGVmaW5lUHJvcGVydHkoQSwibmFtZSIse3ZhbHVlOnR9KX1jYXRjaHt9T2JqZWN0LmRlZmluZVByb3BlcnR5KEEsImFkYXB0ZXJOYW1lIix7dmFsdWU6dH0pfX0pO3ZhciBJZT1BPT5gLSAke0F9YCxaST1BPT5pLmlzRnVuY3Rpb24oQSl8fEE9PT1udWxsfHxBPT09ITEsTkE9e2dldEFkYXB0ZXI6QT0+e0E9aS5pc0FycmF5KEEpP0E6W0FdO2xldHtsZW5ndGg6dH09QSxlLEkscj17fTtmb3IobGV0IG89MDtvPHQ7bysrKXtlPUFbb107bGV0IGc7aWYoST1lLCFaSShlKSYmKEk9b3RbKGc9U3RyaW5nKGUpKS50b0xvd2VyQ2FzZSgpXSxJPT09dm9pZCAwKSl0aHJvdyBuZXcgdShgVW5rbm93biBhZGFwdGVyIFwnJHtnfVwnYCk7aWYoSSlicmVhaztyW2d8fCIlMjMiK29dPUl9aWYoIUkpe2xldCBvPU9iamVjdC5lbnRyaWVzKHIpLm1hcCgoW0MsUV0pPT5gYWRhcHRlciAke0N9IGArKFE9PT0hMT8iaXMgbm90IHN1cHBvcnRlZCBieSB0aGUgZW52aXJvbm1lbnQiOiJpcyBub3QgYXZhaWxhYmxlIGluIHRoZSBidWlsZCIpKSxnPXQ/by5sZW5ndGg+MT9gc2luY2UgOiUwQWArby5tYXAoSWUpLmpvaW4oYCUwQWApOiIgIitJZShvWzBdKToiYXMgbm8gYWRhcHRlciBzcGVjaWZpZWQiO3Rocm93IG5ldyB1KCJUaGVyZSBpcyBubyBzdWl0YWJsZSBhZGFwdGVyIHRvIGRpc3BhdGNoIHRoZSByZXF1ZXN0ICIrZywiRVJSX05PVF9TVVBQT1JUIil9cmV0dXJuIEl9LGFkYXB0ZXJzOm90fTtmdW5jdGlvbiBndChBKXtpZihBLmNhbmNlbFRva2VuJiZBLmNhbmNlbFRva2VuLnRocm93SWZSZXF1ZXN0ZWQoKSxBLnNpZ25hbCYmQS5zaWduYWwuYWJvcnRlZCl0aHJvdyBuZXcgYihudWxsLEEpfWZ1bmN0aW9uIFVBKEEpe3JldHVybiBndChBKSxBLmhlYWRlcnM9bS5mcm9tKEEuaGVhZGVycyksQS5kYXRhPUlBLmNhbGwoQSxBLnRyYW5zZm9ybVJlcXVlc3QpLFsicG9zdCIsInB1dCIsInBhdGNoIl0uaW5kZXhPZihBLm1ldGhvZCkhPT0tMSYmQS5oZWFkZXJzLnNldENvbnRlbnRUeXBlKCJhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQiLCExKSxOQS5nZXRBZGFwdGVyKEEuYWRhcHRlcnx8Wi5hZGFwdGVyKShBKS50aGVuKGZ1bmN0aW9uKEkpe3JldHVybiBndChBKSxJLmRhdGE9SUEuY2FsbChBLEEudHJhbnNmb3JtUmVzcG9uc2UsSSksSS5oZWFkZXJzPW0uZnJvbShJLmhlYWRlcnMpLEl9LGZ1bmN0aW9uKEkpe3JldHVybiByQShJKXx8KGd0KEEpLEkmJkkucmVzcG9uc2UmJihJLnJlc3BvbnNlLmRhdGE9SUEuY2FsbChBLEEudHJhbnNmb3JtUmVzcG9uc2UsSS5yZXNwb25zZSksSS5yZXNwb25zZS5oZWFkZXJzPW0uZnJvbShJLnJlc3BvbnNlLmhlYWRlcnMpKSksUHJvbWlzZS5yZWplY3QoSSl9KX12YXIgR0E9IjEuNy40Ijt2YXIgaXQ9e307WyJvYmplY3QiLCJib29sZWFuIiwibnVtYmVyIiwiZnVuY3Rpb24iLCJzdHJpbmciLCJzeW1ib2wiXS5mb3JFYWNoKChBLHQpPT57aXRbQV09ZnVuY3Rpb24oSSl7cmV0dXJuIHR5cGVvZiBJPT09QXx8ImEiKyh0PDE/Im4gIjoiICIpK0F9fSk7dmFyIHJlPXt9O2l0LnRyYW5zaXRpb25hbD1mdW5jdGlvbih0LGUsSSl7ZnVuY3Rpb24gcihvLGcpe3JldHVybiJbQXhpb3MgdiIrR0ErIl0gVHJhbnNpdGlvbmFsIG9wdGlvbiBcJyIrbysiXCciK2crKEk/Ii4gIitJOiIiKX1yZXR1cm4obyxnLEMpPT57aWYodD09PSExKXRocm93IG5ldyB1KHIoZywiIGhhcyBiZWVuIHJlbW92ZWQiKyhlPyIgaW4gIitlOiIiKSksdS5FUlJfREVQUkVDQVRFRCk7cmV0dXJuIGUmJiFyZVtnXSYmKHJlW2ddPSEwLGNvbnNvbGUud2FybihyKGcsIiBoYXMgYmVlbiBkZXByZWNhdGVkIHNpbmNlIHYiK2UrIiBhbmQgd2lsbCBiZSByZW1vdmVkIGluIHRoZSBuZWFyIGZ1dHVyZSIpKSksdD90KG8sZyxDKTohMH19O2Z1bmN0aW9uIFZJKEEsdCxlKXtpZih0eXBlb2YgQSE9Im9iamVjdCIpdGhyb3cgbmV3IHUoIm9wdGlvbnMgbXVzdCBiZSBhbiBvYmplY3QiLHUuRVJSX0JBRF9PUFRJT05fVkFMVUUpO2xldCBJPU9iamVjdC5rZXlzKEEpLHI9SS5sZW5ndGg7Zm9yKDtyLS0gPjA7KXtsZXQgbz1JW3JdLGc9dFtvXTtpZihnKXtsZXQgQz1BW29dLFE9Qz09PXZvaWQgMHx8ZyhDLG8sQSk7aWYoUSE9PSEwKXRocm93IG5ldyB1KCJvcHRpb24gIitvKyIgbXVzdCBiZSAiK1EsdS5FUlJfQkFEX09QVElPTl9WQUxVRSk7Y29udGludWV9aWYoZSE9PSEwKXRocm93IG5ldyB1KCJVbmtub3duIG9wdGlvbiAiK28sdS5FUlJfQkFEX09QVElPTil9fXZhciBrQT17YXNzZXJ0T3B0aW9uczpWSSx2YWxpZGF0b3JzOml0fTt2YXIgTT1rQS52YWxpZGF0b3JzLFg9Y2xhc3N7Y29uc3RydWN0b3IodCl7dGhpcy5kZWZhdWx0cz10LHRoaXMuaW50ZXJjZXB0b3JzPXtyZXF1ZXN0Om5ldyBqQSxyZXNwb25zZTpuZXcgakF9fWFzeW5jIHJlcXVlc3QodCxlKXt0cnl7cmV0dXJuIGF3YWl0IHRoaXMuX3JlcXVlc3QodCxlKX1jYXRjaChJKXtpZihJIGluc3RhbmNlb2YgRXJyb3Ipe2xldCByO0Vycm9yLmNhcHR1cmVTdGFja1RyYWNlP0Vycm9yLmNhcHR1cmVTdGFja1RyYWNlKHI9e30pOnI9bmV3IEVycm9yO2xldCBvPXIuc3RhY2s/ci5zdGFjay5yZXBsYWNlKC9eLitcXG4vLCIiKToiIjt0cnl7SS5zdGFjaz9vJiYhU3RyaW5nKEkuc3RhY2spLmVuZHNXaXRoKG8ucmVwbGFjZSgvXi4rXFxuLitcXG4vLCIiKSkmJihJLnN0YWNrKz1gJTBBYCtvKTpJLnN0YWNrPW99Y2F0Y2h7fX10aHJvdyBJfX1fcmVxdWVzdCh0LGUpe3R5cGVvZiB0PT0ic3RyaW5nIj8oZT1lfHx7fSxlLnVybD10KTplPXR8fHt9LGU9ayh0aGlzLmRlZmF1bHRzLGUpO2xldHt0cmFuc2l0aW9uYWw6SSxwYXJhbXNTZXJpYWxpemVyOnIsaGVhZGVyczpvfT1lO0khPT12b2lkIDAmJmtBLmFzc2VydE9wdGlvbnMoSSx7c2lsZW50SlNPTlBhcnNpbmc6TS50cmFuc2l0aW9uYWwoTS5ib29sZWFuKSxmb3JjZWRKU09OUGFyc2luZzpNLnRyYW5zaXRpb25hbChNLmJvb2xlYW4pLGNsYXJpZnlUaW1lb3V0RXJyb3I6TS50cmFuc2l0aW9uYWwoTS5ib29sZWFuKX0sITEpLHIhPW51bGwmJihpLmlzRnVuY3Rpb24ocik/ZS5wYXJhbXNTZXJpYWxpemVyPXtzZXJpYWxpemU6cn06a0EuYXNzZXJ0T3B0aW9ucyhyLHtlbmNvZGU6TS5mdW5jdGlvbixzZXJpYWxpemU6TS5mdW5jdGlvbn0sITApKSxlLm1ldGhvZD0oZS5tZXRob2R8fHRoaXMuZGVmYXVsdHMubWV0aG9kfHwiZ2V0IikudG9Mb3dlckNhc2UoKTtsZXQgZz1vJiZpLm1lcmdlKG8uY29tbW9uLG9bZS5tZXRob2RdKTtvJiZpLmZvckVhY2goWyJkZWxldGUiLCJnZXQiLCJoZWFkIiwicG9zdCIsInB1dCIsInBhdGNoIiwiY29tbW9uIl0sRT0+e2RlbGV0ZSBvW0VdfSksZS5oZWFkZXJzPW0uY29uY2F0KGcsbyk7bGV0IEM9W10sUT0hMDt0aGlzLmludGVyY2VwdG9ycy5yZXF1ZXN0LmZvckVhY2goZnVuY3Rpb24obCl7dHlwZW9mIGwucnVuV2hlbj09ImZ1bmN0aW9uIiYmbC5ydW5XaGVuKGUpPT09ITF8fChRPVEmJmwuc3luY2hyb25vdXMsQy51bnNoaWZ0KGwuZnVsZmlsbGVkLGwucmVqZWN0ZWQpKX0pO2xldCBhPVtdO3RoaXMuaW50ZXJjZXB0b3JzLnJlc3BvbnNlLmZvckVhY2goZnVuY3Rpb24obCl7YS5wdXNoKGwuZnVsZmlsbGVkLGwucmVqZWN0ZWQpfSk7bGV0IG4scz0wLGY7aWYoIVEpe2xldCBFPVtVQS5iaW5kKHRoaXMpLHZvaWQgMF07Zm9yKEUudW5zaGlmdC5hcHBseShFLEMpLEUucHVzaC5hcHBseShFLGEpLGY9RS5sZW5ndGgsbj1Qcm9taXNlLnJlc29sdmUoZSk7czxmOyluPW4udGhlbihFW3MrK10sRVtzKytdKTtyZXR1cm4gbn1mPUMubGVuZ3RoO2xldCBCPWU7Zm9yKHM9MDtzPGY7KXtsZXQgRT1DW3MrK10sbD1DW3MrK107dHJ5e0I9RShCKX1jYXRjaChjKXtsLmNhbGwodGhpcyxjKTticmVha319dHJ5e249VUEuY2FsbCh0aGlzLEIpfWNhdGNoKEUpe3JldHVybiBQcm9taXNlLnJlamVjdChFKX1mb3Iocz0wLGY9YS5sZW5ndGg7czxmOyluPW4udGhlbihhW3MrK10sYVtzKytdKTtyZXR1cm4gbn1nZXRVcmkodCl7dD1rKHRoaXMuZGVmYXVsdHMsdCk7bGV0IGU9Z0EodC5iYXNlVVJMLHQudXJsKTtyZXR1cm4gdEEoZSx0LnBhcmFtcyx0LnBhcmFtc1NlcmlhbGl6ZXIpfX07aS5mb3JFYWNoKFsiZGVsZXRlIiwiZ2V0IiwiaGVhZCIsIm9wdGlvbnMiXSxmdW5jdGlvbih0KXtYLnByb3RvdHlwZVt0XT1mdW5jdGlvbihlLEkpe3JldHVybiB0aGlzLnJlcXVlc3QoayhJfHx7fSx7bWV0aG9kOnQsdXJsOmUsZGF0YTooSXx8e30pLmRhdGF9KSl9fSk7aS5mb3JFYWNoKFsicG9zdCIsInB1dCIsInBhdGNoIl0sZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShJKXtyZXR1cm4gZnVuY3Rpb24obyxnLEMpe3JldHVybiB0aGlzLnJlcXVlc3QoayhDfHx7fSx7bWV0aG9kOnQsaGVhZGVyczpJP3siQ29udGVudC1UeXBlIjoibXVsdGlwYXJ0L2Zvcm0tZGF0YSJ9Ont9LHVybDpvLGRhdGE6Z30pKX19WC5wcm90b3R5cGVbdF09ZSgpLFgucHJvdG90eXBlW3QrIkZvcm0iXT1lKCEwKX0pO3ZhciBpQT1YO3ZhciBudD1jbGFzcyBBe2NvbnN0cnVjdG9yKHQpe2lmKHR5cGVvZiB0IT0iZnVuY3Rpb24iKXRocm93IG5ldyBUeXBlRXJyb3IoImV4ZWN1dG9yIG11c3QgYmUgYSBmdW5jdGlvbi4iKTtsZXQgZTt0aGlzLnByb21pc2U9bmV3IFByb21pc2UoZnVuY3Rpb24obyl7ZT1vfSk7bGV0IEk9dGhpczt0aGlzLnByb21pc2UudGhlbihyPT57aWYoIUkuX2xpc3RlbmVycylyZXR1cm47bGV0IG89SS5fbGlzdGVuZXJzLmxlbmd0aDtmb3IoO28tLSA+MDspSS5fbGlzdGVuZXJzW29dKHIpO0kuX2xpc3RlbmVycz1udWxsfSksdGhpcy5wcm9taXNlLnRoZW49cj0+e2xldCBvLGc9bmV3IFByb21pc2UoQz0+e0kuc3Vic2NyaWJlKEMpLG89Q30pLnRoZW4ocik7cmV0dXJuIGcuY2FuY2VsPWZ1bmN0aW9uKCl7SS51bnN1YnNjcmliZShvKX0sZ30sdChmdW5jdGlvbihvLGcsQyl7SS5yZWFzb258fChJLnJlYXNvbj1uZXcgYihvLGcsQyksZShJLnJlYXNvbikpfSl9dGhyb3dJZlJlcXVlc3RlZCgpe2lmKHRoaXMucmVhc29uKXRocm93IHRoaXMucmVhc29ufXN1YnNjcmliZSh0KXtpZih0aGlzLnJlYXNvbil7dCh0aGlzLnJlYXNvbik7cmV0dXJufXRoaXMuX2xpc3RlbmVycz90aGlzLl9saXN0ZW5lcnMucHVzaCh0KTp0aGlzLl9saXN0ZW5lcnM9W3RdfXVuc3Vic2NyaWJlKHQpe2lmKCF0aGlzLl9saXN0ZW5lcnMpcmV0dXJuO2xldCBlPXRoaXMuX2xpc3RlbmVycy5pbmRleE9mKHQpO2UhPT0tMSYmdGhpcy5fbGlzdGVuZXJzLnNwbGljZShlLDEpfXN0YXRpYyBzb3VyY2UoKXtsZXQgdDtyZXR1cm57dG9rZW46bmV3IEEoZnVuY3Rpb24ocil7dD1yfSksY2FuY2VsOnR9fX0sb2U9bnQ7ZnVuY3Rpb24gc3QoQSl7cmV0dXJuIGZ1bmN0aW9uKGUpe3JldHVybiBBLmFwcGx5KG51bGwsZSl9fWZ1bmN0aW9uIEN0KEEpe3JldHVybiBpLmlzT2JqZWN0KEEpJiZBLmlzQXhpb3NFcnJvcj09PSEwfXZhciBCdD17Q29udGludWU6MTAwLFN3aXRjaGluZ1Byb3RvY29sczoxMDEsUHJvY2Vzc2luZzoxMDIsRWFybHlIaW50czoxMDMsT2s6MjAwLENyZWF0ZWQ6MjAxLEFjY2VwdGVkOjIwMixOb25BdXRob3JpdGF0aXZlSW5mb3JtYXRpb246MjAzLE5vQ29udGVudDoyMDQsUmVzZXRDb250ZW50OjIwNSxQYXJ0aWFsQ29udGVudDoyMDYsTXVsdGlTdGF0dXM6MjA3LEFscmVhZHlSZXBvcnRlZDoyMDgsSW1Vc2VkOjIyNixNdWx0aXBsZUNob2ljZXM6MzAwLE1vdmVkUGVybWFuZW50bHk6MzAxLEZvdW5kOjMwMixTZWVPdGhlcjozMDMsTm90TW9kaWZpZWQ6MzA0LFVzZVByb3h5OjMwNSxVbnVzZWQ6MzA2LFRlbXBvcmFyeVJlZGlyZWN0OjMwNyxQZXJtYW5lbnRSZWRpcmVjdDozMDgsQmFkUmVxdWVzdDo0MDAsVW5hdXRob3JpemVkOjQwMSxQYXltZW50UmVxdWlyZWQ6NDAyLEZvcmJpZGRlbjo0MDMsTm90Rm91bmQ6NDA0LE1ldGhvZE5vdEFsbG93ZWQ6NDA1LE5vdEFjY2VwdGFibGU6NDA2LFByb3h5QXV0aGVudGljYXRpb25SZXF1aXJlZDo0MDcsUmVxdWVzdFRpbWVvdXQ6NDA4LENvbmZsaWN0OjQwOSxHb25lOjQxMCxMZW5ndGhSZXF1aXJlZDo0MTEsUHJlY29uZGl0aW9uRmFpbGVkOjQxMixQYXlsb2FkVG9vTGFyZ2U6NDEzLFVyaVRvb0xvbmc6NDE0LFVuc3VwcG9ydGVkTWVkaWFUeXBlOjQxNSxSYW5nZU5vdFNhdGlzZmlhYmxlOjQxNixFeHBlY3RhdGlvbkZhaWxlZDo0MTcsSW1BVGVhcG90OjQxOCxNaXNkaXJlY3RlZFJlcXVlc3Q6NDIxLFVucHJvY2Vzc2FibGVFbnRpdHk6NDIyLExvY2tlZDo0MjMsRmFpbGVkRGVwZW5kZW5jeTo0MjQsVG9vRWFybHk6NDI1LFVwZ3JhZGVSZXF1aXJlZDo0MjYsUHJlY29uZGl0aW9uUmVxdWlyZWQ6NDI4LFRvb01hbnlSZXF1ZXN0czo0MjksUmVxdWVzdEhlYWRlckZpZWxkc1Rvb0xhcmdlOjQzMSxVbmF2YWlsYWJsZUZvckxlZ2FsUmVhc29uczo0NTEsSW50ZXJuYWxTZXJ2ZXJFcnJvcjo1MDAsTm90SW1wbGVtZW50ZWQ6NTAxLEJhZEdhdGV3YXk6NTAyLFNlcnZpY2VVbmF2YWlsYWJsZTo1MDMsR2F0ZXdheVRpbWVvdXQ6NTA0LEh0dHBWZXJzaW9uTm90U3VwcG9ydGVkOjUwNSxWYXJpYW50QWxzb05lZ290aWF0ZXM6NTA2LEluc3VmZmljaWVudFN0b3JhZ2U6NTA3LExvb3BEZXRlY3RlZDo1MDgsTm90RXh0ZW5kZWQ6NTEwLE5ldHdvcmtBdXRoZW50aWNhdGlvblJlcXVpcmVkOjUxMX07T2JqZWN0LmVudHJpZXMoQnQpLmZvckVhY2goKFtBLHRdKT0+e0J0W3RdPUF9KTt2YXIgZ2U9QnQ7ZnVuY3Rpb24gaWUoQSl7bGV0IHQ9bmV3IGlBKEEpLGU9dihpQS5wcm90b3R5cGUucmVxdWVzdCx0KTtyZXR1cm4gaS5leHRlbmQoZSxpQS5wcm90b3R5cGUsdCx7YWxsT3duS2V5czohMH0pLGkuZXh0ZW5kKGUsdCxudWxsLHthbGxPd25LZXlzOiEwfSksZS5jcmVhdGU9ZnVuY3Rpb24ocil7cmV0dXJuIGllKGsoQSxyKSl9LGV9dmFyIGQ9aWUoWik7ZC5BeGlvcz1pQTtkLkNhbmNlbGVkRXJyb3I9YjtkLkNhbmNlbFRva2VuPW9lO2QuaXNDYW5jZWw9ckE7ZC5WRVJTSU9OPUdBO2QudG9Gb3JtRGF0YT1xO2QuQXhpb3NFcnJvcj11O2QuQ2FuY2VsPWQuQ2FuY2VsZWRFcnJvcjtkLmFsbD1mdW5jdGlvbih0KXtyZXR1cm4gUHJvbWlzZS5hbGwodCl9O2Quc3ByZWFkPXN0O2QuaXNBeGlvc0Vycm9yPUN0O2QubWVyZ2VDb25maWc9aztkLkF4aW9zSGVhZGVycz1tO2QuZm9ybVRvSlNPTj1BPT53QShpLmlzSFRNTEZvcm0oQSk/bmV3IEZvcm1EYXRhKEEpOkEpO2QuZ2V0QWRhcHRlcj1OQS5nZXRBZGFwdGVyO2QuSHR0cFN0YXR1c0NvZGU9Z2U7ZC5kZWZhdWx0PWQ7dmFyIExBPWQ7dmFye0F4aW9zOkVpLEF4aW9zRXJyb3I6Y2ksQ2FuY2VsZWRFcnJvcjpmaSxpc0NhbmNlbDpsaSxDYW5jZWxUb2tlbjp1aSxWRVJTSU9OOkRpLGFsbDpoaSxDYW5jZWw6ZGksaXNBeGlvc0Vycm9yOnlpLHNwcmVhZDptaSx0b0Zvcm1EYXRhOndpLEF4aW9zSGVhZGVyczpwaSxIdHRwU3RhdHVzQ29kZTpTaSxmb3JtVG9KU09OOkZpLGdldEFkYXB0ZXI6UmksbWVyZ2VDb25maWc6Tml9PUxBO3ZhciBuQSxZLFF0LGF0PXtlbnY6e2Vtc2NyaXB0ZW5fbm90aWZ5X21lbW9yeV9ncm93dGg6ZnVuY3Rpb24oQSl7UXQ9bmV3IFVpbnQ4QXJyYXkoWS5leHBvcnRzLm1lbW9yeS5idWZmZXIpfX19LEpBPWNsYXNze2luaXQoKXtyZXR1cm4gbkF8fCh0eXBlb2YgZmV0Y2g8InUiP25BPWZldGNoKCJkYXRhOmFwcGxpY2F0aW9uL3dhc207YmFzZTY0LCIrbmUpLnRoZW4odD0+dC5hcnJheUJ1ZmZlcigpKS50aGVuKHQ9PldlYkFzc2VtYmx5Lmluc3RhbnRpYXRlKHQsYXQpKS50aGVuKHRoaXMuX2luaXQpOm5BPVdlYkFzc2VtYmx5Lmluc3RhbnRpYXRlKEJ1ZmZlci5mcm9tKG5lLCJiYXNlNjQiKSxhdCkudGhlbih0aGlzLl9pbml0KSxuQSl9X2luaXQodCl7WT10Lmluc3RhbmNlLGF0LmVudi5lbXNjcmlwdGVuX25vdGlmeV9tZW1vcnlfZ3Jvd3RoKDApfWRlY29kZSh0LGU9MCl7aWYoIVkpdGhyb3cgbmV3IEVycm9yKCJaU1RERGVjb2RlcjogQXdhaXQgLmluaXQoKSBiZWZvcmUgZGVjb2RpbmcuIik7bGV0IEk9dC5ieXRlTGVuZ3RoLHI9WS5leHBvcnRzLm1hbGxvYyhJKTtRdC5zZXQodCxyKSxlPWV8fE51bWJlcihZLmV4cG9ydHMuWlNURF9maW5kRGVjb21wcmVzc2VkU2l6ZShyLEkpKTtsZXQgbz1ZLmV4cG9ydHMubWFsbG9jKGUpLGc9WS5leHBvcnRzLlpTVERfZGVjb21wcmVzcyhvLGUscixJKSxDPVF0LnNsaWNlKG8sbytnKTtyZXR1cm4gWS5leHBvcnRzLmZyZWUociksWS5leHBvcnRzLmZyZWUobyksQ319LG5lPSJBR0Z6YlFFQUFBQUJiZzVnQTM5L2Z3Ri9ZQUYvQVg5Z0FuOS9BR0FCZndCZ0JYOS9mMzkvQVg5Z0EzOS9md0JnQkg5L2YzOEJmMkFBQVg5Z0FuOS9BWDlnQjM5L2YzOS9mMzhCZjJBQ2YzOEJmbUFJZjM5L2YzOS9mMzhCZjJBRmYzOS9mMzhBWUE1L2YzOS9mMzkvZjM5L2YzOS9md0YvQWljQkEyVnVkaDlsYlhOamNtbHdkR1Z1WDI1dmRHbG1lVjl0WlcxdmNubGZaM0p2ZDNSb0FBTURJeUlIQUFBQkFRTUhBd0VBQ1FRQUJRRUlDQUVGQmdRRUJBTUdBQUFLQUFVTERBMEdCQVVCY0FFQkFRVUhBUUdBQW9DQUFnWUlBWDhCUVlDakJBc0hyZ0VMQm0xbGJXOXllUUlBQm0xaGJHeHZZd0FGQkdaeVpXVUFCZ3hhVTFSRVgybHpSWEp5YjNJQUVobGFVMVJFWDJacGJtUkVaV052YlhCeVpYTnpaV1JUYVhwbEFCd1BXbE5VUkY5a1pXTnZiWEJ5WlhOekFDSVpYMTlwYm1ScGNtVmpkRjltZFc1amRHbHZibDkwWVdKc1pRRUFFRjlmWlhKeWJtOWZiRzlqWVhScGIyNEFBUWx6ZEdGamExTmhkbVVBQnd4emRHRmphMUpsYzNSdmNtVUFDQXB6ZEdGamEwRnNiRzlqQUFrS2kvSUJJZ1VBUVlRZkN6TUJBWDhnQWdSQUlBQWhBd05BSUFNZ0FTMEFBRG9BQUNBRFFRRnFJUU1nQVVFQmFpRUJJQUpCQVdzaUFnMEFDd3NnQUFzcEFRRi9JQUlFUUNBQUlRTURRQ0FESUFFNkFBQWdBMEVCYWlFRElBSkJBV3NpQWcwQUN3c2dBQXRzQVFKL1FZQWZLQUlBSWdFZ0FFRUhha0Y0Y1NJQ2FpRUFBa0FnQWtFQUlBQWdBVTBiRFFBZ0FEOEFRUkIwU3dSQUlBQS9BRUVRZEd0Qi8vOERha0VRZGtBQVFYOUdCSDlCQUFWQkFCQUFRUUVMUlEwQkMwR0FIeUFBTmdJQUlBRVBDMEdFSDBFd05nSUFRWDhMdVNjQkMzOGpBRUVRYXlJS0pBQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFJQUJCOUFGTkJFQkJpQjhvQWdBaUJrRVFJQUJCQzJwQmVIRWdBRUVMU1JzaUJVRURkaUlBZGlJQlFRTnhCRUFDUUNBQlFYOXpRUUZ4SUFCcUlnSkJBM1FpQVVHd0gyb2lBQ0FCUWJnZmFpZ0NBQ0lCS0FJSUlnUkdCRUJCaUI4Z0JrRitJQUozY1RZQ0FBd0JDeUFFSUFBMkFnd2dBQ0FFTmdJSUN5QUJRUWhxSVFBZ0FTQUNRUU4wSWdKQkEzSTJBZ1FnQVNBQ2FpSUJJQUVvQWdSQkFYSTJBZ1FNRHdzZ0JVR1FIeWdDQUNJSFRRMEJJQUVFUUFKQVFRSWdBSFFpQWtFQUlBSnJjaUFCSUFCMGNXZ2lBVUVEZENJQVFiQWZhaUlDSUFCQnVCOXFLQUlBSWdBb0FnZ2lCRVlFUUVHSUh5QUdRWDRnQVhkeElnWTJBZ0FNQVFzZ0JDQUNOZ0lNSUFJZ0JEWUNDQXNnQUNBRlFRTnlOZ0lFSUFBZ0JXb2lDQ0FCUVFOMElnRWdCV3NpQkVFQmNqWUNCQ0FBSUFGcUlBUTJBZ0FnQndSQUlBZEJlSEZCc0I5cUlRRkJuQjhvQWdBaEFnSi9JQVpCQVNBSFFRTjJkQ0lEY1VVRVFFR0lIeUFESUFaeU5nSUFJQUVNQVFzZ0FTZ0NDQXNoQXlBQklBSTJBZ2dnQXlBQ05nSU1JQUlnQVRZQ0RDQUNJQU0yQWdnTElBQkJDR29oQUVHY0h5QUlOZ0lBUVpBZklBUTJBZ0FNRHd0QmpCOG9BZ0FpQzBVTkFTQUxhRUVDZEVHNElXb29BZ0FpQWlnQ0JFRjRjU0FGYXlFRElBSWhBUU5BQWtBZ0FTZ0NFQ0lBUlFSQUlBRW9BaFFpQUVVTkFRc2dBQ2dDQkVGNGNTQUZheUlCSUFNZ0FTQURTU0lCR3lFRElBQWdBaUFCR3lFQ0lBQWhBUXdCQ3dzZ0FpZ0NHQ0VKSUFJZ0FpZ0NEQ0lFUndSQVFaZ2ZLQUlBR2lBQ0tBSUlJZ0FnQkRZQ0RDQUVJQUEyQWdnTURnc2dBa0VVYWlJQktBSUFJZ0JGQkVBZ0FpZ0NFQ0lBUlEwRElBSkJFR29oQVFzRFFDQUJJUWdnQUNJRVFSUnFJZ0VvQWdBaUFBMEFJQVJCRUdvaEFTQUVLQUlRSWdBTkFBc2dDRUVBTmdJQURBMExRWDhoQlNBQVFiOS9TdzBBSUFCQkMyb2lBRUY0Y1NFRlFZd2ZLQUlBSWdoRkRRQkJBQ0FGYXlFREFrQUNRQUpBQW45QkFDQUZRWUFDU1EwQUdrRWZJQVZCLy8vL0Iwc05BQm9nQlVFbUlBQkJDSFpuSWdCcmRrRUJjU0FBUVFGMGEwRSthZ3NpQjBFQ2RFRzRJV29vQWdBaUFVVUVRRUVBSVFBTUFRdEJBQ0VBSUFWQkdTQUhRUUYyYTBFQUlBZEJIMGNiZENFQ0EwQUNRQ0FCS0FJRVFYaHhJQVZySWdZZ0EwOE5BQ0FCSVFRZ0JpSUREUUJCQUNFRElBRWhBQXdEQ3lBQUlBRW9BaFFpQmlBR0lBRWdBa0VkZGtFRWNXb29BaEFpQVVZYklBQWdCaHNoQUNBQ1FRRjBJUUlnQVEwQUN3c2dBQ0FFY2tVRVFFRUFJUVJCQWlBSGRDSUFRUUFnQUd0eUlBaHhJZ0JGRFFNZ0FHaEJBblJCdUNGcUtBSUFJUUFMSUFCRkRRRUxBMEFnQUNnQ0JFRjRjU0FGYXlJQ0lBTkpJUUVnQWlBRElBRWJJUU1nQUNBRUlBRWJJUVFnQUNnQ0VDSUJCSDhnQVFVZ0FDZ0NGQXNpQUEwQUN3c2dCRVVOQUNBRFFaQWZLQUlBSUFWclR3MEFJQVFvQWhnaEJ5QUVJQVFvQWd3aUFrY0VRRUdZSHlnQ0FCb2dCQ2dDQ0NJQUlBSTJBZ3dnQWlBQU5nSUlEQXdMSUFSQkZHb2lBU2dDQUNJQVJRUkFJQVFvQWhBaUFFVU5BeUFFUVJCcUlRRUxBMEFnQVNFR0lBQWlBa0VVYWlJQktBSUFJZ0FOQUNBQ1FSQnFJUUVnQWlnQ0VDSUFEUUFMSUFaQkFEWUNBQXdMQ3lBRlFaQWZLQUlBSWdSTkJFQkJuQjhvQWdBaEFBSkFJQVFnQldzaUFVRVFUd1JBSUFBZ0JXb2lBaUFCUVFGeU5nSUVJQUFnQkdvZ0FUWUNBQ0FBSUFWQkEzSTJBZ1FNQVFzZ0FDQUVRUU55TmdJRUlBQWdCR29pQVNBQktBSUVRUUZ5TmdJRVFRQWhBa0VBSVFFTFFaQWZJQUUyQWdCQm5COGdBallDQUNBQVFRaHFJUUFNRFFzZ0JVR1VIeWdDQUNJQ1NRUkFRWlFmSUFJZ0JXc2lBVFlDQUVHZ0gwR2dIeWdDQUNJQUlBVnFJZ0kyQWdBZ0FpQUJRUUZ5TmdJRUlBQWdCVUVEY2pZQ0JDQUFRUWhxSVFBTURRdEJBQ0VBSUFWQkwyb2lBd0ovUWVBaUtBSUFCRUJCNkNJb0FnQU1BUXRCN0NKQ2Z6Y0NBRUhrSWtLQW9JQ0FnSUFFTndJQVFlQWlJQXBCREdwQmNIRkIyS3JWcWdWek5nSUFRZlFpUVFBMkFnQkJ4Q0pCQURZQ0FFR0FJQXNpQVdvaUJrRUFJQUZySWdoeElnRWdCVTBOREVIQUlpZ0NBQ0lFQkVCQnVDSW9BZ0FpQnlBQmFpSUpJQWROSUFRZ0NVbHlEUTBMQWtCQnhDSXRBQUJCQkhGRkJFQUNRQUpBQWtBQ1FFR2dIeWdDQUNJRUJFQkJ5Q0loQUFOQUlBUWdBQ2dDQUNJSFR3UkFJQWNnQUNnQ0JHb2dCRXNOQXdzZ0FDZ0NDQ0lBRFFBTEMwRUFFQVFpQWtGL1JnMERJQUVoQmtIa0lpZ0NBQ0lBUVFGcklnUWdBbkVFUUNBQklBSnJJQUlnQkdwQkFDQUFhM0ZxSVFZTElBVWdCazhOQTBIQUlpZ0NBQ0lBQkVCQnVDSW9BZ0FpQkNBR2FpSUlJQVJOSUFBZ0NFbHlEUVFMSUFZUUJDSUFJQUpIRFFFTUJRc2dCaUFDYXlBSWNTSUdFQVFpQWlBQUtBSUFJQUFvQWdScVJnMEJJQUloQUFzZ0FFRi9SZzBCSUFWQk1Hb2dCazBFUUNBQUlRSU1CQXRCNkNJb0FnQWlBaUFESUFacmFrRUFJQUpyY1NJQ0VBUkJmMFlOQVNBQ0lBWnFJUVlnQUNFQ0RBTUxJQUpCZjBjTkFndEJ4Q0pCeENJb0FnQkJCSEkyQWdBTElBRVFCQ0lDUVg5R1FRQVFCQ0lBUVg5R2NpQUFJQUpOY2cwRklBQWdBbXNpQmlBRlFTaHFUUTBGQzBHNElrRzRJaWdDQUNBR2FpSUFOZ0lBUWJ3aUtBSUFJQUJKQkVCQnZDSWdBRFlDQUFzQ1FFR2dIeWdDQUNJREJFQkJ5Q0loQUFOQUlBSWdBQ2dDQUNJQklBQW9BZ1FpQkdwR0RRSWdBQ2dDQ0NJQURRQUxEQVFMUVpnZktBSUFJZ0JCQUNBQUlBSk5HMFVFUUVHWUh5QUNOZ0lBQzBFQUlRQkJ6Q0lnQmpZQ0FFSElJaUFDTmdJQVFhZ2ZRWDgyQWdCQnJCOUI0Q0lvQWdBMkFnQkIxQ0pCQURZQ0FBTkFJQUJCQTNRaUFVRzRIMm9nQVVHd0gyb2lCRFlDQUNBQlFid2ZhaUFFTmdJQUlBQkJBV29pQUVFZ1J3MEFDMEdVSHlBR1FTaHJJZ0JCZUNBQ2EwRUhjU0lCYXlJRU5nSUFRYUFmSUFFZ0Ftb2lBVFlDQUNBQklBUkJBWEkyQWdRZ0FDQUNha0VvTmdJRVFhUWZRZkFpS0FJQU5nSUFEQVFMSUFJZ0EwMGdBU0FEUzNJTkFpQUFLQUlNUVFoeERRSWdBQ0FFSUFacU5nSUVRYUFmSUFOQmVDQURhMEVIY1NJQWFpSUJOZ0lBUVpRZlFaUWZLQUlBSUFacUlnSWdBR3NpQURZQ0FDQUJJQUJCQVhJMkFnUWdBaUFEYWtFb05nSUVRYVFmUWZBaUtBSUFOZ0lBREFNTFFRQWhCQXdLQzBFQUlRSU1DQXRCbUI4b0FnQWdBa3NFUUVHWUh5QUNOZ0lBQ3lBQ0lBWnFJUUZCeUNJaEFBSkFBa0FDUUFOQUlBRWdBQ2dDQUVjRVFDQUFLQUlJSWdBTkFRd0NDd3NnQUMwQURFRUljVVVOQVF0QnlDSWhBQU5BSUFNZ0FDZ0NBQ0lCVHdSQUlBRWdBQ2dDQkdvaUJDQURTdzBEQ3lBQUtBSUlJUUFNQUFzQUN5QUFJQUkyQWdBZ0FDQUFLQUlFSUFacU5nSUVJQUpCZUNBQ2EwRUhjV29pQnlBRlFRTnlOZ0lFSUFGQmVDQUJhMEVIY1dvaUJpQUZJQWRxSWdWcklRQWdBeUFHUmdSQVFhQWZJQVUyQWdCQmxCOUJsQjhvQWdBZ0FHb2lBRFlDQUNBRklBQkJBWEkyQWdRTUNBdEJuQjhvQWdBZ0JrWUVRRUdjSHlBRk5nSUFRWkFmUVpBZktBSUFJQUJxSWdBMkFnQWdCU0FBUVFGeU5nSUVJQUFnQldvZ0FEWUNBQXdJQ3lBR0tBSUVJZ05CQTNGQkFVY05CaUFEUVhoeElRa2dBMEgvQVUwRVFDQUdLQUlNSWdFZ0JpZ0NDQ0lDUmdSQVFZZ2ZRWWdmS0FJQVFYNGdBMEVEZG5keE5nSUFEQWNMSUFJZ0FUWUNEQ0FCSUFJMkFnZ01CZ3NnQmlnQ0dDRUlJQVlnQmlnQ0RDSUNSd1JBSUFZb0FnZ2lBU0FDTmdJTUlBSWdBVFlDQ0F3RkN5QUdRUlJxSWdFb0FnQWlBMFVFUUNBR0tBSVFJZ05GRFFRZ0JrRVFhaUVCQ3dOQUlBRWhCQ0FESWdKQkZHb2lBU2dDQUNJRERRQWdBa0VRYWlFQklBSW9BaEFpQXcwQUN5QUVRUUEyQWdBTUJBdEJsQjhnQmtFb2F5SUFRWGdnQW10QkIzRWlBV3NpQ0RZQ0FFR2dIeUFCSUFKcUlnRTJBZ0FnQVNBSVFRRnlOZ0lFSUFBZ0FtcEJLRFlDQkVHa0gwSHdJaWdDQURZQ0FDQURJQVJCSnlBRWEwRUhjV3BCTDJzaUFDQUFJQU5CRUdwSkd5SUJRUnMyQWdRZ0FVSFFJaWtDQURjQ0VDQUJRY2dpS1FJQU53SUlRZEFpSUFGQkNHbzJBZ0JCekNJZ0JqWUNBRUhJSWlBQ05nSUFRZFFpUVFBMkFnQWdBVUVZYWlFQUEwQWdBRUVITmdJRUlBQkJDR29nQUVFRWFpRUFJQVJKRFFBTElBRWdBMFlOQUNBQklBRW9BZ1JCZm5FMkFnUWdBeUFCSUFOcklnSkJBWEkyQWdRZ0FTQUNOZ0lBSUFKQi93Rk5CRUFnQWtGNGNVR3dIMm9oQUFKL1FZZ2ZLQUlBSWdGQkFTQUNRUU4yZENJQ2NVVUVRRUdJSHlBQklBSnlOZ0lBSUFBTUFRc2dBQ2dDQ0FzaEFTQUFJQU0yQWdnZ0FTQUROZ0lNSUFNZ0FEWUNEQ0FESUFFMkFnZ01BUXRCSHlFQUlBSkIvLy8vQjAwRVFDQUNRU1lnQWtFSWRtY2lBR3QyUVFGeElBQkJBWFJyUVQ1cUlRQUxJQU1nQURZQ0hDQURRZ0EzQWhBZ0FFRUNkRUc0SVdvaEFRSkFBa0JCakI4b0FnQWlCRUVCSUFCMElnWnhSUVJBUVl3ZklBUWdCbkkyQWdBZ0FTQUROZ0lBREFFTElBSkJHU0FBUVFGMmEwRUFJQUJCSDBjYmRDRUFJQUVvQWdBaEJBTkFJQVFpQVNnQ0JFRjRjU0FDUmcwQ0lBQkJIWFloQkNBQVFRRjBJUUFnQVNBRVFRUnhhaUlHS0FJUUlnUU5BQXNnQmlBRE5nSVFDeUFESUFFMkFoZ2dBeUFETmdJTUlBTWdBellDQ0F3QkN5QUJLQUlJSWdBZ0F6WUNEQ0FCSUFNMkFnZ2dBMEVBTmdJWUlBTWdBVFlDRENBRElBQTJBZ2dMUVpRZktBSUFJZ0FnQlUwTkFFR1VIeUFBSUFWcklnRTJBZ0JCb0I5Qm9COG9BZ0FpQUNBRmFpSUNOZ0lBSUFJZ0FVRUJjallDQkNBQUlBVkJBM0kyQWdRZ0FFRUlhaUVBREFnTFFZUWZRVEEyQWdCQkFDRUFEQWNMUVFBaEFnc2dDRVVOQUFKQUlBWW9BaHdpQVVFQ2RFRzRJV29pQkNnQ0FDQUdSZ1JBSUFRZ0FqWUNBQ0FDRFFGQmpCOUJqQjhvQWdCQmZpQUJkM0UyQWdBTUFnc2dDRUVRUVJRZ0NDZ0NFQ0FHUmh0cUlBSTJBZ0FnQWtVTkFRc2dBaUFJTmdJWUlBWW9BaEFpQVFSQUlBSWdBVFlDRUNBQklBSTJBaGdMSUFZb0FoUWlBVVVOQUNBQ0lBRTJBaFFnQVNBQ05nSVlDeUFBSUFscUlRQWdCaUFKYWlJR0tBSUVJUU1MSUFZZ0EwRitjVFlDQkNBRklBQkJBWEkyQWdRZ0FDQUZhaUFBTmdJQUlBQkIvd0ZOQkVBZ0FFRjRjVUd3SDJvaEFRSi9RWWdmS0FJQUlnSkJBU0FBUVFOMmRDSUFjVVVFUUVHSUh5QUFJQUp5TmdJQUlBRU1BUXNnQVNnQ0NBc2hBQ0FCSUFVMkFnZ2dBQ0FGTmdJTUlBVWdBVFlDRENBRklBQTJBZ2dNQVF0Qkh5RURJQUJCLy8vL0IwMEVRQ0FBUVNZZ0FFRUlkbWNpQVd0MlFRRnhJQUZCQVhSclFUNXFJUU1MSUFVZ0F6WUNIQ0FGUWdBM0FoQWdBMEVDZEVHNElXb2hBUUpBQWtCQmpCOG9BZ0FpQWtFQklBTjBJZ1J4UlFSQVFZd2ZJQUlnQkhJMkFnQWdBU0FGTmdJQURBRUxJQUJCR1NBRFFRRjJhMEVBSUFOQkgwY2JkQ0VESUFFb0FnQWhBZ05BSUFJaUFTZ0NCRUY0Y1NBQVJnMENJQU5CSFhZaEFpQURRUUYwSVFNZ0FTQUNRUVJ4YWlJRUtBSVFJZ0lOQUFzZ0JDQUZOZ0lRQ3lBRklBRTJBaGdnQlNBRk5nSU1JQVVnQlRZQ0NBd0JDeUFCS0FJSUlnQWdCVFlDRENBQklBVTJBZ2dnQlVFQU5nSVlJQVVnQVRZQ0RDQUZJQUEyQWdnTElBZEJDR29oQUF3Q0N3SkFJQWRGRFFBQ1FDQUVLQUljSWdCQkFuUkJ1Q0ZxSWdFb0FnQWdCRVlFUUNBQklBSTJBZ0FnQWcwQlFZd2ZJQWhCZmlBQWQzRWlDRFlDQUF3Q0N5QUhRUkJCRkNBSEtBSVFJQVJHRzJvZ0FqWUNBQ0FDUlEwQkN5QUNJQWMyQWhnZ0JDZ0NFQ0lBQkVBZ0FpQUFOZ0lRSUFBZ0FqWUNHQXNnQkNnQ0ZDSUFSUTBBSUFJZ0FEWUNGQ0FBSUFJMkFoZ0xBa0FnQTBFUFRRUkFJQVFnQXlBRmFpSUFRUU55TmdJRUlBQWdCR29pQUNBQUtBSUVRUUZ5TmdJRURBRUxJQVFnQlVFRGNqWUNCQ0FFSUFWcUlnSWdBMEVCY2pZQ0JDQUNJQU5xSUFNMkFnQWdBMEgvQVUwRVFDQURRWGh4UWJBZmFpRUFBbjlCaUI4b0FnQWlBVUVCSUFOQkEzWjBJZ054UlFSQVFZZ2ZJQUVnQTNJMkFnQWdBQXdCQ3lBQUtBSUlDeUVCSUFBZ0FqWUNDQ0FCSUFJMkFnd2dBaUFBTmdJTUlBSWdBVFlDQ0F3QkMwRWZJUUFnQTBILy8vOEhUUVJBSUFOQkppQURRUWgyWnlJQWEzWkJBWEVnQUVFQmRHdEJQbW9oQUFzZ0FpQUFOZ0ljSUFKQ0FEY0NFQ0FBUVFKMFFiZ2hhaUVCQWtBQ1FDQUlRUUVnQUhRaUJuRkZCRUJCakI4Z0JpQUljallDQUNBQklBSTJBZ0FNQVFzZ0EwRVpJQUJCQVhaclFRQWdBRUVmUnh0MElRQWdBU2dDQUNFRkEwQWdCU0lCS0FJRVFYaHhJQU5HRFFJZ0FFRWRkaUVHSUFCQkFYUWhBQ0FCSUFaQkJIRnFJZ1lvQWhBaUJRMEFDeUFHSUFJMkFoQUxJQUlnQVRZQ0dDQUNJQUkyQWd3Z0FpQUNOZ0lJREFFTElBRW9BZ2dpQUNBQ05nSU1JQUVnQWpZQ0NDQUNRUUEyQWhnZ0FpQUJOZ0lNSUFJZ0FEWUNDQXNnQkVFSWFpRUFEQUVMQWtBZ0NVVU5BQUpBSUFJb0Fod2lBRUVDZEVHNElXb2lBU2dDQUNBQ1JnUkFJQUVnQkRZQ0FDQUVEUUZCakI4Z0MwRitJQUIzY1RZQ0FBd0NDeUFKUVJCQkZDQUpLQUlRSUFKR0cyb2dCRFlDQUNBRVJRMEJDeUFFSUFrMkFoZ2dBaWdDRUNJQUJFQWdCQ0FBTmdJUUlBQWdCRFlDR0FzZ0FpZ0NGQ0lBUlEwQUlBUWdBRFlDRkNBQUlBUTJBaGdMQWtBZ0EwRVBUUVJBSUFJZ0F5QUZhaUlBUVFOeU5nSUVJQUFnQW1vaUFDQUFLQUlFUVFGeU5nSUVEQUVMSUFJZ0JVRURjallDQkNBQ0lBVnFJZ1FnQTBFQmNqWUNCQ0FESUFScUlBTTJBZ0FnQndSQUlBZEJlSEZCc0I5cUlRQkJuQjhvQWdBaEFRSi9RUUVnQjBFRGRuUWlCU0FHY1VVRVFFR0lIeUFGSUFaeU5nSUFJQUFNQVFzZ0FDZ0NDQXNoQmlBQUlBRTJBZ2dnQmlBQk5nSU1JQUVnQURZQ0RDQUJJQVkyQWdnTFFad2ZJQVEyQWdCQmtCOGdBellDQUFzZ0FrRUlhaUVBQ3lBS1FSQnFKQUFnQUF2U0N3RUhmd0pBSUFCRkRRQWdBRUVJYXlJQ0lBQkJCR3NvQWdBaUFVRjRjU0lBYWlFRkFrQWdBVUVCY1EwQUlBRkJBM0ZGRFFFZ0FpQUNLQUlBSWdGcklnSkJtQjhvQWdCSkRRRWdBQ0FCYWlFQUFrQUNRRUdjSHlnQ0FDQUNSd1JBSUFGQi93Rk5CRUFnQVVFRGRpRUVJQUlvQWd3aUFTQUNLQUlJSWdOR0JFQkJpQjlCaUI4b0FnQkJmaUFFZDNFMkFnQU1CUXNnQXlBQk5nSU1JQUVnQXpZQ0NBd0VDeUFDS0FJWUlRWWdBaUFDS0FJTUlnRkhCRUFnQWlnQ0NDSURJQUUyQWd3Z0FTQUROZ0lJREFNTElBSkJGR29pQkNnQ0FDSURSUVJBSUFJb0FoQWlBMFVOQWlBQ1FSQnFJUVFMQTBBZ0JDRUhJQU1pQVVFVWFpSUVLQUlBSWdNTkFDQUJRUkJxSVFRZ0FTZ0NFQ0lERFFBTElBZEJBRFlDQUF3Q0N5QUZLQUlFSWdGQkEzRkJBMGNOQWtHUUh5QUFOZ0lBSUFVZ0FVRitjVFlDQkNBQ0lBQkJBWEkyQWdRZ0JTQUFOZ0lBRHd0QkFDRUJDeUFHUlEwQUFrQWdBaWdDSENJRFFRSjBRYmdoYWlJRUtBSUFJQUpHQkVBZ0JDQUJOZ0lBSUFFTkFVR01IMEdNSHlnQ0FFRitJQU4zY1RZQ0FBd0NDeUFHUVJCQkZDQUdLQUlRSUFKR0cyb2dBVFlDQUNBQlJRMEJDeUFCSUFZMkFoZ2dBaWdDRUNJREJFQWdBU0FETmdJUUlBTWdBVFlDR0FzZ0FpZ0NGQ0lEUlEwQUlBRWdBellDRkNBRElBRTJBaGdMSUFJZ0JVOE5BQ0FGS0FJRUlnRkJBWEZGRFFBQ1FBSkFBa0FDUUNBQlFRSnhSUVJBUWFBZktBSUFJQVZHQkVCQm9COGdBallDQUVHVUgwR1VIeWdDQUNBQWFpSUFOZ0lBSUFJZ0FFRUJjallDQkNBQ1Fad2ZLQUlBUncwR1FaQWZRUUEyQWdCQm5COUJBRFlDQUE4TFFad2ZLQUlBSUFWR0JFQkJuQjhnQWpZQ0FFR1FIMEdRSHlnQ0FDQUFhaUlBTmdJQUlBSWdBRUVCY2pZQ0JDQUFJQUpxSUFBMkFnQVBDeUFCUVhoeElBQnFJUUFnQVVIL0FVMEVRQ0FCUVFOMklRUWdCU2dDRENJQklBVW9BZ2dpQTBZRVFFR0lIMEdJSHlnQ0FFRitJQVIzY1RZQ0FBd0ZDeUFESUFFMkFnd2dBU0FETmdJSURBUUxJQVVvQWhnaEJpQUZJQVVvQWd3aUFVY0VRRUdZSHlnQ0FCb2dCU2dDQ0NJRElBRTJBZ3dnQVNBRE5nSUlEQU1MSUFWQkZHb2lCQ2dDQUNJRFJRUkFJQVVvQWhBaUEwVU5BaUFGUVJCcUlRUUxBMEFnQkNFSElBTWlBVUVVYWlJRUtBSUFJZ01OQUNBQlFSQnFJUVFnQVNnQ0VDSUREUUFMSUFkQkFEWUNBQXdDQ3lBRklBRkJmbkUyQWdRZ0FpQUFRUUZ5TmdJRUlBQWdBbW9nQURZQ0FBd0RDMEVBSVFFTElBWkZEUUFDUUNBRktBSWNJZ05CQW5SQnVDRnFJZ1FvQWdBZ0JVWUVRQ0FFSUFFMkFnQWdBUTBCUVl3ZlFZd2ZLQUlBUVg0Z0EzZHhOZ0lBREFJTElBWkJFRUVVSUFZb0FoQWdCVVliYWlBQk5nSUFJQUZGRFFFTElBRWdCallDR0NBRktBSVFJZ01FUUNBQklBTTJBaEFnQXlBQk5nSVlDeUFGS0FJVUlnTkZEUUFnQVNBRE5nSVVJQU1nQVRZQ0dBc2dBaUFBUVFGeU5nSUVJQUFnQW1vZ0FEWUNBQ0FDUVp3ZktBSUFSdzBBUVpBZklBQTJBZ0FQQ3lBQVFmOEJUUVJBSUFCQmVIRkJzQjlxSVFFQ2YwR0lIeWdDQUNJRFFRRWdBRUVEZG5RaUFIRkZCRUJCaUI4Z0FDQURjallDQUNBQkRBRUxJQUVvQWdnTElRQWdBU0FDTmdJSUlBQWdBallDRENBQ0lBRTJBZ3dnQWlBQU5nSUlEd3RCSHlFRElBQkIvLy8vQjAwRVFDQUFRU1lnQUVFSWRtY2lBV3QyUVFGeElBRkJBWFJyUVQ1cUlRTUxJQUlnQXpZQ0hDQUNRZ0EzQWhBZ0EwRUNkRUc0SVdvaEFRSkFBa0FDUUVHTUh5Z0NBQ0lFUVFFZ0EzUWlCM0ZGQkVCQmpCOGdCQ0FIY2pZQ0FDQUJJQUkyQWdBZ0FpQUJOZ0lZREFFTElBQkJHU0FEUVFGMmEwRUFJQU5CSDBjYmRDRURJQUVvQWdBaEFRTkFJQUVpQkNnQ0JFRjRjU0FBUmcwQ0lBTkJIWFloQVNBRFFRRjBJUU1nQkNBQlFRUnhhaUlIUVJCcUtBSUFJZ0VOQUFzZ0J5QUNOZ0lRSUFJZ0JEWUNHQXNnQWlBQ05nSU1JQUlnQWpZQ0NBd0JDeUFFS0FJSUlnQWdBallDRENBRUlBSTJBZ2dnQWtFQU5nSVlJQUlnQkRZQ0RDQUNJQUEyQWdnTFFhZ2ZRYWdmS0FJQVFRRnJJZ0JCZnlBQUd6WUNBQXNMQkFBakFBc0dBQ0FBSkFBTEVBQWpBQ0FBYTBGd2NTSUFKQUFnQUF0S0FRRi9JQUFnQVVrRVFDQUFJQUVnQWhBQ0R3c2dBZ1JBSUFBZ0Ftb2hBeUFCSUFKcUlRRURRQ0FEUVFGcklnTWdBVUVCYXlJQkxRQUFPZ0FBSUFKQkFXc2lBZzBBQ3dzZ0FBdjlEZ0lSZndGK0l3QkJNR3NpQnlRQVFiaC9JUWdDUUNBRlJRMEFJQVFzQUFBaUNVSC9BWEVoQ3dKQUlBbEJBRWdFUUNBTFFmNEFhMEVCZGlJR0lBVlBEUUpCYkNFSUlBdEIvd0JySWd0Qi93RkxEUUlnQkVFQmFpRUlRUUFoQlFOQUlBVWdDMDhFUUNBTElRZ2dCaUVMREFNRklBQWdCV29nQ0NBRlFRRjJhaUlFTFFBQVFRUjJPZ0FBSUFBZ0JVRUJjbW9nQkMwQUFFRVBjVG9BQUNBRlFRSnFJUVVNQVFzQUN3QUxJQVVnQzAwTkFTQUhRZjhCTmdJRUlBWWdCMEVFYWlBSFFRaHFJQVJCQVdvaURpQUxFQXdpQkVHSWYwc0VRQ0FFSVFnTUFndEJWQ0VJSUFjb0FnZ2lFRUVHU3cwQklBY29BZ1FpRVVFQmRDSUpRUUpxclVJQklCQ3RoaUlZUVFFZ0VIUWlEVUVCYWlJRnJVSUNobng4UWd0OFF2ei8vLy8vLy8vLy93Q0RRdVFDVmcwQlFWSWhDQ0FSUWY4QlN3MEJJQTFCZjNOQkFuUkI1QUpxclNBUlFRRnFJaFZCQVhTdElCaDhRZ2g4VkEwQklBc2dCR3NoRmlBRUlBNXFJUmNnQmtHQUJHb2lFaUFGUVFKMGFpSVJJQWxxUVFKcUlRNGdCa0dFQkdvaEUwR0FnQUlnRUhSQkVIWWhDVUVBSVFWQkFTRVBJQTFCQVdzaUZDRUtBMEFnQlNBVlJrVUVRQUpBSUFZZ0JVRUJkQ0lJYWk4QkFDSUVRZi8vQTBZRVFDQVRJQXBCQW5ScUlBVTZBQUlnQ2tFQmF5RUtRUUVoQkF3QkN5QVBRUUFnQ1NBRXdVb2JJUThMSUFnZ0VXb2dCRHNCQUNBRlFRRnFJUVVNQVFzTElBWWdEenNCZ2dRZ0JpQVFPd0dBQkFKQUlBb2dGRVlFUUNBTlFRTjJJUWhDQUNFWVFRQWhEd05BSUF3Z0ZVWUVRQ0FJSUExQkFYWnFRUU5xSWdsQkFYUWhDRUVBSVFSQkFDRUtBMEJCQUNFRklBb2dEVThOQkFOQUlBVkJBa1pGQkVBZ0V5QUZJQWxzSUFScUlCUnhRUUowYWlBT0lBVWdDbXBxTFFBQU9nQUNJQVZCQVdvaEJRd0JDd3NnQ2tFQ2FpRUtJQVFnQ0dvZ0ZIRWhCQXdBQ3dBRklBWWdERUVCZEdvdUFRQWhDU0FPSUE5cUlnUWdHRGNBQUVFSUlRVURRQ0FGSUFsT1JRUkFJQVFnQldvZ0dEY0FBQ0FGUVFocUlRVU1BUXNMSUJoQ2dZS0VpSkNnd0lBQmZDRVlJQXhCQVdvaERDQUpJQTlxSVE4TUFRc0FDd0FMSUExQkEzWWdEVUVCZG1wQkEyb2hDRUVBSVFVRFFDQU1JQlZHUlFSQVFRQWhDU0FHSUF4QkFYUnFMZ0VBSWdSQkFDQUVRUUJLR3lFRUEwQWdCQ0FKUmtVRVFDQVRJQVZCQW5ScUlBdzZBQUlEUUNBRklBaHFJQlJ4SWdVZ0Nrc05BQXNnQ1VFQmFpRUpEQUVMQ3lBTVFRRnFJUXdNQVFzTFFYOGhDQ0FGRFFJTElCQkJBV29oQ0VFQUlRVURRQ0FGSUExR1JRUkFJQkVnRXlBRlFRSjBhaUlPTFFBQ1FRRjBhaUlFSUFRdkFRQWlDVUVCYWpzQkFDQU9JQWdnQ1dkQllITnFJZ1E2QUFNZ0RpQUpJQVIwSUExck93RUFJQVZCQVdvaEJRd0JDd3NDUUFKQUlBWXZBWUlFQkVBZ0IwRWNhaUlFSUJjZ0ZoQU5JZ2hCaUg5TERRSWdCMEVVYWlBRUlCSVFEaUFIUVF4cUlBUWdFaEFPUVFBaEJRTkFJQWRCSEdvaUJCQVBJQVZCK3dGTGNnMENJQUFnQldvaUJpQUhRUlJxSUFRUUVEb0FBQ0FHSUFkQkRHb2dCQkFRT2dBQklBVkJBbkloQkNBSFFSeHFFQThFUUNBRUlRVU1Bd1VnQUNBRWFpQUhRUlJxSUFkQkhHb2lCQkFRT2dBQUlBWWdCMEVNYWlBRUVCQTZBQU1nQlVFRWFpRUZEQUVMQUFzQUN5QUhRUnhxSWdRZ0Z5QVdFQTBpQ0VHSWYwc05BU0FIUVJScUlBUWdFaEFPSUFkQkRHb2dCQ0FTRUE1QkFDRUZBMEFnQjBFY2FpSUVFQThnQlVIN0FVdHlSUVJBSUFBZ0JXb2lCaUFIUVJScUlBUVFFVG9BQUNBR0lBZEJER29nQkJBUk9nQUJJQVZCQW5JaEJDQUhRUnhxRUE4RVFDQUVJUVVGSUFBZ0JHb2dCMEVVYWlBSFFSeHFJZ1FRRVRvQUFDQUdJQWRCREdvZ0JCQVJPZ0FESUFWQkJHb2hCUXdDQ3dzTEFuOERRRUc2ZnlFSUlBVkIvUUZMRFFNZ0FDQUZhaUlHSUFkQkZHb2dCMEVjYWlJSkVCRTZBQUFnQmtFQmFpRUVJQWtRRDBFRFJnUkFJQWRCREdvaENFRUNEQUlMSUFWQi9BRkxEUU1nQmlBSFFReHFJQWRCSEdvaUJCQVJPZ0FCSUFWQkFtb2hCU0FFRUE5QkEwY05BQXNnQUNBRmFpRUVJQWRCRkdvaENFRURDeUFFSUFnZ0IwRWNhaEFST2dBQUlBWnFJQUJySVFnTUFRc0Nmd05BUWJwL0lRZ2dCVUg5QVVzTkFpQUFJQVZxSWdZZ0IwRVVhaUFIUVJ4cUlna1FFRG9BQUNBR1FRRnFJUVFnQ1JBUFFRTkdCRUFnQjBFTWFpRUlRUUlNQWdzZ0JVSDhBVXNOQWlBR0lBZEJER29nQjBFY2FpSUVFQkE2QUFFZ0JVRUNhaUVGSUFRUUQwRURSdzBBQ3lBQUlBVnFJUVFnQjBFVWFpRUlRUU1MSUFRZ0NDQUhRUnhxRUJBNkFBQWdCbW9nQUdzaENBc2dDRUdJZjBzTkFRc2dDQ0VFUVFBaEJTQUJRUUJCTkJBRElRbEJBQ0VLQTBBZ0JDQUZSd1JBSUFBZ0JXb2lCaTBBQUNJQlFRdExCRUJCYkNFSURBTUZJQWtnQVVFQ2RHb2lBU0FCS0FJQVFRRnFOZ0lBSUFWQkFXb2hCVUVCSUFZdEFBQjBRUUYxSUFwcUlRb01BZ3NBQ3d0QmJDRUlJQXBGRFFBZ0NtY2lCVUVmY3lJQlFRdExEUUFnQTBFZ0lBVnJOZ0lBUVFGQkFpQUJkQ0FLYXlJRFowRWZjeUlCZENBRFJ3MEFJQUFnQkdvZ0FVRUJhaUlBT2dBQUlBa2dBRUVDZEdvaUFDQUFLQUlBUVFGcU5nSUFJQWtvQWdRaUFFRUNTU0FBUVFGeGNnMEFJQUlnQkVFQmFqWUNBQ0FMUVFGcUlRZ0xJQWRCTUdva0FDQUlDNkFGQVF4L0l3QkJFR3NpRENRQUFuOGdCRUVIVFFSQUlBeENBRGNEQ0NBTVFRaHFJZ1VnQXlBRUVBSWFRV3dnQUNBQklBSWdCVUVJRUF3aUFDQUFJQVJMR3lBQUlBQkJpWDlKR3d3QkN5QUFRUUFnQVNnQ0FFRUJhaUlOUVFGMEVBTWhEMEZVSUFNb0FBQWlCa0VQY1NJQVFRcExEUUFhSUFJZ0FFRUZhallDQUNBRElBUnFJZ0pCQkdzaEJ5QUNRUWRySVFzZ0FFRUdhaUVPUVFRaEFpQUdRUVIySVFWQklDQUFkQ0lJUVFGeUlRbEJBQ0VBUVFFaEJpQURJUVFEUUFKQUlBWkJBWEZGQkVBRFFDQUZRWDl6UVlDQWdJQjRjbWdpQmtFWVNVVUVRQ0FBUVNScUlRQWdCQ0FMVFFSL0lBUkJBMm9GSUFRZ0MydEJBM1FnQW1wQkgzRWhBaUFIQ3lJRUtBQUFJQUoySVFVTUFRc0xJQUlnQmtFZWNTSUtha0VDYWlFQ0lBWkJBWFpCQTJ3Z0FHb2dCU0FLZGtFRGNXb2lBQ0FOVHcwQkFuOGdCQ0FMU3lBQ1FRTjJJQVJxSWdVZ0IwdHhSUVJBSUFKQkIzRWhBaUFGREFFTElBUWdCMnRCQTNRZ0FtcEJIM0VoQWlBSEN5SUVLQUFBSUFKMklRVUxJQVVnQ0VFQmEzRWlCaUFJUVFGMFFRRnJJZ29nQ1dzaUVFa0VmeUFPUVFGckJTQUZJQXB4SWdVZ0VFRUFJQVVnQ0U0YmF5RUdJQTRMSVFVZ0R5QUFRUUYwYWlBR1FRRnJJZ283QVFBZ0FFRUJhaUVBSUFJZ0JXb2hBaUFJUVFFZ0Jtc2dDaUFHUVFCS0d5QUphaUlKU2dSQUlBbEJBa2dOQVVFZ0lBbG5JZ1ZySVE1QkFTQUZRUjl6ZENFSUN5QUFJQTFQRFFBZ0NrRUFSeUVHQW44Z0JDQUxTeUFDUVFOMUlBUnFJZ1VnQjB0eFJRUkFJQUpCQjNFaEFpQUZEQUVMSUFJZ0JDQUhhMEVEZEdwQkgzRWhBaUFIQ3lJRUtBQUFJQUoySVFVTUFRc0xRV3dnQ1VFQlJ3MEFHa0ZRSUFBZ0RVc05BQnBCYkNBQ1FTQktEUUFhSUFFZ0FFRUJhellDQUNBRUlBSkJCMnBCQTNWcUlBTnJDeUFNUVJCcUpBQUw4Z0VCQVg4Z0FrVUVRQ0FBUWdBM0FnQWdBRUVBTmdJUUlBQkNBRGNDQ0VHNGZ3OExJQUFnQVRZQ0RDQUFJQUZCQkdvMkFoQWdBa0VFVHdSQUlBQWdBU0FDYWlJQlFRUnJJZ00yQWdnZ0FDQURLQUFBTmdJQUlBRkJBV3N0QUFBaUFRUkFJQUFnQVdkQkYyczJBZ1FnQWc4TElBQkJBRFlDQkVGL0R3c2dBQ0FCTmdJSUlBQWdBUzBBQUNJRE5nSUFBa0FDUUFKQUlBSkJBbXNPQWdFQUFnc2dBQ0FCTFFBQ1FSQjBJQU55SWdNMkFnQUxJQUFnQVMwQUFVRUlkQ0FEYWpZQ0FBc2dBU0FDYWtFQmF5MEFBQ0lCUlFSQUlBQkJBRFlDQkVGc0R3c2dBQ0FCWnlBQ1FRTjBhMEVKYWpZQ0JDQUNDMFFCQW44Z0FTQUNMd0VBSWdNZ0FTZ0NCR29pQkRZQ0JDQUFJQU5CQW5SQm9CMXFLQUlBSUFFb0FnQkJBQ0FFYTNaeE5nSUFJQUVRRHhvZ0FDQUNRUVJxTmdJRUM1OEJBUVIvUVFNaEFTQUFLQUlFSWdKQklFMEVRQ0FBS0FJSUlnRWdBQ2dDRUU4RVFDQUFJQUpCQjNFMkFnUWdBQ0FCSUFKQkEzWnJJZ0kyQWdnZ0FDQUNLQUFBTmdJQVFRQVBDeUFBS0FJTUlnTWdBVVlFUUVFQlFRSWdBa0VnU1JzUEN5QUFJQUVnQVNBRGF5QUNRUU4ySWdRZ0FTQUVheUFEU1NJQkd5SURheUlFTmdJSUlBQWdBaUFEUVFOMGF6WUNCQ0FBSUFRb0FBQTJBZ0FMSUFFTFNBRUVmeUFBS0FJRUlBQW9BZ0JCQW5ScUlnSXRBQUlnQWk4QkFDRUVJQUVnQVNnQ0JDSUZJQUl0QUFNaUFtbzJBZ1FnQUNBRUlBRW9BZ0FnQlhSQkFDQUNhM1pxTmdJQUMxSUJCSDhnQUNnQ0JDQUFLQUlBUVFKMGFpSUNMUUFDSUFJdkFRQWhCQ0FCSUFJdEFBTWlBaUFCS0FJRWFpSUZOZ0lFSUFBZ0JDQUNRUUowUWFBZGFpZ0NBQ0FCS0FJQVFRQWdCV3QyY1dvMkFnQUxDQUFnQUVHSWYwc0xHZ0FnQUFSQUlBRUVRQ0FDSUFBZ0FSRUNBQThMSUFBUUJnc0xwZ2dDRFg4QmZpTUFRUkJySWdra0FDQUpRUUEyQWd3Z0NVRUFOZ0lJQW44Q1FDQURRZWdKYWlBRElBbEJDR29nQ1VFTWFpQUJJQUlnQTBHQUFXb1FDeUlQUVloL1N3MEFRVlFnQ1NnQ0RDSUVJQUFvQWdBaUFVSC9BWEZCQVdwTERRRWFJQUJCQkdvaEN5QUFJQUZCLzRHQWVIRWdCRUVRZEVHQWdQd0hjWEkyQWdCQmZ5QUVJQVJCQUVnYlFRRnFJUUJCQUNFQklBa29BZ2doQlVFQUlRSURRQ0FBSUFKR0JFQWdCVUVEYXlFQlFRQWhBQU5BQWtCQkFDRUNJQUFnQVU0RVFBTkFJQUFnQlU0TkFpQURJQUFnQTJwQjZBbHFMUUFBUVFKMGFrRkFheUlCSUFFb0FnQWlBVUVCYWpZQ0FDQUJJQU5xSUFBNkFPZ0hJQUJCQVdvaEFBd0FDd0FGQTBBZ0FrRUVSa1VFUUNBRElBTWdBQ0FDYWlJSGFrSG9DV290QUFCQkFuUnFRVUJySWdnZ0NDZ0NBQ0lJUVFGcU5nSUFJQU1nQ0dvZ0J6b0E2QWNnQWtFQmFpRUNEQUVMQ3lBQVFRUnFJUUFNQWdzQUN3c2dCRUVCYWlFT0lBTW9BZ0FoQjBFQUlRQkJBU0VJQTBBZ0NDQU9SZzBESUE0Z0NHc2hCQ0FESUFoQkFuUnFLQUlBSVFVQ1FBSkFBa0FDUUFKQUFrQkJBU0FJZEVFQmRTSU5RUUZyRGdnQUFRUUNCQVFFQXdRTFFRQWhBaUFGUVFBZ0JVRUFTaHNoQmlBQUlRRURRQ0FDSUFaR0RRVWdBeUFDSUFkcWFpMEE2QWNoQ2lBTElBRkJBWFJxSWd3Z0JEb0FBU0FNSUFvNkFBQWdBa0VCYWlFQ0lBRkJBV29oQVF3QUN3QUxRUUFoQWlBRlFRQWdCVUVBU2hzaENpQUFJUUVEUUNBQ0lBcEdEUVFnQ3lBQlFRRjBhaUlHSUFNZ0FpQUhhbW90QU9nSElndzZBQUlnQmlBRU9nQUJJQVlnRERvQUFDQUdJQVE2QUFNZ0FrRUJhaUVDSUFGQkFtb2hBUXdBQ3dBTFFRQWhBaUFGUVFBZ0JVRUFTaHNoQmlBRVFRaDBRWUQrQTNFaEJDQUFJUUVEUUNBQ0lBWkdEUU1nQ3lBQlFRRjBhaUFFSUFNZ0FpQUhhbW90QU9nSGNxMUNnWUNFZ0pDQXdBQitOd0FBSUFKQkFXb2hBaUFCUVFScUlRRU1BQXNBQzBFQUlRSWdCVUVBSUFWQkFFb2JJUVlnQkVFSWRFR0EvZ054SVFRZ0FDRUJBMEFnQWlBR1JnMENJQXNnQVVFQmRHb2lDaUFFSUFNZ0FpQUhhbW90QU9nSGNxMUNnWUNFZ0pDQXdBQitJaEUzQUFnZ0NpQVJOd0FBSUFKQkFXb2hBaUFCUVFocUlRRU1BQXNBQzBFQUlRRWdCVUVBSUFWQkFFb2JJUW9nQkVFSWRFR0EvZ054SVF3Z0FDRUVBMEFnQVNBS1JnMEJJQXNnQkVFQmRHb2hFQ0FNSUFNZ0FTQUhhbW90QU9nSGNxMUNnWUNFZ0pDQXdBQitJUkZCQUNFQ0EwQWdBaUFOVGtVRVFDQVFJQUpCQVhScUlnWWdFVGNBR0NBR0lCRTNBQkFnQmlBUk53QUlJQVlnRVRjQUFDQUNRUkJxSVFJTUFRc0xJQUZCQVdvaEFTQUVJQTFxSVFRTUFBc0FDeUFJUVFGcUlRZ2dCU0FIYWlFSElBVWdEV3dnQUdvaEFBd0FDd0FGSUFNZ0FrRUNkR29pQjBGQWF5QUJOZ0lBSUFKQkFXb2hBaUFIS0FJQUlBRnFJUUVNQVFzQUN3QUxJQThMSUFsQkVHb2tBQXZ5QWdFR2Z5TUFRU0JySWdVa0FDQUVLQUlBSVFZZ0JVRU1haUFDSUFNUURTSURRWWgvVFFSQUlBUkJCR29oQWlBQUlBRnFJZ2xCQTJzaEJFRUFJQVpCRUhaclFSOXhJUU1EUUNBRlFReHFFQThnQUNBRVQzSkZCRUFnQWlBRktBSU1JZ1lnQlNnQ0VDSUhkQ0FEZGtFQmRHb2lDQzBBQVNFS0lBQWdDQzBBQURvQUFDQUNJQVlnQnlBS2FpSUdkQ0FEZGtFQmRHb2lCeTBBQUNFSUlBVWdCaUFITFFBQmFqWUNFQ0FBSUFnNkFBRWdBRUVDYWlFQURBRUxDd05BSUFWQkRHb1FEeUVISUFVb0Fnd2hCaUFGS0FJUUlRUWdBQ0FKVHlBSGNrVUVRQ0FDSUFZZ0JIUWdBM1pCQVhScUlnWXRBQUFoQnlBRklBUWdCaTBBQVdvMkFoQWdBQ0FIT2dBQUlBQkJBV29oQUF3QkN3c0RRQ0FBSUFsUFJRUkFJQUlnQmlBRWRDQURka0VCZEdvaUJ5MEFBU0VJSUFBZ0J5MEFBRG9BQUNBQVFRRnFJUUFnQkNBSWFpRUVEQUVMQzBGc1FXd2dBU0FGS0FJVUlBVW9BaGhIR3lBRVFTQkhHeUVEQ3lBRlFTQnFKQUFnQXd2UEZBRWpmeU1BUWRBQWF5SUZKQUJCYkNFSkFrQWdBMEVLU1EwQUFrQWdBeUFDTHdBRUlnY2dBaThBQUNJSUlBSXZBQUlpRFdwcVFRWnFJZ3hKRFFBZ0JDOEJBaUVHSUFWQlBHb2dBa0VHYWlJQ0lBZ1FEU0lKUVloL1N3MEJJQVZCS0dvZ0FpQUlhaUlDSUEwUURTSUpRWWgvU3cwQklBVkJGR29nQWlBTmFpSUNJQWNRRFNJSlFZaC9TdzBCSUFVZ0FpQUhhaUFESUF4ckVBMGlDVUdJZjBzTkFTQUVRUVJxSVFvZ0FDQUJhaUlmUVFOcklTQkJBQ0FHYTBFZmNTRUxJQVVvQWdnaEVTQUZLQUljSVJJZ0JTZ0NNQ0VUSUFVb0FrUWhGQ0FGS0FJRUlRa2dCU2dDR0NFTklBVW9BaXdoRENBRktBSkFJUVlnQlNnQ0VDRWhJQVVvQWlRaElpQUZLQUk0SVNNZ0JTZ0NUQ0VrSUFVb0FnQWhGU0FGS0FJVUlSWWdCU2dDS0NFWElBVW9BandoR0VFQklROGdBQ0FCUVFOcVFRSjJJZ1JxSWdNZ0JHb2lBaUFFYWlJWklRUWdBaUVJSUFNaEJ3TkFJQTlCQVhGRklBUWdJRTl5UlFSQUlBQWdDaUFZSUFaMElBdDJRUUowYWlJT0x3RUFPd0FBSUE0dEFBSWhHaUFPTFFBRElSQWdCeUFLSUJjZ0RIUWdDM1pCQW5ScUlnNHZBUUE3QUFBZ0RpMEFBaUViSUE0dEFBTWhEeUFJSUFvZ0ZpQU5kQ0FMZGtFQ2RHb2lEaThCQURzQUFDQU9MUUFDSVJ3Z0RpMEFBeUVkSUFRZ0NpQVZJQWwwSUF0MlFRSjBhaUlPTHdFQU93QUFJQTR0QUFJaEhpQU9MUUFESVE0Z0FDQVFhaUlsSUFvZ0dDQUdJQnBxSWdaMElBdDJRUUowYWlJUUx3RUFPd0FBSUJBdEFBSWdFQzBBQXlFbUlBY2dEMm9pSnlBS0lCY2dEQ0FiYWlJYWRDQUxka0VDZEdvaUJ5OEJBRHNBQUNBSExRQUNJUXdnQnkwQUF5RVFJQWdnSFdvaUd5QUtJQllnRFNBY2FpSVBkQ0FMZGtFQ2RHb2lDQzhCQURzQUFDQUlMUUFDSVEwZ0NDMEFBeUVjSUFRZ0Rtb2lIU0FLSUJVZ0NTQWVhaUlPZENBTGRrRUNkR29pQ1M4QkFEc0FBQ0FHYWlFQVFRTWhCd0ovSUJRZ0pFa0VRQ0FBSVFaQkF3d0JDeUFBUVFkeElRWWdGQ0FBUVFOMmF5SVVLQUFBSVJoQkFBc2dDUzBBQXlFZUlBa3RBQUloQ0NBTUlCcHFJUUFnRXlBalNRUi9JQUFGSUJNZ0FFRURkbXNpRXlnQUFDRVhRUUFoQnlBQVFRZHhDeUVNSUEwZ0Qyb2hBQ0FIY2lFSlFRTWhEd0ovSUJJZ0lra0VRQ0FBSVExQkF3d0JDeUFBUVFkeElRMGdFaUFBUVFOMmF5SVNLQUFBSVJaQkFBc2dDQ0FPYWlFQUlBbHlJQkVnSVVrRWZ5QUFCU0FSSUFCQkEzWnJJaEVvQUFBaEZVRUFJUThnQUVFSGNRc2hDU0FsSUNacUlRQWdFQ0FuYWlFSElCc2dIR29oQ0NBZElCNXFJUVFnRDNKRklROE1BUXNMSUFVZ0REWUNMQ0FGSUFZMkFrQWdCU0FOTmdJWUlBVWdDVFlDQkNBRklCUTJBa1FnQlNBVE5nSXdJQVVnRWpZQ0hDQUZJQkUyQWdnZ0JTQVlOZ0k4SUFVZ0Z6WUNLQ0FGSUJZMkFoUWdCU0FWTmdJQUlBSWdCMGtnQUNBRFMzSU5BRUZzSVFrZ0NDQVpTdzBCSUFOQkEyc2hDUU5BSUFWQlBHb1FEMFVnQUNBSlNYRUVRQ0FBSUFvZ0JTZ0NQQ0lOSUFVb0FrQWlESFFnQzNaQkFuUnFJZzR2QVFBN0FBQWdBQ0FPTFFBRGFpSUdJQW9nRFNBTUlBNHRBQUpxSWdCMElBdDJRUUowYWlJTUx3RUFPd0FBSUFVZ0FDQU1MUUFDYWpZQ1FDQUdJQXd0QUFOcUlRQU1BUVVnQTBFQ2F5RU1BMEFnQlVFOGFoQVBJUVlnQlNnQ1BDRU5JQVVvQWtBaENTQUFJQXhMSUFaeVJRUkFJQUFnQ2lBTklBbDBJQXQyUVFKMGFpSUdMd0VBT3dBQUlBVWdDU0FHTFFBQ2FqWUNRQ0FBSUFZdEFBTnFJUUFNQVFzTEEwQWdBQ0FNUzBVRVFDQUFJQW9nRFNBSmRDQUxka0VDZEdvaUJpOEJBRHNBQUNBQUlBWXRBQU5xSVFBZ0NTQUdMUUFDYWlFSkRBRUxDd0pBSUFBZ0EwOE5BQ0FBSUFvZ0RTQUpkQ0FMZGlJQVFRSjBhaUlETFFBQU9nQUFJQU10QUFOQkFVWUVRQ0FKSUFNdEFBSnFJUWtNQVFzZ0NVRWZTdzBBUVNBZ0NTQUtJQUJCQW5ScUxRQUNhaUlBSUFCQklFOGJJUWtMSUFKQkEyc2hEQU5BSUFWQktHb1FEMFVnQnlBTVNYRUVRQ0FISUFvZ0JTZ0NLQ0lHSUFVb0Fpd2lBSFFnQzNaQkFuUnFJZzB2QVFBN0FBQWdCeUFOTFFBRGFpSURJQW9nQmlBQUlBMHRBQUpxSWdCMElBdDJRUUowYWlJR0x3RUFPd0FBSUFVZ0FDQUdMUUFDYWpZQ0xDQURJQVl0QUFOcUlRY01BUVVnQWtFQ2F5RUdBMEFnQlVFb2FoQVBJUU1nQlNnQ0tDRU1JQVVvQWl3aEFDQUdJQWRKSUFOeVJRUkFJQWNnQ2lBTUlBQjBJQXQyUVFKMGFpSURMd0VBT3dBQUlBVWdBQ0FETFFBQ2FqWUNMQ0FISUFNdEFBTnFJUWNNQVFzTEEwQWdCaUFIU1VVRVFDQUhJQW9nRENBQWRDQUxka0VDZEdvaUF5OEJBRHNBQUNBSElBTXRBQU5xSVFjZ0FDQURMUUFDYWlFQURBRUxDd0pBSUFJZ0IwME5BQ0FISUFvZ0RDQUFkQ0FMZGlJQ1FRSjBhaUlETFFBQU9nQUFJQU10QUFOQkFVWUVRQ0FBSUFNdEFBSnFJUUFNQVFzZ0FFRWZTdzBBUVNBZ0FDQUtJQUpCQW5ScUxRQUNhaUlBSUFCQklFOGJJUUFMSUJsQkEyc2hEQU5BSUFWQkZHb1FEMFVnQ0NBTVNYRUVRQ0FJSUFvZ0JTZ0NGQ0lHSUFVb0FoZ2lBblFnQzNaQkFuUnFJZzB2QVFBN0FBQWdDQ0FOTFFBRGFpSURJQW9nQmlBQ0lBMHRBQUpxSWdKMElBdDJRUUowYWlJR0x3RUFPd0FBSUFVZ0FpQUdMUUFDYWpZQ0dDQURJQVl0QUFOcUlRZ01BUVVnR1VFQ2F5RURBMEFnQlVFVWFoQVBJUUlnQlNnQ0ZDRUdJQVVvQWhnaEJ5QURJQWhKSUFKeVJRUkFJQWdnQ2lBR0lBZDBJQXQyUVFKMGFpSUNMd0VBT3dBQUlBVWdCeUFDTFFBQ2FqWUNHQ0FJSUFJdEFBTnFJUWdNQVFzTEEwQWdBeUFJU1VVRVFDQUlJQW9nQmlBSGRDQUxka0VDZEdvaUFpOEJBRHNBQUNBSUlBSXRBQU5xSVFnZ0J5QUNMUUFDYWlFSERBRUxDd0pBSUFnZ0dVOE5BQ0FJSUFvZ0JpQUhkQ0FMZGlJQ1FRSjBhaUlETFFBQU9nQUFJQU10QUFOQkFVWUVRQ0FISUFNdEFBSnFJUWNNQVFzZ0IwRWZTdzBBUVNBZ0J5QUtJQUpCQW5ScUxRQUNhaUlDSUFKQklFOGJJUWNMQTBBZ0JSQVBSU0FFSUNCSmNRUkFJQVFnQ2lBRktBSUFJZ1lnQlNnQ0JDSUNkQ0FMZGtFQ2RHb2lEQzhCQURzQUFDQUVJQXd0QUFOcUlnTWdDaUFHSUFJZ0RDMEFBbW9pQW5RZ0MzWkJBblJxSWdRdkFRQTdBQUFnQlNBQ0lBUXRBQUpxTmdJRUlBTWdCQzBBQTJvaEJBd0JCU0FmUVFKcklRTURRQ0FGRUE4aEFpQUZLQUlBSVFZZ0JTZ0NCQ0VJSUFNZ0JFa2dBbkpGQkVBZ0JDQUtJQVlnQ0hRZ0MzWkJBblJxSWdJdkFRQTdBQUFnQlNBSUlBSXRBQUpxTmdJRUlBUWdBaTBBQTJvaEJBd0JDd3NEUUNBRElBUkpSUVJBSUFRZ0NpQUdJQWgwSUF0MlFRSjBhaUlDTHdFQU93QUFJQVFnQWkwQUEyb2hCQ0FJSUFJdEFBSnFJUWdNQVFzTEFrQWdCQ0FmVHcwQUlBUWdDaUFHSUFoMElBdDJJZ0pCQW5ScUlnTXRBQUE2QUFBZ0F5MEFBMEVCUmdSQUlBZ2dBeTBBQW1vaENBd0JDeUFJUVI5TERRQkJJQ0FJSUFvZ0FrRUNkR290QUFKcUlnSWdBa0VnVHhzaENBdEJiRUZzUVd4QmJFRnNRV3hCYkVGc0lBRWdDRUVnUnhzZ0JTZ0NDQ0FGS0FJTVJ4c2dCMEVnUnhzZ0JTZ0NIQ0FGS0FJZ1J4c2dBRUVnUnhzZ0JTZ0NNQ0FGS0FJMFJ4c2dDVUVnUnhzZ0JTZ0NSQ0FGS0FKSVJ4c2hDUXdKQ3dBTEFBc0FDd0FMQUFzQUN3QUxBQXRCYkNFSkN5QUZRZEFBYWlRQUlBa0w3QkFCSG44akFFSFFBR3NpQlNRQVFXd2hDUUpBSUFOQkNra05BQUpBSUFNZ0FpOEFCQ0lHSUFJdkFBQWlCeUFDTHdBQ0lnaHFha0VHYWlJT1NRMEFJQVF2QVFJaER5QUZRVHhxSUFKQkJtb2lBaUFIRUEwaUNVR0lmMHNOQVNBRlFTaHFJQUlnQjJvaUFpQUlFQTBpQ1VHSWYwc05BU0FGUVJScUlBSWdDR29pQWlBR0VBMGlDVUdJZjBzTkFTQUZJQUlnQm1vZ0F5QU9heEFOSWdsQmlIOUxEUUVnQkVFRWFpRUtJQUFnQVdvaUhFRURheUVkUVFBZ0QydEJIM0VoQ3lBRktBSUlJUkVnQlNnQ0hDRVNJQVVvQWpBaEV5QUZLQUpFSVJRZ0JTZ0NCQ0VKSUFVb0FoZ2hCaUFGS0FJc0lRY2dCU2dDUUNFSUlBVW9BaEFoSGlBRktBSWtJUjhnQlNnQ09DRWdJQVVvQWt3aElTQUZLQUlBSVJVZ0JTZ0NGQ0VXSUFVb0FpZ2hGeUFGS0FJOElSaEJBU0VOSUFBZ0FVRURha0VDZGlJQ2FpSU9JQUpxSWc4Z0Ftb2lHU0VFSUE4aEFpQU9JUU1EUUNBTlJTQUVJQjFQY2tVRVFDQUtJQmdnQ0hRZ0MzWkJBWFJxSWd3dEFBRWhEU0FBSUF3dEFBQTZBQUFnQ2lBWElBZDBJQXQyUVFGMGFpSU1MUUFCSVJBZ0F5QU1MUUFBT2dBQUlBb2dGaUFHZENBTGRrRUJkR29pREMwQUFTRWFJQUlnREMwQUFEb0FBQ0FLSUJVZ0NYUWdDM1pCQVhScUlnd3RBQUVoR3lBRUlBd3RBQUE2QUFBZ0NpQVlJQWdnRFdvaUNIUWdDM1pCQVhScUlnd3RBQUVoRFNBQUlBd3RBQUE2QUFFZ0NpQVhJQWNnRUdvaUIzUWdDM1pCQVhScUlnd3RBQUVoRUNBRElBd3RBQUE2QUFFZ0NpQVdJQVlnR21vaURIUWdDM1pCQVhScUlnWXRBQUVoR2lBQ0lBWXRBQUE2QUFFZ0NpQVZJQWtnRzJvaUczUWdDM1pCQVhScUlna3RBQUVoSWlBRUlBa3RBQUE2QUFFZ0NDQU5haUVHUVFNaENRSi9JQlFnSVVrRVFFRURJUTBnQmd3QkN5QVVJQVpCQTNackloUW9BQUFoR0VFQUlRMGdCa0VIY1FzaENDQUhJQkJxSVFZZ0V5QWdTUVIvSUFZRklCTWdCa0VEZG1zaUV5Z0FBQ0VYUVFBaENTQUdRUWR4Q3lFSElBd2dHbW9oRENBSklBMXlJUkJCQXlFTkFuOGdFaUFmU1FSQUlBd2hCa0VEREFFTElBeEJCM0VoQmlBU0lBeEJBM1pySWhJb0FBQWhGa0VBQ3lBYklDSnFJUXdnRUhJaEVDQVJJQjVKQkg4Z0RBVWdFU0FNUVFOMmF5SVJLQUFBSVJWQkFDRU5JQXhCQjNFTElRa2dCRUVDYWlFRUlBSkJBbW9oQWlBRFFRSnFJUU1nQUVFQ2FpRUFJQTBnRUhKRklRME1BUXNMSUFVZ0J6WUNMQ0FGSUFnMkFrQWdCU0FHTmdJWUlBVWdDVFlDQkNBRklCUTJBa1FnQlNBVE5nSXdJQVVnRWpZQ0hDQUZJQkUyQWdnZ0JTQVlOZ0k4SUFVZ0Z6WUNLQ0FGSUJZMkFoUWdCU0FWTmdJQUlBQWdEa3NnQXlBUFMzSU5BRUZzSVFrZ0FpQVpTdzBCSUE1QkEyc2hDUU5BSUFWQlBHb1FEeUFBSUFsUGNrVUVRQ0FLSUFVb0Fqd2lCaUFGS0FKQUlnZDBJQXQyUVFGMGFpSUlMUUFCSVF3Z0FDQUlMUUFBT2dBQUlBb2dCaUFISUF4cUlnWjBJQXQyUVFGMGFpSUhMUUFBSVFnZ0JTQUdJQWN0QUFGcU5nSkFJQUFnQ0RvQUFTQUFRUUpxSVFBTUFRc0xBMEFnQlVFOGFoQVBJUWNnQlNnQ1BDRUdJQVVvQWtBaENTQUFJQTVQSUFkeVJRUkFJQW9nQmlBSmRDQUxka0VCZEdvaUJpMEFBQ0VISUFVZ0NTQUdMUUFCYWpZQ1FDQUFJQWM2QUFBZ0FFRUJhaUVBREFFTEN3TkFJQUFnRGs5RkJFQWdDaUFHSUFsMElBdDJRUUYwYWlJSExRQUJJQUFnQnkwQUFEb0FBQ0FBUVFGcUlRQWdDV29oQ1F3QkN3c2dEMEVEYXlFQUEwQWdCVUVvYWhBUElBQWdBMDF5UlFSQUlBb2dCU2dDS0NJR0lBVW9BaXdpQjNRZ0MzWkJBWFJxSWdndEFBRWhEaUFESUFndEFBQTZBQUFnQ2lBR0lBY2dEbW9pQm5RZ0MzWkJBWFJxSWdjdEFBQWhDQ0FGSUFZZ0J5MEFBV28yQWl3Z0F5QUlPZ0FCSUFOQkFtb2hBd3dCQ3dzRFFDQUZRU2hxRUE4aEJ5QUZLQUlvSVFZZ0JTZ0NMQ0VBSUFNZ0QwOGdCM0pGQkVBZ0NpQUdJQUIwSUF0MlFRRjBhaUlHTFFBQUlRY2dCU0FBSUFZdEFBRnFOZ0lzSUFNZ0J6b0FBQ0FEUVFGcUlRTU1BUXNMQTBBZ0F5QVBUMFVFUUNBS0lBWWdBSFFnQzNaQkFYUnFJZ2N0QUFFaENDQURJQWN0QUFBNkFBQWdBMEVCYWlFRElBQWdDR29oQUF3QkN3c2dHVUVEYXlFREEwQWdCVUVVYWhBUElBSWdBMDl5UlFSQUlBb2dCU2dDRkNJR0lBVW9BaGdpQjNRZ0MzWkJBWFJxSWdndEFBRWhEaUFDSUFndEFBQTZBQUFnQ2lBR0lBY2dEbW9pQm5RZ0MzWkJBWFJxSWdjdEFBQWhDQ0FGSUFZZ0J5MEFBV28yQWhnZ0FpQUlPZ0FCSUFKQkFtb2hBZ3dCQ3dzRFFDQUZRUlJxRUE4aEJ5QUZLQUlVSVFZZ0JTZ0NHQ0VESUFJZ0dVOGdCM0pGQkVBZ0NpQUdJQU4wSUF0MlFRRjBhaUlHTFFBQUlRY2dCU0FESUFZdEFBRnFOZ0lZSUFJZ0J6b0FBQ0FDUVFGcUlRSU1BUXNMQTBBZ0FpQVpUMFVFUUNBS0lBWWdBM1FnQzNaQkFYUnFJZ2N0QUFFaENDQUNJQWN0QUFBNkFBQWdBa0VCYWlFQ0lBTWdDR29oQXd3QkN3c0RRQ0FGRUE4Z0JDQWRUM0pGQkVBZ0NpQUZLQUlBSWdJZ0JTZ0NCQ0lHZENBTGRrRUJkR29pQnkwQUFTRUlJQVFnQnkwQUFEb0FBQ0FLSUFJZ0JpQUlhaUlDZENBTGRrRUJkR29pQmkwQUFDRUhJQVVnQWlBR0xRQUJhallDQkNBRUlBYzZBQUVnQkVFQ2FpRUVEQUVMQ3dOQUlBVVFEeUVISUFVb0FnQWhCaUFGS0FJRUlRSWdCQ0FjVHlBSGNrVUVRQ0FLSUFZZ0FuUWdDM1pCQVhScUlnWXRBQUFoQnlBRklBSWdCaTBBQVdvMkFnUWdCQ0FIT2dBQUlBUkJBV29oQkF3QkN3c0RRQ0FFSUJ4UFJRUkFJQW9nQmlBQ2RDQUxka0VCZEdvaUJ5MEFBU0VJSUFRZ0J5MEFBRG9BQUNBRVFRRnFJUVFnQWlBSWFpRUNEQUVMQzBGc1FXeEJiRUZzUVd4QmJFRnNRV3dnQVNBQ1FTQkhHeUFGS0FJSUlBVW9BZ3hIR3lBRFFTQkhHeUFGS0FJY0lBVW9BaUJIR3lBQVFTQkhHeUFGS0FJd0lBVW9BalJIR3lBSlFTQkhHeUFGS0FKRUlBVW9Ba2hIR3lFSkRBRUxRV3doQ1FzZ0JVSFFBR29rQUNBSkMxZ0JBMzhDUUNBQUtBS1E2d0VpQVVVTkFDQUJLQUlBSUFGQnROVUJhaWdDQUNJQ0lBRkJ1TlVCYWlnQ0FDSURFQk1nQWdSQUlBTWdBU0FDRVFJQURBRUxJQUVRQmdzZ0FFRUFOZ0tnNndFZ0FFSUFOd09RNndFTDZRTUNCSDhDZmlBQVFRQkJLQkFESVFRZ0FrRUJRUVVnQXhzaUFFa0VRQ0FBRHdzZ0FVVUVRRUYvRHd0QkFTRUdBa0FDUUNBRFFRRkdEUUFnQXlFR0lBRW9BQUFpQlVHbzZyNXBSZzBBUVhZaEF5QUZRWEJ4UWREVXRNSUJSdzBCUVFnaEF5QUNRUWhKRFFFZ0FUVUFCQ0VJSUFSQkFUWUNGQ0FFSUFnM0F3QkJBQThMSUFFZ0FpQUdFQm9pQXlBQ1N3MEFJQVFnQXpZQ0dFRnlJUU1nQUNBQmFpSUZRUUZyTFFBQUlnSkJDSEVOQUNBQ1FTQnhJZ1pGQkVCQmNDRURJQVV0QUFBaUJVR25BVXNOQVNBRlFRZHhyVUlCSUFWQkEzWkJDbXF0aGlJSVFnT0lmaUFJZkNFSklBQkJBV29oQUFzZ0FrRUdkaUVGSUFKQkFuWkJBQ0VEQWtBQ1FBSkFBa0FnQWtFRGNVRUJhdzREQUFFQ0F3c2dBQ0FCYWkwQUFDRURJQUJCQVdvaEFBd0NDeUFBSUFGcUx3QUFJUU1nQUVFQ2FpRUFEQUVMSUFBZ0FXb29BQUFoQXlBQVFRUnFJUUFMUVFGeElRSUNmZ0pBQWtBQ1FBSkFJQVZCQVdzT0F3RUNBd0FMUW44Z0JrVU5BeG9nQUNBQmFqRUFBQXdEQ3lBQUlBRnFNd0FBUW9BQ2ZBd0NDeUFBSUFGcU5RQUFEQUVMSUFBZ0FXb3BBQUFMSVFnZ0JDQUNOZ0lnSUFRZ0F6WUNIQ0FFSUFnM0F3QkJBQ0VESUFSQkFEWUNGQ0FFSUFnZ0NTQUdHeUlJTndNSUlBUkNnSUFJSUFnZ0NFS0FnQWhhR3o0Q0VBc2dBd3RmQVFGL1FiaC9JUU1nQVVFQlFRVWdBaHNpQWs4RWZ5QUFJQUpxUVFGckxRQUFJZ0JCQTNGQkFuUkJvQjVxS0FJQUlBSnFJQUJCQkhaQkRIRkJzQjVxS0FJQWFpQUFRU0J4SWdGRmFpQUJRUVYySUFCQndBQkpjV29GUWJoL0N3c01BQ0FBSUFFZ0FrRUFFQmtMbHdNQ0JYOENmaU1BUVVCcUlnUWtBQUpBQTBBZ0FVRUZUd1JBQWtBZ0FDZ0FBRUZ3Y1VIUTFMVENBVVlFUUVKK0lRY2dBVUVJU1EwRUlBQW9BQVFpQWtGM1N3MEVJQUpCQ0dvaUF5QUJTdzBFSUFKQmdYOUpEUUVNQkFzZ0JFRVlhaUFBSUFFUUd5RUNRbjRnQkNrREdFSUFJQVFvQWl4QkFVY2JJQUliSWdkQ2ZWWU5BeUFISUFoOElnZ2dCMVJDZmlFSERRTUNRQUpBSUFGQkNFa05BQ0FBS0FBQVFYQnhRZERVdE1JQlJ3MEFJQUFvQUFRaUFrRjNTdzBGUWJoL0lBSkJDR29pQWlBQklBSkpHeUVEREFFTElBUkJHR29nQUNBQkVCc2lBa0dJZjBzRVFDQUNJUU1NQVF0QnVIOGhBeUFDRFFBZ0FTQUVLQUl3SWdKcklRVWdBQ0FDYWlFR0EwQWdCaUFGSUFSQkRHb1FIU0lEUVloL1N3MEJJQU5CQTJvaUFpQUZTd1JBUWJoL0lRTU1BZ3NnQlNBQ2F5RUZJQUlnQm1vaEJpQUVLQUlRUlEwQUN5QUVLQUk0Qkg5QnVIOGhBeUFGUVFSSkRRRWdCa0VFYWdVZ0Jnc2dBR3NoQXdzZ0EwR0lmMHNOQXdzZ0FTQURheUVCSUFBZ0Eyb2hBQXdCQ3d0Q2ZpQUlJQUViSVFjTElBUkJRR3NrQUNBSEMyUUJBWDlCdUg4aEF3SkFJQUZCQTBrTkFDQUFMUUFDSVFFZ0FpQUFMd0FBSWdCQkFYRTJBZ1FnQWlBQVFRRjJRUU54SWdNMkFnQWdBaUFBSUFGQkVIUnlRUU4ySWdBMkFnZ0NRQUpBSUFOQkFXc09Bd0lCQUFFTFFXd1BDeUFBSVFNTElBTUxSQUVDZnlBQklBSW9BZ1FpQXlBQktBSUVhaUlFTmdJRUlBQWdBMEVDZEVHZ0hXb29BZ0FnQVNnQ0FFRUFJQVJyZG5FMkFnQWdBUkFQR2lBQUlBSkJDR28yQWdRTHpnRUJCbjlCdW44aENnSkFJQUlvQWdRaUNDQUNLQUlBSWdscUlnMGdBU0FBYTBzTkFFRnNJUW9nQ1NBRUlBTW9BZ0FpQzJ0TERRQWdBQ0FKYWlJRUlBSW9BZ2dpREdzaEFpQUFJQUZCSUdzaUFDQUxJQWxCQUJBZ0lBTWdDU0FMYWpZQ0FBSkFBa0FnQkNBRmF5QU1Ud1JBSUFJaEJRd0JDeUFNSUFRZ0JtdExEUUlnQnlBSElBSWdCV3NpQW1vaUFTQUlhazhFUUNBRUlBRWdDQkFLR2d3Q0N5QUNJQWhxSVFnZ0JDQUJRUUFnQW1zUUNpQUNheUVFQ3lBRUlBQWdCU0FJUVFFUUlBc2dEU0VLQ3lBS0M4Y0VBUUovSUFBZ0Eyb2hCZ0pBSUFOQkIwd0VRQU5BSUFBZ0JrOE5BaUFBSUFJdEFBQTZBQUFnQUVFQmFpRUFJQUpCQVdvaEFnd0FDd0FMSUFSQkFVWUVRQUpBSUFBZ0Ftc2lCVUVIVFFSQUlBQWdBaTBBQURvQUFDQUFJQUl0QUFFNkFBRWdBQ0FDTFFBQ09nQUNJQUFnQWkwQUF6b0FBeUFBSUFJZ0JVRUNkQ0lGUWNBZWFpZ0NBR29pQWlnQUFEWUFCQ0FDSUFWQjRCNXFLQUlBYXlFQ0RBRUxJQUFnQWlrQUFEY0FBQXNnQWtFSWFpRUNJQUJCQ0dvaEFBc2dBU0FHVHdSQUlBQWdBMm9oQVNBRVFRRkhJQUFnQW10QkQwcHlSUVJBQTBBZ0FDQUNLUUFBTndBQUlBSkJDR29oQWlBQVFRaHFJZ0FnQVVrTkFBd0RDd0FMSUFBZ0Fpa0FBRGNBQUNBQUlBSXBBQWczQUFnZ0EwRVJTUTBCSUFCQkVHb2hBQU5BSUFBZ0Fpa0FFRGNBQUNBQUlBSXBBQmczQUFnZ0FDQUNLUUFnTndBUUlBQWdBaWtBS0RjQUdDQUNRU0JxSVFJZ0FFRWdhaUlBSUFGSkRRQUxEQUVMQWtBZ0FDQUJTd1JBSUFBaEFRd0JDeUFCSUFCcklRVUNRQ0FFUVFGSElBQWdBbXRCRDBweVJRUkFJQUloQXdOQUlBQWdBeWtBQURjQUFDQURRUWhxSVFNZ0FFRUlhaUlBSUFGSkRRQUxEQUVMSUFBZ0Fpa0FBRGNBQUNBQUlBSXBBQWczQUFnZ0JVRVJTQTBBSUFCQkVHb2hBQ0FDSVFNRFFDQUFJQU1wQUJBM0FBQWdBQ0FES1FBWU53QUlJQUFnQXlrQUlEY0FFQ0FBSUFNcEFDZzNBQmdnQTBFZ2FpRURJQUJCSUdvaUFDQUJTUTBBQ3dzZ0FpQUZhaUVDQ3dOQUlBRWdCazhOQVNBQklBSXRBQUE2QUFBZ0FVRUJhaUVCSUFKQkFXb2hBZ3dBQ3dBTEM2NEhBZ1YvQVg0akFFR0FBV3NpRVNRQUlCRWdBellDZkVGL0lROENRQUpBQWtBQ1FBSkFJQUlPQkFFQUF3SUVDeUFHUlFSQVFiaC9JUThNQkF0QmJDRVBJQVV0QUFBaUFpQURTdzBESUFnZ0FrRUNkQ0lDYWlnQ0FDRURJQUlnQjJvb0FnQWhBaUFBUVFBNkFBc2dBRUlBTndJQUlBQWdBallDRENBQUlBTTZBQW9nQUVFQU93RUlJQUVnQURZQ0FFRUJJUThNQXdzZ0FTQUpOZ0lBUVFBaER3d0NDeUFLUlFSQVFXd2hEd3dDQzBFQUlROGdDMFVnREVFWlNISU5BVUVJSUFSMFFRaHFJUUJCQUNFREEwQWdBQ0FEVFEwQ0lBTkJRR3NoQXd3QUN3QUxRV3doRHlBUklCRkIvQUJxSUJGQitBQnFJQVVnQmhBTUlnTkJpSDlMRFFBZ0VTZ0NlQ0lDSUFSTERRQWdFU2dDZkVFQmFpRUpJQUJCQ0dvaEMwR0FnQUlnQW5SQkVIVWhCVUVCSVJCQkFTQUNkQ0lQUVFGcklnb2hFZ05BSUFrZ0RrY0VRQUpBSUJFZ0RrRUJkQ0lFYWk4QkFDSU1RZi8vQTBZRVFDQUxJQkpCQTNScUlBNDJBZ1FnRWtFQmF5RVNRUUVoREF3QkN5QVFRUUFnQlNBTXdVb2JJUkFMSUFRZ0RXb2dERHNCQUNBT1FRRnFJUTRNQVFzTElBQWdBallDQkNBQUlCQTJBZ0FDUUNBS0lCSkdCRUFnRFVIcUFHb2hCa0VBSVJCQkFDRU1BMEFnQ1NBUVJnUkFJQTlCQTNZZ0QwRUJkbXBCQTJvaUJVRUJkQ0VFUVFBaERFRUFJUklEUUVFQUlRNGdEeUFTVFEwRUEwQWdEa0VDUndSQUlBc2dCU0FPYkNBTWFpQUtjVUVEZEdvZ0JpQU9JQkpxYWkwQUFEWUNCQ0FPUVFGcUlRNE1BUXNMSUJKQkFtb2hFaUFFSUF4cUlBcHhJUXdNQUFzQUJTQVJJQkJCQVhScUxnRUFJUVVnQmlBTWFpSUVJQk0zQUFCQkNDRU9BMEFnQlNBT1NnUkFJQVFnRG1vZ0V6Y0FBQ0FPUVFocUlRNE1BUXNMSUJOQ2dZS0VpSkNnd0lBQmZDRVRJQkJCQVdvaEVDQUZJQXhxSVF3TUFRc0FDd0FMSUE5QkEzWWdEMEVCZG1wQkEyb2hCVUVBSVJCQkFDRU9BMEFnQ1NBUVJnMEJRUUFoRENBUklCQkJBWFJxTGdFQUlnUkJBQ0FFUVFCS0d5RUVBMEFnQkNBTVJ3UkFJQXNnRGtFRGRHb2dFRFlDQkFOQUlBVWdEbW9nQ25FaURpQVNTdzBBQ3lBTVFRRnFJUXdNQVFzTElCQkJBV29oRUF3QUN3QUxJQUpCQVdvaEJVRUFJUXdEUUNBTUlBOUhCRUFnRFNBTElBeEJBM1JxSWdrb0FnUWlCRUVCZEdvaUFpQUNMd0VBSWdaQkFXbzdBUUFnQ1NBRklBWm5RV0J6YWlJQ09nQURJQWtnQmlBQ2RDQVBhenNCQUNBSklBZ2dCRUVDZENJQ2FpZ0NBRG9BQWlBSklBSWdCMm9vQWdBMkFnUWdERUVCYWlFTURBRUxDeUFCSUFBMkFnQWdBeUVQQ3lBUlFZQUJhaVFBSUE4TDdWb0NPMzhHZmlNQVFlQUJheUlFSkFBQ1FFR3c3QWtRQlNJRlJRUkFRVUFoQnd3QkN5QUZRZ0EzQXZUcUFTQUZRUUEyQXNUckFTQUZRUUEyQXJUckFTQUZRZ0EzQXB6ckFTQUZRUUEyQXJqcEFTQUZRUUEyQXF6c0NTQUZRZ0EzQXRUckFTQUZRZ0EzQXF6ckFTQUZRZ0EzQTRqckFTQUZRZ0EzQXVUcUFTQUZRZ0EzQXVUckFTQUZRWUdBZ01BQU5nSzg2d0VnQlVJQU53S2s2d0VnQlVIODZnRnFRUUEyQWdBZ0JVR1E2d0ZxUWdBM0F3QWdCUkFZSUFWQnJOVUJhaUVVSUFWQitPc0JhaUVjSUFWQnNPb0JhaUVpSUFWQm9EQnFJU29nQlVHWUlHb2hLeUFGUWFqUUFHb2hIaUFGUVJCcUlTd2dCVUVJYWlFb0lBVkJCR29oTFNBRlFjRHBBV29oS1NBRlFZanJBV29nQkVHVUFXb2hMeUFFUVl3QmFpRXdJQVJCaEFGcUlURWdCRUhjQUdvaE1pQUVRZFFBYWlFeklBUkJ6QUJxSVRRZ0FDRWRBa0FDUUFKQUFrQUNRQU5BUVFGQkJTQUZLQUxrNmdFYklRWUNRQU5BSUFNZ0Jra05BU0FDS0FBQVFYQnhRZERVdE1JQlJnUkFRYmgvSVFjZ0EwRUlTUTBJSUFJb0FBUWlEa0YzU3dSQVFYSWhCd3dKQ3lBRElBNUJDR29pQ1VrTkNDQU9RWUIvU3dSQUlBa2hCd3dKQ3lBRElBbHJJUU1nQWlBSmFpRUNEQUVMQ3lBRlFnQTNBcXpwQVNBRlFnQTNBK2pwQVNBRlFRQTJBcGpyQVNBRlFnQTNBNERxQVNBRlFnTTNBL2pwQVNBRlFiVHBBV3BDQURjQ0FDQUZRZkRwQVdwQ0FEY0RBQ0FGUWFqUUFHb2lDVUdNZ0lEZ0FEWUNBQ0FGUWF6UUFXcEI0QklwQWdBM0FnQWdCVUcwMEFGcVFlZ1NLQUlBTmdJQUlBVWdCVUVRYWpZQ0FDQUZJQVZCb0RCcU5nSUVJQVVnQlVHWUlHbzJBZ2dnQlNBSk5nSU1JQVZCQVVFRklBVW9BdVRxQVJzMkFyenBBUUpBSUFGRkRRQWdCU2dDck9rQklna2dIVVlOQUNBRklBazJBcmpwQVNBRklCMDJBcXpwQVNBRktBS3c2UUVoRGlBRklCMDJBckRwQVNBRklCMGdEaUFKYTJvMkFyVHBBUXRCdUg4aENTQURRUVZCQ1NBRktBTGs2Z0VpQmh0SkRRVWdBa0VCUVFVZ0Joc2dCaEFhSWc1QmlIOUxCRUFnRGlFSkRBVUxJQU1nRGtFRGFra05CU0FwSUFJZ0RpQUdFQmtpQmtHSWYwc0VRQ0FHSVFrTUJRc2dCZzBGQWtBQ1FDQUZLQUtvNndGQkFVY05BQ0FGS0FLazZ3RWlDVVVOQUNBRktBS1U2d0ZGRFFBZ0NTZ0NCRUVCYXlJSElBVW9BdHpwQVNJS3JVS0hsYSt2bUxiZW01NS9ma0xKejlteThlVzY2aWVGUWhlSlFzL1cwNzdTeDZ2WlFuNUMrZlBkOFpuMm1hc1dmQ0kvUWlHSUlEK0ZRcy9XMDc3U3g2dlpRbjRpUDBJZGlDQS9oVUw1ODkzeG1mYVpxeForSWo5Q0lJZ2dQNFduY1NFR0lBa29BZ0FoRlFOQVFRQWhDQUpBSUJVZ0JrRUNkR29vQWdBaUNVVU5BQ0FKS0FJSVFRaEpEUUFnQ1NnQ0JDSVNLQUFBUWJmSXd1RitSdzBBSUJJb0FBUWhDQXNnQ0NBS1J3UkFJQVlnQjNGQkFXb2hCaUFJRFFFTEN5QUpSUTBBSUFVUUdDQUZRWDgyQXFEckFTQUZJQWsyQXBUckFTQUZJQVVvQXR6cEFTSUlOZ0tZNndFTUFRc2dCU2dDM09rQklRZ0xBa0FnQ0VVTkFDQUZLQUtZNndFZ0NFWU5BRUZnSVFrTUJnc0NRQ0FGS0FMZzZRRUVRQ0FGSUFVb0F1anFBU0lKUlRZQzdPb0JJQWtOQVNBRlF2bnEwTkRueWFIazRRQTNBNmpxQVNBRlFnQTNBNkRxQVNBRlFzL1cwNzdTeDZ2WlFqY0RtT29CSUFWQzF1dUM3dXI5aWZYZ0FEY0RrT29CSUFWQ0FEY0RpT29CSUNKQkFFRW9FQU1hREFFTElBVkJBRFlDN09vQkN5QUJJQjFxSVNVZ0JTQUZLUVBvNlFFZ0RxMThOd1BvNlFFZ0F5QU9heUVESUFJZ0Rtb2hBaUFkSVE0RFFDQUNJQU1nQkVFc2FoQWRJaFZCaUg5TEJFQWdGU0VKREFZTElBTkJBMnNpTlNBVlNRMEVJQUpCQTJvaEcwRnNJUWtDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FDQUVLQUlzRGdNQ0FRQVZDeUFWUWYvL0Iwc05FeUFWUVFOSkRSSWdCU2tEeU9rQklUOENRQUpBSUJzdEFBQWlDVUVEY1NJYVFRRnJEZ01HQVFBSEN5QUZLQUtBNmdFTkFFRmlJUWtNRlFzZ0ZVRUZTUTBTSUJzb0FBQWhBd0ovQWtBQ1FBSkFJQWxCQW5aQkEzRWlDVUVDYXc0Q0FRSUFDeUFKUVFCSElRY2dBMEVFZGtIL0IzRWhDMEVESVFZZ0EwRU9ka0gvQjNFTUFndEJCQ0VHSUFOQkJIWkIvLzhBY1NFTFFRRWhCeUFEUVJKMkRBRUxJQU5CQkhaQi8vOFBjU0lMUVlDQUNFc05FMEVCSVFkQkJTRUdJQUl0QUFkQkNuUWdBMEVXZG5JTElnZ2dCbW9pQ1NBVlN3MFNBa0FnQzBHQkJra05BQ0FGS0FLYzZ3RkZEUUJCQUNFREEwQWdBMEdEZ0FGTERRRWdBMEZBYXlFRERBQUxBQXNnQmlBYmFpRVBJQnBCQTBjTkJpQUZLQUlNSWdJdEFBRkJDSFFoQXlBSERRY2dBMFVOQ0NBRVFmQUFhaUFQSUFnUURTSURRWWgvU3cwSklBSkJCR29oQmlBTElCeHFJaEpCQTJzaENrRUFJQUl2QVFKclFSOXhJUWNnSENFREEwQWdCRUh3QUdvUUQwVWdBeUFLU1hFRVFDQURJQVlnQkNnQ2NDSUlJQVFvQW5RaUQzUWdCM1pCQW5ScUlnSXZBUUE3QUFBZ0F5QUNMUUFEYWlJRElBWWdDQ0FQSUFJdEFBSnFJZ2gwSUFkMlFRSjBhaUlDTHdFQU93QUFJQVFnQ0NBQ0xRQUNhallDZENBRElBSXRBQU5xSVFNTUFRVWdFa0VDYXlFSUEwQWdCRUh3QUdvUUR5RVBJQVFvQW5BaENpQUVLQUowSVFJZ0F5QUlTeUFQY2tVRVFDQURJQVlnQ2lBQ2RDQUhka0VDZEdvaUNpOEJBRHNBQUNBRUlBSWdDaTBBQW1vMkFuUWdBeUFLTFFBRGFpRUREQUVMQ3dOQUlBTWdDRTBFUUNBRElBWWdDaUFDZENBSGRrRUNkR29pRHk4QkFEc0FBQ0FESUE4dEFBTnFJUU1nQWlBUExRQUNhaUVDREFFTEN3SkFJQU1nRWs4TkFDQURJQVlnQ2lBQ2RDQUhka0VDZEdvaUF5MEFBRG9BQUNBRExRQURRUUZHQkVBZ0FpQURMUUFDYWlFQ0RBRUxJQUpCSDBzTkFFRWdJQUlnQXkwQUFtb2lBaUFDUVNCUEd5RUNDMEZzUVd3Z0N5QUVLQUo0SUFRb0FueEhHeUFDUVNCSEd5RUREQXNMQUFzQUN5QUVLQUkwSWdJZ0pTQU9hMHNOQ2lBT1JRUkFRUUFoQ1NBQ0RRSU1EZ3NnRGlBYkxRQUFJQUlRQXhvZ0FpRUpEQXdMSUJVZ0pTQU9hMHNOQ1NBT0RRRkJBQ0VKSUJWRkRRd0xRYlovSVFrTUVRc2dEaUFiSUJVUUFob2dGU0VKREFvTElCd2dHd0ovQWtBQ1FBSkFJQWxCQW5aQkEzRkJBV3NPQXdFQUFnQUxJQWxCQTNZaEEwRUJEQUlMSUJzdkFBQkJCSFloQTBFQ0RBRUxJQlZCQkVrTkRpQUNMd0FESUFJdEFBVkJFSFJ5SWdKQmo0Q0FBVXNORGlBQ1FRUjJJUU5CQXdzaUFtb3RBQUFnQTBFZ2FoQURJUWtnQlNBRE5nS0E2d0VnQlNBSk5nTHc2Z0VnQWtFQmFpRUpEQVVMSUJVQ2Z3SkFBa0FDUUNBSlFRSjJRUU54UVFGckRnTUJBQUlBQ3lBSlFRTjJJUU5CQVF3Q0N5QWJMd0FBUVFSMklRTkJBZ3dCQ3lBQ0x3QURJQUl0QUFWQkVIUnlRUVIySVFOQkF3c2lBaUFEYWlJSlFTQnFTUVJBSUFrZ0ZVc05EU0FjSUFJZ0cyb2dBeEFDSVFJZ0JTQUROZ0tBNndFZ0JTQUNOZ0x3NmdFZ0FpQURhaUlDUWdBM0FCZ2dBa0lBTndBUUlBSkNBRGNBQ0NBQ1FnQTNBQUFNQlFzZ0JTQUROZ0tBNndFZ0JTQUNJQnRxTmdMdzZnRU1CQXNnQjBVRVFDQWVJQThnQ0NBVUVCUWlBa0dJZjBzZ0FpQUlUM0lORENBY0lBc2dBaUFQYWlBSUlBSnJJQjRRRlNFRERBTUxJQXRGSUFoRmNnMExJQXRCQ0hZaUF5QUlJQXRKQkg4Z0NFRUVkQ0FMYmdWQkR3dEJHR3dpQWtHTUNHb29BZ0JzSUFKQmlBaHFLQUlBYWlJR1FRTjJJQVpxSUFKQmdBaHFLQUlBSUFKQmhBaHFLQUlBSUFOc2Fra0VRQ01BUVJCckloQWtBQ0FlS0FJQUlRTWdGRUh3QkdwQkFFSHNBQkFESVFaQlZDRUNBa0FnQTBIL0FYRWlERUVNU3cwQUFrQWdGRUhjQ1dvZ0JpQVFRUWhxSUJCQkRHb2dEeUFJSUJSQjNBdHFJaGNRQ3lJU1FZaC9TdzBBSUJBb0Fnd2lCaUFNU3cwQklCUkJxQVZxSVEwZ0ZFR2tCV29oTmlBZVFRUnFJUkVnQTBHQWdJQjRjU0UzSUFaQkFXb2lFeUVDSUFZaEF3TkFJQUlpQjBFQmF5RUNJQU1pQ2tFQmF5RURJQlFnQ2tFQ2RHb29BdkFFUlEwQUMwRUJJQWNnQjBFQlRSc2hGa0VBSVFkQkFTRUNBMEFnQWlBV1J3UkFJQlFnQWtFQ2RDSURhaWdDOEFRaEdDQURJQTFxSUFjMkFnQWdBa0VCYWlFQ0lBY2dHR29oQnd3QkN3c2dEU0FITmdJQVFRQWhBaUFRS0FJSUlRTURRQ0FDSUFOSEJFQWdEU0FDSUJScVFkd0phaTBBQUNJWVFRSjBhaUlaSUJrb0FnQWlHVUVCYWpZQ0FDQVVJQmxCQVhScUloa2dHRG9BM1FVZ0dTQUNPZ0RjQlNBQ1FRRnFJUUlNQVFzTFFRQWhBeUFOUVFBMkFnQWdEQ0FHUVg5emFpRUdRUUVoQWdOQUlBSWdGa2NFUUNBVUlBSkJBblJxSWcwZ0F6WUNBQ0FOS0FMd0JDQUNJQVpxZENBRGFpRURJQUpCQVdvaEFnd0JDd3NnRENBVElBcHJJZ1pyUVFGcUlRb2dCaUVEQTBBZ0F5QUtTUVJBSUJRZ0EwRTBiR29oRFVFQklRSURRQ0FDSUJaSEJFQWdEU0FDUVFKMEloaHFJQlFnR0dvb0FnQWdBM1kyQWdBZ0FrRUJhaUVDREFFTEN5QURRUUZxSVFNTUFRc0xJQmNnRkVFMEVBSWhPQ0FVUVpBTWFpRTVJQk1nREdzaE9pQVVRZHdGYWlFWFFRQWhDZ05BQWtBQ1FDQUhJQXBIQkVCQkFTQU1JQk1nRnlBS1FRRjBhaUlDTFFBQklnMXJJZ05ySWhoMElSa2dBaTBBQUNFV0lEZ2dEVUVDZEdvaUh5Z0NBQ0VDSUFZZ0dFMEVRQ0EyUVFFZ0F5QTZhaUlOSUExQkFVd2JJaUJCQW5RaUpHb29BZ0FoRFNBNUlCUWdBMEUwYkdwQk5CQUNJU0VnRFVFQmRDRW1JQkVnQWtFQ2RHb2hJeUFnUVFGTkRRSWdBMEVRZEVHQWdQd0hjU0FXY2tHQWdJQUljaUVnSUNFZ0pHb29BZ0FoSkVFQUlRSURRQ0FDSUNSR0RRTWdJeUFDUVFKMGFpQWdOZ0VBSUFKQkFXb2hBZ3dBQ3dBTElBSWdBaUFaYWlJTklBSWdEVXNiSVEwZ0EwRVFkRUdBZ1B3SGNTQVdja0dBZ0lBSWNpRURBMEFnQWlBTlJnMERJQkVnQWtFQ2RHb2dBellCQUNBQ1FRRnFJUUlNQUFzQUN5QWVJQXhCRUhRZ04zSWdESEpCZ0FKeU5nSUFEQU1MSUFjZ0RXc2hKQ0FYSUNacUlTWkJBQ0VOQTBBZ0RTQWtSZzBCUVFFZ0dDQVRJQ1lnRFVFQmRHb2lKeTBBQVNJQ2F5STdhM1FpUENBaElBSkJBblJxSWlBb0FnQWlBbW9oUFNBRElEdHFRUkIwUVlDQS9BZHhJQ2N0QUFCQkNIUnlJQlp5UVlDQWdCQnlJU2NEUUNBaklBSkJBblJxSUNjMkFRQWdBa0VCYWlJQ0lEMUpEUUFMSUNBZ0lDZ0NBQ0E4YWpZQ0FDQU5RUUZxSVEwTUFBc0FDeUFmSUI4b0FnQWdHV28yQWdBZ0NrRUJhaUVLREFBTEFBc2dFaUVDQ3lBUVFSQnFKQUFnQWtHSWYwc2dBaUFJVDNJTkRDQWNJQXNnQWlBUGFpQUlJQUpySUI0UUZpRUREQU1MSUI0Z0R5QUlJQlFRRkNJQ1FZaC9TeUFDSUFoUGNnMExJQndnQ3lBQ0lBOXFJQWdnQW1zZ0hoQVhJUU1NQWdzZ0F3UkFJQndnQ3lBUElBZ2dBaEFXSVFNTUFnc2dIQ0FMSUE4Z0NDQUNFQmNoQXd3QkN5QWNJQXNnRHlBSUlBSVFGU0VEQ3lBRFFZaC9TdzBJSUFVZ0N6WUNnT3NCSUFVZ0hEWUM4T29CSUFWQkFUWUNnT29CSUJwQkFrWUVRQ0FGSUI0MkFnd0xJQXNnSEdvaUFrSUFOd0FBSUFKQ0FEY0FHQ0FDUWdBM0FCQWdBa0lBTndBSUlBbEJpSDlMRFFvTElBa2dGVVlOQ0NBVklBbHJJUVlnQlNnQ25Pc0JJUW9DUUNBSklCdHFJZ010QUFBaUQwVUVRRUVCSVFKQkFDRVBRYmgvSVFrZ0JrRUJSZzBCREFzTEFuOGdBMEVCYWlBUHdDSUNRUUJPRFFBYUlBSkJmMFlFUUNBR1FRTklEUXNnQXk4QUFVR0EvZ0ZxSVE4Z0EwRURhZ3dCQ3lBR1FRSklEUW9nQXkwQUFTQVBRUWgwY2tHQWdBSnJJUThnQTBFQ2Fnc2hFa0c0ZnlFSklCSkJBV29pQWlBVklCdHFJZ2RMRFFvZ0xDQUZJQkl0QUFBaUVrRUdka0VqUVFrZ0FpQUhJQUpyUWNBUVFkQVJRZkFTSUFVb0FvVHFBU0FLSUE4Z0ZCQWhJZ2xCaUg5TERRZ2dLeUFvSUJKQkJIWkJBM0ZCSDBFSUlBSWdDV29pQWlBSElBSnJRWUFMUVlBTVFZQVhJQVVvQW9UcUFTQUZLQUtjNndFZ0R5QVVFQ0VpQ0VHSWYwc05DRUZzSVFrZ0tpQXRJQkpCQW5aQkEzRkJORUVKSUFJZ0NHb2lBaUFISUFKclFZQU5RZUFPUVpBWklBVW9Bb1RxQVNBRktBS2M2d0VnRHlBVUVDRWlCMEdJZjBzTkNpQUNJQWRxSUFOcklnSWhDU0FDUVloL1N3MEtDeUFPSUE5QkFFeHlEUUVMUWJwL0lRa01DQXNnSlNBT2F5RUpJQVlnQW1zaEJpQUNJQU5xSVFjQ1FBSkFBa0FnQ2tVRVFDQVBRUWxJSUFVcEE4anBBVUtCZ0lBSVZISU5BaUFvS0FJQUlnSkJDR29oRWlBQ0tBSUVJUXBCQUNFRFFRQWhBZ05BSUFNZ0NuWkZCRUFnQWlBU0lBTkJBM1JxTFFBQ1FSWkxhaUVDSUFOQkFXb2hBd3dCQ3dzZ0JVRUFOZ0tjNndFZ0FrRUlJQXByZEVFVVR3MEJEQU1MSUFWQkFEWUNuT3NCQ3lBRUlBVW9BdkRxQVNJRE5nTGNBU0FKSUE1cUlSWWdBeUFGS0FLQTZ3RnFJUmNDUUNBUFJRUkFJQTRoQnd3QkN5QUZLQUs0NlFFaEdpQUZLQUswNlFFaEdDQUZLQUt3NlFFaEVpQUZRUUUyQW9UcUFVRUFJUU1EUUNBRFFRTkhCRUFnQkNBRFFRSjBJZ0pxSUFJZ0JXcEJyTkFCYWlnQ0FEWUNaQ0FEUVFGcUlRTU1BUXNMUVd3aENTQUVRVGhxSWdJZ0J5QUdFQTFCaUg5TERRTkJDQ0FQSUE5QkNFNGJJUjhnTkNBQ0lBVW9BZ0FRSGlBeklBSWdCU2dDQ0JBZUlESWdBaUFGS0FJRUVCNGdEaUFTYXlFWlFRQWhDQU5BSUFSQk9Hb1FEMEVEUmlBSUlCOU9ja1VFUUNBRUtBSlFJQVFvQWt4QkEzUnFLUUlBSWtDbklnZEJFSFlpRVVIL0FYRWhDeUFFS0FKZ0lBUW9BbHhCQTNScUtRSUFJa0duSWd4QkVIWWlJVUgvQVhFaEVDQUVLQUpZSUFRb0FsUkJBM1JxS1FJQUlrSkNJSWluSVFZZ1FVSWdpQ0JBUWlDSXB5RURBa0FnUWtJUWlLY2lDa0gvQVhFaUFrRUNUd1JBQWtBZ0FrRVpTU0EvUW9HQWdCQlVja1VFUUNBRVFTQWdCQ2dDUENJS2F5SU5JQUlnQWlBTlN4c2lFeUFLYWpZQ1BDQUdJQVFvQWpnZ0NuUkJBQ0FUYTNZZ0FpQVRheUlUZEdvaENpQUVRVGhxRUE4YUlBSWdEVTBOQVNBRUlBUW9BandpQWlBVGFqWUNQQ0FFS0FJNElBSjBRUUFnRTJ0MklBcHFJUW9NQVFzZ0JDQUNJQVFvQWp3aURXbzJBandnQkNnQ09DQU5kRUVBSUFwcmRpQUdhaUVLSUFSQk9Hb1FEeG9MSUFRcEFtUWhSQ0FFSUFvMkFtUWdCQ0JFTndKb0RBRUxBa0FnQWtVRVFDQURCRUFnQkNnQ1pDRUtEQU1MSUFRb0FtZ2hDZ3dCQ3lBRUlBUW9BandpQWtFQmFqWUNQQUovSUFZZ0EwVnFJQVFvQWpnZ0FuUkJIM1pxSWdKQkEwWUVRQ0FFS0FKa1FRRnJEQUVMSUFKQkFuUWdCR29vQW1RTElnWkZJQVpxSVFvZ0FrRUJSd1JBSUFRZ0JDZ0NhRFlDYkFzTElBUWdCQ2dDWkRZQ2FDQUVJQW8yQW1RTHB5RUNJRUZDZ0lEOEI0TlFSUVJBSUFRZ0JDZ0NQQ0lHSUJCcU5nSThJQVFvQWpnZ0JuUkJBQ0FoYTNZZ0Ftb2hBZ3NnQ3lBUWFrRVVUd1JBSUFSQk9Hb1FEeG9MSUVCQ2dJRDhCNE5RUlFSQUlBUWdCQ2dDUENJR0lBdHFOZ0k4SUFRb0FqZ2dCblJCQUNBUmEzWWdBMm9oQXdzZ0JFRTRhaEFQR2lBRUlBUW9BamdpQmtFQUlBZEJHSFlpQ3lBRUtBSThhaUlRYTNZZ0MwRUNkRUdnSFdvb0FnQnhJQWRCLy84RGNXbzJBa3dnQkNBUUlBeEJHSFlpQjJvaUN6WUNQQ0FFSUFkQkFuUkJvQjFxS0FJQUlBWkJBQ0FMYTNaeElBeEIvLzhEY1dvMkFsd2dCRUU0YWhBUEdpQUVJRUtuSWdaQkdIWWlCeUFFS0FJOGFpSUxOZ0k4SUFRZ0IwRUNkRUdnSFdvb0FnQWdCQ2dDT0VFQUlBdHJkbkVnQmtILy93TnhhallDVkNBRVFmQUFhaUFJUVF4c2FpSUdJQW8yQWdnZ0JpQUNOZ0lFSUFZZ0F6WUNBQ0FJUVFGcUlRZ2dBeUFaYWlBQ2FpRVpEQUVMQ3lBSUlCOUlEUU1nRmtFZ2F5RWhJQTRoQndOQUlBUkJPR29RRDBFRFJpQUlJQTlPY2tVRVFDQUVLQUpRSUFRb0FreEJBM1JxS1FJQUlrQ25JZ1pCRUhZaUkwSC9BWEVoQ2lBRUtBSmdJQVFvQWx4QkEzUnFLUUlBSWtHbklnMUJFSFlpSUVIL0FYRWhFeUFFS0FKWUlBUW9BbFJCQTNScUtRSUFJa0pDSUlpbklRTWdRVUlnaUNCQVFpQ0lweUVMQWtBZ1FrSVFpS2NpREVIL0FYRWlBa0VDVHdSQUFrQWdBa0VaU1NBL1FvR0FnQkJVY2tVRVFDQUVRU0FnQkNnQ1BDSU1heUlSSUFJZ0FpQVJTeHNpRUNBTWFqWUNQQ0FESUFRb0FqZ2dESFJCQUNBUWEzWWdBaUFRYXlJTWRHb2hFQ0FFUVRocUVBOGFJQUlnRVUwTkFTQUVJQVFvQWp3aUFpQU1hallDUENBRUtBSTRJQUowUVFBZ0RHdDJJQkJxSVJBTUFRc2dCQ0FDSUFRb0Fqd2lFR28yQWp3Z0JDZ0NPQ0FRZEVFQUlBeHJkaUFEYWlFUUlBUkJPR29RRHhvTElBUXBBbVFoUkNBRUlCQTJBbVFnQkNCRU53Sm9EQUVMQWtBZ0FrVUVRQ0FMQkVBZ0JDZ0NaQ0VRREFNTElBUW9BbWdoRUF3QkN5QUVJQVFvQWp3aUFrRUJhallDUEFKL0lBTWdDMFZxSUFRb0FqZ2dBblJCSDNacUlnSkJBMFlFUUNBRUtBSmtRUUZyREFFTElBSkJBblFnQkdvb0FtUUxJZ05GSUFOcUlSQWdBa0VCUndSQUlBUWdCQ2dDYURZQ2JBc0xJQVFnQkNnQ1pEWUNhQ0FFSUJBMkFtUUxweUVNSUVGQ2dJRDhCNE5RUlFSQUlBUWdCQ2dDUENJQ0lCTnFOZ0k4SUFRb0FqZ2dBblJCQUNBZ2EzWWdER29oREFzZ0NpQVRha0VVVHdSQUlBUkJPR29RRHhvTElFQkNnSUQ4QjROUVJRUkFJQVFnQkNnQ1BDSUNJQXBxTmdJOElBUW9BamdnQW5SQkFDQWphM1lnQzJvaEN3c2dCRUU0YWhBUEdpQUVJQVFvQWpnaUFrRUFJQVpCR0hZaUF5QUVLQUk4YWlJS2EzWWdBMEVDZEVHZ0hXb29BZ0J4SUFaQi8vOERjV28yQWt3Z0JDQUtJQTFCR0hZaUEyb2lCallDUENBRUlBTkJBblJCb0IxcUtBSUFJQUpCQUNBR2EzWnhJQTFCLy84RGNXbzJBbHdnQkVFNGFoQVBHaUFFSUVLbklnSkJHSFlpQXlBRUtBSThhaUlHTmdJOElBUWdBMEVDZEVHZ0hXb29BZ0FnQkNnQ09FRUFJQVpyZG5FZ0FrSC8vd054YWpZQ1ZBSkFBa0FDUUNBRUtBTGNBU0lESUFSQjhBQnFJQWhCQjNGQkRHeHFJaE1vQWdBaUVXb2lJeUFYU3cwQUlBY2dFeWdDQkNJTklCRnFJZ3BxSUNGTERRQWdDa0VnYWlBV0lBZHJUUTBCQ3lBRUlCTW9BZ2cyQWhnZ0JDQVRLUUlBTndNUUlBY2dGaUFFUVJCcUlBUkIzQUZxSUJjZ0VpQVlJQm9RSHlFS0RBRUxJQWNnRVdvaEFpQVRLQUlJSVFZZ0J5QURLUUFBTndBQUlBY2dBeWtBQ0RjQUNBSkFJQkZCRVVrTkFDQUhJQU1wQUJBM0FCQWdCeUFES1FBWU53QVlJQkZCRUd0QkVVZ05BQ0FEUVJCcUlRTWdCMEVnYWlFUkEwQWdFU0FES1FBUU53QUFJQkVnQXlrQUdEY0FDQ0FSSUFNcEFDQTNBQkFnRVNBREtRQW9Od0FZSUFOQklHb2hBeUFSUVNCcUloRWdBa2tOQUFzTElBSWdCbXNoQXlBRUlDTTJBdHdCSUFJZ0Vtc2dCa2tFUUNBR0lBSWdHR3RMRFFjZ0dpQWFJQU1nRW1zaUEyb2lFU0FOYWs4RVFDQUNJQkVnRFJBS0dnd0NDeUFESUExcUlRMGdBaUFSUVFBZ0Eyc1FDaUFEYXlFQ0lCSWhBd3NnQmtFUVR3UkFJQUlnQXlrQUFEY0FBQ0FDSUFNcEFBZzNBQWdnRFVFUlNBMEJJQUlnRFdvaEJpQUNRUkJxSVFJRFFDQUNJQU1wQUJBM0FBQWdBaUFES1FBWU53QUlJQUlnQXlrQUlEY0FFQ0FDSUFNcEFDZzNBQmdnQTBFZ2FpRURJQUpCSUdvaUFpQUdTUTBBQ3d3QkN3SkFJQVpCQjAwRVFDQUNJQU10QUFBNkFBQWdBaUFETFFBQk9nQUJJQUlnQXkwQUFqb0FBaUFDSUFNdEFBTTZBQU1nQWlBRElBWkJBblFpQmtIQUhtb29BZ0JxSWdNb0FBQTJBQVFnQXlBR1FlQWVhaWdDQUdzaEF3d0JDeUFDSUFNcEFBQTNBQUFMSUExQkNVa05BQ0FDSUExcUlSRWdBa0VJYWlJR0lBTkJDR29pQTJ0QkQwd0VRQU5BSUFZZ0F5a0FBRGNBQUNBRFFRaHFJUU1nQmtFSWFpSUdJQkZKRFFBTUFnc0FDeUFHSUFNcEFBQTNBQUFnQmlBREtRQUlOd0FJSUExQkdVZ05BQ0FDUVJocUlRSURRQ0FDSUFNcEFCQTNBQUFnQWlBREtRQVlOd0FJSUFJZ0F5a0FJRGNBRUNBQ0lBTXBBQ2czQUJnZ0EwRWdhaUVESUFKQklHb2lBaUFSU1EwQUN3c2dDa0dJZjBzRVFDQUtJUWtNQmdVZ0V5QVFOZ0lJSUJNZ0REWUNCQ0FUSUFzMkFnQWdDRUVCYWlFSUlBY2dDbW9oQnlBTElCbHFJQXhxSVJrTUFnc0FDd3NnQ0NBUFNBMERJQWdnSDJzaEJnTkFBa0FnQmlBUFRnUkFRUUFoQXdOQUlBTkJBMFlOQWlBRklBTkJBblFpQW1wQnJOQUJhaUFDSUFScUtBSmtOZ0lBSUFOQkFXb2hBd3dBQ3dBTEFrQUNRQUpBSUFRb0F0d0JJZ01nQkVId0FHb2dCa0VIY1VFTWJHb2lDQ2dDQUNJTWFpSVFJQmRMRFFBZ0J5QUlLQUlFSWdzZ0RHb2lDbW9nSVVzTkFDQUtRU0JxSUJZZ0IydE5EUUVMSUFRZ0NDZ0NDRFlDS0NBRUlBZ3BBZ0EzQXlBZ0J5QVdJQVJCSUdvZ0JFSGNBV29nRnlBU0lCZ2dHaEFmSVFvTUFRc2dCeUFNYWlFQ0lBZ29BZ2doQ0NBSElBTXBBQUEzQUFBZ0J5QURLUUFJTndBSUFrQWdERUVSU1EwQUlBY2dBeWtBRURjQUVDQUhJQU1wQUJnM0FCZ2dERUVRYTBFUlNBMEFJQU5CRUdvaEF5QUhRU0JxSVF3RFFDQU1JQU1wQUJBM0FBQWdEQ0FES1FBWU53QUlJQXdnQXlrQUlEY0FFQ0FNSUFNcEFDZzNBQmdnQTBFZ2FpRURJQXhCSUdvaURDQUNTUTBBQ3dzZ0FpQUlheUVESUFRZ0VEWUMzQUVnQWlBU2F5QUlTUVJBSUFnZ0FpQVlhMHNOQnlBYUlCb2dBeUFTYXlJRGFpSU1JQXRxVHdSQUlBSWdEQ0FMRUFvYURBSUxJQU1nQzJvaEN5QUNJQXhCQUNBRGF4QUtJQU5ySVFJZ0VpRURDeUFJUVJCUEJFQWdBaUFES1FBQU53QUFJQUlnQXlrQUNEY0FDQ0FMUVJGSURRRWdBaUFMYWlFSUlBSkJFR29oQWdOQUlBSWdBeWtBRURjQUFDQUNJQU1wQUJnM0FBZ2dBaUFES1FBZ053QVFJQUlnQXlrQUtEY0FHQ0FEUVNCcUlRTWdBa0VnYWlJQ0lBaEpEUUFMREFFTEFrQWdDRUVIVFFSQUlBSWdBeTBBQURvQUFDQUNJQU10QUFFNkFBRWdBaUFETFFBQ09nQUNJQUlnQXkwQUF6b0FBeUFDSUFNZ0NFRUNkQ0lJUWNBZWFpZ0NBR29pQXlnQUFEWUFCQ0FESUFoQjRCNXFLQUlBYXlFRERBRUxJQUlnQXlrQUFEY0FBQXNnQzBFSlNRMEFJQUlnQzJvaERDQUNRUWhxSWdnZ0EwRUlhaUlEYTBFUFRBUkFBMEFnQ0NBREtRQUFOd0FBSUFOQkNHb2hBeUFJUVFocUlnZ2dERWtOQUF3Q0N3QUxJQWdnQXlrQUFEY0FBQ0FJSUFNcEFBZzNBQWdnQzBFWlNBMEFJQUpCR0dvaEFnTkFJQUlnQXlrQUVEY0FBQ0FDSUFNcEFCZzNBQWdnQWlBREtRQWdOd0FRSUFJZ0F5a0FLRGNBR0NBRFFTQnFJUU1nQWtFZ2FpSUNJQXhKRFFBTEN5QUtRWWgvU3dSQUlBb2hDUXdHQlNBR1FRRnFJUVlnQnlBS2FpRUhEQUlMQUFzTElBUW9BdHdCSVFNTFFicC9JUWtnRnlBRGF5SUNJQllnQjJ0TERRSWdCd1IvSUFjZ0F5QUNFQUlnQW1vRlFRQUxJQTVySVFrTUFnc2dCVUVBTmdLYzZ3RUxJQVFnQlNnQzhPb0JJZ00yQXR3QklBa2dEbW9oRENBRElBVW9Bb0RyQVdvaEVBSkFJQTlGQkVBZ0RpRUdEQUVMSUFVb0FyanBBU0VOSUFVb0FyVHBBU0VUSUFVb0FyRHBBU0VTSUFWQkFUWUNoT29CUVFBaEF3TkFJQU5CQTBjRVFDQUVJQU5CQW5RaUFtb2dBaUFGYWtHczBBRnFLQUlBTmdLY0FTQURRUUZxSVFNTUFRc0xRV3doQ1NBRVFmQUFhaUlDSUFjZ0JoQU5RWWgvU3cwQklERWdBaUFGS0FJQUVCNGdNQ0FDSUFVb0FnZ1FIaUF2SUFJZ0JTZ0NCQkFlSUF4QklHc2hHQ0FPSVFZRFFDQUVLQUtJQVNBRUtBS0VBVUVEZEdvcEFnQWlRS2NpQ2tFUWRpSVpRZjhCY1NFTElBUW9BcGdCSUFRb0FwUUJRUU4wYWlrQ0FDSkJweUlXUVJCMkloOUIvd0Z4SVJvZ0JDZ0NrQUVnQkNnQ2pBRkJBM1JxS1FJQUlrSkNJSWluSVFjZ1FVSWdpQ0JBUWlDSXB5RURBa0FnUWtJUWlLY2lDRUgvQVhFaUFrRUNUd1JBQWtBZ0FrRVpTU0EvUW9HQWdCQlVja1VFUUNBRVFTQWdCQ2dDZENJSWF5SVJJQUlnQWlBUlN4c2lGeUFJYWpZQ2RDQUhJQVFvQW5BZ0NIUkJBQ0FYYTNZZ0FpQVhheUlYZEdvaENDQUVRZkFBYWhBUEdpQUNJQkZORFFFZ0JDQUVLQUowSWdJZ0YybzJBblFnQkNnQ2NDQUNkRUVBSUJkcmRpQUlhaUVJREFFTElBUWdBaUFFS0FKMEloRnFOZ0owSUFRb0FuQWdFWFJCQUNBSWEzWWdCMm9oQ0NBRVFmQUFhaEFQR2dzZ0JDa0NuQUVoUkNBRUlBZzJBcHdCSUFRZ1JEY0NvQUVNQVFzQ1FDQUNSUVJBSUFNRVFDQUVLQUtjQVNFSURBTUxJQVFvQXFBQklRZ01BUXNnQkNBRUtBSjBJZ0pCQVdvMkFuUUNmeUFISUFORmFpQUVLQUp3SUFKMFFSOTJhaUlDUVFOR0JFQWdCQ2dDbkFGQkFXc01BUXNnQWtFQ2RDQUVhaWdDbkFFTElnZEZJQWRxSVFnZ0FrRUJSd1JBSUFRZ0JDZ0NvQUUyQXFRQkN3c2dCQ0FFS0FLY0FUWUNvQUVnQkNBSU5nS2NBUXVuSVFJZ1FVS0FnUHdIZzFCRkJFQWdCQ0FFS0FKMElnY2dHbW8yQW5RZ0JDZ0NjQ0FIZEVFQUlCOXJkaUFDYWlFQ0N5QUxJQnBxUVJSUEJFQWdCRUh3QUdvUUR4b0xJRUJDZ0lEOEI0TlFSUVJBSUFRZ0JDZ0NkQ0lISUF0cU5nSjBJQVFvQW5BZ0IzUkJBQ0FaYTNZZ0Eyb2hBd3NnQkVId0FHb1FEeG9nQkNBRUtBSndJZ2RCQUNBS1FSaDJJZ3NnQkNnQ2RHb2lHbXQySUF0QkFuUkJvQjFxS0FJQWNTQUtRZi8vQTNGcU5nS0VBU0FFSUJvZ0ZrRVlkaUlLYWlJTE5nSjBJQVFnQ2tFQ2RFR2dIV29vQWdBZ0IwRUFJQXRyZG5FZ0ZrSC8vd054YWpZQ2xBRWdCRUh3QUdvUUR4b2dCQ0JDcHlJSFFSaDJJZ29nQkNnQ2RHb2lDellDZENBRUlBcEJBblJCb0IxcUtBSUFJQVFvQW5CQkFDQUxhM1p4SUFkQi8vOERjV28yQW93QklBUWdBellDT0NBRUlBSTJBandnQkNBSU5nSkFBa0FDUUFKQUlBUW9BdHdCSWdzZ0Eyb2lGaUFRU3cwQUlBWWdBaUFEYWlJS2FpQVlTdzBBSUFwQklHb2dEQ0FHYTAwTkFRc2dCQ0FFUVVCcktBSUFOZ0lJSUFRZ0JDa0RPRGNEQUNBR0lBd2dCQ0FFUWR3QmFpQVFJQklnRXlBTkVCOGhDZ3dCQ3lBRElBWnFJUWNnQmlBTEtRQUFOd0FBSUFZZ0N5a0FDRGNBQ0FKQUlBTkJFVWtOQUNBR0lBc3BBQkEzQUJBZ0JpQUxLUUFZTndBWUlBTkJFR3RCRVVnTkFDQUxRUkJxSVFNZ0JrRWdhaUVMQTBBZ0N5QURLUUFRTndBQUlBc2dBeWtBR0RjQUNDQUxJQU1wQUNBM0FCQWdDeUFES1FBb053QVlJQU5CSUdvaEF5QUxRU0JxSWdzZ0Iwa05BQXNMSUFjZ0NHc2hBeUFFSUJZMkF0d0JJQWNnRW1zZ0NFa0VRQ0FJSUFjZ0UydExEUVFnRFNBTklBTWdFbXNpQTJvaUN5QUNhazhFUUNBSElBc2dBaEFLR2d3Q0N5QUhJQXRCQUNBRGF4QUtJQVFnQWlBRGFpSUNOZ0k4SUFOcklRY2dFaUVEQ3lBSVFSQlBCRUFnQnlBREtRQUFOd0FBSUFjZ0F5a0FDRGNBQ0NBQ1FSRklEUUVnQWlBSGFpRUlJQWRCRUdvaEFnTkFJQUlnQXlrQUVEY0FBQ0FDSUFNcEFCZzNBQWdnQWlBREtRQWdOd0FRSUFJZ0F5a0FLRGNBR0NBRFFTQnFJUU1nQWtFZ2FpSUNJQWhKRFFBTERBRUxBa0FnQ0VFSFRRUkFJQWNnQXkwQUFEb0FBQ0FISUFNdEFBRTZBQUVnQnlBRExRQUNPZ0FDSUFjZ0F5MEFBem9BQXlBSElBTWdDRUVDZENJSVFjQWVhaWdDQUdvaUF5Z0FBRFlBQkNBRElBaEI0QjVxS0FJQWF5RUREQUVMSUFjZ0F5a0FBRGNBQUFzZ0FrRUpTUTBBSUFJZ0Iyb2hDeUFIUVFocUlnZ2dBMEVJYWlJRGEwRVBUQVJBQTBBZ0NDQURLUUFBTndBQUlBTkJDR29oQXlBSVFRaHFJZ2dnQzBrTkFBd0NDd0FMSUFnZ0F5a0FBRGNBQUNBSUlBTXBBQWczQUFnZ0FrRVpTQTBBSUFkQkdHb2hBZ05BSUFJZ0F5a0FFRGNBQUNBQ0lBTXBBQmczQUFnZ0FpQURLUUFnTndBUUlBSWdBeWtBS0RjQUdDQURRU0JxSVFNZ0FrRWdhaUlDSUF0SkRRQUxDeUFLUVloL1N3UkFJQW9oQ1F3REN5QUdJQXBxSVFZZ0JFSHdBR29RRHlFRElBOUJBV3NpRHcwQUMwRUFJUUlnQTBFQ1NRMEJBMEFnQWtFRFJ3UkFJQVVnQWtFQ2RDSURha0dzMEFGcUlBTWdCR29vQXB3Qk5nSUFJQUpCQVdvaEFnd0JDd3NnQkNnQzNBRWhBd3RCdW44aENTQVFJQU5ySWdJZ0RDQUdhMHNOQUNBR0JIOGdCaUFESUFJUUFpQUNhZ1ZCQUFzZ0Rtc2hDUXNnQ1VHSWYwc05CZ3NDUUNBRktBTHM2Z0ZGRFFBZ0JTQUZLUU9JNmdFZ0NhMThOd09JNmdFQ1FDQUZLQUxRNmdFaUFpQUphaUlJUVI5TkJFQWdEa1VOQVNBQ0lDSnFJQTRnQ1JBQ0dpQUZLQUxRNmdFZ0NXb2hDQXdCQ3lBT0lRTWdBZ1JBSUFJZ0ltb2dBMEVnSUFKckVBSWFJQVVvQXREcUFTRUNJQVZCQURZQzBPb0JJQVVnQlNrRGtPb0JJQVVwQUxEcUFVTFAxdE8rMHNlcjJVSitmRUlmaVVLSGxhK3ZtTGJlbTU1L2ZqY0RrT29CSUFVZ0JTa0RtT29CSUFVcEFManFBVUxQMXRPKzBzZXIyVUorZkVJZmlVS0hsYSt2bUxiZW01NS9mamNEbU9vQklBVWdCU2tEb09vQklBVXBBTURxQVVMUDF0Tyswc2VyMlVKK2ZFSWZpVUtIbGErdm1MYmVtNTUvZmpjRG9Pb0JJQVVnQlNrRHFPb0JJQVVwQU1qcUFVTFAxdE8rMHNlcjJVSitmRUlmaVVLSGxhK3ZtTGJlbTU1L2ZqY0RxT29CSUFNZ0FtdEJJR29oQXdzZ0NTQU9haUlDSUFOQklHcFBCRUFnQWtFZ2F5RUdJQVVwQTZqcUFTRS9JQVVwQTZEcUFTRkFJQVVwQTVqcUFTRkJJQVVwQTVEcUFTRkNBMEFnQXlrQUdFTFAxdE8rMHNlcjJVSitJRDk4UWgrSlFvZVZyNitZdHQ2Ym5uOStJVDhnQXlrQUVFTFAxdE8rMHNlcjJVSitJRUI4UWgrSlFvZVZyNitZdHQ2Ym5uOStJVUFnQXlrQUNFTFAxdE8rMHNlcjJVSitJRUY4UWgrSlFvZVZyNitZdHQ2Ym5uOStJVUVnQXlrQUFFTFAxdE8rMHNlcjJVSitJRUo4UWgrSlFvZVZyNitZdHQ2Ym5uOStJVUlnQTBFZ2FpSURJQVpORFFBTElBVWdQemNEcU9vQklBVWdRRGNEb09vQklBVWdRVGNEbU9vQklBVWdRamNEa09vQkN5QUNJQU5ORFFFZ0lpQURJQUlnQTJzaUNCQUNHZ3NnQlNBSU5nTFE2Z0VMSURVZ0ZXc2hBeUFWSUJ0cUlRSWdDU0FPYWlFT0lBUW9BakJGRFFBTElDa3BBd0FpUDBKL1VTQS9JQTRnSFd1c1VYSkZCRUJCYkNFSkRBWUxJQVVvQXVEcEFRUkFRV29oQ1NBRFFRUkpEUVlnQlNnQzZPb0JSUVJBSUNJZ0JTZ0MwT29CYWlFS0FuNGdCU2tEaU9vQklqOUNJRm9FUUNBRktRT1k2Z0VpUUVJSGlTQUZLUU9RNmdFaVFVSUJpWHdnQlNrRG9Pb0JJa0pDRElsOElBVXBBNmpxQVNKRFFoS0pmQ0JCUXMvVzA3N1N4NnZaUW41Q0g0bENoNVd2cjVpMjNwdWVmMzZGUW9lVnI2K1l0dDZibm45K1FwMmp0ZXFEc1kySytnQjlJRUJDejliVHZ0TEhxOWxDZmtJZmlVS0hsYSt2bUxiZW01NS9mb1ZDaDVXdnI1aTIzcHVlZjM1Q25hTzE2b094allyNkFIMGdRa0xQMXRPKzBzZXIyVUorUWgrSlFvZVZyNitZdHQ2Ym5uOStoVUtIbGErdm1MYmVtNTUvZmtLZG83WHFnN0dOaXZvQWZTQkRRcy9XMDc3U3g2dlpRbjVDSDRsQ2g1V3ZyNWkyM3B1ZWYzNkZRb2VWcjYrWXR0NmJubjkrUXAyanRlcURzWTJLK2dCOURBRUxJQVVwQTZEcUFVTEZ6OW15OGVXNjZpZDhDeUEvZkNFL0lDSWhCZ05BSUFvZ0JrRUlhaUlIVHdSQUlBWXBBQUJDejliVHZ0TEhxOWxDZmtJZmlVS0hsYSt2bUxiZW01NS9maUEvaFVJYmlVS0hsYSt2bUxiZW01NS9ma0tkbzdYcWc3R05pdm9BZlNFL0lBY2hCZ3dCQ3dzQ1FDQUtJQVpCQkdvaUNFa0VRQ0FHSVFnTUFRc2dCalVBQUVLSGxhK3ZtTGJlbTU1L2ZpQS9oVUlYaVVMUDF0Tyswc2VyMlVKK1F2bnozZkdaOXBtckZud2hQd3NEUUNBSUlBcEpCRUFnQ0RFQUFFTEZ6OW15OGVXNjZpZCtJRCtGUWd1SlFvZVZyNitZdHQ2Ym5uOStJVDhnQ0VFQmFpRUlEQUVMQ3lBQ0tBQUFJRDlDSVlnZ1A0VkN6OWJUdnRMSHE5bENmaUkvUWgySUlEK0ZRdm56M2ZHWjlwbXJGbjRpUDBJZ2lDQS9oYWRIRFFjTElBTkJCR3NoQXlBQ1FRUnFJUUlMSUE0Z0hXc2lDVUdKZjA4TkJDQUJJQWxySVFFZ0NTQWRhaUVkUVFFaFBnd0JDd3RCdUg4aEJ5QUREUVFnSFNBQWF5RUhEQVFMUVd3aENRd0JDMEc0ZnlFSkMwRzRmeUVISUFsQmRrWWdQbkVOQVFzZ0NTRUhDeWdDQUEwQUlBVkIvT29CYWlnQ0FDRUJJQVZCK09vQmFpZ0NBQ0VBSUFVUUdDQUZLQUt3NndFZ0FDQUJFQk1nQlVFQU5nS3c2d0VnQlNnQ3BPc0JJZ0lFUUFKQUFrQUNRQUpBSUFJb0FnQWlBd1JBSUFCRkRRSWdBU0FESUFBUkFnQU1BUXNnQUVVTkFnc2dBU0FDSUFBUkFnQU1BZ3NnQXhBR0N5QUNFQVlMSUFWQkFEWUNwT3NCQ3lBQUJFQWdBU0FGSUFBUkFnQU1BUXNnQlJBR0N5QUVRZUFCYWlRQUlBY0xDNmdWQ1FCQmlBZ0xEUUVBQUFBQkFBQUFBZ0FBQUFJQVFhQUlDN01HQVFBQUFBRUFBQUFDQUFBQUFnQUFBQ1lBQUFDQ0FBQUFJUVVBQUVvQUFBQm5DQUFBSmdBQUFNQUJBQUNBQUFBQVNRVUFBRW9BQUFDK0NBQUFLUUFBQUN3Q0FBQ0FBQUFBU1FVQUFFb0FBQUMrQ0FBQUx3QUFBTW9DQUFDQUFBQUFpZ1VBQUVvQUFBQ0VDUUFBTlFBQUFITURBQUNBQUFBQW5RVUFBRW9BQUFDZ0NRQUFQUUFBQUlFREFBQ0FBQUFBNndVQUFFc0FBQUErQ2dBQVJBQUFBSjREQUFDQUFBQUFUUVlBQUVzQUFBQ3FDZ0FBU3dBQUFMTURBQUNBQUFBQXdRWUFBRTBBQUFBZkRRQUFUUUFBQUZNRUFBQ0FBQUFBSXdnQUFGRUFBQUNtRHdBQVZBQUFBSmtFQUFDQUFBQUFTd2tBQUZjQUFBQ3hFZ0FBV0FBQUFOb0VBQUNBQUFBQWJ3a0FBRjBBQUFBakZBQUFWQUFBQUVVRkFBQ0FBQUFBVkFvQUFHb0FBQUNNRkFBQWFnQUFBSzhGQUFDQUFBQUFkZ2tBQUh3QUFBQk9FQUFBZkFBQUFOSUNBQUNBQUFBQVl3Y0FBSkVBQUFDUUJ3QUFrZ0FBQUFBQUFBQUJBQUFBQVFBQUFBVUFBQUFOQUFBQUhRQUFBRDBBQUFCOUFBQUEvUUFBQVAwQkFBRDlBd0FBL1FjQUFQMFBBQUQ5SHdBQS9UOEFBUDEvQUFEOS93QUEvZjhCQVAzL0F3RDkvd2NBL2Y4UEFQMy9Id0Q5L3o4QS9mOS9BUDMvL3dEOS8vOEIvZi8vQS8zLy93ZjkvLzhQL2YvL0gvMy8vei85Ly85L0FBQUFBQUVBQUFBQ0FBQUFBd0FBQUFRQUFBQUZBQUFBQmdBQUFBY0FBQUFJQUFBQUNRQUFBQW9BQUFBTEFBQUFEQUFBQUEwQUFBQU9BQUFBRHdBQUFCQUFBQUFSQUFBQUVnQUFBQk1BQUFBVUFBQUFGUUFBQUJZQUFBQVhBQUFBR0FBQUFCa0FBQUFhQUFBQUd3QUFBQndBQUFBZEFBQUFIZ0FBQUI4QUFBQURBQUFBQkFBQUFBVUFBQUFHQUFBQUJ3QUFBQWdBQUFBSkFBQUFDZ0FBQUFzQUFBQU1BQUFBRFFBQUFBNEFBQUFQQUFBQUVBQUFBQkVBQUFBU0FBQUFFd0FBQUJRQUFBQVZBQUFBRmdBQUFCY0FBQUFZQUFBQUdRQUFBQm9BQUFBYkFBQUFIQUFBQUIwQUFBQWVBQUFBSHdBQUFDQUFBQUFoQUFBQUlnQUFBQ01BQUFBbEFBQUFKd0FBQUNrQUFBQXJBQUFBTHdBQUFETUFBQUE3QUFBQVF3QUFBRk1BQUFCakFBQUFnd0FBQUFNQkFBQURBZ0FBQXdRQUFBTUlBQUFERUFBQUF5QUFBQU5BQUFBRGdBQUFBd0FCQUVIZ0R3dFJBUUFBQUFFQUFBQUJBQUFBQVFBQUFBSUFBQUFDQUFBQUF3QUFBQU1BQUFBRUFBQUFCQUFBQUFVQUFBQUhBQUFBQ0FBQUFBa0FBQUFLQUFBQUN3QUFBQXdBQUFBTkFBQUFEZ0FBQUE4QUFBQVFBRUhFRUF1TEFRRUFBQUFDQUFBQUF3QUFBQVFBQUFBRkFBQUFCZ0FBQUFjQUFBQUlBQUFBQ1FBQUFBb0FBQUFMQUFBQURBQUFBQTBBQUFBT0FBQUFEd0FBQUJBQUFBQVNBQUFBRkFBQUFCWUFBQUFZQUFBQUhBQUFBQ0FBQUFBb0FBQUFNQUFBQUVBQUFBQ0FBQUFBQUFFQUFBQUNBQUFBQkFBQUFBZ0FBQUFRQUFBQUlBQUFBRUFBQUFDQUFBQUFBQUVBUVpBU0MrWUVBUUFBQUFFQUFBQUJBQUFBQVFBQUFBSUFBQUFDQUFBQUF3QUFBQU1BQUFBRUFBQUFCZ0FBQUFjQUFBQUlBQUFBQ1FBQUFBb0FBQUFMQUFBQURBQUFBQTBBQUFBT0FBQUFEd0FBQUJBQUFBQUJBQUFBQkFBQUFBZ0FBQUFBQUFBQUFRQUJBUVlBQUFBQUFBQUVBQUFBQUJBQUFBUUFBQUFBSUFBQUJRRUFBQUFBQUFBRkF3QUFBQUFBQUFVRUFBQUFBQUFBQlFZQUFBQUFBQUFGQndBQUFBQUFBQVVKQUFBQUFBQUFCUW9BQUFBQUFBQUZEQUFBQUFBQUFBWU9BQUFBQUFBQkJSQUFBQUFBQUFFRkZBQUFBQUFBQVFVV0FBQUFBQUFDQlJ3QUFBQUFBQU1GSUFBQUFBQUFCQVV3QUFBQUlBQUdCVUFBQUFBQUFBY0ZnQUFBQUFBQUNBWUFBUUFBQUFBS0JnQUVBQUFBQUF3R0FCQUFBQ0FBQUFRQUFBQUFBQUFBQkFFQUFBQUFBQUFGQWdBQUFDQUFBQVVFQUFBQUFBQUFCUVVBQUFBZ0FBQUZCd0FBQUFBQUFBVUlBQUFBSUFBQUJRb0FBQUFBQUFBRkN3QUFBQUFBQUFZTkFBQUFJQUFCQlJBQUFBQUFBQUVGRWdBQUFDQUFBUVVXQUFBQUFBQUNCUmdBQUFBZ0FBTUZJQUFBQUFBQUF3VW9BQUFBQUFBR0JFQUFBQUFRQUFZRVFBQUFBQ0FBQndXQUFBQUFBQUFKQmdBQ0FBQUFBQXNHQUFnQUFEQUFBQVFBQUFBQUVBQUFCQUVBQUFBZ0FBQUZBZ0FBQUNBQUFBVURBQUFBSUFBQUJRVUFBQUFnQUFBRkJnQUFBQ0FBQUFVSUFBQUFJQUFBQlFrQUFBQWdBQUFGQ3dBQUFDQUFBQVVNQUFBQUFBQUFCZzhBQUFBZ0FBRUZFZ0FBQUNBQUFRVVVBQUFBSUFBQ0JSZ0FBQUFnQUFJRkhBQUFBQ0FBQXdVb0FBQUFJQUFFQlRBQUFBQUFBQkFHQUFBQkFBQUFEd1lBZ0FBQUFBQU9CZ0JBQUFBQUFBMEdBQ0FBUVlBWEM0Y0NBUUFCQVFVQUFBQUFBQUFGQUFBQUFBQUFCZ1E5QUFBQUFBQUpCZjBCQUFBQUFBOEYvWDhBQUFBQUZRWDkveDhBQUFBREJRVUFBQUFBQUFjRWZRQUFBQUFBREFYOUR3QUFBQUFTQmYzL0F3QUFBQmNGL2Y5L0FBQUFCUVVkQUFBQUFBQUlCUDBBQUFBQUFBNEYvVDhBQUFBQUZBWDkvdzhBQUFBQ0JRRUFBQUFRQUFjRWZRQUFBQUFBQ3dYOUJ3QUFBQUFSQmYzL0FRQUFBQllGL2Y4L0FBQUFCQVVOQUFBQUVBQUlCUDBBQUFBQUFBMEYvUjhBQUFBQUV3WDkvd2NBQUFBQkJRRUFBQUFRQUFZRVBRQUFBQUFBQ2dYOUF3QUFBQUFRQmYzL0FBQUFBQndGL2YvL0R3QUFHd1g5Ly84SEFBQWFCZjMvL3dNQUFCa0YvZi8vQVFBQUdBWDkvLzhBUVpBWkM0WUVBUUFCQVFZQUFBQUFBQUFHQXdBQUFBQUFBQVFFQUFBQUlBQUFCUVVBQUFBQUFBQUZCZ0FBQUFBQUFBVUlBQUFBQUFBQUJRa0FBQUFBQUFBRkN3QUFBQUFBQUFZTkFBQUFBQUFBQmhBQUFBQUFBQUFHRXdBQUFBQUFBQVlXQUFBQUFBQUFCaGtBQUFBQUFBQUdIQUFBQUFBQUFBWWZBQUFBQUFBQUJpSUFBQUFBQUFFR0pRQUFBQUFBQVFZcEFBQUFBQUFDQmk4QUFBQUFBQU1HT3dBQUFBQUFCQVpUQUFBQUFBQUhCb01BQUFBQUFBa0dBd0lBQUJBQUFBUUVBQUFBQUFBQUJBVUFBQUFnQUFBRkJnQUFBQUFBQUFVSEFBQUFJQUFBQlFrQUFBQUFBQUFGQ2dBQUFBQUFBQVlNQUFBQUFBQUFCZzhBQUFBQUFBQUdFZ0FBQUFBQUFBWVZBQUFBQUFBQUJoZ0FBQUFBQUFBR0d3QUFBQUFBQUFZZUFBQUFBQUFBQmlFQUFBQUFBQUVHSXdBQUFBQUFBUVluQUFBQUFBQUNCaXNBQUFBQUFBTUdNd0FBQUFBQUJBWkRBQUFBQUFBRkJtTUFBQUFBQUFnR0F3RUFBQ0FBQUFRRUFBQUFNQUFBQkFRQUFBQVFBQUFFQlFBQUFDQUFBQVVIQUFBQUlBQUFCUWdBQUFBZ0FBQUZDZ0FBQUNBQUFBVUxBQUFBQUFBQUJnNEFBQUFBQUFBR0VRQUFBQUFBQUFZVUFBQUFBQUFBQmhjQUFBQUFBQUFHR2dBQUFBQUFBQVlkQUFBQUFBQUFCaUFBQUFBQUFCQUdBd0FCQUFBQUR3WURnQUFBQUFBT0JnTkFBQUFBQUEwR0F5QUFBQUFBREFZREVBQUFBQUFMQmdNSUFBQUFBQW9HQXdRQVFhUWRDOWtCQVFBQUFBTUFBQUFIQUFBQUR3QUFBQjhBQUFBL0FBQUFmd0FBQVA4QUFBRC9BUUFBL3dNQUFQOEhBQUQvRHdBQS94OEFBUDgvQUFEL2Z3QUEvLzhBQVAvL0FRRC8vd01BLy84SEFQLy9Ed0QvL3g4QS8vOC9BUC8vZndELy8vOEEvLy8vQWYvLy93UC8vLzhILy8vL0QvLy8veC8vLy84Ly8vLy9md0FBQUFBQkFBQUFBZ0FBQUFRQUFBQUFBQUFBQWdBQUFBUUFBQUFJQUFBQUFBQUFBQUVBQUFBQ0FBQUFBUUFBQUFRQUFBQUVBQUFBQkFBQUFBUUFBQUFJQUFBQUNBQUFBQWdBQUFBSEFBQUFDQUFBQUFrQUFBQUtBQUFBQ3dCQmdCOExBNEFSQVE9PSI7dmFyIHNlPW5ldyBKQSxDZT0hMTthc3luYyBmdW5jdGlvbiBfSShBLHQsZSl7bGV0IEk9bnVsbDt0eXBlb2YgQSE9InN0cmluZyI/ST1BLmhyZWY6QS5zdGFydHNXaXRoKCJodHRwIik/ST1BOkk9YCR7dH0vJHtBfWAsSS5lbmRzV2l0aCgiLmpzIikmJihJPUkuc3Vic3RyaW5nKDAsSS5sZW5ndGgtMykpLEkuZW5kc1dpdGgoIi53YXNtIikmJihJPUkuc3Vic3RyaW5nKDAsSS5sZW5ndGgtNSkpO2xldCByPWAke0l9Lndhc21gLG89YXdhaXQgTEEuZ2V0KGAke3J9LnpzdGAse3Jlc3BvbnNlVHlwZToiYXJyYXlidWZmZXIiLHBhcmFtczplfSk7Q2V8fChhd2FpdCBzZS5pbml0KCksQ2U9ITApO2xldCBDPXNlLmRlY29kZShuZXcgVWludDhBcnJheShvLmRhdGEpKS5idWZmZXI7cmV0dXJuKGF3YWl0IGltcG9ydChgJHtJfS5qc2ApKS5kZWZhdWx0KHt3YXNtQmluYXJ5OkN9KX12YXIgQmU9X0k7dmFyIGJBPW5ldyBNYXA7YXN5bmMgZnVuY3Rpb24gWEkoQSx0LGUpe2xldCBJPUEscj1BLG89bnVsbDtyZXR1cm4gdHlwZW9mIEEhPSJzdHJpbmciJiYoST1uZXcgVVJMKEEuaHJlZikscj1JLmhyZWYpLGJBLmhhcyhyKT9vPWF3YWl0IGJBLmdldChyKTooYkEuc2V0KHIsQmUoSSx0LGUpKSxvPWF3YWl0IGJBLmdldChyKSksb312YXIgYWU9WEk7dmFyIHpJPXtUZXh0RmlsZToiVGV4dEZpbGUiLEJpbmFyeUZpbGU6IkJpbmFyeUZpbGUiLFRleHRTdHJlYW06IlRleHRTdHJlYW0iLEJpbmFyeVN0cmVhbToiQmluYXJ5U3RyZWFtIixJbWFnZToiSW1hZ2UiLFBvaW50U2V0OiJQb2ludFNldCIsTWVzaDoiTWVzaCIsUG9seURhdGE6IlBvbHlEYXRhIixUcmFuc2Zvcm1MaXN0OiJUcmFuc2Zvcm1MaXN0IixKc29uQ29tcGF0aWJsZToiSnNvbkNvbXBhdGlibGUifSxoPXpJO3ZhciB2ST17SW50ODoiaW50OCIsVUludDg6InVpbnQ4IixJbnQxNjoiaW50MTYiLFVJbnQxNjoidWludDE2IixJbnQzMjoiaW50MzIiLFVJbnQzMjoidWludDMyIixJbnQ2NDoiaW50NjQiLFVJbnQ2NDoidWludDY0IixTaXplVmFsdWVUeXBlOiJ1aW50NjQiLElkZW50aWZpZXJUeXBlOiJ1aW50NjQiLEluZGV4VmFsdWVUeXBlOiJpbnQ2NCIsT2Zmc2V0VmFsdWVUeXBlOiJpbnQ2NCJ9LFI9dkk7dmFyICRJPXtGbG9hdDMyOiJmbG9hdDMyIixGbG9hdDY0OiJmbG9hdDY0IixTcGFjZVByZWNpc2lvblR5cGU6ImZsb2F0NjQifSx6PSRJO2Z1bmN0aW9uIEFyKEEsdCl7bGV0IGU9bnVsbDtzd2l0Y2goQSl7Y2FzZSBSLlVJbnQ4OntlPW5ldyBVaW50OEFycmF5KHQpO2JyZWFrfWNhc2UgUi5JbnQ4OntlPW5ldyBJbnQ4QXJyYXkodCk7YnJlYWt9Y2FzZSBSLlVJbnQxNjp7ZT1uZXcgVWludDE2QXJyYXkodCk7YnJlYWt9Y2FzZSBSLkludDE2OntlPW5ldyBJbnQxNkFycmF5KHQpO2JyZWFrfWNhc2UgUi5VSW50MzI6e2U9bmV3IFVpbnQzMkFycmF5KHQpO2JyZWFrfWNhc2UgUi5JbnQzMjp7ZT1uZXcgSW50MzJBcnJheSh0KTticmVha31jYXNlIFIuVUludDY0Ont0eXBlb2YgZ2xvYmFsVGhpcy5CaWdVaW50NjRBcnJheT09ImZ1bmN0aW9uIj9lPW5ldyBCaWdVaW50NjRBcnJheSh0KTplPW5ldyBVaW50OEFycmF5KHQpO2JyZWFrfWNhc2UgUi5JbnQ2NDp7dHlwZW9mIGdsb2JhbFRoaXMuQmlnSW50NjRBcnJheT09ImZ1bmN0aW9uIj9lPW5ldyBCaWdJbnQ2NEFycmF5KHQpOmU9bmV3IFVpbnQ4QXJyYXkodCk7YnJlYWt9Y2FzZSB6LkZsb2F0MzI6e2U9bmV3IEZsb2F0MzJBcnJheSh0KTticmVha31jYXNlIHouRmxvYXQ2NDp7ZT1uZXcgRmxvYXQ2NEFycmF5KHQpO2JyZWFrfWNhc2UibnVsbCI6e2U9bnVsbDticmVha31jYXNlIG51bGw6e2U9bnVsbDticmVha31kZWZhdWx0OnRocm93IG5ldyBFcnJvcigiVHlwZSBpcyBub3Qgc3VwcG9ydGVkIGFzIGEgVHlwZWRBcnJheSIpfXJldHVybiBlfXZhciBIPUFyO3ZhciBjZT10eXBlb2YgZ2xvYmFsVGhpcy5TaGFyZWRBcnJheUJ1ZmZlcj09ImZ1bmN0aW9uIixRZT1uZXcgVGV4dEVuY29kZXIsRWU9bmV3IFRleHREZWNvZGVyKCJ1dGYtOCIpO2Z1bmN0aW9uIHRyKEEsdCl7bGV0IGU9e2ZsYWdzOiJyIixlbmNvZGluZzoiYmluYXJ5In0sST1BLmZzX29wZW4odCxlLmZsYWdzKSxvPUEuZnNfc3RhdCh0KS5zaXplLGc9bnVsbDtjZT9nPW5ldyBTaGFyZWRBcnJheUJ1ZmZlcihvKTpnPW5ldyBBcnJheUJ1ZmZlcihvKTtsZXQgQz1uZXcgVWludDhBcnJheShnKTtyZXR1cm4gQS5mc19yZWFkKEksQywwLG8sMCksQS5mc19jbG9zZShJKSxDfWZ1bmN0aW9uIGZlKEEsdCxlKXtsZXQgST1udWxsO2NlP0k9bmV3IFNoYXJlZEFycmF5QnVmZmVyKGUpOkk9bmV3IEFycmF5QnVmZmVyKGUpO2xldCByPW5ldyBVaW50OEFycmF5KEkpLG89bmV3IFVpbnQ4QXJyYXkoQS5IRUFQVTguYnVmZmVyLHQsZSk7cmV0dXJuIHIuc2V0KG8pLHJ9ZnVuY3Rpb24geShBLHQsZSxJKXtsZXQgcj0wO3JldHVybiB0IT09bnVsbCYmKHI9QS5jY2FsbCgiaXRrX3dhc21faW5wdXRfYXJyYXlfYWxsb2MiLCJudW1iZXIiLFsibnVtYmVyIiwibnVtYmVyIiwibnVtYmVyIiwibnVtYmVyIl0sWzAsZSxJLHQuYnVmZmVyLmJ5dGVMZW5ndGhdKSxBLkhFQVBVOC5zZXQobmV3IFVpbnQ4QXJyYXkodC5idWZmZXIpLHIpKSxyfWZ1bmN0aW9uIFQoQSx0LGUpe2xldCBJPUpTT04uc3RyaW5naWZ5KHQpLHI9QS5sZW5ndGhCeXRlc1VURjgoSSkrMSxvPUEuY2NhbGwoIml0a193YXNtX2lucHV0X2pzb25fYWxsb2MiLCJudW1iZXIiLFsibnVtYmVyIiwibnVtYmVyIiwibnVtYmVyIl0sWzAsZSxyXSk7QS5zdHJpbmdUb1VURjgoSSxvLHIpfWZ1bmN0aW9uIEYoQSx0LGUsSSl7bGV0IHI9QS5jY2FsbCgiaXRrX3dhc21fb3V0cHV0X2FycmF5X2FkZHJlc3MiLCJudW1iZXIiLFsibnVtYmVyIiwibnVtYmVyIiwibnVtYmVyIl0sWzAsdCxlXSksbz1BLmNjYWxsKCJpdGtfd2FzbV9vdXRwdXRfYXJyYXlfc2l6ZSIsIm51bWJlciIsWyJudW1iZXIiLCJudW1iZXIiLCJudW1iZXIiXSxbMCx0LGVdKSxnPWZlKEEscixvKTtyZXR1cm4gSChJLGcuYnVmZmVyKX1mdW5jdGlvbiBzQShBLHQpe2xldCBlPUEuY2NhbGwoIml0a193YXNtX291dHB1dF9qc29uX2FkZHJlc3MiLCJudW1iZXIiLFsibnVtYmVyIiwibnVtYmVyIl0sWzAsdF0pLEk9QS5VVEY4VG9TdHJpbmcoZSk7cmV0dXJuIEpTT04ucGFyc2UoSSl9ZnVuY3Rpb24gZXIoQSx0LGUsSSl7SSE9bnVsbCYmSS5sZW5ndGg+MCYmSS5mb3JFYWNoKGZ1bmN0aW9uKGEsbil7c3dpdGNoKGEudHlwZSl7Y2FzZSBoLlRleHRTdHJlYW06e2xldCBzPVFlLmVuY29kZShhLmRhdGEuZGF0YSksZj15KEEscyxuLDApLEI9e3NpemU6cy5idWZmZXIuYnl0ZUxlbmd0aCxkYXRhOmBkYXRhOmFwcGxpY2F0aW9uL3ZuZC5pdGsuYWRkcmVzcywwOiR7Zn1gfTtUKEEsQixuKTticmVha31jYXNlIGguSnNvbkNvbXBhdGlibGU6e2xldCBzPVFlLmVuY29kZShKU09OLnN0cmluZ2lmeShhLmRhdGEpKSxmPXkoQSxzLG4sMCksQj17c2l6ZTpzLmJ1ZmZlci5ieXRlTGVuZ3RoLGRhdGE6YGRhdGE6YXBwbGljYXRpb24vdm5kLml0ay5hZGRyZXNzLDA6JHtmfWB9O1QoQSxCLG4pO2JyZWFrfWNhc2UgaC5CaW5hcnlTdHJlYW06e2xldCBzPWEuZGF0YS5kYXRhLGY9eShBLHMsbiwwKSxCPXtzaXplOnMuYnVmZmVyLmJ5dGVMZW5ndGgsZGF0YTpgZGF0YTphcHBsaWNhdGlvbi92bmQuaXRrLmFkZHJlc3MsMDoke2Z9YH07VChBLEIsbik7YnJlYWt9Y2FzZSBoLlRleHRGaWxlOntBLmZzX3dyaXRlRmlsZShhLmRhdGEucGF0aCxhLmRhdGEuZGF0YSk7YnJlYWt9Y2FzZSBoLkJpbmFyeUZpbGU6e0EuZnNfd3JpdGVGaWxlKGEuZGF0YS5wYXRoLGEuZGF0YS5kYXRhKTticmVha31jYXNlIGguSW1hZ2U6e2xldCBzPWEuZGF0YSxmPXkoQSxzLmRhdGEsbiwwKSxCPXkoQSxzLmRpcmVjdGlvbixuLDEpLEU9dHlwZW9mIHMubWV0YWRhdGE/LmVudHJpZXM8InUiP0FycmF5LmZyb20ocy5tZXRhZGF0YS5lbnRyaWVzKCkpOltdLGw9e2ltYWdlVHlwZTpzLmltYWdlVHlwZSxuYW1lOnMubmFtZSxvcmlnaW46cy5vcmlnaW4sc3BhY2luZzpzLnNwYWNpbmcsZGlyZWN0aW9uOmBkYXRhOmFwcGxpY2F0aW9uL3ZuZC5pdGsuYWRkcmVzcywwOiR7Qn1gLHNpemU6cy5zaXplLGRhdGE6YGRhdGE6YXBwbGljYXRpb24vdm5kLml0ay5hZGRyZXNzLDA6JHtmfWAsbWV0YWRhdGE6RX07VChBLGwsbik7YnJlYWt9Y2FzZSBoLk1lc2g6e2xldCBzPWEuZGF0YSxmPXkoQSxzLnBvaW50cyxuLDApLEI9eShBLHMuY2VsbHMsbiwxKSxFPXkoQSxzLnBvaW50RGF0YSxuLDIpLGw9eShBLHMuY2VsbERhdGEsbiwzKSxjPXttZXNoVHlwZTpzLm1lc2hUeXBlLG5hbWU6cy5uYW1lLG51bWJlck9mUG9pbnRzOnMubnVtYmVyT2ZQb2ludHMscG9pbnRzOmBkYXRhOmFwcGxpY2F0aW9uL3ZuZC5pdGsuYWRkcmVzcywwOiR7Zn1gLG51bWJlck9mQ2VsbHM6cy5udW1iZXJPZkNlbGxzLGNlbGxzOmBkYXRhOmFwcGxpY2F0aW9uL3ZuZC5pdGsuYWRkcmVzcywwOiR7Qn1gLGNlbGxCdWZmZXJTaXplOnMuY2VsbEJ1ZmZlclNpemUsbnVtYmVyT2ZQb2ludFBpeGVsczpzLm51bWJlck9mUG9pbnRQaXhlbHMscG9pbnREYXRhOmBkYXRhOmFwcGxpY2F0aW9uL3ZuZC5pdGsuYWRkcmVzcywwOiR7RX1gLG51bWJlck9mQ2VsbFBpeGVsczpzLm51bWJlck9mQ2VsbFBpeGVscyxjZWxsRGF0YTpgZGF0YTphcHBsaWNhdGlvbi92bmQuaXRrLmFkZHJlc3MsMDoke2x9YH07VChBLGMsbik7YnJlYWt9Y2FzZSBoLlBvaW50U2V0OntsZXQgcz1hLmRhdGEsZj15KEEscy5wb2ludHMsbiwwKSxCPXkoQSxzLnBvaW50RGF0YSxuLDEpLEU9e3BvaW50U2V0VHlwZTpzLnBvaW50U2V0VHlwZSxuYW1lOnMubmFtZSxudW1iZXJPZlBvaW50czpzLm51bWJlck9mUG9pbnRzLHBvaW50czpgZGF0YTphcHBsaWNhdGlvbi92bmQuaXRrLmFkZHJlc3MsMDoke2Z9YCxudW1iZXJPZlBvaW50UGl4ZWxzOnMubnVtYmVyT2ZQb2ludFBpeGVscyxwb2ludERhdGE6YGRhdGE6YXBwbGljYXRpb24vdm5kLml0ay5hZGRyZXNzLDA6JHtCfWB9O1QoQSxFLG4pO2JyZWFrfWNhc2UgaC5UcmFuc2Zvcm1MaXN0OntsZXQgcz1hLmRhdGEsZj1bXTtzLmZvckVhY2goKEIsRSk9PntsZXQgYz1gZGF0YTphcHBsaWNhdGlvbi92bmQuaXRrLmFkZHJlc3MsMDoke3koQSxCLmZpeGVkUGFyYW1ldGVycyxuLEUqMil9YCxTPWBkYXRhOmFwcGxpY2F0aW9uL3ZuZC5pdGsuYWRkcmVzcywwOiR7eShBLEIucGFyYW1ldGVycyxuLEUqMisxKX1gLEQ9e3RyYW5zZm9ybVR5cGU6Qi50cmFuc2Zvcm1UeXBlLG51bWJlck9mRml4ZWRQYXJhbWV0ZXJzOkIubnVtYmVyT2ZGaXhlZFBhcmFtZXRlcnMsbnVtYmVyT2ZQYXJhbWV0ZXJzOkIubnVtYmVyT2ZQYXJhbWV0ZXJzLG5hbWU6Qi5uYW1lLGlucHV0U3BhY2VOYW1lOkIuaW5wdXRTcGFjZU5hbWUsb3V0cHV0U3BhY2VOYW1lOkIub3V0cHV0U3BhY2VOYW1lLHBhcmFtZXRlcnM6UyxmaXhlZFBhcmFtZXRlcnM6Y307Zi5wdXNoKEQpfSksVChBLGYsbik7YnJlYWt9Y2FzZSBoLlBvbHlEYXRhOntsZXQgcz1hLmRhdGEsZj15KEEscy5wb2ludHMsbiwwKSxCPXkoQSxzLnZlcnRpY2VzLG4sMSksRT15KEEscy5saW5lcyxuLDIpLGw9eShBLHMucG9seWdvbnMsbiwzKSxjPXkoQSxzLnRyaWFuZ2xlU3RyaXBzLG4sNCkscD15KEEscy5wb2ludERhdGEsbiw1KSxTPXkoQSxzLnBvaW50RGF0YSxuLDYpLEQ9e3BvbHlEYXRhVHlwZTpzLnBvbHlEYXRhVHlwZSxuYW1lOnMubmFtZSxudW1iZXJPZlBvaW50czpzLm51bWJlck9mUG9pbnRzLHBvaW50czpgZGF0YTphcHBsaWNhdGlvbi92bmQuaXRrLmFkZHJlc3MsMDoke2Z9YCx2ZXJ0aWNlc0J1ZmZlclNpemU6cy52ZXJ0aWNlc0J1ZmZlclNpemUsdmVydGljZXM6YGRhdGE6YXBwbGljYXRpb24vdm5kLml0ay5hZGRyZXNzLDA6JHtCfWAsbGluZXNCdWZmZXJTaXplOnMubGluZXNCdWZmZXJTaXplLGxpbmVzOmBkYXRhOmFwcGxpY2F0aW9uL3ZuZC5pdGsuYWRkcmVzcywwOiR7RX1gLHBvbHlnb25zQnVmZmVyU2l6ZTpzLnBvbHlnb25zQnVmZmVyU2l6ZSxwb2x5Z29uczpgZGF0YTphcHBsaWNhdGlvbi92bmQuaXRrLmFkZHJlc3MsMDoke2x9YCx0cmlhbmdsZVN0cmlwc0J1ZmZlclNpemU6cy50cmlhbmdsZVN0cmlwc0J1ZmZlclNpemUsdHJpYW5nbGVTdHJpcHM6YGRhdGE6YXBwbGljYXRpb24vdm5kLml0ay5hZGRyZXNzLDA6JHtjfWAsbnVtYmVyT2ZQb2ludFBpeGVsczpzLm51bWJlck9mUG9pbnRQaXhlbHMscG9pbnREYXRhOmBkYXRhOmFwcGxpY2F0aW9uL3ZuZC5pdGsuYWRkcmVzcywwOiR7cH1gLG51bWJlck9mQ2VsbFBpeGVsczpzLm51bWJlck9mQ2VsbFBpeGVscyxjZWxsRGF0YTpgZGF0YTphcHBsaWNhdGlvbi92bmQuaXRrLmFkZHJlc3MsMDoke1N9YH07VChBLEQsbik7YnJlYWt9ZGVmYXVsdDp0aHJvdyBFcnJvcigiVW5zdXBwb3J0ZWQgaW5wdXQgSW50ZXJmYWNlVHlwZSIpfX0pLEEucmVzZXRNb2R1bGVTdGRvdXQoKSxBLnJlc2V0TW9kdWxlU3RkZXJyKCk7bGV0IHI9QS5zdGFja1NhdmUoKSxvPTA7dHJ5e289QS5jYWxsTWFpbih0LnNsaWNlKCkpfWNhdGNoKGEpe3Rocm93IHR5cGVvZiBhPT0ibnVtYmVyIiYmKGNvbnNvbGUubG9nKCJFeGNlcHRpb24gd2hpbGUgcnVubmluZyBwaXBlbGluZToiKSxjb25zb2xlLmxvZygic3Rkb3V0OiIsQS5nZXRNb2R1bGVTdGRvdXQoKSksY29uc29sZS5lcnJvcigic3RkZXJyOiIsQS5nZXRNb2R1bGVTdGRlcnIoKSksdHlwZW9mIEEuZ2V0RXhjZXB0aW9uTWVzc2FnZTwidSI/Y29uc29sZS5lcnJvcigiZXhjZXB0aW9uOiIsQS5nZXRFeGNlcHRpb25NZXNzYWdlKGEpKTpjb25zb2xlLmVycm9yKCJCdWlsZCBtb2R1bGUgaW4gRGVidWcgbW9kZSBmb3IgZXhjZXB0aW9uIG1lc3NhZ2UgaW5mb3JtYXRpb24uIikpLGF9ZmluYWxseXtBLnN0YWNrUmVzdG9yZShyKX1sZXQgZz1BLmdldE1vZHVsZVN0ZG91dCgpLEM9QS5nZXRNb2R1bGVTdGRlcnIoKSxRPVtdO3JldHVybiBlIT1udWxsJiZlLmxlbmd0aD4wJiZvPT09MCYmZS5mb3JFYWNoKGZ1bmN0aW9uKGEsbil7bGV0IHM9bnVsbDtzd2l0Y2goYS50eXBlKXtjYXNlIGguVGV4dFN0cmVhbTp7bGV0IEI9QS5jY2FsbCgiaXRrX3dhc21fb3V0cHV0X2FycmF5X2FkZHJlc3MiLCJudW1iZXIiLFsibnVtYmVyIiwibnVtYmVyIiwibnVtYmVyIl0sWzAsbiwwXSksRT1BLmNjYWxsKCJpdGtfd2FzbV9vdXRwdXRfYXJyYXlfc2l6ZSIsIm51bWJlciIsWyJudW1iZXIiLCJudW1iZXIiLCJudW1iZXIiXSxbMCxuLDBdKSxsPW5ldyBVaW50OEFycmF5KEEuSEVBUFU4LmJ1ZmZlcixCLEUpO3M9e2RhdGE6RWUuZGVjb2RlKGwpfTticmVha31jYXNlIGguSnNvbkNvbXBhdGlibGU6e2xldCBCPUEuY2NhbGwoIml0a193YXNtX291dHB1dF9hcnJheV9hZGRyZXNzIiwibnVtYmVyIixbIm51bWJlciIsIm51bWJlciIsIm51bWJlciJdLFswLG4sMF0pLEU9QS5jY2FsbCgiaXRrX3dhc21fb3V0cHV0X2FycmF5X3NpemUiLCJudW1iZXIiLFsibnVtYmVyIiwibnVtYmVyIiwibnVtYmVyIl0sWzAsbiwwXSksbD1uZXcgVWludDhBcnJheShBLkhFQVBVOC5idWZmZXIsQixFKTtzPUpTT04ucGFyc2UoRWUuZGVjb2RlKGwpKTticmVha31jYXNlIGguQmluYXJ5U3RyZWFtOntsZXQgQj1BLmNjYWxsKCJpdGtfd2FzbV9vdXRwdXRfYXJyYXlfYWRkcmVzcyIsIm51bWJlciIsWyJudW1iZXIiLCJudW1iZXIiLCJudW1iZXIiXSxbMCxuLDBdKSxFPUEuY2NhbGwoIml0a193YXNtX291dHB1dF9hcnJheV9zaXplIiwibnVtYmVyIixbIm51bWJlciIsIm51bWJlciIsIm51bWJlciJdLFswLG4sMF0pO3M9e2RhdGE6ZmUoQSxCLEUpfTticmVha31jYXNlIGguVGV4dEZpbGU6e3M9e3BhdGg6YS5kYXRhLnBhdGgsZGF0YTpBLmZzX3JlYWRGaWxlKGEuZGF0YS5wYXRoLHtlbmNvZGluZzoidXRmOCJ9KX07YnJlYWt9Y2FzZSBoLkJpbmFyeUZpbGU6e3M9e3BhdGg6YS5kYXRhLnBhdGgsZGF0YTp0cihBLGEuZGF0YS5wYXRoKX07YnJlYWt9Y2FzZSBoLkltYWdlOntsZXQgQj1zQShBLG4pO0IuZGF0YT1GKEEsbiwwLEIuaW1hZ2VUeXBlLmNvbXBvbmVudFR5cGUpLEIuZGlyZWN0aW9uPUYoQSxuLDEsei5GbG9hdDY0KSxCLm1ldGFkYXRhPW5ldyBNYXAoQi5tZXRhZGF0YSkscz1CO2JyZWFrfWNhc2UgaC5NZXNoOntsZXQgQj1zQShBLG4pO0IubnVtYmVyT2ZQb2ludHM+MD9CLnBvaW50cz1GKEEsbiwwLEIubWVzaFR5cGUucG9pbnRDb21wb25lbnRUeXBlKTpCLnBvaW50cz1IKEIubWVzaFR5cGUucG9pbnRDb21wb25lbnRUeXBlLG5ldyBBcnJheUJ1ZmZlcigwKSksQi5udW1iZXJPZkNlbGxzPjA/Qi5jZWxscz1GKEEsbiwxLEIubWVzaFR5cGUuY2VsbENvbXBvbmVudFR5cGUpOkIuY2VsbHM9SChCLm1lc2hUeXBlLmNlbGxDb21wb25lbnRUeXBlLG5ldyBBcnJheUJ1ZmZlcigwKSksQi5udW1iZXJPZlBvaW50UGl4ZWxzPjA/Qi5wb2ludERhdGE9RihBLG4sMixCLm1lc2hUeXBlLnBvaW50UGl4ZWxDb21wb25lbnRUeXBlKTpCLnBvaW50RGF0YT1IKEIubWVzaFR5cGUucG9pbnRQaXhlbENvbXBvbmVudFR5cGUsbmV3IEFycmF5QnVmZmVyKDApKSxCLm51bWJlck9mQ2VsbFBpeGVscz4wP0IuY2VsbERhdGE9RihBLG4sMyxCLm1lc2hUeXBlLmNlbGxQaXhlbENvbXBvbmVudFR5cGUpOkIuY2VsbERhdGE9SChCLm1lc2hUeXBlLmNlbGxQaXhlbENvbXBvbmVudFR5cGUsbmV3IEFycmF5QnVmZmVyKDApKSxzPUI7YnJlYWt9Y2FzZSBoLlBvaW50U2V0OntsZXQgQj1zQShBLG4pO0IubnVtYmVyT2ZQb2ludHM+MD9CLnBvaW50cz1GKEEsbiwwLEIucG9pbnRTZXRUeXBlLnBvaW50Q29tcG9uZW50VHlwZSk6Qi5wb2ludHM9SChCLnBvaW50U2V0VHlwZS5wb2ludENvbXBvbmVudFR5cGUsbmV3IEFycmF5QnVmZmVyKDApKSxCLm51bWJlck9mUG9pbnRQaXhlbHM+MD9CLnBvaW50RGF0YT1GKEEsbiwxLEIucG9pbnRTZXRUeXBlLnBvaW50UGl4ZWxDb21wb25lbnRUeXBlKTpCLnBvaW50RGF0YT1IKEIucG9pbnRTZXRUeXBlLnBvaW50UGl4ZWxDb21wb25lbnRUeXBlLG5ldyBBcnJheUJ1ZmZlcigwKSkscz1CO2JyZWFrfWNhc2UgaC5UcmFuc2Zvcm1MaXN0OntsZXQgQj1zQShBLG4pO0IuZm9yRWFjaCgoRSxsKT0+e0UubnVtYmVyT2ZGaXhlZFBhcmFtZXRlcnM+MCYmKEJbbF0uZml4ZWRQYXJhbWV0ZXJzPUYoQSxuLGwqMixFLnRyYW5zZm9ybVR5cGUucGFyYW1ldGVyc1ZhbHVlVHlwZSkpLEUubnVtYmVyT2ZGaXhlZFBhcmFtZXRlcnM+MCYmKEJbbF0ucGFyYW1ldGVycz1GKEEsbixsKjIrMSxFLnRyYW5zZm9ybVR5cGUucGFyYW1ldGVyc1ZhbHVlVHlwZSkpfSkscz1CO2JyZWFrfWNhc2UgaC5Qb2x5RGF0YTp7bGV0IEI9c0EoQSxuKTtCLm51bWJlck9mUG9pbnRzPjA/Qi5wb2ludHM9RihBLG4sMCx6LkZsb2F0MzIpOkIucG9pbnRzPW5ldyBGbG9hdDMyQXJyYXksQi52ZXJ0aWNlc0J1ZmZlclNpemU+MD9CLnZlcnRpY2VzPUYoQSxuLDEsUi5VSW50MzIpOkIudmVydGljZXM9bmV3IFVpbnQzMkFycmF5LEIubGluZXNCdWZmZXJTaXplPjA/Qi5saW5lcz1GKEEsbiwyLFIuVUludDMyKTpCLmxpbmVzPW5ldyBVaW50MzJBcnJheSxCLnBvbHlnb25zQnVmZmVyU2l6ZT4wP0IucG9seWdvbnM9RihBLG4sMyxSLlVJbnQzMik6Qi5wb2x5Z29ucz1uZXcgVWludDMyQXJyYXksQi50cmlhbmdsZVN0cmlwc0J1ZmZlclNpemU+MD9CLnRyaWFuZ2xlU3RyaXBzPUYoQSxuLDQsUi5VSW50MzIpOkIudHJpYW5nbGVTdHJpcHM9bmV3IFVpbnQzMkFycmF5LEIubnVtYmVyT2ZQb2ludFBpeGVscz4wP0IucG9pbnREYXRhPUYoQSxuLDUsQi5wb2x5RGF0YVR5cGUucG9pbnRQaXhlbENvbXBvbmVudFR5cGUpOkIucG9pbnREYXRhPUgoQi5wb2x5RGF0YVR5cGUucG9pbnRQaXhlbENvbXBvbmVudFR5cGUsbmV3IEFycmF5QnVmZmVyKDApKSxCLm51bWJlck9mQ2VsbFBpeGVscz4wP0IuY2VsbERhdGE9RihBLG4sNixCLnBvbHlEYXRhVHlwZS5jZWxsUGl4ZWxDb21wb25lbnRUeXBlKTpCLmNlbGxEYXRhPUgoQi5wb2x5RGF0YVR5cGUuY2VsbFBpeGVsQ29tcG9uZW50VHlwZSxuZXcgQXJyYXlCdWZmZXIoMCkpLHM9QjticmVha31kZWZhdWx0OnRocm93IEVycm9yKCJVbnN1cHBvcnRlZCBvdXRwdXQgSW50ZXJmYWNlVHlwZSIpfWxldCBmPXt0eXBlOmEudHlwZSxkYXRhOnN9O1EucHVzaChmKX0pLHtyZXR1cm5WYWx1ZTpvLHN0ZG91dDpnLHN0ZGVycjpDLG91dHB1dHM6UX19dmFyIGxlPWVyO3ZhciBJcj10eXBlb2YgZ2xvYmFsVGhpcy5TaGFyZWRBcnJheUJ1ZmZlcjwidSI7ZnVuY3Rpb24gcnIoQSx0KXtpZihBPT1udWxsKXJldHVybltdO2xldCBlPVtdO2ZvcihsZXQgST0wO0k8QS5sZW5ndGg7SSsrKXtsZXQgcj1vcihBW0ldLHQpO3IhPT1udWxsJiZlLnB1c2gocil9cmV0dXJuIGV9ZnVuY3Rpb24gb3IoQSx0KXtpZihBPT1udWxsKXJldHVybiBudWxsO2xldCBlPW51bGw7cmV0dXJuIEEuYnVmZmVyIT09dm9pZCAwP2U9QS5idWZmZXI6QS5ieXRlTGVuZ3RoIT09dm9pZCAwJiYoZT1BKSxJciYmZSBpbnN0YW5jZW9mIFNoYXJlZEFycmF5QnVmZmVyP251bGw6dD9lOmUuc2xpY2UoMCl9dmFyIHVlPXJyO2Z1bmN0aW9uIGdyKEEpe3JldHVybltBLmRhdGEsQS5kaXJlY3Rpb25dfXZhciBEZT1ncjtmdW5jdGlvbiBpcihBKXtyZXR1cm5bQS5wb2ludHMsQS5wb2ludERhdGEsQS5jZWxscyxBLmNlbGxEYXRhXX12YXIgaGU9aXI7ZnVuY3Rpb24gbnIoQSl7cmV0dXJuW0EucG9pbnRzLEEudmVydGljZXMsQS5saW5lcyxBLnBvbHlnb25zLEEudHJpYW5nbGVTdHJpcHMsQS5wb2ludERhdGEsQS5jZWxsRGF0YV19dmFyIGRlPW5yO2FzeW5jIGZ1bmN0aW9uIHNyKEEsdCxlLEkpe2xldCByPWxlKEEsdCxlLEkpLG89W107cmV0dXJuIHIub3V0cHV0cy5mb3JFYWNoKGZ1bmN0aW9uKGcpe2lmKGcudHlwZT09PWguQmluYXJ5U3RyZWFtfHxnLnR5cGU9PT1oLkJpbmFyeUZpbGUpe2xldCBDPWcuZGF0YTtvLnB1c2goQyl9ZWxzZSBpZihnLnR5cGU9PT1oLkltYWdlKXtsZXQgQz1nLmRhdGE7by5wdXNoKC4uLkRlKEMpKX1lbHNlIGlmKGcudHlwZT09PWguTWVzaCl7bGV0IEM9Zy5kYXRhO28ucHVzaCguLi5oZShDKSl9ZWxzZSBpZihnLnR5cGU9PT1oLlBvbHlEYXRhKXtsZXQgQz1nLmRhdGE7by5wdXNoKC4uLmRlKEMpKX19KSxNQShyLHVlKG8sITApKX12YXIgeWU9c3I7dmFyIENyPXtydW5QaXBlbGluZTphc3luYyBmdW5jdGlvbihBLHQsZSxJLHIsbyl7bGV0IGc9YXdhaXQgYWUoQSx0LG8pO3JldHVybiBhd2FpdCB5ZShnLGUsSSxyKX19O2ZBKENyKTslMEEvKiEgQnVuZGxlZCBsaWNlbnNlIGluZm9ybWF0aW9uOiUwQSUwQWNvbWxpbmsvZGlzdC9lc20vY29tbGluay5tanM6JTBBICAoKiolMEEgICAqIEBsaWNlbnNlJTBBICAgKiBDb3B5cmlnaHQgMjAxOSBHb29nbGUgTExDJTBBICAgKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMCUwQSAgICopJTBBKi8lMEEnO1d0KHZ0KTtleHBvcnR7am4gYXMgYXBwbHlQcmVzZW50YXRpb25TdGF0ZVRvSW1hZ2UsUiBhcyBnZXREZWZhdWx0V2ViV29ya2VyLHkgYXMgZ2V0UGlwZWxpbmVXb3JrZXJVcmwsRCBhcyBnZXRQaXBlbGluZXNCYXNlVXJsLHpuIGFzIHJlYWREaWNvbUVuY2Fwc3VsYXRlZFBkZixlaSBhcyByZWFkRGljb21UYWdzLGlpIGFzIHJlYWRJbWFnZURpY29tRmlsZVNlcmllcyxiZSBhcyByZWFkSW1hZ2VEaWNvbUZpbGVTZXJpZXNXb3JrZXJGdW5jdGlvbixJaSBhcyByZWFkT3ZlcmxhcHBpbmdTZWdtZW50YXRpb24sYWkgYXMgcmVhZFNlZ21lbnRhdGlvbixhZyBhcyBzZXREZWZhdWx0V2ViV29ya2VyLFd0IGFzIHNldFBpcGVsaW5lV29ya2VyVXJsLEFnIGFzIHNldFBpcGVsaW5lc0Jhc2VVcmwsWm4gYXMgc3RydWN0dXJlZFJlcG9ydFRvSHRtbCwkbiBhcyBzdHJ1Y3R1cmVkUmVwb3J0VG9UZXh0LE1BIGFzIHZlcnNpb24sZmkgYXMgd3JpdGVNdWx0aVNlZ21lbnRhdGlvbixjaSBhcyB3cml0ZU92ZXJsYXBwaW5nU2VnbWVudGF0aW9uLGxpIGFzIHdyaXRlU2VnbWVudGF0aW9ufTsKLyohIEJ1bmRsZWQgbGljZW5zZSBpbmZvcm1hdGlvbjoKCmNvbWxpbmsvZGlzdC9lc20vY29tbGluay5tanM6CiAgKCoqCiAgICogQGxpY2Vuc2UKICAgKiBDb3B5cmlnaHQgMjAxOSBHb29nbGUgTExDCiAgICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjAKICAgKikKKi8K""" +default_js_module = """data:text/javascript;base64,dmFyIGp0PU9iamVjdC5kZWZpbmVQcm9wZXJ0eTt2YXIgX3Q9KEEsZSk9Pntmb3IodmFyIHQgaW4gZSlqdChBLHQse2dldDplW3RdLGVudW1lcmFibGU6ITB9KX07dmFyIHp0PSI3LjMuMCIsTUE9enQ7dmFyIFZ0PXtJbnQ4OiJpbnQ4IixVSW50ODoidWludDgiLEludDE2OiJpbnQxNiIsVUludDE2OiJ1aW50MTYiLEludDMyOiJpbnQzMiIsVUludDMyOiJ1aW50MzIiLEludDY0OiJpbnQ2NCIsVUludDY0OiJ1aW50NjQiLFNpemVWYWx1ZVR5cGU6InVpbnQ2NCIsSWRlbnRpZmllclR5cGU6InVpbnQ2NCIsSW5kZXhWYWx1ZVR5cGU6ImludDY0IixPZmZzZXRWYWx1ZVR5cGU6ImludDY0In0sTj1WdDt2YXIgWnQ9e0Zsb2F0MzI6ImZsb2F0MzIiLEZsb2F0NjQ6ImZsb2F0NjQiLFNwYWNlUHJlY2lzaW9uVHlwZToiZmxvYXQ2NCJ9LGo9WnQ7ZnVuY3Rpb24gWHQoQSxlKXtsZXQgdD1udWxsO3N3aXRjaChBKXtjYXNlIE4uVUludDg6e3Q9bmV3IFVpbnQ4QXJyYXkoZSk7YnJlYWt9Y2FzZSBOLkludDg6e3Q9bmV3IEludDhBcnJheShlKTticmVha31jYXNlIE4uVUludDE2Ont0PW5ldyBVaW50MTZBcnJheShlKTticmVha31jYXNlIE4uSW50MTY6e3Q9bmV3IEludDE2QXJyYXkoZSk7YnJlYWt9Y2FzZSBOLlVJbnQzMjp7dD1uZXcgVWludDMyQXJyYXkoZSk7YnJlYWt9Y2FzZSBOLkludDMyOnt0PW5ldyBJbnQzMkFycmF5KGUpO2JyZWFrfWNhc2UgTi5VSW50NjQ6e3R5cGVvZiBnbG9iYWxUaGlzLkJpZ1VpbnQ2NEFycmF5PT0iZnVuY3Rpb24iP3Q9bmV3IEJpZ1VpbnQ2NEFycmF5KGUpOnQ9bmV3IFVpbnQ4QXJyYXkoZSk7YnJlYWt9Y2FzZSBOLkludDY0Ont0eXBlb2YgZ2xvYmFsVGhpcy5CaWdJbnQ2NEFycmF5PT0iZnVuY3Rpb24iP3Q9bmV3IEJpZ0ludDY0QXJyYXkoZSk6dD1uZXcgVWludDhBcnJheShlKTticmVha31jYXNlIGouRmxvYXQzMjp7dD1uZXcgRmxvYXQzMkFycmF5KGUpO2JyZWFrfWNhc2Ugai5GbG9hdDY0Ont0PW5ldyBGbG9hdDY0QXJyYXkoZSk7YnJlYWt9Y2FzZSJudWxsIjp7dD1udWxsO2JyZWFrfWNhc2UgbnVsbDp7dD1udWxsO2JyZWFrfWRlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKCJUeXBlIGlzIG5vdCBzdXBwb3J0ZWQgYXMgYSBUeXBlZEFycmF5Iil9cmV0dXJuIHR9dmFyIEo9WHQ7dmFyICR0PXtVbmtub3duOiJVbmtub3duIixTY2FsYXI6IlNjYWxhciIsUkdCOiJSR0IiLFJHQkE6IlJHQkEiLE9mZnNldDoiT2Zmc2V0IixWZWN0b3I6IlZlY3RvciIsUG9pbnQ6IlBvaW50IixDb3ZhcmlhbnRWZWN0b3I6IkNvdmFyaWFudFZlY3RvciIsU3ltbWV0cmljU2Vjb25kUmFua1RlbnNvcjoiU3ltbWV0cmljU2Vjb25kUmFua1RlbnNvciIsRGlmZnVzaW9uVGVuc29yM0Q6IkRpZmZ1c2lvblRlbnNvcjNEIixDb21wbGV4OiJDb21wbGV4IixGaXhlZEFycmF5OiJGaXhlZEFycmF5IixBcnJheToiQXJyYXkiLE1hdHJpeDoiTWF0cml4IixWYXJpYWJsZUxlbmd0aFZlY3RvcjoiVmFyaWFibGVMZW5ndGhWZWN0b3IiLFZhcmlhYmxlU2l6ZU1hdHJpeDoiVmFyaWFibGVTaXplTWF0cml4In0sa2U9JHQ7dmFyIHFBPWNsYXNze2RpbWVuc2lvbjtjb21wb25lbnRUeXBlO3BpeGVsVHlwZTtjb21wb25lbnRzO2NvbnN0cnVjdG9yKGU9Mix0PU4uVUludDgscj1rZS5TY2FsYXIsaT0xKXt0aGlzLmRpbWVuc2lvbj1lLHRoaXMuY29tcG9uZW50VHlwZT10LHRoaXMucGl4ZWxUeXBlPXIsdGhpcy5jb21wb25lbnRzPWl9fSxSZT1xQTtmdW5jdGlvbiBBcihBLGUsdCxyLGkpe0Fbcit0KmVdPWl9dmFyIFVlPUFyO3ZhciBXQT1jbGFzc3tpbWFnZVR5cGU7bmFtZT0iSW1hZ2UiO29yaWdpbjtzcGFjaW5nO2RpcmVjdGlvbjtzaXplO21ldGFkYXRhO2RhdGE7Y29uc3RydWN0b3IoZT1uZXcgUmUpe3RoaXMuaW1hZ2VUeXBlPWU7bGV0IHQ9ZS5kaW1lbnNpb247dGhpcy5vcmlnaW49bmV3IEFycmF5KHQpLHRoaXMub3JpZ2luLmZpbGwoMCksdGhpcy5zcGFjaW5nPW5ldyBBcnJheSh0KSx0aGlzLnNwYWNpbmcuZmlsbCgxKSx0aGlzLmRpcmVjdGlvbj1uZXcgRmxvYXQ2NEFycmF5KHQqdCksdGhpcy5kaXJlY3Rpb24uZmlsbCgwKTtmb3IobGV0IHI9MDtyPHQ7cisrKVVlKHRoaXMuZGlyZWN0aW9uLHQscixyLDEpO3RoaXMuc2l6ZT1uZXcgQXJyYXkodCksdGhpcy5zaXplLmZpbGwoMCksdGhpcy5tZXRhZGF0YT1uZXcgTWFwLHRoaXMuZGF0YT1udWxsfX0sTmU9V0E7ZnVuY3Rpb24gZXIoQSl7aWYoQS5sZW5ndGg8MSl0aHJvdyBFcnJvcigiQXQgbGVhc3Qgb25lIGltYWdlcyBpcyByZXF1aXJlZC4iKTtsZXQgZT1BWzBdO2lmKGUuZGF0YT09PW51bGwpdGhyb3cgRXJyb3IoIkltYWdlIGRhdGEgaXMgbnVsbC4iKTtsZXQgdD1uZXcgTmUoZS5pbWFnZVR5cGUpO3Qub3JpZ2luPUFycmF5LmZyb20oZS5vcmlnaW4pLHQuc3BhY2luZz1BcnJheS5mcm9tKGUuc3BhY2luZyk7bGV0IHI9dC5pbWFnZVR5cGUuZGltZW5zaW9uO3QuZGlyZWN0aW9uPWUuZGlyZWN0aW9uLnNsaWNlKCk7bGV0IGk9ci0xO3Quc2l6ZT1BcnJheS5mcm9tKGUuc2l6ZSk7bGV0IG49QS5yZWR1Y2UoKGEscyk9PmErcy5zaXplW2ldLDApO3Quc2l6ZVtpXT1uO2xldCBvPXQuc2l6ZS5yZWR1Y2UoKGEscyk9PmEqcywxKSp0LmltYWdlVHlwZS5jb21wb25lbnRzLGc9ZS5kYXRhLmNvbnN0cnVjdG9yO3QuZGF0YT1uZXcgZyhvKTtsZXQgYz10LmltYWdlVHlwZS5jb21wb25lbnRzO2ZvcihsZXQgYT0wO2E8dC5zaXplLmxlbmd0aC0xO2ErKyljKj10LnNpemVbYV07bGV0IEk9MDtpZih0LmRhdGEhPW51bGwpZm9yKGxldCBhPTA7YTxBLmxlbmd0aDthKyspdC5kYXRhLnNldChBW2FdLmRhdGEsYypJKSxJKz1BW2FdLnNpemVbaV07ZWxzZSB0aHJvdyBFcnJvcigiQ291bGQgbm90IGNyZWF0ZSByZXN1bHQgaW1hZ2UgZGF0YS4iKTtyZXR1cm4gdH12YXIgWUE9ZXI7dmFyIEtBPWNsYXNze2Zjbjt3b3JrZXJRdWV1ZTtydW5JbmZvO2NvbnN0cnVjdG9yKGUsdCl7dGhpcy5mY249dCx0aGlzLndvcmtlclF1ZXVlPW5ldyBBcnJheShlKSx0aGlzLndvcmtlclF1ZXVlLmZpbGwobnVsbCksdGhpcy5ydW5JbmZvPVtdfXJ1blRhc2tzKGUsdD1udWxsKXtsZXQgcj17dGFza1F1ZXVlOltdLHJlc3VsdHM6W10sYWRkaW5nVGFza3M6ITEscG9zdHBvbmVkOiExLHJ1bm5pbmdXb3JrZXJzOjAsaW5kZXg6MCxjb21wbGV0ZWRUYXNrczowLHByb2dyZXNzQ2FsbGJhY2s6dCxjYW5jZWxlZDohMX07cmV0dXJuIHRoaXMucnVuSW5mby5wdXNoKHIpLHIuaW5kZXg9dGhpcy5ydW5JbmZvLmxlbmd0aC0xLHtwcm9taXNlOm5ldyBQcm9taXNlKChpLG4pPT57ci5yZXNvbHZlPWksci5yZWplY3Q9bixyLnJlc3VsdHM9bmV3IEFycmF5KGUubGVuZ3RoKSxyLmNvbXBsZXRlZFRhc2tzPTAsci5hZGRpbmdUYXNrcz0hMCxlLmZvckVhY2goKG8sZyk9Pnt0aGlzLmFkZFRhc2soci5pbmRleCxnLG8pfSksci5hZGRpbmdUYXNrcz0hMX0pLHJ1bklkOnIuaW5kZXh9fXRlcm1pbmF0ZVdvcmtlcnMoKXtmb3IobGV0IGU9MDtlPHRoaXMud29ya2VyUXVldWUubGVuZ3RoO2UrKyl7bGV0IHQ9dGhpcy53b3JrZXJRdWV1ZVtlXTt0Py50ZXJtaW5hdGUoKSx0aGlzLndvcmtlclF1ZXVlW2VdPW51bGx9fWNhbmNlbChlKXtsZXQgdD10aGlzLnJ1bkluZm9bZV07dCE9bnVsbCYmKHQuY2FuY2VsZWQ9ITApfWFkZFRhc2soZSx0LHIpe2xldCBpPXRoaXMucnVuSW5mb1tlXTtpZihpPy5jYW5jZWxlZD09PSEwKXtpLnJlamVjdCgiUmVtYWluaW5nIHRhc2tzIGNhbmNlbGVkIiksdGhpcy5jbGVhclRhc2soaS5pbmRleCk7cmV0dXJufWlmKHRoaXMud29ya2VyUXVldWUubGVuZ3RoPjApe2xldCBuPXRoaXMud29ya2VyUXVldWUucG9wKCk7aS5ydW5uaW5nV29ya2VycysrLHJbci5sZW5ndGgtMV0ud2ViV29ya2VyPW4sdGhpcy5mY24oLi4ucikudGhlbigoe3dlYldvcmtlcjpvLC4uLmd9KT0+e2lmKHRoaXMud29ya2VyUXVldWUucHVzaChvKSx0aGlzLnJ1bkluZm9bZV0hPT1udWxsKXtpZihpLnJ1bm5pbmdXb3JrZXJzLS0saS5yZXN1bHRzW3RdPWcsaS5jb21wbGV0ZWRUYXNrcysrLGkucHJvZ3Jlc3NDYWxsYmFjayE9bnVsbCYmaS5wcm9ncmVzc0NhbGxiYWNrKGkuY29tcGxldGVkVGFza3MsaS5yZXN1bHRzLmxlbmd0aCksaS50YXNrUXVldWUubGVuZ3RoPjApe2xldCBjPWkudGFza1F1ZXVlLnNoaWZ0KCk7dGhpcy5hZGRUYXNrKGUsY1swXSxjWzFdKX1lbHNlIGlmKCFpLmFkZGluZ1Rhc2tzJiZpLnJ1bm5pbmdXb3JrZXJzPT09MCl7bGV0IGM9aS5yZXN1bHRzO2kucmVzb2x2ZShjKSx0aGlzLmNsZWFyVGFzayhpLmluZGV4KX19fSkuY2F0Y2gobz0+e2kucmVqZWN0KG8pLHRoaXMuY2xlYXJUYXNrKGkuaW5kZXgpfSl9ZWxzZSBpLnJ1bm5pbmdXb3JrZXJzIT09MHx8aS5wb3N0cG9uZWQ/aS50YXNrUXVldWUucHVzaChbdCxyXSk6KGkucG9zdHBvbmVkPSEwLHNldFRpbWVvdXQoKCk9PntpLnBvc3Rwb25lZD0hMSx0aGlzLmFkZFRhc2soaS5pbmRleCx0LHIpfSw1MCkpfWNsZWFyVGFzayhlKXt0aGlzLnJ1bkluZm9bZV0ucmVzdWx0cz1bXSx0aGlzLnJ1bkluZm9bZV0udGFza1F1ZXVlPVtdLHRoaXMucnVuSW5mb1tlXS5wcm9ncmVzc0NhbGxiYWNrPW51bGwsdGhpcy5ydW5JbmZvW2VdLmNhbmNlbGVkPW51bGwsdGhpcy5ydW5JbmZvW2VdLnJlamVjdD0oKT0+e30sdGhpcy5ydW5JbmZvW2VdLnJlc29sdmU9KCk9Pnt9fX0sdkE9S0E7dmFyIHRyPXtUZXh0RmlsZToiVGV4dEZpbGUiLEJpbmFyeUZpbGU6IkJpbmFyeUZpbGUiLFRleHRTdHJlYW06IlRleHRTdHJlYW0iLEJpbmFyeVN0cmVhbToiQmluYXJ5U3RyZWFtIixJbWFnZToiSW1hZ2UiLFBvaW50U2V0OiJQb2ludFNldCIsTWVzaDoiTWVzaCIsUG9seURhdGE6IlBvbHlEYXRhIixUcmFuc2Zvcm1MaXN0OiJUcmFuc2Zvcm1MaXN0IixKc29uQ29tcGF0aWJsZToiSnNvbkNvbXBhdGlibGUifSxFPXRyO3ZhciBMZT1TeW1ib2woIkNvbWxpbmsucHJveHkiKSxycj1TeW1ib2woIkNvbWxpbmsuZW5kcG9pbnQiKSx6QT1TeW1ib2woIkNvbWxpbmsucmVsZWFzZVByb3h5IiksakE9U3ltYm9sKCJDb21saW5rLmZpbmFsaXplciIpLHBBPVN5bWJvbCgiQ29tbGluay50aHJvd24iKSx4ZT1BPT50eXBlb2YgQT09Im9iamVjdCImJkEhPT1udWxsfHx0eXBlb2YgQT09ImZ1bmN0aW9uIixucj17Y2FuSGFuZGxlOkE9PnhlKEEpJiZBW0xlXSxzZXJpYWxpemUoQSl7bGV0e3BvcnQxOmUscG9ydDI6dH09bmV3IE1lc3NhZ2VDaGFubmVsO3JldHVybiBQZShBLGUpLFt0LFt0XV19LGRlc2VyaWFsaXplKEEpe3JldHVybiBBLnN0YXJ0KCksVkEoQSl9fSxpcj17Y2FuSGFuZGxlOkE9PnhlKEEpJiZwQSBpbiBBLHNlcmlhbGl6ZSh7dmFsdWU6QX0pe2xldCBlO3JldHVybiBBIGluc3RhbmNlb2YgRXJyb3I/ZT17aXNFcnJvcjohMCx2YWx1ZTp7bWVzc2FnZTpBLm1lc3NhZ2UsbmFtZTpBLm5hbWUsc3RhY2s6QS5zdGFja319OmU9e2lzRXJyb3I6ITEsdmFsdWU6QX0sW2UsW11dfSxkZXNlcmlhbGl6ZShBKXt0aHJvdyBBLmlzRXJyb3I/T2JqZWN0LmFzc2lnbihuZXcgRXJyb3IoQS52YWx1ZS5tZXNzYWdlKSxBLnZhbHVlKTpBLnZhbHVlfX0sT2U9bmV3IE1hcChbWyJwcm94eSIsbnJdLFsidGhyb3ciLGlyXV0pO2Z1bmN0aW9uIG9yKEEsZSl7Zm9yKGxldCB0IG9mIEEpaWYoZT09PXR8fHQ9PT0iKiJ8fHQgaW5zdGFuY2VvZiBSZWdFeHAmJnQudGVzdChlKSlyZXR1cm4hMDtyZXR1cm4hMX1mdW5jdGlvbiBQZShBLGU9Z2xvYmFsVGhpcyx0PVsiKiJdKXtlLmFkZEV2ZW50TGlzdGVuZXIoIm1lc3NhZ2UiLGZ1bmN0aW9uIHIoaSl7aWYoIWl8fCFpLmRhdGEpcmV0dXJuO2lmKCFvcih0LGkub3JpZ2luKSl7Y29uc29sZS53YXJuKGBJbnZhbGlkIG9yaWdpbiAnJHtpLm9yaWdpbn0nIGZvciBjb21saW5rIHByb3h5YCk7cmV0dXJufWxldHtpZDpuLHR5cGU6byxwYXRoOmd9PU9iamVjdC5hc3NpZ24oe3BhdGg6W119LGkuZGF0YSksYz0oaS5kYXRhLmFyZ3VtZW50TGlzdHx8W10pLm1hcChLKSxJO3RyeXtsZXQgYT1nLnNsaWNlKDAsLTEpLnJlZHVjZSgocCxsKT0+cFtsXSxBKSxzPWcucmVkdWNlKChwLGwpPT5wW2xdLEEpO3N3aXRjaChvKXtjYXNlIkdFVCI6ST1zO2JyZWFrO2Nhc2UiU0VUIjphW2cuc2xpY2UoLTEpWzBdXT1LKGkuZGF0YS52YWx1ZSksST0hMDticmVhaztjYXNlIkFQUExZIjpJPXMuYXBwbHkoYSxjKTticmVhaztjYXNlIkNPTlNUUlVDVCI6e2xldCBwPW5ldyBzKC4uLmMpO0k9bHIocCl9YnJlYWs7Y2FzZSJFTkRQT0lOVCI6e2xldHtwb3J0MTpwLHBvcnQyOmx9PW5ldyBNZXNzYWdlQ2hhbm5lbDtQZShBLGwpLEk9WkEocCxbcF0pfWJyZWFrO2Nhc2UiUkVMRUFTRSI6ST12b2lkIDA7YnJlYWs7ZGVmYXVsdDpyZXR1cm59fWNhdGNoKGEpe0k9e3ZhbHVlOmEsW3BBXTowfX1Qcm9taXNlLnJlc29sdmUoSSkuY2F0Y2goYT0+KHt2YWx1ZTphLFtwQV06MH0pKS50aGVuKGE9PntsZXRbcyxwXT1tQShhKTtlLnBvc3RNZXNzYWdlKE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSxzKSx7aWQ6bn0pLHApLG89PT0iUkVMRUFTRSImJihlLnJlbW92ZUV2ZW50TGlzdGVuZXIoIm1lc3NhZ2UiLHIpLEdlKGUpLGpBIGluIEEmJnR5cGVvZiBBW2pBXT09ImZ1bmN0aW9uIiYmQVtqQV0oKSl9KS5jYXRjaChhPT57bGV0W3MscF09bUEoe3ZhbHVlOm5ldyBUeXBlRXJyb3IoIlVuc2VyaWFsaXphYmxlIHJldHVybiB2YWx1ZSIpLFtwQV06MH0pO2UucG9zdE1lc3NhZ2UoT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LHMpLHtpZDpufSkscCl9KX0pLGUuc3RhcnQmJmUuc3RhcnQoKX1mdW5jdGlvbiBhcihBKXtyZXR1cm4gQS5jb25zdHJ1Y3Rvci5uYW1lPT09Ik1lc3NhZ2VQb3J0In1mdW5jdGlvbiBHZShBKXthcihBKSYmQS5jbG9zZSgpfWZ1bmN0aW9uIFZBKEEsZSl7cmV0dXJuIF9BKEEsW10sZSl9ZnVuY3Rpb24gQ0EoQSl7aWYoQSl0aHJvdyBuZXcgRXJyb3IoIlByb3h5IGhhcyBiZWVuIHJlbGVhc2VkIGFuZCBpcyBub3QgdXNlYWJsZSIpfWZ1bmN0aW9uIEplKEEpe3JldHVybiBfKEEse3R5cGU6IlJFTEVBU0UifSkudGhlbigoKT0+e0dlKEEpfSl9dmFyIEVBPW5ldyBXZWFrTWFwLFFBPSJGaW5hbGl6YXRpb25SZWdpc3RyeSJpbiBnbG9iYWxUaGlzJiZuZXcgRmluYWxpemF0aW9uUmVnaXN0cnkoQT0+e2xldCBlPShFQS5nZXQoQSl8fDApLTE7RUEuc2V0KEEsZSksZT09PTAmJkplKEEpfSk7ZnVuY3Rpb24gc3IoQSxlKXtsZXQgdD0oRUEuZ2V0KGUpfHwwKSsxO0VBLnNldChlLHQpLFFBJiZRQS5yZWdpc3RlcihBLGUsQSl9ZnVuY3Rpb24gSXIoQSl7UUEmJlFBLnVucmVnaXN0ZXIoQSl9ZnVuY3Rpb24gX0EoQSxlPVtdLHQ9ZnVuY3Rpb24oKXt9KXtsZXQgcj0hMSxpPW5ldyBQcm94eSh0LHtnZXQobixvKXtpZihDQShyKSxvPT09ekEpcmV0dXJuKCk9PntJcihpKSxKZShBKSxyPSEwfTtpZihvPT09InRoZW4iKXtpZihlLmxlbmd0aD09PTApcmV0dXJue3RoZW46KCk9Pml9O2xldCBnPV8oQSx7dHlwZToiR0VUIixwYXRoOmUubWFwKGM9PmMudG9TdHJpbmcoKSl9KS50aGVuKEspO3JldHVybiBnLnRoZW4uYmluZChnKX1yZXR1cm4gX0EoQSxbLi4uZSxvXSl9LHNldChuLG8sZyl7Q0Eocik7bGV0W2MsSV09bUEoZyk7cmV0dXJuIF8oQSx7dHlwZToiU0VUIixwYXRoOlsuLi5lLG9dLm1hcChhPT5hLnRvU3RyaW5nKCkpLHZhbHVlOmN9LEkpLnRoZW4oSyl9LGFwcGx5KG4sbyxnKXtDQShyKTtsZXQgYz1lW2UubGVuZ3RoLTFdO2lmKGM9PT1ycilyZXR1cm4gXyhBLHt0eXBlOiJFTkRQT0lOVCJ9KS50aGVuKEspO2lmKGM9PT0iYmluZCIpcmV0dXJuIF9BKEEsZS5zbGljZSgwLC0xKSk7bGV0W0ksYV09VGUoZyk7cmV0dXJuIF8oQSx7dHlwZToiQVBQTFkiLHBhdGg6ZS5tYXAocz0+cy50b1N0cmluZygpKSxhcmd1bWVudExpc3Q6SX0sYSkudGhlbihLKX0sY29uc3RydWN0KG4sbyl7Q0Eocik7bGV0W2csY109VGUobyk7cmV0dXJuIF8oQSx7dHlwZToiQ09OU1RSVUNUIixwYXRoOmUubWFwKEk9PkkudG9TdHJpbmcoKSksYXJndW1lbnRMaXN0Omd9LGMpLnRoZW4oSyl9fSk7cmV0dXJuIHNyKGksQSksaX1mdW5jdGlvbiBncihBKXtyZXR1cm4gQXJyYXkucHJvdG90eXBlLmNvbmNhdC5hcHBseShbXSxBKX1mdW5jdGlvbiBUZShBKXtsZXQgZT1BLm1hcChtQSk7cmV0dXJuW2UubWFwKHQ9PnRbMF0pLGdyKGUubWFwKHQ9PnRbMV0pKV19dmFyIEhlPW5ldyBXZWFrTWFwO2Z1bmN0aW9uIFpBKEEsZSl7cmV0dXJuIEhlLnNldChBLGUpLEF9ZnVuY3Rpb24gbHIoQSl7cmV0dXJuIE9iamVjdC5hc3NpZ24oQSx7W0xlXTohMH0pfWZ1bmN0aW9uIG1BKEEpe2ZvcihsZXRbZSx0XW9mIE9lKWlmKHQuY2FuSGFuZGxlKEEpKXtsZXRbcixpXT10LnNlcmlhbGl6ZShBKTtyZXR1cm5be3R5cGU6IkhBTkRMRVIiLG5hbWU6ZSx2YWx1ZTpyfSxpXX1yZXR1cm5be3R5cGU6IlJBVyIsdmFsdWU6QX0sSGUuZ2V0KEEpfHxbXV19ZnVuY3Rpb24gSyhBKXtzd2l0Y2goQS50eXBlKXtjYXNlIkhBTkRMRVIiOnJldHVybiBPZS5nZXQoQS5uYW1lKS5kZXNlcmlhbGl6ZShBLnZhbHVlKTtjYXNlIlJBVyI6cmV0dXJuIEEudmFsdWV9fWZ1bmN0aW9uIF8oQSxlLHQpe3JldHVybiBuZXcgUHJvbWlzZShyPT57bGV0IGk9dXIoKTtBLmFkZEV2ZW50TGlzdGVuZXIoIm1lc3NhZ2UiLGZ1bmN0aW9uIG4obyl7IW8uZGF0YXx8IW8uZGF0YS5pZHx8by5kYXRhLmlkIT09aXx8KEEucmVtb3ZlRXZlbnRMaXN0ZW5lcigibWVzc2FnZSIsbikscihvLmRhdGEpKX0pLEEuc3RhcnQmJkEuc3RhcnQoKSxBLnBvc3RNZXNzYWdlKE9iamVjdC5hc3NpZ24oe2lkOml9LGUpLHQpfSl9ZnVuY3Rpb24gdXIoKXtyZXR1cm4gbmV3IEFycmF5KDQpLmZpbGwoMCkubWFwKCgpPT5NYXRoLmZsb29yKE1hdGgucmFuZG9tKCkqTnVtYmVyLk1BWF9TQUZFX0lOVEVHRVIpLnRvU3RyaW5nKDE2KSkuam9pbigiLSIpfWZ1bmN0aW9uIHJBKEEsZSl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIEEuYXBwbHkoZSxhcmd1bWVudHMpfX12YXJ7dG9TdHJpbmc6Y3J9PU9iamVjdC5wcm90b3R5cGUse2dldFByb3RvdHlwZU9mOkFlfT1PYmplY3QsaEE9KEE9PmU9PntsZXQgdD1jci5jYWxsKGUpO3JldHVybiBBW3RdfHwoQVt0XT10LnNsaWNlKDgsLTEpLnRvTG93ZXJDYXNlKCkpfSkoT2JqZWN0LmNyZWF0ZShudWxsKSkseD1BPT4oQT1BLnRvTG93ZXJDYXNlKCksZT0+aEEoZSk9PT1BKSx5QT1BPT5lPT50eXBlb2YgZT09PUEse2lzQXJyYXk6en09QXJyYXksbkE9eUEoInVuZGVmaW5lZCIpO2Z1bmN0aW9uIEJyKEEpe3JldHVybiBBIT09bnVsbCYmIW5BKEEpJiZBLmNvbnN0cnVjdG9yIT09bnVsbCYmIW5BKEEuY29uc3RydWN0b3IpJiZMKEEuY29uc3RydWN0b3IuaXNCdWZmZXIpJiZBLmNvbnN0cnVjdG9yLmlzQnVmZmVyKEEpfXZhciBZZT14KCJBcnJheUJ1ZmZlciIpO2Z1bmN0aW9uIGZyKEEpe2xldCBlO3JldHVybiB0eXBlb2YgQXJyYXlCdWZmZXI8InUiJiZBcnJheUJ1ZmZlci5pc1ZpZXc/ZT1BcnJheUJ1ZmZlci5pc1ZpZXcoQSk6ZT1BJiZBLmJ1ZmZlciYmWWUoQS5idWZmZXIpLGV9dmFyIENyPXlBKCJzdHJpbmciKSxMPXlBKCJmdW5jdGlvbiIpLEtlPXlBKCJudW1iZXIiKSx3QT1BPT5BIT09bnVsbCYmdHlwZW9mIEE9PSJvYmplY3QiLHByPUE9PkE9PT0hMHx8QT09PSExLGRBPUE9PntpZihoQShBKSE9PSJvYmplY3QiKXJldHVybiExO2xldCBlPUFlKEEpO3JldHVybihlPT09bnVsbHx8ZT09PU9iamVjdC5wcm90b3R5cGV8fE9iamVjdC5nZXRQcm90b3R5cGVPZihlKT09PW51bGwpJiYhKFN5bWJvbC50b1N0cmluZ1RhZyBpbiBBKSYmIShTeW1ib2wuaXRlcmF0b3IgaW4gQSl9LEVyPXgoIkRhdGUiKSxRcj14KCJGaWxlIiksbXI9eCgiQmxvYiIpLGRyPXgoIkZpbGVMaXN0IiksaHI9QT0+d0EoQSkmJkwoQS5waXBlKSx5cj1BPT57bGV0IGU7cmV0dXJuIEEmJih0eXBlb2YgRm9ybURhdGE9PSJmdW5jdGlvbiImJkEgaW5zdGFuY2VvZiBGb3JtRGF0YXx8TChBLmFwcGVuZCkmJigoZT1oQShBKSk9PT0iZm9ybWRhdGEifHxlPT09Im9iamVjdCImJkwoQS50b1N0cmluZykmJkEudG9TdHJpbmcoKT09PSJbb2JqZWN0IEZvcm1EYXRhXSIpKX0sd3I9eCgiVVJMU2VhcmNoUGFyYW1zIiksW0RyLFNyLGJyLEZyXT1bIlJlYWRhYmxlU3RyZWFtIiwiUmVxdWVzdCIsIlJlc3BvbnNlIiwiSGVhZGVycyJdLm1hcCh4KSxrcj1BPT5BLnRyaW0/QS50cmltKCk6QS5yZXBsYWNlKC9eW1xzXHVGRUZGXHhBMF0rfFtcc1x1RkVGRlx4QTBdKyQvZywiIik7ZnVuY3Rpb24gaUEoQSxlLHthbGxPd25LZXlzOnQ9ITF9PXt9KXtpZihBPT09bnVsbHx8dHlwZW9mIEE+InUiKXJldHVybjtsZXQgcixpO2lmKHR5cGVvZiBBIT0ib2JqZWN0IiYmKEE9W0FdKSx6KEEpKWZvcihyPTAsaT1BLmxlbmd0aDtyPGk7cisrKWUuY2FsbChudWxsLEFbcl0scixBKTtlbHNle2xldCBuPXQ/T2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoQSk6T2JqZWN0LmtleXMoQSksbz1uLmxlbmd0aCxnO2ZvcihyPTA7cjxvO3IrKylnPW5bcl0sZS5jYWxsKG51bGwsQVtnXSxnLEEpfX1mdW5jdGlvbiB2ZShBLGUpe2U9ZS50b0xvd2VyQ2FzZSgpO2xldCB0PU9iamVjdC5rZXlzKEEpLHI9dC5sZW5ndGgsaTtmb3IoO3ItLSA+MDspaWYoaT10W3JdLGU9PT1pLnRvTG93ZXJDYXNlKCkpcmV0dXJuIGk7cmV0dXJuIG51bGx9dmFyIHY9dHlwZW9mIGdsb2JhbFRoaXM8InUiP2dsb2JhbFRoaXM6dHlwZW9mIHNlbGY8InUiP3NlbGY6dHlwZW9mIHdpbmRvdzwidSI/d2luZG93Omdsb2JhbCxqZT1BPT4hbkEoQSkmJkEhPT12O2Z1bmN0aW9uICRBKCl7bGV0e2Nhc2VsZXNzOkF9PWplKHRoaXMpJiZ0aGlzfHx7fSxlPXt9LHQ9KHIsaSk9PntsZXQgbj1BJiZ2ZShlLGkpfHxpO2RBKGVbbl0pJiZkQShyKT9lW25dPSRBKGVbbl0scik6ZEEocik/ZVtuXT0kQSh7fSxyKTp6KHIpP2Vbbl09ci5zbGljZSgpOmVbbl09cn07Zm9yKGxldCByPTAsaT1hcmd1bWVudHMubGVuZ3RoO3I8aTtyKyspYXJndW1lbnRzW3JdJiZpQShhcmd1bWVudHNbcl0sdCk7cmV0dXJuIGV9dmFyIFJyPShBLGUsdCx7YWxsT3duS2V5czpyfT17fSk9PihpQShlLChpLG4pPT57dCYmTChpKT9BW25dPXJBKGksdCk6QVtuXT1pfSx7YWxsT3duS2V5czpyfSksQSksVXI9QT0+KEEuY2hhckNvZGVBdCgwKT09PTY1Mjc5JiYoQT1BLnNsaWNlKDEpKSxBKSxOcj0oQSxlLHQscik9PntBLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKGUucHJvdG90eXBlLHIpLEEucHJvdG90eXBlLmNvbnN0cnVjdG9yPUEsT2JqZWN0LmRlZmluZVByb3BlcnR5KEEsInN1cGVyIix7dmFsdWU6ZS5wcm90b3R5cGV9KSx0JiZPYmplY3QuYXNzaWduKEEucHJvdG90eXBlLHQpfSxUcj0oQSxlLHQscik9PntsZXQgaSxuLG8sZz17fTtpZihlPWV8fHt9LEE9PW51bGwpcmV0dXJuIGU7ZG97Zm9yKGk9T2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoQSksbj1pLmxlbmd0aDtuLS0gPjA7KW89aVtuXSwoIXJ8fHIobyxBLGUpKSYmIWdbb10mJihlW29dPUFbb10sZ1tvXT0hMCk7QT10IT09ITEmJkFlKEEpfXdoaWxlKEEmJighdHx8dChBLGUpKSYmQSE9PU9iamVjdC5wcm90b3R5cGUpO3JldHVybiBlfSxMcj0oQSxlLHQpPT57QT1TdHJpbmcoQSksKHQ9PT12b2lkIDB8fHQ+QS5sZW5ndGgpJiYodD1BLmxlbmd0aCksdC09ZS5sZW5ndGg7bGV0IHI9QS5pbmRleE9mKGUsdCk7cmV0dXJuIHIhPT0tMSYmcj09PXR9LHhyPUE9PntpZighQSlyZXR1cm4gbnVsbDtpZih6KEEpKXJldHVybiBBO2xldCBlPUEubGVuZ3RoO2lmKCFLZShlKSlyZXR1cm4gbnVsbDtsZXQgdD1uZXcgQXJyYXkoZSk7Zm9yKDtlLS0gPjA7KXRbZV09QVtlXTtyZXR1cm4gdH0sT3I9KEE9PmU9PkEmJmUgaW5zdGFuY2VvZiBBKSh0eXBlb2YgVWludDhBcnJheTwidSImJkFlKFVpbnQ4QXJyYXkpKSxQcj0oQSxlKT0+e2xldCByPShBJiZBW1N5bWJvbC5pdGVyYXRvcl0pLmNhbGwoQSksaTtmb3IoOyhpPXIubmV4dCgpKSYmIWkuZG9uZTspe2xldCBuPWkudmFsdWU7ZS5jYWxsKEEsblswXSxuWzFdKX19LEdyPShBLGUpPT57bGV0IHQscj1bXTtmb3IoOyh0PUEuZXhlYyhlKSkhPT1udWxsOylyLnB1c2godCk7cmV0dXJuIHJ9LEpyPXgoIkhUTUxGb3JtRWxlbWVudCIpLEhyPUE9PkEudG9Mb3dlckNhc2UoKS5yZXBsYWNlKC9bLV9cc10oW2EtelxkXSkoXHcqKS9nLGZ1bmN0aW9uKHQscixpKXtyZXR1cm4gci50b1VwcGVyQ2FzZSgpK2l9KSxxZT0oKHtoYXNPd25Qcm9wZXJ0eTpBfSk9PihlLHQpPT5BLmNhbGwoZSx0KSkoT2JqZWN0LnByb3RvdHlwZSksTXI9eCgiUmVnRXhwIiksX2U9KEEsZSk9PntsZXQgdD1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyhBKSxyPXt9O2lBKHQsKGksbik9PntsZXQgbzsobz1lKGksbixBKSkhPT0hMSYmKHJbbl09b3x8aSl9KSxPYmplY3QuZGVmaW5lUHJvcGVydGllcyhBLHIpfSxxcj1BPT57X2UoQSwoZSx0KT0+e2lmKEwoQSkmJlsiYXJndW1lbnRzIiwiY2FsbGVyIiwiY2FsbGVlIl0uaW5kZXhPZih0KSE9PS0xKXJldHVybiExO2xldCByPUFbdF07aWYoTChyKSl7aWYoZS5lbnVtZXJhYmxlPSExLCJ3cml0YWJsZSJpbiBlKXtlLndyaXRhYmxlPSExO3JldHVybn1lLnNldHx8KGUuc2V0PSgpPT57dGhyb3cgRXJyb3IoIkNhbiBub3QgcmV3cml0ZSByZWFkLW9ubHkgbWV0aG9kICciK3QrIiciKX0pfX0pfSxXcj0oQSxlKT0+e2xldCB0PXt9LHI9aT0+e2kuZm9yRWFjaChuPT57dFtuXT0hMH0pfTtyZXR1cm4geihBKT9yKEEpOnIoU3RyaW5nKEEpLnNwbGl0KGUpKSx0fSxZcj0oKT0+e30sS3I9KEEsZSk9PkEhPW51bGwmJk51bWJlci5pc0Zpbml0ZShBPStBKT9BOmUsWEE9ImFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6IixXZT0iMDEyMzQ1Njc4OSIsemU9e0RJR0lUOldlLEFMUEhBOlhBLEFMUEhBX0RJR0lUOlhBK1hBLnRvVXBwZXJDYXNlKCkrV2V9LHZyPShBPTE2LGU9emUuQUxQSEFfRElHSVQpPT57bGV0IHQ9IiIse2xlbmd0aDpyfT1lO2Zvcig7QS0tOyl0Kz1lW01hdGgucmFuZG9tKCkqcnwwXTtyZXR1cm4gdH07ZnVuY3Rpb24ganIoQSl7cmV0dXJuISEoQSYmTChBLmFwcGVuZCkmJkFbU3ltYm9sLnRvU3RyaW5nVGFnXT09PSJGb3JtRGF0YSImJkFbU3ltYm9sLml0ZXJhdG9yXSl9dmFyIF9yPUE9PntsZXQgZT1uZXcgQXJyYXkoMTApLHQ9KHIsaSk9PntpZih3QShyKSl7aWYoZS5pbmRleE9mKHIpPj0wKXJldHVybjtpZighKCJ0b0pTT04iaW4gcikpe2VbaV09cjtsZXQgbj16KHIpP1tdOnt9O3JldHVybiBpQShyLChvLGcpPT57bGV0IGM9dChvLGkrMSk7IW5BKGMpJiYobltnXT1jKX0pLGVbaV09dm9pZCAwLG59fXJldHVybiByfTtyZXR1cm4gdChBLDApfSx6cj14KCJBc3luY0Z1bmN0aW9uIiksVnI9QT0+QSYmKHdBKEEpfHxMKEEpKSYmTChBLnRoZW4pJiZMKEEuY2F0Y2gpLFZlPSgoQSxlKT0+QT9zZXRJbW1lZGlhdGU6ZT8oKHQscik9Pih2LmFkZEV2ZW50TGlzdGVuZXIoIm1lc3NhZ2UiLCh7c291cmNlOmksZGF0YTpufSk9PntpPT09diYmbj09PXQmJnIubGVuZ3RoJiZyLnNoaWZ0KCkoKX0sITEpLGk9PntyLnB1c2goaSksdi5wb3N0TWVzc2FnZSh0LCIqIil9KSkoYGF4aW9zQCR7TWF0aC5yYW5kb20oKX1gLFtdKTp0PT5zZXRUaW1lb3V0KHQpKSh0eXBlb2Ygc2V0SW1tZWRpYXRlPT0iZnVuY3Rpb24iLEwodi5wb3N0TWVzc2FnZSkpLFpyPXR5cGVvZiBxdWV1ZU1pY3JvdGFzazwidSI/cXVldWVNaWNyb3Rhc2suYmluZCh2KTp0eXBlb2YgcHJvY2VzczwidSImJnByb2Nlc3MubmV4dFRpY2t8fFZlLHU9e2lzQXJyYXk6eixpc0FycmF5QnVmZmVyOlllLGlzQnVmZmVyOkJyLGlzRm9ybURhdGE6eXIsaXNBcnJheUJ1ZmZlclZpZXc6ZnIsaXNTdHJpbmc6Q3IsaXNOdW1iZXI6S2UsaXNCb29sZWFuOnByLGlzT2JqZWN0OndBLGlzUGxhaW5PYmplY3Q6ZEEsaXNSZWFkYWJsZVN0cmVhbTpEcixpc1JlcXVlc3Q6U3IsaXNSZXNwb25zZTpicixpc0hlYWRlcnM6RnIsaXNVbmRlZmluZWQ6bkEsaXNEYXRlOkVyLGlzRmlsZTpRcixpc0Jsb2I6bXIsaXNSZWdFeHA6TXIsaXNGdW5jdGlvbjpMLGlzU3RyZWFtOmhyLGlzVVJMU2VhcmNoUGFyYW1zOndyLGlzVHlwZWRBcnJheTpPcixpc0ZpbGVMaXN0OmRyLGZvckVhY2g6aUEsbWVyZ2U6JEEsZXh0ZW5kOlJyLHRyaW06a3Isc3RyaXBCT006VXIsaW5oZXJpdHM6TnIsdG9GbGF0T2JqZWN0OlRyLGtpbmRPZjpoQSxraW5kT2ZUZXN0OngsZW5kc1dpdGg6THIsdG9BcnJheTp4cixmb3JFYWNoRW50cnk6UHIsbWF0Y2hBbGw6R3IsaXNIVE1MRm9ybTpKcixoYXNPd25Qcm9wZXJ0eTpxZSxoYXNPd25Qcm9wOnFlLHJlZHVjZURlc2NyaXB0b3JzOl9lLGZyZWV6ZU1ldGhvZHM6cXIsdG9PYmplY3RTZXQ6V3IsdG9DYW1lbENhc2U6SHIsbm9vcDpZcix0b0Zpbml0ZU51bWJlcjpLcixmaW5kS2V5OnZlLGdsb2JhbDp2LGlzQ29udGV4dERlZmluZWQ6amUsQUxQSEFCRVQ6emUsZ2VuZXJhdGVTdHJpbmc6dnIsaXNTcGVjQ29tcGxpYW50Rm9ybTpqcix0b0pTT05PYmplY3Q6X3IsaXNBc3luY0ZuOnpyLGlzVGhlbmFibGU6VnIsc2V0SW1tZWRpYXRlOlZlLGFzYXA6WnJ9O2Z1bmN0aW9uIFYoQSxlLHQscixpKXtFcnJvci5jYWxsKHRoaXMpLEVycm9yLmNhcHR1cmVTdGFja1RyYWNlP0Vycm9yLmNhcHR1cmVTdGFja1RyYWNlKHRoaXMsdGhpcy5jb25zdHJ1Y3Rvcik6dGhpcy5zdGFjaz1uZXcgRXJyb3IoKS5zdGFjayx0aGlzLm1lc3NhZ2U9QSx0aGlzLm5hbWU9IkF4aW9zRXJyb3IiLGUmJih0aGlzLmNvZGU9ZSksdCYmKHRoaXMuY29uZmlnPXQpLHImJih0aGlzLnJlcXVlc3Q9ciksaSYmKHRoaXMucmVzcG9uc2U9aSl9dS5pbmhlcml0cyhWLEVycm9yLHt0b0pTT046ZnVuY3Rpb24oKXtyZXR1cm57bWVzc2FnZTp0aGlzLm1lc3NhZ2UsbmFtZTp0aGlzLm5hbWUsZGVzY3JpcHRpb246dGhpcy5kZXNjcmlwdGlvbixudW1iZXI6dGhpcy5udW1iZXIsZmlsZU5hbWU6dGhpcy5maWxlTmFtZSxsaW5lTnVtYmVyOnRoaXMubGluZU51bWJlcixjb2x1bW5OdW1iZXI6dGhpcy5jb2x1bW5OdW1iZXIsc3RhY2s6dGhpcy5zdGFjayxjb25maWc6dS50b0pTT05PYmplY3QodGhpcy5jb25maWcpLGNvZGU6dGhpcy5jb2RlLHN0YXR1czp0aGlzLnJlc3BvbnNlJiZ0aGlzLnJlc3BvbnNlLnN0YXR1cz90aGlzLnJlc3BvbnNlLnN0YXR1czpudWxsfX19KTt2YXIgWmU9Vi5wcm90b3R5cGUsWGU9e307WyJFUlJfQkFEX09QVElPTl9WQUxVRSIsIkVSUl9CQURfT1BUSU9OIiwiRUNPTk5BQk9SVEVEIiwiRVRJTUVET1VUIiwiRVJSX05FVFdPUksiLCJFUlJfRlJfVE9PX01BTllfUkVESVJFQ1RTIiwiRVJSX0RFUFJFQ0FURUQiLCJFUlJfQkFEX1JFU1BPTlNFIiwiRVJSX0JBRF9SRVFVRVNUIiwiRVJSX0NBTkNFTEVEIiwiRVJSX05PVF9TVVBQT1JUIiwiRVJSX0lOVkFMSURfVVJMIl0uZm9yRWFjaChBPT57WGVbQV09e3ZhbHVlOkF9fSk7T2JqZWN0LmRlZmluZVByb3BlcnRpZXMoVixYZSk7T2JqZWN0LmRlZmluZVByb3BlcnR5KFplLCJpc0F4aW9zRXJyb3IiLHt2YWx1ZTohMH0pO1YuZnJvbT0oQSxlLHQscixpLG4pPT57bGV0IG89T2JqZWN0LmNyZWF0ZShaZSk7cmV0dXJuIHUudG9GbGF0T2JqZWN0KEEsbyxmdW5jdGlvbihjKXtyZXR1cm4gYyE9PUVycm9yLnByb3RvdHlwZX0sZz0+ZyE9PSJpc0F4aW9zRXJyb3IiKSxWLmNhbGwobyxBLm1lc3NhZ2UsZSx0LHIsaSksby5jYXVzZT1BLG8ubmFtZT1BLm5hbWUsbiYmT2JqZWN0LmFzc2lnbihvLG4pLG99O3ZhciBtPVY7dmFyIERBPW51bGw7ZnVuY3Rpb24gZWUoQSl7cmV0dXJuIHUuaXNQbGFpbk9iamVjdChBKXx8dS5pc0FycmF5KEEpfWZ1bmN0aW9uIEF0KEEpe3JldHVybiB1LmVuZHNXaXRoKEEsIltdIik/QS5zbGljZSgwLC0yKTpBfWZ1bmN0aW9uICRlKEEsZSx0KXtyZXR1cm4gQT9BLmNvbmNhdChlKS5tYXAoZnVuY3Rpb24oaSxuKXtyZXR1cm4gaT1BdChpKSwhdCYmbj8iWyIraSsiXSI6aX0pLmpvaW4odD8iLiI6IiIpOmV9ZnVuY3Rpb24gWHIoQSl7cmV0dXJuIHUuaXNBcnJheShBKSYmIUEuc29tZShlZSl9dmFyICRyPXUudG9GbGF0T2JqZWN0KHUse30sbnVsbCxmdW5jdGlvbihlKXtyZXR1cm4vXmlzW0EtWl0vLnRlc3QoZSl9KTtmdW5jdGlvbiBBbihBLGUsdCl7aWYoIXUuaXNPYmplY3QoQSkpdGhyb3cgbmV3IFR5cGVFcnJvcigidGFyZ2V0IG11c3QgYmUgYW4gb2JqZWN0Iik7ZT1lfHxuZXcoREF8fEZvcm1EYXRhKSx0PXUudG9GbGF0T2JqZWN0KHQse21ldGFUb2tlbnM6ITAsZG90czohMSxpbmRleGVzOiExfSwhMSxmdW5jdGlvbihDLGYpe3JldHVybiF1LmlzVW5kZWZpbmVkKGZbQ10pfSk7bGV0IHI9dC5tZXRhVG9rZW5zLGk9dC52aXNpdG9yfHxhLG49dC5kb3RzLG89dC5pbmRleGVzLGM9KHQuQmxvYnx8dHlwZW9mIEJsb2I8InUiJiZCbG9iKSYmdS5pc1NwZWNDb21wbGlhbnRGb3JtKGUpO2lmKCF1LmlzRnVuY3Rpb24oaSkpdGhyb3cgbmV3IFR5cGVFcnJvcigidmlzaXRvciBtdXN0IGJlIGEgZnVuY3Rpb24iKTtmdW5jdGlvbiBJKEIpe2lmKEI9PT1udWxsKXJldHVybiIiO2lmKHUuaXNEYXRlKEIpKXJldHVybiBCLnRvSVNPU3RyaW5nKCk7aWYoIWMmJnUuaXNCbG9iKEIpKXRocm93IG5ldyBtKCJCbG9iIGlzIG5vdCBzdXBwb3J0ZWQuIFVzZSBhIEJ1ZmZlciBpbnN0ZWFkLiIpO3JldHVybiB1LmlzQXJyYXlCdWZmZXIoQil8fHUuaXNUeXBlZEFycmF5KEIpP2MmJnR5cGVvZiBCbG9iPT0iZnVuY3Rpb24iP25ldyBCbG9iKFtCXSk6QnVmZmVyLmZyb20oQik6Qn1mdW5jdGlvbiBhKEIsQyxmKXtsZXQgUT1CO2lmKEImJiFmJiZ0eXBlb2YgQj09Im9iamVjdCIpe2lmKHUuZW5kc1dpdGgoQywie30iKSlDPXI/QzpDLnNsaWNlKDAsLTIpLEI9SlNPTi5zdHJpbmdpZnkoQik7ZWxzZSBpZih1LmlzQXJyYXkoQikmJlhyKEIpfHwodS5pc0ZpbGVMaXN0KEIpfHx1LmVuZHNXaXRoKEMsIltdIikpJiYoUT11LnRvQXJyYXkoQikpKXJldHVybiBDPUF0KEMpLFEuZm9yRWFjaChmdW5jdGlvbihkLFQpeyEodS5pc1VuZGVmaW5lZChkKXx8ZD09PW51bGwpJiZlLmFwcGVuZChvPT09ITA/JGUoW0NdLFQsbik6bz09PW51bGw/QzpDKyJbXSIsSShkKSl9KSwhMX1yZXR1cm4gZWUoQik/ITA6KGUuYXBwZW5kKCRlKGYsQyxuKSxJKEIpKSwhMSl9bGV0IHM9W10scD1PYmplY3QuYXNzaWduKCRyLHtkZWZhdWx0VmlzaXRvcjphLGNvbnZlcnRWYWx1ZTpJLGlzVmlzaXRhYmxlOmVlfSk7ZnVuY3Rpb24gbChCLEMpe2lmKCF1LmlzVW5kZWZpbmVkKEIpKXtpZihzLmluZGV4T2YoQikhPT0tMSl0aHJvdyBFcnJvcigiQ2lyY3VsYXIgcmVmZXJlbmNlIGRldGVjdGVkIGluICIrQy5qb2luKCIuIikpO3MucHVzaChCKSx1LmZvckVhY2goQixmdW5jdGlvbihRLGgpeyghKHUuaXNVbmRlZmluZWQoUSl8fFE9PT1udWxsKSYmaS5jYWxsKGUsUSx1LmlzU3RyaW5nKGgpP2gudHJpbSgpOmgsQyxwKSk9PT0hMCYmbChRLEM/Qy5jb25jYXQoaCk6W2hdKX0pLHMucG9wKCl9fWlmKCF1LmlzT2JqZWN0KEEpKXRocm93IG5ldyBUeXBlRXJyb3IoImRhdGEgbXVzdCBiZSBhbiBvYmplY3QiKTtyZXR1cm4gbChBKSxlfXZhciBNPUFuO2Z1bmN0aW9uIGV0KEEpe2xldCBlPXsiISI6IiUyMSIsIiciOiIlMjciLCIoIjoiJTI4IiwiKSI6IiUyOSIsIn4iOiIlN0UiLCIlMjAiOiIrIiwiJTAwIjoiXDAifTtyZXR1cm4gZW5jb2RlVVJJQ29tcG9uZW50KEEpLnJlcGxhY2UoL1shJygpfl18JTIwfCUwMC9nLGZ1bmN0aW9uKHIpe3JldHVybiBlW3JdfSl9ZnVuY3Rpb24gdHQoQSxlKXt0aGlzLl9wYWlycz1bXSxBJiZNKEEsdGhpcyxlKX12YXIgcnQ9dHQucHJvdG90eXBlO3J0LmFwcGVuZD1mdW5jdGlvbihlLHQpe3RoaXMuX3BhaXJzLnB1c2goW2UsdF0pfTtydC50b1N0cmluZz1mdW5jdGlvbihlKXtsZXQgdD1lP2Z1bmN0aW9uKHIpe3JldHVybiBlLmNhbGwodGhpcyxyLGV0KX06ZXQ7cmV0dXJuIHRoaXMuX3BhaXJzLm1hcChmdW5jdGlvbihpKXtyZXR1cm4gdChpWzBdKSsiPSIrdChpWzFdKX0sIiIpLmpvaW4oIiYiKX07dmFyIFNBPXR0O2Z1bmN0aW9uIGVuKEEpe3JldHVybiBlbmNvZGVVUklDb21wb25lbnQoQSkucmVwbGFjZSgvJTNBL2dpLCI6IikucmVwbGFjZSgvJTI0L2csIiQiKS5yZXBsYWNlKC8lMkMvZ2ksIiwiKS5yZXBsYWNlKC8lMjAvZywiKyIpLnJlcGxhY2UoLyU1Qi9naSwiWyIpLnJlcGxhY2UoLyU1RC9naSwiXSIpfWZ1bmN0aW9uIG9BKEEsZSx0KXtpZighZSlyZXR1cm4gQTtsZXQgcj10JiZ0LmVuY29kZXx8ZW4saT10JiZ0LnNlcmlhbGl6ZSxuO2lmKGk/bj1pKGUsdCk6bj11LmlzVVJMU2VhcmNoUGFyYW1zKGUpP2UudG9TdHJpbmcoKTpuZXcgU0EoZSx0KS50b1N0cmluZyhyKSxuKXtsZXQgbz1BLmluZGV4T2YoIiMiKTtvIT09LTEmJihBPUEuc2xpY2UoMCxvKSksQSs9KEEuaW5kZXhPZigiPyIpPT09LTE/Ij8iOiImIikrbn1yZXR1cm4gQX12YXIgdGU9Y2xhc3N7Y29uc3RydWN0b3IoKXt0aGlzLmhhbmRsZXJzPVtdfXVzZShlLHQscil7cmV0dXJuIHRoaXMuaGFuZGxlcnMucHVzaCh7ZnVsZmlsbGVkOmUscmVqZWN0ZWQ6dCxzeW5jaHJvbm91czpyP3Iuc3luY2hyb25vdXM6ITEscnVuV2hlbjpyP3IucnVuV2hlbjpudWxsfSksdGhpcy5oYW5kbGVycy5sZW5ndGgtMX1lamVjdChlKXt0aGlzLmhhbmRsZXJzW2VdJiYodGhpcy5oYW5kbGVyc1tlXT1udWxsKX1jbGVhcigpe3RoaXMuaGFuZGxlcnMmJih0aGlzLmhhbmRsZXJzPVtdKX1mb3JFYWNoKGUpe3UuZm9yRWFjaCh0aGlzLmhhbmRsZXJzLGZ1bmN0aW9uKHIpe3IhPT1udWxsJiZlKHIpfSl9fSxyZT10ZTt2YXIgYkE9e3NpbGVudEpTT05QYXJzaW5nOiEwLGZvcmNlZEpTT05QYXJzaW5nOiEwLGNsYXJpZnlUaW1lb3V0RXJyb3I6ITF9O3ZhciBudD10eXBlb2YgVVJMU2VhcmNoUGFyYW1zPCJ1Ij9VUkxTZWFyY2hQYXJhbXM6U0E7dmFyIGl0PXR5cGVvZiBGb3JtRGF0YTwidSI/Rm9ybURhdGE6bnVsbDt2YXIgb3Q9dHlwZW9mIEJsb2I8InUiP0Jsb2I6bnVsbDt2YXIgYXQ9e2lzQnJvd3NlcjohMCxjbGFzc2VzOntVUkxTZWFyY2hQYXJhbXM6bnQsRm9ybURhdGE6aXQsQmxvYjpvdH0scHJvdG9jb2xzOlsiaHR0cCIsImh0dHBzIiwiZmlsZSIsImJsb2IiLCJ1cmwiLCJkYXRhIl19O3ZhciBpZT17fTtfdChpZSx7aGFzQnJvd3NlckVudjooKT0+bmUsaGFzU3RhbmRhcmRCcm93c2VyRW52OigpPT50bixoYXNTdGFuZGFyZEJyb3dzZXJXZWJXb3JrZXJFbnY6KCk9PnJuLG9yaWdpbjooKT0+bm59KTt2YXIgbmU9dHlwZW9mIHdpbmRvdzwidSImJnR5cGVvZiBkb2N1bWVudDwidSIsdG49KEE9Pm5lJiZbIlJlYWN0TmF0aXZlIiwiTmF0aXZlU2NyaXB0IiwiTlMiXS5pbmRleE9mKEEpPDApKHR5cGVvZiBuYXZpZ2F0b3I8InUiJiZuYXZpZ2F0b3IucHJvZHVjdCkscm49dHlwZW9mIFdvcmtlckdsb2JhbFNjb3BlPCJ1IiYmc2VsZiBpbnN0YW5jZW9mIFdvcmtlckdsb2JhbFNjb3BlJiZ0eXBlb2Ygc2VsZi5pbXBvcnRTY3JpcHRzPT0iZnVuY3Rpb24iLG5uPW5lJiZ3aW5kb3cubG9jYXRpb24uaHJlZnx8Imh0dHA6Ly9sb2NhbGhvc3QiO3ZhciBrPXsuLi5pZSwuLi5hdH07ZnVuY3Rpb24gb2UoQSxlKXtyZXR1cm4gTShBLG5ldyBrLmNsYXNzZXMuVVJMU2VhcmNoUGFyYW1zLE9iamVjdC5hc3NpZ24oe3Zpc2l0b3I6ZnVuY3Rpb24odCxyLGksbil7cmV0dXJuIGsuaXNOb2RlJiZ1LmlzQnVmZmVyKHQpPyh0aGlzLmFwcGVuZChyLHQudG9TdHJpbmcoImJhc2U2NCIpKSwhMSk6bi5kZWZhdWx0VmlzaXRvci5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSxlKSl9ZnVuY3Rpb24gb24oQSl7cmV0dXJuIHUubWF0Y2hBbGwoL1x3K3xcWyhcdyopXS9nLEEpLm1hcChlPT5lWzBdPT09IltdIj8iIjplWzFdfHxlWzBdKX1mdW5jdGlvbiBhbihBKXtsZXQgZT17fSx0PU9iamVjdC5rZXlzKEEpLHIsaT10Lmxlbmd0aCxuO2ZvcihyPTA7cjxpO3IrKyluPXRbcl0sZVtuXT1BW25dO3JldHVybiBlfWZ1bmN0aW9uIHNuKEEpe2Z1bmN0aW9uIGUodCxyLGksbil7bGV0IG89dFtuKytdO2lmKG89PT0iX19wcm90b19fIilyZXR1cm4hMDtsZXQgZz1OdW1iZXIuaXNGaW5pdGUoK28pLGM9bj49dC5sZW5ndGg7cmV0dXJuIG89IW8mJnUuaXNBcnJheShpKT9pLmxlbmd0aDpvLGM/KHUuaGFzT3duUHJvcChpLG8pP2lbb109W2lbb10scl06aVtvXT1yLCFnKTooKCFpW29dfHwhdS5pc09iamVjdChpW29dKSkmJihpW29dPVtdKSxlKHQscixpW29dLG4pJiZ1LmlzQXJyYXkoaVtvXSkmJihpW29dPWFuKGlbb10pKSwhZyl9aWYodS5pc0Zvcm1EYXRhKEEpJiZ1LmlzRnVuY3Rpb24oQS5lbnRyaWVzKSl7bGV0IHQ9e307cmV0dXJuIHUuZm9yRWFjaEVudHJ5KEEsKHIsaSk9PntlKG9uKHIpLGksdCwwKX0pLHR9cmV0dXJuIG51bGx9dmFyIEZBPXNuO2Z1bmN0aW9uIEluKEEsZSx0KXtpZih1LmlzU3RyaW5nKEEpKXRyeXtyZXR1cm4oZXx8SlNPTi5wYXJzZSkoQSksdS50cmltKEEpfWNhdGNoKHIpe2lmKHIubmFtZSE9PSJTeW50YXhFcnJvciIpdGhyb3cgcn1yZXR1cm4odHx8SlNPTi5zdHJpbmdpZnkpKEEpfXZhciBhZT17dHJhbnNpdGlvbmFsOmJBLGFkYXB0ZXI6WyJ4aHIiLCJodHRwIiwiZmV0Y2giXSx0cmFuc2Zvcm1SZXF1ZXN0OltmdW5jdGlvbihlLHQpe2xldCByPXQuZ2V0Q29udGVudFR5cGUoKXx8IiIsaT1yLmluZGV4T2YoImFwcGxpY2F0aW9uL2pzb24iKT4tMSxuPXUuaXNPYmplY3QoZSk7aWYobiYmdS5pc0hUTUxGb3JtKGUpJiYoZT1uZXcgRm9ybURhdGEoZSkpLHUuaXNGb3JtRGF0YShlKSlyZXR1cm4gaT9KU09OLnN0cmluZ2lmeShGQShlKSk6ZTtpZih1LmlzQXJyYXlCdWZmZXIoZSl8fHUuaXNCdWZmZXIoZSl8fHUuaXNTdHJlYW0oZSl8fHUuaXNGaWxlKGUpfHx1LmlzQmxvYihlKXx8dS5pc1JlYWRhYmxlU3RyZWFtKGUpKXJldHVybiBlO2lmKHUuaXNBcnJheUJ1ZmZlclZpZXcoZSkpcmV0dXJuIGUuYnVmZmVyO2lmKHUuaXNVUkxTZWFyY2hQYXJhbXMoZSkpcmV0dXJuIHQuc2V0Q29udGVudFR5cGUoImFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZDtjaGFyc2V0PXV0Zi04IiwhMSksZS50b1N0cmluZygpO2xldCBnO2lmKG4pe2lmKHIuaW5kZXhPZigiYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkIik+LTEpcmV0dXJuIG9lKGUsdGhpcy5mb3JtU2VyaWFsaXplcikudG9TdHJpbmcoKTtpZigoZz11LmlzRmlsZUxpc3QoZSkpfHxyLmluZGV4T2YoIm11bHRpcGFydC9mb3JtLWRhdGEiKT4tMSl7bGV0IGM9dGhpcy5lbnYmJnRoaXMuZW52LkZvcm1EYXRhO3JldHVybiBNKGc/eyJmaWxlc1tdIjplfTplLGMmJm5ldyBjLHRoaXMuZm9ybVNlcmlhbGl6ZXIpfX1yZXR1cm4gbnx8aT8odC5zZXRDb250ZW50VHlwZSgiYXBwbGljYXRpb24vanNvbiIsITEpLEluKGUpKTplfV0sdHJhbnNmb3JtUmVzcG9uc2U6W2Z1bmN0aW9uKGUpe2xldCB0PXRoaXMudHJhbnNpdGlvbmFsfHxhZS50cmFuc2l0aW9uYWwscj10JiZ0LmZvcmNlZEpTT05QYXJzaW5nLGk9dGhpcy5yZXNwb25zZVR5cGU9PT0ianNvbiI7aWYodS5pc1Jlc3BvbnNlKGUpfHx1LmlzUmVhZGFibGVTdHJlYW0oZSkpcmV0dXJuIGU7aWYoZSYmdS5pc1N0cmluZyhlKSYmKHImJiF0aGlzLnJlc3BvbnNlVHlwZXx8aSkpe2xldCBvPSEodCYmdC5zaWxlbnRKU09OUGFyc2luZykmJmk7dHJ5e3JldHVybiBKU09OLnBhcnNlKGUpfWNhdGNoKGcpe2lmKG8pdGhyb3cgZy5uYW1lPT09IlN5bnRheEVycm9yIj9tLmZyb20oZyxtLkVSUl9CQURfUkVTUE9OU0UsdGhpcyxudWxsLHRoaXMucmVzcG9uc2UpOmd9fXJldHVybiBlfV0sdGltZW91dDowLHhzcmZDb29raWVOYW1lOiJYU1JGLVRPS0VOIix4c3JmSGVhZGVyTmFtZToiWC1YU1JGLVRPS0VOIixtYXhDb250ZW50TGVuZ3RoOi0xLG1heEJvZHlMZW5ndGg6LTEsZW52OntGb3JtRGF0YTprLmNsYXNzZXMuRm9ybURhdGEsQmxvYjprLmNsYXNzZXMuQmxvYn0sdmFsaWRhdGVTdGF0dXM6ZnVuY3Rpb24oZSl7cmV0dXJuIGU+PTIwMCYmZTwzMDB9LGhlYWRlcnM6e2NvbW1vbjp7QWNjZXB0OiJhcHBsaWNhdGlvbi9qc29uLCB0ZXh0L3BsYWluLCAqLyoiLCJDb250ZW50LVR5cGUiOnZvaWQgMH19fTt1LmZvckVhY2goWyJkZWxldGUiLCJnZXQiLCJoZWFkIiwicG9zdCIsInB1dCIsInBhdGNoIl0sQT0+e2FlLmhlYWRlcnNbQV09e319KTt2YXIgWj1hZTt2YXIgZ249dS50b09iamVjdFNldChbImFnZSIsImF1dGhvcml6YXRpb24iLCJjb250ZW50LWxlbmd0aCIsImNvbnRlbnQtdHlwZSIsImV0YWciLCJleHBpcmVzIiwiZnJvbSIsImhvc3QiLCJpZi1tb2RpZmllZC1zaW5jZSIsImlmLXVubW9kaWZpZWQtc2luY2UiLCJsYXN0LW1vZGlmaWVkIiwibG9jYXRpb24iLCJtYXgtZm9yd2FyZHMiLCJwcm94eS1hdXRob3JpemF0aW9uIiwicmVmZXJlciIsInJldHJ5LWFmdGVyIiwidXNlci1hZ2VudCJdKSxzdD1BPT57bGV0IGU9e30sdCxyLGk7cmV0dXJuIEEmJkEuc3BsaXQoYApgKS5mb3JFYWNoKGZ1bmN0aW9uKG8pe2k9by5pbmRleE9mKCI6IiksdD1vLnN1YnN0cmluZygwLGkpLnRyaW0oKS50b0xvd2VyQ2FzZSgpLHI9by5zdWJzdHJpbmcoaSsxKS50cmltKCksISghdHx8ZVt0XSYmZ25bdF0pJiYodD09PSJzZXQtY29va2llIj9lW3RdP2VbdF0ucHVzaChyKTplW3RdPVtyXTplW3RdPWVbdF0/ZVt0XSsiLCAiK3I6cil9KSxlfTt2YXIgSXQ9U3ltYm9sKCJpbnRlcm5hbHMiKTtmdW5jdGlvbiBhQShBKXtyZXR1cm4gQSYmU3RyaW5nKEEpLnRyaW0oKS50b0xvd2VyQ2FzZSgpfWZ1bmN0aW9uIGtBKEEpe3JldHVybiBBPT09ITF8fEE9PW51bGw/QTp1LmlzQXJyYXkoQSk/QS5tYXAoa0EpOlN0cmluZyhBKX1mdW5jdGlvbiBsbihBKXtsZXQgZT1PYmplY3QuY3JlYXRlKG51bGwpLHQ9LyhbXlxzLDs9XSspXHMqKD86PVxzKihbXiw7XSspKT8vZyxyO2Zvcig7cj10LmV4ZWMoQSk7KWVbclsxXV09clsyXTtyZXR1cm4gZX12YXIgdW49QT0+L15bLV9hLXpBLVowLTleYHx+LCEjJCUmJyorLl0rJC8udGVzdChBLnRyaW0oKSk7ZnVuY3Rpb24gc2UoQSxlLHQscixpKXtpZih1LmlzRnVuY3Rpb24ocikpcmV0dXJuIHIuY2FsbCh0aGlzLGUsdCk7aWYoaSYmKGU9dCksISF1LmlzU3RyaW5nKGUpKXtpZih1LmlzU3RyaW5nKHIpKXJldHVybiBlLmluZGV4T2YocikhPT0tMTtpZih1LmlzUmVnRXhwKHIpKXJldHVybiByLnRlc3QoZSl9fWZ1bmN0aW9uIGNuKEEpe3JldHVybiBBLnRyaW0oKS50b0xvd2VyQ2FzZSgpLnJlcGxhY2UoLyhbYS16XGRdKShcdyopL2csKGUsdCxyKT0+dC50b1VwcGVyQ2FzZSgpK3IpfWZ1bmN0aW9uIEJuKEEsZSl7bGV0IHQ9dS50b0NhbWVsQ2FzZSgiICIrZSk7WyJnZXQiLCJzZXQiLCJoYXMiXS5mb3JFYWNoKHI9PntPYmplY3QuZGVmaW5lUHJvcGVydHkoQSxyK3Qse3ZhbHVlOmZ1bmN0aW9uKGksbixvKXtyZXR1cm4gdGhpc1tyXS5jYWxsKHRoaXMsZSxpLG4sbyl9LGNvbmZpZ3VyYWJsZTohMH0pfSl9dmFyIFg9Y2xhc3N7Y29uc3RydWN0b3IoZSl7ZSYmdGhpcy5zZXQoZSl9c2V0KGUsdCxyKXtsZXQgaT10aGlzO2Z1bmN0aW9uIG4oZyxjLEkpe2xldCBhPWFBKGMpO2lmKCFhKXRocm93IG5ldyBFcnJvcigiaGVhZGVyIG5hbWUgbXVzdCBiZSBhIG5vbi1lbXB0eSBzdHJpbmciKTtsZXQgcz11LmZpbmRLZXkoaSxhKTsoIXN8fGlbc109PT12b2lkIDB8fEk9PT0hMHx8ST09PXZvaWQgMCYmaVtzXSE9PSExKSYmKGlbc3x8Y109a0EoZykpfWxldCBvPShnLGMpPT51LmZvckVhY2goZywoSSxhKT0+bihJLGEsYykpO2lmKHUuaXNQbGFpbk9iamVjdChlKXx8ZSBpbnN0YW5jZW9mIHRoaXMuY29uc3RydWN0b3IpbyhlLHQpO2Vsc2UgaWYodS5pc1N0cmluZyhlKSYmKGU9ZS50cmltKCkpJiYhdW4oZSkpbyhzdChlKSx0KTtlbHNlIGlmKHUuaXNIZWFkZXJzKGUpKWZvcihsZXRbZyxjXW9mIGUuZW50cmllcygpKW4oYyxnLHIpO2Vsc2UgZSE9bnVsbCYmbih0LGUscik7cmV0dXJuIHRoaXN9Z2V0KGUsdCl7aWYoZT1hQShlKSxlKXtsZXQgcj11LmZpbmRLZXkodGhpcyxlKTtpZihyKXtsZXQgaT10aGlzW3JdO2lmKCF0KXJldHVybiBpO2lmKHQ9PT0hMClyZXR1cm4gbG4oaSk7aWYodS5pc0Z1bmN0aW9uKHQpKXJldHVybiB0LmNhbGwodGhpcyxpLHIpO2lmKHUuaXNSZWdFeHAodCkpcmV0dXJuIHQuZXhlYyhpKTt0aHJvdyBuZXcgVHlwZUVycm9yKCJwYXJzZXIgbXVzdCBiZSBib29sZWFufHJlZ2V4cHxmdW5jdGlvbiIpfX19aGFzKGUsdCl7aWYoZT1hQShlKSxlKXtsZXQgcj11LmZpbmRLZXkodGhpcyxlKTtyZXR1cm4hIShyJiZ0aGlzW3JdIT09dm9pZCAwJiYoIXR8fHNlKHRoaXMsdGhpc1tyXSxyLHQpKSl9cmV0dXJuITF9ZGVsZXRlKGUsdCl7bGV0IHI9dGhpcyxpPSExO2Z1bmN0aW9uIG4obyl7aWYobz1hQShvKSxvKXtsZXQgZz11LmZpbmRLZXkocixvKTtnJiYoIXR8fHNlKHIscltnXSxnLHQpKSYmKGRlbGV0ZSByW2ddLGk9ITApfX1yZXR1cm4gdS5pc0FycmF5KGUpP2UuZm9yRWFjaChuKTpuKGUpLGl9Y2xlYXIoZSl7bGV0IHQ9T2JqZWN0LmtleXModGhpcykscj10Lmxlbmd0aCxpPSExO2Zvcig7ci0tOyl7bGV0IG49dFtyXTsoIWV8fHNlKHRoaXMsdGhpc1tuXSxuLGUsITApKSYmKGRlbGV0ZSB0aGlzW25dLGk9ITApfXJldHVybiBpfW5vcm1hbGl6ZShlKXtsZXQgdD10aGlzLHI9e307cmV0dXJuIHUuZm9yRWFjaCh0aGlzLChpLG4pPT57bGV0IG89dS5maW5kS2V5KHIsbik7aWYobyl7dFtvXT1rQShpKSxkZWxldGUgdFtuXTtyZXR1cm59bGV0IGc9ZT9jbihuKTpTdHJpbmcobikudHJpbSgpO2chPT1uJiZkZWxldGUgdFtuXSx0W2ddPWtBKGkpLHJbZ109ITB9KSx0aGlzfWNvbmNhdCguLi5lKXtyZXR1cm4gdGhpcy5jb25zdHJ1Y3Rvci5jb25jYXQodGhpcywuLi5lKX10b0pTT04oZSl7bGV0IHQ9T2JqZWN0LmNyZWF0ZShudWxsKTtyZXR1cm4gdS5mb3JFYWNoKHRoaXMsKHIsaSk9PntyIT1udWxsJiZyIT09ITEmJih0W2ldPWUmJnUuaXNBcnJheShyKT9yLmpvaW4oIiwgIik6cil9KSx0fVtTeW1ib2wuaXRlcmF0b3JdKCl7cmV0dXJuIE9iamVjdC5lbnRyaWVzKHRoaXMudG9KU09OKCkpW1N5bWJvbC5pdGVyYXRvcl0oKX10b1N0cmluZygpe3JldHVybiBPYmplY3QuZW50cmllcyh0aGlzLnRvSlNPTigpKS5tYXAoKFtlLHRdKT0+ZSsiOiAiK3QpLmpvaW4oYApgKX1nZXRbU3ltYm9sLnRvU3RyaW5nVGFnXSgpe3JldHVybiJBeGlvc0hlYWRlcnMifXN0YXRpYyBmcm9tKGUpe3JldHVybiBlIGluc3RhbmNlb2YgdGhpcz9lOm5ldyB0aGlzKGUpfXN0YXRpYyBjb25jYXQoZSwuLi50KXtsZXQgcj1uZXcgdGhpcyhlKTtyZXR1cm4gdC5mb3JFYWNoKGk9PnIuc2V0KGkpKSxyfXN0YXRpYyBhY2Nlc3NvcihlKXtsZXQgcj0odGhpc1tJdF09dGhpc1tJdF09e2FjY2Vzc29yczp7fX0pLmFjY2Vzc29ycyxpPXRoaXMucHJvdG90eXBlO2Z1bmN0aW9uIG4obyl7bGV0IGc9YUEobyk7cltnXXx8KEJuKGksbykscltnXT0hMCl9cmV0dXJuIHUuaXNBcnJheShlKT9lLmZvckVhY2gobik6bihlKSx0aGlzfX07WC5hY2Nlc3NvcihbIkNvbnRlbnQtVHlwZSIsIkNvbnRlbnQtTGVuZ3RoIiwiQWNjZXB0IiwiQWNjZXB0LUVuY29kaW5nIiwiVXNlci1BZ2VudCIsIkF1dGhvcml6YXRpb24iXSk7dS5yZWR1Y2VEZXNjcmlwdG9ycyhYLnByb3RvdHlwZSwoe3ZhbHVlOkF9LGUpPT57bGV0IHQ9ZVswXS50b1VwcGVyQ2FzZSgpK2Uuc2xpY2UoMSk7cmV0dXJue2dldDooKT0+QSxzZXQocil7dGhpc1t0XT1yfX19KTt1LmZyZWV6ZU1ldGhvZHMoWCk7dmFyIEY9WDtmdW5jdGlvbiBzQShBLGUpe2xldCB0PXRoaXN8fFoscj1lfHx0LGk9Ri5mcm9tKHIuaGVhZGVycyksbj1yLmRhdGE7cmV0dXJuIHUuZm9yRWFjaChBLGZ1bmN0aW9uKGcpe249Zy5jYWxsKHQsbixpLm5vcm1hbGl6ZSgpLGU/ZS5zdGF0dXM6dm9pZCAwKX0pLGkubm9ybWFsaXplKCksbn1mdW5jdGlvbiBJQShBKXtyZXR1cm4hIShBJiZBLl9fQ0FOQ0VMX18pfWZ1bmN0aW9uIGd0KEEsZSx0KXttLmNhbGwodGhpcyxBPz8iY2FuY2VsZWQiLG0uRVJSX0NBTkNFTEVELGUsdCksdGhpcy5uYW1lPSJDYW5jZWxlZEVycm9yIn11LmluaGVyaXRzKGd0LG0se19fQ0FOQ0VMX186ITB9KTt2YXIgSD1ndDtmdW5jdGlvbiBnQShBLGUsdCl7bGV0IHI9dC5jb25maWcudmFsaWRhdGVTdGF0dXM7IXQuc3RhdHVzfHwhcnx8cih0LnN0YXR1cyk/QSh0KTplKG5ldyBtKCJSZXF1ZXN0IGZhaWxlZCB3aXRoIHN0YXR1cyBjb2RlICIrdC5zdGF0dXMsW20uRVJSX0JBRF9SRVFVRVNULG0uRVJSX0JBRF9SRVNQT05TRV1bTWF0aC5mbG9vcih0LnN0YXR1cy8xMDApLTRdLHQuY29uZmlnLHQucmVxdWVzdCx0KSl9ZnVuY3Rpb24gSWUoQSl7bGV0IGU9L14oWy0rXHddezEsMjV9KSg6P1wvXC98OikvLmV4ZWMoQSk7cmV0dXJuIGUmJmVbMV18fCIifWZ1bmN0aW9uIGZuKEEsZSl7QT1BfHwxMDtsZXQgdD1uZXcgQXJyYXkoQSkscj1uZXcgQXJyYXkoQSksaT0wLG49MCxvO3JldHVybiBlPWUhPT12b2lkIDA/ZToxZTMsZnVuY3Rpb24oYyl7bGV0IEk9RGF0ZS5ub3coKSxhPXJbbl07b3x8KG89SSksdFtpXT1jLHJbaV09STtsZXQgcz1uLHA9MDtmb3IoO3MhPT1pOylwKz10W3MrK10scz1zJUE7aWYoaT0oaSsxKSVBLGk9PT1uJiYobj0obisxKSVBKSxJLW88ZSlyZXR1cm47bGV0IGw9YSYmSS1hO3JldHVybiBsP01hdGgucm91bmQocCoxZTMvbCk6dm9pZCAwfX12YXIgbHQ9Zm47ZnVuY3Rpb24gQ24oQSxlKXtsZXQgdD0wLHI9MWUzL2UsaSxuLG89KEksYT1EYXRlLm5vdygpKT0+e3Q9YSxpPW51bGwsbiYmKGNsZWFyVGltZW91dChuKSxuPW51bGwpLEEuYXBwbHkobnVsbCxJKX07cmV0dXJuWyguLi5JKT0+e2xldCBhPURhdGUubm93KCkscz1hLXQ7cz49cj9vKEksYSk6KGk9SSxufHwobj1zZXRUaW1lb3V0KCgpPT57bj1udWxsLG8oaSl9LHItcykpKX0sKCk9PmkmJm8oaSldfXZhciB1dD1Dbjt2YXIgJD0oQSxlLHQ9Myk9PntsZXQgcj0wLGk9bHQoNTAsMjUwKTtyZXR1cm4gdXQobj0+e2xldCBvPW4ubG9hZGVkLGc9bi5sZW5ndGhDb21wdXRhYmxlP24udG90YWw6dm9pZCAwLGM9by1yLEk9aShjKSxhPW88PWc7cj1vO2xldCBzPXtsb2FkZWQ6byx0b3RhbDpnLHByb2dyZXNzOmc/by9nOnZvaWQgMCxieXRlczpjLHJhdGU6SXx8dm9pZCAwLGVzdGltYXRlZDpJJiZnJiZhPyhnLW8pL0k6dm9pZCAwLGV2ZW50Om4sbGVuZ3RoQ29tcHV0YWJsZTpnIT1udWxsLFtlPyJkb3dubG9hZCI6InVwbG9hZCJdOiEwfTtBKHMpfSx0KX0sZ2U9KEEsZSk9PntsZXQgdD1BIT1udWxsO3JldHVybltyPT5lWzBdKHtsZW5ndGhDb21wdXRhYmxlOnQsdG90YWw6QSxsb2FkZWQ6cn0pLGVbMV1dfSxsZT1BPT4oLi4uZSk9PnUuYXNhcCgoKT0+QSguLi5lKSk7dmFyIGN0PWsuaGFzU3RhbmRhcmRCcm93c2VyRW52P2Z1bmN0aW9uKCl7bGV0IGU9Lyhtc2llfHRyaWRlbnQpL2kudGVzdChuYXZpZ2F0b3IudXNlckFnZW50KSx0PWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImEiKSxyO2Z1bmN0aW9uIGkobil7bGV0IG89bjtyZXR1cm4gZSYmKHQuc2V0QXR0cmlidXRlKCJocmVmIixvKSxvPXQuaHJlZiksdC5zZXRBdHRyaWJ1dGUoImhyZWYiLG8pLHtocmVmOnQuaHJlZixwcm90b2NvbDp0LnByb3RvY29sP3QucHJvdG9jb2wucmVwbGFjZSgvOiQvLCIiKToiIixob3N0OnQuaG9zdCxzZWFyY2g6dC5zZWFyY2g/dC5zZWFyY2gucmVwbGFjZSgvXlw/LywiIik6IiIsaGFzaDp0Lmhhc2g/dC5oYXNoLnJlcGxhY2UoL14jLywiIik6IiIsaG9zdG5hbWU6dC5ob3N0bmFtZSxwb3J0OnQucG9ydCxwYXRobmFtZTp0LnBhdGhuYW1lLmNoYXJBdCgwKT09PSIvIj90LnBhdGhuYW1lOiIvIit0LnBhdGhuYW1lfX1yZXR1cm4gcj1pKHdpbmRvdy5sb2NhdGlvbi5ocmVmKSxmdW5jdGlvbihvKXtsZXQgZz11LmlzU3RyaW5nKG8pP2kobyk6bztyZXR1cm4gZy5wcm90b2NvbD09PXIucHJvdG9jb2wmJmcuaG9zdD09PXIuaG9zdH19KCk6ZnVuY3Rpb24oKXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4hMH19KCk7dmFyIEJ0PWsuaGFzU3RhbmRhcmRCcm93c2VyRW52P3t3cml0ZShBLGUsdCxyLGksbil7bGV0IG89W0ErIj0iK2VuY29kZVVSSUNvbXBvbmVudChlKV07dS5pc051bWJlcih0KSYmby5wdXNoKCJleHBpcmVzPSIrbmV3IERhdGUodCkudG9HTVRTdHJpbmcoKSksdS5pc1N0cmluZyhyKSYmby5wdXNoKCJwYXRoPSIrciksdS5pc1N0cmluZyhpKSYmby5wdXNoKCJkb21haW49IitpKSxuPT09ITAmJm8ucHVzaCgic2VjdXJlIiksZG9jdW1lbnQuY29va2llPW8uam9pbigiOyAiKX0scmVhZChBKXtsZXQgZT1kb2N1bWVudC5jb29raWUubWF0Y2gobmV3IFJlZ0V4cCgiKF58O1xccyopKCIrQSsiKT0oW147XSopIikpO3JldHVybiBlP2RlY29kZVVSSUNvbXBvbmVudChlWzNdKTpudWxsfSxyZW1vdmUoQSl7dGhpcy53cml0ZShBLCIiLERhdGUubm93KCktODY0ZTUpfX06e3dyaXRlKCl7fSxyZWFkKCl7cmV0dXJuIG51bGx9LHJlbW92ZSgpe319O2Z1bmN0aW9uIHVlKEEpe3JldHVybi9eKFthLXpdW2EtelxkK1wtLl0qOik/XC9cLy9pLnRlc3QoQSl9ZnVuY3Rpb24gY2UoQSxlKXtyZXR1cm4gZT9BLnJlcGxhY2UoL1wvP1wvJC8sIiIpKyIvIitlLnJlcGxhY2UoL15cLysvLCIiKTpBfWZ1bmN0aW9uIGxBKEEsZSl7cmV0dXJuIEEmJiF1ZShlKT9jZShBLGUpOmV9dmFyIGZ0PUE9PkEgaW5zdGFuY2VvZiBGP3suLi5BfTpBO2Z1bmN0aW9uIE8oQSxlKXtlPWV8fHt9O2xldCB0PXt9O2Z1bmN0aW9uIHIoSSxhLHMpe3JldHVybiB1LmlzUGxhaW5PYmplY3QoSSkmJnUuaXNQbGFpbk9iamVjdChhKT91Lm1lcmdlLmNhbGwoe2Nhc2VsZXNzOnN9LEksYSk6dS5pc1BsYWluT2JqZWN0KGEpP3UubWVyZ2Uoe30sYSk6dS5pc0FycmF5KGEpP2Euc2xpY2UoKTphfWZ1bmN0aW9uIGkoSSxhLHMpe2lmKHUuaXNVbmRlZmluZWQoYSkpe2lmKCF1LmlzVW5kZWZpbmVkKEkpKXJldHVybiByKHZvaWQgMCxJLHMpfWVsc2UgcmV0dXJuIHIoSSxhLHMpfWZ1bmN0aW9uIG4oSSxhKXtpZighdS5pc1VuZGVmaW5lZChhKSlyZXR1cm4gcih2b2lkIDAsYSl9ZnVuY3Rpb24gbyhJLGEpe2lmKHUuaXNVbmRlZmluZWQoYSkpe2lmKCF1LmlzVW5kZWZpbmVkKEkpKXJldHVybiByKHZvaWQgMCxJKX1lbHNlIHJldHVybiByKHZvaWQgMCxhKX1mdW5jdGlvbiBnKEksYSxzKXtpZihzIGluIGUpcmV0dXJuIHIoSSxhKTtpZihzIGluIEEpcmV0dXJuIHIodm9pZCAwLEkpfWxldCBjPXt1cmw6bixtZXRob2Q6bixkYXRhOm4sYmFzZVVSTDpvLHRyYW5zZm9ybVJlcXVlc3Q6byx0cmFuc2Zvcm1SZXNwb25zZTpvLHBhcmFtc1NlcmlhbGl6ZXI6byx0aW1lb3V0Om8sdGltZW91dE1lc3NhZ2U6byx3aXRoQ3JlZGVudGlhbHM6byx3aXRoWFNSRlRva2VuOm8sYWRhcHRlcjpvLHJlc3BvbnNlVHlwZTpvLHhzcmZDb29raWVOYW1lOm8seHNyZkhlYWRlck5hbWU6byxvblVwbG9hZFByb2dyZXNzOm8sb25Eb3dubG9hZFByb2dyZXNzOm8sZGVjb21wcmVzczpvLG1heENvbnRlbnRMZW5ndGg6byxtYXhCb2R5TGVuZ3RoOm8sYmVmb3JlUmVkaXJlY3Q6byx0cmFuc3BvcnQ6byxodHRwQWdlbnQ6byxodHRwc0FnZW50Om8sY2FuY2VsVG9rZW46byxzb2NrZXRQYXRoOm8scmVzcG9uc2VFbmNvZGluZzpvLHZhbGlkYXRlU3RhdHVzOmcsaGVhZGVyczooSSxhKT0+aShmdChJKSxmdChhKSwhMCl9O3JldHVybiB1LmZvckVhY2goT2JqZWN0LmtleXMoT2JqZWN0LmFzc2lnbih7fSxBLGUpKSxmdW5jdGlvbihhKXtsZXQgcz1jW2FdfHxpLHA9cyhBW2FdLGVbYV0sYSk7dS5pc1VuZGVmaW5lZChwKSYmcyE9PWd8fCh0W2FdPXApfSksdH12YXIgUkE9QT0+e2xldCBlPU8oe30sQSkse2RhdGE6dCx3aXRoWFNSRlRva2VuOnIseHNyZkhlYWRlck5hbWU6aSx4c3JmQ29va2llTmFtZTpuLGhlYWRlcnM6byxhdXRoOmd9PWU7ZS5oZWFkZXJzPW89Ri5mcm9tKG8pLGUudXJsPW9BKGxBKGUuYmFzZVVSTCxlLnVybCksQS5wYXJhbXMsQS5wYXJhbXNTZXJpYWxpemVyKSxnJiZvLnNldCgiQXV0aG9yaXphdGlvbiIsIkJhc2ljICIrYnRvYSgoZy51c2VybmFtZXx8IiIpKyI6IisoZy5wYXNzd29yZD91bmVzY2FwZShlbmNvZGVVUklDb21wb25lbnQoZy5wYXNzd29yZCkpOiIiKSkpO2xldCBjO2lmKHUuaXNGb3JtRGF0YSh0KSl7aWYoay5oYXNTdGFuZGFyZEJyb3dzZXJFbnZ8fGsuaGFzU3RhbmRhcmRCcm93c2VyV2ViV29ya2VyRW52KW8uc2V0Q29udGVudFR5cGUodm9pZCAwKTtlbHNlIGlmKChjPW8uZ2V0Q29udGVudFR5cGUoKSkhPT0hMSl7bGV0W0ksLi4uYV09Yz9jLnNwbGl0KCI7IikubWFwKHM9PnMudHJpbSgpKS5maWx0ZXIoQm9vbGVhbik6W107by5zZXRDb250ZW50VHlwZShbSXx8Im11bHRpcGFydC9mb3JtLWRhdGEiLC4uLmFdLmpvaW4oIjsgIikpfX1pZihrLmhhc1N0YW5kYXJkQnJvd3NlckVudiYmKHImJnUuaXNGdW5jdGlvbihyKSYmKHI9cihlKSkscnx8ciE9PSExJiZjdChlLnVybCkpKXtsZXQgST1pJiZuJiZCdC5yZWFkKG4pO0kmJm8uc2V0KGksSSl9cmV0dXJuIGV9O3ZhciBwbj10eXBlb2YgWE1MSHR0cFJlcXVlc3Q8InUiLEN0PXBuJiZmdW5jdGlvbihBKXtyZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24odCxyKXtsZXQgaT1SQShBKSxuPWkuZGF0YSxvPUYuZnJvbShpLmhlYWRlcnMpLm5vcm1hbGl6ZSgpLHtyZXNwb25zZVR5cGU6ZyxvblVwbG9hZFByb2dyZXNzOmMsb25Eb3dubG9hZFByb2dyZXNzOkl9PWksYSxzLHAsbCxCO2Z1bmN0aW9uIEMoKXtsJiZsKCksQiYmQigpLGkuY2FuY2VsVG9rZW4mJmkuY2FuY2VsVG9rZW4udW5zdWJzY3JpYmUoYSksaS5zaWduYWwmJmkuc2lnbmFsLnJlbW92ZUV2ZW50TGlzdGVuZXIoImFib3J0IixhKX1sZXQgZj1uZXcgWE1MSHR0cFJlcXVlc3Q7Zi5vcGVuKGkubWV0aG9kLnRvVXBwZXJDYXNlKCksaS51cmwsITApLGYudGltZW91dD1pLnRpbWVvdXQ7ZnVuY3Rpb24gUSgpe2lmKCFmKXJldHVybjtsZXQgZD1GLmZyb20oImdldEFsbFJlc3BvbnNlSGVhZGVycyJpbiBmJiZmLmdldEFsbFJlc3BvbnNlSGVhZGVycygpKSxZPXtkYXRhOiFnfHxnPT09InRleHQifHxnPT09Impzb24iP2YucmVzcG9uc2VUZXh0OmYucmVzcG9uc2Usc3RhdHVzOmYuc3RhdHVzLHN0YXR1c1RleHQ6Zi5zdGF0dXNUZXh0LGhlYWRlcnM6ZCxjb25maWc6QSxyZXF1ZXN0OmZ9O2dBKGZ1bmN0aW9uKEcpe3QoRyksQygpfSxmdW5jdGlvbihHKXtyKEcpLEMoKX0sWSksZj1udWxsfSJvbmxvYWRlbmQiaW4gZj9mLm9ubG9hZGVuZD1ROmYub25yZWFkeXN0YXRlY2hhbmdlPWZ1bmN0aW9uKCl7IWZ8fGYucmVhZHlTdGF0ZSE9PTR8fGYuc3RhdHVzPT09MCYmIShmLnJlc3BvbnNlVVJMJiZmLnJlc3BvbnNlVVJMLmluZGV4T2YoImZpbGU6Iik9PT0wKXx8c2V0VGltZW91dChRKX0sZi5vbmFib3J0PWZ1bmN0aW9uKCl7ZiYmKHIobmV3IG0oIlJlcXVlc3QgYWJvcnRlZCIsbS5FQ09OTkFCT1JURUQsQSxmKSksZj1udWxsKX0sZi5vbmVycm9yPWZ1bmN0aW9uKCl7cihuZXcgbSgiTmV0d29yayBFcnJvciIsbS5FUlJfTkVUV09SSyxBLGYpKSxmPW51bGx9LGYub250aW1lb3V0PWZ1bmN0aW9uKCl7bGV0IFQ9aS50aW1lb3V0PyJ0aW1lb3V0IG9mICIraS50aW1lb3V0KyJtcyBleGNlZWRlZCI6InRpbWVvdXQgZXhjZWVkZWQiLFk9aS50cmFuc2l0aW9uYWx8fGJBO2kudGltZW91dEVycm9yTWVzc2FnZSYmKFQ9aS50aW1lb3V0RXJyb3JNZXNzYWdlKSxyKG5ldyBtKFQsWS5jbGFyaWZ5VGltZW91dEVycm9yP20uRVRJTUVET1VUOm0uRUNPTk5BQk9SVEVELEEsZikpLGY9bnVsbH0sbj09PXZvaWQgMCYmby5zZXRDb250ZW50VHlwZShudWxsKSwic2V0UmVxdWVzdEhlYWRlciJpbiBmJiZ1LmZvckVhY2goby50b0pTT04oKSxmdW5jdGlvbihULFkpe2Yuc2V0UmVxdWVzdEhlYWRlcihZLFQpfSksdS5pc1VuZGVmaW5lZChpLndpdGhDcmVkZW50aWFscyl8fChmLndpdGhDcmVkZW50aWFscz0hIWkud2l0aENyZWRlbnRpYWxzKSxnJiZnIT09Impzb24iJiYoZi5yZXNwb25zZVR5cGU9aS5yZXNwb25zZVR5cGUpLEkmJihbcCxCXT0kKEksITApLGYuYWRkRXZlbnRMaXN0ZW5lcigicHJvZ3Jlc3MiLHApKSxjJiZmLnVwbG9hZCYmKFtzLGxdPSQoYyksZi51cGxvYWQuYWRkRXZlbnRMaXN0ZW5lcigicHJvZ3Jlc3MiLHMpLGYudXBsb2FkLmFkZEV2ZW50TGlzdGVuZXIoImxvYWRlbmQiLGwpKSwoaS5jYW5jZWxUb2tlbnx8aS5zaWduYWwpJiYoYT1kPT57ZiYmKHIoIWR8fGQudHlwZT9uZXcgSChudWxsLEEsZik6ZCksZi5hYm9ydCgpLGY9bnVsbCl9LGkuY2FuY2VsVG9rZW4mJmkuY2FuY2VsVG9rZW4uc3Vic2NyaWJlKGEpLGkuc2lnbmFsJiYoaS5zaWduYWwuYWJvcnRlZD9hKCk6aS5zaWduYWwuYWRkRXZlbnRMaXN0ZW5lcigiYWJvcnQiLGEpKSk7bGV0IGg9SWUoaS51cmwpO2lmKGgmJmsucHJvdG9jb2xzLmluZGV4T2YoaCk9PT0tMSl7cihuZXcgbSgiVW5zdXBwb3J0ZWQgcHJvdG9jb2wgIitoKyI6IixtLkVSUl9CQURfUkVRVUVTVCxBKSk7cmV0dXJufWYuc2VuZChufHxudWxsKX0pfTt2YXIgRW49KEEsZSk9PntsZXQgdD1uZXcgQWJvcnRDb250cm9sbGVyLHIsaT1mdW5jdGlvbihjKXtpZighcil7cj0hMCxvKCk7bGV0IEk9YyBpbnN0YW5jZW9mIEVycm9yP2M6dGhpcy5yZWFzb247dC5hYm9ydChJIGluc3RhbmNlb2YgbT9JOm5ldyBIKEkgaW5zdGFuY2VvZiBFcnJvcj9JLm1lc3NhZ2U6SSkpfX0sbj1lJiZzZXRUaW1lb3V0KCgpPT57aShuZXcgbShgdGltZW91dCAke2V9IG9mIG1zIGV4Y2VlZGVkYCxtLkVUSU1FRE9VVCkpfSxlKSxvPSgpPT57QSYmKG4mJmNsZWFyVGltZW91dChuKSxuPW51bGwsQS5mb3JFYWNoKGM9PntjJiYoYy5yZW1vdmVFdmVudExpc3RlbmVyP2MucmVtb3ZlRXZlbnRMaXN0ZW5lcigiYWJvcnQiLGkpOmMudW5zdWJzY3JpYmUoaSkpfSksQT1udWxsKX07QS5mb3JFYWNoKGM9PmMmJmMuYWRkRXZlbnRMaXN0ZW5lciYmYy5hZGRFdmVudExpc3RlbmVyKCJhYm9ydCIsaSkpO2xldHtzaWduYWw6Z309dDtyZXR1cm4gZy51bnN1YnNjcmliZT1vLFtnLCgpPT57biYmY2xlYXJUaW1lb3V0KG4pLG49bnVsbH1dfSxwdD1Fbjt2YXIgUW49ZnVuY3Rpb24qKEEsZSl7bGV0IHQ9QS5ieXRlTGVuZ3RoO2lmKCFlfHx0PGUpe3lpZWxkIEE7cmV0dXJufWxldCByPTAsaTtmb3IoO3I8dDspaT1yK2UseWllbGQgQS5zbGljZShyLGkpLHI9aX0sbW49YXN5bmMgZnVuY3Rpb24qKEEsZSx0KXtmb3IgYXdhaXQobGV0IHIgb2YgQSl5aWVsZCpRbihBcnJheUJ1ZmZlci5pc1ZpZXcocik/cjphd2FpdCB0KFN0cmluZyhyKSksZSl9LEJlPShBLGUsdCxyLGkpPT57bGV0IG49bW4oQSxlLGkpLG89MCxnLGM9ST0+e2d8fChnPSEwLHImJnIoSSkpfTtyZXR1cm4gbmV3IFJlYWRhYmxlU3RyZWFtKHthc3luYyBwdWxsKEkpe3RyeXtsZXR7ZG9uZTphLHZhbHVlOnN9PWF3YWl0IG4ubmV4dCgpO2lmKGEpe2MoKSxJLmNsb3NlKCk7cmV0dXJufWxldCBwPXMuYnl0ZUxlbmd0aDtpZih0KXtsZXQgbD1vKz1wO3QobCl9SS5lbnF1ZXVlKG5ldyBVaW50OEFycmF5KHMpKX1jYXRjaChhKXt0aHJvdyBjKGEpLGF9fSxjYW5jZWwoSSl7cmV0dXJuIGMoSSksbi5yZXR1cm4oKX19LHtoaWdoV2F0ZXJNYXJrOjJ9KX07dmFyIE5BPXR5cGVvZiBmZXRjaD09ImZ1bmN0aW9uIiYmdHlwZW9mIFJlcXVlc3Q9PSJmdW5jdGlvbiImJnR5cGVvZiBSZXNwb25zZT09ImZ1bmN0aW9uIixRdD1OQSYmdHlwZW9mIFJlYWRhYmxlU3RyZWFtPT0iZnVuY3Rpb24iLGZlPU5BJiYodHlwZW9mIFRleHRFbmNvZGVyPT0iZnVuY3Rpb24iPyhBPT5lPT5BLmVuY29kZShlKSkobmV3IFRleHRFbmNvZGVyKTphc3luYyBBPT5uZXcgVWludDhBcnJheShhd2FpdCBuZXcgUmVzcG9uc2UoQSkuYXJyYXlCdWZmZXIoKSkpLG10PShBLC4uLmUpPT57dHJ5e3JldHVybiEhQSguLi5lKX1jYXRjaHtyZXR1cm4hMX19LGRuPVF0JiZtdCgoKT0+e2xldCBBPSExLGU9bmV3IFJlcXVlc3Qoay5vcmlnaW4se2JvZHk6bmV3IFJlYWRhYmxlU3RyZWFtLG1ldGhvZDoiUE9TVCIsZ2V0IGR1cGxleCgpe3JldHVybiBBPSEwLCJoYWxmIn19KS5oZWFkZXJzLmhhcygiQ29udGVudC1UeXBlIik7cmV0dXJuIEEmJiFlfSksRXQ9NjQqMTAyNCxDZT1RdCYmbXQoKCk9PnUuaXNSZWFkYWJsZVN0cmVhbShuZXcgUmVzcG9uc2UoIiIpLmJvZHkpKSxVQT17c3RyZWFtOkNlJiYoQT0+QS5ib2R5KX07TkEmJihBPT57WyJ0ZXh0IiwiYXJyYXlCdWZmZXIiLCJibG9iIiwiZm9ybURhdGEiLCJzdHJlYW0iXS5mb3JFYWNoKGU9PnshVUFbZV0mJihVQVtlXT11LmlzRnVuY3Rpb24oQVtlXSk/dD0+dFtlXSgpOih0LHIpPT57dGhyb3cgbmV3IG0oYFJlc3BvbnNlIHR5cGUgJyR7ZX0nIGlzIG5vdCBzdXBwb3J0ZWRgLG0uRVJSX05PVF9TVVBQT1JULHIpfSl9KX0pKG5ldyBSZXNwb25zZSk7dmFyIGhuPWFzeW5jIEE9PntpZihBPT1udWxsKXJldHVybiAwO2lmKHUuaXNCbG9iKEEpKXJldHVybiBBLnNpemU7aWYodS5pc1NwZWNDb21wbGlhbnRGb3JtKEEpKXJldHVybihhd2FpdCBuZXcgUmVxdWVzdChBKS5hcnJheUJ1ZmZlcigpKS5ieXRlTGVuZ3RoO2lmKHUuaXNBcnJheUJ1ZmZlclZpZXcoQSl8fHUuaXNBcnJheUJ1ZmZlcihBKSlyZXR1cm4gQS5ieXRlTGVuZ3RoO2lmKHUuaXNVUkxTZWFyY2hQYXJhbXMoQSkmJihBPUErIiIpLHUuaXNTdHJpbmcoQSkpcmV0dXJuKGF3YWl0IGZlKEEpKS5ieXRlTGVuZ3RofSx5bj1hc3luYyhBLGUpPT57bGV0IHQ9dS50b0Zpbml0ZU51bWJlcihBLmdldENvbnRlbnRMZW5ndGgoKSk7cmV0dXJuIHQ/P2huKGUpfSxkdD1OQSYmKGFzeW5jIEE9PntsZXR7dXJsOmUsbWV0aG9kOnQsZGF0YTpyLHNpZ25hbDppLGNhbmNlbFRva2VuOm4sdGltZW91dDpvLG9uRG93bmxvYWRQcm9ncmVzczpnLG9uVXBsb2FkUHJvZ3Jlc3M6YyxyZXNwb25zZVR5cGU6SSxoZWFkZXJzOmEsd2l0aENyZWRlbnRpYWxzOnM9InNhbWUtb3JpZ2luIixmZXRjaE9wdGlvbnM6cH09UkEoQSk7ST1JPyhJKyIiKS50b0xvd2VyQ2FzZSgpOiJ0ZXh0IjtsZXRbbCxCXT1pfHxufHxvP3B0KFtpLG5dLG8pOltdLEMsZixRPSgpPT57IUMmJnNldFRpbWVvdXQoKCk9PntsJiZsLnVuc3Vic2NyaWJlKCl9KSxDPSEwfSxoO3RyeXtpZihjJiZkbiYmdCE9PSJnZXQiJiZ0IT09ImhlYWQiJiYoaD1hd2FpdCB5bihhLHIpKSE9PTApe2xldCBQPW5ldyBSZXF1ZXN0KGUse21ldGhvZDoiUE9TVCIsYm9keTpyLGR1cGxleDoiaGFsZiJ9KSxHO2lmKHUuaXNGb3JtRGF0YShyKSYmKEc9UC5oZWFkZXJzLmdldCgiY29udGVudC10eXBlIikpJiZhLnNldENvbnRlbnRUeXBlKEcpLFAuYm9keSl7bGV0W0hBLGZBXT1nZShoLCQobGUoYykpKTtyPUJlKFAuYm9keSxFdCxIQSxmQSxmZSl9fXUuaXNTdHJpbmcocyl8fChzPXM/ImluY2x1ZGUiOiJvbWl0IiksZj1uZXcgUmVxdWVzdChlLHsuLi5wLHNpZ25hbDpsLG1ldGhvZDp0LnRvVXBwZXJDYXNlKCksaGVhZGVyczphLm5vcm1hbGl6ZSgpLnRvSlNPTigpLGJvZHk6cixkdXBsZXg6ImhhbGYiLGNyZWRlbnRpYWxzOnN9KTtsZXQgZD1hd2FpdCBmZXRjaChmKSxUPUNlJiYoST09PSJzdHJlYW0ifHxJPT09InJlc3BvbnNlIik7aWYoQ2UmJihnfHxUKSl7bGV0IFA9e307WyJzdGF0dXMiLCJzdGF0dXNUZXh0IiwiaGVhZGVycyJdLmZvckVhY2goRmU9PntQW0ZlXT1kW0ZlXX0pO2xldCBHPXUudG9GaW5pdGVOdW1iZXIoZC5oZWFkZXJzLmdldCgiY29udGVudC1sZW5ndGgiKSksW0hBLGZBXT1nJiZnZShHLCQobGUoZyksITApKXx8W107ZD1uZXcgUmVzcG9uc2UoQmUoZC5ib2R5LEV0LEhBLCgpPT57ZkEmJmZBKCksVCYmUSgpfSxmZSksUCl9ST1JfHwidGV4dCI7bGV0IFk9YXdhaXQgVUFbdS5maW5kS2V5KFVBLEkpfHwidGV4dCJdKGQsQSk7cmV0dXJuIVQmJlEoKSxCJiZCKCksYXdhaXQgbmV3IFByb21pc2UoKFAsRyk9PntnQShQLEcse2RhdGE6WSxoZWFkZXJzOkYuZnJvbShkLmhlYWRlcnMpLHN0YXR1czpkLnN0YXR1cyxzdGF0dXNUZXh0OmQuc3RhdHVzVGV4dCxjb25maWc6QSxyZXF1ZXN0OmZ9KX0pfWNhdGNoKGQpe3Rocm93IFEoKSxkJiZkLm5hbWU9PT0iVHlwZUVycm9yIiYmL2ZldGNoL2kudGVzdChkLm1lc3NhZ2UpP09iamVjdC5hc3NpZ24obmV3IG0oIk5ldHdvcmsgRXJyb3IiLG0uRVJSX05FVFdPUkssQSxmKSx7Y2F1c2U6ZC5jYXVzZXx8ZH0pOm0uZnJvbShkLGQmJmQuY29kZSxBLGYpfX0pO3ZhciBwZT17aHR0cDpEQSx4aHI6Q3QsZmV0Y2g6ZHR9O3UuZm9yRWFjaChwZSwoQSxlKT0+e2lmKEEpe3RyeXtPYmplY3QuZGVmaW5lUHJvcGVydHkoQSwibmFtZSIse3ZhbHVlOmV9KX1jYXRjaHt9T2JqZWN0LmRlZmluZVByb3BlcnR5KEEsImFkYXB0ZXJOYW1lIix7dmFsdWU6ZX0pfX0pO3ZhciBodD1BPT5gLSAke0F9YCx3bj1BPT51LmlzRnVuY3Rpb24oQSl8fEE9PT1udWxsfHxBPT09ITEsVEE9e2dldEFkYXB0ZXI6QT0+e0E9dS5pc0FycmF5KEEpP0E6W0FdO2xldHtsZW5ndGg6ZX09QSx0LHIsaT17fTtmb3IobGV0IG49MDtuPGU7bisrKXt0PUFbbl07bGV0IG87aWYocj10LCF3bih0KSYmKHI9cGVbKG89U3RyaW5nKHQpKS50b0xvd2VyQ2FzZSgpXSxyPT09dm9pZCAwKSl0aHJvdyBuZXcgbShgVW5rbm93biBhZGFwdGVyICcke299J2ApO2lmKHIpYnJlYWs7aVtvfHwiIyIrbl09cn1pZighcil7bGV0IG49T2JqZWN0LmVudHJpZXMoaSkubWFwKChbZyxjXSk9PmBhZGFwdGVyICR7Z30gYCsoYz09PSExPyJpcyBub3Qgc3VwcG9ydGVkIGJ5IHRoZSBlbnZpcm9ubWVudCI6ImlzIG5vdCBhdmFpbGFibGUgaW4gdGhlIGJ1aWxkIikpLG89ZT9uLmxlbmd0aD4xP2BzaW5jZSA6CmArbi5tYXAoaHQpLmpvaW4oYApgKToiICIraHQoblswXSk6ImFzIG5vIGFkYXB0ZXIgc3BlY2lmaWVkIjt0aHJvdyBuZXcgbSgiVGhlcmUgaXMgbm8gc3VpdGFibGUgYWRhcHRlciB0byBkaXNwYXRjaCB0aGUgcmVxdWVzdCAiK28sIkVSUl9OT1RfU1VQUE9SVCIpfXJldHVybiByfSxhZGFwdGVyczpwZX07ZnVuY3Rpb24gRWUoQSl7aWYoQS5jYW5jZWxUb2tlbiYmQS5jYW5jZWxUb2tlbi50aHJvd0lmUmVxdWVzdGVkKCksQS5zaWduYWwmJkEuc2lnbmFsLmFib3J0ZWQpdGhyb3cgbmV3IEgobnVsbCxBKX1mdW5jdGlvbiBMQShBKXtyZXR1cm4gRWUoQSksQS5oZWFkZXJzPUYuZnJvbShBLmhlYWRlcnMpLEEuZGF0YT1zQS5jYWxsKEEsQS50cmFuc2Zvcm1SZXF1ZXN0KSxbInBvc3QiLCJwdXQiLCJwYXRjaCJdLmluZGV4T2YoQS5tZXRob2QpIT09LTEmJkEuaGVhZGVycy5zZXRDb250ZW50VHlwZSgiYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkIiwhMSksVEEuZ2V0QWRhcHRlcihBLmFkYXB0ZXJ8fFouYWRhcHRlcikoQSkudGhlbihmdW5jdGlvbihyKXtyZXR1cm4gRWUoQSksci5kYXRhPXNBLmNhbGwoQSxBLnRyYW5zZm9ybVJlc3BvbnNlLHIpLHIuaGVhZGVycz1GLmZyb20oci5oZWFkZXJzKSxyfSxmdW5jdGlvbihyKXtyZXR1cm4gSUEocil8fChFZShBKSxyJiZyLnJlc3BvbnNlJiYoci5yZXNwb25zZS5kYXRhPXNBLmNhbGwoQSxBLnRyYW5zZm9ybVJlc3BvbnNlLHIucmVzcG9uc2UpLHIucmVzcG9uc2UuaGVhZGVycz1GLmZyb20oci5yZXNwb25zZS5oZWFkZXJzKSkpLFByb21pc2UucmVqZWN0KHIpfSl9dmFyIHhBPSIxLjcuNCI7dmFyIFFlPXt9O1sib2JqZWN0IiwiYm9vbGVhbiIsIm51bWJlciIsImZ1bmN0aW9uIiwic3RyaW5nIiwic3ltYm9sIl0uZm9yRWFjaCgoQSxlKT0+e1FlW0FdPWZ1bmN0aW9uKHIpe3JldHVybiB0eXBlb2Ygcj09PUF8fCJhIisoZTwxPyJuICI6IiAiKStBfX0pO3ZhciB5dD17fTtRZS50cmFuc2l0aW9uYWw9ZnVuY3Rpb24oZSx0LHIpe2Z1bmN0aW9uIGkobixvKXtyZXR1cm4iW0F4aW9zIHYiK3hBKyJdIFRyYW5zaXRpb25hbCBvcHRpb24gJyIrbisiJyIrbysocj8iLiAiK3I6IiIpfXJldHVybihuLG8sZyk9PntpZihlPT09ITEpdGhyb3cgbmV3IG0oaShvLCIgaGFzIGJlZW4gcmVtb3ZlZCIrKHQ/IiBpbiAiK3Q6IiIpKSxtLkVSUl9ERVBSRUNBVEVEKTtyZXR1cm4gdCYmIXl0W29dJiYoeXRbb109ITAsY29uc29sZS53YXJuKGkobywiIGhhcyBiZWVuIGRlcHJlY2F0ZWQgc2luY2UgdiIrdCsiIGFuZCB3aWxsIGJlIHJlbW92ZWQgaW4gdGhlIG5lYXIgZnV0dXJlIikpKSxlP2UobixvLGcpOiEwfX07ZnVuY3Rpb24gRG4oQSxlLHQpe2lmKHR5cGVvZiBBIT0ib2JqZWN0Iil0aHJvdyBuZXcgbSgib3B0aW9ucyBtdXN0IGJlIGFuIG9iamVjdCIsbS5FUlJfQkFEX09QVElPTl9WQUxVRSk7bGV0IHI9T2JqZWN0LmtleXMoQSksaT1yLmxlbmd0aDtmb3IoO2ktLSA+MDspe2xldCBuPXJbaV0sbz1lW25dO2lmKG8pe2xldCBnPUFbbl0sYz1nPT09dm9pZCAwfHxvKGcsbixBKTtpZihjIT09ITApdGhyb3cgbmV3IG0oIm9wdGlvbiAiK24rIiBtdXN0IGJlICIrYyxtLkVSUl9CQURfT1BUSU9OX1ZBTFVFKTtjb250aW51ZX1pZih0IT09ITApdGhyb3cgbmV3IG0oIlVua25vd24gb3B0aW9uICIrbixtLkVSUl9CQURfT1BUSU9OKX19dmFyIE9BPXthc3NlcnRPcHRpb25zOkRuLHZhbGlkYXRvcnM6UWV9O3ZhciBxPU9BLnZhbGlkYXRvcnMsQUE9Y2xhc3N7Y29uc3RydWN0b3IoZSl7dGhpcy5kZWZhdWx0cz1lLHRoaXMuaW50ZXJjZXB0b3JzPXtyZXF1ZXN0Om5ldyByZSxyZXNwb25zZTpuZXcgcmV9fWFzeW5jIHJlcXVlc3QoZSx0KXt0cnl7cmV0dXJuIGF3YWl0IHRoaXMuX3JlcXVlc3QoZSx0KX1jYXRjaChyKXtpZihyIGluc3RhbmNlb2YgRXJyb3Ipe2xldCBpO0Vycm9yLmNhcHR1cmVTdGFja1RyYWNlP0Vycm9yLmNhcHR1cmVTdGFja1RyYWNlKGk9e30pOmk9bmV3IEVycm9yO2xldCBuPWkuc3RhY2s/aS5zdGFjay5yZXBsYWNlKC9eLitcbi8sIiIpOiIiO3RyeXtyLnN0YWNrP24mJiFTdHJpbmcoci5zdGFjaykuZW5kc1dpdGgobi5yZXBsYWNlKC9eLitcbi4rXG4vLCIiKSkmJihyLnN0YWNrKz1gCmArbik6ci5zdGFjaz1ufWNhdGNoe319dGhyb3cgcn19X3JlcXVlc3QoZSx0KXt0eXBlb2YgZT09InN0cmluZyI/KHQ9dHx8e30sdC51cmw9ZSk6dD1lfHx7fSx0PU8odGhpcy5kZWZhdWx0cyx0KTtsZXR7dHJhbnNpdGlvbmFsOnIscGFyYW1zU2VyaWFsaXplcjppLGhlYWRlcnM6bn09dDtyIT09dm9pZCAwJiZPQS5hc3NlcnRPcHRpb25zKHIse3NpbGVudEpTT05QYXJzaW5nOnEudHJhbnNpdGlvbmFsKHEuYm9vbGVhbiksZm9yY2VkSlNPTlBhcnNpbmc6cS50cmFuc2l0aW9uYWwocS5ib29sZWFuKSxjbGFyaWZ5VGltZW91dEVycm9yOnEudHJhbnNpdGlvbmFsKHEuYm9vbGVhbil9LCExKSxpIT1udWxsJiYodS5pc0Z1bmN0aW9uKGkpP3QucGFyYW1zU2VyaWFsaXplcj17c2VyaWFsaXplOml9Ok9BLmFzc2VydE9wdGlvbnMoaSx7ZW5jb2RlOnEuZnVuY3Rpb24sc2VyaWFsaXplOnEuZnVuY3Rpb259LCEwKSksdC5tZXRob2Q9KHQubWV0aG9kfHx0aGlzLmRlZmF1bHRzLm1ldGhvZHx8ImdldCIpLnRvTG93ZXJDYXNlKCk7bGV0IG89biYmdS5tZXJnZShuLmNvbW1vbixuW3QubWV0aG9kXSk7biYmdS5mb3JFYWNoKFsiZGVsZXRlIiwiZ2V0IiwiaGVhZCIsInBvc3QiLCJwdXQiLCJwYXRjaCIsImNvbW1vbiJdLEI9PntkZWxldGUgbltCXX0pLHQuaGVhZGVycz1GLmNvbmNhdChvLG4pO2xldCBnPVtdLGM9ITA7dGhpcy5pbnRlcmNlcHRvcnMucmVxdWVzdC5mb3JFYWNoKGZ1bmN0aW9uKEMpe3R5cGVvZiBDLnJ1bldoZW49PSJmdW5jdGlvbiImJkMucnVuV2hlbih0KT09PSExfHwoYz1jJiZDLnN5bmNocm9ub3VzLGcudW5zaGlmdChDLmZ1bGZpbGxlZCxDLnJlamVjdGVkKSl9KTtsZXQgST1bXTt0aGlzLmludGVyY2VwdG9ycy5yZXNwb25zZS5mb3JFYWNoKGZ1bmN0aW9uKEMpe0kucHVzaChDLmZ1bGZpbGxlZCxDLnJlamVjdGVkKX0pO2xldCBhLHM9MCxwO2lmKCFjKXtsZXQgQj1bTEEuYmluZCh0aGlzKSx2b2lkIDBdO2ZvcihCLnVuc2hpZnQuYXBwbHkoQixnKSxCLnB1c2guYXBwbHkoQixJKSxwPUIubGVuZ3RoLGE9UHJvbWlzZS5yZXNvbHZlKHQpO3M8cDspYT1hLnRoZW4oQltzKytdLEJbcysrXSk7cmV0dXJuIGF9cD1nLmxlbmd0aDtsZXQgbD10O2ZvcihzPTA7czxwOyl7bGV0IEI9Z1tzKytdLEM9Z1tzKytdO3RyeXtsPUIobCl9Y2F0Y2goZil7Qy5jYWxsKHRoaXMsZik7YnJlYWt9fXRyeXthPUxBLmNhbGwodGhpcyxsKX1jYXRjaChCKXtyZXR1cm4gUHJvbWlzZS5yZWplY3QoQil9Zm9yKHM9MCxwPUkubGVuZ3RoO3M8cDspYT1hLnRoZW4oSVtzKytdLElbcysrXSk7cmV0dXJuIGF9Z2V0VXJpKGUpe2U9Tyh0aGlzLmRlZmF1bHRzLGUpO2xldCB0PWxBKGUuYmFzZVVSTCxlLnVybCk7cmV0dXJuIG9BKHQsZS5wYXJhbXMsZS5wYXJhbXNTZXJpYWxpemVyKX19O3UuZm9yRWFjaChbImRlbGV0ZSIsImdldCIsImhlYWQiLCJvcHRpb25zIl0sZnVuY3Rpb24oZSl7QUEucHJvdG90eXBlW2VdPWZ1bmN0aW9uKHQscil7cmV0dXJuIHRoaXMucmVxdWVzdChPKHJ8fHt9LHttZXRob2Q6ZSx1cmw6dCxkYXRhOihyfHx7fSkuZGF0YX0pKX19KTt1LmZvckVhY2goWyJwb3N0IiwicHV0IiwicGF0Y2giXSxmdW5jdGlvbihlKXtmdW5jdGlvbiB0KHIpe3JldHVybiBmdW5jdGlvbihuLG8sZyl7cmV0dXJuIHRoaXMucmVxdWVzdChPKGd8fHt9LHttZXRob2Q6ZSxoZWFkZXJzOnI/eyJDb250ZW50LVR5cGUiOiJtdWx0aXBhcnQvZm9ybS1kYXRhIn06e30sdXJsOm4sZGF0YTpvfSkpfX1BQS5wcm90b3R5cGVbZV09dCgpLEFBLnByb3RvdHlwZVtlKyJGb3JtIl09dCghMCl9KTt2YXIgdUE9QUE7dmFyIG1lPWNsYXNzIEF7Y29uc3RydWN0b3IoZSl7aWYodHlwZW9mIGUhPSJmdW5jdGlvbiIpdGhyb3cgbmV3IFR5cGVFcnJvcigiZXhlY3V0b3IgbXVzdCBiZSBhIGZ1bmN0aW9uLiIpO2xldCB0O3RoaXMucHJvbWlzZT1uZXcgUHJvbWlzZShmdW5jdGlvbihuKXt0PW59KTtsZXQgcj10aGlzO3RoaXMucHJvbWlzZS50aGVuKGk9PntpZighci5fbGlzdGVuZXJzKXJldHVybjtsZXQgbj1yLl9saXN0ZW5lcnMubGVuZ3RoO2Zvcig7bi0tID4wOylyLl9saXN0ZW5lcnNbbl0oaSk7ci5fbGlzdGVuZXJzPW51bGx9KSx0aGlzLnByb21pc2UudGhlbj1pPT57bGV0IG4sbz1uZXcgUHJvbWlzZShnPT57ci5zdWJzY3JpYmUoZyksbj1nfSkudGhlbihpKTtyZXR1cm4gby5jYW5jZWw9ZnVuY3Rpb24oKXtyLnVuc3Vic2NyaWJlKG4pfSxvfSxlKGZ1bmN0aW9uKG4sbyxnKXtyLnJlYXNvbnx8KHIucmVhc29uPW5ldyBIKG4sbyxnKSx0KHIucmVhc29uKSl9KX10aHJvd0lmUmVxdWVzdGVkKCl7aWYodGhpcy5yZWFzb24pdGhyb3cgdGhpcy5yZWFzb259c3Vic2NyaWJlKGUpe2lmKHRoaXMucmVhc29uKXtlKHRoaXMucmVhc29uKTtyZXR1cm59dGhpcy5fbGlzdGVuZXJzP3RoaXMuX2xpc3RlbmVycy5wdXNoKGUpOnRoaXMuX2xpc3RlbmVycz1bZV19dW5zdWJzY3JpYmUoZSl7aWYoIXRoaXMuX2xpc3RlbmVycylyZXR1cm47bGV0IHQ9dGhpcy5fbGlzdGVuZXJzLmluZGV4T2YoZSk7dCE9PS0xJiZ0aGlzLl9saXN0ZW5lcnMuc3BsaWNlKHQsMSl9c3RhdGljIHNvdXJjZSgpe2xldCBlO3JldHVybnt0b2tlbjpuZXcgQShmdW5jdGlvbihpKXtlPWl9KSxjYW5jZWw6ZX19fSx3dD1tZTtmdW5jdGlvbiBkZShBKXtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIEEuYXBwbHkobnVsbCx0KX19ZnVuY3Rpb24gaGUoQSl7cmV0dXJuIHUuaXNPYmplY3QoQSkmJkEuaXNBeGlvc0Vycm9yPT09ITB9dmFyIHllPXtDb250aW51ZToxMDAsU3dpdGNoaW5nUHJvdG9jb2xzOjEwMSxQcm9jZXNzaW5nOjEwMixFYXJseUhpbnRzOjEwMyxPazoyMDAsQ3JlYXRlZDoyMDEsQWNjZXB0ZWQ6MjAyLE5vbkF1dGhvcml0YXRpdmVJbmZvcm1hdGlvbjoyMDMsTm9Db250ZW50OjIwNCxSZXNldENvbnRlbnQ6MjA1LFBhcnRpYWxDb250ZW50OjIwNixNdWx0aVN0YXR1czoyMDcsQWxyZWFkeVJlcG9ydGVkOjIwOCxJbVVzZWQ6MjI2LE11bHRpcGxlQ2hvaWNlczozMDAsTW92ZWRQZXJtYW5lbnRseTozMDEsRm91bmQ6MzAyLFNlZU90aGVyOjMwMyxOb3RNb2RpZmllZDozMDQsVXNlUHJveHk6MzA1LFVudXNlZDozMDYsVGVtcG9yYXJ5UmVkaXJlY3Q6MzA3LFBlcm1hbmVudFJlZGlyZWN0OjMwOCxCYWRSZXF1ZXN0OjQwMCxVbmF1dGhvcml6ZWQ6NDAxLFBheW1lbnRSZXF1aXJlZDo0MDIsRm9yYmlkZGVuOjQwMyxOb3RGb3VuZDo0MDQsTWV0aG9kTm90QWxsb3dlZDo0MDUsTm90QWNjZXB0YWJsZTo0MDYsUHJveHlBdXRoZW50aWNhdGlvblJlcXVpcmVkOjQwNyxSZXF1ZXN0VGltZW91dDo0MDgsQ29uZmxpY3Q6NDA5LEdvbmU6NDEwLExlbmd0aFJlcXVpcmVkOjQxMSxQcmVjb25kaXRpb25GYWlsZWQ6NDEyLFBheWxvYWRUb29MYXJnZTo0MTMsVXJpVG9vTG9uZzo0MTQsVW5zdXBwb3J0ZWRNZWRpYVR5cGU6NDE1LFJhbmdlTm90U2F0aXNmaWFibGU6NDE2LEV4cGVjdGF0aW9uRmFpbGVkOjQxNyxJbUFUZWFwb3Q6NDE4LE1pc2RpcmVjdGVkUmVxdWVzdDo0MjEsVW5wcm9jZXNzYWJsZUVudGl0eTo0MjIsTG9ja2VkOjQyMyxGYWlsZWREZXBlbmRlbmN5OjQyNCxUb29FYXJseTo0MjUsVXBncmFkZVJlcXVpcmVkOjQyNixQcmVjb25kaXRpb25SZXF1aXJlZDo0MjgsVG9vTWFueVJlcXVlc3RzOjQyOSxSZXF1ZXN0SGVhZGVyRmllbGRzVG9vTGFyZ2U6NDMxLFVuYXZhaWxhYmxlRm9yTGVnYWxSZWFzb25zOjQ1MSxJbnRlcm5hbFNlcnZlckVycm9yOjUwMCxOb3RJbXBsZW1lbnRlZDo1MDEsQmFkR2F0ZXdheTo1MDIsU2VydmljZVVuYXZhaWxhYmxlOjUwMyxHYXRld2F5VGltZW91dDo1MDQsSHR0cFZlcnNpb25Ob3RTdXBwb3J0ZWQ6NTA1LFZhcmlhbnRBbHNvTmVnb3RpYXRlczo1MDYsSW5zdWZmaWNpZW50U3RvcmFnZTo1MDcsTG9vcERldGVjdGVkOjUwOCxOb3RFeHRlbmRlZDo1MTAsTmV0d29ya0F1dGhlbnRpY2F0aW9uUmVxdWlyZWQ6NTExfTtPYmplY3QuZW50cmllcyh5ZSkuZm9yRWFjaCgoW0EsZV0pPT57eWVbZV09QX0pO3ZhciBEdD15ZTtmdW5jdGlvbiBTdChBKXtsZXQgZT1uZXcgdUEoQSksdD1yQSh1QS5wcm90b3R5cGUucmVxdWVzdCxlKTtyZXR1cm4gdS5leHRlbmQodCx1QS5wcm90b3R5cGUsZSx7YWxsT3duS2V5czohMH0pLHUuZXh0ZW5kKHQsZSxudWxsLHthbGxPd25LZXlzOiEwfSksdC5jcmVhdGU9ZnVuY3Rpb24oaSl7cmV0dXJuIFN0KE8oQSxpKSl9LHR9dmFyIFM9U3QoWik7Uy5BeGlvcz11QTtTLkNhbmNlbGVkRXJyb3I9SDtTLkNhbmNlbFRva2VuPXd0O1MuaXNDYW5jZWw9SUE7Uy5WRVJTSU9OPXhBO1MudG9Gb3JtRGF0YT1NO1MuQXhpb3NFcnJvcj1tO1MuQ2FuY2VsPVMuQ2FuY2VsZWRFcnJvcjtTLmFsbD1mdW5jdGlvbihlKXtyZXR1cm4gUHJvbWlzZS5hbGwoZSl9O1Muc3ByZWFkPWRlO1MuaXNBeGlvc0Vycm9yPWhlO1MubWVyZ2VDb25maWc9TztTLkF4aW9zSGVhZGVycz1GO1MuZm9ybVRvSlNPTj1BPT5GQSh1LmlzSFRNTEZvcm0oQSk/bmV3IEZvcm1EYXRhKEEpOkEpO1MuZ2V0QWRhcHRlcj1UQS5nZXRBZGFwdGVyO1MuSHR0cFN0YXR1c0NvZGU9RHQ7Uy5kZWZhdWx0PVM7dmFyIGVBPVM7dmFye0F4aW9zOnpzLEF4aW9zRXJyb3I6VnMsQ2FuY2VsZWRFcnJvcjpacyxpc0NhbmNlbDpYcyxDYW5jZWxUb2tlbjokcyxWRVJTSU9OOkFJLGFsbDplSSxDYW5jZWw6dEksaXNBeGlvc0Vycm9yOnJJLHNwcmVhZDpuSSx0b0Zvcm1EYXRhOmlJLEF4aW9zSGVhZGVyczpvSSxIdHRwU3RhdHVzQ29kZTphSSxmb3JtVG9KU09OOnNJLGdldEFkYXB0ZXI6SUksbWVyZ2VDb25maWc6Z0l9PWVBO2FzeW5jIGZ1bmN0aW9uIFNuKEEsZSl7bGV0IHQ9QSxyPW51bGw7aWYodD09bnVsbClyPW5ldyBXb3JrZXIobmV3IFVSTCgiLi93ZWItd29ya2Vycy9pdGstd2FzbS1waXBlbGluZS53b3JrZXIuanMiLGltcG9ydC5tZXRhLnVybCkse3R5cGU6Im1vZHVsZSJ9KTtlbHNlIGlmKHQuc3RhcnRzV2l0aCgiaHR0cCIpKXtsZXQgaT1hd2FpdCBlQS5nZXQodCx7cmVzcG9uc2VUeXBlOiJibG9iIixwYXJhbXM6ZX0pLG49VVJMLmNyZWF0ZU9iamVjdFVSTChpLmRhdGEpO3I9bmV3IFdvcmtlcihuLHt0eXBlOiJtb2R1bGUifSl9ZWxzZSByPW5ldyBXb3JrZXIodCx7dHlwZToibW9kdWxlIn0pO3JldHVybiByfXZhciBjQT1TbjtmdW5jdGlvbiBidChBKXtsZXQgZT1WQShBKSx0PUE7cmV0dXJuIHQudGVybWluYXRlZD0hMSx0LndvcmtlclByb3h5PWUsdC5vcmlnaW5hbFRlcm1pbmF0ZT10LnRlcm1pbmF0ZSx0LnRlcm1pbmF0ZT0oKT0+e3QudGVybWluYXRlZD0hMCx0LndvcmtlclByb3h5W3pBXSgpLHQub3JpZ2luYWxUZXJtaW5hdGUoKX0se3dvcmtlclByb3h5OmUsd29ya2VyOnR9fWFzeW5jIGZ1bmN0aW9uIGJuKEEsZSx0KXtsZXQgcjtpZihBIT1udWxsKXtsZXQgbj1BO3JldHVybiBuLndvcmtlclByb3h5IT09dm9pZCAwPyhyPW4ud29ya2VyUHJveHkse3dvcmtlclByb3h5OnIsd29ya2VyOm59KTpidChBKX1sZXQgaT1hd2FpdCBjQShlLHQpO3JldHVybiBidChpKX12YXIgRnQ9Ym47YXN5bmMgZnVuY3Rpb24gRm4oQSxlLHQpe2xldCByPSJ1bmtub3duIjt0eXBlb2YgQSE9InN0cmluZyI/cj1BLmhyZWY6QS5zdGFydHNXaXRoKCJodHRwIik/cj1BOnI9dHlwZW9mIGU8InUiP2Ake2V9LyR7QX1gOkEsci5lbmRzV2l0aCgiLmpzIikmJihyPXIuc3Vic3RyaW5nKDAsci5sZW5ndGgtMykpLHIuZW5kc1dpdGgoIi53YXNtIikmJihyPXIuc3Vic3RyaW5nKDAsci5sZW5ndGgtNSkpO2xldCBpPWAke3J9Lndhc21gLG89KGF3YWl0IGVBLmdldChpLHtyZXNwb25zZVR5cGU6ImFycmF5YnVmZmVyIixwYXJhbXM6dH0pKS5kYXRhO3JldHVybihhd2FpdCBpbXBvcnQoYCR7cn0uanNgKSkuZGVmYXVsdCh7d2FzbUJpbmFyeTpvfSl9dmFyIGt0PUZuO3ZhciBSdD1hc3luYygpPT5XZWJBc3NlbWJseS52YWxpZGF0ZShuZXcgVWludDhBcnJheShbMCw5NywxMTUsMTA5LDEsMCwwLDAsMSw1LDEsOTYsMCwxLDEyMywzLDIsMSwwLDEwLDEwLDEsOCwwLDY1LDAsMjUzLDE1LDI1Myw5OCwxMV0pKTt2YXIgVHQ9dHlwZW9mIGdsb2JhbFRoaXMuU2hhcmVkQXJyYXlCdWZmZXI9PSJmdW5jdGlvbiIsVXQ9bmV3IFRleHRFbmNvZGVyLE50PW5ldyBUZXh0RGVjb2RlcigidXRmLTgiKTtmdW5jdGlvbiBrbihBLGUpe2xldCB0PXtmbGFnczoiciIsZW5jb2Rpbmc6ImJpbmFyeSJ9LHI9QS5mc19vcGVuKGUsdC5mbGFncyksbj1BLmZzX3N0YXQoZSkuc2l6ZSxvPW51bGw7VHQ/bz1uZXcgU2hhcmVkQXJyYXlCdWZmZXIobik6bz1uZXcgQXJyYXlCdWZmZXIobik7bGV0IGc9bmV3IFVpbnQ4QXJyYXkobyk7cmV0dXJuIEEuZnNfcmVhZChyLGcsMCxuLDApLEEuZnNfY2xvc2UociksZ31mdW5jdGlvbiBMdChBLGUsdCl7bGV0IHI9bnVsbDtUdD9yPW5ldyBTaGFyZWRBcnJheUJ1ZmZlcih0KTpyPW5ldyBBcnJheUJ1ZmZlcih0KTtsZXQgaT1uZXcgVWludDhBcnJheShyKSxuPW5ldyBVaW50OEFycmF5KEEuSEVBUFU4LmJ1ZmZlcixlLHQpO3JldHVybiBpLnNldChuKSxpfWZ1bmN0aW9uIGIoQSxlLHQscil7bGV0IGk9MDtyZXR1cm4gZSE9PW51bGwmJihpPUEuY2NhbGwoIml0a193YXNtX2lucHV0X2FycmF5X2FsbG9jIiwibnVtYmVyIixbIm51bWJlciIsIm51bWJlciIsIm51bWJlciIsIm51bWJlciJdLFswLHQscixlLmJ1ZmZlci5ieXRlTGVuZ3RoXSksQS5IRUFQVTguc2V0KG5ldyBVaW50OEFycmF5KGUuYnVmZmVyKSxpKSksaX1mdW5jdGlvbiBXKEEsZSx0KXtsZXQgcj1KU09OLnN0cmluZ2lmeShlKSxpPUEubGVuZ3RoQnl0ZXNVVEY4KHIpKzEsbj1BLmNjYWxsKCJpdGtfd2FzbV9pbnB1dF9qc29uX2FsbG9jIiwibnVtYmVyIixbIm51bWJlciIsIm51bWJlciIsIm51bWJlciJdLFswLHQsaV0pO0Euc3RyaW5nVG9VVEY4KHIsbixpKX1mdW5jdGlvbiBVKEEsZSx0LHIpe2xldCBpPUEuY2NhbGwoIml0a193YXNtX291dHB1dF9hcnJheV9hZGRyZXNzIiwibnVtYmVyIixbIm51bWJlciIsIm51bWJlciIsIm51bWJlciJdLFswLGUsdF0pLG49QS5jY2FsbCgiaXRrX3dhc21fb3V0cHV0X2FycmF5X3NpemUiLCJudW1iZXIiLFsibnVtYmVyIiwibnVtYmVyIiwibnVtYmVyIl0sWzAsZSx0XSksbz1MdChBLGksbik7cmV0dXJuIEoocixvLmJ1ZmZlcil9ZnVuY3Rpb24gQkEoQSxlKXtsZXQgdD1BLmNjYWxsKCJpdGtfd2FzbV9vdXRwdXRfanNvbl9hZGRyZXNzIiwibnVtYmVyIixbIm51bWJlciIsIm51bWJlciJdLFswLGVdKSxyPUEuVVRGOFRvU3RyaW5nKHQpO3JldHVybiBKU09OLnBhcnNlKHIpfWZ1bmN0aW9uIFJuKEEsZSx0LHIpe3IhPW51bGwmJnIubGVuZ3RoPjAmJnIuZm9yRWFjaChmdW5jdGlvbihJLGEpe3N3aXRjaChJLnR5cGUpe2Nhc2UgRS5UZXh0U3RyZWFtOntsZXQgcz1VdC5lbmNvZGUoSS5kYXRhLmRhdGEpLHA9YihBLHMsYSwwKSxsPXtzaXplOnMuYnVmZmVyLmJ5dGVMZW5ndGgsZGF0YTpgZGF0YTphcHBsaWNhdGlvbi92bmQuaXRrLmFkZHJlc3MsMDoke3B9YH07VyhBLGwsYSk7YnJlYWt9Y2FzZSBFLkpzb25Db21wYXRpYmxlOntsZXQgcz1VdC5lbmNvZGUoSlNPTi5zdHJpbmdpZnkoSS5kYXRhKSkscD1iKEEscyxhLDApLGw9e3NpemU6cy5idWZmZXIuYnl0ZUxlbmd0aCxkYXRhOmBkYXRhOmFwcGxpY2F0aW9uL3ZuZC5pdGsuYWRkcmVzcywwOiR7cH1gfTtXKEEsbCxhKTticmVha31jYXNlIEUuQmluYXJ5U3RyZWFtOntsZXQgcz1JLmRhdGEuZGF0YSxwPWIoQSxzLGEsMCksbD17c2l6ZTpzLmJ1ZmZlci5ieXRlTGVuZ3RoLGRhdGE6YGRhdGE6YXBwbGljYXRpb24vdm5kLml0ay5hZGRyZXNzLDA6JHtwfWB9O1coQSxsLGEpO2JyZWFrfWNhc2UgRS5UZXh0RmlsZTp7QS5mc193cml0ZUZpbGUoSS5kYXRhLnBhdGgsSS5kYXRhLmRhdGEpO2JyZWFrfWNhc2UgRS5CaW5hcnlGaWxlOntBLmZzX3dyaXRlRmlsZShJLmRhdGEucGF0aCxJLmRhdGEuZGF0YSk7YnJlYWt9Y2FzZSBFLkltYWdlOntsZXQgcz1JLmRhdGEscD1iKEEscy5kYXRhLGEsMCksbD1iKEEscy5kaXJlY3Rpb24sYSwxKSxCPXR5cGVvZiBzLm1ldGFkYXRhPy5lbnRyaWVzPCJ1Ij9BcnJheS5mcm9tKHMubWV0YWRhdGEuZW50cmllcygpKTpbXSxDPXtpbWFnZVR5cGU6cy5pbWFnZVR5cGUsbmFtZTpzLm5hbWUsb3JpZ2luOnMub3JpZ2luLHNwYWNpbmc6cy5zcGFjaW5nLGRpcmVjdGlvbjpgZGF0YTphcHBsaWNhdGlvbi92bmQuaXRrLmFkZHJlc3MsMDoke2x9YCxzaXplOnMuc2l6ZSxkYXRhOmBkYXRhOmFwcGxpY2F0aW9uL3ZuZC5pdGsuYWRkcmVzcywwOiR7cH1gLG1ldGFkYXRhOkJ9O1coQSxDLGEpO2JyZWFrfWNhc2UgRS5NZXNoOntsZXQgcz1JLmRhdGEscD1iKEEscy5wb2ludHMsYSwwKSxsPWIoQSxzLmNlbGxzLGEsMSksQj1iKEEscy5wb2ludERhdGEsYSwyKSxDPWIoQSxzLmNlbGxEYXRhLGEsMyksZj17bWVzaFR5cGU6cy5tZXNoVHlwZSxuYW1lOnMubmFtZSxudW1iZXJPZlBvaW50czpzLm51bWJlck9mUG9pbnRzLHBvaW50czpgZGF0YTphcHBsaWNhdGlvbi92bmQuaXRrLmFkZHJlc3MsMDoke3B9YCxudW1iZXJPZkNlbGxzOnMubnVtYmVyT2ZDZWxscyxjZWxsczpgZGF0YTphcHBsaWNhdGlvbi92bmQuaXRrLmFkZHJlc3MsMDoke2x9YCxjZWxsQnVmZmVyU2l6ZTpzLmNlbGxCdWZmZXJTaXplLG51bWJlck9mUG9pbnRQaXhlbHM6cy5udW1iZXJPZlBvaW50UGl4ZWxzLHBvaW50RGF0YTpgZGF0YTphcHBsaWNhdGlvbi92bmQuaXRrLmFkZHJlc3MsMDoke0J9YCxudW1iZXJPZkNlbGxQaXhlbHM6cy5udW1iZXJPZkNlbGxQaXhlbHMsY2VsbERhdGE6YGRhdGE6YXBwbGljYXRpb24vdm5kLml0ay5hZGRyZXNzLDA6JHtDfWB9O1coQSxmLGEpO2JyZWFrfWNhc2UgRS5Qb2ludFNldDp7bGV0IHM9SS5kYXRhLHA9YihBLHMucG9pbnRzLGEsMCksbD1iKEEscy5wb2ludERhdGEsYSwxKSxCPXtwb2ludFNldFR5cGU6cy5wb2ludFNldFR5cGUsbmFtZTpzLm5hbWUsbnVtYmVyT2ZQb2ludHM6cy5udW1iZXJPZlBvaW50cyxwb2ludHM6YGRhdGE6YXBwbGljYXRpb24vdm5kLml0ay5hZGRyZXNzLDA6JHtwfWAsbnVtYmVyT2ZQb2ludFBpeGVsczpzLm51bWJlck9mUG9pbnRQaXhlbHMscG9pbnREYXRhOmBkYXRhOmFwcGxpY2F0aW9uL3ZuZC5pdGsuYWRkcmVzcywwOiR7bH1gfTtXKEEsQixhKTticmVha31jYXNlIEUuVHJhbnNmb3JtTGlzdDp7bGV0IHM9SS5kYXRhLHA9W107cy5mb3JFYWNoKChsLEIpPT57bGV0IGY9YGRhdGE6YXBwbGljYXRpb24vdm5kLml0ay5hZGRyZXNzLDA6JHtiKEEsbC5maXhlZFBhcmFtZXRlcnMsYSxCKjIpfWAsaD1gZGF0YTphcHBsaWNhdGlvbi92bmQuaXRrLmFkZHJlc3MsMDoke2IoQSxsLnBhcmFtZXRlcnMsYSxCKjIrMSl9YCxkPXt0cmFuc2Zvcm1UeXBlOmwudHJhbnNmb3JtVHlwZSxudW1iZXJPZkZpeGVkUGFyYW1ldGVyczpsLm51bWJlck9mRml4ZWRQYXJhbWV0ZXJzLG51bWJlck9mUGFyYW1ldGVyczpsLm51bWJlck9mUGFyYW1ldGVycyxuYW1lOmwubmFtZSxpbnB1dFNwYWNlTmFtZTpsLmlucHV0U3BhY2VOYW1lLG91dHB1dFNwYWNlTmFtZTpsLm91dHB1dFNwYWNlTmFtZSxwYXJhbWV0ZXJzOmgsZml4ZWRQYXJhbWV0ZXJzOmZ9O3AucHVzaChkKX0pLFcoQSxwLGEpO2JyZWFrfWNhc2UgRS5Qb2x5RGF0YTp7bGV0IHM9SS5kYXRhLHA9YihBLHMucG9pbnRzLGEsMCksbD1iKEEscy52ZXJ0aWNlcyxhLDEpLEI9YihBLHMubGluZXMsYSwyKSxDPWIoQSxzLnBvbHlnb25zLGEsMyksZj1iKEEscy50cmlhbmdsZVN0cmlwcyxhLDQpLFE9YihBLHMucG9pbnREYXRhLGEsNSksaD1iKEEscy5wb2ludERhdGEsYSw2KSxkPXtwb2x5RGF0YVR5cGU6cy5wb2x5RGF0YVR5cGUsbmFtZTpzLm5hbWUsbnVtYmVyT2ZQb2ludHM6cy5udW1iZXJPZlBvaW50cyxwb2ludHM6YGRhdGE6YXBwbGljYXRpb24vdm5kLml0ay5hZGRyZXNzLDA6JHtwfWAsdmVydGljZXNCdWZmZXJTaXplOnMudmVydGljZXNCdWZmZXJTaXplLHZlcnRpY2VzOmBkYXRhOmFwcGxpY2F0aW9uL3ZuZC5pdGsuYWRkcmVzcywwOiR7bH1gLGxpbmVzQnVmZmVyU2l6ZTpzLmxpbmVzQnVmZmVyU2l6ZSxsaW5lczpgZGF0YTphcHBsaWNhdGlvbi92bmQuaXRrLmFkZHJlc3MsMDoke0J9YCxwb2x5Z29uc0J1ZmZlclNpemU6cy5wb2x5Z29uc0J1ZmZlclNpemUscG9seWdvbnM6YGRhdGE6YXBwbGljYXRpb24vdm5kLml0ay5hZGRyZXNzLDA6JHtDfWAsdHJpYW5nbGVTdHJpcHNCdWZmZXJTaXplOnMudHJpYW5nbGVTdHJpcHNCdWZmZXJTaXplLHRyaWFuZ2xlU3RyaXBzOmBkYXRhOmFwcGxpY2F0aW9uL3ZuZC5pdGsuYWRkcmVzcywwOiR7Zn1gLG51bWJlck9mUG9pbnRQaXhlbHM6cy5udW1iZXJPZlBvaW50UGl4ZWxzLHBvaW50RGF0YTpgZGF0YTphcHBsaWNhdGlvbi92bmQuaXRrLmFkZHJlc3MsMDoke1F9YCxudW1iZXJPZkNlbGxQaXhlbHM6cy5udW1iZXJPZkNlbGxQaXhlbHMsY2VsbERhdGE6YGRhdGE6YXBwbGljYXRpb24vdm5kLml0ay5hZGRyZXNzLDA6JHtofWB9O1coQSxkLGEpO2JyZWFrfWRlZmF1bHQ6dGhyb3cgRXJyb3IoIlVuc3VwcG9ydGVkIGlucHV0IEludGVyZmFjZVR5cGUiKX19KSxBLnJlc2V0TW9kdWxlU3Rkb3V0KCksQS5yZXNldE1vZHVsZVN0ZGVycigpO2xldCBpPUEuc3RhY2tTYXZlKCksbj0wO3RyeXtuPUEuY2FsbE1haW4oZS5zbGljZSgpKX1jYXRjaChJKXt0aHJvdyB0eXBlb2YgST09Im51bWJlciImJihjb25zb2xlLmxvZygiRXhjZXB0aW9uIHdoaWxlIHJ1bm5pbmcgcGlwZWxpbmU6IiksY29uc29sZS5sb2coInN0ZG91dDoiLEEuZ2V0TW9kdWxlU3Rkb3V0KCkpLGNvbnNvbGUuZXJyb3IoInN0ZGVycjoiLEEuZ2V0TW9kdWxlU3RkZXJyKCkpLHR5cGVvZiBBLmdldEV4Y2VwdGlvbk1lc3NhZ2U8InUiP2NvbnNvbGUuZXJyb3IoImV4Y2VwdGlvbjoiLEEuZ2V0RXhjZXB0aW9uTWVzc2FnZShJKSk6Y29uc29sZS5lcnJvcigiQnVpbGQgbW9kdWxlIGluIERlYnVnIG1vZGUgZm9yIGV4Y2VwdGlvbiBtZXNzYWdlIGluZm9ybWF0aW9uLiIpKSxJfWZpbmFsbHl7QS5zdGFja1Jlc3RvcmUoaSl9bGV0IG89QS5nZXRNb2R1bGVTdGRvdXQoKSxnPUEuZ2V0TW9kdWxlU3RkZXJyKCksYz1bXTtyZXR1cm4gdCE9bnVsbCYmdC5sZW5ndGg+MCYmbj09PTAmJnQuZm9yRWFjaChmdW5jdGlvbihJLGEpe2xldCBzPW51bGw7c3dpdGNoKEkudHlwZSl7Y2FzZSBFLlRleHRTdHJlYW06e2xldCBsPUEuY2NhbGwoIml0a193YXNtX291dHB1dF9hcnJheV9hZGRyZXNzIiwibnVtYmVyIixbIm51bWJlciIsIm51bWJlciIsIm51bWJlciJdLFswLGEsMF0pLEI9QS5jY2FsbCgiaXRrX3dhc21fb3V0cHV0X2FycmF5X3NpemUiLCJudW1iZXIiLFsibnVtYmVyIiwibnVtYmVyIiwibnVtYmVyIl0sWzAsYSwwXSksQz1uZXcgVWludDhBcnJheShBLkhFQVBVOC5idWZmZXIsbCxCKTtzPXtkYXRhOk50LmRlY29kZShDKX07YnJlYWt9Y2FzZSBFLkpzb25Db21wYXRpYmxlOntsZXQgbD1BLmNjYWxsKCJpdGtfd2FzbV9vdXRwdXRfYXJyYXlfYWRkcmVzcyIsIm51bWJlciIsWyJudW1iZXIiLCJudW1iZXIiLCJudW1iZXIiXSxbMCxhLDBdKSxCPUEuY2NhbGwoIml0a193YXNtX291dHB1dF9hcnJheV9zaXplIiwibnVtYmVyIixbIm51bWJlciIsIm51bWJlciIsIm51bWJlciJdLFswLGEsMF0pLEM9bmV3IFVpbnQ4QXJyYXkoQS5IRUFQVTguYnVmZmVyLGwsQik7cz1KU09OLnBhcnNlKE50LmRlY29kZShDKSk7YnJlYWt9Y2FzZSBFLkJpbmFyeVN0cmVhbTp7bGV0IGw9QS5jY2FsbCgiaXRrX3dhc21fb3V0cHV0X2FycmF5X2FkZHJlc3MiLCJudW1iZXIiLFsibnVtYmVyIiwibnVtYmVyIiwibnVtYmVyIl0sWzAsYSwwXSksQj1BLmNjYWxsKCJpdGtfd2FzbV9vdXRwdXRfYXJyYXlfc2l6ZSIsIm51bWJlciIsWyJudW1iZXIiLCJudW1iZXIiLCJudW1iZXIiXSxbMCxhLDBdKTtzPXtkYXRhOkx0KEEsbCxCKX07YnJlYWt9Y2FzZSBFLlRleHRGaWxlOntzPXtwYXRoOkkuZGF0YS5wYXRoLGRhdGE6QS5mc19yZWFkRmlsZShJLmRhdGEucGF0aCx7ZW5jb2Rpbmc6InV0ZjgifSl9O2JyZWFrfWNhc2UgRS5CaW5hcnlGaWxlOntzPXtwYXRoOkkuZGF0YS5wYXRoLGRhdGE6a24oQSxJLmRhdGEucGF0aCl9O2JyZWFrfWNhc2UgRS5JbWFnZTp7bGV0IGw9QkEoQSxhKTtsLmRhdGE9VShBLGEsMCxsLmltYWdlVHlwZS5jb21wb25lbnRUeXBlKSxsLmRpcmVjdGlvbj1VKEEsYSwxLGouRmxvYXQ2NCksbC5tZXRhZGF0YT1uZXcgTWFwKGwubWV0YWRhdGEpLHM9bDticmVha31jYXNlIEUuTWVzaDp7bGV0IGw9QkEoQSxhKTtsLm51bWJlck9mUG9pbnRzPjA/bC5wb2ludHM9VShBLGEsMCxsLm1lc2hUeXBlLnBvaW50Q29tcG9uZW50VHlwZSk6bC5wb2ludHM9SihsLm1lc2hUeXBlLnBvaW50Q29tcG9uZW50VHlwZSxuZXcgQXJyYXlCdWZmZXIoMCkpLGwubnVtYmVyT2ZDZWxscz4wP2wuY2VsbHM9VShBLGEsMSxsLm1lc2hUeXBlLmNlbGxDb21wb25lbnRUeXBlKTpsLmNlbGxzPUoobC5tZXNoVHlwZS5jZWxsQ29tcG9uZW50VHlwZSxuZXcgQXJyYXlCdWZmZXIoMCkpLGwubnVtYmVyT2ZQb2ludFBpeGVscz4wP2wucG9pbnREYXRhPVUoQSxhLDIsbC5tZXNoVHlwZS5wb2ludFBpeGVsQ29tcG9uZW50VHlwZSk6bC5wb2ludERhdGE9SihsLm1lc2hUeXBlLnBvaW50UGl4ZWxDb21wb25lbnRUeXBlLG5ldyBBcnJheUJ1ZmZlcigwKSksbC5udW1iZXJPZkNlbGxQaXhlbHM+MD9sLmNlbGxEYXRhPVUoQSxhLDMsbC5tZXNoVHlwZS5jZWxsUGl4ZWxDb21wb25lbnRUeXBlKTpsLmNlbGxEYXRhPUoobC5tZXNoVHlwZS5jZWxsUGl4ZWxDb21wb25lbnRUeXBlLG5ldyBBcnJheUJ1ZmZlcigwKSkscz1sO2JyZWFrfWNhc2UgRS5Qb2ludFNldDp7bGV0IGw9QkEoQSxhKTtsLm51bWJlck9mUG9pbnRzPjA/bC5wb2ludHM9VShBLGEsMCxsLnBvaW50U2V0VHlwZS5wb2ludENvbXBvbmVudFR5cGUpOmwucG9pbnRzPUoobC5wb2ludFNldFR5cGUucG9pbnRDb21wb25lbnRUeXBlLG5ldyBBcnJheUJ1ZmZlcigwKSksbC5udW1iZXJPZlBvaW50UGl4ZWxzPjA/bC5wb2ludERhdGE9VShBLGEsMSxsLnBvaW50U2V0VHlwZS5wb2ludFBpeGVsQ29tcG9uZW50VHlwZSk6bC5wb2ludERhdGE9SihsLnBvaW50U2V0VHlwZS5wb2ludFBpeGVsQ29tcG9uZW50VHlwZSxuZXcgQXJyYXlCdWZmZXIoMCkpLHM9bDticmVha31jYXNlIEUuVHJhbnNmb3JtTGlzdDp7bGV0IGw9QkEoQSxhKTtsLmZvckVhY2goKEIsQyk9PntCLm51bWJlck9mRml4ZWRQYXJhbWV0ZXJzPjAmJihsW0NdLmZpeGVkUGFyYW1ldGVycz1VKEEsYSxDKjIsQi50cmFuc2Zvcm1UeXBlLnBhcmFtZXRlcnNWYWx1ZVR5cGUpKSxCLm51bWJlck9mRml4ZWRQYXJhbWV0ZXJzPjAmJihsW0NdLnBhcmFtZXRlcnM9VShBLGEsQyoyKzEsQi50cmFuc2Zvcm1UeXBlLnBhcmFtZXRlcnNWYWx1ZVR5cGUpKX0pLHM9bDticmVha31jYXNlIEUuUG9seURhdGE6e2xldCBsPUJBKEEsYSk7bC5udW1iZXJPZlBvaW50cz4wP2wucG9pbnRzPVUoQSxhLDAsai5GbG9hdDMyKTpsLnBvaW50cz1uZXcgRmxvYXQzMkFycmF5LGwudmVydGljZXNCdWZmZXJTaXplPjA/bC52ZXJ0aWNlcz1VKEEsYSwxLE4uVUludDMyKTpsLnZlcnRpY2VzPW5ldyBVaW50MzJBcnJheSxsLmxpbmVzQnVmZmVyU2l6ZT4wP2wubGluZXM9VShBLGEsMixOLlVJbnQzMik6bC5saW5lcz1uZXcgVWludDMyQXJyYXksbC5wb2x5Z29uc0J1ZmZlclNpemU+MD9sLnBvbHlnb25zPVUoQSxhLDMsTi5VSW50MzIpOmwucG9seWdvbnM9bmV3IFVpbnQzMkFycmF5LGwudHJpYW5nbGVTdHJpcHNCdWZmZXJTaXplPjA/bC50cmlhbmdsZVN0cmlwcz1VKEEsYSw0LE4uVUludDMyKTpsLnRyaWFuZ2xlU3RyaXBzPW5ldyBVaW50MzJBcnJheSxsLm51bWJlck9mUG9pbnRQaXhlbHM+MD9sLnBvaW50RGF0YT1VKEEsYSw1LGwucG9seURhdGFUeXBlLnBvaW50UGl4ZWxDb21wb25lbnRUeXBlKTpsLnBvaW50RGF0YT1KKGwucG9seURhdGFUeXBlLnBvaW50UGl4ZWxDb21wb25lbnRUeXBlLG5ldyBBcnJheUJ1ZmZlcigwKSksbC5udW1iZXJPZkNlbGxQaXhlbHM+MD9sLmNlbGxEYXRhPVUoQSxhLDYsbC5wb2x5RGF0YVR5cGUuY2VsbFBpeGVsQ29tcG9uZW50VHlwZSk6bC5jZWxsRGF0YT1KKGwucG9seURhdGFUeXBlLmNlbGxQaXhlbENvbXBvbmVudFR5cGUsbmV3IEFycmF5QnVmZmVyKDApKSxzPWw7YnJlYWt9ZGVmYXVsdDp0aHJvdyBFcnJvcigiVW5zdXBwb3J0ZWQgb3V0cHV0IEludGVyZmFjZVR5cGUiKX1sZXQgcD17dHlwZTpJLnR5cGUsZGF0YTpzfTtjLnB1c2gocCl9KSx7cmV0dXJuVmFsdWU6bixzdGRvdXQ6byxzdGRlcnI6ZyxvdXRwdXRzOmN9fXZhciB4dD1Sbjt2YXIgVW49dHlwZW9mIGdsb2JhbFRoaXMuU2hhcmVkQXJyYXlCdWZmZXI8InUiO2Z1bmN0aW9uIE5uKEEsZSl7aWYoQT09bnVsbClyZXR1cm5bXTtsZXQgdD1bXTtmb3IobGV0IHI9MDtyPEEubGVuZ3RoO3IrKyl7bGV0IGk9VG4oQVtyXSxlKTtpIT09bnVsbCYmdC5wdXNoKGkpfXJldHVybiB0fWZ1bmN0aW9uIFRuKEEsZSl7aWYoQT09bnVsbClyZXR1cm4gbnVsbDtsZXQgdD1udWxsO3JldHVybiBBLmJ1ZmZlciE9PXZvaWQgMD90PUEuYnVmZmVyOkEuYnl0ZUxlbmd0aCE9PXZvaWQgMCYmKHQ9QSksVW4mJnQgaW5zdGFuY2VvZiBTaGFyZWRBcnJheUJ1ZmZlcj9udWxsOmU/dDp0LnNsaWNlKDApfXZhciBPdD1ObjtmdW5jdGlvbiBMbihBKXtyZXR1cm5bQS5kYXRhLEEuZGlyZWN0aW9uXX12YXIgUHQ9TG47ZnVuY3Rpb24geG4oQSl7cmV0dXJuW0EucG9pbnRzLEEucG9pbnREYXRhLEEuY2VsbHMsQS5jZWxsRGF0YV19dmFyIEd0PXhuO2Z1bmN0aW9uIE9uKEEpe3JldHVybltBLnBvaW50cyxBLnZlcnRpY2VzLEEubGluZXMsQS5wb2x5Z29ucyxBLnRyaWFuZ2xlU3RyaXBzLEEucG9pbnREYXRhLEEuY2VsbERhdGFdfXZhciBKdD1Pbjt2YXIgUG47ZnVuY3Rpb24gUEEoKXtyZXR1cm4gUG59dmFyIEduO2Z1bmN0aW9uIEh0KCl7cmV0dXJuIEdufXZhciBKbjtmdW5jdGlvbiBHQSgpe3JldHVybiBKbn12YXIgd2U9bmV3IE1hcDtmdW5jdGlvbiBIbigpe2xldCBBPUdBKCk7cmV0dXJuIHR5cGVvZiBBPiJ1IiYmKEE9bnVsbCksQX1mdW5jdGlvbiBNdCgpe2xldCBBPVBBKCk7cmV0dXJuIHR5cGVvZiBBPiJ1IiYmKEE9bmV3IFVSTCgiL3BpcGVsaW5lcyIsZG9jdW1lbnQubG9jYXRpb24ub3JpZ2luKS5ocmVmKSxBfWZ1bmN0aW9uIEpBKCl7bGV0IEE9SHQoKTtyZXR1cm4gdHlwZW9mIEE+InUiJiYoQT17fSksQX1hc3luYyBmdW5jdGlvbiBNbihBLGUsdCl7bGV0IHI9QSxpPUE7aWYodHlwZW9mIEEhPSJzdHJpbmciJiYocj1uZXcgVVJMKEEuaHJlZiksaT1yLmhyZWYpLHdlLmhhcyhpKSlyZXR1cm4gd2UuZ2V0KGkpO3tsZXQgbj1hd2FpdCBrdChBLGU/LnRvU3RyaW5nKCk/P010KCksdD8/SkEoKSk7cmV0dXJuIHdlLnNldChpLG4pLG59fWFzeW5jIGZ1bmN0aW9uIHFuKEEsZSx0LHIsaSl7aWYoIWF3YWl0IFJ0KCkpe2xldCBmPSJXZWJBc3NlbWJseSBTSU1EIHN1cHBvcnQgaXMgcmVxdWlyZWQgLS0gcGxlYXNlIHVwZGF0ZSB5b3VyIGJyb3dzZXIuIjt0aHJvdyBhbGVydChmKSxuZXcgRXJyb3IoZil9bGV0IG49aT8ud2ViV29ya2VyPz9udWxsO2lmKG49PT0hMSl7bGV0IGY9YXdhaXQgTW4oQS50b1N0cmluZygpLGk/LnBpcGVsaW5lQmFzZVVybCxpPy5waXBlbGluZVF1ZXJ5UGFyYW1zPz9KQSgpKTtyZXR1cm4geHQoZixlLHQscil9bGV0IG89bixnPWk/LnBpcGVsaW5lV29ya2VyVXJsPz9IbigpLGM9dHlwZW9mIGchPSJzdHJpbmciJiZ0eXBlb2YgZz8uaHJlZjwidSI/Zy5ocmVmOmcse3dvcmtlclByb3h5Okksd29ya2VyOmF9PWF3YWl0IEZ0KG8sYyxpPy5waXBlbGluZVF1ZXJ5UGFyYW1zPz9KQSgpKTtvPWE7bGV0IHM9W107ciE9bnVsbCYmci5sZW5ndGg+MCYmci5mb3JFYWNoKGZ1bmN0aW9uKGYpe2lmKGYudHlwZT09PUUuQmluYXJ5U3RyZWFtKXtsZXQgUT1mLmRhdGEuZGF0YTtzLnB1c2goUSl9ZWxzZSBpZihmLnR5cGU9PT1FLkJpbmFyeUZpbGUpe2xldCBRPWYuZGF0YS5kYXRhO3MucHVzaChRKX1lbHNlIGlmKGYudHlwZT09PUUuSW1hZ2Upe2xldCBRPWYuZGF0YTtRLmRhdGEhPT1udWxsJiZzLnB1c2goLi4uUHQoUSkpfWVsc2UgaWYoZi50eXBlPT09RS5NZXNoKXtsZXQgUT1mLmRhdGE7cy5wdXNoKC4uLkd0KFEpKX1lbHNlIGlmKGYudHlwZT09PUUuUG9seURhdGEpe2xldCBRPWYuZGF0YTtzLnB1c2goLi4uSnQoUSkpfX0pO2xldCBwPWk/LnBpcGVsaW5lQmFzZVVybD8/TXQoKSxsPXR5cGVvZiBwIT0ic3RyaW5nIiYmdHlwZW9mIHA/LmhyZWY8InUiP3AuaHJlZjpwLEI9ciE9bnVsbD9aQShyLE90KHMsaT8ubm9Db3B5KSk6bnVsbCxDPWF3YWl0IEkucnVuUGlwZWxpbmUoQS50b1N0cmluZygpLGwsZSx0LEIsaT8ucGlwZWxpbmVRdWVyeVBhcmFtcz8/SkEoKSk7cmV0dXJue3JldHVyblZhbHVlOkMucmV0dXJuVmFsdWUsc3Rkb3V0OkMuc3Rkb3V0LHN0ZGVycjpDLnN0ZGVycixvdXRwdXRzOkMub3V0cHV0cyx3ZWJXb3JrZXI6b319dmFyIHc9cW47dmFyIFduPW51bGw7ZnVuY3Rpb24gcXQoKXtyZXR1cm4gV259dmFyIERlLFluPWBodHRwczovL2Nkbi5qc2RlbGl2ci5uZXQvbnBtL0BpdGstd2FzbS9kaWNvbUAke01BfS9kaXN0L3BpcGVsaW5lc2A7ZnVuY3Rpb24gQWcoQSl7RGU9QX1mdW5jdGlvbiBEKCl7aWYodHlwZW9mIERlPCJ1IilyZXR1cm4gRGU7bGV0IEE9UEEoKTtyZXR1cm4gdHlwZW9mIEE8InUiP0E6WW59dmFyIFNlLEtuPW51bGw7ZnVuY3Rpb24gV3QoQSl7U2U9QX1mdW5jdGlvbiB5KCl7aWYodHlwZW9mIFNlPCJ1IilyZXR1cm4gU2U7bGV0IEE9R0EoKTtyZXR1cm4gdHlwZW9mIEE8InUiP0E6S259dmFyIHRBPW51bGw7YXN5bmMgZnVuY3Rpb24gWXQoKXtsZXQgQT15KCksZT10eXBlb2YgQSE9InN0cmluZyImJnR5cGVvZiBBPy5ocmVmPCJ1Ij9BLmhyZWY6QTt0QT1hd2FpdCBjQShlKX1mdW5jdGlvbiBhZyhBKXt0QT1BfWFzeW5jIGZ1bmN0aW9uIFIoKXtpZih0QSE9PW51bGwpcmV0dXJuIHRBLnRlcm1pbmF0ZWQmJmF3YWl0IFl0KCksdEE7bGV0IEE9cXQoKTtyZXR1cm4gQSE9PW51bGw/QTooYXdhaXQgWXQoKSx0QSl9YXN5bmMgZnVuY3Rpb24gdm4oQSxlLHQ9e30pe2xldCByPVt7dHlwZTpFLkpzb25Db21wYXRpYmxlfSx7dHlwZTpFLkltYWdlfV0saT1BO2lmKEEgaW5zdGFuY2VvZiBGaWxlKXtsZXQgZD1hd2FpdCBBLmFycmF5QnVmZmVyKCk7aT17cGF0aDpBLm5hbWUsZGF0YTpuZXcgVWludDhBcnJheShkKX19bGV0IG49ZTtpZihlIGluc3RhbmNlb2YgRmlsZSl7bGV0IGQ9YXdhaXQgZS5hcnJheUJ1ZmZlcigpO249e3BhdGg6ZS5uYW1lLGRhdGE6bmV3IFVpbnQ4QXJyYXkoZCl9fWxldCBvPVt7dHlwZTpFLkJpbmFyeUZpbGUsZGF0YTppfSx7dHlwZTpFLkJpbmFyeUZpbGUsZGF0YTpufV0sZz1bXSxjPWkucGF0aDtnLnB1c2goYyk7bGV0IEk9bi5wYXRoO2cucHVzaChJKSxnLnB1c2goIjAiKSxnLnB1c2goIjEiKSxnLnB1c2goIi0tbWVtb3J5LWlvIiksdC5jb2xvck91dHB1dCYmdC5jb2xvck91dHB1dCYmZy5wdXNoKCItLWNvbG9yLW91dHB1dCIpLHQuY29uZmlnRmlsZSYmZy5wdXNoKCItLWNvbmZpZy1maWxlIix0LmNvbmZpZ0ZpbGUudG9TdHJpbmcoKSksdC5mcmFtZSYmZy5wdXNoKCItLWZyYW1lIix0LmZyYW1lLnRvU3RyaW5nKCkpLHQubm9QcmVzZW50YXRpb25TdGF0ZU91dHB1dCYmdC5ub1ByZXNlbnRhdGlvblN0YXRlT3V0cHV0JiZnLnB1c2goIi0tbm8tcHJlc2VudGF0aW9uLXN0YXRlLW91dHB1dCIpLHQubm9CaXRtYXBPdXRwdXQmJnQubm9CaXRtYXBPdXRwdXQmJmcucHVzaCgiLS1uby1iaXRtYXAtb3V0cHV0Iik7bGV0IHA9ImFwcGx5LXByZXNlbnRhdGlvbi1zdGF0ZS10by1pbWFnZSIsbD10Py53ZWJXb3JrZXI7bD09PXZvaWQgMCYmKGw9YXdhaXQgUigpKTtsZXR7d2ViV29ya2VyOkIscmV0dXJuVmFsdWU6QyxzdGRlcnI6ZixvdXRwdXRzOlF9PWF3YWl0IHcocCxnLHIsbyx7cGlwZWxpbmVCYXNlVXJsOkQoKSxwaXBlbGluZVdvcmtlclVybDp5KCksd2ViV29ya2VyOmwsbm9Db3B5OnQ/Lm5vQ29weX0pO2lmKEMhPT0wJiZmIT09IiIpdGhyb3cgbmV3IEVycm9yKGYpO3JldHVybnt3ZWJXb3JrZXI6QixwcmVzZW50YXRpb25TdGF0ZU91dFN0cmVhbTpRWzBdPy5kYXRhLG91dHB1dEltYWdlOlFbMV0/LmRhdGF9fXZhciBqbj12bjthc3luYyBmdW5jdGlvbiBfbihBLGU9e30pe2xldCB0PVt7dHlwZTpFLkJpbmFyeVN0cmVhbX1dLHI9QTtpZihBIGluc3RhbmNlb2YgRmlsZSl7bGV0IEM9YXdhaXQgQS5hcnJheUJ1ZmZlcigpO3I9e3BhdGg6QS5uYW1lLGRhdGE6bmV3IFVpbnQ4QXJyYXkoQyl9fWxldCBpPVt7dHlwZTpFLkJpbmFyeUZpbGUsZGF0YTpyfV0sbj1bXSxvPXIucGF0aDtuLnB1c2gobyksbi5wdXNoKCIwIiksbi5wdXNoKCItLW1lbW9yeS1pbyIpLGUucmVhZEZpbGVPbmx5JiZlLnJlYWRGaWxlT25seSYmbi5wdXNoKCItLXJlYWQtZmlsZS1vbmx5IiksZS5yZWFkRGF0YXNldCYmZS5yZWFkRGF0YXNldCYmbi5wdXNoKCItLXJlYWQtZGF0YXNldCIpLGUucmVhZFhmZXJBdXRvJiZlLnJlYWRYZmVyQXV0byYmbi5wdXNoKCItLXJlYWQteGZlci1hdXRvIiksZS5yZWFkWGZlckRldGVjdCYmZS5yZWFkWGZlckRldGVjdCYmbi5wdXNoKCItLXJlYWQteGZlci1kZXRlY3QiKSxlLnJlYWRYZmVyTGl0dGxlJiZlLnJlYWRYZmVyTGl0dGxlJiZuLnB1c2goIi0tcmVhZC14ZmVyLWxpdHRsZSIpLGUucmVhZFhmZXJCaWcmJmUucmVhZFhmZXJCaWcmJm4ucHVzaCgiLS1yZWFkLXhmZXItYmlnIiksZS5yZWFkWGZlckltcGxpY2l0JiZlLnJlYWRYZmVySW1wbGljaXQmJm4ucHVzaCgiLS1yZWFkLXhmZXItaW1wbGljaXQiKSxlLmFjY2VwdE9kZExlbmd0aCYmZS5hY2NlcHRPZGRMZW5ndGgmJm4ucHVzaCgiLS1hY2NlcHQtb2RkLWxlbmd0aCIpLGUuYXNzdW1lRXZlbkxlbmd0aCYmZS5hc3N1bWVFdmVuTGVuZ3RoJiZuLnB1c2goIi0tYXNzdW1lLWV2ZW4tbGVuZ3RoIiksZS5lbmFibGVDcDI0NiYmZS5lbmFibGVDcDI0NiYmbi5wdXNoKCItLWVuYWJsZS1jcDI0NiIpLGUuZGlzYWJsZUNwMjQ2JiZlLmRpc2FibGVDcDI0NiYmbi5wdXNoKCItLWRpc2FibGUtY3AyNDYiKSxlLnJldGFpblVuJiZlLnJldGFpblVuJiZuLnB1c2goIi0tcmV0YWluLXVuIiksZS5jb252ZXJ0VW4mJmUuY29udmVydFVuJiZuLnB1c2goIi0tY29udmVydC11biIpLGUuZW5hYmxlQ29ycmVjdGlvbiYmZS5lbmFibGVDb3JyZWN0aW9uJiZuLnB1c2goIi0tZW5hYmxlLWNvcnJlY3Rpb24iKSxlLmRpc2FibGVDb3JyZWN0aW9uJiZlLmRpc2FibGVDb3JyZWN0aW9uJiZuLnB1c2goIi0tZGlzYWJsZS1jb3JyZWN0aW9uIik7bGV0IGM9InJlYWQtZGljb20tZW5jYXBzdWxhdGVkLXBkZiIsST1lPy53ZWJXb3JrZXI7ST09PXZvaWQgMCYmKEk9YXdhaXQgUigpKTtsZXR7d2ViV29ya2VyOmEscmV0dXJuVmFsdWU6cyxzdGRlcnI6cCxvdXRwdXRzOmx9PWF3YWl0IHcoYyxuLHQsaSx7cGlwZWxpbmVCYXNlVXJsOkQoKSxwaXBlbGluZVdvcmtlclVybDp5KCksd2ViV29ya2VyOkksbm9Db3B5OmU/Lm5vQ29weX0pO2lmKHMhPT0wJiZwIT09IiIpdGhyb3cgbmV3IEVycm9yKHApO3JldHVybnt3ZWJXb3JrZXI6YSxwZGZCaW5hcnlPdXRwdXQ6KGxbMF0/LmRhdGEpLmRhdGF9fXZhciB6bj1fbjthc3luYyBmdW5jdGlvbiBWbihBLGU9e30pe2xldCB0PVt7dHlwZTpFLlRleHRTdHJlYW19XSxyPUE7aWYoQSBpbnN0YW5jZW9mIEZpbGUpe2xldCBDPWF3YWl0IEEuYXJyYXlCdWZmZXIoKTtyPXtwYXRoOkEubmFtZSxkYXRhOm5ldyBVaW50OEFycmF5KEMpfX1sZXQgaT1be3R5cGU6RS5CaW5hcnlGaWxlLGRhdGE6cn1dLG49W10sbz1yLnBhdGg7aWYobi5wdXNoKG8pLG4ucHVzaCgiMCIpLG4ucHVzaCgiLS1tZW1vcnktaW8iKSxlLnJlYWRGaWxlT25seSYmZS5yZWFkRmlsZU9ubHkmJm4ucHVzaCgiLS1yZWFkLWZpbGUtb25seSIpLGUucmVhZERhdGFzZXQmJmUucmVhZERhdGFzZXQmJm4ucHVzaCgiLS1yZWFkLWRhdGFzZXQiKSxlLnJlYWRYZmVyQXV0byYmZS5yZWFkWGZlckF1dG8mJm4ucHVzaCgiLS1yZWFkLXhmZXItYXV0byIpLGUucmVhZFhmZXJEZXRlY3QmJmUucmVhZFhmZXJEZXRlY3QmJm4ucHVzaCgiLS1yZWFkLXhmZXItZGV0ZWN0IiksZS5yZWFkWGZlckxpdHRsZSYmZS5yZWFkWGZlckxpdHRsZSYmbi5wdXNoKCItLXJlYWQteGZlci1saXR0bGUiKSxlLnJlYWRYZmVyQmlnJiZlLnJlYWRYZmVyQmlnJiZuLnB1c2goIi0tcmVhZC14ZmVyLWJpZyIpLGUucmVhZFhmZXJJbXBsaWNpdCYmZS5yZWFkWGZlckltcGxpY2l0JiZuLnB1c2goIi0tcmVhZC14ZmVyLWltcGxpY2l0IiksZS5wcm9jZXNzaW5nRGV0YWlscyYmZS5wcm9jZXNzaW5nRGV0YWlscyYmbi5wdXNoKCItLXByb2Nlc3NpbmctZGV0YWlscyIpLGUudW5rbm93blJlbGF0aW9uc2hpcCYmZS51bmtub3duUmVsYXRpb25zaGlwJiZuLnB1c2goIi0tdW5rbm93bi1yZWxhdGlvbnNoaXAiKSxlLmludmFsaWRJdGVtVmFsdWUmJmUuaW52YWxpZEl0ZW1WYWx1ZSYmbi5wdXNoKCItLWludmFsaWQtaXRlbS12YWx1ZSIpLGUuaWdub3JlQ29uc3RyYWludHMmJmUuaWdub3JlQ29uc3RyYWludHMmJm4ucHVzaCgiLS1pZ25vcmUtY29uc3RyYWludHMiKSxlLmlnbm9yZUl0ZW1FcnJvcnMmJmUuaWdub3JlSXRlbUVycm9ycyYmbi5wdXNoKCItLWlnbm9yZS1pdGVtLWVycm9ycyIpLGUuc2tpcEludmFsaWRJdGVtcyYmZS5za2lwSW52YWxpZEl0ZW1zJiZuLnB1c2goIi0tc2tpcC1pbnZhbGlkLWl0ZW1zIiksZS5kaXNhYmxlVnJDaGVja2VyJiZlLmRpc2FibGVWckNoZWNrZXImJm4ucHVzaCgiLS1kaXNhYmxlLXZyLWNoZWNrZXIiKSxlLmNoYXJzZXRSZXF1aXJlJiZlLmNoYXJzZXRSZXF1aXJlJiZuLnB1c2goIi0tY2hhcnNldC1yZXF1aXJlIiksZS5jaGFyc2V0QXNzdW1lJiZuLnB1c2goIi0tY2hhcnNldC1hc3N1bWUiLGUuY2hhcnNldEFzc3VtZS50b1N0cmluZygpKSxlLmNoYXJzZXRDaGVja0FsbCYmZS5jaGFyc2V0Q2hlY2tBbGwmJm4ucHVzaCgiLS1jaGFyc2V0LWNoZWNrLWFsbCIpLGUuY29udmVydFRvVXRmOCYmZS5jb252ZXJ0VG9VdGY4JiZuLnB1c2goIi0tY29udmVydC10by11dGY4IiksZS51cmxQcmVmaXgmJm4ucHVzaCgiLS11cmwtcHJlZml4IixlLnVybFByZWZpeC50b1N0cmluZygpKSxlLmh0bWwzMiYmZS5odG1sMzImJm4ucHVzaCgiLS1odG1sLTMyIiksZS5odG1sNDAmJmUuaHRtbDQwJiZuLnB1c2goIi0taHRtbC00MCIpLGUueGh0bWwxMSYmZS54aHRtbDExJiZuLnB1c2goIi0teGh0bWwtMTEiKSxlLmFkZERvY3VtZW50VHlwZSYmZS5hZGREb2N1bWVudFR5cGUmJm4ucHVzaCgiLS1hZGQtZG9jdW1lbnQtdHlwZSIpLGUuY3NzUmVmZXJlbmNlKXtsZXQgQz1pLmxlbmd0aC50b1N0cmluZygpO2kucHVzaCh7dHlwZTpFLlRleHRTdHJlYW0sZGF0YTp7ZGF0YTplLmNzc1JlZmVyZW5jZX19KSxuLnB1c2goIi0tY3NzLXJlZmVyZW5jZSIsQyl9aWYoZS5jc3NGaWxlKXtsZXQgQz1lLmNzc0ZpbGUsZj1DO2lmKEMgaW5zdGFuY2VvZiBGaWxlKXtsZXQgaD1hd2FpdCBDLmFycmF5QnVmZmVyKCk7Zj17cGF0aDpDLm5hbWUsZGF0YTpuZXcgVGV4dERlY29kZXIoKS5kZWNvZGUoaCl9fW4ucHVzaCgiLS1jc3MtZmlsZSIpLGkucHVzaCh7dHlwZTpFLlRleHRGaWxlLGRhdGE6Zn0pO2xldCBRPUMgaW5zdGFuY2VvZiBGaWxlP0MubmFtZTpDLnBhdGg7bi5wdXNoKFEpfWUuZXhwYW5kSW5saW5lJiZlLmV4cGFuZElubGluZSYmbi5wdXNoKCItLWV4cGFuZC1pbmxpbmUiKSxlLm5ldmVyRXhwYW5kSW5saW5lJiZlLm5ldmVyRXhwYW5kSW5saW5lJiZuLnB1c2goIi0tbmV2ZXItZXhwYW5kLWlubGluZSIpLGUuYWx3YXlzRXhwYW5kSW5saW5lJiZlLmFsd2F5c0V4cGFuZElubGluZSYmbi5wdXNoKCItLWFsd2F5cy1leHBhbmQtaW5saW5lIiksZS5yZW5kZXJGdWxsRGF0YSYmZS5yZW5kZXJGdWxsRGF0YSYmbi5wdXNoKCItLXJlbmRlci1mdWxsLWRhdGEiKSxlLnNlY3Rpb25UaXRsZUlubGluZSYmZS5zZWN0aW9uVGl0bGVJbmxpbmUmJm4ucHVzaCgiLS1zZWN0aW9uLXRpdGxlLWlubGluZSIpLGUuZG9jdW1lbnRUeXBlVGl0bGUmJmUuZG9jdW1lbnRUeXBlVGl0bGUmJm4ucHVzaCgiLS1kb2N1bWVudC10eXBlLXRpdGxlIiksZS5wYXRpZW50SW5mb1RpdGxlJiZlLnBhdGllbnRJbmZvVGl0bGUmJm4ucHVzaCgiLS1wYXRpZW50LWluZm8tdGl0bGUiKSxlLm5vRG9jdW1lbnRIZWFkZXImJmUubm9Eb2N1bWVudEhlYWRlciYmbi5wdXNoKCItLW5vLWRvY3VtZW50LWhlYWRlciIpLGUucmVuZGVySW5saW5lQ29kZXMmJmUucmVuZGVySW5saW5lQ29kZXMmJm4ucHVzaCgiLS1yZW5kZXItaW5saW5lLWNvZGVzIiksZS5jb25jZXB0TmFtZUNvZGVzJiZlLmNvbmNlcHROYW1lQ29kZXMmJm4ucHVzaCgiLS1jb25jZXB0LW5hbWUtY29kZXMiKSxlLm51bWVyaWNVbml0Q29kZXMmJmUubnVtZXJpY1VuaXRDb2RlcyYmbi5wdXNoKCItLW51bWVyaWMtdW5pdC1jb2RlcyIpLGUuY29kZVZhbHVlVW5pdCYmZS5jb2RlVmFsdWVVbml0JiZuLnB1c2goIi0tY29kZS12YWx1ZS11bml0IiksZS5jb2RlTWVhbmluZ1VuaXQmJmUuY29kZU1lYW5pbmdVbml0JiZuLnB1c2goIi0tY29kZS1tZWFuaW5nLXVuaXQiKSxlLnJlbmRlckFsbENvZGVzJiZlLnJlbmRlckFsbENvZGVzJiZuLnB1c2goIi0tcmVuZGVyLWFsbC1jb2RlcyIpLGUuY29kZURldGFpbHNUb29sdGlwJiZlLmNvZGVEZXRhaWxzVG9vbHRpcCYmbi5wdXNoKCItLWNvZGUtZGV0YWlscy10b29sdGlwIik7bGV0IGM9InN0cnVjdHVyZWQtcmVwb3J0LXRvLWh0bWwiLEk9ZT8ud2ViV29ya2VyO0k9PT12b2lkIDAmJihJPWF3YWl0IFIoKSk7bGV0e3dlYldvcmtlcjphLHJldHVyblZhbHVlOnMsc3RkZXJyOnAsb3V0cHV0czpsfT1hd2FpdCB3KGMsbix0LGkse3BpcGVsaW5lQmFzZVVybDpEKCkscGlwZWxpbmVXb3JrZXJVcmw6eSgpLHdlYldvcmtlcjpJLG5vQ29weTplPy5ub0NvcHl9KTtpZihzIT09MCYmcCE9PSIiKXRocm93IG5ldyBFcnJvcihwKTtyZXR1cm57d2ViV29ya2VyOmEsb3V0cHV0VGV4dDoobFswXT8uZGF0YSkuZGF0YX19dmFyIFpuPVZuO2FzeW5jIGZ1bmN0aW9uIFhuKEEsZT17fSl7bGV0IHQ9W3t0eXBlOkUuVGV4dFN0cmVhbX1dLHI9QTtpZihBIGluc3RhbmNlb2YgRmlsZSl7bGV0IEM9YXdhaXQgQS5hcnJheUJ1ZmZlcigpO3I9e3BhdGg6QS5uYW1lLGRhdGE6bmV3IFVpbnQ4QXJyYXkoQyl9fWxldCBpPVt7dHlwZTpFLkJpbmFyeUZpbGUsZGF0YTpyfV0sbj1bXSxvPXIucGF0aDtuLnB1c2gobyksbi5wdXNoKCIwIiksbi5wdXNoKCItLW1lbW9yeS1pbyIpLGUudW5rbm93blJlbGF0aW9uc2hpcCYmZS51bmtub3duUmVsYXRpb25zaGlwJiZuLnB1c2goIi0tdW5rbm93bi1yZWxhdGlvbnNoaXAiKSxlLmludmFsaWRJdGVtVmFsdWUmJmUuaW52YWxpZEl0ZW1WYWx1ZSYmbi5wdXNoKCItLWludmFsaWQtaXRlbS12YWx1ZSIpLGUuaWdub3JlQ29uc3RyYWludHMmJmUuaWdub3JlQ29uc3RyYWludHMmJm4ucHVzaCgiLS1pZ25vcmUtY29uc3RyYWludHMiKSxlLmlnbm9yZUl0ZW1FcnJvcnMmJmUuaWdub3JlSXRlbUVycm9ycyYmbi5wdXNoKCItLWlnbm9yZS1pdGVtLWVycm9ycyIpLGUuc2tpcEludmFsaWRJdGVtcyYmZS5za2lwSW52YWxpZEl0ZW1zJiZuLnB1c2goIi0tc2tpcC1pbnZhbGlkLWl0ZW1zIiksZS5ub0RvY3VtZW50SGVhZGVyJiZlLm5vRG9jdW1lbnRIZWFkZXImJm4ucHVzaCgiLS1uby1kb2N1bWVudC1oZWFkZXIiKSxlLm51bWJlck5lc3RlZEl0ZW1zJiZlLm51bWJlck5lc3RlZEl0ZW1zJiZuLnB1c2goIi0tbnVtYmVyLW5lc3RlZC1pdGVtcyIpLGUuc2hvcnRlbkxvbmdWYWx1ZXMmJmUuc2hvcnRlbkxvbmdWYWx1ZXMmJm4ucHVzaCgiLS1zaG9ydGVuLWxvbmctdmFsdWVzIiksZS5wcmludEluc3RhbmNlVWlkJiZlLnByaW50SW5zdGFuY2VVaWQmJm4ucHVzaCgiLS1wcmludC1pbnN0YW5jZS11aWQiKSxlLnByaW50U29wY2xhc3NTaG9ydCYmZS5wcmludFNvcGNsYXNzU2hvcnQmJm4ucHVzaCgiLS1wcmludC1zb3BjbGFzcy1zaG9ydCIpLGUucHJpbnRTb3BjbGFzc0xvbmcmJmUucHJpbnRTb3BjbGFzc0xvbmcmJm4ucHVzaCgiLS1wcmludC1zb3BjbGFzcy1sb25nIiksZS5wcmludFNvcGNsYXNzVWlkJiZlLnByaW50U29wY2xhc3NVaWQmJm4ucHVzaCgiLS1wcmludC1zb3BjbGFzcy11aWQiKSxlLnByaW50QWxsQ29kZXMmJmUucHJpbnRBbGxDb2RlcyYmbi5wdXNoKCItLXByaW50LWFsbC1jb2RlcyIpLGUucHJpbnRJbnZhbGlkQ29kZXMmJmUucHJpbnRJbnZhbGlkQ29kZXMmJm4ucHVzaCgiLS1wcmludC1pbnZhbGlkLWNvZGVzIiksZS5wcmludFRlbXBsYXRlSWQmJmUucHJpbnRUZW1wbGF0ZUlkJiZuLnB1c2goIi0tcHJpbnQtdGVtcGxhdGUtaWQiKSxlLmluZGljYXRlRW5oYW5jZWQmJmUuaW5kaWNhdGVFbmhhbmNlZCYmbi5wdXNoKCItLWluZGljYXRlLWVuaGFuY2VkIiksZS5wcmludENvbG9yJiZlLnByaW50Q29sb3ImJm4ucHVzaCgiLS1wcmludC1jb2xvciIpO2xldCBjPSJzdHJ1Y3R1cmVkLXJlcG9ydC10by10ZXh0IixJPWU/LndlYldvcmtlcjtJPT09dm9pZCAwJiYoST1hd2FpdCBSKCkpO2xldHt3ZWJXb3JrZXI6YSxyZXR1cm5WYWx1ZTpzLHN0ZGVycjpwLG91dHB1dHM6bH09YXdhaXQgdyhjLG4sdCxpLHtwaXBlbGluZUJhc2VVcmw6RCgpLHBpcGVsaW5lV29ya2VyVXJsOnkoKSx3ZWJXb3JrZXI6SSxub0NvcHk6ZT8ubm9Db3B5fSk7aWYocyE9PTAmJnAhPT0iIil0aHJvdyBuZXcgRXJyb3IocCk7cmV0dXJue3dlYldvcmtlcjphLG91dHB1dFRleHQ6KGxbMF0/LmRhdGEpLmRhdGF9fXZhciAkbj1Ybjthc3luYyBmdW5jdGlvbiBBaShBLGU9e30pe2xldCB0PVt7dHlwZTpFLkpzb25Db21wYXRpYmxlfV0scj1BO2lmKEEgaW5zdGFuY2VvZiBGaWxlKXtsZXQgQj1hd2FpdCBBLmFycmF5QnVmZmVyKCk7cj17cGF0aDpBLm5hbWUsZGF0YTpuZXcgVWludDhBcnJheShCKX19bGV0IGk9W3t0eXBlOkUuQmluYXJ5RmlsZSxkYXRhOnJ9XSxuPVtdLG89ci5wYXRoO2lmKG4ucHVzaChvKSxuLnB1c2goIjAiKSxuLnB1c2goIi0tbWVtb3J5LWlvIiksdHlwZW9mIGUudGFnc1RvUmVhZDwidSIpe2xldCBCPWkubGVuZ3RoLnRvU3RyaW5nKCk7aS5wdXNoKHt0eXBlOkUuSnNvbkNvbXBhdGlibGUsZGF0YTplLnRhZ3NUb1JlYWR9KSxuLnB1c2goIi0tdGFncy10by1yZWFkIixCKX1sZXQgYz0icmVhZC1kaWNvbS10YWdzIix7d2ViV29ya2VyOkkscmV0dXJuVmFsdWU6YSxzdGRlcnI6cyxvdXRwdXRzOnB9PWF3YWl0IHcoYyxuLHQsaSx7cGlwZWxpbmVCYXNlVXJsOkQoKSxwaXBlbGluZVdvcmtlclVybDp5KCksd2ViV29ya2VyOmU/LndlYldvcmtlcj8/bnVsbH0pO2lmKGEhPT0wKXRocm93IG5ldyBFcnJvcihzKTtyZXR1cm57d2ViV29ya2VyOkksdGFnczpwWzBdLmRhdGF9fXZhciBlaT1BaTthc3luYyBmdW5jdGlvbiB0aShBLGU9ITEsdD17fSl7bGV0IHI9W3t0eXBlOkUuSW1hZ2V9LHt0eXBlOkUuSnNvbkNvbXBhdGlibGV9XSxpPVtdLG49W107bi5wdXNoKCIwIiksbi5wdXNoKCIxIiksbi5wdXNoKCItLW1lbW9yeS1pbyIpLG4ucHVzaCgiLS1pbnB1dC1pbWFnZXMiKSxBLmZvckVhY2goQj0+e2kucHVzaCh7dHlwZTpFLkJpbmFyeUZpbGUsZGF0YTpCfSksbi5wdXNoKEIucGF0aCl9KSx0eXBlb2YgZTwidSImJmUmJm4ucHVzaCgiLS1zaW5nbGUtc29ydGVkLXNlcmllcyIpO2xldCBjPSJyZWFkLWltYWdlLWRpY29tLWZpbGUtc2VyaWVzIix7d2ViV29ya2VyOkkscmV0dXJuVmFsdWU6YSxzdGRlcnI6cyxvdXRwdXRzOnB9PWF3YWl0IHcoYyxuLHIsaSx7cGlwZWxpbmVCYXNlVXJsOkQoKSxwaXBlbGluZVdvcmtlclVybDp5KCksd2ViV29ya2VyOnQ/LndlYldvcmtlcj8/bnVsbH0pO2lmKGEhPT0wKXRocm93IG5ldyBFcnJvcihzKTtyZXR1cm57d2ViV29ya2VyOkksb3V0cHV0SW1hZ2U6cFswXS5kYXRhLHNvcnRlZEZpbGVuYW1lczpwWzFdLmRhdGF9fXZhciBiZT10aTt2YXIgcmk9dHlwZW9mIGdsb2JhbFRoaXMubmF2aWdhdG9yPy5oYXJkd2FyZUNvbmN1cnJlbmN5PT0ibnVtYmVyIj9nbG9iYWxUaGlzLm5hdmlnYXRvci5oYXJkd2FyZUNvbmN1cnJlbmN5OjQsS3Q9ODthc3luYyBmdW5jdGlvbiBuaShBPXtpbnB1dEltYWdlczpbXX0pe2xldCBlPUEud2ViV29ya2VyUG9vbD8/bnVsbDtlPT09bnVsbCYmKGU9bmV3IHZBKHJpLGJlKSk7bGV0IHQ9W107aWYoQS5pbnB1dEltYWdlcy5sZW5ndGg8MSl0aHJvdyBuZXcgRXJyb3IoJyJpbnB1dC1pbWFnZXMiIG9wdGlvbiBtdXN0IGhhdmUgYSBsZW5ndGggPiAxJyk7aWYoYXdhaXQgUHJvbWlzZS5hbGwoQS5pbnB1dEltYWdlcy5tYXAoYXN5bmMgcj0+e2xldCBpPXI7aWYociBpbnN0YW5jZW9mIEZpbGUpe2xldCBuPWF3YWl0IHIuYXJyYXlCdWZmZXIoKTtpPXtwYXRoOnIubmFtZSxkYXRhOm5ldyBVaW50OEFycmF5KG4pfX10LnB1c2goaSl9KSksQS5zaW5nbGVTb3J0ZWRTZXJpZXMpe2xldCByPVtdO2ZvcihsZXQgYz0wO2M8dC5sZW5ndGg7Yys9S3Qpe2xldCBJPXQuc2xpY2UoYyxjK0t0KTtyLnB1c2goW0ksQS5zaW5nbGVTb3J0ZWRTZXJpZXMse31dKX1sZXQgaT1hd2FpdCBlLnJ1blRhc2tzKHIpLnByb21pc2Usbj1pLm1hcChjPT5jLm91dHB1dEltYWdlKSxvPWkucmVkdWNlKChjLEkpPT5jLmNvbmNhdChJLnNvcnRlZEZpbGVuYW1lcyksW10pO3JldHVybntvdXRwdXRJbWFnZTpZQShuKSx3ZWJXb3JrZXJQb29sOmUsc29ydGVkRmlsZW5hbWVzOm99fWVsc2V7bGV0IHI9W1t0LEEuc2luZ2xlU29ydGVkU2VyaWVzLHt9XV0saT1hd2FpdCBlLnJ1blRhc2tzKHIpLnByb21pc2U7cmV0dXJue291dHB1dEltYWdlOmlbMF0ub3V0cHV0SW1hZ2Usd2ViV29ya2VyUG9vbDplLHNvcnRlZEZpbGVuYW1lczppWzBdLnNvcnRlZEZpbGVuYW1lc319fXZhciBpaT1uaTthc3luYyBmdW5jdGlvbiBvaShBLGU9e30pe2xldCB0PVt7dHlwZTpFLkltYWdlfSx7dHlwZTpFLkpzb25Db21wYXRpYmxlfV0scj1BO2lmKEEgaW5zdGFuY2VvZiBGaWxlKXtsZXQgZj1hd2FpdCBBLmFycmF5QnVmZmVyKCk7cj17cGF0aDpBLm5hbWUsZGF0YTpuZXcgVWludDhBcnJheShmKX19bGV0IGk9W3t0eXBlOkUuQmluYXJ5RmlsZSxkYXRhOnJ9XSxuPVtdLG89ci5wYXRoO24ucHVzaChvKSxuLnB1c2goIjAiKSxuLnB1c2goIjEiKSxuLnB1c2goIi0tbWVtb3J5LWlvIik7bGV0IEk9InJlYWQtc2VnbWVudGF0aW9uIixhPWU/LndlYldvcmtlcjthPT09dm9pZCAwJiYoYT1hd2FpdCBSKCkpO2xldHt3ZWJXb3JrZXI6cyxyZXR1cm5WYWx1ZTpwLHN0ZGVycjpsLG91dHB1dHM6Qn09YXdhaXQgdyhJLG4sdCxpLHtwaXBlbGluZUJhc2VVcmw6RCgpLHBpcGVsaW5lV29ya2VyVXJsOnkoKSx3ZWJXb3JrZXI6YSxub0NvcHk6ZT8ubm9Db3B5fSk7aWYocCE9PTAmJmwhPT0iIil0aHJvdyBuZXcgRXJyb3IobCk7cmV0dXJue3dlYldvcmtlcjpzLHNlZ0ltYWdlOkJbMF0/LmRhdGEsbWV0YUluZm86QlsxXT8uZGF0YX19dmFyIGFpPW9pO2FzeW5jIGZ1bmN0aW9uIHNpKEEsZT17fSl7bGV0IHQ9W3t0eXBlOkUuSW1hZ2V9LHt0eXBlOkUuSnNvbkNvbXBhdGlibGV9XSxyPUE7aWYoQSBpbnN0YW5jZW9mIEZpbGUpe2xldCBmPWF3YWl0IEEuYXJyYXlCdWZmZXIoKTtyPXtwYXRoOkEubmFtZSxkYXRhOm5ldyBVaW50OEFycmF5KGYpfX1sZXQgaT1be3R5cGU6RS5CaW5hcnlGaWxlLGRhdGE6cn1dLG49W10sbz1yLnBhdGg7bi5wdXNoKG8pLG4ucHVzaCgiMCIpLG4ucHVzaCgiMSIpLG4ucHVzaCgiLS1tZW1vcnktaW8iKSxlLm1lcmdlU2VnbWVudHMmJmUubWVyZ2VTZWdtZW50cyYmbi5wdXNoKCItLW1lcmdlLXNlZ21lbnRzIik7bGV0IEk9InJlYWQtb3ZlcmxhcHBpbmctc2VnbWVudGF0aW9uIixhPWU/LndlYldvcmtlcjthPT09dm9pZCAwJiYoYT1hd2FpdCBSKCkpO2xldHt3ZWJXb3JrZXI6cyxyZXR1cm5WYWx1ZTpwLHN0ZGVycjpsLG91dHB1dHM6Qn09YXdhaXQgdyhJLG4sdCxpLHtwaXBlbGluZUJhc2VVcmw6RCgpLHBpcGVsaW5lV29ya2VyVXJsOnkoKSx3ZWJXb3JrZXI6YSxub0NvcHk6ZT8ubm9Db3B5fSk7aWYocCE9PTAmJmwhPT0iIil0aHJvdyBuZXcgRXJyb3IobCk7cmV0dXJue3dlYldvcmtlcjpzLHNlZ0ltYWdlOkJbMF0/LmRhdGEsbWV0YUluZm86QlsxXT8uZGF0YX19dmFyIElpPXNpO2FzeW5jIGZ1bmN0aW9uIGdpKEEsZSx0LHI9e3JlZkRpY29tU2VyaWVzOltdfSl7bGV0IGk9W3t0eXBlOkUuQmluYXJ5RmlsZSxkYXRhOntwYXRoOnQsZGF0YTpuZXcgVWludDhBcnJheX19XSxuPVt7dHlwZTpFLkltYWdlLGRhdGE6QX0se3R5cGU6RS5Kc29uQ29tcGF0aWJsZSxkYXRhOmV9XSxvPVtdO28ucHVzaCgiMCIpLG8ucHVzaCgiMSIpO2xldCBJPXQ7aWYoby5wdXNoKEkpLG8ucHVzaCgiLS1tZW1vcnktaW8iKSxyLnJlZkRpY29tU2VyaWVzKXtpZihyLnJlZkRpY29tU2VyaWVzLmxlbmd0aDwxKXRocm93IG5ldyBFcnJvcignInJlZi1kaWNvbS1zZXJpZXMiIG9wdGlvbiBtdXN0IGhhdmUgYSBsZW5ndGggPiAxJyk7by5wdXNoKCItLXJlZi1kaWNvbS1zZXJpZXMiKSxhd2FpdCBQcm9taXNlLmFsbChyLnJlZkRpY29tU2VyaWVzLm1hcChhc3luYyBRPT57bGV0IGg9UTtpZihRIGluc3RhbmNlb2YgRmlsZSl7bGV0IFQ9YXdhaXQgUS5hcnJheUJ1ZmZlcigpO2g9e3BhdGg6US5uYW1lLGRhdGE6bmV3IFVpbnQ4QXJyYXkoVCl9fW4ucHVzaCh7dHlwZTpFLkJpbmFyeUZpbGUsZGF0YTpofSk7bGV0IGQ9USBpbnN0YW5jZW9mIEZpbGU/US5uYW1lOmgucGF0aDtvLnB1c2goZCl9KSl9ci5za2lwRW1wdHlTbGljZXMmJnIuc2tpcEVtcHR5U2xpY2VzJiZvLnB1c2goIi0tc2tpcC1lbXB0eS1zbGljZXMiKSxyLnVzZUxhYmVsaWRBc1NlZ21lbnRudW1iZXImJnIudXNlTGFiZWxpZEFzU2VnbWVudG51bWJlciYmby5wdXNoKCItLXVzZS1sYWJlbGlkLWFzLXNlZ21lbnRudW1iZXIiKTtsZXQgYT0id3JpdGUtc2VnbWVudGF0aW9uIixzPXI/LndlYldvcmtlcjtzPT09dm9pZCAwJiYocz1hd2FpdCBSKCkpO2xldHt3ZWJXb3JrZXI6cCxyZXR1cm5WYWx1ZTpsLHN0ZGVycjpCLG91dHB1dHM6Q309YXdhaXQgdyhhLG8saSxuLHtwaXBlbGluZUJhc2VVcmw6RCgpLHBpcGVsaW5lV29ya2VyVXJsOnkoKSx3ZWJXb3JrZXI6cyxub0NvcHk6cj8ubm9Db3B5fSk7aWYobCE9PTAmJkIhPT0iIil0aHJvdyBuZXcgRXJyb3IoQik7cmV0dXJue3dlYldvcmtlcjpwLG91dHB1dERpY29tRmlsZTpDWzBdPy5kYXRhfX12YXIgbGk9Z2k7YXN5bmMgZnVuY3Rpb24gdWkoQSxlLHQscj17cmVmRGljb21TZXJpZXM6W119KXtsZXQgaT1be3R5cGU6RS5CaW5hcnlGaWxlLGRhdGE6e3BhdGg6dCxkYXRhOm5ldyBVaW50OEFycmF5fX1dLG49W3t0eXBlOkUuSW1hZ2UsZGF0YTpBfSx7dHlwZTpFLkpzb25Db21wYXRpYmxlLGRhdGE6ZX1dLG89W107by5wdXNoKCIwIiksby5wdXNoKCIxIik7bGV0IEk9dDtpZihvLnB1c2goSSksby5wdXNoKCItLW1lbW9yeS1pbyIpLHIucmVmRGljb21TZXJpZXMpe2lmKHIucmVmRGljb21TZXJpZXMubGVuZ3RoPDEpdGhyb3cgbmV3IEVycm9yKCcicmVmLWRpY29tLXNlcmllcyIgb3B0aW9uIG11c3QgaGF2ZSBhIGxlbmd0aCA+IDEnKTtvLnB1c2goIi0tcmVmLWRpY29tLXNlcmllcyIpLGF3YWl0IFByb21pc2UuYWxsKHIucmVmRGljb21TZXJpZXMubWFwKGFzeW5jIFE9PntsZXQgaD1RO2lmKFEgaW5zdGFuY2VvZiBGaWxlKXtsZXQgVD1hd2FpdCBRLmFycmF5QnVmZmVyKCk7aD17cGF0aDpRLm5hbWUsZGF0YTpuZXcgVWludDhBcnJheShUKX19bi5wdXNoKHt0eXBlOkUuQmluYXJ5RmlsZSxkYXRhOmh9KTtsZXQgZD1RIGluc3RhbmNlb2YgRmlsZT9RLm5hbWU6aC5wYXRoO28ucHVzaChkKX0pKX1yLnNraXBFbXB0eVNsaWNlcyYmci5za2lwRW1wdHlTbGljZXMmJm8ucHVzaCgiLS1za2lwLWVtcHR5LXNsaWNlcyIpLHIudXNlTGFiZWxpZEFzU2VnbWVudG51bWJlciYmci51c2VMYWJlbGlkQXNTZWdtZW50bnVtYmVyJiZvLnB1c2goIi0tdXNlLWxhYmVsaWQtYXMtc2VnbWVudG51bWJlciIpO2xldCBhPSJ3cml0ZS1vdmVybGFwcGluZy1zZWdtZW50YXRpb24iLHM9cj8ud2ViV29ya2VyO3M9PT12b2lkIDAmJihzPWF3YWl0IFIoKSk7bGV0e3dlYldvcmtlcjpwLHJldHVyblZhbHVlOmwsc3RkZXJyOkIsb3V0cHV0czpDfT1hd2FpdCB3KGEsbyxpLG4se3BpcGVsaW5lQmFzZVVybDpEKCkscGlwZWxpbmVXb3JrZXJVcmw6eSgpLHdlYldvcmtlcjpzLG5vQ29weTpyPy5ub0NvcHl9KTtpZihsIT09MCYmQiE9PSIiKXRocm93IG5ldyBFcnJvcihCKTtyZXR1cm57d2ViV29ya2VyOnAsb3V0cHV0RGljb21GaWxlOkNbMF0/LmRhdGF9fXZhciBjaT11aTthc3luYyBmdW5jdGlvbiBCaShBLGUsdD17cmVmRGljb21TZXJpZXM6W10sc2VnSW1hZ2VzOltdfSl7bGV0IHI9W3t0eXBlOkUuQmluYXJ5RmlsZSxkYXRhOntwYXRoOmUsZGF0YTpuZXcgVWludDhBcnJheX19XSxpPVt7dHlwZTpFLkpzb25Db21wYXRpYmxlLGRhdGE6QX1dLG49W107bi5wdXNoKCIwIik7bGV0IGc9ZTtpZihuLnB1c2goZyksbi5wdXNoKCItLW1lbW9yeS1pbyIpLHQucmVmRGljb21TZXJpZXMpe2lmKHQucmVmRGljb21TZXJpZXMubGVuZ3RoPDEpdGhyb3cgbmV3IEVycm9yKCcicmVmLWRpY29tLXNlcmllcyIgb3B0aW9uIG11c3QgaGF2ZSBhIGxlbmd0aCA+IDEnKTtuLnB1c2goIi0tcmVmLWRpY29tLXNlcmllcyIpLGF3YWl0IFByb21pc2UuYWxsKHQucmVmRGljb21TZXJpZXMubWFwKGFzeW5jIEM9PntsZXQgZj1DO2lmKEMgaW5zdGFuY2VvZiBGaWxlKXtsZXQgaD1hd2FpdCBDLmFycmF5QnVmZmVyKCk7Zj17cGF0aDpDLm5hbWUsZGF0YTpuZXcgVWludDhBcnJheShoKX19aS5wdXNoKHt0eXBlOkUuQmluYXJ5RmlsZSxkYXRhOmZ9KTtsZXQgUT1DIGluc3RhbmNlb2YgRmlsZT9DLm5hbWU6Zi5wYXRoO24ucHVzaChRKX0pKX1pZih0LnNlZ0ltYWdlcyl7aWYodC5zZWdJbWFnZXMubGVuZ3RoPDEpdGhyb3cgbmV3IEVycm9yKCcic2VnLWltYWdlcyIgb3B0aW9uIG11c3QgaGF2ZSBhIGxlbmd0aCA+IDEnKTtuLnB1c2goIi0tc2VnLWltYWdlcyIpLGF3YWl0IFByb21pc2UuYWxsKHQuc2VnSW1hZ2VzLm1hcChhc3luYyBDPT57bGV0IGY9QztpZihDIGluc3RhbmNlb2YgRmlsZSl7bGV0IGg9YXdhaXQgQy5hcnJheUJ1ZmZlcigpO2Y9e3BhdGg6Qy5uYW1lLGRhdGE6bmV3IFVpbnQ4QXJyYXkoaCl9fWkucHVzaCh7dHlwZTpFLkJpbmFyeUZpbGUsZGF0YTpmfSk7bGV0IFE9QyBpbnN0YW5jZW9mIEZpbGU/Qy5uYW1lOmYucGF0aDtuLnB1c2goUSl9KSl9dC5za2lwRW1wdHlTbGljZXMmJnQuc2tpcEVtcHR5U2xpY2VzJiZuLnB1c2goIi0tc2tpcC1lbXB0eS1zbGljZXMiKSx0LnVzZUxhYmVsaWRBc1NlZ21lbnRudW1iZXImJnQudXNlTGFiZWxpZEFzU2VnbWVudG51bWJlciYmbi5wdXNoKCItLXVzZS1sYWJlbGlkLWFzLXNlZ21lbnRudW1iZXIiKTtsZXQgYz0id3JpdGUtbXVsdGktc2VnbWVudGF0aW9uIixJPXQ/LndlYldvcmtlcjtJPT09dm9pZCAwJiYoST1hd2FpdCBSKCkpO2xldHt3ZWJXb3JrZXI6YSxyZXR1cm5WYWx1ZTpzLHN0ZGVycjpwLG91dHB1dHM6bH09YXdhaXQgdyhjLG4scixpLHtwaXBlbGluZUJhc2VVcmw6RCgpLHBpcGVsaW5lV29ya2VyVXJsOnkoKSx3ZWJXb3JrZXI6SSxub0NvcHk6dD8ubm9Db3B5fSk7aWYocyE9PTAmJnAhPT0iIil0aHJvdyBuZXcgRXJyb3IocCk7cmV0dXJue3dlYldvcmtlcjphLG91dHB1dERpY29tRmlsZTpsWzBdPy5kYXRhfX12YXIgZmk9Qmk7dmFyIHZ0PSdkYXRhOnRleHQvamF2YXNjcmlwdDtjaGFyc2V0PXV0Zi04LHZhciBtZT1PYmplY3QuZGVmaW5lUHJvcGVydHk7dmFyIHdlPShBLHQpPT57Zm9yKHZhciBlIGluIHQpbWUoQSxlLHtnZXQ6dFtlXSxlbnVtZXJhYmxlOiEwfSl9O3ZhciBmdD1TeW1ib2woIkNvbWxpbmsucHJveHkiKSxwZT1TeW1ib2woIkNvbWxpbmsuZW5kcG9pbnQiKSxTZT1TeW1ib2woIkNvbWxpbmsucmVsZWFzZVByb3h5IiksWUE9U3ltYm9sKCJDb21saW5rLmZpbmFsaXplciIpLGFBPVN5bWJvbCgiQ29tbGluay50aHJvd24iKSxsdD1BPT50eXBlb2YgQT09Im9iamVjdCImJkEhPT1udWxsfHx0eXBlb2YgQT09ImZ1bmN0aW9uIixGZT17Y2FuSGFuZGxlOkE9Pmx0KEEpJiZBW2Z0XSxzZXJpYWxpemUoQSl7bGV0e3BvcnQxOnQscG9ydDI6ZX09bmV3IE1lc3NhZ2VDaGFubmVsO3JldHVybiBmQShBLHQpLFtlLFtlXV19LGRlc2VyaWFsaXplKEEpe3JldHVybiBBLnN0YXJ0KCksR2UoQSl9fSxSZT17Y2FuSGFuZGxlOkE9Pmx0KEEpJiZhQSBpbiBBLHNlcmlhbGl6ZSh7dmFsdWU6QX0pe2xldCB0O3JldHVybiBBIGluc3RhbmNlb2YgRXJyb3I/dD17aXNFcnJvcjohMCx2YWx1ZTp7bWVzc2FnZTpBLm1lc3NhZ2UsbmFtZTpBLm5hbWUsc3RhY2s6QS5zdGFja319OnQ9e2lzRXJyb3I6ITEsdmFsdWU6QX0sW3QsW11dfSxkZXNlcmlhbGl6ZShBKXt0aHJvdyBBLmlzRXJyb3I/T2JqZWN0LmFzc2lnbihuZXcgRXJyb3IoQS52YWx1ZS5tZXNzYWdlKSxBLnZhbHVlKTpBLnZhbHVlfX0sdXQ9bmV3IE1hcChbWyJwcm94eSIsRmVdLFsidGhyb3ciLFJlXV0pO2Z1bmN0aW9uIE5lKEEsdCl7Zm9yKGxldCBlIG9mIEEpaWYodD09PWV8fGU9PT0iKiJ8fGUgaW5zdGFuY2VvZiBSZWdFeHAmJmUudGVzdCh0KSlyZXR1cm4hMDtyZXR1cm4hMX1mdW5jdGlvbiBmQShBLHQ9Z2xvYmFsVGhpcyxlPVsiKiJdKXt0LmFkZEV2ZW50TGlzdGVuZXIoIm1lc3NhZ2UiLGZ1bmN0aW9uIEkocil7aWYoIXJ8fCFyLmRhdGEpcmV0dXJuO2lmKCFOZShlLHIub3JpZ2luKSl7Y29uc29sZS53YXJuKGBJbnZhbGlkIG9yaWdpbiBcJyR7ci5vcmlnaW59XCcgZm9yIGNvbWxpbmsgcHJveHlgKTtyZXR1cm59bGV0e2lkOm8sdHlwZTpnLHBhdGg6Q309T2JqZWN0LmFzc2lnbih7cGF0aDpbXX0sci5kYXRhKSxRPShyLmRhdGEuYXJndW1lbnRMaXN0fHxbXSkubWFwKE8pLGE7dHJ5e2xldCBuPUMuc2xpY2UoMCwtMSkucmVkdWNlKChmLEIpPT5mW0JdLEEpLHM9Qy5yZWR1Y2UoKGYsQik9PmZbQl0sQSk7c3dpdGNoKGcpe2Nhc2UiR0VUIjphPXM7YnJlYWs7Y2FzZSJTRVQiOm5bQy5zbGljZSgtMSlbMF1dPU8oci5kYXRhLnZhbHVlKSxhPSEwO2JyZWFrO2Nhc2UiQVBQTFkiOmE9cy5hcHBseShuLFEpO2JyZWFrO2Nhc2UiQ09OU1RSVUNUIjp7bGV0IGY9bmV3IHMoLi4uUSk7YT1iZShmKX1icmVhaztjYXNlIkVORFBPSU5UIjp7bGV0e3BvcnQxOmYscG9ydDI6Qn09bmV3IE1lc3NhZ2VDaGFubmVsO2ZBKEEsQiksYT1NQShmLFtmXSl9YnJlYWs7Y2FzZSJSRUxFQVNFIjphPXZvaWQgMDticmVhaztkZWZhdWx0OnJldHVybn19Y2F0Y2gobil7YT17dmFsdWU6bixbYUFdOjB9fVByb21pc2UucmVzb2x2ZShhKS5jYXRjaChuPT4oe3ZhbHVlOm4sW2FBXTowfSkpLnRoZW4obj0+e2xldFtzLGZdPWNBKG4pO3QucG9zdE1lc3NhZ2UoT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LHMpLHtpZDpvfSksZiksZz09PSJSRUxFQVNFIiYmKHQucmVtb3ZlRXZlbnRMaXN0ZW5lcigibWVzc2FnZSIsSSksRHQodCksWUEgaW4gQSYmdHlwZW9mIEFbWUFdPT0iZnVuY3Rpb24iJiZBW1lBXSgpKX0pLmNhdGNoKG49PntsZXRbcyxmXT1jQSh7dmFsdWU6bmV3IFR5cGVFcnJvcigiVW5zZXJpYWxpemFibGUgcmV0dXJuIHZhbHVlIiksW2FBXTowfSk7dC5wb3N0TWVzc2FnZShPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30scykse2lkOm99KSxmKX0pfSksdC5zdGFydCYmdC5zdGFydCgpfWZ1bmN0aW9uIFVlKEEpe3JldHVybiBBLmNvbnN0cnVjdG9yLm5hbWU9PT0iTWVzc2FnZVBvcnQifWZ1bmN0aW9uIER0KEEpe1VlKEEpJiZBLmNsb3NlKCl9ZnVuY3Rpb24gR2UoQSx0KXtyZXR1cm4gcUEoQSxbXSx0KX1mdW5jdGlvbiBCQShBKXtpZihBKXRocm93IG5ldyBFcnJvcigiUHJveHkgaGFzIGJlZW4gcmVsZWFzZWQgYW5kIGlzIG5vdCB1c2VhYmxlIil9ZnVuY3Rpb24gaHQoQSl7cmV0dXJuIFAoQSx7dHlwZToiUkVMRUFTRSJ9KS50aGVuKCgpPT57RHQoQSl9KX12YXIgUUE9bmV3IFdlYWtNYXAsRUE9IkZpbmFsaXphdGlvblJlZ2lzdHJ5ImluIGdsb2JhbFRoaXMmJm5ldyBGaW5hbGl6YXRpb25SZWdpc3RyeShBPT57bGV0IHQ9KFFBLmdldChBKXx8MCktMTtRQS5zZXQoQSx0KSx0PT09MCYmaHQoQSl9KTtmdW5jdGlvbiBrZShBLHQpe2xldCBlPShRQS5nZXQodCl8fDApKzE7UUEuc2V0KHQsZSksRUEmJkVBLnJlZ2lzdGVyKEEsdCxBKX1mdW5jdGlvbiBMZShBKXtFQSYmRUEudW5yZWdpc3RlcihBKX1mdW5jdGlvbiBxQShBLHQ9W10sZT1mdW5jdGlvbigpe30pe2xldCBJPSExLHI9bmV3IFByb3h5KGUse2dldChvLGcpe2lmKEJBKEkpLGc9PT1TZSlyZXR1cm4oKT0+e0xlKHIpLGh0KEEpLEk9ITB9O2lmKGc9PT0idGhlbiIpe2lmKHQubGVuZ3RoPT09MClyZXR1cm57dGhlbjooKT0+cn07bGV0IEM9UChBLHt0eXBlOiJHRVQiLHBhdGg6dC5tYXAoUT0+US50b1N0cmluZygpKX0pLnRoZW4oTyk7cmV0dXJuIEMudGhlbi5iaW5kKEMpfXJldHVybiBxQShBLFsuLi50LGddKX0sc2V0KG8sZyxDKXtCQShJKTtsZXRbUSxhXT1jQShDKTtyZXR1cm4gUChBLHt0eXBlOiJTRVQiLHBhdGg6Wy4uLnQsZ10ubWFwKG49Pm4udG9TdHJpbmcoKSksdmFsdWU6UX0sYSkudGhlbihPKX0sYXBwbHkobyxnLEMpe0JBKEkpO2xldCBRPXRbdC5sZW5ndGgtMV07aWYoUT09PXBlKXJldHVybiBQKEEse3R5cGU6IkVORFBPSU5UIn0pLnRoZW4oTyk7aWYoUT09PSJiaW5kIilyZXR1cm4gcUEoQSx0LnNsaWNlKDAsLTEpKTtsZXRbYSxuXT1jdChDKTtyZXR1cm4gUChBLHt0eXBlOiJBUFBMWSIscGF0aDp0Lm1hcChzPT5zLnRvU3RyaW5nKCkpLGFyZ3VtZW50TGlzdDphfSxuKS50aGVuKE8pfSxjb25zdHJ1Y3QobyxnKXtCQShJKTtsZXRbQyxRXT1jdChnKTtyZXR1cm4gUChBLHt0eXBlOiJDT05TVFJVQ1QiLHBhdGg6dC5tYXAoYT0+YS50b1N0cmluZygpKSxhcmd1bWVudExpc3Q6Q30sUSkudGhlbihPKX19KTtyZXR1cm4ga2UocixBKSxyfWZ1bmN0aW9uIEplKEEpe3JldHVybiBBcnJheS5wcm90b3R5cGUuY29uY2F0LmFwcGx5KFtdLEEpfWZ1bmN0aW9uIGN0KEEpe2xldCB0PUEubWFwKGNBKTtyZXR1cm5bdC5tYXAoZT0+ZVswXSksSmUodC5tYXAoZT0+ZVsxXSkpXX12YXIgZHQ9bmV3IFdlYWtNYXA7ZnVuY3Rpb24gTUEoQSx0KXtyZXR1cm4gZHQuc2V0KEEsdCksQX1mdW5jdGlvbiBiZShBKXtyZXR1cm4gT2JqZWN0LmFzc2lnbihBLHtbZnRdOiEwfSl9ZnVuY3Rpb24gY0EoQSl7Zm9yKGxldFt0LGVdb2YgdXQpaWYoZS5jYW5IYW5kbGUoQSkpe2xldFtJLHJdPWUuc2VyaWFsaXplKEEpO3JldHVyblt7dHlwZToiSEFORExFUiIsbmFtZTp0LHZhbHVlOkl9LHJdfXJldHVyblt7dHlwZToiUkFXIix2YWx1ZTpBfSxkdC5nZXQoQSl8fFtdXX1mdW5jdGlvbiBPKEEpe3N3aXRjaChBLnR5cGUpe2Nhc2UiSEFORExFUiI6cmV0dXJuIHV0LmdldChBLm5hbWUpLmRlc2VyaWFsaXplKEEudmFsdWUpO2Nhc2UiUkFXIjpyZXR1cm4gQS52YWx1ZX19ZnVuY3Rpb24gUChBLHQsZSl7cmV0dXJuIG5ldyBQcm9taXNlKEk9PntsZXQgcj1IZSgpO0EuYWRkRXZlbnRMaXN0ZW5lcigibWVzc2FnZSIsZnVuY3Rpb24gbyhnKXshZy5kYXRhfHwhZy5kYXRhLmlkfHxnLmRhdGEuaWQhPT1yfHwoQS5yZW1vdmVFdmVudExpc3RlbmVyKCJtZXNzYWdlIixvKSxJKGcuZGF0YSkpfSksQS5zdGFydCYmQS5zdGFydCgpLEEucG9zdE1lc3NhZ2UoT2JqZWN0LmFzc2lnbih7aWQ6cn0sdCksZSl9KX1mdW5jdGlvbiBIZSgpe3JldHVybiBuZXcgQXJyYXkoNCkuZmlsbCgwKS5tYXAoKCk9Pk1hdGguZmxvb3IoTWF0aC5yYW5kb20oKSpOdW1iZXIuTUFYX1NBRkVfSU5URUdFUikudG9TdHJpbmcoMTYpKS5qb2luKCItIil9ZnVuY3Rpb24gdihBLHQpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiBBLmFwcGx5KHQsYXJndW1lbnRzKX19dmFye3RvU3RyaW5nOlllfT1PYmplY3QucHJvdG90eXBlLHtnZXRQcm90b3R5cGVPZjpPQX09T2JqZWN0LHVBPShBPT50PT57bGV0IGU9WWUuY2FsbCh0KTtyZXR1cm4gQVtlXXx8KEFbZV09ZS5zbGljZSg4LC0xKS50b0xvd2VyQ2FzZSgpKX0pKE9iamVjdC5jcmVhdGUobnVsbCkpLEc9QT0+KEE9QS50b0xvd2VyQ2FzZSgpLHQ9PnVBKHQpPT09QSksREE9QT0+dD0+dHlwZW9mIHQ9PT1BLHtpc0FycmF5Omp9PUFycmF5LCQ9REEoInVuZGVmaW5lZCIpO2Z1bmN0aW9uIHFlKEEpe3JldHVybiBBIT09bnVsbCYmISQoQSkmJkEuY29uc3RydWN0b3IhPT1udWxsJiYhJChBLmNvbnN0cnVjdG9yKSYmTihBLmNvbnN0cnVjdG9yLmlzQnVmZmVyKSYmQS5jb25zdHJ1Y3Rvci5pc0J1ZmZlcihBKX12YXIgcHQ9RygiQXJyYXlCdWZmZXIiKTtmdW5jdGlvbiBNZShBKXtsZXQgdDtyZXR1cm4gdHlwZW9mIEFycmF5QnVmZmVyPCJ1IiYmQXJyYXlCdWZmZXIuaXNWaWV3P3Q9QXJyYXlCdWZmZXIuaXNWaWV3KEEpOnQ9QSYmQS5idWZmZXImJnB0KEEuYnVmZmVyKSx0fXZhciBUZT1EQSgic3RyaW5nIiksTj1EQSgiZnVuY3Rpb24iKSxTdD1EQSgibnVtYmVyIiksaEE9QT0+QSE9PW51bGwmJnR5cGVvZiBBPT0ib2JqZWN0IixLZT1BPT5BPT09ITB8fEE9PT0hMSxsQT1BPT57aWYodUEoQSkhPT0ib2JqZWN0IilyZXR1cm4hMTtsZXQgdD1PQShBKTtyZXR1cm4odD09PW51bGx8fHQ9PT1PYmplY3QucHJvdG90eXBlfHxPYmplY3QuZ2V0UHJvdG90eXBlT2YodCk9PT1udWxsKSYmIShTeW1ib2wudG9TdHJpbmdUYWcgaW4gQSkmJiEoU3ltYm9sLml0ZXJhdG9yIGluIEEpfSxPZT1HKCJEYXRlIikseGU9RygiRmlsZSIpLFBlPUcoIkJsb2IiKSxqZT1HKCJGaWxlTGlzdCIpLFdlPUE9PmhBKEEpJiZOKEEucGlwZSksWmU9QT0+e2xldCB0O3JldHVybiBBJiYodHlwZW9mIEZvcm1EYXRhPT0iZnVuY3Rpb24iJiZBIGluc3RhbmNlb2YgRm9ybURhdGF8fE4oQS5hcHBlbmQpJiYoKHQ9dUEoQSkpPT09ImZvcm1kYXRhInx8dD09PSJvYmplY3QiJiZOKEEudG9TdHJpbmcpJiZBLnRvU3RyaW5nKCk9PT0iW29iamVjdCBGb3JtRGF0YV0iKSl9LFZlPUcoIlVSTFNlYXJjaFBhcmFtcyIpLFtfZSxYZSx6ZSx2ZV09WyJSZWFkYWJsZVN0cmVhbSIsIlJlcXVlc3QiLCJSZXNwb25zZSIsIkhlYWRlcnMiXS5tYXAoRyksJGU9QT0+QS50cmltP0EudHJpbSgpOkEucmVwbGFjZSgvXltcXHNcXHVGRUZGXFx4QTBdK3xbXFxzXFx1RkVGRlxceEEwXSskL2csIiIpO2Z1bmN0aW9uIEFBKEEsdCx7YWxsT3duS2V5czplPSExfT17fSl7aWYoQT09PW51bGx8fHR5cGVvZiBBPiJ1IilyZXR1cm47bGV0IEkscjtpZih0eXBlb2YgQSE9Im9iamVjdCImJihBPVtBXSksaihBKSlmb3IoST0wLHI9QS5sZW5ndGg7STxyO0krKyl0LmNhbGwobnVsbCxBW0ldLEksQSk7ZWxzZXtsZXQgbz1lP09iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKEEpOk9iamVjdC5rZXlzKEEpLGc9by5sZW5ndGgsQztmb3IoST0wO0k8ZztJKyspQz1vW0ldLHQuY2FsbChudWxsLEFbQ10sQyxBKX19ZnVuY3Rpb24gRnQoQSx0KXt0PXQudG9Mb3dlckNhc2UoKTtsZXQgZT1PYmplY3Qua2V5cyhBKSxJPWUubGVuZ3RoLHI7Zm9yKDtJLS0gPjA7KWlmKHI9ZVtJXSx0PT09ci50b0xvd2VyQ2FzZSgpKXJldHVybiByO3JldHVybiBudWxsfXZhciB4PXR5cGVvZiBnbG9iYWxUaGlzPCJ1Ij9nbG9iYWxUaGlzOnR5cGVvZiBzZWxmPCJ1Ij9zZWxmOnR5cGVvZiB3aW5kb3c8InUiP3dpbmRvdzpnbG9iYWwsUnQ9QT0+ISQoQSkmJkEhPT14O2Z1bmN0aW9uIEtBKCl7bGV0e2Nhc2VsZXNzOkF9PVJ0KHRoaXMpJiZ0aGlzfHx7fSx0PXt9LGU9KEkscik9PntsZXQgbz1BJiZGdCh0LHIpfHxyO2xBKHRbb10pJiZsQShJKT90W29dPUtBKHRbb10sSSk6bEEoSSk/dFtvXT1LQSh7fSxJKTpqKEkpP3Rbb109SS5zbGljZSgpOnRbb109SX07Zm9yKGxldCBJPTAscj1hcmd1bWVudHMubGVuZ3RoO0k8cjtJKyspYXJndW1lbnRzW0ldJiZBQShhcmd1bWVudHNbSV0sZSk7cmV0dXJuIHR9dmFyIEFJPShBLHQsZSx7YWxsT3duS2V5czpJfT17fSk9PihBQSh0LChyLG8pPT57ZSYmTihyKT9BW29dPXYocixlKTpBW29dPXJ9LHthbGxPd25LZXlzOkl9KSxBKSx0ST1BPT4oQS5jaGFyQ29kZUF0KDApPT09NjUyNzkmJihBPUEuc2xpY2UoMSkpLEEpLGVJPShBLHQsZSxJKT0+e0EucHJvdG90eXBlPU9iamVjdC5jcmVhdGUodC5wcm90b3R5cGUsSSksQS5wcm90b3R5cGUuY29uc3RydWN0b3I9QSxPYmplY3QuZGVmaW5lUHJvcGVydHkoQSwic3VwZXIiLHt2YWx1ZTp0LnByb3RvdHlwZX0pLGUmJk9iamVjdC5hc3NpZ24oQS5wcm90b3R5cGUsZSl9LElJPShBLHQsZSxJKT0+e2xldCByLG8sZyxDPXt9O2lmKHQ9dHx8e30sQT09bnVsbClyZXR1cm4gdDtkb3tmb3Iocj1PYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhBKSxvPXIubGVuZ3RoO28tLSA+MDspZz1yW29dLCghSXx8SShnLEEsdCkpJiYhQ1tnXSYmKHRbZ109QVtnXSxDW2ddPSEwKTtBPWUhPT0hMSYmT0EoQSl9d2hpbGUoQSYmKCFlfHxlKEEsdCkpJiZBIT09T2JqZWN0LnByb3RvdHlwZSk7cmV0dXJuIHR9LHJJPShBLHQsZSk9PntBPVN0cmluZyhBKSwoZT09PXZvaWQgMHx8ZT5BLmxlbmd0aCkmJihlPUEubGVuZ3RoKSxlLT10Lmxlbmd0aDtsZXQgST1BLmluZGV4T2YodCxlKTtyZXR1cm4gSSE9PS0xJiZJPT09ZX0sb0k9QT0+e2lmKCFBKXJldHVybiBudWxsO2lmKGooQSkpcmV0dXJuIEE7bGV0IHQ9QS5sZW5ndGg7aWYoIVN0KHQpKXJldHVybiBudWxsO2xldCBlPW5ldyBBcnJheSh0KTtmb3IoO3QtLSA+MDspZVt0XT1BW3RdO3JldHVybiBlfSxnST0oQT0+dD0+QSYmdCBpbnN0YW5jZW9mIEEpKHR5cGVvZiBVaW50OEFycmF5PCJ1IiYmT0EoVWludDhBcnJheSkpLGlJPShBLHQpPT57bGV0IEk9KEEmJkFbU3ltYm9sLml0ZXJhdG9yXSkuY2FsbChBKSxyO2Zvcig7KHI9SS5uZXh0KCkpJiYhci5kb25lOyl7bGV0IG89ci52YWx1ZTt0LmNhbGwoQSxvWzBdLG9bMV0pfX0sbkk9KEEsdCk9PntsZXQgZSxJPVtdO2Zvcig7KGU9QS5leGVjKHQpKSE9PW51bGw7KUkucHVzaChlKTtyZXR1cm4gSX0sc0k9RygiSFRNTEZvcm1FbGVtZW50IiksQ0k9QT0+QS50b0xvd2VyQ2FzZSgpLnJlcGxhY2UoL1stX1xcc10oW2EtelxcZF0pKFxcdyopL2csZnVuY3Rpb24oZSxJLHIpe3JldHVybiBJLnRvVXBwZXJDYXNlKCkrcn0pLG10PSgoe2hhc093blByb3BlcnR5OkF9KT0+KHQsZSk9PkEuY2FsbCh0LGUpKShPYmplY3QucHJvdG90eXBlKSxCST1HKCJSZWdFeHAiKSxOdD0oQSx0KT0+e2xldCBlPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKEEpLEk9e307QUEoZSwocixvKT0+e2xldCBnOyhnPXQocixvLEEpKSE9PSExJiYoSVtvXT1nfHxyKX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKEEsSSl9LGFJPUE9PntOdChBLCh0LGUpPT57aWYoTihBKSYmWyJhcmd1bWVudHMiLCJjYWxsZXIiLCJjYWxsZWUiXS5pbmRleE9mKGUpIT09LTEpcmV0dXJuITE7bGV0IEk9QVtlXTtpZihOKEkpKXtpZih0LmVudW1lcmFibGU9ITEsIndyaXRhYmxlImluIHQpe3Qud3JpdGFibGU9ITE7cmV0dXJufXQuc2V0fHwodC5zZXQ9KCk9Pnt0aHJvdyBFcnJvcigiQ2FuIG5vdCByZXdyaXRlIHJlYWQtb25seSBtZXRob2QgXCciK2UrIlwnIil9KX19KX0sUUk9KEEsdCk9PntsZXQgZT17fSxJPXI9PntyLmZvckVhY2gobz0+e2Vbb109ITB9KX07cmV0dXJuIGooQSk/SShBKTpJKFN0cmluZyhBKS5zcGxpdCh0KSksZX0sRUk9KCk9Pnt9LGNJPShBLHQpPT5BIT1udWxsJiZOdW1iZXIuaXNGaW5pdGUoQT0rQSk/QTp0LFRBPSJhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5eiIsd3Q9IjAxMjM0NTY3ODkiLFV0PXtESUdJVDp3dCxBTFBIQTpUQSxBTFBIQV9ESUdJVDpUQStUQS50b1VwcGVyQ2FzZSgpK3d0fSxmST0oQT0xNix0PVV0LkFMUEhBX0RJR0lUKT0+e2xldCBlPSIiLHtsZW5ndGg6SX09dDtmb3IoO0EtLTspZSs9dFtNYXRoLnJhbmRvbSgpKkl8MF07cmV0dXJuIGV9O2Z1bmN0aW9uIGxJKEEpe3JldHVybiEhKEEmJk4oQS5hcHBlbmQpJiZBW1N5bWJvbC50b1N0cmluZ1RhZ109PT0iRm9ybURhdGEiJiZBW1N5bWJvbC5pdGVyYXRvcl0pfXZhciB1ST1BPT57bGV0IHQ9bmV3IEFycmF5KDEwKSxlPShJLHIpPT57aWYoaEEoSSkpe2lmKHQuaW5kZXhPZihJKT49MClyZXR1cm47aWYoISgidG9KU09OImluIEkpKXt0W3JdPUk7bGV0IG89aihJKT9bXTp7fTtyZXR1cm4gQUEoSSwoZyxDKT0+e2xldCBRPWUoZyxyKzEpOyEkKFEpJiYob1tDXT1RKX0pLHRbcl09dm9pZCAwLG99fXJldHVybiBJfTtyZXR1cm4gZShBLDApfSxEST1HKCJBc3luY0Z1bmN0aW9uIiksaEk9QT0+QSYmKGhBKEEpfHxOKEEpKSYmTihBLnRoZW4pJiZOKEEuY2F0Y2gpLEd0PSgoQSx0KT0+QT9zZXRJbW1lZGlhdGU6dD8oKGUsSSk9Pih4LmFkZEV2ZW50TGlzdGVuZXIoIm1lc3NhZ2UiLCh7c291cmNlOnIsZGF0YTpvfSk9PntyPT09eCYmbz09PWUmJkkubGVuZ3RoJiZJLnNoaWZ0KCkoKX0sITEpLHI9PntJLnB1c2gocikseC5wb3N0TWVzc2FnZShlLCIqIil9KSkoYGF4aW9zQCR7TWF0aC5yYW5kb20oKX1gLFtdKTplPT5zZXRUaW1lb3V0KGUpKSh0eXBlb2Ygc2V0SW1tZWRpYXRlPT0iZnVuY3Rpb24iLE4oeC5wb3N0TWVzc2FnZSkpLGRJPXR5cGVvZiBxdWV1ZU1pY3JvdGFzazwidSI/cXVldWVNaWNyb3Rhc2suYmluZCh4KTp0eXBlb2YgcHJvY2VzczwidSImJnByb2Nlc3MubmV4dFRpY2t8fEd0LGk9e2lzQXJyYXk6aixpc0FycmF5QnVmZmVyOnB0LGlzQnVmZmVyOnFlLGlzRm9ybURhdGE6WmUsaXNBcnJheUJ1ZmZlclZpZXc6TWUsaXNTdHJpbmc6VGUsaXNOdW1iZXI6U3QsaXNCb29sZWFuOktlLGlzT2JqZWN0OmhBLGlzUGxhaW5PYmplY3Q6bEEsaXNSZWFkYWJsZVN0cmVhbTpfZSxpc1JlcXVlc3Q6WGUsaXNSZXNwb25zZTp6ZSxpc0hlYWRlcnM6dmUsaXNVbmRlZmluZWQ6JCxpc0RhdGU6T2UsaXNGaWxlOnhlLGlzQmxvYjpQZSxpc1JlZ0V4cDpCSSxpc0Z1bmN0aW9uOk4saXNTdHJlYW06V2UsaXNVUkxTZWFyY2hQYXJhbXM6VmUsaXNUeXBlZEFycmF5OmdJLGlzRmlsZUxpc3Q6amUsZm9yRWFjaDpBQSxtZXJnZTpLQSxleHRlbmQ6QUksdHJpbTokZSxzdHJpcEJPTTp0SSxpbmhlcml0czplSSx0b0ZsYXRPYmplY3Q6SUksa2luZE9mOnVBLGtpbmRPZlRlc3Q6RyxlbmRzV2l0aDpySSx0b0FycmF5Om9JLGZvckVhY2hFbnRyeTppSSxtYXRjaEFsbDpuSSxpc0hUTUxGb3JtOnNJLGhhc093blByb3BlcnR5Om10LGhhc093blByb3A6bXQscmVkdWNlRGVzY3JpcHRvcnM6TnQsZnJlZXplTWV0aG9kczphSSx0b09iamVjdFNldDpRSSx0b0NhbWVsQ2FzZTpDSSxub29wOkVJLHRvRmluaXRlTnVtYmVyOmNJLGZpbmRLZXk6RnQsZ2xvYmFsOngsaXNDb250ZXh0RGVmaW5lZDpSdCxBTFBIQUJFVDpVdCxnZW5lcmF0ZVN0cmluZzpmSSxpc1NwZWNDb21wbGlhbnRGb3JtOmxJLHRvSlNPTk9iamVjdDp1SSxpc0FzeW5jRm46REksaXNUaGVuYWJsZTpoSSxzZXRJbW1lZGlhdGU6R3QsYXNhcDpkSX07ZnVuY3Rpb24gVyhBLHQsZSxJLHIpe0Vycm9yLmNhbGwodGhpcyksRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2U/RXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UodGhpcyx0aGlzLmNvbnN0cnVjdG9yKTp0aGlzLnN0YWNrPW5ldyBFcnJvcigpLnN0YWNrLHRoaXMubWVzc2FnZT1BLHRoaXMubmFtZT0iQXhpb3NFcnJvciIsdCYmKHRoaXMuY29kZT10KSxlJiYodGhpcy5jb25maWc9ZSksSSYmKHRoaXMucmVxdWVzdD1JKSxyJiYodGhpcy5yZXNwb25zZT1yKX1pLmluaGVyaXRzKFcsRXJyb3Ise3RvSlNPTjpmdW5jdGlvbigpe3JldHVybnttZXNzYWdlOnRoaXMubWVzc2FnZSxuYW1lOnRoaXMubmFtZSxkZXNjcmlwdGlvbjp0aGlzLmRlc2NyaXB0aW9uLG51bWJlcjp0aGlzLm51bWJlcixmaWxlTmFtZTp0aGlzLmZpbGVOYW1lLGxpbmVOdW1iZXI6dGhpcy5saW5lTnVtYmVyLGNvbHVtbk51bWJlcjp0aGlzLmNvbHVtbk51bWJlcixzdGFjazp0aGlzLnN0YWNrLGNvbmZpZzppLnRvSlNPTk9iamVjdCh0aGlzLmNvbmZpZyksY29kZTp0aGlzLmNvZGUsc3RhdHVzOnRoaXMucmVzcG9uc2UmJnRoaXMucmVzcG9uc2Uuc3RhdHVzP3RoaXMucmVzcG9uc2Uuc3RhdHVzOm51bGx9fX0pO3ZhciBrdD1XLnByb3RvdHlwZSxMdD17fTtbIkVSUl9CQURfT1BUSU9OX1ZBTFVFIiwiRVJSX0JBRF9PUFRJT04iLCJFQ09OTkFCT1JURUQiLCJFVElNRURPVVQiLCJFUlJfTkVUV09SSyIsIkVSUl9GUl9UT09fTUFOWV9SRURJUkVDVFMiLCJFUlJfREVQUkVDQVRFRCIsIkVSUl9CQURfUkVTUE9OU0UiLCJFUlJfQkFEX1JFUVVFU1QiLCJFUlJfQ0FOQ0VMRUQiLCJFUlJfTk9UX1NVUFBPUlQiLCJFUlJfSU5WQUxJRF9VUkwiXS5mb3JFYWNoKEE9PntMdFtBXT17dmFsdWU6QX19KTtPYmplY3QuZGVmaW5lUHJvcGVydGllcyhXLEx0KTtPYmplY3QuZGVmaW5lUHJvcGVydHkoa3QsImlzQXhpb3NFcnJvciIse3ZhbHVlOiEwfSk7Vy5mcm9tPShBLHQsZSxJLHIsbyk9PntsZXQgZz1PYmplY3QuY3JlYXRlKGt0KTtyZXR1cm4gaS50b0ZsYXRPYmplY3QoQSxnLGZ1bmN0aW9uKFEpe3JldHVybiBRIT09RXJyb3IucHJvdG90eXBlfSxDPT5DIT09ImlzQXhpb3NFcnJvciIpLFcuY2FsbChnLEEubWVzc2FnZSx0LGUsSSxyKSxnLmNhdXNlPUEsZy5uYW1lPUEubmFtZSxvJiZPYmplY3QuYXNzaWduKGcsbyksZ307dmFyIHU9Vzt2YXIgZEE9bnVsbDtmdW5jdGlvbiB4QShBKXtyZXR1cm4gaS5pc1BsYWluT2JqZWN0KEEpfHxpLmlzQXJyYXkoQSl9ZnVuY3Rpb24gYnQoQSl7cmV0dXJuIGkuZW5kc1dpdGgoQSwiW10iKT9BLnNsaWNlKDAsLTIpOkF9ZnVuY3Rpb24gSnQoQSx0LGUpe3JldHVybiBBP0EuY29uY2F0KHQpLm1hcChmdW5jdGlvbihyLG8pe3JldHVybiByPWJ0KHIpLCFlJiZvPyJbIityKyJdIjpyfSkuam9pbihlPyIuIjoiIik6dH1mdW5jdGlvbiB5SShBKXtyZXR1cm4gaS5pc0FycmF5KEEpJiYhQS5zb21lKHhBKX12YXIgbUk9aS50b0ZsYXRPYmplY3QoaSx7fSxudWxsLGZ1bmN0aW9uKHQpe3JldHVybi9eaXNbQS1aXS8udGVzdCh0KX0pO2Z1bmN0aW9uIHdJKEEsdCxlKXtpZighaS5pc09iamVjdChBKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJ0YXJnZXQgbXVzdCBiZSBhbiBvYmplY3QiKTt0PXR8fG5ldyhkQXx8Rm9ybURhdGEpLGU9aS50b0ZsYXRPYmplY3QoZSx7bWV0YVRva2VuczohMCxkb3RzOiExLGluZGV4ZXM6ITF9LCExLGZ1bmN0aW9uKGwsYyl7cmV0dXJuIWkuaXNVbmRlZmluZWQoY1tsXSl9KTtsZXQgST1lLm1ldGFUb2tlbnMscj1lLnZpc2l0b3J8fG4sbz1lLmRvdHMsZz1lLmluZGV4ZXMsUT0oZS5CbG9ifHx0eXBlb2YgQmxvYjwidSImJkJsb2IpJiZpLmlzU3BlY0NvbXBsaWFudEZvcm0odCk7aWYoIWkuaXNGdW5jdGlvbihyKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJ2aXNpdG9yIG11c3QgYmUgYSBmdW5jdGlvbiIpO2Z1bmN0aW9uIGEoRSl7aWYoRT09PW51bGwpcmV0dXJuIiI7aWYoaS5pc0RhdGUoRSkpcmV0dXJuIEUudG9JU09TdHJpbmcoKTtpZighUSYmaS5pc0Jsb2IoRSkpdGhyb3cgbmV3IHUoIkJsb2IgaXMgbm90IHN1cHBvcnRlZC4gVXNlIGEgQnVmZmVyIGluc3RlYWQuIik7cmV0dXJuIGkuaXNBcnJheUJ1ZmZlcihFKXx8aS5pc1R5cGVkQXJyYXkoRSk/USYmdHlwZW9mIEJsb2I9PSJmdW5jdGlvbiI/bmV3IEJsb2IoW0VdKTpCdWZmZXIuZnJvbShFKTpFfWZ1bmN0aW9uIG4oRSxsLGMpe2xldCBwPUU7aWYoRSYmIWMmJnR5cGVvZiBFPT0ib2JqZWN0Iil7aWYoaS5lbmRzV2l0aChsLCJ7fSIpKWw9ST9sOmwuc2xpY2UoMCwtMiksRT1KU09OLnN0cmluZ2lmeShFKTtlbHNlIGlmKGkuaXNBcnJheShFKSYmeUkoRSl8fChpLmlzRmlsZUxpc3QoRSl8fGkuZW5kc1dpdGgobCwiW10iKSkmJihwPWkudG9BcnJheShFKSkpcmV0dXJuIGw9YnQobCkscC5mb3JFYWNoKGZ1bmN0aW9uKEQsVSl7IShpLmlzVW5kZWZpbmVkKEQpfHxEPT09bnVsbCkmJnQuYXBwZW5kKGc9PT0hMD9KdChbbF0sVSxvKTpnPT09bnVsbD9sOmwrIltdIixhKEQpKX0pLCExfXJldHVybiB4QShFKT8hMDoodC5hcHBlbmQoSnQoYyxsLG8pLGEoRSkpLCExKX1sZXQgcz1bXSxmPU9iamVjdC5hc3NpZ24obUkse2RlZmF1bHRWaXNpdG9yOm4sY29udmVydFZhbHVlOmEsaXNWaXNpdGFibGU6eEF9KTtmdW5jdGlvbiBCKEUsbCl7aWYoIWkuaXNVbmRlZmluZWQoRSkpe2lmKHMuaW5kZXhPZihFKSE9PS0xKXRocm93IEVycm9yKCJDaXJjdWxhciByZWZlcmVuY2UgZGV0ZWN0ZWQgaW4gIitsLmpvaW4oIi4iKSk7cy5wdXNoKEUpLGkuZm9yRWFjaChFLGZ1bmN0aW9uKHAsUyl7KCEoaS5pc1VuZGVmaW5lZChwKXx8cD09PW51bGwpJiZyLmNhbGwodCxwLGkuaXNTdHJpbmcoUyk/Uy50cmltKCk6UyxsLGYpKT09PSEwJiZCKHAsbD9sLmNvbmNhdChTKTpbU10pfSkscy5wb3AoKX19aWYoIWkuaXNPYmplY3QoQSkpdGhyb3cgbmV3IFR5cGVFcnJvcigiZGF0YSBtdXN0IGJlIGFuIG9iamVjdCIpO3JldHVybiBCKEEpLHR9dmFyIHE9d0k7ZnVuY3Rpb24gSHQoQSl7bGV0IHQ9eyIhIjoiJTI1MjEiLCJcJyI6IiUyNTI3IiwiKCI6IiUyNTI4IiwiKSI6IiUyNTI5IiwifiI6IiUyNTdFIiwiJTI1MjAiOiIrIiwiJTI1MDAiOiJcXDAifTtyZXR1cm4gZW5jb2RlVVJJQ29tcG9uZW50KEEpLnJlcGxhY2UoL1shXCcoKX5dfCUyNTIwfCUyNTAwL2csZnVuY3Rpb24oSSl7cmV0dXJuIHRbSV19KX1mdW5jdGlvbiBZdChBLHQpe3RoaXMuX3BhaXJzPVtdLEEmJnEoQSx0aGlzLHQpfXZhciBxdD1ZdC5wcm90b3R5cGU7cXQuYXBwZW5kPWZ1bmN0aW9uKHQsZSl7dGhpcy5fcGFpcnMucHVzaChbdCxlXSl9O3F0LnRvU3RyaW5nPWZ1bmN0aW9uKHQpe2xldCBlPXQ/ZnVuY3Rpb24oSSl7cmV0dXJuIHQuY2FsbCh0aGlzLEksSHQpfTpIdDtyZXR1cm4gdGhpcy5fcGFpcnMubWFwKGZ1bmN0aW9uKHIpe3JldHVybiBlKHJbMF0pKyI9IitlKHJbMV0pfSwiIikuam9pbigiJiIpfTt2YXIgeUE9WXQ7ZnVuY3Rpb24gcEkoQSl7cmV0dXJuIGVuY29kZVVSSUNvbXBvbmVudChBKS5yZXBsYWNlKC8lMjUzQS9naSwiOiIpLnJlcGxhY2UoLyUyNTI0L2csIiQiKS5yZXBsYWNlKC8lMjUyQy9naSwiLCIpLnJlcGxhY2UoLyUyNTIwL2csIisiKS5yZXBsYWNlKC8lMjU1Qi9naSwiWyIpLnJlcGxhY2UoLyUyNTVEL2dpLCJdIil9ZnVuY3Rpb24gdEEoQSx0LGUpe2lmKCF0KXJldHVybiBBO2xldCBJPWUmJmUuZW5jb2RlfHxwSSxyPWUmJmUuc2VyaWFsaXplLG87aWYocj9vPXIodCxlKTpvPWkuaXNVUkxTZWFyY2hQYXJhbXModCk/dC50b1N0cmluZygpOm5ldyB5QSh0LGUpLnRvU3RyaW5nKEkpLG8pe2xldCBnPUEuaW5kZXhPZigiJTIzIik7ZyE9PS0xJiYoQT1BLnNsaWNlKDAsZykpLEErPShBLmluZGV4T2YoIj8iKT09PS0xPyI/IjoiJiIpK299cmV0dXJuIEF9dmFyIFBBPWNsYXNze2NvbnN0cnVjdG9yKCl7dGhpcy5oYW5kbGVycz1bXX11c2UodCxlLEkpe3JldHVybiB0aGlzLmhhbmRsZXJzLnB1c2goe2Z1bGZpbGxlZDp0LHJlamVjdGVkOmUsc3luY2hyb25vdXM6ST9JLnN5bmNocm9ub3VzOiExLHJ1bldoZW46ST9JLnJ1bldoZW46bnVsbH0pLHRoaXMuaGFuZGxlcnMubGVuZ3RoLTF9ZWplY3QodCl7dGhpcy5oYW5kbGVyc1t0XSYmKHRoaXMuaGFuZGxlcnNbdF09bnVsbCl9Y2xlYXIoKXt0aGlzLmhhbmRsZXJzJiYodGhpcy5oYW5kbGVycz1bXSl9Zm9yRWFjaCh0KXtpLmZvckVhY2godGhpcy5oYW5kbGVycyxmdW5jdGlvbihJKXtJIT09bnVsbCYmdChJKX0pfX0sakE9UEE7dmFyIG1BPXtzaWxlbnRKU09OUGFyc2luZzohMCxmb3JjZWRKU09OUGFyc2luZzohMCxjbGFyaWZ5VGltZW91dEVycm9yOiExfTt2YXIgTXQ9dHlwZW9mIFVSTFNlYXJjaFBhcmFtczwidSI/VVJMU2VhcmNoUGFyYW1zOnlBO3ZhciBUdD10eXBlb2YgRm9ybURhdGE8InUiP0Zvcm1EYXRhOm51bGw7dmFyIEt0PXR5cGVvZiBCbG9iPCJ1Ij9CbG9iOm51bGw7dmFyIE90PXtpc0Jyb3dzZXI6ITAsY2xhc3Nlczp7VVJMU2VhcmNoUGFyYW1zOk10LEZvcm1EYXRhOlR0LEJsb2I6S3R9LHByb3RvY29sczpbImh0dHAiLCJodHRwcyIsImZpbGUiLCJibG9iIiwidXJsIiwiZGF0YSJdfTt2YXIgWkE9e307d2UoWkEse2hhc0Jyb3dzZXJFbnY6KCk9PldBLGhhc1N0YW5kYXJkQnJvd3NlckVudjooKT0+U0ksaGFzU3RhbmRhcmRCcm93c2VyV2ViV29ya2VyRW52OigpPT5GSSxvcmlnaW46KCk9PlJJfSk7dmFyIFdBPXR5cGVvZiB3aW5kb3c8InUiJiZ0eXBlb2YgZG9jdW1lbnQ8InUiLFNJPShBPT5XQSYmWyJSZWFjdE5hdGl2ZSIsIk5hdGl2ZVNjcmlwdCIsIk5TIl0uaW5kZXhPZihBKTwwKSh0eXBlb2YgbmF2aWdhdG9yPCJ1IiYmbmF2aWdhdG9yLnByb2R1Y3QpLEZJPXR5cGVvZiBXb3JrZXJHbG9iYWxTY29wZTwidSImJnNlbGYgaW5zdGFuY2VvZiBXb3JrZXJHbG9iYWxTY29wZSYmdHlwZW9mIHNlbGYuaW1wb3J0U2NyaXB0cz09ImZ1bmN0aW9uIixSST1XQSYmd2luZG93LmxvY2F0aW9uLmhyZWZ8fCJodHRwOi8vbG9jYWxob3N0Ijt2YXIgdz17Li4uWkEsLi4uT3R9O2Z1bmN0aW9uIFZBKEEsdCl7cmV0dXJuIHEoQSxuZXcgdy5jbGFzc2VzLlVSTFNlYXJjaFBhcmFtcyxPYmplY3QuYXNzaWduKHt2aXNpdG9yOmZ1bmN0aW9uKGUsSSxyLG8pe3JldHVybiB3LmlzTm9kZSYmaS5pc0J1ZmZlcihlKT8odGhpcy5hcHBlbmQoSSxlLnRvU3RyaW5nKCJiYXNlNjQiKSksITEpOm8uZGVmYXVsdFZpc2l0b3IuYXBwbHkodGhpcyxhcmd1bWVudHMpfX0sdCkpfWZ1bmN0aW9uIE5JKEEpe3JldHVybiBpLm1hdGNoQWxsKC9cXHcrfFxcWyhcXHcqKV0vZyxBKS5tYXAodD0+dFswXT09PSJbXSI/IiI6dFsxXXx8dFswXSl9ZnVuY3Rpb24gVUkoQSl7bGV0IHQ9e30sZT1PYmplY3Qua2V5cyhBKSxJLHI9ZS5sZW5ndGgsbztmb3IoST0wO0k8cjtJKyspbz1lW0ldLHRbb109QVtvXTtyZXR1cm4gdH1mdW5jdGlvbiBHSShBKXtmdW5jdGlvbiB0KGUsSSxyLG8pe2xldCBnPWVbbysrXTtpZihnPT09Il9fcHJvdG9fXyIpcmV0dXJuITA7bGV0IEM9TnVtYmVyLmlzRmluaXRlKCtnKSxRPW8+PWUubGVuZ3RoO3JldHVybiBnPSFnJiZpLmlzQXJyYXkocik/ci5sZW5ndGg6ZyxRPyhpLmhhc093blByb3AocixnKT9yW2ddPVtyW2ddLEldOnJbZ109SSwhQyk6KCghcltnXXx8IWkuaXNPYmplY3QocltnXSkpJiYocltnXT1bXSksdChlLEkscltnXSxvKSYmaS5pc0FycmF5KHJbZ10pJiYocltnXT1VSShyW2ddKSksIUMpfWlmKGkuaXNGb3JtRGF0YShBKSYmaS5pc0Z1bmN0aW9uKEEuZW50cmllcykpe2xldCBlPXt9O3JldHVybiBpLmZvckVhY2hFbnRyeShBLChJLHIpPT57dChOSShJKSxyLGUsMCl9KSxlfXJldHVybiBudWxsfXZhciB3QT1HSTtmdW5jdGlvbiBrSShBLHQsZSl7aWYoaS5pc1N0cmluZyhBKSl0cnl7cmV0dXJuKHR8fEpTT04ucGFyc2UpKEEpLGkudHJpbShBKX1jYXRjaChJKXtpZihJLm5hbWUhPT0iU3ludGF4RXJyb3IiKXRocm93IEl9cmV0dXJuKGV8fEpTT04uc3RyaW5naWZ5KShBKX12YXIgX0E9e3RyYW5zaXRpb25hbDptQSxhZGFwdGVyOlsieGhyIiwiaHR0cCIsImZldGNoIl0sdHJhbnNmb3JtUmVxdWVzdDpbZnVuY3Rpb24odCxlKXtsZXQgST1lLmdldENvbnRlbnRUeXBlKCl8fCIiLHI9SS5pbmRleE9mKCJhcHBsaWNhdGlvbi9qc29uIik+LTEsbz1pLmlzT2JqZWN0KHQpO2lmKG8mJmkuaXNIVE1MRm9ybSh0KSYmKHQ9bmV3IEZvcm1EYXRhKHQpKSxpLmlzRm9ybURhdGEodCkpcmV0dXJuIHI/SlNPTi5zdHJpbmdpZnkod0EodCkpOnQ7aWYoaS5pc0FycmF5QnVmZmVyKHQpfHxpLmlzQnVmZmVyKHQpfHxpLmlzU3RyZWFtKHQpfHxpLmlzRmlsZSh0KXx8aS5pc0Jsb2IodCl8fGkuaXNSZWFkYWJsZVN0cmVhbSh0KSlyZXR1cm4gdDtpZihpLmlzQXJyYXlCdWZmZXJWaWV3KHQpKXJldHVybiB0LmJ1ZmZlcjtpZihpLmlzVVJMU2VhcmNoUGFyYW1zKHQpKXJldHVybiBlLnNldENvbnRlbnRUeXBlKCJhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQ7Y2hhcnNldD11dGYtOCIsITEpLHQudG9TdHJpbmcoKTtsZXQgQztpZihvKXtpZihJLmluZGV4T2YoImFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCIpPi0xKXJldHVybiBWQSh0LHRoaXMuZm9ybVNlcmlhbGl6ZXIpLnRvU3RyaW5nKCk7aWYoKEM9aS5pc0ZpbGVMaXN0KHQpKXx8SS5pbmRleE9mKCJtdWx0aXBhcnQvZm9ybS1kYXRhIik+LTEpe2xldCBRPXRoaXMuZW52JiZ0aGlzLmVudi5Gb3JtRGF0YTtyZXR1cm4gcShDP3siZmlsZXNbXSI6dH06dCxRJiZuZXcgUSx0aGlzLmZvcm1TZXJpYWxpemVyKX19cmV0dXJuIG98fHI/KGUuc2V0Q29udGVudFR5cGUoImFwcGxpY2F0aW9uL2pzb24iLCExKSxrSSh0KSk6dH1dLHRyYW5zZm9ybVJlc3BvbnNlOltmdW5jdGlvbih0KXtsZXQgZT10aGlzLnRyYW5zaXRpb25hbHx8X0EudHJhbnNpdGlvbmFsLEk9ZSYmZS5mb3JjZWRKU09OUGFyc2luZyxyPXRoaXMucmVzcG9uc2VUeXBlPT09Impzb24iO2lmKGkuaXNSZXNwb25zZSh0KXx8aS5pc1JlYWRhYmxlU3RyZWFtKHQpKXJldHVybiB0O2lmKHQmJmkuaXNTdHJpbmcodCkmJihJJiYhdGhpcy5yZXNwb25zZVR5cGV8fHIpKXtsZXQgZz0hKGUmJmUuc2lsZW50SlNPTlBhcnNpbmcpJiZyO3RyeXtyZXR1cm4gSlNPTi5wYXJzZSh0KX1jYXRjaChDKXtpZihnKXRocm93IEMubmFtZT09PSJTeW50YXhFcnJvciI/dS5mcm9tKEMsdS5FUlJfQkFEX1JFU1BPTlNFLHRoaXMsbnVsbCx0aGlzLnJlc3BvbnNlKTpDfX1yZXR1cm4gdH1dLHRpbWVvdXQ6MCx4c3JmQ29va2llTmFtZToiWFNSRi1UT0tFTiIseHNyZkhlYWRlck5hbWU6IlgtWFNSRi1UT0tFTiIsbWF4Q29udGVudExlbmd0aDotMSxtYXhCb2R5TGVuZ3RoOi0xLGVudjp7Rm9ybURhdGE6dy5jbGFzc2VzLkZvcm1EYXRhLEJsb2I6dy5jbGFzc2VzLkJsb2J9LHZhbGlkYXRlU3RhdHVzOmZ1bmN0aW9uKHQpe3JldHVybiB0Pj0yMDAmJnQ8MzAwfSxoZWFkZXJzOntjb21tb246e0FjY2VwdDoiYXBwbGljYXRpb24vanNvbiwgdGV4dC9wbGFpbiwgKi8qIiwiQ29udGVudC1UeXBlIjp2b2lkIDB9fX07aS5mb3JFYWNoKFsiZGVsZXRlIiwiZ2V0IiwiaGVhZCIsInBvc3QiLCJwdXQiLCJwYXRjaCJdLEE9PntfQS5oZWFkZXJzW0FdPXt9fSk7dmFyIFo9X0E7dmFyIExJPWkudG9PYmplY3RTZXQoWyJhZ2UiLCJhdXRob3JpemF0aW9uIiwiY29udGVudC1sZW5ndGgiLCJjb250ZW50LXR5cGUiLCJldGFnIiwiZXhwaXJlcyIsImZyb20iLCJob3N0IiwiaWYtbW9kaWZpZWQtc2luY2UiLCJpZi11bm1vZGlmaWVkLXNpbmNlIiwibGFzdC1tb2RpZmllZCIsImxvY2F0aW9uIiwibWF4LWZvcndhcmRzIiwicHJveHktYXV0aG9yaXphdGlvbiIsInJlZmVyZXIiLCJyZXRyeS1hZnRlciIsInVzZXItYWdlbnQiXSkseHQ9QT0+e2xldCB0PXt9LGUsSSxyO3JldHVybiBBJiZBLnNwbGl0KGAlMEFgKS5mb3JFYWNoKGZ1bmN0aW9uKGcpe3I9Zy5pbmRleE9mKCI6IiksZT1nLnN1YnN0cmluZygwLHIpLnRyaW0oKS50b0xvd2VyQ2FzZSgpLEk9Zy5zdWJzdHJpbmcocisxKS50cmltKCksISghZXx8dFtlXSYmTElbZV0pJiYoZT09PSJzZXQtY29va2llIj90W2VdP3RbZV0ucHVzaChJKTp0W2VdPVtJXTp0W2VdPXRbZV0/dFtlXSsiLCAiK0k6SSl9KSx0fTt2YXIgUHQ9U3ltYm9sKCJpbnRlcm5hbHMiKTtmdW5jdGlvbiBlQShBKXtyZXR1cm4gQSYmU3RyaW5nKEEpLnRyaW0oKS50b0xvd2VyQ2FzZSgpfWZ1bmN0aW9uIHBBKEEpe3JldHVybiBBPT09ITF8fEE9PW51bGw/QTppLmlzQXJyYXkoQSk/QS5tYXAocEEpOlN0cmluZyhBKX1mdW5jdGlvbiBKSShBKXtsZXQgdD1PYmplY3QuY3JlYXRlKG51bGwpLGU9LyhbXlxccyw7PV0rKVxccyooPzo9XFxzKihbXiw7XSspKT8vZyxJO2Zvcig7ST1lLmV4ZWMoQSk7KXRbSVsxXV09SVsyXTtyZXR1cm4gdH12YXIgYkk9QT0+L15bLV9hLXpBLVowLTleYHx+LCElMjMkJSZcJyorLl0rJC8udGVzdChBLnRyaW0oKSk7ZnVuY3Rpb24gWEEoQSx0LGUsSSxyKXtpZihpLmlzRnVuY3Rpb24oSSkpcmV0dXJuIEkuY2FsbCh0aGlzLHQsZSk7aWYociYmKHQ9ZSksISFpLmlzU3RyaW5nKHQpKXtpZihpLmlzU3RyaW5nKEkpKXJldHVybiB0LmluZGV4T2YoSSkhPT0tMTtpZihpLmlzUmVnRXhwKEkpKXJldHVybiBJLnRlc3QodCl9fWZ1bmN0aW9uIEhJKEEpe3JldHVybiBBLnRyaW0oKS50b0xvd2VyQ2FzZSgpLnJlcGxhY2UoLyhbYS16XFxkXSkoXFx3KikvZywodCxlLEkpPT5lLnRvVXBwZXJDYXNlKCkrSSl9ZnVuY3Rpb24gWUkoQSx0KXtsZXQgZT1pLnRvQ2FtZWxDYXNlKCIgIit0KTtbImdldCIsInNldCIsImhhcyJdLmZvckVhY2goST0+e09iamVjdC5kZWZpbmVQcm9wZXJ0eShBLEkrZSx7dmFsdWU6ZnVuY3Rpb24ocixvLGcpe3JldHVybiB0aGlzW0ldLmNhbGwodGhpcyx0LHIsbyxnKX0sY29uZmlndXJhYmxlOiEwfSl9KX12YXIgVj1jbGFzc3tjb25zdHJ1Y3Rvcih0KXt0JiZ0aGlzLnNldCh0KX1zZXQodCxlLEkpe2xldCByPXRoaXM7ZnVuY3Rpb24gbyhDLFEsYSl7bGV0IG49ZUEoUSk7aWYoIW4pdGhyb3cgbmV3IEVycm9yKCJoZWFkZXIgbmFtZSBtdXN0IGJlIGEgbm9uLWVtcHR5IHN0cmluZyIpO2xldCBzPWkuZmluZEtleShyLG4pOyghc3x8cltzXT09PXZvaWQgMHx8YT09PSEwfHxhPT09dm9pZCAwJiZyW3NdIT09ITEpJiYocltzfHxRXT1wQShDKSl9bGV0IGc9KEMsUSk9PmkuZm9yRWFjaChDLChhLG4pPT5vKGEsbixRKSk7aWYoaS5pc1BsYWluT2JqZWN0KHQpfHx0IGluc3RhbmNlb2YgdGhpcy5jb25zdHJ1Y3RvcilnKHQsZSk7ZWxzZSBpZihpLmlzU3RyaW5nKHQpJiYodD10LnRyaW0oKSkmJiFiSSh0KSlnKHh0KHQpLGUpO2Vsc2UgaWYoaS5pc0hlYWRlcnModCkpZm9yKGxldFtDLFFdb2YgdC5lbnRyaWVzKCkpbyhRLEMsSSk7ZWxzZSB0IT1udWxsJiZvKGUsdCxJKTtyZXR1cm4gdGhpc31nZXQodCxlKXtpZih0PWVBKHQpLHQpe2xldCBJPWkuZmluZEtleSh0aGlzLHQpO2lmKEkpe2xldCByPXRoaXNbSV07aWYoIWUpcmV0dXJuIHI7aWYoZT09PSEwKXJldHVybiBKSShyKTtpZihpLmlzRnVuY3Rpb24oZSkpcmV0dXJuIGUuY2FsbCh0aGlzLHIsSSk7aWYoaS5pc1JlZ0V4cChlKSlyZXR1cm4gZS5leGVjKHIpO3Rocm93IG5ldyBUeXBlRXJyb3IoInBhcnNlciBtdXN0IGJlIGJvb2xlYW58cmVnZXhwfGZ1bmN0aW9uIil9fX1oYXModCxlKXtpZih0PWVBKHQpLHQpe2xldCBJPWkuZmluZEtleSh0aGlzLHQpO3JldHVybiEhKEkmJnRoaXNbSV0hPT12b2lkIDAmJighZXx8WEEodGhpcyx0aGlzW0ldLEksZSkpKX1yZXR1cm4hMX1kZWxldGUodCxlKXtsZXQgST10aGlzLHI9ITE7ZnVuY3Rpb24gbyhnKXtpZihnPWVBKGcpLGcpe2xldCBDPWkuZmluZEtleShJLGcpO0MmJighZXx8WEEoSSxJW0NdLEMsZSkpJiYoZGVsZXRlIElbQ10scj0hMCl9fXJldHVybiBpLmlzQXJyYXkodCk/dC5mb3JFYWNoKG8pOm8odCkscn1jbGVhcih0KXtsZXQgZT1PYmplY3Qua2V5cyh0aGlzKSxJPWUubGVuZ3RoLHI9ITE7Zm9yKDtJLS07KXtsZXQgbz1lW0ldOyghdHx8WEEodGhpcyx0aGlzW29dLG8sdCwhMCkpJiYoZGVsZXRlIHRoaXNbb10scj0hMCl9cmV0dXJuIHJ9bm9ybWFsaXplKHQpe2xldCBlPXRoaXMsST17fTtyZXR1cm4gaS5mb3JFYWNoKHRoaXMsKHIsbyk9PntsZXQgZz1pLmZpbmRLZXkoSSxvKTtpZihnKXtlW2ddPXBBKHIpLGRlbGV0ZSBlW29dO3JldHVybn1sZXQgQz10P0hJKG8pOlN0cmluZyhvKS50cmltKCk7QyE9PW8mJmRlbGV0ZSBlW29dLGVbQ109cEEociksSVtDXT0hMH0pLHRoaXN9Y29uY2F0KC4uLnQpe3JldHVybiB0aGlzLmNvbnN0cnVjdG9yLmNvbmNhdCh0aGlzLC4uLnQpfXRvSlNPTih0KXtsZXQgZT1PYmplY3QuY3JlYXRlKG51bGwpO3JldHVybiBpLmZvckVhY2godGhpcywoSSxyKT0+e0khPW51bGwmJkkhPT0hMSYmKGVbcl09dCYmaS5pc0FycmF5KEkpP0kuam9pbigiLCAiKTpJKX0pLGV9W1N5bWJvbC5pdGVyYXRvcl0oKXtyZXR1cm4gT2JqZWN0LmVudHJpZXModGhpcy50b0pTT04oKSlbU3ltYm9sLml0ZXJhdG9yXSgpfXRvU3RyaW5nKCl7cmV0dXJuIE9iamVjdC5lbnRyaWVzKHRoaXMudG9KU09OKCkpLm1hcCgoW3QsZV0pPT50KyI6ICIrZSkuam9pbihgJTBBYCl9Z2V0W1N5bWJvbC50b1N0cmluZ1RhZ10oKXtyZXR1cm4iQXhpb3NIZWFkZXJzIn1zdGF0aWMgZnJvbSh0KXtyZXR1cm4gdCBpbnN0YW5jZW9mIHRoaXM/dDpuZXcgdGhpcyh0KX1zdGF0aWMgY29uY2F0KHQsLi4uZSl7bGV0IEk9bmV3IHRoaXModCk7cmV0dXJuIGUuZm9yRWFjaChyPT5JLnNldChyKSksSX1zdGF0aWMgYWNjZXNzb3IodCl7bGV0IEk9KHRoaXNbUHRdPXRoaXNbUHRdPXthY2Nlc3NvcnM6e319KS5hY2Nlc3NvcnMscj10aGlzLnByb3RvdHlwZTtmdW5jdGlvbiBvKGcpe2xldCBDPWVBKGcpO0lbQ118fChZSShyLGcpLElbQ109ITApfXJldHVybiBpLmlzQXJyYXkodCk/dC5mb3JFYWNoKG8pOm8odCksdGhpc319O1YuYWNjZXNzb3IoWyJDb250ZW50LVR5cGUiLCJDb250ZW50LUxlbmd0aCIsIkFjY2VwdCIsIkFjY2VwdC1FbmNvZGluZyIsIlVzZXItQWdlbnQiLCJBdXRob3JpemF0aW9uIl0pO2kucmVkdWNlRGVzY3JpcHRvcnMoVi5wcm90b3R5cGUsKHt2YWx1ZTpBfSx0KT0+e2xldCBlPXRbMF0udG9VcHBlckNhc2UoKSt0LnNsaWNlKDEpO3JldHVybntnZXQ6KCk9PkEsc2V0KEkpe3RoaXNbZV09SX19fSk7aS5mcmVlemVNZXRob2RzKFYpO3ZhciBtPVY7ZnVuY3Rpb24gSUEoQSx0KXtsZXQgZT10aGlzfHxaLEk9dHx8ZSxyPW0uZnJvbShJLmhlYWRlcnMpLG89SS5kYXRhO3JldHVybiBpLmZvckVhY2goQSxmdW5jdGlvbihDKXtvPUMuY2FsbChlLG8sci5ub3JtYWxpemUoKSx0P3Quc3RhdHVzOnZvaWQgMCl9KSxyLm5vcm1hbGl6ZSgpLG99ZnVuY3Rpb24gckEoQSl7cmV0dXJuISEoQSYmQS5fX0NBTkNFTF9fKX1mdW5jdGlvbiBqdChBLHQsZSl7dS5jYWxsKHRoaXMsQT8/ImNhbmNlbGVkIix1LkVSUl9DQU5DRUxFRCx0LGUpLHRoaXMubmFtZT0iQ2FuY2VsZWRFcnJvciJ9aS5pbmhlcml0cyhqdCx1LHtfX0NBTkNFTF9fOiEwfSk7dmFyIGI9anQ7ZnVuY3Rpb24gb0EoQSx0LGUpe2xldCBJPWUuY29uZmlnLnZhbGlkYXRlU3RhdHVzOyFlLnN0YXR1c3x8IUl8fEkoZS5zdGF0dXMpP0EoZSk6dChuZXcgdSgiUmVxdWVzdCBmYWlsZWQgd2l0aCBzdGF0dXMgY29kZSAiK2Uuc3RhdHVzLFt1LkVSUl9CQURfUkVRVUVTVCx1LkVSUl9CQURfUkVTUE9OU0VdW01hdGguZmxvb3IoZS5zdGF0dXMvMTAwKS00XSxlLmNvbmZpZyxlLnJlcXVlc3QsZSkpfWZ1bmN0aW9uIHpBKEEpe2xldCB0PS9eKFstK1xcd117MSwyNX0pKDo/XFwvXFwvfDopLy5leGVjKEEpO3JldHVybiB0JiZ0WzFdfHwiIn1mdW5jdGlvbiBxSShBLHQpe0E9QXx8MTA7bGV0IGU9bmV3IEFycmF5KEEpLEk9bmV3IEFycmF5KEEpLHI9MCxvPTAsZztyZXR1cm4gdD10IT09dm9pZCAwP3Q6MWUzLGZ1bmN0aW9uKFEpe2xldCBhPURhdGUubm93KCksbj1JW29dO2d8fChnPWEpLGVbcl09USxJW3JdPWE7bGV0IHM9byxmPTA7Zm9yKDtzIT09cjspZis9ZVtzKytdLHM9cyVBO2lmKHI9KHIrMSklQSxyPT09byYmKG89KG8rMSklQSksYS1nPHQpcmV0dXJuO2xldCBCPW4mJmEtbjtyZXR1cm4gQj9NYXRoLnJvdW5kKGYqMWUzL0IpOnZvaWQgMH19dmFyIFd0PXFJO2Z1bmN0aW9uIE1JKEEsdCl7bGV0IGU9MCxJPTFlMy90LHIsbyxnPShhLG49RGF0ZS5ub3coKSk9PntlPW4scj1udWxsLG8mJihjbGVhclRpbWVvdXQobyksbz1udWxsKSxBLmFwcGx5KG51bGwsYSl9O3JldHVyblsoLi4uYSk9PntsZXQgbj1EYXRlLm5vdygpLHM9bi1lO3M+PUk/ZyhhLG4pOihyPWEsb3x8KG89c2V0VGltZW91dCgoKT0+e289bnVsbCxnKHIpfSxJLXMpKSl9LCgpPT5yJiZnKHIpXX12YXIgWnQ9TUk7dmFyIF89KEEsdCxlPTMpPT57bGV0IEk9MCxyPVd0KDUwLDI1MCk7cmV0dXJuIFp0KG89PntsZXQgZz1vLmxvYWRlZCxDPW8ubGVuZ3RoQ29tcHV0YWJsZT9vLnRvdGFsOnZvaWQgMCxRPWctSSxhPXIoUSksbj1nPD1DO0k9ZztsZXQgcz17bG9hZGVkOmcsdG90YWw6Qyxwcm9ncmVzczpDP2cvQzp2b2lkIDAsYnl0ZXM6USxyYXRlOmF8fHZvaWQgMCxlc3RpbWF0ZWQ6YSYmQyYmbj8oQy1nKS9hOnZvaWQgMCxldmVudDpvLGxlbmd0aENvbXB1dGFibGU6QyE9bnVsbCxbdD8iZG93bmxvYWQiOiJ1cGxvYWQiXTohMH07QShzKX0sZSl9LHZBPShBLHQpPT57bGV0IGU9QSE9bnVsbDtyZXR1cm5bST0+dFswXSh7bGVuZ3RoQ29tcHV0YWJsZTplLHRvdGFsOkEsbG9hZGVkOkl9KSx0WzFdXX0sJEE9QT0+KC4uLnQpPT5pLmFzYXAoKCk9PkEoLi4udCkpO3ZhciBWdD13Lmhhc1N0YW5kYXJkQnJvd3NlckVudj9mdW5jdGlvbigpe2xldCB0PS8obXNpZXx0cmlkZW50KS9pLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCksZT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJhIiksSTtmdW5jdGlvbiByKG8pe2xldCBnPW87cmV0dXJuIHQmJihlLnNldEF0dHJpYnV0ZSgiaHJlZiIsZyksZz1lLmhyZWYpLGUuc2V0QXR0cmlidXRlKCJocmVmIixnKSx7aHJlZjplLmhyZWYscHJvdG9jb2w6ZS5wcm90b2NvbD9lLnByb3RvY29sLnJlcGxhY2UoLzokLywiIik6IiIsaG9zdDplLmhvc3Qsc2VhcmNoOmUuc2VhcmNoP2Uuc2VhcmNoLnJlcGxhY2UoL15cXD8vLCIiKToiIixoYXNoOmUuaGFzaD9lLmhhc2gucmVwbGFjZSgvXiUyMy8sIiIpOiIiLGhvc3RuYW1lOmUuaG9zdG5hbWUscG9ydDplLnBvcnQscGF0aG5hbWU6ZS5wYXRobmFtZS5jaGFyQXQoMCk9PT0iLyI/ZS5wYXRobmFtZToiLyIrZS5wYXRobmFtZX19cmV0dXJuIEk9cih3aW5kb3cubG9jYXRpb24uaHJlZiksZnVuY3Rpb24oZyl7bGV0IEM9aS5pc1N0cmluZyhnKT9yKGcpOmc7cmV0dXJuIEMucHJvdG9jb2w9PT1JLnByb3RvY29sJiZDLmhvc3Q9PT1JLmhvc3R9fSgpOmZ1bmN0aW9uKCl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuITB9fSgpO3ZhciBfdD13Lmhhc1N0YW5kYXJkQnJvd3NlckVudj97d3JpdGUoQSx0LGUsSSxyLG8pe2xldCBnPVtBKyI9IitlbmNvZGVVUklDb21wb25lbnQodCldO2kuaXNOdW1iZXIoZSkmJmcucHVzaCgiZXhwaXJlcz0iK25ldyBEYXRlKGUpLnRvR01UU3RyaW5nKCkpLGkuaXNTdHJpbmcoSSkmJmcucHVzaCgicGF0aD0iK0kpLGkuaXNTdHJpbmcocikmJmcucHVzaCgiZG9tYWluPSIrciksbz09PSEwJiZnLnB1c2goInNlY3VyZSIpLGRvY3VtZW50LmNvb2tpZT1nLmpvaW4oIjsgIil9LHJlYWQoQSl7bGV0IHQ9ZG9jdW1lbnQuY29va2llLm1hdGNoKG5ldyBSZWdFeHAoIihefDtcXFxccyopKCIrQSsiKT0oW147XSopIikpO3JldHVybiB0P2RlY29kZVVSSUNvbXBvbmVudCh0WzNdKTpudWxsfSxyZW1vdmUoQSl7dGhpcy53cml0ZShBLCIiLERhdGUubm93KCktODY0ZTUpfX06e3dyaXRlKCl7fSxyZWFkKCl7cmV0dXJuIG51bGx9LHJlbW92ZSgpe319O2Z1bmN0aW9uIEF0KEEpe3JldHVybi9eKFthLXpdW2EtelxcZCtcXC0uXSo6KT9cXC9cXC8vaS50ZXN0KEEpfWZ1bmN0aW9uIHR0KEEsdCl7cmV0dXJuIHQ/QS5yZXBsYWNlKC9cXC8/XFwvJC8sIiIpKyIvIit0LnJlcGxhY2UoL15cXC8rLywiIik6QX1mdW5jdGlvbiBnQShBLHQpe3JldHVybiBBJiYhQXQodCk/dHQoQSx0KTp0fXZhciBYdD1BPT5BIGluc3RhbmNlb2YgbT97Li4uQX06QTtmdW5jdGlvbiBrKEEsdCl7dD10fHx7fTtsZXQgZT17fTtmdW5jdGlvbiBJKGEsbixzKXtyZXR1cm4gaS5pc1BsYWluT2JqZWN0KGEpJiZpLmlzUGxhaW5PYmplY3Qobik/aS5tZXJnZS5jYWxsKHtjYXNlbGVzczpzfSxhLG4pOmkuaXNQbGFpbk9iamVjdChuKT9pLm1lcmdlKHt9LG4pOmkuaXNBcnJheShuKT9uLnNsaWNlKCk6bn1mdW5jdGlvbiByKGEsbixzKXtpZihpLmlzVW5kZWZpbmVkKG4pKXtpZighaS5pc1VuZGVmaW5lZChhKSlyZXR1cm4gSSh2b2lkIDAsYSxzKX1lbHNlIHJldHVybiBJKGEsbixzKX1mdW5jdGlvbiBvKGEsbil7aWYoIWkuaXNVbmRlZmluZWQobikpcmV0dXJuIEkodm9pZCAwLG4pfWZ1bmN0aW9uIGcoYSxuKXtpZihpLmlzVW5kZWZpbmVkKG4pKXtpZighaS5pc1VuZGVmaW5lZChhKSlyZXR1cm4gSSh2b2lkIDAsYSl9ZWxzZSByZXR1cm4gSSh2b2lkIDAsbil9ZnVuY3Rpb24gQyhhLG4scyl7aWYocyBpbiB0KXJldHVybiBJKGEsbik7aWYocyBpbiBBKXJldHVybiBJKHZvaWQgMCxhKX1sZXQgUT17dXJsOm8sbWV0aG9kOm8sZGF0YTpvLGJhc2VVUkw6Zyx0cmFuc2Zvcm1SZXF1ZXN0OmcsdHJhbnNmb3JtUmVzcG9uc2U6ZyxwYXJhbXNTZXJpYWxpemVyOmcsdGltZW91dDpnLHRpbWVvdXRNZXNzYWdlOmcsd2l0aENyZWRlbnRpYWxzOmcsd2l0aFhTUkZUb2tlbjpnLGFkYXB0ZXI6ZyxyZXNwb25zZVR5cGU6Zyx4c3JmQ29va2llTmFtZTpnLHhzcmZIZWFkZXJOYW1lOmcsb25VcGxvYWRQcm9ncmVzczpnLG9uRG93bmxvYWRQcm9ncmVzczpnLGRlY29tcHJlc3M6ZyxtYXhDb250ZW50TGVuZ3RoOmcsbWF4Qm9keUxlbmd0aDpnLGJlZm9yZVJlZGlyZWN0OmcsdHJhbnNwb3J0OmcsaHR0cEFnZW50OmcsaHR0cHNBZ2VudDpnLGNhbmNlbFRva2VuOmcsc29ja2V0UGF0aDpnLHJlc3BvbnNlRW5jb2Rpbmc6Zyx2YWxpZGF0ZVN0YXR1czpDLGhlYWRlcnM6KGEsbik9PnIoWHQoYSksWHQobiksITApfTtyZXR1cm4gaS5mb3JFYWNoKE9iamVjdC5rZXlzKE9iamVjdC5hc3NpZ24oe30sQSx0KSksZnVuY3Rpb24obil7bGV0IHM9UVtuXXx8cixmPXMoQVtuXSx0W25dLG4pO2kuaXNVbmRlZmluZWQoZikmJnMhPT1DfHwoZVtuXT1mKX0pLGV9dmFyIFNBPUE9PntsZXQgdD1rKHt9LEEpLHtkYXRhOmUsd2l0aFhTUkZUb2tlbjpJLHhzcmZIZWFkZXJOYW1lOnIseHNyZkNvb2tpZU5hbWU6byxoZWFkZXJzOmcsYXV0aDpDfT10O3QuaGVhZGVycz1nPW0uZnJvbShnKSx0LnVybD10QShnQSh0LmJhc2VVUkwsdC51cmwpLEEucGFyYW1zLEEucGFyYW1zU2VyaWFsaXplciksQyYmZy5zZXQoIkF1dGhvcml6YXRpb24iLCJCYXNpYyAiK2J0b2EoKEMudXNlcm5hbWV8fCIiKSsiOiIrKEMucGFzc3dvcmQ/dW5lc2NhcGUoZW5jb2RlVVJJQ29tcG9uZW50KEMucGFzc3dvcmQpKToiIikpKTtsZXQgUTtpZihpLmlzRm9ybURhdGEoZSkpe2lmKHcuaGFzU3RhbmRhcmRCcm93c2VyRW52fHx3Lmhhc1N0YW5kYXJkQnJvd3NlcldlYldvcmtlckVudilnLnNldENvbnRlbnRUeXBlKHZvaWQgMCk7ZWxzZSBpZigoUT1nLmdldENvbnRlbnRUeXBlKCkpIT09ITEpe2xldFthLC4uLm5dPVE/US5zcGxpdCgiOyIpLm1hcChzPT5zLnRyaW0oKSkuZmlsdGVyKEJvb2xlYW4pOltdO2cuc2V0Q29udGVudFR5cGUoW2F8fCJtdWx0aXBhcnQvZm9ybS1kYXRhIiwuLi5uXS5qb2luKCI7ICIpKX19aWYody5oYXNTdGFuZGFyZEJyb3dzZXJFbnYmJihJJiZpLmlzRnVuY3Rpb24oSSkmJihJPUkodCkpLEl8fEkhPT0hMSYmVnQodC51cmwpKSl7bGV0IGE9ciYmbyYmX3QucmVhZChvKTthJiZnLnNldChyLGEpfXJldHVybiB0fTt2YXIgVEk9dHlwZW9mIFhNTEh0dHBSZXF1ZXN0PCJ1Iix6dD1USSYmZnVuY3Rpb24oQSl7cmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKGUsSSl7bGV0IHI9U0EoQSksbz1yLmRhdGEsZz1tLmZyb20oci5oZWFkZXJzKS5ub3JtYWxpemUoKSx7cmVzcG9uc2VUeXBlOkMsb25VcGxvYWRQcm9ncmVzczpRLG9uRG93bmxvYWRQcm9ncmVzczphfT1yLG4scyxmLEIsRTtmdW5jdGlvbiBsKCl7QiYmQigpLEUmJkUoKSxyLmNhbmNlbFRva2VuJiZyLmNhbmNlbFRva2VuLnVuc3Vic2NyaWJlKG4pLHIuc2lnbmFsJiZyLnNpZ25hbC5yZW1vdmVFdmVudExpc3RlbmVyKCJhYm9ydCIsbil9bGV0IGM9bmV3IFhNTEh0dHBSZXF1ZXN0O2Mub3BlbihyLm1ldGhvZC50b1VwcGVyQ2FzZSgpLHIudXJsLCEwKSxjLnRpbWVvdXQ9ci50aW1lb3V0O2Z1bmN0aW9uIHAoKXtpZighYylyZXR1cm47bGV0IEQ9bS5mcm9tKCJnZXRBbGxSZXNwb25zZUhlYWRlcnMiaW4gYyYmYy5nZXRBbGxSZXNwb25zZUhlYWRlcnMoKSksSz17ZGF0YTohQ3x8Qz09PSJ0ZXh0Inx8Qz09PSJqc29uIj9jLnJlc3BvbnNlVGV4dDpjLnJlc3BvbnNlLHN0YXR1czpjLnN0YXR1cyxzdGF0dXNUZXh0OmMuc3RhdHVzVGV4dCxoZWFkZXJzOkQsY29uZmlnOkEscmVxdWVzdDpjfTtvQShmdW5jdGlvbihKKXtlKEopLGwoKX0sZnVuY3Rpb24oSil7SShKKSxsKCl9LEspLGM9bnVsbH0ib25sb2FkZW5kImluIGM/Yy5vbmxvYWRlbmQ9cDpjLm9ucmVhZHlzdGF0ZWNoYW5nZT1mdW5jdGlvbigpeyFjfHxjLnJlYWR5U3RhdGUhPT00fHxjLnN0YXR1cz09PTAmJiEoYy5yZXNwb25zZVVSTCYmYy5yZXNwb25zZVVSTC5pbmRleE9mKCJmaWxlOiIpPT09MCl8fHNldFRpbWVvdXQocCl9LGMub25hYm9ydD1mdW5jdGlvbigpe2MmJihJKG5ldyB1KCJSZXF1ZXN0IGFib3J0ZWQiLHUuRUNPTk5BQk9SVEVELEEsYykpLGM9bnVsbCl9LGMub25lcnJvcj1mdW5jdGlvbigpe0kobmV3IHUoIk5ldHdvcmsgRXJyb3IiLHUuRVJSX05FVFdPUkssQSxjKSksYz1udWxsfSxjLm9udGltZW91dD1mdW5jdGlvbigpe2xldCBVPXIudGltZW91dD8idGltZW91dCBvZiAiK3IudGltZW91dCsibXMgZXhjZWVkZWQiOiJ0aW1lb3V0IGV4Y2VlZGVkIixLPXIudHJhbnNpdGlvbmFsfHxtQTtyLnRpbWVvdXRFcnJvck1lc3NhZ2UmJihVPXIudGltZW91dEVycm9yTWVzc2FnZSksSShuZXcgdShVLEsuY2xhcmlmeVRpbWVvdXRFcnJvcj91LkVUSU1FRE9VVDp1LkVDT05OQUJPUlRFRCxBLGMpKSxjPW51bGx9LG89PT12b2lkIDAmJmcuc2V0Q29udGVudFR5cGUobnVsbCksInNldFJlcXVlc3RIZWFkZXIiaW4gYyYmaS5mb3JFYWNoKGcudG9KU09OKCksZnVuY3Rpb24oVSxLKXtjLnNldFJlcXVlc3RIZWFkZXIoSyxVKX0pLGkuaXNVbmRlZmluZWQoci53aXRoQ3JlZGVudGlhbHMpfHwoYy53aXRoQ3JlZGVudGlhbHM9ISFyLndpdGhDcmVkZW50aWFscyksQyYmQyE9PSJqc29uIiYmKGMucmVzcG9uc2VUeXBlPXIucmVzcG9uc2VUeXBlKSxhJiYoW2YsRV09XyhhLCEwKSxjLmFkZEV2ZW50TGlzdGVuZXIoInByb2dyZXNzIixmKSksUSYmYy51cGxvYWQmJihbcyxCXT1fKFEpLGMudXBsb2FkLmFkZEV2ZW50TGlzdGVuZXIoInByb2dyZXNzIixzKSxjLnVwbG9hZC5hZGRFdmVudExpc3RlbmVyKCJsb2FkZW5kIixCKSksKHIuY2FuY2VsVG9rZW58fHIuc2lnbmFsKSYmKG49RD0+e2MmJihJKCFEfHxELnR5cGU/bmV3IGIobnVsbCxBLGMpOkQpLGMuYWJvcnQoKSxjPW51bGwpfSxyLmNhbmNlbFRva2VuJiZyLmNhbmNlbFRva2VuLnN1YnNjcmliZShuKSxyLnNpZ25hbCYmKHIuc2lnbmFsLmFib3J0ZWQ/bigpOnIuc2lnbmFsLmFkZEV2ZW50TGlzdGVuZXIoImFib3J0IixuKSkpO2xldCBTPXpBKHIudXJsKTtpZihTJiZ3LnByb3RvY29scy5pbmRleE9mKFMpPT09LTEpe0kobmV3IHUoIlVuc3VwcG9ydGVkIHByb3RvY29sICIrUysiOiIsdS5FUlJfQkFEX1JFUVVFU1QsQSkpO3JldHVybn1jLnNlbmQob3x8bnVsbCl9KX07dmFyIEtJPShBLHQpPT57bGV0IGU9bmV3IEFib3J0Q29udHJvbGxlcixJLHI9ZnVuY3Rpb24oUSl7aWYoIUkpe0k9ITAsZygpO2xldCBhPVEgaW5zdGFuY2VvZiBFcnJvcj9ROnRoaXMucmVhc29uO2UuYWJvcnQoYSBpbnN0YW5jZW9mIHU/YTpuZXcgYihhIGluc3RhbmNlb2YgRXJyb3I/YS5tZXNzYWdlOmEpKX19LG89dCYmc2V0VGltZW91dCgoKT0+e3IobmV3IHUoYHRpbWVvdXQgJHt0fSBvZiBtcyBleGNlZWRlZGAsdS5FVElNRURPVVQpKX0sdCksZz0oKT0+e0EmJihvJiZjbGVhclRpbWVvdXQobyksbz1udWxsLEEuZm9yRWFjaChRPT57USYmKFEucmVtb3ZlRXZlbnRMaXN0ZW5lcj9RLnJlbW92ZUV2ZW50TGlzdGVuZXIoImFib3J0IixyKTpRLnVuc3Vic2NyaWJlKHIpKX0pLEE9bnVsbCl9O0EuZm9yRWFjaChRPT5RJiZRLmFkZEV2ZW50TGlzdGVuZXImJlEuYWRkRXZlbnRMaXN0ZW5lcigiYWJvcnQiLHIpKTtsZXR7c2lnbmFsOkN9PWU7cmV0dXJuIEMudW5zdWJzY3JpYmU9ZyxbQywoKT0+e28mJmNsZWFyVGltZW91dChvKSxvPW51bGx9XX0sdnQ9S0k7dmFyIE9JPWZ1bmN0aW9uKihBLHQpe2xldCBlPUEuYnl0ZUxlbmd0aDtpZighdHx8ZTx0KXt5aWVsZCBBO3JldHVybn1sZXQgST0wLHI7Zm9yKDtJPGU7KXI9SSt0LHlpZWxkIEEuc2xpY2UoSSxyKSxJPXJ9LHhJPWFzeW5jIGZ1bmN0aW9uKihBLHQsZSl7Zm9yIGF3YWl0KGxldCBJIG9mIEEpeWllbGQqT0koQXJyYXlCdWZmZXIuaXNWaWV3KEkpP0k6YXdhaXQgZShTdHJpbmcoSSkpLHQpfSxldD0oQSx0LGUsSSxyKT0+e2xldCBvPXhJKEEsdCxyKSxnPTAsQyxRPWE9PntDfHwoQz0hMCxJJiZJKGEpKX07cmV0dXJuIG5ldyBSZWFkYWJsZVN0cmVhbSh7YXN5bmMgcHVsbChhKXt0cnl7bGV0e2RvbmU6bix2YWx1ZTpzfT1hd2FpdCBvLm5leHQoKTtpZihuKXtRKCksYS5jbG9zZSgpO3JldHVybn1sZXQgZj1zLmJ5dGVMZW5ndGg7aWYoZSl7bGV0IEI9Zys9ZjtlKEIpfWEuZW5xdWV1ZShuZXcgVWludDhBcnJheShzKSl9Y2F0Y2gobil7dGhyb3cgUShuKSxufX0sY2FuY2VsKGEpe3JldHVybiBRKGEpLG8ucmV0dXJuKCl9fSx7aGlnaFdhdGVyTWFyazoyfSl9O3ZhciBSQT10eXBlb2YgZmV0Y2g9PSJmdW5jdGlvbiImJnR5cGVvZiBSZXF1ZXN0PT0iZnVuY3Rpb24iJiZ0eXBlb2YgUmVzcG9uc2U9PSJmdW5jdGlvbiIsQWU9UkEmJnR5cGVvZiBSZWFkYWJsZVN0cmVhbT09ImZ1bmN0aW9uIixJdD1SQSYmKHR5cGVvZiBUZXh0RW5jb2Rlcj09ImZ1bmN0aW9uIj8oQT0+dD0+QS5lbmNvZGUodCkpKG5ldyBUZXh0RW5jb2Rlcik6YXN5bmMgQT0+bmV3IFVpbnQ4QXJyYXkoYXdhaXQgbmV3IFJlc3BvbnNlKEEpLmFycmF5QnVmZmVyKCkpKSx0ZT0oQSwuLi50KT0+e3RyeXtyZXR1cm4hIUEoLi4udCl9Y2F0Y2h7cmV0dXJuITF9fSxQST1BZSYmdGUoKCk9PntsZXQgQT0hMSx0PW5ldyBSZXF1ZXN0KHcub3JpZ2luLHtib2R5Om5ldyBSZWFkYWJsZVN0cmVhbSxtZXRob2Q6IlBPU1QiLGdldCBkdXBsZXgoKXtyZXR1cm4gQT0hMCwiaGFsZiJ9fSkuaGVhZGVycy5oYXMoIkNvbnRlbnQtVHlwZSIpO3JldHVybiBBJiYhdH0pLCR0PTY0KjEwMjQscnQ9QWUmJnRlKCgpPT5pLmlzUmVhZGFibGVTdHJlYW0obmV3IFJlc3BvbnNlKCIiKS5ib2R5KSksRkE9e3N0cmVhbTpydCYmKEE9PkEuYm9keSl9O1JBJiYoQT0+e1sidGV4dCIsImFycmF5QnVmZmVyIiwiYmxvYiIsImZvcm1EYXRhIiwic3RyZWFtIl0uZm9yRWFjaCh0PT57IUZBW3RdJiYoRkFbdF09aS5pc0Z1bmN0aW9uKEFbdF0pP2U9PmVbdF0oKTooZSxJKT0+e3Rocm93IG5ldyB1KGBSZXNwb25zZSB0eXBlIFwnJHt0fVwnIGlzIG5vdCBzdXBwb3J0ZWRgLHUuRVJSX05PVF9TVVBQT1JULEkpfSl9KX0pKG5ldyBSZXNwb25zZSk7dmFyIGpJPWFzeW5jIEE9PntpZihBPT1udWxsKXJldHVybiAwO2lmKGkuaXNCbG9iKEEpKXJldHVybiBBLnNpemU7aWYoaS5pc1NwZWNDb21wbGlhbnRGb3JtKEEpKXJldHVybihhd2FpdCBuZXcgUmVxdWVzdChBKS5hcnJheUJ1ZmZlcigpKS5ieXRlTGVuZ3RoO2lmKGkuaXNBcnJheUJ1ZmZlclZpZXcoQSl8fGkuaXNBcnJheUJ1ZmZlcihBKSlyZXR1cm4gQS5ieXRlTGVuZ3RoO2lmKGkuaXNVUkxTZWFyY2hQYXJhbXMoQSkmJihBPUErIiIpLGkuaXNTdHJpbmcoQSkpcmV0dXJuKGF3YWl0IEl0KEEpKS5ieXRlTGVuZ3RofSxXST1hc3luYyhBLHQpPT57bGV0IGU9aS50b0Zpbml0ZU51bWJlcihBLmdldENvbnRlbnRMZW5ndGgoKSk7cmV0dXJuIGU/P2pJKHQpfSxlZT1SQSYmKGFzeW5jIEE9PntsZXR7dXJsOnQsbWV0aG9kOmUsZGF0YTpJLHNpZ25hbDpyLGNhbmNlbFRva2VuOm8sdGltZW91dDpnLG9uRG93bmxvYWRQcm9ncmVzczpDLG9uVXBsb2FkUHJvZ3Jlc3M6USxyZXNwb25zZVR5cGU6YSxoZWFkZXJzOm4sd2l0aENyZWRlbnRpYWxzOnM9InNhbWUtb3JpZ2luIixmZXRjaE9wdGlvbnM6Zn09U0EoQSk7YT1hPyhhKyIiKS50b0xvd2VyQ2FzZSgpOiJ0ZXh0IjtsZXRbQixFXT1yfHxvfHxnP3Z0KFtyLG9dLGcpOltdLGwsYyxwPSgpPT57IWwmJnNldFRpbWVvdXQoKCk9PntCJiZCLnVuc3Vic2NyaWJlKCl9KSxsPSEwfSxTO3RyeXtpZihRJiZQSSYmZSE9PSJnZXQiJiZlIT09ImhlYWQiJiYoUz1hd2FpdCBXSShuLEkpKSE9PTApe2xldCBMPW5ldyBSZXF1ZXN0KHQse21ldGhvZDoiUE9TVCIsYm9keTpJLGR1cGxleDoiaGFsZiJ9KSxKO2lmKGkuaXNGb3JtRGF0YShJKSYmKEo9TC5oZWFkZXJzLmdldCgiY29udGVudC10eXBlIikpJiZuLnNldENvbnRlbnRUeXBlKEopLEwuYm9keSl7bGV0W0hBLENBXT12QShTLF8oJEEoUSkpKTtJPWV0KEwuYm9keSwkdCxIQSxDQSxJdCl9fWkuaXNTdHJpbmcocyl8fChzPXM/ImluY2x1ZGUiOiJvbWl0IiksYz1uZXcgUmVxdWVzdCh0LHsuLi5mLHNpZ25hbDpCLG1ldGhvZDplLnRvVXBwZXJDYXNlKCksaGVhZGVyczpuLm5vcm1hbGl6ZSgpLnRvSlNPTigpLGJvZHk6SSxkdXBsZXg6ImhhbGYiLGNyZWRlbnRpYWxzOnN9KTtsZXQgRD1hd2FpdCBmZXRjaChjKSxVPXJ0JiYoYT09PSJzdHJlYW0ifHxhPT09InJlc3BvbnNlIik7aWYocnQmJihDfHxVKSl7bGV0IEw9e307WyJzdGF0dXMiLCJzdGF0dXNUZXh0IiwiaGVhZGVycyJdLmZvckVhY2goRXQ9PntMW0V0XT1EW0V0XX0pO2xldCBKPWkudG9GaW5pdGVOdW1iZXIoRC5oZWFkZXJzLmdldCgiY29udGVudC1sZW5ndGgiKSksW0hBLENBXT1DJiZ2QShKLF8oJEEoQyksITApKXx8W107RD1uZXcgUmVzcG9uc2UoZXQoRC5ib2R5LCR0LEhBLCgpPT57Q0EmJkNBKCksVSYmcCgpfSxJdCksTCl9YT1hfHwidGV4dCI7bGV0IEs9YXdhaXQgRkFbaS5maW5kS2V5KEZBLGEpfHwidGV4dCJdKEQsQSk7cmV0dXJuIVUmJnAoKSxFJiZFKCksYXdhaXQgbmV3IFByb21pc2UoKEwsSik9PntvQShMLEose2RhdGE6SyxoZWFkZXJzOm0uZnJvbShELmhlYWRlcnMpLHN0YXR1czpELnN0YXR1cyxzdGF0dXNUZXh0OkQuc3RhdHVzVGV4dCxjb25maWc6QSxyZXF1ZXN0OmN9KX0pfWNhdGNoKEQpe3Rocm93IHAoKSxEJiZELm5hbWU9PT0iVHlwZUVycm9yIiYmL2ZldGNoL2kudGVzdChELm1lc3NhZ2UpP09iamVjdC5hc3NpZ24obmV3IHUoIk5ldHdvcmsgRXJyb3IiLHUuRVJSX05FVFdPUkssQSxjKSx7Y2F1c2U6RC5jYXVzZXx8RH0pOnUuZnJvbShELEQmJkQuY29kZSxBLGMpfX0pO3ZhciBvdD17aHR0cDpkQSx4aHI6enQsZmV0Y2g6ZWV9O2kuZm9yRWFjaChvdCwoQSx0KT0+e2lmKEEpe3RyeXtPYmplY3QuZGVmaW5lUHJvcGVydHkoQSwibmFtZSIse3ZhbHVlOnR9KX1jYXRjaHt9T2JqZWN0LmRlZmluZVByb3BlcnR5KEEsImFkYXB0ZXJOYW1lIix7dmFsdWU6dH0pfX0pO3ZhciBJZT1BPT5gLSAke0F9YCxaST1BPT5pLmlzRnVuY3Rpb24oQSl8fEE9PT1udWxsfHxBPT09ITEsTkE9e2dldEFkYXB0ZXI6QT0+e0E9aS5pc0FycmF5KEEpP0E6W0FdO2xldHtsZW5ndGg6dH09QSxlLEkscj17fTtmb3IobGV0IG89MDtvPHQ7bysrKXtlPUFbb107bGV0IGc7aWYoST1lLCFaSShlKSYmKEk9b3RbKGc9U3RyaW5nKGUpKS50b0xvd2VyQ2FzZSgpXSxJPT09dm9pZCAwKSl0aHJvdyBuZXcgdShgVW5rbm93biBhZGFwdGVyIFwnJHtnfVwnYCk7aWYoSSlicmVhaztyW2d8fCIlMjMiK29dPUl9aWYoIUkpe2xldCBvPU9iamVjdC5lbnRyaWVzKHIpLm1hcCgoW0MsUV0pPT5gYWRhcHRlciAke0N9IGArKFE9PT0hMT8iaXMgbm90IHN1cHBvcnRlZCBieSB0aGUgZW52aXJvbm1lbnQiOiJpcyBub3QgYXZhaWxhYmxlIGluIHRoZSBidWlsZCIpKSxnPXQ/by5sZW5ndGg+MT9gc2luY2UgOiUwQWArby5tYXAoSWUpLmpvaW4oYCUwQWApOiIgIitJZShvWzBdKToiYXMgbm8gYWRhcHRlciBzcGVjaWZpZWQiO3Rocm93IG5ldyB1KCJUaGVyZSBpcyBubyBzdWl0YWJsZSBhZGFwdGVyIHRvIGRpc3BhdGNoIHRoZSByZXF1ZXN0ICIrZywiRVJSX05PVF9TVVBQT1JUIil9cmV0dXJuIEl9LGFkYXB0ZXJzOm90fTtmdW5jdGlvbiBndChBKXtpZihBLmNhbmNlbFRva2VuJiZBLmNhbmNlbFRva2VuLnRocm93SWZSZXF1ZXN0ZWQoKSxBLnNpZ25hbCYmQS5zaWduYWwuYWJvcnRlZCl0aHJvdyBuZXcgYihudWxsLEEpfWZ1bmN0aW9uIFVBKEEpe3JldHVybiBndChBKSxBLmhlYWRlcnM9bS5mcm9tKEEuaGVhZGVycyksQS5kYXRhPUlBLmNhbGwoQSxBLnRyYW5zZm9ybVJlcXVlc3QpLFsicG9zdCIsInB1dCIsInBhdGNoIl0uaW5kZXhPZihBLm1ldGhvZCkhPT0tMSYmQS5oZWFkZXJzLnNldENvbnRlbnRUeXBlKCJhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQiLCExKSxOQS5nZXRBZGFwdGVyKEEuYWRhcHRlcnx8Wi5hZGFwdGVyKShBKS50aGVuKGZ1bmN0aW9uKEkpe3JldHVybiBndChBKSxJLmRhdGE9SUEuY2FsbChBLEEudHJhbnNmb3JtUmVzcG9uc2UsSSksSS5oZWFkZXJzPW0uZnJvbShJLmhlYWRlcnMpLEl9LGZ1bmN0aW9uKEkpe3JldHVybiByQShJKXx8KGd0KEEpLEkmJkkucmVzcG9uc2UmJihJLnJlc3BvbnNlLmRhdGE9SUEuY2FsbChBLEEudHJhbnNmb3JtUmVzcG9uc2UsSS5yZXNwb25zZSksSS5yZXNwb25zZS5oZWFkZXJzPW0uZnJvbShJLnJlc3BvbnNlLmhlYWRlcnMpKSksUHJvbWlzZS5yZWplY3QoSSl9KX12YXIgR0E9IjEuNy40Ijt2YXIgaXQ9e307WyJvYmplY3QiLCJib29sZWFuIiwibnVtYmVyIiwiZnVuY3Rpb24iLCJzdHJpbmciLCJzeW1ib2wiXS5mb3JFYWNoKChBLHQpPT57aXRbQV09ZnVuY3Rpb24oSSl7cmV0dXJuIHR5cGVvZiBJPT09QXx8ImEiKyh0PDE/Im4gIjoiICIpK0F9fSk7dmFyIHJlPXt9O2l0LnRyYW5zaXRpb25hbD1mdW5jdGlvbih0LGUsSSl7ZnVuY3Rpb24gcihvLGcpe3JldHVybiJbQXhpb3MgdiIrR0ErIl0gVHJhbnNpdGlvbmFsIG9wdGlvbiBcJyIrbysiXCciK2crKEk/Ii4gIitJOiIiKX1yZXR1cm4obyxnLEMpPT57aWYodD09PSExKXRocm93IG5ldyB1KHIoZywiIGhhcyBiZWVuIHJlbW92ZWQiKyhlPyIgaW4gIitlOiIiKSksdS5FUlJfREVQUkVDQVRFRCk7cmV0dXJuIGUmJiFyZVtnXSYmKHJlW2ddPSEwLGNvbnNvbGUud2FybihyKGcsIiBoYXMgYmVlbiBkZXByZWNhdGVkIHNpbmNlIHYiK2UrIiBhbmQgd2lsbCBiZSByZW1vdmVkIGluIHRoZSBuZWFyIGZ1dHVyZSIpKSksdD90KG8sZyxDKTohMH19O2Z1bmN0aW9uIFZJKEEsdCxlKXtpZih0eXBlb2YgQSE9Im9iamVjdCIpdGhyb3cgbmV3IHUoIm9wdGlvbnMgbXVzdCBiZSBhbiBvYmplY3QiLHUuRVJSX0JBRF9PUFRJT05fVkFMVUUpO2xldCBJPU9iamVjdC5rZXlzKEEpLHI9SS5sZW5ndGg7Zm9yKDtyLS0gPjA7KXtsZXQgbz1JW3JdLGc9dFtvXTtpZihnKXtsZXQgQz1BW29dLFE9Qz09PXZvaWQgMHx8ZyhDLG8sQSk7aWYoUSE9PSEwKXRocm93IG5ldyB1KCJvcHRpb24gIitvKyIgbXVzdCBiZSAiK1EsdS5FUlJfQkFEX09QVElPTl9WQUxVRSk7Y29udGludWV9aWYoZSE9PSEwKXRocm93IG5ldyB1KCJVbmtub3duIG9wdGlvbiAiK28sdS5FUlJfQkFEX09QVElPTil9fXZhciBrQT17YXNzZXJ0T3B0aW9uczpWSSx2YWxpZGF0b3JzOml0fTt2YXIgTT1rQS52YWxpZGF0b3JzLFg9Y2xhc3N7Y29uc3RydWN0b3IodCl7dGhpcy5kZWZhdWx0cz10LHRoaXMuaW50ZXJjZXB0b3JzPXtyZXF1ZXN0Om5ldyBqQSxyZXNwb25zZTpuZXcgakF9fWFzeW5jIHJlcXVlc3QodCxlKXt0cnl7cmV0dXJuIGF3YWl0IHRoaXMuX3JlcXVlc3QodCxlKX1jYXRjaChJKXtpZihJIGluc3RhbmNlb2YgRXJyb3Ipe2xldCByO0Vycm9yLmNhcHR1cmVTdGFja1RyYWNlP0Vycm9yLmNhcHR1cmVTdGFja1RyYWNlKHI9e30pOnI9bmV3IEVycm9yO2xldCBvPXIuc3RhY2s/ci5zdGFjay5yZXBsYWNlKC9eLitcXG4vLCIiKToiIjt0cnl7SS5zdGFjaz9vJiYhU3RyaW5nKEkuc3RhY2spLmVuZHNXaXRoKG8ucmVwbGFjZSgvXi4rXFxuLitcXG4vLCIiKSkmJihJLnN0YWNrKz1gJTBBYCtvKTpJLnN0YWNrPW99Y2F0Y2h7fX10aHJvdyBJfX1fcmVxdWVzdCh0LGUpe3R5cGVvZiB0PT0ic3RyaW5nIj8oZT1lfHx7fSxlLnVybD10KTplPXR8fHt9LGU9ayh0aGlzLmRlZmF1bHRzLGUpO2xldHt0cmFuc2l0aW9uYWw6SSxwYXJhbXNTZXJpYWxpemVyOnIsaGVhZGVyczpvfT1lO0khPT12b2lkIDAmJmtBLmFzc2VydE9wdGlvbnMoSSx7c2lsZW50SlNPTlBhcnNpbmc6TS50cmFuc2l0aW9uYWwoTS5ib29sZWFuKSxmb3JjZWRKU09OUGFyc2luZzpNLnRyYW5zaXRpb25hbChNLmJvb2xlYW4pLGNsYXJpZnlUaW1lb3V0RXJyb3I6TS50cmFuc2l0aW9uYWwoTS5ib29sZWFuKX0sITEpLHIhPW51bGwmJihpLmlzRnVuY3Rpb24ocik/ZS5wYXJhbXNTZXJpYWxpemVyPXtzZXJpYWxpemU6cn06a0EuYXNzZXJ0T3B0aW9ucyhyLHtlbmNvZGU6TS5mdW5jdGlvbixzZXJpYWxpemU6TS5mdW5jdGlvbn0sITApKSxlLm1ldGhvZD0oZS5tZXRob2R8fHRoaXMuZGVmYXVsdHMubWV0aG9kfHwiZ2V0IikudG9Mb3dlckNhc2UoKTtsZXQgZz1vJiZpLm1lcmdlKG8uY29tbW9uLG9bZS5tZXRob2RdKTtvJiZpLmZvckVhY2goWyJkZWxldGUiLCJnZXQiLCJoZWFkIiwicG9zdCIsInB1dCIsInBhdGNoIiwiY29tbW9uIl0sRT0+e2RlbGV0ZSBvW0VdfSksZS5oZWFkZXJzPW0uY29uY2F0KGcsbyk7bGV0IEM9W10sUT0hMDt0aGlzLmludGVyY2VwdG9ycy5yZXF1ZXN0LmZvckVhY2goZnVuY3Rpb24obCl7dHlwZW9mIGwucnVuV2hlbj09ImZ1bmN0aW9uIiYmbC5ydW5XaGVuKGUpPT09ITF8fChRPVEmJmwuc3luY2hyb25vdXMsQy51bnNoaWZ0KGwuZnVsZmlsbGVkLGwucmVqZWN0ZWQpKX0pO2xldCBhPVtdO3RoaXMuaW50ZXJjZXB0b3JzLnJlc3BvbnNlLmZvckVhY2goZnVuY3Rpb24obCl7YS5wdXNoKGwuZnVsZmlsbGVkLGwucmVqZWN0ZWQpfSk7bGV0IG4scz0wLGY7aWYoIVEpe2xldCBFPVtVQS5iaW5kKHRoaXMpLHZvaWQgMF07Zm9yKEUudW5zaGlmdC5hcHBseShFLEMpLEUucHVzaC5hcHBseShFLGEpLGY9RS5sZW5ndGgsbj1Qcm9taXNlLnJlc29sdmUoZSk7czxmOyluPW4udGhlbihFW3MrK10sRVtzKytdKTtyZXR1cm4gbn1mPUMubGVuZ3RoO2xldCBCPWU7Zm9yKHM9MDtzPGY7KXtsZXQgRT1DW3MrK10sbD1DW3MrK107dHJ5e0I9RShCKX1jYXRjaChjKXtsLmNhbGwodGhpcyxjKTticmVha319dHJ5e249VUEuY2FsbCh0aGlzLEIpfWNhdGNoKEUpe3JldHVybiBQcm9taXNlLnJlamVjdChFKX1mb3Iocz0wLGY9YS5sZW5ndGg7czxmOyluPW4udGhlbihhW3MrK10sYVtzKytdKTtyZXR1cm4gbn1nZXRVcmkodCl7dD1rKHRoaXMuZGVmYXVsdHMsdCk7bGV0IGU9Z0EodC5iYXNlVVJMLHQudXJsKTtyZXR1cm4gdEEoZSx0LnBhcmFtcyx0LnBhcmFtc1NlcmlhbGl6ZXIpfX07aS5mb3JFYWNoKFsiZGVsZXRlIiwiZ2V0IiwiaGVhZCIsIm9wdGlvbnMiXSxmdW5jdGlvbih0KXtYLnByb3RvdHlwZVt0XT1mdW5jdGlvbihlLEkpe3JldHVybiB0aGlzLnJlcXVlc3QoayhJfHx7fSx7bWV0aG9kOnQsdXJsOmUsZGF0YTooSXx8e30pLmRhdGF9KSl9fSk7aS5mb3JFYWNoKFsicG9zdCIsInB1dCIsInBhdGNoIl0sZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShJKXtyZXR1cm4gZnVuY3Rpb24obyxnLEMpe3JldHVybiB0aGlzLnJlcXVlc3QoayhDfHx7fSx7bWV0aG9kOnQsaGVhZGVyczpJP3siQ29udGVudC1UeXBlIjoibXVsdGlwYXJ0L2Zvcm0tZGF0YSJ9Ont9LHVybDpvLGRhdGE6Z30pKX19WC5wcm90b3R5cGVbdF09ZSgpLFgucHJvdG90eXBlW3QrIkZvcm0iXT1lKCEwKX0pO3ZhciBpQT1YO3ZhciBudD1jbGFzcyBBe2NvbnN0cnVjdG9yKHQpe2lmKHR5cGVvZiB0IT0iZnVuY3Rpb24iKXRocm93IG5ldyBUeXBlRXJyb3IoImV4ZWN1dG9yIG11c3QgYmUgYSBmdW5jdGlvbi4iKTtsZXQgZTt0aGlzLnByb21pc2U9bmV3IFByb21pc2UoZnVuY3Rpb24obyl7ZT1vfSk7bGV0IEk9dGhpczt0aGlzLnByb21pc2UudGhlbihyPT57aWYoIUkuX2xpc3RlbmVycylyZXR1cm47bGV0IG89SS5fbGlzdGVuZXJzLmxlbmd0aDtmb3IoO28tLSA+MDspSS5fbGlzdGVuZXJzW29dKHIpO0kuX2xpc3RlbmVycz1udWxsfSksdGhpcy5wcm9taXNlLnRoZW49cj0+e2xldCBvLGc9bmV3IFByb21pc2UoQz0+e0kuc3Vic2NyaWJlKEMpLG89Q30pLnRoZW4ocik7cmV0dXJuIGcuY2FuY2VsPWZ1bmN0aW9uKCl7SS51bnN1YnNjcmliZShvKX0sZ30sdChmdW5jdGlvbihvLGcsQyl7SS5yZWFzb258fChJLnJlYXNvbj1uZXcgYihvLGcsQyksZShJLnJlYXNvbikpfSl9dGhyb3dJZlJlcXVlc3RlZCgpe2lmKHRoaXMucmVhc29uKXRocm93IHRoaXMucmVhc29ufXN1YnNjcmliZSh0KXtpZih0aGlzLnJlYXNvbil7dCh0aGlzLnJlYXNvbik7cmV0dXJufXRoaXMuX2xpc3RlbmVycz90aGlzLl9saXN0ZW5lcnMucHVzaCh0KTp0aGlzLl9saXN0ZW5lcnM9W3RdfXVuc3Vic2NyaWJlKHQpe2lmKCF0aGlzLl9saXN0ZW5lcnMpcmV0dXJuO2xldCBlPXRoaXMuX2xpc3RlbmVycy5pbmRleE9mKHQpO2UhPT0tMSYmdGhpcy5fbGlzdGVuZXJzLnNwbGljZShlLDEpfXN0YXRpYyBzb3VyY2UoKXtsZXQgdDtyZXR1cm57dG9rZW46bmV3IEEoZnVuY3Rpb24ocil7dD1yfSksY2FuY2VsOnR9fX0sb2U9bnQ7ZnVuY3Rpb24gc3QoQSl7cmV0dXJuIGZ1bmN0aW9uKGUpe3JldHVybiBBLmFwcGx5KG51bGwsZSl9fWZ1bmN0aW9uIEN0KEEpe3JldHVybiBpLmlzT2JqZWN0KEEpJiZBLmlzQXhpb3NFcnJvcj09PSEwfXZhciBCdD17Q29udGludWU6MTAwLFN3aXRjaGluZ1Byb3RvY29sczoxMDEsUHJvY2Vzc2luZzoxMDIsRWFybHlIaW50czoxMDMsT2s6MjAwLENyZWF0ZWQ6MjAxLEFjY2VwdGVkOjIwMixOb25BdXRob3JpdGF0aXZlSW5mb3JtYXRpb246MjAzLE5vQ29udGVudDoyMDQsUmVzZXRDb250ZW50OjIwNSxQYXJ0aWFsQ29udGVudDoyMDYsTXVsdGlTdGF0dXM6MjA3LEFscmVhZHlSZXBvcnRlZDoyMDgsSW1Vc2VkOjIyNixNdWx0aXBsZUNob2ljZXM6MzAwLE1vdmVkUGVybWFuZW50bHk6MzAxLEZvdW5kOjMwMixTZWVPdGhlcjozMDMsTm90TW9kaWZpZWQ6MzA0LFVzZVByb3h5OjMwNSxVbnVzZWQ6MzA2LFRlbXBvcmFyeVJlZGlyZWN0OjMwNyxQZXJtYW5lbnRSZWRpcmVjdDozMDgsQmFkUmVxdWVzdDo0MDAsVW5hdXRob3JpemVkOjQwMSxQYXltZW50UmVxdWlyZWQ6NDAyLEZvcmJpZGRlbjo0MDMsTm90Rm91bmQ6NDA0LE1ldGhvZE5vdEFsbG93ZWQ6NDA1LE5vdEFjY2VwdGFibGU6NDA2LFByb3h5QXV0aGVudGljYXRpb25SZXF1aXJlZDo0MDcsUmVxdWVzdFRpbWVvdXQ6NDA4LENvbmZsaWN0OjQwOSxHb25lOjQxMCxMZW5ndGhSZXF1aXJlZDo0MTEsUHJlY29uZGl0aW9uRmFpbGVkOjQxMixQYXlsb2FkVG9vTGFyZ2U6NDEzLFVyaVRvb0xvbmc6NDE0LFVuc3VwcG9ydGVkTWVkaWFUeXBlOjQxNSxSYW5nZU5vdFNhdGlzZmlhYmxlOjQxNixFeHBlY3RhdGlvbkZhaWxlZDo0MTcsSW1BVGVhcG90OjQxOCxNaXNkaXJlY3RlZFJlcXVlc3Q6NDIxLFVucHJvY2Vzc2FibGVFbnRpdHk6NDIyLExvY2tlZDo0MjMsRmFpbGVkRGVwZW5kZW5jeTo0MjQsVG9vRWFybHk6NDI1LFVwZ3JhZGVSZXF1aXJlZDo0MjYsUHJlY29uZGl0aW9uUmVxdWlyZWQ6NDI4LFRvb01hbnlSZXF1ZXN0czo0MjksUmVxdWVzdEhlYWRlckZpZWxkc1Rvb0xhcmdlOjQzMSxVbmF2YWlsYWJsZUZvckxlZ2FsUmVhc29uczo0NTEsSW50ZXJuYWxTZXJ2ZXJFcnJvcjo1MDAsTm90SW1wbGVtZW50ZWQ6NTAxLEJhZEdhdGV3YXk6NTAyLFNlcnZpY2VVbmF2YWlsYWJsZTo1MDMsR2F0ZXdheVRpbWVvdXQ6NTA0LEh0dHBWZXJzaW9uTm90U3VwcG9ydGVkOjUwNSxWYXJpYW50QWxzb05lZ290aWF0ZXM6NTA2LEluc3VmZmljaWVudFN0b3JhZ2U6NTA3LExvb3BEZXRlY3RlZDo1MDgsTm90RXh0ZW5kZWQ6NTEwLE5ldHdvcmtBdXRoZW50aWNhdGlvblJlcXVpcmVkOjUxMX07T2JqZWN0LmVudHJpZXMoQnQpLmZvckVhY2goKFtBLHRdKT0+e0J0W3RdPUF9KTt2YXIgZ2U9QnQ7ZnVuY3Rpb24gaWUoQSl7bGV0IHQ9bmV3IGlBKEEpLGU9dihpQS5wcm90b3R5cGUucmVxdWVzdCx0KTtyZXR1cm4gaS5leHRlbmQoZSxpQS5wcm90b3R5cGUsdCx7YWxsT3duS2V5czohMH0pLGkuZXh0ZW5kKGUsdCxudWxsLHthbGxPd25LZXlzOiEwfSksZS5jcmVhdGU9ZnVuY3Rpb24ocil7cmV0dXJuIGllKGsoQSxyKSl9LGV9dmFyIGQ9aWUoWik7ZC5BeGlvcz1pQTtkLkNhbmNlbGVkRXJyb3I9YjtkLkNhbmNlbFRva2VuPW9lO2QuaXNDYW5jZWw9ckE7ZC5WRVJTSU9OPUdBO2QudG9Gb3JtRGF0YT1xO2QuQXhpb3NFcnJvcj11O2QuQ2FuY2VsPWQuQ2FuY2VsZWRFcnJvcjtkLmFsbD1mdW5jdGlvbih0KXtyZXR1cm4gUHJvbWlzZS5hbGwodCl9O2Quc3ByZWFkPXN0O2QuaXNBeGlvc0Vycm9yPUN0O2QubWVyZ2VDb25maWc9aztkLkF4aW9zSGVhZGVycz1tO2QuZm9ybVRvSlNPTj1BPT53QShpLmlzSFRNTEZvcm0oQSk/bmV3IEZvcm1EYXRhKEEpOkEpO2QuZ2V0QWRhcHRlcj1OQS5nZXRBZGFwdGVyO2QuSHR0cFN0YXR1c0NvZGU9Z2U7ZC5kZWZhdWx0PWQ7dmFyIExBPWQ7dmFye0F4aW9zOkVpLEF4aW9zRXJyb3I6Y2ksQ2FuY2VsZWRFcnJvcjpmaSxpc0NhbmNlbDpsaSxDYW5jZWxUb2tlbjp1aSxWRVJTSU9OOkRpLGFsbDpoaSxDYW5jZWw6ZGksaXNBeGlvc0Vycm9yOnlpLHNwcmVhZDptaSx0b0Zvcm1EYXRhOndpLEF4aW9zSGVhZGVyczpwaSxIdHRwU3RhdHVzQ29kZTpTaSxmb3JtVG9KU09OOkZpLGdldEFkYXB0ZXI6UmksbWVyZ2VDb25maWc6Tml9PUxBO3ZhciBuQSxZLFF0LGF0PXtlbnY6e2Vtc2NyaXB0ZW5fbm90aWZ5X21lbW9yeV9ncm93dGg6ZnVuY3Rpb24oQSl7UXQ9bmV3IFVpbnQ4QXJyYXkoWS5leHBvcnRzLm1lbW9yeS5idWZmZXIpfX19LEpBPWNsYXNze2luaXQoKXtyZXR1cm4gbkF8fCh0eXBlb2YgZmV0Y2g8InUiP25BPWZldGNoKCJkYXRhOmFwcGxpY2F0aW9uL3dhc207YmFzZTY0LCIrbmUpLnRoZW4odD0+dC5hcnJheUJ1ZmZlcigpKS50aGVuKHQ9PldlYkFzc2VtYmx5Lmluc3RhbnRpYXRlKHQsYXQpKS50aGVuKHRoaXMuX2luaXQpOm5BPVdlYkFzc2VtYmx5Lmluc3RhbnRpYXRlKEJ1ZmZlci5mcm9tKG5lLCJiYXNlNjQiKSxhdCkudGhlbih0aGlzLl9pbml0KSxuQSl9X2luaXQodCl7WT10Lmluc3RhbmNlLGF0LmVudi5lbXNjcmlwdGVuX25vdGlmeV9tZW1vcnlfZ3Jvd3RoKDApfWRlY29kZSh0LGU9MCl7aWYoIVkpdGhyb3cgbmV3IEVycm9yKCJaU1RERGVjb2RlcjogQXdhaXQgLmluaXQoKSBiZWZvcmUgZGVjb2RpbmcuIik7bGV0IEk9dC5ieXRlTGVuZ3RoLHI9WS5leHBvcnRzLm1hbGxvYyhJKTtRdC5zZXQodCxyKSxlPWV8fE51bWJlcihZLmV4cG9ydHMuWlNURF9maW5kRGVjb21wcmVzc2VkU2l6ZShyLEkpKTtsZXQgbz1ZLmV4cG9ydHMubWFsbG9jKGUpLGc9WS5leHBvcnRzLlpTVERfZGVjb21wcmVzcyhvLGUscixJKSxDPVF0LnNsaWNlKG8sbytnKTtyZXR1cm4gWS5leHBvcnRzLmZyZWUociksWS5leHBvcnRzLmZyZWUobyksQ319LG5lPSJBR0Z6YlFFQUFBQUJiZzVnQTM5L2Z3Ri9ZQUYvQVg5Z0FuOS9BR0FCZndCZ0JYOS9mMzkvQVg5Z0EzOS9md0JnQkg5L2YzOEJmMkFBQVg5Z0FuOS9BWDlnQjM5L2YzOS9mMzhCZjJBQ2YzOEJmbUFJZjM5L2YzOS9mMzhCZjJBRmYzOS9mMzhBWUE1L2YzOS9mMzkvZjM5L2YzOS9md0YvQWljQkEyVnVkaDlsYlhOamNtbHdkR1Z1WDI1dmRHbG1lVjl0WlcxdmNubGZaM0p2ZDNSb0FBTURJeUlIQUFBQkFRTUhBd0VBQ1FRQUJRRUlDQUVGQmdRRUJBTUdBQUFLQUFVTERBMEdCQVVCY0FFQkFRVUhBUUdBQW9DQUFnWUlBWDhCUVlDakJBc0hyZ0VMQm0xbGJXOXllUUlBQm0xaGJHeHZZd0FGQkdaeVpXVUFCZ3hhVTFSRVgybHpSWEp5YjNJQUVobGFVMVJFWDJacGJtUkVaV052YlhCeVpYTnpaV1JUYVhwbEFCd1BXbE5VUkY5a1pXTnZiWEJ5WlhOekFDSVpYMTlwYm1ScGNtVmpkRjltZFc1amRHbHZibDkwWVdKc1pRRUFFRjlmWlhKeWJtOWZiRzlqWVhScGIyNEFBUWx6ZEdGamExTmhkbVVBQnd4emRHRmphMUpsYzNSdmNtVUFDQXB6ZEdGamEwRnNiRzlqQUFrS2kvSUJJZ1VBUVlRZkN6TUJBWDhnQWdSQUlBQWhBd05BSUFNZ0FTMEFBRG9BQUNBRFFRRnFJUU1nQVVFQmFpRUJJQUpCQVdzaUFnMEFDd3NnQUFzcEFRRi9JQUlFUUNBQUlRTURRQ0FESUFFNkFBQWdBMEVCYWlFRElBSkJBV3NpQWcwQUN3c2dBQXRzQVFKL1FZQWZLQUlBSWdFZ0FFRUhha0Y0Y1NJQ2FpRUFBa0FnQWtFQUlBQWdBVTBiRFFBZ0FEOEFRUkIwU3dSQUlBQS9BRUVRZEd0Qi8vOERha0VRZGtBQVFYOUdCSDlCQUFWQkFCQUFRUUVMUlEwQkMwR0FIeUFBTmdJQUlBRVBDMEdFSDBFd05nSUFRWDhMdVNjQkMzOGpBRUVRYXlJS0pBQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFJQUJCOUFGTkJFQkJpQjhvQWdBaUJrRVFJQUJCQzJwQmVIRWdBRUVMU1JzaUJVRURkaUlBZGlJQlFRTnhCRUFDUUNBQlFYOXpRUUZ4SUFCcUlnSkJBM1FpQVVHd0gyb2lBQ0FCUWJnZmFpZ0NBQ0lCS0FJSUlnUkdCRUJCaUI4Z0JrRitJQUozY1RZQ0FBd0JDeUFFSUFBMkFnd2dBQ0FFTmdJSUN5QUJRUWhxSVFBZ0FTQUNRUU4wSWdKQkEzSTJBZ1FnQVNBQ2FpSUJJQUVvQWdSQkFYSTJBZ1FNRHdzZ0JVR1FIeWdDQUNJSFRRMEJJQUVFUUFKQVFRSWdBSFFpQWtFQUlBSnJjaUFCSUFCMGNXZ2lBVUVEZENJQVFiQWZhaUlDSUFCQnVCOXFLQUlBSWdBb0FnZ2lCRVlFUUVHSUh5QUdRWDRnQVhkeElnWTJBZ0FNQVFzZ0JDQUNOZ0lNSUFJZ0JEWUNDQXNnQUNBRlFRTnlOZ0lFSUFBZ0JXb2lDQ0FCUVFOMElnRWdCV3NpQkVFQmNqWUNCQ0FBSUFGcUlBUTJBZ0FnQndSQUlBZEJlSEZCc0I5cUlRRkJuQjhvQWdBaEFnSi9JQVpCQVNBSFFRTjJkQ0lEY1VVRVFFR0lIeUFESUFaeU5nSUFJQUVNQVFzZ0FTZ0NDQXNoQXlBQklBSTJBZ2dnQXlBQ05nSU1JQUlnQVRZQ0RDQUNJQU0yQWdnTElBQkJDR29oQUVHY0h5QUlOZ0lBUVpBZklBUTJBZ0FNRHd0QmpCOG9BZ0FpQzBVTkFTQUxhRUVDZEVHNElXb29BZ0FpQWlnQ0JFRjRjU0FGYXlFRElBSWhBUU5BQWtBZ0FTZ0NFQ0lBUlFSQUlBRW9BaFFpQUVVTkFRc2dBQ2dDQkVGNGNTQUZheUlCSUFNZ0FTQURTU0lCR3lFRElBQWdBaUFCR3lFQ0lBQWhBUXdCQ3dzZ0FpZ0NHQ0VKSUFJZ0FpZ0NEQ0lFUndSQVFaZ2ZLQUlBR2lBQ0tBSUlJZ0FnQkRZQ0RDQUVJQUEyQWdnTURnc2dBa0VVYWlJQktBSUFJZ0JGQkVBZ0FpZ0NFQ0lBUlEwRElBSkJFR29oQVFzRFFDQUJJUWdnQUNJRVFSUnFJZ0VvQWdBaUFBMEFJQVJCRUdvaEFTQUVLQUlRSWdBTkFBc2dDRUVBTmdJQURBMExRWDhoQlNBQVFiOS9TdzBBSUFCQkMyb2lBRUY0Y1NFRlFZd2ZLQUlBSWdoRkRRQkJBQ0FGYXlFREFrQUNRQUpBQW45QkFDQUZRWUFDU1EwQUdrRWZJQVZCLy8vL0Iwc05BQm9nQlVFbUlBQkJDSFpuSWdCcmRrRUJjU0FBUVFGMGEwRSthZ3NpQjBFQ2RFRzRJV29vQWdBaUFVVUVRRUVBSVFBTUFRdEJBQ0VBSUFWQkdTQUhRUUYyYTBFQUlBZEJIMGNiZENFQ0EwQUNRQ0FCS0FJRVFYaHhJQVZySWdZZ0EwOE5BQ0FCSVFRZ0JpSUREUUJCQUNFRElBRWhBQXdEQ3lBQUlBRW9BaFFpQmlBR0lBRWdBa0VkZGtFRWNXb29BaEFpQVVZYklBQWdCaHNoQUNBQ1FRRjBJUUlnQVEwQUN3c2dBQ0FFY2tVRVFFRUFJUVJCQWlBSGRDSUFRUUFnQUd0eUlBaHhJZ0JGRFFNZ0FHaEJBblJCdUNGcUtBSUFJUUFMSUFCRkRRRUxBMEFnQUNnQ0JFRjRjU0FGYXlJQ0lBTkpJUUVnQWlBRElBRWJJUU1nQUNBRUlBRWJJUVFnQUNnQ0VDSUJCSDhnQVFVZ0FDZ0NGQXNpQUEwQUN3c2dCRVVOQUNBRFFaQWZLQUlBSUFWclR3MEFJQVFvQWhnaEJ5QUVJQVFvQWd3aUFrY0VRRUdZSHlnQ0FCb2dCQ2dDQ0NJQUlBSTJBZ3dnQWlBQU5nSUlEQXdMSUFSQkZHb2lBU2dDQUNJQVJRUkFJQVFvQWhBaUFFVU5BeUFFUVJCcUlRRUxBMEFnQVNFR0lBQWlBa0VVYWlJQktBSUFJZ0FOQUNBQ1FSQnFJUUVnQWlnQ0VDSUFEUUFMSUFaQkFEWUNBQXdMQ3lBRlFaQWZLQUlBSWdSTkJFQkJuQjhvQWdBaEFBSkFJQVFnQldzaUFVRVFUd1JBSUFBZ0JXb2lBaUFCUVFGeU5nSUVJQUFnQkdvZ0FUWUNBQ0FBSUFWQkEzSTJBZ1FNQVFzZ0FDQUVRUU55TmdJRUlBQWdCR29pQVNBQktBSUVRUUZ5TmdJRVFRQWhBa0VBSVFFTFFaQWZJQUUyQWdCQm5COGdBallDQUNBQVFRaHFJUUFNRFFzZ0JVR1VIeWdDQUNJQ1NRUkFRWlFmSUFJZ0JXc2lBVFlDQUVHZ0gwR2dIeWdDQUNJQUlBVnFJZ0kyQWdBZ0FpQUJRUUZ5TmdJRUlBQWdCVUVEY2pZQ0JDQUFRUWhxSVFBTURRdEJBQ0VBSUFWQkwyb2lBd0ovUWVBaUtBSUFCRUJCNkNJb0FnQU1BUXRCN0NKQ2Z6Y0NBRUhrSWtLQW9JQ0FnSUFFTndJQVFlQWlJQXBCREdwQmNIRkIyS3JWcWdWek5nSUFRZlFpUVFBMkFnQkJ4Q0pCQURZQ0FFR0FJQXNpQVdvaUJrRUFJQUZySWdoeElnRWdCVTBOREVIQUlpZ0NBQ0lFQkVCQnVDSW9BZ0FpQnlBQmFpSUpJQWROSUFRZ0NVbHlEUTBMQWtCQnhDSXRBQUJCQkhGRkJFQUNRQUpBQWtBQ1FFR2dIeWdDQUNJRUJFQkJ5Q0loQUFOQUlBUWdBQ2dDQUNJSFR3UkFJQWNnQUNnQ0JHb2dCRXNOQXdzZ0FDZ0NDQ0lBRFFBTEMwRUFFQVFpQWtGL1JnMERJQUVoQmtIa0lpZ0NBQ0lBUVFGcklnUWdBbkVFUUNBQklBSnJJQUlnQkdwQkFDQUFhM0ZxSVFZTElBVWdCazhOQTBIQUlpZ0NBQ0lBQkVCQnVDSW9BZ0FpQkNBR2FpSUlJQVJOSUFBZ0NFbHlEUVFMSUFZUUJDSUFJQUpIRFFFTUJRc2dCaUFDYXlBSWNTSUdFQVFpQWlBQUtBSUFJQUFvQWdScVJnMEJJQUloQUFzZ0FFRi9SZzBCSUFWQk1Hb2dCazBFUUNBQUlRSU1CQXRCNkNJb0FnQWlBaUFESUFacmFrRUFJQUpyY1NJQ0VBUkJmMFlOQVNBQ0lBWnFJUVlnQUNFQ0RBTUxJQUpCZjBjTkFndEJ4Q0pCeENJb0FnQkJCSEkyQWdBTElBRVFCQ0lDUVg5R1FRQVFCQ0lBUVg5R2NpQUFJQUpOY2cwRklBQWdBbXNpQmlBRlFTaHFUUTBGQzBHNElrRzRJaWdDQUNBR2FpSUFOZ0lBUWJ3aUtBSUFJQUJKQkVCQnZDSWdBRFlDQUFzQ1FFR2dIeWdDQUNJREJFQkJ5Q0loQUFOQUlBSWdBQ2dDQUNJQklBQW9BZ1FpQkdwR0RRSWdBQ2dDQ0NJQURRQUxEQVFMUVpnZktBSUFJZ0JCQUNBQUlBSk5HMFVFUUVHWUh5QUNOZ0lBQzBFQUlRQkJ6Q0lnQmpZQ0FFSElJaUFDTmdJQVFhZ2ZRWDgyQWdCQnJCOUI0Q0lvQWdBMkFnQkIxQ0pCQURZQ0FBTkFJQUJCQTNRaUFVRzRIMm9nQVVHd0gyb2lCRFlDQUNBQlFid2ZhaUFFTmdJQUlBQkJBV29pQUVFZ1J3MEFDMEdVSHlBR1FTaHJJZ0JCZUNBQ2EwRUhjU0lCYXlJRU5nSUFRYUFmSUFFZ0Ftb2lBVFlDQUNBQklBUkJBWEkyQWdRZ0FDQUNha0VvTmdJRVFhUWZRZkFpS0FJQU5nSUFEQVFMSUFJZ0EwMGdBU0FEUzNJTkFpQUFLQUlNUVFoeERRSWdBQ0FFSUFacU5nSUVRYUFmSUFOQmVDQURhMEVIY1NJQWFpSUJOZ0lBUVpRZlFaUWZLQUlBSUFacUlnSWdBR3NpQURZQ0FDQUJJQUJCQVhJMkFnUWdBaUFEYWtFb05nSUVRYVFmUWZBaUtBSUFOZ0lBREFNTFFRQWhCQXdLQzBFQUlRSU1DQXRCbUI4b0FnQWdBa3NFUUVHWUh5QUNOZ0lBQ3lBQ0lBWnFJUUZCeUNJaEFBSkFBa0FDUUFOQUlBRWdBQ2dDQUVjRVFDQUFLQUlJSWdBTkFRd0NDd3NnQUMwQURFRUljVVVOQVF0QnlDSWhBQU5BSUFNZ0FDZ0NBQ0lCVHdSQUlBRWdBQ2dDQkdvaUJDQURTdzBEQ3lBQUtBSUlJUUFNQUFzQUN5QUFJQUkyQWdBZ0FDQUFLQUlFSUFacU5nSUVJQUpCZUNBQ2EwRUhjV29pQnlBRlFRTnlOZ0lFSUFGQmVDQUJhMEVIY1dvaUJpQUZJQWRxSWdWcklRQWdBeUFHUmdSQVFhQWZJQVUyQWdCQmxCOUJsQjhvQWdBZ0FHb2lBRFlDQUNBRklBQkJBWEkyQWdRTUNBdEJuQjhvQWdBZ0JrWUVRRUdjSHlBRk5nSUFRWkFmUVpBZktBSUFJQUJxSWdBMkFnQWdCU0FBUVFGeU5nSUVJQUFnQldvZ0FEWUNBQXdJQ3lBR0tBSUVJZ05CQTNGQkFVY05CaUFEUVhoeElRa2dBMEgvQVUwRVFDQUdLQUlNSWdFZ0JpZ0NDQ0lDUmdSQVFZZ2ZRWWdmS0FJQVFYNGdBMEVEZG5keE5nSUFEQWNMSUFJZ0FUWUNEQ0FCSUFJMkFnZ01CZ3NnQmlnQ0dDRUlJQVlnQmlnQ0RDSUNSd1JBSUFZb0FnZ2lBU0FDTmdJTUlBSWdBVFlDQ0F3RkN5QUdRUlJxSWdFb0FnQWlBMFVFUUNBR0tBSVFJZ05GRFFRZ0JrRVFhaUVCQ3dOQUlBRWhCQ0FESWdKQkZHb2lBU2dDQUNJRERRQWdBa0VRYWlFQklBSW9BaEFpQXcwQUN5QUVRUUEyQWdBTUJBdEJsQjhnQmtFb2F5SUFRWGdnQW10QkIzRWlBV3NpQ0RZQ0FFR2dIeUFCSUFKcUlnRTJBZ0FnQVNBSVFRRnlOZ0lFSUFBZ0FtcEJLRFlDQkVHa0gwSHdJaWdDQURZQ0FDQURJQVJCSnlBRWEwRUhjV3BCTDJzaUFDQUFJQU5CRUdwSkd5SUJRUnMyQWdRZ0FVSFFJaWtDQURjQ0VDQUJRY2dpS1FJQU53SUlRZEFpSUFGQkNHbzJBZ0JCekNJZ0JqWUNBRUhJSWlBQ05nSUFRZFFpUVFBMkFnQWdBVUVZYWlFQUEwQWdBRUVITmdJRUlBQkJDR29nQUVFRWFpRUFJQVJKRFFBTElBRWdBMFlOQUNBQklBRW9BZ1JCZm5FMkFnUWdBeUFCSUFOcklnSkJBWEkyQWdRZ0FTQUNOZ0lBSUFKQi93Rk5CRUFnQWtGNGNVR3dIMm9oQUFKL1FZZ2ZLQUlBSWdGQkFTQUNRUU4yZENJQ2NVVUVRRUdJSHlBQklBSnlOZ0lBSUFBTUFRc2dBQ2dDQ0FzaEFTQUFJQU0yQWdnZ0FTQUROZ0lNSUFNZ0FEWUNEQ0FESUFFMkFnZ01BUXRCSHlFQUlBSkIvLy8vQjAwRVFDQUNRU1lnQWtFSWRtY2lBR3QyUVFGeElBQkJBWFJyUVQ1cUlRQUxJQU1nQURZQ0hDQURRZ0EzQWhBZ0FFRUNkRUc0SVdvaEFRSkFBa0JCakI4b0FnQWlCRUVCSUFCMElnWnhSUVJBUVl3ZklBUWdCbkkyQWdBZ0FTQUROZ0lBREFFTElBSkJHU0FBUVFGMmEwRUFJQUJCSDBjYmRDRUFJQUVvQWdBaEJBTkFJQVFpQVNnQ0JFRjRjU0FDUmcwQ0lBQkJIWFloQkNBQVFRRjBJUUFnQVNBRVFRUnhhaUlHS0FJUUlnUU5BQXNnQmlBRE5nSVFDeUFESUFFMkFoZ2dBeUFETmdJTUlBTWdBellDQ0F3QkN5QUJLQUlJSWdBZ0F6WUNEQ0FCSUFNMkFnZ2dBMEVBTmdJWUlBTWdBVFlDRENBRElBQTJBZ2dMUVpRZktBSUFJZ0FnQlUwTkFFR1VIeUFBSUFWcklnRTJBZ0JCb0I5Qm9COG9BZ0FpQUNBRmFpSUNOZ0lBSUFJZ0FVRUJjallDQkNBQUlBVkJBM0kyQWdRZ0FFRUlhaUVBREFnTFFZUWZRVEEyQWdCQkFDRUFEQWNMUVFBaEFnc2dDRVVOQUFKQUlBWW9BaHdpQVVFQ2RFRzRJV29pQkNnQ0FDQUdSZ1JBSUFRZ0FqWUNBQ0FDRFFGQmpCOUJqQjhvQWdCQmZpQUJkM0UyQWdBTUFnc2dDRUVRUVJRZ0NDZ0NFQ0FHUmh0cUlBSTJBZ0FnQWtVTkFRc2dBaUFJTmdJWUlBWW9BaEFpQVFSQUlBSWdBVFlDRUNBQklBSTJBaGdMSUFZb0FoUWlBVVVOQUNBQ0lBRTJBaFFnQVNBQ05nSVlDeUFBSUFscUlRQWdCaUFKYWlJR0tBSUVJUU1MSUFZZ0EwRitjVFlDQkNBRklBQkJBWEkyQWdRZ0FDQUZhaUFBTmdJQUlBQkIvd0ZOQkVBZ0FFRjRjVUd3SDJvaEFRSi9RWWdmS0FJQUlnSkJBU0FBUVFOMmRDSUFjVVVFUUVHSUh5QUFJQUp5TmdJQUlBRU1BUXNnQVNnQ0NBc2hBQ0FCSUFVMkFnZ2dBQ0FGTmdJTUlBVWdBVFlDRENBRklBQTJBZ2dNQVF0Qkh5RURJQUJCLy8vL0IwMEVRQ0FBUVNZZ0FFRUlkbWNpQVd0MlFRRnhJQUZCQVhSclFUNXFJUU1MSUFVZ0F6WUNIQ0FGUWdBM0FoQWdBMEVDZEVHNElXb2hBUUpBQWtCQmpCOG9BZ0FpQWtFQklBTjBJZ1J4UlFSQVFZd2ZJQUlnQkhJMkFnQWdBU0FGTmdJQURBRUxJQUJCR1NBRFFRRjJhMEVBSUFOQkgwY2JkQ0VESUFFb0FnQWhBZ05BSUFJaUFTZ0NCRUY0Y1NBQVJnMENJQU5CSFhZaEFpQURRUUYwSVFNZ0FTQUNRUVJ4YWlJRUtBSVFJZ0lOQUFzZ0JDQUZOZ0lRQ3lBRklBRTJBaGdnQlNBRk5nSU1JQVVnQlRZQ0NBd0JDeUFCS0FJSUlnQWdCVFlDRENBQklBVTJBZ2dnQlVFQU5nSVlJQVVnQVRZQ0RDQUZJQUEyQWdnTElBZEJDR29oQUF3Q0N3SkFJQWRGRFFBQ1FDQUVLQUljSWdCQkFuUkJ1Q0ZxSWdFb0FnQWdCRVlFUUNBQklBSTJBZ0FnQWcwQlFZd2ZJQWhCZmlBQWQzRWlDRFlDQUF3Q0N5QUhRUkJCRkNBSEtBSVFJQVJHRzJvZ0FqWUNBQ0FDUlEwQkN5QUNJQWMyQWhnZ0JDZ0NFQ0lBQkVBZ0FpQUFOZ0lRSUFBZ0FqWUNHQXNnQkNnQ0ZDSUFSUTBBSUFJZ0FEWUNGQ0FBSUFJMkFoZ0xBa0FnQTBFUFRRUkFJQVFnQXlBRmFpSUFRUU55TmdJRUlBQWdCR29pQUNBQUtBSUVRUUZ5TmdJRURBRUxJQVFnQlVFRGNqWUNCQ0FFSUFWcUlnSWdBMEVCY2pZQ0JDQUNJQU5xSUFNMkFnQWdBMEgvQVUwRVFDQURRWGh4UWJBZmFpRUFBbjlCaUI4b0FnQWlBVUVCSUFOQkEzWjBJZ054UlFSQVFZZ2ZJQUVnQTNJMkFnQWdBQXdCQ3lBQUtBSUlDeUVCSUFBZ0FqWUNDQ0FCSUFJMkFnd2dBaUFBTmdJTUlBSWdBVFlDQ0F3QkMwRWZJUUFnQTBILy8vOEhUUVJBSUFOQkppQURRUWgyWnlJQWEzWkJBWEVnQUVFQmRHdEJQbW9oQUFzZ0FpQUFOZ0ljSUFKQ0FEY0NFQ0FBUVFKMFFiZ2hhaUVCQWtBQ1FDQUlRUUVnQUhRaUJuRkZCRUJCakI4Z0JpQUljallDQUNBQklBSTJBZ0FNQVFzZ0EwRVpJQUJCQVhaclFRQWdBRUVmUnh0MElRQWdBU2dDQUNFRkEwQWdCU0lCS0FJRVFYaHhJQU5HRFFJZ0FFRWRkaUVHSUFCQkFYUWhBQ0FCSUFaQkJIRnFJZ1lvQWhBaUJRMEFDeUFHSUFJMkFoQUxJQUlnQVRZQ0dDQUNJQUkyQWd3Z0FpQUNOZ0lJREFFTElBRW9BZ2dpQUNBQ05nSU1JQUVnQWpZQ0NDQUNRUUEyQWhnZ0FpQUJOZ0lNSUFJZ0FEWUNDQXNnQkVFSWFpRUFEQUVMQWtBZ0NVVU5BQUpBSUFJb0Fod2lBRUVDZEVHNElXb2lBU2dDQUNBQ1JnUkFJQUVnQkRZQ0FDQUVEUUZCakI4Z0MwRitJQUIzY1RZQ0FBd0NDeUFKUVJCQkZDQUpLQUlRSUFKR0cyb2dCRFlDQUNBRVJRMEJDeUFFSUFrMkFoZ2dBaWdDRUNJQUJFQWdCQ0FBTmdJUUlBQWdCRFlDR0FzZ0FpZ0NGQ0lBUlEwQUlBUWdBRFlDRkNBQUlBUTJBaGdMQWtBZ0EwRVBUUVJBSUFJZ0F5QUZhaUlBUVFOeU5nSUVJQUFnQW1vaUFDQUFLQUlFUVFGeU5nSUVEQUVMSUFJZ0JVRURjallDQkNBQ0lBVnFJZ1FnQTBFQmNqWUNCQ0FESUFScUlBTTJBZ0FnQndSQUlBZEJlSEZCc0I5cUlRQkJuQjhvQWdBaEFRSi9RUUVnQjBFRGRuUWlCU0FHY1VVRVFFR0lIeUFGSUFaeU5nSUFJQUFNQVFzZ0FDZ0NDQXNoQmlBQUlBRTJBZ2dnQmlBQk5nSU1JQUVnQURZQ0RDQUJJQVkyQWdnTFFad2ZJQVEyQWdCQmtCOGdBellDQUFzZ0FrRUlhaUVBQ3lBS1FSQnFKQUFnQUF2U0N3RUhmd0pBSUFCRkRRQWdBRUVJYXlJQ0lBQkJCR3NvQWdBaUFVRjRjU0lBYWlFRkFrQWdBVUVCY1EwQUlBRkJBM0ZGRFFFZ0FpQUNLQUlBSWdGcklnSkJtQjhvQWdCSkRRRWdBQ0FCYWlFQUFrQUNRRUdjSHlnQ0FDQUNSd1JBSUFGQi93Rk5CRUFnQVVFRGRpRUVJQUlvQWd3aUFTQUNLQUlJSWdOR0JFQkJpQjlCaUI4b0FnQkJmaUFFZDNFMkFnQU1CUXNnQXlBQk5nSU1JQUVnQXpZQ0NBd0VDeUFDS0FJWUlRWWdBaUFDS0FJTUlnRkhCRUFnQWlnQ0NDSURJQUUyQWd3Z0FTQUROZ0lJREFNTElBSkJGR29pQkNnQ0FDSURSUVJBSUFJb0FoQWlBMFVOQWlBQ1FSQnFJUVFMQTBBZ0JDRUhJQU1pQVVFVWFpSUVLQUlBSWdNTkFDQUJRUkJxSVFRZ0FTZ0NFQ0lERFFBTElBZEJBRFlDQUF3Q0N5QUZLQUlFSWdGQkEzRkJBMGNOQWtHUUh5QUFOZ0lBSUFVZ0FVRitjVFlDQkNBQ0lBQkJBWEkyQWdRZ0JTQUFOZ0lBRHd0QkFDRUJDeUFHUlEwQUFrQWdBaWdDSENJRFFRSjBRYmdoYWlJRUtBSUFJQUpHQkVBZ0JDQUJOZ0lBSUFFTkFVR01IMEdNSHlnQ0FFRitJQU4zY1RZQ0FBd0NDeUFHUVJCQkZDQUdLQUlRSUFKR0cyb2dBVFlDQUNBQlJRMEJDeUFCSUFZMkFoZ2dBaWdDRUNJREJFQWdBU0FETmdJUUlBTWdBVFlDR0FzZ0FpZ0NGQ0lEUlEwQUlBRWdBellDRkNBRElBRTJBaGdMSUFJZ0JVOE5BQ0FGS0FJRUlnRkJBWEZGRFFBQ1FBSkFBa0FDUUNBQlFRSnhSUVJBUWFBZktBSUFJQVZHQkVCQm9COGdBallDQUVHVUgwR1VIeWdDQUNBQWFpSUFOZ0lBSUFJZ0FFRUJjallDQkNBQ1Fad2ZLQUlBUncwR1FaQWZRUUEyQWdCQm5COUJBRFlDQUE4TFFad2ZLQUlBSUFWR0JFQkJuQjhnQWpZQ0FFR1FIMEdRSHlnQ0FDQUFhaUlBTmdJQUlBSWdBRUVCY2pZQ0JDQUFJQUpxSUFBMkFnQVBDeUFCUVhoeElBQnFJUUFnQVVIL0FVMEVRQ0FCUVFOMklRUWdCU2dDRENJQklBVW9BZ2dpQTBZRVFFR0lIMEdJSHlnQ0FFRitJQVIzY1RZQ0FBd0ZDeUFESUFFMkFnd2dBU0FETmdJSURBUUxJQVVvQWhnaEJpQUZJQVVvQWd3aUFVY0VRRUdZSHlnQ0FCb2dCU2dDQ0NJRElBRTJBZ3dnQVNBRE5nSUlEQU1MSUFWQkZHb2lCQ2dDQUNJRFJRUkFJQVVvQWhBaUEwVU5BaUFGUVJCcUlRUUxBMEFnQkNFSElBTWlBVUVVYWlJRUtBSUFJZ01OQUNBQlFSQnFJUVFnQVNnQ0VDSUREUUFMSUFkQkFEWUNBQXdDQ3lBRklBRkJmbkUyQWdRZ0FpQUFRUUZ5TmdJRUlBQWdBbW9nQURZQ0FBd0RDMEVBSVFFTElBWkZEUUFDUUNBRktBSWNJZ05CQW5SQnVDRnFJZ1FvQWdBZ0JVWUVRQ0FFSUFFMkFnQWdBUTBCUVl3ZlFZd2ZLQUlBUVg0Z0EzZHhOZ0lBREFJTElBWkJFRUVVSUFZb0FoQWdCVVliYWlBQk5nSUFJQUZGRFFFTElBRWdCallDR0NBRktBSVFJZ01FUUNBQklBTTJBaEFnQXlBQk5nSVlDeUFGS0FJVUlnTkZEUUFnQVNBRE5nSVVJQU1nQVRZQ0dBc2dBaUFBUVFGeU5nSUVJQUFnQW1vZ0FEWUNBQ0FDUVp3ZktBSUFSdzBBUVpBZklBQTJBZ0FQQ3lBQVFmOEJUUVJBSUFCQmVIRkJzQjlxSVFFQ2YwR0lIeWdDQUNJRFFRRWdBRUVEZG5RaUFIRkZCRUJCaUI4Z0FDQURjallDQUNBQkRBRUxJQUVvQWdnTElRQWdBU0FDTmdJSUlBQWdBallDRENBQ0lBRTJBZ3dnQWlBQU5nSUlEd3RCSHlFRElBQkIvLy8vQjAwRVFDQUFRU1lnQUVFSWRtY2lBV3QyUVFGeElBRkJBWFJyUVQ1cUlRTUxJQUlnQXpZQ0hDQUNRZ0EzQWhBZ0EwRUNkRUc0SVdvaEFRSkFBa0FDUUVHTUh5Z0NBQ0lFUVFFZ0EzUWlCM0ZGQkVCQmpCOGdCQ0FIY2pZQ0FDQUJJQUkyQWdBZ0FpQUJOZ0lZREFFTElBQkJHU0FEUVFGMmEwRUFJQU5CSDBjYmRDRURJQUVvQWdBaEFRTkFJQUVpQkNnQ0JFRjRjU0FBUmcwQ0lBTkJIWFloQVNBRFFRRjBJUU1nQkNBQlFRUnhhaUlIUVJCcUtBSUFJZ0VOQUFzZ0J5QUNOZ0lRSUFJZ0JEWUNHQXNnQWlBQ05nSU1JQUlnQWpZQ0NBd0JDeUFFS0FJSUlnQWdBallDRENBRUlBSTJBZ2dnQWtFQU5nSVlJQUlnQkRZQ0RDQUNJQUEyQWdnTFFhZ2ZRYWdmS0FJQVFRRnJJZ0JCZnlBQUd6WUNBQXNMQkFBakFBc0dBQ0FBSkFBTEVBQWpBQ0FBYTBGd2NTSUFKQUFnQUF0S0FRRi9JQUFnQVVrRVFDQUFJQUVnQWhBQ0R3c2dBZ1JBSUFBZ0Ftb2hBeUFCSUFKcUlRRURRQ0FEUVFGcklnTWdBVUVCYXlJQkxRQUFPZ0FBSUFKQkFXc2lBZzBBQ3dzZ0FBdjlEZ0lSZndGK0l3QkJNR3NpQnlRQVFiaC9JUWdDUUNBRlJRMEFJQVFzQUFBaUNVSC9BWEVoQ3dKQUlBbEJBRWdFUUNBTFFmNEFhMEVCZGlJR0lBVlBEUUpCYkNFSUlBdEIvd0JySWd0Qi93RkxEUUlnQkVFQmFpRUlRUUFoQlFOQUlBVWdDMDhFUUNBTElRZ2dCaUVMREFNRklBQWdCV29nQ0NBRlFRRjJhaUlFTFFBQVFRUjJPZ0FBSUFBZ0JVRUJjbW9nQkMwQUFFRVBjVG9BQUNBRlFRSnFJUVVNQVFzQUN3QUxJQVVnQzAwTkFTQUhRZjhCTmdJRUlBWWdCMEVFYWlBSFFRaHFJQVJCQVdvaURpQUxFQXdpQkVHSWYwc0VRQ0FFSVFnTUFndEJWQ0VJSUFjb0FnZ2lFRUVHU3cwQklBY29BZ1FpRVVFQmRDSUpRUUpxclVJQklCQ3RoaUlZUVFFZ0VIUWlEVUVCYWlJRnJVSUNobng4UWd0OFF2ei8vLy8vLy8vLy93Q0RRdVFDVmcwQlFWSWhDQ0FSUWY4QlN3MEJJQTFCZjNOQkFuUkI1QUpxclNBUlFRRnFJaFZCQVhTdElCaDhRZ2g4VkEwQklBc2dCR3NoRmlBRUlBNXFJUmNnQmtHQUJHb2lFaUFGUVFKMGFpSVJJQWxxUVFKcUlRNGdCa0dFQkdvaEUwR0FnQUlnRUhSQkVIWWhDVUVBSVFWQkFTRVBJQTFCQVdzaUZDRUtBMEFnQlNBVlJrVUVRQUpBSUFZZ0JVRUJkQ0lJYWk4QkFDSUVRZi8vQTBZRVFDQVRJQXBCQW5ScUlBVTZBQUlnQ2tFQmF5RUtRUUVoQkF3QkN5QVBRUUFnQ1NBRXdVb2JJUThMSUFnZ0VXb2dCRHNCQUNBRlFRRnFJUVVNQVFzTElBWWdEenNCZ2dRZ0JpQVFPd0dBQkFKQUlBb2dGRVlFUUNBTlFRTjJJUWhDQUNFWVFRQWhEd05BSUF3Z0ZVWUVRQ0FJSUExQkFYWnFRUU5xSWdsQkFYUWhDRUVBSVFSQkFDRUtBMEJCQUNFRklBb2dEVThOQkFOQUlBVkJBa1pGQkVBZ0V5QUZJQWxzSUFScUlCUnhRUUowYWlBT0lBVWdDbXBxTFFBQU9nQUNJQVZCQVdvaEJRd0JDd3NnQ2tFQ2FpRUtJQVFnQ0dvZ0ZIRWhCQXdBQ3dBRklBWWdERUVCZEdvdUFRQWhDU0FPSUE5cUlnUWdHRGNBQUVFSUlRVURRQ0FGSUFsT1JRUkFJQVFnQldvZ0dEY0FBQ0FGUVFocUlRVU1BUXNMSUJoQ2dZS0VpSkNnd0lBQmZDRVlJQXhCQVdvaERDQUpJQTlxSVE4TUFRc0FDd0FMSUExQkEzWWdEVUVCZG1wQkEyb2hDRUVBSVFVRFFDQU1JQlZHUlFSQVFRQWhDU0FHSUF4QkFYUnFMZ0VBSWdSQkFDQUVRUUJLR3lFRUEwQWdCQ0FKUmtVRVFDQVRJQVZCQW5ScUlBdzZBQUlEUUNBRklBaHFJQlJ4SWdVZ0Nrc05BQXNnQ1VFQmFpRUpEQUVMQ3lBTVFRRnFJUXdNQVFzTFFYOGhDQ0FGRFFJTElCQkJBV29oQ0VFQUlRVURRQ0FGSUExR1JRUkFJQkVnRXlBRlFRSjBhaUlPTFFBQ1FRRjBhaUlFSUFRdkFRQWlDVUVCYWpzQkFDQU9JQWdnQ1dkQllITnFJZ1E2QUFNZ0RpQUpJQVIwSUExck93RUFJQVZCQVdvaEJRd0JDd3NDUUFKQUlBWXZBWUlFQkVBZ0IwRWNhaUlFSUJjZ0ZoQU5JZ2hCaUg5TERRSWdCMEVVYWlBRUlCSVFEaUFIUVF4cUlBUWdFaEFPUVFBaEJRTkFJQWRCSEdvaUJCQVBJQVZCK3dGTGNnMENJQUFnQldvaUJpQUhRUlJxSUFRUUVEb0FBQ0FHSUFkQkRHb2dCQkFRT2dBQklBVkJBbkloQkNBSFFSeHFFQThFUUNBRUlRVU1Bd1VnQUNBRWFpQUhRUlJxSUFkQkhHb2lCQkFRT2dBQUlBWWdCMEVNYWlBRUVCQTZBQU1nQlVFRWFpRUZEQUVMQUFzQUN5QUhRUnhxSWdRZ0Z5QVdFQTBpQ0VHSWYwc05BU0FIUVJScUlBUWdFaEFPSUFkQkRHb2dCQ0FTRUE1QkFDRUZBMEFnQjBFY2FpSUVFQThnQlVIN0FVdHlSUVJBSUFBZ0JXb2lCaUFIUVJScUlBUVFFVG9BQUNBR0lBZEJER29nQkJBUk9nQUJJQVZCQW5JaEJDQUhRUnhxRUE4RVFDQUVJUVVGSUFBZ0JHb2dCMEVVYWlBSFFSeHFJZ1FRRVRvQUFDQUdJQWRCREdvZ0JCQVJPZ0FESUFWQkJHb2hCUXdDQ3dzTEFuOERRRUc2ZnlFSUlBVkIvUUZMRFFNZ0FDQUZhaUlHSUFkQkZHb2dCMEVjYWlJSkVCRTZBQUFnQmtFQmFpRUVJQWtRRDBFRFJnUkFJQWRCREdvaENFRUNEQUlMSUFWQi9BRkxEUU1nQmlBSFFReHFJQWRCSEdvaUJCQVJPZ0FCSUFWQkFtb2hCU0FFRUE5QkEwY05BQXNnQUNBRmFpRUVJQWRCRkdvaENFRURDeUFFSUFnZ0IwRWNhaEFST2dBQUlBWnFJQUJySVFnTUFRc0Nmd05BUWJwL0lRZ2dCVUg5QVVzTkFpQUFJQVZxSWdZZ0IwRVVhaUFIUVJ4cUlna1FFRG9BQUNBR1FRRnFJUVFnQ1JBUFFRTkdCRUFnQjBFTWFpRUlRUUlNQWdzZ0JVSDhBVXNOQWlBR0lBZEJER29nQjBFY2FpSUVFQkE2QUFFZ0JVRUNhaUVGSUFRUUQwRURSdzBBQ3lBQUlBVnFJUVFnQjBFVWFpRUlRUU1MSUFRZ0NDQUhRUnhxRUJBNkFBQWdCbW9nQUdzaENBc2dDRUdJZjBzTkFRc2dDQ0VFUVFBaEJTQUJRUUJCTkJBRElRbEJBQ0VLQTBBZ0JDQUZSd1JBSUFBZ0JXb2lCaTBBQUNJQlFRdExCRUJCYkNFSURBTUZJQWtnQVVFQ2RHb2lBU0FCS0FJQVFRRnFOZ0lBSUFWQkFXb2hCVUVCSUFZdEFBQjBRUUYxSUFwcUlRb01BZ3NBQ3d0QmJDRUlJQXBGRFFBZ0NtY2lCVUVmY3lJQlFRdExEUUFnQTBFZ0lBVnJOZ0lBUVFGQkFpQUJkQ0FLYXlJRFowRWZjeUlCZENBRFJ3MEFJQUFnQkdvZ0FVRUJhaUlBT2dBQUlBa2dBRUVDZEdvaUFDQUFLQUlBUVFGcU5nSUFJQWtvQWdRaUFFRUNTU0FBUVFGeGNnMEFJQUlnQkVFQmFqWUNBQ0FMUVFGcUlRZ0xJQWRCTUdva0FDQUlDNkFGQVF4L0l3QkJFR3NpRENRQUFuOGdCRUVIVFFSQUlBeENBRGNEQ0NBTVFRaHFJZ1VnQXlBRUVBSWFRV3dnQUNBQklBSWdCVUVJRUF3aUFDQUFJQVJMR3lBQUlBQkJpWDlKR3d3QkN5QUFRUUFnQVNnQ0FFRUJhaUlOUVFGMEVBTWhEMEZVSUFNb0FBQWlCa0VQY1NJQVFRcExEUUFhSUFJZ0FFRUZhallDQUNBRElBUnFJZ0pCQkdzaEJ5QUNRUWRySVFzZ0FFRUdhaUVPUVFRaEFpQUdRUVIySVFWQklDQUFkQ0lJUVFGeUlRbEJBQ0VBUVFFaEJpQURJUVFEUUFKQUlBWkJBWEZGQkVBRFFDQUZRWDl6UVlDQWdJQjRjbWdpQmtFWVNVVUVRQ0FBUVNScUlRQWdCQ0FMVFFSL0lBUkJBMm9GSUFRZ0MydEJBM1FnQW1wQkgzRWhBaUFIQ3lJRUtBQUFJQUoySVFVTUFRc0xJQUlnQmtFZWNTSUtha0VDYWlFQ0lBWkJBWFpCQTJ3Z0FHb2dCU0FLZGtFRGNXb2lBQ0FOVHcwQkFuOGdCQ0FMU3lBQ1FRTjJJQVJxSWdVZ0IwdHhSUVJBSUFKQkIzRWhBaUFGREFFTElBUWdCMnRCQTNRZ0FtcEJIM0VoQWlBSEN5SUVLQUFBSUFKMklRVUxJQVVnQ0VFQmEzRWlCaUFJUVFGMFFRRnJJZ29nQ1dzaUVFa0VmeUFPUVFGckJTQUZJQXB4SWdVZ0VFRUFJQVVnQ0U0YmF5RUdJQTRMSVFVZ0R5QUFRUUYwYWlBR1FRRnJJZ283QVFBZ0FFRUJhaUVBSUFJZ0JXb2hBaUFJUVFFZ0Jtc2dDaUFHUVFCS0d5QUphaUlKU2dSQUlBbEJBa2dOQVVFZ0lBbG5JZ1ZySVE1QkFTQUZRUjl6ZENFSUN5QUFJQTFQRFFBZ0NrRUFSeUVHQW44Z0JDQUxTeUFDUVFOMUlBUnFJZ1VnQjB0eFJRUkFJQUpCQjNFaEFpQUZEQUVMSUFJZ0JDQUhhMEVEZEdwQkgzRWhBaUFIQ3lJRUtBQUFJQUoySVFVTUFRc0xRV3dnQ1VFQlJ3MEFHa0ZRSUFBZ0RVc05BQnBCYkNBQ1FTQktEUUFhSUFFZ0FFRUJhellDQUNBRUlBSkJCMnBCQTNWcUlBTnJDeUFNUVJCcUpBQUw4Z0VCQVg4Z0FrVUVRQ0FBUWdBM0FnQWdBRUVBTmdJUUlBQkNBRGNDQ0VHNGZ3OExJQUFnQVRZQ0RDQUFJQUZCQkdvMkFoQWdBa0VFVHdSQUlBQWdBU0FDYWlJQlFRUnJJZ00yQWdnZ0FDQURLQUFBTmdJQUlBRkJBV3N0QUFBaUFRUkFJQUFnQVdkQkYyczJBZ1FnQWc4TElBQkJBRFlDQkVGL0R3c2dBQ0FCTmdJSUlBQWdBUzBBQUNJRE5nSUFBa0FDUUFKQUlBSkJBbXNPQWdFQUFnc2dBQ0FCTFFBQ1FSQjBJQU55SWdNMkFnQUxJQUFnQVMwQUFVRUlkQ0FEYWpZQ0FBc2dBU0FDYWtFQmF5MEFBQ0lCUlFSQUlBQkJBRFlDQkVGc0R3c2dBQ0FCWnlBQ1FRTjBhMEVKYWpZQ0JDQUNDMFFCQW44Z0FTQUNMd0VBSWdNZ0FTZ0NCR29pQkRZQ0JDQUFJQU5CQW5SQm9CMXFLQUlBSUFFb0FnQkJBQ0FFYTNaeE5nSUFJQUVRRHhvZ0FDQUNRUVJxTmdJRUM1OEJBUVIvUVFNaEFTQUFLQUlFSWdKQklFMEVRQ0FBS0FJSUlnRWdBQ2dDRUU4RVFDQUFJQUpCQjNFMkFnUWdBQ0FCSUFKQkEzWnJJZ0kyQWdnZ0FDQUNLQUFBTmdJQVFRQVBDeUFBS0FJTUlnTWdBVVlFUUVFQlFRSWdBa0VnU1JzUEN5QUFJQUVnQVNBRGF5QUNRUU4ySWdRZ0FTQUVheUFEU1NJQkd5SURheUlFTmdJSUlBQWdBaUFEUVFOMGF6WUNCQ0FBSUFRb0FBQTJBZ0FMSUFFTFNBRUVmeUFBS0FJRUlBQW9BZ0JCQW5ScUlnSXRBQUlnQWk4QkFDRUVJQUVnQVNnQ0JDSUZJQUl0QUFNaUFtbzJBZ1FnQUNBRUlBRW9BZ0FnQlhSQkFDQUNhM1pxTmdJQUMxSUJCSDhnQUNnQ0JDQUFLQUlBUVFKMGFpSUNMUUFDSUFJdkFRQWhCQ0FCSUFJdEFBTWlBaUFCS0FJRWFpSUZOZ0lFSUFBZ0JDQUNRUUowUWFBZGFpZ0NBQ0FCS0FJQVFRQWdCV3QyY1dvMkFnQUxDQUFnQUVHSWYwc0xHZ0FnQUFSQUlBRUVRQ0FDSUFBZ0FSRUNBQThMSUFBUUJnc0xwZ2dDRFg4QmZpTUFRUkJySWdra0FDQUpRUUEyQWd3Z0NVRUFOZ0lJQW44Q1FDQURRZWdKYWlBRElBbEJDR29nQ1VFTWFpQUJJQUlnQTBHQUFXb1FDeUlQUVloL1N3MEFRVlFnQ1NnQ0RDSUVJQUFvQWdBaUFVSC9BWEZCQVdwTERRRWFJQUJCQkdvaEN5QUFJQUZCLzRHQWVIRWdCRUVRZEVHQWdQd0hjWEkyQWdCQmZ5QUVJQVJCQUVnYlFRRnFJUUJCQUNFQklBa29BZ2doQlVFQUlRSURRQ0FBSUFKR0JFQWdCVUVEYXlFQlFRQWhBQU5BQWtCQkFDRUNJQUFnQVU0RVFBTkFJQUFnQlU0TkFpQURJQUFnQTJwQjZBbHFMUUFBUVFKMGFrRkFheUlCSUFFb0FnQWlBVUVCYWpZQ0FDQUJJQU5xSUFBNkFPZ0hJQUJCQVdvaEFBd0FDd0FGQTBBZ0FrRUVSa1VFUUNBRElBTWdBQ0FDYWlJSGFrSG9DV290QUFCQkFuUnFRVUJySWdnZ0NDZ0NBQ0lJUVFGcU5nSUFJQU1nQ0dvZ0J6b0E2QWNnQWtFQmFpRUNEQUVMQ3lBQVFRUnFJUUFNQWdzQUN3c2dCRUVCYWlFT0lBTW9BZ0FoQjBFQUlRQkJBU0VJQTBBZ0NDQU9SZzBESUE0Z0NHc2hCQ0FESUFoQkFuUnFLQUlBSVFVQ1FBSkFBa0FDUUFKQUFrQkJBU0FJZEVFQmRTSU5RUUZyRGdnQUFRUUNCQVFFQXdRTFFRQWhBaUFGUVFBZ0JVRUFTaHNoQmlBQUlRRURRQ0FDSUFaR0RRVWdBeUFDSUFkcWFpMEE2QWNoQ2lBTElBRkJBWFJxSWd3Z0JEb0FBU0FNSUFvNkFBQWdBa0VCYWlFQ0lBRkJBV29oQVF3QUN3QUxRUUFoQWlBRlFRQWdCVUVBU2hzaENpQUFJUUVEUUNBQ0lBcEdEUVFnQ3lBQlFRRjBhaUlHSUFNZ0FpQUhhbW90QU9nSElndzZBQUlnQmlBRU9nQUJJQVlnRERvQUFDQUdJQVE2QUFNZ0FrRUJhaUVDSUFGQkFtb2hBUXdBQ3dBTFFRQWhBaUFGUVFBZ0JVRUFTaHNoQmlBRVFRaDBRWUQrQTNFaEJDQUFJUUVEUUNBQ0lBWkdEUU1nQ3lBQlFRRjBhaUFFSUFNZ0FpQUhhbW90QU9nSGNxMUNnWUNFZ0pDQXdBQitOd0FBSUFKQkFXb2hBaUFCUVFScUlRRU1BQXNBQzBFQUlRSWdCVUVBSUFWQkFFb2JJUVlnQkVFSWRFR0EvZ054SVFRZ0FDRUJBMEFnQWlBR1JnMENJQXNnQVVFQmRHb2lDaUFFSUFNZ0FpQUhhbW90QU9nSGNxMUNnWUNFZ0pDQXdBQitJaEUzQUFnZ0NpQVJOd0FBSUFKQkFXb2hBaUFCUVFocUlRRU1BQXNBQzBFQUlRRWdCVUVBSUFWQkFFb2JJUW9nQkVFSWRFR0EvZ054SVF3Z0FDRUVBMEFnQVNBS1JnMEJJQXNnQkVFQmRHb2hFQ0FNSUFNZ0FTQUhhbW90QU9nSGNxMUNnWUNFZ0pDQXdBQitJUkZCQUNFQ0EwQWdBaUFOVGtVRVFDQVFJQUpCQVhScUlnWWdFVGNBR0NBR0lCRTNBQkFnQmlBUk53QUlJQVlnRVRjQUFDQUNRUkJxSVFJTUFRc0xJQUZCQVdvaEFTQUVJQTFxSVFRTUFBc0FDeUFJUVFGcUlRZ2dCU0FIYWlFSElBVWdEV3dnQUdvaEFBd0FDd0FGSUFNZ0FrRUNkR29pQjBGQWF5QUJOZ0lBSUFKQkFXb2hBaUFIS0FJQUlBRnFJUUVNQVFzQUN3QUxJQThMSUFsQkVHb2tBQXZ5QWdFR2Z5TUFRU0JySWdVa0FDQUVLQUlBSVFZZ0JVRU1haUFDSUFNUURTSURRWWgvVFFSQUlBUkJCR29oQWlBQUlBRnFJZ2xCQTJzaEJFRUFJQVpCRUhaclFSOXhJUU1EUUNBRlFReHFFQThnQUNBRVQzSkZCRUFnQWlBRktBSU1JZ1lnQlNnQ0VDSUhkQ0FEZGtFQmRHb2lDQzBBQVNFS0lBQWdDQzBBQURvQUFDQUNJQVlnQnlBS2FpSUdkQ0FEZGtFQmRHb2lCeTBBQUNFSUlBVWdCaUFITFFBQmFqWUNFQ0FBSUFnNkFBRWdBRUVDYWlFQURBRUxDd05BSUFWQkRHb1FEeUVISUFVb0Fnd2hCaUFGS0FJUUlRUWdBQ0FKVHlBSGNrVUVRQ0FDSUFZZ0JIUWdBM1pCQVhScUlnWXRBQUFoQnlBRklBUWdCaTBBQVdvMkFoQWdBQ0FIT2dBQUlBQkJBV29oQUF3QkN3c0RRQ0FBSUFsUFJRUkFJQUlnQmlBRWRDQURka0VCZEdvaUJ5MEFBU0VJSUFBZ0J5MEFBRG9BQUNBQVFRRnFJUUFnQkNBSWFpRUVEQUVMQzBGc1FXd2dBU0FGS0FJVUlBVW9BaGhIR3lBRVFTQkhHeUVEQ3lBRlFTQnFKQUFnQXd2UEZBRWpmeU1BUWRBQWF5SUZKQUJCYkNFSkFrQWdBMEVLU1EwQUFrQWdBeUFDTHdBRUlnY2dBaThBQUNJSUlBSXZBQUlpRFdwcVFRWnFJZ3hKRFFBZ0JDOEJBaUVHSUFWQlBHb2dBa0VHYWlJQ0lBZ1FEU0lKUVloL1N3MEJJQVZCS0dvZ0FpQUlhaUlDSUEwUURTSUpRWWgvU3cwQklBVkJGR29nQWlBTmFpSUNJQWNRRFNJSlFZaC9TdzBCSUFVZ0FpQUhhaUFESUF4ckVBMGlDVUdJZjBzTkFTQUVRUVJxSVFvZ0FDQUJhaUlmUVFOcklTQkJBQ0FHYTBFZmNTRUxJQVVvQWdnaEVTQUZLQUljSVJJZ0JTZ0NNQ0VUSUFVb0FrUWhGQ0FGS0FJRUlRa2dCU2dDR0NFTklBVW9BaXdoRENBRktBSkFJUVlnQlNnQ0VDRWhJQVVvQWlRaElpQUZLQUk0SVNNZ0JTZ0NUQ0VrSUFVb0FnQWhGU0FGS0FJVUlSWWdCU2dDS0NFWElBVW9BandoR0VFQklROGdBQ0FCUVFOcVFRSjJJZ1JxSWdNZ0JHb2lBaUFFYWlJWklRUWdBaUVJSUFNaEJ3TkFJQTlCQVhGRklBUWdJRTl5UlFSQUlBQWdDaUFZSUFaMElBdDJRUUowYWlJT0x3RUFPd0FBSUE0dEFBSWhHaUFPTFFBRElSQWdCeUFLSUJjZ0RIUWdDM1pCQW5ScUlnNHZBUUE3QUFBZ0RpMEFBaUViSUE0dEFBTWhEeUFJSUFvZ0ZpQU5kQ0FMZGtFQ2RHb2lEaThCQURzQUFDQU9MUUFDSVJ3Z0RpMEFBeUVkSUFRZ0NpQVZJQWwwSUF0MlFRSjBhaUlPTHdFQU93QUFJQTR0QUFJaEhpQU9MUUFESVE0Z0FDQVFhaUlsSUFvZ0dDQUdJQnBxSWdaMElBdDJRUUowYWlJUUx3RUFPd0FBSUJBdEFBSWdFQzBBQXlFbUlBY2dEMm9pSnlBS0lCY2dEQ0FiYWlJYWRDQUxka0VDZEdvaUJ5OEJBRHNBQUNBSExRQUNJUXdnQnkwQUF5RVFJQWdnSFdvaUd5QUtJQllnRFNBY2FpSVBkQ0FMZGtFQ2RHb2lDQzhCQURzQUFDQUlMUUFDSVEwZ0NDMEFBeUVjSUFRZ0Rtb2lIU0FLSUJVZ0NTQWVhaUlPZENBTGRrRUNkR29pQ1M4QkFEc0FBQ0FHYWlFQVFRTWhCd0ovSUJRZ0pFa0VRQ0FBSVFaQkF3d0JDeUFBUVFkeElRWWdGQ0FBUVFOMmF5SVVLQUFBSVJoQkFBc2dDUzBBQXlFZUlBa3RBQUloQ0NBTUlCcHFJUUFnRXlBalNRUi9JQUFGSUJNZ0FFRURkbXNpRXlnQUFDRVhRUUFoQnlBQVFRZHhDeUVNSUEwZ0Qyb2hBQ0FIY2lFSlFRTWhEd0ovSUJJZ0lra0VRQ0FBSVExQkF3d0JDeUFBUVFkeElRMGdFaUFBUVFOMmF5SVNLQUFBSVJaQkFBc2dDQ0FPYWlFQUlBbHlJQkVnSVVrRWZ5QUFCU0FSSUFCQkEzWnJJaEVvQUFBaEZVRUFJUThnQUVFSGNRc2hDU0FsSUNacUlRQWdFQ0FuYWlFSElCc2dIR29oQ0NBZElCNXFJUVFnRDNKRklROE1BUXNMSUFVZ0REWUNMQ0FGSUFZMkFrQWdCU0FOTmdJWUlBVWdDVFlDQkNBRklCUTJBa1FnQlNBVE5nSXdJQVVnRWpZQ0hDQUZJQkUyQWdnZ0JTQVlOZ0k4SUFVZ0Z6WUNLQ0FGSUJZMkFoUWdCU0FWTmdJQUlBSWdCMGtnQUNBRFMzSU5BRUZzSVFrZ0NDQVpTdzBCSUFOQkEyc2hDUU5BSUFWQlBHb1FEMFVnQUNBSlNYRUVRQ0FBSUFvZ0JTZ0NQQ0lOSUFVb0FrQWlESFFnQzNaQkFuUnFJZzR2QVFBN0FBQWdBQ0FPTFFBRGFpSUdJQW9nRFNBTUlBNHRBQUpxSWdCMElBdDJRUUowYWlJTUx3RUFPd0FBSUFVZ0FDQU1MUUFDYWpZQ1FDQUdJQXd0QUFOcUlRQU1BUVVnQTBFQ2F5RU1BMEFnQlVFOGFoQVBJUVlnQlNnQ1BDRU5JQVVvQWtBaENTQUFJQXhMSUFaeVJRUkFJQUFnQ2lBTklBbDBJQXQyUVFKMGFpSUdMd0VBT3dBQUlBVWdDU0FHTFFBQ2FqWUNRQ0FBSUFZdEFBTnFJUUFNQVFzTEEwQWdBQ0FNUzBVRVFDQUFJQW9nRFNBSmRDQUxka0VDZEdvaUJpOEJBRHNBQUNBQUlBWXRBQU5xSVFBZ0NTQUdMUUFDYWlFSkRBRUxDd0pBSUFBZ0EwOE5BQ0FBSUFvZ0RTQUpkQ0FMZGlJQVFRSjBhaUlETFFBQU9nQUFJQU10QUFOQkFVWUVRQ0FKSUFNdEFBSnFJUWtNQVFzZ0NVRWZTdzBBUVNBZ0NTQUtJQUJCQW5ScUxRQUNhaUlBSUFCQklFOGJJUWtMSUFKQkEyc2hEQU5BSUFWQktHb1FEMFVnQnlBTVNYRUVRQ0FISUFvZ0JTZ0NLQ0lHSUFVb0Fpd2lBSFFnQzNaQkFuUnFJZzB2QVFBN0FBQWdCeUFOTFFBRGFpSURJQW9nQmlBQUlBMHRBQUpxSWdCMElBdDJRUUowYWlJR0x3RUFPd0FBSUFVZ0FDQUdMUUFDYWpZQ0xDQURJQVl0QUFOcUlRY01BUVVnQWtFQ2F5RUdBMEFnQlVFb2FoQVBJUU1nQlNnQ0tDRU1JQVVvQWl3aEFDQUdJQWRKSUFOeVJRUkFJQWNnQ2lBTUlBQjBJQXQyUVFKMGFpSURMd0VBT3dBQUlBVWdBQ0FETFFBQ2FqWUNMQ0FISUFNdEFBTnFJUWNNQVFzTEEwQWdCaUFIU1VVRVFDQUhJQW9nRENBQWRDQUxka0VDZEdvaUF5OEJBRHNBQUNBSElBTXRBQU5xSVFjZ0FDQURMUUFDYWlFQURBRUxDd0pBSUFJZ0IwME5BQ0FISUFvZ0RDQUFkQ0FMZGlJQ1FRSjBhaUlETFFBQU9nQUFJQU10QUFOQkFVWUVRQ0FBSUFNdEFBSnFJUUFNQVFzZ0FFRWZTdzBBUVNBZ0FDQUtJQUpCQW5ScUxRQUNhaUlBSUFCQklFOGJJUUFMSUJsQkEyc2hEQU5BSUFWQkZHb1FEMFVnQ0NBTVNYRUVRQ0FJSUFvZ0JTZ0NGQ0lHSUFVb0FoZ2lBblFnQzNaQkFuUnFJZzB2QVFBN0FBQWdDQ0FOTFFBRGFpSURJQW9nQmlBQ0lBMHRBQUpxSWdKMElBdDJRUUowYWlJR0x3RUFPd0FBSUFVZ0FpQUdMUUFDYWpZQ0dDQURJQVl0QUFOcUlRZ01BUVVnR1VFQ2F5RURBMEFnQlVFVWFoQVBJUUlnQlNnQ0ZDRUdJQVVvQWhnaEJ5QURJQWhKSUFKeVJRUkFJQWdnQ2lBR0lBZDBJQXQyUVFKMGFpSUNMd0VBT3dBQUlBVWdCeUFDTFFBQ2FqWUNHQ0FJSUFJdEFBTnFJUWdNQVFzTEEwQWdBeUFJU1VVRVFDQUlJQW9nQmlBSGRDQUxka0VDZEdvaUFpOEJBRHNBQUNBSUlBSXRBQU5xSVFnZ0J5QUNMUUFDYWlFSERBRUxDd0pBSUFnZ0dVOE5BQ0FJSUFvZ0JpQUhkQ0FMZGlJQ1FRSjBhaUlETFFBQU9nQUFJQU10QUFOQkFVWUVRQ0FISUFNdEFBSnFJUWNNQVFzZ0IwRWZTdzBBUVNBZ0J5QUtJQUpCQW5ScUxRQUNhaUlDSUFKQklFOGJJUWNMQTBBZ0JSQVBSU0FFSUNCSmNRUkFJQVFnQ2lBRktBSUFJZ1lnQlNnQ0JDSUNkQ0FMZGtFQ2RHb2lEQzhCQURzQUFDQUVJQXd0QUFOcUlnTWdDaUFHSUFJZ0RDMEFBbW9pQW5RZ0MzWkJBblJxSWdRdkFRQTdBQUFnQlNBQ0lBUXRBQUpxTmdJRUlBTWdCQzBBQTJvaEJBd0JCU0FmUVFKcklRTURRQ0FGRUE4aEFpQUZLQUlBSVFZZ0JTZ0NCQ0VJSUFNZ0JFa2dBbkpGQkVBZ0JDQUtJQVlnQ0hRZ0MzWkJBblJxSWdJdkFRQTdBQUFnQlNBSUlBSXRBQUpxTmdJRUlBUWdBaTBBQTJvaEJBd0JDd3NEUUNBRElBUkpSUVJBSUFRZ0NpQUdJQWgwSUF0MlFRSjBhaUlDTHdFQU93QUFJQVFnQWkwQUEyb2hCQ0FJSUFJdEFBSnFJUWdNQVFzTEFrQWdCQ0FmVHcwQUlBUWdDaUFHSUFoMElBdDJJZ0pCQW5ScUlnTXRBQUE2QUFBZ0F5MEFBMEVCUmdSQUlBZ2dBeTBBQW1vaENBd0JDeUFJUVI5TERRQkJJQ0FJSUFvZ0FrRUNkR290QUFKcUlnSWdBa0VnVHhzaENBdEJiRUZzUVd4QmJFRnNRV3hCYkVGc0lBRWdDRUVnUnhzZ0JTZ0NDQ0FGS0FJTVJ4c2dCMEVnUnhzZ0JTZ0NIQ0FGS0FJZ1J4c2dBRUVnUnhzZ0JTZ0NNQ0FGS0FJMFJ4c2dDVUVnUnhzZ0JTZ0NSQ0FGS0FKSVJ4c2hDUXdKQ3dBTEFBc0FDd0FMQUFzQUN3QUxBQXRCYkNFSkN5QUZRZEFBYWlRQUlBa0w3QkFCSG44akFFSFFBR3NpQlNRQVFXd2hDUUpBSUFOQkNra05BQUpBSUFNZ0FpOEFCQ0lHSUFJdkFBQWlCeUFDTHdBQ0lnaHFha0VHYWlJT1NRMEFJQVF2QVFJaER5QUZRVHhxSUFKQkJtb2lBaUFIRUEwaUNVR0lmMHNOQVNBRlFTaHFJQUlnQjJvaUFpQUlFQTBpQ1VHSWYwc05BU0FGUVJScUlBSWdDR29pQWlBR0VBMGlDVUdJZjBzTkFTQUZJQUlnQm1vZ0F5QU9heEFOSWdsQmlIOUxEUUVnQkVFRWFpRUtJQUFnQVdvaUhFRURheUVkUVFBZ0QydEJIM0VoQ3lBRktBSUlJUkVnQlNnQ0hDRVNJQVVvQWpBaEV5QUZLQUpFSVJRZ0JTZ0NCQ0VKSUFVb0FoZ2hCaUFGS0FJc0lRY2dCU2dDUUNFSUlBVW9BaEFoSGlBRktBSWtJUjhnQlNnQ09DRWdJQVVvQWt3aElTQUZLQUlBSVJVZ0JTZ0NGQ0VXSUFVb0FpZ2hGeUFGS0FJOElSaEJBU0VOSUFBZ0FVRURha0VDZGlJQ2FpSU9JQUpxSWc4Z0Ftb2lHU0VFSUE4aEFpQU9JUU1EUUNBTlJTQUVJQjFQY2tVRVFDQUtJQmdnQ0hRZ0MzWkJBWFJxSWd3dEFBRWhEU0FBSUF3dEFBQTZBQUFnQ2lBWElBZDBJQXQyUVFGMGFpSU1MUUFCSVJBZ0F5QU1MUUFBT2dBQUlBb2dGaUFHZENBTGRrRUJkR29pREMwQUFTRWFJQUlnREMwQUFEb0FBQ0FLSUJVZ0NYUWdDM1pCQVhScUlnd3RBQUVoR3lBRUlBd3RBQUE2QUFBZ0NpQVlJQWdnRFdvaUNIUWdDM1pCQVhScUlnd3RBQUVoRFNBQUlBd3RBQUE2QUFFZ0NpQVhJQWNnRUdvaUIzUWdDM1pCQVhScUlnd3RBQUVoRUNBRElBd3RBQUE2QUFFZ0NpQVdJQVlnR21vaURIUWdDM1pCQVhScUlnWXRBQUVoR2lBQ0lBWXRBQUE2QUFFZ0NpQVZJQWtnRzJvaUczUWdDM1pCQVhScUlna3RBQUVoSWlBRUlBa3RBQUE2QUFFZ0NDQU5haUVHUVFNaENRSi9JQlFnSVVrRVFFRURJUTBnQmd3QkN5QVVJQVpCQTNackloUW9BQUFoR0VFQUlRMGdCa0VIY1FzaENDQUhJQkJxSVFZZ0V5QWdTUVIvSUFZRklCTWdCa0VEZG1zaUV5Z0FBQ0VYUVFBaENTQUdRUWR4Q3lFSElBd2dHbW9oRENBSklBMXlJUkJCQXlFTkFuOGdFaUFmU1FSQUlBd2hCa0VEREFFTElBeEJCM0VoQmlBU0lBeEJBM1pySWhJb0FBQWhGa0VBQ3lBYklDSnFJUXdnRUhJaEVDQVJJQjVKQkg4Z0RBVWdFU0FNUVFOMmF5SVJLQUFBSVJWQkFDRU5JQXhCQjNFTElRa2dCRUVDYWlFRUlBSkJBbW9oQWlBRFFRSnFJUU1nQUVFQ2FpRUFJQTBnRUhKRklRME1BUXNMSUFVZ0J6WUNMQ0FGSUFnMkFrQWdCU0FHTmdJWUlBVWdDVFlDQkNBRklCUTJBa1FnQlNBVE5nSXdJQVVnRWpZQ0hDQUZJQkUyQWdnZ0JTQVlOZ0k4SUFVZ0Z6WUNLQ0FGSUJZMkFoUWdCU0FWTmdJQUlBQWdEa3NnQXlBUFMzSU5BRUZzSVFrZ0FpQVpTdzBCSUE1QkEyc2hDUU5BSUFWQlBHb1FEeUFBSUFsUGNrVUVRQ0FLSUFVb0Fqd2lCaUFGS0FKQUlnZDBJQXQyUVFGMGFpSUlMUUFCSVF3Z0FDQUlMUUFBT2dBQUlBb2dCaUFISUF4cUlnWjBJQXQyUVFGMGFpSUhMUUFBSVFnZ0JTQUdJQWN0QUFGcU5nSkFJQUFnQ0RvQUFTQUFRUUpxSVFBTUFRc0xBMEFnQlVFOGFoQVBJUWNnQlNnQ1BDRUdJQVVvQWtBaENTQUFJQTVQSUFkeVJRUkFJQW9nQmlBSmRDQUxka0VCZEdvaUJpMEFBQ0VISUFVZ0NTQUdMUUFCYWpZQ1FDQUFJQWM2QUFBZ0FFRUJhaUVBREFFTEN3TkFJQUFnRGs5RkJFQWdDaUFHSUFsMElBdDJRUUYwYWlJSExRQUJJQUFnQnkwQUFEb0FBQ0FBUVFGcUlRQWdDV29oQ1F3QkN3c2dEMEVEYXlFQUEwQWdCVUVvYWhBUElBQWdBMDF5UlFSQUlBb2dCU2dDS0NJR0lBVW9BaXdpQjNRZ0MzWkJBWFJxSWdndEFBRWhEaUFESUFndEFBQTZBQUFnQ2lBR0lBY2dEbW9pQm5RZ0MzWkJBWFJxSWdjdEFBQWhDQ0FGSUFZZ0J5MEFBV28yQWl3Z0F5QUlPZ0FCSUFOQkFtb2hBd3dCQ3dzRFFDQUZRU2hxRUE4aEJ5QUZLQUlvSVFZZ0JTZ0NMQ0VBSUFNZ0QwOGdCM0pGQkVBZ0NpQUdJQUIwSUF0MlFRRjBhaUlHTFFBQUlRY2dCU0FBSUFZdEFBRnFOZ0lzSUFNZ0J6b0FBQ0FEUVFGcUlRTU1BUXNMQTBBZ0F5QVBUMFVFUUNBS0lBWWdBSFFnQzNaQkFYUnFJZ2N0QUFFaENDQURJQWN0QUFBNkFBQWdBMEVCYWlFRElBQWdDR29oQUF3QkN3c2dHVUVEYXlFREEwQWdCVUVVYWhBUElBSWdBMDl5UlFSQUlBb2dCU2dDRkNJR0lBVW9BaGdpQjNRZ0MzWkJBWFJxSWdndEFBRWhEaUFDSUFndEFBQTZBQUFnQ2lBR0lBY2dEbW9pQm5RZ0MzWkJBWFJxSWdjdEFBQWhDQ0FGSUFZZ0J5MEFBV28yQWhnZ0FpQUlPZ0FCSUFKQkFtb2hBZ3dCQ3dzRFFDQUZRUlJxRUE4aEJ5QUZLQUlVSVFZZ0JTZ0NHQ0VESUFJZ0dVOGdCM0pGQkVBZ0NpQUdJQU4wSUF0MlFRRjBhaUlHTFFBQUlRY2dCU0FESUFZdEFBRnFOZ0lZSUFJZ0J6b0FBQ0FDUVFGcUlRSU1BUXNMQTBBZ0FpQVpUMFVFUUNBS0lBWWdBM1FnQzNaQkFYUnFJZ2N0QUFFaENDQUNJQWN0QUFBNkFBQWdBa0VCYWlFQ0lBTWdDR29oQXd3QkN3c0RRQ0FGRUE4Z0JDQWRUM0pGQkVBZ0NpQUZLQUlBSWdJZ0JTZ0NCQ0lHZENBTGRrRUJkR29pQnkwQUFTRUlJQVFnQnkwQUFEb0FBQ0FLSUFJZ0JpQUlhaUlDZENBTGRrRUJkR29pQmkwQUFDRUhJQVVnQWlBR0xRQUJhallDQkNBRUlBYzZBQUVnQkVFQ2FpRUVEQUVMQ3dOQUlBVVFEeUVISUFVb0FnQWhCaUFGS0FJRUlRSWdCQ0FjVHlBSGNrVUVRQ0FLSUFZZ0FuUWdDM1pCQVhScUlnWXRBQUFoQnlBRklBSWdCaTBBQVdvMkFnUWdCQ0FIT2dBQUlBUkJBV29oQkF3QkN3c0RRQ0FFSUJ4UFJRUkFJQW9nQmlBQ2RDQUxka0VCZEdvaUJ5MEFBU0VJSUFRZ0J5MEFBRG9BQUNBRVFRRnFJUVFnQWlBSWFpRUNEQUVMQzBGc1FXeEJiRUZzUVd4QmJFRnNRV3dnQVNBQ1FTQkhHeUFGS0FJSUlBVW9BZ3hIR3lBRFFTQkhHeUFGS0FJY0lBVW9BaUJIR3lBQVFTQkhHeUFGS0FJd0lBVW9BalJIR3lBSlFTQkhHeUFGS0FKRUlBVW9Ba2hIR3lFSkRBRUxRV3doQ1FzZ0JVSFFBR29rQUNBSkMxZ0JBMzhDUUNBQUtBS1E2d0VpQVVVTkFDQUJLQUlBSUFGQnROVUJhaWdDQUNJQ0lBRkJ1TlVCYWlnQ0FDSURFQk1nQWdSQUlBTWdBU0FDRVFJQURBRUxJQUVRQmdzZ0FFRUFOZ0tnNndFZ0FFSUFOd09RNndFTDZRTUNCSDhDZmlBQVFRQkJLQkFESVFRZ0FrRUJRUVVnQXhzaUFFa0VRQ0FBRHdzZ0FVVUVRRUYvRHd0QkFTRUdBa0FDUUNBRFFRRkdEUUFnQXlFR0lBRW9BQUFpQlVHbzZyNXBSZzBBUVhZaEF5QUZRWEJ4UWREVXRNSUJSdzBCUVFnaEF5QUNRUWhKRFFFZ0FUVUFCQ0VJSUFSQkFUWUNGQ0FFSUFnM0F3QkJBQThMSUFFZ0FpQUdFQm9pQXlBQ1N3MEFJQVFnQXpZQ0dFRnlJUU1nQUNBQmFpSUZRUUZyTFFBQUlnSkJDSEVOQUNBQ1FTQnhJZ1pGQkVCQmNDRURJQVV0QUFBaUJVR25BVXNOQVNBRlFRZHhyVUlCSUFWQkEzWkJDbXF0aGlJSVFnT0lmaUFJZkNFSklBQkJBV29oQUFzZ0FrRUdkaUVGSUFKQkFuWkJBQ0VEQWtBQ1FBSkFBa0FnQWtFRGNVRUJhdzREQUFFQ0F3c2dBQ0FCYWkwQUFDRURJQUJCQVdvaEFBd0NDeUFBSUFGcUx3QUFJUU1nQUVFQ2FpRUFEQUVMSUFBZ0FXb29BQUFoQXlBQVFRUnFJUUFMUVFGeElRSUNmZ0pBQWtBQ1FBSkFJQVZCQVdzT0F3RUNBd0FMUW44Z0JrVU5BeG9nQUNBQmFqRUFBQXdEQ3lBQUlBRnFNd0FBUW9BQ2ZBd0NDeUFBSUFGcU5RQUFEQUVMSUFBZ0FXb3BBQUFMSVFnZ0JDQUNOZ0lnSUFRZ0F6WUNIQ0FFSUFnM0F3QkJBQ0VESUFSQkFEWUNGQ0FFSUFnZ0NTQUdHeUlJTndNSUlBUkNnSUFJSUFnZ0NFS0FnQWhhR3o0Q0VBc2dBd3RmQVFGL1FiaC9JUU1nQVVFQlFRVWdBaHNpQWs4RWZ5QUFJQUpxUVFGckxRQUFJZ0JCQTNGQkFuUkJvQjVxS0FJQUlBSnFJQUJCQkhaQkRIRkJzQjVxS0FJQWFpQUFRU0J4SWdGRmFpQUJRUVYySUFCQndBQkpjV29GUWJoL0N3c01BQ0FBSUFFZ0FrRUFFQmtMbHdNQ0JYOENmaU1BUVVCcUlnUWtBQUpBQTBBZ0FVRUZUd1JBQWtBZ0FDZ0FBRUZ3Y1VIUTFMVENBVVlFUUVKK0lRY2dBVUVJU1EwRUlBQW9BQVFpQWtGM1N3MEVJQUpCQ0dvaUF5QUJTdzBFSUFKQmdYOUpEUUVNQkFzZ0JFRVlhaUFBSUFFUUd5RUNRbjRnQkNrREdFSUFJQVFvQWl4QkFVY2JJQUliSWdkQ2ZWWU5BeUFISUFoOElnZ2dCMVJDZmlFSERRTUNRQUpBSUFGQkNFa05BQ0FBS0FBQVFYQnhRZERVdE1JQlJ3MEFJQUFvQUFRaUFrRjNTdzBGUWJoL0lBSkJDR29pQWlBQklBSkpHeUVEREFFTElBUkJHR29nQUNBQkVCc2lBa0dJZjBzRVFDQUNJUU1NQVF0QnVIOGhBeUFDRFFBZ0FTQUVLQUl3SWdKcklRVWdBQ0FDYWlFR0EwQWdCaUFGSUFSQkRHb1FIU0lEUVloL1N3MEJJQU5CQTJvaUFpQUZTd1JBUWJoL0lRTU1BZ3NnQlNBQ2F5RUZJQUlnQm1vaEJpQUVLQUlRUlEwQUN5QUVLQUk0Qkg5QnVIOGhBeUFGUVFSSkRRRWdCa0VFYWdVZ0Jnc2dBR3NoQXdzZ0EwR0lmMHNOQXdzZ0FTQURheUVCSUFBZ0Eyb2hBQXdCQ3d0Q2ZpQUlJQUViSVFjTElBUkJRR3NrQUNBSEMyUUJBWDlCdUg4aEF3SkFJQUZCQTBrTkFDQUFMUUFDSVFFZ0FpQUFMd0FBSWdCQkFYRTJBZ1FnQWlBQVFRRjJRUU54SWdNMkFnQWdBaUFBSUFGQkVIUnlRUU4ySWdBMkFnZ0NRQUpBSUFOQkFXc09Bd0lCQUFFTFFXd1BDeUFBSVFNTElBTUxSQUVDZnlBQklBSW9BZ1FpQXlBQktBSUVhaUlFTmdJRUlBQWdBMEVDZEVHZ0hXb29BZ0FnQVNnQ0FFRUFJQVJyZG5FMkFnQWdBUkFQR2lBQUlBSkJDR28yQWdRTHpnRUJCbjlCdW44aENnSkFJQUlvQWdRaUNDQUNLQUlBSWdscUlnMGdBU0FBYTBzTkFFRnNJUW9nQ1NBRUlBTW9BZ0FpQzJ0TERRQWdBQ0FKYWlJRUlBSW9BZ2dpREdzaEFpQUFJQUZCSUdzaUFDQUxJQWxCQUJBZ0lBTWdDU0FMYWpZQ0FBSkFBa0FnQkNBRmF5QU1Ud1JBSUFJaEJRd0JDeUFNSUFRZ0JtdExEUUlnQnlBSElBSWdCV3NpQW1vaUFTQUlhazhFUUNBRUlBRWdDQkFLR2d3Q0N5QUNJQWhxSVFnZ0JDQUJRUUFnQW1zUUNpQUNheUVFQ3lBRUlBQWdCU0FJUVFFUUlBc2dEU0VLQ3lBS0M4Y0VBUUovSUFBZ0Eyb2hCZ0pBSUFOQkIwd0VRQU5BSUFBZ0JrOE5BaUFBSUFJdEFBQTZBQUFnQUVFQmFpRUFJQUpCQVdvaEFnd0FDd0FMSUFSQkFVWUVRQUpBSUFBZ0Ftc2lCVUVIVFFSQUlBQWdBaTBBQURvQUFDQUFJQUl0QUFFNkFBRWdBQ0FDTFFBQ09nQUNJQUFnQWkwQUF6b0FBeUFBSUFJZ0JVRUNkQ0lGUWNBZWFpZ0NBR29pQWlnQUFEWUFCQ0FDSUFWQjRCNXFLQUlBYXlFQ0RBRUxJQUFnQWlrQUFEY0FBQXNnQWtFSWFpRUNJQUJCQ0dvaEFBc2dBU0FHVHdSQUlBQWdBMm9oQVNBRVFRRkhJQUFnQW10QkQwcHlSUVJBQTBBZ0FDQUNLUUFBTndBQUlBSkJDR29oQWlBQVFRaHFJZ0FnQVVrTkFBd0RDd0FMSUFBZ0Fpa0FBRGNBQUNBQUlBSXBBQWczQUFnZ0EwRVJTUTBCSUFCQkVHb2hBQU5BSUFBZ0Fpa0FFRGNBQUNBQUlBSXBBQmczQUFnZ0FDQUNLUUFnTndBUUlBQWdBaWtBS0RjQUdDQUNRU0JxSVFJZ0FFRWdhaUlBSUFGSkRRQUxEQUVMQWtBZ0FDQUJTd1JBSUFBaEFRd0JDeUFCSUFCcklRVUNRQ0FFUVFGSElBQWdBbXRCRDBweVJRUkFJQUloQXdOQUlBQWdBeWtBQURjQUFDQURRUWhxSVFNZ0FFRUlhaUlBSUFGSkRRQUxEQUVMSUFBZ0Fpa0FBRGNBQUNBQUlBSXBBQWczQUFnZ0JVRVJTQTBBSUFCQkVHb2hBQ0FDSVFNRFFDQUFJQU1wQUJBM0FBQWdBQ0FES1FBWU53QUlJQUFnQXlrQUlEY0FFQ0FBSUFNcEFDZzNBQmdnQTBFZ2FpRURJQUJCSUdvaUFDQUJTUTBBQ3dzZ0FpQUZhaUVDQ3dOQUlBRWdCazhOQVNBQklBSXRBQUE2QUFBZ0FVRUJhaUVCSUFKQkFXb2hBZ3dBQ3dBTEM2NEhBZ1YvQVg0akFFR0FBV3NpRVNRQUlCRWdBellDZkVGL0lROENRQUpBQWtBQ1FBSkFJQUlPQkFFQUF3SUVDeUFHUlFSQVFiaC9JUThNQkF0QmJDRVBJQVV0QUFBaUFpQURTdzBESUFnZ0FrRUNkQ0lDYWlnQ0FDRURJQUlnQjJvb0FnQWhBaUFBUVFBNkFBc2dBRUlBTndJQUlBQWdBallDRENBQUlBTTZBQW9nQUVFQU93RUlJQUVnQURZQ0FFRUJJUThNQXdzZ0FTQUpOZ0lBUVFBaER3d0NDeUFLUlFSQVFXd2hEd3dDQzBFQUlROGdDMFVnREVFWlNISU5BVUVJSUFSMFFRaHFJUUJCQUNFREEwQWdBQ0FEVFEwQ0lBTkJRR3NoQXd3QUN3QUxRV3doRHlBUklCRkIvQUJxSUJGQitBQnFJQVVnQmhBTUlnTkJpSDlMRFFBZ0VTZ0NlQ0lDSUFSTERRQWdFU2dDZkVFQmFpRUpJQUJCQ0dvaEMwR0FnQUlnQW5SQkVIVWhCVUVCSVJCQkFTQUNkQ0lQUVFGcklnb2hFZ05BSUFrZ0RrY0VRQUpBSUJFZ0RrRUJkQ0lFYWk4QkFDSU1RZi8vQTBZRVFDQUxJQkpCQTNScUlBNDJBZ1FnRWtFQmF5RVNRUUVoREF3QkN5QVFRUUFnQlNBTXdVb2JJUkFMSUFRZ0RXb2dERHNCQUNBT1FRRnFJUTRNQVFzTElBQWdBallDQkNBQUlCQTJBZ0FDUUNBS0lCSkdCRUFnRFVIcUFHb2hCa0VBSVJCQkFDRU1BMEFnQ1NBUVJnUkFJQTlCQTNZZ0QwRUJkbXBCQTJvaUJVRUJkQ0VFUVFBaERFRUFJUklEUUVFQUlRNGdEeUFTVFEwRUEwQWdEa0VDUndSQUlBc2dCU0FPYkNBTWFpQUtjVUVEZEdvZ0JpQU9JQkpxYWkwQUFEWUNCQ0FPUVFGcUlRNE1BUXNMSUJKQkFtb2hFaUFFSUF4cUlBcHhJUXdNQUFzQUJTQVJJQkJCQVhScUxnRUFJUVVnQmlBTWFpSUVJQk0zQUFCQkNDRU9BMEFnQlNBT1NnUkFJQVFnRG1vZ0V6Y0FBQ0FPUVFocUlRNE1BUXNMSUJOQ2dZS0VpSkNnd0lBQmZDRVRJQkJCQVdvaEVDQUZJQXhxSVF3TUFRc0FDd0FMSUE5QkEzWWdEMEVCZG1wQkEyb2hCVUVBSVJCQkFDRU9BMEFnQ1NBUVJnMEJRUUFoRENBUklCQkJBWFJxTGdFQUlnUkJBQ0FFUVFCS0d5RUVBMEFnQkNBTVJ3UkFJQXNnRGtFRGRHb2dFRFlDQkFOQUlBVWdEbW9nQ25FaURpQVNTdzBBQ3lBTVFRRnFJUXdNQVFzTElCQkJBV29oRUF3QUN3QUxJQUpCQVdvaEJVRUFJUXdEUUNBTUlBOUhCRUFnRFNBTElBeEJBM1JxSWdrb0FnUWlCRUVCZEdvaUFpQUNMd0VBSWdaQkFXbzdBUUFnQ1NBRklBWm5RV0J6YWlJQ09nQURJQWtnQmlBQ2RDQVBhenNCQUNBSklBZ2dCRUVDZENJQ2FpZ0NBRG9BQWlBSklBSWdCMm9vQWdBMkFnUWdERUVCYWlFTURBRUxDeUFCSUFBMkFnQWdBeUVQQ3lBUlFZQUJhaVFBSUE4TDdWb0NPMzhHZmlNQVFlQUJheUlFSkFBQ1FFR3c3QWtRQlNJRlJRUkFRVUFoQnd3QkN5QUZRZ0EzQXZUcUFTQUZRUUEyQXNUckFTQUZRUUEyQXJUckFTQUZRZ0EzQXB6ckFTQUZRUUEyQXJqcEFTQUZRUUEyQXF6c0NTQUZRZ0EzQXRUckFTQUZRZ0EzQXF6ckFTQUZRZ0EzQTRqckFTQUZRZ0EzQXVUcUFTQUZRZ0EzQXVUckFTQUZRWUdBZ01BQU5nSzg2d0VnQlVJQU53S2s2d0VnQlVIODZnRnFRUUEyQWdBZ0JVR1E2d0ZxUWdBM0F3QWdCUkFZSUFWQnJOVUJhaUVVSUFWQitPc0JhaUVjSUFWQnNPb0JhaUVpSUFWQm9EQnFJU29nQlVHWUlHb2hLeUFGUWFqUUFHb2hIaUFGUVJCcUlTd2dCVUVJYWlFb0lBVkJCR29oTFNBRlFjRHBBV29oS1NBRlFZanJBV29nQkVHVUFXb2hMeUFFUVl3QmFpRXdJQVJCaEFGcUlURWdCRUhjQUdvaE1pQUVRZFFBYWlFeklBUkJ6QUJxSVRRZ0FDRWRBa0FDUUFKQUFrQUNRQU5BUVFGQkJTQUZLQUxrNmdFYklRWUNRQU5BSUFNZ0Jra05BU0FDS0FBQVFYQnhRZERVdE1JQlJnUkFRYmgvSVFjZ0EwRUlTUTBJSUFJb0FBUWlEa0YzU3dSQVFYSWhCd3dKQ3lBRElBNUJDR29pQ1VrTkNDQU9RWUIvU3dSQUlBa2hCd3dKQ3lBRElBbHJJUU1nQWlBSmFpRUNEQUVMQ3lBRlFnQTNBcXpwQVNBRlFnQTNBK2pwQVNBRlFRQTJBcGpyQVNBRlFnQTNBNERxQVNBRlFnTTNBL2pwQVNBRlFiVHBBV3BDQURjQ0FDQUZRZkRwQVdwQ0FEY0RBQ0FGUWFqUUFHb2lDVUdNZ0lEZ0FEWUNBQ0FGUWF6UUFXcEI0QklwQWdBM0FnQWdCVUcwMEFGcVFlZ1NLQUlBTmdJQUlBVWdCVUVRYWpZQ0FDQUZJQVZCb0RCcU5nSUVJQVVnQlVHWUlHbzJBZ2dnQlNBSk5nSU1JQVZCQVVFRklBVW9BdVRxQVJzMkFyenBBUUpBSUFGRkRRQWdCU2dDck9rQklna2dIVVlOQUNBRklBazJBcmpwQVNBRklCMDJBcXpwQVNBRktBS3c2UUVoRGlBRklCMDJBckRwQVNBRklCMGdEaUFKYTJvMkFyVHBBUXRCdUg4aENTQURRUVZCQ1NBRktBTGs2Z0VpQmh0SkRRVWdBa0VCUVFVZ0Joc2dCaEFhSWc1QmlIOUxCRUFnRGlFSkRBVUxJQU1nRGtFRGFra05CU0FwSUFJZ0RpQUdFQmtpQmtHSWYwc0VRQ0FHSVFrTUJRc2dCZzBGQWtBQ1FDQUZLQUtvNndGQkFVY05BQ0FGS0FLazZ3RWlDVVVOQUNBRktBS1U2d0ZGRFFBZ0NTZ0NCRUVCYXlJSElBVW9BdHpwQVNJS3JVS0hsYSt2bUxiZW01NS9ma0xKejlteThlVzY2aWVGUWhlSlFzL1cwNzdTeDZ2WlFuNUMrZlBkOFpuMm1hc1dmQ0kvUWlHSUlEK0ZRcy9XMDc3U3g2dlpRbjRpUDBJZGlDQS9oVUw1ODkzeG1mYVpxeForSWo5Q0lJZ2dQNFduY1NFR0lBa29BZ0FoRlFOQVFRQWhDQUpBSUJVZ0JrRUNkR29vQWdBaUNVVU5BQ0FKS0FJSVFRaEpEUUFnQ1NnQ0JDSVNLQUFBUWJmSXd1RitSdzBBSUJJb0FBUWhDQXNnQ0NBS1J3UkFJQVlnQjNGQkFXb2hCaUFJRFFFTEN5QUpSUTBBSUFVUUdDQUZRWDgyQXFEckFTQUZJQWsyQXBUckFTQUZJQVVvQXR6cEFTSUlOZ0tZNndFTUFRc2dCU2dDM09rQklRZ0xBa0FnQ0VVTkFDQUZLQUtZNndFZ0NFWU5BRUZnSVFrTUJnc0NRQ0FGS0FMZzZRRUVRQ0FGSUFVb0F1anFBU0lKUlRZQzdPb0JJQWtOQVNBRlF2bnEwTkRueWFIazRRQTNBNmpxQVNBRlFnQTNBNkRxQVNBRlFzL1cwNzdTeDZ2WlFqY0RtT29CSUFWQzF1dUM3dXI5aWZYZ0FEY0RrT29CSUFWQ0FEY0RpT29CSUNKQkFFRW9FQU1hREFFTElBVkJBRFlDN09vQkN5QUJJQjFxSVNVZ0JTQUZLUVBvNlFFZ0RxMThOd1BvNlFFZ0F5QU9heUVESUFJZ0Rtb2hBaUFkSVE0RFFDQUNJQU1nQkVFc2FoQWRJaFZCaUg5TEJFQWdGU0VKREFZTElBTkJBMnNpTlNBVlNRMEVJQUpCQTJvaEcwRnNJUWtDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FDQUVLQUlzRGdNQ0FRQVZDeUFWUWYvL0Iwc05FeUFWUVFOSkRSSWdCU2tEeU9rQklUOENRQUpBSUJzdEFBQWlDVUVEY1NJYVFRRnJEZ01HQVFBSEN5QUZLQUtBNmdFTkFFRmlJUWtNRlFzZ0ZVRUZTUTBTSUJzb0FBQWhBd0ovQWtBQ1FBSkFJQWxCQW5aQkEzRWlDVUVDYXc0Q0FRSUFDeUFKUVFCSElRY2dBMEVFZGtIL0IzRWhDMEVESVFZZ0EwRU9ka0gvQjNFTUFndEJCQ0VHSUFOQkJIWkIvLzhBY1NFTFFRRWhCeUFEUVJKMkRBRUxJQU5CQkhaQi8vOFBjU0lMUVlDQUNFc05FMEVCSVFkQkJTRUdJQUl0QUFkQkNuUWdBMEVXZG5JTElnZ2dCbW9pQ1NBVlN3MFNBa0FnQzBHQkJra05BQ0FGS0FLYzZ3RkZEUUJCQUNFREEwQWdBMEdEZ0FGTERRRWdBMEZBYXlFRERBQUxBQXNnQmlBYmFpRVBJQnBCQTBjTkJpQUZLQUlNSWdJdEFBRkJDSFFoQXlBSERRY2dBMFVOQ0NBRVFmQUFhaUFQSUFnUURTSURRWWgvU3cwSklBSkJCR29oQmlBTElCeHFJaEpCQTJzaENrRUFJQUl2QVFKclFSOXhJUWNnSENFREEwQWdCRUh3QUdvUUQwVWdBeUFLU1hFRVFDQURJQVlnQkNnQ2NDSUlJQVFvQW5RaUQzUWdCM1pCQW5ScUlnSXZBUUE3QUFBZ0F5QUNMUUFEYWlJRElBWWdDQ0FQSUFJdEFBSnFJZ2gwSUFkMlFRSjBhaUlDTHdFQU93QUFJQVFnQ0NBQ0xRQUNhallDZENBRElBSXRBQU5xSVFNTUFRVWdFa0VDYXlFSUEwQWdCRUh3QUdvUUR5RVBJQVFvQW5BaENpQUVLQUowSVFJZ0F5QUlTeUFQY2tVRVFDQURJQVlnQ2lBQ2RDQUhka0VDZEdvaUNpOEJBRHNBQUNBRUlBSWdDaTBBQW1vMkFuUWdBeUFLTFFBRGFpRUREQUVMQ3dOQUlBTWdDRTBFUUNBRElBWWdDaUFDZENBSGRrRUNkR29pRHk4QkFEc0FBQ0FESUE4dEFBTnFJUU1nQWlBUExRQUNhaUVDREFFTEN3SkFJQU1nRWs4TkFDQURJQVlnQ2lBQ2RDQUhka0VDZEdvaUF5MEFBRG9BQUNBRExRQURRUUZHQkVBZ0FpQURMUUFDYWlFQ0RBRUxJQUpCSDBzTkFFRWdJQUlnQXkwQUFtb2lBaUFDUVNCUEd5RUNDMEZzUVd3Z0N5QUVLQUo0SUFRb0FueEhHeUFDUVNCSEd5RUREQXNMQUFzQUN5QUVLQUkwSWdJZ0pTQU9hMHNOQ2lBT1JRUkFRUUFoQ1NBQ0RRSU1EZ3NnRGlBYkxRQUFJQUlRQXhvZ0FpRUpEQXdMSUJVZ0pTQU9hMHNOQ1NBT0RRRkJBQ0VKSUJWRkRRd0xRYlovSVFrTUVRc2dEaUFiSUJVUUFob2dGU0VKREFvTElCd2dHd0ovQWtBQ1FBSkFJQWxCQW5aQkEzRkJBV3NPQXdFQUFnQUxJQWxCQTNZaEEwRUJEQUlMSUJzdkFBQkJCSFloQTBFQ0RBRUxJQlZCQkVrTkRpQUNMd0FESUFJdEFBVkJFSFJ5SWdKQmo0Q0FBVXNORGlBQ1FRUjJJUU5CQXdzaUFtb3RBQUFnQTBFZ2FoQURJUWtnQlNBRE5nS0E2d0VnQlNBSk5nTHc2Z0VnQWtFQmFpRUpEQVVMSUJVQ2Z3SkFBa0FDUUNBSlFRSjJRUU54UVFGckRnTUJBQUlBQ3lBSlFRTjJJUU5CQVF3Q0N5QWJMd0FBUVFSMklRTkJBZ3dCQ3lBQ0x3QURJQUl0QUFWQkVIUnlRUVIySVFOQkF3c2lBaUFEYWlJSlFTQnFTUVJBSUFrZ0ZVc05EU0FjSUFJZ0cyb2dBeEFDSVFJZ0JTQUROZ0tBNndFZ0JTQUNOZ0x3NmdFZ0FpQURhaUlDUWdBM0FCZ2dBa0lBTndBUUlBSkNBRGNBQ0NBQ1FnQTNBQUFNQlFzZ0JTQUROZ0tBNndFZ0JTQUNJQnRxTmdMdzZnRU1CQXNnQjBVRVFDQWVJQThnQ0NBVUVCUWlBa0dJZjBzZ0FpQUlUM0lORENBY0lBc2dBaUFQYWlBSUlBSnJJQjRRRlNFRERBTUxJQXRGSUFoRmNnMExJQXRCQ0hZaUF5QUlJQXRKQkg4Z0NFRUVkQ0FMYmdWQkR3dEJHR3dpQWtHTUNHb29BZ0JzSUFKQmlBaHFLQUlBYWlJR1FRTjJJQVpxSUFKQmdBaHFLQUlBSUFKQmhBaHFLQUlBSUFOc2Fra0VRQ01BUVJCckloQWtBQ0FlS0FJQUlRTWdGRUh3QkdwQkFFSHNBQkFESVFaQlZDRUNBa0FnQTBIL0FYRWlERUVNU3cwQUFrQWdGRUhjQ1dvZ0JpQVFRUWhxSUJCQkRHb2dEeUFJSUJSQjNBdHFJaGNRQ3lJU1FZaC9TdzBBSUJBb0Fnd2lCaUFNU3cwQklCUkJxQVZxSVEwZ0ZFR2tCV29oTmlBZVFRUnFJUkVnQTBHQWdJQjRjU0UzSUFaQkFXb2lFeUVDSUFZaEF3TkFJQUlpQjBFQmF5RUNJQU1pQ2tFQmF5RURJQlFnQ2tFQ2RHb29BdkFFUlEwQUMwRUJJQWNnQjBFQlRSc2hGa0VBSVFkQkFTRUNBMEFnQWlBV1J3UkFJQlFnQWtFQ2RDSURhaWdDOEFRaEdDQURJQTFxSUFjMkFnQWdBa0VCYWlFQ0lBY2dHR29oQnd3QkN3c2dEU0FITmdJQVFRQWhBaUFRS0FJSUlRTURRQ0FDSUFOSEJFQWdEU0FDSUJScVFkd0phaTBBQUNJWVFRSjBhaUlaSUJrb0FnQWlHVUVCYWpZQ0FDQVVJQmxCQVhScUloa2dHRG9BM1FVZ0dTQUNPZ0RjQlNBQ1FRRnFJUUlNQVFzTFFRQWhBeUFOUVFBMkFnQWdEQ0FHUVg5emFpRUdRUUVoQWdOQUlBSWdGa2NFUUNBVUlBSkJBblJxSWcwZ0F6WUNBQ0FOS0FMd0JDQUNJQVpxZENBRGFpRURJQUpCQVdvaEFnd0JDd3NnRENBVElBcHJJZ1pyUVFGcUlRb2dCaUVEQTBBZ0F5QUtTUVJBSUJRZ0EwRTBiR29oRFVFQklRSURRQ0FDSUJaSEJFQWdEU0FDUVFKMEloaHFJQlFnR0dvb0FnQWdBM1kyQWdBZ0FrRUJhaUVDREFFTEN5QURRUUZxSVFNTUFRc0xJQmNnRkVFMEVBSWhPQ0FVUVpBTWFpRTVJQk1nREdzaE9pQVVRZHdGYWlFWFFRQWhDZ05BQWtBQ1FDQUhJQXBIQkVCQkFTQU1JQk1nRnlBS1FRRjBhaUlDTFFBQklnMXJJZ05ySWhoMElSa2dBaTBBQUNFV0lEZ2dEVUVDZEdvaUh5Z0NBQ0VDSUFZZ0dFMEVRQ0EyUVFFZ0F5QTZhaUlOSUExQkFVd2JJaUJCQW5RaUpHb29BZ0FoRFNBNUlCUWdBMEUwYkdwQk5CQUNJU0VnRFVFQmRDRW1JQkVnQWtFQ2RHb2hJeUFnUVFGTkRRSWdBMEVRZEVHQWdQd0hjU0FXY2tHQWdJQUljaUVnSUNFZ0pHb29BZ0FoSkVFQUlRSURRQ0FDSUNSR0RRTWdJeUFDUVFKMGFpQWdOZ0VBSUFKQkFXb2hBZ3dBQ3dBTElBSWdBaUFaYWlJTklBSWdEVXNiSVEwZ0EwRVFkRUdBZ1B3SGNTQVdja0dBZ0lBSWNpRURBMEFnQWlBTlJnMERJQkVnQWtFQ2RHb2dBellCQUNBQ1FRRnFJUUlNQUFzQUN5QWVJQXhCRUhRZ04zSWdESEpCZ0FKeU5nSUFEQU1MSUFjZ0RXc2hKQ0FYSUNacUlTWkJBQ0VOQTBBZ0RTQWtSZzBCUVFFZ0dDQVRJQ1lnRFVFQmRHb2lKeTBBQVNJQ2F5STdhM1FpUENBaElBSkJBblJxSWlBb0FnQWlBbW9oUFNBRElEdHFRUkIwUVlDQS9BZHhJQ2N0QUFCQkNIUnlJQlp5UVlDQWdCQnlJU2NEUUNBaklBSkJBblJxSUNjMkFRQWdBa0VCYWlJQ0lEMUpEUUFMSUNBZ0lDZ0NBQ0E4YWpZQ0FDQU5RUUZxSVEwTUFBc0FDeUFmSUI4b0FnQWdHV28yQWdBZ0NrRUJhaUVLREFBTEFBc2dFaUVDQ3lBUVFSQnFKQUFnQWtHSWYwc2dBaUFJVDNJTkRDQWNJQXNnQWlBUGFpQUlJQUpySUI0UUZpRUREQU1MSUI0Z0R5QUlJQlFRRkNJQ1FZaC9TeUFDSUFoUGNnMExJQndnQ3lBQ0lBOXFJQWdnQW1zZ0hoQVhJUU1NQWdzZ0F3UkFJQndnQ3lBUElBZ2dBaEFXSVFNTUFnc2dIQ0FMSUE4Z0NDQUNFQmNoQXd3QkN5QWNJQXNnRHlBSUlBSVFGU0VEQ3lBRFFZaC9TdzBJSUFVZ0N6WUNnT3NCSUFVZ0hEWUM4T29CSUFWQkFUWUNnT29CSUJwQkFrWUVRQ0FGSUI0MkFnd0xJQXNnSEdvaUFrSUFOd0FBSUFKQ0FEY0FHQ0FDUWdBM0FCQWdBa0lBTndBSUlBbEJpSDlMRFFvTElBa2dGVVlOQ0NBVklBbHJJUVlnQlNnQ25Pc0JJUW9DUUNBSklCdHFJZ010QUFBaUQwVUVRRUVCSVFKQkFDRVBRYmgvSVFrZ0JrRUJSZzBCREFzTEFuOGdBMEVCYWlBUHdDSUNRUUJPRFFBYUlBSkJmMFlFUUNBR1FRTklEUXNnQXk4QUFVR0EvZ0ZxSVE4Z0EwRURhZ3dCQ3lBR1FRSklEUW9nQXkwQUFTQVBRUWgwY2tHQWdBSnJJUThnQTBFQ2Fnc2hFa0c0ZnlFSklCSkJBV29pQWlBVklCdHFJZ2RMRFFvZ0xDQUZJQkl0QUFBaUVrRUdka0VqUVFrZ0FpQUhJQUpyUWNBUVFkQVJRZkFTSUFVb0FvVHFBU0FLSUE4Z0ZCQWhJZ2xCaUg5TERRZ2dLeUFvSUJKQkJIWkJBM0ZCSDBFSUlBSWdDV29pQWlBSElBSnJRWUFMUVlBTVFZQVhJQVVvQW9UcUFTQUZLQUtjNndFZ0R5QVVFQ0VpQ0VHSWYwc05DRUZzSVFrZ0tpQXRJQkpCQW5aQkEzRkJORUVKSUFJZ0NHb2lBaUFISUFKclFZQU5RZUFPUVpBWklBVW9Bb1RxQVNBRktBS2M2d0VnRHlBVUVDRWlCMEdJZjBzTkNpQUNJQWRxSUFOcklnSWhDU0FDUVloL1N3MEtDeUFPSUE5QkFFeHlEUUVMUWJwL0lRa01DQXNnSlNBT2F5RUpJQVlnQW1zaEJpQUNJQU5xSVFjQ1FBSkFBa0FnQ2tVRVFDQVBRUWxJSUFVcEE4anBBVUtCZ0lBSVZISU5BaUFvS0FJQUlnSkJDR29oRWlBQ0tBSUVJUXBCQUNFRFFRQWhBZ05BSUFNZ0NuWkZCRUFnQWlBU0lBTkJBM1JxTFFBQ1FSWkxhaUVDSUFOQkFXb2hBd3dCQ3dzZ0JVRUFOZ0tjNndFZ0FrRUlJQXByZEVFVVR3MEJEQU1MSUFWQkFEWUNuT3NCQ3lBRUlBVW9BdkRxQVNJRE5nTGNBU0FKSUE1cUlSWWdBeUFGS0FLQTZ3RnFJUmNDUUNBUFJRUkFJQTRoQnd3QkN5QUZLQUs0NlFFaEdpQUZLQUswNlFFaEdDQUZLQUt3NlFFaEVpQUZRUUUyQW9UcUFVRUFJUU1EUUNBRFFRTkhCRUFnQkNBRFFRSjBJZ0pxSUFJZ0JXcEJyTkFCYWlnQ0FEWUNaQ0FEUVFGcUlRTU1BUXNMUVd3aENTQUVRVGhxSWdJZ0J5QUdFQTFCaUg5TERRTkJDQ0FQSUE5QkNFNGJJUjhnTkNBQ0lBVW9BZ0FRSGlBeklBSWdCU2dDQ0JBZUlESWdBaUFGS0FJRUVCNGdEaUFTYXlFWlFRQWhDQU5BSUFSQk9Hb1FEMEVEUmlBSUlCOU9ja1VFUUNBRUtBSlFJQVFvQWt4QkEzUnFLUUlBSWtDbklnZEJFSFlpRVVIL0FYRWhDeUFFS0FKZ0lBUW9BbHhCQTNScUtRSUFJa0duSWd4QkVIWWlJVUgvQVhFaEVDQUVLQUpZSUFRb0FsUkJBM1JxS1FJQUlrSkNJSWluSVFZZ1FVSWdpQ0JBUWlDSXB5RURBa0FnUWtJUWlLY2lDa0gvQVhFaUFrRUNUd1JBQWtBZ0FrRVpTU0EvUW9HQWdCQlVja1VFUUNBRVFTQWdCQ2dDUENJS2F5SU5JQUlnQWlBTlN4c2lFeUFLYWpZQ1BDQUdJQVFvQWpnZ0NuUkJBQ0FUYTNZZ0FpQVRheUlUZEdvaENpQUVRVGhxRUE4YUlBSWdEVTBOQVNBRUlBUW9BandpQWlBVGFqWUNQQ0FFS0FJNElBSjBRUUFnRTJ0MklBcHFJUW9NQVFzZ0JDQUNJQVFvQWp3aURXbzJBandnQkNnQ09DQU5kRUVBSUFwcmRpQUdhaUVLSUFSQk9Hb1FEeG9MSUFRcEFtUWhSQ0FFSUFvMkFtUWdCQ0JFTndKb0RBRUxBa0FnQWtVRVFDQURCRUFnQkNnQ1pDRUtEQU1MSUFRb0FtZ2hDZ3dCQ3lBRUlBUW9BandpQWtFQmFqWUNQQUovSUFZZ0EwVnFJQVFvQWpnZ0FuUkJIM1pxSWdKQkEwWUVRQ0FFS0FKa1FRRnJEQUVMSUFKQkFuUWdCR29vQW1RTElnWkZJQVpxSVFvZ0FrRUJSd1JBSUFRZ0JDZ0NhRFlDYkFzTElBUWdCQ2dDWkRZQ2FDQUVJQW8yQW1RTHB5RUNJRUZDZ0lEOEI0TlFSUVJBSUFRZ0JDZ0NQQ0lHSUJCcU5nSThJQVFvQWpnZ0JuUkJBQ0FoYTNZZ0Ftb2hBZ3NnQ3lBUWFrRVVUd1JBSUFSQk9Hb1FEeG9MSUVCQ2dJRDhCNE5RUlFSQUlBUWdCQ2dDUENJR0lBdHFOZ0k4SUFRb0FqZ2dCblJCQUNBUmEzWWdBMm9oQXdzZ0JFRTRhaEFQR2lBRUlBUW9BamdpQmtFQUlBZEJHSFlpQ3lBRUtBSThhaUlRYTNZZ0MwRUNkRUdnSFdvb0FnQnhJQWRCLy84RGNXbzJBa3dnQkNBUUlBeEJHSFlpQjJvaUN6WUNQQ0FFSUFkQkFuUkJvQjFxS0FJQUlBWkJBQ0FMYTNaeElBeEIvLzhEY1dvMkFsd2dCRUU0YWhBUEdpQUVJRUtuSWdaQkdIWWlCeUFFS0FJOGFpSUxOZ0k4SUFRZ0IwRUNkRUdnSFdvb0FnQWdCQ2dDT0VFQUlBdHJkbkVnQmtILy93TnhhallDVkNBRVFmQUFhaUFJUVF4c2FpSUdJQW8yQWdnZ0JpQUNOZ0lFSUFZZ0F6WUNBQ0FJUVFGcUlRZ2dBeUFaYWlBQ2FpRVpEQUVMQ3lBSUlCOUlEUU1nRmtFZ2F5RWhJQTRoQndOQUlBUkJPR29RRDBFRFJpQUlJQTlPY2tVRVFDQUVLQUpRSUFRb0FreEJBM1JxS1FJQUlrQ25JZ1pCRUhZaUkwSC9BWEVoQ2lBRUtBSmdJQVFvQWx4QkEzUnFLUUlBSWtHbklnMUJFSFlpSUVIL0FYRWhFeUFFS0FKWUlBUW9BbFJCQTNScUtRSUFJa0pDSUlpbklRTWdRVUlnaUNCQVFpQ0lweUVMQWtBZ1FrSVFpS2NpREVIL0FYRWlBa0VDVHdSQUFrQWdBa0VaU1NBL1FvR0FnQkJVY2tVRVFDQUVRU0FnQkNnQ1BDSU1heUlSSUFJZ0FpQVJTeHNpRUNBTWFqWUNQQ0FESUFRb0FqZ2dESFJCQUNBUWEzWWdBaUFRYXlJTWRHb2hFQ0FFUVRocUVBOGFJQUlnRVUwTkFTQUVJQVFvQWp3aUFpQU1hallDUENBRUtBSTRJQUowUVFBZ0RHdDJJQkJxSVJBTUFRc2dCQ0FDSUFRb0Fqd2lFR28yQWp3Z0JDZ0NPQ0FRZEVFQUlBeHJkaUFEYWlFUUlBUkJPR29RRHhvTElBUXBBbVFoUkNBRUlCQTJBbVFnQkNCRU53Sm9EQUVMQWtBZ0FrVUVRQ0FMQkVBZ0JDZ0NaQ0VRREFNTElBUW9BbWdoRUF3QkN5QUVJQVFvQWp3aUFrRUJhallDUEFKL0lBTWdDMFZxSUFRb0FqZ2dBblJCSDNacUlnSkJBMFlFUUNBRUtBSmtRUUZyREFFTElBSkJBblFnQkdvb0FtUUxJZ05GSUFOcUlSQWdBa0VCUndSQUlBUWdCQ2dDYURZQ2JBc0xJQVFnQkNnQ1pEWUNhQ0FFSUJBMkFtUUxweUVNSUVGQ2dJRDhCNE5RUlFSQUlBUWdCQ2dDUENJQ0lCTnFOZ0k4SUFRb0FqZ2dBblJCQUNBZ2EzWWdER29oREFzZ0NpQVRha0VVVHdSQUlBUkJPR29RRHhvTElFQkNnSUQ4QjROUVJRUkFJQVFnQkNnQ1BDSUNJQXBxTmdJOElBUW9BamdnQW5SQkFDQWphM1lnQzJvaEN3c2dCRUU0YWhBUEdpQUVJQVFvQWpnaUFrRUFJQVpCR0hZaUF5QUVLQUk4YWlJS2EzWWdBMEVDZEVHZ0hXb29BZ0J4SUFaQi8vOERjV28yQWt3Z0JDQUtJQTFCR0hZaUEyb2lCallDUENBRUlBTkJBblJCb0IxcUtBSUFJQUpCQUNBR2EzWnhJQTFCLy84RGNXbzJBbHdnQkVFNGFoQVBHaUFFSUVLbklnSkJHSFlpQXlBRUtBSThhaUlHTmdJOElBUWdBMEVDZEVHZ0hXb29BZ0FnQkNnQ09FRUFJQVpyZG5FZ0FrSC8vd054YWpZQ1ZBSkFBa0FDUUNBRUtBTGNBU0lESUFSQjhBQnFJQWhCQjNGQkRHeHFJaE1vQWdBaUVXb2lJeUFYU3cwQUlBY2dFeWdDQkNJTklCRnFJZ3BxSUNGTERRQWdDa0VnYWlBV0lBZHJUUTBCQ3lBRUlCTW9BZ2cyQWhnZ0JDQVRLUUlBTndNUUlBY2dGaUFFUVJCcUlBUkIzQUZxSUJjZ0VpQVlJQm9RSHlFS0RBRUxJQWNnRVdvaEFpQVRLQUlJSVFZZ0J5QURLUUFBTndBQUlBY2dBeWtBQ0RjQUNBSkFJQkZCRVVrTkFDQUhJQU1wQUJBM0FCQWdCeUFES1FBWU53QVlJQkZCRUd0QkVVZ05BQ0FEUVJCcUlRTWdCMEVnYWlFUkEwQWdFU0FES1FBUU53QUFJQkVnQXlrQUdEY0FDQ0FSSUFNcEFDQTNBQkFnRVNBREtRQW9Od0FZSUFOQklHb2hBeUFSUVNCcUloRWdBa2tOQUFzTElBSWdCbXNoQXlBRUlDTTJBdHdCSUFJZ0Vtc2dCa2tFUUNBR0lBSWdHR3RMRFFjZ0dpQWFJQU1nRW1zaUEyb2lFU0FOYWs4RVFDQUNJQkVnRFJBS0dnd0NDeUFESUExcUlRMGdBaUFSUVFBZ0Eyc1FDaUFEYXlFQ0lCSWhBd3NnQmtFUVR3UkFJQUlnQXlrQUFEY0FBQ0FDSUFNcEFBZzNBQWdnRFVFUlNBMEJJQUlnRFdvaEJpQUNRUkJxSVFJRFFDQUNJQU1wQUJBM0FBQWdBaUFES1FBWU53QUlJQUlnQXlrQUlEY0FFQ0FDSUFNcEFDZzNBQmdnQTBFZ2FpRURJQUpCSUdvaUFpQUdTUTBBQ3d3QkN3SkFJQVpCQjAwRVFDQUNJQU10QUFBNkFBQWdBaUFETFFBQk9nQUJJQUlnQXkwQUFqb0FBaUFDSUFNdEFBTTZBQU1nQWlBRElBWkJBblFpQmtIQUhtb29BZ0JxSWdNb0FBQTJBQVFnQXlBR1FlQWVhaWdDQUdzaEF3d0JDeUFDSUFNcEFBQTNBQUFMSUExQkNVa05BQ0FDSUExcUlSRWdBa0VJYWlJR0lBTkJDR29pQTJ0QkQwd0VRQU5BSUFZZ0F5a0FBRGNBQUNBRFFRaHFJUU1nQmtFSWFpSUdJQkZKRFFBTUFnc0FDeUFHSUFNcEFBQTNBQUFnQmlBREtRQUlOd0FJSUExQkdVZ05BQ0FDUVJocUlRSURRQ0FDSUFNcEFCQTNBQUFnQWlBREtRQVlOd0FJSUFJZ0F5a0FJRGNBRUNBQ0lBTXBBQ2czQUJnZ0EwRWdhaUVESUFKQklHb2lBaUFSU1EwQUN3c2dDa0dJZjBzRVFDQUtJUWtNQmdVZ0V5QVFOZ0lJSUJNZ0REWUNCQ0FUSUFzMkFnQWdDRUVCYWlFSUlBY2dDbW9oQnlBTElCbHFJQXhxSVJrTUFnc0FDd3NnQ0NBUFNBMERJQWdnSDJzaEJnTkFBa0FnQmlBUFRnUkFRUUFoQXdOQUlBTkJBMFlOQWlBRklBTkJBblFpQW1wQnJOQUJhaUFDSUFScUtBSmtOZ0lBSUFOQkFXb2hBd3dBQ3dBTEFrQUNRQUpBSUFRb0F0d0JJZ01nQkVId0FHb2dCa0VIY1VFTWJHb2lDQ2dDQUNJTWFpSVFJQmRMRFFBZ0J5QUlLQUlFSWdzZ0RHb2lDbW9nSVVzTkFDQUtRU0JxSUJZZ0IydE5EUUVMSUFRZ0NDZ0NDRFlDS0NBRUlBZ3BBZ0EzQXlBZ0J5QVdJQVJCSUdvZ0JFSGNBV29nRnlBU0lCZ2dHaEFmSVFvTUFRc2dCeUFNYWlFQ0lBZ29BZ2doQ0NBSElBTXBBQUEzQUFBZ0J5QURLUUFJTndBSUFrQWdERUVSU1EwQUlBY2dBeWtBRURjQUVDQUhJQU1wQUJnM0FCZ2dERUVRYTBFUlNBMEFJQU5CRUdvaEF5QUhRU0JxSVF3RFFDQU1JQU1wQUJBM0FBQWdEQ0FES1FBWU53QUlJQXdnQXlrQUlEY0FFQ0FNSUFNcEFDZzNBQmdnQTBFZ2FpRURJQXhCSUdvaURDQUNTUTBBQ3dzZ0FpQUlheUVESUFRZ0VEWUMzQUVnQWlBU2F5QUlTUVJBSUFnZ0FpQVlhMHNOQnlBYUlCb2dBeUFTYXlJRGFpSU1JQXRxVHdSQUlBSWdEQ0FMRUFvYURBSUxJQU1nQzJvaEN5QUNJQXhCQUNBRGF4QUtJQU5ySVFJZ0VpRURDeUFJUVJCUEJFQWdBaUFES1FBQU53QUFJQUlnQXlrQUNEY0FDQ0FMUVJGSURRRWdBaUFMYWlFSUlBSkJFR29oQWdOQUlBSWdBeWtBRURjQUFDQUNJQU1wQUJnM0FBZ2dBaUFES1FBZ053QVFJQUlnQXlrQUtEY0FHQ0FEUVNCcUlRTWdBa0VnYWlJQ0lBaEpEUUFMREFFTEFrQWdDRUVIVFFSQUlBSWdBeTBBQURvQUFDQUNJQU10QUFFNkFBRWdBaUFETFFBQ09nQUNJQUlnQXkwQUF6b0FBeUFDSUFNZ0NFRUNkQ0lJUWNBZWFpZ0NBR29pQXlnQUFEWUFCQ0FESUFoQjRCNXFLQUlBYXlFRERBRUxJQUlnQXlrQUFEY0FBQXNnQzBFSlNRMEFJQUlnQzJvaERDQUNRUWhxSWdnZ0EwRUlhaUlEYTBFUFRBUkFBMEFnQ0NBREtRQUFOd0FBSUFOQkNHb2hBeUFJUVFocUlnZ2dERWtOQUF3Q0N3QUxJQWdnQXlrQUFEY0FBQ0FJSUFNcEFBZzNBQWdnQzBFWlNBMEFJQUpCR0dvaEFnTkFJQUlnQXlrQUVEY0FBQ0FDSUFNcEFCZzNBQWdnQWlBREtRQWdOd0FRSUFJZ0F5a0FLRGNBR0NBRFFTQnFJUU1nQWtFZ2FpSUNJQXhKRFFBTEN5QUtRWWgvU3dSQUlBb2hDUXdHQlNBR1FRRnFJUVlnQnlBS2FpRUhEQUlMQUFzTElBUW9BdHdCSVFNTFFicC9JUWtnRnlBRGF5SUNJQllnQjJ0TERRSWdCd1IvSUFjZ0F5QUNFQUlnQW1vRlFRQUxJQTVySVFrTUFnc2dCVUVBTmdLYzZ3RUxJQVFnQlNnQzhPb0JJZ00yQXR3QklBa2dEbW9oRENBRElBVW9Bb0RyQVdvaEVBSkFJQTlGQkVBZ0RpRUdEQUVMSUFVb0FyanBBU0VOSUFVb0FyVHBBU0VUSUFVb0FyRHBBU0VTSUFWQkFUWUNoT29CUVFBaEF3TkFJQU5CQTBjRVFDQUVJQU5CQW5RaUFtb2dBaUFGYWtHczBBRnFLQUlBTmdLY0FTQURRUUZxSVFNTUFRc0xRV3doQ1NBRVFmQUFhaUlDSUFjZ0JoQU5RWWgvU3cwQklERWdBaUFGS0FJQUVCNGdNQ0FDSUFVb0FnZ1FIaUF2SUFJZ0JTZ0NCQkFlSUF4QklHc2hHQ0FPSVFZRFFDQUVLQUtJQVNBRUtBS0VBVUVEZEdvcEFnQWlRS2NpQ2tFUWRpSVpRZjhCY1NFTElBUW9BcGdCSUFRb0FwUUJRUU4wYWlrQ0FDSkJweUlXUVJCMkloOUIvd0Z4SVJvZ0JDZ0NrQUVnQkNnQ2pBRkJBM1JxS1FJQUlrSkNJSWluSVFjZ1FVSWdpQ0JBUWlDSXB5RURBa0FnUWtJUWlLY2lDRUgvQVhFaUFrRUNUd1JBQWtBZ0FrRVpTU0EvUW9HQWdCQlVja1VFUUNBRVFTQWdCQ2dDZENJSWF5SVJJQUlnQWlBUlN4c2lGeUFJYWpZQ2RDQUhJQVFvQW5BZ0NIUkJBQ0FYYTNZZ0FpQVhheUlYZEdvaENDQUVRZkFBYWhBUEdpQUNJQkZORFFFZ0JDQUVLQUowSWdJZ0YybzJBblFnQkNnQ2NDQUNkRUVBSUJkcmRpQUlhaUVJREFFTElBUWdBaUFFS0FKMEloRnFOZ0owSUFRb0FuQWdFWFJCQUNBSWEzWWdCMm9oQ0NBRVFmQUFhaEFQR2dzZ0JDa0NuQUVoUkNBRUlBZzJBcHdCSUFRZ1JEY0NvQUVNQVFzQ1FDQUNSUVJBSUFNRVFDQUVLQUtjQVNFSURBTUxJQVFvQXFBQklRZ01BUXNnQkNBRUtBSjBJZ0pCQVdvMkFuUUNmeUFISUFORmFpQUVLQUp3SUFKMFFSOTJhaUlDUVFOR0JFQWdCQ2dDbkFGQkFXc01BUXNnQWtFQ2RDQUVhaWdDbkFFTElnZEZJQWRxSVFnZ0FrRUJSd1JBSUFRZ0JDZ0NvQUUyQXFRQkN3c2dCQ0FFS0FLY0FUWUNvQUVnQkNBSU5nS2NBUXVuSVFJZ1FVS0FnUHdIZzFCRkJFQWdCQ0FFS0FKMElnY2dHbW8yQW5RZ0JDZ0NjQ0FIZEVFQUlCOXJkaUFDYWlFQ0N5QUxJQnBxUVJSUEJFQWdCRUh3QUdvUUR4b0xJRUJDZ0lEOEI0TlFSUVJBSUFRZ0JDZ0NkQ0lISUF0cU5nSjBJQVFvQW5BZ0IzUkJBQ0FaYTNZZ0Eyb2hBd3NnQkVId0FHb1FEeG9nQkNBRUtBSndJZ2RCQUNBS1FSaDJJZ3NnQkNnQ2RHb2lHbXQySUF0QkFuUkJvQjFxS0FJQWNTQUtRZi8vQTNGcU5nS0VBU0FFSUJvZ0ZrRVlkaUlLYWlJTE5nSjBJQVFnQ2tFQ2RFR2dIV29vQWdBZ0IwRUFJQXRyZG5FZ0ZrSC8vd054YWpZQ2xBRWdCRUh3QUdvUUR4b2dCQ0JDcHlJSFFSaDJJZ29nQkNnQ2RHb2lDellDZENBRUlBcEJBblJCb0IxcUtBSUFJQVFvQW5CQkFDQUxhM1p4SUFkQi8vOERjV28yQW93QklBUWdBellDT0NBRUlBSTJBandnQkNBSU5nSkFBa0FDUUFKQUlBUW9BdHdCSWdzZ0Eyb2lGaUFRU3cwQUlBWWdBaUFEYWlJS2FpQVlTdzBBSUFwQklHb2dEQ0FHYTAwTkFRc2dCQ0FFUVVCcktBSUFOZ0lJSUFRZ0JDa0RPRGNEQUNBR0lBd2dCQ0FFUWR3QmFpQVFJQklnRXlBTkVCOGhDZ3dCQ3lBRElBWnFJUWNnQmlBTEtRQUFOd0FBSUFZZ0N5a0FDRGNBQ0FKQUlBTkJFVWtOQUNBR0lBc3BBQkEzQUJBZ0JpQUxLUUFZTndBWUlBTkJFR3RCRVVnTkFDQUxRUkJxSVFNZ0JrRWdhaUVMQTBBZ0N5QURLUUFRTndBQUlBc2dBeWtBR0RjQUNDQUxJQU1wQUNBM0FCQWdDeUFES1FBb053QVlJQU5CSUdvaEF5QUxRU0JxSWdzZ0Iwa05BQXNMSUFjZ0NHc2hBeUFFSUJZMkF0d0JJQWNnRW1zZ0NFa0VRQ0FJSUFjZ0UydExEUVFnRFNBTklBTWdFbXNpQTJvaUN5QUNhazhFUUNBSElBc2dBaEFLR2d3Q0N5QUhJQXRCQUNBRGF4QUtJQVFnQWlBRGFpSUNOZ0k4SUFOcklRY2dFaUVEQ3lBSVFSQlBCRUFnQnlBREtRQUFOd0FBSUFjZ0F5a0FDRGNBQ0NBQ1FSRklEUUVnQWlBSGFpRUlJQWRCRUdvaEFnTkFJQUlnQXlrQUVEY0FBQ0FDSUFNcEFCZzNBQWdnQWlBREtRQWdOd0FRSUFJZ0F5a0FLRGNBR0NBRFFTQnFJUU1nQWtFZ2FpSUNJQWhKRFFBTERBRUxBa0FnQ0VFSFRRUkFJQWNnQXkwQUFEb0FBQ0FISUFNdEFBRTZBQUVnQnlBRExRQUNPZ0FDSUFjZ0F5MEFBem9BQXlBSElBTWdDRUVDZENJSVFjQWVhaWdDQUdvaUF5Z0FBRFlBQkNBRElBaEI0QjVxS0FJQWF5RUREQUVMSUFjZ0F5a0FBRGNBQUFzZ0FrRUpTUTBBSUFJZ0Iyb2hDeUFIUVFocUlnZ2dBMEVJYWlJRGEwRVBUQVJBQTBBZ0NDQURLUUFBTndBQUlBTkJDR29oQXlBSVFRaHFJZ2dnQzBrTkFBd0NDd0FMSUFnZ0F5a0FBRGNBQUNBSUlBTXBBQWczQUFnZ0FrRVpTQTBBSUFkQkdHb2hBZ05BSUFJZ0F5a0FFRGNBQUNBQ0lBTXBBQmczQUFnZ0FpQURLUUFnTndBUUlBSWdBeWtBS0RjQUdDQURRU0JxSVFNZ0FrRWdhaUlDSUF0SkRRQUxDeUFLUVloL1N3UkFJQW9oQ1F3REN5QUdJQXBxSVFZZ0JFSHdBR29RRHlFRElBOUJBV3NpRHcwQUMwRUFJUUlnQTBFQ1NRMEJBMEFnQWtFRFJ3UkFJQVVnQWtFQ2RDSURha0dzMEFGcUlBTWdCR29vQXB3Qk5nSUFJQUpCQVdvaEFnd0JDd3NnQkNnQzNBRWhBd3RCdW44aENTQVFJQU5ySWdJZ0RDQUdhMHNOQUNBR0JIOGdCaUFESUFJUUFpQUNhZ1ZCQUFzZ0Rtc2hDUXNnQ1VHSWYwc05CZ3NDUUNBRktBTHM2Z0ZGRFFBZ0JTQUZLUU9JNmdFZ0NhMThOd09JNmdFQ1FDQUZLQUxRNmdFaUFpQUphaUlJUVI5TkJFQWdEa1VOQVNBQ0lDSnFJQTRnQ1JBQ0dpQUZLQUxRNmdFZ0NXb2hDQXdCQ3lBT0lRTWdBZ1JBSUFJZ0ltb2dBMEVnSUFKckVBSWFJQVVvQXREcUFTRUNJQVZCQURZQzBPb0JJQVVnQlNrRGtPb0JJQVVwQUxEcUFVTFAxdE8rMHNlcjJVSitmRUlmaVVLSGxhK3ZtTGJlbTU1L2ZqY0RrT29CSUFVZ0JTa0RtT29CSUFVcEFManFBVUxQMXRPKzBzZXIyVUorZkVJZmlVS0hsYSt2bUxiZW01NS9mamNEbU9vQklBVWdCU2tEb09vQklBVXBBTURxQVVMUDF0Tyswc2VyMlVKK2ZFSWZpVUtIbGErdm1MYmVtNTUvZmpjRG9Pb0JJQVVnQlNrRHFPb0JJQVVwQU1qcUFVTFAxdE8rMHNlcjJVSitmRUlmaVVLSGxhK3ZtTGJlbTU1L2ZqY0RxT29CSUFNZ0FtdEJJR29oQXdzZ0NTQU9haUlDSUFOQklHcFBCRUFnQWtFZ2F5RUdJQVVwQTZqcUFTRS9JQVVwQTZEcUFTRkFJQVVwQTVqcUFTRkJJQVVwQTVEcUFTRkNBMEFnQXlrQUdFTFAxdE8rMHNlcjJVSitJRDk4UWgrSlFvZVZyNitZdHQ2Ym5uOStJVDhnQXlrQUVFTFAxdE8rMHNlcjJVSitJRUI4UWgrSlFvZVZyNitZdHQ2Ym5uOStJVUFnQXlrQUNFTFAxdE8rMHNlcjJVSitJRUY4UWgrSlFvZVZyNitZdHQ2Ym5uOStJVUVnQXlrQUFFTFAxdE8rMHNlcjJVSitJRUo4UWgrSlFvZVZyNitZdHQ2Ym5uOStJVUlnQTBFZ2FpSURJQVpORFFBTElBVWdQemNEcU9vQklBVWdRRGNEb09vQklBVWdRVGNEbU9vQklBVWdRamNEa09vQkN5QUNJQU5ORFFFZ0lpQURJQUlnQTJzaUNCQUNHZ3NnQlNBSU5nTFE2Z0VMSURVZ0ZXc2hBeUFWSUJ0cUlRSWdDU0FPYWlFT0lBUW9BakJGRFFBTElDa3BBd0FpUDBKL1VTQS9JQTRnSFd1c1VYSkZCRUJCYkNFSkRBWUxJQVVvQXVEcEFRUkFRV29oQ1NBRFFRUkpEUVlnQlNnQzZPb0JSUVJBSUNJZ0JTZ0MwT29CYWlFS0FuNGdCU2tEaU9vQklqOUNJRm9FUUNBRktRT1k2Z0VpUUVJSGlTQUZLUU9RNmdFaVFVSUJpWHdnQlNrRG9Pb0JJa0pDRElsOElBVXBBNmpxQVNKRFFoS0pmQ0JCUXMvVzA3N1N4NnZaUW41Q0g0bENoNVd2cjVpMjNwdWVmMzZGUW9lVnI2K1l0dDZibm45K1FwMmp0ZXFEc1kySytnQjlJRUJDejliVHZ0TEhxOWxDZmtJZmlVS0hsYSt2bUxiZW01NS9mb1ZDaDVXdnI1aTIzcHVlZjM1Q25hTzE2b094allyNkFIMGdRa0xQMXRPKzBzZXIyVUorUWgrSlFvZVZyNitZdHQ2Ym5uOStoVUtIbGErdm1MYmVtNTUvZmtLZG83WHFnN0dOaXZvQWZTQkRRcy9XMDc3U3g2dlpRbjVDSDRsQ2g1V3ZyNWkyM3B1ZWYzNkZRb2VWcjYrWXR0NmJubjkrUXAyanRlcURzWTJLK2dCOURBRUxJQVVwQTZEcUFVTEZ6OW15OGVXNjZpZDhDeUEvZkNFL0lDSWhCZ05BSUFvZ0JrRUlhaUlIVHdSQUlBWXBBQUJDejliVHZ0TEhxOWxDZmtJZmlVS0hsYSt2bUxiZW01NS9maUEvaFVJYmlVS0hsYSt2bUxiZW01NS9ma0tkbzdYcWc3R05pdm9BZlNFL0lBY2hCZ3dCQ3dzQ1FDQUtJQVpCQkdvaUNFa0VRQ0FHSVFnTUFRc2dCalVBQUVLSGxhK3ZtTGJlbTU1L2ZpQS9oVUlYaVVMUDF0Tyswc2VyMlVKK1F2bnozZkdaOXBtckZud2hQd3NEUUNBSUlBcEpCRUFnQ0RFQUFFTEZ6OW15OGVXNjZpZCtJRCtGUWd1SlFvZVZyNitZdHQ2Ym5uOStJVDhnQ0VFQmFpRUlEQUVMQ3lBQ0tBQUFJRDlDSVlnZ1A0VkN6OWJUdnRMSHE5bENmaUkvUWgySUlEK0ZRdm56M2ZHWjlwbXJGbjRpUDBJZ2lDQS9oYWRIRFFjTElBTkJCR3NoQXlBQ1FRUnFJUUlMSUE0Z0hXc2lDVUdKZjA4TkJDQUJJQWxySVFFZ0NTQWRhaUVkUVFFaFBnd0JDd3RCdUg4aEJ5QUREUVFnSFNBQWF5RUhEQVFMUVd3aENRd0JDMEc0ZnlFSkMwRzRmeUVISUFsQmRrWWdQbkVOQVFzZ0NTRUhDeWdDQUEwQUlBVkIvT29CYWlnQ0FDRUJJQVZCK09vQmFpZ0NBQ0VBSUFVUUdDQUZLQUt3NndFZ0FDQUJFQk1nQlVFQU5nS3c2d0VnQlNnQ3BPc0JJZ0lFUUFKQUFrQUNRQUpBSUFJb0FnQWlBd1JBSUFCRkRRSWdBU0FESUFBUkFnQU1BUXNnQUVVTkFnc2dBU0FDSUFBUkFnQU1BZ3NnQXhBR0N5QUNFQVlMSUFWQkFEWUNwT3NCQ3lBQUJFQWdBU0FGSUFBUkFnQU1BUXNnQlJBR0N5QUVRZUFCYWlRQUlBY0xDNmdWQ1FCQmlBZ0xEUUVBQUFBQkFBQUFBZ0FBQUFJQVFhQUlDN01HQVFBQUFBRUFBQUFDQUFBQUFnQUFBQ1lBQUFDQ0FBQUFJUVVBQUVvQUFBQm5DQUFBSmdBQUFNQUJBQUNBQUFBQVNRVUFBRW9BQUFDK0NBQUFLUUFBQUN3Q0FBQ0FBQUFBU1FVQUFFb0FBQUMrQ0FBQUx3QUFBTW9DQUFDQUFBQUFpZ1VBQUVvQUFBQ0VDUUFBTlFBQUFITURBQUNBQUFBQW5RVUFBRW9BQUFDZ0NRQUFQUUFBQUlFREFBQ0FBQUFBNndVQUFFc0FBQUErQ2dBQVJBQUFBSjREQUFDQUFBQUFUUVlBQUVzQUFBQ3FDZ0FBU3dBQUFMTURBQUNBQUFBQXdRWUFBRTBBQUFBZkRRQUFUUUFBQUZNRUFBQ0FBQUFBSXdnQUFGRUFBQUNtRHdBQVZBQUFBSmtFQUFDQUFBQUFTd2tBQUZjQUFBQ3hFZ0FBV0FBQUFOb0VBQUNBQUFBQWJ3a0FBRjBBQUFBakZBQUFWQUFBQUVVRkFBQ0FBQUFBVkFvQUFHb0FBQUNNRkFBQWFnQUFBSzhGQUFDQUFBQUFkZ2tBQUh3QUFBQk9FQUFBZkFBQUFOSUNBQUNBQUFBQVl3Y0FBSkVBQUFDUUJ3QUFrZ0FBQUFBQUFBQUJBQUFBQVFBQUFBVUFBQUFOQUFBQUhRQUFBRDBBQUFCOUFBQUEvUUFBQVAwQkFBRDlBd0FBL1FjQUFQMFBBQUQ5SHdBQS9UOEFBUDEvQUFEOS93QUEvZjhCQVAzL0F3RDkvd2NBL2Y4UEFQMy9Id0Q5L3o4QS9mOS9BUDMvL3dEOS8vOEIvZi8vQS8zLy93ZjkvLzhQL2YvL0gvMy8vei85Ly85L0FBQUFBQUVBQUFBQ0FBQUFBd0FBQUFRQUFBQUZBQUFBQmdBQUFBY0FBQUFJQUFBQUNRQUFBQW9BQUFBTEFBQUFEQUFBQUEwQUFBQU9BQUFBRHdBQUFCQUFBQUFSQUFBQUVnQUFBQk1BQUFBVUFBQUFGUUFBQUJZQUFBQVhBQUFBR0FBQUFCa0FBQUFhQUFBQUd3QUFBQndBQUFBZEFBQUFIZ0FBQUI4QUFBQURBQUFBQkFBQUFBVUFBQUFHQUFBQUJ3QUFBQWdBQUFBSkFBQUFDZ0FBQUFzQUFBQU1BQUFBRFFBQUFBNEFBQUFQQUFBQUVBQUFBQkVBQUFBU0FBQUFFd0FBQUJRQUFBQVZBQUFBRmdBQUFCY0FBQUFZQUFBQUdRQUFBQm9BQUFBYkFBQUFIQUFBQUIwQUFBQWVBQUFBSHdBQUFDQUFBQUFoQUFBQUlnQUFBQ01BQUFBbEFBQUFKd0FBQUNrQUFBQXJBQUFBTHdBQUFETUFBQUE3QUFBQVF3QUFBRk1BQUFCakFBQUFnd0FBQUFNQkFBQURBZ0FBQXdRQUFBTUlBQUFERUFBQUF5QUFBQU5BQUFBRGdBQUFBd0FCQUVIZ0R3dFJBUUFBQUFFQUFBQUJBQUFBQVFBQUFBSUFBQUFDQUFBQUF3QUFBQU1BQUFBRUFBQUFCQUFBQUFVQUFBQUhBQUFBQ0FBQUFBa0FBQUFLQUFBQUN3QUFBQXdBQUFBTkFBQUFEZ0FBQUE4QUFBQVFBRUhFRUF1TEFRRUFBQUFDQUFBQUF3QUFBQVFBQUFBRkFBQUFCZ0FBQUFjQUFBQUlBQUFBQ1FBQUFBb0FBQUFMQUFBQURBQUFBQTBBQUFBT0FBQUFEd0FBQUJBQUFBQVNBQUFBRkFBQUFCWUFBQUFZQUFBQUhBQUFBQ0FBQUFBb0FBQUFNQUFBQUVBQUFBQ0FBQUFBQUFFQUFBQUNBQUFBQkFBQUFBZ0FBQUFRQUFBQUlBQUFBRUFBQUFDQUFBQUFBQUVBUVpBU0MrWUVBUUFBQUFFQUFBQUJBQUFBQVFBQUFBSUFBQUFDQUFBQUF3QUFBQU1BQUFBRUFBQUFCZ0FBQUFjQUFBQUlBQUFBQ1FBQUFBb0FBQUFMQUFBQURBQUFBQTBBQUFBT0FBQUFEd0FBQUJBQUFBQUJBQUFBQkFBQUFBZ0FBQUFBQUFBQUFRQUJBUVlBQUFBQUFBQUVBQUFBQUJBQUFBUUFBQUFBSUFBQUJRRUFBQUFBQUFBRkF3QUFBQUFBQUFVRUFBQUFBQUFBQlFZQUFBQUFBQUFGQndBQUFBQUFBQVVKQUFBQUFBQUFCUW9BQUFBQUFBQUZEQUFBQUFBQUFBWU9BQUFBQUFBQkJSQUFBQUFBQUFFRkZBQUFBQUFBQVFVV0FBQUFBQUFDQlJ3QUFBQUFBQU1GSUFBQUFBQUFCQVV3QUFBQUlBQUdCVUFBQUFBQUFBY0ZnQUFBQUFBQUNBWUFBUUFBQUFBS0JnQUVBQUFBQUF3R0FCQUFBQ0FBQUFRQUFBQUFBQUFBQkFFQUFBQUFBQUFGQWdBQUFDQUFBQVVFQUFBQUFBQUFCUVVBQUFBZ0FBQUZCd0FBQUFBQUFBVUlBQUFBSUFBQUJRb0FBQUFBQUFBRkN3QUFBQUFBQUFZTkFBQUFJQUFCQlJBQUFBQUFBQUVGRWdBQUFDQUFBUVVXQUFBQUFBQUNCUmdBQUFBZ0FBTUZJQUFBQUFBQUF3VW9BQUFBQUFBR0JFQUFBQUFRQUFZRVFBQUFBQ0FBQndXQUFBQUFBQUFKQmdBQ0FBQUFBQXNHQUFnQUFEQUFBQVFBQUFBQUVBQUFCQUVBQUFBZ0FBQUZBZ0FBQUNBQUFBVURBQUFBSUFBQUJRVUFBQUFnQUFBRkJnQUFBQ0FBQUFVSUFBQUFJQUFBQlFrQUFBQWdBQUFGQ3dBQUFDQUFBQVVNQUFBQUFBQUFCZzhBQUFBZ0FBRUZFZ0FBQUNBQUFRVVVBQUFBSUFBQ0JSZ0FBQUFnQUFJRkhBQUFBQ0FBQXdVb0FBQUFJQUFFQlRBQUFBQUFBQkFHQUFBQkFBQUFEd1lBZ0FBQUFBQU9CZ0JBQUFBQUFBMEdBQ0FBUVlBWEM0Y0NBUUFCQVFVQUFBQUFBQUFGQUFBQUFBQUFCZ1E5QUFBQUFBQUpCZjBCQUFBQUFBOEYvWDhBQUFBQUZRWDkveDhBQUFBREJRVUFBQUFBQUFjRWZRQUFBQUFBREFYOUR3QUFBQUFTQmYzL0F3QUFBQmNGL2Y5L0FBQUFCUVVkQUFBQUFBQUlCUDBBQUFBQUFBNEYvVDhBQUFBQUZBWDkvdzhBQUFBQ0JRRUFBQUFRQUFjRWZRQUFBQUFBQ3dYOUJ3QUFBQUFSQmYzL0FRQUFBQllGL2Y4L0FBQUFCQVVOQUFBQUVBQUlCUDBBQUFBQUFBMEYvUjhBQUFBQUV3WDkvd2NBQUFBQkJRRUFBQUFRQUFZRVBRQUFBQUFBQ2dYOUF3QUFBQUFRQmYzL0FBQUFBQndGL2YvL0R3QUFHd1g5Ly84SEFBQWFCZjMvL3dNQUFCa0YvZi8vQVFBQUdBWDkvLzhBUVpBWkM0WUVBUUFCQVFZQUFBQUFBQUFHQXdBQUFBQUFBQVFFQUFBQUlBQUFCUVVBQUFBQUFBQUZCZ0FBQUFBQUFBVUlBQUFBQUFBQUJRa0FBQUFBQUFBRkN3QUFBQUFBQUFZTkFBQUFBQUFBQmhBQUFBQUFBQUFHRXdBQUFBQUFBQVlXQUFBQUFBQUFCaGtBQUFBQUFBQUdIQUFBQUFBQUFBWWZBQUFBQUFBQUJpSUFBQUFBQUFFR0pRQUFBQUFBQVFZcEFBQUFBQUFDQmk4QUFBQUFBQU1HT3dBQUFBQUFCQVpUQUFBQUFBQUhCb01BQUFBQUFBa0dBd0lBQUJBQUFBUUVBQUFBQUFBQUJBVUFBQUFnQUFBRkJnQUFBQUFBQUFVSEFBQUFJQUFBQlFrQUFBQUFBQUFGQ2dBQUFBQUFBQVlNQUFBQUFBQUFCZzhBQUFBQUFBQUdFZ0FBQUFBQUFBWVZBQUFBQUFBQUJoZ0FBQUFBQUFBR0d3QUFBQUFBQUFZZUFBQUFBQUFBQmlFQUFBQUFBQUVHSXdBQUFBQUFBUVluQUFBQUFBQUNCaXNBQUFBQUFBTUdNd0FBQUFBQUJBWkRBQUFBQUFBRkJtTUFBQUFBQUFnR0F3RUFBQ0FBQUFRRUFBQUFNQUFBQkFRQUFBQVFBQUFFQlFBQUFDQUFBQVVIQUFBQUlBQUFCUWdBQUFBZ0FBQUZDZ0FBQUNBQUFBVUxBQUFBQUFBQUJnNEFBQUFBQUFBR0VRQUFBQUFBQUFZVUFBQUFBQUFBQmhjQUFBQUFBQUFHR2dBQUFBQUFBQVlkQUFBQUFBQUFCaUFBQUFBQUFCQUdBd0FCQUFBQUR3WURnQUFBQUFBT0JnTkFBQUFBQUEwR0F5QUFBQUFBREFZREVBQUFBQUFMQmdNSUFBQUFBQW9HQXdRQVFhUWRDOWtCQVFBQUFBTUFBQUFIQUFBQUR3QUFBQjhBQUFBL0FBQUFmd0FBQVA4QUFBRC9BUUFBL3dNQUFQOEhBQUQvRHdBQS94OEFBUDgvQUFEL2Z3QUEvLzhBQVAvL0FRRC8vd01BLy84SEFQLy9Ed0QvL3g4QS8vOC9BUC8vZndELy8vOEEvLy8vQWYvLy93UC8vLzhILy8vL0QvLy8veC8vLy84Ly8vLy9md0FBQUFBQkFBQUFBZ0FBQUFRQUFBQUFBQUFBQWdBQUFBUUFBQUFJQUFBQUFBQUFBQUVBQUFBQ0FBQUFBUUFBQUFRQUFBQUVBQUFBQkFBQUFBUUFBQUFJQUFBQUNBQUFBQWdBQUFBSEFBQUFDQUFBQUFrQUFBQUtBQUFBQ3dCQmdCOExBNEFSQVE9PSI7dmFyIHNlPW5ldyBKQSxDZT0hMTthc3luYyBmdW5jdGlvbiBfSShBLHQsZSl7bGV0IEk9bnVsbDt0eXBlb2YgQSE9InN0cmluZyI/ST1BLmhyZWY6QS5zdGFydHNXaXRoKCJodHRwIik/ST1BOkk9YCR7dH0vJHtBfWAsSS5lbmRzV2l0aCgiLmpzIikmJihJPUkuc3Vic3RyaW5nKDAsSS5sZW5ndGgtMykpLEkuZW5kc1dpdGgoIi53YXNtIikmJihJPUkuc3Vic3RyaW5nKDAsSS5sZW5ndGgtNSkpO2xldCByPWAke0l9Lndhc21gLG89YXdhaXQgTEEuZ2V0KGAke3J9LnpzdGAse3Jlc3BvbnNlVHlwZToiYXJyYXlidWZmZXIiLHBhcmFtczplfSk7Q2V8fChhd2FpdCBzZS5pbml0KCksQ2U9ITApO2xldCBDPXNlLmRlY29kZShuZXcgVWludDhBcnJheShvLmRhdGEpKS5idWZmZXI7cmV0dXJuKGF3YWl0IGltcG9ydChgJHtJfS5qc2ApKS5kZWZhdWx0KHt3YXNtQmluYXJ5OkN9KX12YXIgQmU9X0k7dmFyIGJBPW5ldyBNYXA7YXN5bmMgZnVuY3Rpb24gWEkoQSx0LGUpe2xldCBJPUEscj1BLG89bnVsbDtyZXR1cm4gdHlwZW9mIEEhPSJzdHJpbmciJiYoST1uZXcgVVJMKEEuaHJlZikscj1JLmhyZWYpLGJBLmhhcyhyKT9vPWF3YWl0IGJBLmdldChyKTooYkEuc2V0KHIsQmUoSSx0LGUpKSxvPWF3YWl0IGJBLmdldChyKSksb312YXIgYWU9WEk7dmFyIHpJPXtUZXh0RmlsZToiVGV4dEZpbGUiLEJpbmFyeUZpbGU6IkJpbmFyeUZpbGUiLFRleHRTdHJlYW06IlRleHRTdHJlYW0iLEJpbmFyeVN0cmVhbToiQmluYXJ5U3RyZWFtIixJbWFnZToiSW1hZ2UiLFBvaW50U2V0OiJQb2ludFNldCIsTWVzaDoiTWVzaCIsUG9seURhdGE6IlBvbHlEYXRhIixUcmFuc2Zvcm1MaXN0OiJUcmFuc2Zvcm1MaXN0IixKc29uQ29tcGF0aWJsZToiSnNvbkNvbXBhdGlibGUifSxoPXpJO3ZhciB2ST17SW50ODoiaW50OCIsVUludDg6InVpbnQ4IixJbnQxNjoiaW50MTYiLFVJbnQxNjoidWludDE2IixJbnQzMjoiaW50MzIiLFVJbnQzMjoidWludDMyIixJbnQ2NDoiaW50NjQiLFVJbnQ2NDoidWludDY0IixTaXplVmFsdWVUeXBlOiJ1aW50NjQiLElkZW50aWZpZXJUeXBlOiJ1aW50NjQiLEluZGV4VmFsdWVUeXBlOiJpbnQ2NCIsT2Zmc2V0VmFsdWVUeXBlOiJpbnQ2NCJ9LFI9dkk7dmFyICRJPXtGbG9hdDMyOiJmbG9hdDMyIixGbG9hdDY0OiJmbG9hdDY0IixTcGFjZVByZWNpc2lvblR5cGU6ImZsb2F0NjQifSx6PSRJO2Z1bmN0aW9uIEFyKEEsdCl7bGV0IGU9bnVsbDtzd2l0Y2goQSl7Y2FzZSBSLlVJbnQ4OntlPW5ldyBVaW50OEFycmF5KHQpO2JyZWFrfWNhc2UgUi5JbnQ4OntlPW5ldyBJbnQ4QXJyYXkodCk7YnJlYWt9Y2FzZSBSLlVJbnQxNjp7ZT1uZXcgVWludDE2QXJyYXkodCk7YnJlYWt9Y2FzZSBSLkludDE2OntlPW5ldyBJbnQxNkFycmF5KHQpO2JyZWFrfWNhc2UgUi5VSW50MzI6e2U9bmV3IFVpbnQzMkFycmF5KHQpO2JyZWFrfWNhc2UgUi5JbnQzMjp7ZT1uZXcgSW50MzJBcnJheSh0KTticmVha31jYXNlIFIuVUludDY0Ont0eXBlb2YgZ2xvYmFsVGhpcy5CaWdVaW50NjRBcnJheT09ImZ1bmN0aW9uIj9lPW5ldyBCaWdVaW50NjRBcnJheSh0KTplPW5ldyBVaW50OEFycmF5KHQpO2JyZWFrfWNhc2UgUi5JbnQ2NDp7dHlwZW9mIGdsb2JhbFRoaXMuQmlnSW50NjRBcnJheT09ImZ1bmN0aW9uIj9lPW5ldyBCaWdJbnQ2NEFycmF5KHQpOmU9bmV3IFVpbnQ4QXJyYXkodCk7YnJlYWt9Y2FzZSB6LkZsb2F0MzI6e2U9bmV3IEZsb2F0MzJBcnJheSh0KTticmVha31jYXNlIHouRmxvYXQ2NDp7ZT1uZXcgRmxvYXQ2NEFycmF5KHQpO2JyZWFrfWNhc2UibnVsbCI6e2U9bnVsbDticmVha31jYXNlIG51bGw6e2U9bnVsbDticmVha31kZWZhdWx0OnRocm93IG5ldyBFcnJvcigiVHlwZSBpcyBub3Qgc3VwcG9ydGVkIGFzIGEgVHlwZWRBcnJheSIpfXJldHVybiBlfXZhciBIPUFyO3ZhciBjZT10eXBlb2YgZ2xvYmFsVGhpcy5TaGFyZWRBcnJheUJ1ZmZlcj09ImZ1bmN0aW9uIixRZT1uZXcgVGV4dEVuY29kZXIsRWU9bmV3IFRleHREZWNvZGVyKCJ1dGYtOCIpO2Z1bmN0aW9uIHRyKEEsdCl7bGV0IGU9e2ZsYWdzOiJyIixlbmNvZGluZzoiYmluYXJ5In0sST1BLmZzX29wZW4odCxlLmZsYWdzKSxvPUEuZnNfc3RhdCh0KS5zaXplLGc9bnVsbDtjZT9nPW5ldyBTaGFyZWRBcnJheUJ1ZmZlcihvKTpnPW5ldyBBcnJheUJ1ZmZlcihvKTtsZXQgQz1uZXcgVWludDhBcnJheShnKTtyZXR1cm4gQS5mc19yZWFkKEksQywwLG8sMCksQS5mc19jbG9zZShJKSxDfWZ1bmN0aW9uIGZlKEEsdCxlKXtsZXQgST1udWxsO2NlP0k9bmV3IFNoYXJlZEFycmF5QnVmZmVyKGUpOkk9bmV3IEFycmF5QnVmZmVyKGUpO2xldCByPW5ldyBVaW50OEFycmF5KEkpLG89bmV3IFVpbnQ4QXJyYXkoQS5IRUFQVTguYnVmZmVyLHQsZSk7cmV0dXJuIHIuc2V0KG8pLHJ9ZnVuY3Rpb24geShBLHQsZSxJKXtsZXQgcj0wO3JldHVybiB0IT09bnVsbCYmKHI9QS5jY2FsbCgiaXRrX3dhc21faW5wdXRfYXJyYXlfYWxsb2MiLCJudW1iZXIiLFsibnVtYmVyIiwibnVtYmVyIiwibnVtYmVyIiwibnVtYmVyIl0sWzAsZSxJLHQuYnVmZmVyLmJ5dGVMZW5ndGhdKSxBLkhFQVBVOC5zZXQobmV3IFVpbnQ4QXJyYXkodC5idWZmZXIpLHIpKSxyfWZ1bmN0aW9uIFQoQSx0LGUpe2xldCBJPUpTT04uc3RyaW5naWZ5KHQpLHI9QS5sZW5ndGhCeXRlc1VURjgoSSkrMSxvPUEuY2NhbGwoIml0a193YXNtX2lucHV0X2pzb25fYWxsb2MiLCJudW1iZXIiLFsibnVtYmVyIiwibnVtYmVyIiwibnVtYmVyIl0sWzAsZSxyXSk7QS5zdHJpbmdUb1VURjgoSSxvLHIpfWZ1bmN0aW9uIEYoQSx0LGUsSSl7bGV0IHI9QS5jY2FsbCgiaXRrX3dhc21fb3V0cHV0X2FycmF5X2FkZHJlc3MiLCJudW1iZXIiLFsibnVtYmVyIiwibnVtYmVyIiwibnVtYmVyIl0sWzAsdCxlXSksbz1BLmNjYWxsKCJpdGtfd2FzbV9vdXRwdXRfYXJyYXlfc2l6ZSIsIm51bWJlciIsWyJudW1iZXIiLCJudW1iZXIiLCJudW1iZXIiXSxbMCx0LGVdKSxnPWZlKEEscixvKTtyZXR1cm4gSChJLGcuYnVmZmVyKX1mdW5jdGlvbiBzQShBLHQpe2xldCBlPUEuY2NhbGwoIml0a193YXNtX291dHB1dF9qc29uX2FkZHJlc3MiLCJudW1iZXIiLFsibnVtYmVyIiwibnVtYmVyIl0sWzAsdF0pLEk9QS5VVEY4VG9TdHJpbmcoZSk7cmV0dXJuIEpTT04ucGFyc2UoSSl9ZnVuY3Rpb24gZXIoQSx0LGUsSSl7SSE9bnVsbCYmSS5sZW5ndGg+MCYmSS5mb3JFYWNoKGZ1bmN0aW9uKGEsbil7c3dpdGNoKGEudHlwZSl7Y2FzZSBoLlRleHRTdHJlYW06e2xldCBzPVFlLmVuY29kZShhLmRhdGEuZGF0YSksZj15KEEscyxuLDApLEI9e3NpemU6cy5idWZmZXIuYnl0ZUxlbmd0aCxkYXRhOmBkYXRhOmFwcGxpY2F0aW9uL3ZuZC5pdGsuYWRkcmVzcywwOiR7Zn1gfTtUKEEsQixuKTticmVha31jYXNlIGguSnNvbkNvbXBhdGlibGU6e2xldCBzPVFlLmVuY29kZShKU09OLnN0cmluZ2lmeShhLmRhdGEpKSxmPXkoQSxzLG4sMCksQj17c2l6ZTpzLmJ1ZmZlci5ieXRlTGVuZ3RoLGRhdGE6YGRhdGE6YXBwbGljYXRpb24vdm5kLml0ay5hZGRyZXNzLDA6JHtmfWB9O1QoQSxCLG4pO2JyZWFrfWNhc2UgaC5CaW5hcnlTdHJlYW06e2xldCBzPWEuZGF0YS5kYXRhLGY9eShBLHMsbiwwKSxCPXtzaXplOnMuYnVmZmVyLmJ5dGVMZW5ndGgsZGF0YTpgZGF0YTphcHBsaWNhdGlvbi92bmQuaXRrLmFkZHJlc3MsMDoke2Z9YH07VChBLEIsbik7YnJlYWt9Y2FzZSBoLlRleHRGaWxlOntBLmZzX3dyaXRlRmlsZShhLmRhdGEucGF0aCxhLmRhdGEuZGF0YSk7YnJlYWt9Y2FzZSBoLkJpbmFyeUZpbGU6e0EuZnNfd3JpdGVGaWxlKGEuZGF0YS5wYXRoLGEuZGF0YS5kYXRhKTticmVha31jYXNlIGguSW1hZ2U6e2xldCBzPWEuZGF0YSxmPXkoQSxzLmRhdGEsbiwwKSxCPXkoQSxzLmRpcmVjdGlvbixuLDEpLEU9dHlwZW9mIHMubWV0YWRhdGE/LmVudHJpZXM8InUiP0FycmF5LmZyb20ocy5tZXRhZGF0YS5lbnRyaWVzKCkpOltdLGw9e2ltYWdlVHlwZTpzLmltYWdlVHlwZSxuYW1lOnMubmFtZSxvcmlnaW46cy5vcmlnaW4sc3BhY2luZzpzLnNwYWNpbmcsZGlyZWN0aW9uOmBkYXRhOmFwcGxpY2F0aW9uL3ZuZC5pdGsuYWRkcmVzcywwOiR7Qn1gLHNpemU6cy5zaXplLGRhdGE6YGRhdGE6YXBwbGljYXRpb24vdm5kLml0ay5hZGRyZXNzLDA6JHtmfWAsbWV0YWRhdGE6RX07VChBLGwsbik7YnJlYWt9Y2FzZSBoLk1lc2g6e2xldCBzPWEuZGF0YSxmPXkoQSxzLnBvaW50cyxuLDApLEI9eShBLHMuY2VsbHMsbiwxKSxFPXkoQSxzLnBvaW50RGF0YSxuLDIpLGw9eShBLHMuY2VsbERhdGEsbiwzKSxjPXttZXNoVHlwZTpzLm1lc2hUeXBlLG5hbWU6cy5uYW1lLG51bWJlck9mUG9pbnRzOnMubnVtYmVyT2ZQb2ludHMscG9pbnRzOmBkYXRhOmFwcGxpY2F0aW9uL3ZuZC5pdGsuYWRkcmVzcywwOiR7Zn1gLG51bWJlck9mQ2VsbHM6cy5udW1iZXJPZkNlbGxzLGNlbGxzOmBkYXRhOmFwcGxpY2F0aW9uL3ZuZC5pdGsuYWRkcmVzcywwOiR7Qn1gLGNlbGxCdWZmZXJTaXplOnMuY2VsbEJ1ZmZlclNpemUsbnVtYmVyT2ZQb2ludFBpeGVsczpzLm51bWJlck9mUG9pbnRQaXhlbHMscG9pbnREYXRhOmBkYXRhOmFwcGxpY2F0aW9uL3ZuZC5pdGsuYWRkcmVzcywwOiR7RX1gLG51bWJlck9mQ2VsbFBpeGVsczpzLm51bWJlck9mQ2VsbFBpeGVscyxjZWxsRGF0YTpgZGF0YTphcHBsaWNhdGlvbi92bmQuaXRrLmFkZHJlc3MsMDoke2x9YH07VChBLGMsbik7YnJlYWt9Y2FzZSBoLlBvaW50U2V0OntsZXQgcz1hLmRhdGEsZj15KEEscy5wb2ludHMsbiwwKSxCPXkoQSxzLnBvaW50RGF0YSxuLDEpLEU9e3BvaW50U2V0VHlwZTpzLnBvaW50U2V0VHlwZSxuYW1lOnMubmFtZSxudW1iZXJPZlBvaW50czpzLm51bWJlck9mUG9pbnRzLHBvaW50czpgZGF0YTphcHBsaWNhdGlvbi92bmQuaXRrLmFkZHJlc3MsMDoke2Z9YCxudW1iZXJPZlBvaW50UGl4ZWxzOnMubnVtYmVyT2ZQb2ludFBpeGVscyxwb2ludERhdGE6YGRhdGE6YXBwbGljYXRpb24vdm5kLml0ay5hZGRyZXNzLDA6JHtCfWB9O1QoQSxFLG4pO2JyZWFrfWNhc2UgaC5UcmFuc2Zvcm1MaXN0OntsZXQgcz1hLmRhdGEsZj1bXTtzLmZvckVhY2goKEIsRSk9PntsZXQgYz1gZGF0YTphcHBsaWNhdGlvbi92bmQuaXRrLmFkZHJlc3MsMDoke3koQSxCLmZpeGVkUGFyYW1ldGVycyxuLEUqMil9YCxTPWBkYXRhOmFwcGxpY2F0aW9uL3ZuZC5pdGsuYWRkcmVzcywwOiR7eShBLEIucGFyYW1ldGVycyxuLEUqMisxKX1gLEQ9e3RyYW5zZm9ybVR5cGU6Qi50cmFuc2Zvcm1UeXBlLG51bWJlck9mRml4ZWRQYXJhbWV0ZXJzOkIubnVtYmVyT2ZGaXhlZFBhcmFtZXRlcnMsbnVtYmVyT2ZQYXJhbWV0ZXJzOkIubnVtYmVyT2ZQYXJhbWV0ZXJzLG5hbWU6Qi5uYW1lLGlucHV0U3BhY2VOYW1lOkIuaW5wdXRTcGFjZU5hbWUsb3V0cHV0U3BhY2VOYW1lOkIub3V0cHV0U3BhY2VOYW1lLHBhcmFtZXRlcnM6UyxmaXhlZFBhcmFtZXRlcnM6Y307Zi5wdXNoKEQpfSksVChBLGYsbik7YnJlYWt9Y2FzZSBoLlBvbHlEYXRhOntsZXQgcz1hLmRhdGEsZj15KEEscy5wb2ludHMsbiwwKSxCPXkoQSxzLnZlcnRpY2VzLG4sMSksRT15KEEscy5saW5lcyxuLDIpLGw9eShBLHMucG9seWdvbnMsbiwzKSxjPXkoQSxzLnRyaWFuZ2xlU3RyaXBzLG4sNCkscD15KEEscy5wb2ludERhdGEsbiw1KSxTPXkoQSxzLnBvaW50RGF0YSxuLDYpLEQ9e3BvbHlEYXRhVHlwZTpzLnBvbHlEYXRhVHlwZSxuYW1lOnMubmFtZSxudW1iZXJPZlBvaW50czpzLm51bWJlck9mUG9pbnRzLHBvaW50czpgZGF0YTphcHBsaWNhdGlvbi92bmQuaXRrLmFkZHJlc3MsMDoke2Z9YCx2ZXJ0aWNlc0J1ZmZlclNpemU6cy52ZXJ0aWNlc0J1ZmZlclNpemUsdmVydGljZXM6YGRhdGE6YXBwbGljYXRpb24vdm5kLml0ay5hZGRyZXNzLDA6JHtCfWAsbGluZXNCdWZmZXJTaXplOnMubGluZXNCdWZmZXJTaXplLGxpbmVzOmBkYXRhOmFwcGxpY2F0aW9uL3ZuZC5pdGsuYWRkcmVzcywwOiR7RX1gLHBvbHlnb25zQnVmZmVyU2l6ZTpzLnBvbHlnb25zQnVmZmVyU2l6ZSxwb2x5Z29uczpgZGF0YTphcHBsaWNhdGlvbi92bmQuaXRrLmFkZHJlc3MsMDoke2x9YCx0cmlhbmdsZVN0cmlwc0J1ZmZlclNpemU6cy50cmlhbmdsZVN0cmlwc0J1ZmZlclNpemUsdHJpYW5nbGVTdHJpcHM6YGRhdGE6YXBwbGljYXRpb24vdm5kLml0ay5hZGRyZXNzLDA6JHtjfWAsbnVtYmVyT2ZQb2ludFBpeGVsczpzLm51bWJlck9mUG9pbnRQaXhlbHMscG9pbnREYXRhOmBkYXRhOmFwcGxpY2F0aW9uL3ZuZC5pdGsuYWRkcmVzcywwOiR7cH1gLG51bWJlck9mQ2VsbFBpeGVsczpzLm51bWJlck9mQ2VsbFBpeGVscyxjZWxsRGF0YTpgZGF0YTphcHBsaWNhdGlvbi92bmQuaXRrLmFkZHJlc3MsMDoke1N9YH07VChBLEQsbik7YnJlYWt9ZGVmYXVsdDp0aHJvdyBFcnJvcigiVW5zdXBwb3J0ZWQgaW5wdXQgSW50ZXJmYWNlVHlwZSIpfX0pLEEucmVzZXRNb2R1bGVTdGRvdXQoKSxBLnJlc2V0TW9kdWxlU3RkZXJyKCk7bGV0IHI9QS5zdGFja1NhdmUoKSxvPTA7dHJ5e289QS5jYWxsTWFpbih0LnNsaWNlKCkpfWNhdGNoKGEpe3Rocm93IHR5cGVvZiBhPT0ibnVtYmVyIiYmKGNvbnNvbGUubG9nKCJFeGNlcHRpb24gd2hpbGUgcnVubmluZyBwaXBlbGluZToiKSxjb25zb2xlLmxvZygic3Rkb3V0OiIsQS5nZXRNb2R1bGVTdGRvdXQoKSksY29uc29sZS5lcnJvcigic3RkZXJyOiIsQS5nZXRNb2R1bGVTdGRlcnIoKSksdHlwZW9mIEEuZ2V0RXhjZXB0aW9uTWVzc2FnZTwidSI/Y29uc29sZS5lcnJvcigiZXhjZXB0aW9uOiIsQS5nZXRFeGNlcHRpb25NZXNzYWdlKGEpKTpjb25zb2xlLmVycm9yKCJCdWlsZCBtb2R1bGUgaW4gRGVidWcgbW9kZSBmb3IgZXhjZXB0aW9uIG1lc3NhZ2UgaW5mb3JtYXRpb24uIikpLGF9ZmluYWxseXtBLnN0YWNrUmVzdG9yZShyKX1sZXQgZz1BLmdldE1vZHVsZVN0ZG91dCgpLEM9QS5nZXRNb2R1bGVTdGRlcnIoKSxRPVtdO3JldHVybiBlIT1udWxsJiZlLmxlbmd0aD4wJiZvPT09MCYmZS5mb3JFYWNoKGZ1bmN0aW9uKGEsbil7bGV0IHM9bnVsbDtzd2l0Y2goYS50eXBlKXtjYXNlIGguVGV4dFN0cmVhbTp7bGV0IEI9QS5jY2FsbCgiaXRrX3dhc21fb3V0cHV0X2FycmF5X2FkZHJlc3MiLCJudW1iZXIiLFsibnVtYmVyIiwibnVtYmVyIiwibnVtYmVyIl0sWzAsbiwwXSksRT1BLmNjYWxsKCJpdGtfd2FzbV9vdXRwdXRfYXJyYXlfc2l6ZSIsIm51bWJlciIsWyJudW1iZXIiLCJudW1iZXIiLCJudW1iZXIiXSxbMCxuLDBdKSxsPW5ldyBVaW50OEFycmF5KEEuSEVBUFU4LmJ1ZmZlcixCLEUpO3M9e2RhdGE6RWUuZGVjb2RlKGwpfTticmVha31jYXNlIGguSnNvbkNvbXBhdGlibGU6e2xldCBCPUEuY2NhbGwoIml0a193YXNtX291dHB1dF9hcnJheV9hZGRyZXNzIiwibnVtYmVyIixbIm51bWJlciIsIm51bWJlciIsIm51bWJlciJdLFswLG4sMF0pLEU9QS5jY2FsbCgiaXRrX3dhc21fb3V0cHV0X2FycmF5X3NpemUiLCJudW1iZXIiLFsibnVtYmVyIiwibnVtYmVyIiwibnVtYmVyIl0sWzAsbiwwXSksbD1uZXcgVWludDhBcnJheShBLkhFQVBVOC5idWZmZXIsQixFKTtzPUpTT04ucGFyc2UoRWUuZGVjb2RlKGwpKTticmVha31jYXNlIGguQmluYXJ5U3RyZWFtOntsZXQgQj1BLmNjYWxsKCJpdGtfd2FzbV9vdXRwdXRfYXJyYXlfYWRkcmVzcyIsIm51bWJlciIsWyJudW1iZXIiLCJudW1iZXIiLCJudW1iZXIiXSxbMCxuLDBdKSxFPUEuY2NhbGwoIml0a193YXNtX291dHB1dF9hcnJheV9zaXplIiwibnVtYmVyIixbIm51bWJlciIsIm51bWJlciIsIm51bWJlciJdLFswLG4sMF0pO3M9e2RhdGE6ZmUoQSxCLEUpfTticmVha31jYXNlIGguVGV4dEZpbGU6e3M9e3BhdGg6YS5kYXRhLnBhdGgsZGF0YTpBLmZzX3JlYWRGaWxlKGEuZGF0YS5wYXRoLHtlbmNvZGluZzoidXRmOCJ9KX07YnJlYWt9Y2FzZSBoLkJpbmFyeUZpbGU6e3M9e3BhdGg6YS5kYXRhLnBhdGgsZGF0YTp0cihBLGEuZGF0YS5wYXRoKX07YnJlYWt9Y2FzZSBoLkltYWdlOntsZXQgQj1zQShBLG4pO0IuZGF0YT1GKEEsbiwwLEIuaW1hZ2VUeXBlLmNvbXBvbmVudFR5cGUpLEIuZGlyZWN0aW9uPUYoQSxuLDEsei5GbG9hdDY0KSxCLm1ldGFkYXRhPW5ldyBNYXAoQi5tZXRhZGF0YSkscz1CO2JyZWFrfWNhc2UgaC5NZXNoOntsZXQgQj1zQShBLG4pO0IubnVtYmVyT2ZQb2ludHM+MD9CLnBvaW50cz1GKEEsbiwwLEIubWVzaFR5cGUucG9pbnRDb21wb25lbnRUeXBlKTpCLnBvaW50cz1IKEIubWVzaFR5cGUucG9pbnRDb21wb25lbnRUeXBlLG5ldyBBcnJheUJ1ZmZlcigwKSksQi5udW1iZXJPZkNlbGxzPjA/Qi5jZWxscz1GKEEsbiwxLEIubWVzaFR5cGUuY2VsbENvbXBvbmVudFR5cGUpOkIuY2VsbHM9SChCLm1lc2hUeXBlLmNlbGxDb21wb25lbnRUeXBlLG5ldyBBcnJheUJ1ZmZlcigwKSksQi5udW1iZXJPZlBvaW50UGl4ZWxzPjA/Qi5wb2ludERhdGE9RihBLG4sMixCLm1lc2hUeXBlLnBvaW50UGl4ZWxDb21wb25lbnRUeXBlKTpCLnBvaW50RGF0YT1IKEIubWVzaFR5cGUucG9pbnRQaXhlbENvbXBvbmVudFR5cGUsbmV3IEFycmF5QnVmZmVyKDApKSxCLm51bWJlck9mQ2VsbFBpeGVscz4wP0IuY2VsbERhdGE9RihBLG4sMyxCLm1lc2hUeXBlLmNlbGxQaXhlbENvbXBvbmVudFR5cGUpOkIuY2VsbERhdGE9SChCLm1lc2hUeXBlLmNlbGxQaXhlbENvbXBvbmVudFR5cGUsbmV3IEFycmF5QnVmZmVyKDApKSxzPUI7YnJlYWt9Y2FzZSBoLlBvaW50U2V0OntsZXQgQj1zQShBLG4pO0IubnVtYmVyT2ZQb2ludHM+MD9CLnBvaW50cz1GKEEsbiwwLEIucG9pbnRTZXRUeXBlLnBvaW50Q29tcG9uZW50VHlwZSk6Qi5wb2ludHM9SChCLnBvaW50U2V0VHlwZS5wb2ludENvbXBvbmVudFR5cGUsbmV3IEFycmF5QnVmZmVyKDApKSxCLm51bWJlck9mUG9pbnRQaXhlbHM+MD9CLnBvaW50RGF0YT1GKEEsbiwxLEIucG9pbnRTZXRUeXBlLnBvaW50UGl4ZWxDb21wb25lbnRUeXBlKTpCLnBvaW50RGF0YT1IKEIucG9pbnRTZXRUeXBlLnBvaW50UGl4ZWxDb21wb25lbnRUeXBlLG5ldyBBcnJheUJ1ZmZlcigwKSkscz1CO2JyZWFrfWNhc2UgaC5UcmFuc2Zvcm1MaXN0OntsZXQgQj1zQShBLG4pO0IuZm9yRWFjaCgoRSxsKT0+e0UubnVtYmVyT2ZGaXhlZFBhcmFtZXRlcnM+MCYmKEJbbF0uZml4ZWRQYXJhbWV0ZXJzPUYoQSxuLGwqMixFLnRyYW5zZm9ybVR5cGUucGFyYW1ldGVyc1ZhbHVlVHlwZSkpLEUubnVtYmVyT2ZGaXhlZFBhcmFtZXRlcnM+MCYmKEJbbF0ucGFyYW1ldGVycz1GKEEsbixsKjIrMSxFLnRyYW5zZm9ybVR5cGUucGFyYW1ldGVyc1ZhbHVlVHlwZSkpfSkscz1CO2JyZWFrfWNhc2UgaC5Qb2x5RGF0YTp7bGV0IEI9c0EoQSxuKTtCLm51bWJlck9mUG9pbnRzPjA/Qi5wb2ludHM9RihBLG4sMCx6LkZsb2F0MzIpOkIucG9pbnRzPW5ldyBGbG9hdDMyQXJyYXksQi52ZXJ0aWNlc0J1ZmZlclNpemU+MD9CLnZlcnRpY2VzPUYoQSxuLDEsUi5VSW50MzIpOkIudmVydGljZXM9bmV3IFVpbnQzMkFycmF5LEIubGluZXNCdWZmZXJTaXplPjA/Qi5saW5lcz1GKEEsbiwyLFIuVUludDMyKTpCLmxpbmVzPW5ldyBVaW50MzJBcnJheSxCLnBvbHlnb25zQnVmZmVyU2l6ZT4wP0IucG9seWdvbnM9RihBLG4sMyxSLlVJbnQzMik6Qi5wb2x5Z29ucz1uZXcgVWludDMyQXJyYXksQi50cmlhbmdsZVN0cmlwc0J1ZmZlclNpemU+MD9CLnRyaWFuZ2xlU3RyaXBzPUYoQSxuLDQsUi5VSW50MzIpOkIudHJpYW5nbGVTdHJpcHM9bmV3IFVpbnQzMkFycmF5LEIubnVtYmVyT2ZQb2ludFBpeGVscz4wP0IucG9pbnREYXRhPUYoQSxuLDUsQi5wb2x5RGF0YVR5cGUucG9pbnRQaXhlbENvbXBvbmVudFR5cGUpOkIucG9pbnREYXRhPUgoQi5wb2x5RGF0YVR5cGUucG9pbnRQaXhlbENvbXBvbmVudFR5cGUsbmV3IEFycmF5QnVmZmVyKDApKSxCLm51bWJlck9mQ2VsbFBpeGVscz4wP0IuY2VsbERhdGE9RihBLG4sNixCLnBvbHlEYXRhVHlwZS5jZWxsUGl4ZWxDb21wb25lbnRUeXBlKTpCLmNlbGxEYXRhPUgoQi5wb2x5RGF0YVR5cGUuY2VsbFBpeGVsQ29tcG9uZW50VHlwZSxuZXcgQXJyYXlCdWZmZXIoMCkpLHM9QjticmVha31kZWZhdWx0OnRocm93IEVycm9yKCJVbnN1cHBvcnRlZCBvdXRwdXQgSW50ZXJmYWNlVHlwZSIpfWxldCBmPXt0eXBlOmEudHlwZSxkYXRhOnN9O1EucHVzaChmKX0pLHtyZXR1cm5WYWx1ZTpvLHN0ZG91dDpnLHN0ZGVycjpDLG91dHB1dHM6UX19dmFyIGxlPWVyO3ZhciBJcj10eXBlb2YgZ2xvYmFsVGhpcy5TaGFyZWRBcnJheUJ1ZmZlcjwidSI7ZnVuY3Rpb24gcnIoQSx0KXtpZihBPT1udWxsKXJldHVybltdO2xldCBlPVtdO2ZvcihsZXQgST0wO0k8QS5sZW5ndGg7SSsrKXtsZXQgcj1vcihBW0ldLHQpO3IhPT1udWxsJiZlLnB1c2gocil9cmV0dXJuIGV9ZnVuY3Rpb24gb3IoQSx0KXtpZihBPT1udWxsKXJldHVybiBudWxsO2xldCBlPW51bGw7cmV0dXJuIEEuYnVmZmVyIT09dm9pZCAwP2U9QS5idWZmZXI6QS5ieXRlTGVuZ3RoIT09dm9pZCAwJiYoZT1BKSxJciYmZSBpbnN0YW5jZW9mIFNoYXJlZEFycmF5QnVmZmVyP251bGw6dD9lOmUuc2xpY2UoMCl9dmFyIHVlPXJyO2Z1bmN0aW9uIGdyKEEpe3JldHVybltBLmRhdGEsQS5kaXJlY3Rpb25dfXZhciBEZT1ncjtmdW5jdGlvbiBpcihBKXtyZXR1cm5bQS5wb2ludHMsQS5wb2ludERhdGEsQS5jZWxscyxBLmNlbGxEYXRhXX12YXIgaGU9aXI7ZnVuY3Rpb24gbnIoQSl7cmV0dXJuW0EucG9pbnRzLEEudmVydGljZXMsQS5saW5lcyxBLnBvbHlnb25zLEEudHJpYW5nbGVTdHJpcHMsQS5wb2ludERhdGEsQS5jZWxsRGF0YV19dmFyIGRlPW5yO2FzeW5jIGZ1bmN0aW9uIHNyKEEsdCxlLEkpe2xldCByPWxlKEEsdCxlLEkpLG89W107cmV0dXJuIHIub3V0cHV0cy5mb3JFYWNoKGZ1bmN0aW9uKGcpe2lmKGcudHlwZT09PWguQmluYXJ5U3RyZWFtfHxnLnR5cGU9PT1oLkJpbmFyeUZpbGUpe2xldCBDPWcuZGF0YTtvLnB1c2goQyl9ZWxzZSBpZihnLnR5cGU9PT1oLkltYWdlKXtsZXQgQz1nLmRhdGE7by5wdXNoKC4uLkRlKEMpKX1lbHNlIGlmKGcudHlwZT09PWguTWVzaCl7bGV0IEM9Zy5kYXRhO28ucHVzaCguLi5oZShDKSl9ZWxzZSBpZihnLnR5cGU9PT1oLlBvbHlEYXRhKXtsZXQgQz1nLmRhdGE7by5wdXNoKC4uLmRlKEMpKX19KSxNQShyLHVlKG8sITApKX12YXIgeWU9c3I7dmFyIENyPXtydW5QaXBlbGluZTphc3luYyBmdW5jdGlvbihBLHQsZSxJLHIsbyl7bGV0IGc9YXdhaXQgYWUoQSx0LG8pO3JldHVybiBhd2FpdCB5ZShnLGUsSSxyKX19O2ZBKENyKTslMEEvKiEgQnVuZGxlZCBsaWNlbnNlIGluZm9ybWF0aW9uOiUwQSUwQWNvbWxpbmsvZGlzdC9lc20vY29tbGluay5tanM6JTBBICAoKiolMEEgICAqIEBsaWNlbnNlJTBBICAgKiBDb3B5cmlnaHQgMjAxOSBHb29nbGUgTExDJTBBICAgKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMCUwQSAgICopJTBBKi8lMEEnO1d0KHZ0KTtleHBvcnR7am4gYXMgYXBwbHlQcmVzZW50YXRpb25TdGF0ZVRvSW1hZ2UsUiBhcyBnZXREZWZhdWx0V2ViV29ya2VyLHkgYXMgZ2V0UGlwZWxpbmVXb3JrZXJVcmwsRCBhcyBnZXRQaXBlbGluZXNCYXNlVXJsLHpuIGFzIHJlYWREaWNvbUVuY2Fwc3VsYXRlZFBkZixlaSBhcyByZWFkRGljb21UYWdzLGlpIGFzIHJlYWRJbWFnZURpY29tRmlsZVNlcmllcyxiZSBhcyByZWFkSW1hZ2VEaWNvbUZpbGVTZXJpZXNXb3JrZXJGdW5jdGlvbixJaSBhcyByZWFkT3ZlcmxhcHBpbmdTZWdtZW50YXRpb24sYWkgYXMgcmVhZFNlZ21lbnRhdGlvbixhZyBhcyBzZXREZWZhdWx0V2ViV29ya2VyLFd0IGFzIHNldFBpcGVsaW5lV29ya2VyVXJsLEFnIGFzIHNldFBpcGVsaW5lc0Jhc2VVcmwsWm4gYXMgc3RydWN0dXJlZFJlcG9ydFRvSHRtbCwkbiBhcyBzdHJ1Y3R1cmVkUmVwb3J0VG9UZXh0LE1BIGFzIHZlcnNpb24sZmkgYXMgd3JpdGVNdWx0aVNlZ21lbnRhdGlvbixjaSBhcyB3cml0ZU92ZXJsYXBwaW5nU2VnbWVudGF0aW9uLGxpIGFzIHdyaXRlU2VnbWVudGF0aW9ufTsKLyohIEJ1bmRsZWQgbGljZW5zZSBpbmZvcm1hdGlvbjoKCmNvbWxpbmsvZGlzdC9lc20vY29tbGluay5tanM6CiAgKCoqCiAgICogQGxpY2Vuc2UKICAgKiBDb3B5cmlnaHQgMjAxOSBHb29nbGUgTExDCiAgICogU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEFwYWNoZS0yLjAKICAgKikKKi8K""" default_config = JsPackageConfig(default_js_module) js_package = JsPackage(default_config) diff --git a/packages/dicom/python/itkwasm-dicom-wasi/itkwasm_dicom_wasi/_version.py b/packages/dicom/python/itkwasm-dicom-wasi/itkwasm_dicom_wasi/_version.py index ec28a33e2..74a6beb5f 100644 --- a/packages/dicom/python/itkwasm-dicom-wasi/itkwasm_dicom_wasi/_version.py +++ b/packages/dicom/python/itkwasm-dicom-wasi/itkwasm_dicom_wasi/_version.py @@ -1 +1 @@ -__version__ = "7.2.3" +__version__ = "7.3.0" diff --git a/packages/dicom/python/itkwasm-dicom-wasi/itkwasm_dicom_wasi/wasm_modules/apply-presentation-state-to-image.wasi.wasm b/packages/dicom/python/itkwasm-dicom-wasi/itkwasm_dicom_wasi/wasm_modules/apply-presentation-state-to-image.wasi.wasm index 9b19a1c03..a6f42bc2a 100755 Binary files a/packages/dicom/python/itkwasm-dicom-wasi/itkwasm_dicom_wasi/wasm_modules/apply-presentation-state-to-image.wasi.wasm and b/packages/dicom/python/itkwasm-dicom-wasi/itkwasm_dicom_wasi/wasm_modules/apply-presentation-state-to-image.wasi.wasm differ diff --git a/packages/dicom/python/itkwasm-dicom-wasi/itkwasm_dicom_wasi/wasm_modules/read-dicom-encapsulated-pdf.wasi.wasm b/packages/dicom/python/itkwasm-dicom-wasi/itkwasm_dicom_wasi/wasm_modules/read-dicom-encapsulated-pdf.wasi.wasm index 40b946072..56f7b3435 100755 Binary files a/packages/dicom/python/itkwasm-dicom-wasi/itkwasm_dicom_wasi/wasm_modules/read-dicom-encapsulated-pdf.wasi.wasm and b/packages/dicom/python/itkwasm-dicom-wasi/itkwasm_dicom_wasi/wasm_modules/read-dicom-encapsulated-pdf.wasi.wasm differ diff --git a/packages/dicom/python/itkwasm-dicom-wasi/itkwasm_dicom_wasi/wasm_modules/read-image-dicom-file-series.wasi.wasm b/packages/dicom/python/itkwasm-dicom-wasi/itkwasm_dicom_wasi/wasm_modules/read-image-dicom-file-series.wasi.wasm index 93588c1d8..9c9b5eb11 100755 Binary files a/packages/dicom/python/itkwasm-dicom-wasi/itkwasm_dicom_wasi/wasm_modules/read-image-dicom-file-series.wasi.wasm and b/packages/dicom/python/itkwasm-dicom-wasi/itkwasm_dicom_wasi/wasm_modules/read-image-dicom-file-series.wasi.wasm differ diff --git a/packages/dicom/python/itkwasm-dicom-wasi/itkwasm_dicom_wasi/wasm_modules/read-overlapping-segmentation.wasi.wasm b/packages/dicom/python/itkwasm-dicom-wasi/itkwasm_dicom_wasi/wasm_modules/read-overlapping-segmentation.wasi.wasm index 15e406734..c55193b4a 100755 Binary files a/packages/dicom/python/itkwasm-dicom-wasi/itkwasm_dicom_wasi/wasm_modules/read-overlapping-segmentation.wasi.wasm and b/packages/dicom/python/itkwasm-dicom-wasi/itkwasm_dicom_wasi/wasm_modules/read-overlapping-segmentation.wasi.wasm differ diff --git a/packages/dicom/python/itkwasm-dicom-wasi/itkwasm_dicom_wasi/wasm_modules/read-segmentation.wasi.wasm b/packages/dicom/python/itkwasm-dicom-wasi/itkwasm_dicom_wasi/wasm_modules/read-segmentation.wasi.wasm index 4082f3b44..946492380 100755 Binary files a/packages/dicom/python/itkwasm-dicom-wasi/itkwasm_dicom_wasi/wasm_modules/read-segmentation.wasi.wasm and b/packages/dicom/python/itkwasm-dicom-wasi/itkwasm_dicom_wasi/wasm_modules/read-segmentation.wasi.wasm differ diff --git a/packages/dicom/python/itkwasm-dicom-wasi/itkwasm_dicom_wasi/wasm_modules/structured-report-to-html.wasi.wasm b/packages/dicom/python/itkwasm-dicom-wasi/itkwasm_dicom_wasi/wasm_modules/structured-report-to-html.wasi.wasm index 8636d8d60..f9fd0083b 100755 Binary files a/packages/dicom/python/itkwasm-dicom-wasi/itkwasm_dicom_wasi/wasm_modules/structured-report-to-html.wasi.wasm and b/packages/dicom/python/itkwasm-dicom-wasi/itkwasm_dicom_wasi/wasm_modules/structured-report-to-html.wasi.wasm differ diff --git a/packages/dicom/python/itkwasm-dicom-wasi/itkwasm_dicom_wasi/wasm_modules/structured-report-to-text.wasi.wasm b/packages/dicom/python/itkwasm-dicom-wasi/itkwasm_dicom_wasi/wasm_modules/structured-report-to-text.wasi.wasm index 1cff15c36..57270227f 100755 Binary files a/packages/dicom/python/itkwasm-dicom-wasi/itkwasm_dicom_wasi/wasm_modules/structured-report-to-text.wasi.wasm and b/packages/dicom/python/itkwasm-dicom-wasi/itkwasm_dicom_wasi/wasm_modules/structured-report-to-text.wasi.wasm differ diff --git a/packages/dicom/python/itkwasm-dicom-wasi/itkwasm_dicom_wasi/wasm_modules/write-multi-segmentation.wasi.wasm b/packages/dicom/python/itkwasm-dicom-wasi/itkwasm_dicom_wasi/wasm_modules/write-multi-segmentation.wasi.wasm index 7b685b4a9..e16bee4f9 100755 Binary files a/packages/dicom/python/itkwasm-dicom-wasi/itkwasm_dicom_wasi/wasm_modules/write-multi-segmentation.wasi.wasm and b/packages/dicom/python/itkwasm-dicom-wasi/itkwasm_dicom_wasi/wasm_modules/write-multi-segmentation.wasi.wasm differ diff --git a/packages/dicom/python/itkwasm-dicom-wasi/itkwasm_dicom_wasi/wasm_modules/write-overlapping-segmentation.wasi.wasm b/packages/dicom/python/itkwasm-dicom-wasi/itkwasm_dicom_wasi/wasm_modules/write-overlapping-segmentation.wasi.wasm index cc028cb98..5dce238bd 100755 Binary files a/packages/dicom/python/itkwasm-dicom-wasi/itkwasm_dicom_wasi/wasm_modules/write-overlapping-segmentation.wasi.wasm and b/packages/dicom/python/itkwasm-dicom-wasi/itkwasm_dicom_wasi/wasm_modules/write-overlapping-segmentation.wasi.wasm differ diff --git a/packages/dicom/python/itkwasm-dicom-wasi/itkwasm_dicom_wasi/wasm_modules/write-segmentation.wasi.wasm b/packages/dicom/python/itkwasm-dicom-wasi/itkwasm_dicom_wasi/wasm_modules/write-segmentation.wasi.wasm index d6b23bd44..8197e9f8d 100755 Binary files a/packages/dicom/python/itkwasm-dicom-wasi/itkwasm_dicom_wasi/wasm_modules/write-segmentation.wasi.wasm and b/packages/dicom/python/itkwasm-dicom-wasi/itkwasm_dicom_wasi/wasm_modules/write-segmentation.wasi.wasm differ diff --git a/packages/dicom/python/itkwasm-dicom/itkwasm_dicom/_version.py b/packages/dicom/python/itkwasm-dicom/itkwasm_dicom/_version.py index ec28a33e2..74a6beb5f 100644 --- a/packages/dicom/python/itkwasm-dicom/itkwasm_dicom/_version.py +++ b/packages/dicom/python/itkwasm-dicom/itkwasm_dicom/_version.py @@ -1 +1 @@ -__version__ = "7.2.3" +__version__ = "7.3.0" diff --git a/packages/dicom/typescript/package.json b/packages/dicom/typescript/package.json index 1b7679b9e..e06cb5ebd 100644 --- a/packages/dicom/typescript/package.json +++ b/packages/dicom/typescript/package.json @@ -1,6 +1,6 @@ { "name": "@itk-wasm/dicom", - "version": "7.2.3", + "version": "7.3.0", "description": "Read files and images related to DICOM file format.", "type": "module", "module": "./dist/index.js", diff --git a/packages/downsample/package.json b/packages/downsample/package.json index 30eec7919..97e6b1c7d 100644 --- a/packages/downsample/package.json +++ b/packages/downsample/package.json @@ -1,6 +1,6 @@ { "name": "@itk-wasm/downsample-build", - "version": "1.4.3", + "version": "1.5.0", "private": true, "description": "Pipelines for downsampling images.", "type": "module", diff --git a/packages/downsample/python/itkwasm-downsample-emscripten/itkwasm_downsample_emscripten/_version.py b/packages/downsample/python/itkwasm-downsample-emscripten/itkwasm_downsample_emscripten/_version.py index aa56ed404..5b6018861 100644 --- a/packages/downsample/python/itkwasm-downsample-emscripten/itkwasm_downsample_emscripten/_version.py +++ b/packages/downsample/python/itkwasm-downsample-emscripten/itkwasm_downsample_emscripten/_version.py @@ -1 +1 @@ -__version__ = "1.4.3" +__version__ = "1.5.0" diff --git a/packages/downsample/python/itkwasm-downsample-emscripten/itkwasm_downsample_emscripten/js_package.py b/packages/downsample/python/itkwasm-downsample-emscripten/itkwasm_downsample_emscripten/js_package.py index 65811509a..eb9a3798d 100644 --- a/packages/downsample/python/itkwasm-downsample-emscripten/itkwasm_downsample_emscripten/js_package.py +++ b/packages/downsample/python/itkwasm-downsample-emscripten/itkwasm_downsample_emscripten/js_package.py @@ -3,6 +3,6 @@ from itkwasm.pyodide import JsPackageConfig, JsPackage from ._version import __version__ -default_js_module = """data:text/javascript;base64,dmFyIE90PU9iamVjdC5kZWZpbmVQcm9wZXJ0eTt2YXIgUHQ9KEEsZSk9Pntmb3IodmFyIHQgaW4gZSlPdChBLHQse2dldDplW3RdLGVudW1lcmFibGU6ITB9KX07dmFyIHh0PSIxLjQuMyIsTUE9eHQ7dmFyIEp0PXtJbnQ4OiJpbnQ4IixVSW50ODoidWludDgiLEludDE2OiJpbnQxNiIsVUludDE2OiJ1aW50MTYiLEludDMyOiJpbnQzMiIsVUludDMyOiJ1aW50MzIiLEludDY0OiJpbnQ2NCIsVUludDY0OiJ1aW50NjQiLFNpemVWYWx1ZVR5cGU6InVpbnQ2NCIsSWRlbnRpZmllclR5cGU6InVpbnQ2NCIsSW5kZXhWYWx1ZVR5cGU6ImludDY0IixPZmZzZXRWYWx1ZVR5cGU6ImludDY0In0sUj1KdDt2YXIgSHQ9e0Zsb2F0MzI6ImZsb2F0MzIiLEZsb2F0NjQ6ImZsb2F0NjQiLFNwYWNlUHJlY2lzaW9uVHlwZToiZmxvYXQ2NCJ9LGo9SHQ7ZnVuY3Rpb24gTXQoQSxlKXtsZXQgdD1udWxsO3N3aXRjaChBKXtjYXNlIFIuVUludDg6e3Q9bmV3IFVpbnQ4QXJyYXkoZSk7YnJlYWt9Y2FzZSBSLkludDg6e3Q9bmV3IEludDhBcnJheShlKTticmVha31jYXNlIFIuVUludDE2Ont0PW5ldyBVaW50MTZBcnJheShlKTticmVha31jYXNlIFIuSW50MTY6e3Q9bmV3IEludDE2QXJyYXkoZSk7YnJlYWt9Y2FzZSBSLlVJbnQzMjp7dD1uZXcgVWludDMyQXJyYXkoZSk7YnJlYWt9Y2FzZSBSLkludDMyOnt0PW5ldyBJbnQzMkFycmF5KGUpO2JyZWFrfWNhc2UgUi5VSW50NjQ6e3R5cGVvZiBnbG9iYWxUaGlzLkJpZ1VpbnQ2NEFycmF5PT0iZnVuY3Rpb24iP3Q9bmV3IEJpZ1VpbnQ2NEFycmF5KGUpOnQ9bmV3IFVpbnQ4QXJyYXkoZSk7YnJlYWt9Y2FzZSBSLkludDY0Ont0eXBlb2YgZ2xvYmFsVGhpcy5CaWdJbnQ2NEFycmF5PT0iZnVuY3Rpb24iP3Q9bmV3IEJpZ0ludDY0QXJyYXkoZSk6dD1uZXcgVWludDhBcnJheShlKTticmVha31jYXNlIGouRmxvYXQzMjp7dD1uZXcgRmxvYXQzMkFycmF5KGUpO2JyZWFrfWNhc2Ugai5GbG9hdDY0Ont0PW5ldyBGbG9hdDY0QXJyYXkoZSk7YnJlYWt9Y2FzZSJudWxsIjp7dD1udWxsO2JyZWFrfWNhc2UgbnVsbDp7dD1udWxsO2JyZWFrfWRlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKCJUeXBlIGlzIG5vdCBzdXBwb3J0ZWQgYXMgYSBUeXBlZEFycmF5Iil9cmV0dXJuIHR9dmFyIFA9TXQ7dmFyIHF0PXtUZXh0RmlsZToiVGV4dEZpbGUiLEJpbmFyeUZpbGU6IkJpbmFyeUZpbGUiLFRleHRTdHJlYW06IlRleHRTdHJlYW0iLEJpbmFyeVN0cmVhbToiQmluYXJ5U3RyZWFtIixJbWFnZToiSW1hZ2UiLFBvaW50U2V0OiJQb2ludFNldCIsTWVzaDoiTWVzaCIsUG9seURhdGE6IlBvbHlEYXRhIixUcmFuc2Zvcm1MaXN0OiJUcmFuc2Zvcm1MaXN0IixKc29uQ29tcGF0aWJsZToiSnNvbkNvbXBhdGlibGUifSxwPXF0O3ZhciB3ZT1TeW1ib2woIkNvbWxpbmsucHJveHkiKSxZdD1TeW1ib2woIkNvbWxpbmsuZW5kcG9pbnQiKSxLQT1TeW1ib2woIkNvbWxpbmsucmVsZWFzZVByb3h5IikscUE9U3ltYm9sKCJDb21saW5rLmZpbmFsaXplciIpLGZBPVN5bWJvbCgiQ29tbGluay50aHJvd24iKSxEZT1BPT50eXBlb2YgQT09Im9iamVjdCImJkEhPT1udWxsfHx0eXBlb2YgQT09ImZ1bmN0aW9uIixLdD17Y2FuSGFuZGxlOkE9PkRlKEEpJiZBW3dlXSxzZXJpYWxpemUoQSl7bGV0e3BvcnQxOmUscG9ydDI6dH09bmV3IE1lc3NhZ2VDaGFubmVsO3JldHVybiBiZShBLGUpLFt0LFt0XV19LGRlc2VyaWFsaXplKEEpe3JldHVybiBBLnN0YXJ0KCksV0EoQSl9fSxXdD17Y2FuSGFuZGxlOkE9PkRlKEEpJiZmQSBpbiBBLHNlcmlhbGl6ZSh7dmFsdWU6QX0pe2xldCBlO3JldHVybiBBIGluc3RhbmNlb2YgRXJyb3I/ZT17aXNFcnJvcjohMCx2YWx1ZTp7bWVzc2FnZTpBLm1lc3NhZ2UsbmFtZTpBLm5hbWUsc3RhY2s6QS5zdGFja319OmU9e2lzRXJyb3I6ITEsdmFsdWU6QX0sW2UsW11dfSxkZXNlcmlhbGl6ZShBKXt0aHJvdyBBLmlzRXJyb3I/T2JqZWN0LmFzc2lnbihuZXcgRXJyb3IoQS52YWx1ZS5tZXNzYWdlKSxBLnZhbHVlKTpBLnZhbHVlfX0sU2U9bmV3IE1hcChbWyJwcm94eSIsS3RdLFsidGhyb3ciLFd0XV0pO2Z1bmN0aW9uIHZ0KEEsZSl7Zm9yKGxldCB0IG9mIEEpaWYoZT09PXR8fHQ9PT0iKiJ8fHQgaW5zdGFuY2VvZiBSZWdFeHAmJnQudGVzdChlKSlyZXR1cm4hMDtyZXR1cm4hMX1mdW5jdGlvbiBiZShBLGU9Z2xvYmFsVGhpcyx0PVsiKiJdKXtlLmFkZEV2ZW50TGlzdGVuZXIoIm1lc3NhZ2UiLGZ1bmN0aW9uIHIobil7aWYoIW58fCFuLmRhdGEpcmV0dXJuO2lmKCF2dCh0LG4ub3JpZ2luKSl7Y29uc29sZS53YXJuKGBJbnZhbGlkIG9yaWdpbiAnJHtuLm9yaWdpbn0nIGZvciBjb21saW5rIHByb3h5YCk7cmV0dXJufWxldHtpZDpvLHR5cGU6aSxwYXRoOmd9PU9iamVjdC5hc3NpZ24oe3BhdGg6W119LG4uZGF0YSksQj0obi5kYXRhLmFyZ3VtZW50TGlzdHx8W10pLm1hcChXKSxDO3RyeXtsZXQgYT1nLnNsaWNlKDAsLTEpLnJlZHVjZSgoRSxsKT0+RVtsXSxBKSxJPWcucmVkdWNlKChFLGwpPT5FW2xdLEEpO3N3aXRjaChpKXtjYXNlIkdFVCI6Qz1JO2JyZWFrO2Nhc2UiU0VUIjphW2cuc2xpY2UoLTEpWzBdXT1XKG4uZGF0YS52YWx1ZSksQz0hMDticmVhaztjYXNlIkFQUExZIjpDPUkuYXBwbHkoYSxCKTticmVhaztjYXNlIkNPTlNUUlVDVCI6e2xldCBFPW5ldyBJKC4uLkIpO0M9WnQoRSl9YnJlYWs7Y2FzZSJFTkRQT0lOVCI6e2xldHtwb3J0MTpFLHBvcnQyOmx9PW5ldyBNZXNzYWdlQ2hhbm5lbDtiZShBLGwpLEM9dkEoRSxbRV0pfWJyZWFrO2Nhc2UiUkVMRUFTRSI6Qz12b2lkIDA7YnJlYWs7ZGVmYXVsdDpyZXR1cm59fWNhdGNoKGEpe0M9e3ZhbHVlOmEsW2ZBXTowfX1Qcm9taXNlLnJlc29sdmUoQykuY2F0Y2goYT0+KHt2YWx1ZTphLFtmQV06MH0pKS50aGVuKGE9PntsZXRbSSxFXT1kQShhKTtlLnBvc3RNZXNzYWdlKE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSxJKSx7aWQ6b30pLEUpLGk9PT0iUkVMRUFTRSImJihlLnJlbW92ZUV2ZW50TGlzdGVuZXIoIm1lc3NhZ2UiLHIpLFJlKGUpLHFBIGluIEEmJnR5cGVvZiBBW3FBXT09ImZ1bmN0aW9uIiYmQVtxQV0oKSl9KS5jYXRjaChhPT57bGV0W0ksRV09ZEEoe3ZhbHVlOm5ldyBUeXBlRXJyb3IoIlVuc2VyaWFsaXphYmxlIHJldHVybiB2YWx1ZSIpLFtmQV06MH0pO2UucG9zdE1lc3NhZ2UoT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LEkpLHtpZDpvfSksRSl9KX0pLGUuc3RhcnQmJmUuc3RhcnQoKX1mdW5jdGlvbiBqdChBKXtyZXR1cm4gQS5jb25zdHJ1Y3Rvci5uYW1lPT09Ik1lc3NhZ2VQb3J0In1mdW5jdGlvbiBSZShBKXtqdChBKSYmQS5jbG9zZSgpfWZ1bmN0aW9uIFdBKEEsZSl7cmV0dXJuIFlBKEEsW10sZSl9ZnVuY3Rpb24gRUEoQSl7aWYoQSl0aHJvdyBuZXcgRXJyb3IoIlByb3h5IGhhcyBiZWVuIHJlbGVhc2VkIGFuZCBpcyBub3QgdXNlYWJsZSIpfWZ1bmN0aW9uIGtlKEEpe3JldHVybiBfKEEse3R5cGU6IlJFTEVBU0UifSkudGhlbigoKT0+e1JlKEEpfSl9dmFyIFFBPW5ldyBXZWFrTWFwLHBBPSJGaW5hbGl6YXRpb25SZWdpc3RyeSJpbiBnbG9iYWxUaGlzJiZuZXcgRmluYWxpemF0aW9uUmVnaXN0cnkoQT0+e2xldCBlPShRQS5nZXQoQSl8fDApLTE7UUEuc2V0KEEsZSksZT09PTAmJmtlKEEpfSk7ZnVuY3Rpb24gX3QoQSxlKXtsZXQgdD0oUUEuZ2V0KGUpfHwwKSsxO1FBLnNldChlLHQpLHBBJiZwQS5yZWdpc3RlcihBLGUsQSl9ZnVuY3Rpb24genQoQSl7cEEmJnBBLnVucmVnaXN0ZXIoQSl9ZnVuY3Rpb24gWUEoQSxlPVtdLHQ9ZnVuY3Rpb24oKXt9KXtsZXQgcj0hMSxuPW5ldyBQcm94eSh0LHtnZXQobyxpKXtpZihFQShyKSxpPT09S0EpcmV0dXJuKCk9Pnt6dChuKSxrZShBKSxyPSEwfTtpZihpPT09InRoZW4iKXtpZihlLmxlbmd0aD09PTApcmV0dXJue3RoZW46KCk9Pm59O2xldCBnPV8oQSx7dHlwZToiR0VUIixwYXRoOmUubWFwKEI9PkIudG9TdHJpbmcoKSl9KS50aGVuKFcpO3JldHVybiBnLnRoZW4uYmluZChnKX1yZXR1cm4gWUEoQSxbLi4uZSxpXSl9LHNldChvLGksZyl7RUEocik7bGV0W0IsQ109ZEEoZyk7cmV0dXJuIF8oQSx7dHlwZToiU0VUIixwYXRoOlsuLi5lLGldLm1hcChhPT5hLnRvU3RyaW5nKCkpLHZhbHVlOkJ9LEMpLnRoZW4oVyl9LGFwcGx5KG8saSxnKXtFQShyKTtsZXQgQj1lW2UubGVuZ3RoLTFdO2lmKEI9PT1ZdClyZXR1cm4gXyhBLHt0eXBlOiJFTkRQT0lOVCJ9KS50aGVuKFcpO2lmKEI9PT0iYmluZCIpcmV0dXJuIFlBKEEsZS5zbGljZSgwLC0xKSk7bGV0W0MsYV09eWUoZyk7cmV0dXJuIF8oQSx7dHlwZToiQVBQTFkiLHBhdGg6ZS5tYXAoST0+SS50b1N0cmluZygpKSxhcmd1bWVudExpc3Q6Q30sYSkudGhlbihXKX0sY29uc3RydWN0KG8saSl7RUEocik7bGV0W2csQl09eWUoaSk7cmV0dXJuIF8oQSx7dHlwZToiQ09OU1RSVUNUIixwYXRoOmUubWFwKEM9PkMudG9TdHJpbmcoKSksYXJndW1lbnRMaXN0Omd9LEIpLnRoZW4oVyl9fSk7cmV0dXJuIF90KG4sQSksbn1mdW5jdGlvbiBWdChBKXtyZXR1cm4gQXJyYXkucHJvdG90eXBlLmNvbmNhdC5hcHBseShbXSxBKX1mdW5jdGlvbiB5ZShBKXtsZXQgZT1BLm1hcChkQSk7cmV0dXJuW2UubWFwKHQ9PnRbMF0pLFZ0KGUubWFwKHQ9PnRbMV0pKV19dmFyIEZlPW5ldyBXZWFrTWFwO2Z1bmN0aW9uIHZBKEEsZSl7cmV0dXJuIEZlLnNldChBLGUpLEF9ZnVuY3Rpb24gWnQoQSl7cmV0dXJuIE9iamVjdC5hc3NpZ24oQSx7W3dlXTohMH0pfWZ1bmN0aW9uIGRBKEEpe2ZvcihsZXRbZSx0XW9mIFNlKWlmKHQuY2FuSGFuZGxlKEEpKXtsZXRbcixuXT10LnNlcmlhbGl6ZShBKTtyZXR1cm5be3R5cGU6IkhBTkRMRVIiLG5hbWU6ZSx2YWx1ZTpyfSxuXX1yZXR1cm5be3R5cGU6IlJBVyIsdmFsdWU6QX0sRmUuZ2V0KEEpfHxbXV19ZnVuY3Rpb24gVyhBKXtzd2l0Y2goQS50eXBlKXtjYXNlIkhBTkRMRVIiOnJldHVybiBTZS5nZXQoQS5uYW1lKS5kZXNlcmlhbGl6ZShBLnZhbHVlKTtjYXNlIlJBVyI6cmV0dXJuIEEudmFsdWV9fWZ1bmN0aW9uIF8oQSxlLHQpe3JldHVybiBuZXcgUHJvbWlzZShyPT57bGV0IG49WHQoKTtBLmFkZEV2ZW50TGlzdGVuZXIoIm1lc3NhZ2UiLGZ1bmN0aW9uIG8oaSl7IWkuZGF0YXx8IWkuZGF0YS5pZHx8aS5kYXRhLmlkIT09bnx8KEEucmVtb3ZlRXZlbnRMaXN0ZW5lcigibWVzc2FnZSIsbykscihpLmRhdGEpKX0pLEEuc3RhcnQmJkEuc3RhcnQoKSxBLnBvc3RNZXNzYWdlKE9iamVjdC5hc3NpZ24oe2lkOm59LGUpLHQpfSl9ZnVuY3Rpb24gWHQoKXtyZXR1cm4gbmV3IEFycmF5KDQpLmZpbGwoMCkubWFwKCgpPT5NYXRoLmZsb29yKE1hdGgucmFuZG9tKCkqTnVtYmVyLk1BWF9TQUZFX0lOVEVHRVIpLnRvU3RyaW5nKDE2KSkuam9pbigiLSIpfWZ1bmN0aW9uIHJBKEEsZSl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIEEuYXBwbHkoZSxhcmd1bWVudHMpfX12YXJ7dG9TdHJpbmc6JHR9PU9iamVjdC5wcm90b3R5cGUse2dldFByb3RvdHlwZU9mOnpBfT1PYmplY3QsaEE9KEE9PmU9PntsZXQgdD0kdC5jYWxsKGUpO3JldHVybiBBW3RdfHwoQVt0XT10LnNsaWNlKDgsLTEpLnRvTG93ZXJDYXNlKCkpfSkoT2JqZWN0LmNyZWF0ZShudWxsKSksTj1BPT4oQT1BLnRvTG93ZXJDYXNlKCksZT0+aEEoZSk9PT1BKSx5QT1BPT5lPT50eXBlb2YgZT09PUEse2lzQXJyYXk6en09QXJyYXksbkE9eUEoInVuZGVmaW5lZCIpO2Z1bmN0aW9uIEFyKEEpe3JldHVybiBBIT09bnVsbCYmIW5BKEEpJiZBLmNvbnN0cnVjdG9yIT09bnVsbCYmIW5BKEEuY29uc3RydWN0b3IpJiZrKEEuY29uc3RydWN0b3IuaXNCdWZmZXIpJiZBLmNvbnN0cnVjdG9yLmlzQnVmZmVyKEEpfXZhciBHZT1OKCJBcnJheUJ1ZmZlciIpO2Z1bmN0aW9uIGVyKEEpe2xldCBlO3JldHVybiB0eXBlb2YgQXJyYXlCdWZmZXI8InUiJiZBcnJheUJ1ZmZlci5pc1ZpZXc/ZT1BcnJheUJ1ZmZlci5pc1ZpZXcoQSk6ZT1BJiZBLmJ1ZmZlciYmR2UoQS5idWZmZXIpLGV9dmFyIHRyPXlBKCJzdHJpbmciKSxrPXlBKCJmdW5jdGlvbiIpLFRlPXlBKCJudW1iZXIiKSx3QT1BPT5BIT09bnVsbCYmdHlwZW9mIEE9PSJvYmplY3QiLHJyPUE9PkE9PT0hMHx8QT09PSExLG1BPUE9PntpZihoQShBKSE9PSJvYmplY3QiKXJldHVybiExO2xldCBlPXpBKEEpO3JldHVybihlPT09bnVsbHx8ZT09PU9iamVjdC5wcm90b3R5cGV8fE9iamVjdC5nZXRQcm90b3R5cGVPZihlKT09PW51bGwpJiYhKFN5bWJvbC50b1N0cmluZ1RhZyBpbiBBKSYmIShTeW1ib2wuaXRlcmF0b3IgaW4gQSl9LG5yPU4oIkRhdGUiKSxvcj1OKCJGaWxlIiksaXI9TigiQmxvYiIpLGFyPU4oIkZpbGVMaXN0Iiksc3I9QT0+d0EoQSkmJmsoQS5waXBlKSxJcj1BPT57bGV0IGU7cmV0dXJuIEEmJih0eXBlb2YgRm9ybURhdGE9PSJmdW5jdGlvbiImJkEgaW5zdGFuY2VvZiBGb3JtRGF0YXx8ayhBLmFwcGVuZCkmJigoZT1oQShBKSk9PT0iZm9ybWRhdGEifHxlPT09Im9iamVjdCImJmsoQS50b1N0cmluZykmJkEudG9TdHJpbmcoKT09PSJbb2JqZWN0IEZvcm1EYXRhXSIpKX0sZ3I9TigiVVJMU2VhcmNoUGFyYW1zIiksW2xyLENyLEJyLGNyXT1bIlJlYWRhYmxlU3RyZWFtIiwiUmVxdWVzdCIsIlJlc3BvbnNlIiwiSGVhZGVycyJdLm1hcChOKSx1cj1BPT5BLnRyaW0/QS50cmltKCk6QS5yZXBsYWNlKC9eW1xzXHVGRUZGXHhBMF0rfFtcc1x1RkVGRlx4QTBdKyQvZywiIik7ZnVuY3Rpb24gb0EoQSxlLHthbGxPd25LZXlzOnQ9ITF9PXt9KXtpZihBPT09bnVsbHx8dHlwZW9mIEE+InUiKXJldHVybjtsZXQgcixuO2lmKHR5cGVvZiBBIT0ib2JqZWN0IiYmKEE9W0FdKSx6KEEpKWZvcihyPTAsbj1BLmxlbmd0aDtyPG47cisrKWUuY2FsbChudWxsLEFbcl0scixBKTtlbHNle2xldCBvPXQ/T2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoQSk6T2JqZWN0LmtleXMoQSksaT1vLmxlbmd0aCxnO2ZvcihyPTA7cjxpO3IrKylnPW9bcl0sZS5jYWxsKG51bGwsQVtnXSxnLEEpfX1mdW5jdGlvbiBPZShBLGUpe2U9ZS50b0xvd2VyQ2FzZSgpO2xldCB0PU9iamVjdC5rZXlzKEEpLHI9dC5sZW5ndGgsbjtmb3IoO3ItLSA+MDspaWYobj10W3JdLGU9PT1uLnRvTG93ZXJDYXNlKCkpcmV0dXJuIG47cmV0dXJuIG51bGx9dmFyIHY9dHlwZW9mIGdsb2JhbFRoaXM8InUiP2dsb2JhbFRoaXM6dHlwZW9mIHNlbGY8InUiP3NlbGY6dHlwZW9mIHdpbmRvdzwidSI/d2luZG93Omdsb2JhbCxQZT1BPT4hbkEoQSkmJkEhPT12O2Z1bmN0aW9uIF9BKCl7bGV0e2Nhc2VsZXNzOkF9PVBlKHRoaXMpJiZ0aGlzfHx7fSxlPXt9LHQ9KHIsbik9PntsZXQgbz1BJiZPZShlLG4pfHxuO21BKGVbb10pJiZtQShyKT9lW29dPV9BKGVbb10scik6bUEocik/ZVtvXT1fQSh7fSxyKTp6KHIpP2Vbb109ci5zbGljZSgpOmVbb109cn07Zm9yKGxldCByPTAsbj1hcmd1bWVudHMubGVuZ3RoO3I8bjtyKyspYXJndW1lbnRzW3JdJiZvQShhcmd1bWVudHNbcl0sdCk7cmV0dXJuIGV9dmFyIEVyPShBLGUsdCx7YWxsT3duS2V5czpyfT17fSk9PihvQShlLChuLG8pPT57dCYmayhuKT9BW29dPXJBKG4sdCk6QVtvXT1ufSx7YWxsT3duS2V5czpyfSksQSksZnI9QT0+KEEuY2hhckNvZGVBdCgwKT09PTY1Mjc5JiYoQT1BLnNsaWNlKDEpKSxBKSxRcj0oQSxlLHQscik9PntBLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKGUucHJvdG90eXBlLHIpLEEucHJvdG90eXBlLmNvbnN0cnVjdG9yPUEsT2JqZWN0LmRlZmluZVByb3BlcnR5KEEsInN1cGVyIix7dmFsdWU6ZS5wcm90b3R5cGV9KSx0JiZPYmplY3QuYXNzaWduKEEucHJvdG90eXBlLHQpfSxwcj0oQSxlLHQscik9PntsZXQgbixvLGksZz17fTtpZihlPWV8fHt9LEE9PW51bGwpcmV0dXJuIGU7ZG97Zm9yKG49T2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoQSksbz1uLmxlbmd0aDtvLS0gPjA7KWk9bltvXSwoIXJ8fHIoaSxBLGUpKSYmIWdbaV0mJihlW2ldPUFbaV0sZ1tpXT0hMCk7QT10IT09ITEmJnpBKEEpfXdoaWxlKEEmJighdHx8dChBLGUpKSYmQSE9PU9iamVjdC5wcm90b3R5cGUpO3JldHVybiBlfSxkcj0oQSxlLHQpPT57QT1TdHJpbmcoQSksKHQ9PT12b2lkIDB8fHQ+QS5sZW5ndGgpJiYodD1BLmxlbmd0aCksdC09ZS5sZW5ndGg7bGV0IHI9QS5pbmRleE9mKGUsdCk7cmV0dXJuIHIhPT0tMSYmcj09PXR9LG1yPUE9PntpZighQSlyZXR1cm4gbnVsbDtpZih6KEEpKXJldHVybiBBO2xldCBlPUEubGVuZ3RoO2lmKCFUZShlKSlyZXR1cm4gbnVsbDtsZXQgdD1uZXcgQXJyYXkoZSk7Zm9yKDtlLS0gPjA7KXRbZV09QVtlXTtyZXR1cm4gdH0saHI9KEE9PmU9PkEmJmUgaW5zdGFuY2VvZiBBKSh0eXBlb2YgVWludDhBcnJheTwidSImJnpBKFVpbnQ4QXJyYXkpKSx5cj0oQSxlKT0+e2xldCByPShBJiZBW1N5bWJvbC5pdGVyYXRvcl0pLmNhbGwoQSksbjtmb3IoOyhuPXIubmV4dCgpKSYmIW4uZG9uZTspe2xldCBvPW4udmFsdWU7ZS5jYWxsKEEsb1swXSxvWzFdKX19LHdyPShBLGUpPT57bGV0IHQscj1bXTtmb3IoOyh0PUEuZXhlYyhlKSkhPT1udWxsOylyLnB1c2godCk7cmV0dXJuIHJ9LERyPU4oIkhUTUxGb3JtRWxlbWVudCIpLFNyPUE9PkEudG9Mb3dlckNhc2UoKS5yZXBsYWNlKC9bLV9cc10oW2EtelxkXSkoXHcqKS9nLGZ1bmN0aW9uKHQscixuKXtyZXR1cm4gci50b1VwcGVyQ2FzZSgpK259KSxOZT0oKHtoYXNPd25Qcm9wZXJ0eTpBfSk9PihlLHQpPT5BLmNhbGwoZSx0KSkoT2JqZWN0LnByb3RvdHlwZSksYnI9TigiUmVnRXhwIikseGU9KEEsZSk9PntsZXQgdD1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyhBKSxyPXt9O29BKHQsKG4sbyk9PntsZXQgaTsoaT1lKG4sbyxBKSkhPT0hMSYmKHJbb109aXx8bil9KSxPYmplY3QuZGVmaW5lUHJvcGVydGllcyhBLHIpfSxScj1BPT57eGUoQSwoZSx0KT0+e2lmKGsoQSkmJlsiYXJndW1lbnRzIiwiY2FsbGVyIiwiY2FsbGVlIl0uaW5kZXhPZih0KSE9PS0xKXJldHVybiExO2xldCByPUFbdF07aWYoayhyKSl7aWYoZS5lbnVtZXJhYmxlPSExLCJ3cml0YWJsZSJpbiBlKXtlLndyaXRhYmxlPSExO3JldHVybn1lLnNldHx8KGUuc2V0PSgpPT57dGhyb3cgRXJyb3IoIkNhbiBub3QgcmV3cml0ZSByZWFkLW9ubHkgbWV0aG9kICciK3QrIiciKX0pfX0pfSxrcj0oQSxlKT0+e2xldCB0PXt9LHI9bj0+e24uZm9yRWFjaChvPT57dFtvXT0hMH0pfTtyZXR1cm4geihBKT9yKEEpOnIoU3RyaW5nKEEpLnNwbGl0KGUpKSx0fSxGcj0oKT0+e30sVXI9KEEsZSk9PkEhPW51bGwmJk51bWJlci5pc0Zpbml0ZShBPStBKT9BOmUsakE9ImFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6IixMZT0iMDEyMzQ1Njc4OSIsSmU9e0RJR0lUOkxlLEFMUEhBOmpBLEFMUEhBX0RJR0lUOmpBK2pBLnRvVXBwZXJDYXNlKCkrTGV9LE5yPShBPTE2LGU9SmUuQUxQSEFfRElHSVQpPT57bGV0IHQ9IiIse2xlbmd0aDpyfT1lO2Zvcig7QS0tOyl0Kz1lW01hdGgucmFuZG9tKCkqcnwwXTtyZXR1cm4gdH07ZnVuY3Rpb24gTHIoQSl7cmV0dXJuISEoQSYmayhBLmFwcGVuZCkmJkFbU3ltYm9sLnRvU3RyaW5nVGFnXT09PSJGb3JtRGF0YSImJkFbU3ltYm9sLml0ZXJhdG9yXSl9dmFyIEdyPUE9PntsZXQgZT1uZXcgQXJyYXkoMTApLHQ9KHIsbik9PntpZih3QShyKSl7aWYoZS5pbmRleE9mKHIpPj0wKXJldHVybjtpZighKCJ0b0pTT04iaW4gcikpe2Vbbl09cjtsZXQgbz16KHIpP1tdOnt9O3JldHVybiBvQShyLChpLGcpPT57bGV0IEI9dChpLG4rMSk7IW5BKEIpJiYob1tnXT1CKX0pLGVbbl09dm9pZCAwLG99fXJldHVybiByfTtyZXR1cm4gdChBLDApfSxUcj1OKCJBc3luY0Z1bmN0aW9uIiksT3I9QT0+QSYmKHdBKEEpfHxrKEEpKSYmayhBLnRoZW4pJiZrKEEuY2F0Y2gpLEhlPSgoQSxlKT0+QT9zZXRJbW1lZGlhdGU6ZT8oKHQscik9Pih2LmFkZEV2ZW50TGlzdGVuZXIoIm1lc3NhZ2UiLCh7c291cmNlOm4sZGF0YTpvfSk9PntuPT09diYmbz09PXQmJnIubGVuZ3RoJiZyLnNoaWZ0KCkoKX0sITEpLG49PntyLnB1c2gobiksdi5wb3N0TWVzc2FnZSh0LCIqIil9KSkoYGF4aW9zQCR7TWF0aC5yYW5kb20oKX1gLFtdKTp0PT5zZXRUaW1lb3V0KHQpKSh0eXBlb2Ygc2V0SW1tZWRpYXRlPT0iZnVuY3Rpb24iLGsodi5wb3N0TWVzc2FnZSkpLFByPXR5cGVvZiBxdWV1ZU1pY3JvdGFzazwidSI/cXVldWVNaWNyb3Rhc2suYmluZCh2KTp0eXBlb2YgcHJvY2VzczwidSImJnByb2Nlc3MubmV4dFRpY2t8fEhlLHM9e2lzQXJyYXk6eixpc0FycmF5QnVmZmVyOkdlLGlzQnVmZmVyOkFyLGlzRm9ybURhdGE6SXIsaXNBcnJheUJ1ZmZlclZpZXc6ZXIsaXNTdHJpbmc6dHIsaXNOdW1iZXI6VGUsaXNCb29sZWFuOnJyLGlzT2JqZWN0OndBLGlzUGxhaW5PYmplY3Q6bUEsaXNSZWFkYWJsZVN0cmVhbTpscixpc1JlcXVlc3Q6Q3IsaXNSZXNwb25zZTpCcixpc0hlYWRlcnM6Y3IsaXNVbmRlZmluZWQ6bkEsaXNEYXRlOm5yLGlzRmlsZTpvcixpc0Jsb2I6aXIsaXNSZWdFeHA6YnIsaXNGdW5jdGlvbjprLGlzU3RyZWFtOnNyLGlzVVJMU2VhcmNoUGFyYW1zOmdyLGlzVHlwZWRBcnJheTpocixpc0ZpbGVMaXN0OmFyLGZvckVhY2g6b0EsbWVyZ2U6X0EsZXh0ZW5kOkVyLHRyaW06dXIsc3RyaXBCT006ZnIsaW5oZXJpdHM6UXIsdG9GbGF0T2JqZWN0OnByLGtpbmRPZjpoQSxraW5kT2ZUZXN0Ok4sZW5kc1dpdGg6ZHIsdG9BcnJheTptcixmb3JFYWNoRW50cnk6eXIsbWF0Y2hBbGw6d3IsaXNIVE1MRm9ybTpEcixoYXNPd25Qcm9wZXJ0eTpOZSxoYXNPd25Qcm9wOk5lLHJlZHVjZURlc2NyaXB0b3JzOnhlLGZyZWV6ZU1ldGhvZHM6UnIsdG9PYmplY3RTZXQ6a3IsdG9DYW1lbENhc2U6U3Isbm9vcDpGcix0b0Zpbml0ZU51bWJlcjpVcixmaW5kS2V5Ok9lLGdsb2JhbDp2LGlzQ29udGV4dERlZmluZWQ6UGUsQUxQSEFCRVQ6SmUsZ2VuZXJhdGVTdHJpbmc6TnIsaXNTcGVjQ29tcGxpYW50Rm9ybTpMcix0b0pTT05PYmplY3Q6R3IsaXNBc3luY0ZuOlRyLGlzVGhlbmFibGU6T3Isc2V0SW1tZWRpYXRlOkhlLGFzYXA6UHJ9O2Z1bmN0aW9uIFYoQSxlLHQscixuKXtFcnJvci5jYWxsKHRoaXMpLEVycm9yLmNhcHR1cmVTdGFja1RyYWNlP0Vycm9yLmNhcHR1cmVTdGFja1RyYWNlKHRoaXMsdGhpcy5jb25zdHJ1Y3Rvcik6dGhpcy5zdGFjaz1uZXcgRXJyb3IoKS5zdGFjayx0aGlzLm1lc3NhZ2U9QSx0aGlzLm5hbWU9IkF4aW9zRXJyb3IiLGUmJih0aGlzLmNvZGU9ZSksdCYmKHRoaXMuY29uZmlnPXQpLHImJih0aGlzLnJlcXVlc3Q9ciksbiYmKHRoaXMucmVzcG9uc2U9bil9cy5pbmhlcml0cyhWLEVycm9yLHt0b0pTT046ZnVuY3Rpb24oKXtyZXR1cm57bWVzc2FnZTp0aGlzLm1lc3NhZ2UsbmFtZTp0aGlzLm5hbWUsZGVzY3JpcHRpb246dGhpcy5kZXNjcmlwdGlvbixudW1iZXI6dGhpcy5udW1iZXIsZmlsZU5hbWU6dGhpcy5maWxlTmFtZSxsaW5lTnVtYmVyOnRoaXMubGluZU51bWJlcixjb2x1bW5OdW1iZXI6dGhpcy5jb2x1bW5OdW1iZXIsc3RhY2s6dGhpcy5zdGFjayxjb25maWc6cy50b0pTT05PYmplY3QodGhpcy5jb25maWcpLGNvZGU6dGhpcy5jb2RlLHN0YXR1czp0aGlzLnJlc3BvbnNlJiZ0aGlzLnJlc3BvbnNlLnN0YXR1cz90aGlzLnJlc3BvbnNlLnN0YXR1czpudWxsfX19KTt2YXIgTWU9Vi5wcm90b3R5cGUscWU9e307WyJFUlJfQkFEX09QVElPTl9WQUxVRSIsIkVSUl9CQURfT1BUSU9OIiwiRUNPTk5BQk9SVEVEIiwiRVRJTUVET1VUIiwiRVJSX05FVFdPUksiLCJFUlJfRlJfVE9PX01BTllfUkVESVJFQ1RTIiwiRVJSX0RFUFJFQ0FURUQiLCJFUlJfQkFEX1JFU1BPTlNFIiwiRVJSX0JBRF9SRVFVRVNUIiwiRVJSX0NBTkNFTEVEIiwiRVJSX05PVF9TVVBQT1JUIiwiRVJSX0lOVkFMSURfVVJMIl0uZm9yRWFjaChBPT57cWVbQV09e3ZhbHVlOkF9fSk7T2JqZWN0LmRlZmluZVByb3BlcnRpZXMoVixxZSk7T2JqZWN0LmRlZmluZVByb3BlcnR5KE1lLCJpc0F4aW9zRXJyb3IiLHt2YWx1ZTohMH0pO1YuZnJvbT0oQSxlLHQscixuLG8pPT57bGV0IGk9T2JqZWN0LmNyZWF0ZShNZSk7cmV0dXJuIHMudG9GbGF0T2JqZWN0KEEsaSxmdW5jdGlvbihCKXtyZXR1cm4gQiE9PUVycm9yLnByb3RvdHlwZX0sZz0+ZyE9PSJpc0F4aW9zRXJyb3IiKSxWLmNhbGwoaSxBLm1lc3NhZ2UsZSx0LHIsbiksaS5jYXVzZT1BLGkubmFtZT1BLm5hbWUsbyYmT2JqZWN0LmFzc2lnbihpLG8pLGl9O3ZhciBRPVY7dmFyIERBPW51bGw7ZnVuY3Rpb24gVkEoQSl7cmV0dXJuIHMuaXNQbGFpbk9iamVjdChBKXx8cy5pc0FycmF5KEEpfWZ1bmN0aW9uIEtlKEEpe3JldHVybiBzLmVuZHNXaXRoKEEsIltdIik/QS5zbGljZSgwLC0yKTpBfWZ1bmN0aW9uIFllKEEsZSx0KXtyZXR1cm4gQT9BLmNvbmNhdChlKS5tYXAoZnVuY3Rpb24obixvKXtyZXR1cm4gbj1LZShuKSwhdCYmbz8iWyIrbisiXSI6bn0pLmpvaW4odD8iLiI6IiIpOmV9ZnVuY3Rpb24geHIoQSl7cmV0dXJuIHMuaXNBcnJheShBKSYmIUEuc29tZShWQSl9dmFyIEpyPXMudG9GbGF0T2JqZWN0KHMse30sbnVsbCxmdW5jdGlvbihlKXtyZXR1cm4vXmlzW0EtWl0vLnRlc3QoZSl9KTtmdW5jdGlvbiBIcihBLGUsdCl7aWYoIXMuaXNPYmplY3QoQSkpdGhyb3cgbmV3IFR5cGVFcnJvcigidGFyZ2V0IG11c3QgYmUgYW4gb2JqZWN0Iik7ZT1lfHxuZXcoREF8fEZvcm1EYXRhKSx0PXMudG9GbGF0T2JqZWN0KHQse21ldGFUb2tlbnM6ITAsZG90czohMSxpbmRleGVzOiExfSwhMSxmdW5jdGlvbihmLHUpe3JldHVybiFzLmlzVW5kZWZpbmVkKHVbZl0pfSk7bGV0IHI9dC5tZXRhVG9rZW5zLG49dC52aXNpdG9yfHxhLG89dC5kb3RzLGk9dC5pbmRleGVzLEI9KHQuQmxvYnx8dHlwZW9mIEJsb2I8InUiJiZCbG9iKSYmcy5pc1NwZWNDb21wbGlhbnRGb3JtKGUpO2lmKCFzLmlzRnVuY3Rpb24obikpdGhyb3cgbmV3IFR5cGVFcnJvcigidmlzaXRvciBtdXN0IGJlIGEgZnVuY3Rpb24iKTtmdW5jdGlvbiBDKGMpe2lmKGM9PT1udWxsKXJldHVybiIiO2lmKHMuaXNEYXRlKGMpKXJldHVybiBjLnRvSVNPU3RyaW5nKCk7aWYoIUImJnMuaXNCbG9iKGMpKXRocm93IG5ldyBRKCJCbG9iIGlzIG5vdCBzdXBwb3J0ZWQuIFVzZSBhIEJ1ZmZlciBpbnN0ZWFkLiIpO3JldHVybiBzLmlzQXJyYXlCdWZmZXIoYyl8fHMuaXNUeXBlZEFycmF5KGMpP0ImJnR5cGVvZiBCbG9iPT0iZnVuY3Rpb24iP25ldyBCbG9iKFtjXSk6QnVmZmVyLmZyb20oYyk6Y31mdW5jdGlvbiBhKGMsZix1KXtsZXQgbT1jO2lmKGMmJiF1JiZ0eXBlb2YgYz09Im9iamVjdCIpe2lmKHMuZW5kc1dpdGgoZiwie30iKSlmPXI/ZjpmLnNsaWNlKDAsLTIpLGM9SlNPTi5zdHJpbmdpZnkoYyk7ZWxzZSBpZihzLmlzQXJyYXkoYykmJnhyKGMpfHwocy5pc0ZpbGVMaXN0KGMpfHxzLmVuZHNXaXRoKGYsIltdIikpJiYobT1zLnRvQXJyYXkoYykpKXJldHVybiBmPUtlKGYpLG0uZm9yRWFjaChmdW5jdGlvbihkLFUpeyEocy5pc1VuZGVmaW5lZChkKXx8ZD09PW51bGwpJiZlLmFwcGVuZChpPT09ITA/WWUoW2ZdLFUsbyk6aT09PW51bGw/ZjpmKyJbXSIsQyhkKSl9KSwhMX1yZXR1cm4gVkEoYyk/ITA6KGUuYXBwZW5kKFllKHUsZixvKSxDKGMpKSwhMSl9bGV0IEk9W10sRT1PYmplY3QuYXNzaWduKEpyLHtkZWZhdWx0VmlzaXRvcjphLGNvbnZlcnRWYWx1ZTpDLGlzVmlzaXRhYmxlOlZBfSk7ZnVuY3Rpb24gbChjLGYpe2lmKCFzLmlzVW5kZWZpbmVkKGMpKXtpZihJLmluZGV4T2YoYykhPT0tMSl0aHJvdyBFcnJvcigiQ2lyY3VsYXIgcmVmZXJlbmNlIGRldGVjdGVkIGluICIrZi5qb2luKCIuIikpO0kucHVzaChjKSxzLmZvckVhY2goYyxmdW5jdGlvbihtLFMpeyghKHMuaXNVbmRlZmluZWQobSl8fG09PT1udWxsKSYmbi5jYWxsKGUsbSxzLmlzU3RyaW5nKFMpP1MudHJpbSgpOlMsZixFKSk9PT0hMCYmbChtLGY/Zi5jb25jYXQoUyk6W1NdKX0pLEkucG9wKCl9fWlmKCFzLmlzT2JqZWN0KEEpKXRocm93IG5ldyBUeXBlRXJyb3IoImRhdGEgbXVzdCBiZSBhbiBvYmplY3QiKTtyZXR1cm4gbChBKSxlfXZhciBNPUhyO2Z1bmN0aW9uIFdlKEEpe2xldCBlPXsiISI6IiUyMSIsIiciOiIlMjciLCIoIjoiJTI4IiwiKSI6IiUyOSIsIn4iOiIlN0UiLCIlMjAiOiIrIiwiJTAwIjoiXDAifTtyZXR1cm4gZW5jb2RlVVJJQ29tcG9uZW50KEEpLnJlcGxhY2UoL1shJygpfl18JTIwfCUwMC9nLGZ1bmN0aW9uKHIpe3JldHVybiBlW3JdfSl9ZnVuY3Rpb24gdmUoQSxlKXt0aGlzLl9wYWlycz1bXSxBJiZNKEEsdGhpcyxlKX12YXIgamU9dmUucHJvdG90eXBlO2plLmFwcGVuZD1mdW5jdGlvbihlLHQpe3RoaXMuX3BhaXJzLnB1c2goW2UsdF0pfTtqZS50b1N0cmluZz1mdW5jdGlvbihlKXtsZXQgdD1lP2Z1bmN0aW9uKHIpe3JldHVybiBlLmNhbGwodGhpcyxyLFdlKX06V2U7cmV0dXJuIHRoaXMuX3BhaXJzLm1hcChmdW5jdGlvbihuKXtyZXR1cm4gdChuWzBdKSsiPSIrdChuWzFdKX0sIiIpLmpvaW4oIiYiKX07dmFyIFNBPXZlO2Z1bmN0aW9uIE1yKEEpe3JldHVybiBlbmNvZGVVUklDb21wb25lbnQoQSkucmVwbGFjZSgvJTNBL2dpLCI6IikucmVwbGFjZSgvJTI0L2csIiQiKS5yZXBsYWNlKC8lMkMvZ2ksIiwiKS5yZXBsYWNlKC8lMjAvZywiKyIpLnJlcGxhY2UoLyU1Qi9naSwiWyIpLnJlcGxhY2UoLyU1RC9naSwiXSIpfWZ1bmN0aW9uIGlBKEEsZSx0KXtpZighZSlyZXR1cm4gQTtsZXQgcj10JiZ0LmVuY29kZXx8TXIsbj10JiZ0LnNlcmlhbGl6ZSxvO2lmKG4/bz1uKGUsdCk6bz1zLmlzVVJMU2VhcmNoUGFyYW1zKGUpP2UudG9TdHJpbmcoKTpuZXcgU0EoZSx0KS50b1N0cmluZyhyKSxvKXtsZXQgaT1BLmluZGV4T2YoIiMiKTtpIT09LTEmJihBPUEuc2xpY2UoMCxpKSksQSs9KEEuaW5kZXhPZigiPyIpPT09LTE/Ij8iOiImIikrb31yZXR1cm4gQX12YXIgWkE9Y2xhc3N7Y29uc3RydWN0b3IoKXt0aGlzLmhhbmRsZXJzPVtdfXVzZShlLHQscil7cmV0dXJuIHRoaXMuaGFuZGxlcnMucHVzaCh7ZnVsZmlsbGVkOmUscmVqZWN0ZWQ6dCxzeW5jaHJvbm91czpyP3Iuc3luY2hyb25vdXM6ITEscnVuV2hlbjpyP3IucnVuV2hlbjpudWxsfSksdGhpcy5oYW5kbGVycy5sZW5ndGgtMX1lamVjdChlKXt0aGlzLmhhbmRsZXJzW2VdJiYodGhpcy5oYW5kbGVyc1tlXT1udWxsKX1jbGVhcigpe3RoaXMuaGFuZGxlcnMmJih0aGlzLmhhbmRsZXJzPVtdKX1mb3JFYWNoKGUpe3MuZm9yRWFjaCh0aGlzLmhhbmRsZXJzLGZ1bmN0aW9uKHIpe3IhPT1udWxsJiZlKHIpfSl9fSxYQT1aQTt2YXIgYkE9e3NpbGVudEpTT05QYXJzaW5nOiEwLGZvcmNlZEpTT05QYXJzaW5nOiEwLGNsYXJpZnlUaW1lb3V0RXJyb3I6ITF9O3ZhciBfZT10eXBlb2YgVVJMU2VhcmNoUGFyYW1zPCJ1Ij9VUkxTZWFyY2hQYXJhbXM6U0E7dmFyIHplPXR5cGVvZiBGb3JtRGF0YTwidSI/Rm9ybURhdGE6bnVsbDt2YXIgVmU9dHlwZW9mIEJsb2I8InUiP0Jsb2I6bnVsbDt2YXIgWmU9e2lzQnJvd3NlcjohMCxjbGFzc2VzOntVUkxTZWFyY2hQYXJhbXM6X2UsRm9ybURhdGE6emUsQmxvYjpWZX0scHJvdG9jb2xzOlsiaHR0cCIsImh0dHBzIiwiZmlsZSIsImJsb2IiLCJ1cmwiLCJkYXRhIl19O3ZhciBBZT17fTtQdChBZSx7aGFzQnJvd3NlckVudjooKT0+JEEsaGFzU3RhbmRhcmRCcm93c2VyRW52OigpPT5xcixoYXNTdGFuZGFyZEJyb3dzZXJXZWJXb3JrZXJFbnY6KCk9PllyLG9yaWdpbjooKT0+S3J9KTt2YXIgJEE9dHlwZW9mIHdpbmRvdzwidSImJnR5cGVvZiBkb2N1bWVudDwidSIscXI9KEE9PiRBJiZbIlJlYWN0TmF0aXZlIiwiTmF0aXZlU2NyaXB0IiwiTlMiXS5pbmRleE9mKEEpPDApKHR5cGVvZiBuYXZpZ2F0b3I8InUiJiZuYXZpZ2F0b3IucHJvZHVjdCksWXI9dHlwZW9mIFdvcmtlckdsb2JhbFNjb3BlPCJ1IiYmc2VsZiBpbnN0YW5jZW9mIFdvcmtlckdsb2JhbFNjb3BlJiZ0eXBlb2Ygc2VsZi5pbXBvcnRTY3JpcHRzPT0iZnVuY3Rpb24iLEtyPSRBJiZ3aW5kb3cubG9jYXRpb24uaHJlZnx8Imh0dHA6Ly9sb2NhbGhvc3QiO3ZhciBEPXsuLi5BZSwuLi5aZX07ZnVuY3Rpb24gZWUoQSxlKXtyZXR1cm4gTShBLG5ldyBELmNsYXNzZXMuVVJMU2VhcmNoUGFyYW1zLE9iamVjdC5hc3NpZ24oe3Zpc2l0b3I6ZnVuY3Rpb24odCxyLG4sbyl7cmV0dXJuIEQuaXNOb2RlJiZzLmlzQnVmZmVyKHQpPyh0aGlzLmFwcGVuZChyLHQudG9TdHJpbmcoImJhc2U2NCIpKSwhMSk6by5kZWZhdWx0VmlzaXRvci5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSxlKSl9ZnVuY3Rpb24gV3IoQSl7cmV0dXJuIHMubWF0Y2hBbGwoL1x3K3xcWyhcdyopXS9nLEEpLm1hcChlPT5lWzBdPT09IltdIj8iIjplWzFdfHxlWzBdKX1mdW5jdGlvbiB2cihBKXtsZXQgZT17fSx0PU9iamVjdC5rZXlzKEEpLHIsbj10Lmxlbmd0aCxvO2ZvcihyPTA7cjxuO3IrKylvPXRbcl0sZVtvXT1BW29dO3JldHVybiBlfWZ1bmN0aW9uIGpyKEEpe2Z1bmN0aW9uIGUodCxyLG4sbyl7bGV0IGk9dFtvKytdO2lmKGk9PT0iX19wcm90b19fIilyZXR1cm4hMDtsZXQgZz1OdW1iZXIuaXNGaW5pdGUoK2kpLEI9bz49dC5sZW5ndGg7cmV0dXJuIGk9IWkmJnMuaXNBcnJheShuKT9uLmxlbmd0aDppLEI/KHMuaGFzT3duUHJvcChuLGkpP25baV09W25baV0scl06bltpXT1yLCFnKTooKCFuW2ldfHwhcy5pc09iamVjdChuW2ldKSkmJihuW2ldPVtdKSxlKHQscixuW2ldLG8pJiZzLmlzQXJyYXkobltpXSkmJihuW2ldPXZyKG5baV0pKSwhZyl9aWYocy5pc0Zvcm1EYXRhKEEpJiZzLmlzRnVuY3Rpb24oQS5lbnRyaWVzKSl7bGV0IHQ9e307cmV0dXJuIHMuZm9yRWFjaEVudHJ5KEEsKHIsbik9PntlKFdyKHIpLG4sdCwwKX0pLHR9cmV0dXJuIG51bGx9dmFyIFJBPWpyO2Z1bmN0aW9uIF9yKEEsZSx0KXtpZihzLmlzU3RyaW5nKEEpKXRyeXtyZXR1cm4oZXx8SlNPTi5wYXJzZSkoQSkscy50cmltKEEpfWNhdGNoKHIpe2lmKHIubmFtZSE9PSJTeW50YXhFcnJvciIpdGhyb3cgcn1yZXR1cm4odHx8SlNPTi5zdHJpbmdpZnkpKEEpfXZhciB0ZT17dHJhbnNpdGlvbmFsOmJBLGFkYXB0ZXI6WyJ4aHIiLCJodHRwIiwiZmV0Y2giXSx0cmFuc2Zvcm1SZXF1ZXN0OltmdW5jdGlvbihlLHQpe2xldCByPXQuZ2V0Q29udGVudFR5cGUoKXx8IiIsbj1yLmluZGV4T2YoImFwcGxpY2F0aW9uL2pzb24iKT4tMSxvPXMuaXNPYmplY3QoZSk7aWYobyYmcy5pc0hUTUxGb3JtKGUpJiYoZT1uZXcgRm9ybURhdGEoZSkpLHMuaXNGb3JtRGF0YShlKSlyZXR1cm4gbj9KU09OLnN0cmluZ2lmeShSQShlKSk6ZTtpZihzLmlzQXJyYXlCdWZmZXIoZSl8fHMuaXNCdWZmZXIoZSl8fHMuaXNTdHJlYW0oZSl8fHMuaXNGaWxlKGUpfHxzLmlzQmxvYihlKXx8cy5pc1JlYWRhYmxlU3RyZWFtKGUpKXJldHVybiBlO2lmKHMuaXNBcnJheUJ1ZmZlclZpZXcoZSkpcmV0dXJuIGUuYnVmZmVyO2lmKHMuaXNVUkxTZWFyY2hQYXJhbXMoZSkpcmV0dXJuIHQuc2V0Q29udGVudFR5cGUoImFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZDtjaGFyc2V0PXV0Zi04IiwhMSksZS50b1N0cmluZygpO2xldCBnO2lmKG8pe2lmKHIuaW5kZXhPZigiYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkIik+LTEpcmV0dXJuIGVlKGUsdGhpcy5mb3JtU2VyaWFsaXplcikudG9TdHJpbmcoKTtpZigoZz1zLmlzRmlsZUxpc3QoZSkpfHxyLmluZGV4T2YoIm11bHRpcGFydC9mb3JtLWRhdGEiKT4tMSl7bGV0IEI9dGhpcy5lbnYmJnRoaXMuZW52LkZvcm1EYXRhO3JldHVybiBNKGc/eyJmaWxlc1tdIjplfTplLEImJm5ldyBCLHRoaXMuZm9ybVNlcmlhbGl6ZXIpfX1yZXR1cm4gb3x8bj8odC5zZXRDb250ZW50VHlwZSgiYXBwbGljYXRpb24vanNvbiIsITEpLF9yKGUpKTplfV0sdHJhbnNmb3JtUmVzcG9uc2U6W2Z1bmN0aW9uKGUpe2xldCB0PXRoaXMudHJhbnNpdGlvbmFsfHx0ZS50cmFuc2l0aW9uYWwscj10JiZ0LmZvcmNlZEpTT05QYXJzaW5nLG49dGhpcy5yZXNwb25zZVR5cGU9PT0ianNvbiI7aWYocy5pc1Jlc3BvbnNlKGUpfHxzLmlzUmVhZGFibGVTdHJlYW0oZSkpcmV0dXJuIGU7aWYoZSYmcy5pc1N0cmluZyhlKSYmKHImJiF0aGlzLnJlc3BvbnNlVHlwZXx8bikpe2xldCBpPSEodCYmdC5zaWxlbnRKU09OUGFyc2luZykmJm47dHJ5e3JldHVybiBKU09OLnBhcnNlKGUpfWNhdGNoKGcpe2lmKGkpdGhyb3cgZy5uYW1lPT09IlN5bnRheEVycm9yIj9RLmZyb20oZyxRLkVSUl9CQURfUkVTUE9OU0UsdGhpcyxudWxsLHRoaXMucmVzcG9uc2UpOmd9fXJldHVybiBlfV0sdGltZW91dDowLHhzcmZDb29raWVOYW1lOiJYU1JGLVRPS0VOIix4c3JmSGVhZGVyTmFtZToiWC1YU1JGLVRPS0VOIixtYXhDb250ZW50TGVuZ3RoOi0xLG1heEJvZHlMZW5ndGg6LTEsZW52OntGb3JtRGF0YTpELmNsYXNzZXMuRm9ybURhdGEsQmxvYjpELmNsYXNzZXMuQmxvYn0sdmFsaWRhdGVTdGF0dXM6ZnVuY3Rpb24oZSl7cmV0dXJuIGU+PTIwMCYmZTwzMDB9LGhlYWRlcnM6e2NvbW1vbjp7QWNjZXB0OiJhcHBsaWNhdGlvbi9qc29uLCB0ZXh0L3BsYWluLCAqLyoiLCJDb250ZW50LVR5cGUiOnZvaWQgMH19fTtzLmZvckVhY2goWyJkZWxldGUiLCJnZXQiLCJoZWFkIiwicG9zdCIsInB1dCIsInBhdGNoIl0sQT0+e3RlLmhlYWRlcnNbQV09e319KTt2YXIgWj10ZTt2YXIgenI9cy50b09iamVjdFNldChbImFnZSIsImF1dGhvcml6YXRpb24iLCJjb250ZW50LWxlbmd0aCIsImNvbnRlbnQtdHlwZSIsImV0YWciLCJleHBpcmVzIiwiZnJvbSIsImhvc3QiLCJpZi1tb2RpZmllZC1zaW5jZSIsImlmLXVubW9kaWZpZWQtc2luY2UiLCJsYXN0LW1vZGlmaWVkIiwibG9jYXRpb24iLCJtYXgtZm9yd2FyZHMiLCJwcm94eS1hdXRob3JpemF0aW9uIiwicmVmZXJlciIsInJldHJ5LWFmdGVyIiwidXNlci1hZ2VudCJdKSxYZT1BPT57bGV0IGU9e30sdCxyLG47cmV0dXJuIEEmJkEuc3BsaXQoYApgKS5mb3JFYWNoKGZ1bmN0aW9uKGkpe249aS5pbmRleE9mKCI6IiksdD1pLnN1YnN0cmluZygwLG4pLnRyaW0oKS50b0xvd2VyQ2FzZSgpLHI9aS5zdWJzdHJpbmcobisxKS50cmltKCksISghdHx8ZVt0XSYmenJbdF0pJiYodD09PSJzZXQtY29va2llIj9lW3RdP2VbdF0ucHVzaChyKTplW3RdPVtyXTplW3RdPWVbdF0/ZVt0XSsiLCAiK3I6cil9KSxlfTt2YXIgJGU9U3ltYm9sKCJpbnRlcm5hbHMiKTtmdW5jdGlvbiBhQShBKXtyZXR1cm4gQSYmU3RyaW5nKEEpLnRyaW0oKS50b0xvd2VyQ2FzZSgpfWZ1bmN0aW9uIGtBKEEpe3JldHVybiBBPT09ITF8fEE9PW51bGw/QTpzLmlzQXJyYXkoQSk/QS5tYXAoa0EpOlN0cmluZyhBKX1mdW5jdGlvbiBWcihBKXtsZXQgZT1PYmplY3QuY3JlYXRlKG51bGwpLHQ9LyhbXlxzLDs9XSspXHMqKD86PVxzKihbXiw7XSspKT8vZyxyO2Zvcig7cj10LmV4ZWMoQSk7KWVbclsxXV09clsyXTtyZXR1cm4gZX12YXIgWnI9QT0+L15bLV9hLXpBLVowLTleYHx+LCEjJCUmJyorLl0rJC8udGVzdChBLnRyaW0oKSk7ZnVuY3Rpb24gcmUoQSxlLHQscixuKXtpZihzLmlzRnVuY3Rpb24ocikpcmV0dXJuIHIuY2FsbCh0aGlzLGUsdCk7aWYobiYmKGU9dCksISFzLmlzU3RyaW5nKGUpKXtpZihzLmlzU3RyaW5nKHIpKXJldHVybiBlLmluZGV4T2YocikhPT0tMTtpZihzLmlzUmVnRXhwKHIpKXJldHVybiByLnRlc3QoZSl9fWZ1bmN0aW9uIFhyKEEpe3JldHVybiBBLnRyaW0oKS50b0xvd2VyQ2FzZSgpLnJlcGxhY2UoLyhbYS16XGRdKShcdyopL2csKGUsdCxyKT0+dC50b1VwcGVyQ2FzZSgpK3IpfWZ1bmN0aW9uICRyKEEsZSl7bGV0IHQ9cy50b0NhbWVsQ2FzZSgiICIrZSk7WyJnZXQiLCJzZXQiLCJoYXMiXS5mb3JFYWNoKHI9PntPYmplY3QuZGVmaW5lUHJvcGVydHkoQSxyK3Qse3ZhbHVlOmZ1bmN0aW9uKG4sbyxpKXtyZXR1cm4gdGhpc1tyXS5jYWxsKHRoaXMsZSxuLG8saSl9LGNvbmZpZ3VyYWJsZTohMH0pfSl9dmFyIFg9Y2xhc3N7Y29uc3RydWN0b3IoZSl7ZSYmdGhpcy5zZXQoZSl9c2V0KGUsdCxyKXtsZXQgbj10aGlzO2Z1bmN0aW9uIG8oZyxCLEMpe2xldCBhPWFBKEIpO2lmKCFhKXRocm93IG5ldyBFcnJvcigiaGVhZGVyIG5hbWUgbXVzdCBiZSBhIG5vbi1lbXB0eSBzdHJpbmciKTtsZXQgST1zLmZpbmRLZXkobixhKTsoIUl8fG5bSV09PT12b2lkIDB8fEM9PT0hMHx8Qz09PXZvaWQgMCYmbltJXSE9PSExKSYmKG5bSXx8Ql09a0EoZykpfWxldCBpPShnLEIpPT5zLmZvckVhY2goZywoQyxhKT0+byhDLGEsQikpO2lmKHMuaXNQbGFpbk9iamVjdChlKXx8ZSBpbnN0YW5jZW9mIHRoaXMuY29uc3RydWN0b3IpaShlLHQpO2Vsc2UgaWYocy5pc1N0cmluZyhlKSYmKGU9ZS50cmltKCkpJiYhWnIoZSkpaShYZShlKSx0KTtlbHNlIGlmKHMuaXNIZWFkZXJzKGUpKWZvcihsZXRbZyxCXW9mIGUuZW50cmllcygpKW8oQixnLHIpO2Vsc2UgZSE9bnVsbCYmbyh0LGUscik7cmV0dXJuIHRoaXN9Z2V0KGUsdCl7aWYoZT1hQShlKSxlKXtsZXQgcj1zLmZpbmRLZXkodGhpcyxlKTtpZihyKXtsZXQgbj10aGlzW3JdO2lmKCF0KXJldHVybiBuO2lmKHQ9PT0hMClyZXR1cm4gVnIobik7aWYocy5pc0Z1bmN0aW9uKHQpKXJldHVybiB0LmNhbGwodGhpcyxuLHIpO2lmKHMuaXNSZWdFeHAodCkpcmV0dXJuIHQuZXhlYyhuKTt0aHJvdyBuZXcgVHlwZUVycm9yKCJwYXJzZXIgbXVzdCBiZSBib29sZWFufHJlZ2V4cHxmdW5jdGlvbiIpfX19aGFzKGUsdCl7aWYoZT1hQShlKSxlKXtsZXQgcj1zLmZpbmRLZXkodGhpcyxlKTtyZXR1cm4hIShyJiZ0aGlzW3JdIT09dm9pZCAwJiYoIXR8fHJlKHRoaXMsdGhpc1tyXSxyLHQpKSl9cmV0dXJuITF9ZGVsZXRlKGUsdCl7bGV0IHI9dGhpcyxuPSExO2Z1bmN0aW9uIG8oaSl7aWYoaT1hQShpKSxpKXtsZXQgZz1zLmZpbmRLZXkocixpKTtnJiYoIXR8fHJlKHIscltnXSxnLHQpKSYmKGRlbGV0ZSByW2ddLG49ITApfX1yZXR1cm4gcy5pc0FycmF5KGUpP2UuZm9yRWFjaChvKTpvKGUpLG59Y2xlYXIoZSl7bGV0IHQ9T2JqZWN0LmtleXModGhpcykscj10Lmxlbmd0aCxuPSExO2Zvcig7ci0tOyl7bGV0IG89dFtyXTsoIWV8fHJlKHRoaXMsdGhpc1tvXSxvLGUsITApKSYmKGRlbGV0ZSB0aGlzW29dLG49ITApfXJldHVybiBufW5vcm1hbGl6ZShlKXtsZXQgdD10aGlzLHI9e307cmV0dXJuIHMuZm9yRWFjaCh0aGlzLChuLG8pPT57bGV0IGk9cy5maW5kS2V5KHIsbyk7aWYoaSl7dFtpXT1rQShuKSxkZWxldGUgdFtvXTtyZXR1cm59bGV0IGc9ZT9YcihvKTpTdHJpbmcobykudHJpbSgpO2chPT1vJiZkZWxldGUgdFtvXSx0W2ddPWtBKG4pLHJbZ109ITB9KSx0aGlzfWNvbmNhdCguLi5lKXtyZXR1cm4gdGhpcy5jb25zdHJ1Y3Rvci5jb25jYXQodGhpcywuLi5lKX10b0pTT04oZSl7bGV0IHQ9T2JqZWN0LmNyZWF0ZShudWxsKTtyZXR1cm4gcy5mb3JFYWNoKHRoaXMsKHIsbik9PntyIT1udWxsJiZyIT09ITEmJih0W25dPWUmJnMuaXNBcnJheShyKT9yLmpvaW4oIiwgIik6cil9KSx0fVtTeW1ib2wuaXRlcmF0b3JdKCl7cmV0dXJuIE9iamVjdC5lbnRyaWVzKHRoaXMudG9KU09OKCkpW1N5bWJvbC5pdGVyYXRvcl0oKX10b1N0cmluZygpe3JldHVybiBPYmplY3QuZW50cmllcyh0aGlzLnRvSlNPTigpKS5tYXAoKFtlLHRdKT0+ZSsiOiAiK3QpLmpvaW4oYApgKX1nZXRbU3ltYm9sLnRvU3RyaW5nVGFnXSgpe3JldHVybiJBeGlvc0hlYWRlcnMifXN0YXRpYyBmcm9tKGUpe3JldHVybiBlIGluc3RhbmNlb2YgdGhpcz9lOm5ldyB0aGlzKGUpfXN0YXRpYyBjb25jYXQoZSwuLi50KXtsZXQgcj1uZXcgdGhpcyhlKTtyZXR1cm4gdC5mb3JFYWNoKG49PnIuc2V0KG4pKSxyfXN0YXRpYyBhY2Nlc3NvcihlKXtsZXQgcj0odGhpc1skZV09dGhpc1skZV09e2FjY2Vzc29yczp7fX0pLmFjY2Vzc29ycyxuPXRoaXMucHJvdG90eXBlO2Z1bmN0aW9uIG8oaSl7bGV0IGc9YUEoaSk7cltnXXx8KCRyKG4saSkscltnXT0hMCl9cmV0dXJuIHMuaXNBcnJheShlKT9lLmZvckVhY2gobyk6byhlKSx0aGlzfX07WC5hY2Nlc3NvcihbIkNvbnRlbnQtVHlwZSIsIkNvbnRlbnQtTGVuZ3RoIiwiQWNjZXB0IiwiQWNjZXB0LUVuY29kaW5nIiwiVXNlci1BZ2VudCIsIkF1dGhvcml6YXRpb24iXSk7cy5yZWR1Y2VEZXNjcmlwdG9ycyhYLnByb3RvdHlwZSwoe3ZhbHVlOkF9LGUpPT57bGV0IHQ9ZVswXS50b1VwcGVyQ2FzZSgpK2Uuc2xpY2UoMSk7cmV0dXJue2dldDooKT0+QSxzZXQocil7dGhpc1t0XT1yfX19KTtzLmZyZWV6ZU1ldGhvZHMoWCk7dmFyIHc9WDtmdW5jdGlvbiBzQShBLGUpe2xldCB0PXRoaXN8fFoscj1lfHx0LG49dy5mcm9tKHIuaGVhZGVycyksbz1yLmRhdGE7cmV0dXJuIHMuZm9yRWFjaChBLGZ1bmN0aW9uKGcpe289Zy5jYWxsKHQsbyxuLm5vcm1hbGl6ZSgpLGU/ZS5zdGF0dXM6dm9pZCAwKX0pLG4ubm9ybWFsaXplKCksb31mdW5jdGlvbiBJQShBKXtyZXR1cm4hIShBJiZBLl9fQ0FOQ0VMX18pfWZ1bmN0aW9uIEF0KEEsZSx0KXtRLmNhbGwodGhpcyxBPz8iY2FuY2VsZWQiLFEuRVJSX0NBTkNFTEVELGUsdCksdGhpcy5uYW1lPSJDYW5jZWxlZEVycm9yIn1zLmluaGVyaXRzKEF0LFEse19fQ0FOQ0VMX186ITB9KTt2YXIgeD1BdDtmdW5jdGlvbiBnQShBLGUsdCl7bGV0IHI9dC5jb25maWcudmFsaWRhdGVTdGF0dXM7IXQuc3RhdHVzfHwhcnx8cih0LnN0YXR1cyk/QSh0KTplKG5ldyBRKCJSZXF1ZXN0IGZhaWxlZCB3aXRoIHN0YXR1cyBjb2RlICIrdC5zdGF0dXMsW1EuRVJSX0JBRF9SRVFVRVNULFEuRVJSX0JBRF9SRVNQT05TRV1bTWF0aC5mbG9vcih0LnN0YXR1cy8xMDApLTRdLHQuY29uZmlnLHQucmVxdWVzdCx0KSl9ZnVuY3Rpb24gbmUoQSl7bGV0IGU9L14oWy0rXHddezEsMjV9KSg6P1wvXC98OikvLmV4ZWMoQSk7cmV0dXJuIGUmJmVbMV18fCIifWZ1bmN0aW9uIEFuKEEsZSl7QT1BfHwxMDtsZXQgdD1uZXcgQXJyYXkoQSkscj1uZXcgQXJyYXkoQSksbj0wLG89MCxpO3JldHVybiBlPWUhPT12b2lkIDA/ZToxZTMsZnVuY3Rpb24oQil7bGV0IEM9RGF0ZS5ub3coKSxhPXJbb107aXx8KGk9QyksdFtuXT1CLHJbbl09QztsZXQgST1vLEU9MDtmb3IoO0khPT1uOylFKz10W0krK10sST1JJUE7aWYobj0obisxKSVBLG49PT1vJiYobz0obysxKSVBKSxDLWk8ZSlyZXR1cm47bGV0IGw9YSYmQy1hO3JldHVybiBsP01hdGgucm91bmQoRSoxZTMvbCk6dm9pZCAwfX12YXIgZXQ9QW47ZnVuY3Rpb24gZW4oQSxlKXtsZXQgdD0wLHI9MWUzL2UsbixvLGk9KEMsYT1EYXRlLm5vdygpKT0+e3Q9YSxuPW51bGwsbyYmKGNsZWFyVGltZW91dChvKSxvPW51bGwpLEEuYXBwbHkobnVsbCxDKX07cmV0dXJuWyguLi5DKT0+e2xldCBhPURhdGUubm93KCksST1hLXQ7ST49cj9pKEMsYSk6KG49QyxvfHwobz1zZXRUaW1lb3V0KCgpPT57bz1udWxsLGkobil9LHItSSkpKX0sKCk9Pm4mJmkobildfXZhciB0dD1lbjt2YXIgJD0oQSxlLHQ9Myk9PntsZXQgcj0wLG49ZXQoNTAsMjUwKTtyZXR1cm4gdHQobz0+e2xldCBpPW8ubG9hZGVkLGc9by5sZW5ndGhDb21wdXRhYmxlP28udG90YWw6dm9pZCAwLEI9aS1yLEM9bihCKSxhPWk8PWc7cj1pO2xldCBJPXtsb2FkZWQ6aSx0b3RhbDpnLHByb2dyZXNzOmc/aS9nOnZvaWQgMCxieXRlczpCLHJhdGU6Q3x8dm9pZCAwLGVzdGltYXRlZDpDJiZnJiZhPyhnLWkpL0M6dm9pZCAwLGV2ZW50Om8sbGVuZ3RoQ29tcHV0YWJsZTpnIT1udWxsLFtlPyJkb3dubG9hZCI6InVwbG9hZCJdOiEwfTtBKEkpfSx0KX0sb2U9KEEsZSk9PntsZXQgdD1BIT1udWxsO3JldHVybltyPT5lWzBdKHtsZW5ndGhDb21wdXRhYmxlOnQsdG90YWw6QSxsb2FkZWQ6cn0pLGVbMV1dfSxpZT1BPT4oLi4uZSk9PnMuYXNhcCgoKT0+QSguLi5lKSk7dmFyIHJ0PUQuaGFzU3RhbmRhcmRCcm93c2VyRW52P2Z1bmN0aW9uKCl7bGV0IGU9Lyhtc2llfHRyaWRlbnQpL2kudGVzdChuYXZpZ2F0b3IudXNlckFnZW50KSx0PWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImEiKSxyO2Z1bmN0aW9uIG4obyl7bGV0IGk9bztyZXR1cm4gZSYmKHQuc2V0QXR0cmlidXRlKCJocmVmIixpKSxpPXQuaHJlZiksdC5zZXRBdHRyaWJ1dGUoImhyZWYiLGkpLHtocmVmOnQuaHJlZixwcm90b2NvbDp0LnByb3RvY29sP3QucHJvdG9jb2wucmVwbGFjZSgvOiQvLCIiKToiIixob3N0OnQuaG9zdCxzZWFyY2g6dC5zZWFyY2g/dC5zZWFyY2gucmVwbGFjZSgvXlw/LywiIik6IiIsaGFzaDp0Lmhhc2g/dC5oYXNoLnJlcGxhY2UoL14jLywiIik6IiIsaG9zdG5hbWU6dC5ob3N0bmFtZSxwb3J0OnQucG9ydCxwYXRobmFtZTp0LnBhdGhuYW1lLmNoYXJBdCgwKT09PSIvIj90LnBhdGhuYW1lOiIvIit0LnBhdGhuYW1lfX1yZXR1cm4gcj1uKHdpbmRvdy5sb2NhdGlvbi5ocmVmKSxmdW5jdGlvbihpKXtsZXQgZz1zLmlzU3RyaW5nKGkpP24oaSk6aTtyZXR1cm4gZy5wcm90b2NvbD09PXIucHJvdG9jb2wmJmcuaG9zdD09PXIuaG9zdH19KCk6ZnVuY3Rpb24oKXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4hMH19KCk7dmFyIG50PUQuaGFzU3RhbmRhcmRCcm93c2VyRW52P3t3cml0ZShBLGUsdCxyLG4sbyl7bGV0IGk9W0ErIj0iK2VuY29kZVVSSUNvbXBvbmVudChlKV07cy5pc051bWJlcih0KSYmaS5wdXNoKCJleHBpcmVzPSIrbmV3IERhdGUodCkudG9HTVRTdHJpbmcoKSkscy5pc1N0cmluZyhyKSYmaS5wdXNoKCJwYXRoPSIrcikscy5pc1N0cmluZyhuKSYmaS5wdXNoKCJkb21haW49IituKSxvPT09ITAmJmkucHVzaCgic2VjdXJlIiksZG9jdW1lbnQuY29va2llPWkuam9pbigiOyAiKX0scmVhZChBKXtsZXQgZT1kb2N1bWVudC5jb29raWUubWF0Y2gobmV3IFJlZ0V4cCgiKF58O1xccyopKCIrQSsiKT0oW147XSopIikpO3JldHVybiBlP2RlY29kZVVSSUNvbXBvbmVudChlWzNdKTpudWxsfSxyZW1vdmUoQSl7dGhpcy53cml0ZShBLCIiLERhdGUubm93KCktODY0ZTUpfX06e3dyaXRlKCl7fSxyZWFkKCl7cmV0dXJuIG51bGx9LHJlbW92ZSgpe319O2Z1bmN0aW9uIGFlKEEpe3JldHVybi9eKFthLXpdW2EtelxkK1wtLl0qOik/XC9cLy9pLnRlc3QoQSl9ZnVuY3Rpb24gc2UoQSxlKXtyZXR1cm4gZT9BLnJlcGxhY2UoL1wvP1wvJC8sIiIpKyIvIitlLnJlcGxhY2UoL15cLysvLCIiKTpBfWZ1bmN0aW9uIGxBKEEsZSl7cmV0dXJuIEEmJiFhZShlKT9zZShBLGUpOmV9dmFyIG90PUE9PkEgaW5zdGFuY2VvZiB3P3suLi5BfTpBO2Z1bmN0aW9uIEwoQSxlKXtlPWV8fHt9O2xldCB0PXt9O2Z1bmN0aW9uIHIoQyxhLEkpe3JldHVybiBzLmlzUGxhaW5PYmplY3QoQykmJnMuaXNQbGFpbk9iamVjdChhKT9zLm1lcmdlLmNhbGwoe2Nhc2VsZXNzOkl9LEMsYSk6cy5pc1BsYWluT2JqZWN0KGEpP3MubWVyZ2Uoe30sYSk6cy5pc0FycmF5KGEpP2Euc2xpY2UoKTphfWZ1bmN0aW9uIG4oQyxhLEkpe2lmKHMuaXNVbmRlZmluZWQoYSkpe2lmKCFzLmlzVW5kZWZpbmVkKEMpKXJldHVybiByKHZvaWQgMCxDLEkpfWVsc2UgcmV0dXJuIHIoQyxhLEkpfWZ1bmN0aW9uIG8oQyxhKXtpZighcy5pc1VuZGVmaW5lZChhKSlyZXR1cm4gcih2b2lkIDAsYSl9ZnVuY3Rpb24gaShDLGEpe2lmKHMuaXNVbmRlZmluZWQoYSkpe2lmKCFzLmlzVW5kZWZpbmVkKEMpKXJldHVybiByKHZvaWQgMCxDKX1lbHNlIHJldHVybiByKHZvaWQgMCxhKX1mdW5jdGlvbiBnKEMsYSxJKXtpZihJIGluIGUpcmV0dXJuIHIoQyxhKTtpZihJIGluIEEpcmV0dXJuIHIodm9pZCAwLEMpfWxldCBCPXt1cmw6byxtZXRob2Q6byxkYXRhOm8sYmFzZVVSTDppLHRyYW5zZm9ybVJlcXVlc3Q6aSx0cmFuc2Zvcm1SZXNwb25zZTppLHBhcmFtc1NlcmlhbGl6ZXI6aSx0aW1lb3V0OmksdGltZW91dE1lc3NhZ2U6aSx3aXRoQ3JlZGVudGlhbHM6aSx3aXRoWFNSRlRva2VuOmksYWRhcHRlcjppLHJlc3BvbnNlVHlwZTppLHhzcmZDb29raWVOYW1lOmkseHNyZkhlYWRlck5hbWU6aSxvblVwbG9hZFByb2dyZXNzOmksb25Eb3dubG9hZFByb2dyZXNzOmksZGVjb21wcmVzczppLG1heENvbnRlbnRMZW5ndGg6aSxtYXhCb2R5TGVuZ3RoOmksYmVmb3JlUmVkaXJlY3Q6aSx0cmFuc3BvcnQ6aSxodHRwQWdlbnQ6aSxodHRwc0FnZW50OmksY2FuY2VsVG9rZW46aSxzb2NrZXRQYXRoOmkscmVzcG9uc2VFbmNvZGluZzppLHZhbGlkYXRlU3RhdHVzOmcsaGVhZGVyczooQyxhKT0+bihvdChDKSxvdChhKSwhMCl9O3JldHVybiBzLmZvckVhY2goT2JqZWN0LmtleXMoT2JqZWN0LmFzc2lnbih7fSxBLGUpKSxmdW5jdGlvbihhKXtsZXQgST1CW2FdfHxuLEU9SShBW2FdLGVbYV0sYSk7cy5pc1VuZGVmaW5lZChFKSYmSSE9PWd8fCh0W2FdPUUpfSksdH12YXIgRkE9QT0+e2xldCBlPUwoe30sQSkse2RhdGE6dCx3aXRoWFNSRlRva2VuOnIseHNyZkhlYWRlck5hbWU6bix4c3JmQ29va2llTmFtZTpvLGhlYWRlcnM6aSxhdXRoOmd9PWU7ZS5oZWFkZXJzPWk9dy5mcm9tKGkpLGUudXJsPWlBKGxBKGUuYmFzZVVSTCxlLnVybCksQS5wYXJhbXMsQS5wYXJhbXNTZXJpYWxpemVyKSxnJiZpLnNldCgiQXV0aG9yaXphdGlvbiIsIkJhc2ljICIrYnRvYSgoZy51c2VybmFtZXx8IiIpKyI6IisoZy5wYXNzd29yZD91bmVzY2FwZShlbmNvZGVVUklDb21wb25lbnQoZy5wYXNzd29yZCkpOiIiKSkpO2xldCBCO2lmKHMuaXNGb3JtRGF0YSh0KSl7aWYoRC5oYXNTdGFuZGFyZEJyb3dzZXJFbnZ8fEQuaGFzU3RhbmRhcmRCcm93c2VyV2ViV29ya2VyRW52KWkuc2V0Q29udGVudFR5cGUodm9pZCAwKTtlbHNlIGlmKChCPWkuZ2V0Q29udGVudFR5cGUoKSkhPT0hMSl7bGV0W0MsLi4uYV09Qj9CLnNwbGl0KCI7IikubWFwKEk9PkkudHJpbSgpKS5maWx0ZXIoQm9vbGVhbik6W107aS5zZXRDb250ZW50VHlwZShbQ3x8Im11bHRpcGFydC9mb3JtLWRhdGEiLC4uLmFdLmpvaW4oIjsgIikpfX1pZihELmhhc1N0YW5kYXJkQnJvd3NlckVudiYmKHImJnMuaXNGdW5jdGlvbihyKSYmKHI9cihlKSkscnx8ciE9PSExJiZydChlLnVybCkpKXtsZXQgQz1uJiZvJiZudC5yZWFkKG8pO0MmJmkuc2V0KG4sQyl9cmV0dXJuIGV9O3ZhciB0bj10eXBlb2YgWE1MSHR0cFJlcXVlc3Q8InUiLGl0PXRuJiZmdW5jdGlvbihBKXtyZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24odCxyKXtsZXQgbj1GQShBKSxvPW4uZGF0YSxpPXcuZnJvbShuLmhlYWRlcnMpLm5vcm1hbGl6ZSgpLHtyZXNwb25zZVR5cGU6ZyxvblVwbG9hZFByb2dyZXNzOkIsb25Eb3dubG9hZFByb2dyZXNzOkN9PW4sYSxJLEUsbCxjO2Z1bmN0aW9uIGYoKXtsJiZsKCksYyYmYygpLG4uY2FuY2VsVG9rZW4mJm4uY2FuY2VsVG9rZW4udW5zdWJzY3JpYmUoYSksbi5zaWduYWwmJm4uc2lnbmFsLnJlbW92ZUV2ZW50TGlzdGVuZXIoImFib3J0IixhKX1sZXQgdT1uZXcgWE1MSHR0cFJlcXVlc3Q7dS5vcGVuKG4ubWV0aG9kLnRvVXBwZXJDYXNlKCksbi51cmwsITApLHUudGltZW91dD1uLnRpbWVvdXQ7ZnVuY3Rpb24gbSgpe2lmKCF1KXJldHVybjtsZXQgZD13LmZyb20oImdldEFsbFJlc3BvbnNlSGVhZGVycyJpbiB1JiZ1LmdldEFsbFJlc3BvbnNlSGVhZGVycygpKSxLPXtkYXRhOiFnfHxnPT09InRleHQifHxnPT09Impzb24iP3UucmVzcG9uc2VUZXh0OnUucmVzcG9uc2Usc3RhdHVzOnUuc3RhdHVzLHN0YXR1c1RleHQ6dS5zdGF0dXNUZXh0LGhlYWRlcnM6ZCxjb25maWc6QSxyZXF1ZXN0OnV9O2dBKGZ1bmN0aW9uKE8pe3QoTyksZigpfSxmdW5jdGlvbihPKXtyKE8pLGYoKX0sSyksdT1udWxsfSJvbmxvYWRlbmQiaW4gdT91Lm9ubG9hZGVuZD1tOnUub25yZWFkeXN0YXRlY2hhbmdlPWZ1bmN0aW9uKCl7IXV8fHUucmVhZHlTdGF0ZSE9PTR8fHUuc3RhdHVzPT09MCYmISh1LnJlc3BvbnNlVVJMJiZ1LnJlc3BvbnNlVVJMLmluZGV4T2YoImZpbGU6Iik9PT0wKXx8c2V0VGltZW91dChtKX0sdS5vbmFib3J0PWZ1bmN0aW9uKCl7dSYmKHIobmV3IFEoIlJlcXVlc3QgYWJvcnRlZCIsUS5FQ09OTkFCT1JURUQsQSx1KSksdT1udWxsKX0sdS5vbmVycm9yPWZ1bmN0aW9uKCl7cihuZXcgUSgiTmV0d29yayBFcnJvciIsUS5FUlJfTkVUV09SSyxBLHUpKSx1PW51bGx9LHUub250aW1lb3V0PWZ1bmN0aW9uKCl7bGV0IFU9bi50aW1lb3V0PyJ0aW1lb3V0IG9mICIrbi50aW1lb3V0KyJtcyBleGNlZWRlZCI6InRpbWVvdXQgZXhjZWVkZWQiLEs9bi50cmFuc2l0aW9uYWx8fGJBO24udGltZW91dEVycm9yTWVzc2FnZSYmKFU9bi50aW1lb3V0RXJyb3JNZXNzYWdlKSxyKG5ldyBRKFUsSy5jbGFyaWZ5VGltZW91dEVycm9yP1EuRVRJTUVET1VUOlEuRUNPTk5BQk9SVEVELEEsdSkpLHU9bnVsbH0sbz09PXZvaWQgMCYmaS5zZXRDb250ZW50VHlwZShudWxsKSwic2V0UmVxdWVzdEhlYWRlciJpbiB1JiZzLmZvckVhY2goaS50b0pTT04oKSxmdW5jdGlvbihVLEspe3Uuc2V0UmVxdWVzdEhlYWRlcihLLFUpfSkscy5pc1VuZGVmaW5lZChuLndpdGhDcmVkZW50aWFscyl8fCh1LndpdGhDcmVkZW50aWFscz0hIW4ud2l0aENyZWRlbnRpYWxzKSxnJiZnIT09Impzb24iJiYodS5yZXNwb25zZVR5cGU9bi5yZXNwb25zZVR5cGUpLEMmJihbRSxjXT0kKEMsITApLHUuYWRkRXZlbnRMaXN0ZW5lcigicHJvZ3Jlc3MiLEUpKSxCJiZ1LnVwbG9hZCYmKFtJLGxdPSQoQiksdS51cGxvYWQuYWRkRXZlbnRMaXN0ZW5lcigicHJvZ3Jlc3MiLEkpLHUudXBsb2FkLmFkZEV2ZW50TGlzdGVuZXIoImxvYWRlbmQiLGwpKSwobi5jYW5jZWxUb2tlbnx8bi5zaWduYWwpJiYoYT1kPT57dSYmKHIoIWR8fGQudHlwZT9uZXcgeChudWxsLEEsdSk6ZCksdS5hYm9ydCgpLHU9bnVsbCl9LG4uY2FuY2VsVG9rZW4mJm4uY2FuY2VsVG9rZW4uc3Vic2NyaWJlKGEpLG4uc2lnbmFsJiYobi5zaWduYWwuYWJvcnRlZD9hKCk6bi5zaWduYWwuYWRkRXZlbnRMaXN0ZW5lcigiYWJvcnQiLGEpKSk7bGV0IFM9bmUobi51cmwpO2lmKFMmJkQucHJvdG9jb2xzLmluZGV4T2YoUyk9PT0tMSl7cihuZXcgUSgiVW5zdXBwb3J0ZWQgcHJvdG9jb2wgIitTKyI6IixRLkVSUl9CQURfUkVRVUVTVCxBKSk7cmV0dXJufXUuc2VuZChvfHxudWxsKX0pfTt2YXIgcm49KEEsZSk9PntsZXQgdD1uZXcgQWJvcnRDb250cm9sbGVyLHIsbj1mdW5jdGlvbihCKXtpZighcil7cj0hMCxpKCk7bGV0IEM9QiBpbnN0YW5jZW9mIEVycm9yP0I6dGhpcy5yZWFzb247dC5hYm9ydChDIGluc3RhbmNlb2YgUT9DOm5ldyB4KEMgaW5zdGFuY2VvZiBFcnJvcj9DLm1lc3NhZ2U6QykpfX0sbz1lJiZzZXRUaW1lb3V0KCgpPT57bihuZXcgUShgdGltZW91dCAke2V9IG9mIG1zIGV4Y2VlZGVkYCxRLkVUSU1FRE9VVCkpfSxlKSxpPSgpPT57QSYmKG8mJmNsZWFyVGltZW91dChvKSxvPW51bGwsQS5mb3JFYWNoKEI9PntCJiYoQi5yZW1vdmVFdmVudExpc3RlbmVyP0IucmVtb3ZlRXZlbnRMaXN0ZW5lcigiYWJvcnQiLG4pOkIudW5zdWJzY3JpYmUobikpfSksQT1udWxsKX07QS5mb3JFYWNoKEI9PkImJkIuYWRkRXZlbnRMaXN0ZW5lciYmQi5hZGRFdmVudExpc3RlbmVyKCJhYm9ydCIsbikpO2xldHtzaWduYWw6Z309dDtyZXR1cm4gZy51bnN1YnNjcmliZT1pLFtnLCgpPT57byYmY2xlYXJUaW1lb3V0KG8pLG89bnVsbH1dfSxhdD1ybjt2YXIgbm49ZnVuY3Rpb24qKEEsZSl7bGV0IHQ9QS5ieXRlTGVuZ3RoO2lmKCFlfHx0PGUpe3lpZWxkIEE7cmV0dXJufWxldCByPTAsbjtmb3IoO3I8dDspbj1yK2UseWllbGQgQS5zbGljZShyLG4pLHI9bn0sb249YXN5bmMgZnVuY3Rpb24qKEEsZSx0KXtmb3IgYXdhaXQobGV0IHIgb2YgQSl5aWVsZCpubihBcnJheUJ1ZmZlci5pc1ZpZXcocik/cjphd2FpdCB0KFN0cmluZyhyKSksZSl9LEllPShBLGUsdCxyLG4pPT57bGV0IG89b24oQSxlLG4pLGk9MCxnLEI9Qz0+e2d8fChnPSEwLHImJnIoQykpfTtyZXR1cm4gbmV3IFJlYWRhYmxlU3RyZWFtKHthc3luYyBwdWxsKEMpe3RyeXtsZXR7ZG9uZTphLHZhbHVlOkl9PWF3YWl0IG8ubmV4dCgpO2lmKGEpe0IoKSxDLmNsb3NlKCk7cmV0dXJufWxldCBFPUkuYnl0ZUxlbmd0aDtpZih0KXtsZXQgbD1pKz1FO3QobCl9Qy5lbnF1ZXVlKG5ldyBVaW50OEFycmF5KEkpKX1jYXRjaChhKXt0aHJvdyBCKGEpLGF9fSxjYW5jZWwoQyl7cmV0dXJuIEIoQyksby5yZXR1cm4oKX19LHtoaWdoV2F0ZXJNYXJrOjJ9KX07dmFyIE5BPXR5cGVvZiBmZXRjaD09ImZ1bmN0aW9uIiYmdHlwZW9mIFJlcXVlc3Q9PSJmdW5jdGlvbiImJnR5cGVvZiBSZXNwb25zZT09ImZ1bmN0aW9uIixJdD1OQSYmdHlwZW9mIFJlYWRhYmxlU3RyZWFtPT0iZnVuY3Rpb24iLGdlPU5BJiYodHlwZW9mIFRleHRFbmNvZGVyPT0iZnVuY3Rpb24iPyhBPT5lPT5BLmVuY29kZShlKSkobmV3IFRleHRFbmNvZGVyKTphc3luYyBBPT5uZXcgVWludDhBcnJheShhd2FpdCBuZXcgUmVzcG9uc2UoQSkuYXJyYXlCdWZmZXIoKSkpLGd0PShBLC4uLmUpPT57dHJ5e3JldHVybiEhQSguLi5lKX1jYXRjaHtyZXR1cm4hMX19LGFuPUl0JiZndCgoKT0+e2xldCBBPSExLGU9bmV3IFJlcXVlc3QoRC5vcmlnaW4se2JvZHk6bmV3IFJlYWRhYmxlU3RyZWFtLG1ldGhvZDoiUE9TVCIsZ2V0IGR1cGxleCgpe3JldHVybiBBPSEwLCJoYWxmIn19KS5oZWFkZXJzLmhhcygiQ29udGVudC1UeXBlIik7cmV0dXJuIEEmJiFlfSksc3Q9NjQqMTAyNCxsZT1JdCYmZ3QoKCk9PnMuaXNSZWFkYWJsZVN0cmVhbShuZXcgUmVzcG9uc2UoIiIpLmJvZHkpKSxVQT17c3RyZWFtOmxlJiYoQT0+QS5ib2R5KX07TkEmJihBPT57WyJ0ZXh0IiwiYXJyYXlCdWZmZXIiLCJibG9iIiwiZm9ybURhdGEiLCJzdHJlYW0iXS5mb3JFYWNoKGU9PnshVUFbZV0mJihVQVtlXT1zLmlzRnVuY3Rpb24oQVtlXSk/dD0+dFtlXSgpOih0LHIpPT57dGhyb3cgbmV3IFEoYFJlc3BvbnNlIHR5cGUgJyR7ZX0nIGlzIG5vdCBzdXBwb3J0ZWRgLFEuRVJSX05PVF9TVVBQT1JULHIpfSl9KX0pKG5ldyBSZXNwb25zZSk7dmFyIHNuPWFzeW5jIEE9PntpZihBPT1udWxsKXJldHVybiAwO2lmKHMuaXNCbG9iKEEpKXJldHVybiBBLnNpemU7aWYocy5pc1NwZWNDb21wbGlhbnRGb3JtKEEpKXJldHVybihhd2FpdCBuZXcgUmVxdWVzdChBKS5hcnJheUJ1ZmZlcigpKS5ieXRlTGVuZ3RoO2lmKHMuaXNBcnJheUJ1ZmZlclZpZXcoQSl8fHMuaXNBcnJheUJ1ZmZlcihBKSlyZXR1cm4gQS5ieXRlTGVuZ3RoO2lmKHMuaXNVUkxTZWFyY2hQYXJhbXMoQSkmJihBPUErIiIpLHMuaXNTdHJpbmcoQSkpcmV0dXJuKGF3YWl0IGdlKEEpKS5ieXRlTGVuZ3RofSxJbj1hc3luYyhBLGUpPT57bGV0IHQ9cy50b0Zpbml0ZU51bWJlcihBLmdldENvbnRlbnRMZW5ndGgoKSk7cmV0dXJuIHQ/P3NuKGUpfSxsdD1OQSYmKGFzeW5jIEE9PntsZXR7dXJsOmUsbWV0aG9kOnQsZGF0YTpyLHNpZ25hbDpuLGNhbmNlbFRva2VuOm8sdGltZW91dDppLG9uRG93bmxvYWRQcm9ncmVzczpnLG9uVXBsb2FkUHJvZ3Jlc3M6QixyZXNwb25zZVR5cGU6QyxoZWFkZXJzOmEsd2l0aENyZWRlbnRpYWxzOkk9InNhbWUtb3JpZ2luIixmZXRjaE9wdGlvbnM6RX09RkEoQSk7Qz1DPyhDKyIiKS50b0xvd2VyQ2FzZSgpOiJ0ZXh0IjtsZXRbbCxjXT1ufHxvfHxpP2F0KFtuLG9dLGkpOltdLGYsdSxtPSgpPT57IWYmJnNldFRpbWVvdXQoKCk9PntsJiZsLnVuc3Vic2NyaWJlKCl9KSxmPSEwfSxTO3RyeXtpZihCJiZhbiYmdCE9PSJnZXQiJiZ0IT09ImhlYWQiJiYoUz1hd2FpdCBJbihhLHIpKSE9PTApe2xldCBUPW5ldyBSZXF1ZXN0KGUse21ldGhvZDoiUE9TVCIsYm9keTpyLGR1cGxleDoiaGFsZiJ9KSxPO2lmKHMuaXNGb3JtRGF0YShyKSYmKE89VC5oZWFkZXJzLmdldCgiY29udGVudC10eXBlIikpJiZhLnNldENvbnRlbnRUeXBlKE8pLFQuYm9keSl7bGV0W0hBLHVBXT1vZShTLCQoaWUoQikpKTtyPUllKFQuYm9keSxzdCxIQSx1QSxnZSl9fXMuaXNTdHJpbmcoSSl8fChJPUk/ImluY2x1ZGUiOiJvbWl0IiksdT1uZXcgUmVxdWVzdChlLHsuLi5FLHNpZ25hbDpsLG1ldGhvZDp0LnRvVXBwZXJDYXNlKCksaGVhZGVyczphLm5vcm1hbGl6ZSgpLnRvSlNPTigpLGJvZHk6cixkdXBsZXg6ImhhbGYiLGNyZWRlbnRpYWxzOkl9KTtsZXQgZD1hd2FpdCBmZXRjaCh1KSxVPWxlJiYoQz09PSJzdHJlYW0ifHxDPT09InJlc3BvbnNlIik7aWYobGUmJihnfHxVKSl7bGV0IFQ9e307WyJzdGF0dXMiLCJzdGF0dXNUZXh0IiwiaGVhZGVycyJdLmZvckVhY2goaGU9PntUW2hlXT1kW2hlXX0pO2xldCBPPXMudG9GaW5pdGVOdW1iZXIoZC5oZWFkZXJzLmdldCgiY29udGVudC1sZW5ndGgiKSksW0hBLHVBXT1nJiZvZShPLCQoaWUoZyksITApKXx8W107ZD1uZXcgUmVzcG9uc2UoSWUoZC5ib2R5LHN0LEhBLCgpPT57dUEmJnVBKCksVSYmbSgpfSxnZSksVCl9Qz1DfHwidGV4dCI7bGV0IEs9YXdhaXQgVUFbcy5maW5kS2V5KFVBLEMpfHwidGV4dCJdKGQsQSk7cmV0dXJuIVUmJm0oKSxjJiZjKCksYXdhaXQgbmV3IFByb21pc2UoKFQsTyk9PntnQShULE8se2RhdGE6SyxoZWFkZXJzOncuZnJvbShkLmhlYWRlcnMpLHN0YXR1czpkLnN0YXR1cyxzdGF0dXNUZXh0OmQuc3RhdHVzVGV4dCxjb25maWc6QSxyZXF1ZXN0OnV9KX0pfWNhdGNoKGQpe3Rocm93IG0oKSxkJiZkLm5hbWU9PT0iVHlwZUVycm9yIiYmL2ZldGNoL2kudGVzdChkLm1lc3NhZ2UpP09iamVjdC5hc3NpZ24obmV3IFEoIk5ldHdvcmsgRXJyb3IiLFEuRVJSX05FVFdPUkssQSx1KSx7Y2F1c2U6ZC5jYXVzZXx8ZH0pOlEuZnJvbShkLGQmJmQuY29kZSxBLHUpfX0pO3ZhciBDZT17aHR0cDpEQSx4aHI6aXQsZmV0Y2g6bHR9O3MuZm9yRWFjaChDZSwoQSxlKT0+e2lmKEEpe3RyeXtPYmplY3QuZGVmaW5lUHJvcGVydHkoQSwibmFtZSIse3ZhbHVlOmV9KX1jYXRjaHt9T2JqZWN0LmRlZmluZVByb3BlcnR5KEEsImFkYXB0ZXJOYW1lIix7dmFsdWU6ZX0pfX0pO3ZhciBDdD1BPT5gLSAke0F9YCxnbj1BPT5zLmlzRnVuY3Rpb24oQSl8fEE9PT1udWxsfHxBPT09ITEsTEE9e2dldEFkYXB0ZXI6QT0+e0E9cy5pc0FycmF5KEEpP0E6W0FdO2xldHtsZW5ndGg6ZX09QSx0LHIsbj17fTtmb3IobGV0IG89MDtvPGU7bysrKXt0PUFbb107bGV0IGk7aWYocj10LCFnbih0KSYmKHI9Q2VbKGk9U3RyaW5nKHQpKS50b0xvd2VyQ2FzZSgpXSxyPT09dm9pZCAwKSl0aHJvdyBuZXcgUShgVW5rbm93biBhZGFwdGVyICcke2l9J2ApO2lmKHIpYnJlYWs7bltpfHwiIyIrb109cn1pZighcil7bGV0IG89T2JqZWN0LmVudHJpZXMobikubWFwKChbZyxCXSk9PmBhZGFwdGVyICR7Z30gYCsoQj09PSExPyJpcyBub3Qgc3VwcG9ydGVkIGJ5IHRoZSBlbnZpcm9ubWVudCI6ImlzIG5vdCBhdmFpbGFibGUgaW4gdGhlIGJ1aWxkIikpLGk9ZT9vLmxlbmd0aD4xP2BzaW5jZSA6CmArby5tYXAoQ3QpLmpvaW4oYApgKToiICIrQ3Qob1swXSk6ImFzIG5vIGFkYXB0ZXIgc3BlY2lmaWVkIjt0aHJvdyBuZXcgUSgiVGhlcmUgaXMgbm8gc3VpdGFibGUgYWRhcHRlciB0byBkaXNwYXRjaCB0aGUgcmVxdWVzdCAiK2ksIkVSUl9OT1RfU1VQUE9SVCIpfXJldHVybiByfSxhZGFwdGVyczpDZX07ZnVuY3Rpb24gQmUoQSl7aWYoQS5jYW5jZWxUb2tlbiYmQS5jYW5jZWxUb2tlbi50aHJvd0lmUmVxdWVzdGVkKCksQS5zaWduYWwmJkEuc2lnbmFsLmFib3J0ZWQpdGhyb3cgbmV3IHgobnVsbCxBKX1mdW5jdGlvbiBHQShBKXtyZXR1cm4gQmUoQSksQS5oZWFkZXJzPXcuZnJvbShBLmhlYWRlcnMpLEEuZGF0YT1zQS5jYWxsKEEsQS50cmFuc2Zvcm1SZXF1ZXN0KSxbInBvc3QiLCJwdXQiLCJwYXRjaCJdLmluZGV4T2YoQS5tZXRob2QpIT09LTEmJkEuaGVhZGVycy5zZXRDb250ZW50VHlwZSgiYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkIiwhMSksTEEuZ2V0QWRhcHRlcihBLmFkYXB0ZXJ8fFouYWRhcHRlcikoQSkudGhlbihmdW5jdGlvbihyKXtyZXR1cm4gQmUoQSksci5kYXRhPXNBLmNhbGwoQSxBLnRyYW5zZm9ybVJlc3BvbnNlLHIpLHIuaGVhZGVycz13LmZyb20oci5oZWFkZXJzKSxyfSxmdW5jdGlvbihyKXtyZXR1cm4gSUEocil8fChCZShBKSxyJiZyLnJlc3BvbnNlJiYoci5yZXNwb25zZS5kYXRhPXNBLmNhbGwoQSxBLnRyYW5zZm9ybVJlc3BvbnNlLHIucmVzcG9uc2UpLHIucmVzcG9uc2UuaGVhZGVycz13LmZyb20oci5yZXNwb25zZS5oZWFkZXJzKSkpLFByb21pc2UucmVqZWN0KHIpfSl9dmFyIFRBPSIxLjcuNCI7dmFyIGNlPXt9O1sib2JqZWN0IiwiYm9vbGVhbiIsIm51bWJlciIsImZ1bmN0aW9uIiwic3RyaW5nIiwic3ltYm9sIl0uZm9yRWFjaCgoQSxlKT0+e2NlW0FdPWZ1bmN0aW9uKHIpe3JldHVybiB0eXBlb2Ygcj09PUF8fCJhIisoZTwxPyJuICI6IiAiKStBfX0pO3ZhciBCdD17fTtjZS50cmFuc2l0aW9uYWw9ZnVuY3Rpb24oZSx0LHIpe2Z1bmN0aW9uIG4obyxpKXtyZXR1cm4iW0F4aW9zIHYiK1RBKyJdIFRyYW5zaXRpb25hbCBvcHRpb24gJyIrbysiJyIraSsocj8iLiAiK3I6IiIpfXJldHVybihvLGksZyk9PntpZihlPT09ITEpdGhyb3cgbmV3IFEobihpLCIgaGFzIGJlZW4gcmVtb3ZlZCIrKHQ/IiBpbiAiK3Q6IiIpKSxRLkVSUl9ERVBSRUNBVEVEKTtyZXR1cm4gdCYmIUJ0W2ldJiYoQnRbaV09ITAsY29uc29sZS53YXJuKG4oaSwiIGhhcyBiZWVuIGRlcHJlY2F0ZWQgc2luY2UgdiIrdCsiIGFuZCB3aWxsIGJlIHJlbW92ZWQgaW4gdGhlIG5lYXIgZnV0dXJlIikpKSxlP2UobyxpLGcpOiEwfX07ZnVuY3Rpb24gbG4oQSxlLHQpe2lmKHR5cGVvZiBBIT0ib2JqZWN0Iil0aHJvdyBuZXcgUSgib3B0aW9ucyBtdXN0IGJlIGFuIG9iamVjdCIsUS5FUlJfQkFEX09QVElPTl9WQUxVRSk7bGV0IHI9T2JqZWN0LmtleXMoQSksbj1yLmxlbmd0aDtmb3IoO24tLSA+MDspe2xldCBvPXJbbl0saT1lW29dO2lmKGkpe2xldCBnPUFbb10sQj1nPT09dm9pZCAwfHxpKGcsbyxBKTtpZihCIT09ITApdGhyb3cgbmV3IFEoIm9wdGlvbiAiK28rIiBtdXN0IGJlICIrQixRLkVSUl9CQURfT1BUSU9OX1ZBTFVFKTtjb250aW51ZX1pZih0IT09ITApdGhyb3cgbmV3IFEoIlVua25vd24gb3B0aW9uICIrbyxRLkVSUl9CQURfT1BUSU9OKX19dmFyIE9BPXthc3NlcnRPcHRpb25zOmxuLHZhbGlkYXRvcnM6Y2V9O3ZhciBxPU9BLnZhbGlkYXRvcnMsQUE9Y2xhc3N7Y29uc3RydWN0b3IoZSl7dGhpcy5kZWZhdWx0cz1lLHRoaXMuaW50ZXJjZXB0b3JzPXtyZXF1ZXN0Om5ldyBYQSxyZXNwb25zZTpuZXcgWEF9fWFzeW5jIHJlcXVlc3QoZSx0KXt0cnl7cmV0dXJuIGF3YWl0IHRoaXMuX3JlcXVlc3QoZSx0KX1jYXRjaChyKXtpZihyIGluc3RhbmNlb2YgRXJyb3Ipe2xldCBuO0Vycm9yLmNhcHR1cmVTdGFja1RyYWNlP0Vycm9yLmNhcHR1cmVTdGFja1RyYWNlKG49e30pOm49bmV3IEVycm9yO2xldCBvPW4uc3RhY2s/bi5zdGFjay5yZXBsYWNlKC9eLitcbi8sIiIpOiIiO3RyeXtyLnN0YWNrP28mJiFTdHJpbmcoci5zdGFjaykuZW5kc1dpdGgoby5yZXBsYWNlKC9eLitcbi4rXG4vLCIiKSkmJihyLnN0YWNrKz1gCmArbyk6ci5zdGFjaz1vfWNhdGNoe319dGhyb3cgcn19X3JlcXVlc3QoZSx0KXt0eXBlb2YgZT09InN0cmluZyI/KHQ9dHx8e30sdC51cmw9ZSk6dD1lfHx7fSx0PUwodGhpcy5kZWZhdWx0cyx0KTtsZXR7dHJhbnNpdGlvbmFsOnIscGFyYW1zU2VyaWFsaXplcjpuLGhlYWRlcnM6b309dDtyIT09dm9pZCAwJiZPQS5hc3NlcnRPcHRpb25zKHIse3NpbGVudEpTT05QYXJzaW5nOnEudHJhbnNpdGlvbmFsKHEuYm9vbGVhbiksZm9yY2VkSlNPTlBhcnNpbmc6cS50cmFuc2l0aW9uYWwocS5ib29sZWFuKSxjbGFyaWZ5VGltZW91dEVycm9yOnEudHJhbnNpdGlvbmFsKHEuYm9vbGVhbil9LCExKSxuIT1udWxsJiYocy5pc0Z1bmN0aW9uKG4pP3QucGFyYW1zU2VyaWFsaXplcj17c2VyaWFsaXplOm59Ok9BLmFzc2VydE9wdGlvbnMobix7ZW5jb2RlOnEuZnVuY3Rpb24sc2VyaWFsaXplOnEuZnVuY3Rpb259LCEwKSksdC5tZXRob2Q9KHQubWV0aG9kfHx0aGlzLmRlZmF1bHRzLm1ldGhvZHx8ImdldCIpLnRvTG93ZXJDYXNlKCk7bGV0IGk9byYmcy5tZXJnZShvLmNvbW1vbixvW3QubWV0aG9kXSk7byYmcy5mb3JFYWNoKFsiZGVsZXRlIiwiZ2V0IiwiaGVhZCIsInBvc3QiLCJwdXQiLCJwYXRjaCIsImNvbW1vbiJdLGM9PntkZWxldGUgb1tjXX0pLHQuaGVhZGVycz13LmNvbmNhdChpLG8pO2xldCBnPVtdLEI9ITA7dGhpcy5pbnRlcmNlcHRvcnMucmVxdWVzdC5mb3JFYWNoKGZ1bmN0aW9uKGYpe3R5cGVvZiBmLnJ1bldoZW49PSJmdW5jdGlvbiImJmYucnVuV2hlbih0KT09PSExfHwoQj1CJiZmLnN5bmNocm9ub3VzLGcudW5zaGlmdChmLmZ1bGZpbGxlZCxmLnJlamVjdGVkKSl9KTtsZXQgQz1bXTt0aGlzLmludGVyY2VwdG9ycy5yZXNwb25zZS5mb3JFYWNoKGZ1bmN0aW9uKGYpe0MucHVzaChmLmZ1bGZpbGxlZCxmLnJlamVjdGVkKX0pO2xldCBhLEk9MCxFO2lmKCFCKXtsZXQgYz1bR0EuYmluZCh0aGlzKSx2b2lkIDBdO2ZvcihjLnVuc2hpZnQuYXBwbHkoYyxnKSxjLnB1c2guYXBwbHkoYyxDKSxFPWMubGVuZ3RoLGE9UHJvbWlzZS5yZXNvbHZlKHQpO0k8RTspYT1hLnRoZW4oY1tJKytdLGNbSSsrXSk7cmV0dXJuIGF9RT1nLmxlbmd0aDtsZXQgbD10O2ZvcihJPTA7STxFOyl7bGV0IGM9Z1tJKytdLGY9Z1tJKytdO3RyeXtsPWMobCl9Y2F0Y2godSl7Zi5jYWxsKHRoaXMsdSk7YnJlYWt9fXRyeXthPUdBLmNhbGwodGhpcyxsKX1jYXRjaChjKXtyZXR1cm4gUHJvbWlzZS5yZWplY3QoYyl9Zm9yKEk9MCxFPUMubGVuZ3RoO0k8RTspYT1hLnRoZW4oQ1tJKytdLENbSSsrXSk7cmV0dXJuIGF9Z2V0VXJpKGUpe2U9TCh0aGlzLmRlZmF1bHRzLGUpO2xldCB0PWxBKGUuYmFzZVVSTCxlLnVybCk7cmV0dXJuIGlBKHQsZS5wYXJhbXMsZS5wYXJhbXNTZXJpYWxpemVyKX19O3MuZm9yRWFjaChbImRlbGV0ZSIsImdldCIsImhlYWQiLCJvcHRpb25zIl0sZnVuY3Rpb24oZSl7QUEucHJvdG90eXBlW2VdPWZ1bmN0aW9uKHQscil7cmV0dXJuIHRoaXMucmVxdWVzdChMKHJ8fHt9LHttZXRob2Q6ZSx1cmw6dCxkYXRhOihyfHx7fSkuZGF0YX0pKX19KTtzLmZvckVhY2goWyJwb3N0IiwicHV0IiwicGF0Y2giXSxmdW5jdGlvbihlKXtmdW5jdGlvbiB0KHIpe3JldHVybiBmdW5jdGlvbihvLGksZyl7cmV0dXJuIHRoaXMucmVxdWVzdChMKGd8fHt9LHttZXRob2Q6ZSxoZWFkZXJzOnI/eyJDb250ZW50LVR5cGUiOiJtdWx0aXBhcnQvZm9ybS1kYXRhIn06e30sdXJsOm8sZGF0YTppfSkpfX1BQS5wcm90b3R5cGVbZV09dCgpLEFBLnByb3RvdHlwZVtlKyJGb3JtIl09dCghMCl9KTt2YXIgQ0E9QUE7dmFyIHVlPWNsYXNzIEF7Y29uc3RydWN0b3IoZSl7aWYodHlwZW9mIGUhPSJmdW5jdGlvbiIpdGhyb3cgbmV3IFR5cGVFcnJvcigiZXhlY3V0b3IgbXVzdCBiZSBhIGZ1bmN0aW9uLiIpO2xldCB0O3RoaXMucHJvbWlzZT1uZXcgUHJvbWlzZShmdW5jdGlvbihvKXt0PW99KTtsZXQgcj10aGlzO3RoaXMucHJvbWlzZS50aGVuKG49PntpZighci5fbGlzdGVuZXJzKXJldHVybjtsZXQgbz1yLl9saXN0ZW5lcnMubGVuZ3RoO2Zvcig7by0tID4wOylyLl9saXN0ZW5lcnNbb10obik7ci5fbGlzdGVuZXJzPW51bGx9KSx0aGlzLnByb21pc2UudGhlbj1uPT57bGV0IG8saT1uZXcgUHJvbWlzZShnPT57ci5zdWJzY3JpYmUoZyksbz1nfSkudGhlbihuKTtyZXR1cm4gaS5jYW5jZWw9ZnVuY3Rpb24oKXtyLnVuc3Vic2NyaWJlKG8pfSxpfSxlKGZ1bmN0aW9uKG8saSxnKXtyLnJlYXNvbnx8KHIucmVhc29uPW5ldyB4KG8saSxnKSx0KHIucmVhc29uKSl9KX10aHJvd0lmUmVxdWVzdGVkKCl7aWYodGhpcy5yZWFzb24pdGhyb3cgdGhpcy5yZWFzb259c3Vic2NyaWJlKGUpe2lmKHRoaXMucmVhc29uKXtlKHRoaXMucmVhc29uKTtyZXR1cm59dGhpcy5fbGlzdGVuZXJzP3RoaXMuX2xpc3RlbmVycy5wdXNoKGUpOnRoaXMuX2xpc3RlbmVycz1bZV19dW5zdWJzY3JpYmUoZSl7aWYoIXRoaXMuX2xpc3RlbmVycylyZXR1cm47bGV0IHQ9dGhpcy5fbGlzdGVuZXJzLmluZGV4T2YoZSk7dCE9PS0xJiZ0aGlzLl9saXN0ZW5lcnMuc3BsaWNlKHQsMSl9c3RhdGljIHNvdXJjZSgpe2xldCBlO3JldHVybnt0b2tlbjpuZXcgQShmdW5jdGlvbihuKXtlPW59KSxjYW5jZWw6ZX19fSxjdD11ZTtmdW5jdGlvbiBFZShBKXtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIEEuYXBwbHkobnVsbCx0KX19ZnVuY3Rpb24gZmUoQSl7cmV0dXJuIHMuaXNPYmplY3QoQSkmJkEuaXNBeGlvc0Vycm9yPT09ITB9dmFyIFFlPXtDb250aW51ZToxMDAsU3dpdGNoaW5nUHJvdG9jb2xzOjEwMSxQcm9jZXNzaW5nOjEwMixFYXJseUhpbnRzOjEwMyxPazoyMDAsQ3JlYXRlZDoyMDEsQWNjZXB0ZWQ6MjAyLE5vbkF1dGhvcml0YXRpdmVJbmZvcm1hdGlvbjoyMDMsTm9Db250ZW50OjIwNCxSZXNldENvbnRlbnQ6MjA1LFBhcnRpYWxDb250ZW50OjIwNixNdWx0aVN0YXR1czoyMDcsQWxyZWFkeVJlcG9ydGVkOjIwOCxJbVVzZWQ6MjI2LE11bHRpcGxlQ2hvaWNlczozMDAsTW92ZWRQZXJtYW5lbnRseTozMDEsRm91bmQ6MzAyLFNlZU90aGVyOjMwMyxOb3RNb2RpZmllZDozMDQsVXNlUHJveHk6MzA1LFVudXNlZDozMDYsVGVtcG9yYXJ5UmVkaXJlY3Q6MzA3LFBlcm1hbmVudFJlZGlyZWN0OjMwOCxCYWRSZXF1ZXN0OjQwMCxVbmF1dGhvcml6ZWQ6NDAxLFBheW1lbnRSZXF1aXJlZDo0MDIsRm9yYmlkZGVuOjQwMyxOb3RGb3VuZDo0MDQsTWV0aG9kTm90QWxsb3dlZDo0MDUsTm90QWNjZXB0YWJsZTo0MDYsUHJveHlBdXRoZW50aWNhdGlvblJlcXVpcmVkOjQwNyxSZXF1ZXN0VGltZW91dDo0MDgsQ29uZmxpY3Q6NDA5LEdvbmU6NDEwLExlbmd0aFJlcXVpcmVkOjQxMSxQcmVjb25kaXRpb25GYWlsZWQ6NDEyLFBheWxvYWRUb29MYXJnZTo0MTMsVXJpVG9vTG9uZzo0MTQsVW5zdXBwb3J0ZWRNZWRpYVR5cGU6NDE1LFJhbmdlTm90U2F0aXNmaWFibGU6NDE2LEV4cGVjdGF0aW9uRmFpbGVkOjQxNyxJbUFUZWFwb3Q6NDE4LE1pc2RpcmVjdGVkUmVxdWVzdDo0MjEsVW5wcm9jZXNzYWJsZUVudGl0eTo0MjIsTG9ja2VkOjQyMyxGYWlsZWREZXBlbmRlbmN5OjQyNCxUb29FYXJseTo0MjUsVXBncmFkZVJlcXVpcmVkOjQyNixQcmVjb25kaXRpb25SZXF1aXJlZDo0MjgsVG9vTWFueVJlcXVlc3RzOjQyOSxSZXF1ZXN0SGVhZGVyRmllbGRzVG9vTGFyZ2U6NDMxLFVuYXZhaWxhYmxlRm9yTGVnYWxSZWFzb25zOjQ1MSxJbnRlcm5hbFNlcnZlckVycm9yOjUwMCxOb3RJbXBsZW1lbnRlZDo1MDEsQmFkR2F0ZXdheTo1MDIsU2VydmljZVVuYXZhaWxhYmxlOjUwMyxHYXRld2F5VGltZW91dDo1MDQsSHR0cFZlcnNpb25Ob3RTdXBwb3J0ZWQ6NTA1LFZhcmlhbnRBbHNvTmVnb3RpYXRlczo1MDYsSW5zdWZmaWNpZW50U3RvcmFnZTo1MDcsTG9vcERldGVjdGVkOjUwOCxOb3RFeHRlbmRlZDo1MTAsTmV0d29ya0F1dGhlbnRpY2F0aW9uUmVxdWlyZWQ6NTExfTtPYmplY3QuZW50cmllcyhRZSkuZm9yRWFjaCgoW0EsZV0pPT57UWVbZV09QX0pO3ZhciB1dD1RZTtmdW5jdGlvbiBFdChBKXtsZXQgZT1uZXcgQ0EoQSksdD1yQShDQS5wcm90b3R5cGUucmVxdWVzdCxlKTtyZXR1cm4gcy5leHRlbmQodCxDQS5wcm90b3R5cGUsZSx7YWxsT3duS2V5czohMH0pLHMuZXh0ZW5kKHQsZSxudWxsLHthbGxPd25LZXlzOiEwfSksdC5jcmVhdGU9ZnVuY3Rpb24obil7cmV0dXJuIEV0KEwoQSxuKSl9LHR9dmFyIGg9RXQoWik7aC5BeGlvcz1DQTtoLkNhbmNlbGVkRXJyb3I9eDtoLkNhbmNlbFRva2VuPWN0O2guaXNDYW5jZWw9SUE7aC5WRVJTSU9OPVRBO2gudG9Gb3JtRGF0YT1NO2guQXhpb3NFcnJvcj1RO2guQ2FuY2VsPWguQ2FuY2VsZWRFcnJvcjtoLmFsbD1mdW5jdGlvbihlKXtyZXR1cm4gUHJvbWlzZS5hbGwoZSl9O2guc3ByZWFkPUVlO2guaXNBeGlvc0Vycm9yPWZlO2gubWVyZ2VDb25maWc9TDtoLkF4aW9zSGVhZGVycz13O2guZm9ybVRvSlNPTj1BPT5SQShzLmlzSFRNTEZvcm0oQSk/bmV3IEZvcm1EYXRhKEEpOkEpO2guZ2V0QWRhcHRlcj1MQS5nZXRBZGFwdGVyO2guSHR0cFN0YXR1c0NvZGU9dXQ7aC5kZWZhdWx0PWg7dmFyIGVBPWg7dmFye0F4aW9zOnJzLEF4aW9zRXJyb3I6bnMsQ2FuY2VsZWRFcnJvcjpvcyxpc0NhbmNlbDppcyxDYW5jZWxUb2tlbjphcyxWRVJTSU9OOnNzLGFsbDpJcyxDYW5jZWw6Z3MsaXNBeGlvc0Vycm9yOmxzLHNwcmVhZDpDcyx0b0Zvcm1EYXRhOkJzLEF4aW9zSGVhZGVyczpjcyxIdHRwU3RhdHVzQ29kZTp1cyxmb3JtVG9KU09OOkVzLGdldEFkYXB0ZXI6ZnMsbWVyZ2VDb25maWc6UXN9PWVBO2FzeW5jIGZ1bmN0aW9uIENuKEEsZSl7bGV0IHQ9QSxyPW51bGw7aWYodD09bnVsbClyPW5ldyBXb3JrZXIobmV3IFVSTCgiLi93ZWItd29ya2Vycy9pdGstd2FzbS1waXBlbGluZS53b3JrZXIuanMiLGltcG9ydC5tZXRhLnVybCkse3R5cGU6Im1vZHVsZSJ9KTtlbHNlIGlmKHQuc3RhcnRzV2l0aCgiaHR0cCIpKXtsZXQgbj1hd2FpdCBlQS5nZXQodCx7cmVzcG9uc2VUeXBlOiJibG9iIixwYXJhbXM6ZX0pLG89VVJMLmNyZWF0ZU9iamVjdFVSTChuLmRhdGEpO3I9bmV3IFdvcmtlcihvLHt0eXBlOiJtb2R1bGUifSl9ZWxzZSByPW5ldyBXb3JrZXIodCx7dHlwZToibW9kdWxlIn0pO3JldHVybiByfXZhciBCQT1DbjtmdW5jdGlvbiBmdChBKXtsZXQgZT1XQShBKSx0PUE7cmV0dXJuIHQudGVybWluYXRlZD0hMSx0LndvcmtlclByb3h5PWUsdC5vcmlnaW5hbFRlcm1pbmF0ZT10LnRlcm1pbmF0ZSx0LnRlcm1pbmF0ZT0oKT0+e3QudGVybWluYXRlZD0hMCx0LndvcmtlclByb3h5W0tBXSgpLHQub3JpZ2luYWxUZXJtaW5hdGUoKX0se3dvcmtlclByb3h5OmUsd29ya2VyOnR9fWFzeW5jIGZ1bmN0aW9uIEJuKEEsZSx0KXtsZXQgcjtpZihBIT1udWxsKXtsZXQgbz1BO3JldHVybiBvLndvcmtlclByb3h5IT09dm9pZCAwPyhyPW8ud29ya2VyUHJveHkse3dvcmtlclByb3h5OnIsd29ya2VyOm99KTpmdChBKX1sZXQgbj1hd2FpdCBCQShlLHQpO3JldHVybiBmdChuKX12YXIgUXQ9Qm47YXN5bmMgZnVuY3Rpb24gY24oQSxlLHQpe2xldCByPSJ1bmtub3duIjt0eXBlb2YgQSE9InN0cmluZyI/cj1BLmhyZWY6QS5zdGFydHNXaXRoKCJodHRwIik/cj1BOnI9dHlwZW9mIGU8InUiP2Ake2V9LyR7QX1gOkEsci5lbmRzV2l0aCgiLmpzIikmJihyPXIuc3Vic3RyaW5nKDAsci5sZW5ndGgtMykpLHIuZW5kc1dpdGgoIi53YXNtIikmJihyPXIuc3Vic3RyaW5nKDAsci5sZW5ndGgtNSkpO2xldCBuPWAke3J9Lndhc21gLGk9KGF3YWl0IGVBLmdldChuLHtyZXNwb25zZVR5cGU6ImFycmF5YnVmZmVyIixwYXJhbXM6dH0pKS5kYXRhO3JldHVybihhd2FpdCBpbXBvcnQoYCR7cn0uanNgKSkuZGVmYXVsdCh7d2FzbUJpbmFyeTppfSl9dmFyIHB0PWNuO3ZhciBkdD1hc3luYygpPT5XZWJBc3NlbWJseS52YWxpZGF0ZShuZXcgVWludDhBcnJheShbMCw5NywxMTUsMTA5LDEsMCwwLDAsMSw1LDEsOTYsMCwxLDEyMywzLDIsMSwwLDEwLDEwLDEsOCwwLDY1LDAsMjUzLDE1LDI1Myw5OCwxMV0pKTt2YXIgeXQ9dHlwZW9mIGdsb2JhbFRoaXMuU2hhcmVkQXJyYXlCdWZmZXI9PSJmdW5jdGlvbiIsbXQ9bmV3IFRleHRFbmNvZGVyLGh0PW5ldyBUZXh0RGVjb2RlcigidXRmLTgiKTtmdW5jdGlvbiB1bihBLGUpe2xldCB0PXtmbGFnczoiciIsZW5jb2Rpbmc6ImJpbmFyeSJ9LHI9QS5mc19vcGVuKGUsdC5mbGFncyksbz1BLmZzX3N0YXQoZSkuc2l6ZSxpPW51bGw7eXQ/aT1uZXcgU2hhcmVkQXJyYXlCdWZmZXIobyk6aT1uZXcgQXJyYXlCdWZmZXIobyk7bGV0IGc9bmV3IFVpbnQ4QXJyYXkoaSk7cmV0dXJuIEEuZnNfcmVhZChyLGcsMCxvLDApLEEuZnNfY2xvc2UociksZ31mdW5jdGlvbiB3dChBLGUsdCl7bGV0IHI9bnVsbDt5dD9yPW5ldyBTaGFyZWRBcnJheUJ1ZmZlcih0KTpyPW5ldyBBcnJheUJ1ZmZlcih0KTtsZXQgbj1uZXcgVWludDhBcnJheShyKSxvPW5ldyBVaW50OEFycmF5KEEuSEVBUFU4LmJ1ZmZlcixlLHQpO3JldHVybiBuLnNldChvKSxufWZ1bmN0aW9uIHkoQSxlLHQscil7bGV0IG49MDtyZXR1cm4gZSE9PW51bGwmJihuPUEuY2NhbGwoIml0a193YXNtX2lucHV0X2FycmF5X2FsbG9jIiwibnVtYmVyIixbIm51bWJlciIsIm51bWJlciIsIm51bWJlciIsIm51bWJlciJdLFswLHQscixlLmJ1ZmZlci5ieXRlTGVuZ3RoXSksQS5IRUFQVTguc2V0KG5ldyBVaW50OEFycmF5KGUuYnVmZmVyKSxuKSksbn1mdW5jdGlvbiBZKEEsZSx0KXtsZXQgcj1KU09OLnN0cmluZ2lmeShlKSxuPUEubGVuZ3RoQnl0ZXNVVEY4KHIpKzEsbz1BLmNjYWxsKCJpdGtfd2FzbV9pbnB1dF9qc29uX2FsbG9jIiwibnVtYmVyIixbIm51bWJlciIsIm51bWJlciIsIm51bWJlciJdLFswLHQsbl0pO0Euc3RyaW5nVG9VVEY4KHIsbyxuKX1mdW5jdGlvbiBiKEEsZSx0LHIpe2xldCBuPUEuY2NhbGwoIml0a193YXNtX291dHB1dF9hcnJheV9hZGRyZXNzIiwibnVtYmVyIixbIm51bWJlciIsIm51bWJlciIsIm51bWJlciJdLFswLGUsdF0pLG89QS5jY2FsbCgiaXRrX3dhc21fb3V0cHV0X2FycmF5X3NpemUiLCJudW1iZXIiLFsibnVtYmVyIiwibnVtYmVyIiwibnVtYmVyIl0sWzAsZSx0XSksaT13dChBLG4sbyk7cmV0dXJuIFAocixpLmJ1ZmZlcil9ZnVuY3Rpb24gY0EoQSxlKXtsZXQgdD1BLmNjYWxsKCJpdGtfd2FzbV9vdXRwdXRfanNvbl9hZGRyZXNzIiwibnVtYmVyIixbIm51bWJlciIsIm51bWJlciJdLFswLGVdKSxyPUEuVVRGOFRvU3RyaW5nKHQpO3JldHVybiBKU09OLnBhcnNlKHIpfWZ1bmN0aW9uIEVuKEEsZSx0LHIpe3IhPW51bGwmJnIubGVuZ3RoPjAmJnIuZm9yRWFjaChmdW5jdGlvbihDLGEpe3N3aXRjaChDLnR5cGUpe2Nhc2UgcC5UZXh0U3RyZWFtOntsZXQgST1tdC5lbmNvZGUoQy5kYXRhLmRhdGEpLEU9eShBLEksYSwwKSxsPXtzaXplOkkuYnVmZmVyLmJ5dGVMZW5ndGgsZGF0YTpgZGF0YTphcHBsaWNhdGlvbi92bmQuaXRrLmFkZHJlc3MsMDoke0V9YH07WShBLGwsYSk7YnJlYWt9Y2FzZSBwLkpzb25Db21wYXRpYmxlOntsZXQgST1tdC5lbmNvZGUoSlNPTi5zdHJpbmdpZnkoQy5kYXRhKSksRT15KEEsSSxhLDApLGw9e3NpemU6SS5idWZmZXIuYnl0ZUxlbmd0aCxkYXRhOmBkYXRhOmFwcGxpY2F0aW9uL3ZuZC5pdGsuYWRkcmVzcywwOiR7RX1gfTtZKEEsbCxhKTticmVha31jYXNlIHAuQmluYXJ5U3RyZWFtOntsZXQgST1DLmRhdGEuZGF0YSxFPXkoQSxJLGEsMCksbD17c2l6ZTpJLmJ1ZmZlci5ieXRlTGVuZ3RoLGRhdGE6YGRhdGE6YXBwbGljYXRpb24vdm5kLml0ay5hZGRyZXNzLDA6JHtFfWB9O1koQSxsLGEpO2JyZWFrfWNhc2UgcC5UZXh0RmlsZTp7QS5mc193cml0ZUZpbGUoQy5kYXRhLnBhdGgsQy5kYXRhLmRhdGEpO2JyZWFrfWNhc2UgcC5CaW5hcnlGaWxlOntBLmZzX3dyaXRlRmlsZShDLmRhdGEucGF0aCxDLmRhdGEuZGF0YSk7YnJlYWt9Y2FzZSBwLkltYWdlOntsZXQgST1DLmRhdGEsRT15KEEsSS5kYXRhLGEsMCksbD15KEEsSS5kaXJlY3Rpb24sYSwxKSxjPXR5cGVvZiBJLm1ldGFkYXRhPy5lbnRyaWVzPCJ1Ij9BcnJheS5mcm9tKEkubWV0YWRhdGEuZW50cmllcygpKTpbXSxmPXtpbWFnZVR5cGU6SS5pbWFnZVR5cGUsbmFtZTpJLm5hbWUsb3JpZ2luOkkub3JpZ2luLHNwYWNpbmc6SS5zcGFjaW5nLGRpcmVjdGlvbjpgZGF0YTphcHBsaWNhdGlvbi92bmQuaXRrLmFkZHJlc3MsMDoke2x9YCxzaXplOkkuc2l6ZSxkYXRhOmBkYXRhOmFwcGxpY2F0aW9uL3ZuZC5pdGsuYWRkcmVzcywwOiR7RX1gLG1ldGFkYXRhOmN9O1koQSxmLGEpO2JyZWFrfWNhc2UgcC5NZXNoOntsZXQgST1DLmRhdGEsRT15KEEsSS5wb2ludHMsYSwwKSxsPXkoQSxJLmNlbGxzLGEsMSksYz15KEEsSS5wb2ludERhdGEsYSwyKSxmPXkoQSxJLmNlbGxEYXRhLGEsMyksdT17bWVzaFR5cGU6SS5tZXNoVHlwZSxuYW1lOkkubmFtZSxudW1iZXJPZlBvaW50czpJLm51bWJlck9mUG9pbnRzLHBvaW50czpgZGF0YTphcHBsaWNhdGlvbi92bmQuaXRrLmFkZHJlc3MsMDoke0V9YCxudW1iZXJPZkNlbGxzOkkubnVtYmVyT2ZDZWxscyxjZWxsczpgZGF0YTphcHBsaWNhdGlvbi92bmQuaXRrLmFkZHJlc3MsMDoke2x9YCxjZWxsQnVmZmVyU2l6ZTpJLmNlbGxCdWZmZXJTaXplLG51bWJlck9mUG9pbnRQaXhlbHM6SS5udW1iZXJPZlBvaW50UGl4ZWxzLHBvaW50RGF0YTpgZGF0YTphcHBsaWNhdGlvbi92bmQuaXRrLmFkZHJlc3MsMDoke2N9YCxudW1iZXJPZkNlbGxQaXhlbHM6SS5udW1iZXJPZkNlbGxQaXhlbHMsY2VsbERhdGE6YGRhdGE6YXBwbGljYXRpb24vdm5kLml0ay5hZGRyZXNzLDA6JHtmfWB9O1koQSx1LGEpO2JyZWFrfWNhc2UgcC5Qb2ludFNldDp7bGV0IEk9Qy5kYXRhLEU9eShBLEkucG9pbnRzLGEsMCksbD15KEEsSS5wb2ludERhdGEsYSwxKSxjPXtwb2ludFNldFR5cGU6SS5wb2ludFNldFR5cGUsbmFtZTpJLm5hbWUsbnVtYmVyT2ZQb2ludHM6SS5udW1iZXJPZlBvaW50cyxwb2ludHM6YGRhdGE6YXBwbGljYXRpb24vdm5kLml0ay5hZGRyZXNzLDA6JHtFfWAsbnVtYmVyT2ZQb2ludFBpeGVsczpJLm51bWJlck9mUG9pbnRQaXhlbHMscG9pbnREYXRhOmBkYXRhOmFwcGxpY2F0aW9uL3ZuZC5pdGsuYWRkcmVzcywwOiR7bH1gfTtZKEEsYyxhKTticmVha31jYXNlIHAuVHJhbnNmb3JtTGlzdDp7bGV0IEk9Qy5kYXRhLEU9W107SS5mb3JFYWNoKChsLGMpPT57bGV0IHU9YGRhdGE6YXBwbGljYXRpb24vdm5kLml0ay5hZGRyZXNzLDA6JHt5KEEsbC5maXhlZFBhcmFtZXRlcnMsYSxjKjIpfWAsUz1gZGF0YTphcHBsaWNhdGlvbi92bmQuaXRrLmFkZHJlc3MsMDoke3koQSxsLnBhcmFtZXRlcnMsYSxjKjIrMSl9YCxkPXt0cmFuc2Zvcm1UeXBlOmwudHJhbnNmb3JtVHlwZSxudW1iZXJPZkZpeGVkUGFyYW1ldGVyczpsLm51bWJlck9mRml4ZWRQYXJhbWV0ZXJzLG51bWJlck9mUGFyYW1ldGVyczpsLm51bWJlck9mUGFyYW1ldGVycyxuYW1lOmwubmFtZSxpbnB1dFNwYWNlTmFtZTpsLmlucHV0U3BhY2VOYW1lLG91dHB1dFNwYWNlTmFtZTpsLm91dHB1dFNwYWNlTmFtZSxwYXJhbWV0ZXJzOlMsZml4ZWRQYXJhbWV0ZXJzOnV9O0UucHVzaChkKX0pLFkoQSxFLGEpO2JyZWFrfWNhc2UgcC5Qb2x5RGF0YTp7bGV0IEk9Qy5kYXRhLEU9eShBLEkucG9pbnRzLGEsMCksbD15KEEsSS52ZXJ0aWNlcyxhLDEpLGM9eShBLEkubGluZXMsYSwyKSxmPXkoQSxJLnBvbHlnb25zLGEsMyksdT15KEEsSS50cmlhbmdsZVN0cmlwcyxhLDQpLG09eShBLEkucG9pbnREYXRhLGEsNSksUz15KEEsSS5wb2ludERhdGEsYSw2KSxkPXtwb2x5RGF0YVR5cGU6SS5wb2x5RGF0YVR5cGUsbmFtZTpJLm5hbWUsbnVtYmVyT2ZQb2ludHM6SS5udW1iZXJPZlBvaW50cyxwb2ludHM6YGRhdGE6YXBwbGljYXRpb24vdm5kLml0ay5hZGRyZXNzLDA6JHtFfWAsdmVydGljZXNCdWZmZXJTaXplOkkudmVydGljZXNCdWZmZXJTaXplLHZlcnRpY2VzOmBkYXRhOmFwcGxpY2F0aW9uL3ZuZC5pdGsuYWRkcmVzcywwOiR7bH1gLGxpbmVzQnVmZmVyU2l6ZTpJLmxpbmVzQnVmZmVyU2l6ZSxsaW5lczpgZGF0YTphcHBsaWNhdGlvbi92bmQuaXRrLmFkZHJlc3MsMDoke2N9YCxwb2x5Z29uc0J1ZmZlclNpemU6SS5wb2x5Z29uc0J1ZmZlclNpemUscG9seWdvbnM6YGRhdGE6YXBwbGljYXRpb24vdm5kLml0ay5hZGRyZXNzLDA6JHtmfWAsdHJpYW5nbGVTdHJpcHNCdWZmZXJTaXplOkkudHJpYW5nbGVTdHJpcHNCdWZmZXJTaXplLHRyaWFuZ2xlU3RyaXBzOmBkYXRhOmFwcGxpY2F0aW9uL3ZuZC5pdGsuYWRkcmVzcywwOiR7dX1gLG51bWJlck9mUG9pbnRQaXhlbHM6SS5udW1iZXJPZlBvaW50UGl4ZWxzLHBvaW50RGF0YTpgZGF0YTphcHBsaWNhdGlvbi92bmQuaXRrLmFkZHJlc3MsMDoke219YCxudW1iZXJPZkNlbGxQaXhlbHM6SS5udW1iZXJPZkNlbGxQaXhlbHMsY2VsbERhdGE6YGRhdGE6YXBwbGljYXRpb24vdm5kLml0ay5hZGRyZXNzLDA6JHtTfWB9O1koQSxkLGEpO2JyZWFrfWRlZmF1bHQ6dGhyb3cgRXJyb3IoIlVuc3VwcG9ydGVkIGlucHV0IEludGVyZmFjZVR5cGUiKX19KSxBLnJlc2V0TW9kdWxlU3Rkb3V0KCksQS5yZXNldE1vZHVsZVN0ZGVycigpO2xldCBuPUEuc3RhY2tTYXZlKCksbz0wO3RyeXtvPUEuY2FsbE1haW4oZS5zbGljZSgpKX1jYXRjaChDKXt0aHJvdyB0eXBlb2YgQz09Im51bWJlciImJihjb25zb2xlLmxvZygiRXhjZXB0aW9uIHdoaWxlIHJ1bm5pbmcgcGlwZWxpbmU6IiksY29uc29sZS5sb2coInN0ZG91dDoiLEEuZ2V0TW9kdWxlU3Rkb3V0KCkpLGNvbnNvbGUuZXJyb3IoInN0ZGVycjoiLEEuZ2V0TW9kdWxlU3RkZXJyKCkpLHR5cGVvZiBBLmdldEV4Y2VwdGlvbk1lc3NhZ2U8InUiP2NvbnNvbGUuZXJyb3IoImV4Y2VwdGlvbjoiLEEuZ2V0RXhjZXB0aW9uTWVzc2FnZShDKSk6Y29uc29sZS5lcnJvcigiQnVpbGQgbW9kdWxlIGluIERlYnVnIG1vZGUgZm9yIGV4Y2VwdGlvbiBtZXNzYWdlIGluZm9ybWF0aW9uLiIpKSxDfWZpbmFsbHl7QS5zdGFja1Jlc3RvcmUobil9bGV0IGk9QS5nZXRNb2R1bGVTdGRvdXQoKSxnPUEuZ2V0TW9kdWxlU3RkZXJyKCksQj1bXTtyZXR1cm4gdCE9bnVsbCYmdC5sZW5ndGg+MCYmbz09PTAmJnQuZm9yRWFjaChmdW5jdGlvbihDLGEpe2xldCBJPW51bGw7c3dpdGNoKEMudHlwZSl7Y2FzZSBwLlRleHRTdHJlYW06e2xldCBsPUEuY2NhbGwoIml0a193YXNtX291dHB1dF9hcnJheV9hZGRyZXNzIiwibnVtYmVyIixbIm51bWJlciIsIm51bWJlciIsIm51bWJlciJdLFswLGEsMF0pLGM9QS5jY2FsbCgiaXRrX3dhc21fb3V0cHV0X2FycmF5X3NpemUiLCJudW1iZXIiLFsibnVtYmVyIiwibnVtYmVyIiwibnVtYmVyIl0sWzAsYSwwXSksZj1uZXcgVWludDhBcnJheShBLkhFQVBVOC5idWZmZXIsbCxjKTtJPXtkYXRhOmh0LmRlY29kZShmKX07YnJlYWt9Y2FzZSBwLkpzb25Db21wYXRpYmxlOntsZXQgbD1BLmNjYWxsKCJpdGtfd2FzbV9vdXRwdXRfYXJyYXlfYWRkcmVzcyIsIm51bWJlciIsWyJudW1iZXIiLCJudW1iZXIiLCJudW1iZXIiXSxbMCxhLDBdKSxjPUEuY2NhbGwoIml0a193YXNtX291dHB1dF9hcnJheV9zaXplIiwibnVtYmVyIixbIm51bWJlciIsIm51bWJlciIsIm51bWJlciJdLFswLGEsMF0pLGY9bmV3IFVpbnQ4QXJyYXkoQS5IRUFQVTguYnVmZmVyLGwsYyk7ST1KU09OLnBhcnNlKGh0LmRlY29kZShmKSk7YnJlYWt9Y2FzZSBwLkJpbmFyeVN0cmVhbTp7bGV0IGw9QS5jY2FsbCgiaXRrX3dhc21fb3V0cHV0X2FycmF5X2FkZHJlc3MiLCJudW1iZXIiLFsibnVtYmVyIiwibnVtYmVyIiwibnVtYmVyIl0sWzAsYSwwXSksYz1BLmNjYWxsKCJpdGtfd2FzbV9vdXRwdXRfYXJyYXlfc2l6ZSIsIm51bWJlciIsWyJudW1iZXIiLCJudW1iZXIiLCJudW1iZXIiXSxbMCxhLDBdKTtJPXtkYXRhOnd0KEEsbCxjKX07YnJlYWt9Y2FzZSBwLlRleHRGaWxlOntJPXtwYXRoOkMuZGF0YS5wYXRoLGRhdGE6QS5mc19yZWFkRmlsZShDLmRhdGEucGF0aCx7ZW5jb2Rpbmc6InV0ZjgifSl9O2JyZWFrfWNhc2UgcC5CaW5hcnlGaWxlOntJPXtwYXRoOkMuZGF0YS5wYXRoLGRhdGE6dW4oQSxDLmRhdGEucGF0aCl9O2JyZWFrfWNhc2UgcC5JbWFnZTp7bGV0IGw9Y0EoQSxhKTtsLmRhdGE9YihBLGEsMCxsLmltYWdlVHlwZS5jb21wb25lbnRUeXBlKSxsLmRpcmVjdGlvbj1iKEEsYSwxLGouRmxvYXQ2NCksbC5tZXRhZGF0YT1uZXcgTWFwKGwubWV0YWRhdGEpLEk9bDticmVha31jYXNlIHAuTWVzaDp7bGV0IGw9Y0EoQSxhKTtsLm51bWJlck9mUG9pbnRzPjA/bC5wb2ludHM9YihBLGEsMCxsLm1lc2hUeXBlLnBvaW50Q29tcG9uZW50VHlwZSk6bC5wb2ludHM9UChsLm1lc2hUeXBlLnBvaW50Q29tcG9uZW50VHlwZSxuZXcgQXJyYXlCdWZmZXIoMCkpLGwubnVtYmVyT2ZDZWxscz4wP2wuY2VsbHM9YihBLGEsMSxsLm1lc2hUeXBlLmNlbGxDb21wb25lbnRUeXBlKTpsLmNlbGxzPVAobC5tZXNoVHlwZS5jZWxsQ29tcG9uZW50VHlwZSxuZXcgQXJyYXlCdWZmZXIoMCkpLGwubnVtYmVyT2ZQb2ludFBpeGVscz4wP2wucG9pbnREYXRhPWIoQSxhLDIsbC5tZXNoVHlwZS5wb2ludFBpeGVsQ29tcG9uZW50VHlwZSk6bC5wb2ludERhdGE9UChsLm1lc2hUeXBlLnBvaW50UGl4ZWxDb21wb25lbnRUeXBlLG5ldyBBcnJheUJ1ZmZlcigwKSksbC5udW1iZXJPZkNlbGxQaXhlbHM+MD9sLmNlbGxEYXRhPWIoQSxhLDMsbC5tZXNoVHlwZS5jZWxsUGl4ZWxDb21wb25lbnRUeXBlKTpsLmNlbGxEYXRhPVAobC5tZXNoVHlwZS5jZWxsUGl4ZWxDb21wb25lbnRUeXBlLG5ldyBBcnJheUJ1ZmZlcigwKSksST1sO2JyZWFrfWNhc2UgcC5Qb2ludFNldDp7bGV0IGw9Y0EoQSxhKTtsLm51bWJlck9mUG9pbnRzPjA/bC5wb2ludHM9YihBLGEsMCxsLnBvaW50U2V0VHlwZS5wb2ludENvbXBvbmVudFR5cGUpOmwucG9pbnRzPVAobC5wb2ludFNldFR5cGUucG9pbnRDb21wb25lbnRUeXBlLG5ldyBBcnJheUJ1ZmZlcigwKSksbC5udW1iZXJPZlBvaW50UGl4ZWxzPjA/bC5wb2ludERhdGE9YihBLGEsMSxsLnBvaW50U2V0VHlwZS5wb2ludFBpeGVsQ29tcG9uZW50VHlwZSk6bC5wb2ludERhdGE9UChsLnBvaW50U2V0VHlwZS5wb2ludFBpeGVsQ29tcG9uZW50VHlwZSxuZXcgQXJyYXlCdWZmZXIoMCkpLEk9bDticmVha31jYXNlIHAuVHJhbnNmb3JtTGlzdDp7bGV0IGw9Y0EoQSxhKTtsLmZvckVhY2goKGMsZik9PntjLm51bWJlck9mRml4ZWRQYXJhbWV0ZXJzPjAmJihsW2ZdLmZpeGVkUGFyYW1ldGVycz1iKEEsYSxmKjIsYy50cmFuc2Zvcm1UeXBlLnBhcmFtZXRlcnNWYWx1ZVR5cGUpKSxjLm51bWJlck9mRml4ZWRQYXJhbWV0ZXJzPjAmJihsW2ZdLnBhcmFtZXRlcnM9YihBLGEsZioyKzEsYy50cmFuc2Zvcm1UeXBlLnBhcmFtZXRlcnNWYWx1ZVR5cGUpKX0pLEk9bDticmVha31jYXNlIHAuUG9seURhdGE6e2xldCBsPWNBKEEsYSk7bC5udW1iZXJPZlBvaW50cz4wP2wucG9pbnRzPWIoQSxhLDAsai5GbG9hdDMyKTpsLnBvaW50cz1uZXcgRmxvYXQzMkFycmF5LGwudmVydGljZXNCdWZmZXJTaXplPjA/bC52ZXJ0aWNlcz1iKEEsYSwxLFIuVUludDMyKTpsLnZlcnRpY2VzPW5ldyBVaW50MzJBcnJheSxsLmxpbmVzQnVmZmVyU2l6ZT4wP2wubGluZXM9YihBLGEsMixSLlVJbnQzMik6bC5saW5lcz1uZXcgVWludDMyQXJyYXksbC5wb2x5Z29uc0J1ZmZlclNpemU+MD9sLnBvbHlnb25zPWIoQSxhLDMsUi5VSW50MzIpOmwucG9seWdvbnM9bmV3IFVpbnQzMkFycmF5LGwudHJpYW5nbGVTdHJpcHNCdWZmZXJTaXplPjA/bC50cmlhbmdsZVN0cmlwcz1iKEEsYSw0LFIuVUludDMyKTpsLnRyaWFuZ2xlU3RyaXBzPW5ldyBVaW50MzJBcnJheSxsLm51bWJlck9mUG9pbnRQaXhlbHM+MD9sLnBvaW50RGF0YT1iKEEsYSw1LGwucG9seURhdGFUeXBlLnBvaW50UGl4ZWxDb21wb25lbnRUeXBlKTpsLnBvaW50RGF0YT1QKGwucG9seURhdGFUeXBlLnBvaW50UGl4ZWxDb21wb25lbnRUeXBlLG5ldyBBcnJheUJ1ZmZlcigwKSksbC5udW1iZXJPZkNlbGxQaXhlbHM+MD9sLmNlbGxEYXRhPWIoQSxhLDYsbC5wb2x5RGF0YVR5cGUuY2VsbFBpeGVsQ29tcG9uZW50VHlwZSk6bC5jZWxsRGF0YT1QKGwucG9seURhdGFUeXBlLmNlbGxQaXhlbENvbXBvbmVudFR5cGUsbmV3IEFycmF5QnVmZmVyKDApKSxJPWw7YnJlYWt9ZGVmYXVsdDp0aHJvdyBFcnJvcigiVW5zdXBwb3J0ZWQgb3V0cHV0IEludGVyZmFjZVR5cGUiKX1sZXQgRT17dHlwZTpDLnR5cGUsZGF0YTpJfTtCLnB1c2goRSl9KSx7cmV0dXJuVmFsdWU6byxzdGRvdXQ6aSxzdGRlcnI6ZyxvdXRwdXRzOkJ9fXZhciBEdD1Fbjt2YXIgZm49dHlwZW9mIGdsb2JhbFRoaXMuU2hhcmVkQXJyYXlCdWZmZXI8InUiO2Z1bmN0aW9uIFFuKEEsZSl7aWYoQT09bnVsbClyZXR1cm5bXTtsZXQgdD1bXTtmb3IobGV0IHI9MDtyPEEubGVuZ3RoO3IrKyl7bGV0IG49cG4oQVtyXSxlKTtuIT09bnVsbCYmdC5wdXNoKG4pfXJldHVybiB0fWZ1bmN0aW9uIHBuKEEsZSl7aWYoQT09bnVsbClyZXR1cm4gbnVsbDtsZXQgdD1udWxsO3JldHVybiBBLmJ1ZmZlciE9PXZvaWQgMD90PUEuYnVmZmVyOkEuYnl0ZUxlbmd0aCE9PXZvaWQgMCYmKHQ9QSksZm4mJnQgaW5zdGFuY2VvZiBTaGFyZWRBcnJheUJ1ZmZlcj9udWxsOmU/dDp0LnNsaWNlKDApfXZhciBTdD1RbjtmdW5jdGlvbiBkbihBKXtyZXR1cm5bQS5kYXRhLEEuZGlyZWN0aW9uXX12YXIgYnQ9ZG47ZnVuY3Rpb24gbW4oQSl7cmV0dXJuW0EucG9pbnRzLEEucG9pbnREYXRhLEEuY2VsbHMsQS5jZWxsRGF0YV19dmFyIFJ0PW1uO2Z1bmN0aW9uIGhuKEEpe3JldHVybltBLnBvaW50cyxBLnZlcnRpY2VzLEEubGluZXMsQS5wb2x5Z29ucyxBLnRyaWFuZ2xlU3RyaXBzLEEucG9pbnREYXRhLEEuY2VsbERhdGFdfXZhciBrdD1objt2YXIgeW47ZnVuY3Rpb24gUEEoKXtyZXR1cm4geW59dmFyIHduO2Z1bmN0aW9uIEZ0KCl7cmV0dXJuIHdufXZhciBEbjtmdW5jdGlvbiB4QSgpe3JldHVybiBEbn12YXIgcGU9bmV3IE1hcDtmdW5jdGlvbiBTbigpe2xldCBBPXhBKCk7cmV0dXJuIHR5cGVvZiBBPiJ1IiYmKEE9bnVsbCksQX1mdW5jdGlvbiBVdCgpe2xldCBBPVBBKCk7cmV0dXJuIHR5cGVvZiBBPiJ1IiYmKEE9bmV3IFVSTCgiL3BpcGVsaW5lcyIsZG9jdW1lbnQubG9jYXRpb24ub3JpZ2luKS5ocmVmKSxBfWZ1bmN0aW9uIEpBKCl7bGV0IEE9RnQoKTtyZXR1cm4gdHlwZW9mIEE+InUiJiYoQT17fSksQX1hc3luYyBmdW5jdGlvbiBibihBLGUsdCl7bGV0IHI9QSxuPUE7aWYodHlwZW9mIEEhPSJzdHJpbmciJiYocj1uZXcgVVJMKEEuaHJlZiksbj1yLmhyZWYpLHBlLmhhcyhuKSlyZXR1cm4gcGUuZ2V0KG4pO3tsZXQgbz1hd2FpdCBwdChBLGU/LnRvU3RyaW5nKCk/P1V0KCksdD8/SkEoKSk7cmV0dXJuIHBlLnNldChuLG8pLG99fWFzeW5jIGZ1bmN0aW9uIFJuKEEsZSx0LHIsbil7aWYoIWF3YWl0IGR0KCkpe2xldCB1PSJXZWJBc3NlbWJseSBTSU1EIHN1cHBvcnQgaXMgcmVxdWlyZWQgLS0gcGxlYXNlIHVwZGF0ZSB5b3VyIGJyb3dzZXIuIjt0aHJvdyBhbGVydCh1KSxuZXcgRXJyb3IodSl9bGV0IG89bj8ud2ViV29ya2VyPz9udWxsO2lmKG89PT0hMSl7bGV0IHU9YXdhaXQgYm4oQS50b1N0cmluZygpLG4/LnBpcGVsaW5lQmFzZVVybCxuPy5waXBlbGluZVF1ZXJ5UGFyYW1zPz9KQSgpKTtyZXR1cm4gRHQodSxlLHQscil9bGV0IGk9byxnPW4/LnBpcGVsaW5lV29ya2VyVXJsPz9TbigpLEI9dHlwZW9mIGchPSJzdHJpbmciJiZ0eXBlb2YgZz8uaHJlZjwidSI/Zy5ocmVmOmcse3dvcmtlclByb3h5OkMsd29ya2VyOmF9PWF3YWl0IFF0KGksQixuPy5waXBlbGluZVF1ZXJ5UGFyYW1zPz9KQSgpKTtpPWE7bGV0IEk9W107ciE9bnVsbCYmci5sZW5ndGg+MCYmci5mb3JFYWNoKGZ1bmN0aW9uKHUpe2lmKHUudHlwZT09PXAuQmluYXJ5U3RyZWFtKXtsZXQgbT11LmRhdGEuZGF0YTtJLnB1c2gobSl9ZWxzZSBpZih1LnR5cGU9PT1wLkJpbmFyeUZpbGUpe2xldCBtPXUuZGF0YS5kYXRhO0kucHVzaChtKX1lbHNlIGlmKHUudHlwZT09PXAuSW1hZ2Upe2xldCBtPXUuZGF0YTttLmRhdGEhPT1udWxsJiZJLnB1c2goLi4uYnQobSkpfWVsc2UgaWYodS50eXBlPT09cC5NZXNoKXtsZXQgbT11LmRhdGE7SS5wdXNoKC4uLlJ0KG0pKX1lbHNlIGlmKHUudHlwZT09PXAuUG9seURhdGEpe2xldCBtPXUuZGF0YTtJLnB1c2goLi4ua3QobSkpfX0pO2xldCBFPW4/LnBpcGVsaW5lQmFzZVVybD8/VXQoKSxsPXR5cGVvZiBFIT0ic3RyaW5nIiYmdHlwZW9mIEU/LmhyZWY8InUiP0UuaHJlZjpFLGM9ciE9bnVsbD92QShyLFN0KEksbj8ubm9Db3B5KSk6bnVsbCxmPWF3YWl0IEMucnVuUGlwZWxpbmUoQS50b1N0cmluZygpLGwsZSx0LGMsbj8ucGlwZWxpbmVRdWVyeVBhcmFtcz8/SkEoKSk7cmV0dXJue3JldHVyblZhbHVlOmYucmV0dXJuVmFsdWUsc3Rkb3V0OmYuc3Rkb3V0LHN0ZGVycjpmLnN0ZGVycixvdXRwdXRzOmYub3V0cHV0cyx3ZWJXb3JrZXI6aX19dmFyIEc9Um47dmFyIGtuPW51bGw7ZnVuY3Rpb24gTnQoKXtyZXR1cm4ga259dmFyIGRlLEZuPWBodHRwczovL2Nkbi5qc2RlbGl2ci5uZXQvbnBtL0BpdGstd2FzbS9kb3duc2FtcGxlQCR7TUF9L2Rpc3QvcGlwZWxpbmVzYDtmdW5jdGlvbiBzSShBKXtkZT1BfWZ1bmN0aW9uIEooKXtpZih0eXBlb2YgZGU8InUiKXJldHVybiBkZTtsZXQgQT1QQSgpO3JldHVybiB0eXBlb2YgQTwidSI/QTpGbn12YXIgbWUsVW49bnVsbDtmdW5jdGlvbiBMdChBKXttZT1BfWZ1bmN0aW9uIEYoKXtpZih0eXBlb2YgbWU8InUiKXJldHVybiBtZTtsZXQgQT14QSgpO3JldHVybiB0eXBlb2YgQTwidSI/QTpVbn12YXIgdEE9bnVsbDthc3luYyBmdW5jdGlvbiBHdCgpe2xldCBBPUYoKSxlPXR5cGVvZiBBIT0ic3RyaW5nIiYmdHlwZW9mIEE/LmhyZWY8InUiP0EuaHJlZjpBO3RBPWF3YWl0IEJBKGUpfWZ1bmN0aW9uIHVJKEEpe3RBPUF9YXN5bmMgZnVuY3Rpb24gSCgpe2lmKHRBIT09bnVsbClyZXR1cm4gdEEudGVybWluYXRlZCYmYXdhaXQgR3QoKSx0QTtsZXQgQT1OdCgpO3JldHVybiBBIT09bnVsbD9BOihhd2FpdCBHdCgpLHRBKX1hc3luYyBmdW5jdGlvbiBObihBLGU9e3Nocmlua0ZhY3RvcnM6WzIsMl19KXtsZXQgdD1be3R5cGU6cC5JbWFnZX1dLHI9W3t0eXBlOnAuSW1hZ2UsZGF0YTpBfV0sbj1bXTtpZihuLnB1c2goIjAiKSxuLnB1c2goIjAiKSxuLnB1c2goIi0tbWVtb3J5LWlvIiksZS5zaHJpbmtGYWN0b3JzKXtpZihlLnNocmlua0ZhY3RvcnMubGVuZ3RoPDIpdGhyb3cgbmV3IEVycm9yKCcic2hyaW5rLWZhY3RvcnMiIG9wdGlvbiBtdXN0IGhhdmUgYSBsZW5ndGggPiAyJyk7bi5wdXNoKCItLXNocmluay1mYWN0b3JzIiksYXdhaXQgUHJvbWlzZS5hbGwoZS5zaHJpbmtGYWN0b3JzLm1hcChhc3luYyBjPT57bi5wdXNoKGMudG9TdHJpbmcoKSl9KSl9ZS5pbmZvcm1hdGlvbk9ubHkmJmUuaW5mb3JtYXRpb25Pbmx5JiZuLnB1c2goIi0taW5mb3JtYXRpb24tb25seSIpO2xldCBnPSJkb3duc2FtcGxlLWJpbi1zaHJpbmsiLEI9ZT8ud2ViV29ya2VyO0I9PT12b2lkIDAmJihCPWF3YWl0IEgoKSk7bGV0e3dlYldvcmtlcjpDLHJldHVyblZhbHVlOmEsc3RkZXJyOkksb3V0cHV0czpFfT1hd2FpdCBHKGcsbix0LHIse3BpcGVsaW5lQmFzZVVybDpKKCkscGlwZWxpbmVXb3JrZXJVcmw6RigpLHdlYldvcmtlcjpCLG5vQ29weTplPy5ub0NvcHl9KTtpZihhIT09MCYmSSE9PSIiKXRocm93IG5ldyBFcnJvcihJKTtyZXR1cm57d2ViV29ya2VyOkMsZG93bnNhbXBsZWQ6RVswXT8uZGF0YX19dmFyIExuPU5uO2FzeW5jIGZ1bmN0aW9uIEduKEEsZT17c2hyaW5rRmFjdG9yczpbMiwyXX0pe2xldCB0PVt7dHlwZTpwLkltYWdlfV0scj1be3R5cGU6cC5JbWFnZSxkYXRhOkF9XSxuPVtdO2lmKG4ucHVzaCgiMCIpLG4ucHVzaCgiMCIpLG4ucHVzaCgiLS1tZW1vcnktaW8iKSxlLnNocmlua0ZhY3RvcnMpe2lmKGUuc2hyaW5rRmFjdG9ycy5sZW5ndGg8Mil0aHJvdyBuZXcgRXJyb3IoJyJzaHJpbmstZmFjdG9ycyIgb3B0aW9uIG11c3QgaGF2ZSBhIGxlbmd0aCA+IDInKTtuLnB1c2goIi0tc2hyaW5rLWZhY3RvcnMiKSxhd2FpdCBQcm9taXNlLmFsbChlLnNocmlua0ZhY3RvcnMubWFwKGFzeW5jIGM9PntuLnB1c2goYy50b1N0cmluZygpKX0pKX1pZihlLmNyb3BSYWRpdXMpe2lmKGUuY3JvcFJhZGl1cy5sZW5ndGg8Mil0aHJvdyBuZXcgRXJyb3IoJyJjcm9wLXJhZGl1cyIgb3B0aW9uIG11c3QgaGF2ZSBhIGxlbmd0aCA+IDInKTtuLnB1c2goIi0tY3JvcC1yYWRpdXMiKSxhd2FpdCBQcm9taXNlLmFsbChlLmNyb3BSYWRpdXMubWFwKGFzeW5jIGM9PntuLnB1c2goYy50b1N0cmluZygpKX0pKX1sZXQgZz0iZG93bnNhbXBsZS1sYWJlbC1pbWFnZSIsQj1lPy53ZWJXb3JrZXI7Qj09PXZvaWQgMCYmKEI9YXdhaXQgSCgpKTtsZXR7d2ViV29ya2VyOkMscmV0dXJuVmFsdWU6YSxzdGRlcnI6SSxvdXRwdXRzOkV9PWF3YWl0IEcoZyxuLHQscix7cGlwZWxpbmVCYXNlVXJsOkooKSxwaXBlbGluZVdvcmtlclVybDpGKCksd2ViV29ya2VyOkIsbm9Db3B5OmU/Lm5vQ29weX0pO2lmKGEhPT0wJiZJIT09IiIpdGhyb3cgbmV3IEVycm9yKEkpO3JldHVybnt3ZWJXb3JrZXI6Qyxkb3duc2FtcGxlZDpFWzBdPy5kYXRhfX12YXIgVG49R247YXN5bmMgZnVuY3Rpb24gT24oQT17c2hyaW5rRmFjdG9yczpbMiwyXX0pe2xldCBlPVt7dHlwZTpwLkpzb25Db21wYXRpYmxlfV0sdD1bXSxyPVtdO2lmKHIucHVzaCgiMCIpLHIucHVzaCgiLS1tZW1vcnktaW8iKSx0eXBlb2YgQS5zaHJpbmtGYWN0b3JzPCJ1Iil7aWYoQS5zaHJpbmtGYWN0b3JzLmxlbmd0aDwxKXRocm93IG5ldyBFcnJvcignInNocmluay1mYWN0b3JzIiBvcHRpb24gbXVzdCBoYXZlIGEgbGVuZ3RoID4gMScpO3IucHVzaCgiLS1zaHJpbmstZmFjdG9ycyIpLGF3YWl0IFByb21pc2UuYWxsKEEuc2hyaW5rRmFjdG9ycy5tYXAoYXN5bmMgRT0+e3IucHVzaChFLnRvU3RyaW5nKCkpfSkpfWxldCBvPSJkb3duc2FtcGxlLXNpZ21hIixpPUE/LndlYldvcmtlcjtpPT09dm9pZCAwJiYoaT1hd2FpdCBIKCkpO2xldHt3ZWJXb3JrZXI6ZyxyZXR1cm5WYWx1ZTpCLHN0ZGVycjpDLG91dHB1dHM6YX09YXdhaXQgRyhvLHIsZSx0LHtwaXBlbGluZUJhc2VVcmw6SigpLHBpcGVsaW5lV29ya2VyVXJsOkYoKSx3ZWJXb3JrZXI6aSxub0NvcHk6QT8ubm9Db3B5fSk7aWYoQiE9PTAmJkMhPT0iIil0aHJvdyBuZXcgRXJyb3IoQyk7cmV0dXJue3dlYldvcmtlcjpnLHNpZ21hOmFbMF0/LmRhdGF9fXZhciBQbj1Pbjthc3luYyBmdW5jdGlvbiB4bihBLGU9e3Nocmlua0ZhY3RvcnM6WzIsMl19KXtsZXQgdD1be3R5cGU6cC5JbWFnZX1dLHI9W3t0eXBlOnAuSW1hZ2UsZGF0YTpBfV0sbj1bXTtpZihuLnB1c2goIjAiKSxuLnB1c2goIjAiKSxuLnB1c2goIi0tbWVtb3J5LWlvIiksZS5zaHJpbmtGYWN0b3JzKXtpZihlLnNocmlua0ZhY3RvcnMubGVuZ3RoPDIpdGhyb3cgbmV3IEVycm9yKCcic2hyaW5rLWZhY3RvcnMiIG9wdGlvbiBtdXN0IGhhdmUgYSBsZW5ndGggPiAyJyk7bi5wdXNoKCItLXNocmluay1mYWN0b3JzIiksYXdhaXQgUHJvbWlzZS5hbGwoZS5zaHJpbmtGYWN0b3JzLm1hcChhc3luYyBjPT57bi5wdXNoKGMudG9TdHJpbmcoKSl9KSl9aWYoZS5jcm9wUmFkaXVzKXtpZihlLmNyb3BSYWRpdXMubGVuZ3RoPDIpdGhyb3cgbmV3IEVycm9yKCciY3JvcC1yYWRpdXMiIG9wdGlvbiBtdXN0IGhhdmUgYSBsZW5ndGggPiAyJyk7bi5wdXNoKCItLWNyb3AtcmFkaXVzIiksYXdhaXQgUHJvbWlzZS5hbGwoZS5jcm9wUmFkaXVzLm1hcChhc3luYyBjPT57bi5wdXNoKGMudG9TdHJpbmcoKSl9KSl9bGV0IGc9ImRvd25zYW1wbGUiLEI9ZT8ud2ViV29ya2VyO0I9PT12b2lkIDAmJihCPWF3YWl0IEgoKSk7bGV0e3dlYldvcmtlcjpDLHJldHVyblZhbHVlOmEsc3RkZXJyOkksb3V0cHV0czpFfT1hd2FpdCBHKGcsbix0LHIse3BpcGVsaW5lQmFzZVVybDpKKCkscGlwZWxpbmVXb3JrZXJVcmw6RigpLHdlYldvcmtlcjpCLG5vQ29weTplPy5ub0NvcHl9KTtpZihhIT09MCYmSSE9PSIiKXRocm93IG5ldyBFcnJvcihJKTtyZXR1cm57d2ViV29ya2VyOkMsZG93bnNhbXBsZWQ6RVswXT8uZGF0YX19dmFyIEpuPXhuO2FzeW5jIGZ1bmN0aW9uIEhuKEE9e3NpemU6WzEsMV0sc2lnbWE6WzEsMV19KXtsZXQgZT1be3R5cGU6cC5Kc29uQ29tcGF0aWJsZX1dLHQ9W10scj1bXTtpZihyLnB1c2goIjAiKSxyLnB1c2goIi0tbWVtb3J5LWlvIiksdHlwZW9mIEEuc2l6ZTwidSIpe2lmKEEuc2l6ZS5sZW5ndGg8MSl0aHJvdyBuZXcgRXJyb3IoJyJzaXplIiBvcHRpb24gbXVzdCBoYXZlIGEgbGVuZ3RoID4gMScpO3IucHVzaCgiLS1zaXplIiksYXdhaXQgUHJvbWlzZS5hbGwoQS5zaXplLm1hcChhc3luYyBFPT57ci5wdXNoKEUudG9TdHJpbmcoKSl9KSl9aWYodHlwZW9mIEEuc2lnbWE8InUiKXtpZihBLnNpZ21hLmxlbmd0aDwxKXRocm93IG5ldyBFcnJvcignInNpZ21hIiBvcHRpb24gbXVzdCBoYXZlIGEgbGVuZ3RoID4gMScpO3IucHVzaCgiLS1zaWdtYSIpLGF3YWl0IFByb21pc2UuYWxsKEEuc2lnbWEubWFwKGFzeW5jIEU9PntyLnB1c2goRS50b1N0cmluZygpKX0pKX10eXBlb2YgQS5tYXhLZXJuZWxXaWR0aDwidSImJnIucHVzaCgiLS1tYXgta2VybmVsLXdpZHRoIixBLm1heEtlcm5lbFdpZHRoLnRvU3RyaW5nKCkpLHR5cGVvZiBBLm1heEtlcm5lbEVycm9yPCJ1IiYmci5wdXNoKCItLW1heC1rZXJuZWwtZXJyb3IiLEEubWF4S2VybmVsRXJyb3IudG9TdHJpbmcoKSk7bGV0IG89ImdhdXNzaWFuLWtlcm5lbC1yYWRpdXMiLGk9QT8ud2ViV29ya2VyO2k9PT12b2lkIDAmJihpPWF3YWl0IEgoKSk7bGV0e3dlYldvcmtlcjpnLHJldHVyblZhbHVlOkIsc3RkZXJyOkMsb3V0cHV0czphfT1hd2FpdCBHKG8scixlLHQse3BpcGVsaW5lQmFzZVVybDpKKCkscGlwZWxpbmVXb3JrZXJVcmw6RigpLHdlYldvcmtlcjppLG5vQ29weTpBPy5ub0NvcHl9KTtpZihCIT09MCYmQyE9PSIiKXRocm93IG5ldyBFcnJvcihDKTtyZXR1cm57d2ViV29ya2VyOmcscmFkaXVzOmFbMF0/LmRhdGF9fXZhciBNbj1Ibjt2YXIgVHQ9J2RhdGE6dGV4dC9qYXZhc2NyaXB0O2NoYXJzZXQ9dXRmLTgsdmFyIG1lPU9iamVjdC5kZWZpbmVQcm9wZXJ0eTt2YXIgd2U9KEEsdCk9Pntmb3IodmFyIGUgaW4gdCltZShBLGUse2dldDp0W2VdLGVudW1lcmFibGU6ITB9KX07dmFyIGZ0PVN5bWJvbCgiQ29tbGluay5wcm94eSIpLHBlPVN5bWJvbCgiQ29tbGluay5lbmRwb2ludCIpLFNlPVN5bWJvbCgiQ29tbGluay5yZWxlYXNlUHJveHkiKSxZQT1TeW1ib2woIkNvbWxpbmsuZmluYWxpemVyIiksYUE9U3ltYm9sKCJDb21saW5rLnRocm93biIpLGx0PUE9PnR5cGVvZiBBPT0ib2JqZWN0IiYmQSE9PW51bGx8fHR5cGVvZiBBPT0iZnVuY3Rpb24iLEZlPXtjYW5IYW5kbGU6QT0+bHQoQSkmJkFbZnRdLHNlcmlhbGl6ZShBKXtsZXR7cG9ydDE6dCxwb3J0MjplfT1uZXcgTWVzc2FnZUNoYW5uZWw7cmV0dXJuIGZBKEEsdCksW2UsW2VdXX0sZGVzZXJpYWxpemUoQSl7cmV0dXJuIEEuc3RhcnQoKSxHZShBKX19LFJlPXtjYW5IYW5kbGU6QT0+bHQoQSkmJmFBIGluIEEsc2VyaWFsaXplKHt2YWx1ZTpBfSl7bGV0IHQ7cmV0dXJuIEEgaW5zdGFuY2VvZiBFcnJvcj90PXtpc0Vycm9yOiEwLHZhbHVlOnttZXNzYWdlOkEubWVzc2FnZSxuYW1lOkEubmFtZSxzdGFjazpBLnN0YWNrfX06dD17aXNFcnJvcjohMSx2YWx1ZTpBfSxbdCxbXV19LGRlc2VyaWFsaXplKEEpe3Rocm93IEEuaXNFcnJvcj9PYmplY3QuYXNzaWduKG5ldyBFcnJvcihBLnZhbHVlLm1lc3NhZ2UpLEEudmFsdWUpOkEudmFsdWV9fSx1dD1uZXcgTWFwKFtbInByb3h5IixGZV0sWyJ0aHJvdyIsUmVdXSk7ZnVuY3Rpb24gTmUoQSx0KXtmb3IobGV0IGUgb2YgQSlpZih0PT09ZXx8ZT09PSIqInx8ZSBpbnN0YW5jZW9mIFJlZ0V4cCYmZS50ZXN0KHQpKXJldHVybiEwO3JldHVybiExfWZ1bmN0aW9uIGZBKEEsdD1nbG9iYWxUaGlzLGU9WyIqIl0pe3QuYWRkRXZlbnRMaXN0ZW5lcigibWVzc2FnZSIsZnVuY3Rpb24gSShyKXtpZighcnx8IXIuZGF0YSlyZXR1cm47aWYoIU5lKGUsci5vcmlnaW4pKXtjb25zb2xlLndhcm4oYEludmFsaWQgb3JpZ2luIFwnJHtyLm9yaWdpbn1cJyBmb3IgY29tbGluayBwcm94eWApO3JldHVybn1sZXR7aWQ6byx0eXBlOmcscGF0aDpDfT1PYmplY3QuYXNzaWduKHtwYXRoOltdfSxyLmRhdGEpLFE9KHIuZGF0YS5hcmd1bWVudExpc3R8fFtdKS5tYXAoTyksYTt0cnl7bGV0IG49Qy5zbGljZSgwLC0xKS5yZWR1Y2UoKGYsQik9PmZbQl0sQSkscz1DLnJlZHVjZSgoZixCKT0+ZltCXSxBKTtzd2l0Y2goZyl7Y2FzZSJHRVQiOmE9czticmVhaztjYXNlIlNFVCI6bltDLnNsaWNlKC0xKVswXV09TyhyLmRhdGEudmFsdWUpLGE9ITA7YnJlYWs7Y2FzZSJBUFBMWSI6YT1zLmFwcGx5KG4sUSk7YnJlYWs7Y2FzZSJDT05TVFJVQ1QiOntsZXQgZj1uZXcgcyguLi5RKTthPWJlKGYpfWJyZWFrO2Nhc2UiRU5EUE9JTlQiOntsZXR7cG9ydDE6Zixwb3J0MjpCfT1uZXcgTWVzc2FnZUNoYW5uZWw7ZkEoQSxCKSxhPU1BKGYsW2ZdKX1icmVhaztjYXNlIlJFTEVBU0UiOmE9dm9pZCAwO2JyZWFrO2RlZmF1bHQ6cmV0dXJufX1jYXRjaChuKXthPXt2YWx1ZTpuLFthQV06MH19UHJvbWlzZS5yZXNvbHZlKGEpLmNhdGNoKG49Pih7dmFsdWU6bixbYUFdOjB9KSkudGhlbihuPT57bGV0W3MsZl09Y0Eobik7dC5wb3N0TWVzc2FnZShPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30scykse2lkOm99KSxmKSxnPT09IlJFTEVBU0UiJiYodC5yZW1vdmVFdmVudExpc3RlbmVyKCJtZXNzYWdlIixJKSxEdCh0KSxZQSBpbiBBJiZ0eXBlb2YgQVtZQV09PSJmdW5jdGlvbiImJkFbWUFdKCkpfSkuY2F0Y2gobj0+e2xldFtzLGZdPWNBKHt2YWx1ZTpuZXcgVHlwZUVycm9yKCJVbnNlcmlhbGl6YWJsZSByZXR1cm4gdmFsdWUiKSxbYUFdOjB9KTt0LnBvc3RNZXNzYWdlKE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSxzKSx7aWQ6b30pLGYpfSl9KSx0LnN0YXJ0JiZ0LnN0YXJ0KCl9ZnVuY3Rpb24gVWUoQSl7cmV0dXJuIEEuY29uc3RydWN0b3IubmFtZT09PSJNZXNzYWdlUG9ydCJ9ZnVuY3Rpb24gRHQoQSl7VWUoQSkmJkEuY2xvc2UoKX1mdW5jdGlvbiBHZShBLHQpe3JldHVybiBxQShBLFtdLHQpfWZ1bmN0aW9uIEJBKEEpe2lmKEEpdGhyb3cgbmV3IEVycm9yKCJQcm94eSBoYXMgYmVlbiByZWxlYXNlZCBhbmQgaXMgbm90IHVzZWFibGUiKX1mdW5jdGlvbiBodChBKXtyZXR1cm4gUChBLHt0eXBlOiJSRUxFQVNFIn0pLnRoZW4oKCk9PntEdChBKX0pfXZhciBRQT1uZXcgV2Vha01hcCxFQT0iRmluYWxpemF0aW9uUmVnaXN0cnkiaW4gZ2xvYmFsVGhpcyYmbmV3IEZpbmFsaXphdGlvblJlZ2lzdHJ5KEE9PntsZXQgdD0oUUEuZ2V0KEEpfHwwKS0xO1FBLnNldChBLHQpLHQ9PT0wJiZodChBKX0pO2Z1bmN0aW9uIGtlKEEsdCl7bGV0IGU9KFFBLmdldCh0KXx8MCkrMTtRQS5zZXQodCxlKSxFQSYmRUEucmVnaXN0ZXIoQSx0LEEpfWZ1bmN0aW9uIExlKEEpe0VBJiZFQS51bnJlZ2lzdGVyKEEpfWZ1bmN0aW9uIHFBKEEsdD1bXSxlPWZ1bmN0aW9uKCl7fSl7bGV0IEk9ITEscj1uZXcgUHJveHkoZSx7Z2V0KG8sZyl7aWYoQkEoSSksZz09PVNlKXJldHVybigpPT57TGUociksaHQoQSksST0hMH07aWYoZz09PSJ0aGVuIil7aWYodC5sZW5ndGg9PT0wKXJldHVybnt0aGVuOigpPT5yfTtsZXQgQz1QKEEse3R5cGU6IkdFVCIscGF0aDp0Lm1hcChRPT5RLnRvU3RyaW5nKCkpfSkudGhlbihPKTtyZXR1cm4gQy50aGVuLmJpbmQoQyl9cmV0dXJuIHFBKEEsWy4uLnQsZ10pfSxzZXQobyxnLEMpe0JBKEkpO2xldFtRLGFdPWNBKEMpO3JldHVybiBQKEEse3R5cGU6IlNFVCIscGF0aDpbLi4udCxnXS5tYXAobj0+bi50b1N0cmluZygpKSx2YWx1ZTpRfSxhKS50aGVuKE8pfSxhcHBseShvLGcsQyl7QkEoSSk7bGV0IFE9dFt0Lmxlbmd0aC0xXTtpZihRPT09cGUpcmV0dXJuIFAoQSx7dHlwZToiRU5EUE9JTlQifSkudGhlbihPKTtpZihRPT09ImJpbmQiKXJldHVybiBxQShBLHQuc2xpY2UoMCwtMSkpO2xldFthLG5dPWN0KEMpO3JldHVybiBQKEEse3R5cGU6IkFQUExZIixwYXRoOnQubWFwKHM9PnMudG9TdHJpbmcoKSksYXJndW1lbnRMaXN0OmF9LG4pLnRoZW4oTyl9LGNvbnN0cnVjdChvLGcpe0JBKEkpO2xldFtDLFFdPWN0KGcpO3JldHVybiBQKEEse3R5cGU6IkNPTlNUUlVDVCIscGF0aDp0Lm1hcChhPT5hLnRvU3RyaW5nKCkpLGFyZ3VtZW50TGlzdDpDfSxRKS50aGVuKE8pfX0pO3JldHVybiBrZShyLEEpLHJ9ZnVuY3Rpb24gSmUoQSl7cmV0dXJuIEFycmF5LnByb3RvdHlwZS5jb25jYXQuYXBwbHkoW10sQSl9ZnVuY3Rpb24gY3QoQSl7bGV0IHQ9QS5tYXAoY0EpO3JldHVyblt0Lm1hcChlPT5lWzBdKSxKZSh0Lm1hcChlPT5lWzFdKSldfXZhciBkdD1uZXcgV2Vha01hcDtmdW5jdGlvbiBNQShBLHQpe3JldHVybiBkdC5zZXQoQSx0KSxBfWZ1bmN0aW9uIGJlKEEpe3JldHVybiBPYmplY3QuYXNzaWduKEEse1tmdF06ITB9KX1mdW5jdGlvbiBjQShBKXtmb3IobGV0W3QsZV1vZiB1dClpZihlLmNhbkhhbmRsZShBKSl7bGV0W0kscl09ZS5zZXJpYWxpemUoQSk7cmV0dXJuW3t0eXBlOiJIQU5ETEVSIixuYW1lOnQsdmFsdWU6SX0scl19cmV0dXJuW3t0eXBlOiJSQVciLHZhbHVlOkF9LGR0LmdldChBKXx8W11dfWZ1bmN0aW9uIE8oQSl7c3dpdGNoKEEudHlwZSl7Y2FzZSJIQU5ETEVSIjpyZXR1cm4gdXQuZ2V0KEEubmFtZSkuZGVzZXJpYWxpemUoQS52YWx1ZSk7Y2FzZSJSQVciOnJldHVybiBBLnZhbHVlfX1mdW5jdGlvbiBQKEEsdCxlKXtyZXR1cm4gbmV3IFByb21pc2UoST0+e2xldCByPUhlKCk7QS5hZGRFdmVudExpc3RlbmVyKCJtZXNzYWdlIixmdW5jdGlvbiBvKGcpeyFnLmRhdGF8fCFnLmRhdGEuaWR8fGcuZGF0YS5pZCE9PXJ8fChBLnJlbW92ZUV2ZW50TGlzdGVuZXIoIm1lc3NhZ2UiLG8pLEkoZy5kYXRhKSl9KSxBLnN0YXJ0JiZBLnN0YXJ0KCksQS5wb3N0TWVzc2FnZShPYmplY3QuYXNzaWduKHtpZDpyfSx0KSxlKX0pfWZ1bmN0aW9uIEhlKCl7cmV0dXJuIG5ldyBBcnJheSg0KS5maWxsKDApLm1hcCgoKT0+TWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpKk51bWJlci5NQVhfU0FGRV9JTlRFR0VSKS50b1N0cmluZygxNikpLmpvaW4oIi0iKX1mdW5jdGlvbiB2KEEsdCl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIEEuYXBwbHkodCxhcmd1bWVudHMpfX12YXJ7dG9TdHJpbmc6WWV9PU9iamVjdC5wcm90b3R5cGUse2dldFByb3RvdHlwZU9mOk9BfT1PYmplY3QsdUE9KEE9PnQ9PntsZXQgZT1ZZS5jYWxsKHQpO3JldHVybiBBW2VdfHwoQVtlXT1lLnNsaWNlKDgsLTEpLnRvTG93ZXJDYXNlKCkpfSkoT2JqZWN0LmNyZWF0ZShudWxsKSksRz1BPT4oQT1BLnRvTG93ZXJDYXNlKCksdD0+dUEodCk9PT1BKSxEQT1BPT50PT50eXBlb2YgdD09PUEse2lzQXJyYXk6an09QXJyYXksJD1EQSgidW5kZWZpbmVkIik7ZnVuY3Rpb24gcWUoQSl7cmV0dXJuIEEhPT1udWxsJiYhJChBKSYmQS5jb25zdHJ1Y3RvciE9PW51bGwmJiEkKEEuY29uc3RydWN0b3IpJiZOKEEuY29uc3RydWN0b3IuaXNCdWZmZXIpJiZBLmNvbnN0cnVjdG9yLmlzQnVmZmVyKEEpfXZhciBwdD1HKCJBcnJheUJ1ZmZlciIpO2Z1bmN0aW9uIE1lKEEpe2xldCB0O3JldHVybiB0eXBlb2YgQXJyYXlCdWZmZXI8InUiJiZBcnJheUJ1ZmZlci5pc1ZpZXc/dD1BcnJheUJ1ZmZlci5pc1ZpZXcoQSk6dD1BJiZBLmJ1ZmZlciYmcHQoQS5idWZmZXIpLHR9dmFyIFRlPURBKCJzdHJpbmciKSxOPURBKCJmdW5jdGlvbiIpLFN0PURBKCJudW1iZXIiKSxoQT1BPT5BIT09bnVsbCYmdHlwZW9mIEE9PSJvYmplY3QiLEtlPUE9PkE9PT0hMHx8QT09PSExLGxBPUE9PntpZih1QShBKSE9PSJvYmplY3QiKXJldHVybiExO2xldCB0PU9BKEEpO3JldHVybih0PT09bnVsbHx8dD09PU9iamVjdC5wcm90b3R5cGV8fE9iamVjdC5nZXRQcm90b3R5cGVPZih0KT09PW51bGwpJiYhKFN5bWJvbC50b1N0cmluZ1RhZyBpbiBBKSYmIShTeW1ib2wuaXRlcmF0b3IgaW4gQSl9LE9lPUcoIkRhdGUiKSx4ZT1HKCJGaWxlIiksUGU9RygiQmxvYiIpLGplPUcoIkZpbGVMaXN0IiksV2U9QT0+aEEoQSkmJk4oQS5waXBlKSxaZT1BPT57bGV0IHQ7cmV0dXJuIEEmJih0eXBlb2YgRm9ybURhdGE9PSJmdW5jdGlvbiImJkEgaW5zdGFuY2VvZiBGb3JtRGF0YXx8TihBLmFwcGVuZCkmJigodD11QShBKSk9PT0iZm9ybWRhdGEifHx0PT09Im9iamVjdCImJk4oQS50b1N0cmluZykmJkEudG9TdHJpbmcoKT09PSJbb2JqZWN0IEZvcm1EYXRhXSIpKX0sVmU9RygiVVJMU2VhcmNoUGFyYW1zIiksW19lLFhlLHplLHZlXT1bIlJlYWRhYmxlU3RyZWFtIiwiUmVxdWVzdCIsIlJlc3BvbnNlIiwiSGVhZGVycyJdLm1hcChHKSwkZT1BPT5BLnRyaW0/QS50cmltKCk6QS5yZXBsYWNlKC9eW1xcc1xcdUZFRkZcXHhBMF0rfFtcXHNcXHVGRUZGXFx4QTBdKyQvZywiIik7ZnVuY3Rpb24gQUEoQSx0LHthbGxPd25LZXlzOmU9ITF9PXt9KXtpZihBPT09bnVsbHx8dHlwZW9mIEE+InUiKXJldHVybjtsZXQgSSxyO2lmKHR5cGVvZiBBIT0ib2JqZWN0IiYmKEE9W0FdKSxqKEEpKWZvcihJPTAscj1BLmxlbmd0aDtJPHI7SSsrKXQuY2FsbChudWxsLEFbSV0sSSxBKTtlbHNle2xldCBvPWU/T2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoQSk6T2JqZWN0LmtleXMoQSksZz1vLmxlbmd0aCxDO2ZvcihJPTA7STxnO0krKylDPW9bSV0sdC5jYWxsKG51bGwsQVtDXSxDLEEpfX1mdW5jdGlvbiBGdChBLHQpe3Q9dC50b0xvd2VyQ2FzZSgpO2xldCBlPU9iamVjdC5rZXlzKEEpLEk9ZS5sZW5ndGgscjtmb3IoO0ktLSA+MDspaWYocj1lW0ldLHQ9PT1yLnRvTG93ZXJDYXNlKCkpcmV0dXJuIHI7cmV0dXJuIG51bGx9dmFyIHg9dHlwZW9mIGdsb2JhbFRoaXM8InUiP2dsb2JhbFRoaXM6dHlwZW9mIHNlbGY8InUiP3NlbGY6dHlwZW9mIHdpbmRvdzwidSI/d2luZG93Omdsb2JhbCxSdD1BPT4hJChBKSYmQSE9PXg7ZnVuY3Rpb24gS0EoKXtsZXR7Y2FzZWxlc3M6QX09UnQodGhpcykmJnRoaXN8fHt9LHQ9e30sZT0oSSxyKT0+e2xldCBvPUEmJkZ0KHQscil8fHI7bEEodFtvXSkmJmxBKEkpP3Rbb109S0EodFtvXSxJKTpsQShJKT90W29dPUtBKHt9LEkpOmooSSk/dFtvXT1JLnNsaWNlKCk6dFtvXT1JfTtmb3IobGV0IEk9MCxyPWFyZ3VtZW50cy5sZW5ndGg7STxyO0krKylhcmd1bWVudHNbSV0mJkFBKGFyZ3VtZW50c1tJXSxlKTtyZXR1cm4gdH12YXIgQUk9KEEsdCxlLHthbGxPd25LZXlzOkl9PXt9KT0+KEFBKHQsKHIsbyk9PntlJiZOKHIpP0Fbb109dihyLGUpOkFbb109cn0se2FsbE93bktleXM6SX0pLEEpLHRJPUE9PihBLmNoYXJDb2RlQXQoMCk9PT02NTI3OSYmKEE9QS5zbGljZSgxKSksQSksZUk9KEEsdCxlLEkpPT57QS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh0LnByb3RvdHlwZSxJKSxBLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1BLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShBLCJzdXBlciIse3ZhbHVlOnQucHJvdG90eXBlfSksZSYmT2JqZWN0LmFzc2lnbihBLnByb3RvdHlwZSxlKX0sSUk9KEEsdCxlLEkpPT57bGV0IHIsbyxnLEM9e307aWYodD10fHx7fSxBPT1udWxsKXJldHVybiB0O2Rve2ZvcihyPU9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKEEpLG89ci5sZW5ndGg7by0tID4wOylnPXJbb10sKCFJfHxJKGcsQSx0KSkmJiFDW2ddJiYodFtnXT1BW2ddLENbZ109ITApO0E9ZSE9PSExJiZPQShBKX13aGlsZShBJiYoIWV8fGUoQSx0KSkmJkEhPT1PYmplY3QucHJvdG90eXBlKTtyZXR1cm4gdH0sckk9KEEsdCxlKT0+e0E9U3RyaW5nKEEpLChlPT09dm9pZCAwfHxlPkEubGVuZ3RoKSYmKGU9QS5sZW5ndGgpLGUtPXQubGVuZ3RoO2xldCBJPUEuaW5kZXhPZih0LGUpO3JldHVybiBJIT09LTEmJkk9PT1lfSxvST1BPT57aWYoIUEpcmV0dXJuIG51bGw7aWYoaihBKSlyZXR1cm4gQTtsZXQgdD1BLmxlbmd0aDtpZighU3QodCkpcmV0dXJuIG51bGw7bGV0IGU9bmV3IEFycmF5KHQpO2Zvcig7dC0tID4wOyllW3RdPUFbdF07cmV0dXJuIGV9LGdJPShBPT50PT5BJiZ0IGluc3RhbmNlb2YgQSkodHlwZW9mIFVpbnQ4QXJyYXk8InUiJiZPQShVaW50OEFycmF5KSksaUk9KEEsdCk9PntsZXQgST0oQSYmQVtTeW1ib2wuaXRlcmF0b3JdKS5jYWxsKEEpLHI7Zm9yKDsocj1JLm5leHQoKSkmJiFyLmRvbmU7KXtsZXQgbz1yLnZhbHVlO3QuY2FsbChBLG9bMF0sb1sxXSl9fSxuST0oQSx0KT0+e2xldCBlLEk9W107Zm9yKDsoZT1BLmV4ZWModCkpIT09bnVsbDspSS5wdXNoKGUpO3JldHVybiBJfSxzST1HKCJIVE1MRm9ybUVsZW1lbnQiKSxDST1BPT5BLnRvTG93ZXJDYXNlKCkucmVwbGFjZSgvWy1fXFxzXShbYS16XFxkXSkoXFx3KikvZyxmdW5jdGlvbihlLEkscil7cmV0dXJuIEkudG9VcHBlckNhc2UoKStyfSksbXQ9KCh7aGFzT3duUHJvcGVydHk6QX0pPT4odCxlKT0+QS5jYWxsKHQsZSkpKE9iamVjdC5wcm90b3R5cGUpLEJJPUcoIlJlZ0V4cCIpLE50PShBLHQpPT57bGV0IGU9T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMoQSksST17fTtBQShlLChyLG8pPT57bGV0IGc7KGc9dChyLG8sQSkpIT09ITEmJihJW29dPWd8fHIpfSksT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoQSxJKX0sYUk9QT0+e050KEEsKHQsZSk9PntpZihOKEEpJiZbImFyZ3VtZW50cyIsImNhbGxlciIsImNhbGxlZSJdLmluZGV4T2YoZSkhPT0tMSlyZXR1cm4hMTtsZXQgST1BW2VdO2lmKE4oSSkpe2lmKHQuZW51bWVyYWJsZT0hMSwid3JpdGFibGUiaW4gdCl7dC53cml0YWJsZT0hMTtyZXR1cm59dC5zZXR8fCh0LnNldD0oKT0+e3Rocm93IEVycm9yKCJDYW4gbm90IHJld3JpdGUgcmVhZC1vbmx5IG1ldGhvZCBcJyIrZSsiXCciKX0pfX0pfSxRST0oQSx0KT0+e2xldCBlPXt9LEk9cj0+e3IuZm9yRWFjaChvPT57ZVtvXT0hMH0pfTtyZXR1cm4gaihBKT9JKEEpOkkoU3RyaW5nKEEpLnNwbGl0KHQpKSxlfSxFST0oKT0+e30sY0k9KEEsdCk9PkEhPW51bGwmJk51bWJlci5pc0Zpbml0ZShBPStBKT9BOnQsVEE9ImFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6Iix3dD0iMDEyMzQ1Njc4OSIsVXQ9e0RJR0lUOnd0LEFMUEhBOlRBLEFMUEhBX0RJR0lUOlRBK1RBLnRvVXBwZXJDYXNlKCkrd3R9LGZJPShBPTE2LHQ9VXQuQUxQSEFfRElHSVQpPT57bGV0IGU9IiIse2xlbmd0aDpJfT10O2Zvcig7QS0tOyllKz10W01hdGgucmFuZG9tKCkqSXwwXTtyZXR1cm4gZX07ZnVuY3Rpb24gbEkoQSl7cmV0dXJuISEoQSYmTihBLmFwcGVuZCkmJkFbU3ltYm9sLnRvU3RyaW5nVGFnXT09PSJGb3JtRGF0YSImJkFbU3ltYm9sLml0ZXJhdG9yXSl9dmFyIHVJPUE9PntsZXQgdD1uZXcgQXJyYXkoMTApLGU9KEkscik9PntpZihoQShJKSl7aWYodC5pbmRleE9mKEkpPj0wKXJldHVybjtpZighKCJ0b0pTT04iaW4gSSkpe3Rbcl09STtsZXQgbz1qKEkpP1tdOnt9O3JldHVybiBBQShJLChnLEMpPT57bGV0IFE9ZShnLHIrMSk7ISQoUSkmJihvW0NdPVEpfSksdFtyXT12b2lkIDAsb319cmV0dXJuIEl9O3JldHVybiBlKEEsMCl9LERJPUcoIkFzeW5jRnVuY3Rpb24iKSxoST1BPT5BJiYoaEEoQSl8fE4oQSkpJiZOKEEudGhlbikmJk4oQS5jYXRjaCksR3Q9KChBLHQpPT5BP3NldEltbWVkaWF0ZTp0PygoZSxJKT0+KHguYWRkRXZlbnRMaXN0ZW5lcigibWVzc2FnZSIsKHtzb3VyY2U6cixkYXRhOm99KT0+e3I9PT14JiZvPT09ZSYmSS5sZW5ndGgmJkkuc2hpZnQoKSgpfSwhMSkscj0+e0kucHVzaChyKSx4LnBvc3RNZXNzYWdlKGUsIioiKX0pKShgYXhpb3NAJHtNYXRoLnJhbmRvbSgpfWAsW10pOmU9PnNldFRpbWVvdXQoZSkpKHR5cGVvZiBzZXRJbW1lZGlhdGU9PSJmdW5jdGlvbiIsTih4LnBvc3RNZXNzYWdlKSksZEk9dHlwZW9mIHF1ZXVlTWljcm90YXNrPCJ1Ij9xdWV1ZU1pY3JvdGFzay5iaW5kKHgpOnR5cGVvZiBwcm9jZXNzPCJ1IiYmcHJvY2Vzcy5uZXh0VGlja3x8R3QsaT17aXNBcnJheTpqLGlzQXJyYXlCdWZmZXI6cHQsaXNCdWZmZXI6cWUsaXNGb3JtRGF0YTpaZSxpc0FycmF5QnVmZmVyVmlldzpNZSxpc1N0cmluZzpUZSxpc051bWJlcjpTdCxpc0Jvb2xlYW46S2UsaXNPYmplY3Q6aEEsaXNQbGFpbk9iamVjdDpsQSxpc1JlYWRhYmxlU3RyZWFtOl9lLGlzUmVxdWVzdDpYZSxpc1Jlc3BvbnNlOnplLGlzSGVhZGVyczp2ZSxpc1VuZGVmaW5lZDokLGlzRGF0ZTpPZSxpc0ZpbGU6eGUsaXNCbG9iOlBlLGlzUmVnRXhwOkJJLGlzRnVuY3Rpb246Tixpc1N0cmVhbTpXZSxpc1VSTFNlYXJjaFBhcmFtczpWZSxpc1R5cGVkQXJyYXk6Z0ksaXNGaWxlTGlzdDpqZSxmb3JFYWNoOkFBLG1lcmdlOktBLGV4dGVuZDpBSSx0cmltOiRlLHN0cmlwQk9NOnRJLGluaGVyaXRzOmVJLHRvRmxhdE9iamVjdDpJSSxraW5kT2Y6dUEsa2luZE9mVGVzdDpHLGVuZHNXaXRoOnJJLHRvQXJyYXk6b0ksZm9yRWFjaEVudHJ5OmlJLG1hdGNoQWxsOm5JLGlzSFRNTEZvcm06c0ksaGFzT3duUHJvcGVydHk6bXQsaGFzT3duUHJvcDptdCxyZWR1Y2VEZXNjcmlwdG9yczpOdCxmcmVlemVNZXRob2RzOmFJLHRvT2JqZWN0U2V0OlFJLHRvQ2FtZWxDYXNlOkNJLG5vb3A6RUksdG9GaW5pdGVOdW1iZXI6Y0ksZmluZEtleTpGdCxnbG9iYWw6eCxpc0NvbnRleHREZWZpbmVkOlJ0LEFMUEhBQkVUOlV0LGdlbmVyYXRlU3RyaW5nOmZJLGlzU3BlY0NvbXBsaWFudEZvcm06bEksdG9KU09OT2JqZWN0OnVJLGlzQXN5bmNGbjpESSxpc1RoZW5hYmxlOmhJLHNldEltbWVkaWF0ZTpHdCxhc2FwOmRJfTtmdW5jdGlvbiBXKEEsdCxlLEkscil7RXJyb3IuY2FsbCh0aGlzKSxFcnJvci5jYXB0dXJlU3RhY2tUcmFjZT9FcnJvci5jYXB0dXJlU3RhY2tUcmFjZSh0aGlzLHRoaXMuY29uc3RydWN0b3IpOnRoaXMuc3RhY2s9bmV3IEVycm9yKCkuc3RhY2ssdGhpcy5tZXNzYWdlPUEsdGhpcy5uYW1lPSJBeGlvc0Vycm9yIix0JiYodGhpcy5jb2RlPXQpLGUmJih0aGlzLmNvbmZpZz1lKSxJJiYodGhpcy5yZXF1ZXN0PUkpLHImJih0aGlzLnJlc3BvbnNlPXIpfWkuaW5oZXJpdHMoVyxFcnJvcix7dG9KU09OOmZ1bmN0aW9uKCl7cmV0dXJue21lc3NhZ2U6dGhpcy5tZXNzYWdlLG5hbWU6dGhpcy5uYW1lLGRlc2NyaXB0aW9uOnRoaXMuZGVzY3JpcHRpb24sbnVtYmVyOnRoaXMubnVtYmVyLGZpbGVOYW1lOnRoaXMuZmlsZU5hbWUsbGluZU51bWJlcjp0aGlzLmxpbmVOdW1iZXIsY29sdW1uTnVtYmVyOnRoaXMuY29sdW1uTnVtYmVyLHN0YWNrOnRoaXMuc3RhY2ssY29uZmlnOmkudG9KU09OT2JqZWN0KHRoaXMuY29uZmlnKSxjb2RlOnRoaXMuY29kZSxzdGF0dXM6dGhpcy5yZXNwb25zZSYmdGhpcy5yZXNwb25zZS5zdGF0dXM/dGhpcy5yZXNwb25zZS5zdGF0dXM6bnVsbH19fSk7dmFyIGt0PVcucHJvdG90eXBlLEx0PXt9O1siRVJSX0JBRF9PUFRJT05fVkFMVUUiLCJFUlJfQkFEX09QVElPTiIsIkVDT05OQUJPUlRFRCIsIkVUSU1FRE9VVCIsIkVSUl9ORVRXT1JLIiwiRVJSX0ZSX1RPT19NQU5ZX1JFRElSRUNUUyIsIkVSUl9ERVBSRUNBVEVEIiwiRVJSX0JBRF9SRVNQT05TRSIsIkVSUl9CQURfUkVRVUVTVCIsIkVSUl9DQU5DRUxFRCIsIkVSUl9OT1RfU1VQUE9SVCIsIkVSUl9JTlZBTElEX1VSTCJdLmZvckVhY2goQT0+e0x0W0FdPXt2YWx1ZTpBfX0pO09iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKFcsTHQpO09iamVjdC5kZWZpbmVQcm9wZXJ0eShrdCwiaXNBeGlvc0Vycm9yIix7dmFsdWU6ITB9KTtXLmZyb209KEEsdCxlLEkscixvKT0+e2xldCBnPU9iamVjdC5jcmVhdGUoa3QpO3JldHVybiBpLnRvRmxhdE9iamVjdChBLGcsZnVuY3Rpb24oUSl7cmV0dXJuIFEhPT1FcnJvci5wcm90b3R5cGV9LEM9PkMhPT0iaXNBeGlvc0Vycm9yIiksVy5jYWxsKGcsQS5tZXNzYWdlLHQsZSxJLHIpLGcuY2F1c2U9QSxnLm5hbWU9QS5uYW1lLG8mJk9iamVjdC5hc3NpZ24oZyxvKSxnfTt2YXIgdT1XO3ZhciBkQT1udWxsO2Z1bmN0aW9uIHhBKEEpe3JldHVybiBpLmlzUGxhaW5PYmplY3QoQSl8fGkuaXNBcnJheShBKX1mdW5jdGlvbiBidChBKXtyZXR1cm4gaS5lbmRzV2l0aChBLCJbXSIpP0Euc2xpY2UoMCwtMik6QX1mdW5jdGlvbiBKdChBLHQsZSl7cmV0dXJuIEE/QS5jb25jYXQodCkubWFwKGZ1bmN0aW9uKHIsbyl7cmV0dXJuIHI9YnQociksIWUmJm8/IlsiK3IrIl0iOnJ9KS5qb2luKGU/Ii4iOiIiKTp0fWZ1bmN0aW9uIHlJKEEpe3JldHVybiBpLmlzQXJyYXkoQSkmJiFBLnNvbWUoeEEpfXZhciBtST1pLnRvRmxhdE9iamVjdChpLHt9LG51bGwsZnVuY3Rpb24odCl7cmV0dXJuL15pc1tBLVpdLy50ZXN0KHQpfSk7ZnVuY3Rpb24gd0koQSx0LGUpe2lmKCFpLmlzT2JqZWN0KEEpKXRocm93IG5ldyBUeXBlRXJyb3IoInRhcmdldCBtdXN0IGJlIGFuIG9iamVjdCIpO3Q9dHx8bmV3KGRBfHxGb3JtRGF0YSksZT1pLnRvRmxhdE9iamVjdChlLHttZXRhVG9rZW5zOiEwLGRvdHM6ITEsaW5kZXhlczohMX0sITEsZnVuY3Rpb24obCxjKXtyZXR1cm4haS5pc1VuZGVmaW5lZChjW2xdKX0pO2xldCBJPWUubWV0YVRva2VucyxyPWUudmlzaXRvcnx8bixvPWUuZG90cyxnPWUuaW5kZXhlcyxRPShlLkJsb2J8fHR5cGVvZiBCbG9iPCJ1IiYmQmxvYikmJmkuaXNTcGVjQ29tcGxpYW50Rm9ybSh0KTtpZighaS5pc0Z1bmN0aW9uKHIpKXRocm93IG5ldyBUeXBlRXJyb3IoInZpc2l0b3IgbXVzdCBiZSBhIGZ1bmN0aW9uIik7ZnVuY3Rpb24gYShFKXtpZihFPT09bnVsbClyZXR1cm4iIjtpZihpLmlzRGF0ZShFKSlyZXR1cm4gRS50b0lTT1N0cmluZygpO2lmKCFRJiZpLmlzQmxvYihFKSl0aHJvdyBuZXcgdSgiQmxvYiBpcyBub3Qgc3VwcG9ydGVkLiBVc2UgYSBCdWZmZXIgaW5zdGVhZC4iKTtyZXR1cm4gaS5pc0FycmF5QnVmZmVyKEUpfHxpLmlzVHlwZWRBcnJheShFKT9RJiZ0eXBlb2YgQmxvYj09ImZ1bmN0aW9uIj9uZXcgQmxvYihbRV0pOkJ1ZmZlci5mcm9tKEUpOkV9ZnVuY3Rpb24gbihFLGwsYyl7bGV0IHA9RTtpZihFJiYhYyYmdHlwZW9mIEU9PSJvYmplY3QiKXtpZihpLmVuZHNXaXRoKGwsInt9IikpbD1JP2w6bC5zbGljZSgwLC0yKSxFPUpTT04uc3RyaW5naWZ5KEUpO2Vsc2UgaWYoaS5pc0FycmF5KEUpJiZ5SShFKXx8KGkuaXNGaWxlTGlzdChFKXx8aS5lbmRzV2l0aChsLCJbXSIpKSYmKHA9aS50b0FycmF5KEUpKSlyZXR1cm4gbD1idChsKSxwLmZvckVhY2goZnVuY3Rpb24oRCxVKXshKGkuaXNVbmRlZmluZWQoRCl8fEQ9PT1udWxsKSYmdC5hcHBlbmQoZz09PSEwP0p0KFtsXSxVLG8pOmc9PT1udWxsP2w6bCsiW10iLGEoRCkpfSksITF9cmV0dXJuIHhBKEUpPyEwOih0LmFwcGVuZChKdChjLGwsbyksYShFKSksITEpfWxldCBzPVtdLGY9T2JqZWN0LmFzc2lnbihtSSx7ZGVmYXVsdFZpc2l0b3I6bixjb252ZXJ0VmFsdWU6YSxpc1Zpc2l0YWJsZTp4QX0pO2Z1bmN0aW9uIEIoRSxsKXtpZighaS5pc1VuZGVmaW5lZChFKSl7aWYocy5pbmRleE9mKEUpIT09LTEpdGhyb3cgRXJyb3IoIkNpcmN1bGFyIHJlZmVyZW5jZSBkZXRlY3RlZCBpbiAiK2wuam9pbigiLiIpKTtzLnB1c2goRSksaS5mb3JFYWNoKEUsZnVuY3Rpb24ocCxTKXsoIShpLmlzVW5kZWZpbmVkKHApfHxwPT09bnVsbCkmJnIuY2FsbCh0LHAsaS5pc1N0cmluZyhTKT9TLnRyaW0oKTpTLGwsZikpPT09ITAmJkIocCxsP2wuY29uY2F0KFMpOltTXSl9KSxzLnBvcCgpfX1pZighaS5pc09iamVjdChBKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJkYXRhIG11c3QgYmUgYW4gb2JqZWN0Iik7cmV0dXJuIEIoQSksdH12YXIgcT13STtmdW5jdGlvbiBIdChBKXtsZXQgdD17IiEiOiIlMjUyMSIsIlwnIjoiJTI1MjciLCIoIjoiJTI1MjgiLCIpIjoiJTI1MjkiLCJ+IjoiJTI1N0UiLCIlMjUyMCI6IisiLCIlMjUwMCI6IlxcMCJ9O3JldHVybiBlbmNvZGVVUklDb21wb25lbnQoQSkucmVwbGFjZSgvWyFcJygpfl18JTI1MjB8JTI1MDAvZyxmdW5jdGlvbihJKXtyZXR1cm4gdFtJXX0pfWZ1bmN0aW9uIFl0KEEsdCl7dGhpcy5fcGFpcnM9W10sQSYmcShBLHRoaXMsdCl9dmFyIHF0PVl0LnByb3RvdHlwZTtxdC5hcHBlbmQ9ZnVuY3Rpb24odCxlKXt0aGlzLl9wYWlycy5wdXNoKFt0LGVdKX07cXQudG9TdHJpbmc9ZnVuY3Rpb24odCl7bGV0IGU9dD9mdW5jdGlvbihJKXtyZXR1cm4gdC5jYWxsKHRoaXMsSSxIdCl9Okh0O3JldHVybiB0aGlzLl9wYWlycy5tYXAoZnVuY3Rpb24ocil7cmV0dXJuIGUoclswXSkrIj0iK2UoclsxXSl9LCIiKS5qb2luKCImIil9O3ZhciB5QT1ZdDtmdW5jdGlvbiBwSShBKXtyZXR1cm4gZW5jb2RlVVJJQ29tcG9uZW50KEEpLnJlcGxhY2UoLyUyNTNBL2dpLCI6IikucmVwbGFjZSgvJTI1MjQvZywiJCIpLnJlcGxhY2UoLyUyNTJDL2dpLCIsIikucmVwbGFjZSgvJTI1MjAvZywiKyIpLnJlcGxhY2UoLyUyNTVCL2dpLCJbIikucmVwbGFjZSgvJTI1NUQvZ2ksIl0iKX1mdW5jdGlvbiB0QShBLHQsZSl7aWYoIXQpcmV0dXJuIEE7bGV0IEk9ZSYmZS5lbmNvZGV8fHBJLHI9ZSYmZS5zZXJpYWxpemUsbztpZihyP289cih0LGUpOm89aS5pc1VSTFNlYXJjaFBhcmFtcyh0KT90LnRvU3RyaW5nKCk6bmV3IHlBKHQsZSkudG9TdHJpbmcoSSksbyl7bGV0IGc9QS5pbmRleE9mKCIlMjMiKTtnIT09LTEmJihBPUEuc2xpY2UoMCxnKSksQSs9KEEuaW5kZXhPZigiPyIpPT09LTE/Ij8iOiImIikrb31yZXR1cm4gQX12YXIgUEE9Y2xhc3N7Y29uc3RydWN0b3IoKXt0aGlzLmhhbmRsZXJzPVtdfXVzZSh0LGUsSSl7cmV0dXJuIHRoaXMuaGFuZGxlcnMucHVzaCh7ZnVsZmlsbGVkOnQscmVqZWN0ZWQ6ZSxzeW5jaHJvbm91czpJP0kuc3luY2hyb25vdXM6ITEscnVuV2hlbjpJP0kucnVuV2hlbjpudWxsfSksdGhpcy5oYW5kbGVycy5sZW5ndGgtMX1lamVjdCh0KXt0aGlzLmhhbmRsZXJzW3RdJiYodGhpcy5oYW5kbGVyc1t0XT1udWxsKX1jbGVhcigpe3RoaXMuaGFuZGxlcnMmJih0aGlzLmhhbmRsZXJzPVtdKX1mb3JFYWNoKHQpe2kuZm9yRWFjaCh0aGlzLmhhbmRsZXJzLGZ1bmN0aW9uKEkpe0khPT1udWxsJiZ0KEkpfSl9fSxqQT1QQTt2YXIgbUE9e3NpbGVudEpTT05QYXJzaW5nOiEwLGZvcmNlZEpTT05QYXJzaW5nOiEwLGNsYXJpZnlUaW1lb3V0RXJyb3I6ITF9O3ZhciBNdD10eXBlb2YgVVJMU2VhcmNoUGFyYW1zPCJ1Ij9VUkxTZWFyY2hQYXJhbXM6eUE7dmFyIFR0PXR5cGVvZiBGb3JtRGF0YTwidSI/Rm9ybURhdGE6bnVsbDt2YXIgS3Q9dHlwZW9mIEJsb2I8InUiP0Jsb2I6bnVsbDt2YXIgT3Q9e2lzQnJvd3NlcjohMCxjbGFzc2VzOntVUkxTZWFyY2hQYXJhbXM6TXQsRm9ybURhdGE6VHQsQmxvYjpLdH0scHJvdG9jb2xzOlsiaHR0cCIsImh0dHBzIiwiZmlsZSIsImJsb2IiLCJ1cmwiLCJkYXRhIl19O3ZhciBaQT17fTt3ZShaQSx7aGFzQnJvd3NlckVudjooKT0+V0EsaGFzU3RhbmRhcmRCcm93c2VyRW52OigpPT5TSSxoYXNTdGFuZGFyZEJyb3dzZXJXZWJXb3JrZXJFbnY6KCk9PkZJLG9yaWdpbjooKT0+Ukl9KTt2YXIgV0E9dHlwZW9mIHdpbmRvdzwidSImJnR5cGVvZiBkb2N1bWVudDwidSIsU0k9KEE9PldBJiZbIlJlYWN0TmF0aXZlIiwiTmF0aXZlU2NyaXB0IiwiTlMiXS5pbmRleE9mKEEpPDApKHR5cGVvZiBuYXZpZ2F0b3I8InUiJiZuYXZpZ2F0b3IucHJvZHVjdCksRkk9dHlwZW9mIFdvcmtlckdsb2JhbFNjb3BlPCJ1IiYmc2VsZiBpbnN0YW5jZW9mIFdvcmtlckdsb2JhbFNjb3BlJiZ0eXBlb2Ygc2VsZi5pbXBvcnRTY3JpcHRzPT0iZnVuY3Rpb24iLFJJPVdBJiZ3aW5kb3cubG9jYXRpb24uaHJlZnx8Imh0dHA6Ly9sb2NhbGhvc3QiO3ZhciB3PXsuLi5aQSwuLi5PdH07ZnVuY3Rpb24gVkEoQSx0KXtyZXR1cm4gcShBLG5ldyB3LmNsYXNzZXMuVVJMU2VhcmNoUGFyYW1zLE9iamVjdC5hc3NpZ24oe3Zpc2l0b3I6ZnVuY3Rpb24oZSxJLHIsbyl7cmV0dXJuIHcuaXNOb2RlJiZpLmlzQnVmZmVyKGUpPyh0aGlzLmFwcGVuZChJLGUudG9TdHJpbmcoImJhc2U2NCIpKSwhMSk6by5kZWZhdWx0VmlzaXRvci5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSx0KSl9ZnVuY3Rpb24gTkkoQSl7cmV0dXJuIGkubWF0Y2hBbGwoL1xcdyt8XFxbKFxcdyopXS9nLEEpLm1hcCh0PT50WzBdPT09IltdIj8iIjp0WzFdfHx0WzBdKX1mdW5jdGlvbiBVSShBKXtsZXQgdD17fSxlPU9iamVjdC5rZXlzKEEpLEkscj1lLmxlbmd0aCxvO2ZvcihJPTA7STxyO0krKylvPWVbSV0sdFtvXT1BW29dO3JldHVybiB0fWZ1bmN0aW9uIEdJKEEpe2Z1bmN0aW9uIHQoZSxJLHIsbyl7bGV0IGc9ZVtvKytdO2lmKGc9PT0iX19wcm90b19fIilyZXR1cm4hMDtsZXQgQz1OdW1iZXIuaXNGaW5pdGUoK2cpLFE9bz49ZS5sZW5ndGg7cmV0dXJuIGc9IWcmJmkuaXNBcnJheShyKT9yLmxlbmd0aDpnLFE/KGkuaGFzT3duUHJvcChyLGcpP3JbZ109W3JbZ10sSV06cltnXT1JLCFDKTooKCFyW2ddfHwhaS5pc09iamVjdChyW2ddKSkmJihyW2ddPVtdKSx0KGUsSSxyW2ddLG8pJiZpLmlzQXJyYXkocltnXSkmJihyW2ddPVVJKHJbZ10pKSwhQyl9aWYoaS5pc0Zvcm1EYXRhKEEpJiZpLmlzRnVuY3Rpb24oQS5lbnRyaWVzKSl7bGV0IGU9e307cmV0dXJuIGkuZm9yRWFjaEVudHJ5KEEsKEkscik9Pnt0KE5JKEkpLHIsZSwwKX0pLGV9cmV0dXJuIG51bGx9dmFyIHdBPUdJO2Z1bmN0aW9uIGtJKEEsdCxlKXtpZihpLmlzU3RyaW5nKEEpKXRyeXtyZXR1cm4odHx8SlNPTi5wYXJzZSkoQSksaS50cmltKEEpfWNhdGNoKEkpe2lmKEkubmFtZSE9PSJTeW50YXhFcnJvciIpdGhyb3cgSX1yZXR1cm4oZXx8SlNPTi5zdHJpbmdpZnkpKEEpfXZhciBfQT17dHJhbnNpdGlvbmFsOm1BLGFkYXB0ZXI6WyJ4aHIiLCJodHRwIiwiZmV0Y2giXSx0cmFuc2Zvcm1SZXF1ZXN0OltmdW5jdGlvbih0LGUpe2xldCBJPWUuZ2V0Q29udGVudFR5cGUoKXx8IiIscj1JLmluZGV4T2YoImFwcGxpY2F0aW9uL2pzb24iKT4tMSxvPWkuaXNPYmplY3QodCk7aWYobyYmaS5pc0hUTUxGb3JtKHQpJiYodD1uZXcgRm9ybURhdGEodCkpLGkuaXNGb3JtRGF0YSh0KSlyZXR1cm4gcj9KU09OLnN0cmluZ2lmeSh3QSh0KSk6dDtpZihpLmlzQXJyYXlCdWZmZXIodCl8fGkuaXNCdWZmZXIodCl8fGkuaXNTdHJlYW0odCl8fGkuaXNGaWxlKHQpfHxpLmlzQmxvYih0KXx8aS5pc1JlYWRhYmxlU3RyZWFtKHQpKXJldHVybiB0O2lmKGkuaXNBcnJheUJ1ZmZlclZpZXcodCkpcmV0dXJuIHQuYnVmZmVyO2lmKGkuaXNVUkxTZWFyY2hQYXJhbXModCkpcmV0dXJuIGUuc2V0Q29udGVudFR5cGUoImFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZDtjaGFyc2V0PXV0Zi04IiwhMSksdC50b1N0cmluZygpO2xldCBDO2lmKG8pe2lmKEkuaW5kZXhPZigiYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkIik+LTEpcmV0dXJuIFZBKHQsdGhpcy5mb3JtU2VyaWFsaXplcikudG9TdHJpbmcoKTtpZigoQz1pLmlzRmlsZUxpc3QodCkpfHxJLmluZGV4T2YoIm11bHRpcGFydC9mb3JtLWRhdGEiKT4tMSl7bGV0IFE9dGhpcy5lbnYmJnRoaXMuZW52LkZvcm1EYXRhO3JldHVybiBxKEM/eyJmaWxlc1tdIjp0fTp0LFEmJm5ldyBRLHRoaXMuZm9ybVNlcmlhbGl6ZXIpfX1yZXR1cm4gb3x8cj8oZS5zZXRDb250ZW50VHlwZSgiYXBwbGljYXRpb24vanNvbiIsITEpLGtJKHQpKTp0fV0sdHJhbnNmb3JtUmVzcG9uc2U6W2Z1bmN0aW9uKHQpe2xldCBlPXRoaXMudHJhbnNpdGlvbmFsfHxfQS50cmFuc2l0aW9uYWwsST1lJiZlLmZvcmNlZEpTT05QYXJzaW5nLHI9dGhpcy5yZXNwb25zZVR5cGU9PT0ianNvbiI7aWYoaS5pc1Jlc3BvbnNlKHQpfHxpLmlzUmVhZGFibGVTdHJlYW0odCkpcmV0dXJuIHQ7aWYodCYmaS5pc1N0cmluZyh0KSYmKEkmJiF0aGlzLnJlc3BvbnNlVHlwZXx8cikpe2xldCBnPSEoZSYmZS5zaWxlbnRKU09OUGFyc2luZykmJnI7dHJ5e3JldHVybiBKU09OLnBhcnNlKHQpfWNhdGNoKEMpe2lmKGcpdGhyb3cgQy5uYW1lPT09IlN5bnRheEVycm9yIj91LmZyb20oQyx1LkVSUl9CQURfUkVTUE9OU0UsdGhpcyxudWxsLHRoaXMucmVzcG9uc2UpOkN9fXJldHVybiB0fV0sdGltZW91dDowLHhzcmZDb29raWVOYW1lOiJYU1JGLVRPS0VOIix4c3JmSGVhZGVyTmFtZToiWC1YU1JGLVRPS0VOIixtYXhDb250ZW50TGVuZ3RoOi0xLG1heEJvZHlMZW5ndGg6LTEsZW52OntGb3JtRGF0YTp3LmNsYXNzZXMuRm9ybURhdGEsQmxvYjp3LmNsYXNzZXMuQmxvYn0sdmFsaWRhdGVTdGF0dXM6ZnVuY3Rpb24odCl7cmV0dXJuIHQ+PTIwMCYmdDwzMDB9LGhlYWRlcnM6e2NvbW1vbjp7QWNjZXB0OiJhcHBsaWNhdGlvbi9qc29uLCB0ZXh0L3BsYWluLCAqLyoiLCJDb250ZW50LVR5cGUiOnZvaWQgMH19fTtpLmZvckVhY2goWyJkZWxldGUiLCJnZXQiLCJoZWFkIiwicG9zdCIsInB1dCIsInBhdGNoIl0sQT0+e19BLmhlYWRlcnNbQV09e319KTt2YXIgWj1fQTt2YXIgTEk9aS50b09iamVjdFNldChbImFnZSIsImF1dGhvcml6YXRpb24iLCJjb250ZW50LWxlbmd0aCIsImNvbnRlbnQtdHlwZSIsImV0YWciLCJleHBpcmVzIiwiZnJvbSIsImhvc3QiLCJpZi1tb2RpZmllZC1zaW5jZSIsImlmLXVubW9kaWZpZWQtc2luY2UiLCJsYXN0LW1vZGlmaWVkIiwibG9jYXRpb24iLCJtYXgtZm9yd2FyZHMiLCJwcm94eS1hdXRob3JpemF0aW9uIiwicmVmZXJlciIsInJldHJ5LWFmdGVyIiwidXNlci1hZ2VudCJdKSx4dD1BPT57bGV0IHQ9e30sZSxJLHI7cmV0dXJuIEEmJkEuc3BsaXQoYCUwQWApLmZvckVhY2goZnVuY3Rpb24oZyl7cj1nLmluZGV4T2YoIjoiKSxlPWcuc3Vic3RyaW5nKDAscikudHJpbSgpLnRvTG93ZXJDYXNlKCksST1nLnN1YnN0cmluZyhyKzEpLnRyaW0oKSwhKCFlfHx0W2VdJiZMSVtlXSkmJihlPT09InNldC1jb29raWUiP3RbZV0/dFtlXS5wdXNoKEkpOnRbZV09W0ldOnRbZV09dFtlXT90W2VdKyIsICIrSTpJKX0pLHR9O3ZhciBQdD1TeW1ib2woImludGVybmFscyIpO2Z1bmN0aW9uIGVBKEEpe3JldHVybiBBJiZTdHJpbmcoQSkudHJpbSgpLnRvTG93ZXJDYXNlKCl9ZnVuY3Rpb24gcEEoQSl7cmV0dXJuIEE9PT0hMXx8QT09bnVsbD9BOmkuaXNBcnJheShBKT9BLm1hcChwQSk6U3RyaW5nKEEpfWZ1bmN0aW9uIEpJKEEpe2xldCB0PU9iamVjdC5jcmVhdGUobnVsbCksZT0vKFteXFxzLDs9XSspXFxzKig/Oj1cXHMqKFteLDtdKykpPy9nLEk7Zm9yKDtJPWUuZXhlYyhBKTspdFtJWzFdXT1JWzJdO3JldHVybiB0fXZhciBiST1BPT4vXlstX2EtekEtWjAtOV5gfH4sISUyMyQlJlwnKisuXSskLy50ZXN0KEEudHJpbSgpKTtmdW5jdGlvbiBYQShBLHQsZSxJLHIpe2lmKGkuaXNGdW5jdGlvbihJKSlyZXR1cm4gSS5jYWxsKHRoaXMsdCxlKTtpZihyJiYodD1lKSwhIWkuaXNTdHJpbmcodCkpe2lmKGkuaXNTdHJpbmcoSSkpcmV0dXJuIHQuaW5kZXhPZihJKSE9PS0xO2lmKGkuaXNSZWdFeHAoSSkpcmV0dXJuIEkudGVzdCh0KX19ZnVuY3Rpb24gSEkoQSl7cmV0dXJuIEEudHJpbSgpLnRvTG93ZXJDYXNlKCkucmVwbGFjZSgvKFthLXpcXGRdKShcXHcqKS9nLCh0LGUsSSk9PmUudG9VcHBlckNhc2UoKStJKX1mdW5jdGlvbiBZSShBLHQpe2xldCBlPWkudG9DYW1lbENhc2UoIiAiK3QpO1siZ2V0Iiwic2V0IiwiaGFzIl0uZm9yRWFjaChJPT57T2JqZWN0LmRlZmluZVByb3BlcnR5KEEsSStlLHt2YWx1ZTpmdW5jdGlvbihyLG8sZyl7cmV0dXJuIHRoaXNbSV0uY2FsbCh0aGlzLHQscixvLGcpfSxjb25maWd1cmFibGU6ITB9KX0pfXZhciBWPWNsYXNze2NvbnN0cnVjdG9yKHQpe3QmJnRoaXMuc2V0KHQpfXNldCh0LGUsSSl7bGV0IHI9dGhpcztmdW5jdGlvbiBvKEMsUSxhKXtsZXQgbj1lQShRKTtpZighbil0aHJvdyBuZXcgRXJyb3IoImhlYWRlciBuYW1lIG11c3QgYmUgYSBub24tZW1wdHkgc3RyaW5nIik7bGV0IHM9aS5maW5kS2V5KHIsbik7KCFzfHxyW3NdPT09dm9pZCAwfHxhPT09ITB8fGE9PT12b2lkIDAmJnJbc10hPT0hMSkmJihyW3N8fFFdPXBBKEMpKX1sZXQgZz0oQyxRKT0+aS5mb3JFYWNoKEMsKGEsbik9Pm8oYSxuLFEpKTtpZihpLmlzUGxhaW5PYmplY3QodCl8fHQgaW5zdGFuY2VvZiB0aGlzLmNvbnN0cnVjdG9yKWcodCxlKTtlbHNlIGlmKGkuaXNTdHJpbmcodCkmJih0PXQudHJpbSgpKSYmIWJJKHQpKWcoeHQodCksZSk7ZWxzZSBpZihpLmlzSGVhZGVycyh0KSlmb3IobGV0W0MsUV1vZiB0LmVudHJpZXMoKSlvKFEsQyxJKTtlbHNlIHQhPW51bGwmJm8oZSx0LEkpO3JldHVybiB0aGlzfWdldCh0LGUpe2lmKHQ9ZUEodCksdCl7bGV0IEk9aS5maW5kS2V5KHRoaXMsdCk7aWYoSSl7bGV0IHI9dGhpc1tJXTtpZighZSlyZXR1cm4gcjtpZihlPT09ITApcmV0dXJuIEpJKHIpO2lmKGkuaXNGdW5jdGlvbihlKSlyZXR1cm4gZS5jYWxsKHRoaXMscixJKTtpZihpLmlzUmVnRXhwKGUpKXJldHVybiBlLmV4ZWMocik7dGhyb3cgbmV3IFR5cGVFcnJvcigicGFyc2VyIG11c3QgYmUgYm9vbGVhbnxyZWdleHB8ZnVuY3Rpb24iKX19fWhhcyh0LGUpe2lmKHQ9ZUEodCksdCl7bGV0IEk9aS5maW5kS2V5KHRoaXMsdCk7cmV0dXJuISEoSSYmdGhpc1tJXSE9PXZvaWQgMCYmKCFlfHxYQSh0aGlzLHRoaXNbSV0sSSxlKSkpfXJldHVybiExfWRlbGV0ZSh0LGUpe2xldCBJPXRoaXMscj0hMTtmdW5jdGlvbiBvKGcpe2lmKGc9ZUEoZyksZyl7bGV0IEM9aS5maW5kS2V5KEksZyk7QyYmKCFlfHxYQShJLElbQ10sQyxlKSkmJihkZWxldGUgSVtDXSxyPSEwKX19cmV0dXJuIGkuaXNBcnJheSh0KT90LmZvckVhY2gobyk6byh0KSxyfWNsZWFyKHQpe2xldCBlPU9iamVjdC5rZXlzKHRoaXMpLEk9ZS5sZW5ndGgscj0hMTtmb3IoO0ktLTspe2xldCBvPWVbSV07KCF0fHxYQSh0aGlzLHRoaXNbb10sbyx0LCEwKSkmJihkZWxldGUgdGhpc1tvXSxyPSEwKX1yZXR1cm4gcn1ub3JtYWxpemUodCl7bGV0IGU9dGhpcyxJPXt9O3JldHVybiBpLmZvckVhY2godGhpcywocixvKT0+e2xldCBnPWkuZmluZEtleShJLG8pO2lmKGcpe2VbZ109cEEociksZGVsZXRlIGVbb107cmV0dXJufWxldCBDPXQ/SEkobyk6U3RyaW5nKG8pLnRyaW0oKTtDIT09byYmZGVsZXRlIGVbb10sZVtDXT1wQShyKSxJW0NdPSEwfSksdGhpc31jb25jYXQoLi4udCl7cmV0dXJuIHRoaXMuY29uc3RydWN0b3IuY29uY2F0KHRoaXMsLi4udCl9dG9KU09OKHQpe2xldCBlPU9iamVjdC5jcmVhdGUobnVsbCk7cmV0dXJuIGkuZm9yRWFjaCh0aGlzLChJLHIpPT57SSE9bnVsbCYmSSE9PSExJiYoZVtyXT10JiZpLmlzQXJyYXkoSSk/SS5qb2luKCIsICIpOkkpfSksZX1bU3ltYm9sLml0ZXJhdG9yXSgpe3JldHVybiBPYmplY3QuZW50cmllcyh0aGlzLnRvSlNPTigpKVtTeW1ib2wuaXRlcmF0b3JdKCl9dG9TdHJpbmcoKXtyZXR1cm4gT2JqZWN0LmVudHJpZXModGhpcy50b0pTT04oKSkubWFwKChbdCxlXSk9PnQrIjogIitlKS5qb2luKGAlMEFgKX1nZXRbU3ltYm9sLnRvU3RyaW5nVGFnXSgpe3JldHVybiJBeGlvc0hlYWRlcnMifXN0YXRpYyBmcm9tKHQpe3JldHVybiB0IGluc3RhbmNlb2YgdGhpcz90Om5ldyB0aGlzKHQpfXN0YXRpYyBjb25jYXQodCwuLi5lKXtsZXQgST1uZXcgdGhpcyh0KTtyZXR1cm4gZS5mb3JFYWNoKHI9Pkkuc2V0KHIpKSxJfXN0YXRpYyBhY2Nlc3Nvcih0KXtsZXQgST0odGhpc1tQdF09dGhpc1tQdF09e2FjY2Vzc29yczp7fX0pLmFjY2Vzc29ycyxyPXRoaXMucHJvdG90eXBlO2Z1bmN0aW9uIG8oZyl7bGV0IEM9ZUEoZyk7SVtDXXx8KFlJKHIsZyksSVtDXT0hMCl9cmV0dXJuIGkuaXNBcnJheSh0KT90LmZvckVhY2gobyk6byh0KSx0aGlzfX07Vi5hY2Nlc3NvcihbIkNvbnRlbnQtVHlwZSIsIkNvbnRlbnQtTGVuZ3RoIiwiQWNjZXB0IiwiQWNjZXB0LUVuY29kaW5nIiwiVXNlci1BZ2VudCIsIkF1dGhvcml6YXRpb24iXSk7aS5yZWR1Y2VEZXNjcmlwdG9ycyhWLnByb3RvdHlwZSwoe3ZhbHVlOkF9LHQpPT57bGV0IGU9dFswXS50b1VwcGVyQ2FzZSgpK3Quc2xpY2UoMSk7cmV0dXJue2dldDooKT0+QSxzZXQoSSl7dGhpc1tlXT1JfX19KTtpLmZyZWV6ZU1ldGhvZHMoVik7dmFyIG09VjtmdW5jdGlvbiBJQShBLHQpe2xldCBlPXRoaXN8fFosST10fHxlLHI9bS5mcm9tKEkuaGVhZGVycyksbz1JLmRhdGE7cmV0dXJuIGkuZm9yRWFjaChBLGZ1bmN0aW9uKEMpe289Qy5jYWxsKGUsbyxyLm5vcm1hbGl6ZSgpLHQ/dC5zdGF0dXM6dm9pZCAwKX0pLHIubm9ybWFsaXplKCksb31mdW5jdGlvbiByQShBKXtyZXR1cm4hIShBJiZBLl9fQ0FOQ0VMX18pfWZ1bmN0aW9uIGp0KEEsdCxlKXt1LmNhbGwodGhpcyxBPz8iY2FuY2VsZWQiLHUuRVJSX0NBTkNFTEVELHQsZSksdGhpcy5uYW1lPSJDYW5jZWxlZEVycm9yIn1pLmluaGVyaXRzKGp0LHUse19fQ0FOQ0VMX186ITB9KTt2YXIgYj1qdDtmdW5jdGlvbiBvQShBLHQsZSl7bGV0IEk9ZS5jb25maWcudmFsaWRhdGVTdGF0dXM7IWUuc3RhdHVzfHwhSXx8SShlLnN0YXR1cyk/QShlKTp0KG5ldyB1KCJSZXF1ZXN0IGZhaWxlZCB3aXRoIHN0YXR1cyBjb2RlICIrZS5zdGF0dXMsW3UuRVJSX0JBRF9SRVFVRVNULHUuRVJSX0JBRF9SRVNQT05TRV1bTWF0aC5mbG9vcihlLnN0YXR1cy8xMDApLTRdLGUuY29uZmlnLGUucmVxdWVzdCxlKSl9ZnVuY3Rpb24gekEoQSl7bGV0IHQ9L14oWy0rXFx3XXsxLDI1fSkoOj9cXC9cXC98OikvLmV4ZWMoQSk7cmV0dXJuIHQmJnRbMV18fCIifWZ1bmN0aW9uIHFJKEEsdCl7QT1BfHwxMDtsZXQgZT1uZXcgQXJyYXkoQSksST1uZXcgQXJyYXkoQSkscj0wLG89MCxnO3JldHVybiB0PXQhPT12b2lkIDA/dDoxZTMsZnVuY3Rpb24oUSl7bGV0IGE9RGF0ZS5ub3coKSxuPUlbb107Z3x8KGc9YSksZVtyXT1RLElbcl09YTtsZXQgcz1vLGY9MDtmb3IoO3MhPT1yOylmKz1lW3MrK10scz1zJUE7aWYocj0ocisxKSVBLHI9PT1vJiYobz0obysxKSVBKSxhLWc8dClyZXR1cm47bGV0IEI9biYmYS1uO3JldHVybiBCP01hdGgucm91bmQoZioxZTMvQik6dm9pZCAwfX12YXIgV3Q9cUk7ZnVuY3Rpb24gTUkoQSx0KXtsZXQgZT0wLEk9MWUzL3QscixvLGc9KGEsbj1EYXRlLm5vdygpKT0+e2U9bixyPW51bGwsbyYmKGNsZWFyVGltZW91dChvKSxvPW51bGwpLEEuYXBwbHkobnVsbCxhKX07cmV0dXJuWyguLi5hKT0+e2xldCBuPURhdGUubm93KCkscz1uLWU7cz49ST9nKGEsbik6KHI9YSxvfHwobz1zZXRUaW1lb3V0KCgpPT57bz1udWxsLGcocil9LEktcykpKX0sKCk9PnImJmcocildfXZhciBadD1NSTt2YXIgXz0oQSx0LGU9Myk9PntsZXQgST0wLHI9V3QoNTAsMjUwKTtyZXR1cm4gWnQobz0+e2xldCBnPW8ubG9hZGVkLEM9by5sZW5ndGhDb21wdXRhYmxlP28udG90YWw6dm9pZCAwLFE9Zy1JLGE9cihRKSxuPWc8PUM7ST1nO2xldCBzPXtsb2FkZWQ6Zyx0b3RhbDpDLHByb2dyZXNzOkM/Zy9DOnZvaWQgMCxieXRlczpRLHJhdGU6YXx8dm9pZCAwLGVzdGltYXRlZDphJiZDJiZuPyhDLWcpL2E6dm9pZCAwLGV2ZW50Om8sbGVuZ3RoQ29tcHV0YWJsZTpDIT1udWxsLFt0PyJkb3dubG9hZCI6InVwbG9hZCJdOiEwfTtBKHMpfSxlKX0sdkE9KEEsdCk9PntsZXQgZT1BIT1udWxsO3JldHVybltJPT50WzBdKHtsZW5ndGhDb21wdXRhYmxlOmUsdG90YWw6QSxsb2FkZWQ6SX0pLHRbMV1dfSwkQT1BPT4oLi4udCk9PmkuYXNhcCgoKT0+QSguLi50KSk7dmFyIFZ0PXcuaGFzU3RhbmRhcmRCcm93c2VyRW52P2Z1bmN0aW9uKCl7bGV0IHQ9Lyhtc2llfHRyaWRlbnQpL2kudGVzdChuYXZpZ2F0b3IudXNlckFnZW50KSxlPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImEiKSxJO2Z1bmN0aW9uIHIobyl7bGV0IGc9bztyZXR1cm4gdCYmKGUuc2V0QXR0cmlidXRlKCJocmVmIixnKSxnPWUuaHJlZiksZS5zZXRBdHRyaWJ1dGUoImhyZWYiLGcpLHtocmVmOmUuaHJlZixwcm90b2NvbDplLnByb3RvY29sP2UucHJvdG9jb2wucmVwbGFjZSgvOiQvLCIiKToiIixob3N0OmUuaG9zdCxzZWFyY2g6ZS5zZWFyY2g/ZS5zZWFyY2gucmVwbGFjZSgvXlxcPy8sIiIpOiIiLGhhc2g6ZS5oYXNoP2UuaGFzaC5yZXBsYWNlKC9eJTIzLywiIik6IiIsaG9zdG5hbWU6ZS5ob3N0bmFtZSxwb3J0OmUucG9ydCxwYXRobmFtZTplLnBhdGhuYW1lLmNoYXJBdCgwKT09PSIvIj9lLnBhdGhuYW1lOiIvIitlLnBhdGhuYW1lfX1yZXR1cm4gST1yKHdpbmRvdy5sb2NhdGlvbi5ocmVmKSxmdW5jdGlvbihnKXtsZXQgQz1pLmlzU3RyaW5nKGcpP3IoZyk6ZztyZXR1cm4gQy5wcm90b2NvbD09PUkucHJvdG9jb2wmJkMuaG9zdD09PUkuaG9zdH19KCk6ZnVuY3Rpb24oKXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4hMH19KCk7dmFyIF90PXcuaGFzU3RhbmRhcmRCcm93c2VyRW52P3t3cml0ZShBLHQsZSxJLHIsbyl7bGV0IGc9W0ErIj0iK2VuY29kZVVSSUNvbXBvbmVudCh0KV07aS5pc051bWJlcihlKSYmZy5wdXNoKCJleHBpcmVzPSIrbmV3IERhdGUoZSkudG9HTVRTdHJpbmcoKSksaS5pc1N0cmluZyhJKSYmZy5wdXNoKCJwYXRoPSIrSSksaS5pc1N0cmluZyhyKSYmZy5wdXNoKCJkb21haW49IityKSxvPT09ITAmJmcucHVzaCgic2VjdXJlIiksZG9jdW1lbnQuY29va2llPWcuam9pbigiOyAiKX0scmVhZChBKXtsZXQgdD1kb2N1bWVudC5jb29raWUubWF0Y2gobmV3IFJlZ0V4cCgiKF58O1xcXFxzKikoIitBKyIpPShbXjtdKikiKSk7cmV0dXJuIHQ/ZGVjb2RlVVJJQ29tcG9uZW50KHRbM10pOm51bGx9LHJlbW92ZShBKXt0aGlzLndyaXRlKEEsIiIsRGF0ZS5ub3coKS04NjRlNSl9fTp7d3JpdGUoKXt9LHJlYWQoKXtyZXR1cm4gbnVsbH0scmVtb3ZlKCl7fX07ZnVuY3Rpb24gQXQoQSl7cmV0dXJuL14oW2Etel1bYS16XFxkK1xcLS5dKjopP1xcL1xcLy9pLnRlc3QoQSl9ZnVuY3Rpb24gdHQoQSx0KXtyZXR1cm4gdD9BLnJlcGxhY2UoL1xcLz9cXC8kLywiIikrIi8iK3QucmVwbGFjZSgvXlxcLysvLCIiKTpBfWZ1bmN0aW9uIGdBKEEsdCl7cmV0dXJuIEEmJiFBdCh0KT90dChBLHQpOnR9dmFyIFh0PUE9PkEgaW5zdGFuY2VvZiBtP3suLi5BfTpBO2Z1bmN0aW9uIGsoQSx0KXt0PXR8fHt9O2xldCBlPXt9O2Z1bmN0aW9uIEkoYSxuLHMpe3JldHVybiBpLmlzUGxhaW5PYmplY3QoYSkmJmkuaXNQbGFpbk9iamVjdChuKT9pLm1lcmdlLmNhbGwoe2Nhc2VsZXNzOnN9LGEsbik6aS5pc1BsYWluT2JqZWN0KG4pP2kubWVyZ2Uoe30sbik6aS5pc0FycmF5KG4pP24uc2xpY2UoKTpufWZ1bmN0aW9uIHIoYSxuLHMpe2lmKGkuaXNVbmRlZmluZWQobikpe2lmKCFpLmlzVW5kZWZpbmVkKGEpKXJldHVybiBJKHZvaWQgMCxhLHMpfWVsc2UgcmV0dXJuIEkoYSxuLHMpfWZ1bmN0aW9uIG8oYSxuKXtpZighaS5pc1VuZGVmaW5lZChuKSlyZXR1cm4gSSh2b2lkIDAsbil9ZnVuY3Rpb24gZyhhLG4pe2lmKGkuaXNVbmRlZmluZWQobikpe2lmKCFpLmlzVW5kZWZpbmVkKGEpKXJldHVybiBJKHZvaWQgMCxhKX1lbHNlIHJldHVybiBJKHZvaWQgMCxuKX1mdW5jdGlvbiBDKGEsbixzKXtpZihzIGluIHQpcmV0dXJuIEkoYSxuKTtpZihzIGluIEEpcmV0dXJuIEkodm9pZCAwLGEpfWxldCBRPXt1cmw6byxtZXRob2Q6byxkYXRhOm8sYmFzZVVSTDpnLHRyYW5zZm9ybVJlcXVlc3Q6Zyx0cmFuc2Zvcm1SZXNwb25zZTpnLHBhcmFtc1NlcmlhbGl6ZXI6Zyx0aW1lb3V0OmcsdGltZW91dE1lc3NhZ2U6Zyx3aXRoQ3JlZGVudGlhbHM6Zyx3aXRoWFNSRlRva2VuOmcsYWRhcHRlcjpnLHJlc3BvbnNlVHlwZTpnLHhzcmZDb29raWVOYW1lOmcseHNyZkhlYWRlck5hbWU6ZyxvblVwbG9hZFByb2dyZXNzOmcsb25Eb3dubG9hZFByb2dyZXNzOmcsZGVjb21wcmVzczpnLG1heENvbnRlbnRMZW5ndGg6ZyxtYXhCb2R5TGVuZ3RoOmcsYmVmb3JlUmVkaXJlY3Q6Zyx0cmFuc3BvcnQ6ZyxodHRwQWdlbnQ6ZyxodHRwc0FnZW50OmcsY2FuY2VsVG9rZW46Zyxzb2NrZXRQYXRoOmcscmVzcG9uc2VFbmNvZGluZzpnLHZhbGlkYXRlU3RhdHVzOkMsaGVhZGVyczooYSxuKT0+cihYdChhKSxYdChuKSwhMCl9O3JldHVybiBpLmZvckVhY2goT2JqZWN0LmtleXMoT2JqZWN0LmFzc2lnbih7fSxBLHQpKSxmdW5jdGlvbihuKXtsZXQgcz1RW25dfHxyLGY9cyhBW25dLHRbbl0sbik7aS5pc1VuZGVmaW5lZChmKSYmcyE9PUN8fChlW25dPWYpfSksZX12YXIgU0E9QT0+e2xldCB0PWsoe30sQSkse2RhdGE6ZSx3aXRoWFNSRlRva2VuOkkseHNyZkhlYWRlck5hbWU6cix4c3JmQ29va2llTmFtZTpvLGhlYWRlcnM6ZyxhdXRoOkN9PXQ7dC5oZWFkZXJzPWc9bS5mcm9tKGcpLHQudXJsPXRBKGdBKHQuYmFzZVVSTCx0LnVybCksQS5wYXJhbXMsQS5wYXJhbXNTZXJpYWxpemVyKSxDJiZnLnNldCgiQXV0aG9yaXphdGlvbiIsIkJhc2ljICIrYnRvYSgoQy51c2VybmFtZXx8IiIpKyI6IisoQy5wYXNzd29yZD91bmVzY2FwZShlbmNvZGVVUklDb21wb25lbnQoQy5wYXNzd29yZCkpOiIiKSkpO2xldCBRO2lmKGkuaXNGb3JtRGF0YShlKSl7aWYody5oYXNTdGFuZGFyZEJyb3dzZXJFbnZ8fHcuaGFzU3RhbmRhcmRCcm93c2VyV2ViV29ya2VyRW52KWcuc2V0Q29udGVudFR5cGUodm9pZCAwKTtlbHNlIGlmKChRPWcuZ2V0Q29udGVudFR5cGUoKSkhPT0hMSl7bGV0W2EsLi4ubl09UT9RLnNwbGl0KCI7IikubWFwKHM9PnMudHJpbSgpKS5maWx0ZXIoQm9vbGVhbik6W107Zy5zZXRDb250ZW50VHlwZShbYXx8Im11bHRpcGFydC9mb3JtLWRhdGEiLC4uLm5dLmpvaW4oIjsgIikpfX1pZih3Lmhhc1N0YW5kYXJkQnJvd3NlckVudiYmKEkmJmkuaXNGdW5jdGlvbihJKSYmKEk9SSh0KSksSXx8SSE9PSExJiZWdCh0LnVybCkpKXtsZXQgYT1yJiZvJiZfdC5yZWFkKG8pO2EmJmcuc2V0KHIsYSl9cmV0dXJuIHR9O3ZhciBUST10eXBlb2YgWE1MSHR0cFJlcXVlc3Q8InUiLHp0PVRJJiZmdW5jdGlvbihBKXtyZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24oZSxJKXtsZXQgcj1TQShBKSxvPXIuZGF0YSxnPW0uZnJvbShyLmhlYWRlcnMpLm5vcm1hbGl6ZSgpLHtyZXNwb25zZVR5cGU6QyxvblVwbG9hZFByb2dyZXNzOlEsb25Eb3dubG9hZFByb2dyZXNzOmF9PXIsbixzLGYsQixFO2Z1bmN0aW9uIGwoKXtCJiZCKCksRSYmRSgpLHIuY2FuY2VsVG9rZW4mJnIuY2FuY2VsVG9rZW4udW5zdWJzY3JpYmUobiksci5zaWduYWwmJnIuc2lnbmFsLnJlbW92ZUV2ZW50TGlzdGVuZXIoImFib3J0IixuKX1sZXQgYz1uZXcgWE1MSHR0cFJlcXVlc3Q7Yy5vcGVuKHIubWV0aG9kLnRvVXBwZXJDYXNlKCksci51cmwsITApLGMudGltZW91dD1yLnRpbWVvdXQ7ZnVuY3Rpb24gcCgpe2lmKCFjKXJldHVybjtsZXQgRD1tLmZyb20oImdldEFsbFJlc3BvbnNlSGVhZGVycyJpbiBjJiZjLmdldEFsbFJlc3BvbnNlSGVhZGVycygpKSxLPXtkYXRhOiFDfHxDPT09InRleHQifHxDPT09Impzb24iP2MucmVzcG9uc2VUZXh0OmMucmVzcG9uc2Usc3RhdHVzOmMuc3RhdHVzLHN0YXR1c1RleHQ6Yy5zdGF0dXNUZXh0LGhlYWRlcnM6RCxjb25maWc6QSxyZXF1ZXN0OmN9O29BKGZ1bmN0aW9uKEope2UoSiksbCgpfSxmdW5jdGlvbihKKXtJKEopLGwoKX0sSyksYz1udWxsfSJvbmxvYWRlbmQiaW4gYz9jLm9ubG9hZGVuZD1wOmMub25yZWFkeXN0YXRlY2hhbmdlPWZ1bmN0aW9uKCl7IWN8fGMucmVhZHlTdGF0ZSE9PTR8fGMuc3RhdHVzPT09MCYmIShjLnJlc3BvbnNlVVJMJiZjLnJlc3BvbnNlVVJMLmluZGV4T2YoImZpbGU6Iik9PT0wKXx8c2V0VGltZW91dChwKX0sYy5vbmFib3J0PWZ1bmN0aW9uKCl7YyYmKEkobmV3IHUoIlJlcXVlc3QgYWJvcnRlZCIsdS5FQ09OTkFCT1JURUQsQSxjKSksYz1udWxsKX0sYy5vbmVycm9yPWZ1bmN0aW9uKCl7SShuZXcgdSgiTmV0d29yayBFcnJvciIsdS5FUlJfTkVUV09SSyxBLGMpKSxjPW51bGx9LGMub250aW1lb3V0PWZ1bmN0aW9uKCl7bGV0IFU9ci50aW1lb3V0PyJ0aW1lb3V0IG9mICIrci50aW1lb3V0KyJtcyBleGNlZWRlZCI6InRpbWVvdXQgZXhjZWVkZWQiLEs9ci50cmFuc2l0aW9uYWx8fG1BO3IudGltZW91dEVycm9yTWVzc2FnZSYmKFU9ci50aW1lb3V0RXJyb3JNZXNzYWdlKSxJKG5ldyB1KFUsSy5jbGFyaWZ5VGltZW91dEVycm9yP3UuRVRJTUVET1VUOnUuRUNPTk5BQk9SVEVELEEsYykpLGM9bnVsbH0sbz09PXZvaWQgMCYmZy5zZXRDb250ZW50VHlwZShudWxsKSwic2V0UmVxdWVzdEhlYWRlciJpbiBjJiZpLmZvckVhY2goZy50b0pTT04oKSxmdW5jdGlvbihVLEspe2Muc2V0UmVxdWVzdEhlYWRlcihLLFUpfSksaS5pc1VuZGVmaW5lZChyLndpdGhDcmVkZW50aWFscyl8fChjLndpdGhDcmVkZW50aWFscz0hIXIud2l0aENyZWRlbnRpYWxzKSxDJiZDIT09Impzb24iJiYoYy5yZXNwb25zZVR5cGU9ci5yZXNwb25zZVR5cGUpLGEmJihbZixFXT1fKGEsITApLGMuYWRkRXZlbnRMaXN0ZW5lcigicHJvZ3Jlc3MiLGYpKSxRJiZjLnVwbG9hZCYmKFtzLEJdPV8oUSksYy51cGxvYWQuYWRkRXZlbnRMaXN0ZW5lcigicHJvZ3Jlc3MiLHMpLGMudXBsb2FkLmFkZEV2ZW50TGlzdGVuZXIoImxvYWRlbmQiLEIpKSwoci5jYW5jZWxUb2tlbnx8ci5zaWduYWwpJiYobj1EPT57YyYmKEkoIUR8fEQudHlwZT9uZXcgYihudWxsLEEsYyk6RCksYy5hYm9ydCgpLGM9bnVsbCl9LHIuY2FuY2VsVG9rZW4mJnIuY2FuY2VsVG9rZW4uc3Vic2NyaWJlKG4pLHIuc2lnbmFsJiYoci5zaWduYWwuYWJvcnRlZD9uKCk6ci5zaWduYWwuYWRkRXZlbnRMaXN0ZW5lcigiYWJvcnQiLG4pKSk7bGV0IFM9ekEoci51cmwpO2lmKFMmJncucHJvdG9jb2xzLmluZGV4T2YoUyk9PT0tMSl7SShuZXcgdSgiVW5zdXBwb3J0ZWQgcHJvdG9jb2wgIitTKyI6Iix1LkVSUl9CQURfUkVRVUVTVCxBKSk7cmV0dXJufWMuc2VuZChvfHxudWxsKX0pfTt2YXIgS0k9KEEsdCk9PntsZXQgZT1uZXcgQWJvcnRDb250cm9sbGVyLEkscj1mdW5jdGlvbihRKXtpZighSSl7ST0hMCxnKCk7bGV0IGE9USBpbnN0YW5jZW9mIEVycm9yP1E6dGhpcy5yZWFzb247ZS5hYm9ydChhIGluc3RhbmNlb2YgdT9hOm5ldyBiKGEgaW5zdGFuY2VvZiBFcnJvcj9hLm1lc3NhZ2U6YSkpfX0sbz10JiZzZXRUaW1lb3V0KCgpPT57cihuZXcgdShgdGltZW91dCAke3R9IG9mIG1zIGV4Y2VlZGVkYCx1LkVUSU1FRE9VVCkpfSx0KSxnPSgpPT57QSYmKG8mJmNsZWFyVGltZW91dChvKSxvPW51bGwsQS5mb3JFYWNoKFE9PntRJiYoUS5yZW1vdmVFdmVudExpc3RlbmVyP1EucmVtb3ZlRXZlbnRMaXN0ZW5lcigiYWJvcnQiLHIpOlEudW5zdWJzY3JpYmUocikpfSksQT1udWxsKX07QS5mb3JFYWNoKFE9PlEmJlEuYWRkRXZlbnRMaXN0ZW5lciYmUS5hZGRFdmVudExpc3RlbmVyKCJhYm9ydCIscikpO2xldHtzaWduYWw6Q309ZTtyZXR1cm4gQy51bnN1YnNjcmliZT1nLFtDLCgpPT57byYmY2xlYXJUaW1lb3V0KG8pLG89bnVsbH1dfSx2dD1LSTt2YXIgT0k9ZnVuY3Rpb24qKEEsdCl7bGV0IGU9QS5ieXRlTGVuZ3RoO2lmKCF0fHxlPHQpe3lpZWxkIEE7cmV0dXJufWxldCBJPTAscjtmb3IoO0k8ZTspcj1JK3QseWllbGQgQS5zbGljZShJLHIpLEk9cn0seEk9YXN5bmMgZnVuY3Rpb24qKEEsdCxlKXtmb3IgYXdhaXQobGV0IEkgb2YgQSl5aWVsZCpPSShBcnJheUJ1ZmZlci5pc1ZpZXcoSSk/STphd2FpdCBlKFN0cmluZyhJKSksdCl9LGV0PShBLHQsZSxJLHIpPT57bGV0IG89eEkoQSx0LHIpLGc9MCxDLFE9YT0+e0N8fChDPSEwLEkmJkkoYSkpfTtyZXR1cm4gbmV3IFJlYWRhYmxlU3RyZWFtKHthc3luYyBwdWxsKGEpe3RyeXtsZXR7ZG9uZTpuLHZhbHVlOnN9PWF3YWl0IG8ubmV4dCgpO2lmKG4pe1EoKSxhLmNsb3NlKCk7cmV0dXJufWxldCBmPXMuYnl0ZUxlbmd0aDtpZihlKXtsZXQgQj1nKz1mO2UoQil9YS5lbnF1ZXVlKG5ldyBVaW50OEFycmF5KHMpKX1jYXRjaChuKXt0aHJvdyBRKG4pLG59fSxjYW5jZWwoYSl7cmV0dXJuIFEoYSksby5yZXR1cm4oKX19LHtoaWdoV2F0ZXJNYXJrOjJ9KX07dmFyIFJBPXR5cGVvZiBmZXRjaD09ImZ1bmN0aW9uIiYmdHlwZW9mIFJlcXVlc3Q9PSJmdW5jdGlvbiImJnR5cGVvZiBSZXNwb25zZT09ImZ1bmN0aW9uIixBZT1SQSYmdHlwZW9mIFJlYWRhYmxlU3RyZWFtPT0iZnVuY3Rpb24iLEl0PVJBJiYodHlwZW9mIFRleHRFbmNvZGVyPT0iZnVuY3Rpb24iPyhBPT50PT5BLmVuY29kZSh0KSkobmV3IFRleHRFbmNvZGVyKTphc3luYyBBPT5uZXcgVWludDhBcnJheShhd2FpdCBuZXcgUmVzcG9uc2UoQSkuYXJyYXlCdWZmZXIoKSkpLHRlPShBLC4uLnQpPT57dHJ5e3JldHVybiEhQSguLi50KX1jYXRjaHtyZXR1cm4hMX19LFBJPUFlJiZ0ZSgoKT0+e2xldCBBPSExLHQ9bmV3IFJlcXVlc3Qody5vcmlnaW4se2JvZHk6bmV3IFJlYWRhYmxlU3RyZWFtLG1ldGhvZDoiUE9TVCIsZ2V0IGR1cGxleCgpe3JldHVybiBBPSEwLCJoYWxmIn19KS5oZWFkZXJzLmhhcygiQ29udGVudC1UeXBlIik7cmV0dXJuIEEmJiF0fSksJHQ9NjQqMTAyNCxydD1BZSYmdGUoKCk9PmkuaXNSZWFkYWJsZVN0cmVhbShuZXcgUmVzcG9uc2UoIiIpLmJvZHkpKSxGQT17c3RyZWFtOnJ0JiYoQT0+QS5ib2R5KX07UkEmJihBPT57WyJ0ZXh0IiwiYXJyYXlCdWZmZXIiLCJibG9iIiwiZm9ybURhdGEiLCJzdHJlYW0iXS5mb3JFYWNoKHQ9PnshRkFbdF0mJihGQVt0XT1pLmlzRnVuY3Rpb24oQVt0XSk/ZT0+ZVt0XSgpOihlLEkpPT57dGhyb3cgbmV3IHUoYFJlc3BvbnNlIHR5cGUgXCcke3R9XCcgaXMgbm90IHN1cHBvcnRlZGAsdS5FUlJfTk9UX1NVUFBPUlQsSSl9KX0pfSkobmV3IFJlc3BvbnNlKTt2YXIgakk9YXN5bmMgQT0+e2lmKEE9PW51bGwpcmV0dXJuIDA7aWYoaS5pc0Jsb2IoQSkpcmV0dXJuIEEuc2l6ZTtpZihpLmlzU3BlY0NvbXBsaWFudEZvcm0oQSkpcmV0dXJuKGF3YWl0IG5ldyBSZXF1ZXN0KEEpLmFycmF5QnVmZmVyKCkpLmJ5dGVMZW5ndGg7aWYoaS5pc0FycmF5QnVmZmVyVmlldyhBKXx8aS5pc0FycmF5QnVmZmVyKEEpKXJldHVybiBBLmJ5dGVMZW5ndGg7aWYoaS5pc1VSTFNlYXJjaFBhcmFtcyhBKSYmKEE9QSsiIiksaS5pc1N0cmluZyhBKSlyZXR1cm4oYXdhaXQgSXQoQSkpLmJ5dGVMZW5ndGh9LFdJPWFzeW5jKEEsdCk9PntsZXQgZT1pLnRvRmluaXRlTnVtYmVyKEEuZ2V0Q29udGVudExlbmd0aCgpKTtyZXR1cm4gZT8/akkodCl9LGVlPVJBJiYoYXN5bmMgQT0+e2xldHt1cmw6dCxtZXRob2Q6ZSxkYXRhOkksc2lnbmFsOnIsY2FuY2VsVG9rZW46byx0aW1lb3V0Omcsb25Eb3dubG9hZFByb2dyZXNzOkMsb25VcGxvYWRQcm9ncmVzczpRLHJlc3BvbnNlVHlwZTphLGhlYWRlcnM6bix3aXRoQ3JlZGVudGlhbHM6cz0ic2FtZS1vcmlnaW4iLGZldGNoT3B0aW9uczpmfT1TQShBKTthPWE/KGErIiIpLnRvTG93ZXJDYXNlKCk6InRleHQiO2xldFtCLEVdPXJ8fG98fGc/dnQoW3Isb10sZyk6W10sbCxjLHA9KCk9PnshbCYmc2V0VGltZW91dCgoKT0+e0ImJkIudW5zdWJzY3JpYmUoKX0pLGw9ITB9LFM7dHJ5e2lmKFEmJlBJJiZlIT09ImdldCImJmUhPT0iaGVhZCImJihTPWF3YWl0IFdJKG4sSSkpIT09MCl7bGV0IEw9bmV3IFJlcXVlc3QodCx7bWV0aG9kOiJQT1NUIixib2R5OkksZHVwbGV4OiJoYWxmIn0pLEo7aWYoaS5pc0Zvcm1EYXRhKEkpJiYoSj1MLmhlYWRlcnMuZ2V0KCJjb250ZW50LXR5cGUiKSkmJm4uc2V0Q29udGVudFR5cGUoSiksTC5ib2R5KXtsZXRbSEEsQ0FdPXZBKFMsXygkQShRKSkpO0k9ZXQoTC5ib2R5LCR0LEhBLENBLEl0KX19aS5pc1N0cmluZyhzKXx8KHM9cz8iaW5jbHVkZSI6Im9taXQiKSxjPW5ldyBSZXF1ZXN0KHQsey4uLmYsc2lnbmFsOkIsbWV0aG9kOmUudG9VcHBlckNhc2UoKSxoZWFkZXJzOm4ubm9ybWFsaXplKCkudG9KU09OKCksYm9keTpJLGR1cGxleDoiaGFsZiIsY3JlZGVudGlhbHM6c30pO2xldCBEPWF3YWl0IGZldGNoKGMpLFU9cnQmJihhPT09InN0cmVhbSJ8fGE9PT0icmVzcG9uc2UiKTtpZihydCYmKEN8fFUpKXtsZXQgTD17fTtbInN0YXR1cyIsInN0YXR1c1RleHQiLCJoZWFkZXJzIl0uZm9yRWFjaChFdD0+e0xbRXRdPURbRXRdfSk7bGV0IEo9aS50b0Zpbml0ZU51bWJlcihELmhlYWRlcnMuZ2V0KCJjb250ZW50LWxlbmd0aCIpKSxbSEEsQ0FdPUMmJnZBKEosXygkQShDKSwhMCkpfHxbXTtEPW5ldyBSZXNwb25zZShldChELmJvZHksJHQsSEEsKCk9PntDQSYmQ0EoKSxVJiZwKCl9LEl0KSxMKX1hPWF8fCJ0ZXh0IjtsZXQgSz1hd2FpdCBGQVtpLmZpbmRLZXkoRkEsYSl8fCJ0ZXh0Il0oRCxBKTtyZXR1cm4hVSYmcCgpLEUmJkUoKSxhd2FpdCBuZXcgUHJvbWlzZSgoTCxKKT0+e29BKEwsSix7ZGF0YTpLLGhlYWRlcnM6bS5mcm9tKEQuaGVhZGVycyksc3RhdHVzOkQuc3RhdHVzLHN0YXR1c1RleHQ6RC5zdGF0dXNUZXh0LGNvbmZpZzpBLHJlcXVlc3Q6Y30pfSl9Y2F0Y2goRCl7dGhyb3cgcCgpLEQmJkQubmFtZT09PSJUeXBlRXJyb3IiJiYvZmV0Y2gvaS50ZXN0KEQubWVzc2FnZSk/T2JqZWN0LmFzc2lnbihuZXcgdSgiTmV0d29yayBFcnJvciIsdS5FUlJfTkVUV09SSyxBLGMpLHtjYXVzZTpELmNhdXNlfHxEfSk6dS5mcm9tKEQsRCYmRC5jb2RlLEEsYyl9fSk7dmFyIG90PXtodHRwOmRBLHhocjp6dCxmZXRjaDplZX07aS5mb3JFYWNoKG90LChBLHQpPT57aWYoQSl7dHJ5e09iamVjdC5kZWZpbmVQcm9wZXJ0eShBLCJuYW1lIix7dmFsdWU6dH0pfWNhdGNoe31PYmplY3QuZGVmaW5lUHJvcGVydHkoQSwiYWRhcHRlck5hbWUiLHt2YWx1ZTp0fSl9fSk7dmFyIEllPUE9PmAtICR7QX1gLFpJPUE9PmkuaXNGdW5jdGlvbihBKXx8QT09PW51bGx8fEE9PT0hMSxOQT17Z2V0QWRhcHRlcjpBPT57QT1pLmlzQXJyYXkoQSk/QTpbQV07bGV0e2xlbmd0aDp0fT1BLGUsSSxyPXt9O2ZvcihsZXQgbz0wO288dDtvKyspe2U9QVtvXTtsZXQgZztpZihJPWUsIVpJKGUpJiYoST1vdFsoZz1TdHJpbmcoZSkpLnRvTG93ZXJDYXNlKCldLEk9PT12b2lkIDApKXRocm93IG5ldyB1KGBVbmtub3duIGFkYXB0ZXIgXCcke2d9XCdgKTtpZihJKWJyZWFrO3JbZ3x8IiUyMyIrb109SX1pZighSSl7bGV0IG89T2JqZWN0LmVudHJpZXMocikubWFwKChbQyxRXSk9PmBhZGFwdGVyICR7Q30gYCsoUT09PSExPyJpcyBub3Qgc3VwcG9ydGVkIGJ5IHRoZSBlbnZpcm9ubWVudCI6ImlzIG5vdCBhdmFpbGFibGUgaW4gdGhlIGJ1aWxkIikpLGc9dD9vLmxlbmd0aD4xP2BzaW5jZSA6JTBBYCtvLm1hcChJZSkuam9pbihgJTBBYCk6IiAiK0llKG9bMF0pOiJhcyBubyBhZGFwdGVyIHNwZWNpZmllZCI7dGhyb3cgbmV3IHUoIlRoZXJlIGlzIG5vIHN1aXRhYmxlIGFkYXB0ZXIgdG8gZGlzcGF0Y2ggdGhlIHJlcXVlc3QgIitnLCJFUlJfTk9UX1NVUFBPUlQiKX1yZXR1cm4gSX0sYWRhcHRlcnM6b3R9O2Z1bmN0aW9uIGd0KEEpe2lmKEEuY2FuY2VsVG9rZW4mJkEuY2FuY2VsVG9rZW4udGhyb3dJZlJlcXVlc3RlZCgpLEEuc2lnbmFsJiZBLnNpZ25hbC5hYm9ydGVkKXRocm93IG5ldyBiKG51bGwsQSl9ZnVuY3Rpb24gVUEoQSl7cmV0dXJuIGd0KEEpLEEuaGVhZGVycz1tLmZyb20oQS5oZWFkZXJzKSxBLmRhdGE9SUEuY2FsbChBLEEudHJhbnNmb3JtUmVxdWVzdCksWyJwb3N0IiwicHV0IiwicGF0Y2giXS5pbmRleE9mKEEubWV0aG9kKSE9PS0xJiZBLmhlYWRlcnMuc2V0Q29udGVudFR5cGUoImFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCIsITEpLE5BLmdldEFkYXB0ZXIoQS5hZGFwdGVyfHxaLmFkYXB0ZXIpKEEpLnRoZW4oZnVuY3Rpb24oSSl7cmV0dXJuIGd0KEEpLEkuZGF0YT1JQS5jYWxsKEEsQS50cmFuc2Zvcm1SZXNwb25zZSxJKSxJLmhlYWRlcnM9bS5mcm9tKEkuaGVhZGVycyksSX0sZnVuY3Rpb24oSSl7cmV0dXJuIHJBKEkpfHwoZ3QoQSksSSYmSS5yZXNwb25zZSYmKEkucmVzcG9uc2UuZGF0YT1JQS5jYWxsKEEsQS50cmFuc2Zvcm1SZXNwb25zZSxJLnJlc3BvbnNlKSxJLnJlc3BvbnNlLmhlYWRlcnM9bS5mcm9tKEkucmVzcG9uc2UuaGVhZGVycykpKSxQcm9taXNlLnJlamVjdChJKX0pfXZhciBHQT0iMS43LjQiO3ZhciBpdD17fTtbIm9iamVjdCIsImJvb2xlYW4iLCJudW1iZXIiLCJmdW5jdGlvbiIsInN0cmluZyIsInN5bWJvbCJdLmZvckVhY2goKEEsdCk9PntpdFtBXT1mdW5jdGlvbihJKXtyZXR1cm4gdHlwZW9mIEk9PT1BfHwiYSIrKHQ8MT8ibiAiOiIgIikrQX19KTt2YXIgcmU9e307aXQudHJhbnNpdGlvbmFsPWZ1bmN0aW9uKHQsZSxJKXtmdW5jdGlvbiByKG8sZyl7cmV0dXJuIltBeGlvcyB2IitHQSsiXSBUcmFuc2l0aW9uYWwgb3B0aW9uIFwnIitvKyJcJyIrZysoST8iLiAiK0k6IiIpfXJldHVybihvLGcsQyk9PntpZih0PT09ITEpdGhyb3cgbmV3IHUocihnLCIgaGFzIGJlZW4gcmVtb3ZlZCIrKGU/IiBpbiAiK2U6IiIpKSx1LkVSUl9ERVBSRUNBVEVEKTtyZXR1cm4gZSYmIXJlW2ddJiYocmVbZ109ITAsY29uc29sZS53YXJuKHIoZywiIGhhcyBiZWVuIGRlcHJlY2F0ZWQgc2luY2UgdiIrZSsiIGFuZCB3aWxsIGJlIHJlbW92ZWQgaW4gdGhlIG5lYXIgZnV0dXJlIikpKSx0P3QobyxnLEMpOiEwfX07ZnVuY3Rpb24gVkkoQSx0LGUpe2lmKHR5cGVvZiBBIT0ib2JqZWN0Iil0aHJvdyBuZXcgdSgib3B0aW9ucyBtdXN0IGJlIGFuIG9iamVjdCIsdS5FUlJfQkFEX09QVElPTl9WQUxVRSk7bGV0IEk9T2JqZWN0LmtleXMoQSkscj1JLmxlbmd0aDtmb3IoO3ItLSA+MDspe2xldCBvPUlbcl0sZz10W29dO2lmKGcpe2xldCBDPUFbb10sUT1DPT09dm9pZCAwfHxnKEMsbyxBKTtpZihRIT09ITApdGhyb3cgbmV3IHUoIm9wdGlvbiAiK28rIiBtdXN0IGJlICIrUSx1LkVSUl9CQURfT1BUSU9OX1ZBTFVFKTtjb250aW51ZX1pZihlIT09ITApdGhyb3cgbmV3IHUoIlVua25vd24gb3B0aW9uICIrbyx1LkVSUl9CQURfT1BUSU9OKX19dmFyIGtBPXthc3NlcnRPcHRpb25zOlZJLHZhbGlkYXRvcnM6aXR9O3ZhciBNPWtBLnZhbGlkYXRvcnMsWD1jbGFzc3tjb25zdHJ1Y3Rvcih0KXt0aGlzLmRlZmF1bHRzPXQsdGhpcy5pbnRlcmNlcHRvcnM9e3JlcXVlc3Q6bmV3IGpBLHJlc3BvbnNlOm5ldyBqQX19YXN5bmMgcmVxdWVzdCh0LGUpe3RyeXtyZXR1cm4gYXdhaXQgdGhpcy5fcmVxdWVzdCh0LGUpfWNhdGNoKEkpe2lmKEkgaW5zdGFuY2VvZiBFcnJvcil7bGV0IHI7RXJyb3IuY2FwdHVyZVN0YWNrVHJhY2U/RXJyb3IuY2FwdHVyZVN0YWNrVHJhY2Uocj17fSk6cj1uZXcgRXJyb3I7bGV0IG89ci5zdGFjaz9yLnN0YWNrLnJlcGxhY2UoL14uK1xcbi8sIiIpOiIiO3RyeXtJLnN0YWNrP28mJiFTdHJpbmcoSS5zdGFjaykuZW5kc1dpdGgoby5yZXBsYWNlKC9eLitcXG4uK1xcbi8sIiIpKSYmKEkuc3RhY2srPWAlMEFgK28pOkkuc3RhY2s9b31jYXRjaHt9fXRocm93IEl9fV9yZXF1ZXN0KHQsZSl7dHlwZW9mIHQ9PSJzdHJpbmciPyhlPWV8fHt9LGUudXJsPXQpOmU9dHx8e30sZT1rKHRoaXMuZGVmYXVsdHMsZSk7bGV0e3RyYW5zaXRpb25hbDpJLHBhcmFtc1NlcmlhbGl6ZXI6cixoZWFkZXJzOm99PWU7SSE9PXZvaWQgMCYma0EuYXNzZXJ0T3B0aW9ucyhJLHtzaWxlbnRKU09OUGFyc2luZzpNLnRyYW5zaXRpb25hbChNLmJvb2xlYW4pLGZvcmNlZEpTT05QYXJzaW5nOk0udHJhbnNpdGlvbmFsKE0uYm9vbGVhbiksY2xhcmlmeVRpbWVvdXRFcnJvcjpNLnRyYW5zaXRpb25hbChNLmJvb2xlYW4pfSwhMSksciE9bnVsbCYmKGkuaXNGdW5jdGlvbihyKT9lLnBhcmFtc1NlcmlhbGl6ZXI9e3NlcmlhbGl6ZTpyfTprQS5hc3NlcnRPcHRpb25zKHIse2VuY29kZTpNLmZ1bmN0aW9uLHNlcmlhbGl6ZTpNLmZ1bmN0aW9ufSwhMCkpLGUubWV0aG9kPShlLm1ldGhvZHx8dGhpcy5kZWZhdWx0cy5tZXRob2R8fCJnZXQiKS50b0xvd2VyQ2FzZSgpO2xldCBnPW8mJmkubWVyZ2Uoby5jb21tb24sb1tlLm1ldGhvZF0pO28mJmkuZm9yRWFjaChbImRlbGV0ZSIsImdldCIsImhlYWQiLCJwb3N0IiwicHV0IiwicGF0Y2giLCJjb21tb24iXSxFPT57ZGVsZXRlIG9bRV19KSxlLmhlYWRlcnM9bS5jb25jYXQoZyxvKTtsZXQgQz1bXSxRPSEwO3RoaXMuaW50ZXJjZXB0b3JzLnJlcXVlc3QuZm9yRWFjaChmdW5jdGlvbihsKXt0eXBlb2YgbC5ydW5XaGVuPT0iZnVuY3Rpb24iJiZsLnJ1bldoZW4oZSk9PT0hMXx8KFE9USYmbC5zeW5jaHJvbm91cyxDLnVuc2hpZnQobC5mdWxmaWxsZWQsbC5yZWplY3RlZCkpfSk7bGV0IGE9W107dGhpcy5pbnRlcmNlcHRvcnMucmVzcG9uc2UuZm9yRWFjaChmdW5jdGlvbihsKXthLnB1c2gobC5mdWxmaWxsZWQsbC5yZWplY3RlZCl9KTtsZXQgbixzPTAsZjtpZighUSl7bGV0IEU9W1VBLmJpbmQodGhpcyksdm9pZCAwXTtmb3IoRS51bnNoaWZ0LmFwcGx5KEUsQyksRS5wdXNoLmFwcGx5KEUsYSksZj1FLmxlbmd0aCxuPVByb21pc2UucmVzb2x2ZShlKTtzPGY7KW49bi50aGVuKEVbcysrXSxFW3MrK10pO3JldHVybiBufWY9Qy5sZW5ndGg7bGV0IEI9ZTtmb3Iocz0wO3M8Zjspe2xldCBFPUNbcysrXSxsPUNbcysrXTt0cnl7Qj1FKEIpfWNhdGNoKGMpe2wuY2FsbCh0aGlzLGMpO2JyZWFrfX10cnl7bj1VQS5jYWxsKHRoaXMsQil9Y2F0Y2goRSl7cmV0dXJuIFByb21pc2UucmVqZWN0KEUpfWZvcihzPTAsZj1hLmxlbmd0aDtzPGY7KW49bi50aGVuKGFbcysrXSxhW3MrK10pO3JldHVybiBufWdldFVyaSh0KXt0PWsodGhpcy5kZWZhdWx0cyx0KTtsZXQgZT1nQSh0LmJhc2VVUkwsdC51cmwpO3JldHVybiB0QShlLHQucGFyYW1zLHQucGFyYW1zU2VyaWFsaXplcil9fTtpLmZvckVhY2goWyJkZWxldGUiLCJnZXQiLCJoZWFkIiwib3B0aW9ucyJdLGZ1bmN0aW9uKHQpe1gucHJvdG90eXBlW3RdPWZ1bmN0aW9uKGUsSSl7cmV0dXJuIHRoaXMucmVxdWVzdChrKEl8fHt9LHttZXRob2Q6dCx1cmw6ZSxkYXRhOihJfHx7fSkuZGF0YX0pKX19KTtpLmZvckVhY2goWyJwb3N0IiwicHV0IiwicGF0Y2giXSxmdW5jdGlvbih0KXtmdW5jdGlvbiBlKEkpe3JldHVybiBmdW5jdGlvbihvLGcsQyl7cmV0dXJuIHRoaXMucmVxdWVzdChrKEN8fHt9LHttZXRob2Q6dCxoZWFkZXJzOkk/eyJDb250ZW50LVR5cGUiOiJtdWx0aXBhcnQvZm9ybS1kYXRhIn06e30sdXJsOm8sZGF0YTpnfSkpfX1YLnByb3RvdHlwZVt0XT1lKCksWC5wcm90b3R5cGVbdCsiRm9ybSJdPWUoITApfSk7dmFyIGlBPVg7dmFyIG50PWNsYXNzIEF7Y29uc3RydWN0b3IodCl7aWYodHlwZW9mIHQhPSJmdW5jdGlvbiIpdGhyb3cgbmV3IFR5cGVFcnJvcigiZXhlY3V0b3IgbXVzdCBiZSBhIGZ1bmN0aW9uLiIpO2xldCBlO3RoaXMucHJvbWlzZT1uZXcgUHJvbWlzZShmdW5jdGlvbihvKXtlPW99KTtsZXQgST10aGlzO3RoaXMucHJvbWlzZS50aGVuKHI9PntpZighSS5fbGlzdGVuZXJzKXJldHVybjtsZXQgbz1JLl9saXN0ZW5lcnMubGVuZ3RoO2Zvcig7by0tID4wOylJLl9saXN0ZW5lcnNbb10ocik7SS5fbGlzdGVuZXJzPW51bGx9KSx0aGlzLnByb21pc2UudGhlbj1yPT57bGV0IG8sZz1uZXcgUHJvbWlzZShDPT57SS5zdWJzY3JpYmUoQyksbz1DfSkudGhlbihyKTtyZXR1cm4gZy5jYW5jZWw9ZnVuY3Rpb24oKXtJLnVuc3Vic2NyaWJlKG8pfSxnfSx0KGZ1bmN0aW9uKG8sZyxDKXtJLnJlYXNvbnx8KEkucmVhc29uPW5ldyBiKG8sZyxDKSxlKEkucmVhc29uKSl9KX10aHJvd0lmUmVxdWVzdGVkKCl7aWYodGhpcy5yZWFzb24pdGhyb3cgdGhpcy5yZWFzb259c3Vic2NyaWJlKHQpe2lmKHRoaXMucmVhc29uKXt0KHRoaXMucmVhc29uKTtyZXR1cm59dGhpcy5fbGlzdGVuZXJzP3RoaXMuX2xpc3RlbmVycy5wdXNoKHQpOnRoaXMuX2xpc3RlbmVycz1bdF19dW5zdWJzY3JpYmUodCl7aWYoIXRoaXMuX2xpc3RlbmVycylyZXR1cm47bGV0IGU9dGhpcy5fbGlzdGVuZXJzLmluZGV4T2YodCk7ZSE9PS0xJiZ0aGlzLl9saXN0ZW5lcnMuc3BsaWNlKGUsMSl9c3RhdGljIHNvdXJjZSgpe2xldCB0O3JldHVybnt0b2tlbjpuZXcgQShmdW5jdGlvbihyKXt0PXJ9KSxjYW5jZWw6dH19fSxvZT1udDtmdW5jdGlvbiBzdChBKXtyZXR1cm4gZnVuY3Rpb24oZSl7cmV0dXJuIEEuYXBwbHkobnVsbCxlKX19ZnVuY3Rpb24gQ3QoQSl7cmV0dXJuIGkuaXNPYmplY3QoQSkmJkEuaXNBeGlvc0Vycm9yPT09ITB9dmFyIEJ0PXtDb250aW51ZToxMDAsU3dpdGNoaW5nUHJvdG9jb2xzOjEwMSxQcm9jZXNzaW5nOjEwMixFYXJseUhpbnRzOjEwMyxPazoyMDAsQ3JlYXRlZDoyMDEsQWNjZXB0ZWQ6MjAyLE5vbkF1dGhvcml0YXRpdmVJbmZvcm1hdGlvbjoyMDMsTm9Db250ZW50OjIwNCxSZXNldENvbnRlbnQ6MjA1LFBhcnRpYWxDb250ZW50OjIwNixNdWx0aVN0YXR1czoyMDcsQWxyZWFkeVJlcG9ydGVkOjIwOCxJbVVzZWQ6MjI2LE11bHRpcGxlQ2hvaWNlczozMDAsTW92ZWRQZXJtYW5lbnRseTozMDEsRm91bmQ6MzAyLFNlZU90aGVyOjMwMyxOb3RNb2RpZmllZDozMDQsVXNlUHJveHk6MzA1LFVudXNlZDozMDYsVGVtcG9yYXJ5UmVkaXJlY3Q6MzA3LFBlcm1hbmVudFJlZGlyZWN0OjMwOCxCYWRSZXF1ZXN0OjQwMCxVbmF1dGhvcml6ZWQ6NDAxLFBheW1lbnRSZXF1aXJlZDo0MDIsRm9yYmlkZGVuOjQwMyxOb3RGb3VuZDo0MDQsTWV0aG9kTm90QWxsb3dlZDo0MDUsTm90QWNjZXB0YWJsZTo0MDYsUHJveHlBdXRoZW50aWNhdGlvblJlcXVpcmVkOjQwNyxSZXF1ZXN0VGltZW91dDo0MDgsQ29uZmxpY3Q6NDA5LEdvbmU6NDEwLExlbmd0aFJlcXVpcmVkOjQxMSxQcmVjb25kaXRpb25GYWlsZWQ6NDEyLFBheWxvYWRUb29MYXJnZTo0MTMsVXJpVG9vTG9uZzo0MTQsVW5zdXBwb3J0ZWRNZWRpYVR5cGU6NDE1LFJhbmdlTm90U2F0aXNmaWFibGU6NDE2LEV4cGVjdGF0aW9uRmFpbGVkOjQxNyxJbUFUZWFwb3Q6NDE4LE1pc2RpcmVjdGVkUmVxdWVzdDo0MjEsVW5wcm9jZXNzYWJsZUVudGl0eTo0MjIsTG9ja2VkOjQyMyxGYWlsZWREZXBlbmRlbmN5OjQyNCxUb29FYXJseTo0MjUsVXBncmFkZVJlcXVpcmVkOjQyNixQcmVjb25kaXRpb25SZXF1aXJlZDo0MjgsVG9vTWFueVJlcXVlc3RzOjQyOSxSZXF1ZXN0SGVhZGVyRmllbGRzVG9vTGFyZ2U6NDMxLFVuYXZhaWxhYmxlRm9yTGVnYWxSZWFzb25zOjQ1MSxJbnRlcm5hbFNlcnZlckVycm9yOjUwMCxOb3RJbXBsZW1lbnRlZDo1MDEsQmFkR2F0ZXdheTo1MDIsU2VydmljZVVuYXZhaWxhYmxlOjUwMyxHYXRld2F5VGltZW91dDo1MDQsSHR0cFZlcnNpb25Ob3RTdXBwb3J0ZWQ6NTA1LFZhcmlhbnRBbHNvTmVnb3RpYXRlczo1MDYsSW5zdWZmaWNpZW50U3RvcmFnZTo1MDcsTG9vcERldGVjdGVkOjUwOCxOb3RFeHRlbmRlZDo1MTAsTmV0d29ya0F1dGhlbnRpY2F0aW9uUmVxdWlyZWQ6NTExfTtPYmplY3QuZW50cmllcyhCdCkuZm9yRWFjaCgoW0EsdF0pPT57QnRbdF09QX0pO3ZhciBnZT1CdDtmdW5jdGlvbiBpZShBKXtsZXQgdD1uZXcgaUEoQSksZT12KGlBLnByb3RvdHlwZS5yZXF1ZXN0LHQpO3JldHVybiBpLmV4dGVuZChlLGlBLnByb3RvdHlwZSx0LHthbGxPd25LZXlzOiEwfSksaS5leHRlbmQoZSx0LG51bGwse2FsbE93bktleXM6ITB9KSxlLmNyZWF0ZT1mdW5jdGlvbihyKXtyZXR1cm4gaWUoayhBLHIpKX0sZX12YXIgZD1pZShaKTtkLkF4aW9zPWlBO2QuQ2FuY2VsZWRFcnJvcj1iO2QuQ2FuY2VsVG9rZW49b2U7ZC5pc0NhbmNlbD1yQTtkLlZFUlNJT049R0E7ZC50b0Zvcm1EYXRhPXE7ZC5BeGlvc0Vycm9yPXU7ZC5DYW5jZWw9ZC5DYW5jZWxlZEVycm9yO2QuYWxsPWZ1bmN0aW9uKHQpe3JldHVybiBQcm9taXNlLmFsbCh0KX07ZC5zcHJlYWQ9c3Q7ZC5pc0F4aW9zRXJyb3I9Q3Q7ZC5tZXJnZUNvbmZpZz1rO2QuQXhpb3NIZWFkZXJzPW07ZC5mb3JtVG9KU09OPUE9PndBKGkuaXNIVE1MRm9ybShBKT9uZXcgRm9ybURhdGEoQSk6QSk7ZC5nZXRBZGFwdGVyPU5BLmdldEFkYXB0ZXI7ZC5IdHRwU3RhdHVzQ29kZT1nZTtkLmRlZmF1bHQ9ZDt2YXIgTEE9ZDt2YXJ7QXhpb3M6RWksQXhpb3NFcnJvcjpjaSxDYW5jZWxlZEVycm9yOmZpLGlzQ2FuY2VsOmxpLENhbmNlbFRva2VuOnVpLFZFUlNJT046RGksYWxsOmhpLENhbmNlbDpkaSxpc0F4aW9zRXJyb3I6eWksc3ByZWFkOm1pLHRvRm9ybURhdGE6d2ksQXhpb3NIZWFkZXJzOnBpLEh0dHBTdGF0dXNDb2RlOlNpLGZvcm1Ub0pTT046RmksZ2V0QWRhcHRlcjpSaSxtZXJnZUNvbmZpZzpOaX09TEE7dmFyIG5BLFksUXQsYXQ9e2Vudjp7ZW1zY3JpcHRlbl9ub3RpZnlfbWVtb3J5X2dyb3d0aDpmdW5jdGlvbihBKXtRdD1uZXcgVWludDhBcnJheShZLmV4cG9ydHMubWVtb3J5LmJ1ZmZlcil9fX0sSkE9Y2xhc3N7aW5pdCgpe3JldHVybiBuQXx8KHR5cGVvZiBmZXRjaDwidSI/bkE9ZmV0Y2goImRhdGE6YXBwbGljYXRpb24vd2FzbTtiYXNlNjQsIituZSkudGhlbih0PT50LmFycmF5QnVmZmVyKCkpLnRoZW4odD0+V2ViQXNzZW1ibHkuaW5zdGFudGlhdGUodCxhdCkpLnRoZW4odGhpcy5faW5pdCk6bkE9V2ViQXNzZW1ibHkuaW5zdGFudGlhdGUoQnVmZmVyLmZyb20obmUsImJhc2U2NCIpLGF0KS50aGVuKHRoaXMuX2luaXQpLG5BKX1faW5pdCh0KXtZPXQuaW5zdGFuY2UsYXQuZW52LmVtc2NyaXB0ZW5fbm90aWZ5X21lbW9yeV9ncm93dGgoMCl9ZGVjb2RlKHQsZT0wKXtpZighWSl0aHJvdyBuZXcgRXJyb3IoIlpTVEREZWNvZGVyOiBBd2FpdCAuaW5pdCgpIGJlZm9yZSBkZWNvZGluZy4iKTtsZXQgST10LmJ5dGVMZW5ndGgscj1ZLmV4cG9ydHMubWFsbG9jKEkpO1F0LnNldCh0LHIpLGU9ZXx8TnVtYmVyKFkuZXhwb3J0cy5aU1REX2ZpbmREZWNvbXByZXNzZWRTaXplKHIsSSkpO2xldCBvPVkuZXhwb3J0cy5tYWxsb2MoZSksZz1ZLmV4cG9ydHMuWlNURF9kZWNvbXByZXNzKG8sZSxyLEkpLEM9UXQuc2xpY2UobyxvK2cpO3JldHVybiBZLmV4cG9ydHMuZnJlZShyKSxZLmV4cG9ydHMuZnJlZShvKSxDfX0sbmU9IkFHRnpiUUVBQUFBQmJnNWdBMzkvZndGL1lBRi9BWDlnQW45L0FHQUJmd0JnQlg5L2YzOS9BWDlnQTM5L2Z3QmdCSDkvZjM4QmYyQUFBWDlnQW45L0FYOWdCMzkvZjM5L2YzOEJmMkFDZjM4QmZtQUlmMzkvZjM5L2YzOEJmMkFGZjM5L2YzOEFZQTUvZjM5L2YzOS9mMzkvZjM5L2Z3Ri9BaWNCQTJWdWRoOWxiWE5qY21sd2RHVnVYMjV2ZEdsbWVWOXRaVzF2Y25sZlozSnZkM1JvQUFNREl5SUhBQUFCQVFNSEF3RUFDUVFBQlFFSUNBRUZCZ1FFQkFNR0FBQUtBQVVMREEwR0JBVUJjQUVCQVFVSEFRR0FBb0NBQWdZSUFYOEJRWUNqQkFzSHJnRUxCbTFsYlc5eWVRSUFCbTFoYkd4dll3QUZCR1p5WldVQUJneGFVMVJFWDJselJYSnliM0lBRWhsYVUxUkVYMlpwYm1SRVpXTnZiWEJ5WlhOelpXUlRhWHBsQUJ3UFdsTlVSRjlrWldOdmJYQnlaWE56QUNJWlgxOXBibVJwY21WamRGOW1kVzVqZEdsdmJsOTBZV0pzWlFFQUVGOWZaWEp5Ym05ZmJHOWpZWFJwYjI0QUFRbHpkR0ZqYTFOaGRtVUFCd3h6ZEdGamExSmxjM1J2Y21VQUNBcHpkR0ZqYTBGc2JHOWpBQWtLaS9JQklnVUFRWVFmQ3pNQkFYOGdBZ1JBSUFBaEF3TkFJQU1nQVMwQUFEb0FBQ0FEUVFGcUlRTWdBVUVCYWlFQklBSkJBV3NpQWcwQUN3c2dBQXNwQVFGL0lBSUVRQ0FBSVFNRFFDQURJQUU2QUFBZ0EwRUJhaUVESUFKQkFXc2lBZzBBQ3dzZ0FBdHNBUUovUVlBZktBSUFJZ0VnQUVFSGFrRjRjU0lDYWlFQUFrQWdBa0VBSUFBZ0FVMGJEUUFnQUQ4QVFSQjBTd1JBSUFBL0FFRVFkR3RCLy84RGFrRVFka0FBUVg5R0JIOUJBQVZCQUJBQVFRRUxSUTBCQzBHQUh5QUFOZ0lBSUFFUEMwR0VIMEV3TmdJQVFYOEx1U2NCQzM4akFFRVFheUlLSkFBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUlBQkI5QUZOQkVCQmlCOG9BZ0FpQmtFUUlBQkJDMnBCZUhFZ0FFRUxTUnNpQlVFRGRpSUFkaUlCUVFOeEJFQUNRQ0FCUVg5elFRRnhJQUJxSWdKQkEzUWlBVUd3SDJvaUFDQUJRYmdmYWlnQ0FDSUJLQUlJSWdSR0JFQkJpQjhnQmtGK0lBSjNjVFlDQUF3QkN5QUVJQUEyQWd3Z0FDQUVOZ0lJQ3lBQlFRaHFJUUFnQVNBQ1FRTjBJZ0pCQTNJMkFnUWdBU0FDYWlJQklBRW9BZ1JCQVhJMkFnUU1Ed3NnQlVHUUh5Z0NBQ0lIVFEwQklBRUVRQUpBUVFJZ0FIUWlBa0VBSUFKcmNpQUJJQUIwY1dnaUFVRURkQ0lBUWJBZmFpSUNJQUJCdUI5cUtBSUFJZ0FvQWdnaUJFWUVRRUdJSHlBR1FYNGdBWGR4SWdZMkFnQU1BUXNnQkNBQ05nSU1JQUlnQkRZQ0NBc2dBQ0FGUVFOeU5nSUVJQUFnQldvaUNDQUJRUU4wSWdFZ0JXc2lCRUVCY2pZQ0JDQUFJQUZxSUFRMkFnQWdCd1JBSUFkQmVIRkJzQjlxSVFGQm5COG9BZ0FoQWdKL0lBWkJBU0FIUVFOMmRDSURjVVVFUUVHSUh5QURJQVp5TmdJQUlBRU1BUXNnQVNnQ0NBc2hBeUFCSUFJMkFnZ2dBeUFDTmdJTUlBSWdBVFlDRENBQ0lBTTJBZ2dMSUFCQkNHb2hBRUdjSHlBSU5nSUFRWkFmSUFRMkFnQU1Ed3RCakI4b0FnQWlDMFVOQVNBTGFFRUNkRUc0SVdvb0FnQWlBaWdDQkVGNGNTQUZheUVESUFJaEFRTkFBa0FnQVNnQ0VDSUFSUVJBSUFFb0FoUWlBRVVOQVFzZ0FDZ0NCRUY0Y1NBRmF5SUJJQU1nQVNBRFNTSUJHeUVESUFBZ0FpQUJHeUVDSUFBaEFRd0JDd3NnQWlnQ0dDRUpJQUlnQWlnQ0RDSUVSd1JBUVpnZktBSUFHaUFDS0FJSUlnQWdCRFlDRENBRUlBQTJBZ2dNRGdzZ0FrRVVhaUlCS0FJQUlnQkZCRUFnQWlnQ0VDSUFSUTBESUFKQkVHb2hBUXNEUUNBQklRZ2dBQ0lFUVJScUlnRW9BZ0FpQUEwQUlBUkJFR29oQVNBRUtBSVFJZ0FOQUFzZ0NFRUFOZ0lBREEwTFFYOGhCU0FBUWI5L1N3MEFJQUJCQzJvaUFFRjRjU0VGUVl3ZktBSUFJZ2hGRFFCQkFDQUZheUVEQWtBQ1FBSkFBbjlCQUNBRlFZQUNTUTBBR2tFZklBVkIvLy8vQjBzTkFCb2dCVUVtSUFCQkNIWm5JZ0JyZGtFQmNTQUFRUUYwYTBFK2Fnc2lCMEVDZEVHNElXb29BZ0FpQVVVRVFFRUFJUUFNQVF0QkFDRUFJQVZCR1NBSFFRRjJhMEVBSUFkQkgwY2JkQ0VDQTBBQ1FDQUJLQUlFUVhoeElBVnJJZ1lnQTA4TkFDQUJJUVFnQmlJRERRQkJBQ0VESUFFaEFBd0RDeUFBSUFFb0FoUWlCaUFHSUFFZ0FrRWRka0VFY1dvb0FoQWlBVVliSUFBZ0Joc2hBQ0FDUVFGMElRSWdBUTBBQ3dzZ0FDQUVja1VFUUVFQUlRUkJBaUFIZENJQVFRQWdBR3R5SUFoeElnQkZEUU1nQUdoQkFuUkJ1Q0ZxS0FJQUlRQUxJQUJGRFFFTEEwQWdBQ2dDQkVGNGNTQUZheUlDSUFOSklRRWdBaUFESUFFYklRTWdBQ0FFSUFFYklRUWdBQ2dDRUNJQkJIOGdBUVVnQUNnQ0ZBc2lBQTBBQ3dzZ0JFVU5BQ0FEUVpBZktBSUFJQVZyVHcwQUlBUW9BaGdoQnlBRUlBUW9BZ3dpQWtjRVFFR1lIeWdDQUJvZ0JDZ0NDQ0lBSUFJMkFnd2dBaUFBTmdJSURBd0xJQVJCRkdvaUFTZ0NBQ0lBUlFSQUlBUW9BaEFpQUVVTkF5QUVRUkJxSVFFTEEwQWdBU0VHSUFBaUFrRVVhaUlCS0FJQUlnQU5BQ0FDUVJCcUlRRWdBaWdDRUNJQURRQUxJQVpCQURZQ0FBd0xDeUFGUVpBZktBSUFJZ1JOQkVCQm5COG9BZ0FoQUFKQUlBUWdCV3NpQVVFUVR3UkFJQUFnQldvaUFpQUJRUUZ5TmdJRUlBQWdCR29nQVRZQ0FDQUFJQVZCQTNJMkFnUU1BUXNnQUNBRVFRTnlOZ0lFSUFBZ0JHb2lBU0FCS0FJRVFRRnlOZ0lFUVFBaEFrRUFJUUVMUVpBZklBRTJBZ0JCbkI4Z0FqWUNBQ0FBUVFocUlRQU1EUXNnQlVHVUh5Z0NBQ0lDU1FSQVFaUWZJQUlnQldzaUFUWUNBRUdnSDBHZ0h5Z0NBQ0lBSUFWcUlnSTJBZ0FnQWlBQlFRRnlOZ0lFSUFBZ0JVRURjallDQkNBQVFRaHFJUUFNRFF0QkFDRUFJQVZCTDJvaUF3Si9RZUFpS0FJQUJFQkI2Q0lvQWdBTUFRdEI3Q0pDZnpjQ0FFSGtJa0tBb0lDQWdJQUVOd0lBUWVBaUlBcEJER3BCY0hGQjJLclZxZ1Z6TmdJQVFmUWlRUUEyQWdCQnhDSkJBRFlDQUVHQUlBc2lBV29pQmtFQUlBRnJJZ2h4SWdFZ0JVME5ERUhBSWlnQ0FDSUVCRUJCdUNJb0FnQWlCeUFCYWlJSklBZE5JQVFnQ1VseURRMExBa0JCeENJdEFBQkJCSEZGQkVBQ1FBSkFBa0FDUUVHZ0h5Z0NBQ0lFQkVCQnlDSWhBQU5BSUFRZ0FDZ0NBQ0lIVHdSQUlBY2dBQ2dDQkdvZ0JFc05Bd3NnQUNnQ0NDSUFEUUFMQzBFQUVBUWlBa0YvUmcwRElBRWhCa0hrSWlnQ0FDSUFRUUZySWdRZ0FuRUVRQ0FCSUFKcklBSWdCR3BCQUNBQWEzRnFJUVlMSUFVZ0JrOE5BMEhBSWlnQ0FDSUFCRUJCdUNJb0FnQWlCQ0FHYWlJSUlBUk5JQUFnQ0VseURRUUxJQVlRQkNJQUlBSkhEUUVNQlFzZ0JpQUNheUFJY1NJR0VBUWlBaUFBS0FJQUlBQW9BZ1JxUmcwQklBSWhBQXNnQUVGL1JnMEJJQVZCTUdvZ0JrMEVRQ0FBSVFJTUJBdEI2Q0lvQWdBaUFpQURJQVpyYWtFQUlBSnJjU0lDRUFSQmYwWU5BU0FDSUFacUlRWWdBQ0VDREFNTElBSkJmMGNOQWd0QnhDSkJ4Q0lvQWdCQkJISTJBZ0FMSUFFUUJDSUNRWDlHUVFBUUJDSUFRWDlHY2lBQUlBSk5jZzBGSUFBZ0Ftc2lCaUFGUVNocVRRMEZDMEc0SWtHNElpZ0NBQ0FHYWlJQU5nSUFRYndpS0FJQUlBQkpCRUJCdkNJZ0FEWUNBQXNDUUVHZ0h5Z0NBQ0lEQkVCQnlDSWhBQU5BSUFJZ0FDZ0NBQ0lCSUFBb0FnUWlCR3BHRFFJZ0FDZ0NDQ0lBRFFBTERBUUxRWmdmS0FJQUlnQkJBQ0FBSUFKTkcwVUVRRUdZSHlBQ05nSUFDMEVBSVFCQnpDSWdCallDQUVISUlpQUNOZ0lBUWFnZlFYODJBZ0JCckI5QjRDSW9BZ0EyQWdCQjFDSkJBRFlDQUFOQUlBQkJBM1FpQVVHNEgyb2dBVUd3SDJvaUJEWUNBQ0FCUWJ3ZmFpQUVOZ0lBSUFCQkFXb2lBRUVnUncwQUMwR1VIeUFHUVNocklnQkJlQ0FDYTBFSGNTSUJheUlFTmdJQVFhQWZJQUVnQW1vaUFUWUNBQ0FCSUFSQkFYSTJBZ1FnQUNBQ2FrRW9OZ0lFUWFRZlFmQWlLQUlBTmdJQURBUUxJQUlnQTAwZ0FTQURTM0lOQWlBQUtBSU1RUWh4RFFJZ0FDQUVJQVpxTmdJRVFhQWZJQU5CZUNBRGEwRUhjU0lBYWlJQk5nSUFRWlFmUVpRZktBSUFJQVpxSWdJZ0FHc2lBRFlDQUNBQklBQkJBWEkyQWdRZ0FpQURha0VvTmdJRVFhUWZRZkFpS0FJQU5nSUFEQU1MUVFBaEJBd0tDMEVBSVFJTUNBdEJtQjhvQWdBZ0Frc0VRRUdZSHlBQ05nSUFDeUFDSUFacUlRRkJ5Q0loQUFKQUFrQUNRQU5BSUFFZ0FDZ0NBRWNFUUNBQUtBSUlJZ0FOQVF3Q0N3c2dBQzBBREVFSWNVVU5BUXRCeUNJaEFBTkFJQU1nQUNnQ0FDSUJUd1JBSUFFZ0FDZ0NCR29pQkNBRFN3MERDeUFBS0FJSUlRQU1BQXNBQ3lBQUlBSTJBZ0FnQUNBQUtBSUVJQVpxTmdJRUlBSkJlQ0FDYTBFSGNXb2lCeUFGUVFOeU5nSUVJQUZCZUNBQmEwRUhjV29pQmlBRklBZHFJZ1ZySVFBZ0F5QUdSZ1JBUWFBZklBVTJBZ0JCbEI5QmxCOG9BZ0FnQUdvaUFEWUNBQ0FGSUFCQkFYSTJBZ1FNQ0F0Qm5COG9BZ0FnQmtZRVFFR2NIeUFGTmdJQVFaQWZRWkFmS0FJQUlBQnFJZ0EyQWdBZ0JTQUFRUUZ5TmdJRUlBQWdCV29nQURZQ0FBd0lDeUFHS0FJRUlnTkJBM0ZCQVVjTkJpQURRWGh4SVFrZ0EwSC9BVTBFUUNBR0tBSU1JZ0VnQmlnQ0NDSUNSZ1JBUVlnZlFZZ2ZLQUlBUVg0Z0EwRURkbmR4TmdJQURBY0xJQUlnQVRZQ0RDQUJJQUkyQWdnTUJnc2dCaWdDR0NFSUlBWWdCaWdDRENJQ1J3UkFJQVlvQWdnaUFTQUNOZ0lNSUFJZ0FUWUNDQXdGQ3lBR1FSUnFJZ0VvQWdBaUEwVUVRQ0FHS0FJUUlnTkZEUVFnQmtFUWFpRUJDd05BSUFFaEJDQURJZ0pCRkdvaUFTZ0NBQ0lERFFBZ0FrRVFhaUVCSUFJb0FoQWlBdzBBQ3lBRVFRQTJBZ0FNQkF0QmxCOGdCa0VvYXlJQVFYZ2dBbXRCQjNFaUFXc2lDRFlDQUVHZ0h5QUJJQUpxSWdFMkFnQWdBU0FJUVFGeU5nSUVJQUFnQW1wQktEWUNCRUdrSDBId0lpZ0NBRFlDQUNBRElBUkJKeUFFYTBFSGNXcEJMMnNpQUNBQUlBTkJFR3BKR3lJQlFSczJBZ1FnQVVIUUlpa0NBRGNDRUNBQlFjZ2lLUUlBTndJSVFkQWlJQUZCQ0dvMkFnQkJ6Q0lnQmpZQ0FFSElJaUFDTmdJQVFkUWlRUUEyQWdBZ0FVRVlhaUVBQTBBZ0FFRUhOZ0lFSUFCQkNHb2dBRUVFYWlFQUlBUkpEUUFMSUFFZ0EwWU5BQ0FCSUFFb0FnUkJmbkUyQWdRZ0F5QUJJQU5ySWdKQkFYSTJBZ1FnQVNBQ05nSUFJQUpCL3dGTkJFQWdBa0Y0Y1VHd0gyb2hBQUovUVlnZktBSUFJZ0ZCQVNBQ1FRTjJkQ0lDY1VVRVFFR0lIeUFCSUFKeU5nSUFJQUFNQVFzZ0FDZ0NDQXNoQVNBQUlBTTJBZ2dnQVNBRE5nSU1JQU1nQURZQ0RDQURJQUUyQWdnTUFRdEJIeUVBSUFKQi8vLy9CMDBFUUNBQ1FTWWdBa0VJZG1jaUFHdDJRUUZ4SUFCQkFYUnJRVDVxSVFBTElBTWdBRFlDSENBRFFnQTNBaEFnQUVFQ2RFRzRJV29oQVFKQUFrQkJqQjhvQWdBaUJFRUJJQUIwSWdaeFJRUkFRWXdmSUFRZ0JuSTJBZ0FnQVNBRE5nSUFEQUVMSUFKQkdTQUFRUUYyYTBFQUlBQkJIMGNiZENFQUlBRW9BZ0FoQkFOQUlBUWlBU2dDQkVGNGNTQUNSZzBDSUFCQkhYWWhCQ0FBUVFGMElRQWdBU0FFUVFSeGFpSUdLQUlRSWdRTkFBc2dCaUFETmdJUUN5QURJQUUyQWhnZ0F5QUROZ0lNSUFNZ0F6WUNDQXdCQ3lBQktBSUlJZ0FnQXpZQ0RDQUJJQU0yQWdnZ0EwRUFOZ0lZSUFNZ0FUWUNEQ0FESUFBMkFnZ0xRWlFmS0FJQUlnQWdCVTBOQUVHVUh5QUFJQVZySWdFMkFnQkJvQjlCb0I4b0FnQWlBQ0FGYWlJQ05nSUFJQUlnQVVFQmNqWUNCQ0FBSUFWQkEzSTJBZ1FnQUVFSWFpRUFEQWdMUVlRZlFUQTJBZ0JCQUNFQURBY0xRUUFoQWdzZ0NFVU5BQUpBSUFZb0Fod2lBVUVDZEVHNElXb2lCQ2dDQUNBR1JnUkFJQVFnQWpZQ0FDQUNEUUZCakI5QmpCOG9BZ0JCZmlBQmQzRTJBZ0FNQWdzZ0NFRVFRUlFnQ0NnQ0VDQUdSaHRxSUFJMkFnQWdBa1VOQVFzZ0FpQUlOZ0lZSUFZb0FoQWlBUVJBSUFJZ0FUWUNFQ0FCSUFJMkFoZ0xJQVlvQWhRaUFVVU5BQ0FDSUFFMkFoUWdBU0FDTmdJWUN5QUFJQWxxSVFBZ0JpQUphaUlHS0FJRUlRTUxJQVlnQTBGK2NUWUNCQ0FGSUFCQkFYSTJBZ1FnQUNBRmFpQUFOZ0lBSUFCQi93Rk5CRUFnQUVGNGNVR3dIMm9oQVFKL1FZZ2ZLQUlBSWdKQkFTQUFRUU4yZENJQWNVVUVRRUdJSHlBQUlBSnlOZ0lBSUFFTUFRc2dBU2dDQ0FzaEFDQUJJQVUyQWdnZ0FDQUZOZ0lNSUFVZ0FUWUNEQ0FGSUFBMkFnZ01BUXRCSHlFRElBQkIvLy8vQjAwRVFDQUFRU1lnQUVFSWRtY2lBV3QyUVFGeElBRkJBWFJyUVQ1cUlRTUxJQVVnQXpZQ0hDQUZRZ0EzQWhBZ0EwRUNkRUc0SVdvaEFRSkFBa0JCakI4b0FnQWlBa0VCSUFOMElnUnhSUVJBUVl3ZklBSWdCSEkyQWdBZ0FTQUZOZ0lBREFFTElBQkJHU0FEUVFGMmEwRUFJQU5CSDBjYmRDRURJQUVvQWdBaEFnTkFJQUlpQVNnQ0JFRjRjU0FBUmcwQ0lBTkJIWFloQWlBRFFRRjBJUU1nQVNBQ1FRUnhhaUlFS0FJUUlnSU5BQXNnQkNBRk5nSVFDeUFGSUFFMkFoZ2dCU0FGTmdJTUlBVWdCVFlDQ0F3QkN5QUJLQUlJSWdBZ0JUWUNEQ0FCSUFVMkFnZ2dCVUVBTmdJWUlBVWdBVFlDRENBRklBQTJBZ2dMSUFkQkNHb2hBQXdDQ3dKQUlBZEZEUUFDUUNBRUtBSWNJZ0JCQW5SQnVDRnFJZ0VvQWdBZ0JFWUVRQ0FCSUFJMkFnQWdBZzBCUVl3ZklBaEJmaUFBZDNFaUNEWUNBQXdDQ3lBSFFSQkJGQ0FIS0FJUUlBUkdHMm9nQWpZQ0FDQUNSUTBCQ3lBQ0lBYzJBaGdnQkNnQ0VDSUFCRUFnQWlBQU5nSVFJQUFnQWpZQ0dBc2dCQ2dDRkNJQVJRMEFJQUlnQURZQ0ZDQUFJQUkyQWhnTEFrQWdBMEVQVFFSQUlBUWdBeUFGYWlJQVFRTnlOZ0lFSUFBZ0JHb2lBQ0FBS0FJRVFRRnlOZ0lFREFFTElBUWdCVUVEY2pZQ0JDQUVJQVZxSWdJZ0EwRUJjallDQkNBQ0lBTnFJQU0yQWdBZ0EwSC9BVTBFUUNBRFFYaHhRYkFmYWlFQUFuOUJpQjhvQWdBaUFVRUJJQU5CQTNaMElnTnhSUVJBUVlnZklBRWdBM0kyQWdBZ0FBd0JDeUFBS0FJSUN5RUJJQUFnQWpZQ0NDQUJJQUkyQWd3Z0FpQUFOZ0lNSUFJZ0FUWUNDQXdCQzBFZklRQWdBMEgvLy84SFRRUkFJQU5CSmlBRFFRaDJaeUlBYTNaQkFYRWdBRUVCZEd0QlBtb2hBQXNnQWlBQU5nSWNJQUpDQURjQ0VDQUFRUUowUWJnaGFpRUJBa0FDUUNBSVFRRWdBSFFpQm5GRkJFQkJqQjhnQmlBSWNqWUNBQ0FCSUFJMkFnQU1BUXNnQTBFWklBQkJBWFpyUVFBZ0FFRWZSeHQwSVFBZ0FTZ0NBQ0VGQTBBZ0JTSUJLQUlFUVhoeElBTkdEUUlnQUVFZGRpRUdJQUJCQVhRaEFDQUJJQVpCQkhGcUlnWW9BaEFpQlEwQUN5QUdJQUkyQWhBTElBSWdBVFlDR0NBQ0lBSTJBZ3dnQWlBQ05nSUlEQUVMSUFFb0FnZ2lBQ0FDTmdJTUlBRWdBallDQ0NBQ1FRQTJBaGdnQWlBQk5nSU1JQUlnQURZQ0NBc2dCRUVJYWlFQURBRUxBa0FnQ1VVTkFBSkFJQUlvQWh3aUFFRUNkRUc0SVdvaUFTZ0NBQ0FDUmdSQUlBRWdCRFlDQUNBRURRRkJqQjhnQzBGK0lBQjNjVFlDQUF3Q0N5QUpRUkJCRkNBSktBSVFJQUpHRzJvZ0JEWUNBQ0FFUlEwQkN5QUVJQWsyQWhnZ0FpZ0NFQ0lBQkVBZ0JDQUFOZ0lRSUFBZ0JEWUNHQXNnQWlnQ0ZDSUFSUTBBSUFRZ0FEWUNGQ0FBSUFRMkFoZ0xBa0FnQTBFUFRRUkFJQUlnQXlBRmFpSUFRUU55TmdJRUlBQWdBbW9pQUNBQUtBSUVRUUZ5TmdJRURBRUxJQUlnQlVFRGNqWUNCQ0FDSUFWcUlnUWdBMEVCY2pZQ0JDQURJQVJxSUFNMkFnQWdCd1JBSUFkQmVIRkJzQjlxSVFCQm5COG9BZ0FoQVFKL1FRRWdCMEVEZG5RaUJTQUdjVVVFUUVHSUh5QUZJQVp5TmdJQUlBQU1BUXNnQUNnQ0NBc2hCaUFBSUFFMkFnZ2dCaUFCTmdJTUlBRWdBRFlDRENBQklBWTJBZ2dMUVp3ZklBUTJBZ0JCa0I4Z0F6WUNBQXNnQWtFSWFpRUFDeUFLUVJCcUpBQWdBQXZTQ3dFSGZ3SkFJQUJGRFFBZ0FFRUlheUlDSUFCQkJHc29BZ0FpQVVGNGNTSUFhaUVGQWtBZ0FVRUJjUTBBSUFGQkEzRkZEUUVnQWlBQ0tBSUFJZ0ZySWdKQm1COG9BZ0JKRFFFZ0FDQUJhaUVBQWtBQ1FFR2NIeWdDQUNBQ1J3UkFJQUZCL3dGTkJFQWdBVUVEZGlFRUlBSW9BZ3dpQVNBQ0tBSUlJZ05HQkVCQmlCOUJpQjhvQWdCQmZpQUVkM0UyQWdBTUJRc2dBeUFCTmdJTUlBRWdBellDQ0F3RUN5QUNLQUlZSVFZZ0FpQUNLQUlNSWdGSEJFQWdBaWdDQ0NJRElBRTJBZ3dnQVNBRE5nSUlEQU1MSUFKQkZHb2lCQ2dDQUNJRFJRUkFJQUlvQWhBaUEwVU5BaUFDUVJCcUlRUUxBMEFnQkNFSElBTWlBVUVVYWlJRUtBSUFJZ01OQUNBQlFSQnFJUVFnQVNnQ0VDSUREUUFMSUFkQkFEWUNBQXdDQ3lBRktBSUVJZ0ZCQTNGQkEwY05Ba0dRSHlBQU5nSUFJQVVnQVVGK2NUWUNCQ0FDSUFCQkFYSTJBZ1FnQlNBQU5nSUFEd3RCQUNFQkN5QUdSUTBBQWtBZ0FpZ0NIQ0lEUVFKMFFiZ2hhaUlFS0FJQUlBSkdCRUFnQkNBQk5nSUFJQUVOQVVHTUgwR01IeWdDQUVGK0lBTjNjVFlDQUF3Q0N5QUdRUkJCRkNBR0tBSVFJQUpHRzJvZ0FUWUNBQ0FCUlEwQkN5QUJJQVkyQWhnZ0FpZ0NFQ0lEQkVBZ0FTQUROZ0lRSUFNZ0FUWUNHQXNnQWlnQ0ZDSURSUTBBSUFFZ0F6WUNGQ0FESUFFMkFoZ0xJQUlnQlU4TkFDQUZLQUlFSWdGQkFYRkZEUUFDUUFKQUFrQUNRQ0FCUVFKeFJRUkFRYUFmS0FJQUlBVkdCRUJCb0I4Z0FqWUNBRUdVSDBHVUh5Z0NBQ0FBYWlJQU5nSUFJQUlnQUVFQmNqWUNCQ0FDUVp3ZktBSUFSdzBHUVpBZlFRQTJBZ0JCbkI5QkFEWUNBQThMUVp3ZktBSUFJQVZHQkVCQm5COGdBallDQUVHUUgwR1FIeWdDQUNBQWFpSUFOZ0lBSUFJZ0FFRUJjallDQkNBQUlBSnFJQUEyQWdBUEN5QUJRWGh4SUFCcUlRQWdBVUgvQVUwRVFDQUJRUU4ySVFRZ0JTZ0NEQ0lCSUFVb0FnZ2lBMFlFUUVHSUgwR0lIeWdDQUVGK0lBUjNjVFlDQUF3RkN5QURJQUUyQWd3Z0FTQUROZ0lJREFRTElBVW9BaGdoQmlBRklBVW9BZ3dpQVVjRVFFR1lIeWdDQUJvZ0JTZ0NDQ0lESUFFMkFnd2dBU0FETmdJSURBTUxJQVZCRkdvaUJDZ0NBQ0lEUlFSQUlBVW9BaEFpQTBVTkFpQUZRUkJxSVFRTEEwQWdCQ0VISUFNaUFVRVVhaUlFS0FJQUlnTU5BQ0FCUVJCcUlRUWdBU2dDRUNJRERRQUxJQWRCQURZQ0FBd0NDeUFGSUFGQmZuRTJBZ1FnQWlBQVFRRnlOZ0lFSUFBZ0Ftb2dBRFlDQUF3REMwRUFJUUVMSUFaRkRRQUNRQ0FGS0FJY0lnTkJBblJCdUNGcUlnUW9BZ0FnQlVZRVFDQUVJQUUyQWdBZ0FRMEJRWXdmUVl3ZktBSUFRWDRnQTNkeE5nSUFEQUlMSUFaQkVFRVVJQVlvQWhBZ0JVWWJhaUFCTmdJQUlBRkZEUUVMSUFFZ0JqWUNHQ0FGS0FJUUlnTUVRQ0FCSUFNMkFoQWdBeUFCTmdJWUN5QUZLQUlVSWdORkRRQWdBU0FETmdJVUlBTWdBVFlDR0FzZ0FpQUFRUUZ5TmdJRUlBQWdBbW9nQURZQ0FDQUNRWndmS0FJQVJ3MEFRWkFmSUFBMkFnQVBDeUFBUWY4QlRRUkFJQUJCZUhGQnNCOXFJUUVDZjBHSUh5Z0NBQ0lEUVFFZ0FFRURkblFpQUhGRkJFQkJpQjhnQUNBRGNqWUNBQ0FCREFFTElBRW9BZ2dMSVFBZ0FTQUNOZ0lJSUFBZ0FqWUNEQ0FDSUFFMkFnd2dBaUFBTmdJSUR3dEJIeUVESUFCQi8vLy9CMDBFUUNBQVFTWWdBRUVJZG1jaUFXdDJRUUZ4SUFGQkFYUnJRVDVxSVFNTElBSWdBellDSENBQ1FnQTNBaEFnQTBFQ2RFRzRJV29oQVFKQUFrQUNRRUdNSHlnQ0FDSUVRUUVnQTNRaUIzRkZCRUJCakI4Z0JDQUhjallDQUNBQklBSTJBZ0FnQWlBQk5nSVlEQUVMSUFCQkdTQURRUUYyYTBFQUlBTkJIMGNiZENFRElBRW9BZ0FoQVFOQUlBRWlCQ2dDQkVGNGNTQUFSZzBDSUFOQkhYWWhBU0FEUVFGMElRTWdCQ0FCUVFSeGFpSUhRUkJxS0FJQUlnRU5BQXNnQnlBQ05nSVFJQUlnQkRZQ0dBc2dBaUFDTmdJTUlBSWdBallDQ0F3QkN5QUVLQUlJSWdBZ0FqWUNEQ0FFSUFJMkFnZ2dBa0VBTmdJWUlBSWdCRFlDRENBQ0lBQTJBZ2dMUWFnZlFhZ2ZLQUlBUVFGcklnQkJmeUFBR3pZQ0FBc0xCQUFqQUFzR0FDQUFKQUFMRUFBakFDQUFhMEZ3Y1NJQUpBQWdBQXRLQVFGL0lBQWdBVWtFUUNBQUlBRWdBaEFDRHdzZ0FnUkFJQUFnQW1vaEF5QUJJQUpxSVFFRFFDQURRUUZySWdNZ0FVRUJheUlCTFFBQU9nQUFJQUpCQVdzaUFnMEFDd3NnQUF2OURnSVJmd0YrSXdCQk1Hc2lCeVFBUWJoL0lRZ0NRQ0FGUlEwQUlBUXNBQUFpQ1VIL0FYRWhDd0pBSUFsQkFFZ0VRQ0FMUWY0QWEwRUJkaUlHSUFWUERRSkJiQ0VJSUF0Qi93QnJJZ3RCL3dGTERRSWdCRUVCYWlFSVFRQWhCUU5BSUFVZ0MwOEVRQ0FMSVFnZ0JpRUxEQU1GSUFBZ0JXb2dDQ0FGUVFGMmFpSUVMUUFBUVFSMk9nQUFJQUFnQlVFQmNtb2dCQzBBQUVFUGNUb0FBQ0FGUVFKcUlRVU1BUXNBQ3dBTElBVWdDMDBOQVNBSFFmOEJOZ0lFSUFZZ0IwRUVhaUFIUVFocUlBUkJBV29pRGlBTEVBd2lCRUdJZjBzRVFDQUVJUWdNQWd0QlZDRUlJQWNvQWdnaUVFRUdTdzBCSUFjb0FnUWlFVUVCZENJSlFRSnFyVUlCSUJDdGhpSVlRUUVnRUhRaURVRUJhaUlGclVJQ2hueDhRZ3Q4UXZ6Ly8vLy8vLy8vL3dDRFF1UUNWZzBCUVZJaENDQVJRZjhCU3cwQklBMUJmM05CQW5SQjVBSnFyU0FSUVFGcUloVkJBWFN0SUJoOFFnaDhWQTBCSUFzZ0JHc2hGaUFFSUE1cUlSY2dCa0dBQkdvaUVpQUZRUUowYWlJUklBbHFRUUpxSVE0Z0JrR0VCR29oRTBHQWdBSWdFSFJCRUhZaENVRUFJUVZCQVNFUElBMUJBV3NpRkNFS0EwQWdCU0FWUmtVRVFBSkFJQVlnQlVFQmRDSUlhaThCQUNJRVFmLy9BMFlFUUNBVElBcEJBblJxSUFVNkFBSWdDa0VCYXlFS1FRRWhCQXdCQ3lBUFFRQWdDU0FFd1VvYklROExJQWdnRVdvZ0JEc0JBQ0FGUVFGcUlRVU1BUXNMSUFZZ0R6c0JnZ1FnQmlBUU93R0FCQUpBSUFvZ0ZFWUVRQ0FOUVFOMklRaENBQ0VZUVFBaER3TkFJQXdnRlVZRVFDQUlJQTFCQVhacVFRTnFJZ2xCQVhRaENFRUFJUVJCQUNFS0EwQkJBQ0VGSUFvZ0RVOE5CQU5BSUFWQkFrWkZCRUFnRXlBRklBbHNJQVJxSUJSeFFRSjBhaUFPSUFVZ0NtcHFMUUFBT2dBQ0lBVkJBV29oQlF3QkN3c2dDa0VDYWlFS0lBUWdDR29nRkhFaEJBd0FDd0FGSUFZZ0RFRUJkR291QVFBaENTQU9JQTlxSWdRZ0dEY0FBRUVJSVFVRFFDQUZJQWxPUlFSQUlBUWdCV29nR0RjQUFDQUZRUWhxSVFVTUFRc0xJQmhDZ1lLRWlKQ2d3SUFCZkNFWUlBeEJBV29oRENBSklBOXFJUThNQVFzQUN3QUxJQTFCQTNZZ0RVRUJkbXBCQTJvaENFRUFJUVVEUUNBTUlCVkdSUVJBUVFBaENTQUdJQXhCQVhScUxnRUFJZ1JCQUNBRVFRQktHeUVFQTBBZ0JDQUpSa1VFUUNBVElBVkJBblJxSUF3NkFBSURRQ0FGSUFocUlCUnhJZ1VnQ2tzTkFBc2dDVUVCYWlFSkRBRUxDeUFNUVFGcUlRd01BUXNMUVg4aENDQUZEUUlMSUJCQkFXb2hDRUVBSVFVRFFDQUZJQTFHUlFSQUlCRWdFeUFGUVFKMGFpSU9MUUFDUVFGMGFpSUVJQVF2QVFBaUNVRUJhanNCQUNBT0lBZ2dDV2RCWUhOcUlnUTZBQU1nRGlBSklBUjBJQTFyT3dFQUlBVkJBV29oQlF3QkN3c0NRQUpBSUFZdkFZSUVCRUFnQjBFY2FpSUVJQmNnRmhBTklnaEJpSDlMRFFJZ0IwRVVhaUFFSUJJUURpQUhRUXhxSUFRZ0VoQU9RUUFoQlFOQUlBZEJIR29pQkJBUElBVkIrd0ZMY2cwQ0lBQWdCV29pQmlBSFFSUnFJQVFRRURvQUFDQUdJQWRCREdvZ0JCQVFPZ0FCSUFWQkFuSWhCQ0FIUVJ4cUVBOEVRQ0FFSVFVTUF3VWdBQ0FFYWlBSFFSUnFJQWRCSEdvaUJCQVFPZ0FBSUFZZ0IwRU1haUFFRUJBNkFBTWdCVUVFYWlFRkRBRUxBQXNBQ3lBSFFSeHFJZ1FnRnlBV0VBMGlDRUdJZjBzTkFTQUhRUlJxSUFRZ0VoQU9JQWRCREdvZ0JDQVNFQTVCQUNFRkEwQWdCMEVjYWlJRUVBOGdCVUg3QVV0eVJRUkFJQUFnQldvaUJpQUhRUlJxSUFRUUVUb0FBQ0FHSUFkQkRHb2dCQkFST2dBQklBVkJBbkloQkNBSFFSeHFFQThFUUNBRUlRVUZJQUFnQkdvZ0IwRVVhaUFIUVJ4cUlnUVFFVG9BQUNBR0lBZEJER29nQkJBUk9nQURJQVZCQkdvaEJRd0NDd3NMQW44RFFFRzZmeUVJSUFWQi9RRkxEUU1nQUNBRmFpSUdJQWRCRkdvZ0IwRWNhaUlKRUJFNkFBQWdCa0VCYWlFRUlBa1FEMEVEUmdSQUlBZEJER29oQ0VFQ0RBSUxJQVZCL0FGTERRTWdCaUFIUVF4cUlBZEJIR29pQkJBUk9nQUJJQVZCQW1vaEJTQUVFQTlCQTBjTkFBc2dBQ0FGYWlFRUlBZEJGR29oQ0VFREN5QUVJQWdnQjBFY2FoQVJPZ0FBSUFacUlBQnJJUWdNQVFzQ2Z3TkFRYnAvSVFnZ0JVSDlBVXNOQWlBQUlBVnFJZ1lnQjBFVWFpQUhRUnhxSWdrUUVEb0FBQ0FHUVFGcUlRUWdDUkFQUVFOR0JFQWdCMEVNYWlFSVFRSU1BZ3NnQlVIOEFVc05BaUFHSUFkQkRHb2dCMEVjYWlJRUVCQTZBQUVnQlVFQ2FpRUZJQVFRRDBFRFJ3MEFDeUFBSUFWcUlRUWdCMEVVYWlFSVFRTUxJQVFnQ0NBSFFSeHFFQkE2QUFBZ0Jtb2dBR3NoQ0FzZ0NFR0lmMHNOQVFzZ0NDRUVRUUFoQlNBQlFRQkJOQkFESVFsQkFDRUtBMEFnQkNBRlJ3UkFJQUFnQldvaUJpMEFBQ0lCUVF0TEJFQkJiQ0VJREFNRklBa2dBVUVDZEdvaUFTQUJLQUlBUVFGcU5nSUFJQVZCQVdvaEJVRUJJQVl0QUFCMFFRRjFJQXBxSVFvTUFnc0FDd3RCYkNFSUlBcEZEUUFnQ21jaUJVRWZjeUlCUVF0TERRQWdBMEVnSUFWck5nSUFRUUZCQWlBQmRDQUtheUlEWjBFZmN5SUJkQ0FEUncwQUlBQWdCR29nQVVFQmFpSUFPZ0FBSUFrZ0FFRUNkR29pQUNBQUtBSUFRUUZxTmdJQUlBa29BZ1FpQUVFQ1NTQUFRUUZ4Y2cwQUlBSWdCRUVCYWpZQ0FDQUxRUUZxSVFnTElBZEJNR29rQUNBSUM2QUZBUXgvSXdCQkVHc2lEQ1FBQW44Z0JFRUhUUVJBSUF4Q0FEY0RDQ0FNUVFocUlnVWdBeUFFRUFJYVFXd2dBQ0FCSUFJZ0JVRUlFQXdpQUNBQUlBUkxHeUFBSUFCQmlYOUpHd3dCQ3lBQVFRQWdBU2dDQUVFQmFpSU5RUUYwRUFNaEQwRlVJQU1vQUFBaUJrRVBjU0lBUVFwTERRQWFJQUlnQUVFRmFqWUNBQ0FESUFScUlnSkJCR3NoQnlBQ1FRZHJJUXNnQUVFR2FpRU9RUVFoQWlBR1FRUjJJUVZCSUNBQWRDSUlRUUZ5SVFsQkFDRUFRUUVoQmlBRElRUURRQUpBSUFaQkFYRkZCRUFEUUNBRlFYOXpRWUNBZ0lCNGNtZ2lCa0VZU1VVRVFDQUFRU1JxSVFBZ0JDQUxUUVIvSUFSQkEyb0ZJQVFnQzJ0QkEzUWdBbXBCSDNFaEFpQUhDeUlFS0FBQUlBSjJJUVVNQVFzTElBSWdCa0VlY1NJS2FrRUNhaUVDSUFaQkFYWkJBMndnQUdvZ0JTQUtka0VEY1dvaUFDQU5UdzBCQW44Z0JDQUxTeUFDUVFOMklBUnFJZ1VnQjB0eFJRUkFJQUpCQjNFaEFpQUZEQUVMSUFRZ0IydEJBM1FnQW1wQkgzRWhBaUFIQ3lJRUtBQUFJQUoySVFVTElBVWdDRUVCYTNFaUJpQUlRUUYwUVFGcklnb2dDV3NpRUVrRWZ5QU9RUUZyQlNBRklBcHhJZ1VnRUVFQUlBVWdDRTRiYXlFR0lBNExJUVVnRHlBQVFRRjBhaUFHUVFGcklnbzdBUUFnQUVFQmFpRUFJQUlnQldvaEFpQUlRUUVnQm1zZ0NpQUdRUUJLR3lBSmFpSUpTZ1JBSUFsQkFrZ05BVUVnSUFsbklnVnJJUTVCQVNBRlFSOXpkQ0VJQ3lBQUlBMVBEUUFnQ2tFQVJ5RUdBbjhnQkNBTFN5QUNRUU4xSUFScUlnVWdCMHR4UlFSQUlBSkJCM0VoQWlBRkRBRUxJQUlnQkNBSGEwRURkR3BCSDNFaEFpQUhDeUlFS0FBQUlBSjJJUVVNQVFzTFFXd2dDVUVCUncwQUdrRlFJQUFnRFVzTkFCcEJiQ0FDUVNCS0RRQWFJQUVnQUVFQmF6WUNBQ0FFSUFKQkIycEJBM1ZxSUFOckN5QU1RUkJxSkFBTDhnRUJBWDhnQWtVRVFDQUFRZ0EzQWdBZ0FFRUFOZ0lRSUFCQ0FEY0NDRUc0Znc4TElBQWdBVFlDRENBQUlBRkJCR28yQWhBZ0FrRUVUd1JBSUFBZ0FTQUNhaUlCUVFScklnTTJBZ2dnQUNBREtBQUFOZ0lBSUFGQkFXc3RBQUFpQVFSQUlBQWdBV2RCRjJzMkFnUWdBZzhMSUFCQkFEWUNCRUYvRHdzZ0FDQUJOZ0lJSUFBZ0FTMEFBQ0lETmdJQUFrQUNRQUpBSUFKQkFtc09BZ0VBQWdzZ0FDQUJMUUFDUVJCMElBTnlJZ00yQWdBTElBQWdBUzBBQVVFSWRDQURhallDQUFzZ0FTQUNha0VCYXkwQUFDSUJSUVJBSUFCQkFEWUNCRUZzRHdzZ0FDQUJaeUFDUVFOMGEwRUphallDQkNBQ0MwUUJBbjhnQVNBQ0x3RUFJZ01nQVNnQ0JHb2lCRFlDQkNBQUlBTkJBblJCb0IxcUtBSUFJQUVvQWdCQkFDQUVhM1p4TmdJQUlBRVFEeG9nQUNBQ1FRUnFOZ0lFQzU4QkFRUi9RUU1oQVNBQUtBSUVJZ0pCSUUwRVFDQUFLQUlJSWdFZ0FDZ0NFRThFUUNBQUlBSkJCM0UyQWdRZ0FDQUJJQUpCQTNacklnSTJBZ2dnQUNBQ0tBQUFOZ0lBUVFBUEN5QUFLQUlNSWdNZ0FVWUVRRUVCUVFJZ0FrRWdTUnNQQ3lBQUlBRWdBU0FEYXlBQ1FRTjJJZ1FnQVNBRWF5QURTU0lCR3lJRGF5SUVOZ0lJSUFBZ0FpQURRUU4wYXpZQ0JDQUFJQVFvQUFBMkFnQUxJQUVMU0FFRWZ5QUFLQUlFSUFBb0FnQkJBblJxSWdJdEFBSWdBaThCQUNFRUlBRWdBU2dDQkNJRklBSXRBQU1pQW1vMkFnUWdBQ0FFSUFFb0FnQWdCWFJCQUNBQ2EzWnFOZ0lBQzFJQkJIOGdBQ2dDQkNBQUtBSUFRUUowYWlJQ0xRQUNJQUl2QVFBaEJDQUJJQUl0QUFNaUFpQUJLQUlFYWlJRk5nSUVJQUFnQkNBQ1FRSjBRYUFkYWlnQ0FDQUJLQUlBUVFBZ0JXdDJjV28yQWdBTENBQWdBRUdJZjBzTEdnQWdBQVJBSUFFRVFDQUNJQUFnQVJFQ0FBOExJQUFRQmdzTHBnZ0NEWDhCZmlNQVFSQnJJZ2trQUNBSlFRQTJBZ3dnQ1VFQU5nSUlBbjhDUUNBRFFlZ0phaUFESUFsQkNHb2dDVUVNYWlBQklBSWdBMEdBQVdvUUN5SVBRWWgvU3cwQVFWUWdDU2dDRENJRUlBQW9BZ0FpQVVIL0FYRkJBV3BMRFFFYUlBQkJCR29oQ3lBQUlBRkIvNEdBZUhFZ0JFRVFkRUdBZ1B3SGNYSTJBZ0JCZnlBRUlBUkJBRWdiUVFGcUlRQkJBQ0VCSUFrb0FnZ2hCVUVBSVFJRFFDQUFJQUpHQkVBZ0JVRURheUVCUVFBaEFBTkFBa0JCQUNFQ0lBQWdBVTRFUUFOQUlBQWdCVTROQWlBRElBQWdBMnBCNkFscUxRQUFRUUowYWtGQWF5SUJJQUVvQWdBaUFVRUJhallDQUNBQklBTnFJQUE2QU9nSElBQkJBV29oQUF3QUN3QUZBMEFnQWtFRVJrVUVRQ0FESUFNZ0FDQUNhaUlIYWtIb0NXb3RBQUJCQW5ScVFVQnJJZ2dnQ0NnQ0FDSUlRUUZxTmdJQUlBTWdDR29nQnpvQTZBY2dBa0VCYWlFQ0RBRUxDeUFBUVFScUlRQU1BZ3NBQ3dzZ0JFRUJhaUVPSUFNb0FnQWhCMEVBSVFCQkFTRUlBMEFnQ0NBT1JnMERJQTRnQ0dzaEJDQURJQWhCQW5ScUtBSUFJUVVDUUFKQUFrQUNRQUpBQWtCQkFTQUlkRUVCZFNJTlFRRnJEZ2dBQVFRQ0JBUUVBd1FMUVFBaEFpQUZRUUFnQlVFQVNoc2hCaUFBSVFFRFFDQUNJQVpHRFFVZ0F5QUNJQWRxYWkwQTZBY2hDaUFMSUFGQkFYUnFJZ3dnQkRvQUFTQU1JQW82QUFBZ0FrRUJhaUVDSUFGQkFXb2hBUXdBQ3dBTFFRQWhBaUFGUVFBZ0JVRUFTaHNoQ2lBQUlRRURRQ0FDSUFwR0RRUWdDeUFCUVFGMGFpSUdJQU1nQWlBSGFtb3RBT2dISWd3NkFBSWdCaUFFT2dBQklBWWdERG9BQUNBR0lBUTZBQU1nQWtFQmFpRUNJQUZCQW1vaEFRd0FDd0FMUVFBaEFpQUZRUUFnQlVFQVNoc2hCaUFFUVFoMFFZRCtBM0VoQkNBQUlRRURRQ0FDSUFaR0RRTWdDeUFCUVFGMGFpQUVJQU1nQWlBSGFtb3RBT2dIY3ExQ2dZQ0VnSkNBd0FCK053QUFJQUpCQVdvaEFpQUJRUVJxSVFFTUFBc0FDMEVBSVFJZ0JVRUFJQVZCQUVvYklRWWdCRUVJZEVHQS9nTnhJUVFnQUNFQkEwQWdBaUFHUmcwQ0lBc2dBVUVCZEdvaUNpQUVJQU1nQWlBSGFtb3RBT2dIY3ExQ2dZQ0VnSkNBd0FCK0loRTNBQWdnQ2lBUk53QUFJQUpCQVdvaEFpQUJRUWhxSVFFTUFBc0FDMEVBSVFFZ0JVRUFJQVZCQUVvYklRb2dCRUVJZEVHQS9nTnhJUXdnQUNFRUEwQWdBU0FLUmcwQklBc2dCRUVCZEdvaEVDQU1JQU1nQVNBSGFtb3RBT2dIY3ExQ2dZQ0VnSkNBd0FCK0lSRkJBQ0VDQTBBZ0FpQU5Ua1VFUUNBUUlBSkJBWFJxSWdZZ0VUY0FHQ0FHSUJFM0FCQWdCaUFSTndBSUlBWWdFVGNBQUNBQ1FSQnFJUUlNQVFzTElBRkJBV29oQVNBRUlBMXFJUVFNQUFzQUN5QUlRUUZxSVFnZ0JTQUhhaUVISUFVZ0RXd2dBR29oQUF3QUN3QUZJQU1nQWtFQ2RHb2lCMEZBYXlBQk5nSUFJQUpCQVdvaEFpQUhLQUlBSUFGcUlRRU1BUXNBQ3dBTElBOExJQWxCRUdva0FBdnlBZ0VHZnlNQVFTQnJJZ1VrQUNBRUtBSUFJUVlnQlVFTWFpQUNJQU1RRFNJRFFZaC9UUVJBSUFSQkJHb2hBaUFBSUFGcUlnbEJBMnNoQkVFQUlBWkJFSFpyUVI5eElRTURRQ0FGUVF4cUVBOGdBQ0FFVDNKRkJFQWdBaUFGS0FJTUlnWWdCU2dDRUNJSGRDQURka0VCZEdvaUNDMEFBU0VLSUFBZ0NDMEFBRG9BQUNBQ0lBWWdCeUFLYWlJR2RDQURka0VCZEdvaUJ5MEFBQ0VJSUFVZ0JpQUhMUUFCYWpZQ0VDQUFJQWc2QUFFZ0FFRUNhaUVBREFFTEN3TkFJQVZCREdvUUR5RUhJQVVvQWd3aEJpQUZLQUlRSVFRZ0FDQUpUeUFIY2tVRVFDQUNJQVlnQkhRZ0EzWkJBWFJxSWdZdEFBQWhCeUFGSUFRZ0JpMEFBV28yQWhBZ0FDQUhPZ0FBSUFCQkFXb2hBQXdCQ3dzRFFDQUFJQWxQUlFSQUlBSWdCaUFFZENBRGRrRUJkR29pQnkwQUFTRUlJQUFnQnkwQUFEb0FBQ0FBUVFGcUlRQWdCQ0FJYWlFRURBRUxDMEZzUVd3Z0FTQUZLQUlVSUFVb0FoaEhHeUFFUVNCSEd5RURDeUFGUVNCcUpBQWdBd3ZQRkFFamZ5TUFRZEFBYXlJRkpBQkJiQ0VKQWtBZ0EwRUtTUTBBQWtBZ0F5QUNMd0FFSWdjZ0FpOEFBQ0lJSUFJdkFBSWlEV3BxUVFacUlneEpEUUFnQkM4QkFpRUdJQVZCUEdvZ0FrRUdhaUlDSUFnUURTSUpRWWgvU3cwQklBVkJLR29nQWlBSWFpSUNJQTBRRFNJSlFZaC9TdzBCSUFWQkZHb2dBaUFOYWlJQ0lBY1FEU0lKUVloL1N3MEJJQVVnQWlBSGFpQURJQXhyRUEwaUNVR0lmMHNOQVNBRVFRUnFJUW9nQUNBQmFpSWZRUU5ySVNCQkFDQUdhMEVmY1NFTElBVW9BZ2doRVNBRktBSWNJUklnQlNnQ01DRVRJQVVvQWtRaEZDQUZLQUlFSVFrZ0JTZ0NHQ0VOSUFVb0Fpd2hEQ0FGS0FKQUlRWWdCU2dDRUNFaElBVW9BaVFoSWlBRktBSTRJU01nQlNnQ1RDRWtJQVVvQWdBaEZTQUZLQUlVSVJZZ0JTZ0NLQ0VYSUFVb0Fqd2hHRUVCSVE4Z0FDQUJRUU5xUVFKMklnUnFJZ01nQkdvaUFpQUVhaUlaSVFRZ0FpRUlJQU1oQndOQUlBOUJBWEZGSUFRZ0lFOXlSUVJBSUFBZ0NpQVlJQVowSUF0MlFRSjBhaUlPTHdFQU93QUFJQTR0QUFJaEdpQU9MUUFESVJBZ0J5QUtJQmNnREhRZ0MzWkJBblJxSWc0dkFRQTdBQUFnRGkwQUFpRWJJQTR0QUFNaER5QUlJQW9nRmlBTmRDQUxka0VDZEdvaURpOEJBRHNBQUNBT0xRQUNJUndnRGkwQUF5RWRJQVFnQ2lBVklBbDBJQXQyUVFKMGFpSU9Md0VBT3dBQUlBNHRBQUloSGlBT0xRQURJUTRnQUNBUWFpSWxJQW9nR0NBR0lCcHFJZ1owSUF0MlFRSjBhaUlRTHdFQU93QUFJQkF0QUFJZ0VDMEFBeUVtSUFjZ0Qyb2lKeUFLSUJjZ0RDQWJhaUlhZENBTGRrRUNkR29pQnk4QkFEc0FBQ0FITFFBQ0lRd2dCeTBBQXlFUUlBZ2dIV29pR3lBS0lCWWdEU0FjYWlJUGRDQUxka0VDZEdvaUNDOEJBRHNBQUNBSUxRQUNJUTBnQ0MwQUF5RWNJQVFnRG1vaUhTQUtJQlVnQ1NBZWFpSU9kQ0FMZGtFQ2RHb2lDUzhCQURzQUFDQUdhaUVBUVFNaEJ3Si9JQlFnSkVrRVFDQUFJUVpCQXd3QkN5QUFRUWR4SVFZZ0ZDQUFRUU4yYXlJVUtBQUFJUmhCQUFzZ0NTMEFBeUVlSUFrdEFBSWhDQ0FNSUJwcUlRQWdFeUFqU1FSL0lBQUZJQk1nQUVFRGRtc2lFeWdBQUNFWFFRQWhCeUFBUVFkeEN5RU1JQTBnRDJvaEFDQUhjaUVKUVFNaER3Si9JQklnSWtrRVFDQUFJUTFCQXd3QkN5QUFRUWR4SVEwZ0VpQUFRUU4yYXlJU0tBQUFJUlpCQUFzZ0NDQU9haUVBSUFseUlCRWdJVWtFZnlBQUJTQVJJQUJCQTNackloRW9BQUFoRlVFQUlROGdBRUVIY1FzaENTQWxJQ1pxSVFBZ0VDQW5haUVISUJzZ0hHb2hDQ0FkSUI1cUlRUWdEM0pGSVE4TUFRc0xJQVVnRERZQ0xDQUZJQVkyQWtBZ0JTQU5OZ0lZSUFVZ0NUWUNCQ0FGSUJRMkFrUWdCU0FUTmdJd0lBVWdFallDSENBRklCRTJBZ2dnQlNBWU5nSThJQVVnRnpZQ0tDQUZJQlkyQWhRZ0JTQVZOZ0lBSUFJZ0Iwa2dBQ0FEUzNJTkFFRnNJUWtnQ0NBWlN3MEJJQU5CQTJzaENRTkFJQVZCUEdvUUQwVWdBQ0FKU1hFRVFDQUFJQW9nQlNnQ1BDSU5JQVVvQWtBaURIUWdDM1pCQW5ScUlnNHZBUUE3QUFBZ0FDQU9MUUFEYWlJR0lBb2dEU0FNSUE0dEFBSnFJZ0IwSUF0MlFRSjBhaUlNTHdFQU93QUFJQVVnQUNBTUxRQUNhallDUUNBR0lBd3RBQU5xSVFBTUFRVWdBMEVDYXlFTUEwQWdCVUU4YWhBUElRWWdCU2dDUENFTklBVW9Ba0FoQ1NBQUlBeExJQVp5UlFSQUlBQWdDaUFOSUFsMElBdDJRUUowYWlJR0x3RUFPd0FBSUFVZ0NTQUdMUUFDYWpZQ1FDQUFJQVl0QUFOcUlRQU1BUXNMQTBBZ0FDQU1TMFVFUUNBQUlBb2dEU0FKZENBTGRrRUNkR29pQmk4QkFEc0FBQ0FBSUFZdEFBTnFJUUFnQ1NBR0xRQUNhaUVKREFFTEN3SkFJQUFnQTA4TkFDQUFJQW9nRFNBSmRDQUxkaUlBUVFKMGFpSURMUUFBT2dBQUlBTXRBQU5CQVVZRVFDQUpJQU10QUFKcUlRa01BUXNnQ1VFZlN3MEFRU0FnQ1NBS0lBQkJBblJxTFFBQ2FpSUFJQUJCSUU4YklRa0xJQUpCQTJzaERBTkFJQVZCS0dvUUQwVWdCeUFNU1hFRVFDQUhJQW9nQlNnQ0tDSUdJQVVvQWl3aUFIUWdDM1pCQW5ScUlnMHZBUUE3QUFBZ0J5QU5MUUFEYWlJRElBb2dCaUFBSUEwdEFBSnFJZ0IwSUF0MlFRSjBhaUlHTHdFQU93QUFJQVVnQUNBR0xRQUNhallDTENBRElBWXRBQU5xSVFjTUFRVWdBa0VDYXlFR0EwQWdCVUVvYWhBUElRTWdCU2dDS0NFTUlBVW9BaXdoQUNBR0lBZEpJQU55UlFSQUlBY2dDaUFNSUFCMElBdDJRUUowYWlJREx3RUFPd0FBSUFVZ0FDQURMUUFDYWpZQ0xDQUhJQU10QUFOcUlRY01BUXNMQTBBZ0JpQUhTVVVFUUNBSElBb2dEQ0FBZENBTGRrRUNkR29pQXk4QkFEc0FBQ0FISUFNdEFBTnFJUWNnQUNBRExRQUNhaUVBREFFTEN3SkFJQUlnQjAwTkFDQUhJQW9nRENBQWRDQUxkaUlDUVFKMGFpSURMUUFBT2dBQUlBTXRBQU5CQVVZRVFDQUFJQU10QUFKcUlRQU1BUXNnQUVFZlN3MEFRU0FnQUNBS0lBSkJBblJxTFFBQ2FpSUFJQUJCSUU4YklRQUxJQmxCQTJzaERBTkFJQVZCRkdvUUQwVWdDQ0FNU1hFRVFDQUlJQW9nQlNnQ0ZDSUdJQVVvQWhnaUFuUWdDM1pCQW5ScUlnMHZBUUE3QUFBZ0NDQU5MUUFEYWlJRElBb2dCaUFDSUEwdEFBSnFJZ0owSUF0MlFRSjBhaUlHTHdFQU93QUFJQVVnQWlBR0xRQUNhallDR0NBRElBWXRBQU5xSVFnTUFRVWdHVUVDYXlFREEwQWdCVUVVYWhBUElRSWdCU2dDRkNFR0lBVW9BaGdoQnlBRElBaEpJQUp5UlFSQUlBZ2dDaUFHSUFkMElBdDJRUUowYWlJQ0x3RUFPd0FBSUFVZ0J5QUNMUUFDYWpZQ0dDQUlJQUl0QUFOcUlRZ01BUXNMQTBBZ0F5QUlTVVVFUUNBSUlBb2dCaUFIZENBTGRrRUNkR29pQWk4QkFEc0FBQ0FJSUFJdEFBTnFJUWdnQnlBQ0xRQUNhaUVIREFFTEN3SkFJQWdnR1U4TkFDQUlJQW9nQmlBSGRDQUxkaUlDUVFKMGFpSURMUUFBT2dBQUlBTXRBQU5CQVVZRVFDQUhJQU10QUFKcUlRY01BUXNnQjBFZlN3MEFRU0FnQnlBS0lBSkJBblJxTFFBQ2FpSUNJQUpCSUU4YklRY0xBMEFnQlJBUFJTQUVJQ0JKY1FSQUlBUWdDaUFGS0FJQUlnWWdCU2dDQkNJQ2RDQUxka0VDZEdvaURDOEJBRHNBQUNBRUlBd3RBQU5xSWdNZ0NpQUdJQUlnREMwQUFtb2lBblFnQzNaQkFuUnFJZ1F2QVFBN0FBQWdCU0FDSUFRdEFBSnFOZ0lFSUFNZ0JDMEFBMm9oQkF3QkJTQWZRUUpySVFNRFFDQUZFQThoQWlBRktBSUFJUVlnQlNnQ0JDRUlJQU1nQkVrZ0FuSkZCRUFnQkNBS0lBWWdDSFFnQzNaQkFuUnFJZ0l2QVFBN0FBQWdCU0FJSUFJdEFBSnFOZ0lFSUFRZ0FpMEFBMm9oQkF3QkN3c0RRQ0FESUFSSlJRUkFJQVFnQ2lBR0lBaDBJQXQyUVFKMGFpSUNMd0VBT3dBQUlBUWdBaTBBQTJvaEJDQUlJQUl0QUFKcUlRZ01BUXNMQWtBZ0JDQWZUdzBBSUFRZ0NpQUdJQWgwSUF0MklnSkJBblJxSWdNdEFBQTZBQUFnQXkwQUEwRUJSZ1JBSUFnZ0F5MEFBbW9oQ0F3QkN5QUlRUjlMRFFCQklDQUlJQW9nQWtFQ2RHb3RBQUpxSWdJZ0FrRWdUeHNoQ0F0QmJFRnNRV3hCYkVGc1FXeEJiRUZzSUFFZ0NFRWdSeHNnQlNnQ0NDQUZLQUlNUnhzZ0IwRWdSeHNnQlNnQ0hDQUZLQUlnUnhzZ0FFRWdSeHNnQlNnQ01DQUZLQUkwUnhzZ0NVRWdSeHNnQlNnQ1JDQUZLQUpJUnhzaENRd0pDd0FMQUFzQUN3QUxBQXNBQ3dBTEFBdEJiQ0VKQ3lBRlFkQUFhaVFBSUFrTDdCQUJIbjhqQUVIUUFHc2lCU1FBUVd3aENRSkFJQU5CQ2trTkFBSkFJQU1nQWk4QUJDSUdJQUl2QUFBaUJ5QUNMd0FDSWdocWFrRUdhaUlPU1EwQUlBUXZBUUloRHlBRlFUeHFJQUpCQm1vaUFpQUhFQTBpQ1VHSWYwc05BU0FGUVNocUlBSWdCMm9pQWlBSUVBMGlDVUdJZjBzTkFTQUZRUlJxSUFJZ0NHb2lBaUFHRUEwaUNVR0lmMHNOQVNBRklBSWdCbW9nQXlBT2F4QU5JZ2xCaUg5TERRRWdCRUVFYWlFS0lBQWdBV29pSEVFRGF5RWRRUUFnRDJ0QkgzRWhDeUFGS0FJSUlSRWdCU2dDSENFU0lBVW9BakFoRXlBRktBSkVJUlFnQlNnQ0JDRUpJQVVvQWhnaEJpQUZLQUlzSVFjZ0JTZ0NRQ0VJSUFVb0FoQWhIaUFGS0FJa0lSOGdCU2dDT0NFZ0lBVW9Ba3doSVNBRktBSUFJUlVnQlNnQ0ZDRVdJQVVvQWlnaEZ5QUZLQUk4SVJoQkFTRU5JQUFnQVVFRGFrRUNkaUlDYWlJT0lBSnFJZzhnQW1vaUdTRUVJQThoQWlBT0lRTURRQ0FOUlNBRUlCMVBja1VFUUNBS0lCZ2dDSFFnQzNaQkFYUnFJZ3d0QUFFaERTQUFJQXd0QUFBNkFBQWdDaUFYSUFkMElBdDJRUUYwYWlJTUxRQUJJUkFnQXlBTUxRQUFPZ0FBSUFvZ0ZpQUdkQ0FMZGtFQmRHb2lEQzBBQVNFYUlBSWdEQzBBQURvQUFDQUtJQlVnQ1hRZ0MzWkJBWFJxSWd3dEFBRWhHeUFFSUF3dEFBQTZBQUFnQ2lBWUlBZ2dEV29pQ0hRZ0MzWkJBWFJxSWd3dEFBRWhEU0FBSUF3dEFBQTZBQUVnQ2lBWElBY2dFR29pQjNRZ0MzWkJBWFJxSWd3dEFBRWhFQ0FESUF3dEFBQTZBQUVnQ2lBV0lBWWdHbW9pREhRZ0MzWkJBWFJxSWdZdEFBRWhHaUFDSUFZdEFBQTZBQUVnQ2lBVklBa2dHMm9pRzNRZ0MzWkJBWFJxSWdrdEFBRWhJaUFFSUFrdEFBQTZBQUVnQ0NBTmFpRUdRUU1oQ1FKL0lCUWdJVWtFUUVFRElRMGdCZ3dCQ3lBVUlBWkJBM1pySWhRb0FBQWhHRUVBSVEwZ0JrRUhjUXNoQ0NBSElCQnFJUVlnRXlBZ1NRUi9JQVlGSUJNZ0JrRURkbXNpRXlnQUFDRVhRUUFoQ1NBR1FRZHhDeUVISUF3Z0dtb2hEQ0FKSUExeUlSQkJBeUVOQW44Z0VpQWZTUVJBSUF3aEJrRUREQUVMSUF4QkIzRWhCaUFTSUF4QkEzWnJJaElvQUFBaEZrRUFDeUFiSUNKcUlRd2dFSEloRUNBUklCNUpCSDhnREFVZ0VTQU1RUU4yYXlJUktBQUFJUlZCQUNFTklBeEJCM0VMSVFrZ0JFRUNhaUVFSUFKQkFtb2hBaUFEUVFKcUlRTWdBRUVDYWlFQUlBMGdFSEpGSVEwTUFRc0xJQVVnQnpZQ0xDQUZJQWcyQWtBZ0JTQUdOZ0lZSUFVZ0NUWUNCQ0FGSUJRMkFrUWdCU0FUTmdJd0lBVWdFallDSENBRklCRTJBZ2dnQlNBWU5nSThJQVVnRnpZQ0tDQUZJQlkyQWhRZ0JTQVZOZ0lBSUFBZ0Rrc2dBeUFQUzNJTkFFRnNJUWtnQWlBWlN3MEJJQTVCQTJzaENRTkFJQVZCUEdvUUR5QUFJQWxQY2tVRVFDQUtJQVVvQWp3aUJpQUZLQUpBSWdkMElBdDJRUUYwYWlJSUxRQUJJUXdnQUNBSUxRQUFPZ0FBSUFvZ0JpQUhJQXhxSWdaMElBdDJRUUYwYWlJSExRQUFJUWdnQlNBR0lBY3RBQUZxTmdKQUlBQWdDRG9BQVNBQVFRSnFJUUFNQVFzTEEwQWdCVUU4YWhBUElRY2dCU2dDUENFR0lBVW9Ba0FoQ1NBQUlBNVBJQWR5UlFSQUlBb2dCaUFKZENBTGRrRUJkR29pQmkwQUFDRUhJQVVnQ1NBR0xRQUJhallDUUNBQUlBYzZBQUFnQUVFQmFpRUFEQUVMQ3dOQUlBQWdEazlGQkVBZ0NpQUdJQWwwSUF0MlFRRjBhaUlITFFBQklBQWdCeTBBQURvQUFDQUFRUUZxSVFBZ0NXb2hDUXdCQ3dzZ0QwRURheUVBQTBBZ0JVRW9haEFQSUFBZ0EwMXlSUVJBSUFvZ0JTZ0NLQ0lHSUFVb0Fpd2lCM1FnQzNaQkFYUnFJZ2d0QUFFaERpQURJQWd0QUFBNkFBQWdDaUFHSUFjZ0Rtb2lCblFnQzNaQkFYUnFJZ2N0QUFBaENDQUZJQVlnQnkwQUFXbzJBaXdnQXlBSU9nQUJJQU5CQW1vaEF3d0JDd3NEUUNBRlFTaHFFQThoQnlBRktBSW9JUVlnQlNnQ0xDRUFJQU1nRDA4Z0IzSkZCRUFnQ2lBR0lBQjBJQXQyUVFGMGFpSUdMUUFBSVFjZ0JTQUFJQVl0QUFGcU5nSXNJQU1nQnpvQUFDQURRUUZxSVFNTUFRc0xBMEFnQXlBUFQwVUVRQ0FLSUFZZ0FIUWdDM1pCQVhScUlnY3RBQUVoQ0NBRElBY3RBQUE2QUFBZ0EwRUJhaUVESUFBZ0NHb2hBQXdCQ3dzZ0dVRURheUVEQTBBZ0JVRVVhaEFQSUFJZ0EwOXlSUVJBSUFvZ0JTZ0NGQ0lHSUFVb0FoZ2lCM1FnQzNaQkFYUnFJZ2d0QUFFaERpQUNJQWd0QUFBNkFBQWdDaUFHSUFjZ0Rtb2lCblFnQzNaQkFYUnFJZ2N0QUFBaENDQUZJQVlnQnkwQUFXbzJBaGdnQWlBSU9nQUJJQUpCQW1vaEFnd0JDd3NEUUNBRlFSUnFFQThoQnlBRktBSVVJUVlnQlNnQ0dDRURJQUlnR1U4Z0IzSkZCRUFnQ2lBR0lBTjBJQXQyUVFGMGFpSUdMUUFBSVFjZ0JTQURJQVl0QUFGcU5nSVlJQUlnQnpvQUFDQUNRUUZxSVFJTUFRc0xBMEFnQWlBWlQwVUVRQ0FLSUFZZ0EzUWdDM1pCQVhScUlnY3RBQUVoQ0NBQ0lBY3RBQUE2QUFBZ0FrRUJhaUVDSUFNZ0NHb2hBd3dCQ3dzRFFDQUZFQThnQkNBZFQzSkZCRUFnQ2lBRktBSUFJZ0lnQlNnQ0JDSUdkQ0FMZGtFQmRHb2lCeTBBQVNFSUlBUWdCeTBBQURvQUFDQUtJQUlnQmlBSWFpSUNkQ0FMZGtFQmRHb2lCaTBBQUNFSElBVWdBaUFHTFFBQmFqWUNCQ0FFSUFjNkFBRWdCRUVDYWlFRURBRUxDd05BSUFVUUR5RUhJQVVvQWdBaEJpQUZLQUlFSVFJZ0JDQWNUeUFIY2tVRVFDQUtJQVlnQW5RZ0MzWkJBWFJxSWdZdEFBQWhCeUFGSUFJZ0JpMEFBV28yQWdRZ0JDQUhPZ0FBSUFSQkFXb2hCQXdCQ3dzRFFDQUVJQnhQUlFSQUlBb2dCaUFDZENBTGRrRUJkR29pQnkwQUFTRUlJQVFnQnkwQUFEb0FBQ0FFUVFGcUlRUWdBaUFJYWlFQ0RBRUxDMEZzUVd4QmJFRnNRV3hCYkVGc1FXd2dBU0FDUVNCSEd5QUZLQUlJSUFVb0FneEhHeUFEUVNCSEd5QUZLQUljSUFVb0FpQkhHeUFBUVNCSEd5QUZLQUl3SUFVb0FqUkhHeUFKUVNCSEd5QUZLQUpFSUFVb0FraEhHeUVKREFFTFFXd2hDUXNnQlVIUUFHb2tBQ0FKQzFnQkEzOENRQ0FBS0FLUTZ3RWlBVVVOQUNBQktBSUFJQUZCdE5VQmFpZ0NBQ0lDSUFGQnVOVUJhaWdDQUNJREVCTWdBZ1JBSUFNZ0FTQUNFUUlBREFFTElBRVFCZ3NnQUVFQU5nS2c2d0VnQUVJQU53T1E2d0VMNlFNQ0JIOENmaUFBUVFCQktCQURJUVFnQWtFQlFRVWdBeHNpQUVrRVFDQUFEd3NnQVVVRVFFRi9Ed3RCQVNFR0FrQUNRQ0FEUVFGR0RRQWdBeUVHSUFFb0FBQWlCVUdvNnI1cFJnMEFRWFloQXlBRlFYQnhRZERVdE1JQlJ3MEJRUWdoQXlBQ1FRaEpEUUVnQVRVQUJDRUlJQVJCQVRZQ0ZDQUVJQWczQXdCQkFBOExJQUVnQWlBR0VCb2lBeUFDU3cwQUlBUWdBellDR0VGeUlRTWdBQ0FCYWlJRlFRRnJMUUFBSWdKQkNIRU5BQ0FDUVNCeElnWkZCRUJCY0NFRElBVXRBQUFpQlVHbkFVc05BU0FGUVFkeHJVSUJJQVZCQTNaQkNtcXRoaUlJUWdPSWZpQUlmQ0VKSUFCQkFXb2hBQXNnQWtFR2RpRUZJQUpCQW5aQkFDRURBa0FDUUFKQUFrQWdBa0VEY1VFQmF3NERBQUVDQXdzZ0FDQUJhaTBBQUNFRElBQkJBV29oQUF3Q0N5QUFJQUZxTHdBQUlRTWdBRUVDYWlFQURBRUxJQUFnQVdvb0FBQWhBeUFBUVFScUlRQUxRUUZ4SVFJQ2ZnSkFBa0FDUUFKQUlBVkJBV3NPQXdFQ0F3QUxRbjhnQmtVTkF4b2dBQ0FCYWpFQUFBd0RDeUFBSUFGcU13QUFRb0FDZkF3Q0N5QUFJQUZxTlFBQURBRUxJQUFnQVdvcEFBQUxJUWdnQkNBQ05nSWdJQVFnQXpZQ0hDQUVJQWczQXdCQkFDRURJQVJCQURZQ0ZDQUVJQWdnQ1NBR0d5SUlOd01JSUFSQ2dJQUlJQWdnQ0VLQWdBaGFHejRDRUFzZ0F3dGZBUUYvUWJoL0lRTWdBVUVCUVFVZ0Foc2lBazhFZnlBQUlBSnFRUUZyTFFBQUlnQkJBM0ZCQW5SQm9CNXFLQUlBSUFKcUlBQkJCSFpCREhGQnNCNXFLQUlBYWlBQVFTQnhJZ0ZGYWlBQlFRVjJJQUJCd0FCSmNXb0ZRYmgvQ3dzTUFDQUFJQUVnQWtFQUVCa0xsd01DQlg4Q2ZpTUFRVUJxSWdRa0FBSkFBMEFnQVVFRlR3UkFBa0FnQUNnQUFFRndjVUhRMUxUQ0FVWUVRRUorSVFjZ0FVRUlTUTBFSUFBb0FBUWlBa0YzU3cwRUlBSkJDR29pQXlBQlN3MEVJQUpCZ1g5SkRRRU1CQXNnQkVFWWFpQUFJQUVRR3lFQ1FuNGdCQ2tER0VJQUlBUW9BaXhCQVVjYklBSWJJZ2RDZlZZTkF5QUhJQWg4SWdnZ0IxUkNmaUVIRFFNQ1FBSkFJQUZCQ0VrTkFDQUFLQUFBUVhCeFFkRFV0TUlCUncwQUlBQW9BQVFpQWtGM1N3MEZRYmgvSUFKQkNHb2lBaUFCSUFKSkd5RUREQUVMSUFSQkdHb2dBQ0FCRUJzaUFrR0lmMHNFUUNBQ0lRTU1BUXRCdUg4aEF5QUNEUUFnQVNBRUtBSXdJZ0pySVFVZ0FDQUNhaUVHQTBBZ0JpQUZJQVJCREdvUUhTSURRWWgvU3cwQklBTkJBMm9pQWlBRlN3UkFRYmgvSVFNTUFnc2dCU0FDYXlFRklBSWdCbW9oQmlBRUtBSVFSUTBBQ3lBRUtBSTRCSDlCdUg4aEF5QUZRUVJKRFFFZ0JrRUVhZ1VnQmdzZ0FHc2hBd3NnQTBHSWYwc05Bd3NnQVNBRGF5RUJJQUFnQTJvaEFBd0JDd3RDZmlBSUlBRWJJUWNMSUFSQlFHc2tBQ0FIQzJRQkFYOUJ1SDhoQXdKQUlBRkJBMGtOQUNBQUxRQUNJUUVnQWlBQUx3QUFJZ0JCQVhFMkFnUWdBaUFBUVFGMlFRTnhJZ00yQWdBZ0FpQUFJQUZCRUhSeVFRTjJJZ0EyQWdnQ1FBSkFJQU5CQVdzT0F3SUJBQUVMUVd3UEN5QUFJUU1MSUFNTFJBRUNmeUFCSUFJb0FnUWlBeUFCS0FJRWFpSUVOZ0lFSUFBZ0EwRUNkRUdnSFdvb0FnQWdBU2dDQUVFQUlBUnJkbkUyQWdBZ0FSQVBHaUFBSUFKQkNHbzJBZ1FMemdFQkJuOUJ1bjhoQ2dKQUlBSW9BZ1FpQ0NBQ0tBSUFJZ2xxSWcwZ0FTQUFhMHNOQUVGc0lRb2dDU0FFSUFNb0FnQWlDMnRMRFFBZ0FDQUphaUlFSUFJb0FnZ2lER3NoQWlBQUlBRkJJR3NpQUNBTElBbEJBQkFnSUFNZ0NTQUxhallDQUFKQUFrQWdCQ0FGYXlBTVR3UkFJQUloQlF3QkN5QU1JQVFnQm10TERRSWdCeUFISUFJZ0JXc2lBbW9pQVNBSWFrOEVRQ0FFSUFFZ0NCQUtHZ3dDQ3lBQ0lBaHFJUWdnQkNBQlFRQWdBbXNRQ2lBQ2F5RUVDeUFFSUFBZ0JTQUlRUUVRSUFzZ0RTRUtDeUFLQzhjRUFRSi9JQUFnQTJvaEJnSkFJQU5CQjB3RVFBTkFJQUFnQms4TkFpQUFJQUl0QUFBNkFBQWdBRUVCYWlFQUlBSkJBV29oQWd3QUN3QUxJQVJCQVVZRVFBSkFJQUFnQW1zaUJVRUhUUVJBSUFBZ0FpMEFBRG9BQUNBQUlBSXRBQUU2QUFFZ0FDQUNMUUFDT2dBQ0lBQWdBaTBBQXpvQUF5QUFJQUlnQlVFQ2RDSUZRY0FlYWlnQ0FHb2lBaWdBQURZQUJDQUNJQVZCNEI1cUtBSUFheUVDREFFTElBQWdBaWtBQURjQUFBc2dBa0VJYWlFQ0lBQkJDR29oQUFzZ0FTQUdUd1JBSUFBZ0Eyb2hBU0FFUVFGSElBQWdBbXRCRDBweVJRUkFBMEFnQUNBQ0tRQUFOd0FBSUFKQkNHb2hBaUFBUVFocUlnQWdBVWtOQUF3REN3QUxJQUFnQWlrQUFEY0FBQ0FBSUFJcEFBZzNBQWdnQTBFUlNRMEJJQUJCRUdvaEFBTkFJQUFnQWlrQUVEY0FBQ0FBSUFJcEFCZzNBQWdnQUNBQ0tRQWdOd0FRSUFBZ0Fpa0FLRGNBR0NBQ1FTQnFJUUlnQUVFZ2FpSUFJQUZKRFFBTERBRUxBa0FnQUNBQlN3UkFJQUFoQVF3QkN5QUJJQUJySVFVQ1FDQUVRUUZISUFBZ0FtdEJEMHB5UlFSQUlBSWhBd05BSUFBZ0F5a0FBRGNBQUNBRFFRaHFJUU1nQUVFSWFpSUFJQUZKRFFBTERBRUxJQUFnQWlrQUFEY0FBQ0FBSUFJcEFBZzNBQWdnQlVFUlNBMEFJQUJCRUdvaEFDQUNJUU1EUUNBQUlBTXBBQkEzQUFBZ0FDQURLUUFZTndBSUlBQWdBeWtBSURjQUVDQUFJQU1wQUNnM0FCZ2dBMEVnYWlFRElBQkJJR29pQUNBQlNRMEFDd3NnQWlBRmFpRUNDd05BSUFFZ0JrOE5BU0FCSUFJdEFBQTZBQUFnQVVFQmFpRUJJQUpCQVdvaEFnd0FDd0FMQzY0SEFnVi9BWDRqQUVHQUFXc2lFU1FBSUJFZ0F6WUNmRUYvSVE4Q1FBSkFBa0FDUUFKQUlBSU9CQUVBQXdJRUN5QUdSUVJBUWJoL0lROE1CQXRCYkNFUElBVXRBQUFpQWlBRFN3MERJQWdnQWtFQ2RDSUNhaWdDQUNFRElBSWdCMm9vQWdBaEFpQUFRUUE2QUFzZ0FFSUFOd0lBSUFBZ0FqWUNEQ0FBSUFNNkFBb2dBRUVBT3dFSUlBRWdBRFlDQUVFQklROE1Bd3NnQVNBSk5nSUFRUUFoRHd3Q0N5QUtSUVJBUVd3aER3d0NDMEVBSVE4Z0MwVWdERUVaU0hJTkFVRUlJQVIwUVFocUlRQkJBQ0VEQTBBZ0FDQURUUTBDSUFOQlFHc2hBd3dBQ3dBTFFXd2hEeUFSSUJGQi9BQnFJQkZCK0FCcUlBVWdCaEFNSWdOQmlIOUxEUUFnRVNnQ2VDSUNJQVJMRFFBZ0VTZ0NmRUVCYWlFSklBQkJDR29oQzBHQWdBSWdBblJCRUhVaEJVRUJJUkJCQVNBQ2RDSVBRUUZySWdvaEVnTkFJQWtnRGtjRVFBSkFJQkVnRGtFQmRDSUVhaThCQUNJTVFmLy9BMFlFUUNBTElCSkJBM1JxSUE0MkFnUWdFa0VCYXlFU1FRRWhEQXdCQ3lBUVFRQWdCU0FNd1VvYklSQUxJQVFnRFdvZ0REc0JBQ0FPUVFGcUlRNE1BUXNMSUFBZ0FqWUNCQ0FBSUJBMkFnQUNRQ0FLSUJKR0JFQWdEVUhxQUdvaEJrRUFJUkJCQUNFTUEwQWdDU0FRUmdSQUlBOUJBM1lnRDBFQmRtcEJBMm9pQlVFQmRDRUVRUUFoREVFQUlSSURRRUVBSVE0Z0R5QVNUUTBFQTBBZ0RrRUNSd1JBSUFzZ0JTQU9iQ0FNYWlBS2NVRURkR29nQmlBT0lCSnFhaTBBQURZQ0JDQU9RUUZxSVE0TUFRc0xJQkpCQW1vaEVpQUVJQXhxSUFweElRd01BQXNBQlNBUklCQkJBWFJxTGdFQUlRVWdCaUFNYWlJRUlCTTNBQUJCQ0NFT0EwQWdCU0FPU2dSQUlBUWdEbW9nRXpjQUFDQU9RUWhxSVE0TUFRc0xJQk5DZ1lLRWlKQ2d3SUFCZkNFVElCQkJBV29oRUNBRklBeHFJUXdNQVFzQUN3QUxJQTlCQTNZZ0QwRUJkbXBCQTJvaEJVRUFJUkJCQUNFT0EwQWdDU0FRUmcwQlFRQWhEQ0FSSUJCQkFYUnFMZ0VBSWdSQkFDQUVRUUJLR3lFRUEwQWdCQ0FNUndSQUlBc2dEa0VEZEdvZ0VEWUNCQU5BSUFVZ0Rtb2dDbkVpRGlBU1N3MEFDeUFNUVFGcUlRd01BUXNMSUJCQkFXb2hFQXdBQ3dBTElBSkJBV29oQlVFQUlRd0RRQ0FNSUE5SEJFQWdEU0FMSUF4QkEzUnFJZ2tvQWdRaUJFRUJkR29pQWlBQ0x3RUFJZ1pCQVdvN0FRQWdDU0FGSUFablFXQnphaUlDT2dBRElBa2dCaUFDZENBUGF6c0JBQ0FKSUFnZ0JFRUNkQ0lDYWlnQ0FEb0FBaUFKSUFJZ0Iyb29BZ0EyQWdRZ0RFRUJhaUVNREFFTEN5QUJJQUEyQWdBZ0F5RVBDeUFSUVlBQmFpUUFJQThMN1ZvQ08zOEdmaU1BUWVBQmF5SUVKQUFDUUVHdzdBa1FCU0lGUlFSQVFVQWhCd3dCQ3lBRlFnQTNBdlRxQVNBRlFRQTJBc1RyQVNBRlFRQTJBclRyQVNBRlFnQTNBcHpyQVNBRlFRQTJBcmpwQVNBRlFRQTJBcXpzQ1NBRlFnQTNBdFRyQVNBRlFnQTNBcXpyQVNBRlFnQTNBNGpyQVNBRlFnQTNBdVRxQVNBRlFnQTNBdVRyQVNBRlFZR0FnTUFBTmdLODZ3RWdCVUlBTndLazZ3RWdCVUg4NmdGcVFRQTJBZ0FnQlVHUTZ3RnFRZ0EzQXdBZ0JSQVlJQVZCck5VQmFpRVVJQVZCK09zQmFpRWNJQVZCc09vQmFpRWlJQVZCb0RCcUlTb2dCVUdZSUdvaEt5QUZRYWpRQUdvaEhpQUZRUkJxSVN3Z0JVRUlhaUVvSUFWQkJHb2hMU0FGUWNEcEFXb2hLU0FGUVlqckFXb2dCRUdVQVdvaEx5QUVRWXdCYWlFd0lBUkJoQUZxSVRFZ0JFSGNBR29oTWlBRVFkUUFhaUV6SUFSQnpBQnFJVFFnQUNFZEFrQUNRQUpBQWtBQ1FBTkFRUUZCQlNBRktBTGs2Z0ViSVFZQ1FBTkFJQU1nQmtrTkFTQUNLQUFBUVhCeFFkRFV0TUlCUmdSQVFiaC9JUWNnQTBFSVNRMElJQUlvQUFRaURrRjNTd1JBUVhJaEJ3d0pDeUFESUE1QkNHb2lDVWtOQ0NBT1FZQi9Td1JBSUFraEJ3d0pDeUFESUFscklRTWdBaUFKYWlFQ0RBRUxDeUFGUWdBM0FxenBBU0FGUWdBM0EranBBU0FGUVFBMkFwanJBU0FGUWdBM0E0RHFBU0FGUWdNM0EvanBBU0FGUWJUcEFXcENBRGNDQUNBRlFmRHBBV3BDQURjREFDQUZRYWpRQUdvaUNVR01nSURnQURZQ0FDQUZRYXpRQVdwQjRCSXBBZ0EzQWdBZ0JVRzAwQUZxUWVnU0tBSUFOZ0lBSUFVZ0JVRVFhallDQUNBRklBVkJvREJxTmdJRUlBVWdCVUdZSUdvMkFnZ2dCU0FKTmdJTUlBVkJBVUVGSUFVb0F1VHFBUnMyQXJ6cEFRSkFJQUZGRFFBZ0JTZ0NyT2tCSWdrZ0hVWU5BQ0FGSUFrMkFyanBBU0FGSUIwMkFxenBBU0FGS0FLdzZRRWhEaUFGSUIwMkFyRHBBU0FGSUIwZ0RpQUphMm8yQXJUcEFRdEJ1SDhoQ1NBRFFRVkJDU0FGS0FMazZnRWlCaHRKRFFVZ0FrRUJRUVVnQmhzZ0JoQWFJZzVCaUg5TEJFQWdEaUVKREFVTElBTWdEa0VEYWtrTkJTQXBJQUlnRGlBR0VCa2lCa0dJZjBzRVFDQUdJUWtNQlFzZ0JnMEZBa0FDUUNBRktBS282d0ZCQVVjTkFDQUZLQUtrNndFaUNVVU5BQ0FGS0FLVTZ3RkZEUUFnQ1NnQ0JFRUJheUlISUFVb0F0enBBU0lLclVLSGxhK3ZtTGJlbTU1L2ZrTEp6OW15OGVXNjZpZUZRaGVKUXMvVzA3N1N4NnZaUW41QytmUGQ4Wm4ybWFzV2ZDSS9RaUdJSUQrRlFzL1cwNzdTeDZ2WlFuNGlQMElkaUNBL2hVTDU4OTN4bWZhWnF4WitJajlDSUlnZ1A0V25jU0VHSUFrb0FnQWhGUU5BUVFBaENBSkFJQlVnQmtFQ2RHb29BZ0FpQ1VVTkFDQUpLQUlJUVFoSkRRQWdDU2dDQkNJU0tBQUFRYmZJd3VGK1J3MEFJQklvQUFRaENBc2dDQ0FLUndSQUlBWWdCM0ZCQVdvaEJpQUlEUUVMQ3lBSlJRMEFJQVVRR0NBRlFYODJBcURyQVNBRklBazJBcFRyQVNBRklBVW9BdHpwQVNJSU5nS1k2d0VNQVFzZ0JTZ0MzT2tCSVFnTEFrQWdDRVVOQUNBRktBS1k2d0VnQ0VZTkFFRmdJUWtNQmdzQ1FDQUZLQUxnNlFFRVFDQUZJQVVvQXVqcUFTSUpSVFlDN09vQklBa05BU0FGUXZucTBORG55YUhrNFFBM0E2anFBU0FGUWdBM0E2RHFBU0FGUXMvVzA3N1N4NnZaUWpjRG1Pb0JJQVZDMXV1Qzd1cjlpZlhnQURjRGtPb0JJQVZDQURjRGlPb0JJQ0pCQUVFb0VBTWFEQUVMSUFWQkFEWUM3T29CQ3lBQklCMXFJU1VnQlNBRktRUG82UUVnRHExOE53UG82UUVnQXlBT2F5RURJQUlnRG1vaEFpQWRJUTREUUNBQ0lBTWdCRUVzYWhBZEloVkJpSDlMQkVBZ0ZTRUpEQVlMSUFOQkEyc2lOU0FWU1EwRUlBSkJBMm9oRzBGc0lRa0NRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUNBRUtBSXNEZ01DQVFBVkN5QVZRZi8vQjBzTkV5QVZRUU5KRFJJZ0JTa0R5T2tCSVQ4Q1FBSkFJQnN0QUFBaUNVRURjU0lhUVFGckRnTUdBUUFIQ3lBRktBS0E2Z0VOQUVGaUlRa01GUXNnRlVFRlNRMFNJQnNvQUFBaEF3Si9Ba0FDUUFKQUlBbEJBblpCQTNFaUNVRUNhdzRDQVFJQUN5QUpRUUJISVFjZ0EwRUVka0gvQjNFaEMwRURJUVlnQTBFT2RrSC9CM0VNQWd0QkJDRUdJQU5CQkhaQi8vOEFjU0VMUVFFaEJ5QURRUkoyREFFTElBTkJCSFpCLy84UGNTSUxRWUNBQ0VzTkUwRUJJUWRCQlNFR0lBSXRBQWRCQ25RZ0EwRVdkbklMSWdnZ0Jtb2lDU0FWU3cwU0FrQWdDMEdCQmtrTkFDQUZLQUtjNndGRkRRQkJBQ0VEQTBBZ0EwR0RnQUZMRFFFZ0EwRkFheUVEREFBTEFBc2dCaUFiYWlFUElCcEJBMGNOQmlBRktBSU1JZ0l0QUFGQkNIUWhBeUFIRFFjZ0EwVU5DQ0FFUWZBQWFpQVBJQWdRRFNJRFFZaC9TdzBKSUFKQkJHb2hCaUFMSUJ4cUloSkJBMnNoQ2tFQUlBSXZBUUpyUVI5eElRY2dIQ0VEQTBBZ0JFSHdBR29RRDBVZ0F5QUtTWEVFUUNBRElBWWdCQ2dDY0NJSUlBUW9BblFpRDNRZ0IzWkJBblJxSWdJdkFRQTdBQUFnQXlBQ0xRQURhaUlESUFZZ0NDQVBJQUl0QUFKcUlnaDBJQWQyUVFKMGFpSUNMd0VBT3dBQUlBUWdDQ0FDTFFBQ2FqWUNkQ0FESUFJdEFBTnFJUU1NQVFVZ0VrRUNheUVJQTBBZ0JFSHdBR29RRHlFUElBUW9BbkFoQ2lBRUtBSjBJUUlnQXlBSVN5QVBja1VFUUNBRElBWWdDaUFDZENBSGRrRUNkR29pQ2k4QkFEc0FBQ0FFSUFJZ0NpMEFBbW8yQW5RZ0F5QUtMUUFEYWlFRERBRUxDd05BSUFNZ0NFMEVRQ0FESUFZZ0NpQUNkQ0FIZGtFQ2RHb2lEeThCQURzQUFDQURJQTh0QUFOcUlRTWdBaUFQTFFBQ2FpRUNEQUVMQ3dKQUlBTWdFazhOQUNBRElBWWdDaUFDZENBSGRrRUNkR29pQXkwQUFEb0FBQ0FETFFBRFFRRkdCRUFnQWlBRExRQUNhaUVDREFFTElBSkJIMHNOQUVFZ0lBSWdBeTBBQW1vaUFpQUNRU0JQR3lFQ0MwRnNRV3dnQ3lBRUtBSjRJQVFvQW54SEd5QUNRU0JIR3lFRERBc0xBQXNBQ3lBRUtBSTBJZ0lnSlNBT2Ewc05DaUFPUlFSQVFRQWhDU0FDRFFJTURnc2dEaUFiTFFBQUlBSVFBeG9nQWlFSkRBd0xJQlVnSlNBT2Ewc05DU0FPRFFGQkFDRUpJQlZGRFF3TFFiWi9JUWtNRVFzZ0RpQWJJQlVRQWhvZ0ZTRUpEQW9MSUJ3Z0d3Si9Ba0FDUUFKQUlBbEJBblpCQTNGQkFXc09Bd0VBQWdBTElBbEJBM1loQTBFQkRBSUxJQnN2QUFCQkJIWWhBMEVDREFFTElCVkJCRWtORGlBQ0x3QURJQUl0QUFWQkVIUnlJZ0pCajRDQUFVc05EaUFDUVFSMklRTkJBd3NpQW1vdEFBQWdBMEVnYWhBRElRa2dCU0FETmdLQTZ3RWdCU0FKTmdMdzZnRWdBa0VCYWlFSkRBVUxJQlVDZndKQUFrQUNRQ0FKUVFKMlFRTnhRUUZyRGdNQkFBSUFDeUFKUVFOMklRTkJBUXdDQ3lBYkx3QUFRUVIySVFOQkFnd0JDeUFDTHdBRElBSXRBQVZCRUhSeVFRUjJJUU5CQXdzaUFpQURhaUlKUVNCcVNRUkFJQWtnRlVzTkRTQWNJQUlnRzJvZ0F4QUNJUUlnQlNBRE5nS0E2d0VnQlNBQ05nTHc2Z0VnQWlBRGFpSUNRZ0EzQUJnZ0FrSUFOd0FRSUFKQ0FEY0FDQ0FDUWdBM0FBQU1CUXNnQlNBRE5nS0E2d0VnQlNBQ0lCdHFOZ0x3NmdFTUJBc2dCMFVFUUNBZUlBOGdDQ0FVRUJRaUFrR0lmMHNnQWlBSVQzSU5EQ0FjSUFzZ0FpQVBhaUFJSUFKcklCNFFGU0VEREFNTElBdEZJQWhGY2cwTElBdEJDSFlpQXlBSUlBdEpCSDhnQ0VFRWRDQUxiZ1ZCRHd0QkdHd2lBa0dNQ0dvb0FnQnNJQUpCaUFocUtBSUFhaUlHUVFOMklBWnFJQUpCZ0FocUtBSUFJQUpCaEFocUtBSUFJQU5zYWtrRVFDTUFRUkJySWhBa0FDQWVLQUlBSVFNZ0ZFSHdCR3BCQUVIc0FCQURJUVpCVkNFQ0FrQWdBMEgvQVhFaURFRU1TdzBBQWtBZ0ZFSGNDV29nQmlBUVFRaHFJQkJCREdvZ0R5QUlJQlJCM0F0cUloY1FDeUlTUVloL1N3MEFJQkFvQWd3aUJpQU1TdzBCSUJSQnFBVnFJUTBnRkVHa0JXb2hOaUFlUVFScUlSRWdBMEdBZ0lCNGNTRTNJQVpCQVdvaUV5RUNJQVloQXdOQUlBSWlCMEVCYXlFQ0lBTWlDa0VCYXlFRElCUWdDa0VDZEdvb0F2QUVSUTBBQzBFQklBY2dCMEVCVFJzaEZrRUFJUWRCQVNFQ0EwQWdBaUFXUndSQUlCUWdBa0VDZENJRGFpZ0M4QVFoR0NBRElBMXFJQWMyQWdBZ0FrRUJhaUVDSUFjZ0dHb2hCd3dCQ3dzZ0RTQUhOZ0lBUVFBaEFpQVFLQUlJSVFNRFFDQUNJQU5IQkVBZ0RTQUNJQlJxUWR3SmFpMEFBQ0lZUVFKMGFpSVpJQmtvQWdBaUdVRUJhallDQUNBVUlCbEJBWFJxSWhrZ0dEb0EzUVVnR1NBQ09nRGNCU0FDUVFGcUlRSU1BUXNMUVFBaEF5QU5RUUEyQWdBZ0RDQUdRWDl6YWlFR1FRRWhBZ05BSUFJZ0ZrY0VRQ0FVSUFKQkFuUnFJZzBnQXpZQ0FDQU5LQUx3QkNBQ0lBWnFkQ0FEYWlFRElBSkJBV29oQWd3QkN3c2dEQ0FUSUFwcklnWnJRUUZxSVFvZ0JpRURBMEFnQXlBS1NRUkFJQlFnQTBFMGJHb2hEVUVCSVFJRFFDQUNJQlpIQkVBZ0RTQUNRUUowSWhocUlCUWdHR29vQWdBZ0EzWTJBZ0FnQWtFQmFpRUNEQUVMQ3lBRFFRRnFJUU1NQVFzTElCY2dGRUUwRUFJaE9DQVVRWkFNYWlFNUlCTWdER3NoT2lBVVFkd0ZhaUVYUVFBaENnTkFBa0FDUUNBSElBcEhCRUJCQVNBTUlCTWdGeUFLUVFGMGFpSUNMUUFCSWcxcklnTnJJaGgwSVJrZ0FpMEFBQ0VXSURnZ0RVRUNkR29pSHlnQ0FDRUNJQVlnR0UwRVFDQTJRUUVnQXlBNmFpSU5JQTFCQVV3YklpQkJBblFpSkdvb0FnQWhEU0E1SUJRZ0EwRTBiR3BCTkJBQ0lTRWdEVUVCZENFbUlCRWdBa0VDZEdvaEl5QWdRUUZORFFJZ0EwRVFkRUdBZ1B3SGNTQVdja0dBZ0lBSWNpRWdJQ0VnSkdvb0FnQWhKRUVBSVFJRFFDQUNJQ1JHRFFNZ0l5QUNRUUowYWlBZ05nRUFJQUpCQVdvaEFnd0FDd0FMSUFJZ0FpQVphaUlOSUFJZ0RVc2JJUTBnQTBFUWRFR0FnUHdIY1NBV2NrR0FnSUFJY2lFREEwQWdBaUFOUmcwRElCRWdBa0VDZEdvZ0F6WUJBQ0FDUVFGcUlRSU1BQXNBQ3lBZUlBeEJFSFFnTjNJZ0RISkJnQUp5TmdJQURBTUxJQWNnRFdzaEpDQVhJQ1pxSVNaQkFDRU5BMEFnRFNBa1JnMEJRUUVnR0NBVElDWWdEVUVCZEdvaUp5MEFBU0lDYXlJN2EzUWlQQ0FoSUFKQkFuUnFJaUFvQWdBaUFtb2hQU0FESUR0cVFSQjBRWUNBL0FkeElDY3RBQUJCQ0hSeUlCWnlRWUNBZ0JCeUlTY0RRQ0FqSUFKQkFuUnFJQ2MyQVFBZ0FrRUJhaUlDSUQxSkRRQUxJQ0FnSUNnQ0FDQThhallDQUNBTlFRRnFJUTBNQUFzQUN5QWZJQjhvQWdBZ0dXbzJBZ0FnQ2tFQmFpRUtEQUFMQUFzZ0VpRUNDeUFRUVJCcUpBQWdBa0dJZjBzZ0FpQUlUM0lORENBY0lBc2dBaUFQYWlBSUlBSnJJQjRRRmlFRERBTUxJQjRnRHlBSUlCUVFGQ0lDUVloL1N5QUNJQWhQY2cwTElCd2dDeUFDSUE5cUlBZ2dBbXNnSGhBWElRTU1BZ3NnQXdSQUlCd2dDeUFQSUFnZ0FoQVdJUU1NQWdzZ0hDQUxJQThnQ0NBQ0VCY2hBd3dCQ3lBY0lBc2dEeUFJSUFJUUZTRURDeUFEUVloL1N3MElJQVVnQ3pZQ2dPc0JJQVVnSERZQzhPb0JJQVZCQVRZQ2dPb0JJQnBCQWtZRVFDQUZJQjQyQWd3TElBc2dIR29pQWtJQU53QUFJQUpDQURjQUdDQUNRZ0EzQUJBZ0FrSUFOd0FJSUFsQmlIOUxEUW9MSUFrZ0ZVWU5DQ0FWSUFscklRWWdCU2dDbk9zQklRb0NRQ0FKSUJ0cUlnTXRBQUFpRDBVRVFFRUJJUUpCQUNFUFFiaC9JUWtnQmtFQlJnMEJEQXNMQW44Z0EwRUJhaUFQd0NJQ1FRQk9EUUFhSUFKQmYwWUVRQ0FHUVFOSURRc2dBeThBQVVHQS9nRnFJUThnQTBFRGFnd0JDeUFHUVFKSURRb2dBeTBBQVNBUFFRaDBja0dBZ0FKcklROGdBMEVDYWdzaEVrRzRmeUVKSUJKQkFXb2lBaUFWSUJ0cUlnZExEUW9nTENBRklCSXRBQUFpRWtFR2RrRWpRUWtnQWlBSElBSnJRY0FRUWRBUlFmQVNJQVVvQW9UcUFTQUtJQThnRkJBaElnbEJpSDlMRFFnZ0t5QW9JQkpCQkhaQkEzRkJIMEVJSUFJZ0NXb2lBaUFISUFKclFZQUxRWUFNUVlBWElBVW9Bb1RxQVNBRktBS2M2d0VnRHlBVUVDRWlDRUdJZjBzTkNFRnNJUWtnS2lBdElCSkJBblpCQTNGQk5FRUpJQUlnQ0dvaUFpQUhJQUpyUVlBTlFlQU9RWkFaSUFVb0FvVHFBU0FGS0FLYzZ3RWdEeUFVRUNFaUIwR0lmMHNOQ2lBQ0lBZHFJQU5ySWdJaENTQUNRWWgvU3cwS0N5QU9JQTlCQUV4eURRRUxRYnAvSVFrTUNBc2dKU0FPYXlFSklBWWdBbXNoQmlBQ0lBTnFJUWNDUUFKQUFrQWdDa1VFUUNBUFFRbElJQVVwQThqcEFVS0JnSUFJVkhJTkFpQW9LQUlBSWdKQkNHb2hFaUFDS0FJRUlRcEJBQ0VEUVFBaEFnTkFJQU1nQ25aRkJFQWdBaUFTSUFOQkEzUnFMUUFDUVJaTGFpRUNJQU5CQVdvaEF3d0JDd3NnQlVFQU5nS2M2d0VnQWtFSUlBcHJkRUVVVHcwQkRBTUxJQVZCQURZQ25Pc0JDeUFFSUFVb0F2RHFBU0lETmdMY0FTQUpJQTVxSVJZZ0F5QUZLQUtBNndGcUlSY0NRQ0FQUlFSQUlBNGhCd3dCQ3lBRktBSzQ2UUVoR2lBRktBSzA2UUVoR0NBRktBS3c2UUVoRWlBRlFRRTJBb1RxQVVFQUlRTURRQ0FEUVFOSEJFQWdCQ0FEUVFKMElnSnFJQUlnQldwQnJOQUJhaWdDQURZQ1pDQURRUUZxSVFNTUFRc0xRV3doQ1NBRVFUaHFJZ0lnQnlBR0VBMUJpSDlMRFFOQkNDQVBJQTlCQ0U0YklSOGdOQ0FDSUFVb0FnQVFIaUF6SUFJZ0JTZ0NDQkFlSURJZ0FpQUZLQUlFRUI0Z0RpQVNheUVaUVFBaENBTkFJQVJCT0dvUUQwRURSaUFJSUI5T2NrVUVRQ0FFS0FKUUlBUW9Ba3hCQTNScUtRSUFJa0NuSWdkQkVIWWlFVUgvQVhFaEN5QUVLQUpnSUFRb0FseEJBM1JxS1FJQUlrR25JZ3hCRUhZaUlVSC9BWEVoRUNBRUtBSllJQVFvQWxSQkEzUnFLUUlBSWtKQ0lJaW5JUVlnUVVJZ2lDQkFRaUNJcHlFREFrQWdRa0lRaUtjaUNrSC9BWEVpQWtFQ1R3UkFBa0FnQWtFWlNTQS9Rb0dBZ0JCVWNrVUVRQ0FFUVNBZ0JDZ0NQQ0lLYXlJTklBSWdBaUFOU3hzaUV5QUthallDUENBR0lBUW9BamdnQ25SQkFDQVRhM1lnQWlBVGF5SVRkR29oQ2lBRVFUaHFFQThhSUFJZ0RVME5BU0FFSUFRb0Fqd2lBaUFUYWpZQ1BDQUVLQUk0SUFKMFFRQWdFMnQySUFwcUlRb01BUXNnQkNBQ0lBUW9BandpRFdvMkFqd2dCQ2dDT0NBTmRFRUFJQXByZGlBR2FpRUtJQVJCT0dvUUR4b0xJQVFwQW1RaFJDQUVJQW8yQW1RZ0JDQkVOd0pvREFFTEFrQWdBa1VFUUNBREJFQWdCQ2dDWkNFS0RBTUxJQVFvQW1naENnd0JDeUFFSUFRb0Fqd2lBa0VCYWpZQ1BBSi9JQVlnQTBWcUlBUW9BamdnQW5SQkgzWnFJZ0pCQTBZRVFDQUVLQUprUVFGckRBRUxJQUpCQW5RZ0JHb29BbVFMSWdaRklBWnFJUW9nQWtFQlJ3UkFJQVFnQkNnQ2FEWUNiQXNMSUFRZ0JDZ0NaRFlDYUNBRUlBbzJBbVFMcHlFQ0lFRkNnSUQ4QjROUVJRUkFJQVFnQkNnQ1BDSUdJQkJxTmdJOElBUW9BamdnQm5SQkFDQWhhM1lnQW1vaEFnc2dDeUFRYWtFVVR3UkFJQVJCT0dvUUR4b0xJRUJDZ0lEOEI0TlFSUVJBSUFRZ0JDZ0NQQ0lHSUF0cU5nSThJQVFvQWpnZ0JuUkJBQ0FSYTNZZ0Eyb2hBd3NnQkVFNGFoQVBHaUFFSUFRb0FqZ2lCa0VBSUFkQkdIWWlDeUFFS0FJOGFpSVFhM1lnQzBFQ2RFR2dIV29vQWdCeElBZEIvLzhEY1dvMkFrd2dCQ0FRSUF4QkdIWWlCMm9pQ3pZQ1BDQUVJQWRCQW5SQm9CMXFLQUlBSUFaQkFDQUxhM1p4SUF4Qi8vOERjV28yQWx3Z0JFRTRhaEFQR2lBRUlFS25JZ1pCR0hZaUJ5QUVLQUk4YWlJTE5nSThJQVFnQjBFQ2RFR2dIV29vQWdBZ0JDZ0NPRUVBSUF0cmRuRWdCa0gvL3dOeGFqWUNWQ0FFUWZBQWFpQUlRUXhzYWlJR0lBbzJBZ2dnQmlBQ05nSUVJQVlnQXpZQ0FDQUlRUUZxSVFnZ0F5QVphaUFDYWlFWkRBRUxDeUFJSUI5SURRTWdGa0VnYXlFaElBNGhCd05BSUFSQk9Hb1FEMEVEUmlBSUlBOU9ja1VFUUNBRUtBSlFJQVFvQWt4QkEzUnFLUUlBSWtDbklnWkJFSFlpSTBIL0FYRWhDaUFFS0FKZ0lBUW9BbHhCQTNScUtRSUFJa0duSWcxQkVIWWlJRUgvQVhFaEV5QUVLQUpZSUFRb0FsUkJBM1JxS1FJQUlrSkNJSWluSVFNZ1FVSWdpQ0JBUWlDSXB5RUxBa0FnUWtJUWlLY2lERUgvQVhFaUFrRUNUd1JBQWtBZ0FrRVpTU0EvUW9HQWdCQlVja1VFUUNBRVFTQWdCQ2dDUENJTWF5SVJJQUlnQWlBUlN4c2lFQ0FNYWpZQ1BDQURJQVFvQWpnZ0RIUkJBQ0FRYTNZZ0FpQVFheUlNZEdvaEVDQUVRVGhxRUE4YUlBSWdFVTBOQVNBRUlBUW9BandpQWlBTWFqWUNQQ0FFS0FJNElBSjBRUUFnREd0MklCQnFJUkFNQVFzZ0JDQUNJQVFvQWp3aUVHbzJBandnQkNnQ09DQVFkRUVBSUF4cmRpQURhaUVRSUFSQk9Hb1FEeG9MSUFRcEFtUWhSQ0FFSUJBMkFtUWdCQ0JFTndKb0RBRUxBa0FnQWtVRVFDQUxCRUFnQkNnQ1pDRVFEQU1MSUFRb0FtZ2hFQXdCQ3lBRUlBUW9BandpQWtFQmFqWUNQQUovSUFNZ0MwVnFJQVFvQWpnZ0FuUkJIM1pxSWdKQkEwWUVRQ0FFS0FKa1FRRnJEQUVMSUFKQkFuUWdCR29vQW1RTElnTkZJQU5xSVJBZ0FrRUJSd1JBSUFRZ0JDZ0NhRFlDYkFzTElBUWdCQ2dDWkRZQ2FDQUVJQkEyQW1RTHB5RU1JRUZDZ0lEOEI0TlFSUVJBSUFRZ0JDZ0NQQ0lDSUJOcU5nSThJQVFvQWpnZ0FuUkJBQ0FnYTNZZ0RHb2hEQXNnQ2lBVGFrRVVUd1JBSUFSQk9Hb1FEeG9MSUVCQ2dJRDhCNE5RUlFSQUlBUWdCQ2dDUENJQ0lBcHFOZ0k4SUFRb0FqZ2dBblJCQUNBamEzWWdDMm9oQ3dzZ0JFRTRhaEFQR2lBRUlBUW9BamdpQWtFQUlBWkJHSFlpQXlBRUtBSThhaUlLYTNZZ0EwRUNkRUdnSFdvb0FnQnhJQVpCLy84RGNXbzJBa3dnQkNBS0lBMUJHSFlpQTJvaUJqWUNQQ0FFSUFOQkFuUkJvQjFxS0FJQUlBSkJBQ0FHYTNaeElBMUIvLzhEY1dvMkFsd2dCRUU0YWhBUEdpQUVJRUtuSWdKQkdIWWlBeUFFS0FJOGFpSUdOZ0k4SUFRZ0EwRUNkRUdnSFdvb0FnQWdCQ2dDT0VFQUlBWnJkbkVnQWtILy93TnhhallDVkFKQUFrQUNRQ0FFS0FMY0FTSURJQVJCOEFCcUlBaEJCM0ZCREd4cUloTW9BZ0FpRVdvaUl5QVhTdzBBSUFjZ0V5Z0NCQ0lOSUJGcUlncHFJQ0ZMRFFBZ0NrRWdhaUFXSUFkclRRMEJDeUFFSUJNb0FnZzJBaGdnQkNBVEtRSUFOd01RSUFjZ0ZpQUVRUkJxSUFSQjNBRnFJQmNnRWlBWUlCb1FIeUVLREFFTElBY2dFV29oQWlBVEtBSUlJUVlnQnlBREtRQUFOd0FBSUFjZ0F5a0FDRGNBQ0FKQUlCRkJFVWtOQUNBSElBTXBBQkEzQUJBZ0J5QURLUUFZTndBWUlCRkJFR3RCRVVnTkFDQURRUkJxSVFNZ0IwRWdhaUVSQTBBZ0VTQURLUUFRTndBQUlCRWdBeWtBR0RjQUNDQVJJQU1wQUNBM0FCQWdFU0FES1FBb053QVlJQU5CSUdvaEF5QVJRU0JxSWhFZ0Fra05BQXNMSUFJZ0Jtc2hBeUFFSUNNMkF0d0JJQUlnRW1zZ0Jra0VRQ0FHSUFJZ0dHdExEUWNnR2lBYUlBTWdFbXNpQTJvaUVTQU5hazhFUUNBQ0lCRWdEUkFLR2d3Q0N5QURJQTFxSVEwZ0FpQVJRUUFnQTJzUUNpQURheUVDSUJJaEF3c2dCa0VRVHdSQUlBSWdBeWtBQURjQUFDQUNJQU1wQUFnM0FBZ2dEVUVSU0EwQklBSWdEV29oQmlBQ1FSQnFJUUlEUUNBQ0lBTXBBQkEzQUFBZ0FpQURLUUFZTndBSUlBSWdBeWtBSURjQUVDQUNJQU1wQUNnM0FCZ2dBMEVnYWlFRElBSkJJR29pQWlBR1NRMEFDd3dCQ3dKQUlBWkJCMDBFUUNBQ0lBTXRBQUE2QUFBZ0FpQURMUUFCT2dBQklBSWdBeTBBQWpvQUFpQUNJQU10QUFNNkFBTWdBaUFESUFaQkFuUWlCa0hBSG1vb0FnQnFJZ01vQUFBMkFBUWdBeUFHUWVBZWFpZ0NBR3NoQXd3QkN5QUNJQU1wQUFBM0FBQUxJQTFCQ1VrTkFDQUNJQTFxSVJFZ0FrRUlhaUlHSUFOQkNHb2lBMnRCRDB3RVFBTkFJQVlnQXlrQUFEY0FBQ0FEUVFocUlRTWdCa0VJYWlJR0lCRkpEUUFNQWdzQUN5QUdJQU1wQUFBM0FBQWdCaUFES1FBSU53QUlJQTFCR1VnTkFDQUNRUmhxSVFJRFFDQUNJQU1wQUJBM0FBQWdBaUFES1FBWU53QUlJQUlnQXlrQUlEY0FFQ0FDSUFNcEFDZzNBQmdnQTBFZ2FpRURJQUpCSUdvaUFpQVJTUTBBQ3dzZ0NrR0lmMHNFUUNBS0lRa01CZ1VnRXlBUU5nSUlJQk1nRERZQ0JDQVRJQXMyQWdBZ0NFRUJhaUVJSUFjZ0Ntb2hCeUFMSUJscUlBeHFJUmtNQWdzQUN3c2dDQ0FQU0EwRElBZ2dIMnNoQmdOQUFrQWdCaUFQVGdSQVFRQWhBd05BSUFOQkEwWU5BaUFGSUFOQkFuUWlBbXBCck5BQmFpQUNJQVJxS0FKa05nSUFJQU5CQVdvaEF3d0FDd0FMQWtBQ1FBSkFJQVFvQXR3QklnTWdCRUh3QUdvZ0JrRUhjVUVNYkdvaUNDZ0NBQ0lNYWlJUUlCZExEUUFnQnlBSUtBSUVJZ3NnREdvaUNtb2dJVXNOQUNBS1FTQnFJQllnQjJ0TkRRRUxJQVFnQ0NnQ0NEWUNLQ0FFSUFncEFnQTNBeUFnQnlBV0lBUkJJR29nQkVIY0FXb2dGeUFTSUJnZ0doQWZJUW9NQVFzZ0J5QU1haUVDSUFnb0FnZ2hDQ0FISUFNcEFBQTNBQUFnQnlBREtRQUlOd0FJQWtBZ0RFRVJTUTBBSUFjZ0F5a0FFRGNBRUNBSElBTXBBQmczQUJnZ0RFRVFhMEVSU0EwQUlBTkJFR29oQXlBSFFTQnFJUXdEUUNBTUlBTXBBQkEzQUFBZ0RDQURLUUFZTndBSUlBd2dBeWtBSURjQUVDQU1JQU1wQUNnM0FCZ2dBMEVnYWlFRElBeEJJR29pRENBQ1NRMEFDd3NnQWlBSWF5RURJQVFnRURZQzNBRWdBaUFTYXlBSVNRUkFJQWdnQWlBWWEwc05CeUFhSUJvZ0F5QVNheUlEYWlJTUlBdHFUd1JBSUFJZ0RDQUxFQW9hREFJTElBTWdDMm9oQ3lBQ0lBeEJBQ0FEYXhBS0lBTnJJUUlnRWlFREN5QUlRUkJQQkVBZ0FpQURLUUFBTndBQUlBSWdBeWtBQ0RjQUNDQUxRUkZJRFFFZ0FpQUxhaUVJSUFKQkVHb2hBZ05BSUFJZ0F5a0FFRGNBQUNBQ0lBTXBBQmczQUFnZ0FpQURLUUFnTndBUUlBSWdBeWtBS0RjQUdDQURRU0JxSVFNZ0FrRWdhaUlDSUFoSkRRQUxEQUVMQWtBZ0NFRUhUUVJBSUFJZ0F5MEFBRG9BQUNBQ0lBTXRBQUU2QUFFZ0FpQURMUUFDT2dBQ0lBSWdBeTBBQXpvQUF5QUNJQU1nQ0VFQ2RDSUlRY0FlYWlnQ0FHb2lBeWdBQURZQUJDQURJQWhCNEI1cUtBSUFheUVEREFFTElBSWdBeWtBQURjQUFBc2dDMEVKU1EwQUlBSWdDMm9oRENBQ1FRaHFJZ2dnQTBFSWFpSURhMEVQVEFSQUEwQWdDQ0FES1FBQU53QUFJQU5CQ0dvaEF5QUlRUWhxSWdnZ0RFa05BQXdDQ3dBTElBZ2dBeWtBQURjQUFDQUlJQU1wQUFnM0FBZ2dDMEVaU0EwQUlBSkJHR29oQWdOQUlBSWdBeWtBRURjQUFDQUNJQU1wQUJnM0FBZ2dBaUFES1FBZ053QVFJQUlnQXlrQUtEY0FHQ0FEUVNCcUlRTWdBa0VnYWlJQ0lBeEpEUUFMQ3lBS1FZaC9Td1JBSUFvaENRd0dCU0FHUVFGcUlRWWdCeUFLYWlFSERBSUxBQXNMSUFRb0F0d0JJUU1MUWJwL0lRa2dGeUFEYXlJQ0lCWWdCMnRMRFFJZ0J3Ui9JQWNnQXlBQ0VBSWdBbW9GUVFBTElBNXJJUWtNQWdzZ0JVRUFOZ0tjNndFTElBUWdCU2dDOE9vQklnTTJBdHdCSUFrZ0Rtb2hEQ0FESUFVb0FvRHJBV29oRUFKQUlBOUZCRUFnRGlFR0RBRUxJQVVvQXJqcEFTRU5JQVVvQXJUcEFTRVRJQVVvQXJEcEFTRVNJQVZCQVRZQ2hPb0JRUUFoQXdOQUlBTkJBMGNFUUNBRUlBTkJBblFpQW1vZ0FpQUZha0dzMEFGcUtBSUFOZ0tjQVNBRFFRRnFJUU1NQVFzTFFXd2hDU0FFUWZBQWFpSUNJQWNnQmhBTlFZaC9TdzBCSURFZ0FpQUZLQUlBRUI0Z01DQUNJQVVvQWdnUUhpQXZJQUlnQlNnQ0JCQWVJQXhCSUdzaEdDQU9JUVlEUUNBRUtBS0lBU0FFS0FLRUFVRURkR29wQWdBaVFLY2lDa0VRZGlJWlFmOEJjU0VMSUFRb0FwZ0JJQVFvQXBRQlFRTjBhaWtDQUNKQnB5SVdRUkIySWg5Qi93RnhJUm9nQkNnQ2tBRWdCQ2dDakFGQkEzUnFLUUlBSWtKQ0lJaW5JUWNnUVVJZ2lDQkFRaUNJcHlFREFrQWdRa0lRaUtjaUNFSC9BWEVpQWtFQ1R3UkFBa0FnQWtFWlNTQS9Rb0dBZ0JCVWNrVUVRQ0FFUVNBZ0JDZ0NkQ0lJYXlJUklBSWdBaUFSU3hzaUZ5QUlhallDZENBSElBUW9BbkFnQ0hSQkFDQVhhM1lnQWlBWGF5SVhkR29oQ0NBRVFmQUFhaEFQR2lBQ0lCRk5EUUVnQkNBRUtBSjBJZ0lnRjJvMkFuUWdCQ2dDY0NBQ2RFRUFJQmRyZGlBSWFpRUlEQUVMSUFRZ0FpQUVLQUowSWhGcU5nSjBJQVFvQW5BZ0VYUkJBQ0FJYTNZZ0Iyb2hDQ0FFUWZBQWFoQVBHZ3NnQkNrQ25BRWhSQ0FFSUFnMkFwd0JJQVFnUkRjQ29BRU1BUXNDUUNBQ1JRUkFJQU1FUUNBRUtBS2NBU0VJREFNTElBUW9BcUFCSVFnTUFRc2dCQ0FFS0FKMElnSkJBV28yQW5RQ2Z5QUhJQU5GYWlBRUtBSndJQUowUVI5MmFpSUNRUU5HQkVBZ0JDZ0NuQUZCQVdzTUFRc2dBa0VDZENBRWFpZ0NuQUVMSWdkRklBZHFJUWdnQWtFQlJ3UkFJQVFnQkNnQ29BRTJBcVFCQ3dzZ0JDQUVLQUtjQVRZQ29BRWdCQ0FJTmdLY0FRdW5JUUlnUVVLQWdQd0hnMUJGQkVBZ0JDQUVLQUowSWdjZ0dtbzJBblFnQkNnQ2NDQUhkRUVBSUI5cmRpQUNhaUVDQ3lBTElCcHFRUlJQQkVBZ0JFSHdBR29RRHhvTElFQkNnSUQ4QjROUVJRUkFJQVFnQkNnQ2RDSUhJQXRxTmdKMElBUW9BbkFnQjNSQkFDQVphM1lnQTJvaEF3c2dCRUh3QUdvUUR4b2dCQ0FFS0FKd0lnZEJBQ0FLUVJoMklnc2dCQ2dDZEdvaUdtdDJJQXRCQW5SQm9CMXFLQUlBY1NBS1FmLy9BM0ZxTmdLRUFTQUVJQm9nRmtFWWRpSUthaUlMTmdKMElBUWdDa0VDZEVHZ0hXb29BZ0FnQjBFQUlBdHJkbkVnRmtILy93TnhhallDbEFFZ0JFSHdBR29RRHhvZ0JDQkNweUlIUVJoMklnb2dCQ2dDZEdvaUN6WUNkQ0FFSUFwQkFuUkJvQjFxS0FJQUlBUW9BbkJCQUNBTGEzWnhJQWRCLy84RGNXbzJBb3dCSUFRZ0F6WUNPQ0FFSUFJMkFqd2dCQ0FJTmdKQUFrQUNRQUpBSUFRb0F0d0JJZ3NnQTJvaUZpQVFTdzBBSUFZZ0FpQURhaUlLYWlBWVN3MEFJQXBCSUdvZ0RDQUdhMDBOQVFzZ0JDQUVRVUJyS0FJQU5nSUlJQVFnQkNrRE9EY0RBQ0FHSUF3Z0JDQUVRZHdCYWlBUUlCSWdFeUFORUI4aENnd0JDeUFESUFacUlRY2dCaUFMS1FBQU53QUFJQVlnQ3lrQUNEY0FDQUpBSUFOQkVVa05BQ0FHSUFzcEFCQTNBQkFnQmlBTEtRQVlOd0FZSUFOQkVHdEJFVWdOQUNBTFFSQnFJUU1nQmtFZ2FpRUxBMEFnQ3lBREtRQVFOd0FBSUFzZ0F5a0FHRGNBQ0NBTElBTXBBQ0EzQUJBZ0N5QURLUUFvTndBWUlBTkJJR29oQXlBTFFTQnFJZ3NnQjBrTkFBc0xJQWNnQ0dzaEF5QUVJQlkyQXR3QklBY2dFbXNnQ0VrRVFDQUlJQWNnRTJ0TERRUWdEU0FOSUFNZ0Vtc2lBMm9pQ3lBQ2FrOEVRQ0FISUFzZ0FoQUtHZ3dDQ3lBSElBdEJBQ0FEYXhBS0lBUWdBaUFEYWlJQ05nSThJQU5ySVFjZ0VpRURDeUFJUVJCUEJFQWdCeUFES1FBQU53QUFJQWNnQXlrQUNEY0FDQ0FDUVJGSURRRWdBaUFIYWlFSUlBZEJFR29oQWdOQUlBSWdBeWtBRURjQUFDQUNJQU1wQUJnM0FBZ2dBaUFES1FBZ053QVFJQUlnQXlrQUtEY0FHQ0FEUVNCcUlRTWdBa0VnYWlJQ0lBaEpEUUFMREFFTEFrQWdDRUVIVFFSQUlBY2dBeTBBQURvQUFDQUhJQU10QUFFNkFBRWdCeUFETFFBQ09nQUNJQWNnQXkwQUF6b0FBeUFISUFNZ0NFRUNkQ0lJUWNBZWFpZ0NBR29pQXlnQUFEWUFCQ0FESUFoQjRCNXFLQUlBYXlFRERBRUxJQWNnQXlrQUFEY0FBQXNnQWtFSlNRMEFJQUlnQjJvaEN5QUhRUWhxSWdnZ0EwRUlhaUlEYTBFUFRBUkFBMEFnQ0NBREtRQUFOd0FBSUFOQkNHb2hBeUFJUVFocUlnZ2dDMGtOQUF3Q0N3QUxJQWdnQXlrQUFEY0FBQ0FJSUFNcEFBZzNBQWdnQWtFWlNBMEFJQWRCR0dvaEFnTkFJQUlnQXlrQUVEY0FBQ0FDSUFNcEFCZzNBQWdnQWlBREtRQWdOd0FRSUFJZ0F5a0FLRGNBR0NBRFFTQnFJUU1nQWtFZ2FpSUNJQXRKRFFBTEN5QUtRWWgvU3dSQUlBb2hDUXdEQ3lBR0lBcHFJUVlnQkVId0FHb1FEeUVESUE5QkFXc2lEdzBBQzBFQUlRSWdBMEVDU1EwQkEwQWdBa0VEUndSQUlBVWdBa0VDZENJRGFrR3MwQUZxSUFNZ0JHb29BcHdCTmdJQUlBSkJBV29oQWd3QkN3c2dCQ2dDM0FFaEF3dEJ1bjhoQ1NBUUlBTnJJZ0lnRENBR2Ewc05BQ0FHQkg4Z0JpQURJQUlRQWlBQ2FnVkJBQXNnRG1zaENRc2dDVUdJZjBzTkJnc0NRQ0FGS0FMczZnRkZEUUFnQlNBRktRT0k2Z0VnQ2ExOE53T0k2Z0VDUUNBRktBTFE2Z0VpQWlBSmFpSUlRUjlOQkVBZ0RrVU5BU0FDSUNKcUlBNGdDUkFDR2lBRktBTFE2Z0VnQ1dvaENBd0JDeUFPSVFNZ0FnUkFJQUlnSW1vZ0EwRWdJQUpyRUFJYUlBVW9BdERxQVNFQ0lBVkJBRFlDME9vQklBVWdCU2tEa09vQklBVXBBTERxQVVMUDF0Tyswc2VyMlVKK2ZFSWZpVUtIbGErdm1MYmVtNTUvZmpjRGtPb0JJQVVnQlNrRG1Pb0JJQVVwQUxqcUFVTFAxdE8rMHNlcjJVSitmRUlmaVVLSGxhK3ZtTGJlbTU1L2ZqY0RtT29CSUFVZ0JTa0RvT29CSUFVcEFNRHFBVUxQMXRPKzBzZXIyVUorZkVJZmlVS0hsYSt2bUxiZW01NS9mamNEb09vQklBVWdCU2tEcU9vQklBVXBBTWpxQVVMUDF0Tyswc2VyMlVKK2ZFSWZpVUtIbGErdm1MYmVtNTUvZmpjRHFPb0JJQU1nQW10QklHb2hBd3NnQ1NBT2FpSUNJQU5CSUdwUEJFQWdBa0VnYXlFR0lBVXBBNmpxQVNFL0lBVXBBNkRxQVNGQUlBVXBBNWpxQVNGQklBVXBBNURxQVNGQ0EwQWdBeWtBR0VMUDF0Tyswc2VyMlVKK0lEOThRaCtKUW9lVnI2K1l0dDZibm45K0lUOGdBeWtBRUVMUDF0Tyswc2VyMlVKK0lFQjhRaCtKUW9lVnI2K1l0dDZibm45K0lVQWdBeWtBQ0VMUDF0Tyswc2VyMlVKK0lFRjhRaCtKUW9lVnI2K1l0dDZibm45K0lVRWdBeWtBQUVMUDF0Tyswc2VyMlVKK0lFSjhRaCtKUW9lVnI2K1l0dDZibm45K0lVSWdBMEVnYWlJRElBWk5EUUFMSUFVZ1B6Y0RxT29CSUFVZ1FEY0RvT29CSUFVZ1FUY0RtT29CSUFVZ1FqY0RrT29CQ3lBQ0lBTk5EUUVnSWlBRElBSWdBMnNpQ0JBQ0dnc2dCU0FJTmdMUTZnRUxJRFVnRldzaEF5QVZJQnRxSVFJZ0NTQU9haUVPSUFRb0FqQkZEUUFMSUNrcEF3QWlQMEovVVNBL0lBNGdIV3VzVVhKRkJFQkJiQ0VKREFZTElBVW9BdURwQVFSQVFXb2hDU0FEUVFSSkRRWWdCU2dDNk9vQlJRUkFJQ0lnQlNnQzBPb0JhaUVLQW40Z0JTa0RpT29CSWo5Q0lGb0VRQ0FGS1FPWTZnRWlRRUlIaVNBRktRT1E2Z0VpUVVJQmlYd2dCU2tEb09vQklrSkNESWw4SUFVcEE2anFBU0pEUWhLSmZDQkJRcy9XMDc3U3g2dlpRbjVDSDRsQ2g1V3ZyNWkyM3B1ZWYzNkZRb2VWcjYrWXR0NmJubjkrUXAyanRlcURzWTJLK2dCOUlFQkN6OWJUdnRMSHE5bENma0lmaVVLSGxhK3ZtTGJlbTU1L2ZvVkNoNVd2cjVpMjNwdWVmMzVDbmFPMTZvT3hqWXI2QUgwZ1FrTFAxdE8rMHNlcjJVSitRaCtKUW9lVnI2K1l0dDZibm45K2hVS0hsYSt2bUxiZW01NS9ma0tkbzdYcWc3R05pdm9BZlNCRFFzL1cwNzdTeDZ2WlFuNUNINGxDaDVXdnI1aTIzcHVlZjM2RlFvZVZyNitZdHQ2Ym5uOStRcDJqdGVxRHNZMksrZ0I5REFFTElBVXBBNkRxQVVMRno5bXk4ZVc2NmlkOEN5QS9mQ0UvSUNJaEJnTkFJQW9nQmtFSWFpSUhUd1JBSUFZcEFBQkN6OWJUdnRMSHE5bENma0lmaVVLSGxhK3ZtTGJlbTU1L2ZpQS9oVUliaVVLSGxhK3ZtTGJlbTU1L2ZrS2RvN1hxZzdHTml2b0FmU0UvSUFjaEJnd0JDd3NDUUNBS0lBWkJCR29pQ0VrRVFDQUdJUWdNQVFzZ0JqVUFBRUtIbGErdm1MYmVtNTUvZmlBL2hVSVhpVUxQMXRPKzBzZXIyVUorUXZuejNmR1o5cG1yRm53aFB3c0RRQ0FJSUFwSkJFQWdDREVBQUVMRno5bXk4ZVc2NmlkK0lEK0ZRZ3VKUW9lVnI2K1l0dDZibm45K0lUOGdDRUVCYWlFSURBRUxDeUFDS0FBQUlEOUNJWWdnUDRWQ3o5YlR2dExIcTlsQ2ZpSS9RaDJJSUQrRlF2bnozZkdaOXBtckZuNGlQMElnaUNBL2hhZEhEUWNMSUFOQkJHc2hBeUFDUVFScUlRSUxJQTRnSFdzaUNVR0pmMDhOQkNBQklBbHJJUUVnQ1NBZGFpRWRRUUVoUGd3QkN3dEJ1SDhoQnlBRERRUWdIU0FBYXlFSERBUUxRV3doQ1F3QkMwRzRmeUVKQzBHNGZ5RUhJQWxCZGtZZ1BuRU5BUXNnQ1NFSEN5Z0NBQTBBSUFWQi9Pb0JhaWdDQUNFQklBVkIrT29CYWlnQ0FDRUFJQVVRR0NBRktBS3c2d0VnQUNBQkVCTWdCVUVBTmdLdzZ3RWdCU2dDcE9zQklnSUVRQUpBQWtBQ1FBSkFJQUlvQWdBaUF3UkFJQUJGRFFJZ0FTQURJQUFSQWdBTUFRc2dBRVVOQWdzZ0FTQUNJQUFSQWdBTUFnc2dBeEFHQ3lBQ0VBWUxJQVZCQURZQ3BPc0JDeUFBQkVBZ0FTQUZJQUFSQWdBTUFRc2dCUkFHQ3lBRVFlQUJhaVFBSUFjTEM2Z1ZDUUJCaUFnTERRRUFBQUFCQUFBQUFnQUFBQUlBUWFBSUM3TUdBUUFBQUFFQUFBQUNBQUFBQWdBQUFDWUFBQUNDQUFBQUlRVUFBRW9BQUFCbkNBQUFKZ0FBQU1BQkFBQ0FBQUFBU1FVQUFFb0FBQUMrQ0FBQUtRQUFBQ3dDQUFDQUFBQUFTUVVBQUVvQUFBQytDQUFBTHdBQUFNb0NBQUNBQUFBQWlnVUFBRW9BQUFDRUNRQUFOUUFBQUhNREFBQ0FBQUFBblFVQUFFb0FBQUNnQ1FBQVBRQUFBSUVEQUFDQUFBQUE2d1VBQUVzQUFBQStDZ0FBUkFBQUFKNERBQUNBQUFBQVRRWUFBRXNBQUFDcUNnQUFTd0FBQUxNREFBQ0FBQUFBd1FZQUFFMEFBQUFmRFFBQVRRQUFBRk1FQUFDQUFBQUFJd2dBQUZFQUFBQ21Ed0FBVkFBQUFKa0VBQUNBQUFBQVN3a0FBRmNBQUFDeEVnQUFXQUFBQU5vRUFBQ0FBQUFBYndrQUFGMEFBQUFqRkFBQVZBQUFBRVVGQUFDQUFBQUFWQW9BQUdvQUFBQ01GQUFBYWdBQUFLOEZBQUNBQUFBQWRna0FBSHdBQUFCT0VBQUFmQUFBQU5JQ0FBQ0FBQUFBWXdjQUFKRUFBQUNRQndBQWtnQUFBQUFBQUFBQkFBQUFBUUFBQUFVQUFBQU5BQUFBSFFBQUFEMEFBQUI5QUFBQS9RQUFBUDBCQUFEOUF3QUEvUWNBQVAwUEFBRDlId0FBL1Q4QUFQMS9BQUQ5L3dBQS9mOEJBUDMvQXdEOS93Y0EvZjhQQVAzL0h3RDkvejhBL2Y5L0FQMy8vd0Q5Ly84Qi9mLy9BLzMvL3dmOS8vOFAvZi8vSC8zLy96LzkvLzkvQUFBQUFBRUFBQUFDQUFBQUF3QUFBQVFBQUFBRkFBQUFCZ0FBQUFjQUFBQUlBQUFBQ1FBQUFBb0FBQUFMQUFBQURBQUFBQTBBQUFBT0FBQUFEd0FBQUJBQUFBQVJBQUFBRWdBQUFCTUFBQUFVQUFBQUZRQUFBQllBQUFBWEFBQUFHQUFBQUJrQUFBQWFBQUFBR3dBQUFCd0FBQUFkQUFBQUhnQUFBQjhBQUFBREFBQUFCQUFBQUFVQUFBQUdBQUFBQndBQUFBZ0FBQUFKQUFBQUNnQUFBQXNBQUFBTUFBQUFEUUFBQUE0QUFBQVBBQUFBRUFBQUFCRUFBQUFTQUFBQUV3QUFBQlFBQUFBVkFBQUFGZ0FBQUJjQUFBQVlBQUFBR1FBQUFCb0FBQUFiQUFBQUhBQUFBQjBBQUFBZUFBQUFId0FBQUNBQUFBQWhBQUFBSWdBQUFDTUFBQUFsQUFBQUp3QUFBQ2tBQUFBckFBQUFMd0FBQURNQUFBQTdBQUFBUXdBQUFGTUFBQUJqQUFBQWd3QUFBQU1CQUFBREFnQUFBd1FBQUFNSUFBQURFQUFBQXlBQUFBTkFBQUFEZ0FBQUF3QUJBRUhnRHd0UkFRQUFBQUVBQUFBQkFBQUFBUUFBQUFJQUFBQUNBQUFBQXdBQUFBTUFBQUFFQUFBQUJBQUFBQVVBQUFBSEFBQUFDQUFBQUFrQUFBQUtBQUFBQ3dBQUFBd0FBQUFOQUFBQURnQUFBQThBQUFBUUFFSEVFQXVMQVFFQUFBQUNBQUFBQXdBQUFBUUFBQUFGQUFBQUJnQUFBQWNBQUFBSUFBQUFDUUFBQUFvQUFBQUxBQUFBREFBQUFBMEFBQUFPQUFBQUR3QUFBQkFBQUFBU0FBQUFGQUFBQUJZQUFBQVlBQUFBSEFBQUFDQUFBQUFvQUFBQU1BQUFBRUFBQUFDQUFBQUFBQUVBQUFBQ0FBQUFCQUFBQUFnQUFBQVFBQUFBSUFBQUFFQUFBQUNBQUFBQUFBRUFRWkFTQytZRUFRQUFBQUVBQUFBQkFBQUFBUUFBQUFJQUFBQUNBQUFBQXdBQUFBTUFBQUFFQUFBQUJnQUFBQWNBQUFBSUFBQUFDUUFBQUFvQUFBQUxBQUFBREFBQUFBMEFBQUFPQUFBQUR3QUFBQkFBQUFBQkFBQUFCQUFBQUFnQUFBQUFBQUFBQVFBQkFRWUFBQUFBQUFBRUFBQUFBQkFBQUFRQUFBQUFJQUFBQlFFQUFBQUFBQUFGQXdBQUFBQUFBQVVFQUFBQUFBQUFCUVlBQUFBQUFBQUZCd0FBQUFBQUFBVUpBQUFBQUFBQUJRb0FBQUFBQUFBRkRBQUFBQUFBQUFZT0FBQUFBQUFCQlJBQUFBQUFBQUVGRkFBQUFBQUFBUVVXQUFBQUFBQUNCUndBQUFBQUFBTUZJQUFBQUFBQUJBVXdBQUFBSUFBR0JVQUFBQUFBQUFjRmdBQUFBQUFBQ0FZQUFRQUFBQUFLQmdBRUFBQUFBQXdHQUJBQUFDQUFBQVFBQUFBQUFBQUFCQUVBQUFBQUFBQUZBZ0FBQUNBQUFBVUVBQUFBQUFBQUJRVUFBQUFnQUFBRkJ3QUFBQUFBQUFVSUFBQUFJQUFBQlFvQUFBQUFBQUFGQ3dBQUFBQUFBQVlOQUFBQUlBQUJCUkFBQUFBQUFBRUZFZ0FBQUNBQUFRVVdBQUFBQUFBQ0JSZ0FBQUFnQUFNRklBQUFBQUFBQXdVb0FBQUFBQUFHQkVBQUFBQVFBQVlFUUFBQUFDQUFCd1dBQUFBQUFBQUpCZ0FDQUFBQUFBc0dBQWdBQURBQUFBUUFBQUFBRUFBQUJBRUFBQUFnQUFBRkFnQUFBQ0FBQUFVREFBQUFJQUFBQlFVQUFBQWdBQUFGQmdBQUFDQUFBQVVJQUFBQUlBQUFCUWtBQUFBZ0FBQUZDd0FBQUNBQUFBVU1BQUFBQUFBQUJnOEFBQUFnQUFFRkVnQUFBQ0FBQVFVVUFBQUFJQUFDQlJnQUFBQWdBQUlGSEFBQUFDQUFBd1VvQUFBQUlBQUVCVEFBQUFBQUFCQUdBQUFCQUFBQUR3WUFnQUFBQUFBT0JnQkFBQUFBQUEwR0FDQUFRWUFYQzRjQ0FRQUJBUVVBQUFBQUFBQUZBQUFBQUFBQUJnUTlBQUFBQUFBSkJmMEJBQUFBQUE4Ri9YOEFBQUFBRlFYOS94OEFBQUFEQlFVQUFBQUFBQWNFZlFBQUFBQUFEQVg5RHdBQUFBQVNCZjMvQXdBQUFCY0YvZjkvQUFBQUJRVWRBQUFBQUFBSUJQMEFBQUFBQUE0Ri9UOEFBQUFBRkFYOS93OEFBQUFDQlFFQUFBQVFBQWNFZlFBQUFBQUFDd1g5QndBQUFBQVJCZjMvQVFBQUFCWUYvZjgvQUFBQUJBVU5BQUFBRUFBSUJQMEFBQUFBQUEwRi9SOEFBQUFBRXdYOS93Y0FBQUFCQlFFQUFBQVFBQVlFUFFBQUFBQUFDZ1g5QXdBQUFBQVFCZjMvQUFBQUFCd0YvZi8vRHdBQUd3WDkvLzhIQUFBYUJmMy8vd01BQUJrRi9mLy9BUUFBR0FYOS8vOEFRWkFaQzRZRUFRQUJBUVlBQUFBQUFBQUdBd0FBQUFBQUFBUUVBQUFBSUFBQUJRVUFBQUFBQUFBRkJnQUFBQUFBQUFVSUFBQUFBQUFBQlFrQUFBQUFBQUFGQ3dBQUFBQUFBQVlOQUFBQUFBQUFCaEFBQUFBQUFBQUdFd0FBQUFBQUFBWVdBQUFBQUFBQUJoa0FBQUFBQUFBR0hBQUFBQUFBQUFZZkFBQUFBQUFBQmlJQUFBQUFBQUVHSlFBQUFBQUFBUVlwQUFBQUFBQUNCaThBQUFBQUFBTUdPd0FBQUFBQUJBWlRBQUFBQUFBSEJvTUFBQUFBQUFrR0F3SUFBQkFBQUFRRUFBQUFBQUFBQkFVQUFBQWdBQUFGQmdBQUFBQUFBQVVIQUFBQUlBQUFCUWtBQUFBQUFBQUZDZ0FBQUFBQUFBWU1BQUFBQUFBQUJnOEFBQUFBQUFBR0VnQUFBQUFBQUFZVkFBQUFBQUFBQmhnQUFBQUFBQUFHR3dBQUFBQUFBQVllQUFBQUFBQUFCaUVBQUFBQUFBRUdJd0FBQUFBQUFRWW5BQUFBQUFBQ0Jpc0FBQUFBQUFNR013QUFBQUFBQkFaREFBQUFBQUFGQm1NQUFBQUFBQWdHQXdFQUFDQUFBQVFFQUFBQU1BQUFCQVFBQUFBUUFBQUVCUUFBQUNBQUFBVUhBQUFBSUFBQUJRZ0FBQUFnQUFBRkNnQUFBQ0FBQUFVTEFBQUFBQUFBQmc0QUFBQUFBQUFHRVFBQUFBQUFBQVlVQUFBQUFBQUFCaGNBQUFBQUFBQUdHZ0FBQUFBQUFBWWRBQUFBQUFBQUJpQUFBQUFBQUJBR0F3QUJBQUFBRHdZRGdBQUFBQUFPQmdOQUFBQUFBQTBHQXlBQUFBQUFEQVlERUFBQUFBQUxCZ01JQUFBQUFBb0dBd1FBUWFRZEM5a0JBUUFBQUFNQUFBQUhBQUFBRHdBQUFCOEFBQUEvQUFBQWZ3QUFBUDhBQUFEL0FRQUEvd01BQVA4SEFBRC9Ed0FBL3g4QUFQOC9BQUQvZndBQS8vOEFBUC8vQVFELy93TUEvLzhIQVAvL0R3RC8veDhBLy84L0FQLy9md0QvLy84QS8vLy9BZi8vL3dQLy8vOEgvLy8vRC8vLy94Ly8vLzgvLy8vL2Z3QUFBQUFCQUFBQUFnQUFBQVFBQUFBQUFBQUFBZ0FBQUFRQUFBQUlBQUFBQUFBQUFBRUFBQUFDQUFBQUFRQUFBQVFBQUFBRUFBQUFCQUFBQUFRQUFBQUlBQUFBQ0FBQUFBZ0FBQUFIQUFBQUNBQUFBQWtBQUFBS0FBQUFDd0JCZ0I4TEE0QVJBUT09Ijt2YXIgc2U9bmV3IEpBLENlPSExO2FzeW5jIGZ1bmN0aW9uIF9JKEEsdCxlKXtsZXQgST1udWxsO3R5cGVvZiBBIT0ic3RyaW5nIj9JPUEuaHJlZjpBLnN0YXJ0c1dpdGgoImh0dHAiKT9JPUE6ST1gJHt0fS8ke0F9YCxJLmVuZHNXaXRoKCIuanMiKSYmKEk9SS5zdWJzdHJpbmcoMCxJLmxlbmd0aC0zKSksSS5lbmRzV2l0aCgiLndhc20iKSYmKEk9SS5zdWJzdHJpbmcoMCxJLmxlbmd0aC01KSk7bGV0IHI9YCR7SX0ud2FzbWAsbz1hd2FpdCBMQS5nZXQoYCR7cn0uenN0YCx7cmVzcG9uc2VUeXBlOiJhcnJheWJ1ZmZlciIscGFyYW1zOmV9KTtDZXx8KGF3YWl0IHNlLmluaXQoKSxDZT0hMCk7bGV0IEM9c2UuZGVjb2RlKG5ldyBVaW50OEFycmF5KG8uZGF0YSkpLmJ1ZmZlcjtyZXR1cm4oYXdhaXQgaW1wb3J0KGAke0l9LmpzYCkpLmRlZmF1bHQoe3dhc21CaW5hcnk6Q30pfXZhciBCZT1fSTt2YXIgYkE9bmV3IE1hcDthc3luYyBmdW5jdGlvbiBYSShBLHQsZSl7bGV0IEk9QSxyPUEsbz1udWxsO3JldHVybiB0eXBlb2YgQSE9InN0cmluZyImJihJPW5ldyBVUkwoQS5ocmVmKSxyPUkuaHJlZiksYkEuaGFzKHIpP289YXdhaXQgYkEuZ2V0KHIpOihiQS5zZXQocixCZShJLHQsZSkpLG89YXdhaXQgYkEuZ2V0KHIpKSxvfXZhciBhZT1YSTt2YXIgekk9e1RleHRGaWxlOiJUZXh0RmlsZSIsQmluYXJ5RmlsZToiQmluYXJ5RmlsZSIsVGV4dFN0cmVhbToiVGV4dFN0cmVhbSIsQmluYXJ5U3RyZWFtOiJCaW5hcnlTdHJlYW0iLEltYWdlOiJJbWFnZSIsUG9pbnRTZXQ6IlBvaW50U2V0IixNZXNoOiJNZXNoIixQb2x5RGF0YToiUG9seURhdGEiLFRyYW5zZm9ybUxpc3Q6IlRyYW5zZm9ybUxpc3QiLEpzb25Db21wYXRpYmxlOiJKc29uQ29tcGF0aWJsZSJ9LGg9ekk7dmFyIHZJPXtJbnQ4OiJpbnQ4IixVSW50ODoidWludDgiLEludDE2OiJpbnQxNiIsVUludDE2OiJ1aW50MTYiLEludDMyOiJpbnQzMiIsVUludDMyOiJ1aW50MzIiLEludDY0OiJpbnQ2NCIsVUludDY0OiJ1aW50NjQiLFNpemVWYWx1ZVR5cGU6InVpbnQ2NCIsSWRlbnRpZmllclR5cGU6InVpbnQ2NCIsSW5kZXhWYWx1ZVR5cGU6ImludDY0IixPZmZzZXRWYWx1ZVR5cGU6ImludDY0In0sUj12STt2YXIgJEk9e0Zsb2F0MzI6ImZsb2F0MzIiLEZsb2F0NjQ6ImZsb2F0NjQiLFNwYWNlUHJlY2lzaW9uVHlwZToiZmxvYXQ2NCJ9LHo9JEk7ZnVuY3Rpb24gQXIoQSx0KXtsZXQgZT1udWxsO3N3aXRjaChBKXtjYXNlIFIuVUludDg6e2U9bmV3IFVpbnQ4QXJyYXkodCk7YnJlYWt9Y2FzZSBSLkludDg6e2U9bmV3IEludDhBcnJheSh0KTticmVha31jYXNlIFIuVUludDE2OntlPW5ldyBVaW50MTZBcnJheSh0KTticmVha31jYXNlIFIuSW50MTY6e2U9bmV3IEludDE2QXJyYXkodCk7YnJlYWt9Y2FzZSBSLlVJbnQzMjp7ZT1uZXcgVWludDMyQXJyYXkodCk7YnJlYWt9Y2FzZSBSLkludDMyOntlPW5ldyBJbnQzMkFycmF5KHQpO2JyZWFrfWNhc2UgUi5VSW50NjQ6e3R5cGVvZiBnbG9iYWxUaGlzLkJpZ1VpbnQ2NEFycmF5PT0iZnVuY3Rpb24iP2U9bmV3IEJpZ1VpbnQ2NEFycmF5KHQpOmU9bmV3IFVpbnQ4QXJyYXkodCk7YnJlYWt9Y2FzZSBSLkludDY0Ont0eXBlb2YgZ2xvYmFsVGhpcy5CaWdJbnQ2NEFycmF5PT0iZnVuY3Rpb24iP2U9bmV3IEJpZ0ludDY0QXJyYXkodCk6ZT1uZXcgVWludDhBcnJheSh0KTticmVha31jYXNlIHouRmxvYXQzMjp7ZT1uZXcgRmxvYXQzMkFycmF5KHQpO2JyZWFrfWNhc2Ugei5GbG9hdDY0OntlPW5ldyBGbG9hdDY0QXJyYXkodCk7YnJlYWt9Y2FzZSJudWxsIjp7ZT1udWxsO2JyZWFrfWNhc2UgbnVsbDp7ZT1udWxsO2JyZWFrfWRlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKCJUeXBlIGlzIG5vdCBzdXBwb3J0ZWQgYXMgYSBUeXBlZEFycmF5Iil9cmV0dXJuIGV9dmFyIEg9QXI7dmFyIGNlPXR5cGVvZiBnbG9iYWxUaGlzLlNoYXJlZEFycmF5QnVmZmVyPT0iZnVuY3Rpb24iLFFlPW5ldyBUZXh0RW5jb2RlcixFZT1uZXcgVGV4dERlY29kZXIoInV0Zi04Iik7ZnVuY3Rpb24gdHIoQSx0KXtsZXQgZT17ZmxhZ3M6InIiLGVuY29kaW5nOiJiaW5hcnkifSxJPUEuZnNfb3Blbih0LGUuZmxhZ3MpLG89QS5mc19zdGF0KHQpLnNpemUsZz1udWxsO2NlP2c9bmV3IFNoYXJlZEFycmF5QnVmZmVyKG8pOmc9bmV3IEFycmF5QnVmZmVyKG8pO2xldCBDPW5ldyBVaW50OEFycmF5KGcpO3JldHVybiBBLmZzX3JlYWQoSSxDLDAsbywwKSxBLmZzX2Nsb3NlKEkpLEN9ZnVuY3Rpb24gZmUoQSx0LGUpe2xldCBJPW51bGw7Y2U/ST1uZXcgU2hhcmVkQXJyYXlCdWZmZXIoZSk6ST1uZXcgQXJyYXlCdWZmZXIoZSk7bGV0IHI9bmV3IFVpbnQ4QXJyYXkoSSksbz1uZXcgVWludDhBcnJheShBLkhFQVBVOC5idWZmZXIsdCxlKTtyZXR1cm4gci5zZXQobykscn1mdW5jdGlvbiB5KEEsdCxlLEkpe2xldCByPTA7cmV0dXJuIHQhPT1udWxsJiYocj1BLmNjYWxsKCJpdGtfd2FzbV9pbnB1dF9hcnJheV9hbGxvYyIsIm51bWJlciIsWyJudW1iZXIiLCJudW1iZXIiLCJudW1iZXIiLCJudW1iZXIiXSxbMCxlLEksdC5idWZmZXIuYnl0ZUxlbmd0aF0pLEEuSEVBUFU4LnNldChuZXcgVWludDhBcnJheSh0LmJ1ZmZlcikscikpLHJ9ZnVuY3Rpb24gVChBLHQsZSl7bGV0IEk9SlNPTi5zdHJpbmdpZnkodCkscj1BLmxlbmd0aEJ5dGVzVVRGOChJKSsxLG89QS5jY2FsbCgiaXRrX3dhc21faW5wdXRfanNvbl9hbGxvYyIsIm51bWJlciIsWyJudW1iZXIiLCJudW1iZXIiLCJudW1iZXIiXSxbMCxlLHJdKTtBLnN0cmluZ1RvVVRGOChJLG8scil9ZnVuY3Rpb24gRihBLHQsZSxJKXtsZXQgcj1BLmNjYWxsKCJpdGtfd2FzbV9vdXRwdXRfYXJyYXlfYWRkcmVzcyIsIm51bWJlciIsWyJudW1iZXIiLCJudW1iZXIiLCJudW1iZXIiXSxbMCx0LGVdKSxvPUEuY2NhbGwoIml0a193YXNtX291dHB1dF9hcnJheV9zaXplIiwibnVtYmVyIixbIm51bWJlciIsIm51bWJlciIsIm51bWJlciJdLFswLHQsZV0pLGc9ZmUoQSxyLG8pO3JldHVybiBIKEksZy5idWZmZXIpfWZ1bmN0aW9uIHNBKEEsdCl7bGV0IGU9QS5jY2FsbCgiaXRrX3dhc21fb3V0cHV0X2pzb25fYWRkcmVzcyIsIm51bWJlciIsWyJudW1iZXIiLCJudW1iZXIiXSxbMCx0XSksST1BLlVURjhUb1N0cmluZyhlKTtyZXR1cm4gSlNPTi5wYXJzZShJKX1mdW5jdGlvbiBlcihBLHQsZSxJKXtJIT1udWxsJiZJLmxlbmd0aD4wJiZJLmZvckVhY2goZnVuY3Rpb24oYSxuKXtzd2l0Y2goYS50eXBlKXtjYXNlIGguVGV4dFN0cmVhbTp7bGV0IHM9UWUuZW5jb2RlKGEuZGF0YS5kYXRhKSxmPXkoQSxzLG4sMCksQj17c2l6ZTpzLmJ1ZmZlci5ieXRlTGVuZ3RoLGRhdGE6YGRhdGE6YXBwbGljYXRpb24vdm5kLml0ay5hZGRyZXNzLDA6JHtmfWB9O1QoQSxCLG4pO2JyZWFrfWNhc2UgaC5Kc29uQ29tcGF0aWJsZTp7bGV0IHM9UWUuZW5jb2RlKEpTT04uc3RyaW5naWZ5KGEuZGF0YSkpLGY9eShBLHMsbiwwKSxCPXtzaXplOnMuYnVmZmVyLmJ5dGVMZW5ndGgsZGF0YTpgZGF0YTphcHBsaWNhdGlvbi92bmQuaXRrLmFkZHJlc3MsMDoke2Z9YH07VChBLEIsbik7YnJlYWt9Y2FzZSBoLkJpbmFyeVN0cmVhbTp7bGV0IHM9YS5kYXRhLmRhdGEsZj15KEEscyxuLDApLEI9e3NpemU6cy5idWZmZXIuYnl0ZUxlbmd0aCxkYXRhOmBkYXRhOmFwcGxpY2F0aW9uL3ZuZC5pdGsuYWRkcmVzcywwOiR7Zn1gfTtUKEEsQixuKTticmVha31jYXNlIGguVGV4dEZpbGU6e0EuZnNfd3JpdGVGaWxlKGEuZGF0YS5wYXRoLGEuZGF0YS5kYXRhKTticmVha31jYXNlIGguQmluYXJ5RmlsZTp7QS5mc193cml0ZUZpbGUoYS5kYXRhLnBhdGgsYS5kYXRhLmRhdGEpO2JyZWFrfWNhc2UgaC5JbWFnZTp7bGV0IHM9YS5kYXRhLGY9eShBLHMuZGF0YSxuLDApLEI9eShBLHMuZGlyZWN0aW9uLG4sMSksRT10eXBlb2Ygcy5tZXRhZGF0YT8uZW50cmllczwidSI/QXJyYXkuZnJvbShzLm1ldGFkYXRhLmVudHJpZXMoKSk6W10sbD17aW1hZ2VUeXBlOnMuaW1hZ2VUeXBlLG5hbWU6cy5uYW1lLG9yaWdpbjpzLm9yaWdpbixzcGFjaW5nOnMuc3BhY2luZyxkaXJlY3Rpb246YGRhdGE6YXBwbGljYXRpb24vdm5kLml0ay5hZGRyZXNzLDA6JHtCfWAsc2l6ZTpzLnNpemUsZGF0YTpgZGF0YTphcHBsaWNhdGlvbi92bmQuaXRrLmFkZHJlc3MsMDoke2Z9YCxtZXRhZGF0YTpFfTtUKEEsbCxuKTticmVha31jYXNlIGguTWVzaDp7bGV0IHM9YS5kYXRhLGY9eShBLHMucG9pbnRzLG4sMCksQj15KEEscy5jZWxscyxuLDEpLEU9eShBLHMucG9pbnREYXRhLG4sMiksbD15KEEscy5jZWxsRGF0YSxuLDMpLGM9e21lc2hUeXBlOnMubWVzaFR5cGUsbmFtZTpzLm5hbWUsbnVtYmVyT2ZQb2ludHM6cy5udW1iZXJPZlBvaW50cyxwb2ludHM6YGRhdGE6YXBwbGljYXRpb24vdm5kLml0ay5hZGRyZXNzLDA6JHtmfWAsbnVtYmVyT2ZDZWxsczpzLm51bWJlck9mQ2VsbHMsY2VsbHM6YGRhdGE6YXBwbGljYXRpb24vdm5kLml0ay5hZGRyZXNzLDA6JHtCfWAsY2VsbEJ1ZmZlclNpemU6cy5jZWxsQnVmZmVyU2l6ZSxudW1iZXJPZlBvaW50UGl4ZWxzOnMubnVtYmVyT2ZQb2ludFBpeGVscyxwb2ludERhdGE6YGRhdGE6YXBwbGljYXRpb24vdm5kLml0ay5hZGRyZXNzLDA6JHtFfWAsbnVtYmVyT2ZDZWxsUGl4ZWxzOnMubnVtYmVyT2ZDZWxsUGl4ZWxzLGNlbGxEYXRhOmBkYXRhOmFwcGxpY2F0aW9uL3ZuZC5pdGsuYWRkcmVzcywwOiR7bH1gfTtUKEEsYyxuKTticmVha31jYXNlIGguUG9pbnRTZXQ6e2xldCBzPWEuZGF0YSxmPXkoQSxzLnBvaW50cyxuLDApLEI9eShBLHMucG9pbnREYXRhLG4sMSksRT17cG9pbnRTZXRUeXBlOnMucG9pbnRTZXRUeXBlLG5hbWU6cy5uYW1lLG51bWJlck9mUG9pbnRzOnMubnVtYmVyT2ZQb2ludHMscG9pbnRzOmBkYXRhOmFwcGxpY2F0aW9uL3ZuZC5pdGsuYWRkcmVzcywwOiR7Zn1gLG51bWJlck9mUG9pbnRQaXhlbHM6cy5udW1iZXJPZlBvaW50UGl4ZWxzLHBvaW50RGF0YTpgZGF0YTphcHBsaWNhdGlvbi92bmQuaXRrLmFkZHJlc3MsMDoke0J9YH07VChBLEUsbik7YnJlYWt9Y2FzZSBoLlRyYW5zZm9ybUxpc3Q6e2xldCBzPWEuZGF0YSxmPVtdO3MuZm9yRWFjaCgoQixFKT0+e2xldCBjPWBkYXRhOmFwcGxpY2F0aW9uL3ZuZC5pdGsuYWRkcmVzcywwOiR7eShBLEIuZml4ZWRQYXJhbWV0ZXJzLG4sRSoyKX1gLFM9YGRhdGE6YXBwbGljYXRpb24vdm5kLml0ay5hZGRyZXNzLDA6JHt5KEEsQi5wYXJhbWV0ZXJzLG4sRSoyKzEpfWAsRD17dHJhbnNmb3JtVHlwZTpCLnRyYW5zZm9ybVR5cGUsbnVtYmVyT2ZGaXhlZFBhcmFtZXRlcnM6Qi5udW1iZXJPZkZpeGVkUGFyYW1ldGVycyxudW1iZXJPZlBhcmFtZXRlcnM6Qi5udW1iZXJPZlBhcmFtZXRlcnMsbmFtZTpCLm5hbWUsaW5wdXRTcGFjZU5hbWU6Qi5pbnB1dFNwYWNlTmFtZSxvdXRwdXRTcGFjZU5hbWU6Qi5vdXRwdXRTcGFjZU5hbWUscGFyYW1ldGVyczpTLGZpeGVkUGFyYW1ldGVyczpjfTtmLnB1c2goRCl9KSxUKEEsZixuKTticmVha31jYXNlIGguUG9seURhdGE6e2xldCBzPWEuZGF0YSxmPXkoQSxzLnBvaW50cyxuLDApLEI9eShBLHMudmVydGljZXMsbiwxKSxFPXkoQSxzLmxpbmVzLG4sMiksbD15KEEscy5wb2x5Z29ucyxuLDMpLGM9eShBLHMudHJpYW5nbGVTdHJpcHMsbiw0KSxwPXkoQSxzLnBvaW50RGF0YSxuLDUpLFM9eShBLHMucG9pbnREYXRhLG4sNiksRD17cG9seURhdGFUeXBlOnMucG9seURhdGFUeXBlLG5hbWU6cy5uYW1lLG51bWJlck9mUG9pbnRzOnMubnVtYmVyT2ZQb2ludHMscG9pbnRzOmBkYXRhOmFwcGxpY2F0aW9uL3ZuZC5pdGsuYWRkcmVzcywwOiR7Zn1gLHZlcnRpY2VzQnVmZmVyU2l6ZTpzLnZlcnRpY2VzQnVmZmVyU2l6ZSx2ZXJ0aWNlczpgZGF0YTphcHBsaWNhdGlvbi92bmQuaXRrLmFkZHJlc3MsMDoke0J9YCxsaW5lc0J1ZmZlclNpemU6cy5saW5lc0J1ZmZlclNpemUsbGluZXM6YGRhdGE6YXBwbGljYXRpb24vdm5kLml0ay5hZGRyZXNzLDA6JHtFfWAscG9seWdvbnNCdWZmZXJTaXplOnMucG9seWdvbnNCdWZmZXJTaXplLHBvbHlnb25zOmBkYXRhOmFwcGxpY2F0aW9uL3ZuZC5pdGsuYWRkcmVzcywwOiR7bH1gLHRyaWFuZ2xlU3RyaXBzQnVmZmVyU2l6ZTpzLnRyaWFuZ2xlU3RyaXBzQnVmZmVyU2l6ZSx0cmlhbmdsZVN0cmlwczpgZGF0YTphcHBsaWNhdGlvbi92bmQuaXRrLmFkZHJlc3MsMDoke2N9YCxudW1iZXJPZlBvaW50UGl4ZWxzOnMubnVtYmVyT2ZQb2ludFBpeGVscyxwb2ludERhdGE6YGRhdGE6YXBwbGljYXRpb24vdm5kLml0ay5hZGRyZXNzLDA6JHtwfWAsbnVtYmVyT2ZDZWxsUGl4ZWxzOnMubnVtYmVyT2ZDZWxsUGl4ZWxzLGNlbGxEYXRhOmBkYXRhOmFwcGxpY2F0aW9uL3ZuZC5pdGsuYWRkcmVzcywwOiR7U31gfTtUKEEsRCxuKTticmVha31kZWZhdWx0OnRocm93IEVycm9yKCJVbnN1cHBvcnRlZCBpbnB1dCBJbnRlcmZhY2VUeXBlIil9fSksQS5yZXNldE1vZHVsZVN0ZG91dCgpLEEucmVzZXRNb2R1bGVTdGRlcnIoKTtsZXQgcj1BLnN0YWNrU2F2ZSgpLG89MDt0cnl7bz1BLmNhbGxNYWluKHQuc2xpY2UoKSl9Y2F0Y2goYSl7dGhyb3cgdHlwZW9mIGE9PSJudW1iZXIiJiYoY29uc29sZS5sb2coIkV4Y2VwdGlvbiB3aGlsZSBydW5uaW5nIHBpcGVsaW5lOiIpLGNvbnNvbGUubG9nKCJzdGRvdXQ6IixBLmdldE1vZHVsZVN0ZG91dCgpKSxjb25zb2xlLmVycm9yKCJzdGRlcnI6IixBLmdldE1vZHVsZVN0ZGVycigpKSx0eXBlb2YgQS5nZXRFeGNlcHRpb25NZXNzYWdlPCJ1Ij9jb25zb2xlLmVycm9yKCJleGNlcHRpb246IixBLmdldEV4Y2VwdGlvbk1lc3NhZ2UoYSkpOmNvbnNvbGUuZXJyb3IoIkJ1aWxkIG1vZHVsZSBpbiBEZWJ1ZyBtb2RlIGZvciBleGNlcHRpb24gbWVzc2FnZSBpbmZvcm1hdGlvbi4iKSksYX1maW5hbGx5e0Euc3RhY2tSZXN0b3JlKHIpfWxldCBnPUEuZ2V0TW9kdWxlU3Rkb3V0KCksQz1BLmdldE1vZHVsZVN0ZGVycigpLFE9W107cmV0dXJuIGUhPW51bGwmJmUubGVuZ3RoPjAmJm89PT0wJiZlLmZvckVhY2goZnVuY3Rpb24oYSxuKXtsZXQgcz1udWxsO3N3aXRjaChhLnR5cGUpe2Nhc2UgaC5UZXh0U3RyZWFtOntsZXQgQj1BLmNjYWxsKCJpdGtfd2FzbV9vdXRwdXRfYXJyYXlfYWRkcmVzcyIsIm51bWJlciIsWyJudW1iZXIiLCJudW1iZXIiLCJudW1iZXIiXSxbMCxuLDBdKSxFPUEuY2NhbGwoIml0a193YXNtX291dHB1dF9hcnJheV9zaXplIiwibnVtYmVyIixbIm51bWJlciIsIm51bWJlciIsIm51bWJlciJdLFswLG4sMF0pLGw9bmV3IFVpbnQ4QXJyYXkoQS5IRUFQVTguYnVmZmVyLEIsRSk7cz17ZGF0YTpFZS5kZWNvZGUobCl9O2JyZWFrfWNhc2UgaC5Kc29uQ29tcGF0aWJsZTp7bGV0IEI9QS5jY2FsbCgiaXRrX3dhc21fb3V0cHV0X2FycmF5X2FkZHJlc3MiLCJudW1iZXIiLFsibnVtYmVyIiwibnVtYmVyIiwibnVtYmVyIl0sWzAsbiwwXSksRT1BLmNjYWxsKCJpdGtfd2FzbV9vdXRwdXRfYXJyYXlfc2l6ZSIsIm51bWJlciIsWyJudW1iZXIiLCJudW1iZXIiLCJudW1iZXIiXSxbMCxuLDBdKSxsPW5ldyBVaW50OEFycmF5KEEuSEVBUFU4LmJ1ZmZlcixCLEUpO3M9SlNPTi5wYXJzZShFZS5kZWNvZGUobCkpO2JyZWFrfWNhc2UgaC5CaW5hcnlTdHJlYW06e2xldCBCPUEuY2NhbGwoIml0a193YXNtX291dHB1dF9hcnJheV9hZGRyZXNzIiwibnVtYmVyIixbIm51bWJlciIsIm51bWJlciIsIm51bWJlciJdLFswLG4sMF0pLEU9QS5jY2FsbCgiaXRrX3dhc21fb3V0cHV0X2FycmF5X3NpemUiLCJudW1iZXIiLFsibnVtYmVyIiwibnVtYmVyIiwibnVtYmVyIl0sWzAsbiwwXSk7cz17ZGF0YTpmZShBLEIsRSl9O2JyZWFrfWNhc2UgaC5UZXh0RmlsZTp7cz17cGF0aDphLmRhdGEucGF0aCxkYXRhOkEuZnNfcmVhZEZpbGUoYS5kYXRhLnBhdGgse2VuY29kaW5nOiJ1dGY4In0pfTticmVha31jYXNlIGguQmluYXJ5RmlsZTp7cz17cGF0aDphLmRhdGEucGF0aCxkYXRhOnRyKEEsYS5kYXRhLnBhdGgpfTticmVha31jYXNlIGguSW1hZ2U6e2xldCBCPXNBKEEsbik7Qi5kYXRhPUYoQSxuLDAsQi5pbWFnZVR5cGUuY29tcG9uZW50VHlwZSksQi5kaXJlY3Rpb249RihBLG4sMSx6LkZsb2F0NjQpLEIubWV0YWRhdGE9bmV3IE1hcChCLm1ldGFkYXRhKSxzPUI7YnJlYWt9Y2FzZSBoLk1lc2g6e2xldCBCPXNBKEEsbik7Qi5udW1iZXJPZlBvaW50cz4wP0IucG9pbnRzPUYoQSxuLDAsQi5tZXNoVHlwZS5wb2ludENvbXBvbmVudFR5cGUpOkIucG9pbnRzPUgoQi5tZXNoVHlwZS5wb2ludENvbXBvbmVudFR5cGUsbmV3IEFycmF5QnVmZmVyKDApKSxCLm51bWJlck9mQ2VsbHM+MD9CLmNlbGxzPUYoQSxuLDEsQi5tZXNoVHlwZS5jZWxsQ29tcG9uZW50VHlwZSk6Qi5jZWxscz1IKEIubWVzaFR5cGUuY2VsbENvbXBvbmVudFR5cGUsbmV3IEFycmF5QnVmZmVyKDApKSxCLm51bWJlck9mUG9pbnRQaXhlbHM+MD9CLnBvaW50RGF0YT1GKEEsbiwyLEIubWVzaFR5cGUucG9pbnRQaXhlbENvbXBvbmVudFR5cGUpOkIucG9pbnREYXRhPUgoQi5tZXNoVHlwZS5wb2ludFBpeGVsQ29tcG9uZW50VHlwZSxuZXcgQXJyYXlCdWZmZXIoMCkpLEIubnVtYmVyT2ZDZWxsUGl4ZWxzPjA/Qi5jZWxsRGF0YT1GKEEsbiwzLEIubWVzaFR5cGUuY2VsbFBpeGVsQ29tcG9uZW50VHlwZSk6Qi5jZWxsRGF0YT1IKEIubWVzaFR5cGUuY2VsbFBpeGVsQ29tcG9uZW50VHlwZSxuZXcgQXJyYXlCdWZmZXIoMCkpLHM9QjticmVha31jYXNlIGguUG9pbnRTZXQ6e2xldCBCPXNBKEEsbik7Qi5udW1iZXJPZlBvaW50cz4wP0IucG9pbnRzPUYoQSxuLDAsQi5wb2ludFNldFR5cGUucG9pbnRDb21wb25lbnRUeXBlKTpCLnBvaW50cz1IKEIucG9pbnRTZXRUeXBlLnBvaW50Q29tcG9uZW50VHlwZSxuZXcgQXJyYXlCdWZmZXIoMCkpLEIubnVtYmVyT2ZQb2ludFBpeGVscz4wP0IucG9pbnREYXRhPUYoQSxuLDEsQi5wb2ludFNldFR5cGUucG9pbnRQaXhlbENvbXBvbmVudFR5cGUpOkIucG9pbnREYXRhPUgoQi5wb2ludFNldFR5cGUucG9pbnRQaXhlbENvbXBvbmVudFR5cGUsbmV3IEFycmF5QnVmZmVyKDApKSxzPUI7YnJlYWt9Y2FzZSBoLlRyYW5zZm9ybUxpc3Q6e2xldCBCPXNBKEEsbik7Qi5mb3JFYWNoKChFLGwpPT57RS5udW1iZXJPZkZpeGVkUGFyYW1ldGVycz4wJiYoQltsXS5maXhlZFBhcmFtZXRlcnM9RihBLG4sbCoyLEUudHJhbnNmb3JtVHlwZS5wYXJhbWV0ZXJzVmFsdWVUeXBlKSksRS5udW1iZXJPZkZpeGVkUGFyYW1ldGVycz4wJiYoQltsXS5wYXJhbWV0ZXJzPUYoQSxuLGwqMisxLEUudHJhbnNmb3JtVHlwZS5wYXJhbWV0ZXJzVmFsdWVUeXBlKSl9KSxzPUI7YnJlYWt9Y2FzZSBoLlBvbHlEYXRhOntsZXQgQj1zQShBLG4pO0IubnVtYmVyT2ZQb2ludHM+MD9CLnBvaW50cz1GKEEsbiwwLHouRmxvYXQzMik6Qi5wb2ludHM9bmV3IEZsb2F0MzJBcnJheSxCLnZlcnRpY2VzQnVmZmVyU2l6ZT4wP0IudmVydGljZXM9RihBLG4sMSxSLlVJbnQzMik6Qi52ZXJ0aWNlcz1uZXcgVWludDMyQXJyYXksQi5saW5lc0J1ZmZlclNpemU+MD9CLmxpbmVzPUYoQSxuLDIsUi5VSW50MzIpOkIubGluZXM9bmV3IFVpbnQzMkFycmF5LEIucG9seWdvbnNCdWZmZXJTaXplPjA/Qi5wb2x5Z29ucz1GKEEsbiwzLFIuVUludDMyKTpCLnBvbHlnb25zPW5ldyBVaW50MzJBcnJheSxCLnRyaWFuZ2xlU3RyaXBzQnVmZmVyU2l6ZT4wP0IudHJpYW5nbGVTdHJpcHM9RihBLG4sNCxSLlVJbnQzMik6Qi50cmlhbmdsZVN0cmlwcz1uZXcgVWludDMyQXJyYXksQi5udW1iZXJPZlBvaW50UGl4ZWxzPjA/Qi5wb2ludERhdGE9RihBLG4sNSxCLnBvbHlEYXRhVHlwZS5wb2ludFBpeGVsQ29tcG9uZW50VHlwZSk6Qi5wb2ludERhdGE9SChCLnBvbHlEYXRhVHlwZS5wb2ludFBpeGVsQ29tcG9uZW50VHlwZSxuZXcgQXJyYXlCdWZmZXIoMCkpLEIubnVtYmVyT2ZDZWxsUGl4ZWxzPjA/Qi5jZWxsRGF0YT1GKEEsbiw2LEIucG9seURhdGFUeXBlLmNlbGxQaXhlbENvbXBvbmVudFR5cGUpOkIuY2VsbERhdGE9SChCLnBvbHlEYXRhVHlwZS5jZWxsUGl4ZWxDb21wb25lbnRUeXBlLG5ldyBBcnJheUJ1ZmZlcigwKSkscz1CO2JyZWFrfWRlZmF1bHQ6dGhyb3cgRXJyb3IoIlVuc3VwcG9ydGVkIG91dHB1dCBJbnRlcmZhY2VUeXBlIil9bGV0IGY9e3R5cGU6YS50eXBlLGRhdGE6c307US5wdXNoKGYpfSkse3JldHVyblZhbHVlOm8sc3Rkb3V0Omcsc3RkZXJyOkMsb3V0cHV0czpRfX12YXIgbGU9ZXI7dmFyIElyPXR5cGVvZiBnbG9iYWxUaGlzLlNoYXJlZEFycmF5QnVmZmVyPCJ1IjtmdW5jdGlvbiBycihBLHQpe2lmKEE9PW51bGwpcmV0dXJuW107bGV0IGU9W107Zm9yKGxldCBJPTA7STxBLmxlbmd0aDtJKyspe2xldCByPW9yKEFbSV0sdCk7ciE9PW51bGwmJmUucHVzaChyKX1yZXR1cm4gZX1mdW5jdGlvbiBvcihBLHQpe2lmKEE9PW51bGwpcmV0dXJuIG51bGw7bGV0IGU9bnVsbDtyZXR1cm4gQS5idWZmZXIhPT12b2lkIDA/ZT1BLmJ1ZmZlcjpBLmJ5dGVMZW5ndGghPT12b2lkIDAmJihlPUEpLElyJiZlIGluc3RhbmNlb2YgU2hhcmVkQXJyYXlCdWZmZXI/bnVsbDp0P2U6ZS5zbGljZSgwKX12YXIgdWU9cnI7ZnVuY3Rpb24gZ3IoQSl7cmV0dXJuW0EuZGF0YSxBLmRpcmVjdGlvbl19dmFyIERlPWdyO2Z1bmN0aW9uIGlyKEEpe3JldHVybltBLnBvaW50cyxBLnBvaW50RGF0YSxBLmNlbGxzLEEuY2VsbERhdGFdfXZhciBoZT1pcjtmdW5jdGlvbiBucihBKXtyZXR1cm5bQS5wb2ludHMsQS52ZXJ0aWNlcyxBLmxpbmVzLEEucG9seWdvbnMsQS50cmlhbmdsZVN0cmlwcyxBLnBvaW50RGF0YSxBLmNlbGxEYXRhXX12YXIgZGU9bnI7YXN5bmMgZnVuY3Rpb24gc3IoQSx0LGUsSSl7bGV0IHI9bGUoQSx0LGUsSSksbz1bXTtyZXR1cm4gci5vdXRwdXRzLmZvckVhY2goZnVuY3Rpb24oZyl7aWYoZy50eXBlPT09aC5CaW5hcnlTdHJlYW18fGcudHlwZT09PWguQmluYXJ5RmlsZSl7bGV0IEM9Zy5kYXRhO28ucHVzaChDKX1lbHNlIGlmKGcudHlwZT09PWguSW1hZ2Upe2xldCBDPWcuZGF0YTtvLnB1c2goLi4uRGUoQykpfWVsc2UgaWYoZy50eXBlPT09aC5NZXNoKXtsZXQgQz1nLmRhdGE7by5wdXNoKC4uLmhlKEMpKX1lbHNlIGlmKGcudHlwZT09PWguUG9seURhdGEpe2xldCBDPWcuZGF0YTtvLnB1c2goLi4uZGUoQykpfX0pLE1BKHIsdWUobywhMCkpfXZhciB5ZT1zcjt2YXIgQ3I9e3J1blBpcGVsaW5lOmFzeW5jIGZ1bmN0aW9uKEEsdCxlLEkscixvKXtsZXQgZz1hd2FpdCBhZShBLHQsbyk7cmV0dXJuIGF3YWl0IHllKGcsZSxJLHIpfX07ZkEoQ3IpOyUwQS8qISBCdW5kbGVkIGxpY2Vuc2UgaW5mb3JtYXRpb246JTBBJTBBY29tbGluay9kaXN0L2VzbS9jb21saW5rLm1qczolMEEgICgqKiUwQSAgICogQGxpY2Vuc2UlMEEgICAqIENvcHlyaWdodCAyMDE5IEdvb2dsZSBMTEMlMEEgICAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wJTBBICAgKiklMEEqLyUwQSc7THQoVHQpO2V4cG9ydHtKbiBhcyBkb3duc2FtcGxlLExuIGFzIGRvd25zYW1wbGVCaW5TaHJpbmssVG4gYXMgZG93bnNhbXBsZUxhYmVsSW1hZ2UsUG4gYXMgZG93bnNhbXBsZVNpZ21hLE1uIGFzIGdhdXNzaWFuS2VybmVsUmFkaXVzLEggYXMgZ2V0RGVmYXVsdFdlYldvcmtlcixGIGFzIGdldFBpcGVsaW5lV29ya2VyVXJsLEogYXMgZ2V0UGlwZWxpbmVzQmFzZVVybCx1SSBhcyBzZXREZWZhdWx0V2ViV29ya2VyLEx0IGFzIHNldFBpcGVsaW5lV29ya2VyVXJsLHNJIGFzIHNldFBpcGVsaW5lc0Jhc2VVcmwsTUEgYXMgdmVyc2lvbn07Ci8qISBCdW5kbGVkIGxpY2Vuc2UgaW5mb3JtYXRpb246Cgpjb21saW5rL2Rpc3QvZXNtL2NvbWxpbmsubWpzOgogICgqKgogICAqIEBsaWNlbnNlCiAgICogQ29weXJpZ2h0IDIwMTkgR29vZ2xlIExMQwogICAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wCiAgICopCiovCg==""" +default_js_module = """data:text/javascript;base64,dmFyIE90PU9iamVjdC5kZWZpbmVQcm9wZXJ0eTt2YXIgUHQ9KEEsZSk9Pntmb3IodmFyIHQgaW4gZSlPdChBLHQse2dldDplW3RdLGVudW1lcmFibGU6ITB9KX07dmFyIHh0PSIxLjUuMCIsTUE9eHQ7dmFyIEp0PXtJbnQ4OiJpbnQ4IixVSW50ODoidWludDgiLEludDE2OiJpbnQxNiIsVUludDE2OiJ1aW50MTYiLEludDMyOiJpbnQzMiIsVUludDMyOiJ1aW50MzIiLEludDY0OiJpbnQ2NCIsVUludDY0OiJ1aW50NjQiLFNpemVWYWx1ZVR5cGU6InVpbnQ2NCIsSWRlbnRpZmllclR5cGU6InVpbnQ2NCIsSW5kZXhWYWx1ZVR5cGU6ImludDY0IixPZmZzZXRWYWx1ZVR5cGU6ImludDY0In0sUj1KdDt2YXIgSHQ9e0Zsb2F0MzI6ImZsb2F0MzIiLEZsb2F0NjQ6ImZsb2F0NjQiLFNwYWNlUHJlY2lzaW9uVHlwZToiZmxvYXQ2NCJ9LGo9SHQ7ZnVuY3Rpb24gTXQoQSxlKXtsZXQgdD1udWxsO3N3aXRjaChBKXtjYXNlIFIuVUludDg6e3Q9bmV3IFVpbnQ4QXJyYXkoZSk7YnJlYWt9Y2FzZSBSLkludDg6e3Q9bmV3IEludDhBcnJheShlKTticmVha31jYXNlIFIuVUludDE2Ont0PW5ldyBVaW50MTZBcnJheShlKTticmVha31jYXNlIFIuSW50MTY6e3Q9bmV3IEludDE2QXJyYXkoZSk7YnJlYWt9Y2FzZSBSLlVJbnQzMjp7dD1uZXcgVWludDMyQXJyYXkoZSk7YnJlYWt9Y2FzZSBSLkludDMyOnt0PW5ldyBJbnQzMkFycmF5KGUpO2JyZWFrfWNhc2UgUi5VSW50NjQ6e3R5cGVvZiBnbG9iYWxUaGlzLkJpZ1VpbnQ2NEFycmF5PT0iZnVuY3Rpb24iP3Q9bmV3IEJpZ1VpbnQ2NEFycmF5KGUpOnQ9bmV3IFVpbnQ4QXJyYXkoZSk7YnJlYWt9Y2FzZSBSLkludDY0Ont0eXBlb2YgZ2xvYmFsVGhpcy5CaWdJbnQ2NEFycmF5PT0iZnVuY3Rpb24iP3Q9bmV3IEJpZ0ludDY0QXJyYXkoZSk6dD1uZXcgVWludDhBcnJheShlKTticmVha31jYXNlIGouRmxvYXQzMjp7dD1uZXcgRmxvYXQzMkFycmF5KGUpO2JyZWFrfWNhc2Ugai5GbG9hdDY0Ont0PW5ldyBGbG9hdDY0QXJyYXkoZSk7YnJlYWt9Y2FzZSJudWxsIjp7dD1udWxsO2JyZWFrfWNhc2UgbnVsbDp7dD1udWxsO2JyZWFrfWRlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKCJUeXBlIGlzIG5vdCBzdXBwb3J0ZWQgYXMgYSBUeXBlZEFycmF5Iil9cmV0dXJuIHR9dmFyIFA9TXQ7dmFyIHF0PXtUZXh0RmlsZToiVGV4dEZpbGUiLEJpbmFyeUZpbGU6IkJpbmFyeUZpbGUiLFRleHRTdHJlYW06IlRleHRTdHJlYW0iLEJpbmFyeVN0cmVhbToiQmluYXJ5U3RyZWFtIixJbWFnZToiSW1hZ2UiLFBvaW50U2V0OiJQb2ludFNldCIsTWVzaDoiTWVzaCIsUG9seURhdGE6IlBvbHlEYXRhIixUcmFuc2Zvcm1MaXN0OiJUcmFuc2Zvcm1MaXN0IixKc29uQ29tcGF0aWJsZToiSnNvbkNvbXBhdGlibGUifSxwPXF0O3ZhciB3ZT1TeW1ib2woIkNvbWxpbmsucHJveHkiKSxZdD1TeW1ib2woIkNvbWxpbmsuZW5kcG9pbnQiKSxLQT1TeW1ib2woIkNvbWxpbmsucmVsZWFzZVByb3h5IikscUE9U3ltYm9sKCJDb21saW5rLmZpbmFsaXplciIpLGZBPVN5bWJvbCgiQ29tbGluay50aHJvd24iKSxEZT1BPT50eXBlb2YgQT09Im9iamVjdCImJkEhPT1udWxsfHx0eXBlb2YgQT09ImZ1bmN0aW9uIixLdD17Y2FuSGFuZGxlOkE9PkRlKEEpJiZBW3dlXSxzZXJpYWxpemUoQSl7bGV0e3BvcnQxOmUscG9ydDI6dH09bmV3IE1lc3NhZ2VDaGFubmVsO3JldHVybiBiZShBLGUpLFt0LFt0XV19LGRlc2VyaWFsaXplKEEpe3JldHVybiBBLnN0YXJ0KCksV0EoQSl9fSxXdD17Y2FuSGFuZGxlOkE9PkRlKEEpJiZmQSBpbiBBLHNlcmlhbGl6ZSh7dmFsdWU6QX0pe2xldCBlO3JldHVybiBBIGluc3RhbmNlb2YgRXJyb3I/ZT17aXNFcnJvcjohMCx2YWx1ZTp7bWVzc2FnZTpBLm1lc3NhZ2UsbmFtZTpBLm5hbWUsc3RhY2s6QS5zdGFja319OmU9e2lzRXJyb3I6ITEsdmFsdWU6QX0sW2UsW11dfSxkZXNlcmlhbGl6ZShBKXt0aHJvdyBBLmlzRXJyb3I/T2JqZWN0LmFzc2lnbihuZXcgRXJyb3IoQS52YWx1ZS5tZXNzYWdlKSxBLnZhbHVlKTpBLnZhbHVlfX0sU2U9bmV3IE1hcChbWyJwcm94eSIsS3RdLFsidGhyb3ciLFd0XV0pO2Z1bmN0aW9uIHZ0KEEsZSl7Zm9yKGxldCB0IG9mIEEpaWYoZT09PXR8fHQ9PT0iKiJ8fHQgaW5zdGFuY2VvZiBSZWdFeHAmJnQudGVzdChlKSlyZXR1cm4hMDtyZXR1cm4hMX1mdW5jdGlvbiBiZShBLGU9Z2xvYmFsVGhpcyx0PVsiKiJdKXtlLmFkZEV2ZW50TGlzdGVuZXIoIm1lc3NhZ2UiLGZ1bmN0aW9uIHIobil7aWYoIW58fCFuLmRhdGEpcmV0dXJuO2lmKCF2dCh0LG4ub3JpZ2luKSl7Y29uc29sZS53YXJuKGBJbnZhbGlkIG9yaWdpbiAnJHtuLm9yaWdpbn0nIGZvciBjb21saW5rIHByb3h5YCk7cmV0dXJufWxldHtpZDpvLHR5cGU6aSxwYXRoOmd9PU9iamVjdC5hc3NpZ24oe3BhdGg6W119LG4uZGF0YSksQj0obi5kYXRhLmFyZ3VtZW50TGlzdHx8W10pLm1hcChXKSxDO3RyeXtsZXQgYT1nLnNsaWNlKDAsLTEpLnJlZHVjZSgoRSxsKT0+RVtsXSxBKSxJPWcucmVkdWNlKChFLGwpPT5FW2xdLEEpO3N3aXRjaChpKXtjYXNlIkdFVCI6Qz1JO2JyZWFrO2Nhc2UiU0VUIjphW2cuc2xpY2UoLTEpWzBdXT1XKG4uZGF0YS52YWx1ZSksQz0hMDticmVhaztjYXNlIkFQUExZIjpDPUkuYXBwbHkoYSxCKTticmVhaztjYXNlIkNPTlNUUlVDVCI6e2xldCBFPW5ldyBJKC4uLkIpO0M9WnQoRSl9YnJlYWs7Y2FzZSJFTkRQT0lOVCI6e2xldHtwb3J0MTpFLHBvcnQyOmx9PW5ldyBNZXNzYWdlQ2hhbm5lbDtiZShBLGwpLEM9dkEoRSxbRV0pfWJyZWFrO2Nhc2UiUkVMRUFTRSI6Qz12b2lkIDA7YnJlYWs7ZGVmYXVsdDpyZXR1cm59fWNhdGNoKGEpe0M9e3ZhbHVlOmEsW2ZBXTowfX1Qcm9taXNlLnJlc29sdmUoQykuY2F0Y2goYT0+KHt2YWx1ZTphLFtmQV06MH0pKS50aGVuKGE9PntsZXRbSSxFXT1kQShhKTtlLnBvc3RNZXNzYWdlKE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSxJKSx7aWQ6b30pLEUpLGk9PT0iUkVMRUFTRSImJihlLnJlbW92ZUV2ZW50TGlzdGVuZXIoIm1lc3NhZ2UiLHIpLFJlKGUpLHFBIGluIEEmJnR5cGVvZiBBW3FBXT09ImZ1bmN0aW9uIiYmQVtxQV0oKSl9KS5jYXRjaChhPT57bGV0W0ksRV09ZEEoe3ZhbHVlOm5ldyBUeXBlRXJyb3IoIlVuc2VyaWFsaXphYmxlIHJldHVybiB2YWx1ZSIpLFtmQV06MH0pO2UucG9zdE1lc3NhZ2UoT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LEkpLHtpZDpvfSksRSl9KX0pLGUuc3RhcnQmJmUuc3RhcnQoKX1mdW5jdGlvbiBqdChBKXtyZXR1cm4gQS5jb25zdHJ1Y3Rvci5uYW1lPT09Ik1lc3NhZ2VQb3J0In1mdW5jdGlvbiBSZShBKXtqdChBKSYmQS5jbG9zZSgpfWZ1bmN0aW9uIFdBKEEsZSl7cmV0dXJuIFlBKEEsW10sZSl9ZnVuY3Rpb24gRUEoQSl7aWYoQSl0aHJvdyBuZXcgRXJyb3IoIlByb3h5IGhhcyBiZWVuIHJlbGVhc2VkIGFuZCBpcyBub3QgdXNlYWJsZSIpfWZ1bmN0aW9uIGtlKEEpe3JldHVybiBfKEEse3R5cGU6IlJFTEVBU0UifSkudGhlbigoKT0+e1JlKEEpfSl9dmFyIFFBPW5ldyBXZWFrTWFwLHBBPSJGaW5hbGl6YXRpb25SZWdpc3RyeSJpbiBnbG9iYWxUaGlzJiZuZXcgRmluYWxpemF0aW9uUmVnaXN0cnkoQT0+e2xldCBlPShRQS5nZXQoQSl8fDApLTE7UUEuc2V0KEEsZSksZT09PTAmJmtlKEEpfSk7ZnVuY3Rpb24gX3QoQSxlKXtsZXQgdD0oUUEuZ2V0KGUpfHwwKSsxO1FBLnNldChlLHQpLHBBJiZwQS5yZWdpc3RlcihBLGUsQSl9ZnVuY3Rpb24genQoQSl7cEEmJnBBLnVucmVnaXN0ZXIoQSl9ZnVuY3Rpb24gWUEoQSxlPVtdLHQ9ZnVuY3Rpb24oKXt9KXtsZXQgcj0hMSxuPW5ldyBQcm94eSh0LHtnZXQobyxpKXtpZihFQShyKSxpPT09S0EpcmV0dXJuKCk9Pnt6dChuKSxrZShBKSxyPSEwfTtpZihpPT09InRoZW4iKXtpZihlLmxlbmd0aD09PTApcmV0dXJue3RoZW46KCk9Pm59O2xldCBnPV8oQSx7dHlwZToiR0VUIixwYXRoOmUubWFwKEI9PkIudG9TdHJpbmcoKSl9KS50aGVuKFcpO3JldHVybiBnLnRoZW4uYmluZChnKX1yZXR1cm4gWUEoQSxbLi4uZSxpXSl9LHNldChvLGksZyl7RUEocik7bGV0W0IsQ109ZEEoZyk7cmV0dXJuIF8oQSx7dHlwZToiU0VUIixwYXRoOlsuLi5lLGldLm1hcChhPT5hLnRvU3RyaW5nKCkpLHZhbHVlOkJ9LEMpLnRoZW4oVyl9LGFwcGx5KG8saSxnKXtFQShyKTtsZXQgQj1lW2UubGVuZ3RoLTFdO2lmKEI9PT1ZdClyZXR1cm4gXyhBLHt0eXBlOiJFTkRQT0lOVCJ9KS50aGVuKFcpO2lmKEI9PT0iYmluZCIpcmV0dXJuIFlBKEEsZS5zbGljZSgwLC0xKSk7bGV0W0MsYV09eWUoZyk7cmV0dXJuIF8oQSx7dHlwZToiQVBQTFkiLHBhdGg6ZS5tYXAoST0+SS50b1N0cmluZygpKSxhcmd1bWVudExpc3Q6Q30sYSkudGhlbihXKX0sY29uc3RydWN0KG8saSl7RUEocik7bGV0W2csQl09eWUoaSk7cmV0dXJuIF8oQSx7dHlwZToiQ09OU1RSVUNUIixwYXRoOmUubWFwKEM9PkMudG9TdHJpbmcoKSksYXJndW1lbnRMaXN0Omd9LEIpLnRoZW4oVyl9fSk7cmV0dXJuIF90KG4sQSksbn1mdW5jdGlvbiBWdChBKXtyZXR1cm4gQXJyYXkucHJvdG90eXBlLmNvbmNhdC5hcHBseShbXSxBKX1mdW5jdGlvbiB5ZShBKXtsZXQgZT1BLm1hcChkQSk7cmV0dXJuW2UubWFwKHQ9PnRbMF0pLFZ0KGUubWFwKHQ9PnRbMV0pKV19dmFyIEZlPW5ldyBXZWFrTWFwO2Z1bmN0aW9uIHZBKEEsZSl7cmV0dXJuIEZlLnNldChBLGUpLEF9ZnVuY3Rpb24gWnQoQSl7cmV0dXJuIE9iamVjdC5hc3NpZ24oQSx7W3dlXTohMH0pfWZ1bmN0aW9uIGRBKEEpe2ZvcihsZXRbZSx0XW9mIFNlKWlmKHQuY2FuSGFuZGxlKEEpKXtsZXRbcixuXT10LnNlcmlhbGl6ZShBKTtyZXR1cm5be3R5cGU6IkhBTkRMRVIiLG5hbWU6ZSx2YWx1ZTpyfSxuXX1yZXR1cm5be3R5cGU6IlJBVyIsdmFsdWU6QX0sRmUuZ2V0KEEpfHxbXV19ZnVuY3Rpb24gVyhBKXtzd2l0Y2goQS50eXBlKXtjYXNlIkhBTkRMRVIiOnJldHVybiBTZS5nZXQoQS5uYW1lKS5kZXNlcmlhbGl6ZShBLnZhbHVlKTtjYXNlIlJBVyI6cmV0dXJuIEEudmFsdWV9fWZ1bmN0aW9uIF8oQSxlLHQpe3JldHVybiBuZXcgUHJvbWlzZShyPT57bGV0IG49WHQoKTtBLmFkZEV2ZW50TGlzdGVuZXIoIm1lc3NhZ2UiLGZ1bmN0aW9uIG8oaSl7IWkuZGF0YXx8IWkuZGF0YS5pZHx8aS5kYXRhLmlkIT09bnx8KEEucmVtb3ZlRXZlbnRMaXN0ZW5lcigibWVzc2FnZSIsbykscihpLmRhdGEpKX0pLEEuc3RhcnQmJkEuc3RhcnQoKSxBLnBvc3RNZXNzYWdlKE9iamVjdC5hc3NpZ24oe2lkOm59LGUpLHQpfSl9ZnVuY3Rpb24gWHQoKXtyZXR1cm4gbmV3IEFycmF5KDQpLmZpbGwoMCkubWFwKCgpPT5NYXRoLmZsb29yKE1hdGgucmFuZG9tKCkqTnVtYmVyLk1BWF9TQUZFX0lOVEVHRVIpLnRvU3RyaW5nKDE2KSkuam9pbigiLSIpfWZ1bmN0aW9uIHJBKEEsZSl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIEEuYXBwbHkoZSxhcmd1bWVudHMpfX12YXJ7dG9TdHJpbmc6JHR9PU9iamVjdC5wcm90b3R5cGUse2dldFByb3RvdHlwZU9mOnpBfT1PYmplY3QsaEE9KEE9PmU9PntsZXQgdD0kdC5jYWxsKGUpO3JldHVybiBBW3RdfHwoQVt0XT10LnNsaWNlKDgsLTEpLnRvTG93ZXJDYXNlKCkpfSkoT2JqZWN0LmNyZWF0ZShudWxsKSksTj1BPT4oQT1BLnRvTG93ZXJDYXNlKCksZT0+aEEoZSk9PT1BKSx5QT1BPT5lPT50eXBlb2YgZT09PUEse2lzQXJyYXk6en09QXJyYXksbkE9eUEoInVuZGVmaW5lZCIpO2Z1bmN0aW9uIEFyKEEpe3JldHVybiBBIT09bnVsbCYmIW5BKEEpJiZBLmNvbnN0cnVjdG9yIT09bnVsbCYmIW5BKEEuY29uc3RydWN0b3IpJiZrKEEuY29uc3RydWN0b3IuaXNCdWZmZXIpJiZBLmNvbnN0cnVjdG9yLmlzQnVmZmVyKEEpfXZhciBHZT1OKCJBcnJheUJ1ZmZlciIpO2Z1bmN0aW9uIGVyKEEpe2xldCBlO3JldHVybiB0eXBlb2YgQXJyYXlCdWZmZXI8InUiJiZBcnJheUJ1ZmZlci5pc1ZpZXc/ZT1BcnJheUJ1ZmZlci5pc1ZpZXcoQSk6ZT1BJiZBLmJ1ZmZlciYmR2UoQS5idWZmZXIpLGV9dmFyIHRyPXlBKCJzdHJpbmciKSxrPXlBKCJmdW5jdGlvbiIpLFRlPXlBKCJudW1iZXIiKSx3QT1BPT5BIT09bnVsbCYmdHlwZW9mIEE9PSJvYmplY3QiLHJyPUE9PkE9PT0hMHx8QT09PSExLG1BPUE9PntpZihoQShBKSE9PSJvYmplY3QiKXJldHVybiExO2xldCBlPXpBKEEpO3JldHVybihlPT09bnVsbHx8ZT09PU9iamVjdC5wcm90b3R5cGV8fE9iamVjdC5nZXRQcm90b3R5cGVPZihlKT09PW51bGwpJiYhKFN5bWJvbC50b1N0cmluZ1RhZyBpbiBBKSYmIShTeW1ib2wuaXRlcmF0b3IgaW4gQSl9LG5yPU4oIkRhdGUiKSxvcj1OKCJGaWxlIiksaXI9TigiQmxvYiIpLGFyPU4oIkZpbGVMaXN0Iiksc3I9QT0+d0EoQSkmJmsoQS5waXBlKSxJcj1BPT57bGV0IGU7cmV0dXJuIEEmJih0eXBlb2YgRm9ybURhdGE9PSJmdW5jdGlvbiImJkEgaW5zdGFuY2VvZiBGb3JtRGF0YXx8ayhBLmFwcGVuZCkmJigoZT1oQShBKSk9PT0iZm9ybWRhdGEifHxlPT09Im9iamVjdCImJmsoQS50b1N0cmluZykmJkEudG9TdHJpbmcoKT09PSJbb2JqZWN0IEZvcm1EYXRhXSIpKX0sZ3I9TigiVVJMU2VhcmNoUGFyYW1zIiksW2xyLENyLEJyLGNyXT1bIlJlYWRhYmxlU3RyZWFtIiwiUmVxdWVzdCIsIlJlc3BvbnNlIiwiSGVhZGVycyJdLm1hcChOKSx1cj1BPT5BLnRyaW0/QS50cmltKCk6QS5yZXBsYWNlKC9eW1xzXHVGRUZGXHhBMF0rfFtcc1x1RkVGRlx4QTBdKyQvZywiIik7ZnVuY3Rpb24gb0EoQSxlLHthbGxPd25LZXlzOnQ9ITF9PXt9KXtpZihBPT09bnVsbHx8dHlwZW9mIEE+InUiKXJldHVybjtsZXQgcixuO2lmKHR5cGVvZiBBIT0ib2JqZWN0IiYmKEE9W0FdKSx6KEEpKWZvcihyPTAsbj1BLmxlbmd0aDtyPG47cisrKWUuY2FsbChudWxsLEFbcl0scixBKTtlbHNle2xldCBvPXQ/T2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoQSk6T2JqZWN0LmtleXMoQSksaT1vLmxlbmd0aCxnO2ZvcihyPTA7cjxpO3IrKylnPW9bcl0sZS5jYWxsKG51bGwsQVtnXSxnLEEpfX1mdW5jdGlvbiBPZShBLGUpe2U9ZS50b0xvd2VyQ2FzZSgpO2xldCB0PU9iamVjdC5rZXlzKEEpLHI9dC5sZW5ndGgsbjtmb3IoO3ItLSA+MDspaWYobj10W3JdLGU9PT1uLnRvTG93ZXJDYXNlKCkpcmV0dXJuIG47cmV0dXJuIG51bGx9dmFyIHY9dHlwZW9mIGdsb2JhbFRoaXM8InUiP2dsb2JhbFRoaXM6dHlwZW9mIHNlbGY8InUiP3NlbGY6dHlwZW9mIHdpbmRvdzwidSI/d2luZG93Omdsb2JhbCxQZT1BPT4hbkEoQSkmJkEhPT12O2Z1bmN0aW9uIF9BKCl7bGV0e2Nhc2VsZXNzOkF9PVBlKHRoaXMpJiZ0aGlzfHx7fSxlPXt9LHQ9KHIsbik9PntsZXQgbz1BJiZPZShlLG4pfHxuO21BKGVbb10pJiZtQShyKT9lW29dPV9BKGVbb10scik6bUEocik/ZVtvXT1fQSh7fSxyKTp6KHIpP2Vbb109ci5zbGljZSgpOmVbb109cn07Zm9yKGxldCByPTAsbj1hcmd1bWVudHMubGVuZ3RoO3I8bjtyKyspYXJndW1lbnRzW3JdJiZvQShhcmd1bWVudHNbcl0sdCk7cmV0dXJuIGV9dmFyIEVyPShBLGUsdCx7YWxsT3duS2V5czpyfT17fSk9PihvQShlLChuLG8pPT57dCYmayhuKT9BW29dPXJBKG4sdCk6QVtvXT1ufSx7YWxsT3duS2V5czpyfSksQSksZnI9QT0+KEEuY2hhckNvZGVBdCgwKT09PTY1Mjc5JiYoQT1BLnNsaWNlKDEpKSxBKSxRcj0oQSxlLHQscik9PntBLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKGUucHJvdG90eXBlLHIpLEEucHJvdG90eXBlLmNvbnN0cnVjdG9yPUEsT2JqZWN0LmRlZmluZVByb3BlcnR5KEEsInN1cGVyIix7dmFsdWU6ZS5wcm90b3R5cGV9KSx0JiZPYmplY3QuYXNzaWduKEEucHJvdG90eXBlLHQpfSxwcj0oQSxlLHQscik9PntsZXQgbixvLGksZz17fTtpZihlPWV8fHt9LEE9PW51bGwpcmV0dXJuIGU7ZG97Zm9yKG49T2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoQSksbz1uLmxlbmd0aDtvLS0gPjA7KWk9bltvXSwoIXJ8fHIoaSxBLGUpKSYmIWdbaV0mJihlW2ldPUFbaV0sZ1tpXT0hMCk7QT10IT09ITEmJnpBKEEpfXdoaWxlKEEmJighdHx8dChBLGUpKSYmQSE9PU9iamVjdC5wcm90b3R5cGUpO3JldHVybiBlfSxkcj0oQSxlLHQpPT57QT1TdHJpbmcoQSksKHQ9PT12b2lkIDB8fHQ+QS5sZW5ndGgpJiYodD1BLmxlbmd0aCksdC09ZS5sZW5ndGg7bGV0IHI9QS5pbmRleE9mKGUsdCk7cmV0dXJuIHIhPT0tMSYmcj09PXR9LG1yPUE9PntpZighQSlyZXR1cm4gbnVsbDtpZih6KEEpKXJldHVybiBBO2xldCBlPUEubGVuZ3RoO2lmKCFUZShlKSlyZXR1cm4gbnVsbDtsZXQgdD1uZXcgQXJyYXkoZSk7Zm9yKDtlLS0gPjA7KXRbZV09QVtlXTtyZXR1cm4gdH0saHI9KEE9PmU9PkEmJmUgaW5zdGFuY2VvZiBBKSh0eXBlb2YgVWludDhBcnJheTwidSImJnpBKFVpbnQ4QXJyYXkpKSx5cj0oQSxlKT0+e2xldCByPShBJiZBW1N5bWJvbC5pdGVyYXRvcl0pLmNhbGwoQSksbjtmb3IoOyhuPXIubmV4dCgpKSYmIW4uZG9uZTspe2xldCBvPW4udmFsdWU7ZS5jYWxsKEEsb1swXSxvWzFdKX19LHdyPShBLGUpPT57bGV0IHQscj1bXTtmb3IoOyh0PUEuZXhlYyhlKSkhPT1udWxsOylyLnB1c2godCk7cmV0dXJuIHJ9LERyPU4oIkhUTUxGb3JtRWxlbWVudCIpLFNyPUE9PkEudG9Mb3dlckNhc2UoKS5yZXBsYWNlKC9bLV9cc10oW2EtelxkXSkoXHcqKS9nLGZ1bmN0aW9uKHQscixuKXtyZXR1cm4gci50b1VwcGVyQ2FzZSgpK259KSxOZT0oKHtoYXNPd25Qcm9wZXJ0eTpBfSk9PihlLHQpPT5BLmNhbGwoZSx0KSkoT2JqZWN0LnByb3RvdHlwZSksYnI9TigiUmVnRXhwIikseGU9KEEsZSk9PntsZXQgdD1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9ycyhBKSxyPXt9O29BKHQsKG4sbyk9PntsZXQgaTsoaT1lKG4sbyxBKSkhPT0hMSYmKHJbb109aXx8bil9KSxPYmplY3QuZGVmaW5lUHJvcGVydGllcyhBLHIpfSxScj1BPT57eGUoQSwoZSx0KT0+e2lmKGsoQSkmJlsiYXJndW1lbnRzIiwiY2FsbGVyIiwiY2FsbGVlIl0uaW5kZXhPZih0KSE9PS0xKXJldHVybiExO2xldCByPUFbdF07aWYoayhyKSl7aWYoZS5lbnVtZXJhYmxlPSExLCJ3cml0YWJsZSJpbiBlKXtlLndyaXRhYmxlPSExO3JldHVybn1lLnNldHx8KGUuc2V0PSgpPT57dGhyb3cgRXJyb3IoIkNhbiBub3QgcmV3cml0ZSByZWFkLW9ubHkgbWV0aG9kICciK3QrIiciKX0pfX0pfSxrcj0oQSxlKT0+e2xldCB0PXt9LHI9bj0+e24uZm9yRWFjaChvPT57dFtvXT0hMH0pfTtyZXR1cm4geihBKT9yKEEpOnIoU3RyaW5nKEEpLnNwbGl0KGUpKSx0fSxGcj0oKT0+e30sVXI9KEEsZSk9PkEhPW51bGwmJk51bWJlci5pc0Zpbml0ZShBPStBKT9BOmUsakE9ImFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6IixMZT0iMDEyMzQ1Njc4OSIsSmU9e0RJR0lUOkxlLEFMUEhBOmpBLEFMUEhBX0RJR0lUOmpBK2pBLnRvVXBwZXJDYXNlKCkrTGV9LE5yPShBPTE2LGU9SmUuQUxQSEFfRElHSVQpPT57bGV0IHQ9IiIse2xlbmd0aDpyfT1lO2Zvcig7QS0tOyl0Kz1lW01hdGgucmFuZG9tKCkqcnwwXTtyZXR1cm4gdH07ZnVuY3Rpb24gTHIoQSl7cmV0dXJuISEoQSYmayhBLmFwcGVuZCkmJkFbU3ltYm9sLnRvU3RyaW5nVGFnXT09PSJGb3JtRGF0YSImJkFbU3ltYm9sLml0ZXJhdG9yXSl9dmFyIEdyPUE9PntsZXQgZT1uZXcgQXJyYXkoMTApLHQ9KHIsbik9PntpZih3QShyKSl7aWYoZS5pbmRleE9mKHIpPj0wKXJldHVybjtpZighKCJ0b0pTT04iaW4gcikpe2Vbbl09cjtsZXQgbz16KHIpP1tdOnt9O3JldHVybiBvQShyLChpLGcpPT57bGV0IEI9dChpLG4rMSk7IW5BKEIpJiYob1tnXT1CKX0pLGVbbl09dm9pZCAwLG99fXJldHVybiByfTtyZXR1cm4gdChBLDApfSxUcj1OKCJBc3luY0Z1bmN0aW9uIiksT3I9QT0+QSYmKHdBKEEpfHxrKEEpKSYmayhBLnRoZW4pJiZrKEEuY2F0Y2gpLEhlPSgoQSxlKT0+QT9zZXRJbW1lZGlhdGU6ZT8oKHQscik9Pih2LmFkZEV2ZW50TGlzdGVuZXIoIm1lc3NhZ2UiLCh7c291cmNlOm4sZGF0YTpvfSk9PntuPT09diYmbz09PXQmJnIubGVuZ3RoJiZyLnNoaWZ0KCkoKX0sITEpLG49PntyLnB1c2gobiksdi5wb3N0TWVzc2FnZSh0LCIqIil9KSkoYGF4aW9zQCR7TWF0aC5yYW5kb20oKX1gLFtdKTp0PT5zZXRUaW1lb3V0KHQpKSh0eXBlb2Ygc2V0SW1tZWRpYXRlPT0iZnVuY3Rpb24iLGsodi5wb3N0TWVzc2FnZSkpLFByPXR5cGVvZiBxdWV1ZU1pY3JvdGFzazwidSI/cXVldWVNaWNyb3Rhc2suYmluZCh2KTp0eXBlb2YgcHJvY2VzczwidSImJnByb2Nlc3MubmV4dFRpY2t8fEhlLHM9e2lzQXJyYXk6eixpc0FycmF5QnVmZmVyOkdlLGlzQnVmZmVyOkFyLGlzRm9ybURhdGE6SXIsaXNBcnJheUJ1ZmZlclZpZXc6ZXIsaXNTdHJpbmc6dHIsaXNOdW1iZXI6VGUsaXNCb29sZWFuOnJyLGlzT2JqZWN0OndBLGlzUGxhaW5PYmplY3Q6bUEsaXNSZWFkYWJsZVN0cmVhbTpscixpc1JlcXVlc3Q6Q3IsaXNSZXNwb25zZTpCcixpc0hlYWRlcnM6Y3IsaXNVbmRlZmluZWQ6bkEsaXNEYXRlOm5yLGlzRmlsZTpvcixpc0Jsb2I6aXIsaXNSZWdFeHA6YnIsaXNGdW5jdGlvbjprLGlzU3RyZWFtOnNyLGlzVVJMU2VhcmNoUGFyYW1zOmdyLGlzVHlwZWRBcnJheTpocixpc0ZpbGVMaXN0OmFyLGZvckVhY2g6b0EsbWVyZ2U6X0EsZXh0ZW5kOkVyLHRyaW06dXIsc3RyaXBCT006ZnIsaW5oZXJpdHM6UXIsdG9GbGF0T2JqZWN0OnByLGtpbmRPZjpoQSxraW5kT2ZUZXN0Ok4sZW5kc1dpdGg6ZHIsdG9BcnJheTptcixmb3JFYWNoRW50cnk6eXIsbWF0Y2hBbGw6d3IsaXNIVE1MRm9ybTpEcixoYXNPd25Qcm9wZXJ0eTpOZSxoYXNPd25Qcm9wOk5lLHJlZHVjZURlc2NyaXB0b3JzOnhlLGZyZWV6ZU1ldGhvZHM6UnIsdG9PYmplY3RTZXQ6a3IsdG9DYW1lbENhc2U6U3Isbm9vcDpGcix0b0Zpbml0ZU51bWJlcjpVcixmaW5kS2V5Ok9lLGdsb2JhbDp2LGlzQ29udGV4dERlZmluZWQ6UGUsQUxQSEFCRVQ6SmUsZ2VuZXJhdGVTdHJpbmc6TnIsaXNTcGVjQ29tcGxpYW50Rm9ybTpMcix0b0pTT05PYmplY3Q6R3IsaXNBc3luY0ZuOlRyLGlzVGhlbmFibGU6T3Isc2V0SW1tZWRpYXRlOkhlLGFzYXA6UHJ9O2Z1bmN0aW9uIFYoQSxlLHQscixuKXtFcnJvci5jYWxsKHRoaXMpLEVycm9yLmNhcHR1cmVTdGFja1RyYWNlP0Vycm9yLmNhcHR1cmVTdGFja1RyYWNlKHRoaXMsdGhpcy5jb25zdHJ1Y3Rvcik6dGhpcy5zdGFjaz1uZXcgRXJyb3IoKS5zdGFjayx0aGlzLm1lc3NhZ2U9QSx0aGlzLm5hbWU9IkF4aW9zRXJyb3IiLGUmJih0aGlzLmNvZGU9ZSksdCYmKHRoaXMuY29uZmlnPXQpLHImJih0aGlzLnJlcXVlc3Q9ciksbiYmKHRoaXMucmVzcG9uc2U9bil9cy5pbmhlcml0cyhWLEVycm9yLHt0b0pTT046ZnVuY3Rpb24oKXtyZXR1cm57bWVzc2FnZTp0aGlzLm1lc3NhZ2UsbmFtZTp0aGlzLm5hbWUsZGVzY3JpcHRpb246dGhpcy5kZXNjcmlwdGlvbixudW1iZXI6dGhpcy5udW1iZXIsZmlsZU5hbWU6dGhpcy5maWxlTmFtZSxsaW5lTnVtYmVyOnRoaXMubGluZU51bWJlcixjb2x1bW5OdW1iZXI6dGhpcy5jb2x1bW5OdW1iZXIsc3RhY2s6dGhpcy5zdGFjayxjb25maWc6cy50b0pTT05PYmplY3QodGhpcy5jb25maWcpLGNvZGU6dGhpcy5jb2RlLHN0YXR1czp0aGlzLnJlc3BvbnNlJiZ0aGlzLnJlc3BvbnNlLnN0YXR1cz90aGlzLnJlc3BvbnNlLnN0YXR1czpudWxsfX19KTt2YXIgTWU9Vi5wcm90b3R5cGUscWU9e307WyJFUlJfQkFEX09QVElPTl9WQUxVRSIsIkVSUl9CQURfT1BUSU9OIiwiRUNPTk5BQk9SVEVEIiwiRVRJTUVET1VUIiwiRVJSX05FVFdPUksiLCJFUlJfRlJfVE9PX01BTllfUkVESVJFQ1RTIiwiRVJSX0RFUFJFQ0FURUQiLCJFUlJfQkFEX1JFU1BPTlNFIiwiRVJSX0JBRF9SRVFVRVNUIiwiRVJSX0NBTkNFTEVEIiwiRVJSX05PVF9TVVBQT1JUIiwiRVJSX0lOVkFMSURfVVJMIl0uZm9yRWFjaChBPT57cWVbQV09e3ZhbHVlOkF9fSk7T2JqZWN0LmRlZmluZVByb3BlcnRpZXMoVixxZSk7T2JqZWN0LmRlZmluZVByb3BlcnR5KE1lLCJpc0F4aW9zRXJyb3IiLHt2YWx1ZTohMH0pO1YuZnJvbT0oQSxlLHQscixuLG8pPT57bGV0IGk9T2JqZWN0LmNyZWF0ZShNZSk7cmV0dXJuIHMudG9GbGF0T2JqZWN0KEEsaSxmdW5jdGlvbihCKXtyZXR1cm4gQiE9PUVycm9yLnByb3RvdHlwZX0sZz0+ZyE9PSJpc0F4aW9zRXJyb3IiKSxWLmNhbGwoaSxBLm1lc3NhZ2UsZSx0LHIsbiksaS5jYXVzZT1BLGkubmFtZT1BLm5hbWUsbyYmT2JqZWN0LmFzc2lnbihpLG8pLGl9O3ZhciBRPVY7dmFyIERBPW51bGw7ZnVuY3Rpb24gVkEoQSl7cmV0dXJuIHMuaXNQbGFpbk9iamVjdChBKXx8cy5pc0FycmF5KEEpfWZ1bmN0aW9uIEtlKEEpe3JldHVybiBzLmVuZHNXaXRoKEEsIltdIik/QS5zbGljZSgwLC0yKTpBfWZ1bmN0aW9uIFllKEEsZSx0KXtyZXR1cm4gQT9BLmNvbmNhdChlKS5tYXAoZnVuY3Rpb24obixvKXtyZXR1cm4gbj1LZShuKSwhdCYmbz8iWyIrbisiXSI6bn0pLmpvaW4odD8iLiI6IiIpOmV9ZnVuY3Rpb24geHIoQSl7cmV0dXJuIHMuaXNBcnJheShBKSYmIUEuc29tZShWQSl9dmFyIEpyPXMudG9GbGF0T2JqZWN0KHMse30sbnVsbCxmdW5jdGlvbihlKXtyZXR1cm4vXmlzW0EtWl0vLnRlc3QoZSl9KTtmdW5jdGlvbiBIcihBLGUsdCl7aWYoIXMuaXNPYmplY3QoQSkpdGhyb3cgbmV3IFR5cGVFcnJvcigidGFyZ2V0IG11c3QgYmUgYW4gb2JqZWN0Iik7ZT1lfHxuZXcoREF8fEZvcm1EYXRhKSx0PXMudG9GbGF0T2JqZWN0KHQse21ldGFUb2tlbnM6ITAsZG90czohMSxpbmRleGVzOiExfSwhMSxmdW5jdGlvbihmLHUpe3JldHVybiFzLmlzVW5kZWZpbmVkKHVbZl0pfSk7bGV0IHI9dC5tZXRhVG9rZW5zLG49dC52aXNpdG9yfHxhLG89dC5kb3RzLGk9dC5pbmRleGVzLEI9KHQuQmxvYnx8dHlwZW9mIEJsb2I8InUiJiZCbG9iKSYmcy5pc1NwZWNDb21wbGlhbnRGb3JtKGUpO2lmKCFzLmlzRnVuY3Rpb24obikpdGhyb3cgbmV3IFR5cGVFcnJvcigidmlzaXRvciBtdXN0IGJlIGEgZnVuY3Rpb24iKTtmdW5jdGlvbiBDKGMpe2lmKGM9PT1udWxsKXJldHVybiIiO2lmKHMuaXNEYXRlKGMpKXJldHVybiBjLnRvSVNPU3RyaW5nKCk7aWYoIUImJnMuaXNCbG9iKGMpKXRocm93IG5ldyBRKCJCbG9iIGlzIG5vdCBzdXBwb3J0ZWQuIFVzZSBhIEJ1ZmZlciBpbnN0ZWFkLiIpO3JldHVybiBzLmlzQXJyYXlCdWZmZXIoYyl8fHMuaXNUeXBlZEFycmF5KGMpP0ImJnR5cGVvZiBCbG9iPT0iZnVuY3Rpb24iP25ldyBCbG9iKFtjXSk6QnVmZmVyLmZyb20oYyk6Y31mdW5jdGlvbiBhKGMsZix1KXtsZXQgbT1jO2lmKGMmJiF1JiZ0eXBlb2YgYz09Im9iamVjdCIpe2lmKHMuZW5kc1dpdGgoZiwie30iKSlmPXI/ZjpmLnNsaWNlKDAsLTIpLGM9SlNPTi5zdHJpbmdpZnkoYyk7ZWxzZSBpZihzLmlzQXJyYXkoYykmJnhyKGMpfHwocy5pc0ZpbGVMaXN0KGMpfHxzLmVuZHNXaXRoKGYsIltdIikpJiYobT1zLnRvQXJyYXkoYykpKXJldHVybiBmPUtlKGYpLG0uZm9yRWFjaChmdW5jdGlvbihkLFUpeyEocy5pc1VuZGVmaW5lZChkKXx8ZD09PW51bGwpJiZlLmFwcGVuZChpPT09ITA/WWUoW2ZdLFUsbyk6aT09PW51bGw/ZjpmKyJbXSIsQyhkKSl9KSwhMX1yZXR1cm4gVkEoYyk/ITA6KGUuYXBwZW5kKFllKHUsZixvKSxDKGMpKSwhMSl9bGV0IEk9W10sRT1PYmplY3QuYXNzaWduKEpyLHtkZWZhdWx0VmlzaXRvcjphLGNvbnZlcnRWYWx1ZTpDLGlzVmlzaXRhYmxlOlZBfSk7ZnVuY3Rpb24gbChjLGYpe2lmKCFzLmlzVW5kZWZpbmVkKGMpKXtpZihJLmluZGV4T2YoYykhPT0tMSl0aHJvdyBFcnJvcigiQ2lyY3VsYXIgcmVmZXJlbmNlIGRldGVjdGVkIGluICIrZi5qb2luKCIuIikpO0kucHVzaChjKSxzLmZvckVhY2goYyxmdW5jdGlvbihtLFMpeyghKHMuaXNVbmRlZmluZWQobSl8fG09PT1udWxsKSYmbi5jYWxsKGUsbSxzLmlzU3RyaW5nKFMpP1MudHJpbSgpOlMsZixFKSk9PT0hMCYmbChtLGY/Zi5jb25jYXQoUyk6W1NdKX0pLEkucG9wKCl9fWlmKCFzLmlzT2JqZWN0KEEpKXRocm93IG5ldyBUeXBlRXJyb3IoImRhdGEgbXVzdCBiZSBhbiBvYmplY3QiKTtyZXR1cm4gbChBKSxlfXZhciBNPUhyO2Z1bmN0aW9uIFdlKEEpe2xldCBlPXsiISI6IiUyMSIsIiciOiIlMjciLCIoIjoiJTI4IiwiKSI6IiUyOSIsIn4iOiIlN0UiLCIlMjAiOiIrIiwiJTAwIjoiXDAifTtyZXR1cm4gZW5jb2RlVVJJQ29tcG9uZW50KEEpLnJlcGxhY2UoL1shJygpfl18JTIwfCUwMC9nLGZ1bmN0aW9uKHIpe3JldHVybiBlW3JdfSl9ZnVuY3Rpb24gdmUoQSxlKXt0aGlzLl9wYWlycz1bXSxBJiZNKEEsdGhpcyxlKX12YXIgamU9dmUucHJvdG90eXBlO2plLmFwcGVuZD1mdW5jdGlvbihlLHQpe3RoaXMuX3BhaXJzLnB1c2goW2UsdF0pfTtqZS50b1N0cmluZz1mdW5jdGlvbihlKXtsZXQgdD1lP2Z1bmN0aW9uKHIpe3JldHVybiBlLmNhbGwodGhpcyxyLFdlKX06V2U7cmV0dXJuIHRoaXMuX3BhaXJzLm1hcChmdW5jdGlvbihuKXtyZXR1cm4gdChuWzBdKSsiPSIrdChuWzFdKX0sIiIpLmpvaW4oIiYiKX07dmFyIFNBPXZlO2Z1bmN0aW9uIE1yKEEpe3JldHVybiBlbmNvZGVVUklDb21wb25lbnQoQSkucmVwbGFjZSgvJTNBL2dpLCI6IikucmVwbGFjZSgvJTI0L2csIiQiKS5yZXBsYWNlKC8lMkMvZ2ksIiwiKS5yZXBsYWNlKC8lMjAvZywiKyIpLnJlcGxhY2UoLyU1Qi9naSwiWyIpLnJlcGxhY2UoLyU1RC9naSwiXSIpfWZ1bmN0aW9uIGlBKEEsZSx0KXtpZighZSlyZXR1cm4gQTtsZXQgcj10JiZ0LmVuY29kZXx8TXIsbj10JiZ0LnNlcmlhbGl6ZSxvO2lmKG4/bz1uKGUsdCk6bz1zLmlzVVJMU2VhcmNoUGFyYW1zKGUpP2UudG9TdHJpbmcoKTpuZXcgU0EoZSx0KS50b1N0cmluZyhyKSxvKXtsZXQgaT1BLmluZGV4T2YoIiMiKTtpIT09LTEmJihBPUEuc2xpY2UoMCxpKSksQSs9KEEuaW5kZXhPZigiPyIpPT09LTE/Ij8iOiImIikrb31yZXR1cm4gQX12YXIgWkE9Y2xhc3N7Y29uc3RydWN0b3IoKXt0aGlzLmhhbmRsZXJzPVtdfXVzZShlLHQscil7cmV0dXJuIHRoaXMuaGFuZGxlcnMucHVzaCh7ZnVsZmlsbGVkOmUscmVqZWN0ZWQ6dCxzeW5jaHJvbm91czpyP3Iuc3luY2hyb25vdXM6ITEscnVuV2hlbjpyP3IucnVuV2hlbjpudWxsfSksdGhpcy5oYW5kbGVycy5sZW5ndGgtMX1lamVjdChlKXt0aGlzLmhhbmRsZXJzW2VdJiYodGhpcy5oYW5kbGVyc1tlXT1udWxsKX1jbGVhcigpe3RoaXMuaGFuZGxlcnMmJih0aGlzLmhhbmRsZXJzPVtdKX1mb3JFYWNoKGUpe3MuZm9yRWFjaCh0aGlzLmhhbmRsZXJzLGZ1bmN0aW9uKHIpe3IhPT1udWxsJiZlKHIpfSl9fSxYQT1aQTt2YXIgYkE9e3NpbGVudEpTT05QYXJzaW5nOiEwLGZvcmNlZEpTT05QYXJzaW5nOiEwLGNsYXJpZnlUaW1lb3V0RXJyb3I6ITF9O3ZhciBfZT10eXBlb2YgVVJMU2VhcmNoUGFyYW1zPCJ1Ij9VUkxTZWFyY2hQYXJhbXM6U0E7dmFyIHplPXR5cGVvZiBGb3JtRGF0YTwidSI/Rm9ybURhdGE6bnVsbDt2YXIgVmU9dHlwZW9mIEJsb2I8InUiP0Jsb2I6bnVsbDt2YXIgWmU9e2lzQnJvd3NlcjohMCxjbGFzc2VzOntVUkxTZWFyY2hQYXJhbXM6X2UsRm9ybURhdGE6emUsQmxvYjpWZX0scHJvdG9jb2xzOlsiaHR0cCIsImh0dHBzIiwiZmlsZSIsImJsb2IiLCJ1cmwiLCJkYXRhIl19O3ZhciBBZT17fTtQdChBZSx7aGFzQnJvd3NlckVudjooKT0+JEEsaGFzU3RhbmRhcmRCcm93c2VyRW52OigpPT5xcixoYXNTdGFuZGFyZEJyb3dzZXJXZWJXb3JrZXJFbnY6KCk9PllyLG9yaWdpbjooKT0+S3J9KTt2YXIgJEE9dHlwZW9mIHdpbmRvdzwidSImJnR5cGVvZiBkb2N1bWVudDwidSIscXI9KEE9PiRBJiZbIlJlYWN0TmF0aXZlIiwiTmF0aXZlU2NyaXB0IiwiTlMiXS5pbmRleE9mKEEpPDApKHR5cGVvZiBuYXZpZ2F0b3I8InUiJiZuYXZpZ2F0b3IucHJvZHVjdCksWXI9dHlwZW9mIFdvcmtlckdsb2JhbFNjb3BlPCJ1IiYmc2VsZiBpbnN0YW5jZW9mIFdvcmtlckdsb2JhbFNjb3BlJiZ0eXBlb2Ygc2VsZi5pbXBvcnRTY3JpcHRzPT0iZnVuY3Rpb24iLEtyPSRBJiZ3aW5kb3cubG9jYXRpb24uaHJlZnx8Imh0dHA6Ly9sb2NhbGhvc3QiO3ZhciBEPXsuLi5BZSwuLi5aZX07ZnVuY3Rpb24gZWUoQSxlKXtyZXR1cm4gTShBLG5ldyBELmNsYXNzZXMuVVJMU2VhcmNoUGFyYW1zLE9iamVjdC5hc3NpZ24oe3Zpc2l0b3I6ZnVuY3Rpb24odCxyLG4sbyl7cmV0dXJuIEQuaXNOb2RlJiZzLmlzQnVmZmVyKHQpPyh0aGlzLmFwcGVuZChyLHQudG9TdHJpbmcoImJhc2U2NCIpKSwhMSk6by5kZWZhdWx0VmlzaXRvci5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSxlKSl9ZnVuY3Rpb24gV3IoQSl7cmV0dXJuIHMubWF0Y2hBbGwoL1x3K3xcWyhcdyopXS9nLEEpLm1hcChlPT5lWzBdPT09IltdIj8iIjplWzFdfHxlWzBdKX1mdW5jdGlvbiB2cihBKXtsZXQgZT17fSx0PU9iamVjdC5rZXlzKEEpLHIsbj10Lmxlbmd0aCxvO2ZvcihyPTA7cjxuO3IrKylvPXRbcl0sZVtvXT1BW29dO3JldHVybiBlfWZ1bmN0aW9uIGpyKEEpe2Z1bmN0aW9uIGUodCxyLG4sbyl7bGV0IGk9dFtvKytdO2lmKGk9PT0iX19wcm90b19fIilyZXR1cm4hMDtsZXQgZz1OdW1iZXIuaXNGaW5pdGUoK2kpLEI9bz49dC5sZW5ndGg7cmV0dXJuIGk9IWkmJnMuaXNBcnJheShuKT9uLmxlbmd0aDppLEI/KHMuaGFzT3duUHJvcChuLGkpP25baV09W25baV0scl06bltpXT1yLCFnKTooKCFuW2ldfHwhcy5pc09iamVjdChuW2ldKSkmJihuW2ldPVtdKSxlKHQscixuW2ldLG8pJiZzLmlzQXJyYXkobltpXSkmJihuW2ldPXZyKG5baV0pKSwhZyl9aWYocy5pc0Zvcm1EYXRhKEEpJiZzLmlzRnVuY3Rpb24oQS5lbnRyaWVzKSl7bGV0IHQ9e307cmV0dXJuIHMuZm9yRWFjaEVudHJ5KEEsKHIsbik9PntlKFdyKHIpLG4sdCwwKX0pLHR9cmV0dXJuIG51bGx9dmFyIFJBPWpyO2Z1bmN0aW9uIF9yKEEsZSx0KXtpZihzLmlzU3RyaW5nKEEpKXRyeXtyZXR1cm4oZXx8SlNPTi5wYXJzZSkoQSkscy50cmltKEEpfWNhdGNoKHIpe2lmKHIubmFtZSE9PSJTeW50YXhFcnJvciIpdGhyb3cgcn1yZXR1cm4odHx8SlNPTi5zdHJpbmdpZnkpKEEpfXZhciB0ZT17dHJhbnNpdGlvbmFsOmJBLGFkYXB0ZXI6WyJ4aHIiLCJodHRwIiwiZmV0Y2giXSx0cmFuc2Zvcm1SZXF1ZXN0OltmdW5jdGlvbihlLHQpe2xldCByPXQuZ2V0Q29udGVudFR5cGUoKXx8IiIsbj1yLmluZGV4T2YoImFwcGxpY2F0aW9uL2pzb24iKT4tMSxvPXMuaXNPYmplY3QoZSk7aWYobyYmcy5pc0hUTUxGb3JtKGUpJiYoZT1uZXcgRm9ybURhdGEoZSkpLHMuaXNGb3JtRGF0YShlKSlyZXR1cm4gbj9KU09OLnN0cmluZ2lmeShSQShlKSk6ZTtpZihzLmlzQXJyYXlCdWZmZXIoZSl8fHMuaXNCdWZmZXIoZSl8fHMuaXNTdHJlYW0oZSl8fHMuaXNGaWxlKGUpfHxzLmlzQmxvYihlKXx8cy5pc1JlYWRhYmxlU3RyZWFtKGUpKXJldHVybiBlO2lmKHMuaXNBcnJheUJ1ZmZlclZpZXcoZSkpcmV0dXJuIGUuYnVmZmVyO2lmKHMuaXNVUkxTZWFyY2hQYXJhbXMoZSkpcmV0dXJuIHQuc2V0Q29udGVudFR5cGUoImFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZDtjaGFyc2V0PXV0Zi04IiwhMSksZS50b1N0cmluZygpO2xldCBnO2lmKG8pe2lmKHIuaW5kZXhPZigiYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkIik+LTEpcmV0dXJuIGVlKGUsdGhpcy5mb3JtU2VyaWFsaXplcikudG9TdHJpbmcoKTtpZigoZz1zLmlzRmlsZUxpc3QoZSkpfHxyLmluZGV4T2YoIm11bHRpcGFydC9mb3JtLWRhdGEiKT4tMSl7bGV0IEI9dGhpcy5lbnYmJnRoaXMuZW52LkZvcm1EYXRhO3JldHVybiBNKGc/eyJmaWxlc1tdIjplfTplLEImJm5ldyBCLHRoaXMuZm9ybVNlcmlhbGl6ZXIpfX1yZXR1cm4gb3x8bj8odC5zZXRDb250ZW50VHlwZSgiYXBwbGljYXRpb24vanNvbiIsITEpLF9yKGUpKTplfV0sdHJhbnNmb3JtUmVzcG9uc2U6W2Z1bmN0aW9uKGUpe2xldCB0PXRoaXMudHJhbnNpdGlvbmFsfHx0ZS50cmFuc2l0aW9uYWwscj10JiZ0LmZvcmNlZEpTT05QYXJzaW5nLG49dGhpcy5yZXNwb25zZVR5cGU9PT0ianNvbiI7aWYocy5pc1Jlc3BvbnNlKGUpfHxzLmlzUmVhZGFibGVTdHJlYW0oZSkpcmV0dXJuIGU7aWYoZSYmcy5pc1N0cmluZyhlKSYmKHImJiF0aGlzLnJlc3BvbnNlVHlwZXx8bikpe2xldCBpPSEodCYmdC5zaWxlbnRKU09OUGFyc2luZykmJm47dHJ5e3JldHVybiBKU09OLnBhcnNlKGUpfWNhdGNoKGcpe2lmKGkpdGhyb3cgZy5uYW1lPT09IlN5bnRheEVycm9yIj9RLmZyb20oZyxRLkVSUl9CQURfUkVTUE9OU0UsdGhpcyxudWxsLHRoaXMucmVzcG9uc2UpOmd9fXJldHVybiBlfV0sdGltZW91dDowLHhzcmZDb29raWVOYW1lOiJYU1JGLVRPS0VOIix4c3JmSGVhZGVyTmFtZToiWC1YU1JGLVRPS0VOIixtYXhDb250ZW50TGVuZ3RoOi0xLG1heEJvZHlMZW5ndGg6LTEsZW52OntGb3JtRGF0YTpELmNsYXNzZXMuRm9ybURhdGEsQmxvYjpELmNsYXNzZXMuQmxvYn0sdmFsaWRhdGVTdGF0dXM6ZnVuY3Rpb24oZSl7cmV0dXJuIGU+PTIwMCYmZTwzMDB9LGhlYWRlcnM6e2NvbW1vbjp7QWNjZXB0OiJhcHBsaWNhdGlvbi9qc29uLCB0ZXh0L3BsYWluLCAqLyoiLCJDb250ZW50LVR5cGUiOnZvaWQgMH19fTtzLmZvckVhY2goWyJkZWxldGUiLCJnZXQiLCJoZWFkIiwicG9zdCIsInB1dCIsInBhdGNoIl0sQT0+e3RlLmhlYWRlcnNbQV09e319KTt2YXIgWj10ZTt2YXIgenI9cy50b09iamVjdFNldChbImFnZSIsImF1dGhvcml6YXRpb24iLCJjb250ZW50LWxlbmd0aCIsImNvbnRlbnQtdHlwZSIsImV0YWciLCJleHBpcmVzIiwiZnJvbSIsImhvc3QiLCJpZi1tb2RpZmllZC1zaW5jZSIsImlmLXVubW9kaWZpZWQtc2luY2UiLCJsYXN0LW1vZGlmaWVkIiwibG9jYXRpb24iLCJtYXgtZm9yd2FyZHMiLCJwcm94eS1hdXRob3JpemF0aW9uIiwicmVmZXJlciIsInJldHJ5LWFmdGVyIiwidXNlci1hZ2VudCJdKSxYZT1BPT57bGV0IGU9e30sdCxyLG47cmV0dXJuIEEmJkEuc3BsaXQoYApgKS5mb3JFYWNoKGZ1bmN0aW9uKGkpe249aS5pbmRleE9mKCI6IiksdD1pLnN1YnN0cmluZygwLG4pLnRyaW0oKS50b0xvd2VyQ2FzZSgpLHI9aS5zdWJzdHJpbmcobisxKS50cmltKCksISghdHx8ZVt0XSYmenJbdF0pJiYodD09PSJzZXQtY29va2llIj9lW3RdP2VbdF0ucHVzaChyKTplW3RdPVtyXTplW3RdPWVbdF0/ZVt0XSsiLCAiK3I6cil9KSxlfTt2YXIgJGU9U3ltYm9sKCJpbnRlcm5hbHMiKTtmdW5jdGlvbiBhQShBKXtyZXR1cm4gQSYmU3RyaW5nKEEpLnRyaW0oKS50b0xvd2VyQ2FzZSgpfWZ1bmN0aW9uIGtBKEEpe3JldHVybiBBPT09ITF8fEE9PW51bGw/QTpzLmlzQXJyYXkoQSk/QS5tYXAoa0EpOlN0cmluZyhBKX1mdW5jdGlvbiBWcihBKXtsZXQgZT1PYmplY3QuY3JlYXRlKG51bGwpLHQ9LyhbXlxzLDs9XSspXHMqKD86PVxzKihbXiw7XSspKT8vZyxyO2Zvcig7cj10LmV4ZWMoQSk7KWVbclsxXV09clsyXTtyZXR1cm4gZX12YXIgWnI9QT0+L15bLV9hLXpBLVowLTleYHx+LCEjJCUmJyorLl0rJC8udGVzdChBLnRyaW0oKSk7ZnVuY3Rpb24gcmUoQSxlLHQscixuKXtpZihzLmlzRnVuY3Rpb24ocikpcmV0dXJuIHIuY2FsbCh0aGlzLGUsdCk7aWYobiYmKGU9dCksISFzLmlzU3RyaW5nKGUpKXtpZihzLmlzU3RyaW5nKHIpKXJldHVybiBlLmluZGV4T2YocikhPT0tMTtpZihzLmlzUmVnRXhwKHIpKXJldHVybiByLnRlc3QoZSl9fWZ1bmN0aW9uIFhyKEEpe3JldHVybiBBLnRyaW0oKS50b0xvd2VyQ2FzZSgpLnJlcGxhY2UoLyhbYS16XGRdKShcdyopL2csKGUsdCxyKT0+dC50b1VwcGVyQ2FzZSgpK3IpfWZ1bmN0aW9uICRyKEEsZSl7bGV0IHQ9cy50b0NhbWVsQ2FzZSgiICIrZSk7WyJnZXQiLCJzZXQiLCJoYXMiXS5mb3JFYWNoKHI9PntPYmplY3QuZGVmaW5lUHJvcGVydHkoQSxyK3Qse3ZhbHVlOmZ1bmN0aW9uKG4sbyxpKXtyZXR1cm4gdGhpc1tyXS5jYWxsKHRoaXMsZSxuLG8saSl9LGNvbmZpZ3VyYWJsZTohMH0pfSl9dmFyIFg9Y2xhc3N7Y29uc3RydWN0b3IoZSl7ZSYmdGhpcy5zZXQoZSl9c2V0KGUsdCxyKXtsZXQgbj10aGlzO2Z1bmN0aW9uIG8oZyxCLEMpe2xldCBhPWFBKEIpO2lmKCFhKXRocm93IG5ldyBFcnJvcigiaGVhZGVyIG5hbWUgbXVzdCBiZSBhIG5vbi1lbXB0eSBzdHJpbmciKTtsZXQgST1zLmZpbmRLZXkobixhKTsoIUl8fG5bSV09PT12b2lkIDB8fEM9PT0hMHx8Qz09PXZvaWQgMCYmbltJXSE9PSExKSYmKG5bSXx8Ql09a0EoZykpfWxldCBpPShnLEIpPT5zLmZvckVhY2goZywoQyxhKT0+byhDLGEsQikpO2lmKHMuaXNQbGFpbk9iamVjdChlKXx8ZSBpbnN0YW5jZW9mIHRoaXMuY29uc3RydWN0b3IpaShlLHQpO2Vsc2UgaWYocy5pc1N0cmluZyhlKSYmKGU9ZS50cmltKCkpJiYhWnIoZSkpaShYZShlKSx0KTtlbHNlIGlmKHMuaXNIZWFkZXJzKGUpKWZvcihsZXRbZyxCXW9mIGUuZW50cmllcygpKW8oQixnLHIpO2Vsc2UgZSE9bnVsbCYmbyh0LGUscik7cmV0dXJuIHRoaXN9Z2V0KGUsdCl7aWYoZT1hQShlKSxlKXtsZXQgcj1zLmZpbmRLZXkodGhpcyxlKTtpZihyKXtsZXQgbj10aGlzW3JdO2lmKCF0KXJldHVybiBuO2lmKHQ9PT0hMClyZXR1cm4gVnIobik7aWYocy5pc0Z1bmN0aW9uKHQpKXJldHVybiB0LmNhbGwodGhpcyxuLHIpO2lmKHMuaXNSZWdFeHAodCkpcmV0dXJuIHQuZXhlYyhuKTt0aHJvdyBuZXcgVHlwZUVycm9yKCJwYXJzZXIgbXVzdCBiZSBib29sZWFufHJlZ2V4cHxmdW5jdGlvbiIpfX19aGFzKGUsdCl7aWYoZT1hQShlKSxlKXtsZXQgcj1zLmZpbmRLZXkodGhpcyxlKTtyZXR1cm4hIShyJiZ0aGlzW3JdIT09dm9pZCAwJiYoIXR8fHJlKHRoaXMsdGhpc1tyXSxyLHQpKSl9cmV0dXJuITF9ZGVsZXRlKGUsdCl7bGV0IHI9dGhpcyxuPSExO2Z1bmN0aW9uIG8oaSl7aWYoaT1hQShpKSxpKXtsZXQgZz1zLmZpbmRLZXkocixpKTtnJiYoIXR8fHJlKHIscltnXSxnLHQpKSYmKGRlbGV0ZSByW2ddLG49ITApfX1yZXR1cm4gcy5pc0FycmF5KGUpP2UuZm9yRWFjaChvKTpvKGUpLG59Y2xlYXIoZSl7bGV0IHQ9T2JqZWN0LmtleXModGhpcykscj10Lmxlbmd0aCxuPSExO2Zvcig7ci0tOyl7bGV0IG89dFtyXTsoIWV8fHJlKHRoaXMsdGhpc1tvXSxvLGUsITApKSYmKGRlbGV0ZSB0aGlzW29dLG49ITApfXJldHVybiBufW5vcm1hbGl6ZShlKXtsZXQgdD10aGlzLHI9e307cmV0dXJuIHMuZm9yRWFjaCh0aGlzLChuLG8pPT57bGV0IGk9cy5maW5kS2V5KHIsbyk7aWYoaSl7dFtpXT1rQShuKSxkZWxldGUgdFtvXTtyZXR1cm59bGV0IGc9ZT9YcihvKTpTdHJpbmcobykudHJpbSgpO2chPT1vJiZkZWxldGUgdFtvXSx0W2ddPWtBKG4pLHJbZ109ITB9KSx0aGlzfWNvbmNhdCguLi5lKXtyZXR1cm4gdGhpcy5jb25zdHJ1Y3Rvci5jb25jYXQodGhpcywuLi5lKX10b0pTT04oZSl7bGV0IHQ9T2JqZWN0LmNyZWF0ZShudWxsKTtyZXR1cm4gcy5mb3JFYWNoKHRoaXMsKHIsbik9PntyIT1udWxsJiZyIT09ITEmJih0W25dPWUmJnMuaXNBcnJheShyKT9yLmpvaW4oIiwgIik6cil9KSx0fVtTeW1ib2wuaXRlcmF0b3JdKCl7cmV0dXJuIE9iamVjdC5lbnRyaWVzKHRoaXMudG9KU09OKCkpW1N5bWJvbC5pdGVyYXRvcl0oKX10b1N0cmluZygpe3JldHVybiBPYmplY3QuZW50cmllcyh0aGlzLnRvSlNPTigpKS5tYXAoKFtlLHRdKT0+ZSsiOiAiK3QpLmpvaW4oYApgKX1nZXRbU3ltYm9sLnRvU3RyaW5nVGFnXSgpe3JldHVybiJBeGlvc0hlYWRlcnMifXN0YXRpYyBmcm9tKGUpe3JldHVybiBlIGluc3RhbmNlb2YgdGhpcz9lOm5ldyB0aGlzKGUpfXN0YXRpYyBjb25jYXQoZSwuLi50KXtsZXQgcj1uZXcgdGhpcyhlKTtyZXR1cm4gdC5mb3JFYWNoKG49PnIuc2V0KG4pKSxyfXN0YXRpYyBhY2Nlc3NvcihlKXtsZXQgcj0odGhpc1skZV09dGhpc1skZV09e2FjY2Vzc29yczp7fX0pLmFjY2Vzc29ycyxuPXRoaXMucHJvdG90eXBlO2Z1bmN0aW9uIG8oaSl7bGV0IGc9YUEoaSk7cltnXXx8KCRyKG4saSkscltnXT0hMCl9cmV0dXJuIHMuaXNBcnJheShlKT9lLmZvckVhY2gobyk6byhlKSx0aGlzfX07WC5hY2Nlc3NvcihbIkNvbnRlbnQtVHlwZSIsIkNvbnRlbnQtTGVuZ3RoIiwiQWNjZXB0IiwiQWNjZXB0LUVuY29kaW5nIiwiVXNlci1BZ2VudCIsIkF1dGhvcml6YXRpb24iXSk7cy5yZWR1Y2VEZXNjcmlwdG9ycyhYLnByb3RvdHlwZSwoe3ZhbHVlOkF9LGUpPT57bGV0IHQ9ZVswXS50b1VwcGVyQ2FzZSgpK2Uuc2xpY2UoMSk7cmV0dXJue2dldDooKT0+QSxzZXQocil7dGhpc1t0XT1yfX19KTtzLmZyZWV6ZU1ldGhvZHMoWCk7dmFyIHc9WDtmdW5jdGlvbiBzQShBLGUpe2xldCB0PXRoaXN8fFoscj1lfHx0LG49dy5mcm9tKHIuaGVhZGVycyksbz1yLmRhdGE7cmV0dXJuIHMuZm9yRWFjaChBLGZ1bmN0aW9uKGcpe289Zy5jYWxsKHQsbyxuLm5vcm1hbGl6ZSgpLGU/ZS5zdGF0dXM6dm9pZCAwKX0pLG4ubm9ybWFsaXplKCksb31mdW5jdGlvbiBJQShBKXtyZXR1cm4hIShBJiZBLl9fQ0FOQ0VMX18pfWZ1bmN0aW9uIEF0KEEsZSx0KXtRLmNhbGwodGhpcyxBPz8iY2FuY2VsZWQiLFEuRVJSX0NBTkNFTEVELGUsdCksdGhpcy5uYW1lPSJDYW5jZWxlZEVycm9yIn1zLmluaGVyaXRzKEF0LFEse19fQ0FOQ0VMX186ITB9KTt2YXIgeD1BdDtmdW5jdGlvbiBnQShBLGUsdCl7bGV0IHI9dC5jb25maWcudmFsaWRhdGVTdGF0dXM7IXQuc3RhdHVzfHwhcnx8cih0LnN0YXR1cyk/QSh0KTplKG5ldyBRKCJSZXF1ZXN0IGZhaWxlZCB3aXRoIHN0YXR1cyBjb2RlICIrdC5zdGF0dXMsW1EuRVJSX0JBRF9SRVFVRVNULFEuRVJSX0JBRF9SRVNQT05TRV1bTWF0aC5mbG9vcih0LnN0YXR1cy8xMDApLTRdLHQuY29uZmlnLHQucmVxdWVzdCx0KSl9ZnVuY3Rpb24gbmUoQSl7bGV0IGU9L14oWy0rXHddezEsMjV9KSg6P1wvXC98OikvLmV4ZWMoQSk7cmV0dXJuIGUmJmVbMV18fCIifWZ1bmN0aW9uIEFuKEEsZSl7QT1BfHwxMDtsZXQgdD1uZXcgQXJyYXkoQSkscj1uZXcgQXJyYXkoQSksbj0wLG89MCxpO3JldHVybiBlPWUhPT12b2lkIDA/ZToxZTMsZnVuY3Rpb24oQil7bGV0IEM9RGF0ZS5ub3coKSxhPXJbb107aXx8KGk9QyksdFtuXT1CLHJbbl09QztsZXQgST1vLEU9MDtmb3IoO0khPT1uOylFKz10W0krK10sST1JJUE7aWYobj0obisxKSVBLG49PT1vJiYobz0obysxKSVBKSxDLWk8ZSlyZXR1cm47bGV0IGw9YSYmQy1hO3JldHVybiBsP01hdGgucm91bmQoRSoxZTMvbCk6dm9pZCAwfX12YXIgZXQ9QW47ZnVuY3Rpb24gZW4oQSxlKXtsZXQgdD0wLHI9MWUzL2UsbixvLGk9KEMsYT1EYXRlLm5vdygpKT0+e3Q9YSxuPW51bGwsbyYmKGNsZWFyVGltZW91dChvKSxvPW51bGwpLEEuYXBwbHkobnVsbCxDKX07cmV0dXJuWyguLi5DKT0+e2xldCBhPURhdGUubm93KCksST1hLXQ7ST49cj9pKEMsYSk6KG49QyxvfHwobz1zZXRUaW1lb3V0KCgpPT57bz1udWxsLGkobil9LHItSSkpKX0sKCk9Pm4mJmkobildfXZhciB0dD1lbjt2YXIgJD0oQSxlLHQ9Myk9PntsZXQgcj0wLG49ZXQoNTAsMjUwKTtyZXR1cm4gdHQobz0+e2xldCBpPW8ubG9hZGVkLGc9by5sZW5ndGhDb21wdXRhYmxlP28udG90YWw6dm9pZCAwLEI9aS1yLEM9bihCKSxhPWk8PWc7cj1pO2xldCBJPXtsb2FkZWQ6aSx0b3RhbDpnLHByb2dyZXNzOmc/aS9nOnZvaWQgMCxieXRlczpCLHJhdGU6Q3x8dm9pZCAwLGVzdGltYXRlZDpDJiZnJiZhPyhnLWkpL0M6dm9pZCAwLGV2ZW50Om8sbGVuZ3RoQ29tcHV0YWJsZTpnIT1udWxsLFtlPyJkb3dubG9hZCI6InVwbG9hZCJdOiEwfTtBKEkpfSx0KX0sb2U9KEEsZSk9PntsZXQgdD1BIT1udWxsO3JldHVybltyPT5lWzBdKHtsZW5ndGhDb21wdXRhYmxlOnQsdG90YWw6QSxsb2FkZWQ6cn0pLGVbMV1dfSxpZT1BPT4oLi4uZSk9PnMuYXNhcCgoKT0+QSguLi5lKSk7dmFyIHJ0PUQuaGFzU3RhbmRhcmRCcm93c2VyRW52P2Z1bmN0aW9uKCl7bGV0IGU9Lyhtc2llfHRyaWRlbnQpL2kudGVzdChuYXZpZ2F0b3IudXNlckFnZW50KSx0PWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImEiKSxyO2Z1bmN0aW9uIG4obyl7bGV0IGk9bztyZXR1cm4gZSYmKHQuc2V0QXR0cmlidXRlKCJocmVmIixpKSxpPXQuaHJlZiksdC5zZXRBdHRyaWJ1dGUoImhyZWYiLGkpLHtocmVmOnQuaHJlZixwcm90b2NvbDp0LnByb3RvY29sP3QucHJvdG9jb2wucmVwbGFjZSgvOiQvLCIiKToiIixob3N0OnQuaG9zdCxzZWFyY2g6dC5zZWFyY2g/dC5zZWFyY2gucmVwbGFjZSgvXlw/LywiIik6IiIsaGFzaDp0Lmhhc2g/dC5oYXNoLnJlcGxhY2UoL14jLywiIik6IiIsaG9zdG5hbWU6dC5ob3N0bmFtZSxwb3J0OnQucG9ydCxwYXRobmFtZTp0LnBhdGhuYW1lLmNoYXJBdCgwKT09PSIvIj90LnBhdGhuYW1lOiIvIit0LnBhdGhuYW1lfX1yZXR1cm4gcj1uKHdpbmRvdy5sb2NhdGlvbi5ocmVmKSxmdW5jdGlvbihpKXtsZXQgZz1zLmlzU3RyaW5nKGkpP24oaSk6aTtyZXR1cm4gZy5wcm90b2NvbD09PXIucHJvdG9jb2wmJmcuaG9zdD09PXIuaG9zdH19KCk6ZnVuY3Rpb24oKXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4hMH19KCk7dmFyIG50PUQuaGFzU3RhbmRhcmRCcm93c2VyRW52P3t3cml0ZShBLGUsdCxyLG4sbyl7bGV0IGk9W0ErIj0iK2VuY29kZVVSSUNvbXBvbmVudChlKV07cy5pc051bWJlcih0KSYmaS5wdXNoKCJleHBpcmVzPSIrbmV3IERhdGUodCkudG9HTVRTdHJpbmcoKSkscy5pc1N0cmluZyhyKSYmaS5wdXNoKCJwYXRoPSIrcikscy5pc1N0cmluZyhuKSYmaS5wdXNoKCJkb21haW49IituKSxvPT09ITAmJmkucHVzaCgic2VjdXJlIiksZG9jdW1lbnQuY29va2llPWkuam9pbigiOyAiKX0scmVhZChBKXtsZXQgZT1kb2N1bWVudC5jb29raWUubWF0Y2gobmV3IFJlZ0V4cCgiKF58O1xccyopKCIrQSsiKT0oW147XSopIikpO3JldHVybiBlP2RlY29kZVVSSUNvbXBvbmVudChlWzNdKTpudWxsfSxyZW1vdmUoQSl7dGhpcy53cml0ZShBLCIiLERhdGUubm93KCktODY0ZTUpfX06e3dyaXRlKCl7fSxyZWFkKCl7cmV0dXJuIG51bGx9LHJlbW92ZSgpe319O2Z1bmN0aW9uIGFlKEEpe3JldHVybi9eKFthLXpdW2EtelxkK1wtLl0qOik/XC9cLy9pLnRlc3QoQSl9ZnVuY3Rpb24gc2UoQSxlKXtyZXR1cm4gZT9BLnJlcGxhY2UoL1wvP1wvJC8sIiIpKyIvIitlLnJlcGxhY2UoL15cLysvLCIiKTpBfWZ1bmN0aW9uIGxBKEEsZSl7cmV0dXJuIEEmJiFhZShlKT9zZShBLGUpOmV9dmFyIG90PUE9PkEgaW5zdGFuY2VvZiB3P3suLi5BfTpBO2Z1bmN0aW9uIEwoQSxlKXtlPWV8fHt9O2xldCB0PXt9O2Z1bmN0aW9uIHIoQyxhLEkpe3JldHVybiBzLmlzUGxhaW5PYmplY3QoQykmJnMuaXNQbGFpbk9iamVjdChhKT9zLm1lcmdlLmNhbGwoe2Nhc2VsZXNzOkl9LEMsYSk6cy5pc1BsYWluT2JqZWN0KGEpP3MubWVyZ2Uoe30sYSk6cy5pc0FycmF5KGEpP2Euc2xpY2UoKTphfWZ1bmN0aW9uIG4oQyxhLEkpe2lmKHMuaXNVbmRlZmluZWQoYSkpe2lmKCFzLmlzVW5kZWZpbmVkKEMpKXJldHVybiByKHZvaWQgMCxDLEkpfWVsc2UgcmV0dXJuIHIoQyxhLEkpfWZ1bmN0aW9uIG8oQyxhKXtpZighcy5pc1VuZGVmaW5lZChhKSlyZXR1cm4gcih2b2lkIDAsYSl9ZnVuY3Rpb24gaShDLGEpe2lmKHMuaXNVbmRlZmluZWQoYSkpe2lmKCFzLmlzVW5kZWZpbmVkKEMpKXJldHVybiByKHZvaWQgMCxDKX1lbHNlIHJldHVybiByKHZvaWQgMCxhKX1mdW5jdGlvbiBnKEMsYSxJKXtpZihJIGluIGUpcmV0dXJuIHIoQyxhKTtpZihJIGluIEEpcmV0dXJuIHIodm9pZCAwLEMpfWxldCBCPXt1cmw6byxtZXRob2Q6byxkYXRhOm8sYmFzZVVSTDppLHRyYW5zZm9ybVJlcXVlc3Q6aSx0cmFuc2Zvcm1SZXNwb25zZTppLHBhcmFtc1NlcmlhbGl6ZXI6aSx0aW1lb3V0OmksdGltZW91dE1lc3NhZ2U6aSx3aXRoQ3JlZGVudGlhbHM6aSx3aXRoWFNSRlRva2VuOmksYWRhcHRlcjppLHJlc3BvbnNlVHlwZTppLHhzcmZDb29raWVOYW1lOmkseHNyZkhlYWRlck5hbWU6aSxvblVwbG9hZFByb2dyZXNzOmksb25Eb3dubG9hZFByb2dyZXNzOmksZGVjb21wcmVzczppLG1heENvbnRlbnRMZW5ndGg6aSxtYXhCb2R5TGVuZ3RoOmksYmVmb3JlUmVkaXJlY3Q6aSx0cmFuc3BvcnQ6aSxodHRwQWdlbnQ6aSxodHRwc0FnZW50OmksY2FuY2VsVG9rZW46aSxzb2NrZXRQYXRoOmkscmVzcG9uc2VFbmNvZGluZzppLHZhbGlkYXRlU3RhdHVzOmcsaGVhZGVyczooQyxhKT0+bihvdChDKSxvdChhKSwhMCl9O3JldHVybiBzLmZvckVhY2goT2JqZWN0LmtleXMoT2JqZWN0LmFzc2lnbih7fSxBLGUpKSxmdW5jdGlvbihhKXtsZXQgST1CW2FdfHxuLEU9SShBW2FdLGVbYV0sYSk7cy5pc1VuZGVmaW5lZChFKSYmSSE9PWd8fCh0W2FdPUUpfSksdH12YXIgRkE9QT0+e2xldCBlPUwoe30sQSkse2RhdGE6dCx3aXRoWFNSRlRva2VuOnIseHNyZkhlYWRlck5hbWU6bix4c3JmQ29va2llTmFtZTpvLGhlYWRlcnM6aSxhdXRoOmd9PWU7ZS5oZWFkZXJzPWk9dy5mcm9tKGkpLGUudXJsPWlBKGxBKGUuYmFzZVVSTCxlLnVybCksQS5wYXJhbXMsQS5wYXJhbXNTZXJpYWxpemVyKSxnJiZpLnNldCgiQXV0aG9yaXphdGlvbiIsIkJhc2ljICIrYnRvYSgoZy51c2VybmFtZXx8IiIpKyI6IisoZy5wYXNzd29yZD91bmVzY2FwZShlbmNvZGVVUklDb21wb25lbnQoZy5wYXNzd29yZCkpOiIiKSkpO2xldCBCO2lmKHMuaXNGb3JtRGF0YSh0KSl7aWYoRC5oYXNTdGFuZGFyZEJyb3dzZXJFbnZ8fEQuaGFzU3RhbmRhcmRCcm93c2VyV2ViV29ya2VyRW52KWkuc2V0Q29udGVudFR5cGUodm9pZCAwKTtlbHNlIGlmKChCPWkuZ2V0Q29udGVudFR5cGUoKSkhPT0hMSl7bGV0W0MsLi4uYV09Qj9CLnNwbGl0KCI7IikubWFwKEk9PkkudHJpbSgpKS5maWx0ZXIoQm9vbGVhbik6W107aS5zZXRDb250ZW50VHlwZShbQ3x8Im11bHRpcGFydC9mb3JtLWRhdGEiLC4uLmFdLmpvaW4oIjsgIikpfX1pZihELmhhc1N0YW5kYXJkQnJvd3NlckVudiYmKHImJnMuaXNGdW5jdGlvbihyKSYmKHI9cihlKSkscnx8ciE9PSExJiZydChlLnVybCkpKXtsZXQgQz1uJiZvJiZudC5yZWFkKG8pO0MmJmkuc2V0KG4sQyl9cmV0dXJuIGV9O3ZhciB0bj10eXBlb2YgWE1MSHR0cFJlcXVlc3Q8InUiLGl0PXRuJiZmdW5jdGlvbihBKXtyZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24odCxyKXtsZXQgbj1GQShBKSxvPW4uZGF0YSxpPXcuZnJvbShuLmhlYWRlcnMpLm5vcm1hbGl6ZSgpLHtyZXNwb25zZVR5cGU6ZyxvblVwbG9hZFByb2dyZXNzOkIsb25Eb3dubG9hZFByb2dyZXNzOkN9PW4sYSxJLEUsbCxjO2Z1bmN0aW9uIGYoKXtsJiZsKCksYyYmYygpLG4uY2FuY2VsVG9rZW4mJm4uY2FuY2VsVG9rZW4udW5zdWJzY3JpYmUoYSksbi5zaWduYWwmJm4uc2lnbmFsLnJlbW92ZUV2ZW50TGlzdGVuZXIoImFib3J0IixhKX1sZXQgdT1uZXcgWE1MSHR0cFJlcXVlc3Q7dS5vcGVuKG4ubWV0aG9kLnRvVXBwZXJDYXNlKCksbi51cmwsITApLHUudGltZW91dD1uLnRpbWVvdXQ7ZnVuY3Rpb24gbSgpe2lmKCF1KXJldHVybjtsZXQgZD13LmZyb20oImdldEFsbFJlc3BvbnNlSGVhZGVycyJpbiB1JiZ1LmdldEFsbFJlc3BvbnNlSGVhZGVycygpKSxLPXtkYXRhOiFnfHxnPT09InRleHQifHxnPT09Impzb24iP3UucmVzcG9uc2VUZXh0OnUucmVzcG9uc2Usc3RhdHVzOnUuc3RhdHVzLHN0YXR1c1RleHQ6dS5zdGF0dXNUZXh0LGhlYWRlcnM6ZCxjb25maWc6QSxyZXF1ZXN0OnV9O2dBKGZ1bmN0aW9uKE8pe3QoTyksZigpfSxmdW5jdGlvbihPKXtyKE8pLGYoKX0sSyksdT1udWxsfSJvbmxvYWRlbmQiaW4gdT91Lm9ubG9hZGVuZD1tOnUub25yZWFkeXN0YXRlY2hhbmdlPWZ1bmN0aW9uKCl7IXV8fHUucmVhZHlTdGF0ZSE9PTR8fHUuc3RhdHVzPT09MCYmISh1LnJlc3BvbnNlVVJMJiZ1LnJlc3BvbnNlVVJMLmluZGV4T2YoImZpbGU6Iik9PT0wKXx8c2V0VGltZW91dChtKX0sdS5vbmFib3J0PWZ1bmN0aW9uKCl7dSYmKHIobmV3IFEoIlJlcXVlc3QgYWJvcnRlZCIsUS5FQ09OTkFCT1JURUQsQSx1KSksdT1udWxsKX0sdS5vbmVycm9yPWZ1bmN0aW9uKCl7cihuZXcgUSgiTmV0d29yayBFcnJvciIsUS5FUlJfTkVUV09SSyxBLHUpKSx1PW51bGx9LHUub250aW1lb3V0PWZ1bmN0aW9uKCl7bGV0IFU9bi50aW1lb3V0PyJ0aW1lb3V0IG9mICIrbi50aW1lb3V0KyJtcyBleGNlZWRlZCI6InRpbWVvdXQgZXhjZWVkZWQiLEs9bi50cmFuc2l0aW9uYWx8fGJBO24udGltZW91dEVycm9yTWVzc2FnZSYmKFU9bi50aW1lb3V0RXJyb3JNZXNzYWdlKSxyKG5ldyBRKFUsSy5jbGFyaWZ5VGltZW91dEVycm9yP1EuRVRJTUVET1VUOlEuRUNPTk5BQk9SVEVELEEsdSkpLHU9bnVsbH0sbz09PXZvaWQgMCYmaS5zZXRDb250ZW50VHlwZShudWxsKSwic2V0UmVxdWVzdEhlYWRlciJpbiB1JiZzLmZvckVhY2goaS50b0pTT04oKSxmdW5jdGlvbihVLEspe3Uuc2V0UmVxdWVzdEhlYWRlcihLLFUpfSkscy5pc1VuZGVmaW5lZChuLndpdGhDcmVkZW50aWFscyl8fCh1LndpdGhDcmVkZW50aWFscz0hIW4ud2l0aENyZWRlbnRpYWxzKSxnJiZnIT09Impzb24iJiYodS5yZXNwb25zZVR5cGU9bi5yZXNwb25zZVR5cGUpLEMmJihbRSxjXT0kKEMsITApLHUuYWRkRXZlbnRMaXN0ZW5lcigicHJvZ3Jlc3MiLEUpKSxCJiZ1LnVwbG9hZCYmKFtJLGxdPSQoQiksdS51cGxvYWQuYWRkRXZlbnRMaXN0ZW5lcigicHJvZ3Jlc3MiLEkpLHUudXBsb2FkLmFkZEV2ZW50TGlzdGVuZXIoImxvYWRlbmQiLGwpKSwobi5jYW5jZWxUb2tlbnx8bi5zaWduYWwpJiYoYT1kPT57dSYmKHIoIWR8fGQudHlwZT9uZXcgeChudWxsLEEsdSk6ZCksdS5hYm9ydCgpLHU9bnVsbCl9LG4uY2FuY2VsVG9rZW4mJm4uY2FuY2VsVG9rZW4uc3Vic2NyaWJlKGEpLG4uc2lnbmFsJiYobi5zaWduYWwuYWJvcnRlZD9hKCk6bi5zaWduYWwuYWRkRXZlbnRMaXN0ZW5lcigiYWJvcnQiLGEpKSk7bGV0IFM9bmUobi51cmwpO2lmKFMmJkQucHJvdG9jb2xzLmluZGV4T2YoUyk9PT0tMSl7cihuZXcgUSgiVW5zdXBwb3J0ZWQgcHJvdG9jb2wgIitTKyI6IixRLkVSUl9CQURfUkVRVUVTVCxBKSk7cmV0dXJufXUuc2VuZChvfHxudWxsKX0pfTt2YXIgcm49KEEsZSk9PntsZXQgdD1uZXcgQWJvcnRDb250cm9sbGVyLHIsbj1mdW5jdGlvbihCKXtpZighcil7cj0hMCxpKCk7bGV0IEM9QiBpbnN0YW5jZW9mIEVycm9yP0I6dGhpcy5yZWFzb247dC5hYm9ydChDIGluc3RhbmNlb2YgUT9DOm5ldyB4KEMgaW5zdGFuY2VvZiBFcnJvcj9DLm1lc3NhZ2U6QykpfX0sbz1lJiZzZXRUaW1lb3V0KCgpPT57bihuZXcgUShgdGltZW91dCAke2V9IG9mIG1zIGV4Y2VlZGVkYCxRLkVUSU1FRE9VVCkpfSxlKSxpPSgpPT57QSYmKG8mJmNsZWFyVGltZW91dChvKSxvPW51bGwsQS5mb3JFYWNoKEI9PntCJiYoQi5yZW1vdmVFdmVudExpc3RlbmVyP0IucmVtb3ZlRXZlbnRMaXN0ZW5lcigiYWJvcnQiLG4pOkIudW5zdWJzY3JpYmUobikpfSksQT1udWxsKX07QS5mb3JFYWNoKEI9PkImJkIuYWRkRXZlbnRMaXN0ZW5lciYmQi5hZGRFdmVudExpc3RlbmVyKCJhYm9ydCIsbikpO2xldHtzaWduYWw6Z309dDtyZXR1cm4gZy51bnN1YnNjcmliZT1pLFtnLCgpPT57byYmY2xlYXJUaW1lb3V0KG8pLG89bnVsbH1dfSxhdD1ybjt2YXIgbm49ZnVuY3Rpb24qKEEsZSl7bGV0IHQ9QS5ieXRlTGVuZ3RoO2lmKCFlfHx0PGUpe3lpZWxkIEE7cmV0dXJufWxldCByPTAsbjtmb3IoO3I8dDspbj1yK2UseWllbGQgQS5zbGljZShyLG4pLHI9bn0sb249YXN5bmMgZnVuY3Rpb24qKEEsZSx0KXtmb3IgYXdhaXQobGV0IHIgb2YgQSl5aWVsZCpubihBcnJheUJ1ZmZlci5pc1ZpZXcocik/cjphd2FpdCB0KFN0cmluZyhyKSksZSl9LEllPShBLGUsdCxyLG4pPT57bGV0IG89b24oQSxlLG4pLGk9MCxnLEI9Qz0+e2d8fChnPSEwLHImJnIoQykpfTtyZXR1cm4gbmV3IFJlYWRhYmxlU3RyZWFtKHthc3luYyBwdWxsKEMpe3RyeXtsZXR7ZG9uZTphLHZhbHVlOkl9PWF3YWl0IG8ubmV4dCgpO2lmKGEpe0IoKSxDLmNsb3NlKCk7cmV0dXJufWxldCBFPUkuYnl0ZUxlbmd0aDtpZih0KXtsZXQgbD1pKz1FO3QobCl9Qy5lbnF1ZXVlKG5ldyBVaW50OEFycmF5KEkpKX1jYXRjaChhKXt0aHJvdyBCKGEpLGF9fSxjYW5jZWwoQyl7cmV0dXJuIEIoQyksby5yZXR1cm4oKX19LHtoaWdoV2F0ZXJNYXJrOjJ9KX07dmFyIE5BPXR5cGVvZiBmZXRjaD09ImZ1bmN0aW9uIiYmdHlwZW9mIFJlcXVlc3Q9PSJmdW5jdGlvbiImJnR5cGVvZiBSZXNwb25zZT09ImZ1bmN0aW9uIixJdD1OQSYmdHlwZW9mIFJlYWRhYmxlU3RyZWFtPT0iZnVuY3Rpb24iLGdlPU5BJiYodHlwZW9mIFRleHRFbmNvZGVyPT0iZnVuY3Rpb24iPyhBPT5lPT5BLmVuY29kZShlKSkobmV3IFRleHRFbmNvZGVyKTphc3luYyBBPT5uZXcgVWludDhBcnJheShhd2FpdCBuZXcgUmVzcG9uc2UoQSkuYXJyYXlCdWZmZXIoKSkpLGd0PShBLC4uLmUpPT57dHJ5e3JldHVybiEhQSguLi5lKX1jYXRjaHtyZXR1cm4hMX19LGFuPUl0JiZndCgoKT0+e2xldCBBPSExLGU9bmV3IFJlcXVlc3QoRC5vcmlnaW4se2JvZHk6bmV3IFJlYWRhYmxlU3RyZWFtLG1ldGhvZDoiUE9TVCIsZ2V0IGR1cGxleCgpe3JldHVybiBBPSEwLCJoYWxmIn19KS5oZWFkZXJzLmhhcygiQ29udGVudC1UeXBlIik7cmV0dXJuIEEmJiFlfSksc3Q9NjQqMTAyNCxsZT1JdCYmZ3QoKCk9PnMuaXNSZWFkYWJsZVN0cmVhbShuZXcgUmVzcG9uc2UoIiIpLmJvZHkpKSxVQT17c3RyZWFtOmxlJiYoQT0+QS5ib2R5KX07TkEmJihBPT57WyJ0ZXh0IiwiYXJyYXlCdWZmZXIiLCJibG9iIiwiZm9ybURhdGEiLCJzdHJlYW0iXS5mb3JFYWNoKGU9PnshVUFbZV0mJihVQVtlXT1zLmlzRnVuY3Rpb24oQVtlXSk/dD0+dFtlXSgpOih0LHIpPT57dGhyb3cgbmV3IFEoYFJlc3BvbnNlIHR5cGUgJyR7ZX0nIGlzIG5vdCBzdXBwb3J0ZWRgLFEuRVJSX05PVF9TVVBQT1JULHIpfSl9KX0pKG5ldyBSZXNwb25zZSk7dmFyIHNuPWFzeW5jIEE9PntpZihBPT1udWxsKXJldHVybiAwO2lmKHMuaXNCbG9iKEEpKXJldHVybiBBLnNpemU7aWYocy5pc1NwZWNDb21wbGlhbnRGb3JtKEEpKXJldHVybihhd2FpdCBuZXcgUmVxdWVzdChBKS5hcnJheUJ1ZmZlcigpKS5ieXRlTGVuZ3RoO2lmKHMuaXNBcnJheUJ1ZmZlclZpZXcoQSl8fHMuaXNBcnJheUJ1ZmZlcihBKSlyZXR1cm4gQS5ieXRlTGVuZ3RoO2lmKHMuaXNVUkxTZWFyY2hQYXJhbXMoQSkmJihBPUErIiIpLHMuaXNTdHJpbmcoQSkpcmV0dXJuKGF3YWl0IGdlKEEpKS5ieXRlTGVuZ3RofSxJbj1hc3luYyhBLGUpPT57bGV0IHQ9cy50b0Zpbml0ZU51bWJlcihBLmdldENvbnRlbnRMZW5ndGgoKSk7cmV0dXJuIHQ/P3NuKGUpfSxsdD1OQSYmKGFzeW5jIEE9PntsZXR7dXJsOmUsbWV0aG9kOnQsZGF0YTpyLHNpZ25hbDpuLGNhbmNlbFRva2VuOm8sdGltZW91dDppLG9uRG93bmxvYWRQcm9ncmVzczpnLG9uVXBsb2FkUHJvZ3Jlc3M6QixyZXNwb25zZVR5cGU6QyxoZWFkZXJzOmEsd2l0aENyZWRlbnRpYWxzOkk9InNhbWUtb3JpZ2luIixmZXRjaE9wdGlvbnM6RX09RkEoQSk7Qz1DPyhDKyIiKS50b0xvd2VyQ2FzZSgpOiJ0ZXh0IjtsZXRbbCxjXT1ufHxvfHxpP2F0KFtuLG9dLGkpOltdLGYsdSxtPSgpPT57IWYmJnNldFRpbWVvdXQoKCk9PntsJiZsLnVuc3Vic2NyaWJlKCl9KSxmPSEwfSxTO3RyeXtpZihCJiZhbiYmdCE9PSJnZXQiJiZ0IT09ImhlYWQiJiYoUz1hd2FpdCBJbihhLHIpKSE9PTApe2xldCBUPW5ldyBSZXF1ZXN0KGUse21ldGhvZDoiUE9TVCIsYm9keTpyLGR1cGxleDoiaGFsZiJ9KSxPO2lmKHMuaXNGb3JtRGF0YShyKSYmKE89VC5oZWFkZXJzLmdldCgiY29udGVudC10eXBlIikpJiZhLnNldENvbnRlbnRUeXBlKE8pLFQuYm9keSl7bGV0W0hBLHVBXT1vZShTLCQoaWUoQikpKTtyPUllKFQuYm9keSxzdCxIQSx1QSxnZSl9fXMuaXNTdHJpbmcoSSl8fChJPUk/ImluY2x1ZGUiOiJvbWl0IiksdT1uZXcgUmVxdWVzdChlLHsuLi5FLHNpZ25hbDpsLG1ldGhvZDp0LnRvVXBwZXJDYXNlKCksaGVhZGVyczphLm5vcm1hbGl6ZSgpLnRvSlNPTigpLGJvZHk6cixkdXBsZXg6ImhhbGYiLGNyZWRlbnRpYWxzOkl9KTtsZXQgZD1hd2FpdCBmZXRjaCh1KSxVPWxlJiYoQz09PSJzdHJlYW0ifHxDPT09InJlc3BvbnNlIik7aWYobGUmJihnfHxVKSl7bGV0IFQ9e307WyJzdGF0dXMiLCJzdGF0dXNUZXh0IiwiaGVhZGVycyJdLmZvckVhY2goaGU9PntUW2hlXT1kW2hlXX0pO2xldCBPPXMudG9GaW5pdGVOdW1iZXIoZC5oZWFkZXJzLmdldCgiY29udGVudC1sZW5ndGgiKSksW0hBLHVBXT1nJiZvZShPLCQoaWUoZyksITApKXx8W107ZD1uZXcgUmVzcG9uc2UoSWUoZC5ib2R5LHN0LEhBLCgpPT57dUEmJnVBKCksVSYmbSgpfSxnZSksVCl9Qz1DfHwidGV4dCI7bGV0IEs9YXdhaXQgVUFbcy5maW5kS2V5KFVBLEMpfHwidGV4dCJdKGQsQSk7cmV0dXJuIVUmJm0oKSxjJiZjKCksYXdhaXQgbmV3IFByb21pc2UoKFQsTyk9PntnQShULE8se2RhdGE6SyxoZWFkZXJzOncuZnJvbShkLmhlYWRlcnMpLHN0YXR1czpkLnN0YXR1cyxzdGF0dXNUZXh0OmQuc3RhdHVzVGV4dCxjb25maWc6QSxyZXF1ZXN0OnV9KX0pfWNhdGNoKGQpe3Rocm93IG0oKSxkJiZkLm5hbWU9PT0iVHlwZUVycm9yIiYmL2ZldGNoL2kudGVzdChkLm1lc3NhZ2UpP09iamVjdC5hc3NpZ24obmV3IFEoIk5ldHdvcmsgRXJyb3IiLFEuRVJSX05FVFdPUkssQSx1KSx7Y2F1c2U6ZC5jYXVzZXx8ZH0pOlEuZnJvbShkLGQmJmQuY29kZSxBLHUpfX0pO3ZhciBDZT17aHR0cDpEQSx4aHI6aXQsZmV0Y2g6bHR9O3MuZm9yRWFjaChDZSwoQSxlKT0+e2lmKEEpe3RyeXtPYmplY3QuZGVmaW5lUHJvcGVydHkoQSwibmFtZSIse3ZhbHVlOmV9KX1jYXRjaHt9T2JqZWN0LmRlZmluZVByb3BlcnR5KEEsImFkYXB0ZXJOYW1lIix7dmFsdWU6ZX0pfX0pO3ZhciBDdD1BPT5gLSAke0F9YCxnbj1BPT5zLmlzRnVuY3Rpb24oQSl8fEE9PT1udWxsfHxBPT09ITEsTEE9e2dldEFkYXB0ZXI6QT0+e0E9cy5pc0FycmF5KEEpP0E6W0FdO2xldHtsZW5ndGg6ZX09QSx0LHIsbj17fTtmb3IobGV0IG89MDtvPGU7bysrKXt0PUFbb107bGV0IGk7aWYocj10LCFnbih0KSYmKHI9Q2VbKGk9U3RyaW5nKHQpKS50b0xvd2VyQ2FzZSgpXSxyPT09dm9pZCAwKSl0aHJvdyBuZXcgUShgVW5rbm93biBhZGFwdGVyICcke2l9J2ApO2lmKHIpYnJlYWs7bltpfHwiIyIrb109cn1pZighcil7bGV0IG89T2JqZWN0LmVudHJpZXMobikubWFwKChbZyxCXSk9PmBhZGFwdGVyICR7Z30gYCsoQj09PSExPyJpcyBub3Qgc3VwcG9ydGVkIGJ5IHRoZSBlbnZpcm9ubWVudCI6ImlzIG5vdCBhdmFpbGFibGUgaW4gdGhlIGJ1aWxkIikpLGk9ZT9vLmxlbmd0aD4xP2BzaW5jZSA6CmArby5tYXAoQ3QpLmpvaW4oYApgKToiICIrQ3Qob1swXSk6ImFzIG5vIGFkYXB0ZXIgc3BlY2lmaWVkIjt0aHJvdyBuZXcgUSgiVGhlcmUgaXMgbm8gc3VpdGFibGUgYWRhcHRlciB0byBkaXNwYXRjaCB0aGUgcmVxdWVzdCAiK2ksIkVSUl9OT1RfU1VQUE9SVCIpfXJldHVybiByfSxhZGFwdGVyczpDZX07ZnVuY3Rpb24gQmUoQSl7aWYoQS5jYW5jZWxUb2tlbiYmQS5jYW5jZWxUb2tlbi50aHJvd0lmUmVxdWVzdGVkKCksQS5zaWduYWwmJkEuc2lnbmFsLmFib3J0ZWQpdGhyb3cgbmV3IHgobnVsbCxBKX1mdW5jdGlvbiBHQShBKXtyZXR1cm4gQmUoQSksQS5oZWFkZXJzPXcuZnJvbShBLmhlYWRlcnMpLEEuZGF0YT1zQS5jYWxsKEEsQS50cmFuc2Zvcm1SZXF1ZXN0KSxbInBvc3QiLCJwdXQiLCJwYXRjaCJdLmluZGV4T2YoQS5tZXRob2QpIT09LTEmJkEuaGVhZGVycy5zZXRDb250ZW50VHlwZSgiYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkIiwhMSksTEEuZ2V0QWRhcHRlcihBLmFkYXB0ZXJ8fFouYWRhcHRlcikoQSkudGhlbihmdW5jdGlvbihyKXtyZXR1cm4gQmUoQSksci5kYXRhPXNBLmNhbGwoQSxBLnRyYW5zZm9ybVJlc3BvbnNlLHIpLHIuaGVhZGVycz13LmZyb20oci5oZWFkZXJzKSxyfSxmdW5jdGlvbihyKXtyZXR1cm4gSUEocil8fChCZShBKSxyJiZyLnJlc3BvbnNlJiYoci5yZXNwb25zZS5kYXRhPXNBLmNhbGwoQSxBLnRyYW5zZm9ybVJlc3BvbnNlLHIucmVzcG9uc2UpLHIucmVzcG9uc2UuaGVhZGVycz13LmZyb20oci5yZXNwb25zZS5oZWFkZXJzKSkpLFByb21pc2UucmVqZWN0KHIpfSl9dmFyIFRBPSIxLjcuNCI7dmFyIGNlPXt9O1sib2JqZWN0IiwiYm9vbGVhbiIsIm51bWJlciIsImZ1bmN0aW9uIiwic3RyaW5nIiwic3ltYm9sIl0uZm9yRWFjaCgoQSxlKT0+e2NlW0FdPWZ1bmN0aW9uKHIpe3JldHVybiB0eXBlb2Ygcj09PUF8fCJhIisoZTwxPyJuICI6IiAiKStBfX0pO3ZhciBCdD17fTtjZS50cmFuc2l0aW9uYWw9ZnVuY3Rpb24oZSx0LHIpe2Z1bmN0aW9uIG4obyxpKXtyZXR1cm4iW0F4aW9zIHYiK1RBKyJdIFRyYW5zaXRpb25hbCBvcHRpb24gJyIrbysiJyIraSsocj8iLiAiK3I6IiIpfXJldHVybihvLGksZyk9PntpZihlPT09ITEpdGhyb3cgbmV3IFEobihpLCIgaGFzIGJlZW4gcmVtb3ZlZCIrKHQ/IiBpbiAiK3Q6IiIpKSxRLkVSUl9ERVBSRUNBVEVEKTtyZXR1cm4gdCYmIUJ0W2ldJiYoQnRbaV09ITAsY29uc29sZS53YXJuKG4oaSwiIGhhcyBiZWVuIGRlcHJlY2F0ZWQgc2luY2UgdiIrdCsiIGFuZCB3aWxsIGJlIHJlbW92ZWQgaW4gdGhlIG5lYXIgZnV0dXJlIikpKSxlP2UobyxpLGcpOiEwfX07ZnVuY3Rpb24gbG4oQSxlLHQpe2lmKHR5cGVvZiBBIT0ib2JqZWN0Iil0aHJvdyBuZXcgUSgib3B0aW9ucyBtdXN0IGJlIGFuIG9iamVjdCIsUS5FUlJfQkFEX09QVElPTl9WQUxVRSk7bGV0IHI9T2JqZWN0LmtleXMoQSksbj1yLmxlbmd0aDtmb3IoO24tLSA+MDspe2xldCBvPXJbbl0saT1lW29dO2lmKGkpe2xldCBnPUFbb10sQj1nPT09dm9pZCAwfHxpKGcsbyxBKTtpZihCIT09ITApdGhyb3cgbmV3IFEoIm9wdGlvbiAiK28rIiBtdXN0IGJlICIrQixRLkVSUl9CQURfT1BUSU9OX1ZBTFVFKTtjb250aW51ZX1pZih0IT09ITApdGhyb3cgbmV3IFEoIlVua25vd24gb3B0aW9uICIrbyxRLkVSUl9CQURfT1BUSU9OKX19dmFyIE9BPXthc3NlcnRPcHRpb25zOmxuLHZhbGlkYXRvcnM6Y2V9O3ZhciBxPU9BLnZhbGlkYXRvcnMsQUE9Y2xhc3N7Y29uc3RydWN0b3IoZSl7dGhpcy5kZWZhdWx0cz1lLHRoaXMuaW50ZXJjZXB0b3JzPXtyZXF1ZXN0Om5ldyBYQSxyZXNwb25zZTpuZXcgWEF9fWFzeW5jIHJlcXVlc3QoZSx0KXt0cnl7cmV0dXJuIGF3YWl0IHRoaXMuX3JlcXVlc3QoZSx0KX1jYXRjaChyKXtpZihyIGluc3RhbmNlb2YgRXJyb3Ipe2xldCBuO0Vycm9yLmNhcHR1cmVTdGFja1RyYWNlP0Vycm9yLmNhcHR1cmVTdGFja1RyYWNlKG49e30pOm49bmV3IEVycm9yO2xldCBvPW4uc3RhY2s/bi5zdGFjay5yZXBsYWNlKC9eLitcbi8sIiIpOiIiO3RyeXtyLnN0YWNrP28mJiFTdHJpbmcoci5zdGFjaykuZW5kc1dpdGgoby5yZXBsYWNlKC9eLitcbi4rXG4vLCIiKSkmJihyLnN0YWNrKz1gCmArbyk6ci5zdGFjaz1vfWNhdGNoe319dGhyb3cgcn19X3JlcXVlc3QoZSx0KXt0eXBlb2YgZT09InN0cmluZyI/KHQ9dHx8e30sdC51cmw9ZSk6dD1lfHx7fSx0PUwodGhpcy5kZWZhdWx0cyx0KTtsZXR7dHJhbnNpdGlvbmFsOnIscGFyYW1zU2VyaWFsaXplcjpuLGhlYWRlcnM6b309dDtyIT09dm9pZCAwJiZPQS5hc3NlcnRPcHRpb25zKHIse3NpbGVudEpTT05QYXJzaW5nOnEudHJhbnNpdGlvbmFsKHEuYm9vbGVhbiksZm9yY2VkSlNPTlBhcnNpbmc6cS50cmFuc2l0aW9uYWwocS5ib29sZWFuKSxjbGFyaWZ5VGltZW91dEVycm9yOnEudHJhbnNpdGlvbmFsKHEuYm9vbGVhbil9LCExKSxuIT1udWxsJiYocy5pc0Z1bmN0aW9uKG4pP3QucGFyYW1zU2VyaWFsaXplcj17c2VyaWFsaXplOm59Ok9BLmFzc2VydE9wdGlvbnMobix7ZW5jb2RlOnEuZnVuY3Rpb24sc2VyaWFsaXplOnEuZnVuY3Rpb259LCEwKSksdC5tZXRob2Q9KHQubWV0aG9kfHx0aGlzLmRlZmF1bHRzLm1ldGhvZHx8ImdldCIpLnRvTG93ZXJDYXNlKCk7bGV0IGk9byYmcy5tZXJnZShvLmNvbW1vbixvW3QubWV0aG9kXSk7byYmcy5mb3JFYWNoKFsiZGVsZXRlIiwiZ2V0IiwiaGVhZCIsInBvc3QiLCJwdXQiLCJwYXRjaCIsImNvbW1vbiJdLGM9PntkZWxldGUgb1tjXX0pLHQuaGVhZGVycz13LmNvbmNhdChpLG8pO2xldCBnPVtdLEI9ITA7dGhpcy5pbnRlcmNlcHRvcnMucmVxdWVzdC5mb3JFYWNoKGZ1bmN0aW9uKGYpe3R5cGVvZiBmLnJ1bldoZW49PSJmdW5jdGlvbiImJmYucnVuV2hlbih0KT09PSExfHwoQj1CJiZmLnN5bmNocm9ub3VzLGcudW5zaGlmdChmLmZ1bGZpbGxlZCxmLnJlamVjdGVkKSl9KTtsZXQgQz1bXTt0aGlzLmludGVyY2VwdG9ycy5yZXNwb25zZS5mb3JFYWNoKGZ1bmN0aW9uKGYpe0MucHVzaChmLmZ1bGZpbGxlZCxmLnJlamVjdGVkKX0pO2xldCBhLEk9MCxFO2lmKCFCKXtsZXQgYz1bR0EuYmluZCh0aGlzKSx2b2lkIDBdO2ZvcihjLnVuc2hpZnQuYXBwbHkoYyxnKSxjLnB1c2guYXBwbHkoYyxDKSxFPWMubGVuZ3RoLGE9UHJvbWlzZS5yZXNvbHZlKHQpO0k8RTspYT1hLnRoZW4oY1tJKytdLGNbSSsrXSk7cmV0dXJuIGF9RT1nLmxlbmd0aDtsZXQgbD10O2ZvcihJPTA7STxFOyl7bGV0IGM9Z1tJKytdLGY9Z1tJKytdO3RyeXtsPWMobCl9Y2F0Y2godSl7Zi5jYWxsKHRoaXMsdSk7YnJlYWt9fXRyeXthPUdBLmNhbGwodGhpcyxsKX1jYXRjaChjKXtyZXR1cm4gUHJvbWlzZS5yZWplY3QoYyl9Zm9yKEk9MCxFPUMubGVuZ3RoO0k8RTspYT1hLnRoZW4oQ1tJKytdLENbSSsrXSk7cmV0dXJuIGF9Z2V0VXJpKGUpe2U9TCh0aGlzLmRlZmF1bHRzLGUpO2xldCB0PWxBKGUuYmFzZVVSTCxlLnVybCk7cmV0dXJuIGlBKHQsZS5wYXJhbXMsZS5wYXJhbXNTZXJpYWxpemVyKX19O3MuZm9yRWFjaChbImRlbGV0ZSIsImdldCIsImhlYWQiLCJvcHRpb25zIl0sZnVuY3Rpb24oZSl7QUEucHJvdG90eXBlW2VdPWZ1bmN0aW9uKHQscil7cmV0dXJuIHRoaXMucmVxdWVzdChMKHJ8fHt9LHttZXRob2Q6ZSx1cmw6dCxkYXRhOihyfHx7fSkuZGF0YX0pKX19KTtzLmZvckVhY2goWyJwb3N0IiwicHV0IiwicGF0Y2giXSxmdW5jdGlvbihlKXtmdW5jdGlvbiB0KHIpe3JldHVybiBmdW5jdGlvbihvLGksZyl7cmV0dXJuIHRoaXMucmVxdWVzdChMKGd8fHt9LHttZXRob2Q6ZSxoZWFkZXJzOnI/eyJDb250ZW50LVR5cGUiOiJtdWx0aXBhcnQvZm9ybS1kYXRhIn06e30sdXJsOm8sZGF0YTppfSkpfX1BQS5wcm90b3R5cGVbZV09dCgpLEFBLnByb3RvdHlwZVtlKyJGb3JtIl09dCghMCl9KTt2YXIgQ0E9QUE7dmFyIHVlPWNsYXNzIEF7Y29uc3RydWN0b3IoZSl7aWYodHlwZW9mIGUhPSJmdW5jdGlvbiIpdGhyb3cgbmV3IFR5cGVFcnJvcigiZXhlY3V0b3IgbXVzdCBiZSBhIGZ1bmN0aW9uLiIpO2xldCB0O3RoaXMucHJvbWlzZT1uZXcgUHJvbWlzZShmdW5jdGlvbihvKXt0PW99KTtsZXQgcj10aGlzO3RoaXMucHJvbWlzZS50aGVuKG49PntpZighci5fbGlzdGVuZXJzKXJldHVybjtsZXQgbz1yLl9saXN0ZW5lcnMubGVuZ3RoO2Zvcig7by0tID4wOylyLl9saXN0ZW5lcnNbb10obik7ci5fbGlzdGVuZXJzPW51bGx9KSx0aGlzLnByb21pc2UudGhlbj1uPT57bGV0IG8saT1uZXcgUHJvbWlzZShnPT57ci5zdWJzY3JpYmUoZyksbz1nfSkudGhlbihuKTtyZXR1cm4gaS5jYW5jZWw9ZnVuY3Rpb24oKXtyLnVuc3Vic2NyaWJlKG8pfSxpfSxlKGZ1bmN0aW9uKG8saSxnKXtyLnJlYXNvbnx8KHIucmVhc29uPW5ldyB4KG8saSxnKSx0KHIucmVhc29uKSl9KX10aHJvd0lmUmVxdWVzdGVkKCl7aWYodGhpcy5yZWFzb24pdGhyb3cgdGhpcy5yZWFzb259c3Vic2NyaWJlKGUpe2lmKHRoaXMucmVhc29uKXtlKHRoaXMucmVhc29uKTtyZXR1cm59dGhpcy5fbGlzdGVuZXJzP3RoaXMuX2xpc3RlbmVycy5wdXNoKGUpOnRoaXMuX2xpc3RlbmVycz1bZV19dW5zdWJzY3JpYmUoZSl7aWYoIXRoaXMuX2xpc3RlbmVycylyZXR1cm47bGV0IHQ9dGhpcy5fbGlzdGVuZXJzLmluZGV4T2YoZSk7dCE9PS0xJiZ0aGlzLl9saXN0ZW5lcnMuc3BsaWNlKHQsMSl9c3RhdGljIHNvdXJjZSgpe2xldCBlO3JldHVybnt0b2tlbjpuZXcgQShmdW5jdGlvbihuKXtlPW59KSxjYW5jZWw6ZX19fSxjdD11ZTtmdW5jdGlvbiBFZShBKXtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIEEuYXBwbHkobnVsbCx0KX19ZnVuY3Rpb24gZmUoQSl7cmV0dXJuIHMuaXNPYmplY3QoQSkmJkEuaXNBeGlvc0Vycm9yPT09ITB9dmFyIFFlPXtDb250aW51ZToxMDAsU3dpdGNoaW5nUHJvdG9jb2xzOjEwMSxQcm9jZXNzaW5nOjEwMixFYXJseUhpbnRzOjEwMyxPazoyMDAsQ3JlYXRlZDoyMDEsQWNjZXB0ZWQ6MjAyLE5vbkF1dGhvcml0YXRpdmVJbmZvcm1hdGlvbjoyMDMsTm9Db250ZW50OjIwNCxSZXNldENvbnRlbnQ6MjA1LFBhcnRpYWxDb250ZW50OjIwNixNdWx0aVN0YXR1czoyMDcsQWxyZWFkeVJlcG9ydGVkOjIwOCxJbVVzZWQ6MjI2LE11bHRpcGxlQ2hvaWNlczozMDAsTW92ZWRQZXJtYW5lbnRseTozMDEsRm91bmQ6MzAyLFNlZU90aGVyOjMwMyxOb3RNb2RpZmllZDozMDQsVXNlUHJveHk6MzA1LFVudXNlZDozMDYsVGVtcG9yYXJ5UmVkaXJlY3Q6MzA3LFBlcm1hbmVudFJlZGlyZWN0OjMwOCxCYWRSZXF1ZXN0OjQwMCxVbmF1dGhvcml6ZWQ6NDAxLFBheW1lbnRSZXF1aXJlZDo0MDIsRm9yYmlkZGVuOjQwMyxOb3RGb3VuZDo0MDQsTWV0aG9kTm90QWxsb3dlZDo0MDUsTm90QWNjZXB0YWJsZTo0MDYsUHJveHlBdXRoZW50aWNhdGlvblJlcXVpcmVkOjQwNyxSZXF1ZXN0VGltZW91dDo0MDgsQ29uZmxpY3Q6NDA5LEdvbmU6NDEwLExlbmd0aFJlcXVpcmVkOjQxMSxQcmVjb25kaXRpb25GYWlsZWQ6NDEyLFBheWxvYWRUb29MYXJnZTo0MTMsVXJpVG9vTG9uZzo0MTQsVW5zdXBwb3J0ZWRNZWRpYVR5cGU6NDE1LFJhbmdlTm90U2F0aXNmaWFibGU6NDE2LEV4cGVjdGF0aW9uRmFpbGVkOjQxNyxJbUFUZWFwb3Q6NDE4LE1pc2RpcmVjdGVkUmVxdWVzdDo0MjEsVW5wcm9jZXNzYWJsZUVudGl0eTo0MjIsTG9ja2VkOjQyMyxGYWlsZWREZXBlbmRlbmN5OjQyNCxUb29FYXJseTo0MjUsVXBncmFkZVJlcXVpcmVkOjQyNixQcmVjb25kaXRpb25SZXF1aXJlZDo0MjgsVG9vTWFueVJlcXVlc3RzOjQyOSxSZXF1ZXN0SGVhZGVyRmllbGRzVG9vTGFyZ2U6NDMxLFVuYXZhaWxhYmxlRm9yTGVnYWxSZWFzb25zOjQ1MSxJbnRlcm5hbFNlcnZlckVycm9yOjUwMCxOb3RJbXBsZW1lbnRlZDo1MDEsQmFkR2F0ZXdheTo1MDIsU2VydmljZVVuYXZhaWxhYmxlOjUwMyxHYXRld2F5VGltZW91dDo1MDQsSHR0cFZlcnNpb25Ob3RTdXBwb3J0ZWQ6NTA1LFZhcmlhbnRBbHNvTmVnb3RpYXRlczo1MDYsSW5zdWZmaWNpZW50U3RvcmFnZTo1MDcsTG9vcERldGVjdGVkOjUwOCxOb3RFeHRlbmRlZDo1MTAsTmV0d29ya0F1dGhlbnRpY2F0aW9uUmVxdWlyZWQ6NTExfTtPYmplY3QuZW50cmllcyhRZSkuZm9yRWFjaCgoW0EsZV0pPT57UWVbZV09QX0pO3ZhciB1dD1RZTtmdW5jdGlvbiBFdChBKXtsZXQgZT1uZXcgQ0EoQSksdD1yQShDQS5wcm90b3R5cGUucmVxdWVzdCxlKTtyZXR1cm4gcy5leHRlbmQodCxDQS5wcm90b3R5cGUsZSx7YWxsT3duS2V5czohMH0pLHMuZXh0ZW5kKHQsZSxudWxsLHthbGxPd25LZXlzOiEwfSksdC5jcmVhdGU9ZnVuY3Rpb24obil7cmV0dXJuIEV0KEwoQSxuKSl9LHR9dmFyIGg9RXQoWik7aC5BeGlvcz1DQTtoLkNhbmNlbGVkRXJyb3I9eDtoLkNhbmNlbFRva2VuPWN0O2guaXNDYW5jZWw9SUE7aC5WRVJTSU9OPVRBO2gudG9Gb3JtRGF0YT1NO2guQXhpb3NFcnJvcj1RO2guQ2FuY2VsPWguQ2FuY2VsZWRFcnJvcjtoLmFsbD1mdW5jdGlvbihlKXtyZXR1cm4gUHJvbWlzZS5hbGwoZSl9O2guc3ByZWFkPUVlO2guaXNBeGlvc0Vycm9yPWZlO2gubWVyZ2VDb25maWc9TDtoLkF4aW9zSGVhZGVycz13O2guZm9ybVRvSlNPTj1BPT5SQShzLmlzSFRNTEZvcm0oQSk/bmV3IEZvcm1EYXRhKEEpOkEpO2guZ2V0QWRhcHRlcj1MQS5nZXRBZGFwdGVyO2guSHR0cFN0YXR1c0NvZGU9dXQ7aC5kZWZhdWx0PWg7dmFyIGVBPWg7dmFye0F4aW9zOnJzLEF4aW9zRXJyb3I6bnMsQ2FuY2VsZWRFcnJvcjpvcyxpc0NhbmNlbDppcyxDYW5jZWxUb2tlbjphcyxWRVJTSU9OOnNzLGFsbDpJcyxDYW5jZWw6Z3MsaXNBeGlvc0Vycm9yOmxzLHNwcmVhZDpDcyx0b0Zvcm1EYXRhOkJzLEF4aW9zSGVhZGVyczpjcyxIdHRwU3RhdHVzQ29kZTp1cyxmb3JtVG9KU09OOkVzLGdldEFkYXB0ZXI6ZnMsbWVyZ2VDb25maWc6UXN9PWVBO2FzeW5jIGZ1bmN0aW9uIENuKEEsZSl7bGV0IHQ9QSxyPW51bGw7aWYodD09bnVsbClyPW5ldyBXb3JrZXIobmV3IFVSTCgiLi93ZWItd29ya2Vycy9pdGstd2FzbS1waXBlbGluZS53b3JrZXIuanMiLGltcG9ydC5tZXRhLnVybCkse3R5cGU6Im1vZHVsZSJ9KTtlbHNlIGlmKHQuc3RhcnRzV2l0aCgiaHR0cCIpKXtsZXQgbj1hd2FpdCBlQS5nZXQodCx7cmVzcG9uc2VUeXBlOiJibG9iIixwYXJhbXM6ZX0pLG89VVJMLmNyZWF0ZU9iamVjdFVSTChuLmRhdGEpO3I9bmV3IFdvcmtlcihvLHt0eXBlOiJtb2R1bGUifSl9ZWxzZSByPW5ldyBXb3JrZXIodCx7dHlwZToibW9kdWxlIn0pO3JldHVybiByfXZhciBCQT1DbjtmdW5jdGlvbiBmdChBKXtsZXQgZT1XQShBKSx0PUE7cmV0dXJuIHQudGVybWluYXRlZD0hMSx0LndvcmtlclByb3h5PWUsdC5vcmlnaW5hbFRlcm1pbmF0ZT10LnRlcm1pbmF0ZSx0LnRlcm1pbmF0ZT0oKT0+e3QudGVybWluYXRlZD0hMCx0LndvcmtlclByb3h5W0tBXSgpLHQub3JpZ2luYWxUZXJtaW5hdGUoKX0se3dvcmtlclByb3h5OmUsd29ya2VyOnR9fWFzeW5jIGZ1bmN0aW9uIEJuKEEsZSx0KXtsZXQgcjtpZihBIT1udWxsKXtsZXQgbz1BO3JldHVybiBvLndvcmtlclByb3h5IT09dm9pZCAwPyhyPW8ud29ya2VyUHJveHkse3dvcmtlclByb3h5OnIsd29ya2VyOm99KTpmdChBKX1sZXQgbj1hd2FpdCBCQShlLHQpO3JldHVybiBmdChuKX12YXIgUXQ9Qm47YXN5bmMgZnVuY3Rpb24gY24oQSxlLHQpe2xldCByPSJ1bmtub3duIjt0eXBlb2YgQSE9InN0cmluZyI/cj1BLmhyZWY6QS5zdGFydHNXaXRoKCJodHRwIik/cj1BOnI9dHlwZW9mIGU8InUiP2Ake2V9LyR7QX1gOkEsci5lbmRzV2l0aCgiLmpzIikmJihyPXIuc3Vic3RyaW5nKDAsci5sZW5ndGgtMykpLHIuZW5kc1dpdGgoIi53YXNtIikmJihyPXIuc3Vic3RyaW5nKDAsci5sZW5ndGgtNSkpO2xldCBuPWAke3J9Lndhc21gLGk9KGF3YWl0IGVBLmdldChuLHtyZXNwb25zZVR5cGU6ImFycmF5YnVmZmVyIixwYXJhbXM6dH0pKS5kYXRhO3JldHVybihhd2FpdCBpbXBvcnQoYCR7cn0uanNgKSkuZGVmYXVsdCh7d2FzbUJpbmFyeTppfSl9dmFyIHB0PWNuO3ZhciBkdD1hc3luYygpPT5XZWJBc3NlbWJseS52YWxpZGF0ZShuZXcgVWludDhBcnJheShbMCw5NywxMTUsMTA5LDEsMCwwLDAsMSw1LDEsOTYsMCwxLDEyMywzLDIsMSwwLDEwLDEwLDEsOCwwLDY1LDAsMjUzLDE1LDI1Myw5OCwxMV0pKTt2YXIgeXQ9dHlwZW9mIGdsb2JhbFRoaXMuU2hhcmVkQXJyYXlCdWZmZXI9PSJmdW5jdGlvbiIsbXQ9bmV3IFRleHRFbmNvZGVyLGh0PW5ldyBUZXh0RGVjb2RlcigidXRmLTgiKTtmdW5jdGlvbiB1bihBLGUpe2xldCB0PXtmbGFnczoiciIsZW5jb2Rpbmc6ImJpbmFyeSJ9LHI9QS5mc19vcGVuKGUsdC5mbGFncyksbz1BLmZzX3N0YXQoZSkuc2l6ZSxpPW51bGw7eXQ/aT1uZXcgU2hhcmVkQXJyYXlCdWZmZXIobyk6aT1uZXcgQXJyYXlCdWZmZXIobyk7bGV0IGc9bmV3IFVpbnQ4QXJyYXkoaSk7cmV0dXJuIEEuZnNfcmVhZChyLGcsMCxvLDApLEEuZnNfY2xvc2UociksZ31mdW5jdGlvbiB3dChBLGUsdCl7bGV0IHI9bnVsbDt5dD9yPW5ldyBTaGFyZWRBcnJheUJ1ZmZlcih0KTpyPW5ldyBBcnJheUJ1ZmZlcih0KTtsZXQgbj1uZXcgVWludDhBcnJheShyKSxvPW5ldyBVaW50OEFycmF5KEEuSEVBUFU4LmJ1ZmZlcixlLHQpO3JldHVybiBuLnNldChvKSxufWZ1bmN0aW9uIHkoQSxlLHQscil7bGV0IG49MDtyZXR1cm4gZSE9PW51bGwmJihuPUEuY2NhbGwoIml0a193YXNtX2lucHV0X2FycmF5X2FsbG9jIiwibnVtYmVyIixbIm51bWJlciIsIm51bWJlciIsIm51bWJlciIsIm51bWJlciJdLFswLHQscixlLmJ1ZmZlci5ieXRlTGVuZ3RoXSksQS5IRUFQVTguc2V0KG5ldyBVaW50OEFycmF5KGUuYnVmZmVyKSxuKSksbn1mdW5jdGlvbiBZKEEsZSx0KXtsZXQgcj1KU09OLnN0cmluZ2lmeShlKSxuPUEubGVuZ3RoQnl0ZXNVVEY4KHIpKzEsbz1BLmNjYWxsKCJpdGtfd2FzbV9pbnB1dF9qc29uX2FsbG9jIiwibnVtYmVyIixbIm51bWJlciIsIm51bWJlciIsIm51bWJlciJdLFswLHQsbl0pO0Euc3RyaW5nVG9VVEY4KHIsbyxuKX1mdW5jdGlvbiBiKEEsZSx0LHIpe2xldCBuPUEuY2NhbGwoIml0a193YXNtX291dHB1dF9hcnJheV9hZGRyZXNzIiwibnVtYmVyIixbIm51bWJlciIsIm51bWJlciIsIm51bWJlciJdLFswLGUsdF0pLG89QS5jY2FsbCgiaXRrX3dhc21fb3V0cHV0X2FycmF5X3NpemUiLCJudW1iZXIiLFsibnVtYmVyIiwibnVtYmVyIiwibnVtYmVyIl0sWzAsZSx0XSksaT13dChBLG4sbyk7cmV0dXJuIFAocixpLmJ1ZmZlcil9ZnVuY3Rpb24gY0EoQSxlKXtsZXQgdD1BLmNjYWxsKCJpdGtfd2FzbV9vdXRwdXRfanNvbl9hZGRyZXNzIiwibnVtYmVyIixbIm51bWJlciIsIm51bWJlciJdLFswLGVdKSxyPUEuVVRGOFRvU3RyaW5nKHQpO3JldHVybiBKU09OLnBhcnNlKHIpfWZ1bmN0aW9uIEVuKEEsZSx0LHIpe3IhPW51bGwmJnIubGVuZ3RoPjAmJnIuZm9yRWFjaChmdW5jdGlvbihDLGEpe3N3aXRjaChDLnR5cGUpe2Nhc2UgcC5UZXh0U3RyZWFtOntsZXQgST1tdC5lbmNvZGUoQy5kYXRhLmRhdGEpLEU9eShBLEksYSwwKSxsPXtzaXplOkkuYnVmZmVyLmJ5dGVMZW5ndGgsZGF0YTpgZGF0YTphcHBsaWNhdGlvbi92bmQuaXRrLmFkZHJlc3MsMDoke0V9YH07WShBLGwsYSk7YnJlYWt9Y2FzZSBwLkpzb25Db21wYXRpYmxlOntsZXQgST1tdC5lbmNvZGUoSlNPTi5zdHJpbmdpZnkoQy5kYXRhKSksRT15KEEsSSxhLDApLGw9e3NpemU6SS5idWZmZXIuYnl0ZUxlbmd0aCxkYXRhOmBkYXRhOmFwcGxpY2F0aW9uL3ZuZC5pdGsuYWRkcmVzcywwOiR7RX1gfTtZKEEsbCxhKTticmVha31jYXNlIHAuQmluYXJ5U3RyZWFtOntsZXQgST1DLmRhdGEuZGF0YSxFPXkoQSxJLGEsMCksbD17c2l6ZTpJLmJ1ZmZlci5ieXRlTGVuZ3RoLGRhdGE6YGRhdGE6YXBwbGljYXRpb24vdm5kLml0ay5hZGRyZXNzLDA6JHtFfWB9O1koQSxsLGEpO2JyZWFrfWNhc2UgcC5UZXh0RmlsZTp7QS5mc193cml0ZUZpbGUoQy5kYXRhLnBhdGgsQy5kYXRhLmRhdGEpO2JyZWFrfWNhc2UgcC5CaW5hcnlGaWxlOntBLmZzX3dyaXRlRmlsZShDLmRhdGEucGF0aCxDLmRhdGEuZGF0YSk7YnJlYWt9Y2FzZSBwLkltYWdlOntsZXQgST1DLmRhdGEsRT15KEEsSS5kYXRhLGEsMCksbD15KEEsSS5kaXJlY3Rpb24sYSwxKSxjPXR5cGVvZiBJLm1ldGFkYXRhPy5lbnRyaWVzPCJ1Ij9BcnJheS5mcm9tKEkubWV0YWRhdGEuZW50cmllcygpKTpbXSxmPXtpbWFnZVR5cGU6SS5pbWFnZVR5cGUsbmFtZTpJLm5hbWUsb3JpZ2luOkkub3JpZ2luLHNwYWNpbmc6SS5zcGFjaW5nLGRpcmVjdGlvbjpgZGF0YTphcHBsaWNhdGlvbi92bmQuaXRrLmFkZHJlc3MsMDoke2x9YCxzaXplOkkuc2l6ZSxkYXRhOmBkYXRhOmFwcGxpY2F0aW9uL3ZuZC5pdGsuYWRkcmVzcywwOiR7RX1gLG1ldGFkYXRhOmN9O1koQSxmLGEpO2JyZWFrfWNhc2UgcC5NZXNoOntsZXQgST1DLmRhdGEsRT15KEEsSS5wb2ludHMsYSwwKSxsPXkoQSxJLmNlbGxzLGEsMSksYz15KEEsSS5wb2ludERhdGEsYSwyKSxmPXkoQSxJLmNlbGxEYXRhLGEsMyksdT17bWVzaFR5cGU6SS5tZXNoVHlwZSxuYW1lOkkubmFtZSxudW1iZXJPZlBvaW50czpJLm51bWJlck9mUG9pbnRzLHBvaW50czpgZGF0YTphcHBsaWNhdGlvbi92bmQuaXRrLmFkZHJlc3MsMDoke0V9YCxudW1iZXJPZkNlbGxzOkkubnVtYmVyT2ZDZWxscyxjZWxsczpgZGF0YTphcHBsaWNhdGlvbi92bmQuaXRrLmFkZHJlc3MsMDoke2x9YCxjZWxsQnVmZmVyU2l6ZTpJLmNlbGxCdWZmZXJTaXplLG51bWJlck9mUG9pbnRQaXhlbHM6SS5udW1iZXJPZlBvaW50UGl4ZWxzLHBvaW50RGF0YTpgZGF0YTphcHBsaWNhdGlvbi92bmQuaXRrLmFkZHJlc3MsMDoke2N9YCxudW1iZXJPZkNlbGxQaXhlbHM6SS5udW1iZXJPZkNlbGxQaXhlbHMsY2VsbERhdGE6YGRhdGE6YXBwbGljYXRpb24vdm5kLml0ay5hZGRyZXNzLDA6JHtmfWB9O1koQSx1LGEpO2JyZWFrfWNhc2UgcC5Qb2ludFNldDp7bGV0IEk9Qy5kYXRhLEU9eShBLEkucG9pbnRzLGEsMCksbD15KEEsSS5wb2ludERhdGEsYSwxKSxjPXtwb2ludFNldFR5cGU6SS5wb2ludFNldFR5cGUsbmFtZTpJLm5hbWUsbnVtYmVyT2ZQb2ludHM6SS5udW1iZXJPZlBvaW50cyxwb2ludHM6YGRhdGE6YXBwbGljYXRpb24vdm5kLml0ay5hZGRyZXNzLDA6JHtFfWAsbnVtYmVyT2ZQb2ludFBpeGVsczpJLm51bWJlck9mUG9pbnRQaXhlbHMscG9pbnREYXRhOmBkYXRhOmFwcGxpY2F0aW9uL3ZuZC5pdGsuYWRkcmVzcywwOiR7bH1gfTtZKEEsYyxhKTticmVha31jYXNlIHAuVHJhbnNmb3JtTGlzdDp7bGV0IEk9Qy5kYXRhLEU9W107SS5mb3JFYWNoKChsLGMpPT57bGV0IHU9YGRhdGE6YXBwbGljYXRpb24vdm5kLml0ay5hZGRyZXNzLDA6JHt5KEEsbC5maXhlZFBhcmFtZXRlcnMsYSxjKjIpfWAsUz1gZGF0YTphcHBsaWNhdGlvbi92bmQuaXRrLmFkZHJlc3MsMDoke3koQSxsLnBhcmFtZXRlcnMsYSxjKjIrMSl9YCxkPXt0cmFuc2Zvcm1UeXBlOmwudHJhbnNmb3JtVHlwZSxudW1iZXJPZkZpeGVkUGFyYW1ldGVyczpsLm51bWJlck9mRml4ZWRQYXJhbWV0ZXJzLG51bWJlck9mUGFyYW1ldGVyczpsLm51bWJlck9mUGFyYW1ldGVycyxuYW1lOmwubmFtZSxpbnB1dFNwYWNlTmFtZTpsLmlucHV0U3BhY2VOYW1lLG91dHB1dFNwYWNlTmFtZTpsLm91dHB1dFNwYWNlTmFtZSxwYXJhbWV0ZXJzOlMsZml4ZWRQYXJhbWV0ZXJzOnV9O0UucHVzaChkKX0pLFkoQSxFLGEpO2JyZWFrfWNhc2UgcC5Qb2x5RGF0YTp7bGV0IEk9Qy5kYXRhLEU9eShBLEkucG9pbnRzLGEsMCksbD15KEEsSS52ZXJ0aWNlcyxhLDEpLGM9eShBLEkubGluZXMsYSwyKSxmPXkoQSxJLnBvbHlnb25zLGEsMyksdT15KEEsSS50cmlhbmdsZVN0cmlwcyxhLDQpLG09eShBLEkucG9pbnREYXRhLGEsNSksUz15KEEsSS5wb2ludERhdGEsYSw2KSxkPXtwb2x5RGF0YVR5cGU6SS5wb2x5RGF0YVR5cGUsbmFtZTpJLm5hbWUsbnVtYmVyT2ZQb2ludHM6SS5udW1iZXJPZlBvaW50cyxwb2ludHM6YGRhdGE6YXBwbGljYXRpb24vdm5kLml0ay5hZGRyZXNzLDA6JHtFfWAsdmVydGljZXNCdWZmZXJTaXplOkkudmVydGljZXNCdWZmZXJTaXplLHZlcnRpY2VzOmBkYXRhOmFwcGxpY2F0aW9uL3ZuZC5pdGsuYWRkcmVzcywwOiR7bH1gLGxpbmVzQnVmZmVyU2l6ZTpJLmxpbmVzQnVmZmVyU2l6ZSxsaW5lczpgZGF0YTphcHBsaWNhdGlvbi92bmQuaXRrLmFkZHJlc3MsMDoke2N9YCxwb2x5Z29uc0J1ZmZlclNpemU6SS5wb2x5Z29uc0J1ZmZlclNpemUscG9seWdvbnM6YGRhdGE6YXBwbGljYXRpb24vdm5kLml0ay5hZGRyZXNzLDA6JHtmfWAsdHJpYW5nbGVTdHJpcHNCdWZmZXJTaXplOkkudHJpYW5nbGVTdHJpcHNCdWZmZXJTaXplLHRyaWFuZ2xlU3RyaXBzOmBkYXRhOmFwcGxpY2F0aW9uL3ZuZC5pdGsuYWRkcmVzcywwOiR7dX1gLG51bWJlck9mUG9pbnRQaXhlbHM6SS5udW1iZXJPZlBvaW50UGl4ZWxzLHBvaW50RGF0YTpgZGF0YTphcHBsaWNhdGlvbi92bmQuaXRrLmFkZHJlc3MsMDoke219YCxudW1iZXJPZkNlbGxQaXhlbHM6SS5udW1iZXJPZkNlbGxQaXhlbHMsY2VsbERhdGE6YGRhdGE6YXBwbGljYXRpb24vdm5kLml0ay5hZGRyZXNzLDA6JHtTfWB9O1koQSxkLGEpO2JyZWFrfWRlZmF1bHQ6dGhyb3cgRXJyb3IoIlVuc3VwcG9ydGVkIGlucHV0IEludGVyZmFjZVR5cGUiKX19KSxBLnJlc2V0TW9kdWxlU3Rkb3V0KCksQS5yZXNldE1vZHVsZVN0ZGVycigpO2xldCBuPUEuc3RhY2tTYXZlKCksbz0wO3RyeXtvPUEuY2FsbE1haW4oZS5zbGljZSgpKX1jYXRjaChDKXt0aHJvdyB0eXBlb2YgQz09Im51bWJlciImJihjb25zb2xlLmxvZygiRXhjZXB0aW9uIHdoaWxlIHJ1bm5pbmcgcGlwZWxpbmU6IiksY29uc29sZS5sb2coInN0ZG91dDoiLEEuZ2V0TW9kdWxlU3Rkb3V0KCkpLGNvbnNvbGUuZXJyb3IoInN0ZGVycjoiLEEuZ2V0TW9kdWxlU3RkZXJyKCkpLHR5cGVvZiBBLmdldEV4Y2VwdGlvbk1lc3NhZ2U8InUiP2NvbnNvbGUuZXJyb3IoImV4Y2VwdGlvbjoiLEEuZ2V0RXhjZXB0aW9uTWVzc2FnZShDKSk6Y29uc29sZS5lcnJvcigiQnVpbGQgbW9kdWxlIGluIERlYnVnIG1vZGUgZm9yIGV4Y2VwdGlvbiBtZXNzYWdlIGluZm9ybWF0aW9uLiIpKSxDfWZpbmFsbHl7QS5zdGFja1Jlc3RvcmUobil9bGV0IGk9QS5nZXRNb2R1bGVTdGRvdXQoKSxnPUEuZ2V0TW9kdWxlU3RkZXJyKCksQj1bXTtyZXR1cm4gdCE9bnVsbCYmdC5sZW5ndGg+MCYmbz09PTAmJnQuZm9yRWFjaChmdW5jdGlvbihDLGEpe2xldCBJPW51bGw7c3dpdGNoKEMudHlwZSl7Y2FzZSBwLlRleHRTdHJlYW06e2xldCBsPUEuY2NhbGwoIml0a193YXNtX291dHB1dF9hcnJheV9hZGRyZXNzIiwibnVtYmVyIixbIm51bWJlciIsIm51bWJlciIsIm51bWJlciJdLFswLGEsMF0pLGM9QS5jY2FsbCgiaXRrX3dhc21fb3V0cHV0X2FycmF5X3NpemUiLCJudW1iZXIiLFsibnVtYmVyIiwibnVtYmVyIiwibnVtYmVyIl0sWzAsYSwwXSksZj1uZXcgVWludDhBcnJheShBLkhFQVBVOC5idWZmZXIsbCxjKTtJPXtkYXRhOmh0LmRlY29kZShmKX07YnJlYWt9Y2FzZSBwLkpzb25Db21wYXRpYmxlOntsZXQgbD1BLmNjYWxsKCJpdGtfd2FzbV9vdXRwdXRfYXJyYXlfYWRkcmVzcyIsIm51bWJlciIsWyJudW1iZXIiLCJudW1iZXIiLCJudW1iZXIiXSxbMCxhLDBdKSxjPUEuY2NhbGwoIml0a193YXNtX291dHB1dF9hcnJheV9zaXplIiwibnVtYmVyIixbIm51bWJlciIsIm51bWJlciIsIm51bWJlciJdLFswLGEsMF0pLGY9bmV3IFVpbnQ4QXJyYXkoQS5IRUFQVTguYnVmZmVyLGwsYyk7ST1KU09OLnBhcnNlKGh0LmRlY29kZShmKSk7YnJlYWt9Y2FzZSBwLkJpbmFyeVN0cmVhbTp7bGV0IGw9QS5jY2FsbCgiaXRrX3dhc21fb3V0cHV0X2FycmF5X2FkZHJlc3MiLCJudW1iZXIiLFsibnVtYmVyIiwibnVtYmVyIiwibnVtYmVyIl0sWzAsYSwwXSksYz1BLmNjYWxsKCJpdGtfd2FzbV9vdXRwdXRfYXJyYXlfc2l6ZSIsIm51bWJlciIsWyJudW1iZXIiLCJudW1iZXIiLCJudW1iZXIiXSxbMCxhLDBdKTtJPXtkYXRhOnd0KEEsbCxjKX07YnJlYWt9Y2FzZSBwLlRleHRGaWxlOntJPXtwYXRoOkMuZGF0YS5wYXRoLGRhdGE6QS5mc19yZWFkRmlsZShDLmRhdGEucGF0aCx7ZW5jb2Rpbmc6InV0ZjgifSl9O2JyZWFrfWNhc2UgcC5CaW5hcnlGaWxlOntJPXtwYXRoOkMuZGF0YS5wYXRoLGRhdGE6dW4oQSxDLmRhdGEucGF0aCl9O2JyZWFrfWNhc2UgcC5JbWFnZTp7bGV0IGw9Y0EoQSxhKTtsLmRhdGE9YihBLGEsMCxsLmltYWdlVHlwZS5jb21wb25lbnRUeXBlKSxsLmRpcmVjdGlvbj1iKEEsYSwxLGouRmxvYXQ2NCksbC5tZXRhZGF0YT1uZXcgTWFwKGwubWV0YWRhdGEpLEk9bDticmVha31jYXNlIHAuTWVzaDp7bGV0IGw9Y0EoQSxhKTtsLm51bWJlck9mUG9pbnRzPjA/bC5wb2ludHM9YihBLGEsMCxsLm1lc2hUeXBlLnBvaW50Q29tcG9uZW50VHlwZSk6bC5wb2ludHM9UChsLm1lc2hUeXBlLnBvaW50Q29tcG9uZW50VHlwZSxuZXcgQXJyYXlCdWZmZXIoMCkpLGwubnVtYmVyT2ZDZWxscz4wP2wuY2VsbHM9YihBLGEsMSxsLm1lc2hUeXBlLmNlbGxDb21wb25lbnRUeXBlKTpsLmNlbGxzPVAobC5tZXNoVHlwZS5jZWxsQ29tcG9uZW50VHlwZSxuZXcgQXJyYXlCdWZmZXIoMCkpLGwubnVtYmVyT2ZQb2ludFBpeGVscz4wP2wucG9pbnREYXRhPWIoQSxhLDIsbC5tZXNoVHlwZS5wb2ludFBpeGVsQ29tcG9uZW50VHlwZSk6bC5wb2ludERhdGE9UChsLm1lc2hUeXBlLnBvaW50UGl4ZWxDb21wb25lbnRUeXBlLG5ldyBBcnJheUJ1ZmZlcigwKSksbC5udW1iZXJPZkNlbGxQaXhlbHM+MD9sLmNlbGxEYXRhPWIoQSxhLDMsbC5tZXNoVHlwZS5jZWxsUGl4ZWxDb21wb25lbnRUeXBlKTpsLmNlbGxEYXRhPVAobC5tZXNoVHlwZS5jZWxsUGl4ZWxDb21wb25lbnRUeXBlLG5ldyBBcnJheUJ1ZmZlcigwKSksST1sO2JyZWFrfWNhc2UgcC5Qb2ludFNldDp7bGV0IGw9Y0EoQSxhKTtsLm51bWJlck9mUG9pbnRzPjA/bC5wb2ludHM9YihBLGEsMCxsLnBvaW50U2V0VHlwZS5wb2ludENvbXBvbmVudFR5cGUpOmwucG9pbnRzPVAobC5wb2ludFNldFR5cGUucG9pbnRDb21wb25lbnRUeXBlLG5ldyBBcnJheUJ1ZmZlcigwKSksbC5udW1iZXJPZlBvaW50UGl4ZWxzPjA/bC5wb2ludERhdGE9YihBLGEsMSxsLnBvaW50U2V0VHlwZS5wb2ludFBpeGVsQ29tcG9uZW50VHlwZSk6bC5wb2ludERhdGE9UChsLnBvaW50U2V0VHlwZS5wb2ludFBpeGVsQ29tcG9uZW50VHlwZSxuZXcgQXJyYXlCdWZmZXIoMCkpLEk9bDticmVha31jYXNlIHAuVHJhbnNmb3JtTGlzdDp7bGV0IGw9Y0EoQSxhKTtsLmZvckVhY2goKGMsZik9PntjLm51bWJlck9mRml4ZWRQYXJhbWV0ZXJzPjAmJihsW2ZdLmZpeGVkUGFyYW1ldGVycz1iKEEsYSxmKjIsYy50cmFuc2Zvcm1UeXBlLnBhcmFtZXRlcnNWYWx1ZVR5cGUpKSxjLm51bWJlck9mRml4ZWRQYXJhbWV0ZXJzPjAmJihsW2ZdLnBhcmFtZXRlcnM9YihBLGEsZioyKzEsYy50cmFuc2Zvcm1UeXBlLnBhcmFtZXRlcnNWYWx1ZVR5cGUpKX0pLEk9bDticmVha31jYXNlIHAuUG9seURhdGE6e2xldCBsPWNBKEEsYSk7bC5udW1iZXJPZlBvaW50cz4wP2wucG9pbnRzPWIoQSxhLDAsai5GbG9hdDMyKTpsLnBvaW50cz1uZXcgRmxvYXQzMkFycmF5LGwudmVydGljZXNCdWZmZXJTaXplPjA/bC52ZXJ0aWNlcz1iKEEsYSwxLFIuVUludDMyKTpsLnZlcnRpY2VzPW5ldyBVaW50MzJBcnJheSxsLmxpbmVzQnVmZmVyU2l6ZT4wP2wubGluZXM9YihBLGEsMixSLlVJbnQzMik6bC5saW5lcz1uZXcgVWludDMyQXJyYXksbC5wb2x5Z29uc0J1ZmZlclNpemU+MD9sLnBvbHlnb25zPWIoQSxhLDMsUi5VSW50MzIpOmwucG9seWdvbnM9bmV3IFVpbnQzMkFycmF5LGwudHJpYW5nbGVTdHJpcHNCdWZmZXJTaXplPjA/bC50cmlhbmdsZVN0cmlwcz1iKEEsYSw0LFIuVUludDMyKTpsLnRyaWFuZ2xlU3RyaXBzPW5ldyBVaW50MzJBcnJheSxsLm51bWJlck9mUG9pbnRQaXhlbHM+MD9sLnBvaW50RGF0YT1iKEEsYSw1LGwucG9seURhdGFUeXBlLnBvaW50UGl4ZWxDb21wb25lbnRUeXBlKTpsLnBvaW50RGF0YT1QKGwucG9seURhdGFUeXBlLnBvaW50UGl4ZWxDb21wb25lbnRUeXBlLG5ldyBBcnJheUJ1ZmZlcigwKSksbC5udW1iZXJPZkNlbGxQaXhlbHM+MD9sLmNlbGxEYXRhPWIoQSxhLDYsbC5wb2x5RGF0YVR5cGUuY2VsbFBpeGVsQ29tcG9uZW50VHlwZSk6bC5jZWxsRGF0YT1QKGwucG9seURhdGFUeXBlLmNlbGxQaXhlbENvbXBvbmVudFR5cGUsbmV3IEFycmF5QnVmZmVyKDApKSxJPWw7YnJlYWt9ZGVmYXVsdDp0aHJvdyBFcnJvcigiVW5zdXBwb3J0ZWQgb3V0cHV0IEludGVyZmFjZVR5cGUiKX1sZXQgRT17dHlwZTpDLnR5cGUsZGF0YTpJfTtCLnB1c2goRSl9KSx7cmV0dXJuVmFsdWU6byxzdGRvdXQ6aSxzdGRlcnI6ZyxvdXRwdXRzOkJ9fXZhciBEdD1Fbjt2YXIgZm49dHlwZW9mIGdsb2JhbFRoaXMuU2hhcmVkQXJyYXlCdWZmZXI8InUiO2Z1bmN0aW9uIFFuKEEsZSl7aWYoQT09bnVsbClyZXR1cm5bXTtsZXQgdD1bXTtmb3IobGV0IHI9MDtyPEEubGVuZ3RoO3IrKyl7bGV0IG49cG4oQVtyXSxlKTtuIT09bnVsbCYmdC5wdXNoKG4pfXJldHVybiB0fWZ1bmN0aW9uIHBuKEEsZSl7aWYoQT09bnVsbClyZXR1cm4gbnVsbDtsZXQgdD1udWxsO3JldHVybiBBLmJ1ZmZlciE9PXZvaWQgMD90PUEuYnVmZmVyOkEuYnl0ZUxlbmd0aCE9PXZvaWQgMCYmKHQ9QSksZm4mJnQgaW5zdGFuY2VvZiBTaGFyZWRBcnJheUJ1ZmZlcj9udWxsOmU/dDp0LnNsaWNlKDApfXZhciBTdD1RbjtmdW5jdGlvbiBkbihBKXtyZXR1cm5bQS5kYXRhLEEuZGlyZWN0aW9uXX12YXIgYnQ9ZG47ZnVuY3Rpb24gbW4oQSl7cmV0dXJuW0EucG9pbnRzLEEucG9pbnREYXRhLEEuY2VsbHMsQS5jZWxsRGF0YV19dmFyIFJ0PW1uO2Z1bmN0aW9uIGhuKEEpe3JldHVybltBLnBvaW50cyxBLnZlcnRpY2VzLEEubGluZXMsQS5wb2x5Z29ucyxBLnRyaWFuZ2xlU3RyaXBzLEEucG9pbnREYXRhLEEuY2VsbERhdGFdfXZhciBrdD1objt2YXIgeW47ZnVuY3Rpb24gUEEoKXtyZXR1cm4geW59dmFyIHduO2Z1bmN0aW9uIEZ0KCl7cmV0dXJuIHdufXZhciBEbjtmdW5jdGlvbiB4QSgpe3JldHVybiBEbn12YXIgcGU9bmV3IE1hcDtmdW5jdGlvbiBTbigpe2xldCBBPXhBKCk7cmV0dXJuIHR5cGVvZiBBPiJ1IiYmKEE9bnVsbCksQX1mdW5jdGlvbiBVdCgpe2xldCBBPVBBKCk7cmV0dXJuIHR5cGVvZiBBPiJ1IiYmKEE9bmV3IFVSTCgiL3BpcGVsaW5lcyIsZG9jdW1lbnQubG9jYXRpb24ub3JpZ2luKS5ocmVmKSxBfWZ1bmN0aW9uIEpBKCl7bGV0IEE9RnQoKTtyZXR1cm4gdHlwZW9mIEE+InUiJiYoQT17fSksQX1hc3luYyBmdW5jdGlvbiBibihBLGUsdCl7bGV0IHI9QSxuPUE7aWYodHlwZW9mIEEhPSJzdHJpbmciJiYocj1uZXcgVVJMKEEuaHJlZiksbj1yLmhyZWYpLHBlLmhhcyhuKSlyZXR1cm4gcGUuZ2V0KG4pO3tsZXQgbz1hd2FpdCBwdChBLGU/LnRvU3RyaW5nKCk/P1V0KCksdD8/SkEoKSk7cmV0dXJuIHBlLnNldChuLG8pLG99fWFzeW5jIGZ1bmN0aW9uIFJuKEEsZSx0LHIsbil7aWYoIWF3YWl0IGR0KCkpe2xldCB1PSJXZWJBc3NlbWJseSBTSU1EIHN1cHBvcnQgaXMgcmVxdWlyZWQgLS0gcGxlYXNlIHVwZGF0ZSB5b3VyIGJyb3dzZXIuIjt0aHJvdyBhbGVydCh1KSxuZXcgRXJyb3IodSl9bGV0IG89bj8ud2ViV29ya2VyPz9udWxsO2lmKG89PT0hMSl7bGV0IHU9YXdhaXQgYm4oQS50b1N0cmluZygpLG4/LnBpcGVsaW5lQmFzZVVybCxuPy5waXBlbGluZVF1ZXJ5UGFyYW1zPz9KQSgpKTtyZXR1cm4gRHQodSxlLHQscil9bGV0IGk9byxnPW4/LnBpcGVsaW5lV29ya2VyVXJsPz9TbigpLEI9dHlwZW9mIGchPSJzdHJpbmciJiZ0eXBlb2YgZz8uaHJlZjwidSI/Zy5ocmVmOmcse3dvcmtlclByb3h5OkMsd29ya2VyOmF9PWF3YWl0IFF0KGksQixuPy5waXBlbGluZVF1ZXJ5UGFyYW1zPz9KQSgpKTtpPWE7bGV0IEk9W107ciE9bnVsbCYmci5sZW5ndGg+MCYmci5mb3JFYWNoKGZ1bmN0aW9uKHUpe2lmKHUudHlwZT09PXAuQmluYXJ5U3RyZWFtKXtsZXQgbT11LmRhdGEuZGF0YTtJLnB1c2gobSl9ZWxzZSBpZih1LnR5cGU9PT1wLkJpbmFyeUZpbGUpe2xldCBtPXUuZGF0YS5kYXRhO0kucHVzaChtKX1lbHNlIGlmKHUudHlwZT09PXAuSW1hZ2Upe2xldCBtPXUuZGF0YTttLmRhdGEhPT1udWxsJiZJLnB1c2goLi4uYnQobSkpfWVsc2UgaWYodS50eXBlPT09cC5NZXNoKXtsZXQgbT11LmRhdGE7SS5wdXNoKC4uLlJ0KG0pKX1lbHNlIGlmKHUudHlwZT09PXAuUG9seURhdGEpe2xldCBtPXUuZGF0YTtJLnB1c2goLi4ua3QobSkpfX0pO2xldCBFPW4/LnBpcGVsaW5lQmFzZVVybD8/VXQoKSxsPXR5cGVvZiBFIT0ic3RyaW5nIiYmdHlwZW9mIEU/LmhyZWY8InUiP0UuaHJlZjpFLGM9ciE9bnVsbD92QShyLFN0KEksbj8ubm9Db3B5KSk6bnVsbCxmPWF3YWl0IEMucnVuUGlwZWxpbmUoQS50b1N0cmluZygpLGwsZSx0LGMsbj8ucGlwZWxpbmVRdWVyeVBhcmFtcz8/SkEoKSk7cmV0dXJue3JldHVyblZhbHVlOmYucmV0dXJuVmFsdWUsc3Rkb3V0OmYuc3Rkb3V0LHN0ZGVycjpmLnN0ZGVycixvdXRwdXRzOmYub3V0cHV0cyx3ZWJXb3JrZXI6aX19dmFyIEc9Um47dmFyIGtuPW51bGw7ZnVuY3Rpb24gTnQoKXtyZXR1cm4ga259dmFyIGRlLEZuPWBodHRwczovL2Nkbi5qc2RlbGl2ci5uZXQvbnBtL0BpdGstd2FzbS9kb3duc2FtcGxlQCR7TUF9L2Rpc3QvcGlwZWxpbmVzYDtmdW5jdGlvbiBzSShBKXtkZT1BfWZ1bmN0aW9uIEooKXtpZih0eXBlb2YgZGU8InUiKXJldHVybiBkZTtsZXQgQT1QQSgpO3JldHVybiB0eXBlb2YgQTwidSI/QTpGbn12YXIgbWUsVW49bnVsbDtmdW5jdGlvbiBMdChBKXttZT1BfWZ1bmN0aW9uIEYoKXtpZih0eXBlb2YgbWU8InUiKXJldHVybiBtZTtsZXQgQT14QSgpO3JldHVybiB0eXBlb2YgQTwidSI/QTpVbn12YXIgdEE9bnVsbDthc3luYyBmdW5jdGlvbiBHdCgpe2xldCBBPUYoKSxlPXR5cGVvZiBBIT0ic3RyaW5nIiYmdHlwZW9mIEE/LmhyZWY8InUiP0EuaHJlZjpBO3RBPWF3YWl0IEJBKGUpfWZ1bmN0aW9uIHVJKEEpe3RBPUF9YXN5bmMgZnVuY3Rpb24gSCgpe2lmKHRBIT09bnVsbClyZXR1cm4gdEEudGVybWluYXRlZCYmYXdhaXQgR3QoKSx0QTtsZXQgQT1OdCgpO3JldHVybiBBIT09bnVsbD9BOihhd2FpdCBHdCgpLHRBKX1hc3luYyBmdW5jdGlvbiBObihBLGU9e3Nocmlua0ZhY3RvcnM6WzIsMl19KXtsZXQgdD1be3R5cGU6cC5JbWFnZX1dLHI9W3t0eXBlOnAuSW1hZ2UsZGF0YTpBfV0sbj1bXTtpZihuLnB1c2goIjAiKSxuLnB1c2goIjAiKSxuLnB1c2goIi0tbWVtb3J5LWlvIiksZS5zaHJpbmtGYWN0b3JzKXtpZihlLnNocmlua0ZhY3RvcnMubGVuZ3RoPDIpdGhyb3cgbmV3IEVycm9yKCcic2hyaW5rLWZhY3RvcnMiIG9wdGlvbiBtdXN0IGhhdmUgYSBsZW5ndGggPiAyJyk7bi5wdXNoKCItLXNocmluay1mYWN0b3JzIiksYXdhaXQgUHJvbWlzZS5hbGwoZS5zaHJpbmtGYWN0b3JzLm1hcChhc3luYyBjPT57bi5wdXNoKGMudG9TdHJpbmcoKSl9KSl9ZS5pbmZvcm1hdGlvbk9ubHkmJmUuaW5mb3JtYXRpb25Pbmx5JiZuLnB1c2goIi0taW5mb3JtYXRpb24tb25seSIpO2xldCBnPSJkb3duc2FtcGxlLWJpbi1zaHJpbmsiLEI9ZT8ud2ViV29ya2VyO0I9PT12b2lkIDAmJihCPWF3YWl0IEgoKSk7bGV0e3dlYldvcmtlcjpDLHJldHVyblZhbHVlOmEsc3RkZXJyOkksb3V0cHV0czpFfT1hd2FpdCBHKGcsbix0LHIse3BpcGVsaW5lQmFzZVVybDpKKCkscGlwZWxpbmVXb3JrZXJVcmw6RigpLHdlYldvcmtlcjpCLG5vQ29weTplPy5ub0NvcHl9KTtpZihhIT09MCYmSSE9PSIiKXRocm93IG5ldyBFcnJvcihJKTtyZXR1cm57d2ViV29ya2VyOkMsZG93bnNhbXBsZWQ6RVswXT8uZGF0YX19dmFyIExuPU5uO2FzeW5jIGZ1bmN0aW9uIEduKEEsZT17c2hyaW5rRmFjdG9yczpbMiwyXX0pe2xldCB0PVt7dHlwZTpwLkltYWdlfV0scj1be3R5cGU6cC5JbWFnZSxkYXRhOkF9XSxuPVtdO2lmKG4ucHVzaCgiMCIpLG4ucHVzaCgiMCIpLG4ucHVzaCgiLS1tZW1vcnktaW8iKSxlLnNocmlua0ZhY3RvcnMpe2lmKGUuc2hyaW5rRmFjdG9ycy5sZW5ndGg8Mil0aHJvdyBuZXcgRXJyb3IoJyJzaHJpbmstZmFjdG9ycyIgb3B0aW9uIG11c3QgaGF2ZSBhIGxlbmd0aCA+IDInKTtuLnB1c2goIi0tc2hyaW5rLWZhY3RvcnMiKSxhd2FpdCBQcm9taXNlLmFsbChlLnNocmlua0ZhY3RvcnMubWFwKGFzeW5jIGM9PntuLnB1c2goYy50b1N0cmluZygpKX0pKX1pZihlLmNyb3BSYWRpdXMpe2lmKGUuY3JvcFJhZGl1cy5sZW5ndGg8Mil0aHJvdyBuZXcgRXJyb3IoJyJjcm9wLXJhZGl1cyIgb3B0aW9uIG11c3QgaGF2ZSBhIGxlbmd0aCA+IDInKTtuLnB1c2goIi0tY3JvcC1yYWRpdXMiKSxhd2FpdCBQcm9taXNlLmFsbChlLmNyb3BSYWRpdXMubWFwKGFzeW5jIGM9PntuLnB1c2goYy50b1N0cmluZygpKX0pKX1sZXQgZz0iZG93bnNhbXBsZS1sYWJlbC1pbWFnZSIsQj1lPy53ZWJXb3JrZXI7Qj09PXZvaWQgMCYmKEI9YXdhaXQgSCgpKTtsZXR7d2ViV29ya2VyOkMscmV0dXJuVmFsdWU6YSxzdGRlcnI6SSxvdXRwdXRzOkV9PWF3YWl0IEcoZyxuLHQscix7cGlwZWxpbmVCYXNlVXJsOkooKSxwaXBlbGluZVdvcmtlclVybDpGKCksd2ViV29ya2VyOkIsbm9Db3B5OmU/Lm5vQ29weX0pO2lmKGEhPT0wJiZJIT09IiIpdGhyb3cgbmV3IEVycm9yKEkpO3JldHVybnt3ZWJXb3JrZXI6Qyxkb3duc2FtcGxlZDpFWzBdPy5kYXRhfX12YXIgVG49R247YXN5bmMgZnVuY3Rpb24gT24oQT17c2hyaW5rRmFjdG9yczpbMiwyXX0pe2xldCBlPVt7dHlwZTpwLkpzb25Db21wYXRpYmxlfV0sdD1bXSxyPVtdO2lmKHIucHVzaCgiMCIpLHIucHVzaCgiLS1tZW1vcnktaW8iKSx0eXBlb2YgQS5zaHJpbmtGYWN0b3JzPCJ1Iil7aWYoQS5zaHJpbmtGYWN0b3JzLmxlbmd0aDwxKXRocm93IG5ldyBFcnJvcignInNocmluay1mYWN0b3JzIiBvcHRpb24gbXVzdCBoYXZlIGEgbGVuZ3RoID4gMScpO3IucHVzaCgiLS1zaHJpbmstZmFjdG9ycyIpLGF3YWl0IFByb21pc2UuYWxsKEEuc2hyaW5rRmFjdG9ycy5tYXAoYXN5bmMgRT0+e3IucHVzaChFLnRvU3RyaW5nKCkpfSkpfWxldCBvPSJkb3duc2FtcGxlLXNpZ21hIixpPUE/LndlYldvcmtlcjtpPT09dm9pZCAwJiYoaT1hd2FpdCBIKCkpO2xldHt3ZWJXb3JrZXI6ZyxyZXR1cm5WYWx1ZTpCLHN0ZGVycjpDLG91dHB1dHM6YX09YXdhaXQgRyhvLHIsZSx0LHtwaXBlbGluZUJhc2VVcmw6SigpLHBpcGVsaW5lV29ya2VyVXJsOkYoKSx3ZWJXb3JrZXI6aSxub0NvcHk6QT8ubm9Db3B5fSk7aWYoQiE9PTAmJkMhPT0iIil0aHJvdyBuZXcgRXJyb3IoQyk7cmV0dXJue3dlYldvcmtlcjpnLHNpZ21hOmFbMF0/LmRhdGF9fXZhciBQbj1Pbjthc3luYyBmdW5jdGlvbiB4bihBLGU9e3Nocmlua0ZhY3RvcnM6WzIsMl19KXtsZXQgdD1be3R5cGU6cC5JbWFnZX1dLHI9W3t0eXBlOnAuSW1hZ2UsZGF0YTpBfV0sbj1bXTtpZihuLnB1c2goIjAiKSxuLnB1c2goIjAiKSxuLnB1c2goIi0tbWVtb3J5LWlvIiksZS5zaHJpbmtGYWN0b3JzKXtpZihlLnNocmlua0ZhY3RvcnMubGVuZ3RoPDIpdGhyb3cgbmV3IEVycm9yKCcic2hyaW5rLWZhY3RvcnMiIG9wdGlvbiBtdXN0IGhhdmUgYSBsZW5ndGggPiAyJyk7bi5wdXNoKCItLXNocmluay1mYWN0b3JzIiksYXdhaXQgUHJvbWlzZS5hbGwoZS5zaHJpbmtGYWN0b3JzLm1hcChhc3luYyBjPT57bi5wdXNoKGMudG9TdHJpbmcoKSl9KSl9aWYoZS5jcm9wUmFkaXVzKXtpZihlLmNyb3BSYWRpdXMubGVuZ3RoPDIpdGhyb3cgbmV3IEVycm9yKCciY3JvcC1yYWRpdXMiIG9wdGlvbiBtdXN0IGhhdmUgYSBsZW5ndGggPiAyJyk7bi5wdXNoKCItLWNyb3AtcmFkaXVzIiksYXdhaXQgUHJvbWlzZS5hbGwoZS5jcm9wUmFkaXVzLm1hcChhc3luYyBjPT57bi5wdXNoKGMudG9TdHJpbmcoKSl9KSl9bGV0IGc9ImRvd25zYW1wbGUiLEI9ZT8ud2ViV29ya2VyO0I9PT12b2lkIDAmJihCPWF3YWl0IEgoKSk7bGV0e3dlYldvcmtlcjpDLHJldHVyblZhbHVlOmEsc3RkZXJyOkksb3V0cHV0czpFfT1hd2FpdCBHKGcsbix0LHIse3BpcGVsaW5lQmFzZVVybDpKKCkscGlwZWxpbmVXb3JrZXJVcmw6RigpLHdlYldvcmtlcjpCLG5vQ29weTplPy5ub0NvcHl9KTtpZihhIT09MCYmSSE9PSIiKXRocm93IG5ldyBFcnJvcihJKTtyZXR1cm57d2ViV29ya2VyOkMsZG93bnNhbXBsZWQ6RVswXT8uZGF0YX19dmFyIEpuPXhuO2FzeW5jIGZ1bmN0aW9uIEhuKEE9e3NpemU6WzEsMV0sc2lnbWE6WzEsMV19KXtsZXQgZT1be3R5cGU6cC5Kc29uQ29tcGF0aWJsZX1dLHQ9W10scj1bXTtpZihyLnB1c2goIjAiKSxyLnB1c2goIi0tbWVtb3J5LWlvIiksdHlwZW9mIEEuc2l6ZTwidSIpe2lmKEEuc2l6ZS5sZW5ndGg8MSl0aHJvdyBuZXcgRXJyb3IoJyJzaXplIiBvcHRpb24gbXVzdCBoYXZlIGEgbGVuZ3RoID4gMScpO3IucHVzaCgiLS1zaXplIiksYXdhaXQgUHJvbWlzZS5hbGwoQS5zaXplLm1hcChhc3luYyBFPT57ci5wdXNoKEUudG9TdHJpbmcoKSl9KSl9aWYodHlwZW9mIEEuc2lnbWE8InUiKXtpZihBLnNpZ21hLmxlbmd0aDwxKXRocm93IG5ldyBFcnJvcignInNpZ21hIiBvcHRpb24gbXVzdCBoYXZlIGEgbGVuZ3RoID4gMScpO3IucHVzaCgiLS1zaWdtYSIpLGF3YWl0IFByb21pc2UuYWxsKEEuc2lnbWEubWFwKGFzeW5jIEU9PntyLnB1c2goRS50b1N0cmluZygpKX0pKX10eXBlb2YgQS5tYXhLZXJuZWxXaWR0aDwidSImJnIucHVzaCgiLS1tYXgta2VybmVsLXdpZHRoIixBLm1heEtlcm5lbFdpZHRoLnRvU3RyaW5nKCkpLHR5cGVvZiBBLm1heEtlcm5lbEVycm9yPCJ1IiYmci5wdXNoKCItLW1heC1rZXJuZWwtZXJyb3IiLEEubWF4S2VybmVsRXJyb3IudG9TdHJpbmcoKSk7bGV0IG89ImdhdXNzaWFuLWtlcm5lbC1yYWRpdXMiLGk9QT8ud2ViV29ya2VyO2k9PT12b2lkIDAmJihpPWF3YWl0IEgoKSk7bGV0e3dlYldvcmtlcjpnLHJldHVyblZhbHVlOkIsc3RkZXJyOkMsb3V0cHV0czphfT1hd2FpdCBHKG8scixlLHQse3BpcGVsaW5lQmFzZVVybDpKKCkscGlwZWxpbmVXb3JrZXJVcmw6RigpLHdlYldvcmtlcjppLG5vQ29weTpBPy5ub0NvcHl9KTtpZihCIT09MCYmQyE9PSIiKXRocm93IG5ldyBFcnJvcihDKTtyZXR1cm57d2ViV29ya2VyOmcscmFkaXVzOmFbMF0/LmRhdGF9fXZhciBNbj1Ibjt2YXIgVHQ9J2RhdGE6dGV4dC9qYXZhc2NyaXB0O2NoYXJzZXQ9dXRmLTgsdmFyIG1lPU9iamVjdC5kZWZpbmVQcm9wZXJ0eTt2YXIgd2U9KEEsdCk9Pntmb3IodmFyIGUgaW4gdCltZShBLGUse2dldDp0W2VdLGVudW1lcmFibGU6ITB9KX07dmFyIGZ0PVN5bWJvbCgiQ29tbGluay5wcm94eSIpLHBlPVN5bWJvbCgiQ29tbGluay5lbmRwb2ludCIpLFNlPVN5bWJvbCgiQ29tbGluay5yZWxlYXNlUHJveHkiKSxZQT1TeW1ib2woIkNvbWxpbmsuZmluYWxpemVyIiksYUE9U3ltYm9sKCJDb21saW5rLnRocm93biIpLGx0PUE9PnR5cGVvZiBBPT0ib2JqZWN0IiYmQSE9PW51bGx8fHR5cGVvZiBBPT0iZnVuY3Rpb24iLEZlPXtjYW5IYW5kbGU6QT0+bHQoQSkmJkFbZnRdLHNlcmlhbGl6ZShBKXtsZXR7cG9ydDE6dCxwb3J0MjplfT1uZXcgTWVzc2FnZUNoYW5uZWw7cmV0dXJuIGZBKEEsdCksW2UsW2VdXX0sZGVzZXJpYWxpemUoQSl7cmV0dXJuIEEuc3RhcnQoKSxHZShBKX19LFJlPXtjYW5IYW5kbGU6QT0+bHQoQSkmJmFBIGluIEEsc2VyaWFsaXplKHt2YWx1ZTpBfSl7bGV0IHQ7cmV0dXJuIEEgaW5zdGFuY2VvZiBFcnJvcj90PXtpc0Vycm9yOiEwLHZhbHVlOnttZXNzYWdlOkEubWVzc2FnZSxuYW1lOkEubmFtZSxzdGFjazpBLnN0YWNrfX06dD17aXNFcnJvcjohMSx2YWx1ZTpBfSxbdCxbXV19LGRlc2VyaWFsaXplKEEpe3Rocm93IEEuaXNFcnJvcj9PYmplY3QuYXNzaWduKG5ldyBFcnJvcihBLnZhbHVlLm1lc3NhZ2UpLEEudmFsdWUpOkEudmFsdWV9fSx1dD1uZXcgTWFwKFtbInByb3h5IixGZV0sWyJ0aHJvdyIsUmVdXSk7ZnVuY3Rpb24gTmUoQSx0KXtmb3IobGV0IGUgb2YgQSlpZih0PT09ZXx8ZT09PSIqInx8ZSBpbnN0YW5jZW9mIFJlZ0V4cCYmZS50ZXN0KHQpKXJldHVybiEwO3JldHVybiExfWZ1bmN0aW9uIGZBKEEsdD1nbG9iYWxUaGlzLGU9WyIqIl0pe3QuYWRkRXZlbnRMaXN0ZW5lcigibWVzc2FnZSIsZnVuY3Rpb24gSShyKXtpZighcnx8IXIuZGF0YSlyZXR1cm47aWYoIU5lKGUsci5vcmlnaW4pKXtjb25zb2xlLndhcm4oYEludmFsaWQgb3JpZ2luIFwnJHtyLm9yaWdpbn1cJyBmb3IgY29tbGluayBwcm94eWApO3JldHVybn1sZXR7aWQ6byx0eXBlOmcscGF0aDpDfT1PYmplY3QuYXNzaWduKHtwYXRoOltdfSxyLmRhdGEpLFE9KHIuZGF0YS5hcmd1bWVudExpc3R8fFtdKS5tYXAoTyksYTt0cnl7bGV0IG49Qy5zbGljZSgwLC0xKS5yZWR1Y2UoKGYsQik9PmZbQl0sQSkscz1DLnJlZHVjZSgoZixCKT0+ZltCXSxBKTtzd2l0Y2goZyl7Y2FzZSJHRVQiOmE9czticmVhaztjYXNlIlNFVCI6bltDLnNsaWNlKC0xKVswXV09TyhyLmRhdGEudmFsdWUpLGE9ITA7YnJlYWs7Y2FzZSJBUFBMWSI6YT1zLmFwcGx5KG4sUSk7YnJlYWs7Y2FzZSJDT05TVFJVQ1QiOntsZXQgZj1uZXcgcyguLi5RKTthPWJlKGYpfWJyZWFrO2Nhc2UiRU5EUE9JTlQiOntsZXR7cG9ydDE6Zixwb3J0MjpCfT1uZXcgTWVzc2FnZUNoYW5uZWw7ZkEoQSxCKSxhPU1BKGYsW2ZdKX1icmVhaztjYXNlIlJFTEVBU0UiOmE9dm9pZCAwO2JyZWFrO2RlZmF1bHQ6cmV0dXJufX1jYXRjaChuKXthPXt2YWx1ZTpuLFthQV06MH19UHJvbWlzZS5yZXNvbHZlKGEpLmNhdGNoKG49Pih7dmFsdWU6bixbYUFdOjB9KSkudGhlbihuPT57bGV0W3MsZl09Y0Eobik7dC5wb3N0TWVzc2FnZShPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30scykse2lkOm99KSxmKSxnPT09IlJFTEVBU0UiJiYodC5yZW1vdmVFdmVudExpc3RlbmVyKCJtZXNzYWdlIixJKSxEdCh0KSxZQSBpbiBBJiZ0eXBlb2YgQVtZQV09PSJmdW5jdGlvbiImJkFbWUFdKCkpfSkuY2F0Y2gobj0+e2xldFtzLGZdPWNBKHt2YWx1ZTpuZXcgVHlwZUVycm9yKCJVbnNlcmlhbGl6YWJsZSByZXR1cm4gdmFsdWUiKSxbYUFdOjB9KTt0LnBvc3RNZXNzYWdlKE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSxzKSx7aWQ6b30pLGYpfSl9KSx0LnN0YXJ0JiZ0LnN0YXJ0KCl9ZnVuY3Rpb24gVWUoQSl7cmV0dXJuIEEuY29uc3RydWN0b3IubmFtZT09PSJNZXNzYWdlUG9ydCJ9ZnVuY3Rpb24gRHQoQSl7VWUoQSkmJkEuY2xvc2UoKX1mdW5jdGlvbiBHZShBLHQpe3JldHVybiBxQShBLFtdLHQpfWZ1bmN0aW9uIEJBKEEpe2lmKEEpdGhyb3cgbmV3IEVycm9yKCJQcm94eSBoYXMgYmVlbiByZWxlYXNlZCBhbmQgaXMgbm90IHVzZWFibGUiKX1mdW5jdGlvbiBodChBKXtyZXR1cm4gUChBLHt0eXBlOiJSRUxFQVNFIn0pLnRoZW4oKCk9PntEdChBKX0pfXZhciBRQT1uZXcgV2Vha01hcCxFQT0iRmluYWxpemF0aW9uUmVnaXN0cnkiaW4gZ2xvYmFsVGhpcyYmbmV3IEZpbmFsaXphdGlvblJlZ2lzdHJ5KEE9PntsZXQgdD0oUUEuZ2V0KEEpfHwwKS0xO1FBLnNldChBLHQpLHQ9PT0wJiZodChBKX0pO2Z1bmN0aW9uIGtlKEEsdCl7bGV0IGU9KFFBLmdldCh0KXx8MCkrMTtRQS5zZXQodCxlKSxFQSYmRUEucmVnaXN0ZXIoQSx0LEEpfWZ1bmN0aW9uIExlKEEpe0VBJiZFQS51bnJlZ2lzdGVyKEEpfWZ1bmN0aW9uIHFBKEEsdD1bXSxlPWZ1bmN0aW9uKCl7fSl7bGV0IEk9ITEscj1uZXcgUHJveHkoZSx7Z2V0KG8sZyl7aWYoQkEoSSksZz09PVNlKXJldHVybigpPT57TGUociksaHQoQSksST0hMH07aWYoZz09PSJ0aGVuIil7aWYodC5sZW5ndGg9PT0wKXJldHVybnt0aGVuOigpPT5yfTtsZXQgQz1QKEEse3R5cGU6IkdFVCIscGF0aDp0Lm1hcChRPT5RLnRvU3RyaW5nKCkpfSkudGhlbihPKTtyZXR1cm4gQy50aGVuLmJpbmQoQyl9cmV0dXJuIHFBKEEsWy4uLnQsZ10pfSxzZXQobyxnLEMpe0JBKEkpO2xldFtRLGFdPWNBKEMpO3JldHVybiBQKEEse3R5cGU6IlNFVCIscGF0aDpbLi4udCxnXS5tYXAobj0+bi50b1N0cmluZygpKSx2YWx1ZTpRfSxhKS50aGVuKE8pfSxhcHBseShvLGcsQyl7QkEoSSk7bGV0IFE9dFt0Lmxlbmd0aC0xXTtpZihRPT09cGUpcmV0dXJuIFAoQSx7dHlwZToiRU5EUE9JTlQifSkudGhlbihPKTtpZihRPT09ImJpbmQiKXJldHVybiBxQShBLHQuc2xpY2UoMCwtMSkpO2xldFthLG5dPWN0KEMpO3JldHVybiBQKEEse3R5cGU6IkFQUExZIixwYXRoOnQubWFwKHM9PnMudG9TdHJpbmcoKSksYXJndW1lbnRMaXN0OmF9LG4pLnRoZW4oTyl9LGNvbnN0cnVjdChvLGcpe0JBKEkpO2xldFtDLFFdPWN0KGcpO3JldHVybiBQKEEse3R5cGU6IkNPTlNUUlVDVCIscGF0aDp0Lm1hcChhPT5hLnRvU3RyaW5nKCkpLGFyZ3VtZW50TGlzdDpDfSxRKS50aGVuKE8pfX0pO3JldHVybiBrZShyLEEpLHJ9ZnVuY3Rpb24gSmUoQSl7cmV0dXJuIEFycmF5LnByb3RvdHlwZS5jb25jYXQuYXBwbHkoW10sQSl9ZnVuY3Rpb24gY3QoQSl7bGV0IHQ9QS5tYXAoY0EpO3JldHVyblt0Lm1hcChlPT5lWzBdKSxKZSh0Lm1hcChlPT5lWzFdKSldfXZhciBkdD1uZXcgV2Vha01hcDtmdW5jdGlvbiBNQShBLHQpe3JldHVybiBkdC5zZXQoQSx0KSxBfWZ1bmN0aW9uIGJlKEEpe3JldHVybiBPYmplY3QuYXNzaWduKEEse1tmdF06ITB9KX1mdW5jdGlvbiBjQShBKXtmb3IobGV0W3QsZV1vZiB1dClpZihlLmNhbkhhbmRsZShBKSl7bGV0W0kscl09ZS5zZXJpYWxpemUoQSk7cmV0dXJuW3t0eXBlOiJIQU5ETEVSIixuYW1lOnQsdmFsdWU6SX0scl19cmV0dXJuW3t0eXBlOiJSQVciLHZhbHVlOkF9LGR0LmdldChBKXx8W11dfWZ1bmN0aW9uIE8oQSl7c3dpdGNoKEEudHlwZSl7Y2FzZSJIQU5ETEVSIjpyZXR1cm4gdXQuZ2V0KEEubmFtZSkuZGVzZXJpYWxpemUoQS52YWx1ZSk7Y2FzZSJSQVciOnJldHVybiBBLnZhbHVlfX1mdW5jdGlvbiBQKEEsdCxlKXtyZXR1cm4gbmV3IFByb21pc2UoST0+e2xldCByPUhlKCk7QS5hZGRFdmVudExpc3RlbmVyKCJtZXNzYWdlIixmdW5jdGlvbiBvKGcpeyFnLmRhdGF8fCFnLmRhdGEuaWR8fGcuZGF0YS5pZCE9PXJ8fChBLnJlbW92ZUV2ZW50TGlzdGVuZXIoIm1lc3NhZ2UiLG8pLEkoZy5kYXRhKSl9KSxBLnN0YXJ0JiZBLnN0YXJ0KCksQS5wb3N0TWVzc2FnZShPYmplY3QuYXNzaWduKHtpZDpyfSx0KSxlKX0pfWZ1bmN0aW9uIEhlKCl7cmV0dXJuIG5ldyBBcnJheSg0KS5maWxsKDApLm1hcCgoKT0+TWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpKk51bWJlci5NQVhfU0FGRV9JTlRFR0VSKS50b1N0cmluZygxNikpLmpvaW4oIi0iKX1mdW5jdGlvbiB2KEEsdCl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIEEuYXBwbHkodCxhcmd1bWVudHMpfX12YXJ7dG9TdHJpbmc6WWV9PU9iamVjdC5wcm90b3R5cGUse2dldFByb3RvdHlwZU9mOk9BfT1PYmplY3QsdUE9KEE9PnQ9PntsZXQgZT1ZZS5jYWxsKHQpO3JldHVybiBBW2VdfHwoQVtlXT1lLnNsaWNlKDgsLTEpLnRvTG93ZXJDYXNlKCkpfSkoT2JqZWN0LmNyZWF0ZShudWxsKSksRz1BPT4oQT1BLnRvTG93ZXJDYXNlKCksdD0+dUEodCk9PT1BKSxEQT1BPT50PT50eXBlb2YgdD09PUEse2lzQXJyYXk6an09QXJyYXksJD1EQSgidW5kZWZpbmVkIik7ZnVuY3Rpb24gcWUoQSl7cmV0dXJuIEEhPT1udWxsJiYhJChBKSYmQS5jb25zdHJ1Y3RvciE9PW51bGwmJiEkKEEuY29uc3RydWN0b3IpJiZOKEEuY29uc3RydWN0b3IuaXNCdWZmZXIpJiZBLmNvbnN0cnVjdG9yLmlzQnVmZmVyKEEpfXZhciBwdD1HKCJBcnJheUJ1ZmZlciIpO2Z1bmN0aW9uIE1lKEEpe2xldCB0O3JldHVybiB0eXBlb2YgQXJyYXlCdWZmZXI8InUiJiZBcnJheUJ1ZmZlci5pc1ZpZXc/dD1BcnJheUJ1ZmZlci5pc1ZpZXcoQSk6dD1BJiZBLmJ1ZmZlciYmcHQoQS5idWZmZXIpLHR9dmFyIFRlPURBKCJzdHJpbmciKSxOPURBKCJmdW5jdGlvbiIpLFN0PURBKCJudW1iZXIiKSxoQT1BPT5BIT09bnVsbCYmdHlwZW9mIEE9PSJvYmplY3QiLEtlPUE9PkE9PT0hMHx8QT09PSExLGxBPUE9PntpZih1QShBKSE9PSJvYmplY3QiKXJldHVybiExO2xldCB0PU9BKEEpO3JldHVybih0PT09bnVsbHx8dD09PU9iamVjdC5wcm90b3R5cGV8fE9iamVjdC5nZXRQcm90b3R5cGVPZih0KT09PW51bGwpJiYhKFN5bWJvbC50b1N0cmluZ1RhZyBpbiBBKSYmIShTeW1ib2wuaXRlcmF0b3IgaW4gQSl9LE9lPUcoIkRhdGUiKSx4ZT1HKCJGaWxlIiksUGU9RygiQmxvYiIpLGplPUcoIkZpbGVMaXN0IiksV2U9QT0+aEEoQSkmJk4oQS5waXBlKSxaZT1BPT57bGV0IHQ7cmV0dXJuIEEmJih0eXBlb2YgRm9ybURhdGE9PSJmdW5jdGlvbiImJkEgaW5zdGFuY2VvZiBGb3JtRGF0YXx8TihBLmFwcGVuZCkmJigodD11QShBKSk9PT0iZm9ybWRhdGEifHx0PT09Im9iamVjdCImJk4oQS50b1N0cmluZykmJkEudG9TdHJpbmcoKT09PSJbb2JqZWN0IEZvcm1EYXRhXSIpKX0sVmU9RygiVVJMU2VhcmNoUGFyYW1zIiksW19lLFhlLHplLHZlXT1bIlJlYWRhYmxlU3RyZWFtIiwiUmVxdWVzdCIsIlJlc3BvbnNlIiwiSGVhZGVycyJdLm1hcChHKSwkZT1BPT5BLnRyaW0/QS50cmltKCk6QS5yZXBsYWNlKC9eW1xcc1xcdUZFRkZcXHhBMF0rfFtcXHNcXHVGRUZGXFx4QTBdKyQvZywiIik7ZnVuY3Rpb24gQUEoQSx0LHthbGxPd25LZXlzOmU9ITF9PXt9KXtpZihBPT09bnVsbHx8dHlwZW9mIEE+InUiKXJldHVybjtsZXQgSSxyO2lmKHR5cGVvZiBBIT0ib2JqZWN0IiYmKEE9W0FdKSxqKEEpKWZvcihJPTAscj1BLmxlbmd0aDtJPHI7SSsrKXQuY2FsbChudWxsLEFbSV0sSSxBKTtlbHNle2xldCBvPWU/T2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoQSk6T2JqZWN0LmtleXMoQSksZz1vLmxlbmd0aCxDO2ZvcihJPTA7STxnO0krKylDPW9bSV0sdC5jYWxsKG51bGwsQVtDXSxDLEEpfX1mdW5jdGlvbiBGdChBLHQpe3Q9dC50b0xvd2VyQ2FzZSgpO2xldCBlPU9iamVjdC5rZXlzKEEpLEk9ZS5sZW5ndGgscjtmb3IoO0ktLSA+MDspaWYocj1lW0ldLHQ9PT1yLnRvTG93ZXJDYXNlKCkpcmV0dXJuIHI7cmV0dXJuIG51bGx9dmFyIHg9dHlwZW9mIGdsb2JhbFRoaXM8InUiP2dsb2JhbFRoaXM6dHlwZW9mIHNlbGY8InUiP3NlbGY6dHlwZW9mIHdpbmRvdzwidSI/d2luZG93Omdsb2JhbCxSdD1BPT4hJChBKSYmQSE9PXg7ZnVuY3Rpb24gS0EoKXtsZXR7Y2FzZWxlc3M6QX09UnQodGhpcykmJnRoaXN8fHt9LHQ9e30sZT0oSSxyKT0+e2xldCBvPUEmJkZ0KHQscil8fHI7bEEodFtvXSkmJmxBKEkpP3Rbb109S0EodFtvXSxJKTpsQShJKT90W29dPUtBKHt9LEkpOmooSSk/dFtvXT1JLnNsaWNlKCk6dFtvXT1JfTtmb3IobGV0IEk9MCxyPWFyZ3VtZW50cy5sZW5ndGg7STxyO0krKylhcmd1bWVudHNbSV0mJkFBKGFyZ3VtZW50c1tJXSxlKTtyZXR1cm4gdH12YXIgQUk9KEEsdCxlLHthbGxPd25LZXlzOkl9PXt9KT0+KEFBKHQsKHIsbyk9PntlJiZOKHIpP0Fbb109dihyLGUpOkFbb109cn0se2FsbE93bktleXM6SX0pLEEpLHRJPUE9PihBLmNoYXJDb2RlQXQoMCk9PT02NTI3OSYmKEE9QS5zbGljZSgxKSksQSksZUk9KEEsdCxlLEkpPT57QS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh0LnByb3RvdHlwZSxJKSxBLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1BLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShBLCJzdXBlciIse3ZhbHVlOnQucHJvdG90eXBlfSksZSYmT2JqZWN0LmFzc2lnbihBLnByb3RvdHlwZSxlKX0sSUk9KEEsdCxlLEkpPT57bGV0IHIsbyxnLEM9e307aWYodD10fHx7fSxBPT1udWxsKXJldHVybiB0O2Rve2ZvcihyPU9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKEEpLG89ci5sZW5ndGg7by0tID4wOylnPXJbb10sKCFJfHxJKGcsQSx0KSkmJiFDW2ddJiYodFtnXT1BW2ddLENbZ109ITApO0E9ZSE9PSExJiZPQShBKX13aGlsZShBJiYoIWV8fGUoQSx0KSkmJkEhPT1PYmplY3QucHJvdG90eXBlKTtyZXR1cm4gdH0sckk9KEEsdCxlKT0+e0E9U3RyaW5nKEEpLChlPT09dm9pZCAwfHxlPkEubGVuZ3RoKSYmKGU9QS5sZW5ndGgpLGUtPXQubGVuZ3RoO2xldCBJPUEuaW5kZXhPZih0LGUpO3JldHVybiBJIT09LTEmJkk9PT1lfSxvST1BPT57aWYoIUEpcmV0dXJuIG51bGw7aWYoaihBKSlyZXR1cm4gQTtsZXQgdD1BLmxlbmd0aDtpZighU3QodCkpcmV0dXJuIG51bGw7bGV0IGU9bmV3IEFycmF5KHQpO2Zvcig7dC0tID4wOyllW3RdPUFbdF07cmV0dXJuIGV9LGdJPShBPT50PT5BJiZ0IGluc3RhbmNlb2YgQSkodHlwZW9mIFVpbnQ4QXJyYXk8InUiJiZPQShVaW50OEFycmF5KSksaUk9KEEsdCk9PntsZXQgST0oQSYmQVtTeW1ib2wuaXRlcmF0b3JdKS5jYWxsKEEpLHI7Zm9yKDsocj1JLm5leHQoKSkmJiFyLmRvbmU7KXtsZXQgbz1yLnZhbHVlO3QuY2FsbChBLG9bMF0sb1sxXSl9fSxuST0oQSx0KT0+e2xldCBlLEk9W107Zm9yKDsoZT1BLmV4ZWModCkpIT09bnVsbDspSS5wdXNoKGUpO3JldHVybiBJfSxzST1HKCJIVE1MRm9ybUVsZW1lbnQiKSxDST1BPT5BLnRvTG93ZXJDYXNlKCkucmVwbGFjZSgvWy1fXFxzXShbYS16XFxkXSkoXFx3KikvZyxmdW5jdGlvbihlLEkscil7cmV0dXJuIEkudG9VcHBlckNhc2UoKStyfSksbXQ9KCh7aGFzT3duUHJvcGVydHk6QX0pPT4odCxlKT0+QS5jYWxsKHQsZSkpKE9iamVjdC5wcm90b3R5cGUpLEJJPUcoIlJlZ0V4cCIpLE50PShBLHQpPT57bGV0IGU9T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMoQSksST17fTtBQShlLChyLG8pPT57bGV0IGc7KGc9dChyLG8sQSkpIT09ITEmJihJW29dPWd8fHIpfSksT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoQSxJKX0sYUk9QT0+e050KEEsKHQsZSk9PntpZihOKEEpJiZbImFyZ3VtZW50cyIsImNhbGxlciIsImNhbGxlZSJdLmluZGV4T2YoZSkhPT0tMSlyZXR1cm4hMTtsZXQgST1BW2VdO2lmKE4oSSkpe2lmKHQuZW51bWVyYWJsZT0hMSwid3JpdGFibGUiaW4gdCl7dC53cml0YWJsZT0hMTtyZXR1cm59dC5zZXR8fCh0LnNldD0oKT0+e3Rocm93IEVycm9yKCJDYW4gbm90IHJld3JpdGUgcmVhZC1vbmx5IG1ldGhvZCBcJyIrZSsiXCciKX0pfX0pfSxRST0oQSx0KT0+e2xldCBlPXt9LEk9cj0+e3IuZm9yRWFjaChvPT57ZVtvXT0hMH0pfTtyZXR1cm4gaihBKT9JKEEpOkkoU3RyaW5nKEEpLnNwbGl0KHQpKSxlfSxFST0oKT0+e30sY0k9KEEsdCk9PkEhPW51bGwmJk51bWJlci5pc0Zpbml0ZShBPStBKT9BOnQsVEE9ImFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6Iix3dD0iMDEyMzQ1Njc4OSIsVXQ9e0RJR0lUOnd0LEFMUEhBOlRBLEFMUEhBX0RJR0lUOlRBK1RBLnRvVXBwZXJDYXNlKCkrd3R9LGZJPShBPTE2LHQ9VXQuQUxQSEFfRElHSVQpPT57bGV0IGU9IiIse2xlbmd0aDpJfT10O2Zvcig7QS0tOyllKz10W01hdGgucmFuZG9tKCkqSXwwXTtyZXR1cm4gZX07ZnVuY3Rpb24gbEkoQSl7cmV0dXJuISEoQSYmTihBLmFwcGVuZCkmJkFbU3ltYm9sLnRvU3RyaW5nVGFnXT09PSJGb3JtRGF0YSImJkFbU3ltYm9sLml0ZXJhdG9yXSl9dmFyIHVJPUE9PntsZXQgdD1uZXcgQXJyYXkoMTApLGU9KEkscik9PntpZihoQShJKSl7aWYodC5pbmRleE9mKEkpPj0wKXJldHVybjtpZighKCJ0b0pTT04iaW4gSSkpe3Rbcl09STtsZXQgbz1qKEkpP1tdOnt9O3JldHVybiBBQShJLChnLEMpPT57bGV0IFE9ZShnLHIrMSk7ISQoUSkmJihvW0NdPVEpfSksdFtyXT12b2lkIDAsb319cmV0dXJuIEl9O3JldHVybiBlKEEsMCl9LERJPUcoIkFzeW5jRnVuY3Rpb24iKSxoST1BPT5BJiYoaEEoQSl8fE4oQSkpJiZOKEEudGhlbikmJk4oQS5jYXRjaCksR3Q9KChBLHQpPT5BP3NldEltbWVkaWF0ZTp0PygoZSxJKT0+KHguYWRkRXZlbnRMaXN0ZW5lcigibWVzc2FnZSIsKHtzb3VyY2U6cixkYXRhOm99KT0+e3I9PT14JiZvPT09ZSYmSS5sZW5ndGgmJkkuc2hpZnQoKSgpfSwhMSkscj0+e0kucHVzaChyKSx4LnBvc3RNZXNzYWdlKGUsIioiKX0pKShgYXhpb3NAJHtNYXRoLnJhbmRvbSgpfWAsW10pOmU9PnNldFRpbWVvdXQoZSkpKHR5cGVvZiBzZXRJbW1lZGlhdGU9PSJmdW5jdGlvbiIsTih4LnBvc3RNZXNzYWdlKSksZEk9dHlwZW9mIHF1ZXVlTWljcm90YXNrPCJ1Ij9xdWV1ZU1pY3JvdGFzay5iaW5kKHgpOnR5cGVvZiBwcm9jZXNzPCJ1IiYmcHJvY2Vzcy5uZXh0VGlja3x8R3QsaT17aXNBcnJheTpqLGlzQXJyYXlCdWZmZXI6cHQsaXNCdWZmZXI6cWUsaXNGb3JtRGF0YTpaZSxpc0FycmF5QnVmZmVyVmlldzpNZSxpc1N0cmluZzpUZSxpc051bWJlcjpTdCxpc0Jvb2xlYW46S2UsaXNPYmplY3Q6aEEsaXNQbGFpbk9iamVjdDpsQSxpc1JlYWRhYmxlU3RyZWFtOl9lLGlzUmVxdWVzdDpYZSxpc1Jlc3BvbnNlOnplLGlzSGVhZGVyczp2ZSxpc1VuZGVmaW5lZDokLGlzRGF0ZTpPZSxpc0ZpbGU6eGUsaXNCbG9iOlBlLGlzUmVnRXhwOkJJLGlzRnVuY3Rpb246Tixpc1N0cmVhbTpXZSxpc1VSTFNlYXJjaFBhcmFtczpWZSxpc1R5cGVkQXJyYXk6Z0ksaXNGaWxlTGlzdDpqZSxmb3JFYWNoOkFBLG1lcmdlOktBLGV4dGVuZDpBSSx0cmltOiRlLHN0cmlwQk9NOnRJLGluaGVyaXRzOmVJLHRvRmxhdE9iamVjdDpJSSxraW5kT2Y6dUEsa2luZE9mVGVzdDpHLGVuZHNXaXRoOnJJLHRvQXJyYXk6b0ksZm9yRWFjaEVudHJ5OmlJLG1hdGNoQWxsOm5JLGlzSFRNTEZvcm06c0ksaGFzT3duUHJvcGVydHk6bXQsaGFzT3duUHJvcDptdCxyZWR1Y2VEZXNjcmlwdG9yczpOdCxmcmVlemVNZXRob2RzOmFJLHRvT2JqZWN0U2V0OlFJLHRvQ2FtZWxDYXNlOkNJLG5vb3A6RUksdG9GaW5pdGVOdW1iZXI6Y0ksZmluZEtleTpGdCxnbG9iYWw6eCxpc0NvbnRleHREZWZpbmVkOlJ0LEFMUEhBQkVUOlV0LGdlbmVyYXRlU3RyaW5nOmZJLGlzU3BlY0NvbXBsaWFudEZvcm06bEksdG9KU09OT2JqZWN0OnVJLGlzQXN5bmNGbjpESSxpc1RoZW5hYmxlOmhJLHNldEltbWVkaWF0ZTpHdCxhc2FwOmRJfTtmdW5jdGlvbiBXKEEsdCxlLEkscil7RXJyb3IuY2FsbCh0aGlzKSxFcnJvci5jYXB0dXJlU3RhY2tUcmFjZT9FcnJvci5jYXB0dXJlU3RhY2tUcmFjZSh0aGlzLHRoaXMuY29uc3RydWN0b3IpOnRoaXMuc3RhY2s9bmV3IEVycm9yKCkuc3RhY2ssdGhpcy5tZXNzYWdlPUEsdGhpcy5uYW1lPSJBeGlvc0Vycm9yIix0JiYodGhpcy5jb2RlPXQpLGUmJih0aGlzLmNvbmZpZz1lKSxJJiYodGhpcy5yZXF1ZXN0PUkpLHImJih0aGlzLnJlc3BvbnNlPXIpfWkuaW5oZXJpdHMoVyxFcnJvcix7dG9KU09OOmZ1bmN0aW9uKCl7cmV0dXJue21lc3NhZ2U6dGhpcy5tZXNzYWdlLG5hbWU6dGhpcy5uYW1lLGRlc2NyaXB0aW9uOnRoaXMuZGVzY3JpcHRpb24sbnVtYmVyOnRoaXMubnVtYmVyLGZpbGVOYW1lOnRoaXMuZmlsZU5hbWUsbGluZU51bWJlcjp0aGlzLmxpbmVOdW1iZXIsY29sdW1uTnVtYmVyOnRoaXMuY29sdW1uTnVtYmVyLHN0YWNrOnRoaXMuc3RhY2ssY29uZmlnOmkudG9KU09OT2JqZWN0KHRoaXMuY29uZmlnKSxjb2RlOnRoaXMuY29kZSxzdGF0dXM6dGhpcy5yZXNwb25zZSYmdGhpcy5yZXNwb25zZS5zdGF0dXM/dGhpcy5yZXNwb25zZS5zdGF0dXM6bnVsbH19fSk7dmFyIGt0PVcucHJvdG90eXBlLEx0PXt9O1siRVJSX0JBRF9PUFRJT05fVkFMVUUiLCJFUlJfQkFEX09QVElPTiIsIkVDT05OQUJPUlRFRCIsIkVUSU1FRE9VVCIsIkVSUl9ORVRXT1JLIiwiRVJSX0ZSX1RPT19NQU5ZX1JFRElSRUNUUyIsIkVSUl9ERVBSRUNBVEVEIiwiRVJSX0JBRF9SRVNQT05TRSIsIkVSUl9CQURfUkVRVUVTVCIsIkVSUl9DQU5DRUxFRCIsIkVSUl9OT1RfU1VQUE9SVCIsIkVSUl9JTlZBTElEX1VSTCJdLmZvckVhY2goQT0+e0x0W0FdPXt2YWx1ZTpBfX0pO09iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKFcsTHQpO09iamVjdC5kZWZpbmVQcm9wZXJ0eShrdCwiaXNBeGlvc0Vycm9yIix7dmFsdWU6ITB9KTtXLmZyb209KEEsdCxlLEkscixvKT0+e2xldCBnPU9iamVjdC5jcmVhdGUoa3QpO3JldHVybiBpLnRvRmxhdE9iamVjdChBLGcsZnVuY3Rpb24oUSl7cmV0dXJuIFEhPT1FcnJvci5wcm90b3R5cGV9LEM9PkMhPT0iaXNBeGlvc0Vycm9yIiksVy5jYWxsKGcsQS5tZXNzYWdlLHQsZSxJLHIpLGcuY2F1c2U9QSxnLm5hbWU9QS5uYW1lLG8mJk9iamVjdC5hc3NpZ24oZyxvKSxnfTt2YXIgdT1XO3ZhciBkQT1udWxsO2Z1bmN0aW9uIHhBKEEpe3JldHVybiBpLmlzUGxhaW5PYmplY3QoQSl8fGkuaXNBcnJheShBKX1mdW5jdGlvbiBidChBKXtyZXR1cm4gaS5lbmRzV2l0aChBLCJbXSIpP0Euc2xpY2UoMCwtMik6QX1mdW5jdGlvbiBKdChBLHQsZSl7cmV0dXJuIEE/QS5jb25jYXQodCkubWFwKGZ1bmN0aW9uKHIsbyl7cmV0dXJuIHI9YnQociksIWUmJm8/IlsiK3IrIl0iOnJ9KS5qb2luKGU/Ii4iOiIiKTp0fWZ1bmN0aW9uIHlJKEEpe3JldHVybiBpLmlzQXJyYXkoQSkmJiFBLnNvbWUoeEEpfXZhciBtST1pLnRvRmxhdE9iamVjdChpLHt9LG51bGwsZnVuY3Rpb24odCl7cmV0dXJuL15pc1tBLVpdLy50ZXN0KHQpfSk7ZnVuY3Rpb24gd0koQSx0LGUpe2lmKCFpLmlzT2JqZWN0KEEpKXRocm93IG5ldyBUeXBlRXJyb3IoInRhcmdldCBtdXN0IGJlIGFuIG9iamVjdCIpO3Q9dHx8bmV3KGRBfHxGb3JtRGF0YSksZT1pLnRvRmxhdE9iamVjdChlLHttZXRhVG9rZW5zOiEwLGRvdHM6ITEsaW5kZXhlczohMX0sITEsZnVuY3Rpb24obCxjKXtyZXR1cm4haS5pc1VuZGVmaW5lZChjW2xdKX0pO2xldCBJPWUubWV0YVRva2VucyxyPWUudmlzaXRvcnx8bixvPWUuZG90cyxnPWUuaW5kZXhlcyxRPShlLkJsb2J8fHR5cGVvZiBCbG9iPCJ1IiYmQmxvYikmJmkuaXNTcGVjQ29tcGxpYW50Rm9ybSh0KTtpZighaS5pc0Z1bmN0aW9uKHIpKXRocm93IG5ldyBUeXBlRXJyb3IoInZpc2l0b3IgbXVzdCBiZSBhIGZ1bmN0aW9uIik7ZnVuY3Rpb24gYShFKXtpZihFPT09bnVsbClyZXR1cm4iIjtpZihpLmlzRGF0ZShFKSlyZXR1cm4gRS50b0lTT1N0cmluZygpO2lmKCFRJiZpLmlzQmxvYihFKSl0aHJvdyBuZXcgdSgiQmxvYiBpcyBub3Qgc3VwcG9ydGVkLiBVc2UgYSBCdWZmZXIgaW5zdGVhZC4iKTtyZXR1cm4gaS5pc0FycmF5QnVmZmVyKEUpfHxpLmlzVHlwZWRBcnJheShFKT9RJiZ0eXBlb2YgQmxvYj09ImZ1bmN0aW9uIj9uZXcgQmxvYihbRV0pOkJ1ZmZlci5mcm9tKEUpOkV9ZnVuY3Rpb24gbihFLGwsYyl7bGV0IHA9RTtpZihFJiYhYyYmdHlwZW9mIEU9PSJvYmplY3QiKXtpZihpLmVuZHNXaXRoKGwsInt9IikpbD1JP2w6bC5zbGljZSgwLC0yKSxFPUpTT04uc3RyaW5naWZ5KEUpO2Vsc2UgaWYoaS5pc0FycmF5KEUpJiZ5SShFKXx8KGkuaXNGaWxlTGlzdChFKXx8aS5lbmRzV2l0aChsLCJbXSIpKSYmKHA9aS50b0FycmF5KEUpKSlyZXR1cm4gbD1idChsKSxwLmZvckVhY2goZnVuY3Rpb24oRCxVKXshKGkuaXNVbmRlZmluZWQoRCl8fEQ9PT1udWxsKSYmdC5hcHBlbmQoZz09PSEwP0p0KFtsXSxVLG8pOmc9PT1udWxsP2w6bCsiW10iLGEoRCkpfSksITF9cmV0dXJuIHhBKEUpPyEwOih0LmFwcGVuZChKdChjLGwsbyksYShFKSksITEpfWxldCBzPVtdLGY9T2JqZWN0LmFzc2lnbihtSSx7ZGVmYXVsdFZpc2l0b3I6bixjb252ZXJ0VmFsdWU6YSxpc1Zpc2l0YWJsZTp4QX0pO2Z1bmN0aW9uIEIoRSxsKXtpZighaS5pc1VuZGVmaW5lZChFKSl7aWYocy5pbmRleE9mKEUpIT09LTEpdGhyb3cgRXJyb3IoIkNpcmN1bGFyIHJlZmVyZW5jZSBkZXRlY3RlZCBpbiAiK2wuam9pbigiLiIpKTtzLnB1c2goRSksaS5mb3JFYWNoKEUsZnVuY3Rpb24ocCxTKXsoIShpLmlzVW5kZWZpbmVkKHApfHxwPT09bnVsbCkmJnIuY2FsbCh0LHAsaS5pc1N0cmluZyhTKT9TLnRyaW0oKTpTLGwsZikpPT09ITAmJkIocCxsP2wuY29uY2F0KFMpOltTXSl9KSxzLnBvcCgpfX1pZighaS5pc09iamVjdChBKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJkYXRhIG11c3QgYmUgYW4gb2JqZWN0Iik7cmV0dXJuIEIoQSksdH12YXIgcT13STtmdW5jdGlvbiBIdChBKXtsZXQgdD17IiEiOiIlMjUyMSIsIlwnIjoiJTI1MjciLCIoIjoiJTI1MjgiLCIpIjoiJTI1MjkiLCJ+IjoiJTI1N0UiLCIlMjUyMCI6IisiLCIlMjUwMCI6IlxcMCJ9O3JldHVybiBlbmNvZGVVUklDb21wb25lbnQoQSkucmVwbGFjZSgvWyFcJygpfl18JTI1MjB8JTI1MDAvZyxmdW5jdGlvbihJKXtyZXR1cm4gdFtJXX0pfWZ1bmN0aW9uIFl0KEEsdCl7dGhpcy5fcGFpcnM9W10sQSYmcShBLHRoaXMsdCl9dmFyIHF0PVl0LnByb3RvdHlwZTtxdC5hcHBlbmQ9ZnVuY3Rpb24odCxlKXt0aGlzLl9wYWlycy5wdXNoKFt0LGVdKX07cXQudG9TdHJpbmc9ZnVuY3Rpb24odCl7bGV0IGU9dD9mdW5jdGlvbihJKXtyZXR1cm4gdC5jYWxsKHRoaXMsSSxIdCl9Okh0O3JldHVybiB0aGlzLl9wYWlycy5tYXAoZnVuY3Rpb24ocil7cmV0dXJuIGUoclswXSkrIj0iK2UoclsxXSl9LCIiKS5qb2luKCImIil9O3ZhciB5QT1ZdDtmdW5jdGlvbiBwSShBKXtyZXR1cm4gZW5jb2RlVVJJQ29tcG9uZW50KEEpLnJlcGxhY2UoLyUyNTNBL2dpLCI6IikucmVwbGFjZSgvJTI1MjQvZywiJCIpLnJlcGxhY2UoLyUyNTJDL2dpLCIsIikucmVwbGFjZSgvJTI1MjAvZywiKyIpLnJlcGxhY2UoLyUyNTVCL2dpLCJbIikucmVwbGFjZSgvJTI1NUQvZ2ksIl0iKX1mdW5jdGlvbiB0QShBLHQsZSl7aWYoIXQpcmV0dXJuIEE7bGV0IEk9ZSYmZS5lbmNvZGV8fHBJLHI9ZSYmZS5zZXJpYWxpemUsbztpZihyP289cih0LGUpOm89aS5pc1VSTFNlYXJjaFBhcmFtcyh0KT90LnRvU3RyaW5nKCk6bmV3IHlBKHQsZSkudG9TdHJpbmcoSSksbyl7bGV0IGc9QS5pbmRleE9mKCIlMjMiKTtnIT09LTEmJihBPUEuc2xpY2UoMCxnKSksQSs9KEEuaW5kZXhPZigiPyIpPT09LTE/Ij8iOiImIikrb31yZXR1cm4gQX12YXIgUEE9Y2xhc3N7Y29uc3RydWN0b3IoKXt0aGlzLmhhbmRsZXJzPVtdfXVzZSh0LGUsSSl7cmV0dXJuIHRoaXMuaGFuZGxlcnMucHVzaCh7ZnVsZmlsbGVkOnQscmVqZWN0ZWQ6ZSxzeW5jaHJvbm91czpJP0kuc3luY2hyb25vdXM6ITEscnVuV2hlbjpJP0kucnVuV2hlbjpudWxsfSksdGhpcy5oYW5kbGVycy5sZW5ndGgtMX1lamVjdCh0KXt0aGlzLmhhbmRsZXJzW3RdJiYodGhpcy5oYW5kbGVyc1t0XT1udWxsKX1jbGVhcigpe3RoaXMuaGFuZGxlcnMmJih0aGlzLmhhbmRsZXJzPVtdKX1mb3JFYWNoKHQpe2kuZm9yRWFjaCh0aGlzLmhhbmRsZXJzLGZ1bmN0aW9uKEkpe0khPT1udWxsJiZ0KEkpfSl9fSxqQT1QQTt2YXIgbUE9e3NpbGVudEpTT05QYXJzaW5nOiEwLGZvcmNlZEpTT05QYXJzaW5nOiEwLGNsYXJpZnlUaW1lb3V0RXJyb3I6ITF9O3ZhciBNdD10eXBlb2YgVVJMU2VhcmNoUGFyYW1zPCJ1Ij9VUkxTZWFyY2hQYXJhbXM6eUE7dmFyIFR0PXR5cGVvZiBGb3JtRGF0YTwidSI/Rm9ybURhdGE6bnVsbDt2YXIgS3Q9dHlwZW9mIEJsb2I8InUiP0Jsb2I6bnVsbDt2YXIgT3Q9e2lzQnJvd3NlcjohMCxjbGFzc2VzOntVUkxTZWFyY2hQYXJhbXM6TXQsRm9ybURhdGE6VHQsQmxvYjpLdH0scHJvdG9jb2xzOlsiaHR0cCIsImh0dHBzIiwiZmlsZSIsImJsb2IiLCJ1cmwiLCJkYXRhIl19O3ZhciBaQT17fTt3ZShaQSx7aGFzQnJvd3NlckVudjooKT0+V0EsaGFzU3RhbmRhcmRCcm93c2VyRW52OigpPT5TSSxoYXNTdGFuZGFyZEJyb3dzZXJXZWJXb3JrZXJFbnY6KCk9PkZJLG9yaWdpbjooKT0+Ukl9KTt2YXIgV0E9dHlwZW9mIHdpbmRvdzwidSImJnR5cGVvZiBkb2N1bWVudDwidSIsU0k9KEE9PldBJiZbIlJlYWN0TmF0aXZlIiwiTmF0aXZlU2NyaXB0IiwiTlMiXS5pbmRleE9mKEEpPDApKHR5cGVvZiBuYXZpZ2F0b3I8InUiJiZuYXZpZ2F0b3IucHJvZHVjdCksRkk9dHlwZW9mIFdvcmtlckdsb2JhbFNjb3BlPCJ1IiYmc2VsZiBpbnN0YW5jZW9mIFdvcmtlckdsb2JhbFNjb3BlJiZ0eXBlb2Ygc2VsZi5pbXBvcnRTY3JpcHRzPT0iZnVuY3Rpb24iLFJJPVdBJiZ3aW5kb3cubG9jYXRpb24uaHJlZnx8Imh0dHA6Ly9sb2NhbGhvc3QiO3ZhciB3PXsuLi5aQSwuLi5PdH07ZnVuY3Rpb24gVkEoQSx0KXtyZXR1cm4gcShBLG5ldyB3LmNsYXNzZXMuVVJMU2VhcmNoUGFyYW1zLE9iamVjdC5hc3NpZ24oe3Zpc2l0b3I6ZnVuY3Rpb24oZSxJLHIsbyl7cmV0dXJuIHcuaXNOb2RlJiZpLmlzQnVmZmVyKGUpPyh0aGlzLmFwcGVuZChJLGUudG9TdHJpbmcoImJhc2U2NCIpKSwhMSk6by5kZWZhdWx0VmlzaXRvci5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSx0KSl9ZnVuY3Rpb24gTkkoQSl7cmV0dXJuIGkubWF0Y2hBbGwoL1xcdyt8XFxbKFxcdyopXS9nLEEpLm1hcCh0PT50WzBdPT09IltdIj8iIjp0WzFdfHx0WzBdKX1mdW5jdGlvbiBVSShBKXtsZXQgdD17fSxlPU9iamVjdC5rZXlzKEEpLEkscj1lLmxlbmd0aCxvO2ZvcihJPTA7STxyO0krKylvPWVbSV0sdFtvXT1BW29dO3JldHVybiB0fWZ1bmN0aW9uIEdJKEEpe2Z1bmN0aW9uIHQoZSxJLHIsbyl7bGV0IGc9ZVtvKytdO2lmKGc9PT0iX19wcm90b19fIilyZXR1cm4hMDtsZXQgQz1OdW1iZXIuaXNGaW5pdGUoK2cpLFE9bz49ZS5sZW5ndGg7cmV0dXJuIGc9IWcmJmkuaXNBcnJheShyKT9yLmxlbmd0aDpnLFE/KGkuaGFzT3duUHJvcChyLGcpP3JbZ109W3JbZ10sSV06cltnXT1JLCFDKTooKCFyW2ddfHwhaS5pc09iamVjdChyW2ddKSkmJihyW2ddPVtdKSx0KGUsSSxyW2ddLG8pJiZpLmlzQXJyYXkocltnXSkmJihyW2ddPVVJKHJbZ10pKSwhQyl9aWYoaS5pc0Zvcm1EYXRhKEEpJiZpLmlzRnVuY3Rpb24oQS5lbnRyaWVzKSl7bGV0IGU9e307cmV0dXJuIGkuZm9yRWFjaEVudHJ5KEEsKEkscik9Pnt0KE5JKEkpLHIsZSwwKX0pLGV9cmV0dXJuIG51bGx9dmFyIHdBPUdJO2Z1bmN0aW9uIGtJKEEsdCxlKXtpZihpLmlzU3RyaW5nKEEpKXRyeXtyZXR1cm4odHx8SlNPTi5wYXJzZSkoQSksaS50cmltKEEpfWNhdGNoKEkpe2lmKEkubmFtZSE9PSJTeW50YXhFcnJvciIpdGhyb3cgSX1yZXR1cm4oZXx8SlNPTi5zdHJpbmdpZnkpKEEpfXZhciBfQT17dHJhbnNpdGlvbmFsOm1BLGFkYXB0ZXI6WyJ4aHIiLCJodHRwIiwiZmV0Y2giXSx0cmFuc2Zvcm1SZXF1ZXN0OltmdW5jdGlvbih0LGUpe2xldCBJPWUuZ2V0Q29udGVudFR5cGUoKXx8IiIscj1JLmluZGV4T2YoImFwcGxpY2F0aW9uL2pzb24iKT4tMSxvPWkuaXNPYmplY3QodCk7aWYobyYmaS5pc0hUTUxGb3JtKHQpJiYodD1uZXcgRm9ybURhdGEodCkpLGkuaXNGb3JtRGF0YSh0KSlyZXR1cm4gcj9KU09OLnN0cmluZ2lmeSh3QSh0KSk6dDtpZihpLmlzQXJyYXlCdWZmZXIodCl8fGkuaXNCdWZmZXIodCl8fGkuaXNTdHJlYW0odCl8fGkuaXNGaWxlKHQpfHxpLmlzQmxvYih0KXx8aS5pc1JlYWRhYmxlU3RyZWFtKHQpKXJldHVybiB0O2lmKGkuaXNBcnJheUJ1ZmZlclZpZXcodCkpcmV0dXJuIHQuYnVmZmVyO2lmKGkuaXNVUkxTZWFyY2hQYXJhbXModCkpcmV0dXJuIGUuc2V0Q29udGVudFR5cGUoImFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZDtjaGFyc2V0PXV0Zi04IiwhMSksdC50b1N0cmluZygpO2xldCBDO2lmKG8pe2lmKEkuaW5kZXhPZigiYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkIik+LTEpcmV0dXJuIFZBKHQsdGhpcy5mb3JtU2VyaWFsaXplcikudG9TdHJpbmcoKTtpZigoQz1pLmlzRmlsZUxpc3QodCkpfHxJLmluZGV4T2YoIm11bHRpcGFydC9mb3JtLWRhdGEiKT4tMSl7bGV0IFE9dGhpcy5lbnYmJnRoaXMuZW52LkZvcm1EYXRhO3JldHVybiBxKEM/eyJmaWxlc1tdIjp0fTp0LFEmJm5ldyBRLHRoaXMuZm9ybVNlcmlhbGl6ZXIpfX1yZXR1cm4gb3x8cj8oZS5zZXRDb250ZW50VHlwZSgiYXBwbGljYXRpb24vanNvbiIsITEpLGtJKHQpKTp0fV0sdHJhbnNmb3JtUmVzcG9uc2U6W2Z1bmN0aW9uKHQpe2xldCBlPXRoaXMudHJhbnNpdGlvbmFsfHxfQS50cmFuc2l0aW9uYWwsST1lJiZlLmZvcmNlZEpTT05QYXJzaW5nLHI9dGhpcy5yZXNwb25zZVR5cGU9PT0ianNvbiI7aWYoaS5pc1Jlc3BvbnNlKHQpfHxpLmlzUmVhZGFibGVTdHJlYW0odCkpcmV0dXJuIHQ7aWYodCYmaS5pc1N0cmluZyh0KSYmKEkmJiF0aGlzLnJlc3BvbnNlVHlwZXx8cikpe2xldCBnPSEoZSYmZS5zaWxlbnRKU09OUGFyc2luZykmJnI7dHJ5e3JldHVybiBKU09OLnBhcnNlKHQpfWNhdGNoKEMpe2lmKGcpdGhyb3cgQy5uYW1lPT09IlN5bnRheEVycm9yIj91LmZyb20oQyx1LkVSUl9CQURfUkVTUE9OU0UsdGhpcyxudWxsLHRoaXMucmVzcG9uc2UpOkN9fXJldHVybiB0fV0sdGltZW91dDowLHhzcmZDb29raWVOYW1lOiJYU1JGLVRPS0VOIix4c3JmSGVhZGVyTmFtZToiWC1YU1JGLVRPS0VOIixtYXhDb250ZW50TGVuZ3RoOi0xLG1heEJvZHlMZW5ndGg6LTEsZW52OntGb3JtRGF0YTp3LmNsYXNzZXMuRm9ybURhdGEsQmxvYjp3LmNsYXNzZXMuQmxvYn0sdmFsaWRhdGVTdGF0dXM6ZnVuY3Rpb24odCl7cmV0dXJuIHQ+PTIwMCYmdDwzMDB9LGhlYWRlcnM6e2NvbW1vbjp7QWNjZXB0OiJhcHBsaWNhdGlvbi9qc29uLCB0ZXh0L3BsYWluLCAqLyoiLCJDb250ZW50LVR5cGUiOnZvaWQgMH19fTtpLmZvckVhY2goWyJkZWxldGUiLCJnZXQiLCJoZWFkIiwicG9zdCIsInB1dCIsInBhdGNoIl0sQT0+e19BLmhlYWRlcnNbQV09e319KTt2YXIgWj1fQTt2YXIgTEk9aS50b09iamVjdFNldChbImFnZSIsImF1dGhvcml6YXRpb24iLCJjb250ZW50LWxlbmd0aCIsImNvbnRlbnQtdHlwZSIsImV0YWciLCJleHBpcmVzIiwiZnJvbSIsImhvc3QiLCJpZi1tb2RpZmllZC1zaW5jZSIsImlmLXVubW9kaWZpZWQtc2luY2UiLCJsYXN0LW1vZGlmaWVkIiwibG9jYXRpb24iLCJtYXgtZm9yd2FyZHMiLCJwcm94eS1hdXRob3JpemF0aW9uIiwicmVmZXJlciIsInJldHJ5LWFmdGVyIiwidXNlci1hZ2VudCJdKSx4dD1BPT57bGV0IHQ9e30sZSxJLHI7cmV0dXJuIEEmJkEuc3BsaXQoYCUwQWApLmZvckVhY2goZnVuY3Rpb24oZyl7cj1nLmluZGV4T2YoIjoiKSxlPWcuc3Vic3RyaW5nKDAscikudHJpbSgpLnRvTG93ZXJDYXNlKCksST1nLnN1YnN0cmluZyhyKzEpLnRyaW0oKSwhKCFlfHx0W2VdJiZMSVtlXSkmJihlPT09InNldC1jb29raWUiP3RbZV0/dFtlXS5wdXNoKEkpOnRbZV09W0ldOnRbZV09dFtlXT90W2VdKyIsICIrSTpJKX0pLHR9O3ZhciBQdD1TeW1ib2woImludGVybmFscyIpO2Z1bmN0aW9uIGVBKEEpe3JldHVybiBBJiZTdHJpbmcoQSkudHJpbSgpLnRvTG93ZXJDYXNlKCl9ZnVuY3Rpb24gcEEoQSl7cmV0dXJuIEE9PT0hMXx8QT09bnVsbD9BOmkuaXNBcnJheShBKT9BLm1hcChwQSk6U3RyaW5nKEEpfWZ1bmN0aW9uIEpJKEEpe2xldCB0PU9iamVjdC5jcmVhdGUobnVsbCksZT0vKFteXFxzLDs9XSspXFxzKig/Oj1cXHMqKFteLDtdKykpPy9nLEk7Zm9yKDtJPWUuZXhlYyhBKTspdFtJWzFdXT1JWzJdO3JldHVybiB0fXZhciBiST1BPT4vXlstX2EtekEtWjAtOV5gfH4sISUyMyQlJlwnKisuXSskLy50ZXN0KEEudHJpbSgpKTtmdW5jdGlvbiBYQShBLHQsZSxJLHIpe2lmKGkuaXNGdW5jdGlvbihJKSlyZXR1cm4gSS5jYWxsKHRoaXMsdCxlKTtpZihyJiYodD1lKSwhIWkuaXNTdHJpbmcodCkpe2lmKGkuaXNTdHJpbmcoSSkpcmV0dXJuIHQuaW5kZXhPZihJKSE9PS0xO2lmKGkuaXNSZWdFeHAoSSkpcmV0dXJuIEkudGVzdCh0KX19ZnVuY3Rpb24gSEkoQSl7cmV0dXJuIEEudHJpbSgpLnRvTG93ZXJDYXNlKCkucmVwbGFjZSgvKFthLXpcXGRdKShcXHcqKS9nLCh0LGUsSSk9PmUudG9VcHBlckNhc2UoKStJKX1mdW5jdGlvbiBZSShBLHQpe2xldCBlPWkudG9DYW1lbENhc2UoIiAiK3QpO1siZ2V0Iiwic2V0IiwiaGFzIl0uZm9yRWFjaChJPT57T2JqZWN0LmRlZmluZVByb3BlcnR5KEEsSStlLHt2YWx1ZTpmdW5jdGlvbihyLG8sZyl7cmV0dXJuIHRoaXNbSV0uY2FsbCh0aGlzLHQscixvLGcpfSxjb25maWd1cmFibGU6ITB9KX0pfXZhciBWPWNsYXNze2NvbnN0cnVjdG9yKHQpe3QmJnRoaXMuc2V0KHQpfXNldCh0LGUsSSl7bGV0IHI9dGhpcztmdW5jdGlvbiBvKEMsUSxhKXtsZXQgbj1lQShRKTtpZighbil0aHJvdyBuZXcgRXJyb3IoImhlYWRlciBuYW1lIG11c3QgYmUgYSBub24tZW1wdHkgc3RyaW5nIik7bGV0IHM9aS5maW5kS2V5KHIsbik7KCFzfHxyW3NdPT09dm9pZCAwfHxhPT09ITB8fGE9PT12b2lkIDAmJnJbc10hPT0hMSkmJihyW3N8fFFdPXBBKEMpKX1sZXQgZz0oQyxRKT0+aS5mb3JFYWNoKEMsKGEsbik9Pm8oYSxuLFEpKTtpZihpLmlzUGxhaW5PYmplY3QodCl8fHQgaW5zdGFuY2VvZiB0aGlzLmNvbnN0cnVjdG9yKWcodCxlKTtlbHNlIGlmKGkuaXNTdHJpbmcodCkmJih0PXQudHJpbSgpKSYmIWJJKHQpKWcoeHQodCksZSk7ZWxzZSBpZihpLmlzSGVhZGVycyh0KSlmb3IobGV0W0MsUV1vZiB0LmVudHJpZXMoKSlvKFEsQyxJKTtlbHNlIHQhPW51bGwmJm8oZSx0LEkpO3JldHVybiB0aGlzfWdldCh0LGUpe2lmKHQ9ZUEodCksdCl7bGV0IEk9aS5maW5kS2V5KHRoaXMsdCk7aWYoSSl7bGV0IHI9dGhpc1tJXTtpZighZSlyZXR1cm4gcjtpZihlPT09ITApcmV0dXJuIEpJKHIpO2lmKGkuaXNGdW5jdGlvbihlKSlyZXR1cm4gZS5jYWxsKHRoaXMscixJKTtpZihpLmlzUmVnRXhwKGUpKXJldHVybiBlLmV4ZWMocik7dGhyb3cgbmV3IFR5cGVFcnJvcigicGFyc2VyIG11c3QgYmUgYm9vbGVhbnxyZWdleHB8ZnVuY3Rpb24iKX19fWhhcyh0LGUpe2lmKHQ9ZUEodCksdCl7bGV0IEk9aS5maW5kS2V5KHRoaXMsdCk7cmV0dXJuISEoSSYmdGhpc1tJXSE9PXZvaWQgMCYmKCFlfHxYQSh0aGlzLHRoaXNbSV0sSSxlKSkpfXJldHVybiExfWRlbGV0ZSh0LGUpe2xldCBJPXRoaXMscj0hMTtmdW5jdGlvbiBvKGcpe2lmKGc9ZUEoZyksZyl7bGV0IEM9aS5maW5kS2V5KEksZyk7QyYmKCFlfHxYQShJLElbQ10sQyxlKSkmJihkZWxldGUgSVtDXSxyPSEwKX19cmV0dXJuIGkuaXNBcnJheSh0KT90LmZvckVhY2gobyk6byh0KSxyfWNsZWFyKHQpe2xldCBlPU9iamVjdC5rZXlzKHRoaXMpLEk9ZS5sZW5ndGgscj0hMTtmb3IoO0ktLTspe2xldCBvPWVbSV07KCF0fHxYQSh0aGlzLHRoaXNbb10sbyx0LCEwKSkmJihkZWxldGUgdGhpc1tvXSxyPSEwKX1yZXR1cm4gcn1ub3JtYWxpemUodCl7bGV0IGU9dGhpcyxJPXt9O3JldHVybiBpLmZvckVhY2godGhpcywocixvKT0+e2xldCBnPWkuZmluZEtleShJLG8pO2lmKGcpe2VbZ109cEEociksZGVsZXRlIGVbb107cmV0dXJufWxldCBDPXQ/SEkobyk6U3RyaW5nKG8pLnRyaW0oKTtDIT09byYmZGVsZXRlIGVbb10sZVtDXT1wQShyKSxJW0NdPSEwfSksdGhpc31jb25jYXQoLi4udCl7cmV0dXJuIHRoaXMuY29uc3RydWN0b3IuY29uY2F0KHRoaXMsLi4udCl9dG9KU09OKHQpe2xldCBlPU9iamVjdC5jcmVhdGUobnVsbCk7cmV0dXJuIGkuZm9yRWFjaCh0aGlzLChJLHIpPT57SSE9bnVsbCYmSSE9PSExJiYoZVtyXT10JiZpLmlzQXJyYXkoSSk/SS5qb2luKCIsICIpOkkpfSksZX1bU3ltYm9sLml0ZXJhdG9yXSgpe3JldHVybiBPYmplY3QuZW50cmllcyh0aGlzLnRvSlNPTigpKVtTeW1ib2wuaXRlcmF0b3JdKCl9dG9TdHJpbmcoKXtyZXR1cm4gT2JqZWN0LmVudHJpZXModGhpcy50b0pTT04oKSkubWFwKChbdCxlXSk9PnQrIjogIitlKS5qb2luKGAlMEFgKX1nZXRbU3ltYm9sLnRvU3RyaW5nVGFnXSgpe3JldHVybiJBeGlvc0hlYWRlcnMifXN0YXRpYyBmcm9tKHQpe3JldHVybiB0IGluc3RhbmNlb2YgdGhpcz90Om5ldyB0aGlzKHQpfXN0YXRpYyBjb25jYXQodCwuLi5lKXtsZXQgST1uZXcgdGhpcyh0KTtyZXR1cm4gZS5mb3JFYWNoKHI9Pkkuc2V0KHIpKSxJfXN0YXRpYyBhY2Nlc3Nvcih0KXtsZXQgST0odGhpc1tQdF09dGhpc1tQdF09e2FjY2Vzc29yczp7fX0pLmFjY2Vzc29ycyxyPXRoaXMucHJvdG90eXBlO2Z1bmN0aW9uIG8oZyl7bGV0IEM9ZUEoZyk7SVtDXXx8KFlJKHIsZyksSVtDXT0hMCl9cmV0dXJuIGkuaXNBcnJheSh0KT90LmZvckVhY2gobyk6byh0KSx0aGlzfX07Vi5hY2Nlc3NvcihbIkNvbnRlbnQtVHlwZSIsIkNvbnRlbnQtTGVuZ3RoIiwiQWNjZXB0IiwiQWNjZXB0LUVuY29kaW5nIiwiVXNlci1BZ2VudCIsIkF1dGhvcml6YXRpb24iXSk7aS5yZWR1Y2VEZXNjcmlwdG9ycyhWLnByb3RvdHlwZSwoe3ZhbHVlOkF9LHQpPT57bGV0IGU9dFswXS50b1VwcGVyQ2FzZSgpK3Quc2xpY2UoMSk7cmV0dXJue2dldDooKT0+QSxzZXQoSSl7dGhpc1tlXT1JfX19KTtpLmZyZWV6ZU1ldGhvZHMoVik7dmFyIG09VjtmdW5jdGlvbiBJQShBLHQpe2xldCBlPXRoaXN8fFosST10fHxlLHI9bS5mcm9tKEkuaGVhZGVycyksbz1JLmRhdGE7cmV0dXJuIGkuZm9yRWFjaChBLGZ1bmN0aW9uKEMpe289Qy5jYWxsKGUsbyxyLm5vcm1hbGl6ZSgpLHQ/dC5zdGF0dXM6dm9pZCAwKX0pLHIubm9ybWFsaXplKCksb31mdW5jdGlvbiByQShBKXtyZXR1cm4hIShBJiZBLl9fQ0FOQ0VMX18pfWZ1bmN0aW9uIGp0KEEsdCxlKXt1LmNhbGwodGhpcyxBPz8iY2FuY2VsZWQiLHUuRVJSX0NBTkNFTEVELHQsZSksdGhpcy5uYW1lPSJDYW5jZWxlZEVycm9yIn1pLmluaGVyaXRzKGp0LHUse19fQ0FOQ0VMX186ITB9KTt2YXIgYj1qdDtmdW5jdGlvbiBvQShBLHQsZSl7bGV0IEk9ZS5jb25maWcudmFsaWRhdGVTdGF0dXM7IWUuc3RhdHVzfHwhSXx8SShlLnN0YXR1cyk/QShlKTp0KG5ldyB1KCJSZXF1ZXN0IGZhaWxlZCB3aXRoIHN0YXR1cyBjb2RlICIrZS5zdGF0dXMsW3UuRVJSX0JBRF9SRVFVRVNULHUuRVJSX0JBRF9SRVNQT05TRV1bTWF0aC5mbG9vcihlLnN0YXR1cy8xMDApLTRdLGUuY29uZmlnLGUucmVxdWVzdCxlKSl9ZnVuY3Rpb24gekEoQSl7bGV0IHQ9L14oWy0rXFx3XXsxLDI1fSkoOj9cXC9cXC98OikvLmV4ZWMoQSk7cmV0dXJuIHQmJnRbMV18fCIifWZ1bmN0aW9uIHFJKEEsdCl7QT1BfHwxMDtsZXQgZT1uZXcgQXJyYXkoQSksST1uZXcgQXJyYXkoQSkscj0wLG89MCxnO3JldHVybiB0PXQhPT12b2lkIDA/dDoxZTMsZnVuY3Rpb24oUSl7bGV0IGE9RGF0ZS5ub3coKSxuPUlbb107Z3x8KGc9YSksZVtyXT1RLElbcl09YTtsZXQgcz1vLGY9MDtmb3IoO3MhPT1yOylmKz1lW3MrK10scz1zJUE7aWYocj0ocisxKSVBLHI9PT1vJiYobz0obysxKSVBKSxhLWc8dClyZXR1cm47bGV0IEI9biYmYS1uO3JldHVybiBCP01hdGgucm91bmQoZioxZTMvQik6dm9pZCAwfX12YXIgV3Q9cUk7ZnVuY3Rpb24gTUkoQSx0KXtsZXQgZT0wLEk9MWUzL3QscixvLGc9KGEsbj1EYXRlLm5vdygpKT0+e2U9bixyPW51bGwsbyYmKGNsZWFyVGltZW91dChvKSxvPW51bGwpLEEuYXBwbHkobnVsbCxhKX07cmV0dXJuWyguLi5hKT0+e2xldCBuPURhdGUubm93KCkscz1uLWU7cz49ST9nKGEsbik6KHI9YSxvfHwobz1zZXRUaW1lb3V0KCgpPT57bz1udWxsLGcocil9LEktcykpKX0sKCk9PnImJmcocildfXZhciBadD1NSTt2YXIgXz0oQSx0LGU9Myk9PntsZXQgST0wLHI9V3QoNTAsMjUwKTtyZXR1cm4gWnQobz0+e2xldCBnPW8ubG9hZGVkLEM9by5sZW5ndGhDb21wdXRhYmxlP28udG90YWw6dm9pZCAwLFE9Zy1JLGE9cihRKSxuPWc8PUM7ST1nO2xldCBzPXtsb2FkZWQ6Zyx0b3RhbDpDLHByb2dyZXNzOkM/Zy9DOnZvaWQgMCxieXRlczpRLHJhdGU6YXx8dm9pZCAwLGVzdGltYXRlZDphJiZDJiZuPyhDLWcpL2E6dm9pZCAwLGV2ZW50Om8sbGVuZ3RoQ29tcHV0YWJsZTpDIT1udWxsLFt0PyJkb3dubG9hZCI6InVwbG9hZCJdOiEwfTtBKHMpfSxlKX0sdkE9KEEsdCk9PntsZXQgZT1BIT1udWxsO3JldHVybltJPT50WzBdKHtsZW5ndGhDb21wdXRhYmxlOmUsdG90YWw6QSxsb2FkZWQ6SX0pLHRbMV1dfSwkQT1BPT4oLi4udCk9PmkuYXNhcCgoKT0+QSguLi50KSk7dmFyIFZ0PXcuaGFzU3RhbmRhcmRCcm93c2VyRW52P2Z1bmN0aW9uKCl7bGV0IHQ9Lyhtc2llfHRyaWRlbnQpL2kudGVzdChuYXZpZ2F0b3IudXNlckFnZW50KSxlPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImEiKSxJO2Z1bmN0aW9uIHIobyl7bGV0IGc9bztyZXR1cm4gdCYmKGUuc2V0QXR0cmlidXRlKCJocmVmIixnKSxnPWUuaHJlZiksZS5zZXRBdHRyaWJ1dGUoImhyZWYiLGcpLHtocmVmOmUuaHJlZixwcm90b2NvbDplLnByb3RvY29sP2UucHJvdG9jb2wucmVwbGFjZSgvOiQvLCIiKToiIixob3N0OmUuaG9zdCxzZWFyY2g6ZS5zZWFyY2g/ZS5zZWFyY2gucmVwbGFjZSgvXlxcPy8sIiIpOiIiLGhhc2g6ZS5oYXNoP2UuaGFzaC5yZXBsYWNlKC9eJTIzLywiIik6IiIsaG9zdG5hbWU6ZS5ob3N0bmFtZSxwb3J0OmUucG9ydCxwYXRobmFtZTplLnBhdGhuYW1lLmNoYXJBdCgwKT09PSIvIj9lLnBhdGhuYW1lOiIvIitlLnBhdGhuYW1lfX1yZXR1cm4gST1yKHdpbmRvdy5sb2NhdGlvbi5ocmVmKSxmdW5jdGlvbihnKXtsZXQgQz1pLmlzU3RyaW5nKGcpP3IoZyk6ZztyZXR1cm4gQy5wcm90b2NvbD09PUkucHJvdG9jb2wmJkMuaG9zdD09PUkuaG9zdH19KCk6ZnVuY3Rpb24oKXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4hMH19KCk7dmFyIF90PXcuaGFzU3RhbmRhcmRCcm93c2VyRW52P3t3cml0ZShBLHQsZSxJLHIsbyl7bGV0IGc9W0ErIj0iK2VuY29kZVVSSUNvbXBvbmVudCh0KV07aS5pc051bWJlcihlKSYmZy5wdXNoKCJleHBpcmVzPSIrbmV3IERhdGUoZSkudG9HTVRTdHJpbmcoKSksaS5pc1N0cmluZyhJKSYmZy5wdXNoKCJwYXRoPSIrSSksaS5pc1N0cmluZyhyKSYmZy5wdXNoKCJkb21haW49IityKSxvPT09ITAmJmcucHVzaCgic2VjdXJlIiksZG9jdW1lbnQuY29va2llPWcuam9pbigiOyAiKX0scmVhZChBKXtsZXQgdD1kb2N1bWVudC5jb29raWUubWF0Y2gobmV3IFJlZ0V4cCgiKF58O1xcXFxzKikoIitBKyIpPShbXjtdKikiKSk7cmV0dXJuIHQ/ZGVjb2RlVVJJQ29tcG9uZW50KHRbM10pOm51bGx9LHJlbW92ZShBKXt0aGlzLndyaXRlKEEsIiIsRGF0ZS5ub3coKS04NjRlNSl9fTp7d3JpdGUoKXt9LHJlYWQoKXtyZXR1cm4gbnVsbH0scmVtb3ZlKCl7fX07ZnVuY3Rpb24gQXQoQSl7cmV0dXJuL14oW2Etel1bYS16XFxkK1xcLS5dKjopP1xcL1xcLy9pLnRlc3QoQSl9ZnVuY3Rpb24gdHQoQSx0KXtyZXR1cm4gdD9BLnJlcGxhY2UoL1xcLz9cXC8kLywiIikrIi8iK3QucmVwbGFjZSgvXlxcLysvLCIiKTpBfWZ1bmN0aW9uIGdBKEEsdCl7cmV0dXJuIEEmJiFBdCh0KT90dChBLHQpOnR9dmFyIFh0PUE9PkEgaW5zdGFuY2VvZiBtP3suLi5BfTpBO2Z1bmN0aW9uIGsoQSx0KXt0PXR8fHt9O2xldCBlPXt9O2Z1bmN0aW9uIEkoYSxuLHMpe3JldHVybiBpLmlzUGxhaW5PYmplY3QoYSkmJmkuaXNQbGFpbk9iamVjdChuKT9pLm1lcmdlLmNhbGwoe2Nhc2VsZXNzOnN9LGEsbik6aS5pc1BsYWluT2JqZWN0KG4pP2kubWVyZ2Uoe30sbik6aS5pc0FycmF5KG4pP24uc2xpY2UoKTpufWZ1bmN0aW9uIHIoYSxuLHMpe2lmKGkuaXNVbmRlZmluZWQobikpe2lmKCFpLmlzVW5kZWZpbmVkKGEpKXJldHVybiBJKHZvaWQgMCxhLHMpfWVsc2UgcmV0dXJuIEkoYSxuLHMpfWZ1bmN0aW9uIG8oYSxuKXtpZighaS5pc1VuZGVmaW5lZChuKSlyZXR1cm4gSSh2b2lkIDAsbil9ZnVuY3Rpb24gZyhhLG4pe2lmKGkuaXNVbmRlZmluZWQobikpe2lmKCFpLmlzVW5kZWZpbmVkKGEpKXJldHVybiBJKHZvaWQgMCxhKX1lbHNlIHJldHVybiBJKHZvaWQgMCxuKX1mdW5jdGlvbiBDKGEsbixzKXtpZihzIGluIHQpcmV0dXJuIEkoYSxuKTtpZihzIGluIEEpcmV0dXJuIEkodm9pZCAwLGEpfWxldCBRPXt1cmw6byxtZXRob2Q6byxkYXRhOm8sYmFzZVVSTDpnLHRyYW5zZm9ybVJlcXVlc3Q6Zyx0cmFuc2Zvcm1SZXNwb25zZTpnLHBhcmFtc1NlcmlhbGl6ZXI6Zyx0aW1lb3V0OmcsdGltZW91dE1lc3NhZ2U6Zyx3aXRoQ3JlZGVudGlhbHM6Zyx3aXRoWFNSRlRva2VuOmcsYWRhcHRlcjpnLHJlc3BvbnNlVHlwZTpnLHhzcmZDb29raWVOYW1lOmcseHNyZkhlYWRlck5hbWU6ZyxvblVwbG9hZFByb2dyZXNzOmcsb25Eb3dubG9hZFByb2dyZXNzOmcsZGVjb21wcmVzczpnLG1heENvbnRlbnRMZW5ndGg6ZyxtYXhCb2R5TGVuZ3RoOmcsYmVmb3JlUmVkaXJlY3Q6Zyx0cmFuc3BvcnQ6ZyxodHRwQWdlbnQ6ZyxodHRwc0FnZW50OmcsY2FuY2VsVG9rZW46Zyxzb2NrZXRQYXRoOmcscmVzcG9uc2VFbmNvZGluZzpnLHZhbGlkYXRlU3RhdHVzOkMsaGVhZGVyczooYSxuKT0+cihYdChhKSxYdChuKSwhMCl9O3JldHVybiBpLmZvckVhY2goT2JqZWN0LmtleXMoT2JqZWN0LmFzc2lnbih7fSxBLHQpKSxmdW5jdGlvbihuKXtsZXQgcz1RW25dfHxyLGY9cyhBW25dLHRbbl0sbik7aS5pc1VuZGVmaW5lZChmKSYmcyE9PUN8fChlW25dPWYpfSksZX12YXIgU0E9QT0+e2xldCB0PWsoe30sQSkse2RhdGE6ZSx3aXRoWFNSRlRva2VuOkkseHNyZkhlYWRlck5hbWU6cix4c3JmQ29va2llTmFtZTpvLGhlYWRlcnM6ZyxhdXRoOkN9PXQ7dC5oZWFkZXJzPWc9bS5mcm9tKGcpLHQudXJsPXRBKGdBKHQuYmFzZVVSTCx0LnVybCksQS5wYXJhbXMsQS5wYXJhbXNTZXJpYWxpemVyKSxDJiZnLnNldCgiQXV0aG9yaXphdGlvbiIsIkJhc2ljICIrYnRvYSgoQy51c2VybmFtZXx8IiIpKyI6IisoQy5wYXNzd29yZD91bmVzY2FwZShlbmNvZGVVUklDb21wb25lbnQoQy5wYXNzd29yZCkpOiIiKSkpO2xldCBRO2lmKGkuaXNGb3JtRGF0YShlKSl7aWYody5oYXNTdGFuZGFyZEJyb3dzZXJFbnZ8fHcuaGFzU3RhbmRhcmRCcm93c2VyV2ViV29ya2VyRW52KWcuc2V0Q29udGVudFR5cGUodm9pZCAwKTtlbHNlIGlmKChRPWcuZ2V0Q29udGVudFR5cGUoKSkhPT0hMSl7bGV0W2EsLi4ubl09UT9RLnNwbGl0KCI7IikubWFwKHM9PnMudHJpbSgpKS5maWx0ZXIoQm9vbGVhbik6W107Zy5zZXRDb250ZW50VHlwZShbYXx8Im11bHRpcGFydC9mb3JtLWRhdGEiLC4uLm5dLmpvaW4oIjsgIikpfX1pZih3Lmhhc1N0YW5kYXJkQnJvd3NlckVudiYmKEkmJmkuaXNGdW5jdGlvbihJKSYmKEk9SSh0KSksSXx8SSE9PSExJiZWdCh0LnVybCkpKXtsZXQgYT1yJiZvJiZfdC5yZWFkKG8pO2EmJmcuc2V0KHIsYSl9cmV0dXJuIHR9O3ZhciBUST10eXBlb2YgWE1MSHR0cFJlcXVlc3Q8InUiLHp0PVRJJiZmdW5jdGlvbihBKXtyZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24oZSxJKXtsZXQgcj1TQShBKSxvPXIuZGF0YSxnPW0uZnJvbShyLmhlYWRlcnMpLm5vcm1hbGl6ZSgpLHtyZXNwb25zZVR5cGU6QyxvblVwbG9hZFByb2dyZXNzOlEsb25Eb3dubG9hZFByb2dyZXNzOmF9PXIsbixzLGYsQixFO2Z1bmN0aW9uIGwoKXtCJiZCKCksRSYmRSgpLHIuY2FuY2VsVG9rZW4mJnIuY2FuY2VsVG9rZW4udW5zdWJzY3JpYmUobiksci5zaWduYWwmJnIuc2lnbmFsLnJlbW92ZUV2ZW50TGlzdGVuZXIoImFib3J0IixuKX1sZXQgYz1uZXcgWE1MSHR0cFJlcXVlc3Q7Yy5vcGVuKHIubWV0aG9kLnRvVXBwZXJDYXNlKCksci51cmwsITApLGMudGltZW91dD1yLnRpbWVvdXQ7ZnVuY3Rpb24gcCgpe2lmKCFjKXJldHVybjtsZXQgRD1tLmZyb20oImdldEFsbFJlc3BvbnNlSGVhZGVycyJpbiBjJiZjLmdldEFsbFJlc3BvbnNlSGVhZGVycygpKSxLPXtkYXRhOiFDfHxDPT09InRleHQifHxDPT09Impzb24iP2MucmVzcG9uc2VUZXh0OmMucmVzcG9uc2Usc3RhdHVzOmMuc3RhdHVzLHN0YXR1c1RleHQ6Yy5zdGF0dXNUZXh0LGhlYWRlcnM6RCxjb25maWc6QSxyZXF1ZXN0OmN9O29BKGZ1bmN0aW9uKEope2UoSiksbCgpfSxmdW5jdGlvbihKKXtJKEopLGwoKX0sSyksYz1udWxsfSJvbmxvYWRlbmQiaW4gYz9jLm9ubG9hZGVuZD1wOmMub25yZWFkeXN0YXRlY2hhbmdlPWZ1bmN0aW9uKCl7IWN8fGMucmVhZHlTdGF0ZSE9PTR8fGMuc3RhdHVzPT09MCYmIShjLnJlc3BvbnNlVVJMJiZjLnJlc3BvbnNlVVJMLmluZGV4T2YoImZpbGU6Iik9PT0wKXx8c2V0VGltZW91dChwKX0sYy5vbmFib3J0PWZ1bmN0aW9uKCl7YyYmKEkobmV3IHUoIlJlcXVlc3QgYWJvcnRlZCIsdS5FQ09OTkFCT1JURUQsQSxjKSksYz1udWxsKX0sYy5vbmVycm9yPWZ1bmN0aW9uKCl7SShuZXcgdSgiTmV0d29yayBFcnJvciIsdS5FUlJfTkVUV09SSyxBLGMpKSxjPW51bGx9LGMub250aW1lb3V0PWZ1bmN0aW9uKCl7bGV0IFU9ci50aW1lb3V0PyJ0aW1lb3V0IG9mICIrci50aW1lb3V0KyJtcyBleGNlZWRlZCI6InRpbWVvdXQgZXhjZWVkZWQiLEs9ci50cmFuc2l0aW9uYWx8fG1BO3IudGltZW91dEVycm9yTWVzc2FnZSYmKFU9ci50aW1lb3V0RXJyb3JNZXNzYWdlKSxJKG5ldyB1KFUsSy5jbGFyaWZ5VGltZW91dEVycm9yP3UuRVRJTUVET1VUOnUuRUNPTk5BQk9SVEVELEEsYykpLGM9bnVsbH0sbz09PXZvaWQgMCYmZy5zZXRDb250ZW50VHlwZShudWxsKSwic2V0UmVxdWVzdEhlYWRlciJpbiBjJiZpLmZvckVhY2goZy50b0pTT04oKSxmdW5jdGlvbihVLEspe2Muc2V0UmVxdWVzdEhlYWRlcihLLFUpfSksaS5pc1VuZGVmaW5lZChyLndpdGhDcmVkZW50aWFscyl8fChjLndpdGhDcmVkZW50aWFscz0hIXIud2l0aENyZWRlbnRpYWxzKSxDJiZDIT09Impzb24iJiYoYy5yZXNwb25zZVR5cGU9ci5yZXNwb25zZVR5cGUpLGEmJihbZixFXT1fKGEsITApLGMuYWRkRXZlbnRMaXN0ZW5lcigicHJvZ3Jlc3MiLGYpKSxRJiZjLnVwbG9hZCYmKFtzLEJdPV8oUSksYy51cGxvYWQuYWRkRXZlbnRMaXN0ZW5lcigicHJvZ3Jlc3MiLHMpLGMudXBsb2FkLmFkZEV2ZW50TGlzdGVuZXIoImxvYWRlbmQiLEIpKSwoci5jYW5jZWxUb2tlbnx8ci5zaWduYWwpJiYobj1EPT57YyYmKEkoIUR8fEQudHlwZT9uZXcgYihudWxsLEEsYyk6RCksYy5hYm9ydCgpLGM9bnVsbCl9LHIuY2FuY2VsVG9rZW4mJnIuY2FuY2VsVG9rZW4uc3Vic2NyaWJlKG4pLHIuc2lnbmFsJiYoci5zaWduYWwuYWJvcnRlZD9uKCk6ci5zaWduYWwuYWRkRXZlbnRMaXN0ZW5lcigiYWJvcnQiLG4pKSk7bGV0IFM9ekEoci51cmwpO2lmKFMmJncucHJvdG9jb2xzLmluZGV4T2YoUyk9PT0tMSl7SShuZXcgdSgiVW5zdXBwb3J0ZWQgcHJvdG9jb2wgIitTKyI6Iix1LkVSUl9CQURfUkVRVUVTVCxBKSk7cmV0dXJufWMuc2VuZChvfHxudWxsKX0pfTt2YXIgS0k9KEEsdCk9PntsZXQgZT1uZXcgQWJvcnRDb250cm9sbGVyLEkscj1mdW5jdGlvbihRKXtpZighSSl7ST0hMCxnKCk7bGV0IGE9USBpbnN0YW5jZW9mIEVycm9yP1E6dGhpcy5yZWFzb247ZS5hYm9ydChhIGluc3RhbmNlb2YgdT9hOm5ldyBiKGEgaW5zdGFuY2VvZiBFcnJvcj9hLm1lc3NhZ2U6YSkpfX0sbz10JiZzZXRUaW1lb3V0KCgpPT57cihuZXcgdShgdGltZW91dCAke3R9IG9mIG1zIGV4Y2VlZGVkYCx1LkVUSU1FRE9VVCkpfSx0KSxnPSgpPT57QSYmKG8mJmNsZWFyVGltZW91dChvKSxvPW51bGwsQS5mb3JFYWNoKFE9PntRJiYoUS5yZW1vdmVFdmVudExpc3RlbmVyP1EucmVtb3ZlRXZlbnRMaXN0ZW5lcigiYWJvcnQiLHIpOlEudW5zdWJzY3JpYmUocikpfSksQT1udWxsKX07QS5mb3JFYWNoKFE9PlEmJlEuYWRkRXZlbnRMaXN0ZW5lciYmUS5hZGRFdmVudExpc3RlbmVyKCJhYm9ydCIscikpO2xldHtzaWduYWw6Q309ZTtyZXR1cm4gQy51bnN1YnNjcmliZT1nLFtDLCgpPT57byYmY2xlYXJUaW1lb3V0KG8pLG89bnVsbH1dfSx2dD1LSTt2YXIgT0k9ZnVuY3Rpb24qKEEsdCl7bGV0IGU9QS5ieXRlTGVuZ3RoO2lmKCF0fHxlPHQpe3lpZWxkIEE7cmV0dXJufWxldCBJPTAscjtmb3IoO0k8ZTspcj1JK3QseWllbGQgQS5zbGljZShJLHIpLEk9cn0seEk9YXN5bmMgZnVuY3Rpb24qKEEsdCxlKXtmb3IgYXdhaXQobGV0IEkgb2YgQSl5aWVsZCpPSShBcnJheUJ1ZmZlci5pc1ZpZXcoSSk/STphd2FpdCBlKFN0cmluZyhJKSksdCl9LGV0PShBLHQsZSxJLHIpPT57bGV0IG89eEkoQSx0LHIpLGc9MCxDLFE9YT0+e0N8fChDPSEwLEkmJkkoYSkpfTtyZXR1cm4gbmV3IFJlYWRhYmxlU3RyZWFtKHthc3luYyBwdWxsKGEpe3RyeXtsZXR7ZG9uZTpuLHZhbHVlOnN9PWF3YWl0IG8ubmV4dCgpO2lmKG4pe1EoKSxhLmNsb3NlKCk7cmV0dXJufWxldCBmPXMuYnl0ZUxlbmd0aDtpZihlKXtsZXQgQj1nKz1mO2UoQil9YS5lbnF1ZXVlKG5ldyBVaW50OEFycmF5KHMpKX1jYXRjaChuKXt0aHJvdyBRKG4pLG59fSxjYW5jZWwoYSl7cmV0dXJuIFEoYSksby5yZXR1cm4oKX19LHtoaWdoV2F0ZXJNYXJrOjJ9KX07dmFyIFJBPXR5cGVvZiBmZXRjaD09ImZ1bmN0aW9uIiYmdHlwZW9mIFJlcXVlc3Q9PSJmdW5jdGlvbiImJnR5cGVvZiBSZXNwb25zZT09ImZ1bmN0aW9uIixBZT1SQSYmdHlwZW9mIFJlYWRhYmxlU3RyZWFtPT0iZnVuY3Rpb24iLEl0PVJBJiYodHlwZW9mIFRleHRFbmNvZGVyPT0iZnVuY3Rpb24iPyhBPT50PT5BLmVuY29kZSh0KSkobmV3IFRleHRFbmNvZGVyKTphc3luYyBBPT5uZXcgVWludDhBcnJheShhd2FpdCBuZXcgUmVzcG9uc2UoQSkuYXJyYXlCdWZmZXIoKSkpLHRlPShBLC4uLnQpPT57dHJ5e3JldHVybiEhQSguLi50KX1jYXRjaHtyZXR1cm4hMX19LFBJPUFlJiZ0ZSgoKT0+e2xldCBBPSExLHQ9bmV3IFJlcXVlc3Qody5vcmlnaW4se2JvZHk6bmV3IFJlYWRhYmxlU3RyZWFtLG1ldGhvZDoiUE9TVCIsZ2V0IGR1cGxleCgpe3JldHVybiBBPSEwLCJoYWxmIn19KS5oZWFkZXJzLmhhcygiQ29udGVudC1UeXBlIik7cmV0dXJuIEEmJiF0fSksJHQ9NjQqMTAyNCxydD1BZSYmdGUoKCk9PmkuaXNSZWFkYWJsZVN0cmVhbShuZXcgUmVzcG9uc2UoIiIpLmJvZHkpKSxGQT17c3RyZWFtOnJ0JiYoQT0+QS5ib2R5KX07UkEmJihBPT57WyJ0ZXh0IiwiYXJyYXlCdWZmZXIiLCJibG9iIiwiZm9ybURhdGEiLCJzdHJlYW0iXS5mb3JFYWNoKHQ9PnshRkFbdF0mJihGQVt0XT1pLmlzRnVuY3Rpb24oQVt0XSk/ZT0+ZVt0XSgpOihlLEkpPT57dGhyb3cgbmV3IHUoYFJlc3BvbnNlIHR5cGUgXCcke3R9XCcgaXMgbm90IHN1cHBvcnRlZGAsdS5FUlJfTk9UX1NVUFBPUlQsSSl9KX0pfSkobmV3IFJlc3BvbnNlKTt2YXIgakk9YXN5bmMgQT0+e2lmKEE9PW51bGwpcmV0dXJuIDA7aWYoaS5pc0Jsb2IoQSkpcmV0dXJuIEEuc2l6ZTtpZihpLmlzU3BlY0NvbXBsaWFudEZvcm0oQSkpcmV0dXJuKGF3YWl0IG5ldyBSZXF1ZXN0KEEpLmFycmF5QnVmZmVyKCkpLmJ5dGVMZW5ndGg7aWYoaS5pc0FycmF5QnVmZmVyVmlldyhBKXx8aS5pc0FycmF5QnVmZmVyKEEpKXJldHVybiBBLmJ5dGVMZW5ndGg7aWYoaS5pc1VSTFNlYXJjaFBhcmFtcyhBKSYmKEE9QSsiIiksaS5pc1N0cmluZyhBKSlyZXR1cm4oYXdhaXQgSXQoQSkpLmJ5dGVMZW5ndGh9LFdJPWFzeW5jKEEsdCk9PntsZXQgZT1pLnRvRmluaXRlTnVtYmVyKEEuZ2V0Q29udGVudExlbmd0aCgpKTtyZXR1cm4gZT8/akkodCl9LGVlPVJBJiYoYXN5bmMgQT0+e2xldHt1cmw6dCxtZXRob2Q6ZSxkYXRhOkksc2lnbmFsOnIsY2FuY2VsVG9rZW46byx0aW1lb3V0Omcsb25Eb3dubG9hZFByb2dyZXNzOkMsb25VcGxvYWRQcm9ncmVzczpRLHJlc3BvbnNlVHlwZTphLGhlYWRlcnM6bix3aXRoQ3JlZGVudGlhbHM6cz0ic2FtZS1vcmlnaW4iLGZldGNoT3B0aW9uczpmfT1TQShBKTthPWE/KGErIiIpLnRvTG93ZXJDYXNlKCk6InRleHQiO2xldFtCLEVdPXJ8fG98fGc/dnQoW3Isb10sZyk6W10sbCxjLHA9KCk9PnshbCYmc2V0VGltZW91dCgoKT0+e0ImJkIudW5zdWJzY3JpYmUoKX0pLGw9ITB9LFM7dHJ5e2lmKFEmJlBJJiZlIT09ImdldCImJmUhPT0iaGVhZCImJihTPWF3YWl0IFdJKG4sSSkpIT09MCl7bGV0IEw9bmV3IFJlcXVlc3QodCx7bWV0aG9kOiJQT1NUIixib2R5OkksZHVwbGV4OiJoYWxmIn0pLEo7aWYoaS5pc0Zvcm1EYXRhKEkpJiYoSj1MLmhlYWRlcnMuZ2V0KCJjb250ZW50LXR5cGUiKSkmJm4uc2V0Q29udGVudFR5cGUoSiksTC5ib2R5KXtsZXRbSEEsQ0FdPXZBKFMsXygkQShRKSkpO0k9ZXQoTC5ib2R5LCR0LEhBLENBLEl0KX19aS5pc1N0cmluZyhzKXx8KHM9cz8iaW5jbHVkZSI6Im9taXQiKSxjPW5ldyBSZXF1ZXN0KHQsey4uLmYsc2lnbmFsOkIsbWV0aG9kOmUudG9VcHBlckNhc2UoKSxoZWFkZXJzOm4ubm9ybWFsaXplKCkudG9KU09OKCksYm9keTpJLGR1cGxleDoiaGFsZiIsY3JlZGVudGlhbHM6c30pO2xldCBEPWF3YWl0IGZldGNoKGMpLFU9cnQmJihhPT09InN0cmVhbSJ8fGE9PT0icmVzcG9uc2UiKTtpZihydCYmKEN8fFUpKXtsZXQgTD17fTtbInN0YXR1cyIsInN0YXR1c1RleHQiLCJoZWFkZXJzIl0uZm9yRWFjaChFdD0+e0xbRXRdPURbRXRdfSk7bGV0IEo9aS50b0Zpbml0ZU51bWJlcihELmhlYWRlcnMuZ2V0KCJjb250ZW50LWxlbmd0aCIpKSxbSEEsQ0FdPUMmJnZBKEosXygkQShDKSwhMCkpfHxbXTtEPW5ldyBSZXNwb25zZShldChELmJvZHksJHQsSEEsKCk9PntDQSYmQ0EoKSxVJiZwKCl9LEl0KSxMKX1hPWF8fCJ0ZXh0IjtsZXQgSz1hd2FpdCBGQVtpLmZpbmRLZXkoRkEsYSl8fCJ0ZXh0Il0oRCxBKTtyZXR1cm4hVSYmcCgpLEUmJkUoKSxhd2FpdCBuZXcgUHJvbWlzZSgoTCxKKT0+e29BKEwsSix7ZGF0YTpLLGhlYWRlcnM6bS5mcm9tKEQuaGVhZGVycyksc3RhdHVzOkQuc3RhdHVzLHN0YXR1c1RleHQ6RC5zdGF0dXNUZXh0LGNvbmZpZzpBLHJlcXVlc3Q6Y30pfSl9Y2F0Y2goRCl7dGhyb3cgcCgpLEQmJkQubmFtZT09PSJUeXBlRXJyb3IiJiYvZmV0Y2gvaS50ZXN0KEQubWVzc2FnZSk/T2JqZWN0LmFzc2lnbihuZXcgdSgiTmV0d29yayBFcnJvciIsdS5FUlJfTkVUV09SSyxBLGMpLHtjYXVzZTpELmNhdXNlfHxEfSk6dS5mcm9tKEQsRCYmRC5jb2RlLEEsYyl9fSk7dmFyIG90PXtodHRwOmRBLHhocjp6dCxmZXRjaDplZX07aS5mb3JFYWNoKG90LChBLHQpPT57aWYoQSl7dHJ5e09iamVjdC5kZWZpbmVQcm9wZXJ0eShBLCJuYW1lIix7dmFsdWU6dH0pfWNhdGNoe31PYmplY3QuZGVmaW5lUHJvcGVydHkoQSwiYWRhcHRlck5hbWUiLHt2YWx1ZTp0fSl9fSk7dmFyIEllPUE9PmAtICR7QX1gLFpJPUE9PmkuaXNGdW5jdGlvbihBKXx8QT09PW51bGx8fEE9PT0hMSxOQT17Z2V0QWRhcHRlcjpBPT57QT1pLmlzQXJyYXkoQSk/QTpbQV07bGV0e2xlbmd0aDp0fT1BLGUsSSxyPXt9O2ZvcihsZXQgbz0wO288dDtvKyspe2U9QVtvXTtsZXQgZztpZihJPWUsIVpJKGUpJiYoST1vdFsoZz1TdHJpbmcoZSkpLnRvTG93ZXJDYXNlKCldLEk9PT12b2lkIDApKXRocm93IG5ldyB1KGBVbmtub3duIGFkYXB0ZXIgXCcke2d9XCdgKTtpZihJKWJyZWFrO3JbZ3x8IiUyMyIrb109SX1pZighSSl7bGV0IG89T2JqZWN0LmVudHJpZXMocikubWFwKChbQyxRXSk9PmBhZGFwdGVyICR7Q30gYCsoUT09PSExPyJpcyBub3Qgc3VwcG9ydGVkIGJ5IHRoZSBlbnZpcm9ubWVudCI6ImlzIG5vdCBhdmFpbGFibGUgaW4gdGhlIGJ1aWxkIikpLGc9dD9vLmxlbmd0aD4xP2BzaW5jZSA6JTBBYCtvLm1hcChJZSkuam9pbihgJTBBYCk6IiAiK0llKG9bMF0pOiJhcyBubyBhZGFwdGVyIHNwZWNpZmllZCI7dGhyb3cgbmV3IHUoIlRoZXJlIGlzIG5vIHN1aXRhYmxlIGFkYXB0ZXIgdG8gZGlzcGF0Y2ggdGhlIHJlcXVlc3QgIitnLCJFUlJfTk9UX1NVUFBPUlQiKX1yZXR1cm4gSX0sYWRhcHRlcnM6b3R9O2Z1bmN0aW9uIGd0KEEpe2lmKEEuY2FuY2VsVG9rZW4mJkEuY2FuY2VsVG9rZW4udGhyb3dJZlJlcXVlc3RlZCgpLEEuc2lnbmFsJiZBLnNpZ25hbC5hYm9ydGVkKXRocm93IG5ldyBiKG51bGwsQSl9ZnVuY3Rpb24gVUEoQSl7cmV0dXJuIGd0KEEpLEEuaGVhZGVycz1tLmZyb20oQS5oZWFkZXJzKSxBLmRhdGE9SUEuY2FsbChBLEEudHJhbnNmb3JtUmVxdWVzdCksWyJwb3N0IiwicHV0IiwicGF0Y2giXS5pbmRleE9mKEEubWV0aG9kKSE9PS0xJiZBLmhlYWRlcnMuc2V0Q29udGVudFR5cGUoImFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCIsITEpLE5BLmdldEFkYXB0ZXIoQS5hZGFwdGVyfHxaLmFkYXB0ZXIpKEEpLnRoZW4oZnVuY3Rpb24oSSl7cmV0dXJuIGd0KEEpLEkuZGF0YT1JQS5jYWxsKEEsQS50cmFuc2Zvcm1SZXNwb25zZSxJKSxJLmhlYWRlcnM9bS5mcm9tKEkuaGVhZGVycyksSX0sZnVuY3Rpb24oSSl7cmV0dXJuIHJBKEkpfHwoZ3QoQSksSSYmSS5yZXNwb25zZSYmKEkucmVzcG9uc2UuZGF0YT1JQS5jYWxsKEEsQS50cmFuc2Zvcm1SZXNwb25zZSxJLnJlc3BvbnNlKSxJLnJlc3BvbnNlLmhlYWRlcnM9bS5mcm9tKEkucmVzcG9uc2UuaGVhZGVycykpKSxQcm9taXNlLnJlamVjdChJKX0pfXZhciBHQT0iMS43LjQiO3ZhciBpdD17fTtbIm9iamVjdCIsImJvb2xlYW4iLCJudW1iZXIiLCJmdW5jdGlvbiIsInN0cmluZyIsInN5bWJvbCJdLmZvckVhY2goKEEsdCk9PntpdFtBXT1mdW5jdGlvbihJKXtyZXR1cm4gdHlwZW9mIEk9PT1BfHwiYSIrKHQ8MT8ibiAiOiIgIikrQX19KTt2YXIgcmU9e307aXQudHJhbnNpdGlvbmFsPWZ1bmN0aW9uKHQsZSxJKXtmdW5jdGlvbiByKG8sZyl7cmV0dXJuIltBeGlvcyB2IitHQSsiXSBUcmFuc2l0aW9uYWwgb3B0aW9uIFwnIitvKyJcJyIrZysoST8iLiAiK0k6IiIpfXJldHVybihvLGcsQyk9PntpZih0PT09ITEpdGhyb3cgbmV3IHUocihnLCIgaGFzIGJlZW4gcmVtb3ZlZCIrKGU/IiBpbiAiK2U6IiIpKSx1LkVSUl9ERVBSRUNBVEVEKTtyZXR1cm4gZSYmIXJlW2ddJiYocmVbZ109ITAsY29uc29sZS53YXJuKHIoZywiIGhhcyBiZWVuIGRlcHJlY2F0ZWQgc2luY2UgdiIrZSsiIGFuZCB3aWxsIGJlIHJlbW92ZWQgaW4gdGhlIG5lYXIgZnV0dXJlIikpKSx0P3QobyxnLEMpOiEwfX07ZnVuY3Rpb24gVkkoQSx0LGUpe2lmKHR5cGVvZiBBIT0ib2JqZWN0Iil0aHJvdyBuZXcgdSgib3B0aW9ucyBtdXN0IGJlIGFuIG9iamVjdCIsdS5FUlJfQkFEX09QVElPTl9WQUxVRSk7bGV0IEk9T2JqZWN0LmtleXMoQSkscj1JLmxlbmd0aDtmb3IoO3ItLSA+MDspe2xldCBvPUlbcl0sZz10W29dO2lmKGcpe2xldCBDPUFbb10sUT1DPT09dm9pZCAwfHxnKEMsbyxBKTtpZihRIT09ITApdGhyb3cgbmV3IHUoIm9wdGlvbiAiK28rIiBtdXN0IGJlICIrUSx1LkVSUl9CQURfT1BUSU9OX1ZBTFVFKTtjb250aW51ZX1pZihlIT09ITApdGhyb3cgbmV3IHUoIlVua25vd24gb3B0aW9uICIrbyx1LkVSUl9CQURfT1BUSU9OKX19dmFyIGtBPXthc3NlcnRPcHRpb25zOlZJLHZhbGlkYXRvcnM6aXR9O3ZhciBNPWtBLnZhbGlkYXRvcnMsWD1jbGFzc3tjb25zdHJ1Y3Rvcih0KXt0aGlzLmRlZmF1bHRzPXQsdGhpcy5pbnRlcmNlcHRvcnM9e3JlcXVlc3Q6bmV3IGpBLHJlc3BvbnNlOm5ldyBqQX19YXN5bmMgcmVxdWVzdCh0LGUpe3RyeXtyZXR1cm4gYXdhaXQgdGhpcy5fcmVxdWVzdCh0LGUpfWNhdGNoKEkpe2lmKEkgaW5zdGFuY2VvZiBFcnJvcil7bGV0IHI7RXJyb3IuY2FwdHVyZVN0YWNrVHJhY2U/RXJyb3IuY2FwdHVyZVN0YWNrVHJhY2Uocj17fSk6cj1uZXcgRXJyb3I7bGV0IG89ci5zdGFjaz9yLnN0YWNrLnJlcGxhY2UoL14uK1xcbi8sIiIpOiIiO3RyeXtJLnN0YWNrP28mJiFTdHJpbmcoSS5zdGFjaykuZW5kc1dpdGgoby5yZXBsYWNlKC9eLitcXG4uK1xcbi8sIiIpKSYmKEkuc3RhY2srPWAlMEFgK28pOkkuc3RhY2s9b31jYXRjaHt9fXRocm93IEl9fV9yZXF1ZXN0KHQsZSl7dHlwZW9mIHQ9PSJzdHJpbmciPyhlPWV8fHt9LGUudXJsPXQpOmU9dHx8e30sZT1rKHRoaXMuZGVmYXVsdHMsZSk7bGV0e3RyYW5zaXRpb25hbDpJLHBhcmFtc1NlcmlhbGl6ZXI6cixoZWFkZXJzOm99PWU7SSE9PXZvaWQgMCYma0EuYXNzZXJ0T3B0aW9ucyhJLHtzaWxlbnRKU09OUGFyc2luZzpNLnRyYW5zaXRpb25hbChNLmJvb2xlYW4pLGZvcmNlZEpTT05QYXJzaW5nOk0udHJhbnNpdGlvbmFsKE0uYm9vbGVhbiksY2xhcmlmeVRpbWVvdXRFcnJvcjpNLnRyYW5zaXRpb25hbChNLmJvb2xlYW4pfSwhMSksciE9bnVsbCYmKGkuaXNGdW5jdGlvbihyKT9lLnBhcmFtc1NlcmlhbGl6ZXI9e3NlcmlhbGl6ZTpyfTprQS5hc3NlcnRPcHRpb25zKHIse2VuY29kZTpNLmZ1bmN0aW9uLHNlcmlhbGl6ZTpNLmZ1bmN0aW9ufSwhMCkpLGUubWV0aG9kPShlLm1ldGhvZHx8dGhpcy5kZWZhdWx0cy5tZXRob2R8fCJnZXQiKS50b0xvd2VyQ2FzZSgpO2xldCBnPW8mJmkubWVyZ2Uoby5jb21tb24sb1tlLm1ldGhvZF0pO28mJmkuZm9yRWFjaChbImRlbGV0ZSIsImdldCIsImhlYWQiLCJwb3N0IiwicHV0IiwicGF0Y2giLCJjb21tb24iXSxFPT57ZGVsZXRlIG9bRV19KSxlLmhlYWRlcnM9bS5jb25jYXQoZyxvKTtsZXQgQz1bXSxRPSEwO3RoaXMuaW50ZXJjZXB0b3JzLnJlcXVlc3QuZm9yRWFjaChmdW5jdGlvbihsKXt0eXBlb2YgbC5ydW5XaGVuPT0iZnVuY3Rpb24iJiZsLnJ1bldoZW4oZSk9PT0hMXx8KFE9USYmbC5zeW5jaHJvbm91cyxDLnVuc2hpZnQobC5mdWxmaWxsZWQsbC5yZWplY3RlZCkpfSk7bGV0IGE9W107dGhpcy5pbnRlcmNlcHRvcnMucmVzcG9uc2UuZm9yRWFjaChmdW5jdGlvbihsKXthLnB1c2gobC5mdWxmaWxsZWQsbC5yZWplY3RlZCl9KTtsZXQgbixzPTAsZjtpZighUSl7bGV0IEU9W1VBLmJpbmQodGhpcyksdm9pZCAwXTtmb3IoRS51bnNoaWZ0LmFwcGx5KEUsQyksRS5wdXNoLmFwcGx5KEUsYSksZj1FLmxlbmd0aCxuPVByb21pc2UucmVzb2x2ZShlKTtzPGY7KW49bi50aGVuKEVbcysrXSxFW3MrK10pO3JldHVybiBufWY9Qy5sZW5ndGg7bGV0IEI9ZTtmb3Iocz0wO3M8Zjspe2xldCBFPUNbcysrXSxsPUNbcysrXTt0cnl7Qj1FKEIpfWNhdGNoKGMpe2wuY2FsbCh0aGlzLGMpO2JyZWFrfX10cnl7bj1VQS5jYWxsKHRoaXMsQil9Y2F0Y2goRSl7cmV0dXJuIFByb21pc2UucmVqZWN0KEUpfWZvcihzPTAsZj1hLmxlbmd0aDtzPGY7KW49bi50aGVuKGFbcysrXSxhW3MrK10pO3JldHVybiBufWdldFVyaSh0KXt0PWsodGhpcy5kZWZhdWx0cyx0KTtsZXQgZT1nQSh0LmJhc2VVUkwsdC51cmwpO3JldHVybiB0QShlLHQucGFyYW1zLHQucGFyYW1zU2VyaWFsaXplcil9fTtpLmZvckVhY2goWyJkZWxldGUiLCJnZXQiLCJoZWFkIiwib3B0aW9ucyJdLGZ1bmN0aW9uKHQpe1gucHJvdG90eXBlW3RdPWZ1bmN0aW9uKGUsSSl7cmV0dXJuIHRoaXMucmVxdWVzdChrKEl8fHt9LHttZXRob2Q6dCx1cmw6ZSxkYXRhOihJfHx7fSkuZGF0YX0pKX19KTtpLmZvckVhY2goWyJwb3N0IiwicHV0IiwicGF0Y2giXSxmdW5jdGlvbih0KXtmdW5jdGlvbiBlKEkpe3JldHVybiBmdW5jdGlvbihvLGcsQyl7cmV0dXJuIHRoaXMucmVxdWVzdChrKEN8fHt9LHttZXRob2Q6dCxoZWFkZXJzOkk/eyJDb250ZW50LVR5cGUiOiJtdWx0aXBhcnQvZm9ybS1kYXRhIn06e30sdXJsOm8sZGF0YTpnfSkpfX1YLnByb3RvdHlwZVt0XT1lKCksWC5wcm90b3R5cGVbdCsiRm9ybSJdPWUoITApfSk7dmFyIGlBPVg7dmFyIG50PWNsYXNzIEF7Y29uc3RydWN0b3IodCl7aWYodHlwZW9mIHQhPSJmdW5jdGlvbiIpdGhyb3cgbmV3IFR5cGVFcnJvcigiZXhlY3V0b3IgbXVzdCBiZSBhIGZ1bmN0aW9uLiIpO2xldCBlO3RoaXMucHJvbWlzZT1uZXcgUHJvbWlzZShmdW5jdGlvbihvKXtlPW99KTtsZXQgST10aGlzO3RoaXMucHJvbWlzZS50aGVuKHI9PntpZighSS5fbGlzdGVuZXJzKXJldHVybjtsZXQgbz1JLl9saXN0ZW5lcnMubGVuZ3RoO2Zvcig7by0tID4wOylJLl9saXN0ZW5lcnNbb10ocik7SS5fbGlzdGVuZXJzPW51bGx9KSx0aGlzLnByb21pc2UudGhlbj1yPT57bGV0IG8sZz1uZXcgUHJvbWlzZShDPT57SS5zdWJzY3JpYmUoQyksbz1DfSkudGhlbihyKTtyZXR1cm4gZy5jYW5jZWw9ZnVuY3Rpb24oKXtJLnVuc3Vic2NyaWJlKG8pfSxnfSx0KGZ1bmN0aW9uKG8sZyxDKXtJLnJlYXNvbnx8KEkucmVhc29uPW5ldyBiKG8sZyxDKSxlKEkucmVhc29uKSl9KX10aHJvd0lmUmVxdWVzdGVkKCl7aWYodGhpcy5yZWFzb24pdGhyb3cgdGhpcy5yZWFzb259c3Vic2NyaWJlKHQpe2lmKHRoaXMucmVhc29uKXt0KHRoaXMucmVhc29uKTtyZXR1cm59dGhpcy5fbGlzdGVuZXJzP3RoaXMuX2xpc3RlbmVycy5wdXNoKHQpOnRoaXMuX2xpc3RlbmVycz1bdF19dW5zdWJzY3JpYmUodCl7aWYoIXRoaXMuX2xpc3RlbmVycylyZXR1cm47bGV0IGU9dGhpcy5fbGlzdGVuZXJzLmluZGV4T2YodCk7ZSE9PS0xJiZ0aGlzLl9saXN0ZW5lcnMuc3BsaWNlKGUsMSl9c3RhdGljIHNvdXJjZSgpe2xldCB0O3JldHVybnt0b2tlbjpuZXcgQShmdW5jdGlvbihyKXt0PXJ9KSxjYW5jZWw6dH19fSxvZT1udDtmdW5jdGlvbiBzdChBKXtyZXR1cm4gZnVuY3Rpb24oZSl7cmV0dXJuIEEuYXBwbHkobnVsbCxlKX19ZnVuY3Rpb24gQ3QoQSl7cmV0dXJuIGkuaXNPYmplY3QoQSkmJkEuaXNBeGlvc0Vycm9yPT09ITB9dmFyIEJ0PXtDb250aW51ZToxMDAsU3dpdGNoaW5nUHJvdG9jb2xzOjEwMSxQcm9jZXNzaW5nOjEwMixFYXJseUhpbnRzOjEwMyxPazoyMDAsQ3JlYXRlZDoyMDEsQWNjZXB0ZWQ6MjAyLE5vbkF1dGhvcml0YXRpdmVJbmZvcm1hdGlvbjoyMDMsTm9Db250ZW50OjIwNCxSZXNldENvbnRlbnQ6MjA1LFBhcnRpYWxDb250ZW50OjIwNixNdWx0aVN0YXR1czoyMDcsQWxyZWFkeVJlcG9ydGVkOjIwOCxJbVVzZWQ6MjI2LE11bHRpcGxlQ2hvaWNlczozMDAsTW92ZWRQZXJtYW5lbnRseTozMDEsRm91bmQ6MzAyLFNlZU90aGVyOjMwMyxOb3RNb2RpZmllZDozMDQsVXNlUHJveHk6MzA1LFVudXNlZDozMDYsVGVtcG9yYXJ5UmVkaXJlY3Q6MzA3LFBlcm1hbmVudFJlZGlyZWN0OjMwOCxCYWRSZXF1ZXN0OjQwMCxVbmF1dGhvcml6ZWQ6NDAxLFBheW1lbnRSZXF1aXJlZDo0MDIsRm9yYmlkZGVuOjQwMyxOb3RGb3VuZDo0MDQsTWV0aG9kTm90QWxsb3dlZDo0MDUsTm90QWNjZXB0YWJsZTo0MDYsUHJveHlBdXRoZW50aWNhdGlvblJlcXVpcmVkOjQwNyxSZXF1ZXN0VGltZW91dDo0MDgsQ29uZmxpY3Q6NDA5LEdvbmU6NDEwLExlbmd0aFJlcXVpcmVkOjQxMSxQcmVjb25kaXRpb25GYWlsZWQ6NDEyLFBheWxvYWRUb29MYXJnZTo0MTMsVXJpVG9vTG9uZzo0MTQsVW5zdXBwb3J0ZWRNZWRpYVR5cGU6NDE1LFJhbmdlTm90U2F0aXNmaWFibGU6NDE2LEV4cGVjdGF0aW9uRmFpbGVkOjQxNyxJbUFUZWFwb3Q6NDE4LE1pc2RpcmVjdGVkUmVxdWVzdDo0MjEsVW5wcm9jZXNzYWJsZUVudGl0eTo0MjIsTG9ja2VkOjQyMyxGYWlsZWREZXBlbmRlbmN5OjQyNCxUb29FYXJseTo0MjUsVXBncmFkZVJlcXVpcmVkOjQyNixQcmVjb25kaXRpb25SZXF1aXJlZDo0MjgsVG9vTWFueVJlcXVlc3RzOjQyOSxSZXF1ZXN0SGVhZGVyRmllbGRzVG9vTGFyZ2U6NDMxLFVuYXZhaWxhYmxlRm9yTGVnYWxSZWFzb25zOjQ1MSxJbnRlcm5hbFNlcnZlckVycm9yOjUwMCxOb3RJbXBsZW1lbnRlZDo1MDEsQmFkR2F0ZXdheTo1MDIsU2VydmljZVVuYXZhaWxhYmxlOjUwMyxHYXRld2F5VGltZW91dDo1MDQsSHR0cFZlcnNpb25Ob3RTdXBwb3J0ZWQ6NTA1LFZhcmlhbnRBbHNvTmVnb3RpYXRlczo1MDYsSW5zdWZmaWNpZW50U3RvcmFnZTo1MDcsTG9vcERldGVjdGVkOjUwOCxOb3RFeHRlbmRlZDo1MTAsTmV0d29ya0F1dGhlbnRpY2F0aW9uUmVxdWlyZWQ6NTExfTtPYmplY3QuZW50cmllcyhCdCkuZm9yRWFjaCgoW0EsdF0pPT57QnRbdF09QX0pO3ZhciBnZT1CdDtmdW5jdGlvbiBpZShBKXtsZXQgdD1uZXcgaUEoQSksZT12KGlBLnByb3RvdHlwZS5yZXF1ZXN0LHQpO3JldHVybiBpLmV4dGVuZChlLGlBLnByb3RvdHlwZSx0LHthbGxPd25LZXlzOiEwfSksaS5leHRlbmQoZSx0LG51bGwse2FsbE93bktleXM6ITB9KSxlLmNyZWF0ZT1mdW5jdGlvbihyKXtyZXR1cm4gaWUoayhBLHIpKX0sZX12YXIgZD1pZShaKTtkLkF4aW9zPWlBO2QuQ2FuY2VsZWRFcnJvcj1iO2QuQ2FuY2VsVG9rZW49b2U7ZC5pc0NhbmNlbD1yQTtkLlZFUlNJT049R0E7ZC50b0Zvcm1EYXRhPXE7ZC5BeGlvc0Vycm9yPXU7ZC5DYW5jZWw9ZC5DYW5jZWxlZEVycm9yO2QuYWxsPWZ1bmN0aW9uKHQpe3JldHVybiBQcm9taXNlLmFsbCh0KX07ZC5zcHJlYWQ9c3Q7ZC5pc0F4aW9zRXJyb3I9Q3Q7ZC5tZXJnZUNvbmZpZz1rO2QuQXhpb3NIZWFkZXJzPW07ZC5mb3JtVG9KU09OPUE9PndBKGkuaXNIVE1MRm9ybShBKT9uZXcgRm9ybURhdGEoQSk6QSk7ZC5nZXRBZGFwdGVyPU5BLmdldEFkYXB0ZXI7ZC5IdHRwU3RhdHVzQ29kZT1nZTtkLmRlZmF1bHQ9ZDt2YXIgTEE9ZDt2YXJ7QXhpb3M6RWksQXhpb3NFcnJvcjpjaSxDYW5jZWxlZEVycm9yOmZpLGlzQ2FuY2VsOmxpLENhbmNlbFRva2VuOnVpLFZFUlNJT046RGksYWxsOmhpLENhbmNlbDpkaSxpc0F4aW9zRXJyb3I6eWksc3ByZWFkOm1pLHRvRm9ybURhdGE6d2ksQXhpb3NIZWFkZXJzOnBpLEh0dHBTdGF0dXNDb2RlOlNpLGZvcm1Ub0pTT046RmksZ2V0QWRhcHRlcjpSaSxtZXJnZUNvbmZpZzpOaX09TEE7dmFyIG5BLFksUXQsYXQ9e2Vudjp7ZW1zY3JpcHRlbl9ub3RpZnlfbWVtb3J5X2dyb3d0aDpmdW5jdGlvbihBKXtRdD1uZXcgVWludDhBcnJheShZLmV4cG9ydHMubWVtb3J5LmJ1ZmZlcil9fX0sSkE9Y2xhc3N7aW5pdCgpe3JldHVybiBuQXx8KHR5cGVvZiBmZXRjaDwidSI/bkE9ZmV0Y2goImRhdGE6YXBwbGljYXRpb24vd2FzbTtiYXNlNjQsIituZSkudGhlbih0PT50LmFycmF5QnVmZmVyKCkpLnRoZW4odD0+V2ViQXNzZW1ibHkuaW5zdGFudGlhdGUodCxhdCkpLnRoZW4odGhpcy5faW5pdCk6bkE9V2ViQXNzZW1ibHkuaW5zdGFudGlhdGUoQnVmZmVyLmZyb20obmUsImJhc2U2NCIpLGF0KS50aGVuKHRoaXMuX2luaXQpLG5BKX1faW5pdCh0KXtZPXQuaW5zdGFuY2UsYXQuZW52LmVtc2NyaXB0ZW5fbm90aWZ5X21lbW9yeV9ncm93dGgoMCl9ZGVjb2RlKHQsZT0wKXtpZighWSl0aHJvdyBuZXcgRXJyb3IoIlpTVEREZWNvZGVyOiBBd2FpdCAuaW5pdCgpIGJlZm9yZSBkZWNvZGluZy4iKTtsZXQgST10LmJ5dGVMZW5ndGgscj1ZLmV4cG9ydHMubWFsbG9jKEkpO1F0LnNldCh0LHIpLGU9ZXx8TnVtYmVyKFkuZXhwb3J0cy5aU1REX2ZpbmREZWNvbXByZXNzZWRTaXplKHIsSSkpO2xldCBvPVkuZXhwb3J0cy5tYWxsb2MoZSksZz1ZLmV4cG9ydHMuWlNURF9kZWNvbXByZXNzKG8sZSxyLEkpLEM9UXQuc2xpY2UobyxvK2cpO3JldHVybiBZLmV4cG9ydHMuZnJlZShyKSxZLmV4cG9ydHMuZnJlZShvKSxDfX0sbmU9IkFHRnpiUUVBQUFBQmJnNWdBMzkvZndGL1lBRi9BWDlnQW45L0FHQUJmd0JnQlg5L2YzOS9BWDlnQTM5L2Z3QmdCSDkvZjM4QmYyQUFBWDlnQW45L0FYOWdCMzkvZjM5L2YzOEJmMkFDZjM4QmZtQUlmMzkvZjM5L2YzOEJmMkFGZjM5L2YzOEFZQTUvZjM5L2YzOS9mMzkvZjM5L2Z3Ri9BaWNCQTJWdWRoOWxiWE5qY21sd2RHVnVYMjV2ZEdsbWVWOXRaVzF2Y25sZlozSnZkM1JvQUFNREl5SUhBQUFCQVFNSEF3RUFDUVFBQlFFSUNBRUZCZ1FFQkFNR0FBQUtBQVVMREEwR0JBVUJjQUVCQVFVSEFRR0FBb0NBQWdZSUFYOEJRWUNqQkFzSHJnRUxCbTFsYlc5eWVRSUFCbTFoYkd4dll3QUZCR1p5WldVQUJneGFVMVJFWDJselJYSnliM0lBRWhsYVUxUkVYMlpwYm1SRVpXTnZiWEJ5WlhOelpXUlRhWHBsQUJ3UFdsTlVSRjlrWldOdmJYQnlaWE56QUNJWlgxOXBibVJwY21WamRGOW1kVzVqZEdsdmJsOTBZV0pzWlFFQUVGOWZaWEp5Ym05ZmJHOWpZWFJwYjI0QUFRbHpkR0ZqYTFOaGRtVUFCd3h6ZEdGamExSmxjM1J2Y21VQUNBcHpkR0ZqYTBGc2JHOWpBQWtLaS9JQklnVUFRWVFmQ3pNQkFYOGdBZ1JBSUFBaEF3TkFJQU1nQVMwQUFEb0FBQ0FEUVFGcUlRTWdBVUVCYWlFQklBSkJBV3NpQWcwQUN3c2dBQXNwQVFGL0lBSUVRQ0FBSVFNRFFDQURJQUU2QUFBZ0EwRUJhaUVESUFKQkFXc2lBZzBBQ3dzZ0FBdHNBUUovUVlBZktBSUFJZ0VnQUVFSGFrRjRjU0lDYWlFQUFrQWdBa0VBSUFBZ0FVMGJEUUFnQUQ4QVFSQjBTd1JBSUFBL0FFRVFkR3RCLy84RGFrRVFka0FBUVg5R0JIOUJBQVZCQUJBQVFRRUxSUTBCQzBHQUh5QUFOZ0lBSUFFUEMwR0VIMEV3TmdJQVFYOEx1U2NCQzM4akFFRVFheUlLSkFBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUlBQkI5QUZOQkVCQmlCOG9BZ0FpQmtFUUlBQkJDMnBCZUhFZ0FFRUxTUnNpQlVFRGRpSUFkaUlCUVFOeEJFQUNRQ0FCUVg5elFRRnhJQUJxSWdKQkEzUWlBVUd3SDJvaUFDQUJRYmdmYWlnQ0FDSUJLQUlJSWdSR0JFQkJpQjhnQmtGK0lBSjNjVFlDQUF3QkN5QUVJQUEyQWd3Z0FDQUVOZ0lJQ3lBQlFRaHFJUUFnQVNBQ1FRTjBJZ0pCQTNJMkFnUWdBU0FDYWlJQklBRW9BZ1JCQVhJMkFnUU1Ed3NnQlVHUUh5Z0NBQ0lIVFEwQklBRUVRQUpBUVFJZ0FIUWlBa0VBSUFKcmNpQUJJQUIwY1dnaUFVRURkQ0lBUWJBZmFpSUNJQUJCdUI5cUtBSUFJZ0FvQWdnaUJFWUVRRUdJSHlBR1FYNGdBWGR4SWdZMkFnQU1BUXNnQkNBQ05nSU1JQUlnQkRZQ0NBc2dBQ0FGUVFOeU5nSUVJQUFnQldvaUNDQUJRUU4wSWdFZ0JXc2lCRUVCY2pZQ0JDQUFJQUZxSUFRMkFnQWdCd1JBSUFkQmVIRkJzQjlxSVFGQm5COG9BZ0FoQWdKL0lBWkJBU0FIUVFOMmRDSURjVVVFUUVHSUh5QURJQVp5TmdJQUlBRU1BUXNnQVNnQ0NBc2hBeUFCSUFJMkFnZ2dBeUFDTmdJTUlBSWdBVFlDRENBQ0lBTTJBZ2dMSUFCQkNHb2hBRUdjSHlBSU5nSUFRWkFmSUFRMkFnQU1Ed3RCakI4b0FnQWlDMFVOQVNBTGFFRUNkRUc0SVdvb0FnQWlBaWdDQkVGNGNTQUZheUVESUFJaEFRTkFBa0FnQVNnQ0VDSUFSUVJBSUFFb0FoUWlBRVVOQVFzZ0FDZ0NCRUY0Y1NBRmF5SUJJQU1nQVNBRFNTSUJHeUVESUFBZ0FpQUJHeUVDSUFBaEFRd0JDd3NnQWlnQ0dDRUpJQUlnQWlnQ0RDSUVSd1JBUVpnZktBSUFHaUFDS0FJSUlnQWdCRFlDRENBRUlBQTJBZ2dNRGdzZ0FrRVVhaUlCS0FJQUlnQkZCRUFnQWlnQ0VDSUFSUTBESUFKQkVHb2hBUXNEUUNBQklRZ2dBQ0lFUVJScUlnRW9BZ0FpQUEwQUlBUkJFR29oQVNBRUtBSVFJZ0FOQUFzZ0NFRUFOZ0lBREEwTFFYOGhCU0FBUWI5L1N3MEFJQUJCQzJvaUFFRjRjU0VGUVl3ZktBSUFJZ2hGRFFCQkFDQUZheUVEQWtBQ1FBSkFBbjlCQUNBRlFZQUNTUTBBR2tFZklBVkIvLy8vQjBzTkFCb2dCVUVtSUFCQkNIWm5JZ0JyZGtFQmNTQUFRUUYwYTBFK2Fnc2lCMEVDZEVHNElXb29BZ0FpQVVVRVFFRUFJUUFNQVF0QkFDRUFJQVZCR1NBSFFRRjJhMEVBSUFkQkgwY2JkQ0VDQTBBQ1FDQUJLQUlFUVhoeElBVnJJZ1lnQTA4TkFDQUJJUVFnQmlJRERRQkJBQ0VESUFFaEFBd0RDeUFBSUFFb0FoUWlCaUFHSUFFZ0FrRWRka0VFY1dvb0FoQWlBVVliSUFBZ0Joc2hBQ0FDUVFGMElRSWdBUTBBQ3dzZ0FDQUVja1VFUUVFQUlRUkJBaUFIZENJQVFRQWdBR3R5SUFoeElnQkZEUU1nQUdoQkFuUkJ1Q0ZxS0FJQUlRQUxJQUJGRFFFTEEwQWdBQ2dDQkVGNGNTQUZheUlDSUFOSklRRWdBaUFESUFFYklRTWdBQ0FFSUFFYklRUWdBQ2dDRUNJQkJIOGdBUVVnQUNnQ0ZBc2lBQTBBQ3dzZ0JFVU5BQ0FEUVpBZktBSUFJQVZyVHcwQUlBUW9BaGdoQnlBRUlBUW9BZ3dpQWtjRVFFR1lIeWdDQUJvZ0JDZ0NDQ0lBSUFJMkFnd2dBaUFBTmdJSURBd0xJQVJCRkdvaUFTZ0NBQ0lBUlFSQUlBUW9BaEFpQUVVTkF5QUVRUkJxSVFFTEEwQWdBU0VHSUFBaUFrRVVhaUlCS0FJQUlnQU5BQ0FDUVJCcUlRRWdBaWdDRUNJQURRQUxJQVpCQURZQ0FBd0xDeUFGUVpBZktBSUFJZ1JOQkVCQm5COG9BZ0FoQUFKQUlBUWdCV3NpQVVFUVR3UkFJQUFnQldvaUFpQUJRUUZ5TmdJRUlBQWdCR29nQVRZQ0FDQUFJQVZCQTNJMkFnUU1BUXNnQUNBRVFRTnlOZ0lFSUFBZ0JHb2lBU0FCS0FJRVFRRnlOZ0lFUVFBaEFrRUFJUUVMUVpBZklBRTJBZ0JCbkI4Z0FqWUNBQ0FBUVFocUlRQU1EUXNnQlVHVUh5Z0NBQ0lDU1FSQVFaUWZJQUlnQldzaUFUWUNBRUdnSDBHZ0h5Z0NBQ0lBSUFWcUlnSTJBZ0FnQWlBQlFRRnlOZ0lFSUFBZ0JVRURjallDQkNBQVFRaHFJUUFNRFF0QkFDRUFJQVZCTDJvaUF3Si9RZUFpS0FJQUJFQkI2Q0lvQWdBTUFRdEI3Q0pDZnpjQ0FFSGtJa0tBb0lDQWdJQUVOd0lBUWVBaUlBcEJER3BCY0hGQjJLclZxZ1Z6TmdJQVFmUWlRUUEyQWdCQnhDSkJBRFlDQUVHQUlBc2lBV29pQmtFQUlBRnJJZ2h4SWdFZ0JVME5ERUhBSWlnQ0FDSUVCRUJCdUNJb0FnQWlCeUFCYWlJSklBZE5JQVFnQ1VseURRMExBa0JCeENJdEFBQkJCSEZGQkVBQ1FBSkFBa0FDUUVHZ0h5Z0NBQ0lFQkVCQnlDSWhBQU5BSUFRZ0FDZ0NBQ0lIVHdSQUlBY2dBQ2dDQkdvZ0JFc05Bd3NnQUNnQ0NDSUFEUUFMQzBFQUVBUWlBa0YvUmcwRElBRWhCa0hrSWlnQ0FDSUFRUUZySWdRZ0FuRUVRQ0FCSUFKcklBSWdCR3BCQUNBQWEzRnFJUVlMSUFVZ0JrOE5BMEhBSWlnQ0FDSUFCRUJCdUNJb0FnQWlCQ0FHYWlJSUlBUk5JQUFnQ0VseURRUUxJQVlRQkNJQUlBSkhEUUVNQlFzZ0JpQUNheUFJY1NJR0VBUWlBaUFBS0FJQUlBQW9BZ1JxUmcwQklBSWhBQXNnQUVGL1JnMEJJQVZCTUdvZ0JrMEVRQ0FBSVFJTUJBdEI2Q0lvQWdBaUFpQURJQVpyYWtFQUlBSnJjU0lDRUFSQmYwWU5BU0FDSUFacUlRWWdBQ0VDREFNTElBSkJmMGNOQWd0QnhDSkJ4Q0lvQWdCQkJISTJBZ0FMSUFFUUJDSUNRWDlHUVFBUUJDSUFRWDlHY2lBQUlBSk5jZzBGSUFBZ0Ftc2lCaUFGUVNocVRRMEZDMEc0SWtHNElpZ0NBQ0FHYWlJQU5nSUFRYndpS0FJQUlBQkpCRUJCdkNJZ0FEWUNBQXNDUUVHZ0h5Z0NBQ0lEQkVCQnlDSWhBQU5BSUFJZ0FDZ0NBQ0lCSUFBb0FnUWlCR3BHRFFJZ0FDZ0NDQ0lBRFFBTERBUUxRWmdmS0FJQUlnQkJBQ0FBSUFKTkcwVUVRRUdZSHlBQ05nSUFDMEVBSVFCQnpDSWdCallDQUVISUlpQUNOZ0lBUWFnZlFYODJBZ0JCckI5QjRDSW9BZ0EyQWdCQjFDSkJBRFlDQUFOQUlBQkJBM1FpQVVHNEgyb2dBVUd3SDJvaUJEWUNBQ0FCUWJ3ZmFpQUVOZ0lBSUFCQkFXb2lBRUVnUncwQUMwR1VIeUFHUVNocklnQkJlQ0FDYTBFSGNTSUJheUlFTmdJQVFhQWZJQUVnQW1vaUFUWUNBQ0FCSUFSQkFYSTJBZ1FnQUNBQ2FrRW9OZ0lFUWFRZlFmQWlLQUlBTmdJQURBUUxJQUlnQTAwZ0FTQURTM0lOQWlBQUtBSU1RUWh4RFFJZ0FDQUVJQVpxTmdJRVFhQWZJQU5CZUNBRGEwRUhjU0lBYWlJQk5nSUFRWlFmUVpRZktBSUFJQVpxSWdJZ0FHc2lBRFlDQUNBQklBQkJBWEkyQWdRZ0FpQURha0VvTmdJRVFhUWZRZkFpS0FJQU5nSUFEQU1MUVFBaEJBd0tDMEVBSVFJTUNBdEJtQjhvQWdBZ0Frc0VRRUdZSHlBQ05nSUFDeUFDSUFacUlRRkJ5Q0loQUFKQUFrQUNRQU5BSUFFZ0FDZ0NBRWNFUUNBQUtBSUlJZ0FOQVF3Q0N3c2dBQzBBREVFSWNVVU5BUXRCeUNJaEFBTkFJQU1nQUNnQ0FDSUJUd1JBSUFFZ0FDZ0NCR29pQkNBRFN3MERDeUFBS0FJSUlRQU1BQXNBQ3lBQUlBSTJBZ0FnQUNBQUtBSUVJQVpxTmdJRUlBSkJlQ0FDYTBFSGNXb2lCeUFGUVFOeU5nSUVJQUZCZUNBQmEwRUhjV29pQmlBRklBZHFJZ1ZySVFBZ0F5QUdSZ1JBUWFBZklBVTJBZ0JCbEI5QmxCOG9BZ0FnQUdvaUFEWUNBQ0FGSUFCQkFYSTJBZ1FNQ0F0Qm5COG9BZ0FnQmtZRVFFR2NIeUFGTmdJQVFaQWZRWkFmS0FJQUlBQnFJZ0EyQWdBZ0JTQUFRUUZ5TmdJRUlBQWdCV29nQURZQ0FBd0lDeUFHS0FJRUlnTkJBM0ZCQVVjTkJpQURRWGh4SVFrZ0EwSC9BVTBFUUNBR0tBSU1JZ0VnQmlnQ0NDSUNSZ1JBUVlnZlFZZ2ZLQUlBUVg0Z0EwRURkbmR4TmdJQURBY0xJQUlnQVRZQ0RDQUJJQUkyQWdnTUJnc2dCaWdDR0NFSUlBWWdCaWdDRENJQ1J3UkFJQVlvQWdnaUFTQUNOZ0lNSUFJZ0FUWUNDQXdGQ3lBR1FSUnFJZ0VvQWdBaUEwVUVRQ0FHS0FJUUlnTkZEUVFnQmtFUWFpRUJDd05BSUFFaEJDQURJZ0pCRkdvaUFTZ0NBQ0lERFFBZ0FrRVFhaUVCSUFJb0FoQWlBdzBBQ3lBRVFRQTJBZ0FNQkF0QmxCOGdCa0VvYXlJQVFYZ2dBbXRCQjNFaUFXc2lDRFlDQUVHZ0h5QUJJQUpxSWdFMkFnQWdBU0FJUVFGeU5nSUVJQUFnQW1wQktEWUNCRUdrSDBId0lpZ0NBRFlDQUNBRElBUkJKeUFFYTBFSGNXcEJMMnNpQUNBQUlBTkJFR3BKR3lJQlFSczJBZ1FnQVVIUUlpa0NBRGNDRUNBQlFjZ2lLUUlBTndJSVFkQWlJQUZCQ0dvMkFnQkJ6Q0lnQmpZQ0FFSElJaUFDTmdJQVFkUWlRUUEyQWdBZ0FVRVlhaUVBQTBBZ0FFRUhOZ0lFSUFCQkNHb2dBRUVFYWlFQUlBUkpEUUFMSUFFZ0EwWU5BQ0FCSUFFb0FnUkJmbkUyQWdRZ0F5QUJJQU5ySWdKQkFYSTJBZ1FnQVNBQ05nSUFJQUpCL3dGTkJFQWdBa0Y0Y1VHd0gyb2hBQUovUVlnZktBSUFJZ0ZCQVNBQ1FRTjJkQ0lDY1VVRVFFR0lIeUFCSUFKeU5nSUFJQUFNQVFzZ0FDZ0NDQXNoQVNBQUlBTTJBZ2dnQVNBRE5nSU1JQU1nQURZQ0RDQURJQUUyQWdnTUFRdEJIeUVBSUFKQi8vLy9CMDBFUUNBQ1FTWWdBa0VJZG1jaUFHdDJRUUZ4SUFCQkFYUnJRVDVxSVFBTElBTWdBRFlDSENBRFFnQTNBaEFnQUVFQ2RFRzRJV29oQVFKQUFrQkJqQjhvQWdBaUJFRUJJQUIwSWdaeFJRUkFRWXdmSUFRZ0JuSTJBZ0FnQVNBRE5nSUFEQUVMSUFKQkdTQUFRUUYyYTBFQUlBQkJIMGNiZENFQUlBRW9BZ0FoQkFOQUlBUWlBU2dDQkVGNGNTQUNSZzBDSUFCQkhYWWhCQ0FBUVFGMElRQWdBU0FFUVFSeGFpSUdLQUlRSWdRTkFBc2dCaUFETmdJUUN5QURJQUUyQWhnZ0F5QUROZ0lNSUFNZ0F6WUNDQXdCQ3lBQktBSUlJZ0FnQXpZQ0RDQUJJQU0yQWdnZ0EwRUFOZ0lZSUFNZ0FUWUNEQ0FESUFBMkFnZ0xRWlFmS0FJQUlnQWdCVTBOQUVHVUh5QUFJQVZySWdFMkFnQkJvQjlCb0I4b0FnQWlBQ0FGYWlJQ05nSUFJQUlnQVVFQmNqWUNCQ0FBSUFWQkEzSTJBZ1FnQUVFSWFpRUFEQWdMUVlRZlFUQTJBZ0JCQUNFQURBY0xRUUFoQWdzZ0NFVU5BQUpBSUFZb0Fod2lBVUVDZEVHNElXb2lCQ2dDQUNBR1JnUkFJQVFnQWpZQ0FDQUNEUUZCakI5QmpCOG9BZ0JCZmlBQmQzRTJBZ0FNQWdzZ0NFRVFRUlFnQ0NnQ0VDQUdSaHRxSUFJMkFnQWdBa1VOQVFzZ0FpQUlOZ0lZSUFZb0FoQWlBUVJBSUFJZ0FUWUNFQ0FCSUFJMkFoZ0xJQVlvQWhRaUFVVU5BQ0FDSUFFMkFoUWdBU0FDTmdJWUN5QUFJQWxxSVFBZ0JpQUphaUlHS0FJRUlRTUxJQVlnQTBGK2NUWUNCQ0FGSUFCQkFYSTJBZ1FnQUNBRmFpQUFOZ0lBSUFCQi93Rk5CRUFnQUVGNGNVR3dIMm9oQVFKL1FZZ2ZLQUlBSWdKQkFTQUFRUU4yZENJQWNVVUVRRUdJSHlBQUlBSnlOZ0lBSUFFTUFRc2dBU2dDQ0FzaEFDQUJJQVUyQWdnZ0FDQUZOZ0lNSUFVZ0FUWUNEQ0FGSUFBMkFnZ01BUXRCSHlFRElBQkIvLy8vQjAwRVFDQUFRU1lnQUVFSWRtY2lBV3QyUVFGeElBRkJBWFJyUVQ1cUlRTUxJQVVnQXpZQ0hDQUZRZ0EzQWhBZ0EwRUNkRUc0SVdvaEFRSkFBa0JCakI4b0FnQWlBa0VCSUFOMElnUnhSUVJBUVl3ZklBSWdCSEkyQWdBZ0FTQUZOZ0lBREFFTElBQkJHU0FEUVFGMmEwRUFJQU5CSDBjYmRDRURJQUVvQWdBaEFnTkFJQUlpQVNnQ0JFRjRjU0FBUmcwQ0lBTkJIWFloQWlBRFFRRjBJUU1nQVNBQ1FRUnhhaUlFS0FJUUlnSU5BQXNnQkNBRk5nSVFDeUFGSUFFMkFoZ2dCU0FGTmdJTUlBVWdCVFlDQ0F3QkN5QUJLQUlJSWdBZ0JUWUNEQ0FCSUFVMkFnZ2dCVUVBTmdJWUlBVWdBVFlDRENBRklBQTJBZ2dMSUFkQkNHb2hBQXdDQ3dKQUlBZEZEUUFDUUNBRUtBSWNJZ0JCQW5SQnVDRnFJZ0VvQWdBZ0JFWUVRQ0FCSUFJMkFnQWdBZzBCUVl3ZklBaEJmaUFBZDNFaUNEWUNBQXdDQ3lBSFFSQkJGQ0FIS0FJUUlBUkdHMm9nQWpZQ0FDQUNSUTBCQ3lBQ0lBYzJBaGdnQkNnQ0VDSUFCRUFnQWlBQU5nSVFJQUFnQWpZQ0dBc2dCQ2dDRkNJQVJRMEFJQUlnQURZQ0ZDQUFJQUkyQWhnTEFrQWdBMEVQVFFSQUlBUWdBeUFGYWlJQVFRTnlOZ0lFSUFBZ0JHb2lBQ0FBS0FJRVFRRnlOZ0lFREFFTElBUWdCVUVEY2pZQ0JDQUVJQVZxSWdJZ0EwRUJjallDQkNBQ0lBTnFJQU0yQWdBZ0EwSC9BVTBFUUNBRFFYaHhRYkFmYWlFQUFuOUJpQjhvQWdBaUFVRUJJQU5CQTNaMElnTnhSUVJBUVlnZklBRWdBM0kyQWdBZ0FBd0JDeUFBS0FJSUN5RUJJQUFnQWpZQ0NDQUJJQUkyQWd3Z0FpQUFOZ0lNSUFJZ0FUWUNDQXdCQzBFZklRQWdBMEgvLy84SFRRUkFJQU5CSmlBRFFRaDJaeUlBYTNaQkFYRWdBRUVCZEd0QlBtb2hBQXNnQWlBQU5nSWNJQUpDQURjQ0VDQUFRUUowUWJnaGFpRUJBa0FDUUNBSVFRRWdBSFFpQm5GRkJFQkJqQjhnQmlBSWNqWUNBQ0FCSUFJMkFnQU1BUXNnQTBFWklBQkJBWFpyUVFBZ0FFRWZSeHQwSVFBZ0FTZ0NBQ0VGQTBBZ0JTSUJLQUlFUVhoeElBTkdEUUlnQUVFZGRpRUdJQUJCQVhRaEFDQUJJQVpCQkhGcUlnWW9BaEFpQlEwQUN5QUdJQUkyQWhBTElBSWdBVFlDR0NBQ0lBSTJBZ3dnQWlBQ05nSUlEQUVMSUFFb0FnZ2lBQ0FDTmdJTUlBRWdBallDQ0NBQ1FRQTJBaGdnQWlBQk5nSU1JQUlnQURZQ0NBc2dCRUVJYWlFQURBRUxBa0FnQ1VVTkFBSkFJQUlvQWh3aUFFRUNkRUc0SVdvaUFTZ0NBQ0FDUmdSQUlBRWdCRFlDQUNBRURRRkJqQjhnQzBGK0lBQjNjVFlDQUF3Q0N5QUpRUkJCRkNBSktBSVFJQUpHRzJvZ0JEWUNBQ0FFUlEwQkN5QUVJQWsyQWhnZ0FpZ0NFQ0lBQkVBZ0JDQUFOZ0lRSUFBZ0JEWUNHQXNnQWlnQ0ZDSUFSUTBBSUFRZ0FEWUNGQ0FBSUFRMkFoZ0xBa0FnQTBFUFRRUkFJQUlnQXlBRmFpSUFRUU55TmdJRUlBQWdBbW9pQUNBQUtBSUVRUUZ5TmdJRURBRUxJQUlnQlVFRGNqWUNCQ0FDSUFWcUlnUWdBMEVCY2pZQ0JDQURJQVJxSUFNMkFnQWdCd1JBSUFkQmVIRkJzQjlxSVFCQm5COG9BZ0FoQVFKL1FRRWdCMEVEZG5RaUJTQUdjVVVFUUVHSUh5QUZJQVp5TmdJQUlBQU1BUXNnQUNnQ0NBc2hCaUFBSUFFMkFnZ2dCaUFCTmdJTUlBRWdBRFlDRENBQklBWTJBZ2dMUVp3ZklBUTJBZ0JCa0I4Z0F6WUNBQXNnQWtFSWFpRUFDeUFLUVJCcUpBQWdBQXZTQ3dFSGZ3SkFJQUJGRFFBZ0FFRUlheUlDSUFCQkJHc29BZ0FpQVVGNGNTSUFhaUVGQWtBZ0FVRUJjUTBBSUFGQkEzRkZEUUVnQWlBQ0tBSUFJZ0ZySWdKQm1COG9BZ0JKRFFFZ0FDQUJhaUVBQWtBQ1FFR2NIeWdDQUNBQ1J3UkFJQUZCL3dGTkJFQWdBVUVEZGlFRUlBSW9BZ3dpQVNBQ0tBSUlJZ05HQkVCQmlCOUJpQjhvQWdCQmZpQUVkM0UyQWdBTUJRc2dBeUFCTmdJTUlBRWdBellDQ0F3RUN5QUNLQUlZSVFZZ0FpQUNLQUlNSWdGSEJFQWdBaWdDQ0NJRElBRTJBZ3dnQVNBRE5nSUlEQU1MSUFKQkZHb2lCQ2dDQUNJRFJRUkFJQUlvQWhBaUEwVU5BaUFDUVJCcUlRUUxBMEFnQkNFSElBTWlBVUVVYWlJRUtBSUFJZ01OQUNBQlFSQnFJUVFnQVNnQ0VDSUREUUFMSUFkQkFEWUNBQXdDQ3lBRktBSUVJZ0ZCQTNGQkEwY05Ba0dRSHlBQU5nSUFJQVVnQVVGK2NUWUNCQ0FDSUFCQkFYSTJBZ1FnQlNBQU5nSUFEd3RCQUNFQkN5QUdSUTBBQWtBZ0FpZ0NIQ0lEUVFKMFFiZ2hhaUlFS0FJQUlBSkdCRUFnQkNBQk5nSUFJQUVOQVVHTUgwR01IeWdDQUVGK0lBTjNjVFlDQUF3Q0N5QUdRUkJCRkNBR0tBSVFJQUpHRzJvZ0FUWUNBQ0FCUlEwQkN5QUJJQVkyQWhnZ0FpZ0NFQ0lEQkVBZ0FTQUROZ0lRSUFNZ0FUWUNHQXNnQWlnQ0ZDSURSUTBBSUFFZ0F6WUNGQ0FESUFFMkFoZ0xJQUlnQlU4TkFDQUZLQUlFSWdGQkFYRkZEUUFDUUFKQUFrQUNRQ0FCUVFKeFJRUkFRYUFmS0FJQUlBVkdCRUJCb0I4Z0FqWUNBRUdVSDBHVUh5Z0NBQ0FBYWlJQU5nSUFJQUlnQUVFQmNqWUNCQ0FDUVp3ZktBSUFSdzBHUVpBZlFRQTJBZ0JCbkI5QkFEWUNBQThMUVp3ZktBSUFJQVZHQkVCQm5COGdBallDQUVHUUgwR1FIeWdDQUNBQWFpSUFOZ0lBSUFJZ0FFRUJjallDQkNBQUlBSnFJQUEyQWdBUEN5QUJRWGh4SUFCcUlRQWdBVUgvQVUwRVFDQUJRUU4ySVFRZ0JTZ0NEQ0lCSUFVb0FnZ2lBMFlFUUVHSUgwR0lIeWdDQUVGK0lBUjNjVFlDQUF3RkN5QURJQUUyQWd3Z0FTQUROZ0lJREFRTElBVW9BaGdoQmlBRklBVW9BZ3dpQVVjRVFFR1lIeWdDQUJvZ0JTZ0NDQ0lESUFFMkFnd2dBU0FETmdJSURBTUxJQVZCRkdvaUJDZ0NBQ0lEUlFSQUlBVW9BaEFpQTBVTkFpQUZRUkJxSVFRTEEwQWdCQ0VISUFNaUFVRVVhaUlFS0FJQUlnTU5BQ0FCUVJCcUlRUWdBU2dDRUNJRERRQUxJQWRCQURZQ0FBd0NDeUFGSUFGQmZuRTJBZ1FnQWlBQVFRRnlOZ0lFSUFBZ0Ftb2dBRFlDQUF3REMwRUFJUUVMSUFaRkRRQUNRQ0FGS0FJY0lnTkJBblJCdUNGcUlnUW9BZ0FnQlVZRVFDQUVJQUUyQWdBZ0FRMEJRWXdmUVl3ZktBSUFRWDRnQTNkeE5nSUFEQUlMSUFaQkVFRVVJQVlvQWhBZ0JVWWJhaUFCTmdJQUlBRkZEUUVMSUFFZ0JqWUNHQ0FGS0FJUUlnTUVRQ0FCSUFNMkFoQWdBeUFCTmdJWUN5QUZLQUlVSWdORkRRQWdBU0FETmdJVUlBTWdBVFlDR0FzZ0FpQUFRUUZ5TmdJRUlBQWdBbW9nQURZQ0FDQUNRWndmS0FJQVJ3MEFRWkFmSUFBMkFnQVBDeUFBUWY4QlRRUkFJQUJCZUhGQnNCOXFJUUVDZjBHSUh5Z0NBQ0lEUVFFZ0FFRURkblFpQUhGRkJFQkJpQjhnQUNBRGNqWUNBQ0FCREFFTElBRW9BZ2dMSVFBZ0FTQUNOZ0lJSUFBZ0FqWUNEQ0FDSUFFMkFnd2dBaUFBTmdJSUR3dEJIeUVESUFCQi8vLy9CMDBFUUNBQVFTWWdBRUVJZG1jaUFXdDJRUUZ4SUFGQkFYUnJRVDVxSVFNTElBSWdBellDSENBQ1FnQTNBaEFnQTBFQ2RFRzRJV29oQVFKQUFrQUNRRUdNSHlnQ0FDSUVRUUVnQTNRaUIzRkZCRUJCakI4Z0JDQUhjallDQUNBQklBSTJBZ0FnQWlBQk5nSVlEQUVMSUFCQkdTQURRUUYyYTBFQUlBTkJIMGNiZENFRElBRW9BZ0FoQVFOQUlBRWlCQ2dDQkVGNGNTQUFSZzBDSUFOQkhYWWhBU0FEUVFGMElRTWdCQ0FCUVFSeGFpSUhRUkJxS0FJQUlnRU5BQXNnQnlBQ05nSVFJQUlnQkRZQ0dBc2dBaUFDTmdJTUlBSWdBallDQ0F3QkN5QUVLQUlJSWdBZ0FqWUNEQ0FFSUFJMkFnZ2dBa0VBTmdJWUlBSWdCRFlDRENBQ0lBQTJBZ2dMUWFnZlFhZ2ZLQUlBUVFGcklnQkJmeUFBR3pZQ0FBc0xCQUFqQUFzR0FDQUFKQUFMRUFBakFDQUFhMEZ3Y1NJQUpBQWdBQXRLQVFGL0lBQWdBVWtFUUNBQUlBRWdBaEFDRHdzZ0FnUkFJQUFnQW1vaEF5QUJJQUpxSVFFRFFDQURRUUZySWdNZ0FVRUJheUlCTFFBQU9nQUFJQUpCQVdzaUFnMEFDd3NnQUF2OURnSVJmd0YrSXdCQk1Hc2lCeVFBUWJoL0lRZ0NRQ0FGUlEwQUlBUXNBQUFpQ1VIL0FYRWhDd0pBSUFsQkFFZ0VRQ0FMUWY0QWEwRUJkaUlHSUFWUERRSkJiQ0VJSUF0Qi93QnJJZ3RCL3dGTERRSWdCRUVCYWlFSVFRQWhCUU5BSUFVZ0MwOEVRQ0FMSVFnZ0JpRUxEQU1GSUFBZ0JXb2dDQ0FGUVFGMmFpSUVMUUFBUVFSMk9nQUFJQUFnQlVFQmNtb2dCQzBBQUVFUGNUb0FBQ0FGUVFKcUlRVU1BUXNBQ3dBTElBVWdDMDBOQVNBSFFmOEJOZ0lFSUFZZ0IwRUVhaUFIUVFocUlBUkJBV29pRGlBTEVBd2lCRUdJZjBzRVFDQUVJUWdNQWd0QlZDRUlJQWNvQWdnaUVFRUdTdzBCSUFjb0FnUWlFVUVCZENJSlFRSnFyVUlCSUJDdGhpSVlRUUVnRUhRaURVRUJhaUlGclVJQ2hueDhRZ3Q4UXZ6Ly8vLy8vLy8vL3dDRFF1UUNWZzBCUVZJaENDQVJRZjhCU3cwQklBMUJmM05CQW5SQjVBSnFyU0FSUVFGcUloVkJBWFN0SUJoOFFnaDhWQTBCSUFzZ0JHc2hGaUFFSUE1cUlSY2dCa0dBQkdvaUVpQUZRUUowYWlJUklBbHFRUUpxSVE0Z0JrR0VCR29oRTBHQWdBSWdFSFJCRUhZaENVRUFJUVZCQVNFUElBMUJBV3NpRkNFS0EwQWdCU0FWUmtVRVFBSkFJQVlnQlVFQmRDSUlhaThCQUNJRVFmLy9BMFlFUUNBVElBcEJBblJxSUFVNkFBSWdDa0VCYXlFS1FRRWhCQXdCQ3lBUFFRQWdDU0FFd1VvYklROExJQWdnRVdvZ0JEc0JBQ0FGUVFGcUlRVU1BUXNMSUFZZ0R6c0JnZ1FnQmlBUU93R0FCQUpBSUFvZ0ZFWUVRQ0FOUVFOMklRaENBQ0VZUVFBaER3TkFJQXdnRlVZRVFDQUlJQTFCQVhacVFRTnFJZ2xCQVhRaENFRUFJUVJCQUNFS0EwQkJBQ0VGSUFvZ0RVOE5CQU5BSUFWQkFrWkZCRUFnRXlBRklBbHNJQVJxSUJSeFFRSjBhaUFPSUFVZ0NtcHFMUUFBT2dBQ0lBVkJBV29oQlF3QkN3c2dDa0VDYWlFS0lBUWdDR29nRkhFaEJBd0FDd0FGSUFZZ0RFRUJkR291QVFBaENTQU9JQTlxSWdRZ0dEY0FBRUVJSVFVRFFDQUZJQWxPUlFSQUlBUWdCV29nR0RjQUFDQUZRUWhxSVFVTUFRc0xJQmhDZ1lLRWlKQ2d3SUFCZkNFWUlBeEJBV29oRENBSklBOXFJUThNQVFzQUN3QUxJQTFCQTNZZ0RVRUJkbXBCQTJvaENFRUFJUVVEUUNBTUlCVkdSUVJBUVFBaENTQUdJQXhCQVhScUxnRUFJZ1JCQUNBRVFRQktHeUVFQTBBZ0JDQUpSa1VFUUNBVElBVkJBblJxSUF3NkFBSURRQ0FGSUFocUlCUnhJZ1VnQ2tzTkFBc2dDVUVCYWlFSkRBRUxDeUFNUVFGcUlRd01BUXNMUVg4aENDQUZEUUlMSUJCQkFXb2hDRUVBSVFVRFFDQUZJQTFHUlFSQUlCRWdFeUFGUVFKMGFpSU9MUUFDUVFGMGFpSUVJQVF2QVFBaUNVRUJhanNCQUNBT0lBZ2dDV2RCWUhOcUlnUTZBQU1nRGlBSklBUjBJQTFyT3dFQUlBVkJBV29oQlF3QkN3c0NRQUpBSUFZdkFZSUVCRUFnQjBFY2FpSUVJQmNnRmhBTklnaEJpSDlMRFFJZ0IwRVVhaUFFSUJJUURpQUhRUXhxSUFRZ0VoQU9RUUFoQlFOQUlBZEJIR29pQkJBUElBVkIrd0ZMY2cwQ0lBQWdCV29pQmlBSFFSUnFJQVFRRURvQUFDQUdJQWRCREdvZ0JCQVFPZ0FCSUFWQkFuSWhCQ0FIUVJ4cUVBOEVRQ0FFSVFVTUF3VWdBQ0FFYWlBSFFSUnFJQWRCSEdvaUJCQVFPZ0FBSUFZZ0IwRU1haUFFRUJBNkFBTWdCVUVFYWlFRkRBRUxBQXNBQ3lBSFFSeHFJZ1FnRnlBV0VBMGlDRUdJZjBzTkFTQUhRUlJxSUFRZ0VoQU9JQWRCREdvZ0JDQVNFQTVCQUNFRkEwQWdCMEVjYWlJRUVBOGdCVUg3QVV0eVJRUkFJQUFnQldvaUJpQUhRUlJxSUFRUUVUb0FBQ0FHSUFkQkRHb2dCQkFST2dBQklBVkJBbkloQkNBSFFSeHFFQThFUUNBRUlRVUZJQUFnQkdvZ0IwRVVhaUFIUVJ4cUlnUVFFVG9BQUNBR0lBZEJER29nQkJBUk9nQURJQVZCQkdvaEJRd0NDd3NMQW44RFFFRzZmeUVJSUFWQi9RRkxEUU1nQUNBRmFpSUdJQWRCRkdvZ0IwRWNhaUlKRUJFNkFBQWdCa0VCYWlFRUlBa1FEMEVEUmdSQUlBZEJER29oQ0VFQ0RBSUxJQVZCL0FGTERRTWdCaUFIUVF4cUlBZEJIR29pQkJBUk9nQUJJQVZCQW1vaEJTQUVFQTlCQTBjTkFBc2dBQ0FGYWlFRUlBZEJGR29oQ0VFREN5QUVJQWdnQjBFY2FoQVJPZ0FBSUFacUlBQnJJUWdNQVFzQ2Z3TkFRYnAvSVFnZ0JVSDlBVXNOQWlBQUlBVnFJZ1lnQjBFVWFpQUhRUnhxSWdrUUVEb0FBQ0FHUVFGcUlRUWdDUkFQUVFOR0JFQWdCMEVNYWlFSVFRSU1BZ3NnQlVIOEFVc05BaUFHSUFkQkRHb2dCMEVjYWlJRUVCQTZBQUVnQlVFQ2FpRUZJQVFRRDBFRFJ3MEFDeUFBSUFWcUlRUWdCMEVVYWlFSVFRTUxJQVFnQ0NBSFFSeHFFQkE2QUFBZ0Jtb2dBR3NoQ0FzZ0NFR0lmMHNOQVFzZ0NDRUVRUUFoQlNBQlFRQkJOQkFESVFsQkFDRUtBMEFnQkNBRlJ3UkFJQUFnQldvaUJpMEFBQ0lCUVF0TEJFQkJiQ0VJREFNRklBa2dBVUVDZEdvaUFTQUJLQUlBUVFGcU5nSUFJQVZCQVdvaEJVRUJJQVl0QUFCMFFRRjFJQXBxSVFvTUFnc0FDd3RCYkNFSUlBcEZEUUFnQ21jaUJVRWZjeUlCUVF0TERRQWdBMEVnSUFWck5nSUFRUUZCQWlBQmRDQUtheUlEWjBFZmN5SUJkQ0FEUncwQUlBQWdCR29nQVVFQmFpSUFPZ0FBSUFrZ0FFRUNkR29pQUNBQUtBSUFRUUZxTmdJQUlBa29BZ1FpQUVFQ1NTQUFRUUZ4Y2cwQUlBSWdCRUVCYWpZQ0FDQUxRUUZxSVFnTElBZEJNR29rQUNBSUM2QUZBUXgvSXdCQkVHc2lEQ1FBQW44Z0JFRUhUUVJBSUF4Q0FEY0RDQ0FNUVFocUlnVWdBeUFFRUFJYVFXd2dBQ0FCSUFJZ0JVRUlFQXdpQUNBQUlBUkxHeUFBSUFCQmlYOUpHd3dCQ3lBQVFRQWdBU2dDQUVFQmFpSU5RUUYwRUFNaEQwRlVJQU1vQUFBaUJrRVBjU0lBUVFwTERRQWFJQUlnQUVFRmFqWUNBQ0FESUFScUlnSkJCR3NoQnlBQ1FRZHJJUXNnQUVFR2FpRU9RUVFoQWlBR1FRUjJJUVZCSUNBQWRDSUlRUUZ5SVFsQkFDRUFRUUVoQmlBRElRUURRQUpBSUFaQkFYRkZCRUFEUUNBRlFYOXpRWUNBZ0lCNGNtZ2lCa0VZU1VVRVFDQUFRU1JxSVFBZ0JDQUxUUVIvSUFSQkEyb0ZJQVFnQzJ0QkEzUWdBbXBCSDNFaEFpQUhDeUlFS0FBQUlBSjJJUVVNQVFzTElBSWdCa0VlY1NJS2FrRUNhaUVDSUFaQkFYWkJBMndnQUdvZ0JTQUtka0VEY1dvaUFDQU5UdzBCQW44Z0JDQUxTeUFDUVFOMklBUnFJZ1VnQjB0eFJRUkFJQUpCQjNFaEFpQUZEQUVMSUFRZ0IydEJBM1FnQW1wQkgzRWhBaUFIQ3lJRUtBQUFJQUoySVFVTElBVWdDRUVCYTNFaUJpQUlRUUYwUVFGcklnb2dDV3NpRUVrRWZ5QU9RUUZyQlNBRklBcHhJZ1VnRUVFQUlBVWdDRTRiYXlFR0lBNExJUVVnRHlBQVFRRjBhaUFHUVFGcklnbzdBUUFnQUVFQmFpRUFJQUlnQldvaEFpQUlRUUVnQm1zZ0NpQUdRUUJLR3lBSmFpSUpTZ1JBSUFsQkFrZ05BVUVnSUFsbklnVnJJUTVCQVNBRlFSOXpkQ0VJQ3lBQUlBMVBEUUFnQ2tFQVJ5RUdBbjhnQkNBTFN5QUNRUU4xSUFScUlnVWdCMHR4UlFSQUlBSkJCM0VoQWlBRkRBRUxJQUlnQkNBSGEwRURkR3BCSDNFaEFpQUhDeUlFS0FBQUlBSjJJUVVNQVFzTFFXd2dDVUVCUncwQUdrRlFJQUFnRFVzTkFCcEJiQ0FDUVNCS0RRQWFJQUVnQUVFQmF6WUNBQ0FFSUFKQkIycEJBM1ZxSUFOckN5QU1RUkJxSkFBTDhnRUJBWDhnQWtVRVFDQUFRZ0EzQWdBZ0FFRUFOZ0lRSUFCQ0FEY0NDRUc0Znc4TElBQWdBVFlDRENBQUlBRkJCR28yQWhBZ0FrRUVUd1JBSUFBZ0FTQUNhaUlCUVFScklnTTJBZ2dnQUNBREtBQUFOZ0lBSUFGQkFXc3RBQUFpQVFSQUlBQWdBV2RCRjJzMkFnUWdBZzhMSUFCQkFEWUNCRUYvRHdzZ0FDQUJOZ0lJSUFBZ0FTMEFBQ0lETmdJQUFrQUNRQUpBSUFKQkFtc09BZ0VBQWdzZ0FDQUJMUUFDUVJCMElBTnlJZ00yQWdBTElBQWdBUzBBQVVFSWRDQURhallDQUFzZ0FTQUNha0VCYXkwQUFDSUJSUVJBSUFCQkFEWUNCRUZzRHdzZ0FDQUJaeUFDUVFOMGEwRUphallDQkNBQ0MwUUJBbjhnQVNBQ0x3RUFJZ01nQVNnQ0JHb2lCRFlDQkNBQUlBTkJBblJCb0IxcUtBSUFJQUVvQWdCQkFDQUVhM1p4TmdJQUlBRVFEeG9nQUNBQ1FRUnFOZ0lFQzU4QkFRUi9RUU1oQVNBQUtBSUVJZ0pCSUUwRVFDQUFLQUlJSWdFZ0FDZ0NFRThFUUNBQUlBSkJCM0UyQWdRZ0FDQUJJQUpCQTNacklnSTJBZ2dnQUNBQ0tBQUFOZ0lBUVFBUEN5QUFLQUlNSWdNZ0FVWUVRRUVCUVFJZ0FrRWdTUnNQQ3lBQUlBRWdBU0FEYXlBQ1FRTjJJZ1FnQVNBRWF5QURTU0lCR3lJRGF5SUVOZ0lJSUFBZ0FpQURRUU4wYXpZQ0JDQUFJQVFvQUFBMkFnQUxJQUVMU0FFRWZ5QUFLQUlFSUFBb0FnQkJBblJxSWdJdEFBSWdBaThCQUNFRUlBRWdBU2dDQkNJRklBSXRBQU1pQW1vMkFnUWdBQ0FFSUFFb0FnQWdCWFJCQUNBQ2EzWnFOZ0lBQzFJQkJIOGdBQ2dDQkNBQUtBSUFRUUowYWlJQ0xRQUNJQUl2QVFBaEJDQUJJQUl0QUFNaUFpQUJLQUlFYWlJRk5nSUVJQUFnQkNBQ1FRSjBRYUFkYWlnQ0FDQUJLQUlBUVFBZ0JXdDJjV28yQWdBTENBQWdBRUdJZjBzTEdnQWdBQVJBSUFFRVFDQUNJQUFnQVJFQ0FBOExJQUFRQmdzTHBnZ0NEWDhCZmlNQVFSQnJJZ2trQUNBSlFRQTJBZ3dnQ1VFQU5nSUlBbjhDUUNBRFFlZ0phaUFESUFsQkNHb2dDVUVNYWlBQklBSWdBMEdBQVdvUUN5SVBRWWgvU3cwQVFWUWdDU2dDRENJRUlBQW9BZ0FpQVVIL0FYRkJBV3BMRFFFYUlBQkJCR29oQ3lBQUlBRkIvNEdBZUhFZ0JFRVFkRUdBZ1B3SGNYSTJBZ0JCZnlBRUlBUkJBRWdiUVFGcUlRQkJBQ0VCSUFrb0FnZ2hCVUVBSVFJRFFDQUFJQUpHQkVBZ0JVRURheUVCUVFBaEFBTkFBa0JCQUNFQ0lBQWdBVTRFUUFOQUlBQWdCVTROQWlBRElBQWdBMnBCNkFscUxRQUFRUUowYWtGQWF5SUJJQUVvQWdBaUFVRUJhallDQUNBQklBTnFJQUE2QU9nSElBQkJBV29oQUF3QUN3QUZBMEFnQWtFRVJrVUVRQ0FESUFNZ0FDQUNhaUlIYWtIb0NXb3RBQUJCQW5ScVFVQnJJZ2dnQ0NnQ0FDSUlRUUZxTmdJQUlBTWdDR29nQnpvQTZBY2dBa0VCYWlFQ0RBRUxDeUFBUVFScUlRQU1BZ3NBQ3dzZ0JFRUJhaUVPSUFNb0FnQWhCMEVBSVFCQkFTRUlBMEFnQ0NBT1JnMERJQTRnQ0dzaEJDQURJQWhCQW5ScUtBSUFJUVVDUUFKQUFrQUNRQUpBQWtCQkFTQUlkRUVCZFNJTlFRRnJEZ2dBQVFRQ0JBUUVBd1FMUVFBaEFpQUZRUUFnQlVFQVNoc2hCaUFBSVFFRFFDQUNJQVpHRFFVZ0F5QUNJQWRxYWkwQTZBY2hDaUFMSUFGQkFYUnFJZ3dnQkRvQUFTQU1JQW82QUFBZ0FrRUJhaUVDSUFGQkFXb2hBUXdBQ3dBTFFRQWhBaUFGUVFBZ0JVRUFTaHNoQ2lBQUlRRURRQ0FDSUFwR0RRUWdDeUFCUVFGMGFpSUdJQU1nQWlBSGFtb3RBT2dISWd3NkFBSWdCaUFFT2dBQklBWWdERG9BQUNBR0lBUTZBQU1nQWtFQmFpRUNJQUZCQW1vaEFRd0FDd0FMUVFBaEFpQUZRUUFnQlVFQVNoc2hCaUFFUVFoMFFZRCtBM0VoQkNBQUlRRURRQ0FDSUFaR0RRTWdDeUFCUVFGMGFpQUVJQU1nQWlBSGFtb3RBT2dIY3ExQ2dZQ0VnSkNBd0FCK053QUFJQUpCQVdvaEFpQUJRUVJxSVFFTUFBc0FDMEVBSVFJZ0JVRUFJQVZCQUVvYklRWWdCRUVJZEVHQS9nTnhJUVFnQUNFQkEwQWdBaUFHUmcwQ0lBc2dBVUVCZEdvaUNpQUVJQU1nQWlBSGFtb3RBT2dIY3ExQ2dZQ0VnSkNBd0FCK0loRTNBQWdnQ2lBUk53QUFJQUpCQVdvaEFpQUJRUWhxSVFFTUFBc0FDMEVBSVFFZ0JVRUFJQVZCQUVvYklRb2dCRUVJZEVHQS9nTnhJUXdnQUNFRUEwQWdBU0FLUmcwQklBc2dCRUVCZEdvaEVDQU1JQU1nQVNBSGFtb3RBT2dIY3ExQ2dZQ0VnSkNBd0FCK0lSRkJBQ0VDQTBBZ0FpQU5Ua1VFUUNBUUlBSkJBWFJxSWdZZ0VUY0FHQ0FHSUJFM0FCQWdCaUFSTndBSUlBWWdFVGNBQUNBQ1FSQnFJUUlNQVFzTElBRkJBV29oQVNBRUlBMXFJUVFNQUFzQUN5QUlRUUZxSVFnZ0JTQUhhaUVISUFVZ0RXd2dBR29oQUF3QUN3QUZJQU1nQWtFQ2RHb2lCMEZBYXlBQk5nSUFJQUpCQVdvaEFpQUhLQUlBSUFGcUlRRU1BUXNBQ3dBTElBOExJQWxCRUdva0FBdnlBZ0VHZnlNQVFTQnJJZ1VrQUNBRUtBSUFJUVlnQlVFTWFpQUNJQU1RRFNJRFFZaC9UUVJBSUFSQkJHb2hBaUFBSUFGcUlnbEJBMnNoQkVFQUlBWkJFSFpyUVI5eElRTURRQ0FGUVF4cUVBOGdBQ0FFVDNKRkJFQWdBaUFGS0FJTUlnWWdCU2dDRUNJSGRDQURka0VCZEdvaUNDMEFBU0VLSUFBZ0NDMEFBRG9BQUNBQ0lBWWdCeUFLYWlJR2RDQURka0VCZEdvaUJ5MEFBQ0VJSUFVZ0JpQUhMUUFCYWpZQ0VDQUFJQWc2QUFFZ0FFRUNhaUVBREFFTEN3TkFJQVZCREdvUUR5RUhJQVVvQWd3aEJpQUZLQUlRSVFRZ0FDQUpUeUFIY2tVRVFDQUNJQVlnQkhRZ0EzWkJBWFJxSWdZdEFBQWhCeUFGSUFRZ0JpMEFBV28yQWhBZ0FDQUhPZ0FBSUFCQkFXb2hBQXdCQ3dzRFFDQUFJQWxQUlFSQUlBSWdCaUFFZENBRGRrRUJkR29pQnkwQUFTRUlJQUFnQnkwQUFEb0FBQ0FBUVFGcUlRQWdCQ0FJYWlFRURBRUxDMEZzUVd3Z0FTQUZLQUlVSUFVb0FoaEhHeUFFUVNCSEd5RURDeUFGUVNCcUpBQWdBd3ZQRkFFamZ5TUFRZEFBYXlJRkpBQkJiQ0VKQWtBZ0EwRUtTUTBBQWtBZ0F5QUNMd0FFSWdjZ0FpOEFBQ0lJSUFJdkFBSWlEV3BxUVFacUlneEpEUUFnQkM4QkFpRUdJQVZCUEdvZ0FrRUdhaUlDSUFnUURTSUpRWWgvU3cwQklBVkJLR29nQWlBSWFpSUNJQTBRRFNJSlFZaC9TdzBCSUFWQkZHb2dBaUFOYWlJQ0lBY1FEU0lKUVloL1N3MEJJQVVnQWlBSGFpQURJQXhyRUEwaUNVR0lmMHNOQVNBRVFRUnFJUW9nQUNBQmFpSWZRUU5ySVNCQkFDQUdhMEVmY1NFTElBVW9BZ2doRVNBRktBSWNJUklnQlNnQ01DRVRJQVVvQWtRaEZDQUZLQUlFSVFrZ0JTZ0NHQ0VOSUFVb0Fpd2hEQ0FGS0FKQUlRWWdCU2dDRUNFaElBVW9BaVFoSWlBRktBSTRJU01nQlNnQ1RDRWtJQVVvQWdBaEZTQUZLQUlVSVJZZ0JTZ0NLQ0VYSUFVb0Fqd2hHRUVCSVE4Z0FDQUJRUU5xUVFKMklnUnFJZ01nQkdvaUFpQUVhaUlaSVFRZ0FpRUlJQU1oQndOQUlBOUJBWEZGSUFRZ0lFOXlSUVJBSUFBZ0NpQVlJQVowSUF0MlFRSjBhaUlPTHdFQU93QUFJQTR0QUFJaEdpQU9MUUFESVJBZ0J5QUtJQmNnREhRZ0MzWkJBblJxSWc0dkFRQTdBQUFnRGkwQUFpRWJJQTR0QUFNaER5QUlJQW9nRmlBTmRDQUxka0VDZEdvaURpOEJBRHNBQUNBT0xRQUNJUndnRGkwQUF5RWRJQVFnQ2lBVklBbDBJQXQyUVFKMGFpSU9Md0VBT3dBQUlBNHRBQUloSGlBT0xRQURJUTRnQUNBUWFpSWxJQW9nR0NBR0lCcHFJZ1owSUF0MlFRSjBhaUlRTHdFQU93QUFJQkF0QUFJZ0VDMEFBeUVtSUFjZ0Qyb2lKeUFLSUJjZ0RDQWJhaUlhZENBTGRrRUNkR29pQnk4QkFEc0FBQ0FITFFBQ0lRd2dCeTBBQXlFUUlBZ2dIV29pR3lBS0lCWWdEU0FjYWlJUGRDQUxka0VDZEdvaUNDOEJBRHNBQUNBSUxRQUNJUTBnQ0MwQUF5RWNJQVFnRG1vaUhTQUtJQlVnQ1NBZWFpSU9kQ0FMZGtFQ2RHb2lDUzhCQURzQUFDQUdhaUVBUVFNaEJ3Si9JQlFnSkVrRVFDQUFJUVpCQXd3QkN5QUFRUWR4SVFZZ0ZDQUFRUU4yYXlJVUtBQUFJUmhCQUFzZ0NTMEFBeUVlSUFrdEFBSWhDQ0FNSUJwcUlRQWdFeUFqU1FSL0lBQUZJQk1nQUVFRGRtc2lFeWdBQUNFWFFRQWhCeUFBUVFkeEN5RU1JQTBnRDJvaEFDQUhjaUVKUVFNaER3Si9JQklnSWtrRVFDQUFJUTFCQXd3QkN5QUFRUWR4SVEwZ0VpQUFRUU4yYXlJU0tBQUFJUlpCQUFzZ0NDQU9haUVBSUFseUlCRWdJVWtFZnlBQUJTQVJJQUJCQTNackloRW9BQUFoRlVFQUlROGdBRUVIY1FzaENTQWxJQ1pxSVFBZ0VDQW5haUVISUJzZ0hHb2hDQ0FkSUI1cUlRUWdEM0pGSVE4TUFRc0xJQVVnRERZQ0xDQUZJQVkyQWtBZ0JTQU5OZ0lZSUFVZ0NUWUNCQ0FGSUJRMkFrUWdCU0FUTmdJd0lBVWdFallDSENBRklCRTJBZ2dnQlNBWU5nSThJQVVnRnpZQ0tDQUZJQlkyQWhRZ0JTQVZOZ0lBSUFJZ0Iwa2dBQ0FEUzNJTkFFRnNJUWtnQ0NBWlN3MEJJQU5CQTJzaENRTkFJQVZCUEdvUUQwVWdBQ0FKU1hFRVFDQUFJQW9nQlNnQ1BDSU5JQVVvQWtBaURIUWdDM1pCQW5ScUlnNHZBUUE3QUFBZ0FDQU9MUUFEYWlJR0lBb2dEU0FNSUE0dEFBSnFJZ0IwSUF0MlFRSjBhaUlNTHdFQU93QUFJQVVnQUNBTUxRQUNhallDUUNBR0lBd3RBQU5xSVFBTUFRVWdBMEVDYXlFTUEwQWdCVUU4YWhBUElRWWdCU2dDUENFTklBVW9Ba0FoQ1NBQUlBeExJQVp5UlFSQUlBQWdDaUFOSUFsMElBdDJRUUowYWlJR0x3RUFPd0FBSUFVZ0NTQUdMUUFDYWpZQ1FDQUFJQVl0QUFOcUlRQU1BUXNMQTBBZ0FDQU1TMFVFUUNBQUlBb2dEU0FKZENBTGRrRUNkR29pQmk4QkFEc0FBQ0FBSUFZdEFBTnFJUUFnQ1NBR0xRQUNhaUVKREFFTEN3SkFJQUFnQTA4TkFDQUFJQW9nRFNBSmRDQUxkaUlBUVFKMGFpSURMUUFBT2dBQUlBTXRBQU5CQVVZRVFDQUpJQU10QUFKcUlRa01BUXNnQ1VFZlN3MEFRU0FnQ1NBS0lBQkJBblJxTFFBQ2FpSUFJQUJCSUU4YklRa0xJQUpCQTJzaERBTkFJQVZCS0dvUUQwVWdCeUFNU1hFRVFDQUhJQW9nQlNnQ0tDSUdJQVVvQWl3aUFIUWdDM1pCQW5ScUlnMHZBUUE3QUFBZ0J5QU5MUUFEYWlJRElBb2dCaUFBSUEwdEFBSnFJZ0IwSUF0MlFRSjBhaUlHTHdFQU93QUFJQVVnQUNBR0xRQUNhallDTENBRElBWXRBQU5xSVFjTUFRVWdBa0VDYXlFR0EwQWdCVUVvYWhBUElRTWdCU2dDS0NFTUlBVW9BaXdoQUNBR0lBZEpJQU55UlFSQUlBY2dDaUFNSUFCMElBdDJRUUowYWlJREx3RUFPd0FBSUFVZ0FDQURMUUFDYWpZQ0xDQUhJQU10QUFOcUlRY01BUXNMQTBBZ0JpQUhTVVVFUUNBSElBb2dEQ0FBZENBTGRrRUNkR29pQXk4QkFEc0FBQ0FISUFNdEFBTnFJUWNnQUNBRExRQUNhaUVBREFFTEN3SkFJQUlnQjAwTkFDQUhJQW9nRENBQWRDQUxkaUlDUVFKMGFpSURMUUFBT2dBQUlBTXRBQU5CQVVZRVFDQUFJQU10QUFKcUlRQU1BUXNnQUVFZlN3MEFRU0FnQUNBS0lBSkJBblJxTFFBQ2FpSUFJQUJCSUU4YklRQUxJQmxCQTJzaERBTkFJQVZCRkdvUUQwVWdDQ0FNU1hFRVFDQUlJQW9nQlNnQ0ZDSUdJQVVvQWhnaUFuUWdDM1pCQW5ScUlnMHZBUUE3QUFBZ0NDQU5MUUFEYWlJRElBb2dCaUFDSUEwdEFBSnFJZ0owSUF0MlFRSjBhaUlHTHdFQU93QUFJQVVnQWlBR0xRQUNhallDR0NBRElBWXRBQU5xSVFnTUFRVWdHVUVDYXlFREEwQWdCVUVVYWhBUElRSWdCU2dDRkNFR0lBVW9BaGdoQnlBRElBaEpJQUp5UlFSQUlBZ2dDaUFHSUFkMElBdDJRUUowYWlJQ0x3RUFPd0FBSUFVZ0J5QUNMUUFDYWpZQ0dDQUlJQUl0QUFOcUlRZ01BUXNMQTBBZ0F5QUlTVVVFUUNBSUlBb2dCaUFIZENBTGRrRUNkR29pQWk4QkFEc0FBQ0FJSUFJdEFBTnFJUWdnQnlBQ0xRQUNhaUVIREFFTEN3SkFJQWdnR1U4TkFDQUlJQW9nQmlBSGRDQUxkaUlDUVFKMGFpSURMUUFBT2dBQUlBTXRBQU5CQVVZRVFDQUhJQU10QUFKcUlRY01BUXNnQjBFZlN3MEFRU0FnQnlBS0lBSkJBblJxTFFBQ2FpSUNJQUpCSUU4YklRY0xBMEFnQlJBUFJTQUVJQ0JKY1FSQUlBUWdDaUFGS0FJQUlnWWdCU2dDQkNJQ2RDQUxka0VDZEdvaURDOEJBRHNBQUNBRUlBd3RBQU5xSWdNZ0NpQUdJQUlnREMwQUFtb2lBblFnQzNaQkFuUnFJZ1F2QVFBN0FBQWdCU0FDSUFRdEFBSnFOZ0lFSUFNZ0JDMEFBMm9oQkF3QkJTQWZRUUpySVFNRFFDQUZFQThoQWlBRktBSUFJUVlnQlNnQ0JDRUlJQU1nQkVrZ0FuSkZCRUFnQkNBS0lBWWdDSFFnQzNaQkFuUnFJZ0l2QVFBN0FBQWdCU0FJSUFJdEFBSnFOZ0lFSUFRZ0FpMEFBMm9oQkF3QkN3c0RRQ0FESUFSSlJRUkFJQVFnQ2lBR0lBaDBJQXQyUVFKMGFpSUNMd0VBT3dBQUlBUWdBaTBBQTJvaEJDQUlJQUl0QUFKcUlRZ01BUXNMQWtBZ0JDQWZUdzBBSUFRZ0NpQUdJQWgwSUF0MklnSkJBblJxSWdNdEFBQTZBQUFnQXkwQUEwRUJSZ1JBSUFnZ0F5MEFBbW9oQ0F3QkN5QUlRUjlMRFFCQklDQUlJQW9nQWtFQ2RHb3RBQUpxSWdJZ0FrRWdUeHNoQ0F0QmJFRnNRV3hCYkVGc1FXeEJiRUZzSUFFZ0NFRWdSeHNnQlNnQ0NDQUZLQUlNUnhzZ0IwRWdSeHNnQlNnQ0hDQUZLQUlnUnhzZ0FFRWdSeHNnQlNnQ01DQUZLQUkwUnhzZ0NVRWdSeHNnQlNnQ1JDQUZLQUpJUnhzaENRd0pDd0FMQUFzQUN3QUxBQXNBQ3dBTEFBdEJiQ0VKQ3lBRlFkQUFhaVFBSUFrTDdCQUJIbjhqQUVIUUFHc2lCU1FBUVd3aENRSkFJQU5CQ2trTkFBSkFJQU1nQWk4QUJDSUdJQUl2QUFBaUJ5QUNMd0FDSWdocWFrRUdhaUlPU1EwQUlBUXZBUUloRHlBRlFUeHFJQUpCQm1vaUFpQUhFQTBpQ1VHSWYwc05BU0FGUVNocUlBSWdCMm9pQWlBSUVBMGlDVUdJZjBzTkFTQUZRUlJxSUFJZ0NHb2lBaUFHRUEwaUNVR0lmMHNOQVNBRklBSWdCbW9nQXlBT2F4QU5JZ2xCaUg5TERRRWdCRUVFYWlFS0lBQWdBV29pSEVFRGF5RWRRUUFnRDJ0QkgzRWhDeUFGS0FJSUlSRWdCU2dDSENFU0lBVW9BakFoRXlBRktBSkVJUlFnQlNnQ0JDRUpJQVVvQWhnaEJpQUZLQUlzSVFjZ0JTZ0NRQ0VJSUFVb0FoQWhIaUFGS0FJa0lSOGdCU2dDT0NFZ0lBVW9Ba3doSVNBRktBSUFJUlVnQlNnQ0ZDRVdJQVVvQWlnaEZ5QUZLQUk4SVJoQkFTRU5JQUFnQVVFRGFrRUNkaUlDYWlJT0lBSnFJZzhnQW1vaUdTRUVJQThoQWlBT0lRTURRQ0FOUlNBRUlCMVBja1VFUUNBS0lCZ2dDSFFnQzNaQkFYUnFJZ3d0QUFFaERTQUFJQXd0QUFBNkFBQWdDaUFYSUFkMElBdDJRUUYwYWlJTUxRQUJJUkFnQXlBTUxRQUFPZ0FBSUFvZ0ZpQUdkQ0FMZGtFQmRHb2lEQzBBQVNFYUlBSWdEQzBBQURvQUFDQUtJQlVnQ1hRZ0MzWkJBWFJxSWd3dEFBRWhHeUFFSUF3dEFBQTZBQUFnQ2lBWUlBZ2dEV29pQ0hRZ0MzWkJBWFJxSWd3dEFBRWhEU0FBSUF3dEFBQTZBQUVnQ2lBWElBY2dFR29pQjNRZ0MzWkJBWFJxSWd3dEFBRWhFQ0FESUF3dEFBQTZBQUVnQ2lBV0lBWWdHbW9pREhRZ0MzWkJBWFJxSWdZdEFBRWhHaUFDSUFZdEFBQTZBQUVnQ2lBVklBa2dHMm9pRzNRZ0MzWkJBWFJxSWdrdEFBRWhJaUFFSUFrdEFBQTZBQUVnQ0NBTmFpRUdRUU1oQ1FKL0lCUWdJVWtFUUVFRElRMGdCZ3dCQ3lBVUlBWkJBM1pySWhRb0FBQWhHRUVBSVEwZ0JrRUhjUXNoQ0NBSElCQnFJUVlnRXlBZ1NRUi9JQVlGSUJNZ0JrRURkbXNpRXlnQUFDRVhRUUFoQ1NBR1FRZHhDeUVISUF3Z0dtb2hEQ0FKSUExeUlSQkJBeUVOQW44Z0VpQWZTUVJBSUF3aEJrRUREQUVMSUF4QkIzRWhCaUFTSUF4QkEzWnJJaElvQUFBaEZrRUFDeUFiSUNKcUlRd2dFSEloRUNBUklCNUpCSDhnREFVZ0VTQU1RUU4yYXlJUktBQUFJUlZCQUNFTklBeEJCM0VMSVFrZ0JFRUNhaUVFSUFKQkFtb2hBaUFEUVFKcUlRTWdBRUVDYWlFQUlBMGdFSEpGSVEwTUFRc0xJQVVnQnpZQ0xDQUZJQWcyQWtBZ0JTQUdOZ0lZSUFVZ0NUWUNCQ0FGSUJRMkFrUWdCU0FUTmdJd0lBVWdFallDSENBRklCRTJBZ2dnQlNBWU5nSThJQVVnRnpZQ0tDQUZJQlkyQWhRZ0JTQVZOZ0lBSUFBZ0Rrc2dBeUFQUzNJTkFFRnNJUWtnQWlBWlN3MEJJQTVCQTJzaENRTkFJQVZCUEdvUUR5QUFJQWxQY2tVRVFDQUtJQVVvQWp3aUJpQUZLQUpBSWdkMElBdDJRUUYwYWlJSUxRQUJJUXdnQUNBSUxRQUFPZ0FBSUFvZ0JpQUhJQXhxSWdaMElBdDJRUUYwYWlJSExRQUFJUWdnQlNBR0lBY3RBQUZxTmdKQUlBQWdDRG9BQVNBQVFRSnFJUUFNQVFzTEEwQWdCVUU4YWhBUElRY2dCU2dDUENFR0lBVW9Ba0FoQ1NBQUlBNVBJQWR5UlFSQUlBb2dCaUFKZENBTGRrRUJkR29pQmkwQUFDRUhJQVVnQ1NBR0xRQUJhallDUUNBQUlBYzZBQUFnQUVFQmFpRUFEQUVMQ3dOQUlBQWdEazlGQkVBZ0NpQUdJQWwwSUF0MlFRRjBhaUlITFFBQklBQWdCeTBBQURvQUFDQUFRUUZxSVFBZ0NXb2hDUXdCQ3dzZ0QwRURheUVBQTBBZ0JVRW9haEFQSUFBZ0EwMXlSUVJBSUFvZ0JTZ0NLQ0lHSUFVb0Fpd2lCM1FnQzNaQkFYUnFJZ2d0QUFFaERpQURJQWd0QUFBNkFBQWdDaUFHSUFjZ0Rtb2lCblFnQzNaQkFYUnFJZ2N0QUFBaENDQUZJQVlnQnkwQUFXbzJBaXdnQXlBSU9nQUJJQU5CQW1vaEF3d0JDd3NEUUNBRlFTaHFFQThoQnlBRktBSW9JUVlnQlNnQ0xDRUFJQU1nRDA4Z0IzSkZCRUFnQ2lBR0lBQjBJQXQyUVFGMGFpSUdMUUFBSVFjZ0JTQUFJQVl0QUFGcU5nSXNJQU1nQnpvQUFDQURRUUZxSVFNTUFRc0xBMEFnQXlBUFQwVUVRQ0FLSUFZZ0FIUWdDM1pCQVhScUlnY3RBQUVoQ0NBRElBY3RBQUE2QUFBZ0EwRUJhaUVESUFBZ0NHb2hBQXdCQ3dzZ0dVRURheUVEQTBBZ0JVRVVhaEFQSUFJZ0EwOXlSUVJBSUFvZ0JTZ0NGQ0lHSUFVb0FoZ2lCM1FnQzNaQkFYUnFJZ2d0QUFFaERpQUNJQWd0QUFBNkFBQWdDaUFHSUFjZ0Rtb2lCblFnQzNaQkFYUnFJZ2N0QUFBaENDQUZJQVlnQnkwQUFXbzJBaGdnQWlBSU9nQUJJQUpCQW1vaEFnd0JDd3NEUUNBRlFSUnFFQThoQnlBRktBSVVJUVlnQlNnQ0dDRURJQUlnR1U4Z0IzSkZCRUFnQ2lBR0lBTjBJQXQyUVFGMGFpSUdMUUFBSVFjZ0JTQURJQVl0QUFGcU5nSVlJQUlnQnpvQUFDQUNRUUZxSVFJTUFRc0xBMEFnQWlBWlQwVUVRQ0FLSUFZZ0EzUWdDM1pCQVhScUlnY3RBQUVoQ0NBQ0lBY3RBQUE2QUFBZ0FrRUJhaUVDSUFNZ0NHb2hBd3dCQ3dzRFFDQUZFQThnQkNBZFQzSkZCRUFnQ2lBRktBSUFJZ0lnQlNnQ0JDSUdkQ0FMZGtFQmRHb2lCeTBBQVNFSUlBUWdCeTBBQURvQUFDQUtJQUlnQmlBSWFpSUNkQ0FMZGtFQmRHb2lCaTBBQUNFSElBVWdBaUFHTFFBQmFqWUNCQ0FFSUFjNkFBRWdCRUVDYWlFRURBRUxDd05BSUFVUUR5RUhJQVVvQWdBaEJpQUZLQUlFSVFJZ0JDQWNUeUFIY2tVRVFDQUtJQVlnQW5RZ0MzWkJBWFJxSWdZdEFBQWhCeUFGSUFJZ0JpMEFBV28yQWdRZ0JDQUhPZ0FBSUFSQkFXb2hCQXdCQ3dzRFFDQUVJQnhQUlFSQUlBb2dCaUFDZENBTGRrRUJkR29pQnkwQUFTRUlJQVFnQnkwQUFEb0FBQ0FFUVFGcUlRUWdBaUFJYWlFQ0RBRUxDMEZzUVd4QmJFRnNRV3hCYkVGc1FXd2dBU0FDUVNCSEd5QUZLQUlJSUFVb0FneEhHeUFEUVNCSEd5QUZLQUljSUFVb0FpQkhHeUFBUVNCSEd5QUZLQUl3SUFVb0FqUkhHeUFKUVNCSEd5QUZLQUpFSUFVb0FraEhHeUVKREFFTFFXd2hDUXNnQlVIUUFHb2tBQ0FKQzFnQkEzOENRQ0FBS0FLUTZ3RWlBVVVOQUNBQktBSUFJQUZCdE5VQmFpZ0NBQ0lDSUFGQnVOVUJhaWdDQUNJREVCTWdBZ1JBSUFNZ0FTQUNFUUlBREFFTElBRVFCZ3NnQUVFQU5nS2c2d0VnQUVJQU53T1E2d0VMNlFNQ0JIOENmaUFBUVFCQktCQURJUVFnQWtFQlFRVWdBeHNpQUVrRVFDQUFEd3NnQVVVRVFFRi9Ed3RCQVNFR0FrQUNRQ0FEUVFGR0RRQWdBeUVHSUFFb0FBQWlCVUdvNnI1cFJnMEFRWFloQXlBRlFYQnhRZERVdE1JQlJ3MEJRUWdoQXlBQ1FRaEpEUUVnQVRVQUJDRUlJQVJCQVRZQ0ZDQUVJQWczQXdCQkFBOExJQUVnQWlBR0VCb2lBeUFDU3cwQUlBUWdBellDR0VGeUlRTWdBQ0FCYWlJRlFRRnJMUUFBSWdKQkNIRU5BQ0FDUVNCeElnWkZCRUJCY0NFRElBVXRBQUFpQlVHbkFVc05BU0FGUVFkeHJVSUJJQVZCQTNaQkNtcXRoaUlJUWdPSWZpQUlmQ0VKSUFCQkFXb2hBQXNnQWtFR2RpRUZJQUpCQW5aQkFDRURBa0FDUUFKQUFrQWdBa0VEY1VFQmF3NERBQUVDQXdzZ0FDQUJhaTBBQUNFRElBQkJBV29oQUF3Q0N5QUFJQUZxTHdBQUlRTWdBRUVDYWlFQURBRUxJQUFnQVdvb0FBQWhBeUFBUVFScUlRQUxRUUZ4SVFJQ2ZnSkFBa0FDUUFKQUlBVkJBV3NPQXdFQ0F3QUxRbjhnQmtVTkF4b2dBQ0FCYWpFQUFBd0RDeUFBSUFGcU13QUFRb0FDZkF3Q0N5QUFJQUZxTlFBQURBRUxJQUFnQVdvcEFBQUxJUWdnQkNBQ05nSWdJQVFnQXpZQ0hDQUVJQWczQXdCQkFDRURJQVJCQURZQ0ZDQUVJQWdnQ1NBR0d5SUlOd01JSUFSQ2dJQUlJQWdnQ0VLQWdBaGFHejRDRUFzZ0F3dGZBUUYvUWJoL0lRTWdBVUVCUVFVZ0Foc2lBazhFZnlBQUlBSnFRUUZyTFFBQUlnQkJBM0ZCQW5SQm9CNXFLQUlBSUFKcUlBQkJCSFpCREhGQnNCNXFLQUlBYWlBQVFTQnhJZ0ZGYWlBQlFRVjJJQUJCd0FCSmNXb0ZRYmgvQ3dzTUFDQUFJQUVnQWtFQUVCa0xsd01DQlg4Q2ZpTUFRVUJxSWdRa0FBSkFBMEFnQVVFRlR3UkFBa0FnQUNnQUFFRndjVUhRMUxUQ0FVWUVRRUorSVFjZ0FVRUlTUTBFSUFBb0FBUWlBa0YzU3cwRUlBSkJDR29pQXlBQlN3MEVJQUpCZ1g5SkRRRU1CQXNnQkVFWWFpQUFJQUVRR3lFQ1FuNGdCQ2tER0VJQUlBUW9BaXhCQVVjYklBSWJJZ2RDZlZZTkF5QUhJQWg4SWdnZ0IxUkNmaUVIRFFNQ1FBSkFJQUZCQ0VrTkFDQUFLQUFBUVhCeFFkRFV0TUlCUncwQUlBQW9BQVFpQWtGM1N3MEZRYmgvSUFKQkNHb2lBaUFCSUFKSkd5RUREQUVMSUFSQkdHb2dBQ0FCRUJzaUFrR0lmMHNFUUNBQ0lRTU1BUXRCdUg4aEF5QUNEUUFnQVNBRUtBSXdJZ0pySVFVZ0FDQUNhaUVHQTBBZ0JpQUZJQVJCREdvUUhTSURRWWgvU3cwQklBTkJBMm9pQWlBRlN3UkFRYmgvSVFNTUFnc2dCU0FDYXlFRklBSWdCbW9oQmlBRUtBSVFSUTBBQ3lBRUtBSTRCSDlCdUg4aEF5QUZRUVJKRFFFZ0JrRUVhZ1VnQmdzZ0FHc2hBd3NnQTBHSWYwc05Bd3NnQVNBRGF5RUJJQUFnQTJvaEFBd0JDd3RDZmlBSUlBRWJJUWNMSUFSQlFHc2tBQ0FIQzJRQkFYOUJ1SDhoQXdKQUlBRkJBMGtOQUNBQUxRQUNJUUVnQWlBQUx3QUFJZ0JCQVhFMkFnUWdBaUFBUVFGMlFRTnhJZ00yQWdBZ0FpQUFJQUZCRUhSeVFRTjJJZ0EyQWdnQ1FBSkFJQU5CQVdzT0F3SUJBQUVMUVd3UEN5QUFJUU1MSUFNTFJBRUNmeUFCSUFJb0FnUWlBeUFCS0FJRWFpSUVOZ0lFSUFBZ0EwRUNkRUdnSFdvb0FnQWdBU2dDQUVFQUlBUnJkbkUyQWdBZ0FSQVBHaUFBSUFKQkNHbzJBZ1FMemdFQkJuOUJ1bjhoQ2dKQUlBSW9BZ1FpQ0NBQ0tBSUFJZ2xxSWcwZ0FTQUFhMHNOQUVGc0lRb2dDU0FFSUFNb0FnQWlDMnRMRFFBZ0FDQUphaUlFSUFJb0FnZ2lER3NoQWlBQUlBRkJJR3NpQUNBTElBbEJBQkFnSUFNZ0NTQUxhallDQUFKQUFrQWdCQ0FGYXlBTVR3UkFJQUloQlF3QkN5QU1JQVFnQm10TERRSWdCeUFISUFJZ0JXc2lBbW9pQVNBSWFrOEVRQ0FFSUFFZ0NCQUtHZ3dDQ3lBQ0lBaHFJUWdnQkNBQlFRQWdBbXNRQ2lBQ2F5RUVDeUFFSUFBZ0JTQUlRUUVRSUFzZ0RTRUtDeUFLQzhjRUFRSi9JQUFnQTJvaEJnSkFJQU5CQjB3RVFBTkFJQUFnQms4TkFpQUFJQUl0QUFBNkFBQWdBRUVCYWlFQUlBSkJBV29oQWd3QUN3QUxJQVJCQVVZRVFBSkFJQUFnQW1zaUJVRUhUUVJBSUFBZ0FpMEFBRG9BQUNBQUlBSXRBQUU2QUFFZ0FDQUNMUUFDT2dBQ0lBQWdBaTBBQXpvQUF5QUFJQUlnQlVFQ2RDSUZRY0FlYWlnQ0FHb2lBaWdBQURZQUJDQUNJQVZCNEI1cUtBSUFheUVDREFFTElBQWdBaWtBQURjQUFBc2dBa0VJYWlFQ0lBQkJDR29oQUFzZ0FTQUdUd1JBSUFBZ0Eyb2hBU0FFUVFGSElBQWdBbXRCRDBweVJRUkFBMEFnQUNBQ0tRQUFOd0FBSUFKQkNHb2hBaUFBUVFocUlnQWdBVWtOQUF3REN3QUxJQUFnQWlrQUFEY0FBQ0FBSUFJcEFBZzNBQWdnQTBFUlNRMEJJQUJCRUdvaEFBTkFJQUFnQWlrQUVEY0FBQ0FBSUFJcEFCZzNBQWdnQUNBQ0tRQWdOd0FRSUFBZ0Fpa0FLRGNBR0NBQ1FTQnFJUUlnQUVFZ2FpSUFJQUZKRFFBTERBRUxBa0FnQUNBQlN3UkFJQUFoQVF3QkN5QUJJQUJySVFVQ1FDQUVRUUZISUFBZ0FtdEJEMHB5UlFSQUlBSWhBd05BSUFBZ0F5a0FBRGNBQUNBRFFRaHFJUU1nQUVFSWFpSUFJQUZKRFFBTERBRUxJQUFnQWlrQUFEY0FBQ0FBSUFJcEFBZzNBQWdnQlVFUlNBMEFJQUJCRUdvaEFDQUNJUU1EUUNBQUlBTXBBQkEzQUFBZ0FDQURLUUFZTndBSUlBQWdBeWtBSURjQUVDQUFJQU1wQUNnM0FCZ2dBMEVnYWlFRElBQkJJR29pQUNBQlNRMEFDd3NnQWlBRmFpRUNDd05BSUFFZ0JrOE5BU0FCSUFJdEFBQTZBQUFnQVVFQmFpRUJJQUpCQVdvaEFnd0FDd0FMQzY0SEFnVi9BWDRqQUVHQUFXc2lFU1FBSUJFZ0F6WUNmRUYvSVE4Q1FBSkFBa0FDUUFKQUlBSU9CQUVBQXdJRUN5QUdSUVJBUWJoL0lROE1CQXRCYkNFUElBVXRBQUFpQWlBRFN3MERJQWdnQWtFQ2RDSUNhaWdDQUNFRElBSWdCMm9vQWdBaEFpQUFRUUE2QUFzZ0FFSUFOd0lBSUFBZ0FqWUNEQ0FBSUFNNkFBb2dBRUVBT3dFSUlBRWdBRFlDQUVFQklROE1Bd3NnQVNBSk5nSUFRUUFoRHd3Q0N5QUtSUVJBUVd3aER3d0NDMEVBSVE4Z0MwVWdERUVaU0hJTkFVRUlJQVIwUVFocUlRQkJBQ0VEQTBBZ0FDQURUUTBDSUFOQlFHc2hBd3dBQ3dBTFFXd2hEeUFSSUJGQi9BQnFJQkZCK0FCcUlBVWdCaEFNSWdOQmlIOUxEUUFnRVNnQ2VDSUNJQVJMRFFBZ0VTZ0NmRUVCYWlFSklBQkJDR29oQzBHQWdBSWdBblJCRUhVaEJVRUJJUkJCQVNBQ2RDSVBRUUZySWdvaEVnTkFJQWtnRGtjRVFBSkFJQkVnRGtFQmRDSUVhaThCQUNJTVFmLy9BMFlFUUNBTElCSkJBM1JxSUE0MkFnUWdFa0VCYXlFU1FRRWhEQXdCQ3lBUVFRQWdCU0FNd1VvYklSQUxJQVFnRFdvZ0REc0JBQ0FPUVFGcUlRNE1BUXNMSUFBZ0FqWUNCQ0FBSUJBMkFnQUNRQ0FLSUJKR0JFQWdEVUhxQUdvaEJrRUFJUkJCQUNFTUEwQWdDU0FRUmdSQUlBOUJBM1lnRDBFQmRtcEJBMm9pQlVFQmRDRUVRUUFoREVFQUlSSURRRUVBSVE0Z0R5QVNUUTBFQTBBZ0RrRUNSd1JBSUFzZ0JTQU9iQ0FNYWlBS2NVRURkR29nQmlBT0lCSnFhaTBBQURZQ0JDQU9RUUZxSVE0TUFRc0xJQkpCQW1vaEVpQUVJQXhxSUFweElRd01BQXNBQlNBUklCQkJBWFJxTGdFQUlRVWdCaUFNYWlJRUlCTTNBQUJCQ0NFT0EwQWdCU0FPU2dSQUlBUWdEbW9nRXpjQUFDQU9RUWhxSVE0TUFRc0xJQk5DZ1lLRWlKQ2d3SUFCZkNFVElCQkJBV29oRUNBRklBeHFJUXdNQVFzQUN3QUxJQTlCQTNZZ0QwRUJkbXBCQTJvaEJVRUFJUkJCQUNFT0EwQWdDU0FRUmcwQlFRQWhEQ0FSSUJCQkFYUnFMZ0VBSWdSQkFDQUVRUUJLR3lFRUEwQWdCQ0FNUndSQUlBc2dEa0VEZEdvZ0VEWUNCQU5BSUFVZ0Rtb2dDbkVpRGlBU1N3MEFDeUFNUVFGcUlRd01BUXNMSUJCQkFXb2hFQXdBQ3dBTElBSkJBV29oQlVFQUlRd0RRQ0FNSUE5SEJFQWdEU0FMSUF4QkEzUnFJZ2tvQWdRaUJFRUJkR29pQWlBQ0x3RUFJZ1pCQVdvN0FRQWdDU0FGSUFablFXQnphaUlDT2dBRElBa2dCaUFDZENBUGF6c0JBQ0FKSUFnZ0JFRUNkQ0lDYWlnQ0FEb0FBaUFKSUFJZ0Iyb29BZ0EyQWdRZ0RFRUJhaUVNREFFTEN5QUJJQUEyQWdBZ0F5RVBDeUFSUVlBQmFpUUFJQThMN1ZvQ08zOEdmaU1BUWVBQmF5SUVKQUFDUUVHdzdBa1FCU0lGUlFSQVFVQWhCd3dCQ3lBRlFnQTNBdlRxQVNBRlFRQTJBc1RyQVNBRlFRQTJBclRyQVNBRlFnQTNBcHpyQVNBRlFRQTJBcmpwQVNBRlFRQTJBcXpzQ1NBRlFnQTNBdFRyQVNBRlFnQTNBcXpyQVNBRlFnQTNBNGpyQVNBRlFnQTNBdVRxQVNBRlFnQTNBdVRyQVNBRlFZR0FnTUFBTmdLODZ3RWdCVUlBTndLazZ3RWdCVUg4NmdGcVFRQTJBZ0FnQlVHUTZ3RnFRZ0EzQXdBZ0JSQVlJQVZCck5VQmFpRVVJQVZCK09zQmFpRWNJQVZCc09vQmFpRWlJQVZCb0RCcUlTb2dCVUdZSUdvaEt5QUZRYWpRQUdvaEhpQUZRUkJxSVN3Z0JVRUlhaUVvSUFWQkJHb2hMU0FGUWNEcEFXb2hLU0FGUVlqckFXb2dCRUdVQVdvaEx5QUVRWXdCYWlFd0lBUkJoQUZxSVRFZ0JFSGNBR29oTWlBRVFkUUFhaUV6SUFSQnpBQnFJVFFnQUNFZEFrQUNRQUpBQWtBQ1FBTkFRUUZCQlNBRktBTGs2Z0ViSVFZQ1FBTkFJQU1nQmtrTkFTQUNLQUFBUVhCeFFkRFV0TUlCUmdSQVFiaC9JUWNnQTBFSVNRMElJQUlvQUFRaURrRjNTd1JBUVhJaEJ3d0pDeUFESUE1QkNHb2lDVWtOQ0NBT1FZQi9Td1JBSUFraEJ3d0pDeUFESUFscklRTWdBaUFKYWlFQ0RBRUxDeUFGUWdBM0FxenBBU0FGUWdBM0EranBBU0FGUVFBMkFwanJBU0FGUWdBM0E0RHFBU0FGUWdNM0EvanBBU0FGUWJUcEFXcENBRGNDQUNBRlFmRHBBV3BDQURjREFDQUZRYWpRQUdvaUNVR01nSURnQURZQ0FDQUZRYXpRQVdwQjRCSXBBZ0EzQWdBZ0JVRzAwQUZxUWVnU0tBSUFOZ0lBSUFVZ0JVRVFhallDQUNBRklBVkJvREJxTmdJRUlBVWdCVUdZSUdvMkFnZ2dCU0FKTmdJTUlBVkJBVUVGSUFVb0F1VHFBUnMyQXJ6cEFRSkFJQUZGRFFBZ0JTZ0NyT2tCSWdrZ0hVWU5BQ0FGSUFrMkFyanBBU0FGSUIwMkFxenBBU0FGS0FLdzZRRWhEaUFGSUIwMkFyRHBBU0FGSUIwZ0RpQUphMm8yQXJUcEFRdEJ1SDhoQ1NBRFFRVkJDU0FGS0FMazZnRWlCaHRKRFFVZ0FrRUJRUVVnQmhzZ0JoQWFJZzVCaUg5TEJFQWdEaUVKREFVTElBTWdEa0VEYWtrTkJTQXBJQUlnRGlBR0VCa2lCa0dJZjBzRVFDQUdJUWtNQlFzZ0JnMEZBa0FDUUNBRktBS282d0ZCQVVjTkFDQUZLQUtrNndFaUNVVU5BQ0FGS0FLVTZ3RkZEUUFnQ1NnQ0JFRUJheUlISUFVb0F0enBBU0lLclVLSGxhK3ZtTGJlbTU1L2ZrTEp6OW15OGVXNjZpZUZRaGVKUXMvVzA3N1N4NnZaUW41QytmUGQ4Wm4ybWFzV2ZDSS9RaUdJSUQrRlFzL1cwNzdTeDZ2WlFuNGlQMElkaUNBL2hVTDU4OTN4bWZhWnF4WitJajlDSUlnZ1A0V25jU0VHSUFrb0FnQWhGUU5BUVFBaENBSkFJQlVnQmtFQ2RHb29BZ0FpQ1VVTkFDQUpLQUlJUVFoSkRRQWdDU2dDQkNJU0tBQUFRYmZJd3VGK1J3MEFJQklvQUFRaENBc2dDQ0FLUndSQUlBWWdCM0ZCQVdvaEJpQUlEUUVMQ3lBSlJRMEFJQVVRR0NBRlFYODJBcURyQVNBRklBazJBcFRyQVNBRklBVW9BdHpwQVNJSU5nS1k2d0VNQVFzZ0JTZ0MzT2tCSVFnTEFrQWdDRVVOQUNBRktBS1k2d0VnQ0VZTkFFRmdJUWtNQmdzQ1FDQUZLQUxnNlFFRVFDQUZJQVVvQXVqcUFTSUpSVFlDN09vQklBa05BU0FGUXZucTBORG55YUhrNFFBM0E2anFBU0FGUWdBM0E2RHFBU0FGUXMvVzA3N1N4NnZaUWpjRG1Pb0JJQVZDMXV1Qzd1cjlpZlhnQURjRGtPb0JJQVZDQURjRGlPb0JJQ0pCQUVFb0VBTWFEQUVMSUFWQkFEWUM3T29CQ3lBQklCMXFJU1VnQlNBRktRUG82UUVnRHExOE53UG82UUVnQXlBT2F5RURJQUlnRG1vaEFpQWRJUTREUUNBQ0lBTWdCRUVzYWhBZEloVkJpSDlMQkVBZ0ZTRUpEQVlMSUFOQkEyc2lOU0FWU1EwRUlBSkJBMm9oRzBGc0lRa0NRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUNBRUtBSXNEZ01DQVFBVkN5QVZRZi8vQjBzTkV5QVZRUU5KRFJJZ0JTa0R5T2tCSVQ4Q1FBSkFJQnN0QUFBaUNVRURjU0lhUVFGckRnTUdBUUFIQ3lBRktBS0E2Z0VOQUVGaUlRa01GUXNnRlVFRlNRMFNJQnNvQUFBaEF3Si9Ba0FDUUFKQUlBbEJBblpCQTNFaUNVRUNhdzRDQVFJQUN5QUpRUUJISVFjZ0EwRUVka0gvQjNFaEMwRURJUVlnQTBFT2RrSC9CM0VNQWd0QkJDRUdJQU5CQkhaQi8vOEFjU0VMUVFFaEJ5QURRUkoyREFFTElBTkJCSFpCLy84UGNTSUxRWUNBQ0VzTkUwRUJJUWRCQlNFR0lBSXRBQWRCQ25RZ0EwRVdkbklMSWdnZ0Jtb2lDU0FWU3cwU0FrQWdDMEdCQmtrTkFDQUZLQUtjNndGRkRRQkJBQ0VEQTBBZ0EwR0RnQUZMRFFFZ0EwRkFheUVEREFBTEFBc2dCaUFiYWlFUElCcEJBMGNOQmlBRktBSU1JZ0l0QUFGQkNIUWhBeUFIRFFjZ0EwVU5DQ0FFUWZBQWFpQVBJQWdRRFNJRFFZaC9TdzBKSUFKQkJHb2hCaUFMSUJ4cUloSkJBMnNoQ2tFQUlBSXZBUUpyUVI5eElRY2dIQ0VEQTBBZ0JFSHdBR29RRDBVZ0F5QUtTWEVFUUNBRElBWWdCQ2dDY0NJSUlBUW9BblFpRDNRZ0IzWkJBblJxSWdJdkFRQTdBQUFnQXlBQ0xRQURhaUlESUFZZ0NDQVBJQUl0QUFKcUlnaDBJQWQyUVFKMGFpSUNMd0VBT3dBQUlBUWdDQ0FDTFFBQ2FqWUNkQ0FESUFJdEFBTnFJUU1NQVFVZ0VrRUNheUVJQTBBZ0JFSHdBR29RRHlFUElBUW9BbkFoQ2lBRUtBSjBJUUlnQXlBSVN5QVBja1VFUUNBRElBWWdDaUFDZENBSGRrRUNkR29pQ2k4QkFEc0FBQ0FFSUFJZ0NpMEFBbW8yQW5RZ0F5QUtMUUFEYWlFRERBRUxDd05BSUFNZ0NFMEVRQ0FESUFZZ0NpQUNkQ0FIZGtFQ2RHb2lEeThCQURzQUFDQURJQTh0QUFOcUlRTWdBaUFQTFFBQ2FpRUNEQUVMQ3dKQUlBTWdFazhOQUNBRElBWWdDaUFDZENBSGRrRUNkR29pQXkwQUFEb0FBQ0FETFFBRFFRRkdCRUFnQWlBRExRQUNhaUVDREFFTElBSkJIMHNOQUVFZ0lBSWdBeTBBQW1vaUFpQUNRU0JQR3lFQ0MwRnNRV3dnQ3lBRUtBSjRJQVFvQW54SEd5QUNRU0JIR3lFRERBc0xBQXNBQ3lBRUtBSTBJZ0lnSlNBT2Ewc05DaUFPUlFSQVFRQWhDU0FDRFFJTURnc2dEaUFiTFFBQUlBSVFBeG9nQWlFSkRBd0xJQlVnSlNBT2Ewc05DU0FPRFFGQkFDRUpJQlZGRFF3TFFiWi9JUWtNRVFzZ0RpQWJJQlVRQWhvZ0ZTRUpEQW9MSUJ3Z0d3Si9Ba0FDUUFKQUlBbEJBblpCQTNGQkFXc09Bd0VBQWdBTElBbEJBM1loQTBFQkRBSUxJQnN2QUFCQkJIWWhBMEVDREFFTElCVkJCRWtORGlBQ0x3QURJQUl0QUFWQkVIUnlJZ0pCajRDQUFVc05EaUFDUVFSMklRTkJBd3NpQW1vdEFBQWdBMEVnYWhBRElRa2dCU0FETmdLQTZ3RWdCU0FKTmdMdzZnRWdBa0VCYWlFSkRBVUxJQlVDZndKQUFrQUNRQ0FKUVFKMlFRTnhRUUZyRGdNQkFBSUFDeUFKUVFOMklRTkJBUXdDQ3lBYkx3QUFRUVIySVFOQkFnd0JDeUFDTHdBRElBSXRBQVZCRUhSeVFRUjJJUU5CQXdzaUFpQURhaUlKUVNCcVNRUkFJQWtnRlVzTkRTQWNJQUlnRzJvZ0F4QUNJUUlnQlNBRE5nS0E2d0VnQlNBQ05nTHc2Z0VnQWlBRGFpSUNRZ0EzQUJnZ0FrSUFOd0FRSUFKQ0FEY0FDQ0FDUWdBM0FBQU1CUXNnQlNBRE5nS0E2d0VnQlNBQ0lCdHFOZ0x3NmdFTUJBc2dCMFVFUUNBZUlBOGdDQ0FVRUJRaUFrR0lmMHNnQWlBSVQzSU5EQ0FjSUFzZ0FpQVBhaUFJSUFKcklCNFFGU0VEREFNTElBdEZJQWhGY2cwTElBdEJDSFlpQXlBSUlBdEpCSDhnQ0VFRWRDQUxiZ1ZCRHd0QkdHd2lBa0dNQ0dvb0FnQnNJQUpCaUFocUtBSUFhaUlHUVFOMklBWnFJQUpCZ0FocUtBSUFJQUpCaEFocUtBSUFJQU5zYWtrRVFDTUFRUkJySWhBa0FDQWVLQUlBSVFNZ0ZFSHdCR3BCQUVIc0FCQURJUVpCVkNFQ0FrQWdBMEgvQVhFaURFRU1TdzBBQWtBZ0ZFSGNDV29nQmlBUVFRaHFJQkJCREdvZ0R5QUlJQlJCM0F0cUloY1FDeUlTUVloL1N3MEFJQkFvQWd3aUJpQU1TdzBCSUJSQnFBVnFJUTBnRkVHa0JXb2hOaUFlUVFScUlSRWdBMEdBZ0lCNGNTRTNJQVpCQVdvaUV5RUNJQVloQXdOQUlBSWlCMEVCYXlFQ0lBTWlDa0VCYXlFRElCUWdDa0VDZEdvb0F2QUVSUTBBQzBFQklBY2dCMEVCVFJzaEZrRUFJUWRCQVNFQ0EwQWdBaUFXUndSQUlCUWdBa0VDZENJRGFpZ0M4QVFoR0NBRElBMXFJQWMyQWdBZ0FrRUJhaUVDSUFjZ0dHb2hCd3dCQ3dzZ0RTQUhOZ0lBUVFBaEFpQVFLQUlJSVFNRFFDQUNJQU5IQkVBZ0RTQUNJQlJxUWR3SmFpMEFBQ0lZUVFKMGFpSVpJQmtvQWdBaUdVRUJhallDQUNBVUlCbEJBWFJxSWhrZ0dEb0EzUVVnR1NBQ09nRGNCU0FDUVFGcUlRSU1BUXNMUVFBaEF5QU5RUUEyQWdBZ0RDQUdRWDl6YWlFR1FRRWhBZ05BSUFJZ0ZrY0VRQ0FVSUFKQkFuUnFJZzBnQXpZQ0FDQU5LQUx3QkNBQ0lBWnFkQ0FEYWlFRElBSkJBV29oQWd3QkN3c2dEQ0FUSUFwcklnWnJRUUZxSVFvZ0JpRURBMEFnQXlBS1NRUkFJQlFnQTBFMGJHb2hEVUVCSVFJRFFDQUNJQlpIQkVBZ0RTQUNRUUowSWhocUlCUWdHR29vQWdBZ0EzWTJBZ0FnQWtFQmFpRUNEQUVMQ3lBRFFRRnFJUU1NQVFzTElCY2dGRUUwRUFJaE9DQVVRWkFNYWlFNUlCTWdER3NoT2lBVVFkd0ZhaUVYUVFBaENnTkFBa0FDUUNBSElBcEhCRUJCQVNBTUlCTWdGeUFLUVFGMGFpSUNMUUFCSWcxcklnTnJJaGgwSVJrZ0FpMEFBQ0VXSURnZ0RVRUNkR29pSHlnQ0FDRUNJQVlnR0UwRVFDQTJRUUVnQXlBNmFpSU5JQTFCQVV3YklpQkJBblFpSkdvb0FnQWhEU0E1SUJRZ0EwRTBiR3BCTkJBQ0lTRWdEVUVCZENFbUlCRWdBa0VDZEdvaEl5QWdRUUZORFFJZ0EwRVFkRUdBZ1B3SGNTQVdja0dBZ0lBSWNpRWdJQ0VnSkdvb0FnQWhKRUVBSVFJRFFDQUNJQ1JHRFFNZ0l5QUNRUUowYWlBZ05nRUFJQUpCQVdvaEFnd0FDd0FMSUFJZ0FpQVphaUlOSUFJZ0RVc2JJUTBnQTBFUWRFR0FnUHdIY1NBV2NrR0FnSUFJY2lFREEwQWdBaUFOUmcwRElCRWdBa0VDZEdvZ0F6WUJBQ0FDUVFGcUlRSU1BQXNBQ3lBZUlBeEJFSFFnTjNJZ0RISkJnQUp5TmdJQURBTUxJQWNnRFdzaEpDQVhJQ1pxSVNaQkFDRU5BMEFnRFNBa1JnMEJRUUVnR0NBVElDWWdEVUVCZEdvaUp5MEFBU0lDYXlJN2EzUWlQQ0FoSUFKQkFuUnFJaUFvQWdBaUFtb2hQU0FESUR0cVFSQjBRWUNBL0FkeElDY3RBQUJCQ0hSeUlCWnlRWUNBZ0JCeUlTY0RRQ0FqSUFKQkFuUnFJQ2MyQVFBZ0FrRUJhaUlDSUQxSkRRQUxJQ0FnSUNnQ0FDQThhallDQUNBTlFRRnFJUTBNQUFzQUN5QWZJQjhvQWdBZ0dXbzJBZ0FnQ2tFQmFpRUtEQUFMQUFzZ0VpRUNDeUFRUVJCcUpBQWdBa0dJZjBzZ0FpQUlUM0lORENBY0lBc2dBaUFQYWlBSUlBSnJJQjRRRmlFRERBTUxJQjRnRHlBSUlCUVFGQ0lDUVloL1N5QUNJQWhQY2cwTElCd2dDeUFDSUE5cUlBZ2dBbXNnSGhBWElRTU1BZ3NnQXdSQUlCd2dDeUFQSUFnZ0FoQVdJUU1NQWdzZ0hDQUxJQThnQ0NBQ0VCY2hBd3dCQ3lBY0lBc2dEeUFJSUFJUUZTRURDeUFEUVloL1N3MElJQVVnQ3pZQ2dPc0JJQVVnSERZQzhPb0JJQVZCQVRZQ2dPb0JJQnBCQWtZRVFDQUZJQjQyQWd3TElBc2dIR29pQWtJQU53QUFJQUpDQURjQUdDQUNRZ0EzQUJBZ0FrSUFOd0FJSUFsQmlIOUxEUW9MSUFrZ0ZVWU5DQ0FWSUFscklRWWdCU2dDbk9zQklRb0NRQ0FKSUJ0cUlnTXRBQUFpRDBVRVFFRUJJUUpCQUNFUFFiaC9JUWtnQmtFQlJnMEJEQXNMQW44Z0EwRUJhaUFQd0NJQ1FRQk9EUUFhSUFKQmYwWUVRQ0FHUVFOSURRc2dBeThBQVVHQS9nRnFJUThnQTBFRGFnd0JDeUFHUVFKSURRb2dBeTBBQVNBUFFRaDBja0dBZ0FKcklROGdBMEVDYWdzaEVrRzRmeUVKSUJKQkFXb2lBaUFWSUJ0cUlnZExEUW9nTENBRklCSXRBQUFpRWtFR2RrRWpRUWtnQWlBSElBSnJRY0FRUWRBUlFmQVNJQVVvQW9UcUFTQUtJQThnRkJBaElnbEJpSDlMRFFnZ0t5QW9JQkpCQkhaQkEzRkJIMEVJSUFJZ0NXb2lBaUFISUFKclFZQUxRWUFNUVlBWElBVW9Bb1RxQVNBRktBS2M2d0VnRHlBVUVDRWlDRUdJZjBzTkNFRnNJUWtnS2lBdElCSkJBblpCQTNGQk5FRUpJQUlnQ0dvaUFpQUhJQUpyUVlBTlFlQU9RWkFaSUFVb0FvVHFBU0FGS0FLYzZ3RWdEeUFVRUNFaUIwR0lmMHNOQ2lBQ0lBZHFJQU5ySWdJaENTQUNRWWgvU3cwS0N5QU9JQTlCQUV4eURRRUxRYnAvSVFrTUNBc2dKU0FPYXlFSklBWWdBbXNoQmlBQ0lBTnFJUWNDUUFKQUFrQWdDa1VFUUNBUFFRbElJQVVwQThqcEFVS0JnSUFJVkhJTkFpQW9LQUlBSWdKQkNHb2hFaUFDS0FJRUlRcEJBQ0VEUVFBaEFnTkFJQU1nQ25aRkJFQWdBaUFTSUFOQkEzUnFMUUFDUVJaTGFpRUNJQU5CQVdvaEF3d0JDd3NnQlVFQU5nS2M2d0VnQWtFSUlBcHJkRUVVVHcwQkRBTUxJQVZCQURZQ25Pc0JDeUFFSUFVb0F2RHFBU0lETmdMY0FTQUpJQTVxSVJZZ0F5QUZLQUtBNndGcUlSY0NRQ0FQUlFSQUlBNGhCd3dCQ3lBRktBSzQ2UUVoR2lBRktBSzA2UUVoR0NBRktBS3c2UUVoRWlBRlFRRTJBb1RxQVVFQUlRTURRQ0FEUVFOSEJFQWdCQ0FEUVFKMElnSnFJQUlnQldwQnJOQUJhaWdDQURZQ1pDQURRUUZxSVFNTUFRc0xRV3doQ1NBRVFUaHFJZ0lnQnlBR0VBMUJpSDlMRFFOQkNDQVBJQTlCQ0U0YklSOGdOQ0FDSUFVb0FnQVFIaUF6SUFJZ0JTZ0NDQkFlSURJZ0FpQUZLQUlFRUI0Z0RpQVNheUVaUVFBaENBTkFJQVJCT0dvUUQwRURSaUFJSUI5T2NrVUVRQ0FFS0FKUUlBUW9Ba3hCQTNScUtRSUFJa0NuSWdkQkVIWWlFVUgvQVhFaEN5QUVLQUpnSUFRb0FseEJBM1JxS1FJQUlrR25JZ3hCRUhZaUlVSC9BWEVoRUNBRUtBSllJQVFvQWxSQkEzUnFLUUlBSWtKQ0lJaW5JUVlnUVVJZ2lDQkFRaUNJcHlFREFrQWdRa0lRaUtjaUNrSC9BWEVpQWtFQ1R3UkFBa0FnQWtFWlNTQS9Rb0dBZ0JCVWNrVUVRQ0FFUVNBZ0JDZ0NQQ0lLYXlJTklBSWdBaUFOU3hzaUV5QUthallDUENBR0lBUW9BamdnQ25SQkFDQVRhM1lnQWlBVGF5SVRkR29oQ2lBRVFUaHFFQThhSUFJZ0RVME5BU0FFSUFRb0Fqd2lBaUFUYWpZQ1BDQUVLQUk0SUFKMFFRQWdFMnQySUFwcUlRb01BUXNnQkNBQ0lBUW9BandpRFdvMkFqd2dCQ2dDT0NBTmRFRUFJQXByZGlBR2FpRUtJQVJCT0dvUUR4b0xJQVFwQW1RaFJDQUVJQW8yQW1RZ0JDQkVOd0pvREFFTEFrQWdBa1VFUUNBREJFQWdCQ2dDWkNFS0RBTUxJQVFvQW1naENnd0JDeUFFSUFRb0Fqd2lBa0VCYWpZQ1BBSi9JQVlnQTBWcUlBUW9BamdnQW5SQkgzWnFJZ0pCQTBZRVFDQUVLQUprUVFGckRBRUxJQUpCQW5RZ0JHb29BbVFMSWdaRklBWnFJUW9nQWtFQlJ3UkFJQVFnQkNnQ2FEWUNiQXNMSUFRZ0JDZ0NaRFlDYUNBRUlBbzJBbVFMcHlFQ0lFRkNnSUQ4QjROUVJRUkFJQVFnQkNnQ1BDSUdJQkJxTmdJOElBUW9BamdnQm5SQkFDQWhhM1lnQW1vaEFnc2dDeUFRYWtFVVR3UkFJQVJCT0dvUUR4b0xJRUJDZ0lEOEI0TlFSUVJBSUFRZ0JDZ0NQQ0lHSUF0cU5nSThJQVFvQWpnZ0JuUkJBQ0FSYTNZZ0Eyb2hBd3NnQkVFNGFoQVBHaUFFSUFRb0FqZ2lCa0VBSUFkQkdIWWlDeUFFS0FJOGFpSVFhM1lnQzBFQ2RFR2dIV29vQWdCeElBZEIvLzhEY1dvMkFrd2dCQ0FRSUF4QkdIWWlCMm9pQ3pZQ1BDQUVJQWRCQW5SQm9CMXFLQUlBSUFaQkFDQUxhM1p4SUF4Qi8vOERjV28yQWx3Z0JFRTRhaEFQR2lBRUlFS25JZ1pCR0hZaUJ5QUVLQUk4YWlJTE5nSThJQVFnQjBFQ2RFR2dIV29vQWdBZ0JDZ0NPRUVBSUF0cmRuRWdCa0gvL3dOeGFqWUNWQ0FFUWZBQWFpQUlRUXhzYWlJR0lBbzJBZ2dnQmlBQ05nSUVJQVlnQXpZQ0FDQUlRUUZxSVFnZ0F5QVphaUFDYWlFWkRBRUxDeUFJSUI5SURRTWdGa0VnYXlFaElBNGhCd05BSUFSQk9Hb1FEMEVEUmlBSUlBOU9ja1VFUUNBRUtBSlFJQVFvQWt4QkEzUnFLUUlBSWtDbklnWkJFSFlpSTBIL0FYRWhDaUFFS0FKZ0lBUW9BbHhCQTNScUtRSUFJa0duSWcxQkVIWWlJRUgvQVhFaEV5QUVLQUpZSUFRb0FsUkJBM1JxS1FJQUlrSkNJSWluSVFNZ1FVSWdpQ0JBUWlDSXB5RUxBa0FnUWtJUWlLY2lERUgvQVhFaUFrRUNUd1JBQWtBZ0FrRVpTU0EvUW9HQWdCQlVja1VFUUNBRVFTQWdCQ2dDUENJTWF5SVJJQUlnQWlBUlN4c2lFQ0FNYWpZQ1BDQURJQVFvQWpnZ0RIUkJBQ0FRYTNZZ0FpQVFheUlNZEdvaEVDQUVRVGhxRUE4YUlBSWdFVTBOQVNBRUlBUW9BandpQWlBTWFqWUNQQ0FFS0FJNElBSjBRUUFnREd0MklCQnFJUkFNQVFzZ0JDQUNJQVFvQWp3aUVHbzJBandnQkNnQ09DQVFkRUVBSUF4cmRpQURhaUVRSUFSQk9Hb1FEeG9MSUFRcEFtUWhSQ0FFSUJBMkFtUWdCQ0JFTndKb0RBRUxBa0FnQWtVRVFDQUxCRUFnQkNnQ1pDRVFEQU1MSUFRb0FtZ2hFQXdCQ3lBRUlBUW9BandpQWtFQmFqWUNQQUovSUFNZ0MwVnFJQVFvQWpnZ0FuUkJIM1pxSWdKQkEwWUVRQ0FFS0FKa1FRRnJEQUVMSUFKQkFuUWdCR29vQW1RTElnTkZJQU5xSVJBZ0FrRUJSd1JBSUFRZ0JDZ0NhRFlDYkFzTElBUWdCQ2dDWkRZQ2FDQUVJQkEyQW1RTHB5RU1JRUZDZ0lEOEI0TlFSUVJBSUFRZ0JDZ0NQQ0lDSUJOcU5nSThJQVFvQWpnZ0FuUkJBQ0FnYTNZZ0RHb2hEQXNnQ2lBVGFrRVVUd1JBSUFSQk9Hb1FEeG9MSUVCQ2dJRDhCNE5RUlFSQUlBUWdCQ2dDUENJQ0lBcHFOZ0k4SUFRb0FqZ2dBblJCQUNBamEzWWdDMm9oQ3dzZ0JFRTRhaEFQR2lBRUlBUW9BamdpQWtFQUlBWkJHSFlpQXlBRUtBSThhaUlLYTNZZ0EwRUNkRUdnSFdvb0FnQnhJQVpCLy84RGNXbzJBa3dnQkNBS0lBMUJHSFlpQTJvaUJqWUNQQ0FFSUFOQkFuUkJvQjFxS0FJQUlBSkJBQ0FHYTNaeElBMUIvLzhEY1dvMkFsd2dCRUU0YWhBUEdpQUVJRUtuSWdKQkdIWWlBeUFFS0FJOGFpSUdOZ0k4SUFRZ0EwRUNkRUdnSFdvb0FnQWdCQ2dDT0VFQUlBWnJkbkVnQWtILy93TnhhallDVkFKQUFrQUNRQ0FFS0FMY0FTSURJQVJCOEFCcUlBaEJCM0ZCREd4cUloTW9BZ0FpRVdvaUl5QVhTdzBBSUFjZ0V5Z0NCQ0lOSUJGcUlncHFJQ0ZMRFFBZ0NrRWdhaUFXSUFkclRRMEJDeUFFSUJNb0FnZzJBaGdnQkNBVEtRSUFOd01RSUFjZ0ZpQUVRUkJxSUFSQjNBRnFJQmNnRWlBWUlCb1FIeUVLREFFTElBY2dFV29oQWlBVEtBSUlJUVlnQnlBREtRQUFOd0FBSUFjZ0F5a0FDRGNBQ0FKQUlCRkJFVWtOQUNBSElBTXBBQkEzQUJBZ0J5QURLUUFZTndBWUlCRkJFR3RCRVVnTkFDQURRUkJxSVFNZ0IwRWdhaUVSQTBBZ0VTQURLUUFRTndBQUlCRWdBeWtBR0RjQUNDQVJJQU1wQUNBM0FCQWdFU0FES1FBb053QVlJQU5CSUdvaEF5QVJRU0JxSWhFZ0Fra05BQXNMSUFJZ0Jtc2hBeUFFSUNNMkF0d0JJQUlnRW1zZ0Jra0VRQ0FHSUFJZ0dHdExEUWNnR2lBYUlBTWdFbXNpQTJvaUVTQU5hazhFUUNBQ0lCRWdEUkFLR2d3Q0N5QURJQTFxSVEwZ0FpQVJRUUFnQTJzUUNpQURheUVDSUJJaEF3c2dCa0VRVHdSQUlBSWdBeWtBQURjQUFDQUNJQU1wQUFnM0FBZ2dEVUVSU0EwQklBSWdEV29oQmlBQ1FSQnFJUUlEUUNBQ0lBTXBBQkEzQUFBZ0FpQURLUUFZTndBSUlBSWdBeWtBSURjQUVDQUNJQU1wQUNnM0FCZ2dBMEVnYWlFRElBSkJJR29pQWlBR1NRMEFDd3dCQ3dKQUlBWkJCMDBFUUNBQ0lBTXRBQUE2QUFBZ0FpQURMUUFCT2dBQklBSWdBeTBBQWpvQUFpQUNJQU10QUFNNkFBTWdBaUFESUFaQkFuUWlCa0hBSG1vb0FnQnFJZ01vQUFBMkFBUWdBeUFHUWVBZWFpZ0NBR3NoQXd3QkN5QUNJQU1wQUFBM0FBQUxJQTFCQ1VrTkFDQUNJQTFxSVJFZ0FrRUlhaUlHSUFOQkNHb2lBMnRCRDB3RVFBTkFJQVlnQXlrQUFEY0FBQ0FEUVFocUlRTWdCa0VJYWlJR0lCRkpEUUFNQWdzQUN5QUdJQU1wQUFBM0FBQWdCaUFES1FBSU53QUlJQTFCR1VnTkFDQUNRUmhxSVFJRFFDQUNJQU1wQUJBM0FBQWdBaUFES1FBWU53QUlJQUlnQXlrQUlEY0FFQ0FDSUFNcEFDZzNBQmdnQTBFZ2FpRURJQUpCSUdvaUFpQVJTUTBBQ3dzZ0NrR0lmMHNFUUNBS0lRa01CZ1VnRXlBUU5nSUlJQk1nRERZQ0JDQVRJQXMyQWdBZ0NFRUJhaUVJSUFjZ0Ntb2hCeUFMSUJscUlBeHFJUmtNQWdzQUN3c2dDQ0FQU0EwRElBZ2dIMnNoQmdOQUFrQWdCaUFQVGdSQVFRQWhBd05BSUFOQkEwWU5BaUFGSUFOQkFuUWlBbXBCck5BQmFpQUNJQVJxS0FKa05nSUFJQU5CQVdvaEF3d0FDd0FMQWtBQ1FBSkFJQVFvQXR3QklnTWdCRUh3QUdvZ0JrRUhjVUVNYkdvaUNDZ0NBQ0lNYWlJUUlCZExEUUFnQnlBSUtBSUVJZ3NnREdvaUNtb2dJVXNOQUNBS1FTQnFJQllnQjJ0TkRRRUxJQVFnQ0NnQ0NEWUNLQ0FFSUFncEFnQTNBeUFnQnlBV0lBUkJJR29nQkVIY0FXb2dGeUFTSUJnZ0doQWZJUW9NQVFzZ0J5QU1haUVDSUFnb0FnZ2hDQ0FISUFNcEFBQTNBQUFnQnlBREtRQUlOd0FJQWtBZ0RFRVJTUTBBSUFjZ0F5a0FFRGNBRUNBSElBTXBBQmczQUJnZ0RFRVFhMEVSU0EwQUlBTkJFR29oQXlBSFFTQnFJUXdEUUNBTUlBTXBBQkEzQUFBZ0RDQURLUUFZTndBSUlBd2dBeWtBSURjQUVDQU1JQU1wQUNnM0FCZ2dBMEVnYWlFRElBeEJJR29pRENBQ1NRMEFDd3NnQWlBSWF5RURJQVFnRURZQzNBRWdBaUFTYXlBSVNRUkFJQWdnQWlBWWEwc05CeUFhSUJvZ0F5QVNheUlEYWlJTUlBdHFUd1JBSUFJZ0RDQUxFQW9hREFJTElBTWdDMm9oQ3lBQ0lBeEJBQ0FEYXhBS0lBTnJJUUlnRWlFREN5QUlRUkJQQkVBZ0FpQURLUUFBTndBQUlBSWdBeWtBQ0RjQUNDQUxRUkZJRFFFZ0FpQUxhaUVJSUFKQkVHb2hBZ05BSUFJZ0F5a0FFRGNBQUNBQ0lBTXBBQmczQUFnZ0FpQURLUUFnTndBUUlBSWdBeWtBS0RjQUdDQURRU0JxSVFNZ0FrRWdhaUlDSUFoSkRRQUxEQUVMQWtBZ0NFRUhUUVJBSUFJZ0F5MEFBRG9BQUNBQ0lBTXRBQUU2QUFFZ0FpQURMUUFDT2dBQ0lBSWdBeTBBQXpvQUF5QUNJQU1nQ0VFQ2RDSUlRY0FlYWlnQ0FHb2lBeWdBQURZQUJDQURJQWhCNEI1cUtBSUFheUVEREFFTElBSWdBeWtBQURjQUFBc2dDMEVKU1EwQUlBSWdDMm9oRENBQ1FRaHFJZ2dnQTBFSWFpSURhMEVQVEFSQUEwQWdDQ0FES1FBQU53QUFJQU5CQ0dvaEF5QUlRUWhxSWdnZ0RFa05BQXdDQ3dBTElBZ2dBeWtBQURjQUFDQUlJQU1wQUFnM0FBZ2dDMEVaU0EwQUlBSkJHR29oQWdOQUlBSWdBeWtBRURjQUFDQUNJQU1wQUJnM0FBZ2dBaUFES1FBZ053QVFJQUlnQXlrQUtEY0FHQ0FEUVNCcUlRTWdBa0VnYWlJQ0lBeEpEUUFMQ3lBS1FZaC9Td1JBSUFvaENRd0dCU0FHUVFGcUlRWWdCeUFLYWlFSERBSUxBQXNMSUFRb0F0d0JJUU1MUWJwL0lRa2dGeUFEYXlJQ0lCWWdCMnRMRFFJZ0J3Ui9JQWNnQXlBQ0VBSWdBbW9GUVFBTElBNXJJUWtNQWdzZ0JVRUFOZ0tjNndFTElBUWdCU2dDOE9vQklnTTJBdHdCSUFrZ0Rtb2hEQ0FESUFVb0FvRHJBV29oRUFKQUlBOUZCRUFnRGlFR0RBRUxJQVVvQXJqcEFTRU5JQVVvQXJUcEFTRVRJQVVvQXJEcEFTRVNJQVZCQVRZQ2hPb0JRUUFoQXdOQUlBTkJBMGNFUUNBRUlBTkJBblFpQW1vZ0FpQUZha0dzMEFGcUtBSUFOZ0tjQVNBRFFRRnFJUU1NQVFzTFFXd2hDU0FFUWZBQWFpSUNJQWNnQmhBTlFZaC9TdzBCSURFZ0FpQUZLQUlBRUI0Z01DQUNJQVVvQWdnUUhpQXZJQUlnQlNnQ0JCQWVJQXhCSUdzaEdDQU9JUVlEUUNBRUtBS0lBU0FFS0FLRUFVRURkR29wQWdBaVFLY2lDa0VRZGlJWlFmOEJjU0VMSUFRb0FwZ0JJQVFvQXBRQlFRTjBhaWtDQUNKQnB5SVdRUkIySWg5Qi93RnhJUm9nQkNnQ2tBRWdCQ2dDakFGQkEzUnFLUUlBSWtKQ0lJaW5JUWNnUVVJZ2lDQkFRaUNJcHlFREFrQWdRa0lRaUtjaUNFSC9BWEVpQWtFQ1R3UkFBa0FnQWtFWlNTQS9Rb0dBZ0JCVWNrVUVRQ0FFUVNBZ0JDZ0NkQ0lJYXlJUklBSWdBaUFSU3hzaUZ5QUlhallDZENBSElBUW9BbkFnQ0hSQkFDQVhhM1lnQWlBWGF5SVhkR29oQ0NBRVFmQUFhaEFQR2lBQ0lCRk5EUUVnQkNBRUtBSjBJZ0lnRjJvMkFuUWdCQ2dDY0NBQ2RFRUFJQmRyZGlBSWFpRUlEQUVMSUFRZ0FpQUVLQUowSWhGcU5nSjBJQVFvQW5BZ0VYUkJBQ0FJYTNZZ0Iyb2hDQ0FFUWZBQWFoQVBHZ3NnQkNrQ25BRWhSQ0FFSUFnMkFwd0JJQVFnUkRjQ29BRU1BUXNDUUNBQ1JRUkFJQU1FUUNBRUtBS2NBU0VJREFNTElBUW9BcUFCSVFnTUFRc2dCQ0FFS0FKMElnSkJBV28yQW5RQ2Z5QUhJQU5GYWlBRUtBSndJQUowUVI5MmFpSUNRUU5HQkVBZ0JDZ0NuQUZCQVdzTUFRc2dBa0VDZENBRWFpZ0NuQUVMSWdkRklBZHFJUWdnQWtFQlJ3UkFJQVFnQkNnQ29BRTJBcVFCQ3dzZ0JDQUVLQUtjQVRZQ29BRWdCQ0FJTmdLY0FRdW5JUUlnUVVLQWdQd0hnMUJGQkVBZ0JDQUVLQUowSWdjZ0dtbzJBblFnQkNnQ2NDQUhkRUVBSUI5cmRpQUNhaUVDQ3lBTElCcHFRUlJQQkVBZ0JFSHdBR29RRHhvTElFQkNnSUQ4QjROUVJRUkFJQVFnQkNnQ2RDSUhJQXRxTmdKMElBUW9BbkFnQjNSQkFDQVphM1lnQTJvaEF3c2dCRUh3QUdvUUR4b2dCQ0FFS0FKd0lnZEJBQ0FLUVJoMklnc2dCQ2dDZEdvaUdtdDJJQXRCQW5SQm9CMXFLQUlBY1NBS1FmLy9BM0ZxTmdLRUFTQUVJQm9nRmtFWWRpSUthaUlMTmdKMElBUWdDa0VDZEVHZ0hXb29BZ0FnQjBFQUlBdHJkbkVnRmtILy93TnhhallDbEFFZ0JFSHdBR29RRHhvZ0JDQkNweUlIUVJoMklnb2dCQ2dDZEdvaUN6WUNkQ0FFSUFwQkFuUkJvQjFxS0FJQUlBUW9BbkJCQUNBTGEzWnhJQWRCLy84RGNXbzJBb3dCSUFRZ0F6WUNPQ0FFSUFJMkFqd2dCQ0FJTmdKQUFrQUNRQUpBSUFRb0F0d0JJZ3NnQTJvaUZpQVFTdzBBSUFZZ0FpQURhaUlLYWlBWVN3MEFJQXBCSUdvZ0RDQUdhMDBOQVFzZ0JDQUVRVUJyS0FJQU5nSUlJQVFnQkNrRE9EY0RBQ0FHSUF3Z0JDQUVRZHdCYWlBUUlCSWdFeUFORUI4aENnd0JDeUFESUFacUlRY2dCaUFMS1FBQU53QUFJQVlnQ3lrQUNEY0FDQUpBSUFOQkVVa05BQ0FHSUFzcEFCQTNBQkFnQmlBTEtRQVlOd0FZSUFOQkVHdEJFVWdOQUNBTFFSQnFJUU1nQmtFZ2FpRUxBMEFnQ3lBREtRQVFOd0FBSUFzZ0F5a0FHRGNBQ0NBTElBTXBBQ0EzQUJBZ0N5QURLUUFvTndBWUlBTkJJR29oQXlBTFFTQnFJZ3NnQjBrTkFBc0xJQWNnQ0dzaEF5QUVJQlkyQXR3QklBY2dFbXNnQ0VrRVFDQUlJQWNnRTJ0TERRUWdEU0FOSUFNZ0Vtc2lBMm9pQ3lBQ2FrOEVRQ0FISUFzZ0FoQUtHZ3dDQ3lBSElBdEJBQ0FEYXhBS0lBUWdBaUFEYWlJQ05nSThJQU5ySVFjZ0VpRURDeUFJUVJCUEJFQWdCeUFES1FBQU53QUFJQWNnQXlrQUNEY0FDQ0FDUVJGSURRRWdBaUFIYWlFSUlBZEJFR29oQWdOQUlBSWdBeWtBRURjQUFDQUNJQU1wQUJnM0FBZ2dBaUFES1FBZ053QVFJQUlnQXlrQUtEY0FHQ0FEUVNCcUlRTWdBa0VnYWlJQ0lBaEpEUUFMREFFTEFrQWdDRUVIVFFSQUlBY2dBeTBBQURvQUFDQUhJQU10QUFFNkFBRWdCeUFETFFBQ09nQUNJQWNnQXkwQUF6b0FBeUFISUFNZ0NFRUNkQ0lJUWNBZWFpZ0NBR29pQXlnQUFEWUFCQ0FESUFoQjRCNXFLQUlBYXlFRERBRUxJQWNnQXlrQUFEY0FBQXNnQWtFSlNRMEFJQUlnQjJvaEN5QUhRUWhxSWdnZ0EwRUlhaUlEYTBFUFRBUkFBMEFnQ0NBREtRQUFOd0FBSUFOQkNHb2hBeUFJUVFocUlnZ2dDMGtOQUF3Q0N3QUxJQWdnQXlrQUFEY0FBQ0FJSUFNcEFBZzNBQWdnQWtFWlNBMEFJQWRCR0dvaEFnTkFJQUlnQXlrQUVEY0FBQ0FDSUFNcEFCZzNBQWdnQWlBREtRQWdOd0FRSUFJZ0F5a0FLRGNBR0NBRFFTQnFJUU1nQWtFZ2FpSUNJQXRKRFFBTEN5QUtRWWgvU3dSQUlBb2hDUXdEQ3lBR0lBcHFJUVlnQkVId0FHb1FEeUVESUE5QkFXc2lEdzBBQzBFQUlRSWdBMEVDU1EwQkEwQWdBa0VEUndSQUlBVWdBa0VDZENJRGFrR3MwQUZxSUFNZ0JHb29BcHdCTmdJQUlBSkJBV29oQWd3QkN3c2dCQ2dDM0FFaEF3dEJ1bjhoQ1NBUUlBTnJJZ0lnRENBR2Ewc05BQ0FHQkg4Z0JpQURJQUlRQWlBQ2FnVkJBQXNnRG1zaENRc2dDVUdJZjBzTkJnc0NRQ0FGS0FMczZnRkZEUUFnQlNBRktRT0k2Z0VnQ2ExOE53T0k2Z0VDUUNBRktBTFE2Z0VpQWlBSmFpSUlRUjlOQkVBZ0RrVU5BU0FDSUNKcUlBNGdDUkFDR2lBRktBTFE2Z0VnQ1dvaENBd0JDeUFPSVFNZ0FnUkFJQUlnSW1vZ0EwRWdJQUpyRUFJYUlBVW9BdERxQVNFQ0lBVkJBRFlDME9vQklBVWdCU2tEa09vQklBVXBBTERxQVVMUDF0Tyswc2VyMlVKK2ZFSWZpVUtIbGErdm1MYmVtNTUvZmpjRGtPb0JJQVVnQlNrRG1Pb0JJQVVwQUxqcUFVTFAxdE8rMHNlcjJVSitmRUlmaVVLSGxhK3ZtTGJlbTU1L2ZqY0RtT29CSUFVZ0JTa0RvT29CSUFVcEFNRHFBVUxQMXRPKzBzZXIyVUorZkVJZmlVS0hsYSt2bUxiZW01NS9mamNEb09vQklBVWdCU2tEcU9vQklBVXBBTWpxQVVMUDF0Tyswc2VyMlVKK2ZFSWZpVUtIbGErdm1MYmVtNTUvZmpjRHFPb0JJQU1nQW10QklHb2hBd3NnQ1NBT2FpSUNJQU5CSUdwUEJFQWdBa0VnYXlFR0lBVXBBNmpxQVNFL0lBVXBBNkRxQVNGQUlBVXBBNWpxQVNGQklBVXBBNURxQVNGQ0EwQWdBeWtBR0VMUDF0Tyswc2VyMlVKK0lEOThRaCtKUW9lVnI2K1l0dDZibm45K0lUOGdBeWtBRUVMUDF0Tyswc2VyMlVKK0lFQjhRaCtKUW9lVnI2K1l0dDZibm45K0lVQWdBeWtBQ0VMUDF0Tyswc2VyMlVKK0lFRjhRaCtKUW9lVnI2K1l0dDZibm45K0lVRWdBeWtBQUVMUDF0Tyswc2VyMlVKK0lFSjhRaCtKUW9lVnI2K1l0dDZibm45K0lVSWdBMEVnYWlJRElBWk5EUUFMSUFVZ1B6Y0RxT29CSUFVZ1FEY0RvT29CSUFVZ1FUY0RtT29CSUFVZ1FqY0RrT29CQ3lBQ0lBTk5EUUVnSWlBRElBSWdBMnNpQ0JBQ0dnc2dCU0FJTmdMUTZnRUxJRFVnRldzaEF5QVZJQnRxSVFJZ0NTQU9haUVPSUFRb0FqQkZEUUFMSUNrcEF3QWlQMEovVVNBL0lBNGdIV3VzVVhKRkJFQkJiQ0VKREFZTElBVW9BdURwQVFSQVFXb2hDU0FEUVFSSkRRWWdCU2dDNk9vQlJRUkFJQ0lnQlNnQzBPb0JhaUVLQW40Z0JTa0RpT29CSWo5Q0lGb0VRQ0FGS1FPWTZnRWlRRUlIaVNBRktRT1E2Z0VpUVVJQmlYd2dCU2tEb09vQklrSkNESWw4SUFVcEE2anFBU0pEUWhLSmZDQkJRcy9XMDc3U3g2dlpRbjVDSDRsQ2g1V3ZyNWkyM3B1ZWYzNkZRb2VWcjYrWXR0NmJubjkrUXAyanRlcURzWTJLK2dCOUlFQkN6OWJUdnRMSHE5bENma0lmaVVLSGxhK3ZtTGJlbTU1L2ZvVkNoNVd2cjVpMjNwdWVmMzVDbmFPMTZvT3hqWXI2QUgwZ1FrTFAxdE8rMHNlcjJVSitRaCtKUW9lVnI2K1l0dDZibm45K2hVS0hsYSt2bUxiZW01NS9ma0tkbzdYcWc3R05pdm9BZlNCRFFzL1cwNzdTeDZ2WlFuNUNINGxDaDVXdnI1aTIzcHVlZjM2RlFvZVZyNitZdHQ2Ym5uOStRcDJqdGVxRHNZMksrZ0I5REFFTElBVXBBNkRxQVVMRno5bXk4ZVc2NmlkOEN5QS9mQ0UvSUNJaEJnTkFJQW9nQmtFSWFpSUhUd1JBSUFZcEFBQkN6OWJUdnRMSHE5bENma0lmaVVLSGxhK3ZtTGJlbTU1L2ZpQS9oVUliaVVLSGxhK3ZtTGJlbTU1L2ZrS2RvN1hxZzdHTml2b0FmU0UvSUFjaEJnd0JDd3NDUUNBS0lBWkJCR29pQ0VrRVFDQUdJUWdNQVFzZ0JqVUFBRUtIbGErdm1MYmVtNTUvZmlBL2hVSVhpVUxQMXRPKzBzZXIyVUorUXZuejNmR1o5cG1yRm53aFB3c0RRQ0FJSUFwSkJFQWdDREVBQUVMRno5bXk4ZVc2NmlkK0lEK0ZRZ3VKUW9lVnI2K1l0dDZibm45K0lUOGdDRUVCYWlFSURBRUxDeUFDS0FBQUlEOUNJWWdnUDRWQ3o5YlR2dExIcTlsQ2ZpSS9RaDJJSUQrRlF2bnozZkdaOXBtckZuNGlQMElnaUNBL2hhZEhEUWNMSUFOQkJHc2hBeUFDUVFScUlRSUxJQTRnSFdzaUNVR0pmMDhOQkNBQklBbHJJUUVnQ1NBZGFpRWRRUUVoUGd3QkN3dEJ1SDhoQnlBRERRUWdIU0FBYXlFSERBUUxRV3doQ1F3QkMwRzRmeUVKQzBHNGZ5RUhJQWxCZGtZZ1BuRU5BUXNnQ1NFSEN5Z0NBQTBBSUFWQi9Pb0JhaWdDQUNFQklBVkIrT29CYWlnQ0FDRUFJQVVRR0NBRktBS3c2d0VnQUNBQkVCTWdCVUVBTmdLdzZ3RWdCU2dDcE9zQklnSUVRQUpBQWtBQ1FBSkFJQUlvQWdBaUF3UkFJQUJGRFFJZ0FTQURJQUFSQWdBTUFRc2dBRVVOQWdzZ0FTQUNJQUFSQWdBTUFnc2dBeEFHQ3lBQ0VBWUxJQVZCQURZQ3BPc0JDeUFBQkVBZ0FTQUZJQUFSQWdBTUFRc2dCUkFHQ3lBRVFlQUJhaVFBSUFjTEM2Z1ZDUUJCaUFnTERRRUFBQUFCQUFBQUFnQUFBQUlBUWFBSUM3TUdBUUFBQUFFQUFBQUNBQUFBQWdBQUFDWUFBQUNDQUFBQUlRVUFBRW9BQUFCbkNBQUFKZ0FBQU1BQkFBQ0FBQUFBU1FVQUFFb0FBQUMrQ0FBQUtRQUFBQ3dDQUFDQUFBQUFTUVVBQUVvQUFBQytDQUFBTHdBQUFNb0NBQUNBQUFBQWlnVUFBRW9BQUFDRUNRQUFOUUFBQUhNREFBQ0FBQUFBblFVQUFFb0FBQUNnQ1FBQVBRQUFBSUVEQUFDQUFBQUE2d1VBQUVzQUFBQStDZ0FBUkFBQUFKNERBQUNBQUFBQVRRWUFBRXNBQUFDcUNnQUFTd0FBQUxNREFBQ0FBQUFBd1FZQUFFMEFBQUFmRFFBQVRRQUFBRk1FQUFDQUFBQUFJd2dBQUZFQUFBQ21Ed0FBVkFBQUFKa0VBQUNBQUFBQVN3a0FBRmNBQUFDeEVnQUFXQUFBQU5vRUFBQ0FBQUFBYndrQUFGMEFBQUFqRkFBQVZBQUFBRVVGQUFDQUFBQUFWQW9BQUdvQUFBQ01GQUFBYWdBQUFLOEZBQUNBQUFBQWRna0FBSHdBQUFCT0VBQUFmQUFBQU5JQ0FBQ0FBQUFBWXdjQUFKRUFBQUNRQndBQWtnQUFBQUFBQUFBQkFBQUFBUUFBQUFVQUFBQU5BQUFBSFFBQUFEMEFBQUI5QUFBQS9RQUFBUDBCQUFEOUF3QUEvUWNBQVAwUEFBRDlId0FBL1Q4QUFQMS9BQUQ5L3dBQS9mOEJBUDMvQXdEOS93Y0EvZjhQQVAzL0h3RDkvejhBL2Y5L0FQMy8vd0Q5Ly84Qi9mLy9BLzMvL3dmOS8vOFAvZi8vSC8zLy96LzkvLzkvQUFBQUFBRUFBQUFDQUFBQUF3QUFBQVFBQUFBRkFBQUFCZ0FBQUFjQUFBQUlBQUFBQ1FBQUFBb0FBQUFMQUFBQURBQUFBQTBBQUFBT0FBQUFEd0FBQUJBQUFBQVJBQUFBRWdBQUFCTUFBQUFVQUFBQUZRQUFBQllBQUFBWEFBQUFHQUFBQUJrQUFBQWFBQUFBR3dBQUFCd0FBQUFkQUFBQUhnQUFBQjhBQUFBREFBQUFCQUFBQUFVQUFBQUdBQUFBQndBQUFBZ0FBQUFKQUFBQUNnQUFBQXNBQUFBTUFBQUFEUUFBQUE0QUFBQVBBQUFBRUFBQUFCRUFBQUFTQUFBQUV3QUFBQlFBQUFBVkFBQUFGZ0FBQUJjQUFBQVlBQUFBR1FBQUFCb0FBQUFiQUFBQUhBQUFBQjBBQUFBZUFBQUFId0FBQUNBQUFBQWhBQUFBSWdBQUFDTUFBQUFsQUFBQUp3QUFBQ2tBQUFBckFBQUFMd0FBQURNQUFBQTdBQUFBUXdBQUFGTUFBQUJqQUFBQWd3QUFBQU1CQUFBREFnQUFBd1FBQUFNSUFBQURFQUFBQXlBQUFBTkFBQUFEZ0FBQUF3QUJBRUhnRHd0UkFRQUFBQUVBQUFBQkFBQUFBUUFBQUFJQUFBQUNBQUFBQXdBQUFBTUFBQUFFQUFBQUJBQUFBQVVBQUFBSEFBQUFDQUFBQUFrQUFBQUtBQUFBQ3dBQUFBd0FBQUFOQUFBQURnQUFBQThBQUFBUUFFSEVFQXVMQVFFQUFBQUNBQUFBQXdBQUFBUUFBQUFGQUFBQUJnQUFBQWNBQUFBSUFBQUFDUUFBQUFvQUFBQUxBQUFBREFBQUFBMEFBQUFPQUFBQUR3QUFBQkFBQUFBU0FBQUFGQUFBQUJZQUFBQVlBQUFBSEFBQUFDQUFBQUFvQUFBQU1BQUFBRUFBQUFDQUFBQUFBQUVBQUFBQ0FBQUFCQUFBQUFnQUFBQVFBQUFBSUFBQUFFQUFBQUNBQUFBQUFBRUFRWkFTQytZRUFRQUFBQUVBQUFBQkFBQUFBUUFBQUFJQUFBQUNBQUFBQXdBQUFBTUFBQUFFQUFBQUJnQUFBQWNBQUFBSUFBQUFDUUFBQUFvQUFBQUxBQUFBREFBQUFBMEFBQUFPQUFBQUR3QUFBQkFBQUFBQkFBQUFCQUFBQUFnQUFBQUFBQUFBQVFBQkFRWUFBQUFBQUFBRUFBQUFBQkFBQUFRQUFBQUFJQUFBQlFFQUFBQUFBQUFGQXdBQUFBQUFBQVVFQUFBQUFBQUFCUVlBQUFBQUFBQUZCd0FBQUFBQUFBVUpBQUFBQUFBQUJRb0FBQUFBQUFBRkRBQUFBQUFBQUFZT0FBQUFBQUFCQlJBQUFBQUFBQUVGRkFBQUFBQUFBUVVXQUFBQUFBQUNCUndBQUFBQUFBTUZJQUFBQUFBQUJBVXdBQUFBSUFBR0JVQUFBQUFBQUFjRmdBQUFBQUFBQ0FZQUFRQUFBQUFLQmdBRUFBQUFBQXdHQUJBQUFDQUFBQVFBQUFBQUFBQUFCQUVBQUFBQUFBQUZBZ0FBQUNBQUFBVUVBQUFBQUFBQUJRVUFBQUFnQUFBRkJ3QUFBQUFBQUFVSUFBQUFJQUFBQlFvQUFBQUFBQUFGQ3dBQUFBQUFBQVlOQUFBQUlBQUJCUkFBQUFBQUFBRUZFZ0FBQUNBQUFRVVdBQUFBQUFBQ0JSZ0FBQUFnQUFNRklBQUFBQUFBQXdVb0FBQUFBQUFHQkVBQUFBQVFBQVlFUUFBQUFDQUFCd1dBQUFBQUFBQUpCZ0FDQUFBQUFBc0dBQWdBQURBQUFBUUFBQUFBRUFBQUJBRUFBQUFnQUFBRkFnQUFBQ0FBQUFVREFBQUFJQUFBQlFVQUFBQWdBQUFGQmdBQUFDQUFBQVVJQUFBQUlBQUFCUWtBQUFBZ0FBQUZDd0FBQUNBQUFBVU1BQUFBQUFBQUJnOEFBQUFnQUFFRkVnQUFBQ0FBQVFVVUFBQUFJQUFDQlJnQUFBQWdBQUlGSEFBQUFDQUFBd1VvQUFBQUlBQUVCVEFBQUFBQUFCQUdBQUFCQUFBQUR3WUFnQUFBQUFBT0JnQkFBQUFBQUEwR0FDQUFRWUFYQzRjQ0FRQUJBUVVBQUFBQUFBQUZBQUFBQUFBQUJnUTlBQUFBQUFBSkJmMEJBQUFBQUE4Ri9YOEFBQUFBRlFYOS94OEFBQUFEQlFVQUFBQUFBQWNFZlFBQUFBQUFEQVg5RHdBQUFBQVNCZjMvQXdBQUFCY0YvZjkvQUFBQUJRVWRBQUFBQUFBSUJQMEFBQUFBQUE0Ri9UOEFBQUFBRkFYOS93OEFBQUFDQlFFQUFBQVFBQWNFZlFBQUFBQUFDd1g5QndBQUFBQVJCZjMvQVFBQUFCWUYvZjgvQUFBQUJBVU5BQUFBRUFBSUJQMEFBQUFBQUEwRi9SOEFBQUFBRXdYOS93Y0FBQUFCQlFFQUFBQVFBQVlFUFFBQUFBQUFDZ1g5QXdBQUFBQVFCZjMvQUFBQUFCd0YvZi8vRHdBQUd3WDkvLzhIQUFBYUJmMy8vd01BQUJrRi9mLy9BUUFBR0FYOS8vOEFRWkFaQzRZRUFRQUJBUVlBQUFBQUFBQUdBd0FBQUFBQUFBUUVBQUFBSUFBQUJRVUFBQUFBQUFBRkJnQUFBQUFBQUFVSUFBQUFBQUFBQlFrQUFBQUFBQUFGQ3dBQUFBQUFBQVlOQUFBQUFBQUFCaEFBQUFBQUFBQUdFd0FBQUFBQUFBWVdBQUFBQUFBQUJoa0FBQUFBQUFBR0hBQUFBQUFBQUFZZkFBQUFBQUFBQmlJQUFBQUFBQUVHSlFBQUFBQUFBUVlwQUFBQUFBQUNCaThBQUFBQUFBTUdPd0FBQUFBQUJBWlRBQUFBQUFBSEJvTUFBQUFBQUFrR0F3SUFBQkFBQUFRRUFBQUFBQUFBQkFVQUFBQWdBQUFGQmdBQUFBQUFBQVVIQUFBQUlBQUFCUWtBQUFBQUFBQUZDZ0FBQUFBQUFBWU1BQUFBQUFBQUJnOEFBQUFBQUFBR0VnQUFBQUFBQUFZVkFBQUFBQUFBQmhnQUFBQUFBQUFHR3dBQUFBQUFBQVllQUFBQUFBQUFCaUVBQUFBQUFBRUdJd0FBQUFBQUFRWW5BQUFBQUFBQ0Jpc0FBQUFBQUFNR013QUFBQUFBQkFaREFBQUFBQUFGQm1NQUFBQUFBQWdHQXdFQUFDQUFBQVFFQUFBQU1BQUFCQVFBQUFBUUFBQUVCUUFBQUNBQUFBVUhBQUFBSUFBQUJRZ0FBQUFnQUFBRkNnQUFBQ0FBQUFVTEFBQUFBQUFBQmc0QUFBQUFBQUFHRVFBQUFBQUFBQVlVQUFBQUFBQUFCaGNBQUFBQUFBQUdHZ0FBQUFBQUFBWWRBQUFBQUFBQUJpQUFBQUFBQUJBR0F3QUJBQUFBRHdZRGdBQUFBQUFPQmdOQUFBQUFBQTBHQXlBQUFBQUFEQVlERUFBQUFBQUxCZ01JQUFBQUFBb0dBd1FBUWFRZEM5a0JBUUFBQUFNQUFBQUhBQUFBRHdBQUFCOEFBQUEvQUFBQWZ3QUFBUDhBQUFEL0FRQUEvd01BQVA4SEFBRC9Ed0FBL3g4QUFQOC9BQUQvZndBQS8vOEFBUC8vQVFELy93TUEvLzhIQVAvL0R3RC8veDhBLy84L0FQLy9md0QvLy84QS8vLy9BZi8vL3dQLy8vOEgvLy8vRC8vLy94Ly8vLzgvLy8vL2Z3QUFBQUFCQUFBQUFnQUFBQVFBQUFBQUFBQUFBZ0FBQUFRQUFBQUlBQUFBQUFBQUFBRUFBQUFDQUFBQUFRQUFBQVFBQUFBRUFBQUFCQUFBQUFRQUFBQUlBQUFBQ0FBQUFBZ0FBQUFIQUFBQUNBQUFBQWtBQUFBS0FBQUFDd0JCZ0I4TEE0QVJBUT09Ijt2YXIgc2U9bmV3IEpBLENlPSExO2FzeW5jIGZ1bmN0aW9uIF9JKEEsdCxlKXtsZXQgST1udWxsO3R5cGVvZiBBIT0ic3RyaW5nIj9JPUEuaHJlZjpBLnN0YXJ0c1dpdGgoImh0dHAiKT9JPUE6ST1gJHt0fS8ke0F9YCxJLmVuZHNXaXRoKCIuanMiKSYmKEk9SS5zdWJzdHJpbmcoMCxJLmxlbmd0aC0zKSksSS5lbmRzV2l0aCgiLndhc20iKSYmKEk9SS5zdWJzdHJpbmcoMCxJLmxlbmd0aC01KSk7bGV0IHI9YCR7SX0ud2FzbWAsbz1hd2FpdCBMQS5nZXQoYCR7cn0uenN0YCx7cmVzcG9uc2VUeXBlOiJhcnJheWJ1ZmZlciIscGFyYW1zOmV9KTtDZXx8KGF3YWl0IHNlLmluaXQoKSxDZT0hMCk7bGV0IEM9c2UuZGVjb2RlKG5ldyBVaW50OEFycmF5KG8uZGF0YSkpLmJ1ZmZlcjtyZXR1cm4oYXdhaXQgaW1wb3J0KGAke0l9LmpzYCkpLmRlZmF1bHQoe3dhc21CaW5hcnk6Q30pfXZhciBCZT1fSTt2YXIgYkE9bmV3IE1hcDthc3luYyBmdW5jdGlvbiBYSShBLHQsZSl7bGV0IEk9QSxyPUEsbz1udWxsO3JldHVybiB0eXBlb2YgQSE9InN0cmluZyImJihJPW5ldyBVUkwoQS5ocmVmKSxyPUkuaHJlZiksYkEuaGFzKHIpP289YXdhaXQgYkEuZ2V0KHIpOihiQS5zZXQocixCZShJLHQsZSkpLG89YXdhaXQgYkEuZ2V0KHIpKSxvfXZhciBhZT1YSTt2YXIgekk9e1RleHRGaWxlOiJUZXh0RmlsZSIsQmluYXJ5RmlsZToiQmluYXJ5RmlsZSIsVGV4dFN0cmVhbToiVGV4dFN0cmVhbSIsQmluYXJ5U3RyZWFtOiJCaW5hcnlTdHJlYW0iLEltYWdlOiJJbWFnZSIsUG9pbnRTZXQ6IlBvaW50U2V0IixNZXNoOiJNZXNoIixQb2x5RGF0YToiUG9seURhdGEiLFRyYW5zZm9ybUxpc3Q6IlRyYW5zZm9ybUxpc3QiLEpzb25Db21wYXRpYmxlOiJKc29uQ29tcGF0aWJsZSJ9LGg9ekk7dmFyIHZJPXtJbnQ4OiJpbnQ4IixVSW50ODoidWludDgiLEludDE2OiJpbnQxNiIsVUludDE2OiJ1aW50MTYiLEludDMyOiJpbnQzMiIsVUludDMyOiJ1aW50MzIiLEludDY0OiJpbnQ2NCIsVUludDY0OiJ1aW50NjQiLFNpemVWYWx1ZVR5cGU6InVpbnQ2NCIsSWRlbnRpZmllclR5cGU6InVpbnQ2NCIsSW5kZXhWYWx1ZVR5cGU6ImludDY0IixPZmZzZXRWYWx1ZVR5cGU6ImludDY0In0sUj12STt2YXIgJEk9e0Zsb2F0MzI6ImZsb2F0MzIiLEZsb2F0NjQ6ImZsb2F0NjQiLFNwYWNlUHJlY2lzaW9uVHlwZToiZmxvYXQ2NCJ9LHo9JEk7ZnVuY3Rpb24gQXIoQSx0KXtsZXQgZT1udWxsO3N3aXRjaChBKXtjYXNlIFIuVUludDg6e2U9bmV3IFVpbnQ4QXJyYXkodCk7YnJlYWt9Y2FzZSBSLkludDg6e2U9bmV3IEludDhBcnJheSh0KTticmVha31jYXNlIFIuVUludDE2OntlPW5ldyBVaW50MTZBcnJheSh0KTticmVha31jYXNlIFIuSW50MTY6e2U9bmV3IEludDE2QXJyYXkodCk7YnJlYWt9Y2FzZSBSLlVJbnQzMjp7ZT1uZXcgVWludDMyQXJyYXkodCk7YnJlYWt9Y2FzZSBSLkludDMyOntlPW5ldyBJbnQzMkFycmF5KHQpO2JyZWFrfWNhc2UgUi5VSW50NjQ6e3R5cGVvZiBnbG9iYWxUaGlzLkJpZ1VpbnQ2NEFycmF5PT0iZnVuY3Rpb24iP2U9bmV3IEJpZ1VpbnQ2NEFycmF5KHQpOmU9bmV3IFVpbnQ4QXJyYXkodCk7YnJlYWt9Y2FzZSBSLkludDY0Ont0eXBlb2YgZ2xvYmFsVGhpcy5CaWdJbnQ2NEFycmF5PT0iZnVuY3Rpb24iP2U9bmV3IEJpZ0ludDY0QXJyYXkodCk6ZT1uZXcgVWludDhBcnJheSh0KTticmVha31jYXNlIHouRmxvYXQzMjp7ZT1uZXcgRmxvYXQzMkFycmF5KHQpO2JyZWFrfWNhc2Ugei5GbG9hdDY0OntlPW5ldyBGbG9hdDY0QXJyYXkodCk7YnJlYWt9Y2FzZSJudWxsIjp7ZT1udWxsO2JyZWFrfWNhc2UgbnVsbDp7ZT1udWxsO2JyZWFrfWRlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKCJUeXBlIGlzIG5vdCBzdXBwb3J0ZWQgYXMgYSBUeXBlZEFycmF5Iil9cmV0dXJuIGV9dmFyIEg9QXI7dmFyIGNlPXR5cGVvZiBnbG9iYWxUaGlzLlNoYXJlZEFycmF5QnVmZmVyPT0iZnVuY3Rpb24iLFFlPW5ldyBUZXh0RW5jb2RlcixFZT1uZXcgVGV4dERlY29kZXIoInV0Zi04Iik7ZnVuY3Rpb24gdHIoQSx0KXtsZXQgZT17ZmxhZ3M6InIiLGVuY29kaW5nOiJiaW5hcnkifSxJPUEuZnNfb3Blbih0LGUuZmxhZ3MpLG89QS5mc19zdGF0KHQpLnNpemUsZz1udWxsO2NlP2c9bmV3IFNoYXJlZEFycmF5QnVmZmVyKG8pOmc9bmV3IEFycmF5QnVmZmVyKG8pO2xldCBDPW5ldyBVaW50OEFycmF5KGcpO3JldHVybiBBLmZzX3JlYWQoSSxDLDAsbywwKSxBLmZzX2Nsb3NlKEkpLEN9ZnVuY3Rpb24gZmUoQSx0LGUpe2xldCBJPW51bGw7Y2U/ST1uZXcgU2hhcmVkQXJyYXlCdWZmZXIoZSk6ST1uZXcgQXJyYXlCdWZmZXIoZSk7bGV0IHI9bmV3IFVpbnQ4QXJyYXkoSSksbz1uZXcgVWludDhBcnJheShBLkhFQVBVOC5idWZmZXIsdCxlKTtyZXR1cm4gci5zZXQobykscn1mdW5jdGlvbiB5KEEsdCxlLEkpe2xldCByPTA7cmV0dXJuIHQhPT1udWxsJiYocj1BLmNjYWxsKCJpdGtfd2FzbV9pbnB1dF9hcnJheV9hbGxvYyIsIm51bWJlciIsWyJudW1iZXIiLCJudW1iZXIiLCJudW1iZXIiLCJudW1iZXIiXSxbMCxlLEksdC5idWZmZXIuYnl0ZUxlbmd0aF0pLEEuSEVBUFU4LnNldChuZXcgVWludDhBcnJheSh0LmJ1ZmZlcikscikpLHJ9ZnVuY3Rpb24gVChBLHQsZSl7bGV0IEk9SlNPTi5zdHJpbmdpZnkodCkscj1BLmxlbmd0aEJ5dGVzVVRGOChJKSsxLG89QS5jY2FsbCgiaXRrX3dhc21faW5wdXRfanNvbl9hbGxvYyIsIm51bWJlciIsWyJudW1iZXIiLCJudW1iZXIiLCJudW1iZXIiXSxbMCxlLHJdKTtBLnN0cmluZ1RvVVRGOChJLG8scil9ZnVuY3Rpb24gRihBLHQsZSxJKXtsZXQgcj1BLmNjYWxsKCJpdGtfd2FzbV9vdXRwdXRfYXJyYXlfYWRkcmVzcyIsIm51bWJlciIsWyJudW1iZXIiLCJudW1iZXIiLCJudW1iZXIiXSxbMCx0LGVdKSxvPUEuY2NhbGwoIml0a193YXNtX291dHB1dF9hcnJheV9zaXplIiwibnVtYmVyIixbIm51bWJlciIsIm51bWJlciIsIm51bWJlciJdLFswLHQsZV0pLGc9ZmUoQSxyLG8pO3JldHVybiBIKEksZy5idWZmZXIpfWZ1bmN0aW9uIHNBKEEsdCl7bGV0IGU9QS5jY2FsbCgiaXRrX3dhc21fb3V0cHV0X2pzb25fYWRkcmVzcyIsIm51bWJlciIsWyJudW1iZXIiLCJudW1iZXIiXSxbMCx0XSksST1BLlVURjhUb1N0cmluZyhlKTtyZXR1cm4gSlNPTi5wYXJzZShJKX1mdW5jdGlvbiBlcihBLHQsZSxJKXtJIT1udWxsJiZJLmxlbmd0aD4wJiZJLmZvckVhY2goZnVuY3Rpb24oYSxuKXtzd2l0Y2goYS50eXBlKXtjYXNlIGguVGV4dFN0cmVhbTp7bGV0IHM9UWUuZW5jb2RlKGEuZGF0YS5kYXRhKSxmPXkoQSxzLG4sMCksQj17c2l6ZTpzLmJ1ZmZlci5ieXRlTGVuZ3RoLGRhdGE6YGRhdGE6YXBwbGljYXRpb24vdm5kLml0ay5hZGRyZXNzLDA6JHtmfWB9O1QoQSxCLG4pO2JyZWFrfWNhc2UgaC5Kc29uQ29tcGF0aWJsZTp7bGV0IHM9UWUuZW5jb2RlKEpTT04uc3RyaW5naWZ5KGEuZGF0YSkpLGY9eShBLHMsbiwwKSxCPXtzaXplOnMuYnVmZmVyLmJ5dGVMZW5ndGgsZGF0YTpgZGF0YTphcHBsaWNhdGlvbi92bmQuaXRrLmFkZHJlc3MsMDoke2Z9YH07VChBLEIsbik7YnJlYWt9Y2FzZSBoLkJpbmFyeVN0cmVhbTp7bGV0IHM9YS5kYXRhLmRhdGEsZj15KEEscyxuLDApLEI9e3NpemU6cy5idWZmZXIuYnl0ZUxlbmd0aCxkYXRhOmBkYXRhOmFwcGxpY2F0aW9uL3ZuZC5pdGsuYWRkcmVzcywwOiR7Zn1gfTtUKEEsQixuKTticmVha31jYXNlIGguVGV4dEZpbGU6e0EuZnNfd3JpdGVGaWxlKGEuZGF0YS5wYXRoLGEuZGF0YS5kYXRhKTticmVha31jYXNlIGguQmluYXJ5RmlsZTp7QS5mc193cml0ZUZpbGUoYS5kYXRhLnBhdGgsYS5kYXRhLmRhdGEpO2JyZWFrfWNhc2UgaC5JbWFnZTp7bGV0IHM9YS5kYXRhLGY9eShBLHMuZGF0YSxuLDApLEI9eShBLHMuZGlyZWN0aW9uLG4sMSksRT10eXBlb2Ygcy5tZXRhZGF0YT8uZW50cmllczwidSI/QXJyYXkuZnJvbShzLm1ldGFkYXRhLmVudHJpZXMoKSk6W10sbD17aW1hZ2VUeXBlOnMuaW1hZ2VUeXBlLG5hbWU6cy5uYW1lLG9yaWdpbjpzLm9yaWdpbixzcGFjaW5nOnMuc3BhY2luZyxkaXJlY3Rpb246YGRhdGE6YXBwbGljYXRpb24vdm5kLml0ay5hZGRyZXNzLDA6JHtCfWAsc2l6ZTpzLnNpemUsZGF0YTpgZGF0YTphcHBsaWNhdGlvbi92bmQuaXRrLmFkZHJlc3MsMDoke2Z9YCxtZXRhZGF0YTpFfTtUKEEsbCxuKTticmVha31jYXNlIGguTWVzaDp7bGV0IHM9YS5kYXRhLGY9eShBLHMucG9pbnRzLG4sMCksQj15KEEscy5jZWxscyxuLDEpLEU9eShBLHMucG9pbnREYXRhLG4sMiksbD15KEEscy5jZWxsRGF0YSxuLDMpLGM9e21lc2hUeXBlOnMubWVzaFR5cGUsbmFtZTpzLm5hbWUsbnVtYmVyT2ZQb2ludHM6cy5udW1iZXJPZlBvaW50cyxwb2ludHM6YGRhdGE6YXBwbGljYXRpb24vdm5kLml0ay5hZGRyZXNzLDA6JHtmfWAsbnVtYmVyT2ZDZWxsczpzLm51bWJlck9mQ2VsbHMsY2VsbHM6YGRhdGE6YXBwbGljYXRpb24vdm5kLml0ay5hZGRyZXNzLDA6JHtCfWAsY2VsbEJ1ZmZlclNpemU6cy5jZWxsQnVmZmVyU2l6ZSxudW1iZXJPZlBvaW50UGl4ZWxzOnMubnVtYmVyT2ZQb2ludFBpeGVscyxwb2ludERhdGE6YGRhdGE6YXBwbGljYXRpb24vdm5kLml0ay5hZGRyZXNzLDA6JHtFfWAsbnVtYmVyT2ZDZWxsUGl4ZWxzOnMubnVtYmVyT2ZDZWxsUGl4ZWxzLGNlbGxEYXRhOmBkYXRhOmFwcGxpY2F0aW9uL3ZuZC5pdGsuYWRkcmVzcywwOiR7bH1gfTtUKEEsYyxuKTticmVha31jYXNlIGguUG9pbnRTZXQ6e2xldCBzPWEuZGF0YSxmPXkoQSxzLnBvaW50cyxuLDApLEI9eShBLHMucG9pbnREYXRhLG4sMSksRT17cG9pbnRTZXRUeXBlOnMucG9pbnRTZXRUeXBlLG5hbWU6cy5uYW1lLG51bWJlck9mUG9pbnRzOnMubnVtYmVyT2ZQb2ludHMscG9pbnRzOmBkYXRhOmFwcGxpY2F0aW9uL3ZuZC5pdGsuYWRkcmVzcywwOiR7Zn1gLG51bWJlck9mUG9pbnRQaXhlbHM6cy5udW1iZXJPZlBvaW50UGl4ZWxzLHBvaW50RGF0YTpgZGF0YTphcHBsaWNhdGlvbi92bmQuaXRrLmFkZHJlc3MsMDoke0J9YH07VChBLEUsbik7YnJlYWt9Y2FzZSBoLlRyYW5zZm9ybUxpc3Q6e2xldCBzPWEuZGF0YSxmPVtdO3MuZm9yRWFjaCgoQixFKT0+e2xldCBjPWBkYXRhOmFwcGxpY2F0aW9uL3ZuZC5pdGsuYWRkcmVzcywwOiR7eShBLEIuZml4ZWRQYXJhbWV0ZXJzLG4sRSoyKX1gLFM9YGRhdGE6YXBwbGljYXRpb24vdm5kLml0ay5hZGRyZXNzLDA6JHt5KEEsQi5wYXJhbWV0ZXJzLG4sRSoyKzEpfWAsRD17dHJhbnNmb3JtVHlwZTpCLnRyYW5zZm9ybVR5cGUsbnVtYmVyT2ZGaXhlZFBhcmFtZXRlcnM6Qi5udW1iZXJPZkZpeGVkUGFyYW1ldGVycyxudW1iZXJPZlBhcmFtZXRlcnM6Qi5udW1iZXJPZlBhcmFtZXRlcnMsbmFtZTpCLm5hbWUsaW5wdXRTcGFjZU5hbWU6Qi5pbnB1dFNwYWNlTmFtZSxvdXRwdXRTcGFjZU5hbWU6Qi5vdXRwdXRTcGFjZU5hbWUscGFyYW1ldGVyczpTLGZpeGVkUGFyYW1ldGVyczpjfTtmLnB1c2goRCl9KSxUKEEsZixuKTticmVha31jYXNlIGguUG9seURhdGE6e2xldCBzPWEuZGF0YSxmPXkoQSxzLnBvaW50cyxuLDApLEI9eShBLHMudmVydGljZXMsbiwxKSxFPXkoQSxzLmxpbmVzLG4sMiksbD15KEEscy5wb2x5Z29ucyxuLDMpLGM9eShBLHMudHJpYW5nbGVTdHJpcHMsbiw0KSxwPXkoQSxzLnBvaW50RGF0YSxuLDUpLFM9eShBLHMucG9pbnREYXRhLG4sNiksRD17cG9seURhdGFUeXBlOnMucG9seURhdGFUeXBlLG5hbWU6cy5uYW1lLG51bWJlck9mUG9pbnRzOnMubnVtYmVyT2ZQb2ludHMscG9pbnRzOmBkYXRhOmFwcGxpY2F0aW9uL3ZuZC5pdGsuYWRkcmVzcywwOiR7Zn1gLHZlcnRpY2VzQnVmZmVyU2l6ZTpzLnZlcnRpY2VzQnVmZmVyU2l6ZSx2ZXJ0aWNlczpgZGF0YTphcHBsaWNhdGlvbi92bmQuaXRrLmFkZHJlc3MsMDoke0J9YCxsaW5lc0J1ZmZlclNpemU6cy5saW5lc0J1ZmZlclNpemUsbGluZXM6YGRhdGE6YXBwbGljYXRpb24vdm5kLml0ay5hZGRyZXNzLDA6JHtFfWAscG9seWdvbnNCdWZmZXJTaXplOnMucG9seWdvbnNCdWZmZXJTaXplLHBvbHlnb25zOmBkYXRhOmFwcGxpY2F0aW9uL3ZuZC5pdGsuYWRkcmVzcywwOiR7bH1gLHRyaWFuZ2xlU3RyaXBzQnVmZmVyU2l6ZTpzLnRyaWFuZ2xlU3RyaXBzQnVmZmVyU2l6ZSx0cmlhbmdsZVN0cmlwczpgZGF0YTphcHBsaWNhdGlvbi92bmQuaXRrLmFkZHJlc3MsMDoke2N9YCxudW1iZXJPZlBvaW50UGl4ZWxzOnMubnVtYmVyT2ZQb2ludFBpeGVscyxwb2ludERhdGE6YGRhdGE6YXBwbGljYXRpb24vdm5kLml0ay5hZGRyZXNzLDA6JHtwfWAsbnVtYmVyT2ZDZWxsUGl4ZWxzOnMubnVtYmVyT2ZDZWxsUGl4ZWxzLGNlbGxEYXRhOmBkYXRhOmFwcGxpY2F0aW9uL3ZuZC5pdGsuYWRkcmVzcywwOiR7U31gfTtUKEEsRCxuKTticmVha31kZWZhdWx0OnRocm93IEVycm9yKCJVbnN1cHBvcnRlZCBpbnB1dCBJbnRlcmZhY2VUeXBlIil9fSksQS5yZXNldE1vZHVsZVN0ZG91dCgpLEEucmVzZXRNb2R1bGVTdGRlcnIoKTtsZXQgcj1BLnN0YWNrU2F2ZSgpLG89MDt0cnl7bz1BLmNhbGxNYWluKHQuc2xpY2UoKSl9Y2F0Y2goYSl7dGhyb3cgdHlwZW9mIGE9PSJudW1iZXIiJiYoY29uc29sZS5sb2coIkV4Y2VwdGlvbiB3aGlsZSBydW5uaW5nIHBpcGVsaW5lOiIpLGNvbnNvbGUubG9nKCJzdGRvdXQ6IixBLmdldE1vZHVsZVN0ZG91dCgpKSxjb25zb2xlLmVycm9yKCJzdGRlcnI6IixBLmdldE1vZHVsZVN0ZGVycigpKSx0eXBlb2YgQS5nZXRFeGNlcHRpb25NZXNzYWdlPCJ1Ij9jb25zb2xlLmVycm9yKCJleGNlcHRpb246IixBLmdldEV4Y2VwdGlvbk1lc3NhZ2UoYSkpOmNvbnNvbGUuZXJyb3IoIkJ1aWxkIG1vZHVsZSBpbiBEZWJ1ZyBtb2RlIGZvciBleGNlcHRpb24gbWVzc2FnZSBpbmZvcm1hdGlvbi4iKSksYX1maW5hbGx5e0Euc3RhY2tSZXN0b3JlKHIpfWxldCBnPUEuZ2V0TW9kdWxlU3Rkb3V0KCksQz1BLmdldE1vZHVsZVN0ZGVycigpLFE9W107cmV0dXJuIGUhPW51bGwmJmUubGVuZ3RoPjAmJm89PT0wJiZlLmZvckVhY2goZnVuY3Rpb24oYSxuKXtsZXQgcz1udWxsO3N3aXRjaChhLnR5cGUpe2Nhc2UgaC5UZXh0U3RyZWFtOntsZXQgQj1BLmNjYWxsKCJpdGtfd2FzbV9vdXRwdXRfYXJyYXlfYWRkcmVzcyIsIm51bWJlciIsWyJudW1iZXIiLCJudW1iZXIiLCJudW1iZXIiXSxbMCxuLDBdKSxFPUEuY2NhbGwoIml0a193YXNtX291dHB1dF9hcnJheV9zaXplIiwibnVtYmVyIixbIm51bWJlciIsIm51bWJlciIsIm51bWJlciJdLFswLG4sMF0pLGw9bmV3IFVpbnQ4QXJyYXkoQS5IRUFQVTguYnVmZmVyLEIsRSk7cz17ZGF0YTpFZS5kZWNvZGUobCl9O2JyZWFrfWNhc2UgaC5Kc29uQ29tcGF0aWJsZTp7bGV0IEI9QS5jY2FsbCgiaXRrX3dhc21fb3V0cHV0X2FycmF5X2FkZHJlc3MiLCJudW1iZXIiLFsibnVtYmVyIiwibnVtYmVyIiwibnVtYmVyIl0sWzAsbiwwXSksRT1BLmNjYWxsKCJpdGtfd2FzbV9vdXRwdXRfYXJyYXlfc2l6ZSIsIm51bWJlciIsWyJudW1iZXIiLCJudW1iZXIiLCJudW1iZXIiXSxbMCxuLDBdKSxsPW5ldyBVaW50OEFycmF5KEEuSEVBUFU4LmJ1ZmZlcixCLEUpO3M9SlNPTi5wYXJzZShFZS5kZWNvZGUobCkpO2JyZWFrfWNhc2UgaC5CaW5hcnlTdHJlYW06e2xldCBCPUEuY2NhbGwoIml0a193YXNtX291dHB1dF9hcnJheV9hZGRyZXNzIiwibnVtYmVyIixbIm51bWJlciIsIm51bWJlciIsIm51bWJlciJdLFswLG4sMF0pLEU9QS5jY2FsbCgiaXRrX3dhc21fb3V0cHV0X2FycmF5X3NpemUiLCJudW1iZXIiLFsibnVtYmVyIiwibnVtYmVyIiwibnVtYmVyIl0sWzAsbiwwXSk7cz17ZGF0YTpmZShBLEIsRSl9O2JyZWFrfWNhc2UgaC5UZXh0RmlsZTp7cz17cGF0aDphLmRhdGEucGF0aCxkYXRhOkEuZnNfcmVhZEZpbGUoYS5kYXRhLnBhdGgse2VuY29kaW5nOiJ1dGY4In0pfTticmVha31jYXNlIGguQmluYXJ5RmlsZTp7cz17cGF0aDphLmRhdGEucGF0aCxkYXRhOnRyKEEsYS5kYXRhLnBhdGgpfTticmVha31jYXNlIGguSW1hZ2U6e2xldCBCPXNBKEEsbik7Qi5kYXRhPUYoQSxuLDAsQi5pbWFnZVR5cGUuY29tcG9uZW50VHlwZSksQi5kaXJlY3Rpb249RihBLG4sMSx6LkZsb2F0NjQpLEIubWV0YWRhdGE9bmV3IE1hcChCLm1ldGFkYXRhKSxzPUI7YnJlYWt9Y2FzZSBoLk1lc2g6e2xldCBCPXNBKEEsbik7Qi5udW1iZXJPZlBvaW50cz4wP0IucG9pbnRzPUYoQSxuLDAsQi5tZXNoVHlwZS5wb2ludENvbXBvbmVudFR5cGUpOkIucG9pbnRzPUgoQi5tZXNoVHlwZS5wb2ludENvbXBvbmVudFR5cGUsbmV3IEFycmF5QnVmZmVyKDApKSxCLm51bWJlck9mQ2VsbHM+MD9CLmNlbGxzPUYoQSxuLDEsQi5tZXNoVHlwZS5jZWxsQ29tcG9uZW50VHlwZSk6Qi5jZWxscz1IKEIubWVzaFR5cGUuY2VsbENvbXBvbmVudFR5cGUsbmV3IEFycmF5QnVmZmVyKDApKSxCLm51bWJlck9mUG9pbnRQaXhlbHM+MD9CLnBvaW50RGF0YT1GKEEsbiwyLEIubWVzaFR5cGUucG9pbnRQaXhlbENvbXBvbmVudFR5cGUpOkIucG9pbnREYXRhPUgoQi5tZXNoVHlwZS5wb2ludFBpeGVsQ29tcG9uZW50VHlwZSxuZXcgQXJyYXlCdWZmZXIoMCkpLEIubnVtYmVyT2ZDZWxsUGl4ZWxzPjA/Qi5jZWxsRGF0YT1GKEEsbiwzLEIubWVzaFR5cGUuY2VsbFBpeGVsQ29tcG9uZW50VHlwZSk6Qi5jZWxsRGF0YT1IKEIubWVzaFR5cGUuY2VsbFBpeGVsQ29tcG9uZW50VHlwZSxuZXcgQXJyYXlCdWZmZXIoMCkpLHM9QjticmVha31jYXNlIGguUG9pbnRTZXQ6e2xldCBCPXNBKEEsbik7Qi5udW1iZXJPZlBvaW50cz4wP0IucG9pbnRzPUYoQSxuLDAsQi5wb2ludFNldFR5cGUucG9pbnRDb21wb25lbnRUeXBlKTpCLnBvaW50cz1IKEIucG9pbnRTZXRUeXBlLnBvaW50Q29tcG9uZW50VHlwZSxuZXcgQXJyYXlCdWZmZXIoMCkpLEIubnVtYmVyT2ZQb2ludFBpeGVscz4wP0IucG9pbnREYXRhPUYoQSxuLDEsQi5wb2ludFNldFR5cGUucG9pbnRQaXhlbENvbXBvbmVudFR5cGUpOkIucG9pbnREYXRhPUgoQi5wb2ludFNldFR5cGUucG9pbnRQaXhlbENvbXBvbmVudFR5cGUsbmV3IEFycmF5QnVmZmVyKDApKSxzPUI7YnJlYWt9Y2FzZSBoLlRyYW5zZm9ybUxpc3Q6e2xldCBCPXNBKEEsbik7Qi5mb3JFYWNoKChFLGwpPT57RS5udW1iZXJPZkZpeGVkUGFyYW1ldGVycz4wJiYoQltsXS5maXhlZFBhcmFtZXRlcnM9RihBLG4sbCoyLEUudHJhbnNmb3JtVHlwZS5wYXJhbWV0ZXJzVmFsdWVUeXBlKSksRS5udW1iZXJPZkZpeGVkUGFyYW1ldGVycz4wJiYoQltsXS5wYXJhbWV0ZXJzPUYoQSxuLGwqMisxLEUudHJhbnNmb3JtVHlwZS5wYXJhbWV0ZXJzVmFsdWVUeXBlKSl9KSxzPUI7YnJlYWt9Y2FzZSBoLlBvbHlEYXRhOntsZXQgQj1zQShBLG4pO0IubnVtYmVyT2ZQb2ludHM+MD9CLnBvaW50cz1GKEEsbiwwLHouRmxvYXQzMik6Qi5wb2ludHM9bmV3IEZsb2F0MzJBcnJheSxCLnZlcnRpY2VzQnVmZmVyU2l6ZT4wP0IudmVydGljZXM9RihBLG4sMSxSLlVJbnQzMik6Qi52ZXJ0aWNlcz1uZXcgVWludDMyQXJyYXksQi5saW5lc0J1ZmZlclNpemU+MD9CLmxpbmVzPUYoQSxuLDIsUi5VSW50MzIpOkIubGluZXM9bmV3IFVpbnQzMkFycmF5LEIucG9seWdvbnNCdWZmZXJTaXplPjA/Qi5wb2x5Z29ucz1GKEEsbiwzLFIuVUludDMyKTpCLnBvbHlnb25zPW5ldyBVaW50MzJBcnJheSxCLnRyaWFuZ2xlU3RyaXBzQnVmZmVyU2l6ZT4wP0IudHJpYW5nbGVTdHJpcHM9RihBLG4sNCxSLlVJbnQzMik6Qi50cmlhbmdsZVN0cmlwcz1uZXcgVWludDMyQXJyYXksQi5udW1iZXJPZlBvaW50UGl4ZWxzPjA/Qi5wb2ludERhdGE9RihBLG4sNSxCLnBvbHlEYXRhVHlwZS5wb2ludFBpeGVsQ29tcG9uZW50VHlwZSk6Qi5wb2ludERhdGE9SChCLnBvbHlEYXRhVHlwZS5wb2ludFBpeGVsQ29tcG9uZW50VHlwZSxuZXcgQXJyYXlCdWZmZXIoMCkpLEIubnVtYmVyT2ZDZWxsUGl4ZWxzPjA/Qi5jZWxsRGF0YT1GKEEsbiw2LEIucG9seURhdGFUeXBlLmNlbGxQaXhlbENvbXBvbmVudFR5cGUpOkIuY2VsbERhdGE9SChCLnBvbHlEYXRhVHlwZS5jZWxsUGl4ZWxDb21wb25lbnRUeXBlLG5ldyBBcnJheUJ1ZmZlcigwKSkscz1CO2JyZWFrfWRlZmF1bHQ6dGhyb3cgRXJyb3IoIlVuc3VwcG9ydGVkIG91dHB1dCBJbnRlcmZhY2VUeXBlIil9bGV0IGY9e3R5cGU6YS50eXBlLGRhdGE6c307US5wdXNoKGYpfSkse3JldHVyblZhbHVlOm8sc3Rkb3V0Omcsc3RkZXJyOkMsb3V0cHV0czpRfX12YXIgbGU9ZXI7dmFyIElyPXR5cGVvZiBnbG9iYWxUaGlzLlNoYXJlZEFycmF5QnVmZmVyPCJ1IjtmdW5jdGlvbiBycihBLHQpe2lmKEE9PW51bGwpcmV0dXJuW107bGV0IGU9W107Zm9yKGxldCBJPTA7STxBLmxlbmd0aDtJKyspe2xldCByPW9yKEFbSV0sdCk7ciE9PW51bGwmJmUucHVzaChyKX1yZXR1cm4gZX1mdW5jdGlvbiBvcihBLHQpe2lmKEE9PW51bGwpcmV0dXJuIG51bGw7bGV0IGU9bnVsbDtyZXR1cm4gQS5idWZmZXIhPT12b2lkIDA/ZT1BLmJ1ZmZlcjpBLmJ5dGVMZW5ndGghPT12b2lkIDAmJihlPUEpLElyJiZlIGluc3RhbmNlb2YgU2hhcmVkQXJyYXlCdWZmZXI/bnVsbDp0P2U6ZS5zbGljZSgwKX12YXIgdWU9cnI7ZnVuY3Rpb24gZ3IoQSl7cmV0dXJuW0EuZGF0YSxBLmRpcmVjdGlvbl19dmFyIERlPWdyO2Z1bmN0aW9uIGlyKEEpe3JldHVybltBLnBvaW50cyxBLnBvaW50RGF0YSxBLmNlbGxzLEEuY2VsbERhdGFdfXZhciBoZT1pcjtmdW5jdGlvbiBucihBKXtyZXR1cm5bQS5wb2ludHMsQS52ZXJ0aWNlcyxBLmxpbmVzLEEucG9seWdvbnMsQS50cmlhbmdsZVN0cmlwcyxBLnBvaW50RGF0YSxBLmNlbGxEYXRhXX12YXIgZGU9bnI7YXN5bmMgZnVuY3Rpb24gc3IoQSx0LGUsSSl7bGV0IHI9bGUoQSx0LGUsSSksbz1bXTtyZXR1cm4gci5vdXRwdXRzLmZvckVhY2goZnVuY3Rpb24oZyl7aWYoZy50eXBlPT09aC5CaW5hcnlTdHJlYW18fGcudHlwZT09PWguQmluYXJ5RmlsZSl7bGV0IEM9Zy5kYXRhO28ucHVzaChDKX1lbHNlIGlmKGcudHlwZT09PWguSW1hZ2Upe2xldCBDPWcuZGF0YTtvLnB1c2goLi4uRGUoQykpfWVsc2UgaWYoZy50eXBlPT09aC5NZXNoKXtsZXQgQz1nLmRhdGE7by5wdXNoKC4uLmhlKEMpKX1lbHNlIGlmKGcudHlwZT09PWguUG9seURhdGEpe2xldCBDPWcuZGF0YTtvLnB1c2goLi4uZGUoQykpfX0pLE1BKHIsdWUobywhMCkpfXZhciB5ZT1zcjt2YXIgQ3I9e3J1blBpcGVsaW5lOmFzeW5jIGZ1bmN0aW9uKEEsdCxlLEkscixvKXtsZXQgZz1hd2FpdCBhZShBLHQsbyk7cmV0dXJuIGF3YWl0IHllKGcsZSxJLHIpfX07ZkEoQ3IpOyUwQS8qISBCdW5kbGVkIGxpY2Vuc2UgaW5mb3JtYXRpb246JTBBJTBBY29tbGluay9kaXN0L2VzbS9jb21saW5rLm1qczolMEEgICgqKiUwQSAgICogQGxpY2Vuc2UlMEEgICAqIENvcHlyaWdodCAyMDE5IEdvb2dsZSBMTEMlMEEgICAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wJTBBICAgKiklMEEqLyUwQSc7THQoVHQpO2V4cG9ydHtKbiBhcyBkb3duc2FtcGxlLExuIGFzIGRvd25zYW1wbGVCaW5TaHJpbmssVG4gYXMgZG93bnNhbXBsZUxhYmVsSW1hZ2UsUG4gYXMgZG93bnNhbXBsZVNpZ21hLE1uIGFzIGdhdXNzaWFuS2VybmVsUmFkaXVzLEggYXMgZ2V0RGVmYXVsdFdlYldvcmtlcixGIGFzIGdldFBpcGVsaW5lV29ya2VyVXJsLEogYXMgZ2V0UGlwZWxpbmVzQmFzZVVybCx1SSBhcyBzZXREZWZhdWx0V2ViV29ya2VyLEx0IGFzIHNldFBpcGVsaW5lV29ya2VyVXJsLHNJIGFzIHNldFBpcGVsaW5lc0Jhc2VVcmwsTUEgYXMgdmVyc2lvbn07Ci8qISBCdW5kbGVkIGxpY2Vuc2UgaW5mb3JtYXRpb246Cgpjb21saW5rL2Rpc3QvZXNtL2NvbWxpbmsubWpzOgogICgqKgogICAqIEBsaWNlbnNlCiAgICogQ29weXJpZ2h0IDIwMTkgR29vZ2xlIExMQwogICAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wCiAgICopCiovCg==""" default_config = JsPackageConfig(default_js_module) js_package = JsPackage(default_config) diff --git a/packages/downsample/python/itkwasm-downsample-wasi/itkwasm_downsample_wasi/_version.py b/packages/downsample/python/itkwasm-downsample-wasi/itkwasm_downsample_wasi/_version.py index aa56ed404..5b6018861 100644 --- a/packages/downsample/python/itkwasm-downsample-wasi/itkwasm_downsample_wasi/_version.py +++ b/packages/downsample/python/itkwasm-downsample-wasi/itkwasm_downsample_wasi/_version.py @@ -1 +1 @@ -__version__ = "1.4.3" +__version__ = "1.5.0" diff --git a/packages/downsample/python/itkwasm-downsample/itkwasm_downsample/_version.py b/packages/downsample/python/itkwasm-downsample/itkwasm_downsample/_version.py index aa56ed404..5b6018861 100644 --- a/packages/downsample/python/itkwasm-downsample/itkwasm_downsample/_version.py +++ b/packages/downsample/python/itkwasm-downsample/itkwasm_downsample/_version.py @@ -1 +1 @@ -__version__ = "1.4.3" +__version__ = "1.5.0" diff --git a/packages/downsample/typescript/package.json b/packages/downsample/typescript/package.json index 59e98e3c2..fef06ccf3 100644 --- a/packages/downsample/typescript/package.json +++ b/packages/downsample/typescript/package.json @@ -1,6 +1,6 @@ { "name": "@itk-wasm/downsample", - "version": "1.4.3", + "version": "1.5.0", "description": "Pipelines for downsampling images.", "type": "module", "module": "./dist/index.js", diff --git a/packages/image-io/package.json b/packages/image-io/package.json index 4dce4e6dc..3d5c1d9e8 100644 --- a/packages/image-io/package.json +++ b/packages/image-io/package.json @@ -1,6 +1,6 @@ { "name": "@itk-wasm/image-io-build", - "version": "1.3.1", + "version": "1.4.0", "private": true, "description": "Input and output for scientific and medical image file formats.", "type": "module", diff --git a/packages/image-io/python/itkwasm-image-io-emscripten/itkwasm_image_io_emscripten/_version.py b/packages/image-io/python/itkwasm-image-io-emscripten/itkwasm_image_io_emscripten/_version.py index 9c73af26b..3e8d9f946 100644 --- a/packages/image-io/python/itkwasm-image-io-emscripten/itkwasm_image_io_emscripten/_version.py +++ b/packages/image-io/python/itkwasm-image-io-emscripten/itkwasm_image_io_emscripten/_version.py @@ -1 +1 @@ -__version__ = "1.3.1" +__version__ = "1.4.0" diff --git a/packages/image-io/python/itkwasm-image-io-emscripten/itkwasm_image_io_emscripten/js_package.py b/packages/image-io/python/itkwasm-image-io-emscripten/itkwasm_image_io_emscripten/js_package.py index 7064bf227..83e2fb405 100644 --- a/packages/image-io/python/itkwasm-image-io-emscripten/itkwasm_image_io_emscripten/js_package.py +++ b/packages/image-io/python/itkwasm-image-io-emscripten/itkwasm_image_io_emscripten/js_package.py @@ -3,6 +3,6 @@ from itkwasm.pyodide import JsPackageConfig, JsPackage from ._version import __version__ -default_js_module = """data:text/javascript;base64,dmFyIFlyPU9iamVjdC5kZWZpbmVQcm9wZXJ0eTt2YXIgS3I9KGUsdCk9Pntmb3IodmFyIEEgaW4gdClZcihlLEEse2dldDp0W0FdLGVudW1lcmFibGU6ITB9KX07dmFyIHZyPW5ldyBNYXAoW1siYm1wIiwiYm1wIl0sWyJkY20iLCJnZGNtIl0sWyJnaXBsIiwiZ2lwbCJdLFsiZ2lwbC5neiIsImdpcGwiXSxbImhkZjUiLCJoZGY1Il0sWyJqcGciLCJqcGVnIl0sWyJqcGVnIiwianBlZyJdLFsiaXdpIiwid2FzbSJdLFsiaXdpLmNib3IiLCJ3YXNtIl0sWyJpd2kuY2Jvci56c3QiLCJ3YXNtWnN0ZCJdLFsibHNtIiwibHNtIl0sWyJtbmMiLCJtbmMiXSxbIm1uYy5neiIsIm1uYyJdLFsibW5jMiIsIm1uYyJdLFsibWdoIiwibWdoIl0sWyJtZ3oiLCJtZ2giXSxbIm1naC5neiIsIm1naCJdLFsibWhhIiwibWV0YSJdLFsibWhkIiwibWV0YSJdLFsibXJjIiwibXJjIl0sWyJuaWEiLCJuaWZ0aSJdLFsibmlpIiwibmlmdGkiXSxbIm5paS5neiIsIm5pZnRpIl0sWyJoZHIiLCJuaWZ0aSJdLFsibnJyZCIsIm5ycmQiXSxbIm5oZHIiLCJucnJkIl0sWyJwbmciLCJwbmciXSxbInBpYyIsImJpb1JhZCJdLFsidGlmIiwidGlmZiJdLFsidGlmZiIsInRpZmYiXSxbInZ0ayIsInZ0ayJdLFsiaXNxIiwic2NhbmNvIl0sWyJhaW0iLCJzY2FuY28iXSxbImZkZiIsImZkZiJdXSksXz12cjt2YXIganI9e0ludDg6ImludDgiLFVJbnQ4OiJ1aW50OCIsSW50MTY6ImludDE2IixVSW50MTY6InVpbnQxNiIsSW50MzI6ImludDMyIixVSW50MzI6InVpbnQzMiIsSW50NjQ6ImludDY0IixVSW50NjQ6InVpbnQ2NCIsU2l6ZVZhbHVlVHlwZToidWludDY0IixJZGVudGlmaWVyVHlwZToidWludDY0IixJbmRleFZhbHVlVHlwZToiaW50NjQiLE9mZnNldFZhbHVlVHlwZToiaW50NjQifSx3PWpyO3ZhciBfcj17RmxvYXQzMjoiZmxvYXQzMiIsRmxvYXQ2NDoiZmxvYXQ2NCIsU3BhY2VQcmVjaXNpb25UeXBlOiJmbG9hdDY0In0sTj1fcjtmdW5jdGlvbiB6cihlLHQpe2xldCBBPW51bGw7c3dpdGNoKGUpe2Nhc2Ugdy5VSW50ODp7QT1uZXcgVWludDhBcnJheSh0KTticmVha31jYXNlIHcuSW50ODp7QT1uZXcgSW50OEFycmF5KHQpO2JyZWFrfWNhc2Ugdy5VSW50MTY6e0E9bmV3IFVpbnQxNkFycmF5KHQpO2JyZWFrfWNhc2Ugdy5JbnQxNjp7QT1uZXcgSW50MTZBcnJheSh0KTticmVha31jYXNlIHcuVUludDMyOntBPW5ldyBVaW50MzJBcnJheSh0KTticmVha31jYXNlIHcuSW50MzI6e0E9bmV3IEludDMyQXJyYXkodCk7YnJlYWt9Y2FzZSB3LlVJbnQ2NDp7dHlwZW9mIGdsb2JhbFRoaXMuQmlnVWludDY0QXJyYXk9PSJmdW5jdGlvbiI/QT1uZXcgQmlnVWludDY0QXJyYXkodCk6QT1uZXcgVWludDhBcnJheSh0KTticmVha31jYXNlIHcuSW50NjQ6e3R5cGVvZiBnbG9iYWxUaGlzLkJpZ0ludDY0QXJyYXk9PSJmdW5jdGlvbiI/QT1uZXcgQmlnSW50NjRBcnJheSh0KTpBPW5ldyBVaW50OEFycmF5KHQpO2JyZWFrfWNhc2UgTi5GbG9hdDMyOntBPW5ldyBGbG9hdDMyQXJyYXkodCk7YnJlYWt9Y2FzZSBOLkZsb2F0NjQ6e0E9bmV3IEZsb2F0NjRBcnJheSh0KTticmVha31jYXNlIm51bGwiOntBPW51bGw7YnJlYWt9Y2FzZSBudWxsOntBPW51bGw7YnJlYWt9ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoIlR5cGUgaXMgbm90IHN1cHBvcnRlZCBhcyBhIFR5cGVkQXJyYXkiKX1yZXR1cm4gQX12YXIgTz16cjt2YXIgVnI9e1Vua25vd246IlVua25vd24iLFNjYWxhcjoiU2NhbGFyIixSR0I6IlJHQiIsUkdCQToiUkdCQSIsT2Zmc2V0OiJPZmZzZXQiLFZlY3RvcjoiVmVjdG9yIixQb2ludDoiUG9pbnQiLENvdmFyaWFudFZlY3RvcjoiQ292YXJpYW50VmVjdG9yIixTeW1tZXRyaWNTZWNvbmRSYW5rVGVuc29yOiJTeW1tZXRyaWNTZWNvbmRSYW5rVGVuc29yIixEaWZmdXNpb25UZW5zb3IzRDoiRGlmZnVzaW9uVGVuc29yM0QiLENvbXBsZXg6IkNvbXBsZXgiLEZpeGVkQXJyYXk6IkZpeGVkQXJyYXkiLEFycmF5OiJBcnJheSIsTWF0cml4OiJNYXRyaXgiLFZhcmlhYmxlTGVuZ3RoVmVjdG9yOiJWYXJpYWJsZUxlbmd0aFZlY3RvciIsVmFyaWFibGVTaXplTWF0cml4OiJWYXJpYWJsZVNpemVNYXRyaXgifSxRZT1Wcjt2YXIgX2U9Y2xhc3N7ZGltZW5zaW9uO2NvbXBvbmVudFR5cGU7cGl4ZWxUeXBlO2NvbXBvbmVudHM7Y29uc3RydWN0b3IodD0yLEE9dy5VSW50OCxyPVFlLlNjYWxhcixvPTEpe3RoaXMuZGltZW5zaW9uPXQsdGhpcy5jb21wb25lbnRUeXBlPUEsdGhpcy5waXhlbFR5cGU9cix0aGlzLmNvbXBvbmVudHM9b319LGJBPV9lO2Z1bmN0aW9uIFpyKGUsdCxBLHIsbyl7ZVtyK0EqdF09b312YXIgREE9WnI7dmFyIHplPWNsYXNze2ltYWdlVHlwZTtuYW1lPSJJbWFnZSI7b3JpZ2luO3NwYWNpbmc7ZGlyZWN0aW9uO3NpemU7bWV0YWRhdGE7ZGF0YTtjb25zdHJ1Y3Rvcih0PW5ldyBiQSl7dGhpcy5pbWFnZVR5cGU9dDtsZXQgQT10LmRpbWVuc2lvbjt0aGlzLm9yaWdpbj1uZXcgQXJyYXkoQSksdGhpcy5vcmlnaW4uZmlsbCgwKSx0aGlzLnNwYWNpbmc9bmV3IEFycmF5KEEpLHRoaXMuc3BhY2luZy5maWxsKDEpLHRoaXMuZGlyZWN0aW9uPW5ldyBGbG9hdDY0QXJyYXkoQSpBKSx0aGlzLmRpcmVjdGlvbi5maWxsKDApO2ZvcihsZXQgcj0wO3I8QTtyKyspREEodGhpcy5kaXJlY3Rpb24sQSxyLHIsMSk7dGhpcy5zaXplPW5ldyBBcnJheShBKSx0aGlzLnNpemUuZmlsbCgwKSx0aGlzLm1ldGFkYXRhPW5ldyBNYXAsdGhpcy5kYXRhPW51bGx9fSxaPXplO2Z1bmN0aW9uIFhyKGUpe2xldCB0PW5ldyBaKGUuaW1hZ2VUeXBlKTtpZih0Lm5hbWU9ZS5uYW1lLHQub3JpZ2luPUFycmF5LmZyb20oZS5vcmlnaW4pLHQuc3BhY2luZz1BcnJheS5mcm9tKGUuc3BhY2luZyksdC5kaXJlY3Rpb249ZS5kaXJlY3Rpb24uc2xpY2UoKSx0LnNpemU9QXJyYXkuZnJvbShlLnNpemUpLGUuZGF0YSE9PW51bGwpe2xldCBBPWUuZGF0YS5jb25zdHJ1Y3Rvcjt0LmRhdGE9bmV3IEEoZS5kYXRhLmxlbmd0aCksdC5kYXRhIT1udWxsJiZ0LmRhdGEuc2V0KGUuZGF0YSwwKX1yZXR1cm4gdH12YXIgVmU9WHI7ZnVuY3Rpb24gJHIoZSl7aWYoZS5sZW5ndGg8MSl0aHJvdyBFcnJvcigiQXQgbGVhc3Qgb25lIGltYWdlcyBpcyByZXF1aXJlZC4iKTtsZXQgdD1lWzBdO2lmKHQuZGF0YT09PW51bGwpdGhyb3cgRXJyb3IoIkltYWdlIGRhdGEgaXMgbnVsbC4iKTtsZXQgQT1uZXcgWih0LmltYWdlVHlwZSk7QS5vcmlnaW49QXJyYXkuZnJvbSh0Lm9yaWdpbiksQS5zcGFjaW5nPUFycmF5LmZyb20odC5zcGFjaW5nKTtsZXQgcj1BLmltYWdlVHlwZS5kaW1lbnNpb247QS5kaXJlY3Rpb249dC5kaXJlY3Rpb24uc2xpY2UoKTtsZXQgbz1yLTE7QS5zaXplPUFycmF5LmZyb20odC5zaXplKTtsZXQgaT1lLnJlZHVjZSgoYSxnKT0+YStnLnNpemVbb10sMCk7QS5zaXplW29dPWk7bGV0IG49QS5zaXplLnJlZHVjZSgoYSxnKT0+YSpnLDEpKkEuaW1hZ2VUeXBlLmNvbXBvbmVudHMsbT10LmRhdGEuY29uc3RydWN0b3I7QS5kYXRhPW5ldyBtKG4pO2xldCBmPUEuaW1hZ2VUeXBlLmNvbXBvbmVudHM7Zm9yKGxldCBhPTA7YTxBLnNpemUubGVuZ3RoLTE7YSsrKWYqPUEuc2l6ZVthXTtsZXQgbD0wO2lmKEEuZGF0YSE9bnVsbClmb3IobGV0IGE9MDthPGUubGVuZ3RoO2ErKylBLmRhdGEuc2V0KGVbYV0uZGF0YSxmKmwpLGwrPWVbYV0uc2l6ZVtvXTtlbHNlIHRocm93IEVycm9yKCJDb3VsZCBub3QgY3JlYXRlIHJlc3VsdCBpbWFnZSBkYXRhLiIpO3JldHVybiBBfXZhciBaZT0kcjtmdW5jdGlvbiBlaShlKXtsZXQgdD1lLnNsaWNlKChlLmxhc3RJbmRleE9mKCIuIiktMT4+PjApKzIpO2lmKHQudG9Mb3dlckNhc2UoKT09PSJneiIpe2xldCBBPWUuc2xpY2UoMCwtMykubGFzdEluZGV4T2YoIi4iKTt0PWUuc2xpY2UoKEEtMT4+PjApKzIpfWVsc2UgaWYodC50b0xvd2VyQ2FzZSgpPT09ImNib3IiKXtsZXQgQT1lLnNsaWNlKDAsLTUpLmxhc3RJbmRleE9mKCIuIik7dD1lLnNsaWNlKChBLTE+Pj4wKSsyKX1lbHNlIGlmKHQudG9Mb3dlckNhc2UoKT09PSJ6c3QiKXtsZXQgQT1lLnNsaWNlKDAsLTEwKS5sYXN0SW5kZXhPZigiLiIpO3Q9ZS5zbGljZSgoQS0xPj4+MCkrMil9ZWxzZSBpZih0LnRvTG93ZXJDYXNlKCk9PT0iemlwIil7bGV0IEE9ZS5zbGljZSgwLC00KS5sYXN0SW5kZXhPZigiLiIpO3Q9ZS5zbGljZSgoQS0xPj4+MCkrMil9cmV0dXJuIHR9dmFyIHNlPWVpO2Z1bmN0aW9uIHRpKGUsdCl7bGV0IEE9ey4uLmUuaW1hZ2VUeXBlfTtpZih0eXBlb2YgdDwidSImJnR5cGVvZiB0LnBpeGVsVHlwZTwidSImJihBLnBpeGVsVHlwZT10LnBpeGVsVHlwZSx0LnBpeGVsVHlwZT09PVFlLlNjYWxhciYmQS5jb21wb25lbnRzIT09MSkpdGhyb3cgbmV3IEVycm9yKCJDYW5ub3QgY2FzdCBtdWx0aS1jb21wb25lbnQgaW1hZ2UgdG8gYSBzY2FsYXIgaW1hZ2UiKTt0eXBlb2YgdDwidSImJnR5cGVvZiB0LmNvbXBvbmVudFR5cGU8InUiJiZ0LmNvbXBvbmVudFR5cGUhPT1lLmltYWdlVHlwZS5jb21wb25lbnRUeXBlJiYoQS5jb21wb25lbnRUeXBlPXQuY29tcG9uZW50VHlwZSk7bGV0IHI9bmV3IFooQSk7aWYoci5uYW1lPWUubmFtZSxyLm9yaWdpbj1BcnJheS5mcm9tKGUub3JpZ2luKSxyLnNwYWNpbmc9QXJyYXkuZnJvbShlLnNwYWNpbmcpLHIuZGlyZWN0aW9uPWUuZGlyZWN0aW9uLnNsaWNlKCksci5zaXplPUFycmF5LmZyb20oZS5zaXplKSxyLm1ldGFkYXRhPW5ldyBNYXAoSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShBcnJheS5mcm9tKGUubWV0YWRhdGEpKSkpLGUuZGF0YSE9PW51bGwpaWYodHlwZW9mIHQ8InUiJiZ0eXBlb2YgdC5jb21wb25lbnRUeXBlPCJ1IiYmdC5jb21wb25lbnRUeXBlIT09ZS5pbWFnZVR5cGUuY29tcG9uZW50VHlwZSlzd2l0Y2goZS5pbWFnZVR5cGUuY29tcG9uZW50VHlwZSl7Y2FzZSB3LlVJbnQ4OmNhc2Ugdy5JbnQ4OmNhc2Ugdy5VSW50MTY6Y2FzZSB3LkludDE2OmNhc2Ugdy5VSW50MzI6Y2FzZSB3LkludDMyOmNhc2UgTi5GbG9hdDMyOmNhc2UgTi5GbG9hdDY0OnN3aXRjaChyLmltYWdlVHlwZS5jb21wb25lbnRUeXBlKXtjYXNlIHcuVUludDg6ci5kYXRhPW5ldyBVaW50OEFycmF5KGUuZGF0YSk7YnJlYWs7Y2FzZSB3LkludDg6ci5kYXRhPW5ldyBJbnQ4QXJyYXkoZS5kYXRhKTticmVhaztjYXNlIHcuVUludDE2OnIuZGF0YT1uZXcgVWludDE2QXJyYXkoZS5kYXRhKTticmVhaztjYXNlIHcuSW50MTY6ci5kYXRhPW5ldyBJbnQxNkFycmF5KGUuZGF0YSk7YnJlYWs7Y2FzZSB3LlVJbnQzMjpyLmRhdGE9bmV3IFVpbnQzMkFycmF5KGUuZGF0YSk7YnJlYWs7Y2FzZSB3LkludDMyOnIuZGF0YT1uZXcgSW50MzJBcnJheShlLmRhdGEpO2JyZWFrO2Nhc2UgTi5GbG9hdDMyOnIuZGF0YT1uZXcgRmxvYXQzMkFycmF5KGUuZGF0YSk7YnJlYWs7Y2FzZSBOLkZsb2F0NjQ6ci5kYXRhPW5ldyBGbG9hdDY0QXJyYXkoZS5kYXRhKTticmVhaztjYXNlIHcuVUludDY0OnIuZGF0YT1uZXcgQmlnVWludDY0QXJyYXkoZS5kYXRhLmxlbmd0aCk7Zm9yKGxldCBvPTA7bzxyLmRhdGEubGVuZ3RoO28rKylyLmRhdGFbb109QmlnSW50LmFzSW50Tig2NCxCaWdJbnQoZS5kYXRhW29dKSk7YnJlYWs7Y2FzZSB3LkludDY0OnIuZGF0YT1uZXcgQmlnSW50NjRBcnJheShlLmRhdGEubGVuZ3RoKTtmb3IobGV0IG89MDtvPHIuZGF0YS5sZW5ndGg7bysrKXIuZGF0YVtvXT1CaWdJbnQuYXNVaW50Tig2NCxCaWdJbnQoZS5kYXRhW29dKSk7YnJlYWt9YnJlYWs7Y2FzZSB3LlVJbnQ2NDpjYXNlIHcuSW50NjQ6c3dpdGNoKHIuaW1hZ2VUeXBlLmNvbXBvbmVudFR5cGUpe2Nhc2Ugdy5VSW50ODpyLmRhdGE9bmV3IFVpbnQ4QXJyYXkoZS5kYXRhLmxlbmd0aCk7Zm9yKGxldCBvPTA7bzxyLmRhdGEubGVuZ3RoO28rKylyLmRhdGFbb109TnVtYmVyKGUuZGF0YVtvXSk7YnJlYWs7Y2FzZSB3LkludDg6ci5kYXRhPW5ldyBJbnQ4QXJyYXkoZS5kYXRhLmxlbmd0aCk7Zm9yKGxldCBvPTA7bzxyLmRhdGEubGVuZ3RoO28rKylyLmRhdGFbb109TnVtYmVyKGUuZGF0YVtvXSk7YnJlYWs7Y2FzZSB3LlVJbnQxNjpyLmRhdGE9bmV3IFVpbnQxNkFycmF5KGUuZGF0YS5sZW5ndGgpO2ZvcihsZXQgbz0wO288ci5kYXRhLmxlbmd0aDtvKyspci5kYXRhW29dPU51bWJlcihlLmRhdGFbb10pO2JyZWFrO2Nhc2Ugdy5JbnQxNjpyLmRhdGE9bmV3IEludDE2QXJyYXkoZS5kYXRhLmxlbmd0aCk7Zm9yKGxldCBvPTA7bzxyLmRhdGEubGVuZ3RoO28rKylyLmRhdGFbb109TnVtYmVyKGUuZGF0YVtvXSk7YnJlYWs7Y2FzZSB3LlVJbnQzMjpyLmRhdGE9bmV3IFVpbnQzMkFycmF5KGUuZGF0YS5sZW5ndGgpO2ZvcihsZXQgbz0wO288ci5kYXRhLmxlbmd0aDtvKyspci5kYXRhW29dPU51bWJlcihlLmRhdGFbb10pO2JyZWFrO2Nhc2Ugdy5JbnQzMjpyLmRhdGE9bmV3IEludDMyQXJyYXkoZS5kYXRhLmxlbmd0aCk7Zm9yKGxldCBvPTA7bzxyLmRhdGEubGVuZ3RoO28rKylyLmRhdGFbb109TnVtYmVyKGUuZGF0YVtvXSk7YnJlYWs7Y2FzZSBOLkZsb2F0MzI6ci5kYXRhPW5ldyBGbG9hdDMyQXJyYXkoZS5kYXRhLmxlbmd0aCk7Zm9yKGxldCBvPTA7bzxyLmRhdGEubGVuZ3RoO28rKylyLmRhdGFbb109TnVtYmVyKGUuZGF0YVtvXSk7YnJlYWs7Y2FzZSBOLkZsb2F0NjQ6ci5kYXRhPW5ldyBGbG9hdDY0QXJyYXkoZS5kYXRhLmxlbmd0aCk7Zm9yKGxldCBvPTA7bzxyLmRhdGEubGVuZ3RoO28rKylyLmRhdGFbb109TnVtYmVyKGUuZGF0YVtvXSk7YnJlYWs7Y2FzZSB3LlVJbnQ2NDpyLmRhdGE9bmV3IEJpZ1VpbnQ2NEFycmF5KGUuZGF0YSk7YnJlYWs7Y2FzZSB3LkludDY0OnIuZGF0YT1uZXcgQmlnSW50NjRBcnJheShlLmRhdGEpO2JyZWFrfWJyZWFrfWVsc2V7bGV0IG89ZS5kYXRhLmNvbnN0cnVjdG9yO3IuZGF0YT1uZXcgbyhlLmRhdGEubGVuZ3RoKSxyLmRhdGEhPW51bGwmJnIuZGF0YS5zZXQoZS5kYXRhLDApfXJldHVybiByfXZhciBxPXRpO3ZhciBYZT1jbGFzc3tmY247d29ya2VyUXVldWU7cnVuSW5mbztjb25zdHJ1Y3Rvcih0LEEpe3RoaXMuZmNuPUEsdGhpcy53b3JrZXJRdWV1ZT1uZXcgQXJyYXkodCksdGhpcy53b3JrZXJRdWV1ZS5maWxsKG51bGwpLHRoaXMucnVuSW5mbz1bXX1ydW5UYXNrcyh0LEE9bnVsbCl7bGV0IHI9e3Rhc2tRdWV1ZTpbXSxyZXN1bHRzOltdLGFkZGluZ1Rhc2tzOiExLHBvc3Rwb25lZDohMSxydW5uaW5nV29ya2VyczowLGluZGV4OjAsY29tcGxldGVkVGFza3M6MCxwcm9ncmVzc0NhbGxiYWNrOkEsY2FuY2VsZWQ6ITF9O3JldHVybiB0aGlzLnJ1bkluZm8ucHVzaChyKSxyLmluZGV4PXRoaXMucnVuSW5mby5sZW5ndGgtMSx7cHJvbWlzZTpuZXcgUHJvbWlzZSgobyxpKT0+e3IucmVzb2x2ZT1vLHIucmVqZWN0PWksci5yZXN1bHRzPW5ldyBBcnJheSh0Lmxlbmd0aCksci5jb21wbGV0ZWRUYXNrcz0wLHIuYWRkaW5nVGFza3M9ITAsdC5mb3JFYWNoKChuLG0pPT57dGhpcy5hZGRUYXNrKHIuaW5kZXgsbSxuKX0pLHIuYWRkaW5nVGFza3M9ITF9KSxydW5JZDpyLmluZGV4fX10ZXJtaW5hdGVXb3JrZXJzKCl7Zm9yKGxldCB0PTA7dDx0aGlzLndvcmtlclF1ZXVlLmxlbmd0aDt0Kyspe2xldCBBPXRoaXMud29ya2VyUXVldWVbdF07QT8udGVybWluYXRlKCksdGhpcy53b3JrZXJRdWV1ZVt0XT1udWxsfX1jYW5jZWwodCl7bGV0IEE9dGhpcy5ydW5JbmZvW3RdO0EhPW51bGwmJihBLmNhbmNlbGVkPSEwKX1hZGRUYXNrKHQsQSxyKXtsZXQgbz10aGlzLnJ1bkluZm9bdF07aWYobz8uY2FuY2VsZWQ9PT0hMCl7by5yZWplY3QoIlJlbWFpbmluZyB0YXNrcyBjYW5jZWxlZCIpLHRoaXMuY2xlYXJUYXNrKG8uaW5kZXgpO3JldHVybn1pZih0aGlzLndvcmtlclF1ZXVlLmxlbmd0aD4wKXtsZXQgaT10aGlzLndvcmtlclF1ZXVlLnBvcCgpO28ucnVubmluZ1dvcmtlcnMrKyxyW3IubGVuZ3RoLTFdLndlYldvcmtlcj1pLHRoaXMuZmNuKC4uLnIpLnRoZW4oKHt3ZWJXb3JrZXI6biwuLi5tfSk9PntpZih0aGlzLndvcmtlclF1ZXVlLnB1c2gobiksdGhpcy5ydW5JbmZvW3RdIT09bnVsbCl7aWYoby5ydW5uaW5nV29ya2Vycy0tLG8ucmVzdWx0c1tBXT1tLG8uY29tcGxldGVkVGFza3MrKyxvLnByb2dyZXNzQ2FsbGJhY2shPW51bGwmJm8ucHJvZ3Jlc3NDYWxsYmFjayhvLmNvbXBsZXRlZFRhc2tzLG8ucmVzdWx0cy5sZW5ndGgpLG8udGFza1F1ZXVlLmxlbmd0aD4wKXtsZXQgZj1vLnRhc2tRdWV1ZS5zaGlmdCgpO3RoaXMuYWRkVGFzayh0LGZbMF0sZlsxXSl9ZWxzZSBpZighby5hZGRpbmdUYXNrcyYmby5ydW5uaW5nV29ya2Vycz09PTApe2xldCBmPW8ucmVzdWx0cztvLnJlc29sdmUoZiksdGhpcy5jbGVhclRhc2soby5pbmRleCl9fX0pLmNhdGNoKG49PntvLnJlamVjdChuKSx0aGlzLmNsZWFyVGFzayhvLmluZGV4KX0pfWVsc2Ugby5ydW5uaW5nV29ya2VycyE9PTB8fG8ucG9zdHBvbmVkP28udGFza1F1ZXVlLnB1c2goW0Escl0pOihvLnBvc3Rwb25lZD0hMCxzZXRUaW1lb3V0KCgpPT57by5wb3N0cG9uZWQ9ITEsdGhpcy5hZGRUYXNrKG8uaW5kZXgsQSxyKX0sNTApKX1jbGVhclRhc2sodCl7dGhpcy5ydW5JbmZvW3RdLnJlc3VsdHM9W10sdGhpcy5ydW5JbmZvW3RdLnRhc2tRdWV1ZT1bXSx0aGlzLnJ1bkluZm9bdF0ucHJvZ3Jlc3NDYWxsYmFjaz1udWxsLHRoaXMucnVuSW5mb1t0XS5jYW5jZWxlZD1udWxsLHRoaXMucnVuSW5mb1t0XS5yZWplY3Q9KCk9Pnt9LHRoaXMucnVuSW5mb1t0XS5yZXNvbHZlPSgpPT57fX19LCRlPVhlO3ZhciBBaT17VGV4dEZpbGU6IlRleHRGaWxlIixCaW5hcnlGaWxlOiJCaW5hcnlGaWxlIixUZXh0U3RyZWFtOiJUZXh0U3RyZWFtIixCaW5hcnlTdHJlYW06IkJpbmFyeVN0cmVhbSIsSW1hZ2U6IkltYWdlIixQb2ludFNldDoiUG9pbnRTZXQiLE1lc2g6Ik1lc2giLFBvbHlEYXRhOiJQb2x5RGF0YSIsVHJhbnNmb3JtTGlzdDoiVHJhbnNmb3JtTGlzdCIsSnNvbkNvbXBhdGlibGU6Ikpzb25Db21wYXRpYmxlIn0scD1BaTt2YXIgRkE9U3ltYm9sKCJDb21saW5rLnByb3h5Iikscmk9U3ltYm9sKCJDb21saW5rLmVuZHBvaW50IiksQXQ9U3ltYm9sKCJDb21saW5rLnJlbGVhc2VQcm94eSIpLGV0PVN5bWJvbCgiQ29tbGluay5maW5hbGl6ZXIiKSx3ZT1TeW1ib2woIkNvbWxpbmsudGhyb3duIiksVUE9ZT0+dHlwZW9mIGU9PSJvYmplY3QiJiZlIT09bnVsbHx8dHlwZW9mIGU9PSJmdW5jdGlvbiIsaWk9e2NhbkhhbmRsZTplPT5VQShlKSYmZVtGQV0sc2VyaWFsaXplKGUpe2xldHtwb3J0MTp0LHBvcnQyOkF9PW5ldyBNZXNzYWdlQ2hhbm5lbDtyZXR1cm4gTkEoZSx0KSxbQSxbQV1dfSxkZXNlcmlhbGl6ZShlKXtyZXR1cm4gZS5zdGFydCgpLHJ0KGUpfX0sb2k9e2NhbkhhbmRsZTplPT5VQShlKSYmd2UgaW4gZSxzZXJpYWxpemUoe3ZhbHVlOmV9KXtsZXQgdDtyZXR1cm4gZSBpbnN0YW5jZW9mIEVycm9yP3Q9e2lzRXJyb3I6ITAsdmFsdWU6e21lc3NhZ2U6ZS5tZXNzYWdlLG5hbWU6ZS5uYW1lLHN0YWNrOmUuc3RhY2t9fTp0PXtpc0Vycm9yOiExLHZhbHVlOmV9LFt0LFtdXX0sZGVzZXJpYWxpemUoZSl7dGhyb3cgZS5pc0Vycm9yP09iamVjdC5hc3NpZ24obmV3IEVycm9yKGUudmFsdWUubWVzc2FnZSksZS52YWx1ZSk6ZS52YWx1ZX19LFNBPW5ldyBNYXAoW1sicHJveHkiLGlpXSxbInRocm93IixvaV1dKTtmdW5jdGlvbiBhaShlLHQpe2ZvcihsZXQgQSBvZiBlKWlmKHQ9PT1BfHxBPT09IioifHxBIGluc3RhbmNlb2YgUmVnRXhwJiZBLnRlc3QodCkpcmV0dXJuITA7cmV0dXJuITF9ZnVuY3Rpb24gTkEoZSx0PWdsb2JhbFRoaXMsQT1bIioiXSl7dC5hZGRFdmVudExpc3RlbmVyKCJtZXNzYWdlIixmdW5jdGlvbiByKG8pe2lmKCFvfHwhby5kYXRhKXJldHVybjtpZighYWkoQSxvLm9yaWdpbikpe2NvbnNvbGUud2FybihgSW52YWxpZCBvcmlnaW4gJyR7by5vcmlnaW59JyBmb3IgY29tbGluayBwcm94eWApO3JldHVybn1sZXR7aWQ6aSx0eXBlOm4scGF0aDptfT1PYmplY3QuYXNzaWduKHtwYXRoOltdfSxvLmRhdGEpLGY9KG8uZGF0YS5hcmd1bWVudExpc3R8fFtdKS5tYXAoeiksbDt0cnl7bGV0IGE9bS5zbGljZSgwLC0xKS5yZWR1Y2UoKHUscyk9PnVbc10sZSksZz1tLnJlZHVjZSgodSxzKT0+dVtzXSxlKTtzd2l0Y2gobil7Y2FzZSJHRVQiOmw9ZzticmVhaztjYXNlIlNFVCI6YVttLnNsaWNlKC0xKVswXV09eihvLmRhdGEudmFsdWUpLGw9ITA7YnJlYWs7Y2FzZSJBUFBMWSI6bD1nLmFwcGx5KGEsZik7YnJlYWs7Y2FzZSJDT05TVFJVQ1QiOntsZXQgdT1uZXcgZyguLi5mKTtsPUlpKHUpfWJyZWFrO2Nhc2UiRU5EUE9JTlQiOntsZXR7cG9ydDE6dSxwb3J0MjpzfT1uZXcgTWVzc2FnZUNoYW5uZWw7TkEoZSxzKSxsPWl0KHUsW3VdKX1icmVhaztjYXNlIlJFTEVBU0UiOmw9dm9pZCAwO2JyZWFrO2RlZmF1bHQ6cmV0dXJufX1jYXRjaChhKXtsPXt2YWx1ZTphLFt3ZV06MH19UHJvbWlzZS5yZXNvbHZlKGwpLmNhdGNoKGE9Pih7dmFsdWU6YSxbd2VdOjB9KSkudGhlbihhPT57bGV0W2csdV09YmUoYSk7dC5wb3N0TWVzc2FnZShPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sZykse2lkOml9KSx1KSxuPT09IlJFTEVBU0UiJiYodC5yZW1vdmVFdmVudExpc3RlbmVyKCJtZXNzYWdlIixyKSxPQSh0KSxldCBpbiBlJiZ0eXBlb2YgZVtldF09PSJmdW5jdGlvbiImJmVbZXRdKCkpfSkuY2F0Y2goYT0+e2xldFtnLHVdPWJlKHt2YWx1ZTpuZXcgVHlwZUVycm9yKCJVbnNlcmlhbGl6YWJsZSByZXR1cm4gdmFsdWUiKSxbd2VdOjB9KTt0LnBvc3RNZXNzYWdlKE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSxnKSx7aWQ6aX0pLHUpfSl9KSx0LnN0YXJ0JiZ0LnN0YXJ0KCl9ZnVuY3Rpb24gbmkoZSl7cmV0dXJuIGUuY29uc3RydWN0b3IubmFtZT09PSJNZXNzYWdlUG9ydCJ9ZnVuY3Rpb24gT0EoZSl7bmkoZSkmJmUuY2xvc2UoKX1mdW5jdGlvbiBydChlLHQpe3JldHVybiB0dChlLFtdLHQpfWZ1bmN0aW9uIGhlKGUpe2lmKGUpdGhyb3cgbmV3IEVycm9yKCJQcm94eSBoYXMgYmVlbiByZWxlYXNlZCBhbmQgaXMgbm90IHVzZWFibGUiKX1mdW5jdGlvbiBQQShlKXtyZXR1cm4gWChlLHt0eXBlOiJSRUxFQVNFIn0pLnRoZW4oKCk9PntPQShlKX0pfXZhciBSZT1uZXcgV2Vha01hcCxrZT0iRmluYWxpemF0aW9uUmVnaXN0cnkiaW4gZ2xvYmFsVGhpcyYmbmV3IEZpbmFsaXphdGlvblJlZ2lzdHJ5KGU9PntsZXQgdD0oUmUuZ2V0KGUpfHwwKS0xO1JlLnNldChlLHQpLHQ9PT0wJiZQQShlKX0pO2Z1bmN0aW9uIHNpKGUsdCl7bGV0IEE9KFJlLmdldCh0KXx8MCkrMTtSZS5zZXQodCxBKSxrZSYma2UucmVnaXN0ZXIoZSx0LGUpfWZ1bmN0aW9uIGdpKGUpe2tlJiZrZS51bnJlZ2lzdGVyKGUpfWZ1bmN0aW9uIHR0KGUsdD1bXSxBPWZ1bmN0aW9uKCl7fSl7bGV0IHI9ITEsbz1uZXcgUHJveHkoQSx7Z2V0KGksbil7aWYoaGUociksbj09PUF0KXJldHVybigpPT57Z2kobyksUEEoZSkscj0hMH07aWYobj09PSJ0aGVuIil7aWYodC5sZW5ndGg9PT0wKXJldHVybnt0aGVuOigpPT5vfTtsZXQgbT1YKGUse3R5cGU6IkdFVCIscGF0aDp0Lm1hcChmPT5mLnRvU3RyaW5nKCkpfSkudGhlbih6KTtyZXR1cm4gbS50aGVuLmJpbmQobSl9cmV0dXJuIHR0KGUsWy4uLnQsbl0pfSxzZXQoaSxuLG0pe2hlKHIpO2xldFtmLGxdPWJlKG0pO3JldHVybiBYKGUse3R5cGU6IlNFVCIscGF0aDpbLi4udCxuXS5tYXAoYT0+YS50b1N0cmluZygpKSx2YWx1ZTpmfSxsKS50aGVuKHopfSxhcHBseShpLG4sbSl7aGUocik7bGV0IGY9dFt0Lmxlbmd0aC0xXTtpZihmPT09cmkpcmV0dXJuIFgoZSx7dHlwZToiRU5EUE9JTlQifSkudGhlbih6KTtpZihmPT09ImJpbmQiKXJldHVybiB0dChlLHQuc2xpY2UoMCwtMSkpO2xldFtsLGFdPVdBKG0pO3JldHVybiBYKGUse3R5cGU6IkFQUExZIixwYXRoOnQubWFwKGc9PmcudG9TdHJpbmcoKSksYXJndW1lbnRMaXN0Omx9LGEpLnRoZW4oeil9LGNvbnN0cnVjdChpLG4pe2hlKHIpO2xldFttLGZdPVdBKG4pO3JldHVybiBYKGUse3R5cGU6IkNPTlNUUlVDVCIscGF0aDp0Lm1hcChsPT5sLnRvU3RyaW5nKCkpLGFyZ3VtZW50TGlzdDptfSxmKS50aGVuKHopfX0pO3JldHVybiBzaShvLGUpLG99ZnVuY3Rpb24gbGkoZSl7cmV0dXJuIEFycmF5LnByb3RvdHlwZS5jb25jYXQuYXBwbHkoW10sZSl9ZnVuY3Rpb24gV0EoZSl7bGV0IHQ9ZS5tYXAoYmUpO3JldHVyblt0Lm1hcChBPT5BWzBdKSxsaSh0Lm1hcChBPT5BWzFdKSldfXZhciB4QT1uZXcgV2Vha01hcDtmdW5jdGlvbiBpdChlLHQpe3JldHVybiB4QS5zZXQoZSx0KSxlfWZ1bmN0aW9uIElpKGUpe3JldHVybiBPYmplY3QuYXNzaWduKGUse1tGQV06ITB9KX1mdW5jdGlvbiBiZShlKXtmb3IobGV0W3QsQV1vZiBTQSlpZihBLmNhbkhhbmRsZShlKSl7bGV0W3Isb109QS5zZXJpYWxpemUoZSk7cmV0dXJuW3t0eXBlOiJIQU5ETEVSIixuYW1lOnQsdmFsdWU6cn0sb119cmV0dXJuW3t0eXBlOiJSQVciLHZhbHVlOmV9LHhBLmdldChlKXx8W11dfWZ1bmN0aW9uIHooZSl7c3dpdGNoKGUudHlwZSl7Y2FzZSJIQU5ETEVSIjpyZXR1cm4gU0EuZ2V0KGUubmFtZSkuZGVzZXJpYWxpemUoZS52YWx1ZSk7Y2FzZSJSQVciOnJldHVybiBlLnZhbHVlfX1mdW5jdGlvbiBYKGUsdCxBKXtyZXR1cm4gbmV3IFByb21pc2Uocj0+e2xldCBvPXBpKCk7ZS5hZGRFdmVudExpc3RlbmVyKCJtZXNzYWdlIixmdW5jdGlvbiBpKG4peyFuLmRhdGF8fCFuLmRhdGEuaWR8fG4uZGF0YS5pZCE9PW98fChlLnJlbW92ZUV2ZW50TGlzdGVuZXIoIm1lc3NhZ2UiLGkpLHIobi5kYXRhKSl9KSxlLnN0YXJ0JiZlLnN0YXJ0KCksZS5wb3N0TWVzc2FnZShPYmplY3QuYXNzaWduKHtpZDpvfSx0KSxBKX0pfWZ1bmN0aW9uIHBpKCl7cmV0dXJuIG5ldyBBcnJheSg0KS5maWxsKDApLm1hcCgoKT0+TWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpKk51bWJlci5NQVhfU0FGRV9JTlRFR0VSKS50b1N0cmluZygxNikpLmpvaW4oIi0iKX1mdW5jdGlvbiBnZShlLHQpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiBlLmFwcGx5KHQsYXJndW1lbnRzKX19dmFye3RvU3RyaW5nOm1pfT1PYmplY3QucHJvdG90eXBlLHtnZXRQcm90b3R5cGVPZjpudH09T2JqZWN0LFdlPShlPT50PT57bGV0IEE9bWkuY2FsbCh0KTtyZXR1cm4gZVtBXXx8KGVbQV09QS5zbGljZSg4LC0xKS50b0xvd2VyQ2FzZSgpKX0pKE9iamVjdC5jcmVhdGUobnVsbCkpLFQ9ZT0+KGU9ZS50b0xvd2VyQ2FzZSgpLHQ9PldlKHQpPT09ZSksRmU9ZT0+dD0+dHlwZW9mIHQ9PT1lLHtpc0FycmF5OiR9PUFycmF5LGxlPUZlKCJ1bmRlZmluZWQiKTtmdW5jdGlvbiB1aShlKXtyZXR1cm4gZSE9PW51bGwmJiFsZShlKSYmZS5jb25zdHJ1Y3RvciE9PW51bGwmJiFsZShlLmNvbnN0cnVjdG9yKSYmUChlLmNvbnN0cnVjdG9yLmlzQnVmZmVyKSYmZS5jb25zdHJ1Y3Rvci5pc0J1ZmZlcihlKX12YXIgSkE9VCgiQXJyYXlCdWZmZXIiKTtmdW5jdGlvbiBmaShlKXtsZXQgdDtyZXR1cm4gdHlwZW9mIEFycmF5QnVmZmVyPCJ1IiYmQXJyYXlCdWZmZXIuaXNWaWV3P3Q9QXJyYXlCdWZmZXIuaXNWaWV3KGUpOnQ9ZSYmZS5idWZmZXImJkpBKGUuYnVmZmVyKSx0fXZhciBjaT1GZSgic3RyaW5nIiksUD1GZSgiZnVuY3Rpb24iKSxNQT1GZSgibnVtYmVyIiksVWU9ZT0+ZSE9PW51bGwmJnR5cGVvZiBlPT0ib2JqZWN0IixkaT1lPT5lPT09ITB8fGU9PT0hMSxEZT1lPT57aWYoV2UoZSkhPT0ib2JqZWN0IilyZXR1cm4hMTtsZXQgdD1udChlKTtyZXR1cm4odD09PW51bGx8fHQ9PT1PYmplY3QucHJvdG90eXBlfHxPYmplY3QuZ2V0UHJvdG90eXBlT2YodCk9PT1udWxsKSYmIShTeW1ib2wudG9TdHJpbmdUYWcgaW4gZSkmJiEoU3ltYm9sLml0ZXJhdG9yIGluIGUpfSxCaT1UKCJEYXRlIiksQ2k9VCgiRmlsZSIpLEVpPVQoIkJsb2IiKSx5aT1UKCJGaWxlTGlzdCIpLFFpPWU9PlVlKGUpJiZQKGUucGlwZSksaGk9ZT0+e2xldCB0O3JldHVybiBlJiYodHlwZW9mIEZvcm1EYXRhPT0iZnVuY3Rpb24iJiZlIGluc3RhbmNlb2YgRm9ybURhdGF8fFAoZS5hcHBlbmQpJiYoKHQ9V2UoZSkpPT09ImZvcm1kYXRhInx8dD09PSJvYmplY3QiJiZQKGUudG9TdHJpbmcpJiZlLnRvU3RyaW5nKCk9PT0iW29iamVjdCBGb3JtRGF0YV0iKSl9LHdpPVQoIlVSTFNlYXJjaFBhcmFtcyIpLFtSaSxraSxiaSxEaV09WyJSZWFkYWJsZVN0cmVhbSIsIlJlcXVlc3QiLCJSZXNwb25zZSIsIkhlYWRlcnMiXS5tYXAoVCksV2k9ZT0+ZS50cmltP2UudHJpbSgpOmUucmVwbGFjZSgvXltcc1x1RkVGRlx4QTBdK3xbXHNcdUZFRkZceEEwXSskL2csIiIpO2Z1bmN0aW9uIEllKGUsdCx7YWxsT3duS2V5czpBPSExfT17fSl7aWYoZT09PW51bGx8fHR5cGVvZiBlPiJ1IilyZXR1cm47bGV0IHIsbztpZih0eXBlb2YgZSE9Im9iamVjdCImJihlPVtlXSksJChlKSlmb3Iocj0wLG89ZS5sZW5ndGg7cjxvO3IrKyl0LmNhbGwobnVsbCxlW3JdLHIsZSk7ZWxzZXtsZXQgaT1BP09iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKGUpOk9iamVjdC5rZXlzKGUpLG49aS5sZW5ndGgsbTtmb3Iocj0wO3I8bjtyKyspbT1pW3JdLHQuY2FsbChudWxsLGVbbV0sbSxlKX19ZnVuY3Rpb24gSEEoZSx0KXt0PXQudG9Mb3dlckNhc2UoKTtsZXQgQT1PYmplY3Qua2V5cyhlKSxyPUEubGVuZ3RoLG87Zm9yKDtyLS0gPjA7KWlmKG89QVtyXSx0PT09by50b0xvd2VyQ2FzZSgpKXJldHVybiBvO3JldHVybiBudWxsfXZhciBWPXR5cGVvZiBnbG9iYWxUaGlzPCJ1Ij9nbG9iYWxUaGlzOnR5cGVvZiBzZWxmPCJ1Ij9zZWxmOnR5cGVvZiB3aW5kb3c8InUiP3dpbmRvdzpnbG9iYWwscUE9ZT0+IWxlKGUpJiZlIT09VjtmdW5jdGlvbiBhdCgpe2xldHtjYXNlbGVzczplfT1xQSh0aGlzKSYmdGhpc3x8e30sdD17fSxBPShyLG8pPT57bGV0IGk9ZSYmSEEodCxvKXx8bztEZSh0W2ldKSYmRGUocik/dFtpXT1hdCh0W2ldLHIpOkRlKHIpP3RbaV09YXQoe30scik6JChyKT90W2ldPXIuc2xpY2UoKTp0W2ldPXJ9O2ZvcihsZXQgcj0wLG89YXJndW1lbnRzLmxlbmd0aDtyPG87cisrKWFyZ3VtZW50c1tyXSYmSWUoYXJndW1lbnRzW3JdLEEpO3JldHVybiB0fXZhciBGaT0oZSx0LEEse2FsbE93bktleXM6cn09e30pPT4oSWUodCwobyxpKT0+e0EmJlAobyk/ZVtpXT1nZShvLEEpOmVbaV09b30se2FsbE93bktleXM6cn0pLGUpLFVpPWU9PihlLmNoYXJDb2RlQXQoMCk9PT02NTI3OSYmKGU9ZS5zbGljZSgxKSksZSksU2k9KGUsdCxBLHIpPT57ZS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh0LnByb3RvdHlwZSxyKSxlLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1lLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJzdXBlciIse3ZhbHVlOnQucHJvdG90eXBlfSksQSYmT2JqZWN0LmFzc2lnbihlLnByb3RvdHlwZSxBKX0sTmk9KGUsdCxBLHIpPT57bGV0IG8saSxuLG09e307aWYodD10fHx7fSxlPT1udWxsKXJldHVybiB0O2Rve2ZvcihvPU9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKGUpLGk9by5sZW5ndGg7aS0tID4wOyluPW9baV0sKCFyfHxyKG4sZSx0KSkmJiFtW25dJiYodFtuXT1lW25dLG1bbl09ITApO2U9QSE9PSExJiZudChlKX13aGlsZShlJiYoIUF8fEEoZSx0KSkmJmUhPT1PYmplY3QucHJvdG90eXBlKTtyZXR1cm4gdH0sT2k9KGUsdCxBKT0+e2U9U3RyaW5nKGUpLChBPT09dm9pZCAwfHxBPmUubGVuZ3RoKSYmKEE9ZS5sZW5ndGgpLEEtPXQubGVuZ3RoO2xldCByPWUuaW5kZXhPZih0LEEpO3JldHVybiByIT09LTEmJnI9PT1BfSxQaT1lPT57aWYoIWUpcmV0dXJuIG51bGw7aWYoJChlKSlyZXR1cm4gZTtsZXQgdD1lLmxlbmd0aDtpZighTUEodCkpcmV0dXJuIG51bGw7bGV0IEE9bmV3IEFycmF5KHQpO2Zvcig7dC0tID4wOylBW3RdPWVbdF07cmV0dXJuIEF9LHhpPShlPT50PT5lJiZ0IGluc3RhbmNlb2YgZSkodHlwZW9mIFVpbnQ4QXJyYXk8InUiJiZudChVaW50OEFycmF5KSksVGk9KGUsdCk9PntsZXQgcj0oZSYmZVtTeW1ib2wuaXRlcmF0b3JdKS5jYWxsKGUpLG87Zm9yKDsobz1yLm5leHQoKSkmJiFvLmRvbmU7KXtsZXQgaT1vLnZhbHVlO3QuY2FsbChlLGlbMF0saVsxXSl9fSxHaT0oZSx0KT0+e2xldCBBLHI9W107Zm9yKDsoQT1lLmV4ZWModCkpIT09bnVsbDspci5wdXNoKEEpO3JldHVybiByfSxMaT1UKCJIVE1MRm9ybUVsZW1lbnQiKSxKaT1lPT5lLnRvTG93ZXJDYXNlKCkucmVwbGFjZSgvWy1fXHNdKFthLXpcZF0pKFx3KikvZyxmdW5jdGlvbihBLHIsbyl7cmV0dXJuIHIudG9VcHBlckNhc2UoKStvfSksR0E9KCh7aGFzT3duUHJvcGVydHk6ZX0pPT4odCxBKT0+ZS5jYWxsKHQsQSkpKE9iamVjdC5wcm90b3R5cGUpLE1pPVQoIlJlZ0V4cCIpLFlBPShlLHQpPT57bGV0IEE9T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMoZSkscj17fTtJZShBLChvLGkpPT57bGV0IG47KG49dChvLGksZSkpIT09ITEmJihyW2ldPW58fG8pfSksT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoZSxyKX0sSGk9ZT0+e1lBKGUsKHQsQSk9PntpZihQKGUpJiZbImFyZ3VtZW50cyIsImNhbGxlciIsImNhbGxlZSJdLmluZGV4T2YoQSkhPT0tMSlyZXR1cm4hMTtsZXQgcj1lW0FdO2lmKFAocikpe2lmKHQuZW51bWVyYWJsZT0hMSwid3JpdGFibGUiaW4gdCl7dC53cml0YWJsZT0hMTtyZXR1cm59dC5zZXR8fCh0LnNldD0oKT0+e3Rocm93IEVycm9yKCJDYW4gbm90IHJld3JpdGUgcmVhZC1vbmx5IG1ldGhvZCAnIitBKyInIil9KX19KX0scWk9KGUsdCk9PntsZXQgQT17fSxyPW89PntvLmZvckVhY2goaT0+e0FbaV09ITB9KX07cmV0dXJuICQoZSk/cihlKTpyKFN0cmluZyhlKS5zcGxpdCh0KSksQX0sWWk9KCk9Pnt9LEtpPShlLHQpPT5lIT1udWxsJiZOdW1iZXIuaXNGaW5pdGUoZT0rZSk/ZTp0LG90PSJhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5eiIsTEE9IjAxMjM0NTY3ODkiLEtBPXtESUdJVDpMQSxBTFBIQTpvdCxBTFBIQV9ESUdJVDpvdCtvdC50b1VwcGVyQ2FzZSgpK0xBfSx2aT0oZT0xNix0PUtBLkFMUEhBX0RJR0lUKT0+e2xldCBBPSIiLHtsZW5ndGg6cn09dDtmb3IoO2UtLTspQSs9dFtNYXRoLnJhbmRvbSgpKnJ8MF07cmV0dXJuIEF9O2Z1bmN0aW9uIGppKGUpe3JldHVybiEhKGUmJlAoZS5hcHBlbmQpJiZlW1N5bWJvbC50b1N0cmluZ1RhZ109PT0iRm9ybURhdGEiJiZlW1N5bWJvbC5pdGVyYXRvcl0pfXZhciBfaT1lPT57bGV0IHQ9bmV3IEFycmF5KDEwKSxBPShyLG8pPT57aWYoVWUocikpe2lmKHQuaW5kZXhPZihyKT49MClyZXR1cm47aWYoISgidG9KU09OImluIHIpKXt0W29dPXI7bGV0IGk9JChyKT9bXTp7fTtyZXR1cm4gSWUociwobixtKT0+e2xldCBmPUEobixvKzEpOyFsZShmKSYmKGlbbV09Zil9KSx0W29dPXZvaWQgMCxpfX1yZXR1cm4gcn07cmV0dXJuIEEoZSwwKX0semk9VCgiQXN5bmNGdW5jdGlvbiIpLFZpPWU9PmUmJihVZShlKXx8UChlKSkmJlAoZS50aGVuKSYmUChlLmNhdGNoKSx2QT0oKGUsdCk9PmU/c2V0SW1tZWRpYXRlOnQ/KChBLHIpPT4oVi5hZGRFdmVudExpc3RlbmVyKCJtZXNzYWdlIiwoe3NvdXJjZTpvLGRhdGE6aX0pPT57bz09PVYmJmk9PT1BJiZyLmxlbmd0aCYmci5zaGlmdCgpKCl9LCExKSxvPT57ci5wdXNoKG8pLFYucG9zdE1lc3NhZ2UoQSwiKiIpfSkpKGBheGlvc0Ake01hdGgucmFuZG9tKCl9YCxbXSk6QT0+c2V0VGltZW91dChBKSkodHlwZW9mIHNldEltbWVkaWF0ZT09ImZ1bmN0aW9uIixQKFYucG9zdE1lc3NhZ2UpKSxaaT10eXBlb2YgcXVldWVNaWNyb3Rhc2s8InUiP3F1ZXVlTWljcm90YXNrLmJpbmQoVik6dHlwZW9mIHByb2Nlc3M8InUiJiZwcm9jZXNzLm5leHRUaWNrfHx2QSxjPXtpc0FycmF5OiQsaXNBcnJheUJ1ZmZlcjpKQSxpc0J1ZmZlcjp1aSxpc0Zvcm1EYXRhOmhpLGlzQXJyYXlCdWZmZXJWaWV3OmZpLGlzU3RyaW5nOmNpLGlzTnVtYmVyOk1BLGlzQm9vbGVhbjpkaSxpc09iamVjdDpVZSxpc1BsYWluT2JqZWN0OkRlLGlzUmVhZGFibGVTdHJlYW06UmksaXNSZXF1ZXN0OmtpLGlzUmVzcG9uc2U6YmksaXNIZWFkZXJzOkRpLGlzVW5kZWZpbmVkOmxlLGlzRGF0ZTpCaSxpc0ZpbGU6Q2ksaXNCbG9iOkVpLGlzUmVnRXhwOk1pLGlzRnVuY3Rpb246UCxpc1N0cmVhbTpRaSxpc1VSTFNlYXJjaFBhcmFtczp3aSxpc1R5cGVkQXJyYXk6eGksaXNGaWxlTGlzdDp5aSxmb3JFYWNoOkllLG1lcmdlOmF0LGV4dGVuZDpGaSx0cmltOldpLHN0cmlwQk9NOlVpLGluaGVyaXRzOlNpLHRvRmxhdE9iamVjdDpOaSxraW5kT2Y6V2Usa2luZE9mVGVzdDpULGVuZHNXaXRoOk9pLHRvQXJyYXk6UGksZm9yRWFjaEVudHJ5OlRpLG1hdGNoQWxsOkdpLGlzSFRNTEZvcm06TGksaGFzT3duUHJvcGVydHk6R0EsaGFzT3duUHJvcDpHQSxyZWR1Y2VEZXNjcmlwdG9yczpZQSxmcmVlemVNZXRob2RzOkhpLHRvT2JqZWN0U2V0OnFpLHRvQ2FtZWxDYXNlOkppLG5vb3A6WWksdG9GaW5pdGVOdW1iZXI6S2ksZmluZEtleTpIQSxnbG9iYWw6Vixpc0NvbnRleHREZWZpbmVkOnFBLEFMUEhBQkVUOktBLGdlbmVyYXRlU3RyaW5nOnZpLGlzU3BlY0NvbXBsaWFudEZvcm06amksdG9KU09OT2JqZWN0Ol9pLGlzQXN5bmNGbjp6aSxpc1RoZW5hYmxlOlZpLHNldEltbWVkaWF0ZTp2QSxhc2FwOlppfTtmdW5jdGlvbiBlZShlLHQsQSxyLG8pe0Vycm9yLmNhbGwodGhpcyksRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2U/RXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UodGhpcyx0aGlzLmNvbnN0cnVjdG9yKTp0aGlzLnN0YWNrPW5ldyBFcnJvcigpLnN0YWNrLHRoaXMubWVzc2FnZT1lLHRoaXMubmFtZT0iQXhpb3NFcnJvciIsdCYmKHRoaXMuY29kZT10KSxBJiYodGhpcy5jb25maWc9QSksciYmKHRoaXMucmVxdWVzdD1yKSxvJiYodGhpcy5yZXNwb25zZT1vKX1jLmluaGVyaXRzKGVlLEVycm9yLHt0b0pTT046ZnVuY3Rpb24oKXtyZXR1cm57bWVzc2FnZTp0aGlzLm1lc3NhZ2UsbmFtZTp0aGlzLm5hbWUsZGVzY3JpcHRpb246dGhpcy5kZXNjcmlwdGlvbixudW1iZXI6dGhpcy5udW1iZXIsZmlsZU5hbWU6dGhpcy5maWxlTmFtZSxsaW5lTnVtYmVyOnRoaXMubGluZU51bWJlcixjb2x1bW5OdW1iZXI6dGhpcy5jb2x1bW5OdW1iZXIsc3RhY2s6dGhpcy5zdGFjayxjb25maWc6Yy50b0pTT05PYmplY3QodGhpcy5jb25maWcpLGNvZGU6dGhpcy5jb2RlLHN0YXR1czp0aGlzLnJlc3BvbnNlJiZ0aGlzLnJlc3BvbnNlLnN0YXR1cz90aGlzLnJlc3BvbnNlLnN0YXR1czpudWxsfX19KTt2YXIgakE9ZWUucHJvdG90eXBlLF9BPXt9O1siRVJSX0JBRF9PUFRJT05fVkFMVUUiLCJFUlJfQkFEX09QVElPTiIsIkVDT05OQUJPUlRFRCIsIkVUSU1FRE9VVCIsIkVSUl9ORVRXT1JLIiwiRVJSX0ZSX1RPT19NQU5ZX1JFRElSRUNUUyIsIkVSUl9ERVBSRUNBVEVEIiwiRVJSX0JBRF9SRVNQT05TRSIsIkVSUl9CQURfUkVRVUVTVCIsIkVSUl9DQU5DRUxFRCIsIkVSUl9OT1RfU1VQUE9SVCIsIkVSUl9JTlZBTElEX1VSTCJdLmZvckVhY2goZT0+e19BW2VdPXt2YWx1ZTplfX0pO09iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKGVlLF9BKTtPYmplY3QuZGVmaW5lUHJvcGVydHkoakEsImlzQXhpb3NFcnJvciIse3ZhbHVlOiEwfSk7ZWUuZnJvbT0oZSx0LEEscixvLGkpPT57bGV0IG49T2JqZWN0LmNyZWF0ZShqQSk7cmV0dXJuIGMudG9GbGF0T2JqZWN0KGUsbixmdW5jdGlvbihmKXtyZXR1cm4gZiE9PUVycm9yLnByb3RvdHlwZX0sbT0+bSE9PSJpc0F4aW9zRXJyb3IiKSxlZS5jYWxsKG4sZS5tZXNzYWdlLHQsQSxyLG8pLG4uY2F1c2U9ZSxuLm5hbWU9ZS5uYW1lLGkmJk9iamVjdC5hc3NpZ24obixpKSxufTt2YXIgaD1lZTt2YXIgU2U9bnVsbDtmdW5jdGlvbiBzdChlKXtyZXR1cm4gYy5pc1BsYWluT2JqZWN0KGUpfHxjLmlzQXJyYXkoZSl9ZnVuY3Rpb24gVkEoZSl7cmV0dXJuIGMuZW5kc1dpdGgoZSwiW10iKT9lLnNsaWNlKDAsLTIpOmV9ZnVuY3Rpb24gekEoZSx0LEEpe3JldHVybiBlP2UuY29uY2F0KHQpLm1hcChmdW5jdGlvbihvLGkpe3JldHVybiBvPVZBKG8pLCFBJiZpPyJbIitvKyJdIjpvfSkuam9pbihBPyIuIjoiIik6dH1mdW5jdGlvbiBYaShlKXtyZXR1cm4gYy5pc0FycmF5KGUpJiYhZS5zb21lKHN0KX12YXIgJGk9Yy50b0ZsYXRPYmplY3QoYyx7fSxudWxsLGZ1bmN0aW9uKHQpe3JldHVybi9eaXNbQS1aXS8udGVzdCh0KX0pO2Z1bmN0aW9uIGVvKGUsdCxBKXtpZighYy5pc09iamVjdChlKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJ0YXJnZXQgbXVzdCBiZSBhbiBvYmplY3QiKTt0PXR8fG5ldyhTZXx8Rm9ybURhdGEpLEE9Yy50b0ZsYXRPYmplY3QoQSx7bWV0YVRva2VuczohMCxkb3RzOiExLGluZGV4ZXM6ITF9LCExLGZ1bmN0aW9uKEIsZCl7cmV0dXJuIWMuaXNVbmRlZmluZWQoZFtCXSl9KTtsZXQgcj1BLm1ldGFUb2tlbnMsbz1BLnZpc2l0b3J8fGEsaT1BLmRvdHMsbj1BLmluZGV4ZXMsZj0oQS5CbG9ifHx0eXBlb2YgQmxvYjwidSImJkJsb2IpJiZjLmlzU3BlY0NvbXBsaWFudEZvcm0odCk7aWYoIWMuaXNGdW5jdGlvbihvKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJ2aXNpdG9yIG11c3QgYmUgYSBmdW5jdGlvbiIpO2Z1bmN0aW9uIGwoSSl7aWYoST09PW51bGwpcmV0dXJuIiI7aWYoYy5pc0RhdGUoSSkpcmV0dXJuIEkudG9JU09TdHJpbmcoKTtpZighZiYmYy5pc0Jsb2IoSSkpdGhyb3cgbmV3IGgoIkJsb2IgaXMgbm90IHN1cHBvcnRlZC4gVXNlIGEgQnVmZmVyIGluc3RlYWQuIik7cmV0dXJuIGMuaXNBcnJheUJ1ZmZlcihJKXx8Yy5pc1R5cGVkQXJyYXkoSSk/ZiYmdHlwZW9mIEJsb2I9PSJmdW5jdGlvbiI/bmV3IEJsb2IoW0ldKTpCdWZmZXIuZnJvbShJKTpJfWZ1bmN0aW9uIGEoSSxCLGQpe2xldCBrPUk7aWYoSSYmIWQmJnR5cGVvZiBJPT0ib2JqZWN0Iil7aWYoYy5lbmRzV2l0aChCLCJ7fSIpKUI9cj9COkIuc2xpY2UoMCwtMiksST1KU09OLnN0cmluZ2lmeShJKTtlbHNlIGlmKGMuaXNBcnJheShJKSYmWGkoSSl8fChjLmlzRmlsZUxpc3QoSSl8fGMuZW5kc1dpdGgoQiwiW10iKSkmJihrPWMudG9BcnJheShJKSkpcmV0dXJuIEI9VkEoQiksay5mb3JFYWNoKGZ1bmN0aW9uKFIseCl7IShjLmlzVW5kZWZpbmVkKFIpfHxSPT09bnVsbCkmJnQuYXBwZW5kKG49PT0hMD96QShbQl0seCxpKTpuPT09bnVsbD9COkIrIltdIixsKFIpKX0pLCExfXJldHVybiBzdChJKT8hMDoodC5hcHBlbmQoekEoZCxCLGkpLGwoSSkpLCExKX1sZXQgZz1bXSx1PU9iamVjdC5hc3NpZ24oJGkse2RlZmF1bHRWaXNpdG9yOmEsY29udmVydFZhbHVlOmwsaXNWaXNpdGFibGU6c3R9KTtmdW5jdGlvbiBzKEksQil7aWYoIWMuaXNVbmRlZmluZWQoSSkpe2lmKGcuaW5kZXhPZihJKSE9PS0xKXRocm93IEVycm9yKCJDaXJjdWxhciByZWZlcmVuY2UgZGV0ZWN0ZWQgaW4gIitCLmpvaW4oIi4iKSk7Zy5wdXNoKEkpLGMuZm9yRWFjaChJLGZ1bmN0aW9uKGssVSl7KCEoYy5pc1VuZGVmaW5lZChrKXx8az09PW51bGwpJiZvLmNhbGwodCxrLGMuaXNTdHJpbmcoVSk/VS50cmltKCk6VSxCLHUpKT09PSEwJiZzKGssQj9CLmNvbmNhdChVKTpbVV0pfSksZy5wb3AoKX19aWYoIWMuaXNPYmplY3QoZSkpdGhyb3cgbmV3IFR5cGVFcnJvcigiZGF0YSBtdXN0IGJlIGFuIG9iamVjdCIpO3JldHVybiBzKGUpLHR9dmFyIFk9ZW87ZnVuY3Rpb24gWkEoZSl7bGV0IHQ9eyIhIjoiJTIxIiwiJyI6IiUyNyIsIigiOiIlMjgiLCIpIjoiJTI5IiwifiI6IiU3RSIsIiUyMCI6IisiLCIlMDAiOiJcMCJ9O3JldHVybiBlbmNvZGVVUklDb21wb25lbnQoZSkucmVwbGFjZSgvWyEnKCl+XXwlMjB8JTAwL2csZnVuY3Rpb24ocil7cmV0dXJuIHRbcl19KX1mdW5jdGlvbiBYQShlLHQpe3RoaXMuX3BhaXJzPVtdLGUmJlkoZSx0aGlzLHQpfXZhciAkQT1YQS5wcm90b3R5cGU7JEEuYXBwZW5kPWZ1bmN0aW9uKHQsQSl7dGhpcy5fcGFpcnMucHVzaChbdCxBXSl9OyRBLnRvU3RyaW5nPWZ1bmN0aW9uKHQpe2xldCBBPXQ/ZnVuY3Rpb24ocil7cmV0dXJuIHQuY2FsbCh0aGlzLHIsWkEpfTpaQTtyZXR1cm4gdGhpcy5fcGFpcnMubWFwKGZ1bmN0aW9uKG8pe3JldHVybiBBKG9bMF0pKyI9IitBKG9bMV0pfSwiIikuam9pbigiJiIpfTt2YXIgTmU9WEE7ZnVuY3Rpb24gdG8oZSl7cmV0dXJuIGVuY29kZVVSSUNvbXBvbmVudChlKS5yZXBsYWNlKC8lM0EvZ2ksIjoiKS5yZXBsYWNlKC8lMjQvZywiJCIpLnJlcGxhY2UoLyUyQy9naSwiLCIpLnJlcGxhY2UoLyUyMC9nLCIrIikucmVwbGFjZSgvJTVCL2dpLCJbIikucmVwbGFjZSgvJTVEL2dpLCJdIil9ZnVuY3Rpb24gcGUoZSx0LEEpe2lmKCF0KXJldHVybiBlO2xldCByPUEmJkEuZW5jb2RlfHx0byxvPUEmJkEuc2VyaWFsaXplLGk7aWYobz9pPW8odCxBKTppPWMuaXNVUkxTZWFyY2hQYXJhbXModCk/dC50b1N0cmluZygpOm5ldyBOZSh0LEEpLnRvU3RyaW5nKHIpLGkpe2xldCBuPWUuaW5kZXhPZigiIyIpO24hPT0tMSYmKGU9ZS5zbGljZSgwLG4pKSxlKz0oZS5pbmRleE9mKCI/Iik9PT0tMT8iPyI6IiYiKStpfXJldHVybiBlfXZhciBndD1jbGFzc3tjb25zdHJ1Y3Rvcigpe3RoaXMuaGFuZGxlcnM9W119dXNlKHQsQSxyKXtyZXR1cm4gdGhpcy5oYW5kbGVycy5wdXNoKHtmdWxmaWxsZWQ6dCxyZWplY3RlZDpBLHN5bmNocm9ub3VzOnI/ci5zeW5jaHJvbm91czohMSxydW5XaGVuOnI/ci5ydW5XaGVuOm51bGx9KSx0aGlzLmhhbmRsZXJzLmxlbmd0aC0xfWVqZWN0KHQpe3RoaXMuaGFuZGxlcnNbdF0mJih0aGlzLmhhbmRsZXJzW3RdPW51bGwpfWNsZWFyKCl7dGhpcy5oYW5kbGVycyYmKHRoaXMuaGFuZGxlcnM9W10pfWZvckVhY2godCl7Yy5mb3JFYWNoKHRoaXMuaGFuZGxlcnMsZnVuY3Rpb24ocil7ciE9PW51bGwmJnQocil9KX19LGx0PWd0O3ZhciBPZT17c2lsZW50SlNPTlBhcnNpbmc6ITAsZm9yY2VkSlNPTlBhcnNpbmc6ITAsY2xhcmlmeVRpbWVvdXRFcnJvcjohMX07dmFyIGVyPXR5cGVvZiBVUkxTZWFyY2hQYXJhbXM8InUiP1VSTFNlYXJjaFBhcmFtczpOZTt2YXIgdHI9dHlwZW9mIEZvcm1EYXRhPCJ1Ij9Gb3JtRGF0YTpudWxsO3ZhciBBcj10eXBlb2YgQmxvYjwidSI/QmxvYjpudWxsO3ZhciBycj17aXNCcm93c2VyOiEwLGNsYXNzZXM6e1VSTFNlYXJjaFBhcmFtczplcixGb3JtRGF0YTp0cixCbG9iOkFyfSxwcm90b2NvbHM6WyJodHRwIiwiaHR0cHMiLCJmaWxlIiwiYmxvYiIsInVybCIsImRhdGEiXX07dmFyIHB0PXt9O0tyKHB0LHtoYXNCcm93c2VyRW52OigpPT5JdCxoYXNTdGFuZGFyZEJyb3dzZXJFbnY6KCk9PkFvLGhhc1N0YW5kYXJkQnJvd3NlcldlYldvcmtlckVudjooKT0+cm8sb3JpZ2luOigpPT5pb30pO3ZhciBJdD10eXBlb2Ygd2luZG93PCJ1IiYmdHlwZW9mIGRvY3VtZW50PCJ1IixBbz0oZT0+SXQmJlsiUmVhY3ROYXRpdmUiLCJOYXRpdmVTY3JpcHQiLCJOUyJdLmluZGV4T2YoZSk8MCkodHlwZW9mIG5hdmlnYXRvcjwidSImJm5hdmlnYXRvci5wcm9kdWN0KSxybz10eXBlb2YgV29ya2VyR2xvYmFsU2NvcGU8InUiJiZzZWxmIGluc3RhbmNlb2YgV29ya2VyR2xvYmFsU2NvcGUmJnR5cGVvZiBzZWxmLmltcG9ydFNjcmlwdHM9PSJmdW5jdGlvbiIsaW89SXQmJndpbmRvdy5sb2NhdGlvbi5ocmVmfHwiaHR0cDovL2xvY2FsaG9zdCI7dmFyIEY9ey4uLnB0LC4uLnJyfTtmdW5jdGlvbiBtdChlLHQpe3JldHVybiBZKGUsbmV3IEYuY2xhc3Nlcy5VUkxTZWFyY2hQYXJhbXMsT2JqZWN0LmFzc2lnbih7dmlzaXRvcjpmdW5jdGlvbihBLHIsbyxpKXtyZXR1cm4gRi5pc05vZGUmJmMuaXNCdWZmZXIoQSk/KHRoaXMuYXBwZW5kKHIsQS50b1N0cmluZygiYmFzZTY0IikpLCExKTppLmRlZmF1bHRWaXNpdG9yLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19LHQpKX1mdW5jdGlvbiBvbyhlKXtyZXR1cm4gYy5tYXRjaEFsbCgvXHcrfFxbKFx3KildL2csZSkubWFwKHQ9PnRbMF09PT0iW10iPyIiOnRbMV18fHRbMF0pfWZ1bmN0aW9uIGFvKGUpe2xldCB0PXt9LEE9T2JqZWN0LmtleXMoZSkscixvPUEubGVuZ3RoLGk7Zm9yKHI9MDtyPG87cisrKWk9QVtyXSx0W2ldPWVbaV07cmV0dXJuIHR9ZnVuY3Rpb24gbm8oZSl7ZnVuY3Rpb24gdChBLHIsbyxpKXtsZXQgbj1BW2krK107aWYobj09PSJfX3Byb3RvX18iKXJldHVybiEwO2xldCBtPU51bWJlci5pc0Zpbml0ZSgrbiksZj1pPj1BLmxlbmd0aDtyZXR1cm4gbj0hbiYmYy5pc0FycmF5KG8pP28ubGVuZ3RoOm4sZj8oYy5oYXNPd25Qcm9wKG8sbik/b1tuXT1bb1tuXSxyXTpvW25dPXIsIW0pOigoIW9bbl18fCFjLmlzT2JqZWN0KG9bbl0pKSYmKG9bbl09W10pLHQoQSxyLG9bbl0saSkmJmMuaXNBcnJheShvW25dKSYmKG9bbl09YW8ob1tuXSkpLCFtKX1pZihjLmlzRm9ybURhdGEoZSkmJmMuaXNGdW5jdGlvbihlLmVudHJpZXMpKXtsZXQgQT17fTtyZXR1cm4gYy5mb3JFYWNoRW50cnkoZSwocixvKT0+e3Qob28ociksbyxBLDApfSksQX1yZXR1cm4gbnVsbH12YXIgUGU9bm87ZnVuY3Rpb24gc28oZSx0LEEpe2lmKGMuaXNTdHJpbmcoZSkpdHJ5e3JldHVybih0fHxKU09OLnBhcnNlKShlKSxjLnRyaW0oZSl9Y2F0Y2gocil7aWYoci5uYW1lIT09IlN5bnRheEVycm9yIil0aHJvdyByfXJldHVybihBfHxKU09OLnN0cmluZ2lmeSkoZSl9dmFyIHV0PXt0cmFuc2l0aW9uYWw6T2UsYWRhcHRlcjpbInhociIsImh0dHAiLCJmZXRjaCJdLHRyYW5zZm9ybVJlcXVlc3Q6W2Z1bmN0aW9uKHQsQSl7bGV0IHI9QS5nZXRDb250ZW50VHlwZSgpfHwiIixvPXIuaW5kZXhPZigiYXBwbGljYXRpb24vanNvbiIpPi0xLGk9Yy5pc09iamVjdCh0KTtpZihpJiZjLmlzSFRNTEZvcm0odCkmJih0PW5ldyBGb3JtRGF0YSh0KSksYy5pc0Zvcm1EYXRhKHQpKXJldHVybiBvP0pTT04uc3RyaW5naWZ5KFBlKHQpKTp0O2lmKGMuaXNBcnJheUJ1ZmZlcih0KXx8Yy5pc0J1ZmZlcih0KXx8Yy5pc1N0cmVhbSh0KXx8Yy5pc0ZpbGUodCl8fGMuaXNCbG9iKHQpfHxjLmlzUmVhZGFibGVTdHJlYW0odCkpcmV0dXJuIHQ7aWYoYy5pc0FycmF5QnVmZmVyVmlldyh0KSlyZXR1cm4gdC5idWZmZXI7aWYoYy5pc1VSTFNlYXJjaFBhcmFtcyh0KSlyZXR1cm4gQS5zZXRDb250ZW50VHlwZSgiYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkO2NoYXJzZXQ9dXRmLTgiLCExKSx0LnRvU3RyaW5nKCk7bGV0IG07aWYoaSl7aWYoci5pbmRleE9mKCJhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQiKT4tMSlyZXR1cm4gbXQodCx0aGlzLmZvcm1TZXJpYWxpemVyKS50b1N0cmluZygpO2lmKChtPWMuaXNGaWxlTGlzdCh0KSl8fHIuaW5kZXhPZigibXVsdGlwYXJ0L2Zvcm0tZGF0YSIpPi0xKXtsZXQgZj10aGlzLmVudiYmdGhpcy5lbnYuRm9ybURhdGE7cmV0dXJuIFkobT97ImZpbGVzW10iOnR9OnQsZiYmbmV3IGYsdGhpcy5mb3JtU2VyaWFsaXplcil9fXJldHVybiBpfHxvPyhBLnNldENvbnRlbnRUeXBlKCJhcHBsaWNhdGlvbi9qc29uIiwhMSksc28odCkpOnR9XSx0cmFuc2Zvcm1SZXNwb25zZTpbZnVuY3Rpb24odCl7bGV0IEE9dGhpcy50cmFuc2l0aW9uYWx8fHV0LnRyYW5zaXRpb25hbCxyPUEmJkEuZm9yY2VkSlNPTlBhcnNpbmcsbz10aGlzLnJlc3BvbnNlVHlwZT09PSJqc29uIjtpZihjLmlzUmVzcG9uc2UodCl8fGMuaXNSZWFkYWJsZVN0cmVhbSh0KSlyZXR1cm4gdDtpZih0JiZjLmlzU3RyaW5nKHQpJiYociYmIXRoaXMucmVzcG9uc2VUeXBlfHxvKSl7bGV0IG49IShBJiZBLnNpbGVudEpTT05QYXJzaW5nKSYmbzt0cnl7cmV0dXJuIEpTT04ucGFyc2UodCl9Y2F0Y2gobSl7aWYobil0aHJvdyBtLm5hbWU9PT0iU3ludGF4RXJyb3IiP2guZnJvbShtLGguRVJSX0JBRF9SRVNQT05TRSx0aGlzLG51bGwsdGhpcy5yZXNwb25zZSk6bX19cmV0dXJuIHR9XSx0aW1lb3V0OjAseHNyZkNvb2tpZU5hbWU6IlhTUkYtVE9LRU4iLHhzcmZIZWFkZXJOYW1lOiJYLVhTUkYtVE9LRU4iLG1heENvbnRlbnRMZW5ndGg6LTEsbWF4Qm9keUxlbmd0aDotMSxlbnY6e0Zvcm1EYXRhOkYuY2xhc3Nlcy5Gb3JtRGF0YSxCbG9iOkYuY2xhc3Nlcy5CbG9ifSx2YWxpZGF0ZVN0YXR1czpmdW5jdGlvbih0KXtyZXR1cm4gdD49MjAwJiZ0PDMwMH0saGVhZGVyczp7Y29tbW9uOntBY2NlcHQ6ImFwcGxpY2F0aW9uL2pzb24sIHRleHQvcGxhaW4sICovKiIsIkNvbnRlbnQtVHlwZSI6dm9pZCAwfX19O2MuZm9yRWFjaChbImRlbGV0ZSIsImdldCIsImhlYWQiLCJwb3N0IiwicHV0IiwicGF0Y2giXSxlPT57dXQuaGVhZGVyc1tlXT17fX0pO3ZhciB0ZT11dDt2YXIgZ289Yy50b09iamVjdFNldChbImFnZSIsImF1dGhvcml6YXRpb24iLCJjb250ZW50LWxlbmd0aCIsImNvbnRlbnQtdHlwZSIsImV0YWciLCJleHBpcmVzIiwiZnJvbSIsImhvc3QiLCJpZi1tb2RpZmllZC1zaW5jZSIsImlmLXVubW9kaWZpZWQtc2luY2UiLCJsYXN0LW1vZGlmaWVkIiwibG9jYXRpb24iLCJtYXgtZm9yd2FyZHMiLCJwcm94eS1hdXRob3JpemF0aW9uIiwicmVmZXJlciIsInJldHJ5LWFmdGVyIiwidXNlci1hZ2VudCJdKSxpcj1lPT57bGV0IHQ9e30sQSxyLG87cmV0dXJuIGUmJmUuc3BsaXQoYApgKS5mb3JFYWNoKGZ1bmN0aW9uKG4pe289bi5pbmRleE9mKCI6IiksQT1uLnN1YnN0cmluZygwLG8pLnRyaW0oKS50b0xvd2VyQ2FzZSgpLHI9bi5zdWJzdHJpbmcobysxKS50cmltKCksISghQXx8dFtBXSYmZ29bQV0pJiYoQT09PSJzZXQtY29va2llIj90W0FdP3RbQV0ucHVzaChyKTp0W0FdPVtyXTp0W0FdPXRbQV0/dFtBXSsiLCAiK3I6cil9KSx0fTt2YXIgb3I9U3ltYm9sKCJpbnRlcm5hbHMiKTtmdW5jdGlvbiBtZShlKXtyZXR1cm4gZSYmU3RyaW5nKGUpLnRyaW0oKS50b0xvd2VyQ2FzZSgpfWZ1bmN0aW9uIHhlKGUpe3JldHVybiBlPT09ITF8fGU9PW51bGw/ZTpjLmlzQXJyYXkoZSk/ZS5tYXAoeGUpOlN0cmluZyhlKX1mdW5jdGlvbiBsbyhlKXtsZXQgdD1PYmplY3QuY3JlYXRlKG51bGwpLEE9LyhbXlxzLDs9XSspXHMqKD86PVxzKihbXiw7XSspKT8vZyxyO2Zvcig7cj1BLmV4ZWMoZSk7KXRbclsxXV09clsyXTtyZXR1cm4gdH12YXIgSW89ZT0+L15bLV9hLXpBLVowLTleYHx+LCEjJCUmJyorLl0rJC8udGVzdChlLnRyaW0oKSk7ZnVuY3Rpb24gZnQoZSx0LEEscixvKXtpZihjLmlzRnVuY3Rpb24ocikpcmV0dXJuIHIuY2FsbCh0aGlzLHQsQSk7aWYobyYmKHQ9QSksISFjLmlzU3RyaW5nKHQpKXtpZihjLmlzU3RyaW5nKHIpKXJldHVybiB0LmluZGV4T2YocikhPT0tMTtpZihjLmlzUmVnRXhwKHIpKXJldHVybiByLnRlc3QodCl9fWZ1bmN0aW9uIHBvKGUpe3JldHVybiBlLnRyaW0oKS50b0xvd2VyQ2FzZSgpLnJlcGxhY2UoLyhbYS16XGRdKShcdyopL2csKHQsQSxyKT0+QS50b1VwcGVyQ2FzZSgpK3IpfWZ1bmN0aW9uIG1vKGUsdCl7bGV0IEE9Yy50b0NhbWVsQ2FzZSgiICIrdCk7WyJnZXQiLCJzZXQiLCJoYXMiXS5mb3JFYWNoKHI9PntPYmplY3QuZGVmaW5lUHJvcGVydHkoZSxyK0Ese3ZhbHVlOmZ1bmN0aW9uKG8saSxuKXtyZXR1cm4gdGhpc1tyXS5jYWxsKHRoaXMsdCxvLGksbil9LGNvbmZpZ3VyYWJsZTohMH0pfSl9dmFyIEFlPWNsYXNze2NvbnN0cnVjdG9yKHQpe3QmJnRoaXMuc2V0KHQpfXNldCh0LEEscil7bGV0IG89dGhpcztmdW5jdGlvbiBpKG0sZixsKXtsZXQgYT1tZShmKTtpZighYSl0aHJvdyBuZXcgRXJyb3IoImhlYWRlciBuYW1lIG11c3QgYmUgYSBub24tZW1wdHkgc3RyaW5nIik7bGV0IGc9Yy5maW5kS2V5KG8sYSk7KCFnfHxvW2ddPT09dm9pZCAwfHxsPT09ITB8fGw9PT12b2lkIDAmJm9bZ10hPT0hMSkmJihvW2d8fGZdPXhlKG0pKX1sZXQgbj0obSxmKT0+Yy5mb3JFYWNoKG0sKGwsYSk9PmkobCxhLGYpKTtpZihjLmlzUGxhaW5PYmplY3QodCl8fHQgaW5zdGFuY2VvZiB0aGlzLmNvbnN0cnVjdG9yKW4odCxBKTtlbHNlIGlmKGMuaXNTdHJpbmcodCkmJih0PXQudHJpbSgpKSYmIUlvKHQpKW4oaXIodCksQSk7ZWxzZSBpZihjLmlzSGVhZGVycyh0KSlmb3IobGV0W20sZl1vZiB0LmVudHJpZXMoKSlpKGYsbSxyKTtlbHNlIHQhPW51bGwmJmkoQSx0LHIpO3JldHVybiB0aGlzfWdldCh0LEEpe2lmKHQ9bWUodCksdCl7bGV0IHI9Yy5maW5kS2V5KHRoaXMsdCk7aWYocil7bGV0IG89dGhpc1tyXTtpZighQSlyZXR1cm4gbztpZihBPT09ITApcmV0dXJuIGxvKG8pO2lmKGMuaXNGdW5jdGlvbihBKSlyZXR1cm4gQS5jYWxsKHRoaXMsbyxyKTtpZihjLmlzUmVnRXhwKEEpKXJldHVybiBBLmV4ZWMobyk7dGhyb3cgbmV3IFR5cGVFcnJvcigicGFyc2VyIG11c3QgYmUgYm9vbGVhbnxyZWdleHB8ZnVuY3Rpb24iKX19fWhhcyh0LEEpe2lmKHQ9bWUodCksdCl7bGV0IHI9Yy5maW5kS2V5KHRoaXMsdCk7cmV0dXJuISEociYmdGhpc1tyXSE9PXZvaWQgMCYmKCFBfHxmdCh0aGlzLHRoaXNbcl0scixBKSkpfXJldHVybiExfWRlbGV0ZSh0LEEpe2xldCByPXRoaXMsbz0hMTtmdW5jdGlvbiBpKG4pe2lmKG49bWUobiksbil7bGV0IG09Yy5maW5kS2V5KHIsbik7bSYmKCFBfHxmdChyLHJbbV0sbSxBKSkmJihkZWxldGUgclttXSxvPSEwKX19cmV0dXJuIGMuaXNBcnJheSh0KT90LmZvckVhY2goaSk6aSh0KSxvfWNsZWFyKHQpe2xldCBBPU9iamVjdC5rZXlzKHRoaXMpLHI9QS5sZW5ndGgsbz0hMTtmb3IoO3ItLTspe2xldCBpPUFbcl07KCF0fHxmdCh0aGlzLHRoaXNbaV0saSx0LCEwKSkmJihkZWxldGUgdGhpc1tpXSxvPSEwKX1yZXR1cm4gb31ub3JtYWxpemUodCl7bGV0IEE9dGhpcyxyPXt9O3JldHVybiBjLmZvckVhY2godGhpcywobyxpKT0+e2xldCBuPWMuZmluZEtleShyLGkpO2lmKG4pe0Fbbl09eGUobyksZGVsZXRlIEFbaV07cmV0dXJufWxldCBtPXQ/cG8oaSk6U3RyaW5nKGkpLnRyaW0oKTttIT09aSYmZGVsZXRlIEFbaV0sQVttXT14ZShvKSxyW21dPSEwfSksdGhpc31jb25jYXQoLi4udCl7cmV0dXJuIHRoaXMuY29uc3RydWN0b3IuY29uY2F0KHRoaXMsLi4udCl9dG9KU09OKHQpe2xldCBBPU9iamVjdC5jcmVhdGUobnVsbCk7cmV0dXJuIGMuZm9yRWFjaCh0aGlzLChyLG8pPT57ciE9bnVsbCYmciE9PSExJiYoQVtvXT10JiZjLmlzQXJyYXkocik/ci5qb2luKCIsICIpOnIpfSksQX1bU3ltYm9sLml0ZXJhdG9yXSgpe3JldHVybiBPYmplY3QuZW50cmllcyh0aGlzLnRvSlNPTigpKVtTeW1ib2wuaXRlcmF0b3JdKCl9dG9TdHJpbmcoKXtyZXR1cm4gT2JqZWN0LmVudHJpZXModGhpcy50b0pTT04oKSkubWFwKChbdCxBXSk9PnQrIjogIitBKS5qb2luKGAKYCl9Z2V0W1N5bWJvbC50b1N0cmluZ1RhZ10oKXtyZXR1cm4iQXhpb3NIZWFkZXJzIn1zdGF0aWMgZnJvbSh0KXtyZXR1cm4gdCBpbnN0YW5jZW9mIHRoaXM/dDpuZXcgdGhpcyh0KX1zdGF0aWMgY29uY2F0KHQsLi4uQSl7bGV0IHI9bmV3IHRoaXModCk7cmV0dXJuIEEuZm9yRWFjaChvPT5yLnNldChvKSkscn1zdGF0aWMgYWNjZXNzb3IodCl7bGV0IHI9KHRoaXNbb3JdPXRoaXNbb3JdPXthY2Nlc3NvcnM6e319KS5hY2Nlc3NvcnMsbz10aGlzLnByb3RvdHlwZTtmdW5jdGlvbiBpKG4pe2xldCBtPW1lKG4pO3JbbV18fChtbyhvLG4pLHJbbV09ITApfXJldHVybiBjLmlzQXJyYXkodCk/dC5mb3JFYWNoKGkpOmkodCksdGhpc319O0FlLmFjY2Vzc29yKFsiQ29udGVudC1UeXBlIiwiQ29udGVudC1MZW5ndGgiLCJBY2NlcHQiLCJBY2NlcHQtRW5jb2RpbmciLCJVc2VyLUFnZW50IiwiQXV0aG9yaXphdGlvbiJdKTtjLnJlZHVjZURlc2NyaXB0b3JzKEFlLnByb3RvdHlwZSwoe3ZhbHVlOmV9LHQpPT57bGV0IEE9dFswXS50b1VwcGVyQ2FzZSgpK3Quc2xpY2UoMSk7cmV0dXJue2dldDooKT0+ZSxzZXQocil7dGhpc1tBXT1yfX19KTtjLmZyZWV6ZU1ldGhvZHMoQWUpO3ZhciBXPUFlO2Z1bmN0aW9uIHVlKGUsdCl7bGV0IEE9dGhpc3x8dGUscj10fHxBLG89Vy5mcm9tKHIuaGVhZGVycyksaT1yLmRhdGE7cmV0dXJuIGMuZm9yRWFjaChlLGZ1bmN0aW9uKG0pe2k9bS5jYWxsKEEsaSxvLm5vcm1hbGl6ZSgpLHQ/dC5zdGF0dXM6dm9pZCAwKX0pLG8ubm9ybWFsaXplKCksaX1mdW5jdGlvbiBmZShlKXtyZXR1cm4hIShlJiZlLl9fQ0FOQ0VMX18pfWZ1bmN0aW9uIGFyKGUsdCxBKXtoLmNhbGwodGhpcyxlPz8iY2FuY2VsZWQiLGguRVJSX0NBTkNFTEVELHQsQSksdGhpcy5uYW1lPSJDYW5jZWxlZEVycm9yIn1jLmluaGVyaXRzKGFyLGgse19fQ0FOQ0VMX186ITB9KTt2YXIgTT1hcjtmdW5jdGlvbiBjZShlLHQsQSl7bGV0IHI9QS5jb25maWcudmFsaWRhdGVTdGF0dXM7IUEuc3RhdHVzfHwhcnx8cihBLnN0YXR1cyk/ZShBKTp0KG5ldyBoKCJSZXF1ZXN0IGZhaWxlZCB3aXRoIHN0YXR1cyBjb2RlICIrQS5zdGF0dXMsW2guRVJSX0JBRF9SRVFVRVNULGguRVJSX0JBRF9SRVNQT05TRV1bTWF0aC5mbG9vcihBLnN0YXR1cy8xMDApLTRdLEEuY29uZmlnLEEucmVxdWVzdCxBKSl9ZnVuY3Rpb24gY3QoZSl7bGV0IHQ9L14oWy0rXHddezEsMjV9KSg6P1wvXC98OikvLmV4ZWMoZSk7cmV0dXJuIHQmJnRbMV18fCIifWZ1bmN0aW9uIHVvKGUsdCl7ZT1lfHwxMDtsZXQgQT1uZXcgQXJyYXkoZSkscj1uZXcgQXJyYXkoZSksbz0wLGk9MCxuO3JldHVybiB0PXQhPT12b2lkIDA/dDoxZTMsZnVuY3Rpb24oZil7bGV0IGw9RGF0ZS5ub3coKSxhPXJbaV07bnx8KG49bCksQVtvXT1mLHJbb109bDtsZXQgZz1pLHU9MDtmb3IoO2chPT1vOyl1Kz1BW2crK10sZz1nJWU7aWYobz0obysxKSVlLG89PT1pJiYoaT0oaSsxKSVlKSxsLW48dClyZXR1cm47bGV0IHM9YSYmbC1hO3JldHVybiBzP01hdGgucm91bmQodSoxZTMvcyk6dm9pZCAwfX12YXIgbnI9dW87ZnVuY3Rpb24gZm8oZSx0KXtsZXQgQT0wLHI9MWUzL3QsbyxpLG49KGwsYT1EYXRlLm5vdygpKT0+e0E9YSxvPW51bGwsaSYmKGNsZWFyVGltZW91dChpKSxpPW51bGwpLGUuYXBwbHkobnVsbCxsKX07cmV0dXJuWyguLi5sKT0+e2xldCBhPURhdGUubm93KCksZz1hLUE7Zz49cj9uKGwsYSk6KG89bCxpfHwoaT1zZXRUaW1lb3V0KCgpPT57aT1udWxsLG4obyl9LHItZykpKX0sKCk9Pm8mJm4obyldfXZhciBzcj1mbzt2YXIgcmU9KGUsdCxBPTMpPT57bGV0IHI9MCxvPW5yKDUwLDI1MCk7cmV0dXJuIHNyKGk9PntsZXQgbj1pLmxvYWRlZCxtPWkubGVuZ3RoQ29tcHV0YWJsZT9pLnRvdGFsOnZvaWQgMCxmPW4tcixsPW8oZiksYT1uPD1tO3I9bjtsZXQgZz17bG9hZGVkOm4sdG90YWw6bSxwcm9ncmVzczptP24vbTp2b2lkIDAsYnl0ZXM6ZixyYXRlOmx8fHZvaWQgMCxlc3RpbWF0ZWQ6bCYmbSYmYT8obS1uKS9sOnZvaWQgMCxldmVudDppLGxlbmd0aENvbXB1dGFibGU6bSE9bnVsbCxbdD8iZG93bmxvYWQiOiJ1cGxvYWQiXTohMH07ZShnKX0sQSl9LGR0PShlLHQpPT57bGV0IEE9ZSE9bnVsbDtyZXR1cm5bcj0+dFswXSh7bGVuZ3RoQ29tcHV0YWJsZTpBLHRvdGFsOmUsbG9hZGVkOnJ9KSx0WzFdXX0sQnQ9ZT0+KC4uLnQpPT5jLmFzYXAoKCk9PmUoLi4udCkpO3ZhciBncj1GLmhhc1N0YW5kYXJkQnJvd3NlckVudj9mdW5jdGlvbigpe2xldCB0PS8obXNpZXx0cmlkZW50KS9pLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCksQT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJhIikscjtmdW5jdGlvbiBvKGkpe2xldCBuPWk7cmV0dXJuIHQmJihBLnNldEF0dHJpYnV0ZSgiaHJlZiIsbiksbj1BLmhyZWYpLEEuc2V0QXR0cmlidXRlKCJocmVmIixuKSx7aHJlZjpBLmhyZWYscHJvdG9jb2w6QS5wcm90b2NvbD9BLnByb3RvY29sLnJlcGxhY2UoLzokLywiIik6IiIsaG9zdDpBLmhvc3Qsc2VhcmNoOkEuc2VhcmNoP0Euc2VhcmNoLnJlcGxhY2UoL15cPy8sIiIpOiIiLGhhc2g6QS5oYXNoP0EuaGFzaC5yZXBsYWNlKC9eIy8sIiIpOiIiLGhvc3RuYW1lOkEuaG9zdG5hbWUscG9ydDpBLnBvcnQscGF0aG5hbWU6QS5wYXRobmFtZS5jaGFyQXQoMCk9PT0iLyI/QS5wYXRobmFtZToiLyIrQS5wYXRobmFtZX19cmV0dXJuIHI9byh3aW5kb3cubG9jYXRpb24uaHJlZiksZnVuY3Rpb24obil7bGV0IG09Yy5pc1N0cmluZyhuKT9vKG4pOm47cmV0dXJuIG0ucHJvdG9jb2w9PT1yLnByb3RvY29sJiZtLmhvc3Q9PT1yLmhvc3R9fSgpOmZ1bmN0aW9uKCl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuITB9fSgpO3ZhciBscj1GLmhhc1N0YW5kYXJkQnJvd3NlckVudj97d3JpdGUoZSx0LEEscixvLGkpe2xldCBuPVtlKyI9IitlbmNvZGVVUklDb21wb25lbnQodCldO2MuaXNOdW1iZXIoQSkmJm4ucHVzaCgiZXhwaXJlcz0iK25ldyBEYXRlKEEpLnRvR01UU3RyaW5nKCkpLGMuaXNTdHJpbmcocikmJm4ucHVzaCgicGF0aD0iK3IpLGMuaXNTdHJpbmcobykmJm4ucHVzaCgiZG9tYWluPSIrbyksaT09PSEwJiZuLnB1c2goInNlY3VyZSIpLGRvY3VtZW50LmNvb2tpZT1uLmpvaW4oIjsgIil9LHJlYWQoZSl7bGV0IHQ9ZG9jdW1lbnQuY29va2llLm1hdGNoKG5ldyBSZWdFeHAoIihefDtcXHMqKSgiK2UrIik9KFteO10qKSIpKTtyZXR1cm4gdD9kZWNvZGVVUklDb21wb25lbnQodFszXSk6bnVsbH0scmVtb3ZlKGUpe3RoaXMud3JpdGUoZSwiIixEYXRlLm5vdygpLTg2NGU1KX19Ont3cml0ZSgpe30scmVhZCgpe3JldHVybiBudWxsfSxyZW1vdmUoKXt9fTtmdW5jdGlvbiBDdChlKXtyZXR1cm4vXihbYS16XVthLXpcZCtcLS5dKjopP1wvXC8vaS50ZXN0KGUpfWZ1bmN0aW9uIEV0KGUsdCl7cmV0dXJuIHQ/ZS5yZXBsYWNlKC9cLz9cLyQvLCIiKSsiLyIrdC5yZXBsYWNlKC9eXC8rLywiIik6ZX1mdW5jdGlvbiBkZShlLHQpe3JldHVybiBlJiYhQ3QodCk/RXQoZSx0KTp0fXZhciBJcj1lPT5lIGluc3RhbmNlb2YgVz97Li4uZX06ZTtmdW5jdGlvbiBHKGUsdCl7dD10fHx7fTtsZXQgQT17fTtmdW5jdGlvbiByKGwsYSxnKXtyZXR1cm4gYy5pc1BsYWluT2JqZWN0KGwpJiZjLmlzUGxhaW5PYmplY3QoYSk/Yy5tZXJnZS5jYWxsKHtjYXNlbGVzczpnfSxsLGEpOmMuaXNQbGFpbk9iamVjdChhKT9jLm1lcmdlKHt9LGEpOmMuaXNBcnJheShhKT9hLnNsaWNlKCk6YX1mdW5jdGlvbiBvKGwsYSxnKXtpZihjLmlzVW5kZWZpbmVkKGEpKXtpZighYy5pc1VuZGVmaW5lZChsKSlyZXR1cm4gcih2b2lkIDAsbCxnKX1lbHNlIHJldHVybiByKGwsYSxnKX1mdW5jdGlvbiBpKGwsYSl7aWYoIWMuaXNVbmRlZmluZWQoYSkpcmV0dXJuIHIodm9pZCAwLGEpfWZ1bmN0aW9uIG4obCxhKXtpZihjLmlzVW5kZWZpbmVkKGEpKXtpZighYy5pc1VuZGVmaW5lZChsKSlyZXR1cm4gcih2b2lkIDAsbCl9ZWxzZSByZXR1cm4gcih2b2lkIDAsYSl9ZnVuY3Rpb24gbShsLGEsZyl7aWYoZyBpbiB0KXJldHVybiByKGwsYSk7aWYoZyBpbiBlKXJldHVybiByKHZvaWQgMCxsKX1sZXQgZj17dXJsOmksbWV0aG9kOmksZGF0YTppLGJhc2VVUkw6bix0cmFuc2Zvcm1SZXF1ZXN0Om4sdHJhbnNmb3JtUmVzcG9uc2U6bixwYXJhbXNTZXJpYWxpemVyOm4sdGltZW91dDpuLHRpbWVvdXRNZXNzYWdlOm4sd2l0aENyZWRlbnRpYWxzOm4sd2l0aFhTUkZUb2tlbjpuLGFkYXB0ZXI6bixyZXNwb25zZVR5cGU6bix4c3JmQ29va2llTmFtZTpuLHhzcmZIZWFkZXJOYW1lOm4sb25VcGxvYWRQcm9ncmVzczpuLG9uRG93bmxvYWRQcm9ncmVzczpuLGRlY29tcHJlc3M6bixtYXhDb250ZW50TGVuZ3RoOm4sbWF4Qm9keUxlbmd0aDpuLGJlZm9yZVJlZGlyZWN0Om4sdHJhbnNwb3J0Om4saHR0cEFnZW50Om4saHR0cHNBZ2VudDpuLGNhbmNlbFRva2VuOm4sc29ja2V0UGF0aDpuLHJlc3BvbnNlRW5jb2Rpbmc6bix2YWxpZGF0ZVN0YXR1czptLGhlYWRlcnM6KGwsYSk9Pm8oSXIobCksSXIoYSksITApfTtyZXR1cm4gYy5mb3JFYWNoKE9iamVjdC5rZXlzKE9iamVjdC5hc3NpZ24oe30sZSx0KSksZnVuY3Rpb24oYSl7bGV0IGc9ZlthXXx8byx1PWcoZVthXSx0W2FdLGEpO2MuaXNVbmRlZmluZWQodSkmJmchPT1tfHwoQVthXT11KX0pLEF9dmFyIFRlPWU9PntsZXQgdD1HKHt9LGUpLHtkYXRhOkEsd2l0aFhTUkZUb2tlbjpyLHhzcmZIZWFkZXJOYW1lOm8seHNyZkNvb2tpZU5hbWU6aSxoZWFkZXJzOm4sYXV0aDptfT10O3QuaGVhZGVycz1uPVcuZnJvbShuKSx0LnVybD1wZShkZSh0LmJhc2VVUkwsdC51cmwpLGUucGFyYW1zLGUucGFyYW1zU2VyaWFsaXplciksbSYmbi5zZXQoIkF1dGhvcml6YXRpb24iLCJCYXNpYyAiK2J0b2EoKG0udXNlcm5hbWV8fCIiKSsiOiIrKG0ucGFzc3dvcmQ/dW5lc2NhcGUoZW5jb2RlVVJJQ29tcG9uZW50KG0ucGFzc3dvcmQpKToiIikpKTtsZXQgZjtpZihjLmlzRm9ybURhdGEoQSkpe2lmKEYuaGFzU3RhbmRhcmRCcm93c2VyRW52fHxGLmhhc1N0YW5kYXJkQnJvd3NlcldlYldvcmtlckVudiluLnNldENvbnRlbnRUeXBlKHZvaWQgMCk7ZWxzZSBpZigoZj1uLmdldENvbnRlbnRUeXBlKCkpIT09ITEpe2xldFtsLC4uLmFdPWY/Zi5zcGxpdCgiOyIpLm1hcChnPT5nLnRyaW0oKSkuZmlsdGVyKEJvb2xlYW4pOltdO24uc2V0Q29udGVudFR5cGUoW2x8fCJtdWx0aXBhcnQvZm9ybS1kYXRhIiwuLi5hXS5qb2luKCI7ICIpKX19aWYoRi5oYXNTdGFuZGFyZEJyb3dzZXJFbnYmJihyJiZjLmlzRnVuY3Rpb24ocikmJihyPXIodCkpLHJ8fHIhPT0hMSYmZ3IodC51cmwpKSl7bGV0IGw9byYmaSYmbHIucmVhZChpKTtsJiZuLnNldChvLGwpfXJldHVybiB0fTt2YXIgY289dHlwZW9mIFhNTEh0dHBSZXF1ZXN0PCJ1Iixwcj1jbyYmZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKEEscil7bGV0IG89VGUoZSksaT1vLmRhdGEsbj1XLmZyb20oby5oZWFkZXJzKS5ub3JtYWxpemUoKSx7cmVzcG9uc2VUeXBlOm0sb25VcGxvYWRQcm9ncmVzczpmLG9uRG93bmxvYWRQcm9ncmVzczpsfT1vLGEsZyx1LHMsSTtmdW5jdGlvbiBCKCl7cyYmcygpLEkmJkkoKSxvLmNhbmNlbFRva2VuJiZvLmNhbmNlbFRva2VuLnVuc3Vic2NyaWJlKGEpLG8uc2lnbmFsJiZvLnNpZ25hbC5yZW1vdmVFdmVudExpc3RlbmVyKCJhYm9ydCIsYSl9bGV0IGQ9bmV3IFhNTEh0dHBSZXF1ZXN0O2Qub3BlbihvLm1ldGhvZC50b1VwcGVyQ2FzZSgpLG8udXJsLCEwKSxkLnRpbWVvdXQ9by50aW1lb3V0O2Z1bmN0aW9uIGsoKXtpZighZClyZXR1cm47bGV0IFI9Vy5mcm9tKCJnZXRBbGxSZXNwb25zZUhlYWRlcnMiaW4gZCYmZC5nZXRBbGxSZXNwb25zZUhlYWRlcnMoKSksaj17ZGF0YTohbXx8bT09PSJ0ZXh0Inx8bT09PSJqc29uIj9kLnJlc3BvbnNlVGV4dDpkLnJlc3BvbnNlLHN0YXR1czpkLnN0YXR1cyxzdGF0dXNUZXh0OmQuc3RhdHVzVGV4dCxoZWFkZXJzOlIsY29uZmlnOmUscmVxdWVzdDpkfTtjZShmdW5jdGlvbihKKXtBKEopLEIoKX0sZnVuY3Rpb24oSil7cihKKSxCKCl9LGopLGQ9bnVsbH0ib25sb2FkZW5kImluIGQ/ZC5vbmxvYWRlbmQ9azpkLm9ucmVhZHlzdGF0ZWNoYW5nZT1mdW5jdGlvbigpeyFkfHxkLnJlYWR5U3RhdGUhPT00fHxkLnN0YXR1cz09PTAmJiEoZC5yZXNwb25zZVVSTCYmZC5yZXNwb25zZVVSTC5pbmRleE9mKCJmaWxlOiIpPT09MCl8fHNldFRpbWVvdXQoayl9LGQub25hYm9ydD1mdW5jdGlvbigpe2QmJihyKG5ldyBoKCJSZXF1ZXN0IGFib3J0ZWQiLGguRUNPTk5BQk9SVEVELGUsZCkpLGQ9bnVsbCl9LGQub25lcnJvcj1mdW5jdGlvbigpe3IobmV3IGgoIk5ldHdvcmsgRXJyb3IiLGguRVJSX05FVFdPUkssZSxkKSksZD1udWxsfSxkLm9udGltZW91dD1mdW5jdGlvbigpe2xldCB4PW8udGltZW91dD8idGltZW91dCBvZiAiK28udGltZW91dCsibXMgZXhjZWVkZWQiOiJ0aW1lb3V0IGV4Y2VlZGVkIixqPW8udHJhbnNpdGlvbmFsfHxPZTtvLnRpbWVvdXRFcnJvck1lc3NhZ2UmJih4PW8udGltZW91dEVycm9yTWVzc2FnZSkscihuZXcgaCh4LGouY2xhcmlmeVRpbWVvdXRFcnJvcj9oLkVUSU1FRE9VVDpoLkVDT05OQUJPUlRFRCxlLGQpKSxkPW51bGx9LGk9PT12b2lkIDAmJm4uc2V0Q29udGVudFR5cGUobnVsbCksInNldFJlcXVlc3RIZWFkZXIiaW4gZCYmYy5mb3JFYWNoKG4udG9KU09OKCksZnVuY3Rpb24oeCxqKXtkLnNldFJlcXVlc3RIZWFkZXIoaix4KX0pLGMuaXNVbmRlZmluZWQoby53aXRoQ3JlZGVudGlhbHMpfHwoZC53aXRoQ3JlZGVudGlhbHM9ISFvLndpdGhDcmVkZW50aWFscyksbSYmbSE9PSJqc29uIiYmKGQucmVzcG9uc2VUeXBlPW8ucmVzcG9uc2VUeXBlKSxsJiYoW3UsSV09cmUobCwhMCksZC5hZGRFdmVudExpc3RlbmVyKCJwcm9ncmVzcyIsdSkpLGYmJmQudXBsb2FkJiYoW2csc109cmUoZiksZC51cGxvYWQuYWRkRXZlbnRMaXN0ZW5lcigicHJvZ3Jlc3MiLGcpLGQudXBsb2FkLmFkZEV2ZW50TGlzdGVuZXIoImxvYWRlbmQiLHMpKSwoby5jYW5jZWxUb2tlbnx8by5zaWduYWwpJiYoYT1SPT57ZCYmKHIoIVJ8fFIudHlwZT9uZXcgTShudWxsLGUsZCk6UiksZC5hYm9ydCgpLGQ9bnVsbCl9LG8uY2FuY2VsVG9rZW4mJm8uY2FuY2VsVG9rZW4uc3Vic2NyaWJlKGEpLG8uc2lnbmFsJiYoby5zaWduYWwuYWJvcnRlZD9hKCk6by5zaWduYWwuYWRkRXZlbnRMaXN0ZW5lcigiYWJvcnQiLGEpKSk7bGV0IFU9Y3Qoby51cmwpO2lmKFUmJkYucHJvdG9jb2xzLmluZGV4T2YoVSk9PT0tMSl7cihuZXcgaCgiVW5zdXBwb3J0ZWQgcHJvdG9jb2wgIitVKyI6IixoLkVSUl9CQURfUkVRVUVTVCxlKSk7cmV0dXJufWQuc2VuZChpfHxudWxsKX0pfTt2YXIgQm89KGUsdCk9PntsZXQgQT1uZXcgQWJvcnRDb250cm9sbGVyLHIsbz1mdW5jdGlvbihmKXtpZighcil7cj0hMCxuKCk7bGV0IGw9ZiBpbnN0YW5jZW9mIEVycm9yP2Y6dGhpcy5yZWFzb247QS5hYm9ydChsIGluc3RhbmNlb2YgaD9sOm5ldyBNKGwgaW5zdGFuY2VvZiBFcnJvcj9sLm1lc3NhZ2U6bCkpfX0saT10JiZzZXRUaW1lb3V0KCgpPT57byhuZXcgaChgdGltZW91dCAke3R9IG9mIG1zIGV4Y2VlZGVkYCxoLkVUSU1FRE9VVCkpfSx0KSxuPSgpPT57ZSYmKGkmJmNsZWFyVGltZW91dChpKSxpPW51bGwsZS5mb3JFYWNoKGY9PntmJiYoZi5yZW1vdmVFdmVudExpc3RlbmVyP2YucmVtb3ZlRXZlbnRMaXN0ZW5lcigiYWJvcnQiLG8pOmYudW5zdWJzY3JpYmUobykpfSksZT1udWxsKX07ZS5mb3JFYWNoKGY9PmYmJmYuYWRkRXZlbnRMaXN0ZW5lciYmZi5hZGRFdmVudExpc3RlbmVyKCJhYm9ydCIsbykpO2xldHtzaWduYWw6bX09QTtyZXR1cm4gbS51bnN1YnNjcmliZT1uLFttLCgpPT57aSYmY2xlYXJUaW1lb3V0KGkpLGk9bnVsbH1dfSxtcj1Cbzt2YXIgQ289ZnVuY3Rpb24qKGUsdCl7bGV0IEE9ZS5ieXRlTGVuZ3RoO2lmKCF0fHxBPHQpe3lpZWxkIGU7cmV0dXJufWxldCByPTAsbztmb3IoO3I8QTspbz1yK3QseWllbGQgZS5zbGljZShyLG8pLHI9b30sRW89YXN5bmMgZnVuY3Rpb24qKGUsdCxBKXtmb3IgYXdhaXQobGV0IHIgb2YgZSl5aWVsZCpDbyhBcnJheUJ1ZmZlci5pc1ZpZXcocik/cjphd2FpdCBBKFN0cmluZyhyKSksdCl9LHl0PShlLHQsQSxyLG8pPT57bGV0IGk9RW8oZSx0LG8pLG49MCxtLGY9bD0+e218fChtPSEwLHImJnIobCkpfTtyZXR1cm4gbmV3IFJlYWRhYmxlU3RyZWFtKHthc3luYyBwdWxsKGwpe3RyeXtsZXR7ZG9uZTphLHZhbHVlOmd9PWF3YWl0IGkubmV4dCgpO2lmKGEpe2YoKSxsLmNsb3NlKCk7cmV0dXJufWxldCB1PWcuYnl0ZUxlbmd0aDtpZihBKXtsZXQgcz1uKz11O0Eocyl9bC5lbnF1ZXVlKG5ldyBVaW50OEFycmF5KGcpKX1jYXRjaChhKXt0aHJvdyBmKGEpLGF9fSxjYW5jZWwobCl7cmV0dXJuIGYobCksaS5yZXR1cm4oKX19LHtoaWdoV2F0ZXJNYXJrOjJ9KX07dmFyIExlPXR5cGVvZiBmZXRjaD09ImZ1bmN0aW9uIiYmdHlwZW9mIFJlcXVlc3Q9PSJmdW5jdGlvbiImJnR5cGVvZiBSZXNwb25zZT09ImZ1bmN0aW9uIixmcj1MZSYmdHlwZW9mIFJlYWRhYmxlU3RyZWFtPT0iZnVuY3Rpb24iLFF0PUxlJiYodHlwZW9mIFRleHRFbmNvZGVyPT0iZnVuY3Rpb24iPyhlPT50PT5lLmVuY29kZSh0KSkobmV3IFRleHRFbmNvZGVyKTphc3luYyBlPT5uZXcgVWludDhBcnJheShhd2FpdCBuZXcgUmVzcG9uc2UoZSkuYXJyYXlCdWZmZXIoKSkpLGNyPShlLC4uLnQpPT57dHJ5e3JldHVybiEhZSguLi50KX1jYXRjaHtyZXR1cm4hMX19LHlvPWZyJiZjcigoKT0+e2xldCBlPSExLHQ9bmV3IFJlcXVlc3QoRi5vcmlnaW4se2JvZHk6bmV3IFJlYWRhYmxlU3RyZWFtLG1ldGhvZDoiUE9TVCIsZ2V0IGR1cGxleCgpe3JldHVybiBlPSEwLCJoYWxmIn19KS5oZWFkZXJzLmhhcygiQ29udGVudC1UeXBlIik7cmV0dXJuIGUmJiF0fSksdXI9NjQqMTAyNCxodD1mciYmY3IoKCk9PmMuaXNSZWFkYWJsZVN0cmVhbShuZXcgUmVzcG9uc2UoIiIpLmJvZHkpKSxHZT17c3RyZWFtOmh0JiYoZT0+ZS5ib2R5KX07TGUmJihlPT57WyJ0ZXh0IiwiYXJyYXlCdWZmZXIiLCJibG9iIiwiZm9ybURhdGEiLCJzdHJlYW0iXS5mb3JFYWNoKHQ9PnshR2VbdF0mJihHZVt0XT1jLmlzRnVuY3Rpb24oZVt0XSk/QT0+QVt0XSgpOihBLHIpPT57dGhyb3cgbmV3IGgoYFJlc3BvbnNlIHR5cGUgJyR7dH0nIGlzIG5vdCBzdXBwb3J0ZWRgLGguRVJSX05PVF9TVVBQT1JULHIpfSl9KX0pKG5ldyBSZXNwb25zZSk7dmFyIFFvPWFzeW5jIGU9PntpZihlPT1udWxsKXJldHVybiAwO2lmKGMuaXNCbG9iKGUpKXJldHVybiBlLnNpemU7aWYoYy5pc1NwZWNDb21wbGlhbnRGb3JtKGUpKXJldHVybihhd2FpdCBuZXcgUmVxdWVzdChlKS5hcnJheUJ1ZmZlcigpKS5ieXRlTGVuZ3RoO2lmKGMuaXNBcnJheUJ1ZmZlclZpZXcoZSl8fGMuaXNBcnJheUJ1ZmZlcihlKSlyZXR1cm4gZS5ieXRlTGVuZ3RoO2lmKGMuaXNVUkxTZWFyY2hQYXJhbXMoZSkmJihlPWUrIiIpLGMuaXNTdHJpbmcoZSkpcmV0dXJuKGF3YWl0IFF0KGUpKS5ieXRlTGVuZ3RofSxobz1hc3luYyhlLHQpPT57bGV0IEE9Yy50b0Zpbml0ZU51bWJlcihlLmdldENvbnRlbnRMZW5ndGgoKSk7cmV0dXJuIEE/P1FvKHQpfSxkcj1MZSYmKGFzeW5jIGU9PntsZXR7dXJsOnQsbWV0aG9kOkEsZGF0YTpyLHNpZ25hbDpvLGNhbmNlbFRva2VuOmksdGltZW91dDpuLG9uRG93bmxvYWRQcm9ncmVzczptLG9uVXBsb2FkUHJvZ3Jlc3M6ZixyZXNwb25zZVR5cGU6bCxoZWFkZXJzOmEsd2l0aENyZWRlbnRpYWxzOmc9InNhbWUtb3JpZ2luIixmZXRjaE9wdGlvbnM6dX09VGUoZSk7bD1sPyhsKyIiKS50b0xvd2VyQ2FzZSgpOiJ0ZXh0IjtsZXRbcyxJXT1vfHxpfHxuP21yKFtvLGldLG4pOltdLEIsZCxrPSgpPT57IUImJnNldFRpbWVvdXQoKCk9PntzJiZzLnVuc3Vic2NyaWJlKCl9KSxCPSEwfSxVO3RyeXtpZihmJiZ5byYmQSE9PSJnZXQiJiZBIT09ImhlYWQiJiYoVT1hd2FpdCBobyhhLHIpKSE9PTApe2xldCBMPW5ldyBSZXF1ZXN0KHQse21ldGhvZDoiUE9TVCIsYm9keTpyLGR1cGxleDoiaGFsZiJ9KSxKO2lmKGMuaXNGb3JtRGF0YShyKSYmKEo9TC5oZWFkZXJzLmdldCgiY29udGVudC10eXBlIikpJiZhLnNldENvbnRlbnRUeXBlKEopLEwuYm9keSl7bGV0W2plLHllXT1kdChVLHJlKEJ0KGYpKSk7cj15dChMLmJvZHksdXIsamUseWUsUXQpfX1jLmlzU3RyaW5nKGcpfHwoZz1nPyJpbmNsdWRlIjoib21pdCIpLGQ9bmV3IFJlcXVlc3QodCx7Li4udSxzaWduYWw6cyxtZXRob2Q6QS50b1VwcGVyQ2FzZSgpLGhlYWRlcnM6YS5ub3JtYWxpemUoKS50b0pTT04oKSxib2R5OnIsZHVwbGV4OiJoYWxmIixjcmVkZW50aWFsczpnfSk7bGV0IFI9YXdhaXQgZmV0Y2goZCkseD1odCYmKGw9PT0ic3RyZWFtInx8bD09PSJyZXNwb25zZSIpO2lmKGh0JiYobXx8eCkpe2xldCBMPXt9O1sic3RhdHVzIiwic3RhdHVzVGV4dCIsImhlYWRlcnMiXS5mb3JFYWNoKGtBPT57TFtrQV09UltrQV19KTtsZXQgSj1jLnRvRmluaXRlTnVtYmVyKFIuaGVhZGVycy5nZXQoImNvbnRlbnQtbGVuZ3RoIikpLFtqZSx5ZV09bSYmZHQoSixyZShCdChtKSwhMCkpfHxbXTtSPW5ldyBSZXNwb25zZSh5dChSLmJvZHksdXIsamUsKCk9Pnt5ZSYmeWUoKSx4JiZrKCl9LFF0KSxMKX1sPWx8fCJ0ZXh0IjtsZXQgaj1hd2FpdCBHZVtjLmZpbmRLZXkoR2UsbCl8fCJ0ZXh0Il0oUixlKTtyZXR1cm4heCYmaygpLEkmJkkoKSxhd2FpdCBuZXcgUHJvbWlzZSgoTCxKKT0+e2NlKEwsSix7ZGF0YTpqLGhlYWRlcnM6Vy5mcm9tKFIuaGVhZGVycyksc3RhdHVzOlIuc3RhdHVzLHN0YXR1c1RleHQ6Ui5zdGF0dXNUZXh0LGNvbmZpZzplLHJlcXVlc3Q6ZH0pfSl9Y2F0Y2goUil7dGhyb3cgaygpLFImJlIubmFtZT09PSJUeXBlRXJyb3IiJiYvZmV0Y2gvaS50ZXN0KFIubWVzc2FnZSk/T2JqZWN0LmFzc2lnbihuZXcgaCgiTmV0d29yayBFcnJvciIsaC5FUlJfTkVUV09SSyxlLGQpLHtjYXVzZTpSLmNhdXNlfHxSfSk6aC5mcm9tKFIsUiYmUi5jb2RlLGUsZCl9fSk7dmFyIHd0PXtodHRwOlNlLHhocjpwcixmZXRjaDpkcn07Yy5mb3JFYWNoKHd0LChlLHQpPT57aWYoZSl7dHJ5e09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJuYW1lIix7dmFsdWU6dH0pfWNhdGNoe31PYmplY3QuZGVmaW5lUHJvcGVydHkoZSwiYWRhcHRlck5hbWUiLHt2YWx1ZTp0fSl9fSk7dmFyIEJyPWU9PmAtICR7ZX1gLHdvPWU9PmMuaXNGdW5jdGlvbihlKXx8ZT09PW51bGx8fGU9PT0hMSxKZT17Z2V0QWRhcHRlcjplPT57ZT1jLmlzQXJyYXkoZSk/ZTpbZV07bGV0e2xlbmd0aDp0fT1lLEEscixvPXt9O2ZvcihsZXQgaT0wO2k8dDtpKyspe0E9ZVtpXTtsZXQgbjtpZihyPUEsIXdvKEEpJiYocj13dFsobj1TdHJpbmcoQSkpLnRvTG93ZXJDYXNlKCldLHI9PT12b2lkIDApKXRocm93IG5ldyBoKGBVbmtub3duIGFkYXB0ZXIgJyR7bn0nYCk7aWYocilicmVhaztvW258fCIjIitpXT1yfWlmKCFyKXtsZXQgaT1PYmplY3QuZW50cmllcyhvKS5tYXAoKFttLGZdKT0+YGFkYXB0ZXIgJHttfSBgKyhmPT09ITE/ImlzIG5vdCBzdXBwb3J0ZWQgYnkgdGhlIGVudmlyb25tZW50IjoiaXMgbm90IGF2YWlsYWJsZSBpbiB0aGUgYnVpbGQiKSksbj10P2kubGVuZ3RoPjE/YHNpbmNlIDoKYCtpLm1hcChCcikuam9pbihgCmApOiIgIitCcihpWzBdKToiYXMgbm8gYWRhcHRlciBzcGVjaWZpZWQiO3Rocm93IG5ldyBoKCJUaGVyZSBpcyBubyBzdWl0YWJsZSBhZGFwdGVyIHRvIGRpc3BhdGNoIHRoZSByZXF1ZXN0ICIrbiwiRVJSX05PVF9TVVBQT1JUIil9cmV0dXJuIHJ9LGFkYXB0ZXJzOnd0fTtmdW5jdGlvbiBSdChlKXtpZihlLmNhbmNlbFRva2VuJiZlLmNhbmNlbFRva2VuLnRocm93SWZSZXF1ZXN0ZWQoKSxlLnNpZ25hbCYmZS5zaWduYWwuYWJvcnRlZCl0aHJvdyBuZXcgTShudWxsLGUpfWZ1bmN0aW9uIE1lKGUpe3JldHVybiBSdChlKSxlLmhlYWRlcnM9Vy5mcm9tKGUuaGVhZGVycyksZS5kYXRhPXVlLmNhbGwoZSxlLnRyYW5zZm9ybVJlcXVlc3QpLFsicG9zdCIsInB1dCIsInBhdGNoIl0uaW5kZXhPZihlLm1ldGhvZCkhPT0tMSYmZS5oZWFkZXJzLnNldENvbnRlbnRUeXBlKCJhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQiLCExKSxKZS5nZXRBZGFwdGVyKGUuYWRhcHRlcnx8dGUuYWRhcHRlcikoZSkudGhlbihmdW5jdGlvbihyKXtyZXR1cm4gUnQoZSksci5kYXRhPXVlLmNhbGwoZSxlLnRyYW5zZm9ybVJlc3BvbnNlLHIpLHIuaGVhZGVycz1XLmZyb20oci5oZWFkZXJzKSxyfSxmdW5jdGlvbihyKXtyZXR1cm4gZmUocil8fChSdChlKSxyJiZyLnJlc3BvbnNlJiYoci5yZXNwb25zZS5kYXRhPXVlLmNhbGwoZSxlLnRyYW5zZm9ybVJlc3BvbnNlLHIucmVzcG9uc2UpLHIucmVzcG9uc2UuaGVhZGVycz1XLmZyb20oci5yZXNwb25zZS5oZWFkZXJzKSkpLFByb21pc2UucmVqZWN0KHIpfSl9dmFyIEhlPSIxLjcuNCI7dmFyIGt0PXt9O1sib2JqZWN0IiwiYm9vbGVhbiIsIm51bWJlciIsImZ1bmN0aW9uIiwic3RyaW5nIiwic3ltYm9sIl0uZm9yRWFjaCgoZSx0KT0+e2t0W2VdPWZ1bmN0aW9uKHIpe3JldHVybiB0eXBlb2Ygcj09PWV8fCJhIisodDwxPyJuICI6IiAiKStlfX0pO3ZhciBDcj17fTtrdC50cmFuc2l0aW9uYWw9ZnVuY3Rpb24odCxBLHIpe2Z1bmN0aW9uIG8oaSxuKXtyZXR1cm4iW0F4aW9zIHYiK0hlKyJdIFRyYW5zaXRpb25hbCBvcHRpb24gJyIraSsiJyIrbisocj8iLiAiK3I6IiIpfXJldHVybihpLG4sbSk9PntpZih0PT09ITEpdGhyb3cgbmV3IGgobyhuLCIgaGFzIGJlZW4gcmVtb3ZlZCIrKEE/IiBpbiAiK0E6IiIpKSxoLkVSUl9ERVBSRUNBVEVEKTtyZXR1cm4gQSYmIUNyW25dJiYoQ3Jbbl09ITAsY29uc29sZS53YXJuKG8obiwiIGhhcyBiZWVuIGRlcHJlY2F0ZWQgc2luY2UgdiIrQSsiIGFuZCB3aWxsIGJlIHJlbW92ZWQgaW4gdGhlIG5lYXIgZnV0dXJlIikpKSx0P3QoaSxuLG0pOiEwfX07ZnVuY3Rpb24gUm8oZSx0LEEpe2lmKHR5cGVvZiBlIT0ib2JqZWN0Iil0aHJvdyBuZXcgaCgib3B0aW9ucyBtdXN0IGJlIGFuIG9iamVjdCIsaC5FUlJfQkFEX09QVElPTl9WQUxVRSk7bGV0IHI9T2JqZWN0LmtleXMoZSksbz1yLmxlbmd0aDtmb3IoO28tLSA+MDspe2xldCBpPXJbb10sbj10W2ldO2lmKG4pe2xldCBtPWVbaV0sZj1tPT09dm9pZCAwfHxuKG0saSxlKTtpZihmIT09ITApdGhyb3cgbmV3IGgoIm9wdGlvbiAiK2krIiBtdXN0IGJlICIrZixoLkVSUl9CQURfT1BUSU9OX1ZBTFVFKTtjb250aW51ZX1pZihBIT09ITApdGhyb3cgbmV3IGgoIlVua25vd24gb3B0aW9uICIraSxoLkVSUl9CQURfT1BUSU9OKX19dmFyIHFlPXthc3NlcnRPcHRpb25zOlJvLHZhbGlkYXRvcnM6a3R9O3ZhciBLPXFlLnZhbGlkYXRvcnMsaWU9Y2xhc3N7Y29uc3RydWN0b3IodCl7dGhpcy5kZWZhdWx0cz10LHRoaXMuaW50ZXJjZXB0b3JzPXtyZXF1ZXN0Om5ldyBsdCxyZXNwb25zZTpuZXcgbHR9fWFzeW5jIHJlcXVlc3QodCxBKXt0cnl7cmV0dXJuIGF3YWl0IHRoaXMuX3JlcXVlc3QodCxBKX1jYXRjaChyKXtpZihyIGluc3RhbmNlb2YgRXJyb3Ipe2xldCBvO0Vycm9yLmNhcHR1cmVTdGFja1RyYWNlP0Vycm9yLmNhcHR1cmVTdGFja1RyYWNlKG89e30pOm89bmV3IEVycm9yO2xldCBpPW8uc3RhY2s/by5zdGFjay5yZXBsYWNlKC9eLitcbi8sIiIpOiIiO3RyeXtyLnN0YWNrP2kmJiFTdHJpbmcoci5zdGFjaykuZW5kc1dpdGgoaS5yZXBsYWNlKC9eLitcbi4rXG4vLCIiKSkmJihyLnN0YWNrKz1gCmAraSk6ci5zdGFjaz1pfWNhdGNoe319dGhyb3cgcn19X3JlcXVlc3QodCxBKXt0eXBlb2YgdD09InN0cmluZyI/KEE9QXx8e30sQS51cmw9dCk6QT10fHx7fSxBPUcodGhpcy5kZWZhdWx0cyxBKTtsZXR7dHJhbnNpdGlvbmFsOnIscGFyYW1zU2VyaWFsaXplcjpvLGhlYWRlcnM6aX09QTtyIT09dm9pZCAwJiZxZS5hc3NlcnRPcHRpb25zKHIse3NpbGVudEpTT05QYXJzaW5nOksudHJhbnNpdGlvbmFsKEsuYm9vbGVhbiksZm9yY2VkSlNPTlBhcnNpbmc6Sy50cmFuc2l0aW9uYWwoSy5ib29sZWFuKSxjbGFyaWZ5VGltZW91dEVycm9yOksudHJhbnNpdGlvbmFsKEsuYm9vbGVhbil9LCExKSxvIT1udWxsJiYoYy5pc0Z1bmN0aW9uKG8pP0EucGFyYW1zU2VyaWFsaXplcj17c2VyaWFsaXplOm99OnFlLmFzc2VydE9wdGlvbnMobyx7ZW5jb2RlOksuZnVuY3Rpb24sc2VyaWFsaXplOksuZnVuY3Rpb259LCEwKSksQS5tZXRob2Q9KEEubWV0aG9kfHx0aGlzLmRlZmF1bHRzLm1ldGhvZHx8ImdldCIpLnRvTG93ZXJDYXNlKCk7bGV0IG49aSYmYy5tZXJnZShpLmNvbW1vbixpW0EubWV0aG9kXSk7aSYmYy5mb3JFYWNoKFsiZGVsZXRlIiwiZ2V0IiwiaGVhZCIsInBvc3QiLCJwdXQiLCJwYXRjaCIsImNvbW1vbiJdLEk9PntkZWxldGUgaVtJXX0pLEEuaGVhZGVycz1XLmNvbmNhdChuLGkpO2xldCBtPVtdLGY9ITA7dGhpcy5pbnRlcmNlcHRvcnMucmVxdWVzdC5mb3JFYWNoKGZ1bmN0aW9uKEIpe3R5cGVvZiBCLnJ1bldoZW49PSJmdW5jdGlvbiImJkIucnVuV2hlbihBKT09PSExfHwoZj1mJiZCLnN5bmNocm9ub3VzLG0udW5zaGlmdChCLmZ1bGZpbGxlZCxCLnJlamVjdGVkKSl9KTtsZXQgbD1bXTt0aGlzLmludGVyY2VwdG9ycy5yZXNwb25zZS5mb3JFYWNoKGZ1bmN0aW9uKEIpe2wucHVzaChCLmZ1bGZpbGxlZCxCLnJlamVjdGVkKX0pO2xldCBhLGc9MCx1O2lmKCFmKXtsZXQgST1bTWUuYmluZCh0aGlzKSx2b2lkIDBdO2ZvcihJLnVuc2hpZnQuYXBwbHkoSSxtKSxJLnB1c2guYXBwbHkoSSxsKSx1PUkubGVuZ3RoLGE9UHJvbWlzZS5yZXNvbHZlKEEpO2c8dTspYT1hLnRoZW4oSVtnKytdLElbZysrXSk7cmV0dXJuIGF9dT1tLmxlbmd0aDtsZXQgcz1BO2ZvcihnPTA7Zzx1Oyl7bGV0IEk9bVtnKytdLEI9bVtnKytdO3RyeXtzPUkocyl9Y2F0Y2goZCl7Qi5jYWxsKHRoaXMsZCk7YnJlYWt9fXRyeXthPU1lLmNhbGwodGhpcyxzKX1jYXRjaChJKXtyZXR1cm4gUHJvbWlzZS5yZWplY3QoSSl9Zm9yKGc9MCx1PWwubGVuZ3RoO2c8dTspYT1hLnRoZW4obFtnKytdLGxbZysrXSk7cmV0dXJuIGF9Z2V0VXJpKHQpe3Q9Ryh0aGlzLmRlZmF1bHRzLHQpO2xldCBBPWRlKHQuYmFzZVVSTCx0LnVybCk7cmV0dXJuIHBlKEEsdC5wYXJhbXMsdC5wYXJhbXNTZXJpYWxpemVyKX19O2MuZm9yRWFjaChbImRlbGV0ZSIsImdldCIsImhlYWQiLCJvcHRpb25zIl0sZnVuY3Rpb24odCl7aWUucHJvdG90eXBlW3RdPWZ1bmN0aW9uKEEscil7cmV0dXJuIHRoaXMucmVxdWVzdChHKHJ8fHt9LHttZXRob2Q6dCx1cmw6QSxkYXRhOihyfHx7fSkuZGF0YX0pKX19KTtjLmZvckVhY2goWyJwb3N0IiwicHV0IiwicGF0Y2giXSxmdW5jdGlvbih0KXtmdW5jdGlvbiBBKHIpe3JldHVybiBmdW5jdGlvbihpLG4sbSl7cmV0dXJuIHRoaXMucmVxdWVzdChHKG18fHt9LHttZXRob2Q6dCxoZWFkZXJzOnI/eyJDb250ZW50LVR5cGUiOiJtdWx0aXBhcnQvZm9ybS1kYXRhIn06e30sdXJsOmksZGF0YTpufSkpfX1pZS5wcm90b3R5cGVbdF09QSgpLGllLnByb3RvdHlwZVt0KyJGb3JtIl09QSghMCl9KTt2YXIgQmU9aWU7dmFyIGJ0PWNsYXNzIGV7Y29uc3RydWN0b3IodCl7aWYodHlwZW9mIHQhPSJmdW5jdGlvbiIpdGhyb3cgbmV3IFR5cGVFcnJvcigiZXhlY3V0b3IgbXVzdCBiZSBhIGZ1bmN0aW9uLiIpO2xldCBBO3RoaXMucHJvbWlzZT1uZXcgUHJvbWlzZShmdW5jdGlvbihpKXtBPWl9KTtsZXQgcj10aGlzO3RoaXMucHJvbWlzZS50aGVuKG89PntpZighci5fbGlzdGVuZXJzKXJldHVybjtsZXQgaT1yLl9saXN0ZW5lcnMubGVuZ3RoO2Zvcig7aS0tID4wOylyLl9saXN0ZW5lcnNbaV0obyk7ci5fbGlzdGVuZXJzPW51bGx9KSx0aGlzLnByb21pc2UudGhlbj1vPT57bGV0IGksbj1uZXcgUHJvbWlzZShtPT57ci5zdWJzY3JpYmUobSksaT1tfSkudGhlbihvKTtyZXR1cm4gbi5jYW5jZWw9ZnVuY3Rpb24oKXtyLnVuc3Vic2NyaWJlKGkpfSxufSx0KGZ1bmN0aW9uKGksbixtKXtyLnJlYXNvbnx8KHIucmVhc29uPW5ldyBNKGksbixtKSxBKHIucmVhc29uKSl9KX10aHJvd0lmUmVxdWVzdGVkKCl7aWYodGhpcy5yZWFzb24pdGhyb3cgdGhpcy5yZWFzb259c3Vic2NyaWJlKHQpe2lmKHRoaXMucmVhc29uKXt0KHRoaXMucmVhc29uKTtyZXR1cm59dGhpcy5fbGlzdGVuZXJzP3RoaXMuX2xpc3RlbmVycy5wdXNoKHQpOnRoaXMuX2xpc3RlbmVycz1bdF19dW5zdWJzY3JpYmUodCl7aWYoIXRoaXMuX2xpc3RlbmVycylyZXR1cm47bGV0IEE9dGhpcy5fbGlzdGVuZXJzLmluZGV4T2YodCk7QSE9PS0xJiZ0aGlzLl9saXN0ZW5lcnMuc3BsaWNlKEEsMSl9c3RhdGljIHNvdXJjZSgpe2xldCB0O3JldHVybnt0b2tlbjpuZXcgZShmdW5jdGlvbihvKXt0PW99KSxjYW5jZWw6dH19fSxFcj1idDtmdW5jdGlvbiBEdChlKXtyZXR1cm4gZnVuY3Rpb24oQSl7cmV0dXJuIGUuYXBwbHkobnVsbCxBKX19ZnVuY3Rpb24gV3QoZSl7cmV0dXJuIGMuaXNPYmplY3QoZSkmJmUuaXNBeGlvc0Vycm9yPT09ITB9dmFyIEZ0PXtDb250aW51ZToxMDAsU3dpdGNoaW5nUHJvdG9jb2xzOjEwMSxQcm9jZXNzaW5nOjEwMixFYXJseUhpbnRzOjEwMyxPazoyMDAsQ3JlYXRlZDoyMDEsQWNjZXB0ZWQ6MjAyLE5vbkF1dGhvcml0YXRpdmVJbmZvcm1hdGlvbjoyMDMsTm9Db250ZW50OjIwNCxSZXNldENvbnRlbnQ6MjA1LFBhcnRpYWxDb250ZW50OjIwNixNdWx0aVN0YXR1czoyMDcsQWxyZWFkeVJlcG9ydGVkOjIwOCxJbVVzZWQ6MjI2LE11bHRpcGxlQ2hvaWNlczozMDAsTW92ZWRQZXJtYW5lbnRseTozMDEsRm91bmQ6MzAyLFNlZU90aGVyOjMwMyxOb3RNb2RpZmllZDozMDQsVXNlUHJveHk6MzA1LFVudXNlZDozMDYsVGVtcG9yYXJ5UmVkaXJlY3Q6MzA3LFBlcm1hbmVudFJlZGlyZWN0OjMwOCxCYWRSZXF1ZXN0OjQwMCxVbmF1dGhvcml6ZWQ6NDAxLFBheW1lbnRSZXF1aXJlZDo0MDIsRm9yYmlkZGVuOjQwMyxOb3RGb3VuZDo0MDQsTWV0aG9kTm90QWxsb3dlZDo0MDUsTm90QWNjZXB0YWJsZTo0MDYsUHJveHlBdXRoZW50aWNhdGlvblJlcXVpcmVkOjQwNyxSZXF1ZXN0VGltZW91dDo0MDgsQ29uZmxpY3Q6NDA5LEdvbmU6NDEwLExlbmd0aFJlcXVpcmVkOjQxMSxQcmVjb25kaXRpb25GYWlsZWQ6NDEyLFBheWxvYWRUb29MYXJnZTo0MTMsVXJpVG9vTG9uZzo0MTQsVW5zdXBwb3J0ZWRNZWRpYVR5cGU6NDE1LFJhbmdlTm90U2F0aXNmaWFibGU6NDE2LEV4cGVjdGF0aW9uRmFpbGVkOjQxNyxJbUFUZWFwb3Q6NDE4LE1pc2RpcmVjdGVkUmVxdWVzdDo0MjEsVW5wcm9jZXNzYWJsZUVudGl0eTo0MjIsTG9ja2VkOjQyMyxGYWlsZWREZXBlbmRlbmN5OjQyNCxUb29FYXJseTo0MjUsVXBncmFkZVJlcXVpcmVkOjQyNixQcmVjb25kaXRpb25SZXF1aXJlZDo0MjgsVG9vTWFueVJlcXVlc3RzOjQyOSxSZXF1ZXN0SGVhZGVyRmllbGRzVG9vTGFyZ2U6NDMxLFVuYXZhaWxhYmxlRm9yTGVnYWxSZWFzb25zOjQ1MSxJbnRlcm5hbFNlcnZlckVycm9yOjUwMCxOb3RJbXBsZW1lbnRlZDo1MDEsQmFkR2F0ZXdheTo1MDIsU2VydmljZVVuYXZhaWxhYmxlOjUwMyxHYXRld2F5VGltZW91dDo1MDQsSHR0cFZlcnNpb25Ob3RTdXBwb3J0ZWQ6NTA1LFZhcmlhbnRBbHNvTmVnb3RpYXRlczo1MDYsSW5zdWZmaWNpZW50U3RvcmFnZTo1MDcsTG9vcERldGVjdGVkOjUwOCxOb3RFeHRlbmRlZDo1MTAsTmV0d29ya0F1dGhlbnRpY2F0aW9uUmVxdWlyZWQ6NTExfTtPYmplY3QuZW50cmllcyhGdCkuZm9yRWFjaCgoW2UsdF0pPT57RnRbdF09ZX0pO3ZhciB5cj1GdDtmdW5jdGlvbiBRcihlKXtsZXQgdD1uZXcgQmUoZSksQT1nZShCZS5wcm90b3R5cGUucmVxdWVzdCx0KTtyZXR1cm4gYy5leHRlbmQoQSxCZS5wcm90b3R5cGUsdCx7YWxsT3duS2V5czohMH0pLGMuZXh0ZW5kKEEsdCxudWxsLHthbGxPd25LZXlzOiEwfSksQS5jcmVhdGU9ZnVuY3Rpb24obyl7cmV0dXJuIFFyKEcoZSxvKSl9LEF9dmFyIGI9UXIodGUpO2IuQXhpb3M9QmU7Yi5DYW5jZWxlZEVycm9yPU07Yi5DYW5jZWxUb2tlbj1FcjtiLmlzQ2FuY2VsPWZlO2IuVkVSU0lPTj1IZTtiLnRvRm9ybURhdGE9WTtiLkF4aW9zRXJyb3I9aDtiLkNhbmNlbD1iLkNhbmNlbGVkRXJyb3I7Yi5hbGw9ZnVuY3Rpb24odCl7cmV0dXJuIFByb21pc2UuYWxsKHQpfTtiLnNwcmVhZD1EdDtiLmlzQXhpb3NFcnJvcj1XdDtiLm1lcmdlQ29uZmlnPUc7Yi5BeGlvc0hlYWRlcnM9VztiLmZvcm1Ub0pTT049ZT0+UGUoYy5pc0hUTUxGb3JtKGUpP25ldyBGb3JtRGF0YShlKTplKTtiLmdldEFkYXB0ZXI9SmUuZ2V0QWRhcHRlcjtiLkh0dHBTdGF0dXNDb2RlPXlyO2IuZGVmYXVsdD1iO3ZhciBIPWI7dmFye0F4aW9zOkhsLEF4aW9zRXJyb3I6cWwsQ2FuY2VsZWRFcnJvcjpZbCxpc0NhbmNlbDpLbCxDYW5jZWxUb2tlbjp2bCxWRVJTSU9OOmpsLGFsbDpfbCxDYW5jZWw6emwsaXNBeGlvc0Vycm9yOlZsLHNwcmVhZDpabCx0b0Zvcm1EYXRhOlhsLEF4aW9zSGVhZGVyczokbCxIdHRwU3RhdHVzQ29kZTplSSxmb3JtVG9KU09OOnRJLGdldEFkYXB0ZXI6QUksbWVyZ2VDb25maWc6ckl9PUg7YXN5bmMgZnVuY3Rpb24ga28oZSx0KXtsZXQgQT1lLHI9bnVsbDtpZihBPT1udWxsKXI9bmV3IFdvcmtlcihuZXcgVVJMKCIuL3dlYi13b3JrZXJzL2l0ay13YXNtLXBpcGVsaW5lLndvcmtlci5qcyIsaW1wb3J0Lm1ldGEudXJsKSx7dHlwZToibW9kdWxlIn0pO2Vsc2UgaWYoQS5zdGFydHNXaXRoKCJodHRwIikpe2xldCBvPWF3YWl0IEguZ2V0KEEse3Jlc3BvbnNlVHlwZToiYmxvYiIscGFyYW1zOnR9KSxpPVVSTC5jcmVhdGVPYmplY3RVUkwoby5kYXRhKTtyPW5ldyBXb3JrZXIoaSx7dHlwZToibW9kdWxlIn0pfWVsc2Ugcj1uZXcgV29ya2VyKEEse3R5cGU6Im1vZHVsZSJ9KTtyZXR1cm4gcn12YXIgQ2U9a287ZnVuY3Rpb24gaHIoZSl7bGV0IHQ9cnQoZSksQT1lO3JldHVybiBBLnRlcm1pbmF0ZWQ9ITEsQS53b3JrZXJQcm94eT10LEEub3JpZ2luYWxUZXJtaW5hdGU9QS50ZXJtaW5hdGUsQS50ZXJtaW5hdGU9KCk9PntBLnRlcm1pbmF0ZWQ9ITAsQS53b3JrZXJQcm94eVtBdF0oKSxBLm9yaWdpbmFsVGVybWluYXRlKCl9LHt3b3JrZXJQcm94eTp0LHdvcmtlcjpBfX1hc3luYyBmdW5jdGlvbiBibyhlLHQsQSl7bGV0IHI7aWYoZSE9bnVsbCl7bGV0IGk9ZTtyZXR1cm4gaS53b3JrZXJQcm94eSE9PXZvaWQgMD8ocj1pLndvcmtlclByb3h5LHt3b3JrZXJQcm94eTpyLHdvcmtlcjppfSk6aHIoZSl9bGV0IG89YXdhaXQgQ2UodCxBKTtyZXR1cm4gaHIobyl9dmFyIHdyPWJvO2FzeW5jIGZ1bmN0aW9uIERvKGUsdCxBKXtsZXQgcj0idW5rbm93biI7dHlwZW9mIGUhPSJzdHJpbmciP3I9ZS5ocmVmOmUuc3RhcnRzV2l0aCgiaHR0cCIpP3I9ZTpyPXR5cGVvZiB0PCJ1Ij9gJHt0fS8ke2V9YDplLHIuZW5kc1dpdGgoIi5qcyIpJiYocj1yLnN1YnN0cmluZygwLHIubGVuZ3RoLTMpKSxyLmVuZHNXaXRoKCIud2FzbSIpJiYocj1yLnN1YnN0cmluZygwLHIubGVuZ3RoLTUpKTtsZXQgbz1gJHtyfS53YXNtYCxuPShhd2FpdCBILmdldChvLHtyZXNwb25zZVR5cGU6ImFycmF5YnVmZmVyIixwYXJhbXM6QX0pKS5kYXRhO3JldHVybihhd2FpdCBpbXBvcnQoYCR7cn0uanNgKSkuZGVmYXVsdCh7d2FzbUJpbmFyeTpufSl9dmFyIFJyPURvO3ZhciBrcj1hc3luYygpPT5XZWJBc3NlbWJseS52YWxpZGF0ZShuZXcgVWludDhBcnJheShbMCw5NywxMTUsMTA5LDEsMCwwLDAsMSw1LDEsOTYsMCwxLDEyMywzLDIsMSwwLDEwLDEwLDEsOCwwLDY1LDAsMjUzLDE1LDI1Myw5OCwxMV0pKTt2YXIgV3I9dHlwZW9mIGdsb2JhbFRoaXMuU2hhcmVkQXJyYXlCdWZmZXI9PSJmdW5jdGlvbiIsYnI9bmV3IFRleHRFbmNvZGVyLERyPW5ldyBUZXh0RGVjb2RlcigidXRmLTgiKTtmdW5jdGlvbiBXbyhlLHQpe2xldCBBPXtmbGFnczoiciIsZW5jb2Rpbmc6ImJpbmFyeSJ9LHI9ZS5mc19vcGVuKHQsQS5mbGFncyksaT1lLmZzX3N0YXQodCkuc2l6ZSxuPW51bGw7V3I/bj1uZXcgU2hhcmVkQXJyYXlCdWZmZXIoaSk6bj1uZXcgQXJyYXlCdWZmZXIoaSk7bGV0IG09bmV3IFVpbnQ4QXJyYXkobik7cmV0dXJuIGUuZnNfcmVhZChyLG0sMCxpLDApLGUuZnNfY2xvc2UociksbX1mdW5jdGlvbiBGcihlLHQsQSl7bGV0IHI9bnVsbDtXcj9yPW5ldyBTaGFyZWRBcnJheUJ1ZmZlcihBKTpyPW5ldyBBcnJheUJ1ZmZlcihBKTtsZXQgbz1uZXcgVWludDhBcnJheShyKSxpPW5ldyBVaW50OEFycmF5KGUuSEVBUFU4LmJ1ZmZlcix0LEEpO3JldHVybiBvLnNldChpKSxvfWZ1bmN0aW9uIEQoZSx0LEEscil7bGV0IG89MDtyZXR1cm4gdCE9PW51bGwmJihvPWUuY2NhbGwoIml0a193YXNtX2lucHV0X2FycmF5X2FsbG9jIiwibnVtYmVyIixbIm51bWJlciIsIm51bWJlciIsIm51bWJlciIsIm51bWJlciJdLFswLEEscix0LmJ1ZmZlci5ieXRlTGVuZ3RoXSksZS5IRUFQVTguc2V0KG5ldyBVaW50OEFycmF5KHQuYnVmZmVyKSxvKSksb31mdW5jdGlvbiB2KGUsdCxBKXtsZXQgcj1KU09OLnN0cmluZ2lmeSh0KSxvPWUubGVuZ3RoQnl0ZXNVVEY4KHIpKzEsaT1lLmNjYWxsKCJpdGtfd2FzbV9pbnB1dF9qc29uX2FsbG9jIiwibnVtYmVyIixbIm51bWJlciIsIm51bWJlciIsIm51bWJlciJdLFswLEEsb10pO2Uuc3RyaW5nVG9VVEY4KHIsaSxvKX1mdW5jdGlvbiBTKGUsdCxBLHIpe2xldCBvPWUuY2NhbGwoIml0a193YXNtX291dHB1dF9hcnJheV9hZGRyZXNzIiwibnVtYmVyIixbIm51bWJlciIsIm51bWJlciIsIm51bWJlciJdLFswLHQsQV0pLGk9ZS5jY2FsbCgiaXRrX3dhc21fb3V0cHV0X2FycmF5X3NpemUiLCJudW1iZXIiLFsibnVtYmVyIiwibnVtYmVyIiwibnVtYmVyIl0sWzAsdCxBXSksbj1GcihlLG8saSk7cmV0dXJuIE8ocixuLmJ1ZmZlcil9ZnVuY3Rpb24gRWUoZSx0KXtsZXQgQT1lLmNjYWxsKCJpdGtfd2FzbV9vdXRwdXRfanNvbl9hZGRyZXNzIiwibnVtYmVyIixbIm51bWJlciIsIm51bWJlciJdLFswLHRdKSxyPWUuVVRGOFRvU3RyaW5nKEEpO3JldHVybiBKU09OLnBhcnNlKHIpfWZ1bmN0aW9uIEZvKGUsdCxBLHIpe3IhPW51bGwmJnIubGVuZ3RoPjAmJnIuZm9yRWFjaChmdW5jdGlvbihsLGEpe3N3aXRjaChsLnR5cGUpe2Nhc2UgcC5UZXh0U3RyZWFtOntsZXQgZz1ici5lbmNvZGUobC5kYXRhLmRhdGEpLHU9RChlLGcsYSwwKSxzPXtzaXplOmcuYnVmZmVyLmJ5dGVMZW5ndGgsZGF0YTpgZGF0YTphcHBsaWNhdGlvbi92bmQuaXRrLmFkZHJlc3MsMDoke3V9YH07dihlLHMsYSk7YnJlYWt9Y2FzZSBwLkpzb25Db21wYXRpYmxlOntsZXQgZz1ici5lbmNvZGUoSlNPTi5zdHJpbmdpZnkobC5kYXRhKSksdT1EKGUsZyxhLDApLHM9e3NpemU6Zy5idWZmZXIuYnl0ZUxlbmd0aCxkYXRhOmBkYXRhOmFwcGxpY2F0aW9uL3ZuZC5pdGsuYWRkcmVzcywwOiR7dX1gfTt2KGUscyxhKTticmVha31jYXNlIHAuQmluYXJ5U3RyZWFtOntsZXQgZz1sLmRhdGEuZGF0YSx1PUQoZSxnLGEsMCkscz17c2l6ZTpnLmJ1ZmZlci5ieXRlTGVuZ3RoLGRhdGE6YGRhdGE6YXBwbGljYXRpb24vdm5kLml0ay5hZGRyZXNzLDA6JHt1fWB9O3YoZSxzLGEpO2JyZWFrfWNhc2UgcC5UZXh0RmlsZTp7ZS5mc193cml0ZUZpbGUobC5kYXRhLnBhdGgsbC5kYXRhLmRhdGEpO2JyZWFrfWNhc2UgcC5CaW5hcnlGaWxlOntlLmZzX3dyaXRlRmlsZShsLmRhdGEucGF0aCxsLmRhdGEuZGF0YSk7YnJlYWt9Y2FzZSBwLkltYWdlOntsZXQgZz1sLmRhdGEsdT1EKGUsZy5kYXRhLGEsMCkscz1EKGUsZy5kaXJlY3Rpb24sYSwxKSxJPXR5cGVvZiBnLm1ldGFkYXRhPy5lbnRyaWVzPCJ1Ij9BcnJheS5mcm9tKGcubWV0YWRhdGEuZW50cmllcygpKTpbXSxCPXtpbWFnZVR5cGU6Zy5pbWFnZVR5cGUsbmFtZTpnLm5hbWUsb3JpZ2luOmcub3JpZ2luLHNwYWNpbmc6Zy5zcGFjaW5nLGRpcmVjdGlvbjpgZGF0YTphcHBsaWNhdGlvbi92bmQuaXRrLmFkZHJlc3MsMDoke3N9YCxzaXplOmcuc2l6ZSxkYXRhOmBkYXRhOmFwcGxpY2F0aW9uL3ZuZC5pdGsuYWRkcmVzcywwOiR7dX1gLG1ldGFkYXRhOkl9O3YoZSxCLGEpO2JyZWFrfWNhc2UgcC5NZXNoOntsZXQgZz1sLmRhdGEsdT1EKGUsZy5wb2ludHMsYSwwKSxzPUQoZSxnLmNlbGxzLGEsMSksST1EKGUsZy5wb2ludERhdGEsYSwyKSxCPUQoZSxnLmNlbGxEYXRhLGEsMyksZD17bWVzaFR5cGU6Zy5tZXNoVHlwZSxuYW1lOmcubmFtZSxudW1iZXJPZlBvaW50czpnLm51bWJlck9mUG9pbnRzLHBvaW50czpgZGF0YTphcHBsaWNhdGlvbi92bmQuaXRrLmFkZHJlc3MsMDoke3V9YCxudW1iZXJPZkNlbGxzOmcubnVtYmVyT2ZDZWxscyxjZWxsczpgZGF0YTphcHBsaWNhdGlvbi92bmQuaXRrLmFkZHJlc3MsMDoke3N9YCxjZWxsQnVmZmVyU2l6ZTpnLmNlbGxCdWZmZXJTaXplLG51bWJlck9mUG9pbnRQaXhlbHM6Zy5udW1iZXJPZlBvaW50UGl4ZWxzLHBvaW50RGF0YTpgZGF0YTphcHBsaWNhdGlvbi92bmQuaXRrLmFkZHJlc3MsMDoke0l9YCxudW1iZXJPZkNlbGxQaXhlbHM6Zy5udW1iZXJPZkNlbGxQaXhlbHMsY2VsbERhdGE6YGRhdGE6YXBwbGljYXRpb24vdm5kLml0ay5hZGRyZXNzLDA6JHtCfWB9O3YoZSxkLGEpO2JyZWFrfWNhc2UgcC5Qb2ludFNldDp7bGV0IGc9bC5kYXRhLHU9RChlLGcucG9pbnRzLGEsMCkscz1EKGUsZy5wb2ludERhdGEsYSwxKSxJPXtwb2ludFNldFR5cGU6Zy5wb2ludFNldFR5cGUsbmFtZTpnLm5hbWUsbnVtYmVyT2ZQb2ludHM6Zy5udW1iZXJPZlBvaW50cyxwb2ludHM6YGRhdGE6YXBwbGljYXRpb24vdm5kLml0ay5hZGRyZXNzLDA6JHt1fWAsbnVtYmVyT2ZQb2ludFBpeGVsczpnLm51bWJlck9mUG9pbnRQaXhlbHMscG9pbnREYXRhOmBkYXRhOmFwcGxpY2F0aW9uL3ZuZC5pdGsuYWRkcmVzcywwOiR7c31gfTt2KGUsSSxhKTticmVha31jYXNlIHAuVHJhbnNmb3JtTGlzdDp7bGV0IGc9bC5kYXRhLHU9W107Zy5mb3JFYWNoKChzLEkpPT57bGV0IGQ9YGRhdGE6YXBwbGljYXRpb24vdm5kLml0ay5hZGRyZXNzLDA6JHtEKGUscy5maXhlZFBhcmFtZXRlcnMsYSxJKjIpfWAsVT1gZGF0YTphcHBsaWNhdGlvbi92bmQuaXRrLmFkZHJlc3MsMDoke0QoZSxzLnBhcmFtZXRlcnMsYSxJKjIrMSl9YCxSPXt0cmFuc2Zvcm1UeXBlOnMudHJhbnNmb3JtVHlwZSxudW1iZXJPZkZpeGVkUGFyYW1ldGVyczpzLm51bWJlck9mRml4ZWRQYXJhbWV0ZXJzLG51bWJlck9mUGFyYW1ldGVyczpzLm51bWJlck9mUGFyYW1ldGVycyxuYW1lOnMubmFtZSxpbnB1dFNwYWNlTmFtZTpzLmlucHV0U3BhY2VOYW1lLG91dHB1dFNwYWNlTmFtZTpzLm91dHB1dFNwYWNlTmFtZSxwYXJhbWV0ZXJzOlUsZml4ZWRQYXJhbWV0ZXJzOmR9O3UucHVzaChSKX0pLHYoZSx1LGEpO2JyZWFrfWNhc2UgcC5Qb2x5RGF0YTp7bGV0IGc9bC5kYXRhLHU9RChlLGcucG9pbnRzLGEsMCkscz1EKGUsZy52ZXJ0aWNlcyxhLDEpLEk9RChlLGcubGluZXMsYSwyKSxCPUQoZSxnLnBvbHlnb25zLGEsMyksZD1EKGUsZy50cmlhbmdsZVN0cmlwcyxhLDQpLGs9RChlLGcucG9pbnREYXRhLGEsNSksVT1EKGUsZy5wb2ludERhdGEsYSw2KSxSPXtwb2x5RGF0YVR5cGU6Zy5wb2x5RGF0YVR5cGUsbmFtZTpnLm5hbWUsbnVtYmVyT2ZQb2ludHM6Zy5udW1iZXJPZlBvaW50cyxwb2ludHM6YGRhdGE6YXBwbGljYXRpb24vdm5kLml0ay5hZGRyZXNzLDA6JHt1fWAsdmVydGljZXNCdWZmZXJTaXplOmcudmVydGljZXNCdWZmZXJTaXplLHZlcnRpY2VzOmBkYXRhOmFwcGxpY2F0aW9uL3ZuZC5pdGsuYWRkcmVzcywwOiR7c31gLGxpbmVzQnVmZmVyU2l6ZTpnLmxpbmVzQnVmZmVyU2l6ZSxsaW5lczpgZGF0YTphcHBsaWNhdGlvbi92bmQuaXRrLmFkZHJlc3MsMDoke0l9YCxwb2x5Z29uc0J1ZmZlclNpemU6Zy5wb2x5Z29uc0J1ZmZlclNpemUscG9seWdvbnM6YGRhdGE6YXBwbGljYXRpb24vdm5kLml0ay5hZGRyZXNzLDA6JHtCfWAsdHJpYW5nbGVTdHJpcHNCdWZmZXJTaXplOmcudHJpYW5nbGVTdHJpcHNCdWZmZXJTaXplLHRyaWFuZ2xlU3RyaXBzOmBkYXRhOmFwcGxpY2F0aW9uL3ZuZC5pdGsuYWRkcmVzcywwOiR7ZH1gLG51bWJlck9mUG9pbnRQaXhlbHM6Zy5udW1iZXJPZlBvaW50UGl4ZWxzLHBvaW50RGF0YTpgZGF0YTphcHBsaWNhdGlvbi92bmQuaXRrLmFkZHJlc3MsMDoke2t9YCxudW1iZXJPZkNlbGxQaXhlbHM6Zy5udW1iZXJPZkNlbGxQaXhlbHMsY2VsbERhdGE6YGRhdGE6YXBwbGljYXRpb24vdm5kLml0ay5hZGRyZXNzLDA6JHtVfWB9O3YoZSxSLGEpO2JyZWFrfWRlZmF1bHQ6dGhyb3cgRXJyb3IoIlVuc3VwcG9ydGVkIGlucHV0IEludGVyZmFjZVR5cGUiKX19KSxlLnJlc2V0TW9kdWxlU3Rkb3V0KCksZS5yZXNldE1vZHVsZVN0ZGVycigpO2xldCBvPWUuc3RhY2tTYXZlKCksaT0wO3RyeXtpPWUuY2FsbE1haW4odC5zbGljZSgpKX1jYXRjaChsKXt0aHJvdyB0eXBlb2YgbD09Im51bWJlciImJihjb25zb2xlLmxvZygiRXhjZXB0aW9uIHdoaWxlIHJ1bm5pbmcgcGlwZWxpbmU6IiksY29uc29sZS5sb2coInN0ZG91dDoiLGUuZ2V0TW9kdWxlU3Rkb3V0KCkpLGNvbnNvbGUuZXJyb3IoInN0ZGVycjoiLGUuZ2V0TW9kdWxlU3RkZXJyKCkpLHR5cGVvZiBlLmdldEV4Y2VwdGlvbk1lc3NhZ2U8InUiP2NvbnNvbGUuZXJyb3IoImV4Y2VwdGlvbjoiLGUuZ2V0RXhjZXB0aW9uTWVzc2FnZShsKSk6Y29uc29sZS5lcnJvcigiQnVpbGQgbW9kdWxlIGluIERlYnVnIG1vZGUgZm9yIGV4Y2VwdGlvbiBtZXNzYWdlIGluZm9ybWF0aW9uLiIpKSxsfWZpbmFsbHl7ZS5zdGFja1Jlc3RvcmUobyl9bGV0IG49ZS5nZXRNb2R1bGVTdGRvdXQoKSxtPWUuZ2V0TW9kdWxlU3RkZXJyKCksZj1bXTtyZXR1cm4gQSE9bnVsbCYmQS5sZW5ndGg+MCYmaT09PTAmJkEuZm9yRWFjaChmdW5jdGlvbihsLGEpe2xldCBnPW51bGw7c3dpdGNoKGwudHlwZSl7Y2FzZSBwLlRleHRTdHJlYW06e2xldCBzPWUuY2NhbGwoIml0a193YXNtX291dHB1dF9hcnJheV9hZGRyZXNzIiwibnVtYmVyIixbIm51bWJlciIsIm51bWJlciIsIm51bWJlciJdLFswLGEsMF0pLEk9ZS5jY2FsbCgiaXRrX3dhc21fb3V0cHV0X2FycmF5X3NpemUiLCJudW1iZXIiLFsibnVtYmVyIiwibnVtYmVyIiwibnVtYmVyIl0sWzAsYSwwXSksQj1uZXcgVWludDhBcnJheShlLkhFQVBVOC5idWZmZXIscyxJKTtnPXtkYXRhOkRyLmRlY29kZShCKX07YnJlYWt9Y2FzZSBwLkpzb25Db21wYXRpYmxlOntsZXQgcz1lLmNjYWxsKCJpdGtfd2FzbV9vdXRwdXRfYXJyYXlfYWRkcmVzcyIsIm51bWJlciIsWyJudW1iZXIiLCJudW1iZXIiLCJudW1iZXIiXSxbMCxhLDBdKSxJPWUuY2NhbGwoIml0a193YXNtX291dHB1dF9hcnJheV9zaXplIiwibnVtYmVyIixbIm51bWJlciIsIm51bWJlciIsIm51bWJlciJdLFswLGEsMF0pLEI9bmV3IFVpbnQ4QXJyYXkoZS5IRUFQVTguYnVmZmVyLHMsSSk7Zz1KU09OLnBhcnNlKERyLmRlY29kZShCKSk7YnJlYWt9Y2FzZSBwLkJpbmFyeVN0cmVhbTp7bGV0IHM9ZS5jY2FsbCgiaXRrX3dhc21fb3V0cHV0X2FycmF5X2FkZHJlc3MiLCJudW1iZXIiLFsibnVtYmVyIiwibnVtYmVyIiwibnVtYmVyIl0sWzAsYSwwXSksST1lLmNjYWxsKCJpdGtfd2FzbV9vdXRwdXRfYXJyYXlfc2l6ZSIsIm51bWJlciIsWyJudW1iZXIiLCJudW1iZXIiLCJudW1iZXIiXSxbMCxhLDBdKTtnPXtkYXRhOkZyKGUscyxJKX07YnJlYWt9Y2FzZSBwLlRleHRGaWxlOntnPXtwYXRoOmwuZGF0YS5wYXRoLGRhdGE6ZS5mc19yZWFkRmlsZShsLmRhdGEucGF0aCx7ZW5jb2Rpbmc6InV0ZjgifSl9O2JyZWFrfWNhc2UgcC5CaW5hcnlGaWxlOntnPXtwYXRoOmwuZGF0YS5wYXRoLGRhdGE6V28oZSxsLmRhdGEucGF0aCl9O2JyZWFrfWNhc2UgcC5JbWFnZTp7bGV0IHM9RWUoZSxhKTtzLmRhdGE9UyhlLGEsMCxzLmltYWdlVHlwZS5jb21wb25lbnRUeXBlKSxzLmRpcmVjdGlvbj1TKGUsYSwxLE4uRmxvYXQ2NCkscy5tZXRhZGF0YT1uZXcgTWFwKHMubWV0YWRhdGEpLGc9czticmVha31jYXNlIHAuTWVzaDp7bGV0IHM9RWUoZSxhKTtzLm51bWJlck9mUG9pbnRzPjA/cy5wb2ludHM9UyhlLGEsMCxzLm1lc2hUeXBlLnBvaW50Q29tcG9uZW50VHlwZSk6cy5wb2ludHM9TyhzLm1lc2hUeXBlLnBvaW50Q29tcG9uZW50VHlwZSxuZXcgQXJyYXlCdWZmZXIoMCkpLHMubnVtYmVyT2ZDZWxscz4wP3MuY2VsbHM9UyhlLGEsMSxzLm1lc2hUeXBlLmNlbGxDb21wb25lbnRUeXBlKTpzLmNlbGxzPU8ocy5tZXNoVHlwZS5jZWxsQ29tcG9uZW50VHlwZSxuZXcgQXJyYXlCdWZmZXIoMCkpLHMubnVtYmVyT2ZQb2ludFBpeGVscz4wP3MucG9pbnREYXRhPVMoZSxhLDIscy5tZXNoVHlwZS5wb2ludFBpeGVsQ29tcG9uZW50VHlwZSk6cy5wb2ludERhdGE9TyhzLm1lc2hUeXBlLnBvaW50UGl4ZWxDb21wb25lbnRUeXBlLG5ldyBBcnJheUJ1ZmZlcigwKSkscy5udW1iZXJPZkNlbGxQaXhlbHM+MD9zLmNlbGxEYXRhPVMoZSxhLDMscy5tZXNoVHlwZS5jZWxsUGl4ZWxDb21wb25lbnRUeXBlKTpzLmNlbGxEYXRhPU8ocy5tZXNoVHlwZS5jZWxsUGl4ZWxDb21wb25lbnRUeXBlLG5ldyBBcnJheUJ1ZmZlcigwKSksZz1zO2JyZWFrfWNhc2UgcC5Qb2ludFNldDp7bGV0IHM9RWUoZSxhKTtzLm51bWJlck9mUG9pbnRzPjA/cy5wb2ludHM9UyhlLGEsMCxzLnBvaW50U2V0VHlwZS5wb2ludENvbXBvbmVudFR5cGUpOnMucG9pbnRzPU8ocy5wb2ludFNldFR5cGUucG9pbnRDb21wb25lbnRUeXBlLG5ldyBBcnJheUJ1ZmZlcigwKSkscy5udW1iZXJPZlBvaW50UGl4ZWxzPjA/cy5wb2ludERhdGE9UyhlLGEsMSxzLnBvaW50U2V0VHlwZS5wb2ludFBpeGVsQ29tcG9uZW50VHlwZSk6cy5wb2ludERhdGE9TyhzLnBvaW50U2V0VHlwZS5wb2ludFBpeGVsQ29tcG9uZW50VHlwZSxuZXcgQXJyYXlCdWZmZXIoMCkpLGc9czticmVha31jYXNlIHAuVHJhbnNmb3JtTGlzdDp7bGV0IHM9RWUoZSxhKTtzLmZvckVhY2goKEksQik9PntJLm51bWJlck9mRml4ZWRQYXJhbWV0ZXJzPjAmJihzW0JdLmZpeGVkUGFyYW1ldGVycz1TKGUsYSxCKjIsSS50cmFuc2Zvcm1UeXBlLnBhcmFtZXRlcnNWYWx1ZVR5cGUpKSxJLm51bWJlck9mRml4ZWRQYXJhbWV0ZXJzPjAmJihzW0JdLnBhcmFtZXRlcnM9UyhlLGEsQioyKzEsSS50cmFuc2Zvcm1UeXBlLnBhcmFtZXRlcnNWYWx1ZVR5cGUpKX0pLGc9czticmVha31jYXNlIHAuUG9seURhdGE6e2xldCBzPUVlKGUsYSk7cy5udW1iZXJPZlBvaW50cz4wP3MucG9pbnRzPVMoZSxhLDAsTi5GbG9hdDMyKTpzLnBvaW50cz1uZXcgRmxvYXQzMkFycmF5LHMudmVydGljZXNCdWZmZXJTaXplPjA/cy52ZXJ0aWNlcz1TKGUsYSwxLHcuVUludDMyKTpzLnZlcnRpY2VzPW5ldyBVaW50MzJBcnJheSxzLmxpbmVzQnVmZmVyU2l6ZT4wP3MubGluZXM9UyhlLGEsMix3LlVJbnQzMik6cy5saW5lcz1uZXcgVWludDMyQXJyYXkscy5wb2x5Z29uc0J1ZmZlclNpemU+MD9zLnBvbHlnb25zPVMoZSxhLDMsdy5VSW50MzIpOnMucG9seWdvbnM9bmV3IFVpbnQzMkFycmF5LHMudHJpYW5nbGVTdHJpcHNCdWZmZXJTaXplPjA/cy50cmlhbmdsZVN0cmlwcz1TKGUsYSw0LHcuVUludDMyKTpzLnRyaWFuZ2xlU3RyaXBzPW5ldyBVaW50MzJBcnJheSxzLm51bWJlck9mUG9pbnRQaXhlbHM+MD9zLnBvaW50RGF0YT1TKGUsYSw1LHMucG9seURhdGFUeXBlLnBvaW50UGl4ZWxDb21wb25lbnRUeXBlKTpzLnBvaW50RGF0YT1PKHMucG9seURhdGFUeXBlLnBvaW50UGl4ZWxDb21wb25lbnRUeXBlLG5ldyBBcnJheUJ1ZmZlcigwKSkscy5udW1iZXJPZkNlbGxQaXhlbHM+MD9zLmNlbGxEYXRhPVMoZSxhLDYscy5wb2x5RGF0YVR5cGUuY2VsbFBpeGVsQ29tcG9uZW50VHlwZSk6cy5jZWxsRGF0YT1PKHMucG9seURhdGFUeXBlLmNlbGxQaXhlbENvbXBvbmVudFR5cGUsbmV3IEFycmF5QnVmZmVyKDApKSxnPXM7YnJlYWt9ZGVmYXVsdDp0aHJvdyBFcnJvcigiVW5zdXBwb3J0ZWQgb3V0cHV0IEludGVyZmFjZVR5cGUiKX1sZXQgdT17dHlwZTpsLnR5cGUsZGF0YTpnfTtmLnB1c2godSl9KSx7cmV0dXJuVmFsdWU6aSxzdGRvdXQ6bixzdGRlcnI6bSxvdXRwdXRzOmZ9fXZhciBVcj1Gbzt2YXIgVW89dHlwZW9mIGdsb2JhbFRoaXMuU2hhcmVkQXJyYXlCdWZmZXI8InUiO2Z1bmN0aW9uIFNvKGUsdCl7aWYoZT09bnVsbClyZXR1cm5bXTtsZXQgQT1bXTtmb3IobGV0IHI9MDtyPGUubGVuZ3RoO3IrKyl7bGV0IG89Tm8oZVtyXSx0KTtvIT09bnVsbCYmQS5wdXNoKG8pfXJldHVybiBBfWZ1bmN0aW9uIE5vKGUsdCl7aWYoZT09bnVsbClyZXR1cm4gbnVsbDtsZXQgQT1udWxsO3JldHVybiBlLmJ1ZmZlciE9PXZvaWQgMD9BPWUuYnVmZmVyOmUuYnl0ZUxlbmd0aCE9PXZvaWQgMCYmKEE9ZSksVW8mJkEgaW5zdGFuY2VvZiBTaGFyZWRBcnJheUJ1ZmZlcj9udWxsOnQ/QTpBLnNsaWNlKDApfXZhciBTcj1TbztmdW5jdGlvbiBPbyhlKXtyZXR1cm5bZS5kYXRhLGUuZGlyZWN0aW9uXX12YXIgTnI9T287ZnVuY3Rpb24gUG8oZSl7cmV0dXJuW2UucG9pbnRzLGUucG9pbnREYXRhLGUuY2VsbHMsZS5jZWxsRGF0YV19dmFyIE9yPVBvO2Z1bmN0aW9uIHhvKGUpe3JldHVybltlLnBvaW50cyxlLnZlcnRpY2VzLGUubGluZXMsZS5wb2x5Z29ucyxlLnRyaWFuZ2xlU3RyaXBzLGUucG9pbnREYXRhLGUuY2VsbERhdGFdfXZhciBQcj14bzt2YXIgVG87ZnVuY3Rpb24gWWUoKXtyZXR1cm4gVG99dmFyIEdvO2Z1bmN0aW9uIHhyKCl7cmV0dXJuIEdvfXZhciBMbztmdW5jdGlvbiBLZSgpe3JldHVybiBMb312YXIgVXQ9bmV3IE1hcDtmdW5jdGlvbiBKbygpe2xldCBlPUtlKCk7cmV0dXJuIHR5cGVvZiBlPiJ1IiYmKGU9bnVsbCksZX1mdW5jdGlvbiBUcigpe2xldCBlPVllKCk7cmV0dXJuIHR5cGVvZiBlPiJ1IiYmKGU9bmV3IFVSTCgiL3BpcGVsaW5lcyIsZG9jdW1lbnQubG9jYXRpb24ub3JpZ2luKS5ocmVmKSxlfWZ1bmN0aW9uIHZlKCl7bGV0IGU9eHIoKTtyZXR1cm4gdHlwZW9mIGU+InUiJiYoZT17fSksZX1hc3luYyBmdW5jdGlvbiBNbyhlLHQsQSl7bGV0IHI9ZSxvPWU7aWYodHlwZW9mIGUhPSJzdHJpbmciJiYocj1uZXcgVVJMKGUuaHJlZiksbz1yLmhyZWYpLFV0LmhhcyhvKSlyZXR1cm4gVXQuZ2V0KG8pO3tsZXQgaT1hd2FpdCBScihlLHQ/LnRvU3RyaW5nKCk/P1RyKCksQT8/dmUoKSk7cmV0dXJuIFV0LnNldChvLGkpLGl9fWFzeW5jIGZ1bmN0aW9uIEhvKGUsdCxBLHIsbyl7aWYoIWF3YWl0IGtyKCkpe2xldCBkPSJXZWJBc3NlbWJseSBTSU1EIHN1cHBvcnQgaXMgcmVxdWlyZWQgLS0gcGxlYXNlIHVwZGF0ZSB5b3VyIGJyb3dzZXIuIjt0aHJvdyBhbGVydChkKSxuZXcgRXJyb3IoZCl9bGV0IGk9bz8ud2ViV29ya2VyPz9udWxsO2lmKGk9PT0hMSl7bGV0IGQ9YXdhaXQgTW8oZS50b1N0cmluZygpLG8/LnBpcGVsaW5lQmFzZVVybCxvPy5waXBlbGluZVF1ZXJ5UGFyYW1zPz92ZSgpKTtyZXR1cm4gVXIoZCx0LEEscil9bGV0IG49aSxtPW8/LnBpcGVsaW5lV29ya2VyVXJsPz9KbygpLGY9dHlwZW9mIG0hPSJzdHJpbmciJiZ0eXBlb2YgbT8uaHJlZjwidSI/bS5ocmVmOm0se3dvcmtlclByb3h5Omwsd29ya2VyOmF9PWF3YWl0IHdyKG4sZixvPy5waXBlbGluZVF1ZXJ5UGFyYW1zPz92ZSgpKTtuPWE7bGV0IGc9W107ciE9bnVsbCYmci5sZW5ndGg+MCYmci5mb3JFYWNoKGZ1bmN0aW9uKGQpe2lmKGQudHlwZT09PXAuQmluYXJ5U3RyZWFtKXtsZXQgaz1kLmRhdGEuZGF0YTtnLnB1c2goayl9ZWxzZSBpZihkLnR5cGU9PT1wLkJpbmFyeUZpbGUpe2xldCBrPWQuZGF0YS5kYXRhO2cucHVzaChrKX1lbHNlIGlmKGQudHlwZT09PXAuSW1hZ2Upe2xldCBrPWQuZGF0YTtrLmRhdGEhPT1udWxsJiZnLnB1c2goLi4uTnIoaykpfWVsc2UgaWYoZC50eXBlPT09cC5NZXNoKXtsZXQgaz1kLmRhdGE7Zy5wdXNoKC4uLk9yKGspKX1lbHNlIGlmKGQudHlwZT09PXAuUG9seURhdGEpe2xldCBrPWQuZGF0YTtnLnB1c2goLi4uUHIoaykpfX0pO2xldCB1PW8/LnBpcGVsaW5lQmFzZVVybD8/VHIoKSxzPXR5cGVvZiB1IT0ic3RyaW5nIiYmdHlwZW9mIHU/LmhyZWY8InUiP3UuaHJlZjp1LEk9ciE9bnVsbD9pdChyLFNyKGcsbz8ubm9Db3B5KSk6bnVsbCxCPWF3YWl0IGwucnVuUGlwZWxpbmUoZS50b1N0cmluZygpLHMsdCxBLEksbz8ucGlwZWxpbmVRdWVyeVBhcmFtcz8/dmUoKSk7cmV0dXJue3JldHVyblZhbHVlOkIucmV0dXJuVmFsdWUsc3Rkb3V0OkIuc3Rkb3V0LHN0ZGVycjpCLnN0ZGVycixvdXRwdXRzOkIub3V0cHV0cyx3ZWJXb3JrZXI6bn19dmFyIEU9SG87dmFyIHFvPW51bGw7ZnVuY3Rpb24gR3IoKXtyZXR1cm4gcW99dmFyIFlvPSIxLjMuMSIsTHI9WW87dmFyIFN0LEtvPWBodHRwczovL2Nkbi5qc2RlbGl2ci5uZXQvbnBtL0BpdGstd2FzbS9pbWFnZS1pb0Ake0xyfS9kaXN0L3BpcGVsaW5lc2A7ZnVuY3Rpb24gX0koZSl7U3Q9ZX1mdW5jdGlvbiB5KCl7aWYodHlwZW9mIFN0PCJ1IilyZXR1cm4gU3Q7bGV0IGU9WWUoKTtyZXR1cm4gdHlwZW9mIGU8InUiP2U6S299dmFyIE50LHZvPW51bGw7ZnVuY3Rpb24gSnIoZSl7TnQ9ZX1mdW5jdGlvbiBDKCl7aWYodHlwZW9mIE50PCJ1IilyZXR1cm4gTnQ7bGV0IGU9S2UoKTtyZXR1cm4gdHlwZW9mIGU8InUiP2U6dm99dmFyIG9lPW51bGw7YXN5bmMgZnVuY3Rpb24gTXIoKXtsZXQgZT1DKCksdD10eXBlb2YgZSE9InN0cmluZyImJnR5cGVvZiBlPy5ocmVmPCJ1Ij9lLmhyZWY6ZTtvZT1hd2FpdCBDZSh0KX1mdW5jdGlvbiB0cChlKXtvZT1lfWFzeW5jIGZ1bmN0aW9uIFEoKXtpZihvZSE9PW51bGwpcmV0dXJuIG9lLnRlcm1pbmF0ZWQmJmF3YWl0IE1yKCksb2U7bGV0IGU9R3IoKTtyZXR1cm4gZSE9PW51bGw/ZTooYXdhaXQgTXIoKSxvZSl9YXN5bmMgZnVuY3Rpb24gam8oZSl7bGV0IEE9KGF3YWl0IEguZ2V0KGAke2V9L2luZGV4Lmpzb25gLHtyZXNwb25zZVR5cGU6Impzb24ifSkpLmRhdGEscj1hd2FpdCBILmdldChgJHtlfS9kYXRhL2RhdGEucmF3YCx7cmVzcG9uc2VUeXBlOiJhcnJheWJ1ZmZlciJ9KTtBLmRhdGE9TyhBLmltYWdlVHlwZS5jb21wb25lbnRUeXBlLHIuZGF0YSk7bGV0IG89YXdhaXQgSC5nZXQoYCR7ZX0vZGF0YS9kaXJlY3Rpb24ucmF3YCx7cmVzcG9uc2VUeXBlOiJhcnJheWJ1ZmZlciJ9KTtyZXR1cm4gQS5kaXJlY3Rpb249TyhOLkZsb2F0NjQsby5kYXRhKSxBfXZhciBfbz1qbzt2YXIgem89bmV3IE1hcChbWyJpbWFnZS9qcGVnIiwianBlZyJdLFsiaW1hZ2UvcG5nIiwicG5nIl0sWyJpbWFnZS90aWZmIiwidGlmZiJdLFsiaW1hZ2UveC1tcy1ibXAiLCJibXAiXSxbImltYWdlL3gtYm1wIiwiYm1wIl0sWyJpbWFnZS9ibXAiLCJibXAiXSxbImFwcGxpY2F0aW9uL2RpY29tIiwiZ2RjbSJdXSksYWU9em87YXN5bmMgZnVuY3Rpb24gVm8oZSx0PXt9KXtsZXQgQT1be3R5cGU6cC5Kc29uQ29tcGF0aWJsZX0se3R5cGU6cC5JbWFnZX1dLHI9ZTtpZihlIGluc3RhbmNlb2YgRmlsZSl7bGV0IGQ9YXdhaXQgZS5hcnJheUJ1ZmZlcigpO3I9e3BhdGg6ZS5uYW1lLGRhdGE6bmV3IFVpbnQ4QXJyYXkoZCl9fWxldCBvPVt7dHlwZTpwLkJpbmFyeUZpbGUsZGF0YTpyfV0saT1bXSxuPXIucGF0aDtpLnB1c2gobiksaS5wdXNoKCIwIiksaS5wdXNoKCIxIiksaS5wdXNoKCItLW1lbW9yeS1pbyIpLHQuaW5mb3JtYXRpb25Pbmx5JiZ0LmluZm9ybWF0aW9uT25seSYmaS5wdXNoKCItLWluZm9ybWF0aW9uLW9ubHkiKTtsZXQgbD0icG5nLXJlYWQtaW1hZ2UiLGE9dD8ud2ViV29ya2VyO2E9PT12b2lkIDAmJihhPWF3YWl0IFEoKSk7bGV0e3dlYldvcmtlcjpnLHJldHVyblZhbHVlOnUsc3RkZXJyOnMsb3V0cHV0czpJfT1hd2FpdCBFKGwsaSxBLG8se3BpcGVsaW5lQmFzZVVybDp5KCkscGlwZWxpbmVXb3JrZXJVcmw6QygpLHdlYldvcmtlcjphLG5vQ29weTp0Py5ub0NvcHl9KTtpZih1IT09MCYmcyE9PSIiKXRocm93IG5ldyBFcnJvcihzKTtyZXR1cm57d2ViV29ya2VyOmcsY291bGRSZWFkOklbMF0/LmRhdGEsaW1hZ2U6SVsxXT8uZGF0YX19dmFyIE90PVZvO2FzeW5jIGZ1bmN0aW9uIFpvKGUsdCxBPXt9KXtsZXQgcj1be3R5cGU6cC5Kc29uQ29tcGF0aWJsZX0se3R5cGU6cC5CaW5hcnlGaWxlLGRhdGE6e3BhdGg6dCxkYXRhOm5ldyBVaW50OEFycmF5fX1dLG89W3t0eXBlOnAuSW1hZ2UsZGF0YTplfV0saT1bXTtpLnB1c2goIjAiKSxpLnB1c2goIjAiKTtsZXQgZj10O2kucHVzaChmKSxpLnB1c2goIi0tbWVtb3J5LWlvIiksQS5pbmZvcm1hdGlvbk9ubHkmJkEuaW5mb3JtYXRpb25Pbmx5JiZpLnB1c2goIi0taW5mb3JtYXRpb24tb25seSIpLEEudXNlQ29tcHJlc3Npb24mJkEudXNlQ29tcHJlc3Npb24mJmkucHVzaCgiLS11c2UtY29tcHJlc3Npb24iKTtsZXQgbD0icG5nLXdyaXRlLWltYWdlIixhPUE/LndlYldvcmtlcjthPT09dm9pZCAwJiYoYT1hd2FpdCBRKCkpO2xldHt3ZWJXb3JrZXI6ZyxyZXR1cm5WYWx1ZTp1LHN0ZGVycjpzLG91dHB1dHM6SX09YXdhaXQgRShsLGkscixvLHtwaXBlbGluZUJhc2VVcmw6eSgpLHBpcGVsaW5lV29ya2VyVXJsOkMoKSx3ZWJXb3JrZXI6YSxub0NvcHk6QT8ubm9Db3B5fSk7aWYodSE9PTAmJnMhPT0iIil0aHJvdyBuZXcgRXJyb3Iocyk7cmV0dXJue3dlYldvcmtlcjpnLGNvdWxkV3JpdGU6SVswXT8uZGF0YSxzZXJpYWxpemVkSW1hZ2U6SVsxXT8uZGF0YX19dmFyIFB0PVpvO2FzeW5jIGZ1bmN0aW9uIFhvKGUsdD17fSl7bGV0IEE9W3t0eXBlOnAuSnNvbkNvbXBhdGlibGV9LHt0eXBlOnAuSW1hZ2V9XSxyPWU7aWYoZSBpbnN0YW5jZW9mIEZpbGUpe2xldCBkPWF3YWl0IGUuYXJyYXlCdWZmZXIoKTtyPXtwYXRoOmUubmFtZSxkYXRhOm5ldyBVaW50OEFycmF5KGQpfX1sZXQgbz1be3R5cGU6cC5CaW5hcnlGaWxlLGRhdGE6cn1dLGk9W10sbj1yLnBhdGg7aS5wdXNoKG4pLGkucHVzaCgiMCIpLGkucHVzaCgiMSIpLGkucHVzaCgiLS1tZW1vcnktaW8iKSx0LmluZm9ybWF0aW9uT25seSYmdC5pbmZvcm1hdGlvbk9ubHkmJmkucHVzaCgiLS1pbmZvcm1hdGlvbi1vbmx5Iik7bGV0IGw9Im1ldGEtcmVhZC1pbWFnZSIsYT10Py53ZWJXb3JrZXI7YT09PXZvaWQgMCYmKGE9YXdhaXQgUSgpKTtsZXR7d2ViV29ya2VyOmcscmV0dXJuVmFsdWU6dSxzdGRlcnI6cyxvdXRwdXRzOkl9PWF3YWl0IEUobCxpLEEsbyx7cGlwZWxpbmVCYXNlVXJsOnkoKSxwaXBlbGluZVdvcmtlclVybDpDKCksd2ViV29ya2VyOmEsbm9Db3B5OnQ/Lm5vQ29weX0pO2lmKHUhPT0wJiZzIT09IiIpdGhyb3cgbmV3IEVycm9yKHMpO3JldHVybnt3ZWJXb3JrZXI6Zyxjb3VsZFJlYWQ6SVswXT8uZGF0YSxpbWFnZTpJWzFdPy5kYXRhfX12YXIgeHQ9WG87YXN5bmMgZnVuY3Rpb24gJG8oZSx0LEE9e30pe2xldCByPVt7dHlwZTpwLkpzb25Db21wYXRpYmxlfSx7dHlwZTpwLkJpbmFyeUZpbGUsZGF0YTp7cGF0aDp0LGRhdGE6bmV3IFVpbnQ4QXJyYXl9fV0sbz1be3R5cGU6cC5JbWFnZSxkYXRhOmV9XSxpPVtdO2kucHVzaCgiMCIpLGkucHVzaCgiMCIpO2xldCBmPXQ7aS5wdXNoKGYpLGkucHVzaCgiLS1tZW1vcnktaW8iKSxBLmluZm9ybWF0aW9uT25seSYmQS5pbmZvcm1hdGlvbk9ubHkmJmkucHVzaCgiLS1pbmZvcm1hdGlvbi1vbmx5IiksQS51c2VDb21wcmVzc2lvbiYmQS51c2VDb21wcmVzc2lvbiYmaS5wdXNoKCItLXVzZS1jb21wcmVzc2lvbiIpO2xldCBsPSJtZXRhLXdyaXRlLWltYWdlIixhPUE/LndlYldvcmtlcjthPT09dm9pZCAwJiYoYT1hd2FpdCBRKCkpO2xldHt3ZWJXb3JrZXI6ZyxyZXR1cm5WYWx1ZTp1LHN0ZGVycjpzLG91dHB1dHM6SX09YXdhaXQgRShsLGkscixvLHtwaXBlbGluZUJhc2VVcmw6eSgpLHBpcGVsaW5lV29ya2VyVXJsOkMoKSx3ZWJXb3JrZXI6YSxub0NvcHk6QT8ubm9Db3B5fSk7aWYodSE9PTAmJnMhPT0iIil0aHJvdyBuZXcgRXJyb3Iocyk7cmV0dXJue3dlYldvcmtlcjpnLGNvdWxkV3JpdGU6SVswXT8uZGF0YSxzZXJpYWxpemVkSW1hZ2U6SVsxXT8uZGF0YX19dmFyIFR0PSRvO2FzeW5jIGZ1bmN0aW9uIGVhKGUsdD17fSl7bGV0IEE9W3t0eXBlOnAuSnNvbkNvbXBhdGlibGV9LHt0eXBlOnAuSW1hZ2V9XSxyPWU7aWYoZSBpbnN0YW5jZW9mIEZpbGUpe2xldCBkPWF3YWl0IGUuYXJyYXlCdWZmZXIoKTtyPXtwYXRoOmUubmFtZSxkYXRhOm5ldyBVaW50OEFycmF5KGQpfX1sZXQgbz1be3R5cGU6cC5CaW5hcnlGaWxlLGRhdGE6cn1dLGk9W10sbj1yLnBhdGg7aS5wdXNoKG4pLGkucHVzaCgiMCIpLGkucHVzaCgiMSIpLGkucHVzaCgiLS1tZW1vcnktaW8iKSx0LmluZm9ybWF0aW9uT25seSYmdC5pbmZvcm1hdGlvbk9ubHkmJmkucHVzaCgiLS1pbmZvcm1hdGlvbi1vbmx5Iik7bGV0IGw9InRpZmYtcmVhZC1pbWFnZSIsYT10Py53ZWJXb3JrZXI7YT09PXZvaWQgMCYmKGE9YXdhaXQgUSgpKTtsZXR7d2ViV29ya2VyOmcscmV0dXJuVmFsdWU6dSxzdGRlcnI6cyxvdXRwdXRzOkl9PWF3YWl0IEUobCxpLEEsbyx7cGlwZWxpbmVCYXNlVXJsOnkoKSxwaXBlbGluZVdvcmtlclVybDpDKCksd2ViV29ya2VyOmEsbm9Db3B5OnQ/Lm5vQ29weX0pO2lmKHUhPT0wJiZzIT09IiIpdGhyb3cgbmV3IEVycm9yKHMpO3JldHVybnt3ZWJXb3JrZXI6Zyxjb3VsZFJlYWQ6SVswXT8uZGF0YSxpbWFnZTpJWzFdPy5kYXRhfX12YXIgR3Q9ZWE7YXN5bmMgZnVuY3Rpb24gdGEoZSx0LEE9e30pe2xldCByPVt7dHlwZTpwLkpzb25Db21wYXRpYmxlfSx7dHlwZTpwLkJpbmFyeUZpbGUsZGF0YTp7cGF0aDp0LGRhdGE6bmV3IFVpbnQ4QXJyYXl9fV0sbz1be3R5cGU6cC5JbWFnZSxkYXRhOmV9XSxpPVtdO2kucHVzaCgiMCIpLGkucHVzaCgiMCIpO2xldCBmPXQ7aS5wdXNoKGYpLGkucHVzaCgiLS1tZW1vcnktaW8iKSxBLmluZm9ybWF0aW9uT25seSYmQS5pbmZvcm1hdGlvbk9ubHkmJmkucHVzaCgiLS1pbmZvcm1hdGlvbi1vbmx5IiksQS51c2VDb21wcmVzc2lvbiYmQS51c2VDb21wcmVzc2lvbiYmaS5wdXNoKCItLXVzZS1jb21wcmVzc2lvbiIpO2xldCBsPSJ0aWZmLXdyaXRlLWltYWdlIixhPUE/LndlYldvcmtlcjthPT09dm9pZCAwJiYoYT1hd2FpdCBRKCkpO2xldHt3ZWJXb3JrZXI6ZyxyZXR1cm5WYWx1ZTp1LHN0ZGVycjpzLG91dHB1dHM6SX09YXdhaXQgRShsLGkscixvLHtwaXBlbGluZUJhc2VVcmw6eSgpLHBpcGVsaW5lV29ya2VyVXJsOkMoKSx3ZWJXb3JrZXI6YSxub0NvcHk6QT8ubm9Db3B5fSk7aWYodSE9PTAmJnMhPT0iIil0aHJvdyBuZXcgRXJyb3Iocyk7cmV0dXJue3dlYldvcmtlcjpnLGNvdWxkV3JpdGU6SVswXT8uZGF0YSxzZXJpYWxpemVkSW1hZ2U6SVsxXT8uZGF0YX19dmFyIEx0PXRhO2FzeW5jIGZ1bmN0aW9uIEFhKGUsdD17fSl7bGV0IEE9W3t0eXBlOnAuSnNvbkNvbXBhdGlibGV9LHt0eXBlOnAuSW1hZ2V9XSxyPWU7aWYoZSBpbnN0YW5jZW9mIEZpbGUpe2xldCBkPWF3YWl0IGUuYXJyYXlCdWZmZXIoKTtyPXtwYXRoOmUubmFtZSxkYXRhOm5ldyBVaW50OEFycmF5KGQpfX1sZXQgbz1be3R5cGU6cC5CaW5hcnlGaWxlLGRhdGE6cn1dLGk9W10sbj1yLnBhdGg7aS5wdXNoKG4pLGkucHVzaCgiMCIpLGkucHVzaCgiMSIpLGkucHVzaCgiLS1tZW1vcnktaW8iKSx0LmluZm9ybWF0aW9uT25seSYmdC5pbmZvcm1hdGlvbk9ubHkmJmkucHVzaCgiLS1pbmZvcm1hdGlvbi1vbmx5Iik7bGV0IGw9Im5pZnRpLXJlYWQtaW1hZ2UiLGE9dD8ud2ViV29ya2VyO2E9PT12b2lkIDAmJihhPWF3YWl0IFEoKSk7bGV0e3dlYldvcmtlcjpnLHJldHVyblZhbHVlOnUsc3RkZXJyOnMsb3V0cHV0czpJfT1hd2FpdCBFKGwsaSxBLG8se3BpcGVsaW5lQmFzZVVybDp5KCkscGlwZWxpbmVXb3JrZXJVcmw6QygpLHdlYldvcmtlcjphLG5vQ29weTp0Py5ub0NvcHl9KTtpZih1IT09MCYmcyE9PSIiKXRocm93IG5ldyBFcnJvcihzKTtyZXR1cm57d2ViV29ya2VyOmcsY291bGRSZWFkOklbMF0/LmRhdGEsaW1hZ2U6SVsxXT8uZGF0YX19dmFyIEp0PUFhO2FzeW5jIGZ1bmN0aW9uIHJhKGUsdCxBPXt9KXtsZXQgcj1be3R5cGU6cC5Kc29uQ29tcGF0aWJsZX0se3R5cGU6cC5CaW5hcnlGaWxlLGRhdGE6e3BhdGg6dCxkYXRhOm5ldyBVaW50OEFycmF5fX1dLG89W3t0eXBlOnAuSW1hZ2UsZGF0YTplfV0saT1bXTtpLnB1c2goIjAiKSxpLnB1c2goIjAiKTtsZXQgZj10O2kucHVzaChmKSxpLnB1c2goIi0tbWVtb3J5LWlvIiksQS5pbmZvcm1hdGlvbk9ubHkmJkEuaW5mb3JtYXRpb25Pbmx5JiZpLnB1c2goIi0taW5mb3JtYXRpb24tb25seSIpLEEudXNlQ29tcHJlc3Npb24mJkEudXNlQ29tcHJlc3Npb24mJmkucHVzaCgiLS11c2UtY29tcHJlc3Npb24iKTtsZXQgbD0ibmlmdGktd3JpdGUtaW1hZ2UiLGE9QT8ud2ViV29ya2VyO2E9PT12b2lkIDAmJihhPWF3YWl0IFEoKSk7bGV0e3dlYldvcmtlcjpnLHJldHVyblZhbHVlOnUsc3RkZXJyOnMsb3V0cHV0czpJfT1hd2FpdCBFKGwsaSxyLG8se3BpcGVsaW5lQmFzZVVybDp5KCkscGlwZWxpbmVXb3JrZXJVcmw6QygpLHdlYldvcmtlcjphLG5vQ29weTpBPy5ub0NvcHl9KTtpZih1IT09MCYmcyE9PSIiKXRocm93IG5ldyBFcnJvcihzKTtyZXR1cm57d2ViV29ya2VyOmcsY291bGRXcml0ZTpJWzBdPy5kYXRhLHNlcmlhbGl6ZWRJbWFnZTpJWzFdPy5kYXRhfX12YXIgTXQ9cmE7YXN5bmMgZnVuY3Rpb24gaWEoZSx0PXt9KXtsZXQgQT1be3R5cGU6cC5Kc29uQ29tcGF0aWJsZX0se3R5cGU6cC5JbWFnZX1dLHI9ZTtpZihlIGluc3RhbmNlb2YgRmlsZSl7bGV0IGQ9YXdhaXQgZS5hcnJheUJ1ZmZlcigpO3I9e3BhdGg6ZS5uYW1lLGRhdGE6bmV3IFVpbnQ4QXJyYXkoZCl9fWxldCBvPVt7dHlwZTpwLkJpbmFyeUZpbGUsZGF0YTpyfV0saT1bXSxuPXIucGF0aDtpLnB1c2gobiksaS5wdXNoKCIwIiksaS5wdXNoKCIxIiksaS5wdXNoKCItLW1lbW9yeS1pbyIpLHQuaW5mb3JtYXRpb25Pbmx5JiZ0LmluZm9ybWF0aW9uT25seSYmaS5wdXNoKCItLWluZm9ybWF0aW9uLW9ubHkiKTtsZXQgbD0ianBlZy1yZWFkLWltYWdlIixhPXQ/LndlYldvcmtlcjthPT09dm9pZCAwJiYoYT1hd2FpdCBRKCkpO2xldHt3ZWJXb3JrZXI6ZyxyZXR1cm5WYWx1ZTp1LHN0ZGVycjpzLG91dHB1dHM6SX09YXdhaXQgRShsLGksQSxvLHtwaXBlbGluZUJhc2VVcmw6eSgpLHBpcGVsaW5lV29ya2VyVXJsOkMoKSx3ZWJXb3JrZXI6YSxub0NvcHk6dD8ubm9Db3B5fSk7aWYodSE9PTAmJnMhPT0iIil0aHJvdyBuZXcgRXJyb3Iocyk7cmV0dXJue3dlYldvcmtlcjpnLGNvdWxkUmVhZDpJWzBdPy5kYXRhLGltYWdlOklbMV0/LmRhdGF9fXZhciBIdD1pYTthc3luYyBmdW5jdGlvbiBvYShlLHQsQT17fSl7bGV0IHI9W3t0eXBlOnAuSnNvbkNvbXBhdGlibGV9LHt0eXBlOnAuQmluYXJ5RmlsZSxkYXRhOntwYXRoOnQsZGF0YTpuZXcgVWludDhBcnJheX19XSxvPVt7dHlwZTpwLkltYWdlLGRhdGE6ZX1dLGk9W107aS5wdXNoKCIwIiksaS5wdXNoKCIwIik7bGV0IGY9dDtpLnB1c2goZiksaS5wdXNoKCItLW1lbW9yeS1pbyIpLEEuaW5mb3JtYXRpb25Pbmx5JiZBLmluZm9ybWF0aW9uT25seSYmaS5wdXNoKCItLWluZm9ybWF0aW9uLW9ubHkiKSxBLnVzZUNvbXByZXNzaW9uJiZBLnVzZUNvbXByZXNzaW9uJiZpLnB1c2goIi0tdXNlLWNvbXByZXNzaW9uIik7bGV0IGw9ImpwZWctd3JpdGUtaW1hZ2UiLGE9QT8ud2ViV29ya2VyO2E9PT12b2lkIDAmJihhPWF3YWl0IFEoKSk7bGV0e3dlYldvcmtlcjpnLHJldHVyblZhbHVlOnUsc3RkZXJyOnMsb3V0cHV0czpJfT1hd2FpdCBFKGwsaSxyLG8se3BpcGVsaW5lQmFzZVVybDp5KCkscGlwZWxpbmVXb3JrZXJVcmw6QygpLHdlYldvcmtlcjphLG5vQ29weTpBPy5ub0NvcHl9KTtpZih1IT09MCYmcyE9PSIiKXRocm93IG5ldyBFcnJvcihzKTtyZXR1cm57d2ViV29ya2VyOmcsY291bGRXcml0ZTpJWzBdPy5kYXRhLHNlcmlhbGl6ZWRJbWFnZTpJWzFdPy5kYXRhfX12YXIgcXQ9b2E7YXN5bmMgZnVuY3Rpb24gYWEoZSx0PXt9KXtsZXQgQT1be3R5cGU6cC5Kc29uQ29tcGF0aWJsZX0se3R5cGU6cC5JbWFnZX1dLHI9ZTtpZihlIGluc3RhbmNlb2YgRmlsZSl7bGV0IGQ9YXdhaXQgZS5hcnJheUJ1ZmZlcigpO3I9e3BhdGg6ZS5uYW1lLGRhdGE6bmV3IFVpbnQ4QXJyYXkoZCl9fWxldCBvPVt7dHlwZTpwLkJpbmFyeUZpbGUsZGF0YTpyfV0saT1bXSxuPXIucGF0aDtpLnB1c2gobiksaS5wdXNoKCIwIiksaS5wdXNoKCIxIiksaS5wdXNoKCItLW1lbW9yeS1pbyIpLHQuaW5mb3JtYXRpb25Pbmx5JiZ0LmluZm9ybWF0aW9uT25seSYmaS5wdXNoKCItLWluZm9ybWF0aW9uLW9ubHkiKTtsZXQgbD0ibnJyZC1yZWFkLWltYWdlIixhPXQ/LndlYldvcmtlcjthPT09dm9pZCAwJiYoYT1hd2FpdCBRKCkpO2xldHt3ZWJXb3JrZXI6ZyxyZXR1cm5WYWx1ZTp1LHN0ZGVycjpzLG91dHB1dHM6SX09YXdhaXQgRShsLGksQSxvLHtwaXBlbGluZUJhc2VVcmw6eSgpLHBpcGVsaW5lV29ya2VyVXJsOkMoKSx3ZWJXb3JrZXI6YSxub0NvcHk6dD8ubm9Db3B5fSk7aWYodSE9PTAmJnMhPT0iIil0aHJvdyBuZXcgRXJyb3Iocyk7cmV0dXJue3dlYldvcmtlcjpnLGNvdWxkUmVhZDpJWzBdPy5kYXRhLGltYWdlOklbMV0/LmRhdGF9fXZhciBZdD1hYTthc3luYyBmdW5jdGlvbiBuYShlLHQsQT17fSl7bGV0IHI9W3t0eXBlOnAuSnNvbkNvbXBhdGlibGV9LHt0eXBlOnAuQmluYXJ5RmlsZSxkYXRhOntwYXRoOnQsZGF0YTpuZXcgVWludDhBcnJheX19XSxvPVt7dHlwZTpwLkltYWdlLGRhdGE6ZX1dLGk9W107aS5wdXNoKCIwIiksaS5wdXNoKCIwIik7bGV0IGY9dDtpLnB1c2goZiksaS5wdXNoKCItLW1lbW9yeS1pbyIpLEEuaW5mb3JtYXRpb25Pbmx5JiZBLmluZm9ybWF0aW9uT25seSYmaS5wdXNoKCItLWluZm9ybWF0aW9uLW9ubHkiKSxBLnVzZUNvbXByZXNzaW9uJiZBLnVzZUNvbXByZXNzaW9uJiZpLnB1c2goIi0tdXNlLWNvbXByZXNzaW9uIik7bGV0IGw9Im5ycmQtd3JpdGUtaW1hZ2UiLGE9QT8ud2ViV29ya2VyO2E9PT12b2lkIDAmJihhPWF3YWl0IFEoKSk7bGV0e3dlYldvcmtlcjpnLHJldHVyblZhbHVlOnUsc3RkZXJyOnMsb3V0cHV0czpJfT1hd2FpdCBFKGwsaSxyLG8se3BpcGVsaW5lQmFzZVVybDp5KCkscGlwZWxpbmVXb3JrZXJVcmw6QygpLHdlYldvcmtlcjphLG5vQ29weTpBPy5ub0NvcHl9KTtpZih1IT09MCYmcyE9PSIiKXRocm93IG5ldyBFcnJvcihzKTtyZXR1cm57d2ViV29ya2VyOmcsY291bGRXcml0ZTpJWzBdPy5kYXRhLHNlcmlhbGl6ZWRJbWFnZTpJWzFdPy5kYXRhfX12YXIgS3Q9bmE7YXN5bmMgZnVuY3Rpb24gc2EoZSx0PXt9KXtsZXQgQT1be3R5cGU6cC5Kc29uQ29tcGF0aWJsZX0se3R5cGU6cC5JbWFnZX1dLHI9ZTtpZihlIGluc3RhbmNlb2YgRmlsZSl7bGV0IGQ9YXdhaXQgZS5hcnJheUJ1ZmZlcigpO3I9e3BhdGg6ZS5uYW1lLGRhdGE6bmV3IFVpbnQ4QXJyYXkoZCl9fWxldCBvPVt7dHlwZTpwLkJpbmFyeUZpbGUsZGF0YTpyfV0saT1bXSxuPXIucGF0aDtpLnB1c2gobiksaS5wdXNoKCIwIiksaS5wdXNoKCIxIiksaS5wdXNoKCItLW1lbW9yeS1pbyIpLHQuaW5mb3JtYXRpb25Pbmx5JiZ0LmluZm9ybWF0aW9uT25seSYmaS5wdXNoKCItLWluZm9ybWF0aW9uLW9ubHkiKTtsZXQgbD0idnRrLXJlYWQtaW1hZ2UiLGE9dD8ud2ViV29ya2VyO2E9PT12b2lkIDAmJihhPWF3YWl0IFEoKSk7bGV0e3dlYldvcmtlcjpnLHJldHVyblZhbHVlOnUsc3RkZXJyOnMsb3V0cHV0czpJfT1hd2FpdCBFKGwsaSxBLG8se3BpcGVsaW5lQmFzZVVybDp5KCkscGlwZWxpbmVXb3JrZXJVcmw6QygpLHdlYldvcmtlcjphLG5vQ29weTp0Py5ub0NvcHl9KTtpZih1IT09MCYmcyE9PSIiKXRocm93IG5ldyBFcnJvcihzKTtyZXR1cm57d2ViV29ya2VyOmcsY291bGRSZWFkOklbMF0/LmRhdGEsaW1hZ2U6SVsxXT8uZGF0YX19dmFyIHZ0PXNhO2FzeW5jIGZ1bmN0aW9uIGdhKGUsdCxBPXt9KXtsZXQgcj1be3R5cGU6cC5Kc29uQ29tcGF0aWJsZX0se3R5cGU6cC5CaW5hcnlGaWxlLGRhdGE6e3BhdGg6dCxkYXRhOm5ldyBVaW50OEFycmF5fX1dLG89W3t0eXBlOnAuSW1hZ2UsZGF0YTplfV0saT1bXTtpLnB1c2goIjAiKSxpLnB1c2goIjAiKTtsZXQgZj10O2kucHVzaChmKSxpLnB1c2goIi0tbWVtb3J5LWlvIiksQS5pbmZvcm1hdGlvbk9ubHkmJkEuaW5mb3JtYXRpb25Pbmx5JiZpLnB1c2goIi0taW5mb3JtYXRpb24tb25seSIpLEEudXNlQ29tcHJlc3Npb24mJkEudXNlQ29tcHJlc3Npb24mJmkucHVzaCgiLS11c2UtY29tcHJlc3Npb24iKTtsZXQgbD0idnRrLXdyaXRlLWltYWdlIixhPUE/LndlYldvcmtlcjthPT09dm9pZCAwJiYoYT1hd2FpdCBRKCkpO2xldHt3ZWJXb3JrZXI6ZyxyZXR1cm5WYWx1ZTp1LHN0ZGVycjpzLG91dHB1dHM6SX09YXdhaXQgRShsLGkscixvLHtwaXBlbGluZUJhc2VVcmw6eSgpLHBpcGVsaW5lV29ya2VyVXJsOkMoKSx3ZWJXb3JrZXI6YSxub0NvcHk6QT8ubm9Db3B5fSk7aWYodSE9PTAmJnMhPT0iIil0aHJvdyBuZXcgRXJyb3Iocyk7cmV0dXJue3dlYldvcmtlcjpnLGNvdWxkV3JpdGU6SVswXT8uZGF0YSxzZXJpYWxpemVkSW1hZ2U6SVsxXT8uZGF0YX19dmFyIGp0PWdhO2FzeW5jIGZ1bmN0aW9uIGxhKGUsdD17fSl7bGV0IEE9W3t0eXBlOnAuSnNvbkNvbXBhdGlibGV9LHt0eXBlOnAuSW1hZ2V9XSxyPWU7aWYoZSBpbnN0YW5jZW9mIEZpbGUpe2xldCBkPWF3YWl0IGUuYXJyYXlCdWZmZXIoKTtyPXtwYXRoOmUubmFtZSxkYXRhOm5ldyBVaW50OEFycmF5KGQpfX1sZXQgbz1be3R5cGU6cC5CaW5hcnlGaWxlLGRhdGE6cn1dLGk9W10sbj1yLnBhdGg7aS5wdXNoKG4pLGkucHVzaCgiMCIpLGkucHVzaCgiMSIpLGkucHVzaCgiLS1tZW1vcnktaW8iKSx0LmluZm9ybWF0aW9uT25seSYmdC5pbmZvcm1hdGlvbk9ubHkmJmkucHVzaCgiLS1pbmZvcm1hdGlvbi1vbmx5Iik7bGV0IGw9ImJtcC1yZWFkLWltYWdlIixhPXQ/LndlYldvcmtlcjthPT09dm9pZCAwJiYoYT1hd2FpdCBRKCkpO2xldHt3ZWJXb3JrZXI6ZyxyZXR1cm5WYWx1ZTp1LHN0ZGVycjpzLG91dHB1dHM6SX09YXdhaXQgRShsLGksQSxvLHtwaXBlbGluZUJhc2VVcmw6eSgpLHBpcGVsaW5lV29ya2VyVXJsOkMoKSx3ZWJXb3JrZXI6YSxub0NvcHk6dD8ubm9Db3B5fSk7aWYodSE9PTAmJnMhPT0iIil0aHJvdyBuZXcgRXJyb3Iocyk7cmV0dXJue3dlYldvcmtlcjpnLGNvdWxkUmVhZDpJWzBdPy5kYXRhLGltYWdlOklbMV0/LmRhdGF9fXZhciBfdD1sYTthc3luYyBmdW5jdGlvbiBJYShlLHQsQT17fSl7bGV0IHI9W3t0eXBlOnAuSnNvbkNvbXBhdGlibGV9LHt0eXBlOnAuQmluYXJ5RmlsZSxkYXRhOntwYXRoOnQsZGF0YTpuZXcgVWludDhBcnJheX19XSxvPVt7dHlwZTpwLkltYWdlLGRhdGE6ZX1dLGk9W107aS5wdXNoKCIwIiksaS5wdXNoKCIwIik7bGV0IGY9dDtpLnB1c2goZiksaS5wdXNoKCItLW1lbW9yeS1pbyIpLEEuaW5mb3JtYXRpb25Pbmx5JiZBLmluZm9ybWF0aW9uT25seSYmaS5wdXNoKCItLWluZm9ybWF0aW9uLW9ubHkiKSxBLnVzZUNvbXByZXNzaW9uJiZBLnVzZUNvbXByZXNzaW9uJiZpLnB1c2goIi0tdXNlLWNvbXByZXNzaW9uIik7bGV0IGw9ImJtcC13cml0ZS1pbWFnZSIsYT1BPy53ZWJXb3JrZXI7YT09PXZvaWQgMCYmKGE9YXdhaXQgUSgpKTtsZXR7d2ViV29ya2VyOmcscmV0dXJuVmFsdWU6dSxzdGRlcnI6cyxvdXRwdXRzOkl9PWF3YWl0IEUobCxpLHIsbyx7cGlwZWxpbmVCYXNlVXJsOnkoKSxwaXBlbGluZVdvcmtlclVybDpDKCksd2ViV29ya2VyOmEsbm9Db3B5OkE/Lm5vQ29weX0pO2lmKHUhPT0wJiZzIT09IiIpdGhyb3cgbmV3IEVycm9yKHMpO3JldHVybnt3ZWJXb3JrZXI6Zyxjb3VsZFdyaXRlOklbMF0/LmRhdGEsc2VyaWFsaXplZEltYWdlOklbMV0/LmRhdGF9fXZhciB6dD1JYTthc3luYyBmdW5jdGlvbiBwYShlLHQ9e30pe2xldCBBPVt7dHlwZTpwLkpzb25Db21wYXRpYmxlfSx7dHlwZTpwLkltYWdlfV0scj1lO2lmKGUgaW5zdGFuY2VvZiBGaWxlKXtsZXQgZD1hd2FpdCBlLmFycmF5QnVmZmVyKCk7cj17cGF0aDplLm5hbWUsZGF0YTpuZXcgVWludDhBcnJheShkKX19bGV0IG89W3t0eXBlOnAuQmluYXJ5RmlsZSxkYXRhOnJ9XSxpPVtdLG49ci5wYXRoO2kucHVzaChuKSxpLnB1c2goIjAiKSxpLnB1c2goIjEiKSxpLnB1c2goIi0tbWVtb3J5LWlvIiksdC5pbmZvcm1hdGlvbk9ubHkmJnQuaW5mb3JtYXRpb25Pbmx5JiZpLnB1c2goIi0taW5mb3JtYXRpb24tb25seSIpO2xldCBsPSJoZGY1LXJlYWQtaW1hZ2UiLGE9dD8ud2ViV29ya2VyO2E9PT12b2lkIDAmJihhPWF3YWl0IFEoKSk7bGV0e3dlYldvcmtlcjpnLHJldHVyblZhbHVlOnUsc3RkZXJyOnMsb3V0cHV0czpJfT1hd2FpdCBFKGwsaSxBLG8se3BpcGVsaW5lQmFzZVVybDp5KCkscGlwZWxpbmVXb3JrZXJVcmw6QygpLHdlYldvcmtlcjphLG5vQ29weTp0Py5ub0NvcHl9KTtpZih1IT09MCYmcyE9PSIiKXRocm93IG5ldyBFcnJvcihzKTtyZXR1cm57d2ViV29ya2VyOmcsY291bGRSZWFkOklbMF0/LmRhdGEsaW1hZ2U6SVsxXT8uZGF0YX19dmFyIFZ0PXBhO2FzeW5jIGZ1bmN0aW9uIG1hKGUsdCxBPXt9KXtsZXQgcj1be3R5cGU6cC5Kc29uQ29tcGF0aWJsZX0se3R5cGU6cC5CaW5hcnlGaWxlLGRhdGE6e3BhdGg6dCxkYXRhOm5ldyBVaW50OEFycmF5fX1dLG89W3t0eXBlOnAuSW1hZ2UsZGF0YTplfV0saT1bXTtpLnB1c2goIjAiKSxpLnB1c2goIjAiKTtsZXQgZj10O2kucHVzaChmKSxpLnB1c2goIi0tbWVtb3J5LWlvIiksQS5pbmZvcm1hdGlvbk9ubHkmJkEuaW5mb3JtYXRpb25Pbmx5JiZpLnB1c2goIi0taW5mb3JtYXRpb24tb25seSIpLEEudXNlQ29tcHJlc3Npb24mJkEudXNlQ29tcHJlc3Npb24mJmkucHVzaCgiLS11c2UtY29tcHJlc3Npb24iKTtsZXQgbD0iaGRmNS13cml0ZS1pbWFnZSIsYT1BPy53ZWJXb3JrZXI7YT09PXZvaWQgMCYmKGE9YXdhaXQgUSgpKTtsZXR7d2ViV29ya2VyOmcscmV0dXJuVmFsdWU6dSxzdGRlcnI6cyxvdXRwdXRzOkl9PWF3YWl0IEUobCxpLHIsbyx7cGlwZWxpbmVCYXNlVXJsOnkoKSxwaXBlbGluZVdvcmtlclVybDpDKCksd2ViV29ya2VyOmEsbm9Db3B5OkE/Lm5vQ29weX0pO2lmKHUhPT0wJiZzIT09IiIpdGhyb3cgbmV3IEVycm9yKHMpO3JldHVybnt3ZWJXb3JrZXI6Zyxjb3VsZFdyaXRlOklbMF0/LmRhdGEsc2VyaWFsaXplZEltYWdlOklbMV0/LmRhdGF9fXZhciBadD1tYTthc3luYyBmdW5jdGlvbiB1YShlLHQ9e30pe2xldCBBPVt7dHlwZTpwLkpzb25Db21wYXRpYmxlfSx7dHlwZTpwLkltYWdlfV0scj1lO2lmKGUgaW5zdGFuY2VvZiBGaWxlKXtsZXQgZD1hd2FpdCBlLmFycmF5QnVmZmVyKCk7cj17cGF0aDplLm5hbWUsZGF0YTpuZXcgVWludDhBcnJheShkKX19bGV0IG89W3t0eXBlOnAuQmluYXJ5RmlsZSxkYXRhOnJ9XSxpPVtdLG49ci5wYXRoO2kucHVzaChuKSxpLnB1c2goIjAiKSxpLnB1c2goIjEiKSxpLnB1c2goIi0tbWVtb3J5LWlvIiksdC5pbmZvcm1hdGlvbk9ubHkmJnQuaW5mb3JtYXRpb25Pbmx5JiZpLnB1c2goIi0taW5mb3JtYXRpb24tb25seSIpO2xldCBsPSJtaW5jLXJlYWQtaW1hZ2UiLGE9dD8ud2ViV29ya2VyO2E9PT12b2lkIDAmJihhPWF3YWl0IFEoKSk7bGV0e3dlYldvcmtlcjpnLHJldHVyblZhbHVlOnUsc3RkZXJyOnMsb3V0cHV0czpJfT1hd2FpdCBFKGwsaSxBLG8se3BpcGVsaW5lQmFzZVVybDp5KCkscGlwZWxpbmVXb3JrZXJVcmw6QygpLHdlYldvcmtlcjphLG5vQ29weTp0Py5ub0NvcHl9KTtpZih1IT09MCYmcyE9PSIiKXRocm93IG5ldyBFcnJvcihzKTtyZXR1cm57d2ViV29ya2VyOmcsY291bGRSZWFkOklbMF0/LmRhdGEsaW1hZ2U6SVsxXT8uZGF0YX19dmFyIFh0PXVhO2FzeW5jIGZ1bmN0aW9uIGZhKGUsdCxBPXt9KXtsZXQgcj1be3R5cGU6cC5Kc29uQ29tcGF0aWJsZX0se3R5cGU6cC5CaW5hcnlGaWxlLGRhdGE6e3BhdGg6dCxkYXRhOm5ldyBVaW50OEFycmF5fX1dLG89W3t0eXBlOnAuSW1hZ2UsZGF0YTplfV0saT1bXTtpLnB1c2goIjAiKSxpLnB1c2goIjAiKTtsZXQgZj10O2kucHVzaChmKSxpLnB1c2goIi0tbWVtb3J5LWlvIiksQS5pbmZvcm1hdGlvbk9ubHkmJkEuaW5mb3JtYXRpb25Pbmx5JiZpLnB1c2goIi0taW5mb3JtYXRpb24tb25seSIpLEEudXNlQ29tcHJlc3Npb24mJkEudXNlQ29tcHJlc3Npb24mJmkucHVzaCgiLS11c2UtY29tcHJlc3Npb24iKTtsZXQgbD0ibWluYy13cml0ZS1pbWFnZSIsYT1BPy53ZWJXb3JrZXI7YT09PXZvaWQgMCYmKGE9YXdhaXQgUSgpKTtsZXR7d2ViV29ya2VyOmcscmV0dXJuVmFsdWU6dSxzdGRlcnI6cyxvdXRwdXRzOkl9PWF3YWl0IEUobCxpLHIsbyx7cGlwZWxpbmVCYXNlVXJsOnkoKSxwaXBlbGluZVdvcmtlclVybDpDKCksd2ViV29ya2VyOmEsbm9Db3B5OkE/Lm5vQ29weX0pO2lmKHUhPT0wJiZzIT09IiIpdGhyb3cgbmV3IEVycm9yKHMpO3JldHVybnt3ZWJXb3JrZXI6Zyxjb3VsZFdyaXRlOklbMF0/LmRhdGEsc2VyaWFsaXplZEltYWdlOklbMV0/LmRhdGF9fXZhciAkdD1mYTthc3luYyBmdW5jdGlvbiBjYShlLHQ9e30pe2xldCBBPVt7dHlwZTpwLkpzb25Db21wYXRpYmxlfSx7dHlwZTpwLkltYWdlfV0scj1lO2lmKGUgaW5zdGFuY2VvZiBGaWxlKXtsZXQgZD1hd2FpdCBlLmFycmF5QnVmZmVyKCk7cj17cGF0aDplLm5hbWUsZGF0YTpuZXcgVWludDhBcnJheShkKX19bGV0IG89W3t0eXBlOnAuQmluYXJ5RmlsZSxkYXRhOnJ9XSxpPVtdLG49ci5wYXRoO2kucHVzaChuKSxpLnB1c2goIjAiKSxpLnB1c2goIjEiKSxpLnB1c2goIi0tbWVtb3J5LWlvIiksdC5pbmZvcm1hdGlvbk9ubHkmJnQuaW5mb3JtYXRpb25Pbmx5JiZpLnB1c2goIi0taW5mb3JtYXRpb24tb25seSIpO2xldCBsPSJtcmMtcmVhZC1pbWFnZSIsYT10Py53ZWJXb3JrZXI7YT09PXZvaWQgMCYmKGE9YXdhaXQgUSgpKTtsZXR7d2ViV29ya2VyOmcscmV0dXJuVmFsdWU6dSxzdGRlcnI6cyxvdXRwdXRzOkl9PWF3YWl0IEUobCxpLEEsbyx7cGlwZWxpbmVCYXNlVXJsOnkoKSxwaXBlbGluZVdvcmtlclVybDpDKCksd2ViV29ya2VyOmEsbm9Db3B5OnQ/Lm5vQ29weX0pO2lmKHUhPT0wJiZzIT09IiIpdGhyb3cgbmV3IEVycm9yKHMpO3JldHVybnt3ZWJXb3JrZXI6Zyxjb3VsZFJlYWQ6SVswXT8uZGF0YSxpbWFnZTpJWzFdPy5kYXRhfX12YXIgZUE9Y2E7YXN5bmMgZnVuY3Rpb24gZGEoZSx0LEE9e30pe2xldCByPVt7dHlwZTpwLkpzb25Db21wYXRpYmxlfSx7dHlwZTpwLkJpbmFyeUZpbGUsZGF0YTp7cGF0aDp0LGRhdGE6bmV3IFVpbnQ4QXJyYXl9fV0sbz1be3R5cGU6cC5JbWFnZSxkYXRhOmV9XSxpPVtdO2kucHVzaCgiMCIpLGkucHVzaCgiMCIpO2xldCBmPXQ7aS5wdXNoKGYpLGkucHVzaCgiLS1tZW1vcnktaW8iKSxBLmluZm9ybWF0aW9uT25seSYmQS5pbmZvcm1hdGlvbk9ubHkmJmkucHVzaCgiLS1pbmZvcm1hdGlvbi1vbmx5IiksQS51c2VDb21wcmVzc2lvbiYmQS51c2VDb21wcmVzc2lvbiYmaS5wdXNoKCItLXVzZS1jb21wcmVzc2lvbiIpO2xldCBsPSJtcmMtd3JpdGUtaW1hZ2UiLGE9QT8ud2ViV29ya2VyO2E9PT12b2lkIDAmJihhPWF3YWl0IFEoKSk7bGV0e3dlYldvcmtlcjpnLHJldHVyblZhbHVlOnUsc3RkZXJyOnMsb3V0cHV0czpJfT1hd2FpdCBFKGwsaSxyLG8se3BpcGVsaW5lQmFzZVVybDp5KCkscGlwZWxpbmVXb3JrZXJVcmw6QygpLHdlYldvcmtlcjphLG5vQ29weTpBPy5ub0NvcHl9KTtpZih1IT09MCYmcyE9PSIiKXRocm93IG5ldyBFcnJvcihzKTtyZXR1cm57d2ViV29ya2VyOmcsY291bGRXcml0ZTpJWzBdPy5kYXRhLHNlcmlhbGl6ZWRJbWFnZTpJWzFdPy5kYXRhfX12YXIgdEE9ZGE7YXN5bmMgZnVuY3Rpb24gQmEoZSx0PXt9KXtsZXQgQT1be3R5cGU6cC5Kc29uQ29tcGF0aWJsZX0se3R5cGU6cC5JbWFnZX1dLHI9ZTtpZihlIGluc3RhbmNlb2YgRmlsZSl7bGV0IGQ9YXdhaXQgZS5hcnJheUJ1ZmZlcigpO3I9e3BhdGg6ZS5uYW1lLGRhdGE6bmV3IFVpbnQ4QXJyYXkoZCl9fWxldCBvPVt7dHlwZTpwLkJpbmFyeUZpbGUsZGF0YTpyfV0saT1bXSxuPXIucGF0aDtpLnB1c2gobiksaS5wdXNoKCIwIiksaS5wdXNoKCIxIiksaS5wdXNoKCItLW1lbW9yeS1pbyIpLHQuaW5mb3JtYXRpb25Pbmx5JiZ0LmluZm9ybWF0aW9uT25seSYmaS5wdXNoKCItLWluZm9ybWF0aW9uLW9ubHkiKTtsZXQgbD0ibHNtLXJlYWQtaW1hZ2UiLGE9dD8ud2ViV29ya2VyO2E9PT12b2lkIDAmJihhPWF3YWl0IFEoKSk7bGV0e3dlYldvcmtlcjpnLHJldHVyblZhbHVlOnUsc3RkZXJyOnMsb3V0cHV0czpJfT1hd2FpdCBFKGwsaSxBLG8se3BpcGVsaW5lQmFzZVVybDp5KCkscGlwZWxpbmVXb3JrZXJVcmw6QygpLHdlYldvcmtlcjphLG5vQ29weTp0Py5ub0NvcHl9KTtpZih1IT09MCYmcyE9PSIiKXRocm93IG5ldyBFcnJvcihzKTtyZXR1cm57d2ViV29ya2VyOmcsY291bGRSZWFkOklbMF0/LmRhdGEsaW1hZ2U6SVsxXT8uZGF0YX19dmFyIEFBPUJhO2FzeW5jIGZ1bmN0aW9uIENhKGUsdCxBPXt9KXtsZXQgcj1be3R5cGU6cC5Kc29uQ29tcGF0aWJsZX0se3R5cGU6cC5CaW5hcnlGaWxlLGRhdGE6e3BhdGg6dCxkYXRhOm5ldyBVaW50OEFycmF5fX1dLG89W3t0eXBlOnAuSW1hZ2UsZGF0YTplfV0saT1bXTtpLnB1c2goIjAiKSxpLnB1c2goIjAiKTtsZXQgZj10O2kucHVzaChmKSxpLnB1c2goIi0tbWVtb3J5LWlvIiksQS5pbmZvcm1hdGlvbk9ubHkmJkEuaW5mb3JtYXRpb25Pbmx5JiZpLnB1c2goIi0taW5mb3JtYXRpb24tb25seSIpLEEudXNlQ29tcHJlc3Npb24mJkEudXNlQ29tcHJlc3Npb24mJmkucHVzaCgiLS11c2UtY29tcHJlc3Npb24iKTtsZXQgbD0ibHNtLXdyaXRlLWltYWdlIixhPUE/LndlYldvcmtlcjthPT09dm9pZCAwJiYoYT1hd2FpdCBRKCkpO2xldHt3ZWJXb3JrZXI6ZyxyZXR1cm5WYWx1ZTp1LHN0ZGVycjpzLG91dHB1dHM6SX09YXdhaXQgRShsLGkscixvLHtwaXBlbGluZUJhc2VVcmw6eSgpLHBpcGVsaW5lV29ya2VyVXJsOkMoKSx3ZWJXb3JrZXI6YSxub0NvcHk6QT8ubm9Db3B5fSk7aWYodSE9PTAmJnMhPT0iIil0aHJvdyBuZXcgRXJyb3Iocyk7cmV0dXJue3dlYldvcmtlcjpnLGNvdWxkV3JpdGU6SVswXT8uZGF0YSxzZXJpYWxpemVkSW1hZ2U6SVsxXT8uZGF0YX19dmFyIHJBPUNhO2FzeW5jIGZ1bmN0aW9uIEVhKGUsdD17fSl7bGV0IEE9W3t0eXBlOnAuSnNvbkNvbXBhdGlibGV9LHt0eXBlOnAuSW1hZ2V9XSxyPWU7aWYoZSBpbnN0YW5jZW9mIEZpbGUpe2xldCBkPWF3YWl0IGUuYXJyYXlCdWZmZXIoKTtyPXtwYXRoOmUubmFtZSxkYXRhOm5ldyBVaW50OEFycmF5KGQpfX1sZXQgbz1be3R5cGU6cC5CaW5hcnlGaWxlLGRhdGE6cn1dLGk9W10sbj1yLnBhdGg7aS5wdXNoKG4pLGkucHVzaCgiMCIpLGkucHVzaCgiMSIpLGkucHVzaCgiLS1tZW1vcnktaW8iKSx0LmluZm9ybWF0aW9uT25seSYmdC5pbmZvcm1hdGlvbk9ubHkmJmkucHVzaCgiLS1pbmZvcm1hdGlvbi1vbmx5Iik7bGV0IGw9Im1naC1yZWFkLWltYWdlIixhPXQ/LndlYldvcmtlcjthPT09dm9pZCAwJiYoYT1hd2FpdCBRKCkpO2xldHt3ZWJXb3JrZXI6ZyxyZXR1cm5WYWx1ZTp1LHN0ZGVycjpzLG91dHB1dHM6SX09YXdhaXQgRShsLGksQSxvLHtwaXBlbGluZUJhc2VVcmw6eSgpLHBpcGVsaW5lV29ya2VyVXJsOkMoKSx3ZWJXb3JrZXI6YSxub0NvcHk6dD8ubm9Db3B5fSk7aWYodSE9PTAmJnMhPT0iIil0aHJvdyBuZXcgRXJyb3Iocyk7cmV0dXJue3dlYldvcmtlcjpnLGNvdWxkUmVhZDpJWzBdPy5kYXRhLGltYWdlOklbMV0/LmRhdGF9fXZhciBpQT1FYTthc3luYyBmdW5jdGlvbiB5YShlLHQsQT17fSl7bGV0IHI9W3t0eXBlOnAuSnNvbkNvbXBhdGlibGV9LHt0eXBlOnAuQmluYXJ5RmlsZSxkYXRhOntwYXRoOnQsZGF0YTpuZXcgVWludDhBcnJheX19XSxvPVt7dHlwZTpwLkltYWdlLGRhdGE6ZX1dLGk9W107aS5wdXNoKCIwIiksaS5wdXNoKCIwIik7bGV0IGY9dDtpLnB1c2goZiksaS5wdXNoKCItLW1lbW9yeS1pbyIpLEEuaW5mb3JtYXRpb25Pbmx5JiZBLmluZm9ybWF0aW9uT25seSYmaS5wdXNoKCItLWluZm9ybWF0aW9uLW9ubHkiKSxBLnVzZUNvbXByZXNzaW9uJiZBLnVzZUNvbXByZXNzaW9uJiZpLnB1c2goIi0tdXNlLWNvbXByZXNzaW9uIik7bGV0IGw9Im1naC13cml0ZS1pbWFnZSIsYT1BPy53ZWJXb3JrZXI7YT09PXZvaWQgMCYmKGE9YXdhaXQgUSgpKTtsZXR7d2ViV29ya2VyOmcscmV0dXJuVmFsdWU6dSxzdGRlcnI6cyxvdXRwdXRzOkl9PWF3YWl0IEUobCxpLHIsbyx7cGlwZWxpbmVCYXNlVXJsOnkoKSxwaXBlbGluZVdvcmtlclVybDpDKCksd2ViV29ya2VyOmEsbm9Db3B5OkE/Lm5vQ29weX0pO2lmKHUhPT0wJiZzIT09IiIpdGhyb3cgbmV3IEVycm9yKHMpO3JldHVybnt3ZWJXb3JrZXI6Zyxjb3VsZFdyaXRlOklbMF0/LmRhdGEsc2VyaWFsaXplZEltYWdlOklbMV0/LmRhdGF9fXZhciBvQT15YTthc3luYyBmdW5jdGlvbiBRYShlLHQ9e30pe2xldCBBPVt7dHlwZTpwLkpzb25Db21wYXRpYmxlfSx7dHlwZTpwLkltYWdlfV0scj1lO2lmKGUgaW5zdGFuY2VvZiBGaWxlKXtsZXQgZD1hd2FpdCBlLmFycmF5QnVmZmVyKCk7cj17cGF0aDplLm5hbWUsZGF0YTpuZXcgVWludDhBcnJheShkKX19bGV0IG89W3t0eXBlOnAuQmluYXJ5RmlsZSxkYXRhOnJ9XSxpPVtdLG49ci5wYXRoO2kucHVzaChuKSxpLnB1c2goIjAiKSxpLnB1c2goIjEiKSxpLnB1c2goIi0tbWVtb3J5LWlvIiksdC5pbmZvcm1hdGlvbk9ubHkmJnQuaW5mb3JtYXRpb25Pbmx5JiZpLnB1c2goIi0taW5mb3JtYXRpb24tb25seSIpO2xldCBsPSJiaW8tcmFkLXJlYWQtaW1hZ2UiLGE9dD8ud2ViV29ya2VyO2E9PT12b2lkIDAmJihhPWF3YWl0IFEoKSk7bGV0e3dlYldvcmtlcjpnLHJldHVyblZhbHVlOnUsc3RkZXJyOnMsb3V0cHV0czpJfT1hd2FpdCBFKGwsaSxBLG8se3BpcGVsaW5lQmFzZVVybDp5KCkscGlwZWxpbmVXb3JrZXJVcmw6QygpLHdlYldvcmtlcjphLG5vQ29weTp0Py5ub0NvcHl9KTtpZih1IT09MCYmcyE9PSIiKXRocm93IG5ldyBFcnJvcihzKTtyZXR1cm57d2ViV29ya2VyOmcsY291bGRSZWFkOklbMF0/LmRhdGEsaW1hZ2U6SVsxXT8uZGF0YX19dmFyIGFBPVFhO2FzeW5jIGZ1bmN0aW9uIGhhKGUsdCxBPXt9KXtsZXQgcj1be3R5cGU6cC5Kc29uQ29tcGF0aWJsZX0se3R5cGU6cC5CaW5hcnlGaWxlLGRhdGE6e3BhdGg6dCxkYXRhOm5ldyBVaW50OEFycmF5fX1dLG89W3t0eXBlOnAuSW1hZ2UsZGF0YTplfV0saT1bXTtpLnB1c2goIjAiKSxpLnB1c2goIjAiKTtsZXQgZj10O2kucHVzaChmKSxpLnB1c2goIi0tbWVtb3J5LWlvIiksQS5pbmZvcm1hdGlvbk9ubHkmJkEuaW5mb3JtYXRpb25Pbmx5JiZpLnB1c2goIi0taW5mb3JtYXRpb24tb25seSIpLEEudXNlQ29tcHJlc3Npb24mJkEudXNlQ29tcHJlc3Npb24mJmkucHVzaCgiLS11c2UtY29tcHJlc3Npb24iKTtsZXQgbD0iYmlvLXJhZC13cml0ZS1pbWFnZSIsYT1BPy53ZWJXb3JrZXI7YT09PXZvaWQgMCYmKGE9YXdhaXQgUSgpKTtsZXR7d2ViV29ya2VyOmcscmV0dXJuVmFsdWU6dSxzdGRlcnI6cyxvdXRwdXRzOkl9PWF3YWl0IEUobCxpLHIsbyx7cGlwZWxpbmVCYXNlVXJsOnkoKSxwaXBlbGluZVdvcmtlclVybDpDKCksd2ViV29ya2VyOmEsbm9Db3B5OkE/Lm5vQ29weX0pO2lmKHUhPT0wJiZzIT09IiIpdGhyb3cgbmV3IEVycm9yKHMpO3JldHVybnt3ZWJXb3JrZXI6Zyxjb3VsZFdyaXRlOklbMF0/LmRhdGEsc2VyaWFsaXplZEltYWdlOklbMV0/LmRhdGF9fXZhciBuQT1oYTthc3luYyBmdW5jdGlvbiB3YShlLHQ9e30pe2xldCBBPVt7dHlwZTpwLkpzb25Db21wYXRpYmxlfSx7dHlwZTpwLkltYWdlfV0scj1lO2lmKGUgaW5zdGFuY2VvZiBGaWxlKXtsZXQgZD1hd2FpdCBlLmFycmF5QnVmZmVyKCk7cj17cGF0aDplLm5hbWUsZGF0YTpuZXcgVWludDhBcnJheShkKX19bGV0IG89W3t0eXBlOnAuQmluYXJ5RmlsZSxkYXRhOnJ9XSxpPVtdLG49ci5wYXRoO2kucHVzaChuKSxpLnB1c2goIjAiKSxpLnB1c2goIjEiKSxpLnB1c2goIi0tbWVtb3J5LWlvIiksdC5pbmZvcm1hdGlvbk9ubHkmJnQuaW5mb3JtYXRpb25Pbmx5JiZpLnB1c2goIi0taW5mb3JtYXRpb24tb25seSIpO2xldCBsPSJnaXBsLXJlYWQtaW1hZ2UiLGE9dD8ud2ViV29ya2VyO2E9PT12b2lkIDAmJihhPWF3YWl0IFEoKSk7bGV0e3dlYldvcmtlcjpnLHJldHVyblZhbHVlOnUsc3RkZXJyOnMsb3V0cHV0czpJfT1hd2FpdCBFKGwsaSxBLG8se3BpcGVsaW5lQmFzZVVybDp5KCkscGlwZWxpbmVXb3JrZXJVcmw6QygpLHdlYldvcmtlcjphLG5vQ29weTp0Py5ub0NvcHl9KTtpZih1IT09MCYmcyE9PSIiKXRocm93IG5ldyBFcnJvcihzKTtyZXR1cm57d2ViV29ya2VyOmcsY291bGRSZWFkOklbMF0/LmRhdGEsaW1hZ2U6SVsxXT8uZGF0YX19dmFyIHNBPXdhO2FzeW5jIGZ1bmN0aW9uIFJhKGUsdCxBPXt9KXtsZXQgcj1be3R5cGU6cC5Kc29uQ29tcGF0aWJsZX0se3R5cGU6cC5CaW5hcnlGaWxlLGRhdGE6e3BhdGg6dCxkYXRhOm5ldyBVaW50OEFycmF5fX1dLG89W3t0eXBlOnAuSW1hZ2UsZGF0YTplfV0saT1bXTtpLnB1c2goIjAiKSxpLnB1c2goIjAiKTtsZXQgZj10O2kucHVzaChmKSxpLnB1c2goIi0tbWVtb3J5LWlvIiksQS5pbmZvcm1hdGlvbk9ubHkmJkEuaW5mb3JtYXRpb25Pbmx5JiZpLnB1c2goIi0taW5mb3JtYXRpb24tb25seSIpLEEudXNlQ29tcHJlc3Npb24mJkEudXNlQ29tcHJlc3Npb24mJmkucHVzaCgiLS11c2UtY29tcHJlc3Npb24iKTtsZXQgbD0iZ2lwbC13cml0ZS1pbWFnZSIsYT1BPy53ZWJXb3JrZXI7YT09PXZvaWQgMCYmKGE9YXdhaXQgUSgpKTtsZXR7d2ViV29ya2VyOmcscmV0dXJuVmFsdWU6dSxzdGRlcnI6cyxvdXRwdXRzOkl9PWF3YWl0IEUobCxpLHIsbyx7cGlwZWxpbmVCYXNlVXJsOnkoKSxwaXBlbGluZVdvcmtlclVybDpDKCksd2ViV29ya2VyOmEsbm9Db3B5OkE/Lm5vQ29weX0pO2lmKHUhPT0wJiZzIT09IiIpdGhyb3cgbmV3IEVycm9yKHMpO3JldHVybnt3ZWJXb3JrZXI6Zyxjb3VsZFdyaXRlOklbMF0/LmRhdGEsc2VyaWFsaXplZEltYWdlOklbMV0/LmRhdGF9fXZhciBnQT1SYTthc3luYyBmdW5jdGlvbiBrYShlLHQ9e30pe2xldCBBPVt7dHlwZTpwLkpzb25Db21wYXRpYmxlfSx7dHlwZTpwLkltYWdlfV0scj1lO2lmKGUgaW5zdGFuY2VvZiBGaWxlKXtsZXQgZD1hd2FpdCBlLmFycmF5QnVmZmVyKCk7cj17cGF0aDplLm5hbWUsZGF0YTpuZXcgVWludDhBcnJheShkKX19bGV0IG89W3t0eXBlOnAuQmluYXJ5RmlsZSxkYXRhOnJ9XSxpPVtdLG49ci5wYXRoO2kucHVzaChuKSxpLnB1c2goIjAiKSxpLnB1c2goIjEiKSxpLnB1c2goIi0tbWVtb3J5LWlvIiksdC5pbmZvcm1hdGlvbk9ubHkmJnQuaW5mb3JtYXRpb25Pbmx5JiZpLnB1c2goIi0taW5mb3JtYXRpb24tb25seSIpO2xldCBsPSJnZS1hZHctcmVhZC1pbWFnZSIsYT10Py53ZWJXb3JrZXI7YT09PXZvaWQgMCYmKGE9YXdhaXQgUSgpKTtsZXR7d2ViV29ya2VyOmcscmV0dXJuVmFsdWU6dSxzdGRlcnI6cyxvdXRwdXRzOkl9PWF3YWl0IEUobCxpLEEsbyx7cGlwZWxpbmVCYXNlVXJsOnkoKSxwaXBlbGluZVdvcmtlclVybDpDKCksd2ViV29ya2VyOmEsbm9Db3B5OnQ/Lm5vQ29weX0pO2lmKHUhPT0wJiZzIT09IiIpdGhyb3cgbmV3IEVycm9yKHMpO3JldHVybnt3ZWJXb3JrZXI6Zyxjb3VsZFJlYWQ6SVswXT8uZGF0YSxpbWFnZTpJWzFdPy5kYXRhfX12YXIgbEE9a2E7YXN5bmMgZnVuY3Rpb24gYmEoZSx0LEE9e30pe2xldCByPVt7dHlwZTpwLkpzb25Db21wYXRpYmxlfSx7dHlwZTpwLkJpbmFyeUZpbGUsZGF0YTp7cGF0aDp0LGRhdGE6bmV3IFVpbnQ4QXJyYXl9fV0sbz1be3R5cGU6cC5JbWFnZSxkYXRhOmV9XSxpPVtdO2kucHVzaCgiMCIpLGkucHVzaCgiMCIpO2xldCBmPXQ7aS5wdXNoKGYpLGkucHVzaCgiLS1tZW1vcnktaW8iKSxBLmluZm9ybWF0aW9uT25seSYmQS5pbmZvcm1hdGlvbk9ubHkmJmkucHVzaCgiLS1pbmZvcm1hdGlvbi1vbmx5IiksQS51c2VDb21wcmVzc2lvbiYmQS51c2VDb21wcmVzc2lvbiYmaS5wdXNoKCItLXVzZS1jb21wcmVzc2lvbiIpO2xldCBsPSJnZS1hZHctd3JpdGUtaW1hZ2UiLGE9QT8ud2ViV29ya2VyO2E9PT12b2lkIDAmJihhPWF3YWl0IFEoKSk7bGV0e3dlYldvcmtlcjpnLHJldHVyblZhbHVlOnUsc3RkZXJyOnMsb3V0cHV0czpJfT1hd2FpdCBFKGwsaSxyLG8se3BpcGVsaW5lQmFzZVVybDp5KCkscGlwZWxpbmVXb3JrZXJVcmw6QygpLHdlYldvcmtlcjphLG5vQ29weTpBPy5ub0NvcHl9KTtpZih1IT09MCYmcyE9PSIiKXRocm93IG5ldyBFcnJvcihzKTtyZXR1cm57d2ViV29ya2VyOmcsY291bGRXcml0ZTpJWzBdPy5kYXRhLHNlcmlhbGl6ZWRJbWFnZTpJWzFdPy5kYXRhfX12YXIgSUE9YmE7YXN5bmMgZnVuY3Rpb24gRGEoZSx0PXt9KXtsZXQgQT1be3R5cGU6cC5Kc29uQ29tcGF0aWJsZX0se3R5cGU6cC5JbWFnZX1dLHI9ZTtpZihlIGluc3RhbmNlb2YgRmlsZSl7bGV0IGQ9YXdhaXQgZS5hcnJheUJ1ZmZlcigpO3I9e3BhdGg6ZS5uYW1lLGRhdGE6bmV3IFVpbnQ4QXJyYXkoZCl9fWxldCBvPVt7dHlwZTpwLkJpbmFyeUZpbGUsZGF0YTpyfV0saT1bXSxuPXIucGF0aDtpLnB1c2gobiksaS5wdXNoKCIwIiksaS5wdXNoKCIxIiksaS5wdXNoKCItLW1lbW9yeS1pbyIpLHQuaW5mb3JtYXRpb25Pbmx5JiZ0LmluZm9ybWF0aW9uT25seSYmaS5wdXNoKCItLWluZm9ybWF0aW9uLW9ubHkiKTtsZXQgbD0iZ2U0LXJlYWQtaW1hZ2UiLGE9dD8ud2ViV29ya2VyO2E9PT12b2lkIDAmJihhPWF3YWl0IFEoKSk7bGV0e3dlYldvcmtlcjpnLHJldHVyblZhbHVlOnUsc3RkZXJyOnMsb3V0cHV0czpJfT1hd2FpdCBFKGwsaSxBLG8se3BpcGVsaW5lQmFzZVVybDp5KCkscGlwZWxpbmVXb3JrZXJVcmw6QygpLHdlYldvcmtlcjphLG5vQ29weTp0Py5ub0NvcHl9KTtpZih1IT09MCYmcyE9PSIiKXRocm93IG5ldyBFcnJvcihzKTtyZXR1cm57d2ViV29ya2VyOmcsY291bGRSZWFkOklbMF0/LmRhdGEsaW1hZ2U6SVsxXT8uZGF0YX19dmFyIHBBPURhO2FzeW5jIGZ1bmN0aW9uIFdhKGUsdCxBPXt9KXtsZXQgcj1be3R5cGU6cC5Kc29uQ29tcGF0aWJsZX0se3R5cGU6cC5CaW5hcnlGaWxlLGRhdGE6e3BhdGg6dCxkYXRhOm5ldyBVaW50OEFycmF5fX1dLG89W3t0eXBlOnAuSW1hZ2UsZGF0YTplfV0saT1bXTtpLnB1c2goIjAiKSxpLnB1c2goIjAiKTtsZXQgZj10O2kucHVzaChmKSxpLnB1c2goIi0tbWVtb3J5LWlvIiksQS5pbmZvcm1hdGlvbk9ubHkmJkEuaW5mb3JtYXRpb25Pbmx5JiZpLnB1c2goIi0taW5mb3JtYXRpb24tb25seSIpLEEudXNlQ29tcHJlc3Npb24mJkEudXNlQ29tcHJlc3Npb24mJmkucHVzaCgiLS11c2UtY29tcHJlc3Npb24iKTtsZXQgbD0iZ2U0LXdyaXRlLWltYWdlIixhPUE/LndlYldvcmtlcjthPT09dm9pZCAwJiYoYT1hd2FpdCBRKCkpO2xldHt3ZWJXb3JrZXI6ZyxyZXR1cm5WYWx1ZTp1LHN0ZGVycjpzLG91dHB1dHM6SX09YXdhaXQgRShsLGkscixvLHtwaXBlbGluZUJhc2VVcmw6eSgpLHBpcGVsaW5lV29ya2VyVXJsOkMoKSx3ZWJXb3JrZXI6YSxub0NvcHk6QT8ubm9Db3B5fSk7aWYodSE9PTAmJnMhPT0iIil0aHJvdyBuZXcgRXJyb3Iocyk7cmV0dXJue3dlYldvcmtlcjpnLGNvdWxkV3JpdGU6SVswXT8uZGF0YSxzZXJpYWxpemVkSW1hZ2U6SVsxXT8uZGF0YX19dmFyIG1BPVdhO2FzeW5jIGZ1bmN0aW9uIEZhKGUsdD17fSl7bGV0IEE9W3t0eXBlOnAuSnNvbkNvbXBhdGlibGV9LHt0eXBlOnAuSW1hZ2V9XSxyPWU7aWYoZSBpbnN0YW5jZW9mIEZpbGUpe2xldCBkPWF3YWl0IGUuYXJyYXlCdWZmZXIoKTtyPXtwYXRoOmUubmFtZSxkYXRhOm5ldyBVaW50OEFycmF5KGQpfX1sZXQgbz1be3R5cGU6cC5CaW5hcnlGaWxlLGRhdGE6cn1dLGk9W10sbj1yLnBhdGg7aS5wdXNoKG4pLGkucHVzaCgiMCIpLGkucHVzaCgiMSIpLGkucHVzaCgiLS1tZW1vcnktaW8iKSx0LmluZm9ybWF0aW9uT25seSYmdC5pbmZvcm1hdGlvbk9ubHkmJmkucHVzaCgiLS1pbmZvcm1hdGlvbi1vbmx5Iik7bGV0IGw9ImdlNS1yZWFkLWltYWdlIixhPXQ/LndlYldvcmtlcjthPT09dm9pZCAwJiYoYT1hd2FpdCBRKCkpO2xldHt3ZWJXb3JrZXI6ZyxyZXR1cm5WYWx1ZTp1LHN0ZGVycjpzLG91dHB1dHM6SX09YXdhaXQgRShsLGksQSxvLHtwaXBlbGluZUJhc2VVcmw6eSgpLHBpcGVsaW5lV29ya2VyVXJsOkMoKSx3ZWJXb3JrZXI6YSxub0NvcHk6dD8ubm9Db3B5fSk7aWYodSE9PTAmJnMhPT0iIil0aHJvdyBuZXcgRXJyb3Iocyk7cmV0dXJue3dlYldvcmtlcjpnLGNvdWxkUmVhZDpJWzBdPy5kYXRhLGltYWdlOklbMV0/LmRhdGF9fXZhciB1QT1GYTthc3luYyBmdW5jdGlvbiBVYShlLHQsQT17fSl7bGV0IHI9W3t0eXBlOnAuSnNvbkNvbXBhdGlibGV9LHt0eXBlOnAuQmluYXJ5RmlsZSxkYXRhOntwYXRoOnQsZGF0YTpuZXcgVWludDhBcnJheX19XSxvPVt7dHlwZTpwLkltYWdlLGRhdGE6ZX1dLGk9W107aS5wdXNoKCIwIiksaS5wdXNoKCIwIik7bGV0IGY9dDtpLnB1c2goZiksaS5wdXNoKCItLW1lbW9yeS1pbyIpLEEuaW5mb3JtYXRpb25Pbmx5JiZBLmluZm9ybWF0aW9uT25seSYmaS5wdXNoKCItLWluZm9ybWF0aW9uLW9ubHkiKSxBLnVzZUNvbXByZXNzaW9uJiZBLnVzZUNvbXByZXNzaW9uJiZpLnB1c2goIi0tdXNlLWNvbXByZXNzaW9uIik7bGV0IGw9ImdlNS13cml0ZS1pbWFnZSIsYT1BPy53ZWJXb3JrZXI7YT09PXZvaWQgMCYmKGE9YXdhaXQgUSgpKTtsZXR7d2ViV29ya2VyOmcscmV0dXJuVmFsdWU6dSxzdGRlcnI6cyxvdXRwdXRzOkl9PWF3YWl0IEUobCxpLHIsbyx7cGlwZWxpbmVCYXNlVXJsOnkoKSxwaXBlbGluZVdvcmtlclVybDpDKCksd2ViV29ya2VyOmEsbm9Db3B5OkE/Lm5vQ29weX0pO2lmKHUhPT0wJiZzIT09IiIpdGhyb3cgbmV3IEVycm9yKHMpO3JldHVybnt3ZWJXb3JrZXI6Zyxjb3VsZFdyaXRlOklbMF0/LmRhdGEsc2VyaWFsaXplZEltYWdlOklbMV0/LmRhdGF9fXZhciBmQT1VYTthc3luYyBmdW5jdGlvbiBTYShlLHQ9e30pe2xldCBBPVt7dHlwZTpwLkpzb25Db21wYXRpYmxlfSx7dHlwZTpwLkltYWdlfV0scj1lO2lmKGUgaW5zdGFuY2VvZiBGaWxlKXtsZXQgZD1hd2FpdCBlLmFycmF5QnVmZmVyKCk7cj17cGF0aDplLm5hbWUsZGF0YTpuZXcgVWludDhBcnJheShkKX19bGV0IG89W3t0eXBlOnAuQmluYXJ5RmlsZSxkYXRhOnJ9XSxpPVtdLG49ci5wYXRoO2kucHVzaChuKSxpLnB1c2goIjAiKSxpLnB1c2goIjEiKSxpLnB1c2goIi0tbWVtb3J5LWlvIiksdC5pbmZvcm1hdGlvbk9ubHkmJnQuaW5mb3JtYXRpb25Pbmx5JiZpLnB1c2goIi0taW5mb3JtYXRpb24tb25seSIpO2xldCBsPSJnZGNtLXJlYWQtaW1hZ2UiLGE9dD8ud2ViV29ya2VyO2E9PT12b2lkIDAmJihhPWF3YWl0IFEoKSk7bGV0e3dlYldvcmtlcjpnLHJldHVyblZhbHVlOnUsc3RkZXJyOnMsb3V0cHV0czpJfT1hd2FpdCBFKGwsaSxBLG8se3BpcGVsaW5lQmFzZVVybDp5KCkscGlwZWxpbmVXb3JrZXJVcmw6QygpLHdlYldvcmtlcjphLG5vQ29weTp0Py5ub0NvcHl9KTtpZih1IT09MCYmcyE9PSIiKXRocm93IG5ldyBFcnJvcihzKTtyZXR1cm57d2ViV29ya2VyOmcsY291bGRSZWFkOklbMF0/LmRhdGEsaW1hZ2U6SVsxXT8uZGF0YX19dmFyIGNBPVNhO2FzeW5jIGZ1bmN0aW9uIE5hKGUsdCxBPXt9KXtsZXQgcj1be3R5cGU6cC5Kc29uQ29tcGF0aWJsZX0se3R5cGU6cC5CaW5hcnlGaWxlLGRhdGE6e3BhdGg6dCxkYXRhOm5ldyBVaW50OEFycmF5fX1dLG89W3t0eXBlOnAuSW1hZ2UsZGF0YTplfV0saT1bXTtpLnB1c2goIjAiKSxpLnB1c2goIjAiKTtsZXQgZj10O2kucHVzaChmKSxpLnB1c2goIi0tbWVtb3J5LWlvIiksQS5pbmZvcm1hdGlvbk9ubHkmJkEuaW5mb3JtYXRpb25Pbmx5JiZpLnB1c2goIi0taW5mb3JtYXRpb24tb25seSIpLEEudXNlQ29tcHJlc3Npb24mJkEudXNlQ29tcHJlc3Npb24mJmkucHVzaCgiLS11c2UtY29tcHJlc3Npb24iKTtsZXQgbD0iZ2RjbS13cml0ZS1pbWFnZSIsYT1BPy53ZWJXb3JrZXI7YT09PXZvaWQgMCYmKGE9YXdhaXQgUSgpKTtsZXR7d2ViV29ya2VyOmcscmV0dXJuVmFsdWU6dSxzdGRlcnI6cyxvdXRwdXRzOkl9PWF3YWl0IEUobCxpLHIsbyx7cGlwZWxpbmVCYXNlVXJsOnkoKSxwaXBlbGluZVdvcmtlclVybDpDKCksd2ViV29ya2VyOmEsbm9Db3B5OkE/Lm5vQ29weX0pO2lmKHUhPT0wJiZzIT09IiIpdGhyb3cgbmV3IEVycm9yKHMpO3JldHVybnt3ZWJXb3JrZXI6Zyxjb3VsZFdyaXRlOklbMF0/LmRhdGEsc2VyaWFsaXplZEltYWdlOklbMV0/LmRhdGF9fXZhciBkQT1OYTthc3luYyBmdW5jdGlvbiBPYShlLHQ9e30pe2xldCBBPVt7dHlwZTpwLkpzb25Db21wYXRpYmxlfSx7dHlwZTpwLkltYWdlfV0scj1lO2lmKGUgaW5zdGFuY2VvZiBGaWxlKXtsZXQgZD1hd2FpdCBlLmFycmF5QnVmZmVyKCk7cj17cGF0aDplLm5hbWUsZGF0YTpuZXcgVWludDhBcnJheShkKX19bGV0IG89W3t0eXBlOnAuQmluYXJ5RmlsZSxkYXRhOnJ9XSxpPVtdLG49ci5wYXRoO2kucHVzaChuKSxpLnB1c2goIjAiKSxpLnB1c2goIjEiKSxpLnB1c2goIi0tbWVtb3J5LWlvIiksdC5pbmZvcm1hdGlvbk9ubHkmJnQuaW5mb3JtYXRpb25Pbmx5JiZpLnB1c2goIi0taW5mb3JtYXRpb24tb25seSIpO2xldCBsPSJzY2FuY28tcmVhZC1pbWFnZSIsYT10Py53ZWJXb3JrZXI7YT09PXZvaWQgMCYmKGE9YXdhaXQgUSgpKTtsZXR7d2ViV29ya2VyOmcscmV0dXJuVmFsdWU6dSxzdGRlcnI6cyxvdXRwdXRzOkl9PWF3YWl0IEUobCxpLEEsbyx7cGlwZWxpbmVCYXNlVXJsOnkoKSxwaXBlbGluZVdvcmtlclVybDpDKCksd2ViV29ya2VyOmEsbm9Db3B5OnQ/Lm5vQ29weX0pO2lmKHUhPT0wJiZzIT09IiIpdGhyb3cgbmV3IEVycm9yKHMpO3JldHVybnt3ZWJXb3JrZXI6Zyxjb3VsZFJlYWQ6SVswXT8uZGF0YSxpbWFnZTpJWzFdPy5kYXRhfX12YXIgQkE9T2E7YXN5bmMgZnVuY3Rpb24gUGEoZSx0LEE9e30pe2xldCByPVt7dHlwZTpwLkpzb25Db21wYXRpYmxlfSx7dHlwZTpwLkJpbmFyeUZpbGUsZGF0YTp7cGF0aDp0LGRhdGE6bmV3IFVpbnQ4QXJyYXl9fV0sbz1be3R5cGU6cC5JbWFnZSxkYXRhOmV9XSxpPVtdO2kucHVzaCgiMCIpLGkucHVzaCgiMCIpO2xldCBmPXQ7aS5wdXNoKGYpLGkucHVzaCgiLS1tZW1vcnktaW8iKSxBLmluZm9ybWF0aW9uT25seSYmQS5pbmZvcm1hdGlvbk9ubHkmJmkucHVzaCgiLS1pbmZvcm1hdGlvbi1vbmx5IiksQS51c2VDb21wcmVzc2lvbiYmQS51c2VDb21wcmVzc2lvbiYmaS5wdXNoKCItLXVzZS1jb21wcmVzc2lvbiIpO2xldCBsPSJzY2FuY28td3JpdGUtaW1hZ2UiLGE9QT8ud2ViV29ya2VyO2E9PT12b2lkIDAmJihhPWF3YWl0IFEoKSk7bGV0e3dlYldvcmtlcjpnLHJldHVyblZhbHVlOnUsc3RkZXJyOnMsb3V0cHV0czpJfT1hd2FpdCBFKGwsaSxyLG8se3BpcGVsaW5lQmFzZVVybDp5KCkscGlwZWxpbmVXb3JrZXJVcmw6QygpLHdlYldvcmtlcjphLG5vQ29weTpBPy5ub0NvcHl9KTtpZih1IT09MCYmcyE9PSIiKXRocm93IG5ldyBFcnJvcihzKTtyZXR1cm57d2ViV29ya2VyOmcsY291bGRXcml0ZTpJWzBdPy5kYXRhLHNlcmlhbGl6ZWRJbWFnZTpJWzFdPy5kYXRhfX12YXIgQ0E9UGE7YXN5bmMgZnVuY3Rpb24geGEoZSx0PXt9KXtsZXQgQT1be3R5cGU6cC5Kc29uQ29tcGF0aWJsZX0se3R5cGU6cC5JbWFnZX1dLHI9ZTtpZihlIGluc3RhbmNlb2YgRmlsZSl7bGV0IGQ9YXdhaXQgZS5hcnJheUJ1ZmZlcigpO3I9e3BhdGg6ZS5uYW1lLGRhdGE6bmV3IFVpbnQ4QXJyYXkoZCl9fWxldCBvPVt7dHlwZTpwLkJpbmFyeUZpbGUsZGF0YTpyfV0saT1bXSxuPXIucGF0aDtpLnB1c2gobiksaS5wdXNoKCIwIiksaS5wdXNoKCIxIiksaS5wdXNoKCItLW1lbW9yeS1pbyIpLHQuaW5mb3JtYXRpb25Pbmx5JiZ0LmluZm9ybWF0aW9uT25seSYmaS5wdXNoKCItLWluZm9ybWF0aW9uLW9ubHkiKTtsZXQgbD0iZmRmLXJlYWQtaW1hZ2UiLGE9dD8ud2ViV29ya2VyO2E9PT12b2lkIDAmJihhPWF3YWl0IFEoKSk7bGV0e3dlYldvcmtlcjpnLHJldHVyblZhbHVlOnUsc3RkZXJyOnMsb3V0cHV0czpJfT1hd2FpdCBFKGwsaSxBLG8se3BpcGVsaW5lQmFzZVVybDp5KCkscGlwZWxpbmVXb3JrZXJVcmw6QygpLHdlYldvcmtlcjphLG5vQ29weTp0Py5ub0NvcHl9KTtpZih1IT09MCYmcyE9PSIiKXRocm93IG5ldyBFcnJvcihzKTtyZXR1cm57d2ViV29ya2VyOmcsY291bGRSZWFkOklbMF0/LmRhdGEsaW1hZ2U6SVsxXT8uZGF0YX19dmFyIEVBPXhhO2FzeW5jIGZ1bmN0aW9uIFRhKGUsdD17fSl7bGV0IEE9W3t0eXBlOnAuSnNvbkNvbXBhdGlibGV9LHt0eXBlOnAuSW1hZ2V9XSxyPWU7aWYoZSBpbnN0YW5jZW9mIEZpbGUpe2xldCBkPWF3YWl0IGUuYXJyYXlCdWZmZXIoKTtyPXtwYXRoOmUubmFtZSxkYXRhOm5ldyBVaW50OEFycmF5KGQpfX1sZXQgbz1be3R5cGU6cC5CaW5hcnlGaWxlLGRhdGE6cn1dLGk9W10sbj1yLnBhdGg7aS5wdXNoKG4pLGkucHVzaCgiMCIpLGkucHVzaCgiMSIpLGkucHVzaCgiLS1tZW1vcnktaW8iKSx0LmluZm9ybWF0aW9uT25seSYmdC5pbmZvcm1hdGlvbk9ubHkmJmkucHVzaCgiLS1pbmZvcm1hdGlvbi1vbmx5Iik7bGV0IGw9Indhc20tcmVhZC1pbWFnZSIsYT10Py53ZWJXb3JrZXI7YT09PXZvaWQgMCYmKGE9YXdhaXQgUSgpKTtsZXR7d2ViV29ya2VyOmcscmV0dXJuVmFsdWU6dSxzdGRlcnI6cyxvdXRwdXRzOkl9PWF3YWl0IEUobCxpLEEsbyx7cGlwZWxpbmVCYXNlVXJsOnkoKSxwaXBlbGluZVdvcmtlclVybDpDKCksd2ViV29ya2VyOmEsbm9Db3B5OnQ/Lm5vQ29weX0pO2lmKHUhPT0wJiZzIT09IiIpdGhyb3cgbmV3IEVycm9yKHMpO3JldHVybnt3ZWJXb3JrZXI6Zyxjb3VsZFJlYWQ6SVswXT8uZGF0YSxpbWFnZTpJWzFdPy5kYXRhfX12YXIgeUE9VGE7YXN5bmMgZnVuY3Rpb24gR2EoZSx0LEE9e30pe2xldCByPVt7dHlwZTpwLkpzb25Db21wYXRpYmxlfSx7dHlwZTpwLkJpbmFyeUZpbGUsZGF0YTp7cGF0aDp0LGRhdGE6bmV3IFVpbnQ4QXJyYXl9fV0sbz1be3R5cGU6cC5JbWFnZSxkYXRhOmV9XSxpPVtdO2kucHVzaCgiMCIpLGkucHVzaCgiMCIpO2xldCBmPXQ7aS5wdXNoKGYpLGkucHVzaCgiLS1tZW1vcnktaW8iKSxBLmluZm9ybWF0aW9uT25seSYmQS5pbmZvcm1hdGlvbk9ubHkmJmkucHVzaCgiLS1pbmZvcm1hdGlvbi1vbmx5IiksQS51c2VDb21wcmVzc2lvbiYmQS51c2VDb21wcmVzc2lvbiYmaS5wdXNoKCItLXVzZS1jb21wcmVzc2lvbiIpO2xldCBsPSJ3YXNtLXdyaXRlLWltYWdlIixhPUE/LndlYldvcmtlcjthPT09dm9pZCAwJiYoYT1hd2FpdCBRKCkpO2xldHt3ZWJXb3JrZXI6ZyxyZXR1cm5WYWx1ZTp1LHN0ZGVycjpzLG91dHB1dHM6SX09YXdhaXQgRShsLGkscixvLHtwaXBlbGluZUJhc2VVcmw6eSgpLHBpcGVsaW5lV29ya2VyVXJsOkMoKSx3ZWJXb3JrZXI6YSxub0NvcHk6QT8ubm9Db3B5fSk7aWYodSE9PTAmJnMhPT0iIil0aHJvdyBuZXcgRXJyb3Iocyk7cmV0dXJue3dlYldvcmtlcjpnLGNvdWxkV3JpdGU6SVswXT8uZGF0YSxzZXJpYWxpemVkSW1hZ2U6SVsxXT8uZGF0YX19dmFyIFFBPUdhO2FzeW5jIGZ1bmN0aW9uIExhKGUsdD17fSl7bGV0IEE9W3t0eXBlOnAuSnNvbkNvbXBhdGlibGV9LHt0eXBlOnAuSW1hZ2V9XSxyPWU7aWYoZSBpbnN0YW5jZW9mIEZpbGUpe2xldCBkPWF3YWl0IGUuYXJyYXlCdWZmZXIoKTtyPXtwYXRoOmUubmFtZSxkYXRhOm5ldyBVaW50OEFycmF5KGQpfX1sZXQgbz1be3R5cGU6cC5CaW5hcnlGaWxlLGRhdGE6cn1dLGk9W10sbj1yLnBhdGg7aS5wdXNoKG4pLGkucHVzaCgiMCIpLGkucHVzaCgiMSIpLGkucHVzaCgiLS1tZW1vcnktaW8iKSx0LmluZm9ybWF0aW9uT25seSYmdC5pbmZvcm1hdGlvbk9ubHkmJmkucHVzaCgiLS1pbmZvcm1hdGlvbi1vbmx5Iik7bGV0IGw9Indhc20tenN0ZC1yZWFkLWltYWdlIixhPXQ/LndlYldvcmtlcjthPT09dm9pZCAwJiYoYT1hd2FpdCBRKCkpO2xldHt3ZWJXb3JrZXI6ZyxyZXR1cm5WYWx1ZTp1LHN0ZGVycjpzLG91dHB1dHM6SX09YXdhaXQgRShsLGksQSxvLHtwaXBlbGluZUJhc2VVcmw6eSgpLHBpcGVsaW5lV29ya2VyVXJsOkMoKSx3ZWJXb3JrZXI6YSxub0NvcHk6dD8ubm9Db3B5fSk7aWYodSE9PTAmJnMhPT0iIil0aHJvdyBuZXcgRXJyb3Iocyk7cmV0dXJue3dlYldvcmtlcjpnLGNvdWxkUmVhZDpJWzBdPy5kYXRhLGltYWdlOklbMV0/LmRhdGF9fXZhciBoQT1MYTthc3luYyBmdW5jdGlvbiBKYShlLHQsQT17fSl7bGV0IHI9W3t0eXBlOnAuSnNvbkNvbXBhdGlibGV9LHt0eXBlOnAuQmluYXJ5RmlsZSxkYXRhOntwYXRoOnQsZGF0YTpuZXcgVWludDhBcnJheX19XSxvPVt7dHlwZTpwLkltYWdlLGRhdGE6ZX1dLGk9W107aS5wdXNoKCIwIiksaS5wdXNoKCIwIik7bGV0IGY9dDtpLnB1c2goZiksaS5wdXNoKCItLW1lbW9yeS1pbyIpLEEuaW5mb3JtYXRpb25Pbmx5JiZBLmluZm9ybWF0aW9uT25seSYmaS5wdXNoKCItLWluZm9ybWF0aW9uLW9ubHkiKSxBLnVzZUNvbXByZXNzaW9uJiZBLnVzZUNvbXByZXNzaW9uJiZpLnB1c2goIi0tdXNlLWNvbXByZXNzaW9uIik7bGV0IGw9Indhc20tenN0ZC13cml0ZS1pbWFnZSIsYT1BPy53ZWJXb3JrZXI7YT09PXZvaWQgMCYmKGE9YXdhaXQgUSgpKTtsZXR7d2ViV29ya2VyOmcscmV0dXJuVmFsdWU6dSxzdGRlcnI6cyxvdXRwdXRzOkl9PWF3YWl0IEUobCxpLHIsbyx7cGlwZWxpbmVCYXNlVXJsOnkoKSxwaXBlbGluZVdvcmtlclVybDpDKCksd2ViV29ya2VyOmEsbm9Db3B5OkE/Lm5vQ29weX0pO2lmKHUhPT0wJiZzIT09IiIpdGhyb3cgbmV3IEVycm9yKHMpO3JldHVybnt3ZWJXb3JrZXI6Zyxjb3VsZFdyaXRlOklbMF0/LmRhdGEsc2VyaWFsaXplZEltYWdlOklbMV0/LmRhdGF9fXZhciB3QT1KYTt2YXIgTWE9bmV3IE1hcChbWyJwbmciLFtPdCxQdF1dLFsibWV0YSIsW3h0LFR0XV0sWyJ0aWZmIixbR3QsTHRdXSxbIm5pZnRpIixbSnQsTXRdXSxbImpwZWciLFtIdCxxdF1dLFsibnJyZCIsW1l0LEt0XV0sWyJ2dGsiLFt2dCxqdF1dLFsiYm1wIixbX3QsenRdXSxbImhkZjUiLFtWdCxadF1dLFsibW5jIixbWHQsJHRdXSxbIm1yYyIsW2VBLHRBXV0sWyJsc20iLFtBQSxyQV1dLFsibWdoIixbaUEsb0FdXSxbImJpb1JhZCIsW2FBLG5BXV0sWyJnaXBsIixbc0EsZ0FdXSxbImdlQWR3IixbbEEsSUFdXSxbImdlNCIsW3BBLG1BXV0sWyJnZTUiLFt1QSxmQV1dLFsiZ2RjbSIsW2NBLGRBXV0sWyJzY2FuY28iLFtCQSxDQV1dLFsiZmRmIixbRUEsbnVsbF1dLFsid2FzbSIsW3lBLFFBXV0sWyJ3YXNtWnN0ZCIsW2hBLHdBXV1dKSxuZT1NYTthc3luYyBmdW5jdGlvbiBIYShlLHQ9e30pe2xldCBBPWUudHlwZT8/IiIscj1lLm5hbWU/P2UucGF0aD8/ImZpbGVOYW1lIixvPXNlKHIpLnRvTG93ZXJDYXNlKCksaT10Py53ZWJXb3JrZXIsbj1lO2lmKGUgaW5zdGFuY2VvZiBCbG9iKXtsZXQgcz1hd2FpdCBlLmFycmF5QnVmZmVyKCk7bj17cGF0aDplLm5hbWUsZGF0YTpuZXcgVWludDhBcnJheShzKX19bGV0IG09bnVsbDtpZihBJiZhZS5oYXMoQSkpbT1hZS5nZXQoQSk7ZWxzZSBpZihfLmhhcyhvKSltPV8uZ2V0KG8pO2Vsc2UgZm9yKGxldCBzIG9mIG5lLnZhbHVlcygpKWlmKHNbMF0hPT1udWxsKXtsZXR7d2ViV29ya2VyOkksY291bGRSZWFkOkIsaW1hZ2U6ZH09YXdhaXQgc1swXSh7cGF0aDpuLnBhdGgsZGF0YTpuLmRhdGEuc2xpY2UoKX0se3dlYldvcmtlcjppLGluZm9ybWF0aW9uT25seTp0Py5pbmZvcm1hdGlvbk9ubHksbm9Db3B5OnQ/Lm5vQ29weX0pO2lmKGk9SSxCKXJldHVybiB0eXBlb2YgdDwidSImJihkPXEoZCx0KSkse3dlYldvcmtlcjppLGltYWdlOmR9fWlmKCFtKXRocm93IEVycm9yKCJDb3VsZCBub3QgZmluZCBJTyBmb3I6ICIrcik7bGV0IGw9bmUuZ2V0KG0pWzBdLHt3ZWJXb3JrZXI6YSxjb3VsZFJlYWQ6ZyxpbWFnZTp1fT1hd2FpdCBsKG4se3dlYldvcmtlcjppLGluZm9ybWF0aW9uT25seTp0Py5pbmZvcm1hdGlvbk9ubHksbm9Db3B5OnQ/Lm5vQ29weX0pO2lmKGk9YSwhZyl0aHJvdyBFcnJvcigiQ291bGQgbm90IHJlYWQ6ICIrcik7cmV0dXJuIHR5cGVvZiB0PCJ1IiYmKHU9cSh1LHQpKSx7d2ViV29ya2VyOmksaW1hZ2U6dX19dmFyIFJBPUhhO3ZhciBxYT10eXBlb2YgZ2xvYmFsVGhpcy5uYXZpZ2F0b3I/LmhhcmR3YXJlQ29uY3VycmVuY3k9PSJudW1iZXIiP2dsb2JhbFRoaXMubmF2aWdhdG9yLmhhcmR3YXJlQ29uY3VycmVuY3k6NixIcj1uZXcgJGUocWEsUkEpO2FzeW5jIGZ1bmN0aW9uIFlhKGUsdD17fSl7bGV0IEE9MSxyPTAsbz0hMTt0eXBlb2YgdD09Im9iamVjdCImJih0eXBlb2YgdC56U3BhY2luZzwidSImJihBPXQuelNwYWNpbmcpLHR5cGVvZiB0LnpPcmlnaW48InUiJiYocj10LnpPcmlnaW4pLHR5cGVvZiB0LnNvcnRlZFNlcmllczwidSImJihvPXQuc29ydGVkU2VyaWVzKSk7bGV0IGk9QXJyYXkuZnJvbShlLGFzeW5jIGZ1bmN0aW9uKGcpe2lmKGcgaW5zdGFuY2VvZiBGaWxlKXtsZXQgdT1hd2FpdCBnLmFycmF5QnVmZmVyKCk7cmV0dXJue3BhdGg6Zy5uYW1lLGRhdGE6bmV3IFVpbnQ4QXJyYXkodSl9fXJldHVybiBnfSksbj1hd2FpdCBQcm9taXNlLmFsbChpKTtvfHxuLnNvcnQoKGcsdSk9PmcucGF0aDx1LnBhdGg/LTE6Zy5wYXRoPnUucGF0aD8xOjApO2xldCBtPVtdO2ZvcihsZXQgZz0wO2c8bi5sZW5ndGg7ZysrKW0ucHVzaChbbltnXSx7fV0pO2xldCBsPShhd2FpdCBIci5ydW5UYXNrcyhtKS5wcm9taXNlKS5tYXAoZz0+e2xldCB1PWcuaW1hZ2U7cmV0dXJuIHUuaW1hZ2VUeXBlLmRpbWVuc2lvbj0zLHUuc2l6ZS5wdXNoKDEpLHUuc3BhY2luZy5wdXNoKEEpLHUub3JpZ2luLnB1c2gociksdS5kaXJlY3Rpb249bmV3IEZsb2F0NjRBcnJheSg5KSx1LmRpcmVjdGlvbi5maWxsKDApLHUuZGlyZWN0aW9uWzBdPTEsdS5kaXJlY3Rpb25bNF09MSx1LmRpcmVjdGlvbls4XT0xLHV9KSxhPVplKGwpO3JldHVybiB0eXBlb2YgdD09Im9iamVjdCImJih0eXBlb2YgdC5jb21wb25lbnRUeXBlPCJ1Inx8dHlwZW9mIHQucGl4ZWxUeXBlPCJ1IikmJihhPXEoYSx0KSkse2ltYWdlOmEsd2ViV29ya2VyUG9vbDpIcn19dmFyIEthPVlhO2FzeW5jIGZ1bmN0aW9uIHZhKGUsdCxBPXt9KXtsZXQgcj1lOyh0eXBlb2YgQS5jb21wb25lbnRUeXBlPCJ1Inx8dHlwZW9mIEEucGl4ZWxUeXBlPCJ1IikmJihyPXEoZSxBKSk7bGV0IG89QS5taW1lVHlwZSxpPXNlKHQpLnRvTG93ZXJDYXNlKCksbj1BLndlYldvcmtlcixtPW51bGw7aWYodHlwZW9mIG88InUiJiZhZS5oYXMobykpbT1hZS5nZXQobyk7ZWxzZSBpZihfLmhhcyhpKSltPV8uZ2V0KGkpO2Vsc2UgZm9yKGxldCBJIG9mIG5lLnZhbHVlcygpKWlmKElbMV0hPT1udWxsKXtsZXR7d2ViV29ya2VyOkIsY291bGRXcml0ZTpkLHNlcmlhbGl6ZWRJbWFnZTprfT1hd2FpdCBJWzFdKFZlKHIpLHQsQSk7aWYobj1CLGQpcmV0dXJue3dlYldvcmtlcjpuLHNlcmlhbGl6ZWRJbWFnZTprfX1pZighbSl0aHJvdyBFcnJvcigiQ291bGQgbm90IGZpbmQgSU8gZm9yOiAiK3QpO2xldCBsPW5lLmdldChtKVsxXSx7d2ViV29ya2VyOmEsY291bGRXcml0ZTpnLHNlcmlhbGl6ZWRJbWFnZTp1fT1hd2FpdCBsKHIsdCxBKTtpZihuPWEsIWcpdGhyb3cgRXJyb3IoIkNvdWxkIG5vdCB3cml0ZTogIit0KTtyZXR1cm57d2ViV29ya2VyOm4sc2VyaWFsaXplZEltYWdlOnV9fXZhciBqYT12YTthc3luYyBmdW5jdGlvbiBfYShlLHQsQT17fSl7bGV0IHI9W3t0eXBlOnAuSnNvbkNvbXBhdGlibGV9LHt0eXBlOnAuQmluYXJ5RmlsZSxkYXRhOntwYXRoOnQsZGF0YTpuZXcgVWludDhBcnJheX19XSxvPVt7dHlwZTpwLkltYWdlLGRhdGE6ZX1dLGk9W107aS5wdXNoKCIwIiksaS5wdXNoKCIwIik7bGV0IGY9dDtpLnB1c2goZiksaS5wdXNoKCItLW1lbW9yeS1pbyIpLEEuaW5mb3JtYXRpb25Pbmx5JiZBLmluZm9ybWF0aW9uT25seSYmaS5wdXNoKCItLWluZm9ybWF0aW9uLW9ubHkiKSxBLnVzZUNvbXByZXNzaW9uJiZBLnVzZUNvbXByZXNzaW9uJiZpLnB1c2goIi0tdXNlLWNvbXByZXNzaW9uIik7bGV0IGw9ImZkZi13cml0ZS1pbWFnZSIsYT1BPy53ZWJXb3JrZXI7YT09PXZvaWQgMCYmKGE9YXdhaXQgUSgpKTtsZXR7d2ViV29ya2VyOmcscmV0dXJuVmFsdWU6dSxzdGRlcnI6cyxvdXRwdXRzOkl9PWF3YWl0IEUobCxpLHIsbyx7cGlwZWxpbmVCYXNlVXJsOnkoKSxwaXBlbGluZVdvcmtlclVybDpDKCksd2ViV29ya2VyOmEsbm9Db3B5OkE/Lm5vQ29weX0pO2lmKHUhPT0wJiZzIT09IiIpdGhyb3cgbmV3IEVycm9yKHMpO3JldHVybnt3ZWJXb3JrZXI6Zyxjb3VsZFdyaXRlOklbMF0/LmRhdGEsc2VyaWFsaXplZEltYWdlOklbMV0/LmRhdGF9fXZhciB6YT1fYTt2YXIgcXI9J2RhdGE6dGV4dC9qYXZhc2NyaXB0O2NoYXJzZXQ9dXRmLTgsdmFyIG1lPU9iamVjdC5kZWZpbmVQcm9wZXJ0eTt2YXIgd2U9KEEsdCk9Pntmb3IodmFyIGUgaW4gdCltZShBLGUse2dldDp0W2VdLGVudW1lcmFibGU6ITB9KX07dmFyIGZ0PVN5bWJvbCgiQ29tbGluay5wcm94eSIpLHBlPVN5bWJvbCgiQ29tbGluay5lbmRwb2ludCIpLFNlPVN5bWJvbCgiQ29tbGluay5yZWxlYXNlUHJveHkiKSxZQT1TeW1ib2woIkNvbWxpbmsuZmluYWxpemVyIiksYUE9U3ltYm9sKCJDb21saW5rLnRocm93biIpLGx0PUE9PnR5cGVvZiBBPT0ib2JqZWN0IiYmQSE9PW51bGx8fHR5cGVvZiBBPT0iZnVuY3Rpb24iLEZlPXtjYW5IYW5kbGU6QT0+bHQoQSkmJkFbZnRdLHNlcmlhbGl6ZShBKXtsZXR7cG9ydDE6dCxwb3J0MjplfT1uZXcgTWVzc2FnZUNoYW5uZWw7cmV0dXJuIGZBKEEsdCksW2UsW2VdXX0sZGVzZXJpYWxpemUoQSl7cmV0dXJuIEEuc3RhcnQoKSxHZShBKX19LFJlPXtjYW5IYW5kbGU6QT0+bHQoQSkmJmFBIGluIEEsc2VyaWFsaXplKHt2YWx1ZTpBfSl7bGV0IHQ7cmV0dXJuIEEgaW5zdGFuY2VvZiBFcnJvcj90PXtpc0Vycm9yOiEwLHZhbHVlOnttZXNzYWdlOkEubWVzc2FnZSxuYW1lOkEubmFtZSxzdGFjazpBLnN0YWNrfX06dD17aXNFcnJvcjohMSx2YWx1ZTpBfSxbdCxbXV19LGRlc2VyaWFsaXplKEEpe3Rocm93IEEuaXNFcnJvcj9PYmplY3QuYXNzaWduKG5ldyBFcnJvcihBLnZhbHVlLm1lc3NhZ2UpLEEudmFsdWUpOkEudmFsdWV9fSx1dD1uZXcgTWFwKFtbInByb3h5IixGZV0sWyJ0aHJvdyIsUmVdXSk7ZnVuY3Rpb24gTmUoQSx0KXtmb3IobGV0IGUgb2YgQSlpZih0PT09ZXx8ZT09PSIqInx8ZSBpbnN0YW5jZW9mIFJlZ0V4cCYmZS50ZXN0KHQpKXJldHVybiEwO3JldHVybiExfWZ1bmN0aW9uIGZBKEEsdD1nbG9iYWxUaGlzLGU9WyIqIl0pe3QuYWRkRXZlbnRMaXN0ZW5lcigibWVzc2FnZSIsZnVuY3Rpb24gSShyKXtpZighcnx8IXIuZGF0YSlyZXR1cm47aWYoIU5lKGUsci5vcmlnaW4pKXtjb25zb2xlLndhcm4oYEludmFsaWQgb3JpZ2luIFwnJHtyLm9yaWdpbn1cJyBmb3IgY29tbGluayBwcm94eWApO3JldHVybn1sZXR7aWQ6byx0eXBlOmcscGF0aDpDfT1PYmplY3QuYXNzaWduKHtwYXRoOltdfSxyLmRhdGEpLFE9KHIuZGF0YS5hcmd1bWVudExpc3R8fFtdKS5tYXAoTyksYTt0cnl7bGV0IG49Qy5zbGljZSgwLC0xKS5yZWR1Y2UoKGYsQik9PmZbQl0sQSkscz1DLnJlZHVjZSgoZixCKT0+ZltCXSxBKTtzd2l0Y2goZyl7Y2FzZSJHRVQiOmE9czticmVhaztjYXNlIlNFVCI6bltDLnNsaWNlKC0xKVswXV09TyhyLmRhdGEudmFsdWUpLGE9ITA7YnJlYWs7Y2FzZSJBUFBMWSI6YT1zLmFwcGx5KG4sUSk7YnJlYWs7Y2FzZSJDT05TVFJVQ1QiOntsZXQgZj1uZXcgcyguLi5RKTthPWJlKGYpfWJyZWFrO2Nhc2UiRU5EUE9JTlQiOntsZXR7cG9ydDE6Zixwb3J0MjpCfT1uZXcgTWVzc2FnZUNoYW5uZWw7ZkEoQSxCKSxhPU1BKGYsW2ZdKX1icmVhaztjYXNlIlJFTEVBU0UiOmE9dm9pZCAwO2JyZWFrO2RlZmF1bHQ6cmV0dXJufX1jYXRjaChuKXthPXt2YWx1ZTpuLFthQV06MH19UHJvbWlzZS5yZXNvbHZlKGEpLmNhdGNoKG49Pih7dmFsdWU6bixbYUFdOjB9KSkudGhlbihuPT57bGV0W3MsZl09Y0Eobik7dC5wb3N0TWVzc2FnZShPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30scykse2lkOm99KSxmKSxnPT09IlJFTEVBU0UiJiYodC5yZW1vdmVFdmVudExpc3RlbmVyKCJtZXNzYWdlIixJKSxEdCh0KSxZQSBpbiBBJiZ0eXBlb2YgQVtZQV09PSJmdW5jdGlvbiImJkFbWUFdKCkpfSkuY2F0Y2gobj0+e2xldFtzLGZdPWNBKHt2YWx1ZTpuZXcgVHlwZUVycm9yKCJVbnNlcmlhbGl6YWJsZSByZXR1cm4gdmFsdWUiKSxbYUFdOjB9KTt0LnBvc3RNZXNzYWdlKE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSxzKSx7aWQ6b30pLGYpfSl9KSx0LnN0YXJ0JiZ0LnN0YXJ0KCl9ZnVuY3Rpb24gVWUoQSl7cmV0dXJuIEEuY29uc3RydWN0b3IubmFtZT09PSJNZXNzYWdlUG9ydCJ9ZnVuY3Rpb24gRHQoQSl7VWUoQSkmJkEuY2xvc2UoKX1mdW5jdGlvbiBHZShBLHQpe3JldHVybiBxQShBLFtdLHQpfWZ1bmN0aW9uIEJBKEEpe2lmKEEpdGhyb3cgbmV3IEVycm9yKCJQcm94eSBoYXMgYmVlbiByZWxlYXNlZCBhbmQgaXMgbm90IHVzZWFibGUiKX1mdW5jdGlvbiBodChBKXtyZXR1cm4gUChBLHt0eXBlOiJSRUxFQVNFIn0pLnRoZW4oKCk9PntEdChBKX0pfXZhciBRQT1uZXcgV2Vha01hcCxFQT0iRmluYWxpemF0aW9uUmVnaXN0cnkiaW4gZ2xvYmFsVGhpcyYmbmV3IEZpbmFsaXphdGlvblJlZ2lzdHJ5KEE9PntsZXQgdD0oUUEuZ2V0KEEpfHwwKS0xO1FBLnNldChBLHQpLHQ9PT0wJiZodChBKX0pO2Z1bmN0aW9uIGtlKEEsdCl7bGV0IGU9KFFBLmdldCh0KXx8MCkrMTtRQS5zZXQodCxlKSxFQSYmRUEucmVnaXN0ZXIoQSx0LEEpfWZ1bmN0aW9uIExlKEEpe0VBJiZFQS51bnJlZ2lzdGVyKEEpfWZ1bmN0aW9uIHFBKEEsdD1bXSxlPWZ1bmN0aW9uKCl7fSl7bGV0IEk9ITEscj1uZXcgUHJveHkoZSx7Z2V0KG8sZyl7aWYoQkEoSSksZz09PVNlKXJldHVybigpPT57TGUociksaHQoQSksST0hMH07aWYoZz09PSJ0aGVuIil7aWYodC5sZW5ndGg9PT0wKXJldHVybnt0aGVuOigpPT5yfTtsZXQgQz1QKEEse3R5cGU6IkdFVCIscGF0aDp0Lm1hcChRPT5RLnRvU3RyaW5nKCkpfSkudGhlbihPKTtyZXR1cm4gQy50aGVuLmJpbmQoQyl9cmV0dXJuIHFBKEEsWy4uLnQsZ10pfSxzZXQobyxnLEMpe0JBKEkpO2xldFtRLGFdPWNBKEMpO3JldHVybiBQKEEse3R5cGU6IlNFVCIscGF0aDpbLi4udCxnXS5tYXAobj0+bi50b1N0cmluZygpKSx2YWx1ZTpRfSxhKS50aGVuKE8pfSxhcHBseShvLGcsQyl7QkEoSSk7bGV0IFE9dFt0Lmxlbmd0aC0xXTtpZihRPT09cGUpcmV0dXJuIFAoQSx7dHlwZToiRU5EUE9JTlQifSkudGhlbihPKTtpZihRPT09ImJpbmQiKXJldHVybiBxQShBLHQuc2xpY2UoMCwtMSkpO2xldFthLG5dPWN0KEMpO3JldHVybiBQKEEse3R5cGU6IkFQUExZIixwYXRoOnQubWFwKHM9PnMudG9TdHJpbmcoKSksYXJndW1lbnRMaXN0OmF9LG4pLnRoZW4oTyl9LGNvbnN0cnVjdChvLGcpe0JBKEkpO2xldFtDLFFdPWN0KGcpO3JldHVybiBQKEEse3R5cGU6IkNPTlNUUlVDVCIscGF0aDp0Lm1hcChhPT5hLnRvU3RyaW5nKCkpLGFyZ3VtZW50TGlzdDpDfSxRKS50aGVuKE8pfX0pO3JldHVybiBrZShyLEEpLHJ9ZnVuY3Rpb24gSmUoQSl7cmV0dXJuIEFycmF5LnByb3RvdHlwZS5jb25jYXQuYXBwbHkoW10sQSl9ZnVuY3Rpb24gY3QoQSl7bGV0IHQ9QS5tYXAoY0EpO3JldHVyblt0Lm1hcChlPT5lWzBdKSxKZSh0Lm1hcChlPT5lWzFdKSldfXZhciBkdD1uZXcgV2Vha01hcDtmdW5jdGlvbiBNQShBLHQpe3JldHVybiBkdC5zZXQoQSx0KSxBfWZ1bmN0aW9uIGJlKEEpe3JldHVybiBPYmplY3QuYXNzaWduKEEse1tmdF06ITB9KX1mdW5jdGlvbiBjQShBKXtmb3IobGV0W3QsZV1vZiB1dClpZihlLmNhbkhhbmRsZShBKSl7bGV0W0kscl09ZS5zZXJpYWxpemUoQSk7cmV0dXJuW3t0eXBlOiJIQU5ETEVSIixuYW1lOnQsdmFsdWU6SX0scl19cmV0dXJuW3t0eXBlOiJSQVciLHZhbHVlOkF9LGR0LmdldChBKXx8W11dfWZ1bmN0aW9uIE8oQSl7c3dpdGNoKEEudHlwZSl7Y2FzZSJIQU5ETEVSIjpyZXR1cm4gdXQuZ2V0KEEubmFtZSkuZGVzZXJpYWxpemUoQS52YWx1ZSk7Y2FzZSJSQVciOnJldHVybiBBLnZhbHVlfX1mdW5jdGlvbiBQKEEsdCxlKXtyZXR1cm4gbmV3IFByb21pc2UoST0+e2xldCByPUhlKCk7QS5hZGRFdmVudExpc3RlbmVyKCJtZXNzYWdlIixmdW5jdGlvbiBvKGcpeyFnLmRhdGF8fCFnLmRhdGEuaWR8fGcuZGF0YS5pZCE9PXJ8fChBLnJlbW92ZUV2ZW50TGlzdGVuZXIoIm1lc3NhZ2UiLG8pLEkoZy5kYXRhKSl9KSxBLnN0YXJ0JiZBLnN0YXJ0KCksQS5wb3N0TWVzc2FnZShPYmplY3QuYXNzaWduKHtpZDpyfSx0KSxlKX0pfWZ1bmN0aW9uIEhlKCl7cmV0dXJuIG5ldyBBcnJheSg0KS5maWxsKDApLm1hcCgoKT0+TWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpKk51bWJlci5NQVhfU0FGRV9JTlRFR0VSKS50b1N0cmluZygxNikpLmpvaW4oIi0iKX1mdW5jdGlvbiB2KEEsdCl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIEEuYXBwbHkodCxhcmd1bWVudHMpfX12YXJ7dG9TdHJpbmc6WWV9PU9iamVjdC5wcm90b3R5cGUse2dldFByb3RvdHlwZU9mOk9BfT1PYmplY3QsdUE9KEE9PnQ9PntsZXQgZT1ZZS5jYWxsKHQpO3JldHVybiBBW2VdfHwoQVtlXT1lLnNsaWNlKDgsLTEpLnRvTG93ZXJDYXNlKCkpfSkoT2JqZWN0LmNyZWF0ZShudWxsKSksRz1BPT4oQT1BLnRvTG93ZXJDYXNlKCksdD0+dUEodCk9PT1BKSxEQT1BPT50PT50eXBlb2YgdD09PUEse2lzQXJyYXk6an09QXJyYXksJD1EQSgidW5kZWZpbmVkIik7ZnVuY3Rpb24gcWUoQSl7cmV0dXJuIEEhPT1udWxsJiYhJChBKSYmQS5jb25zdHJ1Y3RvciE9PW51bGwmJiEkKEEuY29uc3RydWN0b3IpJiZOKEEuY29uc3RydWN0b3IuaXNCdWZmZXIpJiZBLmNvbnN0cnVjdG9yLmlzQnVmZmVyKEEpfXZhciBwdD1HKCJBcnJheUJ1ZmZlciIpO2Z1bmN0aW9uIE1lKEEpe2xldCB0O3JldHVybiB0eXBlb2YgQXJyYXlCdWZmZXI8InUiJiZBcnJheUJ1ZmZlci5pc1ZpZXc/dD1BcnJheUJ1ZmZlci5pc1ZpZXcoQSk6dD1BJiZBLmJ1ZmZlciYmcHQoQS5idWZmZXIpLHR9dmFyIFRlPURBKCJzdHJpbmciKSxOPURBKCJmdW5jdGlvbiIpLFN0PURBKCJudW1iZXIiKSxoQT1BPT5BIT09bnVsbCYmdHlwZW9mIEE9PSJvYmplY3QiLEtlPUE9PkE9PT0hMHx8QT09PSExLGxBPUE9PntpZih1QShBKSE9PSJvYmplY3QiKXJldHVybiExO2xldCB0PU9BKEEpO3JldHVybih0PT09bnVsbHx8dD09PU9iamVjdC5wcm90b3R5cGV8fE9iamVjdC5nZXRQcm90b3R5cGVPZih0KT09PW51bGwpJiYhKFN5bWJvbC50b1N0cmluZ1RhZyBpbiBBKSYmIShTeW1ib2wuaXRlcmF0b3IgaW4gQSl9LE9lPUcoIkRhdGUiKSx4ZT1HKCJGaWxlIiksUGU9RygiQmxvYiIpLGplPUcoIkZpbGVMaXN0IiksV2U9QT0+aEEoQSkmJk4oQS5waXBlKSxaZT1BPT57bGV0IHQ7cmV0dXJuIEEmJih0eXBlb2YgRm9ybURhdGE9PSJmdW5jdGlvbiImJkEgaW5zdGFuY2VvZiBGb3JtRGF0YXx8TihBLmFwcGVuZCkmJigodD11QShBKSk9PT0iZm9ybWRhdGEifHx0PT09Im9iamVjdCImJk4oQS50b1N0cmluZykmJkEudG9TdHJpbmcoKT09PSJbb2JqZWN0IEZvcm1EYXRhXSIpKX0sVmU9RygiVVJMU2VhcmNoUGFyYW1zIiksW19lLFhlLHplLHZlXT1bIlJlYWRhYmxlU3RyZWFtIiwiUmVxdWVzdCIsIlJlc3BvbnNlIiwiSGVhZGVycyJdLm1hcChHKSwkZT1BPT5BLnRyaW0/QS50cmltKCk6QS5yZXBsYWNlKC9eW1xcc1xcdUZFRkZcXHhBMF0rfFtcXHNcXHVGRUZGXFx4QTBdKyQvZywiIik7ZnVuY3Rpb24gQUEoQSx0LHthbGxPd25LZXlzOmU9ITF9PXt9KXtpZihBPT09bnVsbHx8dHlwZW9mIEE+InUiKXJldHVybjtsZXQgSSxyO2lmKHR5cGVvZiBBIT0ib2JqZWN0IiYmKEE9W0FdKSxqKEEpKWZvcihJPTAscj1BLmxlbmd0aDtJPHI7SSsrKXQuY2FsbChudWxsLEFbSV0sSSxBKTtlbHNle2xldCBvPWU/T2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoQSk6T2JqZWN0LmtleXMoQSksZz1vLmxlbmd0aCxDO2ZvcihJPTA7STxnO0krKylDPW9bSV0sdC5jYWxsKG51bGwsQVtDXSxDLEEpfX1mdW5jdGlvbiBGdChBLHQpe3Q9dC50b0xvd2VyQ2FzZSgpO2xldCBlPU9iamVjdC5rZXlzKEEpLEk9ZS5sZW5ndGgscjtmb3IoO0ktLSA+MDspaWYocj1lW0ldLHQ9PT1yLnRvTG93ZXJDYXNlKCkpcmV0dXJuIHI7cmV0dXJuIG51bGx9dmFyIHg9dHlwZW9mIGdsb2JhbFRoaXM8InUiP2dsb2JhbFRoaXM6dHlwZW9mIHNlbGY8InUiP3NlbGY6dHlwZW9mIHdpbmRvdzwidSI/d2luZG93Omdsb2JhbCxSdD1BPT4hJChBKSYmQSE9PXg7ZnVuY3Rpb24gS0EoKXtsZXR7Y2FzZWxlc3M6QX09UnQodGhpcykmJnRoaXN8fHt9LHQ9e30sZT0oSSxyKT0+e2xldCBvPUEmJkZ0KHQscil8fHI7bEEodFtvXSkmJmxBKEkpP3Rbb109S0EodFtvXSxJKTpsQShJKT90W29dPUtBKHt9LEkpOmooSSk/dFtvXT1JLnNsaWNlKCk6dFtvXT1JfTtmb3IobGV0IEk9MCxyPWFyZ3VtZW50cy5sZW5ndGg7STxyO0krKylhcmd1bWVudHNbSV0mJkFBKGFyZ3VtZW50c1tJXSxlKTtyZXR1cm4gdH12YXIgQUk9KEEsdCxlLHthbGxPd25LZXlzOkl9PXt9KT0+KEFBKHQsKHIsbyk9PntlJiZOKHIpP0Fbb109dihyLGUpOkFbb109cn0se2FsbE93bktleXM6SX0pLEEpLHRJPUE9PihBLmNoYXJDb2RlQXQoMCk9PT02NTI3OSYmKEE9QS5zbGljZSgxKSksQSksZUk9KEEsdCxlLEkpPT57QS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh0LnByb3RvdHlwZSxJKSxBLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1BLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShBLCJzdXBlciIse3ZhbHVlOnQucHJvdG90eXBlfSksZSYmT2JqZWN0LmFzc2lnbihBLnByb3RvdHlwZSxlKX0sSUk9KEEsdCxlLEkpPT57bGV0IHIsbyxnLEM9e307aWYodD10fHx7fSxBPT1udWxsKXJldHVybiB0O2Rve2ZvcihyPU9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKEEpLG89ci5sZW5ndGg7by0tID4wOylnPXJbb10sKCFJfHxJKGcsQSx0KSkmJiFDW2ddJiYodFtnXT1BW2ddLENbZ109ITApO0E9ZSE9PSExJiZPQShBKX13aGlsZShBJiYoIWV8fGUoQSx0KSkmJkEhPT1PYmplY3QucHJvdG90eXBlKTtyZXR1cm4gdH0sckk9KEEsdCxlKT0+e0E9U3RyaW5nKEEpLChlPT09dm9pZCAwfHxlPkEubGVuZ3RoKSYmKGU9QS5sZW5ndGgpLGUtPXQubGVuZ3RoO2xldCBJPUEuaW5kZXhPZih0LGUpO3JldHVybiBJIT09LTEmJkk9PT1lfSxvST1BPT57aWYoIUEpcmV0dXJuIG51bGw7aWYoaihBKSlyZXR1cm4gQTtsZXQgdD1BLmxlbmd0aDtpZighU3QodCkpcmV0dXJuIG51bGw7bGV0IGU9bmV3IEFycmF5KHQpO2Zvcig7dC0tID4wOyllW3RdPUFbdF07cmV0dXJuIGV9LGdJPShBPT50PT5BJiZ0IGluc3RhbmNlb2YgQSkodHlwZW9mIFVpbnQ4QXJyYXk8InUiJiZPQShVaW50OEFycmF5KSksaUk9KEEsdCk9PntsZXQgST0oQSYmQVtTeW1ib2wuaXRlcmF0b3JdKS5jYWxsKEEpLHI7Zm9yKDsocj1JLm5leHQoKSkmJiFyLmRvbmU7KXtsZXQgbz1yLnZhbHVlO3QuY2FsbChBLG9bMF0sb1sxXSl9fSxuST0oQSx0KT0+e2xldCBlLEk9W107Zm9yKDsoZT1BLmV4ZWModCkpIT09bnVsbDspSS5wdXNoKGUpO3JldHVybiBJfSxzST1HKCJIVE1MRm9ybUVsZW1lbnQiKSxDST1BPT5BLnRvTG93ZXJDYXNlKCkucmVwbGFjZSgvWy1fXFxzXShbYS16XFxkXSkoXFx3KikvZyxmdW5jdGlvbihlLEkscil7cmV0dXJuIEkudG9VcHBlckNhc2UoKStyfSksbXQ9KCh7aGFzT3duUHJvcGVydHk6QX0pPT4odCxlKT0+QS5jYWxsKHQsZSkpKE9iamVjdC5wcm90b3R5cGUpLEJJPUcoIlJlZ0V4cCIpLE50PShBLHQpPT57bGV0IGU9T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMoQSksST17fTtBQShlLChyLG8pPT57bGV0IGc7KGc9dChyLG8sQSkpIT09ITEmJihJW29dPWd8fHIpfSksT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoQSxJKX0sYUk9QT0+e050KEEsKHQsZSk9PntpZihOKEEpJiZbImFyZ3VtZW50cyIsImNhbGxlciIsImNhbGxlZSJdLmluZGV4T2YoZSkhPT0tMSlyZXR1cm4hMTtsZXQgST1BW2VdO2lmKE4oSSkpe2lmKHQuZW51bWVyYWJsZT0hMSwid3JpdGFibGUiaW4gdCl7dC53cml0YWJsZT0hMTtyZXR1cm59dC5zZXR8fCh0LnNldD0oKT0+e3Rocm93IEVycm9yKCJDYW4gbm90IHJld3JpdGUgcmVhZC1vbmx5IG1ldGhvZCBcJyIrZSsiXCciKX0pfX0pfSxRST0oQSx0KT0+e2xldCBlPXt9LEk9cj0+e3IuZm9yRWFjaChvPT57ZVtvXT0hMH0pfTtyZXR1cm4gaihBKT9JKEEpOkkoU3RyaW5nKEEpLnNwbGl0KHQpKSxlfSxFST0oKT0+e30sY0k9KEEsdCk9PkEhPW51bGwmJk51bWJlci5pc0Zpbml0ZShBPStBKT9BOnQsVEE9ImFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6Iix3dD0iMDEyMzQ1Njc4OSIsVXQ9e0RJR0lUOnd0LEFMUEhBOlRBLEFMUEhBX0RJR0lUOlRBK1RBLnRvVXBwZXJDYXNlKCkrd3R9LGZJPShBPTE2LHQ9VXQuQUxQSEFfRElHSVQpPT57bGV0IGU9IiIse2xlbmd0aDpJfT10O2Zvcig7QS0tOyllKz10W01hdGgucmFuZG9tKCkqSXwwXTtyZXR1cm4gZX07ZnVuY3Rpb24gbEkoQSl7cmV0dXJuISEoQSYmTihBLmFwcGVuZCkmJkFbU3ltYm9sLnRvU3RyaW5nVGFnXT09PSJGb3JtRGF0YSImJkFbU3ltYm9sLml0ZXJhdG9yXSl9dmFyIHVJPUE9PntsZXQgdD1uZXcgQXJyYXkoMTApLGU9KEkscik9PntpZihoQShJKSl7aWYodC5pbmRleE9mKEkpPj0wKXJldHVybjtpZighKCJ0b0pTT04iaW4gSSkpe3Rbcl09STtsZXQgbz1qKEkpP1tdOnt9O3JldHVybiBBQShJLChnLEMpPT57bGV0IFE9ZShnLHIrMSk7ISQoUSkmJihvW0NdPVEpfSksdFtyXT12b2lkIDAsb319cmV0dXJuIEl9O3JldHVybiBlKEEsMCl9LERJPUcoIkFzeW5jRnVuY3Rpb24iKSxoST1BPT5BJiYoaEEoQSl8fE4oQSkpJiZOKEEudGhlbikmJk4oQS5jYXRjaCksR3Q9KChBLHQpPT5BP3NldEltbWVkaWF0ZTp0PygoZSxJKT0+KHguYWRkRXZlbnRMaXN0ZW5lcigibWVzc2FnZSIsKHtzb3VyY2U6cixkYXRhOm99KT0+e3I9PT14JiZvPT09ZSYmSS5sZW5ndGgmJkkuc2hpZnQoKSgpfSwhMSkscj0+e0kucHVzaChyKSx4LnBvc3RNZXNzYWdlKGUsIioiKX0pKShgYXhpb3NAJHtNYXRoLnJhbmRvbSgpfWAsW10pOmU9PnNldFRpbWVvdXQoZSkpKHR5cGVvZiBzZXRJbW1lZGlhdGU9PSJmdW5jdGlvbiIsTih4LnBvc3RNZXNzYWdlKSksZEk9dHlwZW9mIHF1ZXVlTWljcm90YXNrPCJ1Ij9xdWV1ZU1pY3JvdGFzay5iaW5kKHgpOnR5cGVvZiBwcm9jZXNzPCJ1IiYmcHJvY2Vzcy5uZXh0VGlja3x8R3QsaT17aXNBcnJheTpqLGlzQXJyYXlCdWZmZXI6cHQsaXNCdWZmZXI6cWUsaXNGb3JtRGF0YTpaZSxpc0FycmF5QnVmZmVyVmlldzpNZSxpc1N0cmluZzpUZSxpc051bWJlcjpTdCxpc0Jvb2xlYW46S2UsaXNPYmplY3Q6aEEsaXNQbGFpbk9iamVjdDpsQSxpc1JlYWRhYmxlU3RyZWFtOl9lLGlzUmVxdWVzdDpYZSxpc1Jlc3BvbnNlOnplLGlzSGVhZGVyczp2ZSxpc1VuZGVmaW5lZDokLGlzRGF0ZTpPZSxpc0ZpbGU6eGUsaXNCbG9iOlBlLGlzUmVnRXhwOkJJLGlzRnVuY3Rpb246Tixpc1N0cmVhbTpXZSxpc1VSTFNlYXJjaFBhcmFtczpWZSxpc1R5cGVkQXJyYXk6Z0ksaXNGaWxlTGlzdDpqZSxmb3JFYWNoOkFBLG1lcmdlOktBLGV4dGVuZDpBSSx0cmltOiRlLHN0cmlwQk9NOnRJLGluaGVyaXRzOmVJLHRvRmxhdE9iamVjdDpJSSxraW5kT2Y6dUEsa2luZE9mVGVzdDpHLGVuZHNXaXRoOnJJLHRvQXJyYXk6b0ksZm9yRWFjaEVudHJ5OmlJLG1hdGNoQWxsOm5JLGlzSFRNTEZvcm06c0ksaGFzT3duUHJvcGVydHk6bXQsaGFzT3duUHJvcDptdCxyZWR1Y2VEZXNjcmlwdG9yczpOdCxmcmVlemVNZXRob2RzOmFJLHRvT2JqZWN0U2V0OlFJLHRvQ2FtZWxDYXNlOkNJLG5vb3A6RUksdG9GaW5pdGVOdW1iZXI6Y0ksZmluZEtleTpGdCxnbG9iYWw6eCxpc0NvbnRleHREZWZpbmVkOlJ0LEFMUEhBQkVUOlV0LGdlbmVyYXRlU3RyaW5nOmZJLGlzU3BlY0NvbXBsaWFudEZvcm06bEksdG9KU09OT2JqZWN0OnVJLGlzQXN5bmNGbjpESSxpc1RoZW5hYmxlOmhJLHNldEltbWVkaWF0ZTpHdCxhc2FwOmRJfTtmdW5jdGlvbiBXKEEsdCxlLEkscil7RXJyb3IuY2FsbCh0aGlzKSxFcnJvci5jYXB0dXJlU3RhY2tUcmFjZT9FcnJvci5jYXB0dXJlU3RhY2tUcmFjZSh0aGlzLHRoaXMuY29uc3RydWN0b3IpOnRoaXMuc3RhY2s9bmV3IEVycm9yKCkuc3RhY2ssdGhpcy5tZXNzYWdlPUEsdGhpcy5uYW1lPSJBeGlvc0Vycm9yIix0JiYodGhpcy5jb2RlPXQpLGUmJih0aGlzLmNvbmZpZz1lKSxJJiYodGhpcy5yZXF1ZXN0PUkpLHImJih0aGlzLnJlc3BvbnNlPXIpfWkuaW5oZXJpdHMoVyxFcnJvcix7dG9KU09OOmZ1bmN0aW9uKCl7cmV0dXJue21lc3NhZ2U6dGhpcy5tZXNzYWdlLG5hbWU6dGhpcy5uYW1lLGRlc2NyaXB0aW9uOnRoaXMuZGVzY3JpcHRpb24sbnVtYmVyOnRoaXMubnVtYmVyLGZpbGVOYW1lOnRoaXMuZmlsZU5hbWUsbGluZU51bWJlcjp0aGlzLmxpbmVOdW1iZXIsY29sdW1uTnVtYmVyOnRoaXMuY29sdW1uTnVtYmVyLHN0YWNrOnRoaXMuc3RhY2ssY29uZmlnOmkudG9KU09OT2JqZWN0KHRoaXMuY29uZmlnKSxjb2RlOnRoaXMuY29kZSxzdGF0dXM6dGhpcy5yZXNwb25zZSYmdGhpcy5yZXNwb25zZS5zdGF0dXM/dGhpcy5yZXNwb25zZS5zdGF0dXM6bnVsbH19fSk7dmFyIGt0PVcucHJvdG90eXBlLEx0PXt9O1siRVJSX0JBRF9PUFRJT05fVkFMVUUiLCJFUlJfQkFEX09QVElPTiIsIkVDT05OQUJPUlRFRCIsIkVUSU1FRE9VVCIsIkVSUl9ORVRXT1JLIiwiRVJSX0ZSX1RPT19NQU5ZX1JFRElSRUNUUyIsIkVSUl9ERVBSRUNBVEVEIiwiRVJSX0JBRF9SRVNQT05TRSIsIkVSUl9CQURfUkVRVUVTVCIsIkVSUl9DQU5DRUxFRCIsIkVSUl9OT1RfU1VQUE9SVCIsIkVSUl9JTlZBTElEX1VSTCJdLmZvckVhY2goQT0+e0x0W0FdPXt2YWx1ZTpBfX0pO09iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKFcsTHQpO09iamVjdC5kZWZpbmVQcm9wZXJ0eShrdCwiaXNBeGlvc0Vycm9yIix7dmFsdWU6ITB9KTtXLmZyb209KEEsdCxlLEkscixvKT0+e2xldCBnPU9iamVjdC5jcmVhdGUoa3QpO3JldHVybiBpLnRvRmxhdE9iamVjdChBLGcsZnVuY3Rpb24oUSl7cmV0dXJuIFEhPT1FcnJvci5wcm90b3R5cGV9LEM9PkMhPT0iaXNBeGlvc0Vycm9yIiksVy5jYWxsKGcsQS5tZXNzYWdlLHQsZSxJLHIpLGcuY2F1c2U9QSxnLm5hbWU9QS5uYW1lLG8mJk9iamVjdC5hc3NpZ24oZyxvKSxnfTt2YXIgdT1XO3ZhciBkQT1udWxsO2Z1bmN0aW9uIHhBKEEpe3JldHVybiBpLmlzUGxhaW5PYmplY3QoQSl8fGkuaXNBcnJheShBKX1mdW5jdGlvbiBidChBKXtyZXR1cm4gaS5lbmRzV2l0aChBLCJbXSIpP0Euc2xpY2UoMCwtMik6QX1mdW5jdGlvbiBKdChBLHQsZSl7cmV0dXJuIEE/QS5jb25jYXQodCkubWFwKGZ1bmN0aW9uKHIsbyl7cmV0dXJuIHI9YnQociksIWUmJm8/IlsiK3IrIl0iOnJ9KS5qb2luKGU/Ii4iOiIiKTp0fWZ1bmN0aW9uIHlJKEEpe3JldHVybiBpLmlzQXJyYXkoQSkmJiFBLnNvbWUoeEEpfXZhciBtST1pLnRvRmxhdE9iamVjdChpLHt9LG51bGwsZnVuY3Rpb24odCl7cmV0dXJuL15pc1tBLVpdLy50ZXN0KHQpfSk7ZnVuY3Rpb24gd0koQSx0LGUpe2lmKCFpLmlzT2JqZWN0KEEpKXRocm93IG5ldyBUeXBlRXJyb3IoInRhcmdldCBtdXN0IGJlIGFuIG9iamVjdCIpO3Q9dHx8bmV3KGRBfHxGb3JtRGF0YSksZT1pLnRvRmxhdE9iamVjdChlLHttZXRhVG9rZW5zOiEwLGRvdHM6ITEsaW5kZXhlczohMX0sITEsZnVuY3Rpb24obCxjKXtyZXR1cm4haS5pc1VuZGVmaW5lZChjW2xdKX0pO2xldCBJPWUubWV0YVRva2VucyxyPWUudmlzaXRvcnx8bixvPWUuZG90cyxnPWUuaW5kZXhlcyxRPShlLkJsb2J8fHR5cGVvZiBCbG9iPCJ1IiYmQmxvYikmJmkuaXNTcGVjQ29tcGxpYW50Rm9ybSh0KTtpZighaS5pc0Z1bmN0aW9uKHIpKXRocm93IG5ldyBUeXBlRXJyb3IoInZpc2l0b3IgbXVzdCBiZSBhIGZ1bmN0aW9uIik7ZnVuY3Rpb24gYShFKXtpZihFPT09bnVsbClyZXR1cm4iIjtpZihpLmlzRGF0ZShFKSlyZXR1cm4gRS50b0lTT1N0cmluZygpO2lmKCFRJiZpLmlzQmxvYihFKSl0aHJvdyBuZXcgdSgiQmxvYiBpcyBub3Qgc3VwcG9ydGVkLiBVc2UgYSBCdWZmZXIgaW5zdGVhZC4iKTtyZXR1cm4gaS5pc0FycmF5QnVmZmVyKEUpfHxpLmlzVHlwZWRBcnJheShFKT9RJiZ0eXBlb2YgQmxvYj09ImZ1bmN0aW9uIj9uZXcgQmxvYihbRV0pOkJ1ZmZlci5mcm9tKEUpOkV9ZnVuY3Rpb24gbihFLGwsYyl7bGV0IHA9RTtpZihFJiYhYyYmdHlwZW9mIEU9PSJvYmplY3QiKXtpZihpLmVuZHNXaXRoKGwsInt9IikpbD1JP2w6bC5zbGljZSgwLC0yKSxFPUpTT04uc3RyaW5naWZ5KEUpO2Vsc2UgaWYoaS5pc0FycmF5KEUpJiZ5SShFKXx8KGkuaXNGaWxlTGlzdChFKXx8aS5lbmRzV2l0aChsLCJbXSIpKSYmKHA9aS50b0FycmF5KEUpKSlyZXR1cm4gbD1idChsKSxwLmZvckVhY2goZnVuY3Rpb24oRCxVKXshKGkuaXNVbmRlZmluZWQoRCl8fEQ9PT1udWxsKSYmdC5hcHBlbmQoZz09PSEwP0p0KFtsXSxVLG8pOmc9PT1udWxsP2w6bCsiW10iLGEoRCkpfSksITF9cmV0dXJuIHhBKEUpPyEwOih0LmFwcGVuZChKdChjLGwsbyksYShFKSksITEpfWxldCBzPVtdLGY9T2JqZWN0LmFzc2lnbihtSSx7ZGVmYXVsdFZpc2l0b3I6bixjb252ZXJ0VmFsdWU6YSxpc1Zpc2l0YWJsZTp4QX0pO2Z1bmN0aW9uIEIoRSxsKXtpZighaS5pc1VuZGVmaW5lZChFKSl7aWYocy5pbmRleE9mKEUpIT09LTEpdGhyb3cgRXJyb3IoIkNpcmN1bGFyIHJlZmVyZW5jZSBkZXRlY3RlZCBpbiAiK2wuam9pbigiLiIpKTtzLnB1c2goRSksaS5mb3JFYWNoKEUsZnVuY3Rpb24ocCxTKXsoIShpLmlzVW5kZWZpbmVkKHApfHxwPT09bnVsbCkmJnIuY2FsbCh0LHAsaS5pc1N0cmluZyhTKT9TLnRyaW0oKTpTLGwsZikpPT09ITAmJkIocCxsP2wuY29uY2F0KFMpOltTXSl9KSxzLnBvcCgpfX1pZighaS5pc09iamVjdChBKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJkYXRhIG11c3QgYmUgYW4gb2JqZWN0Iik7cmV0dXJuIEIoQSksdH12YXIgcT13STtmdW5jdGlvbiBIdChBKXtsZXQgdD17IiEiOiIlMjUyMSIsIlwnIjoiJTI1MjciLCIoIjoiJTI1MjgiLCIpIjoiJTI1MjkiLCJ+IjoiJTI1N0UiLCIlMjUyMCI6IisiLCIlMjUwMCI6IlxcMCJ9O3JldHVybiBlbmNvZGVVUklDb21wb25lbnQoQSkucmVwbGFjZSgvWyFcJygpfl18JTI1MjB8JTI1MDAvZyxmdW5jdGlvbihJKXtyZXR1cm4gdFtJXX0pfWZ1bmN0aW9uIFl0KEEsdCl7dGhpcy5fcGFpcnM9W10sQSYmcShBLHRoaXMsdCl9dmFyIHF0PVl0LnByb3RvdHlwZTtxdC5hcHBlbmQ9ZnVuY3Rpb24odCxlKXt0aGlzLl9wYWlycy5wdXNoKFt0LGVdKX07cXQudG9TdHJpbmc9ZnVuY3Rpb24odCl7bGV0IGU9dD9mdW5jdGlvbihJKXtyZXR1cm4gdC5jYWxsKHRoaXMsSSxIdCl9Okh0O3JldHVybiB0aGlzLl9wYWlycy5tYXAoZnVuY3Rpb24ocil7cmV0dXJuIGUoclswXSkrIj0iK2UoclsxXSl9LCIiKS5qb2luKCImIil9O3ZhciB5QT1ZdDtmdW5jdGlvbiBwSShBKXtyZXR1cm4gZW5jb2RlVVJJQ29tcG9uZW50KEEpLnJlcGxhY2UoLyUyNTNBL2dpLCI6IikucmVwbGFjZSgvJTI1MjQvZywiJCIpLnJlcGxhY2UoLyUyNTJDL2dpLCIsIikucmVwbGFjZSgvJTI1MjAvZywiKyIpLnJlcGxhY2UoLyUyNTVCL2dpLCJbIikucmVwbGFjZSgvJTI1NUQvZ2ksIl0iKX1mdW5jdGlvbiB0QShBLHQsZSl7aWYoIXQpcmV0dXJuIEE7bGV0IEk9ZSYmZS5lbmNvZGV8fHBJLHI9ZSYmZS5zZXJpYWxpemUsbztpZihyP289cih0LGUpOm89aS5pc1VSTFNlYXJjaFBhcmFtcyh0KT90LnRvU3RyaW5nKCk6bmV3IHlBKHQsZSkudG9TdHJpbmcoSSksbyl7bGV0IGc9QS5pbmRleE9mKCIlMjMiKTtnIT09LTEmJihBPUEuc2xpY2UoMCxnKSksQSs9KEEuaW5kZXhPZigiPyIpPT09LTE/Ij8iOiImIikrb31yZXR1cm4gQX12YXIgUEE9Y2xhc3N7Y29uc3RydWN0b3IoKXt0aGlzLmhhbmRsZXJzPVtdfXVzZSh0LGUsSSl7cmV0dXJuIHRoaXMuaGFuZGxlcnMucHVzaCh7ZnVsZmlsbGVkOnQscmVqZWN0ZWQ6ZSxzeW5jaHJvbm91czpJP0kuc3luY2hyb25vdXM6ITEscnVuV2hlbjpJP0kucnVuV2hlbjpudWxsfSksdGhpcy5oYW5kbGVycy5sZW5ndGgtMX1lamVjdCh0KXt0aGlzLmhhbmRsZXJzW3RdJiYodGhpcy5oYW5kbGVyc1t0XT1udWxsKX1jbGVhcigpe3RoaXMuaGFuZGxlcnMmJih0aGlzLmhhbmRsZXJzPVtdKX1mb3JFYWNoKHQpe2kuZm9yRWFjaCh0aGlzLmhhbmRsZXJzLGZ1bmN0aW9uKEkpe0khPT1udWxsJiZ0KEkpfSl9fSxqQT1QQTt2YXIgbUE9e3NpbGVudEpTT05QYXJzaW5nOiEwLGZvcmNlZEpTT05QYXJzaW5nOiEwLGNsYXJpZnlUaW1lb3V0RXJyb3I6ITF9O3ZhciBNdD10eXBlb2YgVVJMU2VhcmNoUGFyYW1zPCJ1Ij9VUkxTZWFyY2hQYXJhbXM6eUE7dmFyIFR0PXR5cGVvZiBGb3JtRGF0YTwidSI/Rm9ybURhdGE6bnVsbDt2YXIgS3Q9dHlwZW9mIEJsb2I8InUiP0Jsb2I6bnVsbDt2YXIgT3Q9e2lzQnJvd3NlcjohMCxjbGFzc2VzOntVUkxTZWFyY2hQYXJhbXM6TXQsRm9ybURhdGE6VHQsQmxvYjpLdH0scHJvdG9jb2xzOlsiaHR0cCIsImh0dHBzIiwiZmlsZSIsImJsb2IiLCJ1cmwiLCJkYXRhIl19O3ZhciBaQT17fTt3ZShaQSx7aGFzQnJvd3NlckVudjooKT0+V0EsaGFzU3RhbmRhcmRCcm93c2VyRW52OigpPT5TSSxoYXNTdGFuZGFyZEJyb3dzZXJXZWJXb3JrZXJFbnY6KCk9PkZJLG9yaWdpbjooKT0+Ukl9KTt2YXIgV0E9dHlwZW9mIHdpbmRvdzwidSImJnR5cGVvZiBkb2N1bWVudDwidSIsU0k9KEE9PldBJiZbIlJlYWN0TmF0aXZlIiwiTmF0aXZlU2NyaXB0IiwiTlMiXS5pbmRleE9mKEEpPDApKHR5cGVvZiBuYXZpZ2F0b3I8InUiJiZuYXZpZ2F0b3IucHJvZHVjdCksRkk9dHlwZW9mIFdvcmtlckdsb2JhbFNjb3BlPCJ1IiYmc2VsZiBpbnN0YW5jZW9mIFdvcmtlckdsb2JhbFNjb3BlJiZ0eXBlb2Ygc2VsZi5pbXBvcnRTY3JpcHRzPT0iZnVuY3Rpb24iLFJJPVdBJiZ3aW5kb3cubG9jYXRpb24uaHJlZnx8Imh0dHA6Ly9sb2NhbGhvc3QiO3ZhciB3PXsuLi5aQSwuLi5PdH07ZnVuY3Rpb24gVkEoQSx0KXtyZXR1cm4gcShBLG5ldyB3LmNsYXNzZXMuVVJMU2VhcmNoUGFyYW1zLE9iamVjdC5hc3NpZ24oe3Zpc2l0b3I6ZnVuY3Rpb24oZSxJLHIsbyl7cmV0dXJuIHcuaXNOb2RlJiZpLmlzQnVmZmVyKGUpPyh0aGlzLmFwcGVuZChJLGUudG9TdHJpbmcoImJhc2U2NCIpKSwhMSk6by5kZWZhdWx0VmlzaXRvci5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSx0KSl9ZnVuY3Rpb24gTkkoQSl7cmV0dXJuIGkubWF0Y2hBbGwoL1xcdyt8XFxbKFxcdyopXS9nLEEpLm1hcCh0PT50WzBdPT09IltdIj8iIjp0WzFdfHx0WzBdKX1mdW5jdGlvbiBVSShBKXtsZXQgdD17fSxlPU9iamVjdC5rZXlzKEEpLEkscj1lLmxlbmd0aCxvO2ZvcihJPTA7STxyO0krKylvPWVbSV0sdFtvXT1BW29dO3JldHVybiB0fWZ1bmN0aW9uIEdJKEEpe2Z1bmN0aW9uIHQoZSxJLHIsbyl7bGV0IGc9ZVtvKytdO2lmKGc9PT0iX19wcm90b19fIilyZXR1cm4hMDtsZXQgQz1OdW1iZXIuaXNGaW5pdGUoK2cpLFE9bz49ZS5sZW5ndGg7cmV0dXJuIGc9IWcmJmkuaXNBcnJheShyKT9yLmxlbmd0aDpnLFE/KGkuaGFzT3duUHJvcChyLGcpP3JbZ109W3JbZ10sSV06cltnXT1JLCFDKTooKCFyW2ddfHwhaS5pc09iamVjdChyW2ddKSkmJihyW2ddPVtdKSx0KGUsSSxyW2ddLG8pJiZpLmlzQXJyYXkocltnXSkmJihyW2ddPVVJKHJbZ10pKSwhQyl9aWYoaS5pc0Zvcm1EYXRhKEEpJiZpLmlzRnVuY3Rpb24oQS5lbnRyaWVzKSl7bGV0IGU9e307cmV0dXJuIGkuZm9yRWFjaEVudHJ5KEEsKEkscik9Pnt0KE5JKEkpLHIsZSwwKX0pLGV9cmV0dXJuIG51bGx9dmFyIHdBPUdJO2Z1bmN0aW9uIGtJKEEsdCxlKXtpZihpLmlzU3RyaW5nKEEpKXRyeXtyZXR1cm4odHx8SlNPTi5wYXJzZSkoQSksaS50cmltKEEpfWNhdGNoKEkpe2lmKEkubmFtZSE9PSJTeW50YXhFcnJvciIpdGhyb3cgSX1yZXR1cm4oZXx8SlNPTi5zdHJpbmdpZnkpKEEpfXZhciBfQT17dHJhbnNpdGlvbmFsOm1BLGFkYXB0ZXI6WyJ4aHIiLCJodHRwIiwiZmV0Y2giXSx0cmFuc2Zvcm1SZXF1ZXN0OltmdW5jdGlvbih0LGUpe2xldCBJPWUuZ2V0Q29udGVudFR5cGUoKXx8IiIscj1JLmluZGV4T2YoImFwcGxpY2F0aW9uL2pzb24iKT4tMSxvPWkuaXNPYmplY3QodCk7aWYobyYmaS5pc0hUTUxGb3JtKHQpJiYodD1uZXcgRm9ybURhdGEodCkpLGkuaXNGb3JtRGF0YSh0KSlyZXR1cm4gcj9KU09OLnN0cmluZ2lmeSh3QSh0KSk6dDtpZihpLmlzQXJyYXlCdWZmZXIodCl8fGkuaXNCdWZmZXIodCl8fGkuaXNTdHJlYW0odCl8fGkuaXNGaWxlKHQpfHxpLmlzQmxvYih0KXx8aS5pc1JlYWRhYmxlU3RyZWFtKHQpKXJldHVybiB0O2lmKGkuaXNBcnJheUJ1ZmZlclZpZXcodCkpcmV0dXJuIHQuYnVmZmVyO2lmKGkuaXNVUkxTZWFyY2hQYXJhbXModCkpcmV0dXJuIGUuc2V0Q29udGVudFR5cGUoImFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZDtjaGFyc2V0PXV0Zi04IiwhMSksdC50b1N0cmluZygpO2xldCBDO2lmKG8pe2lmKEkuaW5kZXhPZigiYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkIik+LTEpcmV0dXJuIFZBKHQsdGhpcy5mb3JtU2VyaWFsaXplcikudG9TdHJpbmcoKTtpZigoQz1pLmlzRmlsZUxpc3QodCkpfHxJLmluZGV4T2YoIm11bHRpcGFydC9mb3JtLWRhdGEiKT4tMSl7bGV0IFE9dGhpcy5lbnYmJnRoaXMuZW52LkZvcm1EYXRhO3JldHVybiBxKEM/eyJmaWxlc1tdIjp0fTp0LFEmJm5ldyBRLHRoaXMuZm9ybVNlcmlhbGl6ZXIpfX1yZXR1cm4gb3x8cj8oZS5zZXRDb250ZW50VHlwZSgiYXBwbGljYXRpb24vanNvbiIsITEpLGtJKHQpKTp0fV0sdHJhbnNmb3JtUmVzcG9uc2U6W2Z1bmN0aW9uKHQpe2xldCBlPXRoaXMudHJhbnNpdGlvbmFsfHxfQS50cmFuc2l0aW9uYWwsST1lJiZlLmZvcmNlZEpTT05QYXJzaW5nLHI9dGhpcy5yZXNwb25zZVR5cGU9PT0ianNvbiI7aWYoaS5pc1Jlc3BvbnNlKHQpfHxpLmlzUmVhZGFibGVTdHJlYW0odCkpcmV0dXJuIHQ7aWYodCYmaS5pc1N0cmluZyh0KSYmKEkmJiF0aGlzLnJlc3BvbnNlVHlwZXx8cikpe2xldCBnPSEoZSYmZS5zaWxlbnRKU09OUGFyc2luZykmJnI7dHJ5e3JldHVybiBKU09OLnBhcnNlKHQpfWNhdGNoKEMpe2lmKGcpdGhyb3cgQy5uYW1lPT09IlN5bnRheEVycm9yIj91LmZyb20oQyx1LkVSUl9CQURfUkVTUE9OU0UsdGhpcyxudWxsLHRoaXMucmVzcG9uc2UpOkN9fXJldHVybiB0fV0sdGltZW91dDowLHhzcmZDb29raWVOYW1lOiJYU1JGLVRPS0VOIix4c3JmSGVhZGVyTmFtZToiWC1YU1JGLVRPS0VOIixtYXhDb250ZW50TGVuZ3RoOi0xLG1heEJvZHlMZW5ndGg6LTEsZW52OntGb3JtRGF0YTp3LmNsYXNzZXMuRm9ybURhdGEsQmxvYjp3LmNsYXNzZXMuQmxvYn0sdmFsaWRhdGVTdGF0dXM6ZnVuY3Rpb24odCl7cmV0dXJuIHQ+PTIwMCYmdDwzMDB9LGhlYWRlcnM6e2NvbW1vbjp7QWNjZXB0OiJhcHBsaWNhdGlvbi9qc29uLCB0ZXh0L3BsYWluLCAqLyoiLCJDb250ZW50LVR5cGUiOnZvaWQgMH19fTtpLmZvckVhY2goWyJkZWxldGUiLCJnZXQiLCJoZWFkIiwicG9zdCIsInB1dCIsInBhdGNoIl0sQT0+e19BLmhlYWRlcnNbQV09e319KTt2YXIgWj1fQTt2YXIgTEk9aS50b09iamVjdFNldChbImFnZSIsImF1dGhvcml6YXRpb24iLCJjb250ZW50LWxlbmd0aCIsImNvbnRlbnQtdHlwZSIsImV0YWciLCJleHBpcmVzIiwiZnJvbSIsImhvc3QiLCJpZi1tb2RpZmllZC1zaW5jZSIsImlmLXVubW9kaWZpZWQtc2luY2UiLCJsYXN0LW1vZGlmaWVkIiwibG9jYXRpb24iLCJtYXgtZm9yd2FyZHMiLCJwcm94eS1hdXRob3JpemF0aW9uIiwicmVmZXJlciIsInJldHJ5LWFmdGVyIiwidXNlci1hZ2VudCJdKSx4dD1BPT57bGV0IHQ9e30sZSxJLHI7cmV0dXJuIEEmJkEuc3BsaXQoYCUwQWApLmZvckVhY2goZnVuY3Rpb24oZyl7cj1nLmluZGV4T2YoIjoiKSxlPWcuc3Vic3RyaW5nKDAscikudHJpbSgpLnRvTG93ZXJDYXNlKCksST1nLnN1YnN0cmluZyhyKzEpLnRyaW0oKSwhKCFlfHx0W2VdJiZMSVtlXSkmJihlPT09InNldC1jb29raWUiP3RbZV0/dFtlXS5wdXNoKEkpOnRbZV09W0ldOnRbZV09dFtlXT90W2VdKyIsICIrSTpJKX0pLHR9O3ZhciBQdD1TeW1ib2woImludGVybmFscyIpO2Z1bmN0aW9uIGVBKEEpe3JldHVybiBBJiZTdHJpbmcoQSkudHJpbSgpLnRvTG93ZXJDYXNlKCl9ZnVuY3Rpb24gcEEoQSl7cmV0dXJuIEE9PT0hMXx8QT09bnVsbD9BOmkuaXNBcnJheShBKT9BLm1hcChwQSk6U3RyaW5nKEEpfWZ1bmN0aW9uIEpJKEEpe2xldCB0PU9iamVjdC5jcmVhdGUobnVsbCksZT0vKFteXFxzLDs9XSspXFxzKig/Oj1cXHMqKFteLDtdKykpPy9nLEk7Zm9yKDtJPWUuZXhlYyhBKTspdFtJWzFdXT1JWzJdO3JldHVybiB0fXZhciBiST1BPT4vXlstX2EtekEtWjAtOV5gfH4sISUyMyQlJlwnKisuXSskLy50ZXN0KEEudHJpbSgpKTtmdW5jdGlvbiBYQShBLHQsZSxJLHIpe2lmKGkuaXNGdW5jdGlvbihJKSlyZXR1cm4gSS5jYWxsKHRoaXMsdCxlKTtpZihyJiYodD1lKSwhIWkuaXNTdHJpbmcodCkpe2lmKGkuaXNTdHJpbmcoSSkpcmV0dXJuIHQuaW5kZXhPZihJKSE9PS0xO2lmKGkuaXNSZWdFeHAoSSkpcmV0dXJuIEkudGVzdCh0KX19ZnVuY3Rpb24gSEkoQSl7cmV0dXJuIEEudHJpbSgpLnRvTG93ZXJDYXNlKCkucmVwbGFjZSgvKFthLXpcXGRdKShcXHcqKS9nLCh0LGUsSSk9PmUudG9VcHBlckNhc2UoKStJKX1mdW5jdGlvbiBZSShBLHQpe2xldCBlPWkudG9DYW1lbENhc2UoIiAiK3QpO1siZ2V0Iiwic2V0IiwiaGFzIl0uZm9yRWFjaChJPT57T2JqZWN0LmRlZmluZVByb3BlcnR5KEEsSStlLHt2YWx1ZTpmdW5jdGlvbihyLG8sZyl7cmV0dXJuIHRoaXNbSV0uY2FsbCh0aGlzLHQscixvLGcpfSxjb25maWd1cmFibGU6ITB9KX0pfXZhciBWPWNsYXNze2NvbnN0cnVjdG9yKHQpe3QmJnRoaXMuc2V0KHQpfXNldCh0LGUsSSl7bGV0IHI9dGhpcztmdW5jdGlvbiBvKEMsUSxhKXtsZXQgbj1lQShRKTtpZighbil0aHJvdyBuZXcgRXJyb3IoImhlYWRlciBuYW1lIG11c3QgYmUgYSBub24tZW1wdHkgc3RyaW5nIik7bGV0IHM9aS5maW5kS2V5KHIsbik7KCFzfHxyW3NdPT09dm9pZCAwfHxhPT09ITB8fGE9PT12b2lkIDAmJnJbc10hPT0hMSkmJihyW3N8fFFdPXBBKEMpKX1sZXQgZz0oQyxRKT0+aS5mb3JFYWNoKEMsKGEsbik9Pm8oYSxuLFEpKTtpZihpLmlzUGxhaW5PYmplY3QodCl8fHQgaW5zdGFuY2VvZiB0aGlzLmNvbnN0cnVjdG9yKWcodCxlKTtlbHNlIGlmKGkuaXNTdHJpbmcodCkmJih0PXQudHJpbSgpKSYmIWJJKHQpKWcoeHQodCksZSk7ZWxzZSBpZihpLmlzSGVhZGVycyh0KSlmb3IobGV0W0MsUV1vZiB0LmVudHJpZXMoKSlvKFEsQyxJKTtlbHNlIHQhPW51bGwmJm8oZSx0LEkpO3JldHVybiB0aGlzfWdldCh0LGUpe2lmKHQ9ZUEodCksdCl7bGV0IEk9aS5maW5kS2V5KHRoaXMsdCk7aWYoSSl7bGV0IHI9dGhpc1tJXTtpZighZSlyZXR1cm4gcjtpZihlPT09ITApcmV0dXJuIEpJKHIpO2lmKGkuaXNGdW5jdGlvbihlKSlyZXR1cm4gZS5jYWxsKHRoaXMscixJKTtpZihpLmlzUmVnRXhwKGUpKXJldHVybiBlLmV4ZWMocik7dGhyb3cgbmV3IFR5cGVFcnJvcigicGFyc2VyIG11c3QgYmUgYm9vbGVhbnxyZWdleHB8ZnVuY3Rpb24iKX19fWhhcyh0LGUpe2lmKHQ9ZUEodCksdCl7bGV0IEk9aS5maW5kS2V5KHRoaXMsdCk7cmV0dXJuISEoSSYmdGhpc1tJXSE9PXZvaWQgMCYmKCFlfHxYQSh0aGlzLHRoaXNbSV0sSSxlKSkpfXJldHVybiExfWRlbGV0ZSh0LGUpe2xldCBJPXRoaXMscj0hMTtmdW5jdGlvbiBvKGcpe2lmKGc9ZUEoZyksZyl7bGV0IEM9aS5maW5kS2V5KEksZyk7QyYmKCFlfHxYQShJLElbQ10sQyxlKSkmJihkZWxldGUgSVtDXSxyPSEwKX19cmV0dXJuIGkuaXNBcnJheSh0KT90LmZvckVhY2gobyk6byh0KSxyfWNsZWFyKHQpe2xldCBlPU9iamVjdC5rZXlzKHRoaXMpLEk9ZS5sZW5ndGgscj0hMTtmb3IoO0ktLTspe2xldCBvPWVbSV07KCF0fHxYQSh0aGlzLHRoaXNbb10sbyx0LCEwKSkmJihkZWxldGUgdGhpc1tvXSxyPSEwKX1yZXR1cm4gcn1ub3JtYWxpemUodCl7bGV0IGU9dGhpcyxJPXt9O3JldHVybiBpLmZvckVhY2godGhpcywocixvKT0+e2xldCBnPWkuZmluZEtleShJLG8pO2lmKGcpe2VbZ109cEEociksZGVsZXRlIGVbb107cmV0dXJufWxldCBDPXQ/SEkobyk6U3RyaW5nKG8pLnRyaW0oKTtDIT09byYmZGVsZXRlIGVbb10sZVtDXT1wQShyKSxJW0NdPSEwfSksdGhpc31jb25jYXQoLi4udCl7cmV0dXJuIHRoaXMuY29uc3RydWN0b3IuY29uY2F0KHRoaXMsLi4udCl9dG9KU09OKHQpe2xldCBlPU9iamVjdC5jcmVhdGUobnVsbCk7cmV0dXJuIGkuZm9yRWFjaCh0aGlzLChJLHIpPT57SSE9bnVsbCYmSSE9PSExJiYoZVtyXT10JiZpLmlzQXJyYXkoSSk/SS5qb2luKCIsICIpOkkpfSksZX1bU3ltYm9sLml0ZXJhdG9yXSgpe3JldHVybiBPYmplY3QuZW50cmllcyh0aGlzLnRvSlNPTigpKVtTeW1ib2wuaXRlcmF0b3JdKCl9dG9TdHJpbmcoKXtyZXR1cm4gT2JqZWN0LmVudHJpZXModGhpcy50b0pTT04oKSkubWFwKChbdCxlXSk9PnQrIjogIitlKS5qb2luKGAlMEFgKX1nZXRbU3ltYm9sLnRvU3RyaW5nVGFnXSgpe3JldHVybiJBeGlvc0hlYWRlcnMifXN0YXRpYyBmcm9tKHQpe3JldHVybiB0IGluc3RhbmNlb2YgdGhpcz90Om5ldyB0aGlzKHQpfXN0YXRpYyBjb25jYXQodCwuLi5lKXtsZXQgST1uZXcgdGhpcyh0KTtyZXR1cm4gZS5mb3JFYWNoKHI9Pkkuc2V0KHIpKSxJfXN0YXRpYyBhY2Nlc3Nvcih0KXtsZXQgST0odGhpc1tQdF09dGhpc1tQdF09e2FjY2Vzc29yczp7fX0pLmFjY2Vzc29ycyxyPXRoaXMucHJvdG90eXBlO2Z1bmN0aW9uIG8oZyl7bGV0IEM9ZUEoZyk7SVtDXXx8KFlJKHIsZyksSVtDXT0hMCl9cmV0dXJuIGkuaXNBcnJheSh0KT90LmZvckVhY2gobyk6byh0KSx0aGlzfX07Vi5hY2Nlc3NvcihbIkNvbnRlbnQtVHlwZSIsIkNvbnRlbnQtTGVuZ3RoIiwiQWNjZXB0IiwiQWNjZXB0LUVuY29kaW5nIiwiVXNlci1BZ2VudCIsIkF1dGhvcml6YXRpb24iXSk7aS5yZWR1Y2VEZXNjcmlwdG9ycyhWLnByb3RvdHlwZSwoe3ZhbHVlOkF9LHQpPT57bGV0IGU9dFswXS50b1VwcGVyQ2FzZSgpK3Quc2xpY2UoMSk7cmV0dXJue2dldDooKT0+QSxzZXQoSSl7dGhpc1tlXT1JfX19KTtpLmZyZWV6ZU1ldGhvZHMoVik7dmFyIG09VjtmdW5jdGlvbiBJQShBLHQpe2xldCBlPXRoaXN8fFosST10fHxlLHI9bS5mcm9tKEkuaGVhZGVycyksbz1JLmRhdGE7cmV0dXJuIGkuZm9yRWFjaChBLGZ1bmN0aW9uKEMpe289Qy5jYWxsKGUsbyxyLm5vcm1hbGl6ZSgpLHQ/dC5zdGF0dXM6dm9pZCAwKX0pLHIubm9ybWFsaXplKCksb31mdW5jdGlvbiByQShBKXtyZXR1cm4hIShBJiZBLl9fQ0FOQ0VMX18pfWZ1bmN0aW9uIGp0KEEsdCxlKXt1LmNhbGwodGhpcyxBPz8iY2FuY2VsZWQiLHUuRVJSX0NBTkNFTEVELHQsZSksdGhpcy5uYW1lPSJDYW5jZWxlZEVycm9yIn1pLmluaGVyaXRzKGp0LHUse19fQ0FOQ0VMX186ITB9KTt2YXIgYj1qdDtmdW5jdGlvbiBvQShBLHQsZSl7bGV0IEk9ZS5jb25maWcudmFsaWRhdGVTdGF0dXM7IWUuc3RhdHVzfHwhSXx8SShlLnN0YXR1cyk/QShlKTp0KG5ldyB1KCJSZXF1ZXN0IGZhaWxlZCB3aXRoIHN0YXR1cyBjb2RlICIrZS5zdGF0dXMsW3UuRVJSX0JBRF9SRVFVRVNULHUuRVJSX0JBRF9SRVNQT05TRV1bTWF0aC5mbG9vcihlLnN0YXR1cy8xMDApLTRdLGUuY29uZmlnLGUucmVxdWVzdCxlKSl9ZnVuY3Rpb24gekEoQSl7bGV0IHQ9L14oWy0rXFx3XXsxLDI1fSkoOj9cXC9cXC98OikvLmV4ZWMoQSk7cmV0dXJuIHQmJnRbMV18fCIifWZ1bmN0aW9uIHFJKEEsdCl7QT1BfHwxMDtsZXQgZT1uZXcgQXJyYXkoQSksST1uZXcgQXJyYXkoQSkscj0wLG89MCxnO3JldHVybiB0PXQhPT12b2lkIDA/dDoxZTMsZnVuY3Rpb24oUSl7bGV0IGE9RGF0ZS5ub3coKSxuPUlbb107Z3x8KGc9YSksZVtyXT1RLElbcl09YTtsZXQgcz1vLGY9MDtmb3IoO3MhPT1yOylmKz1lW3MrK10scz1zJUE7aWYocj0ocisxKSVBLHI9PT1vJiYobz0obysxKSVBKSxhLWc8dClyZXR1cm47bGV0IEI9biYmYS1uO3JldHVybiBCP01hdGgucm91bmQoZioxZTMvQik6dm9pZCAwfX12YXIgV3Q9cUk7ZnVuY3Rpb24gTUkoQSx0KXtsZXQgZT0wLEk9MWUzL3QscixvLGc9KGEsbj1EYXRlLm5vdygpKT0+e2U9bixyPW51bGwsbyYmKGNsZWFyVGltZW91dChvKSxvPW51bGwpLEEuYXBwbHkobnVsbCxhKX07cmV0dXJuWyguLi5hKT0+e2xldCBuPURhdGUubm93KCkscz1uLWU7cz49ST9nKGEsbik6KHI9YSxvfHwobz1zZXRUaW1lb3V0KCgpPT57bz1udWxsLGcocil9LEktcykpKX0sKCk9PnImJmcocildfXZhciBadD1NSTt2YXIgXz0oQSx0LGU9Myk9PntsZXQgST0wLHI9V3QoNTAsMjUwKTtyZXR1cm4gWnQobz0+e2xldCBnPW8ubG9hZGVkLEM9by5sZW5ndGhDb21wdXRhYmxlP28udG90YWw6dm9pZCAwLFE9Zy1JLGE9cihRKSxuPWc8PUM7ST1nO2xldCBzPXtsb2FkZWQ6Zyx0b3RhbDpDLHByb2dyZXNzOkM/Zy9DOnZvaWQgMCxieXRlczpRLHJhdGU6YXx8dm9pZCAwLGVzdGltYXRlZDphJiZDJiZuPyhDLWcpL2E6dm9pZCAwLGV2ZW50Om8sbGVuZ3RoQ29tcHV0YWJsZTpDIT1udWxsLFt0PyJkb3dubG9hZCI6InVwbG9hZCJdOiEwfTtBKHMpfSxlKX0sdkE9KEEsdCk9PntsZXQgZT1BIT1udWxsO3JldHVybltJPT50WzBdKHtsZW5ndGhDb21wdXRhYmxlOmUsdG90YWw6QSxsb2FkZWQ6SX0pLHRbMV1dfSwkQT1BPT4oLi4udCk9PmkuYXNhcCgoKT0+QSguLi50KSk7dmFyIFZ0PXcuaGFzU3RhbmRhcmRCcm93c2VyRW52P2Z1bmN0aW9uKCl7bGV0IHQ9Lyhtc2llfHRyaWRlbnQpL2kudGVzdChuYXZpZ2F0b3IudXNlckFnZW50KSxlPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImEiKSxJO2Z1bmN0aW9uIHIobyl7bGV0IGc9bztyZXR1cm4gdCYmKGUuc2V0QXR0cmlidXRlKCJocmVmIixnKSxnPWUuaHJlZiksZS5zZXRBdHRyaWJ1dGUoImhyZWYiLGcpLHtocmVmOmUuaHJlZixwcm90b2NvbDplLnByb3RvY29sP2UucHJvdG9jb2wucmVwbGFjZSgvOiQvLCIiKToiIixob3N0OmUuaG9zdCxzZWFyY2g6ZS5zZWFyY2g/ZS5zZWFyY2gucmVwbGFjZSgvXlxcPy8sIiIpOiIiLGhhc2g6ZS5oYXNoP2UuaGFzaC5yZXBsYWNlKC9eJTIzLywiIik6IiIsaG9zdG5hbWU6ZS5ob3N0bmFtZSxwb3J0OmUucG9ydCxwYXRobmFtZTplLnBhdGhuYW1lLmNoYXJBdCgwKT09PSIvIj9lLnBhdGhuYW1lOiIvIitlLnBhdGhuYW1lfX1yZXR1cm4gST1yKHdpbmRvdy5sb2NhdGlvbi5ocmVmKSxmdW5jdGlvbihnKXtsZXQgQz1pLmlzU3RyaW5nKGcpP3IoZyk6ZztyZXR1cm4gQy5wcm90b2NvbD09PUkucHJvdG9jb2wmJkMuaG9zdD09PUkuaG9zdH19KCk6ZnVuY3Rpb24oKXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4hMH19KCk7dmFyIF90PXcuaGFzU3RhbmRhcmRCcm93c2VyRW52P3t3cml0ZShBLHQsZSxJLHIsbyl7bGV0IGc9W0ErIj0iK2VuY29kZVVSSUNvbXBvbmVudCh0KV07aS5pc051bWJlcihlKSYmZy5wdXNoKCJleHBpcmVzPSIrbmV3IERhdGUoZSkudG9HTVRTdHJpbmcoKSksaS5pc1N0cmluZyhJKSYmZy5wdXNoKCJwYXRoPSIrSSksaS5pc1N0cmluZyhyKSYmZy5wdXNoKCJkb21haW49IityKSxvPT09ITAmJmcucHVzaCgic2VjdXJlIiksZG9jdW1lbnQuY29va2llPWcuam9pbigiOyAiKX0scmVhZChBKXtsZXQgdD1kb2N1bWVudC5jb29raWUubWF0Y2gobmV3IFJlZ0V4cCgiKF58O1xcXFxzKikoIitBKyIpPShbXjtdKikiKSk7cmV0dXJuIHQ/ZGVjb2RlVVJJQ29tcG9uZW50KHRbM10pOm51bGx9LHJlbW92ZShBKXt0aGlzLndyaXRlKEEsIiIsRGF0ZS5ub3coKS04NjRlNSl9fTp7d3JpdGUoKXt9LHJlYWQoKXtyZXR1cm4gbnVsbH0scmVtb3ZlKCl7fX07ZnVuY3Rpb24gQXQoQSl7cmV0dXJuL14oW2Etel1bYS16XFxkK1xcLS5dKjopP1xcL1xcLy9pLnRlc3QoQSl9ZnVuY3Rpb24gdHQoQSx0KXtyZXR1cm4gdD9BLnJlcGxhY2UoL1xcLz9cXC8kLywiIikrIi8iK3QucmVwbGFjZSgvXlxcLysvLCIiKTpBfWZ1bmN0aW9uIGdBKEEsdCl7cmV0dXJuIEEmJiFBdCh0KT90dChBLHQpOnR9dmFyIFh0PUE9PkEgaW5zdGFuY2VvZiBtP3suLi5BfTpBO2Z1bmN0aW9uIGsoQSx0KXt0PXR8fHt9O2xldCBlPXt9O2Z1bmN0aW9uIEkoYSxuLHMpe3JldHVybiBpLmlzUGxhaW5PYmplY3QoYSkmJmkuaXNQbGFpbk9iamVjdChuKT9pLm1lcmdlLmNhbGwoe2Nhc2VsZXNzOnN9LGEsbik6aS5pc1BsYWluT2JqZWN0KG4pP2kubWVyZ2Uoe30sbik6aS5pc0FycmF5KG4pP24uc2xpY2UoKTpufWZ1bmN0aW9uIHIoYSxuLHMpe2lmKGkuaXNVbmRlZmluZWQobikpe2lmKCFpLmlzVW5kZWZpbmVkKGEpKXJldHVybiBJKHZvaWQgMCxhLHMpfWVsc2UgcmV0dXJuIEkoYSxuLHMpfWZ1bmN0aW9uIG8oYSxuKXtpZighaS5pc1VuZGVmaW5lZChuKSlyZXR1cm4gSSh2b2lkIDAsbil9ZnVuY3Rpb24gZyhhLG4pe2lmKGkuaXNVbmRlZmluZWQobikpe2lmKCFpLmlzVW5kZWZpbmVkKGEpKXJldHVybiBJKHZvaWQgMCxhKX1lbHNlIHJldHVybiBJKHZvaWQgMCxuKX1mdW5jdGlvbiBDKGEsbixzKXtpZihzIGluIHQpcmV0dXJuIEkoYSxuKTtpZihzIGluIEEpcmV0dXJuIEkodm9pZCAwLGEpfWxldCBRPXt1cmw6byxtZXRob2Q6byxkYXRhOm8sYmFzZVVSTDpnLHRyYW5zZm9ybVJlcXVlc3Q6Zyx0cmFuc2Zvcm1SZXNwb25zZTpnLHBhcmFtc1NlcmlhbGl6ZXI6Zyx0aW1lb3V0OmcsdGltZW91dE1lc3NhZ2U6Zyx3aXRoQ3JlZGVudGlhbHM6Zyx3aXRoWFNSRlRva2VuOmcsYWRhcHRlcjpnLHJlc3BvbnNlVHlwZTpnLHhzcmZDb29raWVOYW1lOmcseHNyZkhlYWRlck5hbWU6ZyxvblVwbG9hZFByb2dyZXNzOmcsb25Eb3dubG9hZFByb2dyZXNzOmcsZGVjb21wcmVzczpnLG1heENvbnRlbnRMZW5ndGg6ZyxtYXhCb2R5TGVuZ3RoOmcsYmVmb3JlUmVkaXJlY3Q6Zyx0cmFuc3BvcnQ6ZyxodHRwQWdlbnQ6ZyxodHRwc0FnZW50OmcsY2FuY2VsVG9rZW46Zyxzb2NrZXRQYXRoOmcscmVzcG9uc2VFbmNvZGluZzpnLHZhbGlkYXRlU3RhdHVzOkMsaGVhZGVyczooYSxuKT0+cihYdChhKSxYdChuKSwhMCl9O3JldHVybiBpLmZvckVhY2goT2JqZWN0LmtleXMoT2JqZWN0LmFzc2lnbih7fSxBLHQpKSxmdW5jdGlvbihuKXtsZXQgcz1RW25dfHxyLGY9cyhBW25dLHRbbl0sbik7aS5pc1VuZGVmaW5lZChmKSYmcyE9PUN8fChlW25dPWYpfSksZX12YXIgU0E9QT0+e2xldCB0PWsoe30sQSkse2RhdGE6ZSx3aXRoWFNSRlRva2VuOkkseHNyZkhlYWRlck5hbWU6cix4c3JmQ29va2llTmFtZTpvLGhlYWRlcnM6ZyxhdXRoOkN9PXQ7dC5oZWFkZXJzPWc9bS5mcm9tKGcpLHQudXJsPXRBKGdBKHQuYmFzZVVSTCx0LnVybCksQS5wYXJhbXMsQS5wYXJhbXNTZXJpYWxpemVyKSxDJiZnLnNldCgiQXV0aG9yaXphdGlvbiIsIkJhc2ljICIrYnRvYSgoQy51c2VybmFtZXx8IiIpKyI6IisoQy5wYXNzd29yZD91bmVzY2FwZShlbmNvZGVVUklDb21wb25lbnQoQy5wYXNzd29yZCkpOiIiKSkpO2xldCBRO2lmKGkuaXNGb3JtRGF0YShlKSl7aWYody5oYXNTdGFuZGFyZEJyb3dzZXJFbnZ8fHcuaGFzU3RhbmRhcmRCcm93c2VyV2ViV29ya2VyRW52KWcuc2V0Q29udGVudFR5cGUodm9pZCAwKTtlbHNlIGlmKChRPWcuZ2V0Q29udGVudFR5cGUoKSkhPT0hMSl7bGV0W2EsLi4ubl09UT9RLnNwbGl0KCI7IikubWFwKHM9PnMudHJpbSgpKS5maWx0ZXIoQm9vbGVhbik6W107Zy5zZXRDb250ZW50VHlwZShbYXx8Im11bHRpcGFydC9mb3JtLWRhdGEiLC4uLm5dLmpvaW4oIjsgIikpfX1pZih3Lmhhc1N0YW5kYXJkQnJvd3NlckVudiYmKEkmJmkuaXNGdW5jdGlvbihJKSYmKEk9SSh0KSksSXx8SSE9PSExJiZWdCh0LnVybCkpKXtsZXQgYT1yJiZvJiZfdC5yZWFkKG8pO2EmJmcuc2V0KHIsYSl9cmV0dXJuIHR9O3ZhciBUST10eXBlb2YgWE1MSHR0cFJlcXVlc3Q8InUiLHp0PVRJJiZmdW5jdGlvbihBKXtyZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24oZSxJKXtsZXQgcj1TQShBKSxvPXIuZGF0YSxnPW0uZnJvbShyLmhlYWRlcnMpLm5vcm1hbGl6ZSgpLHtyZXNwb25zZVR5cGU6QyxvblVwbG9hZFByb2dyZXNzOlEsb25Eb3dubG9hZFByb2dyZXNzOmF9PXIsbixzLGYsQixFO2Z1bmN0aW9uIGwoKXtCJiZCKCksRSYmRSgpLHIuY2FuY2VsVG9rZW4mJnIuY2FuY2VsVG9rZW4udW5zdWJzY3JpYmUobiksci5zaWduYWwmJnIuc2lnbmFsLnJlbW92ZUV2ZW50TGlzdGVuZXIoImFib3J0IixuKX1sZXQgYz1uZXcgWE1MSHR0cFJlcXVlc3Q7Yy5vcGVuKHIubWV0aG9kLnRvVXBwZXJDYXNlKCksci51cmwsITApLGMudGltZW91dD1yLnRpbWVvdXQ7ZnVuY3Rpb24gcCgpe2lmKCFjKXJldHVybjtsZXQgRD1tLmZyb20oImdldEFsbFJlc3BvbnNlSGVhZGVycyJpbiBjJiZjLmdldEFsbFJlc3BvbnNlSGVhZGVycygpKSxLPXtkYXRhOiFDfHxDPT09InRleHQifHxDPT09Impzb24iP2MucmVzcG9uc2VUZXh0OmMucmVzcG9uc2Usc3RhdHVzOmMuc3RhdHVzLHN0YXR1c1RleHQ6Yy5zdGF0dXNUZXh0LGhlYWRlcnM6RCxjb25maWc6QSxyZXF1ZXN0OmN9O29BKGZ1bmN0aW9uKEope2UoSiksbCgpfSxmdW5jdGlvbihKKXtJKEopLGwoKX0sSyksYz1udWxsfSJvbmxvYWRlbmQiaW4gYz9jLm9ubG9hZGVuZD1wOmMub25yZWFkeXN0YXRlY2hhbmdlPWZ1bmN0aW9uKCl7IWN8fGMucmVhZHlTdGF0ZSE9PTR8fGMuc3RhdHVzPT09MCYmIShjLnJlc3BvbnNlVVJMJiZjLnJlc3BvbnNlVVJMLmluZGV4T2YoImZpbGU6Iik9PT0wKXx8c2V0VGltZW91dChwKX0sYy5vbmFib3J0PWZ1bmN0aW9uKCl7YyYmKEkobmV3IHUoIlJlcXVlc3QgYWJvcnRlZCIsdS5FQ09OTkFCT1JURUQsQSxjKSksYz1udWxsKX0sYy5vbmVycm9yPWZ1bmN0aW9uKCl7SShuZXcgdSgiTmV0d29yayBFcnJvciIsdS5FUlJfTkVUV09SSyxBLGMpKSxjPW51bGx9LGMub250aW1lb3V0PWZ1bmN0aW9uKCl7bGV0IFU9ci50aW1lb3V0PyJ0aW1lb3V0IG9mICIrci50aW1lb3V0KyJtcyBleGNlZWRlZCI6InRpbWVvdXQgZXhjZWVkZWQiLEs9ci50cmFuc2l0aW9uYWx8fG1BO3IudGltZW91dEVycm9yTWVzc2FnZSYmKFU9ci50aW1lb3V0RXJyb3JNZXNzYWdlKSxJKG5ldyB1KFUsSy5jbGFyaWZ5VGltZW91dEVycm9yP3UuRVRJTUVET1VUOnUuRUNPTk5BQk9SVEVELEEsYykpLGM9bnVsbH0sbz09PXZvaWQgMCYmZy5zZXRDb250ZW50VHlwZShudWxsKSwic2V0UmVxdWVzdEhlYWRlciJpbiBjJiZpLmZvckVhY2goZy50b0pTT04oKSxmdW5jdGlvbihVLEspe2Muc2V0UmVxdWVzdEhlYWRlcihLLFUpfSksaS5pc1VuZGVmaW5lZChyLndpdGhDcmVkZW50aWFscyl8fChjLndpdGhDcmVkZW50aWFscz0hIXIud2l0aENyZWRlbnRpYWxzKSxDJiZDIT09Impzb24iJiYoYy5yZXNwb25zZVR5cGU9ci5yZXNwb25zZVR5cGUpLGEmJihbZixFXT1fKGEsITApLGMuYWRkRXZlbnRMaXN0ZW5lcigicHJvZ3Jlc3MiLGYpKSxRJiZjLnVwbG9hZCYmKFtzLEJdPV8oUSksYy51cGxvYWQuYWRkRXZlbnRMaXN0ZW5lcigicHJvZ3Jlc3MiLHMpLGMudXBsb2FkLmFkZEV2ZW50TGlzdGVuZXIoImxvYWRlbmQiLEIpKSwoci5jYW5jZWxUb2tlbnx8ci5zaWduYWwpJiYobj1EPT57YyYmKEkoIUR8fEQudHlwZT9uZXcgYihudWxsLEEsYyk6RCksYy5hYm9ydCgpLGM9bnVsbCl9LHIuY2FuY2VsVG9rZW4mJnIuY2FuY2VsVG9rZW4uc3Vic2NyaWJlKG4pLHIuc2lnbmFsJiYoci5zaWduYWwuYWJvcnRlZD9uKCk6ci5zaWduYWwuYWRkRXZlbnRMaXN0ZW5lcigiYWJvcnQiLG4pKSk7bGV0IFM9ekEoci51cmwpO2lmKFMmJncucHJvdG9jb2xzLmluZGV4T2YoUyk9PT0tMSl7SShuZXcgdSgiVW5zdXBwb3J0ZWQgcHJvdG9jb2wgIitTKyI6Iix1LkVSUl9CQURfUkVRVUVTVCxBKSk7cmV0dXJufWMuc2VuZChvfHxudWxsKX0pfTt2YXIgS0k9KEEsdCk9PntsZXQgZT1uZXcgQWJvcnRDb250cm9sbGVyLEkscj1mdW5jdGlvbihRKXtpZighSSl7ST0hMCxnKCk7bGV0IGE9USBpbnN0YW5jZW9mIEVycm9yP1E6dGhpcy5yZWFzb247ZS5hYm9ydChhIGluc3RhbmNlb2YgdT9hOm5ldyBiKGEgaW5zdGFuY2VvZiBFcnJvcj9hLm1lc3NhZ2U6YSkpfX0sbz10JiZzZXRUaW1lb3V0KCgpPT57cihuZXcgdShgdGltZW91dCAke3R9IG9mIG1zIGV4Y2VlZGVkYCx1LkVUSU1FRE9VVCkpfSx0KSxnPSgpPT57QSYmKG8mJmNsZWFyVGltZW91dChvKSxvPW51bGwsQS5mb3JFYWNoKFE9PntRJiYoUS5yZW1vdmVFdmVudExpc3RlbmVyP1EucmVtb3ZlRXZlbnRMaXN0ZW5lcigiYWJvcnQiLHIpOlEudW5zdWJzY3JpYmUocikpfSksQT1udWxsKX07QS5mb3JFYWNoKFE9PlEmJlEuYWRkRXZlbnRMaXN0ZW5lciYmUS5hZGRFdmVudExpc3RlbmVyKCJhYm9ydCIscikpO2xldHtzaWduYWw6Q309ZTtyZXR1cm4gQy51bnN1YnNjcmliZT1nLFtDLCgpPT57byYmY2xlYXJUaW1lb3V0KG8pLG89bnVsbH1dfSx2dD1LSTt2YXIgT0k9ZnVuY3Rpb24qKEEsdCl7bGV0IGU9QS5ieXRlTGVuZ3RoO2lmKCF0fHxlPHQpe3lpZWxkIEE7cmV0dXJufWxldCBJPTAscjtmb3IoO0k8ZTspcj1JK3QseWllbGQgQS5zbGljZShJLHIpLEk9cn0seEk9YXN5bmMgZnVuY3Rpb24qKEEsdCxlKXtmb3IgYXdhaXQobGV0IEkgb2YgQSl5aWVsZCpPSShBcnJheUJ1ZmZlci5pc1ZpZXcoSSk/STphd2FpdCBlKFN0cmluZyhJKSksdCl9LGV0PShBLHQsZSxJLHIpPT57bGV0IG89eEkoQSx0LHIpLGc9MCxDLFE9YT0+e0N8fChDPSEwLEkmJkkoYSkpfTtyZXR1cm4gbmV3IFJlYWRhYmxlU3RyZWFtKHthc3luYyBwdWxsKGEpe3RyeXtsZXR7ZG9uZTpuLHZhbHVlOnN9PWF3YWl0IG8ubmV4dCgpO2lmKG4pe1EoKSxhLmNsb3NlKCk7cmV0dXJufWxldCBmPXMuYnl0ZUxlbmd0aDtpZihlKXtsZXQgQj1nKz1mO2UoQil9YS5lbnF1ZXVlKG5ldyBVaW50OEFycmF5KHMpKX1jYXRjaChuKXt0aHJvdyBRKG4pLG59fSxjYW5jZWwoYSl7cmV0dXJuIFEoYSksby5yZXR1cm4oKX19LHtoaWdoV2F0ZXJNYXJrOjJ9KX07dmFyIFJBPXR5cGVvZiBmZXRjaD09ImZ1bmN0aW9uIiYmdHlwZW9mIFJlcXVlc3Q9PSJmdW5jdGlvbiImJnR5cGVvZiBSZXNwb25zZT09ImZ1bmN0aW9uIixBZT1SQSYmdHlwZW9mIFJlYWRhYmxlU3RyZWFtPT0iZnVuY3Rpb24iLEl0PVJBJiYodHlwZW9mIFRleHRFbmNvZGVyPT0iZnVuY3Rpb24iPyhBPT50PT5BLmVuY29kZSh0KSkobmV3IFRleHRFbmNvZGVyKTphc3luYyBBPT5uZXcgVWludDhBcnJheShhd2FpdCBuZXcgUmVzcG9uc2UoQSkuYXJyYXlCdWZmZXIoKSkpLHRlPShBLC4uLnQpPT57dHJ5e3JldHVybiEhQSguLi50KX1jYXRjaHtyZXR1cm4hMX19LFBJPUFlJiZ0ZSgoKT0+e2xldCBBPSExLHQ9bmV3IFJlcXVlc3Qody5vcmlnaW4se2JvZHk6bmV3IFJlYWRhYmxlU3RyZWFtLG1ldGhvZDoiUE9TVCIsZ2V0IGR1cGxleCgpe3JldHVybiBBPSEwLCJoYWxmIn19KS5oZWFkZXJzLmhhcygiQ29udGVudC1UeXBlIik7cmV0dXJuIEEmJiF0fSksJHQ9NjQqMTAyNCxydD1BZSYmdGUoKCk9PmkuaXNSZWFkYWJsZVN0cmVhbShuZXcgUmVzcG9uc2UoIiIpLmJvZHkpKSxGQT17c3RyZWFtOnJ0JiYoQT0+QS5ib2R5KX07UkEmJihBPT57WyJ0ZXh0IiwiYXJyYXlCdWZmZXIiLCJibG9iIiwiZm9ybURhdGEiLCJzdHJlYW0iXS5mb3JFYWNoKHQ9PnshRkFbdF0mJihGQVt0XT1pLmlzRnVuY3Rpb24oQVt0XSk/ZT0+ZVt0XSgpOihlLEkpPT57dGhyb3cgbmV3IHUoYFJlc3BvbnNlIHR5cGUgXCcke3R9XCcgaXMgbm90IHN1cHBvcnRlZGAsdS5FUlJfTk9UX1NVUFBPUlQsSSl9KX0pfSkobmV3IFJlc3BvbnNlKTt2YXIgakk9YXN5bmMgQT0+e2lmKEE9PW51bGwpcmV0dXJuIDA7aWYoaS5pc0Jsb2IoQSkpcmV0dXJuIEEuc2l6ZTtpZihpLmlzU3BlY0NvbXBsaWFudEZvcm0oQSkpcmV0dXJuKGF3YWl0IG5ldyBSZXF1ZXN0KEEpLmFycmF5QnVmZmVyKCkpLmJ5dGVMZW5ndGg7aWYoaS5pc0FycmF5QnVmZmVyVmlldyhBKXx8aS5pc0FycmF5QnVmZmVyKEEpKXJldHVybiBBLmJ5dGVMZW5ndGg7aWYoaS5pc1VSTFNlYXJjaFBhcmFtcyhBKSYmKEE9QSsiIiksaS5pc1N0cmluZyhBKSlyZXR1cm4oYXdhaXQgSXQoQSkpLmJ5dGVMZW5ndGh9LFdJPWFzeW5jKEEsdCk9PntsZXQgZT1pLnRvRmluaXRlTnVtYmVyKEEuZ2V0Q29udGVudExlbmd0aCgpKTtyZXR1cm4gZT8/akkodCl9LGVlPVJBJiYoYXN5bmMgQT0+e2xldHt1cmw6dCxtZXRob2Q6ZSxkYXRhOkksc2lnbmFsOnIsY2FuY2VsVG9rZW46byx0aW1lb3V0Omcsb25Eb3dubG9hZFByb2dyZXNzOkMsb25VcGxvYWRQcm9ncmVzczpRLHJlc3BvbnNlVHlwZTphLGhlYWRlcnM6bix3aXRoQ3JlZGVudGlhbHM6cz0ic2FtZS1vcmlnaW4iLGZldGNoT3B0aW9uczpmfT1TQShBKTthPWE/KGErIiIpLnRvTG93ZXJDYXNlKCk6InRleHQiO2xldFtCLEVdPXJ8fG98fGc/dnQoW3Isb10sZyk6W10sbCxjLHA9KCk9PnshbCYmc2V0VGltZW91dCgoKT0+e0ImJkIudW5zdWJzY3JpYmUoKX0pLGw9ITB9LFM7dHJ5e2lmKFEmJlBJJiZlIT09ImdldCImJmUhPT0iaGVhZCImJihTPWF3YWl0IFdJKG4sSSkpIT09MCl7bGV0IEw9bmV3IFJlcXVlc3QodCx7bWV0aG9kOiJQT1NUIixib2R5OkksZHVwbGV4OiJoYWxmIn0pLEo7aWYoaS5pc0Zvcm1EYXRhKEkpJiYoSj1MLmhlYWRlcnMuZ2V0KCJjb250ZW50LXR5cGUiKSkmJm4uc2V0Q29udGVudFR5cGUoSiksTC5ib2R5KXtsZXRbSEEsQ0FdPXZBKFMsXygkQShRKSkpO0k9ZXQoTC5ib2R5LCR0LEhBLENBLEl0KX19aS5pc1N0cmluZyhzKXx8KHM9cz8iaW5jbHVkZSI6Im9taXQiKSxjPW5ldyBSZXF1ZXN0KHQsey4uLmYsc2lnbmFsOkIsbWV0aG9kOmUudG9VcHBlckNhc2UoKSxoZWFkZXJzOm4ubm9ybWFsaXplKCkudG9KU09OKCksYm9keTpJLGR1cGxleDoiaGFsZiIsY3JlZGVudGlhbHM6c30pO2xldCBEPWF3YWl0IGZldGNoKGMpLFU9cnQmJihhPT09InN0cmVhbSJ8fGE9PT0icmVzcG9uc2UiKTtpZihydCYmKEN8fFUpKXtsZXQgTD17fTtbInN0YXR1cyIsInN0YXR1c1RleHQiLCJoZWFkZXJzIl0uZm9yRWFjaChFdD0+e0xbRXRdPURbRXRdfSk7bGV0IEo9aS50b0Zpbml0ZU51bWJlcihELmhlYWRlcnMuZ2V0KCJjb250ZW50LWxlbmd0aCIpKSxbSEEsQ0FdPUMmJnZBKEosXygkQShDKSwhMCkpfHxbXTtEPW5ldyBSZXNwb25zZShldChELmJvZHksJHQsSEEsKCk9PntDQSYmQ0EoKSxVJiZwKCl9LEl0KSxMKX1hPWF8fCJ0ZXh0IjtsZXQgSz1hd2FpdCBGQVtpLmZpbmRLZXkoRkEsYSl8fCJ0ZXh0Il0oRCxBKTtyZXR1cm4hVSYmcCgpLEUmJkUoKSxhd2FpdCBuZXcgUHJvbWlzZSgoTCxKKT0+e29BKEwsSix7ZGF0YTpLLGhlYWRlcnM6bS5mcm9tKEQuaGVhZGVycyksc3RhdHVzOkQuc3RhdHVzLHN0YXR1c1RleHQ6RC5zdGF0dXNUZXh0LGNvbmZpZzpBLHJlcXVlc3Q6Y30pfSl9Y2F0Y2goRCl7dGhyb3cgcCgpLEQmJkQubmFtZT09PSJUeXBlRXJyb3IiJiYvZmV0Y2gvaS50ZXN0KEQubWVzc2FnZSk/T2JqZWN0LmFzc2lnbihuZXcgdSgiTmV0d29yayBFcnJvciIsdS5FUlJfTkVUV09SSyxBLGMpLHtjYXVzZTpELmNhdXNlfHxEfSk6dS5mcm9tKEQsRCYmRC5jb2RlLEEsYyl9fSk7dmFyIG90PXtodHRwOmRBLHhocjp6dCxmZXRjaDplZX07aS5mb3JFYWNoKG90LChBLHQpPT57aWYoQSl7dHJ5e09iamVjdC5kZWZpbmVQcm9wZXJ0eShBLCJuYW1lIix7dmFsdWU6dH0pfWNhdGNoe31PYmplY3QuZGVmaW5lUHJvcGVydHkoQSwiYWRhcHRlck5hbWUiLHt2YWx1ZTp0fSl9fSk7dmFyIEllPUE9PmAtICR7QX1gLFpJPUE9PmkuaXNGdW5jdGlvbihBKXx8QT09PW51bGx8fEE9PT0hMSxOQT17Z2V0QWRhcHRlcjpBPT57QT1pLmlzQXJyYXkoQSk/QTpbQV07bGV0e2xlbmd0aDp0fT1BLGUsSSxyPXt9O2ZvcihsZXQgbz0wO288dDtvKyspe2U9QVtvXTtsZXQgZztpZihJPWUsIVpJKGUpJiYoST1vdFsoZz1TdHJpbmcoZSkpLnRvTG93ZXJDYXNlKCldLEk9PT12b2lkIDApKXRocm93IG5ldyB1KGBVbmtub3duIGFkYXB0ZXIgXCcke2d9XCdgKTtpZihJKWJyZWFrO3JbZ3x8IiUyMyIrb109SX1pZighSSl7bGV0IG89T2JqZWN0LmVudHJpZXMocikubWFwKChbQyxRXSk9PmBhZGFwdGVyICR7Q30gYCsoUT09PSExPyJpcyBub3Qgc3VwcG9ydGVkIGJ5IHRoZSBlbnZpcm9ubWVudCI6ImlzIG5vdCBhdmFpbGFibGUgaW4gdGhlIGJ1aWxkIikpLGc9dD9vLmxlbmd0aD4xP2BzaW5jZSA6JTBBYCtvLm1hcChJZSkuam9pbihgJTBBYCk6IiAiK0llKG9bMF0pOiJhcyBubyBhZGFwdGVyIHNwZWNpZmllZCI7dGhyb3cgbmV3IHUoIlRoZXJlIGlzIG5vIHN1aXRhYmxlIGFkYXB0ZXIgdG8gZGlzcGF0Y2ggdGhlIHJlcXVlc3QgIitnLCJFUlJfTk9UX1NVUFBPUlQiKX1yZXR1cm4gSX0sYWRhcHRlcnM6b3R9O2Z1bmN0aW9uIGd0KEEpe2lmKEEuY2FuY2VsVG9rZW4mJkEuY2FuY2VsVG9rZW4udGhyb3dJZlJlcXVlc3RlZCgpLEEuc2lnbmFsJiZBLnNpZ25hbC5hYm9ydGVkKXRocm93IG5ldyBiKG51bGwsQSl9ZnVuY3Rpb24gVUEoQSl7cmV0dXJuIGd0KEEpLEEuaGVhZGVycz1tLmZyb20oQS5oZWFkZXJzKSxBLmRhdGE9SUEuY2FsbChBLEEudHJhbnNmb3JtUmVxdWVzdCksWyJwb3N0IiwicHV0IiwicGF0Y2giXS5pbmRleE9mKEEubWV0aG9kKSE9PS0xJiZBLmhlYWRlcnMuc2V0Q29udGVudFR5cGUoImFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCIsITEpLE5BLmdldEFkYXB0ZXIoQS5hZGFwdGVyfHxaLmFkYXB0ZXIpKEEpLnRoZW4oZnVuY3Rpb24oSSl7cmV0dXJuIGd0KEEpLEkuZGF0YT1JQS5jYWxsKEEsQS50cmFuc2Zvcm1SZXNwb25zZSxJKSxJLmhlYWRlcnM9bS5mcm9tKEkuaGVhZGVycyksSX0sZnVuY3Rpb24oSSl7cmV0dXJuIHJBKEkpfHwoZ3QoQSksSSYmSS5yZXNwb25zZSYmKEkucmVzcG9uc2UuZGF0YT1JQS5jYWxsKEEsQS50cmFuc2Zvcm1SZXNwb25zZSxJLnJlc3BvbnNlKSxJLnJlc3BvbnNlLmhlYWRlcnM9bS5mcm9tKEkucmVzcG9uc2UuaGVhZGVycykpKSxQcm9taXNlLnJlamVjdChJKX0pfXZhciBHQT0iMS43LjQiO3ZhciBpdD17fTtbIm9iamVjdCIsImJvb2xlYW4iLCJudW1iZXIiLCJmdW5jdGlvbiIsInN0cmluZyIsInN5bWJvbCJdLmZvckVhY2goKEEsdCk9PntpdFtBXT1mdW5jdGlvbihJKXtyZXR1cm4gdHlwZW9mIEk9PT1BfHwiYSIrKHQ8MT8ibiAiOiIgIikrQX19KTt2YXIgcmU9e307aXQudHJhbnNpdGlvbmFsPWZ1bmN0aW9uKHQsZSxJKXtmdW5jdGlvbiByKG8sZyl7cmV0dXJuIltBeGlvcyB2IitHQSsiXSBUcmFuc2l0aW9uYWwgb3B0aW9uIFwnIitvKyJcJyIrZysoST8iLiAiK0k6IiIpfXJldHVybihvLGcsQyk9PntpZih0PT09ITEpdGhyb3cgbmV3IHUocihnLCIgaGFzIGJlZW4gcmVtb3ZlZCIrKGU/IiBpbiAiK2U6IiIpKSx1LkVSUl9ERVBSRUNBVEVEKTtyZXR1cm4gZSYmIXJlW2ddJiYocmVbZ109ITAsY29uc29sZS53YXJuKHIoZywiIGhhcyBiZWVuIGRlcHJlY2F0ZWQgc2luY2UgdiIrZSsiIGFuZCB3aWxsIGJlIHJlbW92ZWQgaW4gdGhlIG5lYXIgZnV0dXJlIikpKSx0P3QobyxnLEMpOiEwfX07ZnVuY3Rpb24gVkkoQSx0LGUpe2lmKHR5cGVvZiBBIT0ib2JqZWN0Iil0aHJvdyBuZXcgdSgib3B0aW9ucyBtdXN0IGJlIGFuIG9iamVjdCIsdS5FUlJfQkFEX09QVElPTl9WQUxVRSk7bGV0IEk9T2JqZWN0LmtleXMoQSkscj1JLmxlbmd0aDtmb3IoO3ItLSA+MDspe2xldCBvPUlbcl0sZz10W29dO2lmKGcpe2xldCBDPUFbb10sUT1DPT09dm9pZCAwfHxnKEMsbyxBKTtpZihRIT09ITApdGhyb3cgbmV3IHUoIm9wdGlvbiAiK28rIiBtdXN0IGJlICIrUSx1LkVSUl9CQURfT1BUSU9OX1ZBTFVFKTtjb250aW51ZX1pZihlIT09ITApdGhyb3cgbmV3IHUoIlVua25vd24gb3B0aW9uICIrbyx1LkVSUl9CQURfT1BUSU9OKX19dmFyIGtBPXthc3NlcnRPcHRpb25zOlZJLHZhbGlkYXRvcnM6aXR9O3ZhciBNPWtBLnZhbGlkYXRvcnMsWD1jbGFzc3tjb25zdHJ1Y3Rvcih0KXt0aGlzLmRlZmF1bHRzPXQsdGhpcy5pbnRlcmNlcHRvcnM9e3JlcXVlc3Q6bmV3IGpBLHJlc3BvbnNlOm5ldyBqQX19YXN5bmMgcmVxdWVzdCh0LGUpe3RyeXtyZXR1cm4gYXdhaXQgdGhpcy5fcmVxdWVzdCh0LGUpfWNhdGNoKEkpe2lmKEkgaW5zdGFuY2VvZiBFcnJvcil7bGV0IHI7RXJyb3IuY2FwdHVyZVN0YWNrVHJhY2U/RXJyb3IuY2FwdHVyZVN0YWNrVHJhY2Uocj17fSk6cj1uZXcgRXJyb3I7bGV0IG89ci5zdGFjaz9yLnN0YWNrLnJlcGxhY2UoL14uK1xcbi8sIiIpOiIiO3RyeXtJLnN0YWNrP28mJiFTdHJpbmcoSS5zdGFjaykuZW5kc1dpdGgoby5yZXBsYWNlKC9eLitcXG4uK1xcbi8sIiIpKSYmKEkuc3RhY2srPWAlMEFgK28pOkkuc3RhY2s9b31jYXRjaHt9fXRocm93IEl9fV9yZXF1ZXN0KHQsZSl7dHlwZW9mIHQ9PSJzdHJpbmciPyhlPWV8fHt9LGUudXJsPXQpOmU9dHx8e30sZT1rKHRoaXMuZGVmYXVsdHMsZSk7bGV0e3RyYW5zaXRpb25hbDpJLHBhcmFtc1NlcmlhbGl6ZXI6cixoZWFkZXJzOm99PWU7SSE9PXZvaWQgMCYma0EuYXNzZXJ0T3B0aW9ucyhJLHtzaWxlbnRKU09OUGFyc2luZzpNLnRyYW5zaXRpb25hbChNLmJvb2xlYW4pLGZvcmNlZEpTT05QYXJzaW5nOk0udHJhbnNpdGlvbmFsKE0uYm9vbGVhbiksY2xhcmlmeVRpbWVvdXRFcnJvcjpNLnRyYW5zaXRpb25hbChNLmJvb2xlYW4pfSwhMSksciE9bnVsbCYmKGkuaXNGdW5jdGlvbihyKT9lLnBhcmFtc1NlcmlhbGl6ZXI9e3NlcmlhbGl6ZTpyfTprQS5hc3NlcnRPcHRpb25zKHIse2VuY29kZTpNLmZ1bmN0aW9uLHNlcmlhbGl6ZTpNLmZ1bmN0aW9ufSwhMCkpLGUubWV0aG9kPShlLm1ldGhvZHx8dGhpcy5kZWZhdWx0cy5tZXRob2R8fCJnZXQiKS50b0xvd2VyQ2FzZSgpO2xldCBnPW8mJmkubWVyZ2Uoby5jb21tb24sb1tlLm1ldGhvZF0pO28mJmkuZm9yRWFjaChbImRlbGV0ZSIsImdldCIsImhlYWQiLCJwb3N0IiwicHV0IiwicGF0Y2giLCJjb21tb24iXSxFPT57ZGVsZXRlIG9bRV19KSxlLmhlYWRlcnM9bS5jb25jYXQoZyxvKTtsZXQgQz1bXSxRPSEwO3RoaXMuaW50ZXJjZXB0b3JzLnJlcXVlc3QuZm9yRWFjaChmdW5jdGlvbihsKXt0eXBlb2YgbC5ydW5XaGVuPT0iZnVuY3Rpb24iJiZsLnJ1bldoZW4oZSk9PT0hMXx8KFE9USYmbC5zeW5jaHJvbm91cyxDLnVuc2hpZnQobC5mdWxmaWxsZWQsbC5yZWplY3RlZCkpfSk7bGV0IGE9W107dGhpcy5pbnRlcmNlcHRvcnMucmVzcG9uc2UuZm9yRWFjaChmdW5jdGlvbihsKXthLnB1c2gobC5mdWxmaWxsZWQsbC5yZWplY3RlZCl9KTtsZXQgbixzPTAsZjtpZighUSl7bGV0IEU9W1VBLmJpbmQodGhpcyksdm9pZCAwXTtmb3IoRS51bnNoaWZ0LmFwcGx5KEUsQyksRS5wdXNoLmFwcGx5KEUsYSksZj1FLmxlbmd0aCxuPVByb21pc2UucmVzb2x2ZShlKTtzPGY7KW49bi50aGVuKEVbcysrXSxFW3MrK10pO3JldHVybiBufWY9Qy5sZW5ndGg7bGV0IEI9ZTtmb3Iocz0wO3M8Zjspe2xldCBFPUNbcysrXSxsPUNbcysrXTt0cnl7Qj1FKEIpfWNhdGNoKGMpe2wuY2FsbCh0aGlzLGMpO2JyZWFrfX10cnl7bj1VQS5jYWxsKHRoaXMsQil9Y2F0Y2goRSl7cmV0dXJuIFByb21pc2UucmVqZWN0KEUpfWZvcihzPTAsZj1hLmxlbmd0aDtzPGY7KW49bi50aGVuKGFbcysrXSxhW3MrK10pO3JldHVybiBufWdldFVyaSh0KXt0PWsodGhpcy5kZWZhdWx0cyx0KTtsZXQgZT1nQSh0LmJhc2VVUkwsdC51cmwpO3JldHVybiB0QShlLHQucGFyYW1zLHQucGFyYW1zU2VyaWFsaXplcil9fTtpLmZvckVhY2goWyJkZWxldGUiLCJnZXQiLCJoZWFkIiwib3B0aW9ucyJdLGZ1bmN0aW9uKHQpe1gucHJvdG90eXBlW3RdPWZ1bmN0aW9uKGUsSSl7cmV0dXJuIHRoaXMucmVxdWVzdChrKEl8fHt9LHttZXRob2Q6dCx1cmw6ZSxkYXRhOihJfHx7fSkuZGF0YX0pKX19KTtpLmZvckVhY2goWyJwb3N0IiwicHV0IiwicGF0Y2giXSxmdW5jdGlvbih0KXtmdW5jdGlvbiBlKEkpe3JldHVybiBmdW5jdGlvbihvLGcsQyl7cmV0dXJuIHRoaXMucmVxdWVzdChrKEN8fHt9LHttZXRob2Q6dCxoZWFkZXJzOkk/eyJDb250ZW50LVR5cGUiOiJtdWx0aXBhcnQvZm9ybS1kYXRhIn06e30sdXJsOm8sZGF0YTpnfSkpfX1YLnByb3RvdHlwZVt0XT1lKCksWC5wcm90b3R5cGVbdCsiRm9ybSJdPWUoITApfSk7dmFyIGlBPVg7dmFyIG50PWNsYXNzIEF7Y29uc3RydWN0b3IodCl7aWYodHlwZW9mIHQhPSJmdW5jdGlvbiIpdGhyb3cgbmV3IFR5cGVFcnJvcigiZXhlY3V0b3IgbXVzdCBiZSBhIGZ1bmN0aW9uLiIpO2xldCBlO3RoaXMucHJvbWlzZT1uZXcgUHJvbWlzZShmdW5jdGlvbihvKXtlPW99KTtsZXQgST10aGlzO3RoaXMucHJvbWlzZS50aGVuKHI9PntpZighSS5fbGlzdGVuZXJzKXJldHVybjtsZXQgbz1JLl9saXN0ZW5lcnMubGVuZ3RoO2Zvcig7by0tID4wOylJLl9saXN0ZW5lcnNbb10ocik7SS5fbGlzdGVuZXJzPW51bGx9KSx0aGlzLnByb21pc2UudGhlbj1yPT57bGV0IG8sZz1uZXcgUHJvbWlzZShDPT57SS5zdWJzY3JpYmUoQyksbz1DfSkudGhlbihyKTtyZXR1cm4gZy5jYW5jZWw9ZnVuY3Rpb24oKXtJLnVuc3Vic2NyaWJlKG8pfSxnfSx0KGZ1bmN0aW9uKG8sZyxDKXtJLnJlYXNvbnx8KEkucmVhc29uPW5ldyBiKG8sZyxDKSxlKEkucmVhc29uKSl9KX10aHJvd0lmUmVxdWVzdGVkKCl7aWYodGhpcy5yZWFzb24pdGhyb3cgdGhpcy5yZWFzb259c3Vic2NyaWJlKHQpe2lmKHRoaXMucmVhc29uKXt0KHRoaXMucmVhc29uKTtyZXR1cm59dGhpcy5fbGlzdGVuZXJzP3RoaXMuX2xpc3RlbmVycy5wdXNoKHQpOnRoaXMuX2xpc3RlbmVycz1bdF19dW5zdWJzY3JpYmUodCl7aWYoIXRoaXMuX2xpc3RlbmVycylyZXR1cm47bGV0IGU9dGhpcy5fbGlzdGVuZXJzLmluZGV4T2YodCk7ZSE9PS0xJiZ0aGlzLl9saXN0ZW5lcnMuc3BsaWNlKGUsMSl9c3RhdGljIHNvdXJjZSgpe2xldCB0O3JldHVybnt0b2tlbjpuZXcgQShmdW5jdGlvbihyKXt0PXJ9KSxjYW5jZWw6dH19fSxvZT1udDtmdW5jdGlvbiBzdChBKXtyZXR1cm4gZnVuY3Rpb24oZSl7cmV0dXJuIEEuYXBwbHkobnVsbCxlKX19ZnVuY3Rpb24gQ3QoQSl7cmV0dXJuIGkuaXNPYmplY3QoQSkmJkEuaXNBeGlvc0Vycm9yPT09ITB9dmFyIEJ0PXtDb250aW51ZToxMDAsU3dpdGNoaW5nUHJvdG9jb2xzOjEwMSxQcm9jZXNzaW5nOjEwMixFYXJseUhpbnRzOjEwMyxPazoyMDAsQ3JlYXRlZDoyMDEsQWNjZXB0ZWQ6MjAyLE5vbkF1dGhvcml0YXRpdmVJbmZvcm1hdGlvbjoyMDMsTm9Db250ZW50OjIwNCxSZXNldENvbnRlbnQ6MjA1LFBhcnRpYWxDb250ZW50OjIwNixNdWx0aVN0YXR1czoyMDcsQWxyZWFkeVJlcG9ydGVkOjIwOCxJbVVzZWQ6MjI2LE11bHRpcGxlQ2hvaWNlczozMDAsTW92ZWRQZXJtYW5lbnRseTozMDEsRm91bmQ6MzAyLFNlZU90aGVyOjMwMyxOb3RNb2RpZmllZDozMDQsVXNlUHJveHk6MzA1LFVudXNlZDozMDYsVGVtcG9yYXJ5UmVkaXJlY3Q6MzA3LFBlcm1hbmVudFJlZGlyZWN0OjMwOCxCYWRSZXF1ZXN0OjQwMCxVbmF1dGhvcml6ZWQ6NDAxLFBheW1lbnRSZXF1aXJlZDo0MDIsRm9yYmlkZGVuOjQwMyxOb3RGb3VuZDo0MDQsTWV0aG9kTm90QWxsb3dlZDo0MDUsTm90QWNjZXB0YWJsZTo0MDYsUHJveHlBdXRoZW50aWNhdGlvblJlcXVpcmVkOjQwNyxSZXF1ZXN0VGltZW91dDo0MDgsQ29uZmxpY3Q6NDA5LEdvbmU6NDEwLExlbmd0aFJlcXVpcmVkOjQxMSxQcmVjb25kaXRpb25GYWlsZWQ6NDEyLFBheWxvYWRUb29MYXJnZTo0MTMsVXJpVG9vTG9uZzo0MTQsVW5zdXBwb3J0ZWRNZWRpYVR5cGU6NDE1LFJhbmdlTm90U2F0aXNmaWFibGU6NDE2LEV4cGVjdGF0aW9uRmFpbGVkOjQxNyxJbUFUZWFwb3Q6NDE4LE1pc2RpcmVjdGVkUmVxdWVzdDo0MjEsVW5wcm9jZXNzYWJsZUVudGl0eTo0MjIsTG9ja2VkOjQyMyxGYWlsZWREZXBlbmRlbmN5OjQyNCxUb29FYXJseTo0MjUsVXBncmFkZVJlcXVpcmVkOjQyNixQcmVjb25kaXRpb25SZXF1aXJlZDo0MjgsVG9vTWFueVJlcXVlc3RzOjQyOSxSZXF1ZXN0SGVhZGVyRmllbGRzVG9vTGFyZ2U6NDMxLFVuYXZhaWxhYmxlRm9yTGVnYWxSZWFzb25zOjQ1MSxJbnRlcm5hbFNlcnZlckVycm9yOjUwMCxOb3RJbXBsZW1lbnRlZDo1MDEsQmFkR2F0ZXdheTo1MDIsU2VydmljZVVuYXZhaWxhYmxlOjUwMyxHYXRld2F5VGltZW91dDo1MDQsSHR0cFZlcnNpb25Ob3RTdXBwb3J0ZWQ6NTA1LFZhcmlhbnRBbHNvTmVnb3RpYXRlczo1MDYsSW5zdWZmaWNpZW50U3RvcmFnZTo1MDcsTG9vcERldGVjdGVkOjUwOCxOb3RFeHRlbmRlZDo1MTAsTmV0d29ya0F1dGhlbnRpY2F0aW9uUmVxdWlyZWQ6NTExfTtPYmplY3QuZW50cmllcyhCdCkuZm9yRWFjaCgoW0EsdF0pPT57QnRbdF09QX0pO3ZhciBnZT1CdDtmdW5jdGlvbiBpZShBKXtsZXQgdD1uZXcgaUEoQSksZT12KGlBLnByb3RvdHlwZS5yZXF1ZXN0LHQpO3JldHVybiBpLmV4dGVuZChlLGlBLnByb3RvdHlwZSx0LHthbGxPd25LZXlzOiEwfSksaS5leHRlbmQoZSx0LG51bGwse2FsbE93bktleXM6ITB9KSxlLmNyZWF0ZT1mdW5jdGlvbihyKXtyZXR1cm4gaWUoayhBLHIpKX0sZX12YXIgZD1pZShaKTtkLkF4aW9zPWlBO2QuQ2FuY2VsZWRFcnJvcj1iO2QuQ2FuY2VsVG9rZW49b2U7ZC5pc0NhbmNlbD1yQTtkLlZFUlNJT049R0E7ZC50b0Zvcm1EYXRhPXE7ZC5BeGlvc0Vycm9yPXU7ZC5DYW5jZWw9ZC5DYW5jZWxlZEVycm9yO2QuYWxsPWZ1bmN0aW9uKHQpe3JldHVybiBQcm9taXNlLmFsbCh0KX07ZC5zcHJlYWQ9c3Q7ZC5pc0F4aW9zRXJyb3I9Q3Q7ZC5tZXJnZUNvbmZpZz1rO2QuQXhpb3NIZWFkZXJzPW07ZC5mb3JtVG9KU09OPUE9PndBKGkuaXNIVE1MRm9ybShBKT9uZXcgRm9ybURhdGEoQSk6QSk7ZC5nZXRBZGFwdGVyPU5BLmdldEFkYXB0ZXI7ZC5IdHRwU3RhdHVzQ29kZT1nZTtkLmRlZmF1bHQ9ZDt2YXIgTEE9ZDt2YXJ7QXhpb3M6RWksQXhpb3NFcnJvcjpjaSxDYW5jZWxlZEVycm9yOmZpLGlzQ2FuY2VsOmxpLENhbmNlbFRva2VuOnVpLFZFUlNJT046RGksYWxsOmhpLENhbmNlbDpkaSxpc0F4aW9zRXJyb3I6eWksc3ByZWFkOm1pLHRvRm9ybURhdGE6d2ksQXhpb3NIZWFkZXJzOnBpLEh0dHBTdGF0dXNDb2RlOlNpLGZvcm1Ub0pTT046RmksZ2V0QWRhcHRlcjpSaSxtZXJnZUNvbmZpZzpOaX09TEE7dmFyIG5BLFksUXQsYXQ9e2Vudjp7ZW1zY3JpcHRlbl9ub3RpZnlfbWVtb3J5X2dyb3d0aDpmdW5jdGlvbihBKXtRdD1uZXcgVWludDhBcnJheShZLmV4cG9ydHMubWVtb3J5LmJ1ZmZlcil9fX0sSkE9Y2xhc3N7aW5pdCgpe3JldHVybiBuQXx8KHR5cGVvZiBmZXRjaDwidSI/bkE9ZmV0Y2goImRhdGE6YXBwbGljYXRpb24vd2FzbTtiYXNlNjQsIituZSkudGhlbih0PT50LmFycmF5QnVmZmVyKCkpLnRoZW4odD0+V2ViQXNzZW1ibHkuaW5zdGFudGlhdGUodCxhdCkpLnRoZW4odGhpcy5faW5pdCk6bkE9V2ViQXNzZW1ibHkuaW5zdGFudGlhdGUoQnVmZmVyLmZyb20obmUsImJhc2U2NCIpLGF0KS50aGVuKHRoaXMuX2luaXQpLG5BKX1faW5pdCh0KXtZPXQuaW5zdGFuY2UsYXQuZW52LmVtc2NyaXB0ZW5fbm90aWZ5X21lbW9yeV9ncm93dGgoMCl9ZGVjb2RlKHQsZT0wKXtpZighWSl0aHJvdyBuZXcgRXJyb3IoIlpTVEREZWNvZGVyOiBBd2FpdCAuaW5pdCgpIGJlZm9yZSBkZWNvZGluZy4iKTtsZXQgST10LmJ5dGVMZW5ndGgscj1ZLmV4cG9ydHMubWFsbG9jKEkpO1F0LnNldCh0LHIpLGU9ZXx8TnVtYmVyKFkuZXhwb3J0cy5aU1REX2ZpbmREZWNvbXByZXNzZWRTaXplKHIsSSkpO2xldCBvPVkuZXhwb3J0cy5tYWxsb2MoZSksZz1ZLmV4cG9ydHMuWlNURF9kZWNvbXByZXNzKG8sZSxyLEkpLEM9UXQuc2xpY2UobyxvK2cpO3JldHVybiBZLmV4cG9ydHMuZnJlZShyKSxZLmV4cG9ydHMuZnJlZShvKSxDfX0sbmU9IkFHRnpiUUVBQUFBQmJnNWdBMzkvZndGL1lBRi9BWDlnQW45L0FHQUJmd0JnQlg5L2YzOS9BWDlnQTM5L2Z3QmdCSDkvZjM4QmYyQUFBWDlnQW45L0FYOWdCMzkvZjM5L2YzOEJmMkFDZjM4QmZtQUlmMzkvZjM5L2YzOEJmMkFGZjM5L2YzOEFZQTUvZjM5L2YzOS9mMzkvZjM5L2Z3Ri9BaWNCQTJWdWRoOWxiWE5qY21sd2RHVnVYMjV2ZEdsbWVWOXRaVzF2Y25sZlozSnZkM1JvQUFNREl5SUhBQUFCQVFNSEF3RUFDUVFBQlFFSUNBRUZCZ1FFQkFNR0FBQUtBQVVMREEwR0JBVUJjQUVCQVFVSEFRR0FBb0NBQWdZSUFYOEJRWUNqQkFzSHJnRUxCbTFsYlc5eWVRSUFCbTFoYkd4dll3QUZCR1p5WldVQUJneGFVMVJFWDJselJYSnliM0lBRWhsYVUxUkVYMlpwYm1SRVpXTnZiWEJ5WlhOelpXUlRhWHBsQUJ3UFdsTlVSRjlrWldOdmJYQnlaWE56QUNJWlgxOXBibVJwY21WamRGOW1kVzVqZEdsdmJsOTBZV0pzWlFFQUVGOWZaWEp5Ym05ZmJHOWpZWFJwYjI0QUFRbHpkR0ZqYTFOaGRtVUFCd3h6ZEdGamExSmxjM1J2Y21VQUNBcHpkR0ZqYTBGc2JHOWpBQWtLaS9JQklnVUFRWVFmQ3pNQkFYOGdBZ1JBSUFBaEF3TkFJQU1nQVMwQUFEb0FBQ0FEUVFGcUlRTWdBVUVCYWlFQklBSkJBV3NpQWcwQUN3c2dBQXNwQVFGL0lBSUVRQ0FBSVFNRFFDQURJQUU2QUFBZ0EwRUJhaUVESUFKQkFXc2lBZzBBQ3dzZ0FBdHNBUUovUVlBZktBSUFJZ0VnQUVFSGFrRjRjU0lDYWlFQUFrQWdBa0VBSUFBZ0FVMGJEUUFnQUQ4QVFSQjBTd1JBSUFBL0FFRVFkR3RCLy84RGFrRVFka0FBUVg5R0JIOUJBQVZCQUJBQVFRRUxSUTBCQzBHQUh5QUFOZ0lBSUFFUEMwR0VIMEV3TmdJQVFYOEx1U2NCQzM4akFFRVFheUlLSkFBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUlBQkI5QUZOQkVCQmlCOG9BZ0FpQmtFUUlBQkJDMnBCZUhFZ0FFRUxTUnNpQlVFRGRpSUFkaUlCUVFOeEJFQUNRQ0FCUVg5elFRRnhJQUJxSWdKQkEzUWlBVUd3SDJvaUFDQUJRYmdmYWlnQ0FDSUJLQUlJSWdSR0JFQkJpQjhnQmtGK0lBSjNjVFlDQUF3QkN5QUVJQUEyQWd3Z0FDQUVOZ0lJQ3lBQlFRaHFJUUFnQVNBQ1FRTjBJZ0pCQTNJMkFnUWdBU0FDYWlJQklBRW9BZ1JCQVhJMkFnUU1Ed3NnQlVHUUh5Z0NBQ0lIVFEwQklBRUVRQUpBUVFJZ0FIUWlBa0VBSUFKcmNpQUJJQUIwY1dnaUFVRURkQ0lBUWJBZmFpSUNJQUJCdUI5cUtBSUFJZ0FvQWdnaUJFWUVRRUdJSHlBR1FYNGdBWGR4SWdZMkFnQU1BUXNnQkNBQ05nSU1JQUlnQkRZQ0NBc2dBQ0FGUVFOeU5nSUVJQUFnQldvaUNDQUJRUU4wSWdFZ0JXc2lCRUVCY2pZQ0JDQUFJQUZxSUFRMkFnQWdCd1JBSUFkQmVIRkJzQjlxSVFGQm5COG9BZ0FoQWdKL0lBWkJBU0FIUVFOMmRDSURjVVVFUUVHSUh5QURJQVp5TmdJQUlBRU1BUXNnQVNnQ0NBc2hBeUFCSUFJMkFnZ2dBeUFDTmdJTUlBSWdBVFlDRENBQ0lBTTJBZ2dMSUFCQkNHb2hBRUdjSHlBSU5nSUFRWkFmSUFRMkFnQU1Ed3RCakI4b0FnQWlDMFVOQVNBTGFFRUNkRUc0SVdvb0FnQWlBaWdDQkVGNGNTQUZheUVESUFJaEFRTkFBa0FnQVNnQ0VDSUFSUVJBSUFFb0FoUWlBRVVOQVFzZ0FDZ0NCRUY0Y1NBRmF5SUJJQU1nQVNBRFNTSUJHeUVESUFBZ0FpQUJHeUVDSUFBaEFRd0JDd3NnQWlnQ0dDRUpJQUlnQWlnQ0RDSUVSd1JBUVpnZktBSUFHaUFDS0FJSUlnQWdCRFlDRENBRUlBQTJBZ2dNRGdzZ0FrRVVhaUlCS0FJQUlnQkZCRUFnQWlnQ0VDSUFSUTBESUFKQkVHb2hBUXNEUUNBQklRZ2dBQ0lFUVJScUlnRW9BZ0FpQUEwQUlBUkJFR29oQVNBRUtBSVFJZ0FOQUFzZ0NFRUFOZ0lBREEwTFFYOGhCU0FBUWI5L1N3MEFJQUJCQzJvaUFFRjRjU0VGUVl3ZktBSUFJZ2hGRFFCQkFDQUZheUVEQWtBQ1FBSkFBbjlCQUNBRlFZQUNTUTBBR2tFZklBVkIvLy8vQjBzTkFCb2dCVUVtSUFCQkNIWm5JZ0JyZGtFQmNTQUFRUUYwYTBFK2Fnc2lCMEVDZEVHNElXb29BZ0FpQVVVRVFFRUFJUUFNQVF0QkFDRUFJQVZCR1NBSFFRRjJhMEVBSUFkQkgwY2JkQ0VDQTBBQ1FDQUJLQUlFUVhoeElBVnJJZ1lnQTA4TkFDQUJJUVFnQmlJRERRQkJBQ0VESUFFaEFBd0RDeUFBSUFFb0FoUWlCaUFHSUFFZ0FrRWRka0VFY1dvb0FoQWlBVVliSUFBZ0Joc2hBQ0FDUVFGMElRSWdBUTBBQ3dzZ0FDQUVja1VFUUVFQUlRUkJBaUFIZENJQVFRQWdBR3R5SUFoeElnQkZEUU1nQUdoQkFuUkJ1Q0ZxS0FJQUlRQUxJQUJGRFFFTEEwQWdBQ2dDQkVGNGNTQUZheUlDSUFOSklRRWdBaUFESUFFYklRTWdBQ0FFSUFFYklRUWdBQ2dDRUNJQkJIOGdBUVVnQUNnQ0ZBc2lBQTBBQ3dzZ0JFVU5BQ0FEUVpBZktBSUFJQVZyVHcwQUlBUW9BaGdoQnlBRUlBUW9BZ3dpQWtjRVFFR1lIeWdDQUJvZ0JDZ0NDQ0lBSUFJMkFnd2dBaUFBTmdJSURBd0xJQVJCRkdvaUFTZ0NBQ0lBUlFSQUlBUW9BaEFpQUVVTkF5QUVRUkJxSVFFTEEwQWdBU0VHSUFBaUFrRVVhaUlCS0FJQUlnQU5BQ0FDUVJCcUlRRWdBaWdDRUNJQURRQUxJQVpCQURZQ0FBd0xDeUFGUVpBZktBSUFJZ1JOQkVCQm5COG9BZ0FoQUFKQUlBUWdCV3NpQVVFUVR3UkFJQUFnQldvaUFpQUJRUUZ5TmdJRUlBQWdCR29nQVRZQ0FDQUFJQVZCQTNJMkFnUU1BUXNnQUNBRVFRTnlOZ0lFSUFBZ0JHb2lBU0FCS0FJRVFRRnlOZ0lFUVFBaEFrRUFJUUVMUVpBZklBRTJBZ0JCbkI4Z0FqWUNBQ0FBUVFocUlRQU1EUXNnQlVHVUh5Z0NBQ0lDU1FSQVFaUWZJQUlnQldzaUFUWUNBRUdnSDBHZ0h5Z0NBQ0lBSUFWcUlnSTJBZ0FnQWlBQlFRRnlOZ0lFSUFBZ0JVRURjallDQkNBQVFRaHFJUUFNRFF0QkFDRUFJQVZCTDJvaUF3Si9RZUFpS0FJQUJFQkI2Q0lvQWdBTUFRdEI3Q0pDZnpjQ0FFSGtJa0tBb0lDQWdJQUVOd0lBUWVBaUlBcEJER3BCY0hGQjJLclZxZ1Z6TmdJQVFmUWlRUUEyQWdCQnhDSkJBRFlDQUVHQUlBc2lBV29pQmtFQUlBRnJJZ2h4SWdFZ0JVME5ERUhBSWlnQ0FDSUVCRUJCdUNJb0FnQWlCeUFCYWlJSklBZE5JQVFnQ1VseURRMExBa0JCeENJdEFBQkJCSEZGQkVBQ1FBSkFBa0FDUUVHZ0h5Z0NBQ0lFQkVCQnlDSWhBQU5BSUFRZ0FDZ0NBQ0lIVHdSQUlBY2dBQ2dDQkdvZ0JFc05Bd3NnQUNnQ0NDSUFEUUFMQzBFQUVBUWlBa0YvUmcwRElBRWhCa0hrSWlnQ0FDSUFRUUZySWdRZ0FuRUVRQ0FCSUFKcklBSWdCR3BCQUNBQWEzRnFJUVlMSUFVZ0JrOE5BMEhBSWlnQ0FDSUFCRUJCdUNJb0FnQWlCQ0FHYWlJSUlBUk5JQUFnQ0VseURRUUxJQVlRQkNJQUlBSkhEUUVNQlFzZ0JpQUNheUFJY1NJR0VBUWlBaUFBS0FJQUlBQW9BZ1JxUmcwQklBSWhBQXNnQUVGL1JnMEJJQVZCTUdvZ0JrMEVRQ0FBSVFJTUJBdEI2Q0lvQWdBaUFpQURJQVpyYWtFQUlBSnJjU0lDRUFSQmYwWU5BU0FDSUFacUlRWWdBQ0VDREFNTElBSkJmMGNOQWd0QnhDSkJ4Q0lvQWdCQkJISTJBZ0FMSUFFUUJDSUNRWDlHUVFBUUJDSUFRWDlHY2lBQUlBSk5jZzBGSUFBZ0Ftc2lCaUFGUVNocVRRMEZDMEc0SWtHNElpZ0NBQ0FHYWlJQU5nSUFRYndpS0FJQUlBQkpCRUJCdkNJZ0FEWUNBQXNDUUVHZ0h5Z0NBQ0lEQkVCQnlDSWhBQU5BSUFJZ0FDZ0NBQ0lCSUFBb0FnUWlCR3BHRFFJZ0FDZ0NDQ0lBRFFBTERBUUxRWmdmS0FJQUlnQkJBQ0FBSUFKTkcwVUVRRUdZSHlBQ05nSUFDMEVBSVFCQnpDSWdCallDQUVISUlpQUNOZ0lBUWFnZlFYODJBZ0JCckI5QjRDSW9BZ0EyQWdCQjFDSkJBRFlDQUFOQUlBQkJBM1FpQVVHNEgyb2dBVUd3SDJvaUJEWUNBQ0FCUWJ3ZmFpQUVOZ0lBSUFCQkFXb2lBRUVnUncwQUMwR1VIeUFHUVNocklnQkJlQ0FDYTBFSGNTSUJheUlFTmdJQVFhQWZJQUVnQW1vaUFUWUNBQ0FCSUFSQkFYSTJBZ1FnQUNBQ2FrRW9OZ0lFUWFRZlFmQWlLQUlBTmdJQURBUUxJQUlnQTAwZ0FTQURTM0lOQWlBQUtBSU1RUWh4RFFJZ0FDQUVJQVpxTmdJRVFhQWZJQU5CZUNBRGEwRUhjU0lBYWlJQk5nSUFRWlFmUVpRZktBSUFJQVpxSWdJZ0FHc2lBRFlDQUNBQklBQkJBWEkyQWdRZ0FpQURha0VvTmdJRVFhUWZRZkFpS0FJQU5nSUFEQU1MUVFBaEJBd0tDMEVBSVFJTUNBdEJtQjhvQWdBZ0Frc0VRRUdZSHlBQ05nSUFDeUFDSUFacUlRRkJ5Q0loQUFKQUFrQUNRQU5BSUFFZ0FDZ0NBRWNFUUNBQUtBSUlJZ0FOQVF3Q0N3c2dBQzBBREVFSWNVVU5BUXRCeUNJaEFBTkFJQU1nQUNnQ0FDSUJUd1JBSUFFZ0FDZ0NCR29pQkNBRFN3MERDeUFBS0FJSUlRQU1BQXNBQ3lBQUlBSTJBZ0FnQUNBQUtBSUVJQVpxTmdJRUlBSkJlQ0FDYTBFSGNXb2lCeUFGUVFOeU5nSUVJQUZCZUNBQmEwRUhjV29pQmlBRklBZHFJZ1ZySVFBZ0F5QUdSZ1JBUWFBZklBVTJBZ0JCbEI5QmxCOG9BZ0FnQUdvaUFEWUNBQ0FGSUFCQkFYSTJBZ1FNQ0F0Qm5COG9BZ0FnQmtZRVFFR2NIeUFGTmdJQVFaQWZRWkFmS0FJQUlBQnFJZ0EyQWdBZ0JTQUFRUUZ5TmdJRUlBQWdCV29nQURZQ0FBd0lDeUFHS0FJRUlnTkJBM0ZCQVVjTkJpQURRWGh4SVFrZ0EwSC9BVTBFUUNBR0tBSU1JZ0VnQmlnQ0NDSUNSZ1JBUVlnZlFZZ2ZLQUlBUVg0Z0EwRURkbmR4TmdJQURBY0xJQUlnQVRZQ0RDQUJJQUkyQWdnTUJnc2dCaWdDR0NFSUlBWWdCaWdDRENJQ1J3UkFJQVlvQWdnaUFTQUNOZ0lNSUFJZ0FUWUNDQXdGQ3lBR1FSUnFJZ0VvQWdBaUEwVUVRQ0FHS0FJUUlnTkZEUVFnQmtFUWFpRUJDd05BSUFFaEJDQURJZ0pCRkdvaUFTZ0NBQ0lERFFBZ0FrRVFhaUVCSUFJb0FoQWlBdzBBQ3lBRVFRQTJBZ0FNQkF0QmxCOGdCa0VvYXlJQVFYZ2dBbXRCQjNFaUFXc2lDRFlDQUVHZ0h5QUJJQUpxSWdFMkFnQWdBU0FJUVFGeU5nSUVJQUFnQW1wQktEWUNCRUdrSDBId0lpZ0NBRFlDQUNBRElBUkJKeUFFYTBFSGNXcEJMMnNpQUNBQUlBTkJFR3BKR3lJQlFSczJBZ1FnQVVIUUlpa0NBRGNDRUNBQlFjZ2lLUUlBTndJSVFkQWlJQUZCQ0dvMkFnQkJ6Q0lnQmpZQ0FFSElJaUFDTmdJQVFkUWlRUUEyQWdBZ0FVRVlhaUVBQTBBZ0FFRUhOZ0lFSUFCQkNHb2dBRUVFYWlFQUlBUkpEUUFMSUFFZ0EwWU5BQ0FCSUFFb0FnUkJmbkUyQWdRZ0F5QUJJQU5ySWdKQkFYSTJBZ1FnQVNBQ05nSUFJQUpCL3dGTkJFQWdBa0Y0Y1VHd0gyb2hBQUovUVlnZktBSUFJZ0ZCQVNBQ1FRTjJkQ0lDY1VVRVFFR0lIeUFCSUFKeU5nSUFJQUFNQVFzZ0FDZ0NDQXNoQVNBQUlBTTJBZ2dnQVNBRE5nSU1JQU1nQURZQ0RDQURJQUUyQWdnTUFRdEJIeUVBSUFKQi8vLy9CMDBFUUNBQ1FTWWdBa0VJZG1jaUFHdDJRUUZ4SUFCQkFYUnJRVDVxSVFBTElBTWdBRFlDSENBRFFnQTNBaEFnQUVFQ2RFRzRJV29oQVFKQUFrQkJqQjhvQWdBaUJFRUJJQUIwSWdaeFJRUkFRWXdmSUFRZ0JuSTJBZ0FnQVNBRE5nSUFEQUVMSUFKQkdTQUFRUUYyYTBFQUlBQkJIMGNiZENFQUlBRW9BZ0FoQkFOQUlBUWlBU2dDQkVGNGNTQUNSZzBDSUFCQkhYWWhCQ0FBUVFGMElRQWdBU0FFUVFSeGFpSUdLQUlRSWdRTkFBc2dCaUFETmdJUUN5QURJQUUyQWhnZ0F5QUROZ0lNSUFNZ0F6WUNDQXdCQ3lBQktBSUlJZ0FnQXpZQ0RDQUJJQU0yQWdnZ0EwRUFOZ0lZSUFNZ0FUWUNEQ0FESUFBMkFnZ0xRWlFmS0FJQUlnQWdCVTBOQUVHVUh5QUFJQVZySWdFMkFnQkJvQjlCb0I4b0FnQWlBQ0FGYWlJQ05nSUFJQUlnQVVFQmNqWUNCQ0FBSUFWQkEzSTJBZ1FnQUVFSWFpRUFEQWdMUVlRZlFUQTJBZ0JCQUNFQURBY0xRUUFoQWdzZ0NFVU5BQUpBSUFZb0Fod2lBVUVDZEVHNElXb2lCQ2dDQUNBR1JnUkFJQVFnQWpZQ0FDQUNEUUZCakI5QmpCOG9BZ0JCZmlBQmQzRTJBZ0FNQWdzZ0NFRVFRUlFnQ0NnQ0VDQUdSaHRxSUFJMkFnQWdBa1VOQVFzZ0FpQUlOZ0lZSUFZb0FoQWlBUVJBSUFJZ0FUWUNFQ0FCSUFJMkFoZ0xJQVlvQWhRaUFVVU5BQ0FDSUFFMkFoUWdBU0FDTmdJWUN5QUFJQWxxSVFBZ0JpQUphaUlHS0FJRUlRTUxJQVlnQTBGK2NUWUNCQ0FGSUFCQkFYSTJBZ1FnQUNBRmFpQUFOZ0lBSUFCQi93Rk5CRUFnQUVGNGNVR3dIMm9oQVFKL1FZZ2ZLQUlBSWdKQkFTQUFRUU4yZENJQWNVVUVRRUdJSHlBQUlBSnlOZ0lBSUFFTUFRc2dBU2dDQ0FzaEFDQUJJQVUyQWdnZ0FDQUZOZ0lNSUFVZ0FUWUNEQ0FGSUFBMkFnZ01BUXRCSHlFRElBQkIvLy8vQjAwRVFDQUFRU1lnQUVFSWRtY2lBV3QyUVFGeElBRkJBWFJyUVQ1cUlRTUxJQVVnQXpZQ0hDQUZRZ0EzQWhBZ0EwRUNkRUc0SVdvaEFRSkFBa0JCakI4b0FnQWlBa0VCSUFOMElnUnhSUVJBUVl3ZklBSWdCSEkyQWdBZ0FTQUZOZ0lBREFFTElBQkJHU0FEUVFGMmEwRUFJQU5CSDBjYmRDRURJQUVvQWdBaEFnTkFJQUlpQVNnQ0JFRjRjU0FBUmcwQ0lBTkJIWFloQWlBRFFRRjBJUU1nQVNBQ1FRUnhhaUlFS0FJUUlnSU5BQXNnQkNBRk5nSVFDeUFGSUFFMkFoZ2dCU0FGTmdJTUlBVWdCVFlDQ0F3QkN5QUJLQUlJSWdBZ0JUWUNEQ0FCSUFVMkFnZ2dCVUVBTmdJWUlBVWdBVFlDRENBRklBQTJBZ2dMSUFkQkNHb2hBQXdDQ3dKQUlBZEZEUUFDUUNBRUtBSWNJZ0JCQW5SQnVDRnFJZ0VvQWdBZ0JFWUVRQ0FCSUFJMkFnQWdBZzBCUVl3ZklBaEJmaUFBZDNFaUNEWUNBQXdDQ3lBSFFSQkJGQ0FIS0FJUUlBUkdHMm9nQWpZQ0FDQUNSUTBCQ3lBQ0lBYzJBaGdnQkNnQ0VDSUFCRUFnQWlBQU5nSVFJQUFnQWpZQ0dBc2dCQ2dDRkNJQVJRMEFJQUlnQURZQ0ZDQUFJQUkyQWhnTEFrQWdBMEVQVFFSQUlBUWdBeUFGYWlJQVFRTnlOZ0lFSUFBZ0JHb2lBQ0FBS0FJRVFRRnlOZ0lFREFFTElBUWdCVUVEY2pZQ0JDQUVJQVZxSWdJZ0EwRUJjallDQkNBQ0lBTnFJQU0yQWdBZ0EwSC9BVTBFUUNBRFFYaHhRYkFmYWlFQUFuOUJpQjhvQWdBaUFVRUJJQU5CQTNaMElnTnhSUVJBUVlnZklBRWdBM0kyQWdBZ0FBd0JDeUFBS0FJSUN5RUJJQUFnQWpZQ0NDQUJJQUkyQWd3Z0FpQUFOZ0lNSUFJZ0FUWUNDQXdCQzBFZklRQWdBMEgvLy84SFRRUkFJQU5CSmlBRFFRaDJaeUlBYTNaQkFYRWdBRUVCZEd0QlBtb2hBQXNnQWlBQU5nSWNJQUpDQURjQ0VDQUFRUUowUWJnaGFpRUJBa0FDUUNBSVFRRWdBSFFpQm5GRkJFQkJqQjhnQmlBSWNqWUNBQ0FCSUFJMkFnQU1BUXNnQTBFWklBQkJBWFpyUVFBZ0FFRWZSeHQwSVFBZ0FTZ0NBQ0VGQTBBZ0JTSUJLQUlFUVhoeElBTkdEUUlnQUVFZGRpRUdJQUJCQVhRaEFDQUJJQVpCQkhGcUlnWW9BaEFpQlEwQUN5QUdJQUkyQWhBTElBSWdBVFlDR0NBQ0lBSTJBZ3dnQWlBQ05nSUlEQUVMSUFFb0FnZ2lBQ0FDTmdJTUlBRWdBallDQ0NBQ1FRQTJBaGdnQWlBQk5nSU1JQUlnQURZQ0NBc2dCRUVJYWlFQURBRUxBa0FnQ1VVTkFBSkFJQUlvQWh3aUFFRUNkRUc0SVdvaUFTZ0NBQ0FDUmdSQUlBRWdCRFlDQUNBRURRRkJqQjhnQzBGK0lBQjNjVFlDQUF3Q0N5QUpRUkJCRkNBSktBSVFJQUpHRzJvZ0JEWUNBQ0FFUlEwQkN5QUVJQWsyQWhnZ0FpZ0NFQ0lBQkVBZ0JDQUFOZ0lRSUFBZ0JEWUNHQXNnQWlnQ0ZDSUFSUTBBSUFRZ0FEWUNGQ0FBSUFRMkFoZ0xBa0FnQTBFUFRRUkFJQUlnQXlBRmFpSUFRUU55TmdJRUlBQWdBbW9pQUNBQUtBSUVRUUZ5TmdJRURBRUxJQUlnQlVFRGNqWUNCQ0FDSUFWcUlnUWdBMEVCY2pZQ0JDQURJQVJxSUFNMkFnQWdCd1JBSUFkQmVIRkJzQjlxSVFCQm5COG9BZ0FoQVFKL1FRRWdCMEVEZG5RaUJTQUdjVVVFUUVHSUh5QUZJQVp5TmdJQUlBQU1BUXNnQUNnQ0NBc2hCaUFBSUFFMkFnZ2dCaUFCTmdJTUlBRWdBRFlDRENBQklBWTJBZ2dMUVp3ZklBUTJBZ0JCa0I4Z0F6WUNBQXNnQWtFSWFpRUFDeUFLUVJCcUpBQWdBQXZTQ3dFSGZ3SkFJQUJGRFFBZ0FFRUlheUlDSUFCQkJHc29BZ0FpQVVGNGNTSUFhaUVGQWtBZ0FVRUJjUTBBSUFGQkEzRkZEUUVnQWlBQ0tBSUFJZ0ZySWdKQm1COG9BZ0JKRFFFZ0FDQUJhaUVBQWtBQ1FFR2NIeWdDQUNBQ1J3UkFJQUZCL3dGTkJFQWdBVUVEZGlFRUlBSW9BZ3dpQVNBQ0tBSUlJZ05HQkVCQmlCOUJpQjhvQWdCQmZpQUVkM0UyQWdBTUJRc2dBeUFCTmdJTUlBRWdBellDQ0F3RUN5QUNLQUlZSVFZZ0FpQUNLQUlNSWdGSEJFQWdBaWdDQ0NJRElBRTJBZ3dnQVNBRE5nSUlEQU1MSUFKQkZHb2lCQ2dDQUNJRFJRUkFJQUlvQWhBaUEwVU5BaUFDUVJCcUlRUUxBMEFnQkNFSElBTWlBVUVVYWlJRUtBSUFJZ01OQUNBQlFSQnFJUVFnQVNnQ0VDSUREUUFMSUFkQkFEWUNBQXdDQ3lBRktBSUVJZ0ZCQTNGQkEwY05Ba0dRSHlBQU5nSUFJQVVnQVVGK2NUWUNCQ0FDSUFCQkFYSTJBZ1FnQlNBQU5nSUFEd3RCQUNFQkN5QUdSUTBBQWtBZ0FpZ0NIQ0lEUVFKMFFiZ2hhaUlFS0FJQUlBSkdCRUFnQkNBQk5nSUFJQUVOQVVHTUgwR01IeWdDQUVGK0lBTjNjVFlDQUF3Q0N5QUdRUkJCRkNBR0tBSVFJQUpHRzJvZ0FUWUNBQ0FCUlEwQkN5QUJJQVkyQWhnZ0FpZ0NFQ0lEQkVBZ0FTQUROZ0lRSUFNZ0FUWUNHQXNnQWlnQ0ZDSURSUTBBSUFFZ0F6WUNGQ0FESUFFMkFoZ0xJQUlnQlU4TkFDQUZLQUlFSWdGQkFYRkZEUUFDUUFKQUFrQUNRQ0FCUVFKeFJRUkFRYUFmS0FJQUlBVkdCRUJCb0I4Z0FqWUNBRUdVSDBHVUh5Z0NBQ0FBYWlJQU5nSUFJQUlnQUVFQmNqWUNCQ0FDUVp3ZktBSUFSdzBHUVpBZlFRQTJBZ0JCbkI5QkFEWUNBQThMUVp3ZktBSUFJQVZHQkVCQm5COGdBallDQUVHUUgwR1FIeWdDQUNBQWFpSUFOZ0lBSUFJZ0FFRUJjallDQkNBQUlBSnFJQUEyQWdBUEN5QUJRWGh4SUFCcUlRQWdBVUgvQVUwRVFDQUJRUU4ySVFRZ0JTZ0NEQ0lCSUFVb0FnZ2lBMFlFUUVHSUgwR0lIeWdDQUVGK0lBUjNjVFlDQUF3RkN5QURJQUUyQWd3Z0FTQUROZ0lJREFRTElBVW9BaGdoQmlBRklBVW9BZ3dpQVVjRVFFR1lIeWdDQUJvZ0JTZ0NDQ0lESUFFMkFnd2dBU0FETmdJSURBTUxJQVZCRkdvaUJDZ0NBQ0lEUlFSQUlBVW9BaEFpQTBVTkFpQUZRUkJxSVFRTEEwQWdCQ0VISUFNaUFVRVVhaUlFS0FJQUlnTU5BQ0FCUVJCcUlRUWdBU2dDRUNJRERRQUxJQWRCQURZQ0FBd0NDeUFGSUFGQmZuRTJBZ1FnQWlBQVFRRnlOZ0lFSUFBZ0Ftb2dBRFlDQUF3REMwRUFJUUVMSUFaRkRRQUNRQ0FGS0FJY0lnTkJBblJCdUNGcUlnUW9BZ0FnQlVZRVFDQUVJQUUyQWdBZ0FRMEJRWXdmUVl3ZktBSUFRWDRnQTNkeE5nSUFEQUlMSUFaQkVFRVVJQVlvQWhBZ0JVWWJhaUFCTmdJQUlBRkZEUUVMSUFFZ0JqWUNHQ0FGS0FJUUlnTUVRQ0FCSUFNMkFoQWdBeUFCTmdJWUN5QUZLQUlVSWdORkRRQWdBU0FETmdJVUlBTWdBVFlDR0FzZ0FpQUFRUUZ5TmdJRUlBQWdBbW9nQURZQ0FDQUNRWndmS0FJQVJ3MEFRWkFmSUFBMkFnQVBDeUFBUWY4QlRRUkFJQUJCZUhGQnNCOXFJUUVDZjBHSUh5Z0NBQ0lEUVFFZ0FFRURkblFpQUhGRkJFQkJpQjhnQUNBRGNqWUNBQ0FCREFFTElBRW9BZ2dMSVFBZ0FTQUNOZ0lJSUFBZ0FqWUNEQ0FDSUFFMkFnd2dBaUFBTmdJSUR3dEJIeUVESUFCQi8vLy9CMDBFUUNBQVFTWWdBRUVJZG1jaUFXdDJRUUZ4SUFGQkFYUnJRVDVxSVFNTElBSWdBellDSENBQ1FnQTNBaEFnQTBFQ2RFRzRJV29oQVFKQUFrQUNRRUdNSHlnQ0FDSUVRUUVnQTNRaUIzRkZCRUJCakI4Z0JDQUhjallDQUNBQklBSTJBZ0FnQWlBQk5nSVlEQUVMSUFCQkdTQURRUUYyYTBFQUlBTkJIMGNiZENFRElBRW9BZ0FoQVFOQUlBRWlCQ2dDQkVGNGNTQUFSZzBDSUFOQkhYWWhBU0FEUVFGMElRTWdCQ0FCUVFSeGFpSUhRUkJxS0FJQUlnRU5BQXNnQnlBQ05nSVFJQUlnQkRZQ0dBc2dBaUFDTmdJTUlBSWdBallDQ0F3QkN5QUVLQUlJSWdBZ0FqWUNEQ0FFSUFJMkFnZ2dBa0VBTmdJWUlBSWdCRFlDRENBQ0lBQTJBZ2dMUWFnZlFhZ2ZLQUlBUVFGcklnQkJmeUFBR3pZQ0FBc0xCQUFqQUFzR0FDQUFKQUFMRUFBakFDQUFhMEZ3Y1NJQUpBQWdBQXRLQVFGL0lBQWdBVWtFUUNBQUlBRWdBaEFDRHdzZ0FnUkFJQUFnQW1vaEF5QUJJQUpxSVFFRFFDQURRUUZySWdNZ0FVRUJheUlCTFFBQU9nQUFJQUpCQVdzaUFnMEFDd3NnQUF2OURnSVJmd0YrSXdCQk1Hc2lCeVFBUWJoL0lRZ0NRQ0FGUlEwQUlBUXNBQUFpQ1VIL0FYRWhDd0pBSUFsQkFFZ0VRQ0FMUWY0QWEwRUJkaUlHSUFWUERRSkJiQ0VJSUF0Qi93QnJJZ3RCL3dGTERRSWdCRUVCYWlFSVFRQWhCUU5BSUFVZ0MwOEVRQ0FMSVFnZ0JpRUxEQU1GSUFBZ0JXb2dDQ0FGUVFGMmFpSUVMUUFBUVFSMk9nQUFJQUFnQlVFQmNtb2dCQzBBQUVFUGNUb0FBQ0FGUVFKcUlRVU1BUXNBQ3dBTElBVWdDMDBOQVNBSFFmOEJOZ0lFSUFZZ0IwRUVhaUFIUVFocUlBUkJBV29pRGlBTEVBd2lCRUdJZjBzRVFDQUVJUWdNQWd0QlZDRUlJQWNvQWdnaUVFRUdTdzBCSUFjb0FnUWlFVUVCZENJSlFRSnFyVUlCSUJDdGhpSVlRUUVnRUhRaURVRUJhaUlGclVJQ2hueDhRZ3Q4UXZ6Ly8vLy8vLy8vL3dDRFF1UUNWZzBCUVZJaENDQVJRZjhCU3cwQklBMUJmM05CQW5SQjVBSnFyU0FSUVFGcUloVkJBWFN0SUJoOFFnaDhWQTBCSUFzZ0JHc2hGaUFFSUE1cUlSY2dCa0dBQkdvaUVpQUZRUUowYWlJUklBbHFRUUpxSVE0Z0JrR0VCR29oRTBHQWdBSWdFSFJCRUhZaENVRUFJUVZCQVNFUElBMUJBV3NpRkNFS0EwQWdCU0FWUmtVRVFBSkFJQVlnQlVFQmRDSUlhaThCQUNJRVFmLy9BMFlFUUNBVElBcEJBblJxSUFVNkFBSWdDa0VCYXlFS1FRRWhCQXdCQ3lBUFFRQWdDU0FFd1VvYklROExJQWdnRVdvZ0JEc0JBQ0FGUVFGcUlRVU1BUXNMSUFZZ0R6c0JnZ1FnQmlBUU93R0FCQUpBSUFvZ0ZFWUVRQ0FOUVFOMklRaENBQ0VZUVFBaER3TkFJQXdnRlVZRVFDQUlJQTFCQVhacVFRTnFJZ2xCQVhRaENFRUFJUVJCQUNFS0EwQkJBQ0VGSUFvZ0RVOE5CQU5BSUFWQkFrWkZCRUFnRXlBRklBbHNJQVJxSUJSeFFRSjBhaUFPSUFVZ0NtcHFMUUFBT2dBQ0lBVkJBV29oQlF3QkN3c2dDa0VDYWlFS0lBUWdDR29nRkhFaEJBd0FDd0FGSUFZZ0RFRUJkR291QVFBaENTQU9JQTlxSWdRZ0dEY0FBRUVJSVFVRFFDQUZJQWxPUlFSQUlBUWdCV29nR0RjQUFDQUZRUWhxSVFVTUFRc0xJQmhDZ1lLRWlKQ2d3SUFCZkNFWUlBeEJBV29oRENBSklBOXFJUThNQVFzQUN3QUxJQTFCQTNZZ0RVRUJkbXBCQTJvaENFRUFJUVVEUUNBTUlCVkdSUVJBUVFBaENTQUdJQXhCQVhScUxnRUFJZ1JCQUNBRVFRQktHeUVFQTBBZ0JDQUpSa1VFUUNBVElBVkJBblJxSUF3NkFBSURRQ0FGSUFocUlCUnhJZ1VnQ2tzTkFBc2dDVUVCYWlFSkRBRUxDeUFNUVFGcUlRd01BUXNMUVg4aENDQUZEUUlMSUJCQkFXb2hDRUVBSVFVRFFDQUZJQTFHUlFSQUlCRWdFeUFGUVFKMGFpSU9MUUFDUVFGMGFpSUVJQVF2QVFBaUNVRUJhanNCQUNBT0lBZ2dDV2RCWUhOcUlnUTZBQU1nRGlBSklBUjBJQTFyT3dFQUlBVkJBV29oQlF3QkN3c0NRQUpBSUFZdkFZSUVCRUFnQjBFY2FpSUVJQmNnRmhBTklnaEJpSDlMRFFJZ0IwRVVhaUFFSUJJUURpQUhRUXhxSUFRZ0VoQU9RUUFoQlFOQUlBZEJIR29pQkJBUElBVkIrd0ZMY2cwQ0lBQWdCV29pQmlBSFFSUnFJQVFRRURvQUFDQUdJQWRCREdvZ0JCQVFPZ0FCSUFWQkFuSWhCQ0FIUVJ4cUVBOEVRQ0FFSVFVTUF3VWdBQ0FFYWlBSFFSUnFJQWRCSEdvaUJCQVFPZ0FBSUFZZ0IwRU1haUFFRUJBNkFBTWdCVUVFYWlFRkRBRUxBQXNBQ3lBSFFSeHFJZ1FnRnlBV0VBMGlDRUdJZjBzTkFTQUhRUlJxSUFRZ0VoQU9JQWRCREdvZ0JDQVNFQTVCQUNFRkEwQWdCMEVjYWlJRUVBOGdCVUg3QVV0eVJRUkFJQUFnQldvaUJpQUhRUlJxSUFRUUVUb0FBQ0FHSUFkQkRHb2dCQkFST2dBQklBVkJBbkloQkNBSFFSeHFFQThFUUNBRUlRVUZJQUFnQkdvZ0IwRVVhaUFIUVJ4cUlnUVFFVG9BQUNBR0lBZEJER29nQkJBUk9nQURJQVZCQkdvaEJRd0NDd3NMQW44RFFFRzZmeUVJSUFWQi9RRkxEUU1nQUNBRmFpSUdJQWRCRkdvZ0IwRWNhaUlKRUJFNkFBQWdCa0VCYWlFRUlBa1FEMEVEUmdSQUlBZEJER29oQ0VFQ0RBSUxJQVZCL0FGTERRTWdCaUFIUVF4cUlBZEJIR29pQkJBUk9nQUJJQVZCQW1vaEJTQUVFQTlCQTBjTkFBc2dBQ0FGYWlFRUlBZEJGR29oQ0VFREN5QUVJQWdnQjBFY2FoQVJPZ0FBSUFacUlBQnJJUWdNQVFzQ2Z3TkFRYnAvSVFnZ0JVSDlBVXNOQWlBQUlBVnFJZ1lnQjBFVWFpQUhRUnhxSWdrUUVEb0FBQ0FHUVFGcUlRUWdDUkFQUVFOR0JFQWdCMEVNYWlFSVFRSU1BZ3NnQlVIOEFVc05BaUFHSUFkQkRHb2dCMEVjYWlJRUVCQTZBQUVnQlVFQ2FpRUZJQVFRRDBFRFJ3MEFDeUFBSUFWcUlRUWdCMEVVYWlFSVFRTUxJQVFnQ0NBSFFSeHFFQkE2QUFBZ0Jtb2dBR3NoQ0FzZ0NFR0lmMHNOQVFzZ0NDRUVRUUFoQlNBQlFRQkJOQkFESVFsQkFDRUtBMEFnQkNBRlJ3UkFJQUFnQldvaUJpMEFBQ0lCUVF0TEJFQkJiQ0VJREFNRklBa2dBVUVDZEdvaUFTQUJLQUlBUVFGcU5nSUFJQVZCQVdvaEJVRUJJQVl0QUFCMFFRRjFJQXBxSVFvTUFnc0FDd3RCYkNFSUlBcEZEUUFnQ21jaUJVRWZjeUlCUVF0TERRQWdBMEVnSUFWck5nSUFRUUZCQWlBQmRDQUtheUlEWjBFZmN5SUJkQ0FEUncwQUlBQWdCR29nQVVFQmFpSUFPZ0FBSUFrZ0FFRUNkR29pQUNBQUtBSUFRUUZxTmdJQUlBa29BZ1FpQUVFQ1NTQUFRUUZ4Y2cwQUlBSWdCRUVCYWpZQ0FDQUxRUUZxSVFnTElBZEJNR29rQUNBSUM2QUZBUXgvSXdCQkVHc2lEQ1FBQW44Z0JFRUhUUVJBSUF4Q0FEY0RDQ0FNUVFocUlnVWdBeUFFRUFJYVFXd2dBQ0FCSUFJZ0JVRUlFQXdpQUNBQUlBUkxHeUFBSUFCQmlYOUpHd3dCQ3lBQVFRQWdBU2dDQUVFQmFpSU5RUUYwRUFNaEQwRlVJQU1vQUFBaUJrRVBjU0lBUVFwTERRQWFJQUlnQUVFRmFqWUNBQ0FESUFScUlnSkJCR3NoQnlBQ1FRZHJJUXNnQUVFR2FpRU9RUVFoQWlBR1FRUjJJUVZCSUNBQWRDSUlRUUZ5SVFsQkFDRUFRUUVoQmlBRElRUURRQUpBSUFaQkFYRkZCRUFEUUNBRlFYOXpRWUNBZ0lCNGNtZ2lCa0VZU1VVRVFDQUFRU1JxSVFBZ0JDQUxUUVIvSUFSQkEyb0ZJQVFnQzJ0QkEzUWdBbXBCSDNFaEFpQUhDeUlFS0FBQUlBSjJJUVVNQVFzTElBSWdCa0VlY1NJS2FrRUNhaUVDSUFaQkFYWkJBMndnQUdvZ0JTQUtka0VEY1dvaUFDQU5UdzBCQW44Z0JDQUxTeUFDUVFOMklBUnFJZ1VnQjB0eFJRUkFJQUpCQjNFaEFpQUZEQUVMSUFRZ0IydEJBM1FnQW1wQkgzRWhBaUFIQ3lJRUtBQUFJQUoySVFVTElBVWdDRUVCYTNFaUJpQUlRUUYwUVFGcklnb2dDV3NpRUVrRWZ5QU9RUUZyQlNBRklBcHhJZ1VnRUVFQUlBVWdDRTRiYXlFR0lBNExJUVVnRHlBQVFRRjBhaUFHUVFGcklnbzdBUUFnQUVFQmFpRUFJQUlnQldvaEFpQUlRUUVnQm1zZ0NpQUdRUUJLR3lBSmFpSUpTZ1JBSUFsQkFrZ05BVUVnSUFsbklnVnJJUTVCQVNBRlFSOXpkQ0VJQ3lBQUlBMVBEUUFnQ2tFQVJ5RUdBbjhnQkNBTFN5QUNRUU4xSUFScUlnVWdCMHR4UlFSQUlBSkJCM0VoQWlBRkRBRUxJQUlnQkNBSGEwRURkR3BCSDNFaEFpQUhDeUlFS0FBQUlBSjJJUVVNQVFzTFFXd2dDVUVCUncwQUdrRlFJQUFnRFVzTkFCcEJiQ0FDUVNCS0RRQWFJQUVnQUVFQmF6WUNBQ0FFSUFKQkIycEJBM1ZxSUFOckN5QU1RUkJxSkFBTDhnRUJBWDhnQWtVRVFDQUFRZ0EzQWdBZ0FFRUFOZ0lRSUFCQ0FEY0NDRUc0Znc4TElBQWdBVFlDRENBQUlBRkJCR28yQWhBZ0FrRUVUd1JBSUFBZ0FTQUNhaUlCUVFScklnTTJBZ2dnQUNBREtBQUFOZ0lBSUFGQkFXc3RBQUFpQVFSQUlBQWdBV2RCRjJzMkFnUWdBZzhMSUFCQkFEWUNCRUYvRHdzZ0FDQUJOZ0lJSUFBZ0FTMEFBQ0lETmdJQUFrQUNRQUpBSUFKQkFtc09BZ0VBQWdzZ0FDQUJMUUFDUVJCMElBTnlJZ00yQWdBTElBQWdBUzBBQVVFSWRDQURhallDQUFzZ0FTQUNha0VCYXkwQUFDSUJSUVJBSUFCQkFEWUNCRUZzRHdzZ0FDQUJaeUFDUVFOMGEwRUphallDQkNBQ0MwUUJBbjhnQVNBQ0x3RUFJZ01nQVNnQ0JHb2lCRFlDQkNBQUlBTkJBblJCb0IxcUtBSUFJQUVvQWdCQkFDQUVhM1p4TmdJQUlBRVFEeG9nQUNBQ1FRUnFOZ0lFQzU4QkFRUi9RUU1oQVNBQUtBSUVJZ0pCSUUwRVFDQUFLQUlJSWdFZ0FDZ0NFRThFUUNBQUlBSkJCM0UyQWdRZ0FDQUJJQUpCQTNacklnSTJBZ2dnQUNBQ0tBQUFOZ0lBUVFBUEN5QUFLQUlNSWdNZ0FVWUVRRUVCUVFJZ0FrRWdTUnNQQ3lBQUlBRWdBU0FEYXlBQ1FRTjJJZ1FnQVNBRWF5QURTU0lCR3lJRGF5SUVOZ0lJSUFBZ0FpQURRUU4wYXpZQ0JDQUFJQVFvQUFBMkFnQUxJQUVMU0FFRWZ5QUFLQUlFSUFBb0FnQkJBblJxSWdJdEFBSWdBaThCQUNFRUlBRWdBU2dDQkNJRklBSXRBQU1pQW1vMkFnUWdBQ0FFSUFFb0FnQWdCWFJCQUNBQ2EzWnFOZ0lBQzFJQkJIOGdBQ2dDQkNBQUtBSUFRUUowYWlJQ0xRQUNJQUl2QVFBaEJDQUJJQUl0QUFNaUFpQUJLQUlFYWlJRk5nSUVJQUFnQkNBQ1FRSjBRYUFkYWlnQ0FDQUJLQUlBUVFBZ0JXdDJjV28yQWdBTENBQWdBRUdJZjBzTEdnQWdBQVJBSUFFRVFDQUNJQUFnQVJFQ0FBOExJQUFRQmdzTHBnZ0NEWDhCZmlNQVFSQnJJZ2trQUNBSlFRQTJBZ3dnQ1VFQU5nSUlBbjhDUUNBRFFlZ0phaUFESUFsQkNHb2dDVUVNYWlBQklBSWdBMEdBQVdvUUN5SVBRWWgvU3cwQVFWUWdDU2dDRENJRUlBQW9BZ0FpQVVIL0FYRkJBV3BMRFFFYUlBQkJCR29oQ3lBQUlBRkIvNEdBZUhFZ0JFRVFkRUdBZ1B3SGNYSTJBZ0JCZnlBRUlBUkJBRWdiUVFGcUlRQkJBQ0VCSUFrb0FnZ2hCVUVBSVFJRFFDQUFJQUpHQkVBZ0JVRURheUVCUVFBaEFBTkFBa0JCQUNFQ0lBQWdBVTRFUUFOQUlBQWdCVTROQWlBRElBQWdBMnBCNkFscUxRQUFRUUowYWtGQWF5SUJJQUVvQWdBaUFVRUJhallDQUNBQklBTnFJQUE2QU9nSElBQkJBV29oQUF3QUN3QUZBMEFnQWtFRVJrVUVRQ0FESUFNZ0FDQUNhaUlIYWtIb0NXb3RBQUJCQW5ScVFVQnJJZ2dnQ0NnQ0FDSUlRUUZxTmdJQUlBTWdDR29nQnpvQTZBY2dBa0VCYWlFQ0RBRUxDeUFBUVFScUlRQU1BZ3NBQ3dzZ0JFRUJhaUVPSUFNb0FnQWhCMEVBSVFCQkFTRUlBMEFnQ0NBT1JnMERJQTRnQ0dzaEJDQURJQWhCQW5ScUtBSUFJUVVDUUFKQUFrQUNRQUpBQWtCQkFTQUlkRUVCZFNJTlFRRnJEZ2dBQVFRQ0JBUUVBd1FMUVFBaEFpQUZRUUFnQlVFQVNoc2hCaUFBSVFFRFFDQUNJQVpHRFFVZ0F5QUNJQWRxYWkwQTZBY2hDaUFMSUFGQkFYUnFJZ3dnQkRvQUFTQU1JQW82QUFBZ0FrRUJhaUVDSUFGQkFXb2hBUXdBQ3dBTFFRQWhBaUFGUVFBZ0JVRUFTaHNoQ2lBQUlRRURRQ0FDSUFwR0RRUWdDeUFCUVFGMGFpSUdJQU1nQWlBSGFtb3RBT2dISWd3NkFBSWdCaUFFT2dBQklBWWdERG9BQUNBR0lBUTZBQU1nQWtFQmFpRUNJQUZCQW1vaEFRd0FDd0FMUVFBaEFpQUZRUUFnQlVFQVNoc2hCaUFFUVFoMFFZRCtBM0VoQkNBQUlRRURRQ0FDSUFaR0RRTWdDeUFCUVFGMGFpQUVJQU1nQWlBSGFtb3RBT2dIY3ExQ2dZQ0VnSkNBd0FCK053QUFJQUpCQVdvaEFpQUJRUVJxSVFFTUFBc0FDMEVBSVFJZ0JVRUFJQVZCQUVvYklRWWdCRUVJZEVHQS9nTnhJUVFnQUNFQkEwQWdBaUFHUmcwQ0lBc2dBVUVCZEdvaUNpQUVJQU1nQWlBSGFtb3RBT2dIY3ExQ2dZQ0VnSkNBd0FCK0loRTNBQWdnQ2lBUk53QUFJQUpCQVdvaEFpQUJRUWhxSVFFTUFBc0FDMEVBSVFFZ0JVRUFJQVZCQUVvYklRb2dCRUVJZEVHQS9nTnhJUXdnQUNFRUEwQWdBU0FLUmcwQklBc2dCRUVCZEdvaEVDQU1JQU1nQVNBSGFtb3RBT2dIY3ExQ2dZQ0VnSkNBd0FCK0lSRkJBQ0VDQTBBZ0FpQU5Ua1VFUUNBUUlBSkJBWFJxSWdZZ0VUY0FHQ0FHSUJFM0FCQWdCaUFSTndBSUlBWWdFVGNBQUNBQ1FSQnFJUUlNQVFzTElBRkJBV29oQVNBRUlBMXFJUVFNQUFzQUN5QUlRUUZxSVFnZ0JTQUhhaUVISUFVZ0RXd2dBR29oQUF3QUN3QUZJQU1nQWtFQ2RHb2lCMEZBYXlBQk5nSUFJQUpCQVdvaEFpQUhLQUlBSUFGcUlRRU1BUXNBQ3dBTElBOExJQWxCRUdva0FBdnlBZ0VHZnlNQVFTQnJJZ1VrQUNBRUtBSUFJUVlnQlVFTWFpQUNJQU1RRFNJRFFZaC9UUVJBSUFSQkJHb2hBaUFBSUFGcUlnbEJBMnNoQkVFQUlBWkJFSFpyUVI5eElRTURRQ0FGUVF4cUVBOGdBQ0FFVDNKRkJFQWdBaUFGS0FJTUlnWWdCU2dDRUNJSGRDQURka0VCZEdvaUNDMEFBU0VLSUFBZ0NDMEFBRG9BQUNBQ0lBWWdCeUFLYWlJR2RDQURka0VCZEdvaUJ5MEFBQ0VJSUFVZ0JpQUhMUUFCYWpZQ0VDQUFJQWc2QUFFZ0FFRUNhaUVBREFFTEN3TkFJQVZCREdvUUR5RUhJQVVvQWd3aEJpQUZLQUlRSVFRZ0FDQUpUeUFIY2tVRVFDQUNJQVlnQkhRZ0EzWkJBWFJxSWdZdEFBQWhCeUFGSUFRZ0JpMEFBV28yQWhBZ0FDQUhPZ0FBSUFCQkFXb2hBQXdCQ3dzRFFDQUFJQWxQUlFSQUlBSWdCaUFFZENBRGRrRUJkR29pQnkwQUFTRUlJQUFnQnkwQUFEb0FBQ0FBUVFGcUlRQWdCQ0FJYWlFRURBRUxDMEZzUVd3Z0FTQUZLQUlVSUFVb0FoaEhHeUFFUVNCSEd5RURDeUFGUVNCcUpBQWdBd3ZQRkFFamZ5TUFRZEFBYXlJRkpBQkJiQ0VKQWtBZ0EwRUtTUTBBQWtBZ0F5QUNMd0FFSWdjZ0FpOEFBQ0lJSUFJdkFBSWlEV3BxUVFacUlneEpEUUFnQkM4QkFpRUdJQVZCUEdvZ0FrRUdhaUlDSUFnUURTSUpRWWgvU3cwQklBVkJLR29nQWlBSWFpSUNJQTBRRFNJSlFZaC9TdzBCSUFWQkZHb2dBaUFOYWlJQ0lBY1FEU0lKUVloL1N3MEJJQVVnQWlBSGFpQURJQXhyRUEwaUNVR0lmMHNOQVNBRVFRUnFJUW9nQUNBQmFpSWZRUU5ySVNCQkFDQUdhMEVmY1NFTElBVW9BZ2doRVNBRktBSWNJUklnQlNnQ01DRVRJQVVvQWtRaEZDQUZLQUlFSVFrZ0JTZ0NHQ0VOSUFVb0Fpd2hEQ0FGS0FKQUlRWWdCU2dDRUNFaElBVW9BaVFoSWlBRktBSTRJU01nQlNnQ1RDRWtJQVVvQWdBaEZTQUZLQUlVSVJZZ0JTZ0NLQ0VYSUFVb0Fqd2hHRUVCSVE4Z0FDQUJRUU5xUVFKMklnUnFJZ01nQkdvaUFpQUVhaUlaSVFRZ0FpRUlJQU1oQndOQUlBOUJBWEZGSUFRZ0lFOXlSUVJBSUFBZ0NpQVlJQVowSUF0MlFRSjBhaUlPTHdFQU93QUFJQTR0QUFJaEdpQU9MUUFESVJBZ0J5QUtJQmNnREhRZ0MzWkJBblJxSWc0dkFRQTdBQUFnRGkwQUFpRWJJQTR0QUFNaER5QUlJQW9nRmlBTmRDQUxka0VDZEdvaURpOEJBRHNBQUNBT0xRQUNJUndnRGkwQUF5RWRJQVFnQ2lBVklBbDBJQXQyUVFKMGFpSU9Md0VBT3dBQUlBNHRBQUloSGlBT0xRQURJUTRnQUNBUWFpSWxJQW9nR0NBR0lCcHFJZ1owSUF0MlFRSjBhaUlRTHdFQU93QUFJQkF0QUFJZ0VDMEFBeUVtSUFjZ0Qyb2lKeUFLSUJjZ0RDQWJhaUlhZENBTGRrRUNkR29pQnk4QkFEc0FBQ0FITFFBQ0lRd2dCeTBBQXlFUUlBZ2dIV29pR3lBS0lCWWdEU0FjYWlJUGRDQUxka0VDZEdvaUNDOEJBRHNBQUNBSUxRQUNJUTBnQ0MwQUF5RWNJQVFnRG1vaUhTQUtJQlVnQ1NBZWFpSU9kQ0FMZGtFQ2RHb2lDUzhCQURzQUFDQUdhaUVBUVFNaEJ3Si9JQlFnSkVrRVFDQUFJUVpCQXd3QkN5QUFRUWR4SVFZZ0ZDQUFRUU4yYXlJVUtBQUFJUmhCQUFzZ0NTMEFBeUVlSUFrdEFBSWhDQ0FNSUJwcUlRQWdFeUFqU1FSL0lBQUZJQk1nQUVFRGRtc2lFeWdBQUNFWFFRQWhCeUFBUVFkeEN5RU1JQTBnRDJvaEFDQUhjaUVKUVFNaER3Si9JQklnSWtrRVFDQUFJUTFCQXd3QkN5QUFRUWR4SVEwZ0VpQUFRUU4yYXlJU0tBQUFJUlpCQUFzZ0NDQU9haUVBSUFseUlCRWdJVWtFZnlBQUJTQVJJQUJCQTNackloRW9BQUFoRlVFQUlROGdBRUVIY1FzaENTQWxJQ1pxSVFBZ0VDQW5haUVISUJzZ0hHb2hDQ0FkSUI1cUlRUWdEM0pGSVE4TUFRc0xJQVVnRERZQ0xDQUZJQVkyQWtBZ0JTQU5OZ0lZSUFVZ0NUWUNCQ0FGSUJRMkFrUWdCU0FUTmdJd0lBVWdFallDSENBRklCRTJBZ2dnQlNBWU5nSThJQVVnRnpZQ0tDQUZJQlkyQWhRZ0JTQVZOZ0lBSUFJZ0Iwa2dBQ0FEUzNJTkFFRnNJUWtnQ0NBWlN3MEJJQU5CQTJzaENRTkFJQVZCUEdvUUQwVWdBQ0FKU1hFRVFDQUFJQW9nQlNnQ1BDSU5JQVVvQWtBaURIUWdDM1pCQW5ScUlnNHZBUUE3QUFBZ0FDQU9MUUFEYWlJR0lBb2dEU0FNSUE0dEFBSnFJZ0IwSUF0MlFRSjBhaUlNTHdFQU93QUFJQVVnQUNBTUxRQUNhallDUUNBR0lBd3RBQU5xSVFBTUFRVWdBMEVDYXlFTUEwQWdCVUU4YWhBUElRWWdCU2dDUENFTklBVW9Ba0FoQ1NBQUlBeExJQVp5UlFSQUlBQWdDaUFOSUFsMElBdDJRUUowYWlJR0x3RUFPd0FBSUFVZ0NTQUdMUUFDYWpZQ1FDQUFJQVl0QUFOcUlRQU1BUXNMQTBBZ0FDQU1TMFVFUUNBQUlBb2dEU0FKZENBTGRrRUNkR29pQmk4QkFEc0FBQ0FBSUFZdEFBTnFJUUFnQ1NBR0xRQUNhaUVKREFFTEN3SkFJQUFnQTA4TkFDQUFJQW9nRFNBSmRDQUxkaUlBUVFKMGFpSURMUUFBT2dBQUlBTXRBQU5CQVVZRVFDQUpJQU10QUFKcUlRa01BUXNnQ1VFZlN3MEFRU0FnQ1NBS0lBQkJBblJxTFFBQ2FpSUFJQUJCSUU4YklRa0xJQUpCQTJzaERBTkFJQVZCS0dvUUQwVWdCeUFNU1hFRVFDQUhJQW9nQlNnQ0tDSUdJQVVvQWl3aUFIUWdDM1pCQW5ScUlnMHZBUUE3QUFBZ0J5QU5MUUFEYWlJRElBb2dCaUFBSUEwdEFBSnFJZ0IwSUF0MlFRSjBhaUlHTHdFQU93QUFJQVVnQUNBR0xRQUNhallDTENBRElBWXRBQU5xSVFjTUFRVWdBa0VDYXlFR0EwQWdCVUVvYWhBUElRTWdCU2dDS0NFTUlBVW9BaXdoQUNBR0lBZEpJQU55UlFSQUlBY2dDaUFNSUFCMElBdDJRUUowYWlJREx3RUFPd0FBSUFVZ0FDQURMUUFDYWpZQ0xDQUhJQU10QUFOcUlRY01BUXNMQTBBZ0JpQUhTVVVFUUNBSElBb2dEQ0FBZENBTGRrRUNkR29pQXk4QkFEc0FBQ0FISUFNdEFBTnFJUWNnQUNBRExRQUNhaUVBREFFTEN3SkFJQUlnQjAwTkFDQUhJQW9nRENBQWRDQUxkaUlDUVFKMGFpSURMUUFBT2dBQUlBTXRBQU5CQVVZRVFDQUFJQU10QUFKcUlRQU1BUXNnQUVFZlN3MEFRU0FnQUNBS0lBSkJBblJxTFFBQ2FpSUFJQUJCSUU4YklRQUxJQmxCQTJzaERBTkFJQVZCRkdvUUQwVWdDQ0FNU1hFRVFDQUlJQW9nQlNnQ0ZDSUdJQVVvQWhnaUFuUWdDM1pCQW5ScUlnMHZBUUE3QUFBZ0NDQU5MUUFEYWlJRElBb2dCaUFDSUEwdEFBSnFJZ0owSUF0MlFRSjBhaUlHTHdFQU93QUFJQVVnQWlBR0xRQUNhallDR0NBRElBWXRBQU5xSVFnTUFRVWdHVUVDYXlFREEwQWdCVUVVYWhBUElRSWdCU2dDRkNFR0lBVW9BaGdoQnlBRElBaEpJQUp5UlFSQUlBZ2dDaUFHSUFkMElBdDJRUUowYWlJQ0x3RUFPd0FBSUFVZ0J5QUNMUUFDYWpZQ0dDQUlJQUl0QUFOcUlRZ01BUXNMQTBBZ0F5QUlTVVVFUUNBSUlBb2dCaUFIZENBTGRrRUNkR29pQWk4QkFEc0FBQ0FJSUFJdEFBTnFJUWdnQnlBQ0xRQUNhaUVIREFFTEN3SkFJQWdnR1U4TkFDQUlJQW9nQmlBSGRDQUxkaUlDUVFKMGFpSURMUUFBT2dBQUlBTXRBQU5CQVVZRVFDQUhJQU10QUFKcUlRY01BUXNnQjBFZlN3MEFRU0FnQnlBS0lBSkJBblJxTFFBQ2FpSUNJQUpCSUU4YklRY0xBMEFnQlJBUFJTQUVJQ0JKY1FSQUlBUWdDaUFGS0FJQUlnWWdCU2dDQkNJQ2RDQUxka0VDZEdvaURDOEJBRHNBQUNBRUlBd3RBQU5xSWdNZ0NpQUdJQUlnREMwQUFtb2lBblFnQzNaQkFuUnFJZ1F2QVFBN0FBQWdCU0FDSUFRdEFBSnFOZ0lFSUFNZ0JDMEFBMm9oQkF3QkJTQWZRUUpySVFNRFFDQUZFQThoQWlBRktBSUFJUVlnQlNnQ0JDRUlJQU1nQkVrZ0FuSkZCRUFnQkNBS0lBWWdDSFFnQzNaQkFuUnFJZ0l2QVFBN0FBQWdCU0FJSUFJdEFBSnFOZ0lFSUFRZ0FpMEFBMm9oQkF3QkN3c0RRQ0FESUFSSlJRUkFJQVFnQ2lBR0lBaDBJQXQyUVFKMGFpSUNMd0VBT3dBQUlBUWdBaTBBQTJvaEJDQUlJQUl0QUFKcUlRZ01BUXNMQWtBZ0JDQWZUdzBBSUFRZ0NpQUdJQWgwSUF0MklnSkJBblJxSWdNdEFBQTZBQUFnQXkwQUEwRUJSZ1JBSUFnZ0F5MEFBbW9oQ0F3QkN5QUlRUjlMRFFCQklDQUlJQW9nQWtFQ2RHb3RBQUpxSWdJZ0FrRWdUeHNoQ0F0QmJFRnNRV3hCYkVGc1FXeEJiRUZzSUFFZ0NFRWdSeHNnQlNnQ0NDQUZLQUlNUnhzZ0IwRWdSeHNnQlNnQ0hDQUZLQUlnUnhzZ0FFRWdSeHNnQlNnQ01DQUZLQUkwUnhzZ0NVRWdSeHNnQlNnQ1JDQUZLQUpJUnhzaENRd0pDd0FMQUFzQUN3QUxBQXNBQ3dBTEFBdEJiQ0VKQ3lBRlFkQUFhaVFBSUFrTDdCQUJIbjhqQUVIUUFHc2lCU1FBUVd3aENRSkFJQU5CQ2trTkFBSkFJQU1nQWk4QUJDSUdJQUl2QUFBaUJ5QUNMd0FDSWdocWFrRUdhaUlPU1EwQUlBUXZBUUloRHlBRlFUeHFJQUpCQm1vaUFpQUhFQTBpQ1VHSWYwc05BU0FGUVNocUlBSWdCMm9pQWlBSUVBMGlDVUdJZjBzTkFTQUZRUlJxSUFJZ0NHb2lBaUFHRUEwaUNVR0lmMHNOQVNBRklBSWdCbW9nQXlBT2F4QU5JZ2xCaUg5TERRRWdCRUVFYWlFS0lBQWdBV29pSEVFRGF5RWRRUUFnRDJ0QkgzRWhDeUFGS0FJSUlSRWdCU2dDSENFU0lBVW9BakFoRXlBRktBSkVJUlFnQlNnQ0JDRUpJQVVvQWhnaEJpQUZLQUlzSVFjZ0JTZ0NRQ0VJSUFVb0FoQWhIaUFGS0FJa0lSOGdCU2dDT0NFZ0lBVW9Ba3doSVNBRktBSUFJUlVnQlNnQ0ZDRVdJQVVvQWlnaEZ5QUZLQUk4SVJoQkFTRU5JQUFnQVVFRGFrRUNkaUlDYWlJT0lBSnFJZzhnQW1vaUdTRUVJQThoQWlBT0lRTURRQ0FOUlNBRUlCMVBja1VFUUNBS0lCZ2dDSFFnQzNaQkFYUnFJZ3d0QUFFaERTQUFJQXd0QUFBNkFBQWdDaUFYSUFkMElBdDJRUUYwYWlJTUxRQUJJUkFnQXlBTUxRQUFPZ0FBSUFvZ0ZpQUdkQ0FMZGtFQmRHb2lEQzBBQVNFYUlBSWdEQzBBQURvQUFDQUtJQlVnQ1hRZ0MzWkJBWFJxSWd3dEFBRWhHeUFFSUF3dEFBQTZBQUFnQ2lBWUlBZ2dEV29pQ0hRZ0MzWkJBWFJxSWd3dEFBRWhEU0FBSUF3dEFBQTZBQUVnQ2lBWElBY2dFR29pQjNRZ0MzWkJBWFJxSWd3dEFBRWhFQ0FESUF3dEFBQTZBQUVnQ2lBV0lBWWdHbW9pREhRZ0MzWkJBWFJxSWdZdEFBRWhHaUFDSUFZdEFBQTZBQUVnQ2lBVklBa2dHMm9pRzNRZ0MzWkJBWFJxSWdrdEFBRWhJaUFFSUFrdEFBQTZBQUVnQ0NBTmFpRUdRUU1oQ1FKL0lCUWdJVWtFUUVFRElRMGdCZ3dCQ3lBVUlBWkJBM1pySWhRb0FBQWhHRUVBSVEwZ0JrRUhjUXNoQ0NBSElCQnFJUVlnRXlBZ1NRUi9JQVlGSUJNZ0JrRURkbXNpRXlnQUFDRVhRUUFoQ1NBR1FRZHhDeUVISUF3Z0dtb2hEQ0FKSUExeUlSQkJBeUVOQW44Z0VpQWZTUVJBSUF3aEJrRUREQUVMSUF4QkIzRWhCaUFTSUF4QkEzWnJJaElvQUFBaEZrRUFDeUFiSUNKcUlRd2dFSEloRUNBUklCNUpCSDhnREFVZ0VTQU1RUU4yYXlJUktBQUFJUlZCQUNFTklBeEJCM0VMSVFrZ0JFRUNhaUVFSUFKQkFtb2hBaUFEUVFKcUlRTWdBRUVDYWlFQUlBMGdFSEpGSVEwTUFRc0xJQVVnQnpZQ0xDQUZJQWcyQWtBZ0JTQUdOZ0lZSUFVZ0NUWUNCQ0FGSUJRMkFrUWdCU0FUTmdJd0lBVWdFallDSENBRklCRTJBZ2dnQlNBWU5nSThJQVVnRnpZQ0tDQUZJQlkyQWhRZ0JTQVZOZ0lBSUFBZ0Rrc2dBeUFQUzNJTkFFRnNJUWtnQWlBWlN3MEJJQTVCQTJzaENRTkFJQVZCUEdvUUR5QUFJQWxQY2tVRVFDQUtJQVVvQWp3aUJpQUZLQUpBSWdkMElBdDJRUUYwYWlJSUxRQUJJUXdnQUNBSUxRQUFPZ0FBSUFvZ0JpQUhJQXhxSWdaMElBdDJRUUYwYWlJSExRQUFJUWdnQlNBR0lBY3RBQUZxTmdKQUlBQWdDRG9BQVNBQVFRSnFJUUFNQVFzTEEwQWdCVUU4YWhBUElRY2dCU2dDUENFR0lBVW9Ba0FoQ1NBQUlBNVBJQWR5UlFSQUlBb2dCaUFKZENBTGRrRUJkR29pQmkwQUFDRUhJQVVnQ1NBR0xRQUJhallDUUNBQUlBYzZBQUFnQUVFQmFpRUFEQUVMQ3dOQUlBQWdEazlGQkVBZ0NpQUdJQWwwSUF0MlFRRjBhaUlITFFBQklBQWdCeTBBQURvQUFDQUFRUUZxSVFBZ0NXb2hDUXdCQ3dzZ0QwRURheUVBQTBBZ0JVRW9haEFQSUFBZ0EwMXlSUVJBSUFvZ0JTZ0NLQ0lHSUFVb0Fpd2lCM1FnQzNaQkFYUnFJZ2d0QUFFaERpQURJQWd0QUFBNkFBQWdDaUFHSUFjZ0Rtb2lCblFnQzNaQkFYUnFJZ2N0QUFBaENDQUZJQVlnQnkwQUFXbzJBaXdnQXlBSU9nQUJJQU5CQW1vaEF3d0JDd3NEUUNBRlFTaHFFQThoQnlBRktBSW9JUVlnQlNnQ0xDRUFJQU1nRDA4Z0IzSkZCRUFnQ2lBR0lBQjBJQXQyUVFGMGFpSUdMUUFBSVFjZ0JTQUFJQVl0QUFGcU5nSXNJQU1nQnpvQUFDQURRUUZxSVFNTUFRc0xBMEFnQXlBUFQwVUVRQ0FLSUFZZ0FIUWdDM1pCQVhScUlnY3RBQUVoQ0NBRElBY3RBQUE2QUFBZ0EwRUJhaUVESUFBZ0NHb2hBQXdCQ3dzZ0dVRURheUVEQTBBZ0JVRVVhaEFQSUFJZ0EwOXlSUVJBSUFvZ0JTZ0NGQ0lHSUFVb0FoZ2lCM1FnQzNaQkFYUnFJZ2d0QUFFaERpQUNJQWd0QUFBNkFBQWdDaUFHSUFjZ0Rtb2lCblFnQzNaQkFYUnFJZ2N0QUFBaENDQUZJQVlnQnkwQUFXbzJBaGdnQWlBSU9nQUJJQUpCQW1vaEFnd0JDd3NEUUNBRlFSUnFFQThoQnlBRktBSVVJUVlnQlNnQ0dDRURJQUlnR1U4Z0IzSkZCRUFnQ2lBR0lBTjBJQXQyUVFGMGFpSUdMUUFBSVFjZ0JTQURJQVl0QUFGcU5nSVlJQUlnQnpvQUFDQUNRUUZxSVFJTUFRc0xBMEFnQWlBWlQwVUVRQ0FLSUFZZ0EzUWdDM1pCQVhScUlnY3RBQUVoQ0NBQ0lBY3RBQUE2QUFBZ0FrRUJhaUVDSUFNZ0NHb2hBd3dCQ3dzRFFDQUZFQThnQkNBZFQzSkZCRUFnQ2lBRktBSUFJZ0lnQlNnQ0JDSUdkQ0FMZGtFQmRHb2lCeTBBQVNFSUlBUWdCeTBBQURvQUFDQUtJQUlnQmlBSWFpSUNkQ0FMZGtFQmRHb2lCaTBBQUNFSElBVWdBaUFHTFFBQmFqWUNCQ0FFSUFjNkFBRWdCRUVDYWlFRURBRUxDd05BSUFVUUR5RUhJQVVvQWdBaEJpQUZLQUlFSVFJZ0JDQWNUeUFIY2tVRVFDQUtJQVlnQW5RZ0MzWkJBWFJxSWdZdEFBQWhCeUFGSUFJZ0JpMEFBV28yQWdRZ0JDQUhPZ0FBSUFSQkFXb2hCQXdCQ3dzRFFDQUVJQnhQUlFSQUlBb2dCaUFDZENBTGRrRUJkR29pQnkwQUFTRUlJQVFnQnkwQUFEb0FBQ0FFUVFGcUlRUWdBaUFJYWlFQ0RBRUxDMEZzUVd4QmJFRnNRV3hCYkVGc1FXd2dBU0FDUVNCSEd5QUZLQUlJSUFVb0FneEhHeUFEUVNCSEd5QUZLQUljSUFVb0FpQkhHeUFBUVNCSEd5QUZLQUl3SUFVb0FqUkhHeUFKUVNCSEd5QUZLQUpFSUFVb0FraEhHeUVKREFFTFFXd2hDUXNnQlVIUUFHb2tBQ0FKQzFnQkEzOENRQ0FBS0FLUTZ3RWlBVVVOQUNBQktBSUFJQUZCdE5VQmFpZ0NBQ0lDSUFGQnVOVUJhaWdDQUNJREVCTWdBZ1JBSUFNZ0FTQUNFUUlBREFFTElBRVFCZ3NnQUVFQU5nS2c2d0VnQUVJQU53T1E2d0VMNlFNQ0JIOENmaUFBUVFCQktCQURJUVFnQWtFQlFRVWdBeHNpQUVrRVFDQUFEd3NnQVVVRVFFRi9Ed3RCQVNFR0FrQUNRQ0FEUVFGR0RRQWdBeUVHSUFFb0FBQWlCVUdvNnI1cFJnMEFRWFloQXlBRlFYQnhRZERVdE1JQlJ3MEJRUWdoQXlBQ1FRaEpEUUVnQVRVQUJDRUlJQVJCQVRZQ0ZDQUVJQWczQXdCQkFBOExJQUVnQWlBR0VCb2lBeUFDU3cwQUlBUWdBellDR0VGeUlRTWdBQ0FCYWlJRlFRRnJMUUFBSWdKQkNIRU5BQ0FDUVNCeElnWkZCRUJCY0NFRElBVXRBQUFpQlVHbkFVc05BU0FGUVFkeHJVSUJJQVZCQTNaQkNtcXRoaUlJUWdPSWZpQUlmQ0VKSUFCQkFXb2hBQXNnQWtFR2RpRUZJQUpCQW5aQkFDRURBa0FDUUFKQUFrQWdBa0VEY1VFQmF3NERBQUVDQXdzZ0FDQUJhaTBBQUNFRElBQkJBV29oQUF3Q0N5QUFJQUZxTHdBQUlRTWdBRUVDYWlFQURBRUxJQUFnQVdvb0FBQWhBeUFBUVFScUlRQUxRUUZ4SVFJQ2ZnSkFBa0FDUUFKQUlBVkJBV3NPQXdFQ0F3QUxRbjhnQmtVTkF4b2dBQ0FCYWpFQUFBd0RDeUFBSUFGcU13QUFRb0FDZkF3Q0N5QUFJQUZxTlFBQURBRUxJQUFnQVdvcEFBQUxJUWdnQkNBQ05nSWdJQVFnQXpZQ0hDQUVJQWczQXdCQkFDRURJQVJCQURZQ0ZDQUVJQWdnQ1NBR0d5SUlOd01JSUFSQ2dJQUlJQWdnQ0VLQWdBaGFHejRDRUFzZ0F3dGZBUUYvUWJoL0lRTWdBVUVCUVFVZ0Foc2lBazhFZnlBQUlBSnFRUUZyTFFBQUlnQkJBM0ZCQW5SQm9CNXFLQUlBSUFKcUlBQkJCSFpCREhGQnNCNXFLQUlBYWlBQVFTQnhJZ0ZGYWlBQlFRVjJJQUJCd0FCSmNXb0ZRYmgvQ3dzTUFDQUFJQUVnQWtFQUVCa0xsd01DQlg4Q2ZpTUFRVUJxSWdRa0FBSkFBMEFnQVVFRlR3UkFBa0FnQUNnQUFFRndjVUhRMUxUQ0FVWUVRRUorSVFjZ0FVRUlTUTBFSUFBb0FBUWlBa0YzU3cwRUlBSkJDR29pQXlBQlN3MEVJQUpCZ1g5SkRRRU1CQXNnQkVFWWFpQUFJQUVRR3lFQ1FuNGdCQ2tER0VJQUlBUW9BaXhCQVVjYklBSWJJZ2RDZlZZTkF5QUhJQWg4SWdnZ0IxUkNmaUVIRFFNQ1FBSkFJQUZCQ0VrTkFDQUFLQUFBUVhCeFFkRFV0TUlCUncwQUlBQW9BQVFpQWtGM1N3MEZRYmgvSUFKQkNHb2lBaUFCSUFKSkd5RUREQUVMSUFSQkdHb2dBQ0FCRUJzaUFrR0lmMHNFUUNBQ0lRTU1BUXRCdUg4aEF5QUNEUUFnQVNBRUtBSXdJZ0pySVFVZ0FDQUNhaUVHQTBBZ0JpQUZJQVJCREdvUUhTSURRWWgvU3cwQklBTkJBMm9pQWlBRlN3UkFRYmgvSVFNTUFnc2dCU0FDYXlFRklBSWdCbW9oQmlBRUtBSVFSUTBBQ3lBRUtBSTRCSDlCdUg4aEF5QUZRUVJKRFFFZ0JrRUVhZ1VnQmdzZ0FHc2hBd3NnQTBHSWYwc05Bd3NnQVNBRGF5RUJJQUFnQTJvaEFBd0JDd3RDZmlBSUlBRWJJUWNMSUFSQlFHc2tBQ0FIQzJRQkFYOUJ1SDhoQXdKQUlBRkJBMGtOQUNBQUxRQUNJUUVnQWlBQUx3QUFJZ0JCQVhFMkFnUWdBaUFBUVFGMlFRTnhJZ00yQWdBZ0FpQUFJQUZCRUhSeVFRTjJJZ0EyQWdnQ1FBSkFJQU5CQVdzT0F3SUJBQUVMUVd3UEN5QUFJUU1MSUFNTFJBRUNmeUFCSUFJb0FnUWlBeUFCS0FJRWFpSUVOZ0lFSUFBZ0EwRUNkRUdnSFdvb0FnQWdBU2dDQUVFQUlBUnJkbkUyQWdBZ0FSQVBHaUFBSUFKQkNHbzJBZ1FMemdFQkJuOUJ1bjhoQ2dKQUlBSW9BZ1FpQ0NBQ0tBSUFJZ2xxSWcwZ0FTQUFhMHNOQUVGc0lRb2dDU0FFSUFNb0FnQWlDMnRMRFFBZ0FDQUphaUlFSUFJb0FnZ2lER3NoQWlBQUlBRkJJR3NpQUNBTElBbEJBQkFnSUFNZ0NTQUxhallDQUFKQUFrQWdCQ0FGYXlBTVR3UkFJQUloQlF3QkN5QU1JQVFnQm10TERRSWdCeUFISUFJZ0JXc2lBbW9pQVNBSWFrOEVRQ0FFSUFFZ0NCQUtHZ3dDQ3lBQ0lBaHFJUWdnQkNBQlFRQWdBbXNRQ2lBQ2F5RUVDeUFFSUFBZ0JTQUlRUUVRSUFzZ0RTRUtDeUFLQzhjRUFRSi9JQUFnQTJvaEJnSkFJQU5CQjB3RVFBTkFJQUFnQms4TkFpQUFJQUl0QUFBNkFBQWdBRUVCYWlFQUlBSkJBV29oQWd3QUN3QUxJQVJCQVVZRVFBSkFJQUFnQW1zaUJVRUhUUVJBSUFBZ0FpMEFBRG9BQUNBQUlBSXRBQUU2QUFFZ0FDQUNMUUFDT2dBQ0lBQWdBaTBBQXpvQUF5QUFJQUlnQlVFQ2RDSUZRY0FlYWlnQ0FHb2lBaWdBQURZQUJDQUNJQVZCNEI1cUtBSUFheUVDREFFTElBQWdBaWtBQURjQUFBc2dBa0VJYWlFQ0lBQkJDR29oQUFzZ0FTQUdUd1JBSUFBZ0Eyb2hBU0FFUVFGSElBQWdBbXRCRDBweVJRUkFBMEFnQUNBQ0tRQUFOd0FBSUFKQkNHb2hBaUFBUVFocUlnQWdBVWtOQUF3REN3QUxJQUFnQWlrQUFEY0FBQ0FBSUFJcEFBZzNBQWdnQTBFUlNRMEJJQUJCRUdvaEFBTkFJQUFnQWlrQUVEY0FBQ0FBSUFJcEFCZzNBQWdnQUNBQ0tRQWdOd0FRSUFBZ0Fpa0FLRGNBR0NBQ1FTQnFJUUlnQUVFZ2FpSUFJQUZKRFFBTERBRUxBa0FnQUNBQlN3UkFJQUFoQVF3QkN5QUJJQUJySVFVQ1FDQUVRUUZISUFBZ0FtdEJEMHB5UlFSQUlBSWhBd05BSUFBZ0F5a0FBRGNBQUNBRFFRaHFJUU1nQUVFSWFpSUFJQUZKRFFBTERBRUxJQUFnQWlrQUFEY0FBQ0FBSUFJcEFBZzNBQWdnQlVFUlNBMEFJQUJCRUdvaEFDQUNJUU1EUUNBQUlBTXBBQkEzQUFBZ0FDQURLUUFZTndBSUlBQWdBeWtBSURjQUVDQUFJQU1wQUNnM0FCZ2dBMEVnYWlFRElBQkJJR29pQUNBQlNRMEFDd3NnQWlBRmFpRUNDd05BSUFFZ0JrOE5BU0FCSUFJdEFBQTZBQUFnQVVFQmFpRUJJQUpCQVdvaEFnd0FDd0FMQzY0SEFnVi9BWDRqQUVHQUFXc2lFU1FBSUJFZ0F6WUNmRUYvSVE4Q1FBSkFBa0FDUUFKQUlBSU9CQUVBQXdJRUN5QUdSUVJBUWJoL0lROE1CQXRCYkNFUElBVXRBQUFpQWlBRFN3MERJQWdnQWtFQ2RDSUNhaWdDQUNFRElBSWdCMm9vQWdBaEFpQUFRUUE2QUFzZ0FFSUFOd0lBSUFBZ0FqWUNEQ0FBSUFNNkFBb2dBRUVBT3dFSUlBRWdBRFlDQUVFQklROE1Bd3NnQVNBSk5nSUFRUUFoRHd3Q0N5QUtSUVJBUVd3aER3d0NDMEVBSVE4Z0MwVWdERUVaU0hJTkFVRUlJQVIwUVFocUlRQkJBQ0VEQTBBZ0FDQURUUTBDSUFOQlFHc2hBd3dBQ3dBTFFXd2hEeUFSSUJGQi9BQnFJQkZCK0FCcUlBVWdCaEFNSWdOQmlIOUxEUUFnRVNnQ2VDSUNJQVJMRFFBZ0VTZ0NmRUVCYWlFSklBQkJDR29oQzBHQWdBSWdBblJCRUhVaEJVRUJJUkJCQVNBQ2RDSVBRUUZySWdvaEVnTkFJQWtnRGtjRVFBSkFJQkVnRGtFQmRDSUVhaThCQUNJTVFmLy9BMFlFUUNBTElCSkJBM1JxSUE0MkFnUWdFa0VCYXlFU1FRRWhEQXdCQ3lBUVFRQWdCU0FNd1VvYklSQUxJQVFnRFdvZ0REc0JBQ0FPUVFGcUlRNE1BUXNMSUFBZ0FqWUNCQ0FBSUJBMkFnQUNRQ0FLSUJKR0JFQWdEVUhxQUdvaEJrRUFJUkJCQUNFTUEwQWdDU0FRUmdSQUlBOUJBM1lnRDBFQmRtcEJBMm9pQlVFQmRDRUVRUUFoREVFQUlSSURRRUVBSVE0Z0R5QVNUUTBFQTBBZ0RrRUNSd1JBSUFzZ0JTQU9iQ0FNYWlBS2NVRURkR29nQmlBT0lCSnFhaTBBQURZQ0JDQU9RUUZxSVE0TUFRc0xJQkpCQW1vaEVpQUVJQXhxSUFweElRd01BQXNBQlNBUklCQkJBWFJxTGdFQUlRVWdCaUFNYWlJRUlCTTNBQUJCQ0NFT0EwQWdCU0FPU2dSQUlBUWdEbW9nRXpjQUFDQU9RUWhxSVE0TUFRc0xJQk5DZ1lLRWlKQ2d3SUFCZkNFVElCQkJBV29oRUNBRklBeHFJUXdNQVFzQUN3QUxJQTlCQTNZZ0QwRUJkbXBCQTJvaEJVRUFJUkJCQUNFT0EwQWdDU0FRUmcwQlFRQWhEQ0FSSUJCQkFYUnFMZ0VBSWdSQkFDQUVRUUJLR3lFRUEwQWdCQ0FNUndSQUlBc2dEa0VEZEdvZ0VEWUNCQU5BSUFVZ0Rtb2dDbkVpRGlBU1N3MEFDeUFNUVFGcUlRd01BUXNMSUJCQkFXb2hFQXdBQ3dBTElBSkJBV29oQlVFQUlRd0RRQ0FNSUE5SEJFQWdEU0FMSUF4QkEzUnFJZ2tvQWdRaUJFRUJkR29pQWlBQ0x3RUFJZ1pCQVdvN0FRQWdDU0FGSUFablFXQnphaUlDT2dBRElBa2dCaUFDZENBUGF6c0JBQ0FKSUFnZ0JFRUNkQ0lDYWlnQ0FEb0FBaUFKSUFJZ0Iyb29BZ0EyQWdRZ0RFRUJhaUVNREFFTEN5QUJJQUEyQWdBZ0F5RVBDeUFSUVlBQmFpUUFJQThMN1ZvQ08zOEdmaU1BUWVBQmF5SUVKQUFDUUVHdzdBa1FCU0lGUlFSQVFVQWhCd3dCQ3lBRlFnQTNBdlRxQVNBRlFRQTJBc1RyQVNBRlFRQTJBclRyQVNBRlFnQTNBcHpyQVNBRlFRQTJBcmpwQVNBRlFRQTJBcXpzQ1NBRlFnQTNBdFRyQVNBRlFnQTNBcXpyQVNBRlFnQTNBNGpyQVNBRlFnQTNBdVRxQVNBRlFnQTNBdVRyQVNBRlFZR0FnTUFBTmdLODZ3RWdCVUlBTndLazZ3RWdCVUg4NmdGcVFRQTJBZ0FnQlVHUTZ3RnFRZ0EzQXdBZ0JSQVlJQVZCck5VQmFpRVVJQVZCK09zQmFpRWNJQVZCc09vQmFpRWlJQVZCb0RCcUlTb2dCVUdZSUdvaEt5QUZRYWpRQUdvaEhpQUZRUkJxSVN3Z0JVRUlhaUVvSUFWQkJHb2hMU0FGUWNEcEFXb2hLU0FGUVlqckFXb2dCRUdVQVdvaEx5QUVRWXdCYWlFd0lBUkJoQUZxSVRFZ0JFSGNBR29oTWlBRVFkUUFhaUV6SUFSQnpBQnFJVFFnQUNFZEFrQUNRQUpBQWtBQ1FBTkFRUUZCQlNBRktBTGs2Z0ViSVFZQ1FBTkFJQU1nQmtrTkFTQUNLQUFBUVhCeFFkRFV0TUlCUmdSQVFiaC9JUWNnQTBFSVNRMElJQUlvQUFRaURrRjNTd1JBUVhJaEJ3d0pDeUFESUE1QkNHb2lDVWtOQ0NBT1FZQi9Td1JBSUFraEJ3d0pDeUFESUFscklRTWdBaUFKYWlFQ0RBRUxDeUFGUWdBM0FxenBBU0FGUWdBM0EranBBU0FGUVFBMkFwanJBU0FGUWdBM0E0RHFBU0FGUWdNM0EvanBBU0FGUWJUcEFXcENBRGNDQUNBRlFmRHBBV3BDQURjREFDQUZRYWpRQUdvaUNVR01nSURnQURZQ0FDQUZRYXpRQVdwQjRCSXBBZ0EzQWdBZ0JVRzAwQUZxUWVnU0tBSUFOZ0lBSUFVZ0JVRVFhallDQUNBRklBVkJvREJxTmdJRUlBVWdCVUdZSUdvMkFnZ2dCU0FKTmdJTUlBVkJBVUVGSUFVb0F1VHFBUnMyQXJ6cEFRSkFJQUZGRFFBZ0JTZ0NyT2tCSWdrZ0hVWU5BQ0FGSUFrMkFyanBBU0FGSUIwMkFxenBBU0FGS0FLdzZRRWhEaUFGSUIwMkFyRHBBU0FGSUIwZ0RpQUphMm8yQXJUcEFRdEJ1SDhoQ1NBRFFRVkJDU0FGS0FMazZnRWlCaHRKRFFVZ0FrRUJRUVVnQmhzZ0JoQWFJZzVCaUg5TEJFQWdEaUVKREFVTElBTWdEa0VEYWtrTkJTQXBJQUlnRGlBR0VCa2lCa0dJZjBzRVFDQUdJUWtNQlFzZ0JnMEZBa0FDUUNBRktBS282d0ZCQVVjTkFDQUZLQUtrNndFaUNVVU5BQ0FGS0FLVTZ3RkZEUUFnQ1NnQ0JFRUJheUlISUFVb0F0enBBU0lLclVLSGxhK3ZtTGJlbTU1L2ZrTEp6OW15OGVXNjZpZUZRaGVKUXMvVzA3N1N4NnZaUW41QytmUGQ4Wm4ybWFzV2ZDSS9RaUdJSUQrRlFzL1cwNzdTeDZ2WlFuNGlQMElkaUNBL2hVTDU4OTN4bWZhWnF4WitJajlDSUlnZ1A0V25jU0VHSUFrb0FnQWhGUU5BUVFBaENBSkFJQlVnQmtFQ2RHb29BZ0FpQ1VVTkFDQUpLQUlJUVFoSkRRQWdDU2dDQkNJU0tBQUFRYmZJd3VGK1J3MEFJQklvQUFRaENBc2dDQ0FLUndSQUlBWWdCM0ZCQVdvaEJpQUlEUUVMQ3lBSlJRMEFJQVVRR0NBRlFYODJBcURyQVNBRklBazJBcFRyQVNBRklBVW9BdHpwQVNJSU5nS1k2d0VNQVFzZ0JTZ0MzT2tCSVFnTEFrQWdDRVVOQUNBRktBS1k2d0VnQ0VZTkFFRmdJUWtNQmdzQ1FDQUZLQUxnNlFFRVFDQUZJQVVvQXVqcUFTSUpSVFlDN09vQklBa05BU0FGUXZucTBORG55YUhrNFFBM0E2anFBU0FGUWdBM0E2RHFBU0FGUXMvVzA3N1N4NnZaUWpjRG1Pb0JJQVZDMXV1Qzd1cjlpZlhnQURjRGtPb0JJQVZDQURjRGlPb0JJQ0pCQUVFb0VBTWFEQUVMSUFWQkFEWUM3T29CQ3lBQklCMXFJU1VnQlNBRktRUG82UUVnRHExOE53UG82UUVnQXlBT2F5RURJQUlnRG1vaEFpQWRJUTREUUNBQ0lBTWdCRUVzYWhBZEloVkJpSDlMQkVBZ0ZTRUpEQVlMSUFOQkEyc2lOU0FWU1EwRUlBSkJBMm9oRzBGc0lRa0NRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUNBRUtBSXNEZ01DQVFBVkN5QVZRZi8vQjBzTkV5QVZRUU5KRFJJZ0JTa0R5T2tCSVQ4Q1FBSkFJQnN0QUFBaUNVRURjU0lhUVFGckRnTUdBUUFIQ3lBRktBS0E2Z0VOQUVGaUlRa01GUXNnRlVFRlNRMFNJQnNvQUFBaEF3Si9Ba0FDUUFKQUlBbEJBblpCQTNFaUNVRUNhdzRDQVFJQUN5QUpRUUJISVFjZ0EwRUVka0gvQjNFaEMwRURJUVlnQTBFT2RrSC9CM0VNQWd0QkJDRUdJQU5CQkhaQi8vOEFjU0VMUVFFaEJ5QURRUkoyREFFTElBTkJCSFpCLy84UGNTSUxRWUNBQ0VzTkUwRUJJUWRCQlNFR0lBSXRBQWRCQ25RZ0EwRVdkbklMSWdnZ0Jtb2lDU0FWU3cwU0FrQWdDMEdCQmtrTkFDQUZLQUtjNndGRkRRQkJBQ0VEQTBBZ0EwR0RnQUZMRFFFZ0EwRkFheUVEREFBTEFBc2dCaUFiYWlFUElCcEJBMGNOQmlBRktBSU1JZ0l0QUFGQkNIUWhBeUFIRFFjZ0EwVU5DQ0FFUWZBQWFpQVBJQWdRRFNJRFFZaC9TdzBKSUFKQkJHb2hCaUFMSUJ4cUloSkJBMnNoQ2tFQUlBSXZBUUpyUVI5eElRY2dIQ0VEQTBBZ0JFSHdBR29RRDBVZ0F5QUtTWEVFUUNBRElBWWdCQ2dDY0NJSUlBUW9BblFpRDNRZ0IzWkJBblJxSWdJdkFRQTdBQUFnQXlBQ0xRQURhaUlESUFZZ0NDQVBJQUl0QUFKcUlnaDBJQWQyUVFKMGFpSUNMd0VBT3dBQUlBUWdDQ0FDTFFBQ2FqWUNkQ0FESUFJdEFBTnFJUU1NQVFVZ0VrRUNheUVJQTBBZ0JFSHdBR29RRHlFUElBUW9BbkFoQ2lBRUtBSjBJUUlnQXlBSVN5QVBja1VFUUNBRElBWWdDaUFDZENBSGRrRUNkR29pQ2k4QkFEc0FBQ0FFSUFJZ0NpMEFBbW8yQW5RZ0F5QUtMUUFEYWlFRERBRUxDd05BSUFNZ0NFMEVRQ0FESUFZZ0NpQUNkQ0FIZGtFQ2RHb2lEeThCQURzQUFDQURJQTh0QUFOcUlRTWdBaUFQTFFBQ2FpRUNEQUVMQ3dKQUlBTWdFazhOQUNBRElBWWdDaUFDZENBSGRrRUNkR29pQXkwQUFEb0FBQ0FETFFBRFFRRkdCRUFnQWlBRExRQUNhaUVDREFFTElBSkJIMHNOQUVFZ0lBSWdBeTBBQW1vaUFpQUNRU0JQR3lFQ0MwRnNRV3dnQ3lBRUtBSjRJQVFvQW54SEd5QUNRU0JIR3lFRERBc0xBQXNBQ3lBRUtBSTBJZ0lnSlNBT2Ewc05DaUFPUlFSQVFRQWhDU0FDRFFJTURnc2dEaUFiTFFBQUlBSVFBeG9nQWlFSkRBd0xJQlVnSlNBT2Ewc05DU0FPRFFGQkFDRUpJQlZGRFF3TFFiWi9JUWtNRVFzZ0RpQWJJQlVRQWhvZ0ZTRUpEQW9MSUJ3Z0d3Si9Ba0FDUUFKQUlBbEJBblpCQTNGQkFXc09Bd0VBQWdBTElBbEJBM1loQTBFQkRBSUxJQnN2QUFCQkJIWWhBMEVDREFFTElCVkJCRWtORGlBQ0x3QURJQUl0QUFWQkVIUnlJZ0pCajRDQUFVc05EaUFDUVFSMklRTkJBd3NpQW1vdEFBQWdBMEVnYWhBRElRa2dCU0FETmdLQTZ3RWdCU0FKTmdMdzZnRWdBa0VCYWlFSkRBVUxJQlVDZndKQUFrQUNRQ0FKUVFKMlFRTnhRUUZyRGdNQkFBSUFDeUFKUVFOMklRTkJBUXdDQ3lBYkx3QUFRUVIySVFOQkFnd0JDeUFDTHdBRElBSXRBQVZCRUhSeVFRUjJJUU5CQXdzaUFpQURhaUlKUVNCcVNRUkFJQWtnRlVzTkRTQWNJQUlnRzJvZ0F4QUNJUUlnQlNBRE5nS0E2d0VnQlNBQ05nTHc2Z0VnQWlBRGFpSUNRZ0EzQUJnZ0FrSUFOd0FRSUFKQ0FEY0FDQ0FDUWdBM0FBQU1CUXNnQlNBRE5nS0E2d0VnQlNBQ0lCdHFOZ0x3NmdFTUJBc2dCMFVFUUNBZUlBOGdDQ0FVRUJRaUFrR0lmMHNnQWlBSVQzSU5EQ0FjSUFzZ0FpQVBhaUFJSUFKcklCNFFGU0VEREFNTElBdEZJQWhGY2cwTElBdEJDSFlpQXlBSUlBdEpCSDhnQ0VFRWRDQUxiZ1ZCRHd0QkdHd2lBa0dNQ0dvb0FnQnNJQUpCaUFocUtBSUFhaUlHUVFOMklBWnFJQUpCZ0FocUtBSUFJQUpCaEFocUtBSUFJQU5zYWtrRVFDTUFRUkJySWhBa0FDQWVLQUlBSVFNZ0ZFSHdCR3BCQUVIc0FCQURJUVpCVkNFQ0FrQWdBMEgvQVhFaURFRU1TdzBBQWtBZ0ZFSGNDV29nQmlBUVFRaHFJQkJCREdvZ0R5QUlJQlJCM0F0cUloY1FDeUlTUVloL1N3MEFJQkFvQWd3aUJpQU1TdzBCSUJSQnFBVnFJUTBnRkVHa0JXb2hOaUFlUVFScUlSRWdBMEdBZ0lCNGNTRTNJQVpCQVdvaUV5RUNJQVloQXdOQUlBSWlCMEVCYXlFQ0lBTWlDa0VCYXlFRElCUWdDa0VDZEdvb0F2QUVSUTBBQzBFQklBY2dCMEVCVFJzaEZrRUFJUWRCQVNFQ0EwQWdBaUFXUndSQUlCUWdBa0VDZENJRGFpZ0M4QVFoR0NBRElBMXFJQWMyQWdBZ0FrRUJhaUVDSUFjZ0dHb2hCd3dCQ3dzZ0RTQUhOZ0lBUVFBaEFpQVFLQUlJSVFNRFFDQUNJQU5IQkVBZ0RTQUNJQlJxUWR3SmFpMEFBQ0lZUVFKMGFpSVpJQmtvQWdBaUdVRUJhallDQUNBVUlCbEJBWFJxSWhrZ0dEb0EzUVVnR1NBQ09nRGNCU0FDUVFGcUlRSU1BUXNMUVFBaEF5QU5RUUEyQWdBZ0RDQUdRWDl6YWlFR1FRRWhBZ05BSUFJZ0ZrY0VRQ0FVSUFKQkFuUnFJZzBnQXpZQ0FDQU5LQUx3QkNBQ0lBWnFkQ0FEYWlFRElBSkJBV29oQWd3QkN3c2dEQ0FUSUFwcklnWnJRUUZxSVFvZ0JpRURBMEFnQXlBS1NRUkFJQlFnQTBFMGJHb2hEVUVCSVFJRFFDQUNJQlpIQkVBZ0RTQUNRUUowSWhocUlCUWdHR29vQWdBZ0EzWTJBZ0FnQWtFQmFpRUNEQUVMQ3lBRFFRRnFJUU1NQVFzTElCY2dGRUUwRUFJaE9DQVVRWkFNYWlFNUlCTWdER3NoT2lBVVFkd0ZhaUVYUVFBaENnTkFBa0FDUUNBSElBcEhCRUJCQVNBTUlCTWdGeUFLUVFGMGFpSUNMUUFCSWcxcklnTnJJaGgwSVJrZ0FpMEFBQ0VXSURnZ0RVRUNkR29pSHlnQ0FDRUNJQVlnR0UwRVFDQTJRUUVnQXlBNmFpSU5JQTFCQVV3YklpQkJBblFpSkdvb0FnQWhEU0E1SUJRZ0EwRTBiR3BCTkJBQ0lTRWdEVUVCZENFbUlCRWdBa0VDZEdvaEl5QWdRUUZORFFJZ0EwRVFkRUdBZ1B3SGNTQVdja0dBZ0lBSWNpRWdJQ0VnSkdvb0FnQWhKRUVBSVFJRFFDQUNJQ1JHRFFNZ0l5QUNRUUowYWlBZ05nRUFJQUpCQVdvaEFnd0FDd0FMSUFJZ0FpQVphaUlOSUFJZ0RVc2JJUTBnQTBFUWRFR0FnUHdIY1NBV2NrR0FnSUFJY2lFREEwQWdBaUFOUmcwRElCRWdBa0VDZEdvZ0F6WUJBQ0FDUVFGcUlRSU1BQXNBQ3lBZUlBeEJFSFFnTjNJZ0RISkJnQUp5TmdJQURBTUxJQWNnRFdzaEpDQVhJQ1pxSVNaQkFDRU5BMEFnRFNBa1JnMEJRUUVnR0NBVElDWWdEVUVCZEdvaUp5MEFBU0lDYXlJN2EzUWlQQ0FoSUFKQkFuUnFJaUFvQWdBaUFtb2hQU0FESUR0cVFSQjBRWUNBL0FkeElDY3RBQUJCQ0hSeUlCWnlRWUNBZ0JCeUlTY0RRQ0FqSUFKQkFuUnFJQ2MyQVFBZ0FrRUJhaUlDSUQxSkRRQUxJQ0FnSUNnQ0FDQThhallDQUNBTlFRRnFJUTBNQUFzQUN5QWZJQjhvQWdBZ0dXbzJBZ0FnQ2tFQmFpRUtEQUFMQUFzZ0VpRUNDeUFRUVJCcUpBQWdBa0dJZjBzZ0FpQUlUM0lORENBY0lBc2dBaUFQYWlBSUlBSnJJQjRRRmlFRERBTUxJQjRnRHlBSUlCUVFGQ0lDUVloL1N5QUNJQWhQY2cwTElCd2dDeUFDSUE5cUlBZ2dBbXNnSGhBWElRTU1BZ3NnQXdSQUlCd2dDeUFQSUFnZ0FoQVdJUU1NQWdzZ0hDQUxJQThnQ0NBQ0VCY2hBd3dCQ3lBY0lBc2dEeUFJSUFJUUZTRURDeUFEUVloL1N3MElJQVVnQ3pZQ2dPc0JJQVVnSERZQzhPb0JJQVZCQVRZQ2dPb0JJQnBCQWtZRVFDQUZJQjQyQWd3TElBc2dIR29pQWtJQU53QUFJQUpDQURjQUdDQUNRZ0EzQUJBZ0FrSUFOd0FJSUFsQmlIOUxEUW9MSUFrZ0ZVWU5DQ0FWSUFscklRWWdCU2dDbk9zQklRb0NRQ0FKSUJ0cUlnTXRBQUFpRDBVRVFFRUJJUUpCQUNFUFFiaC9JUWtnQmtFQlJnMEJEQXNMQW44Z0EwRUJhaUFQd0NJQ1FRQk9EUUFhSUFKQmYwWUVRQ0FHUVFOSURRc2dBeThBQVVHQS9nRnFJUThnQTBFRGFnd0JDeUFHUVFKSURRb2dBeTBBQVNBUFFRaDBja0dBZ0FKcklROGdBMEVDYWdzaEVrRzRmeUVKSUJKQkFXb2lBaUFWSUJ0cUlnZExEUW9nTENBRklCSXRBQUFpRWtFR2RrRWpRUWtnQWlBSElBSnJRY0FRUWRBUlFmQVNJQVVvQW9UcUFTQUtJQThnRkJBaElnbEJpSDlMRFFnZ0t5QW9JQkpCQkhaQkEzRkJIMEVJSUFJZ0NXb2lBaUFISUFKclFZQUxRWUFNUVlBWElBVW9Bb1RxQVNBRktBS2M2d0VnRHlBVUVDRWlDRUdJZjBzTkNFRnNJUWtnS2lBdElCSkJBblpCQTNGQk5FRUpJQUlnQ0dvaUFpQUhJQUpyUVlBTlFlQU9RWkFaSUFVb0FvVHFBU0FGS0FLYzZ3RWdEeUFVRUNFaUIwR0lmMHNOQ2lBQ0lBZHFJQU5ySWdJaENTQUNRWWgvU3cwS0N5QU9JQTlCQUV4eURRRUxRYnAvSVFrTUNBc2dKU0FPYXlFSklBWWdBbXNoQmlBQ0lBTnFJUWNDUUFKQUFrQWdDa1VFUUNBUFFRbElJQVVwQThqcEFVS0JnSUFJVkhJTkFpQW9LQUlBSWdKQkNHb2hFaUFDS0FJRUlRcEJBQ0VEUVFBaEFnTkFJQU1nQ25aRkJFQWdBaUFTSUFOQkEzUnFMUUFDUVJaTGFpRUNJQU5CQVdvaEF3d0JDd3NnQlVFQU5nS2M2d0VnQWtFSUlBcHJkRUVVVHcwQkRBTUxJQVZCQURZQ25Pc0JDeUFFSUFVb0F2RHFBU0lETmdMY0FTQUpJQTVxSVJZZ0F5QUZLQUtBNndGcUlSY0NRQ0FQUlFSQUlBNGhCd3dCQ3lBRktBSzQ2UUVoR2lBRktBSzA2UUVoR0NBRktBS3c2UUVoRWlBRlFRRTJBb1RxQVVFQUlRTURRQ0FEUVFOSEJFQWdCQ0FEUVFKMElnSnFJQUlnQldwQnJOQUJhaWdDQURZQ1pDQURRUUZxSVFNTUFRc0xRV3doQ1NBRVFUaHFJZ0lnQnlBR0VBMUJpSDlMRFFOQkNDQVBJQTlCQ0U0YklSOGdOQ0FDSUFVb0FnQVFIaUF6SUFJZ0JTZ0NDQkFlSURJZ0FpQUZLQUlFRUI0Z0RpQVNheUVaUVFBaENBTkFJQVJCT0dvUUQwRURSaUFJSUI5T2NrVUVRQ0FFS0FKUUlBUW9Ba3hCQTNScUtRSUFJa0NuSWdkQkVIWWlFVUgvQVhFaEN5QUVLQUpnSUFRb0FseEJBM1JxS1FJQUlrR25JZ3hCRUhZaUlVSC9BWEVoRUNBRUtBSllJQVFvQWxSQkEzUnFLUUlBSWtKQ0lJaW5JUVlnUVVJZ2lDQkFRaUNJcHlFREFrQWdRa0lRaUtjaUNrSC9BWEVpQWtFQ1R3UkFBa0FnQWtFWlNTQS9Rb0dBZ0JCVWNrVUVRQ0FFUVNBZ0JDZ0NQQ0lLYXlJTklBSWdBaUFOU3hzaUV5QUthallDUENBR0lBUW9BamdnQ25SQkFDQVRhM1lnQWlBVGF5SVRkR29oQ2lBRVFUaHFFQThhSUFJZ0RVME5BU0FFSUFRb0Fqd2lBaUFUYWpZQ1BDQUVLQUk0SUFKMFFRQWdFMnQySUFwcUlRb01BUXNnQkNBQ0lBUW9BandpRFdvMkFqd2dCQ2dDT0NBTmRFRUFJQXByZGlBR2FpRUtJQVJCT0dvUUR4b0xJQVFwQW1RaFJDQUVJQW8yQW1RZ0JDQkVOd0pvREFFTEFrQWdBa1VFUUNBREJFQWdCQ2dDWkNFS0RBTUxJQVFvQW1naENnd0JDeUFFSUFRb0Fqd2lBa0VCYWpZQ1BBSi9JQVlnQTBWcUlBUW9BamdnQW5SQkgzWnFJZ0pCQTBZRVFDQUVLQUprUVFGckRBRUxJQUpCQW5RZ0JHb29BbVFMSWdaRklBWnFJUW9nQWtFQlJ3UkFJQVFnQkNnQ2FEWUNiQXNMSUFRZ0JDZ0NaRFlDYUNBRUlBbzJBbVFMcHlFQ0lFRkNnSUQ4QjROUVJRUkFJQVFnQkNnQ1BDSUdJQkJxTmdJOElBUW9BamdnQm5SQkFDQWhhM1lnQW1vaEFnc2dDeUFRYWtFVVR3UkFJQVJCT0dvUUR4b0xJRUJDZ0lEOEI0TlFSUVJBSUFRZ0JDZ0NQQ0lHSUF0cU5nSThJQVFvQWpnZ0JuUkJBQ0FSYTNZZ0Eyb2hBd3NnQkVFNGFoQVBHaUFFSUFRb0FqZ2lCa0VBSUFkQkdIWWlDeUFFS0FJOGFpSVFhM1lnQzBFQ2RFR2dIV29vQWdCeElBZEIvLzhEY1dvMkFrd2dCQ0FRSUF4QkdIWWlCMm9pQ3pZQ1BDQUVJQWRCQW5SQm9CMXFLQUlBSUFaQkFDQUxhM1p4SUF4Qi8vOERjV28yQWx3Z0JFRTRhaEFQR2lBRUlFS25JZ1pCR0hZaUJ5QUVLQUk4YWlJTE5nSThJQVFnQjBFQ2RFR2dIV29vQWdBZ0JDZ0NPRUVBSUF0cmRuRWdCa0gvL3dOeGFqWUNWQ0FFUWZBQWFpQUlRUXhzYWlJR0lBbzJBZ2dnQmlBQ05nSUVJQVlnQXpZQ0FDQUlRUUZxSVFnZ0F5QVphaUFDYWlFWkRBRUxDeUFJSUI5SURRTWdGa0VnYXlFaElBNGhCd05BSUFSQk9Hb1FEMEVEUmlBSUlBOU9ja1VFUUNBRUtBSlFJQVFvQWt4QkEzUnFLUUlBSWtDbklnWkJFSFlpSTBIL0FYRWhDaUFFS0FKZ0lBUW9BbHhCQTNScUtRSUFJa0duSWcxQkVIWWlJRUgvQVhFaEV5QUVLQUpZSUFRb0FsUkJBM1JxS1FJQUlrSkNJSWluSVFNZ1FVSWdpQ0JBUWlDSXB5RUxBa0FnUWtJUWlLY2lERUgvQVhFaUFrRUNUd1JBQWtBZ0FrRVpTU0EvUW9HQWdCQlVja1VFUUNBRVFTQWdCQ2dDUENJTWF5SVJJQUlnQWlBUlN4c2lFQ0FNYWpZQ1BDQURJQVFvQWpnZ0RIUkJBQ0FRYTNZZ0FpQVFheUlNZEdvaEVDQUVRVGhxRUE4YUlBSWdFVTBOQVNBRUlBUW9BandpQWlBTWFqWUNQQ0FFS0FJNElBSjBRUUFnREd0MklCQnFJUkFNQVFzZ0JDQUNJQVFvQWp3aUVHbzJBandnQkNnQ09DQVFkRUVBSUF4cmRpQURhaUVRSUFSQk9Hb1FEeG9MSUFRcEFtUWhSQ0FFSUJBMkFtUWdCQ0JFTndKb0RBRUxBa0FnQWtVRVFDQUxCRUFnQkNnQ1pDRVFEQU1MSUFRb0FtZ2hFQXdCQ3lBRUlBUW9BandpQWtFQmFqWUNQQUovSUFNZ0MwVnFJQVFvQWpnZ0FuUkJIM1pxSWdKQkEwWUVRQ0FFS0FKa1FRRnJEQUVMSUFKQkFuUWdCR29vQW1RTElnTkZJQU5xSVJBZ0FrRUJSd1JBSUFRZ0JDZ0NhRFlDYkFzTElBUWdCQ2dDWkRZQ2FDQUVJQkEyQW1RTHB5RU1JRUZDZ0lEOEI0TlFSUVJBSUFRZ0JDZ0NQQ0lDSUJOcU5nSThJQVFvQWpnZ0FuUkJBQ0FnYTNZZ0RHb2hEQXNnQ2lBVGFrRVVUd1JBSUFSQk9Hb1FEeG9MSUVCQ2dJRDhCNE5RUlFSQUlBUWdCQ2dDUENJQ0lBcHFOZ0k4SUFRb0FqZ2dBblJCQUNBamEzWWdDMm9oQ3dzZ0JFRTRhaEFQR2lBRUlBUW9BamdpQWtFQUlBWkJHSFlpQXlBRUtBSThhaUlLYTNZZ0EwRUNkRUdnSFdvb0FnQnhJQVpCLy84RGNXbzJBa3dnQkNBS0lBMUJHSFlpQTJvaUJqWUNQQ0FFSUFOQkFuUkJvQjFxS0FJQUlBSkJBQ0FHYTNaeElBMUIvLzhEY1dvMkFsd2dCRUU0YWhBUEdpQUVJRUtuSWdKQkdIWWlBeUFFS0FJOGFpSUdOZ0k4SUFRZ0EwRUNkRUdnSFdvb0FnQWdCQ2dDT0VFQUlBWnJkbkVnQWtILy93TnhhallDVkFKQUFrQUNRQ0FFS0FMY0FTSURJQVJCOEFCcUlBaEJCM0ZCREd4cUloTW9BZ0FpRVdvaUl5QVhTdzBBSUFjZ0V5Z0NCQ0lOSUJGcUlncHFJQ0ZMRFFBZ0NrRWdhaUFXSUFkclRRMEJDeUFFSUJNb0FnZzJBaGdnQkNBVEtRSUFOd01RSUFjZ0ZpQUVRUkJxSUFSQjNBRnFJQmNnRWlBWUlCb1FIeUVLREFFTElBY2dFV29oQWlBVEtBSUlJUVlnQnlBREtRQUFOd0FBSUFjZ0F5a0FDRGNBQ0FKQUlCRkJFVWtOQUNBSElBTXBBQkEzQUJBZ0J5QURLUUFZTndBWUlCRkJFR3RCRVVnTkFDQURRUkJxSVFNZ0IwRWdhaUVSQTBBZ0VTQURLUUFRTndBQUlCRWdBeWtBR0RjQUNDQVJJQU1wQUNBM0FCQWdFU0FES1FBb053QVlJQU5CSUdvaEF5QVJRU0JxSWhFZ0Fra05BQXNMSUFJZ0Jtc2hBeUFFSUNNMkF0d0JJQUlnRW1zZ0Jra0VRQ0FHSUFJZ0dHdExEUWNnR2lBYUlBTWdFbXNpQTJvaUVTQU5hazhFUUNBQ0lCRWdEUkFLR2d3Q0N5QURJQTFxSVEwZ0FpQVJRUUFnQTJzUUNpQURheUVDSUJJaEF3c2dCa0VRVHdSQUlBSWdBeWtBQURjQUFDQUNJQU1wQUFnM0FBZ2dEVUVSU0EwQklBSWdEV29oQmlBQ1FSQnFJUUlEUUNBQ0lBTXBBQkEzQUFBZ0FpQURLUUFZTndBSUlBSWdBeWtBSURjQUVDQUNJQU1wQUNnM0FCZ2dBMEVnYWlFRElBSkJJR29pQWlBR1NRMEFDd3dCQ3dKQUlBWkJCMDBFUUNBQ0lBTXRBQUE2QUFBZ0FpQURMUUFCT2dBQklBSWdBeTBBQWpvQUFpQUNJQU10QUFNNkFBTWdBaUFESUFaQkFuUWlCa0hBSG1vb0FnQnFJZ01vQUFBMkFBUWdBeUFHUWVBZWFpZ0NBR3NoQXd3QkN5QUNJQU1wQUFBM0FBQUxJQTFCQ1VrTkFDQUNJQTFxSVJFZ0FrRUlhaUlHSUFOQkNHb2lBMnRCRDB3RVFBTkFJQVlnQXlrQUFEY0FBQ0FEUVFocUlRTWdCa0VJYWlJR0lCRkpEUUFNQWdzQUN5QUdJQU1wQUFBM0FBQWdCaUFES1FBSU53QUlJQTFCR1VnTkFDQUNRUmhxSVFJRFFDQUNJQU1wQUJBM0FBQWdBaUFES1FBWU53QUlJQUlnQXlrQUlEY0FFQ0FDSUFNcEFDZzNBQmdnQTBFZ2FpRURJQUpCSUdvaUFpQVJTUTBBQ3dzZ0NrR0lmMHNFUUNBS0lRa01CZ1VnRXlBUU5nSUlJQk1nRERZQ0JDQVRJQXMyQWdBZ0NFRUJhaUVJSUFjZ0Ntb2hCeUFMSUJscUlBeHFJUmtNQWdzQUN3c2dDQ0FQU0EwRElBZ2dIMnNoQmdOQUFrQWdCaUFQVGdSQVFRQWhBd05BSUFOQkEwWU5BaUFGSUFOQkFuUWlBbXBCck5BQmFpQUNJQVJxS0FKa05nSUFJQU5CQVdvaEF3d0FDd0FMQWtBQ1FBSkFJQVFvQXR3QklnTWdCRUh3QUdvZ0JrRUhjVUVNYkdvaUNDZ0NBQ0lNYWlJUUlCZExEUUFnQnlBSUtBSUVJZ3NnREdvaUNtb2dJVXNOQUNBS1FTQnFJQllnQjJ0TkRRRUxJQVFnQ0NnQ0NEWUNLQ0FFSUFncEFnQTNBeUFnQnlBV0lBUkJJR29nQkVIY0FXb2dGeUFTSUJnZ0doQWZJUW9NQVFzZ0J5QU1haUVDSUFnb0FnZ2hDQ0FISUFNcEFBQTNBQUFnQnlBREtRQUlOd0FJQWtBZ0RFRVJTUTBBSUFjZ0F5a0FFRGNBRUNBSElBTXBBQmczQUJnZ0RFRVFhMEVSU0EwQUlBTkJFR29oQXlBSFFTQnFJUXdEUUNBTUlBTXBBQkEzQUFBZ0RDQURLUUFZTndBSUlBd2dBeWtBSURjQUVDQU1JQU1wQUNnM0FCZ2dBMEVnYWlFRElBeEJJR29pRENBQ1NRMEFDd3NnQWlBSWF5RURJQVFnRURZQzNBRWdBaUFTYXlBSVNRUkFJQWdnQWlBWWEwc05CeUFhSUJvZ0F5QVNheUlEYWlJTUlBdHFUd1JBSUFJZ0RDQUxFQW9hREFJTElBTWdDMm9oQ3lBQ0lBeEJBQ0FEYXhBS0lBTnJJUUlnRWlFREN5QUlRUkJQQkVBZ0FpQURLUUFBTndBQUlBSWdBeWtBQ0RjQUNDQUxRUkZJRFFFZ0FpQUxhaUVJSUFKQkVHb2hBZ05BSUFJZ0F5a0FFRGNBQUNBQ0lBTXBBQmczQUFnZ0FpQURLUUFnTndBUUlBSWdBeWtBS0RjQUdDQURRU0JxSVFNZ0FrRWdhaUlDSUFoSkRRQUxEQUVMQWtBZ0NFRUhUUVJBSUFJZ0F5MEFBRG9BQUNBQ0lBTXRBQUU2QUFFZ0FpQURMUUFDT2dBQ0lBSWdBeTBBQXpvQUF5QUNJQU1nQ0VFQ2RDSUlRY0FlYWlnQ0FHb2lBeWdBQURZQUJDQURJQWhCNEI1cUtBSUFheUVEREFFTElBSWdBeWtBQURjQUFBc2dDMEVKU1EwQUlBSWdDMm9oRENBQ1FRaHFJZ2dnQTBFSWFpSURhMEVQVEFSQUEwQWdDQ0FES1FBQU53QUFJQU5CQ0dvaEF5QUlRUWhxSWdnZ0RFa05BQXdDQ3dBTElBZ2dBeWtBQURjQUFDQUlJQU1wQUFnM0FBZ2dDMEVaU0EwQUlBSkJHR29oQWdOQUlBSWdBeWtBRURjQUFDQUNJQU1wQUJnM0FBZ2dBaUFES1FBZ053QVFJQUlnQXlrQUtEY0FHQ0FEUVNCcUlRTWdBa0VnYWlJQ0lBeEpEUUFMQ3lBS1FZaC9Td1JBSUFvaENRd0dCU0FHUVFGcUlRWWdCeUFLYWlFSERBSUxBQXNMSUFRb0F0d0JJUU1MUWJwL0lRa2dGeUFEYXlJQ0lCWWdCMnRMRFFJZ0J3Ui9JQWNnQXlBQ0VBSWdBbW9GUVFBTElBNXJJUWtNQWdzZ0JVRUFOZ0tjNndFTElBUWdCU2dDOE9vQklnTTJBdHdCSUFrZ0Rtb2hEQ0FESUFVb0FvRHJBV29oRUFKQUlBOUZCRUFnRGlFR0RBRUxJQVVvQXJqcEFTRU5JQVVvQXJUcEFTRVRJQVVvQXJEcEFTRVNJQVZCQVRZQ2hPb0JRUUFoQXdOQUlBTkJBMGNFUUNBRUlBTkJBblFpQW1vZ0FpQUZha0dzMEFGcUtBSUFOZ0tjQVNBRFFRRnFJUU1NQVFzTFFXd2hDU0FFUWZBQWFpSUNJQWNnQmhBTlFZaC9TdzBCSURFZ0FpQUZLQUlBRUI0Z01DQUNJQVVvQWdnUUhpQXZJQUlnQlNnQ0JCQWVJQXhCSUdzaEdDQU9JUVlEUUNBRUtBS0lBU0FFS0FLRUFVRURkR29wQWdBaVFLY2lDa0VRZGlJWlFmOEJjU0VMSUFRb0FwZ0JJQVFvQXBRQlFRTjBhaWtDQUNKQnB5SVdRUkIySWg5Qi93RnhJUm9nQkNnQ2tBRWdCQ2dDakFGQkEzUnFLUUlBSWtKQ0lJaW5JUWNnUVVJZ2lDQkFRaUNJcHlFREFrQWdRa0lRaUtjaUNFSC9BWEVpQWtFQ1R3UkFBa0FnQWtFWlNTQS9Rb0dBZ0JCVWNrVUVRQ0FFUVNBZ0JDZ0NkQ0lJYXlJUklBSWdBaUFSU3hzaUZ5QUlhallDZENBSElBUW9BbkFnQ0hSQkFDQVhhM1lnQWlBWGF5SVhkR29oQ0NBRVFmQUFhaEFQR2lBQ0lCRk5EUUVnQkNBRUtBSjBJZ0lnRjJvMkFuUWdCQ2dDY0NBQ2RFRUFJQmRyZGlBSWFpRUlEQUVMSUFRZ0FpQUVLQUowSWhGcU5nSjBJQVFvQW5BZ0VYUkJBQ0FJYTNZZ0Iyb2hDQ0FFUWZBQWFoQVBHZ3NnQkNrQ25BRWhSQ0FFSUFnMkFwd0JJQVFnUkRjQ29BRU1BUXNDUUNBQ1JRUkFJQU1FUUNBRUtBS2NBU0VJREFNTElBUW9BcUFCSVFnTUFRc2dCQ0FFS0FKMElnSkJBV28yQW5RQ2Z5QUhJQU5GYWlBRUtBSndJQUowUVI5MmFpSUNRUU5HQkVBZ0JDZ0NuQUZCQVdzTUFRc2dBa0VDZENBRWFpZ0NuQUVMSWdkRklBZHFJUWdnQWtFQlJ3UkFJQVFnQkNnQ29BRTJBcVFCQ3dzZ0JDQUVLQUtjQVRZQ29BRWdCQ0FJTmdLY0FRdW5JUUlnUVVLQWdQd0hnMUJGQkVBZ0JDQUVLQUowSWdjZ0dtbzJBblFnQkNnQ2NDQUhkRUVBSUI5cmRpQUNhaUVDQ3lBTElCcHFRUlJQQkVBZ0JFSHdBR29RRHhvTElFQkNnSUQ4QjROUVJRUkFJQVFnQkNnQ2RDSUhJQXRxTmdKMElBUW9BbkFnQjNSQkFDQVphM1lnQTJvaEF3c2dCRUh3QUdvUUR4b2dCQ0FFS0FKd0lnZEJBQ0FLUVJoMklnc2dCQ2dDZEdvaUdtdDJJQXRCQW5SQm9CMXFLQUlBY1NBS1FmLy9BM0ZxTmdLRUFTQUVJQm9nRmtFWWRpSUthaUlMTmdKMElBUWdDa0VDZEVHZ0hXb29BZ0FnQjBFQUlBdHJkbkVnRmtILy93TnhhallDbEFFZ0JFSHdBR29RRHhvZ0JDQkNweUlIUVJoMklnb2dCQ2dDZEdvaUN6WUNkQ0FFSUFwQkFuUkJvQjFxS0FJQUlBUW9BbkJCQUNBTGEzWnhJQWRCLy84RGNXbzJBb3dCSUFRZ0F6WUNPQ0FFSUFJMkFqd2dCQ0FJTmdKQUFrQUNRQUpBSUFRb0F0d0JJZ3NnQTJvaUZpQVFTdzBBSUFZZ0FpQURhaUlLYWlBWVN3MEFJQXBCSUdvZ0RDQUdhMDBOQVFzZ0JDQUVRVUJyS0FJQU5nSUlJQVFnQkNrRE9EY0RBQ0FHSUF3Z0JDQUVRZHdCYWlBUUlCSWdFeUFORUI4aENnd0JDeUFESUFacUlRY2dCaUFMS1FBQU53QUFJQVlnQ3lrQUNEY0FDQUpBSUFOQkVVa05BQ0FHSUFzcEFCQTNBQkFnQmlBTEtRQVlOd0FZSUFOQkVHdEJFVWdOQUNBTFFSQnFJUU1nQmtFZ2FpRUxBMEFnQ3lBREtRQVFOd0FBSUFzZ0F5a0FHRGNBQ0NBTElBTXBBQ0EzQUJBZ0N5QURLUUFvTndBWUlBTkJJR29oQXlBTFFTQnFJZ3NnQjBrTkFBc0xJQWNnQ0dzaEF5QUVJQlkyQXR3QklBY2dFbXNnQ0VrRVFDQUlJQWNnRTJ0TERRUWdEU0FOSUFNZ0Vtc2lBMm9pQ3lBQ2FrOEVRQ0FISUFzZ0FoQUtHZ3dDQ3lBSElBdEJBQ0FEYXhBS0lBUWdBaUFEYWlJQ05nSThJQU5ySVFjZ0VpRURDeUFJUVJCUEJFQWdCeUFES1FBQU53QUFJQWNnQXlrQUNEY0FDQ0FDUVJGSURRRWdBaUFIYWlFSUlBZEJFR29oQWdOQUlBSWdBeWtBRURjQUFDQUNJQU1wQUJnM0FBZ2dBaUFES1FBZ053QVFJQUlnQXlrQUtEY0FHQ0FEUVNCcUlRTWdBa0VnYWlJQ0lBaEpEUUFMREFFTEFrQWdDRUVIVFFSQUlBY2dBeTBBQURvQUFDQUhJQU10QUFFNkFBRWdCeUFETFFBQ09nQUNJQWNnQXkwQUF6b0FBeUFISUFNZ0NFRUNkQ0lJUWNBZWFpZ0NBR29pQXlnQUFEWUFCQ0FESUFoQjRCNXFLQUlBYXlFRERBRUxJQWNnQXlrQUFEY0FBQXNnQWtFSlNRMEFJQUlnQjJvaEN5QUhRUWhxSWdnZ0EwRUlhaUlEYTBFUFRBUkFBMEFnQ0NBREtRQUFOd0FBSUFOQkNHb2hBeUFJUVFocUlnZ2dDMGtOQUF3Q0N3QUxJQWdnQXlrQUFEY0FBQ0FJSUFNcEFBZzNBQWdnQWtFWlNBMEFJQWRCR0dvaEFnTkFJQUlnQXlrQUVEY0FBQ0FDSUFNcEFCZzNBQWdnQWlBREtRQWdOd0FRSUFJZ0F5a0FLRGNBR0NBRFFTQnFJUU1nQWtFZ2FpSUNJQXRKRFFBTEN5QUtRWWgvU3dSQUlBb2hDUXdEQ3lBR0lBcHFJUVlnQkVId0FHb1FEeUVESUE5QkFXc2lEdzBBQzBFQUlRSWdBMEVDU1EwQkEwQWdBa0VEUndSQUlBVWdBa0VDZENJRGFrR3MwQUZxSUFNZ0JHb29BcHdCTmdJQUlBSkJBV29oQWd3QkN3c2dCQ2dDM0FFaEF3dEJ1bjhoQ1NBUUlBTnJJZ0lnRENBR2Ewc05BQ0FHQkg4Z0JpQURJQUlRQWlBQ2FnVkJBQXNnRG1zaENRc2dDVUdJZjBzTkJnc0NRQ0FGS0FMczZnRkZEUUFnQlNBRktRT0k2Z0VnQ2ExOE53T0k2Z0VDUUNBRktBTFE2Z0VpQWlBSmFpSUlRUjlOQkVBZ0RrVU5BU0FDSUNKcUlBNGdDUkFDR2lBRktBTFE2Z0VnQ1dvaENBd0JDeUFPSVFNZ0FnUkFJQUlnSW1vZ0EwRWdJQUpyRUFJYUlBVW9BdERxQVNFQ0lBVkJBRFlDME9vQklBVWdCU2tEa09vQklBVXBBTERxQVVMUDF0Tyswc2VyMlVKK2ZFSWZpVUtIbGErdm1MYmVtNTUvZmpjRGtPb0JJQVVnQlNrRG1Pb0JJQVVwQUxqcUFVTFAxdE8rMHNlcjJVSitmRUlmaVVLSGxhK3ZtTGJlbTU1L2ZqY0RtT29CSUFVZ0JTa0RvT29CSUFVcEFNRHFBVUxQMXRPKzBzZXIyVUorZkVJZmlVS0hsYSt2bUxiZW01NS9mamNEb09vQklBVWdCU2tEcU9vQklBVXBBTWpxQVVMUDF0Tyswc2VyMlVKK2ZFSWZpVUtIbGErdm1MYmVtNTUvZmpjRHFPb0JJQU1nQW10QklHb2hBd3NnQ1NBT2FpSUNJQU5CSUdwUEJFQWdBa0VnYXlFR0lBVXBBNmpxQVNFL0lBVXBBNkRxQVNGQUlBVXBBNWpxQVNGQklBVXBBNURxQVNGQ0EwQWdBeWtBR0VMUDF0Tyswc2VyMlVKK0lEOThRaCtKUW9lVnI2K1l0dDZibm45K0lUOGdBeWtBRUVMUDF0Tyswc2VyMlVKK0lFQjhRaCtKUW9lVnI2K1l0dDZibm45K0lVQWdBeWtBQ0VMUDF0Tyswc2VyMlVKK0lFRjhRaCtKUW9lVnI2K1l0dDZibm45K0lVRWdBeWtBQUVMUDF0Tyswc2VyMlVKK0lFSjhRaCtKUW9lVnI2K1l0dDZibm45K0lVSWdBMEVnYWlJRElBWk5EUUFMSUFVZ1B6Y0RxT29CSUFVZ1FEY0RvT29CSUFVZ1FUY0RtT29CSUFVZ1FqY0RrT29CQ3lBQ0lBTk5EUUVnSWlBRElBSWdBMnNpQ0JBQ0dnc2dCU0FJTmdMUTZnRUxJRFVnRldzaEF5QVZJQnRxSVFJZ0NTQU9haUVPSUFRb0FqQkZEUUFMSUNrcEF3QWlQMEovVVNBL0lBNGdIV3VzVVhKRkJFQkJiQ0VKREFZTElBVW9BdURwQVFSQVFXb2hDU0FEUVFSSkRRWWdCU2dDNk9vQlJRUkFJQ0lnQlNnQzBPb0JhaUVLQW40Z0JTa0RpT29CSWo5Q0lGb0VRQ0FGS1FPWTZnRWlRRUlIaVNBRktRT1E2Z0VpUVVJQmlYd2dCU2tEb09vQklrSkNESWw4SUFVcEE2anFBU0pEUWhLSmZDQkJRcy9XMDc3U3g2dlpRbjVDSDRsQ2g1V3ZyNWkyM3B1ZWYzNkZRb2VWcjYrWXR0NmJubjkrUXAyanRlcURzWTJLK2dCOUlFQkN6OWJUdnRMSHE5bENma0lmaVVLSGxhK3ZtTGJlbTU1L2ZvVkNoNVd2cjVpMjNwdWVmMzVDbmFPMTZvT3hqWXI2QUgwZ1FrTFAxdE8rMHNlcjJVSitRaCtKUW9lVnI2K1l0dDZibm45K2hVS0hsYSt2bUxiZW01NS9ma0tkbzdYcWc3R05pdm9BZlNCRFFzL1cwNzdTeDZ2WlFuNUNINGxDaDVXdnI1aTIzcHVlZjM2RlFvZVZyNitZdHQ2Ym5uOStRcDJqdGVxRHNZMksrZ0I5REFFTElBVXBBNkRxQVVMRno5bXk4ZVc2NmlkOEN5QS9mQ0UvSUNJaEJnTkFJQW9nQmtFSWFpSUhUd1JBSUFZcEFBQkN6OWJUdnRMSHE5bENma0lmaVVLSGxhK3ZtTGJlbTU1L2ZpQS9oVUliaVVLSGxhK3ZtTGJlbTU1L2ZrS2RvN1hxZzdHTml2b0FmU0UvSUFjaEJnd0JDd3NDUUNBS0lBWkJCR29pQ0VrRVFDQUdJUWdNQVFzZ0JqVUFBRUtIbGErdm1MYmVtNTUvZmlBL2hVSVhpVUxQMXRPKzBzZXIyVUorUXZuejNmR1o5cG1yRm53aFB3c0RRQ0FJSUFwSkJFQWdDREVBQUVMRno5bXk4ZVc2NmlkK0lEK0ZRZ3VKUW9lVnI2K1l0dDZibm45K0lUOGdDRUVCYWlFSURBRUxDeUFDS0FBQUlEOUNJWWdnUDRWQ3o5YlR2dExIcTlsQ2ZpSS9RaDJJSUQrRlF2bnozZkdaOXBtckZuNGlQMElnaUNBL2hhZEhEUWNMSUFOQkJHc2hBeUFDUVFScUlRSUxJQTRnSFdzaUNVR0pmMDhOQkNBQklBbHJJUUVnQ1NBZGFpRWRRUUVoUGd3QkN3dEJ1SDhoQnlBRERRUWdIU0FBYXlFSERBUUxRV3doQ1F3QkMwRzRmeUVKQzBHNGZ5RUhJQWxCZGtZZ1BuRU5BUXNnQ1NFSEN5Z0NBQTBBSUFWQi9Pb0JhaWdDQUNFQklBVkIrT29CYWlnQ0FDRUFJQVVRR0NBRktBS3c2d0VnQUNBQkVCTWdCVUVBTmdLdzZ3RWdCU2dDcE9zQklnSUVRQUpBQWtBQ1FBSkFJQUlvQWdBaUF3UkFJQUJGRFFJZ0FTQURJQUFSQWdBTUFRc2dBRVVOQWdzZ0FTQUNJQUFSQWdBTUFnc2dBeEFHQ3lBQ0VBWUxJQVZCQURZQ3BPc0JDeUFBQkVBZ0FTQUZJQUFSQWdBTUFRc2dCUkFHQ3lBRVFlQUJhaVFBSUFjTEM2Z1ZDUUJCaUFnTERRRUFBQUFCQUFBQUFnQUFBQUlBUWFBSUM3TUdBUUFBQUFFQUFBQUNBQUFBQWdBQUFDWUFBQUNDQUFBQUlRVUFBRW9BQUFCbkNBQUFKZ0FBQU1BQkFBQ0FBQUFBU1FVQUFFb0FBQUMrQ0FBQUtRQUFBQ3dDQUFDQUFBQUFTUVVBQUVvQUFBQytDQUFBTHdBQUFNb0NBQUNBQUFBQWlnVUFBRW9BQUFDRUNRQUFOUUFBQUhNREFBQ0FBQUFBblFVQUFFb0FBQUNnQ1FBQVBRQUFBSUVEQUFDQUFBQUE2d1VBQUVzQUFBQStDZ0FBUkFBQUFKNERBQUNBQUFBQVRRWUFBRXNBQUFDcUNnQUFTd0FBQUxNREFBQ0FBQUFBd1FZQUFFMEFBQUFmRFFBQVRRQUFBRk1FQUFDQUFBQUFJd2dBQUZFQUFBQ21Ed0FBVkFBQUFKa0VBQUNBQUFBQVN3a0FBRmNBQUFDeEVnQUFXQUFBQU5vRUFBQ0FBQUFBYndrQUFGMEFBQUFqRkFBQVZBQUFBRVVGQUFDQUFBQUFWQW9BQUdvQUFBQ01GQUFBYWdBQUFLOEZBQUNBQUFBQWRna0FBSHdBQUFCT0VBQUFmQUFBQU5JQ0FBQ0FBQUFBWXdjQUFKRUFBQUNRQndBQWtnQUFBQUFBQUFBQkFBQUFBUUFBQUFVQUFBQU5BQUFBSFFBQUFEMEFBQUI5QUFBQS9RQUFBUDBCQUFEOUF3QUEvUWNBQVAwUEFBRDlId0FBL1Q4QUFQMS9BQUQ5L3dBQS9mOEJBUDMvQXdEOS93Y0EvZjhQQVAzL0h3RDkvejhBL2Y5L0FQMy8vd0Q5Ly84Qi9mLy9BLzMvL3dmOS8vOFAvZi8vSC8zLy96LzkvLzkvQUFBQUFBRUFBQUFDQUFBQUF3QUFBQVFBQUFBRkFBQUFCZ0FBQUFjQUFBQUlBQUFBQ1FBQUFBb0FBQUFMQUFBQURBQUFBQTBBQUFBT0FBQUFEd0FBQUJBQUFBQVJBQUFBRWdBQUFCTUFBQUFVQUFBQUZRQUFBQllBQUFBWEFBQUFHQUFBQUJrQUFBQWFBQUFBR3dBQUFCd0FBQUFkQUFBQUhnQUFBQjhBQUFBREFBQUFCQUFBQUFVQUFBQUdBQUFBQndBQUFBZ0FBQUFKQUFBQUNnQUFBQXNBQUFBTUFBQUFEUUFBQUE0QUFBQVBBQUFBRUFBQUFCRUFBQUFTQUFBQUV3QUFBQlFBQUFBVkFBQUFGZ0FBQUJjQUFBQVlBQUFBR1FBQUFCb0FBQUFiQUFBQUhBQUFBQjBBQUFBZUFBQUFId0FBQUNBQUFBQWhBQUFBSWdBQUFDTUFBQUFsQUFBQUp3QUFBQ2tBQUFBckFBQUFMd0FBQURNQUFBQTdBQUFBUXdBQUFGTUFBQUJqQUFBQWd3QUFBQU1CQUFBREFnQUFBd1FBQUFNSUFBQURFQUFBQXlBQUFBTkFBQUFEZ0FBQUF3QUJBRUhnRHd0UkFRQUFBQUVBQUFBQkFBQUFBUUFBQUFJQUFBQUNBQUFBQXdBQUFBTUFBQUFFQUFBQUJBQUFBQVVBQUFBSEFBQUFDQUFBQUFrQUFBQUtBQUFBQ3dBQUFBd0FBQUFOQUFBQURnQUFBQThBQUFBUUFFSEVFQXVMQVFFQUFBQUNBQUFBQXdBQUFBUUFBQUFGQUFBQUJnQUFBQWNBQUFBSUFBQUFDUUFBQUFvQUFBQUxBQUFBREFBQUFBMEFBQUFPQUFBQUR3QUFBQkFBQUFBU0FBQUFGQUFBQUJZQUFBQVlBQUFBSEFBQUFDQUFBQUFvQUFBQU1BQUFBRUFBQUFDQUFBQUFBQUVBQUFBQ0FBQUFCQUFBQUFnQUFBQVFBQUFBSUFBQUFFQUFBQUNBQUFBQUFBRUFRWkFTQytZRUFRQUFBQUVBQUFBQkFBQUFBUUFBQUFJQUFBQUNBQUFBQXdBQUFBTUFBQUFFQUFBQUJnQUFBQWNBQUFBSUFBQUFDUUFBQUFvQUFBQUxBQUFBREFBQUFBMEFBQUFPQUFBQUR3QUFBQkFBQUFBQkFBQUFCQUFBQUFnQUFBQUFBQUFBQVFBQkFRWUFBQUFBQUFBRUFBQUFBQkFBQUFRQUFBQUFJQUFBQlFFQUFBQUFBQUFGQXdBQUFBQUFBQVVFQUFBQUFBQUFCUVlBQUFBQUFBQUZCd0FBQUFBQUFBVUpBQUFBQUFBQUJRb0FBQUFBQUFBRkRBQUFBQUFBQUFZT0FBQUFBQUFCQlJBQUFBQUFBQUVGRkFBQUFBQUFBUVVXQUFBQUFBQUNCUndBQUFBQUFBTUZJQUFBQUFBQUJBVXdBQUFBSUFBR0JVQUFBQUFBQUFjRmdBQUFBQUFBQ0FZQUFRQUFBQUFLQmdBRUFBQUFBQXdHQUJBQUFDQUFBQVFBQUFBQUFBQUFCQUVBQUFBQUFBQUZBZ0FBQUNBQUFBVUVBQUFBQUFBQUJRVUFBQUFnQUFBRkJ3QUFBQUFBQUFVSUFBQUFJQUFBQlFvQUFBQUFBQUFGQ3dBQUFBQUFBQVlOQUFBQUlBQUJCUkFBQUFBQUFBRUZFZ0FBQUNBQUFRVVdBQUFBQUFBQ0JSZ0FBQUFnQUFNRklBQUFBQUFBQXdVb0FBQUFBQUFHQkVBQUFBQVFBQVlFUUFBQUFDQUFCd1dBQUFBQUFBQUpCZ0FDQUFBQUFBc0dBQWdBQURBQUFBUUFBQUFBRUFBQUJBRUFBQUFnQUFBRkFnQUFBQ0FBQUFVREFBQUFJQUFBQlFVQUFBQWdBQUFGQmdBQUFDQUFBQVVJQUFBQUlBQUFCUWtBQUFBZ0FBQUZDd0FBQUNBQUFBVU1BQUFBQUFBQUJnOEFBQUFnQUFFRkVnQUFBQ0FBQVFVVUFBQUFJQUFDQlJnQUFBQWdBQUlGSEFBQUFDQUFBd1VvQUFBQUlBQUVCVEFBQUFBQUFCQUdBQUFCQUFBQUR3WUFnQUFBQUFBT0JnQkFBQUFBQUEwR0FDQUFRWUFYQzRjQ0FRQUJBUVVBQUFBQUFBQUZBQUFBQUFBQUJnUTlBQUFBQUFBSkJmMEJBQUFBQUE4Ri9YOEFBQUFBRlFYOS94OEFBQUFEQlFVQUFBQUFBQWNFZlFBQUFBQUFEQVg5RHdBQUFBQVNCZjMvQXdBQUFCY0YvZjkvQUFBQUJRVWRBQUFBQUFBSUJQMEFBQUFBQUE0Ri9UOEFBQUFBRkFYOS93OEFBQUFDQlFFQUFBQVFBQWNFZlFBQUFBQUFDd1g5QndBQUFBQVJCZjMvQVFBQUFCWUYvZjgvQUFBQUJBVU5BQUFBRUFBSUJQMEFBQUFBQUEwRi9SOEFBQUFBRXdYOS93Y0FBQUFCQlFFQUFBQVFBQVlFUFFBQUFBQUFDZ1g5QXdBQUFBQVFCZjMvQUFBQUFCd0YvZi8vRHdBQUd3WDkvLzhIQUFBYUJmMy8vd01BQUJrRi9mLy9BUUFBR0FYOS8vOEFRWkFaQzRZRUFRQUJBUVlBQUFBQUFBQUdBd0FBQUFBQUFBUUVBQUFBSUFBQUJRVUFBQUFBQUFBRkJnQUFBQUFBQUFVSUFBQUFBQUFBQlFrQUFBQUFBQUFGQ3dBQUFBQUFBQVlOQUFBQUFBQUFCaEFBQUFBQUFBQUdFd0FBQUFBQUFBWVdBQUFBQUFBQUJoa0FBQUFBQUFBR0hBQUFBQUFBQUFZZkFBQUFBQUFBQmlJQUFBQUFBQUVHSlFBQUFBQUFBUVlwQUFBQUFBQUNCaThBQUFBQUFBTUdPd0FBQUFBQUJBWlRBQUFBQUFBSEJvTUFBQUFBQUFrR0F3SUFBQkFBQUFRRUFBQUFBQUFBQkFVQUFBQWdBQUFGQmdBQUFBQUFBQVVIQUFBQUlBQUFCUWtBQUFBQUFBQUZDZ0FBQUFBQUFBWU1BQUFBQUFBQUJnOEFBQUFBQUFBR0VnQUFBQUFBQUFZVkFBQUFBQUFBQmhnQUFBQUFBQUFHR3dBQUFBQUFBQVllQUFBQUFBQUFCaUVBQUFBQUFBRUdJd0FBQUFBQUFRWW5BQUFBQUFBQ0Jpc0FBQUFBQUFNR013QUFBQUFBQkFaREFBQUFBQUFGQm1NQUFBQUFBQWdHQXdFQUFDQUFBQVFFQUFBQU1BQUFCQVFBQUFBUUFBQUVCUUFBQUNBQUFBVUhBQUFBSUFBQUJRZ0FBQUFnQUFBRkNnQUFBQ0FBQUFVTEFBQUFBQUFBQmc0QUFBQUFBQUFHRVFBQUFBQUFBQVlVQUFBQUFBQUFCaGNBQUFBQUFBQUdHZ0FBQUFBQUFBWWRBQUFBQUFBQUJpQUFBQUFBQUJBR0F3QUJBQUFBRHdZRGdBQUFBQUFPQmdOQUFBQUFBQTBHQXlBQUFBQUFEQVlERUFBQUFBQUxCZ01JQUFBQUFBb0dBd1FBUWFRZEM5a0JBUUFBQUFNQUFBQUhBQUFBRHdBQUFCOEFBQUEvQUFBQWZ3QUFBUDhBQUFEL0FRQUEvd01BQVA4SEFBRC9Ed0FBL3g4QUFQOC9BQUQvZndBQS8vOEFBUC8vQVFELy93TUEvLzhIQVAvL0R3RC8veDhBLy84L0FQLy9md0QvLy84QS8vLy9BZi8vL3dQLy8vOEgvLy8vRC8vLy94Ly8vLzgvLy8vL2Z3QUFBQUFCQUFBQUFnQUFBQVFBQUFBQUFBQUFBZ0FBQUFRQUFBQUlBQUFBQUFBQUFBRUFBQUFDQUFBQUFRQUFBQVFBQUFBRUFBQUFCQUFBQUFRQUFBQUlBQUFBQ0FBQUFBZ0FBQUFIQUFBQUNBQUFBQWtBQUFBS0FBQUFDd0JCZ0I4TEE0QVJBUT09Ijt2YXIgc2U9bmV3IEpBLENlPSExO2FzeW5jIGZ1bmN0aW9uIF9JKEEsdCxlKXtsZXQgST1udWxsO3R5cGVvZiBBIT0ic3RyaW5nIj9JPUEuaHJlZjpBLnN0YXJ0c1dpdGgoImh0dHAiKT9JPUE6ST1gJHt0fS8ke0F9YCxJLmVuZHNXaXRoKCIuanMiKSYmKEk9SS5zdWJzdHJpbmcoMCxJLmxlbmd0aC0zKSksSS5lbmRzV2l0aCgiLndhc20iKSYmKEk9SS5zdWJzdHJpbmcoMCxJLmxlbmd0aC01KSk7bGV0IHI9YCR7SX0ud2FzbWAsbz1hd2FpdCBMQS5nZXQoYCR7cn0uenN0YCx7cmVzcG9uc2VUeXBlOiJhcnJheWJ1ZmZlciIscGFyYW1zOmV9KTtDZXx8KGF3YWl0IHNlLmluaXQoKSxDZT0hMCk7bGV0IEM9c2UuZGVjb2RlKG5ldyBVaW50OEFycmF5KG8uZGF0YSkpLmJ1ZmZlcjtyZXR1cm4oYXdhaXQgaW1wb3J0KGAke0l9LmpzYCkpLmRlZmF1bHQoe3dhc21CaW5hcnk6Q30pfXZhciBCZT1fSTt2YXIgYkE9bmV3IE1hcDthc3luYyBmdW5jdGlvbiBYSShBLHQsZSl7bGV0IEk9QSxyPUEsbz1udWxsO3JldHVybiB0eXBlb2YgQSE9InN0cmluZyImJihJPW5ldyBVUkwoQS5ocmVmKSxyPUkuaHJlZiksYkEuaGFzKHIpP289YXdhaXQgYkEuZ2V0KHIpOihiQS5zZXQocixCZShJLHQsZSkpLG89YXdhaXQgYkEuZ2V0KHIpKSxvfXZhciBhZT1YSTt2YXIgekk9e1RleHRGaWxlOiJUZXh0RmlsZSIsQmluYXJ5RmlsZToiQmluYXJ5RmlsZSIsVGV4dFN0cmVhbToiVGV4dFN0cmVhbSIsQmluYXJ5U3RyZWFtOiJCaW5hcnlTdHJlYW0iLEltYWdlOiJJbWFnZSIsUG9pbnRTZXQ6IlBvaW50U2V0IixNZXNoOiJNZXNoIixQb2x5RGF0YToiUG9seURhdGEiLFRyYW5zZm9ybUxpc3Q6IlRyYW5zZm9ybUxpc3QiLEpzb25Db21wYXRpYmxlOiJKc29uQ29tcGF0aWJsZSJ9LGg9ekk7dmFyIHZJPXtJbnQ4OiJpbnQ4IixVSW50ODoidWludDgiLEludDE2OiJpbnQxNiIsVUludDE2OiJ1aW50MTYiLEludDMyOiJpbnQzMiIsVUludDMyOiJ1aW50MzIiLEludDY0OiJpbnQ2NCIsVUludDY0OiJ1aW50NjQiLFNpemVWYWx1ZVR5cGU6InVpbnQ2NCIsSWRlbnRpZmllclR5cGU6InVpbnQ2NCIsSW5kZXhWYWx1ZVR5cGU6ImludDY0IixPZmZzZXRWYWx1ZVR5cGU6ImludDY0In0sUj12STt2YXIgJEk9e0Zsb2F0MzI6ImZsb2F0MzIiLEZsb2F0NjQ6ImZsb2F0NjQiLFNwYWNlUHJlY2lzaW9uVHlwZToiZmxvYXQ2NCJ9LHo9JEk7ZnVuY3Rpb24gQXIoQSx0KXtsZXQgZT1udWxsO3N3aXRjaChBKXtjYXNlIFIuVUludDg6e2U9bmV3IFVpbnQ4QXJyYXkodCk7YnJlYWt9Y2FzZSBSLkludDg6e2U9bmV3IEludDhBcnJheSh0KTticmVha31jYXNlIFIuVUludDE2OntlPW5ldyBVaW50MTZBcnJheSh0KTticmVha31jYXNlIFIuSW50MTY6e2U9bmV3IEludDE2QXJyYXkodCk7YnJlYWt9Y2FzZSBSLlVJbnQzMjp7ZT1uZXcgVWludDMyQXJyYXkodCk7YnJlYWt9Y2FzZSBSLkludDMyOntlPW5ldyBJbnQzMkFycmF5KHQpO2JyZWFrfWNhc2UgUi5VSW50NjQ6e3R5cGVvZiBnbG9iYWxUaGlzLkJpZ1VpbnQ2NEFycmF5PT0iZnVuY3Rpb24iP2U9bmV3IEJpZ1VpbnQ2NEFycmF5KHQpOmU9bmV3IFVpbnQ4QXJyYXkodCk7YnJlYWt9Y2FzZSBSLkludDY0Ont0eXBlb2YgZ2xvYmFsVGhpcy5CaWdJbnQ2NEFycmF5PT0iZnVuY3Rpb24iP2U9bmV3IEJpZ0ludDY0QXJyYXkodCk6ZT1uZXcgVWludDhBcnJheSh0KTticmVha31jYXNlIHouRmxvYXQzMjp7ZT1uZXcgRmxvYXQzMkFycmF5KHQpO2JyZWFrfWNhc2Ugei5GbG9hdDY0OntlPW5ldyBGbG9hdDY0QXJyYXkodCk7YnJlYWt9Y2FzZSJudWxsIjp7ZT1udWxsO2JyZWFrfWNhc2UgbnVsbDp7ZT1udWxsO2JyZWFrfWRlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKCJUeXBlIGlzIG5vdCBzdXBwb3J0ZWQgYXMgYSBUeXBlZEFycmF5Iil9cmV0dXJuIGV9dmFyIEg9QXI7dmFyIGNlPXR5cGVvZiBnbG9iYWxUaGlzLlNoYXJlZEFycmF5QnVmZmVyPT0iZnVuY3Rpb24iLFFlPW5ldyBUZXh0RW5jb2RlcixFZT1uZXcgVGV4dERlY29kZXIoInV0Zi04Iik7ZnVuY3Rpb24gdHIoQSx0KXtsZXQgZT17ZmxhZ3M6InIiLGVuY29kaW5nOiJiaW5hcnkifSxJPUEuZnNfb3Blbih0LGUuZmxhZ3MpLG89QS5mc19zdGF0KHQpLnNpemUsZz1udWxsO2NlP2c9bmV3IFNoYXJlZEFycmF5QnVmZmVyKG8pOmc9bmV3IEFycmF5QnVmZmVyKG8pO2xldCBDPW5ldyBVaW50OEFycmF5KGcpO3JldHVybiBBLmZzX3JlYWQoSSxDLDAsbywwKSxBLmZzX2Nsb3NlKEkpLEN9ZnVuY3Rpb24gZmUoQSx0LGUpe2xldCBJPW51bGw7Y2U/ST1uZXcgU2hhcmVkQXJyYXlCdWZmZXIoZSk6ST1uZXcgQXJyYXlCdWZmZXIoZSk7bGV0IHI9bmV3IFVpbnQ4QXJyYXkoSSksbz1uZXcgVWludDhBcnJheShBLkhFQVBVOC5idWZmZXIsdCxlKTtyZXR1cm4gci5zZXQobykscn1mdW5jdGlvbiB5KEEsdCxlLEkpe2xldCByPTA7cmV0dXJuIHQhPT1udWxsJiYocj1BLmNjYWxsKCJpdGtfd2FzbV9pbnB1dF9hcnJheV9hbGxvYyIsIm51bWJlciIsWyJudW1iZXIiLCJudW1iZXIiLCJudW1iZXIiLCJudW1iZXIiXSxbMCxlLEksdC5idWZmZXIuYnl0ZUxlbmd0aF0pLEEuSEVBUFU4LnNldChuZXcgVWludDhBcnJheSh0LmJ1ZmZlcikscikpLHJ9ZnVuY3Rpb24gVChBLHQsZSl7bGV0IEk9SlNPTi5zdHJpbmdpZnkodCkscj1BLmxlbmd0aEJ5dGVzVVRGOChJKSsxLG89QS5jY2FsbCgiaXRrX3dhc21faW5wdXRfanNvbl9hbGxvYyIsIm51bWJlciIsWyJudW1iZXIiLCJudW1iZXIiLCJudW1iZXIiXSxbMCxlLHJdKTtBLnN0cmluZ1RvVVRGOChJLG8scil9ZnVuY3Rpb24gRihBLHQsZSxJKXtsZXQgcj1BLmNjYWxsKCJpdGtfd2FzbV9vdXRwdXRfYXJyYXlfYWRkcmVzcyIsIm51bWJlciIsWyJudW1iZXIiLCJudW1iZXIiLCJudW1iZXIiXSxbMCx0LGVdKSxvPUEuY2NhbGwoIml0a193YXNtX291dHB1dF9hcnJheV9zaXplIiwibnVtYmVyIixbIm51bWJlciIsIm51bWJlciIsIm51bWJlciJdLFswLHQsZV0pLGc9ZmUoQSxyLG8pO3JldHVybiBIKEksZy5idWZmZXIpfWZ1bmN0aW9uIHNBKEEsdCl7bGV0IGU9QS5jY2FsbCgiaXRrX3dhc21fb3V0cHV0X2pzb25fYWRkcmVzcyIsIm51bWJlciIsWyJudW1iZXIiLCJudW1iZXIiXSxbMCx0XSksST1BLlVURjhUb1N0cmluZyhlKTtyZXR1cm4gSlNPTi5wYXJzZShJKX1mdW5jdGlvbiBlcihBLHQsZSxJKXtJIT1udWxsJiZJLmxlbmd0aD4wJiZJLmZvckVhY2goZnVuY3Rpb24oYSxuKXtzd2l0Y2goYS50eXBlKXtjYXNlIGguVGV4dFN0cmVhbTp7bGV0IHM9UWUuZW5jb2RlKGEuZGF0YS5kYXRhKSxmPXkoQSxzLG4sMCksQj17c2l6ZTpzLmJ1ZmZlci5ieXRlTGVuZ3RoLGRhdGE6YGRhdGE6YXBwbGljYXRpb24vdm5kLml0ay5hZGRyZXNzLDA6JHtmfWB9O1QoQSxCLG4pO2JyZWFrfWNhc2UgaC5Kc29uQ29tcGF0aWJsZTp7bGV0IHM9UWUuZW5jb2RlKEpTT04uc3RyaW5naWZ5KGEuZGF0YSkpLGY9eShBLHMsbiwwKSxCPXtzaXplOnMuYnVmZmVyLmJ5dGVMZW5ndGgsZGF0YTpgZGF0YTphcHBsaWNhdGlvbi92bmQuaXRrLmFkZHJlc3MsMDoke2Z9YH07VChBLEIsbik7YnJlYWt9Y2FzZSBoLkJpbmFyeVN0cmVhbTp7bGV0IHM9YS5kYXRhLmRhdGEsZj15KEEscyxuLDApLEI9e3NpemU6cy5idWZmZXIuYnl0ZUxlbmd0aCxkYXRhOmBkYXRhOmFwcGxpY2F0aW9uL3ZuZC5pdGsuYWRkcmVzcywwOiR7Zn1gfTtUKEEsQixuKTticmVha31jYXNlIGguVGV4dEZpbGU6e0EuZnNfd3JpdGVGaWxlKGEuZGF0YS5wYXRoLGEuZGF0YS5kYXRhKTticmVha31jYXNlIGguQmluYXJ5RmlsZTp7QS5mc193cml0ZUZpbGUoYS5kYXRhLnBhdGgsYS5kYXRhLmRhdGEpO2JyZWFrfWNhc2UgaC5JbWFnZTp7bGV0IHM9YS5kYXRhLGY9eShBLHMuZGF0YSxuLDApLEI9eShBLHMuZGlyZWN0aW9uLG4sMSksRT10eXBlb2Ygcy5tZXRhZGF0YT8uZW50cmllczwidSI/QXJyYXkuZnJvbShzLm1ldGFkYXRhLmVudHJpZXMoKSk6W10sbD17aW1hZ2VUeXBlOnMuaW1hZ2VUeXBlLG5hbWU6cy5uYW1lLG9yaWdpbjpzLm9yaWdpbixzcGFjaW5nOnMuc3BhY2luZyxkaXJlY3Rpb246YGRhdGE6YXBwbGljYXRpb24vdm5kLml0ay5hZGRyZXNzLDA6JHtCfWAsc2l6ZTpzLnNpemUsZGF0YTpgZGF0YTphcHBsaWNhdGlvbi92bmQuaXRrLmFkZHJlc3MsMDoke2Z9YCxtZXRhZGF0YTpFfTtUKEEsbCxuKTticmVha31jYXNlIGguTWVzaDp7bGV0IHM9YS5kYXRhLGY9eShBLHMucG9pbnRzLG4sMCksQj15KEEscy5jZWxscyxuLDEpLEU9eShBLHMucG9pbnREYXRhLG4sMiksbD15KEEscy5jZWxsRGF0YSxuLDMpLGM9e21lc2hUeXBlOnMubWVzaFR5cGUsbmFtZTpzLm5hbWUsbnVtYmVyT2ZQb2ludHM6cy5udW1iZXJPZlBvaW50cyxwb2ludHM6YGRhdGE6YXBwbGljYXRpb24vdm5kLml0ay5hZGRyZXNzLDA6JHtmfWAsbnVtYmVyT2ZDZWxsczpzLm51bWJlck9mQ2VsbHMsY2VsbHM6YGRhdGE6YXBwbGljYXRpb24vdm5kLml0ay5hZGRyZXNzLDA6JHtCfWAsY2VsbEJ1ZmZlclNpemU6cy5jZWxsQnVmZmVyU2l6ZSxudW1iZXJPZlBvaW50UGl4ZWxzOnMubnVtYmVyT2ZQb2ludFBpeGVscyxwb2ludERhdGE6YGRhdGE6YXBwbGljYXRpb24vdm5kLml0ay5hZGRyZXNzLDA6JHtFfWAsbnVtYmVyT2ZDZWxsUGl4ZWxzOnMubnVtYmVyT2ZDZWxsUGl4ZWxzLGNlbGxEYXRhOmBkYXRhOmFwcGxpY2F0aW9uL3ZuZC5pdGsuYWRkcmVzcywwOiR7bH1gfTtUKEEsYyxuKTticmVha31jYXNlIGguUG9pbnRTZXQ6e2xldCBzPWEuZGF0YSxmPXkoQSxzLnBvaW50cyxuLDApLEI9eShBLHMucG9pbnREYXRhLG4sMSksRT17cG9pbnRTZXRUeXBlOnMucG9pbnRTZXRUeXBlLG5hbWU6cy5uYW1lLG51bWJlck9mUG9pbnRzOnMubnVtYmVyT2ZQb2ludHMscG9pbnRzOmBkYXRhOmFwcGxpY2F0aW9uL3ZuZC5pdGsuYWRkcmVzcywwOiR7Zn1gLG51bWJlck9mUG9pbnRQaXhlbHM6cy5udW1iZXJPZlBvaW50UGl4ZWxzLHBvaW50RGF0YTpgZGF0YTphcHBsaWNhdGlvbi92bmQuaXRrLmFkZHJlc3MsMDoke0J9YH07VChBLEUsbik7YnJlYWt9Y2FzZSBoLlRyYW5zZm9ybUxpc3Q6e2xldCBzPWEuZGF0YSxmPVtdO3MuZm9yRWFjaCgoQixFKT0+e2xldCBjPWBkYXRhOmFwcGxpY2F0aW9uL3ZuZC5pdGsuYWRkcmVzcywwOiR7eShBLEIuZml4ZWRQYXJhbWV0ZXJzLG4sRSoyKX1gLFM9YGRhdGE6YXBwbGljYXRpb24vdm5kLml0ay5hZGRyZXNzLDA6JHt5KEEsQi5wYXJhbWV0ZXJzLG4sRSoyKzEpfWAsRD17dHJhbnNmb3JtVHlwZTpCLnRyYW5zZm9ybVR5cGUsbnVtYmVyT2ZGaXhlZFBhcmFtZXRlcnM6Qi5udW1iZXJPZkZpeGVkUGFyYW1ldGVycyxudW1iZXJPZlBhcmFtZXRlcnM6Qi5udW1iZXJPZlBhcmFtZXRlcnMsbmFtZTpCLm5hbWUsaW5wdXRTcGFjZU5hbWU6Qi5pbnB1dFNwYWNlTmFtZSxvdXRwdXRTcGFjZU5hbWU6Qi5vdXRwdXRTcGFjZU5hbWUscGFyYW1ldGVyczpTLGZpeGVkUGFyYW1ldGVyczpjfTtmLnB1c2goRCl9KSxUKEEsZixuKTticmVha31jYXNlIGguUG9seURhdGE6e2xldCBzPWEuZGF0YSxmPXkoQSxzLnBvaW50cyxuLDApLEI9eShBLHMudmVydGljZXMsbiwxKSxFPXkoQSxzLmxpbmVzLG4sMiksbD15KEEscy5wb2x5Z29ucyxuLDMpLGM9eShBLHMudHJpYW5nbGVTdHJpcHMsbiw0KSxwPXkoQSxzLnBvaW50RGF0YSxuLDUpLFM9eShBLHMucG9pbnREYXRhLG4sNiksRD17cG9seURhdGFUeXBlOnMucG9seURhdGFUeXBlLG5hbWU6cy5uYW1lLG51bWJlck9mUG9pbnRzOnMubnVtYmVyT2ZQb2ludHMscG9pbnRzOmBkYXRhOmFwcGxpY2F0aW9uL3ZuZC5pdGsuYWRkcmVzcywwOiR7Zn1gLHZlcnRpY2VzQnVmZmVyU2l6ZTpzLnZlcnRpY2VzQnVmZmVyU2l6ZSx2ZXJ0aWNlczpgZGF0YTphcHBsaWNhdGlvbi92bmQuaXRrLmFkZHJlc3MsMDoke0J9YCxsaW5lc0J1ZmZlclNpemU6cy5saW5lc0J1ZmZlclNpemUsbGluZXM6YGRhdGE6YXBwbGljYXRpb24vdm5kLml0ay5hZGRyZXNzLDA6JHtFfWAscG9seWdvbnNCdWZmZXJTaXplOnMucG9seWdvbnNCdWZmZXJTaXplLHBvbHlnb25zOmBkYXRhOmFwcGxpY2F0aW9uL3ZuZC5pdGsuYWRkcmVzcywwOiR7bH1gLHRyaWFuZ2xlU3RyaXBzQnVmZmVyU2l6ZTpzLnRyaWFuZ2xlU3RyaXBzQnVmZmVyU2l6ZSx0cmlhbmdsZVN0cmlwczpgZGF0YTphcHBsaWNhdGlvbi92bmQuaXRrLmFkZHJlc3MsMDoke2N9YCxudW1iZXJPZlBvaW50UGl4ZWxzOnMubnVtYmVyT2ZQb2ludFBpeGVscyxwb2ludERhdGE6YGRhdGE6YXBwbGljYXRpb24vdm5kLml0ay5hZGRyZXNzLDA6JHtwfWAsbnVtYmVyT2ZDZWxsUGl4ZWxzOnMubnVtYmVyT2ZDZWxsUGl4ZWxzLGNlbGxEYXRhOmBkYXRhOmFwcGxpY2F0aW9uL3ZuZC5pdGsuYWRkcmVzcywwOiR7U31gfTtUKEEsRCxuKTticmVha31kZWZhdWx0OnRocm93IEVycm9yKCJVbnN1cHBvcnRlZCBpbnB1dCBJbnRlcmZhY2VUeXBlIil9fSksQS5yZXNldE1vZHVsZVN0ZG91dCgpLEEucmVzZXRNb2R1bGVTdGRlcnIoKTtsZXQgcj1BLnN0YWNrU2F2ZSgpLG89MDt0cnl7bz1BLmNhbGxNYWluKHQuc2xpY2UoKSl9Y2F0Y2goYSl7dGhyb3cgdHlwZW9mIGE9PSJudW1iZXIiJiYoY29uc29sZS5sb2coIkV4Y2VwdGlvbiB3aGlsZSBydW5uaW5nIHBpcGVsaW5lOiIpLGNvbnNvbGUubG9nKCJzdGRvdXQ6IixBLmdldE1vZHVsZVN0ZG91dCgpKSxjb25zb2xlLmVycm9yKCJzdGRlcnI6IixBLmdldE1vZHVsZVN0ZGVycigpKSx0eXBlb2YgQS5nZXRFeGNlcHRpb25NZXNzYWdlPCJ1Ij9jb25zb2xlLmVycm9yKCJleGNlcHRpb246IixBLmdldEV4Y2VwdGlvbk1lc3NhZ2UoYSkpOmNvbnNvbGUuZXJyb3IoIkJ1aWxkIG1vZHVsZSBpbiBEZWJ1ZyBtb2RlIGZvciBleGNlcHRpb24gbWVzc2FnZSBpbmZvcm1hdGlvbi4iKSksYX1maW5hbGx5e0Euc3RhY2tSZXN0b3JlKHIpfWxldCBnPUEuZ2V0TW9kdWxlU3Rkb3V0KCksQz1BLmdldE1vZHVsZVN0ZGVycigpLFE9W107cmV0dXJuIGUhPW51bGwmJmUubGVuZ3RoPjAmJm89PT0wJiZlLmZvckVhY2goZnVuY3Rpb24oYSxuKXtsZXQgcz1udWxsO3N3aXRjaChhLnR5cGUpe2Nhc2UgaC5UZXh0U3RyZWFtOntsZXQgQj1BLmNjYWxsKCJpdGtfd2FzbV9vdXRwdXRfYXJyYXlfYWRkcmVzcyIsIm51bWJlciIsWyJudW1iZXIiLCJudW1iZXIiLCJudW1iZXIiXSxbMCxuLDBdKSxFPUEuY2NhbGwoIml0a193YXNtX291dHB1dF9hcnJheV9zaXplIiwibnVtYmVyIixbIm51bWJlciIsIm51bWJlciIsIm51bWJlciJdLFswLG4sMF0pLGw9bmV3IFVpbnQ4QXJyYXkoQS5IRUFQVTguYnVmZmVyLEIsRSk7cz17ZGF0YTpFZS5kZWNvZGUobCl9O2JyZWFrfWNhc2UgaC5Kc29uQ29tcGF0aWJsZTp7bGV0IEI9QS5jY2FsbCgiaXRrX3dhc21fb3V0cHV0X2FycmF5X2FkZHJlc3MiLCJudW1iZXIiLFsibnVtYmVyIiwibnVtYmVyIiwibnVtYmVyIl0sWzAsbiwwXSksRT1BLmNjYWxsKCJpdGtfd2FzbV9vdXRwdXRfYXJyYXlfc2l6ZSIsIm51bWJlciIsWyJudW1iZXIiLCJudW1iZXIiLCJudW1iZXIiXSxbMCxuLDBdKSxsPW5ldyBVaW50OEFycmF5KEEuSEVBUFU4LmJ1ZmZlcixCLEUpO3M9SlNPTi5wYXJzZShFZS5kZWNvZGUobCkpO2JyZWFrfWNhc2UgaC5CaW5hcnlTdHJlYW06e2xldCBCPUEuY2NhbGwoIml0a193YXNtX291dHB1dF9hcnJheV9hZGRyZXNzIiwibnVtYmVyIixbIm51bWJlciIsIm51bWJlciIsIm51bWJlciJdLFswLG4sMF0pLEU9QS5jY2FsbCgiaXRrX3dhc21fb3V0cHV0X2FycmF5X3NpemUiLCJudW1iZXIiLFsibnVtYmVyIiwibnVtYmVyIiwibnVtYmVyIl0sWzAsbiwwXSk7cz17ZGF0YTpmZShBLEIsRSl9O2JyZWFrfWNhc2UgaC5UZXh0RmlsZTp7cz17cGF0aDphLmRhdGEucGF0aCxkYXRhOkEuZnNfcmVhZEZpbGUoYS5kYXRhLnBhdGgse2VuY29kaW5nOiJ1dGY4In0pfTticmVha31jYXNlIGguQmluYXJ5RmlsZTp7cz17cGF0aDphLmRhdGEucGF0aCxkYXRhOnRyKEEsYS5kYXRhLnBhdGgpfTticmVha31jYXNlIGguSW1hZ2U6e2xldCBCPXNBKEEsbik7Qi5kYXRhPUYoQSxuLDAsQi5pbWFnZVR5cGUuY29tcG9uZW50VHlwZSksQi5kaXJlY3Rpb249RihBLG4sMSx6LkZsb2F0NjQpLEIubWV0YWRhdGE9bmV3IE1hcChCLm1ldGFkYXRhKSxzPUI7YnJlYWt9Y2FzZSBoLk1lc2g6e2xldCBCPXNBKEEsbik7Qi5udW1iZXJPZlBvaW50cz4wP0IucG9pbnRzPUYoQSxuLDAsQi5tZXNoVHlwZS5wb2ludENvbXBvbmVudFR5cGUpOkIucG9pbnRzPUgoQi5tZXNoVHlwZS5wb2ludENvbXBvbmVudFR5cGUsbmV3IEFycmF5QnVmZmVyKDApKSxCLm51bWJlck9mQ2VsbHM+MD9CLmNlbGxzPUYoQSxuLDEsQi5tZXNoVHlwZS5jZWxsQ29tcG9uZW50VHlwZSk6Qi5jZWxscz1IKEIubWVzaFR5cGUuY2VsbENvbXBvbmVudFR5cGUsbmV3IEFycmF5QnVmZmVyKDApKSxCLm51bWJlck9mUG9pbnRQaXhlbHM+MD9CLnBvaW50RGF0YT1GKEEsbiwyLEIubWVzaFR5cGUucG9pbnRQaXhlbENvbXBvbmVudFR5cGUpOkIucG9pbnREYXRhPUgoQi5tZXNoVHlwZS5wb2ludFBpeGVsQ29tcG9uZW50VHlwZSxuZXcgQXJyYXlCdWZmZXIoMCkpLEIubnVtYmVyT2ZDZWxsUGl4ZWxzPjA/Qi5jZWxsRGF0YT1GKEEsbiwzLEIubWVzaFR5cGUuY2VsbFBpeGVsQ29tcG9uZW50VHlwZSk6Qi5jZWxsRGF0YT1IKEIubWVzaFR5cGUuY2VsbFBpeGVsQ29tcG9uZW50VHlwZSxuZXcgQXJyYXlCdWZmZXIoMCkpLHM9QjticmVha31jYXNlIGguUG9pbnRTZXQ6e2xldCBCPXNBKEEsbik7Qi5udW1iZXJPZlBvaW50cz4wP0IucG9pbnRzPUYoQSxuLDAsQi5wb2ludFNldFR5cGUucG9pbnRDb21wb25lbnRUeXBlKTpCLnBvaW50cz1IKEIucG9pbnRTZXRUeXBlLnBvaW50Q29tcG9uZW50VHlwZSxuZXcgQXJyYXlCdWZmZXIoMCkpLEIubnVtYmVyT2ZQb2ludFBpeGVscz4wP0IucG9pbnREYXRhPUYoQSxuLDEsQi5wb2ludFNldFR5cGUucG9pbnRQaXhlbENvbXBvbmVudFR5cGUpOkIucG9pbnREYXRhPUgoQi5wb2ludFNldFR5cGUucG9pbnRQaXhlbENvbXBvbmVudFR5cGUsbmV3IEFycmF5QnVmZmVyKDApKSxzPUI7YnJlYWt9Y2FzZSBoLlRyYW5zZm9ybUxpc3Q6e2xldCBCPXNBKEEsbik7Qi5mb3JFYWNoKChFLGwpPT57RS5udW1iZXJPZkZpeGVkUGFyYW1ldGVycz4wJiYoQltsXS5maXhlZFBhcmFtZXRlcnM9RihBLG4sbCoyLEUudHJhbnNmb3JtVHlwZS5wYXJhbWV0ZXJzVmFsdWVUeXBlKSksRS5udW1iZXJPZkZpeGVkUGFyYW1ldGVycz4wJiYoQltsXS5wYXJhbWV0ZXJzPUYoQSxuLGwqMisxLEUudHJhbnNmb3JtVHlwZS5wYXJhbWV0ZXJzVmFsdWVUeXBlKSl9KSxzPUI7YnJlYWt9Y2FzZSBoLlBvbHlEYXRhOntsZXQgQj1zQShBLG4pO0IubnVtYmVyT2ZQb2ludHM+MD9CLnBvaW50cz1GKEEsbiwwLHouRmxvYXQzMik6Qi5wb2ludHM9bmV3IEZsb2F0MzJBcnJheSxCLnZlcnRpY2VzQnVmZmVyU2l6ZT4wP0IudmVydGljZXM9RihBLG4sMSxSLlVJbnQzMik6Qi52ZXJ0aWNlcz1uZXcgVWludDMyQXJyYXksQi5saW5lc0J1ZmZlclNpemU+MD9CLmxpbmVzPUYoQSxuLDIsUi5VSW50MzIpOkIubGluZXM9bmV3IFVpbnQzMkFycmF5LEIucG9seWdvbnNCdWZmZXJTaXplPjA/Qi5wb2x5Z29ucz1GKEEsbiwzLFIuVUludDMyKTpCLnBvbHlnb25zPW5ldyBVaW50MzJBcnJheSxCLnRyaWFuZ2xlU3RyaXBzQnVmZmVyU2l6ZT4wP0IudHJpYW5nbGVTdHJpcHM9RihBLG4sNCxSLlVJbnQzMik6Qi50cmlhbmdsZVN0cmlwcz1uZXcgVWludDMyQXJyYXksQi5udW1iZXJPZlBvaW50UGl4ZWxzPjA/Qi5wb2ludERhdGE9RihBLG4sNSxCLnBvbHlEYXRhVHlwZS5wb2ludFBpeGVsQ29tcG9uZW50VHlwZSk6Qi5wb2ludERhdGE9SChCLnBvbHlEYXRhVHlwZS5wb2ludFBpeGVsQ29tcG9uZW50VHlwZSxuZXcgQXJyYXlCdWZmZXIoMCkpLEIubnVtYmVyT2ZDZWxsUGl4ZWxzPjA/Qi5jZWxsRGF0YT1GKEEsbiw2LEIucG9seURhdGFUeXBlLmNlbGxQaXhlbENvbXBvbmVudFR5cGUpOkIuY2VsbERhdGE9SChCLnBvbHlEYXRhVHlwZS5jZWxsUGl4ZWxDb21wb25lbnRUeXBlLG5ldyBBcnJheUJ1ZmZlcigwKSkscz1CO2JyZWFrfWRlZmF1bHQ6dGhyb3cgRXJyb3IoIlVuc3VwcG9ydGVkIG91dHB1dCBJbnRlcmZhY2VUeXBlIil9bGV0IGY9e3R5cGU6YS50eXBlLGRhdGE6c307US5wdXNoKGYpfSkse3JldHVyblZhbHVlOm8sc3Rkb3V0Omcsc3RkZXJyOkMsb3V0cHV0czpRfX12YXIgbGU9ZXI7dmFyIElyPXR5cGVvZiBnbG9iYWxUaGlzLlNoYXJlZEFycmF5QnVmZmVyPCJ1IjtmdW5jdGlvbiBycihBLHQpe2lmKEE9PW51bGwpcmV0dXJuW107bGV0IGU9W107Zm9yKGxldCBJPTA7STxBLmxlbmd0aDtJKyspe2xldCByPW9yKEFbSV0sdCk7ciE9PW51bGwmJmUucHVzaChyKX1yZXR1cm4gZX1mdW5jdGlvbiBvcihBLHQpe2lmKEE9PW51bGwpcmV0dXJuIG51bGw7bGV0IGU9bnVsbDtyZXR1cm4gQS5idWZmZXIhPT12b2lkIDA/ZT1BLmJ1ZmZlcjpBLmJ5dGVMZW5ndGghPT12b2lkIDAmJihlPUEpLElyJiZlIGluc3RhbmNlb2YgU2hhcmVkQXJyYXlCdWZmZXI/bnVsbDp0P2U6ZS5zbGljZSgwKX12YXIgdWU9cnI7ZnVuY3Rpb24gZ3IoQSl7cmV0dXJuW0EuZGF0YSxBLmRpcmVjdGlvbl19dmFyIERlPWdyO2Z1bmN0aW9uIGlyKEEpe3JldHVybltBLnBvaW50cyxBLnBvaW50RGF0YSxBLmNlbGxzLEEuY2VsbERhdGFdfXZhciBoZT1pcjtmdW5jdGlvbiBucihBKXtyZXR1cm5bQS5wb2ludHMsQS52ZXJ0aWNlcyxBLmxpbmVzLEEucG9seWdvbnMsQS50cmlhbmdsZVN0cmlwcyxBLnBvaW50RGF0YSxBLmNlbGxEYXRhXX12YXIgZGU9bnI7YXN5bmMgZnVuY3Rpb24gc3IoQSx0LGUsSSl7bGV0IHI9bGUoQSx0LGUsSSksbz1bXTtyZXR1cm4gci5vdXRwdXRzLmZvckVhY2goZnVuY3Rpb24oZyl7aWYoZy50eXBlPT09aC5CaW5hcnlTdHJlYW18fGcudHlwZT09PWguQmluYXJ5RmlsZSl7bGV0IEM9Zy5kYXRhO28ucHVzaChDKX1lbHNlIGlmKGcudHlwZT09PWguSW1hZ2Upe2xldCBDPWcuZGF0YTtvLnB1c2goLi4uRGUoQykpfWVsc2UgaWYoZy50eXBlPT09aC5NZXNoKXtsZXQgQz1nLmRhdGE7by5wdXNoKC4uLmhlKEMpKX1lbHNlIGlmKGcudHlwZT09PWguUG9seURhdGEpe2xldCBDPWcuZGF0YTtvLnB1c2goLi4uZGUoQykpfX0pLE1BKHIsdWUobywhMCkpfXZhciB5ZT1zcjt2YXIgQ3I9e3J1blBpcGVsaW5lOmFzeW5jIGZ1bmN0aW9uKEEsdCxlLEkscixvKXtsZXQgZz1hd2FpdCBhZShBLHQsbyk7cmV0dXJuIGF3YWl0IHllKGcsZSxJLHIpfX07ZkEoQ3IpOyUwQS8qISBCdW5kbGVkIGxpY2Vuc2UgaW5mb3JtYXRpb246JTBBJTBBY29tbGluay9kaXN0L2VzbS9jb21saW5rLm1qczolMEEgICgqKiUwQSAgICogQGxpY2Vuc2UlMEEgICAqIENvcHlyaWdodCAyMDE5IEdvb2dsZSBMTEMlMEEgICAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wJTBBICAgKiklMEEqLyUwQSc7SnIocXIpO2V4cG9ydHthQSBhcyBiaW9SYWRSZWFkSW1hZ2UsbkEgYXMgYmlvUmFkV3JpdGVJbWFnZSxfdCBhcyBibXBSZWFkSW1hZ2UsenQgYXMgYm1wV3JpdGVJbWFnZSxfIGFzIGV4dGVuc2lvblRvSW1hZ2VJbyxFQSBhcyBmZGZSZWFkSW1hZ2UsemEgYXMgZmRmV3JpdGVJbWFnZSxjQSBhcyBnZGNtUmVhZEltYWdlLGRBIGFzIGdkY21Xcml0ZUltYWdlLHBBIGFzIGdlNFJlYWRJbWFnZSxtQSBhcyBnZTRXcml0ZUltYWdlLHVBIGFzIGdlNVJlYWRJbWFnZSxmQSBhcyBnZTVXcml0ZUltYWdlLGxBIGFzIGdlQWR3UmVhZEltYWdlLElBIGFzIGdlQWR3V3JpdGVJbWFnZSxRIGFzIGdldERlZmF1bHRXZWJXb3JrZXIsQyBhcyBnZXRQaXBlbGluZVdvcmtlclVybCx5IGFzIGdldFBpcGVsaW5lc0Jhc2VVcmwsc0EgYXMgZ2lwbFJlYWRJbWFnZSxnQSBhcyBnaXBsV3JpdGVJbWFnZSxWdCBhcyBoZGY1UmVhZEltYWdlLFp0IGFzIGhkZjVXcml0ZUltYWdlLEh0IGFzIGpwZWdSZWFkSW1hZ2UscXQgYXMganBlZ1dyaXRlSW1hZ2UsQUEgYXMgbHNtUmVhZEltYWdlLHJBIGFzIGxzbVdyaXRlSW1hZ2UseHQgYXMgbWV0YVJlYWRJbWFnZSxUdCBhcyBtZXRhV3JpdGVJbWFnZSxpQSBhcyBtZ2hSZWFkSW1hZ2Usb0EgYXMgbWdoV3JpdGVJbWFnZSxYdCBhcyBtaW5jUmVhZEltYWdlLCR0IGFzIG1pbmNXcml0ZUltYWdlLGVBIGFzIG1yY1JlYWRJbWFnZSx0QSBhcyBtcmNXcml0ZUltYWdlLEp0IGFzIG5pZnRpUmVhZEltYWdlLE10IGFzIG5pZnRpV3JpdGVJbWFnZSxZdCBhcyBucnJkUmVhZEltYWdlLEt0IGFzIG5ycmRXcml0ZUltYWdlLE90IGFzIHBuZ1JlYWRJbWFnZSxQdCBhcyBwbmdXcml0ZUltYWdlLFJBIGFzIHJlYWRJbWFnZSxLYSBhcyByZWFkSW1hZ2VGaWxlU2VyaWVzLF9vIGFzIHJlYWRJbWFnZUh0dHAsQkEgYXMgc2NhbmNvUmVhZEltYWdlLENBIGFzIHNjYW5jb1dyaXRlSW1hZ2UsdHAgYXMgc2V0RGVmYXVsdFdlYldvcmtlcixKciBhcyBzZXRQaXBlbGluZVdvcmtlclVybCxfSSBhcyBzZXRQaXBlbGluZXNCYXNlVXJsLEd0IGFzIHRpZmZSZWFkSW1hZ2UsTHQgYXMgdGlmZldyaXRlSW1hZ2UsdnQgYXMgdnRrUmVhZEltYWdlLGp0IGFzIHZ0a1dyaXRlSW1hZ2UseUEgYXMgd2FzbVJlYWRJbWFnZSxRQSBhcyB3YXNtV3JpdGVJbWFnZSxoQSBhcyB3YXNtWnN0ZFJlYWRJbWFnZSx3QSBhcyB3YXNtWnN0ZFdyaXRlSW1hZ2UsamEgYXMgd3JpdGVJbWFnZX07Ci8qISBCdW5kbGVkIGxpY2Vuc2UgaW5mb3JtYXRpb246Cgpjb21saW5rL2Rpc3QvZXNtL2NvbWxpbmsubWpzOgogICgqKgogICAqIEBsaWNlbnNlCiAgICogQ29weXJpZ2h0IDIwMTkgR29vZ2xlIExMQwogICAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wCiAgICopCiovCg==""" +default_js_module = """data:text/javascript;base64,dmFyIFlyPU9iamVjdC5kZWZpbmVQcm9wZXJ0eTt2YXIgS3I9KGUsdCk9Pntmb3IodmFyIEEgaW4gdClZcihlLEEse2dldDp0W0FdLGVudW1lcmFibGU6ITB9KX07dmFyIHZyPW5ldyBNYXAoW1siYm1wIiwiYm1wIl0sWyJkY20iLCJnZGNtIl0sWyJnaXBsIiwiZ2lwbCJdLFsiZ2lwbC5neiIsImdpcGwiXSxbImhkZjUiLCJoZGY1Il0sWyJqcGciLCJqcGVnIl0sWyJqcGVnIiwianBlZyJdLFsiaXdpIiwid2FzbSJdLFsiaXdpLmNib3IiLCJ3YXNtIl0sWyJpd2kuY2Jvci56c3QiLCJ3YXNtWnN0ZCJdLFsibHNtIiwibHNtIl0sWyJtbmMiLCJtbmMiXSxbIm1uYy5neiIsIm1uYyJdLFsibW5jMiIsIm1uYyJdLFsibWdoIiwibWdoIl0sWyJtZ3oiLCJtZ2giXSxbIm1naC5neiIsIm1naCJdLFsibWhhIiwibWV0YSJdLFsibWhkIiwibWV0YSJdLFsibXJjIiwibXJjIl0sWyJuaWEiLCJuaWZ0aSJdLFsibmlpIiwibmlmdGkiXSxbIm5paS5neiIsIm5pZnRpIl0sWyJoZHIiLCJuaWZ0aSJdLFsibnJyZCIsIm5ycmQiXSxbIm5oZHIiLCJucnJkIl0sWyJwbmciLCJwbmciXSxbInBpYyIsImJpb1JhZCJdLFsidGlmIiwidGlmZiJdLFsidGlmZiIsInRpZmYiXSxbInZ0ayIsInZ0ayJdLFsiaXNxIiwic2NhbmNvIl0sWyJhaW0iLCJzY2FuY28iXSxbImZkZiIsImZkZiJdXSksXz12cjt2YXIganI9e0ludDg6ImludDgiLFVJbnQ4OiJ1aW50OCIsSW50MTY6ImludDE2IixVSW50MTY6InVpbnQxNiIsSW50MzI6ImludDMyIixVSW50MzI6InVpbnQzMiIsSW50NjQ6ImludDY0IixVSW50NjQ6InVpbnQ2NCIsU2l6ZVZhbHVlVHlwZToidWludDY0IixJZGVudGlmaWVyVHlwZToidWludDY0IixJbmRleFZhbHVlVHlwZToiaW50NjQiLE9mZnNldFZhbHVlVHlwZToiaW50NjQifSx3PWpyO3ZhciBfcj17RmxvYXQzMjoiZmxvYXQzMiIsRmxvYXQ2NDoiZmxvYXQ2NCIsU3BhY2VQcmVjaXNpb25UeXBlOiJmbG9hdDY0In0sTj1fcjtmdW5jdGlvbiB6cihlLHQpe2xldCBBPW51bGw7c3dpdGNoKGUpe2Nhc2Ugdy5VSW50ODp7QT1uZXcgVWludDhBcnJheSh0KTticmVha31jYXNlIHcuSW50ODp7QT1uZXcgSW50OEFycmF5KHQpO2JyZWFrfWNhc2Ugdy5VSW50MTY6e0E9bmV3IFVpbnQxNkFycmF5KHQpO2JyZWFrfWNhc2Ugdy5JbnQxNjp7QT1uZXcgSW50MTZBcnJheSh0KTticmVha31jYXNlIHcuVUludDMyOntBPW5ldyBVaW50MzJBcnJheSh0KTticmVha31jYXNlIHcuSW50MzI6e0E9bmV3IEludDMyQXJyYXkodCk7YnJlYWt9Y2FzZSB3LlVJbnQ2NDp7dHlwZW9mIGdsb2JhbFRoaXMuQmlnVWludDY0QXJyYXk9PSJmdW5jdGlvbiI/QT1uZXcgQmlnVWludDY0QXJyYXkodCk6QT1uZXcgVWludDhBcnJheSh0KTticmVha31jYXNlIHcuSW50NjQ6e3R5cGVvZiBnbG9iYWxUaGlzLkJpZ0ludDY0QXJyYXk9PSJmdW5jdGlvbiI/QT1uZXcgQmlnSW50NjRBcnJheSh0KTpBPW5ldyBVaW50OEFycmF5KHQpO2JyZWFrfWNhc2UgTi5GbG9hdDMyOntBPW5ldyBGbG9hdDMyQXJyYXkodCk7YnJlYWt9Y2FzZSBOLkZsb2F0NjQ6e0E9bmV3IEZsb2F0NjRBcnJheSh0KTticmVha31jYXNlIm51bGwiOntBPW51bGw7YnJlYWt9Y2FzZSBudWxsOntBPW51bGw7YnJlYWt9ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoIlR5cGUgaXMgbm90IHN1cHBvcnRlZCBhcyBhIFR5cGVkQXJyYXkiKX1yZXR1cm4gQX12YXIgTz16cjt2YXIgVnI9e1Vua25vd246IlVua25vd24iLFNjYWxhcjoiU2NhbGFyIixSR0I6IlJHQiIsUkdCQToiUkdCQSIsT2Zmc2V0OiJPZmZzZXQiLFZlY3RvcjoiVmVjdG9yIixQb2ludDoiUG9pbnQiLENvdmFyaWFudFZlY3RvcjoiQ292YXJpYW50VmVjdG9yIixTeW1tZXRyaWNTZWNvbmRSYW5rVGVuc29yOiJTeW1tZXRyaWNTZWNvbmRSYW5rVGVuc29yIixEaWZmdXNpb25UZW5zb3IzRDoiRGlmZnVzaW9uVGVuc29yM0QiLENvbXBsZXg6IkNvbXBsZXgiLEZpeGVkQXJyYXk6IkZpeGVkQXJyYXkiLEFycmF5OiJBcnJheSIsTWF0cml4OiJNYXRyaXgiLFZhcmlhYmxlTGVuZ3RoVmVjdG9yOiJWYXJpYWJsZUxlbmd0aFZlY3RvciIsVmFyaWFibGVTaXplTWF0cml4OiJWYXJpYWJsZVNpemVNYXRyaXgifSxRZT1Wcjt2YXIgX2U9Y2xhc3N7ZGltZW5zaW9uO2NvbXBvbmVudFR5cGU7cGl4ZWxUeXBlO2NvbXBvbmVudHM7Y29uc3RydWN0b3IodD0yLEE9dy5VSW50OCxyPVFlLlNjYWxhcixvPTEpe3RoaXMuZGltZW5zaW9uPXQsdGhpcy5jb21wb25lbnRUeXBlPUEsdGhpcy5waXhlbFR5cGU9cix0aGlzLmNvbXBvbmVudHM9b319LGJBPV9lO2Z1bmN0aW9uIFpyKGUsdCxBLHIsbyl7ZVtyK0EqdF09b312YXIgREE9WnI7dmFyIHplPWNsYXNze2ltYWdlVHlwZTtuYW1lPSJJbWFnZSI7b3JpZ2luO3NwYWNpbmc7ZGlyZWN0aW9uO3NpemU7bWV0YWRhdGE7ZGF0YTtjb25zdHJ1Y3Rvcih0PW5ldyBiQSl7dGhpcy5pbWFnZVR5cGU9dDtsZXQgQT10LmRpbWVuc2lvbjt0aGlzLm9yaWdpbj1uZXcgQXJyYXkoQSksdGhpcy5vcmlnaW4uZmlsbCgwKSx0aGlzLnNwYWNpbmc9bmV3IEFycmF5KEEpLHRoaXMuc3BhY2luZy5maWxsKDEpLHRoaXMuZGlyZWN0aW9uPW5ldyBGbG9hdDY0QXJyYXkoQSpBKSx0aGlzLmRpcmVjdGlvbi5maWxsKDApO2ZvcihsZXQgcj0wO3I8QTtyKyspREEodGhpcy5kaXJlY3Rpb24sQSxyLHIsMSk7dGhpcy5zaXplPW5ldyBBcnJheShBKSx0aGlzLnNpemUuZmlsbCgwKSx0aGlzLm1ldGFkYXRhPW5ldyBNYXAsdGhpcy5kYXRhPW51bGx9fSxaPXplO2Z1bmN0aW9uIFhyKGUpe2xldCB0PW5ldyBaKGUuaW1hZ2VUeXBlKTtpZih0Lm5hbWU9ZS5uYW1lLHQub3JpZ2luPUFycmF5LmZyb20oZS5vcmlnaW4pLHQuc3BhY2luZz1BcnJheS5mcm9tKGUuc3BhY2luZyksdC5kaXJlY3Rpb249ZS5kaXJlY3Rpb24uc2xpY2UoKSx0LnNpemU9QXJyYXkuZnJvbShlLnNpemUpLGUuZGF0YSE9PW51bGwpe2xldCBBPWUuZGF0YS5jb25zdHJ1Y3Rvcjt0LmRhdGE9bmV3IEEoZS5kYXRhLmxlbmd0aCksdC5kYXRhIT1udWxsJiZ0LmRhdGEuc2V0KGUuZGF0YSwwKX1yZXR1cm4gdH12YXIgVmU9WHI7ZnVuY3Rpb24gJHIoZSl7aWYoZS5sZW5ndGg8MSl0aHJvdyBFcnJvcigiQXQgbGVhc3Qgb25lIGltYWdlcyBpcyByZXF1aXJlZC4iKTtsZXQgdD1lWzBdO2lmKHQuZGF0YT09PW51bGwpdGhyb3cgRXJyb3IoIkltYWdlIGRhdGEgaXMgbnVsbC4iKTtsZXQgQT1uZXcgWih0LmltYWdlVHlwZSk7QS5vcmlnaW49QXJyYXkuZnJvbSh0Lm9yaWdpbiksQS5zcGFjaW5nPUFycmF5LmZyb20odC5zcGFjaW5nKTtsZXQgcj1BLmltYWdlVHlwZS5kaW1lbnNpb247QS5kaXJlY3Rpb249dC5kaXJlY3Rpb24uc2xpY2UoKTtsZXQgbz1yLTE7QS5zaXplPUFycmF5LmZyb20odC5zaXplKTtsZXQgaT1lLnJlZHVjZSgoYSxnKT0+YStnLnNpemVbb10sMCk7QS5zaXplW29dPWk7bGV0IG49QS5zaXplLnJlZHVjZSgoYSxnKT0+YSpnLDEpKkEuaW1hZ2VUeXBlLmNvbXBvbmVudHMsbT10LmRhdGEuY29uc3RydWN0b3I7QS5kYXRhPW5ldyBtKG4pO2xldCBmPUEuaW1hZ2VUeXBlLmNvbXBvbmVudHM7Zm9yKGxldCBhPTA7YTxBLnNpemUubGVuZ3RoLTE7YSsrKWYqPUEuc2l6ZVthXTtsZXQgbD0wO2lmKEEuZGF0YSE9bnVsbClmb3IobGV0IGE9MDthPGUubGVuZ3RoO2ErKylBLmRhdGEuc2V0KGVbYV0uZGF0YSxmKmwpLGwrPWVbYV0uc2l6ZVtvXTtlbHNlIHRocm93IEVycm9yKCJDb3VsZCBub3QgY3JlYXRlIHJlc3VsdCBpbWFnZSBkYXRhLiIpO3JldHVybiBBfXZhciBaZT0kcjtmdW5jdGlvbiBlaShlKXtsZXQgdD1lLnNsaWNlKChlLmxhc3RJbmRleE9mKCIuIiktMT4+PjApKzIpO2lmKHQudG9Mb3dlckNhc2UoKT09PSJneiIpe2xldCBBPWUuc2xpY2UoMCwtMykubGFzdEluZGV4T2YoIi4iKTt0PWUuc2xpY2UoKEEtMT4+PjApKzIpfWVsc2UgaWYodC50b0xvd2VyQ2FzZSgpPT09ImNib3IiKXtsZXQgQT1lLnNsaWNlKDAsLTUpLmxhc3RJbmRleE9mKCIuIik7dD1lLnNsaWNlKChBLTE+Pj4wKSsyKX1lbHNlIGlmKHQudG9Mb3dlckNhc2UoKT09PSJ6c3QiKXtsZXQgQT1lLnNsaWNlKDAsLTEwKS5sYXN0SW5kZXhPZigiLiIpO3Q9ZS5zbGljZSgoQS0xPj4+MCkrMil9ZWxzZSBpZih0LnRvTG93ZXJDYXNlKCk9PT0iemlwIil7bGV0IEE9ZS5zbGljZSgwLC00KS5sYXN0SW5kZXhPZigiLiIpO3Q9ZS5zbGljZSgoQS0xPj4+MCkrMil9cmV0dXJuIHR9dmFyIHNlPWVpO2Z1bmN0aW9uIHRpKGUsdCl7bGV0IEE9ey4uLmUuaW1hZ2VUeXBlfTtpZih0eXBlb2YgdDwidSImJnR5cGVvZiB0LnBpeGVsVHlwZTwidSImJihBLnBpeGVsVHlwZT10LnBpeGVsVHlwZSx0LnBpeGVsVHlwZT09PVFlLlNjYWxhciYmQS5jb21wb25lbnRzIT09MSkpdGhyb3cgbmV3IEVycm9yKCJDYW5ub3QgY2FzdCBtdWx0aS1jb21wb25lbnQgaW1hZ2UgdG8gYSBzY2FsYXIgaW1hZ2UiKTt0eXBlb2YgdDwidSImJnR5cGVvZiB0LmNvbXBvbmVudFR5cGU8InUiJiZ0LmNvbXBvbmVudFR5cGUhPT1lLmltYWdlVHlwZS5jb21wb25lbnRUeXBlJiYoQS5jb21wb25lbnRUeXBlPXQuY29tcG9uZW50VHlwZSk7bGV0IHI9bmV3IFooQSk7aWYoci5uYW1lPWUubmFtZSxyLm9yaWdpbj1BcnJheS5mcm9tKGUub3JpZ2luKSxyLnNwYWNpbmc9QXJyYXkuZnJvbShlLnNwYWNpbmcpLHIuZGlyZWN0aW9uPWUuZGlyZWN0aW9uLnNsaWNlKCksci5zaXplPUFycmF5LmZyb20oZS5zaXplKSxyLm1ldGFkYXRhPW5ldyBNYXAoSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShBcnJheS5mcm9tKGUubWV0YWRhdGEpKSkpLGUuZGF0YSE9PW51bGwpaWYodHlwZW9mIHQ8InUiJiZ0eXBlb2YgdC5jb21wb25lbnRUeXBlPCJ1IiYmdC5jb21wb25lbnRUeXBlIT09ZS5pbWFnZVR5cGUuY29tcG9uZW50VHlwZSlzd2l0Y2goZS5pbWFnZVR5cGUuY29tcG9uZW50VHlwZSl7Y2FzZSB3LlVJbnQ4OmNhc2Ugdy5JbnQ4OmNhc2Ugdy5VSW50MTY6Y2FzZSB3LkludDE2OmNhc2Ugdy5VSW50MzI6Y2FzZSB3LkludDMyOmNhc2UgTi5GbG9hdDMyOmNhc2UgTi5GbG9hdDY0OnN3aXRjaChyLmltYWdlVHlwZS5jb21wb25lbnRUeXBlKXtjYXNlIHcuVUludDg6ci5kYXRhPW5ldyBVaW50OEFycmF5KGUuZGF0YSk7YnJlYWs7Y2FzZSB3LkludDg6ci5kYXRhPW5ldyBJbnQ4QXJyYXkoZS5kYXRhKTticmVhaztjYXNlIHcuVUludDE2OnIuZGF0YT1uZXcgVWludDE2QXJyYXkoZS5kYXRhKTticmVhaztjYXNlIHcuSW50MTY6ci5kYXRhPW5ldyBJbnQxNkFycmF5KGUuZGF0YSk7YnJlYWs7Y2FzZSB3LlVJbnQzMjpyLmRhdGE9bmV3IFVpbnQzMkFycmF5KGUuZGF0YSk7YnJlYWs7Y2FzZSB3LkludDMyOnIuZGF0YT1uZXcgSW50MzJBcnJheShlLmRhdGEpO2JyZWFrO2Nhc2UgTi5GbG9hdDMyOnIuZGF0YT1uZXcgRmxvYXQzMkFycmF5KGUuZGF0YSk7YnJlYWs7Y2FzZSBOLkZsb2F0NjQ6ci5kYXRhPW5ldyBGbG9hdDY0QXJyYXkoZS5kYXRhKTticmVhaztjYXNlIHcuVUludDY0OnIuZGF0YT1uZXcgQmlnVWludDY0QXJyYXkoZS5kYXRhLmxlbmd0aCk7Zm9yKGxldCBvPTA7bzxyLmRhdGEubGVuZ3RoO28rKylyLmRhdGFbb109QmlnSW50LmFzSW50Tig2NCxCaWdJbnQoZS5kYXRhW29dKSk7YnJlYWs7Y2FzZSB3LkludDY0OnIuZGF0YT1uZXcgQmlnSW50NjRBcnJheShlLmRhdGEubGVuZ3RoKTtmb3IobGV0IG89MDtvPHIuZGF0YS5sZW5ndGg7bysrKXIuZGF0YVtvXT1CaWdJbnQuYXNVaW50Tig2NCxCaWdJbnQoZS5kYXRhW29dKSk7YnJlYWt9YnJlYWs7Y2FzZSB3LlVJbnQ2NDpjYXNlIHcuSW50NjQ6c3dpdGNoKHIuaW1hZ2VUeXBlLmNvbXBvbmVudFR5cGUpe2Nhc2Ugdy5VSW50ODpyLmRhdGE9bmV3IFVpbnQ4QXJyYXkoZS5kYXRhLmxlbmd0aCk7Zm9yKGxldCBvPTA7bzxyLmRhdGEubGVuZ3RoO28rKylyLmRhdGFbb109TnVtYmVyKGUuZGF0YVtvXSk7YnJlYWs7Y2FzZSB3LkludDg6ci5kYXRhPW5ldyBJbnQ4QXJyYXkoZS5kYXRhLmxlbmd0aCk7Zm9yKGxldCBvPTA7bzxyLmRhdGEubGVuZ3RoO28rKylyLmRhdGFbb109TnVtYmVyKGUuZGF0YVtvXSk7YnJlYWs7Y2FzZSB3LlVJbnQxNjpyLmRhdGE9bmV3IFVpbnQxNkFycmF5KGUuZGF0YS5sZW5ndGgpO2ZvcihsZXQgbz0wO288ci5kYXRhLmxlbmd0aDtvKyspci5kYXRhW29dPU51bWJlcihlLmRhdGFbb10pO2JyZWFrO2Nhc2Ugdy5JbnQxNjpyLmRhdGE9bmV3IEludDE2QXJyYXkoZS5kYXRhLmxlbmd0aCk7Zm9yKGxldCBvPTA7bzxyLmRhdGEubGVuZ3RoO28rKylyLmRhdGFbb109TnVtYmVyKGUuZGF0YVtvXSk7YnJlYWs7Y2FzZSB3LlVJbnQzMjpyLmRhdGE9bmV3IFVpbnQzMkFycmF5KGUuZGF0YS5sZW5ndGgpO2ZvcihsZXQgbz0wO288ci5kYXRhLmxlbmd0aDtvKyspci5kYXRhW29dPU51bWJlcihlLmRhdGFbb10pO2JyZWFrO2Nhc2Ugdy5JbnQzMjpyLmRhdGE9bmV3IEludDMyQXJyYXkoZS5kYXRhLmxlbmd0aCk7Zm9yKGxldCBvPTA7bzxyLmRhdGEubGVuZ3RoO28rKylyLmRhdGFbb109TnVtYmVyKGUuZGF0YVtvXSk7YnJlYWs7Y2FzZSBOLkZsb2F0MzI6ci5kYXRhPW5ldyBGbG9hdDMyQXJyYXkoZS5kYXRhLmxlbmd0aCk7Zm9yKGxldCBvPTA7bzxyLmRhdGEubGVuZ3RoO28rKylyLmRhdGFbb109TnVtYmVyKGUuZGF0YVtvXSk7YnJlYWs7Y2FzZSBOLkZsb2F0NjQ6ci5kYXRhPW5ldyBGbG9hdDY0QXJyYXkoZS5kYXRhLmxlbmd0aCk7Zm9yKGxldCBvPTA7bzxyLmRhdGEubGVuZ3RoO28rKylyLmRhdGFbb109TnVtYmVyKGUuZGF0YVtvXSk7YnJlYWs7Y2FzZSB3LlVJbnQ2NDpyLmRhdGE9bmV3IEJpZ1VpbnQ2NEFycmF5KGUuZGF0YSk7YnJlYWs7Y2FzZSB3LkludDY0OnIuZGF0YT1uZXcgQmlnSW50NjRBcnJheShlLmRhdGEpO2JyZWFrfWJyZWFrfWVsc2V7bGV0IG89ZS5kYXRhLmNvbnN0cnVjdG9yO3IuZGF0YT1uZXcgbyhlLmRhdGEubGVuZ3RoKSxyLmRhdGEhPW51bGwmJnIuZGF0YS5zZXQoZS5kYXRhLDApfXJldHVybiByfXZhciBxPXRpO3ZhciBYZT1jbGFzc3tmY247d29ya2VyUXVldWU7cnVuSW5mbztjb25zdHJ1Y3Rvcih0LEEpe3RoaXMuZmNuPUEsdGhpcy53b3JrZXJRdWV1ZT1uZXcgQXJyYXkodCksdGhpcy53b3JrZXJRdWV1ZS5maWxsKG51bGwpLHRoaXMucnVuSW5mbz1bXX1ydW5UYXNrcyh0LEE9bnVsbCl7bGV0IHI9e3Rhc2tRdWV1ZTpbXSxyZXN1bHRzOltdLGFkZGluZ1Rhc2tzOiExLHBvc3Rwb25lZDohMSxydW5uaW5nV29ya2VyczowLGluZGV4OjAsY29tcGxldGVkVGFza3M6MCxwcm9ncmVzc0NhbGxiYWNrOkEsY2FuY2VsZWQ6ITF9O3JldHVybiB0aGlzLnJ1bkluZm8ucHVzaChyKSxyLmluZGV4PXRoaXMucnVuSW5mby5sZW5ndGgtMSx7cHJvbWlzZTpuZXcgUHJvbWlzZSgobyxpKT0+e3IucmVzb2x2ZT1vLHIucmVqZWN0PWksci5yZXN1bHRzPW5ldyBBcnJheSh0Lmxlbmd0aCksci5jb21wbGV0ZWRUYXNrcz0wLHIuYWRkaW5nVGFza3M9ITAsdC5mb3JFYWNoKChuLG0pPT57dGhpcy5hZGRUYXNrKHIuaW5kZXgsbSxuKX0pLHIuYWRkaW5nVGFza3M9ITF9KSxydW5JZDpyLmluZGV4fX10ZXJtaW5hdGVXb3JrZXJzKCl7Zm9yKGxldCB0PTA7dDx0aGlzLndvcmtlclF1ZXVlLmxlbmd0aDt0Kyspe2xldCBBPXRoaXMud29ya2VyUXVldWVbdF07QT8udGVybWluYXRlKCksdGhpcy53b3JrZXJRdWV1ZVt0XT1udWxsfX1jYW5jZWwodCl7bGV0IEE9dGhpcy5ydW5JbmZvW3RdO0EhPW51bGwmJihBLmNhbmNlbGVkPSEwKX1hZGRUYXNrKHQsQSxyKXtsZXQgbz10aGlzLnJ1bkluZm9bdF07aWYobz8uY2FuY2VsZWQ9PT0hMCl7by5yZWplY3QoIlJlbWFpbmluZyB0YXNrcyBjYW5jZWxlZCIpLHRoaXMuY2xlYXJUYXNrKG8uaW5kZXgpO3JldHVybn1pZih0aGlzLndvcmtlclF1ZXVlLmxlbmd0aD4wKXtsZXQgaT10aGlzLndvcmtlclF1ZXVlLnBvcCgpO28ucnVubmluZ1dvcmtlcnMrKyxyW3IubGVuZ3RoLTFdLndlYldvcmtlcj1pLHRoaXMuZmNuKC4uLnIpLnRoZW4oKHt3ZWJXb3JrZXI6biwuLi5tfSk9PntpZih0aGlzLndvcmtlclF1ZXVlLnB1c2gobiksdGhpcy5ydW5JbmZvW3RdIT09bnVsbCl7aWYoby5ydW5uaW5nV29ya2Vycy0tLG8ucmVzdWx0c1tBXT1tLG8uY29tcGxldGVkVGFza3MrKyxvLnByb2dyZXNzQ2FsbGJhY2shPW51bGwmJm8ucHJvZ3Jlc3NDYWxsYmFjayhvLmNvbXBsZXRlZFRhc2tzLG8ucmVzdWx0cy5sZW5ndGgpLG8udGFza1F1ZXVlLmxlbmd0aD4wKXtsZXQgZj1vLnRhc2tRdWV1ZS5zaGlmdCgpO3RoaXMuYWRkVGFzayh0LGZbMF0sZlsxXSl9ZWxzZSBpZighby5hZGRpbmdUYXNrcyYmby5ydW5uaW5nV29ya2Vycz09PTApe2xldCBmPW8ucmVzdWx0cztvLnJlc29sdmUoZiksdGhpcy5jbGVhclRhc2soby5pbmRleCl9fX0pLmNhdGNoKG49PntvLnJlamVjdChuKSx0aGlzLmNsZWFyVGFzayhvLmluZGV4KX0pfWVsc2Ugby5ydW5uaW5nV29ya2VycyE9PTB8fG8ucG9zdHBvbmVkP28udGFza1F1ZXVlLnB1c2goW0Escl0pOihvLnBvc3Rwb25lZD0hMCxzZXRUaW1lb3V0KCgpPT57by5wb3N0cG9uZWQ9ITEsdGhpcy5hZGRUYXNrKG8uaW5kZXgsQSxyKX0sNTApKX1jbGVhclRhc2sodCl7dGhpcy5ydW5JbmZvW3RdLnJlc3VsdHM9W10sdGhpcy5ydW5JbmZvW3RdLnRhc2tRdWV1ZT1bXSx0aGlzLnJ1bkluZm9bdF0ucHJvZ3Jlc3NDYWxsYmFjaz1udWxsLHRoaXMucnVuSW5mb1t0XS5jYW5jZWxlZD1udWxsLHRoaXMucnVuSW5mb1t0XS5yZWplY3Q9KCk9Pnt9LHRoaXMucnVuSW5mb1t0XS5yZXNvbHZlPSgpPT57fX19LCRlPVhlO3ZhciBBaT17VGV4dEZpbGU6IlRleHRGaWxlIixCaW5hcnlGaWxlOiJCaW5hcnlGaWxlIixUZXh0U3RyZWFtOiJUZXh0U3RyZWFtIixCaW5hcnlTdHJlYW06IkJpbmFyeVN0cmVhbSIsSW1hZ2U6IkltYWdlIixQb2ludFNldDoiUG9pbnRTZXQiLE1lc2g6Ik1lc2giLFBvbHlEYXRhOiJQb2x5RGF0YSIsVHJhbnNmb3JtTGlzdDoiVHJhbnNmb3JtTGlzdCIsSnNvbkNvbXBhdGlibGU6Ikpzb25Db21wYXRpYmxlIn0scD1BaTt2YXIgRkE9U3ltYm9sKCJDb21saW5rLnByb3h5Iikscmk9U3ltYm9sKCJDb21saW5rLmVuZHBvaW50IiksQXQ9U3ltYm9sKCJDb21saW5rLnJlbGVhc2VQcm94eSIpLGV0PVN5bWJvbCgiQ29tbGluay5maW5hbGl6ZXIiKSx3ZT1TeW1ib2woIkNvbWxpbmsudGhyb3duIiksVUE9ZT0+dHlwZW9mIGU9PSJvYmplY3QiJiZlIT09bnVsbHx8dHlwZW9mIGU9PSJmdW5jdGlvbiIsaWk9e2NhbkhhbmRsZTplPT5VQShlKSYmZVtGQV0sc2VyaWFsaXplKGUpe2xldHtwb3J0MTp0LHBvcnQyOkF9PW5ldyBNZXNzYWdlQ2hhbm5lbDtyZXR1cm4gTkEoZSx0KSxbQSxbQV1dfSxkZXNlcmlhbGl6ZShlKXtyZXR1cm4gZS5zdGFydCgpLHJ0KGUpfX0sb2k9e2NhbkhhbmRsZTplPT5VQShlKSYmd2UgaW4gZSxzZXJpYWxpemUoe3ZhbHVlOmV9KXtsZXQgdDtyZXR1cm4gZSBpbnN0YW5jZW9mIEVycm9yP3Q9e2lzRXJyb3I6ITAsdmFsdWU6e21lc3NhZ2U6ZS5tZXNzYWdlLG5hbWU6ZS5uYW1lLHN0YWNrOmUuc3RhY2t9fTp0PXtpc0Vycm9yOiExLHZhbHVlOmV9LFt0LFtdXX0sZGVzZXJpYWxpemUoZSl7dGhyb3cgZS5pc0Vycm9yP09iamVjdC5hc3NpZ24obmV3IEVycm9yKGUudmFsdWUubWVzc2FnZSksZS52YWx1ZSk6ZS52YWx1ZX19LFNBPW5ldyBNYXAoW1sicHJveHkiLGlpXSxbInRocm93IixvaV1dKTtmdW5jdGlvbiBhaShlLHQpe2ZvcihsZXQgQSBvZiBlKWlmKHQ9PT1BfHxBPT09IioifHxBIGluc3RhbmNlb2YgUmVnRXhwJiZBLnRlc3QodCkpcmV0dXJuITA7cmV0dXJuITF9ZnVuY3Rpb24gTkEoZSx0PWdsb2JhbFRoaXMsQT1bIioiXSl7dC5hZGRFdmVudExpc3RlbmVyKCJtZXNzYWdlIixmdW5jdGlvbiByKG8pe2lmKCFvfHwhby5kYXRhKXJldHVybjtpZighYWkoQSxvLm9yaWdpbikpe2NvbnNvbGUud2FybihgSW52YWxpZCBvcmlnaW4gJyR7by5vcmlnaW59JyBmb3IgY29tbGluayBwcm94eWApO3JldHVybn1sZXR7aWQ6aSx0eXBlOm4scGF0aDptfT1PYmplY3QuYXNzaWduKHtwYXRoOltdfSxvLmRhdGEpLGY9KG8uZGF0YS5hcmd1bWVudExpc3R8fFtdKS5tYXAoeiksbDt0cnl7bGV0IGE9bS5zbGljZSgwLC0xKS5yZWR1Y2UoKHUscyk9PnVbc10sZSksZz1tLnJlZHVjZSgodSxzKT0+dVtzXSxlKTtzd2l0Y2gobil7Y2FzZSJHRVQiOmw9ZzticmVhaztjYXNlIlNFVCI6YVttLnNsaWNlKC0xKVswXV09eihvLmRhdGEudmFsdWUpLGw9ITA7YnJlYWs7Y2FzZSJBUFBMWSI6bD1nLmFwcGx5KGEsZik7YnJlYWs7Y2FzZSJDT05TVFJVQ1QiOntsZXQgdT1uZXcgZyguLi5mKTtsPUlpKHUpfWJyZWFrO2Nhc2UiRU5EUE9JTlQiOntsZXR7cG9ydDE6dSxwb3J0MjpzfT1uZXcgTWVzc2FnZUNoYW5uZWw7TkEoZSxzKSxsPWl0KHUsW3VdKX1icmVhaztjYXNlIlJFTEVBU0UiOmw9dm9pZCAwO2JyZWFrO2RlZmF1bHQ6cmV0dXJufX1jYXRjaChhKXtsPXt2YWx1ZTphLFt3ZV06MH19UHJvbWlzZS5yZXNvbHZlKGwpLmNhdGNoKGE9Pih7dmFsdWU6YSxbd2VdOjB9KSkudGhlbihhPT57bGV0W2csdV09YmUoYSk7dC5wb3N0TWVzc2FnZShPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sZykse2lkOml9KSx1KSxuPT09IlJFTEVBU0UiJiYodC5yZW1vdmVFdmVudExpc3RlbmVyKCJtZXNzYWdlIixyKSxPQSh0KSxldCBpbiBlJiZ0eXBlb2YgZVtldF09PSJmdW5jdGlvbiImJmVbZXRdKCkpfSkuY2F0Y2goYT0+e2xldFtnLHVdPWJlKHt2YWx1ZTpuZXcgVHlwZUVycm9yKCJVbnNlcmlhbGl6YWJsZSByZXR1cm4gdmFsdWUiKSxbd2VdOjB9KTt0LnBvc3RNZXNzYWdlKE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSxnKSx7aWQ6aX0pLHUpfSl9KSx0LnN0YXJ0JiZ0LnN0YXJ0KCl9ZnVuY3Rpb24gbmkoZSl7cmV0dXJuIGUuY29uc3RydWN0b3IubmFtZT09PSJNZXNzYWdlUG9ydCJ9ZnVuY3Rpb24gT0EoZSl7bmkoZSkmJmUuY2xvc2UoKX1mdW5jdGlvbiBydChlLHQpe3JldHVybiB0dChlLFtdLHQpfWZ1bmN0aW9uIGhlKGUpe2lmKGUpdGhyb3cgbmV3IEVycm9yKCJQcm94eSBoYXMgYmVlbiByZWxlYXNlZCBhbmQgaXMgbm90IHVzZWFibGUiKX1mdW5jdGlvbiBQQShlKXtyZXR1cm4gWChlLHt0eXBlOiJSRUxFQVNFIn0pLnRoZW4oKCk9PntPQShlKX0pfXZhciBSZT1uZXcgV2Vha01hcCxrZT0iRmluYWxpemF0aW9uUmVnaXN0cnkiaW4gZ2xvYmFsVGhpcyYmbmV3IEZpbmFsaXphdGlvblJlZ2lzdHJ5KGU9PntsZXQgdD0oUmUuZ2V0KGUpfHwwKS0xO1JlLnNldChlLHQpLHQ9PT0wJiZQQShlKX0pO2Z1bmN0aW9uIHNpKGUsdCl7bGV0IEE9KFJlLmdldCh0KXx8MCkrMTtSZS5zZXQodCxBKSxrZSYma2UucmVnaXN0ZXIoZSx0LGUpfWZ1bmN0aW9uIGdpKGUpe2tlJiZrZS51bnJlZ2lzdGVyKGUpfWZ1bmN0aW9uIHR0KGUsdD1bXSxBPWZ1bmN0aW9uKCl7fSl7bGV0IHI9ITEsbz1uZXcgUHJveHkoQSx7Z2V0KGksbil7aWYoaGUociksbj09PUF0KXJldHVybigpPT57Z2kobyksUEEoZSkscj0hMH07aWYobj09PSJ0aGVuIil7aWYodC5sZW5ndGg9PT0wKXJldHVybnt0aGVuOigpPT5vfTtsZXQgbT1YKGUse3R5cGU6IkdFVCIscGF0aDp0Lm1hcChmPT5mLnRvU3RyaW5nKCkpfSkudGhlbih6KTtyZXR1cm4gbS50aGVuLmJpbmQobSl9cmV0dXJuIHR0KGUsWy4uLnQsbl0pfSxzZXQoaSxuLG0pe2hlKHIpO2xldFtmLGxdPWJlKG0pO3JldHVybiBYKGUse3R5cGU6IlNFVCIscGF0aDpbLi4udCxuXS5tYXAoYT0+YS50b1N0cmluZygpKSx2YWx1ZTpmfSxsKS50aGVuKHopfSxhcHBseShpLG4sbSl7aGUocik7bGV0IGY9dFt0Lmxlbmd0aC0xXTtpZihmPT09cmkpcmV0dXJuIFgoZSx7dHlwZToiRU5EUE9JTlQifSkudGhlbih6KTtpZihmPT09ImJpbmQiKXJldHVybiB0dChlLHQuc2xpY2UoMCwtMSkpO2xldFtsLGFdPVdBKG0pO3JldHVybiBYKGUse3R5cGU6IkFQUExZIixwYXRoOnQubWFwKGc9PmcudG9TdHJpbmcoKSksYXJndW1lbnRMaXN0Omx9LGEpLnRoZW4oeil9LGNvbnN0cnVjdChpLG4pe2hlKHIpO2xldFttLGZdPVdBKG4pO3JldHVybiBYKGUse3R5cGU6IkNPTlNUUlVDVCIscGF0aDp0Lm1hcChsPT5sLnRvU3RyaW5nKCkpLGFyZ3VtZW50TGlzdDptfSxmKS50aGVuKHopfX0pO3JldHVybiBzaShvLGUpLG99ZnVuY3Rpb24gbGkoZSl7cmV0dXJuIEFycmF5LnByb3RvdHlwZS5jb25jYXQuYXBwbHkoW10sZSl9ZnVuY3Rpb24gV0EoZSl7bGV0IHQ9ZS5tYXAoYmUpO3JldHVyblt0Lm1hcChBPT5BWzBdKSxsaSh0Lm1hcChBPT5BWzFdKSldfXZhciB4QT1uZXcgV2Vha01hcDtmdW5jdGlvbiBpdChlLHQpe3JldHVybiB4QS5zZXQoZSx0KSxlfWZ1bmN0aW9uIElpKGUpe3JldHVybiBPYmplY3QuYXNzaWduKGUse1tGQV06ITB9KX1mdW5jdGlvbiBiZShlKXtmb3IobGV0W3QsQV1vZiBTQSlpZihBLmNhbkhhbmRsZShlKSl7bGV0W3Isb109QS5zZXJpYWxpemUoZSk7cmV0dXJuW3t0eXBlOiJIQU5ETEVSIixuYW1lOnQsdmFsdWU6cn0sb119cmV0dXJuW3t0eXBlOiJSQVciLHZhbHVlOmV9LHhBLmdldChlKXx8W11dfWZ1bmN0aW9uIHooZSl7c3dpdGNoKGUudHlwZSl7Y2FzZSJIQU5ETEVSIjpyZXR1cm4gU0EuZ2V0KGUubmFtZSkuZGVzZXJpYWxpemUoZS52YWx1ZSk7Y2FzZSJSQVciOnJldHVybiBlLnZhbHVlfX1mdW5jdGlvbiBYKGUsdCxBKXtyZXR1cm4gbmV3IFByb21pc2Uocj0+e2xldCBvPXBpKCk7ZS5hZGRFdmVudExpc3RlbmVyKCJtZXNzYWdlIixmdW5jdGlvbiBpKG4peyFuLmRhdGF8fCFuLmRhdGEuaWR8fG4uZGF0YS5pZCE9PW98fChlLnJlbW92ZUV2ZW50TGlzdGVuZXIoIm1lc3NhZ2UiLGkpLHIobi5kYXRhKSl9KSxlLnN0YXJ0JiZlLnN0YXJ0KCksZS5wb3N0TWVzc2FnZShPYmplY3QuYXNzaWduKHtpZDpvfSx0KSxBKX0pfWZ1bmN0aW9uIHBpKCl7cmV0dXJuIG5ldyBBcnJheSg0KS5maWxsKDApLm1hcCgoKT0+TWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpKk51bWJlci5NQVhfU0FGRV9JTlRFR0VSKS50b1N0cmluZygxNikpLmpvaW4oIi0iKX1mdW5jdGlvbiBnZShlLHQpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiBlLmFwcGx5KHQsYXJndW1lbnRzKX19dmFye3RvU3RyaW5nOm1pfT1PYmplY3QucHJvdG90eXBlLHtnZXRQcm90b3R5cGVPZjpudH09T2JqZWN0LFdlPShlPT50PT57bGV0IEE9bWkuY2FsbCh0KTtyZXR1cm4gZVtBXXx8KGVbQV09QS5zbGljZSg4LC0xKS50b0xvd2VyQ2FzZSgpKX0pKE9iamVjdC5jcmVhdGUobnVsbCkpLFQ9ZT0+KGU9ZS50b0xvd2VyQ2FzZSgpLHQ9PldlKHQpPT09ZSksRmU9ZT0+dD0+dHlwZW9mIHQ9PT1lLHtpc0FycmF5OiR9PUFycmF5LGxlPUZlKCJ1bmRlZmluZWQiKTtmdW5jdGlvbiB1aShlKXtyZXR1cm4gZSE9PW51bGwmJiFsZShlKSYmZS5jb25zdHJ1Y3RvciE9PW51bGwmJiFsZShlLmNvbnN0cnVjdG9yKSYmUChlLmNvbnN0cnVjdG9yLmlzQnVmZmVyKSYmZS5jb25zdHJ1Y3Rvci5pc0J1ZmZlcihlKX12YXIgSkE9VCgiQXJyYXlCdWZmZXIiKTtmdW5jdGlvbiBmaShlKXtsZXQgdDtyZXR1cm4gdHlwZW9mIEFycmF5QnVmZmVyPCJ1IiYmQXJyYXlCdWZmZXIuaXNWaWV3P3Q9QXJyYXlCdWZmZXIuaXNWaWV3KGUpOnQ9ZSYmZS5idWZmZXImJkpBKGUuYnVmZmVyKSx0fXZhciBjaT1GZSgic3RyaW5nIiksUD1GZSgiZnVuY3Rpb24iKSxNQT1GZSgibnVtYmVyIiksVWU9ZT0+ZSE9PW51bGwmJnR5cGVvZiBlPT0ib2JqZWN0IixkaT1lPT5lPT09ITB8fGU9PT0hMSxEZT1lPT57aWYoV2UoZSkhPT0ib2JqZWN0IilyZXR1cm4hMTtsZXQgdD1udChlKTtyZXR1cm4odD09PW51bGx8fHQ9PT1PYmplY3QucHJvdG90eXBlfHxPYmplY3QuZ2V0UHJvdG90eXBlT2YodCk9PT1udWxsKSYmIShTeW1ib2wudG9TdHJpbmdUYWcgaW4gZSkmJiEoU3ltYm9sLml0ZXJhdG9yIGluIGUpfSxCaT1UKCJEYXRlIiksQ2k9VCgiRmlsZSIpLEVpPVQoIkJsb2IiKSx5aT1UKCJGaWxlTGlzdCIpLFFpPWU9PlVlKGUpJiZQKGUucGlwZSksaGk9ZT0+e2xldCB0O3JldHVybiBlJiYodHlwZW9mIEZvcm1EYXRhPT0iZnVuY3Rpb24iJiZlIGluc3RhbmNlb2YgRm9ybURhdGF8fFAoZS5hcHBlbmQpJiYoKHQ9V2UoZSkpPT09ImZvcm1kYXRhInx8dD09PSJvYmplY3QiJiZQKGUudG9TdHJpbmcpJiZlLnRvU3RyaW5nKCk9PT0iW29iamVjdCBGb3JtRGF0YV0iKSl9LHdpPVQoIlVSTFNlYXJjaFBhcmFtcyIpLFtSaSxraSxiaSxEaV09WyJSZWFkYWJsZVN0cmVhbSIsIlJlcXVlc3QiLCJSZXNwb25zZSIsIkhlYWRlcnMiXS5tYXAoVCksV2k9ZT0+ZS50cmltP2UudHJpbSgpOmUucmVwbGFjZSgvXltcc1x1RkVGRlx4QTBdK3xbXHNcdUZFRkZceEEwXSskL2csIiIpO2Z1bmN0aW9uIEllKGUsdCx7YWxsT3duS2V5czpBPSExfT17fSl7aWYoZT09PW51bGx8fHR5cGVvZiBlPiJ1IilyZXR1cm47bGV0IHIsbztpZih0eXBlb2YgZSE9Im9iamVjdCImJihlPVtlXSksJChlKSlmb3Iocj0wLG89ZS5sZW5ndGg7cjxvO3IrKyl0LmNhbGwobnVsbCxlW3JdLHIsZSk7ZWxzZXtsZXQgaT1BP09iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKGUpOk9iamVjdC5rZXlzKGUpLG49aS5sZW5ndGgsbTtmb3Iocj0wO3I8bjtyKyspbT1pW3JdLHQuY2FsbChudWxsLGVbbV0sbSxlKX19ZnVuY3Rpb24gSEEoZSx0KXt0PXQudG9Mb3dlckNhc2UoKTtsZXQgQT1PYmplY3Qua2V5cyhlKSxyPUEubGVuZ3RoLG87Zm9yKDtyLS0gPjA7KWlmKG89QVtyXSx0PT09by50b0xvd2VyQ2FzZSgpKXJldHVybiBvO3JldHVybiBudWxsfXZhciBWPXR5cGVvZiBnbG9iYWxUaGlzPCJ1Ij9nbG9iYWxUaGlzOnR5cGVvZiBzZWxmPCJ1Ij9zZWxmOnR5cGVvZiB3aW5kb3c8InUiP3dpbmRvdzpnbG9iYWwscUE9ZT0+IWxlKGUpJiZlIT09VjtmdW5jdGlvbiBhdCgpe2xldHtjYXNlbGVzczplfT1xQSh0aGlzKSYmdGhpc3x8e30sdD17fSxBPShyLG8pPT57bGV0IGk9ZSYmSEEodCxvKXx8bztEZSh0W2ldKSYmRGUocik/dFtpXT1hdCh0W2ldLHIpOkRlKHIpP3RbaV09YXQoe30scik6JChyKT90W2ldPXIuc2xpY2UoKTp0W2ldPXJ9O2ZvcihsZXQgcj0wLG89YXJndW1lbnRzLmxlbmd0aDtyPG87cisrKWFyZ3VtZW50c1tyXSYmSWUoYXJndW1lbnRzW3JdLEEpO3JldHVybiB0fXZhciBGaT0oZSx0LEEse2FsbE93bktleXM6cn09e30pPT4oSWUodCwobyxpKT0+e0EmJlAobyk/ZVtpXT1nZShvLEEpOmVbaV09b30se2FsbE93bktleXM6cn0pLGUpLFVpPWU9PihlLmNoYXJDb2RlQXQoMCk9PT02NTI3OSYmKGU9ZS5zbGljZSgxKSksZSksU2k9KGUsdCxBLHIpPT57ZS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh0LnByb3RvdHlwZSxyKSxlLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1lLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJzdXBlciIse3ZhbHVlOnQucHJvdG90eXBlfSksQSYmT2JqZWN0LmFzc2lnbihlLnByb3RvdHlwZSxBKX0sTmk9KGUsdCxBLHIpPT57bGV0IG8saSxuLG09e307aWYodD10fHx7fSxlPT1udWxsKXJldHVybiB0O2Rve2ZvcihvPU9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKGUpLGk9by5sZW5ndGg7aS0tID4wOyluPW9baV0sKCFyfHxyKG4sZSx0KSkmJiFtW25dJiYodFtuXT1lW25dLG1bbl09ITApO2U9QSE9PSExJiZudChlKX13aGlsZShlJiYoIUF8fEEoZSx0KSkmJmUhPT1PYmplY3QucHJvdG90eXBlKTtyZXR1cm4gdH0sT2k9KGUsdCxBKT0+e2U9U3RyaW5nKGUpLChBPT09dm9pZCAwfHxBPmUubGVuZ3RoKSYmKEE9ZS5sZW5ndGgpLEEtPXQubGVuZ3RoO2xldCByPWUuaW5kZXhPZih0LEEpO3JldHVybiByIT09LTEmJnI9PT1BfSxQaT1lPT57aWYoIWUpcmV0dXJuIG51bGw7aWYoJChlKSlyZXR1cm4gZTtsZXQgdD1lLmxlbmd0aDtpZighTUEodCkpcmV0dXJuIG51bGw7bGV0IEE9bmV3IEFycmF5KHQpO2Zvcig7dC0tID4wOylBW3RdPWVbdF07cmV0dXJuIEF9LHhpPShlPT50PT5lJiZ0IGluc3RhbmNlb2YgZSkodHlwZW9mIFVpbnQ4QXJyYXk8InUiJiZudChVaW50OEFycmF5KSksVGk9KGUsdCk9PntsZXQgcj0oZSYmZVtTeW1ib2wuaXRlcmF0b3JdKS5jYWxsKGUpLG87Zm9yKDsobz1yLm5leHQoKSkmJiFvLmRvbmU7KXtsZXQgaT1vLnZhbHVlO3QuY2FsbChlLGlbMF0saVsxXSl9fSxHaT0oZSx0KT0+e2xldCBBLHI9W107Zm9yKDsoQT1lLmV4ZWModCkpIT09bnVsbDspci5wdXNoKEEpO3JldHVybiByfSxMaT1UKCJIVE1MRm9ybUVsZW1lbnQiKSxKaT1lPT5lLnRvTG93ZXJDYXNlKCkucmVwbGFjZSgvWy1fXHNdKFthLXpcZF0pKFx3KikvZyxmdW5jdGlvbihBLHIsbyl7cmV0dXJuIHIudG9VcHBlckNhc2UoKStvfSksR0E9KCh7aGFzT3duUHJvcGVydHk6ZX0pPT4odCxBKT0+ZS5jYWxsKHQsQSkpKE9iamVjdC5wcm90b3R5cGUpLE1pPVQoIlJlZ0V4cCIpLFlBPShlLHQpPT57bGV0IEE9T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMoZSkscj17fTtJZShBLChvLGkpPT57bGV0IG47KG49dChvLGksZSkpIT09ITEmJihyW2ldPW58fG8pfSksT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoZSxyKX0sSGk9ZT0+e1lBKGUsKHQsQSk9PntpZihQKGUpJiZbImFyZ3VtZW50cyIsImNhbGxlciIsImNhbGxlZSJdLmluZGV4T2YoQSkhPT0tMSlyZXR1cm4hMTtsZXQgcj1lW0FdO2lmKFAocikpe2lmKHQuZW51bWVyYWJsZT0hMSwid3JpdGFibGUiaW4gdCl7dC53cml0YWJsZT0hMTtyZXR1cm59dC5zZXR8fCh0LnNldD0oKT0+e3Rocm93IEVycm9yKCJDYW4gbm90IHJld3JpdGUgcmVhZC1vbmx5IG1ldGhvZCAnIitBKyInIil9KX19KX0scWk9KGUsdCk9PntsZXQgQT17fSxyPW89PntvLmZvckVhY2goaT0+e0FbaV09ITB9KX07cmV0dXJuICQoZSk/cihlKTpyKFN0cmluZyhlKS5zcGxpdCh0KSksQX0sWWk9KCk9Pnt9LEtpPShlLHQpPT5lIT1udWxsJiZOdW1iZXIuaXNGaW5pdGUoZT0rZSk/ZTp0LG90PSJhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5eiIsTEE9IjAxMjM0NTY3ODkiLEtBPXtESUdJVDpMQSxBTFBIQTpvdCxBTFBIQV9ESUdJVDpvdCtvdC50b1VwcGVyQ2FzZSgpK0xBfSx2aT0oZT0xNix0PUtBLkFMUEhBX0RJR0lUKT0+e2xldCBBPSIiLHtsZW5ndGg6cn09dDtmb3IoO2UtLTspQSs9dFtNYXRoLnJhbmRvbSgpKnJ8MF07cmV0dXJuIEF9O2Z1bmN0aW9uIGppKGUpe3JldHVybiEhKGUmJlAoZS5hcHBlbmQpJiZlW1N5bWJvbC50b1N0cmluZ1RhZ109PT0iRm9ybURhdGEiJiZlW1N5bWJvbC5pdGVyYXRvcl0pfXZhciBfaT1lPT57bGV0IHQ9bmV3IEFycmF5KDEwKSxBPShyLG8pPT57aWYoVWUocikpe2lmKHQuaW5kZXhPZihyKT49MClyZXR1cm47aWYoISgidG9KU09OImluIHIpKXt0W29dPXI7bGV0IGk9JChyKT9bXTp7fTtyZXR1cm4gSWUociwobixtKT0+e2xldCBmPUEobixvKzEpOyFsZShmKSYmKGlbbV09Zil9KSx0W29dPXZvaWQgMCxpfX1yZXR1cm4gcn07cmV0dXJuIEEoZSwwKX0semk9VCgiQXN5bmNGdW5jdGlvbiIpLFZpPWU9PmUmJihVZShlKXx8UChlKSkmJlAoZS50aGVuKSYmUChlLmNhdGNoKSx2QT0oKGUsdCk9PmU/c2V0SW1tZWRpYXRlOnQ/KChBLHIpPT4oVi5hZGRFdmVudExpc3RlbmVyKCJtZXNzYWdlIiwoe3NvdXJjZTpvLGRhdGE6aX0pPT57bz09PVYmJmk9PT1BJiZyLmxlbmd0aCYmci5zaGlmdCgpKCl9LCExKSxvPT57ci5wdXNoKG8pLFYucG9zdE1lc3NhZ2UoQSwiKiIpfSkpKGBheGlvc0Ake01hdGgucmFuZG9tKCl9YCxbXSk6QT0+c2V0VGltZW91dChBKSkodHlwZW9mIHNldEltbWVkaWF0ZT09ImZ1bmN0aW9uIixQKFYucG9zdE1lc3NhZ2UpKSxaaT10eXBlb2YgcXVldWVNaWNyb3Rhc2s8InUiP3F1ZXVlTWljcm90YXNrLmJpbmQoVik6dHlwZW9mIHByb2Nlc3M8InUiJiZwcm9jZXNzLm5leHRUaWNrfHx2QSxjPXtpc0FycmF5OiQsaXNBcnJheUJ1ZmZlcjpKQSxpc0J1ZmZlcjp1aSxpc0Zvcm1EYXRhOmhpLGlzQXJyYXlCdWZmZXJWaWV3OmZpLGlzU3RyaW5nOmNpLGlzTnVtYmVyOk1BLGlzQm9vbGVhbjpkaSxpc09iamVjdDpVZSxpc1BsYWluT2JqZWN0OkRlLGlzUmVhZGFibGVTdHJlYW06UmksaXNSZXF1ZXN0OmtpLGlzUmVzcG9uc2U6YmksaXNIZWFkZXJzOkRpLGlzVW5kZWZpbmVkOmxlLGlzRGF0ZTpCaSxpc0ZpbGU6Q2ksaXNCbG9iOkVpLGlzUmVnRXhwOk1pLGlzRnVuY3Rpb246UCxpc1N0cmVhbTpRaSxpc1VSTFNlYXJjaFBhcmFtczp3aSxpc1R5cGVkQXJyYXk6eGksaXNGaWxlTGlzdDp5aSxmb3JFYWNoOkllLG1lcmdlOmF0LGV4dGVuZDpGaSx0cmltOldpLHN0cmlwQk9NOlVpLGluaGVyaXRzOlNpLHRvRmxhdE9iamVjdDpOaSxraW5kT2Y6V2Usa2luZE9mVGVzdDpULGVuZHNXaXRoOk9pLHRvQXJyYXk6UGksZm9yRWFjaEVudHJ5OlRpLG1hdGNoQWxsOkdpLGlzSFRNTEZvcm06TGksaGFzT3duUHJvcGVydHk6R0EsaGFzT3duUHJvcDpHQSxyZWR1Y2VEZXNjcmlwdG9yczpZQSxmcmVlemVNZXRob2RzOkhpLHRvT2JqZWN0U2V0OnFpLHRvQ2FtZWxDYXNlOkppLG5vb3A6WWksdG9GaW5pdGVOdW1iZXI6S2ksZmluZEtleTpIQSxnbG9iYWw6Vixpc0NvbnRleHREZWZpbmVkOnFBLEFMUEhBQkVUOktBLGdlbmVyYXRlU3RyaW5nOnZpLGlzU3BlY0NvbXBsaWFudEZvcm06amksdG9KU09OT2JqZWN0Ol9pLGlzQXN5bmNGbjp6aSxpc1RoZW5hYmxlOlZpLHNldEltbWVkaWF0ZTp2QSxhc2FwOlppfTtmdW5jdGlvbiBlZShlLHQsQSxyLG8pe0Vycm9yLmNhbGwodGhpcyksRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2U/RXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UodGhpcyx0aGlzLmNvbnN0cnVjdG9yKTp0aGlzLnN0YWNrPW5ldyBFcnJvcigpLnN0YWNrLHRoaXMubWVzc2FnZT1lLHRoaXMubmFtZT0iQXhpb3NFcnJvciIsdCYmKHRoaXMuY29kZT10KSxBJiYodGhpcy5jb25maWc9QSksciYmKHRoaXMucmVxdWVzdD1yKSxvJiYodGhpcy5yZXNwb25zZT1vKX1jLmluaGVyaXRzKGVlLEVycm9yLHt0b0pTT046ZnVuY3Rpb24oKXtyZXR1cm57bWVzc2FnZTp0aGlzLm1lc3NhZ2UsbmFtZTp0aGlzLm5hbWUsZGVzY3JpcHRpb246dGhpcy5kZXNjcmlwdGlvbixudW1iZXI6dGhpcy5udW1iZXIsZmlsZU5hbWU6dGhpcy5maWxlTmFtZSxsaW5lTnVtYmVyOnRoaXMubGluZU51bWJlcixjb2x1bW5OdW1iZXI6dGhpcy5jb2x1bW5OdW1iZXIsc3RhY2s6dGhpcy5zdGFjayxjb25maWc6Yy50b0pTT05PYmplY3QodGhpcy5jb25maWcpLGNvZGU6dGhpcy5jb2RlLHN0YXR1czp0aGlzLnJlc3BvbnNlJiZ0aGlzLnJlc3BvbnNlLnN0YXR1cz90aGlzLnJlc3BvbnNlLnN0YXR1czpudWxsfX19KTt2YXIgakE9ZWUucHJvdG90eXBlLF9BPXt9O1siRVJSX0JBRF9PUFRJT05fVkFMVUUiLCJFUlJfQkFEX09QVElPTiIsIkVDT05OQUJPUlRFRCIsIkVUSU1FRE9VVCIsIkVSUl9ORVRXT1JLIiwiRVJSX0ZSX1RPT19NQU5ZX1JFRElSRUNUUyIsIkVSUl9ERVBSRUNBVEVEIiwiRVJSX0JBRF9SRVNQT05TRSIsIkVSUl9CQURfUkVRVUVTVCIsIkVSUl9DQU5DRUxFRCIsIkVSUl9OT1RfU1VQUE9SVCIsIkVSUl9JTlZBTElEX1VSTCJdLmZvckVhY2goZT0+e19BW2VdPXt2YWx1ZTplfX0pO09iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKGVlLF9BKTtPYmplY3QuZGVmaW5lUHJvcGVydHkoakEsImlzQXhpb3NFcnJvciIse3ZhbHVlOiEwfSk7ZWUuZnJvbT0oZSx0LEEscixvLGkpPT57bGV0IG49T2JqZWN0LmNyZWF0ZShqQSk7cmV0dXJuIGMudG9GbGF0T2JqZWN0KGUsbixmdW5jdGlvbihmKXtyZXR1cm4gZiE9PUVycm9yLnByb3RvdHlwZX0sbT0+bSE9PSJpc0F4aW9zRXJyb3IiKSxlZS5jYWxsKG4sZS5tZXNzYWdlLHQsQSxyLG8pLG4uY2F1c2U9ZSxuLm5hbWU9ZS5uYW1lLGkmJk9iamVjdC5hc3NpZ24obixpKSxufTt2YXIgaD1lZTt2YXIgU2U9bnVsbDtmdW5jdGlvbiBzdChlKXtyZXR1cm4gYy5pc1BsYWluT2JqZWN0KGUpfHxjLmlzQXJyYXkoZSl9ZnVuY3Rpb24gVkEoZSl7cmV0dXJuIGMuZW5kc1dpdGgoZSwiW10iKT9lLnNsaWNlKDAsLTIpOmV9ZnVuY3Rpb24gekEoZSx0LEEpe3JldHVybiBlP2UuY29uY2F0KHQpLm1hcChmdW5jdGlvbihvLGkpe3JldHVybiBvPVZBKG8pLCFBJiZpPyJbIitvKyJdIjpvfSkuam9pbihBPyIuIjoiIik6dH1mdW5jdGlvbiBYaShlKXtyZXR1cm4gYy5pc0FycmF5KGUpJiYhZS5zb21lKHN0KX12YXIgJGk9Yy50b0ZsYXRPYmplY3QoYyx7fSxudWxsLGZ1bmN0aW9uKHQpe3JldHVybi9eaXNbQS1aXS8udGVzdCh0KX0pO2Z1bmN0aW9uIGVvKGUsdCxBKXtpZighYy5pc09iamVjdChlKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJ0YXJnZXQgbXVzdCBiZSBhbiBvYmplY3QiKTt0PXR8fG5ldyhTZXx8Rm9ybURhdGEpLEE9Yy50b0ZsYXRPYmplY3QoQSx7bWV0YVRva2VuczohMCxkb3RzOiExLGluZGV4ZXM6ITF9LCExLGZ1bmN0aW9uKEIsZCl7cmV0dXJuIWMuaXNVbmRlZmluZWQoZFtCXSl9KTtsZXQgcj1BLm1ldGFUb2tlbnMsbz1BLnZpc2l0b3J8fGEsaT1BLmRvdHMsbj1BLmluZGV4ZXMsZj0oQS5CbG9ifHx0eXBlb2YgQmxvYjwidSImJkJsb2IpJiZjLmlzU3BlY0NvbXBsaWFudEZvcm0odCk7aWYoIWMuaXNGdW5jdGlvbihvKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJ2aXNpdG9yIG11c3QgYmUgYSBmdW5jdGlvbiIpO2Z1bmN0aW9uIGwoSSl7aWYoST09PW51bGwpcmV0dXJuIiI7aWYoYy5pc0RhdGUoSSkpcmV0dXJuIEkudG9JU09TdHJpbmcoKTtpZighZiYmYy5pc0Jsb2IoSSkpdGhyb3cgbmV3IGgoIkJsb2IgaXMgbm90IHN1cHBvcnRlZC4gVXNlIGEgQnVmZmVyIGluc3RlYWQuIik7cmV0dXJuIGMuaXNBcnJheUJ1ZmZlcihJKXx8Yy5pc1R5cGVkQXJyYXkoSSk/ZiYmdHlwZW9mIEJsb2I9PSJmdW5jdGlvbiI/bmV3IEJsb2IoW0ldKTpCdWZmZXIuZnJvbShJKTpJfWZ1bmN0aW9uIGEoSSxCLGQpe2xldCBrPUk7aWYoSSYmIWQmJnR5cGVvZiBJPT0ib2JqZWN0Iil7aWYoYy5lbmRzV2l0aChCLCJ7fSIpKUI9cj9COkIuc2xpY2UoMCwtMiksST1KU09OLnN0cmluZ2lmeShJKTtlbHNlIGlmKGMuaXNBcnJheShJKSYmWGkoSSl8fChjLmlzRmlsZUxpc3QoSSl8fGMuZW5kc1dpdGgoQiwiW10iKSkmJihrPWMudG9BcnJheShJKSkpcmV0dXJuIEI9VkEoQiksay5mb3JFYWNoKGZ1bmN0aW9uKFIseCl7IShjLmlzVW5kZWZpbmVkKFIpfHxSPT09bnVsbCkmJnQuYXBwZW5kKG49PT0hMD96QShbQl0seCxpKTpuPT09bnVsbD9COkIrIltdIixsKFIpKX0pLCExfXJldHVybiBzdChJKT8hMDoodC5hcHBlbmQoekEoZCxCLGkpLGwoSSkpLCExKX1sZXQgZz1bXSx1PU9iamVjdC5hc3NpZ24oJGkse2RlZmF1bHRWaXNpdG9yOmEsY29udmVydFZhbHVlOmwsaXNWaXNpdGFibGU6c3R9KTtmdW5jdGlvbiBzKEksQil7aWYoIWMuaXNVbmRlZmluZWQoSSkpe2lmKGcuaW5kZXhPZihJKSE9PS0xKXRocm93IEVycm9yKCJDaXJjdWxhciByZWZlcmVuY2UgZGV0ZWN0ZWQgaW4gIitCLmpvaW4oIi4iKSk7Zy5wdXNoKEkpLGMuZm9yRWFjaChJLGZ1bmN0aW9uKGssVSl7KCEoYy5pc1VuZGVmaW5lZChrKXx8az09PW51bGwpJiZvLmNhbGwodCxrLGMuaXNTdHJpbmcoVSk/VS50cmltKCk6VSxCLHUpKT09PSEwJiZzKGssQj9CLmNvbmNhdChVKTpbVV0pfSksZy5wb3AoKX19aWYoIWMuaXNPYmplY3QoZSkpdGhyb3cgbmV3IFR5cGVFcnJvcigiZGF0YSBtdXN0IGJlIGFuIG9iamVjdCIpO3JldHVybiBzKGUpLHR9dmFyIFk9ZW87ZnVuY3Rpb24gWkEoZSl7bGV0IHQ9eyIhIjoiJTIxIiwiJyI6IiUyNyIsIigiOiIlMjgiLCIpIjoiJTI5IiwifiI6IiU3RSIsIiUyMCI6IisiLCIlMDAiOiJcMCJ9O3JldHVybiBlbmNvZGVVUklDb21wb25lbnQoZSkucmVwbGFjZSgvWyEnKCl+XXwlMjB8JTAwL2csZnVuY3Rpb24ocil7cmV0dXJuIHRbcl19KX1mdW5jdGlvbiBYQShlLHQpe3RoaXMuX3BhaXJzPVtdLGUmJlkoZSx0aGlzLHQpfXZhciAkQT1YQS5wcm90b3R5cGU7JEEuYXBwZW5kPWZ1bmN0aW9uKHQsQSl7dGhpcy5fcGFpcnMucHVzaChbdCxBXSl9OyRBLnRvU3RyaW5nPWZ1bmN0aW9uKHQpe2xldCBBPXQ/ZnVuY3Rpb24ocil7cmV0dXJuIHQuY2FsbCh0aGlzLHIsWkEpfTpaQTtyZXR1cm4gdGhpcy5fcGFpcnMubWFwKGZ1bmN0aW9uKG8pe3JldHVybiBBKG9bMF0pKyI9IitBKG9bMV0pfSwiIikuam9pbigiJiIpfTt2YXIgTmU9WEE7ZnVuY3Rpb24gdG8oZSl7cmV0dXJuIGVuY29kZVVSSUNvbXBvbmVudChlKS5yZXBsYWNlKC8lM0EvZ2ksIjoiKS5yZXBsYWNlKC8lMjQvZywiJCIpLnJlcGxhY2UoLyUyQy9naSwiLCIpLnJlcGxhY2UoLyUyMC9nLCIrIikucmVwbGFjZSgvJTVCL2dpLCJbIikucmVwbGFjZSgvJTVEL2dpLCJdIil9ZnVuY3Rpb24gcGUoZSx0LEEpe2lmKCF0KXJldHVybiBlO2xldCByPUEmJkEuZW5jb2RlfHx0byxvPUEmJkEuc2VyaWFsaXplLGk7aWYobz9pPW8odCxBKTppPWMuaXNVUkxTZWFyY2hQYXJhbXModCk/dC50b1N0cmluZygpOm5ldyBOZSh0LEEpLnRvU3RyaW5nKHIpLGkpe2xldCBuPWUuaW5kZXhPZigiIyIpO24hPT0tMSYmKGU9ZS5zbGljZSgwLG4pKSxlKz0oZS5pbmRleE9mKCI/Iik9PT0tMT8iPyI6IiYiKStpfXJldHVybiBlfXZhciBndD1jbGFzc3tjb25zdHJ1Y3Rvcigpe3RoaXMuaGFuZGxlcnM9W119dXNlKHQsQSxyKXtyZXR1cm4gdGhpcy5oYW5kbGVycy5wdXNoKHtmdWxmaWxsZWQ6dCxyZWplY3RlZDpBLHN5bmNocm9ub3VzOnI/ci5zeW5jaHJvbm91czohMSxydW5XaGVuOnI/ci5ydW5XaGVuOm51bGx9KSx0aGlzLmhhbmRsZXJzLmxlbmd0aC0xfWVqZWN0KHQpe3RoaXMuaGFuZGxlcnNbdF0mJih0aGlzLmhhbmRsZXJzW3RdPW51bGwpfWNsZWFyKCl7dGhpcy5oYW5kbGVycyYmKHRoaXMuaGFuZGxlcnM9W10pfWZvckVhY2godCl7Yy5mb3JFYWNoKHRoaXMuaGFuZGxlcnMsZnVuY3Rpb24ocil7ciE9PW51bGwmJnQocil9KX19LGx0PWd0O3ZhciBPZT17c2lsZW50SlNPTlBhcnNpbmc6ITAsZm9yY2VkSlNPTlBhcnNpbmc6ITAsY2xhcmlmeVRpbWVvdXRFcnJvcjohMX07dmFyIGVyPXR5cGVvZiBVUkxTZWFyY2hQYXJhbXM8InUiP1VSTFNlYXJjaFBhcmFtczpOZTt2YXIgdHI9dHlwZW9mIEZvcm1EYXRhPCJ1Ij9Gb3JtRGF0YTpudWxsO3ZhciBBcj10eXBlb2YgQmxvYjwidSI/QmxvYjpudWxsO3ZhciBycj17aXNCcm93c2VyOiEwLGNsYXNzZXM6e1VSTFNlYXJjaFBhcmFtczplcixGb3JtRGF0YTp0cixCbG9iOkFyfSxwcm90b2NvbHM6WyJodHRwIiwiaHR0cHMiLCJmaWxlIiwiYmxvYiIsInVybCIsImRhdGEiXX07dmFyIHB0PXt9O0tyKHB0LHtoYXNCcm93c2VyRW52OigpPT5JdCxoYXNTdGFuZGFyZEJyb3dzZXJFbnY6KCk9PkFvLGhhc1N0YW5kYXJkQnJvd3NlcldlYldvcmtlckVudjooKT0+cm8sb3JpZ2luOigpPT5pb30pO3ZhciBJdD10eXBlb2Ygd2luZG93PCJ1IiYmdHlwZW9mIGRvY3VtZW50PCJ1IixBbz0oZT0+SXQmJlsiUmVhY3ROYXRpdmUiLCJOYXRpdmVTY3JpcHQiLCJOUyJdLmluZGV4T2YoZSk8MCkodHlwZW9mIG5hdmlnYXRvcjwidSImJm5hdmlnYXRvci5wcm9kdWN0KSxybz10eXBlb2YgV29ya2VyR2xvYmFsU2NvcGU8InUiJiZzZWxmIGluc3RhbmNlb2YgV29ya2VyR2xvYmFsU2NvcGUmJnR5cGVvZiBzZWxmLmltcG9ydFNjcmlwdHM9PSJmdW5jdGlvbiIsaW89SXQmJndpbmRvdy5sb2NhdGlvbi5ocmVmfHwiaHR0cDovL2xvY2FsaG9zdCI7dmFyIEY9ey4uLnB0LC4uLnJyfTtmdW5jdGlvbiBtdChlLHQpe3JldHVybiBZKGUsbmV3IEYuY2xhc3Nlcy5VUkxTZWFyY2hQYXJhbXMsT2JqZWN0LmFzc2lnbih7dmlzaXRvcjpmdW5jdGlvbihBLHIsbyxpKXtyZXR1cm4gRi5pc05vZGUmJmMuaXNCdWZmZXIoQSk/KHRoaXMuYXBwZW5kKHIsQS50b1N0cmluZygiYmFzZTY0IikpLCExKTppLmRlZmF1bHRWaXNpdG9yLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19LHQpKX1mdW5jdGlvbiBvbyhlKXtyZXR1cm4gYy5tYXRjaEFsbCgvXHcrfFxbKFx3KildL2csZSkubWFwKHQ9PnRbMF09PT0iW10iPyIiOnRbMV18fHRbMF0pfWZ1bmN0aW9uIGFvKGUpe2xldCB0PXt9LEE9T2JqZWN0LmtleXMoZSkscixvPUEubGVuZ3RoLGk7Zm9yKHI9MDtyPG87cisrKWk9QVtyXSx0W2ldPWVbaV07cmV0dXJuIHR9ZnVuY3Rpb24gbm8oZSl7ZnVuY3Rpb24gdChBLHIsbyxpKXtsZXQgbj1BW2krK107aWYobj09PSJfX3Byb3RvX18iKXJldHVybiEwO2xldCBtPU51bWJlci5pc0Zpbml0ZSgrbiksZj1pPj1BLmxlbmd0aDtyZXR1cm4gbj0hbiYmYy5pc0FycmF5KG8pP28ubGVuZ3RoOm4sZj8oYy5oYXNPd25Qcm9wKG8sbik/b1tuXT1bb1tuXSxyXTpvW25dPXIsIW0pOigoIW9bbl18fCFjLmlzT2JqZWN0KG9bbl0pKSYmKG9bbl09W10pLHQoQSxyLG9bbl0saSkmJmMuaXNBcnJheShvW25dKSYmKG9bbl09YW8ob1tuXSkpLCFtKX1pZihjLmlzRm9ybURhdGEoZSkmJmMuaXNGdW5jdGlvbihlLmVudHJpZXMpKXtsZXQgQT17fTtyZXR1cm4gYy5mb3JFYWNoRW50cnkoZSwocixvKT0+e3Qob28ociksbyxBLDApfSksQX1yZXR1cm4gbnVsbH12YXIgUGU9bm87ZnVuY3Rpb24gc28oZSx0LEEpe2lmKGMuaXNTdHJpbmcoZSkpdHJ5e3JldHVybih0fHxKU09OLnBhcnNlKShlKSxjLnRyaW0oZSl9Y2F0Y2gocil7aWYoci5uYW1lIT09IlN5bnRheEVycm9yIil0aHJvdyByfXJldHVybihBfHxKU09OLnN0cmluZ2lmeSkoZSl9dmFyIHV0PXt0cmFuc2l0aW9uYWw6T2UsYWRhcHRlcjpbInhociIsImh0dHAiLCJmZXRjaCJdLHRyYW5zZm9ybVJlcXVlc3Q6W2Z1bmN0aW9uKHQsQSl7bGV0IHI9QS5nZXRDb250ZW50VHlwZSgpfHwiIixvPXIuaW5kZXhPZigiYXBwbGljYXRpb24vanNvbiIpPi0xLGk9Yy5pc09iamVjdCh0KTtpZihpJiZjLmlzSFRNTEZvcm0odCkmJih0PW5ldyBGb3JtRGF0YSh0KSksYy5pc0Zvcm1EYXRhKHQpKXJldHVybiBvP0pTT04uc3RyaW5naWZ5KFBlKHQpKTp0O2lmKGMuaXNBcnJheUJ1ZmZlcih0KXx8Yy5pc0J1ZmZlcih0KXx8Yy5pc1N0cmVhbSh0KXx8Yy5pc0ZpbGUodCl8fGMuaXNCbG9iKHQpfHxjLmlzUmVhZGFibGVTdHJlYW0odCkpcmV0dXJuIHQ7aWYoYy5pc0FycmF5QnVmZmVyVmlldyh0KSlyZXR1cm4gdC5idWZmZXI7aWYoYy5pc1VSTFNlYXJjaFBhcmFtcyh0KSlyZXR1cm4gQS5zZXRDb250ZW50VHlwZSgiYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkO2NoYXJzZXQ9dXRmLTgiLCExKSx0LnRvU3RyaW5nKCk7bGV0IG07aWYoaSl7aWYoci5pbmRleE9mKCJhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQiKT4tMSlyZXR1cm4gbXQodCx0aGlzLmZvcm1TZXJpYWxpemVyKS50b1N0cmluZygpO2lmKChtPWMuaXNGaWxlTGlzdCh0KSl8fHIuaW5kZXhPZigibXVsdGlwYXJ0L2Zvcm0tZGF0YSIpPi0xKXtsZXQgZj10aGlzLmVudiYmdGhpcy5lbnYuRm9ybURhdGE7cmV0dXJuIFkobT97ImZpbGVzW10iOnR9OnQsZiYmbmV3IGYsdGhpcy5mb3JtU2VyaWFsaXplcil9fXJldHVybiBpfHxvPyhBLnNldENvbnRlbnRUeXBlKCJhcHBsaWNhdGlvbi9qc29uIiwhMSksc28odCkpOnR9XSx0cmFuc2Zvcm1SZXNwb25zZTpbZnVuY3Rpb24odCl7bGV0IEE9dGhpcy50cmFuc2l0aW9uYWx8fHV0LnRyYW5zaXRpb25hbCxyPUEmJkEuZm9yY2VkSlNPTlBhcnNpbmcsbz10aGlzLnJlc3BvbnNlVHlwZT09PSJqc29uIjtpZihjLmlzUmVzcG9uc2UodCl8fGMuaXNSZWFkYWJsZVN0cmVhbSh0KSlyZXR1cm4gdDtpZih0JiZjLmlzU3RyaW5nKHQpJiYociYmIXRoaXMucmVzcG9uc2VUeXBlfHxvKSl7bGV0IG49IShBJiZBLnNpbGVudEpTT05QYXJzaW5nKSYmbzt0cnl7cmV0dXJuIEpTT04ucGFyc2UodCl9Y2F0Y2gobSl7aWYobil0aHJvdyBtLm5hbWU9PT0iU3ludGF4RXJyb3IiP2guZnJvbShtLGguRVJSX0JBRF9SRVNQT05TRSx0aGlzLG51bGwsdGhpcy5yZXNwb25zZSk6bX19cmV0dXJuIHR9XSx0aW1lb3V0OjAseHNyZkNvb2tpZU5hbWU6IlhTUkYtVE9LRU4iLHhzcmZIZWFkZXJOYW1lOiJYLVhTUkYtVE9LRU4iLG1heENvbnRlbnRMZW5ndGg6LTEsbWF4Qm9keUxlbmd0aDotMSxlbnY6e0Zvcm1EYXRhOkYuY2xhc3Nlcy5Gb3JtRGF0YSxCbG9iOkYuY2xhc3Nlcy5CbG9ifSx2YWxpZGF0ZVN0YXR1czpmdW5jdGlvbih0KXtyZXR1cm4gdD49MjAwJiZ0PDMwMH0saGVhZGVyczp7Y29tbW9uOntBY2NlcHQ6ImFwcGxpY2F0aW9uL2pzb24sIHRleHQvcGxhaW4sICovKiIsIkNvbnRlbnQtVHlwZSI6dm9pZCAwfX19O2MuZm9yRWFjaChbImRlbGV0ZSIsImdldCIsImhlYWQiLCJwb3N0IiwicHV0IiwicGF0Y2giXSxlPT57dXQuaGVhZGVyc1tlXT17fX0pO3ZhciB0ZT11dDt2YXIgZ289Yy50b09iamVjdFNldChbImFnZSIsImF1dGhvcml6YXRpb24iLCJjb250ZW50LWxlbmd0aCIsImNvbnRlbnQtdHlwZSIsImV0YWciLCJleHBpcmVzIiwiZnJvbSIsImhvc3QiLCJpZi1tb2RpZmllZC1zaW5jZSIsImlmLXVubW9kaWZpZWQtc2luY2UiLCJsYXN0LW1vZGlmaWVkIiwibG9jYXRpb24iLCJtYXgtZm9yd2FyZHMiLCJwcm94eS1hdXRob3JpemF0aW9uIiwicmVmZXJlciIsInJldHJ5LWFmdGVyIiwidXNlci1hZ2VudCJdKSxpcj1lPT57bGV0IHQ9e30sQSxyLG87cmV0dXJuIGUmJmUuc3BsaXQoYApgKS5mb3JFYWNoKGZ1bmN0aW9uKG4pe289bi5pbmRleE9mKCI6IiksQT1uLnN1YnN0cmluZygwLG8pLnRyaW0oKS50b0xvd2VyQ2FzZSgpLHI9bi5zdWJzdHJpbmcobysxKS50cmltKCksISghQXx8dFtBXSYmZ29bQV0pJiYoQT09PSJzZXQtY29va2llIj90W0FdP3RbQV0ucHVzaChyKTp0W0FdPVtyXTp0W0FdPXRbQV0/dFtBXSsiLCAiK3I6cil9KSx0fTt2YXIgb3I9U3ltYm9sKCJpbnRlcm5hbHMiKTtmdW5jdGlvbiBtZShlKXtyZXR1cm4gZSYmU3RyaW5nKGUpLnRyaW0oKS50b0xvd2VyQ2FzZSgpfWZ1bmN0aW9uIHhlKGUpe3JldHVybiBlPT09ITF8fGU9PW51bGw/ZTpjLmlzQXJyYXkoZSk/ZS5tYXAoeGUpOlN0cmluZyhlKX1mdW5jdGlvbiBsbyhlKXtsZXQgdD1PYmplY3QuY3JlYXRlKG51bGwpLEE9LyhbXlxzLDs9XSspXHMqKD86PVxzKihbXiw7XSspKT8vZyxyO2Zvcig7cj1BLmV4ZWMoZSk7KXRbclsxXV09clsyXTtyZXR1cm4gdH12YXIgSW89ZT0+L15bLV9hLXpBLVowLTleYHx+LCEjJCUmJyorLl0rJC8udGVzdChlLnRyaW0oKSk7ZnVuY3Rpb24gZnQoZSx0LEEscixvKXtpZihjLmlzRnVuY3Rpb24ocikpcmV0dXJuIHIuY2FsbCh0aGlzLHQsQSk7aWYobyYmKHQ9QSksISFjLmlzU3RyaW5nKHQpKXtpZihjLmlzU3RyaW5nKHIpKXJldHVybiB0LmluZGV4T2YocikhPT0tMTtpZihjLmlzUmVnRXhwKHIpKXJldHVybiByLnRlc3QodCl9fWZ1bmN0aW9uIHBvKGUpe3JldHVybiBlLnRyaW0oKS50b0xvd2VyQ2FzZSgpLnJlcGxhY2UoLyhbYS16XGRdKShcdyopL2csKHQsQSxyKT0+QS50b1VwcGVyQ2FzZSgpK3IpfWZ1bmN0aW9uIG1vKGUsdCl7bGV0IEE9Yy50b0NhbWVsQ2FzZSgiICIrdCk7WyJnZXQiLCJzZXQiLCJoYXMiXS5mb3JFYWNoKHI9PntPYmplY3QuZGVmaW5lUHJvcGVydHkoZSxyK0Ese3ZhbHVlOmZ1bmN0aW9uKG8saSxuKXtyZXR1cm4gdGhpc1tyXS5jYWxsKHRoaXMsdCxvLGksbil9LGNvbmZpZ3VyYWJsZTohMH0pfSl9dmFyIEFlPWNsYXNze2NvbnN0cnVjdG9yKHQpe3QmJnRoaXMuc2V0KHQpfXNldCh0LEEscil7bGV0IG89dGhpcztmdW5jdGlvbiBpKG0sZixsKXtsZXQgYT1tZShmKTtpZighYSl0aHJvdyBuZXcgRXJyb3IoImhlYWRlciBuYW1lIG11c3QgYmUgYSBub24tZW1wdHkgc3RyaW5nIik7bGV0IGc9Yy5maW5kS2V5KG8sYSk7KCFnfHxvW2ddPT09dm9pZCAwfHxsPT09ITB8fGw9PT12b2lkIDAmJm9bZ10hPT0hMSkmJihvW2d8fGZdPXhlKG0pKX1sZXQgbj0obSxmKT0+Yy5mb3JFYWNoKG0sKGwsYSk9PmkobCxhLGYpKTtpZihjLmlzUGxhaW5PYmplY3QodCl8fHQgaW5zdGFuY2VvZiB0aGlzLmNvbnN0cnVjdG9yKW4odCxBKTtlbHNlIGlmKGMuaXNTdHJpbmcodCkmJih0PXQudHJpbSgpKSYmIUlvKHQpKW4oaXIodCksQSk7ZWxzZSBpZihjLmlzSGVhZGVycyh0KSlmb3IobGV0W20sZl1vZiB0LmVudHJpZXMoKSlpKGYsbSxyKTtlbHNlIHQhPW51bGwmJmkoQSx0LHIpO3JldHVybiB0aGlzfWdldCh0LEEpe2lmKHQ9bWUodCksdCl7bGV0IHI9Yy5maW5kS2V5KHRoaXMsdCk7aWYocil7bGV0IG89dGhpc1tyXTtpZighQSlyZXR1cm4gbztpZihBPT09ITApcmV0dXJuIGxvKG8pO2lmKGMuaXNGdW5jdGlvbihBKSlyZXR1cm4gQS5jYWxsKHRoaXMsbyxyKTtpZihjLmlzUmVnRXhwKEEpKXJldHVybiBBLmV4ZWMobyk7dGhyb3cgbmV3IFR5cGVFcnJvcigicGFyc2VyIG11c3QgYmUgYm9vbGVhbnxyZWdleHB8ZnVuY3Rpb24iKX19fWhhcyh0LEEpe2lmKHQ9bWUodCksdCl7bGV0IHI9Yy5maW5kS2V5KHRoaXMsdCk7cmV0dXJuISEociYmdGhpc1tyXSE9PXZvaWQgMCYmKCFBfHxmdCh0aGlzLHRoaXNbcl0scixBKSkpfXJldHVybiExfWRlbGV0ZSh0LEEpe2xldCByPXRoaXMsbz0hMTtmdW5jdGlvbiBpKG4pe2lmKG49bWUobiksbil7bGV0IG09Yy5maW5kS2V5KHIsbik7bSYmKCFBfHxmdChyLHJbbV0sbSxBKSkmJihkZWxldGUgclttXSxvPSEwKX19cmV0dXJuIGMuaXNBcnJheSh0KT90LmZvckVhY2goaSk6aSh0KSxvfWNsZWFyKHQpe2xldCBBPU9iamVjdC5rZXlzKHRoaXMpLHI9QS5sZW5ndGgsbz0hMTtmb3IoO3ItLTspe2xldCBpPUFbcl07KCF0fHxmdCh0aGlzLHRoaXNbaV0saSx0LCEwKSkmJihkZWxldGUgdGhpc1tpXSxvPSEwKX1yZXR1cm4gb31ub3JtYWxpemUodCl7bGV0IEE9dGhpcyxyPXt9O3JldHVybiBjLmZvckVhY2godGhpcywobyxpKT0+e2xldCBuPWMuZmluZEtleShyLGkpO2lmKG4pe0Fbbl09eGUobyksZGVsZXRlIEFbaV07cmV0dXJufWxldCBtPXQ/cG8oaSk6U3RyaW5nKGkpLnRyaW0oKTttIT09aSYmZGVsZXRlIEFbaV0sQVttXT14ZShvKSxyW21dPSEwfSksdGhpc31jb25jYXQoLi4udCl7cmV0dXJuIHRoaXMuY29uc3RydWN0b3IuY29uY2F0KHRoaXMsLi4udCl9dG9KU09OKHQpe2xldCBBPU9iamVjdC5jcmVhdGUobnVsbCk7cmV0dXJuIGMuZm9yRWFjaCh0aGlzLChyLG8pPT57ciE9bnVsbCYmciE9PSExJiYoQVtvXT10JiZjLmlzQXJyYXkocik/ci5qb2luKCIsICIpOnIpfSksQX1bU3ltYm9sLml0ZXJhdG9yXSgpe3JldHVybiBPYmplY3QuZW50cmllcyh0aGlzLnRvSlNPTigpKVtTeW1ib2wuaXRlcmF0b3JdKCl9dG9TdHJpbmcoKXtyZXR1cm4gT2JqZWN0LmVudHJpZXModGhpcy50b0pTT04oKSkubWFwKChbdCxBXSk9PnQrIjogIitBKS5qb2luKGAKYCl9Z2V0W1N5bWJvbC50b1N0cmluZ1RhZ10oKXtyZXR1cm4iQXhpb3NIZWFkZXJzIn1zdGF0aWMgZnJvbSh0KXtyZXR1cm4gdCBpbnN0YW5jZW9mIHRoaXM/dDpuZXcgdGhpcyh0KX1zdGF0aWMgY29uY2F0KHQsLi4uQSl7bGV0IHI9bmV3IHRoaXModCk7cmV0dXJuIEEuZm9yRWFjaChvPT5yLnNldChvKSkscn1zdGF0aWMgYWNjZXNzb3IodCl7bGV0IHI9KHRoaXNbb3JdPXRoaXNbb3JdPXthY2Nlc3NvcnM6e319KS5hY2Nlc3NvcnMsbz10aGlzLnByb3RvdHlwZTtmdW5jdGlvbiBpKG4pe2xldCBtPW1lKG4pO3JbbV18fChtbyhvLG4pLHJbbV09ITApfXJldHVybiBjLmlzQXJyYXkodCk/dC5mb3JFYWNoKGkpOmkodCksdGhpc319O0FlLmFjY2Vzc29yKFsiQ29udGVudC1UeXBlIiwiQ29udGVudC1MZW5ndGgiLCJBY2NlcHQiLCJBY2NlcHQtRW5jb2RpbmciLCJVc2VyLUFnZW50IiwiQXV0aG9yaXphdGlvbiJdKTtjLnJlZHVjZURlc2NyaXB0b3JzKEFlLnByb3RvdHlwZSwoe3ZhbHVlOmV9LHQpPT57bGV0IEE9dFswXS50b1VwcGVyQ2FzZSgpK3Quc2xpY2UoMSk7cmV0dXJue2dldDooKT0+ZSxzZXQocil7dGhpc1tBXT1yfX19KTtjLmZyZWV6ZU1ldGhvZHMoQWUpO3ZhciBXPUFlO2Z1bmN0aW9uIHVlKGUsdCl7bGV0IEE9dGhpc3x8dGUscj10fHxBLG89Vy5mcm9tKHIuaGVhZGVycyksaT1yLmRhdGE7cmV0dXJuIGMuZm9yRWFjaChlLGZ1bmN0aW9uKG0pe2k9bS5jYWxsKEEsaSxvLm5vcm1hbGl6ZSgpLHQ/dC5zdGF0dXM6dm9pZCAwKX0pLG8ubm9ybWFsaXplKCksaX1mdW5jdGlvbiBmZShlKXtyZXR1cm4hIShlJiZlLl9fQ0FOQ0VMX18pfWZ1bmN0aW9uIGFyKGUsdCxBKXtoLmNhbGwodGhpcyxlPz8iY2FuY2VsZWQiLGguRVJSX0NBTkNFTEVELHQsQSksdGhpcy5uYW1lPSJDYW5jZWxlZEVycm9yIn1jLmluaGVyaXRzKGFyLGgse19fQ0FOQ0VMX186ITB9KTt2YXIgTT1hcjtmdW5jdGlvbiBjZShlLHQsQSl7bGV0IHI9QS5jb25maWcudmFsaWRhdGVTdGF0dXM7IUEuc3RhdHVzfHwhcnx8cihBLnN0YXR1cyk/ZShBKTp0KG5ldyBoKCJSZXF1ZXN0IGZhaWxlZCB3aXRoIHN0YXR1cyBjb2RlICIrQS5zdGF0dXMsW2guRVJSX0JBRF9SRVFVRVNULGguRVJSX0JBRF9SRVNQT05TRV1bTWF0aC5mbG9vcihBLnN0YXR1cy8xMDApLTRdLEEuY29uZmlnLEEucmVxdWVzdCxBKSl9ZnVuY3Rpb24gY3QoZSl7bGV0IHQ9L14oWy0rXHddezEsMjV9KSg6P1wvXC98OikvLmV4ZWMoZSk7cmV0dXJuIHQmJnRbMV18fCIifWZ1bmN0aW9uIHVvKGUsdCl7ZT1lfHwxMDtsZXQgQT1uZXcgQXJyYXkoZSkscj1uZXcgQXJyYXkoZSksbz0wLGk9MCxuO3JldHVybiB0PXQhPT12b2lkIDA/dDoxZTMsZnVuY3Rpb24oZil7bGV0IGw9RGF0ZS5ub3coKSxhPXJbaV07bnx8KG49bCksQVtvXT1mLHJbb109bDtsZXQgZz1pLHU9MDtmb3IoO2chPT1vOyl1Kz1BW2crK10sZz1nJWU7aWYobz0obysxKSVlLG89PT1pJiYoaT0oaSsxKSVlKSxsLW48dClyZXR1cm47bGV0IHM9YSYmbC1hO3JldHVybiBzP01hdGgucm91bmQodSoxZTMvcyk6dm9pZCAwfX12YXIgbnI9dW87ZnVuY3Rpb24gZm8oZSx0KXtsZXQgQT0wLHI9MWUzL3QsbyxpLG49KGwsYT1EYXRlLm5vdygpKT0+e0E9YSxvPW51bGwsaSYmKGNsZWFyVGltZW91dChpKSxpPW51bGwpLGUuYXBwbHkobnVsbCxsKX07cmV0dXJuWyguLi5sKT0+e2xldCBhPURhdGUubm93KCksZz1hLUE7Zz49cj9uKGwsYSk6KG89bCxpfHwoaT1zZXRUaW1lb3V0KCgpPT57aT1udWxsLG4obyl9LHItZykpKX0sKCk9Pm8mJm4obyldfXZhciBzcj1mbzt2YXIgcmU9KGUsdCxBPTMpPT57bGV0IHI9MCxvPW5yKDUwLDI1MCk7cmV0dXJuIHNyKGk9PntsZXQgbj1pLmxvYWRlZCxtPWkubGVuZ3RoQ29tcHV0YWJsZT9pLnRvdGFsOnZvaWQgMCxmPW4tcixsPW8oZiksYT1uPD1tO3I9bjtsZXQgZz17bG9hZGVkOm4sdG90YWw6bSxwcm9ncmVzczptP24vbTp2b2lkIDAsYnl0ZXM6ZixyYXRlOmx8fHZvaWQgMCxlc3RpbWF0ZWQ6bCYmbSYmYT8obS1uKS9sOnZvaWQgMCxldmVudDppLGxlbmd0aENvbXB1dGFibGU6bSE9bnVsbCxbdD8iZG93bmxvYWQiOiJ1cGxvYWQiXTohMH07ZShnKX0sQSl9LGR0PShlLHQpPT57bGV0IEE9ZSE9bnVsbDtyZXR1cm5bcj0+dFswXSh7bGVuZ3RoQ29tcHV0YWJsZTpBLHRvdGFsOmUsbG9hZGVkOnJ9KSx0WzFdXX0sQnQ9ZT0+KC4uLnQpPT5jLmFzYXAoKCk9PmUoLi4udCkpO3ZhciBncj1GLmhhc1N0YW5kYXJkQnJvd3NlckVudj9mdW5jdGlvbigpe2xldCB0PS8obXNpZXx0cmlkZW50KS9pLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCksQT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJhIikscjtmdW5jdGlvbiBvKGkpe2xldCBuPWk7cmV0dXJuIHQmJihBLnNldEF0dHJpYnV0ZSgiaHJlZiIsbiksbj1BLmhyZWYpLEEuc2V0QXR0cmlidXRlKCJocmVmIixuKSx7aHJlZjpBLmhyZWYscHJvdG9jb2w6QS5wcm90b2NvbD9BLnByb3RvY29sLnJlcGxhY2UoLzokLywiIik6IiIsaG9zdDpBLmhvc3Qsc2VhcmNoOkEuc2VhcmNoP0Euc2VhcmNoLnJlcGxhY2UoL15cPy8sIiIpOiIiLGhhc2g6QS5oYXNoP0EuaGFzaC5yZXBsYWNlKC9eIy8sIiIpOiIiLGhvc3RuYW1lOkEuaG9zdG5hbWUscG9ydDpBLnBvcnQscGF0aG5hbWU6QS5wYXRobmFtZS5jaGFyQXQoMCk9PT0iLyI/QS5wYXRobmFtZToiLyIrQS5wYXRobmFtZX19cmV0dXJuIHI9byh3aW5kb3cubG9jYXRpb24uaHJlZiksZnVuY3Rpb24obil7bGV0IG09Yy5pc1N0cmluZyhuKT9vKG4pOm47cmV0dXJuIG0ucHJvdG9jb2w9PT1yLnByb3RvY29sJiZtLmhvc3Q9PT1yLmhvc3R9fSgpOmZ1bmN0aW9uKCl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuITB9fSgpO3ZhciBscj1GLmhhc1N0YW5kYXJkQnJvd3NlckVudj97d3JpdGUoZSx0LEEscixvLGkpe2xldCBuPVtlKyI9IitlbmNvZGVVUklDb21wb25lbnQodCldO2MuaXNOdW1iZXIoQSkmJm4ucHVzaCgiZXhwaXJlcz0iK25ldyBEYXRlKEEpLnRvR01UU3RyaW5nKCkpLGMuaXNTdHJpbmcocikmJm4ucHVzaCgicGF0aD0iK3IpLGMuaXNTdHJpbmcobykmJm4ucHVzaCgiZG9tYWluPSIrbyksaT09PSEwJiZuLnB1c2goInNlY3VyZSIpLGRvY3VtZW50LmNvb2tpZT1uLmpvaW4oIjsgIil9LHJlYWQoZSl7bGV0IHQ9ZG9jdW1lbnQuY29va2llLm1hdGNoKG5ldyBSZWdFeHAoIihefDtcXHMqKSgiK2UrIik9KFteO10qKSIpKTtyZXR1cm4gdD9kZWNvZGVVUklDb21wb25lbnQodFszXSk6bnVsbH0scmVtb3ZlKGUpe3RoaXMud3JpdGUoZSwiIixEYXRlLm5vdygpLTg2NGU1KX19Ont3cml0ZSgpe30scmVhZCgpe3JldHVybiBudWxsfSxyZW1vdmUoKXt9fTtmdW5jdGlvbiBDdChlKXtyZXR1cm4vXihbYS16XVthLXpcZCtcLS5dKjopP1wvXC8vaS50ZXN0KGUpfWZ1bmN0aW9uIEV0KGUsdCl7cmV0dXJuIHQ/ZS5yZXBsYWNlKC9cLz9cLyQvLCIiKSsiLyIrdC5yZXBsYWNlKC9eXC8rLywiIik6ZX1mdW5jdGlvbiBkZShlLHQpe3JldHVybiBlJiYhQ3QodCk/RXQoZSx0KTp0fXZhciBJcj1lPT5lIGluc3RhbmNlb2YgVz97Li4uZX06ZTtmdW5jdGlvbiBHKGUsdCl7dD10fHx7fTtsZXQgQT17fTtmdW5jdGlvbiByKGwsYSxnKXtyZXR1cm4gYy5pc1BsYWluT2JqZWN0KGwpJiZjLmlzUGxhaW5PYmplY3QoYSk/Yy5tZXJnZS5jYWxsKHtjYXNlbGVzczpnfSxsLGEpOmMuaXNQbGFpbk9iamVjdChhKT9jLm1lcmdlKHt9LGEpOmMuaXNBcnJheShhKT9hLnNsaWNlKCk6YX1mdW5jdGlvbiBvKGwsYSxnKXtpZihjLmlzVW5kZWZpbmVkKGEpKXtpZighYy5pc1VuZGVmaW5lZChsKSlyZXR1cm4gcih2b2lkIDAsbCxnKX1lbHNlIHJldHVybiByKGwsYSxnKX1mdW5jdGlvbiBpKGwsYSl7aWYoIWMuaXNVbmRlZmluZWQoYSkpcmV0dXJuIHIodm9pZCAwLGEpfWZ1bmN0aW9uIG4obCxhKXtpZihjLmlzVW5kZWZpbmVkKGEpKXtpZighYy5pc1VuZGVmaW5lZChsKSlyZXR1cm4gcih2b2lkIDAsbCl9ZWxzZSByZXR1cm4gcih2b2lkIDAsYSl9ZnVuY3Rpb24gbShsLGEsZyl7aWYoZyBpbiB0KXJldHVybiByKGwsYSk7aWYoZyBpbiBlKXJldHVybiByKHZvaWQgMCxsKX1sZXQgZj17dXJsOmksbWV0aG9kOmksZGF0YTppLGJhc2VVUkw6bix0cmFuc2Zvcm1SZXF1ZXN0Om4sdHJhbnNmb3JtUmVzcG9uc2U6bixwYXJhbXNTZXJpYWxpemVyOm4sdGltZW91dDpuLHRpbWVvdXRNZXNzYWdlOm4sd2l0aENyZWRlbnRpYWxzOm4sd2l0aFhTUkZUb2tlbjpuLGFkYXB0ZXI6bixyZXNwb25zZVR5cGU6bix4c3JmQ29va2llTmFtZTpuLHhzcmZIZWFkZXJOYW1lOm4sb25VcGxvYWRQcm9ncmVzczpuLG9uRG93bmxvYWRQcm9ncmVzczpuLGRlY29tcHJlc3M6bixtYXhDb250ZW50TGVuZ3RoOm4sbWF4Qm9keUxlbmd0aDpuLGJlZm9yZVJlZGlyZWN0Om4sdHJhbnNwb3J0Om4saHR0cEFnZW50Om4saHR0cHNBZ2VudDpuLGNhbmNlbFRva2VuOm4sc29ja2V0UGF0aDpuLHJlc3BvbnNlRW5jb2Rpbmc6bix2YWxpZGF0ZVN0YXR1czptLGhlYWRlcnM6KGwsYSk9Pm8oSXIobCksSXIoYSksITApfTtyZXR1cm4gYy5mb3JFYWNoKE9iamVjdC5rZXlzKE9iamVjdC5hc3NpZ24oe30sZSx0KSksZnVuY3Rpb24oYSl7bGV0IGc9ZlthXXx8byx1PWcoZVthXSx0W2FdLGEpO2MuaXNVbmRlZmluZWQodSkmJmchPT1tfHwoQVthXT11KX0pLEF9dmFyIFRlPWU9PntsZXQgdD1HKHt9LGUpLHtkYXRhOkEsd2l0aFhTUkZUb2tlbjpyLHhzcmZIZWFkZXJOYW1lOm8seHNyZkNvb2tpZU5hbWU6aSxoZWFkZXJzOm4sYXV0aDptfT10O3QuaGVhZGVycz1uPVcuZnJvbShuKSx0LnVybD1wZShkZSh0LmJhc2VVUkwsdC51cmwpLGUucGFyYW1zLGUucGFyYW1zU2VyaWFsaXplciksbSYmbi5zZXQoIkF1dGhvcml6YXRpb24iLCJCYXNpYyAiK2J0b2EoKG0udXNlcm5hbWV8fCIiKSsiOiIrKG0ucGFzc3dvcmQ/dW5lc2NhcGUoZW5jb2RlVVJJQ29tcG9uZW50KG0ucGFzc3dvcmQpKToiIikpKTtsZXQgZjtpZihjLmlzRm9ybURhdGEoQSkpe2lmKEYuaGFzU3RhbmRhcmRCcm93c2VyRW52fHxGLmhhc1N0YW5kYXJkQnJvd3NlcldlYldvcmtlckVudiluLnNldENvbnRlbnRUeXBlKHZvaWQgMCk7ZWxzZSBpZigoZj1uLmdldENvbnRlbnRUeXBlKCkpIT09ITEpe2xldFtsLC4uLmFdPWY/Zi5zcGxpdCgiOyIpLm1hcChnPT5nLnRyaW0oKSkuZmlsdGVyKEJvb2xlYW4pOltdO24uc2V0Q29udGVudFR5cGUoW2x8fCJtdWx0aXBhcnQvZm9ybS1kYXRhIiwuLi5hXS5qb2luKCI7ICIpKX19aWYoRi5oYXNTdGFuZGFyZEJyb3dzZXJFbnYmJihyJiZjLmlzRnVuY3Rpb24ocikmJihyPXIodCkpLHJ8fHIhPT0hMSYmZ3IodC51cmwpKSl7bGV0IGw9byYmaSYmbHIucmVhZChpKTtsJiZuLnNldChvLGwpfXJldHVybiB0fTt2YXIgY289dHlwZW9mIFhNTEh0dHBSZXF1ZXN0PCJ1Iixwcj1jbyYmZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKEEscil7bGV0IG89VGUoZSksaT1vLmRhdGEsbj1XLmZyb20oby5oZWFkZXJzKS5ub3JtYWxpemUoKSx7cmVzcG9uc2VUeXBlOm0sb25VcGxvYWRQcm9ncmVzczpmLG9uRG93bmxvYWRQcm9ncmVzczpsfT1vLGEsZyx1LHMsSTtmdW5jdGlvbiBCKCl7cyYmcygpLEkmJkkoKSxvLmNhbmNlbFRva2VuJiZvLmNhbmNlbFRva2VuLnVuc3Vic2NyaWJlKGEpLG8uc2lnbmFsJiZvLnNpZ25hbC5yZW1vdmVFdmVudExpc3RlbmVyKCJhYm9ydCIsYSl9bGV0IGQ9bmV3IFhNTEh0dHBSZXF1ZXN0O2Qub3BlbihvLm1ldGhvZC50b1VwcGVyQ2FzZSgpLG8udXJsLCEwKSxkLnRpbWVvdXQ9by50aW1lb3V0O2Z1bmN0aW9uIGsoKXtpZighZClyZXR1cm47bGV0IFI9Vy5mcm9tKCJnZXRBbGxSZXNwb25zZUhlYWRlcnMiaW4gZCYmZC5nZXRBbGxSZXNwb25zZUhlYWRlcnMoKSksaj17ZGF0YTohbXx8bT09PSJ0ZXh0Inx8bT09PSJqc29uIj9kLnJlc3BvbnNlVGV4dDpkLnJlc3BvbnNlLHN0YXR1czpkLnN0YXR1cyxzdGF0dXNUZXh0OmQuc3RhdHVzVGV4dCxoZWFkZXJzOlIsY29uZmlnOmUscmVxdWVzdDpkfTtjZShmdW5jdGlvbihKKXtBKEopLEIoKX0sZnVuY3Rpb24oSil7cihKKSxCKCl9LGopLGQ9bnVsbH0ib25sb2FkZW5kImluIGQ/ZC5vbmxvYWRlbmQ9azpkLm9ucmVhZHlzdGF0ZWNoYW5nZT1mdW5jdGlvbigpeyFkfHxkLnJlYWR5U3RhdGUhPT00fHxkLnN0YXR1cz09PTAmJiEoZC5yZXNwb25zZVVSTCYmZC5yZXNwb25zZVVSTC5pbmRleE9mKCJmaWxlOiIpPT09MCl8fHNldFRpbWVvdXQoayl9LGQub25hYm9ydD1mdW5jdGlvbigpe2QmJihyKG5ldyBoKCJSZXF1ZXN0IGFib3J0ZWQiLGguRUNPTk5BQk9SVEVELGUsZCkpLGQ9bnVsbCl9LGQub25lcnJvcj1mdW5jdGlvbigpe3IobmV3IGgoIk5ldHdvcmsgRXJyb3IiLGguRVJSX05FVFdPUkssZSxkKSksZD1udWxsfSxkLm9udGltZW91dD1mdW5jdGlvbigpe2xldCB4PW8udGltZW91dD8idGltZW91dCBvZiAiK28udGltZW91dCsibXMgZXhjZWVkZWQiOiJ0aW1lb3V0IGV4Y2VlZGVkIixqPW8udHJhbnNpdGlvbmFsfHxPZTtvLnRpbWVvdXRFcnJvck1lc3NhZ2UmJih4PW8udGltZW91dEVycm9yTWVzc2FnZSkscihuZXcgaCh4LGouY2xhcmlmeVRpbWVvdXRFcnJvcj9oLkVUSU1FRE9VVDpoLkVDT05OQUJPUlRFRCxlLGQpKSxkPW51bGx9LGk9PT12b2lkIDAmJm4uc2V0Q29udGVudFR5cGUobnVsbCksInNldFJlcXVlc3RIZWFkZXIiaW4gZCYmYy5mb3JFYWNoKG4udG9KU09OKCksZnVuY3Rpb24oeCxqKXtkLnNldFJlcXVlc3RIZWFkZXIoaix4KX0pLGMuaXNVbmRlZmluZWQoby53aXRoQ3JlZGVudGlhbHMpfHwoZC53aXRoQ3JlZGVudGlhbHM9ISFvLndpdGhDcmVkZW50aWFscyksbSYmbSE9PSJqc29uIiYmKGQucmVzcG9uc2VUeXBlPW8ucmVzcG9uc2VUeXBlKSxsJiYoW3UsSV09cmUobCwhMCksZC5hZGRFdmVudExpc3RlbmVyKCJwcm9ncmVzcyIsdSkpLGYmJmQudXBsb2FkJiYoW2csc109cmUoZiksZC51cGxvYWQuYWRkRXZlbnRMaXN0ZW5lcigicHJvZ3Jlc3MiLGcpLGQudXBsb2FkLmFkZEV2ZW50TGlzdGVuZXIoImxvYWRlbmQiLHMpKSwoby5jYW5jZWxUb2tlbnx8by5zaWduYWwpJiYoYT1SPT57ZCYmKHIoIVJ8fFIudHlwZT9uZXcgTShudWxsLGUsZCk6UiksZC5hYm9ydCgpLGQ9bnVsbCl9LG8uY2FuY2VsVG9rZW4mJm8uY2FuY2VsVG9rZW4uc3Vic2NyaWJlKGEpLG8uc2lnbmFsJiYoby5zaWduYWwuYWJvcnRlZD9hKCk6by5zaWduYWwuYWRkRXZlbnRMaXN0ZW5lcigiYWJvcnQiLGEpKSk7bGV0IFU9Y3Qoby51cmwpO2lmKFUmJkYucHJvdG9jb2xzLmluZGV4T2YoVSk9PT0tMSl7cihuZXcgaCgiVW5zdXBwb3J0ZWQgcHJvdG9jb2wgIitVKyI6IixoLkVSUl9CQURfUkVRVUVTVCxlKSk7cmV0dXJufWQuc2VuZChpfHxudWxsKX0pfTt2YXIgQm89KGUsdCk9PntsZXQgQT1uZXcgQWJvcnRDb250cm9sbGVyLHIsbz1mdW5jdGlvbihmKXtpZighcil7cj0hMCxuKCk7bGV0IGw9ZiBpbnN0YW5jZW9mIEVycm9yP2Y6dGhpcy5yZWFzb247QS5hYm9ydChsIGluc3RhbmNlb2YgaD9sOm5ldyBNKGwgaW5zdGFuY2VvZiBFcnJvcj9sLm1lc3NhZ2U6bCkpfX0saT10JiZzZXRUaW1lb3V0KCgpPT57byhuZXcgaChgdGltZW91dCAke3R9IG9mIG1zIGV4Y2VlZGVkYCxoLkVUSU1FRE9VVCkpfSx0KSxuPSgpPT57ZSYmKGkmJmNsZWFyVGltZW91dChpKSxpPW51bGwsZS5mb3JFYWNoKGY9PntmJiYoZi5yZW1vdmVFdmVudExpc3RlbmVyP2YucmVtb3ZlRXZlbnRMaXN0ZW5lcigiYWJvcnQiLG8pOmYudW5zdWJzY3JpYmUobykpfSksZT1udWxsKX07ZS5mb3JFYWNoKGY9PmYmJmYuYWRkRXZlbnRMaXN0ZW5lciYmZi5hZGRFdmVudExpc3RlbmVyKCJhYm9ydCIsbykpO2xldHtzaWduYWw6bX09QTtyZXR1cm4gbS51bnN1YnNjcmliZT1uLFttLCgpPT57aSYmY2xlYXJUaW1lb3V0KGkpLGk9bnVsbH1dfSxtcj1Cbzt2YXIgQ289ZnVuY3Rpb24qKGUsdCl7bGV0IEE9ZS5ieXRlTGVuZ3RoO2lmKCF0fHxBPHQpe3lpZWxkIGU7cmV0dXJufWxldCByPTAsbztmb3IoO3I8QTspbz1yK3QseWllbGQgZS5zbGljZShyLG8pLHI9b30sRW89YXN5bmMgZnVuY3Rpb24qKGUsdCxBKXtmb3IgYXdhaXQobGV0IHIgb2YgZSl5aWVsZCpDbyhBcnJheUJ1ZmZlci5pc1ZpZXcocik/cjphd2FpdCBBKFN0cmluZyhyKSksdCl9LHl0PShlLHQsQSxyLG8pPT57bGV0IGk9RW8oZSx0LG8pLG49MCxtLGY9bD0+e218fChtPSEwLHImJnIobCkpfTtyZXR1cm4gbmV3IFJlYWRhYmxlU3RyZWFtKHthc3luYyBwdWxsKGwpe3RyeXtsZXR7ZG9uZTphLHZhbHVlOmd9PWF3YWl0IGkubmV4dCgpO2lmKGEpe2YoKSxsLmNsb3NlKCk7cmV0dXJufWxldCB1PWcuYnl0ZUxlbmd0aDtpZihBKXtsZXQgcz1uKz11O0Eocyl9bC5lbnF1ZXVlKG5ldyBVaW50OEFycmF5KGcpKX1jYXRjaChhKXt0aHJvdyBmKGEpLGF9fSxjYW5jZWwobCl7cmV0dXJuIGYobCksaS5yZXR1cm4oKX19LHtoaWdoV2F0ZXJNYXJrOjJ9KX07dmFyIExlPXR5cGVvZiBmZXRjaD09ImZ1bmN0aW9uIiYmdHlwZW9mIFJlcXVlc3Q9PSJmdW5jdGlvbiImJnR5cGVvZiBSZXNwb25zZT09ImZ1bmN0aW9uIixmcj1MZSYmdHlwZW9mIFJlYWRhYmxlU3RyZWFtPT0iZnVuY3Rpb24iLFF0PUxlJiYodHlwZW9mIFRleHRFbmNvZGVyPT0iZnVuY3Rpb24iPyhlPT50PT5lLmVuY29kZSh0KSkobmV3IFRleHRFbmNvZGVyKTphc3luYyBlPT5uZXcgVWludDhBcnJheShhd2FpdCBuZXcgUmVzcG9uc2UoZSkuYXJyYXlCdWZmZXIoKSkpLGNyPShlLC4uLnQpPT57dHJ5e3JldHVybiEhZSguLi50KX1jYXRjaHtyZXR1cm4hMX19LHlvPWZyJiZjcigoKT0+e2xldCBlPSExLHQ9bmV3IFJlcXVlc3QoRi5vcmlnaW4se2JvZHk6bmV3IFJlYWRhYmxlU3RyZWFtLG1ldGhvZDoiUE9TVCIsZ2V0IGR1cGxleCgpe3JldHVybiBlPSEwLCJoYWxmIn19KS5oZWFkZXJzLmhhcygiQ29udGVudC1UeXBlIik7cmV0dXJuIGUmJiF0fSksdXI9NjQqMTAyNCxodD1mciYmY3IoKCk9PmMuaXNSZWFkYWJsZVN0cmVhbShuZXcgUmVzcG9uc2UoIiIpLmJvZHkpKSxHZT17c3RyZWFtOmh0JiYoZT0+ZS5ib2R5KX07TGUmJihlPT57WyJ0ZXh0IiwiYXJyYXlCdWZmZXIiLCJibG9iIiwiZm9ybURhdGEiLCJzdHJlYW0iXS5mb3JFYWNoKHQ9PnshR2VbdF0mJihHZVt0XT1jLmlzRnVuY3Rpb24oZVt0XSk/QT0+QVt0XSgpOihBLHIpPT57dGhyb3cgbmV3IGgoYFJlc3BvbnNlIHR5cGUgJyR7dH0nIGlzIG5vdCBzdXBwb3J0ZWRgLGguRVJSX05PVF9TVVBQT1JULHIpfSl9KX0pKG5ldyBSZXNwb25zZSk7dmFyIFFvPWFzeW5jIGU9PntpZihlPT1udWxsKXJldHVybiAwO2lmKGMuaXNCbG9iKGUpKXJldHVybiBlLnNpemU7aWYoYy5pc1NwZWNDb21wbGlhbnRGb3JtKGUpKXJldHVybihhd2FpdCBuZXcgUmVxdWVzdChlKS5hcnJheUJ1ZmZlcigpKS5ieXRlTGVuZ3RoO2lmKGMuaXNBcnJheUJ1ZmZlclZpZXcoZSl8fGMuaXNBcnJheUJ1ZmZlcihlKSlyZXR1cm4gZS5ieXRlTGVuZ3RoO2lmKGMuaXNVUkxTZWFyY2hQYXJhbXMoZSkmJihlPWUrIiIpLGMuaXNTdHJpbmcoZSkpcmV0dXJuKGF3YWl0IFF0KGUpKS5ieXRlTGVuZ3RofSxobz1hc3luYyhlLHQpPT57bGV0IEE9Yy50b0Zpbml0ZU51bWJlcihlLmdldENvbnRlbnRMZW5ndGgoKSk7cmV0dXJuIEE/P1FvKHQpfSxkcj1MZSYmKGFzeW5jIGU9PntsZXR7dXJsOnQsbWV0aG9kOkEsZGF0YTpyLHNpZ25hbDpvLGNhbmNlbFRva2VuOmksdGltZW91dDpuLG9uRG93bmxvYWRQcm9ncmVzczptLG9uVXBsb2FkUHJvZ3Jlc3M6ZixyZXNwb25zZVR5cGU6bCxoZWFkZXJzOmEsd2l0aENyZWRlbnRpYWxzOmc9InNhbWUtb3JpZ2luIixmZXRjaE9wdGlvbnM6dX09VGUoZSk7bD1sPyhsKyIiKS50b0xvd2VyQ2FzZSgpOiJ0ZXh0IjtsZXRbcyxJXT1vfHxpfHxuP21yKFtvLGldLG4pOltdLEIsZCxrPSgpPT57IUImJnNldFRpbWVvdXQoKCk9PntzJiZzLnVuc3Vic2NyaWJlKCl9KSxCPSEwfSxVO3RyeXtpZihmJiZ5byYmQSE9PSJnZXQiJiZBIT09ImhlYWQiJiYoVT1hd2FpdCBobyhhLHIpKSE9PTApe2xldCBMPW5ldyBSZXF1ZXN0KHQse21ldGhvZDoiUE9TVCIsYm9keTpyLGR1cGxleDoiaGFsZiJ9KSxKO2lmKGMuaXNGb3JtRGF0YShyKSYmKEo9TC5oZWFkZXJzLmdldCgiY29udGVudC10eXBlIikpJiZhLnNldENvbnRlbnRUeXBlKEopLEwuYm9keSl7bGV0W2plLHllXT1kdChVLHJlKEJ0KGYpKSk7cj15dChMLmJvZHksdXIsamUseWUsUXQpfX1jLmlzU3RyaW5nKGcpfHwoZz1nPyJpbmNsdWRlIjoib21pdCIpLGQ9bmV3IFJlcXVlc3QodCx7Li4udSxzaWduYWw6cyxtZXRob2Q6QS50b1VwcGVyQ2FzZSgpLGhlYWRlcnM6YS5ub3JtYWxpemUoKS50b0pTT04oKSxib2R5OnIsZHVwbGV4OiJoYWxmIixjcmVkZW50aWFsczpnfSk7bGV0IFI9YXdhaXQgZmV0Y2goZCkseD1odCYmKGw9PT0ic3RyZWFtInx8bD09PSJyZXNwb25zZSIpO2lmKGh0JiYobXx8eCkpe2xldCBMPXt9O1sic3RhdHVzIiwic3RhdHVzVGV4dCIsImhlYWRlcnMiXS5mb3JFYWNoKGtBPT57TFtrQV09UltrQV19KTtsZXQgSj1jLnRvRmluaXRlTnVtYmVyKFIuaGVhZGVycy5nZXQoImNvbnRlbnQtbGVuZ3RoIikpLFtqZSx5ZV09bSYmZHQoSixyZShCdChtKSwhMCkpfHxbXTtSPW5ldyBSZXNwb25zZSh5dChSLmJvZHksdXIsamUsKCk9Pnt5ZSYmeWUoKSx4JiZrKCl9LFF0KSxMKX1sPWx8fCJ0ZXh0IjtsZXQgaj1hd2FpdCBHZVtjLmZpbmRLZXkoR2UsbCl8fCJ0ZXh0Il0oUixlKTtyZXR1cm4heCYmaygpLEkmJkkoKSxhd2FpdCBuZXcgUHJvbWlzZSgoTCxKKT0+e2NlKEwsSix7ZGF0YTpqLGhlYWRlcnM6Vy5mcm9tKFIuaGVhZGVycyksc3RhdHVzOlIuc3RhdHVzLHN0YXR1c1RleHQ6Ui5zdGF0dXNUZXh0LGNvbmZpZzplLHJlcXVlc3Q6ZH0pfSl9Y2F0Y2goUil7dGhyb3cgaygpLFImJlIubmFtZT09PSJUeXBlRXJyb3IiJiYvZmV0Y2gvaS50ZXN0KFIubWVzc2FnZSk/T2JqZWN0LmFzc2lnbihuZXcgaCgiTmV0d29yayBFcnJvciIsaC5FUlJfTkVUV09SSyxlLGQpLHtjYXVzZTpSLmNhdXNlfHxSfSk6aC5mcm9tKFIsUiYmUi5jb2RlLGUsZCl9fSk7dmFyIHd0PXtodHRwOlNlLHhocjpwcixmZXRjaDpkcn07Yy5mb3JFYWNoKHd0LChlLHQpPT57aWYoZSl7dHJ5e09iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJuYW1lIix7dmFsdWU6dH0pfWNhdGNoe31PYmplY3QuZGVmaW5lUHJvcGVydHkoZSwiYWRhcHRlck5hbWUiLHt2YWx1ZTp0fSl9fSk7dmFyIEJyPWU9PmAtICR7ZX1gLHdvPWU9PmMuaXNGdW5jdGlvbihlKXx8ZT09PW51bGx8fGU9PT0hMSxKZT17Z2V0QWRhcHRlcjplPT57ZT1jLmlzQXJyYXkoZSk/ZTpbZV07bGV0e2xlbmd0aDp0fT1lLEEscixvPXt9O2ZvcihsZXQgaT0wO2k8dDtpKyspe0E9ZVtpXTtsZXQgbjtpZihyPUEsIXdvKEEpJiYocj13dFsobj1TdHJpbmcoQSkpLnRvTG93ZXJDYXNlKCldLHI9PT12b2lkIDApKXRocm93IG5ldyBoKGBVbmtub3duIGFkYXB0ZXIgJyR7bn0nYCk7aWYocilicmVhaztvW258fCIjIitpXT1yfWlmKCFyKXtsZXQgaT1PYmplY3QuZW50cmllcyhvKS5tYXAoKFttLGZdKT0+YGFkYXB0ZXIgJHttfSBgKyhmPT09ITE/ImlzIG5vdCBzdXBwb3J0ZWQgYnkgdGhlIGVudmlyb25tZW50IjoiaXMgbm90IGF2YWlsYWJsZSBpbiB0aGUgYnVpbGQiKSksbj10P2kubGVuZ3RoPjE/YHNpbmNlIDoKYCtpLm1hcChCcikuam9pbihgCmApOiIgIitCcihpWzBdKToiYXMgbm8gYWRhcHRlciBzcGVjaWZpZWQiO3Rocm93IG5ldyBoKCJUaGVyZSBpcyBubyBzdWl0YWJsZSBhZGFwdGVyIHRvIGRpc3BhdGNoIHRoZSByZXF1ZXN0ICIrbiwiRVJSX05PVF9TVVBQT1JUIil9cmV0dXJuIHJ9LGFkYXB0ZXJzOnd0fTtmdW5jdGlvbiBSdChlKXtpZihlLmNhbmNlbFRva2VuJiZlLmNhbmNlbFRva2VuLnRocm93SWZSZXF1ZXN0ZWQoKSxlLnNpZ25hbCYmZS5zaWduYWwuYWJvcnRlZCl0aHJvdyBuZXcgTShudWxsLGUpfWZ1bmN0aW9uIE1lKGUpe3JldHVybiBSdChlKSxlLmhlYWRlcnM9Vy5mcm9tKGUuaGVhZGVycyksZS5kYXRhPXVlLmNhbGwoZSxlLnRyYW5zZm9ybVJlcXVlc3QpLFsicG9zdCIsInB1dCIsInBhdGNoIl0uaW5kZXhPZihlLm1ldGhvZCkhPT0tMSYmZS5oZWFkZXJzLnNldENvbnRlbnRUeXBlKCJhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQiLCExKSxKZS5nZXRBZGFwdGVyKGUuYWRhcHRlcnx8dGUuYWRhcHRlcikoZSkudGhlbihmdW5jdGlvbihyKXtyZXR1cm4gUnQoZSksci5kYXRhPXVlLmNhbGwoZSxlLnRyYW5zZm9ybVJlc3BvbnNlLHIpLHIuaGVhZGVycz1XLmZyb20oci5oZWFkZXJzKSxyfSxmdW5jdGlvbihyKXtyZXR1cm4gZmUocil8fChSdChlKSxyJiZyLnJlc3BvbnNlJiYoci5yZXNwb25zZS5kYXRhPXVlLmNhbGwoZSxlLnRyYW5zZm9ybVJlc3BvbnNlLHIucmVzcG9uc2UpLHIucmVzcG9uc2UuaGVhZGVycz1XLmZyb20oci5yZXNwb25zZS5oZWFkZXJzKSkpLFByb21pc2UucmVqZWN0KHIpfSl9dmFyIEhlPSIxLjcuNCI7dmFyIGt0PXt9O1sib2JqZWN0IiwiYm9vbGVhbiIsIm51bWJlciIsImZ1bmN0aW9uIiwic3RyaW5nIiwic3ltYm9sIl0uZm9yRWFjaCgoZSx0KT0+e2t0W2VdPWZ1bmN0aW9uKHIpe3JldHVybiB0eXBlb2Ygcj09PWV8fCJhIisodDwxPyJuICI6IiAiKStlfX0pO3ZhciBDcj17fTtrdC50cmFuc2l0aW9uYWw9ZnVuY3Rpb24odCxBLHIpe2Z1bmN0aW9uIG8oaSxuKXtyZXR1cm4iW0F4aW9zIHYiK0hlKyJdIFRyYW5zaXRpb25hbCBvcHRpb24gJyIraSsiJyIrbisocj8iLiAiK3I6IiIpfXJldHVybihpLG4sbSk9PntpZih0PT09ITEpdGhyb3cgbmV3IGgobyhuLCIgaGFzIGJlZW4gcmVtb3ZlZCIrKEE/IiBpbiAiK0E6IiIpKSxoLkVSUl9ERVBSRUNBVEVEKTtyZXR1cm4gQSYmIUNyW25dJiYoQ3Jbbl09ITAsY29uc29sZS53YXJuKG8obiwiIGhhcyBiZWVuIGRlcHJlY2F0ZWQgc2luY2UgdiIrQSsiIGFuZCB3aWxsIGJlIHJlbW92ZWQgaW4gdGhlIG5lYXIgZnV0dXJlIikpKSx0P3QoaSxuLG0pOiEwfX07ZnVuY3Rpb24gUm8oZSx0LEEpe2lmKHR5cGVvZiBlIT0ib2JqZWN0Iil0aHJvdyBuZXcgaCgib3B0aW9ucyBtdXN0IGJlIGFuIG9iamVjdCIsaC5FUlJfQkFEX09QVElPTl9WQUxVRSk7bGV0IHI9T2JqZWN0LmtleXMoZSksbz1yLmxlbmd0aDtmb3IoO28tLSA+MDspe2xldCBpPXJbb10sbj10W2ldO2lmKG4pe2xldCBtPWVbaV0sZj1tPT09dm9pZCAwfHxuKG0saSxlKTtpZihmIT09ITApdGhyb3cgbmV3IGgoIm9wdGlvbiAiK2krIiBtdXN0IGJlICIrZixoLkVSUl9CQURfT1BUSU9OX1ZBTFVFKTtjb250aW51ZX1pZihBIT09ITApdGhyb3cgbmV3IGgoIlVua25vd24gb3B0aW9uICIraSxoLkVSUl9CQURfT1BUSU9OKX19dmFyIHFlPXthc3NlcnRPcHRpb25zOlJvLHZhbGlkYXRvcnM6a3R9O3ZhciBLPXFlLnZhbGlkYXRvcnMsaWU9Y2xhc3N7Y29uc3RydWN0b3IodCl7dGhpcy5kZWZhdWx0cz10LHRoaXMuaW50ZXJjZXB0b3JzPXtyZXF1ZXN0Om5ldyBsdCxyZXNwb25zZTpuZXcgbHR9fWFzeW5jIHJlcXVlc3QodCxBKXt0cnl7cmV0dXJuIGF3YWl0IHRoaXMuX3JlcXVlc3QodCxBKX1jYXRjaChyKXtpZihyIGluc3RhbmNlb2YgRXJyb3Ipe2xldCBvO0Vycm9yLmNhcHR1cmVTdGFja1RyYWNlP0Vycm9yLmNhcHR1cmVTdGFja1RyYWNlKG89e30pOm89bmV3IEVycm9yO2xldCBpPW8uc3RhY2s/by5zdGFjay5yZXBsYWNlKC9eLitcbi8sIiIpOiIiO3RyeXtyLnN0YWNrP2kmJiFTdHJpbmcoci5zdGFjaykuZW5kc1dpdGgoaS5yZXBsYWNlKC9eLitcbi4rXG4vLCIiKSkmJihyLnN0YWNrKz1gCmAraSk6ci5zdGFjaz1pfWNhdGNoe319dGhyb3cgcn19X3JlcXVlc3QodCxBKXt0eXBlb2YgdD09InN0cmluZyI/KEE9QXx8e30sQS51cmw9dCk6QT10fHx7fSxBPUcodGhpcy5kZWZhdWx0cyxBKTtsZXR7dHJhbnNpdGlvbmFsOnIscGFyYW1zU2VyaWFsaXplcjpvLGhlYWRlcnM6aX09QTtyIT09dm9pZCAwJiZxZS5hc3NlcnRPcHRpb25zKHIse3NpbGVudEpTT05QYXJzaW5nOksudHJhbnNpdGlvbmFsKEsuYm9vbGVhbiksZm9yY2VkSlNPTlBhcnNpbmc6Sy50cmFuc2l0aW9uYWwoSy5ib29sZWFuKSxjbGFyaWZ5VGltZW91dEVycm9yOksudHJhbnNpdGlvbmFsKEsuYm9vbGVhbil9LCExKSxvIT1udWxsJiYoYy5pc0Z1bmN0aW9uKG8pP0EucGFyYW1zU2VyaWFsaXplcj17c2VyaWFsaXplOm99OnFlLmFzc2VydE9wdGlvbnMobyx7ZW5jb2RlOksuZnVuY3Rpb24sc2VyaWFsaXplOksuZnVuY3Rpb259LCEwKSksQS5tZXRob2Q9KEEubWV0aG9kfHx0aGlzLmRlZmF1bHRzLm1ldGhvZHx8ImdldCIpLnRvTG93ZXJDYXNlKCk7bGV0IG49aSYmYy5tZXJnZShpLmNvbW1vbixpW0EubWV0aG9kXSk7aSYmYy5mb3JFYWNoKFsiZGVsZXRlIiwiZ2V0IiwiaGVhZCIsInBvc3QiLCJwdXQiLCJwYXRjaCIsImNvbW1vbiJdLEk9PntkZWxldGUgaVtJXX0pLEEuaGVhZGVycz1XLmNvbmNhdChuLGkpO2xldCBtPVtdLGY9ITA7dGhpcy5pbnRlcmNlcHRvcnMucmVxdWVzdC5mb3JFYWNoKGZ1bmN0aW9uKEIpe3R5cGVvZiBCLnJ1bldoZW49PSJmdW5jdGlvbiImJkIucnVuV2hlbihBKT09PSExfHwoZj1mJiZCLnN5bmNocm9ub3VzLG0udW5zaGlmdChCLmZ1bGZpbGxlZCxCLnJlamVjdGVkKSl9KTtsZXQgbD1bXTt0aGlzLmludGVyY2VwdG9ycy5yZXNwb25zZS5mb3JFYWNoKGZ1bmN0aW9uKEIpe2wucHVzaChCLmZ1bGZpbGxlZCxCLnJlamVjdGVkKX0pO2xldCBhLGc9MCx1O2lmKCFmKXtsZXQgST1bTWUuYmluZCh0aGlzKSx2b2lkIDBdO2ZvcihJLnVuc2hpZnQuYXBwbHkoSSxtKSxJLnB1c2guYXBwbHkoSSxsKSx1PUkubGVuZ3RoLGE9UHJvbWlzZS5yZXNvbHZlKEEpO2c8dTspYT1hLnRoZW4oSVtnKytdLElbZysrXSk7cmV0dXJuIGF9dT1tLmxlbmd0aDtsZXQgcz1BO2ZvcihnPTA7Zzx1Oyl7bGV0IEk9bVtnKytdLEI9bVtnKytdO3RyeXtzPUkocyl9Y2F0Y2goZCl7Qi5jYWxsKHRoaXMsZCk7YnJlYWt9fXRyeXthPU1lLmNhbGwodGhpcyxzKX1jYXRjaChJKXtyZXR1cm4gUHJvbWlzZS5yZWplY3QoSSl9Zm9yKGc9MCx1PWwubGVuZ3RoO2c8dTspYT1hLnRoZW4obFtnKytdLGxbZysrXSk7cmV0dXJuIGF9Z2V0VXJpKHQpe3Q9Ryh0aGlzLmRlZmF1bHRzLHQpO2xldCBBPWRlKHQuYmFzZVVSTCx0LnVybCk7cmV0dXJuIHBlKEEsdC5wYXJhbXMsdC5wYXJhbXNTZXJpYWxpemVyKX19O2MuZm9yRWFjaChbImRlbGV0ZSIsImdldCIsImhlYWQiLCJvcHRpb25zIl0sZnVuY3Rpb24odCl7aWUucHJvdG90eXBlW3RdPWZ1bmN0aW9uKEEscil7cmV0dXJuIHRoaXMucmVxdWVzdChHKHJ8fHt9LHttZXRob2Q6dCx1cmw6QSxkYXRhOihyfHx7fSkuZGF0YX0pKX19KTtjLmZvckVhY2goWyJwb3N0IiwicHV0IiwicGF0Y2giXSxmdW5jdGlvbih0KXtmdW5jdGlvbiBBKHIpe3JldHVybiBmdW5jdGlvbihpLG4sbSl7cmV0dXJuIHRoaXMucmVxdWVzdChHKG18fHt9LHttZXRob2Q6dCxoZWFkZXJzOnI/eyJDb250ZW50LVR5cGUiOiJtdWx0aXBhcnQvZm9ybS1kYXRhIn06e30sdXJsOmksZGF0YTpufSkpfX1pZS5wcm90b3R5cGVbdF09QSgpLGllLnByb3RvdHlwZVt0KyJGb3JtIl09QSghMCl9KTt2YXIgQmU9aWU7dmFyIGJ0PWNsYXNzIGV7Y29uc3RydWN0b3IodCl7aWYodHlwZW9mIHQhPSJmdW5jdGlvbiIpdGhyb3cgbmV3IFR5cGVFcnJvcigiZXhlY3V0b3IgbXVzdCBiZSBhIGZ1bmN0aW9uLiIpO2xldCBBO3RoaXMucHJvbWlzZT1uZXcgUHJvbWlzZShmdW5jdGlvbihpKXtBPWl9KTtsZXQgcj10aGlzO3RoaXMucHJvbWlzZS50aGVuKG89PntpZighci5fbGlzdGVuZXJzKXJldHVybjtsZXQgaT1yLl9saXN0ZW5lcnMubGVuZ3RoO2Zvcig7aS0tID4wOylyLl9saXN0ZW5lcnNbaV0obyk7ci5fbGlzdGVuZXJzPW51bGx9KSx0aGlzLnByb21pc2UudGhlbj1vPT57bGV0IGksbj1uZXcgUHJvbWlzZShtPT57ci5zdWJzY3JpYmUobSksaT1tfSkudGhlbihvKTtyZXR1cm4gbi5jYW5jZWw9ZnVuY3Rpb24oKXtyLnVuc3Vic2NyaWJlKGkpfSxufSx0KGZ1bmN0aW9uKGksbixtKXtyLnJlYXNvbnx8KHIucmVhc29uPW5ldyBNKGksbixtKSxBKHIucmVhc29uKSl9KX10aHJvd0lmUmVxdWVzdGVkKCl7aWYodGhpcy5yZWFzb24pdGhyb3cgdGhpcy5yZWFzb259c3Vic2NyaWJlKHQpe2lmKHRoaXMucmVhc29uKXt0KHRoaXMucmVhc29uKTtyZXR1cm59dGhpcy5fbGlzdGVuZXJzP3RoaXMuX2xpc3RlbmVycy5wdXNoKHQpOnRoaXMuX2xpc3RlbmVycz1bdF19dW5zdWJzY3JpYmUodCl7aWYoIXRoaXMuX2xpc3RlbmVycylyZXR1cm47bGV0IEE9dGhpcy5fbGlzdGVuZXJzLmluZGV4T2YodCk7QSE9PS0xJiZ0aGlzLl9saXN0ZW5lcnMuc3BsaWNlKEEsMSl9c3RhdGljIHNvdXJjZSgpe2xldCB0O3JldHVybnt0b2tlbjpuZXcgZShmdW5jdGlvbihvKXt0PW99KSxjYW5jZWw6dH19fSxFcj1idDtmdW5jdGlvbiBEdChlKXtyZXR1cm4gZnVuY3Rpb24oQSl7cmV0dXJuIGUuYXBwbHkobnVsbCxBKX19ZnVuY3Rpb24gV3QoZSl7cmV0dXJuIGMuaXNPYmplY3QoZSkmJmUuaXNBeGlvc0Vycm9yPT09ITB9dmFyIEZ0PXtDb250aW51ZToxMDAsU3dpdGNoaW5nUHJvdG9jb2xzOjEwMSxQcm9jZXNzaW5nOjEwMixFYXJseUhpbnRzOjEwMyxPazoyMDAsQ3JlYXRlZDoyMDEsQWNjZXB0ZWQ6MjAyLE5vbkF1dGhvcml0YXRpdmVJbmZvcm1hdGlvbjoyMDMsTm9Db250ZW50OjIwNCxSZXNldENvbnRlbnQ6MjA1LFBhcnRpYWxDb250ZW50OjIwNixNdWx0aVN0YXR1czoyMDcsQWxyZWFkeVJlcG9ydGVkOjIwOCxJbVVzZWQ6MjI2LE11bHRpcGxlQ2hvaWNlczozMDAsTW92ZWRQZXJtYW5lbnRseTozMDEsRm91bmQ6MzAyLFNlZU90aGVyOjMwMyxOb3RNb2RpZmllZDozMDQsVXNlUHJveHk6MzA1LFVudXNlZDozMDYsVGVtcG9yYXJ5UmVkaXJlY3Q6MzA3LFBlcm1hbmVudFJlZGlyZWN0OjMwOCxCYWRSZXF1ZXN0OjQwMCxVbmF1dGhvcml6ZWQ6NDAxLFBheW1lbnRSZXF1aXJlZDo0MDIsRm9yYmlkZGVuOjQwMyxOb3RGb3VuZDo0MDQsTWV0aG9kTm90QWxsb3dlZDo0MDUsTm90QWNjZXB0YWJsZTo0MDYsUHJveHlBdXRoZW50aWNhdGlvblJlcXVpcmVkOjQwNyxSZXF1ZXN0VGltZW91dDo0MDgsQ29uZmxpY3Q6NDA5LEdvbmU6NDEwLExlbmd0aFJlcXVpcmVkOjQxMSxQcmVjb25kaXRpb25GYWlsZWQ6NDEyLFBheWxvYWRUb29MYXJnZTo0MTMsVXJpVG9vTG9uZzo0MTQsVW5zdXBwb3J0ZWRNZWRpYVR5cGU6NDE1LFJhbmdlTm90U2F0aXNmaWFibGU6NDE2LEV4cGVjdGF0aW9uRmFpbGVkOjQxNyxJbUFUZWFwb3Q6NDE4LE1pc2RpcmVjdGVkUmVxdWVzdDo0MjEsVW5wcm9jZXNzYWJsZUVudGl0eTo0MjIsTG9ja2VkOjQyMyxGYWlsZWREZXBlbmRlbmN5OjQyNCxUb29FYXJseTo0MjUsVXBncmFkZVJlcXVpcmVkOjQyNixQcmVjb25kaXRpb25SZXF1aXJlZDo0MjgsVG9vTWFueVJlcXVlc3RzOjQyOSxSZXF1ZXN0SGVhZGVyRmllbGRzVG9vTGFyZ2U6NDMxLFVuYXZhaWxhYmxlRm9yTGVnYWxSZWFzb25zOjQ1MSxJbnRlcm5hbFNlcnZlckVycm9yOjUwMCxOb3RJbXBsZW1lbnRlZDo1MDEsQmFkR2F0ZXdheTo1MDIsU2VydmljZVVuYXZhaWxhYmxlOjUwMyxHYXRld2F5VGltZW91dDo1MDQsSHR0cFZlcnNpb25Ob3RTdXBwb3J0ZWQ6NTA1LFZhcmlhbnRBbHNvTmVnb3RpYXRlczo1MDYsSW5zdWZmaWNpZW50U3RvcmFnZTo1MDcsTG9vcERldGVjdGVkOjUwOCxOb3RFeHRlbmRlZDo1MTAsTmV0d29ya0F1dGhlbnRpY2F0aW9uUmVxdWlyZWQ6NTExfTtPYmplY3QuZW50cmllcyhGdCkuZm9yRWFjaCgoW2UsdF0pPT57RnRbdF09ZX0pO3ZhciB5cj1GdDtmdW5jdGlvbiBRcihlKXtsZXQgdD1uZXcgQmUoZSksQT1nZShCZS5wcm90b3R5cGUucmVxdWVzdCx0KTtyZXR1cm4gYy5leHRlbmQoQSxCZS5wcm90b3R5cGUsdCx7YWxsT3duS2V5czohMH0pLGMuZXh0ZW5kKEEsdCxudWxsLHthbGxPd25LZXlzOiEwfSksQS5jcmVhdGU9ZnVuY3Rpb24obyl7cmV0dXJuIFFyKEcoZSxvKSl9LEF9dmFyIGI9UXIodGUpO2IuQXhpb3M9QmU7Yi5DYW5jZWxlZEVycm9yPU07Yi5DYW5jZWxUb2tlbj1FcjtiLmlzQ2FuY2VsPWZlO2IuVkVSU0lPTj1IZTtiLnRvRm9ybURhdGE9WTtiLkF4aW9zRXJyb3I9aDtiLkNhbmNlbD1iLkNhbmNlbGVkRXJyb3I7Yi5hbGw9ZnVuY3Rpb24odCl7cmV0dXJuIFByb21pc2UuYWxsKHQpfTtiLnNwcmVhZD1EdDtiLmlzQXhpb3NFcnJvcj1XdDtiLm1lcmdlQ29uZmlnPUc7Yi5BeGlvc0hlYWRlcnM9VztiLmZvcm1Ub0pTT049ZT0+UGUoYy5pc0hUTUxGb3JtKGUpP25ldyBGb3JtRGF0YShlKTplKTtiLmdldEFkYXB0ZXI9SmUuZ2V0QWRhcHRlcjtiLkh0dHBTdGF0dXNDb2RlPXlyO2IuZGVmYXVsdD1iO3ZhciBIPWI7dmFye0F4aW9zOkhsLEF4aW9zRXJyb3I6cWwsQ2FuY2VsZWRFcnJvcjpZbCxpc0NhbmNlbDpLbCxDYW5jZWxUb2tlbjp2bCxWRVJTSU9OOmpsLGFsbDpfbCxDYW5jZWw6emwsaXNBeGlvc0Vycm9yOlZsLHNwcmVhZDpabCx0b0Zvcm1EYXRhOlhsLEF4aW9zSGVhZGVyczokbCxIdHRwU3RhdHVzQ29kZTplSSxmb3JtVG9KU09OOnRJLGdldEFkYXB0ZXI6QUksbWVyZ2VDb25maWc6ckl9PUg7YXN5bmMgZnVuY3Rpb24ga28oZSx0KXtsZXQgQT1lLHI9bnVsbDtpZihBPT1udWxsKXI9bmV3IFdvcmtlcihuZXcgVVJMKCIuL3dlYi13b3JrZXJzL2l0ay13YXNtLXBpcGVsaW5lLndvcmtlci5qcyIsaW1wb3J0Lm1ldGEudXJsKSx7dHlwZToibW9kdWxlIn0pO2Vsc2UgaWYoQS5zdGFydHNXaXRoKCJodHRwIikpe2xldCBvPWF3YWl0IEguZ2V0KEEse3Jlc3BvbnNlVHlwZToiYmxvYiIscGFyYW1zOnR9KSxpPVVSTC5jcmVhdGVPYmplY3RVUkwoby5kYXRhKTtyPW5ldyBXb3JrZXIoaSx7dHlwZToibW9kdWxlIn0pfWVsc2Ugcj1uZXcgV29ya2VyKEEse3R5cGU6Im1vZHVsZSJ9KTtyZXR1cm4gcn12YXIgQ2U9a287ZnVuY3Rpb24gaHIoZSl7bGV0IHQ9cnQoZSksQT1lO3JldHVybiBBLnRlcm1pbmF0ZWQ9ITEsQS53b3JrZXJQcm94eT10LEEub3JpZ2luYWxUZXJtaW5hdGU9QS50ZXJtaW5hdGUsQS50ZXJtaW5hdGU9KCk9PntBLnRlcm1pbmF0ZWQ9ITAsQS53b3JrZXJQcm94eVtBdF0oKSxBLm9yaWdpbmFsVGVybWluYXRlKCl9LHt3b3JrZXJQcm94eTp0LHdvcmtlcjpBfX1hc3luYyBmdW5jdGlvbiBibyhlLHQsQSl7bGV0IHI7aWYoZSE9bnVsbCl7bGV0IGk9ZTtyZXR1cm4gaS53b3JrZXJQcm94eSE9PXZvaWQgMD8ocj1pLndvcmtlclByb3h5LHt3b3JrZXJQcm94eTpyLHdvcmtlcjppfSk6aHIoZSl9bGV0IG89YXdhaXQgQ2UodCxBKTtyZXR1cm4gaHIobyl9dmFyIHdyPWJvO2FzeW5jIGZ1bmN0aW9uIERvKGUsdCxBKXtsZXQgcj0idW5rbm93biI7dHlwZW9mIGUhPSJzdHJpbmciP3I9ZS5ocmVmOmUuc3RhcnRzV2l0aCgiaHR0cCIpP3I9ZTpyPXR5cGVvZiB0PCJ1Ij9gJHt0fS8ke2V9YDplLHIuZW5kc1dpdGgoIi5qcyIpJiYocj1yLnN1YnN0cmluZygwLHIubGVuZ3RoLTMpKSxyLmVuZHNXaXRoKCIud2FzbSIpJiYocj1yLnN1YnN0cmluZygwLHIubGVuZ3RoLTUpKTtsZXQgbz1gJHtyfS53YXNtYCxuPShhd2FpdCBILmdldChvLHtyZXNwb25zZVR5cGU6ImFycmF5YnVmZmVyIixwYXJhbXM6QX0pKS5kYXRhO3JldHVybihhd2FpdCBpbXBvcnQoYCR7cn0uanNgKSkuZGVmYXVsdCh7d2FzbUJpbmFyeTpufSl9dmFyIFJyPURvO3ZhciBrcj1hc3luYygpPT5XZWJBc3NlbWJseS52YWxpZGF0ZShuZXcgVWludDhBcnJheShbMCw5NywxMTUsMTA5LDEsMCwwLDAsMSw1LDEsOTYsMCwxLDEyMywzLDIsMSwwLDEwLDEwLDEsOCwwLDY1LDAsMjUzLDE1LDI1Myw5OCwxMV0pKTt2YXIgV3I9dHlwZW9mIGdsb2JhbFRoaXMuU2hhcmVkQXJyYXlCdWZmZXI9PSJmdW5jdGlvbiIsYnI9bmV3IFRleHRFbmNvZGVyLERyPW5ldyBUZXh0RGVjb2RlcigidXRmLTgiKTtmdW5jdGlvbiBXbyhlLHQpe2xldCBBPXtmbGFnczoiciIsZW5jb2Rpbmc6ImJpbmFyeSJ9LHI9ZS5mc19vcGVuKHQsQS5mbGFncyksaT1lLmZzX3N0YXQodCkuc2l6ZSxuPW51bGw7V3I/bj1uZXcgU2hhcmVkQXJyYXlCdWZmZXIoaSk6bj1uZXcgQXJyYXlCdWZmZXIoaSk7bGV0IG09bmV3IFVpbnQ4QXJyYXkobik7cmV0dXJuIGUuZnNfcmVhZChyLG0sMCxpLDApLGUuZnNfY2xvc2UociksbX1mdW5jdGlvbiBGcihlLHQsQSl7bGV0IHI9bnVsbDtXcj9yPW5ldyBTaGFyZWRBcnJheUJ1ZmZlcihBKTpyPW5ldyBBcnJheUJ1ZmZlcihBKTtsZXQgbz1uZXcgVWludDhBcnJheShyKSxpPW5ldyBVaW50OEFycmF5KGUuSEVBUFU4LmJ1ZmZlcix0LEEpO3JldHVybiBvLnNldChpKSxvfWZ1bmN0aW9uIEQoZSx0LEEscil7bGV0IG89MDtyZXR1cm4gdCE9PW51bGwmJihvPWUuY2NhbGwoIml0a193YXNtX2lucHV0X2FycmF5X2FsbG9jIiwibnVtYmVyIixbIm51bWJlciIsIm51bWJlciIsIm51bWJlciIsIm51bWJlciJdLFswLEEscix0LmJ1ZmZlci5ieXRlTGVuZ3RoXSksZS5IRUFQVTguc2V0KG5ldyBVaW50OEFycmF5KHQuYnVmZmVyKSxvKSksb31mdW5jdGlvbiB2KGUsdCxBKXtsZXQgcj1KU09OLnN0cmluZ2lmeSh0KSxvPWUubGVuZ3RoQnl0ZXNVVEY4KHIpKzEsaT1lLmNjYWxsKCJpdGtfd2FzbV9pbnB1dF9qc29uX2FsbG9jIiwibnVtYmVyIixbIm51bWJlciIsIm51bWJlciIsIm51bWJlciJdLFswLEEsb10pO2Uuc3RyaW5nVG9VVEY4KHIsaSxvKX1mdW5jdGlvbiBTKGUsdCxBLHIpe2xldCBvPWUuY2NhbGwoIml0a193YXNtX291dHB1dF9hcnJheV9hZGRyZXNzIiwibnVtYmVyIixbIm51bWJlciIsIm51bWJlciIsIm51bWJlciJdLFswLHQsQV0pLGk9ZS5jY2FsbCgiaXRrX3dhc21fb3V0cHV0X2FycmF5X3NpemUiLCJudW1iZXIiLFsibnVtYmVyIiwibnVtYmVyIiwibnVtYmVyIl0sWzAsdCxBXSksbj1GcihlLG8saSk7cmV0dXJuIE8ocixuLmJ1ZmZlcil9ZnVuY3Rpb24gRWUoZSx0KXtsZXQgQT1lLmNjYWxsKCJpdGtfd2FzbV9vdXRwdXRfanNvbl9hZGRyZXNzIiwibnVtYmVyIixbIm51bWJlciIsIm51bWJlciJdLFswLHRdKSxyPWUuVVRGOFRvU3RyaW5nKEEpO3JldHVybiBKU09OLnBhcnNlKHIpfWZ1bmN0aW9uIEZvKGUsdCxBLHIpe3IhPW51bGwmJnIubGVuZ3RoPjAmJnIuZm9yRWFjaChmdW5jdGlvbihsLGEpe3N3aXRjaChsLnR5cGUpe2Nhc2UgcC5UZXh0U3RyZWFtOntsZXQgZz1ici5lbmNvZGUobC5kYXRhLmRhdGEpLHU9RChlLGcsYSwwKSxzPXtzaXplOmcuYnVmZmVyLmJ5dGVMZW5ndGgsZGF0YTpgZGF0YTphcHBsaWNhdGlvbi92bmQuaXRrLmFkZHJlc3MsMDoke3V9YH07dihlLHMsYSk7YnJlYWt9Y2FzZSBwLkpzb25Db21wYXRpYmxlOntsZXQgZz1ici5lbmNvZGUoSlNPTi5zdHJpbmdpZnkobC5kYXRhKSksdT1EKGUsZyxhLDApLHM9e3NpemU6Zy5idWZmZXIuYnl0ZUxlbmd0aCxkYXRhOmBkYXRhOmFwcGxpY2F0aW9uL3ZuZC5pdGsuYWRkcmVzcywwOiR7dX1gfTt2KGUscyxhKTticmVha31jYXNlIHAuQmluYXJ5U3RyZWFtOntsZXQgZz1sLmRhdGEuZGF0YSx1PUQoZSxnLGEsMCkscz17c2l6ZTpnLmJ1ZmZlci5ieXRlTGVuZ3RoLGRhdGE6YGRhdGE6YXBwbGljYXRpb24vdm5kLml0ay5hZGRyZXNzLDA6JHt1fWB9O3YoZSxzLGEpO2JyZWFrfWNhc2UgcC5UZXh0RmlsZTp7ZS5mc193cml0ZUZpbGUobC5kYXRhLnBhdGgsbC5kYXRhLmRhdGEpO2JyZWFrfWNhc2UgcC5CaW5hcnlGaWxlOntlLmZzX3dyaXRlRmlsZShsLmRhdGEucGF0aCxsLmRhdGEuZGF0YSk7YnJlYWt9Y2FzZSBwLkltYWdlOntsZXQgZz1sLmRhdGEsdT1EKGUsZy5kYXRhLGEsMCkscz1EKGUsZy5kaXJlY3Rpb24sYSwxKSxJPXR5cGVvZiBnLm1ldGFkYXRhPy5lbnRyaWVzPCJ1Ij9BcnJheS5mcm9tKGcubWV0YWRhdGEuZW50cmllcygpKTpbXSxCPXtpbWFnZVR5cGU6Zy5pbWFnZVR5cGUsbmFtZTpnLm5hbWUsb3JpZ2luOmcub3JpZ2luLHNwYWNpbmc6Zy5zcGFjaW5nLGRpcmVjdGlvbjpgZGF0YTphcHBsaWNhdGlvbi92bmQuaXRrLmFkZHJlc3MsMDoke3N9YCxzaXplOmcuc2l6ZSxkYXRhOmBkYXRhOmFwcGxpY2F0aW9uL3ZuZC5pdGsuYWRkcmVzcywwOiR7dX1gLG1ldGFkYXRhOkl9O3YoZSxCLGEpO2JyZWFrfWNhc2UgcC5NZXNoOntsZXQgZz1sLmRhdGEsdT1EKGUsZy5wb2ludHMsYSwwKSxzPUQoZSxnLmNlbGxzLGEsMSksST1EKGUsZy5wb2ludERhdGEsYSwyKSxCPUQoZSxnLmNlbGxEYXRhLGEsMyksZD17bWVzaFR5cGU6Zy5tZXNoVHlwZSxuYW1lOmcubmFtZSxudW1iZXJPZlBvaW50czpnLm51bWJlck9mUG9pbnRzLHBvaW50czpgZGF0YTphcHBsaWNhdGlvbi92bmQuaXRrLmFkZHJlc3MsMDoke3V9YCxudW1iZXJPZkNlbGxzOmcubnVtYmVyT2ZDZWxscyxjZWxsczpgZGF0YTphcHBsaWNhdGlvbi92bmQuaXRrLmFkZHJlc3MsMDoke3N9YCxjZWxsQnVmZmVyU2l6ZTpnLmNlbGxCdWZmZXJTaXplLG51bWJlck9mUG9pbnRQaXhlbHM6Zy5udW1iZXJPZlBvaW50UGl4ZWxzLHBvaW50RGF0YTpgZGF0YTphcHBsaWNhdGlvbi92bmQuaXRrLmFkZHJlc3MsMDoke0l9YCxudW1iZXJPZkNlbGxQaXhlbHM6Zy5udW1iZXJPZkNlbGxQaXhlbHMsY2VsbERhdGE6YGRhdGE6YXBwbGljYXRpb24vdm5kLml0ay5hZGRyZXNzLDA6JHtCfWB9O3YoZSxkLGEpO2JyZWFrfWNhc2UgcC5Qb2ludFNldDp7bGV0IGc9bC5kYXRhLHU9RChlLGcucG9pbnRzLGEsMCkscz1EKGUsZy5wb2ludERhdGEsYSwxKSxJPXtwb2ludFNldFR5cGU6Zy5wb2ludFNldFR5cGUsbmFtZTpnLm5hbWUsbnVtYmVyT2ZQb2ludHM6Zy5udW1iZXJPZlBvaW50cyxwb2ludHM6YGRhdGE6YXBwbGljYXRpb24vdm5kLml0ay5hZGRyZXNzLDA6JHt1fWAsbnVtYmVyT2ZQb2ludFBpeGVsczpnLm51bWJlck9mUG9pbnRQaXhlbHMscG9pbnREYXRhOmBkYXRhOmFwcGxpY2F0aW9uL3ZuZC5pdGsuYWRkcmVzcywwOiR7c31gfTt2KGUsSSxhKTticmVha31jYXNlIHAuVHJhbnNmb3JtTGlzdDp7bGV0IGc9bC5kYXRhLHU9W107Zy5mb3JFYWNoKChzLEkpPT57bGV0IGQ9YGRhdGE6YXBwbGljYXRpb24vdm5kLml0ay5hZGRyZXNzLDA6JHtEKGUscy5maXhlZFBhcmFtZXRlcnMsYSxJKjIpfWAsVT1gZGF0YTphcHBsaWNhdGlvbi92bmQuaXRrLmFkZHJlc3MsMDoke0QoZSxzLnBhcmFtZXRlcnMsYSxJKjIrMSl9YCxSPXt0cmFuc2Zvcm1UeXBlOnMudHJhbnNmb3JtVHlwZSxudW1iZXJPZkZpeGVkUGFyYW1ldGVyczpzLm51bWJlck9mRml4ZWRQYXJhbWV0ZXJzLG51bWJlck9mUGFyYW1ldGVyczpzLm51bWJlck9mUGFyYW1ldGVycyxuYW1lOnMubmFtZSxpbnB1dFNwYWNlTmFtZTpzLmlucHV0U3BhY2VOYW1lLG91dHB1dFNwYWNlTmFtZTpzLm91dHB1dFNwYWNlTmFtZSxwYXJhbWV0ZXJzOlUsZml4ZWRQYXJhbWV0ZXJzOmR9O3UucHVzaChSKX0pLHYoZSx1LGEpO2JyZWFrfWNhc2UgcC5Qb2x5RGF0YTp7bGV0IGc9bC5kYXRhLHU9RChlLGcucG9pbnRzLGEsMCkscz1EKGUsZy52ZXJ0aWNlcyxhLDEpLEk9RChlLGcubGluZXMsYSwyKSxCPUQoZSxnLnBvbHlnb25zLGEsMyksZD1EKGUsZy50cmlhbmdsZVN0cmlwcyxhLDQpLGs9RChlLGcucG9pbnREYXRhLGEsNSksVT1EKGUsZy5wb2ludERhdGEsYSw2KSxSPXtwb2x5RGF0YVR5cGU6Zy5wb2x5RGF0YVR5cGUsbmFtZTpnLm5hbWUsbnVtYmVyT2ZQb2ludHM6Zy5udW1iZXJPZlBvaW50cyxwb2ludHM6YGRhdGE6YXBwbGljYXRpb24vdm5kLml0ay5hZGRyZXNzLDA6JHt1fWAsdmVydGljZXNCdWZmZXJTaXplOmcudmVydGljZXNCdWZmZXJTaXplLHZlcnRpY2VzOmBkYXRhOmFwcGxpY2F0aW9uL3ZuZC5pdGsuYWRkcmVzcywwOiR7c31gLGxpbmVzQnVmZmVyU2l6ZTpnLmxpbmVzQnVmZmVyU2l6ZSxsaW5lczpgZGF0YTphcHBsaWNhdGlvbi92bmQuaXRrLmFkZHJlc3MsMDoke0l9YCxwb2x5Z29uc0J1ZmZlclNpemU6Zy5wb2x5Z29uc0J1ZmZlclNpemUscG9seWdvbnM6YGRhdGE6YXBwbGljYXRpb24vdm5kLml0ay5hZGRyZXNzLDA6JHtCfWAsdHJpYW5nbGVTdHJpcHNCdWZmZXJTaXplOmcudHJpYW5nbGVTdHJpcHNCdWZmZXJTaXplLHRyaWFuZ2xlU3RyaXBzOmBkYXRhOmFwcGxpY2F0aW9uL3ZuZC5pdGsuYWRkcmVzcywwOiR7ZH1gLG51bWJlck9mUG9pbnRQaXhlbHM6Zy5udW1iZXJPZlBvaW50UGl4ZWxzLHBvaW50RGF0YTpgZGF0YTphcHBsaWNhdGlvbi92bmQuaXRrLmFkZHJlc3MsMDoke2t9YCxudW1iZXJPZkNlbGxQaXhlbHM6Zy5udW1iZXJPZkNlbGxQaXhlbHMsY2VsbERhdGE6YGRhdGE6YXBwbGljYXRpb24vdm5kLml0ay5hZGRyZXNzLDA6JHtVfWB9O3YoZSxSLGEpO2JyZWFrfWRlZmF1bHQ6dGhyb3cgRXJyb3IoIlVuc3VwcG9ydGVkIGlucHV0IEludGVyZmFjZVR5cGUiKX19KSxlLnJlc2V0TW9kdWxlU3Rkb3V0KCksZS5yZXNldE1vZHVsZVN0ZGVycigpO2xldCBvPWUuc3RhY2tTYXZlKCksaT0wO3RyeXtpPWUuY2FsbE1haW4odC5zbGljZSgpKX1jYXRjaChsKXt0aHJvdyB0eXBlb2YgbD09Im51bWJlciImJihjb25zb2xlLmxvZygiRXhjZXB0aW9uIHdoaWxlIHJ1bm5pbmcgcGlwZWxpbmU6IiksY29uc29sZS5sb2coInN0ZG91dDoiLGUuZ2V0TW9kdWxlU3Rkb3V0KCkpLGNvbnNvbGUuZXJyb3IoInN0ZGVycjoiLGUuZ2V0TW9kdWxlU3RkZXJyKCkpLHR5cGVvZiBlLmdldEV4Y2VwdGlvbk1lc3NhZ2U8InUiP2NvbnNvbGUuZXJyb3IoImV4Y2VwdGlvbjoiLGUuZ2V0RXhjZXB0aW9uTWVzc2FnZShsKSk6Y29uc29sZS5lcnJvcigiQnVpbGQgbW9kdWxlIGluIERlYnVnIG1vZGUgZm9yIGV4Y2VwdGlvbiBtZXNzYWdlIGluZm9ybWF0aW9uLiIpKSxsfWZpbmFsbHl7ZS5zdGFja1Jlc3RvcmUobyl9bGV0IG49ZS5nZXRNb2R1bGVTdGRvdXQoKSxtPWUuZ2V0TW9kdWxlU3RkZXJyKCksZj1bXTtyZXR1cm4gQSE9bnVsbCYmQS5sZW5ndGg+MCYmaT09PTAmJkEuZm9yRWFjaChmdW5jdGlvbihsLGEpe2xldCBnPW51bGw7c3dpdGNoKGwudHlwZSl7Y2FzZSBwLlRleHRTdHJlYW06e2xldCBzPWUuY2NhbGwoIml0a193YXNtX291dHB1dF9hcnJheV9hZGRyZXNzIiwibnVtYmVyIixbIm51bWJlciIsIm51bWJlciIsIm51bWJlciJdLFswLGEsMF0pLEk9ZS5jY2FsbCgiaXRrX3dhc21fb3V0cHV0X2FycmF5X3NpemUiLCJudW1iZXIiLFsibnVtYmVyIiwibnVtYmVyIiwibnVtYmVyIl0sWzAsYSwwXSksQj1uZXcgVWludDhBcnJheShlLkhFQVBVOC5idWZmZXIscyxJKTtnPXtkYXRhOkRyLmRlY29kZShCKX07YnJlYWt9Y2FzZSBwLkpzb25Db21wYXRpYmxlOntsZXQgcz1lLmNjYWxsKCJpdGtfd2FzbV9vdXRwdXRfYXJyYXlfYWRkcmVzcyIsIm51bWJlciIsWyJudW1iZXIiLCJudW1iZXIiLCJudW1iZXIiXSxbMCxhLDBdKSxJPWUuY2NhbGwoIml0a193YXNtX291dHB1dF9hcnJheV9zaXplIiwibnVtYmVyIixbIm51bWJlciIsIm51bWJlciIsIm51bWJlciJdLFswLGEsMF0pLEI9bmV3IFVpbnQ4QXJyYXkoZS5IRUFQVTguYnVmZmVyLHMsSSk7Zz1KU09OLnBhcnNlKERyLmRlY29kZShCKSk7YnJlYWt9Y2FzZSBwLkJpbmFyeVN0cmVhbTp7bGV0IHM9ZS5jY2FsbCgiaXRrX3dhc21fb3V0cHV0X2FycmF5X2FkZHJlc3MiLCJudW1iZXIiLFsibnVtYmVyIiwibnVtYmVyIiwibnVtYmVyIl0sWzAsYSwwXSksST1lLmNjYWxsKCJpdGtfd2FzbV9vdXRwdXRfYXJyYXlfc2l6ZSIsIm51bWJlciIsWyJudW1iZXIiLCJudW1iZXIiLCJudW1iZXIiXSxbMCxhLDBdKTtnPXtkYXRhOkZyKGUscyxJKX07YnJlYWt9Y2FzZSBwLlRleHRGaWxlOntnPXtwYXRoOmwuZGF0YS5wYXRoLGRhdGE6ZS5mc19yZWFkRmlsZShsLmRhdGEucGF0aCx7ZW5jb2Rpbmc6InV0ZjgifSl9O2JyZWFrfWNhc2UgcC5CaW5hcnlGaWxlOntnPXtwYXRoOmwuZGF0YS5wYXRoLGRhdGE6V28oZSxsLmRhdGEucGF0aCl9O2JyZWFrfWNhc2UgcC5JbWFnZTp7bGV0IHM9RWUoZSxhKTtzLmRhdGE9UyhlLGEsMCxzLmltYWdlVHlwZS5jb21wb25lbnRUeXBlKSxzLmRpcmVjdGlvbj1TKGUsYSwxLE4uRmxvYXQ2NCkscy5tZXRhZGF0YT1uZXcgTWFwKHMubWV0YWRhdGEpLGc9czticmVha31jYXNlIHAuTWVzaDp7bGV0IHM9RWUoZSxhKTtzLm51bWJlck9mUG9pbnRzPjA/cy5wb2ludHM9UyhlLGEsMCxzLm1lc2hUeXBlLnBvaW50Q29tcG9uZW50VHlwZSk6cy5wb2ludHM9TyhzLm1lc2hUeXBlLnBvaW50Q29tcG9uZW50VHlwZSxuZXcgQXJyYXlCdWZmZXIoMCkpLHMubnVtYmVyT2ZDZWxscz4wP3MuY2VsbHM9UyhlLGEsMSxzLm1lc2hUeXBlLmNlbGxDb21wb25lbnRUeXBlKTpzLmNlbGxzPU8ocy5tZXNoVHlwZS5jZWxsQ29tcG9uZW50VHlwZSxuZXcgQXJyYXlCdWZmZXIoMCkpLHMubnVtYmVyT2ZQb2ludFBpeGVscz4wP3MucG9pbnREYXRhPVMoZSxhLDIscy5tZXNoVHlwZS5wb2ludFBpeGVsQ29tcG9uZW50VHlwZSk6cy5wb2ludERhdGE9TyhzLm1lc2hUeXBlLnBvaW50UGl4ZWxDb21wb25lbnRUeXBlLG5ldyBBcnJheUJ1ZmZlcigwKSkscy5udW1iZXJPZkNlbGxQaXhlbHM+MD9zLmNlbGxEYXRhPVMoZSxhLDMscy5tZXNoVHlwZS5jZWxsUGl4ZWxDb21wb25lbnRUeXBlKTpzLmNlbGxEYXRhPU8ocy5tZXNoVHlwZS5jZWxsUGl4ZWxDb21wb25lbnRUeXBlLG5ldyBBcnJheUJ1ZmZlcigwKSksZz1zO2JyZWFrfWNhc2UgcC5Qb2ludFNldDp7bGV0IHM9RWUoZSxhKTtzLm51bWJlck9mUG9pbnRzPjA/cy5wb2ludHM9UyhlLGEsMCxzLnBvaW50U2V0VHlwZS5wb2ludENvbXBvbmVudFR5cGUpOnMucG9pbnRzPU8ocy5wb2ludFNldFR5cGUucG9pbnRDb21wb25lbnRUeXBlLG5ldyBBcnJheUJ1ZmZlcigwKSkscy5udW1iZXJPZlBvaW50UGl4ZWxzPjA/cy5wb2ludERhdGE9UyhlLGEsMSxzLnBvaW50U2V0VHlwZS5wb2ludFBpeGVsQ29tcG9uZW50VHlwZSk6cy5wb2ludERhdGE9TyhzLnBvaW50U2V0VHlwZS5wb2ludFBpeGVsQ29tcG9uZW50VHlwZSxuZXcgQXJyYXlCdWZmZXIoMCkpLGc9czticmVha31jYXNlIHAuVHJhbnNmb3JtTGlzdDp7bGV0IHM9RWUoZSxhKTtzLmZvckVhY2goKEksQik9PntJLm51bWJlck9mRml4ZWRQYXJhbWV0ZXJzPjAmJihzW0JdLmZpeGVkUGFyYW1ldGVycz1TKGUsYSxCKjIsSS50cmFuc2Zvcm1UeXBlLnBhcmFtZXRlcnNWYWx1ZVR5cGUpKSxJLm51bWJlck9mRml4ZWRQYXJhbWV0ZXJzPjAmJihzW0JdLnBhcmFtZXRlcnM9UyhlLGEsQioyKzEsSS50cmFuc2Zvcm1UeXBlLnBhcmFtZXRlcnNWYWx1ZVR5cGUpKX0pLGc9czticmVha31jYXNlIHAuUG9seURhdGE6e2xldCBzPUVlKGUsYSk7cy5udW1iZXJPZlBvaW50cz4wP3MucG9pbnRzPVMoZSxhLDAsTi5GbG9hdDMyKTpzLnBvaW50cz1uZXcgRmxvYXQzMkFycmF5LHMudmVydGljZXNCdWZmZXJTaXplPjA/cy52ZXJ0aWNlcz1TKGUsYSwxLHcuVUludDMyKTpzLnZlcnRpY2VzPW5ldyBVaW50MzJBcnJheSxzLmxpbmVzQnVmZmVyU2l6ZT4wP3MubGluZXM9UyhlLGEsMix3LlVJbnQzMik6cy5saW5lcz1uZXcgVWludDMyQXJyYXkscy5wb2x5Z29uc0J1ZmZlclNpemU+MD9zLnBvbHlnb25zPVMoZSxhLDMsdy5VSW50MzIpOnMucG9seWdvbnM9bmV3IFVpbnQzMkFycmF5LHMudHJpYW5nbGVTdHJpcHNCdWZmZXJTaXplPjA/cy50cmlhbmdsZVN0cmlwcz1TKGUsYSw0LHcuVUludDMyKTpzLnRyaWFuZ2xlU3RyaXBzPW5ldyBVaW50MzJBcnJheSxzLm51bWJlck9mUG9pbnRQaXhlbHM+MD9zLnBvaW50RGF0YT1TKGUsYSw1LHMucG9seURhdGFUeXBlLnBvaW50UGl4ZWxDb21wb25lbnRUeXBlKTpzLnBvaW50RGF0YT1PKHMucG9seURhdGFUeXBlLnBvaW50UGl4ZWxDb21wb25lbnRUeXBlLG5ldyBBcnJheUJ1ZmZlcigwKSkscy5udW1iZXJPZkNlbGxQaXhlbHM+MD9zLmNlbGxEYXRhPVMoZSxhLDYscy5wb2x5RGF0YVR5cGUuY2VsbFBpeGVsQ29tcG9uZW50VHlwZSk6cy5jZWxsRGF0YT1PKHMucG9seURhdGFUeXBlLmNlbGxQaXhlbENvbXBvbmVudFR5cGUsbmV3IEFycmF5QnVmZmVyKDApKSxnPXM7YnJlYWt9ZGVmYXVsdDp0aHJvdyBFcnJvcigiVW5zdXBwb3J0ZWQgb3V0cHV0IEludGVyZmFjZVR5cGUiKX1sZXQgdT17dHlwZTpsLnR5cGUsZGF0YTpnfTtmLnB1c2godSl9KSx7cmV0dXJuVmFsdWU6aSxzdGRvdXQ6bixzdGRlcnI6bSxvdXRwdXRzOmZ9fXZhciBVcj1Gbzt2YXIgVW89dHlwZW9mIGdsb2JhbFRoaXMuU2hhcmVkQXJyYXlCdWZmZXI8InUiO2Z1bmN0aW9uIFNvKGUsdCl7aWYoZT09bnVsbClyZXR1cm5bXTtsZXQgQT1bXTtmb3IobGV0IHI9MDtyPGUubGVuZ3RoO3IrKyl7bGV0IG89Tm8oZVtyXSx0KTtvIT09bnVsbCYmQS5wdXNoKG8pfXJldHVybiBBfWZ1bmN0aW9uIE5vKGUsdCl7aWYoZT09bnVsbClyZXR1cm4gbnVsbDtsZXQgQT1udWxsO3JldHVybiBlLmJ1ZmZlciE9PXZvaWQgMD9BPWUuYnVmZmVyOmUuYnl0ZUxlbmd0aCE9PXZvaWQgMCYmKEE9ZSksVW8mJkEgaW5zdGFuY2VvZiBTaGFyZWRBcnJheUJ1ZmZlcj9udWxsOnQ/QTpBLnNsaWNlKDApfXZhciBTcj1TbztmdW5jdGlvbiBPbyhlKXtyZXR1cm5bZS5kYXRhLGUuZGlyZWN0aW9uXX12YXIgTnI9T287ZnVuY3Rpb24gUG8oZSl7cmV0dXJuW2UucG9pbnRzLGUucG9pbnREYXRhLGUuY2VsbHMsZS5jZWxsRGF0YV19dmFyIE9yPVBvO2Z1bmN0aW9uIHhvKGUpe3JldHVybltlLnBvaW50cyxlLnZlcnRpY2VzLGUubGluZXMsZS5wb2x5Z29ucyxlLnRyaWFuZ2xlU3RyaXBzLGUucG9pbnREYXRhLGUuY2VsbERhdGFdfXZhciBQcj14bzt2YXIgVG87ZnVuY3Rpb24gWWUoKXtyZXR1cm4gVG99dmFyIEdvO2Z1bmN0aW9uIHhyKCl7cmV0dXJuIEdvfXZhciBMbztmdW5jdGlvbiBLZSgpe3JldHVybiBMb312YXIgVXQ9bmV3IE1hcDtmdW5jdGlvbiBKbygpe2xldCBlPUtlKCk7cmV0dXJuIHR5cGVvZiBlPiJ1IiYmKGU9bnVsbCksZX1mdW5jdGlvbiBUcigpe2xldCBlPVllKCk7cmV0dXJuIHR5cGVvZiBlPiJ1IiYmKGU9bmV3IFVSTCgiL3BpcGVsaW5lcyIsZG9jdW1lbnQubG9jYXRpb24ub3JpZ2luKS5ocmVmKSxlfWZ1bmN0aW9uIHZlKCl7bGV0IGU9eHIoKTtyZXR1cm4gdHlwZW9mIGU+InUiJiYoZT17fSksZX1hc3luYyBmdW5jdGlvbiBNbyhlLHQsQSl7bGV0IHI9ZSxvPWU7aWYodHlwZW9mIGUhPSJzdHJpbmciJiYocj1uZXcgVVJMKGUuaHJlZiksbz1yLmhyZWYpLFV0LmhhcyhvKSlyZXR1cm4gVXQuZ2V0KG8pO3tsZXQgaT1hd2FpdCBScihlLHQ/LnRvU3RyaW5nKCk/P1RyKCksQT8/dmUoKSk7cmV0dXJuIFV0LnNldChvLGkpLGl9fWFzeW5jIGZ1bmN0aW9uIEhvKGUsdCxBLHIsbyl7aWYoIWF3YWl0IGtyKCkpe2xldCBkPSJXZWJBc3NlbWJseSBTSU1EIHN1cHBvcnQgaXMgcmVxdWlyZWQgLS0gcGxlYXNlIHVwZGF0ZSB5b3VyIGJyb3dzZXIuIjt0aHJvdyBhbGVydChkKSxuZXcgRXJyb3IoZCl9bGV0IGk9bz8ud2ViV29ya2VyPz9udWxsO2lmKGk9PT0hMSl7bGV0IGQ9YXdhaXQgTW8oZS50b1N0cmluZygpLG8/LnBpcGVsaW5lQmFzZVVybCxvPy5waXBlbGluZVF1ZXJ5UGFyYW1zPz92ZSgpKTtyZXR1cm4gVXIoZCx0LEEscil9bGV0IG49aSxtPW8/LnBpcGVsaW5lV29ya2VyVXJsPz9KbygpLGY9dHlwZW9mIG0hPSJzdHJpbmciJiZ0eXBlb2YgbT8uaHJlZjwidSI/bS5ocmVmOm0se3dvcmtlclByb3h5Omwsd29ya2VyOmF9PWF3YWl0IHdyKG4sZixvPy5waXBlbGluZVF1ZXJ5UGFyYW1zPz92ZSgpKTtuPWE7bGV0IGc9W107ciE9bnVsbCYmci5sZW5ndGg+MCYmci5mb3JFYWNoKGZ1bmN0aW9uKGQpe2lmKGQudHlwZT09PXAuQmluYXJ5U3RyZWFtKXtsZXQgaz1kLmRhdGEuZGF0YTtnLnB1c2goayl9ZWxzZSBpZihkLnR5cGU9PT1wLkJpbmFyeUZpbGUpe2xldCBrPWQuZGF0YS5kYXRhO2cucHVzaChrKX1lbHNlIGlmKGQudHlwZT09PXAuSW1hZ2Upe2xldCBrPWQuZGF0YTtrLmRhdGEhPT1udWxsJiZnLnB1c2goLi4uTnIoaykpfWVsc2UgaWYoZC50eXBlPT09cC5NZXNoKXtsZXQgaz1kLmRhdGE7Zy5wdXNoKC4uLk9yKGspKX1lbHNlIGlmKGQudHlwZT09PXAuUG9seURhdGEpe2xldCBrPWQuZGF0YTtnLnB1c2goLi4uUHIoaykpfX0pO2xldCB1PW8/LnBpcGVsaW5lQmFzZVVybD8/VHIoKSxzPXR5cGVvZiB1IT0ic3RyaW5nIiYmdHlwZW9mIHU/LmhyZWY8InUiP3UuaHJlZjp1LEk9ciE9bnVsbD9pdChyLFNyKGcsbz8ubm9Db3B5KSk6bnVsbCxCPWF3YWl0IGwucnVuUGlwZWxpbmUoZS50b1N0cmluZygpLHMsdCxBLEksbz8ucGlwZWxpbmVRdWVyeVBhcmFtcz8/dmUoKSk7cmV0dXJue3JldHVyblZhbHVlOkIucmV0dXJuVmFsdWUsc3Rkb3V0OkIuc3Rkb3V0LHN0ZGVycjpCLnN0ZGVycixvdXRwdXRzOkIub3V0cHV0cyx3ZWJXb3JrZXI6bn19dmFyIEU9SG87dmFyIHFvPW51bGw7ZnVuY3Rpb24gR3IoKXtyZXR1cm4gcW99dmFyIFlvPSIxLjQuMCIsTHI9WW87dmFyIFN0LEtvPWBodHRwczovL2Nkbi5qc2RlbGl2ci5uZXQvbnBtL0BpdGstd2FzbS9pbWFnZS1pb0Ake0xyfS9kaXN0L3BpcGVsaW5lc2A7ZnVuY3Rpb24gX0koZSl7U3Q9ZX1mdW5jdGlvbiB5KCl7aWYodHlwZW9mIFN0PCJ1IilyZXR1cm4gU3Q7bGV0IGU9WWUoKTtyZXR1cm4gdHlwZW9mIGU8InUiP2U6S299dmFyIE50LHZvPW51bGw7ZnVuY3Rpb24gSnIoZSl7TnQ9ZX1mdW5jdGlvbiBDKCl7aWYodHlwZW9mIE50PCJ1IilyZXR1cm4gTnQ7bGV0IGU9S2UoKTtyZXR1cm4gdHlwZW9mIGU8InUiP2U6dm99dmFyIG9lPW51bGw7YXN5bmMgZnVuY3Rpb24gTXIoKXtsZXQgZT1DKCksdD10eXBlb2YgZSE9InN0cmluZyImJnR5cGVvZiBlPy5ocmVmPCJ1Ij9lLmhyZWY6ZTtvZT1hd2FpdCBDZSh0KX1mdW5jdGlvbiB0cChlKXtvZT1lfWFzeW5jIGZ1bmN0aW9uIFEoKXtpZihvZSE9PW51bGwpcmV0dXJuIG9lLnRlcm1pbmF0ZWQmJmF3YWl0IE1yKCksb2U7bGV0IGU9R3IoKTtyZXR1cm4gZSE9PW51bGw/ZTooYXdhaXQgTXIoKSxvZSl9YXN5bmMgZnVuY3Rpb24gam8oZSl7bGV0IEE9KGF3YWl0IEguZ2V0KGAke2V9L2luZGV4Lmpzb25gLHtyZXNwb25zZVR5cGU6Impzb24ifSkpLmRhdGEscj1hd2FpdCBILmdldChgJHtlfS9kYXRhL2RhdGEucmF3YCx7cmVzcG9uc2VUeXBlOiJhcnJheWJ1ZmZlciJ9KTtBLmRhdGE9TyhBLmltYWdlVHlwZS5jb21wb25lbnRUeXBlLHIuZGF0YSk7bGV0IG89YXdhaXQgSC5nZXQoYCR7ZX0vZGF0YS9kaXJlY3Rpb24ucmF3YCx7cmVzcG9uc2VUeXBlOiJhcnJheWJ1ZmZlciJ9KTtyZXR1cm4gQS5kaXJlY3Rpb249TyhOLkZsb2F0NjQsby5kYXRhKSxBfXZhciBfbz1qbzt2YXIgem89bmV3IE1hcChbWyJpbWFnZS9qcGVnIiwianBlZyJdLFsiaW1hZ2UvcG5nIiwicG5nIl0sWyJpbWFnZS90aWZmIiwidGlmZiJdLFsiaW1hZ2UveC1tcy1ibXAiLCJibXAiXSxbImltYWdlL3gtYm1wIiwiYm1wIl0sWyJpbWFnZS9ibXAiLCJibXAiXSxbImFwcGxpY2F0aW9uL2RpY29tIiwiZ2RjbSJdXSksYWU9em87YXN5bmMgZnVuY3Rpb24gVm8oZSx0PXt9KXtsZXQgQT1be3R5cGU6cC5Kc29uQ29tcGF0aWJsZX0se3R5cGU6cC5JbWFnZX1dLHI9ZTtpZihlIGluc3RhbmNlb2YgRmlsZSl7bGV0IGQ9YXdhaXQgZS5hcnJheUJ1ZmZlcigpO3I9e3BhdGg6ZS5uYW1lLGRhdGE6bmV3IFVpbnQ4QXJyYXkoZCl9fWxldCBvPVt7dHlwZTpwLkJpbmFyeUZpbGUsZGF0YTpyfV0saT1bXSxuPXIucGF0aDtpLnB1c2gobiksaS5wdXNoKCIwIiksaS5wdXNoKCIxIiksaS5wdXNoKCItLW1lbW9yeS1pbyIpLHQuaW5mb3JtYXRpb25Pbmx5JiZ0LmluZm9ybWF0aW9uT25seSYmaS5wdXNoKCItLWluZm9ybWF0aW9uLW9ubHkiKTtsZXQgbD0icG5nLXJlYWQtaW1hZ2UiLGE9dD8ud2ViV29ya2VyO2E9PT12b2lkIDAmJihhPWF3YWl0IFEoKSk7bGV0e3dlYldvcmtlcjpnLHJldHVyblZhbHVlOnUsc3RkZXJyOnMsb3V0cHV0czpJfT1hd2FpdCBFKGwsaSxBLG8se3BpcGVsaW5lQmFzZVVybDp5KCkscGlwZWxpbmVXb3JrZXJVcmw6QygpLHdlYldvcmtlcjphLG5vQ29weTp0Py5ub0NvcHl9KTtpZih1IT09MCYmcyE9PSIiKXRocm93IG5ldyBFcnJvcihzKTtyZXR1cm57d2ViV29ya2VyOmcsY291bGRSZWFkOklbMF0/LmRhdGEsaW1hZ2U6SVsxXT8uZGF0YX19dmFyIE90PVZvO2FzeW5jIGZ1bmN0aW9uIFpvKGUsdCxBPXt9KXtsZXQgcj1be3R5cGU6cC5Kc29uQ29tcGF0aWJsZX0se3R5cGU6cC5CaW5hcnlGaWxlLGRhdGE6e3BhdGg6dCxkYXRhOm5ldyBVaW50OEFycmF5fX1dLG89W3t0eXBlOnAuSW1hZ2UsZGF0YTplfV0saT1bXTtpLnB1c2goIjAiKSxpLnB1c2goIjAiKTtsZXQgZj10O2kucHVzaChmKSxpLnB1c2goIi0tbWVtb3J5LWlvIiksQS5pbmZvcm1hdGlvbk9ubHkmJkEuaW5mb3JtYXRpb25Pbmx5JiZpLnB1c2goIi0taW5mb3JtYXRpb24tb25seSIpLEEudXNlQ29tcHJlc3Npb24mJkEudXNlQ29tcHJlc3Npb24mJmkucHVzaCgiLS11c2UtY29tcHJlc3Npb24iKTtsZXQgbD0icG5nLXdyaXRlLWltYWdlIixhPUE/LndlYldvcmtlcjthPT09dm9pZCAwJiYoYT1hd2FpdCBRKCkpO2xldHt3ZWJXb3JrZXI6ZyxyZXR1cm5WYWx1ZTp1LHN0ZGVycjpzLG91dHB1dHM6SX09YXdhaXQgRShsLGkscixvLHtwaXBlbGluZUJhc2VVcmw6eSgpLHBpcGVsaW5lV29ya2VyVXJsOkMoKSx3ZWJXb3JrZXI6YSxub0NvcHk6QT8ubm9Db3B5fSk7aWYodSE9PTAmJnMhPT0iIil0aHJvdyBuZXcgRXJyb3Iocyk7cmV0dXJue3dlYldvcmtlcjpnLGNvdWxkV3JpdGU6SVswXT8uZGF0YSxzZXJpYWxpemVkSW1hZ2U6SVsxXT8uZGF0YX19dmFyIFB0PVpvO2FzeW5jIGZ1bmN0aW9uIFhvKGUsdD17fSl7bGV0IEE9W3t0eXBlOnAuSnNvbkNvbXBhdGlibGV9LHt0eXBlOnAuSW1hZ2V9XSxyPWU7aWYoZSBpbnN0YW5jZW9mIEZpbGUpe2xldCBkPWF3YWl0IGUuYXJyYXlCdWZmZXIoKTtyPXtwYXRoOmUubmFtZSxkYXRhOm5ldyBVaW50OEFycmF5KGQpfX1sZXQgbz1be3R5cGU6cC5CaW5hcnlGaWxlLGRhdGE6cn1dLGk9W10sbj1yLnBhdGg7aS5wdXNoKG4pLGkucHVzaCgiMCIpLGkucHVzaCgiMSIpLGkucHVzaCgiLS1tZW1vcnktaW8iKSx0LmluZm9ybWF0aW9uT25seSYmdC5pbmZvcm1hdGlvbk9ubHkmJmkucHVzaCgiLS1pbmZvcm1hdGlvbi1vbmx5Iik7bGV0IGw9Im1ldGEtcmVhZC1pbWFnZSIsYT10Py53ZWJXb3JrZXI7YT09PXZvaWQgMCYmKGE9YXdhaXQgUSgpKTtsZXR7d2ViV29ya2VyOmcscmV0dXJuVmFsdWU6dSxzdGRlcnI6cyxvdXRwdXRzOkl9PWF3YWl0IEUobCxpLEEsbyx7cGlwZWxpbmVCYXNlVXJsOnkoKSxwaXBlbGluZVdvcmtlclVybDpDKCksd2ViV29ya2VyOmEsbm9Db3B5OnQ/Lm5vQ29weX0pO2lmKHUhPT0wJiZzIT09IiIpdGhyb3cgbmV3IEVycm9yKHMpO3JldHVybnt3ZWJXb3JrZXI6Zyxjb3VsZFJlYWQ6SVswXT8uZGF0YSxpbWFnZTpJWzFdPy5kYXRhfX12YXIgeHQ9WG87YXN5bmMgZnVuY3Rpb24gJG8oZSx0LEE9e30pe2xldCByPVt7dHlwZTpwLkpzb25Db21wYXRpYmxlfSx7dHlwZTpwLkJpbmFyeUZpbGUsZGF0YTp7cGF0aDp0LGRhdGE6bmV3IFVpbnQ4QXJyYXl9fV0sbz1be3R5cGU6cC5JbWFnZSxkYXRhOmV9XSxpPVtdO2kucHVzaCgiMCIpLGkucHVzaCgiMCIpO2xldCBmPXQ7aS5wdXNoKGYpLGkucHVzaCgiLS1tZW1vcnktaW8iKSxBLmluZm9ybWF0aW9uT25seSYmQS5pbmZvcm1hdGlvbk9ubHkmJmkucHVzaCgiLS1pbmZvcm1hdGlvbi1vbmx5IiksQS51c2VDb21wcmVzc2lvbiYmQS51c2VDb21wcmVzc2lvbiYmaS5wdXNoKCItLXVzZS1jb21wcmVzc2lvbiIpO2xldCBsPSJtZXRhLXdyaXRlLWltYWdlIixhPUE/LndlYldvcmtlcjthPT09dm9pZCAwJiYoYT1hd2FpdCBRKCkpO2xldHt3ZWJXb3JrZXI6ZyxyZXR1cm5WYWx1ZTp1LHN0ZGVycjpzLG91dHB1dHM6SX09YXdhaXQgRShsLGkscixvLHtwaXBlbGluZUJhc2VVcmw6eSgpLHBpcGVsaW5lV29ya2VyVXJsOkMoKSx3ZWJXb3JrZXI6YSxub0NvcHk6QT8ubm9Db3B5fSk7aWYodSE9PTAmJnMhPT0iIil0aHJvdyBuZXcgRXJyb3Iocyk7cmV0dXJue3dlYldvcmtlcjpnLGNvdWxkV3JpdGU6SVswXT8uZGF0YSxzZXJpYWxpemVkSW1hZ2U6SVsxXT8uZGF0YX19dmFyIFR0PSRvO2FzeW5jIGZ1bmN0aW9uIGVhKGUsdD17fSl7bGV0IEE9W3t0eXBlOnAuSnNvbkNvbXBhdGlibGV9LHt0eXBlOnAuSW1hZ2V9XSxyPWU7aWYoZSBpbnN0YW5jZW9mIEZpbGUpe2xldCBkPWF3YWl0IGUuYXJyYXlCdWZmZXIoKTtyPXtwYXRoOmUubmFtZSxkYXRhOm5ldyBVaW50OEFycmF5KGQpfX1sZXQgbz1be3R5cGU6cC5CaW5hcnlGaWxlLGRhdGE6cn1dLGk9W10sbj1yLnBhdGg7aS5wdXNoKG4pLGkucHVzaCgiMCIpLGkucHVzaCgiMSIpLGkucHVzaCgiLS1tZW1vcnktaW8iKSx0LmluZm9ybWF0aW9uT25seSYmdC5pbmZvcm1hdGlvbk9ubHkmJmkucHVzaCgiLS1pbmZvcm1hdGlvbi1vbmx5Iik7bGV0IGw9InRpZmYtcmVhZC1pbWFnZSIsYT10Py53ZWJXb3JrZXI7YT09PXZvaWQgMCYmKGE9YXdhaXQgUSgpKTtsZXR7d2ViV29ya2VyOmcscmV0dXJuVmFsdWU6dSxzdGRlcnI6cyxvdXRwdXRzOkl9PWF3YWl0IEUobCxpLEEsbyx7cGlwZWxpbmVCYXNlVXJsOnkoKSxwaXBlbGluZVdvcmtlclVybDpDKCksd2ViV29ya2VyOmEsbm9Db3B5OnQ/Lm5vQ29weX0pO2lmKHUhPT0wJiZzIT09IiIpdGhyb3cgbmV3IEVycm9yKHMpO3JldHVybnt3ZWJXb3JrZXI6Zyxjb3VsZFJlYWQ6SVswXT8uZGF0YSxpbWFnZTpJWzFdPy5kYXRhfX12YXIgR3Q9ZWE7YXN5bmMgZnVuY3Rpb24gdGEoZSx0LEE9e30pe2xldCByPVt7dHlwZTpwLkpzb25Db21wYXRpYmxlfSx7dHlwZTpwLkJpbmFyeUZpbGUsZGF0YTp7cGF0aDp0LGRhdGE6bmV3IFVpbnQ4QXJyYXl9fV0sbz1be3R5cGU6cC5JbWFnZSxkYXRhOmV9XSxpPVtdO2kucHVzaCgiMCIpLGkucHVzaCgiMCIpO2xldCBmPXQ7aS5wdXNoKGYpLGkucHVzaCgiLS1tZW1vcnktaW8iKSxBLmluZm9ybWF0aW9uT25seSYmQS5pbmZvcm1hdGlvbk9ubHkmJmkucHVzaCgiLS1pbmZvcm1hdGlvbi1vbmx5IiksQS51c2VDb21wcmVzc2lvbiYmQS51c2VDb21wcmVzc2lvbiYmaS5wdXNoKCItLXVzZS1jb21wcmVzc2lvbiIpO2xldCBsPSJ0aWZmLXdyaXRlLWltYWdlIixhPUE/LndlYldvcmtlcjthPT09dm9pZCAwJiYoYT1hd2FpdCBRKCkpO2xldHt3ZWJXb3JrZXI6ZyxyZXR1cm5WYWx1ZTp1LHN0ZGVycjpzLG91dHB1dHM6SX09YXdhaXQgRShsLGkscixvLHtwaXBlbGluZUJhc2VVcmw6eSgpLHBpcGVsaW5lV29ya2VyVXJsOkMoKSx3ZWJXb3JrZXI6YSxub0NvcHk6QT8ubm9Db3B5fSk7aWYodSE9PTAmJnMhPT0iIil0aHJvdyBuZXcgRXJyb3Iocyk7cmV0dXJue3dlYldvcmtlcjpnLGNvdWxkV3JpdGU6SVswXT8uZGF0YSxzZXJpYWxpemVkSW1hZ2U6SVsxXT8uZGF0YX19dmFyIEx0PXRhO2FzeW5jIGZ1bmN0aW9uIEFhKGUsdD17fSl7bGV0IEE9W3t0eXBlOnAuSnNvbkNvbXBhdGlibGV9LHt0eXBlOnAuSW1hZ2V9XSxyPWU7aWYoZSBpbnN0YW5jZW9mIEZpbGUpe2xldCBkPWF3YWl0IGUuYXJyYXlCdWZmZXIoKTtyPXtwYXRoOmUubmFtZSxkYXRhOm5ldyBVaW50OEFycmF5KGQpfX1sZXQgbz1be3R5cGU6cC5CaW5hcnlGaWxlLGRhdGE6cn1dLGk9W10sbj1yLnBhdGg7aS5wdXNoKG4pLGkucHVzaCgiMCIpLGkucHVzaCgiMSIpLGkucHVzaCgiLS1tZW1vcnktaW8iKSx0LmluZm9ybWF0aW9uT25seSYmdC5pbmZvcm1hdGlvbk9ubHkmJmkucHVzaCgiLS1pbmZvcm1hdGlvbi1vbmx5Iik7bGV0IGw9Im5pZnRpLXJlYWQtaW1hZ2UiLGE9dD8ud2ViV29ya2VyO2E9PT12b2lkIDAmJihhPWF3YWl0IFEoKSk7bGV0e3dlYldvcmtlcjpnLHJldHVyblZhbHVlOnUsc3RkZXJyOnMsb3V0cHV0czpJfT1hd2FpdCBFKGwsaSxBLG8se3BpcGVsaW5lQmFzZVVybDp5KCkscGlwZWxpbmVXb3JrZXJVcmw6QygpLHdlYldvcmtlcjphLG5vQ29weTp0Py5ub0NvcHl9KTtpZih1IT09MCYmcyE9PSIiKXRocm93IG5ldyBFcnJvcihzKTtyZXR1cm57d2ViV29ya2VyOmcsY291bGRSZWFkOklbMF0/LmRhdGEsaW1hZ2U6SVsxXT8uZGF0YX19dmFyIEp0PUFhO2FzeW5jIGZ1bmN0aW9uIHJhKGUsdCxBPXt9KXtsZXQgcj1be3R5cGU6cC5Kc29uQ29tcGF0aWJsZX0se3R5cGU6cC5CaW5hcnlGaWxlLGRhdGE6e3BhdGg6dCxkYXRhOm5ldyBVaW50OEFycmF5fX1dLG89W3t0eXBlOnAuSW1hZ2UsZGF0YTplfV0saT1bXTtpLnB1c2goIjAiKSxpLnB1c2goIjAiKTtsZXQgZj10O2kucHVzaChmKSxpLnB1c2goIi0tbWVtb3J5LWlvIiksQS5pbmZvcm1hdGlvbk9ubHkmJkEuaW5mb3JtYXRpb25Pbmx5JiZpLnB1c2goIi0taW5mb3JtYXRpb24tb25seSIpLEEudXNlQ29tcHJlc3Npb24mJkEudXNlQ29tcHJlc3Npb24mJmkucHVzaCgiLS11c2UtY29tcHJlc3Npb24iKTtsZXQgbD0ibmlmdGktd3JpdGUtaW1hZ2UiLGE9QT8ud2ViV29ya2VyO2E9PT12b2lkIDAmJihhPWF3YWl0IFEoKSk7bGV0e3dlYldvcmtlcjpnLHJldHVyblZhbHVlOnUsc3RkZXJyOnMsb3V0cHV0czpJfT1hd2FpdCBFKGwsaSxyLG8se3BpcGVsaW5lQmFzZVVybDp5KCkscGlwZWxpbmVXb3JrZXJVcmw6QygpLHdlYldvcmtlcjphLG5vQ29weTpBPy5ub0NvcHl9KTtpZih1IT09MCYmcyE9PSIiKXRocm93IG5ldyBFcnJvcihzKTtyZXR1cm57d2ViV29ya2VyOmcsY291bGRXcml0ZTpJWzBdPy5kYXRhLHNlcmlhbGl6ZWRJbWFnZTpJWzFdPy5kYXRhfX12YXIgTXQ9cmE7YXN5bmMgZnVuY3Rpb24gaWEoZSx0PXt9KXtsZXQgQT1be3R5cGU6cC5Kc29uQ29tcGF0aWJsZX0se3R5cGU6cC5JbWFnZX1dLHI9ZTtpZihlIGluc3RhbmNlb2YgRmlsZSl7bGV0IGQ9YXdhaXQgZS5hcnJheUJ1ZmZlcigpO3I9e3BhdGg6ZS5uYW1lLGRhdGE6bmV3IFVpbnQ4QXJyYXkoZCl9fWxldCBvPVt7dHlwZTpwLkJpbmFyeUZpbGUsZGF0YTpyfV0saT1bXSxuPXIucGF0aDtpLnB1c2gobiksaS5wdXNoKCIwIiksaS5wdXNoKCIxIiksaS5wdXNoKCItLW1lbW9yeS1pbyIpLHQuaW5mb3JtYXRpb25Pbmx5JiZ0LmluZm9ybWF0aW9uT25seSYmaS5wdXNoKCItLWluZm9ybWF0aW9uLW9ubHkiKTtsZXQgbD0ianBlZy1yZWFkLWltYWdlIixhPXQ/LndlYldvcmtlcjthPT09dm9pZCAwJiYoYT1hd2FpdCBRKCkpO2xldHt3ZWJXb3JrZXI6ZyxyZXR1cm5WYWx1ZTp1LHN0ZGVycjpzLG91dHB1dHM6SX09YXdhaXQgRShsLGksQSxvLHtwaXBlbGluZUJhc2VVcmw6eSgpLHBpcGVsaW5lV29ya2VyVXJsOkMoKSx3ZWJXb3JrZXI6YSxub0NvcHk6dD8ubm9Db3B5fSk7aWYodSE9PTAmJnMhPT0iIil0aHJvdyBuZXcgRXJyb3Iocyk7cmV0dXJue3dlYldvcmtlcjpnLGNvdWxkUmVhZDpJWzBdPy5kYXRhLGltYWdlOklbMV0/LmRhdGF9fXZhciBIdD1pYTthc3luYyBmdW5jdGlvbiBvYShlLHQsQT17fSl7bGV0IHI9W3t0eXBlOnAuSnNvbkNvbXBhdGlibGV9LHt0eXBlOnAuQmluYXJ5RmlsZSxkYXRhOntwYXRoOnQsZGF0YTpuZXcgVWludDhBcnJheX19XSxvPVt7dHlwZTpwLkltYWdlLGRhdGE6ZX1dLGk9W107aS5wdXNoKCIwIiksaS5wdXNoKCIwIik7bGV0IGY9dDtpLnB1c2goZiksaS5wdXNoKCItLW1lbW9yeS1pbyIpLEEuaW5mb3JtYXRpb25Pbmx5JiZBLmluZm9ybWF0aW9uT25seSYmaS5wdXNoKCItLWluZm9ybWF0aW9uLW9ubHkiKSxBLnVzZUNvbXByZXNzaW9uJiZBLnVzZUNvbXByZXNzaW9uJiZpLnB1c2goIi0tdXNlLWNvbXByZXNzaW9uIik7bGV0IGw9ImpwZWctd3JpdGUtaW1hZ2UiLGE9QT8ud2ViV29ya2VyO2E9PT12b2lkIDAmJihhPWF3YWl0IFEoKSk7bGV0e3dlYldvcmtlcjpnLHJldHVyblZhbHVlOnUsc3RkZXJyOnMsb3V0cHV0czpJfT1hd2FpdCBFKGwsaSxyLG8se3BpcGVsaW5lQmFzZVVybDp5KCkscGlwZWxpbmVXb3JrZXJVcmw6QygpLHdlYldvcmtlcjphLG5vQ29weTpBPy5ub0NvcHl9KTtpZih1IT09MCYmcyE9PSIiKXRocm93IG5ldyBFcnJvcihzKTtyZXR1cm57d2ViV29ya2VyOmcsY291bGRXcml0ZTpJWzBdPy5kYXRhLHNlcmlhbGl6ZWRJbWFnZTpJWzFdPy5kYXRhfX12YXIgcXQ9b2E7YXN5bmMgZnVuY3Rpb24gYWEoZSx0PXt9KXtsZXQgQT1be3R5cGU6cC5Kc29uQ29tcGF0aWJsZX0se3R5cGU6cC5JbWFnZX1dLHI9ZTtpZihlIGluc3RhbmNlb2YgRmlsZSl7bGV0IGQ9YXdhaXQgZS5hcnJheUJ1ZmZlcigpO3I9e3BhdGg6ZS5uYW1lLGRhdGE6bmV3IFVpbnQ4QXJyYXkoZCl9fWxldCBvPVt7dHlwZTpwLkJpbmFyeUZpbGUsZGF0YTpyfV0saT1bXSxuPXIucGF0aDtpLnB1c2gobiksaS5wdXNoKCIwIiksaS5wdXNoKCIxIiksaS5wdXNoKCItLW1lbW9yeS1pbyIpLHQuaW5mb3JtYXRpb25Pbmx5JiZ0LmluZm9ybWF0aW9uT25seSYmaS5wdXNoKCItLWluZm9ybWF0aW9uLW9ubHkiKTtsZXQgbD0ibnJyZC1yZWFkLWltYWdlIixhPXQ/LndlYldvcmtlcjthPT09dm9pZCAwJiYoYT1hd2FpdCBRKCkpO2xldHt3ZWJXb3JrZXI6ZyxyZXR1cm5WYWx1ZTp1LHN0ZGVycjpzLG91dHB1dHM6SX09YXdhaXQgRShsLGksQSxvLHtwaXBlbGluZUJhc2VVcmw6eSgpLHBpcGVsaW5lV29ya2VyVXJsOkMoKSx3ZWJXb3JrZXI6YSxub0NvcHk6dD8ubm9Db3B5fSk7aWYodSE9PTAmJnMhPT0iIil0aHJvdyBuZXcgRXJyb3Iocyk7cmV0dXJue3dlYldvcmtlcjpnLGNvdWxkUmVhZDpJWzBdPy5kYXRhLGltYWdlOklbMV0/LmRhdGF9fXZhciBZdD1hYTthc3luYyBmdW5jdGlvbiBuYShlLHQsQT17fSl7bGV0IHI9W3t0eXBlOnAuSnNvbkNvbXBhdGlibGV9LHt0eXBlOnAuQmluYXJ5RmlsZSxkYXRhOntwYXRoOnQsZGF0YTpuZXcgVWludDhBcnJheX19XSxvPVt7dHlwZTpwLkltYWdlLGRhdGE6ZX1dLGk9W107aS5wdXNoKCIwIiksaS5wdXNoKCIwIik7bGV0IGY9dDtpLnB1c2goZiksaS5wdXNoKCItLW1lbW9yeS1pbyIpLEEuaW5mb3JtYXRpb25Pbmx5JiZBLmluZm9ybWF0aW9uT25seSYmaS5wdXNoKCItLWluZm9ybWF0aW9uLW9ubHkiKSxBLnVzZUNvbXByZXNzaW9uJiZBLnVzZUNvbXByZXNzaW9uJiZpLnB1c2goIi0tdXNlLWNvbXByZXNzaW9uIik7bGV0IGw9Im5ycmQtd3JpdGUtaW1hZ2UiLGE9QT8ud2ViV29ya2VyO2E9PT12b2lkIDAmJihhPWF3YWl0IFEoKSk7bGV0e3dlYldvcmtlcjpnLHJldHVyblZhbHVlOnUsc3RkZXJyOnMsb3V0cHV0czpJfT1hd2FpdCBFKGwsaSxyLG8se3BpcGVsaW5lQmFzZVVybDp5KCkscGlwZWxpbmVXb3JrZXJVcmw6QygpLHdlYldvcmtlcjphLG5vQ29weTpBPy5ub0NvcHl9KTtpZih1IT09MCYmcyE9PSIiKXRocm93IG5ldyBFcnJvcihzKTtyZXR1cm57d2ViV29ya2VyOmcsY291bGRXcml0ZTpJWzBdPy5kYXRhLHNlcmlhbGl6ZWRJbWFnZTpJWzFdPy5kYXRhfX12YXIgS3Q9bmE7YXN5bmMgZnVuY3Rpb24gc2EoZSx0PXt9KXtsZXQgQT1be3R5cGU6cC5Kc29uQ29tcGF0aWJsZX0se3R5cGU6cC5JbWFnZX1dLHI9ZTtpZihlIGluc3RhbmNlb2YgRmlsZSl7bGV0IGQ9YXdhaXQgZS5hcnJheUJ1ZmZlcigpO3I9e3BhdGg6ZS5uYW1lLGRhdGE6bmV3IFVpbnQ4QXJyYXkoZCl9fWxldCBvPVt7dHlwZTpwLkJpbmFyeUZpbGUsZGF0YTpyfV0saT1bXSxuPXIucGF0aDtpLnB1c2gobiksaS5wdXNoKCIwIiksaS5wdXNoKCIxIiksaS5wdXNoKCItLW1lbW9yeS1pbyIpLHQuaW5mb3JtYXRpb25Pbmx5JiZ0LmluZm9ybWF0aW9uT25seSYmaS5wdXNoKCItLWluZm9ybWF0aW9uLW9ubHkiKTtsZXQgbD0idnRrLXJlYWQtaW1hZ2UiLGE9dD8ud2ViV29ya2VyO2E9PT12b2lkIDAmJihhPWF3YWl0IFEoKSk7bGV0e3dlYldvcmtlcjpnLHJldHVyblZhbHVlOnUsc3RkZXJyOnMsb3V0cHV0czpJfT1hd2FpdCBFKGwsaSxBLG8se3BpcGVsaW5lQmFzZVVybDp5KCkscGlwZWxpbmVXb3JrZXJVcmw6QygpLHdlYldvcmtlcjphLG5vQ29weTp0Py5ub0NvcHl9KTtpZih1IT09MCYmcyE9PSIiKXRocm93IG5ldyBFcnJvcihzKTtyZXR1cm57d2ViV29ya2VyOmcsY291bGRSZWFkOklbMF0/LmRhdGEsaW1hZ2U6SVsxXT8uZGF0YX19dmFyIHZ0PXNhO2FzeW5jIGZ1bmN0aW9uIGdhKGUsdCxBPXt9KXtsZXQgcj1be3R5cGU6cC5Kc29uQ29tcGF0aWJsZX0se3R5cGU6cC5CaW5hcnlGaWxlLGRhdGE6e3BhdGg6dCxkYXRhOm5ldyBVaW50OEFycmF5fX1dLG89W3t0eXBlOnAuSW1hZ2UsZGF0YTplfV0saT1bXTtpLnB1c2goIjAiKSxpLnB1c2goIjAiKTtsZXQgZj10O2kucHVzaChmKSxpLnB1c2goIi0tbWVtb3J5LWlvIiksQS5pbmZvcm1hdGlvbk9ubHkmJkEuaW5mb3JtYXRpb25Pbmx5JiZpLnB1c2goIi0taW5mb3JtYXRpb24tb25seSIpLEEudXNlQ29tcHJlc3Npb24mJkEudXNlQ29tcHJlc3Npb24mJmkucHVzaCgiLS11c2UtY29tcHJlc3Npb24iKTtsZXQgbD0idnRrLXdyaXRlLWltYWdlIixhPUE/LndlYldvcmtlcjthPT09dm9pZCAwJiYoYT1hd2FpdCBRKCkpO2xldHt3ZWJXb3JrZXI6ZyxyZXR1cm5WYWx1ZTp1LHN0ZGVycjpzLG91dHB1dHM6SX09YXdhaXQgRShsLGkscixvLHtwaXBlbGluZUJhc2VVcmw6eSgpLHBpcGVsaW5lV29ya2VyVXJsOkMoKSx3ZWJXb3JrZXI6YSxub0NvcHk6QT8ubm9Db3B5fSk7aWYodSE9PTAmJnMhPT0iIil0aHJvdyBuZXcgRXJyb3Iocyk7cmV0dXJue3dlYldvcmtlcjpnLGNvdWxkV3JpdGU6SVswXT8uZGF0YSxzZXJpYWxpemVkSW1hZ2U6SVsxXT8uZGF0YX19dmFyIGp0PWdhO2FzeW5jIGZ1bmN0aW9uIGxhKGUsdD17fSl7bGV0IEE9W3t0eXBlOnAuSnNvbkNvbXBhdGlibGV9LHt0eXBlOnAuSW1hZ2V9XSxyPWU7aWYoZSBpbnN0YW5jZW9mIEZpbGUpe2xldCBkPWF3YWl0IGUuYXJyYXlCdWZmZXIoKTtyPXtwYXRoOmUubmFtZSxkYXRhOm5ldyBVaW50OEFycmF5KGQpfX1sZXQgbz1be3R5cGU6cC5CaW5hcnlGaWxlLGRhdGE6cn1dLGk9W10sbj1yLnBhdGg7aS5wdXNoKG4pLGkucHVzaCgiMCIpLGkucHVzaCgiMSIpLGkucHVzaCgiLS1tZW1vcnktaW8iKSx0LmluZm9ybWF0aW9uT25seSYmdC5pbmZvcm1hdGlvbk9ubHkmJmkucHVzaCgiLS1pbmZvcm1hdGlvbi1vbmx5Iik7bGV0IGw9ImJtcC1yZWFkLWltYWdlIixhPXQ/LndlYldvcmtlcjthPT09dm9pZCAwJiYoYT1hd2FpdCBRKCkpO2xldHt3ZWJXb3JrZXI6ZyxyZXR1cm5WYWx1ZTp1LHN0ZGVycjpzLG91dHB1dHM6SX09YXdhaXQgRShsLGksQSxvLHtwaXBlbGluZUJhc2VVcmw6eSgpLHBpcGVsaW5lV29ya2VyVXJsOkMoKSx3ZWJXb3JrZXI6YSxub0NvcHk6dD8ubm9Db3B5fSk7aWYodSE9PTAmJnMhPT0iIil0aHJvdyBuZXcgRXJyb3Iocyk7cmV0dXJue3dlYldvcmtlcjpnLGNvdWxkUmVhZDpJWzBdPy5kYXRhLGltYWdlOklbMV0/LmRhdGF9fXZhciBfdD1sYTthc3luYyBmdW5jdGlvbiBJYShlLHQsQT17fSl7bGV0IHI9W3t0eXBlOnAuSnNvbkNvbXBhdGlibGV9LHt0eXBlOnAuQmluYXJ5RmlsZSxkYXRhOntwYXRoOnQsZGF0YTpuZXcgVWludDhBcnJheX19XSxvPVt7dHlwZTpwLkltYWdlLGRhdGE6ZX1dLGk9W107aS5wdXNoKCIwIiksaS5wdXNoKCIwIik7bGV0IGY9dDtpLnB1c2goZiksaS5wdXNoKCItLW1lbW9yeS1pbyIpLEEuaW5mb3JtYXRpb25Pbmx5JiZBLmluZm9ybWF0aW9uT25seSYmaS5wdXNoKCItLWluZm9ybWF0aW9uLW9ubHkiKSxBLnVzZUNvbXByZXNzaW9uJiZBLnVzZUNvbXByZXNzaW9uJiZpLnB1c2goIi0tdXNlLWNvbXByZXNzaW9uIik7bGV0IGw9ImJtcC13cml0ZS1pbWFnZSIsYT1BPy53ZWJXb3JrZXI7YT09PXZvaWQgMCYmKGE9YXdhaXQgUSgpKTtsZXR7d2ViV29ya2VyOmcscmV0dXJuVmFsdWU6dSxzdGRlcnI6cyxvdXRwdXRzOkl9PWF3YWl0IEUobCxpLHIsbyx7cGlwZWxpbmVCYXNlVXJsOnkoKSxwaXBlbGluZVdvcmtlclVybDpDKCksd2ViV29ya2VyOmEsbm9Db3B5OkE/Lm5vQ29weX0pO2lmKHUhPT0wJiZzIT09IiIpdGhyb3cgbmV3IEVycm9yKHMpO3JldHVybnt3ZWJXb3JrZXI6Zyxjb3VsZFdyaXRlOklbMF0/LmRhdGEsc2VyaWFsaXplZEltYWdlOklbMV0/LmRhdGF9fXZhciB6dD1JYTthc3luYyBmdW5jdGlvbiBwYShlLHQ9e30pe2xldCBBPVt7dHlwZTpwLkpzb25Db21wYXRpYmxlfSx7dHlwZTpwLkltYWdlfV0scj1lO2lmKGUgaW5zdGFuY2VvZiBGaWxlKXtsZXQgZD1hd2FpdCBlLmFycmF5QnVmZmVyKCk7cj17cGF0aDplLm5hbWUsZGF0YTpuZXcgVWludDhBcnJheShkKX19bGV0IG89W3t0eXBlOnAuQmluYXJ5RmlsZSxkYXRhOnJ9XSxpPVtdLG49ci5wYXRoO2kucHVzaChuKSxpLnB1c2goIjAiKSxpLnB1c2goIjEiKSxpLnB1c2goIi0tbWVtb3J5LWlvIiksdC5pbmZvcm1hdGlvbk9ubHkmJnQuaW5mb3JtYXRpb25Pbmx5JiZpLnB1c2goIi0taW5mb3JtYXRpb24tb25seSIpO2xldCBsPSJoZGY1LXJlYWQtaW1hZ2UiLGE9dD8ud2ViV29ya2VyO2E9PT12b2lkIDAmJihhPWF3YWl0IFEoKSk7bGV0e3dlYldvcmtlcjpnLHJldHVyblZhbHVlOnUsc3RkZXJyOnMsb3V0cHV0czpJfT1hd2FpdCBFKGwsaSxBLG8se3BpcGVsaW5lQmFzZVVybDp5KCkscGlwZWxpbmVXb3JrZXJVcmw6QygpLHdlYldvcmtlcjphLG5vQ29weTp0Py5ub0NvcHl9KTtpZih1IT09MCYmcyE9PSIiKXRocm93IG5ldyBFcnJvcihzKTtyZXR1cm57d2ViV29ya2VyOmcsY291bGRSZWFkOklbMF0/LmRhdGEsaW1hZ2U6SVsxXT8uZGF0YX19dmFyIFZ0PXBhO2FzeW5jIGZ1bmN0aW9uIG1hKGUsdCxBPXt9KXtsZXQgcj1be3R5cGU6cC5Kc29uQ29tcGF0aWJsZX0se3R5cGU6cC5CaW5hcnlGaWxlLGRhdGE6e3BhdGg6dCxkYXRhOm5ldyBVaW50OEFycmF5fX1dLG89W3t0eXBlOnAuSW1hZ2UsZGF0YTplfV0saT1bXTtpLnB1c2goIjAiKSxpLnB1c2goIjAiKTtsZXQgZj10O2kucHVzaChmKSxpLnB1c2goIi0tbWVtb3J5LWlvIiksQS5pbmZvcm1hdGlvbk9ubHkmJkEuaW5mb3JtYXRpb25Pbmx5JiZpLnB1c2goIi0taW5mb3JtYXRpb24tb25seSIpLEEudXNlQ29tcHJlc3Npb24mJkEudXNlQ29tcHJlc3Npb24mJmkucHVzaCgiLS11c2UtY29tcHJlc3Npb24iKTtsZXQgbD0iaGRmNS13cml0ZS1pbWFnZSIsYT1BPy53ZWJXb3JrZXI7YT09PXZvaWQgMCYmKGE9YXdhaXQgUSgpKTtsZXR7d2ViV29ya2VyOmcscmV0dXJuVmFsdWU6dSxzdGRlcnI6cyxvdXRwdXRzOkl9PWF3YWl0IEUobCxpLHIsbyx7cGlwZWxpbmVCYXNlVXJsOnkoKSxwaXBlbGluZVdvcmtlclVybDpDKCksd2ViV29ya2VyOmEsbm9Db3B5OkE/Lm5vQ29weX0pO2lmKHUhPT0wJiZzIT09IiIpdGhyb3cgbmV3IEVycm9yKHMpO3JldHVybnt3ZWJXb3JrZXI6Zyxjb3VsZFdyaXRlOklbMF0/LmRhdGEsc2VyaWFsaXplZEltYWdlOklbMV0/LmRhdGF9fXZhciBadD1tYTthc3luYyBmdW5jdGlvbiB1YShlLHQ9e30pe2xldCBBPVt7dHlwZTpwLkpzb25Db21wYXRpYmxlfSx7dHlwZTpwLkltYWdlfV0scj1lO2lmKGUgaW5zdGFuY2VvZiBGaWxlKXtsZXQgZD1hd2FpdCBlLmFycmF5QnVmZmVyKCk7cj17cGF0aDplLm5hbWUsZGF0YTpuZXcgVWludDhBcnJheShkKX19bGV0IG89W3t0eXBlOnAuQmluYXJ5RmlsZSxkYXRhOnJ9XSxpPVtdLG49ci5wYXRoO2kucHVzaChuKSxpLnB1c2goIjAiKSxpLnB1c2goIjEiKSxpLnB1c2goIi0tbWVtb3J5LWlvIiksdC5pbmZvcm1hdGlvbk9ubHkmJnQuaW5mb3JtYXRpb25Pbmx5JiZpLnB1c2goIi0taW5mb3JtYXRpb24tb25seSIpO2xldCBsPSJtaW5jLXJlYWQtaW1hZ2UiLGE9dD8ud2ViV29ya2VyO2E9PT12b2lkIDAmJihhPWF3YWl0IFEoKSk7bGV0e3dlYldvcmtlcjpnLHJldHVyblZhbHVlOnUsc3RkZXJyOnMsb3V0cHV0czpJfT1hd2FpdCBFKGwsaSxBLG8se3BpcGVsaW5lQmFzZVVybDp5KCkscGlwZWxpbmVXb3JrZXJVcmw6QygpLHdlYldvcmtlcjphLG5vQ29weTp0Py5ub0NvcHl9KTtpZih1IT09MCYmcyE9PSIiKXRocm93IG5ldyBFcnJvcihzKTtyZXR1cm57d2ViV29ya2VyOmcsY291bGRSZWFkOklbMF0/LmRhdGEsaW1hZ2U6SVsxXT8uZGF0YX19dmFyIFh0PXVhO2FzeW5jIGZ1bmN0aW9uIGZhKGUsdCxBPXt9KXtsZXQgcj1be3R5cGU6cC5Kc29uQ29tcGF0aWJsZX0se3R5cGU6cC5CaW5hcnlGaWxlLGRhdGE6e3BhdGg6dCxkYXRhOm5ldyBVaW50OEFycmF5fX1dLG89W3t0eXBlOnAuSW1hZ2UsZGF0YTplfV0saT1bXTtpLnB1c2goIjAiKSxpLnB1c2goIjAiKTtsZXQgZj10O2kucHVzaChmKSxpLnB1c2goIi0tbWVtb3J5LWlvIiksQS5pbmZvcm1hdGlvbk9ubHkmJkEuaW5mb3JtYXRpb25Pbmx5JiZpLnB1c2goIi0taW5mb3JtYXRpb24tb25seSIpLEEudXNlQ29tcHJlc3Npb24mJkEudXNlQ29tcHJlc3Npb24mJmkucHVzaCgiLS11c2UtY29tcHJlc3Npb24iKTtsZXQgbD0ibWluYy13cml0ZS1pbWFnZSIsYT1BPy53ZWJXb3JrZXI7YT09PXZvaWQgMCYmKGE9YXdhaXQgUSgpKTtsZXR7d2ViV29ya2VyOmcscmV0dXJuVmFsdWU6dSxzdGRlcnI6cyxvdXRwdXRzOkl9PWF3YWl0IEUobCxpLHIsbyx7cGlwZWxpbmVCYXNlVXJsOnkoKSxwaXBlbGluZVdvcmtlclVybDpDKCksd2ViV29ya2VyOmEsbm9Db3B5OkE/Lm5vQ29weX0pO2lmKHUhPT0wJiZzIT09IiIpdGhyb3cgbmV3IEVycm9yKHMpO3JldHVybnt3ZWJXb3JrZXI6Zyxjb3VsZFdyaXRlOklbMF0/LmRhdGEsc2VyaWFsaXplZEltYWdlOklbMV0/LmRhdGF9fXZhciAkdD1mYTthc3luYyBmdW5jdGlvbiBjYShlLHQ9e30pe2xldCBBPVt7dHlwZTpwLkpzb25Db21wYXRpYmxlfSx7dHlwZTpwLkltYWdlfV0scj1lO2lmKGUgaW5zdGFuY2VvZiBGaWxlKXtsZXQgZD1hd2FpdCBlLmFycmF5QnVmZmVyKCk7cj17cGF0aDplLm5hbWUsZGF0YTpuZXcgVWludDhBcnJheShkKX19bGV0IG89W3t0eXBlOnAuQmluYXJ5RmlsZSxkYXRhOnJ9XSxpPVtdLG49ci5wYXRoO2kucHVzaChuKSxpLnB1c2goIjAiKSxpLnB1c2goIjEiKSxpLnB1c2goIi0tbWVtb3J5LWlvIiksdC5pbmZvcm1hdGlvbk9ubHkmJnQuaW5mb3JtYXRpb25Pbmx5JiZpLnB1c2goIi0taW5mb3JtYXRpb24tb25seSIpO2xldCBsPSJtcmMtcmVhZC1pbWFnZSIsYT10Py53ZWJXb3JrZXI7YT09PXZvaWQgMCYmKGE9YXdhaXQgUSgpKTtsZXR7d2ViV29ya2VyOmcscmV0dXJuVmFsdWU6dSxzdGRlcnI6cyxvdXRwdXRzOkl9PWF3YWl0IEUobCxpLEEsbyx7cGlwZWxpbmVCYXNlVXJsOnkoKSxwaXBlbGluZVdvcmtlclVybDpDKCksd2ViV29ya2VyOmEsbm9Db3B5OnQ/Lm5vQ29weX0pO2lmKHUhPT0wJiZzIT09IiIpdGhyb3cgbmV3IEVycm9yKHMpO3JldHVybnt3ZWJXb3JrZXI6Zyxjb3VsZFJlYWQ6SVswXT8uZGF0YSxpbWFnZTpJWzFdPy5kYXRhfX12YXIgZUE9Y2E7YXN5bmMgZnVuY3Rpb24gZGEoZSx0LEE9e30pe2xldCByPVt7dHlwZTpwLkpzb25Db21wYXRpYmxlfSx7dHlwZTpwLkJpbmFyeUZpbGUsZGF0YTp7cGF0aDp0LGRhdGE6bmV3IFVpbnQ4QXJyYXl9fV0sbz1be3R5cGU6cC5JbWFnZSxkYXRhOmV9XSxpPVtdO2kucHVzaCgiMCIpLGkucHVzaCgiMCIpO2xldCBmPXQ7aS5wdXNoKGYpLGkucHVzaCgiLS1tZW1vcnktaW8iKSxBLmluZm9ybWF0aW9uT25seSYmQS5pbmZvcm1hdGlvbk9ubHkmJmkucHVzaCgiLS1pbmZvcm1hdGlvbi1vbmx5IiksQS51c2VDb21wcmVzc2lvbiYmQS51c2VDb21wcmVzc2lvbiYmaS5wdXNoKCItLXVzZS1jb21wcmVzc2lvbiIpO2xldCBsPSJtcmMtd3JpdGUtaW1hZ2UiLGE9QT8ud2ViV29ya2VyO2E9PT12b2lkIDAmJihhPWF3YWl0IFEoKSk7bGV0e3dlYldvcmtlcjpnLHJldHVyblZhbHVlOnUsc3RkZXJyOnMsb3V0cHV0czpJfT1hd2FpdCBFKGwsaSxyLG8se3BpcGVsaW5lQmFzZVVybDp5KCkscGlwZWxpbmVXb3JrZXJVcmw6QygpLHdlYldvcmtlcjphLG5vQ29weTpBPy5ub0NvcHl9KTtpZih1IT09MCYmcyE9PSIiKXRocm93IG5ldyBFcnJvcihzKTtyZXR1cm57d2ViV29ya2VyOmcsY291bGRXcml0ZTpJWzBdPy5kYXRhLHNlcmlhbGl6ZWRJbWFnZTpJWzFdPy5kYXRhfX12YXIgdEE9ZGE7YXN5bmMgZnVuY3Rpb24gQmEoZSx0PXt9KXtsZXQgQT1be3R5cGU6cC5Kc29uQ29tcGF0aWJsZX0se3R5cGU6cC5JbWFnZX1dLHI9ZTtpZihlIGluc3RhbmNlb2YgRmlsZSl7bGV0IGQ9YXdhaXQgZS5hcnJheUJ1ZmZlcigpO3I9e3BhdGg6ZS5uYW1lLGRhdGE6bmV3IFVpbnQ4QXJyYXkoZCl9fWxldCBvPVt7dHlwZTpwLkJpbmFyeUZpbGUsZGF0YTpyfV0saT1bXSxuPXIucGF0aDtpLnB1c2gobiksaS5wdXNoKCIwIiksaS5wdXNoKCIxIiksaS5wdXNoKCItLW1lbW9yeS1pbyIpLHQuaW5mb3JtYXRpb25Pbmx5JiZ0LmluZm9ybWF0aW9uT25seSYmaS5wdXNoKCItLWluZm9ybWF0aW9uLW9ubHkiKTtsZXQgbD0ibHNtLXJlYWQtaW1hZ2UiLGE9dD8ud2ViV29ya2VyO2E9PT12b2lkIDAmJihhPWF3YWl0IFEoKSk7bGV0e3dlYldvcmtlcjpnLHJldHVyblZhbHVlOnUsc3RkZXJyOnMsb3V0cHV0czpJfT1hd2FpdCBFKGwsaSxBLG8se3BpcGVsaW5lQmFzZVVybDp5KCkscGlwZWxpbmVXb3JrZXJVcmw6QygpLHdlYldvcmtlcjphLG5vQ29weTp0Py5ub0NvcHl9KTtpZih1IT09MCYmcyE9PSIiKXRocm93IG5ldyBFcnJvcihzKTtyZXR1cm57d2ViV29ya2VyOmcsY291bGRSZWFkOklbMF0/LmRhdGEsaW1hZ2U6SVsxXT8uZGF0YX19dmFyIEFBPUJhO2FzeW5jIGZ1bmN0aW9uIENhKGUsdCxBPXt9KXtsZXQgcj1be3R5cGU6cC5Kc29uQ29tcGF0aWJsZX0se3R5cGU6cC5CaW5hcnlGaWxlLGRhdGE6e3BhdGg6dCxkYXRhOm5ldyBVaW50OEFycmF5fX1dLG89W3t0eXBlOnAuSW1hZ2UsZGF0YTplfV0saT1bXTtpLnB1c2goIjAiKSxpLnB1c2goIjAiKTtsZXQgZj10O2kucHVzaChmKSxpLnB1c2goIi0tbWVtb3J5LWlvIiksQS5pbmZvcm1hdGlvbk9ubHkmJkEuaW5mb3JtYXRpb25Pbmx5JiZpLnB1c2goIi0taW5mb3JtYXRpb24tb25seSIpLEEudXNlQ29tcHJlc3Npb24mJkEudXNlQ29tcHJlc3Npb24mJmkucHVzaCgiLS11c2UtY29tcHJlc3Npb24iKTtsZXQgbD0ibHNtLXdyaXRlLWltYWdlIixhPUE/LndlYldvcmtlcjthPT09dm9pZCAwJiYoYT1hd2FpdCBRKCkpO2xldHt3ZWJXb3JrZXI6ZyxyZXR1cm5WYWx1ZTp1LHN0ZGVycjpzLG91dHB1dHM6SX09YXdhaXQgRShsLGkscixvLHtwaXBlbGluZUJhc2VVcmw6eSgpLHBpcGVsaW5lV29ya2VyVXJsOkMoKSx3ZWJXb3JrZXI6YSxub0NvcHk6QT8ubm9Db3B5fSk7aWYodSE9PTAmJnMhPT0iIil0aHJvdyBuZXcgRXJyb3Iocyk7cmV0dXJue3dlYldvcmtlcjpnLGNvdWxkV3JpdGU6SVswXT8uZGF0YSxzZXJpYWxpemVkSW1hZ2U6SVsxXT8uZGF0YX19dmFyIHJBPUNhO2FzeW5jIGZ1bmN0aW9uIEVhKGUsdD17fSl7bGV0IEE9W3t0eXBlOnAuSnNvbkNvbXBhdGlibGV9LHt0eXBlOnAuSW1hZ2V9XSxyPWU7aWYoZSBpbnN0YW5jZW9mIEZpbGUpe2xldCBkPWF3YWl0IGUuYXJyYXlCdWZmZXIoKTtyPXtwYXRoOmUubmFtZSxkYXRhOm5ldyBVaW50OEFycmF5KGQpfX1sZXQgbz1be3R5cGU6cC5CaW5hcnlGaWxlLGRhdGE6cn1dLGk9W10sbj1yLnBhdGg7aS5wdXNoKG4pLGkucHVzaCgiMCIpLGkucHVzaCgiMSIpLGkucHVzaCgiLS1tZW1vcnktaW8iKSx0LmluZm9ybWF0aW9uT25seSYmdC5pbmZvcm1hdGlvbk9ubHkmJmkucHVzaCgiLS1pbmZvcm1hdGlvbi1vbmx5Iik7bGV0IGw9Im1naC1yZWFkLWltYWdlIixhPXQ/LndlYldvcmtlcjthPT09dm9pZCAwJiYoYT1hd2FpdCBRKCkpO2xldHt3ZWJXb3JrZXI6ZyxyZXR1cm5WYWx1ZTp1LHN0ZGVycjpzLG91dHB1dHM6SX09YXdhaXQgRShsLGksQSxvLHtwaXBlbGluZUJhc2VVcmw6eSgpLHBpcGVsaW5lV29ya2VyVXJsOkMoKSx3ZWJXb3JrZXI6YSxub0NvcHk6dD8ubm9Db3B5fSk7aWYodSE9PTAmJnMhPT0iIil0aHJvdyBuZXcgRXJyb3Iocyk7cmV0dXJue3dlYldvcmtlcjpnLGNvdWxkUmVhZDpJWzBdPy5kYXRhLGltYWdlOklbMV0/LmRhdGF9fXZhciBpQT1FYTthc3luYyBmdW5jdGlvbiB5YShlLHQsQT17fSl7bGV0IHI9W3t0eXBlOnAuSnNvbkNvbXBhdGlibGV9LHt0eXBlOnAuQmluYXJ5RmlsZSxkYXRhOntwYXRoOnQsZGF0YTpuZXcgVWludDhBcnJheX19XSxvPVt7dHlwZTpwLkltYWdlLGRhdGE6ZX1dLGk9W107aS5wdXNoKCIwIiksaS5wdXNoKCIwIik7bGV0IGY9dDtpLnB1c2goZiksaS5wdXNoKCItLW1lbW9yeS1pbyIpLEEuaW5mb3JtYXRpb25Pbmx5JiZBLmluZm9ybWF0aW9uT25seSYmaS5wdXNoKCItLWluZm9ybWF0aW9uLW9ubHkiKSxBLnVzZUNvbXByZXNzaW9uJiZBLnVzZUNvbXByZXNzaW9uJiZpLnB1c2goIi0tdXNlLWNvbXByZXNzaW9uIik7bGV0IGw9Im1naC13cml0ZS1pbWFnZSIsYT1BPy53ZWJXb3JrZXI7YT09PXZvaWQgMCYmKGE9YXdhaXQgUSgpKTtsZXR7d2ViV29ya2VyOmcscmV0dXJuVmFsdWU6dSxzdGRlcnI6cyxvdXRwdXRzOkl9PWF3YWl0IEUobCxpLHIsbyx7cGlwZWxpbmVCYXNlVXJsOnkoKSxwaXBlbGluZVdvcmtlclVybDpDKCksd2ViV29ya2VyOmEsbm9Db3B5OkE/Lm5vQ29weX0pO2lmKHUhPT0wJiZzIT09IiIpdGhyb3cgbmV3IEVycm9yKHMpO3JldHVybnt3ZWJXb3JrZXI6Zyxjb3VsZFdyaXRlOklbMF0/LmRhdGEsc2VyaWFsaXplZEltYWdlOklbMV0/LmRhdGF9fXZhciBvQT15YTthc3luYyBmdW5jdGlvbiBRYShlLHQ9e30pe2xldCBBPVt7dHlwZTpwLkpzb25Db21wYXRpYmxlfSx7dHlwZTpwLkltYWdlfV0scj1lO2lmKGUgaW5zdGFuY2VvZiBGaWxlKXtsZXQgZD1hd2FpdCBlLmFycmF5QnVmZmVyKCk7cj17cGF0aDplLm5hbWUsZGF0YTpuZXcgVWludDhBcnJheShkKX19bGV0IG89W3t0eXBlOnAuQmluYXJ5RmlsZSxkYXRhOnJ9XSxpPVtdLG49ci5wYXRoO2kucHVzaChuKSxpLnB1c2goIjAiKSxpLnB1c2goIjEiKSxpLnB1c2goIi0tbWVtb3J5LWlvIiksdC5pbmZvcm1hdGlvbk9ubHkmJnQuaW5mb3JtYXRpb25Pbmx5JiZpLnB1c2goIi0taW5mb3JtYXRpb24tb25seSIpO2xldCBsPSJiaW8tcmFkLXJlYWQtaW1hZ2UiLGE9dD8ud2ViV29ya2VyO2E9PT12b2lkIDAmJihhPWF3YWl0IFEoKSk7bGV0e3dlYldvcmtlcjpnLHJldHVyblZhbHVlOnUsc3RkZXJyOnMsb3V0cHV0czpJfT1hd2FpdCBFKGwsaSxBLG8se3BpcGVsaW5lQmFzZVVybDp5KCkscGlwZWxpbmVXb3JrZXJVcmw6QygpLHdlYldvcmtlcjphLG5vQ29weTp0Py5ub0NvcHl9KTtpZih1IT09MCYmcyE9PSIiKXRocm93IG5ldyBFcnJvcihzKTtyZXR1cm57d2ViV29ya2VyOmcsY291bGRSZWFkOklbMF0/LmRhdGEsaW1hZ2U6SVsxXT8uZGF0YX19dmFyIGFBPVFhO2FzeW5jIGZ1bmN0aW9uIGhhKGUsdCxBPXt9KXtsZXQgcj1be3R5cGU6cC5Kc29uQ29tcGF0aWJsZX0se3R5cGU6cC5CaW5hcnlGaWxlLGRhdGE6e3BhdGg6dCxkYXRhOm5ldyBVaW50OEFycmF5fX1dLG89W3t0eXBlOnAuSW1hZ2UsZGF0YTplfV0saT1bXTtpLnB1c2goIjAiKSxpLnB1c2goIjAiKTtsZXQgZj10O2kucHVzaChmKSxpLnB1c2goIi0tbWVtb3J5LWlvIiksQS5pbmZvcm1hdGlvbk9ubHkmJkEuaW5mb3JtYXRpb25Pbmx5JiZpLnB1c2goIi0taW5mb3JtYXRpb24tb25seSIpLEEudXNlQ29tcHJlc3Npb24mJkEudXNlQ29tcHJlc3Npb24mJmkucHVzaCgiLS11c2UtY29tcHJlc3Npb24iKTtsZXQgbD0iYmlvLXJhZC13cml0ZS1pbWFnZSIsYT1BPy53ZWJXb3JrZXI7YT09PXZvaWQgMCYmKGE9YXdhaXQgUSgpKTtsZXR7d2ViV29ya2VyOmcscmV0dXJuVmFsdWU6dSxzdGRlcnI6cyxvdXRwdXRzOkl9PWF3YWl0IEUobCxpLHIsbyx7cGlwZWxpbmVCYXNlVXJsOnkoKSxwaXBlbGluZVdvcmtlclVybDpDKCksd2ViV29ya2VyOmEsbm9Db3B5OkE/Lm5vQ29weX0pO2lmKHUhPT0wJiZzIT09IiIpdGhyb3cgbmV3IEVycm9yKHMpO3JldHVybnt3ZWJXb3JrZXI6Zyxjb3VsZFdyaXRlOklbMF0/LmRhdGEsc2VyaWFsaXplZEltYWdlOklbMV0/LmRhdGF9fXZhciBuQT1oYTthc3luYyBmdW5jdGlvbiB3YShlLHQ9e30pe2xldCBBPVt7dHlwZTpwLkpzb25Db21wYXRpYmxlfSx7dHlwZTpwLkltYWdlfV0scj1lO2lmKGUgaW5zdGFuY2VvZiBGaWxlKXtsZXQgZD1hd2FpdCBlLmFycmF5QnVmZmVyKCk7cj17cGF0aDplLm5hbWUsZGF0YTpuZXcgVWludDhBcnJheShkKX19bGV0IG89W3t0eXBlOnAuQmluYXJ5RmlsZSxkYXRhOnJ9XSxpPVtdLG49ci5wYXRoO2kucHVzaChuKSxpLnB1c2goIjAiKSxpLnB1c2goIjEiKSxpLnB1c2goIi0tbWVtb3J5LWlvIiksdC5pbmZvcm1hdGlvbk9ubHkmJnQuaW5mb3JtYXRpb25Pbmx5JiZpLnB1c2goIi0taW5mb3JtYXRpb24tb25seSIpO2xldCBsPSJnaXBsLXJlYWQtaW1hZ2UiLGE9dD8ud2ViV29ya2VyO2E9PT12b2lkIDAmJihhPWF3YWl0IFEoKSk7bGV0e3dlYldvcmtlcjpnLHJldHVyblZhbHVlOnUsc3RkZXJyOnMsb3V0cHV0czpJfT1hd2FpdCBFKGwsaSxBLG8se3BpcGVsaW5lQmFzZVVybDp5KCkscGlwZWxpbmVXb3JrZXJVcmw6QygpLHdlYldvcmtlcjphLG5vQ29weTp0Py5ub0NvcHl9KTtpZih1IT09MCYmcyE9PSIiKXRocm93IG5ldyBFcnJvcihzKTtyZXR1cm57d2ViV29ya2VyOmcsY291bGRSZWFkOklbMF0/LmRhdGEsaW1hZ2U6SVsxXT8uZGF0YX19dmFyIHNBPXdhO2FzeW5jIGZ1bmN0aW9uIFJhKGUsdCxBPXt9KXtsZXQgcj1be3R5cGU6cC5Kc29uQ29tcGF0aWJsZX0se3R5cGU6cC5CaW5hcnlGaWxlLGRhdGE6e3BhdGg6dCxkYXRhOm5ldyBVaW50OEFycmF5fX1dLG89W3t0eXBlOnAuSW1hZ2UsZGF0YTplfV0saT1bXTtpLnB1c2goIjAiKSxpLnB1c2goIjAiKTtsZXQgZj10O2kucHVzaChmKSxpLnB1c2goIi0tbWVtb3J5LWlvIiksQS5pbmZvcm1hdGlvbk9ubHkmJkEuaW5mb3JtYXRpb25Pbmx5JiZpLnB1c2goIi0taW5mb3JtYXRpb24tb25seSIpLEEudXNlQ29tcHJlc3Npb24mJkEudXNlQ29tcHJlc3Npb24mJmkucHVzaCgiLS11c2UtY29tcHJlc3Npb24iKTtsZXQgbD0iZ2lwbC13cml0ZS1pbWFnZSIsYT1BPy53ZWJXb3JrZXI7YT09PXZvaWQgMCYmKGE9YXdhaXQgUSgpKTtsZXR7d2ViV29ya2VyOmcscmV0dXJuVmFsdWU6dSxzdGRlcnI6cyxvdXRwdXRzOkl9PWF3YWl0IEUobCxpLHIsbyx7cGlwZWxpbmVCYXNlVXJsOnkoKSxwaXBlbGluZVdvcmtlclVybDpDKCksd2ViV29ya2VyOmEsbm9Db3B5OkE/Lm5vQ29weX0pO2lmKHUhPT0wJiZzIT09IiIpdGhyb3cgbmV3IEVycm9yKHMpO3JldHVybnt3ZWJXb3JrZXI6Zyxjb3VsZFdyaXRlOklbMF0/LmRhdGEsc2VyaWFsaXplZEltYWdlOklbMV0/LmRhdGF9fXZhciBnQT1SYTthc3luYyBmdW5jdGlvbiBrYShlLHQ9e30pe2xldCBBPVt7dHlwZTpwLkpzb25Db21wYXRpYmxlfSx7dHlwZTpwLkltYWdlfV0scj1lO2lmKGUgaW5zdGFuY2VvZiBGaWxlKXtsZXQgZD1hd2FpdCBlLmFycmF5QnVmZmVyKCk7cj17cGF0aDplLm5hbWUsZGF0YTpuZXcgVWludDhBcnJheShkKX19bGV0IG89W3t0eXBlOnAuQmluYXJ5RmlsZSxkYXRhOnJ9XSxpPVtdLG49ci5wYXRoO2kucHVzaChuKSxpLnB1c2goIjAiKSxpLnB1c2goIjEiKSxpLnB1c2goIi0tbWVtb3J5LWlvIiksdC5pbmZvcm1hdGlvbk9ubHkmJnQuaW5mb3JtYXRpb25Pbmx5JiZpLnB1c2goIi0taW5mb3JtYXRpb24tb25seSIpO2xldCBsPSJnZS1hZHctcmVhZC1pbWFnZSIsYT10Py53ZWJXb3JrZXI7YT09PXZvaWQgMCYmKGE9YXdhaXQgUSgpKTtsZXR7d2ViV29ya2VyOmcscmV0dXJuVmFsdWU6dSxzdGRlcnI6cyxvdXRwdXRzOkl9PWF3YWl0IEUobCxpLEEsbyx7cGlwZWxpbmVCYXNlVXJsOnkoKSxwaXBlbGluZVdvcmtlclVybDpDKCksd2ViV29ya2VyOmEsbm9Db3B5OnQ/Lm5vQ29weX0pO2lmKHUhPT0wJiZzIT09IiIpdGhyb3cgbmV3IEVycm9yKHMpO3JldHVybnt3ZWJXb3JrZXI6Zyxjb3VsZFJlYWQ6SVswXT8uZGF0YSxpbWFnZTpJWzFdPy5kYXRhfX12YXIgbEE9a2E7YXN5bmMgZnVuY3Rpb24gYmEoZSx0LEE9e30pe2xldCByPVt7dHlwZTpwLkpzb25Db21wYXRpYmxlfSx7dHlwZTpwLkJpbmFyeUZpbGUsZGF0YTp7cGF0aDp0LGRhdGE6bmV3IFVpbnQ4QXJyYXl9fV0sbz1be3R5cGU6cC5JbWFnZSxkYXRhOmV9XSxpPVtdO2kucHVzaCgiMCIpLGkucHVzaCgiMCIpO2xldCBmPXQ7aS5wdXNoKGYpLGkucHVzaCgiLS1tZW1vcnktaW8iKSxBLmluZm9ybWF0aW9uT25seSYmQS5pbmZvcm1hdGlvbk9ubHkmJmkucHVzaCgiLS1pbmZvcm1hdGlvbi1vbmx5IiksQS51c2VDb21wcmVzc2lvbiYmQS51c2VDb21wcmVzc2lvbiYmaS5wdXNoKCItLXVzZS1jb21wcmVzc2lvbiIpO2xldCBsPSJnZS1hZHctd3JpdGUtaW1hZ2UiLGE9QT8ud2ViV29ya2VyO2E9PT12b2lkIDAmJihhPWF3YWl0IFEoKSk7bGV0e3dlYldvcmtlcjpnLHJldHVyblZhbHVlOnUsc3RkZXJyOnMsb3V0cHV0czpJfT1hd2FpdCBFKGwsaSxyLG8se3BpcGVsaW5lQmFzZVVybDp5KCkscGlwZWxpbmVXb3JrZXJVcmw6QygpLHdlYldvcmtlcjphLG5vQ29weTpBPy5ub0NvcHl9KTtpZih1IT09MCYmcyE9PSIiKXRocm93IG5ldyBFcnJvcihzKTtyZXR1cm57d2ViV29ya2VyOmcsY291bGRXcml0ZTpJWzBdPy5kYXRhLHNlcmlhbGl6ZWRJbWFnZTpJWzFdPy5kYXRhfX12YXIgSUE9YmE7YXN5bmMgZnVuY3Rpb24gRGEoZSx0PXt9KXtsZXQgQT1be3R5cGU6cC5Kc29uQ29tcGF0aWJsZX0se3R5cGU6cC5JbWFnZX1dLHI9ZTtpZihlIGluc3RhbmNlb2YgRmlsZSl7bGV0IGQ9YXdhaXQgZS5hcnJheUJ1ZmZlcigpO3I9e3BhdGg6ZS5uYW1lLGRhdGE6bmV3IFVpbnQ4QXJyYXkoZCl9fWxldCBvPVt7dHlwZTpwLkJpbmFyeUZpbGUsZGF0YTpyfV0saT1bXSxuPXIucGF0aDtpLnB1c2gobiksaS5wdXNoKCIwIiksaS5wdXNoKCIxIiksaS5wdXNoKCItLW1lbW9yeS1pbyIpLHQuaW5mb3JtYXRpb25Pbmx5JiZ0LmluZm9ybWF0aW9uT25seSYmaS5wdXNoKCItLWluZm9ybWF0aW9uLW9ubHkiKTtsZXQgbD0iZ2U0LXJlYWQtaW1hZ2UiLGE9dD8ud2ViV29ya2VyO2E9PT12b2lkIDAmJihhPWF3YWl0IFEoKSk7bGV0e3dlYldvcmtlcjpnLHJldHVyblZhbHVlOnUsc3RkZXJyOnMsb3V0cHV0czpJfT1hd2FpdCBFKGwsaSxBLG8se3BpcGVsaW5lQmFzZVVybDp5KCkscGlwZWxpbmVXb3JrZXJVcmw6QygpLHdlYldvcmtlcjphLG5vQ29weTp0Py5ub0NvcHl9KTtpZih1IT09MCYmcyE9PSIiKXRocm93IG5ldyBFcnJvcihzKTtyZXR1cm57d2ViV29ya2VyOmcsY291bGRSZWFkOklbMF0/LmRhdGEsaW1hZ2U6SVsxXT8uZGF0YX19dmFyIHBBPURhO2FzeW5jIGZ1bmN0aW9uIFdhKGUsdCxBPXt9KXtsZXQgcj1be3R5cGU6cC5Kc29uQ29tcGF0aWJsZX0se3R5cGU6cC5CaW5hcnlGaWxlLGRhdGE6e3BhdGg6dCxkYXRhOm5ldyBVaW50OEFycmF5fX1dLG89W3t0eXBlOnAuSW1hZ2UsZGF0YTplfV0saT1bXTtpLnB1c2goIjAiKSxpLnB1c2goIjAiKTtsZXQgZj10O2kucHVzaChmKSxpLnB1c2goIi0tbWVtb3J5LWlvIiksQS5pbmZvcm1hdGlvbk9ubHkmJkEuaW5mb3JtYXRpb25Pbmx5JiZpLnB1c2goIi0taW5mb3JtYXRpb24tb25seSIpLEEudXNlQ29tcHJlc3Npb24mJkEudXNlQ29tcHJlc3Npb24mJmkucHVzaCgiLS11c2UtY29tcHJlc3Npb24iKTtsZXQgbD0iZ2U0LXdyaXRlLWltYWdlIixhPUE/LndlYldvcmtlcjthPT09dm9pZCAwJiYoYT1hd2FpdCBRKCkpO2xldHt3ZWJXb3JrZXI6ZyxyZXR1cm5WYWx1ZTp1LHN0ZGVycjpzLG91dHB1dHM6SX09YXdhaXQgRShsLGkscixvLHtwaXBlbGluZUJhc2VVcmw6eSgpLHBpcGVsaW5lV29ya2VyVXJsOkMoKSx3ZWJXb3JrZXI6YSxub0NvcHk6QT8ubm9Db3B5fSk7aWYodSE9PTAmJnMhPT0iIil0aHJvdyBuZXcgRXJyb3Iocyk7cmV0dXJue3dlYldvcmtlcjpnLGNvdWxkV3JpdGU6SVswXT8uZGF0YSxzZXJpYWxpemVkSW1hZ2U6SVsxXT8uZGF0YX19dmFyIG1BPVdhO2FzeW5jIGZ1bmN0aW9uIEZhKGUsdD17fSl7bGV0IEE9W3t0eXBlOnAuSnNvbkNvbXBhdGlibGV9LHt0eXBlOnAuSW1hZ2V9XSxyPWU7aWYoZSBpbnN0YW5jZW9mIEZpbGUpe2xldCBkPWF3YWl0IGUuYXJyYXlCdWZmZXIoKTtyPXtwYXRoOmUubmFtZSxkYXRhOm5ldyBVaW50OEFycmF5KGQpfX1sZXQgbz1be3R5cGU6cC5CaW5hcnlGaWxlLGRhdGE6cn1dLGk9W10sbj1yLnBhdGg7aS5wdXNoKG4pLGkucHVzaCgiMCIpLGkucHVzaCgiMSIpLGkucHVzaCgiLS1tZW1vcnktaW8iKSx0LmluZm9ybWF0aW9uT25seSYmdC5pbmZvcm1hdGlvbk9ubHkmJmkucHVzaCgiLS1pbmZvcm1hdGlvbi1vbmx5Iik7bGV0IGw9ImdlNS1yZWFkLWltYWdlIixhPXQ/LndlYldvcmtlcjthPT09dm9pZCAwJiYoYT1hd2FpdCBRKCkpO2xldHt3ZWJXb3JrZXI6ZyxyZXR1cm5WYWx1ZTp1LHN0ZGVycjpzLG91dHB1dHM6SX09YXdhaXQgRShsLGksQSxvLHtwaXBlbGluZUJhc2VVcmw6eSgpLHBpcGVsaW5lV29ya2VyVXJsOkMoKSx3ZWJXb3JrZXI6YSxub0NvcHk6dD8ubm9Db3B5fSk7aWYodSE9PTAmJnMhPT0iIil0aHJvdyBuZXcgRXJyb3Iocyk7cmV0dXJue3dlYldvcmtlcjpnLGNvdWxkUmVhZDpJWzBdPy5kYXRhLGltYWdlOklbMV0/LmRhdGF9fXZhciB1QT1GYTthc3luYyBmdW5jdGlvbiBVYShlLHQsQT17fSl7bGV0IHI9W3t0eXBlOnAuSnNvbkNvbXBhdGlibGV9LHt0eXBlOnAuQmluYXJ5RmlsZSxkYXRhOntwYXRoOnQsZGF0YTpuZXcgVWludDhBcnJheX19XSxvPVt7dHlwZTpwLkltYWdlLGRhdGE6ZX1dLGk9W107aS5wdXNoKCIwIiksaS5wdXNoKCIwIik7bGV0IGY9dDtpLnB1c2goZiksaS5wdXNoKCItLW1lbW9yeS1pbyIpLEEuaW5mb3JtYXRpb25Pbmx5JiZBLmluZm9ybWF0aW9uT25seSYmaS5wdXNoKCItLWluZm9ybWF0aW9uLW9ubHkiKSxBLnVzZUNvbXByZXNzaW9uJiZBLnVzZUNvbXByZXNzaW9uJiZpLnB1c2goIi0tdXNlLWNvbXByZXNzaW9uIik7bGV0IGw9ImdlNS13cml0ZS1pbWFnZSIsYT1BPy53ZWJXb3JrZXI7YT09PXZvaWQgMCYmKGE9YXdhaXQgUSgpKTtsZXR7d2ViV29ya2VyOmcscmV0dXJuVmFsdWU6dSxzdGRlcnI6cyxvdXRwdXRzOkl9PWF3YWl0IEUobCxpLHIsbyx7cGlwZWxpbmVCYXNlVXJsOnkoKSxwaXBlbGluZVdvcmtlclVybDpDKCksd2ViV29ya2VyOmEsbm9Db3B5OkE/Lm5vQ29weX0pO2lmKHUhPT0wJiZzIT09IiIpdGhyb3cgbmV3IEVycm9yKHMpO3JldHVybnt3ZWJXb3JrZXI6Zyxjb3VsZFdyaXRlOklbMF0/LmRhdGEsc2VyaWFsaXplZEltYWdlOklbMV0/LmRhdGF9fXZhciBmQT1VYTthc3luYyBmdW5jdGlvbiBTYShlLHQ9e30pe2xldCBBPVt7dHlwZTpwLkpzb25Db21wYXRpYmxlfSx7dHlwZTpwLkltYWdlfV0scj1lO2lmKGUgaW5zdGFuY2VvZiBGaWxlKXtsZXQgZD1hd2FpdCBlLmFycmF5QnVmZmVyKCk7cj17cGF0aDplLm5hbWUsZGF0YTpuZXcgVWludDhBcnJheShkKX19bGV0IG89W3t0eXBlOnAuQmluYXJ5RmlsZSxkYXRhOnJ9XSxpPVtdLG49ci5wYXRoO2kucHVzaChuKSxpLnB1c2goIjAiKSxpLnB1c2goIjEiKSxpLnB1c2goIi0tbWVtb3J5LWlvIiksdC5pbmZvcm1hdGlvbk9ubHkmJnQuaW5mb3JtYXRpb25Pbmx5JiZpLnB1c2goIi0taW5mb3JtYXRpb24tb25seSIpO2xldCBsPSJnZGNtLXJlYWQtaW1hZ2UiLGE9dD8ud2ViV29ya2VyO2E9PT12b2lkIDAmJihhPWF3YWl0IFEoKSk7bGV0e3dlYldvcmtlcjpnLHJldHVyblZhbHVlOnUsc3RkZXJyOnMsb3V0cHV0czpJfT1hd2FpdCBFKGwsaSxBLG8se3BpcGVsaW5lQmFzZVVybDp5KCkscGlwZWxpbmVXb3JrZXJVcmw6QygpLHdlYldvcmtlcjphLG5vQ29weTp0Py5ub0NvcHl9KTtpZih1IT09MCYmcyE9PSIiKXRocm93IG5ldyBFcnJvcihzKTtyZXR1cm57d2ViV29ya2VyOmcsY291bGRSZWFkOklbMF0/LmRhdGEsaW1hZ2U6SVsxXT8uZGF0YX19dmFyIGNBPVNhO2FzeW5jIGZ1bmN0aW9uIE5hKGUsdCxBPXt9KXtsZXQgcj1be3R5cGU6cC5Kc29uQ29tcGF0aWJsZX0se3R5cGU6cC5CaW5hcnlGaWxlLGRhdGE6e3BhdGg6dCxkYXRhOm5ldyBVaW50OEFycmF5fX1dLG89W3t0eXBlOnAuSW1hZ2UsZGF0YTplfV0saT1bXTtpLnB1c2goIjAiKSxpLnB1c2goIjAiKTtsZXQgZj10O2kucHVzaChmKSxpLnB1c2goIi0tbWVtb3J5LWlvIiksQS5pbmZvcm1hdGlvbk9ubHkmJkEuaW5mb3JtYXRpb25Pbmx5JiZpLnB1c2goIi0taW5mb3JtYXRpb24tb25seSIpLEEudXNlQ29tcHJlc3Npb24mJkEudXNlQ29tcHJlc3Npb24mJmkucHVzaCgiLS11c2UtY29tcHJlc3Npb24iKTtsZXQgbD0iZ2RjbS13cml0ZS1pbWFnZSIsYT1BPy53ZWJXb3JrZXI7YT09PXZvaWQgMCYmKGE9YXdhaXQgUSgpKTtsZXR7d2ViV29ya2VyOmcscmV0dXJuVmFsdWU6dSxzdGRlcnI6cyxvdXRwdXRzOkl9PWF3YWl0IEUobCxpLHIsbyx7cGlwZWxpbmVCYXNlVXJsOnkoKSxwaXBlbGluZVdvcmtlclVybDpDKCksd2ViV29ya2VyOmEsbm9Db3B5OkE/Lm5vQ29weX0pO2lmKHUhPT0wJiZzIT09IiIpdGhyb3cgbmV3IEVycm9yKHMpO3JldHVybnt3ZWJXb3JrZXI6Zyxjb3VsZFdyaXRlOklbMF0/LmRhdGEsc2VyaWFsaXplZEltYWdlOklbMV0/LmRhdGF9fXZhciBkQT1OYTthc3luYyBmdW5jdGlvbiBPYShlLHQ9e30pe2xldCBBPVt7dHlwZTpwLkpzb25Db21wYXRpYmxlfSx7dHlwZTpwLkltYWdlfV0scj1lO2lmKGUgaW5zdGFuY2VvZiBGaWxlKXtsZXQgZD1hd2FpdCBlLmFycmF5QnVmZmVyKCk7cj17cGF0aDplLm5hbWUsZGF0YTpuZXcgVWludDhBcnJheShkKX19bGV0IG89W3t0eXBlOnAuQmluYXJ5RmlsZSxkYXRhOnJ9XSxpPVtdLG49ci5wYXRoO2kucHVzaChuKSxpLnB1c2goIjAiKSxpLnB1c2goIjEiKSxpLnB1c2goIi0tbWVtb3J5LWlvIiksdC5pbmZvcm1hdGlvbk9ubHkmJnQuaW5mb3JtYXRpb25Pbmx5JiZpLnB1c2goIi0taW5mb3JtYXRpb24tb25seSIpO2xldCBsPSJzY2FuY28tcmVhZC1pbWFnZSIsYT10Py53ZWJXb3JrZXI7YT09PXZvaWQgMCYmKGE9YXdhaXQgUSgpKTtsZXR7d2ViV29ya2VyOmcscmV0dXJuVmFsdWU6dSxzdGRlcnI6cyxvdXRwdXRzOkl9PWF3YWl0IEUobCxpLEEsbyx7cGlwZWxpbmVCYXNlVXJsOnkoKSxwaXBlbGluZVdvcmtlclVybDpDKCksd2ViV29ya2VyOmEsbm9Db3B5OnQ/Lm5vQ29weX0pO2lmKHUhPT0wJiZzIT09IiIpdGhyb3cgbmV3IEVycm9yKHMpO3JldHVybnt3ZWJXb3JrZXI6Zyxjb3VsZFJlYWQ6SVswXT8uZGF0YSxpbWFnZTpJWzFdPy5kYXRhfX12YXIgQkE9T2E7YXN5bmMgZnVuY3Rpb24gUGEoZSx0LEE9e30pe2xldCByPVt7dHlwZTpwLkpzb25Db21wYXRpYmxlfSx7dHlwZTpwLkJpbmFyeUZpbGUsZGF0YTp7cGF0aDp0LGRhdGE6bmV3IFVpbnQ4QXJyYXl9fV0sbz1be3R5cGU6cC5JbWFnZSxkYXRhOmV9XSxpPVtdO2kucHVzaCgiMCIpLGkucHVzaCgiMCIpO2xldCBmPXQ7aS5wdXNoKGYpLGkucHVzaCgiLS1tZW1vcnktaW8iKSxBLmluZm9ybWF0aW9uT25seSYmQS5pbmZvcm1hdGlvbk9ubHkmJmkucHVzaCgiLS1pbmZvcm1hdGlvbi1vbmx5IiksQS51c2VDb21wcmVzc2lvbiYmQS51c2VDb21wcmVzc2lvbiYmaS5wdXNoKCItLXVzZS1jb21wcmVzc2lvbiIpO2xldCBsPSJzY2FuY28td3JpdGUtaW1hZ2UiLGE9QT8ud2ViV29ya2VyO2E9PT12b2lkIDAmJihhPWF3YWl0IFEoKSk7bGV0e3dlYldvcmtlcjpnLHJldHVyblZhbHVlOnUsc3RkZXJyOnMsb3V0cHV0czpJfT1hd2FpdCBFKGwsaSxyLG8se3BpcGVsaW5lQmFzZVVybDp5KCkscGlwZWxpbmVXb3JrZXJVcmw6QygpLHdlYldvcmtlcjphLG5vQ29weTpBPy5ub0NvcHl9KTtpZih1IT09MCYmcyE9PSIiKXRocm93IG5ldyBFcnJvcihzKTtyZXR1cm57d2ViV29ya2VyOmcsY291bGRXcml0ZTpJWzBdPy5kYXRhLHNlcmlhbGl6ZWRJbWFnZTpJWzFdPy5kYXRhfX12YXIgQ0E9UGE7YXN5bmMgZnVuY3Rpb24geGEoZSx0PXt9KXtsZXQgQT1be3R5cGU6cC5Kc29uQ29tcGF0aWJsZX0se3R5cGU6cC5JbWFnZX1dLHI9ZTtpZihlIGluc3RhbmNlb2YgRmlsZSl7bGV0IGQ9YXdhaXQgZS5hcnJheUJ1ZmZlcigpO3I9e3BhdGg6ZS5uYW1lLGRhdGE6bmV3IFVpbnQ4QXJyYXkoZCl9fWxldCBvPVt7dHlwZTpwLkJpbmFyeUZpbGUsZGF0YTpyfV0saT1bXSxuPXIucGF0aDtpLnB1c2gobiksaS5wdXNoKCIwIiksaS5wdXNoKCIxIiksaS5wdXNoKCItLW1lbW9yeS1pbyIpLHQuaW5mb3JtYXRpb25Pbmx5JiZ0LmluZm9ybWF0aW9uT25seSYmaS5wdXNoKCItLWluZm9ybWF0aW9uLW9ubHkiKTtsZXQgbD0iZmRmLXJlYWQtaW1hZ2UiLGE9dD8ud2ViV29ya2VyO2E9PT12b2lkIDAmJihhPWF3YWl0IFEoKSk7bGV0e3dlYldvcmtlcjpnLHJldHVyblZhbHVlOnUsc3RkZXJyOnMsb3V0cHV0czpJfT1hd2FpdCBFKGwsaSxBLG8se3BpcGVsaW5lQmFzZVVybDp5KCkscGlwZWxpbmVXb3JrZXJVcmw6QygpLHdlYldvcmtlcjphLG5vQ29weTp0Py5ub0NvcHl9KTtpZih1IT09MCYmcyE9PSIiKXRocm93IG5ldyBFcnJvcihzKTtyZXR1cm57d2ViV29ya2VyOmcsY291bGRSZWFkOklbMF0/LmRhdGEsaW1hZ2U6SVsxXT8uZGF0YX19dmFyIEVBPXhhO2FzeW5jIGZ1bmN0aW9uIFRhKGUsdD17fSl7bGV0IEE9W3t0eXBlOnAuSnNvbkNvbXBhdGlibGV9LHt0eXBlOnAuSW1hZ2V9XSxyPWU7aWYoZSBpbnN0YW5jZW9mIEZpbGUpe2xldCBkPWF3YWl0IGUuYXJyYXlCdWZmZXIoKTtyPXtwYXRoOmUubmFtZSxkYXRhOm5ldyBVaW50OEFycmF5KGQpfX1sZXQgbz1be3R5cGU6cC5CaW5hcnlGaWxlLGRhdGE6cn1dLGk9W10sbj1yLnBhdGg7aS5wdXNoKG4pLGkucHVzaCgiMCIpLGkucHVzaCgiMSIpLGkucHVzaCgiLS1tZW1vcnktaW8iKSx0LmluZm9ybWF0aW9uT25seSYmdC5pbmZvcm1hdGlvbk9ubHkmJmkucHVzaCgiLS1pbmZvcm1hdGlvbi1vbmx5Iik7bGV0IGw9Indhc20tcmVhZC1pbWFnZSIsYT10Py53ZWJXb3JrZXI7YT09PXZvaWQgMCYmKGE9YXdhaXQgUSgpKTtsZXR7d2ViV29ya2VyOmcscmV0dXJuVmFsdWU6dSxzdGRlcnI6cyxvdXRwdXRzOkl9PWF3YWl0IEUobCxpLEEsbyx7cGlwZWxpbmVCYXNlVXJsOnkoKSxwaXBlbGluZVdvcmtlclVybDpDKCksd2ViV29ya2VyOmEsbm9Db3B5OnQ/Lm5vQ29weX0pO2lmKHUhPT0wJiZzIT09IiIpdGhyb3cgbmV3IEVycm9yKHMpO3JldHVybnt3ZWJXb3JrZXI6Zyxjb3VsZFJlYWQ6SVswXT8uZGF0YSxpbWFnZTpJWzFdPy5kYXRhfX12YXIgeUE9VGE7YXN5bmMgZnVuY3Rpb24gR2EoZSx0LEE9e30pe2xldCByPVt7dHlwZTpwLkpzb25Db21wYXRpYmxlfSx7dHlwZTpwLkJpbmFyeUZpbGUsZGF0YTp7cGF0aDp0LGRhdGE6bmV3IFVpbnQ4QXJyYXl9fV0sbz1be3R5cGU6cC5JbWFnZSxkYXRhOmV9XSxpPVtdO2kucHVzaCgiMCIpLGkucHVzaCgiMCIpO2xldCBmPXQ7aS5wdXNoKGYpLGkucHVzaCgiLS1tZW1vcnktaW8iKSxBLmluZm9ybWF0aW9uT25seSYmQS5pbmZvcm1hdGlvbk9ubHkmJmkucHVzaCgiLS1pbmZvcm1hdGlvbi1vbmx5IiksQS51c2VDb21wcmVzc2lvbiYmQS51c2VDb21wcmVzc2lvbiYmaS5wdXNoKCItLXVzZS1jb21wcmVzc2lvbiIpO2xldCBsPSJ3YXNtLXdyaXRlLWltYWdlIixhPUE/LndlYldvcmtlcjthPT09dm9pZCAwJiYoYT1hd2FpdCBRKCkpO2xldHt3ZWJXb3JrZXI6ZyxyZXR1cm5WYWx1ZTp1LHN0ZGVycjpzLG91dHB1dHM6SX09YXdhaXQgRShsLGkscixvLHtwaXBlbGluZUJhc2VVcmw6eSgpLHBpcGVsaW5lV29ya2VyVXJsOkMoKSx3ZWJXb3JrZXI6YSxub0NvcHk6QT8ubm9Db3B5fSk7aWYodSE9PTAmJnMhPT0iIil0aHJvdyBuZXcgRXJyb3Iocyk7cmV0dXJue3dlYldvcmtlcjpnLGNvdWxkV3JpdGU6SVswXT8uZGF0YSxzZXJpYWxpemVkSW1hZ2U6SVsxXT8uZGF0YX19dmFyIFFBPUdhO2FzeW5jIGZ1bmN0aW9uIExhKGUsdD17fSl7bGV0IEE9W3t0eXBlOnAuSnNvbkNvbXBhdGlibGV9LHt0eXBlOnAuSW1hZ2V9XSxyPWU7aWYoZSBpbnN0YW5jZW9mIEZpbGUpe2xldCBkPWF3YWl0IGUuYXJyYXlCdWZmZXIoKTtyPXtwYXRoOmUubmFtZSxkYXRhOm5ldyBVaW50OEFycmF5KGQpfX1sZXQgbz1be3R5cGU6cC5CaW5hcnlGaWxlLGRhdGE6cn1dLGk9W10sbj1yLnBhdGg7aS5wdXNoKG4pLGkucHVzaCgiMCIpLGkucHVzaCgiMSIpLGkucHVzaCgiLS1tZW1vcnktaW8iKSx0LmluZm9ybWF0aW9uT25seSYmdC5pbmZvcm1hdGlvbk9ubHkmJmkucHVzaCgiLS1pbmZvcm1hdGlvbi1vbmx5Iik7bGV0IGw9Indhc20tenN0ZC1yZWFkLWltYWdlIixhPXQ/LndlYldvcmtlcjthPT09dm9pZCAwJiYoYT1hd2FpdCBRKCkpO2xldHt3ZWJXb3JrZXI6ZyxyZXR1cm5WYWx1ZTp1LHN0ZGVycjpzLG91dHB1dHM6SX09YXdhaXQgRShsLGksQSxvLHtwaXBlbGluZUJhc2VVcmw6eSgpLHBpcGVsaW5lV29ya2VyVXJsOkMoKSx3ZWJXb3JrZXI6YSxub0NvcHk6dD8ubm9Db3B5fSk7aWYodSE9PTAmJnMhPT0iIil0aHJvdyBuZXcgRXJyb3Iocyk7cmV0dXJue3dlYldvcmtlcjpnLGNvdWxkUmVhZDpJWzBdPy5kYXRhLGltYWdlOklbMV0/LmRhdGF9fXZhciBoQT1MYTthc3luYyBmdW5jdGlvbiBKYShlLHQsQT17fSl7bGV0IHI9W3t0eXBlOnAuSnNvbkNvbXBhdGlibGV9LHt0eXBlOnAuQmluYXJ5RmlsZSxkYXRhOntwYXRoOnQsZGF0YTpuZXcgVWludDhBcnJheX19XSxvPVt7dHlwZTpwLkltYWdlLGRhdGE6ZX1dLGk9W107aS5wdXNoKCIwIiksaS5wdXNoKCIwIik7bGV0IGY9dDtpLnB1c2goZiksaS5wdXNoKCItLW1lbW9yeS1pbyIpLEEuaW5mb3JtYXRpb25Pbmx5JiZBLmluZm9ybWF0aW9uT25seSYmaS5wdXNoKCItLWluZm9ybWF0aW9uLW9ubHkiKSxBLnVzZUNvbXByZXNzaW9uJiZBLnVzZUNvbXByZXNzaW9uJiZpLnB1c2goIi0tdXNlLWNvbXByZXNzaW9uIik7bGV0IGw9Indhc20tenN0ZC13cml0ZS1pbWFnZSIsYT1BPy53ZWJXb3JrZXI7YT09PXZvaWQgMCYmKGE9YXdhaXQgUSgpKTtsZXR7d2ViV29ya2VyOmcscmV0dXJuVmFsdWU6dSxzdGRlcnI6cyxvdXRwdXRzOkl9PWF3YWl0IEUobCxpLHIsbyx7cGlwZWxpbmVCYXNlVXJsOnkoKSxwaXBlbGluZVdvcmtlclVybDpDKCksd2ViV29ya2VyOmEsbm9Db3B5OkE/Lm5vQ29weX0pO2lmKHUhPT0wJiZzIT09IiIpdGhyb3cgbmV3IEVycm9yKHMpO3JldHVybnt3ZWJXb3JrZXI6Zyxjb3VsZFdyaXRlOklbMF0/LmRhdGEsc2VyaWFsaXplZEltYWdlOklbMV0/LmRhdGF9fXZhciB3QT1KYTt2YXIgTWE9bmV3IE1hcChbWyJwbmciLFtPdCxQdF1dLFsibWV0YSIsW3h0LFR0XV0sWyJ0aWZmIixbR3QsTHRdXSxbIm5pZnRpIixbSnQsTXRdXSxbImpwZWciLFtIdCxxdF1dLFsibnJyZCIsW1l0LEt0XV0sWyJ2dGsiLFt2dCxqdF1dLFsiYm1wIixbX3QsenRdXSxbImhkZjUiLFtWdCxadF1dLFsibW5jIixbWHQsJHRdXSxbIm1yYyIsW2VBLHRBXV0sWyJsc20iLFtBQSxyQV1dLFsibWdoIixbaUEsb0FdXSxbImJpb1JhZCIsW2FBLG5BXV0sWyJnaXBsIixbc0EsZ0FdXSxbImdlQWR3IixbbEEsSUFdXSxbImdlNCIsW3BBLG1BXV0sWyJnZTUiLFt1QSxmQV1dLFsiZ2RjbSIsW2NBLGRBXV0sWyJzY2FuY28iLFtCQSxDQV1dLFsiZmRmIixbRUEsbnVsbF1dLFsid2FzbSIsW3lBLFFBXV0sWyJ3YXNtWnN0ZCIsW2hBLHdBXV1dKSxuZT1NYTthc3luYyBmdW5jdGlvbiBIYShlLHQ9e30pe2xldCBBPWUudHlwZT8/IiIscj1lLm5hbWU/P2UucGF0aD8/ImZpbGVOYW1lIixvPXNlKHIpLnRvTG93ZXJDYXNlKCksaT10Py53ZWJXb3JrZXIsbj1lO2lmKGUgaW5zdGFuY2VvZiBCbG9iKXtsZXQgcz1hd2FpdCBlLmFycmF5QnVmZmVyKCk7bj17cGF0aDplLm5hbWUsZGF0YTpuZXcgVWludDhBcnJheShzKX19bGV0IG09bnVsbDtpZihBJiZhZS5oYXMoQSkpbT1hZS5nZXQoQSk7ZWxzZSBpZihfLmhhcyhvKSltPV8uZ2V0KG8pO2Vsc2UgZm9yKGxldCBzIG9mIG5lLnZhbHVlcygpKWlmKHNbMF0hPT1udWxsKXtsZXR7d2ViV29ya2VyOkksY291bGRSZWFkOkIsaW1hZ2U6ZH09YXdhaXQgc1swXSh7cGF0aDpuLnBhdGgsZGF0YTpuLmRhdGEuc2xpY2UoKX0se3dlYldvcmtlcjppLGluZm9ybWF0aW9uT25seTp0Py5pbmZvcm1hdGlvbk9ubHksbm9Db3B5OnQ/Lm5vQ29weX0pO2lmKGk9SSxCKXJldHVybiB0eXBlb2YgdDwidSImJihkPXEoZCx0KSkse3dlYldvcmtlcjppLGltYWdlOmR9fWlmKCFtKXRocm93IEVycm9yKCJDb3VsZCBub3QgZmluZCBJTyBmb3I6ICIrcik7bGV0IGw9bmUuZ2V0KG0pWzBdLHt3ZWJXb3JrZXI6YSxjb3VsZFJlYWQ6ZyxpbWFnZTp1fT1hd2FpdCBsKG4se3dlYldvcmtlcjppLGluZm9ybWF0aW9uT25seTp0Py5pbmZvcm1hdGlvbk9ubHksbm9Db3B5OnQ/Lm5vQ29weX0pO2lmKGk9YSwhZyl0aHJvdyBFcnJvcigiQ291bGQgbm90IHJlYWQ6ICIrcik7cmV0dXJuIHR5cGVvZiB0PCJ1IiYmKHU9cSh1LHQpKSx7d2ViV29ya2VyOmksaW1hZ2U6dX19dmFyIFJBPUhhO3ZhciBxYT10eXBlb2YgZ2xvYmFsVGhpcy5uYXZpZ2F0b3I/LmhhcmR3YXJlQ29uY3VycmVuY3k9PSJudW1iZXIiP2dsb2JhbFRoaXMubmF2aWdhdG9yLmhhcmR3YXJlQ29uY3VycmVuY3k6NixIcj1uZXcgJGUocWEsUkEpO2FzeW5jIGZ1bmN0aW9uIFlhKGUsdD17fSl7bGV0IEE9MSxyPTAsbz0hMTt0eXBlb2YgdD09Im9iamVjdCImJih0eXBlb2YgdC56U3BhY2luZzwidSImJihBPXQuelNwYWNpbmcpLHR5cGVvZiB0LnpPcmlnaW48InUiJiYocj10LnpPcmlnaW4pLHR5cGVvZiB0LnNvcnRlZFNlcmllczwidSImJihvPXQuc29ydGVkU2VyaWVzKSk7bGV0IGk9QXJyYXkuZnJvbShlLGFzeW5jIGZ1bmN0aW9uKGcpe2lmKGcgaW5zdGFuY2VvZiBGaWxlKXtsZXQgdT1hd2FpdCBnLmFycmF5QnVmZmVyKCk7cmV0dXJue3BhdGg6Zy5uYW1lLGRhdGE6bmV3IFVpbnQ4QXJyYXkodSl9fXJldHVybiBnfSksbj1hd2FpdCBQcm9taXNlLmFsbChpKTtvfHxuLnNvcnQoKGcsdSk9PmcucGF0aDx1LnBhdGg/LTE6Zy5wYXRoPnUucGF0aD8xOjApO2xldCBtPVtdO2ZvcihsZXQgZz0wO2c8bi5sZW5ndGg7ZysrKW0ucHVzaChbbltnXSx7fV0pO2xldCBsPShhd2FpdCBIci5ydW5UYXNrcyhtKS5wcm9taXNlKS5tYXAoZz0+e2xldCB1PWcuaW1hZ2U7cmV0dXJuIHUuaW1hZ2VUeXBlLmRpbWVuc2lvbj0zLHUuc2l6ZS5wdXNoKDEpLHUuc3BhY2luZy5wdXNoKEEpLHUub3JpZ2luLnB1c2gociksdS5kaXJlY3Rpb249bmV3IEZsb2F0NjRBcnJheSg5KSx1LmRpcmVjdGlvbi5maWxsKDApLHUuZGlyZWN0aW9uWzBdPTEsdS5kaXJlY3Rpb25bNF09MSx1LmRpcmVjdGlvbls4XT0xLHV9KSxhPVplKGwpO3JldHVybiB0eXBlb2YgdD09Im9iamVjdCImJih0eXBlb2YgdC5jb21wb25lbnRUeXBlPCJ1Inx8dHlwZW9mIHQucGl4ZWxUeXBlPCJ1IikmJihhPXEoYSx0KSkse2ltYWdlOmEsd2ViV29ya2VyUG9vbDpIcn19dmFyIEthPVlhO2FzeW5jIGZ1bmN0aW9uIHZhKGUsdCxBPXt9KXtsZXQgcj1lOyh0eXBlb2YgQS5jb21wb25lbnRUeXBlPCJ1Inx8dHlwZW9mIEEucGl4ZWxUeXBlPCJ1IikmJihyPXEoZSxBKSk7bGV0IG89QS5taW1lVHlwZSxpPXNlKHQpLnRvTG93ZXJDYXNlKCksbj1BLndlYldvcmtlcixtPW51bGw7aWYodHlwZW9mIG88InUiJiZhZS5oYXMobykpbT1hZS5nZXQobyk7ZWxzZSBpZihfLmhhcyhpKSltPV8uZ2V0KGkpO2Vsc2UgZm9yKGxldCBJIG9mIG5lLnZhbHVlcygpKWlmKElbMV0hPT1udWxsKXtsZXR7d2ViV29ya2VyOkIsY291bGRXcml0ZTpkLHNlcmlhbGl6ZWRJbWFnZTprfT1hd2FpdCBJWzFdKFZlKHIpLHQsQSk7aWYobj1CLGQpcmV0dXJue3dlYldvcmtlcjpuLHNlcmlhbGl6ZWRJbWFnZTprfX1pZighbSl0aHJvdyBFcnJvcigiQ291bGQgbm90IGZpbmQgSU8gZm9yOiAiK3QpO2xldCBsPW5lLmdldChtKVsxXSx7d2ViV29ya2VyOmEsY291bGRXcml0ZTpnLHNlcmlhbGl6ZWRJbWFnZTp1fT1hd2FpdCBsKHIsdCxBKTtpZihuPWEsIWcpdGhyb3cgRXJyb3IoIkNvdWxkIG5vdCB3cml0ZTogIit0KTtyZXR1cm57d2ViV29ya2VyOm4sc2VyaWFsaXplZEltYWdlOnV9fXZhciBqYT12YTthc3luYyBmdW5jdGlvbiBfYShlLHQsQT17fSl7bGV0IHI9W3t0eXBlOnAuSnNvbkNvbXBhdGlibGV9LHt0eXBlOnAuQmluYXJ5RmlsZSxkYXRhOntwYXRoOnQsZGF0YTpuZXcgVWludDhBcnJheX19XSxvPVt7dHlwZTpwLkltYWdlLGRhdGE6ZX1dLGk9W107aS5wdXNoKCIwIiksaS5wdXNoKCIwIik7bGV0IGY9dDtpLnB1c2goZiksaS5wdXNoKCItLW1lbW9yeS1pbyIpLEEuaW5mb3JtYXRpb25Pbmx5JiZBLmluZm9ybWF0aW9uT25seSYmaS5wdXNoKCItLWluZm9ybWF0aW9uLW9ubHkiKSxBLnVzZUNvbXByZXNzaW9uJiZBLnVzZUNvbXByZXNzaW9uJiZpLnB1c2goIi0tdXNlLWNvbXByZXNzaW9uIik7bGV0IGw9ImZkZi13cml0ZS1pbWFnZSIsYT1BPy53ZWJXb3JrZXI7YT09PXZvaWQgMCYmKGE9YXdhaXQgUSgpKTtsZXR7d2ViV29ya2VyOmcscmV0dXJuVmFsdWU6dSxzdGRlcnI6cyxvdXRwdXRzOkl9PWF3YWl0IEUobCxpLHIsbyx7cGlwZWxpbmVCYXNlVXJsOnkoKSxwaXBlbGluZVdvcmtlclVybDpDKCksd2ViV29ya2VyOmEsbm9Db3B5OkE/Lm5vQ29weX0pO2lmKHUhPT0wJiZzIT09IiIpdGhyb3cgbmV3IEVycm9yKHMpO3JldHVybnt3ZWJXb3JrZXI6Zyxjb3VsZFdyaXRlOklbMF0/LmRhdGEsc2VyaWFsaXplZEltYWdlOklbMV0/LmRhdGF9fXZhciB6YT1fYTt2YXIgcXI9J2RhdGE6dGV4dC9qYXZhc2NyaXB0O2NoYXJzZXQ9dXRmLTgsdmFyIG1lPU9iamVjdC5kZWZpbmVQcm9wZXJ0eTt2YXIgd2U9KEEsdCk9Pntmb3IodmFyIGUgaW4gdCltZShBLGUse2dldDp0W2VdLGVudW1lcmFibGU6ITB9KX07dmFyIGZ0PVN5bWJvbCgiQ29tbGluay5wcm94eSIpLHBlPVN5bWJvbCgiQ29tbGluay5lbmRwb2ludCIpLFNlPVN5bWJvbCgiQ29tbGluay5yZWxlYXNlUHJveHkiKSxZQT1TeW1ib2woIkNvbWxpbmsuZmluYWxpemVyIiksYUE9U3ltYm9sKCJDb21saW5rLnRocm93biIpLGx0PUE9PnR5cGVvZiBBPT0ib2JqZWN0IiYmQSE9PW51bGx8fHR5cGVvZiBBPT0iZnVuY3Rpb24iLEZlPXtjYW5IYW5kbGU6QT0+bHQoQSkmJkFbZnRdLHNlcmlhbGl6ZShBKXtsZXR7cG9ydDE6dCxwb3J0MjplfT1uZXcgTWVzc2FnZUNoYW5uZWw7cmV0dXJuIGZBKEEsdCksW2UsW2VdXX0sZGVzZXJpYWxpemUoQSl7cmV0dXJuIEEuc3RhcnQoKSxHZShBKX19LFJlPXtjYW5IYW5kbGU6QT0+bHQoQSkmJmFBIGluIEEsc2VyaWFsaXplKHt2YWx1ZTpBfSl7bGV0IHQ7cmV0dXJuIEEgaW5zdGFuY2VvZiBFcnJvcj90PXtpc0Vycm9yOiEwLHZhbHVlOnttZXNzYWdlOkEubWVzc2FnZSxuYW1lOkEubmFtZSxzdGFjazpBLnN0YWNrfX06dD17aXNFcnJvcjohMSx2YWx1ZTpBfSxbdCxbXV19LGRlc2VyaWFsaXplKEEpe3Rocm93IEEuaXNFcnJvcj9PYmplY3QuYXNzaWduKG5ldyBFcnJvcihBLnZhbHVlLm1lc3NhZ2UpLEEudmFsdWUpOkEudmFsdWV9fSx1dD1uZXcgTWFwKFtbInByb3h5IixGZV0sWyJ0aHJvdyIsUmVdXSk7ZnVuY3Rpb24gTmUoQSx0KXtmb3IobGV0IGUgb2YgQSlpZih0PT09ZXx8ZT09PSIqInx8ZSBpbnN0YW5jZW9mIFJlZ0V4cCYmZS50ZXN0KHQpKXJldHVybiEwO3JldHVybiExfWZ1bmN0aW9uIGZBKEEsdD1nbG9iYWxUaGlzLGU9WyIqIl0pe3QuYWRkRXZlbnRMaXN0ZW5lcigibWVzc2FnZSIsZnVuY3Rpb24gSShyKXtpZighcnx8IXIuZGF0YSlyZXR1cm47aWYoIU5lKGUsci5vcmlnaW4pKXtjb25zb2xlLndhcm4oYEludmFsaWQgb3JpZ2luIFwnJHtyLm9yaWdpbn1cJyBmb3IgY29tbGluayBwcm94eWApO3JldHVybn1sZXR7aWQ6byx0eXBlOmcscGF0aDpDfT1PYmplY3QuYXNzaWduKHtwYXRoOltdfSxyLmRhdGEpLFE9KHIuZGF0YS5hcmd1bWVudExpc3R8fFtdKS5tYXAoTyksYTt0cnl7bGV0IG49Qy5zbGljZSgwLC0xKS5yZWR1Y2UoKGYsQik9PmZbQl0sQSkscz1DLnJlZHVjZSgoZixCKT0+ZltCXSxBKTtzd2l0Y2goZyl7Y2FzZSJHRVQiOmE9czticmVhaztjYXNlIlNFVCI6bltDLnNsaWNlKC0xKVswXV09TyhyLmRhdGEudmFsdWUpLGE9ITA7YnJlYWs7Y2FzZSJBUFBMWSI6YT1zLmFwcGx5KG4sUSk7YnJlYWs7Y2FzZSJDT05TVFJVQ1QiOntsZXQgZj1uZXcgcyguLi5RKTthPWJlKGYpfWJyZWFrO2Nhc2UiRU5EUE9JTlQiOntsZXR7cG9ydDE6Zixwb3J0MjpCfT1uZXcgTWVzc2FnZUNoYW5uZWw7ZkEoQSxCKSxhPU1BKGYsW2ZdKX1icmVhaztjYXNlIlJFTEVBU0UiOmE9dm9pZCAwO2JyZWFrO2RlZmF1bHQ6cmV0dXJufX1jYXRjaChuKXthPXt2YWx1ZTpuLFthQV06MH19UHJvbWlzZS5yZXNvbHZlKGEpLmNhdGNoKG49Pih7dmFsdWU6bixbYUFdOjB9KSkudGhlbihuPT57bGV0W3MsZl09Y0Eobik7dC5wb3N0TWVzc2FnZShPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30scykse2lkOm99KSxmKSxnPT09IlJFTEVBU0UiJiYodC5yZW1vdmVFdmVudExpc3RlbmVyKCJtZXNzYWdlIixJKSxEdCh0KSxZQSBpbiBBJiZ0eXBlb2YgQVtZQV09PSJmdW5jdGlvbiImJkFbWUFdKCkpfSkuY2F0Y2gobj0+e2xldFtzLGZdPWNBKHt2YWx1ZTpuZXcgVHlwZUVycm9yKCJVbnNlcmlhbGl6YWJsZSByZXR1cm4gdmFsdWUiKSxbYUFdOjB9KTt0LnBvc3RNZXNzYWdlKE9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSxzKSx7aWQ6b30pLGYpfSl9KSx0LnN0YXJ0JiZ0LnN0YXJ0KCl9ZnVuY3Rpb24gVWUoQSl7cmV0dXJuIEEuY29uc3RydWN0b3IubmFtZT09PSJNZXNzYWdlUG9ydCJ9ZnVuY3Rpb24gRHQoQSl7VWUoQSkmJkEuY2xvc2UoKX1mdW5jdGlvbiBHZShBLHQpe3JldHVybiBxQShBLFtdLHQpfWZ1bmN0aW9uIEJBKEEpe2lmKEEpdGhyb3cgbmV3IEVycm9yKCJQcm94eSBoYXMgYmVlbiByZWxlYXNlZCBhbmQgaXMgbm90IHVzZWFibGUiKX1mdW5jdGlvbiBodChBKXtyZXR1cm4gUChBLHt0eXBlOiJSRUxFQVNFIn0pLnRoZW4oKCk9PntEdChBKX0pfXZhciBRQT1uZXcgV2Vha01hcCxFQT0iRmluYWxpemF0aW9uUmVnaXN0cnkiaW4gZ2xvYmFsVGhpcyYmbmV3IEZpbmFsaXphdGlvblJlZ2lzdHJ5KEE9PntsZXQgdD0oUUEuZ2V0KEEpfHwwKS0xO1FBLnNldChBLHQpLHQ9PT0wJiZodChBKX0pO2Z1bmN0aW9uIGtlKEEsdCl7bGV0IGU9KFFBLmdldCh0KXx8MCkrMTtRQS5zZXQodCxlKSxFQSYmRUEucmVnaXN0ZXIoQSx0LEEpfWZ1bmN0aW9uIExlKEEpe0VBJiZFQS51bnJlZ2lzdGVyKEEpfWZ1bmN0aW9uIHFBKEEsdD1bXSxlPWZ1bmN0aW9uKCl7fSl7bGV0IEk9ITEscj1uZXcgUHJveHkoZSx7Z2V0KG8sZyl7aWYoQkEoSSksZz09PVNlKXJldHVybigpPT57TGUociksaHQoQSksST0hMH07aWYoZz09PSJ0aGVuIil7aWYodC5sZW5ndGg9PT0wKXJldHVybnt0aGVuOigpPT5yfTtsZXQgQz1QKEEse3R5cGU6IkdFVCIscGF0aDp0Lm1hcChRPT5RLnRvU3RyaW5nKCkpfSkudGhlbihPKTtyZXR1cm4gQy50aGVuLmJpbmQoQyl9cmV0dXJuIHFBKEEsWy4uLnQsZ10pfSxzZXQobyxnLEMpe0JBKEkpO2xldFtRLGFdPWNBKEMpO3JldHVybiBQKEEse3R5cGU6IlNFVCIscGF0aDpbLi4udCxnXS5tYXAobj0+bi50b1N0cmluZygpKSx2YWx1ZTpRfSxhKS50aGVuKE8pfSxhcHBseShvLGcsQyl7QkEoSSk7bGV0IFE9dFt0Lmxlbmd0aC0xXTtpZihRPT09cGUpcmV0dXJuIFAoQSx7dHlwZToiRU5EUE9JTlQifSkudGhlbihPKTtpZihRPT09ImJpbmQiKXJldHVybiBxQShBLHQuc2xpY2UoMCwtMSkpO2xldFthLG5dPWN0KEMpO3JldHVybiBQKEEse3R5cGU6IkFQUExZIixwYXRoOnQubWFwKHM9PnMudG9TdHJpbmcoKSksYXJndW1lbnRMaXN0OmF9LG4pLnRoZW4oTyl9LGNvbnN0cnVjdChvLGcpe0JBKEkpO2xldFtDLFFdPWN0KGcpO3JldHVybiBQKEEse3R5cGU6IkNPTlNUUlVDVCIscGF0aDp0Lm1hcChhPT5hLnRvU3RyaW5nKCkpLGFyZ3VtZW50TGlzdDpDfSxRKS50aGVuKE8pfX0pO3JldHVybiBrZShyLEEpLHJ9ZnVuY3Rpb24gSmUoQSl7cmV0dXJuIEFycmF5LnByb3RvdHlwZS5jb25jYXQuYXBwbHkoW10sQSl9ZnVuY3Rpb24gY3QoQSl7bGV0IHQ9QS5tYXAoY0EpO3JldHVyblt0Lm1hcChlPT5lWzBdKSxKZSh0Lm1hcChlPT5lWzFdKSldfXZhciBkdD1uZXcgV2Vha01hcDtmdW5jdGlvbiBNQShBLHQpe3JldHVybiBkdC5zZXQoQSx0KSxBfWZ1bmN0aW9uIGJlKEEpe3JldHVybiBPYmplY3QuYXNzaWduKEEse1tmdF06ITB9KX1mdW5jdGlvbiBjQShBKXtmb3IobGV0W3QsZV1vZiB1dClpZihlLmNhbkhhbmRsZShBKSl7bGV0W0kscl09ZS5zZXJpYWxpemUoQSk7cmV0dXJuW3t0eXBlOiJIQU5ETEVSIixuYW1lOnQsdmFsdWU6SX0scl19cmV0dXJuW3t0eXBlOiJSQVciLHZhbHVlOkF9LGR0LmdldChBKXx8W11dfWZ1bmN0aW9uIE8oQSl7c3dpdGNoKEEudHlwZSl7Y2FzZSJIQU5ETEVSIjpyZXR1cm4gdXQuZ2V0KEEubmFtZSkuZGVzZXJpYWxpemUoQS52YWx1ZSk7Y2FzZSJSQVciOnJldHVybiBBLnZhbHVlfX1mdW5jdGlvbiBQKEEsdCxlKXtyZXR1cm4gbmV3IFByb21pc2UoST0+e2xldCByPUhlKCk7QS5hZGRFdmVudExpc3RlbmVyKCJtZXNzYWdlIixmdW5jdGlvbiBvKGcpeyFnLmRhdGF8fCFnLmRhdGEuaWR8fGcuZGF0YS5pZCE9PXJ8fChBLnJlbW92ZUV2ZW50TGlzdGVuZXIoIm1lc3NhZ2UiLG8pLEkoZy5kYXRhKSl9KSxBLnN0YXJ0JiZBLnN0YXJ0KCksQS5wb3N0TWVzc2FnZShPYmplY3QuYXNzaWduKHtpZDpyfSx0KSxlKX0pfWZ1bmN0aW9uIEhlKCl7cmV0dXJuIG5ldyBBcnJheSg0KS5maWxsKDApLm1hcCgoKT0+TWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpKk51bWJlci5NQVhfU0FGRV9JTlRFR0VSKS50b1N0cmluZygxNikpLmpvaW4oIi0iKX1mdW5jdGlvbiB2KEEsdCl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIEEuYXBwbHkodCxhcmd1bWVudHMpfX12YXJ7dG9TdHJpbmc6WWV9PU9iamVjdC5wcm90b3R5cGUse2dldFByb3RvdHlwZU9mOk9BfT1PYmplY3QsdUE9KEE9PnQ9PntsZXQgZT1ZZS5jYWxsKHQpO3JldHVybiBBW2VdfHwoQVtlXT1lLnNsaWNlKDgsLTEpLnRvTG93ZXJDYXNlKCkpfSkoT2JqZWN0LmNyZWF0ZShudWxsKSksRz1BPT4oQT1BLnRvTG93ZXJDYXNlKCksdD0+dUEodCk9PT1BKSxEQT1BPT50PT50eXBlb2YgdD09PUEse2lzQXJyYXk6an09QXJyYXksJD1EQSgidW5kZWZpbmVkIik7ZnVuY3Rpb24gcWUoQSl7cmV0dXJuIEEhPT1udWxsJiYhJChBKSYmQS5jb25zdHJ1Y3RvciE9PW51bGwmJiEkKEEuY29uc3RydWN0b3IpJiZOKEEuY29uc3RydWN0b3IuaXNCdWZmZXIpJiZBLmNvbnN0cnVjdG9yLmlzQnVmZmVyKEEpfXZhciBwdD1HKCJBcnJheUJ1ZmZlciIpO2Z1bmN0aW9uIE1lKEEpe2xldCB0O3JldHVybiB0eXBlb2YgQXJyYXlCdWZmZXI8InUiJiZBcnJheUJ1ZmZlci5pc1ZpZXc/dD1BcnJheUJ1ZmZlci5pc1ZpZXcoQSk6dD1BJiZBLmJ1ZmZlciYmcHQoQS5idWZmZXIpLHR9dmFyIFRlPURBKCJzdHJpbmciKSxOPURBKCJmdW5jdGlvbiIpLFN0PURBKCJudW1iZXIiKSxoQT1BPT5BIT09bnVsbCYmdHlwZW9mIEE9PSJvYmplY3QiLEtlPUE9PkE9PT0hMHx8QT09PSExLGxBPUE9PntpZih1QShBKSE9PSJvYmplY3QiKXJldHVybiExO2xldCB0PU9BKEEpO3JldHVybih0PT09bnVsbHx8dD09PU9iamVjdC5wcm90b3R5cGV8fE9iamVjdC5nZXRQcm90b3R5cGVPZih0KT09PW51bGwpJiYhKFN5bWJvbC50b1N0cmluZ1RhZyBpbiBBKSYmIShTeW1ib2wuaXRlcmF0b3IgaW4gQSl9LE9lPUcoIkRhdGUiKSx4ZT1HKCJGaWxlIiksUGU9RygiQmxvYiIpLGplPUcoIkZpbGVMaXN0IiksV2U9QT0+aEEoQSkmJk4oQS5waXBlKSxaZT1BPT57bGV0IHQ7cmV0dXJuIEEmJih0eXBlb2YgRm9ybURhdGE9PSJmdW5jdGlvbiImJkEgaW5zdGFuY2VvZiBGb3JtRGF0YXx8TihBLmFwcGVuZCkmJigodD11QShBKSk9PT0iZm9ybWRhdGEifHx0PT09Im9iamVjdCImJk4oQS50b1N0cmluZykmJkEudG9TdHJpbmcoKT09PSJbb2JqZWN0IEZvcm1EYXRhXSIpKX0sVmU9RygiVVJMU2VhcmNoUGFyYW1zIiksW19lLFhlLHplLHZlXT1bIlJlYWRhYmxlU3RyZWFtIiwiUmVxdWVzdCIsIlJlc3BvbnNlIiwiSGVhZGVycyJdLm1hcChHKSwkZT1BPT5BLnRyaW0/QS50cmltKCk6QS5yZXBsYWNlKC9eW1xcc1xcdUZFRkZcXHhBMF0rfFtcXHNcXHVGRUZGXFx4QTBdKyQvZywiIik7ZnVuY3Rpb24gQUEoQSx0LHthbGxPd25LZXlzOmU9ITF9PXt9KXtpZihBPT09bnVsbHx8dHlwZW9mIEE+InUiKXJldHVybjtsZXQgSSxyO2lmKHR5cGVvZiBBIT0ib2JqZWN0IiYmKEE9W0FdKSxqKEEpKWZvcihJPTAscj1BLmxlbmd0aDtJPHI7SSsrKXQuY2FsbChudWxsLEFbSV0sSSxBKTtlbHNle2xldCBvPWU/T2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoQSk6T2JqZWN0LmtleXMoQSksZz1vLmxlbmd0aCxDO2ZvcihJPTA7STxnO0krKylDPW9bSV0sdC5jYWxsKG51bGwsQVtDXSxDLEEpfX1mdW5jdGlvbiBGdChBLHQpe3Q9dC50b0xvd2VyQ2FzZSgpO2xldCBlPU9iamVjdC5rZXlzKEEpLEk9ZS5sZW5ndGgscjtmb3IoO0ktLSA+MDspaWYocj1lW0ldLHQ9PT1yLnRvTG93ZXJDYXNlKCkpcmV0dXJuIHI7cmV0dXJuIG51bGx9dmFyIHg9dHlwZW9mIGdsb2JhbFRoaXM8InUiP2dsb2JhbFRoaXM6dHlwZW9mIHNlbGY8InUiP3NlbGY6dHlwZW9mIHdpbmRvdzwidSI/d2luZG93Omdsb2JhbCxSdD1BPT4hJChBKSYmQSE9PXg7ZnVuY3Rpb24gS0EoKXtsZXR7Y2FzZWxlc3M6QX09UnQodGhpcykmJnRoaXN8fHt9LHQ9e30sZT0oSSxyKT0+e2xldCBvPUEmJkZ0KHQscil8fHI7bEEodFtvXSkmJmxBKEkpP3Rbb109S0EodFtvXSxJKTpsQShJKT90W29dPUtBKHt9LEkpOmooSSk/dFtvXT1JLnNsaWNlKCk6dFtvXT1JfTtmb3IobGV0IEk9MCxyPWFyZ3VtZW50cy5sZW5ndGg7STxyO0krKylhcmd1bWVudHNbSV0mJkFBKGFyZ3VtZW50c1tJXSxlKTtyZXR1cm4gdH12YXIgQUk9KEEsdCxlLHthbGxPd25LZXlzOkl9PXt9KT0+KEFBKHQsKHIsbyk9PntlJiZOKHIpP0Fbb109dihyLGUpOkFbb109cn0se2FsbE93bktleXM6SX0pLEEpLHRJPUE9PihBLmNoYXJDb2RlQXQoMCk9PT02NTI3OSYmKEE9QS5zbGljZSgxKSksQSksZUk9KEEsdCxlLEkpPT57QS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh0LnByb3RvdHlwZSxJKSxBLnByb3RvdHlwZS5jb25zdHJ1Y3Rvcj1BLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShBLCJzdXBlciIse3ZhbHVlOnQucHJvdG90eXBlfSksZSYmT2JqZWN0LmFzc2lnbihBLnByb3RvdHlwZSxlKX0sSUk9KEEsdCxlLEkpPT57bGV0IHIsbyxnLEM9e307aWYodD10fHx7fSxBPT1udWxsKXJldHVybiB0O2Rve2ZvcihyPU9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKEEpLG89ci5sZW5ndGg7by0tID4wOylnPXJbb10sKCFJfHxJKGcsQSx0KSkmJiFDW2ddJiYodFtnXT1BW2ddLENbZ109ITApO0E9ZSE9PSExJiZPQShBKX13aGlsZShBJiYoIWV8fGUoQSx0KSkmJkEhPT1PYmplY3QucHJvdG90eXBlKTtyZXR1cm4gdH0sckk9KEEsdCxlKT0+e0E9U3RyaW5nKEEpLChlPT09dm9pZCAwfHxlPkEubGVuZ3RoKSYmKGU9QS5sZW5ndGgpLGUtPXQubGVuZ3RoO2xldCBJPUEuaW5kZXhPZih0LGUpO3JldHVybiBJIT09LTEmJkk9PT1lfSxvST1BPT57aWYoIUEpcmV0dXJuIG51bGw7aWYoaihBKSlyZXR1cm4gQTtsZXQgdD1BLmxlbmd0aDtpZighU3QodCkpcmV0dXJuIG51bGw7bGV0IGU9bmV3IEFycmF5KHQpO2Zvcig7dC0tID4wOyllW3RdPUFbdF07cmV0dXJuIGV9LGdJPShBPT50PT5BJiZ0IGluc3RhbmNlb2YgQSkodHlwZW9mIFVpbnQ4QXJyYXk8InUiJiZPQShVaW50OEFycmF5KSksaUk9KEEsdCk9PntsZXQgST0oQSYmQVtTeW1ib2wuaXRlcmF0b3JdKS5jYWxsKEEpLHI7Zm9yKDsocj1JLm5leHQoKSkmJiFyLmRvbmU7KXtsZXQgbz1yLnZhbHVlO3QuY2FsbChBLG9bMF0sb1sxXSl9fSxuST0oQSx0KT0+e2xldCBlLEk9W107Zm9yKDsoZT1BLmV4ZWModCkpIT09bnVsbDspSS5wdXNoKGUpO3JldHVybiBJfSxzST1HKCJIVE1MRm9ybUVsZW1lbnQiKSxDST1BPT5BLnRvTG93ZXJDYXNlKCkucmVwbGFjZSgvWy1fXFxzXShbYS16XFxkXSkoXFx3KikvZyxmdW5jdGlvbihlLEkscil7cmV0dXJuIEkudG9VcHBlckNhc2UoKStyfSksbXQ9KCh7aGFzT3duUHJvcGVydHk6QX0pPT4odCxlKT0+QS5jYWxsKHQsZSkpKE9iamVjdC5wcm90b3R5cGUpLEJJPUcoIlJlZ0V4cCIpLE50PShBLHQpPT57bGV0IGU9T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcnMoQSksST17fTtBQShlLChyLG8pPT57bGV0IGc7KGc9dChyLG8sQSkpIT09ITEmJihJW29dPWd8fHIpfSksT2JqZWN0LmRlZmluZVByb3BlcnRpZXMoQSxJKX0sYUk9QT0+e050KEEsKHQsZSk9PntpZihOKEEpJiZbImFyZ3VtZW50cyIsImNhbGxlciIsImNhbGxlZSJdLmluZGV4T2YoZSkhPT0tMSlyZXR1cm4hMTtsZXQgST1BW2VdO2lmKE4oSSkpe2lmKHQuZW51bWVyYWJsZT0hMSwid3JpdGFibGUiaW4gdCl7dC53cml0YWJsZT0hMTtyZXR1cm59dC5zZXR8fCh0LnNldD0oKT0+e3Rocm93IEVycm9yKCJDYW4gbm90IHJld3JpdGUgcmVhZC1vbmx5IG1ldGhvZCBcJyIrZSsiXCciKX0pfX0pfSxRST0oQSx0KT0+e2xldCBlPXt9LEk9cj0+e3IuZm9yRWFjaChvPT57ZVtvXT0hMH0pfTtyZXR1cm4gaihBKT9JKEEpOkkoU3RyaW5nKEEpLnNwbGl0KHQpKSxlfSxFST0oKT0+e30sY0k9KEEsdCk9PkEhPW51bGwmJk51bWJlci5pc0Zpbml0ZShBPStBKT9BOnQsVEE9ImFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6Iix3dD0iMDEyMzQ1Njc4OSIsVXQ9e0RJR0lUOnd0LEFMUEhBOlRBLEFMUEhBX0RJR0lUOlRBK1RBLnRvVXBwZXJDYXNlKCkrd3R9LGZJPShBPTE2LHQ9VXQuQUxQSEFfRElHSVQpPT57bGV0IGU9IiIse2xlbmd0aDpJfT10O2Zvcig7QS0tOyllKz10W01hdGgucmFuZG9tKCkqSXwwXTtyZXR1cm4gZX07ZnVuY3Rpb24gbEkoQSl7cmV0dXJuISEoQSYmTihBLmFwcGVuZCkmJkFbU3ltYm9sLnRvU3RyaW5nVGFnXT09PSJGb3JtRGF0YSImJkFbU3ltYm9sLml0ZXJhdG9yXSl9dmFyIHVJPUE9PntsZXQgdD1uZXcgQXJyYXkoMTApLGU9KEkscik9PntpZihoQShJKSl7aWYodC5pbmRleE9mKEkpPj0wKXJldHVybjtpZighKCJ0b0pTT04iaW4gSSkpe3Rbcl09STtsZXQgbz1qKEkpP1tdOnt9O3JldHVybiBBQShJLChnLEMpPT57bGV0IFE9ZShnLHIrMSk7ISQoUSkmJihvW0NdPVEpfSksdFtyXT12b2lkIDAsb319cmV0dXJuIEl9O3JldHVybiBlKEEsMCl9LERJPUcoIkFzeW5jRnVuY3Rpb24iKSxoST1BPT5BJiYoaEEoQSl8fE4oQSkpJiZOKEEudGhlbikmJk4oQS5jYXRjaCksR3Q9KChBLHQpPT5BP3NldEltbWVkaWF0ZTp0PygoZSxJKT0+KHguYWRkRXZlbnRMaXN0ZW5lcigibWVzc2FnZSIsKHtzb3VyY2U6cixkYXRhOm99KT0+e3I9PT14JiZvPT09ZSYmSS5sZW5ndGgmJkkuc2hpZnQoKSgpfSwhMSkscj0+e0kucHVzaChyKSx4LnBvc3RNZXNzYWdlKGUsIioiKX0pKShgYXhpb3NAJHtNYXRoLnJhbmRvbSgpfWAsW10pOmU9PnNldFRpbWVvdXQoZSkpKHR5cGVvZiBzZXRJbW1lZGlhdGU9PSJmdW5jdGlvbiIsTih4LnBvc3RNZXNzYWdlKSksZEk9dHlwZW9mIHF1ZXVlTWljcm90YXNrPCJ1Ij9xdWV1ZU1pY3JvdGFzay5iaW5kKHgpOnR5cGVvZiBwcm9jZXNzPCJ1IiYmcHJvY2Vzcy5uZXh0VGlja3x8R3QsaT17aXNBcnJheTpqLGlzQXJyYXlCdWZmZXI6cHQsaXNCdWZmZXI6cWUsaXNGb3JtRGF0YTpaZSxpc0FycmF5QnVmZmVyVmlldzpNZSxpc1N0cmluZzpUZSxpc051bWJlcjpTdCxpc0Jvb2xlYW46S2UsaXNPYmplY3Q6aEEsaXNQbGFpbk9iamVjdDpsQSxpc1JlYWRhYmxlU3RyZWFtOl9lLGlzUmVxdWVzdDpYZSxpc1Jlc3BvbnNlOnplLGlzSGVhZGVyczp2ZSxpc1VuZGVmaW5lZDokLGlzRGF0ZTpPZSxpc0ZpbGU6eGUsaXNCbG9iOlBlLGlzUmVnRXhwOkJJLGlzRnVuY3Rpb246Tixpc1N0cmVhbTpXZSxpc1VSTFNlYXJjaFBhcmFtczpWZSxpc1R5cGVkQXJyYXk6Z0ksaXNGaWxlTGlzdDpqZSxmb3JFYWNoOkFBLG1lcmdlOktBLGV4dGVuZDpBSSx0cmltOiRlLHN0cmlwQk9NOnRJLGluaGVyaXRzOmVJLHRvRmxhdE9iamVjdDpJSSxraW5kT2Y6dUEsa2luZE9mVGVzdDpHLGVuZHNXaXRoOnJJLHRvQXJyYXk6b0ksZm9yRWFjaEVudHJ5OmlJLG1hdGNoQWxsOm5JLGlzSFRNTEZvcm06c0ksaGFzT3duUHJvcGVydHk6bXQsaGFzT3duUHJvcDptdCxyZWR1Y2VEZXNjcmlwdG9yczpOdCxmcmVlemVNZXRob2RzOmFJLHRvT2JqZWN0U2V0OlFJLHRvQ2FtZWxDYXNlOkNJLG5vb3A6RUksdG9GaW5pdGVOdW1iZXI6Y0ksZmluZEtleTpGdCxnbG9iYWw6eCxpc0NvbnRleHREZWZpbmVkOlJ0LEFMUEhBQkVUOlV0LGdlbmVyYXRlU3RyaW5nOmZJLGlzU3BlY0NvbXBsaWFudEZvcm06bEksdG9KU09OT2JqZWN0OnVJLGlzQXN5bmNGbjpESSxpc1RoZW5hYmxlOmhJLHNldEltbWVkaWF0ZTpHdCxhc2FwOmRJfTtmdW5jdGlvbiBXKEEsdCxlLEkscil7RXJyb3IuY2FsbCh0aGlzKSxFcnJvci5jYXB0dXJlU3RhY2tUcmFjZT9FcnJvci5jYXB0dXJlU3RhY2tUcmFjZSh0aGlzLHRoaXMuY29uc3RydWN0b3IpOnRoaXMuc3RhY2s9bmV3IEVycm9yKCkuc3RhY2ssdGhpcy5tZXNzYWdlPUEsdGhpcy5uYW1lPSJBeGlvc0Vycm9yIix0JiYodGhpcy5jb2RlPXQpLGUmJih0aGlzLmNvbmZpZz1lKSxJJiYodGhpcy5yZXF1ZXN0PUkpLHImJih0aGlzLnJlc3BvbnNlPXIpfWkuaW5oZXJpdHMoVyxFcnJvcix7dG9KU09OOmZ1bmN0aW9uKCl7cmV0dXJue21lc3NhZ2U6dGhpcy5tZXNzYWdlLG5hbWU6dGhpcy5uYW1lLGRlc2NyaXB0aW9uOnRoaXMuZGVzY3JpcHRpb24sbnVtYmVyOnRoaXMubnVtYmVyLGZpbGVOYW1lOnRoaXMuZmlsZU5hbWUsbGluZU51bWJlcjp0aGlzLmxpbmVOdW1iZXIsY29sdW1uTnVtYmVyOnRoaXMuY29sdW1uTnVtYmVyLHN0YWNrOnRoaXMuc3RhY2ssY29uZmlnOmkudG9KU09OT2JqZWN0KHRoaXMuY29uZmlnKSxjb2RlOnRoaXMuY29kZSxzdGF0dXM6dGhpcy5yZXNwb25zZSYmdGhpcy5yZXNwb25zZS5zdGF0dXM/dGhpcy5yZXNwb25zZS5zdGF0dXM6bnVsbH19fSk7dmFyIGt0PVcucHJvdG90eXBlLEx0PXt9O1siRVJSX0JBRF9PUFRJT05fVkFMVUUiLCJFUlJfQkFEX09QVElPTiIsIkVDT05OQUJPUlRFRCIsIkVUSU1FRE9VVCIsIkVSUl9ORVRXT1JLIiwiRVJSX0ZSX1RPT19NQU5ZX1JFRElSRUNUUyIsIkVSUl9ERVBSRUNBVEVEIiwiRVJSX0JBRF9SRVNQT05TRSIsIkVSUl9CQURfUkVRVUVTVCIsIkVSUl9DQU5DRUxFRCIsIkVSUl9OT1RfU1VQUE9SVCIsIkVSUl9JTlZBTElEX1VSTCJdLmZvckVhY2goQT0+e0x0W0FdPXt2YWx1ZTpBfX0pO09iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKFcsTHQpO09iamVjdC5kZWZpbmVQcm9wZXJ0eShrdCwiaXNBeGlvc0Vycm9yIix7dmFsdWU6ITB9KTtXLmZyb209KEEsdCxlLEkscixvKT0+e2xldCBnPU9iamVjdC5jcmVhdGUoa3QpO3JldHVybiBpLnRvRmxhdE9iamVjdChBLGcsZnVuY3Rpb24oUSl7cmV0dXJuIFEhPT1FcnJvci5wcm90b3R5cGV9LEM9PkMhPT0iaXNBeGlvc0Vycm9yIiksVy5jYWxsKGcsQS5tZXNzYWdlLHQsZSxJLHIpLGcuY2F1c2U9QSxnLm5hbWU9QS5uYW1lLG8mJk9iamVjdC5hc3NpZ24oZyxvKSxnfTt2YXIgdT1XO3ZhciBkQT1udWxsO2Z1bmN0aW9uIHhBKEEpe3JldHVybiBpLmlzUGxhaW5PYmplY3QoQSl8fGkuaXNBcnJheShBKX1mdW5jdGlvbiBidChBKXtyZXR1cm4gaS5lbmRzV2l0aChBLCJbXSIpP0Euc2xpY2UoMCwtMik6QX1mdW5jdGlvbiBKdChBLHQsZSl7cmV0dXJuIEE/QS5jb25jYXQodCkubWFwKGZ1bmN0aW9uKHIsbyl7cmV0dXJuIHI9YnQociksIWUmJm8/IlsiK3IrIl0iOnJ9KS5qb2luKGU/Ii4iOiIiKTp0fWZ1bmN0aW9uIHlJKEEpe3JldHVybiBpLmlzQXJyYXkoQSkmJiFBLnNvbWUoeEEpfXZhciBtST1pLnRvRmxhdE9iamVjdChpLHt9LG51bGwsZnVuY3Rpb24odCl7cmV0dXJuL15pc1tBLVpdLy50ZXN0KHQpfSk7ZnVuY3Rpb24gd0koQSx0LGUpe2lmKCFpLmlzT2JqZWN0KEEpKXRocm93IG5ldyBUeXBlRXJyb3IoInRhcmdldCBtdXN0IGJlIGFuIG9iamVjdCIpO3Q9dHx8bmV3KGRBfHxGb3JtRGF0YSksZT1pLnRvRmxhdE9iamVjdChlLHttZXRhVG9rZW5zOiEwLGRvdHM6ITEsaW5kZXhlczohMX0sITEsZnVuY3Rpb24obCxjKXtyZXR1cm4haS5pc1VuZGVmaW5lZChjW2xdKX0pO2xldCBJPWUubWV0YVRva2VucyxyPWUudmlzaXRvcnx8bixvPWUuZG90cyxnPWUuaW5kZXhlcyxRPShlLkJsb2J8fHR5cGVvZiBCbG9iPCJ1IiYmQmxvYikmJmkuaXNTcGVjQ29tcGxpYW50Rm9ybSh0KTtpZighaS5pc0Z1bmN0aW9uKHIpKXRocm93IG5ldyBUeXBlRXJyb3IoInZpc2l0b3IgbXVzdCBiZSBhIGZ1bmN0aW9uIik7ZnVuY3Rpb24gYShFKXtpZihFPT09bnVsbClyZXR1cm4iIjtpZihpLmlzRGF0ZShFKSlyZXR1cm4gRS50b0lTT1N0cmluZygpO2lmKCFRJiZpLmlzQmxvYihFKSl0aHJvdyBuZXcgdSgiQmxvYiBpcyBub3Qgc3VwcG9ydGVkLiBVc2UgYSBCdWZmZXIgaW5zdGVhZC4iKTtyZXR1cm4gaS5pc0FycmF5QnVmZmVyKEUpfHxpLmlzVHlwZWRBcnJheShFKT9RJiZ0eXBlb2YgQmxvYj09ImZ1bmN0aW9uIj9uZXcgQmxvYihbRV0pOkJ1ZmZlci5mcm9tKEUpOkV9ZnVuY3Rpb24gbihFLGwsYyl7bGV0IHA9RTtpZihFJiYhYyYmdHlwZW9mIEU9PSJvYmplY3QiKXtpZihpLmVuZHNXaXRoKGwsInt9IikpbD1JP2w6bC5zbGljZSgwLC0yKSxFPUpTT04uc3RyaW5naWZ5KEUpO2Vsc2UgaWYoaS5pc0FycmF5KEUpJiZ5SShFKXx8KGkuaXNGaWxlTGlzdChFKXx8aS5lbmRzV2l0aChsLCJbXSIpKSYmKHA9aS50b0FycmF5KEUpKSlyZXR1cm4gbD1idChsKSxwLmZvckVhY2goZnVuY3Rpb24oRCxVKXshKGkuaXNVbmRlZmluZWQoRCl8fEQ9PT1udWxsKSYmdC5hcHBlbmQoZz09PSEwP0p0KFtsXSxVLG8pOmc9PT1udWxsP2w6bCsiW10iLGEoRCkpfSksITF9cmV0dXJuIHhBKEUpPyEwOih0LmFwcGVuZChKdChjLGwsbyksYShFKSksITEpfWxldCBzPVtdLGY9T2JqZWN0LmFzc2lnbihtSSx7ZGVmYXVsdFZpc2l0b3I6bixjb252ZXJ0VmFsdWU6YSxpc1Zpc2l0YWJsZTp4QX0pO2Z1bmN0aW9uIEIoRSxsKXtpZighaS5pc1VuZGVmaW5lZChFKSl7aWYocy5pbmRleE9mKEUpIT09LTEpdGhyb3cgRXJyb3IoIkNpcmN1bGFyIHJlZmVyZW5jZSBkZXRlY3RlZCBpbiAiK2wuam9pbigiLiIpKTtzLnB1c2goRSksaS5mb3JFYWNoKEUsZnVuY3Rpb24ocCxTKXsoIShpLmlzVW5kZWZpbmVkKHApfHxwPT09bnVsbCkmJnIuY2FsbCh0LHAsaS5pc1N0cmluZyhTKT9TLnRyaW0oKTpTLGwsZikpPT09ITAmJkIocCxsP2wuY29uY2F0KFMpOltTXSl9KSxzLnBvcCgpfX1pZighaS5pc09iamVjdChBKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJkYXRhIG11c3QgYmUgYW4gb2JqZWN0Iik7cmV0dXJuIEIoQSksdH12YXIgcT13STtmdW5jdGlvbiBIdChBKXtsZXQgdD17IiEiOiIlMjUyMSIsIlwnIjoiJTI1MjciLCIoIjoiJTI1MjgiLCIpIjoiJTI1MjkiLCJ+IjoiJTI1N0UiLCIlMjUyMCI6IisiLCIlMjUwMCI6IlxcMCJ9O3JldHVybiBlbmNvZGVVUklDb21wb25lbnQoQSkucmVwbGFjZSgvWyFcJygpfl18JTI1MjB8JTI1MDAvZyxmdW5jdGlvbihJKXtyZXR1cm4gdFtJXX0pfWZ1bmN0aW9uIFl0KEEsdCl7dGhpcy5fcGFpcnM9W10sQSYmcShBLHRoaXMsdCl9dmFyIHF0PVl0LnByb3RvdHlwZTtxdC5hcHBlbmQ9ZnVuY3Rpb24odCxlKXt0aGlzLl9wYWlycy5wdXNoKFt0LGVdKX07cXQudG9TdHJpbmc9ZnVuY3Rpb24odCl7bGV0IGU9dD9mdW5jdGlvbihJKXtyZXR1cm4gdC5jYWxsKHRoaXMsSSxIdCl9Okh0O3JldHVybiB0aGlzLl9wYWlycy5tYXAoZnVuY3Rpb24ocil7cmV0dXJuIGUoclswXSkrIj0iK2UoclsxXSl9LCIiKS5qb2luKCImIil9O3ZhciB5QT1ZdDtmdW5jdGlvbiBwSShBKXtyZXR1cm4gZW5jb2RlVVJJQ29tcG9uZW50KEEpLnJlcGxhY2UoLyUyNTNBL2dpLCI6IikucmVwbGFjZSgvJTI1MjQvZywiJCIpLnJlcGxhY2UoLyUyNTJDL2dpLCIsIikucmVwbGFjZSgvJTI1MjAvZywiKyIpLnJlcGxhY2UoLyUyNTVCL2dpLCJbIikucmVwbGFjZSgvJTI1NUQvZ2ksIl0iKX1mdW5jdGlvbiB0QShBLHQsZSl7aWYoIXQpcmV0dXJuIEE7bGV0IEk9ZSYmZS5lbmNvZGV8fHBJLHI9ZSYmZS5zZXJpYWxpemUsbztpZihyP289cih0LGUpOm89aS5pc1VSTFNlYXJjaFBhcmFtcyh0KT90LnRvU3RyaW5nKCk6bmV3IHlBKHQsZSkudG9TdHJpbmcoSSksbyl7bGV0IGc9QS5pbmRleE9mKCIlMjMiKTtnIT09LTEmJihBPUEuc2xpY2UoMCxnKSksQSs9KEEuaW5kZXhPZigiPyIpPT09LTE/Ij8iOiImIikrb31yZXR1cm4gQX12YXIgUEE9Y2xhc3N7Y29uc3RydWN0b3IoKXt0aGlzLmhhbmRsZXJzPVtdfXVzZSh0LGUsSSl7cmV0dXJuIHRoaXMuaGFuZGxlcnMucHVzaCh7ZnVsZmlsbGVkOnQscmVqZWN0ZWQ6ZSxzeW5jaHJvbm91czpJP0kuc3luY2hyb25vdXM6ITEscnVuV2hlbjpJP0kucnVuV2hlbjpudWxsfSksdGhpcy5oYW5kbGVycy5sZW5ndGgtMX1lamVjdCh0KXt0aGlzLmhhbmRsZXJzW3RdJiYodGhpcy5oYW5kbGVyc1t0XT1udWxsKX1jbGVhcigpe3RoaXMuaGFuZGxlcnMmJih0aGlzLmhhbmRsZXJzPVtdKX1mb3JFYWNoKHQpe2kuZm9yRWFjaCh0aGlzLmhhbmRsZXJzLGZ1bmN0aW9uKEkpe0khPT1udWxsJiZ0KEkpfSl9fSxqQT1QQTt2YXIgbUE9e3NpbGVudEpTT05QYXJzaW5nOiEwLGZvcmNlZEpTT05QYXJzaW5nOiEwLGNsYXJpZnlUaW1lb3V0RXJyb3I6ITF9O3ZhciBNdD10eXBlb2YgVVJMU2VhcmNoUGFyYW1zPCJ1Ij9VUkxTZWFyY2hQYXJhbXM6eUE7dmFyIFR0PXR5cGVvZiBGb3JtRGF0YTwidSI/Rm9ybURhdGE6bnVsbDt2YXIgS3Q9dHlwZW9mIEJsb2I8InUiP0Jsb2I6bnVsbDt2YXIgT3Q9e2lzQnJvd3NlcjohMCxjbGFzc2VzOntVUkxTZWFyY2hQYXJhbXM6TXQsRm9ybURhdGE6VHQsQmxvYjpLdH0scHJvdG9jb2xzOlsiaHR0cCIsImh0dHBzIiwiZmlsZSIsImJsb2IiLCJ1cmwiLCJkYXRhIl19O3ZhciBaQT17fTt3ZShaQSx7aGFzQnJvd3NlckVudjooKT0+V0EsaGFzU3RhbmRhcmRCcm93c2VyRW52OigpPT5TSSxoYXNTdGFuZGFyZEJyb3dzZXJXZWJXb3JrZXJFbnY6KCk9PkZJLG9yaWdpbjooKT0+Ukl9KTt2YXIgV0E9dHlwZW9mIHdpbmRvdzwidSImJnR5cGVvZiBkb2N1bWVudDwidSIsU0k9KEE9PldBJiZbIlJlYWN0TmF0aXZlIiwiTmF0aXZlU2NyaXB0IiwiTlMiXS5pbmRleE9mKEEpPDApKHR5cGVvZiBuYXZpZ2F0b3I8InUiJiZuYXZpZ2F0b3IucHJvZHVjdCksRkk9dHlwZW9mIFdvcmtlckdsb2JhbFNjb3BlPCJ1IiYmc2VsZiBpbnN0YW5jZW9mIFdvcmtlckdsb2JhbFNjb3BlJiZ0eXBlb2Ygc2VsZi5pbXBvcnRTY3JpcHRzPT0iZnVuY3Rpb24iLFJJPVdBJiZ3aW5kb3cubG9jYXRpb24uaHJlZnx8Imh0dHA6Ly9sb2NhbGhvc3QiO3ZhciB3PXsuLi5aQSwuLi5PdH07ZnVuY3Rpb24gVkEoQSx0KXtyZXR1cm4gcShBLG5ldyB3LmNsYXNzZXMuVVJMU2VhcmNoUGFyYW1zLE9iamVjdC5hc3NpZ24oe3Zpc2l0b3I6ZnVuY3Rpb24oZSxJLHIsbyl7cmV0dXJuIHcuaXNOb2RlJiZpLmlzQnVmZmVyKGUpPyh0aGlzLmFwcGVuZChJLGUudG9TdHJpbmcoImJhc2U2NCIpKSwhMSk6by5kZWZhdWx0VmlzaXRvci5hcHBseSh0aGlzLGFyZ3VtZW50cyl9fSx0KSl9ZnVuY3Rpb24gTkkoQSl7cmV0dXJuIGkubWF0Y2hBbGwoL1xcdyt8XFxbKFxcdyopXS9nLEEpLm1hcCh0PT50WzBdPT09IltdIj8iIjp0WzFdfHx0WzBdKX1mdW5jdGlvbiBVSShBKXtsZXQgdD17fSxlPU9iamVjdC5rZXlzKEEpLEkscj1lLmxlbmd0aCxvO2ZvcihJPTA7STxyO0krKylvPWVbSV0sdFtvXT1BW29dO3JldHVybiB0fWZ1bmN0aW9uIEdJKEEpe2Z1bmN0aW9uIHQoZSxJLHIsbyl7bGV0IGc9ZVtvKytdO2lmKGc9PT0iX19wcm90b19fIilyZXR1cm4hMDtsZXQgQz1OdW1iZXIuaXNGaW5pdGUoK2cpLFE9bz49ZS5sZW5ndGg7cmV0dXJuIGc9IWcmJmkuaXNBcnJheShyKT9yLmxlbmd0aDpnLFE/KGkuaGFzT3duUHJvcChyLGcpP3JbZ109W3JbZ10sSV06cltnXT1JLCFDKTooKCFyW2ddfHwhaS5pc09iamVjdChyW2ddKSkmJihyW2ddPVtdKSx0KGUsSSxyW2ddLG8pJiZpLmlzQXJyYXkocltnXSkmJihyW2ddPVVJKHJbZ10pKSwhQyl9aWYoaS5pc0Zvcm1EYXRhKEEpJiZpLmlzRnVuY3Rpb24oQS5lbnRyaWVzKSl7bGV0IGU9e307cmV0dXJuIGkuZm9yRWFjaEVudHJ5KEEsKEkscik9Pnt0KE5JKEkpLHIsZSwwKX0pLGV9cmV0dXJuIG51bGx9dmFyIHdBPUdJO2Z1bmN0aW9uIGtJKEEsdCxlKXtpZihpLmlzU3RyaW5nKEEpKXRyeXtyZXR1cm4odHx8SlNPTi5wYXJzZSkoQSksaS50cmltKEEpfWNhdGNoKEkpe2lmKEkubmFtZSE9PSJTeW50YXhFcnJvciIpdGhyb3cgSX1yZXR1cm4oZXx8SlNPTi5zdHJpbmdpZnkpKEEpfXZhciBfQT17dHJhbnNpdGlvbmFsOm1BLGFkYXB0ZXI6WyJ4aHIiLCJodHRwIiwiZmV0Y2giXSx0cmFuc2Zvcm1SZXF1ZXN0OltmdW5jdGlvbih0LGUpe2xldCBJPWUuZ2V0Q29udGVudFR5cGUoKXx8IiIscj1JLmluZGV4T2YoImFwcGxpY2F0aW9uL2pzb24iKT4tMSxvPWkuaXNPYmplY3QodCk7aWYobyYmaS5pc0hUTUxGb3JtKHQpJiYodD1uZXcgRm9ybURhdGEodCkpLGkuaXNGb3JtRGF0YSh0KSlyZXR1cm4gcj9KU09OLnN0cmluZ2lmeSh3QSh0KSk6dDtpZihpLmlzQXJyYXlCdWZmZXIodCl8fGkuaXNCdWZmZXIodCl8fGkuaXNTdHJlYW0odCl8fGkuaXNGaWxlKHQpfHxpLmlzQmxvYih0KXx8aS5pc1JlYWRhYmxlU3RyZWFtKHQpKXJldHVybiB0O2lmKGkuaXNBcnJheUJ1ZmZlclZpZXcodCkpcmV0dXJuIHQuYnVmZmVyO2lmKGkuaXNVUkxTZWFyY2hQYXJhbXModCkpcmV0dXJuIGUuc2V0Q29udGVudFR5cGUoImFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZDtjaGFyc2V0PXV0Zi04IiwhMSksdC50b1N0cmluZygpO2xldCBDO2lmKG8pe2lmKEkuaW5kZXhPZigiYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkIik+LTEpcmV0dXJuIFZBKHQsdGhpcy5mb3JtU2VyaWFsaXplcikudG9TdHJpbmcoKTtpZigoQz1pLmlzRmlsZUxpc3QodCkpfHxJLmluZGV4T2YoIm11bHRpcGFydC9mb3JtLWRhdGEiKT4tMSl7bGV0IFE9dGhpcy5lbnYmJnRoaXMuZW52LkZvcm1EYXRhO3JldHVybiBxKEM/eyJmaWxlc1tdIjp0fTp0LFEmJm5ldyBRLHRoaXMuZm9ybVNlcmlhbGl6ZXIpfX1yZXR1cm4gb3x8cj8oZS5zZXRDb250ZW50VHlwZSgiYXBwbGljYXRpb24vanNvbiIsITEpLGtJKHQpKTp0fV0sdHJhbnNmb3JtUmVzcG9uc2U6W2Z1bmN0aW9uKHQpe2xldCBlPXRoaXMudHJhbnNpdGlvbmFsfHxfQS50cmFuc2l0aW9uYWwsST1lJiZlLmZvcmNlZEpTT05QYXJzaW5nLHI9dGhpcy5yZXNwb25zZVR5cGU9PT0ianNvbiI7aWYoaS5pc1Jlc3BvbnNlKHQpfHxpLmlzUmVhZGFibGVTdHJlYW0odCkpcmV0dXJuIHQ7aWYodCYmaS5pc1N0cmluZyh0KSYmKEkmJiF0aGlzLnJlc3BvbnNlVHlwZXx8cikpe2xldCBnPSEoZSYmZS5zaWxlbnRKU09OUGFyc2luZykmJnI7dHJ5e3JldHVybiBKU09OLnBhcnNlKHQpfWNhdGNoKEMpe2lmKGcpdGhyb3cgQy5uYW1lPT09IlN5bnRheEVycm9yIj91LmZyb20oQyx1LkVSUl9CQURfUkVTUE9OU0UsdGhpcyxudWxsLHRoaXMucmVzcG9uc2UpOkN9fXJldHVybiB0fV0sdGltZW91dDowLHhzcmZDb29raWVOYW1lOiJYU1JGLVRPS0VOIix4c3JmSGVhZGVyTmFtZToiWC1YU1JGLVRPS0VOIixtYXhDb250ZW50TGVuZ3RoOi0xLG1heEJvZHlMZW5ndGg6LTEsZW52OntGb3JtRGF0YTp3LmNsYXNzZXMuRm9ybURhdGEsQmxvYjp3LmNsYXNzZXMuQmxvYn0sdmFsaWRhdGVTdGF0dXM6ZnVuY3Rpb24odCl7cmV0dXJuIHQ+PTIwMCYmdDwzMDB9LGhlYWRlcnM6e2NvbW1vbjp7QWNjZXB0OiJhcHBsaWNhdGlvbi9qc29uLCB0ZXh0L3BsYWluLCAqLyoiLCJDb250ZW50LVR5cGUiOnZvaWQgMH19fTtpLmZvckVhY2goWyJkZWxldGUiLCJnZXQiLCJoZWFkIiwicG9zdCIsInB1dCIsInBhdGNoIl0sQT0+e19BLmhlYWRlcnNbQV09e319KTt2YXIgWj1fQTt2YXIgTEk9aS50b09iamVjdFNldChbImFnZSIsImF1dGhvcml6YXRpb24iLCJjb250ZW50LWxlbmd0aCIsImNvbnRlbnQtdHlwZSIsImV0YWciLCJleHBpcmVzIiwiZnJvbSIsImhvc3QiLCJpZi1tb2RpZmllZC1zaW5jZSIsImlmLXVubW9kaWZpZWQtc2luY2UiLCJsYXN0LW1vZGlmaWVkIiwibG9jYXRpb24iLCJtYXgtZm9yd2FyZHMiLCJwcm94eS1hdXRob3JpemF0aW9uIiwicmVmZXJlciIsInJldHJ5LWFmdGVyIiwidXNlci1hZ2VudCJdKSx4dD1BPT57bGV0IHQ9e30sZSxJLHI7cmV0dXJuIEEmJkEuc3BsaXQoYCUwQWApLmZvckVhY2goZnVuY3Rpb24oZyl7cj1nLmluZGV4T2YoIjoiKSxlPWcuc3Vic3RyaW5nKDAscikudHJpbSgpLnRvTG93ZXJDYXNlKCksST1nLnN1YnN0cmluZyhyKzEpLnRyaW0oKSwhKCFlfHx0W2VdJiZMSVtlXSkmJihlPT09InNldC1jb29raWUiP3RbZV0/dFtlXS5wdXNoKEkpOnRbZV09W0ldOnRbZV09dFtlXT90W2VdKyIsICIrSTpJKX0pLHR9O3ZhciBQdD1TeW1ib2woImludGVybmFscyIpO2Z1bmN0aW9uIGVBKEEpe3JldHVybiBBJiZTdHJpbmcoQSkudHJpbSgpLnRvTG93ZXJDYXNlKCl9ZnVuY3Rpb24gcEEoQSl7cmV0dXJuIEE9PT0hMXx8QT09bnVsbD9BOmkuaXNBcnJheShBKT9BLm1hcChwQSk6U3RyaW5nKEEpfWZ1bmN0aW9uIEpJKEEpe2xldCB0PU9iamVjdC5jcmVhdGUobnVsbCksZT0vKFteXFxzLDs9XSspXFxzKig/Oj1cXHMqKFteLDtdKykpPy9nLEk7Zm9yKDtJPWUuZXhlYyhBKTspdFtJWzFdXT1JWzJdO3JldHVybiB0fXZhciBiST1BPT4vXlstX2EtekEtWjAtOV5gfH4sISUyMyQlJlwnKisuXSskLy50ZXN0KEEudHJpbSgpKTtmdW5jdGlvbiBYQShBLHQsZSxJLHIpe2lmKGkuaXNGdW5jdGlvbihJKSlyZXR1cm4gSS5jYWxsKHRoaXMsdCxlKTtpZihyJiYodD1lKSwhIWkuaXNTdHJpbmcodCkpe2lmKGkuaXNTdHJpbmcoSSkpcmV0dXJuIHQuaW5kZXhPZihJKSE9PS0xO2lmKGkuaXNSZWdFeHAoSSkpcmV0dXJuIEkudGVzdCh0KX19ZnVuY3Rpb24gSEkoQSl7cmV0dXJuIEEudHJpbSgpLnRvTG93ZXJDYXNlKCkucmVwbGFjZSgvKFthLXpcXGRdKShcXHcqKS9nLCh0LGUsSSk9PmUudG9VcHBlckNhc2UoKStJKX1mdW5jdGlvbiBZSShBLHQpe2xldCBlPWkudG9DYW1lbENhc2UoIiAiK3QpO1siZ2V0Iiwic2V0IiwiaGFzIl0uZm9yRWFjaChJPT57T2JqZWN0LmRlZmluZVByb3BlcnR5KEEsSStlLHt2YWx1ZTpmdW5jdGlvbihyLG8sZyl7cmV0dXJuIHRoaXNbSV0uY2FsbCh0aGlzLHQscixvLGcpfSxjb25maWd1cmFibGU6ITB9KX0pfXZhciBWPWNsYXNze2NvbnN0cnVjdG9yKHQpe3QmJnRoaXMuc2V0KHQpfXNldCh0LGUsSSl7bGV0IHI9dGhpcztmdW5jdGlvbiBvKEMsUSxhKXtsZXQgbj1lQShRKTtpZighbil0aHJvdyBuZXcgRXJyb3IoImhlYWRlciBuYW1lIG11c3QgYmUgYSBub24tZW1wdHkgc3RyaW5nIik7bGV0IHM9aS5maW5kS2V5KHIsbik7KCFzfHxyW3NdPT09dm9pZCAwfHxhPT09ITB8fGE9PT12b2lkIDAmJnJbc10hPT0hMSkmJihyW3N8fFFdPXBBKEMpKX1sZXQgZz0oQyxRKT0+aS5mb3JFYWNoKEMsKGEsbik9Pm8oYSxuLFEpKTtpZihpLmlzUGxhaW5PYmplY3QodCl8fHQgaW5zdGFuY2VvZiB0aGlzLmNvbnN0cnVjdG9yKWcodCxlKTtlbHNlIGlmKGkuaXNTdHJpbmcodCkmJih0PXQudHJpbSgpKSYmIWJJKHQpKWcoeHQodCksZSk7ZWxzZSBpZihpLmlzSGVhZGVycyh0KSlmb3IobGV0W0MsUV1vZiB0LmVudHJpZXMoKSlvKFEsQyxJKTtlbHNlIHQhPW51bGwmJm8oZSx0LEkpO3JldHVybiB0aGlzfWdldCh0LGUpe2lmKHQ9ZUEodCksdCl7bGV0IEk9aS5maW5kS2V5KHRoaXMsdCk7aWYoSSl7bGV0IHI9dGhpc1tJXTtpZighZSlyZXR1cm4gcjtpZihlPT09ITApcmV0dXJuIEpJKHIpO2lmKGkuaXNGdW5jdGlvbihlKSlyZXR1cm4gZS5jYWxsKHRoaXMscixJKTtpZihpLmlzUmVnRXhwKGUpKXJldHVybiBlLmV4ZWMocik7dGhyb3cgbmV3IFR5cGVFcnJvcigicGFyc2VyIG11c3QgYmUgYm9vbGVhbnxyZWdleHB8ZnVuY3Rpb24iKX19fWhhcyh0LGUpe2lmKHQ9ZUEodCksdCl7bGV0IEk9aS5maW5kS2V5KHRoaXMsdCk7cmV0dXJuISEoSSYmdGhpc1tJXSE9PXZvaWQgMCYmKCFlfHxYQSh0aGlzLHRoaXNbSV0sSSxlKSkpfXJldHVybiExfWRlbGV0ZSh0LGUpe2xldCBJPXRoaXMscj0hMTtmdW5jdGlvbiBvKGcpe2lmKGc9ZUEoZyksZyl7bGV0IEM9aS5maW5kS2V5KEksZyk7QyYmKCFlfHxYQShJLElbQ10sQyxlKSkmJihkZWxldGUgSVtDXSxyPSEwKX19cmV0dXJuIGkuaXNBcnJheSh0KT90LmZvckVhY2gobyk6byh0KSxyfWNsZWFyKHQpe2xldCBlPU9iamVjdC5rZXlzKHRoaXMpLEk9ZS5sZW5ndGgscj0hMTtmb3IoO0ktLTspe2xldCBvPWVbSV07KCF0fHxYQSh0aGlzLHRoaXNbb10sbyx0LCEwKSkmJihkZWxldGUgdGhpc1tvXSxyPSEwKX1yZXR1cm4gcn1ub3JtYWxpemUodCl7bGV0IGU9dGhpcyxJPXt9O3JldHVybiBpLmZvckVhY2godGhpcywocixvKT0+e2xldCBnPWkuZmluZEtleShJLG8pO2lmKGcpe2VbZ109cEEociksZGVsZXRlIGVbb107cmV0dXJufWxldCBDPXQ/SEkobyk6U3RyaW5nKG8pLnRyaW0oKTtDIT09byYmZGVsZXRlIGVbb10sZVtDXT1wQShyKSxJW0NdPSEwfSksdGhpc31jb25jYXQoLi4udCl7cmV0dXJuIHRoaXMuY29uc3RydWN0b3IuY29uY2F0KHRoaXMsLi4udCl9dG9KU09OKHQpe2xldCBlPU9iamVjdC5jcmVhdGUobnVsbCk7cmV0dXJuIGkuZm9yRWFjaCh0aGlzLChJLHIpPT57SSE9bnVsbCYmSSE9PSExJiYoZVtyXT10JiZpLmlzQXJyYXkoSSk/SS5qb2luKCIsICIpOkkpfSksZX1bU3ltYm9sLml0ZXJhdG9yXSgpe3JldHVybiBPYmplY3QuZW50cmllcyh0aGlzLnRvSlNPTigpKVtTeW1ib2wuaXRlcmF0b3JdKCl9dG9TdHJpbmcoKXtyZXR1cm4gT2JqZWN0LmVudHJpZXModGhpcy50b0pTT04oKSkubWFwKChbdCxlXSk9PnQrIjogIitlKS5qb2luKGAlMEFgKX1nZXRbU3ltYm9sLnRvU3RyaW5nVGFnXSgpe3JldHVybiJBeGlvc0hlYWRlcnMifXN0YXRpYyBmcm9tKHQpe3JldHVybiB0IGluc3RhbmNlb2YgdGhpcz90Om5ldyB0aGlzKHQpfXN0YXRpYyBjb25jYXQodCwuLi5lKXtsZXQgST1uZXcgdGhpcyh0KTtyZXR1cm4gZS5mb3JFYWNoKHI9Pkkuc2V0KHIpKSxJfXN0YXRpYyBhY2Nlc3Nvcih0KXtsZXQgST0odGhpc1tQdF09dGhpc1tQdF09e2FjY2Vzc29yczp7fX0pLmFjY2Vzc29ycyxyPXRoaXMucHJvdG90eXBlO2Z1bmN0aW9uIG8oZyl7bGV0IEM9ZUEoZyk7SVtDXXx8KFlJKHIsZyksSVtDXT0hMCl9cmV0dXJuIGkuaXNBcnJheSh0KT90LmZvckVhY2gobyk6byh0KSx0aGlzfX07Vi5hY2Nlc3NvcihbIkNvbnRlbnQtVHlwZSIsIkNvbnRlbnQtTGVuZ3RoIiwiQWNjZXB0IiwiQWNjZXB0LUVuY29kaW5nIiwiVXNlci1BZ2VudCIsIkF1dGhvcml6YXRpb24iXSk7aS5yZWR1Y2VEZXNjcmlwdG9ycyhWLnByb3RvdHlwZSwoe3ZhbHVlOkF9LHQpPT57bGV0IGU9dFswXS50b1VwcGVyQ2FzZSgpK3Quc2xpY2UoMSk7cmV0dXJue2dldDooKT0+QSxzZXQoSSl7dGhpc1tlXT1JfX19KTtpLmZyZWV6ZU1ldGhvZHMoVik7dmFyIG09VjtmdW5jdGlvbiBJQShBLHQpe2xldCBlPXRoaXN8fFosST10fHxlLHI9bS5mcm9tKEkuaGVhZGVycyksbz1JLmRhdGE7cmV0dXJuIGkuZm9yRWFjaChBLGZ1bmN0aW9uKEMpe289Qy5jYWxsKGUsbyxyLm5vcm1hbGl6ZSgpLHQ/dC5zdGF0dXM6dm9pZCAwKX0pLHIubm9ybWFsaXplKCksb31mdW5jdGlvbiByQShBKXtyZXR1cm4hIShBJiZBLl9fQ0FOQ0VMX18pfWZ1bmN0aW9uIGp0KEEsdCxlKXt1LmNhbGwodGhpcyxBPz8iY2FuY2VsZWQiLHUuRVJSX0NBTkNFTEVELHQsZSksdGhpcy5uYW1lPSJDYW5jZWxlZEVycm9yIn1pLmluaGVyaXRzKGp0LHUse19fQ0FOQ0VMX186ITB9KTt2YXIgYj1qdDtmdW5jdGlvbiBvQShBLHQsZSl7bGV0IEk9ZS5jb25maWcudmFsaWRhdGVTdGF0dXM7IWUuc3RhdHVzfHwhSXx8SShlLnN0YXR1cyk/QShlKTp0KG5ldyB1KCJSZXF1ZXN0IGZhaWxlZCB3aXRoIHN0YXR1cyBjb2RlICIrZS5zdGF0dXMsW3UuRVJSX0JBRF9SRVFVRVNULHUuRVJSX0JBRF9SRVNQT05TRV1bTWF0aC5mbG9vcihlLnN0YXR1cy8xMDApLTRdLGUuY29uZmlnLGUucmVxdWVzdCxlKSl9ZnVuY3Rpb24gekEoQSl7bGV0IHQ9L14oWy0rXFx3XXsxLDI1fSkoOj9cXC9cXC98OikvLmV4ZWMoQSk7cmV0dXJuIHQmJnRbMV18fCIifWZ1bmN0aW9uIHFJKEEsdCl7QT1BfHwxMDtsZXQgZT1uZXcgQXJyYXkoQSksST1uZXcgQXJyYXkoQSkscj0wLG89MCxnO3JldHVybiB0PXQhPT12b2lkIDA/dDoxZTMsZnVuY3Rpb24oUSl7bGV0IGE9RGF0ZS5ub3coKSxuPUlbb107Z3x8KGc9YSksZVtyXT1RLElbcl09YTtsZXQgcz1vLGY9MDtmb3IoO3MhPT1yOylmKz1lW3MrK10scz1zJUE7aWYocj0ocisxKSVBLHI9PT1vJiYobz0obysxKSVBKSxhLWc8dClyZXR1cm47bGV0IEI9biYmYS1uO3JldHVybiBCP01hdGgucm91bmQoZioxZTMvQik6dm9pZCAwfX12YXIgV3Q9cUk7ZnVuY3Rpb24gTUkoQSx0KXtsZXQgZT0wLEk9MWUzL3QscixvLGc9KGEsbj1EYXRlLm5vdygpKT0+e2U9bixyPW51bGwsbyYmKGNsZWFyVGltZW91dChvKSxvPW51bGwpLEEuYXBwbHkobnVsbCxhKX07cmV0dXJuWyguLi5hKT0+e2xldCBuPURhdGUubm93KCkscz1uLWU7cz49ST9nKGEsbik6KHI9YSxvfHwobz1zZXRUaW1lb3V0KCgpPT57bz1udWxsLGcocil9LEktcykpKX0sKCk9PnImJmcocildfXZhciBadD1NSTt2YXIgXz0oQSx0LGU9Myk9PntsZXQgST0wLHI9V3QoNTAsMjUwKTtyZXR1cm4gWnQobz0+e2xldCBnPW8ubG9hZGVkLEM9by5sZW5ndGhDb21wdXRhYmxlP28udG90YWw6dm9pZCAwLFE9Zy1JLGE9cihRKSxuPWc8PUM7ST1nO2xldCBzPXtsb2FkZWQ6Zyx0b3RhbDpDLHByb2dyZXNzOkM/Zy9DOnZvaWQgMCxieXRlczpRLHJhdGU6YXx8dm9pZCAwLGVzdGltYXRlZDphJiZDJiZuPyhDLWcpL2E6dm9pZCAwLGV2ZW50Om8sbGVuZ3RoQ29tcHV0YWJsZTpDIT1udWxsLFt0PyJkb3dubG9hZCI6InVwbG9hZCJdOiEwfTtBKHMpfSxlKX0sdkE9KEEsdCk9PntsZXQgZT1BIT1udWxsO3JldHVybltJPT50WzBdKHtsZW5ndGhDb21wdXRhYmxlOmUsdG90YWw6QSxsb2FkZWQ6SX0pLHRbMV1dfSwkQT1BPT4oLi4udCk9PmkuYXNhcCgoKT0+QSguLi50KSk7dmFyIFZ0PXcuaGFzU3RhbmRhcmRCcm93c2VyRW52P2Z1bmN0aW9uKCl7bGV0IHQ9Lyhtc2llfHRyaWRlbnQpL2kudGVzdChuYXZpZ2F0b3IudXNlckFnZW50KSxlPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImEiKSxJO2Z1bmN0aW9uIHIobyl7bGV0IGc9bztyZXR1cm4gdCYmKGUuc2V0QXR0cmlidXRlKCJocmVmIixnKSxnPWUuaHJlZiksZS5zZXRBdHRyaWJ1dGUoImhyZWYiLGcpLHtocmVmOmUuaHJlZixwcm90b2NvbDplLnByb3RvY29sP2UucHJvdG9jb2wucmVwbGFjZSgvOiQvLCIiKToiIixob3N0OmUuaG9zdCxzZWFyY2g6ZS5zZWFyY2g/ZS5zZWFyY2gucmVwbGFjZSgvXlxcPy8sIiIpOiIiLGhhc2g6ZS5oYXNoP2UuaGFzaC5yZXBsYWNlKC9eJTIzLywiIik6IiIsaG9zdG5hbWU6ZS5ob3N0bmFtZSxwb3J0OmUucG9ydCxwYXRobmFtZTplLnBhdGhuYW1lLmNoYXJBdCgwKT09PSIvIj9lLnBhdGhuYW1lOiIvIitlLnBhdGhuYW1lfX1yZXR1cm4gST1yKHdpbmRvdy5sb2NhdGlvbi5ocmVmKSxmdW5jdGlvbihnKXtsZXQgQz1pLmlzU3RyaW5nKGcpP3IoZyk6ZztyZXR1cm4gQy5wcm90b2NvbD09PUkucHJvdG9jb2wmJkMuaG9zdD09PUkuaG9zdH19KCk6ZnVuY3Rpb24oKXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4hMH19KCk7dmFyIF90PXcuaGFzU3RhbmRhcmRCcm93c2VyRW52P3t3cml0ZShBLHQsZSxJLHIsbyl7bGV0IGc9W0ErIj0iK2VuY29kZVVSSUNvbXBvbmVudCh0KV07aS5pc051bWJlcihlKSYmZy5wdXNoKCJleHBpcmVzPSIrbmV3IERhdGUoZSkudG9HTVRTdHJpbmcoKSksaS5pc1N0cmluZyhJKSYmZy5wdXNoKCJwYXRoPSIrSSksaS5pc1N0cmluZyhyKSYmZy5wdXNoKCJkb21haW49IityKSxvPT09ITAmJmcucHVzaCgic2VjdXJlIiksZG9jdW1lbnQuY29va2llPWcuam9pbigiOyAiKX0scmVhZChBKXtsZXQgdD1kb2N1bWVudC5jb29raWUubWF0Y2gobmV3IFJlZ0V4cCgiKF58O1xcXFxzKikoIitBKyIpPShbXjtdKikiKSk7cmV0dXJuIHQ/ZGVjb2RlVVJJQ29tcG9uZW50KHRbM10pOm51bGx9LHJlbW92ZShBKXt0aGlzLndyaXRlKEEsIiIsRGF0ZS5ub3coKS04NjRlNSl9fTp7d3JpdGUoKXt9LHJlYWQoKXtyZXR1cm4gbnVsbH0scmVtb3ZlKCl7fX07ZnVuY3Rpb24gQXQoQSl7cmV0dXJuL14oW2Etel1bYS16XFxkK1xcLS5dKjopP1xcL1xcLy9pLnRlc3QoQSl9ZnVuY3Rpb24gdHQoQSx0KXtyZXR1cm4gdD9BLnJlcGxhY2UoL1xcLz9cXC8kLywiIikrIi8iK3QucmVwbGFjZSgvXlxcLysvLCIiKTpBfWZ1bmN0aW9uIGdBKEEsdCl7cmV0dXJuIEEmJiFBdCh0KT90dChBLHQpOnR9dmFyIFh0PUE9PkEgaW5zdGFuY2VvZiBtP3suLi5BfTpBO2Z1bmN0aW9uIGsoQSx0KXt0PXR8fHt9O2xldCBlPXt9O2Z1bmN0aW9uIEkoYSxuLHMpe3JldHVybiBpLmlzUGxhaW5PYmplY3QoYSkmJmkuaXNQbGFpbk9iamVjdChuKT9pLm1lcmdlLmNhbGwoe2Nhc2VsZXNzOnN9LGEsbik6aS5pc1BsYWluT2JqZWN0KG4pP2kubWVyZ2Uoe30sbik6aS5pc0FycmF5KG4pP24uc2xpY2UoKTpufWZ1bmN0aW9uIHIoYSxuLHMpe2lmKGkuaXNVbmRlZmluZWQobikpe2lmKCFpLmlzVW5kZWZpbmVkKGEpKXJldHVybiBJKHZvaWQgMCxhLHMpfWVsc2UgcmV0dXJuIEkoYSxuLHMpfWZ1bmN0aW9uIG8oYSxuKXtpZighaS5pc1VuZGVmaW5lZChuKSlyZXR1cm4gSSh2b2lkIDAsbil9ZnVuY3Rpb24gZyhhLG4pe2lmKGkuaXNVbmRlZmluZWQobikpe2lmKCFpLmlzVW5kZWZpbmVkKGEpKXJldHVybiBJKHZvaWQgMCxhKX1lbHNlIHJldHVybiBJKHZvaWQgMCxuKX1mdW5jdGlvbiBDKGEsbixzKXtpZihzIGluIHQpcmV0dXJuIEkoYSxuKTtpZihzIGluIEEpcmV0dXJuIEkodm9pZCAwLGEpfWxldCBRPXt1cmw6byxtZXRob2Q6byxkYXRhOm8sYmFzZVVSTDpnLHRyYW5zZm9ybVJlcXVlc3Q6Zyx0cmFuc2Zvcm1SZXNwb25zZTpnLHBhcmFtc1NlcmlhbGl6ZXI6Zyx0aW1lb3V0OmcsdGltZW91dE1lc3NhZ2U6Zyx3aXRoQ3JlZGVudGlhbHM6Zyx3aXRoWFNSRlRva2VuOmcsYWRhcHRlcjpnLHJlc3BvbnNlVHlwZTpnLHhzcmZDb29raWVOYW1lOmcseHNyZkhlYWRlck5hbWU6ZyxvblVwbG9hZFByb2dyZXNzOmcsb25Eb3dubG9hZFByb2dyZXNzOmcsZGVjb21wcmVzczpnLG1heENvbnRlbnRMZW5ndGg6ZyxtYXhCb2R5TGVuZ3RoOmcsYmVmb3JlUmVkaXJlY3Q6Zyx0cmFuc3BvcnQ6ZyxodHRwQWdlbnQ6ZyxodHRwc0FnZW50OmcsY2FuY2VsVG9rZW46Zyxzb2NrZXRQYXRoOmcscmVzcG9uc2VFbmNvZGluZzpnLHZhbGlkYXRlU3RhdHVzOkMsaGVhZGVyczooYSxuKT0+cihYdChhKSxYdChuKSwhMCl9O3JldHVybiBpLmZvckVhY2goT2JqZWN0LmtleXMoT2JqZWN0LmFzc2lnbih7fSxBLHQpKSxmdW5jdGlvbihuKXtsZXQgcz1RW25dfHxyLGY9cyhBW25dLHRbbl0sbik7aS5pc1VuZGVmaW5lZChmKSYmcyE9PUN8fChlW25dPWYpfSksZX12YXIgU0E9QT0+e2xldCB0PWsoe30sQSkse2RhdGE6ZSx3aXRoWFNSRlRva2VuOkkseHNyZkhlYWRlck5hbWU6cix4c3JmQ29va2llTmFtZTpvLGhlYWRlcnM6ZyxhdXRoOkN9PXQ7dC5oZWFkZXJzPWc9bS5mcm9tKGcpLHQudXJsPXRBKGdBKHQuYmFzZVVSTCx0LnVybCksQS5wYXJhbXMsQS5wYXJhbXNTZXJpYWxpemVyKSxDJiZnLnNldCgiQXV0aG9yaXphdGlvbiIsIkJhc2ljICIrYnRvYSgoQy51c2VybmFtZXx8IiIpKyI6IisoQy5wYXNzd29yZD91bmVzY2FwZShlbmNvZGVVUklDb21wb25lbnQoQy5wYXNzd29yZCkpOiIiKSkpO2xldCBRO2lmKGkuaXNGb3JtRGF0YShlKSl7aWYody5oYXNTdGFuZGFyZEJyb3dzZXJFbnZ8fHcuaGFzU3RhbmRhcmRCcm93c2VyV2ViV29ya2VyRW52KWcuc2V0Q29udGVudFR5cGUodm9pZCAwKTtlbHNlIGlmKChRPWcuZ2V0Q29udGVudFR5cGUoKSkhPT0hMSl7bGV0W2EsLi4ubl09UT9RLnNwbGl0KCI7IikubWFwKHM9PnMudHJpbSgpKS5maWx0ZXIoQm9vbGVhbik6W107Zy5zZXRDb250ZW50VHlwZShbYXx8Im11bHRpcGFydC9mb3JtLWRhdGEiLC4uLm5dLmpvaW4oIjsgIikpfX1pZih3Lmhhc1N0YW5kYXJkQnJvd3NlckVudiYmKEkmJmkuaXNGdW5jdGlvbihJKSYmKEk9SSh0KSksSXx8SSE9PSExJiZWdCh0LnVybCkpKXtsZXQgYT1yJiZvJiZfdC5yZWFkKG8pO2EmJmcuc2V0KHIsYSl9cmV0dXJuIHR9O3ZhciBUST10eXBlb2YgWE1MSHR0cFJlcXVlc3Q8InUiLHp0PVRJJiZmdW5jdGlvbihBKXtyZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24oZSxJKXtsZXQgcj1TQShBKSxvPXIuZGF0YSxnPW0uZnJvbShyLmhlYWRlcnMpLm5vcm1hbGl6ZSgpLHtyZXNwb25zZVR5cGU6QyxvblVwbG9hZFByb2dyZXNzOlEsb25Eb3dubG9hZFByb2dyZXNzOmF9PXIsbixzLGYsQixFO2Z1bmN0aW9uIGwoKXtCJiZCKCksRSYmRSgpLHIuY2FuY2VsVG9rZW4mJnIuY2FuY2VsVG9rZW4udW5zdWJzY3JpYmUobiksci5zaWduYWwmJnIuc2lnbmFsLnJlbW92ZUV2ZW50TGlzdGVuZXIoImFib3J0IixuKX1sZXQgYz1uZXcgWE1MSHR0cFJlcXVlc3Q7Yy5vcGVuKHIubWV0aG9kLnRvVXBwZXJDYXNlKCksci51cmwsITApLGMudGltZW91dD1yLnRpbWVvdXQ7ZnVuY3Rpb24gcCgpe2lmKCFjKXJldHVybjtsZXQgRD1tLmZyb20oImdldEFsbFJlc3BvbnNlSGVhZGVycyJpbiBjJiZjLmdldEFsbFJlc3BvbnNlSGVhZGVycygpKSxLPXtkYXRhOiFDfHxDPT09InRleHQifHxDPT09Impzb24iP2MucmVzcG9uc2VUZXh0OmMucmVzcG9uc2Usc3RhdHVzOmMuc3RhdHVzLHN0YXR1c1RleHQ6Yy5zdGF0dXNUZXh0LGhlYWRlcnM6RCxjb25maWc6QSxyZXF1ZXN0OmN9O29BKGZ1bmN0aW9uKEope2UoSiksbCgpfSxmdW5jdGlvbihKKXtJKEopLGwoKX0sSyksYz1udWxsfSJvbmxvYWRlbmQiaW4gYz9jLm9ubG9hZGVuZD1wOmMub25yZWFkeXN0YXRlY2hhbmdlPWZ1bmN0aW9uKCl7IWN8fGMucmVhZHlTdGF0ZSE9PTR8fGMuc3RhdHVzPT09MCYmIShjLnJlc3BvbnNlVVJMJiZjLnJlc3BvbnNlVVJMLmluZGV4T2YoImZpbGU6Iik9PT0wKXx8c2V0VGltZW91dChwKX0sYy5vbmFib3J0PWZ1bmN0aW9uKCl7YyYmKEkobmV3IHUoIlJlcXVlc3QgYWJvcnRlZCIsdS5FQ09OTkFCT1JURUQsQSxjKSksYz1udWxsKX0sYy5vbmVycm9yPWZ1bmN0aW9uKCl7SShuZXcgdSgiTmV0d29yayBFcnJvciIsdS5FUlJfTkVUV09SSyxBLGMpKSxjPW51bGx9LGMub250aW1lb3V0PWZ1bmN0aW9uKCl7bGV0IFU9ci50aW1lb3V0PyJ0aW1lb3V0IG9mICIrci50aW1lb3V0KyJtcyBleGNlZWRlZCI6InRpbWVvdXQgZXhjZWVkZWQiLEs9ci50cmFuc2l0aW9uYWx8fG1BO3IudGltZW91dEVycm9yTWVzc2FnZSYmKFU9ci50aW1lb3V0RXJyb3JNZXNzYWdlKSxJKG5ldyB1KFUsSy5jbGFyaWZ5VGltZW91dEVycm9yP3UuRVRJTUVET1VUOnUuRUNPTk5BQk9SVEVELEEsYykpLGM9bnVsbH0sbz09PXZvaWQgMCYmZy5zZXRDb250ZW50VHlwZShudWxsKSwic2V0UmVxdWVzdEhlYWRlciJpbiBjJiZpLmZvckVhY2goZy50b0pTT04oKSxmdW5jdGlvbihVLEspe2Muc2V0UmVxdWVzdEhlYWRlcihLLFUpfSksaS5pc1VuZGVmaW5lZChyLndpdGhDcmVkZW50aWFscyl8fChjLndpdGhDcmVkZW50aWFscz0hIXIud2l0aENyZWRlbnRpYWxzKSxDJiZDIT09Impzb24iJiYoYy5yZXNwb25zZVR5cGU9ci5yZXNwb25zZVR5cGUpLGEmJihbZixFXT1fKGEsITApLGMuYWRkRXZlbnRMaXN0ZW5lcigicHJvZ3Jlc3MiLGYpKSxRJiZjLnVwbG9hZCYmKFtzLEJdPV8oUSksYy51cGxvYWQuYWRkRXZlbnRMaXN0ZW5lcigicHJvZ3Jlc3MiLHMpLGMudXBsb2FkLmFkZEV2ZW50TGlzdGVuZXIoImxvYWRlbmQiLEIpKSwoci5jYW5jZWxUb2tlbnx8ci5zaWduYWwpJiYobj1EPT57YyYmKEkoIUR8fEQudHlwZT9uZXcgYihudWxsLEEsYyk6RCksYy5hYm9ydCgpLGM9bnVsbCl9LHIuY2FuY2VsVG9rZW4mJnIuY2FuY2VsVG9rZW4uc3Vic2NyaWJlKG4pLHIuc2lnbmFsJiYoci5zaWduYWwuYWJvcnRlZD9uKCk6ci5zaWduYWwuYWRkRXZlbnRMaXN0ZW5lcigiYWJvcnQiLG4pKSk7bGV0IFM9ekEoci51cmwpO2lmKFMmJncucHJvdG9jb2xzLmluZGV4T2YoUyk9PT0tMSl7SShuZXcgdSgiVW5zdXBwb3J0ZWQgcHJvdG9jb2wgIitTKyI6Iix1LkVSUl9CQURfUkVRVUVTVCxBKSk7cmV0dXJufWMuc2VuZChvfHxudWxsKX0pfTt2YXIgS0k9KEEsdCk9PntsZXQgZT1uZXcgQWJvcnRDb250cm9sbGVyLEkscj1mdW5jdGlvbihRKXtpZighSSl7ST0hMCxnKCk7bGV0IGE9USBpbnN0YW5jZW9mIEVycm9yP1E6dGhpcy5yZWFzb247ZS5hYm9ydChhIGluc3RhbmNlb2YgdT9hOm5ldyBiKGEgaW5zdGFuY2VvZiBFcnJvcj9hLm1lc3NhZ2U6YSkpfX0sbz10JiZzZXRUaW1lb3V0KCgpPT57cihuZXcgdShgdGltZW91dCAke3R9IG9mIG1zIGV4Y2VlZGVkYCx1LkVUSU1FRE9VVCkpfSx0KSxnPSgpPT57QSYmKG8mJmNsZWFyVGltZW91dChvKSxvPW51bGwsQS5mb3JFYWNoKFE9PntRJiYoUS5yZW1vdmVFdmVudExpc3RlbmVyP1EucmVtb3ZlRXZlbnRMaXN0ZW5lcigiYWJvcnQiLHIpOlEudW5zdWJzY3JpYmUocikpfSksQT1udWxsKX07QS5mb3JFYWNoKFE9PlEmJlEuYWRkRXZlbnRMaXN0ZW5lciYmUS5hZGRFdmVudExpc3RlbmVyKCJhYm9ydCIscikpO2xldHtzaWduYWw6Q309ZTtyZXR1cm4gQy51bnN1YnNjcmliZT1nLFtDLCgpPT57byYmY2xlYXJUaW1lb3V0KG8pLG89bnVsbH1dfSx2dD1LSTt2YXIgT0k9ZnVuY3Rpb24qKEEsdCl7bGV0IGU9QS5ieXRlTGVuZ3RoO2lmKCF0fHxlPHQpe3lpZWxkIEE7cmV0dXJufWxldCBJPTAscjtmb3IoO0k8ZTspcj1JK3QseWllbGQgQS5zbGljZShJLHIpLEk9cn0seEk9YXN5bmMgZnVuY3Rpb24qKEEsdCxlKXtmb3IgYXdhaXQobGV0IEkgb2YgQSl5aWVsZCpPSShBcnJheUJ1ZmZlci5pc1ZpZXcoSSk/STphd2FpdCBlKFN0cmluZyhJKSksdCl9LGV0PShBLHQsZSxJLHIpPT57bGV0IG89eEkoQSx0LHIpLGc9MCxDLFE9YT0+e0N8fChDPSEwLEkmJkkoYSkpfTtyZXR1cm4gbmV3IFJlYWRhYmxlU3RyZWFtKHthc3luYyBwdWxsKGEpe3RyeXtsZXR7ZG9uZTpuLHZhbHVlOnN9PWF3YWl0IG8ubmV4dCgpO2lmKG4pe1EoKSxhLmNsb3NlKCk7cmV0dXJufWxldCBmPXMuYnl0ZUxlbmd0aDtpZihlKXtsZXQgQj1nKz1mO2UoQil9YS5lbnF1ZXVlKG5ldyBVaW50OEFycmF5KHMpKX1jYXRjaChuKXt0aHJvdyBRKG4pLG59fSxjYW5jZWwoYSl7cmV0dXJuIFEoYSksby5yZXR1cm4oKX19LHtoaWdoV2F0ZXJNYXJrOjJ9KX07dmFyIFJBPXR5cGVvZiBmZXRjaD09ImZ1bmN0aW9uIiYmdHlwZW9mIFJlcXVlc3Q9PSJmdW5jdGlvbiImJnR5cGVvZiBSZXNwb25zZT09ImZ1bmN0aW9uIixBZT1SQSYmdHlwZW9mIFJlYWRhYmxlU3RyZWFtPT0iZnVuY3Rpb24iLEl0PVJBJiYodHlwZW9mIFRleHRFbmNvZGVyPT0iZnVuY3Rpb24iPyhBPT50PT5BLmVuY29kZSh0KSkobmV3IFRleHRFbmNvZGVyKTphc3luYyBBPT5uZXcgVWludDhBcnJheShhd2FpdCBuZXcgUmVzcG9uc2UoQSkuYXJyYXlCdWZmZXIoKSkpLHRlPShBLC4uLnQpPT57dHJ5e3JldHVybiEhQSguLi50KX1jYXRjaHtyZXR1cm4hMX19LFBJPUFlJiZ0ZSgoKT0+e2xldCBBPSExLHQ9bmV3IFJlcXVlc3Qody5vcmlnaW4se2JvZHk6bmV3IFJlYWRhYmxlU3RyZWFtLG1ldGhvZDoiUE9TVCIsZ2V0IGR1cGxleCgpe3JldHVybiBBPSEwLCJoYWxmIn19KS5oZWFkZXJzLmhhcygiQ29udGVudC1UeXBlIik7cmV0dXJuIEEmJiF0fSksJHQ9NjQqMTAyNCxydD1BZSYmdGUoKCk9PmkuaXNSZWFkYWJsZVN0cmVhbShuZXcgUmVzcG9uc2UoIiIpLmJvZHkpKSxGQT17c3RyZWFtOnJ0JiYoQT0+QS5ib2R5KX07UkEmJihBPT57WyJ0ZXh0IiwiYXJyYXlCdWZmZXIiLCJibG9iIiwiZm9ybURhdGEiLCJzdHJlYW0iXS5mb3JFYWNoKHQ9PnshRkFbdF0mJihGQVt0XT1pLmlzRnVuY3Rpb24oQVt0XSk/ZT0+ZVt0XSgpOihlLEkpPT57dGhyb3cgbmV3IHUoYFJlc3BvbnNlIHR5cGUgXCcke3R9XCcgaXMgbm90IHN1cHBvcnRlZGAsdS5FUlJfTk9UX1NVUFBPUlQsSSl9KX0pfSkobmV3IFJlc3BvbnNlKTt2YXIgakk9YXN5bmMgQT0+e2lmKEE9PW51bGwpcmV0dXJuIDA7aWYoaS5pc0Jsb2IoQSkpcmV0dXJuIEEuc2l6ZTtpZihpLmlzU3BlY0NvbXBsaWFudEZvcm0oQSkpcmV0dXJuKGF3YWl0IG5ldyBSZXF1ZXN0KEEpLmFycmF5QnVmZmVyKCkpLmJ5dGVMZW5ndGg7aWYoaS5pc0FycmF5QnVmZmVyVmlldyhBKXx8aS5pc0FycmF5QnVmZmVyKEEpKXJldHVybiBBLmJ5dGVMZW5ndGg7aWYoaS5pc1VSTFNlYXJjaFBhcmFtcyhBKSYmKEE9QSsiIiksaS5pc1N0cmluZyhBKSlyZXR1cm4oYXdhaXQgSXQoQSkpLmJ5dGVMZW5ndGh9LFdJPWFzeW5jKEEsdCk9PntsZXQgZT1pLnRvRmluaXRlTnVtYmVyKEEuZ2V0Q29udGVudExlbmd0aCgpKTtyZXR1cm4gZT8/akkodCl9LGVlPVJBJiYoYXN5bmMgQT0+e2xldHt1cmw6dCxtZXRob2Q6ZSxkYXRhOkksc2lnbmFsOnIsY2FuY2VsVG9rZW46byx0aW1lb3V0Omcsb25Eb3dubG9hZFByb2dyZXNzOkMsb25VcGxvYWRQcm9ncmVzczpRLHJlc3BvbnNlVHlwZTphLGhlYWRlcnM6bix3aXRoQ3JlZGVudGlhbHM6cz0ic2FtZS1vcmlnaW4iLGZldGNoT3B0aW9uczpmfT1TQShBKTthPWE/KGErIiIpLnRvTG93ZXJDYXNlKCk6InRleHQiO2xldFtCLEVdPXJ8fG98fGc/dnQoW3Isb10sZyk6W10sbCxjLHA9KCk9PnshbCYmc2V0VGltZW91dCgoKT0+e0ImJkIudW5zdWJzY3JpYmUoKX0pLGw9ITB9LFM7dHJ5e2lmKFEmJlBJJiZlIT09ImdldCImJmUhPT0iaGVhZCImJihTPWF3YWl0IFdJKG4sSSkpIT09MCl7bGV0IEw9bmV3IFJlcXVlc3QodCx7bWV0aG9kOiJQT1NUIixib2R5OkksZHVwbGV4OiJoYWxmIn0pLEo7aWYoaS5pc0Zvcm1EYXRhKEkpJiYoSj1MLmhlYWRlcnMuZ2V0KCJjb250ZW50LXR5cGUiKSkmJm4uc2V0Q29udGVudFR5cGUoSiksTC5ib2R5KXtsZXRbSEEsQ0FdPXZBKFMsXygkQShRKSkpO0k9ZXQoTC5ib2R5LCR0LEhBLENBLEl0KX19aS5pc1N0cmluZyhzKXx8KHM9cz8iaW5jbHVkZSI6Im9taXQiKSxjPW5ldyBSZXF1ZXN0KHQsey4uLmYsc2lnbmFsOkIsbWV0aG9kOmUudG9VcHBlckNhc2UoKSxoZWFkZXJzOm4ubm9ybWFsaXplKCkudG9KU09OKCksYm9keTpJLGR1cGxleDoiaGFsZiIsY3JlZGVudGlhbHM6c30pO2xldCBEPWF3YWl0IGZldGNoKGMpLFU9cnQmJihhPT09InN0cmVhbSJ8fGE9PT0icmVzcG9uc2UiKTtpZihydCYmKEN8fFUpKXtsZXQgTD17fTtbInN0YXR1cyIsInN0YXR1c1RleHQiLCJoZWFkZXJzIl0uZm9yRWFjaChFdD0+e0xbRXRdPURbRXRdfSk7bGV0IEo9aS50b0Zpbml0ZU51bWJlcihELmhlYWRlcnMuZ2V0KCJjb250ZW50LWxlbmd0aCIpKSxbSEEsQ0FdPUMmJnZBKEosXygkQShDKSwhMCkpfHxbXTtEPW5ldyBSZXNwb25zZShldChELmJvZHksJHQsSEEsKCk9PntDQSYmQ0EoKSxVJiZwKCl9LEl0KSxMKX1hPWF8fCJ0ZXh0IjtsZXQgSz1hd2FpdCBGQVtpLmZpbmRLZXkoRkEsYSl8fCJ0ZXh0Il0oRCxBKTtyZXR1cm4hVSYmcCgpLEUmJkUoKSxhd2FpdCBuZXcgUHJvbWlzZSgoTCxKKT0+e29BKEwsSix7ZGF0YTpLLGhlYWRlcnM6bS5mcm9tKEQuaGVhZGVycyksc3RhdHVzOkQuc3RhdHVzLHN0YXR1c1RleHQ6RC5zdGF0dXNUZXh0LGNvbmZpZzpBLHJlcXVlc3Q6Y30pfSl9Y2F0Y2goRCl7dGhyb3cgcCgpLEQmJkQubmFtZT09PSJUeXBlRXJyb3IiJiYvZmV0Y2gvaS50ZXN0KEQubWVzc2FnZSk/T2JqZWN0LmFzc2lnbihuZXcgdSgiTmV0d29yayBFcnJvciIsdS5FUlJfTkVUV09SSyxBLGMpLHtjYXVzZTpELmNhdXNlfHxEfSk6dS5mcm9tKEQsRCYmRC5jb2RlLEEsYyl9fSk7dmFyIG90PXtodHRwOmRBLHhocjp6dCxmZXRjaDplZX07aS5mb3JFYWNoKG90LChBLHQpPT57aWYoQSl7dHJ5e09iamVjdC5kZWZpbmVQcm9wZXJ0eShBLCJuYW1lIix7dmFsdWU6dH0pfWNhdGNoe31PYmplY3QuZGVmaW5lUHJvcGVydHkoQSwiYWRhcHRlck5hbWUiLHt2YWx1ZTp0fSl9fSk7dmFyIEllPUE9PmAtICR7QX1gLFpJPUE9PmkuaXNGdW5jdGlvbihBKXx8QT09PW51bGx8fEE9PT0hMSxOQT17Z2V0QWRhcHRlcjpBPT57QT1pLmlzQXJyYXkoQSk/QTpbQV07bGV0e2xlbmd0aDp0fT1BLGUsSSxyPXt9O2ZvcihsZXQgbz0wO288dDtvKyspe2U9QVtvXTtsZXQgZztpZihJPWUsIVpJKGUpJiYoST1vdFsoZz1TdHJpbmcoZSkpLnRvTG93ZXJDYXNlKCldLEk9PT12b2lkIDApKXRocm93IG5ldyB1KGBVbmtub3duIGFkYXB0ZXIgXCcke2d9XCdgKTtpZihJKWJyZWFrO3JbZ3x8IiUyMyIrb109SX1pZighSSl7bGV0IG89T2JqZWN0LmVudHJpZXMocikubWFwKChbQyxRXSk9PmBhZGFwdGVyICR7Q30gYCsoUT09PSExPyJpcyBub3Qgc3VwcG9ydGVkIGJ5IHRoZSBlbnZpcm9ubWVudCI6ImlzIG5vdCBhdmFpbGFibGUgaW4gdGhlIGJ1aWxkIikpLGc9dD9vLmxlbmd0aD4xP2BzaW5jZSA6JTBBYCtvLm1hcChJZSkuam9pbihgJTBBYCk6IiAiK0llKG9bMF0pOiJhcyBubyBhZGFwdGVyIHNwZWNpZmllZCI7dGhyb3cgbmV3IHUoIlRoZXJlIGlzIG5vIHN1aXRhYmxlIGFkYXB0ZXIgdG8gZGlzcGF0Y2ggdGhlIHJlcXVlc3QgIitnLCJFUlJfTk9UX1NVUFBPUlQiKX1yZXR1cm4gSX0sYWRhcHRlcnM6b3R9O2Z1bmN0aW9uIGd0KEEpe2lmKEEuY2FuY2VsVG9rZW4mJkEuY2FuY2VsVG9rZW4udGhyb3dJZlJlcXVlc3RlZCgpLEEuc2lnbmFsJiZBLnNpZ25hbC5hYm9ydGVkKXRocm93IG5ldyBiKG51bGwsQSl9ZnVuY3Rpb24gVUEoQSl7cmV0dXJuIGd0KEEpLEEuaGVhZGVycz1tLmZyb20oQS5oZWFkZXJzKSxBLmRhdGE9SUEuY2FsbChBLEEudHJhbnNmb3JtUmVxdWVzdCksWyJwb3N0IiwicHV0IiwicGF0Y2giXS5pbmRleE9mKEEubWV0aG9kKSE9PS0xJiZBLmhlYWRlcnMuc2V0Q29udGVudFR5cGUoImFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCIsITEpLE5BLmdldEFkYXB0ZXIoQS5hZGFwdGVyfHxaLmFkYXB0ZXIpKEEpLnRoZW4oZnVuY3Rpb24oSSl7cmV0dXJuIGd0KEEpLEkuZGF0YT1JQS5jYWxsKEEsQS50cmFuc2Zvcm1SZXNwb25zZSxJKSxJLmhlYWRlcnM9bS5mcm9tKEkuaGVhZGVycyksSX0sZnVuY3Rpb24oSSl7cmV0dXJuIHJBKEkpfHwoZ3QoQSksSSYmSS5yZXNwb25zZSYmKEkucmVzcG9uc2UuZGF0YT1JQS5jYWxsKEEsQS50cmFuc2Zvcm1SZXNwb25zZSxJLnJlc3BvbnNlKSxJLnJlc3BvbnNlLmhlYWRlcnM9bS5mcm9tKEkucmVzcG9uc2UuaGVhZGVycykpKSxQcm9taXNlLnJlamVjdChJKX0pfXZhciBHQT0iMS43LjQiO3ZhciBpdD17fTtbIm9iamVjdCIsImJvb2xlYW4iLCJudW1iZXIiLCJmdW5jdGlvbiIsInN0cmluZyIsInN5bWJvbCJdLmZvckVhY2goKEEsdCk9PntpdFtBXT1mdW5jdGlvbihJKXtyZXR1cm4gdHlwZW9mIEk9PT1BfHwiYSIrKHQ8MT8ibiAiOiIgIikrQX19KTt2YXIgcmU9e307aXQudHJhbnNpdGlvbmFsPWZ1bmN0aW9uKHQsZSxJKXtmdW5jdGlvbiByKG8sZyl7cmV0dXJuIltBeGlvcyB2IitHQSsiXSBUcmFuc2l0aW9uYWwgb3B0aW9uIFwnIitvKyJcJyIrZysoST8iLiAiK0k6IiIpfXJldHVybihvLGcsQyk9PntpZih0PT09ITEpdGhyb3cgbmV3IHUocihnLCIgaGFzIGJlZW4gcmVtb3ZlZCIrKGU/IiBpbiAiK2U6IiIpKSx1LkVSUl9ERVBSRUNBVEVEKTtyZXR1cm4gZSYmIXJlW2ddJiYocmVbZ109ITAsY29uc29sZS53YXJuKHIoZywiIGhhcyBiZWVuIGRlcHJlY2F0ZWQgc2luY2UgdiIrZSsiIGFuZCB3aWxsIGJlIHJlbW92ZWQgaW4gdGhlIG5lYXIgZnV0dXJlIikpKSx0P3QobyxnLEMpOiEwfX07ZnVuY3Rpb24gVkkoQSx0LGUpe2lmKHR5cGVvZiBBIT0ib2JqZWN0Iil0aHJvdyBuZXcgdSgib3B0aW9ucyBtdXN0IGJlIGFuIG9iamVjdCIsdS5FUlJfQkFEX09QVElPTl9WQUxVRSk7bGV0IEk9T2JqZWN0LmtleXMoQSkscj1JLmxlbmd0aDtmb3IoO3ItLSA+MDspe2xldCBvPUlbcl0sZz10W29dO2lmKGcpe2xldCBDPUFbb10sUT1DPT09dm9pZCAwfHxnKEMsbyxBKTtpZihRIT09ITApdGhyb3cgbmV3IHUoIm9wdGlvbiAiK28rIiBtdXN0IGJlICIrUSx1LkVSUl9CQURfT1BUSU9OX1ZBTFVFKTtjb250aW51ZX1pZihlIT09ITApdGhyb3cgbmV3IHUoIlVua25vd24gb3B0aW9uICIrbyx1LkVSUl9CQURfT1BUSU9OKX19dmFyIGtBPXthc3NlcnRPcHRpb25zOlZJLHZhbGlkYXRvcnM6aXR9O3ZhciBNPWtBLnZhbGlkYXRvcnMsWD1jbGFzc3tjb25zdHJ1Y3Rvcih0KXt0aGlzLmRlZmF1bHRzPXQsdGhpcy5pbnRlcmNlcHRvcnM9e3JlcXVlc3Q6bmV3IGpBLHJlc3BvbnNlOm5ldyBqQX19YXN5bmMgcmVxdWVzdCh0LGUpe3RyeXtyZXR1cm4gYXdhaXQgdGhpcy5fcmVxdWVzdCh0LGUpfWNhdGNoKEkpe2lmKEkgaW5zdGFuY2VvZiBFcnJvcil7bGV0IHI7RXJyb3IuY2FwdHVyZVN0YWNrVHJhY2U/RXJyb3IuY2FwdHVyZVN0YWNrVHJhY2Uocj17fSk6cj1uZXcgRXJyb3I7bGV0IG89ci5zdGFjaz9yLnN0YWNrLnJlcGxhY2UoL14uK1xcbi8sIiIpOiIiO3RyeXtJLnN0YWNrP28mJiFTdHJpbmcoSS5zdGFjaykuZW5kc1dpdGgoby5yZXBsYWNlKC9eLitcXG4uK1xcbi8sIiIpKSYmKEkuc3RhY2srPWAlMEFgK28pOkkuc3RhY2s9b31jYXRjaHt9fXRocm93IEl9fV9yZXF1ZXN0KHQsZSl7dHlwZW9mIHQ9PSJzdHJpbmciPyhlPWV8fHt9LGUudXJsPXQpOmU9dHx8e30sZT1rKHRoaXMuZGVmYXVsdHMsZSk7bGV0e3RyYW5zaXRpb25hbDpJLHBhcmFtc1NlcmlhbGl6ZXI6cixoZWFkZXJzOm99PWU7SSE9PXZvaWQgMCYma0EuYXNzZXJ0T3B0aW9ucyhJLHtzaWxlbnRKU09OUGFyc2luZzpNLnRyYW5zaXRpb25hbChNLmJvb2xlYW4pLGZvcmNlZEpTT05QYXJzaW5nOk0udHJhbnNpdGlvbmFsKE0uYm9vbGVhbiksY2xhcmlmeVRpbWVvdXRFcnJvcjpNLnRyYW5zaXRpb25hbChNLmJvb2xlYW4pfSwhMSksciE9bnVsbCYmKGkuaXNGdW5jdGlvbihyKT9lLnBhcmFtc1NlcmlhbGl6ZXI9e3NlcmlhbGl6ZTpyfTprQS5hc3NlcnRPcHRpb25zKHIse2VuY29kZTpNLmZ1bmN0aW9uLHNlcmlhbGl6ZTpNLmZ1bmN0aW9ufSwhMCkpLGUubWV0aG9kPShlLm1ldGhvZHx8dGhpcy5kZWZhdWx0cy5tZXRob2R8fCJnZXQiKS50b0xvd2VyQ2FzZSgpO2xldCBnPW8mJmkubWVyZ2Uoby5jb21tb24sb1tlLm1ldGhvZF0pO28mJmkuZm9yRWFjaChbImRlbGV0ZSIsImdldCIsImhlYWQiLCJwb3N0IiwicHV0IiwicGF0Y2giLCJjb21tb24iXSxFPT57ZGVsZXRlIG9bRV19KSxlLmhlYWRlcnM9bS5jb25jYXQoZyxvKTtsZXQgQz1bXSxRPSEwO3RoaXMuaW50ZXJjZXB0b3JzLnJlcXVlc3QuZm9yRWFjaChmdW5jdGlvbihsKXt0eXBlb2YgbC5ydW5XaGVuPT0iZnVuY3Rpb24iJiZsLnJ1bldoZW4oZSk9PT0hMXx8KFE9USYmbC5zeW5jaHJvbm91cyxDLnVuc2hpZnQobC5mdWxmaWxsZWQsbC5yZWplY3RlZCkpfSk7bGV0IGE9W107dGhpcy5pbnRlcmNlcHRvcnMucmVzcG9uc2UuZm9yRWFjaChmdW5jdGlvbihsKXthLnB1c2gobC5mdWxmaWxsZWQsbC5yZWplY3RlZCl9KTtsZXQgbixzPTAsZjtpZighUSl7bGV0IEU9W1VBLmJpbmQodGhpcyksdm9pZCAwXTtmb3IoRS51bnNoaWZ0LmFwcGx5KEUsQyksRS5wdXNoLmFwcGx5KEUsYSksZj1FLmxlbmd0aCxuPVByb21pc2UucmVzb2x2ZShlKTtzPGY7KW49bi50aGVuKEVbcysrXSxFW3MrK10pO3JldHVybiBufWY9Qy5sZW5ndGg7bGV0IEI9ZTtmb3Iocz0wO3M8Zjspe2xldCBFPUNbcysrXSxsPUNbcysrXTt0cnl7Qj1FKEIpfWNhdGNoKGMpe2wuY2FsbCh0aGlzLGMpO2JyZWFrfX10cnl7bj1VQS5jYWxsKHRoaXMsQil9Y2F0Y2goRSl7cmV0dXJuIFByb21pc2UucmVqZWN0KEUpfWZvcihzPTAsZj1hLmxlbmd0aDtzPGY7KW49bi50aGVuKGFbcysrXSxhW3MrK10pO3JldHVybiBufWdldFVyaSh0KXt0PWsodGhpcy5kZWZhdWx0cyx0KTtsZXQgZT1nQSh0LmJhc2VVUkwsdC51cmwpO3JldHVybiB0QShlLHQucGFyYW1zLHQucGFyYW1zU2VyaWFsaXplcil9fTtpLmZvckVhY2goWyJkZWxldGUiLCJnZXQiLCJoZWFkIiwib3B0aW9ucyJdLGZ1bmN0aW9uKHQpe1gucHJvdG90eXBlW3RdPWZ1bmN0aW9uKGUsSSl7cmV0dXJuIHRoaXMucmVxdWVzdChrKEl8fHt9LHttZXRob2Q6dCx1cmw6ZSxkYXRhOihJfHx7fSkuZGF0YX0pKX19KTtpLmZvckVhY2goWyJwb3N0IiwicHV0IiwicGF0Y2giXSxmdW5jdGlvbih0KXtmdW5jdGlvbiBlKEkpe3JldHVybiBmdW5jdGlvbihvLGcsQyl7cmV0dXJuIHRoaXMucmVxdWVzdChrKEN8fHt9LHttZXRob2Q6dCxoZWFkZXJzOkk/eyJDb250ZW50LVR5cGUiOiJtdWx0aXBhcnQvZm9ybS1kYXRhIn06e30sdXJsOm8sZGF0YTpnfSkpfX1YLnByb3RvdHlwZVt0XT1lKCksWC5wcm90b3R5cGVbdCsiRm9ybSJdPWUoITApfSk7dmFyIGlBPVg7dmFyIG50PWNsYXNzIEF7Y29uc3RydWN0b3IodCl7aWYodHlwZW9mIHQhPSJmdW5jdGlvbiIpdGhyb3cgbmV3IFR5cGVFcnJvcigiZXhlY3V0b3IgbXVzdCBiZSBhIGZ1bmN0aW9uLiIpO2xldCBlO3RoaXMucHJvbWlzZT1uZXcgUHJvbWlzZShmdW5jdGlvbihvKXtlPW99KTtsZXQgST10aGlzO3RoaXMucHJvbWlzZS50aGVuKHI9PntpZighSS5fbGlzdGVuZXJzKXJldHVybjtsZXQgbz1JLl9saXN0ZW5lcnMubGVuZ3RoO2Zvcig7by0tID4wOylJLl9saXN0ZW5lcnNbb10ocik7SS5fbGlzdGVuZXJzPW51bGx9KSx0aGlzLnByb21pc2UudGhlbj1yPT57bGV0IG8sZz1uZXcgUHJvbWlzZShDPT57SS5zdWJzY3JpYmUoQyksbz1DfSkudGhlbihyKTtyZXR1cm4gZy5jYW5jZWw9ZnVuY3Rpb24oKXtJLnVuc3Vic2NyaWJlKG8pfSxnfSx0KGZ1bmN0aW9uKG8sZyxDKXtJLnJlYXNvbnx8KEkucmVhc29uPW5ldyBiKG8sZyxDKSxlKEkucmVhc29uKSl9KX10aHJvd0lmUmVxdWVzdGVkKCl7aWYodGhpcy5yZWFzb24pdGhyb3cgdGhpcy5yZWFzb259c3Vic2NyaWJlKHQpe2lmKHRoaXMucmVhc29uKXt0KHRoaXMucmVhc29uKTtyZXR1cm59dGhpcy5fbGlzdGVuZXJzP3RoaXMuX2xpc3RlbmVycy5wdXNoKHQpOnRoaXMuX2xpc3RlbmVycz1bdF19dW5zdWJzY3JpYmUodCl7aWYoIXRoaXMuX2xpc3RlbmVycylyZXR1cm47bGV0IGU9dGhpcy5fbGlzdGVuZXJzLmluZGV4T2YodCk7ZSE9PS0xJiZ0aGlzLl9saXN0ZW5lcnMuc3BsaWNlKGUsMSl9c3RhdGljIHNvdXJjZSgpe2xldCB0O3JldHVybnt0b2tlbjpuZXcgQShmdW5jdGlvbihyKXt0PXJ9KSxjYW5jZWw6dH19fSxvZT1udDtmdW5jdGlvbiBzdChBKXtyZXR1cm4gZnVuY3Rpb24oZSl7cmV0dXJuIEEuYXBwbHkobnVsbCxlKX19ZnVuY3Rpb24gQ3QoQSl7cmV0dXJuIGkuaXNPYmplY3QoQSkmJkEuaXNBeGlvc0Vycm9yPT09ITB9dmFyIEJ0PXtDb250aW51ZToxMDAsU3dpdGNoaW5nUHJvdG9jb2xzOjEwMSxQcm9jZXNzaW5nOjEwMixFYXJseUhpbnRzOjEwMyxPazoyMDAsQ3JlYXRlZDoyMDEsQWNjZXB0ZWQ6MjAyLE5vbkF1dGhvcml0YXRpdmVJbmZvcm1hdGlvbjoyMDMsTm9Db250ZW50OjIwNCxSZXNldENvbnRlbnQ6MjA1LFBhcnRpYWxDb250ZW50OjIwNixNdWx0aVN0YXR1czoyMDcsQWxyZWFkeVJlcG9ydGVkOjIwOCxJbVVzZWQ6MjI2LE11bHRpcGxlQ2hvaWNlczozMDAsTW92ZWRQZXJtYW5lbnRseTozMDEsRm91bmQ6MzAyLFNlZU90aGVyOjMwMyxOb3RNb2RpZmllZDozMDQsVXNlUHJveHk6MzA1LFVudXNlZDozMDYsVGVtcG9yYXJ5UmVkaXJlY3Q6MzA3LFBlcm1hbmVudFJlZGlyZWN0OjMwOCxCYWRSZXF1ZXN0OjQwMCxVbmF1dGhvcml6ZWQ6NDAxLFBheW1lbnRSZXF1aXJlZDo0MDIsRm9yYmlkZGVuOjQwMyxOb3RGb3VuZDo0MDQsTWV0aG9kTm90QWxsb3dlZDo0MDUsTm90QWNjZXB0YWJsZTo0MDYsUHJveHlBdXRoZW50aWNhdGlvblJlcXVpcmVkOjQwNyxSZXF1ZXN0VGltZW91dDo0MDgsQ29uZmxpY3Q6NDA5LEdvbmU6NDEwLExlbmd0aFJlcXVpcmVkOjQxMSxQcmVjb25kaXRpb25GYWlsZWQ6NDEyLFBheWxvYWRUb29MYXJnZTo0MTMsVXJpVG9vTG9uZzo0MTQsVW5zdXBwb3J0ZWRNZWRpYVR5cGU6NDE1LFJhbmdlTm90U2F0aXNmaWFibGU6NDE2LEV4cGVjdGF0aW9uRmFpbGVkOjQxNyxJbUFUZWFwb3Q6NDE4LE1pc2RpcmVjdGVkUmVxdWVzdDo0MjEsVW5wcm9jZXNzYWJsZUVudGl0eTo0MjIsTG9ja2VkOjQyMyxGYWlsZWREZXBlbmRlbmN5OjQyNCxUb29FYXJseTo0MjUsVXBncmFkZVJlcXVpcmVkOjQyNixQcmVjb25kaXRpb25SZXF1aXJlZDo0MjgsVG9vTWFueVJlcXVlc3RzOjQyOSxSZXF1ZXN0SGVhZGVyRmllbGRzVG9vTGFyZ2U6NDMxLFVuYXZhaWxhYmxlRm9yTGVnYWxSZWFzb25zOjQ1MSxJbnRlcm5hbFNlcnZlckVycm9yOjUwMCxOb3RJbXBsZW1lbnRlZDo1MDEsQmFkR2F0ZXdheTo1MDIsU2VydmljZVVuYXZhaWxhYmxlOjUwMyxHYXRld2F5VGltZW91dDo1MDQsSHR0cFZlcnNpb25Ob3RTdXBwb3J0ZWQ6NTA1LFZhcmlhbnRBbHNvTmVnb3RpYXRlczo1MDYsSW5zdWZmaWNpZW50U3RvcmFnZTo1MDcsTG9vcERldGVjdGVkOjUwOCxOb3RFeHRlbmRlZDo1MTAsTmV0d29ya0F1dGhlbnRpY2F0aW9uUmVxdWlyZWQ6NTExfTtPYmplY3QuZW50cmllcyhCdCkuZm9yRWFjaCgoW0EsdF0pPT57QnRbdF09QX0pO3ZhciBnZT1CdDtmdW5jdGlvbiBpZShBKXtsZXQgdD1uZXcgaUEoQSksZT12KGlBLnByb3RvdHlwZS5yZXF1ZXN0LHQpO3JldHVybiBpLmV4dGVuZChlLGlBLnByb3RvdHlwZSx0LHthbGxPd25LZXlzOiEwfSksaS5leHRlbmQoZSx0LG51bGwse2FsbE93bktleXM6ITB9KSxlLmNyZWF0ZT1mdW5jdGlvbihyKXtyZXR1cm4gaWUoayhBLHIpKX0sZX12YXIgZD1pZShaKTtkLkF4aW9zPWlBO2QuQ2FuY2VsZWRFcnJvcj1iO2QuQ2FuY2VsVG9rZW49b2U7ZC5pc0NhbmNlbD1yQTtkLlZFUlNJT049R0E7ZC50b0Zvcm1EYXRhPXE7ZC5BeGlvc0Vycm9yPXU7ZC5DYW5jZWw9ZC5DYW5jZWxlZEVycm9yO2QuYWxsPWZ1bmN0aW9uKHQpe3JldHVybiBQcm9taXNlLmFsbCh0KX07ZC5zcHJlYWQ9c3Q7ZC5pc0F4aW9zRXJyb3I9Q3Q7ZC5tZXJnZUNvbmZpZz1rO2QuQXhpb3NIZWFkZXJzPW07ZC5mb3JtVG9KU09OPUE9PndBKGkuaXNIVE1MRm9ybShBKT9uZXcgRm9ybURhdGEoQSk6QSk7ZC5nZXRBZGFwdGVyPU5BLmdldEFkYXB0ZXI7ZC5IdHRwU3RhdHVzQ29kZT1nZTtkLmRlZmF1bHQ9ZDt2YXIgTEE9ZDt2YXJ7QXhpb3M6RWksQXhpb3NFcnJvcjpjaSxDYW5jZWxlZEVycm9yOmZpLGlzQ2FuY2VsOmxpLENhbmNlbFRva2VuOnVpLFZFUlNJT046RGksYWxsOmhpLENhbmNlbDpkaSxpc0F4aW9zRXJyb3I6eWksc3ByZWFkOm1pLHRvRm9ybURhdGE6d2ksQXhpb3NIZWFkZXJzOnBpLEh0dHBTdGF0dXNDb2RlOlNpLGZvcm1Ub0pTT046RmksZ2V0QWRhcHRlcjpSaSxtZXJnZUNvbmZpZzpOaX09TEE7dmFyIG5BLFksUXQsYXQ9e2Vudjp7ZW1zY3JpcHRlbl9ub3RpZnlfbWVtb3J5X2dyb3d0aDpmdW5jdGlvbihBKXtRdD1uZXcgVWludDhBcnJheShZLmV4cG9ydHMubWVtb3J5LmJ1ZmZlcil9fX0sSkE9Y2xhc3N7aW5pdCgpe3JldHVybiBuQXx8KHR5cGVvZiBmZXRjaDwidSI/bkE9ZmV0Y2goImRhdGE6YXBwbGljYXRpb24vd2FzbTtiYXNlNjQsIituZSkudGhlbih0PT50LmFycmF5QnVmZmVyKCkpLnRoZW4odD0+V2ViQXNzZW1ibHkuaW5zdGFudGlhdGUodCxhdCkpLnRoZW4odGhpcy5faW5pdCk6bkE9V2ViQXNzZW1ibHkuaW5zdGFudGlhdGUoQnVmZmVyLmZyb20obmUsImJhc2U2NCIpLGF0KS50aGVuKHRoaXMuX2luaXQpLG5BKX1faW5pdCh0KXtZPXQuaW5zdGFuY2UsYXQuZW52LmVtc2NyaXB0ZW5fbm90aWZ5X21lbW9yeV9ncm93dGgoMCl9ZGVjb2RlKHQsZT0wKXtpZighWSl0aHJvdyBuZXcgRXJyb3IoIlpTVEREZWNvZGVyOiBBd2FpdCAuaW5pdCgpIGJlZm9yZSBkZWNvZGluZy4iKTtsZXQgST10LmJ5dGVMZW5ndGgscj1ZLmV4cG9ydHMubWFsbG9jKEkpO1F0LnNldCh0LHIpLGU9ZXx8TnVtYmVyKFkuZXhwb3J0cy5aU1REX2ZpbmREZWNvbXByZXNzZWRTaXplKHIsSSkpO2xldCBvPVkuZXhwb3J0cy5tYWxsb2MoZSksZz1ZLmV4cG9ydHMuWlNURF9kZWNvbXByZXNzKG8sZSxyLEkpLEM9UXQuc2xpY2UobyxvK2cpO3JldHVybiBZLmV4cG9ydHMuZnJlZShyKSxZLmV4cG9ydHMuZnJlZShvKSxDfX0sbmU9IkFHRnpiUUVBQUFBQmJnNWdBMzkvZndGL1lBRi9BWDlnQW45L0FHQUJmd0JnQlg5L2YzOS9BWDlnQTM5L2Z3QmdCSDkvZjM4QmYyQUFBWDlnQW45L0FYOWdCMzkvZjM5L2YzOEJmMkFDZjM4QmZtQUlmMzkvZjM5L2YzOEJmMkFGZjM5L2YzOEFZQTUvZjM5L2YzOS9mMzkvZjM5L2Z3Ri9BaWNCQTJWdWRoOWxiWE5qY21sd2RHVnVYMjV2ZEdsbWVWOXRaVzF2Y25sZlozSnZkM1JvQUFNREl5SUhBQUFCQVFNSEF3RUFDUVFBQlFFSUNBRUZCZ1FFQkFNR0FBQUtBQVVMREEwR0JBVUJjQUVCQVFVSEFRR0FBb0NBQWdZSUFYOEJRWUNqQkFzSHJnRUxCbTFsYlc5eWVRSUFCbTFoYkd4dll3QUZCR1p5WldVQUJneGFVMVJFWDJselJYSnliM0lBRWhsYVUxUkVYMlpwYm1SRVpXTnZiWEJ5WlhOelpXUlRhWHBsQUJ3UFdsTlVSRjlrWldOdmJYQnlaWE56QUNJWlgxOXBibVJwY21WamRGOW1kVzVqZEdsdmJsOTBZV0pzWlFFQUVGOWZaWEp5Ym05ZmJHOWpZWFJwYjI0QUFRbHpkR0ZqYTFOaGRtVUFCd3h6ZEdGamExSmxjM1J2Y21VQUNBcHpkR0ZqYTBGc2JHOWpBQWtLaS9JQklnVUFRWVFmQ3pNQkFYOGdBZ1JBSUFBaEF3TkFJQU1nQVMwQUFEb0FBQ0FEUVFGcUlRTWdBVUVCYWlFQklBSkJBV3NpQWcwQUN3c2dBQXNwQVFGL0lBSUVRQ0FBSVFNRFFDQURJQUU2QUFBZ0EwRUJhaUVESUFKQkFXc2lBZzBBQ3dzZ0FBdHNBUUovUVlBZktBSUFJZ0VnQUVFSGFrRjRjU0lDYWlFQUFrQWdBa0VBSUFBZ0FVMGJEUUFnQUQ4QVFSQjBTd1JBSUFBL0FFRVFkR3RCLy84RGFrRVFka0FBUVg5R0JIOUJBQVZCQUJBQVFRRUxSUTBCQzBHQUh5QUFOZ0lBSUFFUEMwR0VIMEV3TmdJQVFYOEx1U2NCQzM4akFFRVFheUlLSkFBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUlBQkI5QUZOQkVCQmlCOG9BZ0FpQmtFUUlBQkJDMnBCZUhFZ0FFRUxTUnNpQlVFRGRpSUFkaUlCUVFOeEJFQUNRQ0FCUVg5elFRRnhJQUJxSWdKQkEzUWlBVUd3SDJvaUFDQUJRYmdmYWlnQ0FDSUJLQUlJSWdSR0JFQkJpQjhnQmtGK0lBSjNjVFlDQUF3QkN5QUVJQUEyQWd3Z0FDQUVOZ0lJQ3lBQlFRaHFJUUFnQVNBQ1FRTjBJZ0pCQTNJMkFnUWdBU0FDYWlJQklBRW9BZ1JCQVhJMkFnUU1Ed3NnQlVHUUh5Z0NBQ0lIVFEwQklBRUVRQUpBUVFJZ0FIUWlBa0VBSUFKcmNpQUJJQUIwY1dnaUFVRURkQ0lBUWJBZmFpSUNJQUJCdUI5cUtBSUFJZ0FvQWdnaUJFWUVRRUdJSHlBR1FYNGdBWGR4SWdZMkFnQU1BUXNnQkNBQ05nSU1JQUlnQkRZQ0NBc2dBQ0FGUVFOeU5nSUVJQUFnQldvaUNDQUJRUU4wSWdFZ0JXc2lCRUVCY2pZQ0JDQUFJQUZxSUFRMkFnQWdCd1JBSUFkQmVIRkJzQjlxSVFGQm5COG9BZ0FoQWdKL0lBWkJBU0FIUVFOMmRDSURjVVVFUUVHSUh5QURJQVp5TmdJQUlBRU1BUXNnQVNnQ0NBc2hBeUFCSUFJMkFnZ2dBeUFDTmdJTUlBSWdBVFlDRENBQ0lBTTJBZ2dMSUFCQkNHb2hBRUdjSHlBSU5nSUFRWkFmSUFRMkFnQU1Ed3RCakI4b0FnQWlDMFVOQVNBTGFFRUNkRUc0SVdvb0FnQWlBaWdDQkVGNGNTQUZheUVESUFJaEFRTkFBa0FnQVNnQ0VDSUFSUVJBSUFFb0FoUWlBRVVOQVFzZ0FDZ0NCRUY0Y1NBRmF5SUJJQU1nQVNBRFNTSUJHeUVESUFBZ0FpQUJHeUVDSUFBaEFRd0JDd3NnQWlnQ0dDRUpJQUlnQWlnQ0RDSUVSd1JBUVpnZktBSUFHaUFDS0FJSUlnQWdCRFlDRENBRUlBQTJBZ2dNRGdzZ0FrRVVhaUlCS0FJQUlnQkZCRUFnQWlnQ0VDSUFSUTBESUFKQkVHb2hBUXNEUUNBQklRZ2dBQ0lFUVJScUlnRW9BZ0FpQUEwQUlBUkJFR29oQVNBRUtBSVFJZ0FOQUFzZ0NFRUFOZ0lBREEwTFFYOGhCU0FBUWI5L1N3MEFJQUJCQzJvaUFFRjRjU0VGUVl3ZktBSUFJZ2hGRFFCQkFDQUZheUVEQWtBQ1FBSkFBbjlCQUNBRlFZQUNTUTBBR2tFZklBVkIvLy8vQjBzTkFCb2dCVUVtSUFCQkNIWm5JZ0JyZGtFQmNTQUFRUUYwYTBFK2Fnc2lCMEVDZEVHNElXb29BZ0FpQVVVRVFFRUFJUUFNQVF0QkFDRUFJQVZCR1NBSFFRRjJhMEVBSUFkQkgwY2JkQ0VDQTBBQ1FDQUJLQUlFUVhoeElBVnJJZ1lnQTA4TkFDQUJJUVFnQmlJRERRQkJBQ0VESUFFaEFBd0RDeUFBSUFFb0FoUWlCaUFHSUFFZ0FrRWRka0VFY1dvb0FoQWlBVVliSUFBZ0Joc2hBQ0FDUVFGMElRSWdBUTBBQ3dzZ0FDQUVja1VFUUVFQUlRUkJBaUFIZENJQVFRQWdBR3R5SUFoeElnQkZEUU1nQUdoQkFuUkJ1Q0ZxS0FJQUlRQUxJQUJGRFFFTEEwQWdBQ2dDQkVGNGNTQUZheUlDSUFOSklRRWdBaUFESUFFYklRTWdBQ0FFSUFFYklRUWdBQ2dDRUNJQkJIOGdBUVVnQUNnQ0ZBc2lBQTBBQ3dzZ0JFVU5BQ0FEUVpBZktBSUFJQVZyVHcwQUlBUW9BaGdoQnlBRUlBUW9BZ3dpQWtjRVFFR1lIeWdDQUJvZ0JDZ0NDQ0lBSUFJMkFnd2dBaUFBTmdJSURBd0xJQVJCRkdvaUFTZ0NBQ0lBUlFSQUlBUW9BaEFpQUVVTkF5QUVRUkJxSVFFTEEwQWdBU0VHSUFBaUFrRVVhaUlCS0FJQUlnQU5BQ0FDUVJCcUlRRWdBaWdDRUNJQURRQUxJQVpCQURZQ0FBd0xDeUFGUVpBZktBSUFJZ1JOQkVCQm5COG9BZ0FoQUFKQUlBUWdCV3NpQVVFUVR3UkFJQUFnQldvaUFpQUJRUUZ5TmdJRUlBQWdCR29nQVRZQ0FDQUFJQVZCQTNJMkFnUU1BUXNnQUNBRVFRTnlOZ0lFSUFBZ0JHb2lBU0FCS0FJRVFRRnlOZ0lFUVFBaEFrRUFJUUVMUVpBZklBRTJBZ0JCbkI4Z0FqWUNBQ0FBUVFocUlRQU1EUXNnQlVHVUh5Z0NBQ0lDU1FSQVFaUWZJQUlnQldzaUFUWUNBRUdnSDBHZ0h5Z0NBQ0lBSUFWcUlnSTJBZ0FnQWlBQlFRRnlOZ0lFSUFBZ0JVRURjallDQkNBQVFRaHFJUUFNRFF0QkFDRUFJQVZCTDJvaUF3Si9RZUFpS0FJQUJFQkI2Q0lvQWdBTUFRdEI3Q0pDZnpjQ0FFSGtJa0tBb0lDQWdJQUVOd0lBUWVBaUlBcEJER3BCY0hGQjJLclZxZ1Z6TmdJQVFmUWlRUUEyQWdCQnhDSkJBRFlDQUVHQUlBc2lBV29pQmtFQUlBRnJJZ2h4SWdFZ0JVME5ERUhBSWlnQ0FDSUVCRUJCdUNJb0FnQWlCeUFCYWlJSklBZE5JQVFnQ1VseURRMExBa0JCeENJdEFBQkJCSEZGQkVBQ1FBSkFBa0FDUUVHZ0h5Z0NBQ0lFQkVCQnlDSWhBQU5BSUFRZ0FDZ0NBQ0lIVHdSQUlBY2dBQ2dDQkdvZ0JFc05Bd3NnQUNnQ0NDSUFEUUFMQzBFQUVBUWlBa0YvUmcwRElBRWhCa0hrSWlnQ0FDSUFRUUZySWdRZ0FuRUVRQ0FCSUFKcklBSWdCR3BCQUNBQWEzRnFJUVlMSUFVZ0JrOE5BMEhBSWlnQ0FDSUFCRUJCdUNJb0FnQWlCQ0FHYWlJSUlBUk5JQUFnQ0VseURRUUxJQVlRQkNJQUlBSkhEUUVNQlFzZ0JpQUNheUFJY1NJR0VBUWlBaUFBS0FJQUlBQW9BZ1JxUmcwQklBSWhBQXNnQUVGL1JnMEJJQVZCTUdvZ0JrMEVRQ0FBSVFJTUJBdEI2Q0lvQWdBaUFpQURJQVpyYWtFQUlBSnJjU0lDRUFSQmYwWU5BU0FDSUFacUlRWWdBQ0VDREFNTElBSkJmMGNOQWd0QnhDSkJ4Q0lvQWdCQkJISTJBZ0FMSUFFUUJDSUNRWDlHUVFBUUJDSUFRWDlHY2lBQUlBSk5jZzBGSUFBZ0Ftc2lCaUFGUVNocVRRMEZDMEc0SWtHNElpZ0NBQ0FHYWlJQU5nSUFRYndpS0FJQUlBQkpCRUJCdkNJZ0FEWUNBQXNDUUVHZ0h5Z0NBQ0lEQkVCQnlDSWhBQU5BSUFJZ0FDZ0NBQ0lCSUFBb0FnUWlCR3BHRFFJZ0FDZ0NDQ0lBRFFBTERBUUxRWmdmS0FJQUlnQkJBQ0FBSUFKTkcwVUVRRUdZSHlBQ05nSUFDMEVBSVFCQnpDSWdCallDQUVISUlpQUNOZ0lBUWFnZlFYODJBZ0JCckI5QjRDSW9BZ0EyQWdCQjFDSkJBRFlDQUFOQUlBQkJBM1FpQVVHNEgyb2dBVUd3SDJvaUJEWUNBQ0FCUWJ3ZmFpQUVOZ0lBSUFCQkFXb2lBRUVnUncwQUMwR1VIeUFHUVNocklnQkJlQ0FDYTBFSGNTSUJheUlFTmdJQVFhQWZJQUVnQW1vaUFUWUNBQ0FCSUFSQkFYSTJBZ1FnQUNBQ2FrRW9OZ0lFUWFRZlFmQWlLQUlBTmdJQURBUUxJQUlnQTAwZ0FTQURTM0lOQWlBQUtBSU1RUWh4RFFJZ0FDQUVJQVpxTmdJRVFhQWZJQU5CZUNBRGEwRUhjU0lBYWlJQk5nSUFRWlFmUVpRZktBSUFJQVpxSWdJZ0FHc2lBRFlDQUNBQklBQkJBWEkyQWdRZ0FpQURha0VvTmdJRVFhUWZRZkFpS0FJQU5nSUFEQU1MUVFBaEJBd0tDMEVBSVFJTUNBdEJtQjhvQWdBZ0Frc0VRRUdZSHlBQ05nSUFDeUFDSUFacUlRRkJ5Q0loQUFKQUFrQUNRQU5BSUFFZ0FDZ0NBRWNFUUNBQUtBSUlJZ0FOQVF3Q0N3c2dBQzBBREVFSWNVVU5BUXRCeUNJaEFBTkFJQU1nQUNnQ0FDSUJUd1JBSUFFZ0FDZ0NCR29pQkNBRFN3MERDeUFBS0FJSUlRQU1BQXNBQ3lBQUlBSTJBZ0FnQUNBQUtBSUVJQVpxTmdJRUlBSkJlQ0FDYTBFSGNXb2lCeUFGUVFOeU5nSUVJQUZCZUNBQmEwRUhjV29pQmlBRklBZHFJZ1ZySVFBZ0F5QUdSZ1JBUWFBZklBVTJBZ0JCbEI5QmxCOG9BZ0FnQUdvaUFEWUNBQ0FGSUFCQkFYSTJBZ1FNQ0F0Qm5COG9BZ0FnQmtZRVFFR2NIeUFGTmdJQVFaQWZRWkFmS0FJQUlBQnFJZ0EyQWdBZ0JTQUFRUUZ5TmdJRUlBQWdCV29nQURZQ0FBd0lDeUFHS0FJRUlnTkJBM0ZCQVVjTkJpQURRWGh4SVFrZ0EwSC9BVTBFUUNBR0tBSU1JZ0VnQmlnQ0NDSUNSZ1JBUVlnZlFZZ2ZLQUlBUVg0Z0EwRURkbmR4TmdJQURBY0xJQUlnQVRZQ0RDQUJJQUkyQWdnTUJnc2dCaWdDR0NFSUlBWWdCaWdDRENJQ1J3UkFJQVlvQWdnaUFTQUNOZ0lNSUFJZ0FUWUNDQXdGQ3lBR1FSUnFJZ0VvQWdBaUEwVUVRQ0FHS0FJUUlnTkZEUVFnQmtFUWFpRUJDd05BSUFFaEJDQURJZ0pCRkdvaUFTZ0NBQ0lERFFBZ0FrRVFhaUVCSUFJb0FoQWlBdzBBQ3lBRVFRQTJBZ0FNQkF0QmxCOGdCa0VvYXlJQVFYZ2dBbXRCQjNFaUFXc2lDRFlDQUVHZ0h5QUJJQUpxSWdFMkFnQWdBU0FJUVFGeU5nSUVJQUFnQW1wQktEWUNCRUdrSDBId0lpZ0NBRFlDQUNBRElBUkJKeUFFYTBFSGNXcEJMMnNpQUNBQUlBTkJFR3BKR3lJQlFSczJBZ1FnQVVIUUlpa0NBRGNDRUNBQlFjZ2lLUUlBTndJSVFkQWlJQUZCQ0dvMkFnQkJ6Q0lnQmpZQ0FFSElJaUFDTmdJQVFkUWlRUUEyQWdBZ0FVRVlhaUVBQTBBZ0FFRUhOZ0lFSUFCQkNHb2dBRUVFYWlFQUlBUkpEUUFMSUFFZ0EwWU5BQ0FCSUFFb0FnUkJmbkUyQWdRZ0F5QUJJQU5ySWdKQkFYSTJBZ1FnQVNBQ05nSUFJQUpCL3dGTkJFQWdBa0Y0Y1VHd0gyb2hBQUovUVlnZktBSUFJZ0ZCQVNBQ1FRTjJkQ0lDY1VVRVFFR0lIeUFCSUFKeU5nSUFJQUFNQVFzZ0FDZ0NDQXNoQVNBQUlBTTJBZ2dnQVNBRE5nSU1JQU1nQURZQ0RDQURJQUUyQWdnTUFRdEJIeUVBSUFKQi8vLy9CMDBFUUNBQ1FTWWdBa0VJZG1jaUFHdDJRUUZ4SUFCQkFYUnJRVDVxSVFBTElBTWdBRFlDSENBRFFnQTNBaEFnQUVFQ2RFRzRJV29oQVFKQUFrQkJqQjhvQWdBaUJFRUJJQUIwSWdaeFJRUkFRWXdmSUFRZ0JuSTJBZ0FnQVNBRE5nSUFEQUVMSUFKQkdTQUFRUUYyYTBFQUlBQkJIMGNiZENFQUlBRW9BZ0FoQkFOQUlBUWlBU2dDQkVGNGNTQUNSZzBDSUFCQkhYWWhCQ0FBUVFGMElRQWdBU0FFUVFSeGFpSUdLQUlRSWdRTkFBc2dCaUFETmdJUUN5QURJQUUyQWhnZ0F5QUROZ0lNSUFNZ0F6WUNDQXdCQ3lBQktBSUlJZ0FnQXpZQ0RDQUJJQU0yQWdnZ0EwRUFOZ0lZSUFNZ0FUWUNEQ0FESUFBMkFnZ0xRWlFmS0FJQUlnQWdCVTBOQUVHVUh5QUFJQVZySWdFMkFnQkJvQjlCb0I4b0FnQWlBQ0FGYWlJQ05nSUFJQUlnQVVFQmNqWUNCQ0FBSUFWQkEzSTJBZ1FnQUVFSWFpRUFEQWdMUVlRZlFUQTJBZ0JCQUNFQURBY0xRUUFoQWdzZ0NFVU5BQUpBSUFZb0Fod2lBVUVDZEVHNElXb2lCQ2dDQUNBR1JnUkFJQVFnQWpZQ0FDQUNEUUZCakI5QmpCOG9BZ0JCZmlBQmQzRTJBZ0FNQWdzZ0NFRVFRUlFnQ0NnQ0VDQUdSaHRxSUFJMkFnQWdBa1VOQVFzZ0FpQUlOZ0lZSUFZb0FoQWlBUVJBSUFJZ0FUWUNFQ0FCSUFJMkFoZ0xJQVlvQWhRaUFVVU5BQ0FDSUFFMkFoUWdBU0FDTmdJWUN5QUFJQWxxSVFBZ0JpQUphaUlHS0FJRUlRTUxJQVlnQTBGK2NUWUNCQ0FGSUFCQkFYSTJBZ1FnQUNBRmFpQUFOZ0lBSUFCQi93Rk5CRUFnQUVGNGNVR3dIMm9oQVFKL1FZZ2ZLQUlBSWdKQkFTQUFRUU4yZENJQWNVVUVRRUdJSHlBQUlBSnlOZ0lBSUFFTUFRc2dBU2dDQ0FzaEFDQUJJQVUyQWdnZ0FDQUZOZ0lNSUFVZ0FUWUNEQ0FGSUFBMkFnZ01BUXRCSHlFRElBQkIvLy8vQjAwRVFDQUFRU1lnQUVFSWRtY2lBV3QyUVFGeElBRkJBWFJyUVQ1cUlRTUxJQVVnQXpZQ0hDQUZRZ0EzQWhBZ0EwRUNkRUc0SVdvaEFRSkFBa0JCakI4b0FnQWlBa0VCSUFOMElnUnhSUVJBUVl3ZklBSWdCSEkyQWdBZ0FTQUZOZ0lBREFFTElBQkJHU0FEUVFGMmEwRUFJQU5CSDBjYmRDRURJQUVvQWdBaEFnTkFJQUlpQVNnQ0JFRjRjU0FBUmcwQ0lBTkJIWFloQWlBRFFRRjBJUU1nQVNBQ1FRUnhhaUlFS0FJUUlnSU5BQXNnQkNBRk5nSVFDeUFGSUFFMkFoZ2dCU0FGTmdJTUlBVWdCVFlDQ0F3QkN5QUJLQUlJSWdBZ0JUWUNEQ0FCSUFVMkFnZ2dCVUVBTmdJWUlBVWdBVFlDRENBRklBQTJBZ2dMSUFkQkNHb2hBQXdDQ3dKQUlBZEZEUUFDUUNBRUtBSWNJZ0JCQW5SQnVDRnFJZ0VvQWdBZ0JFWUVRQ0FCSUFJMkFnQWdBZzBCUVl3ZklBaEJmaUFBZDNFaUNEWUNBQXdDQ3lBSFFSQkJGQ0FIS0FJUUlBUkdHMm9nQWpZQ0FDQUNSUTBCQ3lBQ0lBYzJBaGdnQkNnQ0VDSUFCRUFnQWlBQU5nSVFJQUFnQWpZQ0dBc2dCQ2dDRkNJQVJRMEFJQUlnQURZQ0ZDQUFJQUkyQWhnTEFrQWdBMEVQVFFSQUlBUWdBeUFGYWlJQVFRTnlOZ0lFSUFBZ0JHb2lBQ0FBS0FJRVFRRnlOZ0lFREFFTElBUWdCVUVEY2pZQ0JDQUVJQVZxSWdJZ0EwRUJjallDQkNBQ0lBTnFJQU0yQWdBZ0EwSC9BVTBFUUNBRFFYaHhRYkFmYWlFQUFuOUJpQjhvQWdBaUFVRUJJQU5CQTNaMElnTnhSUVJBUVlnZklBRWdBM0kyQWdBZ0FBd0JDeUFBS0FJSUN5RUJJQUFnQWpZQ0NDQUJJQUkyQWd3Z0FpQUFOZ0lNSUFJZ0FUWUNDQXdCQzBFZklRQWdBMEgvLy84SFRRUkFJQU5CSmlBRFFRaDJaeUlBYTNaQkFYRWdBRUVCZEd0QlBtb2hBQXNnQWlBQU5nSWNJQUpDQURjQ0VDQUFRUUowUWJnaGFpRUJBa0FDUUNBSVFRRWdBSFFpQm5GRkJFQkJqQjhnQmlBSWNqWUNBQ0FCSUFJMkFnQU1BUXNnQTBFWklBQkJBWFpyUVFBZ0FFRWZSeHQwSVFBZ0FTZ0NBQ0VGQTBBZ0JTSUJLQUlFUVhoeElBTkdEUUlnQUVFZGRpRUdJQUJCQVhRaEFDQUJJQVpCQkhGcUlnWW9BaEFpQlEwQUN5QUdJQUkyQWhBTElBSWdBVFlDR0NBQ0lBSTJBZ3dnQWlBQ05nSUlEQUVMSUFFb0FnZ2lBQ0FDTmdJTUlBRWdBallDQ0NBQ1FRQTJBaGdnQWlBQk5nSU1JQUlnQURZQ0NBc2dCRUVJYWlFQURBRUxBa0FnQ1VVTkFBSkFJQUlvQWh3aUFFRUNkRUc0SVdvaUFTZ0NBQ0FDUmdSQUlBRWdCRFlDQUNBRURRRkJqQjhnQzBGK0lBQjNjVFlDQUF3Q0N5QUpRUkJCRkNBSktBSVFJQUpHRzJvZ0JEWUNBQ0FFUlEwQkN5QUVJQWsyQWhnZ0FpZ0NFQ0lBQkVBZ0JDQUFOZ0lRSUFBZ0JEWUNHQXNnQWlnQ0ZDSUFSUTBBSUFRZ0FEWUNGQ0FBSUFRMkFoZ0xBa0FnQTBFUFRRUkFJQUlnQXlBRmFpSUFRUU55TmdJRUlBQWdBbW9pQUNBQUtBSUVRUUZ5TmdJRURBRUxJQUlnQlVFRGNqWUNCQ0FDSUFWcUlnUWdBMEVCY2pZQ0JDQURJQVJxSUFNMkFnQWdCd1JBSUFkQmVIRkJzQjlxSVFCQm5COG9BZ0FoQVFKL1FRRWdCMEVEZG5RaUJTQUdjVVVFUUVHSUh5QUZJQVp5TmdJQUlBQU1BUXNnQUNnQ0NBc2hCaUFBSUFFMkFnZ2dCaUFCTmdJTUlBRWdBRFlDRENBQklBWTJBZ2dMUVp3ZklBUTJBZ0JCa0I4Z0F6WUNBQXNnQWtFSWFpRUFDeUFLUVJCcUpBQWdBQXZTQ3dFSGZ3SkFJQUJGRFFBZ0FFRUlheUlDSUFCQkJHc29BZ0FpQVVGNGNTSUFhaUVGQWtBZ0FVRUJjUTBBSUFGQkEzRkZEUUVnQWlBQ0tBSUFJZ0ZySWdKQm1COG9BZ0JKRFFFZ0FDQUJhaUVBQWtBQ1FFR2NIeWdDQUNBQ1J3UkFJQUZCL3dGTkJFQWdBVUVEZGlFRUlBSW9BZ3dpQVNBQ0tBSUlJZ05HQkVCQmlCOUJpQjhvQWdCQmZpQUVkM0UyQWdBTUJRc2dBeUFCTmdJTUlBRWdBellDQ0F3RUN5QUNLQUlZSVFZZ0FpQUNLQUlNSWdGSEJFQWdBaWdDQ0NJRElBRTJBZ3dnQVNBRE5nSUlEQU1MSUFKQkZHb2lCQ2dDQUNJRFJRUkFJQUlvQWhBaUEwVU5BaUFDUVJCcUlRUUxBMEFnQkNFSElBTWlBVUVVYWlJRUtBSUFJZ01OQUNBQlFSQnFJUVFnQVNnQ0VDSUREUUFMSUFkQkFEWUNBQXdDQ3lBRktBSUVJZ0ZCQTNGQkEwY05Ba0dRSHlBQU5nSUFJQVVnQVVGK2NUWUNCQ0FDSUFCQkFYSTJBZ1FnQlNBQU5nSUFEd3RCQUNFQkN5QUdSUTBBQWtBZ0FpZ0NIQ0lEUVFKMFFiZ2hhaUlFS0FJQUlBSkdCRUFnQkNBQk5nSUFJQUVOQVVHTUgwR01IeWdDQUVGK0lBTjNjVFlDQUF3Q0N5QUdRUkJCRkNBR0tBSVFJQUpHRzJvZ0FUWUNBQ0FCUlEwQkN5QUJJQVkyQWhnZ0FpZ0NFQ0lEQkVBZ0FTQUROZ0lRSUFNZ0FUWUNHQXNnQWlnQ0ZDSURSUTBBSUFFZ0F6WUNGQ0FESUFFMkFoZ0xJQUlnQlU4TkFDQUZLQUlFSWdGQkFYRkZEUUFDUUFKQUFrQUNRQ0FCUVFKeFJRUkFRYUFmS0FJQUlBVkdCRUJCb0I4Z0FqWUNBRUdVSDBHVUh5Z0NBQ0FBYWlJQU5nSUFJQUlnQUVFQmNqWUNCQ0FDUVp3ZktBSUFSdzBHUVpBZlFRQTJBZ0JCbkI5QkFEWUNBQThMUVp3ZktBSUFJQVZHQkVCQm5COGdBallDQUVHUUgwR1FIeWdDQUNBQWFpSUFOZ0lBSUFJZ0FFRUJjallDQkNBQUlBSnFJQUEyQWdBUEN5QUJRWGh4SUFCcUlRQWdBVUgvQVUwRVFDQUJRUU4ySVFRZ0JTZ0NEQ0lCSUFVb0FnZ2lBMFlFUUVHSUgwR0lIeWdDQUVGK0lBUjNjVFlDQUF3RkN5QURJQUUyQWd3Z0FTQUROZ0lJREFRTElBVW9BaGdoQmlBRklBVW9BZ3dpQVVjRVFFR1lIeWdDQUJvZ0JTZ0NDQ0lESUFFMkFnd2dBU0FETmdJSURBTUxJQVZCRkdvaUJDZ0NBQ0lEUlFSQUlBVW9BaEFpQTBVTkFpQUZRUkJxSVFRTEEwQWdCQ0VISUFNaUFVRVVhaUlFS0FJQUlnTU5BQ0FCUVJCcUlRUWdBU2dDRUNJRERRQUxJQWRCQURZQ0FBd0NDeUFGSUFGQmZuRTJBZ1FnQWlBQVFRRnlOZ0lFSUFBZ0Ftb2dBRFlDQUF3REMwRUFJUUVMSUFaRkRRQUNRQ0FGS0FJY0lnTkJBblJCdUNGcUlnUW9BZ0FnQlVZRVFDQUVJQUUyQWdBZ0FRMEJRWXdmUVl3ZktBSUFRWDRnQTNkeE5nSUFEQUlMSUFaQkVFRVVJQVlvQWhBZ0JVWWJhaUFCTmdJQUlBRkZEUUVMSUFFZ0JqWUNHQ0FGS0FJUUlnTUVRQ0FCSUFNMkFoQWdBeUFCTmdJWUN5QUZLQUlVSWdORkRRQWdBU0FETmdJVUlBTWdBVFlDR0FzZ0FpQUFRUUZ5TmdJRUlBQWdBbW9nQURZQ0FDQUNRWndmS0FJQVJ3MEFRWkFmSUFBMkFnQVBDeUFBUWY4QlRRUkFJQUJCZUhGQnNCOXFJUUVDZjBHSUh5Z0NBQ0lEUVFFZ0FFRURkblFpQUhGRkJFQkJpQjhnQUNBRGNqWUNBQ0FCREFFTElBRW9BZ2dMSVFBZ0FTQUNOZ0lJSUFBZ0FqWUNEQ0FDSUFFMkFnd2dBaUFBTmdJSUR3dEJIeUVESUFCQi8vLy9CMDBFUUNBQVFTWWdBRUVJZG1jaUFXdDJRUUZ4SUFGQkFYUnJRVDVxSVFNTElBSWdBellDSENBQ1FnQTNBaEFnQTBFQ2RFRzRJV29oQVFKQUFrQUNRRUdNSHlnQ0FDSUVRUUVnQTNRaUIzRkZCRUJCakI4Z0JDQUhjallDQUNBQklBSTJBZ0FnQWlBQk5nSVlEQUVMSUFCQkdTQURRUUYyYTBFQUlBTkJIMGNiZENFRElBRW9BZ0FoQVFOQUlBRWlCQ2dDQkVGNGNTQUFSZzBDSUFOQkhYWWhBU0FEUVFGMElRTWdCQ0FCUVFSeGFpSUhRUkJxS0FJQUlnRU5BQXNnQnlBQ05nSVFJQUlnQkRZQ0dBc2dBaUFDTmdJTUlBSWdBallDQ0F3QkN5QUVLQUlJSWdBZ0FqWUNEQ0FFSUFJMkFnZ2dBa0VBTmdJWUlBSWdCRFlDRENBQ0lBQTJBZ2dMUWFnZlFhZ2ZLQUlBUVFGcklnQkJmeUFBR3pZQ0FBc0xCQUFqQUFzR0FDQUFKQUFMRUFBakFDQUFhMEZ3Y1NJQUpBQWdBQXRLQVFGL0lBQWdBVWtFUUNBQUlBRWdBaEFDRHdzZ0FnUkFJQUFnQW1vaEF5QUJJQUpxSVFFRFFDQURRUUZySWdNZ0FVRUJheUlCTFFBQU9nQUFJQUpCQVdzaUFnMEFDd3NnQUF2OURnSVJmd0YrSXdCQk1Hc2lCeVFBUWJoL0lRZ0NRQ0FGUlEwQUlBUXNBQUFpQ1VIL0FYRWhDd0pBSUFsQkFFZ0VRQ0FMUWY0QWEwRUJkaUlHSUFWUERRSkJiQ0VJSUF0Qi93QnJJZ3RCL3dGTERRSWdCRUVCYWlFSVFRQWhCUU5BSUFVZ0MwOEVRQ0FMSVFnZ0JpRUxEQU1GSUFBZ0JXb2dDQ0FGUVFGMmFpSUVMUUFBUVFSMk9nQUFJQUFnQlVFQmNtb2dCQzBBQUVFUGNUb0FBQ0FGUVFKcUlRVU1BUXNBQ3dBTElBVWdDMDBOQVNBSFFmOEJOZ0lFSUFZZ0IwRUVhaUFIUVFocUlBUkJBV29pRGlBTEVBd2lCRUdJZjBzRVFDQUVJUWdNQWd0QlZDRUlJQWNvQWdnaUVFRUdTdzBCSUFjb0FnUWlFVUVCZENJSlFRSnFyVUlCSUJDdGhpSVlRUUVnRUhRaURVRUJhaUlGclVJQ2hueDhRZ3Q4UXZ6Ly8vLy8vLy8vL3dDRFF1UUNWZzBCUVZJaENDQVJRZjhCU3cwQklBMUJmM05CQW5SQjVBSnFyU0FSUVFGcUloVkJBWFN0SUJoOFFnaDhWQTBCSUFzZ0JHc2hGaUFFSUE1cUlSY2dCa0dBQkdvaUVpQUZRUUowYWlJUklBbHFRUUpxSVE0Z0JrR0VCR29oRTBHQWdBSWdFSFJCRUhZaENVRUFJUVZCQVNFUElBMUJBV3NpRkNFS0EwQWdCU0FWUmtVRVFBSkFJQVlnQlVFQmRDSUlhaThCQUNJRVFmLy9BMFlFUUNBVElBcEJBblJxSUFVNkFBSWdDa0VCYXlFS1FRRWhCQXdCQ3lBUFFRQWdDU0FFd1VvYklROExJQWdnRVdvZ0JEc0JBQ0FGUVFGcUlRVU1BUXNMSUFZZ0R6c0JnZ1FnQmlBUU93R0FCQUpBSUFvZ0ZFWUVRQ0FOUVFOMklRaENBQ0VZUVFBaER3TkFJQXdnRlVZRVFDQUlJQTFCQVhacVFRTnFJZ2xCQVhRaENFRUFJUVJCQUNFS0EwQkJBQ0VGSUFvZ0RVOE5CQU5BSUFWQkFrWkZCRUFnRXlBRklBbHNJQVJxSUJSeFFRSjBhaUFPSUFVZ0NtcHFMUUFBT2dBQ0lBVkJBV29oQlF3QkN3c2dDa0VDYWlFS0lBUWdDR29nRkhFaEJBd0FDd0FGSUFZZ0RFRUJkR291QVFBaENTQU9JQTlxSWdRZ0dEY0FBRUVJSVFVRFFDQUZJQWxPUlFSQUlBUWdCV29nR0RjQUFDQUZRUWhxSVFVTUFRc0xJQmhDZ1lLRWlKQ2d3SUFCZkNFWUlBeEJBV29oRENBSklBOXFJUThNQVFzQUN3QUxJQTFCQTNZZ0RVRUJkbXBCQTJvaENFRUFJUVVEUUNBTUlCVkdSUVJBUVFBaENTQUdJQXhCQVhScUxnRUFJZ1JCQUNBRVFRQktHeUVFQTBBZ0JDQUpSa1VFUUNBVElBVkJBblJxSUF3NkFBSURRQ0FGSUFocUlCUnhJZ1VnQ2tzTkFBc2dDVUVCYWlFSkRBRUxDeUFNUVFGcUlRd01BUXNMUVg4aENDQUZEUUlMSUJCQkFXb2hDRUVBSVFVRFFDQUZJQTFHUlFSQUlCRWdFeUFGUVFKMGFpSU9MUUFDUVFGMGFpSUVJQVF2QVFBaUNVRUJhanNCQUNBT0lBZ2dDV2RCWUhOcUlnUTZBQU1nRGlBSklBUjBJQTFyT3dFQUlBVkJBV29oQlF3QkN3c0NRQUpBSUFZdkFZSUVCRUFnQjBFY2FpSUVJQmNnRmhBTklnaEJpSDlMRFFJZ0IwRVVhaUFFSUJJUURpQUhRUXhxSUFRZ0VoQU9RUUFoQlFOQUlBZEJIR29pQkJBUElBVkIrd0ZMY2cwQ0lBQWdCV29pQmlBSFFSUnFJQVFRRURvQUFDQUdJQWRCREdvZ0JCQVFPZ0FCSUFWQkFuSWhCQ0FIUVJ4cUVBOEVRQ0FFSVFVTUF3VWdBQ0FFYWlBSFFSUnFJQWRCSEdvaUJCQVFPZ0FBSUFZZ0IwRU1haUFFRUJBNkFBTWdCVUVFYWlFRkRBRUxBQXNBQ3lBSFFSeHFJZ1FnRnlBV0VBMGlDRUdJZjBzTkFTQUhRUlJxSUFRZ0VoQU9JQWRCREdvZ0JDQVNFQTVCQUNFRkEwQWdCMEVjYWlJRUVBOGdCVUg3QVV0eVJRUkFJQUFnQldvaUJpQUhRUlJxSUFRUUVUb0FBQ0FHSUFkQkRHb2dCQkFST2dBQklBVkJBbkloQkNBSFFSeHFFQThFUUNBRUlRVUZJQUFnQkdvZ0IwRVVhaUFIUVJ4cUlnUVFFVG9BQUNBR0lBZEJER29nQkJBUk9nQURJQVZCQkdvaEJRd0NDd3NMQW44RFFFRzZmeUVJSUFWQi9RRkxEUU1nQUNBRmFpSUdJQWRCRkdvZ0IwRWNhaUlKRUJFNkFBQWdCa0VCYWlFRUlBa1FEMEVEUmdSQUlBZEJER29oQ0VFQ0RBSUxJQVZCL0FGTERRTWdCaUFIUVF4cUlBZEJIR29pQkJBUk9nQUJJQVZCQW1vaEJTQUVFQTlCQTBjTkFBc2dBQ0FGYWlFRUlBZEJGR29oQ0VFREN5QUVJQWdnQjBFY2FoQVJPZ0FBSUFacUlBQnJJUWdNQVFzQ2Z3TkFRYnAvSVFnZ0JVSDlBVXNOQWlBQUlBVnFJZ1lnQjBFVWFpQUhRUnhxSWdrUUVEb0FBQ0FHUVFGcUlRUWdDUkFQUVFOR0JFQWdCMEVNYWlFSVFRSU1BZ3NnQlVIOEFVc05BaUFHSUFkQkRHb2dCMEVjYWlJRUVCQTZBQUVnQlVFQ2FpRUZJQVFRRDBFRFJ3MEFDeUFBSUFWcUlRUWdCMEVVYWlFSVFRTUxJQVFnQ0NBSFFSeHFFQkE2QUFBZ0Jtb2dBR3NoQ0FzZ0NFR0lmMHNOQVFzZ0NDRUVRUUFoQlNBQlFRQkJOQkFESVFsQkFDRUtBMEFnQkNBRlJ3UkFJQUFnQldvaUJpMEFBQ0lCUVF0TEJFQkJiQ0VJREFNRklBa2dBVUVDZEdvaUFTQUJLQUlBUVFGcU5nSUFJQVZCQVdvaEJVRUJJQVl0QUFCMFFRRjFJQXBxSVFvTUFnc0FDd3RCYkNFSUlBcEZEUUFnQ21jaUJVRWZjeUlCUVF0TERRQWdBMEVnSUFWck5nSUFRUUZCQWlBQmRDQUtheUlEWjBFZmN5SUJkQ0FEUncwQUlBQWdCR29nQVVFQmFpSUFPZ0FBSUFrZ0FFRUNkR29pQUNBQUtBSUFRUUZxTmdJQUlBa29BZ1FpQUVFQ1NTQUFRUUZ4Y2cwQUlBSWdCRUVCYWpZQ0FDQUxRUUZxSVFnTElBZEJNR29rQUNBSUM2QUZBUXgvSXdCQkVHc2lEQ1FBQW44Z0JFRUhUUVJBSUF4Q0FEY0RDQ0FNUVFocUlnVWdBeUFFRUFJYVFXd2dBQ0FCSUFJZ0JVRUlFQXdpQUNBQUlBUkxHeUFBSUFCQmlYOUpHd3dCQ3lBQVFRQWdBU2dDQUVFQmFpSU5RUUYwRUFNaEQwRlVJQU1vQUFBaUJrRVBjU0lBUVFwTERRQWFJQUlnQUVFRmFqWUNBQ0FESUFScUlnSkJCR3NoQnlBQ1FRZHJJUXNnQUVFR2FpRU9RUVFoQWlBR1FRUjJJUVZCSUNBQWRDSUlRUUZ5SVFsQkFDRUFRUUVoQmlBRElRUURRQUpBSUFaQkFYRkZCRUFEUUNBRlFYOXpRWUNBZ0lCNGNtZ2lCa0VZU1VVRVFDQUFRU1JxSVFBZ0JDQUxUUVIvSUFSQkEyb0ZJQVFnQzJ0QkEzUWdBbXBCSDNFaEFpQUhDeUlFS0FBQUlBSjJJUVVNQVFzTElBSWdCa0VlY1NJS2FrRUNhaUVDSUFaQkFYWkJBMndnQUdvZ0JTQUtka0VEY1dvaUFDQU5UdzBCQW44Z0JDQUxTeUFDUVFOMklBUnFJZ1VnQjB0eFJRUkFJQUpCQjNFaEFpQUZEQUVMSUFRZ0IydEJBM1FnQW1wQkgzRWhBaUFIQ3lJRUtBQUFJQUoySVFVTElBVWdDRUVCYTNFaUJpQUlRUUYwUVFGcklnb2dDV3NpRUVrRWZ5QU9RUUZyQlNBRklBcHhJZ1VnRUVFQUlBVWdDRTRiYXlFR0lBNExJUVVnRHlBQVFRRjBhaUFHUVFGcklnbzdBUUFnQUVFQmFpRUFJQUlnQldvaEFpQUlRUUVnQm1zZ0NpQUdRUUJLR3lBSmFpSUpTZ1JBSUFsQkFrZ05BVUVnSUFsbklnVnJJUTVCQVNBRlFSOXpkQ0VJQ3lBQUlBMVBEUUFnQ2tFQVJ5RUdBbjhnQkNBTFN5QUNRUU4xSUFScUlnVWdCMHR4UlFSQUlBSkJCM0VoQWlBRkRBRUxJQUlnQkNBSGEwRURkR3BCSDNFaEFpQUhDeUlFS0FBQUlBSjJJUVVNQVFzTFFXd2dDVUVCUncwQUdrRlFJQUFnRFVzTkFCcEJiQ0FDUVNCS0RRQWFJQUVnQUVFQmF6WUNBQ0FFSUFKQkIycEJBM1ZxSUFOckN5QU1RUkJxSkFBTDhnRUJBWDhnQWtVRVFDQUFRZ0EzQWdBZ0FFRUFOZ0lRSUFCQ0FEY0NDRUc0Znc4TElBQWdBVFlDRENBQUlBRkJCR28yQWhBZ0FrRUVUd1JBSUFBZ0FTQUNhaUlCUVFScklnTTJBZ2dnQUNBREtBQUFOZ0lBSUFGQkFXc3RBQUFpQVFSQUlBQWdBV2RCRjJzMkFnUWdBZzhMSUFCQkFEWUNCRUYvRHdzZ0FDQUJOZ0lJSUFBZ0FTMEFBQ0lETmdJQUFrQUNRQUpBSUFKQkFtc09BZ0VBQWdzZ0FDQUJMUUFDUVJCMElBTnlJZ00yQWdBTElBQWdBUzBBQVVFSWRDQURhallDQUFzZ0FTQUNha0VCYXkwQUFDSUJSUVJBSUFCQkFEWUNCRUZzRHdzZ0FDQUJaeUFDUVFOMGEwRUphallDQkNBQ0MwUUJBbjhnQVNBQ0x3RUFJZ01nQVNnQ0JHb2lCRFlDQkNBQUlBTkJBblJCb0IxcUtBSUFJQUVvQWdCQkFDQUVhM1p4TmdJQUlBRVFEeG9nQUNBQ1FRUnFOZ0lFQzU4QkFRUi9RUU1oQVNBQUtBSUVJZ0pCSUUwRVFDQUFLQUlJSWdFZ0FDZ0NFRThFUUNBQUlBSkJCM0UyQWdRZ0FDQUJJQUpCQTNacklnSTJBZ2dnQUNBQ0tBQUFOZ0lBUVFBUEN5QUFLQUlNSWdNZ0FVWUVRRUVCUVFJZ0FrRWdTUnNQQ3lBQUlBRWdBU0FEYXlBQ1FRTjJJZ1FnQVNBRWF5QURTU0lCR3lJRGF5SUVOZ0lJSUFBZ0FpQURRUU4wYXpZQ0JDQUFJQVFvQUFBMkFnQUxJQUVMU0FFRWZ5QUFLQUlFSUFBb0FnQkJBblJxSWdJdEFBSWdBaThCQUNFRUlBRWdBU2dDQkNJRklBSXRBQU1pQW1vMkFnUWdBQ0FFSUFFb0FnQWdCWFJCQUNBQ2EzWnFOZ0lBQzFJQkJIOGdBQ2dDQkNBQUtBSUFRUUowYWlJQ0xRQUNJQUl2QVFBaEJDQUJJQUl0QUFNaUFpQUJLQUlFYWlJRk5nSUVJQUFnQkNBQ1FRSjBRYUFkYWlnQ0FDQUJLQUlBUVFBZ0JXdDJjV28yQWdBTENBQWdBRUdJZjBzTEdnQWdBQVJBSUFFRVFDQUNJQUFnQVJFQ0FBOExJQUFRQmdzTHBnZ0NEWDhCZmlNQVFSQnJJZ2trQUNBSlFRQTJBZ3dnQ1VFQU5nSUlBbjhDUUNBRFFlZ0phaUFESUFsQkNHb2dDVUVNYWlBQklBSWdBMEdBQVdvUUN5SVBRWWgvU3cwQVFWUWdDU2dDRENJRUlBQW9BZ0FpQVVIL0FYRkJBV3BMRFFFYUlBQkJCR29oQ3lBQUlBRkIvNEdBZUhFZ0JFRVFkRUdBZ1B3SGNYSTJBZ0JCZnlBRUlBUkJBRWdiUVFGcUlRQkJBQ0VCSUFrb0FnZ2hCVUVBSVFJRFFDQUFJQUpHQkVBZ0JVRURheUVCUVFBaEFBTkFBa0JCQUNFQ0lBQWdBVTRFUUFOQUlBQWdCVTROQWlBRElBQWdBMnBCNkFscUxRQUFRUUowYWtGQWF5SUJJQUVvQWdBaUFVRUJhallDQUNBQklBTnFJQUE2QU9nSElBQkJBV29oQUF3QUN3QUZBMEFnQWtFRVJrVUVRQ0FESUFNZ0FDQUNhaUlIYWtIb0NXb3RBQUJCQW5ScVFVQnJJZ2dnQ0NnQ0FDSUlRUUZxTmdJQUlBTWdDR29nQnpvQTZBY2dBa0VCYWlFQ0RBRUxDeUFBUVFScUlRQU1BZ3NBQ3dzZ0JFRUJhaUVPSUFNb0FnQWhCMEVBSVFCQkFTRUlBMEFnQ0NBT1JnMERJQTRnQ0dzaEJDQURJQWhCQW5ScUtBSUFJUVVDUUFKQUFrQUNRQUpBQWtCQkFTQUlkRUVCZFNJTlFRRnJEZ2dBQVFRQ0JBUUVBd1FMUVFBaEFpQUZRUUFnQlVFQVNoc2hCaUFBSVFFRFFDQUNJQVpHRFFVZ0F5QUNJQWRxYWkwQTZBY2hDaUFMSUFGQkFYUnFJZ3dnQkRvQUFTQU1JQW82QUFBZ0FrRUJhaUVDSUFGQkFXb2hBUXdBQ3dBTFFRQWhBaUFGUVFBZ0JVRUFTaHNoQ2lBQUlRRURRQ0FDSUFwR0RRUWdDeUFCUVFGMGFpSUdJQU1nQWlBSGFtb3RBT2dISWd3NkFBSWdCaUFFT2dBQklBWWdERG9BQUNBR0lBUTZBQU1nQWtFQmFpRUNJQUZCQW1vaEFRd0FDd0FMUVFBaEFpQUZRUUFnQlVFQVNoc2hCaUFFUVFoMFFZRCtBM0VoQkNBQUlRRURRQ0FDSUFaR0RRTWdDeUFCUVFGMGFpQUVJQU1nQWlBSGFtb3RBT2dIY3ExQ2dZQ0VnSkNBd0FCK053QUFJQUpCQVdvaEFpQUJRUVJxSVFFTUFBc0FDMEVBSVFJZ0JVRUFJQVZCQUVvYklRWWdCRUVJZEVHQS9nTnhJUVFnQUNFQkEwQWdBaUFHUmcwQ0lBc2dBVUVCZEdvaUNpQUVJQU1nQWlBSGFtb3RBT2dIY3ExQ2dZQ0VnSkNBd0FCK0loRTNBQWdnQ2lBUk53QUFJQUpCQVdvaEFpQUJRUWhxSVFFTUFBc0FDMEVBSVFFZ0JVRUFJQVZCQUVvYklRb2dCRUVJZEVHQS9nTnhJUXdnQUNFRUEwQWdBU0FLUmcwQklBc2dCRUVCZEdvaEVDQU1JQU1nQVNBSGFtb3RBT2dIY3ExQ2dZQ0VnSkNBd0FCK0lSRkJBQ0VDQTBBZ0FpQU5Ua1VFUUNBUUlBSkJBWFJxSWdZZ0VUY0FHQ0FHSUJFM0FCQWdCaUFSTndBSUlBWWdFVGNBQUNBQ1FSQnFJUUlNQVFzTElBRkJBV29oQVNBRUlBMXFJUVFNQUFzQUN5QUlRUUZxSVFnZ0JTQUhhaUVISUFVZ0RXd2dBR29oQUF3QUN3QUZJQU1nQWtFQ2RHb2lCMEZBYXlBQk5nSUFJQUpCQVdvaEFpQUhLQUlBSUFGcUlRRU1BUXNBQ3dBTElBOExJQWxCRUdva0FBdnlBZ0VHZnlNQVFTQnJJZ1VrQUNBRUtBSUFJUVlnQlVFTWFpQUNJQU1RRFNJRFFZaC9UUVJBSUFSQkJHb2hBaUFBSUFGcUlnbEJBMnNoQkVFQUlBWkJFSFpyUVI5eElRTURRQ0FGUVF4cUVBOGdBQ0FFVDNKRkJFQWdBaUFGS0FJTUlnWWdCU2dDRUNJSGRDQURka0VCZEdvaUNDMEFBU0VLSUFBZ0NDMEFBRG9BQUNBQ0lBWWdCeUFLYWlJR2RDQURka0VCZEdvaUJ5MEFBQ0VJSUFVZ0JpQUhMUUFCYWpZQ0VDQUFJQWc2QUFFZ0FFRUNhaUVBREFFTEN3TkFJQVZCREdvUUR5RUhJQVVvQWd3aEJpQUZLQUlRSVFRZ0FDQUpUeUFIY2tVRVFDQUNJQVlnQkhRZ0EzWkJBWFJxSWdZdEFBQWhCeUFGSUFRZ0JpMEFBV28yQWhBZ0FDQUhPZ0FBSUFCQkFXb2hBQXdCQ3dzRFFDQUFJQWxQUlFSQUlBSWdCaUFFZENBRGRrRUJkR29pQnkwQUFTRUlJQUFnQnkwQUFEb0FBQ0FBUVFGcUlRQWdCQ0FJYWlFRURBRUxDMEZzUVd3Z0FTQUZLQUlVSUFVb0FoaEhHeUFFUVNCSEd5RURDeUFGUVNCcUpBQWdBd3ZQRkFFamZ5TUFRZEFBYXlJRkpBQkJiQ0VKQWtBZ0EwRUtTUTBBQWtBZ0F5QUNMd0FFSWdjZ0FpOEFBQ0lJSUFJdkFBSWlEV3BxUVFacUlneEpEUUFnQkM4QkFpRUdJQVZCUEdvZ0FrRUdhaUlDSUFnUURTSUpRWWgvU3cwQklBVkJLR29nQWlBSWFpSUNJQTBRRFNJSlFZaC9TdzBCSUFWQkZHb2dBaUFOYWlJQ0lBY1FEU0lKUVloL1N3MEJJQVVnQWlBSGFpQURJQXhyRUEwaUNVR0lmMHNOQVNBRVFRUnFJUW9nQUNBQmFpSWZRUU5ySVNCQkFDQUdhMEVmY1NFTElBVW9BZ2doRVNBRktBSWNJUklnQlNnQ01DRVRJQVVvQWtRaEZDQUZLQUlFSVFrZ0JTZ0NHQ0VOSUFVb0Fpd2hEQ0FGS0FKQUlRWWdCU2dDRUNFaElBVW9BaVFoSWlBRktBSTRJU01nQlNnQ1RDRWtJQVVvQWdBaEZTQUZLQUlVSVJZZ0JTZ0NLQ0VYSUFVb0Fqd2hHRUVCSVE4Z0FDQUJRUU5xUVFKMklnUnFJZ01nQkdvaUFpQUVhaUlaSVFRZ0FpRUlJQU1oQndOQUlBOUJBWEZGSUFRZ0lFOXlSUVJBSUFBZ0NpQVlJQVowSUF0MlFRSjBhaUlPTHdFQU93QUFJQTR0QUFJaEdpQU9MUUFESVJBZ0J5QUtJQmNnREhRZ0MzWkJBblJxSWc0dkFRQTdBQUFnRGkwQUFpRWJJQTR0QUFNaER5QUlJQW9nRmlBTmRDQUxka0VDZEdvaURpOEJBRHNBQUNBT0xRQUNJUndnRGkwQUF5RWRJQVFnQ2lBVklBbDBJQXQyUVFKMGFpSU9Md0VBT3dBQUlBNHRBQUloSGlBT0xRQURJUTRnQUNBUWFpSWxJQW9nR0NBR0lCcHFJZ1owSUF0MlFRSjBhaUlRTHdFQU93QUFJQkF0QUFJZ0VDMEFBeUVtSUFjZ0Qyb2lKeUFLSUJjZ0RDQWJhaUlhZENBTGRrRUNkR29pQnk4QkFEc0FBQ0FITFFBQ0lRd2dCeTBBQXlFUUlBZ2dIV29pR3lBS0lCWWdEU0FjYWlJUGRDQUxka0VDZEdvaUNDOEJBRHNBQUNBSUxRQUNJUTBnQ0MwQUF5RWNJQVFnRG1vaUhTQUtJQlVnQ1NBZWFpSU9kQ0FMZGtFQ2RHb2lDUzhCQURzQUFDQUdhaUVBUVFNaEJ3Si9JQlFnSkVrRVFDQUFJUVpCQXd3QkN5QUFRUWR4SVFZZ0ZDQUFRUU4yYXlJVUtBQUFJUmhCQUFzZ0NTMEFBeUVlSUFrdEFBSWhDQ0FNSUJwcUlRQWdFeUFqU1FSL0lBQUZJQk1nQUVFRGRtc2lFeWdBQUNFWFFRQWhCeUFBUVFkeEN5RU1JQTBnRDJvaEFDQUhjaUVKUVFNaER3Si9JQklnSWtrRVFDQUFJUTFCQXd3QkN5QUFRUWR4SVEwZ0VpQUFRUU4yYXlJU0tBQUFJUlpCQUFzZ0NDQU9haUVBSUFseUlCRWdJVWtFZnlBQUJTQVJJQUJCQTNackloRW9BQUFoRlVFQUlROGdBRUVIY1FzaENTQWxJQ1pxSVFBZ0VDQW5haUVISUJzZ0hHb2hDQ0FkSUI1cUlRUWdEM0pGSVE4TUFRc0xJQVVnRERZQ0xDQUZJQVkyQWtBZ0JTQU5OZ0lZSUFVZ0NUWUNCQ0FGSUJRMkFrUWdCU0FUTmdJd0lBVWdFallDSENBRklCRTJBZ2dnQlNBWU5nSThJQVVnRnpZQ0tDQUZJQlkyQWhRZ0JTQVZOZ0lBSUFJZ0Iwa2dBQ0FEUzNJTkFFRnNJUWtnQ0NBWlN3MEJJQU5CQTJzaENRTkFJQVZCUEdvUUQwVWdBQ0FKU1hFRVFDQUFJQW9nQlNnQ1BDSU5JQVVvQWtBaURIUWdDM1pCQW5ScUlnNHZBUUE3QUFBZ0FDQU9MUUFEYWlJR0lBb2dEU0FNSUE0dEFBSnFJZ0IwSUF0MlFRSjBhaUlNTHdFQU93QUFJQVVnQUNBTUxRQUNhallDUUNBR0lBd3RBQU5xSVFBTUFRVWdBMEVDYXlFTUEwQWdCVUU4YWhBUElRWWdCU2dDUENFTklBVW9Ba0FoQ1NBQUlBeExJQVp5UlFSQUlBQWdDaUFOSUFsMElBdDJRUUowYWlJR0x3RUFPd0FBSUFVZ0NTQUdMUUFDYWpZQ1FDQUFJQVl0QUFOcUlRQU1BUXNMQTBBZ0FDQU1TMFVFUUNBQUlBb2dEU0FKZENBTGRrRUNkR29pQmk4QkFEc0FBQ0FBSUFZdEFBTnFJUUFnQ1NBR0xRQUNhaUVKREFFTEN3SkFJQUFnQTA4TkFDQUFJQW9nRFNBSmRDQUxkaUlBUVFKMGFpSURMUUFBT2dBQUlBTXRBQU5CQVVZRVFDQUpJQU10QUFKcUlRa01BUXNnQ1VFZlN3MEFRU0FnQ1NBS0lBQkJBblJxTFFBQ2FpSUFJQUJCSUU4YklRa0xJQUpCQTJzaERBTkFJQVZCS0dvUUQwVWdCeUFNU1hFRVFDQUhJQW9nQlNnQ0tDSUdJQVVvQWl3aUFIUWdDM1pCQW5ScUlnMHZBUUE3QUFBZ0J5QU5MUUFEYWlJRElBb2dCaUFBSUEwdEFBSnFJZ0IwSUF0MlFRSjBhaUlHTHdFQU93QUFJQVVnQUNBR0xRQUNhallDTENBRElBWXRBQU5xSVFjTUFRVWdBa0VDYXlFR0EwQWdCVUVvYWhBUElRTWdCU2dDS0NFTUlBVW9BaXdoQUNBR0lBZEpJQU55UlFSQUlBY2dDaUFNSUFCMElBdDJRUUowYWlJREx3RUFPd0FBSUFVZ0FDQURMUUFDYWpZQ0xDQUhJQU10QUFOcUlRY01BUXNMQTBBZ0JpQUhTVVVFUUNBSElBb2dEQ0FBZENBTGRrRUNkR29pQXk4QkFEc0FBQ0FISUFNdEFBTnFJUWNnQUNBRExRQUNhaUVBREFFTEN3SkFJQUlnQjAwTkFDQUhJQW9nRENBQWRDQUxkaUlDUVFKMGFpSURMUUFBT2dBQUlBTXRBQU5CQVVZRVFDQUFJQU10QUFKcUlRQU1BUXNnQUVFZlN3MEFRU0FnQUNBS0lBSkJBblJxTFFBQ2FpSUFJQUJCSUU4YklRQUxJQmxCQTJzaERBTkFJQVZCRkdvUUQwVWdDQ0FNU1hFRVFDQUlJQW9nQlNnQ0ZDSUdJQVVvQWhnaUFuUWdDM1pCQW5ScUlnMHZBUUE3QUFBZ0NDQU5MUUFEYWlJRElBb2dCaUFDSUEwdEFBSnFJZ0owSUF0MlFRSjBhaUlHTHdFQU93QUFJQVVnQWlBR0xRQUNhallDR0NBRElBWXRBQU5xSVFnTUFRVWdHVUVDYXlFREEwQWdCVUVVYWhBUElRSWdCU2dDRkNFR0lBVW9BaGdoQnlBRElBaEpJQUp5UlFSQUlBZ2dDaUFHSUFkMElBdDJRUUowYWlJQ0x3RUFPd0FBSUFVZ0J5QUNMUUFDYWpZQ0dDQUlJQUl0QUFOcUlRZ01BUXNMQTBBZ0F5QUlTVVVFUUNBSUlBb2dCaUFIZENBTGRrRUNkR29pQWk4QkFEc0FBQ0FJSUFJdEFBTnFJUWdnQnlBQ0xRQUNhaUVIREFFTEN3SkFJQWdnR1U4TkFDQUlJQW9nQmlBSGRDQUxkaUlDUVFKMGFpSURMUUFBT2dBQUlBTXRBQU5CQVVZRVFDQUhJQU10QUFKcUlRY01BUXNnQjBFZlN3MEFRU0FnQnlBS0lBSkJBblJxTFFBQ2FpSUNJQUpCSUU4YklRY0xBMEFnQlJBUFJTQUVJQ0JKY1FSQUlBUWdDaUFGS0FJQUlnWWdCU2dDQkNJQ2RDQUxka0VDZEdvaURDOEJBRHNBQUNBRUlBd3RBQU5xSWdNZ0NpQUdJQUlnREMwQUFtb2lBblFnQzNaQkFuUnFJZ1F2QVFBN0FBQWdCU0FDSUFRdEFBSnFOZ0lFSUFNZ0JDMEFBMm9oQkF3QkJTQWZRUUpySVFNRFFDQUZFQThoQWlBRktBSUFJUVlnQlNnQ0JDRUlJQU1nQkVrZ0FuSkZCRUFnQkNBS0lBWWdDSFFnQzNaQkFuUnFJZ0l2QVFBN0FBQWdCU0FJSUFJdEFBSnFOZ0lFSUFRZ0FpMEFBMm9oQkF3QkN3c0RRQ0FESUFSSlJRUkFJQVFnQ2lBR0lBaDBJQXQyUVFKMGFpSUNMd0VBT3dBQUlBUWdBaTBBQTJvaEJDQUlJQUl0QUFKcUlRZ01BUXNMQWtBZ0JDQWZUdzBBSUFRZ0NpQUdJQWgwSUF0MklnSkJBblJxSWdNdEFBQTZBQUFnQXkwQUEwRUJSZ1JBSUFnZ0F5MEFBbW9oQ0F3QkN5QUlRUjlMRFFCQklDQUlJQW9nQWtFQ2RHb3RBQUpxSWdJZ0FrRWdUeHNoQ0F0QmJFRnNRV3hCYkVGc1FXeEJiRUZzSUFFZ0NFRWdSeHNnQlNnQ0NDQUZLQUlNUnhzZ0IwRWdSeHNnQlNnQ0hDQUZLQUlnUnhzZ0FFRWdSeHNnQlNnQ01DQUZLQUkwUnhzZ0NVRWdSeHNnQlNnQ1JDQUZLQUpJUnhzaENRd0pDd0FMQUFzQUN3QUxBQXNBQ3dBTEFBdEJiQ0VKQ3lBRlFkQUFhaVFBSUFrTDdCQUJIbjhqQUVIUUFHc2lCU1FBUVd3aENRSkFJQU5CQ2trTkFBSkFJQU1nQWk4QUJDSUdJQUl2QUFBaUJ5QUNMd0FDSWdocWFrRUdhaUlPU1EwQUlBUXZBUUloRHlBRlFUeHFJQUpCQm1vaUFpQUhFQTBpQ1VHSWYwc05BU0FGUVNocUlBSWdCMm9pQWlBSUVBMGlDVUdJZjBzTkFTQUZRUlJxSUFJZ0NHb2lBaUFHRUEwaUNVR0lmMHNOQVNBRklBSWdCbW9nQXlBT2F4QU5JZ2xCaUg5TERRRWdCRUVFYWlFS0lBQWdBV29pSEVFRGF5RWRRUUFnRDJ0QkgzRWhDeUFGS0FJSUlSRWdCU2dDSENFU0lBVW9BakFoRXlBRktBSkVJUlFnQlNnQ0JDRUpJQVVvQWhnaEJpQUZLQUlzSVFjZ0JTZ0NRQ0VJSUFVb0FoQWhIaUFGS0FJa0lSOGdCU2dDT0NFZ0lBVW9Ba3doSVNBRktBSUFJUlVnQlNnQ0ZDRVdJQVVvQWlnaEZ5QUZLQUk4SVJoQkFTRU5JQUFnQVVFRGFrRUNkaUlDYWlJT0lBSnFJZzhnQW1vaUdTRUVJQThoQWlBT0lRTURRQ0FOUlNBRUlCMVBja1VFUUNBS0lCZ2dDSFFnQzNaQkFYUnFJZ3d0QUFFaERTQUFJQXd0QUFBNkFBQWdDaUFYSUFkMElBdDJRUUYwYWlJTUxRQUJJUkFnQXlBTUxRQUFPZ0FBSUFvZ0ZpQUdkQ0FMZGtFQmRHb2lEQzBBQVNFYUlBSWdEQzBBQURvQUFDQUtJQlVnQ1hRZ0MzWkJBWFJxSWd3dEFBRWhHeUFFSUF3dEFBQTZBQUFnQ2lBWUlBZ2dEV29pQ0hRZ0MzWkJBWFJxSWd3dEFBRWhEU0FBSUF3dEFBQTZBQUVnQ2lBWElBY2dFR29pQjNRZ0MzWkJBWFJxSWd3dEFBRWhFQ0FESUF3dEFBQTZBQUVnQ2lBV0lBWWdHbW9pREhRZ0MzWkJBWFJxSWdZdEFBRWhHaUFDSUFZdEFBQTZBQUVnQ2lBVklBa2dHMm9pRzNRZ0MzWkJBWFJxSWdrdEFBRWhJaUFFSUFrdEFBQTZBQUVnQ0NBTmFpRUdRUU1oQ1FKL0lCUWdJVWtFUUVFRElRMGdCZ3dCQ3lBVUlBWkJBM1pySWhRb0FBQWhHRUVBSVEwZ0JrRUhjUXNoQ0NBSElCQnFJUVlnRXlBZ1NRUi9JQVlGSUJNZ0JrRURkbXNpRXlnQUFDRVhRUUFoQ1NBR1FRZHhDeUVISUF3Z0dtb2hEQ0FKSUExeUlSQkJBeUVOQW44Z0VpQWZTUVJBSUF3aEJrRUREQUVMSUF4QkIzRWhCaUFTSUF4QkEzWnJJaElvQUFBaEZrRUFDeUFiSUNKcUlRd2dFSEloRUNBUklCNUpCSDhnREFVZ0VTQU1RUU4yYXlJUktBQUFJUlZCQUNFTklBeEJCM0VMSVFrZ0JFRUNhaUVFSUFKQkFtb2hBaUFEUVFKcUlRTWdBRUVDYWlFQUlBMGdFSEpGSVEwTUFRc0xJQVVnQnpZQ0xDQUZJQWcyQWtBZ0JTQUdOZ0lZSUFVZ0NUWUNCQ0FGSUJRMkFrUWdCU0FUTmdJd0lBVWdFallDSENBRklCRTJBZ2dnQlNBWU5nSThJQVVnRnpZQ0tDQUZJQlkyQWhRZ0JTQVZOZ0lBSUFBZ0Rrc2dBeUFQUzNJTkFFRnNJUWtnQWlBWlN3MEJJQTVCQTJzaENRTkFJQVZCUEdvUUR5QUFJQWxQY2tVRVFDQUtJQVVvQWp3aUJpQUZLQUpBSWdkMElBdDJRUUYwYWlJSUxRQUJJUXdnQUNBSUxRQUFPZ0FBSUFvZ0JpQUhJQXhxSWdaMElBdDJRUUYwYWlJSExRQUFJUWdnQlNBR0lBY3RBQUZxTmdKQUlBQWdDRG9BQVNBQVFRSnFJUUFNQVFzTEEwQWdCVUU4YWhBUElRY2dCU2dDUENFR0lBVW9Ba0FoQ1NBQUlBNVBJQWR5UlFSQUlBb2dCaUFKZENBTGRrRUJkR29pQmkwQUFDRUhJQVVnQ1NBR0xRQUJhallDUUNBQUlBYzZBQUFnQUVFQmFpRUFEQUVMQ3dOQUlBQWdEazlGQkVBZ0NpQUdJQWwwSUF0MlFRRjBhaUlITFFBQklBQWdCeTBBQURvQUFDQUFRUUZxSVFBZ0NXb2hDUXdCQ3dzZ0QwRURheUVBQTBBZ0JVRW9haEFQSUFBZ0EwMXlSUVJBSUFvZ0JTZ0NLQ0lHSUFVb0Fpd2lCM1FnQzNaQkFYUnFJZ2d0QUFFaERpQURJQWd0QUFBNkFBQWdDaUFHSUFjZ0Rtb2lCblFnQzNaQkFYUnFJZ2N0QUFBaENDQUZJQVlnQnkwQUFXbzJBaXdnQXlBSU9nQUJJQU5CQW1vaEF3d0JDd3NEUUNBRlFTaHFFQThoQnlBRktBSW9JUVlnQlNnQ0xDRUFJQU1nRDA4Z0IzSkZCRUFnQ2lBR0lBQjBJQXQyUVFGMGFpSUdMUUFBSVFjZ0JTQUFJQVl0QUFGcU5nSXNJQU1nQnpvQUFDQURRUUZxSVFNTUFRc0xBMEFnQXlBUFQwVUVRQ0FLSUFZZ0FIUWdDM1pCQVhScUlnY3RBQUVoQ0NBRElBY3RBQUE2QUFBZ0EwRUJhaUVESUFBZ0NHb2hBQXdCQ3dzZ0dVRURheUVEQTBBZ0JVRVVhaEFQSUFJZ0EwOXlSUVJBSUFvZ0JTZ0NGQ0lHSUFVb0FoZ2lCM1FnQzNaQkFYUnFJZ2d0QUFFaERpQUNJQWd0QUFBNkFBQWdDaUFHSUFjZ0Rtb2lCblFnQzNaQkFYUnFJZ2N0QUFBaENDQUZJQVlnQnkwQUFXbzJBaGdnQWlBSU9nQUJJQUpCQW1vaEFnd0JDd3NEUUNBRlFSUnFFQThoQnlBRktBSVVJUVlnQlNnQ0dDRURJQUlnR1U4Z0IzSkZCRUFnQ2lBR0lBTjBJQXQyUVFGMGFpSUdMUUFBSVFjZ0JTQURJQVl0QUFGcU5nSVlJQUlnQnpvQUFDQUNRUUZxSVFJTUFRc0xBMEFnQWlBWlQwVUVRQ0FLSUFZZ0EzUWdDM1pCQVhScUlnY3RBQUVoQ0NBQ0lBY3RBQUE2QUFBZ0FrRUJhaUVDSUFNZ0NHb2hBd3dCQ3dzRFFDQUZFQThnQkNBZFQzSkZCRUFnQ2lBRktBSUFJZ0lnQlNnQ0JDSUdkQ0FMZGtFQmRHb2lCeTBBQVNFSUlBUWdCeTBBQURvQUFDQUtJQUlnQmlBSWFpSUNkQ0FMZGtFQmRHb2lCaTBBQUNFSElBVWdBaUFHTFFBQmFqWUNCQ0FFSUFjNkFBRWdCRUVDYWlFRURBRUxDd05BSUFVUUR5RUhJQVVvQWdBaEJpQUZLQUlFSVFJZ0JDQWNUeUFIY2tVRVFDQUtJQVlnQW5RZ0MzWkJBWFJxSWdZdEFBQWhCeUFGSUFJZ0JpMEFBV28yQWdRZ0JDQUhPZ0FBSUFSQkFXb2hCQXdCQ3dzRFFDQUVJQnhQUlFSQUlBb2dCaUFDZENBTGRrRUJkR29pQnkwQUFTRUlJQVFnQnkwQUFEb0FBQ0FFUVFGcUlRUWdBaUFJYWlFQ0RBRUxDMEZzUVd4QmJFRnNRV3hCYkVGc1FXd2dBU0FDUVNCSEd5QUZLQUlJSUFVb0FneEhHeUFEUVNCSEd5QUZLQUljSUFVb0FpQkhHeUFBUVNCSEd5QUZLQUl3SUFVb0FqUkhHeUFKUVNCSEd5QUZLQUpFSUFVb0FraEhHeUVKREFFTFFXd2hDUXNnQlVIUUFHb2tBQ0FKQzFnQkEzOENRQ0FBS0FLUTZ3RWlBVVVOQUNBQktBSUFJQUZCdE5VQmFpZ0NBQ0lDSUFGQnVOVUJhaWdDQUNJREVCTWdBZ1JBSUFNZ0FTQUNFUUlBREFFTElBRVFCZ3NnQUVFQU5nS2c2d0VnQUVJQU53T1E2d0VMNlFNQ0JIOENmaUFBUVFCQktCQURJUVFnQWtFQlFRVWdBeHNpQUVrRVFDQUFEd3NnQVVVRVFFRi9Ed3RCQVNFR0FrQUNRQ0FEUVFGR0RRQWdBeUVHSUFFb0FBQWlCVUdvNnI1cFJnMEFRWFloQXlBRlFYQnhRZERVdE1JQlJ3MEJRUWdoQXlBQ1FRaEpEUUVnQVRVQUJDRUlJQVJCQVRZQ0ZDQUVJQWczQXdCQkFBOExJQUVnQWlBR0VCb2lBeUFDU3cwQUlBUWdBellDR0VGeUlRTWdBQ0FCYWlJRlFRRnJMUUFBSWdKQkNIRU5BQ0FDUVNCeElnWkZCRUJCY0NFRElBVXRBQUFpQlVHbkFVc05BU0FGUVFkeHJVSUJJQVZCQTNaQkNtcXRoaUlJUWdPSWZpQUlmQ0VKSUFCQkFXb2hBQXNnQWtFR2RpRUZJQUpCQW5aQkFDRURBa0FDUUFKQUFrQWdBa0VEY1VFQmF3NERBQUVDQXdzZ0FDQUJhaTBBQUNFRElBQkJBV29oQUF3Q0N5QUFJQUZxTHdBQUlRTWdBRUVDYWlFQURBRUxJQUFnQVdvb0FBQWhBeUFBUVFScUlRQUxRUUZ4SVFJQ2ZnSkFBa0FDUUFKQUlBVkJBV3NPQXdFQ0F3QUxRbjhnQmtVTkF4b2dBQ0FCYWpFQUFBd0RDeUFBSUFGcU13QUFRb0FDZkF3Q0N5QUFJQUZxTlFBQURBRUxJQUFnQVdvcEFBQUxJUWdnQkNBQ05nSWdJQVFnQXpZQ0hDQUVJQWczQXdCQkFDRURJQVJCQURZQ0ZDQUVJQWdnQ1NBR0d5SUlOd01JSUFSQ2dJQUlJQWdnQ0VLQWdBaGFHejRDRUFzZ0F3dGZBUUYvUWJoL0lRTWdBVUVCUVFVZ0Foc2lBazhFZnlBQUlBSnFRUUZyTFFBQUlnQkJBM0ZCQW5SQm9CNXFLQUlBSUFKcUlBQkJCSFpCREhGQnNCNXFLQUlBYWlBQVFTQnhJZ0ZGYWlBQlFRVjJJQUJCd0FCSmNXb0ZRYmgvQ3dzTUFDQUFJQUVnQWtFQUVCa0xsd01DQlg4Q2ZpTUFRVUJxSWdRa0FBSkFBMEFnQVVFRlR3UkFBa0FnQUNnQUFFRndjVUhRMUxUQ0FVWUVRRUorSVFjZ0FVRUlTUTBFSUFBb0FBUWlBa0YzU3cwRUlBSkJDR29pQXlBQlN3MEVJQUpCZ1g5SkRRRU1CQXNnQkVFWWFpQUFJQUVRR3lFQ1FuNGdCQ2tER0VJQUlBUW9BaXhCQVVjYklBSWJJZ2RDZlZZTkF5QUhJQWg4SWdnZ0IxUkNmaUVIRFFNQ1FBSkFJQUZCQ0VrTkFDQUFLQUFBUVhCeFFkRFV0TUlCUncwQUlBQW9BQVFpQWtGM1N3MEZRYmgvSUFKQkNHb2lBaUFCSUFKSkd5RUREQUVMSUFSQkdHb2dBQ0FCRUJzaUFrR0lmMHNFUUNBQ0lRTU1BUXRCdUg4aEF5QUNEUUFnQVNBRUtBSXdJZ0pySVFVZ0FDQUNhaUVHQTBBZ0JpQUZJQVJCREdvUUhTSURRWWgvU3cwQklBTkJBMm9pQWlBRlN3UkFRYmgvSVFNTUFnc2dCU0FDYXlFRklBSWdCbW9oQmlBRUtBSVFSUTBBQ3lBRUtBSTRCSDlCdUg4aEF5QUZRUVJKRFFFZ0JrRUVhZ1VnQmdzZ0FHc2hBd3NnQTBHSWYwc05Bd3NnQVNBRGF5RUJJQUFnQTJvaEFBd0JDd3RDZmlBSUlBRWJJUWNMSUFSQlFHc2tBQ0FIQzJRQkFYOUJ1SDhoQXdKQUlBRkJBMGtOQUNBQUxRQUNJUUVnQWlBQUx3QUFJZ0JCQVhFMkFnUWdBaUFBUVFGMlFRTnhJZ00yQWdBZ0FpQUFJQUZCRUhSeVFRTjJJZ0EyQWdnQ1FBSkFJQU5CQVdzT0F3SUJBQUVMUVd3UEN5QUFJUU1MSUFNTFJBRUNmeUFCSUFJb0FnUWlBeUFCS0FJRWFpSUVOZ0lFSUFBZ0EwRUNkRUdnSFdvb0FnQWdBU2dDQUVFQUlBUnJkbkUyQWdBZ0FSQVBHaUFBSUFKQkNHbzJBZ1FMemdFQkJuOUJ1bjhoQ2dKQUlBSW9BZ1FpQ0NBQ0tBSUFJZ2xxSWcwZ0FTQUFhMHNOQUVGc0lRb2dDU0FFSUFNb0FnQWlDMnRMRFFBZ0FDQUphaUlFSUFJb0FnZ2lER3NoQWlBQUlBRkJJR3NpQUNBTElBbEJBQkFnSUFNZ0NTQUxhallDQUFKQUFrQWdCQ0FGYXlBTVR3UkFJQUloQlF3QkN5QU1JQVFnQm10TERRSWdCeUFISUFJZ0JXc2lBbW9pQVNBSWFrOEVRQ0FFSUFFZ0NCQUtHZ3dDQ3lBQ0lBaHFJUWdnQkNBQlFRQWdBbXNRQ2lBQ2F5RUVDeUFFSUFBZ0JTQUlRUUVRSUFzZ0RTRUtDeUFLQzhjRUFRSi9JQUFnQTJvaEJnSkFJQU5CQjB3RVFBTkFJQUFnQms4TkFpQUFJQUl0QUFBNkFBQWdBRUVCYWlFQUlBSkJBV29oQWd3QUN3QUxJQVJCQVVZRVFBSkFJQUFnQW1zaUJVRUhUUVJBSUFBZ0FpMEFBRG9BQUNBQUlBSXRBQUU2QUFFZ0FDQUNMUUFDT2dBQ0lBQWdBaTBBQXpvQUF5QUFJQUlnQlVFQ2RDSUZRY0FlYWlnQ0FHb2lBaWdBQURZQUJDQUNJQVZCNEI1cUtBSUFheUVDREFFTElBQWdBaWtBQURjQUFBc2dBa0VJYWlFQ0lBQkJDR29oQUFzZ0FTQUdUd1JBSUFBZ0Eyb2hBU0FFUVFGSElBQWdBbXRCRDBweVJRUkFBMEFnQUNBQ0tRQUFOd0FBSUFKQkNHb2hBaUFBUVFocUlnQWdBVWtOQUF3REN3QUxJQUFnQWlrQUFEY0FBQ0FBSUFJcEFBZzNBQWdnQTBFUlNRMEJJQUJCRUdvaEFBTkFJQUFnQWlrQUVEY0FBQ0FBSUFJcEFCZzNBQWdnQUNBQ0tRQWdOd0FRSUFBZ0Fpa0FLRGNBR0NBQ1FTQnFJUUlnQUVFZ2FpSUFJQUZKRFFBTERBRUxBa0FnQUNBQlN3UkFJQUFoQVF3QkN5QUJJQUJySVFVQ1FDQUVRUUZISUFBZ0FtdEJEMHB5UlFSQUlBSWhBd05BSUFBZ0F5a0FBRGNBQUNBRFFRaHFJUU1nQUVFSWFpSUFJQUZKRFFBTERBRUxJQUFnQWlrQUFEY0FBQ0FBSUFJcEFBZzNBQWdnQlVFUlNBMEFJQUJCRUdvaEFDQUNJUU1EUUNBQUlBTXBBQkEzQUFBZ0FDQURLUUFZTndBSUlBQWdBeWtBSURjQUVDQUFJQU1wQUNnM0FCZ2dBMEVnYWlFRElBQkJJR29pQUNBQlNRMEFDd3NnQWlBRmFpRUNDd05BSUFFZ0JrOE5BU0FCSUFJdEFBQTZBQUFnQVVFQmFpRUJJQUpCQVdvaEFnd0FDd0FMQzY0SEFnVi9BWDRqQUVHQUFXc2lFU1FBSUJFZ0F6WUNmRUYvSVE4Q1FBSkFBa0FDUUFKQUlBSU9CQUVBQXdJRUN5QUdSUVJBUWJoL0lROE1CQXRCYkNFUElBVXRBQUFpQWlBRFN3MERJQWdnQWtFQ2RDSUNhaWdDQUNFRElBSWdCMm9vQWdBaEFpQUFRUUE2QUFzZ0FFSUFOd0lBSUFBZ0FqWUNEQ0FBSUFNNkFBb2dBRUVBT3dFSUlBRWdBRFlDQUVFQklROE1Bd3NnQVNBSk5nSUFRUUFoRHd3Q0N5QUtSUVJBUVd3aER3d0NDMEVBSVE4Z0MwVWdERUVaU0hJTkFVRUlJQVIwUVFocUlRQkJBQ0VEQTBBZ0FDQURUUTBDSUFOQlFHc2hBd3dBQ3dBTFFXd2hEeUFSSUJGQi9BQnFJQkZCK0FCcUlBVWdCaEFNSWdOQmlIOUxEUUFnRVNnQ2VDSUNJQVJMRFFBZ0VTZ0NmRUVCYWlFSklBQkJDR29oQzBHQWdBSWdBblJCRUhVaEJVRUJJUkJCQVNBQ2RDSVBRUUZySWdvaEVnTkFJQWtnRGtjRVFBSkFJQkVnRGtFQmRDSUVhaThCQUNJTVFmLy9BMFlFUUNBTElCSkJBM1JxSUE0MkFnUWdFa0VCYXlFU1FRRWhEQXdCQ3lBUVFRQWdCU0FNd1VvYklSQUxJQVFnRFdvZ0REc0JBQ0FPUVFGcUlRNE1BUXNMSUFBZ0FqWUNCQ0FBSUJBMkFnQUNRQ0FLSUJKR0JFQWdEVUhxQUdvaEJrRUFJUkJCQUNFTUEwQWdDU0FRUmdSQUlBOUJBM1lnRDBFQmRtcEJBMm9pQlVFQmRDRUVRUUFoREVFQUlSSURRRUVBSVE0Z0R5QVNUUTBFQTBBZ0RrRUNSd1JBSUFzZ0JTQU9iQ0FNYWlBS2NVRURkR29nQmlBT0lCSnFhaTBBQURZQ0JDQU9RUUZxSVE0TUFRc0xJQkpCQW1vaEVpQUVJQXhxSUFweElRd01BQXNBQlNBUklCQkJBWFJxTGdFQUlRVWdCaUFNYWlJRUlCTTNBQUJCQ0NFT0EwQWdCU0FPU2dSQUlBUWdEbW9nRXpjQUFDQU9RUWhxSVE0TUFRc0xJQk5DZ1lLRWlKQ2d3SUFCZkNFVElCQkJBV29oRUNBRklBeHFJUXdNQVFzQUN3QUxJQTlCQTNZZ0QwRUJkbXBCQTJvaEJVRUFJUkJCQUNFT0EwQWdDU0FRUmcwQlFRQWhEQ0FSSUJCQkFYUnFMZ0VBSWdSQkFDQUVRUUJLR3lFRUEwQWdCQ0FNUndSQUlBc2dEa0VEZEdvZ0VEWUNCQU5BSUFVZ0Rtb2dDbkVpRGlBU1N3MEFDeUFNUVFGcUlRd01BUXNMSUJCQkFXb2hFQXdBQ3dBTElBSkJBV29oQlVFQUlRd0RRQ0FNSUE5SEJFQWdEU0FMSUF4QkEzUnFJZ2tvQWdRaUJFRUJkR29pQWlBQ0x3RUFJZ1pCQVdvN0FRQWdDU0FGSUFablFXQnphaUlDT2dBRElBa2dCaUFDZENBUGF6c0JBQ0FKSUFnZ0JFRUNkQ0lDYWlnQ0FEb0FBaUFKSUFJZ0Iyb29BZ0EyQWdRZ0RFRUJhaUVNREFFTEN5QUJJQUEyQWdBZ0F5RVBDeUFSUVlBQmFpUUFJQThMN1ZvQ08zOEdmaU1BUWVBQmF5SUVKQUFDUUVHdzdBa1FCU0lGUlFSQVFVQWhCd3dCQ3lBRlFnQTNBdlRxQVNBRlFRQTJBc1RyQVNBRlFRQTJBclRyQVNBRlFnQTNBcHpyQVNBRlFRQTJBcmpwQVNBRlFRQTJBcXpzQ1NBRlFnQTNBdFRyQVNBRlFnQTNBcXpyQVNBRlFnQTNBNGpyQVNBRlFnQTNBdVRxQVNBRlFnQTNBdVRyQVNBRlFZR0FnTUFBTmdLODZ3RWdCVUlBTndLazZ3RWdCVUg4NmdGcVFRQTJBZ0FnQlVHUTZ3RnFRZ0EzQXdBZ0JSQVlJQVZCck5VQmFpRVVJQVZCK09zQmFpRWNJQVZCc09vQmFpRWlJQVZCb0RCcUlTb2dCVUdZSUdvaEt5QUZRYWpRQUdvaEhpQUZRUkJxSVN3Z0JVRUlhaUVvSUFWQkJHb2hMU0FGUWNEcEFXb2hLU0FGUVlqckFXb2dCRUdVQVdvaEx5QUVRWXdCYWlFd0lBUkJoQUZxSVRFZ0JFSGNBR29oTWlBRVFkUUFhaUV6SUFSQnpBQnFJVFFnQUNFZEFrQUNRQUpBQWtBQ1FBTkFRUUZCQlNBRktBTGs2Z0ViSVFZQ1FBTkFJQU1nQmtrTkFTQUNLQUFBUVhCeFFkRFV0TUlCUmdSQVFiaC9JUWNnQTBFSVNRMElJQUlvQUFRaURrRjNTd1JBUVhJaEJ3d0pDeUFESUE1QkNHb2lDVWtOQ0NBT1FZQi9Td1JBSUFraEJ3d0pDeUFESUFscklRTWdBaUFKYWlFQ0RBRUxDeUFGUWdBM0FxenBBU0FGUWdBM0EranBBU0FGUVFBMkFwanJBU0FGUWdBM0E0RHFBU0FGUWdNM0EvanBBU0FGUWJUcEFXcENBRGNDQUNBRlFmRHBBV3BDQURjREFDQUZRYWpRQUdvaUNVR01nSURnQURZQ0FDQUZRYXpRQVdwQjRCSXBBZ0EzQWdBZ0JVRzAwQUZxUWVnU0tBSUFOZ0lBSUFVZ0JVRVFhallDQUNBRklBVkJvREJxTmdJRUlBVWdCVUdZSUdvMkFnZ2dCU0FKTmdJTUlBVkJBVUVGSUFVb0F1VHFBUnMyQXJ6cEFRSkFJQUZGRFFBZ0JTZ0NyT2tCSWdrZ0hVWU5BQ0FGSUFrMkFyanBBU0FGSUIwMkFxenBBU0FGS0FLdzZRRWhEaUFGSUIwMkFyRHBBU0FGSUIwZ0RpQUphMm8yQXJUcEFRdEJ1SDhoQ1NBRFFRVkJDU0FGS0FMazZnRWlCaHRKRFFVZ0FrRUJRUVVnQmhzZ0JoQWFJZzVCaUg5TEJFQWdEaUVKREFVTElBTWdEa0VEYWtrTkJTQXBJQUlnRGlBR0VCa2lCa0dJZjBzRVFDQUdJUWtNQlFzZ0JnMEZBa0FDUUNBRktBS282d0ZCQVVjTkFDQUZLQUtrNndFaUNVVU5BQ0FGS0FLVTZ3RkZEUUFnQ1NnQ0JFRUJheUlISUFVb0F0enBBU0lLclVLSGxhK3ZtTGJlbTU1L2ZrTEp6OW15OGVXNjZpZUZRaGVKUXMvVzA3N1N4NnZaUW41QytmUGQ4Wm4ybWFzV2ZDSS9RaUdJSUQrRlFzL1cwNzdTeDZ2WlFuNGlQMElkaUNBL2hVTDU4OTN4bWZhWnF4WitJajlDSUlnZ1A0V25jU0VHSUFrb0FnQWhGUU5BUVFBaENBSkFJQlVnQmtFQ2RHb29BZ0FpQ1VVTkFDQUpLQUlJUVFoSkRRQWdDU2dDQkNJU0tBQUFRYmZJd3VGK1J3MEFJQklvQUFRaENBc2dDQ0FLUndSQUlBWWdCM0ZCQVdvaEJpQUlEUUVMQ3lBSlJRMEFJQVVRR0NBRlFYODJBcURyQVNBRklBazJBcFRyQVNBRklBVW9BdHpwQVNJSU5nS1k2d0VNQVFzZ0JTZ0MzT2tCSVFnTEFrQWdDRVVOQUNBRktBS1k2d0VnQ0VZTkFFRmdJUWtNQmdzQ1FDQUZLQUxnNlFFRVFDQUZJQVVvQXVqcUFTSUpSVFlDN09vQklBa05BU0FGUXZucTBORG55YUhrNFFBM0E2anFBU0FGUWdBM0E2RHFBU0FGUXMvVzA3N1N4NnZaUWpjRG1Pb0JJQVZDMXV1Qzd1cjlpZlhnQURjRGtPb0JJQVZDQURjRGlPb0JJQ0pCQUVFb0VBTWFEQUVMSUFWQkFEWUM3T29CQ3lBQklCMXFJU1VnQlNBRktRUG82UUVnRHExOE53UG82UUVnQXlBT2F5RURJQUlnRG1vaEFpQWRJUTREUUNBQ0lBTWdCRUVzYWhBZEloVkJpSDlMQkVBZ0ZTRUpEQVlMSUFOQkEyc2lOU0FWU1EwRUlBSkJBMm9oRzBGc0lRa0NRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUNBRUtBSXNEZ01DQVFBVkN5QVZRZi8vQjBzTkV5QVZRUU5KRFJJZ0JTa0R5T2tCSVQ4Q1FBSkFJQnN0QUFBaUNVRURjU0lhUVFGckRnTUdBUUFIQ3lBRktBS0E2Z0VOQUVGaUlRa01GUXNnRlVFRlNRMFNJQnNvQUFBaEF3Si9Ba0FDUUFKQUlBbEJBblpCQTNFaUNVRUNhdzRDQVFJQUN5QUpRUUJISVFjZ0EwRUVka0gvQjNFaEMwRURJUVlnQTBFT2RrSC9CM0VNQWd0QkJDRUdJQU5CQkhaQi8vOEFjU0VMUVFFaEJ5QURRUkoyREFFTElBTkJCSFpCLy84UGNTSUxRWUNBQ0VzTkUwRUJJUWRCQlNFR0lBSXRBQWRCQ25RZ0EwRVdkbklMSWdnZ0Jtb2lDU0FWU3cwU0FrQWdDMEdCQmtrTkFDQUZLQUtjNndGRkRRQkJBQ0VEQTBBZ0EwR0RnQUZMRFFFZ0EwRkFheUVEREFBTEFBc2dCaUFiYWlFUElCcEJBMGNOQmlBRktBSU1JZ0l0QUFGQkNIUWhBeUFIRFFjZ0EwVU5DQ0FFUWZBQWFpQVBJQWdRRFNJRFFZaC9TdzBKSUFKQkJHb2hCaUFMSUJ4cUloSkJBMnNoQ2tFQUlBSXZBUUpyUVI5eElRY2dIQ0VEQTBBZ0JFSHdBR29RRDBVZ0F5QUtTWEVFUUNBRElBWWdCQ2dDY0NJSUlBUW9BblFpRDNRZ0IzWkJBblJxSWdJdkFRQTdBQUFnQXlBQ0xRQURhaUlESUFZZ0NDQVBJQUl0QUFKcUlnaDBJQWQyUVFKMGFpSUNMd0VBT3dBQUlBUWdDQ0FDTFFBQ2FqWUNkQ0FESUFJdEFBTnFJUU1NQVFVZ0VrRUNheUVJQTBBZ0JFSHdBR29RRHlFUElBUW9BbkFoQ2lBRUtBSjBJUUlnQXlBSVN5QVBja1VFUUNBRElBWWdDaUFDZENBSGRrRUNkR29pQ2k4QkFEc0FBQ0FFSUFJZ0NpMEFBbW8yQW5RZ0F5QUtMUUFEYWlFRERBRUxDd05BSUFNZ0NFMEVRQ0FESUFZZ0NpQUNkQ0FIZGtFQ2RHb2lEeThCQURzQUFDQURJQTh0QUFOcUlRTWdBaUFQTFFBQ2FpRUNEQUVMQ3dKQUlBTWdFazhOQUNBRElBWWdDaUFDZENBSGRrRUNkR29pQXkwQUFEb0FBQ0FETFFBRFFRRkdCRUFnQWlBRExRQUNhaUVDREFFTElBSkJIMHNOQUVFZ0lBSWdBeTBBQW1vaUFpQUNRU0JQR3lFQ0MwRnNRV3dnQ3lBRUtBSjRJQVFvQW54SEd5QUNRU0JIR3lFRERBc0xBQXNBQ3lBRUtBSTBJZ0lnSlNBT2Ewc05DaUFPUlFSQVFRQWhDU0FDRFFJTURnc2dEaUFiTFFBQUlBSVFBeG9nQWlFSkRBd0xJQlVnSlNBT2Ewc05DU0FPRFFGQkFDRUpJQlZGRFF3TFFiWi9JUWtNRVFzZ0RpQWJJQlVRQWhvZ0ZTRUpEQW9MSUJ3Z0d3Si9Ba0FDUUFKQUlBbEJBblpCQTNGQkFXc09Bd0VBQWdBTElBbEJBM1loQTBFQkRBSUxJQnN2QUFCQkJIWWhBMEVDREFFTElCVkJCRWtORGlBQ0x3QURJQUl0QUFWQkVIUnlJZ0pCajRDQUFVc05EaUFDUVFSMklRTkJBd3NpQW1vdEFBQWdBMEVnYWhBRElRa2dCU0FETmdLQTZ3RWdCU0FKTmdMdzZnRWdBa0VCYWlFSkRBVUxJQlVDZndKQUFrQUNRQ0FKUVFKMlFRTnhRUUZyRGdNQkFBSUFDeUFKUVFOMklRTkJBUXdDQ3lBYkx3QUFRUVIySVFOQkFnd0JDeUFDTHdBRElBSXRBQVZCRUhSeVFRUjJJUU5CQXdzaUFpQURhaUlKUVNCcVNRUkFJQWtnRlVzTkRTQWNJQUlnRzJvZ0F4QUNJUUlnQlNBRE5nS0E2d0VnQlNBQ05nTHc2Z0VnQWlBRGFpSUNRZ0EzQUJnZ0FrSUFOd0FRSUFKQ0FEY0FDQ0FDUWdBM0FBQU1CUXNnQlNBRE5nS0E2d0VnQlNBQ0lCdHFOZ0x3NmdFTUJBc2dCMFVFUUNBZUlBOGdDQ0FVRUJRaUFrR0lmMHNnQWlBSVQzSU5EQ0FjSUFzZ0FpQVBhaUFJSUFKcklCNFFGU0VEREFNTElBdEZJQWhGY2cwTElBdEJDSFlpQXlBSUlBdEpCSDhnQ0VFRWRDQUxiZ1ZCRHd0QkdHd2lBa0dNQ0dvb0FnQnNJQUpCaUFocUtBSUFhaUlHUVFOMklBWnFJQUpCZ0FocUtBSUFJQUpCaEFocUtBSUFJQU5zYWtrRVFDTUFRUkJySWhBa0FDQWVLQUlBSVFNZ0ZFSHdCR3BCQUVIc0FCQURJUVpCVkNFQ0FrQWdBMEgvQVhFaURFRU1TdzBBQWtBZ0ZFSGNDV29nQmlBUVFRaHFJQkJCREdvZ0R5QUlJQlJCM0F0cUloY1FDeUlTUVloL1N3MEFJQkFvQWd3aUJpQU1TdzBCSUJSQnFBVnFJUTBnRkVHa0JXb2hOaUFlUVFScUlSRWdBMEdBZ0lCNGNTRTNJQVpCQVdvaUV5RUNJQVloQXdOQUlBSWlCMEVCYXlFQ0lBTWlDa0VCYXlFRElCUWdDa0VDZEdvb0F2QUVSUTBBQzBFQklBY2dCMEVCVFJzaEZrRUFJUWRCQVNFQ0EwQWdBaUFXUndSQUlCUWdBa0VDZENJRGFpZ0M4QVFoR0NBRElBMXFJQWMyQWdBZ0FrRUJhaUVDSUFjZ0dHb2hCd3dCQ3dzZ0RTQUhOZ0lBUVFBaEFpQVFLQUlJSVFNRFFDQUNJQU5IQkVBZ0RTQUNJQlJxUWR3SmFpMEFBQ0lZUVFKMGFpSVpJQmtvQWdBaUdVRUJhallDQUNBVUlCbEJBWFJxSWhrZ0dEb0EzUVVnR1NBQ09nRGNCU0FDUVFGcUlRSU1BUXNMUVFBaEF5QU5RUUEyQWdBZ0RDQUdRWDl6YWlFR1FRRWhBZ05BSUFJZ0ZrY0VRQ0FVSUFKQkFuUnFJZzBnQXpZQ0FDQU5LQUx3QkNBQ0lBWnFkQ0FEYWlFRElBSkJBV29oQWd3QkN3c2dEQ0FUSUFwcklnWnJRUUZxSVFvZ0JpRURBMEFnQXlBS1NRUkFJQlFnQTBFMGJHb2hEVUVCSVFJRFFDQUNJQlpIQkVBZ0RTQUNRUUowSWhocUlCUWdHR29vQWdBZ0EzWTJBZ0FnQWtFQmFpRUNEQUVMQ3lBRFFRRnFJUU1NQVFzTElCY2dGRUUwRUFJaE9DQVVRWkFNYWlFNUlCTWdER3NoT2lBVVFkd0ZhaUVYUVFBaENnTkFBa0FDUUNBSElBcEhCRUJCQVNBTUlCTWdGeUFLUVFGMGFpSUNMUUFCSWcxcklnTnJJaGgwSVJrZ0FpMEFBQ0VXSURnZ0RVRUNkR29pSHlnQ0FDRUNJQVlnR0UwRVFDQTJRUUVnQXlBNmFpSU5JQTFCQVV3YklpQkJBblFpSkdvb0FnQWhEU0E1SUJRZ0EwRTBiR3BCTkJBQ0lTRWdEVUVCZENFbUlCRWdBa0VDZEdvaEl5QWdRUUZORFFJZ0EwRVFkRUdBZ1B3SGNTQVdja0dBZ0lBSWNpRWdJQ0VnSkdvb0FnQWhKRUVBSVFJRFFDQUNJQ1JHRFFNZ0l5QUNRUUowYWlBZ05nRUFJQUpCQVdvaEFnd0FDd0FMSUFJZ0FpQVphaUlOSUFJZ0RVc2JJUTBnQTBFUWRFR0FnUHdIY1NBV2NrR0FnSUFJY2lFREEwQWdBaUFOUmcwRElCRWdBa0VDZEdvZ0F6WUJBQ0FDUVFGcUlRSU1BQXNBQ3lBZUlBeEJFSFFnTjNJZ0RISkJnQUp5TmdJQURBTUxJQWNnRFdzaEpDQVhJQ1pxSVNaQkFDRU5BMEFnRFNBa1JnMEJRUUVnR0NBVElDWWdEVUVCZEdvaUp5MEFBU0lDYXlJN2EzUWlQQ0FoSUFKQkFuUnFJaUFvQWdBaUFtb2hQU0FESUR0cVFSQjBRWUNBL0FkeElDY3RBQUJCQ0hSeUlCWnlRWUNBZ0JCeUlTY0RRQ0FqSUFKQkFuUnFJQ2MyQVFBZ0FrRUJhaUlDSUQxSkRRQUxJQ0FnSUNnQ0FDQThhallDQUNBTlFRRnFJUTBNQUFzQUN5QWZJQjhvQWdBZ0dXbzJBZ0FnQ2tFQmFpRUtEQUFMQUFzZ0VpRUNDeUFRUVJCcUpBQWdBa0dJZjBzZ0FpQUlUM0lORENBY0lBc2dBaUFQYWlBSUlBSnJJQjRRRmlFRERBTUxJQjRnRHlBSUlCUVFGQ0lDUVloL1N5QUNJQWhQY2cwTElCd2dDeUFDSUE5cUlBZ2dBbXNnSGhBWElRTU1BZ3NnQXdSQUlCd2dDeUFQSUFnZ0FoQVdJUU1NQWdzZ0hDQUxJQThnQ0NBQ0VCY2hBd3dCQ3lBY0lBc2dEeUFJSUFJUUZTRURDeUFEUVloL1N3MElJQVVnQ3pZQ2dPc0JJQVVnSERZQzhPb0JJQVZCQVRZQ2dPb0JJQnBCQWtZRVFDQUZJQjQyQWd3TElBc2dIR29pQWtJQU53QUFJQUpDQURjQUdDQUNRZ0EzQUJBZ0FrSUFOd0FJSUFsQmlIOUxEUW9MSUFrZ0ZVWU5DQ0FWSUFscklRWWdCU2dDbk9zQklRb0NRQ0FKSUJ0cUlnTXRBQUFpRDBVRVFFRUJJUUpCQUNFUFFiaC9JUWtnQmtFQlJnMEJEQXNMQW44Z0EwRUJhaUFQd0NJQ1FRQk9EUUFhSUFKQmYwWUVRQ0FHUVFOSURRc2dBeThBQVVHQS9nRnFJUThnQTBFRGFnd0JDeUFHUVFKSURRb2dBeTBBQVNBUFFRaDBja0dBZ0FKcklROGdBMEVDYWdzaEVrRzRmeUVKSUJKQkFXb2lBaUFWSUJ0cUlnZExEUW9nTENBRklCSXRBQUFpRWtFR2RrRWpRUWtnQWlBSElBSnJRY0FRUWRBUlFmQVNJQVVvQW9UcUFTQUtJQThnRkJBaElnbEJpSDlMRFFnZ0t5QW9JQkpCQkhaQkEzRkJIMEVJSUFJZ0NXb2lBaUFISUFKclFZQUxRWUFNUVlBWElBVW9Bb1RxQVNBRktBS2M2d0VnRHlBVUVDRWlDRUdJZjBzTkNFRnNJUWtnS2lBdElCSkJBblpCQTNGQk5FRUpJQUlnQ0dvaUFpQUhJQUpyUVlBTlFlQU9RWkFaSUFVb0FvVHFBU0FGS0FLYzZ3RWdEeUFVRUNFaUIwR0lmMHNOQ2lBQ0lBZHFJQU5ySWdJaENTQUNRWWgvU3cwS0N5QU9JQTlCQUV4eURRRUxRYnAvSVFrTUNBc2dKU0FPYXlFSklBWWdBbXNoQmlBQ0lBTnFJUWNDUUFKQUFrQWdDa1VFUUNBUFFRbElJQVVwQThqcEFVS0JnSUFJVkhJTkFpQW9LQUlBSWdKQkNHb2hFaUFDS0FJRUlRcEJBQ0VEUVFBaEFnTkFJQU1nQ25aRkJFQWdBaUFTSUFOQkEzUnFMUUFDUVJaTGFpRUNJQU5CQVdvaEF3d0JDd3NnQlVFQU5nS2M2d0VnQWtFSUlBcHJkRUVVVHcwQkRBTUxJQVZCQURZQ25Pc0JDeUFFSUFVb0F2RHFBU0lETmdMY0FTQUpJQTVxSVJZZ0F5QUZLQUtBNndGcUlSY0NRQ0FQUlFSQUlBNGhCd3dCQ3lBRktBSzQ2UUVoR2lBRktBSzA2UUVoR0NBRktBS3c2UUVoRWlBRlFRRTJBb1RxQVVFQUlRTURRQ0FEUVFOSEJFQWdCQ0FEUVFKMElnSnFJQUlnQldwQnJOQUJhaWdDQURZQ1pDQURRUUZxSVFNTUFRc0xRV3doQ1NBRVFUaHFJZ0lnQnlBR0VBMUJpSDlMRFFOQkNDQVBJQTlCQ0U0YklSOGdOQ0FDSUFVb0FnQVFIaUF6SUFJZ0JTZ0NDQkFlSURJZ0FpQUZLQUlFRUI0Z0RpQVNheUVaUVFBaENBTkFJQVJCT0dvUUQwRURSaUFJSUI5T2NrVUVRQ0FFS0FKUUlBUW9Ba3hCQTNScUtRSUFJa0NuSWdkQkVIWWlFVUgvQVhFaEN5QUVLQUpnSUFRb0FseEJBM1JxS1FJQUlrR25JZ3hCRUhZaUlVSC9BWEVoRUNBRUtBSllJQVFvQWxSQkEzUnFLUUlBSWtKQ0lJaW5JUVlnUVVJZ2lDQkFRaUNJcHlFREFrQWdRa0lRaUtjaUNrSC9BWEVpQWtFQ1R3UkFBa0FnQWtFWlNTQS9Rb0dBZ0JCVWNrVUVRQ0FFUVNBZ0JDZ0NQQ0lLYXlJTklBSWdBaUFOU3hzaUV5QUthallDUENBR0lBUW9BamdnQ25SQkFDQVRhM1lnQWlBVGF5SVRkR29oQ2lBRVFUaHFFQThhSUFJZ0RVME5BU0FFSUFRb0Fqd2lBaUFUYWpZQ1BDQUVLQUk0SUFKMFFRQWdFMnQySUFwcUlRb01BUXNnQkNBQ0lBUW9BandpRFdvMkFqd2dCQ2dDT0NBTmRFRUFJQXByZGlBR2FpRUtJQVJCT0dvUUR4b0xJQVFwQW1RaFJDQUVJQW8yQW1RZ0JDQkVOd0pvREFFTEFrQWdBa1VFUUNBREJFQWdCQ2dDWkNFS0RBTUxJQVFvQW1naENnd0JDeUFFSUFRb0Fqd2lBa0VCYWpZQ1BBSi9JQVlnQTBWcUlBUW9BamdnQW5SQkgzWnFJZ0pCQTBZRVFDQUVLQUprUVFGckRBRUxJQUpCQW5RZ0JHb29BbVFMSWdaRklBWnFJUW9nQWtFQlJ3UkFJQVFnQkNnQ2FEWUNiQXNMSUFRZ0JDZ0NaRFlDYUNBRUlBbzJBbVFMcHlFQ0lFRkNnSUQ4QjROUVJRUkFJQVFnQkNnQ1BDSUdJQkJxTmdJOElBUW9BamdnQm5SQkFDQWhhM1lnQW1vaEFnc2dDeUFRYWtFVVR3UkFJQVJCT0dvUUR4b0xJRUJDZ0lEOEI0TlFSUVJBSUFRZ0JDZ0NQQ0lHSUF0cU5nSThJQVFvQWpnZ0JuUkJBQ0FSYTNZZ0Eyb2hBd3NnQkVFNGFoQVBHaUFFSUFRb0FqZ2lCa0VBSUFkQkdIWWlDeUFFS0FJOGFpSVFhM1lnQzBFQ2RFR2dIV29vQWdCeElBZEIvLzhEY1dvMkFrd2dCQ0FRSUF4QkdIWWlCMm9pQ3pZQ1BDQUVJQWRCQW5SQm9CMXFLQUlBSUFaQkFDQUxhM1p4SUF4Qi8vOERjV28yQWx3Z0JFRTRhaEFQR2lBRUlFS25JZ1pCR0hZaUJ5QUVLQUk4YWlJTE5nSThJQVFnQjBFQ2RFR2dIV29vQWdBZ0JDZ0NPRUVBSUF0cmRuRWdCa0gvL3dOeGFqWUNWQ0FFUWZBQWFpQUlRUXhzYWlJR0lBbzJBZ2dnQmlBQ05nSUVJQVlnQXpZQ0FDQUlRUUZxSVFnZ0F5QVphaUFDYWlFWkRBRUxDeUFJSUI5SURRTWdGa0VnYXlFaElBNGhCd05BSUFSQk9Hb1FEMEVEUmlBSUlBOU9ja1VFUUNBRUtBSlFJQVFvQWt4QkEzUnFLUUlBSWtDbklnWkJFSFlpSTBIL0FYRWhDaUFFS0FKZ0lBUW9BbHhCQTNScUtRSUFJa0duSWcxQkVIWWlJRUgvQVhFaEV5QUVLQUpZSUFRb0FsUkJBM1JxS1FJQUlrSkNJSWluSVFNZ1FVSWdpQ0JBUWlDSXB5RUxBa0FnUWtJUWlLY2lERUgvQVhFaUFrRUNUd1JBQWtBZ0FrRVpTU0EvUW9HQWdCQlVja1VFUUNBRVFTQWdCQ2dDUENJTWF5SVJJQUlnQWlBUlN4c2lFQ0FNYWpZQ1BDQURJQVFvQWpnZ0RIUkJBQ0FRYTNZZ0FpQVFheUlNZEdvaEVDQUVRVGhxRUE4YUlBSWdFVTBOQVNBRUlBUW9BandpQWlBTWFqWUNQQ0FFS0FJNElBSjBRUUFnREd0MklCQnFJUkFNQVFzZ0JDQUNJQVFvQWp3aUVHbzJBandnQkNnQ09DQVFkRUVBSUF4cmRpQURhaUVRSUFSQk9Hb1FEeG9MSUFRcEFtUWhSQ0FFSUJBMkFtUWdCQ0JFTndKb0RBRUxBa0FnQWtVRVFDQUxCRUFnQkNnQ1pDRVFEQU1MSUFRb0FtZ2hFQXdCQ3lBRUlBUW9BandpQWtFQmFqWUNQQUovSUFNZ0MwVnFJQVFvQWpnZ0FuUkJIM1pxSWdKQkEwWUVRQ0FFS0FKa1FRRnJEQUVMSUFKQkFuUWdCR29vQW1RTElnTkZJQU5xSVJBZ0FrRUJSd1JBSUFRZ0JDZ0NhRFlDYkFzTElBUWdCQ2dDWkRZQ2FDQUVJQkEyQW1RTHB5RU1JRUZDZ0lEOEI0TlFSUVJBSUFRZ0JDZ0NQQ0lDSUJOcU5nSThJQVFvQWpnZ0FuUkJBQ0FnYTNZZ0RHb2hEQXNnQ2lBVGFrRVVUd1JBSUFSQk9Hb1FEeG9MSUVCQ2dJRDhCNE5RUlFSQUlBUWdCQ2dDUENJQ0lBcHFOZ0k4SUFRb0FqZ2dBblJCQUNBamEzWWdDMm9oQ3dzZ0JFRTRhaEFQR2lBRUlBUW9BamdpQWtFQUlBWkJHSFlpQXlBRUtBSThhaUlLYTNZZ0EwRUNkRUdnSFdvb0FnQnhJQVpCLy84RGNXbzJBa3dnQkNBS0lBMUJHSFlpQTJvaUJqWUNQQ0FFSUFOQkFuUkJvQjFxS0FJQUlBSkJBQ0FHYTNaeElBMUIvLzhEY1dvMkFsd2dCRUU0YWhBUEdpQUVJRUtuSWdKQkdIWWlBeUFFS0FJOGFpSUdOZ0k4SUFRZ0EwRUNkRUdnSFdvb0FnQWdCQ2dDT0VFQUlBWnJkbkVnQWtILy93TnhhallDVkFKQUFrQUNRQ0FFS0FMY0FTSURJQVJCOEFCcUlBaEJCM0ZCREd4cUloTW9BZ0FpRVdvaUl5QVhTdzBBSUFjZ0V5Z0NCQ0lOSUJGcUlncHFJQ0ZMRFFBZ0NrRWdhaUFXSUFkclRRMEJDeUFFSUJNb0FnZzJBaGdnQkNBVEtRSUFOd01RSUFjZ0ZpQUVRUkJxSUFSQjNBRnFJQmNnRWlBWUlCb1FIeUVLREFFTElBY2dFV29oQWlBVEtBSUlJUVlnQnlBREtRQUFOd0FBSUFjZ0F5a0FDRGNBQ0FKQUlCRkJFVWtOQUNBSElBTXBBQkEzQUJBZ0J5QURLUUFZTndBWUlCRkJFR3RCRVVnTkFDQURRUkJxSVFNZ0IwRWdhaUVSQTBBZ0VTQURLUUFRTndBQUlCRWdBeWtBR0RjQUNDQVJJQU1wQUNBM0FCQWdFU0FES1FBb053QVlJQU5CSUdvaEF5QVJRU0JxSWhFZ0Fra05BQXNMSUFJZ0Jtc2hBeUFFSUNNMkF0d0JJQUlnRW1zZ0Jra0VRQ0FHSUFJZ0dHdExEUWNnR2lBYUlBTWdFbXNpQTJvaUVTQU5hazhFUUNBQ0lCRWdEUkFLR2d3Q0N5QURJQTFxSVEwZ0FpQVJRUUFnQTJzUUNpQURheUVDSUJJaEF3c2dCa0VRVHdSQUlBSWdBeWtBQURjQUFDQUNJQU1wQUFnM0FBZ2dEVUVSU0EwQklBSWdEV29oQmlBQ1FSQnFJUUlEUUNBQ0lBTXBBQkEzQUFBZ0FpQURLUUFZTndBSUlBSWdBeWtBSURjQUVDQUNJQU1wQUNnM0FCZ2dBMEVnYWlFRElBSkJJR29pQWlBR1NRMEFDd3dCQ3dKQUlBWkJCMDBFUUNBQ0lBTXRBQUE2QUFBZ0FpQURMUUFCT2dBQklBSWdBeTBBQWpvQUFpQUNJQU10QUFNNkFBTWdBaUFESUFaQkFuUWlCa0hBSG1vb0FnQnFJZ01vQUFBMkFBUWdBeUFHUWVBZWFpZ0NBR3NoQXd3QkN5QUNJQU1wQUFBM0FBQUxJQTFCQ1VrTkFDQUNJQTFxSVJFZ0FrRUlhaUlHSUFOQkNHb2lBMnRCRDB3RVFBTkFJQVlnQXlrQUFEY0FBQ0FEUVFocUlRTWdCa0VJYWlJR0lCRkpEUUFNQWdzQUN5QUdJQU1wQUFBM0FBQWdCaUFES1FBSU53QUlJQTFCR1VnTkFDQUNRUmhxSVFJRFFDQUNJQU1wQUJBM0FBQWdBaUFES1FBWU53QUlJQUlnQXlrQUlEY0FFQ0FDSUFNcEFDZzNBQmdnQTBFZ2FpRURJQUpCSUdvaUFpQVJTUTBBQ3dzZ0NrR0lmMHNFUUNBS0lRa01CZ1VnRXlBUU5nSUlJQk1nRERZQ0JDQVRJQXMyQWdBZ0NFRUJhaUVJSUFjZ0Ntb2hCeUFMSUJscUlBeHFJUmtNQWdzQUN3c2dDQ0FQU0EwRElBZ2dIMnNoQmdOQUFrQWdCaUFQVGdSQVFRQWhBd05BSUFOQkEwWU5BaUFGSUFOQkFuUWlBbXBCck5BQmFpQUNJQVJxS0FKa05nSUFJQU5CQVdvaEF3d0FDd0FMQWtBQ1FBSkFJQVFvQXR3QklnTWdCRUh3QUdvZ0JrRUhjVUVNYkdvaUNDZ0NBQ0lNYWlJUUlCZExEUUFnQnlBSUtBSUVJZ3NnREdvaUNtb2dJVXNOQUNBS1FTQnFJQllnQjJ0TkRRRUxJQVFnQ0NnQ0NEWUNLQ0FFSUFncEFnQTNBeUFnQnlBV0lBUkJJR29nQkVIY0FXb2dGeUFTSUJnZ0doQWZJUW9NQVFzZ0J5QU1haUVDSUFnb0FnZ2hDQ0FISUFNcEFBQTNBQUFnQnlBREtRQUlOd0FJQWtBZ0RFRVJTUTBBSUFjZ0F5a0FFRGNBRUNBSElBTXBBQmczQUJnZ0RFRVFhMEVSU0EwQUlBTkJFR29oQXlBSFFTQnFJUXdEUUNBTUlBTXBBQkEzQUFBZ0RDQURLUUFZTndBSUlBd2dBeWtBSURjQUVDQU1JQU1wQUNnM0FCZ2dBMEVnYWlFRElBeEJJR29pRENBQ1NRMEFDd3NnQWlBSWF5RURJQVFnRURZQzNBRWdBaUFTYXlBSVNRUkFJQWdnQWlBWWEwc05CeUFhSUJvZ0F5QVNheUlEYWlJTUlBdHFUd1JBSUFJZ0RDQUxFQW9hREFJTElBTWdDMm9oQ3lBQ0lBeEJBQ0FEYXhBS0lBTnJJUUlnRWlFREN5QUlRUkJQQkVBZ0FpQURLUUFBTndBQUlBSWdBeWtBQ0RjQUNDQUxRUkZJRFFFZ0FpQUxhaUVJSUFKQkVHb2hBZ05BSUFJZ0F5a0FFRGNBQUNBQ0lBTXBBQmczQUFnZ0FpQURLUUFnTndBUUlBSWdBeWtBS0RjQUdDQURRU0JxSVFNZ0FrRWdhaUlDSUFoSkRRQUxEQUVMQWtBZ0NFRUhUUVJBSUFJZ0F5MEFBRG9BQUNBQ0lBTXRBQUU2QUFFZ0FpQURMUUFDT2dBQ0lBSWdBeTBBQXpvQUF5QUNJQU1nQ0VFQ2RDSUlRY0FlYWlnQ0FHb2lBeWdBQURZQUJDQURJQWhCNEI1cUtBSUFheUVEREFFTElBSWdBeWtBQURjQUFBc2dDMEVKU1EwQUlBSWdDMm9oRENBQ1FRaHFJZ2dnQTBFSWFpSURhMEVQVEFSQUEwQWdDQ0FES1FBQU53QUFJQU5CQ0dvaEF5QUlRUWhxSWdnZ0RFa05BQXdDQ3dBTElBZ2dBeWtBQURjQUFDQUlJQU1wQUFnM0FBZ2dDMEVaU0EwQUlBSkJHR29oQWdOQUlBSWdBeWtBRURjQUFDQUNJQU1wQUJnM0FBZ2dBaUFES1FBZ053QVFJQUlnQXlrQUtEY0FHQ0FEUVNCcUlRTWdBa0VnYWlJQ0lBeEpEUUFMQ3lBS1FZaC9Td1JBSUFvaENRd0dCU0FHUVFGcUlRWWdCeUFLYWlFSERBSUxBQXNMSUFRb0F0d0JJUU1MUWJwL0lRa2dGeUFEYXlJQ0lCWWdCMnRMRFFJZ0J3Ui9JQWNnQXlBQ0VBSWdBbW9GUVFBTElBNXJJUWtNQWdzZ0JVRUFOZ0tjNndFTElBUWdCU2dDOE9vQklnTTJBdHdCSUFrZ0Rtb2hEQ0FESUFVb0FvRHJBV29oRUFKQUlBOUZCRUFnRGlFR0RBRUxJQVVvQXJqcEFTRU5JQVVvQXJUcEFTRVRJQVVvQXJEcEFTRVNJQVZCQVRZQ2hPb0JRUUFoQXdOQUlBTkJBMGNFUUNBRUlBTkJBblFpQW1vZ0FpQUZha0dzMEFGcUtBSUFOZ0tjQVNBRFFRRnFJUU1NQVFzTFFXd2hDU0FFUWZBQWFpSUNJQWNnQmhBTlFZaC9TdzBCSURFZ0FpQUZLQUlBRUI0Z01DQUNJQVVvQWdnUUhpQXZJQUlnQlNnQ0JCQWVJQXhCSUdzaEdDQU9JUVlEUUNBRUtBS0lBU0FFS0FLRUFVRURkR29wQWdBaVFLY2lDa0VRZGlJWlFmOEJjU0VMSUFRb0FwZ0JJQVFvQXBRQlFRTjBhaWtDQUNKQnB5SVdRUkIySWg5Qi93RnhJUm9nQkNnQ2tBRWdCQ2dDakFGQkEzUnFLUUlBSWtKQ0lJaW5JUWNnUVVJZ2lDQkFRaUNJcHlFREFrQWdRa0lRaUtjaUNFSC9BWEVpQWtFQ1R3UkFBa0FnQWtFWlNTQS9Rb0dBZ0JCVWNrVUVRQ0FFUVNBZ0JDZ0NkQ0lJYXlJUklBSWdBaUFSU3hzaUZ5QUlhallDZENBSElBUW9BbkFnQ0hSQkFDQVhhM1lnQWlBWGF5SVhkR29oQ0NBRVFmQUFhaEFQR2lBQ0lCRk5EUUVnQkNBRUtBSjBJZ0lnRjJvMkFuUWdCQ2dDY0NBQ2RFRUFJQmRyZGlBSWFpRUlEQUVMSUFRZ0FpQUVLQUowSWhGcU5nSjBJQVFvQW5BZ0VYUkJBQ0FJYTNZZ0Iyb2hDQ0FFUWZBQWFoQVBHZ3NnQkNrQ25BRWhSQ0FFSUFnMkFwd0JJQVFnUkRjQ29BRU1BUXNDUUNBQ1JRUkFJQU1FUUNBRUtBS2NBU0VJREFNTElBUW9BcUFCSVFnTUFRc2dCQ0FFS0FKMElnSkJBV28yQW5RQ2Z5QUhJQU5GYWlBRUtBSndJQUowUVI5MmFpSUNRUU5HQkVBZ0JDZ0NuQUZCQVdzTUFRc2dBa0VDZENBRWFpZ0NuQUVMSWdkRklBZHFJUWdnQWtFQlJ3UkFJQVFnQkNnQ29BRTJBcVFCQ3dzZ0JDQUVLQUtjQVRZQ29BRWdCQ0FJTmdLY0FRdW5JUUlnUVVLQWdQd0hnMUJGQkVBZ0JDQUVLQUowSWdjZ0dtbzJBblFnQkNnQ2NDQUhkRUVBSUI5cmRpQUNhaUVDQ3lBTElCcHFRUlJQQkVBZ0JFSHdBR29RRHhvTElFQkNnSUQ4QjROUVJRUkFJQVFnQkNnQ2RDSUhJQXRxTmdKMElBUW9BbkFnQjNSQkFDQVphM1lnQTJvaEF3c2dCRUh3QUdvUUR4b2dCQ0FFS0FKd0lnZEJBQ0FLUVJoMklnc2dCQ2dDZEdvaUdtdDJJQXRCQW5SQm9CMXFLQUlBY1NBS1FmLy9BM0ZxTmdLRUFTQUVJQm9nRmtFWWRpSUthaUlMTmdKMElBUWdDa0VDZEVHZ0hXb29BZ0FnQjBFQUlBdHJkbkVnRmtILy93TnhhallDbEFFZ0JFSHdBR29RRHhvZ0JDQkNweUlIUVJoMklnb2dCQ2dDZEdvaUN6WUNkQ0FFSUFwQkFuUkJvQjFxS0FJQUlBUW9BbkJCQUNBTGEzWnhJQWRCLy84RGNXbzJBb3dCSUFRZ0F6WUNPQ0FFSUFJMkFqd2dCQ0FJTmdKQUFrQUNRQUpBSUFRb0F0d0JJZ3NnQTJvaUZpQVFTdzBBSUFZZ0FpQURhaUlLYWlBWVN3MEFJQXBCSUdvZ0RDQUdhMDBOQVFzZ0JDQUVRVUJyS0FJQU5nSUlJQVFnQkNrRE9EY0RBQ0FHSUF3Z0JDQUVRZHdCYWlBUUlCSWdFeUFORUI4aENnd0JDeUFESUFacUlRY2dCaUFMS1FBQU53QUFJQVlnQ3lrQUNEY0FDQUpBSUFOQkVVa05BQ0FHSUFzcEFCQTNBQkFnQmlBTEtRQVlOd0FZSUFOQkVHdEJFVWdOQUNBTFFSQnFJUU1nQmtFZ2FpRUxBMEFnQ3lBREtRQVFOd0FBSUFzZ0F5a0FHRGNBQ0NBTElBTXBBQ0EzQUJBZ0N5QURLUUFvTndBWUlBTkJJR29oQXlBTFFTQnFJZ3NnQjBrTkFBc0xJQWNnQ0dzaEF5QUVJQlkyQXR3QklBY2dFbXNnQ0VrRVFDQUlJQWNnRTJ0TERRUWdEU0FOSUFNZ0Vtc2lBMm9pQ3lBQ2FrOEVRQ0FISUFzZ0FoQUtHZ3dDQ3lBSElBdEJBQ0FEYXhBS0lBUWdBaUFEYWlJQ05nSThJQU5ySVFjZ0VpRURDeUFJUVJCUEJFQWdCeUFES1FBQU53QUFJQWNnQXlrQUNEY0FDQ0FDUVJGSURRRWdBaUFIYWlFSUlBZEJFR29oQWdOQUlBSWdBeWtBRURjQUFDQUNJQU1wQUJnM0FBZ2dBaUFES1FBZ053QVFJQUlnQXlrQUtEY0FHQ0FEUVNCcUlRTWdBa0VnYWlJQ0lBaEpEUUFMREFFTEFrQWdDRUVIVFFSQUlBY2dBeTBBQURvQUFDQUhJQU10QUFFNkFBRWdCeUFETFFBQ09nQUNJQWNnQXkwQUF6b0FBeUFISUFNZ0NFRUNkQ0lJUWNBZWFpZ0NBR29pQXlnQUFEWUFCQ0FESUFoQjRCNXFLQUlBYXlFRERBRUxJQWNnQXlrQUFEY0FBQXNnQWtFSlNRMEFJQUlnQjJvaEN5QUhRUWhxSWdnZ0EwRUlhaUlEYTBFUFRBUkFBMEFnQ0NBREtRQUFOd0FBSUFOQkNHb2hBeUFJUVFocUlnZ2dDMGtOQUF3Q0N3QUxJQWdnQXlrQUFEY0FBQ0FJSUFNcEFBZzNBQWdnQWtFWlNBMEFJQWRCR0dvaEFnTkFJQUlnQXlrQUVEY0FBQ0FDSUFNcEFCZzNBQWdnQWlBREtRQWdOd0FRSUFJZ0F5a0FLRGNBR0NBRFFTQnFJUU1nQWtFZ2FpSUNJQXRKRFFBTEN5QUtRWWgvU3dSQUlBb2hDUXdEQ3lBR0lBcHFJUVlnQkVId0FHb1FEeUVESUE5QkFXc2lEdzBBQzBFQUlRSWdBMEVDU1EwQkEwQWdBa0VEUndSQUlBVWdBa0VDZENJRGFrR3MwQUZxSUFNZ0JHb29BcHdCTmdJQUlBSkJBV29oQWd3QkN3c2dCQ2dDM0FFaEF3dEJ1bjhoQ1NBUUlBTnJJZ0lnRENBR2Ewc05BQ0FHQkg4Z0JpQURJQUlRQWlBQ2FnVkJBQXNnRG1zaENRc2dDVUdJZjBzTkJnc0NRQ0FGS0FMczZnRkZEUUFnQlNBRktRT0k2Z0VnQ2ExOE53T0k2Z0VDUUNBRktBTFE2Z0VpQWlBSmFpSUlRUjlOQkVBZ0RrVU5BU0FDSUNKcUlBNGdDUkFDR2lBRktBTFE2Z0VnQ1dvaENBd0JDeUFPSVFNZ0FnUkFJQUlnSW1vZ0EwRWdJQUpyRUFJYUlBVW9BdERxQVNFQ0lBVkJBRFlDME9vQklBVWdCU2tEa09vQklBVXBBTERxQVVMUDF0Tyswc2VyMlVKK2ZFSWZpVUtIbGErdm1MYmVtNTUvZmpjRGtPb0JJQVVnQlNrRG1Pb0JJQVVwQUxqcUFVTFAxdE8rMHNlcjJVSitmRUlmaVVLSGxhK3ZtTGJlbTU1L2ZqY0RtT29CSUFVZ0JTa0RvT29CSUFVcEFNRHFBVUxQMXRPKzBzZXIyVUorZkVJZmlVS0hsYSt2bUxiZW01NS9mamNEb09vQklBVWdCU2tEcU9vQklBVXBBTWpxQVVMUDF0Tyswc2VyMlVKK2ZFSWZpVUtIbGErdm1MYmVtNTUvZmpjRHFPb0JJQU1nQW10QklHb2hBd3NnQ1NBT2FpSUNJQU5CSUdwUEJFQWdBa0VnYXlFR0lBVXBBNmpxQVNFL0lBVXBBNkRxQVNGQUlBVXBBNWpxQVNGQklBVXBBNURxQVNGQ0EwQWdBeWtBR0VMUDF0Tyswc2VyMlVKK0lEOThRaCtKUW9lVnI2K1l0dDZibm45K0lUOGdBeWtBRUVMUDF0Tyswc2VyMlVKK0lFQjhRaCtKUW9lVnI2K1l0dDZibm45K0lVQWdBeWtBQ0VMUDF0Tyswc2VyMlVKK0lFRjhRaCtKUW9lVnI2K1l0dDZibm45K0lVRWdBeWtBQUVMUDF0Tyswc2VyMlVKK0lFSjhRaCtKUW9lVnI2K1l0dDZibm45K0lVSWdBMEVnYWlJRElBWk5EUUFMSUFVZ1B6Y0RxT29CSUFVZ1FEY0RvT29CSUFVZ1FUY0RtT29CSUFVZ1FqY0RrT29CQ3lBQ0lBTk5EUUVnSWlBRElBSWdBMnNpQ0JBQ0dnc2dCU0FJTmdMUTZnRUxJRFVnRldzaEF5QVZJQnRxSVFJZ0NTQU9haUVPSUFRb0FqQkZEUUFMSUNrcEF3QWlQMEovVVNBL0lBNGdIV3VzVVhKRkJFQkJiQ0VKREFZTElBVW9BdURwQVFSQVFXb2hDU0FEUVFSSkRRWWdCU2dDNk9vQlJRUkFJQ0lnQlNnQzBPb0JhaUVLQW40Z0JTa0RpT29CSWo5Q0lGb0VRQ0FGS1FPWTZnRWlRRUlIaVNBRktRT1E2Z0VpUVVJQmlYd2dCU2tEb09vQklrSkNESWw4SUFVcEE2anFBU0pEUWhLSmZDQkJRcy9XMDc3U3g2dlpRbjVDSDRsQ2g1V3ZyNWkyM3B1ZWYzNkZRb2VWcjYrWXR0NmJubjkrUXAyanRlcURzWTJLK2dCOUlFQkN6OWJUdnRMSHE5bENma0lmaVVLSGxhK3ZtTGJlbTU1L2ZvVkNoNVd2cjVpMjNwdWVmMzVDbmFPMTZvT3hqWXI2QUgwZ1FrTFAxdE8rMHNlcjJVSitRaCtKUW9lVnI2K1l0dDZibm45K2hVS0hsYSt2bUxiZW01NS9ma0tkbzdYcWc3R05pdm9BZlNCRFFzL1cwNzdTeDZ2WlFuNUNINGxDaDVXdnI1aTIzcHVlZjM2RlFvZVZyNitZdHQ2Ym5uOStRcDJqdGVxRHNZMksrZ0I5REFFTElBVXBBNkRxQVVMRno5bXk4ZVc2NmlkOEN5QS9mQ0UvSUNJaEJnTkFJQW9nQmtFSWFpSUhUd1JBSUFZcEFBQkN6OWJUdnRMSHE5bENma0lmaVVLSGxhK3ZtTGJlbTU1L2ZpQS9oVUliaVVLSGxhK3ZtTGJlbTU1L2ZrS2RvN1hxZzdHTml2b0FmU0UvSUFjaEJnd0JDd3NDUUNBS0lBWkJCR29pQ0VrRVFDQUdJUWdNQVFzZ0JqVUFBRUtIbGErdm1MYmVtNTUvZmlBL2hVSVhpVUxQMXRPKzBzZXIyVUorUXZuejNmR1o5cG1yRm53aFB3c0RRQ0FJSUFwSkJFQWdDREVBQUVMRno5bXk4ZVc2NmlkK0lEK0ZRZ3VKUW9lVnI2K1l0dDZibm45K0lUOGdDRUVCYWlFSURBRUxDeUFDS0FBQUlEOUNJWWdnUDRWQ3o5YlR2dExIcTlsQ2ZpSS9RaDJJSUQrRlF2bnozZkdaOXBtckZuNGlQMElnaUNBL2hhZEhEUWNMSUFOQkJHc2hBeUFDUVFScUlRSUxJQTRnSFdzaUNVR0pmMDhOQkNBQklBbHJJUUVnQ1NBZGFpRWRRUUVoUGd3QkN3dEJ1SDhoQnlBRERRUWdIU0FBYXlFSERBUUxRV3doQ1F3QkMwRzRmeUVKQzBHNGZ5RUhJQWxCZGtZZ1BuRU5BUXNnQ1NFSEN5Z0NBQTBBSUFWQi9Pb0JhaWdDQUNFQklBVkIrT29CYWlnQ0FDRUFJQVVRR0NBRktBS3c2d0VnQUNBQkVCTWdCVUVBTmdLdzZ3RWdCU2dDcE9zQklnSUVRQUpBQWtBQ1FBSkFJQUlvQWdBaUF3UkFJQUJGRFFJZ0FTQURJQUFSQWdBTUFRc2dBRVVOQWdzZ0FTQUNJQUFSQWdBTUFnc2dBeEFHQ3lBQ0VBWUxJQVZCQURZQ3BPc0JDeUFBQkVBZ0FTQUZJQUFSQWdBTUFRc2dCUkFHQ3lBRVFlQUJhaVFBSUFjTEM2Z1ZDUUJCaUFnTERRRUFBQUFCQUFBQUFnQUFBQUlBUWFBSUM3TUdBUUFBQUFFQUFBQUNBQUFBQWdBQUFDWUFBQUNDQUFBQUlRVUFBRW9BQUFCbkNBQUFKZ0FBQU1BQkFBQ0FBQUFBU1FVQUFFb0FBQUMrQ0FBQUtRQUFBQ3dDQUFDQUFBQUFTUVVBQUVvQUFBQytDQUFBTHdBQUFNb0NBQUNBQUFBQWlnVUFBRW9BQUFDRUNRQUFOUUFBQUhNREFBQ0FBQUFBblFVQUFFb0FBQUNnQ1FBQVBRQUFBSUVEQUFDQUFBQUE2d1VBQUVzQUFBQStDZ0FBUkFBQUFKNERBQUNBQUFBQVRRWUFBRXNBQUFDcUNnQUFTd0FBQUxNREFBQ0FBQUFBd1FZQUFFMEFBQUFmRFFBQVRRQUFBRk1FQUFDQUFBQUFJd2dBQUZFQUFBQ21Ed0FBVkFBQUFKa0VBQUNBQUFBQVN3a0FBRmNBQUFDeEVnQUFXQUFBQU5vRUFBQ0FBQUFBYndrQUFGMEFBQUFqRkFBQVZBQUFBRVVGQUFDQUFBQUFWQW9BQUdvQUFBQ01GQUFBYWdBQUFLOEZBQUNBQUFBQWRna0FBSHdBQUFCT0VBQUFmQUFBQU5JQ0FBQ0FBQUFBWXdjQUFKRUFBQUNRQndBQWtnQUFBQUFBQUFBQkFBQUFBUUFBQUFVQUFBQU5BQUFBSFFBQUFEMEFBQUI5QUFBQS9RQUFBUDBCQUFEOUF3QUEvUWNBQVAwUEFBRDlId0FBL1Q4QUFQMS9BQUQ5L3dBQS9mOEJBUDMvQXdEOS93Y0EvZjhQQVAzL0h3RDkvejhBL2Y5L0FQMy8vd0Q5Ly84Qi9mLy9BLzMvL3dmOS8vOFAvZi8vSC8zLy96LzkvLzkvQUFBQUFBRUFBQUFDQUFBQUF3QUFBQVFBQUFBRkFBQUFCZ0FBQUFjQUFBQUlBQUFBQ1FBQUFBb0FBQUFMQUFBQURBQUFBQTBBQUFBT0FBQUFEd0FBQUJBQUFBQVJBQUFBRWdBQUFCTUFBQUFVQUFBQUZRQUFBQllBQUFBWEFBQUFHQUFBQUJrQUFBQWFBQUFBR3dBQUFCd0FBQUFkQUFBQUhnQUFBQjhBQUFBREFBQUFCQUFBQUFVQUFBQUdBQUFBQndBQUFBZ0FBQUFKQUFBQUNnQUFBQXNBQUFBTUFBQUFEUUFBQUE0QUFBQVBBQUFBRUFBQUFCRUFBQUFTQUFBQUV3QUFBQlFBQUFBVkFBQUFGZ0FBQUJjQUFBQVlBQUFBR1FBQUFCb0FBQUFiQUFBQUhBQUFBQjBBQUFBZUFBQUFId0FBQUNBQUFBQWhBQUFBSWdBQUFDTUFBQUFsQUFBQUp3QUFBQ2tBQUFBckFBQUFMd0FBQURNQUFBQTdBQUFBUXdBQUFGTUFBQUJqQUFBQWd3QUFBQU1CQUFBREFnQUFBd1FBQUFNSUFBQURFQUFBQXlBQUFBTkFBQUFEZ0FBQUF3QUJBRUhnRHd0UkFRQUFBQUVBQUFBQkFBQUFBUUFBQUFJQUFBQUNBQUFBQXdBQUFBTUFBQUFFQUFBQUJBQUFBQVVBQUFBSEFBQUFDQUFBQUFrQUFBQUtBQUFBQ3dBQUFBd0FBQUFOQUFBQURnQUFBQThBQUFBUUFFSEVFQXVMQVFFQUFBQUNBQUFBQXdBQUFBUUFBQUFGQUFBQUJnQUFBQWNBQUFBSUFBQUFDUUFBQUFvQUFBQUxBQUFBREFBQUFBMEFBQUFPQUFBQUR3QUFBQkFBQUFBU0FBQUFGQUFBQUJZQUFBQVlBQUFBSEFBQUFDQUFBQUFvQUFBQU1BQUFBRUFBQUFDQUFBQUFBQUVBQUFBQ0FBQUFCQUFBQUFnQUFBQVFBQUFBSUFBQUFFQUFBQUNBQUFBQUFBRUFRWkFTQytZRUFRQUFBQUVBQUFBQkFBQUFBUUFBQUFJQUFBQUNBQUFBQXdBQUFBTUFBQUFFQUFBQUJnQUFBQWNBQUFBSUFBQUFDUUFBQUFvQUFBQUxBQUFBREFBQUFBMEFBQUFPQUFBQUR3QUFBQkFBQUFBQkFBQUFCQUFBQUFnQUFBQUFBQUFBQVFBQkFRWUFBQUFBQUFBRUFBQUFBQkFBQUFRQUFBQUFJQUFBQlFFQUFBQUFBQUFGQXdBQUFBQUFBQVVFQUFBQUFBQUFCUVlBQUFBQUFBQUZCd0FBQUFBQUFBVUpBQUFBQUFBQUJRb0FBQUFBQUFBRkRBQUFBQUFBQUFZT0FBQUFBQUFCQlJBQUFBQUFBQUVGRkFBQUFBQUFBUVVXQUFBQUFBQUNCUndBQUFBQUFBTUZJQUFBQUFBQUJBVXdBQUFBSUFBR0JVQUFBQUFBQUFjRmdBQUFBQUFBQ0FZQUFRQUFBQUFLQmdBRUFBQUFBQXdHQUJBQUFDQUFBQVFBQUFBQUFBQUFCQUVBQUFBQUFBQUZBZ0FBQUNBQUFBVUVBQUFBQUFBQUJRVUFBQUFnQUFBRkJ3QUFBQUFBQUFVSUFBQUFJQUFBQlFvQUFBQUFBQUFGQ3dBQUFBQUFBQVlOQUFBQUlBQUJCUkFBQUFBQUFBRUZFZ0FBQUNBQUFRVVdBQUFBQUFBQ0JSZ0FBQUFnQUFNRklBQUFBQUFBQXdVb0FBQUFBQUFHQkVBQUFBQVFBQVlFUUFBQUFDQUFCd1dBQUFBQUFBQUpCZ0FDQUFBQUFBc0dBQWdBQURBQUFBUUFBQUFBRUFBQUJBRUFBQUFnQUFBRkFnQUFBQ0FBQUFVREFBQUFJQUFBQlFVQUFBQWdBQUFGQmdBQUFDQUFBQVVJQUFBQUlBQUFCUWtBQUFBZ0FBQUZDd0FBQUNBQUFBVU1BQUFBQUFBQUJnOEFBQUFnQUFFRkVnQUFBQ0FBQVFVVUFBQUFJQUFDQlJnQUFBQWdBQUlGSEFBQUFDQUFBd1VvQUFBQUlBQUVCVEFBQUFBQUFCQUdBQUFCQUFBQUR3WUFnQUFBQUFBT0JnQkFBQUFBQUEwR0FDQUFRWUFYQzRjQ0FRQUJBUVVBQUFBQUFBQUZBQUFBQUFBQUJnUTlBQUFBQUFBSkJmMEJBQUFBQUE4Ri9YOEFBQUFBRlFYOS94OEFBQUFEQlFVQUFBQUFBQWNFZlFBQUFBQUFEQVg5RHdBQUFBQVNCZjMvQXdBQUFCY0YvZjkvQUFBQUJRVWRBQUFBQUFBSUJQMEFBQUFBQUE0Ri9UOEFBQUFBRkFYOS93OEFBQUFDQlFFQUFBQVFBQWNFZlFBQUFBQUFDd1g5QndBQUFBQVJCZjMvQVFBQUFCWUYvZjgvQUFBQUJBVU5BQUFBRUFBSUJQMEFBQUFBQUEwRi9SOEFBQUFBRXdYOS93Y0FBQUFCQlFFQUFBQVFBQVlFUFFBQUFBQUFDZ1g5QXdBQUFBQVFCZjMvQUFBQUFCd0YvZi8vRHdBQUd3WDkvLzhIQUFBYUJmMy8vd01BQUJrRi9mLy9BUUFBR0FYOS8vOEFRWkFaQzRZRUFRQUJBUVlBQUFBQUFBQUdBd0FBQUFBQUFBUUVBQUFBSUFBQUJRVUFBQUFBQUFBRkJnQUFBQUFBQUFVSUFBQUFBQUFBQlFrQUFBQUFBQUFGQ3dBQUFBQUFBQVlOQUFBQUFBQUFCaEFBQUFBQUFBQUdFd0FBQUFBQUFBWVdBQUFBQUFBQUJoa0FBQUFBQUFBR0hBQUFBQUFBQUFZZkFBQUFBQUFBQmlJQUFBQUFBQUVHSlFBQUFBQUFBUVlwQUFBQUFBQUNCaThBQUFBQUFBTUdPd0FBQUFBQUJBWlRBQUFBQUFBSEJvTUFBQUFBQUFrR0F3SUFBQkFBQUFRRUFBQUFBQUFBQkFVQUFBQWdBQUFGQmdBQUFBQUFBQVVIQUFBQUlBQUFCUWtBQUFBQUFBQUZDZ0FBQUFBQUFBWU1BQUFBQUFBQUJnOEFBQUFBQUFBR0VnQUFBQUFBQUFZVkFBQUFBQUFBQmhnQUFBQUFBQUFHR3dBQUFBQUFBQVllQUFBQUFBQUFCaUVBQUFBQUFBRUdJd0FBQUFBQUFRWW5BQUFBQUFBQ0Jpc0FBQUFBQUFNR013QUFBQUFBQkFaREFBQUFBQUFGQm1NQUFBQUFBQWdHQXdFQUFDQUFBQVFFQUFBQU1BQUFCQVFBQUFBUUFBQUVCUUFBQUNBQUFBVUhBQUFBSUFBQUJRZ0FBQUFnQUFBRkNnQUFBQ0FBQUFVTEFBQUFBQUFBQmc0QUFBQUFBQUFHRVFBQUFBQUFBQVlVQUFBQUFBQUFCaGNBQUFBQUFBQUdHZ0FBQUFBQUFBWWRBQUFBQUFBQUJpQUFBQUFBQUJBR0F3QUJBQUFBRHdZRGdBQUFBQUFPQmdOQUFBQUFBQTBHQXlBQUFBQUFEQVlERUFBQUFBQUxCZ01JQUFBQUFBb0dBd1FBUWFRZEM5a0JBUUFBQUFNQUFBQUhBQUFBRHdBQUFCOEFBQUEvQUFBQWZ3QUFBUDhBQUFEL0FRQUEvd01BQVA4SEFBRC9Ed0FBL3g4QUFQOC9BQUQvZndBQS8vOEFBUC8vQVFELy93TUEvLzhIQVAvL0R3RC8veDhBLy84L0FQLy9md0QvLy84QS8vLy9BZi8vL3dQLy8vOEgvLy8vRC8vLy94Ly8vLzgvLy8vL2Z3QUFBQUFCQUFBQUFnQUFBQVFBQUFBQUFBQUFBZ0FBQUFRQUFBQUlBQUFBQUFBQUFBRUFBQUFDQUFBQUFRQUFBQVFBQUFBRUFBQUFCQUFBQUFRQUFBQUlBQUFBQ0FBQUFBZ0FBQUFIQUFBQUNBQUFBQWtBQUFBS0FBQUFDd0JCZ0I4TEE0QVJBUT09Ijt2YXIgc2U9bmV3IEpBLENlPSExO2FzeW5jIGZ1bmN0aW9uIF9JKEEsdCxlKXtsZXQgST1udWxsO3R5cGVvZiBBIT0ic3RyaW5nIj9JPUEuaHJlZjpBLnN0YXJ0c1dpdGgoImh0dHAiKT9JPUE6ST1gJHt0fS8ke0F9YCxJLmVuZHNXaXRoKCIuanMiKSYmKEk9SS5zdWJzdHJpbmcoMCxJLmxlbmd0aC0zKSksSS5lbmRzV2l0aCgiLndhc20iKSYmKEk9SS5zdWJzdHJpbmcoMCxJLmxlbmd0aC01KSk7bGV0IHI9YCR7SX0ud2FzbWAsbz1hd2FpdCBMQS5nZXQoYCR7cn0uenN0YCx7cmVzcG9uc2VUeXBlOiJhcnJheWJ1ZmZlciIscGFyYW1zOmV9KTtDZXx8KGF3YWl0IHNlLmluaXQoKSxDZT0hMCk7bGV0IEM9c2UuZGVjb2RlKG5ldyBVaW50OEFycmF5KG8uZGF0YSkpLmJ1ZmZlcjtyZXR1cm4oYXdhaXQgaW1wb3J0KGAke0l9LmpzYCkpLmRlZmF1bHQoe3dhc21CaW5hcnk6Q30pfXZhciBCZT1fSTt2YXIgYkE9bmV3IE1hcDthc3luYyBmdW5jdGlvbiBYSShBLHQsZSl7bGV0IEk9QSxyPUEsbz1udWxsO3JldHVybiB0eXBlb2YgQSE9InN0cmluZyImJihJPW5ldyBVUkwoQS5ocmVmKSxyPUkuaHJlZiksYkEuaGFzKHIpP289YXdhaXQgYkEuZ2V0KHIpOihiQS5zZXQocixCZShJLHQsZSkpLG89YXdhaXQgYkEuZ2V0KHIpKSxvfXZhciBhZT1YSTt2YXIgekk9e1RleHRGaWxlOiJUZXh0RmlsZSIsQmluYXJ5RmlsZToiQmluYXJ5RmlsZSIsVGV4dFN0cmVhbToiVGV4dFN0cmVhbSIsQmluYXJ5U3RyZWFtOiJCaW5hcnlTdHJlYW0iLEltYWdlOiJJbWFnZSIsUG9pbnRTZXQ6IlBvaW50U2V0IixNZXNoOiJNZXNoIixQb2x5RGF0YToiUG9seURhdGEiLFRyYW5zZm9ybUxpc3Q6IlRyYW5zZm9ybUxpc3QiLEpzb25Db21wYXRpYmxlOiJKc29uQ29tcGF0aWJsZSJ9LGg9ekk7dmFyIHZJPXtJbnQ4OiJpbnQ4IixVSW50ODoidWludDgiLEludDE2OiJpbnQxNiIsVUludDE2OiJ1aW50MTYiLEludDMyOiJpbnQzMiIsVUludDMyOiJ1aW50MzIiLEludDY0OiJpbnQ2NCIsVUludDY0OiJ1aW50NjQiLFNpemVWYWx1ZVR5cGU6InVpbnQ2NCIsSWRlbnRpZmllclR5cGU6InVpbnQ2NCIsSW5kZXhWYWx1ZVR5cGU6ImludDY0IixPZmZzZXRWYWx1ZVR5cGU6ImludDY0In0sUj12STt2YXIgJEk9e0Zsb2F0MzI6ImZsb2F0MzIiLEZsb2F0NjQ6ImZsb2F0NjQiLFNwYWNlUHJlY2lzaW9uVHlwZToiZmxvYXQ2NCJ9LHo9JEk7ZnVuY3Rpb24gQXIoQSx0KXtsZXQgZT1udWxsO3N3aXRjaChBKXtjYXNlIFIuVUludDg6e2U9bmV3IFVpbnQ4QXJyYXkodCk7YnJlYWt9Y2FzZSBSLkludDg6e2U9bmV3IEludDhBcnJheSh0KTticmVha31jYXNlIFIuVUludDE2OntlPW5ldyBVaW50MTZBcnJheSh0KTticmVha31jYXNlIFIuSW50MTY6e2U9bmV3IEludDE2QXJyYXkodCk7YnJlYWt9Y2FzZSBSLlVJbnQzMjp7ZT1uZXcgVWludDMyQXJyYXkodCk7YnJlYWt9Y2FzZSBSLkludDMyOntlPW5ldyBJbnQzMkFycmF5KHQpO2JyZWFrfWNhc2UgUi5VSW50NjQ6e3R5cGVvZiBnbG9iYWxUaGlzLkJpZ1VpbnQ2NEFycmF5PT0iZnVuY3Rpb24iP2U9bmV3IEJpZ1VpbnQ2NEFycmF5KHQpOmU9bmV3IFVpbnQ4QXJyYXkodCk7YnJlYWt9Y2FzZSBSLkludDY0Ont0eXBlb2YgZ2xvYmFsVGhpcy5CaWdJbnQ2NEFycmF5PT0iZnVuY3Rpb24iP2U9bmV3IEJpZ0ludDY0QXJyYXkodCk6ZT1uZXcgVWludDhBcnJheSh0KTticmVha31jYXNlIHouRmxvYXQzMjp7ZT1uZXcgRmxvYXQzMkFycmF5KHQpO2JyZWFrfWNhc2Ugei5GbG9hdDY0OntlPW5ldyBGbG9hdDY0QXJyYXkodCk7YnJlYWt9Y2FzZSJudWxsIjp7ZT1udWxsO2JyZWFrfWNhc2UgbnVsbDp7ZT1udWxsO2JyZWFrfWRlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKCJUeXBlIGlzIG5vdCBzdXBwb3J0ZWQgYXMgYSBUeXBlZEFycmF5Iil9cmV0dXJuIGV9dmFyIEg9QXI7dmFyIGNlPXR5cGVvZiBnbG9iYWxUaGlzLlNoYXJlZEFycmF5QnVmZmVyPT0iZnVuY3Rpb24iLFFlPW5ldyBUZXh0RW5jb2RlcixFZT1uZXcgVGV4dERlY29kZXIoInV0Zi04Iik7ZnVuY3Rpb24gdHIoQSx0KXtsZXQgZT17ZmxhZ3M6InIiLGVuY29kaW5nOiJiaW5hcnkifSxJPUEuZnNfb3Blbih0LGUuZmxhZ3MpLG89QS5mc19zdGF0KHQpLnNpemUsZz1udWxsO2NlP2c9bmV3IFNoYXJlZEFycmF5QnVmZmVyKG8pOmc9bmV3IEFycmF5QnVmZmVyKG8pO2xldCBDPW5ldyBVaW50OEFycmF5KGcpO3JldHVybiBBLmZzX3JlYWQoSSxDLDAsbywwKSxBLmZzX2Nsb3NlKEkpLEN9ZnVuY3Rpb24gZmUoQSx0LGUpe2xldCBJPW51bGw7Y2U/ST1uZXcgU2hhcmVkQXJyYXlCdWZmZXIoZSk6ST1uZXcgQXJyYXlCdWZmZXIoZSk7bGV0IHI9bmV3IFVpbnQ4QXJyYXkoSSksbz1uZXcgVWludDhBcnJheShBLkhFQVBVOC5idWZmZXIsdCxlKTtyZXR1cm4gci5zZXQobykscn1mdW5jdGlvbiB5KEEsdCxlLEkpe2xldCByPTA7cmV0dXJuIHQhPT1udWxsJiYocj1BLmNjYWxsKCJpdGtfd2FzbV9pbnB1dF9hcnJheV9hbGxvYyIsIm51bWJlciIsWyJudW1iZXIiLCJudW1iZXIiLCJudW1iZXIiLCJudW1iZXIiXSxbMCxlLEksdC5idWZmZXIuYnl0ZUxlbmd0aF0pLEEuSEVBUFU4LnNldChuZXcgVWludDhBcnJheSh0LmJ1ZmZlcikscikpLHJ9ZnVuY3Rpb24gVChBLHQsZSl7bGV0IEk9SlNPTi5zdHJpbmdpZnkodCkscj1BLmxlbmd0aEJ5dGVzVVRGOChJKSsxLG89QS5jY2FsbCgiaXRrX3dhc21faW5wdXRfanNvbl9hbGxvYyIsIm51bWJlciIsWyJudW1iZXIiLCJudW1iZXIiLCJudW1iZXIiXSxbMCxlLHJdKTtBLnN0cmluZ1RvVVRGOChJLG8scil9ZnVuY3Rpb24gRihBLHQsZSxJKXtsZXQgcj1BLmNjYWxsKCJpdGtfd2FzbV9vdXRwdXRfYXJyYXlfYWRkcmVzcyIsIm51bWJlciIsWyJudW1iZXIiLCJudW1iZXIiLCJudW1iZXIiXSxbMCx0LGVdKSxvPUEuY2NhbGwoIml0a193YXNtX291dHB1dF9hcnJheV9zaXplIiwibnVtYmVyIixbIm51bWJlciIsIm51bWJlciIsIm51bWJlciJdLFswLHQsZV0pLGc9ZmUoQSxyLG8pO3JldHVybiBIKEksZy5idWZmZXIpfWZ1bmN0aW9uIHNBKEEsdCl7bGV0IGU9QS5jY2FsbCgiaXRrX3dhc21fb3V0cHV0X2pzb25fYWRkcmVzcyIsIm51bWJlciIsWyJudW1iZXIiLCJudW1iZXIiXSxbMCx0XSksST1BLlVURjhUb1N0cmluZyhlKTtyZXR1cm4gSlNPTi5wYXJzZShJKX1mdW5jdGlvbiBlcihBLHQsZSxJKXtJIT1udWxsJiZJLmxlbmd0aD4wJiZJLmZvckVhY2goZnVuY3Rpb24oYSxuKXtzd2l0Y2goYS50eXBlKXtjYXNlIGguVGV4dFN0cmVhbTp7bGV0IHM9UWUuZW5jb2RlKGEuZGF0YS5kYXRhKSxmPXkoQSxzLG4sMCksQj17c2l6ZTpzLmJ1ZmZlci5ieXRlTGVuZ3RoLGRhdGE6YGRhdGE6YXBwbGljYXRpb24vdm5kLml0ay5hZGRyZXNzLDA6JHtmfWB9O1QoQSxCLG4pO2JyZWFrfWNhc2UgaC5Kc29uQ29tcGF0aWJsZTp7bGV0IHM9UWUuZW5jb2RlKEpTT04uc3RyaW5naWZ5KGEuZGF0YSkpLGY9eShBLHMsbiwwKSxCPXtzaXplOnMuYnVmZmVyLmJ5dGVMZW5ndGgsZGF0YTpgZGF0YTphcHBsaWNhdGlvbi92bmQuaXRrLmFkZHJlc3MsMDoke2Z9YH07VChBLEIsbik7YnJlYWt9Y2FzZSBoLkJpbmFyeVN0cmVhbTp7bGV0IHM9YS5kYXRhLmRhdGEsZj15KEEscyxuLDApLEI9e3NpemU6cy5idWZmZXIuYnl0ZUxlbmd0aCxkYXRhOmBkYXRhOmFwcGxpY2F0aW9uL3ZuZC5pdGsuYWRkcmVzcywwOiR7Zn1gfTtUKEEsQixuKTticmVha31jYXNlIGguVGV4dEZpbGU6e0EuZnNfd3JpdGVGaWxlKGEuZGF0YS5wYXRoLGEuZGF0YS5kYXRhKTticmVha31jYXNlIGguQmluYXJ5RmlsZTp7QS5mc193cml0ZUZpbGUoYS5kYXRhLnBhdGgsYS5kYXRhLmRhdGEpO2JyZWFrfWNhc2UgaC5JbWFnZTp7bGV0IHM9YS5kYXRhLGY9eShBLHMuZGF0YSxuLDApLEI9eShBLHMuZGlyZWN0aW9uLG4sMSksRT10eXBlb2Ygcy5tZXRhZGF0YT8uZW50cmllczwidSI/QXJyYXkuZnJvbShzLm1ldGFkYXRhLmVudHJpZXMoKSk6W10sbD17aW1hZ2VUeXBlOnMuaW1hZ2VUeXBlLG5hbWU6cy5uYW1lLG9yaWdpbjpzLm9yaWdpbixzcGFjaW5nOnMuc3BhY2luZyxkaXJlY3Rpb246YGRhdGE6YXBwbGljYXRpb24vdm5kLml0ay5hZGRyZXNzLDA6JHtCfWAsc2l6ZTpzLnNpemUsZGF0YTpgZGF0YTphcHBsaWNhdGlvbi92bmQuaXRrLmFkZHJlc3MsMDoke2Z9YCxtZXRhZGF0YTpFfTtUKEEsbCxuKTticmVha31jYXNlIGguTWVzaDp7bGV0IHM9YS5kYXRhLGY9eShBLHMucG9pbnRzLG4sMCksQj15KEEscy5jZWxscyxuLDEpLEU9eShBLHMucG9pbnREYXRhLG4sMiksbD15KEEscy5jZWxsRGF0YSxuLDMpLGM9e21lc2hUeXBlOnMubWVzaFR5cGUsbmFtZTpzLm5hbWUsbnVtYmVyT2ZQb2ludHM6cy5udW1iZXJPZlBvaW50cyxwb2ludHM6YGRhdGE6YXBwbGljYXRpb24vdm5kLml0ay5hZGRyZXNzLDA6JHtmfWAsbnVtYmVyT2ZDZWxsczpzLm51bWJlck9mQ2VsbHMsY2VsbHM6YGRhdGE6YXBwbGljYXRpb24vdm5kLml0ay5hZGRyZXNzLDA6JHtCfWAsY2VsbEJ1ZmZlclNpemU6cy5jZWxsQnVmZmVyU2l6ZSxudW1iZXJPZlBvaW50UGl4ZWxzOnMubnVtYmVyT2ZQb2ludFBpeGVscyxwb2ludERhdGE6YGRhdGE6YXBwbGljYXRpb24vdm5kLml0ay5hZGRyZXNzLDA6JHtFfWAsbnVtYmVyT2ZDZWxsUGl4ZWxzOnMubnVtYmVyT2ZDZWxsUGl4ZWxzLGNlbGxEYXRhOmBkYXRhOmFwcGxpY2F0aW9uL3ZuZC5pdGsuYWRkcmVzcywwOiR7bH1gfTtUKEEsYyxuKTticmVha31jYXNlIGguUG9pbnRTZXQ6e2xldCBzPWEuZGF0YSxmPXkoQSxzLnBvaW50cyxuLDApLEI9eShBLHMucG9pbnREYXRhLG4sMSksRT17cG9pbnRTZXRUeXBlOnMucG9pbnRTZXRUeXBlLG5hbWU6cy5uYW1lLG51bWJlck9mUG9pbnRzOnMubnVtYmVyT2ZQb2ludHMscG9pbnRzOmBkYXRhOmFwcGxpY2F0aW9uL3ZuZC5pdGsuYWRkcmVzcywwOiR7Zn1gLG51bWJlck9mUG9pbnRQaXhlbHM6cy5udW1iZXJPZlBvaW50UGl4ZWxzLHBvaW50RGF0YTpgZGF0YTphcHBsaWNhdGlvbi92bmQuaXRrLmFkZHJlc3MsMDoke0J9YH07VChBLEUsbik7YnJlYWt9Y2FzZSBoLlRyYW5zZm9ybUxpc3Q6e2xldCBzPWEuZGF0YSxmPVtdO3MuZm9yRWFjaCgoQixFKT0+e2xldCBjPWBkYXRhOmFwcGxpY2F0aW9uL3ZuZC5pdGsuYWRkcmVzcywwOiR7eShBLEIuZml4ZWRQYXJhbWV0ZXJzLG4sRSoyKX1gLFM9YGRhdGE6YXBwbGljYXRpb24vdm5kLml0ay5hZGRyZXNzLDA6JHt5KEEsQi5wYXJhbWV0ZXJzLG4sRSoyKzEpfWAsRD17dHJhbnNmb3JtVHlwZTpCLnRyYW5zZm9ybVR5cGUsbnVtYmVyT2ZGaXhlZFBhcmFtZXRlcnM6Qi5udW1iZXJPZkZpeGVkUGFyYW1ldGVycyxudW1iZXJPZlBhcmFtZXRlcnM6Qi5udW1iZXJPZlBhcmFtZXRlcnMsbmFtZTpCLm5hbWUsaW5wdXRTcGFjZU5hbWU6Qi5pbnB1dFNwYWNlTmFtZSxvdXRwdXRTcGFjZU5hbWU6Qi5vdXRwdXRTcGFjZU5hbWUscGFyYW1ldGVyczpTLGZpeGVkUGFyYW1ldGVyczpjfTtmLnB1c2goRCl9KSxUKEEsZixuKTticmVha31jYXNlIGguUG9seURhdGE6e2xldCBzPWEuZGF0YSxmPXkoQSxzLnBvaW50cyxuLDApLEI9eShBLHMudmVydGljZXMsbiwxKSxFPXkoQSxzLmxpbmVzLG4sMiksbD15KEEscy5wb2x5Z29ucyxuLDMpLGM9eShBLHMudHJpYW5nbGVTdHJpcHMsbiw0KSxwPXkoQSxzLnBvaW50RGF0YSxuLDUpLFM9eShBLHMucG9pbnREYXRhLG4sNiksRD17cG9seURhdGFUeXBlOnMucG9seURhdGFUeXBlLG5hbWU6cy5uYW1lLG51bWJlck9mUG9pbnRzOnMubnVtYmVyT2ZQb2ludHMscG9pbnRzOmBkYXRhOmFwcGxpY2F0aW9uL3ZuZC5pdGsuYWRkcmVzcywwOiR7Zn1gLHZlcnRpY2VzQnVmZmVyU2l6ZTpzLnZlcnRpY2VzQnVmZmVyU2l6ZSx2ZXJ0aWNlczpgZGF0YTphcHBsaWNhdGlvbi92bmQuaXRrLmFkZHJlc3MsMDoke0J9YCxsaW5lc0J1ZmZlclNpemU6cy5saW5lc0J1ZmZlclNpemUsbGluZXM6YGRhdGE6YXBwbGljYXRpb24vdm5kLml0ay5hZGRyZXNzLDA6JHtFfWAscG9seWdvbnNCdWZmZXJTaXplOnMucG9seWdvbnNCdWZmZXJTaXplLHBvbHlnb25zOmBkYXRhOmFwcGxpY2F0aW9uL3ZuZC5pdGsuYWRkcmVzcywwOiR7bH1gLHRyaWFuZ2xlU3RyaXBzQnVmZmVyU2l6ZTpzLnRyaWFuZ2xlU3RyaXBzQnVmZmVyU2l6ZSx0cmlhbmdsZVN0cmlwczpgZGF0YTphcHBsaWNhdGlvbi92bmQuaXRrLmFkZHJlc3MsMDoke2N9YCxudW1iZXJPZlBvaW50UGl4ZWxzOnMubnVtYmVyT2ZQb2ludFBpeGVscyxwb2ludERhdGE6YGRhdGE6YXBwbGljYXRpb24vdm5kLml0ay5hZGRyZXNzLDA6JHtwfWAsbnVtYmVyT2ZDZWxsUGl4ZWxzOnMubnVtYmVyT2ZDZWxsUGl4ZWxzLGNlbGxEYXRhOmBkYXRhOmFwcGxpY2F0aW9uL3ZuZC5pdGsuYWRkcmVzcywwOiR7U31gfTtUKEEsRCxuKTticmVha31kZWZhdWx0OnRocm93IEVycm9yKCJVbnN1cHBvcnRlZCBpbnB1dCBJbnRlcmZhY2VUeXBlIil9fSksQS5yZXNldE1vZHVsZVN0ZG91dCgpLEEucmVzZXRNb2R1bGVTdGRlcnIoKTtsZXQgcj1BLnN0YWNrU2F2ZSgpLG89MDt0cnl7bz1BLmNhbGxNYWluKHQuc2xpY2UoKSl9Y2F0Y2goYSl7dGhyb3cgdHlwZW9mIGE9PSJudW1iZXIiJiYoY29uc29sZS5sb2coIkV4Y2VwdGlvbiB3aGlsZSBydW5uaW5nIHBpcGVsaW5lOiIpLGNvbnNvbGUubG9nKCJzdGRvdXQ6IixBLmdldE1vZHVsZVN0ZG91dCgpKSxjb25zb2xlLmVycm9yKCJzdGRlcnI6IixBLmdldE1vZHVsZVN0ZGVycigpKSx0eXBlb2YgQS5nZXRFeGNlcHRpb25NZXNzYWdlPCJ1Ij9jb25zb2xlLmVycm9yKCJleGNlcHRpb246IixBLmdldEV4Y2VwdGlvbk1lc3NhZ2UoYSkpOmNvbnNvbGUuZXJyb3IoIkJ1aWxkIG1vZHVsZSBpbiBEZWJ1ZyBtb2RlIGZvciBleGNlcHRpb24gbWVzc2FnZSBpbmZvcm1hdGlvbi4iKSksYX1maW5hbGx5e0Euc3RhY2tSZXN0b3JlKHIpfWxldCBnPUEuZ2V0TW9kdWxlU3Rkb3V0KCksQz1BLmdldE1vZHVsZVN0ZGVycigpLFE9W107cmV0dXJuIGUhPW51bGwmJmUubGVuZ3RoPjAmJm89PT0wJiZlLmZvckVhY2goZnVuY3Rpb24oYSxuKXtsZXQgcz1udWxsO3N3aXRjaChhLnR5cGUpe2Nhc2UgaC5UZXh0U3RyZWFtOntsZXQgQj1BLmNjYWxsKCJpdGtfd2FzbV9vdXRwdXRfYXJyYXlfYWRkcmVzcyIsIm51bWJlciIsWyJudW1iZXIiLCJudW1iZXIiLCJudW1iZXIiXSxbMCxuLDBdKSxFPUEuY2NhbGwoIml0a193YXNtX291dHB1dF9hcnJheV9zaXplIiwibnVtYmVyIixbIm51bWJlciIsIm51bWJlciIsIm51bWJlciJdLFswLG4sMF0pLGw9bmV3IFVpbnQ4QXJyYXkoQS5IRUFQVTguYnVmZmVyLEIsRSk7cz17ZGF0YTpFZS5kZWNvZGUobCl9O2JyZWFrfWNhc2UgaC5Kc29uQ29tcGF0aWJsZTp7bGV0IEI9QS5jY2FsbCgiaXRrX3dhc21fb3V0cHV0X2FycmF5X2FkZHJlc3MiLCJudW1iZXIiLFsibnVtYmVyIiwibnVtYmVyIiwibnVtYmVyIl0sWzAsbiwwXSksRT1BLmNjYWxsKCJpdGtfd2FzbV9vdXRwdXRfYXJyYXlfc2l6ZSIsIm51bWJlciIsWyJudW1iZXIiLCJudW1iZXIiLCJudW1iZXIiXSxbMCxuLDBdKSxsPW5ldyBVaW50OEFycmF5KEEuSEVBUFU4LmJ1ZmZlcixCLEUpO3M9SlNPTi5wYXJzZShFZS5kZWNvZGUobCkpO2JyZWFrfWNhc2UgaC5CaW5hcnlTdHJlYW06e2xldCBCPUEuY2NhbGwoIml0a193YXNtX291dHB1dF9hcnJheV9hZGRyZXNzIiwibnVtYmVyIixbIm51bWJlciIsIm51bWJlciIsIm51bWJlciJdLFswLG4sMF0pLEU9QS5jY2FsbCgiaXRrX3dhc21fb3V0cHV0X2FycmF5X3NpemUiLCJudW1iZXIiLFsibnVtYmVyIiwibnVtYmVyIiwibnVtYmVyIl0sWzAsbiwwXSk7cz17ZGF0YTpmZShBLEIsRSl9O2JyZWFrfWNhc2UgaC5UZXh0RmlsZTp7cz17cGF0aDphLmRhdGEucGF0aCxkYXRhOkEuZnNfcmVhZEZpbGUoYS5kYXRhLnBhdGgse2VuY29kaW5nOiJ1dGY4In0pfTticmVha31jYXNlIGguQmluYXJ5RmlsZTp7cz17cGF0aDphLmRhdGEucGF0aCxkYXRhOnRyKEEsYS5kYXRhLnBhdGgpfTticmVha31jYXNlIGguSW1hZ2U6e2xldCBCPXNBKEEsbik7Qi5kYXRhPUYoQSxuLDAsQi5pbWFnZVR5cGUuY29tcG9uZW50VHlwZSksQi5kaXJlY3Rpb249RihBLG4sMSx6LkZsb2F0NjQpLEIubWV0YWRhdGE9bmV3IE1hcChCLm1ldGFkYXRhKSxzPUI7YnJlYWt9Y2FzZSBoLk1lc2g6e2xldCBCPXNBKEEsbik7Qi5udW1iZXJPZlBvaW50cz4wP0IucG9pbnRzPUYoQSxuLDAsQi5tZXNoVHlwZS5wb2ludENvbXBvbmVudFR5cGUpOkIucG9pbnRzPUgoQi5tZXNoVHlwZS5wb2ludENvbXBvbmVudFR5cGUsbmV3IEFycmF5QnVmZmVyKDApKSxCLm51bWJlck9mQ2VsbHM+MD9CLmNlbGxzPUYoQSxuLDEsQi5tZXNoVHlwZS5jZWxsQ29tcG9uZW50VHlwZSk6Qi5jZWxscz1IKEIubWVzaFR5cGUuY2VsbENvbXBvbmVudFR5cGUsbmV3IEFycmF5QnVmZmVyKDApKSxCLm51bWJlck9mUG9pbnRQaXhlbHM+MD9CLnBvaW50RGF0YT1GKEEsbiwyLEIubWVzaFR5cGUucG9pbnRQaXhlbENvbXBvbmVudFR5cGUpOkIucG9pbnREYXRhPUgoQi5tZXNoVHlwZS5wb2ludFBpeGVsQ29tcG9uZW50VHlwZSxuZXcgQXJyYXlCdWZmZXIoMCkpLEIubnVtYmVyT2ZDZWxsUGl4ZWxzPjA/Qi5jZWxsRGF0YT1GKEEsbiwzLEIubWVzaFR5cGUuY2VsbFBpeGVsQ29tcG9uZW50VHlwZSk6Qi5jZWxsRGF0YT1IKEIubWVzaFR5cGUuY2VsbFBpeGVsQ29tcG9uZW50VHlwZSxuZXcgQXJyYXlCdWZmZXIoMCkpLHM9QjticmVha31jYXNlIGguUG9pbnRTZXQ6e2xldCBCPXNBKEEsbik7Qi5udW1iZXJPZlBvaW50cz4wP0IucG9pbnRzPUYoQSxuLDAsQi5wb2ludFNldFR5cGUucG9pbnRDb21wb25lbnRUeXBlKTpCLnBvaW50cz1IKEIucG9pbnRTZXRUeXBlLnBvaW50Q29tcG9uZW50VHlwZSxuZXcgQXJyYXlCdWZmZXIoMCkpLEIubnVtYmVyT2ZQb2ludFBpeGVscz4wP0IucG9pbnREYXRhPUYoQSxuLDEsQi5wb2ludFNldFR5cGUucG9pbnRQaXhlbENvbXBvbmVudFR5cGUpOkIucG9pbnREYXRhPUgoQi5wb2ludFNldFR5cGUucG9pbnRQaXhlbENvbXBvbmVudFR5cGUsbmV3IEFycmF5QnVmZmVyKDApKSxzPUI7YnJlYWt9Y2FzZSBoLlRyYW5zZm9ybUxpc3Q6e2xldCBCPXNBKEEsbik7Qi5mb3JFYWNoKChFLGwpPT57RS5udW1iZXJPZkZpeGVkUGFyYW1ldGVycz4wJiYoQltsXS5maXhlZFBhcmFtZXRlcnM9RihBLG4sbCoyLEUudHJhbnNmb3JtVHlwZS5wYXJhbWV0ZXJzVmFsdWVUeXBlKSksRS5udW1iZXJPZkZpeGVkUGFyYW1ldGVycz4wJiYoQltsXS5wYXJhbWV0ZXJzPUYoQSxuLGwqMisxLEUudHJhbnNmb3JtVHlwZS5wYXJhbWV0ZXJzVmFsdWVUeXBlKSl9KSxzPUI7YnJlYWt9Y2FzZSBoLlBvbHlEYXRhOntsZXQgQj1zQShBLG4pO0IubnVtYmVyT2ZQb2ludHM+MD9CLnBvaW50cz1GKEEsbiwwLHouRmxvYXQzMik6Qi5wb2ludHM9bmV3IEZsb2F0MzJBcnJheSxCLnZlcnRpY2VzQnVmZmVyU2l6ZT4wP0IudmVydGljZXM9RihBLG4sMSxSLlVJbnQzMik6Qi52ZXJ0aWNlcz1uZXcgVWludDMyQXJyYXksQi5saW5lc0J1ZmZlclNpemU+MD9CLmxpbmVzPUYoQSxuLDIsUi5VSW50MzIpOkIubGluZXM9bmV3IFVpbnQzMkFycmF5LEIucG9seWdvbnNCdWZmZXJTaXplPjA/Qi5wb2x5Z29ucz1GKEEsbiwzLFIuVUludDMyKTpCLnBvbHlnb25zPW5ldyBVaW50MzJBcnJheSxCLnRyaWFuZ2xlU3RyaXBzQnVmZmVyU2l6ZT4wP0IudHJpYW5nbGVTdHJpcHM9RihBLG4sNCxSLlVJbnQzMik6Qi50cmlhbmdsZVN0cmlwcz1uZXcgVWludDMyQXJyYXksQi5udW1iZXJPZlBvaW50UGl4ZWxzPjA/Qi5wb2ludERhdGE9RihBLG4sNSxCLnBvbHlEYXRhVHlwZS5wb2ludFBpeGVsQ29tcG9uZW50VHlwZSk6Qi5wb2ludERhdGE9SChCLnBvbHlEYXRhVHlwZS5wb2ludFBpeGVsQ29tcG9uZW50VHlwZSxuZXcgQXJyYXlCdWZmZXIoMCkpLEIubnVtYmVyT2ZDZWxsUGl4ZWxzPjA/Qi5jZWxsRGF0YT1GKEEsbiw2LEIucG9seURhdGFUeXBlLmNlbGxQaXhlbENvbXBvbmVudFR5cGUpOkIuY2VsbERhdGE9SChCLnBvbHlEYXRhVHlwZS5jZWxsUGl4ZWxDb21wb25lbnRUeXBlLG5ldyBBcnJheUJ1ZmZlcigwKSkscz1CO2JyZWFrfWRlZmF1bHQ6dGhyb3cgRXJyb3IoIlVuc3VwcG9ydGVkIG91dHB1dCBJbnRlcmZhY2VUeXBlIil9bGV0IGY9e3R5cGU6YS50eXBlLGRhdGE6c307US5wdXNoKGYpfSkse3JldHVyblZhbHVlOm8sc3Rkb3V0Omcsc3RkZXJyOkMsb3V0cHV0czpRfX12YXIgbGU9ZXI7dmFyIElyPXR5cGVvZiBnbG9iYWxUaGlzLlNoYXJlZEFycmF5QnVmZmVyPCJ1IjtmdW5jdGlvbiBycihBLHQpe2lmKEE9PW51bGwpcmV0dXJuW107bGV0IGU9W107Zm9yKGxldCBJPTA7STxBLmxlbmd0aDtJKyspe2xldCByPW9yKEFbSV0sdCk7ciE9PW51bGwmJmUucHVzaChyKX1yZXR1cm4gZX1mdW5jdGlvbiBvcihBLHQpe2lmKEE9PW51bGwpcmV0dXJuIG51bGw7bGV0IGU9bnVsbDtyZXR1cm4gQS5idWZmZXIhPT12b2lkIDA/ZT1BLmJ1ZmZlcjpBLmJ5dGVMZW5ndGghPT12b2lkIDAmJihlPUEpLElyJiZlIGluc3RhbmNlb2YgU2hhcmVkQXJyYXlCdWZmZXI/bnVsbDp0P2U6ZS5zbGljZSgwKX12YXIgdWU9cnI7ZnVuY3Rpb24gZ3IoQSl7cmV0dXJuW0EuZGF0YSxBLmRpcmVjdGlvbl19dmFyIERlPWdyO2Z1bmN0aW9uIGlyKEEpe3JldHVybltBLnBvaW50cyxBLnBvaW50RGF0YSxBLmNlbGxzLEEuY2VsbERhdGFdfXZhciBoZT1pcjtmdW5jdGlvbiBucihBKXtyZXR1cm5bQS5wb2ludHMsQS52ZXJ0aWNlcyxBLmxpbmVzLEEucG9seWdvbnMsQS50cmlhbmdsZVN0cmlwcyxBLnBvaW50RGF0YSxBLmNlbGxEYXRhXX12YXIgZGU9bnI7YXN5bmMgZnVuY3Rpb24gc3IoQSx0LGUsSSl7bGV0IHI9bGUoQSx0LGUsSSksbz1bXTtyZXR1cm4gci5vdXRwdXRzLmZvckVhY2goZnVuY3Rpb24oZyl7aWYoZy50eXBlPT09aC5CaW5hcnlTdHJlYW18fGcudHlwZT09PWguQmluYXJ5RmlsZSl7bGV0IEM9Zy5kYXRhO28ucHVzaChDKX1lbHNlIGlmKGcudHlwZT09PWguSW1hZ2Upe2xldCBDPWcuZGF0YTtvLnB1c2goLi4uRGUoQykpfWVsc2UgaWYoZy50eXBlPT09aC5NZXNoKXtsZXQgQz1nLmRhdGE7by5wdXNoKC4uLmhlKEMpKX1lbHNlIGlmKGcudHlwZT09PWguUG9seURhdGEpe2xldCBDPWcuZGF0YTtvLnB1c2goLi4uZGUoQykpfX0pLE1BKHIsdWUobywhMCkpfXZhciB5ZT1zcjt2YXIgQ3I9e3J1blBpcGVsaW5lOmFzeW5jIGZ1bmN0aW9uKEEsdCxlLEkscixvKXtsZXQgZz1hd2FpdCBhZShBLHQsbyk7cmV0dXJuIGF3YWl0IHllKGcsZSxJLHIpfX07ZkEoQ3IpOyUwQS8qISBCdW5kbGVkIGxpY2Vuc2UgaW5mb3JtYXRpb246JTBBJTBBY29tbGluay9kaXN0L2VzbS9jb21saW5rLm1qczolMEEgICgqKiUwQSAgICogQGxpY2Vuc2UlMEEgICAqIENvcHlyaWdodCAyMDE5IEdvb2dsZSBMTEMlMEEgICAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wJTBBICAgKiklMEEqLyUwQSc7SnIocXIpO2V4cG9ydHthQSBhcyBiaW9SYWRSZWFkSW1hZ2UsbkEgYXMgYmlvUmFkV3JpdGVJbWFnZSxfdCBhcyBibXBSZWFkSW1hZ2UsenQgYXMgYm1wV3JpdGVJbWFnZSxfIGFzIGV4dGVuc2lvblRvSW1hZ2VJbyxFQSBhcyBmZGZSZWFkSW1hZ2UsemEgYXMgZmRmV3JpdGVJbWFnZSxjQSBhcyBnZGNtUmVhZEltYWdlLGRBIGFzIGdkY21Xcml0ZUltYWdlLHBBIGFzIGdlNFJlYWRJbWFnZSxtQSBhcyBnZTRXcml0ZUltYWdlLHVBIGFzIGdlNVJlYWRJbWFnZSxmQSBhcyBnZTVXcml0ZUltYWdlLGxBIGFzIGdlQWR3UmVhZEltYWdlLElBIGFzIGdlQWR3V3JpdGVJbWFnZSxRIGFzIGdldERlZmF1bHRXZWJXb3JrZXIsQyBhcyBnZXRQaXBlbGluZVdvcmtlclVybCx5IGFzIGdldFBpcGVsaW5lc0Jhc2VVcmwsc0EgYXMgZ2lwbFJlYWRJbWFnZSxnQSBhcyBnaXBsV3JpdGVJbWFnZSxWdCBhcyBoZGY1UmVhZEltYWdlLFp0IGFzIGhkZjVXcml0ZUltYWdlLEh0IGFzIGpwZWdSZWFkSW1hZ2UscXQgYXMganBlZ1dyaXRlSW1hZ2UsQUEgYXMgbHNtUmVhZEltYWdlLHJBIGFzIGxzbVdyaXRlSW1hZ2UseHQgYXMgbWV0YVJlYWRJbWFnZSxUdCBhcyBtZXRhV3JpdGVJbWFnZSxpQSBhcyBtZ2hSZWFkSW1hZ2Usb0EgYXMgbWdoV3JpdGVJbWFnZSxYdCBhcyBtaW5jUmVhZEltYWdlLCR0IGFzIG1pbmNXcml0ZUltYWdlLGVBIGFzIG1yY1JlYWRJbWFnZSx0QSBhcyBtcmNXcml0ZUltYWdlLEp0IGFzIG5pZnRpUmVhZEltYWdlLE10IGFzIG5pZnRpV3JpdGVJbWFnZSxZdCBhcyBucnJkUmVhZEltYWdlLEt0IGFzIG5ycmRXcml0ZUltYWdlLE90IGFzIHBuZ1JlYWRJbWFnZSxQdCBhcyBwbmdXcml0ZUltYWdlLFJBIGFzIHJlYWRJbWFnZSxLYSBhcyByZWFkSW1hZ2VGaWxlU2VyaWVzLF9vIGFzIHJlYWRJbWFnZUh0dHAsQkEgYXMgc2NhbmNvUmVhZEltYWdlLENBIGFzIHNjYW5jb1dyaXRlSW1hZ2UsdHAgYXMgc2V0RGVmYXVsdFdlYldvcmtlcixKciBhcyBzZXRQaXBlbGluZVdvcmtlclVybCxfSSBhcyBzZXRQaXBlbGluZXNCYXNlVXJsLEd0IGFzIHRpZmZSZWFkSW1hZ2UsTHQgYXMgdGlmZldyaXRlSW1hZ2UsdnQgYXMgdnRrUmVhZEltYWdlLGp0IGFzIHZ0a1dyaXRlSW1hZ2UseUEgYXMgd2FzbVJlYWRJbWFnZSxRQSBhcyB3YXNtV3JpdGVJbWFnZSxoQSBhcyB3YXNtWnN0ZFJlYWRJbWFnZSx3QSBhcyB3YXNtWnN0ZFdyaXRlSW1hZ2UsamEgYXMgd3JpdGVJbWFnZX07Ci8qISBCdW5kbGVkIGxpY2Vuc2UgaW5mb3JtYXRpb246Cgpjb21saW5rL2Rpc3QvZXNtL2NvbWxpbmsubWpzOgogICgqKgogICAqIEBsaWNlbnNlCiAgICogQ29weXJpZ2h0IDIwMTkgR29vZ2xlIExMQwogICAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wCiAgICopCiovCg==""" default_config = JsPackageConfig(default_js_module) js_package = JsPackage(default_config) diff --git a/packages/image-io/python/itkwasm-image-io-wasi/itkwasm_image_io_wasi/_version.py b/packages/image-io/python/itkwasm-image-io-wasi/itkwasm_image_io_wasi/_version.py index 9c73af26b..3e8d9f946 100644 --- a/packages/image-io/python/itkwasm-image-io-wasi/itkwasm_image_io_wasi/_version.py +++ b/packages/image-io/python/itkwasm-image-io-wasi/itkwasm_image_io_wasi/_version.py @@ -1 +1 @@ -__version__ = "1.3.1" +__version__ = "1.4.0" diff --git a/packages/image-io/python/itkwasm-image-io/itkwasm_image_io/_version.py b/packages/image-io/python/itkwasm-image-io/itkwasm_image_io/_version.py index 9c73af26b..3e8d9f946 100644 --- a/packages/image-io/python/itkwasm-image-io/itkwasm_image_io/_version.py +++ b/packages/image-io/python/itkwasm-image-io/itkwasm_image_io/_version.py @@ -1 +1 @@ -__version__ = "1.3.1" +__version__ = "1.4.0" diff --git a/packages/image-io/typescript/package.json b/packages/image-io/typescript/package.json index 4142a6cdf..1793884ad 100644 --- a/packages/image-io/typescript/package.json +++ b/packages/image-io/typescript/package.json @@ -1,6 +1,6 @@ { "name": "@itk-wasm/image-io", - "version": "1.3.1", + "version": "1.4.0", "description": "Input and output for scientific and medical image file formats.", "type": "module", "module": "./dist/index.js", diff --git a/packages/mesh-io/package.json b/packages/mesh-io/package.json index c95b6a720..14f882709 100644 --- a/packages/mesh-io/package.json +++ b/packages/mesh-io/package.json @@ -1,6 +1,6 @@ { "name": "@itk-wasm/mesh-io-build", - "version": "1.5.0", + "version": "1.6.0", "private": true, "description": "scripts to generate @itk-wasm/compare-stringify itk-wasm artifacts.", "type": "module", diff --git a/packages/mesh-io/python/itkwasm-mesh-io-emscripten/itkwasm_mesh_io_emscripten/_version.py b/packages/mesh-io/python/itkwasm-mesh-io-emscripten/itkwasm_mesh_io_emscripten/_version.py index 5b6018861..e4adfb83d 100644 --- a/packages/mesh-io/python/itkwasm-mesh-io-emscripten/itkwasm_mesh_io_emscripten/_version.py +++ b/packages/mesh-io/python/itkwasm-mesh-io-emscripten/itkwasm_mesh_io_emscripten/_version.py @@ -1 +1 @@ -__version__ = "1.5.0" +__version__ = "1.6.0" diff --git a/packages/mesh-io/python/itkwasm-mesh-io-wasi/itkwasm_mesh_io_wasi/_version.py b/packages/mesh-io/python/itkwasm-mesh-io-wasi/itkwasm_mesh_io_wasi/_version.py index 5b6018861..e4adfb83d 100644 --- a/packages/mesh-io/python/itkwasm-mesh-io-wasi/itkwasm_mesh_io_wasi/_version.py +++ b/packages/mesh-io/python/itkwasm-mesh-io-wasi/itkwasm_mesh_io_wasi/_version.py @@ -1 +1 @@ -__version__ = "1.5.0" +__version__ = "1.6.0" diff --git a/packages/mesh-io/python/itkwasm-mesh-io/itkwasm_mesh_io/_version.py b/packages/mesh-io/python/itkwasm-mesh-io/itkwasm_mesh_io/_version.py index 5b6018861..e4adfb83d 100644 --- a/packages/mesh-io/python/itkwasm-mesh-io/itkwasm_mesh_io/_version.py +++ b/packages/mesh-io/python/itkwasm-mesh-io/itkwasm_mesh_io/_version.py @@ -1 +1 @@ -__version__ = "1.5.0" +__version__ = "1.6.0" diff --git a/packages/mesh-io/typescript/package.json b/packages/mesh-io/typescript/package.json index 61e887a35..3c8dbb165 100644 --- a/packages/mesh-io/typescript/package.json +++ b/packages/mesh-io/typescript/package.json @@ -1,6 +1,6 @@ { "name": "@itk-wasm/mesh-io", - "version": "1.5.0", + "version": "1.6.0", "description": "Input and output for scientific and medical image file formats.", "type": "module", "module": "./dist/index.js", diff --git a/packages/transform-io/package.json b/packages/transform-io/package.json index eb52fe589..e7bc9cf45 100644 --- a/packages/transform-io/package.json +++ b/packages/transform-io/package.json @@ -1,6 +1,6 @@ { "name": "@itk-wasm/transform-io-build", - "version": "0.1.1", + "version": "1.0.0", "private": true, "description": "scripts to generate @itk-wasm/transform-io itk-wasm artifacts.", "type": "module", diff --git a/packages/transform-io/python/itkwasm-transform-io-emscripten/itkwasm_transform_io_emscripten/_version.py b/packages/transform-io/python/itkwasm-transform-io-emscripten/itkwasm_transform_io_emscripten/_version.py index 485f44ac2..5becc17c0 100644 --- a/packages/transform-io/python/itkwasm-transform-io-emscripten/itkwasm_transform_io_emscripten/_version.py +++ b/packages/transform-io/python/itkwasm-transform-io-emscripten/itkwasm_transform_io_emscripten/_version.py @@ -1 +1 @@ -__version__ = "0.1.1" +__version__ = "1.0.0" diff --git a/packages/transform-io/python/itkwasm-transform-io-emscripten/itkwasm_transform_io_emscripten/js_package.py b/packages/transform-io/python/itkwasm-transform-io-emscripten/itkwasm_transform_io_emscripten/js_package.py index e8f0865d6..69504734d 100644 --- a/packages/transform-io/python/itkwasm-transform-io-emscripten/itkwasm_transform_io_emscripten/js_package.py +++ b/packages/transform-io/python/itkwasm-transform-io-emscripten/itkwasm_transform_io_emscripten/js_package.py @@ -3,6 +3,6 @@ from itkwasm.pyodide import JsPackageConfig, JsPackage from ._version import __version__ -default_js_module = """data:text/javascript;base64,dmFyIFh0PU9iamVjdC5kZWZpbmVQcm9wZXJ0eTt2YXIgJHQ9KEEsZSk9Pntmb3IodmFyIHQgaW4gZSlYdChBLHQse2dldDplW3RdLGVudW1lcmFibGU6ITB9KX07dmFyIEFyPSIwLjEuMSIsS0E9QXI7dmFyIGVyPXtJbnQ4OiJpbnQ4IixVSW50ODoidWludDgiLEludDE2OiJpbnQxNiIsVUludDE2OiJ1aW50MTYiLEludDMyOiJpbnQzMiIsVUludDMyOiJ1aW50MzIiLEludDY0OiJpbnQ2NCIsVUludDY0OiJ1aW50NjQiLFNpemVWYWx1ZVR5cGU6InVpbnQ2NCIsSWRlbnRpZmllclR5cGU6InVpbnQ2NCIsSW5kZXhWYWx1ZVR5cGU6ImludDY0IixPZmZzZXRWYWx1ZVR5cGU6ImludDY0In0sVD1lcjt2YXIgdHI9e0Zsb2F0MzI6ImZsb2F0MzIiLEZsb2F0NjQ6ImZsb2F0NjQiLFNwYWNlUHJlY2lzaW9uVHlwZToiZmxvYXQ2NCJ9LGo9dHI7ZnVuY3Rpb24gcnIoQSxlKXtsZXQgdD1udWxsO3N3aXRjaChBKXtjYXNlIFQuVUludDg6e3Q9bmV3IFVpbnQ4QXJyYXkoZSk7YnJlYWt9Y2FzZSBULkludDg6e3Q9bmV3IEludDhBcnJheShlKTticmVha31jYXNlIFQuVUludDE2Ont0PW5ldyBVaW50MTZBcnJheShlKTticmVha31jYXNlIFQuSW50MTY6e3Q9bmV3IEludDE2QXJyYXkoZSk7YnJlYWt9Y2FzZSBULlVJbnQzMjp7dD1uZXcgVWludDMyQXJyYXkoZSk7YnJlYWt9Y2FzZSBULkludDMyOnt0PW5ldyBJbnQzMkFycmF5KGUpO2JyZWFrfWNhc2UgVC5VSW50NjQ6e3R5cGVvZiBnbG9iYWxUaGlzLkJpZ1VpbnQ2NEFycmF5PT0iZnVuY3Rpb24iP3Q9bmV3IEJpZ1VpbnQ2NEFycmF5KGUpOnQ9bmV3IFVpbnQ4QXJyYXkoZSk7YnJlYWt9Y2FzZSBULkludDY0Ont0eXBlb2YgZ2xvYmFsVGhpcy5CaWdJbnQ2NEFycmF5PT0iZnVuY3Rpb24iP3Q9bmV3IEJpZ0ludDY0QXJyYXkoZSk6dD1uZXcgVWludDhBcnJheShlKTticmVha31jYXNlIGouRmxvYXQzMjp7dD1uZXcgRmxvYXQzMkFycmF5KGUpO2JyZWFrfWNhc2Ugai5GbG9hdDY0Ont0PW5ldyBGbG9hdDY0QXJyYXkoZSk7YnJlYWt9Y2FzZSJudWxsIjp7dD1udWxsO2JyZWFrfWNhc2UgbnVsbDp7dD1udWxsO2JyZWFrfWRlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKCJUeXBlIGlzIG5vdCBzdXBwb3J0ZWQgYXMgYSBUeXBlZEFycmF5Iil9cmV0dXJuIHR9dmFyIFc9cnI7ZnVuY3Rpb24gb3IoQSl7bGV0IGU9QS5zbGljZSgoQS5sYXN0SW5kZXhPZigiLiIpLTE+Pj4wKSsyKTtpZihlLnRvTG93ZXJDYXNlKCk9PT0iZ3oiKXtsZXQgdD1BLnNsaWNlKDAsLTMpLmxhc3RJbmRleE9mKCIuIik7ZT1BLnNsaWNlKCh0LTE+Pj4wKSsyKX1lbHNlIGlmKGUudG9Mb3dlckNhc2UoKT09PSJjYm9yIil7bGV0IHQ9QS5zbGljZSgwLC01KS5sYXN0SW5kZXhPZigiLiIpO2U9QS5zbGljZSgodC0xPj4+MCkrMil9ZWxzZSBpZihlLnRvTG93ZXJDYXNlKCk9PT0ienN0Iil7bGV0IHQ9QS5zbGljZSgwLC0xMCkubGFzdEluZGV4T2YoIi4iKTtlPUEuc2xpY2UoKHQtMT4+PjApKzIpfWVsc2UgaWYoZS50b0xvd2VyQ2FzZSgpPT09InppcCIpe2xldCB0PUEuc2xpY2UoMCwtNCkubGFzdEluZGV4T2YoIi4iKTtlPUEuc2xpY2UoKHQtMT4+PjApKzIpfXJldHVybiBlfXZhciBpQT1vcjt2YXIgbnI9e1RleHRGaWxlOiJUZXh0RmlsZSIsQmluYXJ5RmlsZToiQmluYXJ5RmlsZSIsVGV4dFN0cmVhbToiVGV4dFN0cmVhbSIsQmluYXJ5U3RyZWFtOiJCaW5hcnlTdHJlYW0iLEltYWdlOiJJbWFnZSIsUG9pbnRTZXQ6IlBvaW50U2V0IixNZXNoOiJNZXNoIixQb2x5RGF0YToiUG9seURhdGEiLFRyYW5zZm9ybUxpc3Q6IlRyYW5zZm9ybUxpc3QiLEpzb25Db21wYXRpYmxlOiJKc29uQ29tcGF0aWJsZSJ9LEU9bnI7dmFyIEplPVN5bWJvbCgiQ29tbGluay5wcm94eSIpLGlyPVN5bWJvbCgiQ29tbGluay5lbmRwb2ludCIpLF9BPVN5bWJvbCgiQ29tbGluay5yZWxlYXNlUHJveHkiKSx2QT1TeW1ib2woIkNvbWxpbmsuZmluYWxpemVyIiksZEE9U3ltYm9sKCJDb21saW5rLnRocm93biIpLE1lPUE9PnR5cGVvZiBBPT0ib2JqZWN0IiYmQSE9PW51bGx8fHR5cGVvZiBBPT0iZnVuY3Rpb24iLGFyPXtjYW5IYW5kbGU6QT0+TWUoQSkmJkFbSmVdLHNlcmlhbGl6ZShBKXtsZXR7cG9ydDE6ZSxwb3J0Mjp0fT1uZXcgTWVzc2FnZUNoYW5uZWw7cmV0dXJuIHFlKEEsZSksW3QsW3RdXX0sZGVzZXJpYWxpemUoQSl7cmV0dXJuIEEuc3RhcnQoKSx6QShBKX19LHNyPXtjYW5IYW5kbGU6QT0+TWUoQSkmJmRBIGluIEEsc2VyaWFsaXplKHt2YWx1ZTpBfSl7bGV0IGU7cmV0dXJuIEEgaW5zdGFuY2VvZiBFcnJvcj9lPXtpc0Vycm9yOiEwLHZhbHVlOnttZXNzYWdlOkEubWVzc2FnZSxuYW1lOkEubmFtZSxzdGFjazpBLnN0YWNrfX06ZT17aXNFcnJvcjohMSx2YWx1ZTpBfSxbZSxbXV19LGRlc2VyaWFsaXplKEEpe3Rocm93IEEuaXNFcnJvcj9PYmplY3QuYXNzaWduKG5ldyBFcnJvcihBLnZhbHVlLm1lc3NhZ2UpLEEudmFsdWUpOkEudmFsdWV9fSxIZT1uZXcgTWFwKFtbInByb3h5Iixhcl0sWyJ0aHJvdyIsc3JdXSk7ZnVuY3Rpb24gSXIoQSxlKXtmb3IobGV0IHQgb2YgQSlpZihlPT09dHx8dD09PSIqInx8dCBpbnN0YW5jZW9mIFJlZ0V4cCYmdC50ZXN0KGUpKXJldHVybiEwO3JldHVybiExfWZ1bmN0aW9uIHFlKEEsZT1nbG9iYWxUaGlzLHQ9WyIqIl0pe2UuYWRkRXZlbnRMaXN0ZW5lcigibWVzc2FnZSIsZnVuY3Rpb24gcihuKXtpZighbnx8IW4uZGF0YSlyZXR1cm47aWYoIUlyKHQsbi5vcmlnaW4pKXtjb25zb2xlLndhcm4oYEludmFsaWQgb3JpZ2luICcke24ub3JpZ2lufScgZm9yIGNvbWxpbmsgcHJveHlgKTtyZXR1cm59bGV0e2lkOm8sdHlwZTppLHBhdGg6Zn09T2JqZWN0LmFzc2lnbih7cGF0aDpbXX0sbi5kYXRhKSxjPShuLmRhdGEuYXJndW1lbnRMaXN0fHxbXSkubWFwKEspLGw7dHJ5e2xldCBhPWYuc2xpY2UoMCwtMSkucmVkdWNlKCh1LHMpPT51W3NdLEEpLEk9Zi5yZWR1Y2UoKHUscyk9PnVbc10sQSk7c3dpdGNoKGkpe2Nhc2UiR0VUIjpsPUk7YnJlYWs7Y2FzZSJTRVQiOmFbZi5zbGljZSgtMSlbMF1dPUsobi5kYXRhLnZhbHVlKSxsPSEwO2JyZWFrO2Nhc2UiQVBQTFkiOmw9SS5hcHBseShhLGMpO2JyZWFrO2Nhc2UiQ09OU1RSVUNUIjp7bGV0IHU9bmV3IEkoLi4uYyk7bD1jcih1KX1icmVhaztjYXNlIkVORFBPSU5UIjp7bGV0e3BvcnQxOnUscG9ydDI6c309bmV3IE1lc3NhZ2VDaGFubmVsO3FlKEEscyksbD1aQSh1LFt1XSl9YnJlYWs7Y2FzZSJSRUxFQVNFIjpsPXZvaWQgMDticmVhaztkZWZhdWx0OnJldHVybn19Y2F0Y2goYSl7bD17dmFsdWU6YSxbZEFdOjB9fVByb21pc2UucmVzb2x2ZShsKS5jYXRjaChhPT4oe3ZhbHVlOmEsW2RBXTowfSkpLnRoZW4oYT0+e2xldFtJLHVdPXdBKGEpO2UucG9zdE1lc3NhZ2UoT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LEkpLHtpZDpvfSksdSksaT09PSJSRUxFQVNFIiYmKGUucmVtb3ZlRXZlbnRMaXN0ZW5lcigibWVzc2FnZSIsciksWWUoZSksdkEgaW4gQSYmdHlwZW9mIEFbdkFdPT0iZnVuY3Rpb24iJiZBW3ZBXSgpKX0pLmNhdGNoKGE9PntsZXRbSSx1XT13QSh7dmFsdWU6bmV3IFR5cGVFcnJvcigiVW5zZXJpYWxpemFibGUgcmV0dXJuIHZhbHVlIiksW2RBXTowfSk7ZS5wb3N0TWVzc2FnZShPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sSSkse2lkOm99KSx1KX0pfSksZS5zdGFydCYmZS5zdGFydCgpfWZ1bmN0aW9uIGdyKEEpe3JldHVybiBBLmNvbnN0cnVjdG9yLm5hbWU9PT0iTWVzc2FnZVBvcnQifWZ1bmN0aW9uIFllKEEpe2dyKEEpJiZBLmNsb3NlKCl9ZnVuY3Rpb24gekEoQSxlKXtyZXR1cm4gakEoQSxbXSxlKX1mdW5jdGlvbiBtQShBKXtpZihBKXRocm93IG5ldyBFcnJvcigiUHJveHkgaGFzIGJlZW4gcmVsZWFzZWQgYW5kIGlzIG5vdCB1c2VhYmxlIil9ZnVuY3Rpb24gS2UoQSl7cmV0dXJuIF8oQSx7dHlwZToiUkVMRUFTRSJ9KS50aGVuKCgpPT57WWUoQSl9KX12YXIgeUE9bmV3IFdlYWtNYXAsaEE9IkZpbmFsaXphdGlvblJlZ2lzdHJ5ImluIGdsb2JhbFRoaXMmJm5ldyBGaW5hbGl6YXRpb25SZWdpc3RyeShBPT57bGV0IGU9KHlBLmdldChBKXx8MCktMTt5QS5zZXQoQSxlKSxlPT09MCYmS2UoQSl9KTtmdW5jdGlvbiBscihBLGUpe2xldCB0PSh5QS5nZXQoZSl8fDApKzE7eUEuc2V0KGUsdCksaEEmJmhBLnJlZ2lzdGVyKEEsZSxBKX1mdW5jdGlvbiBmcihBKXtoQSYmaEEudW5yZWdpc3RlcihBKX1mdW5jdGlvbiBqQShBLGU9W10sdD1mdW5jdGlvbigpe30pe2xldCByPSExLG49bmV3IFByb3h5KHQse2dldChvLGkpe2lmKG1BKHIpLGk9PT1fQSlyZXR1cm4oKT0+e2ZyKG4pLEtlKEEpLHI9ITB9O2lmKGk9PT0idGhlbiIpe2lmKGUubGVuZ3RoPT09MClyZXR1cm57dGhlbjooKT0+bn07bGV0IGY9XyhBLHt0eXBlOiJHRVQiLHBhdGg6ZS5tYXAoYz0+Yy50b1N0cmluZygpKX0pLnRoZW4oSyk7cmV0dXJuIGYudGhlbi5iaW5kKGYpfXJldHVybiBqQShBLFsuLi5lLGldKX0sc2V0KG8saSxmKXttQShyKTtsZXRbYyxsXT13QShmKTtyZXR1cm4gXyhBLHt0eXBlOiJTRVQiLHBhdGg6Wy4uLmUsaV0ubWFwKGE9PmEudG9TdHJpbmcoKSksdmFsdWU6Y30sbCkudGhlbihLKX0sYXBwbHkobyxpLGYpe21BKHIpO2xldCBjPWVbZS5sZW5ndGgtMV07aWYoYz09PWlyKXJldHVybiBfKEEse3R5cGU6IkVORFBPSU5UIn0pLnRoZW4oSyk7aWYoYz09PSJiaW5kIilyZXR1cm4gakEoQSxlLnNsaWNlKDAsLTEpKTtsZXRbbCxhXT1XZShmKTtyZXR1cm4gXyhBLHt0eXBlOiJBUFBMWSIscGF0aDplLm1hcChJPT5JLnRvU3RyaW5nKCkpLGFyZ3VtZW50TGlzdDpsfSxhKS50aGVuKEspfSxjb25zdHJ1Y3QobyxpKXttQShyKTtsZXRbZixjXT1XZShpKTtyZXR1cm4gXyhBLHt0eXBlOiJDT05TVFJVQ1QiLHBhdGg6ZS5tYXAobD0+bC50b1N0cmluZygpKSxhcmd1bWVudExpc3Q6Zn0sYykudGhlbihLKX19KTtyZXR1cm4gbHIobixBKSxufWZ1bmN0aW9uIENyKEEpe3JldHVybiBBcnJheS5wcm90b3R5cGUuY29uY2F0LmFwcGx5KFtdLEEpfWZ1bmN0aW9uIFdlKEEpe2xldCBlPUEubWFwKHdBKTtyZXR1cm5bZS5tYXAodD0+dFswXSksQ3IoZS5tYXAodD0+dFsxXSkpXX12YXIgdmU9bmV3IFdlYWtNYXA7ZnVuY3Rpb24gWkEoQSxlKXtyZXR1cm4gdmUuc2V0KEEsZSksQX1mdW5jdGlvbiBjcihBKXtyZXR1cm4gT2JqZWN0LmFzc2lnbihBLHtbSmVdOiEwfSl9ZnVuY3Rpb24gd0EoQSl7Zm9yKGxldFtlLHRdb2YgSGUpaWYodC5jYW5IYW5kbGUoQSkpe2xldFtyLG5dPXQuc2VyaWFsaXplKEEpO3JldHVyblt7dHlwZToiSEFORExFUiIsbmFtZTplLHZhbHVlOnJ9LG5dfXJldHVyblt7dHlwZToiUkFXIix2YWx1ZTpBfSx2ZS5nZXQoQSl8fFtdXX1mdW5jdGlvbiBLKEEpe3N3aXRjaChBLnR5cGUpe2Nhc2UiSEFORExFUiI6cmV0dXJuIEhlLmdldChBLm5hbWUpLmRlc2VyaWFsaXplKEEudmFsdWUpO2Nhc2UiUkFXIjpyZXR1cm4gQS52YWx1ZX19ZnVuY3Rpb24gXyhBLGUsdCl7cmV0dXJuIG5ldyBQcm9taXNlKHI9PntsZXQgbj1CcigpO0EuYWRkRXZlbnRMaXN0ZW5lcigibWVzc2FnZSIsZnVuY3Rpb24gbyhpKXshaS5kYXRhfHwhaS5kYXRhLmlkfHxpLmRhdGEuaWQhPT1ufHwoQS5yZW1vdmVFdmVudExpc3RlbmVyKCJtZXNzYWdlIixvKSxyKGkuZGF0YSkpfSksQS5zdGFydCYmQS5zdGFydCgpLEEucG9zdE1lc3NhZ2UoT2JqZWN0LmFzc2lnbih7aWQ6bn0sZSksdCl9KX1mdW5jdGlvbiBCcigpe3JldHVybiBuZXcgQXJyYXkoNCkuZmlsbCgwKS5tYXAoKCk9Pk1hdGguZmxvb3IoTWF0aC5yYW5kb20oKSpOdW1iZXIuTUFYX1NBRkVfSU5URUdFUikudG9TdHJpbmcoMTYpKS5qb2luKCItIil9ZnVuY3Rpb24gYUEoQSxlKXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gQS5hcHBseShlLGFyZ3VtZW50cyl9fXZhcnt0b1N0cmluZzp1cn09T2JqZWN0LnByb3RvdHlwZSx7Z2V0UHJvdG90eXBlT2Y6JEF9PU9iamVjdCxSQT0oQT0+ZT0+e2xldCB0PXVyLmNhbGwoZSk7cmV0dXJuIEFbdF18fChBW3RdPXQuc2xpY2UoOCwtMSkudG9Mb3dlckNhc2UoKSl9KShPYmplY3QuY3JlYXRlKG51bGwpKSxQPUE9PihBPUEudG9Mb3dlckNhc2UoKSxlPT5SQShlKT09PUEpLGJBPUE9PmU9PnR5cGVvZiBlPT09QSx7aXNBcnJheTp6fT1BcnJheSxzQT1iQSgidW5kZWZpbmVkIik7ZnVuY3Rpb24gRXIoQSl7cmV0dXJuIEEhPT1udWxsJiYhc0EoQSkmJkEuY29uc3RydWN0b3IhPT1udWxsJiYhc0EoQS5jb25zdHJ1Y3RvcikmJk4oQS5jb25zdHJ1Y3Rvci5pc0J1ZmZlcikmJkEuY29uc3RydWN0b3IuaXNCdWZmZXIoQSl9dmFyIFplPVAoIkFycmF5QnVmZmVyIik7ZnVuY3Rpb24gcHIoQSl7bGV0IGU7cmV0dXJuIHR5cGVvZiBBcnJheUJ1ZmZlcjwidSImJkFycmF5QnVmZmVyLmlzVmlldz9lPUFycmF5QnVmZmVyLmlzVmlldyhBKTplPUEmJkEuYnVmZmVyJiZaZShBLmJ1ZmZlciksZX12YXIgUXI9YkEoInN0cmluZyIpLE49YkEoImZ1bmN0aW9uIiksVmU9YkEoIm51bWJlciIpLFNBPUE9PkEhPT1udWxsJiZ0eXBlb2YgQT09Im9iamVjdCIsbXI9QT0+QT09PSEwfHxBPT09ITEsREE9QT0+e2lmKFJBKEEpIT09Im9iamVjdCIpcmV0dXJuITE7bGV0IGU9JEEoQSk7cmV0dXJuKGU9PT1udWxsfHxlPT09T2JqZWN0LnByb3RvdHlwZXx8T2JqZWN0LmdldFByb3RvdHlwZU9mKGUpPT09bnVsbCkmJiEoU3ltYm9sLnRvU3RyaW5nVGFnIGluIEEpJiYhKFN5bWJvbC5pdGVyYXRvciBpbiBBKX0sZHI9UCgiRGF0ZSIpLHlyPVAoIkZpbGUiKSxocj1QKCJCbG9iIiksd3I9UCgiRmlsZUxpc3QiKSxEcj1BPT5TQShBKSYmTihBLnBpcGUpLFJyPUE9PntsZXQgZTtyZXR1cm4gQSYmKHR5cGVvZiBGb3JtRGF0YT09ImZ1bmN0aW9uIiYmQSBpbnN0YW5jZW9mIEZvcm1EYXRhfHxOKEEuYXBwZW5kKSYmKChlPVJBKEEpKT09PSJmb3JtZGF0YSJ8fGU9PT0ib2JqZWN0IiYmTihBLnRvU3RyaW5nKSYmQS50b1N0cmluZygpPT09IltvYmplY3QgRm9ybURhdGFdIikpfSxicj1QKCJVUkxTZWFyY2hQYXJhbXMiKSxbU3Isa3IsRnIsVXJdPVsiUmVhZGFibGVTdHJlYW0iLCJSZXF1ZXN0IiwiUmVzcG9uc2UiLCJIZWFkZXJzIl0ubWFwKFApLFRyPUE9PkEudHJpbT9BLnRyaW0oKTpBLnJlcGxhY2UoL15bXHNcdUZFRkZceEEwXSt8W1xzXHVGRUZGXHhBMF0rJC9nLCIiKTtmdW5jdGlvbiBJQShBLGUse2FsbE93bktleXM6dD0hMX09e30pe2lmKEE9PT1udWxsfHx0eXBlb2YgQT4idSIpcmV0dXJuO2xldCByLG47aWYodHlwZW9mIEEhPSJvYmplY3QiJiYoQT1bQV0pLHooQSkpZm9yKHI9MCxuPUEubGVuZ3RoO3I8bjtyKyspZS5jYWxsKG51bGwsQVtyXSxyLEEpO2Vsc2V7bGV0IG89dD9PYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhBKTpPYmplY3Qua2V5cyhBKSxpPW8ubGVuZ3RoLGY7Zm9yKHI9MDtyPGk7cisrKWY9b1tyXSxlLmNhbGwobnVsbCxBW2ZdLGYsQSl9fWZ1bmN0aW9uIFhlKEEsZSl7ZT1lLnRvTG93ZXJDYXNlKCk7bGV0IHQ9T2JqZWN0LmtleXMoQSkscj10Lmxlbmd0aCxuO2Zvcig7ci0tID4wOylpZihuPXRbcl0sZT09PW4udG9Mb3dlckNhc2UoKSlyZXR1cm4gbjtyZXR1cm4gbnVsbH12YXIgdj10eXBlb2YgZ2xvYmFsVGhpczwidSI/Z2xvYmFsVGhpczp0eXBlb2Ygc2VsZjwidSI/c2VsZjp0eXBlb2Ygd2luZG93PCJ1Ij93aW5kb3c6Z2xvYmFsLCRlPUE9PiFzQShBKSYmQSE9PXY7ZnVuY3Rpb24gWEEoKXtsZXR7Y2FzZWxlc3M6QX09JGUodGhpcykmJnRoaXN8fHt9LGU9e30sdD0ocixuKT0+e2xldCBvPUEmJlhlKGUsbil8fG47REEoZVtvXSkmJkRBKHIpP2Vbb109WEEoZVtvXSxyKTpEQShyKT9lW29dPVhBKHt9LHIpOnoocik/ZVtvXT1yLnNsaWNlKCk6ZVtvXT1yfTtmb3IobGV0IHI9MCxuPWFyZ3VtZW50cy5sZW5ndGg7cjxuO3IrKylhcmd1bWVudHNbcl0mJklBKGFyZ3VtZW50c1tyXSx0KTtyZXR1cm4gZX12YXIgTnI9KEEsZSx0LHthbGxPd25LZXlzOnJ9PXt9KT0+KElBKGUsKG4sbyk9Pnt0JiZOKG4pP0Fbb109YUEobix0KTpBW29dPW59LHthbGxPd25LZXlzOnJ9KSxBKSxMcj1BPT4oQS5jaGFyQ29kZUF0KDApPT09NjUyNzkmJihBPUEuc2xpY2UoMSkpLEEpLFByPShBLGUsdCxyKT0+e0EucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoZS5wcm90b3R5cGUsciksQS5wcm90b3R5cGUuY29uc3RydWN0b3I9QSxPYmplY3QuZGVmaW5lUHJvcGVydHkoQSwic3VwZXIiLHt2YWx1ZTplLnByb3RvdHlwZX0pLHQmJk9iamVjdC5hc3NpZ24oQS5wcm90b3R5cGUsdCl9LHhyPShBLGUsdCxyKT0+e2xldCBuLG8saSxmPXt9O2lmKGU9ZXx8e30sQT09bnVsbClyZXR1cm4gZTtkb3tmb3Iobj1PYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhBKSxvPW4ubGVuZ3RoO28tLSA+MDspaT1uW29dLCghcnx8cihpLEEsZSkpJiYhZltpXSYmKGVbaV09QVtpXSxmW2ldPSEwKTtBPXQhPT0hMSYmJEEoQSl9d2hpbGUoQSYmKCF0fHx0KEEsZSkpJiZBIT09T2JqZWN0LnByb3RvdHlwZSk7cmV0dXJuIGV9LE9yPShBLGUsdCk9PntBPVN0cmluZyhBKSwodD09PXZvaWQgMHx8dD5BLmxlbmd0aCkmJih0PUEubGVuZ3RoKSx0LT1lLmxlbmd0aDtsZXQgcj1BLmluZGV4T2YoZSx0KTtyZXR1cm4gciE9PS0xJiZyPT09dH0sR3I9QT0+e2lmKCFBKXJldHVybiBudWxsO2lmKHooQSkpcmV0dXJuIEE7bGV0IGU9QS5sZW5ndGg7aWYoIVZlKGUpKXJldHVybiBudWxsO2xldCB0PW5ldyBBcnJheShlKTtmb3IoO2UtLSA+MDspdFtlXT1BW2VdO3JldHVybiB0fSxXcj0oQT0+ZT0+QSYmZSBpbnN0YW5jZW9mIEEpKHR5cGVvZiBVaW50OEFycmF5PCJ1IiYmJEEoVWludDhBcnJheSkpLEpyPShBLGUpPT57bGV0IHI9KEEmJkFbU3ltYm9sLml0ZXJhdG9yXSkuY2FsbChBKSxuO2Zvcig7KG49ci5uZXh0KCkpJiYhbi5kb25lOyl7bGV0IG89bi52YWx1ZTtlLmNhbGwoQSxvWzBdLG9bMV0pfX0sTXI9KEEsZSk9PntsZXQgdCxyPVtdO2Zvcig7KHQ9QS5leGVjKGUpKSE9PW51bGw7KXIucHVzaCh0KTtyZXR1cm4gcn0sSHI9UCgiSFRNTEZvcm1FbGVtZW50IikscXI9QT0+QS50b0xvd2VyQ2FzZSgpLnJlcGxhY2UoL1stX1xzXShbYS16XGRdKShcdyopL2csZnVuY3Rpb24odCxyLG4pe3JldHVybiByLnRvVXBwZXJDYXNlKCkrbn0pLF9lPSgoe2hhc093blByb3BlcnR5OkF9KT0+KGUsdCk9PkEuY2FsbChlLHQpKShPYmplY3QucHJvdG90eXBlKSxZcj1QKCJSZWdFeHAiKSxBdD0oQSxlKT0+e2xldCB0PU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKEEpLHI9e307SUEodCwobixvKT0+e2xldCBpOyhpPWUobixvLEEpKSE9PSExJiYocltvXT1pfHxuKX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKEEscil9LEtyPUE9PntBdChBLChlLHQpPT57aWYoTihBKSYmWyJhcmd1bWVudHMiLCJjYWxsZXIiLCJjYWxsZWUiXS5pbmRleE9mKHQpIT09LTEpcmV0dXJuITE7bGV0IHI9QVt0XTtpZihOKHIpKXtpZihlLmVudW1lcmFibGU9ITEsIndyaXRhYmxlImluIGUpe2Uud3JpdGFibGU9ITE7cmV0dXJufWUuc2V0fHwoZS5zZXQ9KCk9Pnt0aHJvdyBFcnJvcigiQ2FuIG5vdCByZXdyaXRlIHJlYWQtb25seSBtZXRob2QgJyIrdCsiJyIpfSl9fSl9LHZyPShBLGUpPT57bGV0IHQ9e30scj1uPT57bi5mb3JFYWNoKG89Pnt0W29dPSEwfSl9O3JldHVybiB6KEEpP3IoQSk6cihTdHJpbmcoQSkuc3BsaXQoZSkpLHR9LGpyPSgpPT57fSxfcj0oQSxlKT0+QSE9bnVsbCYmTnVtYmVyLmlzRmluaXRlKEE9K0EpP0E6ZSxWQT0iYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXoiLHplPSIwMTIzNDU2Nzg5IixldD17RElHSVQ6emUsQUxQSEE6VkEsQUxQSEFfRElHSVQ6VkErVkEudG9VcHBlckNhc2UoKSt6ZX0senI9KEE9MTYsZT1ldC5BTFBIQV9ESUdJVCk9PntsZXQgdD0iIix7bGVuZ3RoOnJ9PWU7Zm9yKDtBLS07KXQrPWVbTWF0aC5yYW5kb20oKSpyfDBdO3JldHVybiB0fTtmdW5jdGlvbiBacihBKXtyZXR1cm4hIShBJiZOKEEuYXBwZW5kKSYmQVtTeW1ib2wudG9TdHJpbmdUYWddPT09IkZvcm1EYXRhIiYmQVtTeW1ib2wuaXRlcmF0b3JdKX12YXIgVnI9QT0+e2xldCBlPW5ldyBBcnJheSgxMCksdD0ocixuKT0+e2lmKFNBKHIpKXtpZihlLmluZGV4T2Yocik+PTApcmV0dXJuO2lmKCEoInRvSlNPTiJpbiByKSl7ZVtuXT1yO2xldCBvPXoocik/W106e307cmV0dXJuIElBKHIsKGksZik9PntsZXQgYz10KGksbisxKTshc0EoYykmJihvW2ZdPWMpfSksZVtuXT12b2lkIDAsb319cmV0dXJuIHJ9O3JldHVybiB0KEEsMCl9LFhyPVAoIkFzeW5jRnVuY3Rpb24iKSwkcj1BPT5BJiYoU0EoQSl8fE4oQSkpJiZOKEEudGhlbikmJk4oQS5jYXRjaCksdHQ9KChBLGUpPT5BP3NldEltbWVkaWF0ZTplPygodCxyKT0+KHYuYWRkRXZlbnRMaXN0ZW5lcigibWVzc2FnZSIsKHtzb3VyY2U6bixkYXRhOm99KT0+e249PT12JiZvPT09dCYmci5sZW5ndGgmJnIuc2hpZnQoKSgpfSwhMSksbj0+e3IucHVzaChuKSx2LnBvc3RNZXNzYWdlKHQsIioiKX0pKShgYXhpb3NAJHtNYXRoLnJhbmRvbSgpfWAsW10pOnQ9PnNldFRpbWVvdXQodCkpKHR5cGVvZiBzZXRJbW1lZGlhdGU9PSJmdW5jdGlvbiIsTih2LnBvc3RNZXNzYWdlKSksQW89dHlwZW9mIHF1ZXVlTWljcm90YXNrPCJ1Ij9xdWV1ZU1pY3JvdGFzay5iaW5kKHYpOnR5cGVvZiBwcm9jZXNzPCJ1IiYmcHJvY2Vzcy5uZXh0VGlja3x8dHQsZz17aXNBcnJheTp6LGlzQXJyYXlCdWZmZXI6WmUsaXNCdWZmZXI6RXIsaXNGb3JtRGF0YTpScixpc0FycmF5QnVmZmVyVmlldzpwcixpc1N0cmluZzpRcixpc051bWJlcjpWZSxpc0Jvb2xlYW46bXIsaXNPYmplY3Q6U0EsaXNQbGFpbk9iamVjdDpEQSxpc1JlYWRhYmxlU3RyZWFtOlNyLGlzUmVxdWVzdDprcixpc1Jlc3BvbnNlOkZyLGlzSGVhZGVyczpVcixpc1VuZGVmaW5lZDpzQSxpc0RhdGU6ZHIsaXNGaWxlOnlyLGlzQmxvYjpocixpc1JlZ0V4cDpZcixpc0Z1bmN0aW9uOk4saXNTdHJlYW06RHIsaXNVUkxTZWFyY2hQYXJhbXM6YnIsaXNUeXBlZEFycmF5OldyLGlzRmlsZUxpc3Q6d3IsZm9yRWFjaDpJQSxtZXJnZTpYQSxleHRlbmQ6TnIsdHJpbTpUcixzdHJpcEJPTTpMcixpbmhlcml0czpQcix0b0ZsYXRPYmplY3Q6eHIsa2luZE9mOlJBLGtpbmRPZlRlc3Q6UCxlbmRzV2l0aDpPcix0b0FycmF5OkdyLGZvckVhY2hFbnRyeTpKcixtYXRjaEFsbDpNcixpc0hUTUxGb3JtOkhyLGhhc093blByb3BlcnR5Ol9lLGhhc093blByb3A6X2UscmVkdWNlRGVzY3JpcHRvcnM6QXQsZnJlZXplTWV0aG9kczpLcix0b09iamVjdFNldDp2cix0b0NhbWVsQ2FzZTpxcixub29wOmpyLHRvRmluaXRlTnVtYmVyOl9yLGZpbmRLZXk6WGUsZ2xvYmFsOnYsaXNDb250ZXh0RGVmaW5lZDokZSxBTFBIQUJFVDpldCxnZW5lcmF0ZVN0cmluZzp6cixpc1NwZWNDb21wbGlhbnRGb3JtOlpyLHRvSlNPTk9iamVjdDpWcixpc0FzeW5jRm46WHIsaXNUaGVuYWJsZTokcixzZXRJbW1lZGlhdGU6dHQsYXNhcDpBb307ZnVuY3Rpb24gWihBLGUsdCxyLG4pe0Vycm9yLmNhbGwodGhpcyksRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2U/RXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UodGhpcyx0aGlzLmNvbnN0cnVjdG9yKTp0aGlzLnN0YWNrPW5ldyBFcnJvcigpLnN0YWNrLHRoaXMubWVzc2FnZT1BLHRoaXMubmFtZT0iQXhpb3NFcnJvciIsZSYmKHRoaXMuY29kZT1lKSx0JiYodGhpcy5jb25maWc9dCksciYmKHRoaXMucmVxdWVzdD1yKSxuJiYodGhpcy5yZXNwb25zZT1uKX1nLmluaGVyaXRzKFosRXJyb3Ise3RvSlNPTjpmdW5jdGlvbigpe3JldHVybnttZXNzYWdlOnRoaXMubWVzc2FnZSxuYW1lOnRoaXMubmFtZSxkZXNjcmlwdGlvbjp0aGlzLmRlc2NyaXB0aW9uLG51bWJlcjp0aGlzLm51bWJlcixmaWxlTmFtZTp0aGlzLmZpbGVOYW1lLGxpbmVOdW1iZXI6dGhpcy5saW5lTnVtYmVyLGNvbHVtbk51bWJlcjp0aGlzLmNvbHVtbk51bWJlcixzdGFjazp0aGlzLnN0YWNrLGNvbmZpZzpnLnRvSlNPTk9iamVjdCh0aGlzLmNvbmZpZyksY29kZTp0aGlzLmNvZGUsc3RhdHVzOnRoaXMucmVzcG9uc2UmJnRoaXMucmVzcG9uc2Uuc3RhdHVzP3RoaXMucmVzcG9uc2Uuc3RhdHVzOm51bGx9fX0pO3ZhciBydD1aLnByb3RvdHlwZSxvdD17fTtbIkVSUl9CQURfT1BUSU9OX1ZBTFVFIiwiRVJSX0JBRF9PUFRJT04iLCJFQ09OTkFCT1JURUQiLCJFVElNRURPVVQiLCJFUlJfTkVUV09SSyIsIkVSUl9GUl9UT09fTUFOWV9SRURJUkVDVFMiLCJFUlJfREVQUkVDQVRFRCIsIkVSUl9CQURfUkVTUE9OU0UiLCJFUlJfQkFEX1JFUVVFU1QiLCJFUlJfQ0FOQ0VMRUQiLCJFUlJfTk9UX1NVUFBPUlQiLCJFUlJfSU5WQUxJRF9VUkwiXS5mb3JFYWNoKEE9PntvdFtBXT17dmFsdWU6QX19KTtPYmplY3QuZGVmaW5lUHJvcGVydGllcyhaLG90KTtPYmplY3QuZGVmaW5lUHJvcGVydHkocnQsImlzQXhpb3NFcnJvciIse3ZhbHVlOiEwfSk7Wi5mcm9tPShBLGUsdCxyLG4sbyk9PntsZXQgaT1PYmplY3QuY3JlYXRlKHJ0KTtyZXR1cm4gZy50b0ZsYXRPYmplY3QoQSxpLGZ1bmN0aW9uKGMpe3JldHVybiBjIT09RXJyb3IucHJvdG90eXBlfSxmPT5mIT09ImlzQXhpb3NFcnJvciIpLFouY2FsbChpLEEubWVzc2FnZSxlLHQscixuKSxpLmNhdXNlPUEsaS5uYW1lPUEubmFtZSxvJiZPYmplY3QuYXNzaWduKGksbyksaX07dmFyIFE9Wjt2YXIga0E9bnVsbDtmdW5jdGlvbiBBZShBKXtyZXR1cm4gZy5pc1BsYWluT2JqZWN0KEEpfHxnLmlzQXJyYXkoQSl9ZnVuY3Rpb24gaXQoQSl7cmV0dXJuIGcuZW5kc1dpdGgoQSwiW10iKT9BLnNsaWNlKDAsLTIpOkF9ZnVuY3Rpb24gbnQoQSxlLHQpe3JldHVybiBBP0EuY29uY2F0KGUpLm1hcChmdW5jdGlvbihuLG8pe3JldHVybiBuPWl0KG4pLCF0JiZvPyJbIituKyJdIjpufSkuam9pbih0PyIuIjoiIik6ZX1mdW5jdGlvbiBlbyhBKXtyZXR1cm4gZy5pc0FycmF5KEEpJiYhQS5zb21lKEFlKX12YXIgdG89Zy50b0ZsYXRPYmplY3QoZyx7fSxudWxsLGZ1bmN0aW9uKGUpe3JldHVybi9eaXNbQS1aXS8udGVzdChlKX0pO2Z1bmN0aW9uIHJvKEEsZSx0KXtpZighZy5pc09iamVjdChBKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJ0YXJnZXQgbXVzdCBiZSBhbiBvYmplY3QiKTtlPWV8fG5ldyhrQXx8Rm9ybURhdGEpLHQ9Zy50b0ZsYXRPYmplY3QodCx7bWV0YVRva2VuczohMCxkb3RzOiExLGluZGV4ZXM6ITF9LCExLGZ1bmN0aW9uKHAsQil7cmV0dXJuIWcuaXNVbmRlZmluZWQoQltwXSl9KTtsZXQgcj10Lm1ldGFUb2tlbnMsbj10LnZpc2l0b3J8fGEsbz10LmRvdHMsaT10LmluZGV4ZXMsYz0odC5CbG9ifHx0eXBlb2YgQmxvYjwidSImJkJsb2IpJiZnLmlzU3BlY0NvbXBsaWFudEZvcm0oZSk7aWYoIWcuaXNGdW5jdGlvbihuKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJ2aXNpdG9yIG11c3QgYmUgYSBmdW5jdGlvbiIpO2Z1bmN0aW9uIGwoQyl7aWYoQz09PW51bGwpcmV0dXJuIiI7aWYoZy5pc0RhdGUoQykpcmV0dXJuIEMudG9JU09TdHJpbmcoKTtpZighYyYmZy5pc0Jsb2IoQykpdGhyb3cgbmV3IFEoIkJsb2IgaXMgbm90IHN1cHBvcnRlZC4gVXNlIGEgQnVmZmVyIGluc3RlYWQuIik7cmV0dXJuIGcuaXNBcnJheUJ1ZmZlcihDKXx8Zy5pc1R5cGVkQXJyYXkoQyk/YyYmdHlwZW9mIEJsb2I9PSJmdW5jdGlvbiI/bmV3IEJsb2IoW0NdKTpCdWZmZXIuZnJvbShDKTpDfWZ1bmN0aW9uIGEoQyxwLEIpe2xldCBkPUM7aWYoQyYmIUImJnR5cGVvZiBDPT0ib2JqZWN0Iil7aWYoZy5lbmRzV2l0aChwLCJ7fSIpKXA9cj9wOnAuc2xpY2UoMCwtMiksQz1KU09OLnN0cmluZ2lmeShDKTtlbHNlIGlmKGcuaXNBcnJheShDKSYmZW8oQyl8fChnLmlzRmlsZUxpc3QoQyl8fGcuZW5kc1dpdGgocCwiW10iKSkmJihkPWcudG9BcnJheShDKSkpcmV0dXJuIHA9aXQocCksZC5mb3JFYWNoKGZ1bmN0aW9uKG0sTCl7IShnLmlzVW5kZWZpbmVkKG0pfHxtPT09bnVsbCkmJmUuYXBwZW5kKGk9PT0hMD9udChbcF0sTCxvKTppPT09bnVsbD9wOnArIltdIixsKG0pKX0pLCExfXJldHVybiBBZShDKT8hMDooZS5hcHBlbmQobnQoQixwLG8pLGwoQykpLCExKX1sZXQgST1bXSx1PU9iamVjdC5hc3NpZ24odG8se2RlZmF1bHRWaXNpdG9yOmEsY29udmVydFZhbHVlOmwsaXNWaXNpdGFibGU6QWV9KTtmdW5jdGlvbiBzKEMscCl7aWYoIWcuaXNVbmRlZmluZWQoQykpe2lmKEkuaW5kZXhPZihDKSE9PS0xKXRocm93IEVycm9yKCJDaXJjdWxhciByZWZlcmVuY2UgZGV0ZWN0ZWQgaW4gIitwLmpvaW4oIi4iKSk7SS5wdXNoKEMpLGcuZm9yRWFjaChDLGZ1bmN0aW9uKGQsRil7KCEoZy5pc1VuZGVmaW5lZChkKXx8ZD09PW51bGwpJiZuLmNhbGwoZSxkLGcuaXNTdHJpbmcoRik/Ri50cmltKCk6RixwLHUpKT09PSEwJiZzKGQscD9wLmNvbmNhdChGKTpbRl0pfSksSS5wb3AoKX19aWYoIWcuaXNPYmplY3QoQSkpdGhyb3cgbmV3IFR5cGVFcnJvcigiZGF0YSBtdXN0IGJlIGFuIG9iamVjdCIpO3JldHVybiBzKEEpLGV9dmFyIE09cm87ZnVuY3Rpb24gYXQoQSl7bGV0IGU9eyIhIjoiJTIxIiwiJyI6IiUyNyIsIigiOiIlMjgiLCIpIjoiJTI5IiwifiI6IiU3RSIsIiUyMCI6IisiLCIlMDAiOiJcMCJ9O3JldHVybiBlbmNvZGVVUklDb21wb25lbnQoQSkucmVwbGFjZSgvWyEnKCl+XXwlMjB8JTAwL2csZnVuY3Rpb24ocil7cmV0dXJuIGVbcl19KX1mdW5jdGlvbiBzdChBLGUpe3RoaXMuX3BhaXJzPVtdLEEmJk0oQSx0aGlzLGUpfXZhciBJdD1zdC5wcm90b3R5cGU7SXQuYXBwZW5kPWZ1bmN0aW9uKGUsdCl7dGhpcy5fcGFpcnMucHVzaChbZSx0XSl9O0l0LnRvU3RyaW5nPWZ1bmN0aW9uKGUpe2xldCB0PWU/ZnVuY3Rpb24ocil7cmV0dXJuIGUuY2FsbCh0aGlzLHIsYXQpfTphdDtyZXR1cm4gdGhpcy5fcGFpcnMubWFwKGZ1bmN0aW9uKG4pe3JldHVybiB0KG5bMF0pKyI9Iit0KG5bMV0pfSwiIikuam9pbigiJiIpfTt2YXIgRkE9c3Q7ZnVuY3Rpb24gb28oQSl7cmV0dXJuIGVuY29kZVVSSUNvbXBvbmVudChBKS5yZXBsYWNlKC8lM0EvZ2ksIjoiKS5yZXBsYWNlKC8lMjQvZywiJCIpLnJlcGxhY2UoLyUyQy9naSwiLCIpLnJlcGxhY2UoLyUyMC9nLCIrIikucmVwbGFjZSgvJTVCL2dpLCJbIikucmVwbGFjZSgvJTVEL2dpLCJdIil9ZnVuY3Rpb24gZ0EoQSxlLHQpe2lmKCFlKXJldHVybiBBO2xldCByPXQmJnQuZW5jb2RlfHxvbyxuPXQmJnQuc2VyaWFsaXplLG87aWYobj9vPW4oZSx0KTpvPWcuaXNVUkxTZWFyY2hQYXJhbXMoZSk/ZS50b1N0cmluZygpOm5ldyBGQShlLHQpLnRvU3RyaW5nKHIpLG8pe2xldCBpPUEuaW5kZXhPZigiIyIpO2khPT0tMSYmKEE9QS5zbGljZSgwLGkpKSxBKz0oQS5pbmRleE9mKCI/Iik9PT0tMT8iPyI6IiYiKStvfXJldHVybiBBfXZhciBlZT1jbGFzc3tjb25zdHJ1Y3Rvcigpe3RoaXMuaGFuZGxlcnM9W119dXNlKGUsdCxyKXtyZXR1cm4gdGhpcy5oYW5kbGVycy5wdXNoKHtmdWxmaWxsZWQ6ZSxyZWplY3RlZDp0LHN5bmNocm9ub3VzOnI/ci5zeW5jaHJvbm91czohMSxydW5XaGVuOnI/ci5ydW5XaGVuOm51bGx9KSx0aGlzLmhhbmRsZXJzLmxlbmd0aC0xfWVqZWN0KGUpe3RoaXMuaGFuZGxlcnNbZV0mJih0aGlzLmhhbmRsZXJzW2VdPW51bGwpfWNsZWFyKCl7dGhpcy5oYW5kbGVycyYmKHRoaXMuaGFuZGxlcnM9W10pfWZvckVhY2goZSl7Zy5mb3JFYWNoKHRoaXMuaGFuZGxlcnMsZnVuY3Rpb24ocil7ciE9PW51bGwmJmUocil9KX19LHRlPWVlO3ZhciBVQT17c2lsZW50SlNPTlBhcnNpbmc6ITAsZm9yY2VkSlNPTlBhcnNpbmc6ITAsY2xhcmlmeVRpbWVvdXRFcnJvcjohMX07dmFyIGd0PXR5cGVvZiBVUkxTZWFyY2hQYXJhbXM8InUiP1VSTFNlYXJjaFBhcmFtczpGQTt2YXIgbHQ9dHlwZW9mIEZvcm1EYXRhPCJ1Ij9Gb3JtRGF0YTpudWxsO3ZhciBmdD10eXBlb2YgQmxvYjwidSI/QmxvYjpudWxsO3ZhciBDdD17aXNCcm93c2VyOiEwLGNsYXNzZXM6e1VSTFNlYXJjaFBhcmFtczpndCxGb3JtRGF0YTpsdCxCbG9iOmZ0fSxwcm90b2NvbHM6WyJodHRwIiwiaHR0cHMiLCJmaWxlIiwiYmxvYiIsInVybCIsImRhdGEiXX07dmFyIG9lPXt9OyR0KG9lLHtoYXNCcm93c2VyRW52OigpPT5yZSxoYXNTdGFuZGFyZEJyb3dzZXJFbnY6KCk9Pm5vLGhhc1N0YW5kYXJkQnJvd3NlcldlYldvcmtlckVudjooKT0+aW8sb3JpZ2luOigpPT5hb30pO3ZhciByZT10eXBlb2Ygd2luZG93PCJ1IiYmdHlwZW9mIGRvY3VtZW50PCJ1Iixubz0oQT0+cmUmJlsiUmVhY3ROYXRpdmUiLCJOYXRpdmVTY3JpcHQiLCJOUyJdLmluZGV4T2YoQSk8MCkodHlwZW9mIG5hdmlnYXRvcjwidSImJm5hdmlnYXRvci5wcm9kdWN0KSxpbz10eXBlb2YgV29ya2VyR2xvYmFsU2NvcGU8InUiJiZzZWxmIGluc3RhbmNlb2YgV29ya2VyR2xvYmFsU2NvcGUmJnR5cGVvZiBzZWxmLmltcG9ydFNjcmlwdHM9PSJmdW5jdGlvbiIsYW89cmUmJndpbmRvdy5sb2NhdGlvbi5ocmVmfHwiaHR0cDovL2xvY2FsaG9zdCI7dmFyIGs9ey4uLm9lLC4uLkN0fTtmdW5jdGlvbiBuZShBLGUpe3JldHVybiBNKEEsbmV3IGsuY2xhc3Nlcy5VUkxTZWFyY2hQYXJhbXMsT2JqZWN0LmFzc2lnbih7dmlzaXRvcjpmdW5jdGlvbih0LHIsbixvKXtyZXR1cm4gay5pc05vZGUmJmcuaXNCdWZmZXIodCk/KHRoaXMuYXBwZW5kKHIsdC50b1N0cmluZygiYmFzZTY0IikpLCExKTpvLmRlZmF1bHRWaXNpdG9yLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19LGUpKX1mdW5jdGlvbiBzbyhBKXtyZXR1cm4gZy5tYXRjaEFsbCgvXHcrfFxbKFx3KildL2csQSkubWFwKGU9PmVbMF09PT0iW10iPyIiOmVbMV18fGVbMF0pfWZ1bmN0aW9uIElvKEEpe2xldCBlPXt9LHQ9T2JqZWN0LmtleXMoQSkscixuPXQubGVuZ3RoLG87Zm9yKHI9MDtyPG47cisrKW89dFtyXSxlW29dPUFbb107cmV0dXJuIGV9ZnVuY3Rpb24gZ28oQSl7ZnVuY3Rpb24gZSh0LHIsbixvKXtsZXQgaT10W28rK107aWYoaT09PSJfX3Byb3RvX18iKXJldHVybiEwO2xldCBmPU51bWJlci5pc0Zpbml0ZSgraSksYz1vPj10Lmxlbmd0aDtyZXR1cm4gaT0haSYmZy5pc0FycmF5KG4pP24ubGVuZ3RoOmksYz8oZy5oYXNPd25Qcm9wKG4saSk/bltpXT1bbltpXSxyXTpuW2ldPXIsIWYpOigoIW5baV18fCFnLmlzT2JqZWN0KG5baV0pKSYmKG5baV09W10pLGUodCxyLG5baV0sbykmJmcuaXNBcnJheShuW2ldKSYmKG5baV09SW8obltpXSkpLCFmKX1pZihnLmlzRm9ybURhdGEoQSkmJmcuaXNGdW5jdGlvbihBLmVudHJpZXMpKXtsZXQgdD17fTtyZXR1cm4gZy5mb3JFYWNoRW50cnkoQSwocixuKT0+e2Uoc28ociksbix0LDApfSksdH1yZXR1cm4gbnVsbH12YXIgVEE9Z287ZnVuY3Rpb24gbG8oQSxlLHQpe2lmKGcuaXNTdHJpbmcoQSkpdHJ5e3JldHVybihlfHxKU09OLnBhcnNlKShBKSxnLnRyaW0oQSl9Y2F0Y2gocil7aWYoci5uYW1lIT09IlN5bnRheEVycm9yIil0aHJvdyByfXJldHVybih0fHxKU09OLnN0cmluZ2lmeSkoQSl9dmFyIGllPXt0cmFuc2l0aW9uYWw6VUEsYWRhcHRlcjpbInhociIsImh0dHAiLCJmZXRjaCJdLHRyYW5zZm9ybVJlcXVlc3Q6W2Z1bmN0aW9uKGUsdCl7bGV0IHI9dC5nZXRDb250ZW50VHlwZSgpfHwiIixuPXIuaW5kZXhPZigiYXBwbGljYXRpb24vanNvbiIpPi0xLG89Zy5pc09iamVjdChlKTtpZihvJiZnLmlzSFRNTEZvcm0oZSkmJihlPW5ldyBGb3JtRGF0YShlKSksZy5pc0Zvcm1EYXRhKGUpKXJldHVybiBuP0pTT04uc3RyaW5naWZ5KFRBKGUpKTplO2lmKGcuaXNBcnJheUJ1ZmZlcihlKXx8Zy5pc0J1ZmZlcihlKXx8Zy5pc1N0cmVhbShlKXx8Zy5pc0ZpbGUoZSl8fGcuaXNCbG9iKGUpfHxnLmlzUmVhZGFibGVTdHJlYW0oZSkpcmV0dXJuIGU7aWYoZy5pc0FycmF5QnVmZmVyVmlldyhlKSlyZXR1cm4gZS5idWZmZXI7aWYoZy5pc1VSTFNlYXJjaFBhcmFtcyhlKSlyZXR1cm4gdC5zZXRDb250ZW50VHlwZSgiYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkO2NoYXJzZXQ9dXRmLTgiLCExKSxlLnRvU3RyaW5nKCk7bGV0IGY7aWYobyl7aWYoci5pbmRleE9mKCJhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQiKT4tMSlyZXR1cm4gbmUoZSx0aGlzLmZvcm1TZXJpYWxpemVyKS50b1N0cmluZygpO2lmKChmPWcuaXNGaWxlTGlzdChlKSl8fHIuaW5kZXhPZigibXVsdGlwYXJ0L2Zvcm0tZGF0YSIpPi0xKXtsZXQgYz10aGlzLmVudiYmdGhpcy5lbnYuRm9ybURhdGE7cmV0dXJuIE0oZj97ImZpbGVzW10iOmV9OmUsYyYmbmV3IGMsdGhpcy5mb3JtU2VyaWFsaXplcil9fXJldHVybiBvfHxuPyh0LnNldENvbnRlbnRUeXBlKCJhcHBsaWNhdGlvbi9qc29uIiwhMSksbG8oZSkpOmV9XSx0cmFuc2Zvcm1SZXNwb25zZTpbZnVuY3Rpb24oZSl7bGV0IHQ9dGhpcy50cmFuc2l0aW9uYWx8fGllLnRyYW5zaXRpb25hbCxyPXQmJnQuZm9yY2VkSlNPTlBhcnNpbmcsbj10aGlzLnJlc3BvbnNlVHlwZT09PSJqc29uIjtpZihnLmlzUmVzcG9uc2UoZSl8fGcuaXNSZWFkYWJsZVN0cmVhbShlKSlyZXR1cm4gZTtpZihlJiZnLmlzU3RyaW5nKGUpJiYociYmIXRoaXMucmVzcG9uc2VUeXBlfHxuKSl7bGV0IGk9ISh0JiZ0LnNpbGVudEpTT05QYXJzaW5nKSYmbjt0cnl7cmV0dXJuIEpTT04ucGFyc2UoZSl9Y2F0Y2goZil7aWYoaSl0aHJvdyBmLm5hbWU9PT0iU3ludGF4RXJyb3IiP1EuZnJvbShmLFEuRVJSX0JBRF9SRVNQT05TRSx0aGlzLG51bGwsdGhpcy5yZXNwb25zZSk6Zn19cmV0dXJuIGV9XSx0aW1lb3V0OjAseHNyZkNvb2tpZU5hbWU6IlhTUkYtVE9LRU4iLHhzcmZIZWFkZXJOYW1lOiJYLVhTUkYtVE9LRU4iLG1heENvbnRlbnRMZW5ndGg6LTEsbWF4Qm9keUxlbmd0aDotMSxlbnY6e0Zvcm1EYXRhOmsuY2xhc3Nlcy5Gb3JtRGF0YSxCbG9iOmsuY2xhc3Nlcy5CbG9ifSx2YWxpZGF0ZVN0YXR1czpmdW5jdGlvbihlKXtyZXR1cm4gZT49MjAwJiZlPDMwMH0saGVhZGVyczp7Y29tbW9uOntBY2NlcHQ6ImFwcGxpY2F0aW9uL2pzb24sIHRleHQvcGxhaW4sICovKiIsIkNvbnRlbnQtVHlwZSI6dm9pZCAwfX19O2cuZm9yRWFjaChbImRlbGV0ZSIsImdldCIsImhlYWQiLCJwb3N0IiwicHV0IiwicGF0Y2giXSxBPT57aWUuaGVhZGVyc1tBXT17fX0pO3ZhciBWPWllO3ZhciBmbz1nLnRvT2JqZWN0U2V0KFsiYWdlIiwiYXV0aG9yaXphdGlvbiIsImNvbnRlbnQtbGVuZ3RoIiwiY29udGVudC10eXBlIiwiZXRhZyIsImV4cGlyZXMiLCJmcm9tIiwiaG9zdCIsImlmLW1vZGlmaWVkLXNpbmNlIiwiaWYtdW5tb2RpZmllZC1zaW5jZSIsImxhc3QtbW9kaWZpZWQiLCJsb2NhdGlvbiIsIm1heC1mb3J3YXJkcyIsInByb3h5LWF1dGhvcml6YXRpb24iLCJyZWZlcmVyIiwicmV0cnktYWZ0ZXIiLCJ1c2VyLWFnZW50Il0pLGN0PUE9PntsZXQgZT17fSx0LHIsbjtyZXR1cm4gQSYmQS5zcGxpdChgCmApLmZvckVhY2goZnVuY3Rpb24oaSl7bj1pLmluZGV4T2YoIjoiKSx0PWkuc3Vic3RyaW5nKDAsbikudHJpbSgpLnRvTG93ZXJDYXNlKCkscj1pLnN1YnN0cmluZyhuKzEpLnRyaW0oKSwhKCF0fHxlW3RdJiZmb1t0XSkmJih0PT09InNldC1jb29raWUiP2VbdF0/ZVt0XS5wdXNoKHIpOmVbdF09W3JdOmVbdF09ZVt0XT9lW3RdKyIsICIrcjpyKX0pLGV9O3ZhciBCdD1TeW1ib2woImludGVybmFscyIpO2Z1bmN0aW9uIGxBKEEpe3JldHVybiBBJiZTdHJpbmcoQSkudHJpbSgpLnRvTG93ZXJDYXNlKCl9ZnVuY3Rpb24gTkEoQSl7cmV0dXJuIEE9PT0hMXx8QT09bnVsbD9BOmcuaXNBcnJheShBKT9BLm1hcChOQSk6U3RyaW5nKEEpfWZ1bmN0aW9uIENvKEEpe2xldCBlPU9iamVjdC5jcmVhdGUobnVsbCksdD0vKFteXHMsOz1dKylccyooPzo9XHMqKFteLDtdKykpPy9nLHI7Zm9yKDtyPXQuZXhlYyhBKTspZVtyWzFdXT1yWzJdO3JldHVybiBlfXZhciBjbz1BPT4vXlstX2EtekEtWjAtOV5gfH4sISMkJSYnKisuXSskLy50ZXN0KEEudHJpbSgpKTtmdW5jdGlvbiBhZShBLGUsdCxyLG4pe2lmKGcuaXNGdW5jdGlvbihyKSlyZXR1cm4gci5jYWxsKHRoaXMsZSx0KTtpZihuJiYoZT10KSwhIWcuaXNTdHJpbmcoZSkpe2lmKGcuaXNTdHJpbmcocikpcmV0dXJuIGUuaW5kZXhPZihyKSE9PS0xO2lmKGcuaXNSZWdFeHAocikpcmV0dXJuIHIudGVzdChlKX19ZnVuY3Rpb24gQm8oQSl7cmV0dXJuIEEudHJpbSgpLnRvTG93ZXJDYXNlKCkucmVwbGFjZSgvKFthLXpcZF0pKFx3KikvZywoZSx0LHIpPT50LnRvVXBwZXJDYXNlKCkrcil9ZnVuY3Rpb24gdW8oQSxlKXtsZXQgdD1nLnRvQ2FtZWxDYXNlKCIgIitlKTtbImdldCIsInNldCIsImhhcyJdLmZvckVhY2gocj0+e09iamVjdC5kZWZpbmVQcm9wZXJ0eShBLHIrdCx7dmFsdWU6ZnVuY3Rpb24obixvLGkpe3JldHVybiB0aGlzW3JdLmNhbGwodGhpcyxlLG4sbyxpKX0sY29uZmlndXJhYmxlOiEwfSl9KX12YXIgWD1jbGFzc3tjb25zdHJ1Y3RvcihlKXtlJiZ0aGlzLnNldChlKX1zZXQoZSx0LHIpe2xldCBuPXRoaXM7ZnVuY3Rpb24gbyhmLGMsbCl7bGV0IGE9bEEoYyk7aWYoIWEpdGhyb3cgbmV3IEVycm9yKCJoZWFkZXIgbmFtZSBtdXN0IGJlIGEgbm9uLWVtcHR5IHN0cmluZyIpO2xldCBJPWcuZmluZEtleShuLGEpOyghSXx8bltJXT09PXZvaWQgMHx8bD09PSEwfHxsPT09dm9pZCAwJiZuW0ldIT09ITEpJiYobltJfHxjXT1OQShmKSl9bGV0IGk9KGYsYyk9PmcuZm9yRWFjaChmLChsLGEpPT5vKGwsYSxjKSk7aWYoZy5pc1BsYWluT2JqZWN0KGUpfHxlIGluc3RhbmNlb2YgdGhpcy5jb25zdHJ1Y3RvcilpKGUsdCk7ZWxzZSBpZihnLmlzU3RyaW5nKGUpJiYoZT1lLnRyaW0oKSkmJiFjbyhlKSlpKGN0KGUpLHQpO2Vsc2UgaWYoZy5pc0hlYWRlcnMoZSkpZm9yKGxldFtmLGNdb2YgZS5lbnRyaWVzKCkpbyhjLGYscik7ZWxzZSBlIT1udWxsJiZvKHQsZSxyKTtyZXR1cm4gdGhpc31nZXQoZSx0KXtpZihlPWxBKGUpLGUpe2xldCByPWcuZmluZEtleSh0aGlzLGUpO2lmKHIpe2xldCBuPXRoaXNbcl07aWYoIXQpcmV0dXJuIG47aWYodD09PSEwKXJldHVybiBDbyhuKTtpZihnLmlzRnVuY3Rpb24odCkpcmV0dXJuIHQuY2FsbCh0aGlzLG4scik7aWYoZy5pc1JlZ0V4cCh0KSlyZXR1cm4gdC5leGVjKG4pO3Rocm93IG5ldyBUeXBlRXJyb3IoInBhcnNlciBtdXN0IGJlIGJvb2xlYW58cmVnZXhwfGZ1bmN0aW9uIil9fX1oYXMoZSx0KXtpZihlPWxBKGUpLGUpe2xldCByPWcuZmluZEtleSh0aGlzLGUpO3JldHVybiEhKHImJnRoaXNbcl0hPT12b2lkIDAmJighdHx8YWUodGhpcyx0aGlzW3JdLHIsdCkpKX1yZXR1cm4hMX1kZWxldGUoZSx0KXtsZXQgcj10aGlzLG49ITE7ZnVuY3Rpb24gbyhpKXtpZihpPWxBKGkpLGkpe2xldCBmPWcuZmluZEtleShyLGkpO2YmJighdHx8YWUocixyW2ZdLGYsdCkpJiYoZGVsZXRlIHJbZl0sbj0hMCl9fXJldHVybiBnLmlzQXJyYXkoZSk/ZS5mb3JFYWNoKG8pOm8oZSksbn1jbGVhcihlKXtsZXQgdD1PYmplY3Qua2V5cyh0aGlzKSxyPXQubGVuZ3RoLG49ITE7Zm9yKDtyLS07KXtsZXQgbz10W3JdOyghZXx8YWUodGhpcyx0aGlzW29dLG8sZSwhMCkpJiYoZGVsZXRlIHRoaXNbb10sbj0hMCl9cmV0dXJuIG59bm9ybWFsaXplKGUpe2xldCB0PXRoaXMscj17fTtyZXR1cm4gZy5mb3JFYWNoKHRoaXMsKG4sbyk9PntsZXQgaT1nLmZpbmRLZXkocixvKTtpZihpKXt0W2ldPU5BKG4pLGRlbGV0ZSB0W29dO3JldHVybn1sZXQgZj1lP0JvKG8pOlN0cmluZyhvKS50cmltKCk7ZiE9PW8mJmRlbGV0ZSB0W29dLHRbZl09TkEobikscltmXT0hMH0pLHRoaXN9Y29uY2F0KC4uLmUpe3JldHVybiB0aGlzLmNvbnN0cnVjdG9yLmNvbmNhdCh0aGlzLC4uLmUpfXRvSlNPTihlKXtsZXQgdD1PYmplY3QuY3JlYXRlKG51bGwpO3JldHVybiBnLmZvckVhY2godGhpcywocixuKT0+e3IhPW51bGwmJnIhPT0hMSYmKHRbbl09ZSYmZy5pc0FycmF5KHIpP3Iuam9pbigiLCAiKTpyKX0pLHR9W1N5bWJvbC5pdGVyYXRvcl0oKXtyZXR1cm4gT2JqZWN0LmVudHJpZXModGhpcy50b0pTT04oKSlbU3ltYm9sLml0ZXJhdG9yXSgpfXRvU3RyaW5nKCl7cmV0dXJuIE9iamVjdC5lbnRyaWVzKHRoaXMudG9KU09OKCkpLm1hcCgoW2UsdF0pPT5lKyI6ICIrdCkuam9pbihgCmApfWdldFtTeW1ib2wudG9TdHJpbmdUYWddKCl7cmV0dXJuIkF4aW9zSGVhZGVycyJ9c3RhdGljIGZyb20oZSl7cmV0dXJuIGUgaW5zdGFuY2VvZiB0aGlzP2U6bmV3IHRoaXMoZSl9c3RhdGljIGNvbmNhdChlLC4uLnQpe2xldCByPW5ldyB0aGlzKGUpO3JldHVybiB0LmZvckVhY2gobj0+ci5zZXQobikpLHJ9c3RhdGljIGFjY2Vzc29yKGUpe2xldCByPSh0aGlzW0J0XT10aGlzW0J0XT17YWNjZXNzb3JzOnt9fSkuYWNjZXNzb3JzLG49dGhpcy5wcm90b3R5cGU7ZnVuY3Rpb24gbyhpKXtsZXQgZj1sQShpKTtyW2ZdfHwodW8obixpKSxyW2ZdPSEwKX1yZXR1cm4gZy5pc0FycmF5KGUpP2UuZm9yRWFjaChvKTpvKGUpLHRoaXN9fTtYLmFjY2Vzc29yKFsiQ29udGVudC1UeXBlIiwiQ29udGVudC1MZW5ndGgiLCJBY2NlcHQiLCJBY2NlcHQtRW5jb2RpbmciLCJVc2VyLUFnZW50IiwiQXV0aG9yaXphdGlvbiJdKTtnLnJlZHVjZURlc2NyaXB0b3JzKFgucHJvdG90eXBlLCh7dmFsdWU6QX0sZSk9PntsZXQgdD1lWzBdLnRvVXBwZXJDYXNlKCkrZS5zbGljZSgxKTtyZXR1cm57Z2V0OigpPT5BLHNldChyKXt0aGlzW3RdPXJ9fX0pO2cuZnJlZXplTWV0aG9kcyhYKTt2YXIgUz1YO2Z1bmN0aW9uIGZBKEEsZSl7bGV0IHQ9dGhpc3x8VixyPWV8fHQsbj1TLmZyb20oci5oZWFkZXJzKSxvPXIuZGF0YTtyZXR1cm4gZy5mb3JFYWNoKEEsZnVuY3Rpb24oZil7bz1mLmNhbGwodCxvLG4ubm9ybWFsaXplKCksZT9lLnN0YXR1czp2b2lkIDApfSksbi5ub3JtYWxpemUoKSxvfWZ1bmN0aW9uIENBKEEpe3JldHVybiEhKEEmJkEuX19DQU5DRUxfXyl9ZnVuY3Rpb24gdXQoQSxlLHQpe1EuY2FsbCh0aGlzLEE/PyJjYW5jZWxlZCIsUS5FUlJfQ0FOQ0VMRUQsZSx0KSx0aGlzLm5hbWU9IkNhbmNlbGVkRXJyb3IifWcuaW5oZXJpdHModXQsUSx7X19DQU5DRUxfXzohMH0pO3ZhciBKPXV0O2Z1bmN0aW9uIGNBKEEsZSx0KXtsZXQgcj10LmNvbmZpZy52YWxpZGF0ZVN0YXR1czshdC5zdGF0dXN8fCFyfHxyKHQuc3RhdHVzKT9BKHQpOmUobmV3IFEoIlJlcXVlc3QgZmFpbGVkIHdpdGggc3RhdHVzIGNvZGUgIit0LnN0YXR1cyxbUS5FUlJfQkFEX1JFUVVFU1QsUS5FUlJfQkFEX1JFU1BPTlNFXVtNYXRoLmZsb29yKHQuc3RhdHVzLzEwMCktNF0sdC5jb25maWcsdC5yZXF1ZXN0LHQpKX1mdW5jdGlvbiBzZShBKXtsZXQgZT0vXihbLStcd117MSwyNX0pKDo/XC9cL3w6KS8uZXhlYyhBKTtyZXR1cm4gZSYmZVsxXXx8IiJ9ZnVuY3Rpb24gRW8oQSxlKXtBPUF8fDEwO2xldCB0PW5ldyBBcnJheShBKSxyPW5ldyBBcnJheShBKSxuPTAsbz0wLGk7cmV0dXJuIGU9ZSE9PXZvaWQgMD9lOjFlMyxmdW5jdGlvbihjKXtsZXQgbD1EYXRlLm5vdygpLGE9cltvXTtpfHwoaT1sKSx0W25dPWMscltuXT1sO2xldCBJPW8sdT0wO2Zvcig7SSE9PW47KXUrPXRbSSsrXSxJPUklQTtpZihuPShuKzEpJUEsbj09PW8mJihvPShvKzEpJUEpLGwtaTxlKXJldHVybjtsZXQgcz1hJiZsLWE7cmV0dXJuIHM/TWF0aC5yb3VuZCh1KjFlMy9zKTp2b2lkIDB9fXZhciBFdD1FbztmdW5jdGlvbiBwbyhBLGUpe2xldCB0PTAscj0xZTMvZSxuLG8saT0obCxhPURhdGUubm93KCkpPT57dD1hLG49bnVsbCxvJiYoY2xlYXJUaW1lb3V0KG8pLG89bnVsbCksQS5hcHBseShudWxsLGwpfTtyZXR1cm5bKC4uLmwpPT57bGV0IGE9RGF0ZS5ub3coKSxJPWEtdDtJPj1yP2kobCxhKToobj1sLG98fChvPXNldFRpbWVvdXQoKCk9PntvPW51bGwsaShuKX0sci1JKSkpfSwoKT0+biYmaShuKV19dmFyIHB0PXBvO3ZhciAkPShBLGUsdD0zKT0+e2xldCByPTAsbj1FdCg1MCwyNTApO3JldHVybiBwdChvPT57bGV0IGk9by5sb2FkZWQsZj1vLmxlbmd0aENvbXB1dGFibGU/by50b3RhbDp2b2lkIDAsYz1pLXIsbD1uKGMpLGE9aTw9ZjtyPWk7bGV0IEk9e2xvYWRlZDppLHRvdGFsOmYscHJvZ3Jlc3M6Zj9pL2Y6dm9pZCAwLGJ5dGVzOmMscmF0ZTpsfHx2b2lkIDAsZXN0aW1hdGVkOmwmJmYmJmE/KGYtaSkvbDp2b2lkIDAsZXZlbnQ6byxsZW5ndGhDb21wdXRhYmxlOmYhPW51bGwsW2U/ImRvd25sb2FkIjoidXBsb2FkIl06ITB9O0EoSSl9LHQpfSxJZT0oQSxlKT0+e2xldCB0PUEhPW51bGw7cmV0dXJuW3I9PmVbMF0oe2xlbmd0aENvbXB1dGFibGU6dCx0b3RhbDpBLGxvYWRlZDpyfSksZVsxXV19LGdlPUE9PiguLi5lKT0+Zy5hc2FwKCgpPT5BKC4uLmUpKTt2YXIgUXQ9ay5oYXNTdGFuZGFyZEJyb3dzZXJFbnY/ZnVuY3Rpb24oKXtsZXQgZT0vKG1zaWV8dHJpZGVudCkvaS50ZXN0KG5hdmlnYXRvci51c2VyQWdlbnQpLHQ9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiYSIpLHI7ZnVuY3Rpb24gbihvKXtsZXQgaT1vO3JldHVybiBlJiYodC5zZXRBdHRyaWJ1dGUoImhyZWYiLGkpLGk9dC5ocmVmKSx0LnNldEF0dHJpYnV0ZSgiaHJlZiIsaSkse2hyZWY6dC5ocmVmLHByb3RvY29sOnQucHJvdG9jb2w/dC5wcm90b2NvbC5yZXBsYWNlKC86JC8sIiIpOiIiLGhvc3Q6dC5ob3N0LHNlYXJjaDp0LnNlYXJjaD90LnNlYXJjaC5yZXBsYWNlKC9eXD8vLCIiKToiIixoYXNoOnQuaGFzaD90Lmhhc2gucmVwbGFjZSgvXiMvLCIiKToiIixob3N0bmFtZTp0Lmhvc3RuYW1lLHBvcnQ6dC5wb3J0LHBhdGhuYW1lOnQucGF0aG5hbWUuY2hhckF0KDApPT09Ii8iP3QucGF0aG5hbWU6Ii8iK3QucGF0aG5hbWV9fXJldHVybiByPW4od2luZG93LmxvY2F0aW9uLmhyZWYpLGZ1bmN0aW9uKGkpe2xldCBmPWcuaXNTdHJpbmcoaSk/bihpKTppO3JldHVybiBmLnByb3RvY29sPT09ci5wcm90b2NvbCYmZi5ob3N0PT09ci5ob3N0fX0oKTpmdW5jdGlvbigpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiEwfX0oKTt2YXIgbXQ9ay5oYXNTdGFuZGFyZEJyb3dzZXJFbnY/e3dyaXRlKEEsZSx0LHIsbixvKXtsZXQgaT1bQSsiPSIrZW5jb2RlVVJJQ29tcG9uZW50KGUpXTtnLmlzTnVtYmVyKHQpJiZpLnB1c2goImV4cGlyZXM9IituZXcgRGF0ZSh0KS50b0dNVFN0cmluZygpKSxnLmlzU3RyaW5nKHIpJiZpLnB1c2goInBhdGg9IityKSxnLmlzU3RyaW5nKG4pJiZpLnB1c2goImRvbWFpbj0iK24pLG89PT0hMCYmaS5wdXNoKCJzZWN1cmUiKSxkb2N1bWVudC5jb29raWU9aS5qb2luKCI7ICIpfSxyZWFkKEEpe2xldCBlPWRvY3VtZW50LmNvb2tpZS5tYXRjaChuZXcgUmVnRXhwKCIoXnw7XFxzKikoIitBKyIpPShbXjtdKikiKSk7cmV0dXJuIGU/ZGVjb2RlVVJJQ29tcG9uZW50KGVbM10pOm51bGx9LHJlbW92ZShBKXt0aGlzLndyaXRlKEEsIiIsRGF0ZS5ub3coKS04NjRlNSl9fTp7d3JpdGUoKXt9LHJlYWQoKXtyZXR1cm4gbnVsbH0scmVtb3ZlKCl7fX07ZnVuY3Rpb24gbGUoQSl7cmV0dXJuL14oW2Etel1bYS16XGQrXC0uXSo6KT9cL1wvL2kudGVzdChBKX1mdW5jdGlvbiBmZShBLGUpe3JldHVybiBlP0EucmVwbGFjZSgvXC8/XC8kLywiIikrIi8iK2UucmVwbGFjZSgvXlwvKy8sIiIpOkF9ZnVuY3Rpb24gQkEoQSxlKXtyZXR1cm4gQSYmIWxlKGUpP2ZlKEEsZSk6ZX12YXIgZHQ9QT0+QSBpbnN0YW5jZW9mIFM/ey4uLkF9OkE7ZnVuY3Rpb24geChBLGUpe2U9ZXx8e307bGV0IHQ9e307ZnVuY3Rpb24gcihsLGEsSSl7cmV0dXJuIGcuaXNQbGFpbk9iamVjdChsKSYmZy5pc1BsYWluT2JqZWN0KGEpP2cubWVyZ2UuY2FsbCh7Y2FzZWxlc3M6SX0sbCxhKTpnLmlzUGxhaW5PYmplY3QoYSk/Zy5tZXJnZSh7fSxhKTpnLmlzQXJyYXkoYSk/YS5zbGljZSgpOmF9ZnVuY3Rpb24gbihsLGEsSSl7aWYoZy5pc1VuZGVmaW5lZChhKSl7aWYoIWcuaXNVbmRlZmluZWQobCkpcmV0dXJuIHIodm9pZCAwLGwsSSl9ZWxzZSByZXR1cm4gcihsLGEsSSl9ZnVuY3Rpb24gbyhsLGEpe2lmKCFnLmlzVW5kZWZpbmVkKGEpKXJldHVybiByKHZvaWQgMCxhKX1mdW5jdGlvbiBpKGwsYSl7aWYoZy5pc1VuZGVmaW5lZChhKSl7aWYoIWcuaXNVbmRlZmluZWQobCkpcmV0dXJuIHIodm9pZCAwLGwpfWVsc2UgcmV0dXJuIHIodm9pZCAwLGEpfWZ1bmN0aW9uIGYobCxhLEkpe2lmKEkgaW4gZSlyZXR1cm4gcihsLGEpO2lmKEkgaW4gQSlyZXR1cm4gcih2b2lkIDAsbCl9bGV0IGM9e3VybDpvLG1ldGhvZDpvLGRhdGE6byxiYXNlVVJMOmksdHJhbnNmb3JtUmVxdWVzdDppLHRyYW5zZm9ybVJlc3BvbnNlOmkscGFyYW1zU2VyaWFsaXplcjppLHRpbWVvdXQ6aSx0aW1lb3V0TWVzc2FnZTppLHdpdGhDcmVkZW50aWFsczppLHdpdGhYU1JGVG9rZW46aSxhZGFwdGVyOmkscmVzcG9uc2VUeXBlOmkseHNyZkNvb2tpZU5hbWU6aSx4c3JmSGVhZGVyTmFtZTppLG9uVXBsb2FkUHJvZ3Jlc3M6aSxvbkRvd25sb2FkUHJvZ3Jlc3M6aSxkZWNvbXByZXNzOmksbWF4Q29udGVudExlbmd0aDppLG1heEJvZHlMZW5ndGg6aSxiZWZvcmVSZWRpcmVjdDppLHRyYW5zcG9ydDppLGh0dHBBZ2VudDppLGh0dHBzQWdlbnQ6aSxjYW5jZWxUb2tlbjppLHNvY2tldFBhdGg6aSxyZXNwb25zZUVuY29kaW5nOmksdmFsaWRhdGVTdGF0dXM6ZixoZWFkZXJzOihsLGEpPT5uKGR0KGwpLGR0KGEpLCEwKX07cmV0dXJuIGcuZm9yRWFjaChPYmplY3Qua2V5cyhPYmplY3QuYXNzaWduKHt9LEEsZSkpLGZ1bmN0aW9uKGEpe2xldCBJPWNbYV18fG4sdT1JKEFbYV0sZVthXSxhKTtnLmlzVW5kZWZpbmVkKHUpJiZJIT09Znx8KHRbYV09dSl9KSx0fXZhciBMQT1BPT57bGV0IGU9eCh7fSxBKSx7ZGF0YTp0LHdpdGhYU1JGVG9rZW46cix4c3JmSGVhZGVyTmFtZTpuLHhzcmZDb29raWVOYW1lOm8saGVhZGVyczppLGF1dGg6Zn09ZTtlLmhlYWRlcnM9aT1TLmZyb20oaSksZS51cmw9Z0EoQkEoZS5iYXNlVVJMLGUudXJsKSxBLnBhcmFtcyxBLnBhcmFtc1NlcmlhbGl6ZXIpLGYmJmkuc2V0KCJBdXRob3JpemF0aW9uIiwiQmFzaWMgIitidG9hKChmLnVzZXJuYW1lfHwiIikrIjoiKyhmLnBhc3N3b3JkP3VuZXNjYXBlKGVuY29kZVVSSUNvbXBvbmVudChmLnBhc3N3b3JkKSk6IiIpKSk7bGV0IGM7aWYoZy5pc0Zvcm1EYXRhKHQpKXtpZihrLmhhc1N0YW5kYXJkQnJvd3NlckVudnx8ay5oYXNTdGFuZGFyZEJyb3dzZXJXZWJXb3JrZXJFbnYpaS5zZXRDb250ZW50VHlwZSh2b2lkIDApO2Vsc2UgaWYoKGM9aS5nZXRDb250ZW50VHlwZSgpKSE9PSExKXtsZXRbbCwuLi5hXT1jP2Muc3BsaXQoIjsiKS5tYXAoST0+SS50cmltKCkpLmZpbHRlcihCb29sZWFuKTpbXTtpLnNldENvbnRlbnRUeXBlKFtsfHwibXVsdGlwYXJ0L2Zvcm0tZGF0YSIsLi4uYV0uam9pbigiOyAiKSl9fWlmKGsuaGFzU3RhbmRhcmRCcm93c2VyRW52JiYociYmZy5pc0Z1bmN0aW9uKHIpJiYocj1yKGUpKSxyfHxyIT09ITEmJlF0KGUudXJsKSkpe2xldCBsPW4mJm8mJm10LnJlYWQobyk7bCYmaS5zZXQobixsKX1yZXR1cm4gZX07dmFyIFFvPXR5cGVvZiBYTUxIdHRwUmVxdWVzdDwidSIseXQ9UW8mJmZ1bmN0aW9uKEEpe3JldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbih0LHIpe2xldCBuPUxBKEEpLG89bi5kYXRhLGk9Uy5mcm9tKG4uaGVhZGVycykubm9ybWFsaXplKCkse3Jlc3BvbnNlVHlwZTpmLG9uVXBsb2FkUHJvZ3Jlc3M6YyxvbkRvd25sb2FkUHJvZ3Jlc3M6bH09bixhLEksdSxzLEM7ZnVuY3Rpb24gcCgpe3MmJnMoKSxDJiZDKCksbi5jYW5jZWxUb2tlbiYmbi5jYW5jZWxUb2tlbi51bnN1YnNjcmliZShhKSxuLnNpZ25hbCYmbi5zaWduYWwucmVtb3ZlRXZlbnRMaXN0ZW5lcigiYWJvcnQiLGEpfWxldCBCPW5ldyBYTUxIdHRwUmVxdWVzdDtCLm9wZW4obi5tZXRob2QudG9VcHBlckNhc2UoKSxuLnVybCwhMCksQi50aW1lb3V0PW4udGltZW91dDtmdW5jdGlvbiBkKCl7aWYoIUIpcmV0dXJuO2xldCBtPVMuZnJvbSgiZ2V0QWxsUmVzcG9uc2VIZWFkZXJzImluIEImJkIuZ2V0QWxsUmVzcG9uc2VIZWFkZXJzKCkpLFk9e2RhdGE6IWZ8fGY9PT0idGV4dCJ8fGY9PT0ianNvbiI/Qi5yZXNwb25zZVRleHQ6Qi5yZXNwb25zZSxzdGF0dXM6Qi5zdGF0dXMsc3RhdHVzVGV4dDpCLnN0YXR1c1RleHQsaGVhZGVyczptLGNvbmZpZzpBLHJlcXVlc3Q6Qn07Y0EoZnVuY3Rpb24oRyl7dChHKSxwKCl9LGZ1bmN0aW9uKEcpe3IoRykscCgpfSxZKSxCPW51bGx9Im9ubG9hZGVuZCJpbiBCP0Iub25sb2FkZW5kPWQ6Qi5vbnJlYWR5c3RhdGVjaGFuZ2U9ZnVuY3Rpb24oKXshQnx8Qi5yZWFkeVN0YXRlIT09NHx8Qi5zdGF0dXM9PT0wJiYhKEIucmVzcG9uc2VVUkwmJkIucmVzcG9uc2VVUkwuaW5kZXhPZigiZmlsZToiKT09PTApfHxzZXRUaW1lb3V0KGQpfSxCLm9uYWJvcnQ9ZnVuY3Rpb24oKXtCJiYocihuZXcgUSgiUmVxdWVzdCBhYm9ydGVkIixRLkVDT05OQUJPUlRFRCxBLEIpKSxCPW51bGwpfSxCLm9uZXJyb3I9ZnVuY3Rpb24oKXtyKG5ldyBRKCJOZXR3b3JrIEVycm9yIixRLkVSUl9ORVRXT1JLLEEsQikpLEI9bnVsbH0sQi5vbnRpbWVvdXQ9ZnVuY3Rpb24oKXtsZXQgTD1uLnRpbWVvdXQ/InRpbWVvdXQgb2YgIituLnRpbWVvdXQrIm1zIGV4Y2VlZGVkIjoidGltZW91dCBleGNlZWRlZCIsWT1uLnRyYW5zaXRpb25hbHx8VUE7bi50aW1lb3V0RXJyb3JNZXNzYWdlJiYoTD1uLnRpbWVvdXRFcnJvck1lc3NhZ2UpLHIobmV3IFEoTCxZLmNsYXJpZnlUaW1lb3V0RXJyb3I/US5FVElNRURPVVQ6US5FQ09OTkFCT1JURUQsQSxCKSksQj1udWxsfSxvPT09dm9pZCAwJiZpLnNldENvbnRlbnRUeXBlKG51bGwpLCJzZXRSZXF1ZXN0SGVhZGVyImluIEImJmcuZm9yRWFjaChpLnRvSlNPTigpLGZ1bmN0aW9uKEwsWSl7Qi5zZXRSZXF1ZXN0SGVhZGVyKFksTCl9KSxnLmlzVW5kZWZpbmVkKG4ud2l0aENyZWRlbnRpYWxzKXx8KEIud2l0aENyZWRlbnRpYWxzPSEhbi53aXRoQ3JlZGVudGlhbHMpLGYmJmYhPT0ianNvbiImJihCLnJlc3BvbnNlVHlwZT1uLnJlc3BvbnNlVHlwZSksbCYmKFt1LENdPSQobCwhMCksQi5hZGRFdmVudExpc3RlbmVyKCJwcm9ncmVzcyIsdSkpLGMmJkIudXBsb2FkJiYoW0ksc109JChjKSxCLnVwbG9hZC5hZGRFdmVudExpc3RlbmVyKCJwcm9ncmVzcyIsSSksQi51cGxvYWQuYWRkRXZlbnRMaXN0ZW5lcigibG9hZGVuZCIscykpLChuLmNhbmNlbFRva2VufHxuLnNpZ25hbCkmJihhPW09PntCJiYocighbXx8bS50eXBlP25ldyBKKG51bGwsQSxCKTptKSxCLmFib3J0KCksQj1udWxsKX0sbi5jYW5jZWxUb2tlbiYmbi5jYW5jZWxUb2tlbi5zdWJzY3JpYmUoYSksbi5zaWduYWwmJihuLnNpZ25hbC5hYm9ydGVkP2EoKTpuLnNpZ25hbC5hZGRFdmVudExpc3RlbmVyKCJhYm9ydCIsYSkpKTtsZXQgRj1zZShuLnVybCk7aWYoRiYmay5wcm90b2NvbHMuaW5kZXhPZihGKT09PS0xKXtyKG5ldyBRKCJVbnN1cHBvcnRlZCBwcm90b2NvbCAiK0YrIjoiLFEuRVJSX0JBRF9SRVFVRVNULEEpKTtyZXR1cm59Qi5zZW5kKG98fG51bGwpfSl9O3ZhciBtbz0oQSxlKT0+e2xldCB0PW5ldyBBYm9ydENvbnRyb2xsZXIscixuPWZ1bmN0aW9uKGMpe2lmKCFyKXtyPSEwLGkoKTtsZXQgbD1jIGluc3RhbmNlb2YgRXJyb3I/Yzp0aGlzLnJlYXNvbjt0LmFib3J0KGwgaW5zdGFuY2VvZiBRP2w6bmV3IEoobCBpbnN0YW5jZW9mIEVycm9yP2wubWVzc2FnZTpsKSl9fSxvPWUmJnNldFRpbWVvdXQoKCk9PntuKG5ldyBRKGB0aW1lb3V0ICR7ZX0gb2YgbXMgZXhjZWVkZWRgLFEuRVRJTUVET1VUKSl9LGUpLGk9KCk9PntBJiYobyYmY2xlYXJUaW1lb3V0KG8pLG89bnVsbCxBLmZvckVhY2goYz0+e2MmJihjLnJlbW92ZUV2ZW50TGlzdGVuZXI/Yy5yZW1vdmVFdmVudExpc3RlbmVyKCJhYm9ydCIsbik6Yy51bnN1YnNjcmliZShuKSl9KSxBPW51bGwpfTtBLmZvckVhY2goYz0+YyYmYy5hZGRFdmVudExpc3RlbmVyJiZjLmFkZEV2ZW50TGlzdGVuZXIoImFib3J0IixuKSk7bGV0e3NpZ25hbDpmfT10O3JldHVybiBmLnVuc3Vic2NyaWJlPWksW2YsKCk9PntvJiZjbGVhclRpbWVvdXQobyksbz1udWxsfV19LGh0PW1vO3ZhciB5bz1mdW5jdGlvbiooQSxlKXtsZXQgdD1BLmJ5dGVMZW5ndGg7aWYoIWV8fHQ8ZSl7eWllbGQgQTtyZXR1cm59bGV0IHI9MCxuO2Zvcig7cjx0OyluPXIrZSx5aWVsZCBBLnNsaWNlKHIsbikscj1ufSxobz1hc3luYyBmdW5jdGlvbiooQSxlLHQpe2ZvciBhd2FpdChsZXQgciBvZiBBKXlpZWxkKnlvKEFycmF5QnVmZmVyLmlzVmlldyhyKT9yOmF3YWl0IHQoU3RyaW5nKHIpKSxlKX0sQ2U9KEEsZSx0LHIsbik9PntsZXQgbz1obyhBLGUsbiksaT0wLGYsYz1sPT57Znx8KGY9ITAsciYmcihsKSl9O3JldHVybiBuZXcgUmVhZGFibGVTdHJlYW0oe2FzeW5jIHB1bGwobCl7dHJ5e2xldHtkb25lOmEsdmFsdWU6SX09YXdhaXQgby5uZXh0KCk7aWYoYSl7YygpLGwuY2xvc2UoKTtyZXR1cm59bGV0IHU9SS5ieXRlTGVuZ3RoO2lmKHQpe2xldCBzPWkrPXU7dChzKX1sLmVucXVldWUobmV3IFVpbnQ4QXJyYXkoSSkpfWNhdGNoKGEpe3Rocm93IGMoYSksYX19LGNhbmNlbChsKXtyZXR1cm4gYyhsKSxvLnJldHVybigpfX0se2hpZ2hXYXRlck1hcms6Mn0pfTt2YXIgeEE9dHlwZW9mIGZldGNoPT0iZnVuY3Rpb24iJiZ0eXBlb2YgUmVxdWVzdD09ImZ1bmN0aW9uIiYmdHlwZW9mIFJlc3BvbnNlPT0iZnVuY3Rpb24iLER0PXhBJiZ0eXBlb2YgUmVhZGFibGVTdHJlYW09PSJmdW5jdGlvbiIsY2U9eEEmJih0eXBlb2YgVGV4dEVuY29kZXI9PSJmdW5jdGlvbiI/KEE9PmU9PkEuZW5jb2RlKGUpKShuZXcgVGV4dEVuY29kZXIpOmFzeW5jIEE9Pm5ldyBVaW50OEFycmF5KGF3YWl0IG5ldyBSZXNwb25zZShBKS5hcnJheUJ1ZmZlcigpKSksUnQ9KEEsLi4uZSk9Pnt0cnl7cmV0dXJuISFBKC4uLmUpfWNhdGNoe3JldHVybiExfX0sd289RHQmJlJ0KCgpPT57bGV0IEE9ITEsZT1uZXcgUmVxdWVzdChrLm9yaWdpbix7Ym9keTpuZXcgUmVhZGFibGVTdHJlYW0sbWV0aG9kOiJQT1NUIixnZXQgZHVwbGV4KCl7cmV0dXJuIEE9ITAsImhhbGYifX0pLmhlYWRlcnMuaGFzKCJDb250ZW50LVR5cGUiKTtyZXR1cm4gQSYmIWV9KSx3dD02NCoxMDI0LEJlPUR0JiZSdCgoKT0+Zy5pc1JlYWRhYmxlU3RyZWFtKG5ldyBSZXNwb25zZSgiIikuYm9keSkpLFBBPXtzdHJlYW06QmUmJihBPT5BLmJvZHkpfTt4QSYmKEE9PntbInRleHQiLCJhcnJheUJ1ZmZlciIsImJsb2IiLCJmb3JtRGF0YSIsInN0cmVhbSJdLmZvckVhY2goZT0+eyFQQVtlXSYmKFBBW2VdPWcuaXNGdW5jdGlvbihBW2VdKT90PT50W2VdKCk6KHQscik9Pnt0aHJvdyBuZXcgUShgUmVzcG9uc2UgdHlwZSAnJHtlfScgaXMgbm90IHN1cHBvcnRlZGAsUS5FUlJfTk9UX1NVUFBPUlQscil9KX0pfSkobmV3IFJlc3BvbnNlKTt2YXIgRG89YXN5bmMgQT0+e2lmKEE9PW51bGwpcmV0dXJuIDA7aWYoZy5pc0Jsb2IoQSkpcmV0dXJuIEEuc2l6ZTtpZihnLmlzU3BlY0NvbXBsaWFudEZvcm0oQSkpcmV0dXJuKGF3YWl0IG5ldyBSZXF1ZXN0KEEpLmFycmF5QnVmZmVyKCkpLmJ5dGVMZW5ndGg7aWYoZy5pc0FycmF5QnVmZmVyVmlldyhBKXx8Zy5pc0FycmF5QnVmZmVyKEEpKXJldHVybiBBLmJ5dGVMZW5ndGg7aWYoZy5pc1VSTFNlYXJjaFBhcmFtcyhBKSYmKEE9QSsiIiksZy5pc1N0cmluZyhBKSlyZXR1cm4oYXdhaXQgY2UoQSkpLmJ5dGVMZW5ndGh9LFJvPWFzeW5jKEEsZSk9PntsZXQgdD1nLnRvRmluaXRlTnVtYmVyKEEuZ2V0Q29udGVudExlbmd0aCgpKTtyZXR1cm4gdD8/RG8oZSl9LGJ0PXhBJiYoYXN5bmMgQT0+e2xldHt1cmw6ZSxtZXRob2Q6dCxkYXRhOnIsc2lnbmFsOm4sY2FuY2VsVG9rZW46byx0aW1lb3V0Omksb25Eb3dubG9hZFByb2dyZXNzOmYsb25VcGxvYWRQcm9ncmVzczpjLHJlc3BvbnNlVHlwZTpsLGhlYWRlcnM6YSx3aXRoQ3JlZGVudGlhbHM6ST0ic2FtZS1vcmlnaW4iLGZldGNoT3B0aW9uczp1fT1MQShBKTtsPWw/KGwrIiIpLnRvTG93ZXJDYXNlKCk6InRleHQiO2xldFtzLENdPW58fG98fGk/aHQoW24sb10saSk6W10scCxCLGQ9KCk9PnshcCYmc2V0VGltZW91dCgoKT0+e3MmJnMudW5zdWJzY3JpYmUoKX0pLHA9ITB9LEY7dHJ5e2lmKGMmJndvJiZ0IT09ImdldCImJnQhPT0iaGVhZCImJihGPWF3YWl0IFJvKGEscikpIT09MCl7bGV0IE89bmV3IFJlcXVlc3QoZSx7bWV0aG9kOiJQT1NUIixib2R5OnIsZHVwbGV4OiJoYWxmIn0pLEc7aWYoZy5pc0Zvcm1EYXRhKHIpJiYoRz1PLmhlYWRlcnMuZ2V0KCJjb250ZW50LXR5cGUiKSkmJmEuc2V0Q29udGVudFR5cGUoRyksTy5ib2R5KXtsZXRbWUEsUUFdPUllKEYsJChnZShjKSkpO3I9Q2UoTy5ib2R5LHd0LFlBLFFBLGNlKX19Zy5pc1N0cmluZyhJKXx8KEk9ST8iaW5jbHVkZSI6Im9taXQiKSxCPW5ldyBSZXF1ZXN0KGUsey4uLnUsc2lnbmFsOnMsbWV0aG9kOnQudG9VcHBlckNhc2UoKSxoZWFkZXJzOmEubm9ybWFsaXplKCkudG9KU09OKCksYm9keTpyLGR1cGxleDoiaGFsZiIsY3JlZGVudGlhbHM6SX0pO2xldCBtPWF3YWl0IGZldGNoKEIpLEw9QmUmJihsPT09InN0cmVhbSJ8fGw9PT0icmVzcG9uc2UiKTtpZihCZSYmKGZ8fEwpKXtsZXQgTz17fTtbInN0YXR1cyIsInN0YXR1c1RleHQiLCJoZWFkZXJzIl0uZm9yRWFjaChHZT0+e09bR2VdPW1bR2VdfSk7bGV0IEc9Zy50b0Zpbml0ZU51bWJlcihtLmhlYWRlcnMuZ2V0KCJjb250ZW50LWxlbmd0aCIpKSxbWUEsUUFdPWYmJkllKEcsJChnZShmKSwhMCkpfHxbXTttPW5ldyBSZXNwb25zZShDZShtLmJvZHksd3QsWUEsKCk9PntRQSYmUUEoKSxMJiZkKCl9LGNlKSxPKX1sPWx8fCJ0ZXh0IjtsZXQgWT1hd2FpdCBQQVtnLmZpbmRLZXkoUEEsbCl8fCJ0ZXh0Il0obSxBKTtyZXR1cm4hTCYmZCgpLEMmJkMoKSxhd2FpdCBuZXcgUHJvbWlzZSgoTyxHKT0+e2NBKE8sRyx7ZGF0YTpZLGhlYWRlcnM6Uy5mcm9tKG0uaGVhZGVycyksc3RhdHVzOm0uc3RhdHVzLHN0YXR1c1RleHQ6bS5zdGF0dXNUZXh0LGNvbmZpZzpBLHJlcXVlc3Q6Qn0pfSl9Y2F0Y2gobSl7dGhyb3cgZCgpLG0mJm0ubmFtZT09PSJUeXBlRXJyb3IiJiYvZmV0Y2gvaS50ZXN0KG0ubWVzc2FnZSk/T2JqZWN0LmFzc2lnbihuZXcgUSgiTmV0d29yayBFcnJvciIsUS5FUlJfTkVUV09SSyxBLEIpLHtjYXVzZTptLmNhdXNlfHxtfSk6US5mcm9tKG0sbSYmbS5jb2RlLEEsQil9fSk7dmFyIHVlPXtodHRwOmtBLHhocjp5dCxmZXRjaDpidH07Zy5mb3JFYWNoKHVlLChBLGUpPT57aWYoQSl7dHJ5e09iamVjdC5kZWZpbmVQcm9wZXJ0eShBLCJuYW1lIix7dmFsdWU6ZX0pfWNhdGNoe31PYmplY3QuZGVmaW5lUHJvcGVydHkoQSwiYWRhcHRlck5hbWUiLHt2YWx1ZTplfSl9fSk7dmFyIFN0PUE9PmAtICR7QX1gLGJvPUE9PmcuaXNGdW5jdGlvbihBKXx8QT09PW51bGx8fEE9PT0hMSxPQT17Z2V0QWRhcHRlcjpBPT57QT1nLmlzQXJyYXkoQSk/QTpbQV07bGV0e2xlbmd0aDplfT1BLHQscixuPXt9O2ZvcihsZXQgbz0wO288ZTtvKyspe3Q9QVtvXTtsZXQgaTtpZihyPXQsIWJvKHQpJiYocj11ZVsoaT1TdHJpbmcodCkpLnRvTG93ZXJDYXNlKCldLHI9PT12b2lkIDApKXRocm93IG5ldyBRKGBVbmtub3duIGFkYXB0ZXIgJyR7aX0nYCk7aWYocilicmVhaztuW2l8fCIjIitvXT1yfWlmKCFyKXtsZXQgbz1PYmplY3QuZW50cmllcyhuKS5tYXAoKFtmLGNdKT0+YGFkYXB0ZXIgJHtmfSBgKyhjPT09ITE/ImlzIG5vdCBzdXBwb3J0ZWQgYnkgdGhlIGVudmlyb25tZW50IjoiaXMgbm90IGF2YWlsYWJsZSBpbiB0aGUgYnVpbGQiKSksaT1lP28ubGVuZ3RoPjE/YHNpbmNlIDoKYCtvLm1hcChTdCkuam9pbihgCmApOiIgIitTdChvWzBdKToiYXMgbm8gYWRhcHRlciBzcGVjaWZpZWQiO3Rocm93IG5ldyBRKCJUaGVyZSBpcyBubyBzdWl0YWJsZSBhZGFwdGVyIHRvIGRpc3BhdGNoIHRoZSByZXF1ZXN0ICIraSwiRVJSX05PVF9TVVBQT1JUIil9cmV0dXJuIHJ9LGFkYXB0ZXJzOnVlfTtmdW5jdGlvbiBFZShBKXtpZihBLmNhbmNlbFRva2VuJiZBLmNhbmNlbFRva2VuLnRocm93SWZSZXF1ZXN0ZWQoKSxBLnNpZ25hbCYmQS5zaWduYWwuYWJvcnRlZCl0aHJvdyBuZXcgSihudWxsLEEpfWZ1bmN0aW9uIEdBKEEpe3JldHVybiBFZShBKSxBLmhlYWRlcnM9Uy5mcm9tKEEuaGVhZGVycyksQS5kYXRhPWZBLmNhbGwoQSxBLnRyYW5zZm9ybVJlcXVlc3QpLFsicG9zdCIsInB1dCIsInBhdGNoIl0uaW5kZXhPZihBLm1ldGhvZCkhPT0tMSYmQS5oZWFkZXJzLnNldENvbnRlbnRUeXBlKCJhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQiLCExKSxPQS5nZXRBZGFwdGVyKEEuYWRhcHRlcnx8Vi5hZGFwdGVyKShBKS50aGVuKGZ1bmN0aW9uKHIpe3JldHVybiBFZShBKSxyLmRhdGE9ZkEuY2FsbChBLEEudHJhbnNmb3JtUmVzcG9uc2Usciksci5oZWFkZXJzPVMuZnJvbShyLmhlYWRlcnMpLHJ9LGZ1bmN0aW9uKHIpe3JldHVybiBDQShyKXx8KEVlKEEpLHImJnIucmVzcG9uc2UmJihyLnJlc3BvbnNlLmRhdGE9ZkEuY2FsbChBLEEudHJhbnNmb3JtUmVzcG9uc2Usci5yZXNwb25zZSksci5yZXNwb25zZS5oZWFkZXJzPVMuZnJvbShyLnJlc3BvbnNlLmhlYWRlcnMpKSksUHJvbWlzZS5yZWplY3Qocil9KX12YXIgV0E9IjEuNy40Ijt2YXIgcGU9e307WyJvYmplY3QiLCJib29sZWFuIiwibnVtYmVyIiwiZnVuY3Rpb24iLCJzdHJpbmciLCJzeW1ib2wiXS5mb3JFYWNoKChBLGUpPT57cGVbQV09ZnVuY3Rpb24ocil7cmV0dXJuIHR5cGVvZiByPT09QXx8ImEiKyhlPDE/Im4gIjoiICIpK0F9fSk7dmFyIGt0PXt9O3BlLnRyYW5zaXRpb25hbD1mdW5jdGlvbihlLHQscil7ZnVuY3Rpb24gbihvLGkpe3JldHVybiJbQXhpb3MgdiIrV0ErIl0gVHJhbnNpdGlvbmFsIG9wdGlvbiAnIitvKyInIitpKyhyPyIuICIrcjoiIil9cmV0dXJuKG8saSxmKT0+e2lmKGU9PT0hMSl0aHJvdyBuZXcgUShuKGksIiBoYXMgYmVlbiByZW1vdmVkIisodD8iIGluICIrdDoiIikpLFEuRVJSX0RFUFJFQ0FURUQpO3JldHVybiB0JiYha3RbaV0mJihrdFtpXT0hMCxjb25zb2xlLndhcm4obihpLCIgaGFzIGJlZW4gZGVwcmVjYXRlZCBzaW5jZSB2Iit0KyIgYW5kIHdpbGwgYmUgcmVtb3ZlZCBpbiB0aGUgbmVhciBmdXR1cmUiKSkpLGU/ZShvLGksZik6ITB9fTtmdW5jdGlvbiBTbyhBLGUsdCl7aWYodHlwZW9mIEEhPSJvYmplY3QiKXRocm93IG5ldyBRKCJvcHRpb25zIG11c3QgYmUgYW4gb2JqZWN0IixRLkVSUl9CQURfT1BUSU9OX1ZBTFVFKTtsZXQgcj1PYmplY3Qua2V5cyhBKSxuPXIubGVuZ3RoO2Zvcig7bi0tID4wOyl7bGV0IG89cltuXSxpPWVbb107aWYoaSl7bGV0IGY9QVtvXSxjPWY9PT12b2lkIDB8fGkoZixvLEEpO2lmKGMhPT0hMCl0aHJvdyBuZXcgUSgib3B0aW9uICIrbysiIG11c3QgYmUgIitjLFEuRVJSX0JBRF9PUFRJT05fVkFMVUUpO2NvbnRpbnVlfWlmKHQhPT0hMCl0aHJvdyBuZXcgUSgiVW5rbm93biBvcHRpb24gIitvLFEuRVJSX0JBRF9PUFRJT04pfX12YXIgSkE9e2Fzc2VydE9wdGlvbnM6U28sdmFsaWRhdG9yczpwZX07dmFyIEg9SkEudmFsaWRhdG9ycyxBQT1jbGFzc3tjb25zdHJ1Y3RvcihlKXt0aGlzLmRlZmF1bHRzPWUsdGhpcy5pbnRlcmNlcHRvcnM9e3JlcXVlc3Q6bmV3IHRlLHJlc3BvbnNlOm5ldyB0ZX19YXN5bmMgcmVxdWVzdChlLHQpe3RyeXtyZXR1cm4gYXdhaXQgdGhpcy5fcmVxdWVzdChlLHQpfWNhdGNoKHIpe2lmKHIgaW5zdGFuY2VvZiBFcnJvcil7bGV0IG47RXJyb3IuY2FwdHVyZVN0YWNrVHJhY2U/RXJyb3IuY2FwdHVyZVN0YWNrVHJhY2Uobj17fSk6bj1uZXcgRXJyb3I7bGV0IG89bi5zdGFjaz9uLnN0YWNrLnJlcGxhY2UoL14uK1xuLywiIik6IiI7dHJ5e3Iuc3RhY2s/byYmIVN0cmluZyhyLnN0YWNrKS5lbmRzV2l0aChvLnJlcGxhY2UoL14uK1xuLitcbi8sIiIpKSYmKHIuc3RhY2srPWAKYCtvKTpyLnN0YWNrPW99Y2F0Y2h7fX10aHJvdyByfX1fcmVxdWVzdChlLHQpe3R5cGVvZiBlPT0ic3RyaW5nIj8odD10fHx7fSx0LnVybD1lKTp0PWV8fHt9LHQ9eCh0aGlzLmRlZmF1bHRzLHQpO2xldHt0cmFuc2l0aW9uYWw6cixwYXJhbXNTZXJpYWxpemVyOm4saGVhZGVyczpvfT10O3IhPT12b2lkIDAmJkpBLmFzc2VydE9wdGlvbnMocix7c2lsZW50SlNPTlBhcnNpbmc6SC50cmFuc2l0aW9uYWwoSC5ib29sZWFuKSxmb3JjZWRKU09OUGFyc2luZzpILnRyYW5zaXRpb25hbChILmJvb2xlYW4pLGNsYXJpZnlUaW1lb3V0RXJyb3I6SC50cmFuc2l0aW9uYWwoSC5ib29sZWFuKX0sITEpLG4hPW51bGwmJihnLmlzRnVuY3Rpb24obik/dC5wYXJhbXNTZXJpYWxpemVyPXtzZXJpYWxpemU6bn06SkEuYXNzZXJ0T3B0aW9ucyhuLHtlbmNvZGU6SC5mdW5jdGlvbixzZXJpYWxpemU6SC5mdW5jdGlvbn0sITApKSx0Lm1ldGhvZD0odC5tZXRob2R8fHRoaXMuZGVmYXVsdHMubWV0aG9kfHwiZ2V0IikudG9Mb3dlckNhc2UoKTtsZXQgaT1vJiZnLm1lcmdlKG8uY29tbW9uLG9bdC5tZXRob2RdKTtvJiZnLmZvckVhY2goWyJkZWxldGUiLCJnZXQiLCJoZWFkIiwicG9zdCIsInB1dCIsInBhdGNoIiwiY29tbW9uIl0sQz0+e2RlbGV0ZSBvW0NdfSksdC5oZWFkZXJzPVMuY29uY2F0KGksbyk7bGV0IGY9W10sYz0hMDt0aGlzLmludGVyY2VwdG9ycy5yZXF1ZXN0LmZvckVhY2goZnVuY3Rpb24ocCl7dHlwZW9mIHAucnVuV2hlbj09ImZ1bmN0aW9uIiYmcC5ydW5XaGVuKHQpPT09ITF8fChjPWMmJnAuc3luY2hyb25vdXMsZi51bnNoaWZ0KHAuZnVsZmlsbGVkLHAucmVqZWN0ZWQpKX0pO2xldCBsPVtdO3RoaXMuaW50ZXJjZXB0b3JzLnJlc3BvbnNlLmZvckVhY2goZnVuY3Rpb24ocCl7bC5wdXNoKHAuZnVsZmlsbGVkLHAucmVqZWN0ZWQpfSk7bGV0IGEsST0wLHU7aWYoIWMpe2xldCBDPVtHQS5iaW5kKHRoaXMpLHZvaWQgMF07Zm9yKEMudW5zaGlmdC5hcHBseShDLGYpLEMucHVzaC5hcHBseShDLGwpLHU9Qy5sZW5ndGgsYT1Qcm9taXNlLnJlc29sdmUodCk7STx1OylhPWEudGhlbihDW0krK10sQ1tJKytdKTtyZXR1cm4gYX11PWYubGVuZ3RoO2xldCBzPXQ7Zm9yKEk9MDtJPHU7KXtsZXQgQz1mW0krK10scD1mW0krK107dHJ5e3M9QyhzKX1jYXRjaChCKXtwLmNhbGwodGhpcyxCKTticmVha319dHJ5e2E9R0EuY2FsbCh0aGlzLHMpfWNhdGNoKEMpe3JldHVybiBQcm9taXNlLnJlamVjdChDKX1mb3IoST0wLHU9bC5sZW5ndGg7STx1OylhPWEudGhlbihsW0krK10sbFtJKytdKTtyZXR1cm4gYX1nZXRVcmkoZSl7ZT14KHRoaXMuZGVmYXVsdHMsZSk7bGV0IHQ9QkEoZS5iYXNlVVJMLGUudXJsKTtyZXR1cm4gZ0EodCxlLnBhcmFtcyxlLnBhcmFtc1NlcmlhbGl6ZXIpfX07Zy5mb3JFYWNoKFsiZGVsZXRlIiwiZ2V0IiwiaGVhZCIsIm9wdGlvbnMiXSxmdW5jdGlvbihlKXtBQS5wcm90b3R5cGVbZV09ZnVuY3Rpb24odCxyKXtyZXR1cm4gdGhpcy5yZXF1ZXN0KHgocnx8e30se21ldGhvZDplLHVybDp0LGRhdGE6KHJ8fHt9KS5kYXRhfSkpfX0pO2cuZm9yRWFjaChbInBvc3QiLCJwdXQiLCJwYXRjaCJdLGZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQocil7cmV0dXJuIGZ1bmN0aW9uKG8saSxmKXtyZXR1cm4gdGhpcy5yZXF1ZXN0KHgoZnx8e30se21ldGhvZDplLGhlYWRlcnM6cj97IkNvbnRlbnQtVHlwZSI6Im11bHRpcGFydC9mb3JtLWRhdGEifTp7fSx1cmw6byxkYXRhOml9KSl9fUFBLnByb3RvdHlwZVtlXT10KCksQUEucHJvdG90eXBlW2UrIkZvcm0iXT10KCEwKX0pO3ZhciB1QT1BQTt2YXIgUWU9Y2xhc3MgQXtjb25zdHJ1Y3RvcihlKXtpZih0eXBlb2YgZSE9ImZ1bmN0aW9uIil0aHJvdyBuZXcgVHlwZUVycm9yKCJleGVjdXRvciBtdXN0IGJlIGEgZnVuY3Rpb24uIik7bGV0IHQ7dGhpcy5wcm9taXNlPW5ldyBQcm9taXNlKGZ1bmN0aW9uKG8pe3Q9b30pO2xldCByPXRoaXM7dGhpcy5wcm9taXNlLnRoZW4obj0+e2lmKCFyLl9saXN0ZW5lcnMpcmV0dXJuO2xldCBvPXIuX2xpc3RlbmVycy5sZW5ndGg7Zm9yKDtvLS0gPjA7KXIuX2xpc3RlbmVyc1tvXShuKTtyLl9saXN0ZW5lcnM9bnVsbH0pLHRoaXMucHJvbWlzZS50aGVuPW49PntsZXQgbyxpPW5ldyBQcm9taXNlKGY9PntyLnN1YnNjcmliZShmKSxvPWZ9KS50aGVuKG4pO3JldHVybiBpLmNhbmNlbD1mdW5jdGlvbigpe3IudW5zdWJzY3JpYmUobyl9LGl9LGUoZnVuY3Rpb24obyxpLGYpe3IucmVhc29ufHwoci5yZWFzb249bmV3IEoobyxpLGYpLHQoci5yZWFzb24pKX0pfXRocm93SWZSZXF1ZXN0ZWQoKXtpZih0aGlzLnJlYXNvbil0aHJvdyB0aGlzLnJlYXNvbn1zdWJzY3JpYmUoZSl7aWYodGhpcy5yZWFzb24pe2UodGhpcy5yZWFzb24pO3JldHVybn10aGlzLl9saXN0ZW5lcnM/dGhpcy5fbGlzdGVuZXJzLnB1c2goZSk6dGhpcy5fbGlzdGVuZXJzPVtlXX11bnN1YnNjcmliZShlKXtpZighdGhpcy5fbGlzdGVuZXJzKXJldHVybjtsZXQgdD10aGlzLl9saXN0ZW5lcnMuaW5kZXhPZihlKTt0IT09LTEmJnRoaXMuX2xpc3RlbmVycy5zcGxpY2UodCwxKX1zdGF0aWMgc291cmNlKCl7bGV0IGU7cmV0dXJue3Rva2VuOm5ldyBBKGZ1bmN0aW9uKG4pe2U9bn0pLGNhbmNlbDplfX19LEZ0PVFlO2Z1bmN0aW9uIG1lKEEpe3JldHVybiBmdW5jdGlvbih0KXtyZXR1cm4gQS5hcHBseShudWxsLHQpfX1mdW5jdGlvbiBkZShBKXtyZXR1cm4gZy5pc09iamVjdChBKSYmQS5pc0F4aW9zRXJyb3I9PT0hMH12YXIgeWU9e0NvbnRpbnVlOjEwMCxTd2l0Y2hpbmdQcm90b2NvbHM6MTAxLFByb2Nlc3Npbmc6MTAyLEVhcmx5SGludHM6MTAzLE9rOjIwMCxDcmVhdGVkOjIwMSxBY2NlcHRlZDoyMDIsTm9uQXV0aG9yaXRhdGl2ZUluZm9ybWF0aW9uOjIwMyxOb0NvbnRlbnQ6MjA0LFJlc2V0Q29udGVudDoyMDUsUGFydGlhbENvbnRlbnQ6MjA2LE11bHRpU3RhdHVzOjIwNyxBbHJlYWR5UmVwb3J0ZWQ6MjA4LEltVXNlZDoyMjYsTXVsdGlwbGVDaG9pY2VzOjMwMCxNb3ZlZFBlcm1hbmVudGx5OjMwMSxGb3VuZDozMDIsU2VlT3RoZXI6MzAzLE5vdE1vZGlmaWVkOjMwNCxVc2VQcm94eTozMDUsVW51c2VkOjMwNixUZW1wb3JhcnlSZWRpcmVjdDozMDcsUGVybWFuZW50UmVkaXJlY3Q6MzA4LEJhZFJlcXVlc3Q6NDAwLFVuYXV0aG9yaXplZDo0MDEsUGF5bWVudFJlcXVpcmVkOjQwMixGb3JiaWRkZW46NDAzLE5vdEZvdW5kOjQwNCxNZXRob2ROb3RBbGxvd2VkOjQwNSxOb3RBY2NlcHRhYmxlOjQwNixQcm94eUF1dGhlbnRpY2F0aW9uUmVxdWlyZWQ6NDA3LFJlcXVlc3RUaW1lb3V0OjQwOCxDb25mbGljdDo0MDksR29uZTo0MTAsTGVuZ3RoUmVxdWlyZWQ6NDExLFByZWNvbmRpdGlvbkZhaWxlZDo0MTIsUGF5bG9hZFRvb0xhcmdlOjQxMyxVcmlUb29Mb25nOjQxNCxVbnN1cHBvcnRlZE1lZGlhVHlwZTo0MTUsUmFuZ2VOb3RTYXRpc2ZpYWJsZTo0MTYsRXhwZWN0YXRpb25GYWlsZWQ6NDE3LEltQVRlYXBvdDo0MTgsTWlzZGlyZWN0ZWRSZXF1ZXN0OjQyMSxVbnByb2Nlc3NhYmxlRW50aXR5OjQyMixMb2NrZWQ6NDIzLEZhaWxlZERlcGVuZGVuY3k6NDI0LFRvb0Vhcmx5OjQyNSxVcGdyYWRlUmVxdWlyZWQ6NDI2LFByZWNvbmRpdGlvblJlcXVpcmVkOjQyOCxUb29NYW55UmVxdWVzdHM6NDI5LFJlcXVlc3RIZWFkZXJGaWVsZHNUb29MYXJnZTo0MzEsVW5hdmFpbGFibGVGb3JMZWdhbFJlYXNvbnM6NDUxLEludGVybmFsU2VydmVyRXJyb3I6NTAwLE5vdEltcGxlbWVudGVkOjUwMSxCYWRHYXRld2F5OjUwMixTZXJ2aWNlVW5hdmFpbGFibGU6NTAzLEdhdGV3YXlUaW1lb3V0OjUwNCxIdHRwVmVyc2lvbk5vdFN1cHBvcnRlZDo1MDUsVmFyaWFudEFsc29OZWdvdGlhdGVzOjUwNixJbnN1ZmZpY2llbnRTdG9yYWdlOjUwNyxMb29wRGV0ZWN0ZWQ6NTA4LE5vdEV4dGVuZGVkOjUxMCxOZXR3b3JrQXV0aGVudGljYXRpb25SZXF1aXJlZDo1MTF9O09iamVjdC5lbnRyaWVzKHllKS5mb3JFYWNoKChbQSxlXSk9Pnt5ZVtlXT1BfSk7dmFyIFV0PXllO2Z1bmN0aW9uIFR0KEEpe2xldCBlPW5ldyB1QShBKSx0PWFBKHVBLnByb3RvdHlwZS5yZXF1ZXN0LGUpO3JldHVybiBnLmV4dGVuZCh0LHVBLnByb3RvdHlwZSxlLHthbGxPd25LZXlzOiEwfSksZy5leHRlbmQodCxlLG51bGwse2FsbE93bktleXM6ITB9KSx0LmNyZWF0ZT1mdW5jdGlvbihuKXtyZXR1cm4gVHQoeChBLG4pKX0sdH12YXIgUj1UdChWKTtSLkF4aW9zPXVBO1IuQ2FuY2VsZWRFcnJvcj1KO1IuQ2FuY2VsVG9rZW49RnQ7Ui5pc0NhbmNlbD1DQTtSLlZFUlNJT049V0E7Ui50b0Zvcm1EYXRhPU07Ui5BeGlvc0Vycm9yPVE7Ui5DYW5jZWw9Ui5DYW5jZWxlZEVycm9yO1IuYWxsPWZ1bmN0aW9uKGUpe3JldHVybiBQcm9taXNlLmFsbChlKX07Ui5zcHJlYWQ9bWU7Ui5pc0F4aW9zRXJyb3I9ZGU7Ui5tZXJnZUNvbmZpZz14O1IuQXhpb3NIZWFkZXJzPVM7Ui5mb3JtVG9KU09OPUE9PlRBKGcuaXNIVE1MRm9ybShBKT9uZXcgRm9ybURhdGEoQSk6QSk7Ui5nZXRBZGFwdGVyPU9BLmdldEFkYXB0ZXI7Ui5IdHRwU3RhdHVzQ29kZT1VdDtSLmRlZmF1bHQ9Ujt2YXIgZUE9Ujt2YXJ7QXhpb3M6UHMsQXhpb3NFcnJvcjp4cyxDYW5jZWxlZEVycm9yOk9zLGlzQ2FuY2VsOkdzLENhbmNlbFRva2VuOldzLFZFUlNJT046SnMsYWxsOk1zLENhbmNlbDpIcyxpc0F4aW9zRXJyb3I6cXMsc3ByZWFkOllzLHRvRm9ybURhdGE6S3MsQXhpb3NIZWFkZXJzOnZzLEh0dHBTdGF0dXNDb2RlOmpzLGZvcm1Ub0pTT046X3MsZ2V0QWRhcHRlcjp6cyxtZXJnZUNvbmZpZzpac309ZUE7YXN5bmMgZnVuY3Rpb24ga28oQSxlKXtsZXQgdD1BLHI9bnVsbDtpZih0PT1udWxsKXI9bmV3IFdvcmtlcihuZXcgVVJMKCIuL3dlYi13b3JrZXJzL2l0ay13YXNtLXBpcGVsaW5lLndvcmtlci5qcyIsaW1wb3J0Lm1ldGEudXJsKSx7dHlwZToibW9kdWxlIn0pO2Vsc2UgaWYodC5zdGFydHNXaXRoKCJodHRwIikpe2xldCBuPWF3YWl0IGVBLmdldCh0LHtyZXNwb25zZVR5cGU6ImJsb2IiLHBhcmFtczplfSksbz1VUkwuY3JlYXRlT2JqZWN0VVJMKG4uZGF0YSk7cj1uZXcgV29ya2VyKG8se3R5cGU6Im1vZHVsZSJ9KX1lbHNlIHI9bmV3IFdvcmtlcih0LHt0eXBlOiJtb2R1bGUifSk7cmV0dXJuIHJ9dmFyIEVBPWtvO2Z1bmN0aW9uIE50KEEpe2xldCBlPXpBKEEpLHQ9QTtyZXR1cm4gdC50ZXJtaW5hdGVkPSExLHQud29ya2VyUHJveHk9ZSx0Lm9yaWdpbmFsVGVybWluYXRlPXQudGVybWluYXRlLHQudGVybWluYXRlPSgpPT57dC50ZXJtaW5hdGVkPSEwLHQud29ya2VyUHJveHlbX0FdKCksdC5vcmlnaW5hbFRlcm1pbmF0ZSgpfSx7d29ya2VyUHJveHk6ZSx3b3JrZXI6dH19YXN5bmMgZnVuY3Rpb24gRm8oQSxlLHQpe2xldCByO2lmKEEhPW51bGwpe2xldCBvPUE7cmV0dXJuIG8ud29ya2VyUHJveHkhPT12b2lkIDA/KHI9by53b3JrZXJQcm94eSx7d29ya2VyUHJveHk6cix3b3JrZXI6b30pOk50KEEpfWxldCBuPWF3YWl0IEVBKGUsdCk7cmV0dXJuIE50KG4pfXZhciBMdD1Gbzthc3luYyBmdW5jdGlvbiBVbyhBLGUsdCl7bGV0IHI9InVua25vd24iO3R5cGVvZiBBIT0ic3RyaW5nIj9yPUEuaHJlZjpBLnN0YXJ0c1dpdGgoImh0dHAiKT9yPUE6cj10eXBlb2YgZTwidSI/YCR7ZX0vJHtBfWA6QSxyLmVuZHNXaXRoKCIuanMiKSYmKHI9ci5zdWJzdHJpbmcoMCxyLmxlbmd0aC0zKSksci5lbmRzV2l0aCgiLndhc20iKSYmKHI9ci5zdWJzdHJpbmcoMCxyLmxlbmd0aC01KSk7bGV0IG49YCR7cn0ud2FzbWAsaT0oYXdhaXQgZUEuZ2V0KG4se3Jlc3BvbnNlVHlwZToiYXJyYXlidWZmZXIiLHBhcmFtczp0fSkpLmRhdGE7cmV0dXJuKGF3YWl0IGltcG9ydChgJHtyfS5qc2ApKS5kZWZhdWx0KHt3YXNtQmluYXJ5Oml9KX12YXIgUHQ9VW87dmFyIHh0PWFzeW5jKCk9PldlYkFzc2VtYmx5LnZhbGlkYXRlKG5ldyBVaW50OEFycmF5KFswLDk3LDExNSwxMDksMSwwLDAsMCwxLDUsMSw5NiwwLDEsMTIzLDMsMiwxLDAsMTAsMTAsMSw4LDAsNjUsMCwyNTMsMTUsMjUzLDk4LDExXSkpO3ZhciBXdD10eXBlb2YgZ2xvYmFsVGhpcy5TaGFyZWRBcnJheUJ1ZmZlcj09ImZ1bmN0aW9uIixPdD1uZXcgVGV4dEVuY29kZXIsR3Q9bmV3IFRleHREZWNvZGVyKCJ1dGYtOCIpO2Z1bmN0aW9uIFRvKEEsZSl7bGV0IHQ9e2ZsYWdzOiJyIixlbmNvZGluZzoiYmluYXJ5In0scj1BLmZzX29wZW4oZSx0LmZsYWdzKSxvPUEuZnNfc3RhdChlKS5zaXplLGk9bnVsbDtXdD9pPW5ldyBTaGFyZWRBcnJheUJ1ZmZlcihvKTppPW5ldyBBcnJheUJ1ZmZlcihvKTtsZXQgZj1uZXcgVWludDhBcnJheShpKTtyZXR1cm4gQS5mc19yZWFkKHIsZiwwLG8sMCksQS5mc19jbG9zZShyKSxmfWZ1bmN0aW9uIEp0KEEsZSx0KXtsZXQgcj1udWxsO1d0P3I9bmV3IFNoYXJlZEFycmF5QnVmZmVyKHQpOnI9bmV3IEFycmF5QnVmZmVyKHQpO2xldCBuPW5ldyBVaW50OEFycmF5KHIpLG89bmV3IFVpbnQ4QXJyYXkoQS5IRUFQVTguYnVmZmVyLGUsdCk7cmV0dXJuIG4uc2V0KG8pLG59ZnVuY3Rpb24gYihBLGUsdCxyKXtsZXQgbj0wO3JldHVybiBlIT09bnVsbCYmKG49QS5jY2FsbCgiaXRrX3dhc21faW5wdXRfYXJyYXlfYWxsb2MiLCJudW1iZXIiLFsibnVtYmVyIiwibnVtYmVyIiwibnVtYmVyIiwibnVtYmVyIl0sWzAsdCxyLGUuYnVmZmVyLmJ5dGVMZW5ndGhdKSxBLkhFQVBVOC5zZXQobmV3IFVpbnQ4QXJyYXkoZS5idWZmZXIpLG4pKSxufWZ1bmN0aW9uIHEoQSxlLHQpe2xldCByPUpTT04uc3RyaW5naWZ5KGUpLG49QS5sZW5ndGhCeXRlc1VURjgocikrMSxvPUEuY2NhbGwoIml0a193YXNtX2lucHV0X2pzb25fYWxsb2MiLCJudW1iZXIiLFsibnVtYmVyIiwibnVtYmVyIiwibnVtYmVyIl0sWzAsdCxuXSk7QS5zdHJpbmdUb1VURjgocixvLG4pfWZ1bmN0aW9uIFUoQSxlLHQscil7bGV0IG49QS5jY2FsbCgiaXRrX3dhc21fb3V0cHV0X2FycmF5X2FkZHJlc3MiLCJudW1iZXIiLFsibnVtYmVyIiwibnVtYmVyIiwibnVtYmVyIl0sWzAsZSx0XSksbz1BLmNjYWxsKCJpdGtfd2FzbV9vdXRwdXRfYXJyYXlfc2l6ZSIsIm51bWJlciIsWyJudW1iZXIiLCJudW1iZXIiLCJudW1iZXIiXSxbMCxlLHRdKSxpPUp0KEEsbixvKTtyZXR1cm4gVyhyLGkuYnVmZmVyKX1mdW5jdGlvbiBwQShBLGUpe2xldCB0PUEuY2NhbGwoIml0a193YXNtX291dHB1dF9qc29uX2FkZHJlc3MiLCJudW1iZXIiLFsibnVtYmVyIiwibnVtYmVyIl0sWzAsZV0pLHI9QS5VVEY4VG9TdHJpbmcodCk7cmV0dXJuIEpTT04ucGFyc2Uocil9ZnVuY3Rpb24gTm8oQSxlLHQscil7ciE9bnVsbCYmci5sZW5ndGg+MCYmci5mb3JFYWNoKGZ1bmN0aW9uKGwsYSl7c3dpdGNoKGwudHlwZSl7Y2FzZSBFLlRleHRTdHJlYW06e2xldCBJPU90LmVuY29kZShsLmRhdGEuZGF0YSksdT1iKEEsSSxhLDApLHM9e3NpemU6SS5idWZmZXIuYnl0ZUxlbmd0aCxkYXRhOmBkYXRhOmFwcGxpY2F0aW9uL3ZuZC5pdGsuYWRkcmVzcywwOiR7dX1gfTtxKEEscyxhKTticmVha31jYXNlIEUuSnNvbkNvbXBhdGlibGU6e2xldCBJPU90LmVuY29kZShKU09OLnN0cmluZ2lmeShsLmRhdGEpKSx1PWIoQSxJLGEsMCkscz17c2l6ZTpJLmJ1ZmZlci5ieXRlTGVuZ3RoLGRhdGE6YGRhdGE6YXBwbGljYXRpb24vdm5kLml0ay5hZGRyZXNzLDA6JHt1fWB9O3EoQSxzLGEpO2JyZWFrfWNhc2UgRS5CaW5hcnlTdHJlYW06e2xldCBJPWwuZGF0YS5kYXRhLHU9YihBLEksYSwwKSxzPXtzaXplOkkuYnVmZmVyLmJ5dGVMZW5ndGgsZGF0YTpgZGF0YTphcHBsaWNhdGlvbi92bmQuaXRrLmFkZHJlc3MsMDoke3V9YH07cShBLHMsYSk7YnJlYWt9Y2FzZSBFLlRleHRGaWxlOntBLmZzX3dyaXRlRmlsZShsLmRhdGEucGF0aCxsLmRhdGEuZGF0YSk7YnJlYWt9Y2FzZSBFLkJpbmFyeUZpbGU6e0EuZnNfd3JpdGVGaWxlKGwuZGF0YS5wYXRoLGwuZGF0YS5kYXRhKTticmVha31jYXNlIEUuSW1hZ2U6e2xldCBJPWwuZGF0YSx1PWIoQSxJLmRhdGEsYSwwKSxzPWIoQSxJLmRpcmVjdGlvbixhLDEpLEM9dHlwZW9mIEkubWV0YWRhdGE/LmVudHJpZXM8InUiP0FycmF5LmZyb20oSS5tZXRhZGF0YS5lbnRyaWVzKCkpOltdLHA9e2ltYWdlVHlwZTpJLmltYWdlVHlwZSxuYW1lOkkubmFtZSxvcmlnaW46SS5vcmlnaW4sc3BhY2luZzpJLnNwYWNpbmcsZGlyZWN0aW9uOmBkYXRhOmFwcGxpY2F0aW9uL3ZuZC5pdGsuYWRkcmVzcywwOiR7c31gLHNpemU6SS5zaXplLGRhdGE6YGRhdGE6YXBwbGljYXRpb24vdm5kLml0ay5hZGRyZXNzLDA6JHt1fWAsbWV0YWRhdGE6Q307cShBLHAsYSk7YnJlYWt9Y2FzZSBFLk1lc2g6e2xldCBJPWwuZGF0YSx1PWIoQSxJLnBvaW50cyxhLDApLHM9YihBLEkuY2VsbHMsYSwxKSxDPWIoQSxJLnBvaW50RGF0YSxhLDIpLHA9YihBLEkuY2VsbERhdGEsYSwzKSxCPXttZXNoVHlwZTpJLm1lc2hUeXBlLG5hbWU6SS5uYW1lLG51bWJlck9mUG9pbnRzOkkubnVtYmVyT2ZQb2ludHMscG9pbnRzOmBkYXRhOmFwcGxpY2F0aW9uL3ZuZC5pdGsuYWRkcmVzcywwOiR7dX1gLG51bWJlck9mQ2VsbHM6SS5udW1iZXJPZkNlbGxzLGNlbGxzOmBkYXRhOmFwcGxpY2F0aW9uL3ZuZC5pdGsuYWRkcmVzcywwOiR7c31gLGNlbGxCdWZmZXJTaXplOkkuY2VsbEJ1ZmZlclNpemUsbnVtYmVyT2ZQb2ludFBpeGVsczpJLm51bWJlck9mUG9pbnRQaXhlbHMscG9pbnREYXRhOmBkYXRhOmFwcGxpY2F0aW9uL3ZuZC5pdGsuYWRkcmVzcywwOiR7Q31gLG51bWJlck9mQ2VsbFBpeGVsczpJLm51bWJlck9mQ2VsbFBpeGVscyxjZWxsRGF0YTpgZGF0YTphcHBsaWNhdGlvbi92bmQuaXRrLmFkZHJlc3MsMDoke3B9YH07cShBLEIsYSk7YnJlYWt9Y2FzZSBFLlBvaW50U2V0OntsZXQgST1sLmRhdGEsdT1iKEEsSS5wb2ludHMsYSwwKSxzPWIoQSxJLnBvaW50RGF0YSxhLDEpLEM9e3BvaW50U2V0VHlwZTpJLnBvaW50U2V0VHlwZSxuYW1lOkkubmFtZSxudW1iZXJPZlBvaW50czpJLm51bWJlck9mUG9pbnRzLHBvaW50czpgZGF0YTphcHBsaWNhdGlvbi92bmQuaXRrLmFkZHJlc3MsMDoke3V9YCxudW1iZXJPZlBvaW50UGl4ZWxzOkkubnVtYmVyT2ZQb2ludFBpeGVscyxwb2ludERhdGE6YGRhdGE6YXBwbGljYXRpb24vdm5kLml0ay5hZGRyZXNzLDA6JHtzfWB9O3EoQSxDLGEpO2JyZWFrfWNhc2UgRS5UcmFuc2Zvcm1MaXN0OntsZXQgST1sLmRhdGEsdT1bXTtJLmZvckVhY2goKHMsQyk9PntsZXQgQj1gZGF0YTphcHBsaWNhdGlvbi92bmQuaXRrLmFkZHJlc3MsMDoke2IoQSxzLmZpeGVkUGFyYW1ldGVycyxhLEMqMil9YCxGPWBkYXRhOmFwcGxpY2F0aW9uL3ZuZC5pdGsuYWRkcmVzcywwOiR7YihBLHMucGFyYW1ldGVycyxhLEMqMisxKX1gLG09e3RyYW5zZm9ybVR5cGU6cy50cmFuc2Zvcm1UeXBlLG51bWJlck9mRml4ZWRQYXJhbWV0ZXJzOnMubnVtYmVyT2ZGaXhlZFBhcmFtZXRlcnMsbnVtYmVyT2ZQYXJhbWV0ZXJzOnMubnVtYmVyT2ZQYXJhbWV0ZXJzLG5hbWU6cy5uYW1lLGlucHV0U3BhY2VOYW1lOnMuaW5wdXRTcGFjZU5hbWUsb3V0cHV0U3BhY2VOYW1lOnMub3V0cHV0U3BhY2VOYW1lLHBhcmFtZXRlcnM6RixmaXhlZFBhcmFtZXRlcnM6Qn07dS5wdXNoKG0pfSkscShBLHUsYSk7YnJlYWt9Y2FzZSBFLlBvbHlEYXRhOntsZXQgST1sLmRhdGEsdT1iKEEsSS5wb2ludHMsYSwwKSxzPWIoQSxJLnZlcnRpY2VzLGEsMSksQz1iKEEsSS5saW5lcyxhLDIpLHA9YihBLEkucG9seWdvbnMsYSwzKSxCPWIoQSxJLnRyaWFuZ2xlU3RyaXBzLGEsNCksZD1iKEEsSS5wb2ludERhdGEsYSw1KSxGPWIoQSxJLnBvaW50RGF0YSxhLDYpLG09e3BvbHlEYXRhVHlwZTpJLnBvbHlEYXRhVHlwZSxuYW1lOkkubmFtZSxudW1iZXJPZlBvaW50czpJLm51bWJlck9mUG9pbnRzLHBvaW50czpgZGF0YTphcHBsaWNhdGlvbi92bmQuaXRrLmFkZHJlc3MsMDoke3V9YCx2ZXJ0aWNlc0J1ZmZlclNpemU6SS52ZXJ0aWNlc0J1ZmZlclNpemUsdmVydGljZXM6YGRhdGE6YXBwbGljYXRpb24vdm5kLml0ay5hZGRyZXNzLDA6JHtzfWAsbGluZXNCdWZmZXJTaXplOkkubGluZXNCdWZmZXJTaXplLGxpbmVzOmBkYXRhOmFwcGxpY2F0aW9uL3ZuZC5pdGsuYWRkcmVzcywwOiR7Q31gLHBvbHlnb25zQnVmZmVyU2l6ZTpJLnBvbHlnb25zQnVmZmVyU2l6ZSxwb2x5Z29uczpgZGF0YTphcHBsaWNhdGlvbi92bmQuaXRrLmFkZHJlc3MsMDoke3B9YCx0cmlhbmdsZVN0cmlwc0J1ZmZlclNpemU6SS50cmlhbmdsZVN0cmlwc0J1ZmZlclNpemUsdHJpYW5nbGVTdHJpcHM6YGRhdGE6YXBwbGljYXRpb24vdm5kLml0ay5hZGRyZXNzLDA6JHtCfWAsbnVtYmVyT2ZQb2ludFBpeGVsczpJLm51bWJlck9mUG9pbnRQaXhlbHMscG9pbnREYXRhOmBkYXRhOmFwcGxpY2F0aW9uL3ZuZC5pdGsuYWRkcmVzcywwOiR7ZH1gLG51bWJlck9mQ2VsbFBpeGVsczpJLm51bWJlck9mQ2VsbFBpeGVscyxjZWxsRGF0YTpgZGF0YTphcHBsaWNhdGlvbi92bmQuaXRrLmFkZHJlc3MsMDoke0Z9YH07cShBLG0sYSk7YnJlYWt9ZGVmYXVsdDp0aHJvdyBFcnJvcigiVW5zdXBwb3J0ZWQgaW5wdXQgSW50ZXJmYWNlVHlwZSIpfX0pLEEucmVzZXRNb2R1bGVTdGRvdXQoKSxBLnJlc2V0TW9kdWxlU3RkZXJyKCk7bGV0IG49QS5zdGFja1NhdmUoKSxvPTA7dHJ5e289QS5jYWxsTWFpbihlLnNsaWNlKCkpfWNhdGNoKGwpe3Rocm93IHR5cGVvZiBsPT0ibnVtYmVyIiYmKGNvbnNvbGUubG9nKCJFeGNlcHRpb24gd2hpbGUgcnVubmluZyBwaXBlbGluZToiKSxjb25zb2xlLmxvZygic3Rkb3V0OiIsQS5nZXRNb2R1bGVTdGRvdXQoKSksY29uc29sZS5lcnJvcigic3RkZXJyOiIsQS5nZXRNb2R1bGVTdGRlcnIoKSksdHlwZW9mIEEuZ2V0RXhjZXB0aW9uTWVzc2FnZTwidSI/Y29uc29sZS5lcnJvcigiZXhjZXB0aW9uOiIsQS5nZXRFeGNlcHRpb25NZXNzYWdlKGwpKTpjb25zb2xlLmVycm9yKCJCdWlsZCBtb2R1bGUgaW4gRGVidWcgbW9kZSBmb3IgZXhjZXB0aW9uIG1lc3NhZ2UgaW5mb3JtYXRpb24uIikpLGx9ZmluYWxseXtBLnN0YWNrUmVzdG9yZShuKX1sZXQgaT1BLmdldE1vZHVsZVN0ZG91dCgpLGY9QS5nZXRNb2R1bGVTdGRlcnIoKSxjPVtdO3JldHVybiB0IT1udWxsJiZ0Lmxlbmd0aD4wJiZvPT09MCYmdC5mb3JFYWNoKGZ1bmN0aW9uKGwsYSl7bGV0IEk9bnVsbDtzd2l0Y2gobC50eXBlKXtjYXNlIEUuVGV4dFN0cmVhbTp7bGV0IHM9QS5jY2FsbCgiaXRrX3dhc21fb3V0cHV0X2FycmF5X2FkZHJlc3MiLCJudW1iZXIiLFsibnVtYmVyIiwibnVtYmVyIiwibnVtYmVyIl0sWzAsYSwwXSksQz1BLmNjYWxsKCJpdGtfd2FzbV9vdXRwdXRfYXJyYXlfc2l6ZSIsIm51bWJlciIsWyJudW1iZXIiLCJudW1iZXIiLCJudW1iZXIiXSxbMCxhLDBdKSxwPW5ldyBVaW50OEFycmF5KEEuSEVBUFU4LmJ1ZmZlcixzLEMpO0k9e2RhdGE6R3QuZGVjb2RlKHApfTticmVha31jYXNlIEUuSnNvbkNvbXBhdGlibGU6e2xldCBzPUEuY2NhbGwoIml0a193YXNtX291dHB1dF9hcnJheV9hZGRyZXNzIiwibnVtYmVyIixbIm51bWJlciIsIm51bWJlciIsIm51bWJlciJdLFswLGEsMF0pLEM9QS5jY2FsbCgiaXRrX3dhc21fb3V0cHV0X2FycmF5X3NpemUiLCJudW1iZXIiLFsibnVtYmVyIiwibnVtYmVyIiwibnVtYmVyIl0sWzAsYSwwXSkscD1uZXcgVWludDhBcnJheShBLkhFQVBVOC5idWZmZXIscyxDKTtJPUpTT04ucGFyc2UoR3QuZGVjb2RlKHApKTticmVha31jYXNlIEUuQmluYXJ5U3RyZWFtOntsZXQgcz1BLmNjYWxsKCJpdGtfd2FzbV9vdXRwdXRfYXJyYXlfYWRkcmVzcyIsIm51bWJlciIsWyJudW1iZXIiLCJudW1iZXIiLCJudW1iZXIiXSxbMCxhLDBdKSxDPUEuY2NhbGwoIml0a193YXNtX291dHB1dF9hcnJheV9zaXplIiwibnVtYmVyIixbIm51bWJlciIsIm51bWJlciIsIm51bWJlciJdLFswLGEsMF0pO0k9e2RhdGE6SnQoQSxzLEMpfTticmVha31jYXNlIEUuVGV4dEZpbGU6e0k9e3BhdGg6bC5kYXRhLnBhdGgsZGF0YTpBLmZzX3JlYWRGaWxlKGwuZGF0YS5wYXRoLHtlbmNvZGluZzoidXRmOCJ9KX07YnJlYWt9Y2FzZSBFLkJpbmFyeUZpbGU6e0k9e3BhdGg6bC5kYXRhLnBhdGgsZGF0YTpUbyhBLGwuZGF0YS5wYXRoKX07YnJlYWt9Y2FzZSBFLkltYWdlOntsZXQgcz1wQShBLGEpO3MuZGF0YT1VKEEsYSwwLHMuaW1hZ2VUeXBlLmNvbXBvbmVudFR5cGUpLHMuZGlyZWN0aW9uPVUoQSxhLDEsai5GbG9hdDY0KSxzLm1ldGFkYXRhPW5ldyBNYXAocy5tZXRhZGF0YSksST1zO2JyZWFrfWNhc2UgRS5NZXNoOntsZXQgcz1wQShBLGEpO3MubnVtYmVyT2ZQb2ludHM+MD9zLnBvaW50cz1VKEEsYSwwLHMubWVzaFR5cGUucG9pbnRDb21wb25lbnRUeXBlKTpzLnBvaW50cz1XKHMubWVzaFR5cGUucG9pbnRDb21wb25lbnRUeXBlLG5ldyBBcnJheUJ1ZmZlcigwKSkscy5udW1iZXJPZkNlbGxzPjA/cy5jZWxscz1VKEEsYSwxLHMubWVzaFR5cGUuY2VsbENvbXBvbmVudFR5cGUpOnMuY2VsbHM9VyhzLm1lc2hUeXBlLmNlbGxDb21wb25lbnRUeXBlLG5ldyBBcnJheUJ1ZmZlcigwKSkscy5udW1iZXJPZlBvaW50UGl4ZWxzPjA/cy5wb2ludERhdGE9VShBLGEsMixzLm1lc2hUeXBlLnBvaW50UGl4ZWxDb21wb25lbnRUeXBlKTpzLnBvaW50RGF0YT1XKHMubWVzaFR5cGUucG9pbnRQaXhlbENvbXBvbmVudFR5cGUsbmV3IEFycmF5QnVmZmVyKDApKSxzLm51bWJlck9mQ2VsbFBpeGVscz4wP3MuY2VsbERhdGE9VShBLGEsMyxzLm1lc2hUeXBlLmNlbGxQaXhlbENvbXBvbmVudFR5cGUpOnMuY2VsbERhdGE9VyhzLm1lc2hUeXBlLmNlbGxQaXhlbENvbXBvbmVudFR5cGUsbmV3IEFycmF5QnVmZmVyKDApKSxJPXM7YnJlYWt9Y2FzZSBFLlBvaW50U2V0OntsZXQgcz1wQShBLGEpO3MubnVtYmVyT2ZQb2ludHM+MD9zLnBvaW50cz1VKEEsYSwwLHMucG9pbnRTZXRUeXBlLnBvaW50Q29tcG9uZW50VHlwZSk6cy5wb2ludHM9VyhzLnBvaW50U2V0VHlwZS5wb2ludENvbXBvbmVudFR5cGUsbmV3IEFycmF5QnVmZmVyKDApKSxzLm51bWJlck9mUG9pbnRQaXhlbHM+MD9zLnBvaW50RGF0YT1VKEEsYSwxLHMucG9pbnRTZXRUeXBlLnBvaW50UGl4ZWxDb21wb25lbnRUeXBlKTpzLnBvaW50RGF0YT1XKHMucG9pbnRTZXRUeXBlLnBvaW50UGl4ZWxDb21wb25lbnRUeXBlLG5ldyBBcnJheUJ1ZmZlcigwKSksST1zO2JyZWFrfWNhc2UgRS5UcmFuc2Zvcm1MaXN0OntsZXQgcz1wQShBLGEpO3MuZm9yRWFjaCgoQyxwKT0+e0MubnVtYmVyT2ZGaXhlZFBhcmFtZXRlcnM+MCYmKHNbcF0uZml4ZWRQYXJhbWV0ZXJzPVUoQSxhLHAqMixDLnRyYW5zZm9ybVR5cGUucGFyYW1ldGVyc1ZhbHVlVHlwZSkpLEMubnVtYmVyT2ZGaXhlZFBhcmFtZXRlcnM+MCYmKHNbcF0ucGFyYW1ldGVycz1VKEEsYSxwKjIrMSxDLnRyYW5zZm9ybVR5cGUucGFyYW1ldGVyc1ZhbHVlVHlwZSkpfSksST1zO2JyZWFrfWNhc2UgRS5Qb2x5RGF0YTp7bGV0IHM9cEEoQSxhKTtzLm51bWJlck9mUG9pbnRzPjA/cy5wb2ludHM9VShBLGEsMCxqLkZsb2F0MzIpOnMucG9pbnRzPW5ldyBGbG9hdDMyQXJyYXkscy52ZXJ0aWNlc0J1ZmZlclNpemU+MD9zLnZlcnRpY2VzPVUoQSxhLDEsVC5VSW50MzIpOnMudmVydGljZXM9bmV3IFVpbnQzMkFycmF5LHMubGluZXNCdWZmZXJTaXplPjA/cy5saW5lcz1VKEEsYSwyLFQuVUludDMyKTpzLmxpbmVzPW5ldyBVaW50MzJBcnJheSxzLnBvbHlnb25zQnVmZmVyU2l6ZT4wP3MucG9seWdvbnM9VShBLGEsMyxULlVJbnQzMik6cy5wb2x5Z29ucz1uZXcgVWludDMyQXJyYXkscy50cmlhbmdsZVN0cmlwc0J1ZmZlclNpemU+MD9zLnRyaWFuZ2xlU3RyaXBzPVUoQSxhLDQsVC5VSW50MzIpOnMudHJpYW5nbGVTdHJpcHM9bmV3IFVpbnQzMkFycmF5LHMubnVtYmVyT2ZQb2ludFBpeGVscz4wP3MucG9pbnREYXRhPVUoQSxhLDUscy5wb2x5RGF0YVR5cGUucG9pbnRQaXhlbENvbXBvbmVudFR5cGUpOnMucG9pbnREYXRhPVcocy5wb2x5RGF0YVR5cGUucG9pbnRQaXhlbENvbXBvbmVudFR5cGUsbmV3IEFycmF5QnVmZmVyKDApKSxzLm51bWJlck9mQ2VsbFBpeGVscz4wP3MuY2VsbERhdGE9VShBLGEsNixzLnBvbHlEYXRhVHlwZS5jZWxsUGl4ZWxDb21wb25lbnRUeXBlKTpzLmNlbGxEYXRhPVcocy5wb2x5RGF0YVR5cGUuY2VsbFBpeGVsQ29tcG9uZW50VHlwZSxuZXcgQXJyYXlCdWZmZXIoMCkpLEk9czticmVha31kZWZhdWx0OnRocm93IEVycm9yKCJVbnN1cHBvcnRlZCBvdXRwdXQgSW50ZXJmYWNlVHlwZSIpfWxldCB1PXt0eXBlOmwudHlwZSxkYXRhOkl9O2MucHVzaCh1KX0pLHtyZXR1cm5WYWx1ZTpvLHN0ZG91dDppLHN0ZGVycjpmLG91dHB1dHM6Y319dmFyIE10PU5vO3ZhciBMbz10eXBlb2YgZ2xvYmFsVGhpcy5TaGFyZWRBcnJheUJ1ZmZlcjwidSI7ZnVuY3Rpb24gUG8oQSxlKXtpZihBPT1udWxsKXJldHVybltdO2xldCB0PVtdO2ZvcihsZXQgcj0wO3I8QS5sZW5ndGg7cisrKXtsZXQgbj14byhBW3JdLGUpO24hPT1udWxsJiZ0LnB1c2gobil9cmV0dXJuIHR9ZnVuY3Rpb24geG8oQSxlKXtpZihBPT1udWxsKXJldHVybiBudWxsO2xldCB0PW51bGw7cmV0dXJuIEEuYnVmZmVyIT09dm9pZCAwP3Q9QS5idWZmZXI6QS5ieXRlTGVuZ3RoIT09dm9pZCAwJiYodD1BKSxMbyYmdCBpbnN0YW5jZW9mIFNoYXJlZEFycmF5QnVmZmVyP251bGw6ZT90OnQuc2xpY2UoMCl9dmFyIEh0PVBvO2Z1bmN0aW9uIE9vKEEpe3JldHVybltBLmRhdGEsQS5kaXJlY3Rpb25dfXZhciBxdD1PbztmdW5jdGlvbiBHbyhBKXtyZXR1cm5bQS5wb2ludHMsQS5wb2ludERhdGEsQS5jZWxscyxBLmNlbGxEYXRhXX12YXIgWXQ9R287ZnVuY3Rpb24gV28oQSl7cmV0dXJuW0EucG9pbnRzLEEudmVydGljZXMsQS5saW5lcyxBLnBvbHlnb25zLEEudHJpYW5nbGVTdHJpcHMsQS5wb2ludERhdGEsQS5jZWxsRGF0YV19dmFyIEt0PVdvO3ZhciBKbztmdW5jdGlvbiBNQSgpe3JldHVybiBKb312YXIgTW87ZnVuY3Rpb24gdnQoKXtyZXR1cm4gTW99dmFyIEhvO2Z1bmN0aW9uIEhBKCl7cmV0dXJuIEhvfXZhciBoZT1uZXcgTWFwO2Z1bmN0aW9uIHFvKCl7bGV0IEE9SEEoKTtyZXR1cm4gdHlwZW9mIEE+InUiJiYoQT1udWxsKSxBfWZ1bmN0aW9uIGp0KCl7bGV0IEE9TUEoKTtyZXR1cm4gdHlwZW9mIEE+InUiJiYoQT1uZXcgVVJMKCIvcGlwZWxpbmVzIixkb2N1bWVudC5sb2NhdGlvbi5vcmlnaW4pLmhyZWYpLEF9ZnVuY3Rpb24gcUEoKXtsZXQgQT12dCgpO3JldHVybiB0eXBlb2YgQT4idSImJihBPXt9KSxBfWFzeW5jIGZ1bmN0aW9uIFlvKEEsZSx0KXtsZXQgcj1BLG49QTtpZih0eXBlb2YgQSE9InN0cmluZyImJihyPW5ldyBVUkwoQS5ocmVmKSxuPXIuaHJlZiksaGUuaGFzKG4pKXJldHVybiBoZS5nZXQobik7e2xldCBvPWF3YWl0IFB0KEEsZT8udG9TdHJpbmcoKT8/anQoKSx0Pz9xQSgpKTtyZXR1cm4gaGUuc2V0KG4sbyksb319YXN5bmMgZnVuY3Rpb24gS28oQSxlLHQscixuKXtpZighYXdhaXQgeHQoKSl7bGV0IEI9IldlYkFzc2VtYmx5IFNJTUQgc3VwcG9ydCBpcyByZXF1aXJlZCAtLSBwbGVhc2UgdXBkYXRlIHlvdXIgYnJvd3Nlci4iO3Rocm93IGFsZXJ0KEIpLG5ldyBFcnJvcihCKX1sZXQgbz1uPy53ZWJXb3JrZXI/P251bGw7aWYobz09PSExKXtsZXQgQj1hd2FpdCBZbyhBLnRvU3RyaW5nKCksbj8ucGlwZWxpbmVCYXNlVXJsLG4/LnBpcGVsaW5lUXVlcnlQYXJhbXM/P3FBKCkpO3JldHVybiBNdChCLGUsdCxyKX1sZXQgaT1vLGY9bj8ucGlwZWxpbmVXb3JrZXJVcmw/P3FvKCksYz10eXBlb2YgZiE9InN0cmluZyImJnR5cGVvZiBmPy5ocmVmPCJ1Ij9mLmhyZWY6Zix7d29ya2VyUHJveHk6bCx3b3JrZXI6YX09YXdhaXQgTHQoaSxjLG4/LnBpcGVsaW5lUXVlcnlQYXJhbXM/P3FBKCkpO2k9YTtsZXQgST1bXTtyIT1udWxsJiZyLmxlbmd0aD4wJiZyLmZvckVhY2goZnVuY3Rpb24oQil7aWYoQi50eXBlPT09RS5CaW5hcnlTdHJlYW0pe2xldCBkPUIuZGF0YS5kYXRhO0kucHVzaChkKX1lbHNlIGlmKEIudHlwZT09PUUuQmluYXJ5RmlsZSl7bGV0IGQ9Qi5kYXRhLmRhdGE7SS5wdXNoKGQpfWVsc2UgaWYoQi50eXBlPT09RS5JbWFnZSl7bGV0IGQ9Qi5kYXRhO2QuZGF0YSE9PW51bGwmJkkucHVzaCguLi5xdChkKSl9ZWxzZSBpZihCLnR5cGU9PT1FLk1lc2gpe2xldCBkPUIuZGF0YTtJLnB1c2goLi4uWXQoZCkpfWVsc2UgaWYoQi50eXBlPT09RS5Qb2x5RGF0YSl7bGV0IGQ9Qi5kYXRhO0kucHVzaCguLi5LdChkKSl9fSk7bGV0IHU9bj8ucGlwZWxpbmVCYXNlVXJsPz9qdCgpLHM9dHlwZW9mIHUhPSJzdHJpbmciJiZ0eXBlb2YgdT8uaHJlZjwidSI/dS5ocmVmOnUsQz1yIT1udWxsP1pBKHIsSHQoSSxuPy5ub0NvcHkpKTpudWxsLHA9YXdhaXQgbC5ydW5QaXBlbGluZShBLnRvU3RyaW5nKCkscyxlLHQsQyxuPy5waXBlbGluZVF1ZXJ5UGFyYW1zPz9xQSgpKTtyZXR1cm57cmV0dXJuVmFsdWU6cC5yZXR1cm5WYWx1ZSxzdGRvdXQ6cC5zdGRvdXQsc3RkZXJyOnAuc3RkZXJyLG91dHB1dHM6cC5vdXRwdXRzLHdlYldvcmtlcjppfX12YXIgaD1Lbzt2YXIgdm89bnVsbDtmdW5jdGlvbiBfdCgpe3JldHVybiB2b312YXIgam89bmV3IE1hcChbXSksdEE9am87dmFyIF9vPW5ldyBNYXAoW1siaDUiLCJoZGY1Il0sWyJoZGY1IiwiaGRmNSJdLFsidHh0IiwidHh0Il0sWyJtYXQiLCJtYXQiXSxbInhmbSIsIm1uYyJdLFsiaXd0Iiwid2FzbSJdLFsiaXd0LmNib3IiLCJ3YXNtIl0sWyJpd3QuY2Jvci56c3QiLCJ3YXNtLXpzdGQiXV0pLHJBPV9vO3ZhciB3ZSx6bz1gaHR0cHM6Ly9jZG4uanNkZWxpdnIubmV0L25wbS9AaXRrLXdhc20vdHJhbnNmb3JtLWlvQCR7S0F9L2Rpc3QvcGlwZWxpbmVzYDtmdW5jdGlvbiBISShBKXt3ZT1BfWZ1bmN0aW9uIHcoKXtpZih0eXBlb2Ygd2U8InUiKXJldHVybiB3ZTtsZXQgQT1NQSgpO3JldHVybiB0eXBlb2YgQTwidSI/QTp6b312YXIgRGUsWm89bnVsbDtmdW5jdGlvbiB6dChBKXtEZT1BfWZ1bmN0aW9uIHkoKXtpZih0eXBlb2YgRGU8InUiKXJldHVybiBEZTtsZXQgQT1IQSgpO3JldHVybiB0eXBlb2YgQTwidSI/QTpab312YXIgb0E9bnVsbDthc3luYyBmdW5jdGlvbiBadCgpe2xldCBBPXkoKSxlPXR5cGVvZiBBIT0ic3RyaW5nIiYmdHlwZW9mIEE/LmhyZWY8InUiP0EuaHJlZjpBO29BPWF3YWl0IEVBKGUpfWZ1bmN0aW9uIHpJKEEpe29BPUF9YXN5bmMgZnVuY3Rpb24gRCgpe2lmKG9BIT09bnVsbClyZXR1cm4gb0EudGVybWluYXRlZCYmYXdhaXQgWnQoKSxvQTtsZXQgQT1fdCgpO3JldHVybiBBIT09bnVsbD9BOihhd2FpdCBadCgpLG9BKX1hc3luYyBmdW5jdGlvbiBWbyhBLGU9e30pe2xldCB0PVt7dHlwZTpFLkpzb25Db21wYXRpYmxlfSx7dHlwZTpFLlRyYW5zZm9ybUxpc3R9XSxyPUE7aWYoQSBpbnN0YW5jZW9mIEZpbGUpe2xldCBCPWF3YWl0IEEuYXJyYXlCdWZmZXIoKTtyPXtwYXRoOkEubmFtZSxkYXRhOm5ldyBVaW50OEFycmF5KEIpfX1sZXQgbj1be3R5cGU6RS5CaW5hcnlGaWxlLGRhdGE6cn1dLG89W10saT1yLnBhdGg7by5wdXNoKGkpLG8ucHVzaCgiMCIpLG8ucHVzaCgiMSIpLG8ucHVzaCgiLS1tZW1vcnktaW8iKSxlLmZsb2F0UGFyYW1ldGVycyYmZS5mbG9hdFBhcmFtZXRlcnMmJm8ucHVzaCgiLS1mbG9hdC1wYXJhbWV0ZXJzIik7bGV0IGw9ImhkZjUtcmVhZC10cmFuc2Zvcm0iLGE9ZT8ud2ViV29ya2VyO2E9PT12b2lkIDAmJihhPWF3YWl0IEQoKSk7bGV0e3dlYldvcmtlcjpJLHJldHVyblZhbHVlOnUsc3RkZXJyOnMsb3V0cHV0czpDfT1hd2FpdCBoKGwsbyx0LG4se3BpcGVsaW5lQmFzZVVybDp3KCkscGlwZWxpbmVXb3JrZXJVcmw6eSgpLHdlYldvcmtlcjphLG5vQ29weTplPy5ub0NvcHl9KTtpZih1IT09MCYmcyE9PSIiKXRocm93IG5ldyBFcnJvcihzKTtyZXR1cm57d2ViV29ya2VyOkksY291bGRSZWFkOkNbMF0/LmRhdGEsdHJhbnNmb3JtOkNbMV0/LmRhdGF9fXZhciBSZT1Wbzthc3luYyBmdW5jdGlvbiBYbyhBLGUsdD17fSl7bGV0IHI9W3t0eXBlOkUuSnNvbkNvbXBhdGlibGV9LHt0eXBlOkUuQmluYXJ5RmlsZSxkYXRhOntwYXRoOmUsZGF0YTpuZXcgVWludDhBcnJheX19XSxuPVt7dHlwZTpFLlRyYW5zZm9ybUxpc3QsZGF0YTpBfV0sbz1bXTtvLnB1c2goIjAiKSxvLnB1c2goIjAiKTtsZXQgYz1lO28ucHVzaChjKSxvLnB1c2goIi0tbWVtb3J5LWlvIiksdC5mbG9hdFBhcmFtZXRlcnMmJnQuZmxvYXRQYXJhbWV0ZXJzJiZvLnB1c2goIi0tZmxvYXQtcGFyYW1ldGVycyIpLHQudXNlQ29tcHJlc3Npb24mJnQudXNlQ29tcHJlc3Npb24mJm8ucHVzaCgiLS11c2UtY29tcHJlc3Npb24iKTtsZXQgbD0iaGRmNS13cml0ZS10cmFuc2Zvcm0iLGE9dD8ud2ViV29ya2VyO2E9PT12b2lkIDAmJihhPWF3YWl0IEQoKSk7bGV0e3dlYldvcmtlcjpJLHJldHVyblZhbHVlOnUsc3RkZXJyOnMsb3V0cHV0czpDfT1hd2FpdCBoKGwsbyxyLG4se3BpcGVsaW5lQmFzZVVybDp3KCkscGlwZWxpbmVXb3JrZXJVcmw6eSgpLHdlYldvcmtlcjphLG5vQ29weTp0Py5ub0NvcHl9KTtpZih1IT09MCYmcyE9PSIiKXRocm93IG5ldyBFcnJvcihzKTtyZXR1cm57d2ViV29ya2VyOkksY291bGRXcml0ZTpDWzBdPy5kYXRhLHNlcmlhbGl6ZWRUcmFuc2Zvcm06Q1sxXT8uZGF0YX19dmFyIGJlPVhvO2FzeW5jIGZ1bmN0aW9uICRvKEEsZT17fSl7bGV0IHQ9W3t0eXBlOkUuSnNvbkNvbXBhdGlibGV9LHt0eXBlOkUuVHJhbnNmb3JtTGlzdH1dLHI9QTtpZihBIGluc3RhbmNlb2YgRmlsZSl7bGV0IEI9YXdhaXQgQS5hcnJheUJ1ZmZlcigpO3I9e3BhdGg6QS5uYW1lLGRhdGE6bmV3IFVpbnQ4QXJyYXkoQil9fWxldCBuPVt7dHlwZTpFLkJpbmFyeUZpbGUsZGF0YTpyfV0sbz1bXSxpPXIucGF0aDtvLnB1c2goaSksby5wdXNoKCIwIiksby5wdXNoKCIxIiksby5wdXNoKCItLW1lbW9yeS1pbyIpLGUuZmxvYXRQYXJhbWV0ZXJzJiZlLmZsb2F0UGFyYW1ldGVycyYmby5wdXNoKCItLWZsb2F0LXBhcmFtZXRlcnMiKTtsZXQgbD0ibWF0LXJlYWQtdHJhbnNmb3JtIixhPWU/LndlYldvcmtlcjthPT09dm9pZCAwJiYoYT1hd2FpdCBEKCkpO2xldHt3ZWJXb3JrZXI6SSxyZXR1cm5WYWx1ZTp1LHN0ZGVycjpzLG91dHB1dHM6Q309YXdhaXQgaChsLG8sdCxuLHtwaXBlbGluZUJhc2VVcmw6dygpLHBpcGVsaW5lV29ya2VyVXJsOnkoKSx3ZWJXb3JrZXI6YSxub0NvcHk6ZT8ubm9Db3B5fSk7aWYodSE9PTAmJnMhPT0iIil0aHJvdyBuZXcgRXJyb3Iocyk7cmV0dXJue3dlYldvcmtlcjpJLGNvdWxkUmVhZDpDWzBdPy5kYXRhLHRyYW5zZm9ybTpDWzFdPy5kYXRhfX12YXIgU2U9JG87YXN5bmMgZnVuY3Rpb24gQW4oQSxlLHQ9e30pe2xldCByPVt7dHlwZTpFLkpzb25Db21wYXRpYmxlfSx7dHlwZTpFLkJpbmFyeUZpbGUsZGF0YTp7cGF0aDplLGRhdGE6bmV3IFVpbnQ4QXJyYXl9fV0sbj1be3R5cGU6RS5UcmFuc2Zvcm1MaXN0LGRhdGE6QX1dLG89W107by5wdXNoKCIwIiksby5wdXNoKCIwIik7bGV0IGM9ZTtvLnB1c2goYyksby5wdXNoKCItLW1lbW9yeS1pbyIpLHQuZmxvYXRQYXJhbWV0ZXJzJiZ0LmZsb2F0UGFyYW1ldGVycyYmby5wdXNoKCItLWZsb2F0LXBhcmFtZXRlcnMiKSx0LnVzZUNvbXByZXNzaW9uJiZ0LnVzZUNvbXByZXNzaW9uJiZvLnB1c2goIi0tdXNlLWNvbXByZXNzaW9uIik7bGV0IGw9Im1hdC13cml0ZS10cmFuc2Zvcm0iLGE9dD8ud2ViV29ya2VyO2E9PT12b2lkIDAmJihhPWF3YWl0IEQoKSk7bGV0e3dlYldvcmtlcjpJLHJldHVyblZhbHVlOnUsc3RkZXJyOnMsb3V0cHV0czpDfT1hd2FpdCBoKGwsbyxyLG4se3BpcGVsaW5lQmFzZVVybDp3KCkscGlwZWxpbmVXb3JrZXJVcmw6eSgpLHdlYldvcmtlcjphLG5vQ29weTp0Py5ub0NvcHl9KTtpZih1IT09MCYmcyE9PSIiKXRocm93IG5ldyBFcnJvcihzKTtyZXR1cm57d2ViV29ya2VyOkksY291bGRXcml0ZTpDWzBdPy5kYXRhLHNlcmlhbGl6ZWRUcmFuc2Zvcm06Q1sxXT8uZGF0YX19dmFyIGtlPUFuO2FzeW5jIGZ1bmN0aW9uIGVuKEEsZT17fSl7bGV0IHQ9W3t0eXBlOkUuSnNvbkNvbXBhdGlibGV9LHt0eXBlOkUuVHJhbnNmb3JtTGlzdH1dLHI9QTtpZihBIGluc3RhbmNlb2YgRmlsZSl7bGV0IEI9YXdhaXQgQS5hcnJheUJ1ZmZlcigpO3I9e3BhdGg6QS5uYW1lLGRhdGE6bmV3IFVpbnQ4QXJyYXkoQil9fWxldCBuPVt7dHlwZTpFLkJpbmFyeUZpbGUsZGF0YTpyfV0sbz1bXSxpPXIucGF0aDtvLnB1c2goaSksby5wdXNoKCIwIiksby5wdXNoKCIxIiksby5wdXNoKCItLW1lbW9yeS1pbyIpLGUuZmxvYXRQYXJhbWV0ZXJzJiZlLmZsb2F0UGFyYW1ldGVycyYmby5wdXNoKCItLWZsb2F0LXBhcmFtZXRlcnMiKTtsZXQgbD0ibW5jLXJlYWQtdHJhbnNmb3JtIixhPWU/LndlYldvcmtlcjthPT09dm9pZCAwJiYoYT1hd2FpdCBEKCkpO2xldHt3ZWJXb3JrZXI6SSxyZXR1cm5WYWx1ZTp1LHN0ZGVycjpzLG91dHB1dHM6Q309YXdhaXQgaChsLG8sdCxuLHtwaXBlbGluZUJhc2VVcmw6dygpLHBpcGVsaW5lV29ya2VyVXJsOnkoKSx3ZWJXb3JrZXI6YSxub0NvcHk6ZT8ubm9Db3B5fSk7aWYodSE9PTAmJnMhPT0iIil0aHJvdyBuZXcgRXJyb3Iocyk7cmV0dXJue3dlYldvcmtlcjpJLGNvdWxkUmVhZDpDWzBdPy5kYXRhLHRyYW5zZm9ybTpDWzFdPy5kYXRhfX12YXIgRmU9ZW47YXN5bmMgZnVuY3Rpb24gdG4oQSxlLHQ9e30pe2xldCByPVt7dHlwZTpFLkpzb25Db21wYXRpYmxlfSx7dHlwZTpFLkJpbmFyeUZpbGUsZGF0YTp7cGF0aDplLGRhdGE6bmV3IFVpbnQ4QXJyYXl9fV0sbj1be3R5cGU6RS5UcmFuc2Zvcm1MaXN0LGRhdGE6QX1dLG89W107by5wdXNoKCIwIiksby5wdXNoKCIwIik7bGV0IGM9ZTtvLnB1c2goYyksby5wdXNoKCItLW1lbW9yeS1pbyIpLHQuZmxvYXRQYXJhbWV0ZXJzJiZ0LmZsb2F0UGFyYW1ldGVycyYmby5wdXNoKCItLWZsb2F0LXBhcmFtZXRlcnMiKSx0LnVzZUNvbXByZXNzaW9uJiZ0LnVzZUNvbXByZXNzaW9uJiZvLnB1c2goIi0tdXNlLWNvbXByZXNzaW9uIik7bGV0IGw9Im1uYy13cml0ZS10cmFuc2Zvcm0iLGE9dD8ud2ViV29ya2VyO2E9PT12b2lkIDAmJihhPWF3YWl0IEQoKSk7bGV0e3dlYldvcmtlcjpJLHJldHVyblZhbHVlOnUsc3RkZXJyOnMsb3V0cHV0czpDfT1hd2FpdCBoKGwsbyxyLG4se3BpcGVsaW5lQmFzZVVybDp3KCkscGlwZWxpbmVXb3JrZXJVcmw6eSgpLHdlYldvcmtlcjphLG5vQ29weTp0Py5ub0NvcHl9KTtpZih1IT09MCYmcyE9PSIiKXRocm93IG5ldyBFcnJvcihzKTtyZXR1cm57d2ViV29ya2VyOkksY291bGRXcml0ZTpDWzBdPy5kYXRhLHNlcmlhbGl6ZWRUcmFuc2Zvcm06Q1sxXT8uZGF0YX19dmFyIFVlPXRuO2FzeW5jIGZ1bmN0aW9uIHJuKEEsZT17fSl7bGV0IHQ9W3t0eXBlOkUuSnNvbkNvbXBhdGlibGV9LHt0eXBlOkUuVHJhbnNmb3JtTGlzdH1dLHI9QTtpZihBIGluc3RhbmNlb2YgRmlsZSl7bGV0IEI9YXdhaXQgQS5hcnJheUJ1ZmZlcigpO3I9e3BhdGg6QS5uYW1lLGRhdGE6bmV3IFVpbnQ4QXJyYXkoQil9fWxldCBuPVt7dHlwZTpFLkJpbmFyeUZpbGUsZGF0YTpyfV0sbz1bXSxpPXIucGF0aDtvLnB1c2goaSksby5wdXNoKCIwIiksby5wdXNoKCIxIiksby5wdXNoKCItLW1lbW9yeS1pbyIpLGUuZmxvYXRQYXJhbWV0ZXJzJiZlLmZsb2F0UGFyYW1ldGVycyYmby5wdXNoKCItLWZsb2F0LXBhcmFtZXRlcnMiKTtsZXQgbD0idHh0LXJlYWQtdHJhbnNmb3JtIixhPWU/LndlYldvcmtlcjthPT09dm9pZCAwJiYoYT1hd2FpdCBEKCkpO2xldHt3ZWJXb3JrZXI6SSxyZXR1cm5WYWx1ZTp1LHN0ZGVycjpzLG91dHB1dHM6Q309YXdhaXQgaChsLG8sdCxuLHtwaXBlbGluZUJhc2VVcmw6dygpLHBpcGVsaW5lV29ya2VyVXJsOnkoKSx3ZWJXb3JrZXI6YSxub0NvcHk6ZT8ubm9Db3B5fSk7aWYodSE9PTAmJnMhPT0iIil0aHJvdyBuZXcgRXJyb3Iocyk7cmV0dXJue3dlYldvcmtlcjpJLGNvdWxkUmVhZDpDWzBdPy5kYXRhLHRyYW5zZm9ybTpDWzFdPy5kYXRhfX12YXIgVGU9cm47YXN5bmMgZnVuY3Rpb24gb24oQSxlLHQ9e30pe2xldCByPVt7dHlwZTpFLkpzb25Db21wYXRpYmxlfSx7dHlwZTpFLkJpbmFyeUZpbGUsZGF0YTp7cGF0aDplLGRhdGE6bmV3IFVpbnQ4QXJyYXl9fV0sbj1be3R5cGU6RS5UcmFuc2Zvcm1MaXN0LGRhdGE6QX1dLG89W107by5wdXNoKCIwIiksby5wdXNoKCIwIik7bGV0IGM9ZTtvLnB1c2goYyksby5wdXNoKCItLW1lbW9yeS1pbyIpLHQuZmxvYXRQYXJhbWV0ZXJzJiZ0LmZsb2F0UGFyYW1ldGVycyYmby5wdXNoKCItLWZsb2F0LXBhcmFtZXRlcnMiKSx0LnVzZUNvbXByZXNzaW9uJiZ0LnVzZUNvbXByZXNzaW9uJiZvLnB1c2goIi0tdXNlLWNvbXByZXNzaW9uIik7bGV0IGw9InR4dC13cml0ZS10cmFuc2Zvcm0iLGE9dD8ud2ViV29ya2VyO2E9PT12b2lkIDAmJihhPWF3YWl0IEQoKSk7bGV0e3dlYldvcmtlcjpJLHJldHVyblZhbHVlOnUsc3RkZXJyOnMsb3V0cHV0czpDfT1hd2FpdCBoKGwsbyxyLG4se3BpcGVsaW5lQmFzZVVybDp3KCkscGlwZWxpbmVXb3JrZXJVcmw6eSgpLHdlYldvcmtlcjphLG5vQ29weTp0Py5ub0NvcHl9KTtpZih1IT09MCYmcyE9PSIiKXRocm93IG5ldyBFcnJvcihzKTtyZXR1cm57d2ViV29ya2VyOkksY291bGRXcml0ZTpDWzBdPy5kYXRhLHNlcmlhbGl6ZWRUcmFuc2Zvcm06Q1sxXT8uZGF0YX19dmFyIE5lPW9uO2FzeW5jIGZ1bmN0aW9uIG5uKEEsZT17fSl7bGV0IHQ9W3t0eXBlOkUuSnNvbkNvbXBhdGlibGV9LHt0eXBlOkUuVHJhbnNmb3JtTGlzdH1dLHI9QTtpZihBIGluc3RhbmNlb2YgRmlsZSl7bGV0IEI9YXdhaXQgQS5hcnJheUJ1ZmZlcigpO3I9e3BhdGg6QS5uYW1lLGRhdGE6bmV3IFVpbnQ4QXJyYXkoQil9fWxldCBuPVt7dHlwZTpFLkJpbmFyeUZpbGUsZGF0YTpyfV0sbz1bXSxpPXIucGF0aDtvLnB1c2goaSksby5wdXNoKCIwIiksby5wdXNoKCIxIiksby5wdXNoKCItLW1lbW9yeS1pbyIpLGUuZmxvYXRQYXJhbWV0ZXJzJiZlLmZsb2F0UGFyYW1ldGVycyYmby5wdXNoKCItLWZsb2F0LXBhcmFtZXRlcnMiKTtsZXQgbD0id2FzbS1yZWFkLXRyYW5zZm9ybSIsYT1lPy53ZWJXb3JrZXI7YT09PXZvaWQgMCYmKGE9YXdhaXQgRCgpKTtsZXR7d2ViV29ya2VyOkkscmV0dXJuVmFsdWU6dSxzdGRlcnI6cyxvdXRwdXRzOkN9PWF3YWl0IGgobCxvLHQsbix7cGlwZWxpbmVCYXNlVXJsOncoKSxwaXBlbGluZVdvcmtlclVybDp5KCksd2ViV29ya2VyOmEsbm9Db3B5OmU/Lm5vQ29weX0pO2lmKHUhPT0wJiZzIT09IiIpdGhyb3cgbmV3IEVycm9yKHMpO3JldHVybnt3ZWJXb3JrZXI6SSxjb3VsZFJlYWQ6Q1swXT8uZGF0YSx0cmFuc2Zvcm06Q1sxXT8uZGF0YX19dmFyIExlPW5uO2FzeW5jIGZ1bmN0aW9uIGFuKEEsZSx0PXt9KXtsZXQgcj1be3R5cGU6RS5Kc29uQ29tcGF0aWJsZX0se3R5cGU6RS5CaW5hcnlGaWxlLGRhdGE6e3BhdGg6ZSxkYXRhOm5ldyBVaW50OEFycmF5fX1dLG49W3t0eXBlOkUuVHJhbnNmb3JtTGlzdCxkYXRhOkF9XSxvPVtdO28ucHVzaCgiMCIpLG8ucHVzaCgiMCIpO2xldCBjPWU7by5wdXNoKGMpLG8ucHVzaCgiLS1tZW1vcnktaW8iKSx0LmZsb2F0UGFyYW1ldGVycyYmdC5mbG9hdFBhcmFtZXRlcnMmJm8ucHVzaCgiLS1mbG9hdC1wYXJhbWV0ZXJzIiksdC51c2VDb21wcmVzc2lvbiYmdC51c2VDb21wcmVzc2lvbiYmby5wdXNoKCItLXVzZS1jb21wcmVzc2lvbiIpO2xldCBsPSJ3YXNtLXdyaXRlLXRyYW5zZm9ybSIsYT10Py53ZWJXb3JrZXI7YT09PXZvaWQgMCYmKGE9YXdhaXQgRCgpKTtsZXR7d2ViV29ya2VyOkkscmV0dXJuVmFsdWU6dSxzdGRlcnI6cyxvdXRwdXRzOkN9PWF3YWl0IGgobCxvLHIsbix7cGlwZWxpbmVCYXNlVXJsOncoKSxwaXBlbGluZVdvcmtlclVybDp5KCksd2ViV29ya2VyOmEsbm9Db3B5OnQ/Lm5vQ29weX0pO2lmKHUhPT0wJiZzIT09IiIpdGhyb3cgbmV3IEVycm9yKHMpO3JldHVybnt3ZWJXb3JrZXI6SSxjb3VsZFdyaXRlOkNbMF0/LmRhdGEsc2VyaWFsaXplZFRyYW5zZm9ybTpDWzFdPy5kYXRhfX12YXIgUGU9YW47YXN5bmMgZnVuY3Rpb24gc24oQSxlPXt9KXtsZXQgdD1be3R5cGU6RS5Kc29uQ29tcGF0aWJsZX0se3R5cGU6RS5UcmFuc2Zvcm1MaXN0fV0scj1BO2lmKEEgaW5zdGFuY2VvZiBGaWxlKXtsZXQgQj1hd2FpdCBBLmFycmF5QnVmZmVyKCk7cj17cGF0aDpBLm5hbWUsZGF0YTpuZXcgVWludDhBcnJheShCKX19bGV0IG49W3t0eXBlOkUuQmluYXJ5RmlsZSxkYXRhOnJ9XSxvPVtdLGk9ci5wYXRoO28ucHVzaChpKSxvLnB1c2goIjAiKSxvLnB1c2goIjEiKSxvLnB1c2goIi0tbWVtb3J5LWlvIiksZS5mbG9hdFBhcmFtZXRlcnMmJmUuZmxvYXRQYXJhbWV0ZXJzJiZvLnB1c2goIi0tZmxvYXQtcGFyYW1ldGVycyIpO2xldCBsPSJ3YXNtLXpzdGQtcmVhZC10cmFuc2Zvcm0iLGE9ZT8ud2ViV29ya2VyO2E9PT12b2lkIDAmJihhPWF3YWl0IEQoKSk7bGV0e3dlYldvcmtlcjpJLHJldHVyblZhbHVlOnUsc3RkZXJyOnMsb3V0cHV0czpDfT1hd2FpdCBoKGwsbyx0LG4se3BpcGVsaW5lQmFzZVVybDp3KCkscGlwZWxpbmVXb3JrZXJVcmw6eSgpLHdlYldvcmtlcjphLG5vQ29weTplPy5ub0NvcHl9KTtpZih1IT09MCYmcyE9PSIiKXRocm93IG5ldyBFcnJvcihzKTtyZXR1cm57d2ViV29ya2VyOkksY291bGRSZWFkOkNbMF0/LmRhdGEsdHJhbnNmb3JtOkNbMV0/LmRhdGF9fXZhciB4ZT1zbjthc3luYyBmdW5jdGlvbiBJbihBLGUsdD17fSl7bGV0IHI9W3t0eXBlOkUuSnNvbkNvbXBhdGlibGV9LHt0eXBlOkUuQmluYXJ5RmlsZSxkYXRhOntwYXRoOmUsZGF0YTpuZXcgVWludDhBcnJheX19XSxuPVt7dHlwZTpFLlRyYW5zZm9ybUxpc3QsZGF0YTpBfV0sbz1bXTtvLnB1c2goIjAiKSxvLnB1c2goIjAiKTtsZXQgYz1lO28ucHVzaChjKSxvLnB1c2goIi0tbWVtb3J5LWlvIiksdC5mbG9hdFBhcmFtZXRlcnMmJnQuZmxvYXRQYXJhbWV0ZXJzJiZvLnB1c2goIi0tZmxvYXQtcGFyYW1ldGVycyIpLHQudXNlQ29tcHJlc3Npb24mJnQudXNlQ29tcHJlc3Npb24mJm8ucHVzaCgiLS11c2UtY29tcHJlc3Npb24iKTtsZXQgbD0id2FzbS16c3RkLXdyaXRlLXRyYW5zZm9ybSIsYT10Py53ZWJXb3JrZXI7YT09PXZvaWQgMCYmKGE9YXdhaXQgRCgpKTtsZXR7d2ViV29ya2VyOkkscmV0dXJuVmFsdWU6dSxzdGRlcnI6cyxvdXRwdXRzOkN9PWF3YWl0IGgobCxvLHIsbix7cGlwZWxpbmVCYXNlVXJsOncoKSxwaXBlbGluZVdvcmtlclVybDp5KCksd2ViV29ya2VyOmEsbm9Db3B5OnQ/Lm5vQ29weX0pO2lmKHUhPT0wJiZzIT09IiIpdGhyb3cgbmV3IEVycm9yKHMpO3JldHVybnt3ZWJXb3JrZXI6SSxjb3VsZFdyaXRlOkNbMF0/LmRhdGEsc2VyaWFsaXplZFRyYW5zZm9ybTpDWzFdPy5kYXRhfX12YXIgT2U9SW47dmFyIGduPW5ldyBNYXAoW1siaGRmNSIsW1JlLGJlXV0sWyJtYXQiLFtTZSxrZV1dLFsibW5jIixbRmUsVWVdXSxbInR4dCIsW1RlLE5lXV0sWyJ3YXNtIixbTGUsUGVdXSxbIndhc21ac3RkIixbeGUsT2VdXV0pLG5BPWduO2FzeW5jIGZ1bmN0aW9uIGxuKEEsZT17fSl7bGV0IHQ9QS50eXBlPz8iIixyPUEubmFtZT8/QS5wYXRoPz8iZmlsZU5hbWUiLG49aUEocikudG9Mb3dlckNhc2UoKSxvPWU/LndlYldvcmtlcixpPUE7aWYoQSBpbnN0YW5jZW9mIEJsb2Ipe2xldCBzPWF3YWl0IEEuYXJyYXlCdWZmZXIoKTtpPXtwYXRoOkEubmFtZSxkYXRhOm5ldyBVaW50OEFycmF5KHMpfX1sZXQgZj1udWxsO2lmKHQmJnRBLmhhcyh0KSlmPXRBLmdldCh0KTtlbHNlIGlmKHJBLmhhcyhuKSlmPXJBLmdldChuKTtlbHNlIGZvcihsZXQgcyBvZiBuQS52YWx1ZXMoKSlpZihzWzBdIT09bnVsbCl7bGV0e3dlYldvcmtlcjpDLGNvdWxkUmVhZDpwLHRyYW5zZm9ybTpCfT1hd2FpdCBzWzBdKHtwYXRoOmkucGF0aCxkYXRhOmkuZGF0YS5zbGljZSgpfSx7ZmxvYXRQYXJhbWV0ZXJzOmUuZmxvYXRQYXJhbWV0ZXJzLHdlYldvcmtlcjpvLG5vQ29weTplPy5ub0NvcHl9KTtpZihvPUMscClyZXR1cm57d2ViV29ya2VyOm8sdHJhbnNmb3JtOkJ9fWlmKCFmKXRocm93IEVycm9yKCJDb3VsZCBub3QgZmluZCBJTyBmb3I6ICIrcik7bGV0IGw9bkEuZ2V0KGYpWzBdLHt3ZWJXb3JrZXI6YSxjb3VsZFJlYWQ6SSx0cmFuc2Zvcm06dX09YXdhaXQgbChpLHtmbG9hdFBhcmFtZXRlcnM6ZS5mbG9hdFBhcmFtZXRlcnMsd2ViV29ya2VyOm8sbm9Db3B5OmU/Lm5vQ29weX0pO2lmKG89YSwhSSl0aHJvdyBFcnJvcigiQ291bGQgbm90IHJlYWQ6ICIrcik7cmV0dXJue3dlYldvcmtlcjpvLHRyYW5zZm9ybTp1fX12YXIgZm49bG47YXN5bmMgZnVuY3Rpb24gQ24oQSxlLHQ9e30pe2xldCByPUEsbj10Lm1pbWVUeXBlLG89aUEoZSkudG9Mb3dlckNhc2UoKSxpPXQud2ViV29ya2VyLGY9bnVsbDtpZih0eXBlb2YgbjwidSImJnRBLmhhcyhuKSlmPXRBLmdldChuKTtlbHNlIGlmKHJBLmhhcyhvKSlmPXJBLmdldChvKTtlbHNlIGZvcihsZXQgQyBvZiBuQS52YWx1ZXMoKSlpZihDWzFdIT09bnVsbCl7bGV0e3dlYldvcmtlcjpwLGNvdWxkV3JpdGU6QixzZXJpYWxpemVkVHJhbnNmb3JtOmR9PWF3YWl0IENbMV0ocixlLHQpO2lmKGk9cCxCKXJldHVybnt3ZWJXb3JrZXI6aSxzZXJpYWxpemVkVHJhbnNmb3JtOmR9fWlmKCFmKXRocm93IEVycm9yKCJDb3VsZCBub3QgZmluZCBJTyBmb3I6ICIrZSk7bGV0IGw9bkEuZ2V0KGYpWzFdLHt3ZWJXb3JrZXI6YSxjb3VsZFdyaXRlOkksc2VyaWFsaXplZFRyYW5zZm9ybTp1fT1hd2FpdCBsKHIsZSx0KTtpZihpPWEsIUkpdGhyb3cgRXJyb3IoIkNvdWxkIG5vdCB3cml0ZTogIitlKTtyZXR1cm57d2ViV29ya2VyOmksc2VyaWFsaXplZFRyYW5zZm9ybTp1fX12YXIgY249Q247dmFyIFZ0PSdkYXRhOnRleHQvamF2YXNjcmlwdDtjaGFyc2V0PXV0Zi04LHZhciBtZT1PYmplY3QuZGVmaW5lUHJvcGVydHk7dmFyIHdlPShBLHQpPT57Zm9yKHZhciBlIGluIHQpbWUoQSxlLHtnZXQ6dFtlXSxlbnVtZXJhYmxlOiEwfSl9O3ZhciBmdD1TeW1ib2woIkNvbWxpbmsucHJveHkiKSxwZT1TeW1ib2woIkNvbWxpbmsuZW5kcG9pbnQiKSxTZT1TeW1ib2woIkNvbWxpbmsucmVsZWFzZVByb3h5IiksWUE9U3ltYm9sKCJDb21saW5rLmZpbmFsaXplciIpLGFBPVN5bWJvbCgiQ29tbGluay50aHJvd24iKSxsdD1BPT50eXBlb2YgQT09Im9iamVjdCImJkEhPT1udWxsfHx0eXBlb2YgQT09ImZ1bmN0aW9uIixGZT17Y2FuSGFuZGxlOkE9Pmx0KEEpJiZBW2Z0XSxzZXJpYWxpemUoQSl7bGV0e3BvcnQxOnQscG9ydDI6ZX09bmV3IE1lc3NhZ2VDaGFubmVsO3JldHVybiBmQShBLHQpLFtlLFtlXV19LGRlc2VyaWFsaXplKEEpe3JldHVybiBBLnN0YXJ0KCksR2UoQSl9fSxSZT17Y2FuSGFuZGxlOkE9Pmx0KEEpJiZhQSBpbiBBLHNlcmlhbGl6ZSh7dmFsdWU6QX0pe2xldCB0O3JldHVybiBBIGluc3RhbmNlb2YgRXJyb3I/dD17aXNFcnJvcjohMCx2YWx1ZTp7bWVzc2FnZTpBLm1lc3NhZ2UsbmFtZTpBLm5hbWUsc3RhY2s6QS5zdGFja319OnQ9e2lzRXJyb3I6ITEsdmFsdWU6QX0sW3QsW11dfSxkZXNlcmlhbGl6ZShBKXt0aHJvdyBBLmlzRXJyb3I/T2JqZWN0LmFzc2lnbihuZXcgRXJyb3IoQS52YWx1ZS5tZXNzYWdlKSxBLnZhbHVlKTpBLnZhbHVlfX0sdXQ9bmV3IE1hcChbWyJwcm94eSIsRmVdLFsidGhyb3ciLFJlXV0pO2Z1bmN0aW9uIE5lKEEsdCl7Zm9yKGxldCBlIG9mIEEpaWYodD09PWV8fGU9PT0iKiJ8fGUgaW5zdGFuY2VvZiBSZWdFeHAmJmUudGVzdCh0KSlyZXR1cm4hMDtyZXR1cm4hMX1mdW5jdGlvbiBmQShBLHQ9Z2xvYmFsVGhpcyxlPVsiKiJdKXt0LmFkZEV2ZW50TGlzdGVuZXIoIm1lc3NhZ2UiLGZ1bmN0aW9uIEkocil7aWYoIXJ8fCFyLmRhdGEpcmV0dXJuO2lmKCFOZShlLHIub3JpZ2luKSl7Y29uc29sZS53YXJuKGBJbnZhbGlkIG9yaWdpbiBcJyR7ci5vcmlnaW59XCcgZm9yIGNvbWxpbmsgcHJveHlgKTtyZXR1cm59bGV0e2lkOm8sdHlwZTpnLHBhdGg6Q309T2JqZWN0LmFzc2lnbih7cGF0aDpbXX0sci5kYXRhKSxRPShyLmRhdGEuYXJndW1lbnRMaXN0fHxbXSkubWFwKE8pLGE7dHJ5e2xldCBuPUMuc2xpY2UoMCwtMSkucmVkdWNlKChmLEIpPT5mW0JdLEEpLHM9Qy5yZWR1Y2UoKGYsQik9PmZbQl0sQSk7c3dpdGNoKGcpe2Nhc2UiR0VUIjphPXM7YnJlYWs7Y2FzZSJTRVQiOm5bQy5zbGljZSgtMSlbMF1dPU8oci5kYXRhLnZhbHVlKSxhPSEwO2JyZWFrO2Nhc2UiQVBQTFkiOmE9cy5hcHBseShuLFEpO2JyZWFrO2Nhc2UiQ09OU1RSVUNUIjp7bGV0IGY9bmV3IHMoLi4uUSk7YT1iZShmKX1icmVhaztjYXNlIkVORFBPSU5UIjp7bGV0e3BvcnQxOmYscG9ydDI6Qn09bmV3IE1lc3NhZ2VDaGFubmVsO2ZBKEEsQiksYT1NQShmLFtmXSl9YnJlYWs7Y2FzZSJSRUxFQVNFIjphPXZvaWQgMDticmVhaztkZWZhdWx0OnJldHVybn19Y2F0Y2gobil7YT17dmFsdWU6bixbYUFdOjB9fVByb21pc2UucmVzb2x2ZShhKS5jYXRjaChuPT4oe3ZhbHVlOm4sW2FBXTowfSkpLnRoZW4obj0+e2xldFtzLGZdPWNBKG4pO3QucG9zdE1lc3NhZ2UoT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LHMpLHtpZDpvfSksZiksZz09PSJSRUxFQVNFIiYmKHQucmVtb3ZlRXZlbnRMaXN0ZW5lcigibWVzc2FnZSIsSSksRHQodCksWUEgaW4gQSYmdHlwZW9mIEFbWUFdPT0iZnVuY3Rpb24iJiZBW1lBXSgpKX0pLmNhdGNoKG49PntsZXRbcyxmXT1jQSh7dmFsdWU6bmV3IFR5cGVFcnJvcigiVW5zZXJpYWxpemFibGUgcmV0dXJuIHZhbHVlIiksW2FBXTowfSk7dC5wb3N0TWVzc2FnZShPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30scykse2lkOm99KSxmKX0pfSksdC5zdGFydCYmdC5zdGFydCgpfWZ1bmN0aW9uIFVlKEEpe3JldHVybiBBLmNvbnN0cnVjdG9yLm5hbWU9PT0iTWVzc2FnZVBvcnQifWZ1bmN0aW9uIER0KEEpe1VlKEEpJiZBLmNsb3NlKCl9ZnVuY3Rpb24gR2UoQSx0KXtyZXR1cm4gcUEoQSxbXSx0KX1mdW5jdGlvbiBCQShBKXtpZihBKXRocm93IG5ldyBFcnJvcigiUHJveHkgaGFzIGJlZW4gcmVsZWFzZWQgYW5kIGlzIG5vdCB1c2VhYmxlIil9ZnVuY3Rpb24gaHQoQSl7cmV0dXJuIFAoQSx7dHlwZToiUkVMRUFTRSJ9KS50aGVuKCgpPT57RHQoQSl9KX12YXIgUUE9bmV3IFdlYWtNYXAsRUE9IkZpbmFsaXphdGlvblJlZ2lzdHJ5ImluIGdsb2JhbFRoaXMmJm5ldyBGaW5hbGl6YXRpb25SZWdpc3RyeShBPT57bGV0IHQ9KFFBLmdldChBKXx8MCktMTtRQS5zZXQoQSx0KSx0PT09MCYmaHQoQSl9KTtmdW5jdGlvbiBrZShBLHQpe2xldCBlPShRQS5nZXQodCl8fDApKzE7UUEuc2V0KHQsZSksRUEmJkVBLnJlZ2lzdGVyKEEsdCxBKX1mdW5jdGlvbiBMZShBKXtFQSYmRUEudW5yZWdpc3RlcihBKX1mdW5jdGlvbiBxQShBLHQ9W10sZT1mdW5jdGlvbigpe30pe2xldCBJPSExLHI9bmV3IFByb3h5KGUse2dldChvLGcpe2lmKEJBKEkpLGc9PT1TZSlyZXR1cm4oKT0+e0xlKHIpLGh0KEEpLEk9ITB9O2lmKGc9PT0idGhlbiIpe2lmKHQubGVuZ3RoPT09MClyZXR1cm57dGhlbjooKT0+cn07bGV0IEM9UChBLHt0eXBlOiJHRVQiLHBhdGg6dC5tYXAoUT0+US50b1N0cmluZygpKX0pLnRoZW4oTyk7cmV0dXJuIEMudGhlbi5iaW5kKEMpfXJldHVybiBxQShBLFsuLi50LGddKX0sc2V0KG8sZyxDKXtCQShJKTtsZXRbUSxhXT1jQShDKTtyZXR1cm4gUChBLHt0eXBlOiJTRVQiLHBhdGg6Wy4uLnQsZ10ubWFwKG49Pm4udG9TdHJpbmcoKSksdmFsdWU6UX0sYSkudGhlbihPKX0sYXBwbHkobyxnLEMpe0JBKEkpO2xldCBRPXRbdC5sZW5ndGgtMV07aWYoUT09PXBlKXJldHVybiBQKEEse3R5cGU6IkVORFBPSU5UIn0pLnRoZW4oTyk7aWYoUT09PSJiaW5kIilyZXR1cm4gcUEoQSx0LnNsaWNlKDAsLTEpKTtsZXRbYSxuXT1jdChDKTtyZXR1cm4gUChBLHt0eXBlOiJBUFBMWSIscGF0aDp0Lm1hcChzPT5zLnRvU3RyaW5nKCkpLGFyZ3VtZW50TGlzdDphfSxuKS50aGVuKE8pfSxjb25zdHJ1Y3QobyxnKXtCQShJKTtsZXRbQyxRXT1jdChnKTtyZXR1cm4gUChBLHt0eXBlOiJDT05TVFJVQ1QiLHBhdGg6dC5tYXAoYT0+YS50b1N0cmluZygpKSxhcmd1bWVudExpc3Q6Q30sUSkudGhlbihPKX19KTtyZXR1cm4ga2UocixBKSxyfWZ1bmN0aW9uIEplKEEpe3JldHVybiBBcnJheS5wcm90b3R5cGUuY29uY2F0LmFwcGx5KFtdLEEpfWZ1bmN0aW9uIGN0KEEpe2xldCB0PUEubWFwKGNBKTtyZXR1cm5bdC5tYXAoZT0+ZVswXSksSmUodC5tYXAoZT0+ZVsxXSkpXX12YXIgZHQ9bmV3IFdlYWtNYXA7ZnVuY3Rpb24gTUEoQSx0KXtyZXR1cm4gZHQuc2V0KEEsdCksQX1mdW5jdGlvbiBiZShBKXtyZXR1cm4gT2JqZWN0LmFzc2lnbihBLHtbZnRdOiEwfSl9ZnVuY3Rpb24gY0EoQSl7Zm9yKGxldFt0LGVdb2YgdXQpaWYoZS5jYW5IYW5kbGUoQSkpe2xldFtJLHJdPWUuc2VyaWFsaXplKEEpO3JldHVyblt7dHlwZToiSEFORExFUiIsbmFtZTp0LHZhbHVlOkl9LHJdfXJldHVyblt7dHlwZToiUkFXIix2YWx1ZTpBfSxkdC5nZXQoQSl8fFtdXX1mdW5jdGlvbiBPKEEpe3N3aXRjaChBLnR5cGUpe2Nhc2UiSEFORExFUiI6cmV0dXJuIHV0LmdldChBLm5hbWUpLmRlc2VyaWFsaXplKEEudmFsdWUpO2Nhc2UiUkFXIjpyZXR1cm4gQS52YWx1ZX19ZnVuY3Rpb24gUChBLHQsZSl7cmV0dXJuIG5ldyBQcm9taXNlKEk9PntsZXQgcj1IZSgpO0EuYWRkRXZlbnRMaXN0ZW5lcigibWVzc2FnZSIsZnVuY3Rpb24gbyhnKXshZy5kYXRhfHwhZy5kYXRhLmlkfHxnLmRhdGEuaWQhPT1yfHwoQS5yZW1vdmVFdmVudExpc3RlbmVyKCJtZXNzYWdlIixvKSxJKGcuZGF0YSkpfSksQS5zdGFydCYmQS5zdGFydCgpLEEucG9zdE1lc3NhZ2UoT2JqZWN0LmFzc2lnbih7aWQ6cn0sdCksZSl9KX1mdW5jdGlvbiBIZSgpe3JldHVybiBuZXcgQXJyYXkoNCkuZmlsbCgwKS5tYXAoKCk9Pk1hdGguZmxvb3IoTWF0aC5yYW5kb20oKSpOdW1iZXIuTUFYX1NBRkVfSU5URUdFUikudG9TdHJpbmcoMTYpKS5qb2luKCItIil9ZnVuY3Rpb24gdihBLHQpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiBBLmFwcGx5KHQsYXJndW1lbnRzKX19dmFye3RvU3RyaW5nOlllfT1PYmplY3QucHJvdG90eXBlLHtnZXRQcm90b3R5cGVPZjpPQX09T2JqZWN0LHVBPShBPT50PT57bGV0IGU9WWUuY2FsbCh0KTtyZXR1cm4gQVtlXXx8KEFbZV09ZS5zbGljZSg4LC0xKS50b0xvd2VyQ2FzZSgpKX0pKE9iamVjdC5jcmVhdGUobnVsbCkpLEc9QT0+KEE9QS50b0xvd2VyQ2FzZSgpLHQ9PnVBKHQpPT09QSksREE9QT0+dD0+dHlwZW9mIHQ9PT1BLHtpc0FycmF5Omp9PUFycmF5LCQ9REEoInVuZGVmaW5lZCIpO2Z1bmN0aW9uIHFlKEEpe3JldHVybiBBIT09bnVsbCYmISQoQSkmJkEuY29uc3RydWN0b3IhPT1udWxsJiYhJChBLmNvbnN0cnVjdG9yKSYmTihBLmNvbnN0cnVjdG9yLmlzQnVmZmVyKSYmQS5jb25zdHJ1Y3Rvci5pc0J1ZmZlcihBKX12YXIgcHQ9RygiQXJyYXlCdWZmZXIiKTtmdW5jdGlvbiBNZShBKXtsZXQgdDtyZXR1cm4gdHlwZW9mIEFycmF5QnVmZmVyPCJ1IiYmQXJyYXlCdWZmZXIuaXNWaWV3P3Q9QXJyYXlCdWZmZXIuaXNWaWV3KEEpOnQ9QSYmQS5idWZmZXImJnB0KEEuYnVmZmVyKSx0fXZhciBUZT1EQSgic3RyaW5nIiksTj1EQSgiZnVuY3Rpb24iKSxTdD1EQSgibnVtYmVyIiksaEE9QT0+QSE9PW51bGwmJnR5cGVvZiBBPT0ib2JqZWN0IixLZT1BPT5BPT09ITB8fEE9PT0hMSxsQT1BPT57aWYodUEoQSkhPT0ib2JqZWN0IilyZXR1cm4hMTtsZXQgdD1PQShBKTtyZXR1cm4odD09PW51bGx8fHQ9PT1PYmplY3QucHJvdG90eXBlfHxPYmplY3QuZ2V0UHJvdG90eXBlT2YodCk9PT1udWxsKSYmIShTeW1ib2wudG9TdHJpbmdUYWcgaW4gQSkmJiEoU3ltYm9sLml0ZXJhdG9yIGluIEEpfSxPZT1HKCJEYXRlIikseGU9RygiRmlsZSIpLFBlPUcoIkJsb2IiKSxqZT1HKCJGaWxlTGlzdCIpLFdlPUE9PmhBKEEpJiZOKEEucGlwZSksWmU9QT0+e2xldCB0O3JldHVybiBBJiYodHlwZW9mIEZvcm1EYXRhPT0iZnVuY3Rpb24iJiZBIGluc3RhbmNlb2YgRm9ybURhdGF8fE4oQS5hcHBlbmQpJiYoKHQ9dUEoQSkpPT09ImZvcm1kYXRhInx8dD09PSJvYmplY3QiJiZOKEEudG9TdHJpbmcpJiZBLnRvU3RyaW5nKCk9PT0iW29iamVjdCBGb3JtRGF0YV0iKSl9LFZlPUcoIlVSTFNlYXJjaFBhcmFtcyIpLFtfZSxYZSx6ZSx2ZV09WyJSZWFkYWJsZVN0cmVhbSIsIlJlcXVlc3QiLCJSZXNwb25zZSIsIkhlYWRlcnMiXS5tYXAoRyksJGU9QT0+QS50cmltP0EudHJpbSgpOkEucmVwbGFjZSgvXltcXHNcXHVGRUZGXFx4QTBdK3xbXFxzXFx1RkVGRlxceEEwXSskL2csIiIpO2Z1bmN0aW9uIEFBKEEsdCx7YWxsT3duS2V5czplPSExfT17fSl7aWYoQT09PW51bGx8fHR5cGVvZiBBPiJ1IilyZXR1cm47bGV0IEkscjtpZih0eXBlb2YgQSE9Im9iamVjdCImJihBPVtBXSksaihBKSlmb3IoST0wLHI9QS5sZW5ndGg7STxyO0krKyl0LmNhbGwobnVsbCxBW0ldLEksQSk7ZWxzZXtsZXQgbz1lP09iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKEEpOk9iamVjdC5rZXlzKEEpLGc9by5sZW5ndGgsQztmb3IoST0wO0k8ZztJKyspQz1vW0ldLHQuY2FsbChudWxsLEFbQ10sQyxBKX19ZnVuY3Rpb24gRnQoQSx0KXt0PXQudG9Mb3dlckNhc2UoKTtsZXQgZT1PYmplY3Qua2V5cyhBKSxJPWUubGVuZ3RoLHI7Zm9yKDtJLS0gPjA7KWlmKHI9ZVtJXSx0PT09ci50b0xvd2VyQ2FzZSgpKXJldHVybiByO3JldHVybiBudWxsfXZhciB4PXR5cGVvZiBnbG9iYWxUaGlzPCJ1Ij9nbG9iYWxUaGlzOnR5cGVvZiBzZWxmPCJ1Ij9zZWxmOnR5cGVvZiB3aW5kb3c8InUiP3dpbmRvdzpnbG9iYWwsUnQ9QT0+ISQoQSkmJkEhPT14O2Z1bmN0aW9uIEtBKCl7bGV0e2Nhc2VsZXNzOkF9PVJ0KHRoaXMpJiZ0aGlzfHx7fSx0PXt9LGU9KEkscik9PntsZXQgbz1BJiZGdCh0LHIpfHxyO2xBKHRbb10pJiZsQShJKT90W29dPUtBKHRbb10sSSk6bEEoSSk/dFtvXT1LQSh7fSxJKTpqKEkpP3Rbb109SS5zbGljZSgpOnRbb109SX07Zm9yKGxldCBJPTAscj1hcmd1bWVudHMubGVuZ3RoO0k8cjtJKyspYXJndW1lbnRzW0ldJiZBQShhcmd1bWVudHNbSV0sZSk7cmV0dXJuIHR9dmFyIEFJPShBLHQsZSx7YWxsT3duS2V5czpJfT17fSk9PihBQSh0LChyLG8pPT57ZSYmTihyKT9BW29dPXYocixlKTpBW29dPXJ9LHthbGxPd25LZXlzOkl9KSxBKSx0ST1BPT4oQS5jaGFyQ29kZUF0KDApPT09NjUyNzkmJihBPUEuc2xpY2UoMSkpLEEpLGVJPShBLHQsZSxJKT0+e0EucHJvdG90eXBlPU9iamVjdC5jcmVhdGUodC5wcm90b3R5cGUsSSksQS5wcm90b3R5cGUuY29uc3RydWN0b3I9QSxPYmplY3QuZGVmaW5lUHJvcGVydHkoQSwic3VwZXIiLHt2YWx1ZTp0LnByb3RvdHlwZX0pLGUmJk9iamVjdC5hc3NpZ24oQS5wcm90b3R5cGUsZSl9LElJPShBLHQsZSxJKT0+e2xldCByLG8sZyxDPXt9O2lmKHQ9dHx8e30sQT09bnVsbClyZXR1cm4gdDtkb3tmb3Iocj1PYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhBKSxvPXIubGVuZ3RoO28tLSA+MDspZz1yW29dLCghSXx8SShnLEEsdCkpJiYhQ1tnXSYmKHRbZ109QVtnXSxDW2ddPSEwKTtBPWUhPT0hMSYmT0EoQSl9d2hpbGUoQSYmKCFlfHxlKEEsdCkpJiZBIT09T2JqZWN0LnByb3RvdHlwZSk7cmV0dXJuIHR9LHJJPShBLHQsZSk9PntBPVN0cmluZyhBKSwoZT09PXZvaWQgMHx8ZT5BLmxlbmd0aCkmJihlPUEubGVuZ3RoKSxlLT10Lmxlbmd0aDtsZXQgST1BLmluZGV4T2YodCxlKTtyZXR1cm4gSSE9PS0xJiZJPT09ZX0sb0k9QT0+e2lmKCFBKXJldHVybiBudWxsO2lmKGooQSkpcmV0dXJuIEE7bGV0IHQ9QS5sZW5ndGg7aWYoIVN0KHQpKXJldHVybiBudWxsO2xldCBlPW5ldyBBcnJheSh0KTtmb3IoO3QtLSA+MDspZVt0XT1BW3RdO3JldHVybiBlfSxnST0oQT0+dD0+QSYmdCBpbnN0YW5jZW9mIEEpKHR5cGVvZiBVaW50OEFycmF5PCJ1IiYmT0EoVWludDhBcnJheSkpLGlJPShBLHQpPT57bGV0IEk9KEEmJkFbU3ltYm9sLml0ZXJhdG9yXSkuY2FsbChBKSxyO2Zvcig7KHI9SS5uZXh0KCkpJiYhci5kb25lOyl7bGV0IG89ci52YWx1ZTt0LmNhbGwoQSxvWzBdLG9bMV0pfX0sbkk9KEEsdCk9PntsZXQgZSxJPVtdO2Zvcig7KGU9QS5leGVjKHQpKSE9PW51bGw7KUkucHVzaChlKTtyZXR1cm4gSX0sc0k9RygiSFRNTEZvcm1FbGVtZW50IiksQ0k9QT0+QS50b0xvd2VyQ2FzZSgpLnJlcGxhY2UoL1stX1xcc10oW2EtelxcZF0pKFxcdyopL2csZnVuY3Rpb24oZSxJLHIpe3JldHVybiBJLnRvVXBwZXJDYXNlKCkrcn0pLG10PSgoe2hhc093blByb3BlcnR5OkF9KT0+KHQsZSk9PkEuY2FsbCh0LGUpKShPYmplY3QucHJvdG90eXBlKSxCST1HKCJSZWdFeHAiKSxOdD0oQSx0KT0+e2xldCBlPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKEEpLEk9e307QUEoZSwocixvKT0+e2xldCBnOyhnPXQocixvLEEpKSE9PSExJiYoSVtvXT1nfHxyKX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKEEsSSl9LGFJPUE9PntOdChBLCh0LGUpPT57aWYoTihBKSYmWyJhcmd1bWVudHMiLCJjYWxsZXIiLCJjYWxsZWUiXS5pbmRleE9mKGUpIT09LTEpcmV0dXJuITE7bGV0IEk9QVtlXTtpZihOKEkpKXtpZih0LmVudW1lcmFibGU9ITEsIndyaXRhYmxlImluIHQpe3Qud3JpdGFibGU9ITE7cmV0dXJufXQuc2V0fHwodC5zZXQ9KCk9Pnt0aHJvdyBFcnJvcigiQ2FuIG5vdCByZXdyaXRlIHJlYWQtb25seSBtZXRob2QgXCciK2UrIlwnIil9KX19KX0sUUk9KEEsdCk9PntsZXQgZT17fSxJPXI9PntyLmZvckVhY2gobz0+e2Vbb109ITB9KX07cmV0dXJuIGooQSk/SShBKTpJKFN0cmluZyhBKS5zcGxpdCh0KSksZX0sRUk9KCk9Pnt9LGNJPShBLHQpPT5BIT1udWxsJiZOdW1iZXIuaXNGaW5pdGUoQT0rQSk/QTp0LFRBPSJhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5eiIsd3Q9IjAxMjM0NTY3ODkiLFV0PXtESUdJVDp3dCxBTFBIQTpUQSxBTFBIQV9ESUdJVDpUQStUQS50b1VwcGVyQ2FzZSgpK3d0fSxmST0oQT0xNix0PVV0LkFMUEhBX0RJR0lUKT0+e2xldCBlPSIiLHtsZW5ndGg6SX09dDtmb3IoO0EtLTspZSs9dFtNYXRoLnJhbmRvbSgpKkl8MF07cmV0dXJuIGV9O2Z1bmN0aW9uIGxJKEEpe3JldHVybiEhKEEmJk4oQS5hcHBlbmQpJiZBW1N5bWJvbC50b1N0cmluZ1RhZ109PT0iRm9ybURhdGEiJiZBW1N5bWJvbC5pdGVyYXRvcl0pfXZhciB1ST1BPT57bGV0IHQ9bmV3IEFycmF5KDEwKSxlPShJLHIpPT57aWYoaEEoSSkpe2lmKHQuaW5kZXhPZihJKT49MClyZXR1cm47aWYoISgidG9KU09OImluIEkpKXt0W3JdPUk7bGV0IG89aihJKT9bXTp7fTtyZXR1cm4gQUEoSSwoZyxDKT0+e2xldCBRPWUoZyxyKzEpOyEkKFEpJiYob1tDXT1RKX0pLHRbcl09dm9pZCAwLG99fXJldHVybiBJfTtyZXR1cm4gZShBLDApfSxEST1HKCJBc3luY0Z1bmN0aW9uIiksaEk9QT0+QSYmKGhBKEEpfHxOKEEpKSYmTihBLnRoZW4pJiZOKEEuY2F0Y2gpLEd0PSgoQSx0KT0+QT9zZXRJbW1lZGlhdGU6dD8oKGUsSSk9Pih4LmFkZEV2ZW50TGlzdGVuZXIoIm1lc3NhZ2UiLCh7c291cmNlOnIsZGF0YTpvfSk9PntyPT09eCYmbz09PWUmJkkubGVuZ3RoJiZJLnNoaWZ0KCkoKX0sITEpLHI9PntJLnB1c2gocikseC5wb3N0TWVzc2FnZShlLCIqIil9KSkoYGF4aW9zQCR7TWF0aC5yYW5kb20oKX1gLFtdKTplPT5zZXRUaW1lb3V0KGUpKSh0eXBlb2Ygc2V0SW1tZWRpYXRlPT0iZnVuY3Rpb24iLE4oeC5wb3N0TWVzc2FnZSkpLGRJPXR5cGVvZiBxdWV1ZU1pY3JvdGFzazwidSI/cXVldWVNaWNyb3Rhc2suYmluZCh4KTp0eXBlb2YgcHJvY2VzczwidSImJnByb2Nlc3MubmV4dFRpY2t8fEd0LGk9e2lzQXJyYXk6aixpc0FycmF5QnVmZmVyOnB0LGlzQnVmZmVyOnFlLGlzRm9ybURhdGE6WmUsaXNBcnJheUJ1ZmZlclZpZXc6TWUsaXNTdHJpbmc6VGUsaXNOdW1iZXI6U3QsaXNCb29sZWFuOktlLGlzT2JqZWN0OmhBLGlzUGxhaW5PYmplY3Q6bEEsaXNSZWFkYWJsZVN0cmVhbTpfZSxpc1JlcXVlc3Q6WGUsaXNSZXNwb25zZTp6ZSxpc0hlYWRlcnM6dmUsaXNVbmRlZmluZWQ6JCxpc0RhdGU6T2UsaXNGaWxlOnhlLGlzQmxvYjpQZSxpc1JlZ0V4cDpCSSxpc0Z1bmN0aW9uOk4saXNTdHJlYW06V2UsaXNVUkxTZWFyY2hQYXJhbXM6VmUsaXNUeXBlZEFycmF5OmdJLGlzRmlsZUxpc3Q6amUsZm9yRWFjaDpBQSxtZXJnZTpLQSxleHRlbmQ6QUksdHJpbTokZSxzdHJpcEJPTTp0SSxpbmhlcml0czplSSx0b0ZsYXRPYmplY3Q6SUksa2luZE9mOnVBLGtpbmRPZlRlc3Q6RyxlbmRzV2l0aDpySSx0b0FycmF5Om9JLGZvckVhY2hFbnRyeTppSSxtYXRjaEFsbDpuSSxpc0hUTUxGb3JtOnNJLGhhc093blByb3BlcnR5Om10LGhhc093blByb3A6bXQscmVkdWNlRGVzY3JpcHRvcnM6TnQsZnJlZXplTWV0aG9kczphSSx0b09iamVjdFNldDpRSSx0b0NhbWVsQ2FzZTpDSSxub29wOkVJLHRvRmluaXRlTnVtYmVyOmNJLGZpbmRLZXk6RnQsZ2xvYmFsOngsaXNDb250ZXh0RGVmaW5lZDpSdCxBTFBIQUJFVDpVdCxnZW5lcmF0ZVN0cmluZzpmSSxpc1NwZWNDb21wbGlhbnRGb3JtOmxJLHRvSlNPTk9iamVjdDp1SSxpc0FzeW5jRm46REksaXNUaGVuYWJsZTpoSSxzZXRJbW1lZGlhdGU6R3QsYXNhcDpkSX07ZnVuY3Rpb24gVyhBLHQsZSxJLHIpe0Vycm9yLmNhbGwodGhpcyksRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2U/RXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UodGhpcyx0aGlzLmNvbnN0cnVjdG9yKTp0aGlzLnN0YWNrPW5ldyBFcnJvcigpLnN0YWNrLHRoaXMubWVzc2FnZT1BLHRoaXMubmFtZT0iQXhpb3NFcnJvciIsdCYmKHRoaXMuY29kZT10KSxlJiYodGhpcy5jb25maWc9ZSksSSYmKHRoaXMucmVxdWVzdD1JKSxyJiYodGhpcy5yZXNwb25zZT1yKX1pLmluaGVyaXRzKFcsRXJyb3Ise3RvSlNPTjpmdW5jdGlvbigpe3JldHVybnttZXNzYWdlOnRoaXMubWVzc2FnZSxuYW1lOnRoaXMubmFtZSxkZXNjcmlwdGlvbjp0aGlzLmRlc2NyaXB0aW9uLG51bWJlcjp0aGlzLm51bWJlcixmaWxlTmFtZTp0aGlzLmZpbGVOYW1lLGxpbmVOdW1iZXI6dGhpcy5saW5lTnVtYmVyLGNvbHVtbk51bWJlcjp0aGlzLmNvbHVtbk51bWJlcixzdGFjazp0aGlzLnN0YWNrLGNvbmZpZzppLnRvSlNPTk9iamVjdCh0aGlzLmNvbmZpZyksY29kZTp0aGlzLmNvZGUsc3RhdHVzOnRoaXMucmVzcG9uc2UmJnRoaXMucmVzcG9uc2Uuc3RhdHVzP3RoaXMucmVzcG9uc2Uuc3RhdHVzOm51bGx9fX0pO3ZhciBrdD1XLnByb3RvdHlwZSxMdD17fTtbIkVSUl9CQURfT1BUSU9OX1ZBTFVFIiwiRVJSX0JBRF9PUFRJT04iLCJFQ09OTkFCT1JURUQiLCJFVElNRURPVVQiLCJFUlJfTkVUV09SSyIsIkVSUl9GUl9UT09fTUFOWV9SRURJUkVDVFMiLCJFUlJfREVQUkVDQVRFRCIsIkVSUl9CQURfUkVTUE9OU0UiLCJFUlJfQkFEX1JFUVVFU1QiLCJFUlJfQ0FOQ0VMRUQiLCJFUlJfTk9UX1NVUFBPUlQiLCJFUlJfSU5WQUxJRF9VUkwiXS5mb3JFYWNoKEE9PntMdFtBXT17dmFsdWU6QX19KTtPYmplY3QuZGVmaW5lUHJvcGVydGllcyhXLEx0KTtPYmplY3QuZGVmaW5lUHJvcGVydHkoa3QsImlzQXhpb3NFcnJvciIse3ZhbHVlOiEwfSk7Vy5mcm9tPShBLHQsZSxJLHIsbyk9PntsZXQgZz1PYmplY3QuY3JlYXRlKGt0KTtyZXR1cm4gaS50b0ZsYXRPYmplY3QoQSxnLGZ1bmN0aW9uKFEpe3JldHVybiBRIT09RXJyb3IucHJvdG90eXBlfSxDPT5DIT09ImlzQXhpb3NFcnJvciIpLFcuY2FsbChnLEEubWVzc2FnZSx0LGUsSSxyKSxnLmNhdXNlPUEsZy5uYW1lPUEubmFtZSxvJiZPYmplY3QuYXNzaWduKGcsbyksZ307dmFyIHU9Vzt2YXIgZEE9bnVsbDtmdW5jdGlvbiB4QShBKXtyZXR1cm4gaS5pc1BsYWluT2JqZWN0KEEpfHxpLmlzQXJyYXkoQSl9ZnVuY3Rpb24gYnQoQSl7cmV0dXJuIGkuZW5kc1dpdGgoQSwiW10iKT9BLnNsaWNlKDAsLTIpOkF9ZnVuY3Rpb24gSnQoQSx0LGUpe3JldHVybiBBP0EuY29uY2F0KHQpLm1hcChmdW5jdGlvbihyLG8pe3JldHVybiByPWJ0KHIpLCFlJiZvPyJbIityKyJdIjpyfSkuam9pbihlPyIuIjoiIik6dH1mdW5jdGlvbiB5SShBKXtyZXR1cm4gaS5pc0FycmF5KEEpJiYhQS5zb21lKHhBKX12YXIgbUk9aS50b0ZsYXRPYmplY3QoaSx7fSxudWxsLGZ1bmN0aW9uKHQpe3JldHVybi9eaXNbQS1aXS8udGVzdCh0KX0pO2Z1bmN0aW9uIHdJKEEsdCxlKXtpZighaS5pc09iamVjdChBKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJ0YXJnZXQgbXVzdCBiZSBhbiBvYmplY3QiKTt0PXR8fG5ldyhkQXx8Rm9ybURhdGEpLGU9aS50b0ZsYXRPYmplY3QoZSx7bWV0YVRva2VuczohMCxkb3RzOiExLGluZGV4ZXM6ITF9LCExLGZ1bmN0aW9uKGwsYyl7cmV0dXJuIWkuaXNVbmRlZmluZWQoY1tsXSl9KTtsZXQgST1lLm1ldGFUb2tlbnMscj1lLnZpc2l0b3J8fG4sbz1lLmRvdHMsZz1lLmluZGV4ZXMsUT0oZS5CbG9ifHx0eXBlb2YgQmxvYjwidSImJkJsb2IpJiZpLmlzU3BlY0NvbXBsaWFudEZvcm0odCk7aWYoIWkuaXNGdW5jdGlvbihyKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJ2aXNpdG9yIG11c3QgYmUgYSBmdW5jdGlvbiIpO2Z1bmN0aW9uIGEoRSl7aWYoRT09PW51bGwpcmV0dXJuIiI7aWYoaS5pc0RhdGUoRSkpcmV0dXJuIEUudG9JU09TdHJpbmcoKTtpZighUSYmaS5pc0Jsb2IoRSkpdGhyb3cgbmV3IHUoIkJsb2IgaXMgbm90IHN1cHBvcnRlZC4gVXNlIGEgQnVmZmVyIGluc3RlYWQuIik7cmV0dXJuIGkuaXNBcnJheUJ1ZmZlcihFKXx8aS5pc1R5cGVkQXJyYXkoRSk/USYmdHlwZW9mIEJsb2I9PSJmdW5jdGlvbiI/bmV3IEJsb2IoW0VdKTpCdWZmZXIuZnJvbShFKTpFfWZ1bmN0aW9uIG4oRSxsLGMpe2xldCBwPUU7aWYoRSYmIWMmJnR5cGVvZiBFPT0ib2JqZWN0Iil7aWYoaS5lbmRzV2l0aChsLCJ7fSIpKWw9ST9sOmwuc2xpY2UoMCwtMiksRT1KU09OLnN0cmluZ2lmeShFKTtlbHNlIGlmKGkuaXNBcnJheShFKSYmeUkoRSl8fChpLmlzRmlsZUxpc3QoRSl8fGkuZW5kc1dpdGgobCwiW10iKSkmJihwPWkudG9BcnJheShFKSkpcmV0dXJuIGw9YnQobCkscC5mb3JFYWNoKGZ1bmN0aW9uKEQsVSl7IShpLmlzVW5kZWZpbmVkKEQpfHxEPT09bnVsbCkmJnQuYXBwZW5kKGc9PT0hMD9KdChbbF0sVSxvKTpnPT09bnVsbD9sOmwrIltdIixhKEQpKX0pLCExfXJldHVybiB4QShFKT8hMDoodC5hcHBlbmQoSnQoYyxsLG8pLGEoRSkpLCExKX1sZXQgcz1bXSxmPU9iamVjdC5hc3NpZ24obUkse2RlZmF1bHRWaXNpdG9yOm4sY29udmVydFZhbHVlOmEsaXNWaXNpdGFibGU6eEF9KTtmdW5jdGlvbiBCKEUsbCl7aWYoIWkuaXNVbmRlZmluZWQoRSkpe2lmKHMuaW5kZXhPZihFKSE9PS0xKXRocm93IEVycm9yKCJDaXJjdWxhciByZWZlcmVuY2UgZGV0ZWN0ZWQgaW4gIitsLmpvaW4oIi4iKSk7cy5wdXNoKEUpLGkuZm9yRWFjaChFLGZ1bmN0aW9uKHAsUyl7KCEoaS5pc1VuZGVmaW5lZChwKXx8cD09PW51bGwpJiZyLmNhbGwodCxwLGkuaXNTdHJpbmcoUyk/Uy50cmltKCk6UyxsLGYpKT09PSEwJiZCKHAsbD9sLmNvbmNhdChTKTpbU10pfSkscy5wb3AoKX19aWYoIWkuaXNPYmplY3QoQSkpdGhyb3cgbmV3IFR5cGVFcnJvcigiZGF0YSBtdXN0IGJlIGFuIG9iamVjdCIpO3JldHVybiBCKEEpLHR9dmFyIHE9d0k7ZnVuY3Rpb24gSHQoQSl7bGV0IHQ9eyIhIjoiJTI1MjEiLCJcJyI6IiUyNTI3IiwiKCI6IiUyNTI4IiwiKSI6IiUyNTI5IiwifiI6IiUyNTdFIiwiJTI1MjAiOiIrIiwiJTI1MDAiOiJcXDAifTtyZXR1cm4gZW5jb2RlVVJJQ29tcG9uZW50KEEpLnJlcGxhY2UoL1shXCcoKX5dfCUyNTIwfCUyNTAwL2csZnVuY3Rpb24oSSl7cmV0dXJuIHRbSV19KX1mdW5jdGlvbiBZdChBLHQpe3RoaXMuX3BhaXJzPVtdLEEmJnEoQSx0aGlzLHQpfXZhciBxdD1ZdC5wcm90b3R5cGU7cXQuYXBwZW5kPWZ1bmN0aW9uKHQsZSl7dGhpcy5fcGFpcnMucHVzaChbdCxlXSl9O3F0LnRvU3RyaW5nPWZ1bmN0aW9uKHQpe2xldCBlPXQ/ZnVuY3Rpb24oSSl7cmV0dXJuIHQuY2FsbCh0aGlzLEksSHQpfTpIdDtyZXR1cm4gdGhpcy5fcGFpcnMubWFwKGZ1bmN0aW9uKHIpe3JldHVybiBlKHJbMF0pKyI9IitlKHJbMV0pfSwiIikuam9pbigiJiIpfTt2YXIgeUE9WXQ7ZnVuY3Rpb24gcEkoQSl7cmV0dXJuIGVuY29kZVVSSUNvbXBvbmVudChBKS5yZXBsYWNlKC8lMjUzQS9naSwiOiIpLnJlcGxhY2UoLyUyNTI0L2csIiQiKS5yZXBsYWNlKC8lMjUyQy9naSwiLCIpLnJlcGxhY2UoLyUyNTIwL2csIisiKS5yZXBsYWNlKC8lMjU1Qi9naSwiWyIpLnJlcGxhY2UoLyUyNTVEL2dpLCJdIil9ZnVuY3Rpb24gdEEoQSx0LGUpe2lmKCF0KXJldHVybiBBO2xldCBJPWUmJmUuZW5jb2RlfHxwSSxyPWUmJmUuc2VyaWFsaXplLG87aWYocj9vPXIodCxlKTpvPWkuaXNVUkxTZWFyY2hQYXJhbXModCk/dC50b1N0cmluZygpOm5ldyB5QSh0LGUpLnRvU3RyaW5nKEkpLG8pe2xldCBnPUEuaW5kZXhPZigiJTIzIik7ZyE9PS0xJiYoQT1BLnNsaWNlKDAsZykpLEErPShBLmluZGV4T2YoIj8iKT09PS0xPyI/IjoiJiIpK299cmV0dXJuIEF9dmFyIFBBPWNsYXNze2NvbnN0cnVjdG9yKCl7dGhpcy5oYW5kbGVycz1bXX11c2UodCxlLEkpe3JldHVybiB0aGlzLmhhbmRsZXJzLnB1c2goe2Z1bGZpbGxlZDp0LHJlamVjdGVkOmUsc3luY2hyb25vdXM6ST9JLnN5bmNocm9ub3VzOiExLHJ1bldoZW46ST9JLnJ1bldoZW46bnVsbH0pLHRoaXMuaGFuZGxlcnMubGVuZ3RoLTF9ZWplY3QodCl7dGhpcy5oYW5kbGVyc1t0XSYmKHRoaXMuaGFuZGxlcnNbdF09bnVsbCl9Y2xlYXIoKXt0aGlzLmhhbmRsZXJzJiYodGhpcy5oYW5kbGVycz1bXSl9Zm9yRWFjaCh0KXtpLmZvckVhY2godGhpcy5oYW5kbGVycyxmdW5jdGlvbihJKXtJIT09bnVsbCYmdChJKX0pfX0sakE9UEE7dmFyIG1BPXtzaWxlbnRKU09OUGFyc2luZzohMCxmb3JjZWRKU09OUGFyc2luZzohMCxjbGFyaWZ5VGltZW91dEVycm9yOiExfTt2YXIgTXQ9dHlwZW9mIFVSTFNlYXJjaFBhcmFtczwidSI/VVJMU2VhcmNoUGFyYW1zOnlBO3ZhciBUdD10eXBlb2YgRm9ybURhdGE8InUiP0Zvcm1EYXRhOm51bGw7dmFyIEt0PXR5cGVvZiBCbG9iPCJ1Ij9CbG9iOm51bGw7dmFyIE90PXtpc0Jyb3dzZXI6ITAsY2xhc3Nlczp7VVJMU2VhcmNoUGFyYW1zOk10LEZvcm1EYXRhOlR0LEJsb2I6S3R9LHByb3RvY29sczpbImh0dHAiLCJodHRwcyIsImZpbGUiLCJibG9iIiwidXJsIiwiZGF0YSJdfTt2YXIgWkE9e307d2UoWkEse2hhc0Jyb3dzZXJFbnY6KCk9PldBLGhhc1N0YW5kYXJkQnJvd3NlckVudjooKT0+U0ksaGFzU3RhbmRhcmRCcm93c2VyV2ViV29ya2VyRW52OigpPT5GSSxvcmlnaW46KCk9PlJJfSk7dmFyIFdBPXR5cGVvZiB3aW5kb3c8InUiJiZ0eXBlb2YgZG9jdW1lbnQ8InUiLFNJPShBPT5XQSYmWyJSZWFjdE5hdGl2ZSIsIk5hdGl2ZVNjcmlwdCIsIk5TIl0uaW5kZXhPZihBKTwwKSh0eXBlb2YgbmF2aWdhdG9yPCJ1IiYmbmF2aWdhdG9yLnByb2R1Y3QpLEZJPXR5cGVvZiBXb3JrZXJHbG9iYWxTY29wZTwidSImJnNlbGYgaW5zdGFuY2VvZiBXb3JrZXJHbG9iYWxTY29wZSYmdHlwZW9mIHNlbGYuaW1wb3J0U2NyaXB0cz09ImZ1bmN0aW9uIixSST1XQSYmd2luZG93LmxvY2F0aW9uLmhyZWZ8fCJodHRwOi8vbG9jYWxob3N0Ijt2YXIgdz17Li4uWkEsLi4uT3R9O2Z1bmN0aW9uIFZBKEEsdCl7cmV0dXJuIHEoQSxuZXcgdy5jbGFzc2VzLlVSTFNlYXJjaFBhcmFtcyxPYmplY3QuYXNzaWduKHt2aXNpdG9yOmZ1bmN0aW9uKGUsSSxyLG8pe3JldHVybiB3LmlzTm9kZSYmaS5pc0J1ZmZlcihlKT8odGhpcy5hcHBlbmQoSSxlLnRvU3RyaW5nKCJiYXNlNjQiKSksITEpOm8uZGVmYXVsdFZpc2l0b3IuYXBwbHkodGhpcyxhcmd1bWVudHMpfX0sdCkpfWZ1bmN0aW9uIE5JKEEpe3JldHVybiBpLm1hdGNoQWxsKC9cXHcrfFxcWyhcXHcqKV0vZyxBKS5tYXAodD0+dFswXT09PSJbXSI/IiI6dFsxXXx8dFswXSl9ZnVuY3Rpb24gVUkoQSl7bGV0IHQ9e30sZT1PYmplY3Qua2V5cyhBKSxJLHI9ZS5sZW5ndGgsbztmb3IoST0wO0k8cjtJKyspbz1lW0ldLHRbb109QVtvXTtyZXR1cm4gdH1mdW5jdGlvbiBHSShBKXtmdW5jdGlvbiB0KGUsSSxyLG8pe2xldCBnPWVbbysrXTtpZihnPT09Il9fcHJvdG9fXyIpcmV0dXJuITA7bGV0IEM9TnVtYmVyLmlzRmluaXRlKCtnKSxRPW8+PWUubGVuZ3RoO3JldHVybiBnPSFnJiZpLmlzQXJyYXkocik/ci5sZW5ndGg6ZyxRPyhpLmhhc093blByb3AocixnKT9yW2ddPVtyW2ddLEldOnJbZ109SSwhQyk6KCghcltnXXx8IWkuaXNPYmplY3QocltnXSkpJiYocltnXT1bXSksdChlLEkscltnXSxvKSYmaS5pc0FycmF5KHJbZ10pJiYocltnXT1VSShyW2ddKSksIUMpfWlmKGkuaXNGb3JtRGF0YShBKSYmaS5pc0Z1bmN0aW9uKEEuZW50cmllcykpe2xldCBlPXt9O3JldHVybiBpLmZvckVhY2hFbnRyeShBLChJLHIpPT57dChOSShJKSxyLGUsMCl9KSxlfXJldHVybiBudWxsfXZhciB3QT1HSTtmdW5jdGlvbiBrSShBLHQsZSl7aWYoaS5pc1N0cmluZyhBKSl0cnl7cmV0dXJuKHR8fEpTT04ucGFyc2UpKEEpLGkudHJpbShBKX1jYXRjaChJKXtpZihJLm5hbWUhPT0iU3ludGF4RXJyb3IiKXRocm93IEl9cmV0dXJuKGV8fEpTT04uc3RyaW5naWZ5KShBKX12YXIgX0E9e3RyYW5zaXRpb25hbDptQSxhZGFwdGVyOlsieGhyIiwiaHR0cCIsImZldGNoIl0sdHJhbnNmb3JtUmVxdWVzdDpbZnVuY3Rpb24odCxlKXtsZXQgST1lLmdldENvbnRlbnRUeXBlKCl8fCIiLHI9SS5pbmRleE9mKCJhcHBsaWNhdGlvbi9qc29uIik+LTEsbz1pLmlzT2JqZWN0KHQpO2lmKG8mJmkuaXNIVE1MRm9ybSh0KSYmKHQ9bmV3IEZvcm1EYXRhKHQpKSxpLmlzRm9ybURhdGEodCkpcmV0dXJuIHI/SlNPTi5zdHJpbmdpZnkod0EodCkpOnQ7aWYoaS5pc0FycmF5QnVmZmVyKHQpfHxpLmlzQnVmZmVyKHQpfHxpLmlzU3RyZWFtKHQpfHxpLmlzRmlsZSh0KXx8aS5pc0Jsb2IodCl8fGkuaXNSZWFkYWJsZVN0cmVhbSh0KSlyZXR1cm4gdDtpZihpLmlzQXJyYXlCdWZmZXJWaWV3KHQpKXJldHVybiB0LmJ1ZmZlcjtpZihpLmlzVVJMU2VhcmNoUGFyYW1zKHQpKXJldHVybiBlLnNldENvbnRlbnRUeXBlKCJhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQ7Y2hhcnNldD11dGYtOCIsITEpLHQudG9TdHJpbmcoKTtsZXQgQztpZihvKXtpZihJLmluZGV4T2YoImFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCIpPi0xKXJldHVybiBWQSh0LHRoaXMuZm9ybVNlcmlhbGl6ZXIpLnRvU3RyaW5nKCk7aWYoKEM9aS5pc0ZpbGVMaXN0KHQpKXx8SS5pbmRleE9mKCJtdWx0aXBhcnQvZm9ybS1kYXRhIik+LTEpe2xldCBRPXRoaXMuZW52JiZ0aGlzLmVudi5Gb3JtRGF0YTtyZXR1cm4gcShDP3siZmlsZXNbXSI6dH06dCxRJiZuZXcgUSx0aGlzLmZvcm1TZXJpYWxpemVyKX19cmV0dXJuIG98fHI/KGUuc2V0Q29udGVudFR5cGUoImFwcGxpY2F0aW9uL2pzb24iLCExKSxrSSh0KSk6dH1dLHRyYW5zZm9ybVJlc3BvbnNlOltmdW5jdGlvbih0KXtsZXQgZT10aGlzLnRyYW5zaXRpb25hbHx8X0EudHJhbnNpdGlvbmFsLEk9ZSYmZS5mb3JjZWRKU09OUGFyc2luZyxyPXRoaXMucmVzcG9uc2VUeXBlPT09Impzb24iO2lmKGkuaXNSZXNwb25zZSh0KXx8aS5pc1JlYWRhYmxlU3RyZWFtKHQpKXJldHVybiB0O2lmKHQmJmkuaXNTdHJpbmcodCkmJihJJiYhdGhpcy5yZXNwb25zZVR5cGV8fHIpKXtsZXQgZz0hKGUmJmUuc2lsZW50SlNPTlBhcnNpbmcpJiZyO3RyeXtyZXR1cm4gSlNPTi5wYXJzZSh0KX1jYXRjaChDKXtpZihnKXRocm93IEMubmFtZT09PSJTeW50YXhFcnJvciI/dS5mcm9tKEMsdS5FUlJfQkFEX1JFU1BPTlNFLHRoaXMsbnVsbCx0aGlzLnJlc3BvbnNlKTpDfX1yZXR1cm4gdH1dLHRpbWVvdXQ6MCx4c3JmQ29va2llTmFtZToiWFNSRi1UT0tFTiIseHNyZkhlYWRlck5hbWU6IlgtWFNSRi1UT0tFTiIsbWF4Q29udGVudExlbmd0aDotMSxtYXhCb2R5TGVuZ3RoOi0xLGVudjp7Rm9ybURhdGE6dy5jbGFzc2VzLkZvcm1EYXRhLEJsb2I6dy5jbGFzc2VzLkJsb2J9LHZhbGlkYXRlU3RhdHVzOmZ1bmN0aW9uKHQpe3JldHVybiB0Pj0yMDAmJnQ8MzAwfSxoZWFkZXJzOntjb21tb246e0FjY2VwdDoiYXBwbGljYXRpb24vanNvbiwgdGV4dC9wbGFpbiwgKi8qIiwiQ29udGVudC1UeXBlIjp2b2lkIDB9fX07aS5mb3JFYWNoKFsiZGVsZXRlIiwiZ2V0IiwiaGVhZCIsInBvc3QiLCJwdXQiLCJwYXRjaCJdLEE9PntfQS5oZWFkZXJzW0FdPXt9fSk7dmFyIFo9X0E7dmFyIExJPWkudG9PYmplY3RTZXQoWyJhZ2UiLCJhdXRob3JpemF0aW9uIiwiY29udGVudC1sZW5ndGgiLCJjb250ZW50LXR5cGUiLCJldGFnIiwiZXhwaXJlcyIsImZyb20iLCJob3N0IiwiaWYtbW9kaWZpZWQtc2luY2UiLCJpZi11bm1vZGlmaWVkLXNpbmNlIiwibGFzdC1tb2RpZmllZCIsImxvY2F0aW9uIiwibWF4LWZvcndhcmRzIiwicHJveHktYXV0aG9yaXphdGlvbiIsInJlZmVyZXIiLCJyZXRyeS1hZnRlciIsInVzZXItYWdlbnQiXSkseHQ9QT0+e2xldCB0PXt9LGUsSSxyO3JldHVybiBBJiZBLnNwbGl0KGAlMEFgKS5mb3JFYWNoKGZ1bmN0aW9uKGcpe3I9Zy5pbmRleE9mKCI6IiksZT1nLnN1YnN0cmluZygwLHIpLnRyaW0oKS50b0xvd2VyQ2FzZSgpLEk9Zy5zdWJzdHJpbmcocisxKS50cmltKCksISghZXx8dFtlXSYmTElbZV0pJiYoZT09PSJzZXQtY29va2llIj90W2VdP3RbZV0ucHVzaChJKTp0W2VdPVtJXTp0W2VdPXRbZV0/dFtlXSsiLCAiK0k6SSl9KSx0fTt2YXIgUHQ9U3ltYm9sKCJpbnRlcm5hbHMiKTtmdW5jdGlvbiBlQShBKXtyZXR1cm4gQSYmU3RyaW5nKEEpLnRyaW0oKS50b0xvd2VyQ2FzZSgpfWZ1bmN0aW9uIHBBKEEpe3JldHVybiBBPT09ITF8fEE9PW51bGw/QTppLmlzQXJyYXkoQSk/QS5tYXAocEEpOlN0cmluZyhBKX1mdW5jdGlvbiBKSShBKXtsZXQgdD1PYmplY3QuY3JlYXRlKG51bGwpLGU9LyhbXlxccyw7PV0rKVxccyooPzo9XFxzKihbXiw7XSspKT8vZyxJO2Zvcig7ST1lLmV4ZWMoQSk7KXRbSVsxXV09SVsyXTtyZXR1cm4gdH12YXIgYkk9QT0+L15bLV9hLXpBLVowLTleYHx+LCElMjMkJSZcJyorLl0rJC8udGVzdChBLnRyaW0oKSk7ZnVuY3Rpb24gWEEoQSx0LGUsSSxyKXtpZihpLmlzRnVuY3Rpb24oSSkpcmV0dXJuIEkuY2FsbCh0aGlzLHQsZSk7aWYociYmKHQ9ZSksISFpLmlzU3RyaW5nKHQpKXtpZihpLmlzU3RyaW5nKEkpKXJldHVybiB0LmluZGV4T2YoSSkhPT0tMTtpZihpLmlzUmVnRXhwKEkpKXJldHVybiBJLnRlc3QodCl9fWZ1bmN0aW9uIEhJKEEpe3JldHVybiBBLnRyaW0oKS50b0xvd2VyQ2FzZSgpLnJlcGxhY2UoLyhbYS16XFxkXSkoXFx3KikvZywodCxlLEkpPT5lLnRvVXBwZXJDYXNlKCkrSSl9ZnVuY3Rpb24gWUkoQSx0KXtsZXQgZT1pLnRvQ2FtZWxDYXNlKCIgIit0KTtbImdldCIsInNldCIsImhhcyJdLmZvckVhY2goST0+e09iamVjdC5kZWZpbmVQcm9wZXJ0eShBLEkrZSx7dmFsdWU6ZnVuY3Rpb24ocixvLGcpe3JldHVybiB0aGlzW0ldLmNhbGwodGhpcyx0LHIsbyxnKX0sY29uZmlndXJhYmxlOiEwfSl9KX12YXIgVj1jbGFzc3tjb25zdHJ1Y3Rvcih0KXt0JiZ0aGlzLnNldCh0KX1zZXQodCxlLEkpe2xldCByPXRoaXM7ZnVuY3Rpb24gbyhDLFEsYSl7bGV0IG49ZUEoUSk7aWYoIW4pdGhyb3cgbmV3IEVycm9yKCJoZWFkZXIgbmFtZSBtdXN0IGJlIGEgbm9uLWVtcHR5IHN0cmluZyIpO2xldCBzPWkuZmluZEtleShyLG4pOyghc3x8cltzXT09PXZvaWQgMHx8YT09PSEwfHxhPT09dm9pZCAwJiZyW3NdIT09ITEpJiYocltzfHxRXT1wQShDKSl9bGV0IGc9KEMsUSk9PmkuZm9yRWFjaChDLChhLG4pPT5vKGEsbixRKSk7aWYoaS5pc1BsYWluT2JqZWN0KHQpfHx0IGluc3RhbmNlb2YgdGhpcy5jb25zdHJ1Y3RvcilnKHQsZSk7ZWxzZSBpZihpLmlzU3RyaW5nKHQpJiYodD10LnRyaW0oKSkmJiFiSSh0KSlnKHh0KHQpLGUpO2Vsc2UgaWYoaS5pc0hlYWRlcnModCkpZm9yKGxldFtDLFFdb2YgdC5lbnRyaWVzKCkpbyhRLEMsSSk7ZWxzZSB0IT1udWxsJiZvKGUsdCxJKTtyZXR1cm4gdGhpc31nZXQodCxlKXtpZih0PWVBKHQpLHQpe2xldCBJPWkuZmluZEtleSh0aGlzLHQpO2lmKEkpe2xldCByPXRoaXNbSV07aWYoIWUpcmV0dXJuIHI7aWYoZT09PSEwKXJldHVybiBKSShyKTtpZihpLmlzRnVuY3Rpb24oZSkpcmV0dXJuIGUuY2FsbCh0aGlzLHIsSSk7aWYoaS5pc1JlZ0V4cChlKSlyZXR1cm4gZS5leGVjKHIpO3Rocm93IG5ldyBUeXBlRXJyb3IoInBhcnNlciBtdXN0IGJlIGJvb2xlYW58cmVnZXhwfGZ1bmN0aW9uIil9fX1oYXModCxlKXtpZih0PWVBKHQpLHQpe2xldCBJPWkuZmluZEtleSh0aGlzLHQpO3JldHVybiEhKEkmJnRoaXNbSV0hPT12b2lkIDAmJighZXx8WEEodGhpcyx0aGlzW0ldLEksZSkpKX1yZXR1cm4hMX1kZWxldGUodCxlKXtsZXQgST10aGlzLHI9ITE7ZnVuY3Rpb24gbyhnKXtpZihnPWVBKGcpLGcpe2xldCBDPWkuZmluZEtleShJLGcpO0MmJighZXx8WEEoSSxJW0NdLEMsZSkpJiYoZGVsZXRlIElbQ10scj0hMCl9fXJldHVybiBpLmlzQXJyYXkodCk/dC5mb3JFYWNoKG8pOm8odCkscn1jbGVhcih0KXtsZXQgZT1PYmplY3Qua2V5cyh0aGlzKSxJPWUubGVuZ3RoLHI9ITE7Zm9yKDtJLS07KXtsZXQgbz1lW0ldOyghdHx8WEEodGhpcyx0aGlzW29dLG8sdCwhMCkpJiYoZGVsZXRlIHRoaXNbb10scj0hMCl9cmV0dXJuIHJ9bm9ybWFsaXplKHQpe2xldCBlPXRoaXMsST17fTtyZXR1cm4gaS5mb3JFYWNoKHRoaXMsKHIsbyk9PntsZXQgZz1pLmZpbmRLZXkoSSxvKTtpZihnKXtlW2ddPXBBKHIpLGRlbGV0ZSBlW29dO3JldHVybn1sZXQgQz10P0hJKG8pOlN0cmluZyhvKS50cmltKCk7QyE9PW8mJmRlbGV0ZSBlW29dLGVbQ109cEEociksSVtDXT0hMH0pLHRoaXN9Y29uY2F0KC4uLnQpe3JldHVybiB0aGlzLmNvbnN0cnVjdG9yLmNvbmNhdCh0aGlzLC4uLnQpfXRvSlNPTih0KXtsZXQgZT1PYmplY3QuY3JlYXRlKG51bGwpO3JldHVybiBpLmZvckVhY2godGhpcywoSSxyKT0+e0khPW51bGwmJkkhPT0hMSYmKGVbcl09dCYmaS5pc0FycmF5KEkpP0kuam9pbigiLCAiKTpJKX0pLGV9W1N5bWJvbC5pdGVyYXRvcl0oKXtyZXR1cm4gT2JqZWN0LmVudHJpZXModGhpcy50b0pTT04oKSlbU3ltYm9sLml0ZXJhdG9yXSgpfXRvU3RyaW5nKCl7cmV0dXJuIE9iamVjdC5lbnRyaWVzKHRoaXMudG9KU09OKCkpLm1hcCgoW3QsZV0pPT50KyI6ICIrZSkuam9pbihgJTBBYCl9Z2V0W1N5bWJvbC50b1N0cmluZ1RhZ10oKXtyZXR1cm4iQXhpb3NIZWFkZXJzIn1zdGF0aWMgZnJvbSh0KXtyZXR1cm4gdCBpbnN0YW5jZW9mIHRoaXM/dDpuZXcgdGhpcyh0KX1zdGF0aWMgY29uY2F0KHQsLi4uZSl7bGV0IEk9bmV3IHRoaXModCk7cmV0dXJuIGUuZm9yRWFjaChyPT5JLnNldChyKSksSX1zdGF0aWMgYWNjZXNzb3IodCl7bGV0IEk9KHRoaXNbUHRdPXRoaXNbUHRdPXthY2Nlc3NvcnM6e319KS5hY2Nlc3NvcnMscj10aGlzLnByb3RvdHlwZTtmdW5jdGlvbiBvKGcpe2xldCBDPWVBKGcpO0lbQ118fChZSShyLGcpLElbQ109ITApfXJldHVybiBpLmlzQXJyYXkodCk/dC5mb3JFYWNoKG8pOm8odCksdGhpc319O1YuYWNjZXNzb3IoWyJDb250ZW50LVR5cGUiLCJDb250ZW50LUxlbmd0aCIsIkFjY2VwdCIsIkFjY2VwdC1FbmNvZGluZyIsIlVzZXItQWdlbnQiLCJBdXRob3JpemF0aW9uIl0pO2kucmVkdWNlRGVzY3JpcHRvcnMoVi5wcm90b3R5cGUsKHt2YWx1ZTpBfSx0KT0+e2xldCBlPXRbMF0udG9VcHBlckNhc2UoKSt0LnNsaWNlKDEpO3JldHVybntnZXQ6KCk9PkEsc2V0KEkpe3RoaXNbZV09SX19fSk7aS5mcmVlemVNZXRob2RzKFYpO3ZhciBtPVY7ZnVuY3Rpb24gSUEoQSx0KXtsZXQgZT10aGlzfHxaLEk9dHx8ZSxyPW0uZnJvbShJLmhlYWRlcnMpLG89SS5kYXRhO3JldHVybiBpLmZvckVhY2goQSxmdW5jdGlvbihDKXtvPUMuY2FsbChlLG8sci5ub3JtYWxpemUoKSx0P3Quc3RhdHVzOnZvaWQgMCl9KSxyLm5vcm1hbGl6ZSgpLG99ZnVuY3Rpb24gckEoQSl7cmV0dXJuISEoQSYmQS5fX0NBTkNFTF9fKX1mdW5jdGlvbiBqdChBLHQsZSl7dS5jYWxsKHRoaXMsQT8/ImNhbmNlbGVkIix1LkVSUl9DQU5DRUxFRCx0LGUpLHRoaXMubmFtZT0iQ2FuY2VsZWRFcnJvciJ9aS5pbmhlcml0cyhqdCx1LHtfX0NBTkNFTF9fOiEwfSk7dmFyIGI9anQ7ZnVuY3Rpb24gb0EoQSx0LGUpe2xldCBJPWUuY29uZmlnLnZhbGlkYXRlU3RhdHVzOyFlLnN0YXR1c3x8IUl8fEkoZS5zdGF0dXMpP0EoZSk6dChuZXcgdSgiUmVxdWVzdCBmYWlsZWQgd2l0aCBzdGF0dXMgY29kZSAiK2Uuc3RhdHVzLFt1LkVSUl9CQURfUkVRVUVTVCx1LkVSUl9CQURfUkVTUE9OU0VdW01hdGguZmxvb3IoZS5zdGF0dXMvMTAwKS00XSxlLmNvbmZpZyxlLnJlcXVlc3QsZSkpfWZ1bmN0aW9uIHpBKEEpe2xldCB0PS9eKFstK1xcd117MSwyNX0pKDo/XFwvXFwvfDopLy5leGVjKEEpO3JldHVybiB0JiZ0WzFdfHwiIn1mdW5jdGlvbiBxSShBLHQpe0E9QXx8MTA7bGV0IGU9bmV3IEFycmF5KEEpLEk9bmV3IEFycmF5KEEpLHI9MCxvPTAsZztyZXR1cm4gdD10IT09dm9pZCAwP3Q6MWUzLGZ1bmN0aW9uKFEpe2xldCBhPURhdGUubm93KCksbj1JW29dO2d8fChnPWEpLGVbcl09USxJW3JdPWE7bGV0IHM9byxmPTA7Zm9yKDtzIT09cjspZis9ZVtzKytdLHM9cyVBO2lmKHI9KHIrMSklQSxyPT09byYmKG89KG8rMSklQSksYS1nPHQpcmV0dXJuO2xldCBCPW4mJmEtbjtyZXR1cm4gQj9NYXRoLnJvdW5kKGYqMWUzL0IpOnZvaWQgMH19dmFyIFd0PXFJO2Z1bmN0aW9uIE1JKEEsdCl7bGV0IGU9MCxJPTFlMy90LHIsbyxnPShhLG49RGF0ZS5ub3coKSk9PntlPW4scj1udWxsLG8mJihjbGVhclRpbWVvdXQobyksbz1udWxsKSxBLmFwcGx5KG51bGwsYSl9O3JldHVyblsoLi4uYSk9PntsZXQgbj1EYXRlLm5vdygpLHM9bi1lO3M+PUk/ZyhhLG4pOihyPWEsb3x8KG89c2V0VGltZW91dCgoKT0+e289bnVsbCxnKHIpfSxJLXMpKSl9LCgpPT5yJiZnKHIpXX12YXIgWnQ9TUk7dmFyIF89KEEsdCxlPTMpPT57bGV0IEk9MCxyPVd0KDUwLDI1MCk7cmV0dXJuIFp0KG89PntsZXQgZz1vLmxvYWRlZCxDPW8ubGVuZ3RoQ29tcHV0YWJsZT9vLnRvdGFsOnZvaWQgMCxRPWctSSxhPXIoUSksbj1nPD1DO0k9ZztsZXQgcz17bG9hZGVkOmcsdG90YWw6Qyxwcm9ncmVzczpDP2cvQzp2b2lkIDAsYnl0ZXM6USxyYXRlOmF8fHZvaWQgMCxlc3RpbWF0ZWQ6YSYmQyYmbj8oQy1nKS9hOnZvaWQgMCxldmVudDpvLGxlbmd0aENvbXB1dGFibGU6QyE9bnVsbCxbdD8iZG93bmxvYWQiOiJ1cGxvYWQiXTohMH07QShzKX0sZSl9LHZBPShBLHQpPT57bGV0IGU9QSE9bnVsbDtyZXR1cm5bST0+dFswXSh7bGVuZ3RoQ29tcHV0YWJsZTplLHRvdGFsOkEsbG9hZGVkOkl9KSx0WzFdXX0sJEE9QT0+KC4uLnQpPT5pLmFzYXAoKCk9PkEoLi4udCkpO3ZhciBWdD13Lmhhc1N0YW5kYXJkQnJvd3NlckVudj9mdW5jdGlvbigpe2xldCB0PS8obXNpZXx0cmlkZW50KS9pLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCksZT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJhIiksSTtmdW5jdGlvbiByKG8pe2xldCBnPW87cmV0dXJuIHQmJihlLnNldEF0dHJpYnV0ZSgiaHJlZiIsZyksZz1lLmhyZWYpLGUuc2V0QXR0cmlidXRlKCJocmVmIixnKSx7aHJlZjplLmhyZWYscHJvdG9jb2w6ZS5wcm90b2NvbD9lLnByb3RvY29sLnJlcGxhY2UoLzokLywiIik6IiIsaG9zdDplLmhvc3Qsc2VhcmNoOmUuc2VhcmNoP2Uuc2VhcmNoLnJlcGxhY2UoL15cXD8vLCIiKToiIixoYXNoOmUuaGFzaD9lLmhhc2gucmVwbGFjZSgvXiUyMy8sIiIpOiIiLGhvc3RuYW1lOmUuaG9zdG5hbWUscG9ydDplLnBvcnQscGF0aG5hbWU6ZS5wYXRobmFtZS5jaGFyQXQoMCk9PT0iLyI/ZS5wYXRobmFtZToiLyIrZS5wYXRobmFtZX19cmV0dXJuIEk9cih3aW5kb3cubG9jYXRpb24uaHJlZiksZnVuY3Rpb24oZyl7bGV0IEM9aS5pc1N0cmluZyhnKT9yKGcpOmc7cmV0dXJuIEMucHJvdG9jb2w9PT1JLnByb3RvY29sJiZDLmhvc3Q9PT1JLmhvc3R9fSgpOmZ1bmN0aW9uKCl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuITB9fSgpO3ZhciBfdD13Lmhhc1N0YW5kYXJkQnJvd3NlckVudj97d3JpdGUoQSx0LGUsSSxyLG8pe2xldCBnPVtBKyI9IitlbmNvZGVVUklDb21wb25lbnQodCldO2kuaXNOdW1iZXIoZSkmJmcucHVzaCgiZXhwaXJlcz0iK25ldyBEYXRlKGUpLnRvR01UU3RyaW5nKCkpLGkuaXNTdHJpbmcoSSkmJmcucHVzaCgicGF0aD0iK0kpLGkuaXNTdHJpbmcocikmJmcucHVzaCgiZG9tYWluPSIrciksbz09PSEwJiZnLnB1c2goInNlY3VyZSIpLGRvY3VtZW50LmNvb2tpZT1nLmpvaW4oIjsgIil9LHJlYWQoQSl7bGV0IHQ9ZG9jdW1lbnQuY29va2llLm1hdGNoKG5ldyBSZWdFeHAoIihefDtcXFxccyopKCIrQSsiKT0oW147XSopIikpO3JldHVybiB0P2RlY29kZVVSSUNvbXBvbmVudCh0WzNdKTpudWxsfSxyZW1vdmUoQSl7dGhpcy53cml0ZShBLCIiLERhdGUubm93KCktODY0ZTUpfX06e3dyaXRlKCl7fSxyZWFkKCl7cmV0dXJuIG51bGx9LHJlbW92ZSgpe319O2Z1bmN0aW9uIEF0KEEpe3JldHVybi9eKFthLXpdW2EtelxcZCtcXC0uXSo6KT9cXC9cXC8vaS50ZXN0KEEpfWZ1bmN0aW9uIHR0KEEsdCl7cmV0dXJuIHQ/QS5yZXBsYWNlKC9cXC8/XFwvJC8sIiIpKyIvIit0LnJlcGxhY2UoL15cXC8rLywiIik6QX1mdW5jdGlvbiBnQShBLHQpe3JldHVybiBBJiYhQXQodCk/dHQoQSx0KTp0fXZhciBYdD1BPT5BIGluc3RhbmNlb2YgbT97Li4uQX06QTtmdW5jdGlvbiBrKEEsdCl7dD10fHx7fTtsZXQgZT17fTtmdW5jdGlvbiBJKGEsbixzKXtyZXR1cm4gaS5pc1BsYWluT2JqZWN0KGEpJiZpLmlzUGxhaW5PYmplY3Qobik/aS5tZXJnZS5jYWxsKHtjYXNlbGVzczpzfSxhLG4pOmkuaXNQbGFpbk9iamVjdChuKT9pLm1lcmdlKHt9LG4pOmkuaXNBcnJheShuKT9uLnNsaWNlKCk6bn1mdW5jdGlvbiByKGEsbixzKXtpZihpLmlzVW5kZWZpbmVkKG4pKXtpZighaS5pc1VuZGVmaW5lZChhKSlyZXR1cm4gSSh2b2lkIDAsYSxzKX1lbHNlIHJldHVybiBJKGEsbixzKX1mdW5jdGlvbiBvKGEsbil7aWYoIWkuaXNVbmRlZmluZWQobikpcmV0dXJuIEkodm9pZCAwLG4pfWZ1bmN0aW9uIGcoYSxuKXtpZihpLmlzVW5kZWZpbmVkKG4pKXtpZighaS5pc1VuZGVmaW5lZChhKSlyZXR1cm4gSSh2b2lkIDAsYSl9ZWxzZSByZXR1cm4gSSh2b2lkIDAsbil9ZnVuY3Rpb24gQyhhLG4scyl7aWYocyBpbiB0KXJldHVybiBJKGEsbik7aWYocyBpbiBBKXJldHVybiBJKHZvaWQgMCxhKX1sZXQgUT17dXJsOm8sbWV0aG9kOm8sZGF0YTpvLGJhc2VVUkw6Zyx0cmFuc2Zvcm1SZXF1ZXN0OmcsdHJhbnNmb3JtUmVzcG9uc2U6ZyxwYXJhbXNTZXJpYWxpemVyOmcsdGltZW91dDpnLHRpbWVvdXRNZXNzYWdlOmcsd2l0aENyZWRlbnRpYWxzOmcsd2l0aFhTUkZUb2tlbjpnLGFkYXB0ZXI6ZyxyZXNwb25zZVR5cGU6Zyx4c3JmQ29va2llTmFtZTpnLHhzcmZIZWFkZXJOYW1lOmcsb25VcGxvYWRQcm9ncmVzczpnLG9uRG93bmxvYWRQcm9ncmVzczpnLGRlY29tcHJlc3M6ZyxtYXhDb250ZW50TGVuZ3RoOmcsbWF4Qm9keUxlbmd0aDpnLGJlZm9yZVJlZGlyZWN0OmcsdHJhbnNwb3J0OmcsaHR0cEFnZW50OmcsaHR0cHNBZ2VudDpnLGNhbmNlbFRva2VuOmcsc29ja2V0UGF0aDpnLHJlc3BvbnNlRW5jb2Rpbmc6Zyx2YWxpZGF0ZVN0YXR1czpDLGhlYWRlcnM6KGEsbik9PnIoWHQoYSksWHQobiksITApfTtyZXR1cm4gaS5mb3JFYWNoKE9iamVjdC5rZXlzKE9iamVjdC5hc3NpZ24oe30sQSx0KSksZnVuY3Rpb24obil7bGV0IHM9UVtuXXx8cixmPXMoQVtuXSx0W25dLG4pO2kuaXNVbmRlZmluZWQoZikmJnMhPT1DfHwoZVtuXT1mKX0pLGV9dmFyIFNBPUE9PntsZXQgdD1rKHt9LEEpLHtkYXRhOmUsd2l0aFhTUkZUb2tlbjpJLHhzcmZIZWFkZXJOYW1lOnIseHNyZkNvb2tpZU5hbWU6byxoZWFkZXJzOmcsYXV0aDpDfT10O3QuaGVhZGVycz1nPW0uZnJvbShnKSx0LnVybD10QShnQSh0LmJhc2VVUkwsdC51cmwpLEEucGFyYW1zLEEucGFyYW1zU2VyaWFsaXplciksQyYmZy5zZXQoIkF1dGhvcml6YXRpb24iLCJCYXNpYyAiK2J0b2EoKEMudXNlcm5hbWV8fCIiKSsiOiIrKEMucGFzc3dvcmQ/dW5lc2NhcGUoZW5jb2RlVVJJQ29tcG9uZW50KEMucGFzc3dvcmQpKToiIikpKTtsZXQgUTtpZihpLmlzRm9ybURhdGEoZSkpe2lmKHcuaGFzU3RhbmRhcmRCcm93c2VyRW52fHx3Lmhhc1N0YW5kYXJkQnJvd3NlcldlYldvcmtlckVudilnLnNldENvbnRlbnRUeXBlKHZvaWQgMCk7ZWxzZSBpZigoUT1nLmdldENvbnRlbnRUeXBlKCkpIT09ITEpe2xldFthLC4uLm5dPVE/US5zcGxpdCgiOyIpLm1hcChzPT5zLnRyaW0oKSkuZmlsdGVyKEJvb2xlYW4pOltdO2cuc2V0Q29udGVudFR5cGUoW2F8fCJtdWx0aXBhcnQvZm9ybS1kYXRhIiwuLi5uXS5qb2luKCI7ICIpKX19aWYody5oYXNTdGFuZGFyZEJyb3dzZXJFbnYmJihJJiZpLmlzRnVuY3Rpb24oSSkmJihJPUkodCkpLEl8fEkhPT0hMSYmVnQodC51cmwpKSl7bGV0IGE9ciYmbyYmX3QucmVhZChvKTthJiZnLnNldChyLGEpfXJldHVybiB0fTt2YXIgVEk9dHlwZW9mIFhNTEh0dHBSZXF1ZXN0PCJ1Iix6dD1USSYmZnVuY3Rpb24oQSl7cmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKGUsSSl7bGV0IHI9U0EoQSksbz1yLmRhdGEsZz1tLmZyb20oci5oZWFkZXJzKS5ub3JtYWxpemUoKSx7cmVzcG9uc2VUeXBlOkMsb25VcGxvYWRQcm9ncmVzczpRLG9uRG93bmxvYWRQcm9ncmVzczphfT1yLG4scyxmLEIsRTtmdW5jdGlvbiBsKCl7QiYmQigpLEUmJkUoKSxyLmNhbmNlbFRva2VuJiZyLmNhbmNlbFRva2VuLnVuc3Vic2NyaWJlKG4pLHIuc2lnbmFsJiZyLnNpZ25hbC5yZW1vdmVFdmVudExpc3RlbmVyKCJhYm9ydCIsbil9bGV0IGM9bmV3IFhNTEh0dHBSZXF1ZXN0O2Mub3BlbihyLm1ldGhvZC50b1VwcGVyQ2FzZSgpLHIudXJsLCEwKSxjLnRpbWVvdXQ9ci50aW1lb3V0O2Z1bmN0aW9uIHAoKXtpZighYylyZXR1cm47bGV0IEQ9bS5mcm9tKCJnZXRBbGxSZXNwb25zZUhlYWRlcnMiaW4gYyYmYy5nZXRBbGxSZXNwb25zZUhlYWRlcnMoKSksSz17ZGF0YTohQ3x8Qz09PSJ0ZXh0Inx8Qz09PSJqc29uIj9jLnJlc3BvbnNlVGV4dDpjLnJlc3BvbnNlLHN0YXR1czpjLnN0YXR1cyxzdGF0dXNUZXh0OmMuc3RhdHVzVGV4dCxoZWFkZXJzOkQsY29uZmlnOkEscmVxdWVzdDpjfTtvQShmdW5jdGlvbihKKXtlKEopLGwoKX0sZnVuY3Rpb24oSil7SShKKSxsKCl9LEspLGM9bnVsbH0ib25sb2FkZW5kImluIGM/Yy5vbmxvYWRlbmQ9cDpjLm9ucmVhZHlzdGF0ZWNoYW5nZT1mdW5jdGlvbigpeyFjfHxjLnJlYWR5U3RhdGUhPT00fHxjLnN0YXR1cz09PTAmJiEoYy5yZXNwb25zZVVSTCYmYy5yZXNwb25zZVVSTC5pbmRleE9mKCJmaWxlOiIpPT09MCl8fHNldFRpbWVvdXQocCl9LGMub25hYm9ydD1mdW5jdGlvbigpe2MmJihJKG5ldyB1KCJSZXF1ZXN0IGFib3J0ZWQiLHUuRUNPTk5BQk9SVEVELEEsYykpLGM9bnVsbCl9LGMub25lcnJvcj1mdW5jdGlvbigpe0kobmV3IHUoIk5ldHdvcmsgRXJyb3IiLHUuRVJSX05FVFdPUkssQSxjKSksYz1udWxsfSxjLm9udGltZW91dD1mdW5jdGlvbigpe2xldCBVPXIudGltZW91dD8idGltZW91dCBvZiAiK3IudGltZW91dCsibXMgZXhjZWVkZWQiOiJ0aW1lb3V0IGV4Y2VlZGVkIixLPXIudHJhbnNpdGlvbmFsfHxtQTtyLnRpbWVvdXRFcnJvck1lc3NhZ2UmJihVPXIudGltZW91dEVycm9yTWVzc2FnZSksSShuZXcgdShVLEsuY2xhcmlmeVRpbWVvdXRFcnJvcj91LkVUSU1FRE9VVDp1LkVDT05OQUJPUlRFRCxBLGMpKSxjPW51bGx9LG89PT12b2lkIDAmJmcuc2V0Q29udGVudFR5cGUobnVsbCksInNldFJlcXVlc3RIZWFkZXIiaW4gYyYmaS5mb3JFYWNoKGcudG9KU09OKCksZnVuY3Rpb24oVSxLKXtjLnNldFJlcXVlc3RIZWFkZXIoSyxVKX0pLGkuaXNVbmRlZmluZWQoci53aXRoQ3JlZGVudGlhbHMpfHwoYy53aXRoQ3JlZGVudGlhbHM9ISFyLndpdGhDcmVkZW50aWFscyksQyYmQyE9PSJqc29uIiYmKGMucmVzcG9uc2VUeXBlPXIucmVzcG9uc2VUeXBlKSxhJiYoW2YsRV09XyhhLCEwKSxjLmFkZEV2ZW50TGlzdGVuZXIoInByb2dyZXNzIixmKSksUSYmYy51cGxvYWQmJihbcyxCXT1fKFEpLGMudXBsb2FkLmFkZEV2ZW50TGlzdGVuZXIoInByb2dyZXNzIixzKSxjLnVwbG9hZC5hZGRFdmVudExpc3RlbmVyKCJsb2FkZW5kIixCKSksKHIuY2FuY2VsVG9rZW58fHIuc2lnbmFsKSYmKG49RD0+e2MmJihJKCFEfHxELnR5cGU/bmV3IGIobnVsbCxBLGMpOkQpLGMuYWJvcnQoKSxjPW51bGwpfSxyLmNhbmNlbFRva2VuJiZyLmNhbmNlbFRva2VuLnN1YnNjcmliZShuKSxyLnNpZ25hbCYmKHIuc2lnbmFsLmFib3J0ZWQ/bigpOnIuc2lnbmFsLmFkZEV2ZW50TGlzdGVuZXIoImFib3J0IixuKSkpO2xldCBTPXpBKHIudXJsKTtpZihTJiZ3LnByb3RvY29scy5pbmRleE9mKFMpPT09LTEpe0kobmV3IHUoIlVuc3VwcG9ydGVkIHByb3RvY29sICIrUysiOiIsdS5FUlJfQkFEX1JFUVVFU1QsQSkpO3JldHVybn1jLnNlbmQob3x8bnVsbCl9KX07dmFyIEtJPShBLHQpPT57bGV0IGU9bmV3IEFib3J0Q29udHJvbGxlcixJLHI9ZnVuY3Rpb24oUSl7aWYoIUkpe0k9ITAsZygpO2xldCBhPVEgaW5zdGFuY2VvZiBFcnJvcj9ROnRoaXMucmVhc29uO2UuYWJvcnQoYSBpbnN0YW5jZW9mIHU/YTpuZXcgYihhIGluc3RhbmNlb2YgRXJyb3I/YS5tZXNzYWdlOmEpKX19LG89dCYmc2V0VGltZW91dCgoKT0+e3IobmV3IHUoYHRpbWVvdXQgJHt0fSBvZiBtcyBleGNlZWRlZGAsdS5FVElNRURPVVQpKX0sdCksZz0oKT0+e0EmJihvJiZjbGVhclRpbWVvdXQobyksbz1udWxsLEEuZm9yRWFjaChRPT57USYmKFEucmVtb3ZlRXZlbnRMaXN0ZW5lcj9RLnJlbW92ZUV2ZW50TGlzdGVuZXIoImFib3J0IixyKTpRLnVuc3Vic2NyaWJlKHIpKX0pLEE9bnVsbCl9O0EuZm9yRWFjaChRPT5RJiZRLmFkZEV2ZW50TGlzdGVuZXImJlEuYWRkRXZlbnRMaXN0ZW5lcigiYWJvcnQiLHIpKTtsZXR7c2lnbmFsOkN9PWU7cmV0dXJuIEMudW5zdWJzY3JpYmU9ZyxbQywoKT0+e28mJmNsZWFyVGltZW91dChvKSxvPW51bGx9XX0sdnQ9S0k7dmFyIE9JPWZ1bmN0aW9uKihBLHQpe2xldCBlPUEuYnl0ZUxlbmd0aDtpZighdHx8ZTx0KXt5aWVsZCBBO3JldHVybn1sZXQgST0wLHI7Zm9yKDtJPGU7KXI9SSt0LHlpZWxkIEEuc2xpY2UoSSxyKSxJPXJ9LHhJPWFzeW5jIGZ1bmN0aW9uKihBLHQsZSl7Zm9yIGF3YWl0KGxldCBJIG9mIEEpeWllbGQqT0koQXJyYXlCdWZmZXIuaXNWaWV3KEkpP0k6YXdhaXQgZShTdHJpbmcoSSkpLHQpfSxldD0oQSx0LGUsSSxyKT0+e2xldCBvPXhJKEEsdCxyKSxnPTAsQyxRPWE9PntDfHwoQz0hMCxJJiZJKGEpKX07cmV0dXJuIG5ldyBSZWFkYWJsZVN0cmVhbSh7YXN5bmMgcHVsbChhKXt0cnl7bGV0e2RvbmU6bix2YWx1ZTpzfT1hd2FpdCBvLm5leHQoKTtpZihuKXtRKCksYS5jbG9zZSgpO3JldHVybn1sZXQgZj1zLmJ5dGVMZW5ndGg7aWYoZSl7bGV0IEI9Zys9ZjtlKEIpfWEuZW5xdWV1ZShuZXcgVWludDhBcnJheShzKSl9Y2F0Y2gobil7dGhyb3cgUShuKSxufX0sY2FuY2VsKGEpe3JldHVybiBRKGEpLG8ucmV0dXJuKCl9fSx7aGlnaFdhdGVyTWFyazoyfSl9O3ZhciBSQT10eXBlb2YgZmV0Y2g9PSJmdW5jdGlvbiImJnR5cGVvZiBSZXF1ZXN0PT0iZnVuY3Rpb24iJiZ0eXBlb2YgUmVzcG9uc2U9PSJmdW5jdGlvbiIsQWU9UkEmJnR5cGVvZiBSZWFkYWJsZVN0cmVhbT09ImZ1bmN0aW9uIixJdD1SQSYmKHR5cGVvZiBUZXh0RW5jb2Rlcj09ImZ1bmN0aW9uIj8oQT0+dD0+QS5lbmNvZGUodCkpKG5ldyBUZXh0RW5jb2Rlcik6YXN5bmMgQT0+bmV3IFVpbnQ4QXJyYXkoYXdhaXQgbmV3IFJlc3BvbnNlKEEpLmFycmF5QnVmZmVyKCkpKSx0ZT0oQSwuLi50KT0+e3RyeXtyZXR1cm4hIUEoLi4udCl9Y2F0Y2h7cmV0dXJuITF9fSxQST1BZSYmdGUoKCk9PntsZXQgQT0hMSx0PW5ldyBSZXF1ZXN0KHcub3JpZ2luLHtib2R5Om5ldyBSZWFkYWJsZVN0cmVhbSxtZXRob2Q6IlBPU1QiLGdldCBkdXBsZXgoKXtyZXR1cm4gQT0hMCwiaGFsZiJ9fSkuaGVhZGVycy5oYXMoIkNvbnRlbnQtVHlwZSIpO3JldHVybiBBJiYhdH0pLCR0PTY0KjEwMjQscnQ9QWUmJnRlKCgpPT5pLmlzUmVhZGFibGVTdHJlYW0obmV3IFJlc3BvbnNlKCIiKS5ib2R5KSksRkE9e3N0cmVhbTpydCYmKEE9PkEuYm9keSl9O1JBJiYoQT0+e1sidGV4dCIsImFycmF5QnVmZmVyIiwiYmxvYiIsImZvcm1EYXRhIiwic3RyZWFtIl0uZm9yRWFjaCh0PT57IUZBW3RdJiYoRkFbdF09aS5pc0Z1bmN0aW9uKEFbdF0pP2U9PmVbdF0oKTooZSxJKT0+e3Rocm93IG5ldyB1KGBSZXNwb25zZSB0eXBlIFwnJHt0fVwnIGlzIG5vdCBzdXBwb3J0ZWRgLHUuRVJSX05PVF9TVVBQT1JULEkpfSl9KX0pKG5ldyBSZXNwb25zZSk7dmFyIGpJPWFzeW5jIEE9PntpZihBPT1udWxsKXJldHVybiAwO2lmKGkuaXNCbG9iKEEpKXJldHVybiBBLnNpemU7aWYoaS5pc1NwZWNDb21wbGlhbnRGb3JtKEEpKXJldHVybihhd2FpdCBuZXcgUmVxdWVzdChBKS5hcnJheUJ1ZmZlcigpKS5ieXRlTGVuZ3RoO2lmKGkuaXNBcnJheUJ1ZmZlclZpZXcoQSl8fGkuaXNBcnJheUJ1ZmZlcihBKSlyZXR1cm4gQS5ieXRlTGVuZ3RoO2lmKGkuaXNVUkxTZWFyY2hQYXJhbXMoQSkmJihBPUErIiIpLGkuaXNTdHJpbmcoQSkpcmV0dXJuKGF3YWl0IEl0KEEpKS5ieXRlTGVuZ3RofSxXST1hc3luYyhBLHQpPT57bGV0IGU9aS50b0Zpbml0ZU51bWJlcihBLmdldENvbnRlbnRMZW5ndGgoKSk7cmV0dXJuIGU/P2pJKHQpfSxlZT1SQSYmKGFzeW5jIEE9PntsZXR7dXJsOnQsbWV0aG9kOmUsZGF0YTpJLHNpZ25hbDpyLGNhbmNlbFRva2VuOm8sdGltZW91dDpnLG9uRG93bmxvYWRQcm9ncmVzczpDLG9uVXBsb2FkUHJvZ3Jlc3M6USxyZXNwb25zZVR5cGU6YSxoZWFkZXJzOm4sd2l0aENyZWRlbnRpYWxzOnM9InNhbWUtb3JpZ2luIixmZXRjaE9wdGlvbnM6Zn09U0EoQSk7YT1hPyhhKyIiKS50b0xvd2VyQ2FzZSgpOiJ0ZXh0IjtsZXRbQixFXT1yfHxvfHxnP3Z0KFtyLG9dLGcpOltdLGwsYyxwPSgpPT57IWwmJnNldFRpbWVvdXQoKCk9PntCJiZCLnVuc3Vic2NyaWJlKCl9KSxsPSEwfSxTO3RyeXtpZihRJiZQSSYmZSE9PSJnZXQiJiZlIT09ImhlYWQiJiYoUz1hd2FpdCBXSShuLEkpKSE9PTApe2xldCBMPW5ldyBSZXF1ZXN0KHQse21ldGhvZDoiUE9TVCIsYm9keTpJLGR1cGxleDoiaGFsZiJ9KSxKO2lmKGkuaXNGb3JtRGF0YShJKSYmKEo9TC5oZWFkZXJzLmdldCgiY29udGVudC10eXBlIikpJiZuLnNldENvbnRlbnRUeXBlKEopLEwuYm9keSl7bGV0W0hBLENBXT12QShTLF8oJEEoUSkpKTtJPWV0KEwuYm9keSwkdCxIQSxDQSxJdCl9fWkuaXNTdHJpbmcocyl8fChzPXM/ImluY2x1ZGUiOiJvbWl0IiksYz1uZXcgUmVxdWVzdCh0LHsuLi5mLHNpZ25hbDpCLG1ldGhvZDplLnRvVXBwZXJDYXNlKCksaGVhZGVyczpuLm5vcm1hbGl6ZSgpLnRvSlNPTigpLGJvZHk6SSxkdXBsZXg6ImhhbGYiLGNyZWRlbnRpYWxzOnN9KTtsZXQgRD1hd2FpdCBmZXRjaChjKSxVPXJ0JiYoYT09PSJzdHJlYW0ifHxhPT09InJlc3BvbnNlIik7aWYocnQmJihDfHxVKSl7bGV0IEw9e307WyJzdGF0dXMiLCJzdGF0dXNUZXh0IiwiaGVhZGVycyJdLmZvckVhY2goRXQ9PntMW0V0XT1EW0V0XX0pO2xldCBKPWkudG9GaW5pdGVOdW1iZXIoRC5oZWFkZXJzLmdldCgiY29udGVudC1sZW5ndGgiKSksW0hBLENBXT1DJiZ2QShKLF8oJEEoQyksITApKXx8W107RD1uZXcgUmVzcG9uc2UoZXQoRC5ib2R5LCR0LEhBLCgpPT57Q0EmJkNBKCksVSYmcCgpfSxJdCksTCl9YT1hfHwidGV4dCI7bGV0IEs9YXdhaXQgRkFbaS5maW5kS2V5KEZBLGEpfHwidGV4dCJdKEQsQSk7cmV0dXJuIVUmJnAoKSxFJiZFKCksYXdhaXQgbmV3IFByb21pc2UoKEwsSik9PntvQShMLEose2RhdGE6SyxoZWFkZXJzOm0uZnJvbShELmhlYWRlcnMpLHN0YXR1czpELnN0YXR1cyxzdGF0dXNUZXh0OkQuc3RhdHVzVGV4dCxjb25maWc6QSxyZXF1ZXN0OmN9KX0pfWNhdGNoKEQpe3Rocm93IHAoKSxEJiZELm5hbWU9PT0iVHlwZUVycm9yIiYmL2ZldGNoL2kudGVzdChELm1lc3NhZ2UpP09iamVjdC5hc3NpZ24obmV3IHUoIk5ldHdvcmsgRXJyb3IiLHUuRVJSX05FVFdPUkssQSxjKSx7Y2F1c2U6RC5jYXVzZXx8RH0pOnUuZnJvbShELEQmJkQuY29kZSxBLGMpfX0pO3ZhciBvdD17aHR0cDpkQSx4aHI6enQsZmV0Y2g6ZWV9O2kuZm9yRWFjaChvdCwoQSx0KT0+e2lmKEEpe3RyeXtPYmplY3QuZGVmaW5lUHJvcGVydHkoQSwibmFtZSIse3ZhbHVlOnR9KX1jYXRjaHt9T2JqZWN0LmRlZmluZVByb3BlcnR5KEEsImFkYXB0ZXJOYW1lIix7dmFsdWU6dH0pfX0pO3ZhciBJZT1BPT5gLSAke0F9YCxaST1BPT5pLmlzRnVuY3Rpb24oQSl8fEE9PT1udWxsfHxBPT09ITEsTkE9e2dldEFkYXB0ZXI6QT0+e0E9aS5pc0FycmF5KEEpP0E6W0FdO2xldHtsZW5ndGg6dH09QSxlLEkscj17fTtmb3IobGV0IG89MDtvPHQ7bysrKXtlPUFbb107bGV0IGc7aWYoST1lLCFaSShlKSYmKEk9b3RbKGc9U3RyaW5nKGUpKS50b0xvd2VyQ2FzZSgpXSxJPT09dm9pZCAwKSl0aHJvdyBuZXcgdShgVW5rbm93biBhZGFwdGVyIFwnJHtnfVwnYCk7aWYoSSlicmVhaztyW2d8fCIlMjMiK29dPUl9aWYoIUkpe2xldCBvPU9iamVjdC5lbnRyaWVzKHIpLm1hcCgoW0MsUV0pPT5gYWRhcHRlciAke0N9IGArKFE9PT0hMT8iaXMgbm90IHN1cHBvcnRlZCBieSB0aGUgZW52aXJvbm1lbnQiOiJpcyBub3QgYXZhaWxhYmxlIGluIHRoZSBidWlsZCIpKSxnPXQ/by5sZW5ndGg+MT9gc2luY2UgOiUwQWArby5tYXAoSWUpLmpvaW4oYCUwQWApOiIgIitJZShvWzBdKToiYXMgbm8gYWRhcHRlciBzcGVjaWZpZWQiO3Rocm93IG5ldyB1KCJUaGVyZSBpcyBubyBzdWl0YWJsZSBhZGFwdGVyIHRvIGRpc3BhdGNoIHRoZSByZXF1ZXN0ICIrZywiRVJSX05PVF9TVVBQT1JUIil9cmV0dXJuIEl9LGFkYXB0ZXJzOm90fTtmdW5jdGlvbiBndChBKXtpZihBLmNhbmNlbFRva2VuJiZBLmNhbmNlbFRva2VuLnRocm93SWZSZXF1ZXN0ZWQoKSxBLnNpZ25hbCYmQS5zaWduYWwuYWJvcnRlZCl0aHJvdyBuZXcgYihudWxsLEEpfWZ1bmN0aW9uIFVBKEEpe3JldHVybiBndChBKSxBLmhlYWRlcnM9bS5mcm9tKEEuaGVhZGVycyksQS5kYXRhPUlBLmNhbGwoQSxBLnRyYW5zZm9ybVJlcXVlc3QpLFsicG9zdCIsInB1dCIsInBhdGNoIl0uaW5kZXhPZihBLm1ldGhvZCkhPT0tMSYmQS5oZWFkZXJzLnNldENvbnRlbnRUeXBlKCJhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQiLCExKSxOQS5nZXRBZGFwdGVyKEEuYWRhcHRlcnx8Wi5hZGFwdGVyKShBKS50aGVuKGZ1bmN0aW9uKEkpe3JldHVybiBndChBKSxJLmRhdGE9SUEuY2FsbChBLEEudHJhbnNmb3JtUmVzcG9uc2UsSSksSS5oZWFkZXJzPW0uZnJvbShJLmhlYWRlcnMpLEl9LGZ1bmN0aW9uKEkpe3JldHVybiByQShJKXx8KGd0KEEpLEkmJkkucmVzcG9uc2UmJihJLnJlc3BvbnNlLmRhdGE9SUEuY2FsbChBLEEudHJhbnNmb3JtUmVzcG9uc2UsSS5yZXNwb25zZSksSS5yZXNwb25zZS5oZWFkZXJzPW0uZnJvbShJLnJlc3BvbnNlLmhlYWRlcnMpKSksUHJvbWlzZS5yZWplY3QoSSl9KX12YXIgR0E9IjEuNy40Ijt2YXIgaXQ9e307WyJvYmplY3QiLCJib29sZWFuIiwibnVtYmVyIiwiZnVuY3Rpb24iLCJzdHJpbmciLCJzeW1ib2wiXS5mb3JFYWNoKChBLHQpPT57aXRbQV09ZnVuY3Rpb24oSSl7cmV0dXJuIHR5cGVvZiBJPT09QXx8ImEiKyh0PDE/Im4gIjoiICIpK0F9fSk7dmFyIHJlPXt9O2l0LnRyYW5zaXRpb25hbD1mdW5jdGlvbih0LGUsSSl7ZnVuY3Rpb24gcihvLGcpe3JldHVybiJbQXhpb3MgdiIrR0ErIl0gVHJhbnNpdGlvbmFsIG9wdGlvbiBcJyIrbysiXCciK2crKEk/Ii4gIitJOiIiKX1yZXR1cm4obyxnLEMpPT57aWYodD09PSExKXRocm93IG5ldyB1KHIoZywiIGhhcyBiZWVuIHJlbW92ZWQiKyhlPyIgaW4gIitlOiIiKSksdS5FUlJfREVQUkVDQVRFRCk7cmV0dXJuIGUmJiFyZVtnXSYmKHJlW2ddPSEwLGNvbnNvbGUud2FybihyKGcsIiBoYXMgYmVlbiBkZXByZWNhdGVkIHNpbmNlIHYiK2UrIiBhbmQgd2lsbCBiZSByZW1vdmVkIGluIHRoZSBuZWFyIGZ1dHVyZSIpKSksdD90KG8sZyxDKTohMH19O2Z1bmN0aW9uIFZJKEEsdCxlKXtpZih0eXBlb2YgQSE9Im9iamVjdCIpdGhyb3cgbmV3IHUoIm9wdGlvbnMgbXVzdCBiZSBhbiBvYmplY3QiLHUuRVJSX0JBRF9PUFRJT05fVkFMVUUpO2xldCBJPU9iamVjdC5rZXlzKEEpLHI9SS5sZW5ndGg7Zm9yKDtyLS0gPjA7KXtsZXQgbz1JW3JdLGc9dFtvXTtpZihnKXtsZXQgQz1BW29dLFE9Qz09PXZvaWQgMHx8ZyhDLG8sQSk7aWYoUSE9PSEwKXRocm93IG5ldyB1KCJvcHRpb24gIitvKyIgbXVzdCBiZSAiK1EsdS5FUlJfQkFEX09QVElPTl9WQUxVRSk7Y29udGludWV9aWYoZSE9PSEwKXRocm93IG5ldyB1KCJVbmtub3duIG9wdGlvbiAiK28sdS5FUlJfQkFEX09QVElPTil9fXZhciBrQT17YXNzZXJ0T3B0aW9uczpWSSx2YWxpZGF0b3JzOml0fTt2YXIgTT1rQS52YWxpZGF0b3JzLFg9Y2xhc3N7Y29uc3RydWN0b3IodCl7dGhpcy5kZWZhdWx0cz10LHRoaXMuaW50ZXJjZXB0b3JzPXtyZXF1ZXN0Om5ldyBqQSxyZXNwb25zZTpuZXcgakF9fWFzeW5jIHJlcXVlc3QodCxlKXt0cnl7cmV0dXJuIGF3YWl0IHRoaXMuX3JlcXVlc3QodCxlKX1jYXRjaChJKXtpZihJIGluc3RhbmNlb2YgRXJyb3Ipe2xldCByO0Vycm9yLmNhcHR1cmVTdGFja1RyYWNlP0Vycm9yLmNhcHR1cmVTdGFja1RyYWNlKHI9e30pOnI9bmV3IEVycm9yO2xldCBvPXIuc3RhY2s/ci5zdGFjay5yZXBsYWNlKC9eLitcXG4vLCIiKToiIjt0cnl7SS5zdGFjaz9vJiYhU3RyaW5nKEkuc3RhY2spLmVuZHNXaXRoKG8ucmVwbGFjZSgvXi4rXFxuLitcXG4vLCIiKSkmJihJLnN0YWNrKz1gJTBBYCtvKTpJLnN0YWNrPW99Y2F0Y2h7fX10aHJvdyBJfX1fcmVxdWVzdCh0LGUpe3R5cGVvZiB0PT0ic3RyaW5nIj8oZT1lfHx7fSxlLnVybD10KTplPXR8fHt9LGU9ayh0aGlzLmRlZmF1bHRzLGUpO2xldHt0cmFuc2l0aW9uYWw6SSxwYXJhbXNTZXJpYWxpemVyOnIsaGVhZGVyczpvfT1lO0khPT12b2lkIDAmJmtBLmFzc2VydE9wdGlvbnMoSSx7c2lsZW50SlNPTlBhcnNpbmc6TS50cmFuc2l0aW9uYWwoTS5ib29sZWFuKSxmb3JjZWRKU09OUGFyc2luZzpNLnRyYW5zaXRpb25hbChNLmJvb2xlYW4pLGNsYXJpZnlUaW1lb3V0RXJyb3I6TS50cmFuc2l0aW9uYWwoTS5ib29sZWFuKX0sITEpLHIhPW51bGwmJihpLmlzRnVuY3Rpb24ocik/ZS5wYXJhbXNTZXJpYWxpemVyPXtzZXJpYWxpemU6cn06a0EuYXNzZXJ0T3B0aW9ucyhyLHtlbmNvZGU6TS5mdW5jdGlvbixzZXJpYWxpemU6TS5mdW5jdGlvbn0sITApKSxlLm1ldGhvZD0oZS5tZXRob2R8fHRoaXMuZGVmYXVsdHMubWV0aG9kfHwiZ2V0IikudG9Mb3dlckNhc2UoKTtsZXQgZz1vJiZpLm1lcmdlKG8uY29tbW9uLG9bZS5tZXRob2RdKTtvJiZpLmZvckVhY2goWyJkZWxldGUiLCJnZXQiLCJoZWFkIiwicG9zdCIsInB1dCIsInBhdGNoIiwiY29tbW9uIl0sRT0+e2RlbGV0ZSBvW0VdfSksZS5oZWFkZXJzPW0uY29uY2F0KGcsbyk7bGV0IEM9W10sUT0hMDt0aGlzLmludGVyY2VwdG9ycy5yZXF1ZXN0LmZvckVhY2goZnVuY3Rpb24obCl7dHlwZW9mIGwucnVuV2hlbj09ImZ1bmN0aW9uIiYmbC5ydW5XaGVuKGUpPT09ITF8fChRPVEmJmwuc3luY2hyb25vdXMsQy51bnNoaWZ0KGwuZnVsZmlsbGVkLGwucmVqZWN0ZWQpKX0pO2xldCBhPVtdO3RoaXMuaW50ZXJjZXB0b3JzLnJlc3BvbnNlLmZvckVhY2goZnVuY3Rpb24obCl7YS5wdXNoKGwuZnVsZmlsbGVkLGwucmVqZWN0ZWQpfSk7bGV0IG4scz0wLGY7aWYoIVEpe2xldCBFPVtVQS5iaW5kKHRoaXMpLHZvaWQgMF07Zm9yKEUudW5zaGlmdC5hcHBseShFLEMpLEUucHVzaC5hcHBseShFLGEpLGY9RS5sZW5ndGgsbj1Qcm9taXNlLnJlc29sdmUoZSk7czxmOyluPW4udGhlbihFW3MrK10sRVtzKytdKTtyZXR1cm4gbn1mPUMubGVuZ3RoO2xldCBCPWU7Zm9yKHM9MDtzPGY7KXtsZXQgRT1DW3MrK10sbD1DW3MrK107dHJ5e0I9RShCKX1jYXRjaChjKXtsLmNhbGwodGhpcyxjKTticmVha319dHJ5e249VUEuY2FsbCh0aGlzLEIpfWNhdGNoKEUpe3JldHVybiBQcm9taXNlLnJlamVjdChFKX1mb3Iocz0wLGY9YS5sZW5ndGg7czxmOyluPW4udGhlbihhW3MrK10sYVtzKytdKTtyZXR1cm4gbn1nZXRVcmkodCl7dD1rKHRoaXMuZGVmYXVsdHMsdCk7bGV0IGU9Z0EodC5iYXNlVVJMLHQudXJsKTtyZXR1cm4gdEEoZSx0LnBhcmFtcyx0LnBhcmFtc1NlcmlhbGl6ZXIpfX07aS5mb3JFYWNoKFsiZGVsZXRlIiwiZ2V0IiwiaGVhZCIsIm9wdGlvbnMiXSxmdW5jdGlvbih0KXtYLnByb3RvdHlwZVt0XT1mdW5jdGlvbihlLEkpe3JldHVybiB0aGlzLnJlcXVlc3QoayhJfHx7fSx7bWV0aG9kOnQsdXJsOmUsZGF0YTooSXx8e30pLmRhdGF9KSl9fSk7aS5mb3JFYWNoKFsicG9zdCIsInB1dCIsInBhdGNoIl0sZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShJKXtyZXR1cm4gZnVuY3Rpb24obyxnLEMpe3JldHVybiB0aGlzLnJlcXVlc3QoayhDfHx7fSx7bWV0aG9kOnQsaGVhZGVyczpJP3siQ29udGVudC1UeXBlIjoibXVsdGlwYXJ0L2Zvcm0tZGF0YSJ9Ont9LHVybDpvLGRhdGE6Z30pKX19WC5wcm90b3R5cGVbdF09ZSgpLFgucHJvdG90eXBlW3QrIkZvcm0iXT1lKCEwKX0pO3ZhciBpQT1YO3ZhciBudD1jbGFzcyBBe2NvbnN0cnVjdG9yKHQpe2lmKHR5cGVvZiB0IT0iZnVuY3Rpb24iKXRocm93IG5ldyBUeXBlRXJyb3IoImV4ZWN1dG9yIG11c3QgYmUgYSBmdW5jdGlvbi4iKTtsZXQgZTt0aGlzLnByb21pc2U9bmV3IFByb21pc2UoZnVuY3Rpb24obyl7ZT1vfSk7bGV0IEk9dGhpczt0aGlzLnByb21pc2UudGhlbihyPT57aWYoIUkuX2xpc3RlbmVycylyZXR1cm47bGV0IG89SS5fbGlzdGVuZXJzLmxlbmd0aDtmb3IoO28tLSA+MDspSS5fbGlzdGVuZXJzW29dKHIpO0kuX2xpc3RlbmVycz1udWxsfSksdGhpcy5wcm9taXNlLnRoZW49cj0+e2xldCBvLGc9bmV3IFByb21pc2UoQz0+e0kuc3Vic2NyaWJlKEMpLG89Q30pLnRoZW4ocik7cmV0dXJuIGcuY2FuY2VsPWZ1bmN0aW9uKCl7SS51bnN1YnNjcmliZShvKX0sZ30sdChmdW5jdGlvbihvLGcsQyl7SS5yZWFzb258fChJLnJlYXNvbj1uZXcgYihvLGcsQyksZShJLnJlYXNvbikpfSl9dGhyb3dJZlJlcXVlc3RlZCgpe2lmKHRoaXMucmVhc29uKXRocm93IHRoaXMucmVhc29ufXN1YnNjcmliZSh0KXtpZih0aGlzLnJlYXNvbil7dCh0aGlzLnJlYXNvbik7cmV0dXJufXRoaXMuX2xpc3RlbmVycz90aGlzLl9saXN0ZW5lcnMucHVzaCh0KTp0aGlzLl9saXN0ZW5lcnM9W3RdfXVuc3Vic2NyaWJlKHQpe2lmKCF0aGlzLl9saXN0ZW5lcnMpcmV0dXJuO2xldCBlPXRoaXMuX2xpc3RlbmVycy5pbmRleE9mKHQpO2UhPT0tMSYmdGhpcy5fbGlzdGVuZXJzLnNwbGljZShlLDEpfXN0YXRpYyBzb3VyY2UoKXtsZXQgdDtyZXR1cm57dG9rZW46bmV3IEEoZnVuY3Rpb24ocil7dD1yfSksY2FuY2VsOnR9fX0sb2U9bnQ7ZnVuY3Rpb24gc3QoQSl7cmV0dXJuIGZ1bmN0aW9uKGUpe3JldHVybiBBLmFwcGx5KG51bGwsZSl9fWZ1bmN0aW9uIEN0KEEpe3JldHVybiBpLmlzT2JqZWN0KEEpJiZBLmlzQXhpb3NFcnJvcj09PSEwfXZhciBCdD17Q29udGludWU6MTAwLFN3aXRjaGluZ1Byb3RvY29sczoxMDEsUHJvY2Vzc2luZzoxMDIsRWFybHlIaW50czoxMDMsT2s6MjAwLENyZWF0ZWQ6MjAxLEFjY2VwdGVkOjIwMixOb25BdXRob3JpdGF0aXZlSW5mb3JtYXRpb246MjAzLE5vQ29udGVudDoyMDQsUmVzZXRDb250ZW50OjIwNSxQYXJ0aWFsQ29udGVudDoyMDYsTXVsdGlTdGF0dXM6MjA3LEFscmVhZHlSZXBvcnRlZDoyMDgsSW1Vc2VkOjIyNixNdWx0aXBsZUNob2ljZXM6MzAwLE1vdmVkUGVybWFuZW50bHk6MzAxLEZvdW5kOjMwMixTZWVPdGhlcjozMDMsTm90TW9kaWZpZWQ6MzA0LFVzZVByb3h5OjMwNSxVbnVzZWQ6MzA2LFRlbXBvcmFyeVJlZGlyZWN0OjMwNyxQZXJtYW5lbnRSZWRpcmVjdDozMDgsQmFkUmVxdWVzdDo0MDAsVW5hdXRob3JpemVkOjQwMSxQYXltZW50UmVxdWlyZWQ6NDAyLEZvcmJpZGRlbjo0MDMsTm90Rm91bmQ6NDA0LE1ldGhvZE5vdEFsbG93ZWQ6NDA1LE5vdEFjY2VwdGFibGU6NDA2LFByb3h5QXV0aGVudGljYXRpb25SZXF1aXJlZDo0MDcsUmVxdWVzdFRpbWVvdXQ6NDA4LENvbmZsaWN0OjQwOSxHb25lOjQxMCxMZW5ndGhSZXF1aXJlZDo0MTEsUHJlY29uZGl0aW9uRmFpbGVkOjQxMixQYXlsb2FkVG9vTGFyZ2U6NDEzLFVyaVRvb0xvbmc6NDE0LFVuc3VwcG9ydGVkTWVkaWFUeXBlOjQxNSxSYW5nZU5vdFNhdGlzZmlhYmxlOjQxNixFeHBlY3RhdGlvbkZhaWxlZDo0MTcsSW1BVGVhcG90OjQxOCxNaXNkaXJlY3RlZFJlcXVlc3Q6NDIxLFVucHJvY2Vzc2FibGVFbnRpdHk6NDIyLExvY2tlZDo0MjMsRmFpbGVkRGVwZW5kZW5jeTo0MjQsVG9vRWFybHk6NDI1LFVwZ3JhZGVSZXF1aXJlZDo0MjYsUHJlY29uZGl0aW9uUmVxdWlyZWQ6NDI4LFRvb01hbnlSZXF1ZXN0czo0MjksUmVxdWVzdEhlYWRlckZpZWxkc1Rvb0xhcmdlOjQzMSxVbmF2YWlsYWJsZUZvckxlZ2FsUmVhc29uczo0NTEsSW50ZXJuYWxTZXJ2ZXJFcnJvcjo1MDAsTm90SW1wbGVtZW50ZWQ6NTAxLEJhZEdhdGV3YXk6NTAyLFNlcnZpY2VVbmF2YWlsYWJsZTo1MDMsR2F0ZXdheVRpbWVvdXQ6NTA0LEh0dHBWZXJzaW9uTm90U3VwcG9ydGVkOjUwNSxWYXJpYW50QWxzb05lZ290aWF0ZXM6NTA2LEluc3VmZmljaWVudFN0b3JhZ2U6NTA3LExvb3BEZXRlY3RlZDo1MDgsTm90RXh0ZW5kZWQ6NTEwLE5ldHdvcmtBdXRoZW50aWNhdGlvblJlcXVpcmVkOjUxMX07T2JqZWN0LmVudHJpZXMoQnQpLmZvckVhY2goKFtBLHRdKT0+e0J0W3RdPUF9KTt2YXIgZ2U9QnQ7ZnVuY3Rpb24gaWUoQSl7bGV0IHQ9bmV3IGlBKEEpLGU9dihpQS5wcm90b3R5cGUucmVxdWVzdCx0KTtyZXR1cm4gaS5leHRlbmQoZSxpQS5wcm90b3R5cGUsdCx7YWxsT3duS2V5czohMH0pLGkuZXh0ZW5kKGUsdCxudWxsLHthbGxPd25LZXlzOiEwfSksZS5jcmVhdGU9ZnVuY3Rpb24ocil7cmV0dXJuIGllKGsoQSxyKSl9LGV9dmFyIGQ9aWUoWik7ZC5BeGlvcz1pQTtkLkNhbmNlbGVkRXJyb3I9YjtkLkNhbmNlbFRva2VuPW9lO2QuaXNDYW5jZWw9ckE7ZC5WRVJTSU9OPUdBO2QudG9Gb3JtRGF0YT1xO2QuQXhpb3NFcnJvcj11O2QuQ2FuY2VsPWQuQ2FuY2VsZWRFcnJvcjtkLmFsbD1mdW5jdGlvbih0KXtyZXR1cm4gUHJvbWlzZS5hbGwodCl9O2Quc3ByZWFkPXN0O2QuaXNBeGlvc0Vycm9yPUN0O2QubWVyZ2VDb25maWc9aztkLkF4aW9zSGVhZGVycz1tO2QuZm9ybVRvSlNPTj1BPT53QShpLmlzSFRNTEZvcm0oQSk/bmV3IEZvcm1EYXRhKEEpOkEpO2QuZ2V0QWRhcHRlcj1OQS5nZXRBZGFwdGVyO2QuSHR0cFN0YXR1c0NvZGU9Z2U7ZC5kZWZhdWx0PWQ7dmFyIExBPWQ7dmFye0F4aW9zOkVpLEF4aW9zRXJyb3I6Y2ksQ2FuY2VsZWRFcnJvcjpmaSxpc0NhbmNlbDpsaSxDYW5jZWxUb2tlbjp1aSxWRVJTSU9OOkRpLGFsbDpoaSxDYW5jZWw6ZGksaXNBeGlvc0Vycm9yOnlpLHNwcmVhZDptaSx0b0Zvcm1EYXRhOndpLEF4aW9zSGVhZGVyczpwaSxIdHRwU3RhdHVzQ29kZTpTaSxmb3JtVG9KU09OOkZpLGdldEFkYXB0ZXI6UmksbWVyZ2VDb25maWc6Tml9PUxBO3ZhciBuQSxZLFF0LGF0PXtlbnY6e2Vtc2NyaXB0ZW5fbm90aWZ5X21lbW9yeV9ncm93dGg6ZnVuY3Rpb24oQSl7UXQ9bmV3IFVpbnQ4QXJyYXkoWS5leHBvcnRzLm1lbW9yeS5idWZmZXIpfX19LEpBPWNsYXNze2luaXQoKXtyZXR1cm4gbkF8fCh0eXBlb2YgZmV0Y2g8InUiP25BPWZldGNoKCJkYXRhOmFwcGxpY2F0aW9uL3dhc207YmFzZTY0LCIrbmUpLnRoZW4odD0+dC5hcnJheUJ1ZmZlcigpKS50aGVuKHQ9PldlYkFzc2VtYmx5Lmluc3RhbnRpYXRlKHQsYXQpKS50aGVuKHRoaXMuX2luaXQpOm5BPVdlYkFzc2VtYmx5Lmluc3RhbnRpYXRlKEJ1ZmZlci5mcm9tKG5lLCJiYXNlNjQiKSxhdCkudGhlbih0aGlzLl9pbml0KSxuQSl9X2luaXQodCl7WT10Lmluc3RhbmNlLGF0LmVudi5lbXNjcmlwdGVuX25vdGlmeV9tZW1vcnlfZ3Jvd3RoKDApfWRlY29kZSh0LGU9MCl7aWYoIVkpdGhyb3cgbmV3IEVycm9yKCJaU1RERGVjb2RlcjogQXdhaXQgLmluaXQoKSBiZWZvcmUgZGVjb2RpbmcuIik7bGV0IEk9dC5ieXRlTGVuZ3RoLHI9WS5leHBvcnRzLm1hbGxvYyhJKTtRdC5zZXQodCxyKSxlPWV8fE51bWJlcihZLmV4cG9ydHMuWlNURF9maW5kRGVjb21wcmVzc2VkU2l6ZShyLEkpKTtsZXQgbz1ZLmV4cG9ydHMubWFsbG9jKGUpLGc9WS5leHBvcnRzLlpTVERfZGVjb21wcmVzcyhvLGUscixJKSxDPVF0LnNsaWNlKG8sbytnKTtyZXR1cm4gWS5leHBvcnRzLmZyZWUociksWS5leHBvcnRzLmZyZWUobyksQ319LG5lPSJBR0Z6YlFFQUFBQUJiZzVnQTM5L2Z3Ri9ZQUYvQVg5Z0FuOS9BR0FCZndCZ0JYOS9mMzkvQVg5Z0EzOS9md0JnQkg5L2YzOEJmMkFBQVg5Z0FuOS9BWDlnQjM5L2YzOS9mMzhCZjJBQ2YzOEJmbUFJZjM5L2YzOS9mMzhCZjJBRmYzOS9mMzhBWUE1L2YzOS9mMzkvZjM5L2YzOS9md0YvQWljQkEyVnVkaDlsYlhOamNtbHdkR1Z1WDI1dmRHbG1lVjl0WlcxdmNubGZaM0p2ZDNSb0FBTURJeUlIQUFBQkFRTUhBd0VBQ1FRQUJRRUlDQUVGQmdRRUJBTUdBQUFLQUFVTERBMEdCQVVCY0FFQkFRVUhBUUdBQW9DQUFnWUlBWDhCUVlDakJBc0hyZ0VMQm0xbGJXOXllUUlBQm0xaGJHeHZZd0FGQkdaeVpXVUFCZ3hhVTFSRVgybHpSWEp5YjNJQUVobGFVMVJFWDJacGJtUkVaV052YlhCeVpYTnpaV1JUYVhwbEFCd1BXbE5VUkY5a1pXTnZiWEJ5WlhOekFDSVpYMTlwYm1ScGNtVmpkRjltZFc1amRHbHZibDkwWVdKc1pRRUFFRjlmWlhKeWJtOWZiRzlqWVhScGIyNEFBUWx6ZEdGamExTmhkbVVBQnd4emRHRmphMUpsYzNSdmNtVUFDQXB6ZEdGamEwRnNiRzlqQUFrS2kvSUJJZ1VBUVlRZkN6TUJBWDhnQWdSQUlBQWhBd05BSUFNZ0FTMEFBRG9BQUNBRFFRRnFJUU1nQVVFQmFpRUJJQUpCQVdzaUFnMEFDd3NnQUFzcEFRRi9JQUlFUUNBQUlRTURRQ0FESUFFNkFBQWdBMEVCYWlFRElBSkJBV3NpQWcwQUN3c2dBQXRzQVFKL1FZQWZLQUlBSWdFZ0FFRUhha0Y0Y1NJQ2FpRUFBa0FnQWtFQUlBQWdBVTBiRFFBZ0FEOEFRUkIwU3dSQUlBQS9BRUVRZEd0Qi8vOERha0VRZGtBQVFYOUdCSDlCQUFWQkFCQUFRUUVMUlEwQkMwR0FIeUFBTmdJQUlBRVBDMEdFSDBFd05nSUFRWDhMdVNjQkMzOGpBRUVRYXlJS0pBQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFJQUJCOUFGTkJFQkJpQjhvQWdBaUJrRVFJQUJCQzJwQmVIRWdBRUVMU1JzaUJVRURkaUlBZGlJQlFRTnhCRUFDUUNBQlFYOXpRUUZ4SUFCcUlnSkJBM1FpQVVHd0gyb2lBQ0FCUWJnZmFpZ0NBQ0lCS0FJSUlnUkdCRUJCaUI4Z0JrRitJQUozY1RZQ0FBd0JDeUFFSUFBMkFnd2dBQ0FFTmdJSUN5QUJRUWhxSVFBZ0FTQUNRUU4wSWdKQkEzSTJBZ1FnQVNBQ2FpSUJJQUVvQWdSQkFYSTJBZ1FNRHdzZ0JVR1FIeWdDQUNJSFRRMEJJQUVFUUFKQVFRSWdBSFFpQWtFQUlBSnJjaUFCSUFCMGNXZ2lBVUVEZENJQVFiQWZhaUlDSUFCQnVCOXFLQUlBSWdBb0FnZ2lCRVlFUUVHSUh5QUdRWDRnQVhkeElnWTJBZ0FNQVFzZ0JDQUNOZ0lNSUFJZ0JEWUNDQXNnQUNBRlFRTnlOZ0lFSUFBZ0JXb2lDQ0FCUVFOMElnRWdCV3NpQkVFQmNqWUNCQ0FBSUFGcUlBUTJBZ0FnQndSQUlBZEJlSEZCc0I5cUlRRkJuQjhvQWdBaEFnSi9JQVpCQVNBSFFRTjJkQ0lEY1VVRVFFR0lIeUFESUFaeU5nSUFJQUVNQVFzZ0FTZ0NDQXNoQXlBQklBSTJBZ2dnQXlBQ05nSU1JQUlnQVRZQ0RDQUNJQU0yQWdnTElBQkJDR29oQUVHY0h5QUlOZ0lBUVpBZklBUTJBZ0FNRHd0QmpCOG9BZ0FpQzBVTkFTQUxhRUVDZEVHNElXb29BZ0FpQWlnQ0JFRjRjU0FGYXlFRElBSWhBUU5BQWtBZ0FTZ0NFQ0lBUlFSQUlBRW9BaFFpQUVVTkFRc2dBQ2dDQkVGNGNTQUZheUlCSUFNZ0FTQURTU0lCR3lFRElBQWdBaUFCR3lFQ0lBQWhBUXdCQ3dzZ0FpZ0NHQ0VKSUFJZ0FpZ0NEQ0lFUndSQVFaZ2ZLQUlBR2lBQ0tBSUlJZ0FnQkRZQ0RDQUVJQUEyQWdnTURnc2dBa0VVYWlJQktBSUFJZ0JGQkVBZ0FpZ0NFQ0lBUlEwRElBSkJFR29oQVFzRFFDQUJJUWdnQUNJRVFSUnFJZ0VvQWdBaUFBMEFJQVJCRUdvaEFTQUVLQUlRSWdBTkFBc2dDRUVBTmdJQURBMExRWDhoQlNBQVFiOS9TdzBBSUFCQkMyb2lBRUY0Y1NFRlFZd2ZLQUlBSWdoRkRRQkJBQ0FGYXlFREFrQUNRQUpBQW45QkFDQUZRWUFDU1EwQUdrRWZJQVZCLy8vL0Iwc05BQm9nQlVFbUlBQkJDSFpuSWdCcmRrRUJjU0FBUVFGMGEwRSthZ3NpQjBFQ2RFRzRJV29vQWdBaUFVVUVRRUVBSVFBTUFRdEJBQ0VBSUFWQkdTQUhRUUYyYTBFQUlBZEJIMGNiZENFQ0EwQUNRQ0FCS0FJRVFYaHhJQVZySWdZZ0EwOE5BQ0FCSVFRZ0JpSUREUUJCQUNFRElBRWhBQXdEQ3lBQUlBRW9BaFFpQmlBR0lBRWdBa0VkZGtFRWNXb29BaEFpQVVZYklBQWdCaHNoQUNBQ1FRRjBJUUlnQVEwQUN3c2dBQ0FFY2tVRVFFRUFJUVJCQWlBSGRDSUFRUUFnQUd0eUlBaHhJZ0JGRFFNZ0FHaEJBblJCdUNGcUtBSUFJUUFMSUFCRkRRRUxBMEFnQUNnQ0JFRjRjU0FGYXlJQ0lBTkpJUUVnQWlBRElBRWJJUU1nQUNBRUlBRWJJUVFnQUNnQ0VDSUJCSDhnQVFVZ0FDZ0NGQXNpQUEwQUN3c2dCRVVOQUNBRFFaQWZLQUlBSUFWclR3MEFJQVFvQWhnaEJ5QUVJQVFvQWd3aUFrY0VRRUdZSHlnQ0FCb2dCQ2dDQ0NJQUlBSTJBZ3dnQWlBQU5nSUlEQXdMSUFSQkZHb2lBU2dDQUNJQVJRUkFJQVFvQWhBaUFFVU5BeUFFUVJCcUlRRUxBMEFnQVNFR0lBQWlBa0VVYWlJQktBSUFJZ0FOQUNBQ1FSQnFJUUVnQWlnQ0VDSUFEUUFMSUFaQkFEWUNBQXdMQ3lBRlFaQWZLQUlBSWdSTkJFQkJuQjhvQWdBaEFBSkFJQVFnQldzaUFVRVFUd1JBSUFBZ0JXb2lBaUFCUVFGeU5nSUVJQUFnQkdvZ0FUWUNBQ0FBSUFWQkEzSTJBZ1FNQVFzZ0FDQUVRUU55TmdJRUlBQWdCR29pQVNBQktBSUVRUUZ5TmdJRVFRQWhBa0VBSVFFTFFaQWZJQUUyQWdCQm5COGdBallDQUNBQVFRaHFJUUFNRFFzZ0JVR1VIeWdDQUNJQ1NRUkFRWlFmSUFJZ0JXc2lBVFlDQUVHZ0gwR2dIeWdDQUNJQUlBVnFJZ0kyQWdBZ0FpQUJRUUZ5TmdJRUlBQWdCVUVEY2pZQ0JDQUFRUWhxSVFBTURRdEJBQ0VBSUFWQkwyb2lBd0ovUWVBaUtBSUFCRUJCNkNJb0FnQU1BUXRCN0NKQ2Z6Y0NBRUhrSWtLQW9JQ0FnSUFFTndJQVFlQWlJQXBCREdwQmNIRkIyS3JWcWdWek5nSUFRZlFpUVFBMkFnQkJ4Q0pCQURZQ0FFR0FJQXNpQVdvaUJrRUFJQUZySWdoeElnRWdCVTBOREVIQUlpZ0NBQ0lFQkVCQnVDSW9BZ0FpQnlBQmFpSUpJQWROSUFRZ0NVbHlEUTBMQWtCQnhDSXRBQUJCQkhGRkJFQUNRQUpBQWtBQ1FFR2dIeWdDQUNJRUJFQkJ5Q0loQUFOQUlBUWdBQ2dDQUNJSFR3UkFJQWNnQUNnQ0JHb2dCRXNOQXdzZ0FDZ0NDQ0lBRFFBTEMwRUFFQVFpQWtGL1JnMERJQUVoQmtIa0lpZ0NBQ0lBUVFGcklnUWdBbkVFUUNBQklBSnJJQUlnQkdwQkFDQUFhM0ZxSVFZTElBVWdCazhOQTBIQUlpZ0NBQ0lBQkVCQnVDSW9BZ0FpQkNBR2FpSUlJQVJOSUFBZ0NFbHlEUVFMSUFZUUJDSUFJQUpIRFFFTUJRc2dCaUFDYXlBSWNTSUdFQVFpQWlBQUtBSUFJQUFvQWdScVJnMEJJQUloQUFzZ0FFRi9SZzBCSUFWQk1Hb2dCazBFUUNBQUlRSU1CQXRCNkNJb0FnQWlBaUFESUFacmFrRUFJQUpyY1NJQ0VBUkJmMFlOQVNBQ0lBWnFJUVlnQUNFQ0RBTUxJQUpCZjBjTkFndEJ4Q0pCeENJb0FnQkJCSEkyQWdBTElBRVFCQ0lDUVg5R1FRQVFCQ0lBUVg5R2NpQUFJQUpOY2cwRklBQWdBbXNpQmlBRlFTaHFUUTBGQzBHNElrRzRJaWdDQUNBR2FpSUFOZ0lBUWJ3aUtBSUFJQUJKQkVCQnZDSWdBRFlDQUFzQ1FFR2dIeWdDQUNJREJFQkJ5Q0loQUFOQUlBSWdBQ2dDQUNJQklBQW9BZ1FpQkdwR0RRSWdBQ2dDQ0NJQURRQUxEQVFMUVpnZktBSUFJZ0JCQUNBQUlBSk5HMFVFUUVHWUh5QUNOZ0lBQzBFQUlRQkJ6Q0lnQmpZQ0FFSElJaUFDTmdJQVFhZ2ZRWDgyQWdCQnJCOUI0Q0lvQWdBMkFnQkIxQ0pCQURZQ0FBTkFJQUJCQTNRaUFVRzRIMm9nQVVHd0gyb2lCRFlDQUNBQlFid2ZhaUFFTmdJQUlBQkJBV29pQUVFZ1J3MEFDMEdVSHlBR1FTaHJJZ0JCZUNBQ2EwRUhjU0lCYXlJRU5nSUFRYUFmSUFFZ0Ftb2lBVFlDQUNBQklBUkJBWEkyQWdRZ0FDQUNha0VvTmdJRVFhUWZRZkFpS0FJQU5nSUFEQVFMSUFJZ0EwMGdBU0FEUzNJTkFpQUFLQUlNUVFoeERRSWdBQ0FFSUFacU5nSUVRYUFmSUFOQmVDQURhMEVIY1NJQWFpSUJOZ0lBUVpRZlFaUWZLQUlBSUFacUlnSWdBR3NpQURZQ0FDQUJJQUJCQVhJMkFnUWdBaUFEYWtFb05nSUVRYVFmUWZBaUtBSUFOZ0lBREFNTFFRQWhCQXdLQzBFQUlRSU1DQXRCbUI4b0FnQWdBa3NFUUVHWUh5QUNOZ0lBQ3lBQ0lBWnFJUUZCeUNJaEFBSkFBa0FDUUFOQUlBRWdBQ2dDQUVjRVFDQUFLQUlJSWdBTkFRd0NDd3NnQUMwQURFRUljVVVOQVF0QnlDSWhBQU5BSUFNZ0FDZ0NBQ0lCVHdSQUlBRWdBQ2dDQkdvaUJDQURTdzBEQ3lBQUtBSUlJUUFNQUFzQUN5QUFJQUkyQWdBZ0FDQUFLQUlFSUFacU5nSUVJQUpCZUNBQ2EwRUhjV29pQnlBRlFRTnlOZ0lFSUFGQmVDQUJhMEVIY1dvaUJpQUZJQWRxSWdWcklRQWdBeUFHUmdSQVFhQWZJQVUyQWdCQmxCOUJsQjhvQWdBZ0FHb2lBRFlDQUNBRklBQkJBWEkyQWdRTUNBdEJuQjhvQWdBZ0JrWUVRRUdjSHlBRk5nSUFRWkFmUVpBZktBSUFJQUJxSWdBMkFnQWdCU0FBUVFGeU5nSUVJQUFnQldvZ0FEWUNBQXdJQ3lBR0tBSUVJZ05CQTNGQkFVY05CaUFEUVhoeElRa2dBMEgvQVUwRVFDQUdLQUlNSWdFZ0JpZ0NDQ0lDUmdSQVFZZ2ZRWWdmS0FJQVFYNGdBMEVEZG5keE5nSUFEQWNMSUFJZ0FUWUNEQ0FCSUFJMkFnZ01CZ3NnQmlnQ0dDRUlJQVlnQmlnQ0RDSUNSd1JBSUFZb0FnZ2lBU0FDTmdJTUlBSWdBVFlDQ0F3RkN5QUdRUlJxSWdFb0FnQWlBMFVFUUNBR0tBSVFJZ05GRFFRZ0JrRVFhaUVCQ3dOQUlBRWhCQ0FESWdKQkZHb2lBU2dDQUNJRERRQWdBa0VRYWlFQklBSW9BaEFpQXcwQUN5QUVRUUEyQWdBTUJBdEJsQjhnQmtFb2F5SUFRWGdnQW10QkIzRWlBV3NpQ0RZQ0FFR2dIeUFCSUFKcUlnRTJBZ0FnQVNBSVFRRnlOZ0lFSUFBZ0FtcEJLRFlDQkVHa0gwSHdJaWdDQURZQ0FDQURJQVJCSnlBRWEwRUhjV3BCTDJzaUFDQUFJQU5CRUdwSkd5SUJRUnMyQWdRZ0FVSFFJaWtDQURjQ0VDQUJRY2dpS1FJQU53SUlRZEFpSUFGQkNHbzJBZ0JCekNJZ0JqWUNBRUhJSWlBQ05nSUFRZFFpUVFBMkFnQWdBVUVZYWlFQUEwQWdBRUVITmdJRUlBQkJDR29nQUVFRWFpRUFJQVJKRFFBTElBRWdBMFlOQUNBQklBRW9BZ1JCZm5FMkFnUWdBeUFCSUFOcklnSkJBWEkyQWdRZ0FTQUNOZ0lBSUFKQi93Rk5CRUFnQWtGNGNVR3dIMm9oQUFKL1FZZ2ZLQUlBSWdGQkFTQUNRUU4yZENJQ2NVVUVRRUdJSHlBQklBSnlOZ0lBSUFBTUFRc2dBQ2dDQ0FzaEFTQUFJQU0yQWdnZ0FTQUROZ0lNSUFNZ0FEWUNEQ0FESUFFMkFnZ01BUXRCSHlFQUlBSkIvLy8vQjAwRVFDQUNRU1lnQWtFSWRtY2lBR3QyUVFGeElBQkJBWFJyUVQ1cUlRQUxJQU1nQURZQ0hDQURRZ0EzQWhBZ0FFRUNkRUc0SVdvaEFRSkFBa0JCakI4b0FnQWlCRUVCSUFCMElnWnhSUVJBUVl3ZklBUWdCbkkyQWdBZ0FTQUROZ0lBREFFTElBSkJHU0FBUVFGMmEwRUFJQUJCSDBjYmRDRUFJQUVvQWdBaEJBTkFJQVFpQVNnQ0JFRjRjU0FDUmcwQ0lBQkJIWFloQkNBQVFRRjBJUUFnQVNBRVFRUnhhaUlHS0FJUUlnUU5BQXNnQmlBRE5nSVFDeUFESUFFMkFoZ2dBeUFETmdJTUlBTWdBellDQ0F3QkN5QUJLQUlJSWdBZ0F6WUNEQ0FCSUFNMkFnZ2dBMEVBTmdJWUlBTWdBVFlDRENBRElBQTJBZ2dMUVpRZktBSUFJZ0FnQlUwTkFFR1VIeUFBSUFWcklnRTJBZ0JCb0I5Qm9COG9BZ0FpQUNBRmFpSUNOZ0lBSUFJZ0FVRUJjallDQkNBQUlBVkJBM0kyQWdRZ0FFRUlhaUVBREFnTFFZUWZRVEEyQWdCQkFDRUFEQWNMUVFBaEFnc2dDRVVOQUFKQUlBWW9BaHdpQVVFQ2RFRzRJV29pQkNnQ0FDQUdSZ1JBSUFRZ0FqWUNBQ0FDRFFGQmpCOUJqQjhvQWdCQmZpQUJkM0UyQWdBTUFnc2dDRUVRUVJRZ0NDZ0NFQ0FHUmh0cUlBSTJBZ0FnQWtVTkFRc2dBaUFJTmdJWUlBWW9BaEFpQVFSQUlBSWdBVFlDRUNBQklBSTJBaGdMSUFZb0FoUWlBVVVOQUNBQ0lBRTJBaFFnQVNBQ05nSVlDeUFBSUFscUlRQWdCaUFKYWlJR0tBSUVJUU1MSUFZZ0EwRitjVFlDQkNBRklBQkJBWEkyQWdRZ0FDQUZhaUFBTmdJQUlBQkIvd0ZOQkVBZ0FFRjRjVUd3SDJvaEFRSi9RWWdmS0FJQUlnSkJBU0FBUVFOMmRDSUFjVVVFUUVHSUh5QUFJQUp5TmdJQUlBRU1BUXNnQVNnQ0NBc2hBQ0FCSUFVMkFnZ2dBQ0FGTmdJTUlBVWdBVFlDRENBRklBQTJBZ2dNQVF0Qkh5RURJQUJCLy8vL0IwMEVRQ0FBUVNZZ0FFRUlkbWNpQVd0MlFRRnhJQUZCQVhSclFUNXFJUU1MSUFVZ0F6WUNIQ0FGUWdBM0FoQWdBMEVDZEVHNElXb2hBUUpBQWtCQmpCOG9BZ0FpQWtFQklBTjBJZ1J4UlFSQVFZd2ZJQUlnQkhJMkFnQWdBU0FGTmdJQURBRUxJQUJCR1NBRFFRRjJhMEVBSUFOQkgwY2JkQ0VESUFFb0FnQWhBZ05BSUFJaUFTZ0NCRUY0Y1NBQVJnMENJQU5CSFhZaEFpQURRUUYwSVFNZ0FTQUNRUVJ4YWlJRUtBSVFJZ0lOQUFzZ0JDQUZOZ0lRQ3lBRklBRTJBaGdnQlNBRk5nSU1JQVVnQlRZQ0NBd0JDeUFCS0FJSUlnQWdCVFlDRENBQklBVTJBZ2dnQlVFQU5nSVlJQVVnQVRZQ0RDQUZJQUEyQWdnTElBZEJDR29oQUF3Q0N3SkFJQWRGRFFBQ1FDQUVLQUljSWdCQkFuUkJ1Q0ZxSWdFb0FnQWdCRVlFUUNBQklBSTJBZ0FnQWcwQlFZd2ZJQWhCZmlBQWQzRWlDRFlDQUF3Q0N5QUhRUkJCRkNBSEtBSVFJQVJHRzJvZ0FqWUNBQ0FDUlEwQkN5QUNJQWMyQWhnZ0JDZ0NFQ0lBQkVBZ0FpQUFOZ0lRSUFBZ0FqWUNHQXNnQkNnQ0ZDSUFSUTBBSUFJZ0FEWUNGQ0FBSUFJMkFoZ0xBa0FnQTBFUFRRUkFJQVFnQXlBRmFpSUFRUU55TmdJRUlBQWdCR29pQUNBQUtBSUVRUUZ5TmdJRURBRUxJQVFnQlVFRGNqWUNCQ0FFSUFWcUlnSWdBMEVCY2pZQ0JDQUNJQU5xSUFNMkFnQWdBMEgvQVUwRVFDQURRWGh4UWJBZmFpRUFBbjlCaUI4b0FnQWlBVUVCSUFOQkEzWjBJZ054UlFSQVFZZ2ZJQUVnQTNJMkFnQWdBQXdCQ3lBQUtBSUlDeUVCSUFBZ0FqWUNDQ0FCSUFJMkFnd2dBaUFBTmdJTUlBSWdBVFlDQ0F3QkMwRWZJUUFnQTBILy8vOEhUUVJBSUFOQkppQURRUWgyWnlJQWEzWkJBWEVnQUVFQmRHdEJQbW9oQUFzZ0FpQUFOZ0ljSUFKQ0FEY0NFQ0FBUVFKMFFiZ2hhaUVCQWtBQ1FDQUlRUUVnQUhRaUJuRkZCRUJCakI4Z0JpQUljallDQUNBQklBSTJBZ0FNQVFzZ0EwRVpJQUJCQVhaclFRQWdBRUVmUnh0MElRQWdBU2dDQUNFRkEwQWdCU0lCS0FJRVFYaHhJQU5HRFFJZ0FFRWRkaUVHSUFCQkFYUWhBQ0FCSUFaQkJIRnFJZ1lvQWhBaUJRMEFDeUFHSUFJMkFoQUxJQUlnQVRZQ0dDQUNJQUkyQWd3Z0FpQUNOZ0lJREFFTElBRW9BZ2dpQUNBQ05nSU1JQUVnQWpZQ0NDQUNRUUEyQWhnZ0FpQUJOZ0lNSUFJZ0FEWUNDQXNnQkVFSWFpRUFEQUVMQWtBZ0NVVU5BQUpBSUFJb0Fod2lBRUVDZEVHNElXb2lBU2dDQUNBQ1JnUkFJQUVnQkRZQ0FDQUVEUUZCakI4Z0MwRitJQUIzY1RZQ0FBd0NDeUFKUVJCQkZDQUpLQUlRSUFKR0cyb2dCRFlDQUNBRVJRMEJDeUFFSUFrMkFoZ2dBaWdDRUNJQUJFQWdCQ0FBTmdJUUlBQWdCRFlDR0FzZ0FpZ0NGQ0lBUlEwQUlBUWdBRFlDRkNBQUlBUTJBaGdMQWtBZ0EwRVBUUVJBSUFJZ0F5QUZhaUlBUVFOeU5nSUVJQUFnQW1vaUFDQUFLQUlFUVFGeU5nSUVEQUVMSUFJZ0JVRURjallDQkNBQ0lBVnFJZ1FnQTBFQmNqWUNCQ0FESUFScUlBTTJBZ0FnQndSQUlBZEJlSEZCc0I5cUlRQkJuQjhvQWdBaEFRSi9RUUVnQjBFRGRuUWlCU0FHY1VVRVFFR0lIeUFGSUFaeU5nSUFJQUFNQVFzZ0FDZ0NDQXNoQmlBQUlBRTJBZ2dnQmlBQk5nSU1JQUVnQURZQ0RDQUJJQVkyQWdnTFFad2ZJQVEyQWdCQmtCOGdBellDQUFzZ0FrRUlhaUVBQ3lBS1FSQnFKQUFnQUF2U0N3RUhmd0pBSUFCRkRRQWdBRUVJYXlJQ0lBQkJCR3NvQWdBaUFVRjRjU0lBYWlFRkFrQWdBVUVCY1EwQUlBRkJBM0ZGRFFFZ0FpQUNLQUlBSWdGcklnSkJtQjhvQWdCSkRRRWdBQ0FCYWlFQUFrQUNRRUdjSHlnQ0FDQUNSd1JBSUFGQi93Rk5CRUFnQVVFRGRpRUVJQUlvQWd3aUFTQUNLQUlJSWdOR0JFQkJpQjlCaUI4b0FnQkJmaUFFZDNFMkFnQU1CUXNnQXlBQk5nSU1JQUVnQXpZQ0NBd0VDeUFDS0FJWUlRWWdBaUFDS0FJTUlnRkhCRUFnQWlnQ0NDSURJQUUyQWd3Z0FTQUROZ0lJREFNTElBSkJGR29pQkNnQ0FDSURSUVJBSUFJb0FoQWlBMFVOQWlBQ1FSQnFJUVFMQTBBZ0JDRUhJQU1pQVVFVWFpSUVLQUlBSWdNTkFDQUJRUkJxSVFRZ0FTZ0NFQ0lERFFBTElBZEJBRFlDQUF3Q0N5QUZLQUlFSWdGQkEzRkJBMGNOQWtHUUh5QUFOZ0lBSUFVZ0FVRitjVFlDQkNBQ0lBQkJBWEkyQWdRZ0JTQUFOZ0lBRHd0QkFDRUJDeUFHUlEwQUFrQWdBaWdDSENJRFFRSjBRYmdoYWlJRUtBSUFJQUpHQkVBZ0JDQUJOZ0lBSUFFTkFVR01IMEdNSHlnQ0FFRitJQU4zY1RZQ0FBd0NDeUFHUVJCQkZDQUdLQUlRSUFKR0cyb2dBVFlDQUNBQlJRMEJDeUFCSUFZMkFoZ2dBaWdDRUNJREJFQWdBU0FETmdJUUlBTWdBVFlDR0FzZ0FpZ0NGQ0lEUlEwQUlBRWdBellDRkNBRElBRTJBaGdMSUFJZ0JVOE5BQ0FGS0FJRUlnRkJBWEZGRFFBQ1FBSkFBa0FDUUNBQlFRSnhSUVJBUWFBZktBSUFJQVZHQkVCQm9COGdBallDQUVHVUgwR1VIeWdDQUNBQWFpSUFOZ0lBSUFJZ0FFRUJjallDQkNBQ1Fad2ZLQUlBUncwR1FaQWZRUUEyQWdCQm5COUJBRFlDQUE4TFFad2ZLQUlBSUFWR0JFQkJuQjhnQWpZQ0FFR1FIMEdRSHlnQ0FDQUFhaUlBTmdJQUlBSWdBRUVCY2pZQ0JDQUFJQUpxSUFBMkFnQVBDeUFCUVhoeElBQnFJUUFnQVVIL0FVMEVRQ0FCUVFOMklRUWdCU2dDRENJQklBVW9BZ2dpQTBZRVFFR0lIMEdJSHlnQ0FFRitJQVIzY1RZQ0FBd0ZDeUFESUFFMkFnd2dBU0FETmdJSURBUUxJQVVvQWhnaEJpQUZJQVVvQWd3aUFVY0VRRUdZSHlnQ0FCb2dCU2dDQ0NJRElBRTJBZ3dnQVNBRE5nSUlEQU1MSUFWQkZHb2lCQ2dDQUNJRFJRUkFJQVVvQWhBaUEwVU5BaUFGUVJCcUlRUUxBMEFnQkNFSElBTWlBVUVVYWlJRUtBSUFJZ01OQUNBQlFSQnFJUVFnQVNnQ0VDSUREUUFMSUFkQkFEWUNBQXdDQ3lBRklBRkJmbkUyQWdRZ0FpQUFRUUZ5TmdJRUlBQWdBbW9nQURZQ0FBd0RDMEVBSVFFTElBWkZEUUFDUUNBRktBSWNJZ05CQW5SQnVDRnFJZ1FvQWdBZ0JVWUVRQ0FFSUFFMkFnQWdBUTBCUVl3ZlFZd2ZLQUlBUVg0Z0EzZHhOZ0lBREFJTElBWkJFRUVVSUFZb0FoQWdCVVliYWlBQk5nSUFJQUZGRFFFTElBRWdCallDR0NBRktBSVFJZ01FUUNBQklBTTJBaEFnQXlBQk5nSVlDeUFGS0FJVUlnTkZEUUFnQVNBRE5nSVVJQU1nQVRZQ0dBc2dBaUFBUVFGeU5nSUVJQUFnQW1vZ0FEWUNBQ0FDUVp3ZktBSUFSdzBBUVpBZklBQTJBZ0FQQ3lBQVFmOEJUUVJBSUFCQmVIRkJzQjlxSVFFQ2YwR0lIeWdDQUNJRFFRRWdBRUVEZG5RaUFIRkZCRUJCaUI4Z0FDQURjallDQUNBQkRBRUxJQUVvQWdnTElRQWdBU0FDTmdJSUlBQWdBallDRENBQ0lBRTJBZ3dnQWlBQU5nSUlEd3RCSHlFRElBQkIvLy8vQjAwRVFDQUFRU1lnQUVFSWRtY2lBV3QyUVFGeElBRkJBWFJyUVQ1cUlRTUxJQUlnQXpZQ0hDQUNRZ0EzQWhBZ0EwRUNkRUc0SVdvaEFRSkFBa0FDUUVHTUh5Z0NBQ0lFUVFFZ0EzUWlCM0ZGQkVCQmpCOGdCQ0FIY2pZQ0FDQUJJQUkyQWdBZ0FpQUJOZ0lZREFFTElBQkJHU0FEUVFGMmEwRUFJQU5CSDBjYmRDRURJQUVvQWdBaEFRTkFJQUVpQkNnQ0JFRjRjU0FBUmcwQ0lBTkJIWFloQVNBRFFRRjBJUU1nQkNBQlFRUnhhaUlIUVJCcUtBSUFJZ0VOQUFzZ0J5QUNOZ0lRSUFJZ0JEWUNHQXNnQWlBQ05nSU1JQUlnQWpZQ0NBd0JDeUFFS0FJSUlnQWdBallDRENBRUlBSTJBZ2dnQWtFQU5nSVlJQUlnQkRZQ0RDQUNJQUEyQWdnTFFhZ2ZRYWdmS0FJQVFRRnJJZ0JCZnlBQUd6WUNBQXNMQkFBakFBc0dBQ0FBSkFBTEVBQWpBQ0FBYTBGd2NTSUFKQUFnQUF0S0FRRi9JQUFnQVVrRVFDQUFJQUVnQWhBQ0R3c2dBZ1JBSUFBZ0Ftb2hBeUFCSUFKcUlRRURRQ0FEUVFGcklnTWdBVUVCYXlJQkxRQUFPZ0FBSUFKQkFXc2lBZzBBQ3dzZ0FBdjlEZ0lSZndGK0l3QkJNR3NpQnlRQVFiaC9JUWdDUUNBRlJRMEFJQVFzQUFBaUNVSC9BWEVoQ3dKQUlBbEJBRWdFUUNBTFFmNEFhMEVCZGlJR0lBVlBEUUpCYkNFSUlBdEIvd0JySWd0Qi93RkxEUUlnQkVFQmFpRUlRUUFoQlFOQUlBVWdDMDhFUUNBTElRZ2dCaUVMREFNRklBQWdCV29nQ0NBRlFRRjJhaUlFTFFBQVFRUjJPZ0FBSUFBZ0JVRUJjbW9nQkMwQUFFRVBjVG9BQUNBRlFRSnFJUVVNQVFzQUN3QUxJQVVnQzAwTkFTQUhRZjhCTmdJRUlBWWdCMEVFYWlBSFFRaHFJQVJCQVdvaURpQUxFQXdpQkVHSWYwc0VRQ0FFSVFnTUFndEJWQ0VJSUFjb0FnZ2lFRUVHU3cwQklBY29BZ1FpRVVFQmRDSUpRUUpxclVJQklCQ3RoaUlZUVFFZ0VIUWlEVUVCYWlJRnJVSUNobng4UWd0OFF2ei8vLy8vLy8vLy93Q0RRdVFDVmcwQlFWSWhDQ0FSUWY4QlN3MEJJQTFCZjNOQkFuUkI1QUpxclNBUlFRRnFJaFZCQVhTdElCaDhRZ2g4VkEwQklBc2dCR3NoRmlBRUlBNXFJUmNnQmtHQUJHb2lFaUFGUVFKMGFpSVJJQWxxUVFKcUlRNGdCa0dFQkdvaEUwR0FnQUlnRUhSQkVIWWhDVUVBSVFWQkFTRVBJQTFCQVdzaUZDRUtBMEFnQlNBVlJrVUVRQUpBSUFZZ0JVRUJkQ0lJYWk4QkFDSUVRZi8vQTBZRVFDQVRJQXBCQW5ScUlBVTZBQUlnQ2tFQmF5RUtRUUVoQkF3QkN5QVBRUUFnQ1NBRXdVb2JJUThMSUFnZ0VXb2dCRHNCQUNBRlFRRnFJUVVNQVFzTElBWWdEenNCZ2dRZ0JpQVFPd0dBQkFKQUlBb2dGRVlFUUNBTlFRTjJJUWhDQUNFWVFRQWhEd05BSUF3Z0ZVWUVRQ0FJSUExQkFYWnFRUU5xSWdsQkFYUWhDRUVBSVFSQkFDRUtBMEJCQUNFRklBb2dEVThOQkFOQUlBVkJBa1pGQkVBZ0V5QUZJQWxzSUFScUlCUnhRUUowYWlBT0lBVWdDbXBxTFFBQU9nQUNJQVZCQVdvaEJRd0JDd3NnQ2tFQ2FpRUtJQVFnQ0dvZ0ZIRWhCQXdBQ3dBRklBWWdERUVCZEdvdUFRQWhDU0FPSUE5cUlnUWdHRGNBQUVFSUlRVURRQ0FGSUFsT1JRUkFJQVFnQldvZ0dEY0FBQ0FGUVFocUlRVU1BUXNMSUJoQ2dZS0VpSkNnd0lBQmZDRVlJQXhCQVdvaERDQUpJQTlxSVE4TUFRc0FDd0FMSUExQkEzWWdEVUVCZG1wQkEyb2hDRUVBSVFVRFFDQU1JQlZHUlFSQVFRQWhDU0FHSUF4QkFYUnFMZ0VBSWdSQkFDQUVRUUJLR3lFRUEwQWdCQ0FKUmtVRVFDQVRJQVZCQW5ScUlBdzZBQUlEUUNBRklBaHFJQlJ4SWdVZ0Nrc05BQXNnQ1VFQmFpRUpEQUVMQ3lBTVFRRnFJUXdNQVFzTFFYOGhDQ0FGRFFJTElCQkJBV29oQ0VFQUlRVURRQ0FGSUExR1JRUkFJQkVnRXlBRlFRSjBhaUlPTFFBQ1FRRjBhaUlFSUFRdkFRQWlDVUVCYWpzQkFDQU9JQWdnQ1dkQllITnFJZ1E2QUFNZ0RpQUpJQVIwSUExck93RUFJQVZCQVdvaEJRd0JDd3NDUUFKQUlBWXZBWUlFQkVBZ0IwRWNhaUlFSUJjZ0ZoQU5JZ2hCaUg5TERRSWdCMEVVYWlBRUlCSVFEaUFIUVF4cUlBUWdFaEFPUVFBaEJRTkFJQWRCSEdvaUJCQVBJQVZCK3dGTGNnMENJQUFnQldvaUJpQUhRUlJxSUFRUUVEb0FBQ0FHSUFkQkRHb2dCQkFRT2dBQklBVkJBbkloQkNBSFFSeHFFQThFUUNBRUlRVU1Bd1VnQUNBRWFpQUhRUlJxSUFkQkhHb2lCQkFRT2dBQUlBWWdCMEVNYWlBRUVCQTZBQU1nQlVFRWFpRUZEQUVMQUFzQUN5QUhRUnhxSWdRZ0Z5QVdFQTBpQ0VHSWYwc05BU0FIUVJScUlBUWdFaEFPSUFkQkRHb2dCQ0FTRUE1QkFDRUZBMEFnQjBFY2FpSUVFQThnQlVIN0FVdHlSUVJBSUFBZ0JXb2lCaUFIUVJScUlBUVFFVG9BQUNBR0lBZEJER29nQkJBUk9nQUJJQVZCQW5JaEJDQUhRUnhxRUE4RVFDQUVJUVVGSUFBZ0JHb2dCMEVVYWlBSFFSeHFJZ1FRRVRvQUFDQUdJQWRCREdvZ0JCQVJPZ0FESUFWQkJHb2hCUXdDQ3dzTEFuOERRRUc2ZnlFSUlBVkIvUUZMRFFNZ0FDQUZhaUlHSUFkQkZHb2dCMEVjYWlJSkVCRTZBQUFnQmtFQmFpRUVJQWtRRDBFRFJnUkFJQWRCREdvaENFRUNEQUlMSUFWQi9BRkxEUU1nQmlBSFFReHFJQWRCSEdvaUJCQVJPZ0FCSUFWQkFtb2hCU0FFRUE5QkEwY05BQXNnQUNBRmFpRUVJQWRCRkdvaENFRURDeUFFSUFnZ0IwRWNhaEFST2dBQUlBWnFJQUJySVFnTUFRc0Nmd05BUWJwL0lRZ2dCVUg5QVVzTkFpQUFJQVZxSWdZZ0IwRVVhaUFIUVJ4cUlna1FFRG9BQUNBR1FRRnFJUVFnQ1JBUFFRTkdCRUFnQjBFTWFpRUlRUUlNQWdzZ0JVSDhBVXNOQWlBR0lBZEJER29nQjBFY2FpSUVFQkE2QUFFZ0JVRUNhaUVGSUFRUUQwRURSdzBBQ3lBQUlBVnFJUVFnQjBFVWFpRUlRUU1MSUFRZ0NDQUhRUnhxRUJBNkFBQWdCbW9nQUdzaENBc2dDRUdJZjBzTkFRc2dDQ0VFUVFBaEJTQUJRUUJCTkJBRElRbEJBQ0VLQTBBZ0JDQUZSd1JBSUFBZ0JXb2lCaTBBQUNJQlFRdExCRUJCYkNFSURBTUZJQWtnQVVFQ2RHb2lBU0FCS0FJQVFRRnFOZ0lBSUFWQkFXb2hCVUVCSUFZdEFBQjBRUUYxSUFwcUlRb01BZ3NBQ3d0QmJDRUlJQXBGRFFBZ0NtY2lCVUVmY3lJQlFRdExEUUFnQTBFZ0lBVnJOZ0lBUVFGQkFpQUJkQ0FLYXlJRFowRWZjeUlCZENBRFJ3MEFJQUFnQkdvZ0FVRUJhaUlBT2dBQUlBa2dBRUVDZEdvaUFDQUFLQUlBUVFGcU5nSUFJQWtvQWdRaUFFRUNTU0FBUVFGeGNnMEFJQUlnQkVFQmFqWUNBQ0FMUVFGcUlRZ0xJQWRCTUdva0FDQUlDNkFGQVF4L0l3QkJFR3NpRENRQUFuOGdCRUVIVFFSQUlBeENBRGNEQ0NBTVFRaHFJZ1VnQXlBRUVBSWFRV3dnQUNBQklBSWdCVUVJRUF3aUFDQUFJQVJMR3lBQUlBQkJpWDlKR3d3QkN5QUFRUUFnQVNnQ0FFRUJhaUlOUVFGMEVBTWhEMEZVSUFNb0FBQWlCa0VQY1NJQVFRcExEUUFhSUFJZ0FFRUZhallDQUNBRElBUnFJZ0pCQkdzaEJ5QUNRUWRySVFzZ0FFRUdhaUVPUVFRaEFpQUdRUVIySVFWQklDQUFkQ0lJUVFGeUlRbEJBQ0VBUVFFaEJpQURJUVFEUUFKQUlBWkJBWEZGQkVBRFFDQUZRWDl6UVlDQWdJQjRjbWdpQmtFWVNVVUVRQ0FBUVNScUlRQWdCQ0FMVFFSL0lBUkJBMm9GSUFRZ0MydEJBM1FnQW1wQkgzRWhBaUFIQ3lJRUtBQUFJQUoySVFVTUFRc0xJQUlnQmtFZWNTSUtha0VDYWlFQ0lBWkJBWFpCQTJ3Z0FHb2dCU0FLZGtFRGNXb2lBQ0FOVHcwQkFuOGdCQ0FMU3lBQ1FRTjJJQVJxSWdVZ0IwdHhSUVJBSUFKQkIzRWhBaUFGREFFTElBUWdCMnRCQTNRZ0FtcEJIM0VoQWlBSEN5SUVLQUFBSUFKMklRVUxJQVVnQ0VFQmEzRWlCaUFJUVFGMFFRRnJJZ29nQ1dzaUVFa0VmeUFPUVFGckJTQUZJQXB4SWdVZ0VFRUFJQVVnQ0U0YmF5RUdJQTRMSVFVZ0R5QUFRUUYwYWlBR1FRRnJJZ283QVFBZ0FFRUJhaUVBSUFJZ0JXb2hBaUFJUVFFZ0Jtc2dDaUFHUVFCS0d5QUphaUlKU2dSQUlBbEJBa2dOQVVFZ0lBbG5JZ1ZySVE1QkFTQUZRUjl6ZENFSUN5QUFJQTFQRFFBZ0NrRUFSeUVHQW44Z0JDQUxTeUFDUVFOMUlBUnFJZ1VnQjB0eFJRUkFJQUpCQjNFaEFpQUZEQUVMSUFJZ0JDQUhhMEVEZEdwQkgzRWhBaUFIQ3lJRUtBQUFJQUoySVFVTUFRc0xRV3dnQ1VFQlJ3MEFHa0ZRSUFBZ0RVc05BQnBCYkNBQ1FTQktEUUFhSUFFZ0FFRUJhellDQUNBRUlBSkJCMnBCQTNWcUlBTnJDeUFNUVJCcUpBQUw4Z0VCQVg4Z0FrVUVRQ0FBUWdBM0FnQWdBRUVBTmdJUUlBQkNBRGNDQ0VHNGZ3OExJQUFnQVRZQ0RDQUFJQUZCQkdvMkFoQWdBa0VFVHdSQUlBQWdBU0FDYWlJQlFRUnJJZ00yQWdnZ0FDQURLQUFBTmdJQUlBRkJBV3N0QUFBaUFRUkFJQUFnQVdkQkYyczJBZ1FnQWc4TElBQkJBRFlDQkVGL0R3c2dBQ0FCTmdJSUlBQWdBUzBBQUNJRE5nSUFBa0FDUUFKQUlBSkJBbXNPQWdFQUFnc2dBQ0FCTFFBQ1FSQjBJQU55SWdNMkFnQUxJQUFnQVMwQUFVRUlkQ0FEYWpZQ0FBc2dBU0FDYWtFQmF5MEFBQ0lCUlFSQUlBQkJBRFlDQkVGc0R3c2dBQ0FCWnlBQ1FRTjBhMEVKYWpZQ0JDQUNDMFFCQW44Z0FTQUNMd0VBSWdNZ0FTZ0NCR29pQkRZQ0JDQUFJQU5CQW5SQm9CMXFLQUlBSUFFb0FnQkJBQ0FFYTNaeE5nSUFJQUVRRHhvZ0FDQUNRUVJxTmdJRUM1OEJBUVIvUVFNaEFTQUFLQUlFSWdKQklFMEVRQ0FBS0FJSUlnRWdBQ2dDRUU4RVFDQUFJQUpCQjNFMkFnUWdBQ0FCSUFKQkEzWnJJZ0kyQWdnZ0FDQUNLQUFBTmdJQVFRQVBDeUFBS0FJTUlnTWdBVVlFUUVFQlFRSWdBa0VnU1JzUEN5QUFJQUVnQVNBRGF5QUNRUU4ySWdRZ0FTQUVheUFEU1NJQkd5SURheUlFTmdJSUlBQWdBaUFEUVFOMGF6WUNCQ0FBSUFRb0FBQTJBZ0FMSUFFTFNBRUVmeUFBS0FJRUlBQW9BZ0JCQW5ScUlnSXRBQUlnQWk4QkFDRUVJQUVnQVNnQ0JDSUZJQUl0QUFNaUFtbzJBZ1FnQUNBRUlBRW9BZ0FnQlhSQkFDQUNhM1pxTmdJQUMxSUJCSDhnQUNnQ0JDQUFLQUlBUVFKMGFpSUNMUUFDSUFJdkFRQWhCQ0FCSUFJdEFBTWlBaUFCS0FJRWFpSUZOZ0lFSUFBZ0JDQUNRUUowUWFBZGFpZ0NBQ0FCS0FJQVFRQWdCV3QyY1dvMkFnQUxDQUFnQUVHSWYwc0xHZ0FnQUFSQUlBRUVRQ0FDSUFBZ0FSRUNBQThMSUFBUUJnc0xwZ2dDRFg4QmZpTUFRUkJySWdra0FDQUpRUUEyQWd3Z0NVRUFOZ0lJQW44Q1FDQURRZWdKYWlBRElBbEJDR29nQ1VFTWFpQUJJQUlnQTBHQUFXb1FDeUlQUVloL1N3MEFRVlFnQ1NnQ0RDSUVJQUFvQWdBaUFVSC9BWEZCQVdwTERRRWFJQUJCQkdvaEN5QUFJQUZCLzRHQWVIRWdCRUVRZEVHQWdQd0hjWEkyQWdCQmZ5QUVJQVJCQUVnYlFRRnFJUUJCQUNFQklBa29BZ2doQlVFQUlRSURRQ0FBSUFKR0JFQWdCVUVEYXlFQlFRQWhBQU5BQWtCQkFDRUNJQUFnQVU0RVFBTkFJQUFnQlU0TkFpQURJQUFnQTJwQjZBbHFMUUFBUVFKMGFrRkFheUlCSUFFb0FnQWlBVUVCYWpZQ0FDQUJJQU5xSUFBNkFPZ0hJQUJCQVdvaEFBd0FDd0FGQTBBZ0FrRUVSa1VFUUNBRElBTWdBQ0FDYWlJSGFrSG9DV290QUFCQkFuUnFRVUJySWdnZ0NDZ0NBQ0lJUVFGcU5nSUFJQU1nQ0dvZ0J6b0E2QWNnQWtFQmFpRUNEQUVMQ3lBQVFRUnFJUUFNQWdzQUN3c2dCRUVCYWlFT0lBTW9BZ0FoQjBFQUlRQkJBU0VJQTBBZ0NDQU9SZzBESUE0Z0NHc2hCQ0FESUFoQkFuUnFLQUlBSVFVQ1FBSkFBa0FDUUFKQUFrQkJBU0FJZEVFQmRTSU5RUUZyRGdnQUFRUUNCQVFFQXdRTFFRQWhBaUFGUVFBZ0JVRUFTaHNoQmlBQUlRRURRQ0FDSUFaR0RRVWdBeUFDSUFkcWFpMEE2QWNoQ2lBTElBRkJBWFJxSWd3Z0JEb0FBU0FNSUFvNkFBQWdBa0VCYWlFQ0lBRkJBV29oQVF3QUN3QUxRUUFoQWlBRlFRQWdCVUVBU2hzaENpQUFJUUVEUUNBQ0lBcEdEUVFnQ3lBQlFRRjBhaUlHSUFNZ0FpQUhhbW90QU9nSElndzZBQUlnQmlBRU9nQUJJQVlnRERvQUFDQUdJQVE2QUFNZ0FrRUJhaUVDSUFGQkFtb2hBUXdBQ3dBTFFRQWhBaUFGUVFBZ0JVRUFTaHNoQmlBRVFRaDBRWUQrQTNFaEJDQUFJUUVEUUNBQ0lBWkdEUU1nQ3lBQlFRRjBhaUFFSUFNZ0FpQUhhbW90QU9nSGNxMUNnWUNFZ0pDQXdBQitOd0FBSUFKQkFXb2hBaUFCUVFScUlRRU1BQXNBQzBFQUlRSWdCVUVBSUFWQkFFb2JJUVlnQkVFSWRFR0EvZ054SVFRZ0FDRUJBMEFnQWlBR1JnMENJQXNnQVVFQmRHb2lDaUFFSUFNZ0FpQUhhbW90QU9nSGNxMUNnWUNFZ0pDQXdBQitJaEUzQUFnZ0NpQVJOd0FBSUFKQkFXb2hBaUFCUVFocUlRRU1BQXNBQzBFQUlRRWdCVUVBSUFWQkFFb2JJUW9nQkVFSWRFR0EvZ054SVF3Z0FDRUVBMEFnQVNBS1JnMEJJQXNnQkVFQmRHb2hFQ0FNSUFNZ0FTQUhhbW90QU9nSGNxMUNnWUNFZ0pDQXdBQitJUkZCQUNFQ0EwQWdBaUFOVGtVRVFDQVFJQUpCQVhScUlnWWdFVGNBR0NBR0lCRTNBQkFnQmlBUk53QUlJQVlnRVRjQUFDQUNRUkJxSVFJTUFRc0xJQUZCQVdvaEFTQUVJQTFxSVFRTUFBc0FDeUFJUVFGcUlRZ2dCU0FIYWlFSElBVWdEV3dnQUdvaEFBd0FDd0FGSUFNZ0FrRUNkR29pQjBGQWF5QUJOZ0lBSUFKQkFXb2hBaUFIS0FJQUlBRnFJUUVNQVFzQUN3QUxJQThMSUFsQkVHb2tBQXZ5QWdFR2Z5TUFRU0JySWdVa0FDQUVLQUlBSVFZZ0JVRU1haUFDSUFNUURTSURRWWgvVFFSQUlBUkJCR29oQWlBQUlBRnFJZ2xCQTJzaEJFRUFJQVpCRUhaclFSOXhJUU1EUUNBRlFReHFFQThnQUNBRVQzSkZCRUFnQWlBRktBSU1JZ1lnQlNnQ0VDSUhkQ0FEZGtFQmRHb2lDQzBBQVNFS0lBQWdDQzBBQURvQUFDQUNJQVlnQnlBS2FpSUdkQ0FEZGtFQmRHb2lCeTBBQUNFSUlBVWdCaUFITFFBQmFqWUNFQ0FBSUFnNkFBRWdBRUVDYWlFQURBRUxDd05BSUFWQkRHb1FEeUVISUFVb0Fnd2hCaUFGS0FJUUlRUWdBQ0FKVHlBSGNrVUVRQ0FDSUFZZ0JIUWdBM1pCQVhScUlnWXRBQUFoQnlBRklBUWdCaTBBQVdvMkFoQWdBQ0FIT2dBQUlBQkJBV29oQUF3QkN3c0RRQ0FBSUFsUFJRUkFJQUlnQmlBRWRDQURka0VCZEdvaUJ5MEFBU0VJSUFBZ0J5MEFBRG9BQUNBQVFRRnFJUUFnQkNBSWFpRUVEQUVMQzBGc1FXd2dBU0FGS0FJVUlBVW9BaGhIR3lBRVFTQkhHeUVEQ3lBRlFTQnFKQUFnQXd2UEZBRWpmeU1BUWRBQWF5SUZKQUJCYkNFSkFrQWdBMEVLU1EwQUFrQWdBeUFDTHdBRUlnY2dBaThBQUNJSUlBSXZBQUlpRFdwcVFRWnFJZ3hKRFFBZ0JDOEJBaUVHSUFWQlBHb2dBa0VHYWlJQ0lBZ1FEU0lKUVloL1N3MEJJQVZCS0dvZ0FpQUlhaUlDSUEwUURTSUpRWWgvU3cwQklBVkJGR29nQWlBTmFpSUNJQWNRRFNJSlFZaC9TdzBCSUFVZ0FpQUhhaUFESUF4ckVBMGlDVUdJZjBzTkFTQUVRUVJxSVFvZ0FDQUJhaUlmUVFOcklTQkJBQ0FHYTBFZmNTRUxJQVVvQWdnaEVTQUZLQUljSVJJZ0JTZ0NNQ0VUSUFVb0FrUWhGQ0FGS0FJRUlRa2dCU2dDR0NFTklBVW9BaXdoRENBRktBSkFJUVlnQlNnQ0VDRWhJQVVvQWlRaElpQUZLQUk0SVNNZ0JTZ0NUQ0VrSUFVb0FnQWhGU0FGS0FJVUlSWWdCU2dDS0NFWElBVW9BandoR0VFQklROGdBQ0FCUVFOcVFRSjJJZ1JxSWdNZ0JHb2lBaUFFYWlJWklRUWdBaUVJSUFNaEJ3TkFJQTlCQVhGRklBUWdJRTl5UlFSQUlBQWdDaUFZSUFaMElBdDJRUUowYWlJT0x3RUFPd0FBSUE0dEFBSWhHaUFPTFFBRElSQWdCeUFLSUJjZ0RIUWdDM1pCQW5ScUlnNHZBUUE3QUFBZ0RpMEFBaUViSUE0dEFBTWhEeUFJSUFvZ0ZpQU5kQ0FMZGtFQ2RHb2lEaThCQURzQUFDQU9MUUFDSVJ3Z0RpMEFBeUVkSUFRZ0NpQVZJQWwwSUF0MlFRSjBhaUlPTHdFQU93QUFJQTR0QUFJaEhpQU9MUUFESVE0Z0FDQVFhaUlsSUFvZ0dDQUdJQnBxSWdaMElBdDJRUUowYWlJUUx3RUFPd0FBSUJBdEFBSWdFQzBBQXlFbUlBY2dEMm9pSnlBS0lCY2dEQ0FiYWlJYWRDQUxka0VDZEdvaUJ5OEJBRHNBQUNBSExRQUNJUXdnQnkwQUF5RVFJQWdnSFdvaUd5QUtJQllnRFNBY2FpSVBkQ0FMZGtFQ2RHb2lDQzhCQURzQUFDQUlMUUFDSVEwZ0NDMEFBeUVjSUFRZ0Rtb2lIU0FLSUJVZ0NTQWVhaUlPZENBTGRrRUNkR29pQ1M4QkFEc0FBQ0FHYWlFQVFRTWhCd0ovSUJRZ0pFa0VRQ0FBSVFaQkF3d0JDeUFBUVFkeElRWWdGQ0FBUVFOMmF5SVVLQUFBSVJoQkFBc2dDUzBBQXlFZUlBa3RBQUloQ0NBTUlCcHFJUUFnRXlBalNRUi9JQUFGSUJNZ0FFRURkbXNpRXlnQUFDRVhRUUFoQnlBQVFRZHhDeUVNSUEwZ0Qyb2hBQ0FIY2lFSlFRTWhEd0ovSUJJZ0lra0VRQ0FBSVExQkF3d0JDeUFBUVFkeElRMGdFaUFBUVFOMmF5SVNLQUFBSVJaQkFBc2dDQ0FPYWlFQUlBbHlJQkVnSVVrRWZ5QUFCU0FSSUFCQkEzWnJJaEVvQUFBaEZVRUFJUThnQUVFSGNRc2hDU0FsSUNacUlRQWdFQ0FuYWlFSElCc2dIR29oQ0NBZElCNXFJUVFnRDNKRklROE1BUXNMSUFVZ0REWUNMQ0FGSUFZMkFrQWdCU0FOTmdJWUlBVWdDVFlDQkNBRklCUTJBa1FnQlNBVE5nSXdJQVVnRWpZQ0hDQUZJQkUyQWdnZ0JTQVlOZ0k4SUFVZ0Z6WUNLQ0FGSUJZMkFoUWdCU0FWTmdJQUlBSWdCMGtnQUNBRFMzSU5BRUZzSVFrZ0NDQVpTdzBCSUFOQkEyc2hDUU5BSUFWQlBHb1FEMFVnQUNBSlNYRUVRQ0FBSUFvZ0JTZ0NQQ0lOSUFVb0FrQWlESFFnQzNaQkFuUnFJZzR2QVFBN0FBQWdBQ0FPTFFBRGFpSUdJQW9nRFNBTUlBNHRBQUpxSWdCMElBdDJRUUowYWlJTUx3RUFPd0FBSUFVZ0FDQU1MUUFDYWpZQ1FDQUdJQXd0QUFOcUlRQU1BUVVnQTBFQ2F5RU1BMEFnQlVFOGFoQVBJUVlnQlNnQ1BDRU5JQVVvQWtBaENTQUFJQXhMSUFaeVJRUkFJQUFnQ2lBTklBbDBJQXQyUVFKMGFpSUdMd0VBT3dBQUlBVWdDU0FHTFFBQ2FqWUNRQ0FBSUFZdEFBTnFJUUFNQVFzTEEwQWdBQ0FNUzBVRVFDQUFJQW9nRFNBSmRDQUxka0VDZEdvaUJpOEJBRHNBQUNBQUlBWXRBQU5xSVFBZ0NTQUdMUUFDYWlFSkRBRUxDd0pBSUFBZ0EwOE5BQ0FBSUFvZ0RTQUpkQ0FMZGlJQVFRSjBhaUlETFFBQU9nQUFJQU10QUFOQkFVWUVRQ0FKSUFNdEFBSnFJUWtNQVFzZ0NVRWZTdzBBUVNBZ0NTQUtJQUJCQW5ScUxRQUNhaUlBSUFCQklFOGJJUWtMSUFKQkEyc2hEQU5BSUFWQktHb1FEMFVnQnlBTVNYRUVRQ0FISUFvZ0JTZ0NLQ0lHSUFVb0Fpd2lBSFFnQzNaQkFuUnFJZzB2QVFBN0FBQWdCeUFOTFFBRGFpSURJQW9nQmlBQUlBMHRBQUpxSWdCMElBdDJRUUowYWlJR0x3RUFPd0FBSUFVZ0FDQUdMUUFDYWpZQ0xDQURJQVl0QUFOcUlRY01BUVVnQWtFQ2F5RUdBMEFnQlVFb2FoQVBJUU1nQlNnQ0tDRU1JQVVvQWl3aEFDQUdJQWRKSUFOeVJRUkFJQWNnQ2lBTUlBQjBJQXQyUVFKMGFpSURMd0VBT3dBQUlBVWdBQ0FETFFBQ2FqWUNMQ0FISUFNdEFBTnFJUWNNQVFzTEEwQWdCaUFIU1VVRVFDQUhJQW9nRENBQWRDQUxka0VDZEdvaUF5OEJBRHNBQUNBSElBTXRBQU5xSVFjZ0FDQURMUUFDYWlFQURBRUxDd0pBSUFJZ0IwME5BQ0FISUFvZ0RDQUFkQ0FMZGlJQ1FRSjBhaUlETFFBQU9nQUFJQU10QUFOQkFVWUVRQ0FBSUFNdEFBSnFJUUFNQVFzZ0FFRWZTdzBBUVNBZ0FDQUtJQUpCQW5ScUxRQUNhaUlBSUFCQklFOGJJUUFMSUJsQkEyc2hEQU5BSUFWQkZHb1FEMFVnQ0NBTVNYRUVRQ0FJSUFvZ0JTZ0NGQ0lHSUFVb0FoZ2lBblFnQzNaQkFuUnFJZzB2QVFBN0FBQWdDQ0FOTFFBRGFpSURJQW9nQmlBQ0lBMHRBQUpxSWdKMElBdDJRUUowYWlJR0x3RUFPd0FBSUFVZ0FpQUdMUUFDYWpZQ0dDQURJQVl0QUFOcUlRZ01BUVVnR1VFQ2F5RURBMEFnQlVFVWFoQVBJUUlnQlNnQ0ZDRUdJQVVvQWhnaEJ5QURJQWhKSUFKeVJRUkFJQWdnQ2lBR0lBZDBJQXQyUVFKMGFpSUNMd0VBT3dBQUlBVWdCeUFDTFFBQ2FqWUNHQ0FJSUFJdEFBTnFJUWdNQVFzTEEwQWdBeUFJU1VVRVFDQUlJQW9nQmlBSGRDQUxka0VDZEdvaUFpOEJBRHNBQUNBSUlBSXRBQU5xSVFnZ0J5QUNMUUFDYWlFSERBRUxDd0pBSUFnZ0dVOE5BQ0FJSUFvZ0JpQUhkQ0FMZGlJQ1FRSjBhaUlETFFBQU9nQUFJQU10QUFOQkFVWUVRQ0FISUFNdEFBSnFJUWNNQVFzZ0IwRWZTdzBBUVNBZ0J5QUtJQUpCQW5ScUxRQUNhaUlDSUFKQklFOGJJUWNMQTBBZ0JSQVBSU0FFSUNCSmNRUkFJQVFnQ2lBRktBSUFJZ1lnQlNnQ0JDSUNkQ0FMZGtFQ2RHb2lEQzhCQURzQUFDQUVJQXd0QUFOcUlnTWdDaUFHSUFJZ0RDMEFBbW9pQW5RZ0MzWkJBblJxSWdRdkFRQTdBQUFnQlNBQ0lBUXRBQUpxTmdJRUlBTWdCQzBBQTJvaEJBd0JCU0FmUVFKcklRTURRQ0FGRUE4aEFpQUZLQUlBSVFZZ0JTZ0NCQ0VJSUFNZ0JFa2dBbkpGQkVBZ0JDQUtJQVlnQ0hRZ0MzWkJBblJxSWdJdkFRQTdBQUFnQlNBSUlBSXRBQUpxTmdJRUlBUWdBaTBBQTJvaEJBd0JDd3NEUUNBRElBUkpSUVJBSUFRZ0NpQUdJQWgwSUF0MlFRSjBhaUlDTHdFQU93QUFJQVFnQWkwQUEyb2hCQ0FJSUFJdEFBSnFJUWdNQVFzTEFrQWdCQ0FmVHcwQUlBUWdDaUFHSUFoMElBdDJJZ0pCQW5ScUlnTXRBQUE2QUFBZ0F5MEFBMEVCUmdSQUlBZ2dBeTBBQW1vaENBd0JDeUFJUVI5TERRQkJJQ0FJSUFvZ0FrRUNkR290QUFKcUlnSWdBa0VnVHhzaENBdEJiRUZzUVd4QmJFRnNRV3hCYkVGc0lBRWdDRUVnUnhzZ0JTZ0NDQ0FGS0FJTVJ4c2dCMEVnUnhzZ0JTZ0NIQ0FGS0FJZ1J4c2dBRUVnUnhzZ0JTZ0NNQ0FGS0FJMFJ4c2dDVUVnUnhzZ0JTZ0NSQ0FGS0FKSVJ4c2hDUXdKQ3dBTEFBc0FDd0FMQUFzQUN3QUxBQXRCYkNFSkN5QUZRZEFBYWlRQUlBa0w3QkFCSG44akFFSFFBR3NpQlNRQVFXd2hDUUpBSUFOQkNra05BQUpBSUFNZ0FpOEFCQ0lHSUFJdkFBQWlCeUFDTHdBQ0lnaHFha0VHYWlJT1NRMEFJQVF2QVFJaER5QUZRVHhxSUFKQkJtb2lBaUFIRUEwaUNVR0lmMHNOQVNBRlFTaHFJQUlnQjJvaUFpQUlFQTBpQ1VHSWYwc05BU0FGUVJScUlBSWdDR29pQWlBR0VBMGlDVUdJZjBzTkFTQUZJQUlnQm1vZ0F5QU9heEFOSWdsQmlIOUxEUUVnQkVFRWFpRUtJQUFnQVdvaUhFRURheUVkUVFBZ0QydEJIM0VoQ3lBRktBSUlJUkVnQlNnQ0hDRVNJQVVvQWpBaEV5QUZLQUpFSVJRZ0JTZ0NCQ0VKSUFVb0FoZ2hCaUFGS0FJc0lRY2dCU2dDUUNFSUlBVW9BaEFoSGlBRktBSWtJUjhnQlNnQ09DRWdJQVVvQWt3aElTQUZLQUlBSVJVZ0JTZ0NGQ0VXSUFVb0FpZ2hGeUFGS0FJOElSaEJBU0VOSUFBZ0FVRURha0VDZGlJQ2FpSU9JQUpxSWc4Z0Ftb2lHU0VFSUE4aEFpQU9JUU1EUUNBTlJTQUVJQjFQY2tVRVFDQUtJQmdnQ0hRZ0MzWkJBWFJxSWd3dEFBRWhEU0FBSUF3dEFBQTZBQUFnQ2lBWElBZDBJQXQyUVFGMGFpSU1MUUFCSVJBZ0F5QU1MUUFBT2dBQUlBb2dGaUFHZENBTGRrRUJkR29pREMwQUFTRWFJQUlnREMwQUFEb0FBQ0FLSUJVZ0NYUWdDM1pCQVhScUlnd3RBQUVoR3lBRUlBd3RBQUE2QUFBZ0NpQVlJQWdnRFdvaUNIUWdDM1pCQVhScUlnd3RBQUVoRFNBQUlBd3RBQUE2QUFFZ0NpQVhJQWNnRUdvaUIzUWdDM1pCQVhScUlnd3RBQUVoRUNBRElBd3RBQUE2QUFFZ0NpQVdJQVlnR21vaURIUWdDM1pCQVhScUlnWXRBQUVoR2lBQ0lBWXRBQUE2QUFFZ0NpQVZJQWtnRzJvaUczUWdDM1pCQVhScUlna3RBQUVoSWlBRUlBa3RBQUE2QUFFZ0NDQU5haUVHUVFNaENRSi9JQlFnSVVrRVFFRURJUTBnQmd3QkN5QVVJQVpCQTNackloUW9BQUFoR0VFQUlRMGdCa0VIY1FzaENDQUhJQkJxSVFZZ0V5QWdTUVIvSUFZRklCTWdCa0VEZG1zaUV5Z0FBQ0VYUVFBaENTQUdRUWR4Q3lFSElBd2dHbW9oRENBSklBMXlJUkJCQXlFTkFuOGdFaUFmU1FSQUlBd2hCa0VEREFFTElBeEJCM0VoQmlBU0lBeEJBM1pySWhJb0FBQWhGa0VBQ3lBYklDSnFJUXdnRUhJaEVDQVJJQjVKQkg4Z0RBVWdFU0FNUVFOMmF5SVJLQUFBSVJWQkFDRU5JQXhCQjNFTElRa2dCRUVDYWlFRUlBSkJBbW9oQWlBRFFRSnFJUU1nQUVFQ2FpRUFJQTBnRUhKRklRME1BUXNMSUFVZ0J6WUNMQ0FGSUFnMkFrQWdCU0FHTmdJWUlBVWdDVFlDQkNBRklCUTJBa1FnQlNBVE5nSXdJQVVnRWpZQ0hDQUZJQkUyQWdnZ0JTQVlOZ0k4SUFVZ0Z6WUNLQ0FGSUJZMkFoUWdCU0FWTmdJQUlBQWdEa3NnQXlBUFMzSU5BRUZzSVFrZ0FpQVpTdzBCSUE1QkEyc2hDUU5BSUFWQlBHb1FEeUFBSUFsUGNrVUVRQ0FLSUFVb0Fqd2lCaUFGS0FKQUlnZDBJQXQyUVFGMGFpSUlMUUFCSVF3Z0FDQUlMUUFBT2dBQUlBb2dCaUFISUF4cUlnWjBJQXQyUVFGMGFpSUhMUUFBSVFnZ0JTQUdJQWN0QUFGcU5nSkFJQUFnQ0RvQUFTQUFRUUpxSVFBTUFRc0xBMEFnQlVFOGFoQVBJUWNnQlNnQ1BDRUdJQVVvQWtBaENTQUFJQTVQSUFkeVJRUkFJQW9nQmlBSmRDQUxka0VCZEdvaUJpMEFBQ0VISUFVZ0NTQUdMUUFCYWpZQ1FDQUFJQWM2QUFBZ0FFRUJhaUVBREFFTEN3TkFJQUFnRGs5RkJFQWdDaUFHSUFsMElBdDJRUUYwYWlJSExRQUJJQUFnQnkwQUFEb0FBQ0FBUVFGcUlRQWdDV29oQ1F3QkN3c2dEMEVEYXlFQUEwQWdCVUVvYWhBUElBQWdBMDF5UlFSQUlBb2dCU2dDS0NJR0lBVW9BaXdpQjNRZ0MzWkJBWFJxSWdndEFBRWhEaUFESUFndEFBQTZBQUFnQ2lBR0lBY2dEbW9pQm5RZ0MzWkJBWFJxSWdjdEFBQWhDQ0FGSUFZZ0J5MEFBV28yQWl3Z0F5QUlPZ0FCSUFOQkFtb2hBd3dCQ3dzRFFDQUZRU2hxRUE4aEJ5QUZLQUlvSVFZZ0JTZ0NMQ0VBSUFNZ0QwOGdCM0pGQkVBZ0NpQUdJQUIwSUF0MlFRRjBhaUlHTFFBQUlRY2dCU0FBSUFZdEFBRnFOZ0lzSUFNZ0J6b0FBQ0FEUVFGcUlRTU1BUXNMQTBBZ0F5QVBUMFVFUUNBS0lBWWdBSFFnQzNaQkFYUnFJZ2N0QUFFaENDQURJQWN0QUFBNkFBQWdBMEVCYWlFRElBQWdDR29oQUF3QkN3c2dHVUVEYXlFREEwQWdCVUVVYWhBUElBSWdBMDl5UlFSQUlBb2dCU2dDRkNJR0lBVW9BaGdpQjNRZ0MzWkJBWFJxSWdndEFBRWhEaUFDSUFndEFBQTZBQUFnQ2lBR0lBY2dEbW9pQm5RZ0MzWkJBWFJxSWdjdEFBQWhDQ0FGSUFZZ0J5MEFBV28yQWhnZ0FpQUlPZ0FCSUFKQkFtb2hBZ3dCQ3dzRFFDQUZRUlJxRUE4aEJ5QUZLQUlVSVFZZ0JTZ0NHQ0VESUFJZ0dVOGdCM0pGQkVBZ0NpQUdJQU4wSUF0MlFRRjBhaUlHTFFBQUlRY2dCU0FESUFZdEFBRnFOZ0lZSUFJZ0J6b0FBQ0FDUVFGcUlRSU1BUXNMQTBBZ0FpQVpUMFVFUUNBS0lBWWdBM1FnQzNaQkFYUnFJZ2N0QUFFaENDQUNJQWN0QUFBNkFBQWdBa0VCYWlFQ0lBTWdDR29oQXd3QkN3c0RRQ0FGRUE4Z0JDQWRUM0pGQkVBZ0NpQUZLQUlBSWdJZ0JTZ0NCQ0lHZENBTGRrRUJkR29pQnkwQUFTRUlJQVFnQnkwQUFEb0FBQ0FLSUFJZ0JpQUlhaUlDZENBTGRrRUJkR29pQmkwQUFDRUhJQVVnQWlBR0xRQUJhallDQkNBRUlBYzZBQUVnQkVFQ2FpRUVEQUVMQ3dOQUlBVVFEeUVISUFVb0FnQWhCaUFGS0FJRUlRSWdCQ0FjVHlBSGNrVUVRQ0FLSUFZZ0FuUWdDM1pCQVhScUlnWXRBQUFoQnlBRklBSWdCaTBBQVdvMkFnUWdCQ0FIT2dBQUlBUkJBV29oQkF3QkN3c0RRQ0FFSUJ4UFJRUkFJQW9nQmlBQ2RDQUxka0VCZEdvaUJ5MEFBU0VJSUFRZ0J5MEFBRG9BQUNBRVFRRnFJUVFnQWlBSWFpRUNEQUVMQzBGc1FXeEJiRUZzUVd4QmJFRnNRV3dnQVNBQ1FTQkhHeUFGS0FJSUlBVW9BZ3hIR3lBRFFTQkhHeUFGS0FJY0lBVW9BaUJIR3lBQVFTQkhHeUFGS0FJd0lBVW9BalJIR3lBSlFTQkhHeUFGS0FKRUlBVW9Ba2hIR3lFSkRBRUxRV3doQ1FzZ0JVSFFBR29rQUNBSkMxZ0JBMzhDUUNBQUtBS1E2d0VpQVVVTkFDQUJLQUlBSUFGQnROVUJhaWdDQUNJQ0lBRkJ1TlVCYWlnQ0FDSURFQk1nQWdSQUlBTWdBU0FDRVFJQURBRUxJQUVRQmdzZ0FFRUFOZ0tnNndFZ0FFSUFOd09RNndFTDZRTUNCSDhDZmlBQVFRQkJLQkFESVFRZ0FrRUJRUVVnQXhzaUFFa0VRQ0FBRHdzZ0FVVUVRRUYvRHd0QkFTRUdBa0FDUUNBRFFRRkdEUUFnQXlFR0lBRW9BQUFpQlVHbzZyNXBSZzBBUVhZaEF5QUZRWEJ4UWREVXRNSUJSdzBCUVFnaEF5QUNRUWhKRFFFZ0FUVUFCQ0VJSUFSQkFUWUNGQ0FFSUFnM0F3QkJBQThMSUFFZ0FpQUdFQm9pQXlBQ1N3MEFJQVFnQXpZQ0dFRnlJUU1nQUNBQmFpSUZRUUZyTFFBQUlnSkJDSEVOQUNBQ1FTQnhJZ1pGQkVCQmNDRURJQVV0QUFBaUJVR25BVXNOQVNBRlFRZHhyVUlCSUFWQkEzWkJDbXF0aGlJSVFnT0lmaUFJZkNFSklBQkJBV29oQUFzZ0FrRUdkaUVGSUFKQkFuWkJBQ0VEQWtBQ1FBSkFBa0FnQWtFRGNVRUJhdzREQUFFQ0F3c2dBQ0FCYWkwQUFDRURJQUJCQVdvaEFBd0NDeUFBSUFGcUx3QUFJUU1nQUVFQ2FpRUFEQUVMSUFBZ0FXb29BQUFoQXlBQVFRUnFJUUFMUVFGeElRSUNmZ0pBQWtBQ1FBSkFJQVZCQVdzT0F3RUNBd0FMUW44Z0JrVU5BeG9nQUNBQmFqRUFBQXdEQ3lBQUlBRnFNd0FBUW9BQ2ZBd0NDeUFBSUFGcU5RQUFEQUVMSUFBZ0FXb3BBQUFMSVFnZ0JDQUNOZ0lnSUFRZ0F6WUNIQ0FFSUFnM0F3QkJBQ0VESUFSQkFEWUNGQ0FFSUFnZ0NTQUdHeUlJTndNSUlBUkNnSUFJSUFnZ0NFS0FnQWhhR3o0Q0VBc2dBd3RmQVFGL1FiaC9JUU1nQVVFQlFRVWdBaHNpQWs4RWZ5QUFJQUpxUVFGckxRQUFJZ0JCQTNGQkFuUkJvQjVxS0FJQUlBSnFJQUJCQkhaQkRIRkJzQjVxS0FJQWFpQUFRU0J4SWdGRmFpQUJRUVYySUFCQndBQkpjV29GUWJoL0N3c01BQ0FBSUFFZ0FrRUFFQmtMbHdNQ0JYOENmaU1BUVVCcUlnUWtBQUpBQTBBZ0FVRUZUd1JBQWtBZ0FDZ0FBRUZ3Y1VIUTFMVENBVVlFUUVKK0lRY2dBVUVJU1EwRUlBQW9BQVFpQWtGM1N3MEVJQUpCQ0dvaUF5QUJTdzBFSUFKQmdYOUpEUUVNQkFzZ0JFRVlhaUFBSUFFUUd5RUNRbjRnQkNrREdFSUFJQVFvQWl4QkFVY2JJQUliSWdkQ2ZWWU5BeUFISUFoOElnZ2dCMVJDZmlFSERRTUNRQUpBSUFGQkNFa05BQ0FBS0FBQVFYQnhRZERVdE1JQlJ3MEFJQUFvQUFRaUFrRjNTdzBGUWJoL0lBSkJDR29pQWlBQklBSkpHeUVEREFFTElBUkJHR29nQUNBQkVCc2lBa0dJZjBzRVFDQUNJUU1NQVF0QnVIOGhBeUFDRFFBZ0FTQUVLQUl3SWdKcklRVWdBQ0FDYWlFR0EwQWdCaUFGSUFSQkRHb1FIU0lEUVloL1N3MEJJQU5CQTJvaUFpQUZTd1JBUWJoL0lRTU1BZ3NnQlNBQ2F5RUZJQUlnQm1vaEJpQUVLQUlRUlEwQUN5QUVLQUk0Qkg5QnVIOGhBeUFGUVFSSkRRRWdCa0VFYWdVZ0Jnc2dBR3NoQXdzZ0EwR0lmMHNOQXdzZ0FTQURheUVCSUFBZ0Eyb2hBQXdCQ3d0Q2ZpQUlJQUViSVFjTElBUkJRR3NrQUNBSEMyUUJBWDlCdUg4aEF3SkFJQUZCQTBrTkFDQUFMUUFDSVFFZ0FpQUFMd0FBSWdCQkFYRTJBZ1FnQWlBQVFRRjJRUU54SWdNMkFnQWdBaUFBSUFGQkVIUnlRUU4ySWdBMkFnZ0NRQUpBSUFOQkFXc09Bd0lCQUFFTFFXd1BDeUFBSVFNTElBTUxSQUVDZnlBQklBSW9BZ1FpQXlBQktBSUVhaUlFTmdJRUlBQWdBMEVDZEVHZ0hXb29BZ0FnQVNnQ0FFRUFJQVJyZG5FMkFnQWdBUkFQR2lBQUlBSkJDR28yQWdRTHpnRUJCbjlCdW44aENnSkFJQUlvQWdRaUNDQUNLQUlBSWdscUlnMGdBU0FBYTBzTkFFRnNJUW9nQ1NBRUlBTW9BZ0FpQzJ0TERRQWdBQ0FKYWlJRUlBSW9BZ2dpREdzaEFpQUFJQUZCSUdzaUFDQUxJQWxCQUJBZ0lBTWdDU0FMYWpZQ0FBSkFBa0FnQkNBRmF5QU1Ud1JBSUFJaEJRd0JDeUFNSUFRZ0JtdExEUUlnQnlBSElBSWdCV3NpQW1vaUFTQUlhazhFUUNBRUlBRWdDQkFLR2d3Q0N5QUNJQWhxSVFnZ0JDQUJRUUFnQW1zUUNpQUNheUVFQ3lBRUlBQWdCU0FJUVFFUUlBc2dEU0VLQ3lBS0M4Y0VBUUovSUFBZ0Eyb2hCZ0pBSUFOQkIwd0VRQU5BSUFBZ0JrOE5BaUFBSUFJdEFBQTZBQUFnQUVFQmFpRUFJQUpCQVdvaEFnd0FDd0FMSUFSQkFVWUVRQUpBSUFBZ0Ftc2lCVUVIVFFSQUlBQWdBaTBBQURvQUFDQUFJQUl0QUFFNkFBRWdBQ0FDTFFBQ09nQUNJQUFnQWkwQUF6b0FBeUFBSUFJZ0JVRUNkQ0lGUWNBZWFpZ0NBR29pQWlnQUFEWUFCQ0FDSUFWQjRCNXFLQUlBYXlFQ0RBRUxJQUFnQWlrQUFEY0FBQXNnQWtFSWFpRUNJQUJCQ0dvaEFBc2dBU0FHVHdSQUlBQWdBMm9oQVNBRVFRRkhJQUFnQW10QkQwcHlSUVJBQTBBZ0FDQUNLUUFBTndBQUlBSkJDR29oQWlBQVFRaHFJZ0FnQVVrTkFBd0RDd0FMSUFBZ0Fpa0FBRGNBQUNBQUlBSXBBQWczQUFnZ0EwRVJTUTBCSUFCQkVHb2hBQU5BSUFBZ0Fpa0FFRGNBQUNBQUlBSXBBQmczQUFnZ0FDQUNLUUFnTndBUUlBQWdBaWtBS0RjQUdDQUNRU0JxSVFJZ0FFRWdhaUlBSUFGSkRRQUxEQUVMQWtBZ0FDQUJTd1JBSUFBaEFRd0JDeUFCSUFCcklRVUNRQ0FFUVFGSElBQWdBbXRCRDBweVJRUkFJQUloQXdOQUlBQWdBeWtBQURjQUFDQURRUWhxSVFNZ0FFRUlhaUlBSUFGSkRRQUxEQUVMSUFBZ0Fpa0FBRGNBQUNBQUlBSXBBQWczQUFnZ0JVRVJTQTBBSUFCQkVHb2hBQ0FDSVFNRFFDQUFJQU1wQUJBM0FBQWdBQ0FES1FBWU53QUlJQUFnQXlrQUlEY0FFQ0FBSUFNcEFDZzNBQmdnQTBFZ2FpRURJQUJCSUdvaUFDQUJTUTBBQ3dzZ0FpQUZhaUVDQ3dOQUlBRWdCazhOQVNBQklBSXRBQUE2QUFBZ0FVRUJhaUVCSUFKQkFXb2hBZ3dBQ3dBTEM2NEhBZ1YvQVg0akFFR0FBV3NpRVNRQUlCRWdBellDZkVGL0lROENRQUpBQWtBQ1FBSkFJQUlPQkFFQUF3SUVDeUFHUlFSQVFiaC9JUThNQkF0QmJDRVBJQVV0QUFBaUFpQURTdzBESUFnZ0FrRUNkQ0lDYWlnQ0FDRURJQUlnQjJvb0FnQWhBaUFBUVFBNkFBc2dBRUlBTndJQUlBQWdBallDRENBQUlBTTZBQW9nQUVFQU93RUlJQUVnQURZQ0FFRUJJUThNQXdzZ0FTQUpOZ0lBUVFBaER3d0NDeUFLUlFSQVFXd2hEd3dDQzBFQUlROGdDMFVnREVFWlNISU5BVUVJSUFSMFFRaHFJUUJCQUNFREEwQWdBQ0FEVFEwQ0lBTkJRR3NoQXd3QUN3QUxRV3doRHlBUklCRkIvQUJxSUJGQitBQnFJQVVnQmhBTUlnTkJpSDlMRFFBZ0VTZ0NlQ0lDSUFSTERRQWdFU2dDZkVFQmFpRUpJQUJCQ0dvaEMwR0FnQUlnQW5SQkVIVWhCVUVCSVJCQkFTQUNkQ0lQUVFGcklnb2hFZ05BSUFrZ0RrY0VRQUpBSUJFZ0RrRUJkQ0lFYWk4QkFDSU1RZi8vQTBZRVFDQUxJQkpCQTNScUlBNDJBZ1FnRWtFQmF5RVNRUUVoREF3QkN5QVFRUUFnQlNBTXdVb2JJUkFMSUFRZ0RXb2dERHNCQUNBT1FRRnFJUTRNQVFzTElBQWdBallDQkNBQUlCQTJBZ0FDUUNBS0lCSkdCRUFnRFVIcUFHb2hCa0VBSVJCQkFDRU1BMEFnQ1NBUVJnUkFJQTlCQTNZZ0QwRUJkbXBCQTJvaUJVRUJkQ0VFUVFBaERFRUFJUklEUUVFQUlRNGdEeUFTVFEwRUEwQWdEa0VDUndSQUlBc2dCU0FPYkNBTWFpQUtjVUVEZEdvZ0JpQU9JQkpxYWkwQUFEWUNCQ0FPUVFGcUlRNE1BUXNMSUJKQkFtb2hFaUFFSUF4cUlBcHhJUXdNQUFzQUJTQVJJQkJCQVhScUxnRUFJUVVnQmlBTWFpSUVJQk0zQUFCQkNDRU9BMEFnQlNBT1NnUkFJQVFnRG1vZ0V6Y0FBQ0FPUVFocUlRNE1BUXNMSUJOQ2dZS0VpSkNnd0lBQmZDRVRJQkJCQVdvaEVDQUZJQXhxSVF3TUFRc0FDd0FMSUE5QkEzWWdEMEVCZG1wQkEyb2hCVUVBSVJCQkFDRU9BMEFnQ1NBUVJnMEJRUUFoRENBUklCQkJBWFJxTGdFQUlnUkJBQ0FFUVFCS0d5RUVBMEFnQkNBTVJ3UkFJQXNnRGtFRGRHb2dFRFlDQkFOQUlBVWdEbW9nQ25FaURpQVNTdzBBQ3lBTVFRRnFJUXdNQVFzTElCQkJBV29oRUF3QUN3QUxJQUpCQVdvaEJVRUFJUXdEUUNBTUlBOUhCRUFnRFNBTElBeEJBM1JxSWdrb0FnUWlCRUVCZEdvaUFpQUNMd0VBSWdaQkFXbzdBUUFnQ1NBRklBWm5RV0J6YWlJQ09nQURJQWtnQmlBQ2RDQVBhenNCQUNBSklBZ2dCRUVDZENJQ2FpZ0NBRG9BQWlBSklBSWdCMm9vQWdBMkFnUWdERUVCYWlFTURBRUxDeUFCSUFBMkFnQWdBeUVQQ3lBUlFZQUJhaVFBSUE4TDdWb0NPMzhHZmlNQVFlQUJheUlFSkFBQ1FFR3c3QWtRQlNJRlJRUkFRVUFoQnd3QkN5QUZRZ0EzQXZUcUFTQUZRUUEyQXNUckFTQUZRUUEyQXJUckFTQUZRZ0EzQXB6ckFTQUZRUUEyQXJqcEFTQUZRUUEyQXF6c0NTQUZRZ0EzQXRUckFTQUZRZ0EzQXF6ckFTQUZRZ0EzQTRqckFTQUZRZ0EzQXVUcUFTQUZRZ0EzQXVUckFTQUZRWUdBZ01BQU5nSzg2d0VnQlVJQU53S2s2d0VnQlVIODZnRnFRUUEyQWdBZ0JVR1E2d0ZxUWdBM0F3QWdCUkFZSUFWQnJOVUJhaUVVSUFWQitPc0JhaUVjSUFWQnNPb0JhaUVpSUFWQm9EQnFJU29nQlVHWUlHb2hLeUFGUWFqUUFHb2hIaUFGUVJCcUlTd2dCVUVJYWlFb0lBVkJCR29oTFNBRlFjRHBBV29oS1NBRlFZanJBV29nQkVHVUFXb2hMeUFFUVl3QmFpRXdJQVJCaEFGcUlURWdCRUhjQUdvaE1pQUVRZFFBYWlFeklBUkJ6QUJxSVRRZ0FDRWRBa0FDUUFKQUFrQUNRQU5BUVFGQkJTQUZLQUxrNmdFYklRWUNRQU5BSUFNZ0Jra05BU0FDS0FBQVFYQnhRZERVdE1JQlJnUkFRYmgvSVFjZ0EwRUlTUTBJSUFJb0FBUWlEa0YzU3dSQVFYSWhCd3dKQ3lBRElBNUJDR29pQ1VrTkNDQU9RWUIvU3dSQUlBa2hCd3dKQ3lBRElBbHJJUU1nQWlBSmFpRUNEQUVMQ3lBRlFnQTNBcXpwQVNBRlFnQTNBK2pwQVNBRlFRQTJBcGpyQVNBRlFnQTNBNERxQVNBRlFnTTNBL2pwQVNBRlFiVHBBV3BDQURjQ0FDQUZRZkRwQVdwQ0FEY0RBQ0FGUWFqUUFHb2lDVUdNZ0lEZ0FEWUNBQ0FGUWF6UUFXcEI0QklwQWdBM0FnQWdCVUcwMEFGcVFlZ1NLQUlBTmdJQUlBVWdCVUVRYWpZQ0FDQUZJQVZCb0RCcU5nSUVJQVVnQlVHWUlHbzJBZ2dnQlNBSk5nSU1JQVZCQVVFRklBVW9BdVRxQVJzMkFyenBBUUpBSUFGRkRRQWdCU2dDck9rQklna2dIVVlOQUNBRklBazJBcmpwQVNBRklCMDJBcXpwQVNBRktBS3c2UUVoRGlBRklCMDJBckRwQVNBRklCMGdEaUFKYTJvMkFyVHBBUXRCdUg4aENTQURRUVZCQ1NBRktBTGs2Z0VpQmh0SkRRVWdBa0VCUVFVZ0Joc2dCaEFhSWc1QmlIOUxCRUFnRGlFSkRBVUxJQU1nRGtFRGFra05CU0FwSUFJZ0RpQUdFQmtpQmtHSWYwc0VRQ0FHSVFrTUJRc2dCZzBGQWtBQ1FDQUZLQUtvNndGQkFVY05BQ0FGS0FLazZ3RWlDVVVOQUNBRktBS1U2d0ZGRFFBZ0NTZ0NCRUVCYXlJSElBVW9BdHpwQVNJS3JVS0hsYSt2bUxiZW01NS9ma0xKejlteThlVzY2aWVGUWhlSlFzL1cwNzdTeDZ2WlFuNUMrZlBkOFpuMm1hc1dmQ0kvUWlHSUlEK0ZRcy9XMDc3U3g2dlpRbjRpUDBJZGlDQS9oVUw1ODkzeG1mYVpxeForSWo5Q0lJZ2dQNFduY1NFR0lBa29BZ0FoRlFOQVFRQWhDQUpBSUJVZ0JrRUNkR29vQWdBaUNVVU5BQ0FKS0FJSVFRaEpEUUFnQ1NnQ0JDSVNLQUFBUWJmSXd1RitSdzBBSUJJb0FBUWhDQXNnQ0NBS1J3UkFJQVlnQjNGQkFXb2hCaUFJRFFFTEN5QUpSUTBBSUFVUUdDQUZRWDgyQXFEckFTQUZJQWsyQXBUckFTQUZJQVVvQXR6cEFTSUlOZ0tZNndFTUFRc2dCU2dDM09rQklRZ0xBa0FnQ0VVTkFDQUZLQUtZNndFZ0NFWU5BRUZnSVFrTUJnc0NRQ0FGS0FMZzZRRUVRQ0FGSUFVb0F1anFBU0lKUlRZQzdPb0JJQWtOQVNBRlF2bnEwTkRueWFIazRRQTNBNmpxQVNBRlFnQTNBNkRxQVNBRlFzL1cwNzdTeDZ2WlFqY0RtT29CSUFWQzF1dUM3dXI5aWZYZ0FEY0RrT29CSUFWQ0FEY0RpT29CSUNKQkFFRW9FQU1hREFFTElBVkJBRFlDN09vQkN5QUJJQjFxSVNVZ0JTQUZLUVBvNlFFZ0RxMThOd1BvNlFFZ0F5QU9heUVESUFJZ0Rtb2hBaUFkSVE0RFFDQUNJQU1nQkVFc2FoQWRJaFZCaUg5TEJFQWdGU0VKREFZTElBTkJBMnNpTlNBVlNRMEVJQUpCQTJvaEcwRnNJUWtDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FDQUVLQUlzRGdNQ0FRQVZDeUFWUWYvL0Iwc05FeUFWUVFOSkRSSWdCU2tEeU9rQklUOENRQUpBSUJzdEFBQWlDVUVEY1NJYVFRRnJEZ01HQVFBSEN5QUZLQUtBNmdFTkFFRmlJUWtNRlFzZ0ZVRUZTUTBTSUJzb0FBQWhBd0ovQWtBQ1FBSkFJQWxCQW5aQkEzRWlDVUVDYXc0Q0FRSUFDeUFKUVFCSElRY2dBMEVFZGtIL0IzRWhDMEVESVFZZ0EwRU9ka0gvQjNFTUFndEJCQ0VHSUFOQkJIWkIvLzhBY1NFTFFRRWhCeUFEUVJKMkRBRUxJQU5CQkhaQi8vOFBjU0lMUVlDQUNFc05FMEVCSVFkQkJTRUdJQUl0QUFkQkNuUWdBMEVXZG5JTElnZ2dCbW9pQ1NBVlN3MFNBa0FnQzBHQkJra05BQ0FGS0FLYzZ3RkZEUUJCQUNFREEwQWdBMEdEZ0FGTERRRWdBMEZBYXlFRERBQUxBQXNnQmlBYmFpRVBJQnBCQTBjTkJpQUZLQUlNSWdJdEFBRkJDSFFoQXlBSERRY2dBMFVOQ0NBRVFmQUFhaUFQSUFnUURTSURRWWgvU3cwSklBSkJCR29oQmlBTElCeHFJaEpCQTJzaENrRUFJQUl2QVFKclFSOXhJUWNnSENFREEwQWdCRUh3QUdvUUQwVWdBeUFLU1hFRVFDQURJQVlnQkNnQ2NDSUlJQVFvQW5RaUQzUWdCM1pCQW5ScUlnSXZBUUE3QUFBZ0F5QUNMUUFEYWlJRElBWWdDQ0FQSUFJdEFBSnFJZ2gwSUFkMlFRSjBhaUlDTHdFQU93QUFJQVFnQ0NBQ0xRQUNhallDZENBRElBSXRBQU5xSVFNTUFRVWdFa0VDYXlFSUEwQWdCRUh3QUdvUUR5RVBJQVFvQW5BaENpQUVLQUowSVFJZ0F5QUlTeUFQY2tVRVFDQURJQVlnQ2lBQ2RDQUhka0VDZEdvaUNpOEJBRHNBQUNBRUlBSWdDaTBBQW1vMkFuUWdBeUFLTFFBRGFpRUREQUVMQ3dOQUlBTWdDRTBFUUNBRElBWWdDaUFDZENBSGRrRUNkR29pRHk4QkFEc0FBQ0FESUE4dEFBTnFJUU1nQWlBUExRQUNhaUVDREFFTEN3SkFJQU1nRWs4TkFDQURJQVlnQ2lBQ2RDQUhka0VDZEdvaUF5MEFBRG9BQUNBRExRQURRUUZHQkVBZ0FpQURMUUFDYWlFQ0RBRUxJQUpCSDBzTkFFRWdJQUlnQXkwQUFtb2lBaUFDUVNCUEd5RUNDMEZzUVd3Z0N5QUVLQUo0SUFRb0FueEhHeUFDUVNCSEd5RUREQXNMQUFzQUN5QUVLQUkwSWdJZ0pTQU9hMHNOQ2lBT1JRUkFRUUFoQ1NBQ0RRSU1EZ3NnRGlBYkxRQUFJQUlRQXhvZ0FpRUpEQXdMSUJVZ0pTQU9hMHNOQ1NBT0RRRkJBQ0VKSUJWRkRRd0xRYlovSVFrTUVRc2dEaUFiSUJVUUFob2dGU0VKREFvTElCd2dHd0ovQWtBQ1FBSkFJQWxCQW5aQkEzRkJBV3NPQXdFQUFnQUxJQWxCQTNZaEEwRUJEQUlMSUJzdkFBQkJCSFloQTBFQ0RBRUxJQlZCQkVrTkRpQUNMd0FESUFJdEFBVkJFSFJ5SWdKQmo0Q0FBVXNORGlBQ1FRUjJJUU5CQXdzaUFtb3RBQUFnQTBFZ2FoQURJUWtnQlNBRE5nS0E2d0VnQlNBSk5nTHc2Z0VnQWtFQmFpRUpEQVVMSUJVQ2Z3SkFBa0FDUUNBSlFRSjJRUU54UVFGckRnTUJBQUlBQ3lBSlFRTjJJUU5CQVF3Q0N5QWJMd0FBUVFSMklRTkJBZ3dCQ3lBQ0x3QURJQUl0QUFWQkVIUnlRUVIySVFOQkF3c2lBaUFEYWlJSlFTQnFTUVJBSUFrZ0ZVc05EU0FjSUFJZ0cyb2dBeEFDSVFJZ0JTQUROZ0tBNndFZ0JTQUNOZ0x3NmdFZ0FpQURhaUlDUWdBM0FCZ2dBa0lBTndBUUlBSkNBRGNBQ0NBQ1FnQTNBQUFNQlFzZ0JTQUROZ0tBNndFZ0JTQUNJQnRxTmdMdzZnRU1CQXNnQjBVRVFDQWVJQThnQ0NBVUVCUWlBa0dJZjBzZ0FpQUlUM0lORENBY0lBc2dBaUFQYWlBSUlBSnJJQjRRRlNFRERBTUxJQXRGSUFoRmNnMExJQXRCQ0hZaUF5QUlJQXRKQkg4Z0NFRUVkQ0FMYmdWQkR3dEJHR3dpQWtHTUNHb29BZ0JzSUFKQmlBaHFLQUlBYWlJR1FRTjJJQVpxSUFKQmdBaHFLQUlBSUFKQmhBaHFLQUlBSUFOc2Fra0VRQ01BUVJCckloQWtBQ0FlS0FJQUlRTWdGRUh3QkdwQkFFSHNBQkFESVFaQlZDRUNBa0FnQTBIL0FYRWlERUVNU3cwQUFrQWdGRUhjQ1dvZ0JpQVFRUWhxSUJCQkRHb2dEeUFJSUJSQjNBdHFJaGNRQ3lJU1FZaC9TdzBBSUJBb0Fnd2lCaUFNU3cwQklCUkJxQVZxSVEwZ0ZFR2tCV29oTmlBZVFRUnFJUkVnQTBHQWdJQjRjU0UzSUFaQkFXb2lFeUVDSUFZaEF3TkFJQUlpQjBFQmF5RUNJQU1pQ2tFQmF5RURJQlFnQ2tFQ2RHb29BdkFFUlEwQUMwRUJJQWNnQjBFQlRSc2hGa0VBSVFkQkFTRUNBMEFnQWlBV1J3UkFJQlFnQWtFQ2RDSURhaWdDOEFRaEdDQURJQTFxSUFjMkFnQWdBa0VCYWlFQ0lBY2dHR29oQnd3QkN3c2dEU0FITmdJQVFRQWhBaUFRS0FJSUlRTURRQ0FDSUFOSEJFQWdEU0FDSUJScVFkd0phaTBBQUNJWVFRSjBhaUlaSUJrb0FnQWlHVUVCYWpZQ0FDQVVJQmxCQVhScUloa2dHRG9BM1FVZ0dTQUNPZ0RjQlNBQ1FRRnFJUUlNQVFzTFFRQWhBeUFOUVFBMkFnQWdEQ0FHUVg5emFpRUdRUUVoQWdOQUlBSWdGa2NFUUNBVUlBSkJBblJxSWcwZ0F6WUNBQ0FOS0FMd0JDQUNJQVpxZENBRGFpRURJQUpCQVdvaEFnd0JDd3NnRENBVElBcHJJZ1pyUVFGcUlRb2dCaUVEQTBBZ0F5QUtTUVJBSUJRZ0EwRTBiR29oRFVFQklRSURRQ0FDSUJaSEJFQWdEU0FDUVFKMEloaHFJQlFnR0dvb0FnQWdBM1kyQWdBZ0FrRUJhaUVDREFFTEN5QURRUUZxSVFNTUFRc0xJQmNnRkVFMEVBSWhPQ0FVUVpBTWFpRTVJQk1nREdzaE9pQVVRZHdGYWlFWFFRQWhDZ05BQWtBQ1FDQUhJQXBIQkVCQkFTQU1JQk1nRnlBS1FRRjBhaUlDTFFBQklnMXJJZ05ySWhoMElSa2dBaTBBQUNFV0lEZ2dEVUVDZEdvaUh5Z0NBQ0VDSUFZZ0dFMEVRQ0EyUVFFZ0F5QTZhaUlOSUExQkFVd2JJaUJCQW5RaUpHb29BZ0FoRFNBNUlCUWdBMEUwYkdwQk5CQUNJU0VnRFVFQmRDRW1JQkVnQWtFQ2RHb2hJeUFnUVFGTkRRSWdBMEVRZEVHQWdQd0hjU0FXY2tHQWdJQUljaUVnSUNFZ0pHb29BZ0FoSkVFQUlRSURRQ0FDSUNSR0RRTWdJeUFDUVFKMGFpQWdOZ0VBSUFKQkFXb2hBZ3dBQ3dBTElBSWdBaUFaYWlJTklBSWdEVXNiSVEwZ0EwRVFkRUdBZ1B3SGNTQVdja0dBZ0lBSWNpRURBMEFnQWlBTlJnMERJQkVnQWtFQ2RHb2dBellCQUNBQ1FRRnFJUUlNQUFzQUN5QWVJQXhCRUhRZ04zSWdESEpCZ0FKeU5nSUFEQU1MSUFjZ0RXc2hKQ0FYSUNacUlTWkJBQ0VOQTBBZ0RTQWtSZzBCUVFFZ0dDQVRJQ1lnRFVFQmRHb2lKeTBBQVNJQ2F5STdhM1FpUENBaElBSkJBblJxSWlBb0FnQWlBbW9oUFNBRElEdHFRUkIwUVlDQS9BZHhJQ2N0QUFCQkNIUnlJQlp5UVlDQWdCQnlJU2NEUUNBaklBSkJBblJxSUNjMkFRQWdBa0VCYWlJQ0lEMUpEUUFMSUNBZ0lDZ0NBQ0E4YWpZQ0FDQU5RUUZxSVEwTUFBc0FDeUFmSUI4b0FnQWdHV28yQWdBZ0NrRUJhaUVLREFBTEFBc2dFaUVDQ3lBUVFSQnFKQUFnQWtHSWYwc2dBaUFJVDNJTkRDQWNJQXNnQWlBUGFpQUlJQUpySUI0UUZpRUREQU1MSUI0Z0R5QUlJQlFRRkNJQ1FZaC9TeUFDSUFoUGNnMExJQndnQ3lBQ0lBOXFJQWdnQW1zZ0hoQVhJUU1NQWdzZ0F3UkFJQndnQ3lBUElBZ2dBaEFXSVFNTUFnc2dIQ0FMSUE4Z0NDQUNFQmNoQXd3QkN5QWNJQXNnRHlBSUlBSVFGU0VEQ3lBRFFZaC9TdzBJSUFVZ0N6WUNnT3NCSUFVZ0hEWUM4T29CSUFWQkFUWUNnT29CSUJwQkFrWUVRQ0FGSUI0MkFnd0xJQXNnSEdvaUFrSUFOd0FBSUFKQ0FEY0FHQ0FDUWdBM0FCQWdBa0lBTndBSUlBbEJpSDlMRFFvTElBa2dGVVlOQ0NBVklBbHJJUVlnQlNnQ25Pc0JJUW9DUUNBSklCdHFJZ010QUFBaUQwVUVRRUVCSVFKQkFDRVBRYmgvSVFrZ0JrRUJSZzBCREFzTEFuOGdBMEVCYWlBUHdDSUNRUUJPRFFBYUlBSkJmMFlFUUNBR1FRTklEUXNnQXk4QUFVR0EvZ0ZxSVE4Z0EwRURhZ3dCQ3lBR1FRSklEUW9nQXkwQUFTQVBRUWgwY2tHQWdBSnJJUThnQTBFQ2Fnc2hFa0c0ZnlFSklCSkJBV29pQWlBVklCdHFJZ2RMRFFvZ0xDQUZJQkl0QUFBaUVrRUdka0VqUVFrZ0FpQUhJQUpyUWNBUVFkQVJRZkFTSUFVb0FvVHFBU0FLSUE4Z0ZCQWhJZ2xCaUg5TERRZ2dLeUFvSUJKQkJIWkJBM0ZCSDBFSUlBSWdDV29pQWlBSElBSnJRWUFMUVlBTVFZQVhJQVVvQW9UcUFTQUZLQUtjNndFZ0R5QVVFQ0VpQ0VHSWYwc05DRUZzSVFrZ0tpQXRJQkpCQW5aQkEzRkJORUVKSUFJZ0NHb2lBaUFISUFKclFZQU5RZUFPUVpBWklBVW9Bb1RxQVNBRktBS2M2d0VnRHlBVUVDRWlCMEdJZjBzTkNpQUNJQWRxSUFOcklnSWhDU0FDUVloL1N3MEtDeUFPSUE5QkFFeHlEUUVMUWJwL0lRa01DQXNnSlNBT2F5RUpJQVlnQW1zaEJpQUNJQU5xSVFjQ1FBSkFBa0FnQ2tVRVFDQVBRUWxJSUFVcEE4anBBVUtCZ0lBSVZISU5BaUFvS0FJQUlnSkJDR29oRWlBQ0tBSUVJUXBCQUNFRFFRQWhBZ05BSUFNZ0NuWkZCRUFnQWlBU0lBTkJBM1JxTFFBQ1FSWkxhaUVDSUFOQkFXb2hBd3dCQ3dzZ0JVRUFOZ0tjNndFZ0FrRUlJQXByZEVFVVR3MEJEQU1MSUFWQkFEWUNuT3NCQ3lBRUlBVW9BdkRxQVNJRE5nTGNBU0FKSUE1cUlSWWdBeUFGS0FLQTZ3RnFJUmNDUUNBUFJRUkFJQTRoQnd3QkN5QUZLQUs0NlFFaEdpQUZLQUswNlFFaEdDQUZLQUt3NlFFaEVpQUZRUUUyQW9UcUFVRUFJUU1EUUNBRFFRTkhCRUFnQkNBRFFRSjBJZ0pxSUFJZ0JXcEJyTkFCYWlnQ0FEWUNaQ0FEUVFGcUlRTU1BUXNMUVd3aENTQUVRVGhxSWdJZ0J5QUdFQTFCaUg5TERRTkJDQ0FQSUE5QkNFNGJJUjhnTkNBQ0lBVW9BZ0FRSGlBeklBSWdCU2dDQ0JBZUlESWdBaUFGS0FJRUVCNGdEaUFTYXlFWlFRQWhDQU5BSUFSQk9Hb1FEMEVEUmlBSUlCOU9ja1VFUUNBRUtBSlFJQVFvQWt4QkEzUnFLUUlBSWtDbklnZEJFSFlpRVVIL0FYRWhDeUFFS0FKZ0lBUW9BbHhCQTNScUtRSUFJa0duSWd4QkVIWWlJVUgvQVhFaEVDQUVLQUpZSUFRb0FsUkJBM1JxS1FJQUlrSkNJSWluSVFZZ1FVSWdpQ0JBUWlDSXB5RURBa0FnUWtJUWlLY2lDa0gvQVhFaUFrRUNUd1JBQWtBZ0FrRVpTU0EvUW9HQWdCQlVja1VFUUNBRVFTQWdCQ2dDUENJS2F5SU5JQUlnQWlBTlN4c2lFeUFLYWpZQ1BDQUdJQVFvQWpnZ0NuUkJBQ0FUYTNZZ0FpQVRheUlUZEdvaENpQUVRVGhxRUE4YUlBSWdEVTBOQVNBRUlBUW9BandpQWlBVGFqWUNQQ0FFS0FJNElBSjBRUUFnRTJ0MklBcHFJUW9NQVFzZ0JDQUNJQVFvQWp3aURXbzJBandnQkNnQ09DQU5kRUVBSUFwcmRpQUdhaUVLSUFSQk9Hb1FEeG9MSUFRcEFtUWhSQ0FFSUFvMkFtUWdCQ0JFTndKb0RBRUxBa0FnQWtVRVFDQURCRUFnQkNnQ1pDRUtEQU1MSUFRb0FtZ2hDZ3dCQ3lBRUlBUW9BandpQWtFQmFqWUNQQUovSUFZZ0EwVnFJQVFvQWpnZ0FuUkJIM1pxSWdKQkEwWUVRQ0FFS0FKa1FRRnJEQUVMSUFKQkFuUWdCR29vQW1RTElnWkZJQVpxSVFvZ0FrRUJSd1JBSUFRZ0JDZ0NhRFlDYkFzTElBUWdCQ2dDWkRZQ2FDQUVJQW8yQW1RTHB5RUNJRUZDZ0lEOEI0TlFSUVJBSUFRZ0JDZ0NQQ0lHSUJCcU5nSThJQVFvQWpnZ0JuUkJBQ0FoYTNZZ0Ftb2hBZ3NnQ3lBUWFrRVVUd1JBSUFSQk9Hb1FEeG9MSUVCQ2dJRDhCNE5RUlFSQUlBUWdCQ2dDUENJR0lBdHFOZ0k4SUFRb0FqZ2dCblJCQUNBUmEzWWdBMm9oQXdzZ0JFRTRhaEFQR2lBRUlBUW9BamdpQmtFQUlBZEJHSFlpQ3lBRUtBSThhaUlRYTNZZ0MwRUNkRUdnSFdvb0FnQnhJQWRCLy84RGNXbzJBa3dnQkNBUUlBeEJHSFlpQjJvaUN6WUNQQ0FFSUFkQkFuUkJvQjFxS0FJQUlBWkJBQ0FMYTNaeElBeEIvLzhEY1dvMkFsd2dCRUU0YWhBUEdpQUVJRUtuSWdaQkdIWWlCeUFFS0FJOGFpSUxOZ0k4SUFRZ0IwRUNkRUdnSFdvb0FnQWdCQ2dDT0VFQUlBdHJkbkVnQmtILy93TnhhallDVkNBRVFmQUFhaUFJUVF4c2FpSUdJQW8yQWdnZ0JpQUNOZ0lFSUFZZ0F6WUNBQ0FJUVFGcUlRZ2dBeUFaYWlBQ2FpRVpEQUVMQ3lBSUlCOUlEUU1nRmtFZ2F5RWhJQTRoQndOQUlBUkJPR29RRDBFRFJpQUlJQTlPY2tVRVFDQUVLQUpRSUFRb0FreEJBM1JxS1FJQUlrQ25JZ1pCRUhZaUkwSC9BWEVoQ2lBRUtBSmdJQVFvQWx4QkEzUnFLUUlBSWtHbklnMUJFSFlpSUVIL0FYRWhFeUFFS0FKWUlBUW9BbFJCQTNScUtRSUFJa0pDSUlpbklRTWdRVUlnaUNCQVFpQ0lweUVMQWtBZ1FrSVFpS2NpREVIL0FYRWlBa0VDVHdSQUFrQWdBa0VaU1NBL1FvR0FnQkJVY2tVRVFDQUVRU0FnQkNnQ1BDSU1heUlSSUFJZ0FpQVJTeHNpRUNBTWFqWUNQQ0FESUFRb0FqZ2dESFJCQUNBUWEzWWdBaUFRYXlJTWRHb2hFQ0FFUVRocUVBOGFJQUlnRVUwTkFTQUVJQVFvQWp3aUFpQU1hallDUENBRUtBSTRJQUowUVFBZ0RHdDJJQkJxSVJBTUFRc2dCQ0FDSUFRb0Fqd2lFR28yQWp3Z0JDZ0NPQ0FRZEVFQUlBeHJkaUFEYWlFUUlBUkJPR29RRHhvTElBUXBBbVFoUkNBRUlCQTJBbVFnQkNCRU53Sm9EQUVMQWtBZ0FrVUVRQ0FMQkVBZ0JDZ0NaQ0VRREFNTElBUW9BbWdoRUF3QkN5QUVJQVFvQWp3aUFrRUJhallDUEFKL0lBTWdDMFZxSUFRb0FqZ2dBblJCSDNacUlnSkJBMFlFUUNBRUtBSmtRUUZyREFFTElBSkJBblFnQkdvb0FtUUxJZ05GSUFOcUlSQWdBa0VCUndSQUlBUWdCQ2dDYURZQ2JBc0xJQVFnQkNnQ1pEWUNhQ0FFSUJBMkFtUUxweUVNSUVGQ2dJRDhCNE5RUlFSQUlBUWdCQ2dDUENJQ0lCTnFOZ0k4SUFRb0FqZ2dBblJCQUNBZ2EzWWdER29oREFzZ0NpQVRha0VVVHdSQUlBUkJPR29RRHhvTElFQkNnSUQ4QjROUVJRUkFJQVFnQkNnQ1BDSUNJQXBxTmdJOElBUW9BamdnQW5SQkFDQWphM1lnQzJvaEN3c2dCRUU0YWhBUEdpQUVJQVFvQWpnaUFrRUFJQVpCR0hZaUF5QUVLQUk4YWlJS2EzWWdBMEVDZEVHZ0hXb29BZ0J4SUFaQi8vOERjV28yQWt3Z0JDQUtJQTFCR0hZaUEyb2lCallDUENBRUlBTkJBblJCb0IxcUtBSUFJQUpCQUNBR2EzWnhJQTFCLy84RGNXbzJBbHdnQkVFNGFoQVBHaUFFSUVLbklnSkJHSFlpQXlBRUtBSThhaUlHTmdJOElBUWdBMEVDZEVHZ0hXb29BZ0FnQkNnQ09FRUFJQVpyZG5FZ0FrSC8vd054YWpZQ1ZBSkFBa0FDUUNBRUtBTGNBU0lESUFSQjhBQnFJQWhCQjNGQkRHeHFJaE1vQWdBaUVXb2lJeUFYU3cwQUlBY2dFeWdDQkNJTklCRnFJZ3BxSUNGTERRQWdDa0VnYWlBV0lBZHJUUTBCQ3lBRUlCTW9BZ2cyQWhnZ0JDQVRLUUlBTndNUUlBY2dGaUFFUVJCcUlBUkIzQUZxSUJjZ0VpQVlJQm9RSHlFS0RBRUxJQWNnRVdvaEFpQVRLQUlJSVFZZ0J5QURLUUFBTndBQUlBY2dBeWtBQ0RjQUNBSkFJQkZCRVVrTkFDQUhJQU1wQUJBM0FCQWdCeUFES1FBWU53QVlJQkZCRUd0QkVVZ05BQ0FEUVJCcUlRTWdCMEVnYWlFUkEwQWdFU0FES1FBUU53QUFJQkVnQXlrQUdEY0FDQ0FSSUFNcEFDQTNBQkFnRVNBREtRQW9Od0FZSUFOQklHb2hBeUFSUVNCcUloRWdBa2tOQUFzTElBSWdCbXNoQXlBRUlDTTJBdHdCSUFJZ0Vtc2dCa2tFUUNBR0lBSWdHR3RMRFFjZ0dpQWFJQU1nRW1zaUEyb2lFU0FOYWs4RVFDQUNJQkVnRFJBS0dnd0NDeUFESUExcUlRMGdBaUFSUVFBZ0Eyc1FDaUFEYXlFQ0lCSWhBd3NnQmtFUVR3UkFJQUlnQXlrQUFEY0FBQ0FDSUFNcEFBZzNBQWdnRFVFUlNBMEJJQUlnRFdvaEJpQUNRUkJxSVFJRFFDQUNJQU1wQUJBM0FBQWdBaUFES1FBWU53QUlJQUlnQXlrQUlEY0FFQ0FDSUFNcEFDZzNBQmdnQTBFZ2FpRURJQUpCSUdvaUFpQUdTUTBBQ3d3QkN3SkFJQVpCQjAwRVFDQUNJQU10QUFBNkFBQWdBaUFETFFBQk9nQUJJQUlnQXkwQUFqb0FBaUFDSUFNdEFBTTZBQU1nQWlBRElBWkJBblFpQmtIQUhtb29BZ0JxSWdNb0FBQTJBQVFnQXlBR1FlQWVhaWdDQUdzaEF3d0JDeUFDSUFNcEFBQTNBQUFMSUExQkNVa05BQ0FDSUExcUlSRWdBa0VJYWlJR0lBTkJDR29pQTJ0QkQwd0VRQU5BSUFZZ0F5a0FBRGNBQUNBRFFRaHFJUU1nQmtFSWFpSUdJQkZKRFFBTUFnc0FDeUFHSUFNcEFBQTNBQUFnQmlBREtRQUlOd0FJSUExQkdVZ05BQ0FDUVJocUlRSURRQ0FDSUFNcEFCQTNBQUFnQWlBREtRQVlOd0FJSUFJZ0F5a0FJRGNBRUNBQ0lBTXBBQ2czQUJnZ0EwRWdhaUVESUFKQklHb2lBaUFSU1EwQUN3c2dDa0dJZjBzRVFDQUtJUWtNQmdVZ0V5QVFOZ0lJSUJNZ0REWUNCQ0FUSUFzMkFnQWdDRUVCYWlFSUlBY2dDbW9oQnlBTElCbHFJQXhxSVJrTUFnc0FDd3NnQ0NBUFNBMERJQWdnSDJzaEJnTkFBa0FnQmlBUFRnUkFRUUFoQXdOQUlBTkJBMFlOQWlBRklBTkJBblFpQW1wQnJOQUJhaUFDSUFScUtBSmtOZ0lBSUFOQkFXb2hBd3dBQ3dBTEFrQUNRQUpBSUFRb0F0d0JJZ01nQkVId0FHb2dCa0VIY1VFTWJHb2lDQ2dDQUNJTWFpSVFJQmRMRFFBZ0J5QUlLQUlFSWdzZ0RHb2lDbW9nSVVzTkFDQUtRU0JxSUJZZ0IydE5EUUVMSUFRZ0NDZ0NDRFlDS0NBRUlBZ3BBZ0EzQXlBZ0J5QVdJQVJCSUdvZ0JFSGNBV29nRnlBU0lCZ2dHaEFmSVFvTUFRc2dCeUFNYWlFQ0lBZ29BZ2doQ0NBSElBTXBBQUEzQUFBZ0J5QURLUUFJTndBSUFrQWdERUVSU1EwQUlBY2dBeWtBRURjQUVDQUhJQU1wQUJnM0FCZ2dERUVRYTBFUlNBMEFJQU5CRUdvaEF5QUhRU0JxSVF3RFFDQU1JQU1wQUJBM0FBQWdEQ0FES1FBWU53QUlJQXdnQXlrQUlEY0FFQ0FNSUFNcEFDZzNBQmdnQTBFZ2FpRURJQXhCSUdvaURDQUNTUTBBQ3dzZ0FpQUlheUVESUFRZ0VEWUMzQUVnQWlBU2F5QUlTUVJBSUFnZ0FpQVlhMHNOQnlBYUlCb2dBeUFTYXlJRGFpSU1JQXRxVHdSQUlBSWdEQ0FMRUFvYURBSUxJQU1nQzJvaEN5QUNJQXhCQUNBRGF4QUtJQU5ySVFJZ0VpRURDeUFJUVJCUEJFQWdBaUFES1FBQU53QUFJQUlnQXlrQUNEY0FDQ0FMUVJGSURRRWdBaUFMYWlFSUlBSkJFR29oQWdOQUlBSWdBeWtBRURjQUFDQUNJQU1wQUJnM0FBZ2dBaUFES1FBZ053QVFJQUlnQXlrQUtEY0FHQ0FEUVNCcUlRTWdBa0VnYWlJQ0lBaEpEUUFMREFFTEFrQWdDRUVIVFFSQUlBSWdBeTBBQURvQUFDQUNJQU10QUFFNkFBRWdBaUFETFFBQ09nQUNJQUlnQXkwQUF6b0FBeUFDSUFNZ0NFRUNkQ0lJUWNBZWFpZ0NBR29pQXlnQUFEWUFCQ0FESUFoQjRCNXFLQUlBYXlFRERBRUxJQUlnQXlrQUFEY0FBQXNnQzBFSlNRMEFJQUlnQzJvaERDQUNRUWhxSWdnZ0EwRUlhaUlEYTBFUFRBUkFBMEFnQ0NBREtRQUFOd0FBSUFOQkNHb2hBeUFJUVFocUlnZ2dERWtOQUF3Q0N3QUxJQWdnQXlrQUFEY0FBQ0FJSUFNcEFBZzNBQWdnQzBFWlNBMEFJQUpCR0dvaEFnTkFJQUlnQXlrQUVEY0FBQ0FDSUFNcEFCZzNBQWdnQWlBREtRQWdOd0FRSUFJZ0F5a0FLRGNBR0NBRFFTQnFJUU1nQWtFZ2FpSUNJQXhKRFFBTEN5QUtRWWgvU3dSQUlBb2hDUXdHQlNBR1FRRnFJUVlnQnlBS2FpRUhEQUlMQUFzTElBUW9BdHdCSVFNTFFicC9JUWtnRnlBRGF5SUNJQllnQjJ0TERRSWdCd1IvSUFjZ0F5QUNFQUlnQW1vRlFRQUxJQTVySVFrTUFnc2dCVUVBTmdLYzZ3RUxJQVFnQlNnQzhPb0JJZ00yQXR3QklBa2dEbW9oRENBRElBVW9Bb0RyQVdvaEVBSkFJQTlGQkVBZ0RpRUdEQUVMSUFVb0FyanBBU0VOSUFVb0FyVHBBU0VUSUFVb0FyRHBBU0VTSUFWQkFUWUNoT29CUVFBaEF3TkFJQU5CQTBjRVFDQUVJQU5CQW5RaUFtb2dBaUFGYWtHczBBRnFLQUlBTmdLY0FTQURRUUZxSVFNTUFRc0xRV3doQ1NBRVFmQUFhaUlDSUFjZ0JoQU5RWWgvU3cwQklERWdBaUFGS0FJQUVCNGdNQ0FDSUFVb0FnZ1FIaUF2SUFJZ0JTZ0NCQkFlSUF4QklHc2hHQ0FPSVFZRFFDQUVLQUtJQVNBRUtBS0VBVUVEZEdvcEFnQWlRS2NpQ2tFUWRpSVpRZjhCY1NFTElBUW9BcGdCSUFRb0FwUUJRUU4wYWlrQ0FDSkJweUlXUVJCMkloOUIvd0Z4SVJvZ0JDZ0NrQUVnQkNnQ2pBRkJBM1JxS1FJQUlrSkNJSWluSVFjZ1FVSWdpQ0JBUWlDSXB5RURBa0FnUWtJUWlLY2lDRUgvQVhFaUFrRUNUd1JBQWtBZ0FrRVpTU0EvUW9HQWdCQlVja1VFUUNBRVFTQWdCQ2dDZENJSWF5SVJJQUlnQWlBUlN4c2lGeUFJYWpZQ2RDQUhJQVFvQW5BZ0NIUkJBQ0FYYTNZZ0FpQVhheUlYZEdvaENDQUVRZkFBYWhBUEdpQUNJQkZORFFFZ0JDQUVLQUowSWdJZ0YybzJBblFnQkNnQ2NDQUNkRUVBSUJkcmRpQUlhaUVJREFFTElBUWdBaUFFS0FKMEloRnFOZ0owSUFRb0FuQWdFWFJCQUNBSWEzWWdCMm9oQ0NBRVFmQUFhaEFQR2dzZ0JDa0NuQUVoUkNBRUlBZzJBcHdCSUFRZ1JEY0NvQUVNQVFzQ1FDQUNSUVJBSUFNRVFDQUVLQUtjQVNFSURBTUxJQVFvQXFBQklRZ01BUXNnQkNBRUtBSjBJZ0pCQVdvMkFuUUNmeUFISUFORmFpQUVLQUp3SUFKMFFSOTJhaUlDUVFOR0JFQWdCQ2dDbkFGQkFXc01BUXNnQWtFQ2RDQUVhaWdDbkFFTElnZEZJQWRxSVFnZ0FrRUJSd1JBSUFRZ0JDZ0NvQUUyQXFRQkN3c2dCQ0FFS0FLY0FUWUNvQUVnQkNBSU5nS2NBUXVuSVFJZ1FVS0FnUHdIZzFCRkJFQWdCQ0FFS0FKMElnY2dHbW8yQW5RZ0JDZ0NjQ0FIZEVFQUlCOXJkaUFDYWlFQ0N5QUxJQnBxUVJSUEJFQWdCRUh3QUdvUUR4b0xJRUJDZ0lEOEI0TlFSUVJBSUFRZ0JDZ0NkQ0lISUF0cU5nSjBJQVFvQW5BZ0IzUkJBQ0FaYTNZZ0Eyb2hBd3NnQkVId0FHb1FEeG9nQkNBRUtBSndJZ2RCQUNBS1FSaDJJZ3NnQkNnQ2RHb2lHbXQySUF0QkFuUkJvQjFxS0FJQWNTQUtRZi8vQTNGcU5nS0VBU0FFSUJvZ0ZrRVlkaUlLYWlJTE5nSjBJQVFnQ2tFQ2RFR2dIV29vQWdBZ0IwRUFJQXRyZG5FZ0ZrSC8vd054YWpZQ2xBRWdCRUh3QUdvUUR4b2dCQ0JDcHlJSFFSaDJJZ29nQkNnQ2RHb2lDellDZENBRUlBcEJBblJCb0IxcUtBSUFJQVFvQW5CQkFDQUxhM1p4SUFkQi8vOERjV28yQW93QklBUWdBellDT0NBRUlBSTJBandnQkNBSU5nSkFBa0FDUUFKQUlBUW9BdHdCSWdzZ0Eyb2lGaUFRU3cwQUlBWWdBaUFEYWlJS2FpQVlTdzBBSUFwQklHb2dEQ0FHYTAwTkFRc2dCQ0FFUVVCcktBSUFOZ0lJSUFRZ0JDa0RPRGNEQUNBR0lBd2dCQ0FFUWR3QmFpQVFJQklnRXlBTkVCOGhDZ3dCQ3lBRElBWnFJUWNnQmlBTEtRQUFOd0FBSUFZZ0N5a0FDRGNBQ0FKQUlBTkJFVWtOQUNBR0lBc3BBQkEzQUJBZ0JpQUxLUUFZTndBWUlBTkJFR3RCRVVnTkFDQUxRUkJxSVFNZ0JrRWdhaUVMQTBBZ0N5QURLUUFRTndBQUlBc2dBeWtBR0RjQUNDQUxJQU1wQUNBM0FCQWdDeUFES1FBb053QVlJQU5CSUdvaEF5QUxRU0JxSWdzZ0Iwa05BQXNMSUFjZ0NHc2hBeUFFSUJZMkF0d0JJQWNnRW1zZ0NFa0VRQ0FJSUFjZ0UydExEUVFnRFNBTklBTWdFbXNpQTJvaUN5QUNhazhFUUNBSElBc2dBaEFLR2d3Q0N5QUhJQXRCQUNBRGF4QUtJQVFnQWlBRGFpSUNOZ0k4SUFOcklRY2dFaUVEQ3lBSVFSQlBCRUFnQnlBREtRQUFOd0FBSUFjZ0F5a0FDRGNBQ0NBQ1FSRklEUUVnQWlBSGFpRUlJQWRCRUdvaEFnTkFJQUlnQXlrQUVEY0FBQ0FDSUFNcEFCZzNBQWdnQWlBREtRQWdOd0FRSUFJZ0F5a0FLRGNBR0NBRFFTQnFJUU1nQWtFZ2FpSUNJQWhKRFFBTERBRUxBa0FnQ0VFSFRRUkFJQWNnQXkwQUFEb0FBQ0FISUFNdEFBRTZBQUVnQnlBRExRQUNPZ0FDSUFjZ0F5MEFBem9BQXlBSElBTWdDRUVDZENJSVFjQWVhaWdDQUdvaUF5Z0FBRFlBQkNBRElBaEI0QjVxS0FJQWF5RUREQUVMSUFjZ0F5a0FBRGNBQUFzZ0FrRUpTUTBBSUFJZ0Iyb2hDeUFIUVFocUlnZ2dBMEVJYWlJRGEwRVBUQVJBQTBBZ0NDQURLUUFBTndBQUlBTkJDR29oQXlBSVFRaHFJZ2dnQzBrTkFBd0NDd0FMSUFnZ0F5a0FBRGNBQUNBSUlBTXBBQWczQUFnZ0FrRVpTQTBBSUFkQkdHb2hBZ05BSUFJZ0F5a0FFRGNBQUNBQ0lBTXBBQmczQUFnZ0FpQURLUUFnTndBUUlBSWdBeWtBS0RjQUdDQURRU0JxSVFNZ0FrRWdhaUlDSUF0SkRRQUxDeUFLUVloL1N3UkFJQW9oQ1F3REN5QUdJQXBxSVFZZ0JFSHdBR29RRHlFRElBOUJBV3NpRHcwQUMwRUFJUUlnQTBFQ1NRMEJBMEFnQWtFRFJ3UkFJQVVnQWtFQ2RDSURha0dzMEFGcUlBTWdCR29vQXB3Qk5nSUFJQUpCQVdvaEFnd0JDd3NnQkNnQzNBRWhBd3RCdW44aENTQVFJQU5ySWdJZ0RDQUdhMHNOQUNBR0JIOGdCaUFESUFJUUFpQUNhZ1ZCQUFzZ0Rtc2hDUXNnQ1VHSWYwc05CZ3NDUUNBRktBTHM2Z0ZGRFFBZ0JTQUZLUU9JNmdFZ0NhMThOd09JNmdFQ1FDQUZLQUxRNmdFaUFpQUphaUlJUVI5TkJFQWdEa1VOQVNBQ0lDSnFJQTRnQ1JBQ0dpQUZLQUxRNmdFZ0NXb2hDQXdCQ3lBT0lRTWdBZ1JBSUFJZ0ltb2dBMEVnSUFKckVBSWFJQVVvQXREcUFTRUNJQVZCQURZQzBPb0JJQVVnQlNrRGtPb0JJQVVwQUxEcUFVTFAxdE8rMHNlcjJVSitmRUlmaVVLSGxhK3ZtTGJlbTU1L2ZqY0RrT29CSUFVZ0JTa0RtT29CSUFVcEFManFBVUxQMXRPKzBzZXIyVUorZkVJZmlVS0hsYSt2bUxiZW01NS9mamNEbU9vQklBVWdCU2tEb09vQklBVXBBTURxQVVMUDF0Tyswc2VyMlVKK2ZFSWZpVUtIbGErdm1MYmVtNTUvZmpjRG9Pb0JJQVVnQlNrRHFPb0JJQVVwQU1qcUFVTFAxdE8rMHNlcjJVSitmRUlmaVVLSGxhK3ZtTGJlbTU1L2ZqY0RxT29CSUFNZ0FtdEJJR29oQXdzZ0NTQU9haUlDSUFOQklHcFBCRUFnQWtFZ2F5RUdJQVVwQTZqcUFTRS9JQVVwQTZEcUFTRkFJQVVwQTVqcUFTRkJJQVVwQTVEcUFTRkNBMEFnQXlrQUdFTFAxdE8rMHNlcjJVSitJRDk4UWgrSlFvZVZyNitZdHQ2Ym5uOStJVDhnQXlrQUVFTFAxdE8rMHNlcjJVSitJRUI4UWgrSlFvZVZyNitZdHQ2Ym5uOStJVUFnQXlrQUNFTFAxdE8rMHNlcjJVSitJRUY4UWgrSlFvZVZyNitZdHQ2Ym5uOStJVUVnQXlrQUFFTFAxdE8rMHNlcjJVSitJRUo4UWgrSlFvZVZyNitZdHQ2Ym5uOStJVUlnQTBFZ2FpSURJQVpORFFBTElBVWdQemNEcU9vQklBVWdRRGNEb09vQklBVWdRVGNEbU9vQklBVWdRamNEa09vQkN5QUNJQU5ORFFFZ0lpQURJQUlnQTJzaUNCQUNHZ3NnQlNBSU5nTFE2Z0VMSURVZ0ZXc2hBeUFWSUJ0cUlRSWdDU0FPYWlFT0lBUW9BakJGRFFBTElDa3BBd0FpUDBKL1VTQS9JQTRnSFd1c1VYSkZCRUJCYkNFSkRBWUxJQVVvQXVEcEFRUkFRV29oQ1NBRFFRUkpEUVlnQlNnQzZPb0JSUVJBSUNJZ0JTZ0MwT29CYWlFS0FuNGdCU2tEaU9vQklqOUNJRm9FUUNBRktRT1k2Z0VpUUVJSGlTQUZLUU9RNmdFaVFVSUJpWHdnQlNrRG9Pb0JJa0pDRElsOElBVXBBNmpxQVNKRFFoS0pmQ0JCUXMvVzA3N1N4NnZaUW41Q0g0bENoNVd2cjVpMjNwdWVmMzZGUW9lVnI2K1l0dDZibm45K1FwMmp0ZXFEc1kySytnQjlJRUJDejliVHZ0TEhxOWxDZmtJZmlVS0hsYSt2bUxiZW01NS9mb1ZDaDVXdnI1aTIzcHVlZjM1Q25hTzE2b094allyNkFIMGdRa0xQMXRPKzBzZXIyVUorUWgrSlFvZVZyNitZdHQ2Ym5uOStoVUtIbGErdm1MYmVtNTUvZmtLZG83WHFnN0dOaXZvQWZTQkRRcy9XMDc3U3g2dlpRbjVDSDRsQ2g1V3ZyNWkyM3B1ZWYzNkZRb2VWcjYrWXR0NmJubjkrUXAyanRlcURzWTJLK2dCOURBRUxJQVVwQTZEcUFVTEZ6OW15OGVXNjZpZDhDeUEvZkNFL0lDSWhCZ05BSUFvZ0JrRUlhaUlIVHdSQUlBWXBBQUJDejliVHZ0TEhxOWxDZmtJZmlVS0hsYSt2bUxiZW01NS9maUEvaFVJYmlVS0hsYSt2bUxiZW01NS9ma0tkbzdYcWc3R05pdm9BZlNFL0lBY2hCZ3dCQ3dzQ1FDQUtJQVpCQkdvaUNFa0VRQ0FHSVFnTUFRc2dCalVBQUVLSGxhK3ZtTGJlbTU1L2ZpQS9oVUlYaVVMUDF0Tyswc2VyMlVKK1F2bnozZkdaOXBtckZud2hQd3NEUUNBSUlBcEpCRUFnQ0RFQUFFTEZ6OW15OGVXNjZpZCtJRCtGUWd1SlFvZVZyNitZdHQ2Ym5uOStJVDhnQ0VFQmFpRUlEQUVMQ3lBQ0tBQUFJRDlDSVlnZ1A0VkN6OWJUdnRMSHE5bENmaUkvUWgySUlEK0ZRdm56M2ZHWjlwbXJGbjRpUDBJZ2lDQS9oYWRIRFFjTElBTkJCR3NoQXlBQ1FRUnFJUUlMSUE0Z0hXc2lDVUdKZjA4TkJDQUJJQWxySVFFZ0NTQWRhaUVkUVFFaFBnd0JDd3RCdUg4aEJ5QUREUVFnSFNBQWF5RUhEQVFMUVd3aENRd0JDMEc0ZnlFSkMwRzRmeUVISUFsQmRrWWdQbkVOQVFzZ0NTRUhDeWdDQUEwQUlBVkIvT29CYWlnQ0FDRUJJQVZCK09vQmFpZ0NBQ0VBSUFVUUdDQUZLQUt3NndFZ0FDQUJFQk1nQlVFQU5nS3c2d0VnQlNnQ3BPc0JJZ0lFUUFKQUFrQUNRQUpBSUFJb0FnQWlBd1JBSUFCRkRRSWdBU0FESUFBUkFnQU1BUXNnQUVVTkFnc2dBU0FDSUFBUkFnQU1BZ3NnQXhBR0N5QUNFQVlMSUFWQkFEWUNwT3NCQ3lBQUJFQWdBU0FGSUFBUkFnQU1BUXNnQlJBR0N5QUVRZUFCYWlRQUlBY0xDNmdWQ1FCQmlBZ0xEUUVBQUFBQkFBQUFBZ0FBQUFJQVFhQUlDN01HQVFBQUFBRUFBQUFDQUFBQUFnQUFBQ1lBQUFDQ0FBQUFJUVVBQUVvQUFBQm5DQUFBSmdBQUFNQUJBQUNBQUFBQVNRVUFBRW9BQUFDK0NBQUFLUUFBQUN3Q0FBQ0FBQUFBU1FVQUFFb0FBQUMrQ0FBQUx3QUFBTW9DQUFDQUFBQUFpZ1VBQUVvQUFBQ0VDUUFBTlFBQUFITURBQUNBQUFBQW5RVUFBRW9BQUFDZ0NRQUFQUUFBQUlFREFBQ0FBQUFBNndVQUFFc0FBQUErQ2dBQVJBQUFBSjREQUFDQUFBQUFUUVlBQUVzQUFBQ3FDZ0FBU3dBQUFMTURBQUNBQUFBQXdRWUFBRTBBQUFBZkRRQUFUUUFBQUZNRUFBQ0FBQUFBSXdnQUFGRUFBQUNtRHdBQVZBQUFBSmtFQUFDQUFBQUFTd2tBQUZjQUFBQ3hFZ0FBV0FBQUFOb0VBQUNBQUFBQWJ3a0FBRjBBQUFBakZBQUFWQUFBQUVVRkFBQ0FBQUFBVkFvQUFHb0FBQUNNRkFBQWFnQUFBSzhGQUFDQUFBQUFkZ2tBQUh3QUFBQk9FQUFBZkFBQUFOSUNBQUNBQUFBQVl3Y0FBSkVBQUFDUUJ3QUFrZ0FBQUFBQUFBQUJBQUFBQVFBQUFBVUFBQUFOQUFBQUhRQUFBRDBBQUFCOUFBQUEvUUFBQVAwQkFBRDlBd0FBL1FjQUFQMFBBQUQ5SHdBQS9UOEFBUDEvQUFEOS93QUEvZjhCQVAzL0F3RDkvd2NBL2Y4UEFQMy9Id0Q5L3o4QS9mOS9BUDMvL3dEOS8vOEIvZi8vQS8zLy93ZjkvLzhQL2YvL0gvMy8vei85Ly85L0FBQUFBQUVBQUFBQ0FBQUFBd0FBQUFRQUFBQUZBQUFBQmdBQUFBY0FBQUFJQUFBQUNRQUFBQW9BQUFBTEFBQUFEQUFBQUEwQUFBQU9BQUFBRHdBQUFCQUFBQUFSQUFBQUVnQUFBQk1BQUFBVUFBQUFGUUFBQUJZQUFBQVhBQUFBR0FBQUFCa0FBQUFhQUFBQUd3QUFBQndBQUFBZEFBQUFIZ0FBQUI4QUFBQURBQUFBQkFBQUFBVUFBQUFHQUFBQUJ3QUFBQWdBQUFBSkFBQUFDZ0FBQUFzQUFBQU1BQUFBRFFBQUFBNEFBQUFQQUFBQUVBQUFBQkVBQUFBU0FBQUFFd0FBQUJRQUFBQVZBQUFBRmdBQUFCY0FBQUFZQUFBQUdRQUFBQm9BQUFBYkFBQUFIQUFBQUIwQUFBQWVBQUFBSHdBQUFDQUFBQUFoQUFBQUlnQUFBQ01BQUFBbEFBQUFKd0FBQUNrQUFBQXJBQUFBTHdBQUFETUFBQUE3QUFBQVF3QUFBRk1BQUFCakFBQUFnd0FBQUFNQkFBQURBZ0FBQXdRQUFBTUlBQUFERUFBQUF5QUFBQU5BQUFBRGdBQUFBd0FCQUVIZ0R3dFJBUUFBQUFFQUFBQUJBQUFBQVFBQUFBSUFBQUFDQUFBQUF3QUFBQU1BQUFBRUFBQUFCQUFBQUFVQUFBQUhBQUFBQ0FBQUFBa0FBQUFLQUFBQUN3QUFBQXdBQUFBTkFBQUFEZ0FBQUE4QUFBQVFBRUhFRUF1TEFRRUFBQUFDQUFBQUF3QUFBQVFBQUFBRkFBQUFCZ0FBQUFjQUFBQUlBQUFBQ1FBQUFBb0FBQUFMQUFBQURBQUFBQTBBQUFBT0FBQUFEd0FBQUJBQUFBQVNBQUFBRkFBQUFCWUFBQUFZQUFBQUhBQUFBQ0FBQUFBb0FBQUFNQUFBQUVBQUFBQ0FBQUFBQUFFQUFBQUNBQUFBQkFBQUFBZ0FBQUFRQUFBQUlBQUFBRUFBQUFDQUFBQUFBQUVBUVpBU0MrWUVBUUFBQUFFQUFBQUJBQUFBQVFBQUFBSUFBQUFDQUFBQUF3QUFBQU1BQUFBRUFBQUFCZ0FBQUFjQUFBQUlBQUFBQ1FBQUFBb0FBQUFMQUFBQURBQUFBQTBBQUFBT0FBQUFEd0FBQUJBQUFBQUJBQUFBQkFBQUFBZ0FBQUFBQUFBQUFRQUJBUVlBQUFBQUFBQUVBQUFBQUJBQUFBUUFBQUFBSUFBQUJRRUFBQUFBQUFBRkF3QUFBQUFBQUFVRUFBQUFBQUFBQlFZQUFBQUFBQUFGQndBQUFBQUFBQVVKQUFBQUFBQUFCUW9BQUFBQUFBQUZEQUFBQUFBQUFBWU9BQUFBQUFBQkJSQUFBQUFBQUFFRkZBQUFBQUFBQVFVV0FBQUFBQUFDQlJ3QUFBQUFBQU1GSUFBQUFBQUFCQVV3QUFBQUlBQUdCVUFBQUFBQUFBY0ZnQUFBQUFBQUNBWUFBUUFBQUFBS0JnQUVBQUFBQUF3R0FCQUFBQ0FBQUFRQUFBQUFBQUFBQkFFQUFBQUFBQUFGQWdBQUFDQUFBQVVFQUFBQUFBQUFCUVVBQUFBZ0FBQUZCd0FBQUFBQUFBVUlBQUFBSUFBQUJRb0FBQUFBQUFBRkN3QUFBQUFBQUFZTkFBQUFJQUFCQlJBQUFBQUFBQUVGRWdBQUFDQUFBUVVXQUFBQUFBQUNCUmdBQUFBZ0FBTUZJQUFBQUFBQUF3VW9BQUFBQUFBR0JFQUFBQUFRQUFZRVFBQUFBQ0FBQndXQUFBQUFBQUFKQmdBQ0FBQUFBQXNHQUFnQUFEQUFBQVFBQUFBQUVBQUFCQUVBQUFBZ0FBQUZBZ0FBQUNBQUFBVURBQUFBSUFBQUJRVUFBQUFnQUFBRkJnQUFBQ0FBQUFVSUFBQUFJQUFBQlFrQUFBQWdBQUFGQ3dBQUFDQUFBQVVNQUFBQUFBQUFCZzhBQUFBZ0FBRUZFZ0FBQUNBQUFRVVVBQUFBSUFBQ0JSZ0FBQUFnQUFJRkhBQUFBQ0FBQXdVb0FBQUFJQUFFQlRBQUFBQUFBQkFHQUFBQkFBQUFEd1lBZ0FBQUFBQU9CZ0JBQUFBQUFBMEdBQ0FBUVlBWEM0Y0NBUUFCQVFVQUFBQUFBQUFGQUFBQUFBQUFCZ1E5QUFBQUFBQUpCZjBCQUFBQUFBOEYvWDhBQUFBQUZRWDkveDhBQUFBREJRVUFBQUFBQUFjRWZRQUFBQUFBREFYOUR3QUFBQUFTQmYzL0F3QUFBQmNGL2Y5L0FBQUFCUVVkQUFBQUFBQUlCUDBBQUFBQUFBNEYvVDhBQUFBQUZBWDkvdzhBQUFBQ0JRRUFBQUFRQUFjRWZRQUFBQUFBQ3dYOUJ3QUFBQUFSQmYzL0FRQUFBQllGL2Y4L0FBQUFCQVVOQUFBQUVBQUlCUDBBQUFBQUFBMEYvUjhBQUFBQUV3WDkvd2NBQUFBQkJRRUFBQUFRQUFZRVBRQUFBQUFBQ2dYOUF3QUFBQUFRQmYzL0FBQUFBQndGL2YvL0R3QUFHd1g5Ly84SEFBQWFCZjMvL3dNQUFCa0YvZi8vQVFBQUdBWDkvLzhBUVpBWkM0WUVBUUFCQVFZQUFBQUFBQUFHQXdBQUFBQUFBQVFFQUFBQUlBQUFCUVVBQUFBQUFBQUZCZ0FBQUFBQUFBVUlBQUFBQUFBQUJRa0FBQUFBQUFBRkN3QUFBQUFBQUFZTkFBQUFBQUFBQmhBQUFBQUFBQUFHRXdBQUFBQUFBQVlXQUFBQUFBQUFCaGtBQUFBQUFBQUdIQUFBQUFBQUFBWWZBQUFBQUFBQUJpSUFBQUFBQUFFR0pRQUFBQUFBQVFZcEFBQUFBQUFDQmk4QUFBQUFBQU1HT3dBQUFBQUFCQVpUQUFBQUFBQUhCb01BQUFBQUFBa0dBd0lBQUJBQUFBUUVBQUFBQUFBQUJBVUFBQUFnQUFBRkJnQUFBQUFBQUFVSEFBQUFJQUFBQlFrQUFBQUFBQUFGQ2dBQUFBQUFBQVlNQUFBQUFBQUFCZzhBQUFBQUFBQUdFZ0FBQUFBQUFBWVZBQUFBQUFBQUJoZ0FBQUFBQUFBR0d3QUFBQUFBQUFZZUFBQUFBQUFBQmlFQUFBQUFBQUVHSXdBQUFBQUFBUVluQUFBQUFBQUNCaXNBQUFBQUFBTUdNd0FBQUFBQUJBWkRBQUFBQUFBRkJtTUFBQUFBQUFnR0F3RUFBQ0FBQUFRRUFBQUFNQUFBQkFRQUFBQVFBQUFFQlFBQUFDQUFBQVVIQUFBQUlBQUFCUWdBQUFBZ0FBQUZDZ0FBQUNBQUFBVUxBQUFBQUFBQUJnNEFBQUFBQUFBR0VRQUFBQUFBQUFZVUFBQUFBQUFBQmhjQUFBQUFBQUFHR2dBQUFBQUFBQVlkQUFBQUFBQUFCaUFBQUFBQUFCQUdBd0FCQUFBQUR3WURnQUFBQUFBT0JnTkFBQUFBQUEwR0F5QUFBQUFBREFZREVBQUFBQUFMQmdNSUFBQUFBQW9HQXdRQVFhUWRDOWtCQVFBQUFBTUFBQUFIQUFBQUR3QUFBQjhBQUFBL0FBQUFmd0FBQVA4QUFBRC9BUUFBL3dNQUFQOEhBQUQvRHdBQS94OEFBUDgvQUFEL2Z3QUEvLzhBQVAvL0FRRC8vd01BLy84SEFQLy9Ed0QvL3g4QS8vOC9BUC8vZndELy8vOEEvLy8vQWYvLy93UC8vLzhILy8vL0QvLy8veC8vLy84Ly8vLy9md0FBQUFBQkFBQUFBZ0FBQUFRQUFBQUFBQUFBQWdBQUFBUUFBQUFJQUFBQUFBQUFBQUVBQUFBQ0FBQUFBUUFBQUFRQUFBQUVBQUFBQkFBQUFBUUFBQUFJQUFBQUNBQUFBQWdBQUFBSEFBQUFDQUFBQUFrQUFBQUtBQUFBQ3dCQmdCOExBNEFSQVE9PSI7dmFyIHNlPW5ldyBKQSxDZT0hMTthc3luYyBmdW5jdGlvbiBfSShBLHQsZSl7bGV0IEk9bnVsbDt0eXBlb2YgQSE9InN0cmluZyI/ST1BLmhyZWY6QS5zdGFydHNXaXRoKCJodHRwIik/ST1BOkk9YCR7dH0vJHtBfWAsSS5lbmRzV2l0aCgiLmpzIikmJihJPUkuc3Vic3RyaW5nKDAsSS5sZW5ndGgtMykpLEkuZW5kc1dpdGgoIi53YXNtIikmJihJPUkuc3Vic3RyaW5nKDAsSS5sZW5ndGgtNSkpO2xldCByPWAke0l9Lndhc21gLG89YXdhaXQgTEEuZ2V0KGAke3J9LnpzdGAse3Jlc3BvbnNlVHlwZToiYXJyYXlidWZmZXIiLHBhcmFtczplfSk7Q2V8fChhd2FpdCBzZS5pbml0KCksQ2U9ITApO2xldCBDPXNlLmRlY29kZShuZXcgVWludDhBcnJheShvLmRhdGEpKS5idWZmZXI7cmV0dXJuKGF3YWl0IGltcG9ydChgJHtJfS5qc2ApKS5kZWZhdWx0KHt3YXNtQmluYXJ5OkN9KX12YXIgQmU9X0k7dmFyIGJBPW5ldyBNYXA7YXN5bmMgZnVuY3Rpb24gWEkoQSx0LGUpe2xldCBJPUEscj1BLG89bnVsbDtyZXR1cm4gdHlwZW9mIEEhPSJzdHJpbmciJiYoST1uZXcgVVJMKEEuaHJlZikscj1JLmhyZWYpLGJBLmhhcyhyKT9vPWF3YWl0IGJBLmdldChyKTooYkEuc2V0KHIsQmUoSSx0LGUpKSxvPWF3YWl0IGJBLmdldChyKSksb312YXIgYWU9WEk7dmFyIHpJPXtUZXh0RmlsZToiVGV4dEZpbGUiLEJpbmFyeUZpbGU6IkJpbmFyeUZpbGUiLFRleHRTdHJlYW06IlRleHRTdHJlYW0iLEJpbmFyeVN0cmVhbToiQmluYXJ5U3RyZWFtIixJbWFnZToiSW1hZ2UiLFBvaW50U2V0OiJQb2ludFNldCIsTWVzaDoiTWVzaCIsUG9seURhdGE6IlBvbHlEYXRhIixUcmFuc2Zvcm1MaXN0OiJUcmFuc2Zvcm1MaXN0IixKc29uQ29tcGF0aWJsZToiSnNvbkNvbXBhdGlibGUifSxoPXpJO3ZhciB2ST17SW50ODoiaW50OCIsVUludDg6InVpbnQ4IixJbnQxNjoiaW50MTYiLFVJbnQxNjoidWludDE2IixJbnQzMjoiaW50MzIiLFVJbnQzMjoidWludDMyIixJbnQ2NDoiaW50NjQiLFVJbnQ2NDoidWludDY0IixTaXplVmFsdWVUeXBlOiJ1aW50NjQiLElkZW50aWZpZXJUeXBlOiJ1aW50NjQiLEluZGV4VmFsdWVUeXBlOiJpbnQ2NCIsT2Zmc2V0VmFsdWVUeXBlOiJpbnQ2NCJ9LFI9dkk7dmFyICRJPXtGbG9hdDMyOiJmbG9hdDMyIixGbG9hdDY0OiJmbG9hdDY0IixTcGFjZVByZWNpc2lvblR5cGU6ImZsb2F0NjQifSx6PSRJO2Z1bmN0aW9uIEFyKEEsdCl7bGV0IGU9bnVsbDtzd2l0Y2goQSl7Y2FzZSBSLlVJbnQ4OntlPW5ldyBVaW50OEFycmF5KHQpO2JyZWFrfWNhc2UgUi5JbnQ4OntlPW5ldyBJbnQ4QXJyYXkodCk7YnJlYWt9Y2FzZSBSLlVJbnQxNjp7ZT1uZXcgVWludDE2QXJyYXkodCk7YnJlYWt9Y2FzZSBSLkludDE2OntlPW5ldyBJbnQxNkFycmF5KHQpO2JyZWFrfWNhc2UgUi5VSW50MzI6e2U9bmV3IFVpbnQzMkFycmF5KHQpO2JyZWFrfWNhc2UgUi5JbnQzMjp7ZT1uZXcgSW50MzJBcnJheSh0KTticmVha31jYXNlIFIuVUludDY0Ont0eXBlb2YgZ2xvYmFsVGhpcy5CaWdVaW50NjRBcnJheT09ImZ1bmN0aW9uIj9lPW5ldyBCaWdVaW50NjRBcnJheSh0KTplPW5ldyBVaW50OEFycmF5KHQpO2JyZWFrfWNhc2UgUi5JbnQ2NDp7dHlwZW9mIGdsb2JhbFRoaXMuQmlnSW50NjRBcnJheT09ImZ1bmN0aW9uIj9lPW5ldyBCaWdJbnQ2NEFycmF5KHQpOmU9bmV3IFVpbnQ4QXJyYXkodCk7YnJlYWt9Y2FzZSB6LkZsb2F0MzI6e2U9bmV3IEZsb2F0MzJBcnJheSh0KTticmVha31jYXNlIHouRmxvYXQ2NDp7ZT1uZXcgRmxvYXQ2NEFycmF5KHQpO2JyZWFrfWNhc2UibnVsbCI6e2U9bnVsbDticmVha31jYXNlIG51bGw6e2U9bnVsbDticmVha31kZWZhdWx0OnRocm93IG5ldyBFcnJvcigiVHlwZSBpcyBub3Qgc3VwcG9ydGVkIGFzIGEgVHlwZWRBcnJheSIpfXJldHVybiBlfXZhciBIPUFyO3ZhciBjZT10eXBlb2YgZ2xvYmFsVGhpcy5TaGFyZWRBcnJheUJ1ZmZlcj09ImZ1bmN0aW9uIixRZT1uZXcgVGV4dEVuY29kZXIsRWU9bmV3IFRleHREZWNvZGVyKCJ1dGYtOCIpO2Z1bmN0aW9uIHRyKEEsdCl7bGV0IGU9e2ZsYWdzOiJyIixlbmNvZGluZzoiYmluYXJ5In0sST1BLmZzX29wZW4odCxlLmZsYWdzKSxvPUEuZnNfc3RhdCh0KS5zaXplLGc9bnVsbDtjZT9nPW5ldyBTaGFyZWRBcnJheUJ1ZmZlcihvKTpnPW5ldyBBcnJheUJ1ZmZlcihvKTtsZXQgQz1uZXcgVWludDhBcnJheShnKTtyZXR1cm4gQS5mc19yZWFkKEksQywwLG8sMCksQS5mc19jbG9zZShJKSxDfWZ1bmN0aW9uIGZlKEEsdCxlKXtsZXQgST1udWxsO2NlP0k9bmV3IFNoYXJlZEFycmF5QnVmZmVyKGUpOkk9bmV3IEFycmF5QnVmZmVyKGUpO2xldCByPW5ldyBVaW50OEFycmF5KEkpLG89bmV3IFVpbnQ4QXJyYXkoQS5IRUFQVTguYnVmZmVyLHQsZSk7cmV0dXJuIHIuc2V0KG8pLHJ9ZnVuY3Rpb24geShBLHQsZSxJKXtsZXQgcj0wO3JldHVybiB0IT09bnVsbCYmKHI9QS5jY2FsbCgiaXRrX3dhc21faW5wdXRfYXJyYXlfYWxsb2MiLCJudW1iZXIiLFsibnVtYmVyIiwibnVtYmVyIiwibnVtYmVyIiwibnVtYmVyIl0sWzAsZSxJLHQuYnVmZmVyLmJ5dGVMZW5ndGhdKSxBLkhFQVBVOC5zZXQobmV3IFVpbnQ4QXJyYXkodC5idWZmZXIpLHIpKSxyfWZ1bmN0aW9uIFQoQSx0LGUpe2xldCBJPUpTT04uc3RyaW5naWZ5KHQpLHI9QS5sZW5ndGhCeXRlc1VURjgoSSkrMSxvPUEuY2NhbGwoIml0a193YXNtX2lucHV0X2pzb25fYWxsb2MiLCJudW1iZXIiLFsibnVtYmVyIiwibnVtYmVyIiwibnVtYmVyIl0sWzAsZSxyXSk7QS5zdHJpbmdUb1VURjgoSSxvLHIpfWZ1bmN0aW9uIEYoQSx0LGUsSSl7bGV0IHI9QS5jY2FsbCgiaXRrX3dhc21fb3V0cHV0X2FycmF5X2FkZHJlc3MiLCJudW1iZXIiLFsibnVtYmVyIiwibnVtYmVyIiwibnVtYmVyIl0sWzAsdCxlXSksbz1BLmNjYWxsKCJpdGtfd2FzbV9vdXRwdXRfYXJyYXlfc2l6ZSIsIm51bWJlciIsWyJudW1iZXIiLCJudW1iZXIiLCJudW1iZXIiXSxbMCx0LGVdKSxnPWZlKEEscixvKTtyZXR1cm4gSChJLGcuYnVmZmVyKX1mdW5jdGlvbiBzQShBLHQpe2xldCBlPUEuY2NhbGwoIml0a193YXNtX291dHB1dF9qc29uX2FkZHJlc3MiLCJudW1iZXIiLFsibnVtYmVyIiwibnVtYmVyIl0sWzAsdF0pLEk9QS5VVEY4VG9TdHJpbmcoZSk7cmV0dXJuIEpTT04ucGFyc2UoSSl9ZnVuY3Rpb24gZXIoQSx0LGUsSSl7SSE9bnVsbCYmSS5sZW5ndGg+MCYmSS5mb3JFYWNoKGZ1bmN0aW9uKGEsbil7c3dpdGNoKGEudHlwZSl7Y2FzZSBoLlRleHRTdHJlYW06e2xldCBzPVFlLmVuY29kZShhLmRhdGEuZGF0YSksZj15KEEscyxuLDApLEI9e3NpemU6cy5idWZmZXIuYnl0ZUxlbmd0aCxkYXRhOmBkYXRhOmFwcGxpY2F0aW9uL3ZuZC5pdGsuYWRkcmVzcywwOiR7Zn1gfTtUKEEsQixuKTticmVha31jYXNlIGguSnNvbkNvbXBhdGlibGU6e2xldCBzPVFlLmVuY29kZShKU09OLnN0cmluZ2lmeShhLmRhdGEpKSxmPXkoQSxzLG4sMCksQj17c2l6ZTpzLmJ1ZmZlci5ieXRlTGVuZ3RoLGRhdGE6YGRhdGE6YXBwbGljYXRpb24vdm5kLml0ay5hZGRyZXNzLDA6JHtmfWB9O1QoQSxCLG4pO2JyZWFrfWNhc2UgaC5CaW5hcnlTdHJlYW06e2xldCBzPWEuZGF0YS5kYXRhLGY9eShBLHMsbiwwKSxCPXtzaXplOnMuYnVmZmVyLmJ5dGVMZW5ndGgsZGF0YTpgZGF0YTphcHBsaWNhdGlvbi92bmQuaXRrLmFkZHJlc3MsMDoke2Z9YH07VChBLEIsbik7YnJlYWt9Y2FzZSBoLlRleHRGaWxlOntBLmZzX3dyaXRlRmlsZShhLmRhdGEucGF0aCxhLmRhdGEuZGF0YSk7YnJlYWt9Y2FzZSBoLkJpbmFyeUZpbGU6e0EuZnNfd3JpdGVGaWxlKGEuZGF0YS5wYXRoLGEuZGF0YS5kYXRhKTticmVha31jYXNlIGguSW1hZ2U6e2xldCBzPWEuZGF0YSxmPXkoQSxzLmRhdGEsbiwwKSxCPXkoQSxzLmRpcmVjdGlvbixuLDEpLEU9dHlwZW9mIHMubWV0YWRhdGE/LmVudHJpZXM8InUiP0FycmF5LmZyb20ocy5tZXRhZGF0YS5lbnRyaWVzKCkpOltdLGw9e2ltYWdlVHlwZTpzLmltYWdlVHlwZSxuYW1lOnMubmFtZSxvcmlnaW46cy5vcmlnaW4sc3BhY2luZzpzLnNwYWNpbmcsZGlyZWN0aW9uOmBkYXRhOmFwcGxpY2F0aW9uL3ZuZC5pdGsuYWRkcmVzcywwOiR7Qn1gLHNpemU6cy5zaXplLGRhdGE6YGRhdGE6YXBwbGljYXRpb24vdm5kLml0ay5hZGRyZXNzLDA6JHtmfWAsbWV0YWRhdGE6RX07VChBLGwsbik7YnJlYWt9Y2FzZSBoLk1lc2g6e2xldCBzPWEuZGF0YSxmPXkoQSxzLnBvaW50cyxuLDApLEI9eShBLHMuY2VsbHMsbiwxKSxFPXkoQSxzLnBvaW50RGF0YSxuLDIpLGw9eShBLHMuY2VsbERhdGEsbiwzKSxjPXttZXNoVHlwZTpzLm1lc2hUeXBlLG5hbWU6cy5uYW1lLG51bWJlck9mUG9pbnRzOnMubnVtYmVyT2ZQb2ludHMscG9pbnRzOmBkYXRhOmFwcGxpY2F0aW9uL3ZuZC5pdGsuYWRkcmVzcywwOiR7Zn1gLG51bWJlck9mQ2VsbHM6cy5udW1iZXJPZkNlbGxzLGNlbGxzOmBkYXRhOmFwcGxpY2F0aW9uL3ZuZC5pdGsuYWRkcmVzcywwOiR7Qn1gLGNlbGxCdWZmZXJTaXplOnMuY2VsbEJ1ZmZlclNpemUsbnVtYmVyT2ZQb2ludFBpeGVsczpzLm51bWJlck9mUG9pbnRQaXhlbHMscG9pbnREYXRhOmBkYXRhOmFwcGxpY2F0aW9uL3ZuZC5pdGsuYWRkcmVzcywwOiR7RX1gLG51bWJlck9mQ2VsbFBpeGVsczpzLm51bWJlck9mQ2VsbFBpeGVscyxjZWxsRGF0YTpgZGF0YTphcHBsaWNhdGlvbi92bmQuaXRrLmFkZHJlc3MsMDoke2x9YH07VChBLGMsbik7YnJlYWt9Y2FzZSBoLlBvaW50U2V0OntsZXQgcz1hLmRhdGEsZj15KEEscy5wb2ludHMsbiwwKSxCPXkoQSxzLnBvaW50RGF0YSxuLDEpLEU9e3BvaW50U2V0VHlwZTpzLnBvaW50U2V0VHlwZSxuYW1lOnMubmFtZSxudW1iZXJPZlBvaW50czpzLm51bWJlck9mUG9pbnRzLHBvaW50czpgZGF0YTphcHBsaWNhdGlvbi92bmQuaXRrLmFkZHJlc3MsMDoke2Z9YCxudW1iZXJPZlBvaW50UGl4ZWxzOnMubnVtYmVyT2ZQb2ludFBpeGVscyxwb2ludERhdGE6YGRhdGE6YXBwbGljYXRpb24vdm5kLml0ay5hZGRyZXNzLDA6JHtCfWB9O1QoQSxFLG4pO2JyZWFrfWNhc2UgaC5UcmFuc2Zvcm1MaXN0OntsZXQgcz1hLmRhdGEsZj1bXTtzLmZvckVhY2goKEIsRSk9PntsZXQgYz1gZGF0YTphcHBsaWNhdGlvbi92bmQuaXRrLmFkZHJlc3MsMDoke3koQSxCLmZpeGVkUGFyYW1ldGVycyxuLEUqMil9YCxTPWBkYXRhOmFwcGxpY2F0aW9uL3ZuZC5pdGsuYWRkcmVzcywwOiR7eShBLEIucGFyYW1ldGVycyxuLEUqMisxKX1gLEQ9e3RyYW5zZm9ybVR5cGU6Qi50cmFuc2Zvcm1UeXBlLG51bWJlck9mRml4ZWRQYXJhbWV0ZXJzOkIubnVtYmVyT2ZGaXhlZFBhcmFtZXRlcnMsbnVtYmVyT2ZQYXJhbWV0ZXJzOkIubnVtYmVyT2ZQYXJhbWV0ZXJzLG5hbWU6Qi5uYW1lLGlucHV0U3BhY2VOYW1lOkIuaW5wdXRTcGFjZU5hbWUsb3V0cHV0U3BhY2VOYW1lOkIub3V0cHV0U3BhY2VOYW1lLHBhcmFtZXRlcnM6UyxmaXhlZFBhcmFtZXRlcnM6Y307Zi5wdXNoKEQpfSksVChBLGYsbik7YnJlYWt9Y2FzZSBoLlBvbHlEYXRhOntsZXQgcz1hLmRhdGEsZj15KEEscy5wb2ludHMsbiwwKSxCPXkoQSxzLnZlcnRpY2VzLG4sMSksRT15KEEscy5saW5lcyxuLDIpLGw9eShBLHMucG9seWdvbnMsbiwzKSxjPXkoQSxzLnRyaWFuZ2xlU3RyaXBzLG4sNCkscD15KEEscy5wb2ludERhdGEsbiw1KSxTPXkoQSxzLnBvaW50RGF0YSxuLDYpLEQ9e3BvbHlEYXRhVHlwZTpzLnBvbHlEYXRhVHlwZSxuYW1lOnMubmFtZSxudW1iZXJPZlBvaW50czpzLm51bWJlck9mUG9pbnRzLHBvaW50czpgZGF0YTphcHBsaWNhdGlvbi92bmQuaXRrLmFkZHJlc3MsMDoke2Z9YCx2ZXJ0aWNlc0J1ZmZlclNpemU6cy52ZXJ0aWNlc0J1ZmZlclNpemUsdmVydGljZXM6YGRhdGE6YXBwbGljYXRpb24vdm5kLml0ay5hZGRyZXNzLDA6JHtCfWAsbGluZXNCdWZmZXJTaXplOnMubGluZXNCdWZmZXJTaXplLGxpbmVzOmBkYXRhOmFwcGxpY2F0aW9uL3ZuZC5pdGsuYWRkcmVzcywwOiR7RX1gLHBvbHlnb25zQnVmZmVyU2l6ZTpzLnBvbHlnb25zQnVmZmVyU2l6ZSxwb2x5Z29uczpgZGF0YTphcHBsaWNhdGlvbi92bmQuaXRrLmFkZHJlc3MsMDoke2x9YCx0cmlhbmdsZVN0cmlwc0J1ZmZlclNpemU6cy50cmlhbmdsZVN0cmlwc0J1ZmZlclNpemUsdHJpYW5nbGVTdHJpcHM6YGRhdGE6YXBwbGljYXRpb24vdm5kLml0ay5hZGRyZXNzLDA6JHtjfWAsbnVtYmVyT2ZQb2ludFBpeGVsczpzLm51bWJlck9mUG9pbnRQaXhlbHMscG9pbnREYXRhOmBkYXRhOmFwcGxpY2F0aW9uL3ZuZC5pdGsuYWRkcmVzcywwOiR7cH1gLG51bWJlck9mQ2VsbFBpeGVsczpzLm51bWJlck9mQ2VsbFBpeGVscyxjZWxsRGF0YTpgZGF0YTphcHBsaWNhdGlvbi92bmQuaXRrLmFkZHJlc3MsMDoke1N9YH07VChBLEQsbik7YnJlYWt9ZGVmYXVsdDp0aHJvdyBFcnJvcigiVW5zdXBwb3J0ZWQgaW5wdXQgSW50ZXJmYWNlVHlwZSIpfX0pLEEucmVzZXRNb2R1bGVTdGRvdXQoKSxBLnJlc2V0TW9kdWxlU3RkZXJyKCk7bGV0IHI9QS5zdGFja1NhdmUoKSxvPTA7dHJ5e289QS5jYWxsTWFpbih0LnNsaWNlKCkpfWNhdGNoKGEpe3Rocm93IHR5cGVvZiBhPT0ibnVtYmVyIiYmKGNvbnNvbGUubG9nKCJFeGNlcHRpb24gd2hpbGUgcnVubmluZyBwaXBlbGluZToiKSxjb25zb2xlLmxvZygic3Rkb3V0OiIsQS5nZXRNb2R1bGVTdGRvdXQoKSksY29uc29sZS5lcnJvcigic3RkZXJyOiIsQS5nZXRNb2R1bGVTdGRlcnIoKSksdHlwZW9mIEEuZ2V0RXhjZXB0aW9uTWVzc2FnZTwidSI/Y29uc29sZS5lcnJvcigiZXhjZXB0aW9uOiIsQS5nZXRFeGNlcHRpb25NZXNzYWdlKGEpKTpjb25zb2xlLmVycm9yKCJCdWlsZCBtb2R1bGUgaW4gRGVidWcgbW9kZSBmb3IgZXhjZXB0aW9uIG1lc3NhZ2UgaW5mb3JtYXRpb24uIikpLGF9ZmluYWxseXtBLnN0YWNrUmVzdG9yZShyKX1sZXQgZz1BLmdldE1vZHVsZVN0ZG91dCgpLEM9QS5nZXRNb2R1bGVTdGRlcnIoKSxRPVtdO3JldHVybiBlIT1udWxsJiZlLmxlbmd0aD4wJiZvPT09MCYmZS5mb3JFYWNoKGZ1bmN0aW9uKGEsbil7bGV0IHM9bnVsbDtzd2l0Y2goYS50eXBlKXtjYXNlIGguVGV4dFN0cmVhbTp7bGV0IEI9QS5jY2FsbCgiaXRrX3dhc21fb3V0cHV0X2FycmF5X2FkZHJlc3MiLCJudW1iZXIiLFsibnVtYmVyIiwibnVtYmVyIiwibnVtYmVyIl0sWzAsbiwwXSksRT1BLmNjYWxsKCJpdGtfd2FzbV9vdXRwdXRfYXJyYXlfc2l6ZSIsIm51bWJlciIsWyJudW1iZXIiLCJudW1iZXIiLCJudW1iZXIiXSxbMCxuLDBdKSxsPW5ldyBVaW50OEFycmF5KEEuSEVBUFU4LmJ1ZmZlcixCLEUpO3M9e2RhdGE6RWUuZGVjb2RlKGwpfTticmVha31jYXNlIGguSnNvbkNvbXBhdGlibGU6e2xldCBCPUEuY2NhbGwoIml0a193YXNtX291dHB1dF9hcnJheV9hZGRyZXNzIiwibnVtYmVyIixbIm51bWJlciIsIm51bWJlciIsIm51bWJlciJdLFswLG4sMF0pLEU9QS5jY2FsbCgiaXRrX3dhc21fb3V0cHV0X2FycmF5X3NpemUiLCJudW1iZXIiLFsibnVtYmVyIiwibnVtYmVyIiwibnVtYmVyIl0sWzAsbiwwXSksbD1uZXcgVWludDhBcnJheShBLkhFQVBVOC5idWZmZXIsQixFKTtzPUpTT04ucGFyc2UoRWUuZGVjb2RlKGwpKTticmVha31jYXNlIGguQmluYXJ5U3RyZWFtOntsZXQgQj1BLmNjYWxsKCJpdGtfd2FzbV9vdXRwdXRfYXJyYXlfYWRkcmVzcyIsIm51bWJlciIsWyJudW1iZXIiLCJudW1iZXIiLCJudW1iZXIiXSxbMCxuLDBdKSxFPUEuY2NhbGwoIml0a193YXNtX291dHB1dF9hcnJheV9zaXplIiwibnVtYmVyIixbIm51bWJlciIsIm51bWJlciIsIm51bWJlciJdLFswLG4sMF0pO3M9e2RhdGE6ZmUoQSxCLEUpfTticmVha31jYXNlIGguVGV4dEZpbGU6e3M9e3BhdGg6YS5kYXRhLnBhdGgsZGF0YTpBLmZzX3JlYWRGaWxlKGEuZGF0YS5wYXRoLHtlbmNvZGluZzoidXRmOCJ9KX07YnJlYWt9Y2FzZSBoLkJpbmFyeUZpbGU6e3M9e3BhdGg6YS5kYXRhLnBhdGgsZGF0YTp0cihBLGEuZGF0YS5wYXRoKX07YnJlYWt9Y2FzZSBoLkltYWdlOntsZXQgQj1zQShBLG4pO0IuZGF0YT1GKEEsbiwwLEIuaW1hZ2VUeXBlLmNvbXBvbmVudFR5cGUpLEIuZGlyZWN0aW9uPUYoQSxuLDEsei5GbG9hdDY0KSxCLm1ldGFkYXRhPW5ldyBNYXAoQi5tZXRhZGF0YSkscz1CO2JyZWFrfWNhc2UgaC5NZXNoOntsZXQgQj1zQShBLG4pO0IubnVtYmVyT2ZQb2ludHM+MD9CLnBvaW50cz1GKEEsbiwwLEIubWVzaFR5cGUucG9pbnRDb21wb25lbnRUeXBlKTpCLnBvaW50cz1IKEIubWVzaFR5cGUucG9pbnRDb21wb25lbnRUeXBlLG5ldyBBcnJheUJ1ZmZlcigwKSksQi5udW1iZXJPZkNlbGxzPjA/Qi5jZWxscz1GKEEsbiwxLEIubWVzaFR5cGUuY2VsbENvbXBvbmVudFR5cGUpOkIuY2VsbHM9SChCLm1lc2hUeXBlLmNlbGxDb21wb25lbnRUeXBlLG5ldyBBcnJheUJ1ZmZlcigwKSksQi5udW1iZXJPZlBvaW50UGl4ZWxzPjA/Qi5wb2ludERhdGE9RihBLG4sMixCLm1lc2hUeXBlLnBvaW50UGl4ZWxDb21wb25lbnRUeXBlKTpCLnBvaW50RGF0YT1IKEIubWVzaFR5cGUucG9pbnRQaXhlbENvbXBvbmVudFR5cGUsbmV3IEFycmF5QnVmZmVyKDApKSxCLm51bWJlck9mQ2VsbFBpeGVscz4wP0IuY2VsbERhdGE9RihBLG4sMyxCLm1lc2hUeXBlLmNlbGxQaXhlbENvbXBvbmVudFR5cGUpOkIuY2VsbERhdGE9SChCLm1lc2hUeXBlLmNlbGxQaXhlbENvbXBvbmVudFR5cGUsbmV3IEFycmF5QnVmZmVyKDApKSxzPUI7YnJlYWt9Y2FzZSBoLlBvaW50U2V0OntsZXQgQj1zQShBLG4pO0IubnVtYmVyT2ZQb2ludHM+MD9CLnBvaW50cz1GKEEsbiwwLEIucG9pbnRTZXRUeXBlLnBvaW50Q29tcG9uZW50VHlwZSk6Qi5wb2ludHM9SChCLnBvaW50U2V0VHlwZS5wb2ludENvbXBvbmVudFR5cGUsbmV3IEFycmF5QnVmZmVyKDApKSxCLm51bWJlck9mUG9pbnRQaXhlbHM+MD9CLnBvaW50RGF0YT1GKEEsbiwxLEIucG9pbnRTZXRUeXBlLnBvaW50UGl4ZWxDb21wb25lbnRUeXBlKTpCLnBvaW50RGF0YT1IKEIucG9pbnRTZXRUeXBlLnBvaW50UGl4ZWxDb21wb25lbnRUeXBlLG5ldyBBcnJheUJ1ZmZlcigwKSkscz1CO2JyZWFrfWNhc2UgaC5UcmFuc2Zvcm1MaXN0OntsZXQgQj1zQShBLG4pO0IuZm9yRWFjaCgoRSxsKT0+e0UubnVtYmVyT2ZGaXhlZFBhcmFtZXRlcnM+MCYmKEJbbF0uZml4ZWRQYXJhbWV0ZXJzPUYoQSxuLGwqMixFLnRyYW5zZm9ybVR5cGUucGFyYW1ldGVyc1ZhbHVlVHlwZSkpLEUubnVtYmVyT2ZGaXhlZFBhcmFtZXRlcnM+MCYmKEJbbF0ucGFyYW1ldGVycz1GKEEsbixsKjIrMSxFLnRyYW5zZm9ybVR5cGUucGFyYW1ldGVyc1ZhbHVlVHlwZSkpfSkscz1CO2JyZWFrfWNhc2UgaC5Qb2x5RGF0YTp7bGV0IEI9c0EoQSxuKTtCLm51bWJlck9mUG9pbnRzPjA/Qi5wb2ludHM9RihBLG4sMCx6LkZsb2F0MzIpOkIucG9pbnRzPW5ldyBGbG9hdDMyQXJyYXksQi52ZXJ0aWNlc0J1ZmZlclNpemU+MD9CLnZlcnRpY2VzPUYoQSxuLDEsUi5VSW50MzIpOkIudmVydGljZXM9bmV3IFVpbnQzMkFycmF5LEIubGluZXNCdWZmZXJTaXplPjA/Qi5saW5lcz1GKEEsbiwyLFIuVUludDMyKTpCLmxpbmVzPW5ldyBVaW50MzJBcnJheSxCLnBvbHlnb25zQnVmZmVyU2l6ZT4wP0IucG9seWdvbnM9RihBLG4sMyxSLlVJbnQzMik6Qi5wb2x5Z29ucz1uZXcgVWludDMyQXJyYXksQi50cmlhbmdsZVN0cmlwc0J1ZmZlclNpemU+MD9CLnRyaWFuZ2xlU3RyaXBzPUYoQSxuLDQsUi5VSW50MzIpOkIudHJpYW5nbGVTdHJpcHM9bmV3IFVpbnQzMkFycmF5LEIubnVtYmVyT2ZQb2ludFBpeGVscz4wP0IucG9pbnREYXRhPUYoQSxuLDUsQi5wb2x5RGF0YVR5cGUucG9pbnRQaXhlbENvbXBvbmVudFR5cGUpOkIucG9pbnREYXRhPUgoQi5wb2x5RGF0YVR5cGUucG9pbnRQaXhlbENvbXBvbmVudFR5cGUsbmV3IEFycmF5QnVmZmVyKDApKSxCLm51bWJlck9mQ2VsbFBpeGVscz4wP0IuY2VsbERhdGE9RihBLG4sNixCLnBvbHlEYXRhVHlwZS5jZWxsUGl4ZWxDb21wb25lbnRUeXBlKTpCLmNlbGxEYXRhPUgoQi5wb2x5RGF0YVR5cGUuY2VsbFBpeGVsQ29tcG9uZW50VHlwZSxuZXcgQXJyYXlCdWZmZXIoMCkpLHM9QjticmVha31kZWZhdWx0OnRocm93IEVycm9yKCJVbnN1cHBvcnRlZCBvdXRwdXQgSW50ZXJmYWNlVHlwZSIpfWxldCBmPXt0eXBlOmEudHlwZSxkYXRhOnN9O1EucHVzaChmKX0pLHtyZXR1cm5WYWx1ZTpvLHN0ZG91dDpnLHN0ZGVycjpDLG91dHB1dHM6UX19dmFyIGxlPWVyO3ZhciBJcj10eXBlb2YgZ2xvYmFsVGhpcy5TaGFyZWRBcnJheUJ1ZmZlcjwidSI7ZnVuY3Rpb24gcnIoQSx0KXtpZihBPT1udWxsKXJldHVybltdO2xldCBlPVtdO2ZvcihsZXQgST0wO0k8QS5sZW5ndGg7SSsrKXtsZXQgcj1vcihBW0ldLHQpO3IhPT1udWxsJiZlLnB1c2gocil9cmV0dXJuIGV9ZnVuY3Rpb24gb3IoQSx0KXtpZihBPT1udWxsKXJldHVybiBudWxsO2xldCBlPW51bGw7cmV0dXJuIEEuYnVmZmVyIT09dm9pZCAwP2U9QS5idWZmZXI6QS5ieXRlTGVuZ3RoIT09dm9pZCAwJiYoZT1BKSxJciYmZSBpbnN0YW5jZW9mIFNoYXJlZEFycmF5QnVmZmVyP251bGw6dD9lOmUuc2xpY2UoMCl9dmFyIHVlPXJyO2Z1bmN0aW9uIGdyKEEpe3JldHVybltBLmRhdGEsQS5kaXJlY3Rpb25dfXZhciBEZT1ncjtmdW5jdGlvbiBpcihBKXtyZXR1cm5bQS5wb2ludHMsQS5wb2ludERhdGEsQS5jZWxscyxBLmNlbGxEYXRhXX12YXIgaGU9aXI7ZnVuY3Rpb24gbnIoQSl7cmV0dXJuW0EucG9pbnRzLEEudmVydGljZXMsQS5saW5lcyxBLnBvbHlnb25zLEEudHJpYW5nbGVTdHJpcHMsQS5wb2ludERhdGEsQS5jZWxsRGF0YV19dmFyIGRlPW5yO2FzeW5jIGZ1bmN0aW9uIHNyKEEsdCxlLEkpe2xldCByPWxlKEEsdCxlLEkpLG89W107cmV0dXJuIHIub3V0cHV0cy5mb3JFYWNoKGZ1bmN0aW9uKGcpe2lmKGcudHlwZT09PWguQmluYXJ5U3RyZWFtfHxnLnR5cGU9PT1oLkJpbmFyeUZpbGUpe2xldCBDPWcuZGF0YTtvLnB1c2goQyl9ZWxzZSBpZihnLnR5cGU9PT1oLkltYWdlKXtsZXQgQz1nLmRhdGE7by5wdXNoKC4uLkRlKEMpKX1lbHNlIGlmKGcudHlwZT09PWguTWVzaCl7bGV0IEM9Zy5kYXRhO28ucHVzaCguLi5oZShDKSl9ZWxzZSBpZihnLnR5cGU9PT1oLlBvbHlEYXRhKXtsZXQgQz1nLmRhdGE7by5wdXNoKC4uLmRlKEMpKX19KSxNQShyLHVlKG8sITApKX12YXIgeWU9c3I7dmFyIENyPXtydW5QaXBlbGluZTphc3luYyBmdW5jdGlvbihBLHQsZSxJLHIsbyl7bGV0IGc9YXdhaXQgYWUoQSx0LG8pO3JldHVybiBhd2FpdCB5ZShnLGUsSSxyKX19O2ZBKENyKTslMEEvKiEgQnVuZGxlZCBsaWNlbnNlIGluZm9ybWF0aW9uOiUwQSUwQWNvbWxpbmsvZGlzdC9lc20vY29tbGluay5tanM6JTBBICAoKiolMEEgICAqIEBsaWNlbnNlJTBBICAgKiBDb3B5cmlnaHQgMjAxOSBHb29nbGUgTExDJTBBICAgKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMCUwQSAgICopJTBBKi8lMEEnO3p0KFZ0KTtleHBvcnR7RCBhcyBnZXREZWZhdWx0V2ViV29ya2VyLHkgYXMgZ2V0UGlwZWxpbmVXb3JrZXJVcmwsdyBhcyBnZXRQaXBlbGluZXNCYXNlVXJsLFJlIGFzIGhkZjVSZWFkVHJhbnNmb3JtLGJlIGFzIGhkZjVXcml0ZVRyYW5zZm9ybSxTZSBhcyBtYXRSZWFkVHJhbnNmb3JtLGtlIGFzIG1hdFdyaXRlVHJhbnNmb3JtLEZlIGFzIG1uY1JlYWRUcmFuc2Zvcm0sVWUgYXMgbW5jV3JpdGVUcmFuc2Zvcm0sZm4gYXMgcmVhZFRyYW5zZm9ybSx6SSBhcyBzZXREZWZhdWx0V2ViV29ya2VyLHp0IGFzIHNldFBpcGVsaW5lV29ya2VyVXJsLEhJIGFzIHNldFBpcGVsaW5lc0Jhc2VVcmwsVGUgYXMgdHh0UmVhZFRyYW5zZm9ybSxOZSBhcyB0eHRXcml0ZVRyYW5zZm9ybSxLQSBhcyB2ZXJzaW9uLExlIGFzIHdhc21SZWFkVHJhbnNmb3JtLFBlIGFzIHdhc21Xcml0ZVRyYW5zZm9ybSx4ZSBhcyB3YXNtWnN0ZFJlYWRUcmFuc2Zvcm0sT2UgYXMgd2FzbVpzdGRXcml0ZVRyYW5zZm9ybSxjbiBhcyB3cml0ZVRyYW5zZm9ybX07Ci8qISBCdW5kbGVkIGxpY2Vuc2UgaW5mb3JtYXRpb246Cgpjb21saW5rL2Rpc3QvZXNtL2NvbWxpbmsubWpzOgogICgqKgogICAqIEBsaWNlbnNlCiAgICogQ29weXJpZ2h0IDIwMTkgR29vZ2xlIExMQwogICAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wCiAgICopCiovCg==""" +default_js_module = """data:text/javascript;base64,dmFyIFh0PU9iamVjdC5kZWZpbmVQcm9wZXJ0eTt2YXIgJHQ9KEEsZSk9Pntmb3IodmFyIHQgaW4gZSlYdChBLHQse2dldDplW3RdLGVudW1lcmFibGU6ITB9KX07dmFyIEFyPSIxLjAuMCIsS0E9QXI7dmFyIGVyPXtJbnQ4OiJpbnQ4IixVSW50ODoidWludDgiLEludDE2OiJpbnQxNiIsVUludDE2OiJ1aW50MTYiLEludDMyOiJpbnQzMiIsVUludDMyOiJ1aW50MzIiLEludDY0OiJpbnQ2NCIsVUludDY0OiJ1aW50NjQiLFNpemVWYWx1ZVR5cGU6InVpbnQ2NCIsSWRlbnRpZmllclR5cGU6InVpbnQ2NCIsSW5kZXhWYWx1ZVR5cGU6ImludDY0IixPZmZzZXRWYWx1ZVR5cGU6ImludDY0In0sVD1lcjt2YXIgdHI9e0Zsb2F0MzI6ImZsb2F0MzIiLEZsb2F0NjQ6ImZsb2F0NjQiLFNwYWNlUHJlY2lzaW9uVHlwZToiZmxvYXQ2NCJ9LGo9dHI7ZnVuY3Rpb24gcnIoQSxlKXtsZXQgdD1udWxsO3N3aXRjaChBKXtjYXNlIFQuVUludDg6e3Q9bmV3IFVpbnQ4QXJyYXkoZSk7YnJlYWt9Y2FzZSBULkludDg6e3Q9bmV3IEludDhBcnJheShlKTticmVha31jYXNlIFQuVUludDE2Ont0PW5ldyBVaW50MTZBcnJheShlKTticmVha31jYXNlIFQuSW50MTY6e3Q9bmV3IEludDE2QXJyYXkoZSk7YnJlYWt9Y2FzZSBULlVJbnQzMjp7dD1uZXcgVWludDMyQXJyYXkoZSk7YnJlYWt9Y2FzZSBULkludDMyOnt0PW5ldyBJbnQzMkFycmF5KGUpO2JyZWFrfWNhc2UgVC5VSW50NjQ6e3R5cGVvZiBnbG9iYWxUaGlzLkJpZ1VpbnQ2NEFycmF5PT0iZnVuY3Rpb24iP3Q9bmV3IEJpZ1VpbnQ2NEFycmF5KGUpOnQ9bmV3IFVpbnQ4QXJyYXkoZSk7YnJlYWt9Y2FzZSBULkludDY0Ont0eXBlb2YgZ2xvYmFsVGhpcy5CaWdJbnQ2NEFycmF5PT0iZnVuY3Rpb24iP3Q9bmV3IEJpZ0ludDY0QXJyYXkoZSk6dD1uZXcgVWludDhBcnJheShlKTticmVha31jYXNlIGouRmxvYXQzMjp7dD1uZXcgRmxvYXQzMkFycmF5KGUpO2JyZWFrfWNhc2Ugai5GbG9hdDY0Ont0PW5ldyBGbG9hdDY0QXJyYXkoZSk7YnJlYWt9Y2FzZSJudWxsIjp7dD1udWxsO2JyZWFrfWNhc2UgbnVsbDp7dD1udWxsO2JyZWFrfWRlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKCJUeXBlIGlzIG5vdCBzdXBwb3J0ZWQgYXMgYSBUeXBlZEFycmF5Iil9cmV0dXJuIHR9dmFyIFc9cnI7ZnVuY3Rpb24gb3IoQSl7bGV0IGU9QS5zbGljZSgoQS5sYXN0SW5kZXhPZigiLiIpLTE+Pj4wKSsyKTtpZihlLnRvTG93ZXJDYXNlKCk9PT0iZ3oiKXtsZXQgdD1BLnNsaWNlKDAsLTMpLmxhc3RJbmRleE9mKCIuIik7ZT1BLnNsaWNlKCh0LTE+Pj4wKSsyKX1lbHNlIGlmKGUudG9Mb3dlckNhc2UoKT09PSJjYm9yIil7bGV0IHQ9QS5zbGljZSgwLC01KS5sYXN0SW5kZXhPZigiLiIpO2U9QS5zbGljZSgodC0xPj4+MCkrMil9ZWxzZSBpZihlLnRvTG93ZXJDYXNlKCk9PT0ienN0Iil7bGV0IHQ9QS5zbGljZSgwLC0xMCkubGFzdEluZGV4T2YoIi4iKTtlPUEuc2xpY2UoKHQtMT4+PjApKzIpfWVsc2UgaWYoZS50b0xvd2VyQ2FzZSgpPT09InppcCIpe2xldCB0PUEuc2xpY2UoMCwtNCkubGFzdEluZGV4T2YoIi4iKTtlPUEuc2xpY2UoKHQtMT4+PjApKzIpfXJldHVybiBlfXZhciBpQT1vcjt2YXIgbnI9e1RleHRGaWxlOiJUZXh0RmlsZSIsQmluYXJ5RmlsZToiQmluYXJ5RmlsZSIsVGV4dFN0cmVhbToiVGV4dFN0cmVhbSIsQmluYXJ5U3RyZWFtOiJCaW5hcnlTdHJlYW0iLEltYWdlOiJJbWFnZSIsUG9pbnRTZXQ6IlBvaW50U2V0IixNZXNoOiJNZXNoIixQb2x5RGF0YToiUG9seURhdGEiLFRyYW5zZm9ybUxpc3Q6IlRyYW5zZm9ybUxpc3QiLEpzb25Db21wYXRpYmxlOiJKc29uQ29tcGF0aWJsZSJ9LEU9bnI7dmFyIEplPVN5bWJvbCgiQ29tbGluay5wcm94eSIpLGlyPVN5bWJvbCgiQ29tbGluay5lbmRwb2ludCIpLF9BPVN5bWJvbCgiQ29tbGluay5yZWxlYXNlUHJveHkiKSx2QT1TeW1ib2woIkNvbWxpbmsuZmluYWxpemVyIiksZEE9U3ltYm9sKCJDb21saW5rLnRocm93biIpLE1lPUE9PnR5cGVvZiBBPT0ib2JqZWN0IiYmQSE9PW51bGx8fHR5cGVvZiBBPT0iZnVuY3Rpb24iLGFyPXtjYW5IYW5kbGU6QT0+TWUoQSkmJkFbSmVdLHNlcmlhbGl6ZShBKXtsZXR7cG9ydDE6ZSxwb3J0Mjp0fT1uZXcgTWVzc2FnZUNoYW5uZWw7cmV0dXJuIHFlKEEsZSksW3QsW3RdXX0sZGVzZXJpYWxpemUoQSl7cmV0dXJuIEEuc3RhcnQoKSx6QShBKX19LHNyPXtjYW5IYW5kbGU6QT0+TWUoQSkmJmRBIGluIEEsc2VyaWFsaXplKHt2YWx1ZTpBfSl7bGV0IGU7cmV0dXJuIEEgaW5zdGFuY2VvZiBFcnJvcj9lPXtpc0Vycm9yOiEwLHZhbHVlOnttZXNzYWdlOkEubWVzc2FnZSxuYW1lOkEubmFtZSxzdGFjazpBLnN0YWNrfX06ZT17aXNFcnJvcjohMSx2YWx1ZTpBfSxbZSxbXV19LGRlc2VyaWFsaXplKEEpe3Rocm93IEEuaXNFcnJvcj9PYmplY3QuYXNzaWduKG5ldyBFcnJvcihBLnZhbHVlLm1lc3NhZ2UpLEEudmFsdWUpOkEudmFsdWV9fSxIZT1uZXcgTWFwKFtbInByb3h5Iixhcl0sWyJ0aHJvdyIsc3JdXSk7ZnVuY3Rpb24gSXIoQSxlKXtmb3IobGV0IHQgb2YgQSlpZihlPT09dHx8dD09PSIqInx8dCBpbnN0YW5jZW9mIFJlZ0V4cCYmdC50ZXN0KGUpKXJldHVybiEwO3JldHVybiExfWZ1bmN0aW9uIHFlKEEsZT1nbG9iYWxUaGlzLHQ9WyIqIl0pe2UuYWRkRXZlbnRMaXN0ZW5lcigibWVzc2FnZSIsZnVuY3Rpb24gcihuKXtpZighbnx8IW4uZGF0YSlyZXR1cm47aWYoIUlyKHQsbi5vcmlnaW4pKXtjb25zb2xlLndhcm4oYEludmFsaWQgb3JpZ2luICcke24ub3JpZ2lufScgZm9yIGNvbWxpbmsgcHJveHlgKTtyZXR1cm59bGV0e2lkOm8sdHlwZTppLHBhdGg6Zn09T2JqZWN0LmFzc2lnbih7cGF0aDpbXX0sbi5kYXRhKSxjPShuLmRhdGEuYXJndW1lbnRMaXN0fHxbXSkubWFwKEspLGw7dHJ5e2xldCBhPWYuc2xpY2UoMCwtMSkucmVkdWNlKCh1LHMpPT51W3NdLEEpLEk9Zi5yZWR1Y2UoKHUscyk9PnVbc10sQSk7c3dpdGNoKGkpe2Nhc2UiR0VUIjpsPUk7YnJlYWs7Y2FzZSJTRVQiOmFbZi5zbGljZSgtMSlbMF1dPUsobi5kYXRhLnZhbHVlKSxsPSEwO2JyZWFrO2Nhc2UiQVBQTFkiOmw9SS5hcHBseShhLGMpO2JyZWFrO2Nhc2UiQ09OU1RSVUNUIjp7bGV0IHU9bmV3IEkoLi4uYyk7bD1jcih1KX1icmVhaztjYXNlIkVORFBPSU5UIjp7bGV0e3BvcnQxOnUscG9ydDI6c309bmV3IE1lc3NhZ2VDaGFubmVsO3FlKEEscyksbD1aQSh1LFt1XSl9YnJlYWs7Y2FzZSJSRUxFQVNFIjpsPXZvaWQgMDticmVhaztkZWZhdWx0OnJldHVybn19Y2F0Y2goYSl7bD17dmFsdWU6YSxbZEFdOjB9fVByb21pc2UucmVzb2x2ZShsKS5jYXRjaChhPT4oe3ZhbHVlOmEsW2RBXTowfSkpLnRoZW4oYT0+e2xldFtJLHVdPXdBKGEpO2UucG9zdE1lc3NhZ2UoT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LEkpLHtpZDpvfSksdSksaT09PSJSRUxFQVNFIiYmKGUucmVtb3ZlRXZlbnRMaXN0ZW5lcigibWVzc2FnZSIsciksWWUoZSksdkEgaW4gQSYmdHlwZW9mIEFbdkFdPT0iZnVuY3Rpb24iJiZBW3ZBXSgpKX0pLmNhdGNoKGE9PntsZXRbSSx1XT13QSh7dmFsdWU6bmV3IFR5cGVFcnJvcigiVW5zZXJpYWxpemFibGUgcmV0dXJuIHZhbHVlIiksW2RBXTowfSk7ZS5wb3N0TWVzc2FnZShPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sSSkse2lkOm99KSx1KX0pfSksZS5zdGFydCYmZS5zdGFydCgpfWZ1bmN0aW9uIGdyKEEpe3JldHVybiBBLmNvbnN0cnVjdG9yLm5hbWU9PT0iTWVzc2FnZVBvcnQifWZ1bmN0aW9uIFllKEEpe2dyKEEpJiZBLmNsb3NlKCl9ZnVuY3Rpb24gekEoQSxlKXtyZXR1cm4gakEoQSxbXSxlKX1mdW5jdGlvbiBtQShBKXtpZihBKXRocm93IG5ldyBFcnJvcigiUHJveHkgaGFzIGJlZW4gcmVsZWFzZWQgYW5kIGlzIG5vdCB1c2VhYmxlIil9ZnVuY3Rpb24gS2UoQSl7cmV0dXJuIF8oQSx7dHlwZToiUkVMRUFTRSJ9KS50aGVuKCgpPT57WWUoQSl9KX12YXIgeUE9bmV3IFdlYWtNYXAsaEE9IkZpbmFsaXphdGlvblJlZ2lzdHJ5ImluIGdsb2JhbFRoaXMmJm5ldyBGaW5hbGl6YXRpb25SZWdpc3RyeShBPT57bGV0IGU9KHlBLmdldChBKXx8MCktMTt5QS5zZXQoQSxlKSxlPT09MCYmS2UoQSl9KTtmdW5jdGlvbiBscihBLGUpe2xldCB0PSh5QS5nZXQoZSl8fDApKzE7eUEuc2V0KGUsdCksaEEmJmhBLnJlZ2lzdGVyKEEsZSxBKX1mdW5jdGlvbiBmcihBKXtoQSYmaEEudW5yZWdpc3RlcihBKX1mdW5jdGlvbiBqQShBLGU9W10sdD1mdW5jdGlvbigpe30pe2xldCByPSExLG49bmV3IFByb3h5KHQse2dldChvLGkpe2lmKG1BKHIpLGk9PT1fQSlyZXR1cm4oKT0+e2ZyKG4pLEtlKEEpLHI9ITB9O2lmKGk9PT0idGhlbiIpe2lmKGUubGVuZ3RoPT09MClyZXR1cm57dGhlbjooKT0+bn07bGV0IGY9XyhBLHt0eXBlOiJHRVQiLHBhdGg6ZS5tYXAoYz0+Yy50b1N0cmluZygpKX0pLnRoZW4oSyk7cmV0dXJuIGYudGhlbi5iaW5kKGYpfXJldHVybiBqQShBLFsuLi5lLGldKX0sc2V0KG8saSxmKXttQShyKTtsZXRbYyxsXT13QShmKTtyZXR1cm4gXyhBLHt0eXBlOiJTRVQiLHBhdGg6Wy4uLmUsaV0ubWFwKGE9PmEudG9TdHJpbmcoKSksdmFsdWU6Y30sbCkudGhlbihLKX0sYXBwbHkobyxpLGYpe21BKHIpO2xldCBjPWVbZS5sZW5ndGgtMV07aWYoYz09PWlyKXJldHVybiBfKEEse3R5cGU6IkVORFBPSU5UIn0pLnRoZW4oSyk7aWYoYz09PSJiaW5kIilyZXR1cm4gakEoQSxlLnNsaWNlKDAsLTEpKTtsZXRbbCxhXT1XZShmKTtyZXR1cm4gXyhBLHt0eXBlOiJBUFBMWSIscGF0aDplLm1hcChJPT5JLnRvU3RyaW5nKCkpLGFyZ3VtZW50TGlzdDpsfSxhKS50aGVuKEspfSxjb25zdHJ1Y3QobyxpKXttQShyKTtsZXRbZixjXT1XZShpKTtyZXR1cm4gXyhBLHt0eXBlOiJDT05TVFJVQ1QiLHBhdGg6ZS5tYXAobD0+bC50b1N0cmluZygpKSxhcmd1bWVudExpc3Q6Zn0sYykudGhlbihLKX19KTtyZXR1cm4gbHIobixBKSxufWZ1bmN0aW9uIENyKEEpe3JldHVybiBBcnJheS5wcm90b3R5cGUuY29uY2F0LmFwcGx5KFtdLEEpfWZ1bmN0aW9uIFdlKEEpe2xldCBlPUEubWFwKHdBKTtyZXR1cm5bZS5tYXAodD0+dFswXSksQ3IoZS5tYXAodD0+dFsxXSkpXX12YXIgdmU9bmV3IFdlYWtNYXA7ZnVuY3Rpb24gWkEoQSxlKXtyZXR1cm4gdmUuc2V0KEEsZSksQX1mdW5jdGlvbiBjcihBKXtyZXR1cm4gT2JqZWN0LmFzc2lnbihBLHtbSmVdOiEwfSl9ZnVuY3Rpb24gd0EoQSl7Zm9yKGxldFtlLHRdb2YgSGUpaWYodC5jYW5IYW5kbGUoQSkpe2xldFtyLG5dPXQuc2VyaWFsaXplKEEpO3JldHVyblt7dHlwZToiSEFORExFUiIsbmFtZTplLHZhbHVlOnJ9LG5dfXJldHVyblt7dHlwZToiUkFXIix2YWx1ZTpBfSx2ZS5nZXQoQSl8fFtdXX1mdW5jdGlvbiBLKEEpe3N3aXRjaChBLnR5cGUpe2Nhc2UiSEFORExFUiI6cmV0dXJuIEhlLmdldChBLm5hbWUpLmRlc2VyaWFsaXplKEEudmFsdWUpO2Nhc2UiUkFXIjpyZXR1cm4gQS52YWx1ZX19ZnVuY3Rpb24gXyhBLGUsdCl7cmV0dXJuIG5ldyBQcm9taXNlKHI9PntsZXQgbj1CcigpO0EuYWRkRXZlbnRMaXN0ZW5lcigibWVzc2FnZSIsZnVuY3Rpb24gbyhpKXshaS5kYXRhfHwhaS5kYXRhLmlkfHxpLmRhdGEuaWQhPT1ufHwoQS5yZW1vdmVFdmVudExpc3RlbmVyKCJtZXNzYWdlIixvKSxyKGkuZGF0YSkpfSksQS5zdGFydCYmQS5zdGFydCgpLEEucG9zdE1lc3NhZ2UoT2JqZWN0LmFzc2lnbih7aWQ6bn0sZSksdCl9KX1mdW5jdGlvbiBCcigpe3JldHVybiBuZXcgQXJyYXkoNCkuZmlsbCgwKS5tYXAoKCk9Pk1hdGguZmxvb3IoTWF0aC5yYW5kb20oKSpOdW1iZXIuTUFYX1NBRkVfSU5URUdFUikudG9TdHJpbmcoMTYpKS5qb2luKCItIil9ZnVuY3Rpb24gYUEoQSxlKXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gQS5hcHBseShlLGFyZ3VtZW50cyl9fXZhcnt0b1N0cmluZzp1cn09T2JqZWN0LnByb3RvdHlwZSx7Z2V0UHJvdG90eXBlT2Y6JEF9PU9iamVjdCxSQT0oQT0+ZT0+e2xldCB0PXVyLmNhbGwoZSk7cmV0dXJuIEFbdF18fChBW3RdPXQuc2xpY2UoOCwtMSkudG9Mb3dlckNhc2UoKSl9KShPYmplY3QuY3JlYXRlKG51bGwpKSxQPUE9PihBPUEudG9Mb3dlckNhc2UoKSxlPT5SQShlKT09PUEpLGJBPUE9PmU9PnR5cGVvZiBlPT09QSx7aXNBcnJheTp6fT1BcnJheSxzQT1iQSgidW5kZWZpbmVkIik7ZnVuY3Rpb24gRXIoQSl7cmV0dXJuIEEhPT1udWxsJiYhc0EoQSkmJkEuY29uc3RydWN0b3IhPT1udWxsJiYhc0EoQS5jb25zdHJ1Y3RvcikmJk4oQS5jb25zdHJ1Y3Rvci5pc0J1ZmZlcikmJkEuY29uc3RydWN0b3IuaXNCdWZmZXIoQSl9dmFyIFplPVAoIkFycmF5QnVmZmVyIik7ZnVuY3Rpb24gcHIoQSl7bGV0IGU7cmV0dXJuIHR5cGVvZiBBcnJheUJ1ZmZlcjwidSImJkFycmF5QnVmZmVyLmlzVmlldz9lPUFycmF5QnVmZmVyLmlzVmlldyhBKTplPUEmJkEuYnVmZmVyJiZaZShBLmJ1ZmZlciksZX12YXIgUXI9YkEoInN0cmluZyIpLE49YkEoImZ1bmN0aW9uIiksVmU9YkEoIm51bWJlciIpLFNBPUE9PkEhPT1udWxsJiZ0eXBlb2YgQT09Im9iamVjdCIsbXI9QT0+QT09PSEwfHxBPT09ITEsREE9QT0+e2lmKFJBKEEpIT09Im9iamVjdCIpcmV0dXJuITE7bGV0IGU9JEEoQSk7cmV0dXJuKGU9PT1udWxsfHxlPT09T2JqZWN0LnByb3RvdHlwZXx8T2JqZWN0LmdldFByb3RvdHlwZU9mKGUpPT09bnVsbCkmJiEoU3ltYm9sLnRvU3RyaW5nVGFnIGluIEEpJiYhKFN5bWJvbC5pdGVyYXRvciBpbiBBKX0sZHI9UCgiRGF0ZSIpLHlyPVAoIkZpbGUiKSxocj1QKCJCbG9iIiksd3I9UCgiRmlsZUxpc3QiKSxEcj1BPT5TQShBKSYmTihBLnBpcGUpLFJyPUE9PntsZXQgZTtyZXR1cm4gQSYmKHR5cGVvZiBGb3JtRGF0YT09ImZ1bmN0aW9uIiYmQSBpbnN0YW5jZW9mIEZvcm1EYXRhfHxOKEEuYXBwZW5kKSYmKChlPVJBKEEpKT09PSJmb3JtZGF0YSJ8fGU9PT0ib2JqZWN0IiYmTihBLnRvU3RyaW5nKSYmQS50b1N0cmluZygpPT09IltvYmplY3QgRm9ybURhdGFdIikpfSxicj1QKCJVUkxTZWFyY2hQYXJhbXMiKSxbU3Isa3IsRnIsVXJdPVsiUmVhZGFibGVTdHJlYW0iLCJSZXF1ZXN0IiwiUmVzcG9uc2UiLCJIZWFkZXJzIl0ubWFwKFApLFRyPUE9PkEudHJpbT9BLnRyaW0oKTpBLnJlcGxhY2UoL15bXHNcdUZFRkZceEEwXSt8W1xzXHVGRUZGXHhBMF0rJC9nLCIiKTtmdW5jdGlvbiBJQShBLGUse2FsbE93bktleXM6dD0hMX09e30pe2lmKEE9PT1udWxsfHx0eXBlb2YgQT4idSIpcmV0dXJuO2xldCByLG47aWYodHlwZW9mIEEhPSJvYmplY3QiJiYoQT1bQV0pLHooQSkpZm9yKHI9MCxuPUEubGVuZ3RoO3I8bjtyKyspZS5jYWxsKG51bGwsQVtyXSxyLEEpO2Vsc2V7bGV0IG89dD9PYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhBKTpPYmplY3Qua2V5cyhBKSxpPW8ubGVuZ3RoLGY7Zm9yKHI9MDtyPGk7cisrKWY9b1tyXSxlLmNhbGwobnVsbCxBW2ZdLGYsQSl9fWZ1bmN0aW9uIFhlKEEsZSl7ZT1lLnRvTG93ZXJDYXNlKCk7bGV0IHQ9T2JqZWN0LmtleXMoQSkscj10Lmxlbmd0aCxuO2Zvcig7ci0tID4wOylpZihuPXRbcl0sZT09PW4udG9Mb3dlckNhc2UoKSlyZXR1cm4gbjtyZXR1cm4gbnVsbH12YXIgdj10eXBlb2YgZ2xvYmFsVGhpczwidSI/Z2xvYmFsVGhpczp0eXBlb2Ygc2VsZjwidSI/c2VsZjp0eXBlb2Ygd2luZG93PCJ1Ij93aW5kb3c6Z2xvYmFsLCRlPUE9PiFzQShBKSYmQSE9PXY7ZnVuY3Rpb24gWEEoKXtsZXR7Y2FzZWxlc3M6QX09JGUodGhpcykmJnRoaXN8fHt9LGU9e30sdD0ocixuKT0+e2xldCBvPUEmJlhlKGUsbil8fG47REEoZVtvXSkmJkRBKHIpP2Vbb109WEEoZVtvXSxyKTpEQShyKT9lW29dPVhBKHt9LHIpOnoocik/ZVtvXT1yLnNsaWNlKCk6ZVtvXT1yfTtmb3IobGV0IHI9MCxuPWFyZ3VtZW50cy5sZW5ndGg7cjxuO3IrKylhcmd1bWVudHNbcl0mJklBKGFyZ3VtZW50c1tyXSx0KTtyZXR1cm4gZX12YXIgTnI9KEEsZSx0LHthbGxPd25LZXlzOnJ9PXt9KT0+KElBKGUsKG4sbyk9Pnt0JiZOKG4pP0Fbb109YUEobix0KTpBW29dPW59LHthbGxPd25LZXlzOnJ9KSxBKSxMcj1BPT4oQS5jaGFyQ29kZUF0KDApPT09NjUyNzkmJihBPUEuc2xpY2UoMSkpLEEpLFByPShBLGUsdCxyKT0+e0EucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoZS5wcm90b3R5cGUsciksQS5wcm90b3R5cGUuY29uc3RydWN0b3I9QSxPYmplY3QuZGVmaW5lUHJvcGVydHkoQSwic3VwZXIiLHt2YWx1ZTplLnByb3RvdHlwZX0pLHQmJk9iamVjdC5hc3NpZ24oQS5wcm90b3R5cGUsdCl9LHhyPShBLGUsdCxyKT0+e2xldCBuLG8saSxmPXt9O2lmKGU9ZXx8e30sQT09bnVsbClyZXR1cm4gZTtkb3tmb3Iobj1PYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhBKSxvPW4ubGVuZ3RoO28tLSA+MDspaT1uW29dLCghcnx8cihpLEEsZSkpJiYhZltpXSYmKGVbaV09QVtpXSxmW2ldPSEwKTtBPXQhPT0hMSYmJEEoQSl9d2hpbGUoQSYmKCF0fHx0KEEsZSkpJiZBIT09T2JqZWN0LnByb3RvdHlwZSk7cmV0dXJuIGV9LE9yPShBLGUsdCk9PntBPVN0cmluZyhBKSwodD09PXZvaWQgMHx8dD5BLmxlbmd0aCkmJih0PUEubGVuZ3RoKSx0LT1lLmxlbmd0aDtsZXQgcj1BLmluZGV4T2YoZSx0KTtyZXR1cm4gciE9PS0xJiZyPT09dH0sR3I9QT0+e2lmKCFBKXJldHVybiBudWxsO2lmKHooQSkpcmV0dXJuIEE7bGV0IGU9QS5sZW5ndGg7aWYoIVZlKGUpKXJldHVybiBudWxsO2xldCB0PW5ldyBBcnJheShlKTtmb3IoO2UtLSA+MDspdFtlXT1BW2VdO3JldHVybiB0fSxXcj0oQT0+ZT0+QSYmZSBpbnN0YW5jZW9mIEEpKHR5cGVvZiBVaW50OEFycmF5PCJ1IiYmJEEoVWludDhBcnJheSkpLEpyPShBLGUpPT57bGV0IHI9KEEmJkFbU3ltYm9sLml0ZXJhdG9yXSkuY2FsbChBKSxuO2Zvcig7KG49ci5uZXh0KCkpJiYhbi5kb25lOyl7bGV0IG89bi52YWx1ZTtlLmNhbGwoQSxvWzBdLG9bMV0pfX0sTXI9KEEsZSk9PntsZXQgdCxyPVtdO2Zvcig7KHQ9QS5leGVjKGUpKSE9PW51bGw7KXIucHVzaCh0KTtyZXR1cm4gcn0sSHI9UCgiSFRNTEZvcm1FbGVtZW50IikscXI9QT0+QS50b0xvd2VyQ2FzZSgpLnJlcGxhY2UoL1stX1xzXShbYS16XGRdKShcdyopL2csZnVuY3Rpb24odCxyLG4pe3JldHVybiByLnRvVXBwZXJDYXNlKCkrbn0pLF9lPSgoe2hhc093blByb3BlcnR5OkF9KT0+KGUsdCk9PkEuY2FsbChlLHQpKShPYmplY3QucHJvdG90eXBlKSxZcj1QKCJSZWdFeHAiKSxBdD0oQSxlKT0+e2xldCB0PU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKEEpLHI9e307SUEodCwobixvKT0+e2xldCBpOyhpPWUobixvLEEpKSE9PSExJiYocltvXT1pfHxuKX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKEEscil9LEtyPUE9PntBdChBLChlLHQpPT57aWYoTihBKSYmWyJhcmd1bWVudHMiLCJjYWxsZXIiLCJjYWxsZWUiXS5pbmRleE9mKHQpIT09LTEpcmV0dXJuITE7bGV0IHI9QVt0XTtpZihOKHIpKXtpZihlLmVudW1lcmFibGU9ITEsIndyaXRhYmxlImluIGUpe2Uud3JpdGFibGU9ITE7cmV0dXJufWUuc2V0fHwoZS5zZXQ9KCk9Pnt0aHJvdyBFcnJvcigiQ2FuIG5vdCByZXdyaXRlIHJlYWQtb25seSBtZXRob2QgJyIrdCsiJyIpfSl9fSl9LHZyPShBLGUpPT57bGV0IHQ9e30scj1uPT57bi5mb3JFYWNoKG89Pnt0W29dPSEwfSl9O3JldHVybiB6KEEpP3IoQSk6cihTdHJpbmcoQSkuc3BsaXQoZSkpLHR9LGpyPSgpPT57fSxfcj0oQSxlKT0+QSE9bnVsbCYmTnVtYmVyLmlzRmluaXRlKEE9K0EpP0E6ZSxWQT0iYWJjZGVmZ2hpamtsbW5vcHFyc3R1dnd4eXoiLHplPSIwMTIzNDU2Nzg5IixldD17RElHSVQ6emUsQUxQSEE6VkEsQUxQSEFfRElHSVQ6VkErVkEudG9VcHBlckNhc2UoKSt6ZX0senI9KEE9MTYsZT1ldC5BTFBIQV9ESUdJVCk9PntsZXQgdD0iIix7bGVuZ3RoOnJ9PWU7Zm9yKDtBLS07KXQrPWVbTWF0aC5yYW5kb20oKSpyfDBdO3JldHVybiB0fTtmdW5jdGlvbiBacihBKXtyZXR1cm4hIShBJiZOKEEuYXBwZW5kKSYmQVtTeW1ib2wudG9TdHJpbmdUYWddPT09IkZvcm1EYXRhIiYmQVtTeW1ib2wuaXRlcmF0b3JdKX12YXIgVnI9QT0+e2xldCBlPW5ldyBBcnJheSgxMCksdD0ocixuKT0+e2lmKFNBKHIpKXtpZihlLmluZGV4T2Yocik+PTApcmV0dXJuO2lmKCEoInRvSlNPTiJpbiByKSl7ZVtuXT1yO2xldCBvPXoocik/W106e307cmV0dXJuIElBKHIsKGksZik9PntsZXQgYz10KGksbisxKTshc0EoYykmJihvW2ZdPWMpfSksZVtuXT12b2lkIDAsb319cmV0dXJuIHJ9O3JldHVybiB0KEEsMCl9LFhyPVAoIkFzeW5jRnVuY3Rpb24iKSwkcj1BPT5BJiYoU0EoQSl8fE4oQSkpJiZOKEEudGhlbikmJk4oQS5jYXRjaCksdHQ9KChBLGUpPT5BP3NldEltbWVkaWF0ZTplPygodCxyKT0+KHYuYWRkRXZlbnRMaXN0ZW5lcigibWVzc2FnZSIsKHtzb3VyY2U6bixkYXRhOm99KT0+e249PT12JiZvPT09dCYmci5sZW5ndGgmJnIuc2hpZnQoKSgpfSwhMSksbj0+e3IucHVzaChuKSx2LnBvc3RNZXNzYWdlKHQsIioiKX0pKShgYXhpb3NAJHtNYXRoLnJhbmRvbSgpfWAsW10pOnQ9PnNldFRpbWVvdXQodCkpKHR5cGVvZiBzZXRJbW1lZGlhdGU9PSJmdW5jdGlvbiIsTih2LnBvc3RNZXNzYWdlKSksQW89dHlwZW9mIHF1ZXVlTWljcm90YXNrPCJ1Ij9xdWV1ZU1pY3JvdGFzay5iaW5kKHYpOnR5cGVvZiBwcm9jZXNzPCJ1IiYmcHJvY2Vzcy5uZXh0VGlja3x8dHQsZz17aXNBcnJheTp6LGlzQXJyYXlCdWZmZXI6WmUsaXNCdWZmZXI6RXIsaXNGb3JtRGF0YTpScixpc0FycmF5QnVmZmVyVmlldzpwcixpc1N0cmluZzpRcixpc051bWJlcjpWZSxpc0Jvb2xlYW46bXIsaXNPYmplY3Q6U0EsaXNQbGFpbk9iamVjdDpEQSxpc1JlYWRhYmxlU3RyZWFtOlNyLGlzUmVxdWVzdDprcixpc1Jlc3BvbnNlOkZyLGlzSGVhZGVyczpVcixpc1VuZGVmaW5lZDpzQSxpc0RhdGU6ZHIsaXNGaWxlOnlyLGlzQmxvYjpocixpc1JlZ0V4cDpZcixpc0Z1bmN0aW9uOk4saXNTdHJlYW06RHIsaXNVUkxTZWFyY2hQYXJhbXM6YnIsaXNUeXBlZEFycmF5OldyLGlzRmlsZUxpc3Q6d3IsZm9yRWFjaDpJQSxtZXJnZTpYQSxleHRlbmQ6TnIsdHJpbTpUcixzdHJpcEJPTTpMcixpbmhlcml0czpQcix0b0ZsYXRPYmplY3Q6eHIsa2luZE9mOlJBLGtpbmRPZlRlc3Q6UCxlbmRzV2l0aDpPcix0b0FycmF5OkdyLGZvckVhY2hFbnRyeTpKcixtYXRjaEFsbDpNcixpc0hUTUxGb3JtOkhyLGhhc093blByb3BlcnR5Ol9lLGhhc093blByb3A6X2UscmVkdWNlRGVzY3JpcHRvcnM6QXQsZnJlZXplTWV0aG9kczpLcix0b09iamVjdFNldDp2cix0b0NhbWVsQ2FzZTpxcixub29wOmpyLHRvRmluaXRlTnVtYmVyOl9yLGZpbmRLZXk6WGUsZ2xvYmFsOnYsaXNDb250ZXh0RGVmaW5lZDokZSxBTFBIQUJFVDpldCxnZW5lcmF0ZVN0cmluZzp6cixpc1NwZWNDb21wbGlhbnRGb3JtOlpyLHRvSlNPTk9iamVjdDpWcixpc0FzeW5jRm46WHIsaXNUaGVuYWJsZTokcixzZXRJbW1lZGlhdGU6dHQsYXNhcDpBb307ZnVuY3Rpb24gWihBLGUsdCxyLG4pe0Vycm9yLmNhbGwodGhpcyksRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2U/RXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UodGhpcyx0aGlzLmNvbnN0cnVjdG9yKTp0aGlzLnN0YWNrPW5ldyBFcnJvcigpLnN0YWNrLHRoaXMubWVzc2FnZT1BLHRoaXMubmFtZT0iQXhpb3NFcnJvciIsZSYmKHRoaXMuY29kZT1lKSx0JiYodGhpcy5jb25maWc9dCksciYmKHRoaXMucmVxdWVzdD1yKSxuJiYodGhpcy5yZXNwb25zZT1uKX1nLmluaGVyaXRzKFosRXJyb3Ise3RvSlNPTjpmdW5jdGlvbigpe3JldHVybnttZXNzYWdlOnRoaXMubWVzc2FnZSxuYW1lOnRoaXMubmFtZSxkZXNjcmlwdGlvbjp0aGlzLmRlc2NyaXB0aW9uLG51bWJlcjp0aGlzLm51bWJlcixmaWxlTmFtZTp0aGlzLmZpbGVOYW1lLGxpbmVOdW1iZXI6dGhpcy5saW5lTnVtYmVyLGNvbHVtbk51bWJlcjp0aGlzLmNvbHVtbk51bWJlcixzdGFjazp0aGlzLnN0YWNrLGNvbmZpZzpnLnRvSlNPTk9iamVjdCh0aGlzLmNvbmZpZyksY29kZTp0aGlzLmNvZGUsc3RhdHVzOnRoaXMucmVzcG9uc2UmJnRoaXMucmVzcG9uc2Uuc3RhdHVzP3RoaXMucmVzcG9uc2Uuc3RhdHVzOm51bGx9fX0pO3ZhciBydD1aLnByb3RvdHlwZSxvdD17fTtbIkVSUl9CQURfT1BUSU9OX1ZBTFVFIiwiRVJSX0JBRF9PUFRJT04iLCJFQ09OTkFCT1JURUQiLCJFVElNRURPVVQiLCJFUlJfTkVUV09SSyIsIkVSUl9GUl9UT09fTUFOWV9SRURJUkVDVFMiLCJFUlJfREVQUkVDQVRFRCIsIkVSUl9CQURfUkVTUE9OU0UiLCJFUlJfQkFEX1JFUVVFU1QiLCJFUlJfQ0FOQ0VMRUQiLCJFUlJfTk9UX1NVUFBPUlQiLCJFUlJfSU5WQUxJRF9VUkwiXS5mb3JFYWNoKEE9PntvdFtBXT17dmFsdWU6QX19KTtPYmplY3QuZGVmaW5lUHJvcGVydGllcyhaLG90KTtPYmplY3QuZGVmaW5lUHJvcGVydHkocnQsImlzQXhpb3NFcnJvciIse3ZhbHVlOiEwfSk7Wi5mcm9tPShBLGUsdCxyLG4sbyk9PntsZXQgaT1PYmplY3QuY3JlYXRlKHJ0KTtyZXR1cm4gZy50b0ZsYXRPYmplY3QoQSxpLGZ1bmN0aW9uKGMpe3JldHVybiBjIT09RXJyb3IucHJvdG90eXBlfSxmPT5mIT09ImlzQXhpb3NFcnJvciIpLFouY2FsbChpLEEubWVzc2FnZSxlLHQscixuKSxpLmNhdXNlPUEsaS5uYW1lPUEubmFtZSxvJiZPYmplY3QuYXNzaWduKGksbyksaX07dmFyIFE9Wjt2YXIga0E9bnVsbDtmdW5jdGlvbiBBZShBKXtyZXR1cm4gZy5pc1BsYWluT2JqZWN0KEEpfHxnLmlzQXJyYXkoQSl9ZnVuY3Rpb24gaXQoQSl7cmV0dXJuIGcuZW5kc1dpdGgoQSwiW10iKT9BLnNsaWNlKDAsLTIpOkF9ZnVuY3Rpb24gbnQoQSxlLHQpe3JldHVybiBBP0EuY29uY2F0KGUpLm1hcChmdW5jdGlvbihuLG8pe3JldHVybiBuPWl0KG4pLCF0JiZvPyJbIituKyJdIjpufSkuam9pbih0PyIuIjoiIik6ZX1mdW5jdGlvbiBlbyhBKXtyZXR1cm4gZy5pc0FycmF5KEEpJiYhQS5zb21lKEFlKX12YXIgdG89Zy50b0ZsYXRPYmplY3QoZyx7fSxudWxsLGZ1bmN0aW9uKGUpe3JldHVybi9eaXNbQS1aXS8udGVzdChlKX0pO2Z1bmN0aW9uIHJvKEEsZSx0KXtpZighZy5pc09iamVjdChBKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJ0YXJnZXQgbXVzdCBiZSBhbiBvYmplY3QiKTtlPWV8fG5ldyhrQXx8Rm9ybURhdGEpLHQ9Zy50b0ZsYXRPYmplY3QodCx7bWV0YVRva2VuczohMCxkb3RzOiExLGluZGV4ZXM6ITF9LCExLGZ1bmN0aW9uKHAsQil7cmV0dXJuIWcuaXNVbmRlZmluZWQoQltwXSl9KTtsZXQgcj10Lm1ldGFUb2tlbnMsbj10LnZpc2l0b3J8fGEsbz10LmRvdHMsaT10LmluZGV4ZXMsYz0odC5CbG9ifHx0eXBlb2YgQmxvYjwidSImJkJsb2IpJiZnLmlzU3BlY0NvbXBsaWFudEZvcm0oZSk7aWYoIWcuaXNGdW5jdGlvbihuKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJ2aXNpdG9yIG11c3QgYmUgYSBmdW5jdGlvbiIpO2Z1bmN0aW9uIGwoQyl7aWYoQz09PW51bGwpcmV0dXJuIiI7aWYoZy5pc0RhdGUoQykpcmV0dXJuIEMudG9JU09TdHJpbmcoKTtpZighYyYmZy5pc0Jsb2IoQykpdGhyb3cgbmV3IFEoIkJsb2IgaXMgbm90IHN1cHBvcnRlZC4gVXNlIGEgQnVmZmVyIGluc3RlYWQuIik7cmV0dXJuIGcuaXNBcnJheUJ1ZmZlcihDKXx8Zy5pc1R5cGVkQXJyYXkoQyk/YyYmdHlwZW9mIEJsb2I9PSJmdW5jdGlvbiI/bmV3IEJsb2IoW0NdKTpCdWZmZXIuZnJvbShDKTpDfWZ1bmN0aW9uIGEoQyxwLEIpe2xldCBkPUM7aWYoQyYmIUImJnR5cGVvZiBDPT0ib2JqZWN0Iil7aWYoZy5lbmRzV2l0aChwLCJ7fSIpKXA9cj9wOnAuc2xpY2UoMCwtMiksQz1KU09OLnN0cmluZ2lmeShDKTtlbHNlIGlmKGcuaXNBcnJheShDKSYmZW8oQyl8fChnLmlzRmlsZUxpc3QoQyl8fGcuZW5kc1dpdGgocCwiW10iKSkmJihkPWcudG9BcnJheShDKSkpcmV0dXJuIHA9aXQocCksZC5mb3JFYWNoKGZ1bmN0aW9uKG0sTCl7IShnLmlzVW5kZWZpbmVkKG0pfHxtPT09bnVsbCkmJmUuYXBwZW5kKGk9PT0hMD9udChbcF0sTCxvKTppPT09bnVsbD9wOnArIltdIixsKG0pKX0pLCExfXJldHVybiBBZShDKT8hMDooZS5hcHBlbmQobnQoQixwLG8pLGwoQykpLCExKX1sZXQgST1bXSx1PU9iamVjdC5hc3NpZ24odG8se2RlZmF1bHRWaXNpdG9yOmEsY29udmVydFZhbHVlOmwsaXNWaXNpdGFibGU6QWV9KTtmdW5jdGlvbiBzKEMscCl7aWYoIWcuaXNVbmRlZmluZWQoQykpe2lmKEkuaW5kZXhPZihDKSE9PS0xKXRocm93IEVycm9yKCJDaXJjdWxhciByZWZlcmVuY2UgZGV0ZWN0ZWQgaW4gIitwLmpvaW4oIi4iKSk7SS5wdXNoKEMpLGcuZm9yRWFjaChDLGZ1bmN0aW9uKGQsRil7KCEoZy5pc1VuZGVmaW5lZChkKXx8ZD09PW51bGwpJiZuLmNhbGwoZSxkLGcuaXNTdHJpbmcoRik/Ri50cmltKCk6RixwLHUpKT09PSEwJiZzKGQscD9wLmNvbmNhdChGKTpbRl0pfSksSS5wb3AoKX19aWYoIWcuaXNPYmplY3QoQSkpdGhyb3cgbmV3IFR5cGVFcnJvcigiZGF0YSBtdXN0IGJlIGFuIG9iamVjdCIpO3JldHVybiBzKEEpLGV9dmFyIE09cm87ZnVuY3Rpb24gYXQoQSl7bGV0IGU9eyIhIjoiJTIxIiwiJyI6IiUyNyIsIigiOiIlMjgiLCIpIjoiJTI5IiwifiI6IiU3RSIsIiUyMCI6IisiLCIlMDAiOiJcMCJ9O3JldHVybiBlbmNvZGVVUklDb21wb25lbnQoQSkucmVwbGFjZSgvWyEnKCl+XXwlMjB8JTAwL2csZnVuY3Rpb24ocil7cmV0dXJuIGVbcl19KX1mdW5jdGlvbiBzdChBLGUpe3RoaXMuX3BhaXJzPVtdLEEmJk0oQSx0aGlzLGUpfXZhciBJdD1zdC5wcm90b3R5cGU7SXQuYXBwZW5kPWZ1bmN0aW9uKGUsdCl7dGhpcy5fcGFpcnMucHVzaChbZSx0XSl9O0l0LnRvU3RyaW5nPWZ1bmN0aW9uKGUpe2xldCB0PWU/ZnVuY3Rpb24ocil7cmV0dXJuIGUuY2FsbCh0aGlzLHIsYXQpfTphdDtyZXR1cm4gdGhpcy5fcGFpcnMubWFwKGZ1bmN0aW9uKG4pe3JldHVybiB0KG5bMF0pKyI9Iit0KG5bMV0pfSwiIikuam9pbigiJiIpfTt2YXIgRkE9c3Q7ZnVuY3Rpb24gb28oQSl7cmV0dXJuIGVuY29kZVVSSUNvbXBvbmVudChBKS5yZXBsYWNlKC8lM0EvZ2ksIjoiKS5yZXBsYWNlKC8lMjQvZywiJCIpLnJlcGxhY2UoLyUyQy9naSwiLCIpLnJlcGxhY2UoLyUyMC9nLCIrIikucmVwbGFjZSgvJTVCL2dpLCJbIikucmVwbGFjZSgvJTVEL2dpLCJdIil9ZnVuY3Rpb24gZ0EoQSxlLHQpe2lmKCFlKXJldHVybiBBO2xldCByPXQmJnQuZW5jb2RlfHxvbyxuPXQmJnQuc2VyaWFsaXplLG87aWYobj9vPW4oZSx0KTpvPWcuaXNVUkxTZWFyY2hQYXJhbXMoZSk/ZS50b1N0cmluZygpOm5ldyBGQShlLHQpLnRvU3RyaW5nKHIpLG8pe2xldCBpPUEuaW5kZXhPZigiIyIpO2khPT0tMSYmKEE9QS5zbGljZSgwLGkpKSxBKz0oQS5pbmRleE9mKCI/Iik9PT0tMT8iPyI6IiYiKStvfXJldHVybiBBfXZhciBlZT1jbGFzc3tjb25zdHJ1Y3Rvcigpe3RoaXMuaGFuZGxlcnM9W119dXNlKGUsdCxyKXtyZXR1cm4gdGhpcy5oYW5kbGVycy5wdXNoKHtmdWxmaWxsZWQ6ZSxyZWplY3RlZDp0LHN5bmNocm9ub3VzOnI/ci5zeW5jaHJvbm91czohMSxydW5XaGVuOnI/ci5ydW5XaGVuOm51bGx9KSx0aGlzLmhhbmRsZXJzLmxlbmd0aC0xfWVqZWN0KGUpe3RoaXMuaGFuZGxlcnNbZV0mJih0aGlzLmhhbmRsZXJzW2VdPW51bGwpfWNsZWFyKCl7dGhpcy5oYW5kbGVycyYmKHRoaXMuaGFuZGxlcnM9W10pfWZvckVhY2goZSl7Zy5mb3JFYWNoKHRoaXMuaGFuZGxlcnMsZnVuY3Rpb24ocil7ciE9PW51bGwmJmUocil9KX19LHRlPWVlO3ZhciBVQT17c2lsZW50SlNPTlBhcnNpbmc6ITAsZm9yY2VkSlNPTlBhcnNpbmc6ITAsY2xhcmlmeVRpbWVvdXRFcnJvcjohMX07dmFyIGd0PXR5cGVvZiBVUkxTZWFyY2hQYXJhbXM8InUiP1VSTFNlYXJjaFBhcmFtczpGQTt2YXIgbHQ9dHlwZW9mIEZvcm1EYXRhPCJ1Ij9Gb3JtRGF0YTpudWxsO3ZhciBmdD10eXBlb2YgQmxvYjwidSI/QmxvYjpudWxsO3ZhciBDdD17aXNCcm93c2VyOiEwLGNsYXNzZXM6e1VSTFNlYXJjaFBhcmFtczpndCxGb3JtRGF0YTpsdCxCbG9iOmZ0fSxwcm90b2NvbHM6WyJodHRwIiwiaHR0cHMiLCJmaWxlIiwiYmxvYiIsInVybCIsImRhdGEiXX07dmFyIG9lPXt9OyR0KG9lLHtoYXNCcm93c2VyRW52OigpPT5yZSxoYXNTdGFuZGFyZEJyb3dzZXJFbnY6KCk9Pm5vLGhhc1N0YW5kYXJkQnJvd3NlcldlYldvcmtlckVudjooKT0+aW8sb3JpZ2luOigpPT5hb30pO3ZhciByZT10eXBlb2Ygd2luZG93PCJ1IiYmdHlwZW9mIGRvY3VtZW50PCJ1Iixubz0oQT0+cmUmJlsiUmVhY3ROYXRpdmUiLCJOYXRpdmVTY3JpcHQiLCJOUyJdLmluZGV4T2YoQSk8MCkodHlwZW9mIG5hdmlnYXRvcjwidSImJm5hdmlnYXRvci5wcm9kdWN0KSxpbz10eXBlb2YgV29ya2VyR2xvYmFsU2NvcGU8InUiJiZzZWxmIGluc3RhbmNlb2YgV29ya2VyR2xvYmFsU2NvcGUmJnR5cGVvZiBzZWxmLmltcG9ydFNjcmlwdHM9PSJmdW5jdGlvbiIsYW89cmUmJndpbmRvdy5sb2NhdGlvbi5ocmVmfHwiaHR0cDovL2xvY2FsaG9zdCI7dmFyIGs9ey4uLm9lLC4uLkN0fTtmdW5jdGlvbiBuZShBLGUpe3JldHVybiBNKEEsbmV3IGsuY2xhc3Nlcy5VUkxTZWFyY2hQYXJhbXMsT2JqZWN0LmFzc2lnbih7dmlzaXRvcjpmdW5jdGlvbih0LHIsbixvKXtyZXR1cm4gay5pc05vZGUmJmcuaXNCdWZmZXIodCk/KHRoaXMuYXBwZW5kKHIsdC50b1N0cmluZygiYmFzZTY0IikpLCExKTpvLmRlZmF1bHRWaXNpdG9yLmFwcGx5KHRoaXMsYXJndW1lbnRzKX19LGUpKX1mdW5jdGlvbiBzbyhBKXtyZXR1cm4gZy5tYXRjaEFsbCgvXHcrfFxbKFx3KildL2csQSkubWFwKGU9PmVbMF09PT0iW10iPyIiOmVbMV18fGVbMF0pfWZ1bmN0aW9uIElvKEEpe2xldCBlPXt9LHQ9T2JqZWN0LmtleXMoQSkscixuPXQubGVuZ3RoLG87Zm9yKHI9MDtyPG47cisrKW89dFtyXSxlW29dPUFbb107cmV0dXJuIGV9ZnVuY3Rpb24gZ28oQSl7ZnVuY3Rpb24gZSh0LHIsbixvKXtsZXQgaT10W28rK107aWYoaT09PSJfX3Byb3RvX18iKXJldHVybiEwO2xldCBmPU51bWJlci5pc0Zpbml0ZSgraSksYz1vPj10Lmxlbmd0aDtyZXR1cm4gaT0haSYmZy5pc0FycmF5KG4pP24ubGVuZ3RoOmksYz8oZy5oYXNPd25Qcm9wKG4saSk/bltpXT1bbltpXSxyXTpuW2ldPXIsIWYpOigoIW5baV18fCFnLmlzT2JqZWN0KG5baV0pKSYmKG5baV09W10pLGUodCxyLG5baV0sbykmJmcuaXNBcnJheShuW2ldKSYmKG5baV09SW8obltpXSkpLCFmKX1pZihnLmlzRm9ybURhdGEoQSkmJmcuaXNGdW5jdGlvbihBLmVudHJpZXMpKXtsZXQgdD17fTtyZXR1cm4gZy5mb3JFYWNoRW50cnkoQSwocixuKT0+e2Uoc28ociksbix0LDApfSksdH1yZXR1cm4gbnVsbH12YXIgVEE9Z287ZnVuY3Rpb24gbG8oQSxlLHQpe2lmKGcuaXNTdHJpbmcoQSkpdHJ5e3JldHVybihlfHxKU09OLnBhcnNlKShBKSxnLnRyaW0oQSl9Y2F0Y2gocil7aWYoci5uYW1lIT09IlN5bnRheEVycm9yIil0aHJvdyByfXJldHVybih0fHxKU09OLnN0cmluZ2lmeSkoQSl9dmFyIGllPXt0cmFuc2l0aW9uYWw6VUEsYWRhcHRlcjpbInhociIsImh0dHAiLCJmZXRjaCJdLHRyYW5zZm9ybVJlcXVlc3Q6W2Z1bmN0aW9uKGUsdCl7bGV0IHI9dC5nZXRDb250ZW50VHlwZSgpfHwiIixuPXIuaW5kZXhPZigiYXBwbGljYXRpb24vanNvbiIpPi0xLG89Zy5pc09iamVjdChlKTtpZihvJiZnLmlzSFRNTEZvcm0oZSkmJihlPW5ldyBGb3JtRGF0YShlKSksZy5pc0Zvcm1EYXRhKGUpKXJldHVybiBuP0pTT04uc3RyaW5naWZ5KFRBKGUpKTplO2lmKGcuaXNBcnJheUJ1ZmZlcihlKXx8Zy5pc0J1ZmZlcihlKXx8Zy5pc1N0cmVhbShlKXx8Zy5pc0ZpbGUoZSl8fGcuaXNCbG9iKGUpfHxnLmlzUmVhZGFibGVTdHJlYW0oZSkpcmV0dXJuIGU7aWYoZy5pc0FycmF5QnVmZmVyVmlldyhlKSlyZXR1cm4gZS5idWZmZXI7aWYoZy5pc1VSTFNlYXJjaFBhcmFtcyhlKSlyZXR1cm4gdC5zZXRDb250ZW50VHlwZSgiYXBwbGljYXRpb24veC13d3ctZm9ybS11cmxlbmNvZGVkO2NoYXJzZXQ9dXRmLTgiLCExKSxlLnRvU3RyaW5nKCk7bGV0IGY7aWYobyl7aWYoci5pbmRleE9mKCJhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQiKT4tMSlyZXR1cm4gbmUoZSx0aGlzLmZvcm1TZXJpYWxpemVyKS50b1N0cmluZygpO2lmKChmPWcuaXNGaWxlTGlzdChlKSl8fHIuaW5kZXhPZigibXVsdGlwYXJ0L2Zvcm0tZGF0YSIpPi0xKXtsZXQgYz10aGlzLmVudiYmdGhpcy5lbnYuRm9ybURhdGE7cmV0dXJuIE0oZj97ImZpbGVzW10iOmV9OmUsYyYmbmV3IGMsdGhpcy5mb3JtU2VyaWFsaXplcil9fXJldHVybiBvfHxuPyh0LnNldENvbnRlbnRUeXBlKCJhcHBsaWNhdGlvbi9qc29uIiwhMSksbG8oZSkpOmV9XSx0cmFuc2Zvcm1SZXNwb25zZTpbZnVuY3Rpb24oZSl7bGV0IHQ9dGhpcy50cmFuc2l0aW9uYWx8fGllLnRyYW5zaXRpb25hbCxyPXQmJnQuZm9yY2VkSlNPTlBhcnNpbmcsbj10aGlzLnJlc3BvbnNlVHlwZT09PSJqc29uIjtpZihnLmlzUmVzcG9uc2UoZSl8fGcuaXNSZWFkYWJsZVN0cmVhbShlKSlyZXR1cm4gZTtpZihlJiZnLmlzU3RyaW5nKGUpJiYociYmIXRoaXMucmVzcG9uc2VUeXBlfHxuKSl7bGV0IGk9ISh0JiZ0LnNpbGVudEpTT05QYXJzaW5nKSYmbjt0cnl7cmV0dXJuIEpTT04ucGFyc2UoZSl9Y2F0Y2goZil7aWYoaSl0aHJvdyBmLm5hbWU9PT0iU3ludGF4RXJyb3IiP1EuZnJvbShmLFEuRVJSX0JBRF9SRVNQT05TRSx0aGlzLG51bGwsdGhpcy5yZXNwb25zZSk6Zn19cmV0dXJuIGV9XSx0aW1lb3V0OjAseHNyZkNvb2tpZU5hbWU6IlhTUkYtVE9LRU4iLHhzcmZIZWFkZXJOYW1lOiJYLVhTUkYtVE9LRU4iLG1heENvbnRlbnRMZW5ndGg6LTEsbWF4Qm9keUxlbmd0aDotMSxlbnY6e0Zvcm1EYXRhOmsuY2xhc3Nlcy5Gb3JtRGF0YSxCbG9iOmsuY2xhc3Nlcy5CbG9ifSx2YWxpZGF0ZVN0YXR1czpmdW5jdGlvbihlKXtyZXR1cm4gZT49MjAwJiZlPDMwMH0saGVhZGVyczp7Y29tbW9uOntBY2NlcHQ6ImFwcGxpY2F0aW9uL2pzb24sIHRleHQvcGxhaW4sICovKiIsIkNvbnRlbnQtVHlwZSI6dm9pZCAwfX19O2cuZm9yRWFjaChbImRlbGV0ZSIsImdldCIsImhlYWQiLCJwb3N0IiwicHV0IiwicGF0Y2giXSxBPT57aWUuaGVhZGVyc1tBXT17fX0pO3ZhciBWPWllO3ZhciBmbz1nLnRvT2JqZWN0U2V0KFsiYWdlIiwiYXV0aG9yaXphdGlvbiIsImNvbnRlbnQtbGVuZ3RoIiwiY29udGVudC10eXBlIiwiZXRhZyIsImV4cGlyZXMiLCJmcm9tIiwiaG9zdCIsImlmLW1vZGlmaWVkLXNpbmNlIiwiaWYtdW5tb2RpZmllZC1zaW5jZSIsImxhc3QtbW9kaWZpZWQiLCJsb2NhdGlvbiIsIm1heC1mb3J3YXJkcyIsInByb3h5LWF1dGhvcml6YXRpb24iLCJyZWZlcmVyIiwicmV0cnktYWZ0ZXIiLCJ1c2VyLWFnZW50Il0pLGN0PUE9PntsZXQgZT17fSx0LHIsbjtyZXR1cm4gQSYmQS5zcGxpdChgCmApLmZvckVhY2goZnVuY3Rpb24oaSl7bj1pLmluZGV4T2YoIjoiKSx0PWkuc3Vic3RyaW5nKDAsbikudHJpbSgpLnRvTG93ZXJDYXNlKCkscj1pLnN1YnN0cmluZyhuKzEpLnRyaW0oKSwhKCF0fHxlW3RdJiZmb1t0XSkmJih0PT09InNldC1jb29raWUiP2VbdF0/ZVt0XS5wdXNoKHIpOmVbdF09W3JdOmVbdF09ZVt0XT9lW3RdKyIsICIrcjpyKX0pLGV9O3ZhciBCdD1TeW1ib2woImludGVybmFscyIpO2Z1bmN0aW9uIGxBKEEpe3JldHVybiBBJiZTdHJpbmcoQSkudHJpbSgpLnRvTG93ZXJDYXNlKCl9ZnVuY3Rpb24gTkEoQSl7cmV0dXJuIEE9PT0hMXx8QT09bnVsbD9BOmcuaXNBcnJheShBKT9BLm1hcChOQSk6U3RyaW5nKEEpfWZ1bmN0aW9uIENvKEEpe2xldCBlPU9iamVjdC5jcmVhdGUobnVsbCksdD0vKFteXHMsOz1dKylccyooPzo9XHMqKFteLDtdKykpPy9nLHI7Zm9yKDtyPXQuZXhlYyhBKTspZVtyWzFdXT1yWzJdO3JldHVybiBlfXZhciBjbz1BPT4vXlstX2EtekEtWjAtOV5gfH4sISMkJSYnKisuXSskLy50ZXN0KEEudHJpbSgpKTtmdW5jdGlvbiBhZShBLGUsdCxyLG4pe2lmKGcuaXNGdW5jdGlvbihyKSlyZXR1cm4gci5jYWxsKHRoaXMsZSx0KTtpZihuJiYoZT10KSwhIWcuaXNTdHJpbmcoZSkpe2lmKGcuaXNTdHJpbmcocikpcmV0dXJuIGUuaW5kZXhPZihyKSE9PS0xO2lmKGcuaXNSZWdFeHAocikpcmV0dXJuIHIudGVzdChlKX19ZnVuY3Rpb24gQm8oQSl7cmV0dXJuIEEudHJpbSgpLnRvTG93ZXJDYXNlKCkucmVwbGFjZSgvKFthLXpcZF0pKFx3KikvZywoZSx0LHIpPT50LnRvVXBwZXJDYXNlKCkrcil9ZnVuY3Rpb24gdW8oQSxlKXtsZXQgdD1nLnRvQ2FtZWxDYXNlKCIgIitlKTtbImdldCIsInNldCIsImhhcyJdLmZvckVhY2gocj0+e09iamVjdC5kZWZpbmVQcm9wZXJ0eShBLHIrdCx7dmFsdWU6ZnVuY3Rpb24obixvLGkpe3JldHVybiB0aGlzW3JdLmNhbGwodGhpcyxlLG4sbyxpKX0sY29uZmlndXJhYmxlOiEwfSl9KX12YXIgWD1jbGFzc3tjb25zdHJ1Y3RvcihlKXtlJiZ0aGlzLnNldChlKX1zZXQoZSx0LHIpe2xldCBuPXRoaXM7ZnVuY3Rpb24gbyhmLGMsbCl7bGV0IGE9bEEoYyk7aWYoIWEpdGhyb3cgbmV3IEVycm9yKCJoZWFkZXIgbmFtZSBtdXN0IGJlIGEgbm9uLWVtcHR5IHN0cmluZyIpO2xldCBJPWcuZmluZEtleShuLGEpOyghSXx8bltJXT09PXZvaWQgMHx8bD09PSEwfHxsPT09dm9pZCAwJiZuW0ldIT09ITEpJiYobltJfHxjXT1OQShmKSl9bGV0IGk9KGYsYyk9PmcuZm9yRWFjaChmLChsLGEpPT5vKGwsYSxjKSk7aWYoZy5pc1BsYWluT2JqZWN0KGUpfHxlIGluc3RhbmNlb2YgdGhpcy5jb25zdHJ1Y3RvcilpKGUsdCk7ZWxzZSBpZihnLmlzU3RyaW5nKGUpJiYoZT1lLnRyaW0oKSkmJiFjbyhlKSlpKGN0KGUpLHQpO2Vsc2UgaWYoZy5pc0hlYWRlcnMoZSkpZm9yKGxldFtmLGNdb2YgZS5lbnRyaWVzKCkpbyhjLGYscik7ZWxzZSBlIT1udWxsJiZvKHQsZSxyKTtyZXR1cm4gdGhpc31nZXQoZSx0KXtpZihlPWxBKGUpLGUpe2xldCByPWcuZmluZEtleSh0aGlzLGUpO2lmKHIpe2xldCBuPXRoaXNbcl07aWYoIXQpcmV0dXJuIG47aWYodD09PSEwKXJldHVybiBDbyhuKTtpZihnLmlzRnVuY3Rpb24odCkpcmV0dXJuIHQuY2FsbCh0aGlzLG4scik7aWYoZy5pc1JlZ0V4cCh0KSlyZXR1cm4gdC5leGVjKG4pO3Rocm93IG5ldyBUeXBlRXJyb3IoInBhcnNlciBtdXN0IGJlIGJvb2xlYW58cmVnZXhwfGZ1bmN0aW9uIil9fX1oYXMoZSx0KXtpZihlPWxBKGUpLGUpe2xldCByPWcuZmluZEtleSh0aGlzLGUpO3JldHVybiEhKHImJnRoaXNbcl0hPT12b2lkIDAmJighdHx8YWUodGhpcyx0aGlzW3JdLHIsdCkpKX1yZXR1cm4hMX1kZWxldGUoZSx0KXtsZXQgcj10aGlzLG49ITE7ZnVuY3Rpb24gbyhpKXtpZihpPWxBKGkpLGkpe2xldCBmPWcuZmluZEtleShyLGkpO2YmJighdHx8YWUocixyW2ZdLGYsdCkpJiYoZGVsZXRlIHJbZl0sbj0hMCl9fXJldHVybiBnLmlzQXJyYXkoZSk/ZS5mb3JFYWNoKG8pOm8oZSksbn1jbGVhcihlKXtsZXQgdD1PYmplY3Qua2V5cyh0aGlzKSxyPXQubGVuZ3RoLG49ITE7Zm9yKDtyLS07KXtsZXQgbz10W3JdOyghZXx8YWUodGhpcyx0aGlzW29dLG8sZSwhMCkpJiYoZGVsZXRlIHRoaXNbb10sbj0hMCl9cmV0dXJuIG59bm9ybWFsaXplKGUpe2xldCB0PXRoaXMscj17fTtyZXR1cm4gZy5mb3JFYWNoKHRoaXMsKG4sbyk9PntsZXQgaT1nLmZpbmRLZXkocixvKTtpZihpKXt0W2ldPU5BKG4pLGRlbGV0ZSB0W29dO3JldHVybn1sZXQgZj1lP0JvKG8pOlN0cmluZyhvKS50cmltKCk7ZiE9PW8mJmRlbGV0ZSB0W29dLHRbZl09TkEobikscltmXT0hMH0pLHRoaXN9Y29uY2F0KC4uLmUpe3JldHVybiB0aGlzLmNvbnN0cnVjdG9yLmNvbmNhdCh0aGlzLC4uLmUpfXRvSlNPTihlKXtsZXQgdD1PYmplY3QuY3JlYXRlKG51bGwpO3JldHVybiBnLmZvckVhY2godGhpcywocixuKT0+e3IhPW51bGwmJnIhPT0hMSYmKHRbbl09ZSYmZy5pc0FycmF5KHIpP3Iuam9pbigiLCAiKTpyKX0pLHR9W1N5bWJvbC5pdGVyYXRvcl0oKXtyZXR1cm4gT2JqZWN0LmVudHJpZXModGhpcy50b0pTT04oKSlbU3ltYm9sLml0ZXJhdG9yXSgpfXRvU3RyaW5nKCl7cmV0dXJuIE9iamVjdC5lbnRyaWVzKHRoaXMudG9KU09OKCkpLm1hcCgoW2UsdF0pPT5lKyI6ICIrdCkuam9pbihgCmApfWdldFtTeW1ib2wudG9TdHJpbmdUYWddKCl7cmV0dXJuIkF4aW9zSGVhZGVycyJ9c3RhdGljIGZyb20oZSl7cmV0dXJuIGUgaW5zdGFuY2VvZiB0aGlzP2U6bmV3IHRoaXMoZSl9c3RhdGljIGNvbmNhdChlLC4uLnQpe2xldCByPW5ldyB0aGlzKGUpO3JldHVybiB0LmZvckVhY2gobj0+ci5zZXQobikpLHJ9c3RhdGljIGFjY2Vzc29yKGUpe2xldCByPSh0aGlzW0J0XT10aGlzW0J0XT17YWNjZXNzb3JzOnt9fSkuYWNjZXNzb3JzLG49dGhpcy5wcm90b3R5cGU7ZnVuY3Rpb24gbyhpKXtsZXQgZj1sQShpKTtyW2ZdfHwodW8obixpKSxyW2ZdPSEwKX1yZXR1cm4gZy5pc0FycmF5KGUpP2UuZm9yRWFjaChvKTpvKGUpLHRoaXN9fTtYLmFjY2Vzc29yKFsiQ29udGVudC1UeXBlIiwiQ29udGVudC1MZW5ndGgiLCJBY2NlcHQiLCJBY2NlcHQtRW5jb2RpbmciLCJVc2VyLUFnZW50IiwiQXV0aG9yaXphdGlvbiJdKTtnLnJlZHVjZURlc2NyaXB0b3JzKFgucHJvdG90eXBlLCh7dmFsdWU6QX0sZSk9PntsZXQgdD1lWzBdLnRvVXBwZXJDYXNlKCkrZS5zbGljZSgxKTtyZXR1cm57Z2V0OigpPT5BLHNldChyKXt0aGlzW3RdPXJ9fX0pO2cuZnJlZXplTWV0aG9kcyhYKTt2YXIgUz1YO2Z1bmN0aW9uIGZBKEEsZSl7bGV0IHQ9dGhpc3x8VixyPWV8fHQsbj1TLmZyb20oci5oZWFkZXJzKSxvPXIuZGF0YTtyZXR1cm4gZy5mb3JFYWNoKEEsZnVuY3Rpb24oZil7bz1mLmNhbGwodCxvLG4ubm9ybWFsaXplKCksZT9lLnN0YXR1czp2b2lkIDApfSksbi5ub3JtYWxpemUoKSxvfWZ1bmN0aW9uIENBKEEpe3JldHVybiEhKEEmJkEuX19DQU5DRUxfXyl9ZnVuY3Rpb24gdXQoQSxlLHQpe1EuY2FsbCh0aGlzLEE/PyJjYW5jZWxlZCIsUS5FUlJfQ0FOQ0VMRUQsZSx0KSx0aGlzLm5hbWU9IkNhbmNlbGVkRXJyb3IifWcuaW5oZXJpdHModXQsUSx7X19DQU5DRUxfXzohMH0pO3ZhciBKPXV0O2Z1bmN0aW9uIGNBKEEsZSx0KXtsZXQgcj10LmNvbmZpZy52YWxpZGF0ZVN0YXR1czshdC5zdGF0dXN8fCFyfHxyKHQuc3RhdHVzKT9BKHQpOmUobmV3IFEoIlJlcXVlc3QgZmFpbGVkIHdpdGggc3RhdHVzIGNvZGUgIit0LnN0YXR1cyxbUS5FUlJfQkFEX1JFUVVFU1QsUS5FUlJfQkFEX1JFU1BPTlNFXVtNYXRoLmZsb29yKHQuc3RhdHVzLzEwMCktNF0sdC5jb25maWcsdC5yZXF1ZXN0LHQpKX1mdW5jdGlvbiBzZShBKXtsZXQgZT0vXihbLStcd117MSwyNX0pKDo/XC9cL3w6KS8uZXhlYyhBKTtyZXR1cm4gZSYmZVsxXXx8IiJ9ZnVuY3Rpb24gRW8oQSxlKXtBPUF8fDEwO2xldCB0PW5ldyBBcnJheShBKSxyPW5ldyBBcnJheShBKSxuPTAsbz0wLGk7cmV0dXJuIGU9ZSE9PXZvaWQgMD9lOjFlMyxmdW5jdGlvbihjKXtsZXQgbD1EYXRlLm5vdygpLGE9cltvXTtpfHwoaT1sKSx0W25dPWMscltuXT1sO2xldCBJPW8sdT0wO2Zvcig7SSE9PW47KXUrPXRbSSsrXSxJPUklQTtpZihuPShuKzEpJUEsbj09PW8mJihvPShvKzEpJUEpLGwtaTxlKXJldHVybjtsZXQgcz1hJiZsLWE7cmV0dXJuIHM/TWF0aC5yb3VuZCh1KjFlMy9zKTp2b2lkIDB9fXZhciBFdD1FbztmdW5jdGlvbiBwbyhBLGUpe2xldCB0PTAscj0xZTMvZSxuLG8saT0obCxhPURhdGUubm93KCkpPT57dD1hLG49bnVsbCxvJiYoY2xlYXJUaW1lb3V0KG8pLG89bnVsbCksQS5hcHBseShudWxsLGwpfTtyZXR1cm5bKC4uLmwpPT57bGV0IGE9RGF0ZS5ub3coKSxJPWEtdDtJPj1yP2kobCxhKToobj1sLG98fChvPXNldFRpbWVvdXQoKCk9PntvPW51bGwsaShuKX0sci1JKSkpfSwoKT0+biYmaShuKV19dmFyIHB0PXBvO3ZhciAkPShBLGUsdD0zKT0+e2xldCByPTAsbj1FdCg1MCwyNTApO3JldHVybiBwdChvPT57bGV0IGk9by5sb2FkZWQsZj1vLmxlbmd0aENvbXB1dGFibGU/by50b3RhbDp2b2lkIDAsYz1pLXIsbD1uKGMpLGE9aTw9ZjtyPWk7bGV0IEk9e2xvYWRlZDppLHRvdGFsOmYscHJvZ3Jlc3M6Zj9pL2Y6dm9pZCAwLGJ5dGVzOmMscmF0ZTpsfHx2b2lkIDAsZXN0aW1hdGVkOmwmJmYmJmE/KGYtaSkvbDp2b2lkIDAsZXZlbnQ6byxsZW5ndGhDb21wdXRhYmxlOmYhPW51bGwsW2U/ImRvd25sb2FkIjoidXBsb2FkIl06ITB9O0EoSSl9LHQpfSxJZT0oQSxlKT0+e2xldCB0PUEhPW51bGw7cmV0dXJuW3I9PmVbMF0oe2xlbmd0aENvbXB1dGFibGU6dCx0b3RhbDpBLGxvYWRlZDpyfSksZVsxXV19LGdlPUE9PiguLi5lKT0+Zy5hc2FwKCgpPT5BKC4uLmUpKTt2YXIgUXQ9ay5oYXNTdGFuZGFyZEJyb3dzZXJFbnY/ZnVuY3Rpb24oKXtsZXQgZT0vKG1zaWV8dHJpZGVudCkvaS50ZXN0KG5hdmlnYXRvci51c2VyQWdlbnQpLHQ9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiYSIpLHI7ZnVuY3Rpb24gbihvKXtsZXQgaT1vO3JldHVybiBlJiYodC5zZXRBdHRyaWJ1dGUoImhyZWYiLGkpLGk9dC5ocmVmKSx0LnNldEF0dHJpYnV0ZSgiaHJlZiIsaSkse2hyZWY6dC5ocmVmLHByb3RvY29sOnQucHJvdG9jb2w/dC5wcm90b2NvbC5yZXBsYWNlKC86JC8sIiIpOiIiLGhvc3Q6dC5ob3N0LHNlYXJjaDp0LnNlYXJjaD90LnNlYXJjaC5yZXBsYWNlKC9eXD8vLCIiKToiIixoYXNoOnQuaGFzaD90Lmhhc2gucmVwbGFjZSgvXiMvLCIiKToiIixob3N0bmFtZTp0Lmhvc3RuYW1lLHBvcnQ6dC5wb3J0LHBhdGhuYW1lOnQucGF0aG5hbWUuY2hhckF0KDApPT09Ii8iP3QucGF0aG5hbWU6Ii8iK3QucGF0aG5hbWV9fXJldHVybiByPW4od2luZG93LmxvY2F0aW9uLmhyZWYpLGZ1bmN0aW9uKGkpe2xldCBmPWcuaXNTdHJpbmcoaSk/bihpKTppO3JldHVybiBmLnByb3RvY29sPT09ci5wcm90b2NvbCYmZi5ob3N0PT09ci5ob3N0fX0oKTpmdW5jdGlvbigpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiEwfX0oKTt2YXIgbXQ9ay5oYXNTdGFuZGFyZEJyb3dzZXJFbnY/e3dyaXRlKEEsZSx0LHIsbixvKXtsZXQgaT1bQSsiPSIrZW5jb2RlVVJJQ29tcG9uZW50KGUpXTtnLmlzTnVtYmVyKHQpJiZpLnB1c2goImV4cGlyZXM9IituZXcgRGF0ZSh0KS50b0dNVFN0cmluZygpKSxnLmlzU3RyaW5nKHIpJiZpLnB1c2goInBhdGg9IityKSxnLmlzU3RyaW5nKG4pJiZpLnB1c2goImRvbWFpbj0iK24pLG89PT0hMCYmaS5wdXNoKCJzZWN1cmUiKSxkb2N1bWVudC5jb29raWU9aS5qb2luKCI7ICIpfSxyZWFkKEEpe2xldCBlPWRvY3VtZW50LmNvb2tpZS5tYXRjaChuZXcgUmVnRXhwKCIoXnw7XFxzKikoIitBKyIpPShbXjtdKikiKSk7cmV0dXJuIGU/ZGVjb2RlVVJJQ29tcG9uZW50KGVbM10pOm51bGx9LHJlbW92ZShBKXt0aGlzLndyaXRlKEEsIiIsRGF0ZS5ub3coKS04NjRlNSl9fTp7d3JpdGUoKXt9LHJlYWQoKXtyZXR1cm4gbnVsbH0scmVtb3ZlKCl7fX07ZnVuY3Rpb24gbGUoQSl7cmV0dXJuL14oW2Etel1bYS16XGQrXC0uXSo6KT9cL1wvL2kudGVzdChBKX1mdW5jdGlvbiBmZShBLGUpe3JldHVybiBlP0EucmVwbGFjZSgvXC8/XC8kLywiIikrIi8iK2UucmVwbGFjZSgvXlwvKy8sIiIpOkF9ZnVuY3Rpb24gQkEoQSxlKXtyZXR1cm4gQSYmIWxlKGUpP2ZlKEEsZSk6ZX12YXIgZHQ9QT0+QSBpbnN0YW5jZW9mIFM/ey4uLkF9OkE7ZnVuY3Rpb24geChBLGUpe2U9ZXx8e307bGV0IHQ9e307ZnVuY3Rpb24gcihsLGEsSSl7cmV0dXJuIGcuaXNQbGFpbk9iamVjdChsKSYmZy5pc1BsYWluT2JqZWN0KGEpP2cubWVyZ2UuY2FsbCh7Y2FzZWxlc3M6SX0sbCxhKTpnLmlzUGxhaW5PYmplY3QoYSk/Zy5tZXJnZSh7fSxhKTpnLmlzQXJyYXkoYSk/YS5zbGljZSgpOmF9ZnVuY3Rpb24gbihsLGEsSSl7aWYoZy5pc1VuZGVmaW5lZChhKSl7aWYoIWcuaXNVbmRlZmluZWQobCkpcmV0dXJuIHIodm9pZCAwLGwsSSl9ZWxzZSByZXR1cm4gcihsLGEsSSl9ZnVuY3Rpb24gbyhsLGEpe2lmKCFnLmlzVW5kZWZpbmVkKGEpKXJldHVybiByKHZvaWQgMCxhKX1mdW5jdGlvbiBpKGwsYSl7aWYoZy5pc1VuZGVmaW5lZChhKSl7aWYoIWcuaXNVbmRlZmluZWQobCkpcmV0dXJuIHIodm9pZCAwLGwpfWVsc2UgcmV0dXJuIHIodm9pZCAwLGEpfWZ1bmN0aW9uIGYobCxhLEkpe2lmKEkgaW4gZSlyZXR1cm4gcihsLGEpO2lmKEkgaW4gQSlyZXR1cm4gcih2b2lkIDAsbCl9bGV0IGM9e3VybDpvLG1ldGhvZDpvLGRhdGE6byxiYXNlVVJMOmksdHJhbnNmb3JtUmVxdWVzdDppLHRyYW5zZm9ybVJlc3BvbnNlOmkscGFyYW1zU2VyaWFsaXplcjppLHRpbWVvdXQ6aSx0aW1lb3V0TWVzc2FnZTppLHdpdGhDcmVkZW50aWFsczppLHdpdGhYU1JGVG9rZW46aSxhZGFwdGVyOmkscmVzcG9uc2VUeXBlOmkseHNyZkNvb2tpZU5hbWU6aSx4c3JmSGVhZGVyTmFtZTppLG9uVXBsb2FkUHJvZ3Jlc3M6aSxvbkRvd25sb2FkUHJvZ3Jlc3M6aSxkZWNvbXByZXNzOmksbWF4Q29udGVudExlbmd0aDppLG1heEJvZHlMZW5ndGg6aSxiZWZvcmVSZWRpcmVjdDppLHRyYW5zcG9ydDppLGh0dHBBZ2VudDppLGh0dHBzQWdlbnQ6aSxjYW5jZWxUb2tlbjppLHNvY2tldFBhdGg6aSxyZXNwb25zZUVuY29kaW5nOmksdmFsaWRhdGVTdGF0dXM6ZixoZWFkZXJzOihsLGEpPT5uKGR0KGwpLGR0KGEpLCEwKX07cmV0dXJuIGcuZm9yRWFjaChPYmplY3Qua2V5cyhPYmplY3QuYXNzaWduKHt9LEEsZSkpLGZ1bmN0aW9uKGEpe2xldCBJPWNbYV18fG4sdT1JKEFbYV0sZVthXSxhKTtnLmlzVW5kZWZpbmVkKHUpJiZJIT09Znx8KHRbYV09dSl9KSx0fXZhciBMQT1BPT57bGV0IGU9eCh7fSxBKSx7ZGF0YTp0LHdpdGhYU1JGVG9rZW46cix4c3JmSGVhZGVyTmFtZTpuLHhzcmZDb29raWVOYW1lOm8saGVhZGVyczppLGF1dGg6Zn09ZTtlLmhlYWRlcnM9aT1TLmZyb20oaSksZS51cmw9Z0EoQkEoZS5iYXNlVVJMLGUudXJsKSxBLnBhcmFtcyxBLnBhcmFtc1NlcmlhbGl6ZXIpLGYmJmkuc2V0KCJBdXRob3JpemF0aW9uIiwiQmFzaWMgIitidG9hKChmLnVzZXJuYW1lfHwiIikrIjoiKyhmLnBhc3N3b3JkP3VuZXNjYXBlKGVuY29kZVVSSUNvbXBvbmVudChmLnBhc3N3b3JkKSk6IiIpKSk7bGV0IGM7aWYoZy5pc0Zvcm1EYXRhKHQpKXtpZihrLmhhc1N0YW5kYXJkQnJvd3NlckVudnx8ay5oYXNTdGFuZGFyZEJyb3dzZXJXZWJXb3JrZXJFbnYpaS5zZXRDb250ZW50VHlwZSh2b2lkIDApO2Vsc2UgaWYoKGM9aS5nZXRDb250ZW50VHlwZSgpKSE9PSExKXtsZXRbbCwuLi5hXT1jP2Muc3BsaXQoIjsiKS5tYXAoST0+SS50cmltKCkpLmZpbHRlcihCb29sZWFuKTpbXTtpLnNldENvbnRlbnRUeXBlKFtsfHwibXVsdGlwYXJ0L2Zvcm0tZGF0YSIsLi4uYV0uam9pbigiOyAiKSl9fWlmKGsuaGFzU3RhbmRhcmRCcm93c2VyRW52JiYociYmZy5pc0Z1bmN0aW9uKHIpJiYocj1yKGUpKSxyfHxyIT09ITEmJlF0KGUudXJsKSkpe2xldCBsPW4mJm8mJm10LnJlYWQobyk7bCYmaS5zZXQobixsKX1yZXR1cm4gZX07dmFyIFFvPXR5cGVvZiBYTUxIdHRwUmVxdWVzdDwidSIseXQ9UW8mJmZ1bmN0aW9uKEEpe3JldHVybiBuZXcgUHJvbWlzZShmdW5jdGlvbih0LHIpe2xldCBuPUxBKEEpLG89bi5kYXRhLGk9Uy5mcm9tKG4uaGVhZGVycykubm9ybWFsaXplKCkse3Jlc3BvbnNlVHlwZTpmLG9uVXBsb2FkUHJvZ3Jlc3M6YyxvbkRvd25sb2FkUHJvZ3Jlc3M6bH09bixhLEksdSxzLEM7ZnVuY3Rpb24gcCgpe3MmJnMoKSxDJiZDKCksbi5jYW5jZWxUb2tlbiYmbi5jYW5jZWxUb2tlbi51bnN1YnNjcmliZShhKSxuLnNpZ25hbCYmbi5zaWduYWwucmVtb3ZlRXZlbnRMaXN0ZW5lcigiYWJvcnQiLGEpfWxldCBCPW5ldyBYTUxIdHRwUmVxdWVzdDtCLm9wZW4obi5tZXRob2QudG9VcHBlckNhc2UoKSxuLnVybCwhMCksQi50aW1lb3V0PW4udGltZW91dDtmdW5jdGlvbiBkKCl7aWYoIUIpcmV0dXJuO2xldCBtPVMuZnJvbSgiZ2V0QWxsUmVzcG9uc2VIZWFkZXJzImluIEImJkIuZ2V0QWxsUmVzcG9uc2VIZWFkZXJzKCkpLFk9e2RhdGE6IWZ8fGY9PT0idGV4dCJ8fGY9PT0ianNvbiI/Qi5yZXNwb25zZVRleHQ6Qi5yZXNwb25zZSxzdGF0dXM6Qi5zdGF0dXMsc3RhdHVzVGV4dDpCLnN0YXR1c1RleHQsaGVhZGVyczptLGNvbmZpZzpBLHJlcXVlc3Q6Qn07Y0EoZnVuY3Rpb24oRyl7dChHKSxwKCl9LGZ1bmN0aW9uKEcpe3IoRykscCgpfSxZKSxCPW51bGx9Im9ubG9hZGVuZCJpbiBCP0Iub25sb2FkZW5kPWQ6Qi5vbnJlYWR5c3RhdGVjaGFuZ2U9ZnVuY3Rpb24oKXshQnx8Qi5yZWFkeVN0YXRlIT09NHx8Qi5zdGF0dXM9PT0wJiYhKEIucmVzcG9uc2VVUkwmJkIucmVzcG9uc2VVUkwuaW5kZXhPZigiZmlsZToiKT09PTApfHxzZXRUaW1lb3V0KGQpfSxCLm9uYWJvcnQ9ZnVuY3Rpb24oKXtCJiYocihuZXcgUSgiUmVxdWVzdCBhYm9ydGVkIixRLkVDT05OQUJPUlRFRCxBLEIpKSxCPW51bGwpfSxCLm9uZXJyb3I9ZnVuY3Rpb24oKXtyKG5ldyBRKCJOZXR3b3JrIEVycm9yIixRLkVSUl9ORVRXT1JLLEEsQikpLEI9bnVsbH0sQi5vbnRpbWVvdXQ9ZnVuY3Rpb24oKXtsZXQgTD1uLnRpbWVvdXQ/InRpbWVvdXQgb2YgIituLnRpbWVvdXQrIm1zIGV4Y2VlZGVkIjoidGltZW91dCBleGNlZWRlZCIsWT1uLnRyYW5zaXRpb25hbHx8VUE7bi50aW1lb3V0RXJyb3JNZXNzYWdlJiYoTD1uLnRpbWVvdXRFcnJvck1lc3NhZ2UpLHIobmV3IFEoTCxZLmNsYXJpZnlUaW1lb3V0RXJyb3I/US5FVElNRURPVVQ6US5FQ09OTkFCT1JURUQsQSxCKSksQj1udWxsfSxvPT09dm9pZCAwJiZpLnNldENvbnRlbnRUeXBlKG51bGwpLCJzZXRSZXF1ZXN0SGVhZGVyImluIEImJmcuZm9yRWFjaChpLnRvSlNPTigpLGZ1bmN0aW9uKEwsWSl7Qi5zZXRSZXF1ZXN0SGVhZGVyKFksTCl9KSxnLmlzVW5kZWZpbmVkKG4ud2l0aENyZWRlbnRpYWxzKXx8KEIud2l0aENyZWRlbnRpYWxzPSEhbi53aXRoQ3JlZGVudGlhbHMpLGYmJmYhPT0ianNvbiImJihCLnJlc3BvbnNlVHlwZT1uLnJlc3BvbnNlVHlwZSksbCYmKFt1LENdPSQobCwhMCksQi5hZGRFdmVudExpc3RlbmVyKCJwcm9ncmVzcyIsdSkpLGMmJkIudXBsb2FkJiYoW0ksc109JChjKSxCLnVwbG9hZC5hZGRFdmVudExpc3RlbmVyKCJwcm9ncmVzcyIsSSksQi51cGxvYWQuYWRkRXZlbnRMaXN0ZW5lcigibG9hZGVuZCIscykpLChuLmNhbmNlbFRva2VufHxuLnNpZ25hbCkmJihhPW09PntCJiYocighbXx8bS50eXBlP25ldyBKKG51bGwsQSxCKTptKSxCLmFib3J0KCksQj1udWxsKX0sbi5jYW5jZWxUb2tlbiYmbi5jYW5jZWxUb2tlbi5zdWJzY3JpYmUoYSksbi5zaWduYWwmJihuLnNpZ25hbC5hYm9ydGVkP2EoKTpuLnNpZ25hbC5hZGRFdmVudExpc3RlbmVyKCJhYm9ydCIsYSkpKTtsZXQgRj1zZShuLnVybCk7aWYoRiYmay5wcm90b2NvbHMuaW5kZXhPZihGKT09PS0xKXtyKG5ldyBRKCJVbnN1cHBvcnRlZCBwcm90b2NvbCAiK0YrIjoiLFEuRVJSX0JBRF9SRVFVRVNULEEpKTtyZXR1cm59Qi5zZW5kKG98fG51bGwpfSl9O3ZhciBtbz0oQSxlKT0+e2xldCB0PW5ldyBBYm9ydENvbnRyb2xsZXIscixuPWZ1bmN0aW9uKGMpe2lmKCFyKXtyPSEwLGkoKTtsZXQgbD1jIGluc3RhbmNlb2YgRXJyb3I/Yzp0aGlzLnJlYXNvbjt0LmFib3J0KGwgaW5zdGFuY2VvZiBRP2w6bmV3IEoobCBpbnN0YW5jZW9mIEVycm9yP2wubWVzc2FnZTpsKSl9fSxvPWUmJnNldFRpbWVvdXQoKCk9PntuKG5ldyBRKGB0aW1lb3V0ICR7ZX0gb2YgbXMgZXhjZWVkZWRgLFEuRVRJTUVET1VUKSl9LGUpLGk9KCk9PntBJiYobyYmY2xlYXJUaW1lb3V0KG8pLG89bnVsbCxBLmZvckVhY2goYz0+e2MmJihjLnJlbW92ZUV2ZW50TGlzdGVuZXI/Yy5yZW1vdmVFdmVudExpc3RlbmVyKCJhYm9ydCIsbik6Yy51bnN1YnNjcmliZShuKSl9KSxBPW51bGwpfTtBLmZvckVhY2goYz0+YyYmYy5hZGRFdmVudExpc3RlbmVyJiZjLmFkZEV2ZW50TGlzdGVuZXIoImFib3J0IixuKSk7bGV0e3NpZ25hbDpmfT10O3JldHVybiBmLnVuc3Vic2NyaWJlPWksW2YsKCk9PntvJiZjbGVhclRpbWVvdXQobyksbz1udWxsfV19LGh0PW1vO3ZhciB5bz1mdW5jdGlvbiooQSxlKXtsZXQgdD1BLmJ5dGVMZW5ndGg7aWYoIWV8fHQ8ZSl7eWllbGQgQTtyZXR1cm59bGV0IHI9MCxuO2Zvcig7cjx0OyluPXIrZSx5aWVsZCBBLnNsaWNlKHIsbikscj1ufSxobz1hc3luYyBmdW5jdGlvbiooQSxlLHQpe2ZvciBhd2FpdChsZXQgciBvZiBBKXlpZWxkKnlvKEFycmF5QnVmZmVyLmlzVmlldyhyKT9yOmF3YWl0IHQoU3RyaW5nKHIpKSxlKX0sQ2U9KEEsZSx0LHIsbik9PntsZXQgbz1obyhBLGUsbiksaT0wLGYsYz1sPT57Znx8KGY9ITAsciYmcihsKSl9O3JldHVybiBuZXcgUmVhZGFibGVTdHJlYW0oe2FzeW5jIHB1bGwobCl7dHJ5e2xldHtkb25lOmEsdmFsdWU6SX09YXdhaXQgby5uZXh0KCk7aWYoYSl7YygpLGwuY2xvc2UoKTtyZXR1cm59bGV0IHU9SS5ieXRlTGVuZ3RoO2lmKHQpe2xldCBzPWkrPXU7dChzKX1sLmVucXVldWUobmV3IFVpbnQ4QXJyYXkoSSkpfWNhdGNoKGEpe3Rocm93IGMoYSksYX19LGNhbmNlbChsKXtyZXR1cm4gYyhsKSxvLnJldHVybigpfX0se2hpZ2hXYXRlck1hcms6Mn0pfTt2YXIgeEE9dHlwZW9mIGZldGNoPT0iZnVuY3Rpb24iJiZ0eXBlb2YgUmVxdWVzdD09ImZ1bmN0aW9uIiYmdHlwZW9mIFJlc3BvbnNlPT0iZnVuY3Rpb24iLER0PXhBJiZ0eXBlb2YgUmVhZGFibGVTdHJlYW09PSJmdW5jdGlvbiIsY2U9eEEmJih0eXBlb2YgVGV4dEVuY29kZXI9PSJmdW5jdGlvbiI/KEE9PmU9PkEuZW5jb2RlKGUpKShuZXcgVGV4dEVuY29kZXIpOmFzeW5jIEE9Pm5ldyBVaW50OEFycmF5KGF3YWl0IG5ldyBSZXNwb25zZShBKS5hcnJheUJ1ZmZlcigpKSksUnQ9KEEsLi4uZSk9Pnt0cnl7cmV0dXJuISFBKC4uLmUpfWNhdGNoe3JldHVybiExfX0sd289RHQmJlJ0KCgpPT57bGV0IEE9ITEsZT1uZXcgUmVxdWVzdChrLm9yaWdpbix7Ym9keTpuZXcgUmVhZGFibGVTdHJlYW0sbWV0aG9kOiJQT1NUIixnZXQgZHVwbGV4KCl7cmV0dXJuIEE9ITAsImhhbGYifX0pLmhlYWRlcnMuaGFzKCJDb250ZW50LVR5cGUiKTtyZXR1cm4gQSYmIWV9KSx3dD02NCoxMDI0LEJlPUR0JiZSdCgoKT0+Zy5pc1JlYWRhYmxlU3RyZWFtKG5ldyBSZXNwb25zZSgiIikuYm9keSkpLFBBPXtzdHJlYW06QmUmJihBPT5BLmJvZHkpfTt4QSYmKEE9PntbInRleHQiLCJhcnJheUJ1ZmZlciIsImJsb2IiLCJmb3JtRGF0YSIsInN0cmVhbSJdLmZvckVhY2goZT0+eyFQQVtlXSYmKFBBW2VdPWcuaXNGdW5jdGlvbihBW2VdKT90PT50W2VdKCk6KHQscik9Pnt0aHJvdyBuZXcgUShgUmVzcG9uc2UgdHlwZSAnJHtlfScgaXMgbm90IHN1cHBvcnRlZGAsUS5FUlJfTk9UX1NVUFBPUlQscil9KX0pfSkobmV3IFJlc3BvbnNlKTt2YXIgRG89YXN5bmMgQT0+e2lmKEE9PW51bGwpcmV0dXJuIDA7aWYoZy5pc0Jsb2IoQSkpcmV0dXJuIEEuc2l6ZTtpZihnLmlzU3BlY0NvbXBsaWFudEZvcm0oQSkpcmV0dXJuKGF3YWl0IG5ldyBSZXF1ZXN0KEEpLmFycmF5QnVmZmVyKCkpLmJ5dGVMZW5ndGg7aWYoZy5pc0FycmF5QnVmZmVyVmlldyhBKXx8Zy5pc0FycmF5QnVmZmVyKEEpKXJldHVybiBBLmJ5dGVMZW5ndGg7aWYoZy5pc1VSTFNlYXJjaFBhcmFtcyhBKSYmKEE9QSsiIiksZy5pc1N0cmluZyhBKSlyZXR1cm4oYXdhaXQgY2UoQSkpLmJ5dGVMZW5ndGh9LFJvPWFzeW5jKEEsZSk9PntsZXQgdD1nLnRvRmluaXRlTnVtYmVyKEEuZ2V0Q29udGVudExlbmd0aCgpKTtyZXR1cm4gdD8/RG8oZSl9LGJ0PXhBJiYoYXN5bmMgQT0+e2xldHt1cmw6ZSxtZXRob2Q6dCxkYXRhOnIsc2lnbmFsOm4sY2FuY2VsVG9rZW46byx0aW1lb3V0Omksb25Eb3dubG9hZFByb2dyZXNzOmYsb25VcGxvYWRQcm9ncmVzczpjLHJlc3BvbnNlVHlwZTpsLGhlYWRlcnM6YSx3aXRoQ3JlZGVudGlhbHM6ST0ic2FtZS1vcmlnaW4iLGZldGNoT3B0aW9uczp1fT1MQShBKTtsPWw/KGwrIiIpLnRvTG93ZXJDYXNlKCk6InRleHQiO2xldFtzLENdPW58fG98fGk/aHQoW24sb10saSk6W10scCxCLGQ9KCk9PnshcCYmc2V0VGltZW91dCgoKT0+e3MmJnMudW5zdWJzY3JpYmUoKX0pLHA9ITB9LEY7dHJ5e2lmKGMmJndvJiZ0IT09ImdldCImJnQhPT0iaGVhZCImJihGPWF3YWl0IFJvKGEscikpIT09MCl7bGV0IE89bmV3IFJlcXVlc3QoZSx7bWV0aG9kOiJQT1NUIixib2R5OnIsZHVwbGV4OiJoYWxmIn0pLEc7aWYoZy5pc0Zvcm1EYXRhKHIpJiYoRz1PLmhlYWRlcnMuZ2V0KCJjb250ZW50LXR5cGUiKSkmJmEuc2V0Q29udGVudFR5cGUoRyksTy5ib2R5KXtsZXRbWUEsUUFdPUllKEYsJChnZShjKSkpO3I9Q2UoTy5ib2R5LHd0LFlBLFFBLGNlKX19Zy5pc1N0cmluZyhJKXx8KEk9ST8iaW5jbHVkZSI6Im9taXQiKSxCPW5ldyBSZXF1ZXN0KGUsey4uLnUsc2lnbmFsOnMsbWV0aG9kOnQudG9VcHBlckNhc2UoKSxoZWFkZXJzOmEubm9ybWFsaXplKCkudG9KU09OKCksYm9keTpyLGR1cGxleDoiaGFsZiIsY3JlZGVudGlhbHM6SX0pO2xldCBtPWF3YWl0IGZldGNoKEIpLEw9QmUmJihsPT09InN0cmVhbSJ8fGw9PT0icmVzcG9uc2UiKTtpZihCZSYmKGZ8fEwpKXtsZXQgTz17fTtbInN0YXR1cyIsInN0YXR1c1RleHQiLCJoZWFkZXJzIl0uZm9yRWFjaChHZT0+e09bR2VdPW1bR2VdfSk7bGV0IEc9Zy50b0Zpbml0ZU51bWJlcihtLmhlYWRlcnMuZ2V0KCJjb250ZW50LWxlbmd0aCIpKSxbWUEsUUFdPWYmJkllKEcsJChnZShmKSwhMCkpfHxbXTttPW5ldyBSZXNwb25zZShDZShtLmJvZHksd3QsWUEsKCk9PntRQSYmUUEoKSxMJiZkKCl9LGNlKSxPKX1sPWx8fCJ0ZXh0IjtsZXQgWT1hd2FpdCBQQVtnLmZpbmRLZXkoUEEsbCl8fCJ0ZXh0Il0obSxBKTtyZXR1cm4hTCYmZCgpLEMmJkMoKSxhd2FpdCBuZXcgUHJvbWlzZSgoTyxHKT0+e2NBKE8sRyx7ZGF0YTpZLGhlYWRlcnM6Uy5mcm9tKG0uaGVhZGVycyksc3RhdHVzOm0uc3RhdHVzLHN0YXR1c1RleHQ6bS5zdGF0dXNUZXh0LGNvbmZpZzpBLHJlcXVlc3Q6Qn0pfSl9Y2F0Y2gobSl7dGhyb3cgZCgpLG0mJm0ubmFtZT09PSJUeXBlRXJyb3IiJiYvZmV0Y2gvaS50ZXN0KG0ubWVzc2FnZSk/T2JqZWN0LmFzc2lnbihuZXcgUSgiTmV0d29yayBFcnJvciIsUS5FUlJfTkVUV09SSyxBLEIpLHtjYXVzZTptLmNhdXNlfHxtfSk6US5mcm9tKG0sbSYmbS5jb2RlLEEsQil9fSk7dmFyIHVlPXtodHRwOmtBLHhocjp5dCxmZXRjaDpidH07Zy5mb3JFYWNoKHVlLChBLGUpPT57aWYoQSl7dHJ5e09iamVjdC5kZWZpbmVQcm9wZXJ0eShBLCJuYW1lIix7dmFsdWU6ZX0pfWNhdGNoe31PYmplY3QuZGVmaW5lUHJvcGVydHkoQSwiYWRhcHRlck5hbWUiLHt2YWx1ZTplfSl9fSk7dmFyIFN0PUE9PmAtICR7QX1gLGJvPUE9PmcuaXNGdW5jdGlvbihBKXx8QT09PW51bGx8fEE9PT0hMSxPQT17Z2V0QWRhcHRlcjpBPT57QT1nLmlzQXJyYXkoQSk/QTpbQV07bGV0e2xlbmd0aDplfT1BLHQscixuPXt9O2ZvcihsZXQgbz0wO288ZTtvKyspe3Q9QVtvXTtsZXQgaTtpZihyPXQsIWJvKHQpJiYocj11ZVsoaT1TdHJpbmcodCkpLnRvTG93ZXJDYXNlKCldLHI9PT12b2lkIDApKXRocm93IG5ldyBRKGBVbmtub3duIGFkYXB0ZXIgJyR7aX0nYCk7aWYocilicmVhaztuW2l8fCIjIitvXT1yfWlmKCFyKXtsZXQgbz1PYmplY3QuZW50cmllcyhuKS5tYXAoKFtmLGNdKT0+YGFkYXB0ZXIgJHtmfSBgKyhjPT09ITE/ImlzIG5vdCBzdXBwb3J0ZWQgYnkgdGhlIGVudmlyb25tZW50IjoiaXMgbm90IGF2YWlsYWJsZSBpbiB0aGUgYnVpbGQiKSksaT1lP28ubGVuZ3RoPjE/YHNpbmNlIDoKYCtvLm1hcChTdCkuam9pbihgCmApOiIgIitTdChvWzBdKToiYXMgbm8gYWRhcHRlciBzcGVjaWZpZWQiO3Rocm93IG5ldyBRKCJUaGVyZSBpcyBubyBzdWl0YWJsZSBhZGFwdGVyIHRvIGRpc3BhdGNoIHRoZSByZXF1ZXN0ICIraSwiRVJSX05PVF9TVVBQT1JUIil9cmV0dXJuIHJ9LGFkYXB0ZXJzOnVlfTtmdW5jdGlvbiBFZShBKXtpZihBLmNhbmNlbFRva2VuJiZBLmNhbmNlbFRva2VuLnRocm93SWZSZXF1ZXN0ZWQoKSxBLnNpZ25hbCYmQS5zaWduYWwuYWJvcnRlZCl0aHJvdyBuZXcgSihudWxsLEEpfWZ1bmN0aW9uIEdBKEEpe3JldHVybiBFZShBKSxBLmhlYWRlcnM9Uy5mcm9tKEEuaGVhZGVycyksQS5kYXRhPWZBLmNhbGwoQSxBLnRyYW5zZm9ybVJlcXVlc3QpLFsicG9zdCIsInB1dCIsInBhdGNoIl0uaW5kZXhPZihBLm1ldGhvZCkhPT0tMSYmQS5oZWFkZXJzLnNldENvbnRlbnRUeXBlKCJhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQiLCExKSxPQS5nZXRBZGFwdGVyKEEuYWRhcHRlcnx8Vi5hZGFwdGVyKShBKS50aGVuKGZ1bmN0aW9uKHIpe3JldHVybiBFZShBKSxyLmRhdGE9ZkEuY2FsbChBLEEudHJhbnNmb3JtUmVzcG9uc2Usciksci5oZWFkZXJzPVMuZnJvbShyLmhlYWRlcnMpLHJ9LGZ1bmN0aW9uKHIpe3JldHVybiBDQShyKXx8KEVlKEEpLHImJnIucmVzcG9uc2UmJihyLnJlc3BvbnNlLmRhdGE9ZkEuY2FsbChBLEEudHJhbnNmb3JtUmVzcG9uc2Usci5yZXNwb25zZSksci5yZXNwb25zZS5oZWFkZXJzPVMuZnJvbShyLnJlc3BvbnNlLmhlYWRlcnMpKSksUHJvbWlzZS5yZWplY3Qocil9KX12YXIgV0E9IjEuNy40Ijt2YXIgcGU9e307WyJvYmplY3QiLCJib29sZWFuIiwibnVtYmVyIiwiZnVuY3Rpb24iLCJzdHJpbmciLCJzeW1ib2wiXS5mb3JFYWNoKChBLGUpPT57cGVbQV09ZnVuY3Rpb24ocil7cmV0dXJuIHR5cGVvZiByPT09QXx8ImEiKyhlPDE/Im4gIjoiICIpK0F9fSk7dmFyIGt0PXt9O3BlLnRyYW5zaXRpb25hbD1mdW5jdGlvbihlLHQscil7ZnVuY3Rpb24gbihvLGkpe3JldHVybiJbQXhpb3MgdiIrV0ErIl0gVHJhbnNpdGlvbmFsIG9wdGlvbiAnIitvKyInIitpKyhyPyIuICIrcjoiIil9cmV0dXJuKG8saSxmKT0+e2lmKGU9PT0hMSl0aHJvdyBuZXcgUShuKGksIiBoYXMgYmVlbiByZW1vdmVkIisodD8iIGluICIrdDoiIikpLFEuRVJSX0RFUFJFQ0FURUQpO3JldHVybiB0JiYha3RbaV0mJihrdFtpXT0hMCxjb25zb2xlLndhcm4obihpLCIgaGFzIGJlZW4gZGVwcmVjYXRlZCBzaW5jZSB2Iit0KyIgYW5kIHdpbGwgYmUgcmVtb3ZlZCBpbiB0aGUgbmVhciBmdXR1cmUiKSkpLGU/ZShvLGksZik6ITB9fTtmdW5jdGlvbiBTbyhBLGUsdCl7aWYodHlwZW9mIEEhPSJvYmplY3QiKXRocm93IG5ldyBRKCJvcHRpb25zIG11c3QgYmUgYW4gb2JqZWN0IixRLkVSUl9CQURfT1BUSU9OX1ZBTFVFKTtsZXQgcj1PYmplY3Qua2V5cyhBKSxuPXIubGVuZ3RoO2Zvcig7bi0tID4wOyl7bGV0IG89cltuXSxpPWVbb107aWYoaSl7bGV0IGY9QVtvXSxjPWY9PT12b2lkIDB8fGkoZixvLEEpO2lmKGMhPT0hMCl0aHJvdyBuZXcgUSgib3B0aW9uICIrbysiIG11c3QgYmUgIitjLFEuRVJSX0JBRF9PUFRJT05fVkFMVUUpO2NvbnRpbnVlfWlmKHQhPT0hMCl0aHJvdyBuZXcgUSgiVW5rbm93biBvcHRpb24gIitvLFEuRVJSX0JBRF9PUFRJT04pfX12YXIgSkE9e2Fzc2VydE9wdGlvbnM6U28sdmFsaWRhdG9yczpwZX07dmFyIEg9SkEudmFsaWRhdG9ycyxBQT1jbGFzc3tjb25zdHJ1Y3RvcihlKXt0aGlzLmRlZmF1bHRzPWUsdGhpcy5pbnRlcmNlcHRvcnM9e3JlcXVlc3Q6bmV3IHRlLHJlc3BvbnNlOm5ldyB0ZX19YXN5bmMgcmVxdWVzdChlLHQpe3RyeXtyZXR1cm4gYXdhaXQgdGhpcy5fcmVxdWVzdChlLHQpfWNhdGNoKHIpe2lmKHIgaW5zdGFuY2VvZiBFcnJvcil7bGV0IG47RXJyb3IuY2FwdHVyZVN0YWNrVHJhY2U/RXJyb3IuY2FwdHVyZVN0YWNrVHJhY2Uobj17fSk6bj1uZXcgRXJyb3I7bGV0IG89bi5zdGFjaz9uLnN0YWNrLnJlcGxhY2UoL14uK1xuLywiIik6IiI7dHJ5e3Iuc3RhY2s/byYmIVN0cmluZyhyLnN0YWNrKS5lbmRzV2l0aChvLnJlcGxhY2UoL14uK1xuLitcbi8sIiIpKSYmKHIuc3RhY2srPWAKYCtvKTpyLnN0YWNrPW99Y2F0Y2h7fX10aHJvdyByfX1fcmVxdWVzdChlLHQpe3R5cGVvZiBlPT0ic3RyaW5nIj8odD10fHx7fSx0LnVybD1lKTp0PWV8fHt9LHQ9eCh0aGlzLmRlZmF1bHRzLHQpO2xldHt0cmFuc2l0aW9uYWw6cixwYXJhbXNTZXJpYWxpemVyOm4saGVhZGVyczpvfT10O3IhPT12b2lkIDAmJkpBLmFzc2VydE9wdGlvbnMocix7c2lsZW50SlNPTlBhcnNpbmc6SC50cmFuc2l0aW9uYWwoSC5ib29sZWFuKSxmb3JjZWRKU09OUGFyc2luZzpILnRyYW5zaXRpb25hbChILmJvb2xlYW4pLGNsYXJpZnlUaW1lb3V0RXJyb3I6SC50cmFuc2l0aW9uYWwoSC5ib29sZWFuKX0sITEpLG4hPW51bGwmJihnLmlzRnVuY3Rpb24obik/dC5wYXJhbXNTZXJpYWxpemVyPXtzZXJpYWxpemU6bn06SkEuYXNzZXJ0T3B0aW9ucyhuLHtlbmNvZGU6SC5mdW5jdGlvbixzZXJpYWxpemU6SC5mdW5jdGlvbn0sITApKSx0Lm1ldGhvZD0odC5tZXRob2R8fHRoaXMuZGVmYXVsdHMubWV0aG9kfHwiZ2V0IikudG9Mb3dlckNhc2UoKTtsZXQgaT1vJiZnLm1lcmdlKG8uY29tbW9uLG9bdC5tZXRob2RdKTtvJiZnLmZvckVhY2goWyJkZWxldGUiLCJnZXQiLCJoZWFkIiwicG9zdCIsInB1dCIsInBhdGNoIiwiY29tbW9uIl0sQz0+e2RlbGV0ZSBvW0NdfSksdC5oZWFkZXJzPVMuY29uY2F0KGksbyk7bGV0IGY9W10sYz0hMDt0aGlzLmludGVyY2VwdG9ycy5yZXF1ZXN0LmZvckVhY2goZnVuY3Rpb24ocCl7dHlwZW9mIHAucnVuV2hlbj09ImZ1bmN0aW9uIiYmcC5ydW5XaGVuKHQpPT09ITF8fChjPWMmJnAuc3luY2hyb25vdXMsZi51bnNoaWZ0KHAuZnVsZmlsbGVkLHAucmVqZWN0ZWQpKX0pO2xldCBsPVtdO3RoaXMuaW50ZXJjZXB0b3JzLnJlc3BvbnNlLmZvckVhY2goZnVuY3Rpb24ocCl7bC5wdXNoKHAuZnVsZmlsbGVkLHAucmVqZWN0ZWQpfSk7bGV0IGEsST0wLHU7aWYoIWMpe2xldCBDPVtHQS5iaW5kKHRoaXMpLHZvaWQgMF07Zm9yKEMudW5zaGlmdC5hcHBseShDLGYpLEMucHVzaC5hcHBseShDLGwpLHU9Qy5sZW5ndGgsYT1Qcm9taXNlLnJlc29sdmUodCk7STx1OylhPWEudGhlbihDW0krK10sQ1tJKytdKTtyZXR1cm4gYX11PWYubGVuZ3RoO2xldCBzPXQ7Zm9yKEk9MDtJPHU7KXtsZXQgQz1mW0krK10scD1mW0krK107dHJ5e3M9QyhzKX1jYXRjaChCKXtwLmNhbGwodGhpcyxCKTticmVha319dHJ5e2E9R0EuY2FsbCh0aGlzLHMpfWNhdGNoKEMpe3JldHVybiBQcm9taXNlLnJlamVjdChDKX1mb3IoST0wLHU9bC5sZW5ndGg7STx1OylhPWEudGhlbihsW0krK10sbFtJKytdKTtyZXR1cm4gYX1nZXRVcmkoZSl7ZT14KHRoaXMuZGVmYXVsdHMsZSk7bGV0IHQ9QkEoZS5iYXNlVVJMLGUudXJsKTtyZXR1cm4gZ0EodCxlLnBhcmFtcyxlLnBhcmFtc1NlcmlhbGl6ZXIpfX07Zy5mb3JFYWNoKFsiZGVsZXRlIiwiZ2V0IiwiaGVhZCIsIm9wdGlvbnMiXSxmdW5jdGlvbihlKXtBQS5wcm90b3R5cGVbZV09ZnVuY3Rpb24odCxyKXtyZXR1cm4gdGhpcy5yZXF1ZXN0KHgocnx8e30se21ldGhvZDplLHVybDp0LGRhdGE6KHJ8fHt9KS5kYXRhfSkpfX0pO2cuZm9yRWFjaChbInBvc3QiLCJwdXQiLCJwYXRjaCJdLGZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQocil7cmV0dXJuIGZ1bmN0aW9uKG8saSxmKXtyZXR1cm4gdGhpcy5yZXF1ZXN0KHgoZnx8e30se21ldGhvZDplLGhlYWRlcnM6cj97IkNvbnRlbnQtVHlwZSI6Im11bHRpcGFydC9mb3JtLWRhdGEifTp7fSx1cmw6byxkYXRhOml9KSl9fUFBLnByb3RvdHlwZVtlXT10KCksQUEucHJvdG90eXBlW2UrIkZvcm0iXT10KCEwKX0pO3ZhciB1QT1BQTt2YXIgUWU9Y2xhc3MgQXtjb25zdHJ1Y3RvcihlKXtpZih0eXBlb2YgZSE9ImZ1bmN0aW9uIil0aHJvdyBuZXcgVHlwZUVycm9yKCJleGVjdXRvciBtdXN0IGJlIGEgZnVuY3Rpb24uIik7bGV0IHQ7dGhpcy5wcm9taXNlPW5ldyBQcm9taXNlKGZ1bmN0aW9uKG8pe3Q9b30pO2xldCByPXRoaXM7dGhpcy5wcm9taXNlLnRoZW4obj0+e2lmKCFyLl9saXN0ZW5lcnMpcmV0dXJuO2xldCBvPXIuX2xpc3RlbmVycy5sZW5ndGg7Zm9yKDtvLS0gPjA7KXIuX2xpc3RlbmVyc1tvXShuKTtyLl9saXN0ZW5lcnM9bnVsbH0pLHRoaXMucHJvbWlzZS50aGVuPW49PntsZXQgbyxpPW5ldyBQcm9taXNlKGY9PntyLnN1YnNjcmliZShmKSxvPWZ9KS50aGVuKG4pO3JldHVybiBpLmNhbmNlbD1mdW5jdGlvbigpe3IudW5zdWJzY3JpYmUobyl9LGl9LGUoZnVuY3Rpb24obyxpLGYpe3IucmVhc29ufHwoci5yZWFzb249bmV3IEoobyxpLGYpLHQoci5yZWFzb24pKX0pfXRocm93SWZSZXF1ZXN0ZWQoKXtpZih0aGlzLnJlYXNvbil0aHJvdyB0aGlzLnJlYXNvbn1zdWJzY3JpYmUoZSl7aWYodGhpcy5yZWFzb24pe2UodGhpcy5yZWFzb24pO3JldHVybn10aGlzLl9saXN0ZW5lcnM/dGhpcy5fbGlzdGVuZXJzLnB1c2goZSk6dGhpcy5fbGlzdGVuZXJzPVtlXX11bnN1YnNjcmliZShlKXtpZighdGhpcy5fbGlzdGVuZXJzKXJldHVybjtsZXQgdD10aGlzLl9saXN0ZW5lcnMuaW5kZXhPZihlKTt0IT09LTEmJnRoaXMuX2xpc3RlbmVycy5zcGxpY2UodCwxKX1zdGF0aWMgc291cmNlKCl7bGV0IGU7cmV0dXJue3Rva2VuOm5ldyBBKGZ1bmN0aW9uKG4pe2U9bn0pLGNhbmNlbDplfX19LEZ0PVFlO2Z1bmN0aW9uIG1lKEEpe3JldHVybiBmdW5jdGlvbih0KXtyZXR1cm4gQS5hcHBseShudWxsLHQpfX1mdW5jdGlvbiBkZShBKXtyZXR1cm4gZy5pc09iamVjdChBKSYmQS5pc0F4aW9zRXJyb3I9PT0hMH12YXIgeWU9e0NvbnRpbnVlOjEwMCxTd2l0Y2hpbmdQcm90b2NvbHM6MTAxLFByb2Nlc3Npbmc6MTAyLEVhcmx5SGludHM6MTAzLE9rOjIwMCxDcmVhdGVkOjIwMSxBY2NlcHRlZDoyMDIsTm9uQXV0aG9yaXRhdGl2ZUluZm9ybWF0aW9uOjIwMyxOb0NvbnRlbnQ6MjA0LFJlc2V0Q29udGVudDoyMDUsUGFydGlhbENvbnRlbnQ6MjA2LE11bHRpU3RhdHVzOjIwNyxBbHJlYWR5UmVwb3J0ZWQ6MjA4LEltVXNlZDoyMjYsTXVsdGlwbGVDaG9pY2VzOjMwMCxNb3ZlZFBlcm1hbmVudGx5OjMwMSxGb3VuZDozMDIsU2VlT3RoZXI6MzAzLE5vdE1vZGlmaWVkOjMwNCxVc2VQcm94eTozMDUsVW51c2VkOjMwNixUZW1wb3JhcnlSZWRpcmVjdDozMDcsUGVybWFuZW50UmVkaXJlY3Q6MzA4LEJhZFJlcXVlc3Q6NDAwLFVuYXV0aG9yaXplZDo0MDEsUGF5bWVudFJlcXVpcmVkOjQwMixGb3JiaWRkZW46NDAzLE5vdEZvdW5kOjQwNCxNZXRob2ROb3RBbGxvd2VkOjQwNSxOb3RBY2NlcHRhYmxlOjQwNixQcm94eUF1dGhlbnRpY2F0aW9uUmVxdWlyZWQ6NDA3LFJlcXVlc3RUaW1lb3V0OjQwOCxDb25mbGljdDo0MDksR29uZTo0MTAsTGVuZ3RoUmVxdWlyZWQ6NDExLFByZWNvbmRpdGlvbkZhaWxlZDo0MTIsUGF5bG9hZFRvb0xhcmdlOjQxMyxVcmlUb29Mb25nOjQxNCxVbnN1cHBvcnRlZE1lZGlhVHlwZTo0MTUsUmFuZ2VOb3RTYXRpc2ZpYWJsZTo0MTYsRXhwZWN0YXRpb25GYWlsZWQ6NDE3LEltQVRlYXBvdDo0MTgsTWlzZGlyZWN0ZWRSZXF1ZXN0OjQyMSxVbnByb2Nlc3NhYmxlRW50aXR5OjQyMixMb2NrZWQ6NDIzLEZhaWxlZERlcGVuZGVuY3k6NDI0LFRvb0Vhcmx5OjQyNSxVcGdyYWRlUmVxdWlyZWQ6NDI2LFByZWNvbmRpdGlvblJlcXVpcmVkOjQyOCxUb29NYW55UmVxdWVzdHM6NDI5LFJlcXVlc3RIZWFkZXJGaWVsZHNUb29MYXJnZTo0MzEsVW5hdmFpbGFibGVGb3JMZWdhbFJlYXNvbnM6NDUxLEludGVybmFsU2VydmVyRXJyb3I6NTAwLE5vdEltcGxlbWVudGVkOjUwMSxCYWRHYXRld2F5OjUwMixTZXJ2aWNlVW5hdmFpbGFibGU6NTAzLEdhdGV3YXlUaW1lb3V0OjUwNCxIdHRwVmVyc2lvbk5vdFN1cHBvcnRlZDo1MDUsVmFyaWFudEFsc29OZWdvdGlhdGVzOjUwNixJbnN1ZmZpY2llbnRTdG9yYWdlOjUwNyxMb29wRGV0ZWN0ZWQ6NTA4LE5vdEV4dGVuZGVkOjUxMCxOZXR3b3JrQXV0aGVudGljYXRpb25SZXF1aXJlZDo1MTF9O09iamVjdC5lbnRyaWVzKHllKS5mb3JFYWNoKChbQSxlXSk9Pnt5ZVtlXT1BfSk7dmFyIFV0PXllO2Z1bmN0aW9uIFR0KEEpe2xldCBlPW5ldyB1QShBKSx0PWFBKHVBLnByb3RvdHlwZS5yZXF1ZXN0LGUpO3JldHVybiBnLmV4dGVuZCh0LHVBLnByb3RvdHlwZSxlLHthbGxPd25LZXlzOiEwfSksZy5leHRlbmQodCxlLG51bGwse2FsbE93bktleXM6ITB9KSx0LmNyZWF0ZT1mdW5jdGlvbihuKXtyZXR1cm4gVHQoeChBLG4pKX0sdH12YXIgUj1UdChWKTtSLkF4aW9zPXVBO1IuQ2FuY2VsZWRFcnJvcj1KO1IuQ2FuY2VsVG9rZW49RnQ7Ui5pc0NhbmNlbD1DQTtSLlZFUlNJT049V0E7Ui50b0Zvcm1EYXRhPU07Ui5BeGlvc0Vycm9yPVE7Ui5DYW5jZWw9Ui5DYW5jZWxlZEVycm9yO1IuYWxsPWZ1bmN0aW9uKGUpe3JldHVybiBQcm9taXNlLmFsbChlKX07Ui5zcHJlYWQ9bWU7Ui5pc0F4aW9zRXJyb3I9ZGU7Ui5tZXJnZUNvbmZpZz14O1IuQXhpb3NIZWFkZXJzPVM7Ui5mb3JtVG9KU09OPUE9PlRBKGcuaXNIVE1MRm9ybShBKT9uZXcgRm9ybURhdGEoQSk6QSk7Ui5nZXRBZGFwdGVyPU9BLmdldEFkYXB0ZXI7Ui5IdHRwU3RhdHVzQ29kZT1VdDtSLmRlZmF1bHQ9Ujt2YXIgZUE9Ujt2YXJ7QXhpb3M6UHMsQXhpb3NFcnJvcjp4cyxDYW5jZWxlZEVycm9yOk9zLGlzQ2FuY2VsOkdzLENhbmNlbFRva2VuOldzLFZFUlNJT046SnMsYWxsOk1zLENhbmNlbDpIcyxpc0F4aW9zRXJyb3I6cXMsc3ByZWFkOllzLHRvRm9ybURhdGE6S3MsQXhpb3NIZWFkZXJzOnZzLEh0dHBTdGF0dXNDb2RlOmpzLGZvcm1Ub0pTT046X3MsZ2V0QWRhcHRlcjp6cyxtZXJnZUNvbmZpZzpac309ZUE7YXN5bmMgZnVuY3Rpb24ga28oQSxlKXtsZXQgdD1BLHI9bnVsbDtpZih0PT1udWxsKXI9bmV3IFdvcmtlcihuZXcgVVJMKCIuL3dlYi13b3JrZXJzL2l0ay13YXNtLXBpcGVsaW5lLndvcmtlci5qcyIsaW1wb3J0Lm1ldGEudXJsKSx7dHlwZToibW9kdWxlIn0pO2Vsc2UgaWYodC5zdGFydHNXaXRoKCJodHRwIikpe2xldCBuPWF3YWl0IGVBLmdldCh0LHtyZXNwb25zZVR5cGU6ImJsb2IiLHBhcmFtczplfSksbz1VUkwuY3JlYXRlT2JqZWN0VVJMKG4uZGF0YSk7cj1uZXcgV29ya2VyKG8se3R5cGU6Im1vZHVsZSJ9KX1lbHNlIHI9bmV3IFdvcmtlcih0LHt0eXBlOiJtb2R1bGUifSk7cmV0dXJuIHJ9dmFyIEVBPWtvO2Z1bmN0aW9uIE50KEEpe2xldCBlPXpBKEEpLHQ9QTtyZXR1cm4gdC50ZXJtaW5hdGVkPSExLHQud29ya2VyUHJveHk9ZSx0Lm9yaWdpbmFsVGVybWluYXRlPXQudGVybWluYXRlLHQudGVybWluYXRlPSgpPT57dC50ZXJtaW5hdGVkPSEwLHQud29ya2VyUHJveHlbX0FdKCksdC5vcmlnaW5hbFRlcm1pbmF0ZSgpfSx7d29ya2VyUHJveHk6ZSx3b3JrZXI6dH19YXN5bmMgZnVuY3Rpb24gRm8oQSxlLHQpe2xldCByO2lmKEEhPW51bGwpe2xldCBvPUE7cmV0dXJuIG8ud29ya2VyUHJveHkhPT12b2lkIDA/KHI9by53b3JrZXJQcm94eSx7d29ya2VyUHJveHk6cix3b3JrZXI6b30pOk50KEEpfWxldCBuPWF3YWl0IEVBKGUsdCk7cmV0dXJuIE50KG4pfXZhciBMdD1Gbzthc3luYyBmdW5jdGlvbiBVbyhBLGUsdCl7bGV0IHI9InVua25vd24iO3R5cGVvZiBBIT0ic3RyaW5nIj9yPUEuaHJlZjpBLnN0YXJ0c1dpdGgoImh0dHAiKT9yPUE6cj10eXBlb2YgZTwidSI/YCR7ZX0vJHtBfWA6QSxyLmVuZHNXaXRoKCIuanMiKSYmKHI9ci5zdWJzdHJpbmcoMCxyLmxlbmd0aC0zKSksci5lbmRzV2l0aCgiLndhc20iKSYmKHI9ci5zdWJzdHJpbmcoMCxyLmxlbmd0aC01KSk7bGV0IG49YCR7cn0ud2FzbWAsaT0oYXdhaXQgZUEuZ2V0KG4se3Jlc3BvbnNlVHlwZToiYXJyYXlidWZmZXIiLHBhcmFtczp0fSkpLmRhdGE7cmV0dXJuKGF3YWl0IGltcG9ydChgJHtyfS5qc2ApKS5kZWZhdWx0KHt3YXNtQmluYXJ5Oml9KX12YXIgUHQ9VW87dmFyIHh0PWFzeW5jKCk9PldlYkFzc2VtYmx5LnZhbGlkYXRlKG5ldyBVaW50OEFycmF5KFswLDk3LDExNSwxMDksMSwwLDAsMCwxLDUsMSw5NiwwLDEsMTIzLDMsMiwxLDAsMTAsMTAsMSw4LDAsNjUsMCwyNTMsMTUsMjUzLDk4LDExXSkpO3ZhciBXdD10eXBlb2YgZ2xvYmFsVGhpcy5TaGFyZWRBcnJheUJ1ZmZlcj09ImZ1bmN0aW9uIixPdD1uZXcgVGV4dEVuY29kZXIsR3Q9bmV3IFRleHREZWNvZGVyKCJ1dGYtOCIpO2Z1bmN0aW9uIFRvKEEsZSl7bGV0IHQ9e2ZsYWdzOiJyIixlbmNvZGluZzoiYmluYXJ5In0scj1BLmZzX29wZW4oZSx0LmZsYWdzKSxvPUEuZnNfc3RhdChlKS5zaXplLGk9bnVsbDtXdD9pPW5ldyBTaGFyZWRBcnJheUJ1ZmZlcihvKTppPW5ldyBBcnJheUJ1ZmZlcihvKTtsZXQgZj1uZXcgVWludDhBcnJheShpKTtyZXR1cm4gQS5mc19yZWFkKHIsZiwwLG8sMCksQS5mc19jbG9zZShyKSxmfWZ1bmN0aW9uIEp0KEEsZSx0KXtsZXQgcj1udWxsO1d0P3I9bmV3IFNoYXJlZEFycmF5QnVmZmVyKHQpOnI9bmV3IEFycmF5QnVmZmVyKHQpO2xldCBuPW5ldyBVaW50OEFycmF5KHIpLG89bmV3IFVpbnQ4QXJyYXkoQS5IRUFQVTguYnVmZmVyLGUsdCk7cmV0dXJuIG4uc2V0KG8pLG59ZnVuY3Rpb24gYihBLGUsdCxyKXtsZXQgbj0wO3JldHVybiBlIT09bnVsbCYmKG49QS5jY2FsbCgiaXRrX3dhc21faW5wdXRfYXJyYXlfYWxsb2MiLCJudW1iZXIiLFsibnVtYmVyIiwibnVtYmVyIiwibnVtYmVyIiwibnVtYmVyIl0sWzAsdCxyLGUuYnVmZmVyLmJ5dGVMZW5ndGhdKSxBLkhFQVBVOC5zZXQobmV3IFVpbnQ4QXJyYXkoZS5idWZmZXIpLG4pKSxufWZ1bmN0aW9uIHEoQSxlLHQpe2xldCByPUpTT04uc3RyaW5naWZ5KGUpLG49QS5sZW5ndGhCeXRlc1VURjgocikrMSxvPUEuY2NhbGwoIml0a193YXNtX2lucHV0X2pzb25fYWxsb2MiLCJudW1iZXIiLFsibnVtYmVyIiwibnVtYmVyIiwibnVtYmVyIl0sWzAsdCxuXSk7QS5zdHJpbmdUb1VURjgocixvLG4pfWZ1bmN0aW9uIFUoQSxlLHQscil7bGV0IG49QS5jY2FsbCgiaXRrX3dhc21fb3V0cHV0X2FycmF5X2FkZHJlc3MiLCJudW1iZXIiLFsibnVtYmVyIiwibnVtYmVyIiwibnVtYmVyIl0sWzAsZSx0XSksbz1BLmNjYWxsKCJpdGtfd2FzbV9vdXRwdXRfYXJyYXlfc2l6ZSIsIm51bWJlciIsWyJudW1iZXIiLCJudW1iZXIiLCJudW1iZXIiXSxbMCxlLHRdKSxpPUp0KEEsbixvKTtyZXR1cm4gVyhyLGkuYnVmZmVyKX1mdW5jdGlvbiBwQShBLGUpe2xldCB0PUEuY2NhbGwoIml0a193YXNtX291dHB1dF9qc29uX2FkZHJlc3MiLCJudW1iZXIiLFsibnVtYmVyIiwibnVtYmVyIl0sWzAsZV0pLHI9QS5VVEY4VG9TdHJpbmcodCk7cmV0dXJuIEpTT04ucGFyc2Uocil9ZnVuY3Rpb24gTm8oQSxlLHQscil7ciE9bnVsbCYmci5sZW5ndGg+MCYmci5mb3JFYWNoKGZ1bmN0aW9uKGwsYSl7c3dpdGNoKGwudHlwZSl7Y2FzZSBFLlRleHRTdHJlYW06e2xldCBJPU90LmVuY29kZShsLmRhdGEuZGF0YSksdT1iKEEsSSxhLDApLHM9e3NpemU6SS5idWZmZXIuYnl0ZUxlbmd0aCxkYXRhOmBkYXRhOmFwcGxpY2F0aW9uL3ZuZC5pdGsuYWRkcmVzcywwOiR7dX1gfTtxKEEscyxhKTticmVha31jYXNlIEUuSnNvbkNvbXBhdGlibGU6e2xldCBJPU90LmVuY29kZShKU09OLnN0cmluZ2lmeShsLmRhdGEpKSx1PWIoQSxJLGEsMCkscz17c2l6ZTpJLmJ1ZmZlci5ieXRlTGVuZ3RoLGRhdGE6YGRhdGE6YXBwbGljYXRpb24vdm5kLml0ay5hZGRyZXNzLDA6JHt1fWB9O3EoQSxzLGEpO2JyZWFrfWNhc2UgRS5CaW5hcnlTdHJlYW06e2xldCBJPWwuZGF0YS5kYXRhLHU9YihBLEksYSwwKSxzPXtzaXplOkkuYnVmZmVyLmJ5dGVMZW5ndGgsZGF0YTpgZGF0YTphcHBsaWNhdGlvbi92bmQuaXRrLmFkZHJlc3MsMDoke3V9YH07cShBLHMsYSk7YnJlYWt9Y2FzZSBFLlRleHRGaWxlOntBLmZzX3dyaXRlRmlsZShsLmRhdGEucGF0aCxsLmRhdGEuZGF0YSk7YnJlYWt9Y2FzZSBFLkJpbmFyeUZpbGU6e0EuZnNfd3JpdGVGaWxlKGwuZGF0YS5wYXRoLGwuZGF0YS5kYXRhKTticmVha31jYXNlIEUuSW1hZ2U6e2xldCBJPWwuZGF0YSx1PWIoQSxJLmRhdGEsYSwwKSxzPWIoQSxJLmRpcmVjdGlvbixhLDEpLEM9dHlwZW9mIEkubWV0YWRhdGE/LmVudHJpZXM8InUiP0FycmF5LmZyb20oSS5tZXRhZGF0YS5lbnRyaWVzKCkpOltdLHA9e2ltYWdlVHlwZTpJLmltYWdlVHlwZSxuYW1lOkkubmFtZSxvcmlnaW46SS5vcmlnaW4sc3BhY2luZzpJLnNwYWNpbmcsZGlyZWN0aW9uOmBkYXRhOmFwcGxpY2F0aW9uL3ZuZC5pdGsuYWRkcmVzcywwOiR7c31gLHNpemU6SS5zaXplLGRhdGE6YGRhdGE6YXBwbGljYXRpb24vdm5kLml0ay5hZGRyZXNzLDA6JHt1fWAsbWV0YWRhdGE6Q307cShBLHAsYSk7YnJlYWt9Y2FzZSBFLk1lc2g6e2xldCBJPWwuZGF0YSx1PWIoQSxJLnBvaW50cyxhLDApLHM9YihBLEkuY2VsbHMsYSwxKSxDPWIoQSxJLnBvaW50RGF0YSxhLDIpLHA9YihBLEkuY2VsbERhdGEsYSwzKSxCPXttZXNoVHlwZTpJLm1lc2hUeXBlLG5hbWU6SS5uYW1lLG51bWJlck9mUG9pbnRzOkkubnVtYmVyT2ZQb2ludHMscG9pbnRzOmBkYXRhOmFwcGxpY2F0aW9uL3ZuZC5pdGsuYWRkcmVzcywwOiR7dX1gLG51bWJlck9mQ2VsbHM6SS5udW1iZXJPZkNlbGxzLGNlbGxzOmBkYXRhOmFwcGxpY2F0aW9uL3ZuZC5pdGsuYWRkcmVzcywwOiR7c31gLGNlbGxCdWZmZXJTaXplOkkuY2VsbEJ1ZmZlclNpemUsbnVtYmVyT2ZQb2ludFBpeGVsczpJLm51bWJlck9mUG9pbnRQaXhlbHMscG9pbnREYXRhOmBkYXRhOmFwcGxpY2F0aW9uL3ZuZC5pdGsuYWRkcmVzcywwOiR7Q31gLG51bWJlck9mQ2VsbFBpeGVsczpJLm51bWJlck9mQ2VsbFBpeGVscyxjZWxsRGF0YTpgZGF0YTphcHBsaWNhdGlvbi92bmQuaXRrLmFkZHJlc3MsMDoke3B9YH07cShBLEIsYSk7YnJlYWt9Y2FzZSBFLlBvaW50U2V0OntsZXQgST1sLmRhdGEsdT1iKEEsSS5wb2ludHMsYSwwKSxzPWIoQSxJLnBvaW50RGF0YSxhLDEpLEM9e3BvaW50U2V0VHlwZTpJLnBvaW50U2V0VHlwZSxuYW1lOkkubmFtZSxudW1iZXJPZlBvaW50czpJLm51bWJlck9mUG9pbnRzLHBvaW50czpgZGF0YTphcHBsaWNhdGlvbi92bmQuaXRrLmFkZHJlc3MsMDoke3V9YCxudW1iZXJPZlBvaW50UGl4ZWxzOkkubnVtYmVyT2ZQb2ludFBpeGVscyxwb2ludERhdGE6YGRhdGE6YXBwbGljYXRpb24vdm5kLml0ay5hZGRyZXNzLDA6JHtzfWB9O3EoQSxDLGEpO2JyZWFrfWNhc2UgRS5UcmFuc2Zvcm1MaXN0OntsZXQgST1sLmRhdGEsdT1bXTtJLmZvckVhY2goKHMsQyk9PntsZXQgQj1gZGF0YTphcHBsaWNhdGlvbi92bmQuaXRrLmFkZHJlc3MsMDoke2IoQSxzLmZpeGVkUGFyYW1ldGVycyxhLEMqMil9YCxGPWBkYXRhOmFwcGxpY2F0aW9uL3ZuZC5pdGsuYWRkcmVzcywwOiR7YihBLHMucGFyYW1ldGVycyxhLEMqMisxKX1gLG09e3RyYW5zZm9ybVR5cGU6cy50cmFuc2Zvcm1UeXBlLG51bWJlck9mRml4ZWRQYXJhbWV0ZXJzOnMubnVtYmVyT2ZGaXhlZFBhcmFtZXRlcnMsbnVtYmVyT2ZQYXJhbWV0ZXJzOnMubnVtYmVyT2ZQYXJhbWV0ZXJzLG5hbWU6cy5uYW1lLGlucHV0U3BhY2VOYW1lOnMuaW5wdXRTcGFjZU5hbWUsb3V0cHV0U3BhY2VOYW1lOnMub3V0cHV0U3BhY2VOYW1lLHBhcmFtZXRlcnM6RixmaXhlZFBhcmFtZXRlcnM6Qn07dS5wdXNoKG0pfSkscShBLHUsYSk7YnJlYWt9Y2FzZSBFLlBvbHlEYXRhOntsZXQgST1sLmRhdGEsdT1iKEEsSS5wb2ludHMsYSwwKSxzPWIoQSxJLnZlcnRpY2VzLGEsMSksQz1iKEEsSS5saW5lcyxhLDIpLHA9YihBLEkucG9seWdvbnMsYSwzKSxCPWIoQSxJLnRyaWFuZ2xlU3RyaXBzLGEsNCksZD1iKEEsSS5wb2ludERhdGEsYSw1KSxGPWIoQSxJLnBvaW50RGF0YSxhLDYpLG09e3BvbHlEYXRhVHlwZTpJLnBvbHlEYXRhVHlwZSxuYW1lOkkubmFtZSxudW1iZXJPZlBvaW50czpJLm51bWJlck9mUG9pbnRzLHBvaW50czpgZGF0YTphcHBsaWNhdGlvbi92bmQuaXRrLmFkZHJlc3MsMDoke3V9YCx2ZXJ0aWNlc0J1ZmZlclNpemU6SS52ZXJ0aWNlc0J1ZmZlclNpemUsdmVydGljZXM6YGRhdGE6YXBwbGljYXRpb24vdm5kLml0ay5hZGRyZXNzLDA6JHtzfWAsbGluZXNCdWZmZXJTaXplOkkubGluZXNCdWZmZXJTaXplLGxpbmVzOmBkYXRhOmFwcGxpY2F0aW9uL3ZuZC5pdGsuYWRkcmVzcywwOiR7Q31gLHBvbHlnb25zQnVmZmVyU2l6ZTpJLnBvbHlnb25zQnVmZmVyU2l6ZSxwb2x5Z29uczpgZGF0YTphcHBsaWNhdGlvbi92bmQuaXRrLmFkZHJlc3MsMDoke3B9YCx0cmlhbmdsZVN0cmlwc0J1ZmZlclNpemU6SS50cmlhbmdsZVN0cmlwc0J1ZmZlclNpemUsdHJpYW5nbGVTdHJpcHM6YGRhdGE6YXBwbGljYXRpb24vdm5kLml0ay5hZGRyZXNzLDA6JHtCfWAsbnVtYmVyT2ZQb2ludFBpeGVsczpJLm51bWJlck9mUG9pbnRQaXhlbHMscG9pbnREYXRhOmBkYXRhOmFwcGxpY2F0aW9uL3ZuZC5pdGsuYWRkcmVzcywwOiR7ZH1gLG51bWJlck9mQ2VsbFBpeGVsczpJLm51bWJlck9mQ2VsbFBpeGVscyxjZWxsRGF0YTpgZGF0YTphcHBsaWNhdGlvbi92bmQuaXRrLmFkZHJlc3MsMDoke0Z9YH07cShBLG0sYSk7YnJlYWt9ZGVmYXVsdDp0aHJvdyBFcnJvcigiVW5zdXBwb3J0ZWQgaW5wdXQgSW50ZXJmYWNlVHlwZSIpfX0pLEEucmVzZXRNb2R1bGVTdGRvdXQoKSxBLnJlc2V0TW9kdWxlU3RkZXJyKCk7bGV0IG49QS5zdGFja1NhdmUoKSxvPTA7dHJ5e289QS5jYWxsTWFpbihlLnNsaWNlKCkpfWNhdGNoKGwpe3Rocm93IHR5cGVvZiBsPT0ibnVtYmVyIiYmKGNvbnNvbGUubG9nKCJFeGNlcHRpb24gd2hpbGUgcnVubmluZyBwaXBlbGluZToiKSxjb25zb2xlLmxvZygic3Rkb3V0OiIsQS5nZXRNb2R1bGVTdGRvdXQoKSksY29uc29sZS5lcnJvcigic3RkZXJyOiIsQS5nZXRNb2R1bGVTdGRlcnIoKSksdHlwZW9mIEEuZ2V0RXhjZXB0aW9uTWVzc2FnZTwidSI/Y29uc29sZS5lcnJvcigiZXhjZXB0aW9uOiIsQS5nZXRFeGNlcHRpb25NZXNzYWdlKGwpKTpjb25zb2xlLmVycm9yKCJCdWlsZCBtb2R1bGUgaW4gRGVidWcgbW9kZSBmb3IgZXhjZXB0aW9uIG1lc3NhZ2UgaW5mb3JtYXRpb24uIikpLGx9ZmluYWxseXtBLnN0YWNrUmVzdG9yZShuKX1sZXQgaT1BLmdldE1vZHVsZVN0ZG91dCgpLGY9QS5nZXRNb2R1bGVTdGRlcnIoKSxjPVtdO3JldHVybiB0IT1udWxsJiZ0Lmxlbmd0aD4wJiZvPT09MCYmdC5mb3JFYWNoKGZ1bmN0aW9uKGwsYSl7bGV0IEk9bnVsbDtzd2l0Y2gobC50eXBlKXtjYXNlIEUuVGV4dFN0cmVhbTp7bGV0IHM9QS5jY2FsbCgiaXRrX3dhc21fb3V0cHV0X2FycmF5X2FkZHJlc3MiLCJudW1iZXIiLFsibnVtYmVyIiwibnVtYmVyIiwibnVtYmVyIl0sWzAsYSwwXSksQz1BLmNjYWxsKCJpdGtfd2FzbV9vdXRwdXRfYXJyYXlfc2l6ZSIsIm51bWJlciIsWyJudW1iZXIiLCJudW1iZXIiLCJudW1iZXIiXSxbMCxhLDBdKSxwPW5ldyBVaW50OEFycmF5KEEuSEVBUFU4LmJ1ZmZlcixzLEMpO0k9e2RhdGE6R3QuZGVjb2RlKHApfTticmVha31jYXNlIEUuSnNvbkNvbXBhdGlibGU6e2xldCBzPUEuY2NhbGwoIml0a193YXNtX291dHB1dF9hcnJheV9hZGRyZXNzIiwibnVtYmVyIixbIm51bWJlciIsIm51bWJlciIsIm51bWJlciJdLFswLGEsMF0pLEM9QS5jY2FsbCgiaXRrX3dhc21fb3V0cHV0X2FycmF5X3NpemUiLCJudW1iZXIiLFsibnVtYmVyIiwibnVtYmVyIiwibnVtYmVyIl0sWzAsYSwwXSkscD1uZXcgVWludDhBcnJheShBLkhFQVBVOC5idWZmZXIscyxDKTtJPUpTT04ucGFyc2UoR3QuZGVjb2RlKHApKTticmVha31jYXNlIEUuQmluYXJ5U3RyZWFtOntsZXQgcz1BLmNjYWxsKCJpdGtfd2FzbV9vdXRwdXRfYXJyYXlfYWRkcmVzcyIsIm51bWJlciIsWyJudW1iZXIiLCJudW1iZXIiLCJudW1iZXIiXSxbMCxhLDBdKSxDPUEuY2NhbGwoIml0a193YXNtX291dHB1dF9hcnJheV9zaXplIiwibnVtYmVyIixbIm51bWJlciIsIm51bWJlciIsIm51bWJlciJdLFswLGEsMF0pO0k9e2RhdGE6SnQoQSxzLEMpfTticmVha31jYXNlIEUuVGV4dEZpbGU6e0k9e3BhdGg6bC5kYXRhLnBhdGgsZGF0YTpBLmZzX3JlYWRGaWxlKGwuZGF0YS5wYXRoLHtlbmNvZGluZzoidXRmOCJ9KX07YnJlYWt9Y2FzZSBFLkJpbmFyeUZpbGU6e0k9e3BhdGg6bC5kYXRhLnBhdGgsZGF0YTpUbyhBLGwuZGF0YS5wYXRoKX07YnJlYWt9Y2FzZSBFLkltYWdlOntsZXQgcz1wQShBLGEpO3MuZGF0YT1VKEEsYSwwLHMuaW1hZ2VUeXBlLmNvbXBvbmVudFR5cGUpLHMuZGlyZWN0aW9uPVUoQSxhLDEsai5GbG9hdDY0KSxzLm1ldGFkYXRhPW5ldyBNYXAocy5tZXRhZGF0YSksST1zO2JyZWFrfWNhc2UgRS5NZXNoOntsZXQgcz1wQShBLGEpO3MubnVtYmVyT2ZQb2ludHM+MD9zLnBvaW50cz1VKEEsYSwwLHMubWVzaFR5cGUucG9pbnRDb21wb25lbnRUeXBlKTpzLnBvaW50cz1XKHMubWVzaFR5cGUucG9pbnRDb21wb25lbnRUeXBlLG5ldyBBcnJheUJ1ZmZlcigwKSkscy5udW1iZXJPZkNlbGxzPjA/cy5jZWxscz1VKEEsYSwxLHMubWVzaFR5cGUuY2VsbENvbXBvbmVudFR5cGUpOnMuY2VsbHM9VyhzLm1lc2hUeXBlLmNlbGxDb21wb25lbnRUeXBlLG5ldyBBcnJheUJ1ZmZlcigwKSkscy5udW1iZXJPZlBvaW50UGl4ZWxzPjA/cy5wb2ludERhdGE9VShBLGEsMixzLm1lc2hUeXBlLnBvaW50UGl4ZWxDb21wb25lbnRUeXBlKTpzLnBvaW50RGF0YT1XKHMubWVzaFR5cGUucG9pbnRQaXhlbENvbXBvbmVudFR5cGUsbmV3IEFycmF5QnVmZmVyKDApKSxzLm51bWJlck9mQ2VsbFBpeGVscz4wP3MuY2VsbERhdGE9VShBLGEsMyxzLm1lc2hUeXBlLmNlbGxQaXhlbENvbXBvbmVudFR5cGUpOnMuY2VsbERhdGE9VyhzLm1lc2hUeXBlLmNlbGxQaXhlbENvbXBvbmVudFR5cGUsbmV3IEFycmF5QnVmZmVyKDApKSxJPXM7YnJlYWt9Y2FzZSBFLlBvaW50U2V0OntsZXQgcz1wQShBLGEpO3MubnVtYmVyT2ZQb2ludHM+MD9zLnBvaW50cz1VKEEsYSwwLHMucG9pbnRTZXRUeXBlLnBvaW50Q29tcG9uZW50VHlwZSk6cy5wb2ludHM9VyhzLnBvaW50U2V0VHlwZS5wb2ludENvbXBvbmVudFR5cGUsbmV3IEFycmF5QnVmZmVyKDApKSxzLm51bWJlck9mUG9pbnRQaXhlbHM+MD9zLnBvaW50RGF0YT1VKEEsYSwxLHMucG9pbnRTZXRUeXBlLnBvaW50UGl4ZWxDb21wb25lbnRUeXBlKTpzLnBvaW50RGF0YT1XKHMucG9pbnRTZXRUeXBlLnBvaW50UGl4ZWxDb21wb25lbnRUeXBlLG5ldyBBcnJheUJ1ZmZlcigwKSksST1zO2JyZWFrfWNhc2UgRS5UcmFuc2Zvcm1MaXN0OntsZXQgcz1wQShBLGEpO3MuZm9yRWFjaCgoQyxwKT0+e0MubnVtYmVyT2ZGaXhlZFBhcmFtZXRlcnM+MCYmKHNbcF0uZml4ZWRQYXJhbWV0ZXJzPVUoQSxhLHAqMixDLnRyYW5zZm9ybVR5cGUucGFyYW1ldGVyc1ZhbHVlVHlwZSkpLEMubnVtYmVyT2ZGaXhlZFBhcmFtZXRlcnM+MCYmKHNbcF0ucGFyYW1ldGVycz1VKEEsYSxwKjIrMSxDLnRyYW5zZm9ybVR5cGUucGFyYW1ldGVyc1ZhbHVlVHlwZSkpfSksST1zO2JyZWFrfWNhc2UgRS5Qb2x5RGF0YTp7bGV0IHM9cEEoQSxhKTtzLm51bWJlck9mUG9pbnRzPjA/cy5wb2ludHM9VShBLGEsMCxqLkZsb2F0MzIpOnMucG9pbnRzPW5ldyBGbG9hdDMyQXJyYXkscy52ZXJ0aWNlc0J1ZmZlclNpemU+MD9zLnZlcnRpY2VzPVUoQSxhLDEsVC5VSW50MzIpOnMudmVydGljZXM9bmV3IFVpbnQzMkFycmF5LHMubGluZXNCdWZmZXJTaXplPjA/cy5saW5lcz1VKEEsYSwyLFQuVUludDMyKTpzLmxpbmVzPW5ldyBVaW50MzJBcnJheSxzLnBvbHlnb25zQnVmZmVyU2l6ZT4wP3MucG9seWdvbnM9VShBLGEsMyxULlVJbnQzMik6cy5wb2x5Z29ucz1uZXcgVWludDMyQXJyYXkscy50cmlhbmdsZVN0cmlwc0J1ZmZlclNpemU+MD9zLnRyaWFuZ2xlU3RyaXBzPVUoQSxhLDQsVC5VSW50MzIpOnMudHJpYW5nbGVTdHJpcHM9bmV3IFVpbnQzMkFycmF5LHMubnVtYmVyT2ZQb2ludFBpeGVscz4wP3MucG9pbnREYXRhPVUoQSxhLDUscy5wb2x5RGF0YVR5cGUucG9pbnRQaXhlbENvbXBvbmVudFR5cGUpOnMucG9pbnREYXRhPVcocy5wb2x5RGF0YVR5cGUucG9pbnRQaXhlbENvbXBvbmVudFR5cGUsbmV3IEFycmF5QnVmZmVyKDApKSxzLm51bWJlck9mQ2VsbFBpeGVscz4wP3MuY2VsbERhdGE9VShBLGEsNixzLnBvbHlEYXRhVHlwZS5jZWxsUGl4ZWxDb21wb25lbnRUeXBlKTpzLmNlbGxEYXRhPVcocy5wb2x5RGF0YVR5cGUuY2VsbFBpeGVsQ29tcG9uZW50VHlwZSxuZXcgQXJyYXlCdWZmZXIoMCkpLEk9czticmVha31kZWZhdWx0OnRocm93IEVycm9yKCJVbnN1cHBvcnRlZCBvdXRwdXQgSW50ZXJmYWNlVHlwZSIpfWxldCB1PXt0eXBlOmwudHlwZSxkYXRhOkl9O2MucHVzaCh1KX0pLHtyZXR1cm5WYWx1ZTpvLHN0ZG91dDppLHN0ZGVycjpmLG91dHB1dHM6Y319dmFyIE10PU5vO3ZhciBMbz10eXBlb2YgZ2xvYmFsVGhpcy5TaGFyZWRBcnJheUJ1ZmZlcjwidSI7ZnVuY3Rpb24gUG8oQSxlKXtpZihBPT1udWxsKXJldHVybltdO2xldCB0PVtdO2ZvcihsZXQgcj0wO3I8QS5sZW5ndGg7cisrKXtsZXQgbj14byhBW3JdLGUpO24hPT1udWxsJiZ0LnB1c2gobil9cmV0dXJuIHR9ZnVuY3Rpb24geG8oQSxlKXtpZihBPT1udWxsKXJldHVybiBudWxsO2xldCB0PW51bGw7cmV0dXJuIEEuYnVmZmVyIT09dm9pZCAwP3Q9QS5idWZmZXI6QS5ieXRlTGVuZ3RoIT09dm9pZCAwJiYodD1BKSxMbyYmdCBpbnN0YW5jZW9mIFNoYXJlZEFycmF5QnVmZmVyP251bGw6ZT90OnQuc2xpY2UoMCl9dmFyIEh0PVBvO2Z1bmN0aW9uIE9vKEEpe3JldHVybltBLmRhdGEsQS5kaXJlY3Rpb25dfXZhciBxdD1PbztmdW5jdGlvbiBHbyhBKXtyZXR1cm5bQS5wb2ludHMsQS5wb2ludERhdGEsQS5jZWxscyxBLmNlbGxEYXRhXX12YXIgWXQ9R287ZnVuY3Rpb24gV28oQSl7cmV0dXJuW0EucG9pbnRzLEEudmVydGljZXMsQS5saW5lcyxBLnBvbHlnb25zLEEudHJpYW5nbGVTdHJpcHMsQS5wb2ludERhdGEsQS5jZWxsRGF0YV19dmFyIEt0PVdvO3ZhciBKbztmdW5jdGlvbiBNQSgpe3JldHVybiBKb312YXIgTW87ZnVuY3Rpb24gdnQoKXtyZXR1cm4gTW99dmFyIEhvO2Z1bmN0aW9uIEhBKCl7cmV0dXJuIEhvfXZhciBoZT1uZXcgTWFwO2Z1bmN0aW9uIHFvKCl7bGV0IEE9SEEoKTtyZXR1cm4gdHlwZW9mIEE+InUiJiYoQT1udWxsKSxBfWZ1bmN0aW9uIGp0KCl7bGV0IEE9TUEoKTtyZXR1cm4gdHlwZW9mIEE+InUiJiYoQT1uZXcgVVJMKCIvcGlwZWxpbmVzIixkb2N1bWVudC5sb2NhdGlvbi5vcmlnaW4pLmhyZWYpLEF9ZnVuY3Rpb24gcUEoKXtsZXQgQT12dCgpO3JldHVybiB0eXBlb2YgQT4idSImJihBPXt9KSxBfWFzeW5jIGZ1bmN0aW9uIFlvKEEsZSx0KXtsZXQgcj1BLG49QTtpZih0eXBlb2YgQSE9InN0cmluZyImJihyPW5ldyBVUkwoQS5ocmVmKSxuPXIuaHJlZiksaGUuaGFzKG4pKXJldHVybiBoZS5nZXQobik7e2xldCBvPWF3YWl0IFB0KEEsZT8udG9TdHJpbmcoKT8/anQoKSx0Pz9xQSgpKTtyZXR1cm4gaGUuc2V0KG4sbyksb319YXN5bmMgZnVuY3Rpb24gS28oQSxlLHQscixuKXtpZighYXdhaXQgeHQoKSl7bGV0IEI9IldlYkFzc2VtYmx5IFNJTUQgc3VwcG9ydCBpcyByZXF1aXJlZCAtLSBwbGVhc2UgdXBkYXRlIHlvdXIgYnJvd3Nlci4iO3Rocm93IGFsZXJ0KEIpLG5ldyBFcnJvcihCKX1sZXQgbz1uPy53ZWJXb3JrZXI/P251bGw7aWYobz09PSExKXtsZXQgQj1hd2FpdCBZbyhBLnRvU3RyaW5nKCksbj8ucGlwZWxpbmVCYXNlVXJsLG4/LnBpcGVsaW5lUXVlcnlQYXJhbXM/P3FBKCkpO3JldHVybiBNdChCLGUsdCxyKX1sZXQgaT1vLGY9bj8ucGlwZWxpbmVXb3JrZXJVcmw/P3FvKCksYz10eXBlb2YgZiE9InN0cmluZyImJnR5cGVvZiBmPy5ocmVmPCJ1Ij9mLmhyZWY6Zix7d29ya2VyUHJveHk6bCx3b3JrZXI6YX09YXdhaXQgTHQoaSxjLG4/LnBpcGVsaW5lUXVlcnlQYXJhbXM/P3FBKCkpO2k9YTtsZXQgST1bXTtyIT1udWxsJiZyLmxlbmd0aD4wJiZyLmZvckVhY2goZnVuY3Rpb24oQil7aWYoQi50eXBlPT09RS5CaW5hcnlTdHJlYW0pe2xldCBkPUIuZGF0YS5kYXRhO0kucHVzaChkKX1lbHNlIGlmKEIudHlwZT09PUUuQmluYXJ5RmlsZSl7bGV0IGQ9Qi5kYXRhLmRhdGE7SS5wdXNoKGQpfWVsc2UgaWYoQi50eXBlPT09RS5JbWFnZSl7bGV0IGQ9Qi5kYXRhO2QuZGF0YSE9PW51bGwmJkkucHVzaCguLi5xdChkKSl9ZWxzZSBpZihCLnR5cGU9PT1FLk1lc2gpe2xldCBkPUIuZGF0YTtJLnB1c2goLi4uWXQoZCkpfWVsc2UgaWYoQi50eXBlPT09RS5Qb2x5RGF0YSl7bGV0IGQ9Qi5kYXRhO0kucHVzaCguLi5LdChkKSl9fSk7bGV0IHU9bj8ucGlwZWxpbmVCYXNlVXJsPz9qdCgpLHM9dHlwZW9mIHUhPSJzdHJpbmciJiZ0eXBlb2YgdT8uaHJlZjwidSI/dS5ocmVmOnUsQz1yIT1udWxsP1pBKHIsSHQoSSxuPy5ub0NvcHkpKTpudWxsLHA9YXdhaXQgbC5ydW5QaXBlbGluZShBLnRvU3RyaW5nKCkscyxlLHQsQyxuPy5waXBlbGluZVF1ZXJ5UGFyYW1zPz9xQSgpKTtyZXR1cm57cmV0dXJuVmFsdWU6cC5yZXR1cm5WYWx1ZSxzdGRvdXQ6cC5zdGRvdXQsc3RkZXJyOnAuc3RkZXJyLG91dHB1dHM6cC5vdXRwdXRzLHdlYldvcmtlcjppfX12YXIgaD1Lbzt2YXIgdm89bnVsbDtmdW5jdGlvbiBfdCgpe3JldHVybiB2b312YXIgam89bmV3IE1hcChbXSksdEE9am87dmFyIF9vPW5ldyBNYXAoW1siaDUiLCJoZGY1Il0sWyJoZGY1IiwiaGRmNSJdLFsidHh0IiwidHh0Il0sWyJtYXQiLCJtYXQiXSxbInhmbSIsIm1uYyJdLFsiaXd0Iiwid2FzbSJdLFsiaXd0LmNib3IiLCJ3YXNtIl0sWyJpd3QuY2Jvci56c3QiLCJ3YXNtLXpzdGQiXV0pLHJBPV9vO3ZhciB3ZSx6bz1gaHR0cHM6Ly9jZG4uanNkZWxpdnIubmV0L25wbS9AaXRrLXdhc20vdHJhbnNmb3JtLWlvQCR7S0F9L2Rpc3QvcGlwZWxpbmVzYDtmdW5jdGlvbiBISShBKXt3ZT1BfWZ1bmN0aW9uIHcoKXtpZih0eXBlb2Ygd2U8InUiKXJldHVybiB3ZTtsZXQgQT1NQSgpO3JldHVybiB0eXBlb2YgQTwidSI/QTp6b312YXIgRGUsWm89bnVsbDtmdW5jdGlvbiB6dChBKXtEZT1BfWZ1bmN0aW9uIHkoKXtpZih0eXBlb2YgRGU8InUiKXJldHVybiBEZTtsZXQgQT1IQSgpO3JldHVybiB0eXBlb2YgQTwidSI/QTpab312YXIgb0E9bnVsbDthc3luYyBmdW5jdGlvbiBadCgpe2xldCBBPXkoKSxlPXR5cGVvZiBBIT0ic3RyaW5nIiYmdHlwZW9mIEE/LmhyZWY8InUiP0EuaHJlZjpBO29BPWF3YWl0IEVBKGUpfWZ1bmN0aW9uIHpJKEEpe29BPUF9YXN5bmMgZnVuY3Rpb24gRCgpe2lmKG9BIT09bnVsbClyZXR1cm4gb0EudGVybWluYXRlZCYmYXdhaXQgWnQoKSxvQTtsZXQgQT1fdCgpO3JldHVybiBBIT09bnVsbD9BOihhd2FpdCBadCgpLG9BKX1hc3luYyBmdW5jdGlvbiBWbyhBLGU9e30pe2xldCB0PVt7dHlwZTpFLkpzb25Db21wYXRpYmxlfSx7dHlwZTpFLlRyYW5zZm9ybUxpc3R9XSxyPUE7aWYoQSBpbnN0YW5jZW9mIEZpbGUpe2xldCBCPWF3YWl0IEEuYXJyYXlCdWZmZXIoKTtyPXtwYXRoOkEubmFtZSxkYXRhOm5ldyBVaW50OEFycmF5KEIpfX1sZXQgbj1be3R5cGU6RS5CaW5hcnlGaWxlLGRhdGE6cn1dLG89W10saT1yLnBhdGg7by5wdXNoKGkpLG8ucHVzaCgiMCIpLG8ucHVzaCgiMSIpLG8ucHVzaCgiLS1tZW1vcnktaW8iKSxlLmZsb2F0UGFyYW1ldGVycyYmZS5mbG9hdFBhcmFtZXRlcnMmJm8ucHVzaCgiLS1mbG9hdC1wYXJhbWV0ZXJzIik7bGV0IGw9ImhkZjUtcmVhZC10cmFuc2Zvcm0iLGE9ZT8ud2ViV29ya2VyO2E9PT12b2lkIDAmJihhPWF3YWl0IEQoKSk7bGV0e3dlYldvcmtlcjpJLHJldHVyblZhbHVlOnUsc3RkZXJyOnMsb3V0cHV0czpDfT1hd2FpdCBoKGwsbyx0LG4se3BpcGVsaW5lQmFzZVVybDp3KCkscGlwZWxpbmVXb3JrZXJVcmw6eSgpLHdlYldvcmtlcjphLG5vQ29weTplPy5ub0NvcHl9KTtpZih1IT09MCYmcyE9PSIiKXRocm93IG5ldyBFcnJvcihzKTtyZXR1cm57d2ViV29ya2VyOkksY291bGRSZWFkOkNbMF0/LmRhdGEsdHJhbnNmb3JtOkNbMV0/LmRhdGF9fXZhciBSZT1Wbzthc3luYyBmdW5jdGlvbiBYbyhBLGUsdD17fSl7bGV0IHI9W3t0eXBlOkUuSnNvbkNvbXBhdGlibGV9LHt0eXBlOkUuQmluYXJ5RmlsZSxkYXRhOntwYXRoOmUsZGF0YTpuZXcgVWludDhBcnJheX19XSxuPVt7dHlwZTpFLlRyYW5zZm9ybUxpc3QsZGF0YTpBfV0sbz1bXTtvLnB1c2goIjAiKSxvLnB1c2goIjAiKTtsZXQgYz1lO28ucHVzaChjKSxvLnB1c2goIi0tbWVtb3J5LWlvIiksdC5mbG9hdFBhcmFtZXRlcnMmJnQuZmxvYXRQYXJhbWV0ZXJzJiZvLnB1c2goIi0tZmxvYXQtcGFyYW1ldGVycyIpLHQudXNlQ29tcHJlc3Npb24mJnQudXNlQ29tcHJlc3Npb24mJm8ucHVzaCgiLS11c2UtY29tcHJlc3Npb24iKTtsZXQgbD0iaGRmNS13cml0ZS10cmFuc2Zvcm0iLGE9dD8ud2ViV29ya2VyO2E9PT12b2lkIDAmJihhPWF3YWl0IEQoKSk7bGV0e3dlYldvcmtlcjpJLHJldHVyblZhbHVlOnUsc3RkZXJyOnMsb3V0cHV0czpDfT1hd2FpdCBoKGwsbyxyLG4se3BpcGVsaW5lQmFzZVVybDp3KCkscGlwZWxpbmVXb3JrZXJVcmw6eSgpLHdlYldvcmtlcjphLG5vQ29weTp0Py5ub0NvcHl9KTtpZih1IT09MCYmcyE9PSIiKXRocm93IG5ldyBFcnJvcihzKTtyZXR1cm57d2ViV29ya2VyOkksY291bGRXcml0ZTpDWzBdPy5kYXRhLHNlcmlhbGl6ZWRUcmFuc2Zvcm06Q1sxXT8uZGF0YX19dmFyIGJlPVhvO2FzeW5jIGZ1bmN0aW9uICRvKEEsZT17fSl7bGV0IHQ9W3t0eXBlOkUuSnNvbkNvbXBhdGlibGV9LHt0eXBlOkUuVHJhbnNmb3JtTGlzdH1dLHI9QTtpZihBIGluc3RhbmNlb2YgRmlsZSl7bGV0IEI9YXdhaXQgQS5hcnJheUJ1ZmZlcigpO3I9e3BhdGg6QS5uYW1lLGRhdGE6bmV3IFVpbnQ4QXJyYXkoQil9fWxldCBuPVt7dHlwZTpFLkJpbmFyeUZpbGUsZGF0YTpyfV0sbz1bXSxpPXIucGF0aDtvLnB1c2goaSksby5wdXNoKCIwIiksby5wdXNoKCIxIiksby5wdXNoKCItLW1lbW9yeS1pbyIpLGUuZmxvYXRQYXJhbWV0ZXJzJiZlLmZsb2F0UGFyYW1ldGVycyYmby5wdXNoKCItLWZsb2F0LXBhcmFtZXRlcnMiKTtsZXQgbD0ibWF0LXJlYWQtdHJhbnNmb3JtIixhPWU/LndlYldvcmtlcjthPT09dm9pZCAwJiYoYT1hd2FpdCBEKCkpO2xldHt3ZWJXb3JrZXI6SSxyZXR1cm5WYWx1ZTp1LHN0ZGVycjpzLG91dHB1dHM6Q309YXdhaXQgaChsLG8sdCxuLHtwaXBlbGluZUJhc2VVcmw6dygpLHBpcGVsaW5lV29ya2VyVXJsOnkoKSx3ZWJXb3JrZXI6YSxub0NvcHk6ZT8ubm9Db3B5fSk7aWYodSE9PTAmJnMhPT0iIil0aHJvdyBuZXcgRXJyb3Iocyk7cmV0dXJue3dlYldvcmtlcjpJLGNvdWxkUmVhZDpDWzBdPy5kYXRhLHRyYW5zZm9ybTpDWzFdPy5kYXRhfX12YXIgU2U9JG87YXN5bmMgZnVuY3Rpb24gQW4oQSxlLHQ9e30pe2xldCByPVt7dHlwZTpFLkpzb25Db21wYXRpYmxlfSx7dHlwZTpFLkJpbmFyeUZpbGUsZGF0YTp7cGF0aDplLGRhdGE6bmV3IFVpbnQ4QXJyYXl9fV0sbj1be3R5cGU6RS5UcmFuc2Zvcm1MaXN0LGRhdGE6QX1dLG89W107by5wdXNoKCIwIiksby5wdXNoKCIwIik7bGV0IGM9ZTtvLnB1c2goYyksby5wdXNoKCItLW1lbW9yeS1pbyIpLHQuZmxvYXRQYXJhbWV0ZXJzJiZ0LmZsb2F0UGFyYW1ldGVycyYmby5wdXNoKCItLWZsb2F0LXBhcmFtZXRlcnMiKSx0LnVzZUNvbXByZXNzaW9uJiZ0LnVzZUNvbXByZXNzaW9uJiZvLnB1c2goIi0tdXNlLWNvbXByZXNzaW9uIik7bGV0IGw9Im1hdC13cml0ZS10cmFuc2Zvcm0iLGE9dD8ud2ViV29ya2VyO2E9PT12b2lkIDAmJihhPWF3YWl0IEQoKSk7bGV0e3dlYldvcmtlcjpJLHJldHVyblZhbHVlOnUsc3RkZXJyOnMsb3V0cHV0czpDfT1hd2FpdCBoKGwsbyxyLG4se3BpcGVsaW5lQmFzZVVybDp3KCkscGlwZWxpbmVXb3JrZXJVcmw6eSgpLHdlYldvcmtlcjphLG5vQ29weTp0Py5ub0NvcHl9KTtpZih1IT09MCYmcyE9PSIiKXRocm93IG5ldyBFcnJvcihzKTtyZXR1cm57d2ViV29ya2VyOkksY291bGRXcml0ZTpDWzBdPy5kYXRhLHNlcmlhbGl6ZWRUcmFuc2Zvcm06Q1sxXT8uZGF0YX19dmFyIGtlPUFuO2FzeW5jIGZ1bmN0aW9uIGVuKEEsZT17fSl7bGV0IHQ9W3t0eXBlOkUuSnNvbkNvbXBhdGlibGV9LHt0eXBlOkUuVHJhbnNmb3JtTGlzdH1dLHI9QTtpZihBIGluc3RhbmNlb2YgRmlsZSl7bGV0IEI9YXdhaXQgQS5hcnJheUJ1ZmZlcigpO3I9e3BhdGg6QS5uYW1lLGRhdGE6bmV3IFVpbnQ4QXJyYXkoQil9fWxldCBuPVt7dHlwZTpFLkJpbmFyeUZpbGUsZGF0YTpyfV0sbz1bXSxpPXIucGF0aDtvLnB1c2goaSksby5wdXNoKCIwIiksby5wdXNoKCIxIiksby5wdXNoKCItLW1lbW9yeS1pbyIpLGUuZmxvYXRQYXJhbWV0ZXJzJiZlLmZsb2F0UGFyYW1ldGVycyYmby5wdXNoKCItLWZsb2F0LXBhcmFtZXRlcnMiKTtsZXQgbD0ibW5jLXJlYWQtdHJhbnNmb3JtIixhPWU/LndlYldvcmtlcjthPT09dm9pZCAwJiYoYT1hd2FpdCBEKCkpO2xldHt3ZWJXb3JrZXI6SSxyZXR1cm5WYWx1ZTp1LHN0ZGVycjpzLG91dHB1dHM6Q309YXdhaXQgaChsLG8sdCxuLHtwaXBlbGluZUJhc2VVcmw6dygpLHBpcGVsaW5lV29ya2VyVXJsOnkoKSx3ZWJXb3JrZXI6YSxub0NvcHk6ZT8ubm9Db3B5fSk7aWYodSE9PTAmJnMhPT0iIil0aHJvdyBuZXcgRXJyb3Iocyk7cmV0dXJue3dlYldvcmtlcjpJLGNvdWxkUmVhZDpDWzBdPy5kYXRhLHRyYW5zZm9ybTpDWzFdPy5kYXRhfX12YXIgRmU9ZW47YXN5bmMgZnVuY3Rpb24gdG4oQSxlLHQ9e30pe2xldCByPVt7dHlwZTpFLkpzb25Db21wYXRpYmxlfSx7dHlwZTpFLkJpbmFyeUZpbGUsZGF0YTp7cGF0aDplLGRhdGE6bmV3IFVpbnQ4QXJyYXl9fV0sbj1be3R5cGU6RS5UcmFuc2Zvcm1MaXN0LGRhdGE6QX1dLG89W107by5wdXNoKCIwIiksby5wdXNoKCIwIik7bGV0IGM9ZTtvLnB1c2goYyksby5wdXNoKCItLW1lbW9yeS1pbyIpLHQuZmxvYXRQYXJhbWV0ZXJzJiZ0LmZsb2F0UGFyYW1ldGVycyYmby5wdXNoKCItLWZsb2F0LXBhcmFtZXRlcnMiKSx0LnVzZUNvbXByZXNzaW9uJiZ0LnVzZUNvbXByZXNzaW9uJiZvLnB1c2goIi0tdXNlLWNvbXByZXNzaW9uIik7bGV0IGw9Im1uYy13cml0ZS10cmFuc2Zvcm0iLGE9dD8ud2ViV29ya2VyO2E9PT12b2lkIDAmJihhPWF3YWl0IEQoKSk7bGV0e3dlYldvcmtlcjpJLHJldHVyblZhbHVlOnUsc3RkZXJyOnMsb3V0cHV0czpDfT1hd2FpdCBoKGwsbyxyLG4se3BpcGVsaW5lQmFzZVVybDp3KCkscGlwZWxpbmVXb3JrZXJVcmw6eSgpLHdlYldvcmtlcjphLG5vQ29weTp0Py5ub0NvcHl9KTtpZih1IT09MCYmcyE9PSIiKXRocm93IG5ldyBFcnJvcihzKTtyZXR1cm57d2ViV29ya2VyOkksY291bGRXcml0ZTpDWzBdPy5kYXRhLHNlcmlhbGl6ZWRUcmFuc2Zvcm06Q1sxXT8uZGF0YX19dmFyIFVlPXRuO2FzeW5jIGZ1bmN0aW9uIHJuKEEsZT17fSl7bGV0IHQ9W3t0eXBlOkUuSnNvbkNvbXBhdGlibGV9LHt0eXBlOkUuVHJhbnNmb3JtTGlzdH1dLHI9QTtpZihBIGluc3RhbmNlb2YgRmlsZSl7bGV0IEI9YXdhaXQgQS5hcnJheUJ1ZmZlcigpO3I9e3BhdGg6QS5uYW1lLGRhdGE6bmV3IFVpbnQ4QXJyYXkoQil9fWxldCBuPVt7dHlwZTpFLkJpbmFyeUZpbGUsZGF0YTpyfV0sbz1bXSxpPXIucGF0aDtvLnB1c2goaSksby5wdXNoKCIwIiksby5wdXNoKCIxIiksby5wdXNoKCItLW1lbW9yeS1pbyIpLGUuZmxvYXRQYXJhbWV0ZXJzJiZlLmZsb2F0UGFyYW1ldGVycyYmby5wdXNoKCItLWZsb2F0LXBhcmFtZXRlcnMiKTtsZXQgbD0idHh0LXJlYWQtdHJhbnNmb3JtIixhPWU/LndlYldvcmtlcjthPT09dm9pZCAwJiYoYT1hd2FpdCBEKCkpO2xldHt3ZWJXb3JrZXI6SSxyZXR1cm5WYWx1ZTp1LHN0ZGVycjpzLG91dHB1dHM6Q309YXdhaXQgaChsLG8sdCxuLHtwaXBlbGluZUJhc2VVcmw6dygpLHBpcGVsaW5lV29ya2VyVXJsOnkoKSx3ZWJXb3JrZXI6YSxub0NvcHk6ZT8ubm9Db3B5fSk7aWYodSE9PTAmJnMhPT0iIil0aHJvdyBuZXcgRXJyb3Iocyk7cmV0dXJue3dlYldvcmtlcjpJLGNvdWxkUmVhZDpDWzBdPy5kYXRhLHRyYW5zZm9ybTpDWzFdPy5kYXRhfX12YXIgVGU9cm47YXN5bmMgZnVuY3Rpb24gb24oQSxlLHQ9e30pe2xldCByPVt7dHlwZTpFLkpzb25Db21wYXRpYmxlfSx7dHlwZTpFLkJpbmFyeUZpbGUsZGF0YTp7cGF0aDplLGRhdGE6bmV3IFVpbnQ4QXJyYXl9fV0sbj1be3R5cGU6RS5UcmFuc2Zvcm1MaXN0LGRhdGE6QX1dLG89W107by5wdXNoKCIwIiksby5wdXNoKCIwIik7bGV0IGM9ZTtvLnB1c2goYyksby5wdXNoKCItLW1lbW9yeS1pbyIpLHQuZmxvYXRQYXJhbWV0ZXJzJiZ0LmZsb2F0UGFyYW1ldGVycyYmby5wdXNoKCItLWZsb2F0LXBhcmFtZXRlcnMiKSx0LnVzZUNvbXByZXNzaW9uJiZ0LnVzZUNvbXByZXNzaW9uJiZvLnB1c2goIi0tdXNlLWNvbXByZXNzaW9uIik7bGV0IGw9InR4dC13cml0ZS10cmFuc2Zvcm0iLGE9dD8ud2ViV29ya2VyO2E9PT12b2lkIDAmJihhPWF3YWl0IEQoKSk7bGV0e3dlYldvcmtlcjpJLHJldHVyblZhbHVlOnUsc3RkZXJyOnMsb3V0cHV0czpDfT1hd2FpdCBoKGwsbyxyLG4se3BpcGVsaW5lQmFzZVVybDp3KCkscGlwZWxpbmVXb3JrZXJVcmw6eSgpLHdlYldvcmtlcjphLG5vQ29weTp0Py5ub0NvcHl9KTtpZih1IT09MCYmcyE9PSIiKXRocm93IG5ldyBFcnJvcihzKTtyZXR1cm57d2ViV29ya2VyOkksY291bGRXcml0ZTpDWzBdPy5kYXRhLHNlcmlhbGl6ZWRUcmFuc2Zvcm06Q1sxXT8uZGF0YX19dmFyIE5lPW9uO2FzeW5jIGZ1bmN0aW9uIG5uKEEsZT17fSl7bGV0IHQ9W3t0eXBlOkUuSnNvbkNvbXBhdGlibGV9LHt0eXBlOkUuVHJhbnNmb3JtTGlzdH1dLHI9QTtpZihBIGluc3RhbmNlb2YgRmlsZSl7bGV0IEI9YXdhaXQgQS5hcnJheUJ1ZmZlcigpO3I9e3BhdGg6QS5uYW1lLGRhdGE6bmV3IFVpbnQ4QXJyYXkoQil9fWxldCBuPVt7dHlwZTpFLkJpbmFyeUZpbGUsZGF0YTpyfV0sbz1bXSxpPXIucGF0aDtvLnB1c2goaSksby5wdXNoKCIwIiksby5wdXNoKCIxIiksby5wdXNoKCItLW1lbW9yeS1pbyIpLGUuZmxvYXRQYXJhbWV0ZXJzJiZlLmZsb2F0UGFyYW1ldGVycyYmby5wdXNoKCItLWZsb2F0LXBhcmFtZXRlcnMiKTtsZXQgbD0id2FzbS1yZWFkLXRyYW5zZm9ybSIsYT1lPy53ZWJXb3JrZXI7YT09PXZvaWQgMCYmKGE9YXdhaXQgRCgpKTtsZXR7d2ViV29ya2VyOkkscmV0dXJuVmFsdWU6dSxzdGRlcnI6cyxvdXRwdXRzOkN9PWF3YWl0IGgobCxvLHQsbix7cGlwZWxpbmVCYXNlVXJsOncoKSxwaXBlbGluZVdvcmtlclVybDp5KCksd2ViV29ya2VyOmEsbm9Db3B5OmU/Lm5vQ29weX0pO2lmKHUhPT0wJiZzIT09IiIpdGhyb3cgbmV3IEVycm9yKHMpO3JldHVybnt3ZWJXb3JrZXI6SSxjb3VsZFJlYWQ6Q1swXT8uZGF0YSx0cmFuc2Zvcm06Q1sxXT8uZGF0YX19dmFyIExlPW5uO2FzeW5jIGZ1bmN0aW9uIGFuKEEsZSx0PXt9KXtsZXQgcj1be3R5cGU6RS5Kc29uQ29tcGF0aWJsZX0se3R5cGU6RS5CaW5hcnlGaWxlLGRhdGE6e3BhdGg6ZSxkYXRhOm5ldyBVaW50OEFycmF5fX1dLG49W3t0eXBlOkUuVHJhbnNmb3JtTGlzdCxkYXRhOkF9XSxvPVtdO28ucHVzaCgiMCIpLG8ucHVzaCgiMCIpO2xldCBjPWU7by5wdXNoKGMpLG8ucHVzaCgiLS1tZW1vcnktaW8iKSx0LmZsb2F0UGFyYW1ldGVycyYmdC5mbG9hdFBhcmFtZXRlcnMmJm8ucHVzaCgiLS1mbG9hdC1wYXJhbWV0ZXJzIiksdC51c2VDb21wcmVzc2lvbiYmdC51c2VDb21wcmVzc2lvbiYmby5wdXNoKCItLXVzZS1jb21wcmVzc2lvbiIpO2xldCBsPSJ3YXNtLXdyaXRlLXRyYW5zZm9ybSIsYT10Py53ZWJXb3JrZXI7YT09PXZvaWQgMCYmKGE9YXdhaXQgRCgpKTtsZXR7d2ViV29ya2VyOkkscmV0dXJuVmFsdWU6dSxzdGRlcnI6cyxvdXRwdXRzOkN9PWF3YWl0IGgobCxvLHIsbix7cGlwZWxpbmVCYXNlVXJsOncoKSxwaXBlbGluZVdvcmtlclVybDp5KCksd2ViV29ya2VyOmEsbm9Db3B5OnQ/Lm5vQ29weX0pO2lmKHUhPT0wJiZzIT09IiIpdGhyb3cgbmV3IEVycm9yKHMpO3JldHVybnt3ZWJXb3JrZXI6SSxjb3VsZFdyaXRlOkNbMF0/LmRhdGEsc2VyaWFsaXplZFRyYW5zZm9ybTpDWzFdPy5kYXRhfX12YXIgUGU9YW47YXN5bmMgZnVuY3Rpb24gc24oQSxlPXt9KXtsZXQgdD1be3R5cGU6RS5Kc29uQ29tcGF0aWJsZX0se3R5cGU6RS5UcmFuc2Zvcm1MaXN0fV0scj1BO2lmKEEgaW5zdGFuY2VvZiBGaWxlKXtsZXQgQj1hd2FpdCBBLmFycmF5QnVmZmVyKCk7cj17cGF0aDpBLm5hbWUsZGF0YTpuZXcgVWludDhBcnJheShCKX19bGV0IG49W3t0eXBlOkUuQmluYXJ5RmlsZSxkYXRhOnJ9XSxvPVtdLGk9ci5wYXRoO28ucHVzaChpKSxvLnB1c2goIjAiKSxvLnB1c2goIjEiKSxvLnB1c2goIi0tbWVtb3J5LWlvIiksZS5mbG9hdFBhcmFtZXRlcnMmJmUuZmxvYXRQYXJhbWV0ZXJzJiZvLnB1c2goIi0tZmxvYXQtcGFyYW1ldGVycyIpO2xldCBsPSJ3YXNtLXpzdGQtcmVhZC10cmFuc2Zvcm0iLGE9ZT8ud2ViV29ya2VyO2E9PT12b2lkIDAmJihhPWF3YWl0IEQoKSk7bGV0e3dlYldvcmtlcjpJLHJldHVyblZhbHVlOnUsc3RkZXJyOnMsb3V0cHV0czpDfT1hd2FpdCBoKGwsbyx0LG4se3BpcGVsaW5lQmFzZVVybDp3KCkscGlwZWxpbmVXb3JrZXJVcmw6eSgpLHdlYldvcmtlcjphLG5vQ29weTplPy5ub0NvcHl9KTtpZih1IT09MCYmcyE9PSIiKXRocm93IG5ldyBFcnJvcihzKTtyZXR1cm57d2ViV29ya2VyOkksY291bGRSZWFkOkNbMF0/LmRhdGEsdHJhbnNmb3JtOkNbMV0/LmRhdGF9fXZhciB4ZT1zbjthc3luYyBmdW5jdGlvbiBJbihBLGUsdD17fSl7bGV0IHI9W3t0eXBlOkUuSnNvbkNvbXBhdGlibGV9LHt0eXBlOkUuQmluYXJ5RmlsZSxkYXRhOntwYXRoOmUsZGF0YTpuZXcgVWludDhBcnJheX19XSxuPVt7dHlwZTpFLlRyYW5zZm9ybUxpc3QsZGF0YTpBfV0sbz1bXTtvLnB1c2goIjAiKSxvLnB1c2goIjAiKTtsZXQgYz1lO28ucHVzaChjKSxvLnB1c2goIi0tbWVtb3J5LWlvIiksdC5mbG9hdFBhcmFtZXRlcnMmJnQuZmxvYXRQYXJhbWV0ZXJzJiZvLnB1c2goIi0tZmxvYXQtcGFyYW1ldGVycyIpLHQudXNlQ29tcHJlc3Npb24mJnQudXNlQ29tcHJlc3Npb24mJm8ucHVzaCgiLS11c2UtY29tcHJlc3Npb24iKTtsZXQgbD0id2FzbS16c3RkLXdyaXRlLXRyYW5zZm9ybSIsYT10Py53ZWJXb3JrZXI7YT09PXZvaWQgMCYmKGE9YXdhaXQgRCgpKTtsZXR7d2ViV29ya2VyOkkscmV0dXJuVmFsdWU6dSxzdGRlcnI6cyxvdXRwdXRzOkN9PWF3YWl0IGgobCxvLHIsbix7cGlwZWxpbmVCYXNlVXJsOncoKSxwaXBlbGluZVdvcmtlclVybDp5KCksd2ViV29ya2VyOmEsbm9Db3B5OnQ/Lm5vQ29weX0pO2lmKHUhPT0wJiZzIT09IiIpdGhyb3cgbmV3IEVycm9yKHMpO3JldHVybnt3ZWJXb3JrZXI6SSxjb3VsZFdyaXRlOkNbMF0/LmRhdGEsc2VyaWFsaXplZFRyYW5zZm9ybTpDWzFdPy5kYXRhfX12YXIgT2U9SW47dmFyIGduPW5ldyBNYXAoW1siaGRmNSIsW1JlLGJlXV0sWyJtYXQiLFtTZSxrZV1dLFsibW5jIixbRmUsVWVdXSxbInR4dCIsW1RlLE5lXV0sWyJ3YXNtIixbTGUsUGVdXSxbIndhc21ac3RkIixbeGUsT2VdXV0pLG5BPWduO2FzeW5jIGZ1bmN0aW9uIGxuKEEsZT17fSl7bGV0IHQ9QS50eXBlPz8iIixyPUEubmFtZT8/QS5wYXRoPz8iZmlsZU5hbWUiLG49aUEocikudG9Mb3dlckNhc2UoKSxvPWU/LndlYldvcmtlcixpPUE7aWYoQSBpbnN0YW5jZW9mIEJsb2Ipe2xldCBzPWF3YWl0IEEuYXJyYXlCdWZmZXIoKTtpPXtwYXRoOkEubmFtZSxkYXRhOm5ldyBVaW50OEFycmF5KHMpfX1sZXQgZj1udWxsO2lmKHQmJnRBLmhhcyh0KSlmPXRBLmdldCh0KTtlbHNlIGlmKHJBLmhhcyhuKSlmPXJBLmdldChuKTtlbHNlIGZvcihsZXQgcyBvZiBuQS52YWx1ZXMoKSlpZihzWzBdIT09bnVsbCl7bGV0e3dlYldvcmtlcjpDLGNvdWxkUmVhZDpwLHRyYW5zZm9ybTpCfT1hd2FpdCBzWzBdKHtwYXRoOmkucGF0aCxkYXRhOmkuZGF0YS5zbGljZSgpfSx7ZmxvYXRQYXJhbWV0ZXJzOmUuZmxvYXRQYXJhbWV0ZXJzLHdlYldvcmtlcjpvLG5vQ29weTplPy5ub0NvcHl9KTtpZihvPUMscClyZXR1cm57d2ViV29ya2VyOm8sdHJhbnNmb3JtOkJ9fWlmKCFmKXRocm93IEVycm9yKCJDb3VsZCBub3QgZmluZCBJTyBmb3I6ICIrcik7bGV0IGw9bkEuZ2V0KGYpWzBdLHt3ZWJXb3JrZXI6YSxjb3VsZFJlYWQ6SSx0cmFuc2Zvcm06dX09YXdhaXQgbChpLHtmbG9hdFBhcmFtZXRlcnM6ZS5mbG9hdFBhcmFtZXRlcnMsd2ViV29ya2VyOm8sbm9Db3B5OmU/Lm5vQ29weX0pO2lmKG89YSwhSSl0aHJvdyBFcnJvcigiQ291bGQgbm90IHJlYWQ6ICIrcik7cmV0dXJue3dlYldvcmtlcjpvLHRyYW5zZm9ybTp1fX12YXIgZm49bG47YXN5bmMgZnVuY3Rpb24gQ24oQSxlLHQ9e30pe2xldCByPUEsbj10Lm1pbWVUeXBlLG89aUEoZSkudG9Mb3dlckNhc2UoKSxpPXQud2ViV29ya2VyLGY9bnVsbDtpZih0eXBlb2YgbjwidSImJnRBLmhhcyhuKSlmPXRBLmdldChuKTtlbHNlIGlmKHJBLmhhcyhvKSlmPXJBLmdldChvKTtlbHNlIGZvcihsZXQgQyBvZiBuQS52YWx1ZXMoKSlpZihDWzFdIT09bnVsbCl7bGV0e3dlYldvcmtlcjpwLGNvdWxkV3JpdGU6QixzZXJpYWxpemVkVHJhbnNmb3JtOmR9PWF3YWl0IENbMV0ocixlLHQpO2lmKGk9cCxCKXJldHVybnt3ZWJXb3JrZXI6aSxzZXJpYWxpemVkVHJhbnNmb3JtOmR9fWlmKCFmKXRocm93IEVycm9yKCJDb3VsZCBub3QgZmluZCBJTyBmb3I6ICIrZSk7bGV0IGw9bkEuZ2V0KGYpWzFdLHt3ZWJXb3JrZXI6YSxjb3VsZFdyaXRlOkksc2VyaWFsaXplZFRyYW5zZm9ybTp1fT1hd2FpdCBsKHIsZSx0KTtpZihpPWEsIUkpdGhyb3cgRXJyb3IoIkNvdWxkIG5vdCB3cml0ZTogIitlKTtyZXR1cm57d2ViV29ya2VyOmksc2VyaWFsaXplZFRyYW5zZm9ybTp1fX12YXIgY249Q247dmFyIFZ0PSdkYXRhOnRleHQvamF2YXNjcmlwdDtjaGFyc2V0PXV0Zi04LHZhciBtZT1PYmplY3QuZGVmaW5lUHJvcGVydHk7dmFyIHdlPShBLHQpPT57Zm9yKHZhciBlIGluIHQpbWUoQSxlLHtnZXQ6dFtlXSxlbnVtZXJhYmxlOiEwfSl9O3ZhciBmdD1TeW1ib2woIkNvbWxpbmsucHJveHkiKSxwZT1TeW1ib2woIkNvbWxpbmsuZW5kcG9pbnQiKSxTZT1TeW1ib2woIkNvbWxpbmsucmVsZWFzZVByb3h5IiksWUE9U3ltYm9sKCJDb21saW5rLmZpbmFsaXplciIpLGFBPVN5bWJvbCgiQ29tbGluay50aHJvd24iKSxsdD1BPT50eXBlb2YgQT09Im9iamVjdCImJkEhPT1udWxsfHx0eXBlb2YgQT09ImZ1bmN0aW9uIixGZT17Y2FuSGFuZGxlOkE9Pmx0KEEpJiZBW2Z0XSxzZXJpYWxpemUoQSl7bGV0e3BvcnQxOnQscG9ydDI6ZX09bmV3IE1lc3NhZ2VDaGFubmVsO3JldHVybiBmQShBLHQpLFtlLFtlXV19LGRlc2VyaWFsaXplKEEpe3JldHVybiBBLnN0YXJ0KCksR2UoQSl9fSxSZT17Y2FuSGFuZGxlOkE9Pmx0KEEpJiZhQSBpbiBBLHNlcmlhbGl6ZSh7dmFsdWU6QX0pe2xldCB0O3JldHVybiBBIGluc3RhbmNlb2YgRXJyb3I/dD17aXNFcnJvcjohMCx2YWx1ZTp7bWVzc2FnZTpBLm1lc3NhZ2UsbmFtZTpBLm5hbWUsc3RhY2s6QS5zdGFja319OnQ9e2lzRXJyb3I6ITEsdmFsdWU6QX0sW3QsW11dfSxkZXNlcmlhbGl6ZShBKXt0aHJvdyBBLmlzRXJyb3I/T2JqZWN0LmFzc2lnbihuZXcgRXJyb3IoQS52YWx1ZS5tZXNzYWdlKSxBLnZhbHVlKTpBLnZhbHVlfX0sdXQ9bmV3IE1hcChbWyJwcm94eSIsRmVdLFsidGhyb3ciLFJlXV0pO2Z1bmN0aW9uIE5lKEEsdCl7Zm9yKGxldCBlIG9mIEEpaWYodD09PWV8fGU9PT0iKiJ8fGUgaW5zdGFuY2VvZiBSZWdFeHAmJmUudGVzdCh0KSlyZXR1cm4hMDtyZXR1cm4hMX1mdW5jdGlvbiBmQShBLHQ9Z2xvYmFsVGhpcyxlPVsiKiJdKXt0LmFkZEV2ZW50TGlzdGVuZXIoIm1lc3NhZ2UiLGZ1bmN0aW9uIEkocil7aWYoIXJ8fCFyLmRhdGEpcmV0dXJuO2lmKCFOZShlLHIub3JpZ2luKSl7Y29uc29sZS53YXJuKGBJbnZhbGlkIG9yaWdpbiBcJyR7ci5vcmlnaW59XCcgZm9yIGNvbWxpbmsgcHJveHlgKTtyZXR1cm59bGV0e2lkOm8sdHlwZTpnLHBhdGg6Q309T2JqZWN0LmFzc2lnbih7cGF0aDpbXX0sci5kYXRhKSxRPShyLmRhdGEuYXJndW1lbnRMaXN0fHxbXSkubWFwKE8pLGE7dHJ5e2xldCBuPUMuc2xpY2UoMCwtMSkucmVkdWNlKChmLEIpPT5mW0JdLEEpLHM9Qy5yZWR1Y2UoKGYsQik9PmZbQl0sQSk7c3dpdGNoKGcpe2Nhc2UiR0VUIjphPXM7YnJlYWs7Y2FzZSJTRVQiOm5bQy5zbGljZSgtMSlbMF1dPU8oci5kYXRhLnZhbHVlKSxhPSEwO2JyZWFrO2Nhc2UiQVBQTFkiOmE9cy5hcHBseShuLFEpO2JyZWFrO2Nhc2UiQ09OU1RSVUNUIjp7bGV0IGY9bmV3IHMoLi4uUSk7YT1iZShmKX1icmVhaztjYXNlIkVORFBPSU5UIjp7bGV0e3BvcnQxOmYscG9ydDI6Qn09bmV3IE1lc3NhZ2VDaGFubmVsO2ZBKEEsQiksYT1NQShmLFtmXSl9YnJlYWs7Y2FzZSJSRUxFQVNFIjphPXZvaWQgMDticmVhaztkZWZhdWx0OnJldHVybn19Y2F0Y2gobil7YT17dmFsdWU6bixbYUFdOjB9fVByb21pc2UucmVzb2x2ZShhKS5jYXRjaChuPT4oe3ZhbHVlOm4sW2FBXTowfSkpLnRoZW4obj0+e2xldFtzLGZdPWNBKG4pO3QucG9zdE1lc3NhZ2UoT2JqZWN0LmFzc2lnbihPYmplY3QuYXNzaWduKHt9LHMpLHtpZDpvfSksZiksZz09PSJSRUxFQVNFIiYmKHQucmVtb3ZlRXZlbnRMaXN0ZW5lcigibWVzc2FnZSIsSSksRHQodCksWUEgaW4gQSYmdHlwZW9mIEFbWUFdPT0iZnVuY3Rpb24iJiZBW1lBXSgpKX0pLmNhdGNoKG49PntsZXRbcyxmXT1jQSh7dmFsdWU6bmV3IFR5cGVFcnJvcigiVW5zZXJpYWxpemFibGUgcmV0dXJuIHZhbHVlIiksW2FBXTowfSk7dC5wb3N0TWVzc2FnZShPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30scykse2lkOm99KSxmKX0pfSksdC5zdGFydCYmdC5zdGFydCgpfWZ1bmN0aW9uIFVlKEEpe3JldHVybiBBLmNvbnN0cnVjdG9yLm5hbWU9PT0iTWVzc2FnZVBvcnQifWZ1bmN0aW9uIER0KEEpe1VlKEEpJiZBLmNsb3NlKCl9ZnVuY3Rpb24gR2UoQSx0KXtyZXR1cm4gcUEoQSxbXSx0KX1mdW5jdGlvbiBCQShBKXtpZihBKXRocm93IG5ldyBFcnJvcigiUHJveHkgaGFzIGJlZW4gcmVsZWFzZWQgYW5kIGlzIG5vdCB1c2VhYmxlIil9ZnVuY3Rpb24gaHQoQSl7cmV0dXJuIFAoQSx7dHlwZToiUkVMRUFTRSJ9KS50aGVuKCgpPT57RHQoQSl9KX12YXIgUUE9bmV3IFdlYWtNYXAsRUE9IkZpbmFsaXphdGlvblJlZ2lzdHJ5ImluIGdsb2JhbFRoaXMmJm5ldyBGaW5hbGl6YXRpb25SZWdpc3RyeShBPT57bGV0IHQ9KFFBLmdldChBKXx8MCktMTtRQS5zZXQoQSx0KSx0PT09MCYmaHQoQSl9KTtmdW5jdGlvbiBrZShBLHQpe2xldCBlPShRQS5nZXQodCl8fDApKzE7UUEuc2V0KHQsZSksRUEmJkVBLnJlZ2lzdGVyKEEsdCxBKX1mdW5jdGlvbiBMZShBKXtFQSYmRUEudW5yZWdpc3RlcihBKX1mdW5jdGlvbiBxQShBLHQ9W10sZT1mdW5jdGlvbigpe30pe2xldCBJPSExLHI9bmV3IFByb3h5KGUse2dldChvLGcpe2lmKEJBKEkpLGc9PT1TZSlyZXR1cm4oKT0+e0xlKHIpLGh0KEEpLEk9ITB9O2lmKGc9PT0idGhlbiIpe2lmKHQubGVuZ3RoPT09MClyZXR1cm57dGhlbjooKT0+cn07bGV0IEM9UChBLHt0eXBlOiJHRVQiLHBhdGg6dC5tYXAoUT0+US50b1N0cmluZygpKX0pLnRoZW4oTyk7cmV0dXJuIEMudGhlbi5iaW5kKEMpfXJldHVybiBxQShBLFsuLi50LGddKX0sc2V0KG8sZyxDKXtCQShJKTtsZXRbUSxhXT1jQShDKTtyZXR1cm4gUChBLHt0eXBlOiJTRVQiLHBhdGg6Wy4uLnQsZ10ubWFwKG49Pm4udG9TdHJpbmcoKSksdmFsdWU6UX0sYSkudGhlbihPKX0sYXBwbHkobyxnLEMpe0JBKEkpO2xldCBRPXRbdC5sZW5ndGgtMV07aWYoUT09PXBlKXJldHVybiBQKEEse3R5cGU6IkVORFBPSU5UIn0pLnRoZW4oTyk7aWYoUT09PSJiaW5kIilyZXR1cm4gcUEoQSx0LnNsaWNlKDAsLTEpKTtsZXRbYSxuXT1jdChDKTtyZXR1cm4gUChBLHt0eXBlOiJBUFBMWSIscGF0aDp0Lm1hcChzPT5zLnRvU3RyaW5nKCkpLGFyZ3VtZW50TGlzdDphfSxuKS50aGVuKE8pfSxjb25zdHJ1Y3QobyxnKXtCQShJKTtsZXRbQyxRXT1jdChnKTtyZXR1cm4gUChBLHt0eXBlOiJDT05TVFJVQ1QiLHBhdGg6dC5tYXAoYT0+YS50b1N0cmluZygpKSxhcmd1bWVudExpc3Q6Q30sUSkudGhlbihPKX19KTtyZXR1cm4ga2UocixBKSxyfWZ1bmN0aW9uIEplKEEpe3JldHVybiBBcnJheS5wcm90b3R5cGUuY29uY2F0LmFwcGx5KFtdLEEpfWZ1bmN0aW9uIGN0KEEpe2xldCB0PUEubWFwKGNBKTtyZXR1cm5bdC5tYXAoZT0+ZVswXSksSmUodC5tYXAoZT0+ZVsxXSkpXX12YXIgZHQ9bmV3IFdlYWtNYXA7ZnVuY3Rpb24gTUEoQSx0KXtyZXR1cm4gZHQuc2V0KEEsdCksQX1mdW5jdGlvbiBiZShBKXtyZXR1cm4gT2JqZWN0LmFzc2lnbihBLHtbZnRdOiEwfSl9ZnVuY3Rpb24gY0EoQSl7Zm9yKGxldFt0LGVdb2YgdXQpaWYoZS5jYW5IYW5kbGUoQSkpe2xldFtJLHJdPWUuc2VyaWFsaXplKEEpO3JldHVyblt7dHlwZToiSEFORExFUiIsbmFtZTp0LHZhbHVlOkl9LHJdfXJldHVyblt7dHlwZToiUkFXIix2YWx1ZTpBfSxkdC5nZXQoQSl8fFtdXX1mdW5jdGlvbiBPKEEpe3N3aXRjaChBLnR5cGUpe2Nhc2UiSEFORExFUiI6cmV0dXJuIHV0LmdldChBLm5hbWUpLmRlc2VyaWFsaXplKEEudmFsdWUpO2Nhc2UiUkFXIjpyZXR1cm4gQS52YWx1ZX19ZnVuY3Rpb24gUChBLHQsZSl7cmV0dXJuIG5ldyBQcm9taXNlKEk9PntsZXQgcj1IZSgpO0EuYWRkRXZlbnRMaXN0ZW5lcigibWVzc2FnZSIsZnVuY3Rpb24gbyhnKXshZy5kYXRhfHwhZy5kYXRhLmlkfHxnLmRhdGEuaWQhPT1yfHwoQS5yZW1vdmVFdmVudExpc3RlbmVyKCJtZXNzYWdlIixvKSxJKGcuZGF0YSkpfSksQS5zdGFydCYmQS5zdGFydCgpLEEucG9zdE1lc3NhZ2UoT2JqZWN0LmFzc2lnbih7aWQ6cn0sdCksZSl9KX1mdW5jdGlvbiBIZSgpe3JldHVybiBuZXcgQXJyYXkoNCkuZmlsbCgwKS5tYXAoKCk9Pk1hdGguZmxvb3IoTWF0aC5yYW5kb20oKSpOdW1iZXIuTUFYX1NBRkVfSU5URUdFUikudG9TdHJpbmcoMTYpKS5qb2luKCItIil9ZnVuY3Rpb24gdihBLHQpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiBBLmFwcGx5KHQsYXJndW1lbnRzKX19dmFye3RvU3RyaW5nOlllfT1PYmplY3QucHJvdG90eXBlLHtnZXRQcm90b3R5cGVPZjpPQX09T2JqZWN0LHVBPShBPT50PT57bGV0IGU9WWUuY2FsbCh0KTtyZXR1cm4gQVtlXXx8KEFbZV09ZS5zbGljZSg4LC0xKS50b0xvd2VyQ2FzZSgpKX0pKE9iamVjdC5jcmVhdGUobnVsbCkpLEc9QT0+KEE9QS50b0xvd2VyQ2FzZSgpLHQ9PnVBKHQpPT09QSksREE9QT0+dD0+dHlwZW9mIHQ9PT1BLHtpc0FycmF5Omp9PUFycmF5LCQ9REEoInVuZGVmaW5lZCIpO2Z1bmN0aW9uIHFlKEEpe3JldHVybiBBIT09bnVsbCYmISQoQSkmJkEuY29uc3RydWN0b3IhPT1udWxsJiYhJChBLmNvbnN0cnVjdG9yKSYmTihBLmNvbnN0cnVjdG9yLmlzQnVmZmVyKSYmQS5jb25zdHJ1Y3Rvci5pc0J1ZmZlcihBKX12YXIgcHQ9RygiQXJyYXlCdWZmZXIiKTtmdW5jdGlvbiBNZShBKXtsZXQgdDtyZXR1cm4gdHlwZW9mIEFycmF5QnVmZmVyPCJ1IiYmQXJyYXlCdWZmZXIuaXNWaWV3P3Q9QXJyYXlCdWZmZXIuaXNWaWV3KEEpOnQ9QSYmQS5idWZmZXImJnB0KEEuYnVmZmVyKSx0fXZhciBUZT1EQSgic3RyaW5nIiksTj1EQSgiZnVuY3Rpb24iKSxTdD1EQSgibnVtYmVyIiksaEE9QT0+QSE9PW51bGwmJnR5cGVvZiBBPT0ib2JqZWN0IixLZT1BPT5BPT09ITB8fEE9PT0hMSxsQT1BPT57aWYodUEoQSkhPT0ib2JqZWN0IilyZXR1cm4hMTtsZXQgdD1PQShBKTtyZXR1cm4odD09PW51bGx8fHQ9PT1PYmplY3QucHJvdG90eXBlfHxPYmplY3QuZ2V0UHJvdG90eXBlT2YodCk9PT1udWxsKSYmIShTeW1ib2wudG9TdHJpbmdUYWcgaW4gQSkmJiEoU3ltYm9sLml0ZXJhdG9yIGluIEEpfSxPZT1HKCJEYXRlIikseGU9RygiRmlsZSIpLFBlPUcoIkJsb2IiKSxqZT1HKCJGaWxlTGlzdCIpLFdlPUE9PmhBKEEpJiZOKEEucGlwZSksWmU9QT0+e2xldCB0O3JldHVybiBBJiYodHlwZW9mIEZvcm1EYXRhPT0iZnVuY3Rpb24iJiZBIGluc3RhbmNlb2YgRm9ybURhdGF8fE4oQS5hcHBlbmQpJiYoKHQ9dUEoQSkpPT09ImZvcm1kYXRhInx8dD09PSJvYmplY3QiJiZOKEEudG9TdHJpbmcpJiZBLnRvU3RyaW5nKCk9PT0iW29iamVjdCBGb3JtRGF0YV0iKSl9LFZlPUcoIlVSTFNlYXJjaFBhcmFtcyIpLFtfZSxYZSx6ZSx2ZV09WyJSZWFkYWJsZVN0cmVhbSIsIlJlcXVlc3QiLCJSZXNwb25zZSIsIkhlYWRlcnMiXS5tYXAoRyksJGU9QT0+QS50cmltP0EudHJpbSgpOkEucmVwbGFjZSgvXltcXHNcXHVGRUZGXFx4QTBdK3xbXFxzXFx1RkVGRlxceEEwXSskL2csIiIpO2Z1bmN0aW9uIEFBKEEsdCx7YWxsT3duS2V5czplPSExfT17fSl7aWYoQT09PW51bGx8fHR5cGVvZiBBPiJ1IilyZXR1cm47bGV0IEkscjtpZih0eXBlb2YgQSE9Im9iamVjdCImJihBPVtBXSksaihBKSlmb3IoST0wLHI9QS5sZW5ndGg7STxyO0krKyl0LmNhbGwobnVsbCxBW0ldLEksQSk7ZWxzZXtsZXQgbz1lP09iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKEEpOk9iamVjdC5rZXlzKEEpLGc9by5sZW5ndGgsQztmb3IoST0wO0k8ZztJKyspQz1vW0ldLHQuY2FsbChudWxsLEFbQ10sQyxBKX19ZnVuY3Rpb24gRnQoQSx0KXt0PXQudG9Mb3dlckNhc2UoKTtsZXQgZT1PYmplY3Qua2V5cyhBKSxJPWUubGVuZ3RoLHI7Zm9yKDtJLS0gPjA7KWlmKHI9ZVtJXSx0PT09ci50b0xvd2VyQ2FzZSgpKXJldHVybiByO3JldHVybiBudWxsfXZhciB4PXR5cGVvZiBnbG9iYWxUaGlzPCJ1Ij9nbG9iYWxUaGlzOnR5cGVvZiBzZWxmPCJ1Ij9zZWxmOnR5cGVvZiB3aW5kb3c8InUiP3dpbmRvdzpnbG9iYWwsUnQ9QT0+ISQoQSkmJkEhPT14O2Z1bmN0aW9uIEtBKCl7bGV0e2Nhc2VsZXNzOkF9PVJ0KHRoaXMpJiZ0aGlzfHx7fSx0PXt9LGU9KEkscik9PntsZXQgbz1BJiZGdCh0LHIpfHxyO2xBKHRbb10pJiZsQShJKT90W29dPUtBKHRbb10sSSk6bEEoSSk/dFtvXT1LQSh7fSxJKTpqKEkpP3Rbb109SS5zbGljZSgpOnRbb109SX07Zm9yKGxldCBJPTAscj1hcmd1bWVudHMubGVuZ3RoO0k8cjtJKyspYXJndW1lbnRzW0ldJiZBQShhcmd1bWVudHNbSV0sZSk7cmV0dXJuIHR9dmFyIEFJPShBLHQsZSx7YWxsT3duS2V5czpJfT17fSk9PihBQSh0LChyLG8pPT57ZSYmTihyKT9BW29dPXYocixlKTpBW29dPXJ9LHthbGxPd25LZXlzOkl9KSxBKSx0ST1BPT4oQS5jaGFyQ29kZUF0KDApPT09NjUyNzkmJihBPUEuc2xpY2UoMSkpLEEpLGVJPShBLHQsZSxJKT0+e0EucHJvdG90eXBlPU9iamVjdC5jcmVhdGUodC5wcm90b3R5cGUsSSksQS5wcm90b3R5cGUuY29uc3RydWN0b3I9QSxPYmplY3QuZGVmaW5lUHJvcGVydHkoQSwic3VwZXIiLHt2YWx1ZTp0LnByb3RvdHlwZX0pLGUmJk9iamVjdC5hc3NpZ24oQS5wcm90b3R5cGUsZSl9LElJPShBLHQsZSxJKT0+e2xldCByLG8sZyxDPXt9O2lmKHQ9dHx8e30sQT09bnVsbClyZXR1cm4gdDtkb3tmb3Iocj1PYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhBKSxvPXIubGVuZ3RoO28tLSA+MDspZz1yW29dLCghSXx8SShnLEEsdCkpJiYhQ1tnXSYmKHRbZ109QVtnXSxDW2ddPSEwKTtBPWUhPT0hMSYmT0EoQSl9d2hpbGUoQSYmKCFlfHxlKEEsdCkpJiZBIT09T2JqZWN0LnByb3RvdHlwZSk7cmV0dXJuIHR9LHJJPShBLHQsZSk9PntBPVN0cmluZyhBKSwoZT09PXZvaWQgMHx8ZT5BLmxlbmd0aCkmJihlPUEubGVuZ3RoKSxlLT10Lmxlbmd0aDtsZXQgST1BLmluZGV4T2YodCxlKTtyZXR1cm4gSSE9PS0xJiZJPT09ZX0sb0k9QT0+e2lmKCFBKXJldHVybiBudWxsO2lmKGooQSkpcmV0dXJuIEE7bGV0IHQ9QS5sZW5ndGg7aWYoIVN0KHQpKXJldHVybiBudWxsO2xldCBlPW5ldyBBcnJheSh0KTtmb3IoO3QtLSA+MDspZVt0XT1BW3RdO3JldHVybiBlfSxnST0oQT0+dD0+QSYmdCBpbnN0YW5jZW9mIEEpKHR5cGVvZiBVaW50OEFycmF5PCJ1IiYmT0EoVWludDhBcnJheSkpLGlJPShBLHQpPT57bGV0IEk9KEEmJkFbU3ltYm9sLml0ZXJhdG9yXSkuY2FsbChBKSxyO2Zvcig7KHI9SS5uZXh0KCkpJiYhci5kb25lOyl7bGV0IG89ci52YWx1ZTt0LmNhbGwoQSxvWzBdLG9bMV0pfX0sbkk9KEEsdCk9PntsZXQgZSxJPVtdO2Zvcig7KGU9QS5leGVjKHQpKSE9PW51bGw7KUkucHVzaChlKTtyZXR1cm4gSX0sc0k9RygiSFRNTEZvcm1FbGVtZW50IiksQ0k9QT0+QS50b0xvd2VyQ2FzZSgpLnJlcGxhY2UoL1stX1xcc10oW2EtelxcZF0pKFxcdyopL2csZnVuY3Rpb24oZSxJLHIpe3JldHVybiBJLnRvVXBwZXJDYXNlKCkrcn0pLG10PSgoe2hhc093blByb3BlcnR5OkF9KT0+KHQsZSk9PkEuY2FsbCh0LGUpKShPYmplY3QucHJvdG90eXBlKSxCST1HKCJSZWdFeHAiKSxOdD0oQSx0KT0+e2xldCBlPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3JzKEEpLEk9e307QUEoZSwocixvKT0+e2xldCBnOyhnPXQocixvLEEpKSE9PSExJiYoSVtvXT1nfHxyKX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0aWVzKEEsSSl9LGFJPUE9PntOdChBLCh0LGUpPT57aWYoTihBKSYmWyJhcmd1bWVudHMiLCJjYWxsZXIiLCJjYWxsZWUiXS5pbmRleE9mKGUpIT09LTEpcmV0dXJuITE7bGV0IEk9QVtlXTtpZihOKEkpKXtpZih0LmVudW1lcmFibGU9ITEsIndyaXRhYmxlImluIHQpe3Qud3JpdGFibGU9ITE7cmV0dXJufXQuc2V0fHwodC5zZXQ9KCk9Pnt0aHJvdyBFcnJvcigiQ2FuIG5vdCByZXdyaXRlIHJlYWQtb25seSBtZXRob2QgXCciK2UrIlwnIil9KX19KX0sUUk9KEEsdCk9PntsZXQgZT17fSxJPXI9PntyLmZvckVhY2gobz0+e2Vbb109ITB9KX07cmV0dXJuIGooQSk/SShBKTpJKFN0cmluZyhBKS5zcGxpdCh0KSksZX0sRUk9KCk9Pnt9LGNJPShBLHQpPT5BIT1udWxsJiZOdW1iZXIuaXNGaW5pdGUoQT0rQSk/QTp0LFRBPSJhYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5eiIsd3Q9IjAxMjM0NTY3ODkiLFV0PXtESUdJVDp3dCxBTFBIQTpUQSxBTFBIQV9ESUdJVDpUQStUQS50b1VwcGVyQ2FzZSgpK3d0fSxmST0oQT0xNix0PVV0LkFMUEhBX0RJR0lUKT0+e2xldCBlPSIiLHtsZW5ndGg6SX09dDtmb3IoO0EtLTspZSs9dFtNYXRoLnJhbmRvbSgpKkl8MF07cmV0dXJuIGV9O2Z1bmN0aW9uIGxJKEEpe3JldHVybiEhKEEmJk4oQS5hcHBlbmQpJiZBW1N5bWJvbC50b1N0cmluZ1RhZ109PT0iRm9ybURhdGEiJiZBW1N5bWJvbC5pdGVyYXRvcl0pfXZhciB1ST1BPT57bGV0IHQ9bmV3IEFycmF5KDEwKSxlPShJLHIpPT57aWYoaEEoSSkpe2lmKHQuaW5kZXhPZihJKT49MClyZXR1cm47aWYoISgidG9KU09OImluIEkpKXt0W3JdPUk7bGV0IG89aihJKT9bXTp7fTtyZXR1cm4gQUEoSSwoZyxDKT0+e2xldCBRPWUoZyxyKzEpOyEkKFEpJiYob1tDXT1RKX0pLHRbcl09dm9pZCAwLG99fXJldHVybiBJfTtyZXR1cm4gZShBLDApfSxEST1HKCJBc3luY0Z1bmN0aW9uIiksaEk9QT0+QSYmKGhBKEEpfHxOKEEpKSYmTihBLnRoZW4pJiZOKEEuY2F0Y2gpLEd0PSgoQSx0KT0+QT9zZXRJbW1lZGlhdGU6dD8oKGUsSSk9Pih4LmFkZEV2ZW50TGlzdGVuZXIoIm1lc3NhZ2UiLCh7c291cmNlOnIsZGF0YTpvfSk9PntyPT09eCYmbz09PWUmJkkubGVuZ3RoJiZJLnNoaWZ0KCkoKX0sITEpLHI9PntJLnB1c2gocikseC5wb3N0TWVzc2FnZShlLCIqIil9KSkoYGF4aW9zQCR7TWF0aC5yYW5kb20oKX1gLFtdKTplPT5zZXRUaW1lb3V0KGUpKSh0eXBlb2Ygc2V0SW1tZWRpYXRlPT0iZnVuY3Rpb24iLE4oeC5wb3N0TWVzc2FnZSkpLGRJPXR5cGVvZiBxdWV1ZU1pY3JvdGFzazwidSI/cXVldWVNaWNyb3Rhc2suYmluZCh4KTp0eXBlb2YgcHJvY2VzczwidSImJnByb2Nlc3MubmV4dFRpY2t8fEd0LGk9e2lzQXJyYXk6aixpc0FycmF5QnVmZmVyOnB0LGlzQnVmZmVyOnFlLGlzRm9ybURhdGE6WmUsaXNBcnJheUJ1ZmZlclZpZXc6TWUsaXNTdHJpbmc6VGUsaXNOdW1iZXI6U3QsaXNCb29sZWFuOktlLGlzT2JqZWN0OmhBLGlzUGxhaW5PYmplY3Q6bEEsaXNSZWFkYWJsZVN0cmVhbTpfZSxpc1JlcXVlc3Q6WGUsaXNSZXNwb25zZTp6ZSxpc0hlYWRlcnM6dmUsaXNVbmRlZmluZWQ6JCxpc0RhdGU6T2UsaXNGaWxlOnhlLGlzQmxvYjpQZSxpc1JlZ0V4cDpCSSxpc0Z1bmN0aW9uOk4saXNTdHJlYW06V2UsaXNVUkxTZWFyY2hQYXJhbXM6VmUsaXNUeXBlZEFycmF5OmdJLGlzRmlsZUxpc3Q6amUsZm9yRWFjaDpBQSxtZXJnZTpLQSxleHRlbmQ6QUksdHJpbTokZSxzdHJpcEJPTTp0SSxpbmhlcml0czplSSx0b0ZsYXRPYmplY3Q6SUksa2luZE9mOnVBLGtpbmRPZlRlc3Q6RyxlbmRzV2l0aDpySSx0b0FycmF5Om9JLGZvckVhY2hFbnRyeTppSSxtYXRjaEFsbDpuSSxpc0hUTUxGb3JtOnNJLGhhc093blByb3BlcnR5Om10LGhhc093blByb3A6bXQscmVkdWNlRGVzY3JpcHRvcnM6TnQsZnJlZXplTWV0aG9kczphSSx0b09iamVjdFNldDpRSSx0b0NhbWVsQ2FzZTpDSSxub29wOkVJLHRvRmluaXRlTnVtYmVyOmNJLGZpbmRLZXk6RnQsZ2xvYmFsOngsaXNDb250ZXh0RGVmaW5lZDpSdCxBTFBIQUJFVDpVdCxnZW5lcmF0ZVN0cmluZzpmSSxpc1NwZWNDb21wbGlhbnRGb3JtOmxJLHRvSlNPTk9iamVjdDp1SSxpc0FzeW5jRm46REksaXNUaGVuYWJsZTpoSSxzZXRJbW1lZGlhdGU6R3QsYXNhcDpkSX07ZnVuY3Rpb24gVyhBLHQsZSxJLHIpe0Vycm9yLmNhbGwodGhpcyksRXJyb3IuY2FwdHVyZVN0YWNrVHJhY2U/RXJyb3IuY2FwdHVyZVN0YWNrVHJhY2UodGhpcyx0aGlzLmNvbnN0cnVjdG9yKTp0aGlzLnN0YWNrPW5ldyBFcnJvcigpLnN0YWNrLHRoaXMubWVzc2FnZT1BLHRoaXMubmFtZT0iQXhpb3NFcnJvciIsdCYmKHRoaXMuY29kZT10KSxlJiYodGhpcy5jb25maWc9ZSksSSYmKHRoaXMucmVxdWVzdD1JKSxyJiYodGhpcy5yZXNwb25zZT1yKX1pLmluaGVyaXRzKFcsRXJyb3Ise3RvSlNPTjpmdW5jdGlvbigpe3JldHVybnttZXNzYWdlOnRoaXMubWVzc2FnZSxuYW1lOnRoaXMubmFtZSxkZXNjcmlwdGlvbjp0aGlzLmRlc2NyaXB0aW9uLG51bWJlcjp0aGlzLm51bWJlcixmaWxlTmFtZTp0aGlzLmZpbGVOYW1lLGxpbmVOdW1iZXI6dGhpcy5saW5lTnVtYmVyLGNvbHVtbk51bWJlcjp0aGlzLmNvbHVtbk51bWJlcixzdGFjazp0aGlzLnN0YWNrLGNvbmZpZzppLnRvSlNPTk9iamVjdCh0aGlzLmNvbmZpZyksY29kZTp0aGlzLmNvZGUsc3RhdHVzOnRoaXMucmVzcG9uc2UmJnRoaXMucmVzcG9uc2Uuc3RhdHVzP3RoaXMucmVzcG9uc2Uuc3RhdHVzOm51bGx9fX0pO3ZhciBrdD1XLnByb3RvdHlwZSxMdD17fTtbIkVSUl9CQURfT1BUSU9OX1ZBTFVFIiwiRVJSX0JBRF9PUFRJT04iLCJFQ09OTkFCT1JURUQiLCJFVElNRURPVVQiLCJFUlJfTkVUV09SSyIsIkVSUl9GUl9UT09fTUFOWV9SRURJUkVDVFMiLCJFUlJfREVQUkVDQVRFRCIsIkVSUl9CQURfUkVTUE9OU0UiLCJFUlJfQkFEX1JFUVVFU1QiLCJFUlJfQ0FOQ0VMRUQiLCJFUlJfTk9UX1NVUFBPUlQiLCJFUlJfSU5WQUxJRF9VUkwiXS5mb3JFYWNoKEE9PntMdFtBXT17dmFsdWU6QX19KTtPYmplY3QuZGVmaW5lUHJvcGVydGllcyhXLEx0KTtPYmplY3QuZGVmaW5lUHJvcGVydHkoa3QsImlzQXhpb3NFcnJvciIse3ZhbHVlOiEwfSk7Vy5mcm9tPShBLHQsZSxJLHIsbyk9PntsZXQgZz1PYmplY3QuY3JlYXRlKGt0KTtyZXR1cm4gaS50b0ZsYXRPYmplY3QoQSxnLGZ1bmN0aW9uKFEpe3JldHVybiBRIT09RXJyb3IucHJvdG90eXBlfSxDPT5DIT09ImlzQXhpb3NFcnJvciIpLFcuY2FsbChnLEEubWVzc2FnZSx0LGUsSSxyKSxnLmNhdXNlPUEsZy5uYW1lPUEubmFtZSxvJiZPYmplY3QuYXNzaWduKGcsbyksZ307dmFyIHU9Vzt2YXIgZEE9bnVsbDtmdW5jdGlvbiB4QShBKXtyZXR1cm4gaS5pc1BsYWluT2JqZWN0KEEpfHxpLmlzQXJyYXkoQSl9ZnVuY3Rpb24gYnQoQSl7cmV0dXJuIGkuZW5kc1dpdGgoQSwiW10iKT9BLnNsaWNlKDAsLTIpOkF9ZnVuY3Rpb24gSnQoQSx0LGUpe3JldHVybiBBP0EuY29uY2F0KHQpLm1hcChmdW5jdGlvbihyLG8pe3JldHVybiByPWJ0KHIpLCFlJiZvPyJbIityKyJdIjpyfSkuam9pbihlPyIuIjoiIik6dH1mdW5jdGlvbiB5SShBKXtyZXR1cm4gaS5pc0FycmF5KEEpJiYhQS5zb21lKHhBKX12YXIgbUk9aS50b0ZsYXRPYmplY3QoaSx7fSxudWxsLGZ1bmN0aW9uKHQpe3JldHVybi9eaXNbQS1aXS8udGVzdCh0KX0pO2Z1bmN0aW9uIHdJKEEsdCxlKXtpZighaS5pc09iamVjdChBKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJ0YXJnZXQgbXVzdCBiZSBhbiBvYmplY3QiKTt0PXR8fG5ldyhkQXx8Rm9ybURhdGEpLGU9aS50b0ZsYXRPYmplY3QoZSx7bWV0YVRva2VuczohMCxkb3RzOiExLGluZGV4ZXM6ITF9LCExLGZ1bmN0aW9uKGwsYyl7cmV0dXJuIWkuaXNVbmRlZmluZWQoY1tsXSl9KTtsZXQgST1lLm1ldGFUb2tlbnMscj1lLnZpc2l0b3J8fG4sbz1lLmRvdHMsZz1lLmluZGV4ZXMsUT0oZS5CbG9ifHx0eXBlb2YgQmxvYjwidSImJkJsb2IpJiZpLmlzU3BlY0NvbXBsaWFudEZvcm0odCk7aWYoIWkuaXNGdW5jdGlvbihyKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJ2aXNpdG9yIG11c3QgYmUgYSBmdW5jdGlvbiIpO2Z1bmN0aW9uIGEoRSl7aWYoRT09PW51bGwpcmV0dXJuIiI7aWYoaS5pc0RhdGUoRSkpcmV0dXJuIEUudG9JU09TdHJpbmcoKTtpZighUSYmaS5pc0Jsb2IoRSkpdGhyb3cgbmV3IHUoIkJsb2IgaXMgbm90IHN1cHBvcnRlZC4gVXNlIGEgQnVmZmVyIGluc3RlYWQuIik7cmV0dXJuIGkuaXNBcnJheUJ1ZmZlcihFKXx8aS5pc1R5cGVkQXJyYXkoRSk/USYmdHlwZW9mIEJsb2I9PSJmdW5jdGlvbiI/bmV3IEJsb2IoW0VdKTpCdWZmZXIuZnJvbShFKTpFfWZ1bmN0aW9uIG4oRSxsLGMpe2xldCBwPUU7aWYoRSYmIWMmJnR5cGVvZiBFPT0ib2JqZWN0Iil7aWYoaS5lbmRzV2l0aChsLCJ7fSIpKWw9ST9sOmwuc2xpY2UoMCwtMiksRT1KU09OLnN0cmluZ2lmeShFKTtlbHNlIGlmKGkuaXNBcnJheShFKSYmeUkoRSl8fChpLmlzRmlsZUxpc3QoRSl8fGkuZW5kc1dpdGgobCwiW10iKSkmJihwPWkudG9BcnJheShFKSkpcmV0dXJuIGw9YnQobCkscC5mb3JFYWNoKGZ1bmN0aW9uKEQsVSl7IShpLmlzVW5kZWZpbmVkKEQpfHxEPT09bnVsbCkmJnQuYXBwZW5kKGc9PT0hMD9KdChbbF0sVSxvKTpnPT09bnVsbD9sOmwrIltdIixhKEQpKX0pLCExfXJldHVybiB4QShFKT8hMDoodC5hcHBlbmQoSnQoYyxsLG8pLGEoRSkpLCExKX1sZXQgcz1bXSxmPU9iamVjdC5hc3NpZ24obUkse2RlZmF1bHRWaXNpdG9yOm4sY29udmVydFZhbHVlOmEsaXNWaXNpdGFibGU6eEF9KTtmdW5jdGlvbiBCKEUsbCl7aWYoIWkuaXNVbmRlZmluZWQoRSkpe2lmKHMuaW5kZXhPZihFKSE9PS0xKXRocm93IEVycm9yKCJDaXJjdWxhciByZWZlcmVuY2UgZGV0ZWN0ZWQgaW4gIitsLmpvaW4oIi4iKSk7cy5wdXNoKEUpLGkuZm9yRWFjaChFLGZ1bmN0aW9uKHAsUyl7KCEoaS5pc1VuZGVmaW5lZChwKXx8cD09PW51bGwpJiZyLmNhbGwodCxwLGkuaXNTdHJpbmcoUyk/Uy50cmltKCk6UyxsLGYpKT09PSEwJiZCKHAsbD9sLmNvbmNhdChTKTpbU10pfSkscy5wb3AoKX19aWYoIWkuaXNPYmplY3QoQSkpdGhyb3cgbmV3IFR5cGVFcnJvcigiZGF0YSBtdXN0IGJlIGFuIG9iamVjdCIpO3JldHVybiBCKEEpLHR9dmFyIHE9d0k7ZnVuY3Rpb24gSHQoQSl7bGV0IHQ9eyIhIjoiJTI1MjEiLCJcJyI6IiUyNTI3IiwiKCI6IiUyNTI4IiwiKSI6IiUyNTI5IiwifiI6IiUyNTdFIiwiJTI1MjAiOiIrIiwiJTI1MDAiOiJcXDAifTtyZXR1cm4gZW5jb2RlVVJJQ29tcG9uZW50KEEpLnJlcGxhY2UoL1shXCcoKX5dfCUyNTIwfCUyNTAwL2csZnVuY3Rpb24oSSl7cmV0dXJuIHRbSV19KX1mdW5jdGlvbiBZdChBLHQpe3RoaXMuX3BhaXJzPVtdLEEmJnEoQSx0aGlzLHQpfXZhciBxdD1ZdC5wcm90b3R5cGU7cXQuYXBwZW5kPWZ1bmN0aW9uKHQsZSl7dGhpcy5fcGFpcnMucHVzaChbdCxlXSl9O3F0LnRvU3RyaW5nPWZ1bmN0aW9uKHQpe2xldCBlPXQ/ZnVuY3Rpb24oSSl7cmV0dXJuIHQuY2FsbCh0aGlzLEksSHQpfTpIdDtyZXR1cm4gdGhpcy5fcGFpcnMubWFwKGZ1bmN0aW9uKHIpe3JldHVybiBlKHJbMF0pKyI9IitlKHJbMV0pfSwiIikuam9pbigiJiIpfTt2YXIgeUE9WXQ7ZnVuY3Rpb24gcEkoQSl7cmV0dXJuIGVuY29kZVVSSUNvbXBvbmVudChBKS5yZXBsYWNlKC8lMjUzQS9naSwiOiIpLnJlcGxhY2UoLyUyNTI0L2csIiQiKS5yZXBsYWNlKC8lMjUyQy9naSwiLCIpLnJlcGxhY2UoLyUyNTIwL2csIisiKS5yZXBsYWNlKC8lMjU1Qi9naSwiWyIpLnJlcGxhY2UoLyUyNTVEL2dpLCJdIil9ZnVuY3Rpb24gdEEoQSx0LGUpe2lmKCF0KXJldHVybiBBO2xldCBJPWUmJmUuZW5jb2RlfHxwSSxyPWUmJmUuc2VyaWFsaXplLG87aWYocj9vPXIodCxlKTpvPWkuaXNVUkxTZWFyY2hQYXJhbXModCk/dC50b1N0cmluZygpOm5ldyB5QSh0LGUpLnRvU3RyaW5nKEkpLG8pe2xldCBnPUEuaW5kZXhPZigiJTIzIik7ZyE9PS0xJiYoQT1BLnNsaWNlKDAsZykpLEErPShBLmluZGV4T2YoIj8iKT09PS0xPyI/IjoiJiIpK299cmV0dXJuIEF9dmFyIFBBPWNsYXNze2NvbnN0cnVjdG9yKCl7dGhpcy5oYW5kbGVycz1bXX11c2UodCxlLEkpe3JldHVybiB0aGlzLmhhbmRsZXJzLnB1c2goe2Z1bGZpbGxlZDp0LHJlamVjdGVkOmUsc3luY2hyb25vdXM6ST9JLnN5bmNocm9ub3VzOiExLHJ1bldoZW46ST9JLnJ1bldoZW46bnVsbH0pLHRoaXMuaGFuZGxlcnMubGVuZ3RoLTF9ZWplY3QodCl7dGhpcy5oYW5kbGVyc1t0XSYmKHRoaXMuaGFuZGxlcnNbdF09bnVsbCl9Y2xlYXIoKXt0aGlzLmhhbmRsZXJzJiYodGhpcy5oYW5kbGVycz1bXSl9Zm9yRWFjaCh0KXtpLmZvckVhY2godGhpcy5oYW5kbGVycyxmdW5jdGlvbihJKXtJIT09bnVsbCYmdChJKX0pfX0sakE9UEE7dmFyIG1BPXtzaWxlbnRKU09OUGFyc2luZzohMCxmb3JjZWRKU09OUGFyc2luZzohMCxjbGFyaWZ5VGltZW91dEVycm9yOiExfTt2YXIgTXQ9dHlwZW9mIFVSTFNlYXJjaFBhcmFtczwidSI/VVJMU2VhcmNoUGFyYW1zOnlBO3ZhciBUdD10eXBlb2YgRm9ybURhdGE8InUiP0Zvcm1EYXRhOm51bGw7dmFyIEt0PXR5cGVvZiBCbG9iPCJ1Ij9CbG9iOm51bGw7dmFyIE90PXtpc0Jyb3dzZXI6ITAsY2xhc3Nlczp7VVJMU2VhcmNoUGFyYW1zOk10LEZvcm1EYXRhOlR0LEJsb2I6S3R9LHByb3RvY29sczpbImh0dHAiLCJodHRwcyIsImZpbGUiLCJibG9iIiwidXJsIiwiZGF0YSJdfTt2YXIgWkE9e307d2UoWkEse2hhc0Jyb3dzZXJFbnY6KCk9PldBLGhhc1N0YW5kYXJkQnJvd3NlckVudjooKT0+U0ksaGFzU3RhbmRhcmRCcm93c2VyV2ViV29ya2VyRW52OigpPT5GSSxvcmlnaW46KCk9PlJJfSk7dmFyIFdBPXR5cGVvZiB3aW5kb3c8InUiJiZ0eXBlb2YgZG9jdW1lbnQ8InUiLFNJPShBPT5XQSYmWyJSZWFjdE5hdGl2ZSIsIk5hdGl2ZVNjcmlwdCIsIk5TIl0uaW5kZXhPZihBKTwwKSh0eXBlb2YgbmF2aWdhdG9yPCJ1IiYmbmF2aWdhdG9yLnByb2R1Y3QpLEZJPXR5cGVvZiBXb3JrZXJHbG9iYWxTY29wZTwidSImJnNlbGYgaW5zdGFuY2VvZiBXb3JrZXJHbG9iYWxTY29wZSYmdHlwZW9mIHNlbGYuaW1wb3J0U2NyaXB0cz09ImZ1bmN0aW9uIixSST1XQSYmd2luZG93LmxvY2F0aW9uLmhyZWZ8fCJodHRwOi8vbG9jYWxob3N0Ijt2YXIgdz17Li4uWkEsLi4uT3R9O2Z1bmN0aW9uIFZBKEEsdCl7cmV0dXJuIHEoQSxuZXcgdy5jbGFzc2VzLlVSTFNlYXJjaFBhcmFtcyxPYmplY3QuYXNzaWduKHt2aXNpdG9yOmZ1bmN0aW9uKGUsSSxyLG8pe3JldHVybiB3LmlzTm9kZSYmaS5pc0J1ZmZlcihlKT8odGhpcy5hcHBlbmQoSSxlLnRvU3RyaW5nKCJiYXNlNjQiKSksITEpOm8uZGVmYXVsdFZpc2l0b3IuYXBwbHkodGhpcyxhcmd1bWVudHMpfX0sdCkpfWZ1bmN0aW9uIE5JKEEpe3JldHVybiBpLm1hdGNoQWxsKC9cXHcrfFxcWyhcXHcqKV0vZyxBKS5tYXAodD0+dFswXT09PSJbXSI/IiI6dFsxXXx8dFswXSl9ZnVuY3Rpb24gVUkoQSl7bGV0IHQ9e30sZT1PYmplY3Qua2V5cyhBKSxJLHI9ZS5sZW5ndGgsbztmb3IoST0wO0k8cjtJKyspbz1lW0ldLHRbb109QVtvXTtyZXR1cm4gdH1mdW5jdGlvbiBHSShBKXtmdW5jdGlvbiB0KGUsSSxyLG8pe2xldCBnPWVbbysrXTtpZihnPT09Il9fcHJvdG9fXyIpcmV0dXJuITA7bGV0IEM9TnVtYmVyLmlzRmluaXRlKCtnKSxRPW8+PWUubGVuZ3RoO3JldHVybiBnPSFnJiZpLmlzQXJyYXkocik/ci5sZW5ndGg6ZyxRPyhpLmhhc093blByb3AocixnKT9yW2ddPVtyW2ddLEldOnJbZ109SSwhQyk6KCghcltnXXx8IWkuaXNPYmplY3QocltnXSkpJiYocltnXT1bXSksdChlLEkscltnXSxvKSYmaS5pc0FycmF5KHJbZ10pJiYocltnXT1VSShyW2ddKSksIUMpfWlmKGkuaXNGb3JtRGF0YShBKSYmaS5pc0Z1bmN0aW9uKEEuZW50cmllcykpe2xldCBlPXt9O3JldHVybiBpLmZvckVhY2hFbnRyeShBLChJLHIpPT57dChOSShJKSxyLGUsMCl9KSxlfXJldHVybiBudWxsfXZhciB3QT1HSTtmdW5jdGlvbiBrSShBLHQsZSl7aWYoaS5pc1N0cmluZyhBKSl0cnl7cmV0dXJuKHR8fEpTT04ucGFyc2UpKEEpLGkudHJpbShBKX1jYXRjaChJKXtpZihJLm5hbWUhPT0iU3ludGF4RXJyb3IiKXRocm93IEl9cmV0dXJuKGV8fEpTT04uc3RyaW5naWZ5KShBKX12YXIgX0E9e3RyYW5zaXRpb25hbDptQSxhZGFwdGVyOlsieGhyIiwiaHR0cCIsImZldGNoIl0sdHJhbnNmb3JtUmVxdWVzdDpbZnVuY3Rpb24odCxlKXtsZXQgST1lLmdldENvbnRlbnRUeXBlKCl8fCIiLHI9SS5pbmRleE9mKCJhcHBsaWNhdGlvbi9qc29uIik+LTEsbz1pLmlzT2JqZWN0KHQpO2lmKG8mJmkuaXNIVE1MRm9ybSh0KSYmKHQ9bmV3IEZvcm1EYXRhKHQpKSxpLmlzRm9ybURhdGEodCkpcmV0dXJuIHI/SlNPTi5zdHJpbmdpZnkod0EodCkpOnQ7aWYoaS5pc0FycmF5QnVmZmVyKHQpfHxpLmlzQnVmZmVyKHQpfHxpLmlzU3RyZWFtKHQpfHxpLmlzRmlsZSh0KXx8aS5pc0Jsb2IodCl8fGkuaXNSZWFkYWJsZVN0cmVhbSh0KSlyZXR1cm4gdDtpZihpLmlzQXJyYXlCdWZmZXJWaWV3KHQpKXJldHVybiB0LmJ1ZmZlcjtpZihpLmlzVVJMU2VhcmNoUGFyYW1zKHQpKXJldHVybiBlLnNldENvbnRlbnRUeXBlKCJhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQ7Y2hhcnNldD11dGYtOCIsITEpLHQudG9TdHJpbmcoKTtsZXQgQztpZihvKXtpZihJLmluZGV4T2YoImFwcGxpY2F0aW9uL3gtd3d3LWZvcm0tdXJsZW5jb2RlZCIpPi0xKXJldHVybiBWQSh0LHRoaXMuZm9ybVNlcmlhbGl6ZXIpLnRvU3RyaW5nKCk7aWYoKEM9aS5pc0ZpbGVMaXN0KHQpKXx8SS5pbmRleE9mKCJtdWx0aXBhcnQvZm9ybS1kYXRhIik+LTEpe2xldCBRPXRoaXMuZW52JiZ0aGlzLmVudi5Gb3JtRGF0YTtyZXR1cm4gcShDP3siZmlsZXNbXSI6dH06dCxRJiZuZXcgUSx0aGlzLmZvcm1TZXJpYWxpemVyKX19cmV0dXJuIG98fHI/KGUuc2V0Q29udGVudFR5cGUoImFwcGxpY2F0aW9uL2pzb24iLCExKSxrSSh0KSk6dH1dLHRyYW5zZm9ybVJlc3BvbnNlOltmdW5jdGlvbih0KXtsZXQgZT10aGlzLnRyYW5zaXRpb25hbHx8X0EudHJhbnNpdGlvbmFsLEk9ZSYmZS5mb3JjZWRKU09OUGFyc2luZyxyPXRoaXMucmVzcG9uc2VUeXBlPT09Impzb24iO2lmKGkuaXNSZXNwb25zZSh0KXx8aS5pc1JlYWRhYmxlU3RyZWFtKHQpKXJldHVybiB0O2lmKHQmJmkuaXNTdHJpbmcodCkmJihJJiYhdGhpcy5yZXNwb25zZVR5cGV8fHIpKXtsZXQgZz0hKGUmJmUuc2lsZW50SlNPTlBhcnNpbmcpJiZyO3RyeXtyZXR1cm4gSlNPTi5wYXJzZSh0KX1jYXRjaChDKXtpZihnKXRocm93IEMubmFtZT09PSJTeW50YXhFcnJvciI/dS5mcm9tKEMsdS5FUlJfQkFEX1JFU1BPTlNFLHRoaXMsbnVsbCx0aGlzLnJlc3BvbnNlKTpDfX1yZXR1cm4gdH1dLHRpbWVvdXQ6MCx4c3JmQ29va2llTmFtZToiWFNSRi1UT0tFTiIseHNyZkhlYWRlck5hbWU6IlgtWFNSRi1UT0tFTiIsbWF4Q29udGVudExlbmd0aDotMSxtYXhCb2R5TGVuZ3RoOi0xLGVudjp7Rm9ybURhdGE6dy5jbGFzc2VzLkZvcm1EYXRhLEJsb2I6dy5jbGFzc2VzLkJsb2J9LHZhbGlkYXRlU3RhdHVzOmZ1bmN0aW9uKHQpe3JldHVybiB0Pj0yMDAmJnQ8MzAwfSxoZWFkZXJzOntjb21tb246e0FjY2VwdDoiYXBwbGljYXRpb24vanNvbiwgdGV4dC9wbGFpbiwgKi8qIiwiQ29udGVudC1UeXBlIjp2b2lkIDB9fX07aS5mb3JFYWNoKFsiZGVsZXRlIiwiZ2V0IiwiaGVhZCIsInBvc3QiLCJwdXQiLCJwYXRjaCJdLEE9PntfQS5oZWFkZXJzW0FdPXt9fSk7dmFyIFo9X0E7dmFyIExJPWkudG9PYmplY3RTZXQoWyJhZ2UiLCJhdXRob3JpemF0aW9uIiwiY29udGVudC1sZW5ndGgiLCJjb250ZW50LXR5cGUiLCJldGFnIiwiZXhwaXJlcyIsImZyb20iLCJob3N0IiwiaWYtbW9kaWZpZWQtc2luY2UiLCJpZi11bm1vZGlmaWVkLXNpbmNlIiwibGFzdC1tb2RpZmllZCIsImxvY2F0aW9uIiwibWF4LWZvcndhcmRzIiwicHJveHktYXV0aG9yaXphdGlvbiIsInJlZmVyZXIiLCJyZXRyeS1hZnRlciIsInVzZXItYWdlbnQiXSkseHQ9QT0+e2xldCB0PXt9LGUsSSxyO3JldHVybiBBJiZBLnNwbGl0KGAlMEFgKS5mb3JFYWNoKGZ1bmN0aW9uKGcpe3I9Zy5pbmRleE9mKCI6IiksZT1nLnN1YnN0cmluZygwLHIpLnRyaW0oKS50b0xvd2VyQ2FzZSgpLEk9Zy5zdWJzdHJpbmcocisxKS50cmltKCksISghZXx8dFtlXSYmTElbZV0pJiYoZT09PSJzZXQtY29va2llIj90W2VdP3RbZV0ucHVzaChJKTp0W2VdPVtJXTp0W2VdPXRbZV0/dFtlXSsiLCAiK0k6SSl9KSx0fTt2YXIgUHQ9U3ltYm9sKCJpbnRlcm5hbHMiKTtmdW5jdGlvbiBlQShBKXtyZXR1cm4gQSYmU3RyaW5nKEEpLnRyaW0oKS50b0xvd2VyQ2FzZSgpfWZ1bmN0aW9uIHBBKEEpe3JldHVybiBBPT09ITF8fEE9PW51bGw/QTppLmlzQXJyYXkoQSk/QS5tYXAocEEpOlN0cmluZyhBKX1mdW5jdGlvbiBKSShBKXtsZXQgdD1PYmplY3QuY3JlYXRlKG51bGwpLGU9LyhbXlxccyw7PV0rKVxccyooPzo9XFxzKihbXiw7XSspKT8vZyxJO2Zvcig7ST1lLmV4ZWMoQSk7KXRbSVsxXV09SVsyXTtyZXR1cm4gdH12YXIgYkk9QT0+L15bLV9hLXpBLVowLTleYHx+LCElMjMkJSZcJyorLl0rJC8udGVzdChBLnRyaW0oKSk7ZnVuY3Rpb24gWEEoQSx0LGUsSSxyKXtpZihpLmlzRnVuY3Rpb24oSSkpcmV0dXJuIEkuY2FsbCh0aGlzLHQsZSk7aWYociYmKHQ9ZSksISFpLmlzU3RyaW5nKHQpKXtpZihpLmlzU3RyaW5nKEkpKXJldHVybiB0LmluZGV4T2YoSSkhPT0tMTtpZihpLmlzUmVnRXhwKEkpKXJldHVybiBJLnRlc3QodCl9fWZ1bmN0aW9uIEhJKEEpe3JldHVybiBBLnRyaW0oKS50b0xvd2VyQ2FzZSgpLnJlcGxhY2UoLyhbYS16XFxkXSkoXFx3KikvZywodCxlLEkpPT5lLnRvVXBwZXJDYXNlKCkrSSl9ZnVuY3Rpb24gWUkoQSx0KXtsZXQgZT1pLnRvQ2FtZWxDYXNlKCIgIit0KTtbImdldCIsInNldCIsImhhcyJdLmZvckVhY2goST0+e09iamVjdC5kZWZpbmVQcm9wZXJ0eShBLEkrZSx7dmFsdWU6ZnVuY3Rpb24ocixvLGcpe3JldHVybiB0aGlzW0ldLmNhbGwodGhpcyx0LHIsbyxnKX0sY29uZmlndXJhYmxlOiEwfSl9KX12YXIgVj1jbGFzc3tjb25zdHJ1Y3Rvcih0KXt0JiZ0aGlzLnNldCh0KX1zZXQodCxlLEkpe2xldCByPXRoaXM7ZnVuY3Rpb24gbyhDLFEsYSl7bGV0IG49ZUEoUSk7aWYoIW4pdGhyb3cgbmV3IEVycm9yKCJoZWFkZXIgbmFtZSBtdXN0IGJlIGEgbm9uLWVtcHR5IHN0cmluZyIpO2xldCBzPWkuZmluZEtleShyLG4pOyghc3x8cltzXT09PXZvaWQgMHx8YT09PSEwfHxhPT09dm9pZCAwJiZyW3NdIT09ITEpJiYocltzfHxRXT1wQShDKSl9bGV0IGc9KEMsUSk9PmkuZm9yRWFjaChDLChhLG4pPT5vKGEsbixRKSk7aWYoaS5pc1BsYWluT2JqZWN0KHQpfHx0IGluc3RhbmNlb2YgdGhpcy5jb25zdHJ1Y3RvcilnKHQsZSk7ZWxzZSBpZihpLmlzU3RyaW5nKHQpJiYodD10LnRyaW0oKSkmJiFiSSh0KSlnKHh0KHQpLGUpO2Vsc2UgaWYoaS5pc0hlYWRlcnModCkpZm9yKGxldFtDLFFdb2YgdC5lbnRyaWVzKCkpbyhRLEMsSSk7ZWxzZSB0IT1udWxsJiZvKGUsdCxJKTtyZXR1cm4gdGhpc31nZXQodCxlKXtpZih0PWVBKHQpLHQpe2xldCBJPWkuZmluZEtleSh0aGlzLHQpO2lmKEkpe2xldCByPXRoaXNbSV07aWYoIWUpcmV0dXJuIHI7aWYoZT09PSEwKXJldHVybiBKSShyKTtpZihpLmlzRnVuY3Rpb24oZSkpcmV0dXJuIGUuY2FsbCh0aGlzLHIsSSk7aWYoaS5pc1JlZ0V4cChlKSlyZXR1cm4gZS5leGVjKHIpO3Rocm93IG5ldyBUeXBlRXJyb3IoInBhcnNlciBtdXN0IGJlIGJvb2xlYW58cmVnZXhwfGZ1bmN0aW9uIil9fX1oYXModCxlKXtpZih0PWVBKHQpLHQpe2xldCBJPWkuZmluZEtleSh0aGlzLHQpO3JldHVybiEhKEkmJnRoaXNbSV0hPT12b2lkIDAmJighZXx8WEEodGhpcyx0aGlzW0ldLEksZSkpKX1yZXR1cm4hMX1kZWxldGUodCxlKXtsZXQgST10aGlzLHI9ITE7ZnVuY3Rpb24gbyhnKXtpZihnPWVBKGcpLGcpe2xldCBDPWkuZmluZEtleShJLGcpO0MmJighZXx8WEEoSSxJW0NdLEMsZSkpJiYoZGVsZXRlIElbQ10scj0hMCl9fXJldHVybiBpLmlzQXJyYXkodCk/dC5mb3JFYWNoKG8pOm8odCkscn1jbGVhcih0KXtsZXQgZT1PYmplY3Qua2V5cyh0aGlzKSxJPWUubGVuZ3RoLHI9ITE7Zm9yKDtJLS07KXtsZXQgbz1lW0ldOyghdHx8WEEodGhpcyx0aGlzW29dLG8sdCwhMCkpJiYoZGVsZXRlIHRoaXNbb10scj0hMCl9cmV0dXJuIHJ9bm9ybWFsaXplKHQpe2xldCBlPXRoaXMsST17fTtyZXR1cm4gaS5mb3JFYWNoKHRoaXMsKHIsbyk9PntsZXQgZz1pLmZpbmRLZXkoSSxvKTtpZihnKXtlW2ddPXBBKHIpLGRlbGV0ZSBlW29dO3JldHVybn1sZXQgQz10P0hJKG8pOlN0cmluZyhvKS50cmltKCk7QyE9PW8mJmRlbGV0ZSBlW29dLGVbQ109cEEociksSVtDXT0hMH0pLHRoaXN9Y29uY2F0KC4uLnQpe3JldHVybiB0aGlzLmNvbnN0cnVjdG9yLmNvbmNhdCh0aGlzLC4uLnQpfXRvSlNPTih0KXtsZXQgZT1PYmplY3QuY3JlYXRlKG51bGwpO3JldHVybiBpLmZvckVhY2godGhpcywoSSxyKT0+e0khPW51bGwmJkkhPT0hMSYmKGVbcl09dCYmaS5pc0FycmF5KEkpP0kuam9pbigiLCAiKTpJKX0pLGV9W1N5bWJvbC5pdGVyYXRvcl0oKXtyZXR1cm4gT2JqZWN0LmVudHJpZXModGhpcy50b0pTT04oKSlbU3ltYm9sLml0ZXJhdG9yXSgpfXRvU3RyaW5nKCl7cmV0dXJuIE9iamVjdC5lbnRyaWVzKHRoaXMudG9KU09OKCkpLm1hcCgoW3QsZV0pPT50KyI6ICIrZSkuam9pbihgJTBBYCl9Z2V0W1N5bWJvbC50b1N0cmluZ1RhZ10oKXtyZXR1cm4iQXhpb3NIZWFkZXJzIn1zdGF0aWMgZnJvbSh0KXtyZXR1cm4gdCBpbnN0YW5jZW9mIHRoaXM/dDpuZXcgdGhpcyh0KX1zdGF0aWMgY29uY2F0KHQsLi4uZSl7bGV0IEk9bmV3IHRoaXModCk7cmV0dXJuIGUuZm9yRWFjaChyPT5JLnNldChyKSksSX1zdGF0aWMgYWNjZXNzb3IodCl7bGV0IEk9KHRoaXNbUHRdPXRoaXNbUHRdPXthY2Nlc3NvcnM6e319KS5hY2Nlc3NvcnMscj10aGlzLnByb3RvdHlwZTtmdW5jdGlvbiBvKGcpe2xldCBDPWVBKGcpO0lbQ118fChZSShyLGcpLElbQ109ITApfXJldHVybiBpLmlzQXJyYXkodCk/dC5mb3JFYWNoKG8pOm8odCksdGhpc319O1YuYWNjZXNzb3IoWyJDb250ZW50LVR5cGUiLCJDb250ZW50LUxlbmd0aCIsIkFjY2VwdCIsIkFjY2VwdC1FbmNvZGluZyIsIlVzZXItQWdlbnQiLCJBdXRob3JpemF0aW9uIl0pO2kucmVkdWNlRGVzY3JpcHRvcnMoVi5wcm90b3R5cGUsKHt2YWx1ZTpBfSx0KT0+e2xldCBlPXRbMF0udG9VcHBlckNhc2UoKSt0LnNsaWNlKDEpO3JldHVybntnZXQ6KCk9PkEsc2V0KEkpe3RoaXNbZV09SX19fSk7aS5mcmVlemVNZXRob2RzKFYpO3ZhciBtPVY7ZnVuY3Rpb24gSUEoQSx0KXtsZXQgZT10aGlzfHxaLEk9dHx8ZSxyPW0uZnJvbShJLmhlYWRlcnMpLG89SS5kYXRhO3JldHVybiBpLmZvckVhY2goQSxmdW5jdGlvbihDKXtvPUMuY2FsbChlLG8sci5ub3JtYWxpemUoKSx0P3Quc3RhdHVzOnZvaWQgMCl9KSxyLm5vcm1hbGl6ZSgpLG99ZnVuY3Rpb24gckEoQSl7cmV0dXJuISEoQSYmQS5fX0NBTkNFTF9fKX1mdW5jdGlvbiBqdChBLHQsZSl7dS5jYWxsKHRoaXMsQT8/ImNhbmNlbGVkIix1LkVSUl9DQU5DRUxFRCx0LGUpLHRoaXMubmFtZT0iQ2FuY2VsZWRFcnJvciJ9aS5pbmhlcml0cyhqdCx1LHtfX0NBTkNFTF9fOiEwfSk7dmFyIGI9anQ7ZnVuY3Rpb24gb0EoQSx0LGUpe2xldCBJPWUuY29uZmlnLnZhbGlkYXRlU3RhdHVzOyFlLnN0YXR1c3x8IUl8fEkoZS5zdGF0dXMpP0EoZSk6dChuZXcgdSgiUmVxdWVzdCBmYWlsZWQgd2l0aCBzdGF0dXMgY29kZSAiK2Uuc3RhdHVzLFt1LkVSUl9CQURfUkVRVUVTVCx1LkVSUl9CQURfUkVTUE9OU0VdW01hdGguZmxvb3IoZS5zdGF0dXMvMTAwKS00XSxlLmNvbmZpZyxlLnJlcXVlc3QsZSkpfWZ1bmN0aW9uIHpBKEEpe2xldCB0PS9eKFstK1xcd117MSwyNX0pKDo/XFwvXFwvfDopLy5leGVjKEEpO3JldHVybiB0JiZ0WzFdfHwiIn1mdW5jdGlvbiBxSShBLHQpe0E9QXx8MTA7bGV0IGU9bmV3IEFycmF5KEEpLEk9bmV3IEFycmF5KEEpLHI9MCxvPTAsZztyZXR1cm4gdD10IT09dm9pZCAwP3Q6MWUzLGZ1bmN0aW9uKFEpe2xldCBhPURhdGUubm93KCksbj1JW29dO2d8fChnPWEpLGVbcl09USxJW3JdPWE7bGV0IHM9byxmPTA7Zm9yKDtzIT09cjspZis9ZVtzKytdLHM9cyVBO2lmKHI9KHIrMSklQSxyPT09byYmKG89KG8rMSklQSksYS1nPHQpcmV0dXJuO2xldCBCPW4mJmEtbjtyZXR1cm4gQj9NYXRoLnJvdW5kKGYqMWUzL0IpOnZvaWQgMH19dmFyIFd0PXFJO2Z1bmN0aW9uIE1JKEEsdCl7bGV0IGU9MCxJPTFlMy90LHIsbyxnPShhLG49RGF0ZS5ub3coKSk9PntlPW4scj1udWxsLG8mJihjbGVhclRpbWVvdXQobyksbz1udWxsKSxBLmFwcGx5KG51bGwsYSl9O3JldHVyblsoLi4uYSk9PntsZXQgbj1EYXRlLm5vdygpLHM9bi1lO3M+PUk/ZyhhLG4pOihyPWEsb3x8KG89c2V0VGltZW91dCgoKT0+e289bnVsbCxnKHIpfSxJLXMpKSl9LCgpPT5yJiZnKHIpXX12YXIgWnQ9TUk7dmFyIF89KEEsdCxlPTMpPT57bGV0IEk9MCxyPVd0KDUwLDI1MCk7cmV0dXJuIFp0KG89PntsZXQgZz1vLmxvYWRlZCxDPW8ubGVuZ3RoQ29tcHV0YWJsZT9vLnRvdGFsOnZvaWQgMCxRPWctSSxhPXIoUSksbj1nPD1DO0k9ZztsZXQgcz17bG9hZGVkOmcsdG90YWw6Qyxwcm9ncmVzczpDP2cvQzp2b2lkIDAsYnl0ZXM6USxyYXRlOmF8fHZvaWQgMCxlc3RpbWF0ZWQ6YSYmQyYmbj8oQy1nKS9hOnZvaWQgMCxldmVudDpvLGxlbmd0aENvbXB1dGFibGU6QyE9bnVsbCxbdD8iZG93bmxvYWQiOiJ1cGxvYWQiXTohMH07QShzKX0sZSl9LHZBPShBLHQpPT57bGV0IGU9QSE9bnVsbDtyZXR1cm5bST0+dFswXSh7bGVuZ3RoQ29tcHV0YWJsZTplLHRvdGFsOkEsbG9hZGVkOkl9KSx0WzFdXX0sJEE9QT0+KC4uLnQpPT5pLmFzYXAoKCk9PkEoLi4udCkpO3ZhciBWdD13Lmhhc1N0YW5kYXJkQnJvd3NlckVudj9mdW5jdGlvbigpe2xldCB0PS8obXNpZXx0cmlkZW50KS9pLnRlc3QobmF2aWdhdG9yLnVzZXJBZ2VudCksZT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJhIiksSTtmdW5jdGlvbiByKG8pe2xldCBnPW87cmV0dXJuIHQmJihlLnNldEF0dHJpYnV0ZSgiaHJlZiIsZyksZz1lLmhyZWYpLGUuc2V0QXR0cmlidXRlKCJocmVmIixnKSx7aHJlZjplLmhyZWYscHJvdG9jb2w6ZS5wcm90b2NvbD9lLnByb3RvY29sLnJlcGxhY2UoLzokLywiIik6IiIsaG9zdDplLmhvc3Qsc2VhcmNoOmUuc2VhcmNoP2Uuc2VhcmNoLnJlcGxhY2UoL15cXD8vLCIiKToiIixoYXNoOmUuaGFzaD9lLmhhc2gucmVwbGFjZSgvXiUyMy8sIiIpOiIiLGhvc3RuYW1lOmUuaG9zdG5hbWUscG9ydDplLnBvcnQscGF0aG5hbWU6ZS5wYXRobmFtZS5jaGFyQXQoMCk9PT0iLyI/ZS5wYXRobmFtZToiLyIrZS5wYXRobmFtZX19cmV0dXJuIEk9cih3aW5kb3cubG9jYXRpb24uaHJlZiksZnVuY3Rpb24oZyl7bGV0IEM9aS5pc1N0cmluZyhnKT9yKGcpOmc7cmV0dXJuIEMucHJvdG9jb2w9PT1JLnByb3RvY29sJiZDLmhvc3Q9PT1JLmhvc3R9fSgpOmZ1bmN0aW9uKCl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuITB9fSgpO3ZhciBfdD13Lmhhc1N0YW5kYXJkQnJvd3NlckVudj97d3JpdGUoQSx0LGUsSSxyLG8pe2xldCBnPVtBKyI9IitlbmNvZGVVUklDb21wb25lbnQodCldO2kuaXNOdW1iZXIoZSkmJmcucHVzaCgiZXhwaXJlcz0iK25ldyBEYXRlKGUpLnRvR01UU3RyaW5nKCkpLGkuaXNTdHJpbmcoSSkmJmcucHVzaCgicGF0aD0iK0kpLGkuaXNTdHJpbmcocikmJmcucHVzaCgiZG9tYWluPSIrciksbz09PSEwJiZnLnB1c2goInNlY3VyZSIpLGRvY3VtZW50LmNvb2tpZT1nLmpvaW4oIjsgIil9LHJlYWQoQSl7bGV0IHQ9ZG9jdW1lbnQuY29va2llLm1hdGNoKG5ldyBSZWdFeHAoIihefDtcXFxccyopKCIrQSsiKT0oW147XSopIikpO3JldHVybiB0P2RlY29kZVVSSUNvbXBvbmVudCh0WzNdKTpudWxsfSxyZW1vdmUoQSl7dGhpcy53cml0ZShBLCIiLERhdGUubm93KCktODY0ZTUpfX06e3dyaXRlKCl7fSxyZWFkKCl7cmV0dXJuIG51bGx9LHJlbW92ZSgpe319O2Z1bmN0aW9uIEF0KEEpe3JldHVybi9eKFthLXpdW2EtelxcZCtcXC0uXSo6KT9cXC9cXC8vaS50ZXN0KEEpfWZ1bmN0aW9uIHR0KEEsdCl7cmV0dXJuIHQ/QS5yZXBsYWNlKC9cXC8/XFwvJC8sIiIpKyIvIit0LnJlcGxhY2UoL15cXC8rLywiIik6QX1mdW5jdGlvbiBnQShBLHQpe3JldHVybiBBJiYhQXQodCk/dHQoQSx0KTp0fXZhciBYdD1BPT5BIGluc3RhbmNlb2YgbT97Li4uQX06QTtmdW5jdGlvbiBrKEEsdCl7dD10fHx7fTtsZXQgZT17fTtmdW5jdGlvbiBJKGEsbixzKXtyZXR1cm4gaS5pc1BsYWluT2JqZWN0KGEpJiZpLmlzUGxhaW5PYmplY3Qobik/aS5tZXJnZS5jYWxsKHtjYXNlbGVzczpzfSxhLG4pOmkuaXNQbGFpbk9iamVjdChuKT9pLm1lcmdlKHt9LG4pOmkuaXNBcnJheShuKT9uLnNsaWNlKCk6bn1mdW5jdGlvbiByKGEsbixzKXtpZihpLmlzVW5kZWZpbmVkKG4pKXtpZighaS5pc1VuZGVmaW5lZChhKSlyZXR1cm4gSSh2b2lkIDAsYSxzKX1lbHNlIHJldHVybiBJKGEsbixzKX1mdW5jdGlvbiBvKGEsbil7aWYoIWkuaXNVbmRlZmluZWQobikpcmV0dXJuIEkodm9pZCAwLG4pfWZ1bmN0aW9uIGcoYSxuKXtpZihpLmlzVW5kZWZpbmVkKG4pKXtpZighaS5pc1VuZGVmaW5lZChhKSlyZXR1cm4gSSh2b2lkIDAsYSl9ZWxzZSByZXR1cm4gSSh2b2lkIDAsbil9ZnVuY3Rpb24gQyhhLG4scyl7aWYocyBpbiB0KXJldHVybiBJKGEsbik7aWYocyBpbiBBKXJldHVybiBJKHZvaWQgMCxhKX1sZXQgUT17dXJsOm8sbWV0aG9kOm8sZGF0YTpvLGJhc2VVUkw6Zyx0cmFuc2Zvcm1SZXF1ZXN0OmcsdHJhbnNmb3JtUmVzcG9uc2U6ZyxwYXJhbXNTZXJpYWxpemVyOmcsdGltZW91dDpnLHRpbWVvdXRNZXNzYWdlOmcsd2l0aENyZWRlbnRpYWxzOmcsd2l0aFhTUkZUb2tlbjpnLGFkYXB0ZXI6ZyxyZXNwb25zZVR5cGU6Zyx4c3JmQ29va2llTmFtZTpnLHhzcmZIZWFkZXJOYW1lOmcsb25VcGxvYWRQcm9ncmVzczpnLG9uRG93bmxvYWRQcm9ncmVzczpnLGRlY29tcHJlc3M6ZyxtYXhDb250ZW50TGVuZ3RoOmcsbWF4Qm9keUxlbmd0aDpnLGJlZm9yZVJlZGlyZWN0OmcsdHJhbnNwb3J0OmcsaHR0cEFnZW50OmcsaHR0cHNBZ2VudDpnLGNhbmNlbFRva2VuOmcsc29ja2V0UGF0aDpnLHJlc3BvbnNlRW5jb2Rpbmc6Zyx2YWxpZGF0ZVN0YXR1czpDLGhlYWRlcnM6KGEsbik9PnIoWHQoYSksWHQobiksITApfTtyZXR1cm4gaS5mb3JFYWNoKE9iamVjdC5rZXlzKE9iamVjdC5hc3NpZ24oe30sQSx0KSksZnVuY3Rpb24obil7bGV0IHM9UVtuXXx8cixmPXMoQVtuXSx0W25dLG4pO2kuaXNVbmRlZmluZWQoZikmJnMhPT1DfHwoZVtuXT1mKX0pLGV9dmFyIFNBPUE9PntsZXQgdD1rKHt9LEEpLHtkYXRhOmUsd2l0aFhTUkZUb2tlbjpJLHhzcmZIZWFkZXJOYW1lOnIseHNyZkNvb2tpZU5hbWU6byxoZWFkZXJzOmcsYXV0aDpDfT10O3QuaGVhZGVycz1nPW0uZnJvbShnKSx0LnVybD10QShnQSh0LmJhc2VVUkwsdC51cmwpLEEucGFyYW1zLEEucGFyYW1zU2VyaWFsaXplciksQyYmZy5zZXQoIkF1dGhvcml6YXRpb24iLCJCYXNpYyAiK2J0b2EoKEMudXNlcm5hbWV8fCIiKSsiOiIrKEMucGFzc3dvcmQ/dW5lc2NhcGUoZW5jb2RlVVJJQ29tcG9uZW50KEMucGFzc3dvcmQpKToiIikpKTtsZXQgUTtpZihpLmlzRm9ybURhdGEoZSkpe2lmKHcuaGFzU3RhbmRhcmRCcm93c2VyRW52fHx3Lmhhc1N0YW5kYXJkQnJvd3NlcldlYldvcmtlckVudilnLnNldENvbnRlbnRUeXBlKHZvaWQgMCk7ZWxzZSBpZigoUT1nLmdldENvbnRlbnRUeXBlKCkpIT09ITEpe2xldFthLC4uLm5dPVE/US5zcGxpdCgiOyIpLm1hcChzPT5zLnRyaW0oKSkuZmlsdGVyKEJvb2xlYW4pOltdO2cuc2V0Q29udGVudFR5cGUoW2F8fCJtdWx0aXBhcnQvZm9ybS1kYXRhIiwuLi5uXS5qb2luKCI7ICIpKX19aWYody5oYXNTdGFuZGFyZEJyb3dzZXJFbnYmJihJJiZpLmlzRnVuY3Rpb24oSSkmJihJPUkodCkpLEl8fEkhPT0hMSYmVnQodC51cmwpKSl7bGV0IGE9ciYmbyYmX3QucmVhZChvKTthJiZnLnNldChyLGEpfXJldHVybiB0fTt2YXIgVEk9dHlwZW9mIFhNTEh0dHBSZXF1ZXN0PCJ1Iix6dD1USSYmZnVuY3Rpb24oQSl7cmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uKGUsSSl7bGV0IHI9U0EoQSksbz1yLmRhdGEsZz1tLmZyb20oci5oZWFkZXJzKS5ub3JtYWxpemUoKSx7cmVzcG9uc2VUeXBlOkMsb25VcGxvYWRQcm9ncmVzczpRLG9uRG93bmxvYWRQcm9ncmVzczphfT1yLG4scyxmLEIsRTtmdW5jdGlvbiBsKCl7QiYmQigpLEUmJkUoKSxyLmNhbmNlbFRva2VuJiZyLmNhbmNlbFRva2VuLnVuc3Vic2NyaWJlKG4pLHIuc2lnbmFsJiZyLnNpZ25hbC5yZW1vdmVFdmVudExpc3RlbmVyKCJhYm9ydCIsbil9bGV0IGM9bmV3IFhNTEh0dHBSZXF1ZXN0O2Mub3BlbihyLm1ldGhvZC50b1VwcGVyQ2FzZSgpLHIudXJsLCEwKSxjLnRpbWVvdXQ9ci50aW1lb3V0O2Z1bmN0aW9uIHAoKXtpZighYylyZXR1cm47bGV0IEQ9bS5mcm9tKCJnZXRBbGxSZXNwb25zZUhlYWRlcnMiaW4gYyYmYy5nZXRBbGxSZXNwb25zZUhlYWRlcnMoKSksSz17ZGF0YTohQ3x8Qz09PSJ0ZXh0Inx8Qz09PSJqc29uIj9jLnJlc3BvbnNlVGV4dDpjLnJlc3BvbnNlLHN0YXR1czpjLnN0YXR1cyxzdGF0dXNUZXh0OmMuc3RhdHVzVGV4dCxoZWFkZXJzOkQsY29uZmlnOkEscmVxdWVzdDpjfTtvQShmdW5jdGlvbihKKXtlKEopLGwoKX0sZnVuY3Rpb24oSil7SShKKSxsKCl9LEspLGM9bnVsbH0ib25sb2FkZW5kImluIGM/Yy5vbmxvYWRlbmQ9cDpjLm9ucmVhZHlzdGF0ZWNoYW5nZT1mdW5jdGlvbigpeyFjfHxjLnJlYWR5U3RhdGUhPT00fHxjLnN0YXR1cz09PTAmJiEoYy5yZXNwb25zZVVSTCYmYy5yZXNwb25zZVVSTC5pbmRleE9mKCJmaWxlOiIpPT09MCl8fHNldFRpbWVvdXQocCl9LGMub25hYm9ydD1mdW5jdGlvbigpe2MmJihJKG5ldyB1KCJSZXF1ZXN0IGFib3J0ZWQiLHUuRUNPTk5BQk9SVEVELEEsYykpLGM9bnVsbCl9LGMub25lcnJvcj1mdW5jdGlvbigpe0kobmV3IHUoIk5ldHdvcmsgRXJyb3IiLHUuRVJSX05FVFdPUkssQSxjKSksYz1udWxsfSxjLm9udGltZW91dD1mdW5jdGlvbigpe2xldCBVPXIudGltZW91dD8idGltZW91dCBvZiAiK3IudGltZW91dCsibXMgZXhjZWVkZWQiOiJ0aW1lb3V0IGV4Y2VlZGVkIixLPXIudHJhbnNpdGlvbmFsfHxtQTtyLnRpbWVvdXRFcnJvck1lc3NhZ2UmJihVPXIudGltZW91dEVycm9yTWVzc2FnZSksSShuZXcgdShVLEsuY2xhcmlmeVRpbWVvdXRFcnJvcj91LkVUSU1FRE9VVDp1LkVDT05OQUJPUlRFRCxBLGMpKSxjPW51bGx9LG89PT12b2lkIDAmJmcuc2V0Q29udGVudFR5cGUobnVsbCksInNldFJlcXVlc3RIZWFkZXIiaW4gYyYmaS5mb3JFYWNoKGcudG9KU09OKCksZnVuY3Rpb24oVSxLKXtjLnNldFJlcXVlc3RIZWFkZXIoSyxVKX0pLGkuaXNVbmRlZmluZWQoci53aXRoQ3JlZGVudGlhbHMpfHwoYy53aXRoQ3JlZGVudGlhbHM9ISFyLndpdGhDcmVkZW50aWFscyksQyYmQyE9PSJqc29uIiYmKGMucmVzcG9uc2VUeXBlPXIucmVzcG9uc2VUeXBlKSxhJiYoW2YsRV09XyhhLCEwKSxjLmFkZEV2ZW50TGlzdGVuZXIoInByb2dyZXNzIixmKSksUSYmYy51cGxvYWQmJihbcyxCXT1fKFEpLGMudXBsb2FkLmFkZEV2ZW50TGlzdGVuZXIoInByb2dyZXNzIixzKSxjLnVwbG9hZC5hZGRFdmVudExpc3RlbmVyKCJsb2FkZW5kIixCKSksKHIuY2FuY2VsVG9rZW58fHIuc2lnbmFsKSYmKG49RD0+e2MmJihJKCFEfHxELnR5cGU/bmV3IGIobnVsbCxBLGMpOkQpLGMuYWJvcnQoKSxjPW51bGwpfSxyLmNhbmNlbFRva2VuJiZyLmNhbmNlbFRva2VuLnN1YnNjcmliZShuKSxyLnNpZ25hbCYmKHIuc2lnbmFsLmFib3J0ZWQ/bigpOnIuc2lnbmFsLmFkZEV2ZW50TGlzdGVuZXIoImFib3J0IixuKSkpO2xldCBTPXpBKHIudXJsKTtpZihTJiZ3LnByb3RvY29scy5pbmRleE9mKFMpPT09LTEpe0kobmV3IHUoIlVuc3VwcG9ydGVkIHByb3RvY29sICIrUysiOiIsdS5FUlJfQkFEX1JFUVVFU1QsQSkpO3JldHVybn1jLnNlbmQob3x8bnVsbCl9KX07dmFyIEtJPShBLHQpPT57bGV0IGU9bmV3IEFib3J0Q29udHJvbGxlcixJLHI9ZnVuY3Rpb24oUSl7aWYoIUkpe0k9ITAsZygpO2xldCBhPVEgaW5zdGFuY2VvZiBFcnJvcj9ROnRoaXMucmVhc29uO2UuYWJvcnQoYSBpbnN0YW5jZW9mIHU/YTpuZXcgYihhIGluc3RhbmNlb2YgRXJyb3I/YS5tZXNzYWdlOmEpKX19LG89dCYmc2V0VGltZW91dCgoKT0+e3IobmV3IHUoYHRpbWVvdXQgJHt0fSBvZiBtcyBleGNlZWRlZGAsdS5FVElNRURPVVQpKX0sdCksZz0oKT0+e0EmJihvJiZjbGVhclRpbWVvdXQobyksbz1udWxsLEEuZm9yRWFjaChRPT57USYmKFEucmVtb3ZlRXZlbnRMaXN0ZW5lcj9RLnJlbW92ZUV2ZW50TGlzdGVuZXIoImFib3J0IixyKTpRLnVuc3Vic2NyaWJlKHIpKX0pLEE9bnVsbCl9O0EuZm9yRWFjaChRPT5RJiZRLmFkZEV2ZW50TGlzdGVuZXImJlEuYWRkRXZlbnRMaXN0ZW5lcigiYWJvcnQiLHIpKTtsZXR7c2lnbmFsOkN9PWU7cmV0dXJuIEMudW5zdWJzY3JpYmU9ZyxbQywoKT0+e28mJmNsZWFyVGltZW91dChvKSxvPW51bGx9XX0sdnQ9S0k7dmFyIE9JPWZ1bmN0aW9uKihBLHQpe2xldCBlPUEuYnl0ZUxlbmd0aDtpZighdHx8ZTx0KXt5aWVsZCBBO3JldHVybn1sZXQgST0wLHI7Zm9yKDtJPGU7KXI9SSt0LHlpZWxkIEEuc2xpY2UoSSxyKSxJPXJ9LHhJPWFzeW5jIGZ1bmN0aW9uKihBLHQsZSl7Zm9yIGF3YWl0KGxldCBJIG9mIEEpeWllbGQqT0koQXJyYXlCdWZmZXIuaXNWaWV3KEkpP0k6YXdhaXQgZShTdHJpbmcoSSkpLHQpfSxldD0oQSx0LGUsSSxyKT0+e2xldCBvPXhJKEEsdCxyKSxnPTAsQyxRPWE9PntDfHwoQz0hMCxJJiZJKGEpKX07cmV0dXJuIG5ldyBSZWFkYWJsZVN0cmVhbSh7YXN5bmMgcHVsbChhKXt0cnl7bGV0e2RvbmU6bix2YWx1ZTpzfT1hd2FpdCBvLm5leHQoKTtpZihuKXtRKCksYS5jbG9zZSgpO3JldHVybn1sZXQgZj1zLmJ5dGVMZW5ndGg7aWYoZSl7bGV0IEI9Zys9ZjtlKEIpfWEuZW5xdWV1ZShuZXcgVWludDhBcnJheShzKSl9Y2F0Y2gobil7dGhyb3cgUShuKSxufX0sY2FuY2VsKGEpe3JldHVybiBRKGEpLG8ucmV0dXJuKCl9fSx7aGlnaFdhdGVyTWFyazoyfSl9O3ZhciBSQT10eXBlb2YgZmV0Y2g9PSJmdW5jdGlvbiImJnR5cGVvZiBSZXF1ZXN0PT0iZnVuY3Rpb24iJiZ0eXBlb2YgUmVzcG9uc2U9PSJmdW5jdGlvbiIsQWU9UkEmJnR5cGVvZiBSZWFkYWJsZVN0cmVhbT09ImZ1bmN0aW9uIixJdD1SQSYmKHR5cGVvZiBUZXh0RW5jb2Rlcj09ImZ1bmN0aW9uIj8oQT0+dD0+QS5lbmNvZGUodCkpKG5ldyBUZXh0RW5jb2Rlcik6YXN5bmMgQT0+bmV3IFVpbnQ4QXJyYXkoYXdhaXQgbmV3IFJlc3BvbnNlKEEpLmFycmF5QnVmZmVyKCkpKSx0ZT0oQSwuLi50KT0+e3RyeXtyZXR1cm4hIUEoLi4udCl9Y2F0Y2h7cmV0dXJuITF9fSxQST1BZSYmdGUoKCk9PntsZXQgQT0hMSx0PW5ldyBSZXF1ZXN0KHcub3JpZ2luLHtib2R5Om5ldyBSZWFkYWJsZVN0cmVhbSxtZXRob2Q6IlBPU1QiLGdldCBkdXBsZXgoKXtyZXR1cm4gQT0hMCwiaGFsZiJ9fSkuaGVhZGVycy5oYXMoIkNvbnRlbnQtVHlwZSIpO3JldHVybiBBJiYhdH0pLCR0PTY0KjEwMjQscnQ9QWUmJnRlKCgpPT5pLmlzUmVhZGFibGVTdHJlYW0obmV3IFJlc3BvbnNlKCIiKS5ib2R5KSksRkE9e3N0cmVhbTpydCYmKEE9PkEuYm9keSl9O1JBJiYoQT0+e1sidGV4dCIsImFycmF5QnVmZmVyIiwiYmxvYiIsImZvcm1EYXRhIiwic3RyZWFtIl0uZm9yRWFjaCh0PT57IUZBW3RdJiYoRkFbdF09aS5pc0Z1bmN0aW9uKEFbdF0pP2U9PmVbdF0oKTooZSxJKT0+e3Rocm93IG5ldyB1KGBSZXNwb25zZSB0eXBlIFwnJHt0fVwnIGlzIG5vdCBzdXBwb3J0ZWRgLHUuRVJSX05PVF9TVVBQT1JULEkpfSl9KX0pKG5ldyBSZXNwb25zZSk7dmFyIGpJPWFzeW5jIEE9PntpZihBPT1udWxsKXJldHVybiAwO2lmKGkuaXNCbG9iKEEpKXJldHVybiBBLnNpemU7aWYoaS5pc1NwZWNDb21wbGlhbnRGb3JtKEEpKXJldHVybihhd2FpdCBuZXcgUmVxdWVzdChBKS5hcnJheUJ1ZmZlcigpKS5ieXRlTGVuZ3RoO2lmKGkuaXNBcnJheUJ1ZmZlclZpZXcoQSl8fGkuaXNBcnJheUJ1ZmZlcihBKSlyZXR1cm4gQS5ieXRlTGVuZ3RoO2lmKGkuaXNVUkxTZWFyY2hQYXJhbXMoQSkmJihBPUErIiIpLGkuaXNTdHJpbmcoQSkpcmV0dXJuKGF3YWl0IEl0KEEpKS5ieXRlTGVuZ3RofSxXST1hc3luYyhBLHQpPT57bGV0IGU9aS50b0Zpbml0ZU51bWJlcihBLmdldENvbnRlbnRMZW5ndGgoKSk7cmV0dXJuIGU/P2pJKHQpfSxlZT1SQSYmKGFzeW5jIEE9PntsZXR7dXJsOnQsbWV0aG9kOmUsZGF0YTpJLHNpZ25hbDpyLGNhbmNlbFRva2VuOm8sdGltZW91dDpnLG9uRG93bmxvYWRQcm9ncmVzczpDLG9uVXBsb2FkUHJvZ3Jlc3M6USxyZXNwb25zZVR5cGU6YSxoZWFkZXJzOm4sd2l0aENyZWRlbnRpYWxzOnM9InNhbWUtb3JpZ2luIixmZXRjaE9wdGlvbnM6Zn09U0EoQSk7YT1hPyhhKyIiKS50b0xvd2VyQ2FzZSgpOiJ0ZXh0IjtsZXRbQixFXT1yfHxvfHxnP3Z0KFtyLG9dLGcpOltdLGwsYyxwPSgpPT57IWwmJnNldFRpbWVvdXQoKCk9PntCJiZCLnVuc3Vic2NyaWJlKCl9KSxsPSEwfSxTO3RyeXtpZihRJiZQSSYmZSE9PSJnZXQiJiZlIT09ImhlYWQiJiYoUz1hd2FpdCBXSShuLEkpKSE9PTApe2xldCBMPW5ldyBSZXF1ZXN0KHQse21ldGhvZDoiUE9TVCIsYm9keTpJLGR1cGxleDoiaGFsZiJ9KSxKO2lmKGkuaXNGb3JtRGF0YShJKSYmKEo9TC5oZWFkZXJzLmdldCgiY29udGVudC10eXBlIikpJiZuLnNldENvbnRlbnRUeXBlKEopLEwuYm9keSl7bGV0W0hBLENBXT12QShTLF8oJEEoUSkpKTtJPWV0KEwuYm9keSwkdCxIQSxDQSxJdCl9fWkuaXNTdHJpbmcocyl8fChzPXM/ImluY2x1ZGUiOiJvbWl0IiksYz1uZXcgUmVxdWVzdCh0LHsuLi5mLHNpZ25hbDpCLG1ldGhvZDplLnRvVXBwZXJDYXNlKCksaGVhZGVyczpuLm5vcm1hbGl6ZSgpLnRvSlNPTigpLGJvZHk6SSxkdXBsZXg6ImhhbGYiLGNyZWRlbnRpYWxzOnN9KTtsZXQgRD1hd2FpdCBmZXRjaChjKSxVPXJ0JiYoYT09PSJzdHJlYW0ifHxhPT09InJlc3BvbnNlIik7aWYocnQmJihDfHxVKSl7bGV0IEw9e307WyJzdGF0dXMiLCJzdGF0dXNUZXh0IiwiaGVhZGVycyJdLmZvckVhY2goRXQ9PntMW0V0XT1EW0V0XX0pO2xldCBKPWkudG9GaW5pdGVOdW1iZXIoRC5oZWFkZXJzLmdldCgiY29udGVudC1sZW5ndGgiKSksW0hBLENBXT1DJiZ2QShKLF8oJEEoQyksITApKXx8W107RD1uZXcgUmVzcG9uc2UoZXQoRC5ib2R5LCR0LEhBLCgpPT57Q0EmJkNBKCksVSYmcCgpfSxJdCksTCl9YT1hfHwidGV4dCI7bGV0IEs9YXdhaXQgRkFbaS5maW5kS2V5KEZBLGEpfHwidGV4dCJdKEQsQSk7cmV0dXJuIVUmJnAoKSxFJiZFKCksYXdhaXQgbmV3IFByb21pc2UoKEwsSik9PntvQShMLEose2RhdGE6SyxoZWFkZXJzOm0uZnJvbShELmhlYWRlcnMpLHN0YXR1czpELnN0YXR1cyxzdGF0dXNUZXh0OkQuc3RhdHVzVGV4dCxjb25maWc6QSxyZXF1ZXN0OmN9KX0pfWNhdGNoKEQpe3Rocm93IHAoKSxEJiZELm5hbWU9PT0iVHlwZUVycm9yIiYmL2ZldGNoL2kudGVzdChELm1lc3NhZ2UpP09iamVjdC5hc3NpZ24obmV3IHUoIk5ldHdvcmsgRXJyb3IiLHUuRVJSX05FVFdPUkssQSxjKSx7Y2F1c2U6RC5jYXVzZXx8RH0pOnUuZnJvbShELEQmJkQuY29kZSxBLGMpfX0pO3ZhciBvdD17aHR0cDpkQSx4aHI6enQsZmV0Y2g6ZWV9O2kuZm9yRWFjaChvdCwoQSx0KT0+e2lmKEEpe3RyeXtPYmplY3QuZGVmaW5lUHJvcGVydHkoQSwibmFtZSIse3ZhbHVlOnR9KX1jYXRjaHt9T2JqZWN0LmRlZmluZVByb3BlcnR5KEEsImFkYXB0ZXJOYW1lIix7dmFsdWU6dH0pfX0pO3ZhciBJZT1BPT5gLSAke0F9YCxaST1BPT5pLmlzRnVuY3Rpb24oQSl8fEE9PT1udWxsfHxBPT09ITEsTkE9e2dldEFkYXB0ZXI6QT0+e0E9aS5pc0FycmF5KEEpP0E6W0FdO2xldHtsZW5ndGg6dH09QSxlLEkscj17fTtmb3IobGV0IG89MDtvPHQ7bysrKXtlPUFbb107bGV0IGc7aWYoST1lLCFaSShlKSYmKEk9b3RbKGc9U3RyaW5nKGUpKS50b0xvd2VyQ2FzZSgpXSxJPT09dm9pZCAwKSl0aHJvdyBuZXcgdShgVW5rbm93biBhZGFwdGVyIFwnJHtnfVwnYCk7aWYoSSlicmVhaztyW2d8fCIlMjMiK29dPUl9aWYoIUkpe2xldCBvPU9iamVjdC5lbnRyaWVzKHIpLm1hcCgoW0MsUV0pPT5gYWRhcHRlciAke0N9IGArKFE9PT0hMT8iaXMgbm90IHN1cHBvcnRlZCBieSB0aGUgZW52aXJvbm1lbnQiOiJpcyBub3QgYXZhaWxhYmxlIGluIHRoZSBidWlsZCIpKSxnPXQ/by5sZW5ndGg+MT9gc2luY2UgOiUwQWArby5tYXAoSWUpLmpvaW4oYCUwQWApOiIgIitJZShvWzBdKToiYXMgbm8gYWRhcHRlciBzcGVjaWZpZWQiO3Rocm93IG5ldyB1KCJUaGVyZSBpcyBubyBzdWl0YWJsZSBhZGFwdGVyIHRvIGRpc3BhdGNoIHRoZSByZXF1ZXN0ICIrZywiRVJSX05PVF9TVVBQT1JUIil9cmV0dXJuIEl9LGFkYXB0ZXJzOm90fTtmdW5jdGlvbiBndChBKXtpZihBLmNhbmNlbFRva2VuJiZBLmNhbmNlbFRva2VuLnRocm93SWZSZXF1ZXN0ZWQoKSxBLnNpZ25hbCYmQS5zaWduYWwuYWJvcnRlZCl0aHJvdyBuZXcgYihudWxsLEEpfWZ1bmN0aW9uIFVBKEEpe3JldHVybiBndChBKSxBLmhlYWRlcnM9bS5mcm9tKEEuaGVhZGVycyksQS5kYXRhPUlBLmNhbGwoQSxBLnRyYW5zZm9ybVJlcXVlc3QpLFsicG9zdCIsInB1dCIsInBhdGNoIl0uaW5kZXhPZihBLm1ldGhvZCkhPT0tMSYmQS5oZWFkZXJzLnNldENvbnRlbnRUeXBlKCJhcHBsaWNhdGlvbi94LXd3dy1mb3JtLXVybGVuY29kZWQiLCExKSxOQS5nZXRBZGFwdGVyKEEuYWRhcHRlcnx8Wi5hZGFwdGVyKShBKS50aGVuKGZ1bmN0aW9uKEkpe3JldHVybiBndChBKSxJLmRhdGE9SUEuY2FsbChBLEEudHJhbnNmb3JtUmVzcG9uc2UsSSksSS5oZWFkZXJzPW0uZnJvbShJLmhlYWRlcnMpLEl9LGZ1bmN0aW9uKEkpe3JldHVybiByQShJKXx8KGd0KEEpLEkmJkkucmVzcG9uc2UmJihJLnJlc3BvbnNlLmRhdGE9SUEuY2FsbChBLEEudHJhbnNmb3JtUmVzcG9uc2UsSS5yZXNwb25zZSksSS5yZXNwb25zZS5oZWFkZXJzPW0uZnJvbShJLnJlc3BvbnNlLmhlYWRlcnMpKSksUHJvbWlzZS5yZWplY3QoSSl9KX12YXIgR0E9IjEuNy40Ijt2YXIgaXQ9e307WyJvYmplY3QiLCJib29sZWFuIiwibnVtYmVyIiwiZnVuY3Rpb24iLCJzdHJpbmciLCJzeW1ib2wiXS5mb3JFYWNoKChBLHQpPT57aXRbQV09ZnVuY3Rpb24oSSl7cmV0dXJuIHR5cGVvZiBJPT09QXx8ImEiKyh0PDE/Im4gIjoiICIpK0F9fSk7dmFyIHJlPXt9O2l0LnRyYW5zaXRpb25hbD1mdW5jdGlvbih0LGUsSSl7ZnVuY3Rpb24gcihvLGcpe3JldHVybiJbQXhpb3MgdiIrR0ErIl0gVHJhbnNpdGlvbmFsIG9wdGlvbiBcJyIrbysiXCciK2crKEk/Ii4gIitJOiIiKX1yZXR1cm4obyxnLEMpPT57aWYodD09PSExKXRocm93IG5ldyB1KHIoZywiIGhhcyBiZWVuIHJlbW92ZWQiKyhlPyIgaW4gIitlOiIiKSksdS5FUlJfREVQUkVDQVRFRCk7cmV0dXJuIGUmJiFyZVtnXSYmKHJlW2ddPSEwLGNvbnNvbGUud2FybihyKGcsIiBoYXMgYmVlbiBkZXByZWNhdGVkIHNpbmNlIHYiK2UrIiBhbmQgd2lsbCBiZSByZW1vdmVkIGluIHRoZSBuZWFyIGZ1dHVyZSIpKSksdD90KG8sZyxDKTohMH19O2Z1bmN0aW9uIFZJKEEsdCxlKXtpZih0eXBlb2YgQSE9Im9iamVjdCIpdGhyb3cgbmV3IHUoIm9wdGlvbnMgbXVzdCBiZSBhbiBvYmplY3QiLHUuRVJSX0JBRF9PUFRJT05fVkFMVUUpO2xldCBJPU9iamVjdC5rZXlzKEEpLHI9SS5sZW5ndGg7Zm9yKDtyLS0gPjA7KXtsZXQgbz1JW3JdLGc9dFtvXTtpZihnKXtsZXQgQz1BW29dLFE9Qz09PXZvaWQgMHx8ZyhDLG8sQSk7aWYoUSE9PSEwKXRocm93IG5ldyB1KCJvcHRpb24gIitvKyIgbXVzdCBiZSAiK1EsdS5FUlJfQkFEX09QVElPTl9WQUxVRSk7Y29udGludWV9aWYoZSE9PSEwKXRocm93IG5ldyB1KCJVbmtub3duIG9wdGlvbiAiK28sdS5FUlJfQkFEX09QVElPTil9fXZhciBrQT17YXNzZXJ0T3B0aW9uczpWSSx2YWxpZGF0b3JzOml0fTt2YXIgTT1rQS52YWxpZGF0b3JzLFg9Y2xhc3N7Y29uc3RydWN0b3IodCl7dGhpcy5kZWZhdWx0cz10LHRoaXMuaW50ZXJjZXB0b3JzPXtyZXF1ZXN0Om5ldyBqQSxyZXNwb25zZTpuZXcgakF9fWFzeW5jIHJlcXVlc3QodCxlKXt0cnl7cmV0dXJuIGF3YWl0IHRoaXMuX3JlcXVlc3QodCxlKX1jYXRjaChJKXtpZihJIGluc3RhbmNlb2YgRXJyb3Ipe2xldCByO0Vycm9yLmNhcHR1cmVTdGFja1RyYWNlP0Vycm9yLmNhcHR1cmVTdGFja1RyYWNlKHI9e30pOnI9bmV3IEVycm9yO2xldCBvPXIuc3RhY2s/ci5zdGFjay5yZXBsYWNlKC9eLitcXG4vLCIiKToiIjt0cnl7SS5zdGFjaz9vJiYhU3RyaW5nKEkuc3RhY2spLmVuZHNXaXRoKG8ucmVwbGFjZSgvXi4rXFxuLitcXG4vLCIiKSkmJihJLnN0YWNrKz1gJTBBYCtvKTpJLnN0YWNrPW99Y2F0Y2h7fX10aHJvdyBJfX1fcmVxdWVzdCh0LGUpe3R5cGVvZiB0PT0ic3RyaW5nIj8oZT1lfHx7fSxlLnVybD10KTplPXR8fHt9LGU9ayh0aGlzLmRlZmF1bHRzLGUpO2xldHt0cmFuc2l0aW9uYWw6SSxwYXJhbXNTZXJpYWxpemVyOnIsaGVhZGVyczpvfT1lO0khPT12b2lkIDAmJmtBLmFzc2VydE9wdGlvbnMoSSx7c2lsZW50SlNPTlBhcnNpbmc6TS50cmFuc2l0aW9uYWwoTS5ib29sZWFuKSxmb3JjZWRKU09OUGFyc2luZzpNLnRyYW5zaXRpb25hbChNLmJvb2xlYW4pLGNsYXJpZnlUaW1lb3V0RXJyb3I6TS50cmFuc2l0aW9uYWwoTS5ib29sZWFuKX0sITEpLHIhPW51bGwmJihpLmlzRnVuY3Rpb24ocik/ZS5wYXJhbXNTZXJpYWxpemVyPXtzZXJpYWxpemU6cn06a0EuYXNzZXJ0T3B0aW9ucyhyLHtlbmNvZGU6TS5mdW5jdGlvbixzZXJpYWxpemU6TS5mdW5jdGlvbn0sITApKSxlLm1ldGhvZD0oZS5tZXRob2R8fHRoaXMuZGVmYXVsdHMubWV0aG9kfHwiZ2V0IikudG9Mb3dlckNhc2UoKTtsZXQgZz1vJiZpLm1lcmdlKG8uY29tbW9uLG9bZS5tZXRob2RdKTtvJiZpLmZvckVhY2goWyJkZWxldGUiLCJnZXQiLCJoZWFkIiwicG9zdCIsInB1dCIsInBhdGNoIiwiY29tbW9uIl0sRT0+e2RlbGV0ZSBvW0VdfSksZS5oZWFkZXJzPW0uY29uY2F0KGcsbyk7bGV0IEM9W10sUT0hMDt0aGlzLmludGVyY2VwdG9ycy5yZXF1ZXN0LmZvckVhY2goZnVuY3Rpb24obCl7dHlwZW9mIGwucnVuV2hlbj09ImZ1bmN0aW9uIiYmbC5ydW5XaGVuKGUpPT09ITF8fChRPVEmJmwuc3luY2hyb25vdXMsQy51bnNoaWZ0KGwuZnVsZmlsbGVkLGwucmVqZWN0ZWQpKX0pO2xldCBhPVtdO3RoaXMuaW50ZXJjZXB0b3JzLnJlc3BvbnNlLmZvckVhY2goZnVuY3Rpb24obCl7YS5wdXNoKGwuZnVsZmlsbGVkLGwucmVqZWN0ZWQpfSk7bGV0IG4scz0wLGY7aWYoIVEpe2xldCBFPVtVQS5iaW5kKHRoaXMpLHZvaWQgMF07Zm9yKEUudW5zaGlmdC5hcHBseShFLEMpLEUucHVzaC5hcHBseShFLGEpLGY9RS5sZW5ndGgsbj1Qcm9taXNlLnJlc29sdmUoZSk7czxmOyluPW4udGhlbihFW3MrK10sRVtzKytdKTtyZXR1cm4gbn1mPUMubGVuZ3RoO2xldCBCPWU7Zm9yKHM9MDtzPGY7KXtsZXQgRT1DW3MrK10sbD1DW3MrK107dHJ5e0I9RShCKX1jYXRjaChjKXtsLmNhbGwodGhpcyxjKTticmVha319dHJ5e249VUEuY2FsbCh0aGlzLEIpfWNhdGNoKEUpe3JldHVybiBQcm9taXNlLnJlamVjdChFKX1mb3Iocz0wLGY9YS5sZW5ndGg7czxmOyluPW4udGhlbihhW3MrK10sYVtzKytdKTtyZXR1cm4gbn1nZXRVcmkodCl7dD1rKHRoaXMuZGVmYXVsdHMsdCk7bGV0IGU9Z0EodC5iYXNlVVJMLHQudXJsKTtyZXR1cm4gdEEoZSx0LnBhcmFtcyx0LnBhcmFtc1NlcmlhbGl6ZXIpfX07aS5mb3JFYWNoKFsiZGVsZXRlIiwiZ2V0IiwiaGVhZCIsIm9wdGlvbnMiXSxmdW5jdGlvbih0KXtYLnByb3RvdHlwZVt0XT1mdW5jdGlvbihlLEkpe3JldHVybiB0aGlzLnJlcXVlc3QoayhJfHx7fSx7bWV0aG9kOnQsdXJsOmUsZGF0YTooSXx8e30pLmRhdGF9KSl9fSk7aS5mb3JFYWNoKFsicG9zdCIsInB1dCIsInBhdGNoIl0sZnVuY3Rpb24odCl7ZnVuY3Rpb24gZShJKXtyZXR1cm4gZnVuY3Rpb24obyxnLEMpe3JldHVybiB0aGlzLnJlcXVlc3QoayhDfHx7fSx7bWV0aG9kOnQsaGVhZGVyczpJP3siQ29udGVudC1UeXBlIjoibXVsdGlwYXJ0L2Zvcm0tZGF0YSJ9Ont9LHVybDpvLGRhdGE6Z30pKX19WC5wcm90b3R5cGVbdF09ZSgpLFgucHJvdG90eXBlW3QrIkZvcm0iXT1lKCEwKX0pO3ZhciBpQT1YO3ZhciBudD1jbGFzcyBBe2NvbnN0cnVjdG9yKHQpe2lmKHR5cGVvZiB0IT0iZnVuY3Rpb24iKXRocm93IG5ldyBUeXBlRXJyb3IoImV4ZWN1dG9yIG11c3QgYmUgYSBmdW5jdGlvbi4iKTtsZXQgZTt0aGlzLnByb21pc2U9bmV3IFByb21pc2UoZnVuY3Rpb24obyl7ZT1vfSk7bGV0IEk9dGhpczt0aGlzLnByb21pc2UudGhlbihyPT57aWYoIUkuX2xpc3RlbmVycylyZXR1cm47bGV0IG89SS5fbGlzdGVuZXJzLmxlbmd0aDtmb3IoO28tLSA+MDspSS5fbGlzdGVuZXJzW29dKHIpO0kuX2xpc3RlbmVycz1udWxsfSksdGhpcy5wcm9taXNlLnRoZW49cj0+e2xldCBvLGc9bmV3IFByb21pc2UoQz0+e0kuc3Vic2NyaWJlKEMpLG89Q30pLnRoZW4ocik7cmV0dXJuIGcuY2FuY2VsPWZ1bmN0aW9uKCl7SS51bnN1YnNjcmliZShvKX0sZ30sdChmdW5jdGlvbihvLGcsQyl7SS5yZWFzb258fChJLnJlYXNvbj1uZXcgYihvLGcsQyksZShJLnJlYXNvbikpfSl9dGhyb3dJZlJlcXVlc3RlZCgpe2lmKHRoaXMucmVhc29uKXRocm93IHRoaXMucmVhc29ufXN1YnNjcmliZSh0KXtpZih0aGlzLnJlYXNvbil7dCh0aGlzLnJlYXNvbik7cmV0dXJufXRoaXMuX2xpc3RlbmVycz90aGlzLl9saXN0ZW5lcnMucHVzaCh0KTp0aGlzLl9saXN0ZW5lcnM9W3RdfXVuc3Vic2NyaWJlKHQpe2lmKCF0aGlzLl9saXN0ZW5lcnMpcmV0dXJuO2xldCBlPXRoaXMuX2xpc3RlbmVycy5pbmRleE9mKHQpO2UhPT0tMSYmdGhpcy5fbGlzdGVuZXJzLnNwbGljZShlLDEpfXN0YXRpYyBzb3VyY2UoKXtsZXQgdDtyZXR1cm57dG9rZW46bmV3IEEoZnVuY3Rpb24ocil7dD1yfSksY2FuY2VsOnR9fX0sb2U9bnQ7ZnVuY3Rpb24gc3QoQSl7cmV0dXJuIGZ1bmN0aW9uKGUpe3JldHVybiBBLmFwcGx5KG51bGwsZSl9fWZ1bmN0aW9uIEN0KEEpe3JldHVybiBpLmlzT2JqZWN0KEEpJiZBLmlzQXhpb3NFcnJvcj09PSEwfXZhciBCdD17Q29udGludWU6MTAwLFN3aXRjaGluZ1Byb3RvY29sczoxMDEsUHJvY2Vzc2luZzoxMDIsRWFybHlIaW50czoxMDMsT2s6MjAwLENyZWF0ZWQ6MjAxLEFjY2VwdGVkOjIwMixOb25BdXRob3JpdGF0aXZlSW5mb3JtYXRpb246MjAzLE5vQ29udGVudDoyMDQsUmVzZXRDb250ZW50OjIwNSxQYXJ0aWFsQ29udGVudDoyMDYsTXVsdGlTdGF0dXM6MjA3LEFscmVhZHlSZXBvcnRlZDoyMDgsSW1Vc2VkOjIyNixNdWx0aXBsZUNob2ljZXM6MzAwLE1vdmVkUGVybWFuZW50bHk6MzAxLEZvdW5kOjMwMixTZWVPdGhlcjozMDMsTm90TW9kaWZpZWQ6MzA0LFVzZVByb3h5OjMwNSxVbnVzZWQ6MzA2LFRlbXBvcmFyeVJlZGlyZWN0OjMwNyxQZXJtYW5lbnRSZWRpcmVjdDozMDgsQmFkUmVxdWVzdDo0MDAsVW5hdXRob3JpemVkOjQwMSxQYXltZW50UmVxdWlyZWQ6NDAyLEZvcmJpZGRlbjo0MDMsTm90Rm91bmQ6NDA0LE1ldGhvZE5vdEFsbG93ZWQ6NDA1LE5vdEFjY2VwdGFibGU6NDA2LFByb3h5QXV0aGVudGljYXRpb25SZXF1aXJlZDo0MDcsUmVxdWVzdFRpbWVvdXQ6NDA4LENvbmZsaWN0OjQwOSxHb25lOjQxMCxMZW5ndGhSZXF1aXJlZDo0MTEsUHJlY29uZGl0aW9uRmFpbGVkOjQxMixQYXlsb2FkVG9vTGFyZ2U6NDEzLFVyaVRvb0xvbmc6NDE0LFVuc3VwcG9ydGVkTWVkaWFUeXBlOjQxNSxSYW5nZU5vdFNhdGlzZmlhYmxlOjQxNixFeHBlY3RhdGlvbkZhaWxlZDo0MTcsSW1BVGVhcG90OjQxOCxNaXNkaXJlY3RlZFJlcXVlc3Q6NDIxLFVucHJvY2Vzc2FibGVFbnRpdHk6NDIyLExvY2tlZDo0MjMsRmFpbGVkRGVwZW5kZW5jeTo0MjQsVG9vRWFybHk6NDI1LFVwZ3JhZGVSZXF1aXJlZDo0MjYsUHJlY29uZGl0aW9uUmVxdWlyZWQ6NDI4LFRvb01hbnlSZXF1ZXN0czo0MjksUmVxdWVzdEhlYWRlckZpZWxkc1Rvb0xhcmdlOjQzMSxVbmF2YWlsYWJsZUZvckxlZ2FsUmVhc29uczo0NTEsSW50ZXJuYWxTZXJ2ZXJFcnJvcjo1MDAsTm90SW1wbGVtZW50ZWQ6NTAxLEJhZEdhdGV3YXk6NTAyLFNlcnZpY2VVbmF2YWlsYWJsZTo1MDMsR2F0ZXdheVRpbWVvdXQ6NTA0LEh0dHBWZXJzaW9uTm90U3VwcG9ydGVkOjUwNSxWYXJpYW50QWxzb05lZ290aWF0ZXM6NTA2LEluc3VmZmljaWVudFN0b3JhZ2U6NTA3LExvb3BEZXRlY3RlZDo1MDgsTm90RXh0ZW5kZWQ6NTEwLE5ldHdvcmtBdXRoZW50aWNhdGlvblJlcXVpcmVkOjUxMX07T2JqZWN0LmVudHJpZXMoQnQpLmZvckVhY2goKFtBLHRdKT0+e0J0W3RdPUF9KTt2YXIgZ2U9QnQ7ZnVuY3Rpb24gaWUoQSl7bGV0IHQ9bmV3IGlBKEEpLGU9dihpQS5wcm90b3R5cGUucmVxdWVzdCx0KTtyZXR1cm4gaS5leHRlbmQoZSxpQS5wcm90b3R5cGUsdCx7YWxsT3duS2V5czohMH0pLGkuZXh0ZW5kKGUsdCxudWxsLHthbGxPd25LZXlzOiEwfSksZS5jcmVhdGU9ZnVuY3Rpb24ocil7cmV0dXJuIGllKGsoQSxyKSl9LGV9dmFyIGQ9aWUoWik7ZC5BeGlvcz1pQTtkLkNhbmNlbGVkRXJyb3I9YjtkLkNhbmNlbFRva2VuPW9lO2QuaXNDYW5jZWw9ckE7ZC5WRVJTSU9OPUdBO2QudG9Gb3JtRGF0YT1xO2QuQXhpb3NFcnJvcj11O2QuQ2FuY2VsPWQuQ2FuY2VsZWRFcnJvcjtkLmFsbD1mdW5jdGlvbih0KXtyZXR1cm4gUHJvbWlzZS5hbGwodCl9O2Quc3ByZWFkPXN0O2QuaXNBeGlvc0Vycm9yPUN0O2QubWVyZ2VDb25maWc9aztkLkF4aW9zSGVhZGVycz1tO2QuZm9ybVRvSlNPTj1BPT53QShpLmlzSFRNTEZvcm0oQSk/bmV3IEZvcm1EYXRhKEEpOkEpO2QuZ2V0QWRhcHRlcj1OQS5nZXRBZGFwdGVyO2QuSHR0cFN0YXR1c0NvZGU9Z2U7ZC5kZWZhdWx0PWQ7dmFyIExBPWQ7dmFye0F4aW9zOkVpLEF4aW9zRXJyb3I6Y2ksQ2FuY2VsZWRFcnJvcjpmaSxpc0NhbmNlbDpsaSxDYW5jZWxUb2tlbjp1aSxWRVJTSU9OOkRpLGFsbDpoaSxDYW5jZWw6ZGksaXNBeGlvc0Vycm9yOnlpLHNwcmVhZDptaSx0b0Zvcm1EYXRhOndpLEF4aW9zSGVhZGVyczpwaSxIdHRwU3RhdHVzQ29kZTpTaSxmb3JtVG9KU09OOkZpLGdldEFkYXB0ZXI6UmksbWVyZ2VDb25maWc6Tml9PUxBO3ZhciBuQSxZLFF0LGF0PXtlbnY6e2Vtc2NyaXB0ZW5fbm90aWZ5X21lbW9yeV9ncm93dGg6ZnVuY3Rpb24oQSl7UXQ9bmV3IFVpbnQ4QXJyYXkoWS5leHBvcnRzLm1lbW9yeS5idWZmZXIpfX19LEpBPWNsYXNze2luaXQoKXtyZXR1cm4gbkF8fCh0eXBlb2YgZmV0Y2g8InUiP25BPWZldGNoKCJkYXRhOmFwcGxpY2F0aW9uL3dhc207YmFzZTY0LCIrbmUpLnRoZW4odD0+dC5hcnJheUJ1ZmZlcigpKS50aGVuKHQ9PldlYkFzc2VtYmx5Lmluc3RhbnRpYXRlKHQsYXQpKS50aGVuKHRoaXMuX2luaXQpOm5BPVdlYkFzc2VtYmx5Lmluc3RhbnRpYXRlKEJ1ZmZlci5mcm9tKG5lLCJiYXNlNjQiKSxhdCkudGhlbih0aGlzLl9pbml0KSxuQSl9X2luaXQodCl7WT10Lmluc3RhbmNlLGF0LmVudi5lbXNjcmlwdGVuX25vdGlmeV9tZW1vcnlfZ3Jvd3RoKDApfWRlY29kZSh0LGU9MCl7aWYoIVkpdGhyb3cgbmV3IEVycm9yKCJaU1RERGVjb2RlcjogQXdhaXQgLmluaXQoKSBiZWZvcmUgZGVjb2RpbmcuIik7bGV0IEk9dC5ieXRlTGVuZ3RoLHI9WS5leHBvcnRzLm1hbGxvYyhJKTtRdC5zZXQodCxyKSxlPWV8fE51bWJlcihZLmV4cG9ydHMuWlNURF9maW5kRGVjb21wcmVzc2VkU2l6ZShyLEkpKTtsZXQgbz1ZLmV4cG9ydHMubWFsbG9jKGUpLGc9WS5leHBvcnRzLlpTVERfZGVjb21wcmVzcyhvLGUscixJKSxDPVF0LnNsaWNlKG8sbytnKTtyZXR1cm4gWS5leHBvcnRzLmZyZWUociksWS5leHBvcnRzLmZyZWUobyksQ319LG5lPSJBR0Z6YlFFQUFBQUJiZzVnQTM5L2Z3Ri9ZQUYvQVg5Z0FuOS9BR0FCZndCZ0JYOS9mMzkvQVg5Z0EzOS9md0JnQkg5L2YzOEJmMkFBQVg5Z0FuOS9BWDlnQjM5L2YzOS9mMzhCZjJBQ2YzOEJmbUFJZjM5L2YzOS9mMzhCZjJBRmYzOS9mMzhBWUE1L2YzOS9mMzkvZjM5L2YzOS9md0YvQWljQkEyVnVkaDlsYlhOamNtbHdkR1Z1WDI1dmRHbG1lVjl0WlcxdmNubGZaM0p2ZDNSb0FBTURJeUlIQUFBQkFRTUhBd0VBQ1FRQUJRRUlDQUVGQmdRRUJBTUdBQUFLQUFVTERBMEdCQVVCY0FFQkFRVUhBUUdBQW9DQUFnWUlBWDhCUVlDakJBc0hyZ0VMQm0xbGJXOXllUUlBQm0xaGJHeHZZd0FGQkdaeVpXVUFCZ3hhVTFSRVgybHpSWEp5YjNJQUVobGFVMVJFWDJacGJtUkVaV052YlhCeVpYTnpaV1JUYVhwbEFCd1BXbE5VUkY5a1pXTnZiWEJ5WlhOekFDSVpYMTlwYm1ScGNtVmpkRjltZFc1amRHbHZibDkwWVdKc1pRRUFFRjlmWlhKeWJtOWZiRzlqWVhScGIyNEFBUWx6ZEdGamExTmhkbVVBQnd4emRHRmphMUpsYzNSdmNtVUFDQXB6ZEdGamEwRnNiRzlqQUFrS2kvSUJJZ1VBUVlRZkN6TUJBWDhnQWdSQUlBQWhBd05BSUFNZ0FTMEFBRG9BQUNBRFFRRnFJUU1nQVVFQmFpRUJJQUpCQVdzaUFnMEFDd3NnQUFzcEFRRi9JQUlFUUNBQUlRTURRQ0FESUFFNkFBQWdBMEVCYWlFRElBSkJBV3NpQWcwQUN3c2dBQXRzQVFKL1FZQWZLQUlBSWdFZ0FFRUhha0Y0Y1NJQ2FpRUFBa0FnQWtFQUlBQWdBVTBiRFFBZ0FEOEFRUkIwU3dSQUlBQS9BRUVRZEd0Qi8vOERha0VRZGtBQVFYOUdCSDlCQUFWQkFCQUFRUUVMUlEwQkMwR0FIeUFBTmdJQUlBRVBDMEdFSDBFd05nSUFRWDhMdVNjQkMzOGpBRUVRYXlJS0pBQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FBSkFJQUJCOUFGTkJFQkJpQjhvQWdBaUJrRVFJQUJCQzJwQmVIRWdBRUVMU1JzaUJVRURkaUlBZGlJQlFRTnhCRUFDUUNBQlFYOXpRUUZ4SUFCcUlnSkJBM1FpQVVHd0gyb2lBQ0FCUWJnZmFpZ0NBQ0lCS0FJSUlnUkdCRUJCaUI4Z0JrRitJQUozY1RZQ0FBd0JDeUFFSUFBMkFnd2dBQ0FFTmdJSUN5QUJRUWhxSVFBZ0FTQUNRUU4wSWdKQkEzSTJBZ1FnQVNBQ2FpSUJJQUVvQWdSQkFYSTJBZ1FNRHdzZ0JVR1FIeWdDQUNJSFRRMEJJQUVFUUFKQVFRSWdBSFFpQWtFQUlBSnJjaUFCSUFCMGNXZ2lBVUVEZENJQVFiQWZhaUlDSUFCQnVCOXFLQUlBSWdBb0FnZ2lCRVlFUUVHSUh5QUdRWDRnQVhkeElnWTJBZ0FNQVFzZ0JDQUNOZ0lNSUFJZ0JEWUNDQXNnQUNBRlFRTnlOZ0lFSUFBZ0JXb2lDQ0FCUVFOMElnRWdCV3NpQkVFQmNqWUNCQ0FBSUFGcUlBUTJBZ0FnQndSQUlBZEJlSEZCc0I5cUlRRkJuQjhvQWdBaEFnSi9JQVpCQVNBSFFRTjJkQ0lEY1VVRVFFR0lIeUFESUFaeU5nSUFJQUVNQVFzZ0FTZ0NDQXNoQXlBQklBSTJBZ2dnQXlBQ05nSU1JQUlnQVRZQ0RDQUNJQU0yQWdnTElBQkJDR29oQUVHY0h5QUlOZ0lBUVpBZklBUTJBZ0FNRHd0QmpCOG9BZ0FpQzBVTkFTQUxhRUVDZEVHNElXb29BZ0FpQWlnQ0JFRjRjU0FGYXlFRElBSWhBUU5BQWtBZ0FTZ0NFQ0lBUlFSQUlBRW9BaFFpQUVVTkFRc2dBQ2dDQkVGNGNTQUZheUlCSUFNZ0FTQURTU0lCR3lFRElBQWdBaUFCR3lFQ0lBQWhBUXdCQ3dzZ0FpZ0NHQ0VKSUFJZ0FpZ0NEQ0lFUndSQVFaZ2ZLQUlBR2lBQ0tBSUlJZ0FnQkRZQ0RDQUVJQUEyQWdnTURnc2dBa0VVYWlJQktBSUFJZ0JGQkVBZ0FpZ0NFQ0lBUlEwRElBSkJFR29oQVFzRFFDQUJJUWdnQUNJRVFSUnFJZ0VvQWdBaUFBMEFJQVJCRUdvaEFTQUVLQUlRSWdBTkFBc2dDRUVBTmdJQURBMExRWDhoQlNBQVFiOS9TdzBBSUFCQkMyb2lBRUY0Y1NFRlFZd2ZLQUlBSWdoRkRRQkJBQ0FGYXlFREFrQUNRQUpBQW45QkFDQUZRWUFDU1EwQUdrRWZJQVZCLy8vL0Iwc05BQm9nQlVFbUlBQkJDSFpuSWdCcmRrRUJjU0FBUVFGMGEwRSthZ3NpQjBFQ2RFRzRJV29vQWdBaUFVVUVRRUVBSVFBTUFRdEJBQ0VBSUFWQkdTQUhRUUYyYTBFQUlBZEJIMGNiZENFQ0EwQUNRQ0FCS0FJRVFYaHhJQVZySWdZZ0EwOE5BQ0FCSVFRZ0JpSUREUUJCQUNFRElBRWhBQXdEQ3lBQUlBRW9BaFFpQmlBR0lBRWdBa0VkZGtFRWNXb29BaEFpQVVZYklBQWdCaHNoQUNBQ1FRRjBJUUlnQVEwQUN3c2dBQ0FFY2tVRVFFRUFJUVJCQWlBSGRDSUFRUUFnQUd0eUlBaHhJZ0JGRFFNZ0FHaEJBblJCdUNGcUtBSUFJUUFMSUFCRkRRRUxBMEFnQUNnQ0JFRjRjU0FGYXlJQ0lBTkpJUUVnQWlBRElBRWJJUU1nQUNBRUlBRWJJUVFnQUNnQ0VDSUJCSDhnQVFVZ0FDZ0NGQXNpQUEwQUN3c2dCRVVOQUNBRFFaQWZLQUlBSUFWclR3MEFJQVFvQWhnaEJ5QUVJQVFvQWd3aUFrY0VRRUdZSHlnQ0FCb2dCQ2dDQ0NJQUlBSTJBZ3dnQWlBQU5nSUlEQXdMSUFSQkZHb2lBU2dDQUNJQVJRUkFJQVFvQWhBaUFFVU5BeUFFUVJCcUlRRUxBMEFnQVNFR0lBQWlBa0VVYWlJQktBSUFJZ0FOQUNBQ1FSQnFJUUVnQWlnQ0VDSUFEUUFMSUFaQkFEWUNBQXdMQ3lBRlFaQWZLQUlBSWdSTkJFQkJuQjhvQWdBaEFBSkFJQVFnQldzaUFVRVFUd1JBSUFBZ0JXb2lBaUFCUVFGeU5nSUVJQUFnQkdvZ0FUWUNBQ0FBSUFWQkEzSTJBZ1FNQVFzZ0FDQUVRUU55TmdJRUlBQWdCR29pQVNBQktBSUVRUUZ5TmdJRVFRQWhBa0VBSVFFTFFaQWZJQUUyQWdCQm5COGdBallDQUNBQVFRaHFJUUFNRFFzZ0JVR1VIeWdDQUNJQ1NRUkFRWlFmSUFJZ0JXc2lBVFlDQUVHZ0gwR2dIeWdDQUNJQUlBVnFJZ0kyQWdBZ0FpQUJRUUZ5TmdJRUlBQWdCVUVEY2pZQ0JDQUFRUWhxSVFBTURRdEJBQ0VBSUFWQkwyb2lBd0ovUWVBaUtBSUFCRUJCNkNJb0FnQU1BUXRCN0NKQ2Z6Y0NBRUhrSWtLQW9JQ0FnSUFFTndJQVFlQWlJQXBCREdwQmNIRkIyS3JWcWdWek5nSUFRZlFpUVFBMkFnQkJ4Q0pCQURZQ0FFR0FJQXNpQVdvaUJrRUFJQUZySWdoeElnRWdCVTBOREVIQUlpZ0NBQ0lFQkVCQnVDSW9BZ0FpQnlBQmFpSUpJQWROSUFRZ0NVbHlEUTBMQWtCQnhDSXRBQUJCQkhGRkJFQUNRQUpBQWtBQ1FFR2dIeWdDQUNJRUJFQkJ5Q0loQUFOQUlBUWdBQ2dDQUNJSFR3UkFJQWNnQUNnQ0JHb2dCRXNOQXdzZ0FDZ0NDQ0lBRFFBTEMwRUFFQVFpQWtGL1JnMERJQUVoQmtIa0lpZ0NBQ0lBUVFGcklnUWdBbkVFUUNBQklBSnJJQUlnQkdwQkFDQUFhM0ZxSVFZTElBVWdCazhOQTBIQUlpZ0NBQ0lBQkVCQnVDSW9BZ0FpQkNBR2FpSUlJQVJOSUFBZ0NFbHlEUVFMSUFZUUJDSUFJQUpIRFFFTUJRc2dCaUFDYXlBSWNTSUdFQVFpQWlBQUtBSUFJQUFvQWdScVJnMEJJQUloQUFzZ0FFRi9SZzBCSUFWQk1Hb2dCazBFUUNBQUlRSU1CQXRCNkNJb0FnQWlBaUFESUFacmFrRUFJQUpyY1NJQ0VBUkJmMFlOQVNBQ0lBWnFJUVlnQUNFQ0RBTUxJQUpCZjBjTkFndEJ4Q0pCeENJb0FnQkJCSEkyQWdBTElBRVFCQ0lDUVg5R1FRQVFCQ0lBUVg5R2NpQUFJQUpOY2cwRklBQWdBbXNpQmlBRlFTaHFUUTBGQzBHNElrRzRJaWdDQUNBR2FpSUFOZ0lBUWJ3aUtBSUFJQUJKQkVCQnZDSWdBRFlDQUFzQ1FFR2dIeWdDQUNJREJFQkJ5Q0loQUFOQUlBSWdBQ2dDQUNJQklBQW9BZ1FpQkdwR0RRSWdBQ2dDQ0NJQURRQUxEQVFMUVpnZktBSUFJZ0JCQUNBQUlBSk5HMFVFUUVHWUh5QUNOZ0lBQzBFQUlRQkJ6Q0lnQmpZQ0FFSElJaUFDTmdJQVFhZ2ZRWDgyQWdCQnJCOUI0Q0lvQWdBMkFnQkIxQ0pCQURZQ0FBTkFJQUJCQTNRaUFVRzRIMm9nQVVHd0gyb2lCRFlDQUNBQlFid2ZhaUFFTmdJQUlBQkJBV29pQUVFZ1J3MEFDMEdVSHlBR1FTaHJJZ0JCZUNBQ2EwRUhjU0lCYXlJRU5nSUFRYUFmSUFFZ0Ftb2lBVFlDQUNBQklBUkJBWEkyQWdRZ0FDQUNha0VvTmdJRVFhUWZRZkFpS0FJQU5nSUFEQVFMSUFJZ0EwMGdBU0FEUzNJTkFpQUFLQUlNUVFoeERRSWdBQ0FFSUFacU5nSUVRYUFmSUFOQmVDQURhMEVIY1NJQWFpSUJOZ0lBUVpRZlFaUWZLQUlBSUFacUlnSWdBR3NpQURZQ0FDQUJJQUJCQVhJMkFnUWdBaUFEYWtFb05nSUVRYVFmUWZBaUtBSUFOZ0lBREFNTFFRQWhCQXdLQzBFQUlRSU1DQXRCbUI4b0FnQWdBa3NFUUVHWUh5QUNOZ0lBQ3lBQ0lBWnFJUUZCeUNJaEFBSkFBa0FDUUFOQUlBRWdBQ2dDQUVjRVFDQUFLQUlJSWdBTkFRd0NDd3NnQUMwQURFRUljVVVOQVF0QnlDSWhBQU5BSUFNZ0FDZ0NBQ0lCVHdSQUlBRWdBQ2dDQkdvaUJDQURTdzBEQ3lBQUtBSUlJUUFNQUFzQUN5QUFJQUkyQWdBZ0FDQUFLQUlFSUFacU5nSUVJQUpCZUNBQ2EwRUhjV29pQnlBRlFRTnlOZ0lFSUFGQmVDQUJhMEVIY1dvaUJpQUZJQWRxSWdWcklRQWdBeUFHUmdSQVFhQWZJQVUyQWdCQmxCOUJsQjhvQWdBZ0FHb2lBRFlDQUNBRklBQkJBWEkyQWdRTUNBdEJuQjhvQWdBZ0JrWUVRRUdjSHlBRk5nSUFRWkFmUVpBZktBSUFJQUJxSWdBMkFnQWdCU0FBUVFGeU5nSUVJQUFnQldvZ0FEWUNBQXdJQ3lBR0tBSUVJZ05CQTNGQkFVY05CaUFEUVhoeElRa2dBMEgvQVUwRVFDQUdLQUlNSWdFZ0JpZ0NDQ0lDUmdSQVFZZ2ZRWWdmS0FJQVFYNGdBMEVEZG5keE5nSUFEQWNMSUFJZ0FUWUNEQ0FCSUFJMkFnZ01CZ3NnQmlnQ0dDRUlJQVlnQmlnQ0RDSUNSd1JBSUFZb0FnZ2lBU0FDTmdJTUlBSWdBVFlDQ0F3RkN5QUdRUlJxSWdFb0FnQWlBMFVFUUNBR0tBSVFJZ05GRFFRZ0JrRVFhaUVCQ3dOQUlBRWhCQ0FESWdKQkZHb2lBU2dDQUNJRERRQWdBa0VRYWlFQklBSW9BaEFpQXcwQUN5QUVRUUEyQWdBTUJBdEJsQjhnQmtFb2F5SUFRWGdnQW10QkIzRWlBV3NpQ0RZQ0FFR2dIeUFCSUFKcUlnRTJBZ0FnQVNBSVFRRnlOZ0lFSUFBZ0FtcEJLRFlDQkVHa0gwSHdJaWdDQURZQ0FDQURJQVJCSnlBRWEwRUhjV3BCTDJzaUFDQUFJQU5CRUdwSkd5SUJRUnMyQWdRZ0FVSFFJaWtDQURjQ0VDQUJRY2dpS1FJQU53SUlRZEFpSUFGQkNHbzJBZ0JCekNJZ0JqWUNBRUhJSWlBQ05nSUFRZFFpUVFBMkFnQWdBVUVZYWlFQUEwQWdBRUVITmdJRUlBQkJDR29nQUVFRWFpRUFJQVJKRFFBTElBRWdBMFlOQUNBQklBRW9BZ1JCZm5FMkFnUWdBeUFCSUFOcklnSkJBWEkyQWdRZ0FTQUNOZ0lBSUFKQi93Rk5CRUFnQWtGNGNVR3dIMm9oQUFKL1FZZ2ZLQUlBSWdGQkFTQUNRUU4yZENJQ2NVVUVRRUdJSHlBQklBSnlOZ0lBSUFBTUFRc2dBQ2dDQ0FzaEFTQUFJQU0yQWdnZ0FTQUROZ0lNSUFNZ0FEWUNEQ0FESUFFMkFnZ01BUXRCSHlFQUlBSkIvLy8vQjAwRVFDQUNRU1lnQWtFSWRtY2lBR3QyUVFGeElBQkJBWFJyUVQ1cUlRQUxJQU1nQURZQ0hDQURRZ0EzQWhBZ0FFRUNkRUc0SVdvaEFRSkFBa0JCakI4b0FnQWlCRUVCSUFCMElnWnhSUVJBUVl3ZklBUWdCbkkyQWdBZ0FTQUROZ0lBREFFTElBSkJHU0FBUVFGMmEwRUFJQUJCSDBjYmRDRUFJQUVvQWdBaEJBTkFJQVFpQVNnQ0JFRjRjU0FDUmcwQ0lBQkJIWFloQkNBQVFRRjBJUUFnQVNBRVFRUnhhaUlHS0FJUUlnUU5BQXNnQmlBRE5nSVFDeUFESUFFMkFoZ2dBeUFETmdJTUlBTWdBellDQ0F3QkN5QUJLQUlJSWdBZ0F6WUNEQ0FCSUFNMkFnZ2dBMEVBTmdJWUlBTWdBVFlDRENBRElBQTJBZ2dMUVpRZktBSUFJZ0FnQlUwTkFFR1VIeUFBSUFWcklnRTJBZ0JCb0I5Qm9COG9BZ0FpQUNBRmFpSUNOZ0lBSUFJZ0FVRUJjallDQkNBQUlBVkJBM0kyQWdRZ0FFRUlhaUVBREFnTFFZUWZRVEEyQWdCQkFDRUFEQWNMUVFBaEFnc2dDRVVOQUFKQUlBWW9BaHdpQVVFQ2RFRzRJV29pQkNnQ0FDQUdSZ1JBSUFRZ0FqWUNBQ0FDRFFGQmpCOUJqQjhvQWdCQmZpQUJkM0UyQWdBTUFnc2dDRUVRUVJRZ0NDZ0NFQ0FHUmh0cUlBSTJBZ0FnQWtVTkFRc2dBaUFJTmdJWUlBWW9BaEFpQVFSQUlBSWdBVFlDRUNBQklBSTJBaGdMSUFZb0FoUWlBVVVOQUNBQ0lBRTJBaFFnQVNBQ05nSVlDeUFBSUFscUlRQWdCaUFKYWlJR0tBSUVJUU1MSUFZZ0EwRitjVFlDQkNBRklBQkJBWEkyQWdRZ0FDQUZhaUFBTmdJQUlBQkIvd0ZOQkVBZ0FFRjRjVUd3SDJvaEFRSi9RWWdmS0FJQUlnSkJBU0FBUVFOMmRDSUFjVVVFUUVHSUh5QUFJQUp5TmdJQUlBRU1BUXNnQVNnQ0NBc2hBQ0FCSUFVMkFnZ2dBQ0FGTmdJTUlBVWdBVFlDRENBRklBQTJBZ2dNQVF0Qkh5RURJQUJCLy8vL0IwMEVRQ0FBUVNZZ0FFRUlkbWNpQVd0MlFRRnhJQUZCQVhSclFUNXFJUU1MSUFVZ0F6WUNIQ0FGUWdBM0FoQWdBMEVDZEVHNElXb2hBUUpBQWtCQmpCOG9BZ0FpQWtFQklBTjBJZ1J4UlFSQVFZd2ZJQUlnQkhJMkFnQWdBU0FGTmdJQURBRUxJQUJCR1NBRFFRRjJhMEVBSUFOQkgwY2JkQ0VESUFFb0FnQWhBZ05BSUFJaUFTZ0NCRUY0Y1NBQVJnMENJQU5CSFhZaEFpQURRUUYwSVFNZ0FTQUNRUVJ4YWlJRUtBSVFJZ0lOQUFzZ0JDQUZOZ0lRQ3lBRklBRTJBaGdnQlNBRk5nSU1JQVVnQlRZQ0NBd0JDeUFCS0FJSUlnQWdCVFlDRENBQklBVTJBZ2dnQlVFQU5nSVlJQVVnQVRZQ0RDQUZJQUEyQWdnTElBZEJDR29oQUF3Q0N3SkFJQWRGRFFBQ1FDQUVLQUljSWdCQkFuUkJ1Q0ZxSWdFb0FnQWdCRVlFUUNBQklBSTJBZ0FnQWcwQlFZd2ZJQWhCZmlBQWQzRWlDRFlDQUF3Q0N5QUhRUkJCRkNBSEtBSVFJQVJHRzJvZ0FqWUNBQ0FDUlEwQkN5QUNJQWMyQWhnZ0JDZ0NFQ0lBQkVBZ0FpQUFOZ0lRSUFBZ0FqWUNHQXNnQkNnQ0ZDSUFSUTBBSUFJZ0FEWUNGQ0FBSUFJMkFoZ0xBa0FnQTBFUFRRUkFJQVFnQXlBRmFpSUFRUU55TmdJRUlBQWdCR29pQUNBQUtBSUVRUUZ5TmdJRURBRUxJQVFnQlVFRGNqWUNCQ0FFSUFWcUlnSWdBMEVCY2pZQ0JDQUNJQU5xSUFNMkFnQWdBMEgvQVUwRVFDQURRWGh4UWJBZmFpRUFBbjlCaUI4b0FnQWlBVUVCSUFOQkEzWjBJZ054UlFSQVFZZ2ZJQUVnQTNJMkFnQWdBQXdCQ3lBQUtBSUlDeUVCSUFBZ0FqWUNDQ0FCSUFJMkFnd2dBaUFBTmdJTUlBSWdBVFlDQ0F3QkMwRWZJUUFnQTBILy8vOEhUUVJBSUFOQkppQURRUWgyWnlJQWEzWkJBWEVnQUVFQmRHdEJQbW9oQUFzZ0FpQUFOZ0ljSUFKQ0FEY0NFQ0FBUVFKMFFiZ2hhaUVCQWtBQ1FDQUlRUUVnQUhRaUJuRkZCRUJCakI4Z0JpQUljallDQUNBQklBSTJBZ0FNQVFzZ0EwRVpJQUJCQVhaclFRQWdBRUVmUnh0MElRQWdBU2dDQUNFRkEwQWdCU0lCS0FJRVFYaHhJQU5HRFFJZ0FFRWRkaUVHSUFCQkFYUWhBQ0FCSUFaQkJIRnFJZ1lvQWhBaUJRMEFDeUFHSUFJMkFoQUxJQUlnQVRZQ0dDQUNJQUkyQWd3Z0FpQUNOZ0lJREFFTElBRW9BZ2dpQUNBQ05nSU1JQUVnQWpZQ0NDQUNRUUEyQWhnZ0FpQUJOZ0lNSUFJZ0FEWUNDQXNnQkVFSWFpRUFEQUVMQWtBZ0NVVU5BQUpBSUFJb0Fod2lBRUVDZEVHNElXb2lBU2dDQUNBQ1JnUkFJQUVnQkRZQ0FDQUVEUUZCakI4Z0MwRitJQUIzY1RZQ0FBd0NDeUFKUVJCQkZDQUpLQUlRSUFKR0cyb2dCRFlDQUNBRVJRMEJDeUFFSUFrMkFoZ2dBaWdDRUNJQUJFQWdCQ0FBTmdJUUlBQWdCRFlDR0FzZ0FpZ0NGQ0lBUlEwQUlBUWdBRFlDRkNBQUlBUTJBaGdMQWtBZ0EwRVBUUVJBSUFJZ0F5QUZhaUlBUVFOeU5nSUVJQUFnQW1vaUFDQUFLQUlFUVFGeU5nSUVEQUVMSUFJZ0JVRURjallDQkNBQ0lBVnFJZ1FnQTBFQmNqWUNCQ0FESUFScUlBTTJBZ0FnQndSQUlBZEJlSEZCc0I5cUlRQkJuQjhvQWdBaEFRSi9RUUVnQjBFRGRuUWlCU0FHY1VVRVFFR0lIeUFGSUFaeU5nSUFJQUFNQVFzZ0FDZ0NDQXNoQmlBQUlBRTJBZ2dnQmlBQk5nSU1JQUVnQURZQ0RDQUJJQVkyQWdnTFFad2ZJQVEyQWdCQmtCOGdBellDQUFzZ0FrRUlhaUVBQ3lBS1FSQnFKQUFnQUF2U0N3RUhmd0pBSUFCRkRRQWdBRUVJYXlJQ0lBQkJCR3NvQWdBaUFVRjRjU0lBYWlFRkFrQWdBVUVCY1EwQUlBRkJBM0ZGRFFFZ0FpQUNLQUlBSWdGcklnSkJtQjhvQWdCSkRRRWdBQ0FCYWlFQUFrQUNRRUdjSHlnQ0FDQUNSd1JBSUFGQi93Rk5CRUFnQVVFRGRpRUVJQUlvQWd3aUFTQUNLQUlJSWdOR0JFQkJpQjlCaUI4b0FnQkJmaUFFZDNFMkFnQU1CUXNnQXlBQk5nSU1JQUVnQXpZQ0NBd0VDeUFDS0FJWUlRWWdBaUFDS0FJTUlnRkhCRUFnQWlnQ0NDSURJQUUyQWd3Z0FTQUROZ0lJREFNTElBSkJGR29pQkNnQ0FDSURSUVJBSUFJb0FoQWlBMFVOQWlBQ1FSQnFJUVFMQTBBZ0JDRUhJQU1pQVVFVWFpSUVLQUlBSWdNTkFDQUJRUkJxSVFRZ0FTZ0NFQ0lERFFBTElBZEJBRFlDQUF3Q0N5QUZLQUlFSWdGQkEzRkJBMGNOQWtHUUh5QUFOZ0lBSUFVZ0FVRitjVFlDQkNBQ0lBQkJBWEkyQWdRZ0JTQUFOZ0lBRHd0QkFDRUJDeUFHUlEwQUFrQWdBaWdDSENJRFFRSjBRYmdoYWlJRUtBSUFJQUpHQkVBZ0JDQUJOZ0lBSUFFTkFVR01IMEdNSHlnQ0FFRitJQU4zY1RZQ0FBd0NDeUFHUVJCQkZDQUdLQUlRSUFKR0cyb2dBVFlDQUNBQlJRMEJDeUFCSUFZMkFoZ2dBaWdDRUNJREJFQWdBU0FETmdJUUlBTWdBVFlDR0FzZ0FpZ0NGQ0lEUlEwQUlBRWdBellDRkNBRElBRTJBaGdMSUFJZ0JVOE5BQ0FGS0FJRUlnRkJBWEZGRFFBQ1FBSkFBa0FDUUNBQlFRSnhSUVJBUWFBZktBSUFJQVZHQkVCQm9COGdBallDQUVHVUgwR1VIeWdDQUNBQWFpSUFOZ0lBSUFJZ0FFRUJjallDQkNBQ1Fad2ZLQUlBUncwR1FaQWZRUUEyQWdCQm5COUJBRFlDQUE4TFFad2ZLQUlBSUFWR0JFQkJuQjhnQWpZQ0FFR1FIMEdRSHlnQ0FDQUFhaUlBTmdJQUlBSWdBRUVCY2pZQ0JDQUFJQUpxSUFBMkFnQVBDeUFCUVhoeElBQnFJUUFnQVVIL0FVMEVRQ0FCUVFOMklRUWdCU2dDRENJQklBVW9BZ2dpQTBZRVFFR0lIMEdJSHlnQ0FFRitJQVIzY1RZQ0FBd0ZDeUFESUFFMkFnd2dBU0FETmdJSURBUUxJQVVvQWhnaEJpQUZJQVVvQWd3aUFVY0VRRUdZSHlnQ0FCb2dCU2dDQ0NJRElBRTJBZ3dnQVNBRE5nSUlEQU1MSUFWQkZHb2lCQ2dDQUNJRFJRUkFJQVVvQWhBaUEwVU5BaUFGUVJCcUlRUUxBMEFnQkNFSElBTWlBVUVVYWlJRUtBSUFJZ01OQUNBQlFSQnFJUVFnQVNnQ0VDSUREUUFMSUFkQkFEWUNBQXdDQ3lBRklBRkJmbkUyQWdRZ0FpQUFRUUZ5TmdJRUlBQWdBbW9nQURZQ0FBd0RDMEVBSVFFTElBWkZEUUFDUUNBRktBSWNJZ05CQW5SQnVDRnFJZ1FvQWdBZ0JVWUVRQ0FFSUFFMkFnQWdBUTBCUVl3ZlFZd2ZLQUlBUVg0Z0EzZHhOZ0lBREFJTElBWkJFRUVVSUFZb0FoQWdCVVliYWlBQk5nSUFJQUZGRFFFTElBRWdCallDR0NBRktBSVFJZ01FUUNBQklBTTJBaEFnQXlBQk5nSVlDeUFGS0FJVUlnTkZEUUFnQVNBRE5nSVVJQU1nQVRZQ0dBc2dBaUFBUVFGeU5nSUVJQUFnQW1vZ0FEWUNBQ0FDUVp3ZktBSUFSdzBBUVpBZklBQTJBZ0FQQ3lBQVFmOEJUUVJBSUFCQmVIRkJzQjlxSVFFQ2YwR0lIeWdDQUNJRFFRRWdBRUVEZG5RaUFIRkZCRUJCaUI4Z0FDQURjallDQUNBQkRBRUxJQUVvQWdnTElRQWdBU0FDTmdJSUlBQWdBallDRENBQ0lBRTJBZ3dnQWlBQU5nSUlEd3RCSHlFRElBQkIvLy8vQjAwRVFDQUFRU1lnQUVFSWRtY2lBV3QyUVFGeElBRkJBWFJyUVQ1cUlRTUxJQUlnQXpZQ0hDQUNRZ0EzQWhBZ0EwRUNkRUc0SVdvaEFRSkFBa0FDUUVHTUh5Z0NBQ0lFUVFFZ0EzUWlCM0ZGQkVCQmpCOGdCQ0FIY2pZQ0FDQUJJQUkyQWdBZ0FpQUJOZ0lZREFFTElBQkJHU0FEUVFGMmEwRUFJQU5CSDBjYmRDRURJQUVvQWdBaEFRTkFJQUVpQkNnQ0JFRjRjU0FBUmcwQ0lBTkJIWFloQVNBRFFRRjBJUU1nQkNBQlFRUnhhaUlIUVJCcUtBSUFJZ0VOQUFzZ0J5QUNOZ0lRSUFJZ0JEWUNHQXNnQWlBQ05nSU1JQUlnQWpZQ0NBd0JDeUFFS0FJSUlnQWdBallDRENBRUlBSTJBZ2dnQWtFQU5nSVlJQUlnQkRZQ0RDQUNJQUEyQWdnTFFhZ2ZRYWdmS0FJQVFRRnJJZ0JCZnlBQUd6WUNBQXNMQkFBakFBc0dBQ0FBSkFBTEVBQWpBQ0FBYTBGd2NTSUFKQUFnQUF0S0FRRi9JQUFnQVVrRVFDQUFJQUVnQWhBQ0R3c2dBZ1JBSUFBZ0Ftb2hBeUFCSUFKcUlRRURRQ0FEUVFGcklnTWdBVUVCYXlJQkxRQUFPZ0FBSUFKQkFXc2lBZzBBQ3dzZ0FBdjlEZ0lSZndGK0l3QkJNR3NpQnlRQVFiaC9JUWdDUUNBRlJRMEFJQVFzQUFBaUNVSC9BWEVoQ3dKQUlBbEJBRWdFUUNBTFFmNEFhMEVCZGlJR0lBVlBEUUpCYkNFSUlBdEIvd0JySWd0Qi93RkxEUUlnQkVFQmFpRUlRUUFoQlFOQUlBVWdDMDhFUUNBTElRZ2dCaUVMREFNRklBQWdCV29nQ0NBRlFRRjJhaUlFTFFBQVFRUjJPZ0FBSUFBZ0JVRUJjbW9nQkMwQUFFRVBjVG9BQUNBRlFRSnFJUVVNQVFzQUN3QUxJQVVnQzAwTkFTQUhRZjhCTmdJRUlBWWdCMEVFYWlBSFFRaHFJQVJCQVdvaURpQUxFQXdpQkVHSWYwc0VRQ0FFSVFnTUFndEJWQ0VJSUFjb0FnZ2lFRUVHU3cwQklBY29BZ1FpRVVFQmRDSUpRUUpxclVJQklCQ3RoaUlZUVFFZ0VIUWlEVUVCYWlJRnJVSUNobng4UWd0OFF2ei8vLy8vLy8vLy93Q0RRdVFDVmcwQlFWSWhDQ0FSUWY4QlN3MEJJQTFCZjNOQkFuUkI1QUpxclNBUlFRRnFJaFZCQVhTdElCaDhRZ2g4VkEwQklBc2dCR3NoRmlBRUlBNXFJUmNnQmtHQUJHb2lFaUFGUVFKMGFpSVJJQWxxUVFKcUlRNGdCa0dFQkdvaEUwR0FnQUlnRUhSQkVIWWhDVUVBSVFWQkFTRVBJQTFCQVdzaUZDRUtBMEFnQlNBVlJrVUVRQUpBSUFZZ0JVRUJkQ0lJYWk4QkFDSUVRZi8vQTBZRVFDQVRJQXBCQW5ScUlBVTZBQUlnQ2tFQmF5RUtRUUVoQkF3QkN5QVBRUUFnQ1NBRXdVb2JJUThMSUFnZ0VXb2dCRHNCQUNBRlFRRnFJUVVNQVFzTElBWWdEenNCZ2dRZ0JpQVFPd0dBQkFKQUlBb2dGRVlFUUNBTlFRTjJJUWhDQUNFWVFRQWhEd05BSUF3Z0ZVWUVRQ0FJSUExQkFYWnFRUU5xSWdsQkFYUWhDRUVBSVFSQkFDRUtBMEJCQUNFRklBb2dEVThOQkFOQUlBVkJBa1pGQkVBZ0V5QUZJQWxzSUFScUlCUnhRUUowYWlBT0lBVWdDbXBxTFFBQU9nQUNJQVZCQVdvaEJRd0JDd3NnQ2tFQ2FpRUtJQVFnQ0dvZ0ZIRWhCQXdBQ3dBRklBWWdERUVCZEdvdUFRQWhDU0FPSUE5cUlnUWdHRGNBQUVFSUlRVURRQ0FGSUFsT1JRUkFJQVFnQldvZ0dEY0FBQ0FGUVFocUlRVU1BUXNMSUJoQ2dZS0VpSkNnd0lBQmZDRVlJQXhCQVdvaERDQUpJQTlxSVE4TUFRc0FDd0FMSUExQkEzWWdEVUVCZG1wQkEyb2hDRUVBSVFVRFFDQU1JQlZHUlFSQVFRQWhDU0FHSUF4QkFYUnFMZ0VBSWdSQkFDQUVRUUJLR3lFRUEwQWdCQ0FKUmtVRVFDQVRJQVZCQW5ScUlBdzZBQUlEUUNBRklBaHFJQlJ4SWdVZ0Nrc05BQXNnQ1VFQmFpRUpEQUVMQ3lBTVFRRnFJUXdNQVFzTFFYOGhDQ0FGRFFJTElCQkJBV29oQ0VFQUlRVURRQ0FGSUExR1JRUkFJQkVnRXlBRlFRSjBhaUlPTFFBQ1FRRjBhaUlFSUFRdkFRQWlDVUVCYWpzQkFDQU9JQWdnQ1dkQllITnFJZ1E2QUFNZ0RpQUpJQVIwSUExck93RUFJQVZCQVdvaEJRd0JDd3NDUUFKQUlBWXZBWUlFQkVBZ0IwRWNhaUlFSUJjZ0ZoQU5JZ2hCaUg5TERRSWdCMEVVYWlBRUlCSVFEaUFIUVF4cUlBUWdFaEFPUVFBaEJRTkFJQWRCSEdvaUJCQVBJQVZCK3dGTGNnMENJQUFnQldvaUJpQUhRUlJxSUFRUUVEb0FBQ0FHSUFkQkRHb2dCQkFRT2dBQklBVkJBbkloQkNBSFFSeHFFQThFUUNBRUlRVU1Bd1VnQUNBRWFpQUhRUlJxSUFkQkhHb2lCQkFRT2dBQUlBWWdCMEVNYWlBRUVCQTZBQU1nQlVFRWFpRUZEQUVMQUFzQUN5QUhRUnhxSWdRZ0Z5QVdFQTBpQ0VHSWYwc05BU0FIUVJScUlBUWdFaEFPSUFkQkRHb2dCQ0FTRUE1QkFDRUZBMEFnQjBFY2FpSUVFQThnQlVIN0FVdHlSUVJBSUFBZ0JXb2lCaUFIUVJScUlBUVFFVG9BQUNBR0lBZEJER29nQkJBUk9nQUJJQVZCQW5JaEJDQUhRUnhxRUE4RVFDQUVJUVVGSUFBZ0JHb2dCMEVVYWlBSFFSeHFJZ1FRRVRvQUFDQUdJQWRCREdvZ0JCQVJPZ0FESUFWQkJHb2hCUXdDQ3dzTEFuOERRRUc2ZnlFSUlBVkIvUUZMRFFNZ0FDQUZhaUlHSUFkQkZHb2dCMEVjYWlJSkVCRTZBQUFnQmtFQmFpRUVJQWtRRDBFRFJnUkFJQWRCREdvaENFRUNEQUlMSUFWQi9BRkxEUU1nQmlBSFFReHFJQWRCSEdvaUJCQVJPZ0FCSUFWQkFtb2hCU0FFRUE5QkEwY05BQXNnQUNBRmFpRUVJQWRCRkdvaENFRURDeUFFSUFnZ0IwRWNhaEFST2dBQUlBWnFJQUJySVFnTUFRc0Nmd05BUWJwL0lRZ2dCVUg5QVVzTkFpQUFJQVZxSWdZZ0IwRVVhaUFIUVJ4cUlna1FFRG9BQUNBR1FRRnFJUVFnQ1JBUFFRTkdCRUFnQjBFTWFpRUlRUUlNQWdzZ0JVSDhBVXNOQWlBR0lBZEJER29nQjBFY2FpSUVFQkE2QUFFZ0JVRUNhaUVGSUFRUUQwRURSdzBBQ3lBQUlBVnFJUVFnQjBFVWFpRUlRUU1MSUFRZ0NDQUhRUnhxRUJBNkFBQWdCbW9nQUdzaENBc2dDRUdJZjBzTkFRc2dDQ0VFUVFBaEJTQUJRUUJCTkJBRElRbEJBQ0VLQTBBZ0JDQUZSd1JBSUFBZ0JXb2lCaTBBQUNJQlFRdExCRUJCYkNFSURBTUZJQWtnQVVFQ2RHb2lBU0FCS0FJQVFRRnFOZ0lBSUFWQkFXb2hCVUVCSUFZdEFBQjBRUUYxSUFwcUlRb01BZ3NBQ3d0QmJDRUlJQXBGRFFBZ0NtY2lCVUVmY3lJQlFRdExEUUFnQTBFZ0lBVnJOZ0lBUVFGQkFpQUJkQ0FLYXlJRFowRWZjeUlCZENBRFJ3MEFJQUFnQkdvZ0FVRUJhaUlBT2dBQUlBa2dBRUVDZEdvaUFDQUFLQUlBUVFGcU5nSUFJQWtvQWdRaUFFRUNTU0FBUVFGeGNnMEFJQUlnQkVFQmFqWUNBQ0FMUVFGcUlRZ0xJQWRCTUdva0FDQUlDNkFGQVF4L0l3QkJFR3NpRENRQUFuOGdCRUVIVFFSQUlBeENBRGNEQ0NBTVFRaHFJZ1VnQXlBRUVBSWFRV3dnQUNBQklBSWdCVUVJRUF3aUFDQUFJQVJMR3lBQUlBQkJpWDlKR3d3QkN5QUFRUUFnQVNnQ0FFRUJhaUlOUVFGMEVBTWhEMEZVSUFNb0FBQWlCa0VQY1NJQVFRcExEUUFhSUFJZ0FFRUZhallDQUNBRElBUnFJZ0pCQkdzaEJ5QUNRUWRySVFzZ0FFRUdhaUVPUVFRaEFpQUdRUVIySVFWQklDQUFkQ0lJUVFGeUlRbEJBQ0VBUVFFaEJpQURJUVFEUUFKQUlBWkJBWEZGQkVBRFFDQUZRWDl6UVlDQWdJQjRjbWdpQmtFWVNVVUVRQ0FBUVNScUlRQWdCQ0FMVFFSL0lBUkJBMm9GSUFRZ0MydEJBM1FnQW1wQkgzRWhBaUFIQ3lJRUtBQUFJQUoySVFVTUFRc0xJQUlnQmtFZWNTSUtha0VDYWlFQ0lBWkJBWFpCQTJ3Z0FHb2dCU0FLZGtFRGNXb2lBQ0FOVHcwQkFuOGdCQ0FMU3lBQ1FRTjJJQVJxSWdVZ0IwdHhSUVJBSUFKQkIzRWhBaUFGREFFTElBUWdCMnRCQTNRZ0FtcEJIM0VoQWlBSEN5SUVLQUFBSUFKMklRVUxJQVVnQ0VFQmEzRWlCaUFJUVFGMFFRRnJJZ29nQ1dzaUVFa0VmeUFPUVFGckJTQUZJQXB4SWdVZ0VFRUFJQVVnQ0U0YmF5RUdJQTRMSVFVZ0R5QUFRUUYwYWlBR1FRRnJJZ283QVFBZ0FFRUJhaUVBSUFJZ0JXb2hBaUFJUVFFZ0Jtc2dDaUFHUVFCS0d5QUphaUlKU2dSQUlBbEJBa2dOQVVFZ0lBbG5JZ1ZySVE1QkFTQUZRUjl6ZENFSUN5QUFJQTFQRFFBZ0NrRUFSeUVHQW44Z0JDQUxTeUFDUVFOMUlBUnFJZ1VnQjB0eFJRUkFJQUpCQjNFaEFpQUZEQUVMSUFJZ0JDQUhhMEVEZEdwQkgzRWhBaUFIQ3lJRUtBQUFJQUoySVFVTUFRc0xRV3dnQ1VFQlJ3MEFHa0ZRSUFBZ0RVc05BQnBCYkNBQ1FTQktEUUFhSUFFZ0FFRUJhellDQUNBRUlBSkJCMnBCQTNWcUlBTnJDeUFNUVJCcUpBQUw4Z0VCQVg4Z0FrVUVRQ0FBUWdBM0FnQWdBRUVBTmdJUUlBQkNBRGNDQ0VHNGZ3OExJQUFnQVRZQ0RDQUFJQUZCQkdvMkFoQWdBa0VFVHdSQUlBQWdBU0FDYWlJQlFRUnJJZ00yQWdnZ0FDQURLQUFBTmdJQUlBRkJBV3N0QUFBaUFRUkFJQUFnQVdkQkYyczJBZ1FnQWc4TElBQkJBRFlDQkVGL0R3c2dBQ0FCTmdJSUlBQWdBUzBBQUNJRE5nSUFBa0FDUUFKQUlBSkJBbXNPQWdFQUFnc2dBQ0FCTFFBQ1FSQjBJQU55SWdNMkFnQUxJQUFnQVMwQUFVRUlkQ0FEYWpZQ0FBc2dBU0FDYWtFQmF5MEFBQ0lCUlFSQUlBQkJBRFlDQkVGc0R3c2dBQ0FCWnlBQ1FRTjBhMEVKYWpZQ0JDQUNDMFFCQW44Z0FTQUNMd0VBSWdNZ0FTZ0NCR29pQkRZQ0JDQUFJQU5CQW5SQm9CMXFLQUlBSUFFb0FnQkJBQ0FFYTNaeE5nSUFJQUVRRHhvZ0FDQUNRUVJxTmdJRUM1OEJBUVIvUVFNaEFTQUFLQUlFSWdKQklFMEVRQ0FBS0FJSUlnRWdBQ2dDRUU4RVFDQUFJQUpCQjNFMkFnUWdBQ0FCSUFKQkEzWnJJZ0kyQWdnZ0FDQUNLQUFBTmdJQVFRQVBDeUFBS0FJTUlnTWdBVVlFUUVFQlFRSWdBa0VnU1JzUEN5QUFJQUVnQVNBRGF5QUNRUU4ySWdRZ0FTQUVheUFEU1NJQkd5SURheUlFTmdJSUlBQWdBaUFEUVFOMGF6WUNCQ0FBSUFRb0FBQTJBZ0FMSUFFTFNBRUVmeUFBS0FJRUlBQW9BZ0JCQW5ScUlnSXRBQUlnQWk4QkFDRUVJQUVnQVNnQ0JDSUZJQUl0QUFNaUFtbzJBZ1FnQUNBRUlBRW9BZ0FnQlhSQkFDQUNhM1pxTmdJQUMxSUJCSDhnQUNnQ0JDQUFLQUlBUVFKMGFpSUNMUUFDSUFJdkFRQWhCQ0FCSUFJdEFBTWlBaUFCS0FJRWFpSUZOZ0lFSUFBZ0JDQUNRUUowUWFBZGFpZ0NBQ0FCS0FJQVFRQWdCV3QyY1dvMkFnQUxDQUFnQUVHSWYwc0xHZ0FnQUFSQUlBRUVRQ0FDSUFBZ0FSRUNBQThMSUFBUUJnc0xwZ2dDRFg4QmZpTUFRUkJySWdra0FDQUpRUUEyQWd3Z0NVRUFOZ0lJQW44Q1FDQURRZWdKYWlBRElBbEJDR29nQ1VFTWFpQUJJQUlnQTBHQUFXb1FDeUlQUVloL1N3MEFRVlFnQ1NnQ0RDSUVJQUFvQWdBaUFVSC9BWEZCQVdwTERRRWFJQUJCQkdvaEN5QUFJQUZCLzRHQWVIRWdCRUVRZEVHQWdQd0hjWEkyQWdCQmZ5QUVJQVJCQUVnYlFRRnFJUUJCQUNFQklBa29BZ2doQlVFQUlRSURRQ0FBSUFKR0JFQWdCVUVEYXlFQlFRQWhBQU5BQWtCQkFDRUNJQUFnQVU0RVFBTkFJQUFnQlU0TkFpQURJQUFnQTJwQjZBbHFMUUFBUVFKMGFrRkFheUlCSUFFb0FnQWlBVUVCYWpZQ0FDQUJJQU5xSUFBNkFPZ0hJQUJCQVdvaEFBd0FDd0FGQTBBZ0FrRUVSa1VFUUNBRElBTWdBQ0FDYWlJSGFrSG9DV290QUFCQkFuUnFRVUJySWdnZ0NDZ0NBQ0lJUVFGcU5nSUFJQU1nQ0dvZ0J6b0E2QWNnQWtFQmFpRUNEQUVMQ3lBQVFRUnFJUUFNQWdzQUN3c2dCRUVCYWlFT0lBTW9BZ0FoQjBFQUlRQkJBU0VJQTBBZ0NDQU9SZzBESUE0Z0NHc2hCQ0FESUFoQkFuUnFLQUlBSVFVQ1FBSkFBa0FDUUFKQUFrQkJBU0FJZEVFQmRTSU5RUUZyRGdnQUFRUUNCQVFFQXdRTFFRQWhBaUFGUVFBZ0JVRUFTaHNoQmlBQUlRRURRQ0FDSUFaR0RRVWdBeUFDSUFkcWFpMEE2QWNoQ2lBTElBRkJBWFJxSWd3Z0JEb0FBU0FNSUFvNkFBQWdBa0VCYWlFQ0lBRkJBV29oQVF3QUN3QUxRUUFoQWlBRlFRQWdCVUVBU2hzaENpQUFJUUVEUUNBQ0lBcEdEUVFnQ3lBQlFRRjBhaUlHSUFNZ0FpQUhhbW90QU9nSElndzZBQUlnQmlBRU9nQUJJQVlnRERvQUFDQUdJQVE2QUFNZ0FrRUJhaUVDSUFGQkFtb2hBUXdBQ3dBTFFRQWhBaUFGUVFBZ0JVRUFTaHNoQmlBRVFRaDBRWUQrQTNFaEJDQUFJUUVEUUNBQ0lBWkdEUU1nQ3lBQlFRRjBhaUFFSUFNZ0FpQUhhbW90QU9nSGNxMUNnWUNFZ0pDQXdBQitOd0FBSUFKQkFXb2hBaUFCUVFScUlRRU1BQXNBQzBFQUlRSWdCVUVBSUFWQkFFb2JJUVlnQkVFSWRFR0EvZ054SVFRZ0FDRUJBMEFnQWlBR1JnMENJQXNnQVVFQmRHb2lDaUFFSUFNZ0FpQUhhbW90QU9nSGNxMUNnWUNFZ0pDQXdBQitJaEUzQUFnZ0NpQVJOd0FBSUFKQkFXb2hBaUFCUVFocUlRRU1BQXNBQzBFQUlRRWdCVUVBSUFWQkFFb2JJUW9nQkVFSWRFR0EvZ054SVF3Z0FDRUVBMEFnQVNBS1JnMEJJQXNnQkVFQmRHb2hFQ0FNSUFNZ0FTQUhhbW90QU9nSGNxMUNnWUNFZ0pDQXdBQitJUkZCQUNFQ0EwQWdBaUFOVGtVRVFDQVFJQUpCQVhScUlnWWdFVGNBR0NBR0lCRTNBQkFnQmlBUk53QUlJQVlnRVRjQUFDQUNRUkJxSVFJTUFRc0xJQUZCQVdvaEFTQUVJQTFxSVFRTUFBc0FDeUFJUVFGcUlRZ2dCU0FIYWlFSElBVWdEV3dnQUdvaEFBd0FDd0FGSUFNZ0FrRUNkR29pQjBGQWF5QUJOZ0lBSUFKQkFXb2hBaUFIS0FJQUlBRnFJUUVNQVFzQUN3QUxJQThMSUFsQkVHb2tBQXZ5QWdFR2Z5TUFRU0JySWdVa0FDQUVLQUlBSVFZZ0JVRU1haUFDSUFNUURTSURRWWgvVFFSQUlBUkJCR29oQWlBQUlBRnFJZ2xCQTJzaEJFRUFJQVpCRUhaclFSOXhJUU1EUUNBRlFReHFFQThnQUNBRVQzSkZCRUFnQWlBRktBSU1JZ1lnQlNnQ0VDSUhkQ0FEZGtFQmRHb2lDQzBBQVNFS0lBQWdDQzBBQURvQUFDQUNJQVlnQnlBS2FpSUdkQ0FEZGtFQmRHb2lCeTBBQUNFSUlBVWdCaUFITFFBQmFqWUNFQ0FBSUFnNkFBRWdBRUVDYWlFQURBRUxDd05BSUFWQkRHb1FEeUVISUFVb0Fnd2hCaUFGS0FJUUlRUWdBQ0FKVHlBSGNrVUVRQ0FDSUFZZ0JIUWdBM1pCQVhScUlnWXRBQUFoQnlBRklBUWdCaTBBQVdvMkFoQWdBQ0FIT2dBQUlBQkJBV29oQUF3QkN3c0RRQ0FBSUFsUFJRUkFJQUlnQmlBRWRDQURka0VCZEdvaUJ5MEFBU0VJSUFBZ0J5MEFBRG9BQUNBQVFRRnFJUUFnQkNBSWFpRUVEQUVMQzBGc1FXd2dBU0FGS0FJVUlBVW9BaGhIR3lBRVFTQkhHeUVEQ3lBRlFTQnFKQUFnQXd2UEZBRWpmeU1BUWRBQWF5SUZKQUJCYkNFSkFrQWdBMEVLU1EwQUFrQWdBeUFDTHdBRUlnY2dBaThBQUNJSUlBSXZBQUlpRFdwcVFRWnFJZ3hKRFFBZ0JDOEJBaUVHSUFWQlBHb2dBa0VHYWlJQ0lBZ1FEU0lKUVloL1N3MEJJQVZCS0dvZ0FpQUlhaUlDSUEwUURTSUpRWWgvU3cwQklBVkJGR29nQWlBTmFpSUNJQWNRRFNJSlFZaC9TdzBCSUFVZ0FpQUhhaUFESUF4ckVBMGlDVUdJZjBzTkFTQUVRUVJxSVFvZ0FDQUJhaUlmUVFOcklTQkJBQ0FHYTBFZmNTRUxJQVVvQWdnaEVTQUZLQUljSVJJZ0JTZ0NNQ0VUSUFVb0FrUWhGQ0FGS0FJRUlRa2dCU2dDR0NFTklBVW9BaXdoRENBRktBSkFJUVlnQlNnQ0VDRWhJQVVvQWlRaElpQUZLQUk0SVNNZ0JTZ0NUQ0VrSUFVb0FnQWhGU0FGS0FJVUlSWWdCU2dDS0NFWElBVW9BandoR0VFQklROGdBQ0FCUVFOcVFRSjJJZ1JxSWdNZ0JHb2lBaUFFYWlJWklRUWdBaUVJSUFNaEJ3TkFJQTlCQVhGRklBUWdJRTl5UlFSQUlBQWdDaUFZSUFaMElBdDJRUUowYWlJT0x3RUFPd0FBSUE0dEFBSWhHaUFPTFFBRElSQWdCeUFLSUJjZ0RIUWdDM1pCQW5ScUlnNHZBUUE3QUFBZ0RpMEFBaUViSUE0dEFBTWhEeUFJSUFvZ0ZpQU5kQ0FMZGtFQ2RHb2lEaThCQURzQUFDQU9MUUFDSVJ3Z0RpMEFBeUVkSUFRZ0NpQVZJQWwwSUF0MlFRSjBhaUlPTHdFQU93QUFJQTR0QUFJaEhpQU9MUUFESVE0Z0FDQVFhaUlsSUFvZ0dDQUdJQnBxSWdaMElBdDJRUUowYWlJUUx3RUFPd0FBSUJBdEFBSWdFQzBBQXlFbUlBY2dEMm9pSnlBS0lCY2dEQ0FiYWlJYWRDQUxka0VDZEdvaUJ5OEJBRHNBQUNBSExRQUNJUXdnQnkwQUF5RVFJQWdnSFdvaUd5QUtJQllnRFNBY2FpSVBkQ0FMZGtFQ2RHb2lDQzhCQURzQUFDQUlMUUFDSVEwZ0NDMEFBeUVjSUFRZ0Rtb2lIU0FLSUJVZ0NTQWVhaUlPZENBTGRrRUNkR29pQ1M4QkFEc0FBQ0FHYWlFQVFRTWhCd0ovSUJRZ0pFa0VRQ0FBSVFaQkF3d0JDeUFBUVFkeElRWWdGQ0FBUVFOMmF5SVVLQUFBSVJoQkFBc2dDUzBBQXlFZUlBa3RBQUloQ0NBTUlCcHFJUUFnRXlBalNRUi9JQUFGSUJNZ0FFRURkbXNpRXlnQUFDRVhRUUFoQnlBQVFRZHhDeUVNSUEwZ0Qyb2hBQ0FIY2lFSlFRTWhEd0ovSUJJZ0lra0VRQ0FBSVExQkF3d0JDeUFBUVFkeElRMGdFaUFBUVFOMmF5SVNLQUFBSVJaQkFBc2dDQ0FPYWlFQUlBbHlJQkVnSVVrRWZ5QUFCU0FSSUFCQkEzWnJJaEVvQUFBaEZVRUFJUThnQUVFSGNRc2hDU0FsSUNacUlRQWdFQ0FuYWlFSElCc2dIR29oQ0NBZElCNXFJUVFnRDNKRklROE1BUXNMSUFVZ0REWUNMQ0FGSUFZMkFrQWdCU0FOTmdJWUlBVWdDVFlDQkNBRklCUTJBa1FnQlNBVE5nSXdJQVVnRWpZQ0hDQUZJQkUyQWdnZ0JTQVlOZ0k4SUFVZ0Z6WUNLQ0FGSUJZMkFoUWdCU0FWTmdJQUlBSWdCMGtnQUNBRFMzSU5BRUZzSVFrZ0NDQVpTdzBCSUFOQkEyc2hDUU5BSUFWQlBHb1FEMFVnQUNBSlNYRUVRQ0FBSUFvZ0JTZ0NQQ0lOSUFVb0FrQWlESFFnQzNaQkFuUnFJZzR2QVFBN0FBQWdBQ0FPTFFBRGFpSUdJQW9nRFNBTUlBNHRBQUpxSWdCMElBdDJRUUowYWlJTUx3RUFPd0FBSUFVZ0FDQU1MUUFDYWpZQ1FDQUdJQXd0QUFOcUlRQU1BUVVnQTBFQ2F5RU1BMEFnQlVFOGFoQVBJUVlnQlNnQ1BDRU5JQVVvQWtBaENTQUFJQXhMSUFaeVJRUkFJQUFnQ2lBTklBbDBJQXQyUVFKMGFpSUdMd0VBT3dBQUlBVWdDU0FHTFFBQ2FqWUNRQ0FBSUFZdEFBTnFJUUFNQVFzTEEwQWdBQ0FNUzBVRVFDQUFJQW9nRFNBSmRDQUxka0VDZEdvaUJpOEJBRHNBQUNBQUlBWXRBQU5xSVFBZ0NTQUdMUUFDYWlFSkRBRUxDd0pBSUFBZ0EwOE5BQ0FBSUFvZ0RTQUpkQ0FMZGlJQVFRSjBhaUlETFFBQU9nQUFJQU10QUFOQkFVWUVRQ0FKSUFNdEFBSnFJUWtNQVFzZ0NVRWZTdzBBUVNBZ0NTQUtJQUJCQW5ScUxRQUNhaUlBSUFCQklFOGJJUWtMSUFKQkEyc2hEQU5BSUFWQktHb1FEMFVnQnlBTVNYRUVRQ0FISUFvZ0JTZ0NLQ0lHSUFVb0Fpd2lBSFFnQzNaQkFuUnFJZzB2QVFBN0FBQWdCeUFOTFFBRGFpSURJQW9nQmlBQUlBMHRBQUpxSWdCMElBdDJRUUowYWlJR0x3RUFPd0FBSUFVZ0FDQUdMUUFDYWpZQ0xDQURJQVl0QUFOcUlRY01BUVVnQWtFQ2F5RUdBMEFnQlVFb2FoQVBJUU1nQlNnQ0tDRU1JQVVvQWl3aEFDQUdJQWRKSUFOeVJRUkFJQWNnQ2lBTUlBQjBJQXQyUVFKMGFpSURMd0VBT3dBQUlBVWdBQ0FETFFBQ2FqWUNMQ0FISUFNdEFBTnFJUWNNQVFzTEEwQWdCaUFIU1VVRVFDQUhJQW9nRENBQWRDQUxka0VDZEdvaUF5OEJBRHNBQUNBSElBTXRBQU5xSVFjZ0FDQURMUUFDYWlFQURBRUxDd0pBSUFJZ0IwME5BQ0FISUFvZ0RDQUFkQ0FMZGlJQ1FRSjBhaUlETFFBQU9nQUFJQU10QUFOQkFVWUVRQ0FBSUFNdEFBSnFJUUFNQVFzZ0FFRWZTdzBBUVNBZ0FDQUtJQUpCQW5ScUxRQUNhaUlBSUFCQklFOGJJUUFMSUJsQkEyc2hEQU5BSUFWQkZHb1FEMFVnQ0NBTVNYRUVRQ0FJSUFvZ0JTZ0NGQ0lHSUFVb0FoZ2lBblFnQzNaQkFuUnFJZzB2QVFBN0FBQWdDQ0FOTFFBRGFpSURJQW9nQmlBQ0lBMHRBQUpxSWdKMElBdDJRUUowYWlJR0x3RUFPd0FBSUFVZ0FpQUdMUUFDYWpZQ0dDQURJQVl0QUFOcUlRZ01BUVVnR1VFQ2F5RURBMEFnQlVFVWFoQVBJUUlnQlNnQ0ZDRUdJQVVvQWhnaEJ5QURJQWhKSUFKeVJRUkFJQWdnQ2lBR0lBZDBJQXQyUVFKMGFpSUNMd0VBT3dBQUlBVWdCeUFDTFFBQ2FqWUNHQ0FJSUFJdEFBTnFJUWdNQVFzTEEwQWdBeUFJU1VVRVFDQUlJQW9nQmlBSGRDQUxka0VDZEdvaUFpOEJBRHNBQUNBSUlBSXRBQU5xSVFnZ0J5QUNMUUFDYWlFSERBRUxDd0pBSUFnZ0dVOE5BQ0FJSUFvZ0JpQUhkQ0FMZGlJQ1FRSjBhaUlETFFBQU9nQUFJQU10QUFOQkFVWUVRQ0FISUFNdEFBSnFJUWNNQVFzZ0IwRWZTdzBBUVNBZ0J5QUtJQUpCQW5ScUxRQUNhaUlDSUFKQklFOGJJUWNMQTBBZ0JSQVBSU0FFSUNCSmNRUkFJQVFnQ2lBRktBSUFJZ1lnQlNnQ0JDSUNkQ0FMZGtFQ2RHb2lEQzhCQURzQUFDQUVJQXd0QUFOcUlnTWdDaUFHSUFJZ0RDMEFBbW9pQW5RZ0MzWkJBblJxSWdRdkFRQTdBQUFnQlNBQ0lBUXRBQUpxTmdJRUlBTWdCQzBBQTJvaEJBd0JCU0FmUVFKcklRTURRQ0FGRUE4aEFpQUZLQUlBSVFZZ0JTZ0NCQ0VJSUFNZ0JFa2dBbkpGQkVBZ0JDQUtJQVlnQ0hRZ0MzWkJBblJxSWdJdkFRQTdBQUFnQlNBSUlBSXRBQUpxTmdJRUlBUWdBaTBBQTJvaEJBd0JDd3NEUUNBRElBUkpSUVJBSUFRZ0NpQUdJQWgwSUF0MlFRSjBhaUlDTHdFQU93QUFJQVFnQWkwQUEyb2hCQ0FJSUFJdEFBSnFJUWdNQVFzTEFrQWdCQ0FmVHcwQUlBUWdDaUFHSUFoMElBdDJJZ0pCQW5ScUlnTXRBQUE2QUFBZ0F5MEFBMEVCUmdSQUlBZ2dBeTBBQW1vaENBd0JDeUFJUVI5TERRQkJJQ0FJSUFvZ0FrRUNkR290QUFKcUlnSWdBa0VnVHhzaENBdEJiRUZzUVd4QmJFRnNRV3hCYkVGc0lBRWdDRUVnUnhzZ0JTZ0NDQ0FGS0FJTVJ4c2dCMEVnUnhzZ0JTZ0NIQ0FGS0FJZ1J4c2dBRUVnUnhzZ0JTZ0NNQ0FGS0FJMFJ4c2dDVUVnUnhzZ0JTZ0NSQ0FGS0FKSVJ4c2hDUXdKQ3dBTEFBc0FDd0FMQUFzQUN3QUxBQXRCYkNFSkN5QUZRZEFBYWlRQUlBa0w3QkFCSG44akFFSFFBR3NpQlNRQVFXd2hDUUpBSUFOQkNra05BQUpBSUFNZ0FpOEFCQ0lHSUFJdkFBQWlCeUFDTHdBQ0lnaHFha0VHYWlJT1NRMEFJQVF2QVFJaER5QUZRVHhxSUFKQkJtb2lBaUFIRUEwaUNVR0lmMHNOQVNBRlFTaHFJQUlnQjJvaUFpQUlFQTBpQ1VHSWYwc05BU0FGUVJScUlBSWdDR29pQWlBR0VBMGlDVUdJZjBzTkFTQUZJQUlnQm1vZ0F5QU9heEFOSWdsQmlIOUxEUUVnQkVFRWFpRUtJQUFnQVdvaUhFRURheUVkUVFBZ0QydEJIM0VoQ3lBRktBSUlJUkVnQlNnQ0hDRVNJQVVvQWpBaEV5QUZLQUpFSVJRZ0JTZ0NCQ0VKSUFVb0FoZ2hCaUFGS0FJc0lRY2dCU2dDUUNFSUlBVW9BaEFoSGlBRktBSWtJUjhnQlNnQ09DRWdJQVVvQWt3aElTQUZLQUlBSVJVZ0JTZ0NGQ0VXSUFVb0FpZ2hGeUFGS0FJOElSaEJBU0VOSUFBZ0FVRURha0VDZGlJQ2FpSU9JQUpxSWc4Z0Ftb2lHU0VFSUE4aEFpQU9JUU1EUUNBTlJTQUVJQjFQY2tVRVFDQUtJQmdnQ0hRZ0MzWkJBWFJxSWd3dEFBRWhEU0FBSUF3dEFBQTZBQUFnQ2lBWElBZDBJQXQyUVFGMGFpSU1MUUFCSVJBZ0F5QU1MUUFBT2dBQUlBb2dGaUFHZENBTGRrRUJkR29pREMwQUFTRWFJQUlnREMwQUFEb0FBQ0FLSUJVZ0NYUWdDM1pCQVhScUlnd3RBQUVoR3lBRUlBd3RBQUE2QUFBZ0NpQVlJQWdnRFdvaUNIUWdDM1pCQVhScUlnd3RBQUVoRFNBQUlBd3RBQUE2QUFFZ0NpQVhJQWNnRUdvaUIzUWdDM1pCQVhScUlnd3RBQUVoRUNBRElBd3RBQUE2QUFFZ0NpQVdJQVlnR21vaURIUWdDM1pCQVhScUlnWXRBQUVoR2lBQ0lBWXRBQUE2QUFFZ0NpQVZJQWtnRzJvaUczUWdDM1pCQVhScUlna3RBQUVoSWlBRUlBa3RBQUE2QUFFZ0NDQU5haUVHUVFNaENRSi9JQlFnSVVrRVFFRURJUTBnQmd3QkN5QVVJQVpCQTNackloUW9BQUFoR0VFQUlRMGdCa0VIY1FzaENDQUhJQkJxSVFZZ0V5QWdTUVIvSUFZRklCTWdCa0VEZG1zaUV5Z0FBQ0VYUVFBaENTQUdRUWR4Q3lFSElBd2dHbW9oRENBSklBMXlJUkJCQXlFTkFuOGdFaUFmU1FSQUlBd2hCa0VEREFFTElBeEJCM0VoQmlBU0lBeEJBM1pySWhJb0FBQWhGa0VBQ3lBYklDSnFJUXdnRUhJaEVDQVJJQjVKQkg4Z0RBVWdFU0FNUVFOMmF5SVJLQUFBSVJWQkFDRU5JQXhCQjNFTElRa2dCRUVDYWlFRUlBSkJBbW9oQWlBRFFRSnFJUU1nQUVFQ2FpRUFJQTBnRUhKRklRME1BUXNMSUFVZ0J6WUNMQ0FGSUFnMkFrQWdCU0FHTmdJWUlBVWdDVFlDQkNBRklCUTJBa1FnQlNBVE5nSXdJQVVnRWpZQ0hDQUZJQkUyQWdnZ0JTQVlOZ0k4SUFVZ0Z6WUNLQ0FGSUJZMkFoUWdCU0FWTmdJQUlBQWdEa3NnQXlBUFMzSU5BRUZzSVFrZ0FpQVpTdzBCSUE1QkEyc2hDUU5BSUFWQlBHb1FEeUFBSUFsUGNrVUVRQ0FLSUFVb0Fqd2lCaUFGS0FKQUlnZDBJQXQyUVFGMGFpSUlMUUFCSVF3Z0FDQUlMUUFBT2dBQUlBb2dCaUFISUF4cUlnWjBJQXQyUVFGMGFpSUhMUUFBSVFnZ0JTQUdJQWN0QUFGcU5nSkFJQUFnQ0RvQUFTQUFRUUpxSVFBTUFRc0xBMEFnQlVFOGFoQVBJUWNnQlNnQ1BDRUdJQVVvQWtBaENTQUFJQTVQSUFkeVJRUkFJQW9nQmlBSmRDQUxka0VCZEdvaUJpMEFBQ0VISUFVZ0NTQUdMUUFCYWpZQ1FDQUFJQWM2QUFBZ0FFRUJhaUVBREFFTEN3TkFJQUFnRGs5RkJFQWdDaUFHSUFsMElBdDJRUUYwYWlJSExRQUJJQUFnQnkwQUFEb0FBQ0FBUVFGcUlRQWdDV29oQ1F3QkN3c2dEMEVEYXlFQUEwQWdCVUVvYWhBUElBQWdBMDF5UlFSQUlBb2dCU2dDS0NJR0lBVW9BaXdpQjNRZ0MzWkJBWFJxSWdndEFBRWhEaUFESUFndEFBQTZBQUFnQ2lBR0lBY2dEbW9pQm5RZ0MzWkJBWFJxSWdjdEFBQWhDQ0FGSUFZZ0J5MEFBV28yQWl3Z0F5QUlPZ0FCSUFOQkFtb2hBd3dCQ3dzRFFDQUZRU2hxRUE4aEJ5QUZLQUlvSVFZZ0JTZ0NMQ0VBSUFNZ0QwOGdCM0pGQkVBZ0NpQUdJQUIwSUF0MlFRRjBhaUlHTFFBQUlRY2dCU0FBSUFZdEFBRnFOZ0lzSUFNZ0J6b0FBQ0FEUVFGcUlRTU1BUXNMQTBBZ0F5QVBUMFVFUUNBS0lBWWdBSFFnQzNaQkFYUnFJZ2N0QUFFaENDQURJQWN0QUFBNkFBQWdBMEVCYWlFRElBQWdDR29oQUF3QkN3c2dHVUVEYXlFREEwQWdCVUVVYWhBUElBSWdBMDl5UlFSQUlBb2dCU2dDRkNJR0lBVW9BaGdpQjNRZ0MzWkJBWFJxSWdndEFBRWhEaUFDSUFndEFBQTZBQUFnQ2lBR0lBY2dEbW9pQm5RZ0MzWkJBWFJxSWdjdEFBQWhDQ0FGSUFZZ0J5MEFBV28yQWhnZ0FpQUlPZ0FCSUFKQkFtb2hBZ3dCQ3dzRFFDQUZRUlJxRUE4aEJ5QUZLQUlVSVFZZ0JTZ0NHQ0VESUFJZ0dVOGdCM0pGQkVBZ0NpQUdJQU4wSUF0MlFRRjBhaUlHTFFBQUlRY2dCU0FESUFZdEFBRnFOZ0lZSUFJZ0J6b0FBQ0FDUVFGcUlRSU1BUXNMQTBBZ0FpQVpUMFVFUUNBS0lBWWdBM1FnQzNaQkFYUnFJZ2N0QUFFaENDQUNJQWN0QUFBNkFBQWdBa0VCYWlFQ0lBTWdDR29oQXd3QkN3c0RRQ0FGRUE4Z0JDQWRUM0pGQkVBZ0NpQUZLQUlBSWdJZ0JTZ0NCQ0lHZENBTGRrRUJkR29pQnkwQUFTRUlJQVFnQnkwQUFEb0FBQ0FLSUFJZ0JpQUlhaUlDZENBTGRrRUJkR29pQmkwQUFDRUhJQVVnQWlBR0xRQUJhallDQkNBRUlBYzZBQUVnQkVFQ2FpRUVEQUVMQ3dOQUlBVVFEeUVISUFVb0FnQWhCaUFGS0FJRUlRSWdCQ0FjVHlBSGNrVUVRQ0FLSUFZZ0FuUWdDM1pCQVhScUlnWXRBQUFoQnlBRklBSWdCaTBBQVdvMkFnUWdCQ0FIT2dBQUlBUkJBV29oQkF3QkN3c0RRQ0FFSUJ4UFJRUkFJQW9nQmlBQ2RDQUxka0VCZEdvaUJ5MEFBU0VJSUFRZ0J5MEFBRG9BQUNBRVFRRnFJUVFnQWlBSWFpRUNEQUVMQzBGc1FXeEJiRUZzUVd4QmJFRnNRV3dnQVNBQ1FTQkhHeUFGS0FJSUlBVW9BZ3hIR3lBRFFTQkhHeUFGS0FJY0lBVW9BaUJIR3lBQVFTQkhHeUFGS0FJd0lBVW9BalJIR3lBSlFTQkhHeUFGS0FKRUlBVW9Ba2hIR3lFSkRBRUxRV3doQ1FzZ0JVSFFBR29rQUNBSkMxZ0JBMzhDUUNBQUtBS1E2d0VpQVVVTkFDQUJLQUlBSUFGQnROVUJhaWdDQUNJQ0lBRkJ1TlVCYWlnQ0FDSURFQk1nQWdSQUlBTWdBU0FDRVFJQURBRUxJQUVRQmdzZ0FFRUFOZ0tnNndFZ0FFSUFOd09RNndFTDZRTUNCSDhDZmlBQVFRQkJLQkFESVFRZ0FrRUJRUVVnQXhzaUFFa0VRQ0FBRHdzZ0FVVUVRRUYvRHd0QkFTRUdBa0FDUUNBRFFRRkdEUUFnQXlFR0lBRW9BQUFpQlVHbzZyNXBSZzBBUVhZaEF5QUZRWEJ4UWREVXRNSUJSdzBCUVFnaEF5QUNRUWhKRFFFZ0FUVUFCQ0VJSUFSQkFUWUNGQ0FFSUFnM0F3QkJBQThMSUFFZ0FpQUdFQm9pQXlBQ1N3MEFJQVFnQXpZQ0dFRnlJUU1nQUNBQmFpSUZRUUZyTFFBQUlnSkJDSEVOQUNBQ1FTQnhJZ1pGQkVCQmNDRURJQVV0QUFBaUJVR25BVXNOQVNBRlFRZHhyVUlCSUFWQkEzWkJDbXF0aGlJSVFnT0lmaUFJZkNFSklBQkJBV29oQUFzZ0FrRUdkaUVGSUFKQkFuWkJBQ0VEQWtBQ1FBSkFBa0FnQWtFRGNVRUJhdzREQUFFQ0F3c2dBQ0FCYWkwQUFDRURJQUJCQVdvaEFBd0NDeUFBSUFGcUx3QUFJUU1nQUVFQ2FpRUFEQUVMSUFBZ0FXb29BQUFoQXlBQVFRUnFJUUFMUVFGeElRSUNmZ0pBQWtBQ1FBSkFJQVZCQVdzT0F3RUNBd0FMUW44Z0JrVU5BeG9nQUNBQmFqRUFBQXdEQ3lBQUlBRnFNd0FBUW9BQ2ZBd0NDeUFBSUFGcU5RQUFEQUVMSUFBZ0FXb3BBQUFMSVFnZ0JDQUNOZ0lnSUFRZ0F6WUNIQ0FFSUFnM0F3QkJBQ0VESUFSQkFEWUNGQ0FFSUFnZ0NTQUdHeUlJTndNSUlBUkNnSUFJSUFnZ0NFS0FnQWhhR3o0Q0VBc2dBd3RmQVFGL1FiaC9JUU1nQVVFQlFRVWdBaHNpQWs4RWZ5QUFJQUpxUVFGckxRQUFJZ0JCQTNGQkFuUkJvQjVxS0FJQUlBSnFJQUJCQkhaQkRIRkJzQjVxS0FJQWFpQUFRU0J4SWdGRmFpQUJRUVYySUFCQndBQkpjV29GUWJoL0N3c01BQ0FBSUFFZ0FrRUFFQmtMbHdNQ0JYOENmaU1BUVVCcUlnUWtBQUpBQTBBZ0FVRUZUd1JBQWtBZ0FDZ0FBRUZ3Y1VIUTFMVENBVVlFUUVKK0lRY2dBVUVJU1EwRUlBQW9BQVFpQWtGM1N3MEVJQUpCQ0dvaUF5QUJTdzBFSUFKQmdYOUpEUUVNQkFzZ0JFRVlhaUFBSUFFUUd5RUNRbjRnQkNrREdFSUFJQVFvQWl4QkFVY2JJQUliSWdkQ2ZWWU5BeUFISUFoOElnZ2dCMVJDZmlFSERRTUNRQUpBSUFGQkNFa05BQ0FBS0FBQVFYQnhRZERVdE1JQlJ3MEFJQUFvQUFRaUFrRjNTdzBGUWJoL0lBSkJDR29pQWlBQklBSkpHeUVEREFFTElBUkJHR29nQUNBQkVCc2lBa0dJZjBzRVFDQUNJUU1NQVF0QnVIOGhBeUFDRFFBZ0FTQUVLQUl3SWdKcklRVWdBQ0FDYWlFR0EwQWdCaUFGSUFSQkRHb1FIU0lEUVloL1N3MEJJQU5CQTJvaUFpQUZTd1JBUWJoL0lRTU1BZ3NnQlNBQ2F5RUZJQUlnQm1vaEJpQUVLQUlRUlEwQUN5QUVLQUk0Qkg5QnVIOGhBeUFGUVFSSkRRRWdCa0VFYWdVZ0Jnc2dBR3NoQXdzZ0EwR0lmMHNOQXdzZ0FTQURheUVCSUFBZ0Eyb2hBQXdCQ3d0Q2ZpQUlJQUViSVFjTElBUkJRR3NrQUNBSEMyUUJBWDlCdUg4aEF3SkFJQUZCQTBrTkFDQUFMUUFDSVFFZ0FpQUFMd0FBSWdCQkFYRTJBZ1FnQWlBQVFRRjJRUU54SWdNMkFnQWdBaUFBSUFGQkVIUnlRUU4ySWdBMkFnZ0NRQUpBSUFOQkFXc09Bd0lCQUFFTFFXd1BDeUFBSVFNTElBTUxSQUVDZnlBQklBSW9BZ1FpQXlBQktBSUVhaUlFTmdJRUlBQWdBMEVDZEVHZ0hXb29BZ0FnQVNnQ0FFRUFJQVJyZG5FMkFnQWdBUkFQR2lBQUlBSkJDR28yQWdRTHpnRUJCbjlCdW44aENnSkFJQUlvQWdRaUNDQUNLQUlBSWdscUlnMGdBU0FBYTBzTkFFRnNJUW9nQ1NBRUlBTW9BZ0FpQzJ0TERRQWdBQ0FKYWlJRUlBSW9BZ2dpREdzaEFpQUFJQUZCSUdzaUFDQUxJQWxCQUJBZ0lBTWdDU0FMYWpZQ0FBSkFBa0FnQkNBRmF5QU1Ud1JBSUFJaEJRd0JDeUFNSUFRZ0JtdExEUUlnQnlBSElBSWdCV3NpQW1vaUFTQUlhazhFUUNBRUlBRWdDQkFLR2d3Q0N5QUNJQWhxSVFnZ0JDQUJRUUFnQW1zUUNpQUNheUVFQ3lBRUlBQWdCU0FJUVFFUUlBc2dEU0VLQ3lBS0M4Y0VBUUovSUFBZ0Eyb2hCZ0pBSUFOQkIwd0VRQU5BSUFBZ0JrOE5BaUFBSUFJdEFBQTZBQUFnQUVFQmFpRUFJQUpCQVdvaEFnd0FDd0FMSUFSQkFVWUVRQUpBSUFBZ0Ftc2lCVUVIVFFSQUlBQWdBaTBBQURvQUFDQUFJQUl0QUFFNkFBRWdBQ0FDTFFBQ09nQUNJQUFnQWkwQUF6b0FBeUFBSUFJZ0JVRUNkQ0lGUWNBZWFpZ0NBR29pQWlnQUFEWUFCQ0FDSUFWQjRCNXFLQUlBYXlFQ0RBRUxJQUFnQWlrQUFEY0FBQXNnQWtFSWFpRUNJQUJCQ0dvaEFBc2dBU0FHVHdSQUlBQWdBMm9oQVNBRVFRRkhJQUFnQW10QkQwcHlSUVJBQTBBZ0FDQUNLUUFBTndBQUlBSkJDR29oQWlBQVFRaHFJZ0FnQVVrTkFBd0RDd0FMSUFBZ0Fpa0FBRGNBQUNBQUlBSXBBQWczQUFnZ0EwRVJTUTBCSUFCQkVHb2hBQU5BSUFBZ0Fpa0FFRGNBQUNBQUlBSXBBQmczQUFnZ0FDQUNLUUFnTndBUUlBQWdBaWtBS0RjQUdDQUNRU0JxSVFJZ0FFRWdhaUlBSUFGSkRRQUxEQUVMQWtBZ0FDQUJTd1JBSUFBaEFRd0JDeUFCSUFCcklRVUNRQ0FFUVFGSElBQWdBbXRCRDBweVJRUkFJQUloQXdOQUlBQWdBeWtBQURjQUFDQURRUWhxSVFNZ0FFRUlhaUlBSUFGSkRRQUxEQUVMSUFBZ0Fpa0FBRGNBQUNBQUlBSXBBQWczQUFnZ0JVRVJTQTBBSUFCQkVHb2hBQ0FDSVFNRFFDQUFJQU1wQUJBM0FBQWdBQ0FES1FBWU53QUlJQUFnQXlrQUlEY0FFQ0FBSUFNcEFDZzNBQmdnQTBFZ2FpRURJQUJCSUdvaUFDQUJTUTBBQ3dzZ0FpQUZhaUVDQ3dOQUlBRWdCazhOQVNBQklBSXRBQUE2QUFBZ0FVRUJhaUVCSUFKQkFXb2hBZ3dBQ3dBTEM2NEhBZ1YvQVg0akFFR0FBV3NpRVNRQUlCRWdBellDZkVGL0lROENRQUpBQWtBQ1FBSkFJQUlPQkFFQUF3SUVDeUFHUlFSQVFiaC9JUThNQkF0QmJDRVBJQVV0QUFBaUFpQURTdzBESUFnZ0FrRUNkQ0lDYWlnQ0FDRURJQUlnQjJvb0FnQWhBaUFBUVFBNkFBc2dBRUlBTndJQUlBQWdBallDRENBQUlBTTZBQW9nQUVFQU93RUlJQUVnQURZQ0FFRUJJUThNQXdzZ0FTQUpOZ0lBUVFBaER3d0NDeUFLUlFSQVFXd2hEd3dDQzBFQUlROGdDMFVnREVFWlNISU5BVUVJSUFSMFFRaHFJUUJCQUNFREEwQWdBQ0FEVFEwQ0lBTkJRR3NoQXd3QUN3QUxRV3doRHlBUklCRkIvQUJxSUJGQitBQnFJQVVnQmhBTUlnTkJpSDlMRFFBZ0VTZ0NlQ0lDSUFSTERRQWdFU2dDZkVFQmFpRUpJQUJCQ0dvaEMwR0FnQUlnQW5SQkVIVWhCVUVCSVJCQkFTQUNkQ0lQUVFGcklnb2hFZ05BSUFrZ0RrY0VRQUpBSUJFZ0RrRUJkQ0lFYWk4QkFDSU1RZi8vQTBZRVFDQUxJQkpCQTNScUlBNDJBZ1FnRWtFQmF5RVNRUUVoREF3QkN5QVFRUUFnQlNBTXdVb2JJUkFMSUFRZ0RXb2dERHNCQUNBT1FRRnFJUTRNQVFzTElBQWdBallDQkNBQUlCQTJBZ0FDUUNBS0lCSkdCRUFnRFVIcUFHb2hCa0VBSVJCQkFDRU1BMEFnQ1NBUVJnUkFJQTlCQTNZZ0QwRUJkbXBCQTJvaUJVRUJkQ0VFUVFBaERFRUFJUklEUUVFQUlRNGdEeUFTVFEwRUEwQWdEa0VDUndSQUlBc2dCU0FPYkNBTWFpQUtjVUVEZEdvZ0JpQU9JQkpxYWkwQUFEWUNCQ0FPUVFGcUlRNE1BUXNMSUJKQkFtb2hFaUFFSUF4cUlBcHhJUXdNQUFzQUJTQVJJQkJCQVhScUxnRUFJUVVnQmlBTWFpSUVJQk0zQUFCQkNDRU9BMEFnQlNBT1NnUkFJQVFnRG1vZ0V6Y0FBQ0FPUVFocUlRNE1BUXNMSUJOQ2dZS0VpSkNnd0lBQmZDRVRJQkJCQVdvaEVDQUZJQXhxSVF3TUFRc0FDd0FMSUE5QkEzWWdEMEVCZG1wQkEyb2hCVUVBSVJCQkFDRU9BMEFnQ1NBUVJnMEJRUUFoRENBUklCQkJBWFJxTGdFQUlnUkJBQ0FFUVFCS0d5RUVBMEFnQkNBTVJ3UkFJQXNnRGtFRGRHb2dFRFlDQkFOQUlBVWdEbW9nQ25FaURpQVNTdzBBQ3lBTVFRRnFJUXdNQVFzTElCQkJBV29oRUF3QUN3QUxJQUpCQVdvaEJVRUFJUXdEUUNBTUlBOUhCRUFnRFNBTElBeEJBM1JxSWdrb0FnUWlCRUVCZEdvaUFpQUNMd0VBSWdaQkFXbzdBUUFnQ1NBRklBWm5RV0J6YWlJQ09nQURJQWtnQmlBQ2RDQVBhenNCQUNBSklBZ2dCRUVDZENJQ2FpZ0NBRG9BQWlBSklBSWdCMm9vQWdBMkFnUWdERUVCYWlFTURBRUxDeUFCSUFBMkFnQWdBeUVQQ3lBUlFZQUJhaVFBSUE4TDdWb0NPMzhHZmlNQVFlQUJheUlFSkFBQ1FFR3c3QWtRQlNJRlJRUkFRVUFoQnd3QkN5QUZRZ0EzQXZUcUFTQUZRUUEyQXNUckFTQUZRUUEyQXJUckFTQUZRZ0EzQXB6ckFTQUZRUUEyQXJqcEFTQUZRUUEyQXF6c0NTQUZRZ0EzQXRUckFTQUZRZ0EzQXF6ckFTQUZRZ0EzQTRqckFTQUZRZ0EzQXVUcUFTQUZRZ0EzQXVUckFTQUZRWUdBZ01BQU5nSzg2d0VnQlVJQU53S2s2d0VnQlVIODZnRnFRUUEyQWdBZ0JVR1E2d0ZxUWdBM0F3QWdCUkFZSUFWQnJOVUJhaUVVSUFWQitPc0JhaUVjSUFWQnNPb0JhaUVpSUFWQm9EQnFJU29nQlVHWUlHb2hLeUFGUWFqUUFHb2hIaUFGUVJCcUlTd2dCVUVJYWlFb0lBVkJCR29oTFNBRlFjRHBBV29oS1NBRlFZanJBV29nQkVHVUFXb2hMeUFFUVl3QmFpRXdJQVJCaEFGcUlURWdCRUhjQUdvaE1pQUVRZFFBYWlFeklBUkJ6QUJxSVRRZ0FDRWRBa0FDUUFKQUFrQUNRQU5BUVFGQkJTQUZLQUxrNmdFYklRWUNRQU5BSUFNZ0Jra05BU0FDS0FBQVFYQnhRZERVdE1JQlJnUkFRYmgvSVFjZ0EwRUlTUTBJSUFJb0FBUWlEa0YzU3dSQVFYSWhCd3dKQ3lBRElBNUJDR29pQ1VrTkNDQU9RWUIvU3dSQUlBa2hCd3dKQ3lBRElBbHJJUU1nQWlBSmFpRUNEQUVMQ3lBRlFnQTNBcXpwQVNBRlFnQTNBK2pwQVNBRlFRQTJBcGpyQVNBRlFnQTNBNERxQVNBRlFnTTNBL2pwQVNBRlFiVHBBV3BDQURjQ0FDQUZRZkRwQVdwQ0FEY0RBQ0FGUWFqUUFHb2lDVUdNZ0lEZ0FEWUNBQ0FGUWF6UUFXcEI0QklwQWdBM0FnQWdCVUcwMEFGcVFlZ1NLQUlBTmdJQUlBVWdCVUVRYWpZQ0FDQUZJQVZCb0RCcU5nSUVJQVVnQlVHWUlHbzJBZ2dnQlNBSk5nSU1JQVZCQVVFRklBVW9BdVRxQVJzMkFyenBBUUpBSUFGRkRRQWdCU2dDck9rQklna2dIVVlOQUNBRklBazJBcmpwQVNBRklCMDJBcXpwQVNBRktBS3c2UUVoRGlBRklCMDJBckRwQVNBRklCMGdEaUFKYTJvMkFyVHBBUXRCdUg4aENTQURRUVZCQ1NBRktBTGs2Z0VpQmh0SkRRVWdBa0VCUVFVZ0Joc2dCaEFhSWc1QmlIOUxCRUFnRGlFSkRBVUxJQU1nRGtFRGFra05CU0FwSUFJZ0RpQUdFQmtpQmtHSWYwc0VRQ0FHSVFrTUJRc2dCZzBGQWtBQ1FDQUZLQUtvNndGQkFVY05BQ0FGS0FLazZ3RWlDVVVOQUNBRktBS1U2d0ZGRFFBZ0NTZ0NCRUVCYXlJSElBVW9BdHpwQVNJS3JVS0hsYSt2bUxiZW01NS9ma0xKejlteThlVzY2aWVGUWhlSlFzL1cwNzdTeDZ2WlFuNUMrZlBkOFpuMm1hc1dmQ0kvUWlHSUlEK0ZRcy9XMDc3U3g2dlpRbjRpUDBJZGlDQS9oVUw1ODkzeG1mYVpxeForSWo5Q0lJZ2dQNFduY1NFR0lBa29BZ0FoRlFOQVFRQWhDQUpBSUJVZ0JrRUNkR29vQWdBaUNVVU5BQ0FKS0FJSVFRaEpEUUFnQ1NnQ0JDSVNLQUFBUWJmSXd1RitSdzBBSUJJb0FBUWhDQXNnQ0NBS1J3UkFJQVlnQjNGQkFXb2hCaUFJRFFFTEN5QUpSUTBBSUFVUUdDQUZRWDgyQXFEckFTQUZJQWsyQXBUckFTQUZJQVVvQXR6cEFTSUlOZ0tZNndFTUFRc2dCU2dDM09rQklRZ0xBa0FnQ0VVTkFDQUZLQUtZNndFZ0NFWU5BRUZnSVFrTUJnc0NRQ0FGS0FMZzZRRUVRQ0FGSUFVb0F1anFBU0lKUlRZQzdPb0JJQWtOQVNBRlF2bnEwTkRueWFIazRRQTNBNmpxQVNBRlFnQTNBNkRxQVNBRlFzL1cwNzdTeDZ2WlFqY0RtT29CSUFWQzF1dUM3dXI5aWZYZ0FEY0RrT29CSUFWQ0FEY0RpT29CSUNKQkFFRW9FQU1hREFFTElBVkJBRFlDN09vQkN5QUJJQjFxSVNVZ0JTQUZLUVBvNlFFZ0RxMThOd1BvNlFFZ0F5QU9heUVESUFJZ0Rtb2hBaUFkSVE0RFFDQUNJQU1nQkVFc2FoQWRJaFZCaUg5TEJFQWdGU0VKREFZTElBTkJBMnNpTlNBVlNRMEVJQUpCQTJvaEcwRnNJUWtDUUFKQUFrQUNRQUpBQWtBQ1FBSkFBa0FDUUFKQUFrQUNRQUpBQWtBQ1FDQUVLQUlzRGdNQ0FRQVZDeUFWUWYvL0Iwc05FeUFWUVFOSkRSSWdCU2tEeU9rQklUOENRQUpBSUJzdEFBQWlDVUVEY1NJYVFRRnJEZ01HQVFBSEN5QUZLQUtBNmdFTkFFRmlJUWtNRlFzZ0ZVRUZTUTBTSUJzb0FBQWhBd0ovQWtBQ1FBSkFJQWxCQW5aQkEzRWlDVUVDYXc0Q0FRSUFDeUFKUVFCSElRY2dBMEVFZGtIL0IzRWhDMEVESVFZZ0EwRU9ka0gvQjNFTUFndEJCQ0VHSUFOQkJIWkIvLzhBY1NFTFFRRWhCeUFEUVJKMkRBRUxJQU5CQkhaQi8vOFBjU0lMUVlDQUNFc05FMEVCSVFkQkJTRUdJQUl0QUFkQkNuUWdBMEVXZG5JTElnZ2dCbW9pQ1NBVlN3MFNBa0FnQzBHQkJra05BQ0FGS0FLYzZ3RkZEUUJCQUNFREEwQWdBMEdEZ0FGTERRRWdBMEZBYXlFRERBQUxBQXNnQmlBYmFpRVBJQnBCQTBjTkJpQUZLQUlNSWdJdEFBRkJDSFFoQXlBSERRY2dBMFVOQ0NBRVFmQUFhaUFQSUFnUURTSURRWWgvU3cwSklBSkJCR29oQmlBTElCeHFJaEpCQTJzaENrRUFJQUl2QVFKclFSOXhJUWNnSENFREEwQWdCRUh3QUdvUUQwVWdBeUFLU1hFRVFDQURJQVlnQkNnQ2NDSUlJQVFvQW5RaUQzUWdCM1pCQW5ScUlnSXZBUUE3QUFBZ0F5QUNMUUFEYWlJRElBWWdDQ0FQSUFJdEFBSnFJZ2gwSUFkMlFRSjBhaUlDTHdFQU93QUFJQVFnQ0NBQ0xRQUNhallDZENBRElBSXRBQU5xSVFNTUFRVWdFa0VDYXlFSUEwQWdCRUh3QUdvUUR5RVBJQVFvQW5BaENpQUVLQUowSVFJZ0F5QUlTeUFQY2tVRVFDQURJQVlnQ2lBQ2RDQUhka0VDZEdvaUNpOEJBRHNBQUNBRUlBSWdDaTBBQW1vMkFuUWdBeUFLTFFBRGFpRUREQUVMQ3dOQUlBTWdDRTBFUUNBRElBWWdDaUFDZENBSGRrRUNkR29pRHk4QkFEc0FBQ0FESUE4dEFBTnFJUU1nQWlBUExRQUNhaUVDREFFTEN3SkFJQU1nRWs4TkFDQURJQVlnQ2lBQ2RDQUhka0VDZEdvaUF5MEFBRG9BQUNBRExRQURRUUZHQkVBZ0FpQURMUUFDYWlFQ0RBRUxJQUpCSDBzTkFFRWdJQUlnQXkwQUFtb2lBaUFDUVNCUEd5RUNDMEZzUVd3Z0N5QUVLQUo0SUFRb0FueEhHeUFDUVNCSEd5RUREQXNMQUFzQUN5QUVLQUkwSWdJZ0pTQU9hMHNOQ2lBT1JRUkFRUUFoQ1NBQ0RRSU1EZ3NnRGlBYkxRQUFJQUlRQXhvZ0FpRUpEQXdMSUJVZ0pTQU9hMHNOQ1NBT0RRRkJBQ0VKSUJWRkRRd0xRYlovSVFrTUVRc2dEaUFiSUJVUUFob2dGU0VKREFvTElCd2dHd0ovQWtBQ1FBSkFJQWxCQW5aQkEzRkJBV3NPQXdFQUFnQUxJQWxCQTNZaEEwRUJEQUlMSUJzdkFBQkJCSFloQTBFQ0RBRUxJQlZCQkVrTkRpQUNMd0FESUFJdEFBVkJFSFJ5SWdKQmo0Q0FBVXNORGlBQ1FRUjJJUU5CQXdzaUFtb3RBQUFnQTBFZ2FoQURJUWtnQlNBRE5nS0E2d0VnQlNBSk5nTHc2Z0VnQWtFQmFpRUpEQVVMSUJVQ2Z3SkFBa0FDUUNBSlFRSjJRUU54UVFGckRnTUJBQUlBQ3lBSlFRTjJJUU5CQVF3Q0N5QWJMd0FBUVFSMklRTkJBZ3dCQ3lBQ0x3QURJQUl0QUFWQkVIUnlRUVIySVFOQkF3c2lBaUFEYWlJSlFTQnFTUVJBSUFrZ0ZVc05EU0FjSUFJZ0cyb2dBeEFDSVFJZ0JTQUROZ0tBNndFZ0JTQUNOZ0x3NmdFZ0FpQURhaUlDUWdBM0FCZ2dBa0lBTndBUUlBSkNBRGNBQ0NBQ1FnQTNBQUFNQlFzZ0JTQUROZ0tBNndFZ0JTQUNJQnRxTmdMdzZnRU1CQXNnQjBVRVFDQWVJQThnQ0NBVUVCUWlBa0dJZjBzZ0FpQUlUM0lORENBY0lBc2dBaUFQYWlBSUlBSnJJQjRRRlNFRERBTUxJQXRGSUFoRmNnMExJQXRCQ0hZaUF5QUlJQXRKQkg4Z0NFRUVkQ0FMYmdWQkR3dEJHR3dpQWtHTUNHb29BZ0JzSUFKQmlBaHFLQUlBYWlJR1FRTjJJQVpxSUFKQmdBaHFLQUlBSUFKQmhBaHFLQUlBSUFOc2Fra0VRQ01BUVJCckloQWtBQ0FlS0FJQUlRTWdGRUh3QkdwQkFFSHNBQkFESVFaQlZDRUNBa0FnQTBIL0FYRWlERUVNU3cwQUFrQWdGRUhjQ1dvZ0JpQVFRUWhxSUJCQkRHb2dEeUFJSUJSQjNBdHFJaGNRQ3lJU1FZaC9TdzBBSUJBb0Fnd2lCaUFNU3cwQklCUkJxQVZxSVEwZ0ZFR2tCV29oTmlBZVFRUnFJUkVnQTBHQWdJQjRjU0UzSUFaQkFXb2lFeUVDSUFZaEF3TkFJQUlpQjBFQmF5RUNJQU1pQ2tFQmF5RURJQlFnQ2tFQ2RHb29BdkFFUlEwQUMwRUJJQWNnQjBFQlRSc2hGa0VBSVFkQkFTRUNBMEFnQWlBV1J3UkFJQlFnQWtFQ2RDSURhaWdDOEFRaEdDQURJQTFxSUFjMkFnQWdBa0VCYWlFQ0lBY2dHR29oQnd3QkN3c2dEU0FITmdJQVFRQWhBaUFRS0FJSUlRTURRQ0FDSUFOSEJFQWdEU0FDSUJScVFkd0phaTBBQUNJWVFRSjBhaUlaSUJrb0FnQWlHVUVCYWpZQ0FDQVVJQmxCQVhScUloa2dHRG9BM1FVZ0dTQUNPZ0RjQlNBQ1FRRnFJUUlNQVFzTFFRQWhBeUFOUVFBMkFnQWdEQ0FHUVg5emFpRUdRUUVoQWdOQUlBSWdGa2NFUUNBVUlBSkJBblJxSWcwZ0F6WUNBQ0FOS0FMd0JDQUNJQVpxZENBRGFpRURJQUpCQVdvaEFnd0JDd3NnRENBVElBcHJJZ1pyUVFGcUlRb2dCaUVEQTBBZ0F5QUtTUVJBSUJRZ0EwRTBiR29oRFVFQklRSURRQ0FDSUJaSEJFQWdEU0FDUVFKMEloaHFJQlFnR0dvb0FnQWdBM1kyQWdBZ0FrRUJhaUVDREFFTEN5QURRUUZxSVFNTUFRc0xJQmNnRkVFMEVBSWhPQ0FVUVpBTWFpRTVJQk1nREdzaE9pQVVRZHdGYWlFWFFRQWhDZ05BQWtBQ1FDQUhJQXBIQkVCQkFTQU1JQk1nRnlBS1FRRjBhaUlDTFFBQklnMXJJZ05ySWhoMElSa2dBaTBBQUNFV0lEZ2dEVUVDZEdvaUh5Z0NBQ0VDSUFZZ0dFMEVRQ0EyUVFFZ0F5QTZhaUlOSUExQkFVd2JJaUJCQW5RaUpHb29BZ0FoRFNBNUlCUWdBMEUwYkdwQk5CQUNJU0VnRFVFQmRDRW1JQkVnQWtFQ2RHb2hJeUFnUVFGTkRRSWdBMEVRZEVHQWdQd0hjU0FXY2tHQWdJQUljaUVnSUNFZ0pHb29BZ0FoSkVFQUlRSURRQ0FDSUNSR0RRTWdJeUFDUVFKMGFpQWdOZ0VBSUFKQkFXb2hBZ3dBQ3dBTElBSWdBaUFaYWlJTklBSWdEVXNiSVEwZ0EwRVFkRUdBZ1B3SGNTQVdja0dBZ0lBSWNpRURBMEFnQWlBTlJnMERJQkVnQWtFQ2RHb2dBellCQUNBQ1FRRnFJUUlNQUFzQUN5QWVJQXhCRUhRZ04zSWdESEpCZ0FKeU5nSUFEQU1MSUFjZ0RXc2hKQ0FYSUNacUlTWkJBQ0VOQTBBZ0RTQWtSZzBCUVFFZ0dDQVRJQ1lnRFVFQmRHb2lKeTBBQVNJQ2F5STdhM1FpUENBaElBSkJBblJxSWlBb0FnQWlBbW9oUFNBRElEdHFRUkIwUVlDQS9BZHhJQ2N0QUFCQkNIUnlJQlp5UVlDQWdCQnlJU2NEUUNBaklBSkJBblJxSUNjMkFRQWdBa0VCYWlJQ0lEMUpEUUFMSUNBZ0lDZ0NBQ0E4YWpZQ0FDQU5RUUZxSVEwTUFBc0FDeUFmSUI4b0FnQWdHV28yQWdBZ0NrRUJhaUVLREFBTEFBc2dFaUVDQ3lBUVFSQnFKQUFnQWtHSWYwc2dBaUFJVDNJTkRDQWNJQXNnQWlBUGFpQUlJQUpySUI0UUZpRUREQU1MSUI0Z0R5QUlJQlFRRkNJQ1FZaC9TeUFDSUFoUGNnMExJQndnQ3lBQ0lBOXFJQWdnQW1zZ0hoQVhJUU1NQWdzZ0F3UkFJQndnQ3lBUElBZ2dBaEFXSVFNTUFnc2dIQ0FMSUE4Z0NDQUNFQmNoQXd3QkN5QWNJQXNnRHlBSUlBSVFGU0VEQ3lBRFFZaC9TdzBJSUFVZ0N6WUNnT3NCSUFVZ0hEWUM4T29CSUFWQkFUWUNnT29CSUJwQkFrWUVRQ0FGSUI0MkFnd0xJQXNnSEdvaUFrSUFOd0FBSUFKQ0FEY0FHQ0FDUWdBM0FCQWdBa0lBTndBSUlBbEJpSDlMRFFvTElBa2dGVVlOQ0NBVklBbHJJUVlnQlNnQ25Pc0JJUW9DUUNBSklCdHFJZ010QUFBaUQwVUVRRUVCSVFKQkFDRVBRYmgvSVFrZ0JrRUJSZzBCREFzTEFuOGdBMEVCYWlBUHdDSUNRUUJPRFFBYUlBSkJmMFlFUUNBR1FRTklEUXNnQXk4QUFVR0EvZ0ZxSVE4Z0EwRURhZ3dCQ3lBR1FRSklEUW9nQXkwQUFTQVBRUWgwY2tHQWdBSnJJUThnQTBFQ2Fnc2hFa0c0ZnlFSklCSkJBV29pQWlBVklCdHFJZ2RMRFFvZ0xDQUZJQkl0QUFBaUVrRUdka0VqUVFrZ0FpQUhJQUpyUWNBUVFkQVJRZkFTSUFVb0FvVHFBU0FLSUE4Z0ZCQWhJZ2xCaUg5TERRZ2dLeUFvSUJKQkJIWkJBM0ZCSDBFSUlBSWdDV29pQWlBSElBSnJRWUFMUVlBTVFZQVhJQVVvQW9UcUFTQUZLQUtjNndFZ0R5QVVFQ0VpQ0VHSWYwc05DRUZzSVFrZ0tpQXRJQkpCQW5aQkEzRkJORUVKSUFJZ0NHb2lBaUFISUFKclFZQU5RZUFPUVpBWklBVW9Bb1RxQVNBRktBS2M2d0VnRHlBVUVDRWlCMEdJZjBzTkNpQUNJQWRxSUFOcklnSWhDU0FDUVloL1N3MEtDeUFPSUE5QkFFeHlEUUVMUWJwL0lRa01DQXNnSlNBT2F5RUpJQVlnQW1zaEJpQUNJQU5xSVFjQ1FBSkFBa0FnQ2tVRVFDQVBRUWxJSUFVcEE4anBBVUtCZ0lBSVZISU5BaUFvS0FJQUlnSkJDR29oRWlBQ0tBSUVJUXBCQUNFRFFRQWhBZ05BSUFNZ0NuWkZCRUFnQWlBU0lBTkJBM1JxTFFBQ1FSWkxhaUVDSUFOQkFXb2hBd3dCQ3dzZ0JVRUFOZ0tjNndFZ0FrRUlJQXByZEVFVVR3MEJEQU1MSUFWQkFEWUNuT3NCQ3lBRUlBVW9BdkRxQVNJRE5nTGNBU0FKSUE1cUlSWWdBeUFGS0FLQTZ3RnFJUmNDUUNBUFJRUkFJQTRoQnd3QkN5QUZLQUs0NlFFaEdpQUZLQUswNlFFaEdDQUZLQUt3NlFFaEVpQUZRUUUyQW9UcUFVRUFJUU1EUUNBRFFRTkhCRUFnQkNBRFFRSjBJZ0pxSUFJZ0JXcEJyTkFCYWlnQ0FEWUNaQ0FEUVFGcUlRTU1BUXNMUVd3aENTQUVRVGhxSWdJZ0J5QUdFQTFCaUg5TERRTkJDQ0FQSUE5QkNFNGJJUjhnTkNBQ0lBVW9BZ0FRSGlBeklBSWdCU2dDQ0JBZUlESWdBaUFGS0FJRUVCNGdEaUFTYXlFWlFRQWhDQU5BSUFSQk9Hb1FEMEVEUmlBSUlCOU9ja1VFUUNBRUtBSlFJQVFvQWt4QkEzUnFLUUlBSWtDbklnZEJFSFlpRVVIL0FYRWhDeUFFS0FKZ0lBUW9BbHhCQTNScUtRSUFJa0duSWd4QkVIWWlJVUgvQVhFaEVDQUVLQUpZSUFRb0FsUkJBM1JxS1FJQUlrSkNJSWluSVFZZ1FVSWdpQ0JBUWlDSXB5RURBa0FnUWtJUWlLY2lDa0gvQVhFaUFrRUNUd1JBQWtBZ0FrRVpTU0EvUW9HQWdCQlVja1VFUUNBRVFTQWdCQ2dDUENJS2F5SU5JQUlnQWlBTlN4c2lFeUFLYWpZQ1BDQUdJQVFvQWpnZ0NuUkJBQ0FUYTNZZ0FpQVRheUlUZEdvaENpQUVRVGhxRUE4YUlBSWdEVTBOQVNBRUlBUW9BandpQWlBVGFqWUNQQ0FFS0FJNElBSjBRUUFnRTJ0MklBcHFJUW9NQVFzZ0JDQUNJQVFvQWp3aURXbzJBandnQkNnQ09DQU5kRUVBSUFwcmRpQUdhaUVLSUFSQk9Hb1FEeG9MSUFRcEFtUWhSQ0FFSUFvMkFtUWdCQ0JFTndKb0RBRUxBa0FnQWtVRVFDQURCRUFnQkNnQ1pDRUtEQU1MSUFRb0FtZ2hDZ3dCQ3lBRUlBUW9BandpQWtFQmFqWUNQQUovSUFZZ0EwVnFJQVFvQWpnZ0FuUkJIM1pxSWdKQkEwWUVRQ0FFS0FKa1FRRnJEQUVMSUFKQkFuUWdCR29vQW1RTElnWkZJQVpxSVFvZ0FrRUJSd1JBSUFRZ0JDZ0NhRFlDYkFzTElBUWdCQ2dDWkRZQ2FDQUVJQW8yQW1RTHB5RUNJRUZDZ0lEOEI0TlFSUVJBSUFRZ0JDZ0NQQ0lHSUJCcU5nSThJQVFvQWpnZ0JuUkJBQ0FoYTNZZ0Ftb2hBZ3NnQ3lBUWFrRVVUd1JBSUFSQk9Hb1FEeG9MSUVCQ2dJRDhCNE5RUlFSQUlBUWdCQ2dDUENJR0lBdHFOZ0k4SUFRb0FqZ2dCblJCQUNBUmEzWWdBMm9oQXdzZ0JFRTRhaEFQR2lBRUlBUW9BamdpQmtFQUlBZEJHSFlpQ3lBRUtBSThhaUlRYTNZZ0MwRUNkRUdnSFdvb0FnQnhJQWRCLy84RGNXbzJBa3dnQkNBUUlBeEJHSFlpQjJvaUN6WUNQQ0FFSUFkQkFuUkJvQjFxS0FJQUlBWkJBQ0FMYTNaeElBeEIvLzhEY1dvMkFsd2dCRUU0YWhBUEdpQUVJRUtuSWdaQkdIWWlCeUFFS0FJOGFpSUxOZ0k4SUFRZ0IwRUNkRUdnSFdvb0FnQWdCQ2dDT0VFQUlBdHJkbkVnQmtILy93TnhhallDVkNBRVFmQUFhaUFJUVF4c2FpSUdJQW8yQWdnZ0JpQUNOZ0lFSUFZZ0F6WUNBQ0FJUVFGcUlRZ2dBeUFaYWlBQ2FpRVpEQUVMQ3lBSUlCOUlEUU1nRmtFZ2F5RWhJQTRoQndOQUlBUkJPR29RRDBFRFJpQUlJQTlPY2tVRVFDQUVLQUpRSUFRb0FreEJBM1JxS1FJQUlrQ25JZ1pCRUhZaUkwSC9BWEVoQ2lBRUtBSmdJQVFvQWx4QkEzUnFLUUlBSWtHbklnMUJFSFlpSUVIL0FYRWhFeUFFS0FKWUlBUW9BbFJCQTNScUtRSUFJa0pDSUlpbklRTWdRVUlnaUNCQVFpQ0lweUVMQWtBZ1FrSVFpS2NpREVIL0FYRWlBa0VDVHdSQUFrQWdBa0VaU1NBL1FvR0FnQkJVY2tVRVFDQUVRU0FnQkNnQ1BDSU1heUlSSUFJZ0FpQVJTeHNpRUNBTWFqWUNQQ0FESUFRb0FqZ2dESFJCQUNBUWEzWWdBaUFRYXlJTWRHb2hFQ0FFUVRocUVBOGFJQUlnRVUwTkFTQUVJQVFvQWp3aUFpQU1hallDUENBRUtBSTRJQUowUVFBZ0RHdDJJQkJxSVJBTUFRc2dCQ0FDSUFRb0Fqd2lFR28yQWp3Z0JDZ0NPQ0FRZEVFQUlBeHJkaUFEYWlFUUlBUkJPR29RRHhvTElBUXBBbVFoUkNBRUlCQTJBbVFnQkNCRU53Sm9EQUVMQWtBZ0FrVUVRQ0FMQkVBZ0JDZ0NaQ0VRREFNTElBUW9BbWdoRUF3QkN5QUVJQVFvQWp3aUFrRUJhallDUEFKL0lBTWdDMFZxSUFRb0FqZ2dBblJCSDNacUlnSkJBMFlFUUNBRUtBSmtRUUZyREFFTElBSkJBblFnQkdvb0FtUUxJZ05GSUFOcUlSQWdBa0VCUndSQUlBUWdCQ2dDYURZQ2JBc0xJQVFnQkNnQ1pEWUNhQ0FFSUJBMkFtUUxweUVNSUVGQ2dJRDhCNE5RUlFSQUlBUWdCQ2dDUENJQ0lCTnFOZ0k4SUFRb0FqZ2dBblJCQUNBZ2EzWWdER29oREFzZ0NpQVRha0VVVHdSQUlBUkJPR29RRHhvTElFQkNnSUQ4QjROUVJRUkFJQVFnQkNnQ1BDSUNJQXBxTmdJOElBUW9BamdnQW5SQkFDQWphM1lnQzJvaEN3c2dCRUU0YWhBUEdpQUVJQVFvQWpnaUFrRUFJQVpCR0hZaUF5QUVLQUk4YWlJS2EzWWdBMEVDZEVHZ0hXb29BZ0J4SUFaQi8vOERjV28yQWt3Z0JDQUtJQTFCR0hZaUEyb2lCallDUENBRUlBTkJBblJCb0IxcUtBSUFJQUpCQUNBR2EzWnhJQTFCLy84RGNXbzJBbHdnQkVFNGFoQVBHaUFFSUVLbklnSkJHSFlpQXlBRUtBSThhaUlHTmdJOElBUWdBMEVDZEVHZ0hXb29BZ0FnQkNnQ09FRUFJQVpyZG5FZ0FrSC8vd054YWpZQ1ZBSkFBa0FDUUNBRUtBTGNBU0lESUFSQjhBQnFJQWhCQjNGQkRHeHFJaE1vQWdBaUVXb2lJeUFYU3cwQUlBY2dFeWdDQkNJTklCRnFJZ3BxSUNGTERRQWdDa0VnYWlBV0lBZHJUUTBCQ3lBRUlCTW9BZ2cyQWhnZ0JDQVRLUUlBTndNUUlBY2dGaUFFUVJCcUlBUkIzQUZxSUJjZ0VpQVlJQm9RSHlFS0RBRUxJQWNnRVdvaEFpQVRLQUlJSVFZZ0J5QURLUUFBTndBQUlBY2dBeWtBQ0RjQUNBSkFJQkZCRVVrTkFDQUhJQU1wQUJBM0FCQWdCeUFES1FBWU53QVlJQkZCRUd0QkVVZ05BQ0FEUVJCcUlRTWdCMEVnYWlFUkEwQWdFU0FES1FBUU53QUFJQkVnQXlrQUdEY0FDQ0FSSUFNcEFDQTNBQkFnRVNBREtRQW9Od0FZSUFOQklHb2hBeUFSUVNCcUloRWdBa2tOQUFzTElBSWdCbXNoQXlBRUlDTTJBdHdCSUFJZ0Vtc2dCa2tFUUNBR0lBSWdHR3RMRFFjZ0dpQWFJQU1nRW1zaUEyb2lFU0FOYWs4RVFDQUNJQkVnRFJBS0dnd0NDeUFESUExcUlRMGdBaUFSUVFBZ0Eyc1FDaUFEYXlFQ0lCSWhBd3NnQmtFUVR3UkFJQUlnQXlrQUFEY0FBQ0FDSUFNcEFBZzNBQWdnRFVFUlNBMEJJQUlnRFdvaEJpQUNRUkJxSVFJRFFDQUNJQU1wQUJBM0FBQWdBaUFES1FBWU53QUlJQUlnQXlrQUlEY0FFQ0FDSUFNcEFDZzNBQmdnQTBFZ2FpRURJQUpCSUdvaUFpQUdTUTBBQ3d3QkN3SkFJQVpCQjAwRVFDQUNJQU10QUFBNkFBQWdBaUFETFFBQk9nQUJJQUlnQXkwQUFqb0FBaUFDSUFNdEFBTTZBQU1nQWlBRElBWkJBblFpQmtIQUhtb29BZ0JxSWdNb0FBQTJBQVFnQXlBR1FlQWVhaWdDQUdzaEF3d0JDeUFDSUFNcEFBQTNBQUFMSUExQkNVa05BQ0FDSUExcUlSRWdBa0VJYWlJR0lBTkJDR29pQTJ0QkQwd0VRQU5BSUFZZ0F5a0FBRGNBQUNBRFFRaHFJUU1nQmtFSWFpSUdJQkZKRFFBTUFnc0FDeUFHSUFNcEFBQTNBQUFnQmlBREtRQUlOd0FJSUExQkdVZ05BQ0FDUVJocUlRSURRQ0FDSUFNcEFCQTNBQUFnQWlBREtRQVlOd0FJSUFJZ0F5a0FJRGNBRUNBQ0lBTXBBQ2czQUJnZ0EwRWdhaUVESUFKQklHb2lBaUFSU1EwQUN3c2dDa0dJZjBzRVFDQUtJUWtNQmdVZ0V5QVFOZ0lJSUJNZ0REWUNCQ0FUSUFzMkFnQWdDRUVCYWlFSUlBY2dDbW9oQnlBTElCbHFJQXhxSVJrTUFnc0FDd3NnQ0NBUFNBMERJQWdnSDJzaEJnTkFBa0FnQmlBUFRnUkFRUUFoQXdOQUlBTkJBMFlOQWlBRklBTkJBblFpQW1wQnJOQUJhaUFDSUFScUtBSmtOZ0lBSUFOQkFXb2hBd3dBQ3dBTEFrQUNRQUpBSUFRb0F0d0JJZ01nQkVId0FHb2dCa0VIY1VFTWJHb2lDQ2dDQUNJTWFpSVFJQmRMRFFBZ0J5QUlLQUlFSWdzZ0RHb2lDbW9nSVVzTkFDQUtRU0JxSUJZZ0IydE5EUUVMSUFRZ0NDZ0NDRFlDS0NBRUlBZ3BBZ0EzQXlBZ0J5QVdJQVJCSUdvZ0JFSGNBV29nRnlBU0lCZ2dHaEFmSVFvTUFRc2dCeUFNYWlFQ0lBZ29BZ2doQ0NBSElBTXBBQUEzQUFBZ0J5QURLUUFJTndBSUFrQWdERUVSU1EwQUlBY2dBeWtBRURjQUVDQUhJQU1wQUJnM0FCZ2dERUVRYTBFUlNBMEFJQU5CRUdvaEF5QUhRU0JxSVF3RFFDQU1JQU1wQUJBM0FBQWdEQ0FES1FBWU53QUlJQXdnQXlrQUlEY0FFQ0FNSUFNcEFDZzNBQmdnQTBFZ2FpRURJQXhCSUdvaURDQUNTUTBBQ3dzZ0FpQUlheUVESUFRZ0VEWUMzQUVnQWlBU2F5QUlTUVJBSUFnZ0FpQVlhMHNOQnlBYUlCb2dBeUFTYXlJRGFpSU1JQXRxVHdSQUlBSWdEQ0FMRUFvYURBSUxJQU1nQzJvaEN5QUNJQXhCQUNBRGF4QUtJQU5ySVFJZ0VpRURDeUFJUVJCUEJFQWdBaUFES1FBQU53QUFJQUlnQXlrQUNEY0FDQ0FMUVJGSURRRWdBaUFMYWlFSUlBSkJFR29oQWdOQUlBSWdBeWtBRURjQUFDQUNJQU1wQUJnM0FBZ2dBaUFES1FBZ053QVFJQUlnQXlrQUtEY0FHQ0FEUVNCcUlRTWdBa0VnYWlJQ0lBaEpEUUFMREFFTEFrQWdDRUVIVFFSQUlBSWdBeTBBQURvQUFDQUNJQU10QUFFNkFBRWdBaUFETFFBQ09nQUNJQUlnQXkwQUF6b0FBeUFDSUFNZ0NFRUNkQ0lJUWNBZWFpZ0NBR29pQXlnQUFEWUFCQ0FESUFoQjRCNXFLQUlBYXlFRERBRUxJQUlnQXlrQUFEY0FBQXNnQzBFSlNRMEFJQUlnQzJvaERDQUNRUWhxSWdnZ0EwRUlhaUlEYTBFUFRBUkFBMEFnQ0NBREtRQUFOd0FBSUFOQkNHb2hBeUFJUVFocUlnZ2dERWtOQUF3Q0N3QUxJQWdnQXlrQUFEY0FBQ0FJSUFNcEFBZzNBQWdnQzBFWlNBMEFJQUpCR0dvaEFnTkFJQUlnQXlrQUVEY0FBQ0FDSUFNcEFCZzNBQWdnQWlBREtRQWdOd0FRSUFJZ0F5a0FLRGNBR0NBRFFTQnFJUU1nQWtFZ2FpSUNJQXhKRFFBTEN5QUtRWWgvU3dSQUlBb2hDUXdHQlNBR1FRRnFJUVlnQnlBS2FpRUhEQUlMQUFzTElBUW9BdHdCSVFNTFFicC9JUWtnRnlBRGF5SUNJQllnQjJ0TERRSWdCd1IvSUFjZ0F5QUNFQUlnQW1vRlFRQUxJQTVySVFrTUFnc2dCVUVBTmdLYzZ3RUxJQVFnQlNnQzhPb0JJZ00yQXR3QklBa2dEbW9oRENBRElBVW9Bb0RyQVdvaEVBSkFJQTlGQkVBZ0RpRUdEQUVMSUFVb0FyanBBU0VOSUFVb0FyVHBBU0VUSUFVb0FyRHBBU0VTSUFWQkFUWUNoT29CUVFBaEF3TkFJQU5CQTBjRVFDQUVJQU5CQW5RaUFtb2dBaUFGYWtHczBBRnFLQUlBTmdLY0FTQURRUUZxSVFNTUFRc0xRV3doQ1NBRVFmQUFhaUlDSUFjZ0JoQU5RWWgvU3cwQklERWdBaUFGS0FJQUVCNGdNQ0FDSUFVb0FnZ1FIaUF2SUFJZ0JTZ0NCQkFlSUF4QklHc2hHQ0FPSVFZRFFDQUVLQUtJQVNBRUtBS0VBVUVEZEdvcEFnQWlRS2NpQ2tFUWRpSVpRZjhCY1NFTElBUW9BcGdCSUFRb0FwUUJRUU4wYWlrQ0FDSkJweUlXUVJCMkloOUIvd0Z4SVJvZ0JDZ0NrQUVnQkNnQ2pBRkJBM1JxS1FJQUlrSkNJSWluSVFjZ1FVSWdpQ0JBUWlDSXB5RURBa0FnUWtJUWlLY2lDRUgvQVhFaUFrRUNUd1JBQWtBZ0FrRVpTU0EvUW9HQWdCQlVja1VFUUNBRVFTQWdCQ2dDZENJSWF5SVJJQUlnQWlBUlN4c2lGeUFJYWpZQ2RDQUhJQVFvQW5BZ0NIUkJBQ0FYYTNZZ0FpQVhheUlYZEdvaENDQUVRZkFBYWhBUEdpQUNJQkZORFFFZ0JDQUVLQUowSWdJZ0YybzJBblFnQkNnQ2NDQUNkRUVBSUJkcmRpQUlhaUVJREFFTElBUWdBaUFFS0FKMEloRnFOZ0owSUFRb0FuQWdFWFJCQUNBSWEzWWdCMm9oQ0NBRVFmQUFhaEFQR2dzZ0JDa0NuQUVoUkNBRUlBZzJBcHdCSUFRZ1JEY0NvQUVNQVFzQ1FDQUNSUVJBSUFNRVFDQUVLQUtjQVNFSURBTUxJQVFvQXFBQklRZ01BUXNnQkNBRUtBSjBJZ0pCQVdvMkFuUUNmeUFISUFORmFpQUVLQUp3SUFKMFFSOTJhaUlDUVFOR0JFQWdCQ2dDbkFGQkFXc01BUXNnQWtFQ2RDQUVhaWdDbkFFTElnZEZJQWRxSVFnZ0FrRUJSd1JBSUFRZ0JDZ0NvQUUyQXFRQkN3c2dCQ0FFS0FLY0FUWUNvQUVnQkNBSU5nS2NBUXVuSVFJZ1FVS0FnUHdIZzFCRkJFQWdCQ0FFS0FKMElnY2dHbW8yQW5RZ0JDZ0NjQ0FIZEVFQUlCOXJkaUFDYWlFQ0N5QUxJQnBxUVJSUEJFQWdCRUh3QUdvUUR4b0xJRUJDZ0lEOEI0TlFSUVJBSUFRZ0JDZ0NkQ0lISUF0cU5nSjBJQVFvQW5BZ0IzUkJBQ0FaYTNZZ0Eyb2hBd3NnQkVId0FHb1FEeG9nQkNBRUtBSndJZ2RCQUNBS1FSaDJJZ3NnQkNnQ2RHb2lHbXQySUF0QkFuUkJvQjFxS0FJQWNTQUtRZi8vQTNGcU5nS0VBU0FFSUJvZ0ZrRVlkaUlLYWlJTE5nSjBJQVFnQ2tFQ2RFR2dIV29vQWdBZ0IwRUFJQXRyZG5FZ0ZrSC8vd054YWpZQ2xBRWdCRUh3QUdvUUR4b2dCQ0JDcHlJSFFSaDJJZ29nQkNnQ2RHb2lDellDZENBRUlBcEJBblJCb0IxcUtBSUFJQVFvQW5CQkFDQUxhM1p4SUFkQi8vOERjV28yQW93QklBUWdBellDT0NBRUlBSTJBandnQkNBSU5nSkFBa0FDUUFKQUlBUW9BdHdCSWdzZ0Eyb2lGaUFRU3cwQUlBWWdBaUFEYWlJS2FpQVlTdzBBSUFwQklHb2dEQ0FHYTAwTkFRc2dCQ0FFUVVCcktBSUFOZ0lJSUFRZ0JDa0RPRGNEQUNBR0lBd2dCQ0FFUWR3QmFpQVFJQklnRXlBTkVCOGhDZ3dCQ3lBRElBWnFJUWNnQmlBTEtRQUFOd0FBSUFZZ0N5a0FDRGNBQ0FKQUlBTkJFVWtOQUNBR0lBc3BBQkEzQUJBZ0JpQUxLUUFZTndBWUlBTkJFR3RCRVVnTkFDQUxRUkJxSVFNZ0JrRWdhaUVMQTBBZ0N5QURLUUFRTndBQUlBc2dBeWtBR0RjQUNDQUxJQU1wQUNBM0FCQWdDeUFES1FBb053QVlJQU5CSUdvaEF5QUxRU0JxSWdzZ0Iwa05BQXNMSUFjZ0NHc2hBeUFFSUJZMkF0d0JJQWNnRW1zZ0NFa0VRQ0FJSUFjZ0UydExEUVFnRFNBTklBTWdFbXNpQTJvaUN5QUNhazhFUUNBSElBc2dBaEFLR2d3Q0N5QUhJQXRCQUNBRGF4QUtJQVFnQWlBRGFpSUNOZ0k4SUFOcklRY2dFaUVEQ3lBSVFSQlBCRUFnQnlBREtRQUFOd0FBSUFjZ0F5a0FDRGNBQ0NBQ1FSRklEUUVnQWlBSGFpRUlJQWRCRUdvaEFnTkFJQUlnQXlrQUVEY0FBQ0FDSUFNcEFCZzNBQWdnQWlBREtRQWdOd0FRSUFJZ0F5a0FLRGNBR0NBRFFTQnFJUU1nQWtFZ2FpSUNJQWhKRFFBTERBRUxBa0FnQ0VFSFRRUkFJQWNnQXkwQUFEb0FBQ0FISUFNdEFBRTZBQUVnQnlBRExRQUNPZ0FDSUFjZ0F5MEFBem9BQXlBSElBTWdDRUVDZENJSVFjQWVhaWdDQUdvaUF5Z0FBRFlBQkNBRElBaEI0QjVxS0FJQWF5RUREQUVMSUFjZ0F5a0FBRGNBQUFzZ0FrRUpTUTBBSUFJZ0Iyb2hDeUFIUVFocUlnZ2dBMEVJYWlJRGEwRVBUQVJBQTBBZ0NDQURLUUFBTndBQUlBTkJDR29oQXlBSVFRaHFJZ2dnQzBrTkFBd0NDd0FMSUFnZ0F5a0FBRGNBQUNBSUlBTXBBQWczQUFnZ0FrRVpTQTBBSUFkQkdHb2hBZ05BSUFJZ0F5a0FFRGNBQUNBQ0lBTXBBQmczQUFnZ0FpQURLUUFnTndBUUlBSWdBeWtBS0RjQUdDQURRU0JxSVFNZ0FrRWdhaUlDSUF0SkRRQUxDeUFLUVloL1N3UkFJQW9oQ1F3REN5QUdJQXBxSVFZZ0JFSHdBR29RRHlFRElBOUJBV3NpRHcwQUMwRUFJUUlnQTBFQ1NRMEJBMEFnQWtFRFJ3UkFJQVVnQWtFQ2RDSURha0dzMEFGcUlBTWdCR29vQXB3Qk5nSUFJQUpCQVdvaEFnd0JDd3NnQkNnQzNBRWhBd3RCdW44aENTQVFJQU5ySWdJZ0RDQUdhMHNOQUNBR0JIOGdCaUFESUFJUUFpQUNhZ1ZCQUFzZ0Rtc2hDUXNnQ1VHSWYwc05CZ3NDUUNBRktBTHM2Z0ZGRFFBZ0JTQUZLUU9JNmdFZ0NhMThOd09JNmdFQ1FDQUZLQUxRNmdFaUFpQUphaUlJUVI5TkJFQWdEa1VOQVNBQ0lDSnFJQTRnQ1JBQ0dpQUZLQUxRNmdFZ0NXb2hDQXdCQ3lBT0lRTWdBZ1JBSUFJZ0ltb2dBMEVnSUFKckVBSWFJQVVvQXREcUFTRUNJQVZCQURZQzBPb0JJQVVnQlNrRGtPb0JJQVVwQUxEcUFVTFAxdE8rMHNlcjJVSitmRUlmaVVLSGxhK3ZtTGJlbTU1L2ZqY0RrT29CSUFVZ0JTa0RtT29CSUFVcEFManFBVUxQMXRPKzBzZXIyVUorZkVJZmlVS0hsYSt2bUxiZW01NS9mamNEbU9vQklBVWdCU2tEb09vQklBVXBBTURxQVVMUDF0Tyswc2VyMlVKK2ZFSWZpVUtIbGErdm1MYmVtNTUvZmpjRG9Pb0JJQVVnQlNrRHFPb0JJQVVwQU1qcUFVTFAxdE8rMHNlcjJVSitmRUlmaVVLSGxhK3ZtTGJlbTU1L2ZqY0RxT29CSUFNZ0FtdEJJR29oQXdzZ0NTQU9haUlDSUFOQklHcFBCRUFnQWtFZ2F5RUdJQVVwQTZqcUFTRS9JQVVwQTZEcUFTRkFJQVVwQTVqcUFTRkJJQVVwQTVEcUFTRkNBMEFnQXlrQUdFTFAxdE8rMHNlcjJVSitJRDk4UWgrSlFvZVZyNitZdHQ2Ym5uOStJVDhnQXlrQUVFTFAxdE8rMHNlcjJVSitJRUI4UWgrSlFvZVZyNitZdHQ2Ym5uOStJVUFnQXlrQUNFTFAxdE8rMHNlcjJVSitJRUY4UWgrSlFvZVZyNitZdHQ2Ym5uOStJVUVnQXlrQUFFTFAxdE8rMHNlcjJVSitJRUo4UWgrSlFvZVZyNitZdHQ2Ym5uOStJVUlnQTBFZ2FpSURJQVpORFFBTElBVWdQemNEcU9vQklBVWdRRGNEb09vQklBVWdRVGNEbU9vQklBVWdRamNEa09vQkN5QUNJQU5ORFFFZ0lpQURJQUlnQTJzaUNCQUNHZ3NnQlNBSU5nTFE2Z0VMSURVZ0ZXc2hBeUFWSUJ0cUlRSWdDU0FPYWlFT0lBUW9BakJGRFFBTElDa3BBd0FpUDBKL1VTQS9JQTRnSFd1c1VYSkZCRUJCYkNFSkRBWUxJQVVvQXVEcEFRUkFRV29oQ1NBRFFRUkpEUVlnQlNnQzZPb0JSUVJBSUNJZ0JTZ0MwT29CYWlFS0FuNGdCU2tEaU9vQklqOUNJRm9FUUNBRktRT1k2Z0VpUUVJSGlTQUZLUU9RNmdFaVFVSUJpWHdnQlNrRG9Pb0JJa0pDRElsOElBVXBBNmpxQVNKRFFoS0pmQ0JCUXMvVzA3N1N4NnZaUW41Q0g0bENoNVd2cjVpMjNwdWVmMzZGUW9lVnI2K1l0dDZibm45K1FwMmp0ZXFEc1kySytnQjlJRUJDejliVHZ0TEhxOWxDZmtJZmlVS0hsYSt2bUxiZW01NS9mb1ZDaDVXdnI1aTIzcHVlZjM1Q25hTzE2b094allyNkFIMGdRa0xQMXRPKzBzZXIyVUorUWgrSlFvZVZyNitZdHQ2Ym5uOStoVUtIbGErdm1MYmVtNTUvZmtLZG83WHFnN0dOaXZvQWZTQkRRcy9XMDc3U3g2dlpRbjVDSDRsQ2g1V3ZyNWkyM3B1ZWYzNkZRb2VWcjYrWXR0NmJubjkrUXAyanRlcURzWTJLK2dCOURBRUxJQVVwQTZEcUFVTEZ6OW15OGVXNjZpZDhDeUEvZkNFL0lDSWhCZ05BSUFvZ0JrRUlhaUlIVHdSQUlBWXBBQUJDejliVHZ0TEhxOWxDZmtJZmlVS0hsYSt2bUxiZW01NS9maUEvaFVJYmlVS0hsYSt2bUxiZW01NS9ma0tkbzdYcWc3R05pdm9BZlNFL0lBY2hCZ3dCQ3dzQ1FDQUtJQVpCQkdvaUNFa0VRQ0FHSVFnTUFRc2dCalVBQUVLSGxhK3ZtTGJlbTU1L2ZpQS9oVUlYaVVMUDF0Tyswc2VyMlVKK1F2bnozZkdaOXBtckZud2hQd3NEUUNBSUlBcEpCRUFnQ0RFQUFFTEZ6OW15OGVXNjZpZCtJRCtGUWd1SlFvZVZyNitZdHQ2Ym5uOStJVDhnQ0VFQmFpRUlEQUVMQ3lBQ0tBQUFJRDlDSVlnZ1A0VkN6OWJUdnRMSHE5bENmaUkvUWgySUlEK0ZRdm56M2ZHWjlwbXJGbjRpUDBJZ2lDQS9oYWRIRFFjTElBTkJCR3NoQXlBQ1FRUnFJUUlMSUE0Z0hXc2lDVUdKZjA4TkJDQUJJQWxySVFFZ0NTQWRhaUVkUVFFaFBnd0JDd3RCdUg4aEJ5QUREUVFnSFNBQWF5RUhEQVFMUVd3aENRd0JDMEc0ZnlFSkMwRzRmeUVISUFsQmRrWWdQbkVOQVFzZ0NTRUhDeWdDQUEwQUlBVkIvT29CYWlnQ0FDRUJJQVZCK09vQmFpZ0NBQ0VBSUFVUUdDQUZLQUt3NndFZ0FDQUJFQk1nQlVFQU5nS3c2d0VnQlNnQ3BPc0JJZ0lFUUFKQUFrQUNRQUpBSUFJb0FnQWlBd1JBSUFCRkRRSWdBU0FESUFBUkFnQU1BUXNnQUVVTkFnc2dBU0FDSUFBUkFnQU1BZ3NnQXhBR0N5QUNFQVlMSUFWQkFEWUNwT3NCQ3lBQUJFQWdBU0FGSUFBUkFnQU1BUXNnQlJBR0N5QUVRZUFCYWlRQUlBY0xDNmdWQ1FCQmlBZ0xEUUVBQUFBQkFBQUFBZ0FBQUFJQVFhQUlDN01HQVFBQUFBRUFBQUFDQUFBQUFnQUFBQ1lBQUFDQ0FBQUFJUVVBQUVvQUFBQm5DQUFBSmdBQUFNQUJBQUNBQUFBQVNRVUFBRW9BQUFDK0NBQUFLUUFBQUN3Q0FBQ0FBQUFBU1FVQUFFb0FBQUMrQ0FBQUx3QUFBTW9DQUFDQUFBQUFpZ1VBQUVvQUFBQ0VDUUFBTlFBQUFITURBQUNBQUFBQW5RVUFBRW9BQUFDZ0NRQUFQUUFBQUlFREFBQ0FBQUFBNndVQUFFc0FBQUErQ2dBQVJBQUFBSjREQUFDQUFBQUFUUVlBQUVzQUFBQ3FDZ0FBU3dBQUFMTURBQUNBQUFBQXdRWUFBRTBBQUFBZkRRQUFUUUFBQUZNRUFBQ0FBQUFBSXdnQUFGRUFBQUNtRHdBQVZBQUFBSmtFQUFDQUFBQUFTd2tBQUZjQUFBQ3hFZ0FBV0FBQUFOb0VBQUNBQUFBQWJ3a0FBRjBBQUFBakZBQUFWQUFBQUVVRkFBQ0FBQUFBVkFvQUFHb0FBQUNNRkFBQWFnQUFBSzhGQUFDQUFBQUFkZ2tBQUh3QUFBQk9FQUFBZkFBQUFOSUNBQUNBQUFBQVl3Y0FBSkVBQUFDUUJ3QUFrZ0FBQUFBQUFBQUJBQUFBQVFBQUFBVUFBQUFOQUFBQUhRQUFBRDBBQUFCOUFBQUEvUUFBQVAwQkFBRDlBd0FBL1FjQUFQMFBBQUQ5SHdBQS9UOEFBUDEvQUFEOS93QUEvZjhCQVAzL0F3RDkvd2NBL2Y4UEFQMy9Id0Q5L3o4QS9mOS9BUDMvL3dEOS8vOEIvZi8vQS8zLy93ZjkvLzhQL2YvL0gvMy8vei85Ly85L0FBQUFBQUVBQUFBQ0FBQUFBd0FBQUFRQUFBQUZBQUFBQmdBQUFBY0FBQUFJQUFBQUNRQUFBQW9BQUFBTEFBQUFEQUFBQUEwQUFBQU9BQUFBRHdBQUFCQUFBQUFSQUFBQUVnQUFBQk1BQUFBVUFBQUFGUUFBQUJZQUFBQVhBQUFBR0FBQUFCa0FBQUFhQUFBQUd3QUFBQndBQUFBZEFBQUFIZ0FBQUI4QUFBQURBQUFBQkFBQUFBVUFBQUFHQUFBQUJ3QUFBQWdBQUFBSkFBQUFDZ0FBQUFzQUFBQU1BQUFBRFFBQUFBNEFBQUFQQUFBQUVBQUFBQkVBQUFBU0FBQUFFd0FBQUJRQUFBQVZBQUFBRmdBQUFCY0FBQUFZQUFBQUdRQUFBQm9BQUFBYkFBQUFIQUFBQUIwQUFBQWVBQUFBSHdBQUFDQUFBQUFoQUFBQUlnQUFBQ01BQUFBbEFBQUFKd0FBQUNrQUFBQXJBQUFBTHdBQUFETUFBQUE3QUFBQVF3QUFBRk1BQUFCakFBQUFnd0FBQUFNQkFBQURBZ0FBQXdRQUFBTUlBQUFERUFBQUF5QUFBQU5BQUFBRGdBQUFBd0FCQUVIZ0R3dFJBUUFBQUFFQUFBQUJBQUFBQVFBQUFBSUFBQUFDQUFBQUF3QUFBQU1BQUFBRUFBQUFCQUFBQUFVQUFBQUhBQUFBQ0FBQUFBa0FBQUFLQUFBQUN3QUFBQXdBQUFBTkFBQUFEZ0FBQUE4QUFBQVFBRUhFRUF1TEFRRUFBQUFDQUFBQUF3QUFBQVFBQUFBRkFBQUFCZ0FBQUFjQUFBQUlBQUFBQ1FBQUFBb0FBQUFMQUFBQURBQUFBQTBBQUFBT0FBQUFEd0FBQUJBQUFBQVNBQUFBRkFBQUFCWUFBQUFZQUFBQUhBQUFBQ0FBQUFBb0FBQUFNQUFBQUVBQUFBQ0FBQUFBQUFFQUFBQUNBQUFBQkFBQUFBZ0FBQUFRQUFBQUlBQUFBRUFBQUFDQUFBQUFBQUVBUVpBU0MrWUVBUUFBQUFFQUFBQUJBQUFBQVFBQUFBSUFBQUFDQUFBQUF3QUFBQU1BQUFBRUFBQUFCZ0FBQUFjQUFBQUlBQUFBQ1FBQUFBb0FBQUFMQUFBQURBQUFBQTBBQUFBT0FBQUFEd0FBQUJBQUFBQUJBQUFBQkFBQUFBZ0FBQUFBQUFBQUFRQUJBUVlBQUFBQUFBQUVBQUFBQUJBQUFBUUFBQUFBSUFBQUJRRUFBQUFBQUFBRkF3QUFBQUFBQUFVRUFBQUFBQUFBQlFZQUFBQUFBQUFGQndBQUFBQUFBQVVKQUFBQUFBQUFCUW9BQUFBQUFBQUZEQUFBQUFBQUFBWU9BQUFBQUFBQkJSQUFBQUFBQUFFRkZBQUFBQUFBQVFVV0FBQUFBQUFDQlJ3QUFBQUFBQU1GSUFBQUFBQUFCQVV3QUFBQUlBQUdCVUFBQUFBQUFBY0ZnQUFBQUFBQUNBWUFBUUFBQUFBS0JnQUVBQUFBQUF3R0FCQUFBQ0FBQUFRQUFBQUFBQUFBQkFFQUFBQUFBQUFGQWdBQUFDQUFBQVVFQUFBQUFBQUFCUVVBQUFBZ0FBQUZCd0FBQUFBQUFBVUlBQUFBSUFBQUJRb0FBQUFBQUFBRkN3QUFBQUFBQUFZTkFBQUFJQUFCQlJBQUFBQUFBQUVGRWdBQUFDQUFBUVVXQUFBQUFBQUNCUmdBQUFBZ0FBTUZJQUFBQUFBQUF3VW9BQUFBQUFBR0JFQUFBQUFRQUFZRVFBQUFBQ0FBQndXQUFBQUFBQUFKQmdBQ0FBQUFBQXNHQUFnQUFEQUFBQVFBQUFBQUVBQUFCQUVBQUFBZ0FBQUZBZ0FBQUNBQUFBVURBQUFBSUFBQUJRVUFBQUFnQUFBRkJnQUFBQ0FBQUFVSUFBQUFJQUFBQlFrQUFBQWdBQUFGQ3dBQUFDQUFBQVVNQUFBQUFBQUFCZzhBQUFBZ0FBRUZFZ0FBQUNBQUFRVVVBQUFBSUFBQ0JSZ0FBQUFnQUFJRkhBQUFBQ0FBQXdVb0FBQUFJQUFFQlRBQUFBQUFBQkFHQUFBQkFBQUFEd1lBZ0FBQUFBQU9CZ0JBQUFBQUFBMEdBQ0FBUVlBWEM0Y0NBUUFCQVFVQUFBQUFBQUFGQUFBQUFBQUFCZ1E5QUFBQUFBQUpCZjBCQUFBQUFBOEYvWDhBQUFBQUZRWDkveDhBQUFBREJRVUFBQUFBQUFjRWZRQUFBQUFBREFYOUR3QUFBQUFTQmYzL0F3QUFBQmNGL2Y5L0FBQUFCUVVkQUFBQUFBQUlCUDBBQUFBQUFBNEYvVDhBQUFBQUZBWDkvdzhBQUFBQ0JRRUFBQUFRQUFjRWZRQUFBQUFBQ3dYOUJ3QUFBQUFSQmYzL0FRQUFBQllGL2Y4L0FBQUFCQVVOQUFBQUVBQUlCUDBBQUFBQUFBMEYvUjhBQUFBQUV3WDkvd2NBQUFBQkJRRUFBQUFRQUFZRVBRQUFBQUFBQ2dYOUF3QUFBQUFRQmYzL0FBQUFBQndGL2YvL0R3QUFHd1g5Ly84SEFBQWFCZjMvL3dNQUFCa0YvZi8vQVFBQUdBWDkvLzhBUVpBWkM0WUVBUUFCQVFZQUFBQUFBQUFHQXdBQUFBQUFBQVFFQUFBQUlBQUFCUVVBQUFBQUFBQUZCZ0FBQUFBQUFBVUlBQUFBQUFBQUJRa0FBQUFBQUFBRkN3QUFBQUFBQUFZTkFBQUFBQUFBQmhBQUFBQUFBQUFHRXdBQUFBQUFBQVlXQUFBQUFBQUFCaGtBQUFBQUFBQUdIQUFBQUFBQUFBWWZBQUFBQUFBQUJpSUFBQUFBQUFFR0pRQUFBQUFBQVFZcEFBQUFBQUFDQmk4QUFBQUFBQU1HT3dBQUFBQUFCQVpUQUFBQUFBQUhCb01BQUFBQUFBa0dBd0lBQUJBQUFBUUVBQUFBQUFBQUJBVUFBQUFnQUFBRkJnQUFBQUFBQUFVSEFBQUFJQUFBQlFrQUFBQUFBQUFGQ2dBQUFBQUFBQVlNQUFBQUFBQUFCZzhBQUFBQUFBQUdFZ0FBQUFBQUFBWVZBQUFBQUFBQUJoZ0FBQUFBQUFBR0d3QUFBQUFBQUFZZUFBQUFBQUFBQmlFQUFBQUFBQUVHSXdBQUFBQUFBUVluQUFBQUFBQUNCaXNBQUFBQUFBTUdNd0FBQUFBQUJBWkRBQUFBQUFBRkJtTUFBQUFBQUFnR0F3RUFBQ0FBQUFRRUFBQUFNQUFBQkFRQUFBQVFBQUFFQlFBQUFDQUFBQVVIQUFBQUlBQUFCUWdBQUFBZ0FBQUZDZ0FBQUNBQUFBVUxBQUFBQUFBQUJnNEFBQUFBQUFBR0VRQUFBQUFBQUFZVUFBQUFBQUFBQmhjQUFBQUFBQUFHR2dBQUFBQUFBQVlkQUFBQUFBQUFCaUFBQUFBQUFCQUdBd0FCQUFBQUR3WURnQUFBQUFBT0JnTkFBQUFBQUEwR0F5QUFBQUFBREFZREVBQUFBQUFMQmdNSUFBQUFBQW9HQXdRQVFhUWRDOWtCQVFBQUFBTUFBQUFIQUFBQUR3QUFBQjhBQUFBL0FBQUFmd0FBQVA4QUFBRC9BUUFBL3dNQUFQOEhBQUQvRHdBQS94OEFBUDgvQUFEL2Z3QUEvLzhBQVAvL0FRRC8vd01BLy84SEFQLy9Ed0QvL3g4QS8vOC9BUC8vZndELy8vOEEvLy8vQWYvLy93UC8vLzhILy8vL0QvLy8veC8vLy84Ly8vLy9md0FBQUFBQkFBQUFBZ0FBQUFRQUFBQUFBQUFBQWdBQUFBUUFBQUFJQUFBQUFBQUFBQUVBQUFBQ0FBQUFBUUFBQUFRQUFBQUVBQUFBQkFBQUFBUUFBQUFJQUFBQUNBQUFBQWdBQUFBSEFBQUFDQUFBQUFrQUFBQUtBQUFBQ3dCQmdCOExBNEFSQVE9PSI7dmFyIHNlPW5ldyBKQSxDZT0hMTthc3luYyBmdW5jdGlvbiBfSShBLHQsZSl7bGV0IEk9bnVsbDt0eXBlb2YgQSE9InN0cmluZyI/ST1BLmhyZWY6QS5zdGFydHNXaXRoKCJodHRwIik/ST1BOkk9YCR7dH0vJHtBfWAsSS5lbmRzV2l0aCgiLmpzIikmJihJPUkuc3Vic3RyaW5nKDAsSS5sZW5ndGgtMykpLEkuZW5kc1dpdGgoIi53YXNtIikmJihJPUkuc3Vic3RyaW5nKDAsSS5sZW5ndGgtNSkpO2xldCByPWAke0l9Lndhc21gLG89YXdhaXQgTEEuZ2V0KGAke3J9LnpzdGAse3Jlc3BvbnNlVHlwZToiYXJyYXlidWZmZXIiLHBhcmFtczplfSk7Q2V8fChhd2FpdCBzZS5pbml0KCksQ2U9ITApO2xldCBDPXNlLmRlY29kZShuZXcgVWludDhBcnJheShvLmRhdGEpKS5idWZmZXI7cmV0dXJuKGF3YWl0IGltcG9ydChgJHtJfS5qc2ApKS5kZWZhdWx0KHt3YXNtQmluYXJ5OkN9KX12YXIgQmU9X0k7dmFyIGJBPW5ldyBNYXA7YXN5bmMgZnVuY3Rpb24gWEkoQSx0LGUpe2xldCBJPUEscj1BLG89bnVsbDtyZXR1cm4gdHlwZW9mIEEhPSJzdHJpbmciJiYoST1uZXcgVVJMKEEuaHJlZikscj1JLmhyZWYpLGJBLmhhcyhyKT9vPWF3YWl0IGJBLmdldChyKTooYkEuc2V0KHIsQmUoSSx0LGUpKSxvPWF3YWl0IGJBLmdldChyKSksb312YXIgYWU9WEk7dmFyIHpJPXtUZXh0RmlsZToiVGV4dEZpbGUiLEJpbmFyeUZpbGU6IkJpbmFyeUZpbGUiLFRleHRTdHJlYW06IlRleHRTdHJlYW0iLEJpbmFyeVN0cmVhbToiQmluYXJ5U3RyZWFtIixJbWFnZToiSW1hZ2UiLFBvaW50U2V0OiJQb2ludFNldCIsTWVzaDoiTWVzaCIsUG9seURhdGE6IlBvbHlEYXRhIixUcmFuc2Zvcm1MaXN0OiJUcmFuc2Zvcm1MaXN0IixKc29uQ29tcGF0aWJsZToiSnNvbkNvbXBhdGlibGUifSxoPXpJO3ZhciB2ST17SW50ODoiaW50OCIsVUludDg6InVpbnQ4IixJbnQxNjoiaW50MTYiLFVJbnQxNjoidWludDE2IixJbnQzMjoiaW50MzIiLFVJbnQzMjoidWludDMyIixJbnQ2NDoiaW50NjQiLFVJbnQ2NDoidWludDY0IixTaXplVmFsdWVUeXBlOiJ1aW50NjQiLElkZW50aWZpZXJUeXBlOiJ1aW50NjQiLEluZGV4VmFsdWVUeXBlOiJpbnQ2NCIsT2Zmc2V0VmFsdWVUeXBlOiJpbnQ2NCJ9LFI9dkk7dmFyICRJPXtGbG9hdDMyOiJmbG9hdDMyIixGbG9hdDY0OiJmbG9hdDY0IixTcGFjZVByZWNpc2lvblR5cGU6ImZsb2F0NjQifSx6PSRJO2Z1bmN0aW9uIEFyKEEsdCl7bGV0IGU9bnVsbDtzd2l0Y2goQSl7Y2FzZSBSLlVJbnQ4OntlPW5ldyBVaW50OEFycmF5KHQpO2JyZWFrfWNhc2UgUi5JbnQ4OntlPW5ldyBJbnQ4QXJyYXkodCk7YnJlYWt9Y2FzZSBSLlVJbnQxNjp7ZT1uZXcgVWludDE2QXJyYXkodCk7YnJlYWt9Y2FzZSBSLkludDE2OntlPW5ldyBJbnQxNkFycmF5KHQpO2JyZWFrfWNhc2UgUi5VSW50MzI6e2U9bmV3IFVpbnQzMkFycmF5KHQpO2JyZWFrfWNhc2UgUi5JbnQzMjp7ZT1uZXcgSW50MzJBcnJheSh0KTticmVha31jYXNlIFIuVUludDY0Ont0eXBlb2YgZ2xvYmFsVGhpcy5CaWdVaW50NjRBcnJheT09ImZ1bmN0aW9uIj9lPW5ldyBCaWdVaW50NjRBcnJheSh0KTplPW5ldyBVaW50OEFycmF5KHQpO2JyZWFrfWNhc2UgUi5JbnQ2NDp7dHlwZW9mIGdsb2JhbFRoaXMuQmlnSW50NjRBcnJheT09ImZ1bmN0aW9uIj9lPW5ldyBCaWdJbnQ2NEFycmF5KHQpOmU9bmV3IFVpbnQ4QXJyYXkodCk7YnJlYWt9Y2FzZSB6LkZsb2F0MzI6e2U9bmV3IEZsb2F0MzJBcnJheSh0KTticmVha31jYXNlIHouRmxvYXQ2NDp7ZT1uZXcgRmxvYXQ2NEFycmF5KHQpO2JyZWFrfWNhc2UibnVsbCI6e2U9bnVsbDticmVha31jYXNlIG51bGw6e2U9bnVsbDticmVha31kZWZhdWx0OnRocm93IG5ldyBFcnJvcigiVHlwZSBpcyBub3Qgc3VwcG9ydGVkIGFzIGEgVHlwZWRBcnJheSIpfXJldHVybiBlfXZhciBIPUFyO3ZhciBjZT10eXBlb2YgZ2xvYmFsVGhpcy5TaGFyZWRBcnJheUJ1ZmZlcj09ImZ1bmN0aW9uIixRZT1uZXcgVGV4dEVuY29kZXIsRWU9bmV3IFRleHREZWNvZGVyKCJ1dGYtOCIpO2Z1bmN0aW9uIHRyKEEsdCl7bGV0IGU9e2ZsYWdzOiJyIixlbmNvZGluZzoiYmluYXJ5In0sST1BLmZzX29wZW4odCxlLmZsYWdzKSxvPUEuZnNfc3RhdCh0KS5zaXplLGc9bnVsbDtjZT9nPW5ldyBTaGFyZWRBcnJheUJ1ZmZlcihvKTpnPW5ldyBBcnJheUJ1ZmZlcihvKTtsZXQgQz1uZXcgVWludDhBcnJheShnKTtyZXR1cm4gQS5mc19yZWFkKEksQywwLG8sMCksQS5mc19jbG9zZShJKSxDfWZ1bmN0aW9uIGZlKEEsdCxlKXtsZXQgST1udWxsO2NlP0k9bmV3IFNoYXJlZEFycmF5QnVmZmVyKGUpOkk9bmV3IEFycmF5QnVmZmVyKGUpO2xldCByPW5ldyBVaW50OEFycmF5KEkpLG89bmV3IFVpbnQ4QXJyYXkoQS5IRUFQVTguYnVmZmVyLHQsZSk7cmV0dXJuIHIuc2V0KG8pLHJ9ZnVuY3Rpb24geShBLHQsZSxJKXtsZXQgcj0wO3JldHVybiB0IT09bnVsbCYmKHI9QS5jY2FsbCgiaXRrX3dhc21faW5wdXRfYXJyYXlfYWxsb2MiLCJudW1iZXIiLFsibnVtYmVyIiwibnVtYmVyIiwibnVtYmVyIiwibnVtYmVyIl0sWzAsZSxJLHQuYnVmZmVyLmJ5dGVMZW5ndGhdKSxBLkhFQVBVOC5zZXQobmV3IFVpbnQ4QXJyYXkodC5idWZmZXIpLHIpKSxyfWZ1bmN0aW9uIFQoQSx0LGUpe2xldCBJPUpTT04uc3RyaW5naWZ5KHQpLHI9QS5sZW5ndGhCeXRlc1VURjgoSSkrMSxvPUEuY2NhbGwoIml0a193YXNtX2lucHV0X2pzb25fYWxsb2MiLCJudW1iZXIiLFsibnVtYmVyIiwibnVtYmVyIiwibnVtYmVyIl0sWzAsZSxyXSk7QS5zdHJpbmdUb1VURjgoSSxvLHIpfWZ1bmN0aW9uIEYoQSx0LGUsSSl7bGV0IHI9QS5jY2FsbCgiaXRrX3dhc21fb3V0cHV0X2FycmF5X2FkZHJlc3MiLCJudW1iZXIiLFsibnVtYmVyIiwibnVtYmVyIiwibnVtYmVyIl0sWzAsdCxlXSksbz1BLmNjYWxsKCJpdGtfd2FzbV9vdXRwdXRfYXJyYXlfc2l6ZSIsIm51bWJlciIsWyJudW1iZXIiLCJudW1iZXIiLCJudW1iZXIiXSxbMCx0LGVdKSxnPWZlKEEscixvKTtyZXR1cm4gSChJLGcuYnVmZmVyKX1mdW5jdGlvbiBzQShBLHQpe2xldCBlPUEuY2NhbGwoIml0a193YXNtX291dHB1dF9qc29uX2FkZHJlc3MiLCJudW1iZXIiLFsibnVtYmVyIiwibnVtYmVyIl0sWzAsdF0pLEk9QS5VVEY4VG9TdHJpbmcoZSk7cmV0dXJuIEpTT04ucGFyc2UoSSl9ZnVuY3Rpb24gZXIoQSx0LGUsSSl7SSE9bnVsbCYmSS5sZW5ndGg+MCYmSS5mb3JFYWNoKGZ1bmN0aW9uKGEsbil7c3dpdGNoKGEudHlwZSl7Y2FzZSBoLlRleHRTdHJlYW06e2xldCBzPVFlLmVuY29kZShhLmRhdGEuZGF0YSksZj15KEEscyxuLDApLEI9e3NpemU6cy5idWZmZXIuYnl0ZUxlbmd0aCxkYXRhOmBkYXRhOmFwcGxpY2F0aW9uL3ZuZC5pdGsuYWRkcmVzcywwOiR7Zn1gfTtUKEEsQixuKTticmVha31jYXNlIGguSnNvbkNvbXBhdGlibGU6e2xldCBzPVFlLmVuY29kZShKU09OLnN0cmluZ2lmeShhLmRhdGEpKSxmPXkoQSxzLG4sMCksQj17c2l6ZTpzLmJ1ZmZlci5ieXRlTGVuZ3RoLGRhdGE6YGRhdGE6YXBwbGljYXRpb24vdm5kLml0ay5hZGRyZXNzLDA6JHtmfWB9O1QoQSxCLG4pO2JyZWFrfWNhc2UgaC5CaW5hcnlTdHJlYW06e2xldCBzPWEuZGF0YS5kYXRhLGY9eShBLHMsbiwwKSxCPXtzaXplOnMuYnVmZmVyLmJ5dGVMZW5ndGgsZGF0YTpgZGF0YTphcHBsaWNhdGlvbi92bmQuaXRrLmFkZHJlc3MsMDoke2Z9YH07VChBLEIsbik7YnJlYWt9Y2FzZSBoLlRleHRGaWxlOntBLmZzX3dyaXRlRmlsZShhLmRhdGEucGF0aCxhLmRhdGEuZGF0YSk7YnJlYWt9Y2FzZSBoLkJpbmFyeUZpbGU6e0EuZnNfd3JpdGVGaWxlKGEuZGF0YS5wYXRoLGEuZGF0YS5kYXRhKTticmVha31jYXNlIGguSW1hZ2U6e2xldCBzPWEuZGF0YSxmPXkoQSxzLmRhdGEsbiwwKSxCPXkoQSxzLmRpcmVjdGlvbixuLDEpLEU9dHlwZW9mIHMubWV0YWRhdGE/LmVudHJpZXM8InUiP0FycmF5LmZyb20ocy5tZXRhZGF0YS5lbnRyaWVzKCkpOltdLGw9e2ltYWdlVHlwZTpzLmltYWdlVHlwZSxuYW1lOnMubmFtZSxvcmlnaW46cy5vcmlnaW4sc3BhY2luZzpzLnNwYWNpbmcsZGlyZWN0aW9uOmBkYXRhOmFwcGxpY2F0aW9uL3ZuZC5pdGsuYWRkcmVzcywwOiR7Qn1gLHNpemU6cy5zaXplLGRhdGE6YGRhdGE6YXBwbGljYXRpb24vdm5kLml0ay5hZGRyZXNzLDA6JHtmfWAsbWV0YWRhdGE6RX07VChBLGwsbik7YnJlYWt9Y2FzZSBoLk1lc2g6e2xldCBzPWEuZGF0YSxmPXkoQSxzLnBvaW50cyxuLDApLEI9eShBLHMuY2VsbHMsbiwxKSxFPXkoQSxzLnBvaW50RGF0YSxuLDIpLGw9eShBLHMuY2VsbERhdGEsbiwzKSxjPXttZXNoVHlwZTpzLm1lc2hUeXBlLG5hbWU6cy5uYW1lLG51bWJlck9mUG9pbnRzOnMubnVtYmVyT2ZQb2ludHMscG9pbnRzOmBkYXRhOmFwcGxpY2F0aW9uL3ZuZC5pdGsuYWRkcmVzcywwOiR7Zn1gLG51bWJlck9mQ2VsbHM6cy5udW1iZXJPZkNlbGxzLGNlbGxzOmBkYXRhOmFwcGxpY2F0aW9uL3ZuZC5pdGsuYWRkcmVzcywwOiR7Qn1gLGNlbGxCdWZmZXJTaXplOnMuY2VsbEJ1ZmZlclNpemUsbnVtYmVyT2ZQb2ludFBpeGVsczpzLm51bWJlck9mUG9pbnRQaXhlbHMscG9pbnREYXRhOmBkYXRhOmFwcGxpY2F0aW9uL3ZuZC5pdGsuYWRkcmVzcywwOiR7RX1gLG51bWJlck9mQ2VsbFBpeGVsczpzLm51bWJlck9mQ2VsbFBpeGVscyxjZWxsRGF0YTpgZGF0YTphcHBsaWNhdGlvbi92bmQuaXRrLmFkZHJlc3MsMDoke2x9YH07VChBLGMsbik7YnJlYWt9Y2FzZSBoLlBvaW50U2V0OntsZXQgcz1hLmRhdGEsZj15KEEscy5wb2ludHMsbiwwKSxCPXkoQSxzLnBvaW50RGF0YSxuLDEpLEU9e3BvaW50U2V0VHlwZTpzLnBvaW50U2V0VHlwZSxuYW1lOnMubmFtZSxudW1iZXJPZlBvaW50czpzLm51bWJlck9mUG9pbnRzLHBvaW50czpgZGF0YTphcHBsaWNhdGlvbi92bmQuaXRrLmFkZHJlc3MsMDoke2Z9YCxudW1iZXJPZlBvaW50UGl4ZWxzOnMubnVtYmVyT2ZQb2ludFBpeGVscyxwb2ludERhdGE6YGRhdGE6YXBwbGljYXRpb24vdm5kLml0ay5hZGRyZXNzLDA6JHtCfWB9O1QoQSxFLG4pO2JyZWFrfWNhc2UgaC5UcmFuc2Zvcm1MaXN0OntsZXQgcz1hLmRhdGEsZj1bXTtzLmZvckVhY2goKEIsRSk9PntsZXQgYz1gZGF0YTphcHBsaWNhdGlvbi92bmQuaXRrLmFkZHJlc3MsMDoke3koQSxCLmZpeGVkUGFyYW1ldGVycyxuLEUqMil9YCxTPWBkYXRhOmFwcGxpY2F0aW9uL3ZuZC5pdGsuYWRkcmVzcywwOiR7eShBLEIucGFyYW1ldGVycyxuLEUqMisxKX1gLEQ9e3RyYW5zZm9ybVR5cGU6Qi50cmFuc2Zvcm1UeXBlLG51bWJlck9mRml4ZWRQYXJhbWV0ZXJzOkIubnVtYmVyT2ZGaXhlZFBhcmFtZXRlcnMsbnVtYmVyT2ZQYXJhbWV0ZXJzOkIubnVtYmVyT2ZQYXJhbWV0ZXJzLG5hbWU6Qi5uYW1lLGlucHV0U3BhY2VOYW1lOkIuaW5wdXRTcGFjZU5hbWUsb3V0cHV0U3BhY2VOYW1lOkIub3V0cHV0U3BhY2VOYW1lLHBhcmFtZXRlcnM6UyxmaXhlZFBhcmFtZXRlcnM6Y307Zi5wdXNoKEQpfSksVChBLGYsbik7YnJlYWt9Y2FzZSBoLlBvbHlEYXRhOntsZXQgcz1hLmRhdGEsZj15KEEscy5wb2ludHMsbiwwKSxCPXkoQSxzLnZlcnRpY2VzLG4sMSksRT15KEEscy5saW5lcyxuLDIpLGw9eShBLHMucG9seWdvbnMsbiwzKSxjPXkoQSxzLnRyaWFuZ2xlU3RyaXBzLG4sNCkscD15KEEscy5wb2ludERhdGEsbiw1KSxTPXkoQSxzLnBvaW50RGF0YSxuLDYpLEQ9e3BvbHlEYXRhVHlwZTpzLnBvbHlEYXRhVHlwZSxuYW1lOnMubmFtZSxudW1iZXJPZlBvaW50czpzLm51bWJlck9mUG9pbnRzLHBvaW50czpgZGF0YTphcHBsaWNhdGlvbi92bmQuaXRrLmFkZHJlc3MsMDoke2Z9YCx2ZXJ0aWNlc0J1ZmZlclNpemU6cy52ZXJ0aWNlc0J1ZmZlclNpemUsdmVydGljZXM6YGRhdGE6YXBwbGljYXRpb24vdm5kLml0ay5hZGRyZXNzLDA6JHtCfWAsbGluZXNCdWZmZXJTaXplOnMubGluZXNCdWZmZXJTaXplLGxpbmVzOmBkYXRhOmFwcGxpY2F0aW9uL3ZuZC5pdGsuYWRkcmVzcywwOiR7RX1gLHBvbHlnb25zQnVmZmVyU2l6ZTpzLnBvbHlnb25zQnVmZmVyU2l6ZSxwb2x5Z29uczpgZGF0YTphcHBsaWNhdGlvbi92bmQuaXRrLmFkZHJlc3MsMDoke2x9YCx0cmlhbmdsZVN0cmlwc0J1ZmZlclNpemU6cy50cmlhbmdsZVN0cmlwc0J1ZmZlclNpemUsdHJpYW5nbGVTdHJpcHM6YGRhdGE6YXBwbGljYXRpb24vdm5kLml0ay5hZGRyZXNzLDA6JHtjfWAsbnVtYmVyT2ZQb2ludFBpeGVsczpzLm51bWJlck9mUG9pbnRQaXhlbHMscG9pbnREYXRhOmBkYXRhOmFwcGxpY2F0aW9uL3ZuZC5pdGsuYWRkcmVzcywwOiR7cH1gLG51bWJlck9mQ2VsbFBpeGVsczpzLm51bWJlck9mQ2VsbFBpeGVscyxjZWxsRGF0YTpgZGF0YTphcHBsaWNhdGlvbi92bmQuaXRrLmFkZHJlc3MsMDoke1N9YH07VChBLEQsbik7YnJlYWt9ZGVmYXVsdDp0aHJvdyBFcnJvcigiVW5zdXBwb3J0ZWQgaW5wdXQgSW50ZXJmYWNlVHlwZSIpfX0pLEEucmVzZXRNb2R1bGVTdGRvdXQoKSxBLnJlc2V0TW9kdWxlU3RkZXJyKCk7bGV0IHI9QS5zdGFja1NhdmUoKSxvPTA7dHJ5e289QS5jYWxsTWFpbih0LnNsaWNlKCkpfWNhdGNoKGEpe3Rocm93IHR5cGVvZiBhPT0ibnVtYmVyIiYmKGNvbnNvbGUubG9nKCJFeGNlcHRpb24gd2hpbGUgcnVubmluZyBwaXBlbGluZToiKSxjb25zb2xlLmxvZygic3Rkb3V0OiIsQS5nZXRNb2R1bGVTdGRvdXQoKSksY29uc29sZS5lcnJvcigic3RkZXJyOiIsQS5nZXRNb2R1bGVTdGRlcnIoKSksdHlwZW9mIEEuZ2V0RXhjZXB0aW9uTWVzc2FnZTwidSI/Y29uc29sZS5lcnJvcigiZXhjZXB0aW9uOiIsQS5nZXRFeGNlcHRpb25NZXNzYWdlKGEpKTpjb25zb2xlLmVycm9yKCJCdWlsZCBtb2R1bGUgaW4gRGVidWcgbW9kZSBmb3IgZXhjZXB0aW9uIG1lc3NhZ2UgaW5mb3JtYXRpb24uIikpLGF9ZmluYWxseXtBLnN0YWNrUmVzdG9yZShyKX1sZXQgZz1BLmdldE1vZHVsZVN0ZG91dCgpLEM9QS5nZXRNb2R1bGVTdGRlcnIoKSxRPVtdO3JldHVybiBlIT1udWxsJiZlLmxlbmd0aD4wJiZvPT09MCYmZS5mb3JFYWNoKGZ1bmN0aW9uKGEsbil7bGV0IHM9bnVsbDtzd2l0Y2goYS50eXBlKXtjYXNlIGguVGV4dFN0cmVhbTp7bGV0IEI9QS5jY2FsbCgiaXRrX3dhc21fb3V0cHV0X2FycmF5X2FkZHJlc3MiLCJudW1iZXIiLFsibnVtYmVyIiwibnVtYmVyIiwibnVtYmVyIl0sWzAsbiwwXSksRT1BLmNjYWxsKCJpdGtfd2FzbV9vdXRwdXRfYXJyYXlfc2l6ZSIsIm51bWJlciIsWyJudW1iZXIiLCJudW1iZXIiLCJudW1iZXIiXSxbMCxuLDBdKSxsPW5ldyBVaW50OEFycmF5KEEuSEVBUFU4LmJ1ZmZlcixCLEUpO3M9e2RhdGE6RWUuZGVjb2RlKGwpfTticmVha31jYXNlIGguSnNvbkNvbXBhdGlibGU6e2xldCBCPUEuY2NhbGwoIml0a193YXNtX291dHB1dF9hcnJheV9hZGRyZXNzIiwibnVtYmVyIixbIm51bWJlciIsIm51bWJlciIsIm51bWJlciJdLFswLG4sMF0pLEU9QS5jY2FsbCgiaXRrX3dhc21fb3V0cHV0X2FycmF5X3NpemUiLCJudW1iZXIiLFsibnVtYmVyIiwibnVtYmVyIiwibnVtYmVyIl0sWzAsbiwwXSksbD1uZXcgVWludDhBcnJheShBLkhFQVBVOC5idWZmZXIsQixFKTtzPUpTT04ucGFyc2UoRWUuZGVjb2RlKGwpKTticmVha31jYXNlIGguQmluYXJ5U3RyZWFtOntsZXQgQj1BLmNjYWxsKCJpdGtfd2FzbV9vdXRwdXRfYXJyYXlfYWRkcmVzcyIsIm51bWJlciIsWyJudW1iZXIiLCJudW1iZXIiLCJudW1iZXIiXSxbMCxuLDBdKSxFPUEuY2NhbGwoIml0a193YXNtX291dHB1dF9hcnJheV9zaXplIiwibnVtYmVyIixbIm51bWJlciIsIm51bWJlciIsIm51bWJlciJdLFswLG4sMF0pO3M9e2RhdGE6ZmUoQSxCLEUpfTticmVha31jYXNlIGguVGV4dEZpbGU6e3M9e3BhdGg6YS5kYXRhLnBhdGgsZGF0YTpBLmZzX3JlYWRGaWxlKGEuZGF0YS5wYXRoLHtlbmNvZGluZzoidXRmOCJ9KX07YnJlYWt9Y2FzZSBoLkJpbmFyeUZpbGU6e3M9e3BhdGg6YS5kYXRhLnBhdGgsZGF0YTp0cihBLGEuZGF0YS5wYXRoKX07YnJlYWt9Y2FzZSBoLkltYWdlOntsZXQgQj1zQShBLG4pO0IuZGF0YT1GKEEsbiwwLEIuaW1hZ2VUeXBlLmNvbXBvbmVudFR5cGUpLEIuZGlyZWN0aW9uPUYoQSxuLDEsei5GbG9hdDY0KSxCLm1ldGFkYXRhPW5ldyBNYXAoQi5tZXRhZGF0YSkscz1CO2JyZWFrfWNhc2UgaC5NZXNoOntsZXQgQj1zQShBLG4pO0IubnVtYmVyT2ZQb2ludHM+MD9CLnBvaW50cz1GKEEsbiwwLEIubWVzaFR5cGUucG9pbnRDb21wb25lbnRUeXBlKTpCLnBvaW50cz1IKEIubWVzaFR5cGUucG9pbnRDb21wb25lbnRUeXBlLG5ldyBBcnJheUJ1ZmZlcigwKSksQi5udW1iZXJPZkNlbGxzPjA/Qi5jZWxscz1GKEEsbiwxLEIubWVzaFR5cGUuY2VsbENvbXBvbmVudFR5cGUpOkIuY2VsbHM9SChCLm1lc2hUeXBlLmNlbGxDb21wb25lbnRUeXBlLG5ldyBBcnJheUJ1ZmZlcigwKSksQi5udW1iZXJPZlBvaW50UGl4ZWxzPjA/Qi5wb2ludERhdGE9RihBLG4sMixCLm1lc2hUeXBlLnBvaW50UGl4ZWxDb21wb25lbnRUeXBlKTpCLnBvaW50RGF0YT1IKEIubWVzaFR5cGUucG9pbnRQaXhlbENvbXBvbmVudFR5cGUsbmV3IEFycmF5QnVmZmVyKDApKSxCLm51bWJlck9mQ2VsbFBpeGVscz4wP0IuY2VsbERhdGE9RihBLG4sMyxCLm1lc2hUeXBlLmNlbGxQaXhlbENvbXBvbmVudFR5cGUpOkIuY2VsbERhdGE9SChCLm1lc2hUeXBlLmNlbGxQaXhlbENvbXBvbmVudFR5cGUsbmV3IEFycmF5QnVmZmVyKDApKSxzPUI7YnJlYWt9Y2FzZSBoLlBvaW50U2V0OntsZXQgQj1zQShBLG4pO0IubnVtYmVyT2ZQb2ludHM+MD9CLnBvaW50cz1GKEEsbiwwLEIucG9pbnRTZXRUeXBlLnBvaW50Q29tcG9uZW50VHlwZSk6Qi5wb2ludHM9SChCLnBvaW50U2V0VHlwZS5wb2ludENvbXBvbmVudFR5cGUsbmV3IEFycmF5QnVmZmVyKDApKSxCLm51bWJlck9mUG9pbnRQaXhlbHM+MD9CLnBvaW50RGF0YT1GKEEsbiwxLEIucG9pbnRTZXRUeXBlLnBvaW50UGl4ZWxDb21wb25lbnRUeXBlKTpCLnBvaW50RGF0YT1IKEIucG9pbnRTZXRUeXBlLnBvaW50UGl4ZWxDb21wb25lbnRUeXBlLG5ldyBBcnJheUJ1ZmZlcigwKSkscz1CO2JyZWFrfWNhc2UgaC5UcmFuc2Zvcm1MaXN0OntsZXQgQj1zQShBLG4pO0IuZm9yRWFjaCgoRSxsKT0+e0UubnVtYmVyT2ZGaXhlZFBhcmFtZXRlcnM+MCYmKEJbbF0uZml4ZWRQYXJhbWV0ZXJzPUYoQSxuLGwqMixFLnRyYW5zZm9ybVR5cGUucGFyYW1ldGVyc1ZhbHVlVHlwZSkpLEUubnVtYmVyT2ZGaXhlZFBhcmFtZXRlcnM+MCYmKEJbbF0ucGFyYW1ldGVycz1GKEEsbixsKjIrMSxFLnRyYW5zZm9ybVR5cGUucGFyYW1ldGVyc1ZhbHVlVHlwZSkpfSkscz1CO2JyZWFrfWNhc2UgaC5Qb2x5RGF0YTp7bGV0IEI9c0EoQSxuKTtCLm51bWJlck9mUG9pbnRzPjA/Qi5wb2ludHM9RihBLG4sMCx6LkZsb2F0MzIpOkIucG9pbnRzPW5ldyBGbG9hdDMyQXJyYXksQi52ZXJ0aWNlc0J1ZmZlclNpemU+MD9CLnZlcnRpY2VzPUYoQSxuLDEsUi5VSW50MzIpOkIudmVydGljZXM9bmV3IFVpbnQzMkFycmF5LEIubGluZXNCdWZmZXJTaXplPjA/Qi5saW5lcz1GKEEsbiwyLFIuVUludDMyKTpCLmxpbmVzPW5ldyBVaW50MzJBcnJheSxCLnBvbHlnb25zQnVmZmVyU2l6ZT4wP0IucG9seWdvbnM9RihBLG4sMyxSLlVJbnQzMik6Qi5wb2x5Z29ucz1uZXcgVWludDMyQXJyYXksQi50cmlhbmdsZVN0cmlwc0J1ZmZlclNpemU+MD9CLnRyaWFuZ2xlU3RyaXBzPUYoQSxuLDQsUi5VSW50MzIpOkIudHJpYW5nbGVTdHJpcHM9bmV3IFVpbnQzMkFycmF5LEIubnVtYmVyT2ZQb2ludFBpeGVscz4wP0IucG9pbnREYXRhPUYoQSxuLDUsQi5wb2x5RGF0YVR5cGUucG9pbnRQaXhlbENvbXBvbmVudFR5cGUpOkIucG9pbnREYXRhPUgoQi5wb2x5RGF0YVR5cGUucG9pbnRQaXhlbENvbXBvbmVudFR5cGUsbmV3IEFycmF5QnVmZmVyKDApKSxCLm51bWJlck9mQ2VsbFBpeGVscz4wP0IuY2VsbERhdGE9RihBLG4sNixCLnBvbHlEYXRhVHlwZS5jZWxsUGl4ZWxDb21wb25lbnRUeXBlKTpCLmNlbGxEYXRhPUgoQi5wb2x5RGF0YVR5cGUuY2VsbFBpeGVsQ29tcG9uZW50VHlwZSxuZXcgQXJyYXlCdWZmZXIoMCkpLHM9QjticmVha31kZWZhdWx0OnRocm93IEVycm9yKCJVbnN1cHBvcnRlZCBvdXRwdXQgSW50ZXJmYWNlVHlwZSIpfWxldCBmPXt0eXBlOmEudHlwZSxkYXRhOnN9O1EucHVzaChmKX0pLHtyZXR1cm5WYWx1ZTpvLHN0ZG91dDpnLHN0ZGVycjpDLG91dHB1dHM6UX19dmFyIGxlPWVyO3ZhciBJcj10eXBlb2YgZ2xvYmFsVGhpcy5TaGFyZWRBcnJheUJ1ZmZlcjwidSI7ZnVuY3Rpb24gcnIoQSx0KXtpZihBPT1udWxsKXJldHVybltdO2xldCBlPVtdO2ZvcihsZXQgST0wO0k8QS5sZW5ndGg7SSsrKXtsZXQgcj1vcihBW0ldLHQpO3IhPT1udWxsJiZlLnB1c2gocil9cmV0dXJuIGV9ZnVuY3Rpb24gb3IoQSx0KXtpZihBPT1udWxsKXJldHVybiBudWxsO2xldCBlPW51bGw7cmV0dXJuIEEuYnVmZmVyIT09dm9pZCAwP2U9QS5idWZmZXI6QS5ieXRlTGVuZ3RoIT09dm9pZCAwJiYoZT1BKSxJciYmZSBpbnN0YW5jZW9mIFNoYXJlZEFycmF5QnVmZmVyP251bGw6dD9lOmUuc2xpY2UoMCl9dmFyIHVlPXJyO2Z1bmN0aW9uIGdyKEEpe3JldHVybltBLmRhdGEsQS5kaXJlY3Rpb25dfXZhciBEZT1ncjtmdW5jdGlvbiBpcihBKXtyZXR1cm5bQS5wb2ludHMsQS5wb2ludERhdGEsQS5jZWxscyxBLmNlbGxEYXRhXX12YXIgaGU9aXI7ZnVuY3Rpb24gbnIoQSl7cmV0dXJuW0EucG9pbnRzLEEudmVydGljZXMsQS5saW5lcyxBLnBvbHlnb25zLEEudHJpYW5nbGVTdHJpcHMsQS5wb2ludERhdGEsQS5jZWxsRGF0YV19dmFyIGRlPW5yO2FzeW5jIGZ1bmN0aW9uIHNyKEEsdCxlLEkpe2xldCByPWxlKEEsdCxlLEkpLG89W107cmV0dXJuIHIub3V0cHV0cy5mb3JFYWNoKGZ1bmN0aW9uKGcpe2lmKGcudHlwZT09PWguQmluYXJ5U3RyZWFtfHxnLnR5cGU9PT1oLkJpbmFyeUZpbGUpe2xldCBDPWcuZGF0YTtvLnB1c2goQyl9ZWxzZSBpZihnLnR5cGU9PT1oLkltYWdlKXtsZXQgQz1nLmRhdGE7by5wdXNoKC4uLkRlKEMpKX1lbHNlIGlmKGcudHlwZT09PWguTWVzaCl7bGV0IEM9Zy5kYXRhO28ucHVzaCguLi5oZShDKSl9ZWxzZSBpZihnLnR5cGU9PT1oLlBvbHlEYXRhKXtsZXQgQz1nLmRhdGE7by5wdXNoKC4uLmRlKEMpKX19KSxNQShyLHVlKG8sITApKX12YXIgeWU9c3I7dmFyIENyPXtydW5QaXBlbGluZTphc3luYyBmdW5jdGlvbihBLHQsZSxJLHIsbyl7bGV0IGc9YXdhaXQgYWUoQSx0LG8pO3JldHVybiBhd2FpdCB5ZShnLGUsSSxyKX19O2ZBKENyKTslMEEvKiEgQnVuZGxlZCBsaWNlbnNlIGluZm9ybWF0aW9uOiUwQSUwQWNvbWxpbmsvZGlzdC9lc20vY29tbGluay5tanM6JTBBICAoKiolMEEgICAqIEBsaWNlbnNlJTBBICAgKiBDb3B5cmlnaHQgMjAxOSBHb29nbGUgTExDJTBBICAgKiBTUERYLUxpY2Vuc2UtSWRlbnRpZmllcjogQXBhY2hlLTIuMCUwQSAgICopJTBBKi8lMEEnO3p0KFZ0KTtleHBvcnR7RCBhcyBnZXREZWZhdWx0V2ViV29ya2VyLHkgYXMgZ2V0UGlwZWxpbmVXb3JrZXJVcmwsdyBhcyBnZXRQaXBlbGluZXNCYXNlVXJsLFJlIGFzIGhkZjVSZWFkVHJhbnNmb3JtLGJlIGFzIGhkZjVXcml0ZVRyYW5zZm9ybSxTZSBhcyBtYXRSZWFkVHJhbnNmb3JtLGtlIGFzIG1hdFdyaXRlVHJhbnNmb3JtLEZlIGFzIG1uY1JlYWRUcmFuc2Zvcm0sVWUgYXMgbW5jV3JpdGVUcmFuc2Zvcm0sZm4gYXMgcmVhZFRyYW5zZm9ybSx6SSBhcyBzZXREZWZhdWx0V2ViV29ya2VyLHp0IGFzIHNldFBpcGVsaW5lV29ya2VyVXJsLEhJIGFzIHNldFBpcGVsaW5lc0Jhc2VVcmwsVGUgYXMgdHh0UmVhZFRyYW5zZm9ybSxOZSBhcyB0eHRXcml0ZVRyYW5zZm9ybSxLQSBhcyB2ZXJzaW9uLExlIGFzIHdhc21SZWFkVHJhbnNmb3JtLFBlIGFzIHdhc21Xcml0ZVRyYW5zZm9ybSx4ZSBhcyB3YXNtWnN0ZFJlYWRUcmFuc2Zvcm0sT2UgYXMgd2FzbVpzdGRXcml0ZVRyYW5zZm9ybSxjbiBhcyB3cml0ZVRyYW5zZm9ybX07Ci8qISBCdW5kbGVkIGxpY2Vuc2UgaW5mb3JtYXRpb246Cgpjb21saW5rL2Rpc3QvZXNtL2NvbWxpbmsubWpzOgogICgqKgogICAqIEBsaWNlbnNlCiAgICogQ29weXJpZ2h0IDIwMTkgR29vZ2xlIExMQwogICAqIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBBcGFjaGUtMi4wCiAgICopCiovCg==""" default_config = JsPackageConfig(default_js_module) js_package = JsPackage(default_config) diff --git a/packages/transform-io/python/itkwasm-transform-io-wasi/itkwasm_transform_io_wasi/_version.py b/packages/transform-io/python/itkwasm-transform-io-wasi/itkwasm_transform_io_wasi/_version.py index 485f44ac2..5becc17c0 100644 --- a/packages/transform-io/python/itkwasm-transform-io-wasi/itkwasm_transform_io_wasi/_version.py +++ b/packages/transform-io/python/itkwasm-transform-io-wasi/itkwasm_transform_io_wasi/_version.py @@ -1 +1 @@ -__version__ = "0.1.1" +__version__ = "1.0.0" diff --git a/packages/transform-io/python/itkwasm-transform-io-wasi/itkwasm_transform_io_wasi/wasm_modules/hdf5-read-transform.wasi.wasm b/packages/transform-io/python/itkwasm-transform-io-wasi/itkwasm_transform_io_wasi/wasm_modules/hdf5-read-transform.wasi.wasm index 3f42962b5..d093bd688 100755 Binary files a/packages/transform-io/python/itkwasm-transform-io-wasi/itkwasm_transform_io_wasi/wasm_modules/hdf5-read-transform.wasi.wasm and b/packages/transform-io/python/itkwasm-transform-io-wasi/itkwasm_transform_io_wasi/wasm_modules/hdf5-read-transform.wasi.wasm differ diff --git a/packages/transform-io/python/itkwasm-transform-io-wasi/itkwasm_transform_io_wasi/wasm_modules/hdf5-write-transform.wasi.wasm b/packages/transform-io/python/itkwasm-transform-io-wasi/itkwasm_transform_io_wasi/wasm_modules/hdf5-write-transform.wasi.wasm index df36f9ae5..7361e9e31 100755 Binary files a/packages/transform-io/python/itkwasm-transform-io-wasi/itkwasm_transform_io_wasi/wasm_modules/hdf5-write-transform.wasi.wasm and b/packages/transform-io/python/itkwasm-transform-io-wasi/itkwasm_transform_io_wasi/wasm_modules/hdf5-write-transform.wasi.wasm differ diff --git a/packages/transform-io/python/itkwasm-transform-io-wasi/itkwasm_transform_io_wasi/wasm_modules/mat-read-transform.wasi.wasm b/packages/transform-io/python/itkwasm-transform-io-wasi/itkwasm_transform_io_wasi/wasm_modules/mat-read-transform.wasi.wasm index 79c6eeec9..38e5f5f10 100755 Binary files a/packages/transform-io/python/itkwasm-transform-io-wasi/itkwasm_transform_io_wasi/wasm_modules/mat-read-transform.wasi.wasm and b/packages/transform-io/python/itkwasm-transform-io-wasi/itkwasm_transform_io_wasi/wasm_modules/mat-read-transform.wasi.wasm differ diff --git a/packages/transform-io/python/itkwasm-transform-io-wasi/itkwasm_transform_io_wasi/wasm_modules/mat-write-transform.wasi.wasm b/packages/transform-io/python/itkwasm-transform-io-wasi/itkwasm_transform_io_wasi/wasm_modules/mat-write-transform.wasi.wasm index c327d6e57..86be62043 100755 Binary files a/packages/transform-io/python/itkwasm-transform-io-wasi/itkwasm_transform_io_wasi/wasm_modules/mat-write-transform.wasi.wasm and b/packages/transform-io/python/itkwasm-transform-io-wasi/itkwasm_transform_io_wasi/wasm_modules/mat-write-transform.wasi.wasm differ diff --git a/packages/transform-io/python/itkwasm-transform-io-wasi/itkwasm_transform_io_wasi/wasm_modules/mnc-read-transform.wasi.wasm b/packages/transform-io/python/itkwasm-transform-io-wasi/itkwasm_transform_io_wasi/wasm_modules/mnc-read-transform.wasi.wasm index ca56b5cf1..ca5adf1b7 100755 Binary files a/packages/transform-io/python/itkwasm-transform-io-wasi/itkwasm_transform_io_wasi/wasm_modules/mnc-read-transform.wasi.wasm and b/packages/transform-io/python/itkwasm-transform-io-wasi/itkwasm_transform_io_wasi/wasm_modules/mnc-read-transform.wasi.wasm differ diff --git a/packages/transform-io/python/itkwasm-transform-io-wasi/itkwasm_transform_io_wasi/wasm_modules/mnc-write-transform.wasi.wasm b/packages/transform-io/python/itkwasm-transform-io-wasi/itkwasm_transform_io_wasi/wasm_modules/mnc-write-transform.wasi.wasm index d62926f30..63043d32b 100755 Binary files a/packages/transform-io/python/itkwasm-transform-io-wasi/itkwasm_transform_io_wasi/wasm_modules/mnc-write-transform.wasi.wasm and b/packages/transform-io/python/itkwasm-transform-io-wasi/itkwasm_transform_io_wasi/wasm_modules/mnc-write-transform.wasi.wasm differ diff --git a/packages/transform-io/python/itkwasm-transform-io-wasi/itkwasm_transform_io_wasi/wasm_modules/txt-read-transform.wasi.wasm b/packages/transform-io/python/itkwasm-transform-io-wasi/itkwasm_transform_io_wasi/wasm_modules/txt-read-transform.wasi.wasm index 1d9cc4c69..3adc78f7d 100755 Binary files a/packages/transform-io/python/itkwasm-transform-io-wasi/itkwasm_transform_io_wasi/wasm_modules/txt-read-transform.wasi.wasm and b/packages/transform-io/python/itkwasm-transform-io-wasi/itkwasm_transform_io_wasi/wasm_modules/txt-read-transform.wasi.wasm differ diff --git a/packages/transform-io/python/itkwasm-transform-io-wasi/itkwasm_transform_io_wasi/wasm_modules/txt-write-transform.wasi.wasm b/packages/transform-io/python/itkwasm-transform-io-wasi/itkwasm_transform_io_wasi/wasm_modules/txt-write-transform.wasi.wasm index 0afc279ff..6b2541574 100755 Binary files a/packages/transform-io/python/itkwasm-transform-io-wasi/itkwasm_transform_io_wasi/wasm_modules/txt-write-transform.wasi.wasm and b/packages/transform-io/python/itkwasm-transform-io-wasi/itkwasm_transform_io_wasi/wasm_modules/txt-write-transform.wasi.wasm differ diff --git a/packages/transform-io/python/itkwasm-transform-io-wasi/itkwasm_transform_io_wasi/wasm_modules/wasm-read-transform.wasi.wasm b/packages/transform-io/python/itkwasm-transform-io-wasi/itkwasm_transform_io_wasi/wasm_modules/wasm-read-transform.wasi.wasm index 61b4206b0..25a3a18bd 100755 Binary files a/packages/transform-io/python/itkwasm-transform-io-wasi/itkwasm_transform_io_wasi/wasm_modules/wasm-read-transform.wasi.wasm and b/packages/transform-io/python/itkwasm-transform-io-wasi/itkwasm_transform_io_wasi/wasm_modules/wasm-read-transform.wasi.wasm differ diff --git a/packages/transform-io/python/itkwasm-transform-io-wasi/itkwasm_transform_io_wasi/wasm_modules/wasm-write-transform.wasi.wasm b/packages/transform-io/python/itkwasm-transform-io-wasi/itkwasm_transform_io_wasi/wasm_modules/wasm-write-transform.wasi.wasm index 7efa35736..aebe08524 100755 Binary files a/packages/transform-io/python/itkwasm-transform-io-wasi/itkwasm_transform_io_wasi/wasm_modules/wasm-write-transform.wasi.wasm and b/packages/transform-io/python/itkwasm-transform-io-wasi/itkwasm_transform_io_wasi/wasm_modules/wasm-write-transform.wasi.wasm differ diff --git a/packages/transform-io/python/itkwasm-transform-io-wasi/itkwasm_transform_io_wasi/wasm_modules/wasm-zstd-read-transform.wasi.wasm b/packages/transform-io/python/itkwasm-transform-io-wasi/itkwasm_transform_io_wasi/wasm_modules/wasm-zstd-read-transform.wasi.wasm index 7864ff314..02889368c 100755 Binary files a/packages/transform-io/python/itkwasm-transform-io-wasi/itkwasm_transform_io_wasi/wasm_modules/wasm-zstd-read-transform.wasi.wasm and b/packages/transform-io/python/itkwasm-transform-io-wasi/itkwasm_transform_io_wasi/wasm_modules/wasm-zstd-read-transform.wasi.wasm differ diff --git a/packages/transform-io/python/itkwasm-transform-io-wasi/itkwasm_transform_io_wasi/wasm_modules/wasm-zstd-write-transform.wasi.wasm b/packages/transform-io/python/itkwasm-transform-io-wasi/itkwasm_transform_io_wasi/wasm_modules/wasm-zstd-write-transform.wasi.wasm index 5e4ac505b..1d175d9f1 100755 Binary files a/packages/transform-io/python/itkwasm-transform-io-wasi/itkwasm_transform_io_wasi/wasm_modules/wasm-zstd-write-transform.wasi.wasm and b/packages/transform-io/python/itkwasm-transform-io-wasi/itkwasm_transform_io_wasi/wasm_modules/wasm-zstd-write-transform.wasi.wasm differ diff --git a/packages/transform-io/python/itkwasm-transform-io/itkwasm_transform_io/_version.py b/packages/transform-io/python/itkwasm-transform-io/itkwasm_transform_io/_version.py index 485f44ac2..5becc17c0 100644 --- a/packages/transform-io/python/itkwasm-transform-io/itkwasm_transform_io/_version.py +++ b/packages/transform-io/python/itkwasm-transform-io/itkwasm_transform_io/_version.py @@ -1 +1 @@ -__version__ = "0.1.1" +__version__ = "1.0.0" diff --git a/packages/transform-io/typescript/package.json b/packages/transform-io/typescript/package.json index ab9db197c..d5e58a5f2 100644 --- a/packages/transform-io/typescript/package.json +++ b/packages/transform-io/typescript/package.json @@ -1,6 +1,6 @@ { "name": "@itk-wasm/transform-io", - "version": "0.1.1", + "version": "1.0.0", "description": "Input and output for scientific and medical coordinate transform file formats.", "type": "module", "module": "./dist/index.js", diff --git a/packages/transform-io/typescript/src/version.ts b/packages/transform-io/typescript/src/version.ts index d62543923..30787e5cd 100644 --- a/packages/transform-io/typescript/src/version.ts +++ b/packages/transform-io/typescript/src/version.ts @@ -1,3 +1,3 @@ -const version = "0.1.1" +const version = "1.0.0" export default version