From dd655e96a168aef736daa60142e2a0fcb8fa2bc3 Mon Sep 17 00:00:00 2001 From: "junwei.gu" Date: Tue, 18 Jul 2023 19:32:47 +0800 Subject: [PATCH] refactor(material/mesh): refactor sprite --- dist/index.js | 27 ++++++++++++++++++--------- src/material/SpriteMaterial.ts | 16 ++++------------ src/mesh/Sprite.ts | 10 ++++++++++ src/render/UniformBuffer.ts | 9 +++++++++ 4 files changed, 41 insertions(+), 21 deletions(-) diff --git a/dist/index.js b/dist/index.js index 2555888..8e12ec2 100644 --- a/dist/index.js +++ b/dist/index.js @@ -10997,6 +10997,9 @@ class UniformBuffer { if (!uniform) return; uniform.cb = value; } + getUniformByName(name) { + return this._uniformStruct.get(name); + } // uniformBuffer.setVec3Array('test',()=>{return [new Vector3(1,0,0),new Vector3(1,0.8,0.5)]},2); // uniformBuffer.setFloatArray('test1',()=>{return [0.5,0.5,1.0]},3); // uniformBuffer.setVec4Array('test4',()=>{return [new Vector4(0.5,0.6,0.2,1.0),new Vector4(0.5,0.8,0.8,1.0)]},2); @@ -11012,6 +11015,12 @@ class UniformBuffer { this._uniformStruct.set(name, uniform); this.byteOffset += uniform.byteSize; } + setUniformsFromUniformBuffer(uniformBuffer) { + this._uniformStruct.forEach((value, key) => { + const uniform = uniformBuffer.getUniformByName(key); + if (uniform) this._uniformStruct.set(key, uniform); + }); + } static checkUniformOffset(byteSize, Align) { // from https://gpuweb.github.io/gpuweb/wgsl/#address-space-layout-constraints // return this.hasDynamicOffset @@ -12393,10 +12402,6 @@ class SpriteMaterial extends Material { HAS_UV: true } }); - this.rotation = Math.PI; - this.opacity = 1; - this.center = new Vector2(0, 0); - this.color = new Color(1, 0, 0); } update(frameState, mesh) { if (!this.shaderData || this.dirty) this.createShaderData(mesh); @@ -12411,10 +12416,10 @@ class SpriteMaterial extends Material { }, UniformEnum.Mat4 ); - uniformBuffer.setUniform("color", this, UniformEnum.Color); - uniformBuffer.setUniform("rotation", this, UniformEnum.Float); - uniformBuffer.setUniform("center", this, UniformEnum.FloatVec2); - uniformBuffer.setUniform("opacity", this, UniformEnum.Float); + uniformBuffer.setUniform("color", mesh, UniformEnum.Color); + uniformBuffer.setUniform("rotation", mesh, UniformEnum.Float); + uniformBuffer.setUniform("center", mesh, UniformEnum.FloatVec2); + uniformBuffer.setUniform("opacity", mesh, UniformEnum.Float); this.shaderData.setUniformBuffer("sprite", uniformBuffer); if (this.baseTexture) { this.shaderData.setDefine("USE_COLORTEXTURE", true); @@ -12433,6 +12438,10 @@ class Sprite extends Mesh { super(); this.material = new SpriteMaterial(); this.geometry = new SpriteGeometry(); + this.rotation = Math.PI; + this.opacity = 1; + this.center = new Vector2(0, 0); + this.color = new Color(1, 0, 0); } setTexture(texture) { this.material.baseTexture = texture; @@ -16655,4 +16664,4 @@ export { loadGLTF, loadTexture }; -//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VzIjpbIi4uL3NyYy9jb3JlL1dlYkdQVUNvbnN0YW50LnRzIiwiLi4vc3JjL3JlbmRlci9CdWZmZXIudHMiLCIuLi9zcmMvcmVuZGVyL1BpcGVsaW5lTGF5b3V0LnRzIiwiLi4vc3JjL3JlbmRlci9QaXBlbGluZS50cyIsIi4uL3NyYy9yZW5kZXIvRHJhd0NvbW1hbmQudHMiLCIuLi9zcmMvY29yZS9XZWJHUFVUeXBlcy50cyIsIi4uL3NyYy9zaGFkZXIvbWF0ZXJpYWwvY29sb3JGcmFnLnRzIiwiLi4vc3JjL3NoYWRlci9tYXRlcmlhbC9jb2xvclZlcnQudHMiLCIuLi9zcmMvc2hhZGVyL1dnc2xQcmVwcm9jZXNzb3IudHMiLCIuLi9zcmMvc2hhZGVyL21hdGVyaWFsL3Bicl9mcy50cyIsIi4uL3NyYy9zaGFkZXIvbWF0ZXJpYWwvcGJyX3ZzLnRzIiwiLi4vc3JjL3NoYWRlci9tYXRlcmlhbC9wYnJGcmFnLnRzIiwiLi4vc3JjL3NoYWRlci9tYXRlcmlhbC9wYnJWZXJ0LnRzIiwiLi4vc3JjL3NoYWRlci9tYXRlcmlhbC9waG9uZ0ZyYWcudHMiLCIuLi9zcmMvc2hhZGVyL21hdGVyaWFsL3Bob25nVmVydC50cyIsIi4uL3NyYy9zaGFkZXIvbWF0ZXJpYWwvcG9pbnRfZnMudHMiLCIuLi9zcmMvc2hhZGVyL21hdGVyaWFsL3BvaW50X3ZzLnRzIiwiLi4vc3JjL3NoYWRlci9tYXRlcmlhbC9xdWFkRnJhZy50cyIsIi4uL3NyYy9zaGFkZXIvbWF0ZXJpYWwvcXVhZFZlcnQudHMiLCIuLi9zcmMvc2hhZGVyL21hdGVyaWFsL3NreUJveEZyYWcudHMiLCIuLi9zcmMvc2hhZGVyL21hdGVyaWFsL3NreUJveFZlcnQudHMiLCIuLi9zcmMvc2hhZGVyL21hdGVyaWFsL3Nwcml0ZV9mcy50cyIsIi4uL3NyYy9zaGFkZXIvbWF0ZXJpYWwvc3ByaXRlX3ZzLnRzIiwiLi4vc3JjL3NoYWRlci9wb3N0UHJvY2Vzcy9ibGVuZC9ibGVuZEZyYWcudHMiLCIuLi9zcmMvc2hhZGVyL3Bvc3RQcm9jZXNzL2Jsb29tL0JsdXIudHMiLCIuLi9zcmMvc2hhZGVyL3Bvc3RQcm9jZXNzL2Jsb29tL0x1bWlub3NpdHlIaWdoLnRzIiwiLi4vc3JjL3NoYWRlci9zaGFkZXJDaHVuay9hdHRyaWJ1dGUvRnJhZ0lucHV0LnRzIiwiLi4vc3JjL3NoYWRlci9zaGFkZXJDaHVuay9hdHRyaWJ1dGUvUG9pbnRGcmFnSW5wdXQudHMiLCIuLi9zcmMvc2hhZGVyL3NoYWRlckNodW5rL2F0dHJpYnV0ZS9Qb2ludFZlcnRJbnB1dC50cyIsIi4uL3NyYy9zaGFkZXIvc2hhZGVyQ2h1bmsvYXR0cmlidXRlL1BvaW50VmVydE91dHB1dC50cyIsIi4uL3NyYy9zaGFkZXIvc2hhZGVyQ2h1bmsvYXR0cmlidXRlL1ZlcnRleElucHV0LnRzIiwiLi4vc3JjL3NoYWRlci9zaGFkZXJDaHVuay9hdHRyaWJ1dGUvVmVydGV4T3V0cHV0LnRzIiwiLi4vc3JjL3NoYWRlci9zaGFkZXJDaHVuay9jb21tb24vU3lzdGVtVW5pZm9ybS50cyIsIi4uL3NyYy9zaGFkZXIvc2hhZGVyQ2h1bmsvY29tbW9uL1RleHR1cmVBbmRTYW1wbGVyRGVmaW5lLnRzIiwiLi4vc3JjL3NoYWRlci9zaGFkZXJDaHVuay9lbnZpcm9ubWVudC9lbnZpcm9ubWVudC50cyIsIi4uL3NyYy9zaGFkZXIvc2hhZGVyQ2h1bmsvaW5zdGFuY2UvSW5zdGFuY2UudHMiLCIuLi9zcmMvc2hhZGVyL3NoYWRlckNodW5rL2xpZ2h0L2xpZ2h0LnRzIiwiLi4vc3JjL3NoYWRlci9zaGFkZXJDaHVuay9saWdodC9saWdodENvbW1vbi50cyIsIi4uL3NyYy9zaGFkZXIvc2hhZGVyQ2h1bmsvbm9ybWFsL2dldE5vcm1hbEJhY2tVcC50cyIsIi4uL3NyYy9zaGFkZXIvc2hhZGVyQ2h1bmsvcGJyL2JyZGYudHMiLCIuLi9zcmMvc2hhZGVyL3NoYWRlckNodW5rL3Bici9pYmwudHMiLCIuLi9zcmMvc2hhZGVyL3NoYWRlckNodW5rL3Bici9wYnJGdW5jdGlvbi50cyIsIi4uL3NyYy9zaGFkZXIvc2hhZGVyQ2h1bmsvcGJyL3BiclN0cnVjdC50cyIsIi4uL3NyYy9zaGFkZXIvc2hhZGVyQ2h1bmsvcGJyL3BiclRleHR1cmUudHMiLCIuLi9zcmMvc2hhZGVyL3NoYWRlckNodW5rL3Bici9wYnJVdGlscy50cyIsIi4uL3NyYy9zaGFkZXIvc2hhZGVyQ2h1bmsvcGhvbmcvYmxpbm5fcGhvbmcudHMiLCIuLi9zcmMvc2hhZGVyL3NoYWRlckNodW5rL3Bob25nL3Bob25nRnVuY3Rpb24udHMiLCIuLi9zcmMvc2hhZGVyL3NoYWRlckNodW5rL3Bob25nL3Bob25nVXRpbHMudHMiLCIuLi9zcmMvc2hhZGVyL3NoYWRlckNodW5rL3NraW4vU2tpblZlcnQudHMiLCIuLi9zcmMvc2hhZGVyL3NoYWRlckNodW5rL3N0cnVjdC9QYnJNYXRlcmlhbFN0cnVjdC50cyIsIi4uL3NyYy9zaGFkZXIvc2hhZGVyQ2h1bmsvU2hhZGVyQ2h1bmsudHMiLCIuLi9zcmMvc2hhZGVyL3NoYWRlckNodW5rL3NoYWRvdy9zaGFkb3dNYXBEZWJ1Z2dlckZyYWcudHMiLCIuLi9zcmMvc2hhZGVyL3NoYWRlckNodW5rL3NoYWRvdy9zaGFkb3dNYXBEZWJ1Z2dlclZlcnQudHMiLCIuLi9zcmMvc2hhZGVyL3NoYWRlckNodW5rL3NoYWRvdy9zaGFkb3dNYXBGcmFnLnRzIiwiLi4vc3JjL3NoYWRlci9zaGFkZXJDaHVuay9zaGFkb3cvc2hhZG93TWFwVmVydC50cyIsIi4uL3NyYy9zaGFkZXIvU2hhZGVycy50cyIsIi4uL3NyYy9zaGFkZXIvU2hhZGVyU291cmNlLnRzIiwiLi4vc3JjL3V0aWxzL2xvYWRHbHNsYW5nTW9kdWxlLnRzIiwiLi4vc3JjL3V0aWxzL01pcG1hcEdlbmVyYXRvci50cyIsIi4uL3NyYy91dGlscy9kZWZhdWx0VmFsdWUudHMiLCIuLi9zcmMvcmVuZGVyL1JlbmRlclN0YXRlLnRzIiwiLi4vc3JjL3JlbmRlci9Db250ZXh0LnRzIiwiLi4vc3JjL3JlbmRlci9UZXh0dXJlLnRzIiwiLi4vc3JjL3JlbmRlci9TYW1wbGVyLnRzIiwiLi4vc3JjL3JlbmRlci9BdHRhY2htZW50LnRzIiwiLi4vc3JjL3V0aWxzL2RlZmluZWQudHMiLCIuLi9ub2RlX21vZHVsZXMvbWVyc2VubmUtdHdpc3Rlci9zcmMvbWVyc2VubmUtdHdpc3Rlci5qcyIsIi4uL3NyYy9tYXRoL01hdGgudHMiLCIuLi9zcmMvbWF0aC9WZWN0b3IyLnRzIiwiLi4vc3JjL21hdGgvVmVjdG9yMy50cyIsIi4uL3NyYy9yZW5kZXIvQXR0cmlidXRlLnRzIiwiLi4vc3JjL3JlbmRlci9CaW5kR3JvdXAudHMiLCIuLi9zcmMvcmVuZGVyL0JpbmRHcm91cEVudGl0eS50cyIsIi4uL3NyYy9yZW5kZXIvUmVuZGVyVGFyZ2V0LnRzIiwiLi4vc3JjL21hdGgvTWF0cml4My50cyIsIi4uL3NyYy9tYXRoL1ZlY3RvcjQudHMiLCIuLi9zcmMvbWF0aC9NYXRyaXg0LnRzIiwiLi4vc3JjL2NvcmUvQm91bmRpbmdTcGhlcmUudHMiLCIuLi9zcmMvcmVuZGVyL0luZGV4QnVmZmVyLnRzIiwiLi4vc3JjL3JlbmRlci9BdHRyaWJ1dGVzLnRzIiwiLi4vc3JjL3JlbmRlci9WZXJ0ZXhCdWZmZXIudHMiLCIuLi9zcmMvdXRpbHMvY29tYmluZS50cyIsIi4uL3NyYy9nZW9tZXRyeS9HZW9tZXRyeS50cyIsIi4uL3NyYy9nZW9tZXRyeS9QbGFuZUdlb21ldHJ5LnRzIiwiLi4vc3JjL21hdGgvUXVhdGVybmlvbi50cyIsIi4uL3NyYy9jb3JlL1JlbmRlck9iamVjdC50cyIsIi4uL3NyYy9saWdodC9MaWdodC50cyIsIi4uL3NyYy9tYXRoL0NvbG9yLnRzIiwiLi4vc3JjL21hdGgvTWF0cml4Mi50cyIsIi4uL3NyYy9yZW5kZXIvVW5pZm9ybXMudHMiLCIuLi9zcmMvcmVuZGVyL1VuaWZvcm1CdWZmZXIudHMiLCIuLi9zcmMvdXRpbHMvdW5pZm9ybVV0aWxzLnRzIiwiLi4vc3JjL3JlbmRlci9CaW5kR3JvdXBMYXlvdXQudHMiLCIuLi9zcmMvcmVuZGVyL0JpbmRHcm91cExheW91dEVudHJ5LnRzIiwiLi4vc3JjL3JlbmRlci9TaGFkZXJEYXRhLnRzIiwiLi4vc3JjL21hdGVyaWFsL01hdGVyaWFsLnRzIiwiLi4vc3JjL21hdGVyaWFsL1NoYWRlck1hdGVyaWFsLnRzIiwiLi4vc3JjL3V0aWxzL2NyZWF0ZUd1aWQudHMiLCIuLi9zcmMvbWVzaC9NZXNoLnRzIiwiLi4vc3JjL2hlbHBlci9TaGFkb3dNYXBEZWJ1Z2dlci50cyIsIi4uL3NyYy9tYXRlcmlhbC9Db2xvck1hdGVyaWFsLnRzIiwiLi4vc3JjL21lc2gvQXhlcy50cyIsIi4uL3NyYy9nZW9tZXRyeS9Ta3lCb3hHZW9tZXRyeS50cyIsIi4uL3NyYy91dGlscy9kZXN0cm95T2JqZWN0LnRzIiwiLi4vc3JjL2NvcmUvVGV4dHVyZUNhY2hlLnRzIiwiLi4vc3JjL2xvYWRlci9DdWJlVGV4dHVyZUxvYWRlci50cyIsIi4uL3NyYy9tYXRlcmlhbC9Ta3lCb3hNYXRlcmlhbC50cyIsIi4uL3NyYy9tZXNoL1NreUJveC50cyIsIi4uL3NyYy9tZXNoL0luc3RhbmNlLnRzIiwiLi4vc3JjL21lc2gvSW5zdGFuY2VNZXNoLnRzIiwiLi4vc3JjL3JlbmRlci9Db21wdXRlQ29tbWFuZC50cyIsIi4uL3NyYy9tZXNoL01vZGVsLnRzIiwiLi4vc3JjL2dlb21ldHJ5L1Nwcml0ZUdlb21ldHJ5LnRzIiwiLi4vc3JjL21hdGVyaWFsL1Nwcml0ZU1hdGVyaWFsLnRzIiwiLi4vc3JjL21lc2gvU3ByaXRlLnRzIiwiLi4vc3JjL3V0aWxzL0dlb21ldHJ5VXRpbHMudHMiLCIuLi9zcmMvZ2VvbWV0cnkvU3BoZXJlR2VvbWV0cnkudHMiLCIuLi9zcmMvZ2VvbWV0cnkvQm94R2VvbWV0cnkudHMiLCIuLi9zcmMvZ2VvbWV0cnkvVG9ydXNLbm90R2VvbWV0cnkudHMiLCIuLi9zcmMvbWF0ZXJpYWwvQmxpbm5QaG9uZ01hdGVyaWFsLnRzIiwiLi4vc3JjL21hdGVyaWFsL1Bick1hdGVyaWFsLnRzIiwiLi4vc3JjL2NvcmUvRXZlbnREaXNwYXRjaGVyLnRzIiwiLi4vc3JjL2NvcmUvUmVuZGVyUXVldWUudHMiLCIuLi9zcmMvY29yZS9GcmFtZVN0YXRlLnRzIiwiLi4vc3JjL2xpZ2h0L0FtYmllbnRMaWdodC50cyIsIi4uL3NyYy9jb3JlL0xpZ2h0TWFuZ2VyLnRzIiwiLi4vc3JjL2NvcmUvTWVzaE1hbmdlci50cyIsIi4uL3NyYy9wb3N0LXByb2Nlc3MvUmVzb2x2ZUZyYW1lLnRzIiwiLi4vc3JjL3Bvc3QtcHJvY2Vzcy9Qb3N0RWZmZWN0Q29sbGVjdGlvbi50cyIsIi4uL3NyYy9wYXNzL1Bhc3MudHMiLCIuLi9zcmMvcGFzcy9CYXNpY1Bhc3MudHMiLCIuLi9zcmMvbWF0aC9QbGFuZS50cyIsIi4uL3NyYy9jb3JlL0N1bGxpbmdWb2x1bWUudHMiLCIuLi9zcmMvY2FtZXJhL0NhbWVyYS50cyIsIi4uL3NyYy9jYW1lcmEvUGVyc3BlY3RpdmVDYW1lcmEudHMiLCIuLi9zcmMvY2FtZXJhL1BvaW50TGlnaHRTaGFkb3dDYW1lcmEudHMiLCIuLi9zcmMvbGlnaHQvc2hhZG93cy9CYXNlU2hhZG93LnRzIiwiLi4vc3JjL2xpZ2h0L3NoYWRvd3MvUG9pbnRMaWdodFNoYWRvdy50cyIsIi4uL3NyYy9saWdodC9Qb2ludExpZ2h0LnRzIiwiLi4vc3JjL3Bhc3MvU2hhZG93UGFzcy50cyIsIi4uL3NyYy9yZW5kZXJwaXBlbGluZS9Gb3J3YXJkUmVuZGVyTGluZS50cyIsIi4uL3NyYy9TY2VuZS50cyIsIi4uL3NyYy9wb3N0LXByb2Nlc3MvUG9zdEVmZmVjdC50cyIsIi4uL3NyYy9wb3N0LXByb2Nlc3MvQmxvb21Qb3N0RWZmZWN0LnRzIiwiLi4vc3JjL2NhbWVyYS9PcnRob2dyYXBoaWNDYW1lcmEudHMiLCIuLi9zcmMvbGlnaHQvc2hhZG93cy9TcG90TGlnaHRTaGFkb3cudHMiLCIuLi9zcmMvbGlnaHQvU3BvdExpZ2h0LnRzIiwiLi4vc3JjL2xpZ2h0L3NoYWRvd3MvRGlyZWN0aW9uYWxMaWdodFNoYWRvdy50cyIsIi4uL3NyYy9saWdodC9EaXJlY3Rpb25hbExpZ2h0LnRzIiwiLi4vc3JjL21lc2gvTm9kZS50cyIsIi4uL3NyYy9tZXNoL1NLaW5NZXNoLnRzIiwiLi4vc3JjL3V0aWxzL2dsdGZVdGlscy50cyIsIi4uL3NyYy9sb2FkZXIvZ2x0Zi9saWJzL0FjY2Vzc29yLnRzIiwiLi4vc3JjL2xvYWRlci9nbHRmL2xpYnMvQW5pbWF0aW9uLnRzIiwiLi4vc3JjL2xvYWRlci9nbHRmL2xpYnMvQW5pbWF0aW9uQ2hhbm5lbC50cyIsIi4uL3NyYy9sb2FkZXIvZ2x0Zi9saWJzL0FuaW1hdGlvbkNoYW5uZWxUYXJnZXQudHMiLCIuLi9zcmMvbG9hZGVyL2dsdGYvdHlwZXMvZ2x0ZlR5cGUudHMiLCIuLi9zcmMvbG9hZGVyL2dsdGYvbGlicy9BbmltYXRpb25TYW1wbGVyLnRzIiwiLi4vc3JjL2xvYWRlci9HTFRGTG9hZGVyLnRzIiwiLi4vc3JjL3V0aWxzL3V0aWxzLnRzIiwiLi4vc3JjL21hdGgvU3BoZXJpY2FsLnRzIiwiLi4vc3JjL2NvbnRyb2wvT3JiaXRDb250cm9sLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qKiBAaW50ZXJuYWwgKi9cbmV4cG9ydCBlbnVtIFByZWRlZmluZWRDb2xvclNwYWNlIHtcblx0U1JHQiA9IFwic3JnYlwiXG59XG5cbi8qKiBAaW50ZXJuYWwgKi9cbmV4cG9ydCBlbnVtIFBvd2VyUHJlZmVyZW5jZSB7XG5cdExvd1Bvd2VyID0gXCJsb3ctcG93ZXJcIixcblx0SGlnaFBlcmZvcm1hbmNlID0gXCJoaWdoLXBlcmZvcm1hbmNlXCJcbn1cblxuLyoqIEBpbnRlcm5hbCAqL1xuZXhwb3J0IGVudW0gRmVhdHVyZU5hbWUge1xuXHREZXB0aENsaXBDb250cm9sID0gXCJkZXB0aC1jbGlwLWNvbnRyb2xcIixcblx0RGVwdGgyNFVub3JtU3RlbmNpbDggPSBcImRlcHRoMjR1bm9ybS1zdGVuY2lsOFwiLFxuXHREZXB0aDMyRmxvYXRTdGVuY2lsOCA9IFwiZGVwdGgzMmZsb2F0LXN0ZW5jaWw4XCIsXG5cdFRleHR1cmVDb21wcmVzc2lvbkJDID0gXCJ0ZXh0dXJlLWNvbXByZXNzaW9uLWJjXCIsXG5cdFRleHR1cmVDb21wcmVzc2lvbkVUQzIgPSBcInRleHR1cmUtY29tcHJlc3Npb24tZXRjMlwiLFxuXHRUZXh0dXJlQ29tcHJlc3Npb25BU1RDID0gXCJ0ZXh0dXJlLWNvbXByZXNzaW9uLWFzdGNcIixcblx0VGltZXN0YW1wUXVlcnkgPSBcInRpbWVzdGFtcC1xdWVyeVwiLFxuXHRJbmRpcmVjdEZpcnN0SW5zdGFuY2UgPSBcImluZGlyZWN0LWZpcnN0LWluc3RhbmNlXCIsXG5cdFNoYWRlckYxNiA9IFwic2hhZGVyLWYxNlwiLFxuXHRCR1JBOFVub3JtU3RvcmFnZSA9IFwiYmdyYTh1bm9ybS1zdG9yYWdlXCJcbn1cblxuLyoqIEBpbnRlcm5hbCAqL1xuZXhwb3J0IGVudW0gQnVmZmVyVXNhZ2Uge1xuXHRNYXBSZWFkID0gMSxcblx0TWFwV3JpdGUgPSAyLFxuXHRDb3B5U3JjID0gNCxcblx0Q29weURzdCA9IDgsXG5cdEluZGV4ID0gMTYsXG5cdFZlcnRleCA9IDMyLFxuXHRVbmlmb3JtID0gNjQsXG5cdFN0b3JhZ2UgPSAxMjgsXG5cdEluZGlyZWN0ID0gMjU2LFxuXHRRdWVyeVJlc29sdmUgPSA1MTJcbn1cblxuLyoqIEBpbnRlcm5hbCAqL1xuZXhwb3J0IGVudW0gTWFwTW9kZSB7XG5cdFJlYWQgPSAxLFxuXHRXcml0ZSA9IDJcbn1cblxuLyoqIEBpbnRlcm5hbCAqL1xuZXhwb3J0IGVudW0gVGV4dHVyZURpbWVuc2lvbiB7XG5cdEUxZCA9IFwiMWRcIixcblx0RTJkID0gXCIyZFwiLFxuXHRFM2QgPSBcIjNkXCJcbn1cblxuLyoqIEBpbnRlcm5hbCAqL1xuZXhwb3J0IGVudW0gVGV4dHVyZVVzYWdlIHtcblx0Q29weVNyYyA9IDEsXG5cdENvcHlEc3QgPSAyLFxuXHRUZXh0dXJlQmluZGluZyA9IDQsXG5cdFN0b3JhZ2VCaW5kaW5nID0gOCxcblx0UmVuZGVyQXR0YWNobWVudCA9IDE2XG59XG5cbi8qKiBAaW50ZXJuYWwgKi9cbmV4cG9ydCBlbnVtIFRleHR1cmVWaWV3RGltZW5zaW9uIHtcblx0RTFkID0gXCIxZFwiLFxuXHRFMmQgPSBcIjJkXCIsXG5cdEUyZEFycmF5ID0gXCIyZC1hcnJheVwiLFxuXHRDdWJlID0gXCJjdWJlXCIsXG5cdEN1YmVBcnJheSA9IFwiY3ViZS1hcnJheVwiLFxuXHRFM2QgPSBcIjNkXCJcbn1cblxuLyoqIEBpbnRlcm5hbCAqL1xuZXhwb3J0IGVudW0gVGV4dHVyZUFzcGVjdCB7XG5cdEFsbCA9IFwiYWxsXCIsXG5cdFN0ZW5jaWxPbmx5ID0gXCJzdGVuY2lsLW9ubHlcIixcblx0RGVwdGhPbmx5ID0gXCJkZXB0aC1vbmx5XCJcbn1cblxuLyoqXG4gKiBDb21tZW50cyB0YWtlbiBmcm9tIGh0dHBzOi8vZ2l0aHViLmNvbS9nZngtcnMvd2dwdS9ibG9iL21hc3Rlci93Z3B1LXR5cGVzL3NyYy9saWIucnNcbiAqIEBpbnRlcm5hbFxuICovXG5leHBvcnQgZW51bSBUZXh0dXJlRm9ybWF0IHtcblx0Ly8gOC1iaXQgZm9ybWF0c1xuXHRSOFVub3JtID0gXCJyOHVub3JtXCIsIC8vIFJlZCBjaGFubmVsIG9ubHkuIDggYml0IGludGVnZXIgcGVyIGNoYW5uZWwuIFswLCAyNTVdIGNvbnZlcnRlZCB0by9mcm9tIGZsb2F0IFswLCAxXSBpbiBzaGFkZXIuXG5cdFI4U25vcm0gPSBcInI4c25vcm1cIiwgLy8gUmVkIGNoYW5uZWwgb25seS4gOCBiaXQgaW50ZWdlciBwZXIgY2hhbm5lbC4gWy0xMjcsIDEyN10gY29udmVydGVkIHRvL2Zyb20gZmxvYXQgWy0xLCAxXSBpbiBzaGFkZXIuXG5cdFI4VWludCA9IFwicjh1aW50XCIsIC8vIFJlZCBjaGFubmVsIG9ubHkuIDggYml0IGludGVnZXIgcGVyIGNoYW5uZWwuIFVuc2lnbmVkIGluIHNoYWRlci5cblx0UjhTaW50ID0gXCJyOHNpbnRcIiwgLy8gUmVkIGNoYW5uZWwgb25seS4gOCBiaXQgaW50ZWdlciBwZXIgY2hhbm5lbC4gU2lnbmVkIGluIHNoYWRlci5cblxuXHQvLyAxNi1iaXQgZm9ybWF0c1xuXHRSMTZVaW50ID0gXCJyMTZ1aW50XCIsIC8vIFJlZCBjaGFubmVsIG9ubHkuIDE2IGJpdCBpbnRlZ2VyIHBlciBjaGFubmVsLiBVbnNpZ25lZCBpbiBzaGFkZXIuXG5cdFIxNlNpbnQgPSBcInIxNnNpbnRcIiwgLy8gUmVkIGNoYW5uZWwgb25seS4gMTYgYml0IGludGVnZXIgcGVyIGNoYW5uZWwuIFNpZ25lZCBpbiBzaGFkZXIuXG5cdFIxNkZsb2F0ID0gXCJyMTZmbG9hdFwiLCAvLyBSZWQgY2hhbm5lbCBvbmx5LiAxNiBiaXQgZmxvYXQgcGVyIGNoYW5uZWwuIEZsb2F0IGluIHNoYWRlci5cblx0Ukc4VW5vcm0gPSBcInJnOHVub3JtXCIsIC8vIFJlZCBhbmQgZ3JlZW4gY2hhbm5lbHMuIDggYml0IGludGVnZXIgcGVyIGNoYW5uZWwuIFswLCAyNTVdIGNvbnZlcnRlZCB0by9mcm9tIGZsb2F0IFswLCAxXSBpbiBzaGFkZXIuXG5cdFJHOFNub3JtID0gXCJyZzhzbm9ybVwiLCAvLyBSZWQgYW5kIGdyZWVuIGNoYW5uZWxzLiA4IGJpdCBpbnRlZ2VyIHBlciBjaGFubmVsLiBbLTEyNywgMTI3XSBjb252ZXJ0ZWQgdG8vZnJvbSBmbG9hdCBbLTEsIDFdIGluIHNoYWRlci5cblx0Ukc4VWludCA9IFwicmc4dWludFwiLCAvLyBSZWQgYW5kIGdyZWVuIGNoYW5uZWxzLiA4IGJpdCBpbnRlZ2VyIHBlciBjaGFubmVsLiBVbnNpZ25lZCBpbiBzaGFkZXIuXG5cdFJHOFNpbnQgPSBcInJnOHNpbnRcIiwgLy8gUmVkIGFuZCBncmVlbiBjaGFubmVscy4gOCBiaXQgaW50ZWdlciBwZXIgY2hhbm5lbC4gU2lnbmVkIGluIHNoYWRlci5cblxuXHQvLyAzMi1iaXQgZm9ybWF0c1xuXHRSMzJVaW50ID0gXCJyMzJ1aW50XCIsIC8vIFJlZCBjaGFubmVsIG9ubHkuIDMyIGJpdCBpbnRlZ2VyIHBlciBjaGFubmVsLiBVbnNpZ25lZCBpbiBzaGFkZXIuXG5cdFIzMlNpbnQgPSBcInIzMnNpbnRcIiwgLy8gUmVkIGNoYW5uZWwgb25seS4gMzIgYml0IGludGVnZXIgcGVyIGNoYW5uZWwuIFNpZ25lZCBpbiBzaGFkZXIuXG5cdFIzMkZsb2F0ID0gXCJyMzJmbG9hdFwiLCAvLyBSZWQgY2hhbm5lbCBvbmx5LiAzMiBiaXQgZmxvYXQgcGVyIGNoYW5uZWwuIEZsb2F0IGluIHNoYWRlci5cblx0UkcxNlVpbnQgPSBcInJnMTZ1aW50XCIsIC8vIFJlZCBhbmQgZ3JlZW4gY2hhbm5lbHMuIDE2IGJpdCBpbnRlZ2VyIHBlciBjaGFubmVsLiBVbnNpZ25lZCBpbiBzaGFkZXIuXG5cdFJHMTZTaW50ID0gXCJyZzE2c2ludFwiLCAvLyBSZWQgYW5kIGdyZWVuIGNoYW5uZWxzLiAxNiBiaXQgaW50ZWdlciBwZXIgY2hhbm5lbC4gU2lnbmVkIGluIHNoYWRlci5cblx0UkcxNkZsb2F0ID0gXCJyZzE2ZmxvYXRcIiwgLy8gUmVkIGFuZCBncmVlbiBjaGFubmVscy4gMTYgYml0IGZsb2F0IHBlciBjaGFubmVsLiBGbG9hdCBpbiBzaGFkZXIuXG5cdFJHQkE4VW5vcm0gPSBcInJnYmE4dW5vcm1cIiwgLy8gUmVkLCBncmVlbiwgYmx1ZSwgYW5kIGFscGhhIGNoYW5uZWxzLiA4IGJpdCBpbnRlZ2VyIHBlciBjaGFubmVsLiBbMCwgMjU1XSBjb252ZXJ0ZWQgdG8vZnJvbSBmbG9hdCBbMCwgMV0gaW4gc2hhZGVyLlxuXHRSR0JBOFVub3JtU1JHQiA9IFwicmdiYTh1bm9ybS1zcmdiXCIsIC8vIFJlZCwgZ3JlZW4sIGJsdWUsIGFuZCBhbHBoYSBjaGFubmVscy4gOCBiaXQgaW50ZWdlciBwZXIgY2hhbm5lbC4gU3JnYi1jb2xvciBbMCwgMjU1XSBjb252ZXJ0ZWQgdG8vZnJvbSBsaW5lYXItY29sb3IgZmxvYXQgWzAsIDFdIGluIHNoYWRlci5cblx0UkdCQThTbm9ybSA9IFwicmdiYThzbm9ybVwiLCAvLyBSZWQsIGdyZWVuLCBibHVlLCBhbmQgYWxwaGEgY2hhbm5lbHMuIDggYml0IGludGVnZXIgcGVyIGNoYW5uZWwuIFstMTI3LCAxMjddIGNvbnZlcnRlZCB0by9mcm9tIGZsb2F0IFstMSwgMV0gaW4gc2hhZGVyLlxuXHRSR0JBOFVpbnQgPSBcInJnYmE4dWludFwiLCAvLyBSZWQsIGdyZWVuLCBibHVlLCBhbmQgYWxwaGEgY2hhbm5lbHMuIDggYml0IGludGVnZXIgcGVyIGNoYW5uZWwuIFVuc2lnbmVkIGluIHNoYWRlci5cblx0UkdCQThTaW50ID0gXCJyZ2JhOHNpbnRcIiwgLy8gUmVkLCBncmVlbiwgYmx1ZSwgYW5kIGFscGhhIGNoYW5uZWxzLiA4IGJpdCBpbnRlZ2VyIHBlciBjaGFubmVsLiBTaWduZWQgaW4gc2hhZGVyLlxuXHRCR1JBOFVub3JtID0gXCJiZ3JhOHVub3JtXCIsIC8vIEJsdWUsIGdyZWVuLCByZWQsIGFuZCBhbHBoYSBjaGFubmVscy4gOCBiaXQgaW50ZWdlciBwZXIgY2hhbm5lbC4gWzAsIDI1NV0gY29udmVydGVkIHRvL2Zyb20gZmxvYXQgWzAsIDFdIGluIHNoYWRlci5cblx0QkdSQThVbm9ybVNSR0IgPSBcImJncmE4dW5vcm0tc3JnYlwiLCAvLyBCbHVlLCBncmVlbiwgcmVkLCBhbmQgYWxwaGEgY2hhbm5lbHMuIDggYml0IGludGVnZXIgcGVyIGNoYW5uZWwuIFNyZ2ItY29sb3IgWzAsIDI1NV0gY29udmVydGVkIHRvL2Zyb20gbGluZWFyLWNvbG9yIGZsb2F0IFswLCAxXSBpbiBzaGFkZXIuXG5cdC8vIFBhY2tlZCAzMi1iaXQgZm9ybWF0c1xuXHRSR0I5RTVVRmxvYXQgPSBcInJnYjllNXVmbG9hdFwiLCAvLyBQYWNrZWQgdW5zaWduZWQgZmxvYXQgd2l0aCA5IGJpdHMgbWFudGlzYSBmb3IgZWFjaCBSR0IgY29tcG9uZW50LCB0aGVuIGEgY29tbW9uIDUgYml0cyBleHBvbmVudFxuXHRSR0IxMEEyVW5vcm0gPSBcInJnYjEwYTJ1bm9ybVwiLCAvLyBSZWQsIGdyZWVuLCBibHVlLCBhbmQgYWxwaGEgY2hhbm5lbHMuIDEwIGJpdCBpbnRlZ2VyIGZvciBSR0IgY2hhbm5lbHMsIDIgYml0IGludGVnZXIgZm9yIGFscGhhIGNoYW5uZWwuIFswLCAxMDIzXSAoWzAsIDNdIGZvciBhbHBoYSkgY29udmVydGVkIHRvL2Zyb20gZmxvYXQgWzAsIDFdIGluIHNoYWRlci5cblx0UkcxMUIxMFVGbG9hdCA9IFwicmcxMWIxMHVmbG9hdFwiLCAvLyBSZWQsIGdyZWVuLCBhbmQgYmx1ZSBjaGFubmVscy4gMTEgYml0IGZsb2F0IHdpdGggbm8gc2lnbiBiaXQgZm9yIFJHIGNoYW5uZWxzLiAxMCBiaXQgZmxvYXQgd2l0aCBubyBzaWduIGJpdCBmb3IgYmx1ZSBjaGFubmVsLiBGbG9hdCBpbiBzaGFkZXIuXG5cblx0Ly8gNjQtYml0IGZvcm1hdHNcblx0UkczMlVpbnQgPSBcInJnMzJ1aW50XCIsIC8vIFJlZCBhbmQgZ3JlZW4gY2hhbm5lbHMuIDMyIGJpdCBpbnRlZ2VyIHBlciBjaGFubmVsLiBVbnNpZ25lZCBpbiBzaGFkZXIuXG5cdFJHMzJTaW50ID0gXCJyZzMyc2ludFwiLCAvLyBSZWQgYW5kIGdyZWVuIGNoYW5uZWxzLiAzMiBiaXQgaW50ZWdlciBwZXIgY2hhbm5lbC4gU2lnbmVkIGluIHNoYWRlci5cblx0UkczMkZsb2F0ID0gXCJyZzMyZmxvYXRcIiwgLy8gUmVkIGFuZCBncmVlbiBjaGFubmVscy4gMzIgYml0IGZsb2F0IHBlciBjaGFubmVsLiBGbG9hdCBpbiBzaGFkZXIuXG5cdFJHQkExNlVpbnQgPSBcInJnYmExNnVpbnRcIiwgLy8gUmVkLCBncmVlbiwgYmx1ZSwgYW5kIGFscGhhIGNoYW5uZWxzLiAxNiBiaXQgaW50ZWdlciBwZXIgY2hhbm5lbC4gVW5zaWduZWQgaW4gc2hhZGVyLlxuXHRSR0JBMTZTaW50ID0gXCJyZ2JhMTZzaW50XCIsIC8vIFJlZCwgZ3JlZW4sIGJsdWUsIGFuZCBhbHBoYSBjaGFubmVscy4gMTYgYml0IGludGVnZXIgcGVyIGNoYW5uZWwuIFNpZ25lZCBpbiBzaGFkZXIuXG5cdFJHQkExNkZsb2F0ID0gXCJyZ2JhMTZmbG9hdFwiLCAvLyBSZWQsIGdyZWVuLCBibHVlLCBhbmQgYWxwaGEgY2hhbm5lbHMuIDE2IGJpdCBmbG9hdCBwZXIgY2hhbm5lbC4gRmxvYXQgaW4gc2hhZGVyLlxuXG5cdC8vIDEyOC1iaXQgZm9ybWF0c1xuXHRSR0JBMzJVaW50ID0gXCJyZ2JhMzJ1aW50XCIsIC8vIFJlZCwgZ3JlZW4sIGJsdWUsIGFuZCBhbHBoYSBjaGFubmVscy4gMzIgYml0IGludGVnZXIgcGVyIGNoYW5uZWwuIFVuc2lnbmVkIGluIHNoYWRlci5cblx0UkdCQTMyU2ludCA9IFwicmdiYTMyc2ludFwiLCAvLyBSZWQsIGdyZWVuLCBibHVlLCBhbmQgYWxwaGEgY2hhbm5lbHMuIDMyIGJpdCBpbnRlZ2VyIHBlciBjaGFubmVsLiBTaWduZWQgaW4gc2hhZGVyLlxuXHRSR0JBMzJGbG9hdCA9IFwicmdiYTMyZmxvYXRcIiwgLy8gUmVkLCBncmVlbiwgYmx1ZSwgYW5kIGFscGhhIGNoYW5uZWxzLiAzMiBiaXQgZmxvYXQgcGVyIGNoYW5uZWwuIEZsb2F0IGluIHNoYWRlci5cblxuXHQvLyBEZXB0aCBhbmQgc3RlbmNpbCBmb3JtYXRzXG5cdFN0ZW5jaWw4ID0gXCJzdGVuY2lsOFwiLFxuXHREZXB0aDE2VW5vcm0gPSBcImRlcHRoMTZ1bm9ybVwiLFxuXHREZXB0aDI0UGx1cyA9IFwiZGVwdGgyNHBsdXNcIiwgLy8gU3BlY2lhbCBkZXB0aCBmb3JtYXQgd2l0aCBhdCBsZWFzdCAyNCBiaXQgaW50ZWdlciBkZXB0aC5cblx0RGVwdGgyNFBsdXNTdGVuY2lsOCA9IFwiZGVwdGgyNHBsdXMtc3RlbmNpbDhcIiwgLy8gU3BlY2lhbCBkZXB0aC9zdGVuY2lsIGZvcm1hdCB3aXRoIGF0IGxlYXN0IDI0IGJpdCBpbnRlZ2VyIGRlcHRoIGFuZCA4IGJpdHMgaW50ZWdlciBzdGVuY2lsLlxuXHREZXB0aDMyRmxvYXQgPSBcImRlcHRoMzJmbG9hdFwiLCAvLyBTcGVjaWFsIGRlcHRoIGZvcm1hdCB3aXRoIDMyIGJpdCBmbG9hdGluZyBwb2ludCBkZXB0aC5cblxuXHQvLyBCQyBjb21wcmVzc2VkIGZvcm1hdHMgdXNhYmxlIGlmIFwidGV4dHVyZS1jb21wcmVzc2lvbi1iY1wiIGlzIGJvdGhcblx0Ly8gc3VwcG9ydGVkIGJ5IHRoZSBkZXZpY2UvdXNlciBhZ2VudCBhbmQgZW5hYmxlZCBpbiByZXF1ZXN0RGV2aWNlLlxuXHRCQzFSR0JBVW5vcm0gPSBcImJjMS1yZ2JhLXVub3JtXCIsIC8vIDR4NCBibG9jayBjb21wcmVzc2VkIHRleHR1cmUuIDggYnl0ZXMgcGVyIGJsb2NrICg0IGJpdC9weCkuIDQgY29sb3IgKyBhbHBoYSBwYWxsZXQuIDUgYml0IFIgKyA2IGJpdCBHICsgNSBiaXQgQiArIDEgYml0IGFscGhhLiBBbHNvIGtub3duIGFzIERYVDEuXG5cdEJDMVJHQkFVbm9ybVNSR0IgPSBcImJjMS1yZ2JhLXVub3JtLXNyZ2JcIiwgLy8gNHg0IGJsb2NrIGNvbXByZXNzZWQgdGV4dHVyZS4gOCBieXRlcyBwZXIgYmxvY2sgKDQgYml0L3B4KS4gNCBjb2xvciArIGFscGhhIHBhbGxldC4gNSBiaXQgUiArIDYgYml0IEcgKyA1IGJpdCBCICsgMSBiaXQgYWxwaGEuIEFsc28ga25vd24gYXMgRFhUMS5cblx0QkMyUkdCQVVub3JtID0gXCJiYzItcmdiYS11bm9ybVwiLCAvLyA0eDQgYmxvY2sgY29tcHJlc3NlZCB0ZXh0dXJlLiAxNiBieXRlcyBwZXIgYmxvY2sgKDggYml0L3B4KS4gNCBjb2xvciBwYWxsZXQuIDUgYml0IFIgKyA2IGJpdCBHICsgNSBiaXQgQiArIDQgYml0IGFscGhhLiBBbHNvIGtub3duIGFzIERYVDMuXG5cdEJDMlJHQkFVbm9ybVNSR0IgPSBcImJjMi1yZ2JhLXVub3JtLXNyZ2JcIiwgLy8gNHg0IGJsb2NrIGNvbXByZXNzZWQgdGV4dHVyZS4gMTYgYnl0ZXMgcGVyIGJsb2NrICg4IGJpdC9weCkuIDQgY29sb3IgcGFsbGV0LiA1IGJpdCBSICsgNiBiaXQgRyArIDUgYml0IEIgKyA0IGJpdCBhbHBoYS4gQWxzbyBrbm93biBhcyBEWFQzLlxuXHRCQzNSR0JBVW5vcm0gPSBcImJjMy1yZ2JhLXVub3JtXCIsIC8vIDR4NCBibG9jayBjb21wcmVzc2VkIHRleHR1cmUuIDE2IGJ5dGVzIHBlciBibG9jayAoOCBiaXQvcHgpLiA0IGNvbG9yIHBhbGxldCArIDggYWxwaGEgcGFsbGV0LiA1IGJpdCBSICsgNiBiaXQgRyArIDUgYml0IEIgKyA4IGJpdCBhbHBoYS4gQWxzbyBrbm93biBhcyBEWFQ1LlxuXHRCQzNSR0JBVW5vcm1TUkdCID0gXCJiYzMtcmdiYS11bm9ybS1zcmdiXCIsIC8vIDR4NCBibG9jayBjb21wcmVzc2VkIHRleHR1cmUuIDE2IGJ5dGVzIHBlciBibG9jayAoOCBiaXQvcHgpLiA0IGNvbG9yIHBhbGxldCArIDggYWxwaGEgcGFsbGV0LiA1IGJpdCBSICsgNiBiaXQgRyArIDUgYml0IEIgKyA4IGJpdCBhbHBoYS4gQWxzbyBrbm93biBhcyBEWFQ1LlxuXHRCQzRSVW5vcm0gPSBcImJjNC1yLXVub3JtXCIsIC8vIDR4NCBibG9jayBjb21wcmVzc2VkIHRleHR1cmUuIDggYnl0ZXMgcGVyIGJsb2NrICg0IGJpdC9weCkuIDggY29sb3IgcGFsbGV0LiA4IGJpdCBSLiBBbHNvIGtub3duIGFzIFJHVEMxLlxuXHRCQzRSU25vcm0gPSBcImJjNC1yLXNub3JtXCIsIC8vIDR4NCBibG9jayBjb21wcmVzc2VkIHRleHR1cmUuIDggYnl0ZXMgcGVyIGJsb2NrICg0IGJpdC9weCkuIDggY29sb3IgcGFsbGV0LiA4IGJpdCBSLiBBbHNvIGtub3duIGFzIFJHVEMxLlxuXHRCQzVSR1Vub3JtID0gXCJiYzUtcmctdW5vcm1cIiwgLy8gNHg0IGJsb2NrIGNvbXByZXNzZWQgdGV4dHVyZS4gMTYgYnl0ZXMgcGVyIGJsb2NrICg4IGJpdC9weCkuIDggY29sb3IgcmVkIHBhbGxldCArIDggY29sb3IgZ3JlZW4gcGFsbGV0LiA4IGJpdCBSRy4gQWxzbyBrbm93biBhcyBSR1RDMi5cblx0QkM1UkdTbm9ybSA9IFwiYmM1LXJnLXNub3JtXCIsIC8vIDR4NCBibG9jayBjb21wcmVzc2VkIHRleHR1cmUuIDE2IGJ5dGVzIHBlciBibG9jayAoOCBiaXQvcHgpLiA4IGNvbG9yIHJlZCBwYWxsZXQgKyA4IGNvbG9yIGdyZWVuIHBhbGxldC4gOCBiaXQgUkcuIEFsc28ga25vd24gYXMgUkdUQzIuXG5cdEJDNkhSR0JVRmxvYXQgPSBcImJjNmgtcmdiLXVmbG9hdFwiLCAvLyA0eDQgYmxvY2sgY29tcHJlc3NlZCB0ZXh0dXJlLiAxNiBieXRlcyBwZXIgYmxvY2sgKDggYml0L3B4KS4gVmFyaWFibGUgc2l6ZWQgcGFsbGV0LiAxNiBiaXQgdW5zaWduZWQgZmxvYXQgUkdCLiBGbG9hdCBpbiBzaGFkZXIuIEFsc28ga25vd24gYXMgQlBUQyAoZmxvYXQpLlxuXHRCQzZIUkdCRmxvYXQgPSBcImJjNmgtcmdiLWZsb2F0XCIsIC8vIDR4NCBibG9jayBjb21wcmVzc2VkIHRleHR1cmUuIDE2IGJ5dGVzIHBlciBibG9jayAoOCBiaXQvcHgpLiBWYXJpYWJsZSBzaXplZCBwYWxsZXQuIDE2IGJpdCBzaWduZWQgZmxvYXQgUkdCLiBGbG9hdCBpbiBzaGFkZXIuIEFsc28ga25vd24gYXMgQlBUQyAoZmxvYXQpLlxuXHRCQzdSR0JBVW5vcm0gPSBcImJjNy1yZ2JhLXVub3JtXCIsIC8vIDR4NCBibG9jayBjb21wcmVzc2VkIHRleHR1cmUuIDE2IGJ5dGVzIHBlciBibG9jayAoOCBiaXQvcHgpLiBWYXJpYWJsZSBzaXplZCBwYWxsZXQuIDggYml0IGludGVnZXIgUkdCQS4gQWxzbyBrbm93biBhcyBCUFRDICh1bm9ybSkuXG5cdEJDN1JHQkFVbm9ybVNSR0IgPSBcImJjNy1yZ2JhLXVub3JtLXNyZ2JcIiwgLy8gNHg0IGJsb2NrIGNvbXByZXNzZWQgdGV4dHVyZS4gMTYgYnl0ZXMgcGVyIGJsb2NrICg4IGJpdC9weCkuIFZhcmlhYmxlIHNpemVkIHBhbGxldC4gOCBiaXQgaW50ZWdlciBSR0JBLiBBbHNvIGtub3duIGFzIEJQVEMgKHVub3JtKS5cblxuXHQvLyBFVEMyIGNvbXByZXNzZWQgZm9ybWF0cyB1c2FibGUgaWYgXCJ0ZXh0dXJlLWNvbXByZXNzaW9uLWV0YzJcIiBpcyBib3RoXG5cdC8vIHN1cHBvcnRlZCBieSB0aGUgZGV2aWNlL3VzZXIgYWdlbnQgYW5kIGVuYWJsZWQgaW4gcmVxdWVzdERldmljZS5cblx0RVRDMlJHQjhVbm9ybSA9IFwiZXRjMi1yZ2I4dW5vcm1cIiwgLy8gNHg0IGJsb2NrIGNvbXByZXNzZWQgdGV4dHVyZS4gOCBieXRlcyBwZXIgYmxvY2sgKDQgYml0L3B4KS4gQ29tcGxleCBwYWxsZXQuIDggYml0IGludGVnZXIgUkdCLlxuXHRFVEMyUkdCOFVub3JtU1JHQiA9IFwiZXRjMi1yZ2I4dW5vcm0tc3JnYlwiLCAvLyA0eDQgYmxvY2sgY29tcHJlc3NlZCB0ZXh0dXJlLiA4IGJ5dGVzIHBlciBibG9jayAoNCBiaXQvcHgpLiBDb21wbGV4IHBhbGxldC4gOCBiaXQgaW50ZWdlciBSR0IuXG5cdEVUQzJSR0I4QTFVbm9ybSA9IFwiZXRjMi1yZ2I4YTF1bm9ybVwiLCAvLyA0eDQgYmxvY2sgY29tcHJlc3NlZCB0ZXh0dXJlLiA4IGJ5dGVzIHBlciBibG9jayAoNCBiaXQvcHgpLiBDb21wbGV4IHBhbGxldC4gOCBiaXQgaW50ZWdlciBSR0IgKyAxIGJpdCBhbHBoYS5cblx0RVRDMlJHQjhBMVVub3JtU1JHQiA9IFwiZXRjMi1yZ2I4YTF1bm9ybS1zcmdiXCIsIC8vIDR4NCBibG9jayBjb21wcmVzc2VkIHRleHR1cmUuIDggYnl0ZXMgcGVyIGJsb2NrICg0IGJpdC9weCkuIENvbXBsZXggcGFsbGV0LiA4IGJpdCBpbnRlZ2VyIFJHQiArIDEgYml0IGFscGhhLlxuXHRFVEMyUkdCQThVbm9ybSA9IFwiZXRjMi1yZ2JhOHVub3JtXCIsIC8vIDR4NCBibG9jayBjb21wcmVzc2VkIHRleHR1cmUuIDE2IGJ5dGVzIHBlciBibG9jayAoOCBiaXQvcHgpLiBDb21wbGV4IHBhbGxldC4gOCBiaXQgaW50ZWdlciBSR0IgKyA4IGJpdCBhbHBoYS5cblx0RVRDMlJHQkE4VW5vcm1TUkdCID0gXCJldGMyLXJnYmE4dW5vcm0tc3JnYlwiLCAvLyA0eDQgYmxvY2sgY29tcHJlc3NlZCB0ZXh0dXJlLiAxNiBieXRlcyBwZXIgYmxvY2sgKDggYml0L3B4KS4gQ29tcGxleCBwYWxsZXQuIDggYml0IGludGVnZXIgUkdCICsgOCBiaXQgYWxwaGEuXG5cdEVBQ1IxMVVub3JtID0gXCJlYWMtcjExdW5vcm1cIiwgLy8gNHg0IGJsb2NrIGNvbXByZXNzZWQgdGV4dHVyZS4gOCBieXRlcyBwZXIgYmxvY2sgKDQgYml0L3B4KS4gQ29tcGxleCBwYWxsZXQuIDExIGJpdCBpbnRlZ2VyIFIuXG5cdEVBQ1IxMVNub3JtID0gXCJlYWMtcjExc25vcm1cIiwgLy8gNHg0IGJsb2NrIGNvbXByZXNzZWQgdGV4dHVyZS4gOCBieXRlcyBwZXIgYmxvY2sgKDQgYml0L3B4KS4gQ29tcGxleCBwYWxsZXQuIDExIGJpdCBpbnRlZ2VyIFIuXG5cdEVBQ1JHMTFVbm9ybSA9IFwiZWFjLXJnMTF1bm9ybVwiLCAvLyA0eDQgYmxvY2sgY29tcHJlc3NlZCB0ZXh0dXJlLiAxNiBieXRlcyBwZXIgYmxvY2sgKDggYml0L3B4KS4gQ29tcGxleCBwYWxsZXQuIDExIGJpdCBpbnRlZ2VyIFIgKyAxMSBiaXQgaW50ZWdlciBHLlxuXHRFQUNSRzExU25vcm0gPSBcImVhYy1yZzExc25vcm1cIiwgLy8gNHg0IGJsb2NrIGNvbXByZXNzZWQgdGV4dHVyZS4gMTYgYnl0ZXMgcGVyIGJsb2NrICg4IGJpdC9weCkuIENvbXBsZXggcGFsbGV0LiAxMSBiaXQgaW50ZWdlciBSICsgMTEgYml0IGludGVnZXIgRy5cblxuXHQvLyBBU1RDIGNvbXByZXNzZWQgZm9ybWF0cyB1c2FibGUgaWYgXCJ0ZXh0dXJlLWNvbXByZXNzaW9uLWFzdGNcIiBpcyBib3RoXG5cdC8vIHN1cHBvcnRlZCBieSB0aGUgZGV2aWNlL3VzZXIgYWdlbnQgYW5kIGVuYWJsZWQgaW4gcmVxdWVzdERldmljZS5cblx0QVNUQzR4NFVub3JtID0gXCJhc3RjLTR4NC11bm9ybVwiLCAvLyA0eDQgYmxvY2sgY29tcHJlc3NlZCB0ZXh0dXJlLiAxNiBieXRlcyBwZXIgYmxvY2sgKDggYml0L3B4KS4gQ29tcGxleCBwYWxsZXQuIDggYml0IGludGVnZXIgUkdCQS5cblx0QVNUQzR4NFVub3JtU1JHQiA9IFwiYXN0Yy00eDQtdW5vcm0tc3JnYlwiLCAvLyA0eDQgYmxvY2sgY29tcHJlc3NlZCB0ZXh0dXJlLiAxNiBieXRlcyBwZXIgYmxvY2sgKDggYml0L3B4KS4gQ29tcGxleCBwYWxsZXQuIDggYml0IGludGVnZXIgUkdCQS5cblx0QVNUQzV4NFVub3JtID0gXCJhc3RjLTV4NC11bm9ybVwiLCAvLyA1eDQgYmxvY2sgY29tcHJlc3NlZCB0ZXh0dXJlLiAxNiBieXRlcyBwZXIgYmxvY2sgKDYuNCBiaXQvcHgpLiBDb21wbGV4IHBhbGxldC4gOCBiaXQgaW50ZWdlciBSR0JBLlxuXHRBU1RDNXg0VW5vcm1TUkdCID0gXCJhc3RjLTV4NC11bm9ybS1zcmdiXCIsIC8vIDV4NCBibG9jayBjb21wcmVzc2VkIHRleHR1cmUuIDE2IGJ5dGVzIHBlciBibG9jayAoNi40IGJpdC9weCkuIENvbXBsZXggcGFsbGV0LiA4IGJpdCBpbnRlZ2VyIFJHQkEuXG5cdEFTVEM1eDVVbm9ybSA9IFwiYXN0Yy01eDUtdW5vcm1cIiwgLy8gNXg1IGJsb2NrIGNvbXByZXNzZWQgdGV4dHVyZS4gMTYgYnl0ZXMgcGVyIGJsb2NrICg1LjEyIGJpdC9weCkuIENvbXBsZXggcGFsbGV0LiA4IGJpdCBpbnRlZ2VyIFJHQkEuXG5cdEFTVEM1eDVVbm9ybVNSR0IgPSBcImFzdGMtNXg1LXVub3JtLXNyZ2JcIiwgLy8gNXg1IGJsb2NrIGNvbXByZXNzZWQgdGV4dHVyZS4gMTYgYnl0ZXMgcGVyIGJsb2NrICg1LjEyIGJpdC9weCkuIENvbXBsZXggcGFsbGV0LiA4IGJpdCBpbnRlZ2VyIFJHQkEuXG5cdEFTVEM2eDVVbm9ybSA9IFwiYXN0Yy02eDUtdW5vcm1cIiwgLy8gNng1IGJsb2NrIGNvbXByZXNzZWQgdGV4dHVyZS4gMTYgYnl0ZXMgcGVyIGJsb2NrICg0LjI3IGJpdC9weCkuIENvbXBsZXggcGFsbGV0LiA4IGJpdCBpbnRlZ2VyIFJHQkEuXG5cdEFTVEM2eDVVbm9ybVNSR0IgPSBcImFzdGMtNng1LXVub3JtLXNyZ2JcIiwgLy8gNng1IGJsb2NrIGNvbXByZXNzZWQgdGV4dHVyZS4gMTYgYnl0ZXMgcGVyIGJsb2NrICg0LjI3IGJpdC9weCkuIENvbXBsZXggcGFsbGV0LiA4IGJpdCBpbnRlZ2VyIFJHQkEuXG5cdEFTVEM2eDZVbm9ybSA9IFwiYXN0Yy02eDYtdW5vcm1cIiwgLy8gNng2IGJsb2NrIGNvbXByZXNzZWQgdGV4dHVyZS4gMTYgYnl0ZXMgcGVyIGJsb2NrICgzLjU2IGJpdC9weCkuIENvbXBsZXggcGFsbGV0LiA4IGJpdCBpbnRlZ2VyIFJHQkEuXG5cdEFTVEM2eDZVbm9ybVNSR0IgPSBcImFzdGMtNng2LXVub3JtLXNyZ2JcIiwgLy8gNng2IGJsb2NrIGNvbXByZXNzZWQgdGV4dHVyZS4gMTYgYnl0ZXMgcGVyIGJsb2NrICgzLjU2IGJpdC9weCkuIENvbXBsZXggcGFsbGV0LiA4IGJpdCBpbnRlZ2VyIFJHQkEuXG5cdEFTVEM4eDVVbm9ybSA9IFwiYXN0Yy04eDUtdW5vcm1cIiwgLy8gOHg1IGJsb2NrIGNvbXByZXNzZWQgdGV4dHVyZS4gMTYgYnl0ZXMgcGVyIGJsb2NrICgzLjIgYml0L3B4KS4gQ29tcGxleCBwYWxsZXQuIDggYml0IGludGVnZXIgUkdCQS5cblx0QVNUQzh4NVVub3JtU1JHQiA9IFwiYXN0Yy04eDUtdW5vcm0tc3JnYlwiLCAvLyA4eDUgYmxvY2sgY29tcHJlc3NlZCB0ZXh0dXJlLiAxNiBieXRlcyBwZXIgYmxvY2sgKDMuMiBiaXQvcHgpLiBDb21wbGV4IHBhbGxldC4gOCBiaXQgaW50ZWdlciBSR0JBLlxuXHRBU1RDOHg2VW5vcm0gPSBcImFzdGMtOHg2LXVub3JtXCIsIC8vIDh4NiBibG9jayBjb21wcmVzc2VkIHRleHR1cmUuIDE2IGJ5dGVzIHBlciBibG9jayAoMi42NyBiaXQvcHgpLiBDb21wbGV4IHBhbGxldC4gOCBiaXQgaW50ZWdlciBSR0JBLlxuXHRBU1RDOHg2VW5vcm1TUkdCID0gXCJhc3RjLTh4Ni11bm9ybS1zcmdiXCIsIC8vIDh4NiBibG9jayBjb21wcmVzc2VkIHRleHR1cmUuIDE2IGJ5dGVzIHBlciBibG9jayAoMi42NyBiaXQvcHgpLiBDb21wbGV4IHBhbGxldC4gOCBiaXQgaW50ZWdlciBSR0JBLlxuXHRBU1RDOHg4VW5vcm0gPSBcImFzdGMtOHg4LXVub3JtXCIsIC8vIDh4OCBibG9jayBjb21wcmVzc2VkIHRleHR1cmUuIDE2IGJ5dGVzIHBlciBibG9jayAoMiBiaXQvcHgpLiBDb21wbGV4IHBhbGxldC4gOCBiaXQgaW50ZWdlciBSR0JBLlxuXHRBU1RDOHg4VW5vcm1TUkdCID0gXCJhc3RjLTh4OC11bm9ybS1zcmdiXCIsIC8vIDh4OCBibG9jayBjb21wcmVzc2VkIHRleHR1cmUuIDE2IGJ5dGVzIHBlciBibG9jayAoMiBiaXQvcHgpLiBDb21wbGV4IHBhbGxldC4gOCBiaXQgaW50ZWdlciBSR0JBLlxuXHRBU1RDMTB4NVVub3JtID0gXCJhc3RjLTEweDUtdW5vcm1cIiwgLy8gMTB4NSBibG9jayBjb21wcmVzc2VkIHRleHR1cmUuIDE2IGJ5dGVzIHBlciBibG9jayAoMi41NiBiaXQvcHgpLiBDb21wbGV4IHBhbGxldC4gOCBiaXQgaW50ZWdlciBSR0JBLlxuXHRBU1RDMTB4NVVub3JtU1JHQiA9IFwiYXN0Yy0xMHg1LXVub3JtLXNyZ2JcIiwgLy8gMTB4NSBibG9jayBjb21wcmVzc2VkIHRleHR1cmUuIDE2IGJ5dGVzIHBlciBibG9jayAoMi41NiBiaXQvcHgpLiBDb21wbGV4IHBhbGxldC4gOCBiaXQgaW50ZWdlciBSR0JBLlxuXHRBU1RDMTB4NlVub3JtID0gXCJhc3RjLTEweDYtdW5vcm1cIiwgLy8gMTB4NiBibG9jayBjb21wcmVzc2VkIHRleHR1cmUuIDE2IGJ5dGVzIHBlciBibG9jayAoMi4xMyBiaXQvcHgpLiBDb21wbGV4IHBhbGxldC4gOCBiaXQgaW50ZWdlciBSR0JBLlxuXHRBU1RDMTB4NlVub3JtU1JHQiA9IFwiYXN0Yy0xMHg2LXVub3JtLXNyZ2JcIiwgLy8gMTB4NiBibG9jayBjb21wcmVzc2VkIHRleHR1cmUuIDE2IGJ5dGVzIHBlciBibG9jayAoMi4xMyBiaXQvcHgpLiBDb21wbGV4IHBhbGxldC4gOCBiaXQgaW50ZWdlciBSR0JBLlxuXHRBU1RDMTB4OFVub3JtID0gXCJhc3RjLTEweDgtdW5vcm1cIiwgLy8gMTB4OCBibG9jayBjb21wcmVzc2VkIHRleHR1cmUuIDE2IGJ5dGVzIHBlciBibG9jayAoMS42IGJpdC9weCkuIENvbXBsZXggcGFsbGV0LiA4IGJpdCBpbnRlZ2VyIFJHQkEuXG5cdEFTVEMxMHg4VW5vcm1TUkdCID0gXCJhc3RjLTEweDgtdW5vcm0tc3JnYlwiLCAvLyAxMHg4IGJsb2NrIGNvbXByZXNzZWQgdGV4dHVyZS4gMTYgYnl0ZXMgcGVyIGJsb2NrICgxLjYgYml0L3B4KS4gQ29tcGxleCBwYWxsZXQuIDggYml0IGludGVnZXIgUkdCQS5cblx0QVNUQzEweDEwVW5vcm0gPSBcImFzdGMtMTB4MTAtdW5vcm1cIiwgLy8gMTB4MTAgYmxvY2sgY29tcHJlc3NlZCB0ZXh0dXJlLiAxNiBieXRlcyBwZXIgYmxvY2sgKDEuMjggYml0L3B4KS4gQ29tcGxleCBwYWxsZXQuIDggYml0IGludGVnZXIgUkdCQS5cblx0QVNUQzEweDEwVW5vcm1TUkdCID0gXCJhc3RjLTEweDEwLXVub3JtLXNyZ2JcIiwgLy8gMTB4MTAgYmxvY2sgY29tcHJlc3NlZCB0ZXh0dXJlLiAxNiBieXRlcyBwZXIgYmxvY2sgKDEuMjggYml0L3B4KS4gQ29tcGxleCBwYWxsZXQuIDggYml0IGludGVnZXIgUkdCQS5cblx0QVNUQzEyeDEwVW5vcm0gPSBcImFzdGMtMTJ4MTAtdW5vcm1cIiwgLy8gMTJ4MTAgYmxvY2sgY29tcHJlc3NlZCB0ZXh0dXJlLiAxNiBieXRlcyBwZXIgYmxvY2sgKDEuMDcgYml0L3B4KS4gQ29tcGxleCBwYWxsZXQuIDggYml0IGludGVnZXIgUkdCQS5cblx0QVNUQzEyeDEwVW5vcm1TUkdCID0gXCJhc3RjLTEyeDEwLXVub3JtLXNyZ2JcIiwgLy8gMTJ4MTAgYmxvY2sgY29tcHJlc3NlZCB0ZXh0dXJlLiAxNiBieXRlcyBwZXIgYmxvY2sgKDEuMDcgYml0L3B4KS4gQ29tcGxleCBwYWxsZXQuIDggYml0IGludGVnZXIgUkdCQS5cblx0QVNUQzEyeDEyVW5vcm0gPSBcImFzdGMtMTJ4MTItdW5vcm1cIiwgLy8gMTJ4MTIgYmxvY2sgY29tcHJlc3NlZCB0ZXh0dXJlLiAxNiBieXRlcyBwZXIgYmxvY2sgKDAuODkgYml0L3B4KS4gQ29tcGxleCBwYWxsZXQuIDggYml0IGludGVnZXIgUkdCQS5cblx0QVNUQzEyeDEyVW5vcm1TUkdCID0gXCJhc3RjLTEyeDEyLXVub3JtLXNyZ2JcIiwgLy8gMTJ4MTIgYmxvY2sgY29tcHJlc3NlZCB0ZXh0dXJlLiAxNiBieXRlcyBwZXIgYmxvY2sgKDAuODkgYml0L3B4KS4gQ29tcGxleCBwYWxsZXQuIDggYml0IGludGVnZXIgUkdCQS5cblxuXHQvLyBcImRlcHRoMjR1bm9ybS1zdGVuY2lsOFwiIGZlYXR1cmVcblx0RGVwdGgyNFVub3JtU3RlbmNpbDggPSBcImRlcHRoMjR1bm9ybS1zdGVuY2lsOFwiLFxuXG5cdC8vIFwiZGVwdGgzMmZsb2F0LXN0ZW5jaWw4XCIgZmVhdHVyZVxuXHREZXB0aDMyRmxvYXRTdGVuY2lsOCA9IFwiZGVwdGgzMmZsb2F0LXN0ZW5jaWw4XCJcbn1cblxuLyoqIEBpbnRlcm5hbCAqL1xuZXhwb3J0IGVudW0gQWRkcmVzc01vZGUge1xuXHRDbGFtcFRvRWRnZSA9IFwiY2xhbXAtdG8tZWRnZVwiLFxuXHRSZXBlYXQgPSBcInJlcGVhdFwiLFxuXHRNaXJyb3JSZXBlYXQgPSBcIm1pcnJvci1yZXBlYXRcIlxufVxuXG4vKiogQGludGVybmFsICovXG5leHBvcnQgZW51bSBGaWx0ZXJNb2RlIHtcblx0TmVhcmVzdCA9IFwibmVhcmVzdFwiLFxuXHRMaW5lYXIgPSBcImxpbmVhclwiXG59XG5cbi8qKiBAaW50ZXJuYWwgKi9cbmV4cG9ydCBlbnVtIENvbXBhcmVGdW5jdGlvbiB7XG5cdE5ldmVyID0gXCJuZXZlclwiLFxuXHRMZXNzID0gXCJsZXNzXCIsXG5cdEVxdWFsID0gXCJlcXVhbFwiLFxuXHRMZXNzRXF1YWwgPSBcImxlc3MtZXF1YWxcIixcblx0R3JlYXRlciA9IFwiZ3JlYXRlclwiLFxuXHROb3RFcXVhbCA9IFwibm90LWVxdWFsXCIsXG5cdEdyZWF0ZXJFcXVhbCA9IFwiZ3JlYXRlci1lcXVhbFwiLFxuXHRBbHdheXMgPSBcImFsd2F5c1wiXG59XG5cbi8qKiBAaW50ZXJuYWwgKi9cbmV4cG9ydCBlbnVtIFNoYWRlclN0YWdlIHtcblx0VmVydGV4ID0gMSxcblx0RnJhZ21lbnQgPSAyLFxuXHRDb21wdXRlID0gNFxufVxuXG4vKiogQGludGVybmFsICovXG5leHBvcnQgZW51bSBCdWZmZXJCaW5kaW5nVHlwZSB7XG5cdFVuaWZvcm0gPSBcInVuaWZvcm1cIixcblx0U3RvcmFnZSA9IFwic3RvcmFnZVwiLFxuXHRSZWFkT25seVN0b3JhZ2UgPSBcInJlYWQtb25seS1zdG9yYWdlXCJcbn1cblxuLyoqIEBpbnRlcm5hbCAqL1xuZXhwb3J0IGVudW0gU2FtcGxlckJpbmRpbmdUeXBlIHtcblx0RmlsdGVyaW5nID0gXCJmaWx0ZXJpbmdcIixcblx0Tm9uRmlsdGVyaW5nID0gXCJub24tZmlsdGVyaW5nXCIsXG5cdENvbXBhcmlzb24gPSBcImNvbXBhcmlzb25cIlxufVxuXG4vKiogQGludGVybmFsICovXG5leHBvcnQgZW51bSBUZXh0dXJlU2FtcGxlVHlwZSB7XG5cdEZsb2F0ID0gXCJmbG9hdFwiLFxuXHRVbmZpbHRlcmFibGVGbG9hdCA9IFwidW5maWx0ZXJhYmxlLWZsb2F0XCIsXG5cdERlcHRoID0gXCJkZXB0aFwiLFxuXHRTaW50ID0gXCJzaW50XCIsXG5cdFVpbnQgPSBcInVpbnRcIlxufVxuXG4vKiogQGludGVybmFsICovXG5leHBvcnQgZW51bSBTdG9yYWdlVGV4dHVyZUFjY2VzcyB7XG5cdFdyaXRlT25seSA9IFwid3JpdGUtb25seVwiXG59XG5cbi8qKiBAaW50ZXJuYWwgKi9cbmV4cG9ydCBlbnVtIENvbXBpbGF0aW9uTWVzc2FnZVR5cGUge1xuXHRFcnJvciA9IFwiZXJyb3JcIixcblx0V2FybmluZyA9IFwid2FybmluZ1wiLFxuXHRJbmZvID0gXCJpbmZvXCJcbn1cblxuLyoqIEBpbnRlcm5hbCAqL1xuZXhwb3J0IGVudW0gQXV0b0xheW91dE1vZGUge1xuXHRBdXRvID0gXCJhdXRvXCJcbn1cblxuLyoqIEBpbnRlcm5hbCAqL1xuZXhwb3J0IGVudW0gUHJpbWl0aXZlVG9wb2xvZ3kge1xuXHRQb2ludExpc3QgPSBcInBvaW50LWxpc3RcIixcblx0TGluZUxpc3QgPSBcImxpbmUtbGlzdFwiLFxuXHRMaW5lU3RyaXAgPSBcImxpbmUtc3RyaXBcIixcblx0VHJpYW5nbGVMaXN0ID0gXCJ0cmlhbmdsZS1saXN0XCIsXG5cdFRyaWFuZ2xlU3RyaXAgPSBcInRyaWFuZ2xlLXN0cmlwXCJcbn1cblxuLyoqIEBpbnRlcm5hbCAqL1xuZXhwb3J0IGVudW0gRnJvbnRGYWNlIHtcblx0Q0NXID0gXCJjY3dcIixcblx0Q1cgPSBcImN3XCJcbn1cblxuLyoqIEBpbnRlcm5hbCAqL1xuZXhwb3J0IGVudW0gQ3VsbE1vZGUge1xuXHROb25lID0gXCJub25lXCIsXG5cdEZyb250ID0gXCJmcm9udFwiLFxuXHRCYWNrID0gXCJiYWNrXCJcbn1cblxuLyoqIEBpbnRlcm5hbCAqL1xuZXhwb3J0IGVudW0gQ29sb3JXcml0ZUZsYWdzIHtcblx0UmVkID0gMSxcblx0R3JlZW4gPSAyLFxuXHRCbHVlID0gNCxcblx0QWxwaGEgPSA4LFxuXHRBbGwgPSAxNVxufVxuXG4vKiogQGludGVybmFsICovXG5leHBvcnQgZW51bSBCbGVuZEZhY3RvciB7XG5cdFplcm8gPSBcInplcm9cIixcblx0T25lID0gXCJvbmVcIixcblx0U3JjID0gXCJzcmNcIixcblx0T25lTWludXNTcmMgPSBcIm9uZS1taW51cy1zcmNcIixcblx0U3JjQWxwaGEgPSBcInNyYy1hbHBoYVwiLFxuXHRPbmVNaW51c1NyY0FscGhhID0gXCJvbmUtbWludXMtc3JjLWFscGhhXCIsXG5cdERzdCA9IFwiZHN0XCIsXG5cdE9uZU1pbnVzRHN0ID0gXCJvbmUtbWludXMtZHN0XCIsXG5cdERzdEFscGhhID0gXCJkc3QtYWxwaGFcIixcblx0T25lTWludXNEc3RBbHBoYSA9IFwib25lLW1pbnVzLWRzdC1hbHBoYVwiLFxuXHRTcmNBbHBoYVNhdHVyYXRlZCA9IFwic3JjLWFscGhhLXNhdHVyYXRlZFwiLFxuXHRDb25zdGFudCA9IFwiY29uc3RhbnRcIixcblx0T25lTWludXNDb25zdGFudCA9IFwib25lLW1pbnVzLWNvbnN0YW50XCJcbn1cblxuLyoqIEBpbnRlcm5hbCAqL1xuZXhwb3J0IGVudW0gQmxlbmRPcGVyYXRpb24ge1xuXHRBZGQgPSBcImFkZFwiLFxuXHRTdWJ0cmFjdCA9IFwic3VidHJhY3RcIixcblx0UmV2ZXJzZVN1YnRyYWN0ID0gXCJyZXZlcnNlLXN1YnRyYWN0XCIsXG5cdE1pbiA9IFwibWluXCIsXG5cdE1heCA9IFwibWF4XCJcbn1cblxuLyoqIEBpbnRlcm5hbCAqL1xuZXhwb3J0IGVudW0gU3RlbmNpbE9wZXJhdGlvbiB7XG5cdEtlZXAgPSBcImtlZXBcIixcblx0WmVybyA9IFwiemVyb1wiLFxuXHRSZXBsYWNlID0gXCJyZXBsYWNlXCIsXG5cdEludmVydCA9IFwiaW52ZXJ0XCIsXG5cdEluY3JlbWVudENsYW1wID0gXCJpbmNyZW1lbnQtY2xhbXBcIixcblx0RGVjcmVtZW50Q2xhbXAgPSBcImRlY3JlbWVudC1jbGFtcFwiLFxuXHRJbmNyZW1lbnRXcmFwID0gXCJpbmNyZW1lbnQtd3JhcFwiLFxuXHREZWNyZW1lbnRXcmFwID0gXCJkZWNyZW1lbnQtd3JhcFwiXG59XG5cbi8qKiBAaW50ZXJuYWwgKi9cbmV4cG9ydCBlbnVtIEluZGV4Rm9ybWF0IHtcblx0VWludDE2ID0gXCJ1aW50MTZcIixcblx0VWludDMyID0gXCJ1aW50MzJcIlxufVxuXG4vKiogQGludGVybmFsICovXG5leHBvcnQgZW51bSBWZXJ0ZXhGb3JtYXQge1xuXHRVaW50OHgyID0gXCJ1aW50OHgyXCIsXG5cdFVpbnQ4eDQgPSBcInVpbnQ4eDRcIixcblx0U2ludDh4MiA9IFwic2ludDh4MlwiLFxuXHRTaW50OHg0ID0gXCJzaW50OHg0XCIsXG5cdFVub3JtOHgyID0gXCJ1bm9ybTh4MlwiLFxuXHRVbm9ybTh4NCA9IFwidW5vcm04eDRcIixcblx0U25vcm04eDIgPSBcInNub3JtOHgyXCIsXG5cdFNub3JtOHg0ID0gXCJzbm9ybTh4NFwiLFxuXHRVaW50MTZ4MiA9IFwidWludDE2eDJcIixcblx0VWludDE2eDQgPSBcInVpbnQxNng0XCIsXG5cdFNpbnQxNngyID0gXCJzaW50MTZ4MlwiLFxuXHRTaW50MTZ4NCA9IFwic2ludDE2eDRcIixcblx0VW5vcm0xNngyID0gXCJ1bm9ybTE2eDJcIixcblx0VW5vcm0xNng0ID0gXCJ1bm9ybTE2eDRcIixcblx0U25vcm0xNngyID0gXCJzbm9ybTE2eDJcIixcblx0U25vcm0xNng0ID0gXCJzbm9ybTE2eDRcIixcblx0RmxvYXQxNngyID0gXCJmbG9hdDE2eDJcIixcblx0RmxvYXQxNng0ID0gXCJmbG9hdDE2eDRcIixcblx0RmxvYXQzMiA9IFwiZmxvYXQzMlwiLFxuXHRGbG9hdDMyeDIgPSBcImZsb2F0MzJ4MlwiLFxuXHRGbG9hdDMyeDMgPSBcImZsb2F0MzJ4M1wiLFxuXHRGbG9hdDMyeDQgPSBcImZsb2F0MzJ4NFwiLFxuXHRVaW50MzIgPSBcInVpbnQzMlwiLFxuXHRVaW50MzJ4MiA9IFwidWludDMyeDJcIixcblx0VWludDMyeDMgPSBcInVpbnQzMngzXCIsXG5cdFVpbnQzMng0ID0gXCJ1aW50MzJ4NFwiLFxuXHRTaW50MzIgPSBcInNpbnQzMlwiLFxuXHRTaW50MzJ4MiA9IFwic2ludDMyeDJcIixcblx0U2ludDMyeDMgPSBcInNpbnQzMngzXCIsXG5cdFNpbnQzMng0ID0gXCJzaW50MzJ4NFwiXG59XG5cbi8qKiBAaW50ZXJuYWwgKi9cbmV4cG9ydCBlbnVtIElucHV0U3RlcE1vZGUge1xuXHRWZXJ0ZXggPSBcInZlcnRleFwiLFxuXHRJbnN0YW5jZSA9IFwiaW5zdGFuY2VcIlxufVxuXG4vKiogQGludGVybmFsICovXG5leHBvcnQgZW51bSBDb21wdXRlUGFzc1RpbWVzdGFtcExvY2F0aW9uIHtcblx0QmVnaW5uaW5nID0gXCJiZWdpbm5pbmdcIixcblx0RW5kID0gXCJlbmRcIlxufVxuXG4vKiogQGludGVybmFsICovXG5leHBvcnQgZW51bSBSZW5kZXJQYXNzVGltZXN0YW1wTG9jYXRpb24ge1xuXHRCZWdpbm5pbmcgPSBcImJlZ2lubmluZ1wiLFxuXHRFbmQgPSBcImVuZFwiXG59XG5cbi8qKiBAaW50ZXJuYWwgKi9cbmV4cG9ydCBlbnVtIExvYWRPcCB7XG5cdExvYWQgPSBcImxvYWRcIixcblx0Q2xlYXIgPSBcImNsZWFyXCJcbn1cblxuLyoqIEBpbnRlcm5hbCAqL1xuZXhwb3J0IGVudW0gU3RvcmVPcCB7XG5cdFN0b3JlID0gXCJzdG9yZVwiLFxuXHREaXNjYXJkID0gXCJkaXNjYXJkXCJcbn1cblxuLyoqIEBpbnRlcm5hbCAqL1xuZXhwb3J0IGVudW0gUXVlcnlUeXBlIHtcblx0T2NjbHVzaW9uID0gXCJvY2NsdXNpb25cIixcblx0VGltZXN0YW1wID0gXCJ0aW1lc3RhbXBcIlxufVxuXG4vKiogQGludGVybmFsICovXG5leHBvcnQgZW51bSBDYW52YXNBbHBoYU1vZGUge1xuXHRPcGFxdWUgPSBcIm9wYXF1ZVwiLFxuXHRQcmVtdWx0aXBsaWVkID0gXCJwcmVtdWx0aXBsaWVkXCJcbn1cblxuLyoqIEBpbnRlcm5hbCAqL1xuZXhwb3J0IGVudW0gRGV2aWNlTG9zdFJlYXNvbiB7XG5cdERlc3Ryb3llZCA9IFwiZGVzdHJveWVkXCJcbn1cblxuLyoqIEBpbnRlcm5hbCAqL1xuZXhwb3J0IGVudW0gRXJyb3JGaWx0ZXIge1xuXHRPdXRPZk1lbW9yeSA9IFwib3V0LW9mLW1lbW9yeVwiLFxuXHRWYWxpZGF0aW9uID0gXCJ2YWxpZGF0aW9uXCJcbn1cblxuZXhwb3J0IGVudW0gR1BVQ29sb3JXcml0ZSB7XG5cdFJlZCA9IDB4MSxcblx0R3JlZW4gPSAweDIsXG5cdEJsdWUgPSAweDQsXG5cdEFscGhhID0gMHg4LFxuXHRBbGwgPSAweGZcbn1cbmV4cG9ydCBlbnVtIENvbW1hbmRTdWJUeXBlIHtcblx0U2hhZG93ID0gXCJzaGFkb3dcIixcblx0UGljayA9IFwicGlja1wiXG59XG5leHBvcnQgZW51bSBJbnRlcnNlY3Qge1xuXHRPVVRTSURFID0gLTEsXG5cdElOVEVSU0VDVElORyA9IDAsXG5cdElOU0lERSA9IDFcbn1cbiIsImltcG9ydCB7IEJ1ZmZlclVzYWdlIH0gZnJvbSBcIi4uL2NvcmUvV2ViR1BVQ29uc3RhbnRcIjtcbmNsYXNzIEJ1ZmZlciB7XG5cdHB1YmxpYyBncHVCdWZmZXI6IEdQVUJ1ZmZlcjtcblx0ZGV2aWNlOiBHUFVEZXZpY2U7XG5cdHVzYWdlOiBudW1iZXI7XG5cdGRhdGE6IEFycmF5QnVmZmVyVmlldztcblx0c2l6ZTogbnVtYmVyO1xuXHRjb25zdHJ1Y3Rvcihcblx0XHRsYWJlbDogc3RyaW5nLFxuXHRcdGRldmljZTogR1BVRGV2aWNlLFxuXHRcdHVzYWdlOiBHUFVCdWZmZXJVc2FnZUZsYWdzLFxuXHRcdGRhdGE6IEFycmF5QnVmZmVyVmlldyB8IG51bGwsXG5cdFx0c2l6ZT86IG51bWJlclxuXHQpIHtcblx0XHR0aGlzLmRldmljZSA9IGRldmljZTtcblx0XHR0aGlzLnVzYWdlID0gdXNhZ2U7XG5cdFx0dGhpcy5kYXRhID0gZGF0YTtcblx0XHR0aGlzLnNpemUgPSBzaXplICE9IHVuZGVmaW5lZCA/IChzaXplICsgMykgJiB+MyA6IChkYXRhLmJ5dGVMZW5ndGggKyAzKSAmIH4zOyAvLyA0IGJ5dGVzIGFsaWdubWVudHMgKGJlY2F1c2Ugb2YgdGhlIHVwbG9hZCB3aGljaCByZXF1aXJlcyB0aGlzKVxuXHRcdHRoaXMuZ3B1QnVmZmVyID0gZGV2aWNlLmNyZWF0ZUJ1ZmZlcih7XG5cdFx0XHRsYWJlbDogbGFiZWwgfHwgXCJcIixcblx0XHRcdHNpemU6IHRoaXMuc2l6ZSxcblx0XHRcdHVzYWdlXG5cdFx0fSk7XG5cdFx0aWYgKGRhdGEpIHRoaXMuc2V0U3ViRGF0YSgwLCBkYXRhLCB0aGlzLnNpemUpO1xuXHR9XG5cdHN0YXRpYyBjcmVhdGUoXG5cdFx0bGFiZWw6IHN0cmluZyxcblx0XHRkZXZpY2U6IEdQVURldmljZSxcblx0XHR1c2FnZTogR1BVQnVmZmVyVXNhZ2VGbGFncyxcblx0XHRkYXRhOiBBcnJheUJ1ZmZlclZpZXcgfCBudWxsLFxuXHRcdHNpemU/OiBudW1iZXJcblx0KSB7XG5cdFx0cmV0dXJuIG5ldyBCdWZmZXIobGFiZWwsIGRldmljZSwgdXNhZ2UsIGRhdGEsIHNpemUpO1xuXHR9XG5cdHN0YXRpYyBjcmVhdGVWZXJ0ZXhCdWZmZXIobGFiZWw6IHN0cmluZywgZGV2aWNlOiBHUFVEZXZpY2UsIGRhdGE6IEFycmF5QnVmZmVyVmlldyk6IEJ1ZmZlciB7XG5cdFx0cmV0dXJuIG5ldyBCdWZmZXIobGFiZWwsIGRldmljZSwgQnVmZmVyVXNhZ2UuVmVydGV4IHwgQnVmZmVyVXNhZ2UuQ29weURzdCwgZGF0YSwgZGF0YS5ieXRlTGVuZ3RoKTtcblx0fVxuXG5cdHN0YXRpYyBjcmVhdGVJbmRleEJ1ZmZlcihsYWJlbDogc3RyaW5nLCBkZXZpY2U6IEdQVURldmljZSwgZGF0YTogQXJyYXlCdWZmZXJWaWV3KTogQnVmZmVyIHtcblx0XHRyZXR1cm4gbmV3IEJ1ZmZlcihsYWJlbCwgZGV2aWNlLCBCdWZmZXJVc2FnZS5JbmRleCB8IEJ1ZmZlclVzYWdlLkNvcHlEc3QsIGRhdGEpO1xuXHR9XG5cblx0c3RhdGljIGNyZWF0ZVVuaWZvcm1CdWZmZXIobGFiZWw6IHN0cmluZywgZGV2aWNlOiBHUFVEZXZpY2UsIHNpemU6IG51bWJlciwgdXNhZ2U/OiBCdWZmZXJVc2FnZSk6IEJ1ZmZlciB7XG5cdFx0cmV0dXJuIG5ldyBCdWZmZXIobGFiZWwsIGRldmljZSwgdXNhZ2UsIG51bGwsIHNpemUpO1xuXHR9XG5cblx0c3RhdGljIGNyZWF0ZVN0b3JhZ2VCdWZmZXIobGFiZWw6IHN0cmluZywgZGV2aWNlOiBHUFVEZXZpY2UsIHNpemU6IG51bWJlciwgdXNhZ2UgPSBCdWZmZXJVc2FnZS5TdG9yYWdlKTogQnVmZmVyIHtcblx0XHRyZXR1cm4gbmV3IEJ1ZmZlcihsYWJlbCwgZGV2aWNlLCB1c2FnZSwgbnVsbCwgc2l6ZSk7XG5cdH1cblx0Ly8gaHR0cHM6Ly9naXRodWIuY29tL2dwdXdlYi9ncHV3ZWIvYmxvYi9tYWluL2Rlc2lnbi9CdWZmZXJPcGVyYXRpb25zLm1kXG5cdHB1YmxpYyBzZXRTdWJEYXRhKG9mZnNldDogbnVtYmVyLCBkYXRhOiBBcnJheUJ1ZmZlclZpZXcsIHNpemU/OiBudW1iZXIpOiB2b2lkIHtcblx0XHRjb25zdCBzcmNBcnJheUJ1ZmZlciA9IGRhdGEuYnVmZmVyO1xuXHRcdGNvbnN0IGJ5dGVDb3VudCA9IHNpemUgPz8gc3JjQXJyYXlCdWZmZXIuYnl0ZUxlbmd0aDtcblx0XHRjb25zdCBzcmNCdWZmZXIgPSB0aGlzLmRldmljZS5jcmVhdGVCdWZmZXIoe1xuXHRcdFx0bWFwcGVkQXRDcmVhdGlvbjogdHJ1ZSxcblx0XHRcdHNpemU6IGJ5dGVDb3VudCxcblx0XHRcdHVzYWdlOiBHUFVCdWZmZXJVc2FnZS5DT1BZX1NSQ1xuXHRcdH0pO1xuXHRcdGNvbnN0IGFycmF5QnVmZmVyID0gc3JjQnVmZmVyLmdldE1hcHBlZFJhbmdlKCk7XG5cblx0XHRuZXcgVWludDE2QXJyYXkoYXJyYXlCdWZmZXIpLnNldChuZXcgVWludDE2QXJyYXkoc3JjQXJyYXlCdWZmZXIpKTsgLy8gbWVtY3B5XG5cdFx0c3JjQnVmZmVyLnVubWFwKCk7XG5cblx0XHR0aGlzLmNvcHlUb0J1ZmZlcihzcmNCdWZmZXIsIG9mZnNldCwgYnl0ZUNvdW50KTtcblxuXHRcdHNyY0J1ZmZlci5kZXN0cm95KCk7XG5cdH1cblxuXHRwdWJsaWMgY29weVRvQnVmZmVyKHNyY0J1ZmZlcjogR1BVQnVmZmVyLCBvZmZzZXQ6IG51bWJlciwgYnl0ZUNvdW50OiBudW1iZXIpOiB2b2lkIHtcblx0XHRjb25zdCBjb21tYW5kRW5jb2RlciA9IHRoaXMuZGV2aWNlLmNyZWF0ZUNvbW1hbmRFbmNvZGVyKCk7XG5cdFx0Y29tbWFuZEVuY29kZXIuY29weUJ1ZmZlclRvQnVmZmVyKHNyY0J1ZmZlciwgMCwgdGhpcy5ncHVCdWZmZXIsIG9mZnNldCwgYnl0ZUNvdW50KTtcblx0XHR0aGlzLmRldmljZS5xdWV1ZS5zdWJtaXQoW2NvbW1hbmRFbmNvZGVyLmZpbmlzaCgpXSk7XG5cdH1cblxuXHRwdWJsaWMgY29weVRvVGV4dHVyZShcblx0XHRieXRlc1BlclJvdzogbnVtYmVyLFxuXHRcdHJvd3NQZXJJbWFnZTogbnVtYmVyLFxuXHRcdGRlc3RpbmF0aW9uOiBHUFVJbWFnZUNvcHlUZXh0dXJlLFxuXHRcdGV4dGVudDogR1BVRXh0ZW50M0Rcblx0KTogdm9pZCB7XG5cdFx0Y29uc3QgY29tbWFuZEVuY29kZXIgPSB0aGlzLmRldmljZS5jcmVhdGVDb21tYW5kRW5jb2RlcigpO1xuXHRcdGNvbW1hbmRFbmNvZGVyLmNvcHlCdWZmZXJUb1RleHR1cmUoXG5cdFx0XHR7XG5cdFx0XHRcdGJ1ZmZlcjogdGhpcy5ncHVCdWZmZXIsXG5cdFx0XHRcdGJ5dGVzUGVyUm93LFxuXHRcdFx0XHRyb3dzUGVySW1hZ2Vcblx0XHRcdH0sXG5cdFx0XHRkZXN0aW5hdGlvbixcblx0XHRcdGV4dGVudFxuXHRcdCk7XG5cdFx0dGhpcy5kZXZpY2UucXVldWUuc3VibWl0KFtjb21tYW5kRW5jb2Rlci5maW5pc2goKV0pO1xuXHR9XG5cblx0cHVibGljIGRlc3Ryb3koKTogdm9pZCB7XG5cdFx0dGhpcy5ncHVCdWZmZXIuZGVzdHJveSgpO1xuXHR9XG59XG5cbmV4cG9ydCBkZWZhdWx0IEJ1ZmZlcjtcbiIsImltcG9ydCBCaW5kR3JvdXBMYXlvdXQgZnJvbSBcIi4vQmluZEdyb3VwTGF5b3V0XCI7XHJcblxyXG5jb25zdCBwaXBlbGluZUxheW91dENhY2hlID0gbmV3IE1hcCgpO1xyXG5leHBvcnQgY2xhc3MgUGlwZWxpbmVMYXlvdXQge1xyXG4gIHB1YmxpYyBncHVQaXBlbGluZUxheW91dDogR1BVUGlwZWxpbmVMYXlvdXQ7XHJcbiAgaW5kZXg6IG51bWJlcjtcclxuICBwcml2YXRlIGNvbnN0cnVjdG9yKFxyXG4gICAgZGV2aWNlOiBHUFVEZXZpY2UsXHJcbiAgICBsYWJlbDogc3RyaW5nLFxyXG4gICAgcHVibGljIGdyb3VwTGF5b3V0czogQmluZEdyb3VwTGF5b3V0W10gPSBbXSxcclxuICAgIGluZGV4PzogbnVtYmVyXHJcbiAgKSB7XHJcbiAgICB0aGlzLmluZGV4ID0gaW5kZXggfHwgMDtcclxuICAgIHRoaXMuZ3B1UGlwZWxpbmVMYXlvdXQgPSBkZXZpY2UuY3JlYXRlUGlwZWxpbmVMYXlvdXQoe1xyXG4gICAgICBsYWJlbDogbGFiZWwsXHJcbiAgICAgIGJpbmRHcm91cExheW91dHM6IGdyb3VwTGF5b3V0cy5tYXAoKGxheW91dCkgPT4ge1xyXG4gICAgICAgIHJldHVybiBsYXlvdXQuZ3B1QmluZEdyb3VwTGF5b3V0O1xyXG4gICAgICB9KSxcclxuICAgIH0pO1xyXG4gIH1cclxuICBzdGF0aWMgZ2V0UGlwZWxpbmVMYXlvdXRGcm9tQ2FjaGUoXHJcbiAgICBkZXZpY2U6IEdQVURldmljZSxcclxuICAgIGxhYmVsOiBzdHJpbmcsXHJcbiAgICBncm91cExheW91dHM6IEJpbmRHcm91cExheW91dFtdXHJcbiAgKTogUGlwZWxpbmVMYXlvdXQge1xyXG4gICAgaWYgKHBpcGVsaW5lTGF5b3V0Q2FjaGUuaGFzKGxhYmVsKSkge1xyXG4gICAgICByZXR1cm4gcGlwZWxpbmVMYXlvdXRDYWNoZS5nZXQobGFiZWwpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgY29uc3QgYmluZEdyb3VwTGF5b3V0ID0gbmV3IFBpcGVsaW5lTGF5b3V0KGRldmljZSwgbGFiZWwsIGdyb3VwTGF5b3V0cyk7XHJcbiAgICAgIHBpcGVsaW5lTGF5b3V0Q2FjaGUuc2V0KGxhYmVsLCBiaW5kR3JvdXBMYXlvdXQpO1xyXG4gICAgICByZXR1cm4gYmluZEdyb3VwTGF5b3V0O1xyXG4gICAgfVxyXG4gIH1cclxufVxyXG4iLCJpbXBvcnQgQmluZEdyb3VwTGF5b3V0IGZyb20gXCIuL0JpbmRHcm91cExheW91dFwiO1xuaW1wb3J0IHsgQ29tcHV0ZUNvbW1hbmQgfSBmcm9tIFwiLi9Db21wdXRlQ29tbWFuZFwiO1xuaW1wb3J0IERyYXdDb21tYW5kIGZyb20gXCIuL0RyYXdDb21tYW5kXCI7XG5pbXBvcnQgeyBQaXBlbGluZUxheW91dCB9IGZyb20gXCIuL1BpcGVsaW5lTGF5b3V0XCI7XG5pbXBvcnQgeyBSZW5kZXJTdGF0ZSB9IGZyb20gXCIuL1JlbmRlclN0YXRlXCI7XG5cbmNvbnN0IHJlbmRlclBpcGVsaW5lcyA9IG5ldyBNYXAoKTtcbmNvbnN0IGNvbXB1dGVQaXBlbGluZXMgPSBuZXcgTWFwKCk7XG5leHBvcnQgZGVmYXVsdCBjbGFzcyBQaXBlbGluZSB7XG5cdGdwdVBpcGVsaW5lOiBHUFVSZW5kZXJQaXBlbGluZSB8IEdQVUNvbXB1dGVQaXBlbGluZTtcblx0dHlwZTogc3RyaW5nO1xuXHRkZXZpY2U6IEdQVURldmljZTtcblx0ZGVzY3JpcHRvcjogR1BVUmVuZGVyUGlwZWxpbmVEZXNjcmlwdG9yIHwgR1BVQ29tcHV0ZVBpcGVsaW5lRGVzY3JpcHRvcjtcblx0Y29uc3RydWN0b3IoXG5cdFx0dHlwZTogc3RyaW5nLFxuXHRcdGRldmljZTogR1BVRGV2aWNlLFxuXHRcdGRlc2NyaXB0b3I6IEdQVVJlbmRlclBpcGVsaW5lRGVzY3JpcHRvciB8IEdQVUNvbXB1dGVQaXBlbGluZURlc2NyaXB0b3Jcblx0KSB7XG5cdFx0dGhpcy50eXBlID0gdHlwZTtcblx0XHR0aGlzLmRlc2NyaXB0b3IgPSBkZXNjcmlwdG9yO1xuXHRcdHRoaXMuZGV2aWNlID0gZGV2aWNlO1xuXHRcdHRoaXMuY3JlYXRlUGlwZWxpbmUoKTtcblx0fVxuXHRwcml2YXRlIGNyZWF0ZVBpcGVsaW5lKCkge1xuXHRcdGlmICh0aGlzLnR5cGUgPT0gXCJyZW5kZXJcIikge1xuXHRcdFx0dGhpcy5ncHVQaXBlbGluZSA9IHRoaXMuZGV2aWNlLmNyZWF0ZVJlbmRlclBpcGVsaW5lKHRoaXMuZGVzY3JpcHRvciBhcyBHUFVSZW5kZXJQaXBlbGluZURlc2NyaXB0b3IpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHR0aGlzLmdwdVBpcGVsaW5lID0gdGhpcy5kZXZpY2UuY3JlYXRlQ29tcHV0ZVBpcGVsaW5lKHRoaXMuZGVzY3JpcHRvciBhcyBHUFVDb21wdXRlUGlwZWxpbmVEZXNjcmlwdG9yKTtcblx0XHR9XG5cdH1cblx0cHVibGljIGJpbmQocGFzc0VuY29kZXI6IEdQVVJlbmRlclBhc3NFbmNvZGVyIHwgR1BVQ29tcHV0ZVBhc3NFbmNvZGVyKSB7XG5cdFx0aWYgKHRoaXMudHlwZSA9PSBcInJlbmRlclwiKSB7XG5cdFx0XHQocGFzc0VuY29kZXIgYXMgR1BVUmVuZGVyUGFzc0VuY29kZXIpLnNldFBpcGVsaW5lKHRoaXMuZ3B1UGlwZWxpbmUgYXMgR1BVUmVuZGVyUGlwZWxpbmUpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHQocGFzc0VuY29kZXIgYXMgR1BVQ29tcHV0ZVBhc3NFbmNvZGVyKS5zZXRQaXBlbGluZSh0aGlzLmdwdVBpcGVsaW5lIGFzIEdQVUNvbXB1dGVQaXBlbGluZSk7XG5cdFx0fVxuXHR9XG5cdHN0YXRpYyBnZXRSZW5kZXJQaXBlbGluZUZyb21DYWNoZShcblx0XHRkZXZpY2U6IEdQVURldmljZSxcblx0XHRkcmF3Q29tYW5kOiBEcmF3Q29tbWFuZCxcblx0XHRncm91cExheW91dHM6IEJpbmRHcm91cExheW91dFtdXG5cdCk6IFBpcGVsaW5lIHtcblx0XHRjb25zdCB7IHJlbmRlclN0YXRlLCBzaGFkZXJTb3VyY2UgfSA9IGRyYXdDb21hbmQ7XG5cdFx0Y29uc3QgcnNTdHIgPSBKU09OLnN0cmluZ2lmeShyZW5kZXJTdGF0ZSk7XG5cdFx0Y29uc3QgY29tYmluZVN0ciA9IHNoYWRlclNvdXJjZS51aWQuY29uY2F0KHJzU3RyKTtcblx0XHRjb25zdCBoYXNoSWQgPSBzdHJpbmdUb0hhc2goY29tYmluZVN0cik7XG5cdFx0Y29uc3QgY29tYmluZUxheW91dHMgPSBncm91cExheW91dHNcblx0XHRcdD8uZmlsdGVyKChsYXlvdXQpID0+IGxheW91dCAhPSB1bmRlZmluZWQpXG5cdFx0XHQ/LnNvcnQoKGxheW91dDEsIGxheW91dDIpID0+IGxheW91dDEuaW5kZXggLSBsYXlvdXQyLmluZGV4KTtcblx0XHRsZXQgcGlwZWxpbmUgPSByZW5kZXJQaXBlbGluZXMuZ2V0KGhhc2hJZCk7XG5cdFx0aWYgKCFwaXBlbGluZSkge1xuXHRcdFx0Y29uc3QgZGVzY3JpcHRvciA9IFBpcGVsaW5lLmdldFBpcGVsaW5lRGVzY3JpcHRvcihcblx0XHRcdFx0ZGV2aWNlLFxuXHRcdFx0XHRkcmF3Q29tYW5kLFxuXHRcdFx0XHRyZW5kZXJTdGF0ZSxcblx0XHRcdFx0Y29tYmluZUxheW91dHMsXG5cdFx0XHRcdGhhc2hJZC50b1N0cmluZygpXG5cdFx0XHQpO1xuXHRcdFx0cGlwZWxpbmUgPSBuZXcgUGlwZWxpbmUoXCJyZW5kZXJcIiwgZGV2aWNlLCBkZXNjcmlwdG9yKTtcblx0XHRcdHJlbmRlclBpcGVsaW5lcy5zZXQoaGFzaElkLCBwaXBlbGluZSk7XG5cdFx0fVxuXHRcdHJldHVybiBwaXBlbGluZTtcblx0fVxuXHRzdGF0aWMgZ2V0Q29tcHV0ZVBpcGVsaW5lRnJvbUNhY2hlKFxuXHRcdGRldmljZTogR1BVRGV2aWNlLFxuXHRcdGNvbXB1dGVDb21tYWQ6IENvbXB1dGVDb21tYW5kLFxuXHRcdGdyb3VwTGF5b3V0czogQmluZEdyb3VwTGF5b3V0W11cblx0KTogUGlwZWxpbmUge1xuXHRcdGNvbnN0IHsgc2hhZGVyU291cmNlIH0gPSBjb21wdXRlQ29tbWFkO1xuXHRcdGNvbnN0IGhhc2hJZCA9IHN0cmluZ1RvSGFzaChzaGFkZXJTb3VyY2UudWlkKTtcblx0XHRsZXQgcGlwZWxpbmUgPSBjb21wdXRlUGlwZWxpbmVzLmdldChoYXNoSWQpO1xuXHRcdGlmICghcGlwZWxpbmUpIHtcblx0XHRcdHBpcGVsaW5lID0gbmV3IFBpcGVsaW5lKFwiY29tcHV0ZVwiLCBkZXZpY2UsIHtcblx0XHRcdFx0bGF5b3V0OiBQaXBlbGluZUxheW91dC5nZXRQaXBlbGluZUxheW91dEZyb21DYWNoZShkZXZpY2UsIGhhc2hJZC50b1N0cmluZygpLCBncm91cExheW91dHMpXG5cdFx0XHRcdFx0LmdwdVBpcGVsaW5lTGF5b3V0LFxuXHRcdFx0XHRjb21wdXRlOiB7XG5cdFx0XHRcdFx0bW9kdWxlOiBzaGFkZXJTb3VyY2UuZ2V0U2hhZGVyTW9kdWxlKGRldmljZSkuY29tcHV0ZSxcblx0XHRcdFx0XHRlbnRyeVBvaW50OiBzaGFkZXJTb3VyY2U/LmNvbXB1dGU/LmNvbXB1dGVNYWluIHx8IFwibWFpblwiXG5cdFx0XHRcdH1cblx0XHRcdH0pO1xuXHRcdFx0Y29tcHV0ZVBpcGVsaW5lcy5zZXQoaGFzaElkLCBwaXBlbGluZSk7XG5cdFx0fVxuXHRcdHJldHVybiBwaXBlbGluZTtcblx0fVxuXHRwcml2YXRlIHN0YXRpYyBnZXRQaXBlbGluZURlc2NyaXB0b3IoXG5cdFx0ZGV2aWNlOiBHUFVEZXZpY2UsXG5cdFx0ZHJhd0NvbWFuZDogRHJhd0NvbW1hbmQsXG5cdFx0cmVuZGVyU3RhdGU6IFJlbmRlclN0YXRlLFxuXHRcdGdyb3VwTGF5b3V0czogQmluZEdyb3VwTGF5b3V0W10sXG5cdFx0aGFzaElkOiBzdHJpbmdcblx0KTogR1BVUmVuZGVyUGlwZWxpbmVEZXNjcmlwdG9yIHtcblx0XHRjb25zdCB7IHZlcnRleEJ1ZmZlcnMsIHNoYWRlclNvdXJjZSB9ID0gZHJhd0NvbWFuZDtcblx0XHRjb25zdCB7IHZlcnQsIGZyYWcgfSA9IHNoYWRlclNvdXJjZS5nZXRTaGFkZXJNb2R1bGUoZGV2aWNlKTtcblx0XHRjb25zdCBwaXBlbGluZURlYyA9IHtcblx0XHRcdGxheW91dDogUGlwZWxpbmVMYXlvdXQuZ2V0UGlwZWxpbmVMYXlvdXRGcm9tQ2FjaGUoZGV2aWNlLCBoYXNoSWQsIGdyb3VwTGF5b3V0cykuZ3B1UGlwZWxpbmVMYXlvdXRcblx0XHR9IGFzIGFueTtcblx0XHRpZiAodmVydClcblx0XHRcdHBpcGVsaW5lRGVjLnZlcnRleCA9IHtcblx0XHRcdFx0bW9kdWxlOiB2ZXJ0LFxuXHRcdFx0XHRlbnRyeVBvaW50OiBzaGFkZXJTb3VyY2U/LnJlbmRlcj8udmVydE1haW4gfHwgXCJtYWluXCIsXG5cdFx0XHRcdGJ1ZmZlcnM6IHZlcnRleEJ1ZmZlcnMubWFwKCh2ZXJ0ZXhCdWZmZXIpID0+IHZlcnRleEJ1ZmZlci5nZXRCdWZmZXJEZXMoKSlcblx0XHRcdH07XG5cdFx0aWYgKHJlbmRlclN0YXRlLnByaW1pdGl2ZSkgcGlwZWxpbmVEZWMucHJpbWl0aXZlID0gcmVuZGVyU3RhdGUucHJpbWl0aXZlLmdldEdQVVByaW1pdGl2ZURlYygpO1xuXHRcdGlmIChyZW5kZXJTdGF0ZS5kZXB0aFN0ZW5jaWwpIHBpcGVsaW5lRGVjLmRlcHRoU3RlbmNpbCA9IHJlbmRlclN0YXRlLmRlcHRoU3RlbmNpbC5nZXRHUFVEZXB0aFN0ZW5jaWxEZWMoKTtcblx0XHRpZiAocmVuZGVyU3RhdGUubXVsdGlzYW1wbGUpIHBpcGVsaW5lRGVjLm11bHRpc2FtcGxlID0gcmVuZGVyU3RhdGUubXVsdGlzYW1wbGUuZ2V0TXVsdGlTYW1wbGVEZWMoKTtcblx0XHRpZiAoZnJhZylcblx0XHRcdHBpcGVsaW5lRGVjLmZyYWdtZW50ID0ge1xuXHRcdFx0XHRtb2R1bGU6IGZyYWcsXG5cdFx0XHRcdGVudHJ5UG9pbnQ6IHNoYWRlclNvdXJjZT8ucmVuZGVyPy5mcmFnTWFpbiB8fCBcIm1haW5cIixcblx0XHRcdFx0dGFyZ2V0czogcmVuZGVyU3RhdGUudGFyZ2V0cy5tYXAoKHRhcmdldCkgPT4ge1xuXHRcdFx0XHRcdHJldHVybiB0YXJnZXQuZ2V0R1BVVGFyZ2V0RGVjKCk7XG5cdFx0XHRcdH0pXG5cdFx0XHR9O1xuXHRcdHJldHVybiBwaXBlbGluZURlYztcblx0fVxufVxuLy8gQm9ycm93ZWQgZnJvbSBodHRwczovL3dlcnhsdGQuY29tL3dwLzIwMTAvMDUvMTMvamF2YXNjcmlwdC1pbXBsZW1lbnRhdGlvbi1vZi1qYXZhcy1zdHJpbmctaGFzaGNvZGUtbWV0aG9kL1xuZnVuY3Rpb24gc3RyaW5nVG9IYXNoKHN0cikge1xuXHRsZXQgaGFzaCA9IDA7XG5cdGlmIChzdHIubGVuZ3RoID09IDApIHJldHVybiBoYXNoO1xuXHRmb3IgKGxldCBpID0gMDsgaSA8IHN0ci5sZW5ndGg7IGkrKykge1xuXHRcdGNvbnN0IGNoYXIgPSBzdHIuY2hhckNvZGVBdChpKTtcblx0XHRoYXNoID0gKGhhc2ggPDwgNSkgLSBoYXNoICsgY2hhcjtcblx0XHRoYXNoID0gaGFzaCAmIGhhc2g7IC8vIENvbnZlcnQgdG8gMzJiaXQgaW50ZWdlclxuXHR9XG5cdHJldHVybiBoYXNoO1xufVxuIiwiaW1wb3J0IENhbWVyYSBmcm9tIFwiLi4vY2FtZXJhL0NhbWVyYVwiO1xuaW1wb3J0IHsgRHJhd0NvbW1hbmRQYXJhbXMgfSBmcm9tIFwiLi4vY29yZS9XZWJHUFVUeXBlc1wiO1xuaW1wb3J0IHsgTWF0ZXJpYWwgfSBmcm9tIFwiLi4vbWF0ZXJpYWwvTWF0ZXJpYWxcIjtcbmltcG9ydCB7IFNoYWRlclNvdXJjZSB9IGZyb20gXCIuLi9zaGFkZXIvU2hhZGVyU291cmNlXCI7XG5pbXBvcnQgQnVmZmVyIGZyb20gXCIuL0J1ZmZlclwiO1xuaW1wb3J0IHsgQ29tbWFuZCB9IGZyb20gXCIuL0NvbW1hbmRcIjtcbmltcG9ydCBDb250ZXh0IGZyb20gXCIuL0NvbnRleHRcIjtcbmltcG9ydCBJbmRleEJ1ZmZlciBmcm9tIFwiLi9JbmRleEJ1ZmZlclwiO1xuaW1wb3J0IFBpcGVsaW5lIGZyb20gXCIuL1BpcGVsaW5lXCI7XG5pbXBvcnQgUXVlcnlTZXQgZnJvbSBcIi4vUXVlcnlTZXRcIjtcbmltcG9ydCB7IFJlbmRlclN0YXRlLCBTY2lzc29yVGVzdCwgVmlld1BvcnQgfSBmcm9tIFwiLi9SZW5kZXJTdGF0ZVwiO1xuaW1wb3J0IFJlbmRlclRhcmdldCBmcm9tIFwiLi9SZW5kZXJUYXJnZXRcIjtcbmltcG9ydCBTaGFkZXJEYXRhIGZyb20gXCIuL1NoYWRlckRhdGFcIjtcbmltcG9ydCBWZXJ0ZXhCdWZmZXIgZnJvbSBcIi4vVmVydGV4QnVmZmVyXCI7XG5cbmNsYXNzIERyYXdDb21tYW5kIGltcGxlbWVudHMgQ29tbWFuZCB7XG5cdHB1YmxpYyBzaGFkZXJEYXRhPzogU2hhZGVyRGF0YTtcblxuXHRwdWJsaWMgcmVuZGVyVGFyZ2V0PzogUmVuZGVyVGFyZ2V0O1xuXG5cdHB1YmxpYyB2ZXJ0ZXhCdWZmZXJzPzogQXJyYXk8VmVydGV4QnVmZmVyPjtcblxuXHRwdWJsaWMgaW5kZXhCdWZmZXI/OiBJbmRleEJ1ZmZlcjtcblxuXHRwdWJsaWMgcmVuZGVyU3RhdGU/OiBSZW5kZXJTdGF0ZTtcblxuXHRwdWJsaWMgcXVlcnlJbmRleD86IG51bWJlcjtcblxuXHRwdWJsaWMgY291bnQ/OiBudW1iZXI7XG5cblx0cHVibGljIGluc3RhbmNlcz86IG51bWJlcjtcblxuXHRwdWJsaWMgc2hhZGVyU291cmNlPzogU2hhZGVyU291cmNlO1xuXG5cdHB1YmxpYyBkaXJ0eT86IGJvb2xlYW47XG5cblx0cHVibGljIGluZGlyZWN0QnVmZmVyPzogQnVmZmVyO1xuXG5cdHB1YmxpYyBpbmRpcmVjdE9mZnNldD86IG51bWJlcjtcblxuXHRwdWJsaWMgbGlnaHRTaGFkZXJEYXRhPzogU2hhZGVyRGF0YTtcblxuXHRwdWJsaWMgdXNlTGlnaHQ/OiBib29sZWFuO1xuXG5cdGNvbnN0cnVjdG9yKG9wdGlvbnM6IERyYXdDb21tYW5kUGFyYW1zKSB7XG5cdFx0dGhpcy5zaGFkZXJEYXRhID0gb3B0aW9ucy5zaGFkZXJEYXRhO1xuXG5cdFx0dGhpcy5yZW5kZXJUYXJnZXQgPSBvcHRpb25zLnJlbmRlclRhcmdldDtcblxuXHRcdHRoaXMudXNlTGlnaHQgPSBvcHRpb25zLnVzZUxpZ2h0O1xuXG5cdFx0dGhpcy52ZXJ0ZXhCdWZmZXJzID0gb3B0aW9ucy52ZXJ0ZXhCdWZmZXJzO1xuXG5cdFx0dGhpcy5pbmRleEJ1ZmZlciA9IG9wdGlvbnMuaW5kZXhCdWZmZXI7XG5cblx0XHR0aGlzLnJlbmRlclN0YXRlID0gb3B0aW9ucy5yZW5kZXJTdGF0ZTtcblxuXHRcdHRoaXMucXVlcnlJbmRleCA9IG9wdGlvbnMucXVlcnlJbmRleDtcblxuXHRcdHRoaXMuY291bnQgPSBvcHRpb25zLmNvdW50O1xuXG5cdFx0dGhpcy5pbnN0YW5jZXMgPSBvcHRpb25zLmluc3RhbmNlcztcblxuXHRcdHRoaXMuc2hhZGVyU291cmNlID0gb3B0aW9ucy5zaGFkZXJTb3VyY2U7XG5cblx0XHR0aGlzLmRpcnR5ID0gb3B0aW9ucy5kaXJ0eTtcblxuXHRcdHRoaXMubGlnaHRTaGFkZXJEYXRhID0gb3B0aW9ucy5saWdodFNoYWRlckRhdGE7XG5cdH1cblx0cHVibGljIHNoYWxsb3dDbG9uZShtYXRlcmlhbD86IE1hdGVyaWFsKSB7XG5cdFx0aWYgKCFtYXRlcmlhbCkgcmV0dXJuO1xuXHRcdHJldHVybiBuZXcgRHJhd0NvbW1hbmQoe1xuXHRcdFx0dmVydGV4QnVmZmVyczogdGhpcy52ZXJ0ZXhCdWZmZXJzLFxuXHRcdFx0aW5kZXhCdWZmZXI6IHRoaXMuaW5kZXhCdWZmZXIsXG5cdFx0XHRzaGFkZXJEYXRhOiBtYXRlcmlhbC5zaGFkZXJEYXRhLFxuXHRcdFx0aW5zdGFuY2VzOiB0aGlzLmluc3RhbmNlcyxcblx0XHRcdGNvdW50OiB0aGlzLmNvdW50LFxuXHRcdFx0cmVuZGVyU3RhdGU6IG1hdGVyaWFsLnJlbmRlclN0YXRlLFxuXHRcdFx0c2hhZGVyU291cmNlOiBtYXRlcmlhbC5zaGFkZXJTb3VyY2UsXG5cdFx0XHRsaWdodFNoYWRlckRhdGE6IG1hdGVyaWFsLmxpZ2h0ID8gdGhpcy5saWdodFNoYWRlckRhdGEgOiB1bmRlZmluZWQsXG5cdFx0XHR1c2VMaWdodDogbWF0ZXJpYWwubGlnaHRcblx0XHR9KTtcblx0fVxuXHRwdWJsaWMgcmVuZGVyKHBhcmFtcz86IFJlbmRlclBhcmFtcyk6IHZvaWQge1xuXHRcdGNvbnN0IHsgZGV2aWNlLCBwYXNzRW5jb2RlciwgY2FtZXJhLCBxdWVyeVNldCwgdmlld1BvcnQsIHNjaXNzb3JUZXN0IH0gPSBwYXJhbXMgfHwge307XG5cdFx0Y29uc3Qge1xuXHRcdFx0c2hhZGVyRGF0YSxcblx0XHRcdHJlbmRlclN0YXRlLFxuXHRcdFx0dmVydGV4QnVmZmVycyxcblx0XHRcdGluZGV4QnVmZmVyLFxuXHRcdFx0bGlnaHRTaGFkZXJEYXRhLFxuXHRcdFx0c2hhZGVyU291cmNlLFxuXHRcdFx0Y291bnQsXG5cdFx0XHRpbnN0YW5jZXMsXG5cdFx0XHRyZW5kZXJUYXJnZXQsXG5cdFx0XHR1c2VMaWdodCxcblx0XHRcdGluZGlyZWN0T2Zmc2V0LFxuXHRcdFx0aW5kaXJlY3RCdWZmZXIsXG5cdFx0XHRxdWVyeUluZGV4XG5cdFx0fSA9IHRoaXM7XG5cdFx0Y29uc3QgY3VycmVudFBhc3NFbmNvZGVyID0gcmVuZGVyVGFyZ2V0Py5iZWdpblJlbmRlclBhc3M/LihkZXZpY2UpID8/IHBhc3NFbmNvZGVyO1xuXHRcdGNvbnN0IGRlZmluZXMgPSBPYmplY3QuYXNzaWduKHt9LCBsaWdodFNoYWRlckRhdGE/LmRlZmluZXMgPz8ge30sIGNhbWVyYT8uc2hhZGVyRGF0YT8uZGVmaW5lcyA/PyB7fSk7XG5cblx0XHRzaGFkZXJEYXRhPy5iaW5kPy4oZGV2aWNlLCBjdXJyZW50UGFzc0VuY29kZXIpO1xuXG5cdFx0Y2FtZXJhPy5zaGFkZXJEYXRhPy5iaW5kKGRldmljZSwgY3VycmVudFBhc3NFbmNvZGVyKTtcblxuXHRcdHVzZUxpZ2h0ICYmIGxpZ2h0U2hhZGVyRGF0YT8uYmluZD8uKGRldmljZSwgY3VycmVudFBhc3NFbmNvZGVyKTtcblxuXHRcdHJlbmRlclN0YXRlPy5iaW5kPy4oe1xuXHRcdFx0cGFzc0VuY29kZXI6IGN1cnJlbnRQYXNzRW5jb2Rlcixcblx0XHRcdHZpZXdQb3J0OiB2aWV3UG9ydCBhcyBWaWV3UG9ydCxcblx0XHRcdHNjaXNzb3JUZXN0OiA8U2Npc3NvclRlc3Q+c2Npc3NvclRlc3Rcblx0XHR9KTtcblxuXHRcdHZlcnRleEJ1ZmZlcnM/LmZvckVhY2g/LigodmVydGV4QnVmZmVyOiBWZXJ0ZXhCdWZmZXIpID0+IHZlcnRleEJ1ZmZlcj8uYmluZD8uKGRldmljZSwgY3VycmVudFBhc3NFbmNvZGVyKSk7XG5cblx0XHRpbmRleEJ1ZmZlcj8uYmluZD8uKGRldmljZSwgY3VycmVudFBhc3NFbmNvZGVyKTtcblxuXHRcdHNoYWRlclNvdXJjZT8uc2V0RGVmaW5lcz8uKGRlZmluZXMpO1xuXG5cdFx0Y29uc3QgcGlwZWxpbmUgPSBQaXBlbGluZS5nZXRSZW5kZXJQaXBlbGluZUZyb21DYWNoZShkZXZpY2UsIHRoaXMsIFtcblx0XHRcdHNoYWRlckRhdGE/Lmdyb3VwTGF5b3V0LFxuXHRcdFx0bGlnaHRTaGFkZXJEYXRhPy5ncm91cExheW91dCxcblx0XHRcdGNhbWVyYT8uc2hhZGVyRGF0YT8uZ3JvdXBMYXlvdXRcblx0XHRdKTtcblx0XHRpZiAocXVlcnlJbmRleCAhPSB1bmRlZmluZWQpIHF1ZXJ5U2V0Py5iZWdpblF1ZXJ5KGN1cnJlbnRQYXNzRW5jb2RlciwgcXVlcnlJbmRleCk7XG5cdFx0cGlwZWxpbmUuYmluZChjdXJyZW50UGFzc0VuY29kZXIpO1xuXHRcdGlmIChpbmRleEJ1ZmZlcikge1xuXHRcdFx0aWYgKGluZGlyZWN0QnVmZmVyKSB7XG5cdFx0XHRcdGN1cnJlbnRQYXNzRW5jb2Rlci5kcmF3SW5kZXhlZEluZGlyZWN0KGluZGlyZWN0QnVmZmVyLmdwdUJ1ZmZlciwgaW5kaXJlY3RPZmZzZXQgfHwgMCk7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRjdXJyZW50UGFzc0VuY29kZXIuZHJhd0luZGV4ZWQoY291bnQgfHwgMCwgaW5zdGFuY2VzIHx8IDEsIDAsIDAsIDApO1xuXHRcdFx0fVxuXHRcdH0gZWxzZSBpZiAoY291bnQpIHtcblx0XHRcdGlmIChpbmRpcmVjdEJ1ZmZlcikge1xuXHRcdFx0XHRjdXJyZW50UGFzc0VuY29kZXIuZHJhd0luZGlyZWN0KGluZGlyZWN0QnVmZmVyLmdwdUJ1ZmZlciwgaW5kaXJlY3RPZmZzZXQpO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0Y3VycmVudFBhc3NFbmNvZGVyLmRyYXcoY291bnQsIGluc3RhbmNlcyB8fCAxLCAwLCAwKTtcblx0XHRcdH1cblx0XHR9XG5cdFx0aWYgKHF1ZXJ5SW5kZXggIT0gdW5kZWZpbmVkKSBxdWVyeVNldD8uZW5kUXVlcnkoY3VycmVudFBhc3NFbmNvZGVyKTtcblx0XHRyZW5kZXJUYXJnZXQ/LmVuZFJlbmRlclBhc3M/LigpO1xuXHR9XG59XG5leHBvcnQgZGVmYXVsdCBEcmF3Q29tbWFuZDtcbnR5cGUgUmVuZGVyUGFyYW1zID0ge1xuXHRjb250ZXh0PzogQ29udGV4dDtcblx0ZGV2aWNlPzogR1BVRGV2aWNlO1xuXHRwYXNzRW5jb2Rlcj86IEdQVVJlbmRlclBhc3NFbmNvZGVyO1xuXHRjYW1lcmE/OiBDYW1lcmE7XG5cdHF1ZXJ5U2V0PzogUXVlcnlTZXQ7XG5cdHZpZXdQb3J0PzogVmlld1BvcnQ7XG5cdHNjaXNzb3JUZXN0PzogU2Npc3NvclRlc3Q7XG59O1xuIiwiaW1wb3J0IHsgTGlnaHQgfSBmcm9tIFwiLi4vbGlnaHQvTGlnaHRcIjtcclxuaW1wb3J0IHsgTWVzaCB9IGZyb20gXCIuLi9tZXNoL01lc2hcIjtcclxuaW1wb3J0IFBvc3RFZmZlY3QgZnJvbSBcIi4uL3Bvc3QtcHJvY2Vzcy9Qb3N0RWZmZWN0XCI7XHJcbmltcG9ydCBCaW5kR3JvdXBFbnRpdHkgZnJvbSBcIi4uL3JlbmRlci9CaW5kR3JvdXBFbnRpdHlcIjtcclxuaW1wb3J0IEJpbmRHcm91cExheW91dCBmcm9tIFwiLi4vcmVuZGVyL0JpbmRHcm91cExheW91dFwiO1xyXG5pbXBvcnQgQnVmZmVyIGZyb20gXCIuLi9yZW5kZXIvQnVmZmVyXCI7XHJcbmltcG9ydCBJbmRleEJ1ZmZlciBmcm9tIFwiLi4vcmVuZGVyL0luZGV4QnVmZmVyXCI7XHJcbmltcG9ydCB7IFJlbmRlclN0YXRlIH0gZnJvbSBcIi4uL3JlbmRlci9SZW5kZXJTdGF0ZVwiO1xyXG5pbXBvcnQgUmVuZGVyVGFyZ2V0IGZyb20gXCIuLi9yZW5kZXIvUmVuZGVyVGFyZ2V0XCI7XHJcbmltcG9ydCBTYW1wbGVyIGZyb20gXCIuLi9yZW5kZXIvU2FtcGxlclwiO1xyXG5pbXBvcnQgU2hhZGVyRGF0YSBmcm9tIFwiLi4vcmVuZGVyL1NoYWRlckRhdGFcIjtcclxuaW1wb3J0IFRleHR1cmUgZnJvbSBcIi4uL3JlbmRlci9UZXh0dXJlXCI7XHJcbmltcG9ydCBWZXJ0ZXhCdWZmZXIgZnJvbSBcIi4uL3JlbmRlci9WZXJ0ZXhCdWZmZXJcIjtcclxuaW1wb3J0IHsgU2hhZGVyU291cmNlIH0gZnJvbSBcIi4uL3NoYWRlci9TaGFkZXJTb3VyY2VcIjtcclxuaW1wb3J0IHtcclxuXHRCbGVuZEZhY3RvcixcclxuXHRCbGVuZE9wZXJhdGlvbixcclxuXHRDb2xvcldyaXRlRmxhZ3MsXHJcblx0Q29tcGFyZUZ1bmN0aW9uLFxyXG5cdEN1bGxNb2RlLFxyXG5cdEZyb250RmFjZSxcclxuXHRJbmRleEZvcm1hdCxcclxuXHRJbnB1dFN0ZXBNb2RlLFxyXG5cdFByaW1pdGl2ZVRvcG9sb2d5LFxyXG5cdFNoYWRlclN0YWdlLFxyXG5cdFN0ZW5jaWxPcGVyYXRpb24sXHJcblx0U3RvcmFnZVRleHR1cmVBY2Nlc3MsXHJcblx0VGV4dHVyZUZvcm1hdFxyXG59IGZyb20gXCIuL1dlYkdQVUNvbnN0YW50XCI7XHJcbmV4cG9ydCBjb25zdCBHUFVDYW52YXNDb21wb3NpdGluZ0FscGhhTW9kZToge1xyXG5cdFtrZXk6IHN0cmluZ106IEdQVUNhbnZhc0NvbXBvc2l0aW5nQWxwaGFNb2RlO1xyXG59ID0ge1xyXG5cdE9wYXF1ZTogXCJvcGFxdWVcIixcclxuXHRQcmVtdWx0aXBsaWVkOiBcInByZW11bHRpcGxpZWRcIlxyXG59O1xyXG5leHBvcnQgaW50ZXJmYWNlIENvbnRleHRTdGF0ZSB7XHJcblx0ZGV2aWNlOiBHUFVEZXZpY2U7XHJcblx0Z2xzbGFuZzoge1xyXG5cdFx0Y29tcGlsZUdMU0w6IChzb3VyY2U6IHN0cmluZywgdHlwZTogc3RyaW5nKSA9PiBzdHJpbmc7XHJcblx0fTtcclxuXHRkZWJ1ZzogYm9vbGVhbjtcclxuXHRlcnJvcjogYm9vbGVhbjtcclxufVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBDb250ZXh0T3B0aW9ucyB7XHJcblx0Y2FudmFzPzogSFRNTENhbnZhc0VsZW1lbnQ7XHJcblx0Y29udGFpbmVyPzogSFRNTERpdkVsZW1lbnQ7XHJcblx0Y29udGV4dD86IEdQVUNhbnZhc0NvbnRleHQ7XHJcblx0cGl4ZWxSYXRpbz86IG51bWJlcjtcclxuXHR1c2VHTFNMPzpib29sZWFuXHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgTGlnaHRNYW5nZXJPcHRpb25zIHtcclxuXHRvcGVuU2hhZG93OiBib29sZWFuO1xyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIEJpbmRHcm91cExheW91dEVudHJ5IGV4dGVuZHMgR1BVQmluZEdyb3VwTGF5b3V0RW50cnkge1xyXG5cdG5hbWU6IHN0cmluZztcclxuXHR1bmlmb3Jtcz86IGFueVtdO1xyXG5cdGRpbWVuc2lvbj86IEdQVVRleHR1cmVEaW1lbnNpb247XHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgQmluZEdyb3VwT3B0aW9ucyBleHRlbmRzIEdQVUJpbmRHcm91cERlc2NyaXB0b3Ige1xyXG5cdHJlc291cmNlczogR1BVQmluZGluZ1Jlc291cmNlW107XHJcbn1cclxuXHJcbmV4cG9ydCB0eXBlIFNoYWRlclN0YWdlTmFtZSA9IFwidmVydGV4XCIgfCBcImZyYWdtZW50XCIgfCBcImNvbXB1dGVcIjtcclxuXHJcbmV4cG9ydCB0eXBlIFNoYWRlclN0YWdlTmFtZU9iamVjdEtleXMgPSB7XHJcblx0W2tleSBpbiBTaGFkZXJTdGFnZU5hbWVdPzogc3RyaW5nO1xyXG59O1xyXG5leHBvcnQgdHlwZSBTaGFkZXJTdGFnZUJvZHlOYW1lID0gXCJ2ZXJ0ZXhCb2R5XCIgfCBcImZyYWdtZW50Qm9keVwiIHwgXCJjb21wdXRlQm9keVwiO1xyXG5leHBvcnQgdHlwZSBTaGFkZXJTdGFnZUJvZHlOYW1lT2JqZWN0S2V5cyA9IHtcclxuXHRba2V5IGluIFNoYWRlclN0YWdlQm9keU5hbWVdPzogc3RyaW5nO1xyXG59O1xyXG5leHBvcnQgaW50ZXJmYWNlIEF0dGFjaG1lbnRPcHRpb25zIHtcclxuXHRvcD86IEdQVVN0b3JlT3A7XHJcblx0dGV4dHVyZT86IFRleHR1cmU7XHJcblx0cmVzb2x2ZVRhcmdldD86IFRleHR1cmU7XHJcblx0c3RvcmVPcD86IEdQVVN0b3JlT3A7XHJcblx0dGV4dHVyZVZpZXc/OiAoKSA9PiBHUFVUZXh0dXJlVmlldztcclxufVxyXG5cclxuZXhwb3J0IHR5cGUgUGFzc1R5cGUgPSBcInJlbmRlclwiIHwgXCJjb21wdXRlXCI7XHJcblxyXG5leHBvcnQgdHlwZSBHUFVCaW5kaW5nVHlwZSA9XHJcblx0fCBHUFVCdWZmZXJCaW5kaW5nVHlwZVxyXG5cdHwgR1BVU2FtcGxlckJpbmRpbmdUeXBlXHJcblx0fCBHUFVUZXh0dXJlU2FtcGxlVHlwZVxyXG5cdHwgR1BVU3RvcmFnZVRleHR1cmVBY2Nlc3M7XHJcblxyXG5leHBvcnQgdHlwZSBCaW5kR3JvdXBMYXlvdXRFbnRyeVR5cGUgPSB7XHJcblx0YmluZGluZzogbnVtYmVyO1xyXG5cdHZpc2liaWxpdHk6IEdQVVNoYWRlclN0YWdlRmxhZ3M7XHJcblx0dW5pZm9ybXM/OiBhbnlbXTtcclxuXHRidWZmZXI/OiBHUFVCdWZmZXJCaW5kaW5nTGF5b3V0O1xyXG5cdHNhbXBsZXI/OiBHUFVTYW1wbGVyQmluZGluZ0xheW91dDtcclxuXHR0ZXh0dXJlPzogR1BVVGV4dHVyZUJpbmRpbmdMYXlvdXQ7XHJcblx0c3RvcmFnZVRleHR1cmU/OiBHUFVTdG9yYWdlVGV4dHVyZUJpbmRpbmdMYXlvdXQ7XHJcblx0ZXh0ZXJuYWxUZXh0dXJlPzogR1BVRXh0ZXJuYWxUZXh0dXJlQmluZGluZ0xheW91dDtcclxufTtcclxuZXhwb3J0IHR5cGUgQnVmZmVyUmVzb3VyY2VUeXBlID0ge1xyXG5cdGJ1ZmZlcjogR1BVQnVmZmVyQmluZGluZ1R5cGU7XHJcblx0b2Zmc2V0OiBudW1iZXI7XHJcblx0c2l6ZTogbnVtYmVyO1xyXG59O1xyXG5leHBvcnQgdHlwZSBzYW1wbGVyQmluZEVudGl0eVJlc291cmNlVHlwZSA9IHtcclxuXHRyZXNvdXJjZTogR1BVU2FtcGxlcjtcclxufTtcclxuZXhwb3J0IHR5cGUgdGV4dHVyZUJpbmRFbnRpdHlSZXNvdXJjZVR5cGUgPSB7XHJcblx0cmVzb3VyY2U6IEdQVVRleHR1cmVWaWV3O1xyXG59O1xyXG5leHBvcnQgdHlwZSBCaW5kR3JvdXBFbnRpdHlSZXNvdXJjZVR5cGUgPVxyXG5cdHwgQnVmZmVyUmVzb3VyY2VUeXBlXHJcblx0fCBzYW1wbGVyQmluZEVudGl0eVJlc291cmNlVHlwZVxyXG5cdHwgdGV4dHVyZUJpbmRFbnRpdHlSZXNvdXJjZVR5cGU7XHJcbmV4cG9ydCB0eXBlIEJpbmRHcm91cEVudGl0eU9wdGlvbnMgPSB7XHJcblx0YmluZGluZzogbnVtYmVyO1xyXG5cdHJlc291cmNlOiBHUFVCaW5kaW5nUmVzb3VyY2U7XHJcbn07XHJcbmV4cG9ydCB0eXBlIEJpbmRHcm91cENhY2hlT3B0aW9ucyA9IHtcclxuXHRkZXZpY2U6IEdQVURldmljZTtcclxuXHRsYWJlbDogc3RyaW5nO1xyXG5cdGxheW91dDogQmluZEdyb3VwTGF5b3V0O1xyXG5cdGVudGlyZXM6IEJpbmRHcm91cEVudGl0eVtdO1xyXG5cdGluZGV4PzogbnVtYmVyO1xyXG5cdG9mZnNldD86IG51bWJlcjtcclxuXHRhbGlnbmVkU2l6ZT86IG51bWJlcjtcclxuXHRtYXhPZmZzZXQ/OiBudW1iZXI7XHJcblx0ZHluYW1pYz86IGJvb2xlYW47XHJcbn07XHJcbmV4cG9ydCB0eXBlIEltYWdlRGF0YSA9IHtcclxuXHRzb3VyY2U6IEltYWdlQml0bWFwIHwgSFRNTENhbnZhc0VsZW1lbnQgfCBUZXh0dXJlO1xyXG5cdHdpZHRoPzogbnVtYmVyO1xyXG5cdGhlaWdodD86IG51bWJlcjtcclxuXHRkZXB0aD86IG51bWJlcjtcclxuXHRzb3VyY2VYPzogbnVtYmVyO1xyXG5cdHNvdXJjZVk/OiBudW1iZXI7XHJcblx0bWlwTGV2ZWw/OiBudW1iZXI7XHJcblx0eD86IG51bWJlcjtcclxuXHR5PzogbnVtYmVyO1xyXG5cdHo/OiBudW1iZXI7XHJcblx0YXNwZWN0PzogXCJhbGxcIiB8IFwic3RlbmNpbC1vbmx5XCIgfCBcImRlcHRoLW9ubHlcIjtcclxuXHRjb2xvclNwYWNlPzogXCJzcmdiXCI7XHJcblx0cHJlbXVsdGlwbGllZEFscGhhPzogYm9vbGVhbjtcclxufTtcclxuZXhwb3J0IHR5cGUgV2ViR1BVVGV4dHVyZVByb3BzID0ge1xyXG5cdHNpemU6IHRleHR1cmVTaXplO1xyXG5cclxuXHRmaXhlZFNpemU/OiBib29sZWFuO1xyXG5cclxuXHRmb3JtYXQ6IHN0cmluZztcclxuXHJcblx0bGFiZWw/OiBzdHJpbmc7XHJcblxyXG5cdHVzYWdlPzogbnVtYmVyO1xyXG5cclxuXHRzYW1wbGVyPzogU2FtcGxlcjtcclxuXHJcblx0ZGF0YT86IEltYWdlRGF0YSB8IEFycmF5PEltYWdlRGF0YT47XHJcblxyXG5cdG1pcExldmVsQ291bnQ/OiBudW1iZXI7XHJcblxyXG5cdHNhbXBsZUNvdW50PzogbnVtYmVyO1xyXG5cclxuXHRkaW1lbnNpb24/OiBkaW1lbnNpb247XHJcblxyXG5cdHZpZXdGb3JtYXRzPzogc3RyaW5nO1xyXG5cclxuXHRzYW1wbGVUeXBlPzogc3RyaW5nO1xyXG5cclxuXHRuZWVkTWlwTWFwPzogYm9vbGVhbjtcclxuXHJcblx0ZGF0YUlzVGV4dHVyZT86IGJvb2xlYW47XHJcblxyXG5cdGFjY2Vzcz86IFN0b3JhZ2VUZXh0dXJlQWNjZXNzO1xyXG59O1xyXG5leHBvcnQgdHlwZSB0ZXh0dXJlU2l6ZSA9IHtcclxuXHR3aWR0aDogbnVtYmVyO1xyXG5cdGhlaWdodDogbnVtYmVyO1xyXG5cdGRlcHRoOiBudW1iZXI7XHJcbn07XHJcbmV4cG9ydCB0eXBlIGRpbWVuc2lvbiA9IFwiMWRcIiB8IFwiMmRcIiB8IFwiM2RcIjtcclxuZXhwb3J0IHR5cGUgYnVmZmVyTGF5b3V0VHlwZSA9IHtcclxuXHR0eXBlOiBzdHJpbmc7IC8vIFwidW5pZm9ybVwiXHJcblx0aGFzRHluYW1pY09mZnNldD86IGJvb2xlYW47XHJcblx0bWluQmluZGluZ1NpemU/OiBudW1iZXI7XHJcbn07XHJcbi8vIHJlbmRlcnN0YXRlXHJcbmV4cG9ydCB0eXBlIERlcHRoU3RlbmNpbCA9IHtcclxuXHRmb3JtYXQ6IFRleHR1cmVGb3JtYXQ7XHJcblx0ZGVwdGhXcml0ZUVuYWJsZWQ6IGJvb2xlYW47XHJcblx0ZGVwdGhDb21wYXJlOiBDb21wYXJlRnVuY3Rpb247XHJcblx0c3RlbmNpbFJlYWRNYXNrPzogbnVtYmVyO1xyXG5cdHN0ZW5jaWxXcml0ZU1hc2s/OiBudW1iZXI7XHJcblx0c3RlbmNpbEZyb250Pzoge1xyXG5cdFx0Y29tcGFyZTogQ29tcGFyZUZ1bmN0aW9uO1xyXG5cdFx0ZmFpbE9wOiBTdGVuY2lsT3BlcmF0aW9uO1xyXG5cdFx0ZGVwdGhGYWlsT3A6IFN0ZW5jaWxPcGVyYXRpb247XHJcblx0XHRwYXNzT3A6IFN0ZW5jaWxPcGVyYXRpb247XHJcblx0fTtcclxuXHRzdGVuY2lsQmFjaz86IHtcclxuXHRcdGNvbXBhcmU6IENvbXBhcmVGdW5jdGlvbjtcclxuXHRcdGZhaWxPcDogU3RlbmNpbE9wZXJhdGlvbjtcclxuXHRcdGRlcHRoRmFpbE9wOiBTdGVuY2lsT3BlcmF0aW9uO1xyXG5cdFx0cGFzc09wOiBTdGVuY2lsT3BlcmF0aW9uO1xyXG5cdH07XHJcblx0ZGVwdGhCaWFzPzogbnVtYmVyO1xyXG5cdGRlcHRoQmlhc1Nsb3BlU2NhbGU/OiBudW1iZXI7XHJcblx0ZGVwdGhCaWFzQ2xhbXA/OiBudW1iZXI7XHJcbn07XHJcbmV4cG9ydCB0eXBlIFByaW1pdGl2ZVN0YXRlID0ge1xyXG5cdGZyb250RmFjZT86IEZyb250RmFjZTtcclxuXHRjdWxsTW9kZT86IEN1bGxNb2RlO1xyXG5cdHVuY2xpcHBlZERlcHRoPzogYm9vbGVhbjtcclxuXHR0b3BvbG9neT86IFByaW1pdGl2ZVRvcG9sb2d5O1xyXG5cdHN0cmlwSW5kZXhGb3JtYXQ/OiBJbmRleEZvcm1hdDtcclxufTtcclxuZXhwb3J0IHR5cGUgTXVsdGlTYW1wbGUgPSB7XHJcblx0Y291bnQ/OiBudW1iZXI7XHJcblx0bWFzaz86IG51bWJlcjtcclxuXHRhbHBoYVRvQ292ZXJhZ2VFbmFibGVkPzogYm9vbGVhbjtcclxufTtcclxuZXhwb3J0IHR5cGUgVGFyZ2V0ID0ge1xyXG5cdGZvcm1hdDogVGV4dHVyZUZvcm1hdDtcclxuXHRibGVuZD86IHtcclxuXHRcdGNvbG9yOiB7XHJcblx0XHRcdG9wZXJhdGlvbjogQmxlbmRPcGVyYXRpb247XHJcblx0XHRcdHNyY0ZhY3RvcjogQmxlbmRGYWN0b3I7XHJcblx0XHRcdGRzdEZhY3RvcjogQmxlbmRGYWN0b3I7XHJcblx0XHR9O1xyXG5cdFx0YWxwaGE6IHtcclxuXHRcdFx0b3BlcmF0aW9uOiBCbGVuZE9wZXJhdGlvbjtcclxuXHRcdFx0c3JjRmFjdG9yOiBCbGVuZEZhY3RvcjtcclxuXHRcdFx0ZHN0RmFjdG9yOiBCbGVuZEZhY3RvcjtcclxuXHRcdH07XHJcblx0fTtcclxuXHR3cml0ZU1hc2s6IENvbG9yV3JpdGVGbGFncztcclxufTtcclxuZXhwb3J0IHR5cGUgQmxlbmRDb25zdGFudCA9IHtcclxuXHRyOiBudW1iZXI7XHJcblx0ZzogbnVtYmVyO1xyXG5cdGI6IG51bWJlcjtcclxuXHRhOiBudW1iZXI7XHJcbn07XHJcbmV4cG9ydCB0eXBlIFJlbmRlclN0YXRlUHJvcHMgPSB7XHJcblx0ZGVwdGhTdGVuY2lsPzogRGVwdGhTdGVuY2lsO1xyXG5cdHByaW1pdGl2ZT86IFByaW1pdGl2ZVN0YXRlO1xyXG5cdG11bHRpc2FtcGxlPzogTXVsdGlTYW1wbGU7XHJcblx0c3RlbmNpbFJlZmVyZW5jZT86IG51bWJlcjtcclxuXHR0YXJnZXRzPzogQXJyYXk8VGFyZ2V0PjtcclxuXHR2aWV3cG9ydD86IHsgeDogbnVtYmVyOyB5OiBudW1iZXI7IHdpZHRoOiBudW1iZXI7IGhlaWdodDogbnVtYmVyIH07XHJcblx0YmxlbmRDb25zdGFudD86IEJsZW5kQ29uc3RhbnQ7XHJcblx0c2Npc3NvclRlc3RFbmFibGVkPzogYm9vbGVhbjtcclxuXHRzdGVuY2lsRW5hYmxlZD86IGJvb2xlYW47XHJcbn07XHJcbmV4cG9ydCB0eXBlIFZpZXdQb3J0ID0ge1xyXG5cdHg/OiBudW1iZXI7XHJcblx0eT86IG51bWJlcjtcclxuXHR3aWR0aD86IG51bWJlcjtcclxuXHRoZWlnaHQ/OiBudW1iZXI7XHJcblx0bWluRGVwdGg/OiBudW1iZXI7XHJcblx0bWF4RGVwdGg/OiBudW1iZXI7XHJcbn07XHJcbmV4cG9ydCB0eXBlIFNjaXNzb3JUZXN0ID0ge1xyXG5cdHg6IG51bWJlcjtcclxuXHR5OiBudW1iZXI7XHJcblx0d2lkdGg6IG51bWJlcjtcclxuXHRoZWlnaHQ6IG51bWJlcjtcclxufTtcclxuZXhwb3J0IHR5cGUgU2hhZGVyTWF0ZXJpYWxQYXJtcyA9IHtcclxuXHR0eXBlOiBzdHJpbmc7XHJcblx0ZnJhZzogc3RyaW5nIHwgU2hhZGVyRnVuYztcclxuXHR2ZXJ0OiBzdHJpbmcgfCBTaGFkZXJGdW5jO1xyXG5cdHVuaWZvcm1zOiB7IFt1bmlmb3JtOiBzdHJpbmddOiBJVW5pZm9ybSB9O1xyXG5cdGRlZmluZXM/OiBTaGFkZXJEZWZpbmU7XHJcblx0bGlnaHQ/OiBib29sZWFuO1xyXG59O1xyXG5leHBvcnQgaW50ZXJmYWNlIElVbmlmb3JtPFRWYWx1ZSA9IGFueT4ge1xyXG5cdHR5cGU6IHN0cmluZztcclxuXHR2YWx1ZTogVFZhbHVlO1xyXG5cdGJpbmRpbmc/OiBudW1iZXI7XHJcblx0dmlzaWJpbGl0eT86IG51bWJlcjtcclxuXHR0ZXh0dXJlVmlldz86IEdQVVRleHR1cmVWaWV3O1xyXG59XHJcbmV4cG9ydCB0eXBlIFVuaWZvcm1zID0geyBbdW5pZm9ybTogc3RyaW5nXTogSVVuaWZvcm0gfTtcclxuZXhwb3J0IHR5cGUgSW5zdGFuY2UgPSBNZXNoIHwgUG9zdEVmZmVjdCB8IExpZ2h0O1xyXG5cclxuZXhwb3J0IGVudW0gUmVuZGVyT2JqZWN0VHlwZSB7XHJcblx0Q2FtZXJhID0gXCJjYW1lcmFcIixcclxuXHRMaWdodCA9IFwibGlnaHRcIixcclxuXHRNZXNoID0gXCJtZXNoXCIsXHJcblx0U2tpbk1lc2ggPSBcInNraW5NZXNoXCIsXHJcblx0Tm9kZSA9IFwibm9kZVwiLFxyXG5cdEF4ZXMgPSBcImF4ZXNcIixcclxuXHRTa3lib3ggPSBcInNreUJveFwiLFxyXG5cdFBvc3RFZmZlY3QgPSBcInBvc3RFZmZlY3RcIixcclxuXHREZWJ1ZyA9IFwiZGVidWdcIlxyXG59XHJcbmV4cG9ydCBlbnVtIExpZ2h0VHlwZSB7XHJcblx0U3BvdExpZ2h0ID0gXCJzcG90TGlnaHRcIixcclxuXHRQb2ludExpZ2h0ID0gXCJwb2ludExpZ2h0XCIsXHJcblx0QW1iaWVudExpZ2h0ID0gXCJhbWJpZW50TGlnaHRcIixcclxuXHREaXJlY3Rpb25hbExpZ2h0ID0gXCJkaXJlY3Rpb25hbExpZ2h0XCJcclxufVxyXG5leHBvcnQgdHlwZSBTaGFkZXJEZWZpbmUgPSB7IFtwcm9wOiBzdHJpbmddOiBib29sZWFuIHwgbnVtYmVyIH07XHJcblxyXG5leHBvcnQgdHlwZSBTaGFkZXJTb3VyY2VQYXJhbXMgPSB7XHJcblx0c2hhZGVySWQ/OiBzdHJpbmc7XHJcblx0ZGVmaW5lcz86IFNoYWRlckRlZmluZTtcclxuXHRjb21wdXRlPzogY29tcHV0ZVBhcmFtcztcclxuXHRyZW5kZXI/OiByZW5kZXJQYXJhbXM7XHJcblx0bGFuZ3VhZ2U/OlNoYWRlckxhbmd1YWdlXHJcbn07XHJcbmV4cG9ydCB0eXBlIHJlbmRlclBhcmFtcyA9IHtcclxuXHR2ZXJ0TWFpbj86IHN0cmluZztcclxuXHRmcmFnTWFpbj86IHN0cmluZztcclxuXHRmcmFnU2hhZGVyPzogc3RyaW5nIHwgU2hhZGVyRnVuYztcclxuXHR2ZXJ0U2hhZGVyPzogc3RyaW5nIHwgU2hhZGVyRnVuYztcclxufTtcclxuZXhwb3J0IHR5cGUgY29tcHV0ZVBhcmFtcyA9IHtcclxuXHRjb21wdXRlTWFpbj86IHN0cmluZztcclxuXHRjb21wdXRlU2hhZGVyPzogc3RyaW5nIHwgU2hhZGVyRnVuYztcclxufTtcclxuZXhwb3J0IGludGVyZmFjZSBHUFVTaGFkZXJNb2R1bGVPYmplY3Qge1xyXG5cdHZlcnQ6IEdQVVNoYWRlck1vZHVsZTtcclxuXHRmcmFnOiBHUFVTaGFkZXJNb2R1bGU7XHJcbn1cclxuZXhwb3J0IHR5cGUgU2hhZGVyRnVuYyA9IChkZWZpbmVzPzogU2hhZGVyRGVmaW5lKSA9PiBzdHJpbmc7XHJcbmV4cG9ydCB0eXBlIFNoYWRlclN0cmluZyA9IHtcclxuXHR2ZXJ0Pzogc3RyaW5nO1xyXG5cdGZyYWc/OiBzdHJpbmc7XHJcblx0Y29tcHV0ZT86IHN0cmluZztcclxufTtcclxuZXhwb3J0IHR5cGUgU2hhZGVyTW9kdWxlID0ge1xyXG5cdHZlcnQ/OiBHUFVTaGFkZXJNb2R1bGU7XHJcblx0ZnJhZz86IEdQVVNoYWRlck1vZHVsZTtcclxuXHRjb21wdXRlPzogR1BVU2hhZGVyTW9kdWxlO1xyXG59O1xyXG5leHBvcnQgdHlwZSBVbmlmb3JtRnVuYyA9ICgpID0+IGFueTtcclxuXHJcbmV4cG9ydCB0eXBlIERyYXdDb21tYW5kUGFyYW1zID0ge1xyXG5cdHNoYWRlckRhdGE/OiBTaGFkZXJEYXRhO1xyXG5cclxuXHRyZW5kZXJUYXJnZXQ/OiBSZW5kZXJUYXJnZXQ7XHJcblxyXG5cdHZlcnRleEJ1ZmZlcnM/OiBBcnJheTxWZXJ0ZXhCdWZmZXI+O1xyXG5cclxuXHRpbmRleEJ1ZmZlcj86IEluZGV4QnVmZmVyO1xyXG5cclxuXHRyZW5kZXJTdGF0ZT86IFJlbmRlclN0YXRlO1xyXG5cclxuXHRxdWVyeUluZGV4PzogbnVtYmVyO1xyXG5cclxuXHRjb3VudD86IG51bWJlcjtcclxuXHJcblx0aW5zdGFuY2VzPzogbnVtYmVyO1xyXG5cclxuXHRzaGFkZXJTb3VyY2U/OiBTaGFkZXJTb3VyY2U7XHJcblxyXG5cdGRpcnR5PzogYm9vbGVhbjtcclxuXHJcblx0bGlnaHRTaGFkZXJEYXRhPzogU2hhZGVyRGF0YTtcclxuXHJcblx0dXNlTGlnaHQ/OiBib29sZWFuO1xyXG59O1xyXG5cclxuZXhwb3J0IHR5cGUgTW9kZWxQYXJhbXMgPSB7XHJcblx0c2hhZGVySWQ/OiBzdHJpbmc7XHJcblx0ZnJhZz86IHN0cmluZztcclxuXHR2ZXJ0Pzogc3RyaW5nO1xyXG5cdGNvbXB1dGU/OiBzdHJpbmc7XHJcblx0dmVydGV4QnVmZmVycz86IEFycmF5PFZlcnRleEJ1ZmZlclByb3A+O1xyXG5cdHVuaWZvcm1UZXh0dXJlQW5kU2FtcGxlcj86IHtcclxuXHRcdFt1bmlmb3JtOiBzdHJpbmddOiBJVW5pZm9ybTxhbnk+O1xyXG5cdH07XHJcblx0dW5pZm9ybUJ1ZmZlcnM/OiBBcnJheTxVbmlmb3JtQnVmZmVyUHJvcD47XHJcblx0cmVuZGVyU3RhdGU/OiBSZW5kZXJTdGF0ZVByb3A7XHJcblx0Y291bnQ/OiBudW1iZXI7XHJcblx0aW5zdGFuY2VzPzogbnVtYmVyO1xyXG5cdGluZGljZXM/OiBBcnJheTxudW1iZXI+O1xyXG5cdGRyYXc/OiBEcmF3UGFybWFzO1xyXG5cdGRpc3BhdGNoPzogeyB4PzogbnVtYmVyOyB5PzogbnVtYmVyOyB6PzogbnVtYmVyIH07XHJcblx0cmVuZGVyVGFyZ2V0PzogUmVuZGVyVGFyZ2V0O1xyXG59O1xyXG5leHBvcnQgdHlwZSBWZXJ0ZXhCdWZmZXJQcm9wID0ge1xyXG5cdHVpZD86IHN0cmluZztcclxuXHRzdGVwTW9kZT86IHN0cmluZztcclxuXHRhcnJheVN0cmlkZT86IG51bWJlcjtcclxuXHRhdHRyaWJ1dGVzPzogeyBbcHJvcDogc3RyaW5nXTogQXR0cmlidXRlUHJvcCB9O1xyXG59O1xyXG5leHBvcnQgdHlwZSBVbmlmb3JtQnVmZmVyUHJvcCA9IHtcclxuXHR1aWQ/OiBzdHJpbmc7XHJcblx0dHlwZT86IHN0cmluZztcclxuXHR1c2FnZT86IG51bWJlcjtcclxuXHRiaW5kaW5nPzogbnVtYmVyO1xyXG5cdGJ1ZmZlcj86IEJ1ZmZlcjtcclxuXHRidWZmZXJTaXplPzogbnVtYmVyO1xyXG5cdHZpc2libGl0eT86IFNoYWRlclN0YWdlO1xyXG5cdHVuaWZvcm1zPzogeyBbdW5pZm9ybTogc3RyaW5nXTogSVVuaWZvcm08YW55PiB9O1xyXG59O1xyXG5leHBvcnQgdHlwZSBBdHRyaWJ1dGVQcm9wID0ge1xyXG5cdHNpemU/OiBudW1iZXI7XHJcblx0dmFsdWU/OiBbXTtcclxuXHRuYW1lcz86IEFycmF5PHN0cmluZz47XHJcblx0aXRlbVNpemVzPzogW107XHJcblx0YnVmZmVyPzogQnVmZmVyO1xyXG59O1xyXG5leHBvcnQgdHlwZSBSZW5kZXJTdGF0ZVByb3AgPSB7XHJcblx0c3RlbmNpbFJlZmVyZW5jZTogbnVtYmVyO1xyXG5cdGJsZW5kQ29uc3RhbnQ/OiB7XHJcblx0XHRyOiBudW1iZXI7XHJcblx0XHRnOiBudW1iZXI7XHJcblx0XHRiOiBudW1iZXI7XHJcblx0XHRhOiBudW1iZXI7XHJcblx0fTtcclxuXHRtdWx0aVNhbXBsZT86IHtcclxuXHRcdGNvdW50OiBudW1iZXI7XHJcblx0XHRtYXNrOiBudW1iZXI7XHJcblx0XHRhbHBoYVRvQ292ZXJhZ2VFbmFibGVkOiBib29sZWFuO1xyXG5cdH07XHJcblx0c2Npc3NvclRlc3Q/OiB7XHJcblx0XHR4OiBudW1iZXI7XHJcblx0XHR5OiBudW1iZXI7XHJcblx0XHR3aWR0aDogbnVtYmVyO1xyXG5cdFx0aGVpZ2h0OiBudW1iZXI7XHJcblx0fTtcclxuXHR2aWV3UG9ydD86IHtcclxuXHRcdHg6IG51bWJlcjtcclxuXHRcdHk6IG51bWJlcjtcclxuXHRcdHdpZHRoOiBudW1iZXI7XHJcblx0XHRoZWlnaHQ6IG51bWJlcjtcclxuXHRcdG1pbkRlcHRoOiBudW1iZXI7XHJcblx0XHRtYXhEZXB0aDogbnVtYmVyO1xyXG5cdH07XHJcblx0cHJpbWl0aXZlPzoge1xyXG5cdFx0ZnJvbnRGYWNlOiBzdHJpbmc7XHJcblx0XHRjdWxsTW9kZTogc3RyaW5nO1xyXG5cdFx0dW5jbGlwcGVkRGVwdGg6IGJvb2xlYW47XHJcblx0XHR0b3BvbG9neTogc3RyaW5nO1xyXG5cdH07XHJcblx0ZGVwdGhTdGVuY2lsPzoge1xyXG5cdFx0Zm9ybWF0OiBzdHJpbmc7XHJcblx0XHRkZXB0aFdyaXRlRW5hYmxlZDogYm9vbGVhbjtcclxuXHRcdGRlcHRoQ29tcGFyZTogc3RyaW5nO1xyXG5cdFx0c3RlbmNpbFJlYWRNYXNrOiBudW1iZXI7XHJcblx0XHRzdGVuY2lsV3JpdGVNYXNrOiBudW1iZXI7XHJcblx0XHRzdGVuY2lsRnJvbnRDb21wYXJlOiBzdHJpbmc7XHJcblx0XHRzdGVuY2lsRnJvbnRGYWlsT3A6IHN0cmluZztcclxuXHRcdHN0ZW5jaWxGcm9udERlcHRoRmFpbE9wOiBzdHJpbmc7XHJcblx0XHRzdGVuY2lsRnJvbnRQYXNzT3A6IHN0cmluZztcclxuXHJcblx0XHRzdGVuY2lsQmFja0NvbXBhcmU6IHN0cmluZztcclxuXHRcdHN0ZW5jaWxCYWNrRmFpbE9wOiBzdHJpbmc7XHJcblx0XHRzdGVuY2lsQmFja0RlcHRoRmFpbE9wOiBzdHJpbmc7XHJcblx0XHRzdGVuY2lsQmFja1Bhc3NPcDogc3RyaW5nO1xyXG5cdFx0ZGVwdGhCaWFzOiBudW1iZXI7XHJcblx0XHRkZXB0aEJpYXNTbG9wZVNjYWxlOiBudW1iZXI7XHJcblx0XHRkZXB0aEJpYXNDbGFtcDogbnVtYmVyO1xyXG5cdH07XHJcblx0dGFyZ2V0cz86IEFycmF5PHtcclxuXHRcdGZvcm1hdD86IHN0cmluZztcclxuXHRcdGJsZW5kQ29sb3JPcGVyYXRpb24/OiBzdHJpbmc7XHJcblx0XHRibGVuZENvbG9yU3JjRmFjdG9yPzogc3RyaW5nO1xyXG5cdFx0YmxlbmRDb2xvckRzdEZhY3Rvcj86IHN0cmluZztcclxuXHRcdGJsZW5kQWxwaGFPcGVyYXRpb24/OiBzdHJpbmc7XHJcblx0XHRibGVuZEFscGhhU3JjRmFjdG9yPzogc3RyaW5nO1xyXG5cdFx0YmxlbmRBbHBoYURzdEZhY3Rvcj86IHN0cmluZztcclxuXHRcdHdyaXRlTWFzazogR1BVQ29sb3JXcml0ZTtcclxuXHR9PjtcclxufTtcclxuZXhwb3J0IHR5cGUgRHJhd1Bhcm1hcyA9IHtcclxuXHRjb3VudD86IG51bWJlcjsgLy8gVGhlIG51bWJlciBvZiBpbmRpY2VzIHRvIGRyYXcuL1RoZSBudW1iZXIgb2YgdmVydGljZXMgdG8gZHJhdy5cclxuXHRpbnN0YW5jZUNvdW50PzogbnVtYmVyOyAvLyBUaGUgbnVtYmVyIG9mIGluc3RhbmNlcyB0byBkcmF3LlxyXG5cdGZpcnN0SW5kZXg/OiBudW1iZXI7IC8vIE9mZnNldCBpbnRvIHRoZSBpbmRleCBidWZmZXIsIGluIGluZGljZXMsIGJlZ2luIGRyYXdpbmdcclxuXHRmaXJzdFZlcnRleD86IG51bWJlcjsgLy8gT2Zmc2V0IGludG8gdGhlIHZlcnRleCBidWZmZXJzLCBpbiB2ZXJ0aWNlcywgdG8gYmVnaW4gZHJhd2luZyBmcm9tLlxyXG5cdGJhc2VWZXJ0ZXg/OiBudW1iZXI7IC8vICBBZGRlZCB0byBlYWNoIGluZGV4IHZhbHVlIGJlZm9yZSBpbmRleGluZyBpbnRvIHRoZSB2ZXJ0ZXggYnVmZmVycy5cclxuXHRmaXJzdEluc3RhbmNlPzogbnVtYmVyOyAvLyBGaXJzdCBpbnN0YW5jZSB0byBkcmF3LlxyXG59O1xyXG5leHBvcnQgdHlwZSBVbmlmb3JtU3RydWN0ID0ge1xyXG5cdFt1bmlmb3JtOiBzdHJpbmddOiB7IHR5cGU/OiBzdHJpbmc7IHZhbHVlPzogb2JqZWN0IHwgQXJyYXk8bnVtYmVyPjsgb2Zmc2V0PzogbnVtYmVyIH07XHJcbn07XHJcbmV4cG9ydCBlbnVtIFVuaWZvcm1FbnVtIHtcclxuXHRGbG9hdCA9IFwiZjMyXCIsXHJcblx0RmxvYXRWZWMyID0gXCJ2ZWMyPGYzMj5cIixcclxuXHRGbG9hdFZlYzMgPSBcInZlYzM8ZjMyPlwiLFxyXG5cdEZsb2F0VmVjNCA9IFwidmVjNDxmMzI+XCIsXHJcblx0RmxvYXRBcnJheSA9IFwiYXJyYXk8ZjMyPlwiLFxyXG5cdE1hdDIgPSBcIm1hdDJ4MjxmMzI+XCIsXHJcblx0TWF0MyA9IFwibWF0M3gzPGYzMj5cIixcclxuXHRNYXQ0ID0gXCJtYXQ0eDQ8ZjMyPlwiLFxyXG5cdENvbG9yID0gXCJjb2xvclwiLFxyXG5cdE1hdDRBcnJheSA9IFwiYXJyYXk8bWF0NHg0PGYzMj4+XCIsXHJcblx0VmVjMkFycmF5ID0gXCJhcnJheTx2ZWMyPGYzMj4+XCIsXHJcblx0VmVjM0FycmF5ID0gXCJhcnJheTx2ZWMzPGYzMj4+XCIsXHJcblx0VmVjNEFycmF5ID0gXCJhcnJheTx2ZWM0PGYzMj4+XCIsXHJcblx0VW5pZm9ybVVpbnQgPSBcInUzMlwiLFxyXG5cdFBvaW50TGlnaHRzID0gXCJwb2ludExpZ2h0c1wiLFxyXG5cdFBvaW50TGlnaHRTaGFkb3dzID0gXCJwb2ludExpZ2h0U2hhZG93c1wiLFxyXG5cdFNwb3RMaWdodHMgPSBcInNwb3RMaWdodHNcIixcclxuXHRTcG90TGlnaHRTaGFkb3dzID0gXCJzcG90TGlnaHRTaGFkb3dzXCIsXHJcblx0RGlydGVjdExpZ2h0cyA9IFwiZGlydGVjdExpZ2h0c1wiLFxyXG5cdERpcnRlY3RMaWdodFNoYWRvd3MgPSBcImRpcnRlY3RMaWdodFNoYWRvd3NcIixcclxuXHRVbmlmb3JtU3RydWN0QXJyYXkgPSBcIlN0cnVjdEFycmF5XCJcclxufVxyXG5leHBvcnQgdHlwZSBWZXJ0ZXhCdWZmZXJQYXJhbXMgPSB7XHJcblx0bGFiZWw6IHN0cmluZztcclxuXHRpbmRleD86IG51bWJlcjtcclxuXHRsb2NhdGlvbkluZGV4PzogbnVtYmVyO1xyXG5cdHN0ZXBNb2RlPzogSW5wdXRTdGVwTW9kZTtcclxuXHRhcnJheVN0cmlkZT86IG51bWJlcjtcclxufTtcclxuZXhwb3J0IGVudW0gU2hhZGVyTGFuZ3VhZ2V7XHJcblx0V0dTTD0nd2dzbCcsXHJcblx0R0xTTD0nZ2xzbCdcclxufVxyXG5leHBvcnQgZW51bSBTaGFkZXJNYWluU3RhZ2V7XHJcblx0VkVSVD1cInZlcnRleFwiLFxyXG5cdEZSQUc9XCJmcmFnbWVudFwiLFxyXG5cdENPTVBVVEU9XCJjb21wdXRlXCJcclxufSIsIi8vIGltcG9ydCBDb2xvciBmcm9tIFwiLi4vLi4vbWF0aC9Db2xvclwiO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gY29sb3JGcmFnKGRlZmluZXMpIHtcclxuICByZXR1cm4gYFxyXG4gICAgc3RydWN0IFZlcnRleE91dHB1dCB7XHJcbiAgICAgICAgQGJ1aWx0aW4ocG9zaXRpb24pIHBvc2l0aW9uOiB2ZWM0PGYzMj4sXHJcbiAgICAgICAgQGxvY2F0aW9uKDApIGNvbG9yOiB2ZWM0PGYzMj4sXHJcbiAgICB9O1xyXG4gICAgQGZyYWdtZW50XHJcbiAgICBmbiBtYWluKGlucHV0OlZlcnRleE91dHB1dCkgLT4gQGxvY2F0aW9uKDApIHZlYzQ8ZjMyPiB7XHJcbiAgICAgIHJldHVybiBpbnB1dC5jb2xvcjtcclxuICAgIH1cclxuICAgIGA7XHJcbn1cclxuIiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gY29sb3JWZXJ0KGRlZmluZXMpIHtcblx0cmV0dXJuIGBcbiAgIHN0cnVjdCBWZXJ0ZXhJbnB1dCB7XG4gICAgICAgIEBsb2NhdGlvbigke2RlZmluZXMucG9zaXRpb25Mb2NhdGlvbn0pIHBvc2l0aW9uOiB2ZWMzPGYzMj4sICAgICAgIFxuICAgICAgICBAbG9jYXRpb24oJHtkZWZpbmVzLmNvbG9yTG9jYXRpb259KSBjb2xvcjogdmVjNDxmMzI+LFxuICAgfVxuICAgc3RydWN0IFZlcnRleE91dHB1dCB7XG4gICAgICAgIEBidWlsdGluKHBvc2l0aW9uKSBwb3NpdGlvbjogdmVjNDxmMzI+LFxuICAgICAgICBAbG9jYXRpb24oMCkgY29sb3I6IHZlYzQ8ZjMyPixcbiAgICB9O1xuICAgc3RydWN0IFNlbGZVbmlmb3JtIHtcbiAgICAgIG1vZGVsTWF0cml4OiBtYXQ0eDQ8ZjMyPixcbiAgIH1cbiAgIHN0cnVjdCBTeXN0ZW1Vbmlmb3JtIHtcbiAgICAgIHByb2plY3Rpb25NYXRyaXg6IG1hdDR4NDxmMzI+LFxuICAgICAgdmlld01hdHJpeDogbWF0NHg0PGYzMj4sXG4gICAgICBpbnZlcnNlVmlld01hdHJpeDogbWF0NHg0PGYzMj4sXG4gICAgICBjYW1lcmFQb3NpdGlvbjogdmVjMzxmMzI+LFxuICAgfTsgXG4gICBAYmluZGluZygke2RlZmluZXMuY29sb3JCaW5kaW5nfSkgQGdyb3VwKDApIHZhcjx1bmlmb3JtPiBzZWxmVW5pZm9ybSA6IFNlbGZVbmlmb3JtO1xuICAgQGJpbmRpbmcoJHtkZWZpbmVzLmNhbWVyYUJpbmRpbmd9KSBAZ3JvdXAoMSkgdmFyPHVuaWZvcm0+IHN5c3RlbVVuaWZvcm0gOiBTeXN0ZW1Vbmlmb3JtO1xuICAgQHZlcnRleFxuICAgZm4gbWFpbihpbnB1dDogVmVydGV4SW5wdXQpIC0+IFZlcnRleE91dHB1dCB7XG4gICAgdmFyIG91dHB1dDpWZXJ0ZXhPdXRwdXQ7XG4gICAgb3V0cHV0LmNvbG9yPWlucHV0LmNvbG9yO1xuICAgIG91dHB1dC5wb3NpdGlvbiA9IHN5c3RlbVVuaWZvcm0ucHJvamVjdGlvbk1hdHJpeCAqIHN5c3RlbVVuaWZvcm0udmlld01hdHJpeCAqc2VsZlVuaWZvcm0ubW9kZWxNYXRyaXgqdmVjNDxmMzI+KGlucHV0LnBvc2l0aW9uLDEuMCk7XG4gICAgcmV0dXJuIG91dHB1dDtcbiAgIH1cbiAgIGA7XG59XG4iLCJjb25zdCBwcmVwcm9jZXNzb3JTeW1ib2xzID0gLyMoW15cXHNdKikoXFxzKikvZ207XG4vLyBUZW1wbGF0ZSBsaXRlcmFsIHRhZyB0aGF0IGhhbmRsZXMgc2ltcGxlIHByZXByb2Nlc3NvciBzeW1ib2xzIGZvciBXR1NMXG4vLyBzaGFkZXJzLiBTdXBwb3J0cyAjaWYvZWxpZi9lbHNlL2VuZGlmIHN0YXRlbWVudHMuXG5leHBvcnQgZnVuY3Rpb24gd2dzbFBhcnNlRGVmaW5lcyhzdHJpbmdzLCAuLi52YWx1ZXMpIHtcblx0Y29uc3Qgc3RhdGVTdGFjayA9IFtdO1xuXHRsZXQgc3RhdGUgPSB7IGZyYWc6IFwiXCIsIGVsc2VJc1ZhbGlkOiBmYWxzZSwgZXhwcmVzc2lvbjogdHJ1ZSB9O1xuXHRsZXQgZGVwdGggPSAxO1xuXG5cdGZvciAobGV0IGkgPSAwOyBpIDwgc3RyaW5ncy5sZW5ndGg7ICsraSkge1xuXHRcdGNvbnN0IGZyYWcgPSBzdHJpbmdzW2ldO1xuXHRcdGNvbnN0IG1hdGNoZWRTeW1ib2xzID0gZnJhZy5tYXRjaEFsbChwcmVwcm9jZXNzb3JTeW1ib2xzKTtcblxuXHRcdGxldCBsYXN0SW5kZXggPSAwO1xuXHRcdGxldCB2YWx1ZUNvbnN1bWVkID0gZmFsc2U7XG5cblx0XHRmb3IgKGNvbnN0IG1hdGNoIG9mIG1hdGNoZWRTeW1ib2xzKSB7XG5cdFx0XHRzdGF0ZS5mcmFnICs9IGZyYWcuc3Vic3RyaW5nKGxhc3RJbmRleCwgbWF0Y2guaW5kZXgpO1xuXG5cdFx0XHRzd2l0Y2ggKG1hdGNoWzFdKSB7XG5cdFx0XHRcdGNhc2UgXCJpZlwiOlxuXHRcdFx0XHRcdGlmIChtYXRjaC5pbmRleCArIG1hdGNoWzBdLmxlbmd0aCAhPSBmcmFnLmxlbmd0aCkge1xuXHRcdFx0XHRcdFx0dGhyb3cgbmV3IEVycm9yKFwiI2lmIG11c3QgYmUgaW1tZWRpYXRlbHkgZm9sbG93ZWQgYnkgYSB0ZW1wbGF0ZSBleHByZXNzaW9uIChpZTogJHt2YWx1ZX0pXCIpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHR2YWx1ZUNvbnN1bWVkID0gdHJ1ZTtcblx0XHRcdFx0XHRzdGF0ZVN0YWNrLnB1c2goc3RhdGUpO1xuXHRcdFx0XHRcdGRlcHRoKys7XG5cdFx0XHRcdFx0c3RhdGUgPSB7IGZyYWc6IFwiXCIsIGVsc2VJc1ZhbGlkOiB0cnVlLCBleHByZXNzaW9uOiAhIXZhbHVlc1tpXSB9O1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRjYXNlIFwiZWxpZlwiOlxuXHRcdFx0XHRcdGlmIChtYXRjaC5pbmRleCArIG1hdGNoWzBdLmxlbmd0aCAhPSBmcmFnLmxlbmd0aCkge1xuXHRcdFx0XHRcdFx0dGhyb3cgbmV3IEVycm9yKFwiI2VsaWYgbXVzdCBiZSBpbW1lZGlhdGVseSBmb2xsb3dlZCBieSBhIHRlbXBsYXRlIGV4cHJlc3Npb24gKGllOiAke3ZhbHVlfSlcIik7XG5cdFx0XHRcdFx0fSBlbHNlIGlmICghc3RhdGUuZWxzZUlzVmFsaWQpIHtcblx0XHRcdFx0XHRcdHRocm93IG5ldyBFcnJvcihcIiNlbGlmIG5vdCBwcmVjZWVkZWQgYnkgYW4gI2lmIG9yICNlbGlmXCIpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHR2YWx1ZUNvbnN1bWVkID0gdHJ1ZTtcblx0XHRcdFx0XHRpZiAoc3RhdGUuZXhwcmVzc2lvbiAmJiBzdGF0ZVN0YWNrLmxlbmd0aCAhPSBkZXB0aCkge1xuXHRcdFx0XHRcdFx0c3RhdGVTdGFjay5wdXNoKHN0YXRlKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0c3RhdGUgPSB7IGZyYWc6IFwiXCIsIGVsc2VJc1ZhbGlkOiB0cnVlLCBleHByZXNzaW9uOiAhIXZhbHVlc1tpXSB9O1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRjYXNlIFwiZWxzZVwiOlxuXHRcdFx0XHRcdGlmICghc3RhdGUuZWxzZUlzVmFsaWQpIHtcblx0XHRcdFx0XHRcdHRocm93IG5ldyBFcnJvcihcIiNlbHNlIG5vdCBwcmVjZWVkZWQgYnkgYW4gI2lmIG9yICNlbGlmXCIpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRpZiAoc3RhdGUuZXhwcmVzc2lvbiAmJiBzdGF0ZVN0YWNrLmxlbmd0aCAhPSBkZXB0aCkge1xuXHRcdFx0XHRcdFx0c3RhdGVTdGFjay5wdXNoKHN0YXRlKTtcblx0XHRcdFx0XHR9XG5cdFx0XHRcdFx0c3RhdGUgPSB7IGZyYWc6IG1hdGNoWzJdLCBlbHNlSXNWYWxpZDogZmFsc2UsIGV4cHJlc3Npb246IHRydWUgfTtcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0Y2FzZSBcImVuZGlmXCI6XG5cdFx0XHRcdFx0aWYgKCFzdGF0ZVN0YWNrLmxlbmd0aCkge1xuXHRcdFx0XHRcdFx0dGhyb3cgbmV3IEVycm9yKFwiI2VuZGlmIG5vdCBwcmVjZWVkZWQgYnkgYW4gI2lmXCIpO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHRjb25zdCBicmFuY2hTdGF0ZSA9IHN0YXRlU3RhY2subGVuZ3RoID09IGRlcHRoID8gc3RhdGVTdGFjay5wb3AoKSA6IHN0YXRlO1xuXHRcdFx0XHRcdHN0YXRlID0gc3RhdGVTdGFjay5wb3AoKTtcblx0XHRcdFx0XHRkZXB0aC0tO1xuXHRcdFx0XHRcdGlmIChicmFuY2hTdGF0ZS5leHByZXNzaW9uKSB7XG5cdFx0XHRcdFx0XHRzdGF0ZS5mcmFnICs9IGJyYW5jaFN0YXRlLmZyYWc7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHRcdHN0YXRlLmZyYWcgKz0gbWF0Y2hbMl07XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdGRlZmF1bHQ6XG5cdFx0XHRcdFx0Ly8gVW5rbm93biBwcmVwcm9jZXNzb3Igc3ltYm9sLiBFbWl0IGl0IGJhY2sgaW50byB0aGUgb3V0cHV0IGZyYWcgdW5jaGFuZ2VkLlxuXHRcdFx0XHRcdHN0YXRlLmZyYWcgKz0gbWF0Y2hbMF07XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHR9XG5cblx0XHRcdGxhc3RJbmRleCA9IG1hdGNoLmluZGV4ICsgbWF0Y2hbMF0ubGVuZ3RoO1xuXHRcdH1cblxuXHRcdC8vIElmIHRoZSBmcmFnIGRpZG4ndCBlbmQgb24gb25lIG9mIHRoZSBwcmVwcm9jZXNzb3Igc3ltYm9scyBhcHBlbmQgdGhlIHJlc3Qgb2YgaXQgaGVyZS5cblx0XHRpZiAobGFzdEluZGV4ICE9IGZyYWcubGVuZ3RoKSB7XG5cdFx0XHRzdGF0ZS5mcmFnICs9IGZyYWcuc3Vic3RyaW5nKGxhc3RJbmRleCwgZnJhZy5sZW5ndGgpO1xuXHRcdH1cblxuXHRcdC8vIElmIHRoZSBuZXh0IHZhbHVlIHdhc24ndCBjb25zdW1lZCBieSB0aGUgcHJlcHJvY2Vzc29yIHN5bWJvbCwgYXBwZW5kIGl0IGhlcmUuXG5cdFx0aWYgKCF2YWx1ZUNvbnN1bWVkICYmIHZhbHVlcy5sZW5ndGggPiBpKSB7XG5cdFx0XHRzdGF0ZS5mcmFnICs9IHZhbHVlc1tpXTtcblx0XHR9XG5cdH1cblxuXHRpZiAoc3RhdGVTdGFjay5sZW5ndGgpIHtcblx0XHR0aHJvdyBuZXcgRXJyb3IoXCJNaXNtYXRjaGVkICNpZi8jZW5kaWYgY291bnRcIik7XG5cdH1cblxuXHRyZXR1cm4gc3RhdGUuZnJhZztcbn1cbiIsImltcG9ydCB7IHdnc2xQYXJzZURlZmluZXMgfSBmcm9tIFwiLi4vV2dzbFByZXByb2Nlc3NvclwiO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gcGJyX2ZzKGRlZmluZXMpIHtcblx0cmV0dXJuIHdnc2xQYXJzZURlZmluZXNgXG4gICAgICAgIC8vIHJlZmVyZW5jZTogaHR0cHM6Ly9naXRodWIuY29tL0tocm9ub3NHcm91cC9nbFRGLVdlYkdMLVBCUi9ibG9iL21hc3Rlci9zaGFkZXJzL3Bici1mcmFnLmdsc2xcbiAgICAgICAgI2luY2x1ZGUgPHBiclV0aWxzPlxuICAgICAgICAjaW5jbHVkZSA8bGlnaHQ+XG4gICAgICAgICNpbmNsdWRlIDxicmRmPlxuICAgICAgICAjaW5jbHVkZSA8UGJyTWF0ZXJpYWxTdHJ1Y3Q+XG4gICAgICAgICNpbmNsdWRlIDxTeXN0ZW1Vbmlmb3JtPiBcbiAgICAgICAgI2luY2x1ZGUgPEZyYWdJbnB1dD4gICBcbiAgICAgICAgc3RydWN0IFBoeXNpY2FsTWF0ZXJpYWwge1xuICAgICAgICAgICAgZGlmZnVzZUNvbG9yOnZlYzM8ZjMyPixcbiAgICAgICAgICAgIHJvdWdobmVzczpmMzIsXG4gICAgICAgICAgICBzcGVjdWxhckNvbG9yOnZlYzM8ZjMyPixcbiAgICAgICAgICAgI2lmICR7ZGVmaW5lcy5VU0VfQ0xFQVJDT0FUfVxuICAgICAgICAgICAgICAgY2xlYXJjb2F0OmYzMixcbiAgICAgICAgICAgICAgIGNsZWFyY29hdFJvdWdobmVzczpmMzIsXG4gICAgICAgICAgICAgICBjbGVhcmNvYXRGMDp2ZWMzPGYzMj4sXG4gICAgICAgICAgICAgICBjbGVhcmNvYXRGOTA6ZjMyLFxuICAgICAgICAgICAjZW5kaWZcblxuICAgICAgICAgICAjaWYgJHtkZWZpbmVzLlVTRV9JUklERVNDRU5DRX1cbiAgICAgICAgICAgICAgIGlyaWRlc2NlbmNlOmYzMixcbiAgICAgICAgICAgICAgIGlyaWRlc2NlbmNlSU9SOmYzMixcbiAgICAgICAgICAgICAgIGlyaWRlc2NlbmNlVGhpY2tuZXNzOmYzMixcbiAgICAgICAgICAgICAgIGlyaWRlc2NlbmNlRnJlc25lbDp2ZWMzPGYzMj4sXG4gICAgICAgICAgICAgICBpcmlkZXNjZW5jZUYwOnZlYzM8ZjMyPixcbiAgICAgICAgICAgI2VuZGlmXG5cbiAgICAgICAgICAgI2lmICR7ZGVmaW5lcy5VU0VfU0hFRU59XG4gICAgICAgICAgICAgICBzaGVlbkNvbG9yOnZlYzM8ZjMyPixcbiAgICAgICAgICAgICAgIHNoZWVuUm91Z2huZXNzOmYzMixcbiAgICAgICAgICAgI2VuZGlmXG5cbiAgICAgICAgICAgI2lmICR7ZGVmaW5lcy5JT1J9XG4gICAgICAgICAgICAgICAgaW9yOmYzMixcbiAgICAgICAgICAgI2VuZGlmXG5cbiAgICAgICAgICAgI2lmICR7ZGVmaW5lcy5VU0VfVFJBTlNNSVNTSU9OfVxuICAgICAgICAgICAgICAgdHJhbnNtaXNzaW9uOmYzMixcbiAgICAgICAgICAgICAgIHRyYW5zbWlzc2lvbkFscGhhOmYzMixcbiAgICAgICAgICAgICAgIHRoaWNrbmVzczpmMzIsXG4gICAgICAgICAgICAgICBhdHRlbnVhdGlvbkRpc3RhbmNlOmYzMixcbiAgICAgICAgICAgICAgIGF0dGVudWF0aW9uQ29sb3I6dmVjMzxmMzI+LFxuICAgICAgICAgICAjZW5kaWZcbiAgICAgICB9O1xuICAgICAgICBjb25zdCBNX1BJOmYzMiA9IDMuMTQxNTkyNjUzNTg5NzkzO1xuICAgICAgICBjb25zdCBjX01pblJvdWdobmVzczpmMzIgPSAwLjA0O1xuICAgICAgICAjaW5jbHVkZSA8VGV4dHVyZUFuZFNhbXBsZXJEZWZpbmU+XG4gICAgICAgICNpZiAke2RlZmluZXMuVVNFX0lCTH1cbiAgICAgICAgICAgICNpbmNsdWRlIDxpYmw+XG4gICAgICAgICNlbmRpZlxuICAgICAgICBAYmluZGluZygke2RlZmluZXMucGJyQmluZGluZ30pIEBncm91cCgwKSB2YXI8dW5pZm9ybT4gbWF0ZXJpYWxVbmlmb3JtIDogTWF0ZXJpYWxVbmlmb3JtO1xuICAgICAgICBAYmluZGluZygke2RlZmluZXMuY2FtZXJhQmluZGluZ30pIEBncm91cCgxKSB2YXI8dW5pZm9ybT4gc3lzdGVtVW5pZm9ybSA6IFN5c3RlbVVuaWZvcm07XG4gICAgICAgIEBmcmFnbWVudFxuICAgICAgICBmbiBtYWluKGlucHV0OkZyYWdJbnB1dCkgLT4gQGxvY2F0aW9uKDApIHZlYzQ8ZjMyPiBcbiAgICAgICAge1xuICAgICAgICAgICAgdmFyIHBlcmNlcHR1YWxSb3VnaG5lc3M6ZjMyID0gbWF0ZXJpYWxVbmlmb3JtLnJvdWdobmVzcztcbiAgICAgICAgICAgIHZhciBtZXRhbGxpYzpmMzIgPSBtYXRlcmlhbFVuaWZvcm0ubWV0YWxsaWM7XG5cbiAgICAgICAgICAgICNpZiAke2RlZmluZXMuVVNFX01FVEFMTkVTU1RFWFRVUkV9XG4gICAgICAgICAgICAgICAgbGV0IG1yU2FtcGxlOnZlYzQ8ZjMyPiA9IHRleHR1cmVTYW1wbGUobWV0YWxuZXNzUm91Z2huZXNzVGV4dHVyZSxtZXRhbG5lc3NSb3VnaG5lc3NTYW1wbGVyLCBpbnB1dC51dik7XG4gICAgICAgICAgICAgICAgcGVyY2VwdHVhbFJvdWdobmVzcyA9IG1yU2FtcGxlLmcgKiBwZXJjZXB0dWFsUm91Z2huZXNzO1xuICAgICAgICAgICAgICAgIG1ldGFsbGljID0gbXJTYW1wbGUuYiAqIG1ldGFsbGljO1xuICAgICAgICAgICAgI2VuZGlmXG4gICAgICAgICAgICBwZXJjZXB0dWFsUm91Z2huZXNzID0gY2xhbXAocGVyY2VwdHVhbFJvdWdobmVzcywgY19NaW5Sb3VnaG5lc3MsIDEuMCk7XG4gICAgICAgICAgICBtZXRhbGxpYyA9IGNsYW1wKG1ldGFsbGljLCAwLjAsIDEuMCk7XG4gICAgICAgICAgICBsZXQgYWxwaGFSb3VnaG5lc3M6ZjMyID0gcGVyY2VwdHVhbFJvdWdobmVzcyAqIHBlcmNlcHR1YWxSb3VnaG5lc3M7XG5cblxuICAgICAgICAgICAgLy8gVGhlIGFsYmVkbyBtYXkgYmUgZGVmaW5lZCBmcm9tIGEgYmFzZSB0ZXh0dXJlIG9yIGEgZmxhdCBjb2xvclxuICAgICAgICAgICAgI2lmICR7ZGVmaW5lcy5VU0VfVEVYVFVSRX1cbiAgICAgICAgICAgICAgICBsZXQgYmFzZUNvbG9yOnZlYzQ8ZjMyPiA9IHRleHR1cmVTYW1wbGUoYmFzZUNvbG9yVGV4dHVyZSxiYXNlQ29sb3JTYW1wbGVyLCBpbnB1dC51dikgO1xuICAgICAgICAgICAgI2Vsc2VcbiAgICAgICAgICAgICAgICBsZXQgYmFzZUNvbG9yOnZlYzQ8ZjMyPiA9IHZlYzQ8ZjMyPihtYXRlcmlhbFVuaWZvcm0uY29sb3IsMS4wKTtcbiAgICAgICAgICAgICNlbmRpZlxuXG4gICAgICAgICAgICAjaWYgJHtkZWZpbmVzLlVTRV9OT1JNQUxURVhUVVJFfVxuICAgICAgICAgICAgICAgIGxldCBuOnZlYzM8ZjMyPiA9IGdldE5vcm1hbEJ5Tm9ybWFsVGV4dHVyZShpbnB1dCk7ICBcbiAgICAgICAgICAgICNlbHNlXG4gICAgICAgICAgICAgICAgbGV0IG46dmVjMzxmMzI+ID0gZ2V0Tm9ybWFsKGlucHV0KTtcbiAgICAgICAgICAgICNlbmRpZlxuICAgICAgICAgICAgdmFyIG1hdGVyaWFsOlBoeXNpY2FsTWF0ZXJpYWw7XG4gICAgICAgICAgICBtYXRlcmlhbC5kaWZmdXNlQ29sb3I9YmFzZUNvbG9yLnJnYiooIDEuMCAtIG1ldGFsbGljICk7XG4gICAgICAgICAgICBtYXRlcmlhbC5yb3VnaG5lc3M9cGVyY2VwdHVhbFJvdWdobmVzcztcbiAgICAgICAgICAgIG1hdGVyaWFsLnNwZWN1bGFyQ29sb3I9bWl4KCB2ZWMzPGYzMj4oIDAuMDQpLCBiYXNlQ29sb3IucmdiLCBtZXRhbGxpYyApO1xuICAgICAgICAgICAgdmFyIGdlb21ldHJ5Okdlb21ldHJ5O1xuICAgICAgICAgICAgZ2VvbWV0cnkubm9ybWFsPW47XG4gICAgICAgICAgICBnZW9tZXRyeS52aWV3RGlyPW5vcm1hbGl6ZShzeXN0ZW1Vbmlmb3JtLmNhbWVyYVBvc2l0aW9uIC0gaW5wdXQud29ybGRQb3MpO1xuICAgICAgICAgICAgZ2VvbWV0cnkucG9zaXRpb249aW5wdXQud29ybGRQb3M7XG4gICAgICAgICAgICBnZW9tZXRyeS5kb3ROViA9IHNhdHVyYXRlKGRvdChnZW9tZXRyeS5ub3JtYWwsIGdlb21ldHJ5LnZpZXdEaXIpICk7XG4gICAgICAgICAgICAvL2xpZ2h0IHNoYWRpbmdcbiAgICAgICAgICAgIHZhciByZWZsZWN0ZWRMaWdodD1wYXJzZUxpZ2h0cyhnZW9tZXRyeSxtYXRlcmlhbCk7XG4gICAgICAgICAgICB2YXIgY29sb3I9cmVmbGVjdGVkTGlnaHQuZGlyZWN0RGlmZnVzZStyZWZsZWN0ZWRMaWdodC5kaXJlY3RTcGVjdWxhcjtcbiAgICAgICAgICAgIC8vSUJMXG4gICAgICAgICAgICAjaWYgJHtkZWZpbmVzLlVTRV9JQkwgJiYgZGVmaW5lcy5IQVNfVVZ9XG4gICAgICAgICAgICAgICAgdmFyIHJlZmxlY3RlZExpZ2h0RGlmZnVzZT1pbmRpcmVjdERpZmZ1c2VfUGh5c2ljYWwoZ2VvbWV0cnksbWF0ZXJpYWwpO1xuICAgICAgICAgICAgICAgIHZhciByZWZsZWN0ZWRMaWdodFNwZWN1bGFyPWluZGlyZWN0U3BlY3VsYXJfUGh5c2ljYWwoZ2VvbWV0cnksbWF0ZXJpYWwpO1xuICAgICAgICAgICAgICAgIGNvbG9yKz1yZWZsZWN0ZWRMaWdodERpZmZ1c2UuaW5kaXJlY3REaWZmdXNlO1xuICAgICAgICAgICAgICAgIGNvbG9yKz1yZWZsZWN0ZWRMaWdodFNwZWN1bGFyLmluZGlyZWN0U3BlY3VsYXI7XG4gICAgICAgICAgICAjZW5kaWZcbiAgICAgICAgICAgICNpZiAke2RlZmluZXMuVVNFX0FPVEVYVFVSRX1cbiAgICAgICAgICAgICAgICBsZXQgYW86ZjMyID0gdGV4dHVyZVNhbXBsZShhb1RleHR1cmUsYW9TYW1wbGVyLCBpbnB1dC51dikucjtcbiAgICAgICAgICAgICAgICBjb2xvciA9IG1peChjb2xvciwgY29sb3IgKiBhbywgbWF0ZXJpYWxVbmlmb3JtLm9jY2x1c2lvblN0cmVuZ3RoKTtcbiAgICAgICAgICAgICNlbmRpZlxuXG4gICAgICAgICAgICAjaWYgJHtkZWZpbmVzLlVTRV9FTUlTU0lWRVRFWFRVUkV9XG4gICAgICAgICAgICAgICAgbGV0IGVtaXNzaXZlOnZlYzM8ZjMyPiA9IHRleHR1cmVTYW1wbGUoZW1pc3NpdmVUZXh0dXJlLCBlbWlzc2l2ZVNhbXBsZXIsaW5wdXQudXYpLnJnYiA7XG4gICAgICAgICAgICAgICAgY29sb3IgKz0gZW1pc3NpdmU7XG4gICAgICAgICAgICAjZW5kaWZcbiAgICAgICByZXR1cm4gdmVjNDxmMzI+KGNvbG9yLCBiYXNlQ29sb3IuYSk7XG4gICAgfVxuICAgYDtcbn1cbiIsImltcG9ydCB7IHdnc2xQYXJzZURlZmluZXMgfSBmcm9tIFwiLi4vV2dzbFByZXByb2Nlc3NvclwiO1xuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gcGJyX3ZzKGRlZmluZXMpIHtcblx0cmV0dXJuIHdnc2xQYXJzZURlZmluZXNgXG4gICAgI2luY2x1ZGUgPFBick1hdGVyaWFsU3RydWN0PlxuICAgICNpbmNsdWRlIDxTeXN0ZW1Vbmlmb3JtPlxuICAgICNpbmNsdWRlIDxWZXJ0ZXhJbnB1dD5cbiAgICAjaW5jbHVkZSA8VmVydGV4T3V0cHV0PiBcbiAgICAjaW5jbHVkZSA8c2tpblZlcnRIZWFkZXI+XG4gICAgI2luY2x1ZGUgPGluc3RhbmNlVmVydEhlYWRlcj5cbiAgICBAYmluZGluZygke2RlZmluZXMucGJyQmluZGluZ30pIEBncm91cCgwKSB2YXI8dW5pZm9ybT4gbWF0ZXJpYWxVbmlmb3JtIDogTWF0ZXJpYWxVbmlmb3JtO1xuICAgIEBiaW5kaW5nKCR7ZGVmaW5lcy5jYW1lcmFCaW5kaW5nfSkgQGdyb3VwKDEpIHZhcjx1bmlmb3JtPiBzeXN0ZW1Vbmlmb3JtIDogU3lzdGVtVW5pZm9ybTtcbiAgICBAdmVydGV4XG4gICAgZm4gbWFpbihpbnB1dDogVmVydGV4SW5wdXQpLT4gVmVydGV4T3V0cHV0XG4gICB7XG4gICAgICAgIHZhciBvdXRwdXQ6IFZlcnRleE91dHB1dDtcbiAgICAgICAgI2lmICR7ZGVmaW5lcy5IQVNfVVZ9XG4gICAgICAgICAgICBvdXRwdXQudXYgPSBpbnB1dC51djtcbiAgICAgICAgI2VuZGlmXG4gICAgICAgIHZhciBtb2RlbE1hdHJpeDptYXQ0eDQ8ZjMyPjtcbiAgICAgICAgdmFyIHZOb3JtYWxWaWV3OnZlYzM8ZjMyPjtcbiAgICAgICAgdk5vcm1hbFZpZXcgPSBub3JtYWxpemUobWF0ZXJpYWxVbmlmb3JtLm5vcm1hbE1hdHJpeCAqIHZlYzQ8ZjMyPihpbnB1dC5ub3JtYWwsMC4wKSkueHl6O1xuICAgICAgICBtb2RlbE1hdHJpeD1tYXRlcmlhbFVuaWZvcm0ubW9kZWxNYXRyaXg7ICAgXG4gICAgICAgICNpbmNsdWRlIDxza2luVmVydE1haW4+XG4gICAgICAgICNpbmNsdWRlIDxpbnN0YW5jZVZlcnRNYWluPiAgXG4gICAgICAgIG91dHB1dC5ub3JtYWwgPSB2Tm9ybWFsVmlldy54eXo7XG4gICAgICAgIG91dHB1dC5wb3NpdGlvbiA9IHN5c3RlbVVuaWZvcm0ucHJvamVjdGlvbk1hdHJpeCAqIHN5c3RlbVVuaWZvcm0udmlld01hdHJpeCAqbW9kZWxNYXRyaXgqIHZlYzQ8ZjMyPihpbnB1dC5wb3NpdGlvbiwgMS4wKTtcbiAgICAgICAgbGV0IG1vZGVsUG9zPW1vZGVsTWF0cml4ICp2ZWM0PGYzMj4oaW5wdXQucG9zaXRpb24sMS4wKTtcbiAgICAgICAgb3V0cHV0LndvcmxkUG9zID0gbW9kZWxQb3MueHl6L21vZGVsUG9zLnc7XG4gICAgICAgIHJldHVybiBvdXRwdXQ7ICAgXG4gICB9XG4gICBgO1xufVxuIiwiaW1wb3J0IHsgd2dzbFBhcnNlRGVmaW5lcyB9IGZyb20gXCIuLi9XZ3NsUHJlcHJvY2Vzc29yXCI7XHJcblxyXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBwYnJGcmFnKGRlZmluZXMpIHtcclxuXHRyZXR1cm4gd2dzbFBhcnNlRGVmaW5lc2BcclxuICAgICNpbmNsdWRlIDxsaWdodENvbW1vbj5cclxuICAgICNpbmNsdWRlIDxsaWdodD5cclxuICAgICNpbmNsdWRlIDxicmRmPlxyXG4gICAgI2luY2x1ZGUgPHBiclN0cnVjdD5cclxuICAgICNpbmNsdWRlIDxwYnJVdGlscz5cclxuICAgICNpbmNsdWRlIDxwYnJGdW5jdGlvbj5cclxuICAgICNpbmNsdWRlIDxwYnJUZXh0dXJlPlxyXG4gICAgI2luY2x1ZGUgPGVudmlyb25tZW50PlxyXG4gICAgc3RydWN0IFN5c3RlbVVuaWZvcm0ge1xyXG4gICAgICAgIHByb2plY3Rpb25NYXRyaXg6IG1hdDR4NDxmMzI+LFxyXG4gICAgICAgIHZpZXdNYXRyaXg6IG1hdDR4NDxmMzI+LFxyXG4gICAgICAgIGludmVyc2VWaWV3TWF0cml4OiBtYXQ0eDQ8ZjMyPixcclxuICAgICAgICBjYW1lcmFQb3NpdGlvbjogdmVjMzxmMzI+LFxyXG4gICAgfTsgXHJcbiAgICAvLyB1bmlmb3JtIHZlYzMgbGlnaHRQcm9iZVs5XSxcclxuLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vXHJcbnN0cnVjdCBWZXJ0ZXhPdXRwdXQge1xyXG4gICAgQGJ1aWx0aW4ocG9zaXRpb24pIHBvc2l0aW9uOiB2ZWM0PGYzMj4sXHJcbiAgICBAYnVpbHRpbihmcm9udF9mYWNpbmcpIGlzX2Zyb250OiBib29sLFxyXG4gICAgQGxvY2F0aW9uKDApIHZVdjogdmVjMjxmMzI+LFxyXG4gICAgQGxvY2F0aW9uKDEpIHZWaWV3UG9zaXRpb246IHZlYzM8ZjMyPiwgLy8gVmVjdG9yIGZyb20gdmVydGV4IHRvIGNhbWVyYS5cclxuICAgIEBsb2NhdGlvbigyKSB2V29ybGRQb3NpdGlvbjogdmVjMzxmMzI+LFxyXG4gICAgQGxvY2F0aW9uKDMpIHZOb3JtYWw6IHZlYzM8ZjMyPixcclxuICAgIC8vIOWPr+mAiVxyXG4gICAgI2lmICR7ZGVmaW5lcy5VU0VfTElHSFRURVhUVVJFIHx8IGRlZmluZXMuVVNFX0FPVEVYVFVSRX1cclxuICAgICAgICBAbG9jYXRpb24oJHtkZWZpbmVzLnZVdjJPdXRMb2NhdGlvbn0pIHZVdjI6IHZlYzI8ZjMyPixcclxuICAgICNlbmRpZlxyXG5cclxuICAgICNpZiAke2RlZmluZXMuVVNFX0NPTE9SX0FMUEhBfVxyXG4gICAgICAgIEBsb2NhdGlvbigke2RlZmluZXMudkNvbG9yT3V0TG9jYXRpb259KSB2Q29sb3I6IHZlYzQ8ZjMyPixcclxuICAgICNlbGlmICR7ZGVmaW5lcy5VU0VfQ09MT1IgfHwgZGVmaW5lcy5VU0VfSU5TVEFOQ0lOR19DT0xPUn1cclxuICAgICAgICBAbG9jYXRpb24oJHtkZWZpbmVzLnZDb2xvck91dExvY2F0aW9ufSkgdkNvbG9yOiB2ZWMzPGYzMj4sXHJcbiAgICAjZW5kaWZcclxuXHJcbiAgICAjaWYgJHtkZWZpbmVzLlVTRV9UQU5HRU5UfVxyXG4gICAgICAgIEBsb2NhdGlvbigke2RlZmluZXMudlRhbmdlbnRPdXRMb2NhdGlvbn0pIHZUYW5nZW50OiB2ZWMzPGYzMj4sXHJcbiAgICAgICAgQGxvY2F0aW9uKCR7ZGVmaW5lcy52Qml0YW5nZW50T3V0TG9jYXRpb259KSB2Qml0YW5nZW50OiB2ZWMzPGYzMj4sXHJcbiAgICAjZW5kaWZcclxufTtcclxuICAgICAgICBzdHJ1Y3QgUGh5c2ljYWxNYXRlcmlhbCB7XHJcbiAgICAgICAgICAgICBkaWZmdXNlQ29sb3I6dmVjMzxmMzI+LFxyXG4gICAgICAgICAgICAgcm91Z2huZXNzOmYzMixcclxuICAgICAgICAgICAgIHNwZWN1bGFyQ29sb3I6dmVjMzxmMzI+LFxyXG4gICAgICAgICAgICAgc3BlY3VsYXJGOTA6ZjMyLFxyXG4gICAgICAgICAgICAjaWYgJHtkZWZpbmVzLlVTRV9DTEVBUkNPQVR9XHJcbiAgICAgICAgICAgICAgICBjbGVhcmNvYXQ6ZjMyLFxyXG4gICAgICAgICAgICAgICAgY2xlYXJjb2F0Um91Z2huZXNzOmYzMixcclxuICAgICAgICAgICAgICAgIGNsZWFyY29hdEYwOnZlYzM8ZjMyPixcclxuICAgICAgICAgICAgICAgIGNsZWFyY29hdEY5MDpmMzIsXHJcbiAgICAgICAgICAgICNlbmRpZlxyXG5cclxuICAgICAgICAgICAgI2lmICR7ZGVmaW5lcy5VU0VfSVJJREVTQ0VOQ0V9XHJcbiAgICAgICAgICAgICAgICBpcmlkZXNjZW5jZTpmMzIsXHJcbiAgICAgICAgICAgICAgICBpcmlkZXNjZW5jZUlPUjpmMzIsXHJcbiAgICAgICAgICAgICAgICBpcmlkZXNjZW5jZVRoaWNrbmVzczpmMzIsXHJcbiAgICAgICAgICAgICAgICBpcmlkZXNjZW5jZUZyZXNuZWw6dmVjMzxmMzI+LFxyXG4gICAgICAgICAgICAgICAgaXJpZGVzY2VuY2VGMDp2ZWMzPGYzMj4sXHJcbiAgICAgICAgICAgICNlbmRpZlxyXG5cclxuICAgICAgICAgICAgI2lmICR7ZGVmaW5lcy5VU0VfU0hFRU59XHJcbiAgICAgICAgICAgICAgICBzaGVlbkNvbG9yOnZlYzM8ZjMyPixcclxuICAgICAgICAgICAgICAgIHNoZWVuUm91Z2huZXNzOmYzMixcclxuICAgICAgICAgICAgI2VuZGlmXHJcblxyXG4gICAgICAgICAgICAjaWYgJHtkZWZpbmVzLklPUn1cclxuICAgICAgICAgICAgICAgICBpb3I6ZjMyLFxyXG4gICAgICAgICAgICAjZW5kaWZcclxuXHJcbiAgICAgICAgICAgICNpZiAke2RlZmluZXMuVVNFX1RSQU5TTUlTU0lPTn1cclxuICAgICAgICAgICAgICAgIHRyYW5zbWlzc2lvbjpmMzIsXHJcbiAgICAgICAgICAgICAgICB0cmFuc21pc3Npb25BbHBoYTpmMzIsXHJcbiAgICAgICAgICAgICAgICB0aGlja25lc3M6ZjMyLFxyXG4gICAgICAgICAgICAgICAgYXR0ZW51YXRpb25EaXN0YW5jZTpmMzIsXHJcbiAgICAgICAgICAgICAgICBhdHRlbnVhdGlvbkNvbG9yOnZlYzM8ZjMyPixcclxuICAgICAgICAgICAgI2VuZGlmXHJcbiAgICAgICAgfTtcclxuQGJpbmRpbmcoMCkgQGdyb3VwKDApIHZhcjx1bmlmb3JtPiBtYXRlcmlhbFVuaWZvcm0gOiBNYXRlcmlhbFVuaWZvcm07XHJcbkBiaW5kaW5nKDApIEBncm91cCgxKSB2YXI8dW5pZm9ybT4gc3lzdGVtVW5pZm9ybSA6IFN5c3RlbVVuaWZvcm07XHJcbkBmcmFnbWVudFxyXG5mbiBtYWluKGlucHV0OlZlcnRleE91dHB1dCktPiBAbG9jYXRpb24oMCkgdmVjNDxmMzI+IHtcclxuICAgICAgICB2YXIgZGlmZnVzZUNvbG9yOnZlYzQ8ZjMyPiA9IHZlYzQobWF0ZXJpYWxVbmlmb3JtLmRpZmZ1c2UsIG1hdGVyaWFsVW5pZm9ybS5vcGFjaXR5ICk7XHJcbiAgICAgICAvLyBSZWZsZWN0ZWRMaWdodCByZWZsZWN0ZWRMaWdodCA9IFJlZmxlY3RlZExpZ2h0KCB2ZWMzKCAwLjAgKSwgdmVjMyggMC4wICksIHZlYzMoIDAuMCApLCB2ZWMzKCAwLjAgKSApO1xyXG4gICAgICAgIHZhciByZWZsZWN0ZWRMaWdodDpSZWZsZWN0ZWRMaWdodDtcclxuICAgICAgICB2YXIgdG90YWxFbWlzc2l2ZVJhZGlhbmNlOnZlYzM8ZjMyPiA9IG1hdGVyaWFsVW5pZm9ybS5lbWlzc2l2ZTtcclxuICAgICAgICAjaWYgJHtkZWZpbmVzLlVTRV9URVhUVVJFfVxyXG4gICAgICAgICAgICB2YXIgc2FtcGxlZERpZmZ1c2VDb2xvcjp2ZWM0PGYzMj4gPXRleHR1cmVTYW1wbGUoYmFzZVRleHR1cmUsIGJhc2VTYW1wbGVyLCBpbnB1dC52VXYpO1xyXG4gICAgICAgICAgICAjaWYgJHtkZWZpbmVzLkRFQ09ERV9WSURFT19URVhUVVJFfVxyXG4gICAgICAgICAgICAgICAgc2FtcGxlZERpZmZ1c2VDb2xvciA9IHZlYzQ8ZjMyPiggbWl4KCBwb3coIHNhbXBsZWREaWZmdXNlQ29sb3IucmdiICogMC45NDc4NjcyOTg2ICsgdmVjMzxmMzI+KCAwLjA1MjEzMjcwMTQgKSwgdmVjMzxmMzI+KCAyLjQgKSApLCBzYW1wbGVkRGlmZnVzZUNvbG9yLnJnYiAqIDAuMDc3Mzk5MzgwOCwgdmVjMzxmMzI+KCBsZXNzVGhhbkVxdWFsKCBzYW1wbGVkRGlmZnVzZUNvbG9yLnJnYiwgdmVjMzxmMzI+KCAwLjA0MDQ1ICkgKSApICksIHNhbXBsZWREaWZmdXNlQ29sb3IudyApO1xyXG4gICAgICAgICAgICAjZW5kaWZcclxuXHJcbiAgICAgICAgICAgIGRpZmZ1c2VDb2xvciAqPSBzYW1wbGVkRGlmZnVzZUNvbG9yO1xyXG4gICAgICAgICNlbmRpZlxyXG5cclxuICAgICAgICB2YXIgcm91Z2huZXNzRmFjdG9yOmYzMiA9IG1hdGVyaWFsVW5pZm9ybS5yb3VnaG5lc3M7XHJcbiAgICBcclxuICAgICAgICAjaWYgJHtkZWZpbmVzLlVTRV9ST1VHSE5FU1NURVhUVVJFfVxyXG4gICAgICAgICAgICBsZXQgdGV4ZWxSb3VnaG5lc3M6dmVjNDxmMzI+PXRleHR1cmVTYW1wbGUocm91Z2huZXNzVGV4dHVyZSwgYmFzZVNhbXBsZXIsIGlucHV0LnZVdik7XHJcbiAgICAgICAgICAgIHJvdWdobmVzc0ZhY3RvciAqPSB0ZXhlbFJvdWdobmVzcy5nO1xyXG4gICAgICAgICNlbmRpZlxyXG5cclxuICAgICAgICB2YXIgbWV0YWxuZXNzRmFjdG9yOmYzMiA9IG1hdGVyaWFsVW5pZm9ybS5tZXRhbG5lc3M7XHJcbiAgICBcclxuICAgICAgICAjaWYgJHtkZWZpbmVzLlVTRV9NRVRBTE5FU1NURVhUVVJFfVxyXG4gICAgICAgICAgICBsZXQgdGV4ZWxNZXRhbG5lc3M6dmVjNDxmMzI+ID10ZXh0dXJlU2FtcGxlKG1ldGFsbmVzc1RleHR1cmUsIGJhc2VTYW1wbGVyLCBpbnB1dC52VXYpO1xyXG4gICAgICAgICAgICBtZXRhbG5lc3NGYWN0b3IgKj0gdGV4ZWxNZXRhbG5lc3MuYjtcclxuICAgICAgICAjZW5kaWZcclxuXHJcbiAgICAgICAgbGV0IGZhY2VEaXJlY3Rpb246ZjMyID1zZWxlY3QoLTEuMCwxLjAsaW5wdXQuaXNfZnJvbnQpO1xyXG4gICAgICAgICNpZiAke2RlZmluZXMuRkxBVF9TSEFERUR9XHJcbiAgICAgICAgICAgIGxldCBmZHg6dmVjMzxmMzI+ID0gZHBkeCggaW5wdXQudlZpZXdQb3NpdGlvbiApO1xyXG4gICAgICAgICAgICBsZXQgZmR5OnZlYzM8ZjMyPiA9IGRwZHkoIGlucHV0LnZWaWV3UG9zaXRpb24gKTtcclxuICAgICAgICAgICAgbGV0IG5vcm1hbDp2ZWMzPGYzMj4gPSBub3JtYWxpemUoIGNyb3NzKCBmZHksIGZkeCApICk7XHJcbiAgICAgICAgI2Vsc2VcclxuICAgICAgICAgICAgbGV0IG5vcm1hbDp2ZWMzPGYzMj4gPSBub3JtYWxpemUoIGlucHV0LnZOb3JtYWwgKTtcclxuICAgICAgICAgICAgI2lmICR7ZGVmaW5lcy5ET1VCTEVfU0lERUR9XHJcbiAgICAgICAgICAgICAgICBub3JtYWwgPSBub3JtYWwgKiBmYWNlRGlyZWN0aW9uO1xyXG4gICAgICAgICAgICAjZW5kaWZcclxuICAgICAgICAgICAgI2lmICR7ZGVmaW5lcy5VU0VfVEFOR0VOVH1cclxuICAgICAgICAgICAgICAgIGxldCB0YW5nZW50OnZlYzM8ZjMyPiA9IG5vcm1hbGl6ZSggaW5wdXQudlRhbmdlbnQgKTtcclxuICAgICAgICAgICAgICAgIGxldCBiaXRhbmdlbnQ6dmVjMzxmMzI+ID0gbm9ybWFsaXplKCBpbnB1dC52Qml0YW5nZW50ICk7XHJcbiAgICAgICAgICAgICAgICAjaWYgJHtkZWZpbmVzLkRPVUJMRV9TSURFRH1cclxuICAgICAgICAgICAgICAgICAgICB0YW5nZW50ID0gdGFuZ2VudCAqIGZhY2VEaXJlY3Rpb247XHJcbiAgICAgICAgICAgICAgICAgICAgYml0YW5nZW50ID0gYml0YW5nZW50ICogZmFjZURpcmVjdGlvbjtcclxuICAgICAgICAgICAgICAgICNlbmRpZlxyXG4gICAgICAgICAgICAgICAgI2lmICR7ZGVmaW5lcy5UQU5HRU5UU1BBQ0VfTk9STUFMVEVYVFVSRSB8fCBkZWZpbmVzLlVTRV9DTEVBUkNPQVRfTk9STUFMVEVYVFVSRX1cclxuICAgICAgICAgICAgICAgICAgICBsZXQgdlRCTjptYXQzeDM8ZjMyPiA9IG1hdDN4MzxmMzI+KCB0YW5nZW50LCBiaXRhbmdlbnQsIG5vcm1hbCApO1xyXG4gICAgICAgICAgICAgICAgI2VuZGlmXHJcbiAgICAgICAgICAgICNlbmRpZlxyXG4gICAgICAgICNlbmRpZlxyXG4gICAgXHJcbiAgICAgICAgbGV0IGdlb21ldHJ5Tm9ybWFsOnZlYzM8ZjMyPiA9IG5vcm1hbDtcclxuXHJcbiAgICAgICAgI2lmICR7ZGVmaW5lcy5PQkpFQ1RTUEFDRV9OT1JNQUxURVhUVVJFfVxyXG4gICAgICAgICAgICBub3JtYWwgPXRleHR1cmVTYW1wbGUobm9ybWFsVGV4dHVyZSwgYmFzZVNhbXBsZXIsIGlucHV0LnZVdikueHl6ICogMi4wIC0gMS4wO1xyXG4gICAgICAgICAgICAjaWYgJHtkZWZpbmVzLkZMSVBfU0lERUR9XHJcbiAgICAgICAgICAgICAgICBub3JtYWwgPSAtIG5vcm1hbDtcclxuICAgICAgICAgICAgI2VuZGlmXHJcbiAgICAgICAgICAgICNpZiAke2RlZmluZXMuRE9VQkxFX1NJREVEfVxyXG4gICAgICAgICAgICAgICAgbm9ybWFsID0gbm9ybWFsICogZmFjZURpcmVjdGlvbjtcclxuICAgICAgICAgICAgI2VuZGlmXHJcblxyXG4gICAgICAgICAgICBub3JtYWwgPSBub3JtYWxpemUobWF0ZXJpYWxVbmlmb3JtLm5vcm1hbE1hdHJpeCAqIG5vcm1hbCApO1xyXG5cclxuICAgICAgICAgICAgI2VsaWYgJHtkZWZpbmVzLlRBTkdFTlRTUEFDRV9OT1JNQUxURVhUVVJFfVxyXG4gICAgICAgICAgICBsZXQgdGVtcE1hcE46dmVjMzxmMzI+ID10ZXh0dXJlU2FtcGxlKG5vcm1hbFRleHR1cmUsIGJhc2VTYW1wbGVyLCBpbnB1dC52VXYpLnh5eiAqIDIuMCAtIDEuMDtcclxuICAgICAgICAgICAgbGV0IG1hcE46dmVjMzxmMzI+ID10ZW1wTWFwTi54eSAqPSBtYXRlcmlhbFVuaWZvcm0ubm9ybWFsU2NhbGU7XHJcbiAgICAgICAgICAgICNpZiAke2RlZmluZXMuVVNFX1RBTkdFTlR9XHJcbiAgICAgICAgICAgICAgICBub3JtYWwgPSBub3JtYWxpemUoIHZUQk4gKiBtYXBOICk7XHJcbiAgICAgICAgICAgICNlbHNlXHJcbiAgICAgICAgICAgICAgICBub3JtYWwgPSBwZXJ0dXJiTm9ybWFsMkFyYiggLSBpbnB1dC52Vmlld1Bvc2l0aW9uLCBub3JtYWwsIG1hcE4sIGZhY2VEaXJlY3Rpb24gKTtcclxuICAgICAgICAgICAgI2VuZGlmXHJcblxyXG4gICAgICAgICAgICAjZWxpZiAke2RlZmluZXMuVVNFX0JVTVBURVhUVVJFfVxyXG5cclxuICAgICAgICAgICAgICAgIG5vcm1hbCA9IHBlcnR1cmJOb3JtYWxBcmIoIC0gaW5wdXQudlZpZXdQb3NpdGlvbiwgbm9ybWFsLCBkSGR4eV9md2QoKSwgZmFjZURpcmVjdGlvbiApO1xyXG4gICAgICAgICNlbmRpZlxyXG5cclxuICAgICAgICAjaWYgJHtkZWZpbmVzLlVTRV9DTEVBUkNPQVR9XHJcbiAgICAgICAgICAgIHZhciBjbGVhcmNvYXROb3JtYWw6dmVjMzxmMzI+ID0gZ2VvbWV0cnlOb3JtYWw7XHJcbiAgICAgICAgI2VuZGlmXHJcbiAgICAgICAgI2lmICR7ZGVmaW5lcy5VU0VfQ0xFQVJDT0FUX05PUk1BTFRFWFRVUkV9XHJcbiAgICAgICAgICAgIHZhciBjbGVhcmNvYXRNYXBOOnZlYzM8ZjMyPiA9dGV4dHVyZVNhbXBsZShjbGVhcmNvYXROb3JtYWxUZXh0dXJlLCBiYXNlU2FtcGxlciwgaW5wdXQudlV2KS54eXogKiAyLjAgLSAxLjA7XHJcbiAgICAgICAgICAgIGNsZWFyY29hdE1hcE4ueHkgKj0gbWF0ZXJpYWxVbmlmb3JtLmNsZWFyY29hdE5vcm1hbFNjYWxlO1xyXG4gICAgICAgICAgICAjaWYgJHtkZWZpbmVzLlVTRV9UQU5HRU5UfVxyXG4gICAgICAgICAgICAgICAgY2xlYXJjb2F0Tm9ybWFsID0gbm9ybWFsaXplKCB2VEJOICogY2xlYXJjb2F0TWFwTiApO1xyXG4gICAgICAgICAgICAjZWxzZVxyXG4gICAgICAgICAgICAgICAgY2xlYXJjb2F0Tm9ybWFsID0gcGVydHVyYk5vcm1hbDJBcmIoIC0gaW5wdXQudlZpZXdQb3NpdGlvbiwgY2xlYXJjb2F0Tm9ybWFsLCBjbGVhcmNvYXRNYXBOLCBmYWNlRGlyZWN0aW9uICk7XHJcbiAgICAgICAgICAgICNlbmRpZlxyXG4gICAgICAgICNlbmRpZlxyXG4gICAgICAgICNpZiAke2RlZmluZXMuVVNFX0VNSVNTSVZFVEVYVFVSRX1cclxuICAgICAgICAgICAgbGV0IGVtaXNzaXZlQ29sb3I6dmVjNDxmMzI+ID10ZXh0dXJlU2FtcGxlKGVtaXNzaXZlVGV4dHVyZSwgYmFzZVNhbXBsZXIsIGlucHV0LnZVdik7XHJcbiAgICAgICAgICAgIHRvdGFsRW1pc3NpdmVSYWRpYW5jZSAqPSBlbWlzc2l2ZUNvbG9yLnJnYjtcclxuICAgICAgICAjZW5kaWZcclxuXHJcbiAgICAgICAgdmFyIG1hdGVyaWFsOlBoeXNpY2FsTWF0ZXJpYWw7XHJcbiAgICAgICAgbWF0ZXJpYWwuZGlmZnVzZUNvbG9yID0gZGlmZnVzZUNvbG9yLnJnYiAqICggMS4wIC0gbWV0YWxuZXNzRmFjdG9yICk7XHJcbiAgICAgICAgbGV0IGR4eTp2ZWMzPGYzMj4gPSBtYXgoIGFicyggZHBkeCggZ2VvbWV0cnlOb3JtYWwgKSApLCBhYnMoIGRwZHkoIGdlb21ldHJ5Tm9ybWFsICkgKSApO1xyXG4gICAgICAgIGxldCBnZW9tZXRyeVJvdWdobmVzczpmMzIgPSBtYXgoIG1heCggZHh5LngsIGR4eS55ICksIGR4eS56ICk7XHJcbiAgICAgICAgbWF0ZXJpYWwucm91Z2huZXNzID0gbWF4KCByb3VnaG5lc3NGYWN0b3IsIDAuMDUyNSApO1xyXG4gICAgICAgIG1hdGVyaWFsLnJvdWdobmVzcyArPSBnZW9tZXRyeVJvdWdobmVzcztcclxuICAgICAgICBtYXRlcmlhbC5yb3VnaG5lc3MgPSBtaW4oIG1hdGVyaWFsLnJvdWdobmVzcywgMS4wICk7XHJcblxyXG4gICAgICAgICNpZiAke2RlZmluZXMuSU9SfVxyXG4gICAgICAgICAgICBtYXRlcmlhbC5pb3IgPSBtYXRlcmlhbFVuaWZvcm0uaW9yO1xyXG4gICAgICAgICAgICAjaWYgJHtkZWZpbmVzLlNQRUNVTEFSfVxyXG4gICAgICAgICAgICAgICAgbGV0IHNwZWN1bGFySW50ZW5zaXR5RmFjdG9yOmYzMiA9IG1hdGVyaWFsVW5pZm9ybS5zcGVjdWxhckludGVuc2l0eTtcclxuICAgICAgICAgICAgICAgIGxldCBzcGVjdWxhckNvbG9yRmFjdG9yOnZlYzM8ZjMyPiA9IG1hdGVyaWFsVW5pZm9ybS5zcGVjdWxhckNvbG9yO1xyXG4gICAgICAgICAgICAgICAgI2lmICR7ZGVmaW5lcy5VU0VfU1BFQ1VMQVJJTlRFTlNJVFlURVhUVVJFfVxyXG4gICAgICAgICAgICAgICAgICAgIHNwZWN1bGFySW50ZW5zaXR5RmFjdG9yICo9dGV4dHVyZVNhbXBsZShzcGVjdWxhckludGVuc2l0eVRleHR1cmUsIGJhc2VTYW1wbGVyLCBpbnB1dC52VXYpLmE7XHJcbiAgICAgICAgICAgICAgICAjZW5kaWZcclxuXHJcbiAgICAgICAgICAgICAgICAjaWYgJHtkZWZpbmVzLlVTRV9TUEVDVUxBUkNPTE9SVEVYVFVSRX1cclxuICAgICAgICAgICAgICAgICAgICBzcGVjdWxhckNvbG9yRmFjdG9yICo9dGV4dHVyZVNhbXBsZShzcGVjdWxhckNvbG9yVGV4dHVyZSwgYmFzZVNhbXBsZXIsIGlucHV0LnZVdikucmdiO1xyXG4gICAgICAgICAgICAgICAgI2VuZGlmXHJcblxyXG4gICAgICAgICAgICAgICAgbWF0ZXJpYWwuc3BlY3VsYXJGOTAgPSBtaXgoIHNwZWN1bGFySW50ZW5zaXR5RmFjdG9yLCAxLjAsIG1ldGFsbmVzc0ZhY3RvciApO1xyXG4gICAgICAgICAgICAjZWxzZVxyXG4gICAgICAgICAgICAgICAgbGV0IHNwZWN1bGFySW50ZW5zaXR5RmFjdG9yOmYzMiA9IDEuMDtcclxuICAgICAgICAgICAgICAgIGxldCBzcGVjdWxhckNvbG9yRmFjdG9yOnZlYzM8ZjMyPiA9IHZlYzM8ZjMyPiggMS4wICk7XHJcbiAgICAgICAgICAgICAgICBtYXRlcmlhbC5zcGVjdWxhckY5MCA9IDEuMDtcclxuICAgICAgICAgICAgI2VuZGlmXHJcbiAgICAgICAgICAgIG1hdGVyaWFsLnNwZWN1bGFyQ29sb3IgPSBtaXgoIG1pbiggcG93MiggKCBtYXRlcmlhbC5pb3IgLSAxLjAgKSAvICggbWF0ZXJpYWwuaW9yICsgMS4wICkgKSAqIHNwZWN1bGFyQ29sb3JGYWN0b3IsIHZlYzMoIDEuMCApICkgKiBzcGVjdWxhckludGVuc2l0eUZhY3RvciwgZGlmZnVzZUNvbG9yLnJnYiwgbWV0YWxuZXNzRmFjdG9yICk7XHJcbiAgICAgICAgI2Vsc2VcclxuICAgICAgICAgICAgbWF0ZXJpYWwuc3BlY3VsYXJDb2xvciA9IG1peCggdmVjMzxmMzI+KCAwLjA0ICksIGRpZmZ1c2VDb2xvci5yZ2IsIG1ldGFsbmVzc0ZhY3RvciApO1xyXG4gICAgICAgICAgICBtYXRlcmlhbC5zcGVjdWxhckY5MCA9IDEuMDtcclxuICAgICAgICAjZW5kaWZcclxuICAgICAgICAjaWYgJHtkZWZpbmVzLlVTRV9DTEVBUkNPQVR9XHJcbiAgICAgICAgICAgIG1hdGVyaWFsLmNsZWFyY29hdCA9IG1hdGVyaWFsVW5pZm9ybS5jbGVhcmNvYXQ7XHJcbiAgICAgICAgICAgIG1hdGVyaWFsLmNsZWFyY29hdFJvdWdobmVzcyA9IG1hdGVyaWFsVW5pZm9ybS5jbGVhcmNvYXRSb3VnaG5lc3M7XHJcbiAgICAgICAgICAgIG1hdGVyaWFsLmNsZWFyY29hdEYwID0gdmVjMzxmMzI+KCAwLjA0ICk7XHJcbiAgICAgICAgICAgIG1hdGVyaWFsLmNsZWFyY29hdEY5MCA9IDEuMDtcclxuICAgICAgICAgICAgI2lmICR7ZGVmaW5lcy5VU0VfQ0xFQVJDT0FUVEVYVFVSRX1cclxuICAgICAgICAgICAgICAgIG1hdGVyaWFsLmNsZWFyY29hdCAqPXRleHR1cmVTYW1wbGUoY2xlYXJjb2F0VGV4dHVyZSwgYmFzZVNhbXBsZXIsIGlucHV0LnZVdikueDtcclxuICAgICAgICAgICAgI2VuZGlmXHJcbiAgICAgICAgICAgICNpZiAke2RlZmluZXMuVVNFX0NMRUFSQ09BVF9ST1VHSE5FU1NURVhUVVJFfVxyXG4gICAgICAgICAgICAgICAgbWF0ZXJpYWwuY2xlYXJjb2F0Um91Z2huZXNzICo9dGV4dHVyZVNhbXBsZShjbGVhcmNvYXRSb3VnaG5lc3NUZXh0dXJlLCBiYXNlU2FtcGxlciwgaW5wdXQudlV2KS55O1xyXG4gICAgICAgICAgICAjZW5kaWZcclxuICAgICAgICAgICAgbWF0ZXJpYWwuY2xlYXJjb2F0ID0gc2F0dXJhdGUoIG1hdGVyaWFsLmNsZWFyY29hdCApO1xyXG4gICAgICAgICAgICBtYXRlcmlhbC5jbGVhcmNvYXRSb3VnaG5lc3MgPSBtYXgoIG1hdGVyaWFsLmNsZWFyY29hdFJvdWdobmVzcywgMC4wNTI1ICk7XHJcbiAgICAgICAgICAgIG1hdGVyaWFsLmNsZWFyY29hdFJvdWdobmVzcyArPSBnZW9tZXRyeVJvdWdobmVzcztcclxuICAgICAgICAgICAgbWF0ZXJpYWwuY2xlYXJjb2F0Um91Z2huZXNzID0gbWluKCBtYXRlcmlhbC5jbGVhcmNvYXRSb3VnaG5lc3MsIDEuMCApO1xyXG4gICAgICAgICNlbmRpZlxyXG4gICAgICAgICNpZiAke2RlZmluZXMuVVNFX0lSSURFU0NFTkNFfVxyXG4gICAgICAgICAgICBtYXRlcmlhbC5pcmlkZXNjZW5jZSA9IG1hdGVyaWFsVW5pZm9ybS5pcmlkZXNjZW5jZTtcclxuICAgICAgICAgICAgbWF0ZXJpYWwuaXJpZGVzY2VuY2VJT1IgPSBtYXRlcmlhbFVuaWZvcm0uaXJpZGVzY2VuY2VJT1I7XHJcbiAgICAgICAgICAgICNpZiAke2RlZmluZXMuVVNFX0lSSURFU0NFTkNFVEVYVFVSRX1cclxuICAgICAgICAgICAgICAgIG1hdGVyaWFsLmlyaWRlc2NlbmNlICo9dGV4dHVyZVNhbXBsZShpcmlkZXNjZW5jZVRleHR1cmUsIGJhc2VTYW1wbGVyLCBpbnB1dC52VXYpLnI7XHJcbiAgICAgICAgICAgICNlbmRpZlxyXG4gICAgICAgICAgICAjaWYgJHtkZWZpbmVzLlVTRV9JUklERVNDRU5DRV9USElDS05FU1NURVhUVVJFfVxyXG4gICAgICAgICAgICAgICAgbWF0ZXJpYWwuaXJpZGVzY2VuY2VUaGlja25lc3MgPSAobWF0ZXJpYWxVbmlmb3JtLmlyaWRlc2NlbmNlVGhpY2tuZXNzTWF4aW11bSAtIG1hdGVyaWFsVW5pZm9ybS5pcmlkZXNjZW5jZVRoaWNrbmVzc01pbmltdW0pICogdGV4dHVyZVNhbXBsZShpcmlkZXNjZW5jZVRoaWNrbmVzc1RleHR1cmUsIGJhc2VTYW1wbGVyLCBpbnB1dC52VXYpLmcgKyBtYXRlcmlhbFVuaWZvcm0uaXJpZGVzY2VuY2VUaGlja25lc3NNaW5pbXVtO1xyXG4gICAgICAgICAgICAjZWxzZVxyXG4gICAgICAgICAgICAgICAgbWF0ZXJpYWwuaXJpZGVzY2VuY2VUaGlja25lc3MgPSBtYXRlcmlhbFVuaWZvcm0uaXJpZGVzY2VuY2VUaGlja25lc3NNYXhpbXVtO1xyXG4gICAgICAgICAgICAjZW5kaWZcclxuICAgICAgICAjZW5kaWZcclxuICAgICAgICAjaWYgJHtkZWZpbmVzLlVTRV9TSEVFTn1cclxuICAgICAgICAgICAgbWF0ZXJpYWwuc2hlZW5Db2xvciA9IG1hdGVyaWFsVW5pZm9ybS5zaGVlbkNvbG9yO1xyXG4gICAgICAgICAgICAjaWYgJHtkZWZpbmVzLlVTRV9TSEVFTkNPTE9SVEVYVFVSRX1cclxuICAgICAgICAgICAgICAgIG1hdGVyaWFsLnNoZWVuQ29sb3IgKj10ZXh0dXJlU2FtcGxlKHNoZWVuQ29sb3JUZXh0dXJlLCBiYXNlU2FtcGxlciwgaW5wdXQudlV2KS5yZ2I7XHJcbiAgICAgICAgICAgICNlbmRpZlxyXG4gICAgICAgICAgICBtYXRlcmlhbC5zaGVlblJvdWdobmVzcyA9IGNsYW1wKCBtYXRlcmlhbFVuaWZvcm0uc2hlZW5Sb3VnaG5lc3MsIDAuMDcsIDEuMCApO1xyXG4gICAgICAgICAgICAjaWYgJHtkZWZpbmVzLlVTRV9TSEVFTlJPVUdITkVTU1RFWFRVUkV9XHJcbiAgICAgICAgICAgICAgICBtYXRlcmlhbC5zaGVlblJvdWdobmVzcyAqPXRleHR1cmVTYW1wbGUoc2hlZW5Sb3VnaG5lc3NUZXh0dXJlLCBiYXNlU2FtcGxlciwgaW5wdXQudlV2KS5hO1xyXG4gICAgICAgICAgICAjZW5kaWZcclxuICAgICAgICAjZW5kaWZcclxuICAgICAgICBcclxuICAgICAgICB2YXIgZ2VvbWV0cnk6R2VvbWV0cmljQ29udGV4dDtcclxuICAgICAgICBnZW9tZXRyeS5wb3NpdGlvbiA9IC0gaW5wdXQudlZpZXdQb3NpdGlvbjtcclxuICAgICAgICBnZW9tZXRyeS5ub3JtYWwgPSBub3JtYWw7XHJcbiAgICAgICAvLyBnZW9tZXRyeS52aWV3RGlyID0gKCBpc09ydGhvZ3JhcGhpYyApID8gdmVjMyggMCwgMCwgMSApIDogbm9ybWFsaXplKCBpbnB1dC52Vmlld1Bvc2l0aW9uICk7XHJcbiAgICAgICAgZ2VvbWV0cnkudmlld0RpciA9IG5vcm1hbGl6ZSggaW5wdXQudlZpZXdQb3NpdGlvbik7IFxyXG5cclxuICAgICAgICAjaWYgJHtkZWZpbmVzLlVTRV9DTEVBUkNPQVR9XHJcbiAgICAgICAgICAgIGdlb21ldHJ5LmNsZWFyY29hdE5vcm1hbCA9IGNsZWFyY29hdE5vcm1hbDtcclxuICAgICAgICAjZW5kaWZcclxuXHJcbiAgICAgICAgI2lmICR7ZGVmaW5lcy5VU0VfSVJJREVTQ0VOQ0V9XHJcbiAgICAgICAgICAgIGxldCBkb3ROVmk6ZjMyID0gc2F0dXJhdGUoIGRvdCggbm9ybWFsLCBnZW9tZXRyeS52aWV3RGlyICkgKTtcclxuICAgICAgICAgICAgaWYgKCBtYXRlcmlhbC5pcmlkZXNjZW5jZVRoaWNrbmVzcyA9PSAwLjAgKSB7XHJcbiAgICAgICAgICAgICAgICBtYXRlcmlhbC5pcmlkZXNjZW5jZSA9IDAuMDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIG1hdGVyaWFsLmlyaWRlc2NlbmNlID0gc2F0dXJhdGUoIG1hdGVyaWFsLmlyaWRlc2NlbmNlICk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgaWYgKCBtYXRlcmlhbC5pcmlkZXNjZW5jZSA+IDAuMCApIHtcclxuICAgICAgICAgICAgICAgIG1hdGVyaWFsLmlyaWRlc2NlbmNlRnJlc25lbCA9IGV2YWxJcmlkZXNjZW5jZSggMS4wLCBtYXRlcmlhbC5pcmlkZXNjZW5jZUlPUiwgZG90TlZpLCBtYXRlcmlhbC5pcmlkZXNjZW5jZVRoaWNrbmVzcywgbWF0ZXJpYWwuc3BlY3VsYXJDb2xvciApO1xyXG4gICAgICAgICAgICAgICAgbWF0ZXJpYWwuaXJpZGVzY2VuY2VGMCA9IFNjaGxpY2tfdG9fRjAoIG1hdGVyaWFsLmlyaWRlc2NlbmNlRnJlc25lbCwgMS4wLCBkb3ROVmkgKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICNlbmRpZlxyXG5cclxuICAgICAgICB2YXIgaWJsSXJyYWRpYW5jZTp2ZWMzPGYzMj4gPSB2ZWMzPGYzMj4oIDAuMCApO1xyXG4gICAgICAgIHZhciBpcnJhZGlhbmNlOnZlYzM8ZjMyPiA9IGdldEFtYmllbnRMaWdodElycmFkaWFuY2UoY29tbW9uTGlnaHRzUGFybXMuYW1iaWVudCk7XHJcbiAgICAgICAgLy9pcnJhZGlhbmNlICs9IGdldExpZ2h0UHJvYmVJcnJhZGlhbmNlKCBsaWdodFByb2JlLCBnZW9tZXRyeS5ub3JtYWwsc3lzdGVtVW5pZm9ybS52aWV3TWF0cml4ICk7XHJcblxyXG4gICAgICAgIHZhciByYWRpYW5jZTp2ZWMzPGYzMj4gPSB2ZWMzPGYzMj4oIDAuMCApO1xyXG4gICAgICAgIHZhciBjbGVhcmNvYXRSYWRpYW5jZTp2ZWMzPGYzMj4gPSB2ZWMzPGYzMj4oIDAuMCApO1xyXG5cclxuICAgICAgICAjaWYgJHtkZWZpbmVzLlVTRV9MSUdIVFRFWFRVUkV9XHJcbiAgICAgICAgICAgIGxldCBsaWdodE1hcFRleGVsOnZlYzQ8ZjMyPiA9dGV4dHVyZVNhbXBsZShsaWdodFRleHR1cmUsIGJhc2VTYW1wbGVyLCBpbnB1dC52VXYyKTtcclxuICAgICAgICAgICAgbGV0IGxpZ2h0TWFwSXJyYWRpYW5jZTp2ZWMzPGYzMj4gPSBsaWdodE1hcFRleGVsLnJnYiAqIG1hdGVyaWFsVW5pZm9ybS5saWdodFRleHR1cmVJbnRlbnNpdHk7XHJcbiAgICAgICAgICAgIGlycmFkaWFuY2UgKz0gbGlnaHRNYXBJcnJhZGlhbmNlO1xyXG4gICAgICAgICNlbmRpZlxyXG4gICAgICAgIC8vJiYgZGVmaW5lcy5TVEFOREFSRCYmZGVmaW5lcy5FTlZURVhUVVJFX1RZUEVfQ1VCRV9VVlxyXG4gICAgICAgICNpZiAke2RlZmluZXMuVVNFX0VOVlRFWFRVUkV9IFxyXG4gICAgICAgICAgICBpYmxJcnJhZGlhbmNlICs9IGdldElCTElycmFkaWFuY2UoIGdlb21ldHJ5Lm5vcm1hbCxiYXNlU2FtcGxlcixzeXN0ZW1Vbmlmb3JtLnZpZXdNYXRyaXggKTtcclxuICAgICAgICAjZW5kaWZcclxuICAgICAgICAjaWYgJHtkZWZpbmVzLlVTRV9FTlZURVhUVVJFfVxyXG4gICAgICAgICAgICByYWRpYW5jZSArPSBnZXRJQkxSYWRpYW5jZSggZ2VvbWV0cnkudmlld0RpcixiYXNlU2FtcGxlcixzeXN0ZW1Vbmlmb3JtLnZpZXdNYXRyaXgsIGdlb21ldHJ5Lm5vcm1hbCwgbWF0ZXJpYWxVbmlmb3JtLnJvdWdobmVzcyApO1xyXG4gICAgICAgICAgICAjaWYgJHtkZWZpbmVzLlVTRV9DTEVBUkNPQVR9XHJcbiAgICAgICAgICAgICAgICBjbGVhcmNvYXRSYWRpYW5jZSArPSBnZXRJQkxSYWRpYW5jZSggZ2VvbWV0cnkudmlld0RpcixiYXNlU2FtcGxlcixzeXN0ZW1Vbmlmb3JtLnZpZXdNYXRyaXgsIGdlb21ldHJ5LmNsZWFyY29hdE5vcm1hbCwgbWF0ZXJpYWwuY2xlYXJjb2F0Um91Z2huZXNzICk7XHJcbiAgICAgICAgICAgICNlbmRpZlxyXG4gICAgICAgICNlbmRpZlxyXG4gICAgICAgIC8v55u05o6l5YWJ54WnXHJcbiAgICAgICAgICAgIGxldCBkaXJSZWZsZWN0ZWRMaWdodDpSZWZsZWN0ZWRMaWdodD0gcGFyc2VMaWdodHMoZ2VvbWV0cnksbWF0ZXJpYWwpO1xyXG4gICAgICAgICAgICByZWZsZWN0ZWRMaWdodC5kaXJlY3REaWZmdXNlICs9ZGlyUmVmbGVjdGVkTGlnaHQuZGlyZWN0RGlmZnVzZTtcclxuICAgICAgICAgICAgcmVmbGVjdGVkTGlnaHQuZGlyZWN0U3BlY3VsYXIgKz1kaXJSZWZsZWN0ZWRMaWdodC5kaXJlY3RTcGVjdWxhcjtcclxuICAgICAgICAvL+mXtOaOpea8q+WPjeWwhFxyXG4gICAgICAgICAgICBsZXQgaW5kaXJlY3REaWZmdXNlTGlnaHQ6UmVmbGVjdGVkTGlnaHQ9IFJFX0luZGlyZWN0RGlmZnVzZV9QaHlzaWNhbCggaXJyYWRpYW5jZSwgZ2VvbWV0cnksIG1hdGVyaWFsKTtcclxuICAgICAgICAgICAgcmVmbGVjdGVkTGlnaHQuZGlyZWN0RGlmZnVzZSArPWluZGlyZWN0RGlmZnVzZUxpZ2h0LmluZGlyZWN0RGlmZnVzZTtcclxuICAgICAgICAgICAgcmVmbGVjdGVkTGlnaHQuZGlyZWN0U3BlY3VsYXIgKz1pbmRpcmVjdERpZmZ1c2VMaWdodC5pbmRpcmVjdFNwZWN1bGFyO1xyXG4gICAgICAgIC8v6Ze05o6l6auY5YWJXHJcbiAgICAgICAgICAgIGxldCBpbmRpcmVjdFNwZWN1bGFyTGlnaHQ6UmVmbGVjdGVkTGlnaHQ9UkVfSW5kaXJlY3RTcGVjdWxhcl9QaHlzaWNhbCggcmFkaWFuY2UsIGlibElycmFkaWFuY2UsIGNsZWFyY29hdFJhZGlhbmNlLCBnZW9tZXRyeSwgbWF0ZXJpYWwpO1xyXG4gICAgICAgICAgICByZWZsZWN0ZWRMaWdodC5kaXJlY3REaWZmdXNlICs9aW5kaXJlY3RTcGVjdWxhckxpZ2h0LmluZGlyZWN0RGlmZnVzZTtcclxuICAgICAgICAgICAgcmVmbGVjdGVkTGlnaHQuZGlyZWN0U3BlY3VsYXIgKz1pbmRpcmVjdFNwZWN1bGFyTGlnaHQuaW5kaXJlY3RTcGVjdWxhcjtcclxuICAgICAgICAvL+eOr+Wig+WFiemBruiUvVxyXG4gICAgICAgICNpZiAke2RlZmluZXMuVVNFX0FPVEVYVFVSRX1cclxuICAgICAgICAgICAgbGV0IGFtYmllbnRPY2NsdXNpb246ZjMyID0gKHRleHR1cmVTYW1wbGUoYW9UZXh0dXJlLCBiYXNlU2FtcGxlciwgaW5wdXQudlV2MikuciAtIDEuMCApICogbWF0ZXJpYWxVbmlmb3JtLmFvVGV4dHVyZUludGVuc2l0eSArIDEuMDtcclxuXHJcbiAgICAgICAgICAgIHJlZmxlY3RlZExpZ2h0LmluZGlyZWN0RGlmZnVzZSAqPSBhbWJpZW50T2NjbHVzaW9uO1xyXG4gICAgICAgICAgICAvLyYmZGVmaW5lcy5TVEFOREFSRFxyXG4gICAgICAgICAgICAjaWYgJHtkZWZpbmVzLlVTRV9FTlZURVhUVVJFfSBcclxuICAgICAgICAgICAgICAgIGxldCBkb3ROVjpmMzIgPSBzYXR1cmF0ZSggZG90KCBnZW9tZXRyeS5ub3JtYWwsIGdlb21ldHJ5LnZpZXdEaXIgKSApO1xyXG4gICAgICAgICAgICAgICAgcmVmbGVjdGVkTGlnaHQuaW5kaXJlY3RTcGVjdWxhciAqPSBjb21wdXRlU3BlY3VsYXJPY2NsdXNpb24oIGRvdE5WLCBhbWJpZW50T2NjbHVzaW9uLCBtYXRlcmlhbC5yb3VnaG5lc3MgKTtcclxuICAgICAgICAgICAgI2VuZGlmXHJcbiAgICAgICAgI2VuZGlmXHJcblxyXG4gICAgICAgIHZhciB0b3RhbERpZmZ1c2U6dmVjMzxmMzI+ID0gcmVmbGVjdGVkTGlnaHQuZGlyZWN0RGlmZnVzZSArIHJlZmxlY3RlZExpZ2h0LmluZGlyZWN0RGlmZnVzZTtcclxuICAgICAgICB2YXIgdG90YWxTcGVjdWxhcjp2ZWMzPGYzMj4gPSByZWZsZWN0ZWRMaWdodC5kaXJlY3RTcGVjdWxhciArIHJlZmxlY3RlZExpZ2h0LmluZGlyZWN0U3BlY3VsYXI7XHJcbiAgICAgICAgLy/pgI/lsIRcclxuICAgICAgICAjaWYgJHtkZWZpbmVzLlVTRV9UUkFOU01JU1NJT059XHJcbiAgICAgICAgICAgIG1hdGVyaWFsLnRyYW5zbWlzc2lvbiA9IG1hdGVyaWFsVW5pZm9ybS50cmFuc21pc3Npb247XHJcbiAgICAgICAgICAgIG1hdGVyaWFsLnRyYW5zbWlzc2lvbkFscGhhID0gMS4wO1xyXG4gICAgICAgICAgICBtYXRlcmlhbC50aGlja25lc3MgPSBtYXRlcmlhbFVuaWZvcm0udGhpY2tuZXNzO1xyXG4gICAgICAgICAgICBtYXRlcmlhbC5hdHRlbnVhdGlvbkRpc3RhbmNlID0gbWF0ZXJpYWxVbmlmb3JtLmF0dGVudWF0aW9uRGlzdGFuY2U7XHJcbiAgICAgICAgICAgIG1hdGVyaWFsLmF0dGVudWF0aW9uQ29sb3IgPSBtYXRlcmlhbFVuaWZvcm0uYXR0ZW51YXRpb25Db2xvcjtcclxuICAgICAgICAgICAgI2lmICR7ZGVmaW5lcy5VU0VfVFJBTlNNSVNTSU9OVEVYVFVSRX1cclxuICAgICAgICAgICAgICAgIG1hdGVyaWFsLnRyYW5zbWlzc2lvbiAqPXRleHR1cmVTYW1wbGUodHJhbnNtaXNzaW9uVGV4dHVyZSwgYmFzZVNhbXBsZXIsIGlucHV0LnZVdikucjtcclxuICAgICAgICAgICAgI2VuZGlmXHJcbiAgICAgICAgICAgICNpZiAke2RlZmluZXMuVVNFX1RISUNLTkVTU1RFWFRVUkV9XHJcbiAgICAgICAgICAgICAgICBtYXRlcmlhbC50aGlja25lc3MgKj10ZXh0dXJlU2FtcGxlKHRoaWNrbmVzc1RleHR1cmUsIGJhc2VTYW1wbGVyLCBpbnB1dC52VXYpLmc7XHJcbiAgICAgICAgICAgICNlbmRpZlxyXG4gICAgICAgICAgICBsZXQgcG9zOnZlYzM8ZjMyPiA9IHZXb3JsZFBvc2l0aW9uO1xyXG4gICAgICAgICAgICBsZXQgdjp2ZWMzPGYzMj4gPSBub3JtYWxpemUoIGNhbWVyYVBvc2l0aW9uIC0gcG9zICk7XHJcbiAgICAgICAgICAgIGxldCBuOnZlYzM8ZjMyPiA9IGludmVyc2VUcmFuc2Zvcm1EaXJlY3Rpb24oIG5vcm1hbCwgc3lzdGVtVW5pZm9ybS52aWV3TWF0cml4ICk7XHJcbiAgICAgICAgICAgIGxldCB0cmFuc21pc3Npb246dmVjNDxmMzI+ID0gZ2V0SUJMVm9sdW1lUmVmcmFjdGlvbihcclxuICAgICAgICAgICAgbiwgdiwgbWF0ZXJpYWwucm91Z2huZXNzLCBtYXRlcmlhbC5kaWZmdXNlQ29sb3IsIG1hdGVyaWFsLnNwZWN1bGFyQ29sb3IsIG1hdGVyaWFsLnNwZWN1bGFyRjkwLCBwb3MsIG1vZGVsTWF0cml4LCBzeXN0ZW1Vbmlmb3JtLnZpZXdNYXRyaXgsIHN5c3RlbVVuaWZvcm0ucHJvamVjdGlvbk1hdHJpeCwgbWF0ZXJpYWwuaW9yLCBtYXRlcmlhbC50aGlja25lc3MsIG1hdGVyaWFsLmF0dGVudWF0aW9uQ29sb3IsIG1hdGVyaWFsLmF0dGVudWF0aW9uRGlzdGFuY2UgKTtcclxuICAgICAgICAgICAgbWF0ZXJpYWwudHJhbnNtaXNzaW9uQWxwaGEgPSBtaXgoIG1hdGVyaWFsLnRyYW5zbWlzc2lvbkFscGhhLCB0cmFuc21pc3Npb24uYSwgbWF0ZXJpYWwudHJhbnNtaXNzaW9uICk7XHJcbiAgICAgICAgICAgIHRvdGFsRGlmZnVzZSA9IG1peCggdG90YWxEaWZmdXNlLCB0cmFuc21pc3Npb24ucmdiLCBtYXRlcmlhbC50cmFuc21pc3Npb24gKTtcclxuICAgICAgICAjZW5kaWZcclxuXHJcbiAgICAgICAgbGV0IG91dGdvaW5nTGlnaHQ6dmVjMzxmMzI+ID0gdG90YWxEaWZmdXNlICsgdG90YWxTcGVjdWxhciArIHRvdGFsRW1pc3NpdmVSYWRpYW5jZTtcclxuXHJcbiAgICAgICAgI2lmICR7ZGVmaW5lcy5VU0VfU0hFRU59XHJcbiAgICAgICAgICAgIGxldCBzaGVlbkVuZXJneUNvbXA6ZjMyID0gMS4wIC0gMC4xNTcgKiBtYXgzKCBtYXRlcmlhbC5zaGVlbkNvbG9yICk7XHJcbiAgICAgICAgICAgIG91dGdvaW5nTGlnaHQgPSBvdXRnb2luZ0xpZ2h0ICogc2hlZW5FbmVyZ3lDb21wICsgc2hlZW5TcGVjdWxhcjtcclxuICAgICAgICAjZW5kaWZcclxuXHJcbiAgICAgICAgI2lmICR7ZGVmaW5lcy5VU0VfQ0xFQVJDT0FUfVxyXG4gICAgICAgICAgICBsZXQgZG90TlZjYzpmMzIgPSBzYXR1cmF0ZSggZG90KCBnZW9tZXRyeS5jbGVhcmNvYXROb3JtYWwsIGdlb21ldHJ5LnZpZXdEaXIgKSApO1xyXG4gICAgICAgICAgICBsZXQgRmNjOnZlYzM8ZjMyPiA9IEZfU2NobGljayggbWF0ZXJpYWwuY2xlYXJjb2F0RjAsIG1hdGVyaWFsLmNsZWFyY29hdEY5MCwgZG90TlZjYyApO1xyXG4gICAgICAgICAgICBvdXRnb2luZ0xpZ2h0ID0gb3V0Z29pbmdMaWdodCAqICggMS4wIC0gbWF0ZXJpYWwuY2xlYXJjb2F0ICogRmNjICkgKyBjbGVhcmNvYXRTcGVjdWxhciAqIG1hdGVyaWFsLmNsZWFyY29hdDtcclxuICAgICAgICAjZW5kaWZcclxuXHJcbiAgICAgICAgI2lmICR7ZGVmaW5lcy5VU0VfVFJBTlNNSVNTSU9OfVxyXG4gICAgICAgICAgICBkaWZmdXNlQ29sb3IuYSAqPSBtYXRlcmlhbC50cmFuc21pc3Npb25BbHBoYSArIDAuMTtcclxuICAgICAgICAjZW5kaWZcclxuXHJcbiAgICAgICAgdmFyIGZpbm5hbENvbG9yOnZlYzQ8ZjMyPjtcclxuICAgICAgICBmaW5uYWxDb2xvciA9IHZlYzQ8ZjMyPiggb3V0Z29pbmdMaWdodCwgZGlmZnVzZUNvbG9yLmEgKTtcclxuICAgICAgICAjaWYgJHtkZWZpbmVzLlRPTkVfTUFQUElOR31cclxuICAgICAgICAgICBmaW5uYWxDb2xvci5yZ2IgPSB0b25lTWFwcGluZyggZmlubmFsQ29sb3IucmdiLG1hdGVyaWFsVW5pZm9ybS50b25lTWFwcGluZ0V4cG9zdXJlICk7XHJcbiAgICAgICAgI2VuZGlmXHJcblxyXG4gICAgICAgICAgZmlubmFsQ29sb3IgPSBsaW5lYXJUb091dHB1dFRleGVsKCBmaW5uYWxDb2xvcik7XHJcblxyXG4gICAgICAgICNpZiAke2RlZmluZXMuUFJFTVVMVElQTElFRF9BTFBIQX1cclxuICAgICAgICAgICAgZmlubmFsQ29sb3IucmdiICo9IGZpbm5hbENvbG9yLmE7XHJcbiAgICAgICAgI2VuZGlmXHJcbiAgICAgICAgI2lmICR7ZGVmaW5lcy5ESVRIRVJJTkd9XHJcbiAgICAgICAgICAgIGZpbm5hbENvbG9yLnJnYiA9IGRpdGhlcmluZyggZmlubmFsQ29sb3IucmdiICk7XHJcbiAgICAgICAgI2VuZGlmXHJcbiAgICAgICAgcmV0dXJuIGZpbm5hbENvbG9yO1xyXG4gICAgfWA7XHJcbn1cclxuIiwiaW1wb3J0IHsgd2dzbFBhcnNlRGVmaW5lcyB9IGZyb20gXCIuLi9XZ3NsUHJlcHJvY2Vzc29yXCI7XHJcblxyXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBwYnJWZXJ0KGRlZmluZXMpIHtcclxuICByZXR1cm4gd2dzbFBhcnNlRGVmaW5lc2BcclxuICAgICNpbmNsdWRlIDxwYnJTdHJ1Y3Q+XHJcbiAgICBzdHJ1Y3QgVmVydGV4T3V0cHV0IHtcclxuICAgICAgICBAYnVpbHRpbihwb3NpdGlvbikgcG9zaXRpb246IHZlYzQ8ZjMyPixcclxuICAgICAgICBAbG9jYXRpb24oMCkgdlV2OiB2ZWMyPGYzMj4sXHJcbiAgICAgICAgQGxvY2F0aW9uKDEpIHZWaWV3UG9zaXRpb246IHZlYzM8ZjMyPiwgLy8gVmVjdG9yIGZyb20gdmVydGV4IHRvIGNhbWVyYS5cclxuICAgICAgICBAbG9jYXRpb24oMikgdldvcmxkUG9zaXRpb246IHZlYzM8ZjMyPixcclxuICAgICAgICBAbG9jYXRpb24oMykgdk5vcm1hbDogdmVjMzxmMzI+LFxyXG4gICAgICAgIC8vIOWPr+mAiVxyXG4gICAgICAgICNpZiAke2RlZmluZXMuVVNFX0xJR0hUVEVYVFVSRSB8fCBkZWZpbmVzLlVTRV9BT1RFWFRVUkV9XHJcbiAgICAgICAgICAgIEBsb2NhdGlvbigke2RlZmluZXMudlV2Mk91dExvY2F0aW9ufSkgdlV2MjogdmVjMjxmMzI+LFxyXG4gICAgICAgICNlbmRpZlxyXG5cclxuICAgICAgICAjaWYgJHtkZWZpbmVzLlVTRV9DT0xPUl9BTFBIQX1cclxuICAgICAgICAgICAgQGxvY2F0aW9uKCR7ZGVmaW5lcy52Q29sb3JPdXRMb2NhdGlvbn0pIHZDb2xvcjogdmVjNDxmMzI+LFxyXG4gICAgICAgICNlbGlmICR7ZGVmaW5lcy5VU0VfQ09MT1IgfHwgZGVmaW5lcy5VU0VfSU5TVEFOQ0lOR19DT0xPUn1cclxuICAgICAgICAgICAgQGxvY2F0aW9uKCR7ZGVmaW5lcy52Q29sb3JPdXRMb2NhdGlvbn0pIHZDb2xvcjogdmVjMzxmMzI+LFxyXG4gICAgICAgICNlbmRpZlxyXG5cclxuICAgICAgICAjaWYgJHtkZWZpbmVzLlVTRV9UQU5HRU5UfVxyXG4gICAgICAgICAgICBAbG9jYXRpb24oJHtkZWZpbmVzLnZUYW5nZW50T3V0TG9jYXRpb259KSB2VGFuZ2VudDogdmVjMzxmMzI+LFxyXG4gICAgICAgICAgICBAbG9jYXRpb24oJHtkZWZpbmVzLnZCaXRhbmdlbnRPdXRMb2NhdGlvbn0pIHZCaXRhbmdlbnQ6IHZlYzM8ZjMyPixcclxuICAgICAgICAjZW5kaWZcclxuICAgIH07XHJcbiAgICBzdHJ1Y3QgR2xvYmFsVW5pZm9ybSB7XHJcbiAgICAgICAgcHJvamVjdGlvbk1hdHJpeDogbWF0NHg0PGYzMj4sXHJcbiAgICAgICAgdmlld01hdHJpeDogbWF0NHg0PGYzMj4sXHJcbiAgICAgICAgaW52ZXJzZVZpZXdNYXRyaXg6IG1hdDR4NDxmMzI+LFxyXG4gICAgICAgIGNhbWVyYVBvc2l0aW9uOiB2ZWMzPGYzMj4sXHJcbiAgICB9O1xyXG5cclxuICAgIC8vdGV4dHVyZSBhbmQgc2FtcGxlclxyXG4gICAgLy8gQGdyb3VwKDApIEBiaW5kaW5nKCR7ZGVmaW5lcy5zYW1wbGVyQmluZGluZ30pIHZhciBiYXNlU2FtcGxlcjogc2FtcGxlcjtcclxuICAgICNpZiAke2RlZmluZXMuVVNFX1NLSU5OSU5HfVxyXG4gICAgICAgIC8vdW5pZm9ybSBoaWdocCBzYW1wbGVyMkQgYm9uZVRleHR1cmU7XHJcbiAgICAgICAgQGdyb3VwKDApIEBiaW5kaW5nKCR7XHJcbiAgICAgICAgICBkZWZpbmVzLmJvbmVUZXh0dXJlQmluZGluZ1xyXG4gICAgICAgIH0pIHZhciBib25lVGV4dHVyZTogdGV4dHVyZV8yZDxmMzI+O1xyXG4gICAgI2VuZGlmXHJcblxyXG4gICAgI2lmICR7ZGVmaW5lcy5VU0VfRElTUExBQ0VNRU5UVEVYVFVSRX1cclxuICAgICAgICAvL3VuaWZvcm0gc2FtcGxlcjJEIGRpc3BsYWNlbWVudE1hcDtcclxuICAgICAgICBAZ3JvdXAoMCkgQGJpbmRpbmcoJHtcclxuICAgICAgICAgIGRlZmluZXMuZGlzcGxhY2VtZW50VGV4dHVyZUJpbmRpbmdcclxuICAgICAgICB9KSB2YXIgZGlzcGxhY2VtZW50TWFwOiB0ZXh0dXJlXzJkPGYzMj47XHJcbiAgICAjZW5kaWZcclxuXHJcbiAgICAjaWYgJHtkZWZpbmVzLk1PUlBIVEFSR0VUU19URVhUVVJFfVxyXG4gICAgICAgIC8vdW5pZm9ybSBzYW1wbGVyMkRBcnJheSBtb3JwaFRhcmdldHNUZXh0dXJlO1xyXG4gICAgICAgIEBncm91cCgwKSBAYmluZGluZygke1xyXG4gICAgICAgICAgZGVmaW5lcy5tb3JwaFRhcmdldHNUZXh0dXJlQmluZGluZ1xyXG4gICAgICAgIH0pIHZhciBtb3JwaFRhcmdldHNUZXh0dXJlOiB0ZXh0dXJlXzJkX2FycmF5PGYzMj47XHJcbiAgICAjZW5kaWZcclxuXHJcbiAgICBzdHJ1Y3QgVmVydGV4SW5wdXQge1xyXG4gICAgICAgIEBsb2NhdGlvbigwKSBwb3NpdGlvbjogdmVjMzxmMzI+LCAgXHJcblxyXG4gICAgICAgIEBsb2NhdGlvbigxKSBub3JtYWw6IHZlYzM8ZjMyPixcclxuXHJcbiAgICAgICAgQGxvY2F0aW9uKDIpIHV2OiB2ZWMyPGYzMj4sXHJcbiAgICAgICAgI2lmICR7ZGVmaW5lcy5VU0VfTElHSFRURVhUVVJFIHx8IGRlZmluZXMuVVNFX0FPVEVYVFVSRX1cclxuICAgICAgICAgICAgQGxvY2F0aW9uKCR7ZGVmaW5lcy51djJMb2NhdGlvbn0pIHV2Mjp2ZWMyPGYzMj4sXHJcbiAgICAgICAgI2VuZGlmXHJcbiAgICAgICAgI2lmICR7ZGVmaW5lcy5VU0VfSU5TVEFOQ0lOR31cclxuICAgICAgICAgICAgQGxvY2F0aW9uKCR7XHJcbiAgICAgICAgICAgICAgZGVmaW5lcy5pbnN0YW5jZU1hdHJpeExvY2F0aW9uXHJcbiAgICAgICAgICAgIH0pIGluc3RhbmNlTWF0cml4Om1hdDR4NDxmMzI+LFxyXG4gICAgICAgICNlbmRpZlxyXG4gICAgICAgICNpZiAke2RlZmluZXMuVVNFX0lOU1RBTkNJTkdfQ09MT1J9XHJcbiAgICAgICAgICAgIEBsb2NhdGlvbigke2RlZmluZXMuaW5zdGFuY2VDb2xvckxvY2F0aW9ufSkgaW5zdGFuY2VDb2xvcjp2ZWMzPGYzMj4sXHJcbiAgICAgICAgI2VuZGlmXHJcbiAgICAgICAgXHJcbiAgICAgICAgI2lmICR7ZGVmaW5lcy5VU0VfVEFOR0VOVH1cclxuICAgICAgICAgICAgQGxvY2F0aW9uKCR7ZGVmaW5lcy50YW5nZW50TG9jYXRpb259KSB0YW5nZW50OnZlYzQ8ZjMyPixcclxuICAgICAgICAjZW5kaWZcclxuICAgICAgICAjaWYgJHtkZWZpbmVzLlVTRV9DT0xPUl9BTFBIQX1cclxuICAgICAgICAgICAgQGxvY2F0aW9uKCR7ZGVmaW5lcy5jb2xvckxvY2F0aW9ufSkgY29sb3I6dmVjNDxmMzI+LFxyXG4gICAgICAgICNlbGlmICR7ZGVmaW5lcy5VU0VfQ09MT1J9XHJcbiAgICAgICAgICAgIEBsb2NhdGlvbigke2RlZmluZXMuY29sb3JMb2NhdGlvbn0pIGNvbG9yOnZlYzM8ZjMyPixcclxuICAgICAgICAjZW5kaWZcclxuXHJcbiAgICAgICAgI2lmICR7ZGVmaW5lcy5VU0VfTU9SUEhUQVJHRVRTICYmICFkZWZpbmVzLk1PUlBIVEFSR0VUU19URVhUVVJFfVxyXG4gICAgICAgICAgICBAbG9jYXRpb24oJHtkZWZpbmVzLm1vcnBoVGFyZ2V0MExvY2F0aW9ufSkgbW9ycGhUYXJnZXQwOnZlYzM8ZjMyPixcclxuXHJcbiAgICAgICAgICAgIEBsb2NhdGlvbigke2RlZmluZXMubW9ycGhUYXJnZXQxTG9jYXRpb259KSBtb3JwaFRhcmdldDE6dmVjMzxmMzI+LFxyXG5cclxuICAgICAgICAgICAgQGxvY2F0aW9uKCR7ZGVmaW5lcy5tb3JwaFRhcmdldDJMb2NhdGlvbn0pIG1vcnBoVGFyZ2V0Mjp2ZWMzPGYzMj4sXHJcblxyXG4gICAgICAgICAgICBAbG9jYXRpb24oJHtkZWZpbmVzLm1vcnBoVGFyZ2V0M0xvY2F0aW9ufSkgbW9ycGhUYXJnZXQzOnZlYzM8ZjMyPixcclxuICAgICAgICAgICAgI2lmICR7ZGVmaW5lcy5VU0VfTU9SUEhOT1JNQUxTfVxyXG4gICAgICAgICAgICAgICAgQGxvY2F0aW9uKCR7XHJcbiAgICAgICAgICAgICAgICAgIGRlZmluZXMubW9ycGhOb3JtYWwwTG9jYXRpb25cclxuICAgICAgICAgICAgICAgIH0pIG1vcnBoTm9ybWFsMDp2ZWMzPGYzMj4sXHJcblxyXG4gICAgICAgICAgICAgICAgQGxvY2F0aW9uKCR7XHJcbiAgICAgICAgICAgICAgICAgIGRlZmluZXMubW9ycGhOb3JtYWwxTG9jYXRpb25cclxuICAgICAgICAgICAgICAgIH0pIG1vcnBoTm9ybWFsMTp2ZWMzPGYzMj4sXHJcblxyXG4gICAgICAgICAgICAgICAgQGxvY2F0aW9uKCR7XHJcbiAgICAgICAgICAgICAgICAgIGRlZmluZXMubW9ycGhOb3JtYWwyTG9jYXRpb25cclxuICAgICAgICAgICAgICAgIH0pIG1vcnBoTm9ybWFsMjp2ZWMzPGYzMj4sXHJcblxyXG4gICAgICAgICAgICAgICAgQGxvY2F0aW9uKCR7XHJcbiAgICAgICAgICAgICAgICAgIGRlZmluZXMubW9ycGhOb3JtYWwzTG9jYXRpb25cclxuICAgICAgICAgICAgICAgIH0pIG1vcnBoTm9ybWFsMzp2ZWMzPGYzMj4sXHJcbiAgICAgICAgICAgICNlbHNlXHJcbiAgICAgICAgICAgICAgICBAbG9jYXRpb24oJHtcclxuICAgICAgICAgICAgICAgICAgZGVmaW5lcy5tb3JwaFRhcmdldDRMb2NhdGlvblxyXG4gICAgICAgICAgICAgICAgfSkgbW9ycGhUYXJnZXQ0OnZlYzM8ZjMyPixcclxuXHJcbiAgICAgICAgICAgICAgICBAbG9jYXRpb24oJHtcclxuICAgICAgICAgICAgICAgICAgZGVmaW5lcy5tb3JwaFRhcmdldDVMb2NhdGlvblxyXG4gICAgICAgICAgICAgICAgfSkgbW9ycGhUYXJnZXQ1OnZlYzM8ZjMyPixcclxuXHJcbiAgICAgICAgICAgICAgICBAbG9jYXRpb24oJHtcclxuICAgICAgICAgICAgICAgICAgZGVmaW5lcy5tb3JwaFRhcmdldDZMb2NhdGlvblxyXG4gICAgICAgICAgICAgICAgfSkgbW9ycGhUYXJnZXQ2OnZlYzM8ZjMyPixcclxuXHJcbiAgICAgICAgICAgICAgICBAbG9jYXRpb24oJHtcclxuICAgICAgICAgICAgICAgICAgZGVmaW5lcy5tb3JwaFRhcmdldDdMb2NhdGlvblxyXG4gICAgICAgICAgICAgICAgfSkgbW9ycGhUYXJnZXQ3OnZlYzM8ZjMyPixcclxuICAgICAgICAgICAgI2VuZGlmXHJcbiAgICAgICAgI2VuZGlmXHJcbiAgICAgICAgI2lmICR7ZGVmaW5lcy5VU0VfU0tJTk5JTkd9XHJcbiAgICAgICAgICAgIEBsb2NhdGlvbigke2RlZmluZXMuc2tpbkluZGV4TG9jYXRpb259KSBza2luSW5kZXg6dmVjNDxmMzI+LFxyXG4gICAgICAgICAgICBAbG9jYXRpb24oJHtkZWZpbmVzLnNraW5XZWlnaHRMb2NhdGlvbn0pIHNraW5XZWlnaHQ6dmVjNDxmMzI+LFxyXG4gICAgICAgICNlbmRpZlxyXG4gIH1cclxuXHJcbiAgICAjaWYgJHtkZWZpbmVzLk1PUlBIVEFSR0VUU19URVhUVVJFfVxyXG4gICAgICAgIGZuIGdldE1vcnBoKCB2ZXJ0ZXhJbmRleDp1MzIsIG1vcnBoVGFyZ2V0SW5kZXg6dTMyLG9mZnNldDp1MzIgKS0+dmVjNDxmMzI+IHtcclxuICAgICAgICAgICAgbGV0IHRleGVsSW5kZXg6dTMyID0gdmVydGV4SW5kZXggKiBNT1JQSFRBUkdFVFNfVEVYVFVSRV9TVFJJREUgKyBvZmZzZXQ7XHJcbiAgICAgICAgICAgIGxldCB5OnUzMiA9IHRleGVsSW5kZXggLyBtYXRlcmlhbFVuaWZvcm0ubW9ycGhUYXJnZXRzVGV4dHVyZVNpemUueDtcclxuICAgICAgICAgICAgbGV0IHg6dTMyID0gdGV4ZWxJbmRleCAtIHkgKiBtYXRlcmlhbFVuaWZvcm0ubW9ycGhUYXJnZXRzVGV4dHVyZVNpemUueDtcclxuICAgICAgICAgICAgbGV0IG1vcnBoVVY6dmVjMzx1MzI+ID0gdmVjMzx1MzI+KCB4LCB5LCBtb3JwaFRhcmdldEluZGV4ICk7XHJcbiAgICAgICAgICAgIC8vdGV4dHVyZUxvYWRcclxuICAgICAgICAgICAgLy9yZXR1cm4gdGV4ZWxGZXRjaCggbW9ycGhUYXJnZXRzVGV4dHVyZSwgbW9ycGhVViwgMCApO1xyXG4gICAgICAgICAgICByZXR1cm4gdGV4dHVyZUxvYWQoIG1vcnBoVGFyZ2V0c1RleHR1cmUsIG1vcnBoVVYsIDAgKTtcclxuICAgICAgICB9XHJcbiAgICAjZW5kaWZcclxuICAgICNpZiAke2RlZmluZXMuVVNFX1NLSU5OSU5HfVxyXG4gICAgICAgIGZuIGdldEJvbmVNYXRyaXgoIGk6ZjMyICktPm1hdDR4NDxmMzI+IHtcclxuICAgICAgICAgICAgbGV0IGo6ZjMyID0gaSAqIDQuMDtcclxuICAgICAgICAgICAgbGV0IHg6ZjMyID0gaiVmMzIoIG1hdGVyaWFsVW5pZm9ybS5ib25lVGV4dHVyZVNpemUgKTtcclxuICAgICAgICAgICAgbGV0IHk6ZjMyID0gZmxvb3IoIGogLyBmMzIoIG1hdGVyaWFsVW5pZm9ybS5ib25lVGV4dHVyZVNpemUgKSApO1xyXG4gICAgICAgICAgICBsZXQgZHg6ZjMyID0gMS4wIC8gZjMyKCBtYXRlcmlhbFVuaWZvcm0uYm9uZVRleHR1cmVTaXplICk7XHJcbiAgICAgICAgICAgIGxldCBkeTpmMzIgPSAxLjAgLyBmMzIoIG1hdGVyaWFsVW5pZm9ybS5ib25lVGV4dHVyZVNpemUgKTtcclxuICAgICAgICAgICAgeSA9IGR5ICogKCB5ICsgMC41ICk7XHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgICAgICBsZXQgdjE6dmVjNDxmMzI+ID0gdGV4dHVyZVNhbXBsZShib25lVGV4dHVyZSwgYmFzZVNhbXBsZXIsIHZlYzI8ZjMyPiggZHggKiAoIHggKyAwLjUgKSwgeSApICk7XHJcbiAgICAgICAgICAgIGxldCB2Mjp2ZWM0PGYzMj4gPSB0ZXh0dXJlU2FtcGxlKGJvbmVUZXh0dXJlLCBiYXNlU2FtcGxlciwgdmVjMjxmMzI+KCBkeCAqICggeCArIDEuNSApLCB5ICkgKTtcclxuICAgICAgICAgICAgbGV0IHYzOnZlYzQ8ZjMyPiA9IHRleHR1cmVTYW1wbGUoYm9uZVRleHR1cmUsIGJhc2VTYW1wbGVyLCB2ZWMyPGYzMj4oIGR4ICogKCB4ICsgMi41ICksIHkgKSApO1xyXG4gICAgICAgICAgICBsZXQgdjQ6dmVjNDxmMzI+ID0gdGV4dHVyZVNhbXBsZShib25lVGV4dHVyZSwgYmFzZVNhbXBsZXIsIHZlYzI8ZjMyPiggZHggKiAoIHggKyAzLjUgKSwgeSApICk7XHJcbiAgICAgICAgICAgIGxldCBib25lOm1hdDR4NDxmMzI+ID0gbWF0NHg0PGYzMj4oIHYxLCB2MiwgdjMsIHY0ICk7XHJcbiAgICAgICAgICAgIHJldHVybiBib25lO1xyXG4gICAgICAgIH1cclxuICAgICNlbmRpZlxyXG5cclxuICAgIEBiaW5kaW5nKDApIEBncm91cCgwKSB2YXI8dW5pZm9ybT4gbWF0ZXJpYWxVbmlmb3JtIDogTWF0ZXJpYWxVbmlmb3JtO1xyXG4gICAgQGJpbmRpbmcoMCkgQGdyb3VwKDEpIHZhcjx1bmlmb3JtPiBnbG9iYWxVbmlmb3JtIDogR2xvYmFsVW5pZm9ybTtcclxuICAgIEB2ZXJ0ZXhcclxuICAgIGZuIG1haW4oaW5wdXQ6VmVydGV4SW5wdXQpLT5WZXJ0ZXhPdXRwdXQge1xyXG4gICAgICAgIHZhciB2ZXJ0ZXhPdXRwdXQ6VmVydGV4T3V0cHV0O1xyXG4gICAgICAgICNpZiAke2RlZmluZXMuVVNFX1RFWFRVUkV9XHJcbiAgICAgICAgICAgIHZlcnRleE91dHB1dC52VXYgPSBpbnB1dC51djtcclxuICAgICAgICAjZW5kaWZcclxuICAgICAgICAjaWYgJHtkZWZpbmVzLlVTRV9MSUdIVFRFWFRVUkUgfHwgZGVmaW5lcy5VU0VfQU9URVhUVVJFfVxyXG4gICAgICAgICAgICB2ZXJ0ZXhPdXRwdXQudlV2MiBpbnB1dC51djI7XHJcbiAgICAgICAgI2VuZGlmXHJcbiAgICAgICAgI2lmICR7ZGVmaW5lcy5VU0VfQ09MT1JfQUxQSEF9XHJcbiAgICAgICAgICAgIHZlcnRleE91dHB1dC52Q29sb3IgPSB2ZWM0KCAxLjAgKTtcclxuICAgICAgICAgICAgI2VsaWYgJHtkZWZpbmVzLlVTRV9DT0xPUiB8fCBkZWZpbmVzLlVTRV9JTlNUQU5DSU5HX0NPTE9SfVxyXG4gICAgICAgICAgICB2ZXJ0ZXhPdXRwdXQudkNvbG9yID0gdmVjMyggMS4wICk7XHJcbiAgICAgICAgI2VuZGlmXHJcbiAgICAgICAgI2lmICR7ZGVmaW5lcy5VU0VfQ09MT1J9XHJcbiAgICAgICAgICAgIHZlcnRleE91dHB1dC52Q29sb3IgKj0gaW5wdXQuY29sb3I7XHJcbiAgICAgICAgI2VuZGlmXHJcbiAgICAgICAgI2lmICR7ZGVmaW5lcy5VU0VfSU5TVEFOQ0lOR19DT0xPUn1cclxuICAgICAgICAgICAgdmVydGV4T3V0cHV0LnZDb2xvci54eXogKj0gaW5wdXQuaW5zdGFuY2VDb2xvci54eXo7XHJcbiAgICAgICAgI2VuZGlmXHJcbiAgICAgICAgI2lmICR7ZGVmaW5lcy5VU0VfTU9SUEhDT0xPUlMgJiYgZGVmaW5lcy5NT1JQSFRBUkdFVFNfVEVYVFVSRX1cclxuICAgICAgICAgICAgdmVydGV4T3V0cHV0LnZDb2xvciAqPSBtYXRlcmlhbFVuaWZvcm0ubW9ycGhUYXJnZXRCYXNlSW5mbHVlbmNlO1xyXG4gICAgICAgICAgICBmb3IgKGxldCBpIDogdTMyID0gMHU7IGkgPCBtYXRlcmlhbFVuaWZvcm0uTU9SUEhUQVJHRVRTX0NPVU5UOyBpID0gaSArIDF1ICkge1xyXG4gICAgICAgICAgICAgICAgI2lmICR7ZGVmaW5lcy5VU0VfQ09MT1JfQUxQSEF9XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKCBtYXRlcmlhbFVuaWZvcm0ubW9ycGhUYXJnZXRJbmZsdWVuY2VzWyBpIF0gISA9IDAuMCApIHZlcnRleE91dHB1dC52Q29sb3IgKz0gZ2V0TW9ycGgoIGdsX1ZlcnRleElELCBpLCAyICkgKiBtYXRlcmlhbFVuaWZvcm0ubW9ycGhUYXJnZXRJbmZsdWVuY2VzWyBpIF07XHJcbiAgICAgICAgICAgICAgICAgICAgI2VsaWYgJHtkZWZpbmVzLlVTRV9DT0xPUn1cclxuICAgICAgICAgICAgICAgICAgICBpZiAoIG1hdGVyaWFsVW5pZm9ybS5tb3JwaFRhcmdldEluZmx1ZW5jZXNbIGkgXSAhID0gMC4wICkgdmVydGV4T3V0cHV0LnZDb2xvciArPSBnZXRNb3JwaCggZ2xfVmVydGV4SUQsIGksIDIgKS5yZ2IgKiBtYXRlcmlhbFVuaWZvcm0ubW9ycGhUYXJnZXRJbmZsdWVuY2VzWyBpIF07XHJcbiAgICAgICAgICAgICAgICAjZW5kaWZcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICNlbmRpZlxyXG4gICAgICAgIHZhciBvYmplY3ROb3JtYWw6dmVjMzxmMzI+ID0gdmVjMzxmMzI+KGlucHV0Lm5vcm1hbCk7XHJcbiAgICAgICAgI2lmICR7ZGVmaW5lcy5VU0VfVEFOR0VOVH1cclxuICAgICAgICAgICAgbGV0IG9iamVjdFRhbmdlbnQ6dmVjMzxmMzI+ID0gdmVjMzxmMzI+KCBpbnB1dC50YW5nZW50Lnh5eiApO1xyXG4gICAgICAgICNlbmRpZlxyXG4gICAgICAgICNpZiAke2RlZmluZXMuVVNFX01PUlBITk9STUFMU31cclxuICAgICAgICAgICAgb2JqZWN0Tm9ybWFsICo9IG1hdGVyaWFsVW5pZm9ybS5tb3JwaFRhcmdldEJhc2VJbmZsdWVuY2U7XHJcbiAgICAgICAgICAgICNpZiAke2RlZmluZXMuTU9SUEhUQVJHRVRTX1RFWFRVUkV9XHJcbiAgICAgICAgICAgICAgICBmb3IgKCBsZXQgaSA6IHUzMiA9IDB1OyBpIDwgbWF0ZXJpYWxVbmlmb3JtLk1PUlBIVEFSR0VUU19DT1VOVDsgaSA9IGkgKyAxdSkge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICggbWF0ZXJpYWxVbmlmb3JtLm1vcnBoVGFyZ2V0SW5mbHVlbmNlc1sgaSBdICEgPSAwLjAgKSBvYmplY3ROb3JtYWwgKz0gZ2V0TW9ycGgoIGdsX1ZlcnRleElELCBpLCAxICkueHl6ICogbWF0ZXJpYWxVbmlmb3JtLm1vcnBoVGFyZ2V0SW5mbHVlbmNlc1sgaSBdO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAjZWxzZVxyXG4gICAgICAgICAgICAgICAgb2JqZWN0Tm9ybWFsICs9IG1vcnBoTm9ybWFsMCAqIG1hdGVyaWFsVW5pZm9ybS5tb3JwaFRhcmdldEluZmx1ZW5jZXNbIDAgXTtcclxuICAgICAgICAgICAgICAgIG9iamVjdE5vcm1hbCArPSBtb3JwaE5vcm1hbDEgKiBtYXRlcmlhbFVuaWZvcm0ubW9ycGhUYXJnZXRJbmZsdWVuY2VzWyAxIF07XHJcbiAgICAgICAgICAgICAgICBvYmplY3ROb3JtYWwgKz0gbW9ycGhOb3JtYWwyICogbWF0ZXJpYWxVbmlmb3JtLm1vcnBoVGFyZ2V0SW5mbHVlbmNlc1sgMiBdO1xyXG4gICAgICAgICAgICAgICAgb2JqZWN0Tm9ybWFsICs9IG1vcnBoTm9ybWFsMyAqIG1hdGVyaWFsVW5pZm9ybS5tb3JwaFRhcmdldEluZmx1ZW5jZXNbIDMgXTtcclxuICAgICAgICAgICAgI2VuZGlmXHJcbiAgICAgICAgI2VuZGlmXHJcbiAgICAgICAgI2lmICR7ZGVmaW5lcy5VU0VfU0tJTk5JTkd9XHJcbiAgICAgICAgICAgIGxldCBib25lTWF0WDptYXQ0eDQ8ZjMyPiA9IGdldEJvbmVNYXRyaXgoIGlucHV0LnNraW5JbmRleC54ICk7XHJcbiAgICAgICAgICAgIGxldCBib25lTWF0WTptYXQ0eDQ8ZjMyPiA9IGdldEJvbmVNYXRyaXgoIGlucHV0LnNraW5JbmRleC55ICk7XHJcbiAgICAgICAgICAgIGxldCBib25lTWF0WjptYXQ0eDQ8ZjMyPiA9IGdldEJvbmVNYXRyaXgoIGlucHV0LnNraW5JbmRleC56ICk7XHJcbiAgICAgICAgICAgIGxldCBib25lTWF0VzptYXQ0eDQ8ZjMyPiA9IGdldEJvbmVNYXRyaXgoIGlucHV0LnNraW5JbmRleC53ICk7XHJcbiAgICAgICAgI2VuZGlmXHJcbiAgICAgICAgI2lmICR7ZGVmaW5lcy5VU0VfU0tJTk5JTkd9XHJcbiAgICAgICAgICAgIGxldCBza2luTWF0cml4Om1hdDR4NDxmMzI+ID0gbWF0NHg0PGYzMj4oIDAuMCApO1xyXG4gICAgICAgICAgICBza2luTWF0cml4ICs9IGlucHV0LnNraW5XZWlnaHQueCAqIGJvbmVNYXRYO1xyXG4gICAgICAgICAgICBza2luTWF0cml4ICs9IGlucHV0LnNraW5XZWlnaHQueSAqIGJvbmVNYXRZO1xyXG4gICAgICAgICAgICBza2luTWF0cml4ICs9IGlucHV0LnNraW5XZWlnaHQueiAqIGJvbmVNYXRaO1xyXG4gICAgICAgICAgICBza2luTWF0cml4ICs9IGlucHV0LnNraW5XZWlnaHQudyAqIGJvbmVNYXRXO1xyXG4gICAgICAgICAgICBza2luTWF0cml4ID0gbWF0ZXJpYWxVbmlmb3JtLmJpbmRNYXRyaXhJbnZlcnNlICogc2tpbk1hdHJpeCAqIG1hdGVyaWFsVW5pZm9ybS5iaW5kTWF0cml4O1xyXG4gICAgICAgICAgICBvYmplY3ROb3JtYWwgPSB2ZWM0PGYzMj4oIHNraW5NYXRyaXggKiB2ZWM0PGYzMj4oIG9iamVjdE5vcm1hbCwgMC4wICkgKS54eXo7XHJcbiAgICAgICAgICAgICNpZiAke2RlZmluZXMuVVNFX1RBTkdFTlR9XHJcbiAgICAgICAgICAgICAgICBvYmplY3RUYW5nZW50ID0gdmVjNDxmMzI+KCBza2luTWF0cml4ICogdmVjNDxmMzI+KCBvYmplY3RUYW5nZW50LCAwLjAgKSApLnh5ejtcclxuICAgICAgICAgICAgI2VuZGlmXHJcbiAgICAgICAgI2VuZGlmXHJcbiAgICAgICAgdmFyIHRyYW5zZm9ybWVkTm9ybWFsOnZlYzM8ZjMyPiA9IG9iamVjdE5vcm1hbDtcclxuICAgICAgICAvLyB0cmFuc2Zvcm1lZE5vcm1hbCs9dmVjMzxmMzI+KDAuMCk7XHJcbiAgICAgICAgI2lmICR7ZGVmaW5lcy5VU0VfSU5TVEFOQ0lOR31cclxuICAgICAgICAgICAgbGV0IG06bWF0M3gzPGYzMj4gPSBtYXQzeDM8ZjMyPiggaW5wdXQuaW5zdGFuY2VNYXRyaXggKTtcclxuICAgICAgICAgICAgdHJhbnNmb3JtZWROb3JtYWwgLz0gdmVjMzxmMzI+KCBkb3QoIG1bIDAgXSwgbVsgMCBdICksIGRvdCggbVsgMSBdLCBtWyAxIF0gKSwgZG90KCBtWyAyIF0sIG1bIDIgXSApICk7XHJcbiAgICAgICAgICAgIHRyYW5zZm9ybWVkTm9ybWFsID0gbSAqIHRyYW5zZm9ybWVkTm9ybWFsO1xyXG4gICAgICAgICNlbmRpZlxyXG4gICAgICAgIHRyYW5zZm9ybWVkTm9ybWFsID0gbWF0ZXJpYWxVbmlmb3JtLm5vcm1hbE1hdHJpeCAqIHRyYW5zZm9ybWVkTm9ybWFsO1xyXG4gICAgICAgICNpZiAke2RlZmluZXMuRkxJUF9TSURFRH1cclxuICAgICAgICAgICAgdHJhbnNmb3JtZWROb3JtYWwgPSAtIHRyYW5zZm9ybWVkTm9ybWFsO1xyXG4gICAgICAgICNlbmRpZlxyXG4gICAgICAgICNpZiAke2RlZmluZXMuVVNFX1RBTkdFTlR9XHJcbiAgICAgICAgICAgIGxldCB0cmFuc2Zvcm1lZFRhbmdlbnQ6dmVjMzxmMzI+ID0gKGdsb2JhbFVuaWZvcm0udmlld01hdHJpeCptYXRlcmlhbFVuaWZvcm0ubW9kZWxNYXRyaXggKiB2ZWM0PGYzMj4oIG9iamVjdFRhbmdlbnQsIDAuMCApICkueHl6O1xyXG4gICAgICAgICAgICAjaWYgJHtkZWZpbmVzLkZMSVBfU0lERUR9XHJcbiAgICAgICAgICAgICAgICB0cmFuc2Zvcm1lZFRhbmdlbnQgPSAtIHRyYW5zZm9ybWVkVGFuZ2VudDtcclxuICAgICAgICAgICAgI2VuZGlmXHJcbiAgICAgICAgI2VuZGlmXHJcbiAgICAgICAgdmVydGV4T3V0cHV0LnZOb3JtYWwgPSBub3JtYWxpemUoIHRyYW5zZm9ybWVkTm9ybWFsICk7XHJcbiAgICAgICAgI2lmICR7ZGVmaW5lcy5GTEFUX1NIQURFRH1cclxuICAgICAgICAgICAgI2lmICR7ZGVmaW5lcy5VU0VfVEFOR0VOVH1cclxuICAgICAgICAgICAgICAgIHZUYW5nZW50ID0gbm9ybWFsaXplKCB0cmFuc2Zvcm1lZFRhbmdlbnQgKTtcclxuICAgICAgICAgICAgICAgIHZCaXRhbmdlbnQgPSBub3JtYWxpemUoIGNyb3NzKCB2Tm9ybWFsLCB2VGFuZ2VudCApICogaW5wdXQudGFuZ2VudC53ICk7XHJcbiAgICAgICAgICAgICNlbmRpZlxyXG4gICAgICAgICNlbmRpZlxyXG4gICAgICAgIGxldCB0cmFuc2Zvcm1lZDp2ZWMzPGYzMj4gPSB2ZWMzPGYzMj4oIGlucHV0LnBvc2l0aW9uICk7XHJcbiAgICAgICAgI2lmICR7ZGVmaW5lcy5VU0VfTU9SUEhUQVJHRVRTfVxyXG4gICAgICAgICAgICB0cmFuc2Zvcm1lZCAqPSBtYXRlcmlhbFVuaWZvcm0ubW9ycGhUYXJnZXRCYXNlSW5mbHVlbmNlO1xyXG4gICAgICAgICAgICAjaWYgJHtkZWZpbmVzLk1PUlBIVEFSR0VUU19URVhUVVJFfVxyXG4gICAgICAgICAgICAgICAgZm9yICggbGV0IGkgOiB1MzIgPSAwdTsgaSA8IG1hdGVyaWFsVW5pZm9ybS5NT1JQSFRBUkdFVFNfQ09VTlQ7IGkgPSBpICsgMXUgKSB7XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKCBtYXRlcmlhbFVuaWZvcm0ubW9ycGhUYXJnZXRJbmZsdWVuY2VzWyBpIF0gISA9IDAuMCApIHRyYW5zZm9ybWVkICs9IGdldE1vcnBoKCBnbF9WZXJ0ZXhJRCwgaSwgMCApLnh5eiAqIG1vcnBoVGFyZ2V0SW5mbHVlbmNlc1sgaSBdO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAjZWxzZVxyXG4gICAgICAgICAgICAgICAgdHJhbnNmb3JtZWQgKz0gaW5wdXQubW9ycGhUYXJnZXQwICogbWF0ZXJpYWxVbmlmb3JtLm1vcnBoVGFyZ2V0SW5mbHVlbmNlc1sgMCBdO1xyXG4gICAgICAgICAgICAgICAgdHJhbnNmb3JtZWQgKz0gaW5wdXQubW9ycGhUYXJnZXQxICogbWF0ZXJpYWxVbmlmb3JtLm1vcnBoVGFyZ2V0SW5mbHVlbmNlc1sgMSBdO1xyXG4gICAgICAgICAgICAgICAgdHJhbnNmb3JtZWQgKz0gaW5wdXQubW9ycGhUYXJnZXQyICogbWF0ZXJpYWxVbmlmb3JtLm1vcnBoVGFyZ2V0SW5mbHVlbmNlc1sgMiBdO1xyXG4gICAgICAgICAgICAgICAgdHJhbnNmb3JtZWQgKz0gaW5wdXQubW9ycGhUYXJnZXQzICogbWF0ZXJpYWxVbmlmb3JtLm1vcnBoVGFyZ2V0SW5mbHVlbmNlc1sgMyBdO1xyXG4gICAgICAgICAgICAgICAgI2lmICR7ZGVmaW5lcy5VU0VfTU9SUEhOT1JNQUxTfVxyXG4gICAgICAgICAgICAgICAgICAgIHRyYW5zZm9ybWVkICs9IGlucHV0Lm1vcnBoVGFyZ2V0NCAqIG1hdGVyaWFsVW5pZm9ybS5tb3JwaFRhcmdldEluZmx1ZW5jZXNbIDQgXTtcclxuICAgICAgICAgICAgICAgICAgICB0cmFuc2Zvcm1lZCArPSBpbnB1dC5tb3JwaFRhcmdldDUgKiBtYXRlcmlhbFVuaWZvcm0ubW9ycGhUYXJnZXRJbmZsdWVuY2VzWyA1IF07XHJcbiAgICAgICAgICAgICAgICAgICAgdHJhbnNmb3JtZWQgKz0gaW5wdXQubW9ycGhUYXJnZXQ2ICogbWF0ZXJpYWxVbmlmb3JtLm1vcnBoVGFyZ2V0SW5mbHVlbmNlc1sgNiBdO1xyXG4gICAgICAgICAgICAgICAgICAgIHRyYW5zZm9ybWVkICs9IGlucHV0Lm1vcnBoVGFyZ2V0NyAqIG1hdGVyaWFsVW5pZm9ybS5tb3JwaFRhcmdldEluZmx1ZW5jZXNbIDcgXTtcclxuICAgICAgICAgICAgICAgICNlbmRpZlxyXG4gICAgICAgICAgICAjZW5kaWZcclxuICAgICAgICAjZW5kaWZcclxuICAgICAgICAjaWYgJHtkZWZpbmVzLlVTRV9TS0lOTklOR31cclxuICAgICAgICAgICAgbGV0IHNraW5WZXJ0ZXg6dmVjNDxmMzI+ID0gbWF0ZXJpYWxVbmlmb3JtLmJpbmRNYXRyaXggKiB2ZWM0PGYzMj4oIHRyYW5zZm9ybWVkLCAxLjAgKTtcclxuICAgICAgICAgICAgbGV0IHNraW5uZWQ6dmVjNDxmMzI+ID0gdmVjNDxmMzI+KCAwLjAgKTtcclxuICAgICAgICAgICAgc2tpbm5lZCArPSBib25lTWF0WCAqIHNraW5WZXJ0ZXggKiBpbnB1dC5za2luV2VpZ2h0Lng7XHJcbiAgICAgICAgICAgIHNraW5uZWQgKz0gYm9uZU1hdFkgKiBza2luVmVydGV4ICogaW5wdXQuc2tpbldlaWdodC55O1xyXG4gICAgICAgICAgICBza2lubmVkICs9IGJvbmVNYXRaICogc2tpblZlcnRleCAqIGlucHV0LnNraW5XZWlnaHQuejtcclxuICAgICAgICAgICAgc2tpbm5lZCArPSBib25lTWF0VyAqIHNraW5WZXJ0ZXggKiBpbnB1dC5za2luV2VpZ2h0Lnc7XHJcbiAgICAgICAgICAgIHRyYW5zZm9ybWVkID0gKCBtYXRlcmlhbFVuaWZvcm0uYmluZE1hdHJpeEludmVyc2UgKiBza2lubmVkICkueHl6O1xyXG4gICAgICAgICNlbmRpZlxyXG4gICAgICAgICNpZiAke2RlZmluZXMuVVNFX0RJU1BMQUNFTUVOVFRFWFRVUkV9IFxyXG4gICAgICAgICAgICB0cmFuc2Zvcm1lZCArPSBub3JtYWxpemUoIG9iamVjdE5vcm1hbCApICogKHRleHR1cmVTYW1wbGUoZGlzcGxhY2VtZW50TWFwLCBiYXNlU2FtcGxlciwgdlV2KS54ICogbWF0ZXJpYWxVbmlmb3JtLmRpc3BsYWNlbWVudFNjYWxlICsgbWF0ZXJpYWxVbmlmb3JtLmRpc3BsYWNlbWVudEJpYXMgKTtcclxuICAgICAgICAjZW5kaWZcclxuICAgICAgICB2YXIgbXZQb3NpdGlvbjp2ZWM0PGYzMj4gPSB2ZWM0PGYzMj4oIHRyYW5zZm9ybWVkLCAxLjAgKTtcclxuICAgICAgICAjaWYgJHtkZWZpbmVzLlVTRV9JTlNUQU5DSU5HfVxyXG4gICAgICAgICAgICBtdlBvc2l0aW9uID0gaW5wdXQuaW5zdGFuY2VNYXRyaXggKiBtdlBvc2l0aW9uO1xyXG4gICAgICAgICNlbmRpZlxyXG4gICAgICAgIG12UG9zaXRpb24gPSBnbG9iYWxVbmlmb3JtLnZpZXdNYXRyaXgqbWF0ZXJpYWxVbmlmb3JtLm1vZGVsTWF0cml4ICogbXZQb3NpdGlvbjtcclxuICAgICAgICB2ZXJ0ZXhPdXRwdXQucG9zaXRpb24gPSBnbG9iYWxVbmlmb3JtLnByb2plY3Rpb25NYXRyaXggKiBtdlBvc2l0aW9uO1xyXG4gICAgICAgIHZlcnRleE91dHB1dC52Vmlld1Bvc2l0aW9uID0gLSBtdlBvc2l0aW9uLnh5ei9tdlBvc2l0aW9uLnc7XHJcbiAgICAgICAgI2lmICR7XHJcbiAgICAgICAgICBkZWZpbmVzLlVTRV9FTlZURVhUVVJFIHx8IGRlZmluZXMuRElTVEFOQ0UgfHwgZGVmaW5lcy5VU0VfVFJBTlNNSVNTSU9OXHJcbiAgICAgICAgfSBcclxuICAgICAgICAgICAgdmFyIHdvcmxkUG9zaXRpb246dmVjNDxmMzI+ID0gdmVjNDxmMzI+KCB0cmFuc2Zvcm1lZCwgMS4wICk7XHJcbiAgICAgICAgICAgICNpZiAke2RlZmluZXMuVVNFX0lOU1RBTkNJTkd9XHJcbiAgICAgICAgICAgICAgICB3b3JsZFBvc2l0aW9uID0gaW5wdXQuaW5zdGFuY2VNYXRyaXggKiB3b3JsZFBvc2l0aW9uO1xyXG4gICAgICAgICAgICAjZW5kaWZcclxuICAgICAgICAgICAgd29ybGRQb3NpdGlvbiA9IG1hdGVyaWFsVW5pZm9ybS5tb2RlbE1hdHJpeCAqIHdvcmxkUG9zaXRpb247XHJcbiAgICAgICAgI2VuZGlmXHJcbiAgICAgICAgI2lmICR7ZGVmaW5lcy5VU0VfVFJBTlNNSVNTSU9OfVxyXG4gICAgICAgICAgICB2ZXJ0ZXhPdXRwdXQudldvcmxkUG9zaXRpb24gPSB3b3JsZFBvc2l0aW9uLnh5ejtcclxuICAgICAgICAjZW5kaWZcclxuICAgICAgICByZXR1cm4gdmVydGV4T3V0cHV0O1xyXG4gICAgfVxyXG4gICAgYDtcclxufVxyXG4iLCJpbXBvcnQgeyB3Z3NsUGFyc2VEZWZpbmVzIH0gZnJvbSBcIi4uL1dnc2xQcmVwcm9jZXNzb3JcIjtcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHBob25nRnJhZyhkZWZpbmVzKSB7XG5cdHJldHVybiB3Z3NsUGFyc2VEZWZpbmVzYCAgXG4gICAgc3RydWN0IE1hdGVyaWFsVW5pZm9ybSB7XG4gICAgICBtb2RlbE1hdHJpeDogbWF0NHg0PGYzMj4sXG4gICAgICBjb2xvcjogdmVjMzxmMzI+LFxuICAgICAgb3BhY2l0eTpmMzIsXG4gICAgICBub3JtYWxNYXRyaXg6IG1hdDR4NDxmMzI+LFxuICAgICAgZW1pc3NpdmU6dmVjMzxmMzI+LFxuICAgICAgc2hpbmluZXNzOmYzMixcbiAgICAgIHNwZWN1bGFyOnZlYzM8ZjMyPiwgICAgICBcbiAgIH1cbiAgICAjaW5jbHVkZSA8RnJhZ0lucHV0PlxuICAgICNpbmNsdWRlIDxTeXN0ZW1Vbmlmb3JtPlxuICAgICNpbmNsdWRlIDxUZXh0dXJlQW5kU2FtcGxlckRlZmluZT5cbiAgICAjaW5jbHVkZSA8bGlnaHQ+XG4gICAgQGJpbmRpbmcoJHtkZWZpbmVzLnBob25nQmluZGluZ30pIEBncm91cCgwKSB2YXI8dW5pZm9ybT4gbWF0ZXJpYWxVbmlmb3JtIDogTWF0ZXJpYWxVbmlmb3JtO1xuICAgIEBiaW5kaW5nKCR7ZGVmaW5lcy5jYW1lcmFCaW5kaW5nfSkgQGdyb3VwKDEpIHZhcjx1bmlmb3JtPiBzeXN0ZW1Vbmlmb3JtIDogU3lzdGVtVW5pZm9ybTtcbiAgICBAZnJhZ21lbnRcbiAgICBmbiBtYWluKGlucHV0OkZyYWdJbnB1dCkgLT4gQGxvY2F0aW9uKDApIHZlYzQ8ZjMyPiB7XG4gICAgICAgIHZhciB0b3RhbEVtaXNzaXZlUmFkaWFuY2U6dmVjMzxmMzI+ID0gbWF0ZXJpYWxVbmlmb3JtLmVtaXNzaXZlO1xuICAgICAgICB2YXIgY29sb3I6dmVjNDxmMzI+O1xuICAgICAgICAjaWYke2RlZmluZXMuVVNFX0NPTE9SVEVYVFVSRX1cbiAgICAgICAgICAgIGNvbG9yPSB2ZWM0PGYzMj4odGV4dHVyZVNhbXBsZShiYXNlQ29sb3JUZXh0dXJlLCBiYXNlQ29sb3JTYW1wbGVyLCBpbnB1dC51dikucmdiK21hdGVyaWFsVW5pZm9ybS5jb2xvcixtYXRlcmlhbFVuaWZvcm0ub3BhY2l0eSk7XG4gICAgICAgICNlbHNlXG4gICAgICAgICAgICBjb2xvcj12ZWM0PGYzMj4obWF0ZXJpYWxVbmlmb3JtLmNvbG9yLG1hdGVyaWFsVW5pZm9ybS5vcGFjaXR5KTtcbiAgICAgICAgI2VuZGlmICAgICBcbiAgICAgICAgbGV0ICBWOnZlYzM8ZjMyPiA9ICBub3JtYWxpemUoIHN5c3RlbVVuaWZvcm0uY2FtZXJhUG9zaXRpb24gLSBpbnB1dC53b3JsZFBvcyk7XG4gICAgICAgICNpZiAke2RlZmluZXMuVVNFX05PUk1BTFRFWFRVUkV9XG4gICAgICAgICAgICBsZXQgTjp2ZWMzPGYzMj4gPSBnZXROb3JtYWxCeU5vcm1hbFRleHR1cmUoaW5wdXQpOyAgXG4gICAgICAgICNlbHNlXG4gICAgICAgICAgICBsZXQgTjp2ZWMzPGYzMj4gPSBnZXROb3JtYWwoaW5wdXQpO1xuICAgICAgICAjZW5kaWZcbiAgICAgICAgdmFyIGdlb21ldHJ5Okdlb21ldHJ5O1xuICAgICAgICBnZW9tZXRyeS5ub3JtYWw9TjtcbiAgICAgICAgZ2VvbWV0cnkudmlld0Rpcj1WO1xuICAgICAgICBnZW9tZXRyeS5wb3NpdGlvbj1pbnB1dC53b3JsZFBvcztcbiAgICAgICAgbGV0IGxpZ2h0Q29sb3I6UmVmbGVjdGVkTGlnaHQ9cGFyc2VMaWdodHMoZ2VvbWV0cnksbWF0ZXJpYWxVbmlmb3JtLnNoaW5pbmVzcyk7XG4gICAgICAgIC8vIHZhciBmaW5uYWxDb2xvcjp2ZWMzPGYzMj49Y29sb3IueHl6ICsgKGxpZ2h0Q29sb3IuZGlyZWN0RGlmZnVzZSArIGxpZ2h0Q29sb3IuZGlyZWN0U3BlY3VsYXIgKyBsaWdodENvbG9yLmFtYmllbnQpO1xuICAgICAgICB2YXIgZmlubmFsQ29sb3I6dmVjMzxmMzI+PWNvbG9yLnh5eiAqIChsaWdodENvbG9yLmRpcmVjdERpZmZ1c2UgKyBsaWdodENvbG9yLmRpcmVjdFNwZWN1bGFyICsgbGlnaHRDb2xvci5hbWJpZW50KTtcblxuICAgICAgICAvLyBmaW5uYWxDb2xvciA9IGxpZ2h0Q29sb3IudGVzdENvbG9yLnh5ejtcblxuICAgICAgICByZXR1cm4gdmVjNDxmMzI+KGZpbm5hbENvbG9yLGNvbG9yLmEpO1xuICAgIH1gO1xufVxuIiwiaW1wb3J0IHsgd2dzbFBhcnNlRGVmaW5lcyB9IGZyb20gXCIuLi9XZ3NsUHJlcHJvY2Vzc29yXCI7XG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBwaG9uZ1ZlcnQoZGVmaW5lcykge1xuXHRyZXR1cm4gd2dzbFBhcnNlRGVmaW5lc2BcbiAgICAgIHN0cnVjdCBNYXRlcmlhbFVuaWZvcm0ge1xuICAgICAgICAgICAgbW9kZWxNYXRyaXg6IG1hdDR4NDxmMzI+LFxuICAgICAgICAgICAgY29sb3I6IHZlYzM8ZjMyPixcbiAgICAgICAgICAgIG9wYWNpdHk6ZjMyLFxuICAgICAgICAgICAgbm9ybWFsTWF0cml4OiBtYXQ0eDQ8ZjMyPixcbiAgICAgICAgICAgIGVtaXNzaXZlOnZlYzM8ZjMyPixcbiAgICAgICAgICAgIHNwZWN1bGFyOnZlYzM8ZjMyPixcbiAgICAgICAgICAgIHNoaW5pbmVzczpmMzIsXG4gICAgICB9XG4gICAgICAjaW5jbHVkZSA8VmVydGV4T3V0cHV0PlxuICAgICAgI2luY2x1ZGUgPFN5c3RlbVVuaWZvcm0+XG4gICAgICAjaW5jbHVkZSA8VmVydGV4SW5wdXQ+XG4gICAgICBAYmluZGluZygke2RlZmluZXMucGhvbmdCaW5kaW5nfSkgQGdyb3VwKDApIHZhcjx1bmlmb3JtPiBzZWxmVW5pZm9ybSA6IE1hdGVyaWFsVW5pZm9ybTtcbiAgICAgIEBiaW5kaW5nKCR7ZGVmaW5lcy5jYW1lcmFCaW5kaW5nfSkgQGdyb3VwKDEpIHZhcjx1bmlmb3JtPiBzeXN0ZW1Vbmlmb3JtIDogU3lzdGVtVW5pZm9ybTtcbiAgICAgIEB2ZXJ0ZXhcbiAgICAgIGZuIG1haW4oaW5wdXQ6IFZlcnRleElucHV0KSAtPiBWZXJ0ZXhPdXRwdXQge1xuICAgICAgICAgICAgdmFyIG91dHB1dDogVmVydGV4T3V0cHV0O1xuICAgICAgICAgICAgI2lmICR7ZGVmaW5lcy5IQVNfVVZ9XG4gICAgICAgICAgICAgICBvdXRwdXQudXYgPSBpbnB1dC51djtcbiAgICAgICAgICAgICNlbmRpZiBcbiAgICAgICAgICAgIGxldCBtb2RlbFBvcz1zZWxmVW5pZm9ybS5tb2RlbE1hdHJpeCAqdmVjNDxmMzI+KGlucHV0LnBvc2l0aW9uLDEuMCk7XG4gICAgICAgICAgICBvdXRwdXQud29ybGRQb3MgPSBtb2RlbFBvcy54eXovbW9kZWxQb3MudztcbiAgICAgICAgICAgIGxldCB2Tm9ybWFsVmlldyA9IHNlbGZVbmlmb3JtLm5vcm1hbE1hdHJpeCAqIHZlYzQ8ZjMyPihpbnB1dC5ub3JtYWwsMC4wKTtcbiAgICAgICAgICAgIG91dHB1dC5ub3JtYWwgPSAgdk5vcm1hbFZpZXcueHl6O1xuICAgICAgICAgICAgb3V0cHV0LnZpZXcgPSBzeXN0ZW1Vbmlmb3JtLmNhbWVyYVBvc2l0aW9uLnh5eiAtIG1vZGVsUG9zLnh5ejtcbiAgICAgICAgICAgIGxldCB2aWV3UG9zaXRpb249c3lzdGVtVW5pZm9ybS52aWV3TWF0cml4ICogbW9kZWxQb3M7XG4gICAgICAgICAgICBvdXRwdXQudmlld1Bvc2l0aW9uID0gLXZpZXdQb3NpdGlvbi54eXo7XG4gICAgICAgICAgICBvdXRwdXQucG9zaXRpb24gPSBzeXN0ZW1Vbmlmb3JtLnByb2plY3Rpb25NYXRyaXggKiBzeXN0ZW1Vbmlmb3JtLnZpZXdNYXRyaXggKiBtb2RlbFBvcztcbiAgICAgICAgICAgIHJldHVybiBvdXRwdXQ7XG4gICAgICB9YDtcbn1cbiIsImltcG9ydCB7IHdnc2xQYXJzZURlZmluZXMgfSBmcm9tIFwiLi4vV2dzbFByZXByb2Nlc3NvclwiO1xuXG5leHBvcnQgZnVuY3Rpb24gcG9pbnRfZnMoZGVmaW5lcykge1xuXHRyZXR1cm4gd2dzbFBhcnNlRGVmaW5lc2BcbiAgI2luY2x1ZGUgPFBvaW50RnJhZ0lucHV0PlxuICBzdHJ1Y3QgU2VsZlVuaWZvcm0ge1xuICAgIG1vZGVsTWF0cml4OiBtYXQ0eDQ8ZjMyPixcbiAgICBjb2xvcjp2ZWMzPGYzMj4sXG4gICAgc2l6ZTpmMzIsXG4gICAgb3BhY2l0eTpmMzIsXG4gIH1cbiAgQGJpbmRpbmcoJHtkZWZpbmVzLnBvaW50QmluZGluZ30pIEBncm91cCgwKSB2YXI8dW5pZm9ybT4gc2VsZlVuaWZvcm0gOiBTZWxmVW5pZm9ybTtcbiAgI2lmJHtkZWZpbmVzLlVTRV9DT0xPUlRFWFRVUkV9XG4gICAgQGdyb3VwKDApIEBiaW5kaW5nKCR7ZGVmaW5lcy5iYXNlQ29sb3JTYW1wbGVyQmluZGluZ30pIHZhciBiYXNlQ29sb3JTYW1wbGVyOiBzYW1wbGVyO1xuICAgIEBncm91cCgwKSBAYmluZGluZygke2RlZmluZXMuYmFzZUNvbG9yVGV4dHVyZUJpbmRpbmd9KSB2YXIgYmFzZUNvbG9yVGV4dHVyZTogdGV4dHVyZV8yZDxmMzI+O1xuICAjZW5kaWZcbiAgQGZyYWdtZW50XG4gIGZuIG1haW4oaW5wdXQ6UG9pbnRGcmFnSW5wdXQpIC0+IEBsb2NhdGlvbigwKSB2ZWM0PGYzMj4ge1xuICAgIHZhciBjb2xvcjp2ZWM0PGYzMj49dmVjNDxmMzI+KHNlbGZVbmlmb3JtLmNvbG9yLHNlbGZVbmlmb3JtLm9wYWNpdHkpO1xuICAgICNpZiR7ZGVmaW5lcy5VU0VfQ09MT1JURVhUVVJFfVxuICAgICAgY29sb3I9dGV4dHVyZVNhbXBsZShiYXNlQ29sb3JUZXh0dXJlLCBiYXNlQ29sb3JTYW1wbGVyLCBpbnB1dC51dik7XG4gICAgI2VuZGlmXG4gICAgI2lmJHtkZWZpbmVzLkhBU19DT0xPUn1cbiAgICAgIGNvbG9yPXZlYzQ8ZjMyPihpbnB1dC5jb2xvcixzZWxmVW5pZm9ybS5vcGFjaXR5KTtcbiAgICAjZW5kaWZcbiAgICByZXR1cm4gY29sb3I7XG4gIH1cbiAgYDtcbn1cbiIsImltcG9ydCB7IHdnc2xQYXJzZURlZmluZXMgfSBmcm9tIFwiLi4vV2dzbFByZXByb2Nlc3NvclwiO1xuXG5leHBvcnQgZnVuY3Rpb24gcG9pbnRfdnMoZGVmaW5lcykge1xuXHRyZXR1cm4gd2dzbFBhcnNlRGVmaW5lc2BcbiAgICAjaW5jbHVkZSA8UG9pbnRWZXJ0T3V0cHV0PlxuICAgICNpbmNsdWRlIDxTeXN0ZW1Vbmlmb3JtPlxuICAgICNpbmNsdWRlIDxQb2ludFZlcnRJbnB1dD5cbiAgICBzdHJ1Y3QgU2VsZlVuaWZvcm0ge1xuICAgICAgbW9kZWxNYXRyaXg6IG1hdDR4NDxmMzI+LFxuICAgICAgY29sb3I6dmVjMzxmMzI+LFxuICAgICAgc2l6ZTpmMzIsXG4gICAgICBvcGFjaXR5OmYzMixcbiAgICB9XG4gICAgQGJpbmRpbmcoJHtkZWZpbmVzLnBvaW50QmluZGluZ30pIEBncm91cCgwKSB2YXI8dW5pZm9ybT4gc2VsZlVuaWZvcm0gOiBTZWxmVW5pZm9ybTtcbiAgICBAYmluZGluZygke2RlZmluZXMuY2FtZXJhQmluZGluZ30pIEBncm91cCgxKSB2YXI8dW5pZm9ybT4gc3lzdGVtVW5pZm9ybSA6IFN5c3RlbVVuaWZvcm07XG4gICAgQHZlcnRleFxuICAgICAgZm4gbWFpbihpbnB1dDogUG9pbnRWZXJ0SW5wdXQpIC0+IFBvaW50VmVydE91dHB1dCB7XG4gICAgICB2YXIgb3V0cHV0OlBvaW50VmVydE91dHB1dDtcbiAgICAgIGxldCBtdlBvc2l0aW9uOnZlYzQ8ZjMyPj0geXN0ZW1Vbmlmb3JtLnZpZXdNYXRyaXggKnNlbGZVbmlmb3JtLm1vZGVsTWF0cml4KnZlYzQ8ZjMyPigwLjAsMC4wLDAuMCwgMS4wICk7XG4gICAgICAjaWYgJHtkZWZpbmVzLkhBU19VVn1cbiAgICAgICAgICBvdXRwdXQudXY9aW5wdXQudXY7XG4gICAgICAjZW5kaWZcbiAgICAgICNpZiAke2RlZmluZXMuSEFTX0NPTE9SfVxuICAgICAgICAgIG91dHB1dC5jb2xvcj1pbnB1dC5jb2xvcjtcbiAgICAgICNlbmRpZlxuICAgICAgI2lmICR7ZGVmaW5lcy5IQVNfU0laRX1cbiAgICAgICAgICBvdXRwdXQuc2l6ZT1pbnB1dC5zaXplO1xuICAgICAgI2VuZGlmXG4gICAgICB2ZWMyIGFsaWduZWRQb3NpdGlvbiA9IGlucHV0LnBvc2l0aW9uLnh5KiBzZWxmVW5pZm9ybS5zaXplO1xuICAgICAgbXZQb3NpdGlvbi54eSArPSBhbGlnbmVkUG9zaXRpb247XG4gICAgICBvdXRwdXQucG9zaXRpb24gPSBzeXN0ZW1Vbmlmb3JtLnByb2plY3Rpb25NYXRyaXggKiBtdlBvc2l0aW9uO1xuICAgICAgcmV0dXJuIG91dHB1dDtcbiAgICAgIH1cbiAgIGA7XG59XG4iLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBxdWFkRnJhZyhkZWZpbmVzKSB7XHJcblx0cmV0dXJuIGBcclxuICAgIEBncm91cCgwKSBAYmluZGluZygxKSB2YXIgYmFzZVNhbXBsZXI6IHNhbXBsZXI7XHJcbiAgICBAZ3JvdXAoMCkgQGJpbmRpbmcoMCkgdmFyIGNvbG9yVGV4dHVyZTogdGV4dHVyZV8yZDxmMzI+O1xyXG4gICAgc3RydWN0IFZlcnRleE91dHB1dCB7XHJcbiAgICAgICAgQGJ1aWx0aW4ocG9zaXRpb24pIHBvc2l0aW9uOiB2ZWM0PGYzMj4sXHJcbiAgICAgICAgQGxvY2F0aW9uKDApIHV2OiB2ZWMyPGYzMj4sXHJcbiAgICB9O1xyXG4gICAgQGZyYWdtZW50XHJcbiAgICBmbiBtYWluKGlucHV0OlZlcnRleE91dHB1dCkgLT4gQGxvY2F0aW9uKDApIHZlYzQ8ZjMyPiB7XHJcbiAgICAgIHJldHVybiB0ZXh0dXJlU2FtcGxlKGNvbG9yVGV4dHVyZSwgYmFzZVNhbXBsZXIsIHZlYzI8ZjMyPihpbnB1dC51di54LDEuMC1pbnB1dC51di55KSk7XHJcbiAgICB9XHJcbiAgICBgO1xyXG59XHJcbiIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHF1YWRWZXJ0KGRlZmluZXMpIHtcblx0cmV0dXJuIGBcbiAgICBzdHJ1Y3QgVmVydGV4SW5wdXQge1xuICAgICAgICAgQGxvY2F0aW9uKCR7ZGVmaW5lcy5wb3NpdGlvbkxvY2F0aW9ufSkgcG9zaXRpb246IHZlYzI8ZjMyPiwgICAgICAgXG4gICAgfVxuICAgIHN0cnVjdCBWZXJ0ZXhPdXRwdXQge1xuICAgICAgICAgQGJ1aWx0aW4ocG9zaXRpb24pIHBvc2l0aW9uOiB2ZWM0PGYzMj4sXG4gICAgICAgICBAbG9jYXRpb24oMCkgdXY6IHZlYzI8ZjMyPixcbiAgICAgfTtcbiAgICBAdmVydGV4XG4gICAgZm4gbWFpbihpbnB1dDogVmVydGV4SW5wdXQpIC0+IFZlcnRleE91dHB1dCB7XG4gICAgIHZhciBvdXRwdXQ6VmVydGV4T3V0cHV0O1xuICAgICBvdXRwdXQudXYgPSBpbnB1dC5wb3NpdGlvbiAqIDAuNSArIDAuNTtcbiAgICAgb3V0cHV0LnBvc2l0aW9uID0gdmVjNDxmMzI+KGlucHV0LnBvc2l0aW9uLCAwLjAsIDEuMCk7O1xuICAgICByZXR1cm4gb3V0cHV0O1xuICAgIH1cbiAgICBgO1xufVxuIiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gc2t5Qm94RnJhZyhkZWZpbmVzKSB7XHJcbiAgcmV0dXJuIGBcclxuICAgIGZuIGxlc3NUaGFuRXF1YWwoYTp2ZWMzPGYzMj4sYjp2ZWMzPGYzMj4pLT52ZWMzPGYzMj57XHJcbiAgICAgICAgbGV0IHhWYWx1ZTpmMzI9c2VsZWN0KGIueCxhLngsYS54PD1iLngpO1xyXG4gICAgICAgIGxldCB5VmFsdWU6ZjMyPXNlbGVjdChiLnksYS55LGEueTw9Yi55KTtcclxuICAgICAgICBsZXQgelZhbHVlOmYzMj1zZWxlY3QoYi56LGEueixhLno8PWIueik7XHJcbiAgICAgICAgcmV0dXJuIHZlYzM8ZjMyPih4VmFsdWUseVZhbHVlLHpWYWx1ZSk7ICAgIFxyXG4gICAgIH1cclxuICAgIGZuIExpbmVhclRvc1JHQiggdmFsdWU6dmVjNDxmMzI+ICktPnZlYzQ8ZjMyPiB7XHJcbiAgICAgICAgcmV0dXJuIHZlYzQ8ZjMyPiggbWl4KCBwb3coIHZhbHVlLnJnYiwgdmVjMzxmMzI+KCAwLjQxNjY2ICkgKSAqIDEuMDU1IC0gdmVjMzxmMzI+KCAwLjA1NSApLCB2YWx1ZS5yZ2IgKiAxMi45MiwgdmVjMzxmMzI+KCBsZXNzVGhhbkVxdWFsKCB2YWx1ZS5yZ2IsIHZlYzM8ZjMyPiggMC4wMDMxMzA4ICkgKSApICksIHZhbHVlLmEgKTtcclxuICAgIH1cclxuICBzdHJ1Y3QgRnJhZ21lbnRJbnB1dCB7XHJcbiAgICBAbG9jYXRpb24oMCkgdGV4Q29vcmQgOiB2ZWMzPGYzMj5cclxuICB9O1xyXG4gIEBncm91cCgwKSBAYmluZGluZygyKSB2YXIgZGVmYXVsdFNhbXBsZXI6IHNhbXBsZXI7XHJcbiAgQGdyb3VwKDApIEBiaW5kaW5nKDEpIHZhciBza3lib3hUZXh0dXJlOiB0ZXh0dXJlX2N1YmU8ZjMyPjtcclxuICBAZnJhZ21lbnRcclxuICBmbiBtYWluKGlucHV0IDogRnJhZ21lbnRJbnB1dCkgLT4gQGxvY2F0aW9uKDApIHZlYzQ8ZjMyPiB7XHJcbiAgICBsZXQgY29sb3IgPSB0ZXh0dXJlU2FtcGxlKHNreWJveFRleHR1cmUsIGRlZmF1bHRTYW1wbGVyLCBpbnB1dC50ZXhDb29yZCk7XHJcbiAgICByZXR1cm4gTGluZWFyVG9zUkdCKGNvbG9yKTtcclxuICB9XHJcbmA7XHJcbn1cclxuIiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gc2t5Qm94VmVydChkZWZpbmVzKSB7XG5cdHJldHVybiBgXG4gICBzdHJ1Y3QgU3lzdGVtVW5pZm9ybSB7XG4gICAgICAgcHJvamVjdGlvbk1hdHJpeDogbWF0NHg0PGYzMj4sXG4gICAgICAgdmlld01hdHJpeDogbWF0NHg0PGYzMj4sXG4gICAgICAgaW52ZXJzZVZpZXdNYXRyaXg6IG1hdDR4NDxmMzI+LFxuICAgICAgIGNhbWVyYVBvc2l0aW9uOiB2ZWMzPGYzMj4sXG4gICB9OyBcbiAgIHN0cnVjdCBNYXRlcmlhbFVuaWZvcm0ge1xuICAgIG1vZGVsTWF0cml4OiBtYXQ0eDQ8ZjMyPixcbiB9XG4gICBAYmluZGluZygke2RlZmluZXMuc2t5Ym94QmluZGluZ30pIEBncm91cCgwKSB2YXI8dW5pZm9ybT4gc2VsZlVuaWZvcm0gOiBNYXRlcmlhbFVuaWZvcm07XG4gICBAYmluZGluZygke2RlZmluZXMuY2FtZXJhQmluZGluZ30pIEBncm91cCgxKSB2YXI8dW5pZm9ybT4gc3lzdGVtVW5pZm9ybSA6IFN5c3RlbVVuaWZvcm07XG4gICAgIHN0cnVjdCBWZXJ0ZXhJbnB1dCB7XG4gICAgICAgQGxvY2F0aW9uKCR7ZGVmaW5lcy5wb3NpdGlvbkxvY2F0aW9ufSkgcG9zaXRpb24gOiB2ZWMzPGYzMj4sXG4gICAgIH07XG4gICAgIHN0cnVjdCBWZXJ0ZXhPdXRwdXQge1xuICAgICAgIEBidWlsdGluKHBvc2l0aW9uKSBwb3NpdGlvbiA6IHZlYzQ8ZjMyPixcbiAgICAgICBAbG9jYXRpb24oMCkgdGV4Q29vcmQgOiB2ZWMzPGYzMj4sXG4gICAgIH07XG4gICAgIEB2ZXJ0ZXhcbiAgICAgZm4gbWFpbihpbnB1dCA6IFZlcnRleElucHV0KSAtPiBWZXJ0ZXhPdXRwdXQge1xuICAgICAgIHZhciBvdXRwdXQgOiBWZXJ0ZXhPdXRwdXQ7XG4gICAgICAgb3V0cHV0LnRleENvb3JkID0gaW5wdXQucG9zaXRpb24ueHl6O1xuICAgICAgIHZhciBtb2RlbFZpZXcgPSBzeXN0ZW1Vbmlmb3JtLnZpZXdNYXRyaXg7XG4gICAgICAgLy8gRHJvcCB0aGUgdHJhbnNsYXRpb24gcG9ydGlvbiBvZiB0aGUgbW9kZWxWaWV3IG1hdHJpeFxuICAgICAgIG1vZGVsVmlld1szXSA9IHZlYzQoMC4wLCAwLjAsIDAuMCwgbW9kZWxWaWV3WzNdLncpO1xuICAgICAgIG91dHB1dC5wb3NpdGlvbiA9IHN5c3RlbVVuaWZvcm0ucHJvamVjdGlvbk1hdHJpeCAqIG1vZGVsVmlldyAqIHZlYzQ8ZjMyPihpbnB1dC5wb3NpdGlvbiwxLjApO1xuICAgICAgIG91dHB1dC5wb3NpdGlvbiA9IG91dHB1dC5wb3NpdGlvbi54eXd3O1xuICAgICAgIHJldHVybiBvdXRwdXQ7XG4gICAgIH1cbiAgIGA7XG59XG4iLCJpbXBvcnQgeyB3Z3NsUGFyc2VEZWZpbmVzIH0gZnJvbSBcIi4uL1dnc2xQcmVwcm9jZXNzb3JcIjtcblxuZXhwb3J0IGZ1bmN0aW9uIHNwcml0ZV9mcyhkZWZpbmVzKSB7XG5cdHJldHVybiB3Z3NsUGFyc2VEZWZpbmVzYFxuICAjaW5jbHVkZSA8VmVydGV4T3V0cHV0PlxuICBzdHJ1Y3QgU2VsZlVuaWZvcm0ge1xuICAgIG1vZGVsTWF0cml4OiBtYXQ0eDQ8ZjMyPixcbiAgICBjb2xvcjp2ZWMzPGYzMj4sXG4gICAgcm90YXRpb246ZjMyLFxuICAgIGNlbnRlcjp2ZWMyPGYzMj4sXG4gICAgb3BhY2l0eTpmMzIsXG4gIH1cbiAgQGJpbmRpbmcoJHtkZWZpbmVzLnNwcml0ZUJpbmRpbmd9KSBAZ3JvdXAoMCkgdmFyPHVuaWZvcm0+IHNlbGZVbmlmb3JtIDogU2VsZlVuaWZvcm07XG4gICNpZiR7ZGVmaW5lcy5VU0VfQ09MT1JURVhUVVJFfVxuICAgIEBncm91cCgwKSBAYmluZGluZygke2RlZmluZXMuYmFzZUNvbG9yU2FtcGxlckJpbmRpbmd9KSB2YXIgYmFzZUNvbG9yU2FtcGxlcjogc2FtcGxlcjtcbiAgICBAZ3JvdXAoMCkgQGJpbmRpbmcoJHtkZWZpbmVzLmJhc2VDb2xvclRleHR1cmVCaW5kaW5nfSkgdmFyIGJhc2VDb2xvclRleHR1cmU6IHRleHR1cmVfMmQ8ZjMyPjtcbiAgI2VuZGlmXG4gIEBmcmFnbWVudFxuICBmbiBtYWluKGlucHV0OlZlcnRleE91dHB1dCkgLT4gQGxvY2F0aW9uKDApIHZlYzQ8ZjMyPiB7XG4gICAgI2lmJHtkZWZpbmVzLlVTRV9DT0xPUlRFWFRVUkV9XG4gICAgICByZXR1cm4gdGV4dHVyZVNhbXBsZShiYXNlQ29sb3JUZXh0dXJlLCBiYXNlQ29sb3JTYW1wbGVyLCBpbnB1dC51dik7XG4gICAgI2Vsc2VcbiAgICAgIHJldHVybiB2ZWM0PGYzMj4oc2VsZlVuaWZvcm0uY29sb3Isc2VsZlVuaWZvcm0ub3BhY2l0eSk7XG4gICAgI2VuZGlmXG4gIH1cbiAgYDtcbn1cbiIsImltcG9ydCB7IHdnc2xQYXJzZURlZmluZXMgfSBmcm9tIFwiLi4vV2dzbFByZXByb2Nlc3NvclwiO1xuZXhwb3J0IGZ1bmN0aW9uIHNwcml0ZV92cyhkZWZpbmVzKSB7XG5cdHJldHVybiB3Z3NsUGFyc2VEZWZpbmVzYFxuXG4gICNpbmNsdWRlIDxWZXJ0ZXhJbnB1dD5cbiAgI2luY2x1ZGUgPFZlcnRleE91dHB1dD5cbiAgI2luY2x1ZGUgPFN5c3RlbVVuaWZvcm0+XG4gIHN0cnVjdCBTZWxmVW5pZm9ybSB7XG4gICAgbW9kZWxNYXRyaXg6IG1hdDR4NDxmMzI+LFxuICAgIGNvbG9yOnZlYzM8ZjMyPixcbiAgICByb3RhdGlvbjpmMzIsXG4gICAgY2VudGVyOnZlYzI8ZjMyPixcbiAgICBvcGFjaXR5OmYzMixcbiAgfVxuICBAYmluZGluZygke2RlZmluZXMuc3ByaXRlQmluZGluZ30pIEBncm91cCgwKSB2YXI8dW5pZm9ybT4gc2VsZlVuaWZvcm0gOiBTZWxmVW5pZm9ybTtcbiAgQGJpbmRpbmcoJHtkZWZpbmVzLmNhbWVyYUJpbmRpbmd9KSBAZ3JvdXAoMSkgdmFyPHVuaWZvcm0+IHN5c3RlbVVuaWZvcm0gOiBTeXN0ZW1Vbmlmb3JtO1xuICBAdmVydGV4XG4gIGZuIG1haW4oaW5wdXQ6IFZlcnRleElucHV0KSAtPiBWZXJ0ZXhPdXRwdXQge1xuICAgICAgdmFyIG91dHB1dDpWZXJ0ZXhPdXRwdXQ7XG4gICAgICB2YXIgbXZQb3NpdGlvbjp2ZWM0PGYzMj49IHN5c3RlbVVuaWZvcm0udmlld01hdHJpeCAqc2VsZlVuaWZvcm0ubW9kZWxNYXRyaXgqdmVjNDxmMzI+KDAuMCwwLjAsMC4wLDEuMCk7XG4gICAgICAjaWYgJHtkZWZpbmVzLkhBU19VVn1cbiAgICAgICAgb3V0cHV0LnV2PWlucHV0LnV2O1xuICAgICAgI2VuZGlmXG4gICAgICB2YXIgc2NhbGU6dmVjMjxmMzI+O1xuICAgICAgc2NhbGUueCA9IGxlbmd0aCh2ZWMzPGYzMj4oc2VsZlVuaWZvcm0ubW9kZWxNYXRyaXhbMF0ueCwgc2VsZlVuaWZvcm0ubW9kZWxNYXRyaXhbMF0ueSwgc2VsZlVuaWZvcm0ubW9kZWxNYXRyaXhbMF0ueikpO1xuICAgICAgc2NhbGUueSA9IGxlbmd0aCh2ZWMzPGYzMj4oc2VsZlVuaWZvcm0ubW9kZWxNYXRyaXhbMV0ueCwgc2VsZlVuaWZvcm0ubW9kZWxNYXRyaXhbMV0ueSwgc2VsZlVuaWZvcm0ubW9kZWxNYXRyaXhbMV0ueikpO1xuICAgICAgLy8gc2NhbGUgKj0gLSBtdlBvc2l0aW9uLno7XG4gICAgICB2YXIgYWxpZ25lZFBvc2l0aW9uOnZlYzI8ZjMyPiA9KGlucHV0LnBvc2l0aW9uLnh5LSAoc2VsZlVuaWZvcm0uY2VudGVyIC0gdmVjMjxmMzI+KDAuNSwwLjUpKSkgKiBzY2FsZTtcbiAgICAgIGxldCByb3RhdGVkUG9zaXRpb25YID0gY29zKHNlbGZVbmlmb3JtLnJvdGF0aW9uKSAqIGFsaWduZWRQb3NpdGlvbi54IC0gc2luKCBzZWxmVW5pZm9ybS5yb3RhdGlvbiApICogYWxpZ25lZFBvc2l0aW9uLnk7XG4gICAgICBsZXQgcm90YXRlZFBvc2l0aW9uWSA9IHNpbihzZWxmVW5pZm9ybS5yb3RhdGlvbikgKiBhbGlnbmVkUG9zaXRpb24ueCArIGNvcyggc2VsZlVuaWZvcm0ucm90YXRpb24gKSAqIGFsaWduZWRQb3NpdGlvbi55O1xuICAgICAgdmFyIHJvdGF0ZWRQb3NpdGlvbj12ZWMyPGYzMj4ocm90YXRlZFBvc2l0aW9uWCxyb3RhdGVkUG9zaXRpb25ZKTtcbiAgICAgIGxldCBuZXdQb2ludCA9bXZQb3NpdGlvbi54eSsgcm90YXRlZFBvc2l0aW9uO1xuICAgICAgb3V0cHV0LnBvc2l0aW9uID0gc3lzdGVtVW5pZm9ybS5wcm9qZWN0aW9uTWF0cml4ICogdmVjNDxmMzI+KG5ld1BvaW50LngsbmV3UG9pbnQueSxtdlBvc2l0aW9uLnosbXZQb3NpdGlvbi53KTtcbiAgICAgIHJldHVybiBvdXRwdXQ7XG4gIH1cbiAgYDtcbn1cbiIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGJsZW5kRnJhZyhkZWZpbmVzKSB7XHJcblx0cmV0dXJuIGBcclxuICAgIHN0cnVjdCBGcmFnSW5wdXQge1xyXG4gICAgICAgIEBsb2NhdGlvbigwKSB1djogdmVjMjxmMzI+LFxyXG4gICAgfTtcclxuICAgIEBncm91cCgwKSBAYmluZGluZyh7e3REaWZmdXNlQmluZGluZ319KSB2YXIgdERpZmZ1c2U6IHRleHR1cmVfMmQ8ZjMyPjtcclxuICAgIEBncm91cCgwKSBAYmluZGluZyh7e2Jhc2VDb2xvclRleHR1cmVCaW5kaW5nfX0pIHZhciBiYXNlQ29sb3JUZXh0dXJlOiB0ZXh0dXJlXzJkPGYzMj47XHJcbiAgICBAZ3JvdXAoMCkgQGJpbmRpbmcoe3t0U2FtcGxlckJpbmRpbmd9fSkgdmFyIHRTYW1wbGVyOiBzYW1wbGVyO1xyXG4gICAgQGZyYWdtZW50XHJcbiAgICBmbiBtYWluKGlucHV0OkZyYWdJbnB1dCkgLT4gQGxvY2F0aW9uKDApIHZlYzQ8ZjMyPiB7XHJcbiAgICAgICAgbGV0IHBvc3RDb2xvcjp2ZWM0PGYzMj4gPSB0ZXh0dXJlU2FtcGxlKHREaWZmdXNlLCB0U2FtcGxlciwgaW5wdXQudXYpO1xyXG4gICAgICAgIGxldCBiYXNlQ29sb3I6dmVjNDxmMzI+ID0gdGV4dHVyZVNhbXBsZShiYXNlQ29sb3JUZXh0dXJlLCB0U2FtcGxlciwgaW5wdXQudXYpO1xyXG4gICAgICByZXR1cm4gYmFzZUNvbG9yK3Bvc3RDb2xvcjtcclxuICAgIH0gICBcclxuICAgIGA7XHJcbn1cclxuIiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gQmx1cihkZWZpbmVzKSB7XHJcblx0cmV0dXJuIGBcclxuICAgIHN0cnVjdCBGcmFnSW5wdXQge1xyXG4gICAgICAgIEBsb2NhdGlvbigwKSB1djogdmVjMjxmMzI+LFxyXG4gICAgfVxyXG4gICAgc3RydWN0IEJsdXJVbmlmb3JtcyB7XHJcbiAgICAgICAgZGlyZWN0aW9uOnZlYzI8ZjMyPixcclxuICAgIH1cclxuICAgIGZuIGdhdXNzaWFuUGRmKHg6ZjMyLCBzaWdtYTpmMzIpLT5mMzIge1xyXG4gICAgICAgIHJldHVybiAwLjM5ODk0ICogZXhwKCAtMC41ICogeCAqIHgvKCBzaWdtYSAqIHNpZ21hKSkvc2lnbWE7XHJcbiAgICB9XHJcbiAgICBAZ3JvdXAoMCkgQGJpbmRpbmcoMCkgIHZhcjx1bmlmb3JtPiBibHVyVW5pZm9ybXMgOiBCbHVyVW5pZm9ybXM7XHJcbiAgICBAZ3JvdXAoMCkgQGJpbmRpbmcoe3t0RGlmZnVzZUJpbmRpbmd9fSkgdmFyIHREaWZmdXNlOiB0ZXh0dXJlXzJkPGYzMj47XHJcbiAgICBAZ3JvdXAoMCkgQGJpbmRpbmcoe3t0U2FtcGxlckJpbmRpbmd9fSkgdmFyIHRTYW1wbGVyOiBzYW1wbGVyO1xyXG4gICAgQGZyYWdtZW50XHJcbiAgICBmbiBtYWluKGlucHV0OkZyYWdJbnB1dCkgLT4gQGxvY2F0aW9uKDApIHZlYzQ8ZjMyPiB7XHJcbiAgICAgICAgbGV0IGludlNpemU6dmVjMjxmMzI+ID0gdmVjMjxmMzI+KDEuMCwxLjApIC8gdmVjMjxmMzI+KHRleHR1cmVEaW1lbnNpb25zKHREaWZmdXNlKSk7XHJcbiAgICAgICAgbGV0IGZTaWdtYTpmMzIgPWYzMigke2RlZmluZXMuU0lHTUF9KTtcclxuICAgICAgICB2YXIgd2VpZ2h0U3VtOmYzMiA9IGdhdXNzaWFuUGRmKDAuMCwgZlNpZ21hKTtcclxuICAgICAgICBsZXQgYmFzZUNvbG9yPXRleHR1cmVTYW1wbGUodERpZmZ1c2UsIHRTYW1wbGVyLCBpbnB1dC51dik7XHJcbiAgICAgICAgdmFyIGRpZmZ1c2VTdW06dmVjMzxmMzI+ID0gYmFzZUNvbG9yLnJnYiAqIHdlaWdodFN1bTtcclxuICAgICAgICBsZXQgdXZPZmZzZXQ6dmVjMjxmMzI+ID0gYmx1clVuaWZvcm1zLmRpcmVjdGlvbiAqIGludlNpemU7XHJcbiAgICAgICAgZm9yKCB2YXIgaSA6IHUzMiA9IDE7IGkgPCAke2RlZmluZXMuS0VSTkVMX1JBRElVU307aSA9IGkgKyAxICkge1xyXG4gICAgICAgICAgICBsZXQgeDpmMzIgPSBmMzIoaSk7XHJcbiAgICAgICAgICAgIGxldCB3OmYzMiA9IGdhdXNzaWFuUGRmKHgsIGZTaWdtYSk7XHJcbiAgICAgICAgICAgIGxldCBzYW1wbGUxOnZlYzM8ZjMyPj10ZXh0dXJlU2FtcGxlKHREaWZmdXNlLCB0U2FtcGxlciwgaW5wdXQudXYrIHV2T2Zmc2V0KngpLnJnYjtcclxuICAgICAgICAgICAgbGV0IHNhbXBsZTI6dmVjMzxmMzI+PXRleHR1cmVTYW1wbGUodERpZmZ1c2UsIHRTYW1wbGVyLCBpbnB1dC51di0gdXZPZmZzZXQqeCkucmdiO1xyXG4gICAgICAgICAgICBkaWZmdXNlU3VtID1kaWZmdXNlU3VtKyAoc2FtcGxlMitzYW1wbGUyKSogdztcclxuICAgICAgICAgICAgd2VpZ2h0U3VtICs9IDIuMCAqIHc7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGRpZmZ1c2VTdW0vPXdlaWdodFN1bTtcclxuICAgICAgcmV0dXJuIHZlYzQ8ZjMyPihkaWZmdXNlU3VtLGJhc2VDb2xvci5hKTtcclxuICAgIH1cclxuICBgO1xyXG59XHJcbiIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIEx1bWlub3NpdHlIaWdoKGRlZmluZXMpIHtcclxuXHRyZXR1cm4gYFxyXG4gICAgc3RydWN0IEx1bWlub3NpdHlVbmlmb3Jtc3tcclxuICAgICAgICBsdW1pbm9zaXR5VGhyZXNob2xkOmYzMixcclxuICAgICAgICBzbW9vdGhXaWR0aDpmMzIsXHJcbiAgICAgICAgZGVmYXVsdENvbG9yOnZlYzM8ZjMyPixcclxuICAgICAgICBkZWZhdWx0T3BhY2l0eTpmMzIsXHJcbiAgICB9XHJcbiAgICBzdHJ1Y3QgRnJhZ0lucHV0IHtcclxuICAgICAgICBAbG9jYXRpb24oMCkgdXY6IHZlYzI8ZjMyPixcclxuICAgIH07XHJcbiAgICBAZ3JvdXAoMCkgQGJpbmRpbmcoMCkgIHZhcjx1bmlmb3JtPiBsdW1pbm9zaXR5VW5pZm9ybXMgOiBMdW1pbm9zaXR5VW5pZm9ybXM7XHJcbiAgICBAZ3JvdXAoMCkgQGJpbmRpbmcoe3t0RGlmZnVzZUJpbmRpbmd9fSkgdmFyIHREaWZmdXNlOiB0ZXh0dXJlXzJkPGYzMj47XHJcbiAgICBAZ3JvdXAoMCkgQGJpbmRpbmcoe3t0U2FtcGxlckJpbmRpbmd9fSkgdmFyIHRTYW1wbGVyOiBzYW1wbGVyO1xyXG4gICAgQGZyYWdtZW50XHJcbiAgICBmbiBtYWluKGlucHV0OkZyYWdJbnB1dCktPiBAbG9jYXRpb24oMCkgdmVjNDxmMzI+IHtcclxuXHJcbiAgICAgICAgbGV0IHRleGVsOnZlYzQ8ZjMyPiA9IHRleHR1cmVTYW1wbGUodERpZmZ1c2UsIHRTYW1wbGVyLCBpbnB1dC51dik7XHJcblxyXG4gICAgICAgIGxldCBsdW1hOnZlYzM8ZjMyPiA9IHZlYzM8ZjMyPiggMC4yOTksMC41ODcsMC4xMTQgKTtcclxuXHJcbiAgICAgICAgbGV0IHY6ZjMyID0gZG90KCB0ZXhlbC54eXosIGx1bWEgKTtcclxuXHJcbiAgICAgICAgbGV0IG91dHB1dENvbG9yOnZlYzQ8ZjMyPiA9IHZlYzQ8ZjMyPiggbHVtaW5vc2l0eVVuaWZvcm1zLmRlZmF1bHRDb2xvci5yZ2IsIGx1bWlub3NpdHlVbmlmb3Jtcy5kZWZhdWx0T3BhY2l0eSApO1xyXG5cclxuICAgICAgICBsZXQgYWxwaGE6ZjMyID0gc21vb3Roc3RlcCggbHVtaW5vc2l0eVVuaWZvcm1zLmx1bWlub3NpdHlUaHJlc2hvbGQsIGx1bWlub3NpdHlVbmlmb3Jtcy5sdW1pbm9zaXR5VGhyZXNob2xkICsgbHVtaW5vc2l0eVVuaWZvcm1zLnNtb290aFdpZHRoLCB2ICk7XHJcblxyXG4gICAgICAgcmV0dXJuIG1peCggb3V0cHV0Q29sb3IsIHRleGVsLCBhbHBoYSApO1xyXG4gICAgfVxyXG4gICAgYDtcclxufVxyXG4iLCJpbXBvcnQgeyB3Z3NsUGFyc2VEZWZpbmVzIH0gZnJvbSBcIi4uLy4uL1dnc2xQcmVwcm9jZXNzb3JcIjtcblxuZXhwb3J0IGZ1bmN0aW9uIEZyYWdJbnB1dChkZWZpbmVzKSB7XG5cdHJldHVybiB3Z3NsUGFyc2VEZWZpbmVzYFxuICAgIHN0cnVjdCBGcmFnSW5wdXQge1xuICAgICAgQGJ1aWx0aW4oZnJvbnRfZmFjaW5nKSBmcm9udEZhY2luZzogYm9vbCxcbiAgICAgIEBsb2NhdGlvbigwKSB3b3JsZFBvczp2ZWMzPGYzMj4sXG4gICAgICBAbG9jYXRpb24oMSkgbm9ybWFsOnZlYzM8ZjMyPixcbiAgICAgIEBsb2NhdGlvbigyKSB1djp2ZWMyPGYzMj4sXG4gICAgICBAbG9jYXRpb24oMykgdmlldzogdmVjMzxmMzI+LCAvLyBWZWN0b3IgZnJvbSB2ZXJ0ZXggdG8gY2FtZXJhLlxuICAgICAgQGxvY2F0aW9uKDQpIGNvbG9yOiB2ZWM0PGYzMj4sXG4gICAgICBAbG9jYXRpb24oNSkgdmlld1Bvc2l0aW9uOiB2ZWMzPGYzMj4sXG4gIH0gXG4gIGA7XG59XG4iLCJleHBvcnQgZnVuY3Rpb24gUG9pbnRGcmFnSW5wdXQoZGVmaW5lcykge1xuXHRyZXR1cm4gYFxuICAgICAgc3RydWN0IFBvaW50RnJhZ0lucHV0e1xuICAgICAgICBAbG9jYXRpb24oMCkgdXY6dmVjMjxmMzI+LFxuICAgICAgICBAbG9jYXRpb24oMSkgY29sb3I6IHZlYzQ8ZjMyPixcbiAgICAgICAgQGxvY2F0aW9uKDIpIHNpemU6IGYzMixcbiAgICAgIH1cbiAgICBgO1xufVxuIiwiaW1wb3J0IHsgd2dzbFBhcnNlRGVmaW5lcyB9IGZyb20gXCIuLi8uLi9XZ3NsUHJlcHJvY2Vzc29yXCI7XG5cbmV4cG9ydCBmdW5jdGlvbiBQb2ludFZlcnRJbnB1dChkZWZpbmVzKSB7XG5cdHJldHVybiB3Z3NsUGFyc2VEZWZpbmVzYFxuICBzdHJ1Y3QgUG9pbnRWZXJ0SW5wdXQge1xuICAgIEBsb2NhdGlvbigke2RlZmluZXMucG9zaXRpb25Mb2NhdGlvbn0pIHBvc2l0aW9uOiB2ZWMzPGYzMj4sICAgICAgIFxuICAgIEBsb2NhdGlvbigke2RlZmluZXMudXZMb2NhdGlvbn0pIHV2OiB2ZWMyPGYzMj4sXG4gICAgI2lmJHtkZWZpbmVzLkhBU19DT0xPUn0gXG4gICAgICAgIEBsb2NhdGlvbigke2RlZmluZXMuY29sb3JMb2NhdGlvbn0pIGNvbG9yOiB2ZWMzPGYzMj4sXG4gICAgI2VuZGlmXG4gICAgI2lmICR7ZGVmaW5lcy5IQVNfU0laRX1cbiAgICAgICAgQGxvY2F0aW9uKCR7ZGVmaW5lcy5zaXplTG9jYXRpb259KSBzaXplOiBmMzIsXG4gICAgI2VuZGlmXG4gICAgI2lmICR7ZGVmaW5lcy5VU0VfSU5TVEFOQ0V9XG4gICAgICAgIEBidWlsdGluKGluc3RhbmNlX2luZGV4KSBpbnN0YW5jZUlkeCA6IHUzMlxuICAgICNlbmRpZlxuICB9XG4gIGA7XG59XG4iLCJleHBvcnQgZnVuY3Rpb24gUG9pbnRWZXJ0T3V0cHV0KGRlZmluZXMpIHtcblx0cmV0dXJuIGBcbiAgICBzdHJ1Y3QgUG9pbnRWZXJ0T3V0cHV0e1xuICAgICAgICBAYnVpbHRpbihwb3NpdGlvbikgcG9zaXRpb246dmVjNDxmMzI+LFxuICAgICAgICBAbG9jYXRpb24oMCkgdXY6dmVjMjxmMzI+LFxuICAgICAgICBAbG9jYXRpb24oMSkgY29sb3I6IHZlYzQ8ZjMyPixcbiAgICAgICAgQGxvY2F0aW9uKDIpIHNpemU6IGYzMixcbiAgICB9XG4gICBgO1xufVxuIiwiaW1wb3J0IHsgd2dzbFBhcnNlRGVmaW5lcyB9IGZyb20gXCIuLi8uLi9XZ3NsUHJlcHJvY2Vzc29yXCI7XG5cbmV4cG9ydCBmdW5jdGlvbiBWZXJ0ZXhJbnB1dChkZWZpbmVzKSB7XG5cdHJldHVybiB3Z3NsUGFyc2VEZWZpbmVzYFxuICAgICAgICBzdHJ1Y3QgVmVydGV4SW5wdXQge1xuICAgICAgICAgICAgQGxvY2F0aW9uKCR7ZGVmaW5lcy5wb3NpdGlvbkxvY2F0aW9ufSkgcG9zaXRpb246IHZlYzM8ZjMyPiwgICBcbiAgICAgICAgICAgICNpZiR7ZGVmaW5lcy5IQVNfTk9STUFMfSAgXG4gICAgICAgICAgICAgICAgQGxvY2F0aW9uKCR7ZGVmaW5lcy5ub3JtYWxMb2NhdGlvbn0pIG5vcm1hbDogdmVjMzxmMzI+LFxuICAgICAgICAgICAgI2VuZGlmXG4gICAgICAgICAgICAjaWYke2RlZmluZXMuSEFTX0NPTE9SfSBcbiAgICAgICAgICAgICAgICBAbG9jYXRpb24oJHtkZWZpbmVzLmNvbG9yTG9jYXRpb259KSBjb2xvcjogdmVjMzxmMzI+LFxuICAgICAgICAgICAgI2VuZGlmXG4gICAgICAgICAgICAjaWYgJHtkZWZpbmVzLkhBU19VVn1cbiAgICAgICAgICAgICAgICBAbG9jYXRpb24oJHtkZWZpbmVzLnV2TG9jYXRpb259KSB1djogdmVjMjxmMzI+LFxuICAgICAgICAgICAgI2VuZGlmXG4gICAgICAgICAgICAjaWYke2RlZmluZXMuSEFTX1NLSU59IFxuICAgICAgICAgICAgICAgIEBsb2NhdGlvbigke2RlZmluZXMuam9pbnQwTG9jYXRpb259KSBqb2ludDA6dmVjNDxmMzI+LFxuICAgICAgICAgICAgICAgIEBsb2NhdGlvbigke2RlZmluZXMud2VpZ2h0MExvY2F0aW9ufSkgd2VpZ2h0MDp2ZWM0PGYzMj4sXG4gICAgICAgICAgICAjZW5kaWZcbiAgICAgICAgICAgICNpZiAke2RlZmluZXMuVVNFX0lOU1RBTkNFfVxuICAgICAgICAgICAgICAgIEBidWlsdGluKGluc3RhbmNlX2luZGV4KSBpbnN0YW5jZUlkeCA6IHUzMlxuICAgICAgICAgICAgI2VuZGlmXG4gICAgICAgIH1cbiAgIGA7XG59XG4iLCJpbXBvcnQgeyB3Z3NsUGFyc2VEZWZpbmVzIH0gZnJvbSBcIi4uLy4uL1dnc2xQcmVwcm9jZXNzb3JcIjtcblxuZXhwb3J0IGZ1bmN0aW9uIFZlcnRleE91dHB1dChkZWZpbmVzKSB7XG5cdHJldHVybiB3Z3NsUGFyc2VEZWZpbmVzYFxuICAgIHN0cnVjdCBWZXJ0ZXhPdXRwdXQge1xuICAgICAgICBAYnVpbHRpbihwb3NpdGlvbikgcG9zaXRpb246dmVjNDxmMzI+LFxuICAgICAgICBAbG9jYXRpb24oMCkgd29ybGRQb3M6dmVjMzxmMzI+LFxuICAgICAgICBAbG9jYXRpb24oMSkgbm9ybWFsOnZlYzM8ZjMyPixcbiAgICAgICAgQGxvY2F0aW9uKDIpIHV2OnZlYzI8ZjMyPixcbiAgICAgICAgQGxvY2F0aW9uKDMpIHZpZXc6IHZlYzM8ZjMyPiwgLy8gVmVjdG9yIGZyb20gdmVydGV4IHRvIGNhbWVyYS5cbiAgICAgICAgQGxvY2F0aW9uKDQpIGNvbG9yOiB2ZWM0PGYzMj4sXG4gICAgICAgIEBsb2NhdGlvbig1KSB2aWV3UG9zaXRpb246IHZlYzM8ZjMyPixcbiAgICB9IFxuICAgIGA7XG59XG4iLCJpbXBvcnQgeyB3Z3NsUGFyc2VEZWZpbmVzIH0gZnJvbSBcIi4uLy4uL1dnc2xQcmVwcm9jZXNzb3JcIjtcblxuZXhwb3J0IGZ1bmN0aW9uIFN5c3RlbVVuaWZvcm0oZGVmaW5lcykge1xuXHRyZXR1cm4gd2dzbFBhcnNlRGVmaW5lc2BcbiAgICAgIHN0cnVjdCBTeXN0ZW1Vbmlmb3JtIHtcbiAgICAgICAgICBwcm9qZWN0aW9uTWF0cml4OiBtYXQ0eDQ8ZjMyPixcbiAgICAgICAgICB2aWV3TWF0cml4OiBtYXQ0eDQ8ZjMyPixcbiAgICAgICAgICBpbnZlcnNlVmlld01hdHJpeDogbWF0NHg0PGYzMj4sXG4gICAgICAgICAgY2FtZXJhUG9zaXRpb246IHZlYzM8ZjMyPixcbiAgICAgIH07IFxuICBgO1xufVxuIiwiaW1wb3J0IHsgd2dzbFBhcnNlRGVmaW5lcyB9IGZyb20gXCIuLi8uLi9XZ3NsUHJlcHJvY2Vzc29yXCI7XG5cbmV4cG9ydCBmdW5jdGlvbiBUZXh0dXJlQW5kU2FtcGxlckRlZmluZShkZWZpbmVzKSB7XG5cdHJldHVybiB3Z3NsUGFyc2VEZWZpbmVzYFxuICAgICNpZiAke2RlZmluZXMuVVNFX0lCTH1cbiAgICAgIEBncm91cCgwKSBAYmluZGluZygke2RlZmluZXMuc3BlY3VsYXJFbnZUZXh0dXJlQmluZGluZ30pIHZhciBzcGVjdWxhckVudlRleHR1cmU6IHRleHR1cmVfY3ViZTxmMzI+O1xuICAgICAgQGdyb3VwKDApIEBiaW5kaW5nKCR7ZGVmaW5lcy5zcGVjdWxhckVudlNhbXBsZXJCaW5kaW5nfSkgdmFyIHNwZWN1bGFyRW52U2FtcGxlcjogc2FtcGxlcjtcbiAgICAjZW5kaWZcbiAgICAjaWYgJHtkZWZpbmVzLlVTRV9URVhUVVJFfVxuICAgICAgQGdyb3VwKDApIEBiaW5kaW5nKCR7ZGVmaW5lcy5iYXNlQ29sb3JUZXh0dXJlQmluZGluZ30pIHZhciBiYXNlQ29sb3JUZXh0dXJlOiB0ZXh0dXJlXzJkPGYzMj47XG4gICAgICBAZ3JvdXAoMCkgQGJpbmRpbmcoJHtkZWZpbmVzLmJhc2VDb2xvclNhbXBsZXJCaW5kaW5nfSkgdmFyIGJhc2VDb2xvclNhbXBsZXI6IHNhbXBsZXI7XG4gICAgI2VuZGlmXG4gICAgLy8gbm9ybWFsIG1hcFxuICAgICNpZiAke2RlZmluZXMuVVNFX05PUk1BTFRFWFRVUkV9XG4gICAgICBAZ3JvdXAoMCkgQGJpbmRpbmcoJHtkZWZpbmVzLm5vcm1hbFRleHR1cmVCaW5kaW5nfSkgdmFyIG5vcm1hbFRleHR1cmU6IHRleHR1cmVfMmQ8ZjMyPjtcbiAgICAgIEBncm91cCgwKSBAYmluZGluZygke2RlZmluZXMubm9ybWFsU2FtcGxlckJpbmRpbmd9KSB2YXIgbm9ybWFsU2FtcGxlcjogc2FtcGxlcjtcbiAgICAjZW5kaWZcbiAgICAvLyBlbW1pc3ZlIG1hcFxuICAgICNpZiAke2RlZmluZXMuVVNFX0VNSVNTSVZFVEVYVFVSRX1cbiAgICAgIEBncm91cCgwKSBAYmluZGluZygke2RlZmluZXMuZW1pc3NpdmVUZXh0dXJlQmluZGluZ30pIHZhciBlbWlzc2l2ZVRleHR1cmU6IHRleHR1cmVfMmQ8ZjMyPjtcbiAgICAgIEBncm91cCgwKSBAYmluZGluZygke2RlZmluZXMuZW1pc3NpdmVTYW1wbGVyQmluZGluZ30pIHZhciBlbWlzc2l2ZVNhbXBsZXI6IHNhbXBsZXI7XG4gICAgI2VuZGlmXG5cbiAgICAvLyBtZXRhbCByb3VnaG5lc3NcbiAgICAjaWYgJHtkZWZpbmVzLlVTRV9NRVRBTE5FU1NURVhUVVJFfVxuICAgICAgQGdyb3VwKDApIEBiaW5kaW5nKCR7ZGVmaW5lcy5tZXRhbG5lc3NSb3VnaG5lc3NUZXh0dXJlQmluZGluZ30pIHZhciBtZXRhbG5lc3NSb3VnaG5lc3NUZXh0dXJlOiB0ZXh0dXJlXzJkPGYzMj47XG4gICAgICBAZ3JvdXAoMCkgQGJpbmRpbmcoJHtkZWZpbmVzLm1ldGFsbmVzc1JvdWdobmVzc1NhbXBsZXJCaW5kaW5nfSkgdmFyIG1ldGFsbmVzc1JvdWdobmVzc1NhbXBsZXI6IHNhbXBsZXI7XG4gICAgI2VuZGlmXG4gICAgLy8gb2NjbHVzaW9uIHRleHR1cmVcbiAgICAjaWYgJHtkZWZpbmVzLlVTRV9BT1RFWFRVUkV9XG4gICAgICBAZ3JvdXAoMCkgQGJpbmRpbmcoJHtkZWZpbmVzLmFvVGV4dHVyZUJpbmRpbmd9KSB2YXIgYW9UZXh0dXJlOiB0ZXh0dXJlXzJkPGYzMj47XG4gICAgICBAZ3JvdXAoMCkgQGJpbmRpbmcoJHtkZWZpbmVzLmFvU2FtcGxlckJpbmRpbmd9KSB2YXIgYW9TYW1wbGVyOiBzYW1wbGVyO1xuICAgICNlbmRpZlxuICAgICNpZiAke2RlZmluZXMuVVNFX05PUk1BTFRFWFRVUkV9XG4gICAgICAjaW5jbHVkZSA8Z2V0VEJOPlxuICAgICAgI2luY2x1ZGUgPGdldE5vcm1hbEJ5Tm9ybWFsVGV4dHVyZT5cbiAgICAjZWxzZVxuICAgICAgI2luY2x1ZGUgPGdldE5vcm1hbD5cbiAgICAjZW5kaWZcbiAgYDtcbn1cbiIsImltcG9ydCB7IHdnc2xQYXJzZURlZmluZXMgfSBmcm9tIFwiLi4vLi4vV2dzbFByZXByb2Nlc3NvclwiO1xyXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBlbnZpcm9ubWVudChkZWZpbmVzKSB7XHJcbiAgcmV0dXJuIHdnc2xQYXJzZURlZmluZXNgXHJcbiAgICNpZiAke2RlZmluZXMuRU5WVEVYVFVSRV9UWVBFX0NVQkVfVVZ9XHJcbiAgICAgICAgY29uc3QgY3ViZVVWX21pbk1pcExldmVsOmYzMj0gNC4wO1xyXG4gICAgICAgIGNvbnN0IGN1YmVVVl9taW5UaWxlU2l6ZTpmMzI9IDE2LjA7XHJcbiAgICAgICAgY29uc3QgQ1VCRVVWX01BWF9NSVA6ZjMyPTYuMDtcclxuICAgICAgICBjb25zdCBDVUJFVVZfVEVYRUxfV0lEVEg6ZjMyPTEuMC8yNTYuMDtcclxuICAgICAgICBjb25zdCBDVUJFVVZfVEVYRUxfSEVJR0hUOmYzMj0xLjAvMjU2LjA7XHJcbiAgICAgICAgZm4gZ2V0RmFjZShkaXJlY3Rpb246dmVjMzxmMzI+ICktPmYzMiB7XHJcbiAgICAgICAgICAgIGxldCBhYnNEaXJlY3Rpb246dmVjMzxmMzI+ID0gYWJzKCBkaXJlY3Rpb24gKTtcclxuICAgICAgICAgICAgdmFyIGZhY2U6ZjMyID0gLSAxLjA7XHJcbiAgICAgICAgICAgIGlmICggYWJzRGlyZWN0aW9uLnggPiBhYnNEaXJlY3Rpb24ueiApIHtcclxuICAgICAgICAgICAgICAgIGlmICggYWJzRGlyZWN0aW9uLnggPiBhYnNEaXJlY3Rpb24ueSApe1xyXG4gICAgICAgICAgICAgICAgICAgIGZhY2UgPXNlbGVjdCgzLjAsMC4wLGRpcmVjdGlvbi54ID4gMC4wKTtcclxuICAgICAgICAgICAgICAgIH1lbHNle1xyXG4gICAgICAgICAgICAgICAgICAgIGZhY2UgPXNlbGVjdCg0LjAsMS4wLGRpcmVjdGlvbi55ID4gMC4wKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICAgICAgaWYgKCBhYnNEaXJlY3Rpb24ueiA+IGFic0RpcmVjdGlvbi55ICl7XHJcbiAgICAgICAgICAgICAgICAgICAgZmFjZSA9c2VsZWN0KDUuMCwyLjAsZGlyZWN0aW9uLnogPiAwLjApO1xyXG4gICAgICAgICAgICAgICAgfWVsc2V7XHJcbiAgICAgICAgICAgICAgICAgICAgZmFjZSA9c2VsZWN0KDQuMCwxLjAsZGlyZWN0aW9uLnkgPiAwLjApO1xyXG4gICAgICAgICAgICAgICAgfSAgICAgICBcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm4gZmFjZTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZm4gZ2V0VVYoIGRpcmVjdGlvbjp2ZWMzPGYzMj4sIGZhY2U6ZjMyICktPnZlYzI8ZjMyPiB7XHJcbiAgICAgICAgICAgIHZhciB1djp2ZWMyPGYzMj47XHJcbiAgICAgICAgICAgIGlmICggZmFjZSA9PSAwLjAgKSB7XHJcbiAgICAgICAgICAgICAgICB1diA9IHZlYzI8ZjMyPiggZGlyZWN0aW9uLnosIGRpcmVjdGlvbi55ICkgLyBhYnMoIGRpcmVjdGlvbi54ICk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSBpZiAoIGZhY2UgPT0gMS4wICkge1xyXG4gICAgICAgICAgICAgICAgdXYgPSB2ZWMyPGYzMj4oIC0gZGlyZWN0aW9uLngsIC0gZGlyZWN0aW9uLnogKSAvIGFicyggZGlyZWN0aW9uLnkgKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIGlmICggZmFjZSA9PSAyLjAgKSB7XHJcbiAgICAgICAgICAgICAgICB1diA9IHZlYzI8ZjMyPiggLSBkaXJlY3Rpb24ueCwgZGlyZWN0aW9uLnkgKSAvIGFicyggZGlyZWN0aW9uLnogKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIGlmICggZmFjZSA9PSAzLjAgKSB7XHJcbiAgICAgICAgICAgICAgICB1diA9IHZlYzI8ZjMyPiggLSBkaXJlY3Rpb24ueiwgZGlyZWN0aW9uLnkgKSAvIGFicyggZGlyZWN0aW9uLnggKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIGlmICggZmFjZSA9PSA0LjAgKSB7XHJcbiAgICAgICAgICAgICAgICB1diA9IHZlYzI8ZjMyPiggLSBkaXJlY3Rpb24ueCwgZGlyZWN0aW9uLnogKSAvIGFicyggZGlyZWN0aW9uLnkgKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIHV2ID0gdmVjMjxmMzI+KCBkaXJlY3Rpb24ueCwgZGlyZWN0aW9uLnkgKSAvIGFicyggZGlyZWN0aW9uLnogKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm4gMC41ICogKCB1diArIDEuMCApO1xyXG4gICAgICAgIH1cclxuICAgICAgICBmbiBiaWxpbmVhckN1YmVVVihlbnZUZXh0dXJlOnRleHR1cmVfY3ViZTxmMzI+LGJhc2VTYW1wbGVyOnNhbXBsZXIsZGlyZWN0aW9uOnZlYzM8ZjMyPiwgbWlwSW50OmYzMiApLT52ZWMzPGYzMj4ge1xyXG4gICAgICAgICAgICB2YXIgZmFjZTpmMzIgPSBnZXRGYWNlKCBkaXJlY3Rpb24gKTtcclxuICAgICAgICAgICAgbGV0IGZpbHRlckludDpmMzIgPSBtYXgoIGN1YmVVVl9taW5NaXBMZXZlbCAtIG1pcEludCwgMC4wICk7XHJcbiAgICAgICAgICAgIGxldCB0ZW1wTWlwSW50ID0gbWF4KCBtaXBJbnQsIGN1YmVVVl9taW5NaXBMZXZlbCApO1xyXG4gICAgICAgICAgICBsZXQgZmFjZVNpemU6ZjMyID0gZXhwMiggdGVtcE1pcEludCApO1xyXG4gICAgICAgICAgICB2YXIgdXY6dmVjMjxmMzI+ID0gZ2V0VVYoIGRpcmVjdGlvbiwgZmFjZSApICogKCBmYWNlU2l6ZSAtIDIuMCApICsgMS4wO1xyXG4gICAgICAgICAgICBpZiAoIGZhY2UgPiAyLjAgKSB7XHJcbiAgICAgICAgICAgICAgICB1di55ICs9IGZhY2VTaXplO1xyXG4gICAgICAgICAgICAgICAgZmFjZSAtPSAzLjA7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgdXYueCArPSBmYWNlICogZmFjZVNpemU7XHJcbiAgICAgICAgICAgIHV2LnggKz0gZmlsdGVySW50ICogMy4wICogY3ViZVVWX21pblRpbGVTaXplO1xyXG4gICAgICAgICAgICB1di55ICs9IDQuMCAqICggZXhwMiggQ1VCRVVWX01BWF9NSVAgKSAtIGZhY2VTaXplICk7XHJcbiAgICAgICAgICAgIHV2LnggKj0gQ1VCRVVWX1RFWEVMX1dJRFRIO1xyXG4gICAgICAgICAgICB1di55ICo9IENVQkVVVl9URVhFTF9IRUlHSFQ7XHJcbiAgICAgICAgICAgIHJldHVybiB0ZXh0dXJlU2FtcGxlKGVudlRleHR1cmUsYmFzZVNhbXBsZXIsZGlyZWN0aW9uKS5yZ2I7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGNvbnN0IGN1YmVVVl9yMDpmMzI9IDEuMDtcclxuICAgICAgICBjb25zdCBjdWJlVVZfdjA6ZjMyPSAwLjMzOTtcclxuICAgICAgICBjb25zdCBjdWJlVVZfbTA6ZjMyPSAtIDIuMDtcclxuICAgICAgICBjb25zdCBjdWJlVVZfcjE6ZjMyPSAwLjg7XHJcbiAgICAgICAgY29uc3QgY3ViZVVWX3YxOmYzMj0gMC4yNzY7XHJcbiAgICAgICAgY29uc3QgY3ViZVVWX20xOmYzMj0gLSAxLjA7XHJcbiAgICAgICAgY29uc3QgY3ViZVVWX3I0OmYzMj0gMC40O1xyXG4gICAgICAgIGNvbnN0IGN1YmVVVl92NDpmMzI9IDAuMDQ2O1xyXG4gICAgICAgIGNvbnN0IGN1YmVVVl9tNDpmMzI9IDIuMDtcclxuICAgICAgICBjb25zdCBjdWJlVVZfcjU6ZjMyPSAwLjMwNTtcclxuICAgICAgICBjb25zdCBjdWJlVVZfdjU6ZjMyPSAwLjAxNjtcclxuICAgICAgICBjb25zdCBjdWJlVVZfbTU6ZjMyPSAzLjA7XHJcbiAgICAgICAgY29uc3QgY3ViZVVWX3I2OmYzMj0gMC4yMTtcclxuICAgICAgICBjb25zdCBjdWJlVVZfdjY6ZjMyPSAwLjAwMzg7XHJcbiAgICAgICAgY29uc3QgY3ViZVVWX202OmYzMj0gNC4wO1xyXG4gICAgICAgIGZuIHJvdWdobmVzc1RvTWlwKCByb3VnaG5lc3M6ZjMyKS0+ZjMyIHtcclxuICAgICAgICAgICAgdmFyIG1pcDpmMzIgPSAwLjA7XHJcbiAgICAgICAgICAgIGlmICggcm91Z2huZXNzID49IGN1YmVVVl9yMSApIHtcclxuICAgICAgICAgICAgICAgIG1pcCA9ICggY3ViZVVWX3IwIC0gcm91Z2huZXNzICkgKiAoIGN1YmVVVl9tMSAtIGN1YmVVVl9tMCApIC8gKCBjdWJlVVZfcjAgLSBjdWJlVVZfcjEgKSArIGN1YmVVVl9tMDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIGlmICggcm91Z2huZXNzID49IGN1YmVVVl9yNCApIHtcclxuICAgICAgICAgICAgICAgIG1pcCA9ICggY3ViZVVWX3IxIC0gcm91Z2huZXNzICkgKiAoIGN1YmVVVl9tNCAtIGN1YmVVVl9tMSApIC8gKCBjdWJlVVZfcjEgLSBjdWJlVVZfcjQgKSArIGN1YmVVVl9tMTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIGlmICggcm91Z2huZXNzID49IGN1YmVVVl9yNSApIHtcclxuICAgICAgICAgICAgICAgIG1pcCA9ICggY3ViZVVWX3I0IC0gcm91Z2huZXNzICkgKiAoIGN1YmVVVl9tNSAtIGN1YmVVVl9tNCApIC8gKCBjdWJlVVZfcjQgLSBjdWJlVVZfcjUgKSArIGN1YmVVVl9tNDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIGlmICggcm91Z2huZXNzID49IGN1YmVVVl9yNiApIHtcclxuICAgICAgICAgICAgICAgIG1pcCA9ICggY3ViZVVWX3I1IC0gcm91Z2huZXNzICkgKiAoIGN1YmVVVl9tNiAtIGN1YmVVVl9tNSApIC8gKCBjdWJlVVZfcjUgLSBjdWJlVVZfcjYgKSArIGN1YmVVVl9tNTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIG1pcCA9IC0gMi4wICogbG9nMiggMS4xNiAqIHJvdWdobmVzcyApO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybiBtaXA7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGZuIHRleHR1cmVDdWJlVVYoZW52VGV4dHVyZTp0ZXh0dXJlX2N1YmU8ZjMyPiwgYmFzZVNhbXBsZXI6c2FtcGxlcixzYW1wbGVEaXI6dmVjMzxmMzI+LHJvdWdobmVzczpmMzIgKS0+dmVjNDxmMzI+IHtcclxuICAgICAgICAgICAgbGV0IG1pcCA9IGNsYW1wKCByb3VnaG5lc3NUb01pcCggcm91Z2huZXNzICksIGN1YmVVVl9tMCwgQ1VCRVVWX01BWF9NSVAgKTtcclxuICAgICAgICAgICAgbGV0IG1pcEYgPSBmcmFjdCggbWlwICk7XHJcbiAgICAgICAgICAgIGxldCBtaXBJbnQgPSBmbG9vciggbWlwICk7XHJcbiAgICAgICAgICAgIGxldCBjb2xvcjA6dmVjMzxmMzI+ID0gYmlsaW5lYXJDdWJlVVYoIGVudlRleHR1cmUsYmFzZVNhbXBsZXIsc2FtcGxlRGlyLCBtaXBJbnQgKTtcclxuICAgICAgICAgICAgaWYgKCBtaXBGID09IDAuMCApIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiB2ZWM0PGYzMj4oY29sb3IwLCAxLjAgKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIGxldCBjb2xvcjE6dmVjMzxmMzI+ID0gYmlsaW5lYXJDdWJlVVYoIGVudlRleHR1cmUsYmFzZVNhbXBsZXIsIHNhbXBsZURpciwgbWlwSW50ICsgMS4wICk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdmVjNDxmMzI+KG1peCggY29sb3IwLCBjb2xvcjEsIG1pcEYgKSwgMS4wICk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICBcclxuICAgICAgICB9XHJcbiAgICNlbmRpZlxyXG4gICAjaWYgJHtkZWZpbmVzLlVTRV9FTlZURVhUVVJFfVxyXG4gICAgICAgIGZuIGdldElCTElycmFkaWFuY2UoIG5vcm1hbDp2ZWMzPGYzMj4sYmFzZVNhbXBsZXI6c2FtcGxlcix2aWV3TWF0cml4Om1hdDR4NDxmMzI+KS0+dmVjMzxmMzI+IHtcclxuICAgICAgICAgICAgI2lmICR7ZGVmaW5lcy5FTlZURVhUVVJFX1RZUEVfQ1VCRV9VVn1cclxuICAgICAgICAgICAgICAgIGxldCB3b3JsZE5vcm1hbDp2ZWMzPGYzMj4gPSBpbnZlcnNlVHJhbnNmb3JtRGlyZWN0aW9uKCBub3JtYWwsIHZpZXdNYXRyaXggKTtcclxuICAgICAgICAgICAgICAgIGxldCBlbnZUZXh0dXJlQ29sb3I6dmVjNDxmMzI+ID0gdGV4dHVyZUN1YmVVViggZW52VGV4dHVyZSxiYXNlU2FtcGxlciwgd29ybGROb3JtYWwsIDEuMCApO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIFBJICogZW52VGV4dHVyZUNvbG9yLnJnYiAqIG1hdGVyaWFsVW5pZm9ybS5lbnZUZXh0dXJlSW50ZW5zaXR5O1xyXG4gICAgICAgICAgICAjZWxzZVxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHZlYzM8ZjMyPiggMC4wICk7XHJcbiAgICAgICAgICAgICNlbmRpZlxyXG4gICAgICAgIH1cclxuICAgICAgICBmbiBnZXRJQkxSYWRpYW5jZSggdmlld0Rpcjp2ZWMzPGYzMj4sYmFzZVNhbXBsZXI6c2FtcGxlcix2aWV3TWF0cml4Om1hdDR4NDxmMzI+LG5vcm1hbDp2ZWMzPGYzMj4sIHJvdWdobmVzczpmMzIgKS0+dmVjMzxmMzI+IHtcclxuICAgICAgICAgICAgI2lmICR7ZGVmaW5lcy5FTlZURVhUVVJFX1RZUEVfQ1VCRV9VVn1cclxuICAgICAgICAgICAgICAgIHZhciByZWZsZWN0VmVjOnZlYzM8ZjMyPiA9IHJlZmxlY3QoIC0gdmlld0Rpciwgbm9ybWFsICk7XHJcbiAgICAgICAgICAgICAgICByZWZsZWN0VmVjID0gbm9ybWFsaXplKCBtaXgoIHJlZmxlY3RWZWMsIG5vcm1hbCwgcm91Z2huZXNzICogcm91Z2huZXNzKSApO1xyXG4gICAgICAgICAgICAgICAgcmVmbGVjdFZlYyA9IGludmVyc2VUcmFuc2Zvcm1EaXJlY3Rpb24oIHJlZmxlY3RWZWMsIHZpZXdNYXRyaXggKTtcclxuICAgICAgICAgICAgICAgIGxldCBlbnZUZXh0dXJlQ29sb3I6dmVjNDxmMzI+ID0gdGV4dHVyZUN1YmVVViggZW52VGV4dHVyZSxiYXNlU2FtcGxlciwgcmVmbGVjdFZlYywgcm91Z2huZXNzICk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gZW52VGV4dHVyZUNvbG9yLnJnYiAqIG1hdGVyaWFsVW5pZm9ybS5lbnZUZXh0dXJlSW50ZW5zaXR5O1xyXG4gICAgICAgICAgICAjZWxzZVxyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHZlYzM8ZjMyPiggMC4wICk7XHJcbiAgICAgICAgICAgICNlbmRpZlxyXG4gICAgICAgICAgICB9XHJcbiAgICAjZW5kaWZcclxuICAgYDtcclxufVxyXG4iLCJpbXBvcnQgeyB3Z3NsUGFyc2VEZWZpbmVzIH0gZnJvbSBcIi4uLy4uL1dnc2xQcmVwcm9jZXNzb3JcIjtcblxuZXhwb3J0IGZ1bmN0aW9uIGluc3RhbmNlVmVydEhlYWRlcihkZWZpbmVzKSB7XG5cdHJldHVybiB3Z3NsUGFyc2VEZWZpbmVzYFxuICAgI2lmICR7ZGVmaW5lcy5VU0VfSU5TVEFOQ0V9XG4gICAgICBzdHJ1Y3QgSW5zdGFuY2VzVW5pZm9ybSB7XG4gICAgICAgICBpbnN0YW5jZU1hdHJpeHM6ICBhcnJheTxtYXQ0eDQ8ZjMyPiwgJHtkZWZpbmVzLmluc3RhbmNlQ291bnR9PixcbiAgICAgIH07XG4gICAgICBAZ3JvdXAoMCkgQGJpbmRpbmcoJHtkZWZpbmVzLmluc3RhbmNlTWF0cml4c0J1ZmZlckJpbmRpbmd9KSB2YXI8c3RvcmFnZSwgcmVhZD4gaW5zdGFuY2VzVW5pZm9ybTogSW5zdGFuY2VzVW5pZm9ybTtcbiAgICAjZW5kaWZcbiAgIGA7XG59XG5leHBvcnQgZnVuY3Rpb24gaW5zdGFuY2VWZXJ0TWFpbihkZWZpbmVzKSB7XG5cdHJldHVybiB3Z3NsUGFyc2VEZWZpbmVzYFxuICAgICAgI2lmICR7ZGVmaW5lcy5VU0VfSU5TVEFOQ0V9XG4gICAgICAgICBtb2RlbE1hdHJpeD1pbnN0YW5jZXNVbmlmb3JtLmluc3RhbmNlTWF0cml4c1tpbnB1dC5pbnN0YW5jZUlkeF07XG4gICAgICAjZW5kaWZcbiAgIGA7XG59XG4iLCJpbXBvcnQgeyB3Z3NsUGFyc2VEZWZpbmVzIH0gZnJvbSBcIi4uLy4uL1dnc2xQcmVwcm9jZXNzb3JcIjtcclxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gbGlnaHQoZGVmaW5lcykge1xyXG5cdHJldHVybiB3Z3NsUGFyc2VEZWZpbmVzYCBcclxuICAgIHN0cnVjdCBSZWZsZWN0ZWRMaWdodCB7XHJcbiAgICAgICAgYW1iaWVudDogdmVjMzxmMzI+LFxyXG4gICAgICAgIGRpcmVjdERpZmZ1c2U6dmVjMzxmMzI+LFxyXG4gICAgICAgIGRpcmVjdFNwZWN1bGFyOnZlYzM8ZjMyPixcclxuICAgICAgICBpbmRpcmVjdERpZmZ1c2U6dmVjMzxmMzI+LFxyXG4gICAgICAgIGluZGlyZWN0U3BlY3VsYXI6dmVjMzxmMzI+LFxyXG4gICAgICAgIHRlc3RDb2xvcjogdmVjMzxmMzI+LFxyXG4gICAgfTsgXHJcbiAgICBzdHJ1Y3QgSW5jaWRlbnRMaWdodCB7XHJcbiAgICAgICAgY29sb3I6IHZlYzM8ZjMyPixcclxuICAgICAgICBkaXJlY3Rpb246IHZlYzM8ZjMyPixcclxuICAgICAgICB2aXNpYmxlOiBib29sLFxyXG4gICAgfTtcclxuICAgIHN0cnVjdCBHZW9tZXRyeSB7XHJcbiAgICAgICAgcG9zaXRpb246IHZlYzM8ZjMyPixcclxuICAgICAgICBub3JtYWw6IHZlYzM8ZjMyPixcclxuICAgICAgICB2aWV3RGlyOiB2ZWMzPGYzMj4sXHJcbiAgICAgICAgZG90TlY6ZjMyLFxyXG4gICAgICAgICNpZiAke2RlZmluZXMuVVNFX0NMRUFSQ09BVH1cclxuICAgICAgICAgICAgdmVjMyBjbGVhcmNvYXROb3JtYWw7XHJcbiAgICAgICAgI2VuZGlmXHJcbiAgICB9O1xyXG5cclxuICAgICNpZiAke2RlZmluZXMuc3BvdExpZ2h0c0NvdW50ID4gMH1cclxuICAgICAgICBzdHJ1Y3QgU3BvdExpZ2h0IHtcclxuICAgICAgICAgICAgcG9zaXRpb246IHZlYzM8ZjMyPixcclxuICAgICAgICAgICAgZGlzdGFuY2U6IGYzMixcclxuICAgICAgICAgICAgZGlyZWN0aW9uOiB2ZWMzPGYzMj4sXHJcbiAgICAgICAgICAgIGNvbmVDb3M6IGYzMixcclxuICAgICAgICAgICAgY29sb3I6IHZlYzM8ZjMyPixcclxuICAgICAgICAgICAgcGVudW1icmFDb3M6IGYzMixcclxuICAgICAgICAgICAgZGVjYXk6IGYzMixcclxuICAgICAgICB9O1xyXG4gICAgICAgIGZuIGdldFNwb3RMaWdodEluZm8oc3BvdExpZ2h0OlNwb3RMaWdodCx3b3JsZFBvczp2ZWMzPGYzMj4sc2hpbmluZXNzOmYzMixOOnZlYzM8ZjMyPixWOnZlYzM8ZjMyPiktPlJlZmxlY3RlZExpZ2h0e1xyXG4gICAgICAgICAgICAgICAgdmFyIGRpcmVjdGlvbjp2ZWMzPGYzMj4gPSBzcG90TGlnaHQucG9zaXRpb24gLSB3b3JsZFBvcztcclxuICAgICAgICAgICAgICAgIHZhciBsaWdodENvbG9yOlJlZmxlY3RlZExpZ2h0O1xyXG4gICAgICAgICAgICAgICAgbGV0IGxpZ2h0RGlzdGFuY2U6ZjMyID0gbGVuZ3RoKGRpcmVjdGlvbik7XHJcbiAgICAgICAgICAgICAgICBkaXJlY3Rpb24gPSBub3JtYWxpemUoZGlyZWN0aW9uKTtcclxuICAgICAgICAgICAgICAgIGxldCBhbmdsZUNvczpmMzIgPSBkb3QoIGRpcmVjdGlvbiwgc3BvdExpZ2h0LmRpcmVjdGlvbiApO1xyXG4gICAgICAgICAgICAgICAgbGV0IGRlY2F5OmYzMiA9IGNsYW1wKDEuMCAtIHBvdyhsaWdodERpc3RhbmNlL3Nwb3RMaWdodC5kaXN0YW5jZSwgc3BvdExpZ2h0LmRlY2F5KSwgMC4wLCAxLjApO1xyXG4gICAgICAgICAgICAgICAgbGV0IHNwb3RFZmZlY3Q6ZjMyID0gc21vb3Roc3RlcCggc3BvdExpZ2h0LnBlbnVtYnJhQ29zLCBzcG90TGlnaHQuY29uZUNvcywgYW5nbGVDb3MgKTtcclxuICAgICAgICAgICAgICAgIGxldCBkZWNheVRvdGFsOmYzMiA9IGRlY2F5ICogc3BvdEVmZmVjdDtcclxuICAgICAgICAgICAgICAgIGxldCBkOmYzMiA9IG1heCggZG90KCBOLCBkaXJlY3Rpb24gKSwgMC4wICkgICogZGVjYXlUb3RhbDtcclxuICAgICAgICAgICAgICAgIGxpZ2h0Q29sb3IuZGlyZWN0RGlmZnVzZT0gc3BvdExpZ2h0LmNvbG9yICogZDtcclxuICAgICAgICAgICAgICAgIGxldCBoYWxmRGlyOnZlYzM8ZjMyPiA9IG5vcm1hbGl6ZSggViArIGRpcmVjdGlvbiApO1xyXG4gICAgICAgICAgICAgICAgbGV0IHM6ZjMyID0gcG93KCBjbGFtcCggZG90KCBOLCBoYWxmRGlyICksIDAuMCwgMS4wICksIHNoaW5pbmVzcyApICogZGVjYXlUb3RhbDtcclxuICAgICAgICAgICAgICAgIGxpZ2h0Q29sb3IuZGlyZWN0U3BlY3VsYXI9IHNwb3RMaWdodC5jb2xvciAqIHM7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gbGlnaHRDb2xvcjtcclxuICAgICAgICB9XHJcbiAgICAgICAgZm4gZ2V0U3BvdExpZ2h0SW5jaWRlbnRMaWdodChzcG90TGlnaHQ6U3BvdExpZ2h0LCBnZW9tZXRyeTpHZW9tZXRyeSktPkluY2lkZW50TGlnaHQge1xyXG4gICAgICAgICAgICB2YXIgaW5jaWRlbnRMaWdodDpJbmNpZGVudExpZ2h0O1xyXG4gICAgICAgICAgICBsZXQgbFZlY3Rvcjp2ZWMzPGYzMj4gPSBzcG90TGlnaHQucG9zaXRpb24gLSBnZW9tZXRyeS5wb3NpdGlvbjtcclxuICAgICAgICAgICAgaW5jaWRlbnRMaWdodC5kaXJlY3Rpb24gPSBub3JtYWxpemUoIGxWZWN0b3IgKTtcclxuICAgIFxyXG4gICAgICAgICAgICBsZXQgbGlnaHREaXN0YW5jZTpmMzIgPSBsZW5ndGgoIGxWZWN0b3IgKTtcclxuICAgICAgICAgICAgbGV0IGFuZ2xlQ29zOmYzMiA9IGRvdCggaW5jaWRlbnRMaWdodC5kaXJlY3Rpb24sIHNwb3RMaWdodC5kaXJlY3Rpb24gKTtcclxuICAgIFxyXG4gICAgICAgICAgICBsZXQgc3BvdEVmZmVjdDpmMzIgPSBzbW9vdGhzdGVwKCBzcG90TGlnaHQucGVudW1icmFDb3MsIHNwb3RMaWdodC5jb25lQ29zLCBhbmdsZUNvcyApO1xyXG4gICAgICAgICAgICBsZXQgZGVjYXlFZmZlY3Q6ZjMyID0gY2xhbXAoMS4wIC0gcG93KGxpZ2h0RGlzdGFuY2Uvc3BvdExpZ2h0LmRpc3RhbmNlLCA0LjApLCAwLjAsIDEuMCk7XHJcbiAgICBcclxuICAgICAgICAgICAgaW5jaWRlbnRMaWdodC5jb2xvcj1zcG90TGlnaHQuY29sb3Iqc3BvdEVmZmVjdCAqIGRlY2F5RWZmZWN0OyBcclxuICAgICAgICAgICAgcmV0dXJuICBpbmNpZGVudExpZ2h0O1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAjZW5kaWYgXHJcblxyXG4gICAgI2lmICR7ZGVmaW5lcy5wb2ludExpZ2h0c0NvdW50ID4gMH1cclxuICAgICAgICBzdHJ1Y3QgUG9pbnRMaWdodCB7XHJcbiAgICAgICAgICAgIHBvc2l0aW9uOiB2ZWMzPGYzMj4sXHJcbiAgICAgICAgICAgIGRpc3RhbmNlOiBmMzIsXHJcbiAgICAgICAgICAgIGNvbG9yOiB2ZWMzPGYzMj4sXHJcbiAgICAgICAgICAgIGRlY2F5OiBmMzIsXHJcbiAgICAgICAgfTtcclxuICAgICAgICBmbiBnZXRQb2ludExpZ2h0SW5mbyhwb2ludExpZ2h0OlBvaW50TGlnaHQsd29ybGRQb3M6dmVjMzxmMzI+LHNoaW5pbmVzczpmMzIsTjp2ZWMzPGYzMj4sVjp2ZWMzPGYzMj4pLT5SZWZsZWN0ZWRMaWdodHtcclxuICAgICAgICAgICAgdmFyIGxpZ2h0Q29sb3I6UmVmbGVjdGVkTGlnaHQ7XHJcbiAgICAgICAgICAgIHZhciBkaXJlY3Rpb246dmVjMzxmMzI+ID0gd29ybGRQb3MgLSBwb2ludExpZ2h0LnBvc2l0aW9uO1xyXG4gICAgICAgICAgICBsZXQgZGlzdDpmMzIgPSBsZW5ndGgoIGRpcmVjdGlvbiApO1xyXG4gICAgICAgICAgICBkaXJlY3Rpb24gPSBub3JtYWxpemUoZGlyZWN0aW9uKTtcclxuICAgICAgICAgICAgbGV0IGRlY2F5ID0gY2xhbXAoMS4wIC0gcG93KGRpc3QgLyBwb2ludExpZ2h0LmRpc3RhbmNlLCBwb2ludExpZ2h0LmRlY2F5KSwgMC4wLCAxLjApO1xyXG4gICAgXHJcbiAgICAgICAgICAgIGxldCBkID0gIG1heCggZG90KCBOLCAtZGlyZWN0aW9uICksIDAuMCApICogZGVjYXk7XHJcbiAgICAgICAgICAgIGxpZ2h0Q29sb3IuZGlyZWN0RGlmZnVzZSA9IHBvaW50TGlnaHQuY29sb3IgKiBkO1xyXG4gICAgXHJcbiAgICAgICAgICAgIGxldCBoYWxmRGlyOnZlYzM8ZjMyPiA9IG5vcm1hbGl6ZSggViAtIGRpcmVjdGlvbiApO1xyXG4gICAgICAgICAgICBsZXQgczpmMzIgPSBwb3coIGNsYW1wKCBkb3QoIE4sIGhhbGZEaXIgKSwgMC4wLCAxLjAgKSwgc2hpbmluZXNzICkgICogZGVjYXk7XHJcbiAgICAgICAgICAgIGxpZ2h0Q29sb3IuZGlyZWN0U3BlY3VsYXIgPSBwb2ludExpZ2h0LmNvbG9yICogcztcclxuICAgICAgICAgICAgcmV0dXJuIGxpZ2h0Q29sb3I7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGZuIGdldFBvaW50TGlnaHRJbmNpZGVudExpZ2h0KHBvaW50TGlnaHQ6UG9pbnRMaWdodCwgZ2VvbWV0cnk6R2VvbWV0cnkpLT5JbmNpZGVudExpZ2h0IHtcclxuICAgICAgICAgICAgdmFyIGluY2lkZW50TGlnaHQ6SW5jaWRlbnRMaWdodDtcclxuICAgICAgICAgICAgbGV0IGxWZWN0b3I6dmVjMzxmMzI+ID0gcG9pbnRMaWdodC5wb3NpdGlvbi1nZW9tZXRyeS5wb3NpdGlvbjtcclxuICAgICAgICAgICAgaW5jaWRlbnRMaWdodC5kaXJlY3Rpb249IG5vcm1hbGl6ZSggbFZlY3RvciApO1xyXG4gICAgICAgICAgICBsZXQgbGlnaHREaXN0YW5jZTpmMzIgPSBsZW5ndGgoIGxWZWN0b3IgKTtcclxuICAgICAgICAgICAgLy8gbGV0IHdlaWdodDpmMzI9MS4wIC0gcG93KGxpZ2h0RGlzdGFuY2UvcG9pbnRMaWdodC5kaXN0YW5jZSwgNC4wKTtcclxuICAgICAgICAgICAgaW5jaWRlbnRMaWdodC5jb2xvcj1wb2ludExpZ2h0LmNvbG9yKmNsYW1wKDEuMCAtIHBvdyhsaWdodERpc3RhbmNlL3BvaW50TGlnaHQuZGlzdGFuY2UsIDQuMCksIDAuMCwgMS4wKTtcclxuICAgICAgICAgICAgcmV0dXJuIGluY2lkZW50TGlnaHQ7XHJcbiAgICAgICAgfVxyXG4gICAgI2VuZGlmXHJcbiAgICAjaWYgJHtkZWZpbmVzLmRpcnRlY3RMaWdodHNDb3VudCA+IDB9XHJcbiAgICAgICAgc3RydWN0IERpcmVjdGlvbmFsTGlnaHQge1xyXG4gICAgICAgICAgICBkaXJlY3Rpb246IHZlYzM8ZjMyPixcclxuICAgICAgICAgICAgY29sb3I6IHZlYzM8ZjMyPixcclxuICAgICAgICB9O1xyXG4gICAgICAgIGZuIGdldERpcmVjdExpZ2h0SW5mbyhkaXJlY3Rpb25hbExpZ2h0OkRpcmVjdGlvbmFsTGlnaHQsc2hpbmluZXNzOmYzMixOOnZlYzM8ZjMyPixWOnZlYzM8ZjMyPiktPlJlZmxlY3RlZExpZ2h0e1xyXG4gICAgICAgICAgICB2YXIgbGlnaHRDb2xvcjpSZWZsZWN0ZWRMaWdodDtcclxuICAgICAgICAgICAgbGV0IGQ6ZjMyID0gbWF4KGRvdChOLCAtZGlyZWN0aW9uYWxMaWdodC5kaXJlY3Rpb24pLCAwLjApO1xyXG4gICAgICAgICAgICBsaWdodENvbG9yLmRpcmVjdERpZmZ1c2UgKz0gZGlyZWN0aW9uYWxMaWdodC5jb2xvciAqIGQ7XHJcbiAgICBcclxuICAgICAgICAgICAgbGV0IGhhbGZEaXI6dmVjMzxmMzI+ID0gbm9ybWFsaXplKCBWIC0gZGlyZWN0aW9uYWxMaWdodC5kaXJlY3Rpb24gKTtcclxuICAgICAgICAgICAgbGV0IHM6ZjMyID0gcG93KCBjbGFtcCggZG90KCBOLCBoYWxmRGlyICksIDAuMCwgMS4wICksIHNoaW5pbmVzcyApO1xyXG4gICAgICAgICAgICBsaWdodENvbG9yLmRpcmVjdFNwZWN1bGFyICs9IGRpcmVjdGlvbmFsTGlnaHQuY29sb3IgKiBzO1xyXG4gICAgICAgICAgICByZXR1cm4gbGlnaHRDb2xvcjtcclxuICAgICAgICB9XHJcbiAgICAgICAgZm4gZ2V0RGlyZWN0aW9uYWxEaXJlY3RMaWdodEluY2lkZW50TGlnaHQoZGlyZWN0aW9uYWxMaWdodDpEaXJlY3Rpb25hbExpZ2h0LGdlb21ldHJ5Okdlb21ldHJ5KS0+SW5jaWRlbnRMaWdodCB7XHJcbiAgICAgICAgICAgIHZhciBpbmNpZGVudExpZ2h0OkluY2lkZW50TGlnaHQ7XHJcbiAgICAgICAgICAgIGluY2lkZW50TGlnaHQuY29sb3IgPSBkaXJlY3Rpb25hbExpZ2h0LmNvbG9yO1xyXG4gICAgICAgICAgICBpbmNpZGVudExpZ2h0LmRpcmVjdGlvbiA9IG5vcm1hbGl6ZShkaXJlY3Rpb25hbExpZ2h0LmRpcmVjdGlvbik7XHJcbiAgICAgICAgICAgIHJldHVybiBpbmNpZGVudExpZ2h0OyAgICAgICAgIFxyXG4gICAgICAgIH1cclxuICAgICNlbmRpZlxyXG5cclxuICAgICNpZiAke2RlZmluZXMub3BlblNoYWRvd30gXHJcbiAgICAgICAgc3RydWN0IExpZ2h0SW5mbyB7XHJcbiAgICAgICAgICAgIGRpcmVjdGlvbjogdmVjMzxmMzI+LFxyXG4gICAgICAgICAgICB2aWV3cG9ydDogdmVjNDxmMzI+LFxyXG4gICAgICAgIH07XHJcbiAgICAgICAgXHJcbiAgICAgICAgZm4gbGluZWFyaXplRGVwdGgoZGVwdGg6IGYzMiwgbmVhcjogZjMyLCBmYXI6IGYzMiktPmYzMiB7XHJcbiAgICAgICAgICAgIHJldHVybiAyICogKG5lYXIgKiBmYXIpIC8gKGZhciArIG5lYXIgLSBkZXB0aCAqIChmYXIgLSBuZWFyKSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBmbiBnZXRDdWJlRmFjZSh2IDogdmVjMzxmMzI+KSAtPiBpMzJ7XHJcbiAgICAgICAgICAgIGxldCB2QWJzID0gYWJzKHYpO1xyXG4gICAgICAgIFxyXG4gICAgICAgICAgICBpZiAodkFicy56ID49IHZBYnMueCAmJiB2QWJzLnogPj0gdkFicy55KSB7XHJcbiAgICAgICAgICAgICAgaWYgKHYueiA8IDAuMCkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIDM7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIHJldHVybiAyO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgXHJcbiAgICAgICAgICAgIGlmICh2QWJzLnkgPj0gdkFicy54KSB7XHJcbiAgICAgICAgICAgICAgaWYgKHYueSA8IDAuMCkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIDU7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIHJldHVybiA0O1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgXHJcbiAgICAgICAgICAgIGlmICh2LnggPCAwLjApIHtcclxuICAgICAgICAgICAgICByZXR1cm4gMTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm4gMDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGZuIGdldFNoYWRvd1ZhbHVlKHNoYWRvd01hcEFycmF5OnRleHR1cmVfZGVwdGhfMmRfYXJyYXksIHNoYWRvd1NhbXBsZXI6c2FtcGxlcl9jb21wYXJpc29uLCBsaWdodFBvczp2ZWM0PGYzMj4sIGdlb21ldHJ5Okdlb21ldHJ5LCBsaWdodEluZm86TGlnaHRJbmZvLCBpbmRleDp1MzIsIGlzUG9pbnRMaWdodDogYm9vbCwgbmVhcjogZjMyLCBmYXI6IGYzMiktPmYzMiB7XHJcbiAgICAgICAgICAgIHZhciB2aXNpYmlsaXR5ID0gMC4wO1xyXG4gICAgICAgICAgICB2YXIgcHJvamVjdFBvczogdmVjMzxmMzI+ID0gbGlnaHRQb3MueHl6IC8gbGlnaHRQb3MudztcclxuICAgICAgICAgICAgdmFyIHNoYWRvd1BvczogdmVjMzxmMzI+ID0gdmVjMyhwcm9qZWN0UG9zLnh5ICogdmVjMigwLjUsIC0wLjUpICsgdmVjMigwLjUpLCBwcm9qZWN0UG9zLnopO1xyXG4gICAgICAgICAgICB2YXIgZDpmMzIgPSBkb3QoZ2VvbWV0cnkubm9ybWFsLCAtbGlnaHRJbmZvLmRpcmVjdGlvbik7XHJcbiAgICAgICAgICAgIHZhciBiaWFzID0gbWF4KDAuMDEyICogKDEuMCAtIGQpLCAwLjAwMSkgLyBsaWdodFBvcy53O1xyXG4gICAgICAgICAgICBsZXQgb25lT3ZlclNoYWRvd0RlcHRoVGV4dHVyZVNpemUgPSAxLjAgLyAxMDI0LjA7XHJcbiAgICAgICAgICAgIC8vIHZhciBkZXB0aCA9IHNlbGVjdChzaGFkb3dQb3MueiwgKGxpbmVhcml6ZURlcHRoKHNoYWRvd1Bvcy56LCBuZWFyLCBmYXIpIC0gbmVhcikgLyAoZmFyLSBuZWFyKSwgaXNQZXJzcGVjdGl2ZUNhbWVyYSk7XHJcbiAgICAgICAgICAgIHZhciBkZXB0aCA9IHNoYWRvd1Bvcy56O1xyXG5cclxuICAgICAgICAgICAgaWYgKGlzUG9pbnRMaWdodCkge1xyXG4gICAgICAgICAgICAgICAgc2hhZG93UG9zLnggPSBzaGFkb3dQb3MueCAqIGxpZ2h0SW5mby52aWV3cG9ydC56O1xyXG4gICAgICAgICAgICAgICAgc2hhZG93UG9zLnkgPSBzaGFkb3dQb3MueSAqIGxpZ2h0SW5mby52aWV3cG9ydC53O1xyXG4gICAgICAgICAgICAgICAgdmFyIHZpZXdwb3J0WCA9IGxpZ2h0SW5mby52aWV3cG9ydC54ICogbGlnaHRJbmZvLnZpZXdwb3J0Lno7XHJcbiAgICAgICAgICAgICAgICB2YXIgdmlld3BvcnRZID0gbGlnaHRJbmZvLnZpZXdwb3J0LnkgKiBsaWdodEluZm8udmlld3BvcnQudztcclxuICAgICAgICAgICAgICAgIHZhciB1dk9mZnNldCA9IDEuNSAvIDEwMjQuMDtcclxuICAgICAgICAgICAgICAgIHNoYWRvd1Bvcy54ID0gY2xhbXAoc2hhZG93UG9zLnggKyB2aWV3cG9ydFgsIHZpZXdwb3J0WCArIHV2T2Zmc2V0LCB2aWV3cG9ydFggKyBsaWdodEluZm8udmlld3BvcnQueiAtIHV2T2Zmc2V0KTtcclxuICAgICAgICAgICAgICAgIHNoYWRvd1Bvcy55ID0gY2xhbXAoc2hhZG93UG9zLnkgKyB2aWV3cG9ydFksIHZpZXdwb3J0WSArIHV2T2Zmc2V0LCB2aWV3cG9ydFkgKyBsaWdodEluZm8udmlld3BvcnQudyAtIHV2T2Zmc2V0KTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgZm9yICh2YXIgeSA9IC0xOyB5IDw9IDE7IHkrKykge1xyXG4gICAgICAgICAgICAgICAgZm9yICh2YXIgeCA9IC0xOyB4IDw9IDE7IHgrKykge1xyXG4gICAgICAgICAgICAgICAgICAgIGxldCBvZmZzZXQgPSB2ZWMyPGYzMj4odmVjMih4LCB5KSkgKiBvbmVPdmVyU2hhZG93RGVwdGhUZXh0dXJlU2l6ZTtcclxuICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgICAgIHZpc2liaWxpdHkgKz0gdGV4dHVyZVNhbXBsZUNvbXBhcmUoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHNoYWRvd01hcEFycmF5LCBzaGFkb3dTYW1wbGVyLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBzaGFkb3dQb3MueHkgKyBvZmZzZXQsIGluZGV4LCBkZXB0aCAtIGJpYXMpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHZpc2liaWxpdHkgLz0gOS4wO1xyXG4gICAgICAgICAgICB2YXIgaW5GcnVzdHVtID0gc2hhZG93UG9zLnggPj0gMC4wICYmIHNoYWRvd1Bvcy54IDw9IDEuMCAmJiBzaGFkb3dQb3MueSA+PSAwLjAgJiYgc2hhZG93UG9zLnkgPD0gMS4wO1xyXG4gICAgICAgICAgICBpZiAoIWluRnJ1c3R1bSB8fCBkZXB0aCA+IDEuMCkge1xyXG4gICAgICAgICAgICAgICAgdmlzaWJpbGl0eSA9IDEuMDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm4gdmlzaWJpbGl0eTtcclxuICAgICAgICB9XHJcbiAgICAjZW5kaWZcclxuXHJcbiAgICAjaWYgJHtcclxuXHRcdGRlZmluZXMuYW1iaWVudExpZ2h0Q291bnQgfHwgZGVmaW5lcy5zcG90TGlnaHRzQ291bnQgfHwgZGVmaW5lcy5wb2ludExpZ2h0c0NvdW50IHx8IGRlZmluZXMuZGlydGVjdExpZ2h0c0NvdW50XHJcblx0fVxyXG4gICAgICAgIHN0cnVjdCBMaWdodFVuaWZvcm1ze1xyXG4gICAgICAgICAgICAjaWYgJHtkZWZpbmVzLmFtYmllbnRMaWdodENvdW50fVxyXG4gICAgICAgICAgICAgICAgYW1iaWVudDp2ZWM0PGYzMj4sXHJcbiAgICAgICAgICAgICNlbmRpZlxyXG4gICAgICAgICAgICAjaWYgJHtkZWZpbmVzLnNwb3RMaWdodHNDb3VudH1cclxuICAgICAgICAgICAgICAgIHNwb3RMaWdodHM6YXJyYXk8U3BvdExpZ2h0LCR7ZGVmaW5lcy5zcG90TGlnaHRzQ291bnR9PixcclxuICAgICAgICAgICAgI2VuZGlmXHJcbiAgICAgICAgICAgICNpZiAke2RlZmluZXMucG9pbnRMaWdodHNDb3VudH1cclxuICAgICAgICAgICAgICAgIHBvaW50TGlnaHRzOmFycmF5PFBvaW50TGlnaHQsJHtkZWZpbmVzLnBvaW50TGlnaHRzQ291bnR9PixcclxuICAgICAgICAgICAgI2VuZGlmXHJcbiAgICAgICAgICAgICNpZiAke2RlZmluZXMuZGlydGVjdExpZ2h0c0NvdW50fVxyXG4gICAgICAgICAgICAgICAgZGlydGVjdExpZ2h0czphcnJheTxEaXJlY3Rpb25hbExpZ2h0LCR7ZGVmaW5lcy5kaXJ0ZWN0TGlnaHRzQ291bnR9PixcclxuICAgICAgICAgICAgI2VuZGlmXHJcbiAgICAgICAgfVxyXG4gICAgICAgIEBncm91cCgyKSBAYmluZGluZygke2RlZmluZXMubGlnaHRCaW5kaW5nfSkgdmFyPHN0b3JhZ2UsIHJlYWQ+IGxpZ2h0VW5pZm9ybXM6IExpZ2h0VW5pZm9ybXM7XHJcblxyXG4gICAgICAgICNpZiAke2RlZmluZXMub3BlblNoYWRvd31cclxuICAgICAgICAgICAgI2lmICR7ZGVmaW5lcy5zcG90TGlnaHRTaGFkb3dNYXBzQ291bnR9XHJcbiAgICAgICAgICAgICAgICBzdHJ1Y3QgU3BvdExpZ2h0U2hhZG93IHtcclxuICAgICAgICAgICAgICAgICAgICBzaGFkb3dDYW1lcmFWUE1hdHJpeDogbWF0NHg0PGYzMj4sXHJcbiAgICAgICAgICAgICAgICAgICAgc2hhZG93Q2FtZXJhTmVhcjogZjMyLFxyXG4gICAgICAgICAgICAgICAgICAgIHNoYWRvd0NhbWVyYUZhcjogZjMyXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICNlbmRpZlxyXG4gICAgICAgICAgICAjaWYgJHtkZWZpbmVzLnBvaW50TGlnaHRTaGFkb3dNYXBzQ291bnR9XHJcbiAgICAgICAgICAgICAgICBzdHJ1Y3QgUG9pbnRMaWdodFNoYWRvdyB7XHJcbiAgICAgICAgICAgICAgICAgICAgc2hhZG93Q2FtZXJhVlBNYXRyaXhBcnJheTogYXJyYXk8bWF0NHg0PGYzMj4sIDY+LFxyXG4gICAgICAgICAgICAgICAgICAgIHNoYWRvd0NhbWVyYVZpZXdwb3J0QXJyYXk6IGFycmF5PHZlYzQ8ZjMyPiwgNj4sXHJcbiAgICAgICAgICAgICAgICAgICAgc2hhZG93Q2FtZXJhTmVhcjogZjMyLFxyXG4gICAgICAgICAgICAgICAgICAgIHNoYWRvd0NhbWVyYUZhcjogZjMyLFxyXG4gICAgICAgICAgICAgICAgICAgIC8vIHNoYWRvd0NhbWVyYVZQTWF0cml4OiBtYXQ0eDQ8ZjMyPixcclxuICAgICAgICAgICAgICAgICAgICAvLyBzaGFkb3dDYW1lcmFWUE1hdHJpeEFycmF5OiBhcnJheTxtYXQ0eDQ8ZjMyPiwgNj4sXHJcbiAgICAgICAgICAgICAgICAgICAgLy8gc2hhZG93Q2FtZXJhVmlld3BvcnRBcnJheTogYXJyYXk8dmVjNDxmMzI+LCA2PixcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgI2VuZGlmXHJcbiAgICAgICAgICAgICNpZiAke2RlZmluZXMuZGlyZWN0TGlnaHRTaGFkb3dNYXBzQ291bnR9XHJcbiAgICAgICAgICAgICAgICBzdHJ1Y3QgRGlyZWN0TGlnaHRTaGFkb3cge1xyXG4gICAgICAgICAgICAgICAgICAgIHNoYWRvd0NhbWVyYVZQTWF0cml4OiBtYXQ0eDQ8ZjMyPixcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgI2VuZGlmXHJcbiAgICAgICAgICAgIHN0cnVjdCBTaGFkb3dVbmlmb3Jtc3tcclxuICAgICAgICAgICAgICAgICNpZiAke2RlZmluZXMuc3BvdExpZ2h0U2hhZG93TWFwc0NvdW50fVxyXG4gICAgICAgICAgICAgICAgICAgIHNwb3RMaWdodFNoYWRvd3M6YXJyYXk8U3BvdExpZ2h0U2hhZG93LCR7ZGVmaW5lcy5zcG90TGlnaHRTaGFkb3dNYXBzQ291bnR9PixcclxuICAgICAgICAgICAgICAgICNlbmRpZlxyXG4gICAgICAgICAgICAgICAgI2lmICR7ZGVmaW5lcy5wb2ludExpZ2h0U2hhZG93TWFwc0NvdW50fVxyXG4gICAgICAgICAgICAgICAgICAgIHBvaW50TGlnaHRTaGFkb3dzOmFycmF5PFBvaW50TGlnaHRTaGFkb3csJHtkZWZpbmVzLnBvaW50TGlnaHRTaGFkb3dNYXBzQ291bnR9PixcclxuICAgICAgICAgICAgICAgICNlbmRpZlxyXG4gICAgICAgICAgICAgICAgI2lmICR7ZGVmaW5lcy5kaXJlY3RMaWdodFNoYWRvd01hcHNDb3VudH1cclxuICAgICAgICAgICAgICAgICAgICBkaXJlY3RMaWdodFNoYWRvd3M6YXJyYXk8RGlyZWN0TGlnaHRTaGFkb3csJHtkZWZpbmVzLmRpcmVjdExpZ2h0U2hhZG93TWFwc0NvdW50fT4sXHJcbiAgICAgICAgICAgICAgICAjZW5kaWZcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBAZ3JvdXAoMikgQGJpbmRpbmcoJHtkZWZpbmVzLnNoYWRvd0JpbmRpbmd9KSB2YXI8c3RvcmFnZSwgcmVhZD4gc2hhZG93VW5pZm9ybXM6IFNoYWRvd1VuaWZvcm1zO1xyXG5cclxuICAgICAgICAgICAgI2lmICR7ZGVmaW5lcy5zcG90TGlnaHRTaGFkb3dNYXBUZXh0dXJlQXJyYXlCaW5kaW5nfVxyXG4gICAgICAgICAgICAgICAgQGdyb3VwKDIpIEBiaW5kaW5nKCR7XHJcblx0XHRcdFx0XHRkZWZpbmVzLnNwb3RMaWdodFNoYWRvd01hcFRleHR1cmVBcnJheUJpbmRpbmdcclxuXHRcdFx0XHR9KSB2YXIgc3BvdExpZ2h0U2hhZG93TWFwVGV4dHVyZUFycmF5OiB0ZXh0dXJlX2RlcHRoXzJkX2FycmF5O1xyXG4gICAgICAgICAgICAjZW5kaWZcclxuICAgICAgICAgICAgI2lmICR7ZGVmaW5lcy5wb2ludExpZ2h0U2hhZG93TWFwVGV4dHVyZUFycmF5QmluZGluZ31cclxuICAgICAgICAgICAgICAgIEBncm91cCgyKSBAYmluZGluZygke1xyXG5cdFx0XHRcdFx0ZGVmaW5lcy5wb2ludExpZ2h0U2hhZG93TWFwVGV4dHVyZUFycmF5QmluZGluZ1xyXG5cdFx0XHRcdH0pIHZhciBwb2ludExpZ2h0U2hhZG93TWFwVGV4dHVyZUFycmF5OiB0ZXh0dXJlX2RlcHRoXzJkX2FycmF5O1xyXG4gICAgICAgICAgICAjZW5kaWZcclxuICAgICAgICAgICAgI2lmICR7ZGVmaW5lcy5kaXJlY3RMaWdodFNoYWRvd01hcFRleHR1cmVBcnJheUJpbmRpbmd9XHJcbiAgICAgICAgICAgICAgICBAZ3JvdXAoMikgQGJpbmRpbmcoJHtcclxuXHRcdFx0XHRcdGRlZmluZXMuZGlyZWN0TGlnaHRTaGFkb3dNYXBUZXh0dXJlQXJyYXlCaW5kaW5nXHJcblx0XHRcdFx0fSkgdmFyIGRpcmVjdExpZ2h0U2hhZG93TWFwVGV4dHVyZUFycmF5OiB0ZXh0dXJlX2RlcHRoXzJkX2FycmF5O1xyXG4gICAgICAgICAgICAjZW5kaWZcclxuICAgICAgICAgICAgQGdyb3VwKDIpIEBiaW5kaW5nKCR7ZGVmaW5lcy5zaGFkb3dTYW1wbGVyQmluZGluZ30pIHZhciBzaGFkb3dTYW1wbGVyOiBzYW1wbGVyX2NvbXBhcmlzb247XHJcbiAgICAgICAgI2VuZGlmXHJcblxyXG4gICAgI2VuZGlmXHJcbiAgICAjaWYgJHtkZWZpbmVzLm1hdGVyaWFsUGhvbmd9XHJcbiAgICAgICAgZm4gcGFyc2VMaWdodHMoZ2VvbWV0cnk6R2VvbWV0cnksc2hpbmluZXNzOmYzMiktPlJlZmxlY3RlZExpZ2h0IHtcclxuICAgICNlbGlmICR7ZGVmaW5lcy5tYXRlcmlhbFBicn1cclxuICAgICAgICBmbiBwYXJzZUxpZ2h0cyhnZW9tZXRyeTpHZW9tZXRyeSxtYXRlcmlhbDpQaHlzaWNhbE1hdGVyaWFsKS0+UmVmbGVjdGVkTGlnaHR7XHJcbiAgICAjZW5kaWZcclxuICAgICAgICB2YXIgcmVmbGVjdGVkTGlnaHQ6UmVmbGVjdGVkTGlnaHQ7XHJcbiAgICAgICAgdmFyIHNoYWRvd1ZhbHVlOmYzMiA9IDEuMDtcclxuICAgICAgICAjaWYgJHtkZWZpbmVzLmFtYmllbnRMaWdodENvdW50ID4gMH1cclxuICAgICAgICAgICAgLy/lpITnkIbnjq/looPlhYlcclxuICAgICAgICAgICAgdmFyIGFtYmllbnRDb2xvcjp2ZWMzPGYzMj4gPSBsaWdodFVuaWZvcm1zLmFtYmllbnQueHl6ICogbGlnaHRVbmlmb3Jtcy5hbWJpZW50Lnc7XHJcbiAgICAgICAgICAgIHJlZmxlY3RlZExpZ2h0LmFtYmllbnQgKz0gYW1iaWVudENvbG9yO1xyXG4gICAgICAgICNlbmRpZlxyXG5cclxuICAgICAgICAjaWYgJHtkZWZpbmVzLnNwb3RMaWdodHNDb3VudCA+IDB9XHJcbiAgICAgICAgICAgIC8v5aSE55CG6IGa5YWJ54GvXHJcbiAgICAgICAgICAgIHZhciBzcG90TGlnaHQ6U3BvdExpZ2h0O1xyXG4gICAgICAgICAgICBmb3IgKHZhciBrID0gMHU7IGsgPCAke2RlZmluZXMuc3BvdExpZ2h0c0NvdW50fTsgayA9IGsgKyAxdSkge1xyXG4gICAgICAgICAgICAgICAgc3BvdExpZ2h0PSBsaWdodFVuaWZvcm1zLnNwb3RMaWdodHNba107XHJcbiAgICAgICAgICAgICAgICAjaWYgJHtkZWZpbmVzLm1hdGVyaWFsUGhvbmcgJiYgZGVmaW5lcy5vcGVuU2hhZG93ICYmIGRlZmluZXMuc3BvdExpZ2h0U2hhZG93TWFwc0NvdW50fVxyXG4gICAgICAgICAgICAgICAgICAgIGlmIGsgPCB0ZXh0dXJlTnVtTGF5ZXJzKHNwb3RMaWdodFNoYWRvd01hcFRleHR1cmVBcnJheSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgc3BvdExpZ2h0U2hhZG93OlNwb3RMaWdodFNoYWRvdyA9IHNoYWRvd1VuaWZvcm1zLnNwb3RMaWdodFNoYWRvd3Nba107XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBsaWdodFBvczogdmVjNDxmMzI+ID0gc3BvdExpZ2h0U2hhZG93LnNoYWRvd0NhbWVyYVZQTWF0cml4ICogdmVjNDxmMzI+KGdlb21ldHJ5LnBvc2l0aW9uLDEuMCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBsaWdodEluZm86TGlnaHRJbmZvO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBsaWdodEluZm8uZGlyZWN0aW9uID0gbm9ybWFsaXplKGdlb21ldHJ5LnBvc2l0aW9uIC0gc3BvdExpZ2h0LnBvc2l0aW9uKTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHNoYWRvd1ZhbHVlID0gZ2V0U2hhZG93VmFsdWUoc3BvdExpZ2h0U2hhZG93TWFwVGV4dHVyZUFycmF5LCBzaGFkb3dTYW1wbGVyLCBsaWdodFBvcywgZ2VvbWV0cnksIGxpZ2h0SW5mbywgaywgZmFsc2UsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcG90TGlnaHRTaGFkb3cuc2hhZG93Q2FtZXJhTmVhciwgc3BvdExpZ2h0U2hhZG93LnNoYWRvd0NhbWVyYUZhcik7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIHNwb3RMaWdodC5jb2xvciAqPSBzaGFkb3dWYWx1ZTtcclxuICAgICAgICAgICAgICAgICNlbmRpZlxyXG4gICAgICAgICAgICAgICAgI2lmICR7ZGVmaW5lcy5tYXRlcmlhbFBob25nfVxyXG4gICAgICAgICAgICAgICAgICAgIGxldCBzcFJlZmxlY3RlZExpZ2h0PWdldFNwb3RMaWdodEluZm8oc3BvdExpZ2h0LGdlb21ldHJ5LnBvc2l0aW9uLHNoaW5pbmVzcyxnZW9tZXRyeS5ub3JtYWwsZ2VvbWV0cnkudmlld0Rpcik7XHJcbiAgICAgICAgICAgICAgICAjZWxpZiAke2RlZmluZXMubWF0ZXJpYWxQYnJ9XHJcbiAgICAgICAgICAgICAgICAgICAgbGV0IGluY2lkZW50TGlnaHQ9Z2V0U3BvdExpZ2h0SW5jaWRlbnRMaWdodChzcG90TGlnaHQsZ2VvbWV0cnkpO1xyXG4gICAgICAgICAgICAgICAgICAgIGxldCBzcFJlZmxlY3RlZExpZ2h0PWRpcmVjdF9QaHlzaWNhbChpbmNpZGVudExpZ2h0LCBnZW9tZXRyeSwgbWF0ZXJpYWwpO1xyXG4gICAgICAgICAgICAgICAgI2VuZGlmXHJcblxyXG4gICAgICAgICAgICAgICAgcmVmbGVjdGVkTGlnaHQuZGlyZWN0RGlmZnVzZSs9c3BSZWZsZWN0ZWRMaWdodC5kaXJlY3REaWZmdXNlO1xyXG4gICAgICAgICAgICAgICAgcmVmbGVjdGVkTGlnaHQuZGlyZWN0U3BlY3VsYXIrPXNwUmVmbGVjdGVkTGlnaHQuZGlyZWN0U3BlY3VsYXI7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAjZW5kaWZcclxuICAgICAgICAjaWYgJHtkZWZpbmVzLnBvaW50TGlnaHRzQ291bnQgPiAwfVxyXG4gICAgICAgICAgICAvL+WkhOeQhueCueWFiea6kFxyXG4gICAgICAgICAgICB2YXIgcG9pbnRMaWdodDpQb2ludExpZ2h0O1xyXG4gICAgICAgICAgICBmb3IgKHZhciBqID0gMHU7IGogPCAke2RlZmluZXMucG9pbnRMaWdodHNDb3VudH07aiA9IGogKyAxdSkge1xyXG4gICAgICAgICAgICAgICAgcG9pbnRMaWdodCA9IGxpZ2h0VW5pZm9ybXMucG9pbnRMaWdodHNbal07XHJcbiAgICAgICAgICAgICAgICAjaWYgJHtkZWZpbmVzLm1hdGVyaWFsUGhvbmcgJiYgZGVmaW5lcy5vcGVuU2hhZG93ICYmIGRlZmluZXMucG9pbnRMaWdodFNoYWRvd01hcHNDb3VudH1cclxuICAgICAgICAgICAgICAgICAgICBpZiBqIDwgdGV4dHVyZU51bUxheWVycyhwb2ludExpZ2h0U2hhZG93TWFwVGV4dHVyZUFycmF5KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBwb2ludExpZ2h0U2hhZG93OlBvaW50TGlnaHRTaGFkb3cgPSBzaGFkb3dVbmlmb3Jtcy5wb2ludExpZ2h0U2hhZG93c1tqXTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGxpZ2h0SW5mbzpMaWdodEluZm87XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGxpZ2h0SW5mby5kaXJlY3Rpb24gPSBub3JtYWxpemUoZ2VvbWV0cnkucG9zaXRpb24gLSBwb2ludExpZ2h0LnBvc2l0aW9uKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGN1YmVGYWNlID0gZ2V0Q3ViZUZhY2UobGlnaHRJbmZvLmRpcmVjdGlvbik7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBsaWdodFBvczogdmVjNDxmMzI+ID0gcG9pbnRMaWdodFNoYWRvdy5zaGFkb3dDYW1lcmFWUE1hdHJpeEFycmF5W2N1YmVGYWNlXSAqIHZlYzQ8ZjMyPihnZW9tZXRyeS5wb3NpdGlvbiwxLjApO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBsaWdodEluZm8udmlld3BvcnQgPSBwb2ludExpZ2h0U2hhZG93LnNoYWRvd0NhbWVyYVZpZXdwb3J0QXJyYXlbY3ViZUZhY2VdO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gdmFyIGxpZ2h0UG9zOiB2ZWM0PGYzMj4gPSBwb2ludExpZ2h0U2hhZG93LnNoYWRvd0NhbWVyYVZQTWF0cml4ICogdmVjNDxmMzI+KGdlb21ldHJ5LnBvc2l0aW9uLDEuMCk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICBzaGFkb3dWYWx1ZSA9IGdldFNoYWRvd1ZhbHVlKHBvaW50TGlnaHRTaGFkb3dNYXBUZXh0dXJlQXJyYXksIHNoYWRvd1NhbXBsZXIsIGxpZ2h0UG9zLCBnZW9tZXRyeSwgbGlnaHRJbmZvLCBqLCB0cnVlLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9pbnRMaWdodFNoYWRvdy5zaGFkb3dDYW1lcmFOZWFyLCBwb2ludExpZ2h0U2hhZG93LnNoYWRvd0NhbWVyYUZhcik7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyByZWZsZWN0ZWRMaWdodC50ZXN0Q29sb3IgPSB2ZWMzKHBvaW50TGlnaHRTaGFkb3cuc2hhZG93Q2FtZXJhRmFyIC8gMTAwMCwgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgICBwb2ludExpZ2h0U2hhZG93LnNoYWRvd0NhbWVyYVZQTWF0cml4QXJyYXlbNV1bM11bMl0gLyAyNTUsIHBvaW50TGlnaHRTaGFkb3cuc2hhZG93Q2FtZXJhVlBNYXRyaXhBcnJheVs1XVszXVszXSAvIDI1NSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIHJlZmxlY3RlZExpZ2h0LnRlc3RDb2xvciA9IHZlYzMocG9pbnRMaWdodFNoYWRvdy5zaGFkb3dDYW1lcmFOZWFyLCBwb2ludExpZ2h0U2hhZG93LnNoYWRvd0NhbWVyYU5lYXIsIHBvaW50TGlnaHRTaGFkb3cuc2hhZG93Q2FtZXJhTmVhcik7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIHBvaW50TGlnaHQuY29sb3IgKj0gc2hhZG93VmFsdWU7XHJcbiAgICAgICAgICAgICAgICAjZW5kaWZcclxuICAgICAgICAgICAgICAgICNpZiAke2RlZmluZXMubWF0ZXJpYWxQaG9uZ31cclxuICAgICAgICAgICAgICAgICAgICBsZXQgcG9pUmVmbGVjdGVkTGlnaHQ9Z2V0UG9pbnRMaWdodEluZm8ocG9pbnRMaWdodCxnZW9tZXRyeS5wb3NpdGlvbixzaGluaW5lc3MsZ2VvbWV0cnkubm9ybWFsLGdlb21ldHJ5LnZpZXdEaXIpO1xyXG4gICAgICAgICAgICAgICAgI2VsaWYgJHtkZWZpbmVzLm1hdGVyaWFsUGJyfVxyXG4gICAgICAgICAgICAgICAgICAgbGV0IGluY2lkZW50TGlnaHQ9Z2V0UG9pbnRMaWdodEluY2lkZW50TGlnaHQocG9pbnRMaWdodCxnZW9tZXRyeSk7XHJcbiAgICAgICAgICAgICAgICAgICBsZXQgcG9pUmVmbGVjdGVkTGlnaHQ9ZGlyZWN0X1BoeXNpY2FsKGluY2lkZW50TGlnaHQsIGdlb21ldHJ5LCBtYXRlcmlhbCk7XHJcbiAgICAgICAgICAgICAgICAjZW5kaWZcclxuXHJcbiAgICAgICAgICAgICAgICByZWZsZWN0ZWRMaWdodC5kaXJlY3REaWZmdXNlKz1wb2lSZWZsZWN0ZWRMaWdodC5kaXJlY3REaWZmdXNlO1xyXG4gICAgICAgICAgICAgICAgcmVmbGVjdGVkTGlnaHQuZGlyZWN0U3BlY3VsYXIrPXBvaVJlZmxlY3RlZExpZ2h0LmRpcmVjdFNwZWN1bGFyO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgI2VuZGlmXHJcbiAgICAgICAgI2lmICR7ZGVmaW5lcy5kaXJ0ZWN0TGlnaHRzQ291bnQgPiAwfVxyXG4gICAgICAgICAgICAvL+WkhOeQhuaWueWQkeWFiVxyXG4gICAgICAgICAgICB2YXIgZGlyZWN0aW9uYWxMaWdodDpEaXJlY3Rpb25hbExpZ2h0O1xyXG4gICAgICAgICAgICBmb3IgKHZhciBpPSAwdTsgaSA8JHtkZWZpbmVzLmRpcnRlY3RMaWdodHNDb3VudH07IGkgPSBpICsgMXUpIHtcclxuICAgICAgICAgICAgICAgIGRpcmVjdGlvbmFsTGlnaHQgPSBsaWdodFVuaWZvcm1zLmRpcnRlY3RMaWdodHNbaV07XHJcbiAgICAgICAgICAgICAgICAjaWYgJHtkZWZpbmVzLm1hdGVyaWFsUGhvbmcgJiYgZGVmaW5lcy5vcGVuU2hhZG93ICYmIGRlZmluZXMuZGlyZWN0TGlnaHRTaGFkb3dNYXBzQ291bnR9XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgaSA8IHRleHR1cmVOdW1MYXllcnMoZGlyZWN0TGlnaHRTaGFkb3dNYXBUZXh0dXJlQXJyYXkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGRpcmVjdExpZ2h0U2hhZG93OkRpcmVjdExpZ2h0U2hhZG93ID0gc2hhZG93VW5pZm9ybXMuZGlyZWN0TGlnaHRTaGFkb3dzW2ldO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgbGlnaHRQb3M6IHZlYzQ8ZjMyPiA9IGRpcmVjdExpZ2h0U2hhZG93LnNoYWRvd0NhbWVyYVZQTWF0cml4ICogdmVjNDxmMzI+KGdlb21ldHJ5LnBvc2l0aW9uLDEuMCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBsaWdodEluZm86TGlnaHRJbmZvO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBsaWdodEluZm8uZGlyZWN0aW9uID0gZGlyZWN0aW9uYWxMaWdodC5kaXJlY3Rpb247XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgICAgICAgICAgc2hhZG93VmFsdWUgPSBnZXRTaGFkb3dWYWx1ZShkaXJlY3RMaWdodFNoYWRvd01hcFRleHR1cmVBcnJheSwgc2hhZG93U2FtcGxlciwgbGlnaHRQb3MsIGdlb21ldHJ5LCBsaWdodEluZm8sIGksIGZhbHNlLCAwLCAwKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgZGlyZWN0aW9uYWxMaWdodC5jb2xvciAqPSBzaGFkb3dWYWx1ZTtcclxuICAgICAgICAgICAgICAgICNlbmRpZlxyXG4gICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgICNpZiAke2RlZmluZXMubWF0ZXJpYWxQaG9uZ31cclxuICAgICAgICAgICAgICAgICAgICBsZXQgZGlyUmVmbGVjdGVkTGlnaHQ9Z2V0RGlyZWN0TGlnaHRJbmZvKGRpcmVjdGlvbmFsTGlnaHQsc2hpbmluZXNzLGdlb21ldHJ5Lm5vcm1hbCxnZW9tZXRyeS52aWV3RGlyKTtcclxuICAgICAgICAgICAgICAgICNlbGlmICR7ZGVmaW5lcy5tYXRlcmlhbFBicn1cclxuICAgICAgICAgICAgICAgICAgICBsZXQgaW5jaWRlbnRMaWdodD1nZXREaXJlY3Rpb25hbERpcmVjdExpZ2h0SW5jaWRlbnRMaWdodChkaXJlY3Rpb25hbExpZ2h0LGdlb21ldHJ5KTtcclxuICAgICAgICAgICAgICAgICAgICBsZXQgZGlyUmVmbGVjdGVkTGlnaHQ9ZGlyZWN0X1BoeXNpY2FsKGluY2lkZW50TGlnaHQsIGdlb21ldHJ5LCBtYXRlcmlhbCk7XHJcbiAgICAgICAgICAgICAgICAjZW5kaWZcclxuXHJcbiAgICAgICAgICAgICAgICByZWZsZWN0ZWRMaWdodC5kaXJlY3REaWZmdXNlKz1kaXJSZWZsZWN0ZWRMaWdodC5kaXJlY3REaWZmdXNlO1xyXG4gICAgICAgICAgICAgICAgcmVmbGVjdGVkTGlnaHQuZGlyZWN0U3BlY3VsYXIrPWRpclJlZmxlY3RlZExpZ2h0LmRpcmVjdFNwZWN1bGFyO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgI2VuZGlmXHJcbiAgICAgICAgcmV0dXJuIHJlZmxlY3RlZExpZ2h0O1xyXG4gICAgfWA7XHJcbn1cclxuIiwiaW1wb3J0IHsgd2dzbFBhcnNlRGVmaW5lcyB9IGZyb20gXCIuLi8uLi9XZ3NsUHJlcHJvY2Vzc29yXCI7XHJcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGxpZ2h0Q29tbW9uKGRlZmluZXMpIHtcclxuXHRyZXR1cm4gd2dzbFBhcnNlRGVmaW5lc2BcclxuICAgIHN0cnVjdCBSZWZsZWN0ZWRMaWdodCB7XHJcbiAgICAgICAgZGlyZWN0RGlmZnVzZTp2ZWMzPGYzMj4sXHJcbiAgICAgICAgZGlyZWN0U3BlY3VsYXI6dmVjMzxmMzI+LFxyXG4gICAgICAgIGluZGlyZWN0RGlmZnVzZTp2ZWMzPGYzMj4sXHJcbiAgICAgICAgaW5kaXJlY3RTcGVjdWxhcjp2ZWMzPGYzMj4sXHJcbiAgICB9O1xyXG4gICAgc3RydWN0IEdlb21ldHJ5IHtcclxuICAgICAgICBwb3NpdGlvbjogdmVjMzxmMzI+LFxyXG4gICAgICAgIG5vcm1hbDogdmVjMzxmMzI+LFxyXG4gICAgICAgIHZpZXdEaXI6IHZlYzM8ZjMyPixcclxuICAgICAgICAjaWYgJHtkZWZpbmVzLlVTRV9DTEVBUkNPQVR9XHJcbiAgICAgICAgICAgIHZlYzMgY2xlYXJjb2F0Tm9ybWFsO1xyXG4gICAgICAgICNlbmRpZlxyXG4gICAgfTtcclxuICAgIGZuIGdldEFtYmllbnRMaWdodElycmFkaWFuY2UoYW1iaWVudExpZ2h0Q29sb3I6IHZlYzM8ZjMyPikgLT4gdmVjMzxmMzI+IHtcclxuICAgICAgICBsZXQgaXJyYWRpYW5jZSA9IGFtYmllbnRMaWdodENvbG9yO1xyXG4gICAgICAgIHJldHVybiBpcnJhZGlhbmNlO1xyXG4gICAgfVxyXG4gICAgZm4gZ2V0RGlzdGFuY2VBdHRlbnVhdGlvbihsaWdodERpc3RhbmNlOiBmMzIsIGN1dG9mZkRpc3RhbmNlOiBmMzIsIGRlY2F5RXhwb25lbnQ6IGYzMikgLT4gZjMyIHtcclxuICAgICAgICBpZiAoY3V0b2ZmRGlzdGFuY2UgPiAwLjAgJiYgZGVjYXlFeHBvbmVudCA+IDAuMCkge1xyXG4gICAgICAgICAgICBsZXQgeDpmMzIgPSBzYXR1cmF0ZSgtIGxpZ2h0RGlzdGFuY2UgLyBjdXRvZmZEaXN0YW5jZSArIDEuMCk7XHJcbiAgICAgICAgICAgIHJldHVybiBwb3coeCwgZGVjYXlFeHBvbmVudCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiAxLjA7XHJcbiAgICB9XHJcbiAgICBmbiBnZXRTcG90QXR0ZW51YXRpb24oY29uZUNvc2luZTogZjMyLCBwZW51bWJyYUNvc2luZTogZjMyLCBhbmdsZUNvc2luZTogZjMyKSAtPiBmMzIge1xyXG4gICAgICAgIHJldHVybiBzbW9vdGhzdGVwKGNvbmVDb3NpbmUsIHBlbnVtYnJhQ29zaW5lLCBhbmdsZUNvc2luZSk7XHJcbiAgICB9XHJcbiAgICBmbiBzaEdldElycmFkaWFuY2VBdCggbm9ybWFsOnZlYzM8ZjMyPiwgc2hDb2VmZmljaWVudHM6YXJyYXk8dmVjMzxmMzI+LDk+KS0+dmVjMzxmMzI+IHtcclxuICAgICAgICBsZXQgeDpmMzIgPSBub3JtYWwueDsgXHJcbiAgICAgICAgbGV0IHk6ZjMyID0gbm9ybWFsLnk7IFxyXG4gICAgICAgIGxldCB6OmYzMiA9IG5vcm1hbC56O1xyXG4gICAgICAgIHZhciByZXN1bHQ6dmVjMzxmMzI+ID0gc2hDb2VmZmljaWVudHNbIDAgXSAqIDAuODg2MjI3O1xyXG4gICAgICAgIHJlc3VsdCArPSBzaENvZWZmaWNpZW50c1sgMSBdICogMi4wICogMC41MTE2NjQgKiB5O1xyXG4gICAgICAgIHJlc3VsdCArPSBzaENvZWZmaWNpZW50c1sgMiBdICogMi4wICogMC41MTE2NjQgKiB6O1xyXG4gICAgICAgIHJlc3VsdCArPSBzaENvZWZmaWNpZW50c1sgMyBdICogMi4wICogMC41MTE2NjQgKiB4O1xyXG4gICAgICAgIHJlc3VsdCArPSBzaENvZWZmaWNpZW50c1sgNCBdICogMi4wICogMC40MjkwNDMgKiB4ICogeTtcclxuICAgICAgICByZXN1bHQgKz0gc2hDb2VmZmljaWVudHNbIDUgXSAqIDIuMCAqIDAuNDI5MDQzICogeSAqIHo7XHJcbiAgICAgICAgcmVzdWx0ICs9IHNoQ29lZmZpY2llbnRzWyA2IF0gKiAoIDAuNzQzMTI1ICogeiAqIHogLSAwLjI0NzcwOCApO1xyXG4gICAgICAgIHJlc3VsdCArPSBzaENvZWZmaWNpZW50c1sgNyBdICogMi4wICogMC40MjkwNDMgKiB4ICogejtcclxuICAgICAgICByZXN1bHQgKz0gc2hDb2VmZmljaWVudHNbIDggXSAqIDAuNDI5MDQzICogKCB4ICogeCAtIHkgKiB5ICk7XHJcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcclxuICAgIH1cclxuICAgIGZuIGludmVyc2VUcmFuc2Zvcm1EaXJlY3Rpb24oIGRpcjp2ZWMzPGYzMj4sIG1hdHJpeDptYXQ0eDQ8ZjMyPiApLT52ZWMzPGYzMj4ge1xyXG4gICAgICAgIHJldHVybiBub3JtYWxpemUoICggdmVjNDxmMzI+KCBkaXIsIDAuMCApICogbWF0cml4ICkueHl6ICk7XHJcbiAgICB9XHJcbiBgO1xyXG59XHJcbiIsImltcG9ydCB7IHdnc2xQYXJzZURlZmluZXMgfSBmcm9tIFwiLi4vLi4vV2dzbFByZXByb2Nlc3NvclwiO1xuZXhwb3J0IGZ1bmN0aW9uIGdldE5vcm1hbChkZWZpbmVzKSB7XG5cdHJldHVybiB3Z3NsUGFyc2VEZWZpbmVzYFxuICAgICAgZm4gZ2V0Tm9ybWFsKGlucHV0OkZyYWdJbnB1dCktPnZlYzM8ZjMyPntcbiAgICAgICAgdmFyIG5vcm1hbDp2ZWMzPGYzMj47XG4gICAgICAgICNpZiAke2RlZmluZXMuSEFTX05PUk1BTH1cbiAgICAgICAgICAgIG5vcm1hbD0gaW5wdXQubm9ybWFsO1xuICAgICAgICAjZWxzZVxuICAgICAgICAgIGxldCBwb3NfZHggPSBkcGR4KGlucHV0LndvcmxkUG9zKTtcbiAgICAgICAgICBsZXQgcG9zX2R5ID0gZHBkeShpbnB1dC53b3JsZFBvcyk7XG4gICAgICAgICAgbm9ybWFsID0gbm9ybWFsaXplKCBjcm9zcyhwb3NfZHksIHBvc19keCkgKTtcbiAgICAgICAgI2VuZGlmXG4gICAgICAgIHJldHVybiBub3JtYWwqKGYzMihpbnB1dC5mcm9udEZhY2luZykgKiAyLjAgLSAxLjApO1xuICAgICAgfVxuICAgIGA7XG59XG5leHBvcnQgZnVuY3Rpb24gZ2V0Tm9ybWFsQnlOb3JtYWxUZXh0dXJlKGRlZmluZXMpIHtcblx0cmV0dXJuIHdnc2xQYXJzZURlZmluZXNgXG4gICAgICBmbiBnZXROb3JtYWxCeU5vcm1hbFRleHR1cmUoaW5wdXQ6RnJhZ0lucHV0KS0+dmVjMzxmMzI+e1xuICAgICAgICB2YXIgbjp2ZWMzPGYzMj4gPSB0ZXh0dXJlU2FtcGxlKG5vcm1hbFRleHR1cmUsbm9ybWFsU2FtcGxlciwgaW5wdXQudXYpLnJnYjtcbiAgICAgICAgbGV0IHRibjptYXQzeDM8ZjMyPiA9Z2V0VEJOKGlucHV0KTtcbiAgICAgICAgbiA9IG5vcm1hbGl6ZSh0Ym4gKiAoMi4wICogbiAtIHZlYzMoMS4wKSkpO1xuICAgICAgICBuPW4qKGYzMihpbnB1dC5mcm9udEZhY2luZykgKiAyLjAgLSAxLjApO1xuICAgICAgICByZXR1cm4gbjtcbiAgICAgIH1cbiAgICBgO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGdldFRCTihkZWZpbmVzKSB7XG5cdHJldHVybiB3Z3NsUGFyc2VEZWZpbmVzYFxuICAgICAgICBmbiBnZXRUQk4oaW5wdXQ6RnJhZ0lucHV0KS0+bWF0M3gzPGYzMj57XG4gICAgICAgICNpZiAke2RlZmluZXMuSEFTX1RBTkdFTlR9XG4gICAgICAgICAgICBsZXQgdGJuOm1hdDN4MzxmMzI+ID0gaW5wdXQudGJuO1xuICAgICAgICAjZWxzZVxuICAgICAgICAgICAgbGV0IG5vcm1hbDp2ZWMzPGYzMj4gPW5vcm1hbGl6ZShpbnB1dC5ub3JtYWwpO1xuICAgICAgICAgICAgbGV0IHV2OnZlYzI8ZjMyPiA9IHNlbGVjdCgtaW5wdXQudXYsaW5wdXQudXYsaW5wdXQuZnJvbnRGYWNpbmcpO1xuICAgICAgICAgICAgICAvLyByZWY6IGh0dHA6Ly93d3cudGhldGVudGhwbGFuZXQuZGUvYXJjaGl2ZXMvMTE4MFxuICAgICAgICAgICAgICAvLyBnZXQgZWRnZSB2ZWN0b3JzIG9mIHRoZSBwaXhlbCB0cmlhbmdsZVxuICAgICAgICAgICAgICBsZXQgZHAxOnZlYzM8ZjMyPiA9ICB2ZWMzPGYzMj4oZHBkeChpbnB1dC53b3JsZFBvcy54KSwgZHBkeChpbnB1dC53b3JsZFBvcy55KSwgZHBkeChpbnB1dC53b3JsZFBvcy56KSk7XG4gICAgICAgICAgICAgIGxldCBkcDI6dmVjMzxmMzI+ID0gIHZlYzM8ZjMyPihkcGR5KGlucHV0LndvcmxkUG9zLngpLCBkcGR5KGlucHV0LndvcmxkUG9zLnkpLCBkcGR5KGlucHV0LndvcmxkUG9zLnopKTtcbiAgICAgICAgICAgICAgbGV0IGR1djE6dmVjMjxmMzI+ID0gZHBkeCh1dik7XG4gICAgICAgICAgICAgIGxldCBkdXYyOnZlYzI8ZjMyPiA9IGRwZHkodXYpO1xuXG4gICAgICAgICAgICAgIC8vIHNvbHZlIHRoZSBsaW5lYXIgc3lzdGVtXG4gICAgICAgICAgICAgIGxldCBkcDJwZXJwOnZlYzM8ZjMyPiA9IGNyb3NzKGRwMiwgbm9ybWFsKTtcbiAgICAgICAgICAgICAgbGV0IGRwMXBlcnA6dmVjMzxmMzI+ID0gY3Jvc3Mobm9ybWFsLCBkcDEpO1xuICAgICAgICAgICAgICBsZXQgdGFuZ2VudDp2ZWMzPGYzMj4gPSBkcDJwZXJwICogZHV2MS54ICsgZHAxcGVycCAqIGR1djIueDtcbiAgICAgICAgICAgICAgbGV0IGJpbm9ybWFsOnZlYzM8ZjMyPiA9IGRwMnBlcnAgKiBkdXYxLnkgKyBkcDFwZXJwICogZHV2Mi55O1xuICAgICAgICAgICAgICAvLyBjb25zdHJ1Y3QgYSBzY2FsZS1pbnZhcmlhbnQgZnJhbWUgXG4gICAgICAgICAgICAgIGxldCByZXN1bHQ6ZjMyPW1heChkb3QodGFuZ2VudCwgdGFuZ2VudCksIGRvdChiaW5vcm1hbCwgYmlub3JtYWwpKTtcbiAgICAgICAgICAgICAgbGV0IGludm1heDpmMzIgPSAxLjAvc3FydChyZXN1bHQpO1xuICAgICAgICAgICAgICBsZXQgdGJuOm1hdDN4MzxmMzI+ID0gbWF0M3gzPGYzMj4odGFuZ2VudCAqIGludm1heCwgYmlub3JtYWwgKiBpbnZtYXgsIG5vcm1hbCk7XG4gICAgICAgICNlbmRpZlxuICAgICAgICByZXR1cm4gdGJuO1xuICAgICAgfVxuICBgO1xufVxuIiwiaW1wb3J0IHsgd2dzbFBhcnNlRGVmaW5lcyB9IGZyb20gXCIuLi8uLi9XZ3NsUHJlcHJvY2Vzc29yXCI7XHJcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGJyZGYoZGVmaW5lcykge1xyXG5cdHJldHVybiB3Z3NsUGFyc2VEZWZpbmVzYFxyXG4gICAgICAgICNpZiAke2RlZmluZXMuVVNFX1NIRUVOfVxyXG4gICAgICAgICAgICAgICAgZm4gRF9DaGFybGllKCByb3VnaG5lc3M6ZjMyLGRvdE5IOmYzMiApLT5mMzIge1xyXG4gICAgICAgICAgICAgICAgICAgIGxldCBhbHBoYTpmMzIgPSBwb3cyKCByb3VnaG5lc3MgKTtcclxuICAgICAgICAgICAgICAgICAgICBsZXQgaW52QWxwaGE6ZjMyID0gMS4wIC8gYWxwaGE7XHJcbiAgICAgICAgICAgICAgICAgICAgbGV0IGNvczJoOmYzMiA9IGRvdE5IICogZG90Tkg7XHJcbiAgICAgICAgICAgICAgICAgICAgbGV0IHNpbjJoOmYzMiA9IG1heCggMS4wIC0gY29zMmgsIDAuMDA3ODEyNSApO1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiAoIDIuMCArIGludkFscGhhICkgKiBwb3coIHNpbjJoLCBpbnZBbHBoYSAqIDAuNSApIC8gKCAyLjAgKiBQSSApO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZm4gVl9OZXViZWx0KCBkb3ROVjpmMzIsIGRvdE5MOmYzMiApLT5mMzIge1xyXG4gICAgICAgICAgICAgICAgICAgIHJldHVybiBzYXR1cmF0ZSggMS4wIC8gKCA0LjAgKiAoIGRvdE5MICsgZG90TlYgLSBkb3ROTCAqIGRvdE5WICkgKSApO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgZm4gQlJERl9TaGVlbihsaWdodERpcjp2ZWMzPGYzMj4sIHZpZXdEaXI6dmVjMzxmMzI+LCBub3JtYWw6dmVjMzxmMzI+LHNoZWVuQ29sb3I6dmVjMzxmMzI+LHNoZWVuUm91Z2huZXNzOmYzMiApLT52ZWMzPGYzMj4ge1xyXG4gICAgICAgICAgICAgICAgICAgIGxldCBoYWxmRGlyOnZlYzM8ZjMyPiA9IG5vcm1hbGl6ZSggbGlnaHREaXIgKyB2aWV3RGlyICk7XHJcbiAgICAgICAgICAgICAgICAgICAgbGV0IGRvdE5MOmYzMiA9IHNhdHVyYXRlKCBkb3QoIG5vcm1hbCwgbGlnaHREaXIgKSApO1xyXG4gICAgICAgICAgICAgICAgICAgIGxldCBkb3ROVjpmMzIgPSBzYXR1cmF0ZSggZG90KCBub3JtYWwsIHZpZXdEaXIgKSApO1xyXG4gICAgICAgICAgICAgICAgICAgIGxldCBkb3ROSDpmMzIgPSBzYXR1cmF0ZSggZG90KCBub3JtYWwsIGhhbGZEaXIgKSApO1xyXG4gICAgICAgICAgICAgICAgICAgIGxldCBEOmYzMiA9IERfQ2hhcmxpZSggc2hlZW5Sb3VnaG5lc3MsIGRvdE5IICk7XHJcbiAgICAgICAgICAgICAgICAgICAgbGV0IFY6ZjMyID0gVl9OZXViZWx0KCBkb3ROViwgZG90TkwgKTtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gc2hlZW5Db2xvciAqICggRCAqIFYgKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAjZW5kaWZcclxuICAgICAgICBmbiBCUkRGX0xhbWJlcnQoZGlmZnVzZUNvbG9yOnZlYzM8ZjMyPiktPnZlYzM8ZjMyPiB7XHJcblxyXG4gICAgICAgICAgICByZXR1cm4gUkVDSVBST0NBTF9QSSAqIGRpZmZ1c2VDb2xvcjtcclxuXHJcbiAgICAgICAgfSAvLyB2YWxpZGF0ZWRcclxuXHJcbiAgICAgICAgZm4gRl9TY2hsaWNrKCBmMDp2ZWMzPGYzMj4sIGRvdFZIOmYzMiApLT52ZWMzPGYzMj4ge1xyXG5cclxuICAgICAgICAgICAgLy8gT3JpZ2luYWwgYXBwcm94aW1hdGlvbiBieSBDaHJpc3RvcGhlIFNjaGxpY2sgJzk0XHJcbiAgICAgICAgICAgIC8vIGZsb2F0IGZyZXNuZWwgPSBwb3coIDEuMCAtIGRvdFZILCA1LjAgKTtcclxuXHJcbiAgICAgICAgICAgIC8vIE9wdGltaXplZCB2YXJpYW50IChwcmVzZW50ZWQgYnkgRXBpYyBhdCBTSUdHUkFQSCAnMTMpXHJcbiAgICAgICAgICAgIC8vIGh0dHBzOi8vY2RuMi51bnJlYWxlbmdpbmUuY29tL1Jlc291cmNlcy9maWxlcy8yMDEzU2lnZ3JhcGhQcmVzZW50YXRpb25zTm90ZXMtMjY5MTU3MzgucGRmXHJcbiAgICAgICAgICAgbGV0IGZyZXNuZWwgPSBleHAyKCAoIC0gNS41NTQ3MyAqIGRvdFZIIC0gNi45ODMxNiApICogZG90VkggKTtcclxuICAgICAgICAgICByZXR1cm4gKCAxLjAgLSBmMCApICogZnJlc25lbCArIGYwO1xyXG5cclxuICAgICAgICB9IC8vIHZhbGlkYXRlZFxyXG5cclxuICAgICAgICBmbiBTY2hsaWNrX3RvX0YwKGY6dmVjMzxmMzI+LCBmOTA6ZjMyLCBkb3RWSDpmMzIgKS0+dmVjMzxmMzI+IHtcclxuICAgICAgICAgICAgbGV0IHg6ZjMyID0gY2xhbXAoIDEuMCAtIGRvdFZILCAwLjAsIDEuMCApO1xyXG4gICAgICAgICAgICBsZXQgeDI6ZjMyID0geCAqIHg7XHJcbiAgICAgICAgICAgIGxldCB4NTpmMzIgPSBjbGFtcCggeCAqIHgyICogeDIsIDAuMCwgMC45OTk5ICk7XHJcblxyXG4gICAgICAgICAgICByZXR1cm4gKCBmIC0gdmVjMyggZjkwICkgKiB4NSApIC8gKCAxLjAgLSB4NSApO1xyXG4gICAgICAgIH1cclxuICAgICAgICBmbiBWX0dHWF9TbWl0aENvcnJlbGF0ZWQoIGFscGhhOmYzMiwgZG90Tkw6ZjMyLGRvdE5WOmYzMiApLT5mMzIge1xyXG5cclxuICAgICAgICAgICAgbGV0IGEyIDpmMzI9IHBvdzIoIGFscGhhICk7XHJcblxyXG4gICAgICAgICAgICBsZXQgZ3Y6ZjMyID0gZG90TkwgKiBzcXJ0KCBhMiArICggMS4wIC0gYTIgKSAqIHBvdzIoIGRvdE5WICkgKTtcclxuICAgICAgICAgICAgbGV0IGdsOmYzMiA9IGRvdE5WICogc3FydCggYTIgKyAoIDEuMCAtIGEyICkgKiBwb3cyKCBkb3ROTCApICk7XHJcblxyXG4gICAgICAgICAgICByZXR1cm4gMC41IC8gbWF4KChndiArIGdsKSwgMC4wMDAwMDAwMDEgKTtcclxuXHJcbiAgICAgICAgfVxyXG4gICAgICAgIGZuIERfR0dYKCBhbHBoYTpmMzIsIGRvdE5IOmYzMiApLT5mMzIge1xyXG5cclxuICAgICAgICAgICAgbGV0IGEyOmYzMiA9IHBvdzIoIGFscGhhICk7XHJcblxyXG4gICAgICAgICAgICBsZXQgZGVub206ZjMyID0gcG93MiggZG90TkggKSAqICggYTIgLSAxLjAgKSArIDEuMDsgLy8gYXZvaWQgYWxwaGEgPSAwIHdpdGggZG90TkggPSAxXHJcblxyXG4gICAgICAgICAgICByZXR1cm4gUkVDSVBST0NBTF9QSSAqIGEyIC8gcG93MiggZGVub20gKTtcclxuXHJcbiAgICAgICAgfVxyXG4gICAgICAgIGZuIEJSREZfR0dYKCBsaWdodERpcjp2ZWMzPGYzMj4sIHZpZXdEaXI6dmVjMzxmMzI+LCBub3JtYWw6dmVjMzxmMzI+LCBmMDp2ZWMzPGYzMj4sICByb3VnaG5lc3M6ZjMyICktPnZlYzM8ZjMyPiB7XHJcblxyXG4gICAgICAgICAgICBsZXQgYWxwaGE6ZjMyID0gcG93Miggcm91Z2huZXNzICk7IC8vIFVFNCdzIHJvdWdobmVzc1xyXG5cclxuICAgICAgICAgICAgbGV0IGhhbGZEaXIgPSBub3JtYWxpemUoIGxpZ2h0RGlyICsgdmlld0RpciApO1xyXG5cclxuICAgICAgICAgICAgbGV0IGRvdE5MOmYzMiA9IHNhdHVyYXRlKCBkb3QoIG5vcm1hbCwgbGlnaHREaXIgKSApO1xyXG4gICAgICAgICAgICBsZXQgZG90TlY6ZjMyID0gc2F0dXJhdGUoIGRvdCggbm9ybWFsLCB2aWV3RGlyICkgKTtcclxuICAgICAgICAgICAgbGV0IGRvdE5IOmYzMiA9IHNhdHVyYXRlKCBkb3QoIG5vcm1hbCwgaGFsZkRpciApICk7XHJcbiAgICAgICAgICAgIGxldCBkb3RWSDpmMzIgPSBzYXR1cmF0ZSggZG90KCBsaWdodERpciwgaGFsZkRpciApICk7XHJcblxyXG4gICAgICAgICAgICBsZXQgRiA9IEZfU2NobGljayggZjAsICBkb3RWSCApO1xyXG5cclxuICAgICAgICAgICAgbGV0IFYgPSBWX0dHWF9TbWl0aENvcnJlbGF0ZWQoIGFscGhhLCBkb3ROTCwgZG90TlYgKTtcclxuXHJcbiAgICAgICAgICAgIGxldCBEID0gRF9HR1goIGFscGhhLCBkb3ROSCApO1xyXG5cclxuICAgICAgICAgICAgcmV0dXJuIEYgKiAoIFYgKiBEICk7XHJcblxyXG4gICAgICAgIH1cclxuICAgICAgICBmbiBkaXJlY3RfUGh5c2ljYWwoIGRpcmVjdExpZ2h0OkluY2lkZW50TGlnaHQsIGdlb21ldHJ5Okdlb21ldHJ5LG1hdGVyaWFsOlBoeXNpY2FsTWF0ZXJpYWwpLT5SZWZsZWN0ZWRMaWdodCB7XHJcbiAgICAgICAgICAgIHZhciByZWZsZWN0ZWRMaWdodDpSZWZsZWN0ZWRMaWdodDtcclxuICAgICAgICAgICAgbGV0IGRvdE5MOmYzMiA9IHNhdHVyYXRlKGRvdCggZ2VvbWV0cnkubm9ybWFsLGdlb21ldHJ5LnZpZXdEaXIpKTtcclxuICAgICAgICAgICAgbGV0IGlycmFkaWFuY2U6dmVjMzxmMzI+ID0gZG90TkwgKiBkaXJlY3RMaWdodC5jb2xvciozLjE0MTU5MjY7XHJcbiAgICAgICAgICAgIHJlZmxlY3RlZExpZ2h0LmRpcmVjdFNwZWN1bGFyID0gaXJyYWRpYW5jZSAqIEJSREZfR0dYKCBkaXJlY3RMaWdodC5kaXJlY3Rpb24sIGdlb21ldHJ5LnZpZXdEaXIsIGdlb21ldHJ5Lm5vcm1hbCwgbWF0ZXJpYWwuc3BlY3VsYXJDb2xvciwgbWF0ZXJpYWwucm91Z2huZXNzICk7XHJcbiAgICAgICAgICAgIHJlZmxlY3RlZExpZ2h0LmRpcmVjdERpZmZ1c2UgPSBpcnJhZGlhbmNlICogQlJERl9MYW1iZXJ0KCBtYXRlcmlhbC5kaWZmdXNlQ29sb3IgKTtcclxuICAgICAgICAgICAgcmV0dXJuIHJlZmxlY3RlZExpZ2h0O1xyXG4gICAgICAgIH1cclxuICBgO1xyXG59XHJcbiIsImltcG9ydCB7IHdnc2xQYXJzZURlZmluZXMgfSBmcm9tIFwiLi4vLi4vV2dzbFByZXByb2Nlc3NvclwiO1xyXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBpYmwoZGVmaW5lcykge1xyXG5cdHJldHVybiB3Z3NsUGFyc2VEZWZpbmVzYFxyXG4gIGZuIGdldExpZ2h0UHJvYmVSYWRpYW5jZSggdmlld0Rpcjp2ZWMzPGYzMj4sbm9ybWFsOnZlYzM8ZjMyPiwgcm91Z2huZXNzOmYzMiApLT52ZWMzPGYzMj57XHJcbiAgICB2YXIgcmVmbGVjdFZlYzp2ZWMzPGYzMj4gPSByZWZsZWN0KCAtdmlld0Rpciwgbm9ybWFsICk7XHJcbiAgICByZWZsZWN0VmVjLnggPSAtcmVmbGVjdFZlYy54OyAvLyBUZXh0dXJlQ3ViZSBpcyBsZWZ0LWhhbmQsc28geCBuZWVkIGludmVyc2VcclxuICAgIGxldCBtaXBDb3VudDpmMzIgPSAxMC4wOyAvLyByZXNvbHV0aW9uIG9mIDI1NngyNTZcclxuICAgIGxldCBsb2Q6ZjMyID0gcm91Z2huZXNzICogbWlwQ291bnQ7XHJcbiAgICBsZXQgc3BlY3VsYXJMaWdodDp2ZWMzPGYzMj4gPSB0ZXh0dXJlU2FtcGxlTGV2ZWwoc3BlY3VsYXJFbnZUZXh0dXJlLHNwZWN1bGFyRW52U2FtcGxlciwgcmVmbGVjdFZlYywgbG9kKS5yZ2I7XHJcbiAgICByZXR1cm4gc3BlY3VsYXJMaWdodDtcclxuICB9XHJcbiAgZm4gZ2V0TGlnaHRQcm9iZUlycmFkaWFuY2UoIGxpZ2h0UHJvYmU6YXJyYXk8dmVjMzxmMzI+LDk+LCBub3JtYWw6dmVjMzxmMzI+KS0+dmVjMzxmMzI+IHtcclxuICAgIHZhciB3b3JsZE5vcm1hbDp2ZWMzPGYzMj4gPSBub3JtYWw7XHJcbiAgICB3b3JsZE5vcm1hbC54ID0gLW5vcm1hbC54O1xyXG4gICAgdmFyIGlycmFkaWFuY2U6dmVjMzxmMzI+ID0gbGlnaHRQcm9iZVswXTtcclxuICAgIGlycmFkaWFuY2UrPWxpZ2h0UHJvYmVbMV0gKiAobm9ybWFsLnkpO1xyXG4gICAgaXJyYWRpYW5jZSs9bGlnaHRQcm9iZVsyXSAqIChub3JtYWwueikgO1xyXG4gICAgaXJyYWRpYW5jZSs9bGlnaHRQcm9iZVszXSAqIChub3JtYWwueCkgO1xyXG5cclxuICAgIGlycmFkaWFuY2UrPWxpZ2h0UHJvYmVbNF0gKiAobm9ybWFsLnkgKiBub3JtYWwueCkgO1xyXG4gICAgaXJyYWRpYW5jZSs9bGlnaHRQcm9iZVs1XSAqIChub3JtYWwueSAqIG5vcm1hbC56KSA7XHJcbiAgICBpcnJhZGlhbmNlKz1saWdodFByb2JlWzZdICogKDMuMCAqIG5vcm1hbC56ICogbm9ybWFsLnogLSAxLjApO1xyXG4gICAgaXJyYWRpYW5jZSs9bGlnaHRQcm9iZVs3XSAqIChub3JtYWwueiAqIG5vcm1hbC54KSA7XHJcbiAgICBpcnJhZGlhbmNlKz1saWdodFByb2JlWzhdICogKG5vcm1hbC54ICogbm9ybWFsLnggLSBub3JtYWwueSAqIG5vcm1hbC55KTtcclxuXHJcbiAgICByZXR1cm4gbWF4KGlycmFkaWFuY2UsIHZlYzM8ZjMyPigwLjAsMC4wLDAuMCkpO1xyXG4gIH1cclxuICBmbiBERkdBcHByb3goIHNwZWN1bGFyQ29sb3I6dmVjMzxmMzI+LCByb3VnaG5lc3M6ZjMyLGRvdE5WOmYzMiApLT52ZWMzPGYzMj4ge1xyXG4gICAgY29uc3QgYzA6dmVjNDxmMzI+ID0gdmVjNDxmMzI+KCAtIDEsIC0gMC4wMjc1LCAtIDAuNTcyLCAwLjAyMiApO1xyXG4gICAgbGV0IGMxOnZlYzQ8ZjMyPiA9IHZlYzQ8ZjMyPiggMSwgMC4wNDI1LCAxLjA0LCAtIDAuMDQgKTtcclxuICAgIGxldCByOnZlYzQ8ZjMyPiA9IHJvdWdobmVzcyAqIGMwICsgYzE7XHJcbiAgICBsZXQgYTAwNDpmMzIgPSBtaW4oIHIueCAqIHIueCwgZXhwMiggLSA5LjI4ICogZG90TlYgKSApICogci54ICsgci55O1xyXG4gICAgbGV0IGZhYjp2ZWMyPGYzMj4gPSB2ZWMyPGYzMj4oIC0gMS4wNCwgMS4wNCApICogYTAwNCArIHIuenc7XHJcbiAgICByZXR1cm4gc3BlY3VsYXJDb2xvciAqIGZhYi54ICsgZmFiLnk7XHJcbiAgfVxyXG4gIC8v6Ze05o6l5YWJ54WnXHJcbiAgZm4gaW5kaXJlY3REaWZmdXNlX1BoeXNpY2FsKGdlb21ldHJ5Okdlb21ldHJ5LCBtYXRlcmlhbDpQaHlzaWNhbE1hdGVyaWFsICktPlJlZmxlY3RlZExpZ2h0IHtcclxuICAgICAgdmFyIHJlZmxlY3RlZExpZ2h0OlJlZmxlY3RlZExpZ2h0O1xyXG4gICAgICB2YXIgaXJyYWRpYW5jZTp2ZWMzPGYzMj4gPSBsaWdodFVuaWZvcm1zLmFtYmllbnQueHl6KmxpZ2h0VW5pZm9ybXMuYW1iaWVudC53O1xyXG4gICAgICBpcnJhZGlhbmNlICo9IFBJO1xyXG4gICAgICByZWZsZWN0ZWRMaWdodC5pbmRpcmVjdERpZmZ1c2UgKz0gaXJyYWRpYW5jZSAqIEJSREZfTGFtYmVydCggbWF0ZXJpYWwuZGlmZnVzZUNvbG9yICk7XHJcbiAgICAgIHJldHVybiByZWZsZWN0ZWRMaWdodDtcclxuICB9XHJcbiAgLy/pl7TmjqXpq5jlhYlcclxuICBmbiBpbmRpcmVjdFNwZWN1bGFyX1BoeXNpY2FsKGdlb21ldHJ5Okdlb21ldHJ5LCBtYXRlcmlhbDpQaHlzaWNhbE1hdGVyaWFsKS0+UmVmbGVjdGVkTGlnaHQge1xyXG4gICAgICB2YXIgcmVmbGVjdGVkTGlnaHQ6UmVmbGVjdGVkTGlnaHQ7XHJcbiAgICAgIC8vIElCTCBzcGVjdWxhclxyXG4gICAgICBsZXQgcmFkaWFuY2U6dmVjMzxmMzI+ID0gZ2V0TGlnaHRQcm9iZVJhZGlhbmNlKGdlb21ldHJ5LnZpZXdEaXIsIGdlb21ldHJ5Lm5vcm1hbCwgbWF0ZXJpYWwucm91Z2huZXNzKTtcclxuICAgICAgbGV0IHJhZGlhbmNlQXR0ZW51YXRpb246ZjMyID0gMS4wO1xyXG4gICAgICByZWZsZWN0ZWRMaWdodC5pbmRpcmVjdFNwZWN1bGFyICs9IHJhZGlhbmNlQXR0ZW51YXRpb24gKiByYWRpYW5jZSAqIERGR0FwcHJveChtYXRlcmlhbC5zcGVjdWxhckNvbG9yLCBtYXRlcmlhbC5yb3VnaG5lc3MsIGdlb21ldHJ5LmRvdE5WICk7XHJcbiAgICAgIHJldHVybiByZWZsZWN0ZWRMaWdodDtcclxuICAgIH1cclxuICBgO1xyXG59XHJcbiIsImltcG9ydCB7IHdnc2xQYXJzZURlZmluZXMgfSBmcm9tIFwiLi4vLi4vV2dzbFByZXByb2Nlc3NvclwiO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gcGJyRnVuY3Rpb24oZGVmaW5lcykge1xyXG5cdHJldHVybiB3Z3NsUGFyc2VEZWZpbmVzYFxyXG5cclxuICAgICNpZiAke2RlZmluZXMuRElUSEVSSU5HfVxyXG4gICAgICAgIGZuIGRpdGhlcmluZyhjb2xvcjp2ZWMzPGYzMj4gKS0+dmVjMzxmMzI+IHtcclxuICAgICAgICAgICAgbGV0IGdyaWRfcG9zaXRpb246ZjMyID0gcmFuZCggZ2xfRnJhZ0Nvb3JkLnh5ICk7XHJcbiAgICAgICAgICAgIGxldCBkaXRoZXJfc2hpZnRfUkdCOnZlYzM8ZjMyPiA9IHZlYzM8ZjMyPiggMC4yNSAvIDI1NS4wLCAtMC4yNSAvIDI1NS4wLCAwLjI1IC8gMjU1LjAgKTtcclxuICAgICAgICAgICAgZGl0aGVyX3NoaWZ0X1JHQiA9IG1peCggMi4wICogZGl0aGVyX3NoaWZ0X1JHQiwgLTIuMCAqIGRpdGhlcl9zaGlmdF9SR0IsIGdyaWRfcG9zaXRpb24gKTtcclxuICAgICAgICAgICAgcmV0dXJuIGNvbG9yICsgZGl0aGVyX3NoaWZ0X1JHQjtcclxuICAgICAgICB9XHJcbiAgICAjZW5kaWZcclxuXHJcbiAgICAjaWYgJHtkZWZpbmVzLlVTRV9JUklERVNDRU5DRX1cclxuICAgICAgICBmbiBCUkRGX0dHWF9JcmlkZXNjZW5jZSggbGlnaHREaXI6dmVjMzxmMzI+LCB2aWV3RGlyOnZlYzM8ZjMyPixub3JtYWw6dmVjMzxmMzI+LCBmMDp2ZWMzPGYzMj4sIGY5MDpmMzIsaXJpZGVzY2VuY2U6ZjMyLCBpcmlkZXNjZW5jZUZyZXNuZWw6dmVjMzxmMzI+LHJvdWdobmVzczpmMzIgKS0+dmVjMzxmMzI+IHtcclxuICAgICAgICAgICAgbGV0IGFscGhhOmYzMiA9IHBvdzIoIHJvdWdobmVzcyApO1xyXG4gICAgICAgICAgICBsZXQgaGFsZkRpcjp2ZWMzPGYzMj4gPSBub3JtYWxpemUoIGxpZ2h0RGlyICsgdmlld0RpciApO1xyXG4gICAgICAgICAgICBsZXQgZG90Tkw6ZjMyID0gc2F0dXJhdGUoIGRvdCggbm9ybWFsLCBsaWdodERpciApICk7XHJcbiAgICAgICAgICAgIGxldCBkb3ROVjpmMzIgPSBzYXR1cmF0ZSggZG90KCBub3JtYWwsIHZpZXdEaXIgKSApO1xyXG4gICAgICAgICAgICBsZXQgZG90Tkg6ZjMyID0gc2F0dXJhdGUoIGRvdCggbm9ybWFsLCBoYWxmRGlyICkgKTtcclxuICAgICAgICAgICAgbGV0IGRvdFZIOmYzMiA9IHNhdHVyYXRlKCBkb3QoIHZpZXdEaXIsIGhhbGZEaXIgKSApO1xyXG4gICAgICAgICAgICBsZXQgRjp2ZWMzPGYzMj4gPSBtaXgoIEZfU2NobGljayggZjAsIGY5MCwgZG90VkggKSwgaXJpZGVzY2VuY2VGcmVzbmVsLCBpcmlkZXNjZW5jZSApO1xyXG4gICAgICAgICAgICBsZXQgVjpmMzIgPSBWX0dHWF9TbWl0aENvcnJlbGF0ZWQoIGFscGhhLCBkb3ROTCwgZG90TlYgKTtcclxuICAgICAgICAgICAgbGV0IEQ6ZjMyID0gRF9HR1goIGFscGhhLCBkb3ROSCApO1xyXG4gICAgICAgICAgICByZXR1cm4gRiAqICggViAqIEQgKTtcclxuICAgICAgICB9XHJcbiAgICAjZW5kaWZcclxuXHJcbiAgICAjaWYgJHtkZWZpbmVzLlVTRV9TSEVFTn1cclxuICAgICAgICBmbiBEX0NoYXJsaWUoIHJvdWdobmVzczpmMzIsZG90Tkg6ZjMyICktPmYzMiB7XHJcbiAgICAgICAgICAgIGxldCBhbHBoYTpmMzIgPSBwb3cyKCByb3VnaG5lc3MgKTtcclxuICAgICAgICAgICAgbGV0IGludkFscGhhOmYzMiA9IDEuMCAvIGFscGhhO1xyXG4gICAgICAgICAgICBsZXQgY29zMmg6ZjMyID0gZG90TkggKiBkb3ROSDtcclxuICAgICAgICAgICAgbGV0IHNpbjJoOmYzMiA9IG1heCggMS4wIC0gY29zMmgsIDAuMDA3ODEyNSApO1xyXG4gICAgICAgICAgICByZXR1cm4gKCAyLjAgKyBpbnZBbHBoYSApICogcG93KCBzaW4yaCwgaW52QWxwaGEgKiAwLjUgKSAvICggMi4wICogUEkgKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZm4gVl9OZXViZWx0KCBkb3ROVjpmMzIsIGRvdE5MOmYzMiApLT5mMzIge1xyXG4gICAgICAgICAgICByZXR1cm4gc2F0dXJhdGUoIDEuMCAvICggNC4wICogKCBkb3ROTCArIGRvdE5WIC0gZG90TkwgKiBkb3ROViApICkgKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZm4gQlJERl9TaGVlbihsaWdodERpcjp2ZWMzPGYzMj4sIHZpZXdEaXI6dmVjMzxmMzI+LCBub3JtYWw6dmVjMzxmMzI+LHNoZWVuQ29sb3I6dmVjMzxmMzI+LHNoZWVuUm91Z2huZXNzOmYzMiApLT52ZWMzPGYzMj4ge1xyXG4gICAgICAgICAgICBsZXQgaGFsZkRpcjp2ZWMzPGYzMj4gPSBub3JtYWxpemUoIGxpZ2h0RGlyICsgdmlld0RpciApO1xyXG4gICAgICAgICAgICBsZXQgZG90Tkw6ZjMyID0gc2F0dXJhdGUoIGRvdCggbm9ybWFsLCBsaWdodERpciApICk7XHJcbiAgICAgICAgICAgIGxldCBkb3ROVjpmMzIgPSBzYXR1cmF0ZSggZG90KCBub3JtYWwsIHZpZXdEaXIgKSApO1xyXG4gICAgICAgICAgICBsZXQgZG90Tkg6ZjMyID0gc2F0dXJhdGUoIGRvdCggbm9ybWFsLCBoYWxmRGlyICkgKTtcclxuICAgICAgICAgICAgbGV0IEQ6ZjMyID0gRF9DaGFybGllKCBzaGVlblJvdWdobmVzcywgZG90TkggKTtcclxuICAgICAgICAgICAgbGV0IFY6ZjMyID0gVl9OZXViZWx0KCBkb3ROViwgZG90TkwgKTtcclxuICAgICAgICAgICAgcmV0dXJuIHNoZWVuQ29sb3IgKiAoIEQgKiBWICk7XHJcbiAgICAgICAgfVxyXG4gICAgI2VuZGlmXHJcblxyXG4gICAgI2lmICR7ZGVmaW5lcy5VU0VfSVJJREVTQ0VOQ0V9XHJcbiAgICAgICAgbGV0IFhZWl9UT19SRUM3MDk6IG1hdDN4MzxmMzI+ID0gbWF0M3gzPGYzMj4oXHJcbiAgICAgICAgMy4yNDA0NTQyLCAtMC45NjkyNjYwLCAwLjA1NTY0MzQsIC0xLjUzNzEzODUsIDEuODc2MDEwOCwgLTAuMjA0MDI1OSwgLTAuNDk4NTMxNCwgMC4wNDE1NTYwLCAxLjA1NzIyNTJcclxuICAgICAgICApO1xyXG4gICAgICAgIGZuIEZyZXNuZWwwVG9Jb3IoIGZyZXNuZWwwOnZlYzM8ZjMyPiApLT52ZWMzPGYzMj4ge1xyXG4gICAgICAgICAgICBsZXQgc3FydEYwOnZlYzM8ZjMyPiA9IHNxcnQoIGZyZXNuZWwwICk7XHJcbiAgICAgICAgICAgIHJldHVybiAoIHZlYzM8ZjMyPiggMS4wICkgKyBzcXJ0RjAgKSAvICggdmVjMzxmMzI+KCAxLjAgKSAtIHNxcnRGMCApO1xyXG4gICAgICAgIH1cclxuICAgICAgICBmbiBJb3JUb0ZyZXNuZWwwKHRyYW5zbWl0dGVkSW9yOnZlYzM8ZjMyPixpbmNpZGVudElvcjpmMzIgKS0+dmVjMzxmMzI+IHtcclxuICAgICAgICAgICAgcmV0dXJuIHBvdzJWZWN0b3IoICggdHJhbnNtaXR0ZWRJb3IgLSB2ZWMzPGYzMj4oIGluY2lkZW50SW9yICkgKSAvICggdHJhbnNtaXR0ZWRJb3IgKyB2ZWMzPGYzMj4oIGluY2lkZW50SW9yICkgKSApO1xyXG4gICAgICAgIH1cclxuICAgICAgICBmbiBJb3JUb0ZyZXNuZWwwKHRyYW5zbWl0dGVkSW9yOmYzMiwgaW5jaWRlbnRJb3I6ZjMyICktPmYzMiB7XHJcbiAgICAgICAgICAgIHJldHVybiBwb3cyVmVjdG9yKCAoIHRyYW5zbWl0dGVkSW9yIC0gaW5jaWRlbnRJb3IgKSAvICggdHJhbnNtaXR0ZWRJb3IgKyBpbmNpZGVudElvciApKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZm4gZXZhbFNlbnNpdGl2aXR5KE9QRDpmMzIsc2hpZnQ6dmVjMzxmMzI+ICktPnZlYzM8ZjMyPiB7XHJcbiAgICAgICAgICAgIGxldCBwaGFzZTpmMzIgPSAyLjAgKiBQSSAqIE9QRCAqIDEuMGUtOTtcclxuICAgICAgICAgICAgbGV0IHZhbDp2ZWMzPGYzMj4gPSB2ZWMzPGYzMj4oIDUuNDg1NmUtMTMsIDQuNDIwMWUtMTMsIDUuMjQ4MWUtMTMgKTtcclxuICAgICAgICAgICAgbGV0IHBvczp2ZWMzPGYzMj4gPSB2ZWMzPGYzMj4oIDEuNjgxMGUrMDYsIDEuNzk1M2UrMDYsIDIuMjA4NGUrMDYgKTtcclxuICAgICAgICAgICAgbGV0IHZhcnQ6dmVjMzxmMzI+ID0gdmVjMzxmMzI+KCA0LjMyNzhlKzA5LCA5LjMwNDZlKzA5LCA2LjYxMjFlKzA5ICk7XHJcbiAgICAgICAgICAgIGxldCB4eXo6dmVjMzxmMzI+ID0gdmFsICogc3FydCggMi4wICogUEkgKiB2YXJ0ICkgKiBjb3MoIHBvcyAqIHBoYXNlICsgc2hpZnQgKSAqIGV4cCggLSBwb3cyKCBwaGFzZSApICogdmFydCApO1xyXG4gICAgICAgICAgICB4eXoueCArPSA5Ljc0NzBlLTE0ICogc3FydCggMi4wICogUEkgKiA0LjUyODJlKzA5ICkgKiBjb3MoIDIuMjM5OWUrMDYgKiBwaGFzZSArIHNoaWZ0WyAwIF0gKSAqIGV4cCggLSA0LjUyODJlKzA5ICogcG93MiggcGhhc2UgKSApO1xyXG4gICAgICAgICAgICB4eXogLz0gMS4wNjg1ZS03O1xyXG4gICAgICAgICAgICBsZXQgcmdiOnZlYzM8ZjMyPiA9IFhZWl9UT19SRUM3MDkgKiB4eXo7XHJcbiAgICAgICAgICAgIHJldHVybiByZ2I7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGZuIGV2YWxJcmlkZXNjZW5jZShvdXRzaWRlSU9SOmYzMiwgZXRhMjpmMzIsY29zVGhldGExOmYzMix0aGluRmlsbVRoaWNrbmVzczpmMzIsYmFzZUYwOnZlYzM8ZjMyPiApLT52ZWMzPGYzMj4ge1xyXG4gICAgICAgICAgICB2YXIgSTp2ZWMzPGYzMj47XHJcbiAgICAgICAgICAgIGxldCBpcmlkZXNjZW5jZUlPUjpmMzIgPSBtaXgoIG91dHNpZGVJT1IsIGV0YTIsIHNtb290aHN0ZXAoIDAuMCwgMC4wMywgdGhpbkZpbG1UaGlja25lc3MgKSApO1xyXG4gICAgICAgICAgICBsZXQgc2luVGhldGEyU3E6ZjMyID0gcG93Miggb3V0c2lkZUlPUiAvIGlyaWRlc2NlbmNlSU9SICkgKiAoIDEuMCAtIHBvdzIoIGNvc1RoZXRhMSApICk7XHJcbiAgICAgICAgICAgIGxldCBjb3NUaGV0YTJTcTpmMzIgPSAxLjAgLSBzaW5UaGV0YTJTcTtcclxuICAgICAgICAgICAgaWYgKCBjb3NUaGV0YTJTcSA8IDAuMCApIHtcclxuICAgICAgICAgICAgICAgIHJldHVybiB2ZWMzPGYzMj4oIDEuMCApO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGxldCBjb3NUaGV0YTI6ZjMyID0gc3FydCggY29zVGhldGEyU3EgKTtcclxuICAgICAgICAgICAgbGV0IFIwOmYzMiA9IElvclRvRnJlc25lbDAoIGlyaWRlc2NlbmNlSU9SLCBvdXRzaWRlSU9SICk7XHJcbiAgICAgICAgICAgIGxldCBSMTI6ZjMyID0gRl9TY2hsaWNrKCBSMCwgMS4wLCBjb3NUaGV0YTEgKTtcclxuICAgICAgICAgICAgbGV0IFIyMTpmMzIgPSBSMTI7XHJcbiAgICAgICAgICAgIGxldCBUMTIxOmYzMiA9IDEuMCAtIFIxMjtcclxuICAgICAgICAgICAgbGV0IHBoaTEyOmYzMiA9IDAuMDtcclxuICAgICAgICAgICAgaWYgKCBpcmlkZXNjZW5jZUlPUiA8IG91dHNpZGVJT1IgKSBwaGkxMiA9IFBJO1xyXG4gICAgICAgICAgICBsZXQgcGhpMjE6ZjMyID0gUEkgLSBwaGkxMjtcclxuICAgICAgICAgICAgbGV0IGJhc2VJT1I6dmVjMzxmMzI+ID0gRnJlc25lbDBUb0lvciggY2xhbXAoIGJhc2VGMCwgMC4wLCAwLjk5OTkgKSApO1xyXG4gICAgICAgICAgICBsZXQgUjE6dmVjMzxmMzI+ID0gSW9yVG9GcmVzbmVsMCggYmFzZUlPUiwgaXJpZGVzY2VuY2VJT1IgKTtcclxuICAgICAgICAgICAgbGV0IFIyMzp2ZWMzPGYzMj4gPSBGX1NjaGxpY2soIFIxLCAxLjAsIGNvc1RoZXRhMiApO1xyXG4gICAgICAgICAgICBsZXQgcGhpMjM6dmVjMzxmMzI+ID0gdmVjMzxmMzI+KCAwLjAgKTtcclxuICAgICAgICAgICAgaWYgKCBiYXNlSU9SWyAwIF0gPCBpcmlkZXNjZW5jZUlPUiApIHBoaTIzWyAwIF0gPSBQSTtcclxuICAgICAgICAgICAgaWYgKCBiYXNlSU9SWyAxIF0gPCBpcmlkZXNjZW5jZUlPUiApIHBoaTIzWyAxIF0gPSBQSTtcclxuICAgICAgICAgICAgaWYgKCBiYXNlSU9SWyAyIF0gPCBpcmlkZXNjZW5jZUlPUiApIHBoaTIzWyAyIF0gPSBQSTtcclxuICAgICAgICAgICAgbGV0IE9QRDpmMzIgPSAyLjAgKiBpcmlkZXNjZW5jZUlPUiAqIHRoaW5GaWxtVGhpY2tuZXNzICogY29zVGhldGEyO1xyXG4gICAgICAgICAgICBsZXQgcGhpOnZlYzM8ZjMyPiA9IHZlYzM8ZjMyPiggcGhpMjEgKSArIHBoaTIzO1xyXG4gICAgICAgICAgICBsZXQgUjEyMzp2ZWMzPGYzMj4gPSBjbGFtcCggUjEyICogUjIzLCAxZS01LCAwLjk5OTkgKTtcclxuICAgICAgICAgICAgbGV0IHIxMjM6dmVjMzxmMzI+ID0gc3FydCggUjEyMyApO1xyXG4gICAgICAgICAgICBsZXQgUnM6dmVjMzxmMzI+ID0gcG93MiggVDEyMSApICogUjIzIC8gKCB2ZWMzPGYzMj4oIDEuMCApIC0gUjEyMyApO1xyXG4gICAgICAgICAgICBsZXQgQzA6dmVjMzxmMzI+ID0gUjEyICsgUnM7XHJcbiAgICAgICAgICAgIEkgPSBDMDtcclxuICAgICAgICAgICAgbGV0IENtOnZlYzM8ZjMyPiA9IFJzIC0gVDEyMTtcclxuICAgICAgICAgICAgZm9yICggbGV0IG0gOiB1MzIgPSAxO20gPD0gMjsgKysgbSApIHtcclxuICAgICAgICAgICAgICAgIENtICo9IHIxMjM7XHJcbiAgICAgICAgICAgICAgICBTbTp2ZWMzPGYzMj4gPSAyLjAgKiBldmFsU2Vuc2l0aXZpdHkoIGYzMiggbSApICogT1BELCBmMzIoIG0gKSAqIHBoaSApO1xyXG4gICAgICAgICAgICAgICAgSSArPSBDbSAqIFNtO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHJldHVybiBtYXgoIEksIHZlYzM8ZjMyPiggMC4wICkgKTtcclxuICAgICAgICB9XHJcbiAgICAjZW5kaWZcclxuICAgIGNvbnN0IGNsZWFyY29hdFNwZWN1bGFyOnZlYzM8ZjMyPiA9IHZlYzM8ZjMyPiggMC4wICk7XHJcbiAgICBjb25zdCBzaGVlblNwZWN1bGFyOnZlYzM8ZjMyPiA9IHZlYzM8ZjMyPiggMC4wICk7XHJcblxyXG4gICAgZm4gSUJMU2hlZW5CUkRGKCBub3JtYWw6dmVjMzxmMzI+LCB2aWV3RGlyOnZlYzM8ZjMyPiwgcm91Z2huZXNzOmYzMiApLT5mMzIge1xyXG4gICAgICAgIGxldCBkb3ROVjpmMzIgPSBzYXR1cmF0ZSggZG90KCBub3JtYWwsIHZpZXdEaXIgKSApO1xyXG4gICAgICAgIGxldCByMjpmMzIgPSByb3VnaG5lc3MgKiByb3VnaG5lc3M7XHJcbiAgICAgICAgbGV0IGE6ZjMyID1zZWxlY3QoLTguNDggKiByMiArIDE0LjMgKiByb3VnaG5lc3MgLSA5Ljk1LC0zMzkuMiAqIHIyICsgMTYxLjQgKiByb3VnaG5lc3MgLSAyNS45LHJvdWdobmVzcyA8IDAuMjUpO1xyXG4gICAgICAgIC8vbGV0IGE6ZjMyID0gcm91Z2huZXNzIDwgMC4yNSA/IC0zMzkuMiAqIHIyICsgMTYxLjQgKiByb3VnaG5lc3MgLSAyNS45IDogLTguNDggKiByMiArIDE0LjMgKiByb3VnaG5lc3MgLSA5Ljk1O1xyXG4gICAgICAgIGxldCBiOmYzMj1zZWxlY3QoMS45NyAqIHIyIC0gMy4yNyAqIHJvdWdobmVzcyArIDAuNzIsNDQuMCAqIHIyIC0gMjMuNyAqIHJvdWdobmVzcyArIDMuMjYsIHJvdWdobmVzcyA8IDAuMjUpO1xyXG4gICAgICAgIC8vbGV0IGI6ZjMyID0gcm91Z2huZXNzIDwgMC4yNSA/IDQ0LjAgKiByMiAtIDIzLjcgKiByb3VnaG5lc3MgKyAzLjI2IDogMS45NyAqIHIyIC0gMy4yNyAqIHJvdWdobmVzcyArIDAuNzI7XHJcbiAgICAgICAgLy9sZXQgREc6ZjMyID0gZXhwKCBhICogZG90TlYgKyBiICkgKyAoIHJvdWdobmVzcyA8IDAuMjUgPyAwLjAgOiAwLjEgKiAoIHJvdWdobmVzcyAtIDAuMjUgKSApO1xyXG4gICAgICAgIGxldCBERzpmMzIgPSBleHAoIGEgKiBkb3ROViArIGIgKSArIHNlbGVjdCgwLjEgKiAoIHJvdWdobmVzcyAtIDAuMjUgKSwwLjAscm91Z2huZXNzIDwgMC4yNSk7XHJcbiAgICAgICAgcmV0dXJuIHNhdHVyYXRlKCBERyAqIFJFQ0lQUk9DQUxfUEkgKTtcclxuICAgIH1cclxuICAgIGZuIERGR0FwcHJveCggc3BlY3VsYXJDb2xvcjp2ZWMzPGYzMj4sIHJvdWdobmVzczpmMzIsZG90TlY6ZjMyICktPnZlYzM8ZjMyPiB7XHJcbiAgICAgICAgY29uc3QgYzA6dmVjNDxmMzI+ID0gdmVjNDxmMzI+KCAtIDEsIC0gMC4wMjc1LCAtIDAuNTcyLCAwLjAyMiApO1xyXG4gICAgICAgIGxldCBjMTp2ZWM0PGYzMj4gPSB2ZWM0PGYzMj4oIDEsIDAuMDQyNSwgMS4wNCwgLSAwLjA0ICk7XHJcbiAgICAgICAgbGV0IHI6dmVjNDxmMzI+ID0gcm91Z2huZXNzICogYzAgKyBjMTtcclxuICAgICAgICBsZXQgYTAwNDpmMzIgPSBtaW4oIHIueCAqIHIueCwgZXhwMiggLSA5LjI4ICogZG90TlYgKSApICogci54ICsgci55O1xyXG4gICAgICAgIGxldCBmYWI6dmVjMjxmMzI+ID0gdmVjMjxmMzI+KCAtIDEuMDQsIDEuMDQgKSAqIGEwMDQgKyByLnp3O1xyXG4gICAgICAgIHJldHVybiBzcGVjdWxhckNvbG9yICogZmFiLnggKyBmYWIueTtcclxuICAgIH1cclxuICAgIGZuIEVudmlyb25tZW50QlJERiggbm9ybWFsOnZlYzM8ZjMyPix2aWV3RGlyOnZlYzM8ZjMyPixzcGVjdWxhckNvbG9yOnZlYzM8ZjMyPiwgc3BlY3VsYXJGOTA6ZjMyLHJvdWdobmVzczpmMzIgKS0+dmVjMzxmMzI+IHtcclxuICAgICAgICBsZXQgZmFiOnZlYzI8ZjMyPiA9IERGR0FwcHJveCggbm9ybWFsLCB2aWV3RGlyLCByb3VnaG5lc3MgKTtcclxuICAgICAgICByZXR1cm4gc3BlY3VsYXJDb2xvciAqIGZhYi54ICsgc3BlY3VsYXJGOTAgKiBmYWIueTtcclxuICAgIH1cclxuXHJcblxyXG4gICAgZm4gY29tcHV0ZVNwZWN1bGFyT2NjbHVzaW9uKCBkb3ROVjpmMzIsIGFtYmllbnRPY2NsdXNpb246ZjMyLCByb3VnaG5lc3M6ZjMyICktPmYzMiB7XHJcbiAgICAgICAgcmV0dXJuIHNhdHVyYXRlKCBwb3coIGRvdE5WICsgYW1iaWVudE9jY2x1c2lvbiwgZXhwMiggLSAxNi4wICogcm91Z2huZXNzIC0gMS4wICkgKSAtIDEuMCArIGFtYmllbnRPY2NsdXNpb24gKTtcclxuICAgIH1cclxuICAgICNpZiAke2RlZmluZXMuVVNFX1RSQU5TTUlTU0lPTn1cclxuXHJcbiAgICBmbiBnZXRWb2x1bWVUcmFuc21pc3Npb25SYXkoIG46dmVjMzxmMzI+LCB2OnZlYzM8ZjMyPiwgdGhpY2tuZXNzOmYzMiwgaW9yOmYzMiwgbW9kZWxNYXRyaXg6bWF0NHg0OmYzMiktPnZlYzM8ZjMyPiB7XHJcbiAgICAgICAgdmFyIHJlZnJhY3Rpb25WZWN0b3I6dmVjMzxmMzI+ID0gcmVmcmFjdCggLSB2LCBub3JtYWxpemUoIG4gKSwgMS4wIC8gaW9yICk7XHJcbiAgICAgICAgdmFyIG1vZGVsU2NhbGU6dmVjMzxmMzI+O1xyXG4gICAgICAgIG1vZGVsU2NhbGUueCA9IGxlbmd0aCggdmVjMzxmMzI+KCBtb2RlbE1hdHJpeFswXS54eXogKSApO1xyXG4gICAgICAgIG1vZGVsU2NhbGUueSA9IGxlbmd0aCggdmVjMzxmMzI+KCBtb2RlbE1hdHJpeFsxXS54eXogKSApO1xyXG4gICAgICAgIG1vZGVsU2NhbGUueiA9IGxlbmd0aCggdmVjMzxmMzI+KCBtb2RlbE1hdHJpeFsyXS54eXogKSApO1xyXG4gICAgICAgIHJldHVybiBub3JtYWxpemUoIHJlZnJhY3Rpb25WZWN0b3IgKSAqIHRoaWNrbmVzcyAqIG1vZGVsU2NhbGU7XHJcbiAgICB9XHJcbiAgICBmbiBhcHBseUlvclRvUm91Z2huZXNzKHJvdWdobmVzczpmMzIsIGlvcjpmMzIgKS0+ZjMyIHtcclxuICAgICAgICByZXR1cm4gcm91Z2huZXNzICogY2xhbXAoIGlvciAqIDIuMCAtIDIuMCwgMC4wLCAxLjAgKTtcclxuICAgIH1cclxuICAgIGZuIGdldFRyYW5zbWlzc2lvblNhbXBsZSggZnJhZ0Nvb3JkOnZlYzI8ZjMyPiwgcm91Z2huZXNzOmYzMixpb3I6ZjMyICktPnZlYzQ8ZjMyPiB7XHJcbiAgICAgICAgbGV0IGZyYW1lYnVmZmVyTG9kOmYzMiA9IGxvZzIoIG1hdGVyaWFsVW5pZm9ybS50cmFuc21pc3Npb25TYW1wbGVyU2l6ZS54ICkgKiBhcHBseUlvclRvUm91Z2huZXNzKCByb3VnaG5lc3MsIGlvciApO1xyXG4gICAgICAgIHJldHVybiB0ZXh0dXJlU2FtcGxlTGV2ZWwodHJhbnNtaXNzaW9uU2FtcGxlclRleHR1cmUsYmFzZVNhbXBsZXIsZnJhZ0Nvb3JkLnh5LCBmcmFtZWJ1ZmZlckxvZCk7XHJcblxyXG4gICAgfVxyXG4gICAgZm4gYXBwbHlWb2x1bWVBdHRlbnVhdGlvbiggcmFkaWFuY2U6dmVjMzx2ZWMzPiwgdHJhbnNtaXNzaW9uRGlzdGFuY2U6ZjMyLGF0dGVudWF0aW9uQ29sb3I6dmVjMzxmMzI+LGF0dGVudWF0aW9uRGlzdGFuY2U6ZjMyICktPnZlYzM8ZjMyPiB7XHJcbiAgICAgICAgaWYgKCBpc2luZiggYXR0ZW51YXRpb25EaXN0YW5jZSApICkge1xyXG4gICAgICAgICAgICByZXR1cm4gcmFkaWFuY2U7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGVsc2Uge1xyXG4gICAgICAgICAgICBsZXQgYXR0ZW51YXRpb25Db2VmZmljaWVudDp2ZWMzPGYzMj4gPSAtbG9nKCBhdHRlbnVhdGlvbkNvbG9yICkgLyBhdHRlbnVhdGlvbkRpc3RhbmNlO1xyXG4gICAgICAgICAgICBsZXQgdHJhbnNtaXR0YW5jZTp2ZWMzPGYzMj4gPSBleHAoIC0gYXR0ZW51YXRpb25Db2VmZmljaWVudCAqIHRyYW5zbWlzc2lvbkRpc3RhbmNlICk7XHJcbiAgICAgICAgICAgIHJldHVybiB0cmFuc21pdHRhbmNlICogcmFkaWFuY2U7XHJcbiAgICAgICAgfVxyXG4gICAgXHJcbiAgICB9XHJcbiAgICBmbiBnZXRJQkxWb2x1bWVSZWZyYWN0aW9uKCBuOnZlYzM8ZjMyPix2OnZlYzM8ZjMyPiwgcm91Z2huZXNzOmYzMiwgZGlmZnVzZUNvbG9yOnZlYzM8ZjMyPixzcGVjdWxhckNvbG9yOnZlYzM8ZjMyPiwgc3BlY3VsYXJGOTA6ZjMyLHBvc2l0aW9uOnZlYzM8ZjMyPiwgbW9kZWxNYXRyaXg6bWF0NHg0PGYzMj4sIHZpZXdNYXRyaXg6bWF0NHg0PGYzMj4scHJvak1hdHJpeDptYXQ0eDQ8ZjMyPixpb3I6ZjMyLCB0aGlja25lc3M6ZjMyLGF0dGVudWF0aW9uQ29sb3I6dmVjMzxmMzI+LGF0dGVudWF0aW9uRGlzdGFuY2U6ZjMyICktPnZlYzQ8ZjMyPiB7XHJcbiAgICAgICAgbGV0IHRyYW5zbWlzc2lvblJheTp2ZWMzPGYzMj4gPSBnZXRWb2x1bWVUcmFuc21pc3Npb25SYXkoIG4sIHYsIHRoaWNrbmVzcywgaW9yLCBtb2RlbE1hdHJpeCApO1xyXG4gICAgICAgIGxldCByZWZyYWN0ZWRSYXlFeGl0OnZlYzM8ZjMyPiA9IHBvc2l0aW9uICsgdHJhbnNtaXNzaW9uUmF5O1xyXG4gICAgICAgIGxldCBuZGNQb3M6dmVjNDxmMzI+ID0gcHJvak1hdHJpeCAqIHZpZXdNYXRyaXggKiB2ZWM0KCByZWZyYWN0ZWRSYXlFeGl0LCAxLjAgKTtcclxuICAgICAgICBsZXQgcmVmcmFjdGlvbkNvb3Jkczp2ZWMyPGYzMj4gPSBuZGNQb3MueHkgLyBuZGNQb3MudztcclxuICAgICAgICByZWZyYWN0aW9uQ29vcmRzICs9IDEuMDtcclxuICAgICAgICByZWZyYWN0aW9uQ29vcmRzIC89IDIuMDtcclxuICAgICAgICBsZXQgdHJhbnNtaXR0ZWRMaWdodDp2ZWM0PGYzMj4gPSBnZXRUcmFuc21pc3Npb25TYW1wbGUoIHJlZnJhY3Rpb25Db29yZHMsIHJvdWdobmVzcywgaW9yICk7XHJcbiAgICAgICAgbGV0IGF0dGVudWF0ZWRDb2xvcjp2ZWMzPGYzMj4gPSBhcHBseVZvbHVtZUF0dGVudWF0aW9uKCB0cmFuc21pdHRlZExpZ2h0LnJnYiwgbGVuZ3RoKCB0cmFuc21pc3Npb25SYXkgKSwgYXR0ZW51YXRpb25Db2xvciwgYXR0ZW51YXRpb25EaXN0YW5jZSApO1xyXG4gICAgICAgIGxldCBGOnZlYzM8ZjMyPiA9IEVudmlyb25tZW50QlJERiggbiwgdiwgc3BlY3VsYXJDb2xvciwgc3BlY3VsYXJGOTAsIHJvdWdobmVzcyApO1xyXG4gICAgICAgIHJldHVybiB2ZWM0PGYzMj4oICggMS4wIC0gRiApICogYXR0ZW51YXRlZENvbG9yICogZGlmZnVzZUNvbG9yLCB0cmFuc21pdHRlZExpZ2h0LmEgKTtcclxuICAgIH1cclxuICAgICNlbmRpZlxyXG5cclxuICAgICNpZiAke2RlZmluZXMuVVNFX0JVTVBURVhUVVJFfVxyXG4gICAgICAgIGZuIGRIZHh5X2Z3ZCgpLT52ZWMyPGYzMj4ge1xyXG4gICAgICAgICAgICBsZXQgZFNUZHg6dmVjMjxmMzI+ID0gZHBkeCggdlV2ICk7XHJcbiAgICAgICAgICAgIGxldCBkU1RkeTp2ZWMyPGYzMj4gPSBkcGR5KCB2VXYgKTtcclxuXHJcbiAgICAgICAgICAgIGxldCBIbGw6ZjMyID0gbWF0ZXJpYWxVbmlmb3JtLmJ1bXBTY2FsZSAqIHRleHR1cmVTYW1wbGUoYnVtcFRleHR1cmUsIGJhc2VTYW1wbGVyLCB2VXYpLng7XHJcbiAgICAgICAgICAgIGxldCBkQng6ZjMyID0gbWF0ZXJpYWxVbmlmb3JtLmJ1bXBTY2FsZSAqIHRleHR1cmVTYW1wbGUoYnVtcFRleHR1cmUsIGJhc2VTYW1wbGVyLCB2VXYgKyBkU1RkeCkueCAtIEhsbDtcclxuICAgICAgICAgICAgbGV0IGRCeTpmMzIgPSBtYXRlcmlhbFVuaWZvcm0uYnVtcFNjYWxlICogdGV4dHVyZVNhbXBsZShidW1wVGV4dHVyZSwgYmFzZVNhbXBsZXIsIHZVdiArIGRTVGR5KS54IC0gSGxsO1xyXG4gICAgICAgICAgICByZXR1cm4gdmVjMjxmMzI+KCBkQngsIGRCeSApO1xyXG4gICAgICAgIH1cclxuICAgICAgICBmbiBwZXJ0dXJiTm9ybWFsQXJiKCBzdXJmX3Bvczp2ZWMzPGYzMj4sIHN1cmZfbm9ybTp2ZWMzPGYzMj4sIGRIZHh5OnZlYzI8ZjMyPiwgZmFjZURpcmVjdGlvbjpmMzIgKS0+dmVjMzxmMzI+IHtcclxuICAgICAgICAgICAgbGV0IHZTaWdtYVg6dmVjMzxmMzI+ID0gZHBkeCggc3VyZl9wb3MueHl6ICk7XHJcbiAgICAgICAgICAgIGxldCB2U2lnbWFZOnZlYzM8ZjMyPiA9IGRwZHkoIHN1cmZfcG9zLnh5eiApO1xyXG4gICAgICAgICAgICBsZXQgdk46dmVjMzxmMzI+ID0gc3VyZl9ub3JtO1xyXG4gICAgICAgICAgICBsZXQgUjE6dmVjMzxmMzI+ID0gY3Jvc3MoIHZTaWdtYVksIHZOICk7XHJcbiAgICAgICAgICAgIGxldCBSMjp2ZWMzPGYzMj4gPSBjcm9zcyggdk4sIHZTaWdtYVggKTtcclxuICAgICAgICAgICAgbGV0IGZEZXQ6ZjMyID0gZG90KCB2U2lnbWFYLCBSMSApICogZmFjZURpcmVjdGlvbjtcclxuICAgICAgICAgICAgbGV0IHZHcmFkOnZlYzM8ZjMyPiA9IHNpZ24oIGZEZXQgKSAqICggZEhkeHkueCAqIFIxICsgZEhkeHkueSAqIFIyICk7XHJcbiAgICAgICAgICAgIHJldHVybiBub3JtYWxpemUoIGFicyggZkRldCApICogc3VyZl9ub3JtIC0gdkdyYWQgKTtcclxuICAgICAgICB9XHJcbiAgICAjZW5kaWZcclxuXHJcbiAgICAvLyEgZGVmaW5lZCAoIFVTRV9UQU5HRU5UICkgJiYgKCBkZWZpbmVkICggVEFOR0VOVFNQQUNFX05PUk1BTFRFWFRVUkUgKSB8fCBkZWZpbmVkICggVVNFX0NMRUFSQ09BVF9OT1JNQUxURVhUVVJFICkgKVxyXG4gICAgI2lmICR7KCFkZWZpbmVzLlVTRV9UQU5HRU5UICYmIGRlZmluZXMuVEFOR0VOVFNQQUNFX05PUk1BTFRFWFRVUkUpIHx8IGRlZmluZXMuVVNFX0NMRUFSQ09BVF9OT1JNQUxURVhUVVJFfVxyXG4gICAgZm4gcGVydHVyYk5vcm1hbDJBcmIoIGV5ZV9wb3M6dmVjMzxmMzI+LCBzdXJmX25vcm06dmVjMzxmMzI+LCB0ZXh0dXJlTjp2ZWMzPGYzMj4sIGZhY2VEaXJlY3Rpb246ZjMyICktPnZlYzM8ZjMyPiB7XHJcbiAgICAgICAgbGV0IHEwOnZlYzM8ZjMyPiA9IGRwZHgoIGV5ZV9wb3MueHl6ICk7XHJcbiAgICAgICAgbGV0IHExOnZlYzM8ZjMyPiA9IGRwZHkoIGV5ZV9wb3MueHl6ICk7XHJcbiAgICAgICAgbGV0IHN0MDp2ZWMyPGYzMj4gPSBkcGR4KCB2VXYuc3QgKTtcclxuICAgICAgICBsZXQgc3QxOnZlYzI8ZjMyPiA9IGRwZHkoIHZVdi5zdCApO1xyXG4gICAgICAgIGxldCBOOnZlYzM8ZjMyPiA9IHN1cmZfbm9ybTtcclxuICAgICAgICBsZXQgcTFwZXJwOnZlYzM8ZjMyPiA9IGNyb3NzKCBxMSwgTiApO1xyXG4gICAgICAgIGxldCBxMHBlcnA6dmVjMzxmMzI+ID0gY3Jvc3MoIE4sIHEwICk7XHJcbiAgICAgICAgbGV0IFQ6dmVjMzxmMzI+ID0gcTFwZXJwICogc3QwLnggKyBxMHBlcnAgKiBzdDEueDtcclxuICAgICAgICBsZXQgQjp2ZWMzPGYzMj4gPSBxMXBlcnAgKiBzdDAueSArIHEwcGVycCAqIHN0MS55O1xyXG4gICAgICAgIGxldCBkZXQ6ZjMyID0gbWF4KCBkb3QoIFQsIFQgKSwgZG90KCBCLCBCICkgKTtcclxuICAgICAgICBsZXQgc2NhbGU6ZjMyID0gKCBkZXQgPT0gMC4wICkgPyAwLjAgOiBmYWNlRGlyZWN0aW9uICogaW52ZXJzZXNxcnQoIGRldCApO1xyXG4gICAgICAgIHJldHVybiBub3JtYWxpemUoIFQgKiAoIHRleHR1cmVOLnggKiBzY2FsZSApICsgQiAqICggdGV4dHVyZU4ueSAqIHNjYWxlICkgKyBOICogdGV4dHVyZU4ueiApO1xyXG4gICAgfVxyXG4gICAgI2VuZGlmXHJcbiAgICBzdHJ1Y3QgTXVsdGlBbmRTaW5nbGVTY2F0dGVye1xyXG4gICAgICAgIG11bHRpU2NhdHRlcjp2ZWMzPGYzMj4sXHJcbiAgICAgICAgc2luZ2xlU2NhdHRlcjp2ZWMzPGYzMj5cclxuICAgIH1cclxuICAgI2lmICR7ZGVmaW5lcy5VU0VfSVJJREVTQ0VOQ0V9XHJcbiAgIC8vLy8vLy8vaW5vdXQgdmVjMyBzaW5nbGVTY2F0dGVyLCBpbm91dCB2ZWMzIG11bHRpU2NhdHRlclxyXG4gICAgICAgZm4gY29tcHV0ZU11bHRpc2NhdHRlcmluZ0lyaWRlc2NlbmNlKCBub3JtYWw6dmVjMzxmMzI+LCB2aWV3RGlyOnZlYzM8ZjMyPiwgc3BlY3VsYXJDb2xvcjp2ZWMzPGYzMj4sIHNwZWN1bGFyRjkwOmYzMiwgaXJpZGVzY2VuY2U6ZjMyLGlyaWRlc2NlbmNlRjA6dmVjMzxmMzI+LCByb3VnaG5lc3M6ZjMyICktPk11bHRpQW5kU2luZ2xlU2NhdHRlciB7XHJcbiAgICNlbHNlXHJcbiAgIC8vLy8vLy8vaW5vdXQgdmVjMyBzaW5nbGVTY2F0dGVyLCBpbm91dCB2ZWMzIG11bHRpU2NhdHRlclxyXG4gICAgICAgZm4gY29tcHV0ZU11bHRpc2NhdHRlcmluZyggbm9ybWFsOnZlYzM8ZjMyPix2aWV3RGlyOnZlYzM8ZjMyPiwgc3BlY3VsYXJDb2xvcjp2ZWMzPGYzMj4sIHNwZWN1bGFyRjkwOmYzMiwgcm91Z2huZXNzOmYzMiktPk11bHRpQW5kU2luZ2xlU2NhdHRlciB7XHJcbiAgICNlbmRpZlxyXG4gICBsZXQgZmFiOnZlYzI8ZjMyPiA9IERGR0FwcHJveCggbm9ybWFsLCB2aWV3RGlyLCByb3VnaG5lc3MgKTtcclxuXHJcbiAgIHZhciBtdWx0aUFuZFNpbmdsZVNjYXR0ZXI6TXVsdGlBbmRTaW5nbGVTY2F0dGVyO1xyXG5cclxuICAgI2lmICR7ZGVmaW5lcy5VU0VfSVJJREVTQ0VOQ0V9XHJcbiAgICAgICBsZXQgRnI6dmVjMzxmMzI+ID0gbWl4KCBzcGVjdWxhckNvbG9yLCBpcmlkZXNjZW5jZUYwLCBpcmlkZXNjZW5jZSApO1xyXG4gICAjZWxzZVxyXG4gICAgICAgbGV0IEZyOnZlYzM8ZjMyPiA9IHNwZWN1bGFyQ29sb3I7XHJcbiAgICNlbmRpZlxyXG4gICAgICAgbGV0IEZzc0Vzczp2ZWMzPGYzMj4gPSBGciAqIGZhYi54ICsgc3BlY3VsYXJGOTAgKiBmYWIueTtcclxuICAgICAgIGxldCBFc3M6ZjMyID0gZmFiLnggKyBmYWIueTtcclxuICAgICAgIGxldCBFbXM6ZjMyID0gMS4wIC0gRXNzO1xyXG4gICAgICAgbGV0IEZhdmc6dmVjMzxmMzI+ID0gRnIgKyAoIDEuMCAtIEZyICkgKiAwLjA0NzYxOTtcclxuICAgICAgIGxldCBGbXM6dmVjMzxmMzI+ID0gRnNzRXNzICogRmF2ZyAvICggMS4wIC0gRW1zICogRmF2ZyApO1xyXG4gICAgLy8gICAgc2luZ2xlU2NhdHRlciArPSBGc3NFc3M7XHJcbiAgICAvLyAgICBtdWx0aVNjYXR0ZXIgKz0gRm1zICogRW1zO1xyXG4gICAgICAgbXVsdGlBbmRTaW5nbGVTY2F0dGVyLm11bHRpU2NhdHRlcj1GbXMgKiBFbXM7XHJcbiAgICAgICBtdWx0aUFuZFNpbmdsZVNjYXR0ZXIuc2luZ2xlU2NhdHRlcj1Gc3NFc3M7XHJcbiAgICAgICByZXR1cm4gbXVsdGlBbmRTaW5nbGVTY2F0dGVyO1xyXG4gICB9XHJcbiAgIC8v55u05o6l5YWJ54WnXHJcbiAgIGZuIFJFX0RpcmVjdF9QaHlzaWNhbCggZGlyZWN0TGlnaHQ6SW5jaWRlbnRMaWdodCwgZ2VvbWV0cnk6R2VvbWV0cmljQ29udGV4dCwgIG1hdGVyaWFsOlBoeXNpY2FsTWF0ZXJpYWwpLT5SZWZsZWN0ZWRMaWdodCB7XHJcbiAgICAgICB2YXIgcmVmbGVjdGVkTGlnaHQ6UmVmbGVjdGVkTGlnaHQ7XHJcbiAgICAgICBsZXQgZG90Tkw6ZjMyID0gc2F0dXJhdGUoZG90KCBnZW9tZXRyeS5ub3JtYWwsIGRpcmVjdExpZ2h0LmRpcmVjdGlvbikpO1xyXG4gICAgICAgbGV0IGlycmFkaWFuY2U6dmVjMzxmMzI+ID0gZG90TkwgKiBkaXJlY3RMaWdodC5jb2xvcjtcclxuICAgICAgICNpZiAke2RlZmluZXMuVVNFX0NMRUFSQ09BVH1cclxuICAgICAgICAgICBsZXQgZG90TkxjYzpmMzIgPSBzYXR1cmF0ZSggZG90KCBnZW9tZXRyeS5jbGVhcmNvYXROb3JtYWwsIGRpcmVjdExpZ2h0LmRpcmVjdGlvbiApICk7XHJcbiAgICAgICAgICAgbGV0IGNjSXJyYWRpYW5jZTp2ZWMzPGYzMj4gPSBkb3ROTGNjICogZGlyZWN0TGlnaHQuY29sb3I7XHJcbiAgICAgICAgICAgY2xlYXJjb2F0U3BlY3VsYXIgKz0gY2NJcnJhZGlhbmNlICogQlJERl9HR1goIGRpcmVjdExpZ2h0LmRpcmVjdGlvbiwgZ2VvbWV0cnkudmlld0RpciwgZ2VvbWV0cnkuY2xlYXJjb2F0Tm9ybWFsLCBtYXRlcmlhbC5jbGVhcmNvYXRGMCwgbWF0ZXJpYWwuY2xlYXJjb2F0RjkwLCBtYXRlcmlhbC5jbGVhcmNvYXRSb3VnaG5lc3MgKTtcclxuICAgICAgICNlbmRpZlxyXG5cclxuICAgICAgICNpZiAke2RlZmluZXMuVVNFX1NIRUVOfVxyXG4gICAgICAgICAgIHNoZWVuU3BlY3VsYXIgKz0gaXJyYWRpYW5jZSAqIEJSREZfU2hlZW4oIGRpcmVjdExpZ2h0LmRpcmVjdGlvbiwgZ2VvbWV0cnkudmlld0RpciwgZ2VvbWV0cnkubm9ybWFsLCBtYXRlcmlhbC5zaGVlbkNvbG9yLCBtYXRlcmlhbC5zaGVlblJvdWdobmVzcyApO1xyXG4gICAgICAgI2VuZGlmXHJcblxyXG4gICAgICAgI2lmICR7ZGVmaW5lcy5VU0VfSVJJREVTQ0VOQ0V9XHJcbiAgICAgICAgICAgcmVmbGVjdGVkTGlnaHQuZGlyZWN0U3BlY3VsYXIgPSBpcnJhZGlhbmNlICogQlJERl9HR1hfSXJpZGVzY2VuY2UoIGRpcmVjdExpZ2h0LmRpcmVjdGlvbiwgZ2VvbWV0cnkudmlld0RpciwgZ2VvbWV0cnkubm9ybWFsLCBtYXRlcmlhbC5zcGVjdWxhckNvbG9yLCBtYXRlcmlhbC5zcGVjdWxhckY5MCwgbWF0ZXJpYWwuaXJpZGVzY2VuY2UsIG1hdGVyaWFsLmlyaWRlc2NlbmNlRnJlc25lbCwgbWF0ZXJpYWwucm91Z2huZXNzICk7XHJcbiAgICAgICAjZWxzZVxyXG4gICAgICAgICAgIHJlZmxlY3RlZExpZ2h0LmRpcmVjdFNwZWN1bGFyID0gaXJyYWRpYW5jZSAqIEJSREZfR0dYKCBkaXJlY3RMaWdodC5kaXJlY3Rpb24sIGdlb21ldHJ5LnZpZXdEaXIsIGdlb21ldHJ5Lm5vcm1hbCwgbWF0ZXJpYWwuc3BlY3VsYXJDb2xvciwgbWF0ZXJpYWwuc3BlY3VsYXJGOTAsIG1hdGVyaWFsLnJvdWdobmVzcyApO1xyXG4gICAgICAgI2VuZGlmXHJcbiAgICAgICByZWZsZWN0ZWRMaWdodC5kaXJlY3REaWZmdXNlID0gaXJyYWRpYW5jZSAqIEJSREZfTGFtYmVydCggbWF0ZXJpYWwuZGlmZnVzZUNvbG9yICk7XHJcbiAgICAgICByZXR1cm4gcmVmbGVjdGVkTGlnaHQ7XHJcbiAgIH1cclxuICAgLy/pl7TmjqXlhYnnhadcclxuICAgZm4gUkVfSW5kaXJlY3REaWZmdXNlX1BoeXNpY2FsKCBpcnJhZGlhbmNlOnZlYzM8ZjMyPiwgZ2VvbWV0cnk6R2VvbWV0cmljQ29udGV4dCwgbWF0ZXJpYWw6UGh5c2ljYWxNYXRlcmlhbCApLT5SZWZsZWN0ZWRMaWdodCB7XHJcbiAgICAgICB2YXIgcmVmbGVjdGVkTGlnaHQ6UmVmbGVjdGVkTGlnaHQ7XHJcbiAgICAgICByZWZsZWN0ZWRMaWdodC5pbmRpcmVjdERpZmZ1c2UgPSBpcnJhZGlhbmNlICogQlJERl9MYW1iZXJ0KCBtYXRlcmlhbC5kaWZmdXNlQ29sb3IgKTtcclxuICAgICAgIHJldHVybiByZWZsZWN0ZWRMaWdodDtcclxuICAgfVxyXG4gICAvL+mXtOaOpemrmOWFiVxyXG4gICBmbiBSRV9JbmRpcmVjdFNwZWN1bGFyX1BoeXNpY2FsKCByYWRpYW5jZTp2ZWMzPGYzMj4sIGlycmFkaWFuY2U6dmVjMzxmMzI+LCBjbGVhcmNvYXRSYWRpYW5jZTp2ZWMzPGYzMj4sIGdlb21ldHJ5Okdlb21ldHJpY0NvbnRleHQsIG1hdGVyaWFsOlBoeXNpY2FsTWF0ZXJpYWwpLT5SZWZsZWN0ZWRMaWdodCB7XHJcbiAgICAgICB2YXIgcmVmbGVjdGVkTGlnaHQ6UmVmbGVjdGVkTGlnaHQ7XHJcbiAgICAgICAjaWYgJHtkZWZpbmVzLlVTRV9DTEVBUkNPQVR9XHJcbiAgICAgICAgICAgY2xlYXJjb2F0U3BlY3VsYXIgKz0gY2xlYXJjb2F0UmFkaWFuY2UgKiBFbnZpcm9ubWVudEJSREYoIGdlb21ldHJ5LmNsZWFyY29hdE5vcm1hbCwgZ2VvbWV0cnkudmlld0RpciwgbWF0ZXJpYWwuY2xlYXJjb2F0RjAsIG1hdGVyaWFsLmNsZWFyY29hdEY5MCwgbWF0ZXJpYWwuY2xlYXJjb2F0Um91Z2huZXNzICk7XHJcbiAgICAgICAjZW5kaWZcclxuICAgICAgICNpZiAke2RlZmluZXMuVVNFX1NIRUVOfVxyXG4gICAgICAgICAgIHNoZWVuU3BlY3VsYXIgKz0gaXJyYWRpYW5jZSAqIG1hdGVyaWFsLnNoZWVuQ29sb3IgKiBJQkxTaGVlbkJSREYoIGdlb21ldHJ5Lm5vcm1hbCwgZ2VvbWV0cnkudmlld0RpciwgbWF0ZXJpYWwuc2hlZW5Sb3VnaG5lc3MgKTtcclxuICAgICAgICNlbmRpZlxyXG4gICAgICAgdmFyIHNpbmdsZVNjYXR0ZXJpbmc6dmVjMzxmMzI+O1xyXG4gICAgICAgdmFyIG11bHRpU2NhdHRlcmluZzp2ZWMzPGYzMj47XHJcbiAgICAgICBsZXQgY29zaW5lV2VpZ2h0ZWRJcnJhZGlhbmNlOnZlYzM8ZjMyPiA9IGlycmFkaWFuY2UgKiBSRUNJUFJPQ0FMX1BJO1xyXG4gICAgICAgdmFyIHRlbXBNdWx0aUFuZFNpbmdsZVNjYXR0ZXI6TXVsdGlBbmRTaW5nbGVTY2F0dGVyO1xyXG4gICAgICAgI2lmICR7ZGVmaW5lcy5VU0VfSVJJREVTQ0VOQ0V9XHJcbiAgICAgICAgICAgICB0ZW1wTXVsdGlBbmRTaW5nbGVTY2F0dGVyPWNvbXB1dGVNdWx0aXNjYXR0ZXJpbmdJcmlkZXNjZW5jZSggZ2VvbWV0cnkubm9ybWFsLCBnZW9tZXRyeS52aWV3RGlyLCBtYXRlcmlhbC5zcGVjdWxhckNvbG9yLCBtYXRlcmlhbC5zcGVjdWxhckY5MCwgbWF0ZXJpYWwuaXJpZGVzY2VuY2UsIG1hdGVyaWFsLmlyaWRlc2NlbmNlRnJlc25lbCwgbWF0ZXJpYWwucm91Z2huZXNzICk7XHJcbiAgICAgICAjZWxzZVxyXG4gICAgICAgICAgICB0ZW1wTXVsdGlBbmRTaW5nbGVTY2F0dGVyPSBjb21wdXRlTXVsdGlzY2F0dGVyaW5nKCBnZW9tZXRyeS5ub3JtYWwsIGdlb21ldHJ5LnZpZXdEaXIsIG1hdGVyaWFsLnNwZWN1bGFyQ29sb3IsIG1hdGVyaWFsLnNwZWN1bGFyRjkwLCBtYXRlcmlhbC5yb3VnaG5lc3MgKTtcclxuICAgICAgICNlbmRpZlxyXG4gICAgICAgc2luZ2xlU2NhdHRlcmluZz10ZW1wTXVsdGlBbmRTaW5nbGVTY2F0dGVyLnNpbmdsZVNjYXR0ZXI7IFxyXG4gICAgICAgbXVsdGlTY2F0dGVyaW5nPXRlbXBNdWx0aUFuZFNpbmdsZVNjYXR0ZXIubXVsdGlTY2F0dGVyO1xyXG4gICAgICAgbGV0IHRvdGFsU2NhdHRlcmluZzp2ZWMzPGYzMj4gPSBzaW5nbGVTY2F0dGVyaW5nICsgbXVsdGlTY2F0dGVyaW5nO1xyXG4gICAgICAgbGV0IGRpZmZ1c2U6dmVjMzxmMzI+ID0gbWF0ZXJpYWwuZGlmZnVzZUNvbG9yICogKCAxLjAgLSBtYXgoIG1heCggdG90YWxTY2F0dGVyaW5nLnIsIHRvdGFsU2NhdHRlcmluZy5nICksIHRvdGFsU2NhdHRlcmluZy5iICkgKTtcclxuICAgICAgIHJlZmxlY3RlZExpZ2h0LmluZGlyZWN0U3BlY3VsYXIgPSByYWRpYW5jZSAqIHNpbmdsZVNjYXR0ZXJpbmc7XHJcbiAgICAgICByZWZsZWN0ZWRMaWdodC5pbmRpcmVjdFNwZWN1bGFyID0gbXVsdGlTY2F0dGVyaW5nICogY29zaW5lV2VpZ2h0ZWRJcnJhZGlhbmNlO1xyXG4gICAgICAgcmVmbGVjdGVkTGlnaHQuaW5kaXJlY3REaWZmdXNlID0gZGlmZnVzZSAqIGNvc2luZVdlaWdodGVkSXJyYWRpYW5jZTtcclxuICAgICAgIHJldHVybiByZWZsZWN0ZWRMaWdodDtcclxuICAgfVxyXG4gICBgO1xyXG59XHJcbiIsImltcG9ydCB7IHdnc2xQYXJzZURlZmluZXMgfSBmcm9tIFwiLi4vLi4vV2dzbFByZXByb2Nlc3NvclwiO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gcGJyU3RydWN0KGRlZmluZXMpIHtcclxuICByZXR1cm4gd2dzbFBhcnNlRGVmaW5lc2BcclxuICAgICAgICBzdHJ1Y3QgTWF0ZXJpYWxVbmlmb3Jte1xyXG5cclxuICAgICAgICAgICAgbW9kZWxNYXRyaXg6IG1hdDR4NDxmMzI+LFxyXG4gICAgXHJcbiAgICAgICAgICAgIGRpZmZ1c2U6dmVjMzxmMzI+LFxyXG4gICAgXHJcbiAgICAgICAgICAgIG9wYWNpdHk6ZjMyLFxyXG4gICAgXHJcbiAgICAgICAgICAgIG5vcm1hbE1hdHJpeDogbWF0M3gzPGYzMj4sXHJcbiAgICBcclxuICAgICAgICAgICAgZW1pc3NpdmU6dmVjMzxmMzI+LFxyXG4gICAgXHJcbiAgICAgICAgICAgIHJvdWdobmVzczpmMzIsXHJcbiAgICBcclxuICAgICAgICAgICAgbWV0YWxuZXNzOmYzMixcclxuICAgIFxyXG4gICAgICAgICAgICAjaWYgJHtkZWZpbmVzLlRPTkVfTUFQUElOR31cclxuICAgICAgICAgICAgICAgIHRvbmVNYXBwaW5nRXhwb3N1cmU6ZjMyLFxyXG4gICAgICAgICAgICAjZW5kaWZcclxuICAgICAgICAgICBcclxuICAgICAgICAgICAgI2lmICR7ZGVmaW5lcy5TUEVDVUxBUn1cclxuICAgIFxyXG4gICAgICAgICAgICAgICAgIHNwZWN1bGFyQ29sb3I6dmVjMzxmMzI+LFxyXG4gICAgXHJcbiAgICAgICAgICAgICAgICAgc3BlY3VsYXJJbnRlbnNpdHk6ZjMyLFxyXG4gICAgICAgICAgICAjZW5kaWZcclxuICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICNpZiAke2RlZmluZXMuVVNFX1NIRUVOfVxyXG4gICAgXHJcbiAgICAgICAgICAgICAgICBzaGVlbkNvbG9yOnZlYzM8ZjMyPixcclxuICAgIFxyXG4gICAgICAgICAgICAgICAgc2hlZW5Sb3VnaG5lc3M6ZjMyLFxyXG4gICAgICAgICAgICAjZW5kaWZcclxuXHJcbiAgICAgICAgICAgICNpZiAke2RlZmluZXMuVVNFX1RSQU5TTUlTU0lPTn1cclxuICAgIFxyXG4gICAgICAgICAgICAgICAgYXR0ZW51YXRpb25Db2xvcjp2ZWMzPGYzMj4sXHJcbiAgICBcclxuICAgICAgICAgICAgICAgIHRyYW5zbWlzc2lvbjpmMzIsXHJcbiAgICBcclxuICAgICAgICAgICAgICAgIHRyYW5zbWlzc2lvblNhbXBsZXJTaXplOnZlYzI8ZjMyPixcclxuICAgIFxyXG4gICAgICAgICAgICAgICAgdGhpY2tuZXNzOmYzMixcclxuICAgIFxyXG4gICAgICAgICAgICAgICAgYXR0ZW51YXRpb25EaXN0YW5jZTpmMzIsXHJcbiAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgI2VuZGlmXHJcblxyXG4gICAgICAgICAgICAjaWYgJHtkZWZpbmVzLlVTRV9TS0lOTklOR31cclxuICAgIFxyXG4gICAgICAgICAgICAgICAgYmluZE1hdHJpeDptYXQ0eDQ8ZjMyPixcclxuICAgIFxyXG4gICAgICAgICAgICAgICAgYmluZE1hdHJpeEludmVyc2U6bWF0NHg0PGYzMj4sXHJcbiAgICBcclxuICAgICAgICAgICAgICAgIGJvbmVUZXh0dXJlU2l6ZTp1MzIsXHJcbiAgICAgICAgICAgICNlbmRpZlxyXG5cclxuICAgICAgICAgICAgI2lmICR7ZGVmaW5lcy5VU0VfTk9STUFMVEVYVFVSRX1cclxuICAgICAgICAgICAgICAgICBub3JtYWxTY2FsZTp2ZWMyPGYzMj4sXHJcbiAgICAgICAgICAgICNlbmRpZlxyXG4gICAgXHJcbiAgICAgICAgICAgICNpZiAke2RlZmluZXMuSU9SfVxyXG4gICAgICAgICAgICAgICAgaW9yOmYzMixcclxuICAgICAgICAgICAgI2VuZGlmXHJcbiAgICBcclxuICAgICAgICAgICAgI2lmICR7ZGVmaW5lcy5VU0VfQ0xFQVJDT0FUfVxyXG4gICAgXHJcbiAgICAgICAgICAgICAgICAjaWYgJHtkZWZpbmVzLlVTRV9DTEVBUkNPQVRfTk9STUFMVEVYVFVSRX1cclxuICAgICAgICAgICAgICAgICAgICBjbGVhcmNvYXROb3JtYWxTY2FsZTp2ZWMyPGYzMj4sXHJcbiAgICAgICAgICAgICAgICAjZW5kaWZcclxuICAgIFxyXG4gICAgICAgICAgICAgICAgIGNsZWFyY29hdDpmMzIsXHJcbiAgICBcclxuICAgICAgICAgICAgICAgICBjbGVhcmNvYXRSb3VnaG5lc3M6ZjMyLFxyXG4gICAgICAgICAgICAjZW5kaWZcclxuICAgIFxyXG4gICAgICAgICAgICAjaWYgJHtkZWZpbmVzLlVTRV9JUklERVNDRU5DRX1cclxuICAgICAgICAgICAgICAgIGlyaWRlc2NlbmNlOmYzMixcclxuICAgIFxyXG4gICAgICAgICAgICAgICAgaXJpZGVzY2VuY2VJT1I6ZjMyLFxyXG4gICAgXHJcbiAgICAgICAgICAgICAgICBpcmlkZXNjZW5jZVRoaWNrbmVzc01pbmltdW06ZjMyLFxyXG4gICAgXHJcbiAgICAgICAgICAgICAgICBpcmlkZXNjZW5jZVRoaWNrbmVzc01heGltdW06ZjMyLFxyXG4gICAgXHJcbiAgICAgICAgICAgICNlbmRpZlxyXG5cclxuICAgICAgICAgICAgI2lmICR7ZGVmaW5lcy5VU0VfQU9URVhUVVJFfVxyXG4gICAgICAgICAgICAgICAgIGFvVGV4dHVyZUludGVuc2l0eTpmMzIsXHJcbiAgICAgICAgICAgICNlbmRpZlxyXG5cclxuICAgICAgICAgICAgI2lmICR7ZGVmaW5lcy5VU0VfTElHSFRURVhUVVJFfVxyXG4gICAgICAgICAgICAgICAgIGxpZ2h0VGV4dHVyZUludGVuc2l0eTpmMzIsXHJcbiAgICAgICAgICAgICNlbmRpZlxyXG4gICAgXHJcbiAgICAgICAgICAgICNpZiAke2RlZmluZXMuVVNFX0VOVlRFWFRVUkV9XHJcbiAgICAgICAgICAgICAgICBlbnZUZXh0dXJlSW50ZW5zaXR5OmYzMixcclxuICAgIFxyXG4gICAgICAgICAgICAgICAgZmxpcEVudlRleHR1cmU6ZjMyLFxyXG4gICAgICAgICAgICAjZW5kaWZcclxuXHJcbiAgICAgICAgICAgICNpZiAke2RlZmluZXMuVVNFX0JVTVBURVhUVVJFfVxyXG4gICAgICAgICAgICAgICAgYnVtcFNjYWxlOmYzMjtcclxuICAgICAgICAgICAgI2VuZGlmXHJcblxyXG4gICAgICAgICAgICAjaWYgJHtkZWZpbmVzLlVTRV9ESVNQTEFDRU1FTlRURVhUVVJFfVxyXG4gICAgXHJcbiAgICAgICAgICAgICAgICBkaXNwbGFjZW1lbnRTY2FsZTpmMzIsXHJcbiAgICBcclxuICAgICAgICAgICAgICAgIGRpc3BsYWNlbWVudEJpYXM6ZjMyLFxyXG4gICAgICAgICAgICAjZW5kaWZcclxuICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICNpZiAke2RlZmluZXMuVVNFX01PUlBIVEFSR0VUU31cclxuICAgIFxyXG4gICAgICAgICAgICAgICAgbW9ycGhUYXJnZXRCYXNlSW5mbHVlbmNlOmYzMixcclxuICAgIFxyXG4gICAgICAgICAgICAgICAgI2lmICR7ZGVmaW5lcy5NT1JQSFRBUkdFVFNfVEVYVFVSRX0gXHJcbiAgICBcclxuICAgICAgICAgICAgICAgICAgICBtb3JwaFRhcmdldHNUZXh0dXJlU2l6ZTp2ZWMyPHUzMj4sXHJcbiAgICBcclxuICAgICAgICAgICAgICAgICAgICBNT1JQSFRBUkdFVFNfQ09VTlQ6dTMyLFxyXG4gICAgXHJcbiAgICAgICAgICAgICAgICAjZW5kaWZcclxuICAgIFxyXG4gICAgICAgICAgICAgICAgbW9ycGhUYXJnZXRJbmZsdWVuY2VzOmFycmF5PGYzMj4sXHJcbiAgICAgICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICNlbmRpZlxyXG4gICAgICAgIH1cclxuXHJcbiAgIGA7XHJcbn1cclxuIiwiaW1wb3J0IHsgd2dzbFBhcnNlRGVmaW5lcyB9IGZyb20gXCIuLi8uLi9XZ3NsUHJlcHJvY2Vzc29yXCI7XHJcblxyXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBwYnJUZXh0dXJlKGRlZmluZXMpIHtcclxuICByZXR1cm4gd2dzbFBhcnNlRGVmaW5lc2AgICAgICAgIFxyXG4gICAgICAgICAgICAjaWYgJHtkZWZpbmVzLlVTRV9CVU1QVEVYVFVSRX1cclxuICAgICAgICAgICAgICAgIEBncm91cCgwKSBAYmluZGluZygke2RlZmluZXMuYnVtcFRleHR1cmVCaW5kaW5nfSkgdmFyIGJ1bXBUZXh0dXJlOiB0ZXh0dXJlXzJkPGYzMj47XHJcbiAgICAgICAgICAgICNlbmRpZlxyXG4gICAgICAgICAgICAjaWYgJHtkZWZpbmVzLlVTRV9UUkFOU01JU1NJT059XHJcbiAgICAgICAgICAgICAgICAjaWYgJHtkZWZpbmVzLlVTRV9UUkFOU01JU1NJT05URVhUVVJFfVxyXG4gICAgICAgICAgICAgICAgICAgIEBncm91cCgwKSBAYmluZGluZygke2RlZmluZXMudHJhbnNtaXNzaW9uVGV4dHVyZUJpbmRpbmd9KSB2YXIgdHJhbnNtaXNzaW9uVGV4dHVyZTogdGV4dHVyZV8yZDxmMzI+O1xyXG4gICAgICAgICAgICAgICAgI2VuZGlmXHJcbiAgICAgICAgICAgICAgICAjaWYgJHtkZWZpbmVzLlVTRV9USElDS05FU1NURVhUVVJFfVxyXG4gICAgICAgICAgICAgICAgICAgIEBncm91cCgwKSBAYmluZGluZygke2RlZmluZXMudGhpY2tuZXNzVGV4dHVyZUJpbmRpbmd9KSB2YXIgdGhpY2tuZXNzVGV4dHVyZTogdGV4dHVyZV8yZDxmMzI+O1xyXG4gICAgICAgICAgICAgICAgI2VuZGlmXHJcbiAgICAgICAgICAgICAgICBAZ3JvdXAoMCkgQGJpbmRpbmcoJHtkZWZpbmVzLnRyYW5zbWlzc2lvblNhbXBsZXJUZXh0dXJlQmluZGluZ30pIHZhciB0cmFuc21pc3Npb25TYW1wbGVyVGV4dHVyZTogdGV4dHVyZV8yZDxmMzI+O1xyXG4gICAgICAgICAgICAjZW5kaWZcclxuICAgICAgICAgICAgI2lmICR7ZGVmaW5lcy5VU0VfRU5WVEVYVFVSRX1cclxuICAgICAgICAgICAgICAgIEBncm91cCgwKSBAYmluZGluZygke2RlZmluZXMuZW52VGV4dHVyZUJpbmRpbmd9KSB2YXIgZW52VGV4dHVyZTogdGV4dHVyZV9jdWJlPGYzMj47XHJcbiAgICAgICAgICAgICNlbmRpZlxyXG4gICAgICAgICAgICAjaWYgJHtkZWZpbmVzLlVTRV9OT1JNQUxURVhUVVJFfVxyXG4gICAgICAgICAgICAgICAgQGdyb3VwKDApIEBiaW5kaW5nKCR7ZGVmaW5lcy5ub3JtYWxUZXh0dXJlQmluZGluZ30pIHZhciBub3JtYWxUZXh0dXJlOiB0ZXh0dXJlXzJkPGYzMj47XHJcbiAgICAgICAgICAgICNlbmRpZlxyXG4gICAgICAgICAgICBcclxuICAgICAgICAgICAgI2lmICR7ZGVmaW5lcy5VU0VfQ0xFQVJDT0FUVEVYVFVSRX1cclxuICAgICAgICAgICAgICAgIEBncm91cCgwKSBAYmluZGluZygke2RlZmluZXMuY2xlYXJjb2F0VGV4dHVyZUJpbmRpbmd9KSB2YXIgY2xlYXJjb2F0VGV4dHVyZTogdGV4dHVyZV8yZDxmMzI+O1xyXG4gICAgICAgICAgICAjZW5kaWZcclxuICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICNpZiAke2RlZmluZXMuVVNFX0NMRUFSQ09BVF9ST1VHSE5FU1NURVhUVVJFfVxyXG4gICAgICAgICAgICAgICAgQGdyb3VwKDApIEBiaW5kaW5nKCR7ZGVmaW5lcy5jbGVhcmNvYXRSY2xlYXJjb2F0Um91Z2huZXNzVGV4dHVyZUJpbmRpbmd9KSB2YXIgY2xlYXJjb2F0Um91Z2huZXNzVGV4dHVyZTogdGV4dHVyZV8yZDxmMzI+O1xyXG4gICAgICAgICAgICAjZW5kaWZcclxuICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICNpZiAke2RlZmluZXMuVVNFX0NMRUFSQ09BVF9OT1JNQUxURVhUVVJFfVxyXG4gICAgICAgICAgICAgICAgQGdyb3VwKDApIEBiaW5kaW5nKCR7ZGVmaW5lcy5jbGVhcmNvYXROb3JtYWxUZXh0dXJlQmluZGluZ30pIHZhciBjbGVhcmNvYXROb3JtYWxUZXh0dXJlOiB0ZXh0dXJlXzJkPGYzMj47XHJcbiAgICAgICAgICAgICNlbmRpZlxyXG4gICAgICAgICAgICBcclxuICAgICAgICAgICAgI2lmICR7ZGVmaW5lcy5VU0VfSVJJREVTQ0VOQ0VURVhUVVJFfVxyXG4gICAgICAgICAgICAgICAgQGdyb3VwKDApIEBiaW5kaW5nKCR7ZGVmaW5lcy5pcmlkZXNjZW5jZVRleHR1cmVCaW5kaW5nfSkgdmFyIGlyaWRlc2NlbmNlVGV4dHVyZTogdGV4dHVyZV8yZDxmMzI+O1xyXG4gICAgICAgICAgICAjZW5kaWZcclxuICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICNpZiAke2RlZmluZXMuVVNFX0lSSURFU0NFTkNFX1RISUNLTkVTU1RFWFRVUkV9XHJcbiAgICAgICAgICAgICAgICBAZ3JvdXAoMCkgQGJpbmRpbmcoJHtkZWZpbmVzLmlyaWRlc2NlbmNlVGhpY2tuZXNzVGV4dHVyZUJpbmRpbmd9KSB2YXIgaXJpZGVzY2VuY2VUaGlja25lc3NUZXh0dXJlOiB0ZXh0dXJlXzJkPGYzMj47XHJcbiAgICAgICAgICAgICNlbmRpZlxyXG4gICAgICAgICAgICBcclxuICAgICAgICAgICAgI2lmICR7ZGVmaW5lcy5VU0VfUk9VR0hORVNTVEVYVFVSRX1cclxuICAgICAgICAgICAgICAgIEBncm91cCgwKSBAYmluZGluZygke2RlZmluZXMucm91Z2huZXNzVGV4dHVyZUJpbmRpbmd9KSB2YXIgcm91Z2huZXNzVGV4dHVyZTogdGV4dHVyZV8yZDxmMzI+O1xyXG4gICAgICAgICAgICAjZW5kaWZcclxuICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICNpZiAke2RlZmluZXMuVVNFX01FVEFMTkVTU1RFWFRVUkV9XHJcbiAgICAgICAgICAgICAgICBAZ3JvdXAoMCkgQGJpbmRpbmcoJHtkZWZpbmVzLm1ldGFsbmVzc1RleHR1cmVCaW5kaW5nfSkgdmFyIG1ldGFsbmVzc1RleHR1cmU6IHRleHR1cmVfMmQ8ZjMyPjtcclxuICAgICAgICAgICAgI2VuZGlmXHJcblxyXG4gICAgICAgICAgICAjaWYgJHtkZWZpbmVzLlNQRUNVTEFSfVxyXG4gICAgICAgICAgICAgICAgI2lmICR7ZGVmaW5lcy5VU0VfU1BFQ1VMQVJJTlRFTlNJVFlURVhUVVJFfVxyXG4gICAgICAgICAgICAgICAgICAgIEBncm91cCgwKSBAYmluZGluZygke2RlZmluZXMuc3BlY3VsYXJJbnRlbnNpdHlUZXh0dXJlQmluZGluZ30pIHZhciBzcGVjdWxhckludGVuc2l0eVRleHR1cmU6IHRleHR1cmVfMmQ8ZjMyPjtcclxuICAgICAgICAgICAgICAgICNlbmRpZlxyXG5cclxuICAgICAgICAgICAgICAgICNpZiAke2RlZmluZXMuVVNFX1NQRUNVTEFSQ09MT1JURVhUVVJFfVxyXG4gICAgICAgICAgICAgICAgICAgIEBncm91cCgwKSBAYmluZGluZygke2RlZmluZXMuc3BlY3VsYXJDb2xvclRleHR1cmVCaW5kaW5nfSkgdmFyIHNwZWN1bGFyQ29sb3JUZXh0dXJlOiB0ZXh0dXJlXzJkPGYzMj47XHJcbiAgICAgICAgICAgICAgICAjZW5kaWZcclxuICAgICAgICAgICAgI2VuZGlmXHJcblxyXG4gICAgICAgICAgICAjaWYgJHtkZWZpbmVzLlVTRV9TSEVFTn1cclxuICAgICAgICAgICAgICAgICNpZiAke2RlZmluZXMuVVNFX1NIRUVOQ09MT1JURVhUVVJFfVxyXG4gICAgICAgICAgICAgICAgICAgIEBncm91cCgwKSBAYmluZGluZygke2RlZmluZXMuc2hlZW5Db2xvclRleHR1cmVCaW5kaW5nfSkgdmFyIHNoZWVuQ29sb3JUZXh0dXJlOiB0ZXh0dXJlXzJkPGYzMj47XHJcbiAgICAgICAgICAgICAgICAjZW5kaWZcclxuICAgICAgICAgICAgICAgICNpZiAke2RlZmluZXMuVVNFX1NIRUVOUk9VR0hORVNTVEVYVFVSRX1cclxuICAgICAgICAgICAgICAgICAgICBAZ3JvdXAoMCkgQGJpbmRpbmcoJHtkZWZpbmVzLnNoZWVuUm91Z2huZXNzVGV4dHVyZUJpbmRpbmd9KSB2YXIgc2hlZW5Sb3VnaG5lc3NUZXh0dXJlOiB0ZXh0dXJlXzJkPGYzMj47XHJcbiAgICAgICAgICAgICAgICAjZW5kaWZcclxuICAgICAgICAgICAgI2VuZGlmXHJcblxyXG4gICAgICAgICAgICAjaWYgJHtkZWZpbmVzLlVTRV9URVhUVVJFfVxyXG4gICAgICAgICAgICAgICAgQGdyb3VwKDApIEBiaW5kaW5nKCR7ZGVmaW5lcy5iYXNlU2FtcGxlckJpbmRpbmd9KSB2YXIgYmFzZVNhbXBsZXI6IHNhbXBsZXI7XHJcbiAgICAgICAgICAgICAgICBAZ3JvdXAoMCkgQGJpbmRpbmcoJHtkZWZpbmVzLmJhc2VUZXh0dXJlQmluZGluZ30pIHZhciBiYXNlVGV4dHVyZTogdGV4dHVyZV8yZDxmMzI+O1xyXG4gICAgICAgICAgICAjZW5kaWZcclxuXHJcbiAgICAgICAgICAgICNpZiAke2RlZmluZXMuVVNFX0FMUEhBVEVYVFVSRX1cclxuICAgICAgICAgICAgICAgIEBncm91cCgwKSBAYmluZGluZygke2RlZmluZXMuYWxwaGFUZXh0dXJlQmluZGluZ30pIHZhciBhbHBoYVRleHR1cmU6IHRleHR1cmVfMmQ8ZjMyPjtcclxuICAgICAgICAgICAgI2VuZGlmXHJcblxyXG4gICAgICAgICAgICAjaWYgJHtkZWZpbmVzLlVTRV9BT1RFWFRVUkV9XHJcbiAgICAgICAgICAgICAgICBAZ3JvdXAoMCkgQGJpbmRpbmcoJHtkZWZpbmVzLmFvVGV4dHVyZUJpbmRpbmd9KSB2YXIgYW9UZXh0dXJlOiB0ZXh0dXJlXzJkPGYzMj47XHJcbiAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgI2VuZGlmXHJcbiAgICAgICAgICAgICNpZiAke2RlZmluZXMuVVNFX0xJR0hUVEVYVFVSRX1cclxuICAgICAgICAgICAgICAgIEBncm91cCgwKSBAYmluZGluZygke2RlZmluZXMubGlnaHRUZXh0dXJlQmluZGluZ30pIHZhciBsaWdodFRleHR1cmU6IHRleHR1cmVfMmQ8ZjMyPjtcclxuICAgICAgICAgICAgI2VuZGlmXHJcblxyXG4gICAgICAgICAgICAjaWYgJHtkZWZpbmVzLlVTRV9FTUlTU0lWRVRFWFRVUkV9XHJcbiAgICAgICAgICAgICAgICBAZ3JvdXAoMCkgQGJpbmRpbmcoJHtkZWZpbmVzLmVtaXNzaXZlVGV4dHVyZUJpbmRpbmd9KSB2YXIgZW1pc3NpdmVUZXh0dXJlOiB0ZXh0dXJlXzJkPGYzMj47XHJcbiAgICAgICAgICAgICNlbmRpZlxyXG4gICAgIGA7XHJcbn1cclxuIiwiaW1wb3J0IHsgd2dzbFBhcnNlRGVmaW5lcyB9IGZyb20gXCIuLi8uLi9XZ3NsUHJlcHJvY2Vzc29yXCI7XHJcblxyXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBwYnJVdGlscyhkZWZpbmVzKSB7XHJcbiAgcmV0dXJuIHdnc2xQYXJzZURlZmluZXNgXHJcbiAgICBjb25zdCBQSTpmMzI9IDMuMTQxNTkyNjUzNTg5NzkzO1xyXG4gICAgY29uc3QgUEkyOmYzMj0gNi4yODMxODUzMDcxNzk1ODY7XHJcbiAgICBjb25zdCBQSV9IQUxGOmYzMj0gMS41NzA3OTYzMjY3OTQ4OTY2O1xyXG4gICAgY29uc3QgUkVDSVBST0NBTF9QSTpmMzI9IDAuMzE4MzA5ODg2MTgzNzkwNztcclxuICAgIGNvbnN0IFJFQ0lQUk9DQUxfUEkyOmYzMj0gMC4xNTkxNTQ5NDMwOTE4OTUzNTtcclxuICAgIGNvbnN0IEVQU0lMT046ZjMyPSAxZS02O1xyXG5cclxuICAgIGZuIHBvdzIoeDpmMzIgKS0+ZjMyIHtcclxuICAgICAgICByZXR1cm4geCp4O1xyXG4gICAgfVxyXG4gICAgZm4gcG93MlZlY3Rvcih4OnZlYzM8ZjMyPiApLT52ZWMzPGYzMj4ge1xyXG4gICAgICAgIHJldHVybiB4Kng7XHJcbiAgICB9XHJcbiAgICBmbiBwb3czKCB4OmYzMiApLT5mMzIge1xyXG4gICAgICAgIHJldHVybiB4KngqeDtcclxuICAgIH1cclxuICAgIGZuIHBvdzQoIHg6ZjMyICktPmYzMiB7XHJcbiAgICAgICAgbGV0IHgyOmYzMiA9IHgqeDtcclxuICAgICAgICByZXR1cm4geDIqeDI7XHJcbiAgICB9XHJcbiAgICBmbiBtYXgzKCB2OnZlYzM8ZjMyPiApLT5mMzIge1xyXG4gICAgICAgIHJldHVybiBtYXgoIG1heCggdi54LCB2LnkgKSwgdi56ICk7XHJcbiAgICB9XHJcbiAgICBmbiBhdmVyYWdlKHY6dmVjMzxmMzI+ICktPmYzMiB7XHJcbiAgICAgICAgcmV0dXJuIGRvdCggdiwgdmVjMzxmMzI+KCAwLjMzMzMzMzMgKSApO1xyXG4gICAgfVxyXG4gICAgZm4gcmFuZCggdXY6dmVjMjxmMzI+ICktPmYzMiB7XHJcbiAgICAgICAgbGV0IGE6ZjMyID0gMTIuOTg5ODtcclxuICAgICAgICBsZXQgYjpmMzIgPSA3OC4yMzM7XHJcbiAgICAgICAgbGV0IGM6ZjMyID0gNDM3NTguNTQ1MztcclxuICAgICAgICBsZXQgZHQ6ZjMyID0gZG90KCB1di54eSwgdmVjMjxmMzI+KCBhLCBiICkgKTtcclxuICAgICAgICBsZXQgc246ZjMyID0gZHQgJSBQSTtcclxuICAgICAgICByZXR1cm4gZnJhY3QoIHNpbiggc24gKSAqIGMgKTtcclxuICAgIH1cclxuICAgIGZuIHRyYW5zZm9ybURpcmVjdGlvbiggZGlyOnZlYzM8ZjMyPiwgbWF0cml4Om1hdDR4NDxmMzI+ICktPnZlYzM8ZjMyPiB7XHJcbiAgICAgICAgcmV0dXJuIG5vcm1hbGl6ZSggKCBtYXRyaXggKiB2ZWM0PGYzMj4oIGRpciwgMC4wICkgKS54eXogKTtcclxuICAgIH1cclxuXHJcbiAgICBmbiB0cmFuc3Bvc2VNYXQzKCBtOm1hdDN4MzxmMzI+ICktPm1hdDN4MzxmMzI+IHtcclxuICAgICAgICB2YXIgdG1wOm1hdDN4MzxmMzI+O1xyXG4gICAgICAgIHRtcFsgMCBdID0gdmVjMzxmMzI+KCBtWyAwIF0ueCwgbVsgMSBdLngsIG1bIDIgXS54ICk7XHJcbiAgICAgICAgdG1wWyAxIF0gPSB2ZWMzPGYzMj4oIG1bIDAgXS55LCBtWyAxIF0ueSwgbVsgMiBdLnkgKTtcclxuICAgICAgICB0bXBbIDIgXSA9IHZlYzM8ZjMyPiggbVsgMCBdLnosIG1bIDEgXS56LCBtWyAyIF0ueiApO1xyXG4gICAgICAgIHJldHVybiB0bXA7XHJcbiAgICB9XHJcbiAgICBmbiBsdW1pbmFuY2UoIHJnYjp2ZWMzPGYzMj4gKS0+ZjMyIHtcclxuICAgICAgICBsZXQgd2VpZ2h0czp2ZWMzPGYzMj4gPSB2ZWMzPGYzMj4oMC4yMTI2NzI5LCAwLjcxNTE1MjIsIDAuMDcyMTc1MCApO1xyXG4gICAgICAgIHJldHVybiBkb3QoIHdlaWdodHMsIHJnYiApO1xyXG4gICAgfVxyXG4gICAgZm4gTGluZWFyVG9uZU1hcHBpbmcoIGNvbG9yOnZlYzM8ZjMyPix0b25lTWFwcGluZ0V4cG9zdXJlOmYzMiAgKS0+dmVjMzxmMzI+IHtcclxuICAgICAgICByZXR1cm4gdG9uZU1hcHBpbmdFeHBvc3VyZSAqIGNvbG9yO1xyXG4gICAgfVxyXG5cclxuICAgIGZuIFJlaW5oYXJkVG9uZU1hcHBpbmcoIGNvbG9yOnZlYzM8ZjMyPix0b25lTWFwcGluZ0V4cG9zdXJlOmYzMiApLT52ZWMzPGYzMj4ge1xyXG4gICAgICAgIHZhciB0ZW1wQ29sb3I6dmVjMzxmMzI+O1xyXG4gICAgICAgIHRlbXBDb2xvcj1jb2xvcjtcclxuICAgICAgICB0ZW1wQ29sb3IgKj0gdG9uZU1hcHBpbmdFeHBvc3VyZTtcclxuICAgICAgICByZXR1cm4gc2F0dXJhdGUoIHRlbXBDb2xvciAvICggdmVjMzxmMzI+KCAxLjAgKSArIHRlbXBDb2xvciApICk7XHJcbiAgICB9XHJcbiAgICBmbiBDdXN0b21Ub25lTWFwcGluZyggY29sb3I6dmVjMzxmMzI+ICktPnZlYzM8ZjMyPiB7XHJcbiAgICAgICAgcmV0dXJuIGNvbG9yO1xyXG4gICAgfVxyXG4gICAgZm4gdG9uZU1hcHBpbmcoIGNvbG9yOnZlYzM8ZjMyPix0b25lTWFwcGluZ0V4cG9zdXJlOmYzMiAgKS0+dmVjMzxmMzI+IHtcclxuICAgICAgICByZXR1cm4gUmVpbmhhcmRUb25lTWFwcGluZyggY29sb3IsdG9uZU1hcHBpbmdFeHBvc3VyZSApO1xyXG4gICAgfVxyXG5cclxuICAgIGZuIExpbmVhclRvTGluZWFyKCB2YWx1ZTp2ZWM0PGYzMj4gKS0+dmVjNDxmMzI+IHtcclxuICAgICAgICByZXR1cm4gdmFsdWU7XHJcbiAgICB9XHJcbiAgICBmbiBsZXNzVGhhbkVxdWFsKGE6dmVjMzxmMzI+LGI6dmVjMzxmMzI+KS0+dmVjMzxmMzI+e1xyXG4gICAgICAgbGV0IHhWYWx1ZTpmMzI9c2VsZWN0KGIueCxhLngsYS54PD1iLngpO1xyXG4gICAgICAgbGV0IHlWYWx1ZTpmMzI9c2VsZWN0KGIueSxhLnksYS55PD1iLnkpO1xyXG4gICAgICAgbGV0IHpWYWx1ZTpmMzI9c2VsZWN0KGIueixhLnosYS56PD1iLnopO1xyXG4gICAgICAgcmV0dXJuIHZlYzM8ZjMyPih4VmFsdWUseVZhbHVlLHpWYWx1ZSk7ICAgIFxyXG4gICAgfVxyXG4gICAgZm4gTGluZWFyVG9zUkdCKCB2YWx1ZTp2ZWM0PGYzMj4gKS0+dmVjNDxmMzI+IHtcclxuICAgICAgICByZXR1cm4gdmVjNDxmMzI+KCBtaXgoIHBvdyggdmFsdWUucmdiLCB2ZWMzPGYzMj4oIDAuNDE2NjYgKSApICogMS4wNTUgLSB2ZWMzPGYzMj4oIDAuMDU1ICksIHZhbHVlLnJnYiAqIDEyLjkyLCB2ZWMzPGYzMj4oIGxlc3NUaGFuRXF1YWwoIHZhbHVlLnJnYiwgdmVjMzxmMzI+KCAwLjAwMzEzMDggKSApICkgKSwgdmFsdWUuYSApO1xyXG4gICAgfVxyXG4gICAgZm4gbGluZWFyVG9PdXRwdXRUZXhlbCh2YWx1ZTp2ZWM0PGYzMj4gKS0+dmVjNDxmMzI+IHtcclxuICAgICAgICByZXR1cm4gTGluZWFyVG9zUkdCKCB2YWx1ZSApO1xyXG4gICAgfVxyXG4gICAgYDtcclxufVxyXG4iLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBibGlubl9waG9uZyhkZWZpbmVzKSB7XHJcblx0cmV0dXJuIGBcclxuICAgICAgIGZuIGdldFBvaW50TGlnaHRJbmZvKHBvaW50TGlnaHQ6UG9pbnRMaWdodCx3b3JsZFBvczp2ZWMzPGYzMj4sc2hpbmluZXNzOmYzMixOOnZlYzM8ZjMyPixWOnZlYzM8ZjMyPiktPnZlYzM8ZjMyPntcclxuICAgICAgICB2YXIgY29sb3I9dmVjMzxmMzI+KDAuMCwwLjAsMC4wKTtcclxuICAgICAgICB2YXIgZGlyZWN0aW9uOnZlYzM8ZjMyPiA9IHdvcmxkUG9zIC0gcG9pbnRMaWdodC5wb3NpdGlvbjtcclxuICAgICAgICBsZXQgZGlzdDpmMzIgPSBsZW5ndGgoIGRpcmVjdGlvbiApO1xyXG4gICAgICAgIGRpcmVjdGlvbiA9IG5vcm1hbGl6ZShkaXJlY3Rpb24pO1xyXG4gICAgICAgIGxldCBkZWNheSA9IGNsYW1wKDEuMCAtIHBvdyhkaXN0IC8gcG9pbnRMaWdodC5kaXN0YW5jZSwgNC4wKSwgMC4wLCAxLjApO1xyXG5cclxuICAgICAgICBsZXQgZCA9ICBtYXgoIGRvdCggTiwgLWRpcmVjdGlvbiApLCAwLjAgKSAqIGRlY2F5O1xyXG4gICAgICAgIGNvbG9yICs9IHBvaW50TGlnaHQuY29sb3IgKiBkO1xyXG5cclxuICAgICAgICBsZXQgaGFsZkRpcjp2ZWMzPGYzMj4gPSBub3JtYWxpemUoIFYgLSBkaXJlY3Rpb24gKTtcclxuICAgICAgICBsZXQgczpmMzIgPSBwb3coIGNsYW1wKCBkb3QoIE4sIGhhbGZEaXIgKSwgMC4wLCAxLjAgKSwgc2hpbmluZXNzICkgICogZGVjYXk7XHJcbiAgICAgICAgY29sb3IgKz0gcG9pbnRMaWdodC5jb2xvciAqIHM7XHJcbiAgICAgICAgcmV0dXJuIGNvbG9yO1xyXG4gICAgICAgfVxyXG4gICAgICAgZm4gZ2V0U3BvdExpZ2h0SW5mbyhzcG90TGlnaHQ6U3BvdExpZ2h0LHdvcmxkUG9zOnZlYzM8ZjMyPixzaGluaW5lc3M6ZjMyLE46dmVjMzxmMzI+LFY6dmVjMzxmMzI+KS0+dmVjMzxmMzI+e1xyXG4gICAgICAgIHZhciBjb2xvcj12ZWMzPGYzMj4oMC4wLDAuMCwwLjApO1xyXG4gICAgICAgICAgICB2YXIgZGlyZWN0aW9uOnZlYzM8ZjMyPiA9IHNwb3RMaWdodC5wb3NpdGlvbiAtIHdvcmxkUG9zO1xyXG4gICAgICAgICAgICBsZXQgbGlnaHREaXN0YW5jZTpmMzIgPSBsZW5ndGgoZGlyZWN0aW9uKTtcclxuICAgICAgICAgICAgZGlyZWN0aW9uID0gbm9ybWFsaXplKGRpcmVjdGlvbik7XHJcbiAgICAgICAgICAgIGxldCBhbmdsZUNvczpmMzIgPSBkb3QoIGRpcmVjdGlvbiwgLXNwb3RMaWdodC5kaXJlY3Rpb24gKTtcclxuICAgICAgICAgICAgbGV0IGRlY2F5OmYzMiA9IGNsYW1wKDEuMCAtIHBvdyhsaWdodERpc3RhbmNlL3Nwb3RMaWdodC5kaXN0YW5jZSwgNC4wKSwgMC4wLCAxLjApO1xyXG4gICAgICAgICAgICBsZXQgc3BvdEVmZmVjdDpmMzIgPSBzbW9vdGhzdGVwKCBzcG90TGlnaHQucGVudW1icmFDb3MsIHNwb3RMaWdodC5jb25lQ29zLCBhbmdsZUNvcyApO1xyXG4gICAgICAgICAgICBsZXQgZGVjYXlUb3RhbDpmMzIgPSBkZWNheSAqIHNwb3RFZmZlY3Q7XHJcbiAgICAgICAgICAgIGxldCBkOmYzMiA9IG1heCggZG90KCBOLCBkaXJlY3Rpb24gKSwgMC4wICkgICogZGVjYXlUb3RhbDtcclxuICAgICAgICAgICAgY29sb3IgKz0gc3BvdExpZ2h0LmNvbG9yICogZDtcclxuICAgICAgICAgICAgbGV0IGhhbGZEaXI6dmVjMzxmMzI+ID0gbm9ybWFsaXplKCBWICsgZGlyZWN0aW9uICk7XHJcbiAgICAgICAgICAgIGxldCBzOmYzMiA9IHBvdyggY2xhbXAoIGRvdCggTiwgaGFsZkRpciApLCAwLjAsIDEuMCApLCBzaGluaW5lc3MgKSAqIGRlY2F5VG90YWw7XHJcbiAgICAgICAgICAgIGNvbG9yICs9IHNwb3RMaWdodC5jb2xvciAqIHM7XHJcbiAgICAgICAgICAgIHJldHVybiBjb2xvcjtcclxuICAgICAgIH1cclxuICAgIHN0cnVjdCBEaXJlY3Rpb25hbExpZ2h0IHtcclxuICAgICAgICBkaXJlY3Rpb246IHZlYzM8ZjMyPixcclxuICAgICAgICBjb2xvcjogdmVjMzxmMzI+LFxyXG4gICAgfTtcclxuICAgICAgZm4gZ2V0RGlyZWN0TGlnaHRJbmZvKGRpcmVjdGlvbmFsTGlnaHQ6RGlyZWN0aW9uYWxMaWdodCxzaGluaW5lc3M6ZjMyLE46dmVjMzxmMzI+LFY6dmVjMzxmMzI+KS0+dmVjMzxmMzI+e1xyXG4gICAgICAgIHZhciBjb2xvcj12ZWMzPGYzMj4oMC4wLDAuMCwwLjApO1xyXG4gICAgICAgIGxldCBkOmYzMiA9IG1heChkb3QoTiwgLWRpcmVjdGlvbmFsTGlnaHQuZGlyZWN0aW9uKSwgMC4wKTtcclxuICAgICAgICBjb2xvciArPSBkaXJlY3Rpb25hbExpZ2h0LmNvbG9yICogZDtcclxuXHJcbiAgICAgICAgbGV0IGhhbGZEaXI6dmVjMzxmMzI+ID0gbm9ybWFsaXplKCBWIC0gZGlyZWN0aW9uYWxMaWdodC5kaXJlY3Rpb24gKTtcclxuICAgICAgICBsZXQgczpmMzIgPSBwb3coIGNsYW1wKCBkb3QoIE4sIGhhbGZEaXIgKSwgMC4wLCAxLjAgKSwgc2hpbmluZXNzICk7XHJcbiAgICAgICAgY29sb3IgKz0gZGlyZWN0aW9uYWxMaWdodC5jb2xvciAqIHM7XHJcbiAgICAgICAgcmV0dXJuIGNvbG9yO1xyXG4gICAgICAgfVxyXG4gICAgYDtcclxufVxyXG4iLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBwaG9uZ0Z1bmN0aW9uKGRlZmluZXMpIHtcclxuICByZXR1cm4gYFxyXG4gICAgZm4gR19CbGlublBob25nX0ltcGxpY2l0KCApLT5mMzIge1xyXG5cclxuICAgICAgICAvLyBnZW9tZXRyeSB0ZXJtIGlzIChuIGRvdCBsKShuIGRvdCB2KSAvIDQobiBkb3QgbCkobiBkb3QgdilcclxuICAgICAgICByZXR1cm4gMC4yNTtcclxuXHJcbiAgICB9XHJcbiAgICBmbiBEX0JsaW5uUGhvbmcoIHNoaW5pbmVzczpmMzIsIGRvdE5IOmYzMiApLT5mMzIge1xyXG5cclxuICAgICAgICByZXR1cm4gUkVDSVBST0NBTF9QSSAqICggc2hpbmluZXNzICogMC41ICsgMS4wICkgKiBwb3coZG90TkgsIHNoaW5pbmVzcyk7XHJcblxyXG4gICAgfVxyXG4gICAgZm4gQlJERl9CbGlublBob25nKCBsaWdodERpcjp2ZWMzPGYzMj4sIHZpZXdEaXI6dmVjMzxmMzI+LCBub3JtYWw6dmVjMzxmMzI+LCBzcGVjdWxhckNvbG9yOnZlYzM8ZjMyPiwgc2hpbmluZXNzOmYzMiApLT52ZWMzPGYzMj4ge1xyXG5cclxuICAgICAgICBsZXQgIGhhbGZEaXIgPSBub3JtYWxpemUoIGxpZ2h0RGlyICsgdmlld0RpciApO1xyXG5cclxuICAgICAgICBsZXQgIGRvdE5IOmYzMiA9IHNhdHVyYXRlKCBkb3QoIG5vcm1hbCwgaGFsZkRpciApICk7XHJcbiAgICAgICAgbGV0IGRvdFZIOmYzMiA9IHNhdHVyYXRlKCBkb3QoIHZpZXdEaXIsIGhhbGZEaXIgKSApO1xyXG5cclxuICAgICAgICBsZXQgRiA9IEZfU2NobGljayggc3BlY3VsYXJDb2xvciwgMS4wLCBkb3RWSCApO1xyXG5cclxuICAgICAgICBsZXQgRzpmMzIgPSBHX0JsaW5uUGhvbmdfSW1wbGljaXQoICk7XHJcblxyXG4gICAgICAgIGxldCBEID0gRF9CbGlublBob25nKCBzaGluaW5lc3MsIGRvdE5IICk7XHJcblxyXG4gICAgICAgIHJldHVybiBGICogKCBHICogRCApO1xyXG5cclxuICAgIH0gXHJcbiAgICBmbiBSRV9EaXJlY3RfQmxpbm5QaG9uZyggIGRpcmVjdExpZ2h0OkluY2lkZW50TGlnaHQsZ2VvbWV0cnk6R2VvbWV0cmljQ29udGV4dCwgbWF0ZXJpYWw6Qmxpbm5QaG9uZ01hdGVyaWFsICktPlJlZmxlY3RlZExpZ2h0e1xyXG4gICAgICAgIHZhciByZWZsZWN0ZWRMaWdodDpSZWZsZWN0ZWRMaWdodDsgXHJcbiAgICAgICAgbGV0IGRvdE5MOmYzMiA9IHNhdHVyYXRlKGRvdChnZW9tZXRyeS5ub3JtYWwsIGRpcmVjdExpZ2h0LmRpcmVjdGlvbikpO1xyXG4gICAgICAgIGxldCBpcnJhZGlhbmNlOnZlYzM8ZjMyPiA9IGRvdE5MKmRpcmVjdExpZ2h0LmNvbG9yO1xyXG5cclxuICAgICAgICByZWZsZWN0ZWRMaWdodC5kaXJlY3REaWZmdXNlPSBpcnJhZGlhbmNlICogQlJERl9MYW1iZXJ0KCBtYXRlcmlhbC5kaWZmdXNlQ29sb3IgKTtcclxuXHJcbiAgICAgICAgcmVmbGVjdGVkTGlnaHQuZGlyZWN0U3BlY3VsYXI9IGlycmFkaWFuY2UgKiBCUkRGX0JsaW5uUGhvbmcoIGRpcmVjdExpZ2h0LmRpcmVjdGlvbiwgZ2VvbWV0cnkudmlld0RpciwgZ2VvbWV0cnkubm9ybWFsLCBtYXRlcmlhbC5zcGVjdWxhckNvbG9yLCBtYXRlcmlhbC5zcGVjdWxhclNoaW5pbmVzcyApICogbWF0ZXJpYWwuc3BlY3VsYXJTdHJlbmd0aDtcclxuICAgICAgICByZXR1cm4gcmVmbGVjdGVkTGlnaHQ7XHJcbiAgICB9XHJcbiAgICBmbiBSRV9JbmRpcmVjdERpZmZ1c2VfQmxpbm5QaG9uZyggaXJyYWRpYW5jZTp2ZWMzPGYzMj4sIGdlb21ldHJ5Okdlb21ldHJpY0NvbnRleHQsIG1hdGVyaWFsOkJsaW5uUGhvbmdNYXRlcmlhbCktPlJlZmxlY3RlZExpZ2h0IHtcclxuICAgICAgICB2YXIgcmVmbGVjdGVkTGlnaHQ6UmVmbGVjdGVkTGlnaHQ7IFxyXG4gICAgICAgIHJlZmxlY3RlZExpZ2h0LmluZGlyZWN0RGlmZnVzZSArPSBpcnJhZGlhbmNlICogQlJERl9MYW1iZXJ0KCBtYXRlcmlhbC5kaWZmdXNlQ29sb3IgKTtcclxuICAgICAgICByZXR1cm4gcmVmbGVjdGVkTGlnaHQ7XHJcbiAgICB9XHJcbiAgICBgO1xyXG59XHJcbiIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHBob25nVXRpbHMoZGVmaW5lcykge1xyXG4gIHJldHVybiBgXHJcbiAgIHN0cnVjdCBCbGlublBob25nTWF0ZXJpYWwge1xyXG4gICAgICAgIGRpZmZ1c2VDb2xvcjp2ZWMzPGYzMj4sXHJcbiAgICAgICAgc3BlY3VsYXJDb2xvcjp2ZWMzPGYzMj4sXHJcbiAgICAgICAgc3BlY3VsYXJTaGluaW5lc3M6ZjMyLFxyXG4gICAgICAgIHNwZWN1bGFyU3RyZW5ndGg6ZjMyLFxyXG4gICAgfTtcclxuICAgIGNvbnN0IFJFQ0lQUk9DQUxfUEk6ZjMyPSAwLjMxODMwOTg4NjE4Mzc5MDc7XHJcbiAgIGZuIHBvdzIoIHg6ZjMyICktPmYzMiB7IHJldHVybiB4Kng7IH1cclxuICAgZm4gcG93MyggeDpmMzIgKS0+ZjMyIHsgcmV0dXJuIHgqeCp4OyB9XHJcbiAgIGZuIHBvdzQoeDpmMzIgKS0+ZjMyIHsgbGV0IHgyID0geCp4OyByZXR1cm4geDIqeDI7IH1cclxuICAgZm4gbWF4Myggdjp2ZWMzPGYzMj4gKS0+ZjMyIHsgcmV0dXJuIG1heCggbWF4KCB2LngsIHYueSApLCB2LnogKTsgfVxyXG4gICBmbiBhdmVyYWdlKHY6dmVjMzxmMzI+ICktPmYzMiB7IFxyXG4gICAgICAgbGV0IHJlc3VsdD12ZWMzPGYzMj4oIDAuMzMzMzMzMywgIDAuMzMzMzMzMywgMC4zMzMzMzMzKTtcclxuICAgICAgIHJldHVybiBkb3QoIHYscmVzdWx0ICk7IFxyXG4gICB9XHJcbiAgIGA7XHJcbn1cclxuIiwiaW1wb3J0IHsgd2dzbFBhcnNlRGVmaW5lcyB9IGZyb20gXCIuLi8uLi9XZ3NsUHJlcHJvY2Vzc29yXCI7XG5cbmV4cG9ydCBmdW5jdGlvbiBnZXRTa2luTWF0cml4KGRlZmluZXMpIHtcblx0cmV0dXJuIHdnc2xQYXJzZURlZmluZXNgXG4gICAjaWYgJHtkZWZpbmVzLkhBU19TS0lOfSBcbiAgICAgICAgc3RydWN0IEpvaW50c1VuaWZvcm17XG4gICAgICAgICAgICAgbWF0cml4czphcnJheTxtYXQ0eDRmPixcbiAgICAgICAgfVxuICAgICAgICBzdHJ1Y3QgSW52ZXJzZUJpbmRNYXRyaWNlc1VuaWZvcm17XG4gICAgICAgICAgICBtYXRyaXhzOmFycmF5PG1hdDR4NGY+LFxuICAgICAgICB9XG4gICAgICAgIEBiaW5kaW5nKCR7ZGVmaW5lcy5za2luSm9pbnRzQnVmZmVyQmluZGluZ30pIEBncm91cCgwKSB2YXI8c3RvcmFnZSwgcmVhZD4gam9pbnRzVW5pZm9ybSA6IEpvaW50c1VuaWZvcm07XG4gICAgICAgIEBiaW5kaW5nKCR7ZGVmaW5lcy5pbnZzQnVmZmVyQmluZGluZ30pIEBncm91cCgwKSB2YXI8c3RvcmFnZSwgcmVhZD4gaW52ZXJzZUJpbmRNYXRyaWNlc1VuaWZvcm0gOiBJbnZlcnNlQmluZE1hdHJpY2VzVW5pZm9ybTtcbiAgICAgICAgZm4gZ2V0U2tpbk1hdHJpeChqb2ludHM6IHZlYzRmLCB3ZWlnaHRzOiB2ZWM0ZikgLT4gbWF0NHg0PGYzMj4ge1xuICAgICAgICAgICAgbGV0IGpvaW50MCA9IGpvaW50c1VuaWZvcm0ubWF0cml4c1t1MzIoam9pbnRzLngpXSAqIGludmVyc2VCaW5kTWF0cmljZXNVbmlmb3JtLm1hdHJpeHNbdTMyKGpvaW50cy54KV07XG4gICAgICAgICAgICBsZXQgam9pbnQxID0gam9pbnRzVW5pZm9ybS5tYXRyaXhzW3UzMihqb2ludHMueSldICogaW52ZXJzZUJpbmRNYXRyaWNlc1VuaWZvcm0ubWF0cml4c1t1MzIoam9pbnRzLnkpXTtcbiAgICAgICAgICAgIGxldCBqb2ludDIgPSBqb2ludHNVbmlmb3JtLm1hdHJpeHNbdTMyKGpvaW50cy56KV0gKiBpbnZlcnNlQmluZE1hdHJpY2VzVW5pZm9ybS5tYXRyaXhzW3UzMihqb2ludHMueildO1xuICAgICAgICAgICAgbGV0IGpvaW50MyA9IGpvaW50c1VuaWZvcm0ubWF0cml4c1t1MzIoam9pbnRzLncpXSAqIGludmVyc2VCaW5kTWF0cmljZXNVbmlmb3JtLm1hdHJpeHNbdTMyKGpvaW50cy53KV07XG4gICAgICAgIFxuICAgICAgICAgICAgbGV0IHNraW5NYXRyaXggPSBqb2ludDAgKiB3ZWlnaHRzLnggK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGpvaW50MSAqIHdlaWdodHMueSArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgam9pbnQyICogd2VpZ2h0cy56ICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBqb2ludDMgKiB3ZWlnaHRzLnc7XG4gICAgICAgICAgICByZXR1cm4gc2tpbk1hdHJpeDtcbiAgICAgICAgfVxuICAgICAgICAjZW5kaWZcbiAgIGA7XG59XG5leHBvcnQgZnVuY3Rpb24gc2tpblZlcnRIZWFkZXIoZGVmaW5lcykge1xuXHRyZXR1cm4gd2dzbFBhcnNlRGVmaW5lc2BcbiAgICNpZiAke2RlZmluZXMuSEFTX1NLSU59IFxuICAgICAgICBzdHJ1Y3QgSm9pbnRzVW5pZm9ybXtcbiAgICAgICAgICAgICBtYXRyaXhzOmFycmF5PG1hdDR4NGY+LFxuICAgICAgICB9XG4gICAgICAgIHN0cnVjdCBJbnZlcnNlQmluZE1hdHJpY2VzVW5pZm9ybXtcbiAgICAgICAgICAgIG1hdHJpeHM6YXJyYXk8bWF0NHg0Zj4sXG4gICAgICAgIH1cbiAgICAgICAgQGJpbmRpbmcoJHtkZWZpbmVzLnNraW5Kb2ludHNCdWZmZXJCaW5kaW5nfSkgQGdyb3VwKDApIHZhcjxzdG9yYWdlLCByZWFkPiBqb2ludHNVbmlmb3JtIDogSm9pbnRzVW5pZm9ybTtcbiAgICAgICAgQGJpbmRpbmcoJHtkZWZpbmVzLmludnNCdWZmZXJCaW5kaW5nfSkgQGdyb3VwKDApIHZhcjxzdG9yYWdlLCByZWFkPiBpbnZlcnNlQmluZE1hdHJpY2VzVW5pZm9ybSA6IEludmVyc2VCaW5kTWF0cmljZXNVbmlmb3JtO1xuICAgICAgICBmbiBnZXRTa2luTWF0cml4KGpvaW50czogdmVjNGYsIHdlaWdodHM6IHZlYzRmKSAtPiBtYXQ0eDQ8ZjMyPiB7XG4gICAgICAgICAgICBsZXQgam9pbnQwID0gam9pbnRzVW5pZm9ybS5tYXRyaXhzW3UzMihqb2ludHMueCldICogaW52ZXJzZUJpbmRNYXRyaWNlc1VuaWZvcm0ubWF0cml4c1t1MzIoam9pbnRzLngpXTtcbiAgICAgICAgICAgIGxldCBqb2ludDEgPSBqb2ludHNVbmlmb3JtLm1hdHJpeHNbdTMyKGpvaW50cy55KV0gKiBpbnZlcnNlQmluZE1hdHJpY2VzVW5pZm9ybS5tYXRyaXhzW3UzMihqb2ludHMueSldO1xuICAgICAgICAgICAgbGV0IGpvaW50MiA9IGpvaW50c1VuaWZvcm0ubWF0cml4c1t1MzIoam9pbnRzLnopXSAqIGludmVyc2VCaW5kTWF0cmljZXNVbmlmb3JtLm1hdHJpeHNbdTMyKGpvaW50cy56KV07XG4gICAgICAgICAgICBsZXQgam9pbnQzID0gam9pbnRzVW5pZm9ybS5tYXRyaXhzW3UzMihqb2ludHMudyldICogaW52ZXJzZUJpbmRNYXRyaWNlc1VuaWZvcm0ubWF0cml4c1t1MzIoam9pbnRzLncpXTtcbiAgICAgICAgXG4gICAgICAgICAgICBsZXQgc2tpbk1hdHJpeCA9IGpvaW50MCAqIHdlaWdodHMueCArXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgam9pbnQxICogd2VpZ2h0cy55ICtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBqb2ludDIgKiB3ZWlnaHRzLnogK1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGpvaW50MyAqIHdlaWdodHMudztcbiAgICAgICAgICAgIHJldHVybiBza2luTWF0cml4O1xuICAgICAgICB9XG4gICAgICAgICNlbmRpZlxuICAgYDtcbn1cbmV4cG9ydCBmdW5jdGlvbiBza2luVmVydE1haW4oZGVmaW5lcykge1xuXHRyZXR1cm4gd2dzbFBhcnNlRGVmaW5lc2BcbiAgICAgICAgI2lmICR7ZGVmaW5lcy5IQVNfU0tJTn1cbiAgICAgICAgICAgIG1vZGVsTWF0cml4ID1nZXRTa2luTWF0cml4KGlucHV0LmpvaW50MCxpbnB1dC53ZWlnaHQwKTtcbiAgICAgICAgICAgIHZOb3JtYWxWaWV3ID0gbm9ybWFsaXplKChtYXRlcmlhbFVuaWZvcm0ubm9ybWFsTWF0cml4ICogbW9kZWxNYXRyaXggKiB2ZWM0PGYzMj4oaW5wdXQubm9ybWFsLCAwLjApKS54eXopO1xuICAgICAgICAjZW5kaWZcbiAgYDtcbn1cbiIsImltcG9ydCB7IHdnc2xQYXJzZURlZmluZXMgfSBmcm9tIFwiLi4vLi4vV2dzbFByZXByb2Nlc3NvclwiO1xuXG5leHBvcnQgZnVuY3Rpb24gUGJyTWF0ZXJpYWxTdHJ1Y3QoZGVmaW5lcykge1xuXHRyZXR1cm4gd2dzbFBhcnNlRGVmaW5lc2BcbiAgICBzdHJ1Y3QgTWF0ZXJpYWxVbmlmb3JtIHtcbiAgICAgICAgICBtb2RlbE1hdHJpeDogbWF0NHg0PGYzMj4sXG4gICAgICAgICAgY29sb3I6IHZlYzM8ZjMyPixcbiAgICAgICAgICBvcGFjaXR5OmYzMixcbiAgICAgICAgICBub3JtYWxNYXRyaXg6IG1hdDR4NDxmMzI+LFxuICAgICAgICAgIGVtaXNzaXZlOnZlYzM8ZjMyPixcbiAgICAgICAgICBtZXRhbGxpYzpmMzIsXG4gICAgICAgICAgcm91Z2huZXNzOmYzMixcbiAgICAgICAgICAjaWYgJHtkZWZpbmVzLlVTRV9OT1JNQUxURVhUVVJFfVxuICAgICAgICAgICAgICBub3JtYWxUZXh0dXJlU2NhbGU6dmVjMjxmMzI+LFxuICAgICAgICAgICNlbmRpZlxuICAgICAgICAgICNpZiAke2RlZmluZXMuVVNFX0FPVEVYVFVSRX1cbiAgICAgICAgICAgICAgb2NjbHVzaW9uU3RyZW5ndGg6ZjMyLFxuICAgICAgICAgICNlbmRpZlxuICAgICAgfVxuICAgYDtcbn1cbiIsImltcG9ydCB7IEZyYWdJbnB1dCB9IGZyb20gXCIuL2F0dHJpYnV0ZS9GcmFnSW5wdXRcIjtcbmltcG9ydCB7IFBvaW50RnJhZ0lucHV0IH0gZnJvbSBcIi4vYXR0cmlidXRlL1BvaW50RnJhZ0lucHV0XCI7XG5pbXBvcnQgeyBQb2ludFZlcnRJbnB1dCB9IGZyb20gXCIuL2F0dHJpYnV0ZS9Qb2ludFZlcnRJbnB1dFwiO1xuaW1wb3J0IHsgUG9pbnRWZXJ0T3V0cHV0IH0gZnJvbSBcIi4vYXR0cmlidXRlL1BvaW50VmVydE91dHB1dFwiO1xuaW1wb3J0IHsgVmVydGV4SW5wdXQgfSBmcm9tIFwiLi9hdHRyaWJ1dGUvVmVydGV4SW5wdXRcIjtcbmltcG9ydCB7IFZlcnRleE91dHB1dCB9IGZyb20gXCIuL2F0dHJpYnV0ZS9WZXJ0ZXhPdXRwdXRcIjtcbmltcG9ydCB7IFN5c3RlbVVuaWZvcm0gfSBmcm9tIFwiLi9jb21tb24vU3lzdGVtVW5pZm9ybVwiO1xuaW1wb3J0IHsgVGV4dHVyZUFuZFNhbXBsZXJEZWZpbmUgfSBmcm9tIFwiLi9jb21tb24vVGV4dHVyZUFuZFNhbXBsZXJEZWZpbmVcIjtcbmltcG9ydCBlbnZpcm9ubWVudCBmcm9tIFwiLi9lbnZpcm9ubWVudC9lbnZpcm9ubWVudFwiO1xuaW1wb3J0IHsgaW5zdGFuY2VWZXJ0SGVhZGVyLCBpbnN0YW5jZVZlcnRNYWluIH0gZnJvbSBcIi4vaW5zdGFuY2UvSW5zdGFuY2VcIjtcbmltcG9ydCBsaWdodCBmcm9tIFwiLi9saWdodC9saWdodFwiO1xuaW1wb3J0IGxpZ2h0Q29tbW9uIGZyb20gXCIuL2xpZ2h0L2xpZ2h0Q29tbW9uXCI7XG5pbXBvcnQgeyBnZXROb3JtYWxCeU5vcm1hbFRleHR1cmUsIGdldFRCTiwgZ2V0Tm9ybWFsIH0gZnJvbSBcIi4vbm9ybWFsL2dldE5vcm1hbEJhY2tVcFwiO1xuaW1wb3J0IGJyZGYgZnJvbSBcIi4vcGJyL2JyZGZcIjtcbmltcG9ydCBpYmwgZnJvbSBcIi4vcGJyL2libFwiO1xuaW1wb3J0IHBickZ1bmN0aW9uIGZyb20gXCIuL3Bici9wYnJGdW5jdGlvblwiO1xuaW1wb3J0IHBiclN0cnVjdCBmcm9tIFwiLi9wYnIvcGJyU3RydWN0XCI7XG5pbXBvcnQgcGJyVGV4dHVyZSBmcm9tIFwiLi9wYnIvcGJyVGV4dHVyZVwiO1xuaW1wb3J0IHBiclV0aWxzIGZyb20gXCIuL3Bici9wYnJVdGlsc1wiO1xuaW1wb3J0IGJsaW5uX3Bob25nIGZyb20gXCIuL3Bob25nL2JsaW5uX3Bob25nXCI7XG5pbXBvcnQgcGhvbmdGdW5jdGlvbiBmcm9tIFwiLi9waG9uZy9waG9uZ0Z1bmN0aW9uXCI7XG5pbXBvcnQgcGhvbmdVdGlscyBmcm9tIFwiLi9waG9uZy9waG9uZ1V0aWxzXCI7XG4vLyBpbXBvcnQgZ2V0Tm9ybWFsIGZyb20gXCIuL25vcm1hbC9nZXROb3JtYWxcIjtcbmltcG9ydCB7IHNraW5WZXJ0SGVhZGVyLCBza2luVmVydE1haW4gfSBmcm9tIFwiLi9za2luL1NraW5WZXJ0XCI7XG5pbXBvcnQgeyBQYnJNYXRlcmlhbFN0cnVjdCB9IGZyb20gXCIuL3N0cnVjdC9QYnJNYXRlcmlhbFN0cnVjdFwiO1xuY29uc3QgU2hhZGVyQ2h1bmsgPSB7XG5cdGxpZ2h0LFxuXHRicmRmLFxuXHRwaG9uZ0Z1bmN0aW9uLFxuXHRwaG9uZ1V0aWxzLFxuXHRsaWdodENvbW1vbixcblx0cGJyU3RydWN0LFxuXHRwYnJGdW5jdGlvbixcblx0cGJyVGV4dHVyZSxcblx0cGJyVXRpbHMsXG5cdGVudmlyb25tZW50LFxuXHRibGlubl9waG9uZyxcblx0Z2V0Tm9ybWFsLFxuXHRnZXRUQk4sXG5cdGdldE5vcm1hbEJ5Tm9ybWFsVGV4dHVyZSxcblx0aWJsLFxuXHRza2luVmVydE1haW4sXG5cdHNraW5WZXJ0SGVhZGVyLFxuXHRGcmFnSW5wdXQsXG5cdFZlcnRleElucHV0LFxuXHRWZXJ0ZXhPdXRwdXQsXG5cdFBick1hdGVyaWFsU3RydWN0LFxuXHRTeXN0ZW1Vbmlmb3JtLFxuXHRpbnN0YW5jZVZlcnRNYWluLFxuXHRpbnN0YW5jZVZlcnRIZWFkZXIsXG5cdFRleHR1cmVBbmRTYW1wbGVyRGVmaW5lLFxuXHRQb2ludFZlcnRJbnB1dCxcblx0UG9pbnRWZXJ0T3V0cHV0LFxuXHRQb2ludEZyYWdJbnB1dFxufTtcbmV4cG9ydCBkZWZhdWx0IFNoYWRlckNodW5rO1xuIiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gc2hhZG93TWFwRGVidWdnZXJGcmFnKGRlZmluZXMpIHtcclxuXHRyZXR1cm4gYFxyXG4gICAgQGdyb3VwKDApIEBiaW5kaW5nKDEpIHZhciBzaGFkb3dTYW1wbGVyOiBzYW1wbGVyO1xyXG4gICAgQGdyb3VwKDApIEBiaW5kaW5nKDApIHZhciBzaGFkb3dNYXA6IHRleHR1cmVfZGVwdGhfMmQ7XHJcbiAgICBcclxuICAgIC8vIEBncm91cCgwKSBAYmluZGluZygwKSB2YXIgc2hhZG93TWFwOiB0ZXh0dXJlX2RlcHRoXzJkX2FycmF5O1xyXG4gICAgLy8gQGdyb3VwKDApIEBiaW5kaW5nKDApIHZhciBzaGFkb3dNYXA6IHRleHR1cmVfMmQ8ZjMyPjtcclxuXHJcbiAgICBzdHJ1Y3QgVmVydGV4T3V0cHV0IHtcclxuICAgICAgICBAYnVpbHRpbihwb3NpdGlvbikgcG9zaXRpb246IHZlYzQ8ZjMyPixcclxuICAgICAgICBAbG9jYXRpb24oMCkgdXY6IHZlYzI8ZjMyPixcclxuICAgIH07XHJcblxyXG4gICAgZm4gbGluZWFyaXplRGVwdGgoZGVwdGg6IGYzMiwgbmVhcjogZjMyLCBmYXI6IGYzMiktPmYzMiB7XHJcbiAgICAgIHJldHVybiAyICogKG5lYXIgKiBmYXIpIC8gKGZhciArIG5lYXIgLSBkZXB0aCAqIChmYXIgLSBuZWFyKSk7XHJcbiAgICB9XHJcblxyXG4gICAgQGZyYWdtZW50XHJcbiAgICBmbiBtYWluKGlucHV0OlZlcnRleE91dHB1dCkgLT4gQGxvY2F0aW9uKDApIHZlYzQ8ZjMyPiB7XHJcblx0XHRcdGxldCBjb2xvcjogdmVjNDxmMzI+ID0gdGV4dHVyZUdhdGhlcihzaGFkb3dNYXAsIHNoYWRvd1NhbXBsZXIsIHZlYzI8ZjMyPihpbnB1dC51di54LDEuMC1pbnB1dC51di55KSk7XHJcbiAgICAgIGxldCBkZXB0aCA9IChsaW5lYXJpemVEZXB0aChjb2xvci5yLCAwLjEsIDUwMCkgLSAwLjEpIC8gKDUwMCAtIDAuMSk7XHJcbiAgICAgIHJldHVybiB2ZWM0KHZlYzMoZGVwdGgpLCAxLjApOyAvLyBQZXJzcGVjdGl2ZUNhbWVyYVxyXG4gICAgICAvLyByZXR1cm4gY29sb3I7XHJcblxyXG4gICAgICAvLyByZXR1cm4gdGV4dHVyZVNhbXBsZShzaGFkb3dNYXAsIHNoYWRvd1NhbXBsZXIsIHZlYzI8ZjMyPihpbnB1dC51di54LDEuMC1pbnB1dC51di55KSk7XHJcblxyXG4gICAgfVxyXG4gICAgYDtcclxufVxyXG4iLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBzaGFkb3dNYXBEZWJ1Z2dlclZlcnQoZGVmaW5lcykge1xyXG5cdHJldHVybiBgXHJcbiAgICBzdHJ1Y3QgVmVydGV4SW5wdXQge1xyXG4gICAgICAgICBAbG9jYXRpb24oJHtkZWZpbmVzLnBvc2l0aW9uTG9jYXRpb259KSBwb3NpdGlvbjogdmVjMjxmMzI+LCAgICAgICBcclxuICAgIH1cclxuICAgIHN0cnVjdCBWZXJ0ZXhPdXRwdXQge1xyXG4gICAgICAgICBAYnVpbHRpbihwb3NpdGlvbikgcG9zaXRpb246IHZlYzQ8ZjMyPixcclxuICAgICAgICAgQGxvY2F0aW9uKDApIHV2OiB2ZWMyPGYzMj4sXHJcbiAgICAgfTtcclxuICAgIEB2ZXJ0ZXhcclxuICAgIGZuIG1haW4oaW5wdXQ6IFZlcnRleElucHV0KSAtPiBWZXJ0ZXhPdXRwdXQge1xyXG4gICAgIHZhciBvdXRwdXQ6VmVydGV4T3V0cHV0O1xyXG4gICAgIG91dHB1dC51diA9IGlucHV0LnBvc2l0aW9uICogMC41ICsgMC41O1xyXG4gICAgIG91dHB1dC5wb3NpdGlvbiA9IHZlYzQ8ZjMyPihpbnB1dC5wb3NpdGlvbiwgMC4wLCAxLjApOztcclxuICAgICByZXR1cm4gb3V0cHV0O1xyXG4gICAgfVxyXG4gICAgYDtcclxufVxyXG4iLCIvLyBpbXBvcnQgQ29sb3IgZnJvbSBcIi4uLy4uL21hdGgvQ29sb3JcIjtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHNoYWRvd01hcEZyYWcoZGVmaW5lcykge1xyXG5cdHJldHVybiBgXHJcbiAgICBzdHJ1Y3QgVmVydGV4T3V0cHV0IHtcclxuICAgICAgICBAYnVpbHRpbihwb3NpdGlvbikgcG9zaXRpb246IHZlYzQ8ZjMyPixcclxuICAgICAgICBAbG9jYXRpb24oMCkgY29sb3I6IHZlYzQ8ZjMyPixcclxuICAgIH07XHJcbiAgICBAZnJhZ21lbnRcclxuICAgIGZuIG1haW4oaW5wdXQ6VmVydGV4T3V0cHV0KSAtPiBAbG9jYXRpb24oMCkgdmVjNDxmMzI+IHtcclxuICAgICAgcmV0dXJuIGlucHV0LmNvbG9yO1xyXG4gICAgfVxyXG4gICAgYDtcclxufVxyXG4iLCJpbXBvcnQgeyB3Z3NsUGFyc2VEZWZpbmVzIH0gZnJvbSBcIi4uLy4uL1dnc2xQcmVwcm9jZXNzb3JcIjtcclxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gc2hhZG93TWFwVmVydChkZWZpbmVzKSB7XHJcblx0cmV0dXJuIHdnc2xQYXJzZURlZmluZXNgXHJcbiAgIHN0cnVjdCBWZXJ0ZXhJbnB1dCB7XHJcbiAgICAgIEBsb2NhdGlvbigke2RlZmluZXMucG9zaXRpb25Mb2NhdGlvbn0pIHBvc2l0aW9uOiB2ZWMzPGYzMj4sICAgICAgIFxyXG4gICB9O1xyXG4gICBzdHJ1Y3QgVmVydGV4T3V0cHV0IHtcclxuICAgICAgQGJ1aWx0aW4ocG9zaXRpb24pIHBvc2l0aW9uOiB2ZWM0PGYzMj4sXHJcbiAgICB9O1xyXG4gICBzdHJ1Y3QgU2VsZlVuaWZvcm0ge1xyXG4gICAgICBtb2RlbE1hdHJpeDogbWF0NHg0PGYzMj4sXHJcbiAgIH07XHJcbiAgIHN0cnVjdCBTeXN0ZW1Vbmlmb3JtIHtcclxuICAgICAgcHJvamVjdGlvbk1hdHJpeDogbWF0NHg0PGYzMj4sXHJcbiAgICAgIHZpZXdNYXRyaXg6IG1hdDR4NDxmMzI+LFxyXG4gICAgICBpbnZlcnNlVmlld01hdHJpeDogbWF0NHg0PGYzMj4sXHJcbiAgICAgIGNhbWVyYVBvc2l0aW9uOiB2ZWMzPGYzMj4sXHJcbiAgIH07XHJcblxyXG4gICAjaWYgJHtkZWZpbmVzLmlzUG9pbnRMaWdodFNoYWRvd01hcH1cclxuICAgICAgc3RydWN0IFBvaW50TGlnaHRVbmlmb3JtIHtcclxuICAgICAgICAgdnBNYXRyaXg6IG1hdDR4NDxmMzI+LFxyXG4gICAgICAgICAvLyB2cE1hdHJpeEFycmF5OiBhcnJheTxtYXQ0eDQ8ZjMyPiwgNj4sXHJcbiAgICAgIH07XHJcbiAgICAgIEBncm91cCgxKSBAYmluZGluZygke2RlZmluZXMucG9pbnRMaWdodFNoYWRvd0NhbWVyYUJpbmRpbmd9KSB2YXI8c3RvcmFnZSwgcmVhZD4gcG9pbnRMaWdodFVuaWZvcm06IFBvaW50TGlnaHRVbmlmb3JtO1xyXG4gICAjZW5kaWZcclxuXHJcbiAgIEBncm91cCgwKSBAYmluZGluZygke2RlZmluZXMuc2VsZkJpbmRpbmd9KSB2YXI8dW5pZm9ybT4gc2VsZlVuaWZvcm0gOiBTZWxmVW5pZm9ybTtcclxuICAgQGdyb3VwKDEpIEBiaW5kaW5nKCR7ZGVmaW5lcy5jYW1lcmFCaW5kaW5nfSkgdmFyPHVuaWZvcm0+IHN5c3RlbVVuaWZvcm0gOiBTeXN0ZW1Vbmlmb3JtO1xyXG5cclxuICAgQHZlcnRleFxyXG4gICBmbiBtYWluKGlucHV0OiBWZXJ0ZXhJbnB1dCkgLT4gVmVydGV4T3V0cHV0IHtcclxuICAgICAgdmFyIG91dHB1dDpWZXJ0ZXhPdXRwdXQ7XHJcbiAgICAgICNpZiAke2RlZmluZXMuaXNQb2ludExpZ2h0U2hhZG93TWFwfVxyXG4gICAgICAgICBvdXRwdXQucG9zaXRpb24gPSBwb2ludExpZ2h0VW5pZm9ybS52cE1hdHJpeCAqIHNlbGZVbmlmb3JtLm1vZGVsTWF0cml4ICogdmVjNDxmMzI+KGlucHV0LnBvc2l0aW9uLDEuMCk7XHJcbiAgICAgICNlbHNlXHJcbiAgICAgICAgIG91dHB1dC5wb3NpdGlvbiA9IHN5c3RlbVVuaWZvcm0ucHJvamVjdGlvbk1hdHJpeCAqIHN5c3RlbVVuaWZvcm0udmlld01hdHJpeCAqIHNlbGZVbmlmb3JtLm1vZGVsTWF0cml4ICogdmVjNDxmMzI+KGlucHV0LnBvc2l0aW9uLDEuMCk7XHJcbiAgICAgICNlbmRpZlxyXG4gICAgICByZXR1cm4gb3V0cHV0O1xyXG4gICB9XHJcbiAgIGA7XHJcbn1cclxuIiwiaW1wb3J0IGNvbG9yRnJhZyBmcm9tIFwiLi9tYXRlcmlhbC9jb2xvckZyYWdcIjtcbmltcG9ydCBjb2xvclZlcnQgZnJvbSBcIi4vbWF0ZXJpYWwvY29sb3JWZXJ0XCI7XG5pbXBvcnQgcGJyX2ZzIGZyb20gXCIuL21hdGVyaWFsL3Bicl9mc1wiO1xuaW1wb3J0IHBicl92cyBmcm9tIFwiLi9tYXRlcmlhbC9wYnJfdnNcIjtcbmltcG9ydCBwYnJGcmFnIGZyb20gXCIuL21hdGVyaWFsL3BickZyYWdcIjtcbmltcG9ydCBwYnJWZXJ0IGZyb20gXCIuL21hdGVyaWFsL3BiclZlcnRcIjtcbmltcG9ydCBwaG9uZ0ZyYWcgZnJvbSBcIi4vbWF0ZXJpYWwvcGhvbmdGcmFnXCI7XG5pbXBvcnQgcGhvbmdWZXJ0IGZyb20gXCIuL21hdGVyaWFsL3Bob25nVmVydFwiO1xuaW1wb3J0IHsgcG9pbnRfZnMgfSBmcm9tIFwiLi9tYXRlcmlhbC9wb2ludF9mc1wiO1xuaW1wb3J0IHsgcG9pbnRfdnMgfSBmcm9tIFwiLi9tYXRlcmlhbC9wb2ludF92c1wiO1xuaW1wb3J0IHF1YWRGcmFnIGZyb20gXCIuL21hdGVyaWFsL3F1YWRGcmFnXCI7XG5pbXBvcnQgcXVhZFZlcnQgZnJvbSBcIi4vbWF0ZXJpYWwvcXVhZFZlcnRcIjtcbmltcG9ydCBza3lCb3hGcmFnIGZyb20gXCIuL21hdGVyaWFsL3NreUJveEZyYWdcIjtcbmltcG9ydCBza3lCb3hWZXJ0IGZyb20gXCIuL21hdGVyaWFsL3NreUJveFZlcnRcIjtcbmltcG9ydCB7IHNwcml0ZV9mcyB9IGZyb20gXCIuL21hdGVyaWFsL3Nwcml0ZV9mc1wiO1xuaW1wb3J0IHsgc3ByaXRlX3ZzIH0gZnJvbSBcIi4vbWF0ZXJpYWwvc3ByaXRlX3ZzXCI7XG5pbXBvcnQgYmxlbmRGcmFnIGZyb20gXCIuL3Bvc3RQcm9jZXNzL2JsZW5kL2JsZW5kRnJhZ1wiO1xuaW1wb3J0IEJsdXIgZnJvbSBcIi4vcG9zdFByb2Nlc3MvYmxvb20vQmx1clwiO1xuaW1wb3J0IEx1bWlub3NpdHlIaWdoIGZyb20gXCIuL3Bvc3RQcm9jZXNzL2Jsb29tL0x1bWlub3NpdHlIaWdoXCI7XG5pbXBvcnQgU2hhZGVyQ2h1bmsgZnJvbSBcIi4vc2hhZGVyQ2h1bmsvU2hhZGVyQ2h1bmtcIjtcbmltcG9ydCBzaGFkb3dNYXBEZWJ1Z2dlckZyYWcgZnJvbSBcIi4vc2hhZGVyQ2h1bmsvc2hhZG93L3NoYWRvd01hcERlYnVnZ2VyRnJhZ1wiO1xuaW1wb3J0IHNoYWRvd01hcERlYnVnZ2VyVmVydCBmcm9tIFwiLi9zaGFkZXJDaHVuay9zaGFkb3cvc2hhZG93TWFwRGVidWdnZXJWZXJ0XCI7XG5pbXBvcnQgc2hhZG93TWFwRnJhZyBmcm9tIFwiLi9zaGFkZXJDaHVuay9zaGFkb3cvc2hhZG93TWFwRnJhZ1wiO1xuaW1wb3J0IHNoYWRvd01hcFZlcnQgZnJvbSBcIi4vc2hhZGVyQ2h1bmsvc2hhZG93L3NoYWRvd01hcFZlcnRcIjtcblxuZnVuY3Rpb24gcmVkdWNlQ29tbWEoc2hhZGVyKSB7XG5cdC8vIOWvueaJgOacieeahGluY2x1ZGXlpITnkIZcblx0cmV0dXJuIHNoYWRlciAhPSB1bmRlZmluZWQgPyByZXNvbHZlSW5jbHVkZXMoc2hhZGVyKSA6IHVuZGVmaW5lZDtcbn1cbmNvbnN0IGluY2x1ZGVQYXR0ZXJuID0gL15bIFxcdF0qI2luY2x1ZGUgKzwoW1xcd1xcZC4vXSspPi9nbTtcbmxldCBjdXJyZW50RGVmaW5lcyA9IHt9O1xuY29uc3Qgc2hhZGVycyA9IHtcblx0cGhvbmc6IHtcblx0XHRmcmFnOiBwaG9uZ0ZyYWcsXG5cdFx0dmVydDogcGhvbmdWZXJ0XG5cdH0sXG5cdGNvbG9yOiB7XG5cdFx0ZnJhZzogY29sb3JGcmFnLFxuXHRcdHZlcnQ6IGNvbG9yVmVydFxuXHR9LFxuXHRwYnI6IHtcblx0XHRmcmFnOiBwYnJGcmFnLFxuXHRcdHZlcnQ6IHBiclZlcnRcblx0fSxcblx0c2t5Ym94OiB7XG5cdFx0ZnJhZzogc2t5Qm94RnJhZyxcblx0XHR2ZXJ0OiBza3lCb3hWZXJ0XG5cdH0sXG5cdHJlc29sdmU6IHtcblx0XHRmcmFnOiBxdWFkRnJhZyxcblx0XHR2ZXJ0OiBxdWFkVmVydFxuXHR9LFxuXHRwYnJfbWF0OiB7XG5cdFx0ZnJhZzogcGJyX2ZzLFxuXHRcdHZlcnQ6IHBicl92c1xuXHR9LFxuXHRibHVyOiB7XG5cdFx0ZnJhZzogQmx1cixcblx0XHR2ZXJ0OiBxdWFkVmVydFxuXHR9LFxuXHRsdW1pbm9zaXR5SGlnaDoge1xuXHRcdGZyYWc6IEx1bWlub3NpdHlIaWdoLFxuXHRcdHZlcnQ6IHF1YWRWZXJ0XG5cdH0sXG5cdGJsZW5kOiB7XG5cdFx0ZnJhZzogYmxlbmRGcmFnLFxuXHRcdHZlcnQ6IHF1YWRWZXJ0XG5cdH0sXG5cdHNoYWRvd01hcERlYnVnZ2VyOiB7XG5cdFx0ZnJhZzogc2hhZG93TWFwRGVidWdnZXJGcmFnLFxuXHRcdHZlcnQ6IHNoYWRvd01hcERlYnVnZ2VyVmVydFxuXHR9LFxuXHRzaGFkb3dNYXA6IHtcblx0XHR2ZXJ0OiBzaGFkb3dNYXBWZXJ0LFxuXHRcdGZyYWc6IHNoYWRvd01hcEZyYWdcblx0fSxcblx0c3ByaXRlOiB7XG5cdFx0dmVydDogc3ByaXRlX3ZzLFxuXHRcdGZyYWc6IHNwcml0ZV9mc1xuXHR9LFxuXHRwb2ludDoge1xuXHRcdHZlcnQ6IHBvaW50X3ZzLFxuXHRcdGZyYWc6IHBvaW50X2ZzXG5cdH1cbn07XG5cbmZ1bmN0aW9uIHJlc29sdmVJbmNsdWRlcyhzdHJpbmcpIHtcblx0cmV0dXJuIHN0cmluZy5yZXBsYWNlKGluY2x1ZGVQYXR0ZXJuLCBpbmNsdWRlUmVwbGFjZXIpO1xufVxuXG5mdW5jdGlvbiBpbmNsdWRlUmVwbGFjZXIobWF0Y2gsIGluY2x1ZGUpIHtcblx0Y29uc3QgZXhjdXRlID0gU2hhZGVyQ2h1bmtbaW5jbHVkZV07XG5cdGlmIChleGN1dGUgPT09IHVuZGVmaW5lZCkge1xuXHRcdHRocm93IG5ldyBFcnJvcihgQ2FuIG5vdCByZXNvbHZlICNpbmNsdWRlIDwke2luY2x1ZGV9PmApO1xuXHR9XG5cdGNvbnN0IHJlc3VsdCA9IGV4Y3V0ZShjdXJyZW50RGVmaW5lcyk7XG5cdHJldHVybiByZXNvbHZlSW5jbHVkZXMocmVzdWx0KTtcbn1cbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGdldFZlcnRGcmFnKHR5cGUsIGRlZmluZXMgPSB7fSkge1xuXHRjb25zdCBleGN1dGVGdW5jID0gc2hhZGVyc1t0eXBlXTtcblx0Y3VycmVudERlZmluZXMgPSBkZWZpbmVzO1xuXHRyZXR1cm4ge1xuXHRcdHZlcnQ6IHJlZHVjZUNvbW1hKGV4Y3V0ZUZ1bmM/LnZlcnQoY3VycmVudERlZmluZXMpKSxcblx0XHRmcmFnOiByZWR1Y2VDb21tYShleGN1dGVGdW5jPy5mcmFnKGN1cnJlbnREZWZpbmVzKSlcblx0fTtcbn1cbiIsImltcG9ydCB7XHJcblx0U2hhZGVyRGVmaW5lLFxyXG5cdFNoYWRlclN0cmluZyxcclxuXHRjb21wdXRlUGFyYW1zLFxyXG5cdHJlbmRlclBhcmFtcyxcclxuXHRTaGFkZXJNb2R1bGUsXHJcblx0U2hhZGVyU291cmNlUGFyYW1zLFxyXG5cdFNoYWRlckZ1bmMsXHJcblx0U2hhZGVyTGFuZ3VhZ2UsXHJcblx0U2hhZGVyTWFpblN0YWdlXHJcbn0gZnJvbSBcIi4uL2NvcmUvV2ViR1BVVHlwZXNcIjtcclxuaW1wb3J0IGdldFZlcnRGcmFnIGZyb20gXCIuL1NoYWRlcnNcIjtcclxuZXhwb3J0IGNsYXNzIFNoYWRlclNvdXJjZSB7XHJcblx0cHVibGljIGNvbXB1dGU6IGNvbXB1dGVQYXJhbXM7XHJcblx0cHVibGljIHN0YXRpYyBnbHNsYW5nO1xyXG5cdHB1YmxpYyByZW5kZXI6IHJlbmRlclBhcmFtcztcclxuXHRwdWJsaWMgc2hhZGVySWQ6IHN0cmluZztcclxuXHRwdWJsaWMgZGlydHk6IGJvb2xlYW47XHJcblx0cHVibGljIGRlZmluZXM/OiBTaGFkZXJEZWZpbmU7XHJcblx0cHJpdmF0ZSBfdWlkOiBzdHJpbmc7XHJcblx0cHJpdmF0ZSBfc2hhZGVyTW9kdWxlOiBTaGFkZXJNb2R1bGU7XHJcblx0cHJpdmF0ZSBfc2hhZGVyTGFuZ3VhZ2U6U2hhZGVyTGFuZ3VhZ2U7XHJcblx0Y29uc3RydWN0b3Iob3B0aW9uczogU2hhZGVyU291cmNlUGFyYW1zKSB7XHJcblx0XHR0aGlzLnNoYWRlcklkID0gb3B0aW9ucy5zaGFkZXJJZDtcclxuXHRcdHRoaXMuZGVmaW5lcyA9IG9wdGlvbnMuZGVmaW5lcyB8fCB7fTtcclxuXHRcdHRoaXMucmVuZGVyID0gb3B0aW9ucy5yZW5kZXI7XHJcblx0XHR0aGlzLmNvbXB1dGUgPSBvcHRpb25zLmNvbXB1dGU7XHJcblx0XHR0aGlzLl9zaGFkZXJMYW5ndWFnZT1vcHRpb25zLmxhbmd1YWdlXHJcblx0XHR0aGlzLmRpcnR5ID0gdHJ1ZTtcclxuXHR9XHJcblx0Z2V0IHVpZCgpIHtcclxuXHRcdHRoaXMuX3VpZCA9IHRoaXMuc2hhZGVySWQuY29uY2F0KEpTT04uc3RyaW5naWZ5KHRoaXMuZGVmaW5lcykpO1xyXG5cdFx0cmV0dXJuIHRoaXMuX3VpZDtcclxuXHR9XHJcblx0cHVibGljIHNldERlZmluZXMoZGVmaW5lcykge1xyXG5cdFx0aWYgKCFkZWZpbmVzKSByZXR1cm47XHJcblx0XHR0aGlzLmRpcnR5ID0gdHJ1ZTtcclxuXHRcdHRoaXMuZGVmaW5lcyA9IE9iamVjdC5hc3NpZ24odGhpcy5kZWZpbmVzLCBkZWZpbmVzKTtcclxuXHR9XHJcblx0cHVibGljIGdldFNoYWRlck1vZHVsZShkZXZpY2U6IEdQVURldmljZSk6IFNoYWRlck1vZHVsZSB7XHJcblx0XHRpZiAodGhpcy5kaXJ0eSkge1xyXG5cdFx0XHRjb25zdCB7IHZlcnQsIGZyYWcsIGNvbXB1dGUgfSA9IHRoaXMuZ2V0U2hhZGVyU3RyKCkgfHwge307XHJcblx0XHRcdGNvbnN0IGlzR0xTTD0odGhpcy5fc2hhZGVyTGFuZ3VhZ2U9PVNoYWRlckxhbmd1YWdlLkdMU0wpO1xyXG5cdFx0XHRjb25zdCB2ZXJ0R1BVTW9kdWxlID0gdmVydCA/IGRldmljZS5jcmVhdGVTaGFkZXJNb2R1bGUoeyBjb2RlOiBpc0dMU0w/U2hhZGVyU291cmNlPy5nbHNsYW5nLmNvbXBpbGVHTFNMKHZlcnQsU2hhZGVyTWFpblN0YWdlLlZFUlQpOiB2ZXJ0IH0pIDogdW5kZWZpbmVkO1xyXG5cdFx0XHRjb25zdCBmcmFnR1BVTW9kdWxlID0gZnJhZyA/IGRldmljZS5jcmVhdGVTaGFkZXJNb2R1bGUoeyBjb2RlOiBpc0dMU0w/U2hhZGVyU291cmNlPy5nbHNsYW5nLmNvbXBpbGVHTFNMKGZyYWcsU2hhZGVyTWFpblN0YWdlLkZSQUcpOiBmcmFnIH0pIDogdW5kZWZpbmVkO1xyXG5cdFx0XHRjb25zdCBjb21wdXRlR1BVTW9kdWxlID0gY29tcHV0ZSA/IGRldmljZS5jcmVhdGVTaGFkZXJNb2R1bGUoeyBjb2RlOiBpc0dMU0w/U2hhZGVyU291cmNlPy5nbHNsYW5nLmNvbXBpbGVHTFNMKGNvbXB1dGUsU2hhZGVyTWFpblN0YWdlLkNPTVBVVEUpOiBjb21wdXRlIH0pIDogdW5kZWZpbmVkO1xyXG5cdFx0XHR0aGlzLl9zaGFkZXJNb2R1bGUgPSB7XHJcblx0XHRcdFx0dmVydDogdmVydEdQVU1vZHVsZSxcclxuXHRcdFx0XHRmcmFnOiBmcmFnR1BVTW9kdWxlLFxyXG5cdFx0XHRcdGNvbXB1dGU6IGNvbXB1dGVHUFVNb2R1bGVcclxuXHRcdFx0fTtcclxuXHRcdFx0dGhpcy5kaXJ0eSA9IGZhbHNlO1xyXG5cdFx0fVxyXG5cdFx0cmV0dXJuIHRoaXMuX3NoYWRlck1vZHVsZTtcclxuXHR9XHJcblx0cHVibGljIGRlc3Ryb3koKSB7XHJcblx0XHR0aGlzLnJlbmRlciA9IG51bGw7XHJcblx0XHR0aGlzLmNvbXB1dGUgPSBudWxsO1xyXG5cdFx0dGhpcy5fc2hhZGVyTW9kdWxlID0gbnVsbDtcclxuXHRcdHRoaXMuZGVmaW5lcyA9IG51bGw7XHJcblx0fVxyXG5cdHByaXZhdGUgZ2V0U2hhZGVyU3RyKCk6IFNoYWRlclN0cmluZyB7XHJcblx0XHRjb25zdCB7IGZyYWdTaGFkZXIsIHZlcnRTaGFkZXIgfSA9IHRoaXMucmVuZGVyIHx8IHt9O1xyXG5cdFx0Y29uc3QgeyBjb21wdXRlU2hhZGVyIH0gPSB0aGlzLmNvbXB1dGUgfHwge307XHJcblx0XHRjb25zdCBzb3VyY2UgPSBnZXRWZXJ0RnJhZyh0aGlzLnNoYWRlcklkLCB0aGlzLmRlZmluZXMpO1xyXG5cdFx0Y29uc3QgdmVydCA9XHJcblx0XHRcdHNvdXJjZT8udmVydCA/PyAodmVydFNoYWRlciBpbnN0YW5jZW9mIEZ1bmN0aW9uID8gKDxTaGFkZXJGdW5jPnZlcnRTaGFkZXIpKHRoaXMuZGVmaW5lcykgOiB2ZXJ0U2hhZGVyKTtcclxuXHRcdGNvbnN0IGZyYWcgPVxyXG5cdFx0XHRzb3VyY2U/LmZyYWcgPz8gKGZyYWdTaGFkZXIgaW5zdGFuY2VvZiBGdW5jdGlvbiA/ICg8U2hhZGVyRnVuYz5mcmFnU2hhZGVyKSh0aGlzLmRlZmluZXMpIDogZnJhZ1NoYWRlcik7XHJcblx0XHRjb25zdCBjb21wdXRlID0gY29tcHV0ZVNoYWRlciBpbnN0YW5jZW9mIEZ1bmN0aW9uID8gKGNvbXB1dGVTaGFkZXIgYXMgU2hhZGVyRnVuYykodGhpcy5kZWZpbmVzKSA6IGNvbXB1dGVTaGFkZXI7XHJcblx0XHRyZXR1cm4ge1xyXG5cdFx0XHR2ZXJ0LFxyXG5cdFx0XHRmcmFnLFxyXG5cdFx0XHRjb21wdXRlXHJcblx0XHR9O1xyXG5cdH1cclxuXHRzdGF0aWMgcmVwbGFjZU1haW4oc291cmNlOiBzdHJpbmcsIHJlbmFtZWRNYWluOiBzdHJpbmcpIHtcclxuXHRcdHJlbmFtZWRNYWluID0gYHZvaWQgJHtyZW5hbWVkTWFpbn0oKWA7XHJcblx0XHRyZXR1cm4gc291cmNlLnJlcGxhY2UoL3ZvaWRcXHMrbWFpblxccypcXChcXHMqKD86dm9pZCk/XFxzKlxcKS9nLCByZW5hbWVkTWFpbik7XHJcblx0fVxyXG59XHJcbiIsImV4cG9ydCBhc3luYyBmdW5jdGlvbiBsb2FkR2xzbGFuZ01vZHVsZSgpOlByb21pc2U8YW55PiB7XHJcbiAgLy8gQHRzLWlnbm9yZVxyXG4gIGNvbnN0IGdsc2xhbmdNb2R1bGUgPSBhd2FpdCBpbXBvcnQoJ2h0dHBzOi8vdW5wa2cuY29tL0B3ZWJncHUvZ2xzbGFuZ0AwLjAuMTUvZGlzdC93ZWItZGV2ZWwvZ2xzbGFuZy5qcycpO1xyXG4gIGNvbnN0IGdsc2xhbmcgPSBhd2FpdCBnbHNsYW5nTW9kdWxlLmRlZmF1bHQoKTtcclxuICByZXR1cm4gZ2xzbGFuZztcclxufSIsImltcG9ydCBUZXh0dXJlIGZyb20gXCIuLi9yZW5kZXIvVGV4dHVyZVwiO1xuXG5leHBvcnQgY2xhc3MgTWlwbWFwR2VuZXJhdG9yIHtcblx0ZGV2aWNlOiBHUFVEZXZpY2U7XG5cdHNhbXBsZXI6IEdQVVNhbXBsZXI7XG5cdHBpcGVsaW5lczogb2JqZWN0O1xuXHRtaXBtYXBTaGFkZXJNb2R1bGU6IEdQVVNoYWRlck1vZHVsZTtcblx0Y29uc3RydWN0b3IoZGV2aWNlKSB7XG5cdFx0dGhpcy5kZXZpY2UgPSBkZXZpY2U7XG5cdFx0dGhpcy5zYW1wbGVyID0gZGV2aWNlLmNyZWF0ZVNhbXBsZXIoeyBtaW5GaWx0ZXI6IFwibGluZWFyXCIgfSk7XG5cdFx0Ly8gV2UnbGwgbmVlZCBhIG5ldyBwaXBlbGluZSBmb3IgZXZlcnkgdGV4dHVyZSBmb3JtYXQgdXNlZC5cblx0XHR0aGlzLnBpcGVsaW5lcyA9IHt9O1xuXHR9XG5cdHByaXZhdGUgZ2V0TWlwbWFwUGlwZWxpbmUoZm9ybWF0KSB7XG5cdFx0bGV0IHBpcGVsaW5lID0gdGhpcy5waXBlbGluZXNbZm9ybWF0XTtcblx0XHRpZiAoIXBpcGVsaW5lKSB7XG5cdFx0XHQvLyBTaGFkZXIgbW9kdWxlcyBpcyBzaGFyZWQgYmV0d2VlbiBhbGwgcGlwZWxpbmVzLCBzbyBvbmx5IGNyZWF0ZSBvbmNlLlxuXHRcdFx0aWYgKCF0aGlzLm1pcG1hcFNoYWRlck1vZHVsZSkge1xuXHRcdFx0XHR0aGlzLm1pcG1hcFNoYWRlck1vZHVsZSA9IHRoaXMuZGV2aWNlLmNyZWF0ZVNoYWRlck1vZHVsZSh7XG5cdFx0XHRcdFx0Y29kZTogYFxuICAgICAgICAgICAgICB2YXI8cHJpdmF0ZT4gcG9zIDogYXJyYXk8dmVjMjxmMzI+LCAzPiA9IGFycmF5PHZlYzI8ZjMyPiwgMz4oXG4gICAgICAgICAgICAgICAgdmVjMjxmMzI+KC0xLjAsIC0xLjApLCB2ZWMyPGYzMj4oLTEuMCwgMy4wKSwgdmVjMjxmMzI+KDMuMCwgLTEuMCkpO1xuICAgICAgICAgICAgICBzdHJ1Y3QgVmVydGV4T3V0cHV0IHtcbiAgICAgICAgICAgICAgICBAYnVpbHRpbihwb3NpdGlvbikgcG9zaXRpb24gOiB2ZWM0PGYzMj4sXG4gICAgICAgICAgICAgICAgQGxvY2F0aW9uKDApIHRleENvb3JkIDogdmVjMjxmMzI+LFxuICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICBAdmVydGV4XG4gICAgICAgICAgICAgIGZuIHZlcnRleE1haW4oQGJ1aWx0aW4odmVydGV4X2luZGV4KSB2ZXJ0ZXhJbmRleCA6IHUzMikgLT4gVmVydGV4T3V0cHV0IHtcbiAgICAgICAgICAgICAgICB2YXIgb3V0cHV0IDogVmVydGV4T3V0cHV0O1xuICAgICAgICAgICAgICAgIG91dHB1dC50ZXhDb29yZCA9IHBvc1t2ZXJ0ZXhJbmRleF0gKiB2ZWMyPGYzMj4oMC41LCAtMC41KSArIHZlYzI8ZjMyPigwLjUpO1xuICAgICAgICAgICAgICAgIG91dHB1dC5wb3NpdGlvbiA9IHZlYzQ8ZjMyPihwb3NbdmVydGV4SW5kZXhdLCAwLjAsIDEuMCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIG91dHB1dDtcbiAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICBAZ3JvdXAoMCkgQGJpbmRpbmcoMCkgdmFyIGltZ1NhbXBsZXIgOiBzYW1wbGVyO1xuICAgICAgICAgICAgICBAZ3JvdXAoMCkgQGJpbmRpbmcoMSkgdmFyIGltZyA6IHRleHR1cmVfMmQ8ZjMyPjtcbiAgICAgICAgICAgICAgQGZyYWdtZW50XG4gICAgICAgICAgICAgIGZuIGZyYWdtZW50TWFpbihAbG9jYXRpb24oMCkgdGV4Q29vcmQgOiB2ZWMyPGYzMj4pIC0+IEBsb2NhdGlvbigwKSB2ZWM0PGYzMj4ge1xuICAgICAgICAgICAgICAgIHJldHVybiB0ZXh0dXJlU2FtcGxlKGltZywgaW1nU2FtcGxlciwgdGV4Q29vcmQpO1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICBgXG5cdFx0XHRcdH0pO1xuXHRcdFx0fVxuXHRcdFx0cGlwZWxpbmUgPSB0aGlzLmRldmljZS5jcmVhdGVSZW5kZXJQaXBlbGluZSh7XG5cdFx0XHRcdGxheW91dDogXCJhdXRvXCIsXG5cdFx0XHRcdHZlcnRleDoge1xuXHRcdFx0XHRcdG1vZHVsZTogdGhpcy5taXBtYXBTaGFkZXJNb2R1bGUsXG5cdFx0XHRcdFx0ZW50cnlQb2ludDogXCJ2ZXJ0ZXhNYWluXCJcblx0XHRcdFx0fSxcblx0XHRcdFx0ZnJhZ21lbnQ6IHtcblx0XHRcdFx0XHRtb2R1bGU6IHRoaXMubWlwbWFwU2hhZGVyTW9kdWxlLFxuXHRcdFx0XHRcdGVudHJ5UG9pbnQ6IFwiZnJhZ21lbnRNYWluXCIsXG5cdFx0XHRcdFx0dGFyZ2V0czogW3sgZm9ybWF0IH1dXG5cdFx0XHRcdH1cblx0XHRcdH0pO1xuXHRcdFx0dGhpcy5waXBlbGluZXNbZm9ybWF0XSA9IHBpcGVsaW5lO1xuXHRcdH1cblx0XHRyZXR1cm4gcGlwZWxpbmU7XG5cdH1cblxuXHQvKipcblx0ICogR2VuZXJhdGVzIG1pcG1hcHMgZm9yIHRoZSBnaXZlbiBHUFVUZXh0dXJlIGZyb20gdGhlIGRhdGEgaW4gbGV2ZWwgMC5cblx0ICpcblx0ICogQHBhcmFtIHttb2R1bGU6RXh0ZXJuYWwuR1BVVGV4dHVyZX0gdGV4dHVyZSAtIFRleHR1cmUgdG8gZ2VuZXJhdGUgbWlwbWFwcyBmb3IuXG5cdCAqIEBwYXJhbSB7b2JqZWN0fSB0ZXh0dXJlRGVzY3JpcHRvciAtIEdQVVRleHR1cmVEZXNjcmlwdG9yIHRoZSB0ZXh0dXJlIHdhcyBjcmVhdGVkIHdpdGguXG5cdCAqIEByZXR1cm5zIHttb2R1bGU6RXh0ZXJuYWwuR1BVVGV4dHVyZX0gLSBUaGUgb3JpZ2luYWxseSBwYXNzZWQgdGV4dHVyZVxuXHQgKi9cblx0Z2VuZXJhdGVNaXBtYXAoc291cmNlVGV4dHVyZTogVGV4dHVyZSkge1xuXHRcdGNvbnN0IHRleHR1cmUgPSBzb3VyY2VUZXh0dXJlLmdwdVRleHR1cmU7XG5cdFx0Y29uc3QgdGV4dHVyZURlc2NyaXB0b3IgPSBzb3VyY2VUZXh0dXJlLnRleHR1cmVQcm9wO1xuXHRcdC8vIFRPRE86IERvZXMgdGhpcyBuZWVkIHRvIGhhbmRsZSBzUkdCIGZvcm1hdHMgZGlmZmVyZW50bHk/XG5cdFx0Y29uc3QgcGlwZWxpbmUgPSB0aGlzLmdldE1pcG1hcFBpcGVsaW5lKHRleHR1cmVEZXNjcmlwdG9yLmZvcm1hdCk7XG5cblx0XHRpZiAodGV4dHVyZURlc2NyaXB0b3IuZGltZW5zaW9uID09IFwiM2RcIiB8fCB0ZXh0dXJlRGVzY3JpcHRvci5kaW1lbnNpb24gPT0gXCIxZFwiKSB7XG5cdFx0XHR0aHJvdyBuZXcgRXJyb3IoXCJHZW5lcmF0aW5nIG1pcG1hcHMgZm9yIG5vbi0yZCB0ZXh0dXJlcyBpcyBjdXJyZW50bHkgdW5zdXBwb3J0ZWQhXCIpO1xuXHRcdH1cblxuXHRcdGxldCBtaXBUZXh0dXJlID0gdGV4dHVyZTtcblx0XHRjb25zdCBhcnJheUxheWVyQ291bnQgPSB0ZXh0dXJlRGVzY3JpcHRvci5zaXplLmRlcHRoIHx8IDE7IC8vIE9ubHkgdmFsaWQgZm9yIDJEIHRleHR1cmVzLlxuXG5cdFx0Ly8gSWYgdGhlIHRleHR1cmUgd2FzIGNyZWF0ZWQgd2l0aCBSRU5ERVJfQVRUQUNITUVOVCB1c2FnZSB3ZSBjYW4gcmVuZGVyIGRpcmVjdGx5IGJldHdlZW4gbWlwIGxldmVscy5cblx0XHRjb25zdCByZW5kZXJUb1NvdXJjZSA9IHRleHR1cmVEZXNjcmlwdG9yLnVzYWdlICYgR1BVVGV4dHVyZVVzYWdlLlJFTkRFUl9BVFRBQ0hNRU5UO1xuXHRcdGlmICghcmVuZGVyVG9Tb3VyY2UpIHtcblx0XHRcdC8vIE90aGVyd2lzZSB3ZSBoYXZlIHRvIHVzZSBhIHNlcGFyYXRlIHRleHR1cmUgdG8gcmVuZGVyIGludG8uIEl0IGNhbiBiZSBvbmUgbWlwIGxldmVsIHNtYWxsZXIgdGhhbiB0aGUgc291cmNlXG5cdFx0XHQvLyB0ZXh0dXJlLCBzaW5jZSB3ZSBhbHJlYWR5IGhhdmUgdGhlIHRvcCBsZXZlbC5cblx0XHRcdGNvbnN0IG1pcFRleHR1cmVEZXNjcmlwdG9yID0ge1xuXHRcdFx0XHRzaXplOiB7XG5cdFx0XHRcdFx0d2lkdGg6IE1hdGguY2VpbCh0ZXh0dXJlRGVzY3JpcHRvci5zaXplLndpZHRoIC8gMiksXG5cdFx0XHRcdFx0aGVpZ2h0OiBNYXRoLmNlaWwodGV4dHVyZURlc2NyaXB0b3Iuc2l6ZS5oZWlnaHQgLyAyKSxcblx0XHRcdFx0XHRkZXB0aE9yQXJyYXlMYXllcnM6IGFycmF5TGF5ZXJDb3VudFxuXHRcdFx0XHR9LFxuXHRcdFx0XHRmb3JtYXQ6IDxHUFVUZXh0dXJlRm9ybWF0PnRleHR1cmVEZXNjcmlwdG9yLmZvcm1hdCxcblx0XHRcdFx0dXNhZ2U6IEdQVVRleHR1cmVVc2FnZS5URVhUVVJFX0JJTkRJTkcgfCBHUFVUZXh0dXJlVXNhZ2UuQ09QWV9TUkMgfCBHUFVUZXh0dXJlVXNhZ2UuUkVOREVSX0FUVEFDSE1FTlQsXG5cdFx0XHRcdG1pcExldmVsQ291bnQ6IHRleHR1cmVEZXNjcmlwdG9yLm1pcExldmVsQ291bnQgLSAxXG5cdFx0XHR9O1xuXHRcdFx0bWlwVGV4dHVyZSA9IHRoaXMuZGV2aWNlLmNyZWF0ZVRleHR1cmUobWlwVGV4dHVyZURlc2NyaXB0b3IpO1xuXHRcdH1cblxuXHRcdGNvbnN0IGNvbW1hbmRFbmNvZGVyID0gdGhpcy5kZXZpY2UuY3JlYXRlQ29tbWFuZEVuY29kZXIoe30pO1xuXHRcdC8vIFRPRE86IENvbnNpZGVyIG1ha2luZyB0aGlzIHN0YXRpYy5cblx0XHRjb25zdCBiaW5kR3JvdXBMYXlvdXQgPSBwaXBlbGluZS5nZXRCaW5kR3JvdXBMYXlvdXQoMCk7XG5cblx0XHRmb3IgKGxldCBhcnJheUxheWVyID0gMDsgYXJyYXlMYXllciA8IGFycmF5TGF5ZXJDb3VudDsgKythcnJheUxheWVyKSB7XG5cdFx0XHRsZXQgc3JjVmlldyA9IHRleHR1cmUuY3JlYXRlVmlldyh7XG5cdFx0XHRcdGJhc2VNaXBMZXZlbDogMCxcblx0XHRcdFx0bWlwTGV2ZWxDb3VudDogMSxcblx0XHRcdFx0ZGltZW5zaW9uOiBcIjJkXCIsXG5cdFx0XHRcdGJhc2VBcnJheUxheWVyOiBhcnJheUxheWVyLFxuXHRcdFx0XHRhcnJheUxheWVyQ291bnQ6IDFcblx0XHRcdH0pO1xuXG5cdFx0XHRsZXQgZHN0TWlwTGV2ZWwgPSByZW5kZXJUb1NvdXJjZSA/IDEgOiAwO1xuXHRcdFx0Zm9yIChsZXQgaSA9IDE7IGkgPCB0ZXh0dXJlRGVzY3JpcHRvci5taXBMZXZlbENvdW50OyArK2kpIHtcblx0XHRcdFx0Y29uc3QgZHN0VmlldyA9IG1pcFRleHR1cmUuY3JlYXRlVmlldyh7XG5cdFx0XHRcdFx0YmFzZU1pcExldmVsOiBkc3RNaXBMZXZlbCsrLFxuXHRcdFx0XHRcdG1pcExldmVsQ291bnQ6IDEsXG5cdFx0XHRcdFx0ZGltZW5zaW9uOiBcIjJkXCIsXG5cdFx0XHRcdFx0YmFzZUFycmF5TGF5ZXI6IGFycmF5TGF5ZXIsXG5cdFx0XHRcdFx0YXJyYXlMYXllckNvdW50OiAxXG5cdFx0XHRcdH0pO1xuXG5cdFx0XHRcdGNvbnN0IHBhc3NFbmNvZGVyID0gY29tbWFuZEVuY29kZXIuYmVnaW5SZW5kZXJQYXNzKHtcblx0XHRcdFx0XHRjb2xvckF0dGFjaG1lbnRzOiBbXG5cdFx0XHRcdFx0XHR7XG5cdFx0XHRcdFx0XHRcdHZpZXc6IGRzdFZpZXcsXG5cdFx0XHRcdFx0XHRcdGxvYWRPcDogXCJjbGVhclwiLFxuXHRcdFx0XHRcdFx0XHRzdG9yZU9wOiBcInN0b3JlXCJcblx0XHRcdFx0XHRcdH1cblx0XHRcdFx0XHRdXG5cdFx0XHRcdH0pO1xuXG5cdFx0XHRcdGNvbnN0IGJpbmRHcm91cCA9IHRoaXMuZGV2aWNlLmNyZWF0ZUJpbmRHcm91cCh7XG5cdFx0XHRcdFx0bGF5b3V0OiBiaW5kR3JvdXBMYXlvdXQsXG5cdFx0XHRcdFx0ZW50cmllczogW1xuXHRcdFx0XHRcdFx0e1xuXHRcdFx0XHRcdFx0XHRiaW5kaW5nOiAwLFxuXHRcdFx0XHRcdFx0XHRyZXNvdXJjZTogdGhpcy5zYW1wbGVyXG5cdFx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdFx0e1xuXHRcdFx0XHRcdFx0XHRiaW5kaW5nOiAxLFxuXHRcdFx0XHRcdFx0XHRyZXNvdXJjZTogc3JjVmlld1xuXHRcdFx0XHRcdFx0fVxuXHRcdFx0XHRcdF1cblx0XHRcdFx0fSk7XG5cblx0XHRcdFx0cGFzc0VuY29kZXIuc2V0UGlwZWxpbmUocGlwZWxpbmUpO1xuXHRcdFx0XHRwYXNzRW5jb2Rlci5zZXRCaW5kR3JvdXAoMCwgYmluZEdyb3VwKTtcblx0XHRcdFx0cGFzc0VuY29kZXIuZHJhdygzLCAxLCAwLCAwKTtcblx0XHRcdFx0cGFzc0VuY29kZXIuZW5kKCk7XG5cblx0XHRcdFx0c3JjVmlldyA9IGRzdFZpZXc7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0Ly8gSWYgd2UgZGlkbid0IHJlbmRlciB0byB0aGUgc291cmNlIHRleHR1cmUsIGZpbmlzaCBieSBjb3B5aW5nIHRoZSBtaXAgcmVzdWx0cyBmcm9tIHRoZSB0ZW1wb3JhcnkgbWlwbWFwIHRleHR1cmVcblx0XHQvLyB0byB0aGUgc291cmNlLlxuXHRcdGlmICghcmVuZGVyVG9Tb3VyY2UpIHtcblx0XHRcdGNvbnN0IG1pcExldmVsU2l6ZSA9IHtcblx0XHRcdFx0d2lkdGg6IE1hdGguY2VpbCh0ZXh0dXJlRGVzY3JpcHRvci5zaXplLndpZHRoIC8gMiksXG5cdFx0XHRcdGhlaWdodDogTWF0aC5jZWlsKHRleHR1cmVEZXNjcmlwdG9yLnNpemUuaGVpZ2h0IC8gMiksXG5cdFx0XHRcdGRlcHRoT3JBcnJheUxheWVyczogYXJyYXlMYXllckNvdW50XG5cdFx0XHR9O1xuXG5cdFx0XHRmb3IgKGxldCBpID0gMTsgaSA8IHRleHR1cmVEZXNjcmlwdG9yLm1pcExldmVsQ291bnQ7ICsraSkge1xuXHRcdFx0XHRjb21tYW5kRW5jb2Rlci5jb3B5VGV4dHVyZVRvVGV4dHVyZShcblx0XHRcdFx0XHR7XG5cdFx0XHRcdFx0XHR0ZXh0dXJlOiBtaXBUZXh0dXJlLFxuXHRcdFx0XHRcdFx0bWlwTGV2ZWw6IGkgLSAxXG5cdFx0XHRcdFx0fSxcblx0XHRcdFx0XHR7XG5cdFx0XHRcdFx0XHR0ZXh0dXJlOiB0ZXh0dXJlLFxuXHRcdFx0XHRcdFx0bWlwTGV2ZWw6IGlcblx0XHRcdFx0XHR9LFxuXHRcdFx0XHRcdG1pcExldmVsU2l6ZVxuXHRcdFx0XHQpO1xuXG5cdFx0XHRcdG1pcExldmVsU2l6ZS53aWR0aCA9IE1hdGguY2VpbChtaXBMZXZlbFNpemUud2lkdGggLyAyKTtcblx0XHRcdFx0bWlwTGV2ZWxTaXplLmhlaWdodCA9IE1hdGguY2VpbChtaXBMZXZlbFNpemUuaGVpZ2h0IC8gMik7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0dGhpcy5kZXZpY2UucXVldWUuc3VibWl0KFtjb21tYW5kRW5jb2Rlci5maW5pc2goKV0pO1xuXG5cdFx0aWYgKCFyZW5kZXJUb1NvdXJjZSkge1xuXHRcdFx0bWlwVGV4dHVyZS5kZXN0cm95KCk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRleHR1cmU7XG5cdH1cbn1cbiIsImZ1bmN0aW9uIGRlZmF1bHRWYWx1ZShhLCBiKSB7XG5cdGlmIChhICE9PSB1bmRlZmluZWQgJiYgYSAhPT0gbnVsbCkge1xuXHRcdHJldHVybiBhO1xuXHR9XG5cdHJldHVybiBiO1xufVxuXG4vKipcbiAqIEEgZnJvemVuIGVtcHR5IG9iamVjdCB0aGF0IGNhbiBiZSB1c2VkIGFzIHRoZSBkZWZhdWx0IHZhbHVlIGZvciBvcHRpb25zIHBhc3NlZCBhc1xuICogYW4gb2JqZWN0IGxpdGVyYWwuXG4gKiBAdHlwZSB7T2JqZWN0fVxuICogQG1lbWJlcm9mIGRlZmF1bHRWYWx1ZVxuICovXG5kZWZhdWx0VmFsdWUuRU1QVFlfT0JKRUNUID0gT2JqZWN0LmZyZWV6ZSh7fSk7XG5cbmV4cG9ydCBkZWZhdWx0IGRlZmF1bHRWYWx1ZTtcbiIsImltcG9ydCB7XG5cdEJsZW5kRmFjdG9yLFxuXHRCbGVuZE9wZXJhdGlvbixcblx0VGV4dHVyZUZvcm1hdCxcblx0R1BVQ29sb3JXcml0ZSxcblx0Q29tcGFyZUZ1bmN0aW9uLFxuXHRTdGVuY2lsT3BlcmF0aW9uLFxuXHRGcm9udEZhY2UsXG5cdEN1bGxNb2RlLFxuXHRQcmltaXRpdmVUb3BvbG9neVxufSBmcm9tIFwiLi4vY29yZS9XZWJHUFVDb25zdGFudFwiO1xuLy8gaW1wb3J0IHsgQmluZFJlbmRlclN0YXRlIH0gZnJvbSBcIi4uL2NvcmUvV2ViR1BVVHlwZXNcIjtcbmltcG9ydCBkZWZhdWx0VmFsdWUgZnJvbSBcIi4uL3V0aWxzL2RlZmF1bHRWYWx1ZVwiO1xuXG5leHBvcnQgY2xhc3MgUmVuZGVyU3RhdGUge1xuXHRzY2lzc29yVGVzdDogU2Npc3NvclRlc3Q7XG5cdHZpZXdwb3J0OiBWaWV3UG9ydDtcblx0dGFyZ2V0czogQXJyYXk8VGFyZ2V0Pjtcblx0ZGVwdGhTdGVuY2lsOiBEZXB0aFN0ZW5jaWw7XG5cdGJsZW5kQ29uc3RhbnQ6IEJsZW5kQ29uc3RhbnQ7XG5cdHN0ZW5jaWxSZWZlcmVuY2U6IG51bWJlcjtcblx0bXVsdGlzYW1wbGU6IE11bHRpU2FtcGxlO1xuXHRwcmltaXRpdmU6IFByaW1pdGl2ZTtcblx0c3RlbmNpbEVuYWJsZWQ6IGJvb2xlYW47XG5cdHNjaXNzb3JUZXN0RW5hYmxlZDogYm9vbGVhbjtcblx0Y29uc3RydWN0b3IocGFyYW1zPzogUmVuZGVyU3RhdGVQYXJhbXMpIHtcblx0XHR0aGlzLnNjaXNzb3JUZXN0ID0gcGFyYW1zPy5zY2lzc29yVGVzdDtcblx0XHR0aGlzLnZpZXdwb3J0ID0gcGFyYW1zPy52aWV3cG9ydDtcblx0XHR0aGlzLmRlcHRoU3RlbmNpbCA9IHBhcmFtcz8uZGVwdGhTdGVuY2lsO1xuXHRcdHRoaXMuYmxlbmRDb25zdGFudCA9IHBhcmFtcz8uYmxlbmRDb25zdGFudDtcblx0XHR0aGlzLnN0ZW5jaWxSZWZlcmVuY2UgPSBwYXJhbXM/LnN0ZW5jaWxSZWZlcmVuY2U7XG5cdFx0dGhpcy5tdWx0aXNhbXBsZSA9IHBhcmFtcz8ubXVsdGlzYW1wbGU7XG5cdFx0dGhpcy5wcmltaXRpdmUgPSBwYXJhbXM/LnByaW1pdGl2ZTtcblx0XHR0aGlzLnN0ZW5jaWxFbmFibGVkID0gZmFsc2U7XG5cdFx0dGhpcy5zY2lzc29yVGVzdEVuYWJsZWQgPSBmYWxzZTtcblx0XHR0aGlzLnRhcmdldHMgPSBwYXJhbXM/LnRhcmdldHM7XG5cdH1cblx0YmluZChwYXJhbXM6IEJpbmRSZW5kZXJTdGF0ZSkge1xuXHRcdGNvbnN0IHsgcGFzc0VuY29kZXIsIHZpZXdQb3J0LCBzY2lzc29yVGVzdCB9ID0gcGFyYW1zO1xuXHRcdGNvbnN0IGZpbmFsVmlld3BvcnQgPSB0aGlzLnZpZXdwb3J0ID8/IHZpZXdQb3J0O1xuXHRcdGNvbnN0IGZpbmFsU2Npc3NvclRlc3QgPSB0aGlzLnNjaXNzb3JUZXN0ID8/IHNjaXNzb3JUZXN0O1xuXHRcdGlmICh0aGlzLnN0ZW5jaWxSZWZlcmVuY2UpIHBhc3NFbmNvZGVyLnNldFN0ZW5jaWxSZWZlcmVuY2UodGhpcy5zdGVuY2lsUmVmZXJlbmNlKTtcblx0XHRpZiAoKGZpbmFsVmlld3BvcnQgYXMgVmlld1BvcnQpPy5lcXVhbHNBbmRVcGRhdGVDYWNoZShjYWNoZVZpZXdQb3J0KSkge1xuXHRcdFx0Y29uc3QgeyB4LCB5LCB3aWR0aCwgaGVpZ2h0LCBtaW5EZXB0aCwgbWF4RGVwdGggfSA9IGZpbmFsVmlld3BvcnQ7XG5cdFx0XHRwYXNzRW5jb2Rlci5zZXRWaWV3cG9ydCh4LCB5LCB3aWR0aCwgaGVpZ2h0LCBtaW5EZXB0aCwgbWF4RGVwdGgpO1xuXHRcdH1cblx0XHRpZiAodGhpcy5ibGVuZENvbnN0YW50KSBwYXNzRW5jb2Rlci5zZXRCbGVuZENvbnN0YW50KHRoaXMuYmxlbmRDb25zdGFudCk7XG5cdFx0aWYgKChmaW5hbFNjaXNzb3JUZXN0IGFzIFNjaXNzb3JUZXN0KT8uZXF1YWxzQW5kVXBkYXRlQ2FjaGUoY2FjaGVTY2lzc29yVGVzdCkpIHtcblx0XHRcdGNvbnN0IHsgeCwgeSwgd2lkdGgsIGhlaWdodCB9ID0gZmluYWxTY2lzc29yVGVzdDtcblx0XHRcdHBhc3NFbmNvZGVyLnNldFNjaXNzb3JSZWN0KHgsIHksIHdpZHRoLCBoZWlnaHQpO1xuXHRcdH1cblx0fVxuXHRkZXN0cm95KCkge1xuXHRcdHRoaXMuc2Npc3NvclRlc3QgPSB1bmRlZmluZWQ7XG5cdFx0dGhpcy52aWV3cG9ydCA9IHVuZGVmaW5lZDtcblx0XHR0aGlzLmRlcHRoU3RlbmNpbCA9IHVuZGVmaW5lZDtcblx0XHR0aGlzLmJsZW5kQ29uc3RhbnQgPSB1bmRlZmluZWQ7XG5cdFx0dGhpcy5zdGVuY2lsUmVmZXJlbmNlID0gLTE7XG5cdFx0dGhpcy5tdWx0aXNhbXBsZSA9IHVuZGVmaW5lZDtcblx0XHR0aGlzLnByaW1pdGl2ZSA9IHVuZGVmaW5lZDtcblx0XHR0aGlzLnN0ZW5jaWxFbmFibGVkID0gZmFsc2U7XG5cdFx0dGhpcy5zY2lzc29yVGVzdEVuYWJsZWQgPSBmYWxzZTtcblx0fVxufVxuZXhwb3J0IGNsYXNzIEJsZW5kQ29uc3RhbnQge1xuXHRyOiBudW1iZXI7XG5cdGc6IG51bWJlcjtcblx0YjogbnVtYmVyO1xuXHRhOiBudW1iZXI7XG5cdGNvbnN0cnVjdG9yKHI6IG51bWJlciwgZzogbnVtYmVyLCBiOiBudW1iZXIsIGE6IG51bWJlcikge1xuXHRcdHRoaXMuciA9IHI7XG5cdFx0dGhpcy5nID0gZztcblx0XHR0aGlzLmIgPSBiO1xuXHRcdHRoaXMuYSA9IGE7XG5cdH1cbn1cbmV4cG9ydCBjbGFzcyBNdWx0aVNhbXBsZSB7XG5cdGNvdW50OiBudW1iZXI7XG5cdG1hc2s6IG51bWJlcjtcblx0YWxwaGFUb0NvdmVyYWdlRW5hYmxlZDogYm9vbGVhbjtcblx0Y29uc3RydWN0b3IoY291bnQgPSAxLCBtYXNrID0gMHhmZmZmZmZmZiwgYWxwaGFUb0NvdmVyYWdlRW5hYmxlZCA9IGZhbHNlKSB7XG5cdFx0dGhpcy5jb3VudCA9IGNvdW50O1xuXHRcdHRoaXMubWFzayA9IG1hc2s7XG5cdFx0dGhpcy5hbHBoYVRvQ292ZXJhZ2VFbmFibGVkID0gYWxwaGFUb0NvdmVyYWdlRW5hYmxlZDtcblx0fVxuXHRnZXRNdWx0aVNhbXBsZURlYygpIHtcblx0XHRyZXR1cm4ge1xuXHRcdFx0Y291bnQ6IHRoaXMuY291bnQsXG5cdFx0XHRtYXNrOiB0aGlzLm1hc2ssXG5cdFx0XHRhbHBoYVRvQ292ZXJhZ2VFbmFibGVkOiB0aGlzLmFscGhhVG9Db3ZlcmFnZUVuYWJsZWRcblx0XHR9O1xuXHR9XG59XG5leHBvcnQgY2xhc3MgU2Npc3NvclRlc3Qge1xuXHR4OiBudW1iZXI7XG5cdHk6IG51bWJlcjtcblx0d2lkdGg6IG51bWJlcjtcblx0aGVpZ2h0OiBudW1iZXI7XG5cdHZhcmlhYmxlOiBib29sZWFuO1xuXHRjb25zdHJ1Y3Rvcih4ID0gMCwgeSA9IDAsIHdpZHRoID0gMCwgaGVpZ2h0ID0gMCwgdmFyaWFibGUgPSB0cnVlKSB7XG5cdFx0dGhpcy54ID0geDtcblx0XHR0aGlzLnkgPSB5O1xuXHRcdHRoaXMud2lkdGggPSB3aWR0aDtcblx0XHR0aGlzLmhlaWdodCA9IGhlaWdodDtcblx0XHR0aGlzLnZhcmlhYmxlID0gdmFyaWFibGU7XG5cdH1cblx0c2V0KHg6IG51bWJlciwgeTogbnVtYmVyLCB3aWR0aDogbnVtYmVyLCBoZWlnaHQ6IG51bWJlcikge1xuXHRcdHRoaXMueCA9IHg7XG5cdFx0dGhpcy55ID0geTtcblx0XHR0aGlzLndpZHRoID0gd2lkdGg7XG5cdFx0dGhpcy5oZWlnaHQgPSBoZWlnaHQ7XG5cdH1cblx0ZXF1YWxzQW5kVXBkYXRlQ2FjaGUoc2Npc3NvclRlc3Q6IFNjaXNzb3JUZXN0KTogYm9vbGVhbiB7XG5cdFx0Y29uc3QgeyB4LCB5LCB3aWR0aCwgaGVpZ2h0IH0gPSBzY2lzc29yVGVzdDtcblx0XHRpZiAodGhpcy54ICE9IHggfHwgdGhpcy55ICE9IHkgfHwgdGhpcy53aWR0aCAhPSB3aWR0aCB8fCB0aGlzLmhlaWdodCAhPSBoZWlnaHQpIHtcblx0XHRcdHNjaXNzb3JUZXN0LnNldCh0aGlzLngsIHRoaXMueSwgdGhpcy53aWR0aCwgdGhpcy5oZWlnaHQpO1xuXHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0fVxuXHRcdHJldHVybiBmYWxzZTtcblx0fVxufVxuZXhwb3J0IGNsYXNzIFZpZXdQb3J0IHtcblx0eDogbnVtYmVyO1xuXHR5OiBudW1iZXI7XG5cdHdpZHRoOiBudW1iZXI7XG5cdGhlaWdodDogbnVtYmVyO1xuXHRtaW5EZXB0aDogbnVtYmVyO1xuXHRtYXhEZXB0aDogbnVtYmVyO1xuXHR2YXJpYWJsZTogYm9vbGVhbjtcblx0Y29uc3RydWN0b3IoeCA9IDAsIHkgPSAwLCB3aWR0aCA9IDAsIGhlaWdodCA9IDAsIG1pbkRlcHRoID0gMCwgbWF4RGVwdGggPSAxLCB2YXJpYWJsZSA9IHRydWUpIHtcblx0XHR0aGlzLnggPSB4O1xuXHRcdHRoaXMueSA9IHk7XG5cdFx0dGhpcy53aWR0aCA9IHdpZHRoO1xuXHRcdHRoaXMuaGVpZ2h0ID0gaGVpZ2h0O1xuXHRcdHRoaXMubWluRGVwdGggPSBtaW5EZXB0aDtcblx0XHR0aGlzLm1heERlcHRoID0gbWF4RGVwdGg7XG5cdFx0dGhpcy52YXJpYWJsZSA9IHZhcmlhYmxlO1xuXHR9XG5cdHNldCh4OiBudW1iZXIsIHk6IG51bWJlciwgd2lkdGg6IG51bWJlciwgaGVpZ2h0OiBudW1iZXIsIG1pbkRlcHRoID0gMCwgbWF4RGVwdGggPSAxKSB7XG5cdFx0aWYgKCF0aGlzLnZhcmlhYmxlKSByZXR1cm47XG5cdFx0dGhpcy54ID0geDtcblx0XHR0aGlzLnkgPSB5O1xuXHRcdHRoaXMud2lkdGggPSB3aWR0aDtcblx0XHR0aGlzLmhlaWdodCA9IGhlaWdodDtcblx0XHR0aGlzLm1pbkRlcHRoID0gbWluRGVwdGg7XG5cdFx0dGhpcy5tYXhEZXB0aCA9IG1heERlcHRoO1xuXHR9XG5cdGVxdWFsc0FuZFVwZGF0ZUNhY2hlKHZpZXdQb3J0OiBWaWV3UG9ydCk6IGJvb2xlYW4ge1xuXHRcdGNvbnN0IHsgeCwgeSwgd2lkdGgsIGhlaWdodCwgbWluRGVwdGgsIG1heERlcHRoIH0gPSB2aWV3UG9ydDtcblx0XHRpZiAoXG5cdFx0XHR0aGlzLnggIT0geCB8fFxuXHRcdFx0dGhpcy55ICE9IHkgfHxcblx0XHRcdHRoaXMud2lkdGggIT0gd2lkdGggfHxcblx0XHRcdHRoaXMuaGVpZ2h0ICE9IGhlaWdodCB8fFxuXHRcdFx0dGhpcy5taW5EZXB0aCAhPSBtaW5EZXB0aCB8fFxuXHRcdFx0dGhpcy5tYXhEZXB0aCAhPSBtYXhEZXB0aFxuXHRcdCkge1xuXHRcdFx0dmlld1BvcnQuc2V0KHRoaXMueCwgdGhpcy55LCB0aGlzLndpZHRoLCB0aGlzLmhlaWdodCwgdGhpcy5taW5EZXB0aCwgdGhpcy5tYXhEZXB0aCk7XG5cdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHR9XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG59XG5leHBvcnQgY2xhc3MgUHJpbWl0aXZlIHtcblx0ZnJvbnRGYWNlOiBGcm9udEZhY2U7XG5cdGN1bGxNb2RlOiBDdWxsTW9kZTtcblx0dW5jbGlwcGVkRGVwdGg6IGJvb2xlYW47XG5cdHRvcG9sb2d5OiBQcmltaXRpdmVUb3BvbG9neTtcblx0Y29uc3RydWN0b3IodG9wb2xvZ3k/OiBQcmltaXRpdmVUb3BvbG9neSwgY3VsbE1vZGU/OiBDdWxsTW9kZSwgZnJvbnRGYWNlPzogRnJvbnRGYWNlLCB1bmNsaXBwZWREZXB0aD86IGJvb2xlYW4pIHtcblx0XHR0aGlzLmZyb250RmFjZSA9IGRlZmF1bHRWYWx1ZShmcm9udEZhY2UsIEZyb250RmFjZS5DQ1cpO1xuXHRcdHRoaXMuY3VsbE1vZGUgPSBkZWZhdWx0VmFsdWUoY3VsbE1vZGUsIEN1bGxNb2RlLk5vbmUpO1xuXHRcdHRoaXMudW5jbGlwcGVkRGVwdGggPSBkZWZhdWx0VmFsdWUodW5jbGlwcGVkRGVwdGgsIGZhbHNlKTtcblx0XHR0aGlzLnRvcG9sb2d5ID0gZGVmYXVsdFZhbHVlKHRvcG9sb2d5LCBQcmltaXRpdmVUb3BvbG9neS5UcmlhbmdsZUxpc3QpO1xuXHR9XG5cdGdldEdQVVByaW1pdGl2ZURlYygpIHtcblx0XHRyZXR1cm4ge1xuXHRcdFx0ZnJvbnRGYWNlOiB0aGlzLmZyb250RmFjZSxcblx0XHRcdGN1bGxNb2RlOiB0aGlzLmN1bGxNb2RlLFxuXHRcdFx0dW5jbGlwcGVkRGVwdGg6IHRoaXMudW5jbGlwcGVkRGVwdGgsXG5cdFx0XHR0b3BvbG9neTogdGhpcy50b3BvbG9neVxuXHRcdH07XG5cdH1cbn1cbmV4cG9ydCBjbGFzcyBEZXB0aFN0ZW5jaWwge1xuXHRmb3JtYXQ6IFRleHR1cmVGb3JtYXQ7XG5cdGRlcHRoV3JpdGVFbmFibGVkOiBib29sZWFuO1xuXHRkZXB0aENvbXBhcmU6IENvbXBhcmVGdW5jdGlvbjtcblx0c3RlbmNpbFJlYWRNYXNrOiBudW1iZXI7XG5cdHN0ZW5jaWxXcml0ZU1hc2s6IG51bWJlcjtcblx0c3RlbmNpbEZyb250Q29tcGFyZTogQ29tcGFyZUZ1bmN0aW9uO1xuXHRzdGVuY2lsRnJvbnRGYWlsT3A6IFN0ZW5jaWxPcGVyYXRpb247XG5cdHN0ZW5jaWxGcm9udERlcHRoRmFpbE9wOiBTdGVuY2lsT3BlcmF0aW9uO1xuXHRzdGVuY2lsRnJvbnRQYXNzT3A6IFN0ZW5jaWxPcGVyYXRpb247XG5cblx0c3RlbmNpbEJhY2tDb21wYXJlOiBDb21wYXJlRnVuY3Rpb247XG5cdHN0ZW5jaWxCYWNrRmFpbE9wOiBTdGVuY2lsT3BlcmF0aW9uO1xuXHRzdGVuY2lsQmFja0RlcHRoRmFpbE9wOiBTdGVuY2lsT3BlcmF0aW9uO1xuXHRzdGVuY2lsQmFja1Bhc3NPcDogU3RlbmNpbE9wZXJhdGlvbjtcblx0ZGVwdGhCaWFzOiBudW1iZXI7XG5cdGRlcHRoQmlhc1Nsb3BlU2NhbGU6IG51bWJlcjtcblx0ZGVwdGhCaWFzQ2xhbXA6IG51bWJlcjtcblx0Y29uc3RydWN0b3Iob3B0aW9ucz86IERlcHRoU3RlbmNpbFByb3BzKSB7XG5cdFx0dGhpcy5mb3JtYXQgPSBkZWZhdWx0VmFsdWUob3B0aW9ucz8uZm9ybWF0LCBUZXh0dXJlRm9ybWF0LkRlcHRoMjRQbHVzKTtcblx0XHR0aGlzLmRlcHRoV3JpdGVFbmFibGVkID0gZGVmYXVsdFZhbHVlKG9wdGlvbnM/LmRlcHRoV3JpdGVFbmFibGVkLCB0cnVlKTtcblx0XHR0aGlzLmRlcHRoQ29tcGFyZSA9IGRlZmF1bHRWYWx1ZShvcHRpb25zPy5kZXB0aENvbXBhcmUsIENvbXBhcmVGdW5jdGlvbi5MZXNzKTtcblx0XHR0aGlzLnN0ZW5jaWxSZWFkTWFzayA9IGRlZmF1bHRWYWx1ZShvcHRpb25zPy5zdGVuY2lsUmVhZE1hc2ssIDB4ZmZmZmZmZmYpO1xuXHRcdHRoaXMuc3RlbmNpbFdyaXRlTWFzayA9IGRlZmF1bHRWYWx1ZShvcHRpb25zPy5zdGVuY2lsV3JpdGVNYXNrLCAweGZmZmZmZmZmKTtcblx0XHR0aGlzLnN0ZW5jaWxGcm9udENvbXBhcmUgPSBkZWZhdWx0VmFsdWUob3B0aW9ucz8uc3RlbmNpbEZyb250Q29tcGFyZSwgQ29tcGFyZUZ1bmN0aW9uLkFsd2F5cyk7XG5cdFx0dGhpcy5zdGVuY2lsRnJvbnRGYWlsT3AgPSBkZWZhdWx0VmFsdWUob3B0aW9ucz8uc3RlbmNpbEZyb250RmFpbE9wLCBTdGVuY2lsT3BlcmF0aW9uLktlZXApO1xuXHRcdHRoaXMuc3RlbmNpbEZyb250RGVwdGhGYWlsT3AgPSBkZWZhdWx0VmFsdWUob3B0aW9ucz8uc3RlbmNpbEZyb250RGVwdGhGYWlsT3AsIFN0ZW5jaWxPcGVyYXRpb24uS2VlcCk7XG5cdFx0dGhpcy5zdGVuY2lsRnJvbnRQYXNzT3AgPSBkZWZhdWx0VmFsdWUob3B0aW9ucz8uc3RlbmNpbEZyb250UGFzc09wLCBTdGVuY2lsT3BlcmF0aW9uLktlZXApO1xuXHRcdHRoaXMuc3RlbmNpbEJhY2tDb21wYXJlID0gZGVmYXVsdFZhbHVlKG9wdGlvbnM/LnN0ZW5jaWxCYWNrQ29tcGFyZSwgQ29tcGFyZUZ1bmN0aW9uLkFsd2F5cyk7XG5cdFx0dGhpcy5zdGVuY2lsQmFja0ZhaWxPcCA9IGRlZmF1bHRWYWx1ZShvcHRpb25zPy5zdGVuY2lsQmFja0ZhaWxPcCwgU3RlbmNpbE9wZXJhdGlvbi5LZWVwKTtcblx0XHR0aGlzLnN0ZW5jaWxCYWNrRGVwdGhGYWlsT3AgPSBkZWZhdWx0VmFsdWUob3B0aW9ucz8uc3RlbmNpbEJhY2tEZXB0aEZhaWxPcCwgU3RlbmNpbE9wZXJhdGlvbi5LZWVwKTtcblx0XHR0aGlzLnN0ZW5jaWxCYWNrUGFzc09wID0gZGVmYXVsdFZhbHVlKG9wdGlvbnM/LnN0ZW5jaWxCYWNrUGFzc09wLCBTdGVuY2lsT3BlcmF0aW9uLktlZXApO1xuXHRcdHRoaXMuZGVwdGhCaWFzID0gZGVmYXVsdFZhbHVlKG9wdGlvbnM/LmRlcHRoQmlhcywgMCk7XG5cdFx0dGhpcy5kZXB0aEJpYXNTbG9wZVNjYWxlID0gZGVmYXVsdFZhbHVlKG9wdGlvbnM/LmRlcHRoQmlhc1Nsb3BlU2NhbGUsIDApO1xuXHRcdHRoaXMuZGVwdGhCaWFzQ2xhbXAgPSBkZWZhdWx0VmFsdWUob3B0aW9ucz8uZGVwdGhCaWFzQ2xhbXAsIDApO1xuXHR9XG5cdGdldEdQVURlcHRoU3RlbmNpbERlYygpIHtcblx0XHRyZXR1cm4ge1xuXHRcdFx0Zm9ybWF0OiB0aGlzLmZvcm1hdCxcblx0XHRcdGRlcHRoV3JpdGVFbmFibGVkOiB0aGlzLmRlcHRoV3JpdGVFbmFibGVkLFxuXHRcdFx0ZGVwdGhDb21wYXJlOiB0aGlzLmRlcHRoQ29tcGFyZSxcblx0XHRcdHN0ZW5jaWxSZWFkTWFzazogdGhpcy5zdGVuY2lsUmVhZE1hc2ssXG5cdFx0XHRzdGVuY2lsV3JpdGVNYXNrOiB0aGlzLnN0ZW5jaWxXcml0ZU1hc2ssXG5cdFx0XHRzdGVuY2lsRnJvbnQ6IHtcblx0XHRcdFx0Y29tcGFyZTogdGhpcy5zdGVuY2lsRnJvbnRDb21wYXJlLFxuXHRcdFx0XHRmYWlsT3A6IHRoaXMuc3RlbmNpbEZyb250RmFpbE9wLFxuXHRcdFx0XHRkZXB0aEZhaWxPcDogdGhpcy5zdGVuY2lsRnJvbnREZXB0aEZhaWxPcCxcblx0XHRcdFx0cGFzc09wOiB0aGlzLnN0ZW5jaWxGcm9udFBhc3NPcFxuXHRcdFx0fSxcblx0XHRcdHN0ZW5jaWxCYWNrOiB7XG5cdFx0XHRcdGNvbXBhcmU6IHRoaXMuc3RlbmNpbEJhY2tDb21wYXJlLFxuXHRcdFx0XHRmYWlsT3A6IHRoaXMuc3RlbmNpbEJhY2tGYWlsT3AsXG5cdFx0XHRcdGRlcHRoRmFpbE9wOiB0aGlzLnN0ZW5jaWxCYWNrRGVwdGhGYWlsT3AsXG5cdFx0XHRcdHBhc3NPcDogdGhpcy5zdGVuY2lsQmFja1Bhc3NPcFxuXHRcdFx0fSxcblx0XHRcdGRlcHRoQmlhczogdGhpcy5kZXB0aEJpYXMsXG5cdFx0XHRkZXB0aEJpYXNTbG9wZVNjYWxlOiB0aGlzLmRlcHRoQmlhc1Nsb3BlU2NhbGUsXG5cdFx0XHRkZXB0aEJpYXNDbGFtcDogdGhpcy5kZXB0aEJpYXNDbGFtcFxuXHRcdH07XG5cdH1cbn1cbmV4cG9ydCBjbGFzcyBUYXJnZXQge1xuXHRmb3JtYXQ6IFRleHR1cmVGb3JtYXQ7XG5cdGJsZW5kQ29sb3JPcGVyYXRpb24/OiBCbGVuZE9wZXJhdGlvbjtcblx0YmxlbmRDb2xvclNyY0ZhY3Rvcj86IEJsZW5kRmFjdG9yO1xuXHRibGVuZENvbG9yRHN0RmFjdG9yPzogQmxlbmRGYWN0b3I7XG5cdGJsZW5kQWxwaGFPcGVyYXRpb24/OiBCbGVuZE9wZXJhdGlvbjtcblx0YmxlbmRBbHBoYVNyY0ZhY3Rvcj86IEJsZW5kRmFjdG9yO1xuXHRibGVuZEFscGhhRHN0RmFjdG9yPzogQmxlbmRGYWN0b3I7XG5cdHdyaXRlTWFzazogR1BVQ29sb3JXcml0ZTtcblx0Y29uc3RydWN0b3Iob3B0aW9ucz86IFRhcmdldFByb3BzKSB7XG5cdFx0dGhpcy5mb3JtYXQgPSBkZWZhdWx0VmFsdWUob3B0aW9ucz8uZm9ybWF0LCBUZXh0dXJlRm9ybWF0LkJHUkE4VW5vcm0pO1xuXHRcdHRoaXMuYmxlbmRDb2xvck9wZXJhdGlvbiA9IGRlZmF1bHRWYWx1ZShvcHRpb25zPy5ibGVuZENvbG9yT3BlcmF0aW9uLCBCbGVuZE9wZXJhdGlvbi5BZGQpO1xuXHRcdHRoaXMuYmxlbmRDb2xvclNyY0ZhY3RvciA9IGRlZmF1bHRWYWx1ZShvcHRpb25zPy5ibGVuZENvbG9yU3JjRmFjdG9yLCBCbGVuZEZhY3Rvcj8uU3JjQWxwaGEpO1xuXHRcdHRoaXMuYmxlbmRDb2xvckRzdEZhY3RvciA9IGRlZmF1bHRWYWx1ZShvcHRpb25zPy5ibGVuZENvbG9yRHN0RmFjdG9yLCBCbGVuZEZhY3Rvci5PbmVNaW51c1NyY0FscGhhKTtcblx0XHR0aGlzLmJsZW5kQWxwaGFPcGVyYXRpb24gPSBkZWZhdWx0VmFsdWUob3B0aW9ucz8uYmxlbmRBbHBoYU9wZXJhdGlvbiwgQmxlbmRPcGVyYXRpb24uQWRkKTtcblx0XHR0aGlzLmJsZW5kQWxwaGFTcmNGYWN0b3IgPSBkZWZhdWx0VmFsdWUob3B0aW9ucz8uYmxlbmRBbHBoYVNyY0ZhY3RvciwgQmxlbmRGYWN0b3IuT25lKTtcblx0XHR0aGlzLmJsZW5kQWxwaGFEc3RGYWN0b3IgPSBkZWZhdWx0VmFsdWUob3B0aW9ucz8uYmxlbmRBbHBoYURzdEZhY3RvciwgQmxlbmRGYWN0b3IuT25lKTtcblx0XHR0aGlzLndyaXRlTWFzayA9IGRlZmF1bHRWYWx1ZShvcHRpb25zPy53cml0ZU1hc2ssIEdQVUNvbG9yV3JpdGUuQWxsKTtcblx0fVxuXHRnZXRHUFVUYXJnZXREZWMoKSB7XG5cdFx0cmV0dXJuIHtcblx0XHRcdGZvcm1hdDogdGhpcy5mb3JtYXQsXG5cdFx0XHRibGVuZDoge1xuXHRcdFx0XHRjb2xvcjoge1xuXHRcdFx0XHRcdG9wZXJhdGlvbjogdGhpcy5ibGVuZENvbG9yT3BlcmF0aW9uLFxuXHRcdFx0XHRcdHNyY0ZhY3RvcjogdGhpcy5ibGVuZENvbG9yU3JjRmFjdG9yLFxuXHRcdFx0XHRcdGRzdEZhY3RvcjogdGhpcy5ibGVuZENvbG9yRHN0RmFjdG9yXG5cdFx0XHRcdH0sXG5cdFx0XHRcdGFscGhhOiB7XG5cdFx0XHRcdFx0b3BlcmF0aW9uOiB0aGlzLmJsZW5kQWxwaGFPcGVyYXRpb24sXG5cdFx0XHRcdFx0c3JjRmFjdG9yOiB0aGlzLmJsZW5kQWxwaGFTcmNGYWN0b3IsXG5cdFx0XHRcdFx0ZHN0RmFjdG9yOiB0aGlzLmJsZW5kQWxwaGFEc3RGYWN0b3Jcblx0XHRcdFx0fVxuXHRcdFx0fSxcblx0XHRcdHdyaXRlTWFzazogdGhpcy53cml0ZU1hc2tcblx0XHR9O1xuXHR9XG59XG5jb25zdCBjYWNoZVZpZXdQb3J0ID0gbmV3IFZpZXdQb3J0KCk7XG5jb25zdCBjYWNoZVNjaXNzb3JUZXN0ID0gbmV3IFNjaXNzb3JUZXN0KCk7XG5leHBvcnQgdHlwZSBEZXB0aFN0ZW5jaWxQcm9wcyA9IHtcblx0Zm9ybWF0PzogVGV4dHVyZUZvcm1hdDtcblx0ZGVwdGhXcml0ZUVuYWJsZWQ/OiBib29sZWFuO1xuXHRkZXB0aENvbXBhcmU/OiBDb21wYXJlRnVuY3Rpb247XG5cdHN0ZW5jaWxSZWFkTWFzaz86IG51bWJlcjtcblx0c3RlbmNpbFdyaXRlTWFzaz86IG51bWJlcjtcblx0c3RlbmNpbEZyb250Q29tcGFyZT86IENvbXBhcmVGdW5jdGlvbjtcblx0c3RlbmNpbEZyb250RmFpbE9wPzogU3RlbmNpbE9wZXJhdGlvbjtcblx0c3RlbmNpbEZyb250RGVwdGhGYWlsT3A/OiBTdGVuY2lsT3BlcmF0aW9uO1xuXHRzdGVuY2lsRnJvbnRQYXNzT3A/OiBTdGVuY2lsT3BlcmF0aW9uO1xuXG5cdHN0ZW5jaWxCYWNrQ29tcGFyZT86IENvbXBhcmVGdW5jdGlvbjtcblx0c3RlbmNpbEJhY2tGYWlsT3A/OiBTdGVuY2lsT3BlcmF0aW9uO1xuXHRzdGVuY2lsQmFja0RlcHRoRmFpbE9wPzogU3RlbmNpbE9wZXJhdGlvbjtcblx0c3RlbmNpbEJhY2tQYXNzT3A/OiBTdGVuY2lsT3BlcmF0aW9uO1xuXHRkZXB0aEJpYXM/OiBudW1iZXI7XG5cdGRlcHRoQmlhc1Nsb3BlU2NhbGU/OiBudW1iZXI7XG5cdGRlcHRoQmlhc0NsYW1wPzogbnVtYmVyO1xufTtcbmV4cG9ydCB0eXBlIFRhcmdldFByb3BzID0ge1xuXHRmb3JtYXQ/OiBUZXh0dXJlRm9ybWF0O1xuXHRibGVuZENvbG9yT3BlcmF0aW9uPzogQmxlbmRPcGVyYXRpb247XG5cdGJsZW5kQ29sb3JTcmNGYWN0b3I/OiBCbGVuZEZhY3Rvcjtcblx0YmxlbmRDb2xvckRzdEZhY3Rvcj86IEJsZW5kRmFjdG9yO1xuXHRibGVuZEFscGhhT3BlcmF0aW9uPzogQmxlbmRPcGVyYXRpb247XG5cdGJsZW5kQWxwaGFTcmNGYWN0b3I/OiBCbGVuZEZhY3Rvcjtcblx0YmxlbmRBbHBoYURzdEZhY3Rvcj86IEJsZW5kRmFjdG9yO1xuXHR3cml0ZU1hc2s/OiBHUFVDb2xvcldyaXRlO1xufTtcbmV4cG9ydCB0eXBlIFJlbmRlclN0YXRlUGFyYW1zID0ge1xuXHRzY2lzc29yVGVzdD86IFNjaXNzb3JUZXN0O1xuXHR2aWV3cG9ydD86IFZpZXdQb3J0O1xuXHR0YXJnZXRzPzogQXJyYXk8VGFyZ2V0Pjtcblx0ZGVwdGhTdGVuY2lsPzogRGVwdGhTdGVuY2lsO1xuXHRibGVuZENvbnN0YW50PzogQmxlbmRDb25zdGFudDtcblx0c3RlbmNpbFJlZmVyZW5jZT86IG51bWJlcjtcblx0bXVsdGlzYW1wbGU/OiBNdWx0aVNhbXBsZTtcblx0cHJpbWl0aXZlPzogUHJpbWl0aXZlO1xuXHRzdGVuY2lsRW5hYmxlZD86IGJvb2xlYW47XG5cdHNjaXNzb3JUZXN0RW5hYmxlZD86IGJvb2xlYW47XG59O1xuZXhwb3J0IHR5cGUgQmluZFJlbmRlclN0YXRlID0ge1xuXHRwYXNzRW5jb2RlcjogR1BVUmVuZGVyUGFzc0VuY29kZXI7XG5cdHZpZXdQb3J0OiBWaWV3UG9ydDtcblx0c2Npc3NvclRlc3Q6IFNjaXNzb3JUZXN0O1xufTtcbiIsImltcG9ydCB7IFRleHR1cmVVc2FnZSB9IGZyb20gXCIuLi9jb3JlL1dlYkdQVUNvbnN0YW50XCI7XHJcbmltcG9ydCB7IEdQVUNhbnZhc0NvbXBvc2l0aW5nQWxwaGFNb2RlLCBDb250ZXh0T3B0aW9ucyB9IGZyb20gXCIuLi9jb3JlL1dlYkdQVVR5cGVzXCI7XHJcbmltcG9ydCB7IFNoYWRlclNvdXJjZSB9IGZyb20gXCIuLi9zaGFkZXIvU2hhZGVyU291cmNlXCI7XHJcbmltcG9ydCB7IGxvYWRHbHNsYW5nTW9kdWxlIH0gZnJvbSBcIi4uL3V0aWxzL2xvYWRHbHNsYW5nTW9kdWxlXCI7XHJcbmltcG9ydCB7IE1pcG1hcEdlbmVyYXRvciB9IGZyb20gXCIuLi91dGlscy9NaXBtYXBHZW5lcmF0b3JcIjtcclxuaW1wb3J0IHsgU2Npc3NvclRlc3QsIFZpZXdQb3J0IH0gZnJvbSBcIi4vUmVuZGVyU3RhdGVcIjtcclxuXHJcbmNsYXNzIENvbnRleHQge1xyXG5cclxuXHRwdWJsaWMgY2FudmFzOiBIVE1MQ2FudmFzRWxlbWVudDtcclxuXHJcblx0cHVibGljIGNvbnRleHQ6IEdQVUNhbnZhc0NvbnRleHQ7XHJcblxyXG5cdHB1YmxpYyBwaXhlbFJhdGlvOiBudW1iZXI7XHJcblxyXG5cdHB1YmxpYyBkZXZpY2U6IEdQVURldmljZTtcclxuXHJcblx0cHJpdmF0ZSBhZGFwdGVyOiBHUFVBZGFwdGVyO1xyXG5cclxuXHRwdWJsaWMgcHJlc2VudGF0aW9uU2l6ZTogeyB3aWR0aDogbnVtYmVyOyBoZWlnaHQ6IG51bWJlcjsgZGVwdGg6IG51bWJlciB9O1xyXG5cclxuXHRwdWJsaWMgcHJlc2VudGF0aW9uRm9ybWF0OiBHUFVUZXh0dXJlRm9ybWF0O1xyXG5cclxuXHRwdWJsaWMgbWlwbWFwVG9vbHM6IE1pcG1hcEdlbmVyYXRvcjtcclxuXHJcblx0cHJpdmF0ZSBfdmlld1BvcnQ6IFZpZXdQb3J0O1xyXG5cclxuXHRwcml2YXRlIF9zY2lzc29yVGVzdDogU2Npc3NvclRlc3Q7XHJcblxyXG5cdHByaXZhdGUgX3VzZUdMU0w6Ym9vbGVhbjsvLyB3aWxsIGdsc2wgc2hhZGVycyBiZSB1c2VkXHJcblxyXG5cdHB1YmxpYyBnZXQgdmlld1BvcnQoKTogVmlld1BvcnQge1xyXG5cdFx0cmV0dXJuIHRoaXMuX3ZpZXdQb3J0O1xyXG5cdH1cclxuXHJcblx0cHVibGljIGdldCBzY2lzc29yVGVzdCgpOiBTY2lzc29yVGVzdCB7XHJcblx0XHRyZXR1cm4gdGhpcy5fc2Npc3NvclRlc3Q7XHJcblx0fVxyXG5cdGNvbnN0cnVjdG9yKHsgY2FudmFzLCBjb250YWluZXIsIGNvbnRleHQsIHBpeGVsUmF0aW8sdXNlR0xTTD1mYWxzZSB9OiBDb250ZXh0T3B0aW9ucykge1xyXG5cdFx0aWYgKCFjb250YWluZXIuY2xpZW50V2lkdGggfHwgIWNvbnRhaW5lci5jbGllbnRIZWlnaHQpIHRocm93IG5ldyBFcnJvcihcImNvbnRhaW5lciB3aWR0aCBvciBoZWlnaHQgaWxsZWdhbGl0eVwiKTtcclxuXHRcdHRoaXMuY2FudmFzID0gY2FudmFzIHx8IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJjYW52YXNcIik7XHJcblx0XHQvLyB0aGlzLmNhbnZhcy5zdHlsZS5kaXNwbGF5ID0gXCJibG9ja1wiO1xyXG5cdFx0dGhpcy5waXhlbFJhdGlvID0gcGl4ZWxSYXRpbyB8fCB3aW5kb3cuZGV2aWNlUGl4ZWxSYXRpbyB8fCAxO1xyXG5cdFx0Y29uc3Qgd2lkdGggPSBjb250YWluZXIuY2xpZW50V2lkdGggKiB0aGlzLnBpeGVsUmF0aW87XHJcblx0XHRjb25zdCBoZWlnaHQgPSBjb250YWluZXIuY2xpZW50SGVpZ2h0ICogdGhpcy5waXhlbFJhdGlvO1xyXG5cdFx0dGhpcy5jYW52YXMud2lkdGggPSB3aWR0aDtcclxuXHRcdHRoaXMuY2FudmFzLmhlaWdodCA9IGhlaWdodDtcclxuXHRcdHRoaXMuY2FudmFzLnN0eWxlLndpZHRoID0gY29udGFpbmVyLmNsaWVudFdpZHRoICsgXCJweFwiO1xyXG5cdFx0dGhpcy5jYW52YXMuc3R5bGUuaGVpZ2h0ID0gY29udGFpbmVyLmNsaWVudEhlaWdodCArIFwicHhcIjtcclxuXHRcdGNvbnRhaW5lci5hcHBlbmRDaGlsZCh0aGlzLmNhbnZhcyk7XHJcblx0XHR0aGlzLmNvbnRleHQgPSBjb250ZXh0IHx8ICh0aGlzLmNhbnZhcy5nZXRDb250ZXh0KFwid2ViZ3B1XCIpIGFzIEdQVUNhbnZhc0NvbnRleHQpO1xyXG4gICAgdGhpcy5fdXNlR0xTTD11c2VHTFNMO1xyXG5cdFx0dGhpcy5kZXZpY2UgPSB1bmRlZmluZWQ7XHJcblx0fVxyXG5cclxuXHRwdWJsaWMgYXN5bmMgaW5pdChcclxuXHRcdHJlcXVlc3RBZGFwdGVyID0ge30sXHJcblx0XHRkZXZpY2VEZXNjcmlwdG9yID0ge30sXHJcblx0XHRwcmVzZW50YXRpb25Db250ZXh0RGVzY3JpcHRvciA9IHt9XHJcblx0KTogUHJvbWlzZTxib29sZWFuPiB7XHJcblx0XHR0cnkge1xyXG5cdFx0XHRpZiAoIXRoaXMuY29udGV4dCkge1xyXG5cdFx0XHRcdHRocm93IG5ldyBFcnJvcihgRmFpbGVkIHRvIGluc3RhbnRpYXRlIFwid2ViZ3B1XCIgY29udGV4dC5gKTtcclxuXHRcdFx0fVxyXG5cdFx0XHRpZiAoIW5hdmlnYXRvci5ncHUpIHtcclxuXHRcdFx0XHR0aHJvdyBuZXcgRXJyb3IoYE1pc3NpbmcgXCJuYXZpZ2F0b3IuZ3B1XCIuYCk7XHJcblx0XHRcdH1cclxuXHJcblx0XHRcdHRoaXMuYWRhcHRlciA9IGF3YWl0IG5hdmlnYXRvci5ncHUucmVxdWVzdEFkYXB0ZXIoKTtcclxuXHRcdFx0dGhpcy5kZXZpY2UgPSBhd2FpdCB0aGlzLmFkYXB0ZXIucmVxdWVzdERldmljZSgpO1xyXG5cdFx0XHR0aGlzLnByZXNlbnRhdGlvblNpemUgPSB7XHJcblx0XHRcdFx0d2lkdGg6IHRoaXMuY2FudmFzLmNsaWVudFdpZHRoICogdGhpcy5waXhlbFJhdGlvLFxyXG5cdFx0XHRcdGhlaWdodDogdGhpcy5jYW52YXMuY2xpZW50SGVpZ2h0ICogdGhpcy5waXhlbFJhdGlvLFxyXG5cdFx0XHRcdGRlcHRoOiAxXHJcblx0XHRcdH07XHJcblx0XHRcdHRoaXMucHJlc2VudGF0aW9uRm9ybWF0ID0gbmF2aWdhdG9yLmdwdS5nZXRQcmVmZXJyZWRDYW52YXNGb3JtYXQoKTtcclxuXHRcdFx0dGhpcy5kZXZpY2UuYWRkRXZlbnRMaXN0ZW5lcihcInVuY2FwdHVyZWRlcnJvclwiLCAoZXJyb3IpID0+IHtcclxuXHRcdFx0XHRjb25zb2xlLmVycm9yKGVycm9yKTtcclxuXHRcdFx0XHQvLyBTdGF0ZS5lcnJvciA9IHRydWU7XHJcblx0XHRcdH0pO1xyXG5cdFx0XHRpZih0aGlzLl91c2VHTFNMKVNoYWRlclNvdXJjZS5nbHNsYW5nPSBhd2FpdCBsb2FkR2xzbGFuZ01vZHVsZSgpXHJcblx0XHRcdHRoaXMubWlwbWFwVG9vbHMgPSBuZXcgTWlwbWFwR2VuZXJhdG9yKHRoaXMuZGV2aWNlKTtcclxuXHRcdFx0dGhpcy5jb250ZXh0LmNvbmZpZ3VyZSh7XHJcblx0XHRcdFx0ZGV2aWNlOiB0aGlzLmRldmljZSxcclxuXHRcdFx0XHRmb3JtYXQ6IHRoaXMucHJlc2VudGF0aW9uRm9ybWF0LFxyXG5cdFx0XHRcdHVzYWdlOiBUZXh0dXJlVXNhZ2UuUmVuZGVyQXR0YWNobWVudCxcclxuXHRcdFx0XHRhbHBoYU1vZGU6IFwicHJlbXVsdGlwbGllZFwiLFxyXG5cdFx0XHRcdC4uLnByZXNlbnRhdGlvbkNvbnRleHREZXNjcmlwdG9yXHJcblx0XHRcdH0pO1xyXG5cdFx0XHR0aGlzLl92aWV3UG9ydCA9IG5ldyBWaWV3UG9ydChcclxuXHRcdFx0XHQwLFxyXG5cdFx0XHRcdDAsXHJcblx0XHRcdFx0dGhpcy5jYW52YXMuY2xpZW50V2lkdGggKiB0aGlzLnBpeGVsUmF0aW8sXHJcblx0XHRcdFx0dGhpcy5jYW52YXMuY2xpZW50SGVpZ2h0ICogdGhpcy5waXhlbFJhdGlvXHJcblx0XHRcdCk7XHJcblx0XHRcdHRoaXMuX3NjaXNzb3JUZXN0ID0gbmV3IFNjaXNzb3JUZXN0KFxyXG5cdFx0XHRcdDAsXHJcblx0XHRcdFx0MCxcclxuXHRcdFx0XHR0aGlzLmNhbnZhcy5jbGllbnRXaWR0aCAqIHRoaXMucGl4ZWxSYXRpbyxcclxuXHRcdFx0XHR0aGlzLmNhbnZhcy5jbGllbnRIZWlnaHQgKiB0aGlzLnBpeGVsUmF0aW9cclxuXHRcdFx0KTtcclxuXHRcdH0gY2F0Y2ggKGVycm9yKSB7XHJcblx0XHRcdGNvbnNvbGUuZXJyb3IoZXJyb3IpO1xyXG5cdFx0XHRyZXR1cm4gZmFsc2U7XHJcblx0XHR9XHJcblxyXG5cdFx0cmV0dXJuIHRydWU7XHJcblx0fVxyXG5cdHB1YmxpYyBzZXRWaWV3UG9ydCh4OiBudW1iZXIsIHk6IG51bWJlciwgd2lkdGg6IG51bWJlciwgaGVpZ2h0OiBudW1iZXIpIHtcclxuXHRcdHRoaXMuX3ZpZXdQb3J0LnNldCh4LCB5LCB3aWR0aCwgaGVpZ2h0KTtcclxuXHR9XHJcblxyXG5cdHB1YmxpYyByZXNldFZpZXdQb3J0VG9GdWxsQ2FudmFzKCkge1xyXG5cdFx0dGhpcy5fdmlld1BvcnQuc2V0KDAsIDAsIHRoaXMuY2FudmFzLmNsaWVudFdpZHRoICogdGhpcy5waXhlbFJhdGlvLCB0aGlzLmNhbnZhcy5jbGllbnRIZWlnaHQgKiB0aGlzLnBpeGVsUmF0aW8pO1xyXG5cdH1cclxuXHJcblx0cHVibGljIHNldFNjaXNzb3JUZXN0KHg6IG51bWJlciwgeTogbnVtYmVyLCB3aWR0aDogbnVtYmVyLCBoZWlnaHQ6IG51bWJlcikge1xyXG5cdFx0dGhpcy5fc2Npc3NvclRlc3Quc2V0KHgsIHksIHdpZHRoLCBoZWlnaHQpO1xyXG5cdH1cclxuXHRwdWJsaWMgcmVzaXplKHdpZHRoOiBudW1iZXIsIGhlaWdodDogbnVtYmVyLCBwcmVzZW50YXRpb25Db250ZXh0RGVzY3JpcHRvciA9IHt9KTogdm9pZCB7XHJcblx0XHRjb25zdCB3ID0gd2lkdGggKiB0aGlzLnBpeGVsUmF0aW87XHJcblx0XHRjb25zdCBoID0gaGVpZ2h0ICogdGhpcy5waXhlbFJhdGlvO1xyXG5cdFx0dGhpcy5jYW52YXMuc3R5bGUud2lkdGggPSB3ICsgXCJweFwiO1xyXG5cdFx0dGhpcy5jYW52YXMuc3R5bGUuaGVpZ2h0ID0gaCArIFwicHhcIjtcclxuXHRcdHRoaXMuY2FudmFzLndpZHRoID0gdztcclxuXHRcdHRoaXMuY2FudmFzLmhlaWdodCA9IGg7XHJcblx0XHR0aGlzLnByZXNlbnRhdGlvblNpemUgPSB7XHJcblx0XHRcdHdpZHRoOiB3LFxyXG5cdFx0XHRoZWlnaHQ6IGgsXHJcblx0XHRcdGRlcHRoOiAxXHJcblx0XHR9O1xyXG5cdFx0dGhpcy5jb250ZXh0LmNvbmZpZ3VyZSh7XHJcblx0XHRcdGRldmljZTogdGhpcy5kZXZpY2UsXHJcblx0XHRcdGZvcm1hdDogbmF2aWdhdG9yLmdwdS5nZXRQcmVmZXJyZWRDYW52YXNGb3JtYXQoKSxcclxuXHRcdFx0dXNhZ2U6IFRleHR1cmVVc2FnZS5SZW5kZXJBdHRhY2htZW50LFxyXG5cdFx0XHRhbHBoYU1vZGU6IEdQVUNhbnZhc0NvbXBvc2l0aW5nQWxwaGFNb2RlLlByZW11bHRpcGxpZWQsXHJcblx0XHRcdC4uLnByZXNlbnRhdGlvbkNvbnRleHREZXNjcmlwdG9yXHJcblx0XHR9KTtcclxuXHR9XHJcbn1cclxuXHJcbmV4cG9ydCBkZWZhdWx0IENvbnRleHQ7XHJcbiIsImltcG9ydCB7IFN0b3JhZ2VUZXh0dXJlQWNjZXNzLCBUZXh0dXJlRm9ybWF0IH0gZnJvbSBcIi4uL2NvcmUvV2ViR1BVQ29uc3RhbnRcIjtcbmltcG9ydCB7IFdlYkdQVVRleHR1cmVQcm9wcywgSW1hZ2VEYXRhIH0gZnJvbSBcIi4uL2NvcmUvV2ViR1BVVHlwZXNcIjtcbmltcG9ydCBkZWZhdWx0VmFsdWUgZnJvbSBcIi4uL3V0aWxzL2RlZmF1bHRWYWx1ZVwiO1xuaW1wb3J0IHsgTWlwbWFwR2VuZXJhdG9yIH0gZnJvbSBcIi4uL3V0aWxzL01pcG1hcEdlbmVyYXRvclwiO1xuaW1wb3J0IENvbnRleHQgZnJvbSBcIi4vQ29udGV4dFwiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBUZXh0dXJlIHtcblx0W3g6IHN0cmluZ106IGFueTtcblx0cHJpdmF0ZSBfdGV4dHVyZVZpZXc6IEdQVVRleHR1cmVWaWV3O1xuXHRwdWJsaWMgZ3B1VGV4dHVyZT86IEdQVVRleHR1cmU7XG5cdHB1YmxpYyBtaXBMZXZlbENvdW50PzogbnVtYmVyO1xuXHRwdWJsaWMgY29udGV4dD86IENvbnRleHQ7XG5cdHB1YmxpYyBkZXZpY2U/OiBHUFVEZXZpY2U7XG5cdHB1YmxpYyB0ZXh0dXJlUHJvcD86IFdlYkdQVVRleHR1cmVQcm9wcztcblx0cHVibGljIGRpcnR5OiBib29sZWFuO1xuXHRwdWJsaWMgZml4ZWRTaXplOiBib29sZWFuO1xuXHRwdWJsaWMgc3RhdGljIG1pcG1hcFRvb2xzOiBNaXBtYXBHZW5lcmF0b3I7XG5cdGNvbnN0cnVjdG9yKHRleHR1cmVQcm9wOiBXZWJHUFVUZXh0dXJlUHJvcHMpIHtcblx0XHR0aGlzLnRleHR1cmVQcm9wID0gT2JqZWN0LmFzc2lnbihcblx0XHRcdHtcblx0XHRcdFx0Zm9ybWF0OiBUZXh0dXJlRm9ybWF0LlJHQkE4VW5vcm0sXG5cdFx0XHRcdHVzYWdlOiBHUFVUZXh0dXJlVXNhZ2UuVEVYVFVSRV9CSU5ESU5HIHwgR1BVVGV4dHVyZVVzYWdlLkNPUFlfRFNUIHwgR1BVVGV4dHVyZVVzYWdlLlJFTkRFUl9BVFRBQ0hNRU5ULFxuXHRcdFx0XHRkYXRhSXNUZXh0dXJlOiBmYWxzZVxuXHRcdFx0fSxcblx0XHRcdHRleHR1cmVQcm9wXG5cdFx0KTtcblx0XHR0aGlzLmRpcnR5ID0gdHJ1ZTtcblx0XHR0aGlzLmZpeGVkU2l6ZSA9IHRleHR1cmVQcm9wLmZpeGVkU2l6ZSB8fCBmYWxzZTtcblx0fVxuXHRnZXQgbGF5b3V0VHlwZSgpIHtcblx0XHRjb25zdCB7IHZpZXdGb3JtYXRzLCBzYW1wbGVUeXBlLCBzYW1wbGVDb3VudCB9ID0gdGhpcy50ZXh0dXJlUHJvcDtcblx0XHQvLyBjb25zdFxuXHRcdHJldHVybiB7XG5cdFx0XHRzYW1wbGVUeXBlOiBkZWZhdWx0VmFsdWUoc2FtcGxlVHlwZSwgXCJmbG9hdFwiKSxcblx0XHRcdHZpZXdEaW1lbnNpb246IGRlZmF1bHRWYWx1ZSh2aWV3Rm9ybWF0cywgXCIyZFwiKSxcblx0XHRcdG11bHRpc2FtcGxlZDogc2FtcGxlQ291bnQgJiYgc2FtcGxlQ291bnQgPiAxID8gdHJ1ZSA6IGZhbHNlXG5cdFx0fTtcblx0fVxuXHRnZXQgc3RvcmFnZVRleHR1cmVMYXlvdXRUeXBlKCkge1xuXHRcdGNvbnN0IHsgYWNjZXNzID0gU3RvcmFnZVRleHR1cmVBY2Nlc3MuV3JpdGVPbmx5LCB2aWV3Rm9ybWF0cywgZm9ybWF0IH0gPSB0aGlzLnRleHR1cmVQcm9wO1xuXHRcdHJldHVybiB7XG5cdFx0XHR2aWV3RGltZW5zaW9uOiBkZWZhdWx0VmFsdWUodmlld0Zvcm1hdHMsIFwiMmRcIiksXG5cdFx0XHRhY2Nlc3MsXG5cdFx0XHRmb3JtYXRcblx0XHR9O1xuXHR9XG5cdGdldCB0ZXh0dXJlVmlldygpIHtcblx0XHRpZiAoIXRoaXMuX3RleHR1cmVWaWV3KVxuXHRcdFx0dGhpcy5fdGV4dHVyZVZpZXcgPSB0aGlzLmdwdVRleHR1cmUuY3JlYXRlVmlldyh7XG5cdFx0XHRcdGRpbWVuc2lvbjogPEdQVVRleHR1cmVWaWV3RGltZW5zaW9uPmRlZmF1bHRWYWx1ZSh0aGlzLnRleHR1cmVQcm9wLnZpZXdGb3JtYXRzLCBcIjJkXCIpXG5cdFx0XHR9KTtcblx0XHRyZXR1cm4gdGhpcy5fdGV4dHVyZVZpZXc7XG5cdH1cblx0dXBkYXRlKGRldmljZTogR1BVRGV2aWNlKSB7XG5cdFx0aWYgKCF0aGlzLmRldmljZSkgdGhpcy5kZXZpY2UgPSBkZXZpY2U7XG5cdFx0aWYgKHRoaXMuZGlydHkpIHtcblx0XHRcdHRoaXMuY2hlY2tOZWVkQ3JlYXRlVGV4dHVyZSgpO1xuXHRcdFx0dGhpcy5kaXJ0eSA9IGZhbHNlO1xuXHRcdFx0aWYgKHRoaXMudGV4dHVyZVByb3AuZGF0YSkge1xuXHRcdFx0XHRpZiAoQXJyYXkuaXNBcnJheSh0aGlzLnRleHR1cmVQcm9wLmRhdGEpKSB7XG5cdFx0XHRcdFx0dGhpcy50ZXh0dXJlUHJvcC5kYXRhLmZvckVhY2goKGltYWdlRGF0YSkgPT4ge1xuXHRcdFx0XHRcdFx0dGhpcy5zZXREYXRhKGltYWdlRGF0YSk7XG5cdFx0XHRcdFx0fSk7XG5cdFx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdFx0dGhpcy5zZXREYXRhKHRoaXMudGV4dHVyZVByb3AuZGF0YSk7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdGlmICh0aGlzLnRleHR1cmVQcm9wLm5lZWRNaXBNYXApIHtcblx0XHRcdFx0aWYgKCFUZXh0dXJlLm1pcG1hcFRvb2xzKSBUZXh0dXJlLm1pcG1hcFRvb2xzID0gbmV3IE1pcG1hcEdlbmVyYXRvcih0aGlzLmRldmljZSk7XG5cdFx0XHRcdHRoaXMuZ3B1VGV4dHVyZSA9IFRleHR1cmUubWlwbWFwVG9vbHMuZ2VuZXJhdGVNaXBtYXAodGhpcyk7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cdHByaXZhdGUgc2V0RGF0YShvcHRpb25zOiBJbWFnZURhdGEpIHtcblx0XHRjb25zdCB7XG5cdFx0XHRzb3VyY2UsXG5cdFx0XHR3aWR0aCA9IG9wdGlvbnMuc291cmNlLndpZHRoLFxuXHRcdFx0aGVpZ2h0ID0gb3B0aW9ucy5zb3VyY2UuaGVpZ2h0LFxuXHRcdFx0ZGVwdGggPSAxLFxuXHRcdFx0c291cmNlWCA9IDAsXG5cdFx0XHRzb3VyY2VZID0gMCxcblx0XHRcdG1pcExldmVsID0gMCxcblx0XHRcdHggPSAwLFxuXHRcdFx0eSA9IDAsXG5cdFx0XHR6ID0gMCxcblx0XHRcdGFzcGVjdCA9IFwiYWxsXCIsXG5cdFx0XHRjb2xvclNwYWNlID0gXCJzcmdiXCIsXG5cdFx0XHRwcmVtdWx0aXBsaWVkQWxwaGEgPSBmYWxzZVxuXHRcdH0gPSBvcHRpb25zO1xuXHRcdGlmIChzb3VyY2UgaW5zdGFuY2VvZiBUZXh0dXJlKSB7XG5cdFx0XHRsZXQgY29tbWFuZEVuY29kZXIgPSB0aGlzLmRldmljZS5jcmVhdGVDb21tYW5kRW5jb2RlcigpO1xuXHRcdFx0Y29tbWFuZEVuY29kZXIuY29weVRleHR1cmVUb1RleHR1cmUoXG5cdFx0XHRcdHtcblx0XHRcdFx0XHR0ZXh0dXJlOiA8R1BVVGV4dHVyZT5zb3VyY2UuZ3B1VGV4dHVyZSxcblx0XHRcdFx0XHRvcmlnaW46IFtzb3VyY2VYLCBzb3VyY2VZXVxuXHRcdFx0XHRcdC8vIGFzcGVjdFxuXHRcdFx0XHR9LFxuXHRcdFx0XHR7XG5cdFx0XHRcdFx0dGV4dHVyZTogdGhpcy5ncHVUZXh0dXJlLFxuXHRcdFx0XHRcdG9yaWdpbjogeyB4OiAwLCB5OiAwLCB6IH0sXG5cdFx0XHRcdFx0bWlwTGV2ZWxcblx0XHRcdFx0XHQvLyBhc3BlY3Rcblx0XHRcdFx0fSxcblx0XHRcdFx0e1xuXHRcdFx0XHRcdHdpZHRoLFxuXHRcdFx0XHRcdGhlaWdodCxcblx0XHRcdFx0XHRkZXB0aE9yQXJyYXlMYXllcnM6IDFcblx0XHRcdFx0fVxuXHRcdFx0KTtcblx0XHRcdHRoaXMuZGV2aWNlLnF1ZXVlLnN1Ym1pdChbY29tbWFuZEVuY29kZXIuZmluaXNoKCldKTtcblx0XHRcdGNvbW1hbmRFbmNvZGVyID0gbnVsbDtcblx0XHR9IGVsc2Uge1xuXHRcdFx0dGhpcy5kZXZpY2UucXVldWUuY29weUV4dGVybmFsSW1hZ2VUb1RleHR1cmUoXG5cdFx0XHRcdHtcblx0XHRcdFx0XHRzb3VyY2UsXG5cdFx0XHRcdFx0b3JpZ2luOiBbc291cmNlWCwgc291cmNlWV1cblx0XHRcdFx0fSxcblx0XHRcdFx0e1xuXHRcdFx0XHRcdHRleHR1cmU6IHRoaXMuZ3B1VGV4dHVyZSxcblx0XHRcdFx0XHRvcmlnaW46IFt4LCB5LCB6XSxcblx0XHRcdFx0XHRtaXBMZXZlbCxcblx0XHRcdFx0XHRhc3BlY3QsXG5cdFx0XHRcdFx0Y29sb3JTcGFjZSxcblx0XHRcdFx0XHRwcmVtdWx0aXBsaWVkQWxwaGFcblx0XHRcdFx0fSxcblx0XHRcdFx0W3dpZHRoLCBoZWlnaHQsIGRlcHRoXVxuXHRcdFx0KTtcblx0XHR9XG5cdH1cblx0c2V0U2l6ZSh3aWR0aDogbnVtYmVyLCBoZWlnaHQ6IG51bWJlciwgZGVwdGg/OiBudW1iZXIpIHtcblx0XHRpZiAodGhpcy5maXhlZFNpemUpIHJldHVybjtcblx0XHR0aGlzLnRleHR1cmVQcm9wLnNpemUud2lkdGggPSB3aWR0aDtcblx0XHR0aGlzLnRleHR1cmVQcm9wLnNpemUuaGVpZ2h0ID0gaGVpZ2h0O1xuXHRcdGlmIChkZXB0aCkgdGhpcy50ZXh0dXJlUHJvcC5zaXplLmRlcHRoID0gZGVwdGg7XG5cdFx0dGhpcy5kaXJ0eSA9IHRydWU7XG5cdH1cblx0ZGVzdHJveSgpOiB2b2lkIHtcblx0XHR0aGlzLmdwdVRleHR1cmUuZGVzdHJveSgpO1xuXHR9XG5cdHByaXZhdGUgY3JlYXRlR1BVVGV4dHVyZSgpIHtcblx0XHRpZiAodHlwZW9mIHRoaXMudGV4dHVyZVByb3AuZm9ybWF0ID09PSBcIm51bWJlclwiKSB7XG5cdFx0XHR0aHJvdyBuZXcgRXJyb3IoXCJudW1iZXIgZm9ybWF0XCIpO1xuXHRcdH1cblx0XHRjb25zdCB7IHdpZHRoLCBoZWlnaHQsIGRlcHRoIH0gPSB0aGlzLnRleHR1cmVQcm9wLnNpemU7XG5cdFx0cmV0dXJuIHRoaXMuZGV2aWNlLmNyZWF0ZVRleHR1cmUoe1xuXHRcdFx0bGFiZWw6IHRoaXMudGV4dHVyZVByb3A/LmxhYmVsIHx8IFwidW5kZWZpbmVkXCIsXG5cdFx0XHRzaXplOiBbd2lkdGgsIGhlaWdodCwgZGVwdGhdLFxuXHRcdFx0ZGltZW5zaW9uOiB0aGlzLnRleHR1cmVQcm9wLmRpbWVuc2lvbiB8fCBcIjJkXCIsXG5cdFx0XHRmb3JtYXQ6IHRoaXMudGV4dHVyZVByb3AuZm9ybWF0IGFzIEdQVVRleHR1cmVGb3JtYXQsXG5cdFx0XHR1c2FnZTogdGhpcy50ZXh0dXJlUHJvcC51c2FnZSxcblx0XHRcdG1pcExldmVsQ291bnQ6IHRoaXMudGV4dHVyZVByb3AubWlwTGV2ZWxDb3VudCB8fCAxLFxuXHRcdFx0c2FtcGxlQ291bnQ6IHRoaXMudGV4dHVyZVByb3Auc2FtcGxlQ291bnQgfHwgMVxuXHRcdH0pO1xuXHR9XG5cdHByaXZhdGUgY2hlY2tOZWVkQ3JlYXRlVGV4dHVyZSgpIHtcblx0XHRjb25zdCB7IHdpZHRoLCBoZWlnaHQsIGRlcHRoIH0gPSB0aGlzLnRleHR1cmVQcm9wLnNpemU7XG5cdFx0aWYgKHRoaXMuZ3B1VGV4dHVyZSkge1xuXHRcdFx0aWYgKHdpZHRoICE9IHRoaXMuZ3B1VGV4dHVyZS53aWR0aCB8fCBoZWlnaHQgIT0gdGhpcy5ncHVUZXh0dXJlLmhlaWdodCkge1xuXHRcdFx0XHR0aGlzLl90ZXh0dXJlVmlldyA9IHVuZGVmaW5lZDtcblx0XHRcdFx0dGhpcy5ncHVUZXh0dXJlLmRlc3Ryb3koKTtcblx0XHRcdFx0dGhpcy5ncHVUZXh0dXJlID0gdGhpcy5jcmVhdGVHUFVUZXh0dXJlKCk7XG5cdFx0XHR9XG5cdFx0fSBlbHNlIHtcblx0XHRcdHRoaXMuZ3B1VGV4dHVyZSA9IHRoaXMuY3JlYXRlR1BVVGV4dHVyZSgpO1xuXHRcdH1cblx0fVxufVxuIiwiY2xhc3MgU2FtcGxlciB7XG5cdHB1YmxpYyBncHVTYW1wbGVyOiBHUFVTYW1wbGVyO1xuXHRwdWJsaWMgbGF5b3V0VHlwZTogR1BVU2FtcGxlckJpbmRpbmdMYXlvdXQ7XG5cblx0c3RhdGljIGJhc2VTYW1wbGVyID0gbmV3IFNhbXBsZXIoe1xuXHRcdG1hZ0ZpbHRlcjogXCJsaW5lYXJcIixcblx0XHRtaW5GaWx0ZXI6IFwibGluZWFyXCJcblx0fSk7XG5cblx0Y29uc3RydWN0b3IoXG5cdFx0cHVibGljIGRlc2NyaXB0b3I/OiBHUFVTYW1wbGVyRGVzY3JpcHRvcixcblx0XHRsYXlvdXRUeXBlOiBHUFVTYW1wbGVyQmluZGluZ0xheW91dCA9IHtcblx0XHRcdHR5cGU6IFwiZmlsdGVyaW5nXCJcblx0XHR9XG5cdCkge1xuXHRcdHRoaXMuZGVzY3JpcHRvciA9IHt9O1xuXHRcdE9iamVjdC5hc3NpZ24oXG5cdFx0XHR0aGlzLmRlc2NyaXB0b3IsXG5cdFx0XHR7XG5cdFx0XHRcdG1hZ0ZpbHRlcjogXCJsaW5lYXJcIixcblx0XHRcdFx0bWluRmlsdGVyOiBcImxpbmVhclwiLFxuXHRcdFx0XHQvLyBtaXBtYXBGaWx0ZXI6IFwibGluZWFyXCIsXG5cdFx0XHRcdGFkZHJlc3NNb2RlVTogXCJjbGFtcC10by1lZGdlXCIsXG5cdFx0XHRcdGFkZHJlc3NNb2RlVjogXCJjbGFtcC10by1lZGdlXCJcblx0XHRcdFx0Ly8gYWRkcmVzc01vZGVXOiBcImNsYW1wLXRvLWVkZ2VcIixcblx0XHRcdH0sXG5cdFx0XHRkZXNjcmlwdG9yXG5cdFx0KTtcblx0XHR0aGlzLmxheW91dFR5cGUgPSBsYXlvdXRUeXBlO1xuXHR9XG5cdHVwZGF0ZShkZXZpY2U6IEdQVURldmljZSkge1xuXHRcdGlmICghdGhpcy5ncHVTYW1wbGVyKSB0aGlzLmdwdVNhbXBsZXIgPSBkZXZpY2UuY3JlYXRlU2FtcGxlcih0aGlzLmRlc2NyaXB0b3IpO1xuXHR9XG59XG5cbmV4cG9ydCBkZWZhdWx0IFNhbXBsZXI7XG4iLCJpbXBvcnQgeyBBdHRhY2htZW50T3B0aW9ucyB9IGZyb20gXCIuLi9jb3JlL1dlYkdQVVR5cGVzXCI7XG5pbXBvcnQgVGV4dHVyZSBmcm9tIFwiLi9UZXh0dXJlXCI7XG5cbmNsYXNzIEF0dGFjaG1lbnQge1xuXHRwdWJsaWMgb3A6IEdQVUxvYWRPcCA9IFwiY2xlYXJcIjtcblx0cHVibGljIHN0b3JlT3A6IEdQVVN0b3JlT3AgPSBcInN0b3JlXCI7XG5cblx0cHVibGljIHRleHR1cmU/OiBUZXh0dXJlO1xuXHRwdWJsaWMgcmVzb2x2ZVRhcmdldD86IFRleHR1cmU7XG5cdHB1YmxpYyB0ZXh0dXJlVmlldz86ICgpID0+IEdQVVRleHR1cmVWaWV3O1xuXHRwdWJsaWMgcmVhZE9ubHk/OiBib29sZWFuO1xuXG5cdGNvbnN0cnVjdG9yKHB1YmxpYyB2YWx1ZTogR1BVQ29sb3JEaWN0IHwgR1BVQ29sb3IgfCBudW1iZXIsIG9wdGlvbnM/OiBBdHRhY2htZW50T3B0aW9ucykge1xuXHRcdE9iamVjdC5hc3NpZ24odGhpcywgb3B0aW9ucyk7XG5cdH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgQXR0YWNobWVudDtcbiIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGRlZmluZWQodmFsdWUpIHtcblx0cmV0dXJuIHZhbHVlICE9PSB1bmRlZmluZWQgJiYgdmFsdWUgIT09IG51bGw7XG59XG4iLCIvKlxuICBodHRwczovL2dpdGh1Yi5jb20vYmFua3NlYW4gd3JhcHBlZCBNYWtvdG8gTWF0c3Vtb3RvIGFuZCBUYWt1amkgTmlzaGltdXJhJ3MgY29kZSBpbiBhIG5hbWVzcGFjZVxuICBzbyBpdCdzIGJldHRlciBlbmNhcHN1bGF0ZWQuIE5vdyB5b3UgY2FuIGhhdmUgbXVsdGlwbGUgcmFuZG9tIG51bWJlciBnZW5lcmF0b3JzXG4gIGFuZCB0aGV5IHdvbid0IHN0b21wIGFsbCBvdmVyIGVhY2hvdGhlcidzIHN0YXRlLlxuXG4gIElmIHlvdSB3YW50IHRvIHVzZSB0aGlzIGFzIGEgc3Vic3RpdHV0ZSBmb3IgTWF0aC5yYW5kb20oKSwgdXNlIHRoZSByYW5kb20oKVxuICBtZXRob2QgbGlrZSBzbzpcblxuICB2YXIgbSA9IG5ldyBNZXJzZW5uZVR3aXN0ZXIoKTtcbiAgdmFyIHJhbmRvbU51bWJlciA9IG0ucmFuZG9tKCk7XG5cbiAgWW91IGNhbiBhbHNvIGNhbGwgdGhlIG90aGVyIGdlbnJhbmRfe2Zvb30oKSBtZXRob2RzIG9uIHRoZSBpbnN0YW5jZS5cblxuICBJZiB5b3Ugd2FudCB0byB1c2UgYSBzcGVjaWZpYyBzZWVkIGluIG9yZGVyIHRvIGdldCBhIHJlcGVhdGFibGUgcmFuZG9tXG4gIHNlcXVlbmNlLCBwYXNzIGFuIGludGVnZXIgaW50byB0aGUgY29uc3RydWN0b3I6XG5cbiAgdmFyIG0gPSBuZXcgTWVyc2VubmVUd2lzdGVyKDEyMyk7XG5cbiAgYW5kIHRoYXQgd2lsbCBhbHdheXMgcHJvZHVjZSB0aGUgc2FtZSByYW5kb20gc2VxdWVuY2UuXG5cbiAgU2VhbiBNY0N1bGxvdWdoIChiYW5rc2VhbkBnbWFpbC5jb20pXG4qL1xuXG4vKlxuICAgQSBDLXByb2dyYW0gZm9yIE1UMTk5MzcsIHdpdGggaW5pdGlhbGl6YXRpb24gaW1wcm92ZWQgMjAwMi8xLzI2LlxuICAgQ29kZWQgYnkgVGFrdWppIE5pc2hpbXVyYSBhbmQgTWFrb3RvIE1hdHN1bW90by5cblxuICAgQmVmb3JlIHVzaW5nLCBpbml0aWFsaXplIHRoZSBzdGF0ZSBieSB1c2luZyBpbml0X3NlZWQoc2VlZClcbiAgIG9yIGluaXRfYnlfYXJyYXkoaW5pdF9rZXksIGtleV9sZW5ndGgpLlxuXG4gICBDb3B5cmlnaHQgKEMpIDE5OTcgLSAyMDAyLCBNYWtvdG8gTWF0c3Vtb3RvIGFuZCBUYWt1amkgTmlzaGltdXJhLFxuICAgQWxsIHJpZ2h0cyByZXNlcnZlZC5cblxuICAgUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0XG4gICBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnNcbiAgIGFyZSBtZXQ6XG5cbiAgICAgMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHRcbiAgICAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLlxuXG4gICAgIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0XG4gICAgICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGVcbiAgICAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi5cblxuICAgICAzLiBUaGUgbmFtZXMgb2YgaXRzIGNvbnRyaWJ1dG9ycyBtYXkgbm90IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlXG4gICAgICAgIHByb2R1Y3RzIGRlcml2ZWQgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlblxuICAgICAgICBwZXJtaXNzaW9uLlxuXG4gICBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTXG4gICBcIkFTIElTXCIgQU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UXG4gICBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1JcbiAgIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVCBPV05FUiBPUlxuICAgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsXG4gICBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sXG4gICBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1JcbiAgIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0ZcbiAgIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5HXG4gICBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GIFRISVNcbiAgIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLlxuXG5cbiAgIEFueSBmZWVkYmFjayBpcyB2ZXJ5IHdlbGNvbWUuXG4gICBodHRwOi8vd3d3Lm1hdGguc2NpLmhpcm9zaGltYS11LmFjLmpwL35tLW1hdC9NVC9lbXQuaHRtbFxuICAgZW1haWw6IG0tbWF0IEAgbWF0aC5zY2kuaGlyb3NoaW1hLXUuYWMuanAgKHJlbW92ZSBzcGFjZSlcbiovXG5cbnZhciBNZXJzZW5uZVR3aXN0ZXIgPSBmdW5jdGlvbihzZWVkKSB7XG5cdGlmIChzZWVkID09IHVuZGVmaW5lZCkge1xuXHRcdHNlZWQgPSBuZXcgRGF0ZSgpLmdldFRpbWUoKTtcblx0fVxuXG5cdC8qIFBlcmlvZCBwYXJhbWV0ZXJzICovXG5cdHRoaXMuTiA9IDYyNDtcblx0dGhpcy5NID0gMzk3O1xuXHR0aGlzLk1BVFJJWF9BID0gMHg5OTA4YjBkZjsgICAvKiBjb25zdGFudCB2ZWN0b3IgYSAqL1xuXHR0aGlzLlVQUEVSX01BU0sgPSAweDgwMDAwMDAwOyAvKiBtb3N0IHNpZ25pZmljYW50IHctciBiaXRzICovXG5cdHRoaXMuTE9XRVJfTUFTSyA9IDB4N2ZmZmZmZmY7IC8qIGxlYXN0IHNpZ25pZmljYW50IHIgYml0cyAqL1xuXG5cdHRoaXMubXQgPSBuZXcgQXJyYXkodGhpcy5OKTsgLyogdGhlIGFycmF5IGZvciB0aGUgc3RhdGUgdmVjdG9yICovXG5cdHRoaXMubXRpPXRoaXMuTisxOyAvKiBtdGk9PU4rMSBtZWFucyBtdFtOXSBpcyBub3QgaW5pdGlhbGl6ZWQgKi9cblxuXHRpZiAoc2VlZC5jb25zdHJ1Y3RvciA9PSBBcnJheSkge1xuXHRcdHRoaXMuaW5pdF9ieV9hcnJheShzZWVkLCBzZWVkLmxlbmd0aCk7XG5cdH1cblx0ZWxzZSB7XG5cdFx0dGhpcy5pbml0X3NlZWQoc2VlZCk7XG5cdH1cbn1cblxuLyogaW5pdGlhbGl6ZXMgbXRbTl0gd2l0aCBhIHNlZWQgKi9cbi8qIG9yaWdpbiBuYW1lIGluaXRfZ2VucmFuZCAqL1xuTWVyc2VubmVUd2lzdGVyLnByb3RvdHlwZS5pbml0X3NlZWQgPSBmdW5jdGlvbihzKSB7XG5cdHRoaXMubXRbMF0gPSBzID4+PiAwO1xuXHRmb3IgKHRoaXMubXRpPTE7IHRoaXMubXRpPHRoaXMuTjsgdGhpcy5tdGkrKykge1xuXHRcdHZhciBzID0gdGhpcy5tdFt0aGlzLm10aS0xXSBeICh0aGlzLm10W3RoaXMubXRpLTFdID4+PiAzMCk7XG5cdFx0dGhpcy5tdFt0aGlzLm10aV0gPSAoKCgoKHMgJiAweGZmZmYwMDAwKSA+Pj4gMTYpICogMTgxMjQzMzI1MykgPDwgMTYpICsgKHMgJiAweDAwMDBmZmZmKSAqIDE4MTI0MzMyNTMpXG5cdFx0KyB0aGlzLm10aTtcblx0XHQvKiBTZWUgS251dGggVEFPQ1AgVm9sMi4gM3JkIEVkLiBQLjEwNiBmb3IgbXVsdGlwbGllci4gKi9cblx0XHQvKiBJbiB0aGUgcHJldmlvdXMgdmVyc2lvbnMsIE1TQnMgb2YgdGhlIHNlZWQgYWZmZWN0ICAgKi9cblx0XHQvKiBvbmx5IE1TQnMgb2YgdGhlIGFycmF5IG10W10uICAgICAgICAgICAgICAgICAgICAgICAgKi9cblx0XHQvKiAyMDAyLzAxLzA5IG1vZGlmaWVkIGJ5IE1ha290byBNYXRzdW1vdG8gICAgICAgICAgICAgKi9cblx0XHR0aGlzLm10W3RoaXMubXRpXSA+Pj49IDA7XG5cdFx0LyogZm9yID4zMiBiaXQgbWFjaGluZXMgKi9cblx0fVxufVxuXG4vKiBpbml0aWFsaXplIGJ5IGFuIGFycmF5IHdpdGggYXJyYXktbGVuZ3RoICovXG4vKiBpbml0X2tleSBpcyB0aGUgYXJyYXkgZm9yIGluaXRpYWxpemluZyBrZXlzICovXG4vKiBrZXlfbGVuZ3RoIGlzIGl0cyBsZW5ndGggKi9cbi8qIHNsaWdodCBjaGFuZ2UgZm9yIEMrKywgMjAwNC8yLzI2ICovXG5NZXJzZW5uZVR3aXN0ZXIucHJvdG90eXBlLmluaXRfYnlfYXJyYXkgPSBmdW5jdGlvbihpbml0X2tleSwga2V5X2xlbmd0aCkge1xuXHR2YXIgaSwgaiwgaztcblx0dGhpcy5pbml0X3NlZWQoMTk2NTAyMTgpO1xuXHRpPTE7IGo9MDtcblx0ayA9ICh0aGlzLk4+a2V5X2xlbmd0aCA/IHRoaXMuTiA6IGtleV9sZW5ndGgpO1xuXHRmb3IgKDsgazsgay0tKSB7XG5cdFx0dmFyIHMgPSB0aGlzLm10W2ktMV0gXiAodGhpcy5tdFtpLTFdID4+PiAzMClcblx0XHR0aGlzLm10W2ldID0gKHRoaXMubXRbaV0gXiAoKCgoKHMgJiAweGZmZmYwMDAwKSA+Pj4gMTYpICogMTY2NDUyNSkgPDwgMTYpICsgKChzICYgMHgwMDAwZmZmZikgKiAxNjY0NTI1KSkpXG5cdFx0KyBpbml0X2tleVtqXSArIGo7IC8qIG5vbiBsaW5lYXIgKi9cblx0XHR0aGlzLm10W2ldID4+Pj0gMDsgLyogZm9yIFdPUkRTSVpFID4gMzIgbWFjaGluZXMgKi9cblx0XHRpKys7IGorKztcblx0XHRpZiAoaT49dGhpcy5OKSB7IHRoaXMubXRbMF0gPSB0aGlzLm10W3RoaXMuTi0xXTsgaT0xOyB9XG5cdFx0aWYgKGo+PWtleV9sZW5ndGgpIGo9MDtcblx0fVxuXHRmb3IgKGs9dGhpcy5OLTE7IGs7IGstLSkge1xuXHRcdHZhciBzID0gdGhpcy5tdFtpLTFdIF4gKHRoaXMubXRbaS0xXSA+Pj4gMzApO1xuXHRcdHRoaXMubXRbaV0gPSAodGhpcy5tdFtpXSBeICgoKCgocyAmIDB4ZmZmZjAwMDApID4+PiAxNikgKiAxNTY2MDgzOTQxKSA8PCAxNikgKyAocyAmIDB4MDAwMGZmZmYpICogMTU2NjA4Mzk0MSkpXG5cdFx0LSBpOyAvKiBub24gbGluZWFyICovXG5cdFx0dGhpcy5tdFtpXSA+Pj49IDA7IC8qIGZvciBXT1JEU0laRSA+IDMyIG1hY2hpbmVzICovXG5cdFx0aSsrO1xuXHRcdGlmIChpPj10aGlzLk4pIHsgdGhpcy5tdFswXSA9IHRoaXMubXRbdGhpcy5OLTFdOyBpPTE7IH1cblx0fVxuXG5cdHRoaXMubXRbMF0gPSAweDgwMDAwMDAwOyAvKiBNU0IgaXMgMTsgYXNzdXJpbmcgbm9uLXplcm8gaW5pdGlhbCBhcnJheSAqL1xufVxuXG4vKiBnZW5lcmF0ZXMgYSByYW5kb20gbnVtYmVyIG9uIFswLDB4ZmZmZmZmZmZdLWludGVydmFsICovXG4vKiBvcmlnaW4gbmFtZSBnZW5yYW5kX2ludDMyICovXG5NZXJzZW5uZVR3aXN0ZXIucHJvdG90eXBlLnJhbmRvbV9pbnQgPSBmdW5jdGlvbigpIHtcblx0dmFyIHk7XG5cdHZhciBtYWcwMSA9IG5ldyBBcnJheSgweDAsIHRoaXMuTUFUUklYX0EpO1xuXHQvKiBtYWcwMVt4XSA9IHggKiBNQVRSSVhfQSAgZm9yIHg9MCwxICovXG5cblx0aWYgKHRoaXMubXRpID49IHRoaXMuTikgeyAvKiBnZW5lcmF0ZSBOIHdvcmRzIGF0IG9uZSB0aW1lICovXG5cdFx0dmFyIGtrO1xuXG5cdFx0aWYgKHRoaXMubXRpID09IHRoaXMuTisxKSAgLyogaWYgaW5pdF9zZWVkKCkgaGFzIG5vdCBiZWVuIGNhbGxlZCwgKi9cblx0XHRcdHRoaXMuaW5pdF9zZWVkKDU0ODkpOyAgLyogYSBkZWZhdWx0IGluaXRpYWwgc2VlZCBpcyB1c2VkICovXG5cblx0XHRmb3IgKGtrPTA7a2s8dGhpcy5OLXRoaXMuTTtraysrKSB7XG5cdFx0XHR5ID0gKHRoaXMubXRba2tdJnRoaXMuVVBQRVJfTUFTSyl8KHRoaXMubXRba2srMV0mdGhpcy5MT1dFUl9NQVNLKTtcblx0XHRcdHRoaXMubXRba2tdID0gdGhpcy5tdFtrayt0aGlzLk1dIF4gKHkgPj4+IDEpIF4gbWFnMDFbeSAmIDB4MV07XG5cdFx0fVxuXHRcdGZvciAoO2trPHRoaXMuTi0xO2trKyspIHtcblx0XHRcdHkgPSAodGhpcy5tdFtra10mdGhpcy5VUFBFUl9NQVNLKXwodGhpcy5tdFtraysxXSZ0aGlzLkxPV0VSX01BU0spO1xuXHRcdFx0dGhpcy5tdFtra10gPSB0aGlzLm10W2trKyh0aGlzLk0tdGhpcy5OKV0gXiAoeSA+Pj4gMSkgXiBtYWcwMVt5ICYgMHgxXTtcblx0XHR9XG5cdFx0eSA9ICh0aGlzLm10W3RoaXMuTi0xXSZ0aGlzLlVQUEVSX01BU0spfCh0aGlzLm10WzBdJnRoaXMuTE9XRVJfTUFTSyk7XG5cdFx0dGhpcy5tdFt0aGlzLk4tMV0gPSB0aGlzLm10W3RoaXMuTS0xXSBeICh5ID4+PiAxKSBeIG1hZzAxW3kgJiAweDFdO1xuXG5cdFx0dGhpcy5tdGkgPSAwO1xuXHR9XG5cblx0eSA9IHRoaXMubXRbdGhpcy5tdGkrK107XG5cblx0LyogVGVtcGVyaW5nICovXG5cdHkgXj0gKHkgPj4+IDExKTtcblx0eSBePSAoeSA8PCA3KSAmIDB4OWQyYzU2ODA7XG5cdHkgXj0gKHkgPDwgMTUpICYgMHhlZmM2MDAwMDtcblx0eSBePSAoeSA+Pj4gMTgpO1xuXG5cdHJldHVybiB5ID4+PiAwO1xufVxuXG4vKiBnZW5lcmF0ZXMgYSByYW5kb20gbnVtYmVyIG9uIFswLDB4N2ZmZmZmZmZdLWludGVydmFsICovXG4vKiBvcmlnaW4gbmFtZSBnZW5yYW5kX2ludDMxICovXG5NZXJzZW5uZVR3aXN0ZXIucHJvdG90eXBlLnJhbmRvbV9pbnQzMSA9IGZ1bmN0aW9uKCkge1xuXHRyZXR1cm4gKHRoaXMucmFuZG9tX2ludCgpPj4+MSk7XG59XG5cbi8qIGdlbmVyYXRlcyBhIHJhbmRvbSBudW1iZXIgb24gWzAsMV0tcmVhbC1pbnRlcnZhbCAqL1xuLyogb3JpZ2luIG5hbWUgZ2VucmFuZF9yZWFsMSAqL1xuTWVyc2VubmVUd2lzdGVyLnByb3RvdHlwZS5yYW5kb21faW5jbCA9IGZ1bmN0aW9uKCkge1xuXHRyZXR1cm4gdGhpcy5yYW5kb21faW50KCkqKDEuMC80Mjk0OTY3Mjk1LjApO1xuXHQvKiBkaXZpZGVkIGJ5IDJeMzItMSAqL1xufVxuXG4vKiBnZW5lcmF0ZXMgYSByYW5kb20gbnVtYmVyIG9uIFswLDEpLXJlYWwtaW50ZXJ2YWwgKi9cbk1lcnNlbm5lVHdpc3Rlci5wcm90b3R5cGUucmFuZG9tID0gZnVuY3Rpb24oKSB7XG5cdHJldHVybiB0aGlzLnJhbmRvbV9pbnQoKSooMS4wLzQyOTQ5NjcyOTYuMCk7XG5cdC8qIGRpdmlkZWQgYnkgMl4zMiAqL1xufVxuXG4vKiBnZW5lcmF0ZXMgYSByYW5kb20gbnVtYmVyIG9uICgwLDEpLXJlYWwtaW50ZXJ2YWwgKi9cbi8qIG9yaWdpbiBuYW1lIGdlbnJhbmRfcmVhbDMgKi9cbk1lcnNlbm5lVHdpc3Rlci5wcm90b3R5cGUucmFuZG9tX2V4Y2wgPSBmdW5jdGlvbigpIHtcblx0cmV0dXJuICh0aGlzLnJhbmRvbV9pbnQoKSArIDAuNSkqKDEuMC80Mjk0OTY3Mjk2LjApO1xuXHQvKiBkaXZpZGVkIGJ5IDJeMzIgKi9cbn1cblxuLyogZ2VuZXJhdGVzIGEgcmFuZG9tIG51bWJlciBvbiBbMCwxKSB3aXRoIDUzLWJpdCByZXNvbHV0aW9uKi9cbi8qIG9yaWdpbiBuYW1lIGdlbnJhbmRfcmVzNTMgKi9cbk1lcnNlbm5lVHdpc3Rlci5wcm90b3R5cGUucmFuZG9tX2xvbmcgPSBmdW5jdGlvbigpIHtcblx0dmFyIGE9dGhpcy5yYW5kb21faW50KCk+Pj41LCBiPXRoaXMucmFuZG9tX2ludCgpPj4+Njtcblx0cmV0dXJuKGEqNjcxMDg4NjQuMCtiKSooMS4wLzkwMDcxOTkyNTQ3NDA5OTIuMCk7XG59XG5cbi8qIFRoZXNlIHJlYWwgdmVyc2lvbnMgYXJlIGR1ZSB0byBJc2FrdSBXYWRhLCAyMDAyLzAxLzA5IGFkZGVkICovXG5cbm1vZHVsZS5leHBvcnRzID0gTWVyc2VubmVUd2lzdGVyO1xuIiwiaW1wb3J0IE1lcnNlbm5lVHdpc3RlciBmcm9tIFwibWVyc2VubmUtdHdpc3RlclwiO1xyXG5pbXBvcnQgZGVmYXVsdFZhbHVlIGZyb20gXCIuLi91dGlscy9kZWZhdWx0VmFsdWVcIjtcclxuaW1wb3J0IGRlZmluZWQgZnJvbSBcIi4uL3V0aWxzL2RlZmluZWRcIjtcclxuXHJcbmNsYXNzIEdNYXRoIHtcclxuXHRwdWJsaWMgc3RhdGljIEVQU0lMT04xID0gMC4xO1xyXG5cclxuXHRwdWJsaWMgc3RhdGljIEVQU0lMT04yID0gMC4wMTtcclxuXHJcblx0cHVibGljIHN0YXRpYyBFUFNJTE9OMyA9IDAuMDAxO1xyXG5cdHB1YmxpYyBzdGF0aWMgRVBTSUxPTjQgPSAwLjAwMDE7XHJcblxyXG5cdHB1YmxpYyBzdGF0aWMgRVBTSUxPTjUgPSAwLjAwMDAxO1xyXG5cclxuXHRwdWJsaWMgc3RhdGljIEVQU0lMT042ID0gMC4wMDAwMDE7XHJcblxyXG5cdHB1YmxpYyBzdGF0aWMgRVBTSUxPTjcgPSAwLjAwMDAwMDE7XHJcblxyXG5cdHB1YmxpYyBzdGF0aWMgRVBTSUxPTjggPSAwLjAwMDAwMDAxO1xyXG5cclxuXHRwdWJsaWMgc3RhdGljIEVQU0lMT045ID0gMC4wMDAwMDAwMDE7XHJcblxyXG5cdHB1YmxpYyBzdGF0aWMgRVBTSUxPTjEwID0gMC4wMDAwMDAwMDAxO1xyXG5cclxuXHRwdWJsaWMgc3RhdGljIEVQU0lMT04xMSA9IDAuMDAwMDAwMDAwMDE7XHJcblxyXG5cdHB1YmxpYyBzdGF0aWMgRVBTSUxPTjEyID0gMC4wMDAwMDAwMDAwMDE7XHJcblxyXG5cdHB1YmxpYyBzdGF0aWMgRVBTSUxPTjEzID0gMC4wMDAwMDAwMDAwMDAxO1xyXG5cclxuXHRwdWJsaWMgc3RhdGljIEVQU0lMT04xNCA9IDAuMDAwMDAwMDAwMDAwMDE7XHJcblxyXG5cdHB1YmxpYyBzdGF0aWMgRVBTSUxPTjE1ID0gMC4wMDAwMDAwMDAwMDAwMDE7XHJcblxyXG5cdHB1YmxpYyBzdGF0aWMgRVBTSUxPTjE2ID0gMC4wMDAwMDAwMDAwMDAwMDAxO1xyXG5cclxuXHRwdWJsaWMgc3RhdGljIEVQU0lMT04xNyA9IDAuMDAwMDAwMDAwMDAwMDAwMDE7XHJcblxyXG5cdHB1YmxpYyBzdGF0aWMgRVBTSUxPTjE4ID0gMC4wMDAwMDAwMDAwMDAwMDAwMDE7XHJcblxyXG5cdHB1YmxpYyBzdGF0aWMgRVBTSUxPTjE5ID0gMC4wMDAwMDAwMDAwMDAwMDAwMDAxO1xyXG5cclxuXHRwdWJsaWMgc3RhdGljIEVQU0lMT04yMCA9IDAuMDAwMDAwMDAwMDAwMDAwMDAwMDE7XHJcblxyXG5cdHB1YmxpYyBzdGF0aWMgRVBTSUxPTjIxID0gMC4wMDAwMDAwMDAwMDAwMDAwMDAwMDE7XHJcblxyXG5cdHB1YmxpYyBzdGF0aWMgR1JBVklUQVRJT05BTFBBUkFNRVRFUiA9IDMuOTg2MDA0NDE4ZTE0O1xyXG5cclxuXHRwdWJsaWMgc3RhdGljIFNJWFRZX0ZPVVJfS0lMT0JZVEVTID0gNjQgKiAxMDI0O1xyXG5cclxuXHRwdWJsaWMgc3RhdGljIEZPVVJfR0lHQUJZVEVTID0gNCAqIDEwMjQgKiAxMDI0ICogMTAyNDtcclxuXHJcblx0c3RhdGljIHNpZ24gPSBkZWZhdWx0VmFsdWUoTWF0aC5zaWduLCBmdW5jdGlvbiBzaWduKHZhbHVlKSB7XHJcblx0XHR2YWx1ZSA9ICt2YWx1ZTsgLy8gY29lcmNlIHRvIG51bWJlclxyXG5cdFx0aWYgKHZhbHVlID09PSAwIHx8IHZhbHVlICE9PSB2YWx1ZSkge1xyXG5cdFx0XHQvLyB6ZXJvIG9yIE5hTlxyXG5cdFx0XHRyZXR1cm4gdmFsdWU7XHJcblx0XHR9XHJcblx0XHRyZXR1cm4gdmFsdWUgPiAwID8gMSA6IC0xO1xyXG5cdH0pO1xyXG5cclxuXHRzdGF0aWMgc2lnbk5vdFplcm8odmFsdWUpIHtcclxuXHRcdHJldHVybiB2YWx1ZSA8IDAuMCA/IC0xLjAgOiAxLjA7XHJcblx0fVxyXG5cclxuXHRzdGF0aWMgdG9TTm9ybSh2YWx1ZTogbnVtYmVyLCByYW5nZU1heGltdW06IG51bWJlcik6IG51bWJlciB7XHJcblx0XHRyYW5nZU1heGltdW0gPSBkZWZhdWx0VmFsdWUocmFuZ2VNYXhpbXVtLCAyNTUpO1xyXG5cdFx0cmV0dXJuIE1hdGgucm91bmQoKEdNYXRoLmNsYW1wKHZhbHVlLCAtMS4wLCAxLjApICogMC41ICsgMC41KSAqIHJhbmdlTWF4aW11bSk7XHJcblx0fVxyXG5cclxuXHRzdGF0aWMgZnJvbVNOb3JtKHZhbHVlOiBudW1iZXIsIHJhbmdlTWF4aW11bTogbnVtYmVyKTogbnVtYmVyIHtcclxuXHRcdHJhbmdlTWF4aW11bSA9IGRlZmF1bHRWYWx1ZShyYW5nZU1heGltdW0sIDI1NSk7XHJcblx0XHRyZXR1cm4gKEdNYXRoLmNsYW1wKHZhbHVlLCAwLjAsIHJhbmdlTWF4aW11bSkgLyByYW5nZU1heGltdW0pICogMi4wIC0gMS4wO1xyXG5cdH1cclxuXHJcblx0c3RhdGljIG5vcm1hbGl6ZSh2YWx1ZTogbnVtYmVyLCByYW5nZU1pbmltdW06IG51bWJlciwgcmFuZ2VNYXhpbXVtOiBudW1iZXIpOiBudW1iZXIge1xyXG5cdFx0cmFuZ2VNYXhpbXVtID0gTWF0aC5tYXgocmFuZ2VNYXhpbXVtIC0gcmFuZ2VNaW5pbXVtLCAwLjApO1xyXG5cdFx0cmV0dXJuIHJhbmdlTWF4aW11bSA9PT0gMC4wID8gMC4wIDogR01hdGguY2xhbXAoKHZhbHVlIC0gcmFuZ2VNaW5pbXVtKSAvIHJhbmdlTWF4aW11bSwgMC4wLCAxLjApO1xyXG5cdH1cclxuXHJcblx0c3RhdGljIHNpbmggPSBkZWZhdWx0VmFsdWUoTWF0aC5zaW5oLCBmdW5jdGlvbiBzaW5oKHZhbHVlKSB7XHJcblx0XHRyZXR1cm4gKE1hdGguZXhwKHZhbHVlKSAtIE1hdGguZXhwKC12YWx1ZSkpIC8gMi4wO1xyXG5cdH0pO1xyXG5cclxuXHRzdGF0aWMgY29zaCA9IGRlZmF1bHRWYWx1ZShNYXRoLmNvc2gsIGZ1bmN0aW9uIGNvc2godmFsdWUpIHtcclxuXHRcdHJldHVybiAoTWF0aC5leHAodmFsdWUpICsgTWF0aC5leHAoLXZhbHVlKSkgLyAyLjA7XHJcblx0fSk7XHJcblxyXG5cdHN0YXRpYyBsZXJwKHA6IG51bWJlciwgcTogbnVtYmVyLCB0aW1lOiBudW1iZXIpOiBudW1iZXIge1xyXG5cdFx0cmV0dXJuICgxLjAgLSB0aW1lKSAqIHAgKyB0aW1lICogcTtcclxuXHR9XHJcblxyXG5cdHN0YXRpYyBQSSA9IE1hdGguUEk7XHJcblxyXG5cdHN0YXRpYyBPTkVfT1ZFUl9QSSA9IDEuMCAvIE1hdGguUEk7XHJcblxyXG5cdHN0YXRpYyBQSV9PVkVSX1RXTyA9IE1hdGguUEkgLyAyLjA7XHJcblxyXG5cdHN0YXRpYyBQSV9PVkVSX1RIUkVFID0gTWF0aC5QSSAvIDMuMDtcclxuXHJcblx0c3RhdGljIFBJX09WRVJfRk9VUiA9IE1hdGguUEkgLyA0LjA7XHJcblxyXG5cdHN0YXRpYyBQSV9PVkVSX1NJWCA9IE1hdGguUEkgLyA2LjA7XHJcblxyXG5cdHN0YXRpYyBUSFJFRV9QSV9PVkVSX1RXTyA9ICgzLjAgKiBNYXRoLlBJKSAvIDIuMDtcclxuXHJcblx0c3RhdGljIFRXT19QSSA9IDIuMCAqIE1hdGguUEk7XHJcblxyXG5cdHN0YXRpYyBPTkVfT1ZFUl9UV09fUEkgPSAxLjAgLyAoMi4wICogTWF0aC5QSSk7XHJcblxyXG5cdHN0YXRpYyBSQURJQU5TX1BFUl9ERUdSRUUgPSBNYXRoLlBJIC8gMTgwLjA7XHJcblxyXG5cdHN0YXRpYyBERUdSRUVTX1BFUl9SQURJQU4gPSAxODAuMCAvIE1hdGguUEk7XHJcblxyXG5cdHN0YXRpYyBSQURJQU5TX1BFUl9BUkNTRUNPTkQgPSBHTWF0aC5SQURJQU5TX1BFUl9ERUdSRUUgLyAzNjAwLjA7XHJcblxyXG5cdHN0YXRpYyB0b1JhZGlhbnMoZGVncmVlczogbnVtYmVyKTogbnVtYmVyIHtcclxuXHRcdGlmICghZGVmaW5lZChkZWdyZWVzKSkge1xyXG5cdFx0XHR0aHJvdyBuZXcgRXJyb3IoXCJkZWdyZWVzIGlzIHJlcXVpcmVkLlwiKTtcclxuXHRcdH1cclxuXHRcdHJldHVybiBkZWdyZWVzICogR01hdGguUkFESUFOU19QRVJfREVHUkVFO1xyXG5cdH1cclxuXHJcblx0c3RhdGljIHRvRGVncmVlcyhyYWRpYW5zOiBudW1iZXIpOiBudW1iZXIge1xyXG5cdFx0aWYgKCFkZWZpbmVkKHJhZGlhbnMpKSB7XHJcblx0XHRcdHRocm93IG5ldyBFcnJvcihcInJhZGlhbnMgaXMgcmVxdWlyZWQuXCIpO1xyXG5cdFx0fVxyXG5cdFx0cmV0dXJuIHJhZGlhbnMgKiBHTWF0aC5ERUdSRUVTX1BFUl9SQURJQU47XHJcblx0fVxyXG5cclxuXHRzdGF0aWMgbmVnYXRpdmVQaVRvUGkoYW5nbGU6IG51bWJlcik6IG51bWJlciB7XHJcblx0XHRpZiAoIWRlZmluZWQoYW5nbGUpKSB7XHJcblx0XHRcdHRocm93IG5ldyBFcnJvcihcImFuZ2xlIGlzIHJlcXVpcmVkLlwiKTtcclxuXHRcdH1cclxuXHRcdGlmIChhbmdsZSA+PSAtR01hdGguUEkgJiYgYW5nbGUgPD0gR01hdGguUEkpIHtcclxuXHRcdFx0Ly8gRWFybHkgZXhpdCBpZiB0aGUgaW5wdXQgaXMgYWxyZWFkeSBpbnNpZGUgdGhlIHJhbmdlLiBUaGlzIGF2b2lkc1xyXG5cdFx0XHQvLyB1bm5lY2Vzc2FyeSBtYXRoIHdoaWNoIGNvdWxkIGludHJvZHVjZSBmbG9hdGluZyBwb2ludCBlcnJvci5cclxuXHRcdFx0cmV0dXJuIGFuZ2xlO1xyXG5cdFx0fVxyXG5cdFx0cmV0dXJuIEdNYXRoLnplcm9Ub1R3b1BpKGFuZ2xlICsgR01hdGguUEkpIC0gR01hdGguUEk7XHJcblx0fVxyXG5cclxuXHRzdGF0aWMgemVyb1RvVHdvUGkoYW5nbGU6IG51bWJlcik6IG51bWJlciB7XHJcblx0XHRpZiAoIWRlZmluZWQoYW5nbGUpKSB7XHJcblx0XHRcdHRocm93IG5ldyBFcnJvcihcImFuZ2xlIGlzIHJlcXVpcmVkLlwiKTtcclxuXHRcdH1cclxuXHRcdGlmIChhbmdsZSA+PSAwICYmIGFuZ2xlIDw9IEdNYXRoLlRXT19QSSkge1xyXG5cdFx0XHQvLyBFYXJseSBleGl0IGlmIHRoZSBpbnB1dCBpcyBhbHJlYWR5IGluc2lkZSB0aGUgcmFuZ2UuIFRoaXMgYXZvaWRzXHJcblx0XHRcdC8vIHVubmVjZXNzYXJ5IG1hdGggd2hpY2ggY291bGQgaW50cm9kdWNlIGZsb2F0aW5nIHBvaW50IGVycm9yLlxyXG5cdFx0XHRyZXR1cm4gYW5nbGU7XHJcblx0XHR9XHJcblx0XHRjb25zdCBtb2QgPSBHTWF0aC5tb2QoYW5nbGUsIEdNYXRoLlRXT19QSSk7XHJcblx0XHRpZiAoTWF0aC5hYnMobW9kKSA8IEdNYXRoLkVQU0lMT04xNCAmJiBNYXRoLmFicyhhbmdsZSkgPiBHTWF0aC5FUFNJTE9OMTQpIHtcclxuXHRcdFx0cmV0dXJuIEdNYXRoLlRXT19QSTtcclxuXHRcdH1cclxuXHRcdHJldHVybiBtb2Q7XHJcblx0fVxyXG5cclxuXHRzdGF0aWMgbW9kKG06IG51bWJlciwgbjogbnVtYmVyKTogbnVtYmVyIHtcclxuXHRcdGlmICghZGVmaW5lZChtKSkge1xyXG5cdFx0XHR0aHJvdyBuZXcgRXJyb3IoXCJtIGlzIHJlcXVpcmVkLlwiKTtcclxuXHRcdH1cclxuXHRcdGlmICghZGVmaW5lZChuKSkge1xyXG5cdFx0XHR0aHJvdyBuZXcgRXJyb3IoXCJuIGlzIHJlcXVpcmVkLlwiKTtcclxuXHRcdH1cclxuXHRcdGlmIChuID09PSAwLjApIHtcclxuXHRcdFx0dGhyb3cgbmV3IEVycm9yKFwiZGl2aXNvciBjYW5ub3QgYmUgMC5cIik7XHJcblx0XHR9XHJcblx0XHRpZiAoR01hdGguc2lnbihtKSA9PT0gR01hdGguc2lnbihuKSAmJiBNYXRoLmFicyhtKSA8IE1hdGguYWJzKG4pKSB7XHJcblx0XHRcdC8vIEVhcmx5IGV4aXQgaWYgdGhlIGlucHV0IGRvZXMgbm90IG5lZWQgdG8gYmUgbW9kZGVkLiBUaGlzIGF2b2lkc1xyXG5cdFx0XHQvLyB1bm5lY2Vzc2FyeSBtYXRoIHdoaWNoIGNvdWxkIGludHJvZHVjZSBmbG9hdGluZyBwb2ludCBlcnJvci5cclxuXHRcdFx0cmV0dXJuIG07XHJcblx0XHR9XHJcblxyXG5cdFx0cmV0dXJuICgobSAlIG4pICsgbikgJSBuO1xyXG5cdH1cclxuXHJcblx0c3RhdGljIGVxdWFsc0Vwc2lsb24oXHJcblx0XHRsZWZ0OiBudW1iZXIsXHJcblx0XHRyaWdodDogbnVtYmVyLFxyXG5cdFx0cmVsYXRpdmVFcHNpbG9uOiBudW1iZXIsXHJcblx0XHRhYnNvbHV0ZUVwc2lsb246IG51bWJlciA9IHJlbGF0aXZlRXBzaWxvblxyXG5cdCk6IGJvb2xlYW4ge1xyXG5cdFx0aWYgKCFkZWZpbmVkKGxlZnQpKSB7XHJcblx0XHRcdHRocm93IG5ldyBFcnJvcihcImxlZnQgaXMgcmVxdWlyZWQuXCIpO1xyXG5cdFx0fVxyXG5cdFx0aWYgKCFkZWZpbmVkKHJpZ2h0KSkge1xyXG5cdFx0XHR0aHJvdyBuZXcgRXJyb3IoXCJyaWdodCBpcyByZXF1aXJlZC5cIik7XHJcblx0XHR9XHJcblxyXG5cdFx0cmVsYXRpdmVFcHNpbG9uID0gZGVmYXVsdFZhbHVlKHJlbGF0aXZlRXBzaWxvbiwgMC4wKTtcclxuXHRcdGFic29sdXRlRXBzaWxvbiA9IGRlZmF1bHRWYWx1ZShhYnNvbHV0ZUVwc2lsb24sIHJlbGF0aXZlRXBzaWxvbik7XHJcblx0XHRjb25zdCBhYnNEaWZmID0gTWF0aC5hYnMobGVmdCAtIHJpZ2h0KTtcclxuXHRcdHJldHVybiBhYnNEaWZmIDw9IGFic29sdXRlRXBzaWxvbiB8fCBhYnNEaWZmIDw9IHJlbGF0aXZlRXBzaWxvbiAqIE1hdGgubWF4KE1hdGguYWJzKGxlZnQpLCBNYXRoLmFicyhyaWdodCkpO1xyXG5cdH1cclxuXHJcblx0c3RhdGljIGxlc3NUaGFuKGxlZnQ6IG51bWJlciwgcmlnaHQ6IG51bWJlciwgYWJzb2x1dGVFcHNpbG9uID0gMCk6IGJvb2xlYW4ge1xyXG5cdFx0aWYgKCFkZWZpbmVkKGxlZnQpKSB7XHJcblx0XHRcdHRocm93IG5ldyBFcnJvcihcImZpcnN0IGlzIHJlcXVpcmVkLlwiKTtcclxuXHRcdH1cclxuXHRcdGlmICghZGVmaW5lZChyaWdodCkpIHtcclxuXHRcdFx0dGhyb3cgbmV3IEVycm9yKFwic2Vjb25kIGlzIHJlcXVpcmVkLlwiKTtcclxuXHRcdH1cclxuXHRcdGlmICghZGVmaW5lZChhYnNvbHV0ZUVwc2lsb24pKSB7XHJcblx0XHRcdHRocm93IG5ldyBFcnJvcihcImFic29sdXRlRXBzaWxvbiBpcyByZXF1aXJlZC5cIik7XHJcblx0XHR9XHJcblx0XHRyZXR1cm4gbGVmdCAtIHJpZ2h0IDwgLWFic29sdXRlRXBzaWxvbjtcclxuXHR9XHJcblxyXG5cdHN0YXRpYyBsZXNzVGhhbk9yRXF1YWxzKGxlZnQ6IG51bWJlciwgcmlnaHQ6IG51bWJlciwgYWJzb2x1dGVFcHNpbG9uID0gMCk6IGJvb2xlYW4ge1xyXG5cdFx0aWYgKCFkZWZpbmVkKGxlZnQpKSB7XHJcblx0XHRcdHRocm93IG5ldyBFcnJvcihcImZpcnN0IGlzIHJlcXVpcmVkLlwiKTtcclxuXHRcdH1cclxuXHRcdGlmICghZGVmaW5lZChyaWdodCkpIHtcclxuXHRcdFx0dGhyb3cgbmV3IEVycm9yKFwic2Vjb25kIGlzIHJlcXVpcmVkLlwiKTtcclxuXHRcdH1cclxuXHRcdGlmICghZGVmaW5lZChhYnNvbHV0ZUVwc2lsb24pKSB7XHJcblx0XHRcdHRocm93IG5ldyBFcnJvcihcImFic29sdXRlRXBzaWxvbiBpcyByZXF1aXJlZC5cIik7XHJcblx0XHR9XHJcblx0XHRyZXR1cm4gbGVmdCAtIHJpZ2h0IDwgYWJzb2x1dGVFcHNpbG9uO1xyXG5cdH1cclxuXHJcblx0c3RhdGljIGdyZWF0ZXJUaGFuKGxlZnQ6IG51bWJlciwgcmlnaHQ6IG51bWJlciwgYWJzb2x1dGVFcHNpbG9uID0gMCk6IGJvb2xlYW4ge1xyXG5cdFx0aWYgKCFkZWZpbmVkKGxlZnQpKSB7XHJcblx0XHRcdHRocm93IG5ldyBFcnJvcihcImZpcnN0IGlzIHJlcXVpcmVkLlwiKTtcclxuXHRcdH1cclxuXHRcdGlmICghZGVmaW5lZChyaWdodCkpIHtcclxuXHRcdFx0dGhyb3cgbmV3IEVycm9yKFwic2Vjb25kIGlzIHJlcXVpcmVkLlwiKTtcclxuXHRcdH1cclxuXHRcdGlmICghZGVmaW5lZChhYnNvbHV0ZUVwc2lsb24pKSB7XHJcblx0XHRcdHRocm93IG5ldyBFcnJvcihcImFic29sdXRlRXBzaWxvbiBpcyByZXF1aXJlZC5cIik7XHJcblx0XHR9XHJcblx0XHRyZXR1cm4gbGVmdCAtIHJpZ2h0ID4gYWJzb2x1dGVFcHNpbG9uO1xyXG5cdH1cclxuXHJcblx0c3RhdGljIGdyZWF0ZXJUaGFuT3JFcXVhbHMobGVmdDogbnVtYmVyLCByaWdodDogbnVtYmVyLCBhYnNvbHV0ZUVwc2lsb24gPSAwKTogYm9vbGVhbiB7XHJcblx0XHRpZiAoIWRlZmluZWQobGVmdCkpIHtcclxuXHRcdFx0dGhyb3cgbmV3IEVycm9yKFwiZmlyc3QgaXMgcmVxdWlyZWQuXCIpO1xyXG5cdFx0fVxyXG5cdFx0aWYgKCFkZWZpbmVkKHJpZ2h0KSkge1xyXG5cdFx0XHR0aHJvdyBuZXcgRXJyb3IoXCJzZWNvbmQgaXMgcmVxdWlyZWQuXCIpO1xyXG5cdFx0fVxyXG5cdFx0aWYgKCFkZWZpbmVkKGFic29sdXRlRXBzaWxvbikpIHtcclxuXHRcdFx0dGhyb3cgbmV3IEVycm9yKFwiYWJzb2x1dGVFcHNpbG9uIGlzIHJlcXVpcmVkLlwiKTtcclxuXHRcdH1cclxuXHRcdHJldHVybiBsZWZ0IC0gcmlnaHQgPiAtYWJzb2x1dGVFcHNpbG9uO1xyXG5cdH1cclxuXHJcblx0c3RhdGljIGlzUG93ZXJPZlR3byhuOiBudW1iZXIpOiBib29sZWFuIHtcclxuXHRcdC8vID4+aW5jbHVkZVN0YXJ0KCdkZWJ1ZycsIHByYWdtYXMuZGVidWcpO1xyXG5cdFx0aWYgKHR5cGVvZiBuICE9PSBcIm51bWJlclwiIHx8IG4gPCAwIHx8IG4gPiA0Mjk0OTY3Mjk1KSB7XHJcblx0XHRcdHRocm93IG5ldyBFcnJvcihcIkEgbnVtYmVyIGJldHdlZW4gMCBhbmQgKDJeMzIpLTEgaXMgcmVxdWlyZWQuXCIpO1xyXG5cdFx0fVxyXG5cdFx0Ly8gPj5pbmNsdWRlRW5kKCdkZWJ1ZycpO1xyXG5cclxuXHRcdHJldHVybiBuICE9PSAwICYmIChuICYgKG4gLSAxKSkgPT09IDA7XHJcblx0fVxyXG5cclxuXHRzdGF0aWMgbmV4dFBvd2VyT2ZUd28objogbnVtYmVyKTogbnVtYmVyIHtcclxuXHRcdGlmICh0eXBlb2YgbiAhPT0gXCJudW1iZXJcIiB8fCBuIDwgMCB8fCBuID4gMjE0NzQ4MzY0OCkge1xyXG5cdFx0XHR0aHJvdyBuZXcgRXJyb3IoXCJBIG51bWJlciBiZXR3ZWVuIDAgYW5kIDJeMzEgaXMgcmVxdWlyZWQuXCIpO1xyXG5cdFx0fVxyXG5cdFx0Ly8gRnJvbSBodHRwOi8vZ3JhcGhpY3Muc3RhbmZvcmQuZWR1L35zZWFuZGVyL2JpdGhhY2tzLmh0bWwjUm91bmRVcFBvd2VyT2YyXHJcblx0XHQtLW47XHJcblx0XHRuIHw9IG4gPj4gMTtcclxuXHRcdG4gfD0gbiA+PiAyO1xyXG5cdFx0biB8PSBuID4+IDQ7XHJcblx0XHRuIHw9IG4gPj4gODtcclxuXHRcdG4gfD0gbiA+PiAxNjtcclxuXHRcdCsrbjtcclxuXHJcblx0XHRyZXR1cm4gbjtcclxuXHR9XHJcblxyXG5cdHN0YXRpYyBwcmV2aW91c1Bvd2VyT2ZUd28objogbnVtYmVyKTogbnVtYmVyIHtcclxuXHRcdGlmICh0eXBlb2YgbiAhPT0gXCJudW1iZXJcIiB8fCBuIDwgMCB8fCBuID4gNDI5NDk2NzI5NSkge1xyXG5cdFx0XHR0aHJvdyBuZXcgRXJyb3IoXCJBIG51bWJlciBiZXR3ZWVuIDAgYW5kICgyXjMyKS0xIGlzIHJlcXVpcmVkLlwiKTtcclxuXHRcdH1cclxuXHJcblx0XHRuIHw9IG4gPj4gMTtcclxuXHRcdG4gfD0gbiA+PiAyO1xyXG5cdFx0biB8PSBuID4+IDQ7XHJcblx0XHRuIHw9IG4gPj4gODtcclxuXHRcdG4gfD0gbiA+PiAxNjtcclxuXHRcdG4gfD0gbiA+PiAzMjtcclxuXHJcblx0XHQvLyBUaGUgcHJldmlvdXMgYml0d2lzZSBvcGVyYXRpb25zIGltcGxpY2l0bHkgY29udmVydCB0byBzaWduZWQgMzItYml0LiBVc2UgYD4+PmAgdG8gY29udmVydCB0byB1bnNpZ25lZFxyXG5cdFx0biA9IChuID4+PiAwKSAtIChuID4+PiAxKTtcclxuXHJcblx0XHRyZXR1cm4gbjtcclxuXHR9XHJcblxyXG5cdHN0YXRpYyBjbGFtcCh2YWx1ZTogbnVtYmVyLCBtaW46IG51bWJlciwgbWF4OiBudW1iZXIpOiBudW1iZXIge1xyXG5cdFx0cmV0dXJuIHZhbHVlIDwgbWluID8gbWluIDogdmFsdWUgPiBtYXggPyBtYXggOiB2YWx1ZTtcclxuXHR9XHJcblxyXG5cdHN0YXRpYyBuZXh0UmFuZG9tTnVtYmVyID0gZnVuY3Rpb24gKCk6IG51bWJlciB7XHJcblx0XHRyZXR1cm4gcmFuZG9tTnVtYmVyR2VuZXJhdG9yLnJhbmRvbSgpO1xyXG5cdH07XHJcblxyXG5cdHN0YXRpYyByYW5kb21CZXR3ZWVuID0gZnVuY3Rpb24gKG1pbjogbnVtYmVyLCBtYXg6IG51bWJlcik6IG51bWJlciB7XHJcblx0XHRyZXR1cm4gR01hdGgubmV4dFJhbmRvbU51bWJlcigpICogKG1heCAtIG1pbikgKyBtaW47XHJcblx0fTtcclxuXHJcblx0c3RhdGljIGFjb3NDbGFtcGVkID0gZnVuY3Rpb24gKHZhbHVlOiBudW1iZXIpOiBudW1iZXIge1xyXG5cdFx0aWYgKCFkZWZpbmVkKHZhbHVlKSkge1xyXG5cdFx0XHR0aHJvdyBuZXcgRXJyb3IoXCJ2YWx1ZSBpcyByZXF1aXJlZC5cIik7XHJcblx0XHR9XHJcblxyXG5cdFx0cmV0dXJuIE1hdGguYWNvcyhHTWF0aC5jbGFtcCh2YWx1ZSwgLTEuMCwgMS4wKSk7XHJcblx0fTtcclxuXHJcblx0c3RhdGljIGFzaW5DbGFtcGVkID0gZnVuY3Rpb24gKHZhbHVlOiBudW1iZXIpOiBudW1iZXIge1xyXG5cdFx0aWYgKCFkZWZpbmVkKHZhbHVlKSkge1xyXG5cdFx0XHR0aHJvdyBuZXcgRXJyb3IoXCJ2YWx1ZSBpcyByZXF1aXJlZC5cIik7XHJcblx0XHR9XHJcblxyXG5cdFx0cmV0dXJuIE1hdGguYXNpbihHTWF0aC5jbGFtcCh2YWx1ZSwgLTEuMCwgMS4wKSk7XHJcblx0fTtcclxuXHJcblx0c3RhdGljIGNob3JkTGVuZ3RoID0gZnVuY3Rpb24gKGFuZ2xlOiBudW1iZXIsIHJhZGl1czogbnVtYmVyKTogbnVtYmVyIHtcclxuXHRcdGlmICghZGVmaW5lZChhbmdsZSkpIHtcclxuXHRcdFx0dGhyb3cgbmV3IEVycm9yKFwiYW5nbGUgaXMgcmVxdWlyZWQuXCIpO1xyXG5cdFx0fVxyXG5cdFx0aWYgKCFkZWZpbmVkKHJhZGl1cykpIHtcclxuXHRcdFx0dGhyb3cgbmV3IEVycm9yKFwicmFkaXVzIGlzIHJlcXVpcmVkLlwiKTtcclxuXHRcdH1cclxuXHJcblx0XHRyZXR1cm4gMi4wICogcmFkaXVzICogTWF0aC5zaW4oYW5nbGUgKiAwLjUpO1xyXG5cdH07XHJcblxyXG5cdHN0YXRpYyBsb2dCYXNlID0gZnVuY3Rpb24gKG51bWJlcjogbnVtYmVyLCBiYXNlOiBudW1iZXIpOiBudW1iZXIge1xyXG5cdFx0aWYgKCFkZWZpbmVkKG51bWJlcikpIHtcclxuXHRcdFx0dGhyb3cgbmV3IEVycm9yKFwibnVtYmVyIGlzIHJlcXVpcmVkLlwiKTtcclxuXHRcdH1cclxuXHRcdGlmICghZGVmaW5lZChiYXNlKSkge1xyXG5cdFx0XHR0aHJvdyBuZXcgRXJyb3IoXCJiYXNlIGlzIHJlcXVpcmVkLlwiKTtcclxuXHRcdH1cclxuXHJcblx0XHRyZXR1cm4gTWF0aC5sb2cobnVtYmVyKSAvIE1hdGgubG9nKGJhc2UpO1xyXG5cdH07XHJcblxyXG5cdHN0YXRpYyBjYnJ0ID0gZGVmYXVsdFZhbHVlKE1hdGguY2JydCwgZnVuY3Rpb24gY2JydChudW1iZXIpIHtcclxuXHRcdGNvbnN0IHJlc3VsdCA9IE1hdGgucG93KE1hdGguYWJzKG51bWJlciksIDEuMCAvIDMuMCk7XHJcblx0XHRyZXR1cm4gbnVtYmVyIDwgMC4wID8gLXJlc3VsdCA6IHJlc3VsdDtcclxuXHR9KTtcclxuXHRzdGF0aWMgbG9nMiA9IGRlZmF1bHRWYWx1ZShNYXRoLmxvZzIsIGZ1bmN0aW9uIGxvZzIobnVtYmVyKSB7XHJcblx0XHRyZXR1cm4gTWF0aC5sb2cobnVtYmVyKSAqIE1hdGguTE9HMkU7XHJcblx0fSk7XHJcblxyXG5cdC8qKlxyXG5cdCAqIEBwcml2YXRlXHJcblx0ICovXHJcblx0c3RhdGljIGZvZyhkaXN0YW5jZVRvQ2FtZXJhOiBudW1iZXIsIGRlbnNpdHk6IG51bWJlcik6IG51bWJlciB7XHJcblx0XHRjb25zdCBzY2FsYXIgPSBkaXN0YW5jZVRvQ2FtZXJhICogZGVuc2l0eTtcclxuXHRcdHJldHVybiAxLjAgLSBNYXRoLmV4cCgtKHNjYWxhciAqIHNjYWxhcikpO1xyXG5cdH1cclxufVxyXG5jb25zdCByYW5kb21OdW1iZXJHZW5lcmF0b3IgPSBuZXcgTWVyc2VubmVUd2lzdGVyKCk7XHJcbmNvbnN0IGZhY3RvcmlhbHMgPSBbMV07XHJcbmV4cG9ydCBkZWZhdWx0IEdNYXRoO1xyXG4iLCJpbXBvcnQgeyBBdHRyaWJ1dGUgfSBmcm9tIFwiLi4vcmVuZGVyL0F0dHJpYnV0ZVwiO1xyXG5pbXBvcnQgZGVmaW5lZCBmcm9tIFwiLi4vdXRpbHMvZGVmaW5lZFwiO1xyXG5pbXBvcnQgR01hdGggZnJvbSBcIi4vTWF0aFwiO1xyXG5pbXBvcnQgTWF0cml4MyBmcm9tIFwiLi9NYXRyaXgzXCI7XHJcbi8qKlxyXG4gKiBBIDJEIENhcnRlc2lhbiBwb2ludC5cclxuICogQGFsaWFzIFZlY3RvcjJcclxuICogQGNvbnN0cnVjdG9yXHJcbiAqXHJcbiAqIEBwYXJhbSB7TnVtYmVyfSBbeD0wLjBdIFRoZSBYIGNvbXBvbmVudC5cclxuICogQHBhcmFtIHtOdW1iZXJ9IFt5PTAuMF0gVGhlIFkgY29tcG9uZW50LlxyXG4gKlxyXG4gKi9cclxuY2xhc3MgVmVjdG9yMiB7XHJcblx0cHVibGljIHN0YXRpYyBaRVJPID0gT2JqZWN0LmZyZWV6ZShuZXcgVmVjdG9yMigwLjAsIDAuMCkpO1xyXG5cclxuXHRwdWJsaWMgc3RhdGljIE9ORSA9IE9iamVjdC5mcmVlemUobmV3IFZlY3RvcjIoMS4wLCAxLjApKTtcclxuXHJcblx0cHVibGljIHN0YXRpYyBVTklUX1ggPSBPYmplY3QuZnJlZXplKG5ldyBWZWN0b3IyKDEuMCwgMC4wKSk7XHJcblxyXG5cdHB1YmxpYyBzdGF0aWMgVU5JVF9ZID0gT2JqZWN0LmZyZWV6ZShuZXcgVmVjdG9yMigwLjAsIDEuMCkpO1xyXG5cclxuXHRjb25zdHJ1Y3RvcihwdWJsaWMgeDogbnVtYmVyID0gMC4wLCBwdWJsaWMgeTogbnVtYmVyID0gMC4wKSB7XHJcblx0XHR0aGlzLnggPSB4O1xyXG5cdFx0dGhpcy55ID0geTtcclxuXHR9XHJcblx0c2V0KHg6IG51bWJlciwgeTogbnVtYmVyKTogVmVjdG9yMiB7XHJcblx0XHR0aGlzLnggPSB4O1xyXG5cdFx0dGhpcy55ID0geTtcclxuXHRcdHJldHVybiB0aGlzO1xyXG5cdH1cclxuXHR0b0FycmF5KCkge1xyXG5cdFx0cmV0dXJuIFt0aGlzLngsIHRoaXMueV07XHJcblx0fVxyXG5cclxuXHRjbG9uZShyZXN1bHQ6IFZlY3RvcjIpOiBWZWN0b3IyIHtcclxuXHRcdHJldHVybiBWZWN0b3IyLmNsb25lKHRoaXMsIHJlc3VsdCk7XHJcblx0fVxyXG5cclxuXHRlcXVhbHMocmlnaHQ6IFZlY3RvcjIpOiBib29sZWFuIHtcclxuXHRcdHJldHVybiBWZWN0b3IyLmVxdWFscyh0aGlzLCByaWdodCk7XHJcblx0fVxyXG5cdGVxdWFsc0Vwc2lsb24ocmlnaHQ6IFZlY3RvcjIsIHJlbGF0aXZlRXBzaWxvbiA9IDAsIGFic29sdXRlRXBzaWxvbiA9IDApOiBib29sZWFuIHtcclxuXHRcdHJldHVybiBWZWN0b3IyLmVxdWFsc0Vwc2lsb24odGhpcywgcmlnaHQsIHJlbGF0aXZlRXBzaWxvbiwgYWJzb2x1dGVFcHNpbG9uKTtcclxuXHR9XHJcblxyXG5cdHRvU3RyaW5nKCkge1xyXG5cdFx0cmV0dXJuIGAoJHt0aGlzLnh9LCAke3RoaXMueX0pYDtcclxuXHR9XHJcblx0ZnJvbUJ1ZmZlckF0dHJpYnV0ZShhdHRyaWJ1dGU6IEF0dHJpYnV0ZSwgaW5kZXg6IG51bWJlcik6IFZlY3RvcjIge1xyXG5cdFx0dGhpcy54ID0gYXR0cmlidXRlLmdldFgoaW5kZXgpO1xyXG5cdFx0dGhpcy55ID0gYXR0cmlidXRlLmdldFkoaW5kZXgpO1xyXG5cdFx0cmV0dXJuIHRoaXM7XHJcblx0fVxyXG5cdGFwcGx5TWF0cml4MyhtYXRyaXgzOiBNYXRyaXgzKTogVmVjdG9yMiB7XHJcblx0XHRjb25zdCB4ID0gdGhpcy54LFxyXG5cdFx0XHR5ID0gdGhpcy55O1xyXG5cdFx0dGhpcy54ID0gbWF0cml4M1swXSAqIHggKyBtYXRyaXgzWzNdICogeSArIG1hdHJpeDNbNl07XHJcblx0XHR0aGlzLnkgPSBtYXRyaXgzWzFdICogeCArIG1hdHJpeDNbNF0gKiB5ICsgbWF0cml4M1s3XTtcclxuXHRcdHJldHVybiB0aGlzO1xyXG5cdH1cclxuXHJcblx0c3RhdGljIGZyb21FbGVtZW50cyh4OiBudW1iZXIsIHk6IG51bWJlciwgcmVzdWx0OiBWZWN0b3IyKTogVmVjdG9yMiB7XHJcblx0XHRpZiAoIWRlZmluZWQocmVzdWx0KSkge1xyXG5cdFx0XHRyZXR1cm4gbmV3IFZlY3RvcjIoeCwgeSk7XHJcblx0XHR9XHJcblxyXG5cdFx0cmVzdWx0LnggPSB4O1xyXG5cdFx0cmVzdWx0LnkgPSB5O1xyXG5cdFx0cmV0dXJuIHJlc3VsdDtcclxuXHR9XHJcblxyXG5cdHN0YXRpYyBjbG9uZShjYXJ0ZXNpYW46IFZlY3RvcjIsIHJlc3VsdDogVmVjdG9yMik6IFZlY3RvcjIge1xyXG5cdFx0aWYgKCFkZWZpbmVkKGNhcnRlc2lhbikpIHtcclxuXHRcdFx0cmV0dXJuIHVuZGVmaW5lZDtcclxuXHRcdH1cclxuXHRcdGlmICghZGVmaW5lZChyZXN1bHQpKSB7XHJcblx0XHRcdHJldHVybiBuZXcgVmVjdG9yMihjYXJ0ZXNpYW4ueCwgY2FydGVzaWFuLnkpO1xyXG5cdFx0fVxyXG5cclxuXHRcdHJlc3VsdC54ID0gY2FydGVzaWFuLng7XHJcblx0XHRyZXN1bHQueSA9IGNhcnRlc2lhbi55O1xyXG5cdFx0cmV0dXJuIHJlc3VsdDtcclxuXHR9XHJcblxyXG5cdHN0YXRpYyBtYXhpbXVtQ29tcG9uZW50KGNhcnRlc2lhbjogVmVjdG9yMik6IG51bWJlciB7XHJcblx0XHRyZXR1cm4gTWF0aC5tYXgoY2FydGVzaWFuLngsIGNhcnRlc2lhbi55KTtcclxuXHR9XHJcblxyXG5cdHN0YXRpYyBtaW5pbXVtQ29tcG9uZW50KGNhcnRlc2lhbjogVmVjdG9yMik6IG51bWJlciB7XHJcblx0XHRyZXR1cm4gTWF0aC5taW4oY2FydGVzaWFuLngsIGNhcnRlc2lhbi55KTtcclxuXHR9XHJcblxyXG5cdHN0YXRpYyBtaW5pbXVtQnlDb21wb25lbnQoZmlyc3Q6IFZlY3RvcjIsIHNlY29uZDogVmVjdG9yMiwgcmVzdWx0OiBWZWN0b3IyKTogVmVjdG9yMiB7XHJcblx0XHRyZXN1bHQueCA9IE1hdGgubWluKGZpcnN0LngsIHNlY29uZC54KTtcclxuXHRcdHJlc3VsdC55ID0gTWF0aC5taW4oZmlyc3QueSwgc2Vjb25kLnkpO1xyXG5cclxuXHRcdHJldHVybiByZXN1bHQ7XHJcblx0fVxyXG5cclxuXHRzdGF0aWMgbWF4aW11bUJ5Q29tcG9uZW50KGZpcnN0OiBWZWN0b3IyLCBzZWNvbmQ6IFZlY3RvcjIsIHJlc3VsdDogVmVjdG9yMik6IFZlY3RvcjIge1xyXG5cdFx0cmVzdWx0LnggPSBNYXRoLm1heChmaXJzdC54LCBzZWNvbmQueCk7XHJcblx0XHRyZXN1bHQueSA9IE1hdGgubWF4KGZpcnN0LnksIHNlY29uZC55KTtcclxuXHRcdHJldHVybiByZXN1bHQ7XHJcblx0fVxyXG5cclxuXHRzdGF0aWMgY2xhbXAodmFsdWU6IFZlY3RvcjIsIG1pbjogVmVjdG9yMiwgbWF4OiBWZWN0b3IyLCByZXN1bHQ6IFZlY3RvcjIpOiBWZWN0b3IyIHtcclxuXHRcdGNvbnN0IHggPSBHTWF0aC5jbGFtcCh2YWx1ZS54LCBtaW4ueCwgbWF4LngpO1xyXG5cdFx0Y29uc3QgeSA9IEdNYXRoLmNsYW1wKHZhbHVlLnksIG1pbi55LCBtYXgueSk7XHJcblxyXG5cdFx0cmVzdWx0LnggPSB4O1xyXG5cdFx0cmVzdWx0LnkgPSB5O1xyXG5cclxuXHRcdHJldHVybiByZXN1bHQ7XHJcblx0fVxyXG5cclxuXHRzdGF0aWMgbWFnbml0dWRlU3F1YXJlZChjYXJ0ZXNpYW46IFZlY3RvcjIpOiBudW1iZXIge1xyXG5cdFx0cmV0dXJuIGNhcnRlc2lhbi54ICogY2FydGVzaWFuLnggKyBjYXJ0ZXNpYW4ueSAqIGNhcnRlc2lhbi55O1xyXG5cdH1cclxuXHJcblx0c3RhdGljIG1hZ25pdHVkZShjYXJ0ZXNpYW46IFZlY3RvcjIpOiBudW1iZXIge1xyXG5cdFx0cmV0dXJuIE1hdGguc3FydChWZWN0b3IyLm1hZ25pdHVkZVNxdWFyZWQoY2FydGVzaWFuKSk7XHJcblx0fVxyXG5cclxuXHRzdGF0aWMgZGlzdGFuY2UobGVmdDogVmVjdG9yMiwgcmlnaHQ6IFZlY3RvcjIpOiBudW1iZXIge1xyXG5cdFx0VmVjdG9yMi5zdWJ0cmFjdChsZWZ0LCByaWdodCwgZGlzdGFuY2VTY3JhdGNoKTtcclxuXHRcdHJldHVybiBWZWN0b3IyLm1hZ25pdHVkZShkaXN0YW5jZVNjcmF0Y2gpO1xyXG5cdH1cclxuXHJcblx0c3RhdGljIGRpc3RhbmNlU3F1YXJlZChsZWZ0OiBWZWN0b3IyLCByaWdodDogVmVjdG9yMik6IG51bWJlciB7XHJcblx0XHRWZWN0b3IyLnN1YnRyYWN0KGxlZnQsIHJpZ2h0LCBkaXN0YW5jZVNjcmF0Y2gpO1xyXG5cdFx0cmV0dXJuIFZlY3RvcjIubWFnbml0dWRlU3F1YXJlZChkaXN0YW5jZVNjcmF0Y2gpO1xyXG5cdH1cclxuXHJcblx0c3RhdGljIG5vcm1hbGl6ZShjYXJ0ZXNpYW46IFZlY3RvcjIsIHJlc3VsdDogVmVjdG9yMik6IFZlY3RvcjIge1xyXG5cdFx0Y29uc3QgbWFnbml0dWRlID0gVmVjdG9yMi5tYWduaXR1ZGUoY2FydGVzaWFuKTtcclxuXHJcblx0XHRyZXN1bHQueCA9IGNhcnRlc2lhbi54IC8gbWFnbml0dWRlO1xyXG5cdFx0cmVzdWx0LnkgPSBjYXJ0ZXNpYW4ueSAvIG1hZ25pdHVkZTtcclxuXHJcblx0XHQvLyA+PmluY2x1ZGVTdGFydCgnZGVidWcnLCBwcmFnbWFzLmRlYnVnKTtcclxuXHRcdGlmIChpc05hTihyZXN1bHQueCkgfHwgaXNOYU4ocmVzdWx0LnkpKSB7XHJcblx0XHRcdHRocm93IG5ldyBFcnJvcihcIm5vcm1hbGl6ZWQgcmVzdWx0IGlzIG5vdCBhIG51bWJlclwiKTtcclxuXHRcdH1cclxuXHRcdC8vID4+aW5jbHVkZUVuZCgnZGVidWcnKTtcclxuXHJcblx0XHRyZXR1cm4gcmVzdWx0O1xyXG5cdH1cclxuXHJcblx0c3RhdGljIGRvdChsZWZ0OiBWZWN0b3IyLCByaWdodDogVmVjdG9yMik6IG51bWJlciB7XHJcblx0XHRyZXR1cm4gbGVmdC54ICogcmlnaHQueCArIGxlZnQueSAqIHJpZ2h0Lnk7XHJcblx0fVxyXG5cclxuXHRzdGF0aWMgY3Jvc3MobGVmdDogVmVjdG9yMiwgcmlnaHQ6IFZlY3RvcjIpOiBudW1iZXIge1xyXG5cdFx0cmV0dXJuIGxlZnQueCAqIHJpZ2h0LnkgLSBsZWZ0LnkgKiByaWdodC54O1xyXG5cdH1cclxuXHJcblx0c3RhdGljIG11bHRpcGx5Q29tcG9uZW50cyhsZWZ0OiBWZWN0b3IyLCByaWdodDogVmVjdG9yMiwgcmVzdWx0OiBWZWN0b3IyKTogVmVjdG9yMiB7XHJcblx0XHRyZXN1bHQueCA9IGxlZnQueCAqIHJpZ2h0Lng7XHJcblx0XHRyZXN1bHQueSA9IGxlZnQueSAqIHJpZ2h0Lnk7XHJcblx0XHRyZXR1cm4gcmVzdWx0O1xyXG5cdH1cclxuXHJcblx0c3RhdGljIGRpdmlkZUNvbXBvbmVudHMobGVmdDogVmVjdG9yMiwgcmlnaHQ6IFZlY3RvcjIsIHJlc3VsdDogVmVjdG9yMik6IFZlY3RvcjIge1xyXG5cdFx0cmVzdWx0LnggPSBsZWZ0LnggLyByaWdodC54O1xyXG5cdFx0cmVzdWx0LnkgPSBsZWZ0LnkgLyByaWdodC55O1xyXG5cdFx0cmV0dXJuIHJlc3VsdDtcclxuXHR9XHJcblxyXG5cdHN0YXRpYyBhZGQobGVmdDogVmVjdG9yMiwgcmlnaHQ6IFZlY3RvcjIsIHJlc3VsdDogVmVjdG9yMik6IFZlY3RvcjIge1xyXG5cdFx0cmVzdWx0LnggPSBsZWZ0LnggKyByaWdodC54O1xyXG5cdFx0cmVzdWx0LnkgPSBsZWZ0LnkgKyByaWdodC55O1xyXG5cdFx0cmV0dXJuIHJlc3VsdDtcclxuXHR9XHJcblxyXG5cdHN0YXRpYyBzdWJ0cmFjdChsZWZ0OiBWZWN0b3IyLCByaWdodDogVmVjdG9yMiwgcmVzdWx0OiBWZWN0b3IyKTogVmVjdG9yMiB7XHJcblx0XHRyZXN1bHQueCA9IGxlZnQueCAtIHJpZ2h0Lng7XHJcblx0XHRyZXN1bHQueSA9IGxlZnQueSAtIHJpZ2h0Lnk7XHJcblx0XHRyZXR1cm4gcmVzdWx0O1xyXG5cdH1cclxuXHJcblx0c3RhdGljIG11bHRpcGx5QnlTY2FsYXIoY2FydGVzaWFuOiBWZWN0b3IyLCBzY2FsYXI6IG51bWJlciwgcmVzdWx0OiBWZWN0b3IyKTogVmVjdG9yMiB7XHJcblx0XHRyZXN1bHQueCA9IGNhcnRlc2lhbi54ICogc2NhbGFyO1xyXG5cdFx0cmVzdWx0LnkgPSBjYXJ0ZXNpYW4ueSAqIHNjYWxhcjtcclxuXHRcdHJldHVybiByZXN1bHQ7XHJcblx0fVxyXG5cclxuXHRzdGF0aWMgZGl2aWRlQnlTY2FsYXIoY2FydGVzaWFuOiBWZWN0b3IyLCBzY2FsYXI6IG51bWJlciwgcmVzdWx0OiBWZWN0b3IyKTogVmVjdG9yMiB7XHJcblx0XHRyZXN1bHQueCA9IGNhcnRlc2lhbi54IC8gc2NhbGFyO1xyXG5cdFx0cmVzdWx0LnkgPSBjYXJ0ZXNpYW4ueSAvIHNjYWxhcjtcclxuXHRcdHJldHVybiByZXN1bHQ7XHJcblx0fVxyXG5cclxuXHRzdGF0aWMgbmVnYXRlKGNhcnRlc2lhbjogVmVjdG9yMiwgcmVzdWx0OiBWZWN0b3IyKTogVmVjdG9yMiB7XHJcblx0XHRyZXN1bHQueCA9IC1jYXJ0ZXNpYW4ueDtcclxuXHRcdHJlc3VsdC55ID0gLWNhcnRlc2lhbi55O1xyXG5cdFx0cmV0dXJuIHJlc3VsdDtcclxuXHR9XHJcblxyXG5cdHN0YXRpYyBhYnMoY2FydGVzaWFuOiBWZWN0b3IyLCByZXN1bHQ6IFZlY3RvcjIpOiBWZWN0b3IyIHtcclxuXHRcdHJlc3VsdC54ID0gTWF0aC5hYnMoY2FydGVzaWFuLngpO1xyXG5cdFx0cmVzdWx0LnkgPSBNYXRoLmFicyhjYXJ0ZXNpYW4ueSk7XHJcblx0XHRyZXR1cm4gcmVzdWx0O1xyXG5cdH1cclxuXHJcblx0c3RhdGljIGxlcnAoc3RhcnQ6IFZlY3RvcjIsIGVuZDogVmVjdG9yMiwgdDogbnVtYmVyLCByZXN1bHQ6IFZlY3RvcjIpOiBWZWN0b3IyIHtcclxuXHRcdFZlY3RvcjIubXVsdGlwbHlCeVNjYWxhcihlbmQsIHQsIGxlcnBTY3JhdGNoKTtcclxuXHRcdHJlc3VsdCA9IFZlY3RvcjIubXVsdGlwbHlCeVNjYWxhcihzdGFydCwgMS4wIC0gdCwgcmVzdWx0KTtcclxuXHRcdHJldHVybiBWZWN0b3IyLmFkZChsZXJwU2NyYXRjaCwgcmVzdWx0LCByZXN1bHQpO1xyXG5cdH1cclxuXHJcblx0c3RhdGljIGFuZ2xlQmV0d2VlbihsZWZ0OiBWZWN0b3IyLCByaWdodDogVmVjdG9yMik6IG51bWJlciB7XHJcblx0XHRWZWN0b3IyLm5vcm1hbGl6ZShsZWZ0LCBhbmdsZUJldHdlZW5TY3JhdGNoKTtcclxuXHRcdFZlY3RvcjIubm9ybWFsaXplKHJpZ2h0LCBhbmdsZUJldHdlZW5TY3JhdGNoMik7XHJcblx0XHRyZXR1cm4gR01hdGguYWNvc0NsYW1wZWQoVmVjdG9yMi5kb3QoYW5nbGVCZXR3ZWVuU2NyYXRjaCwgYW5nbGVCZXR3ZWVuU2NyYXRjaDIpKTtcclxuXHR9XHJcblxyXG5cdHN0YXRpYyBtb3N0T3J0aG9nb25hbEF4aXMoY2FydGVzaWFuOiBWZWN0b3IyLCByZXN1bHQ6IFZlY3RvcjIpOiBWZWN0b3IyIHtcclxuXHRcdGNvbnN0IGYgPSBWZWN0b3IyLm5vcm1hbGl6ZShjYXJ0ZXNpYW4sIG1vc3RPcnRob2dvbmFsQXhpc1NjcmF0Y2gpO1xyXG5cdFx0VmVjdG9yMi5hYnMoZiwgZik7XHJcblxyXG5cdFx0aWYgKGYueCA8PSBmLnkpIHtcclxuXHRcdFx0cmVzdWx0ID0gVmVjdG9yMi5jbG9uZShWZWN0b3IyLlVOSVRfWCwgcmVzdWx0KTtcclxuXHRcdH0gZWxzZSB7XHJcblx0XHRcdHJlc3VsdCA9IFZlY3RvcjIuY2xvbmUoVmVjdG9yMi5VTklUX1ksIHJlc3VsdCk7XHJcblx0XHR9XHJcblxyXG5cdFx0cmV0dXJuIHJlc3VsdDtcclxuXHR9XHJcblxyXG5cdHN0YXRpYyBlcXVhbHMobGVmdDogVmVjdG9yMiwgcmlnaHQ6IFZlY3RvcjIpOiBib29sZWFuIHtcclxuXHRcdHJldHVybiBsZWZ0ID09PSByaWdodCB8fCAoZGVmaW5lZChsZWZ0KSAmJiBkZWZpbmVkKHJpZ2h0KSAmJiBsZWZ0LnggPT09IHJpZ2h0LnggJiYgbGVmdC55ID09PSByaWdodC55KTtcclxuXHR9XHJcblxyXG5cdC8qKlxyXG5cdCAqIEBwcml2YXRlXHJcblx0ICovXHJcblx0c3RhdGljIGVxdWFsc0FycmF5KGNhcnRlc2lhbjogVmVjdG9yMiwgYXJyYXk6IG51bWJlcltdLCBvZmZzZXQ6IG51bWJlcik6IGJvb2xlYW4ge1xyXG5cdFx0cmV0dXJuIGNhcnRlc2lhbi54ID09PSBhcnJheVtvZmZzZXRdICYmIGNhcnRlc2lhbi55ID09PSBhcnJheVtvZmZzZXQgKyAxXTtcclxuXHR9XHJcblxyXG5cdHN0YXRpYyBlcXVhbHNFcHNpbG9uKGxlZnQ6IFZlY3RvcjIsIHJpZ2h0OiBWZWN0b3IyLCByZWxhdGl2ZUVwc2lsb24gPSAwLCBhYnNvbHV0ZUVwc2lsb24gPSAwKTogYm9vbGVhbiB7XHJcblx0XHRyZXR1cm4gKFxyXG5cdFx0XHRsZWZ0ID09PSByaWdodCB8fFxyXG5cdFx0XHQoZGVmaW5lZChsZWZ0KSAmJlxyXG5cdFx0XHRcdGRlZmluZWQocmlnaHQpICYmXHJcblx0XHRcdFx0R01hdGguZXF1YWxzRXBzaWxvbihsZWZ0LngsIHJpZ2h0LngsIHJlbGF0aXZlRXBzaWxvbiwgYWJzb2x1dGVFcHNpbG9uKSAmJlxyXG5cdFx0XHRcdEdNYXRoLmVxdWFsc0Vwc2lsb24obGVmdC55LCByaWdodC55LCByZWxhdGl2ZUVwc2lsb24sIGFic29sdXRlRXBzaWxvbikpXHJcblx0XHQpO1xyXG5cdH1cclxufVxyXG5jb25zdCBkaXN0YW5jZVNjcmF0Y2ggPSBuZXcgVmVjdG9yMigpO1xyXG5jb25zdCBsZXJwU2NyYXRjaCA9IG5ldyBWZWN0b3IyKCk7XHJcbmNvbnN0IGFuZ2xlQmV0d2VlblNjcmF0Y2ggPSBuZXcgVmVjdG9yMigpO1xyXG5jb25zdCBhbmdsZUJldHdlZW5TY3JhdGNoMiA9IG5ldyBWZWN0b3IyKCk7XHJcbmNvbnN0IG1vc3RPcnRob2dvbmFsQXhpc1NjcmF0Y2ggPSBuZXcgVmVjdG9yMigpO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgVmVjdG9yMjtcclxuIiwiaW1wb3J0IHsgQXR0cmlidXRlIH0gZnJvbSBcIi4uL3JlbmRlci9BdHRyaWJ1dGVcIjtcclxuaW1wb3J0IGRlZmluZWQgZnJvbSBcIi4uL3V0aWxzL2RlZmluZWRcIjtcclxuaW1wb3J0IEdNYXRoIGZyb20gXCIuL01hdGhcIjtcclxuaW1wb3J0IE1hdHJpeDMgZnJvbSBcIi4vTWF0cml4M1wiO1xyXG5pbXBvcnQgTWF0cml4NCBmcm9tIFwiLi9NYXRyaXg0XCI7XHJcbmltcG9ydCB7IFF1YXRlcm5pb24gfSBmcm9tIFwiLi9RdWF0ZXJuaW9uXCI7XHJcbmltcG9ydCB7IFNwaGVyaWNhbCB9IGZyb20gXCIuL1NwaGVyaWNhbFwiO1xyXG5pbXBvcnQgVmVjdG9yNCBmcm9tIFwiLi9WZWN0b3I0XCI7XHJcbmNsYXNzIFZlY3RvcjMge1xyXG5cdHB1YmxpYyBzdGF0aWMgWkVSTyA9IE9iamVjdC5mcmVlemUobmV3IFZlY3RvcjMoMC4wLCAwLjAsIDAuMCkpO1xyXG5cclxuXHRwdWJsaWMgc3RhdGljIE9ORSA9IE9iamVjdC5mcmVlemUobmV3IFZlY3RvcjMoMS4wLCAxLjAsIDEuMCkpO1xyXG5cclxuXHRwdWJsaWMgc3RhdGljIFVOSVRfWCA9IE9iamVjdC5mcmVlemUobmV3IFZlY3RvcjMoMS4wLCAwLjAsIDAuMCkpO1xyXG5cclxuXHRwdWJsaWMgc3RhdGljIFVOSVRfWSA9IE9iamVjdC5mcmVlemUobmV3IFZlY3RvcjMoMC4wLCAxLjAsIDAuMCkpO1xyXG5cclxuXHRwdWJsaWMgc3RhdGljIFVOSVRfWiA9IE9iamVjdC5mcmVlemUobmV3IFZlY3RvcjMoMC4wLCAwLjAsIDEuMCkpO1xyXG5cdHg6IG51bWJlcjtcclxuXHR5OiBudW1iZXI7XHJcblx0ejogbnVtYmVyO1xyXG5cclxuXHRjb25zdHJ1Y3Rvcih4ID0gMCwgeSA9IDAsIHogPSAwKSB7XHJcblx0XHR0aGlzLnggPSB4O1xyXG5cdFx0dGhpcy55ID0geTtcclxuXHRcdHRoaXMueiA9IHo7XHJcblx0fVxyXG5cdHNldCh4OiBudW1iZXIsIHk6IG51bWJlciwgejogbnVtYmVyKTogVmVjdG9yMyB7XHJcblx0XHR0aGlzLnggPSB4O1xyXG5cdFx0dGhpcy55ID0geTtcclxuXHRcdHRoaXMueiA9IHo7XHJcblx0XHRyZXR1cm4gdGhpcztcclxuXHR9XHJcblx0dG9BcnJheSgpOiBudW1iZXJbXSB7XHJcblx0XHRyZXR1cm4gW3RoaXMueCwgdGhpcy55LCB0aGlzLnpdO1xyXG5cdH1cclxuXHJcblx0Y29weSh2OiBWZWN0b3IzKTogVmVjdG9yMyB7XHJcblx0XHR0aGlzLnggPSB2Lng7XHJcblx0XHR0aGlzLnkgPSB2Lnk7XHJcblx0XHR0aGlzLnogPSB2Lno7XHJcblx0XHRyZXR1cm4gdGhpcztcclxuXHR9XHJcblx0bGVycChlbmQ6IFZlY3RvcjMsIHQ6IG51bWJlcik6IFZlY3RvcjMge1xyXG5cdFx0VmVjdG9yMy5sZXJwKHRoaXMsIGVuZCwgdCwgdGhpcyk7XHJcblx0XHRyZXR1cm4gdGhpcztcclxuXHR9XHJcblx0YWRkKHY6IFZlY3RvcjMpOiBWZWN0b3IzIHtcclxuXHRcdFZlY3RvcjMuYWRkKHRoaXMsIHYsIHRoaXMpO1xyXG5cdFx0cmV0dXJuIHRoaXM7XHJcblx0fVxyXG5cdGFkZFNjYWxlZFZlY3Rvcih2OiBWZWN0b3IzLCBzOiBudW1iZXIpOiBWZWN0b3IzIHtcclxuXHRcdHRoaXMueCArPSB2LnggKiBzO1xyXG5cdFx0dGhpcy55ICs9IHYueSAqIHM7XHJcblx0XHR0aGlzLnogKz0gdi56ICogcztcclxuXHRcdHJldHVybiB0aGlzO1xyXG5cdH1cclxuXHRzdWJ0cmFjdCh2OiBWZWN0b3IzKTogVmVjdG9yMyB7XHJcblx0XHRWZWN0b3IzLnN1YnRyYWN0KHRoaXMsIHYsIHRoaXMpO1xyXG5cdFx0cmV0dXJuIHRoaXM7XHJcblx0fVxyXG5cdGFwcGx5UXVhdGVybmlvbihxOiBRdWF0ZXJuaW9uKTogVmVjdG9yMyB7XHJcblx0XHRjb25zdCB4ID0gdGhpcy54LFxyXG5cdFx0XHR5ID0gdGhpcy55LFxyXG5cdFx0XHR6ID0gdGhpcy56O1xyXG5cdFx0Y29uc3QgcXggPSBxLngsXHJcblx0XHRcdHF5ID0gcS55LFxyXG5cdFx0XHRxeiA9IHEueixcclxuXHRcdFx0cXcgPSBxLnc7XHJcblxyXG5cdFx0Ly8gY2FsY3VsYXRlIHF1YXQgKiB2ZWN0b3JcclxuXHJcblx0XHRjb25zdCBpeCA9IHF3ICogeCArIHF5ICogeiAtIHF6ICogeTtcclxuXHRcdGNvbnN0IGl5ID0gcXcgKiB5ICsgcXogKiB4IC0gcXggKiB6O1xyXG5cdFx0Y29uc3QgaXogPSBxdyAqIHogKyBxeCAqIHkgLSBxeSAqIHg7XHJcblx0XHRjb25zdCBpdyA9IC1xeCAqIHggLSBxeSAqIHkgLSBxeiAqIHo7XHJcblxyXG5cdFx0Ly8gY2FsY3VsYXRlIHJlc3VsdCAqIGludmVyc2UgcXVhdFxyXG5cclxuXHRcdHRoaXMueCA9IGl4ICogcXcgKyBpdyAqIC1xeCArIGl5ICogLXF6IC0gaXogKiAtcXk7XHJcblx0XHR0aGlzLnkgPSBpeSAqIHF3ICsgaXcgKiAtcXkgKyBpeiAqIC1xeCAtIGl4ICogLXF6O1xyXG5cdFx0dGhpcy56ID0gaXogKiBxdyArIGl3ICogLXF6ICsgaXggKiAtcXkgLSBpeSAqIC1xeDtcclxuXHJcblx0XHRyZXR1cm4gdGhpcztcclxuXHR9XHJcblx0c2V0RnJvbU1hdHJpeENvbHVtbihtOiBNYXRyaXgzIHwgTWF0cml4NCwgaW5kZXg6IG51bWJlcik6IFZlY3RvcjMge1xyXG5cdFx0cmV0dXJuIHRoaXMuZnJvbUFycmF5KG0sIGluZGV4ICogNCk7XHJcblx0fVxyXG5cdGZyb21BcnJheShhcnJheTogTWF0cml4MyB8IE1hdHJpeDQsIG9mZnNldCA9IDApOiBWZWN0b3IzIHtcclxuXHRcdHRoaXMueCA9IGFycmF5W29mZnNldF07XHJcblx0XHR0aGlzLnkgPSBhcnJheVtvZmZzZXQgKyAxXTtcclxuXHRcdHRoaXMueiA9IGFycmF5W29mZnNldCArIDJdO1xyXG5cclxuXHRcdHJldHVybiB0aGlzO1xyXG5cdH1cclxuXHJcblx0bXVsdGlwbHlCeVNjYWxhcihzY2FsZTogbnVtYmVyKTogVmVjdG9yMyB7XHJcblx0XHRWZWN0b3IzLm11bHRpcGx5QnlTY2FsYXIodGhpcywgc2NhbGUsIHRoaXMpO1xyXG5cdFx0cmV0dXJuIHRoaXM7XHJcblx0fVxyXG5cclxuXHRjbG9uZSgpOiBWZWN0b3IzIHtcclxuXHRcdHJldHVybiBWZWN0b3IzLmNsb25lKHRoaXMsIG5ldyBWZWN0b3IzKCkpO1xyXG5cdH1cclxuXHRsZW5ndGgoKTogbnVtYmVyIHtcclxuXHRcdHJldHVybiBNYXRoLnNxcnQodGhpcy54ICogdGhpcy54ICsgdGhpcy55ICogdGhpcy55ICsgdGhpcy56ICogdGhpcy56KTtcclxuXHR9XHJcblx0YXBwbHlNYXRyaXg0KG1hdHJpeDogTWF0cml4NCk6IFZlY3RvcjMge1xyXG5cdFx0Y29uc3QgeCA9IHRoaXMueCxcclxuXHRcdFx0eSA9IHRoaXMueSxcclxuXHRcdFx0eiA9IHRoaXMuejtcclxuXHRcdGNvbnN0IGUgPSBtYXRyaXg7XHJcblx0XHRjb25zdCB3ID0gMSAvIChlWzNdICogeCArIGVbN10gKiB5ICsgZVsxMV0gKiB6ICsgZVsxNV0pO1xyXG5cdFx0dGhpcy54ID0gKGVbMF0gKiB4ICsgZVs0XSAqIHkgKyBlWzhdICogeiArIGVbMTJdKSAqIHc7XHJcblx0XHR0aGlzLnkgPSAoZVsxXSAqIHggKyBlWzVdICogeSArIGVbOV0gKiB6ICsgZVsxM10pICogdztcclxuXHRcdHRoaXMueiA9IChlWzJdICogeCArIGVbNl0gKiB5ICsgZVsxMF0gKiB6ICsgZVsxNF0pICogdztcclxuXHRcdHJldHVybiB0aGlzO1xyXG5cdH1cclxuXHRhcHBseU1hdHJpeDMobWF0cml4OiBNYXRyaXgzKTogVmVjdG9yMyB7XHJcblx0XHRjb25zdCB4ID0gdGhpcy54LFxyXG5cdFx0XHR5ID0gdGhpcy55LFxyXG5cdFx0XHR6ID0gdGhpcy56O1xyXG5cdFx0dGhpcy54ID0geCAqIG1hdHJpeFswXSArIHkgKiBtYXRyaXhbM10gKyB6ICogbWF0cml4WzZdO1xyXG5cdFx0dGhpcy55ID0geCAqIG1hdHJpeFsxXSArIHkgKiBtYXRyaXhbNF0gKyB6ICogbWF0cml4WzddO1xyXG5cdFx0dGhpcy56ID0geCAqIG1hdHJpeFsyXSArIHkgKiBtYXRyaXhbNV0gKyB6ICogbWF0cml4WzhdO1xyXG5cdFx0cmV0dXJuIHRoaXM7XHJcblx0fVxyXG5cdHRyYW5zZm9ybURpcmVjdGlvbihtYXRyaXg6IE1hdHJpeDMgfCBNYXRyaXg0KTogVmVjdG9yMyB7XHJcblx0XHRjb25zdCB4ID0gdGhpcy54LFxyXG5cdFx0XHR5ID0gdGhpcy55LFxyXG5cdFx0XHR6ID0gdGhpcy56O1xyXG5cdFx0Y29uc3QgZSA9IG1hdHJpeDtcclxuXHRcdHRoaXMueCA9IGVbMF0gKiB4ICsgZVs0XSAqIHkgKyBlWzhdICogejtcclxuXHRcdHRoaXMueSA9IGVbMV0gKiB4ICsgZVs1XSAqIHkgKyBlWzldICogejtcclxuXHRcdHRoaXMueiA9IGVbMl0gKiB4ICsgZVs2XSAqIHkgKyBlWzEwXSAqIHo7XHJcblx0XHRyZXR1cm4gdGhpcy5ub3JtYWxpemUoKTtcclxuXHR9XHJcblxyXG5cdHNldEZyb21NYXRyaXhQb3NpdGlvbihtYXRyaXg6IE1hdHJpeDQpIHtcclxuXHRcdGNvbnN0IGUgPSBtYXRyaXg7XHJcblxyXG5cdFx0dGhpcy54ID0gZVsxMl07XHJcblx0XHR0aGlzLnkgPSBlWzEzXTtcclxuXHRcdHRoaXMueiA9IGVbMTRdO1xyXG5cclxuXHRcdHJldHVybiB0aGlzO1xyXG5cdH1cclxuXHJcblx0bm9ybWFsaXplKCk6IFZlY3RvcjMge1xyXG5cdFx0VmVjdG9yMy5ub3JtYWxpemUodGhpcywgdGhpcyk7XHJcblx0XHRyZXR1cm4gdGhpcztcclxuXHR9XHJcblxyXG5cdGVxdWFscyhyaWdodDogVmVjdG9yMyk6IGJvb2xlYW4ge1xyXG5cdFx0cmV0dXJuIFZlY3RvcjMuZXF1YWxzKHRoaXMsIHJpZ2h0KTtcclxuXHR9XHJcblxyXG5cdGVxdWFsc0Vwc2lsb24ocmlnaHQ6IFZlY3RvcjMsIHJlbGF0aXZlRXBzaWxvbiA9IDAsIGFic29sdXRlRXBzaWxvbiA9IDApOiBib29sZWFuIHtcclxuXHRcdHJldHVybiBWZWN0b3IzLmVxdWFsc0Vwc2lsb24odGhpcywgcmlnaHQsIHJlbGF0aXZlRXBzaWxvbiwgYWJzb2x1dGVFcHNpbG9uKTtcclxuXHR9XHJcblxyXG5cdHRvU3RyaW5nKCkge1xyXG5cdFx0cmV0dXJuIGAoJHt0aGlzLnh9LCAke3RoaXMueX0sICR7dGhpcy56fSlgO1xyXG5cdH1cclxuXHRmcm9tQnVmZmVyQXR0cmlidXRlKGF0dHJpYnV0ZTogQXR0cmlidXRlLCBpbmRleDogbnVtYmVyKTogVmVjdG9yMyB7XHJcblx0XHR0aGlzLnggPSBhdHRyaWJ1dGUuZ2V0WChpbmRleCk7XHJcblx0XHR0aGlzLnkgPSBhdHRyaWJ1dGUuZ2V0WShpbmRleCk7XHJcblx0XHR0aGlzLnogPSBhdHRyaWJ1dGUuZ2V0WihpbmRleCk7XHJcblx0XHRyZXR1cm4gdGhpcztcclxuXHR9XHJcblx0c3RhdGljIGZyb21WZWN0b3I0KHZlYzQ6IFZlY3RvcjQsIHJlc3VsdDogVmVjdG9yMyk6IFZlY3RvcjMge1xyXG5cdFx0cmVzdWx0LnggPSB2ZWM0Lng7XHJcblx0XHRyZXN1bHQueSA9IHZlYzQueTtcclxuXHRcdHJlc3VsdC56ID0gdmVjNC56O1xyXG5cdFx0cmV0dXJuIHJlc3VsdDtcclxuXHR9XHJcblxyXG5cdHN0YXRpYyBmcm9tU3BoZXJpY2FsKHNwaGVyaWNhbDogU3BoZXJpY2FsLCByZXN1bHQ6IFZlY3RvcjMpOiBWZWN0b3IzIHtcclxuXHRcdGlmICghZGVmaW5lZChyZXN1bHQpKSB7XHJcblx0XHRcdHJlc3VsdCA9IG5ldyBWZWN0b3IzKCk7XHJcblx0XHR9XHJcblx0XHRjb25zdCB7IHBoaSwgcmFkaXVzLCB0aGV0YSB9ID0gc3BoZXJpY2FsO1xyXG5cdFx0Y29uc3Qgc2luUGhpUmFkaXVzID0gTWF0aC5zaW4ocGhpKSAqIHJhZGl1cztcclxuXHRcdHJlc3VsdC54ID0gc2luUGhpUmFkaXVzICogTWF0aC5zaW4odGhldGEpO1xyXG5cdFx0cmVzdWx0LnkgPSBNYXRoLmNvcyhwaGkpICogcmFkaXVzO1xyXG5cdFx0cmVzdWx0LnogPSBzaW5QaGlSYWRpdXMgKiBNYXRoLmNvcyh0aGV0YSk7XHJcblx0XHRyZXR1cm4gcmVzdWx0O1xyXG5cdH1cclxuXHJcblx0c3RhdGljIGZyb21FbGVtZW50cyh4OiBudW1iZXIsIHk6IG51bWJlciwgejogbnVtYmVyLCByZXN1bHQ6IFZlY3RvcjMpOiBWZWN0b3IzIHtcclxuXHRcdGlmICghZGVmaW5lZChyZXN1bHQpKSB7XHJcblx0XHRcdHJldHVybiBuZXcgVmVjdG9yMyh4LCB5LCB6KTtcclxuXHRcdH1cclxuXHJcblx0XHRyZXN1bHQueCA9IHg7XHJcblx0XHRyZXN1bHQueSA9IHk7XHJcblx0XHRyZXN1bHQueiA9IHo7XHJcblx0XHRyZXR1cm4gcmVzdWx0O1xyXG5cdH1cclxuXHJcblx0c3RhdGljIGNsb25lKGNhcnRlc2lhbjogVmVjdG9yMywgcmVzdWx0OiBWZWN0b3IzID0gbmV3IFZlY3RvcjMoKSk6IFZlY3RvcjMge1xyXG5cdFx0aWYgKCFkZWZpbmVkKGNhcnRlc2lhbikpIHtcclxuXHRcdFx0cmV0dXJuIHVuZGVmaW5lZDtcclxuXHRcdH1cclxuXHRcdGlmICghZGVmaW5lZChyZXN1bHQpKSB7XHJcblx0XHRcdHJldHVybiBuZXcgVmVjdG9yMyhjYXJ0ZXNpYW4ueCwgY2FydGVzaWFuLnksIGNhcnRlc2lhbi56KTtcclxuXHRcdH1cclxuXHJcblx0XHRyZXN1bHQueCA9IGNhcnRlc2lhbi54O1xyXG5cdFx0cmVzdWx0LnkgPSBjYXJ0ZXNpYW4ueTtcclxuXHRcdHJlc3VsdC56ID0gY2FydGVzaWFuLno7XHJcblx0XHRyZXR1cm4gcmVzdWx0O1xyXG5cdH1cclxuXHJcblx0c3RhdGljIG1heGltdW1Db21wb25lbnQoY2FydGVzaWFuOiBWZWN0b3IzKTogbnVtYmVyIHtcclxuXHRcdHJldHVybiBNYXRoLm1heChjYXJ0ZXNpYW4ueCwgY2FydGVzaWFuLnksIGNhcnRlc2lhbi56KTtcclxuXHR9XHJcblxyXG5cdHN0YXRpYyBtaW5pbXVtQ29tcG9uZW50KGNhcnRlc2lhbjogVmVjdG9yMyk6IG51bWJlciB7XHJcblx0XHRyZXR1cm4gTWF0aC5taW4oY2FydGVzaWFuLngsIGNhcnRlc2lhbi55LCBjYXJ0ZXNpYW4ueik7XHJcblx0fVxyXG5cclxuXHRzdGF0aWMgbWluaW11bUJ5Q29tcG9uZW50KGZpcnN0OiBWZWN0b3IzLCBzZWNvbmQ6IFZlY3RvcjMsIHJlc3VsdDogVmVjdG9yMyk6IFZlY3RvcjMge1xyXG5cdFx0cmVzdWx0LnggPSBNYXRoLm1pbihmaXJzdC54LCBzZWNvbmQueCk7XHJcblx0XHRyZXN1bHQueSA9IE1hdGgubWluKGZpcnN0LnksIHNlY29uZC55KTtcclxuXHRcdHJlc3VsdC56ID0gTWF0aC5taW4oZmlyc3Queiwgc2Vjb25kLnopO1xyXG5cclxuXHRcdHJldHVybiByZXN1bHQ7XHJcblx0fVxyXG5cclxuXHRzdGF0aWMgbWF4aW11bUJ5Q29tcG9uZW50KGZpcnN0OiBWZWN0b3IzLCBzZWNvbmQ6IFZlY3RvcjMsIHJlc3VsdDogVmVjdG9yMyk6IFZlY3RvcjMge1xyXG5cdFx0cmVzdWx0LnggPSBNYXRoLm1heChmaXJzdC54LCBzZWNvbmQueCk7XHJcblx0XHRyZXN1bHQueSA9IE1hdGgubWF4KGZpcnN0LnksIHNlY29uZC55KTtcclxuXHRcdHJlc3VsdC56ID0gTWF0aC5tYXgoZmlyc3Queiwgc2Vjb25kLnopO1xyXG5cdFx0cmV0dXJuIHJlc3VsdDtcclxuXHR9XHJcblxyXG5cdHN0YXRpYyBjbGFtcCh2YWx1ZTogVmVjdG9yMywgbWluOiBWZWN0b3IzLCBtYXg6IFZlY3RvcjMsIHJlc3VsdDogVmVjdG9yMyk6IFZlY3RvcjMge1xyXG5cdFx0Y29uc3QgeCA9IEdNYXRoLmNsYW1wKHZhbHVlLngsIG1pbi54LCBtYXgueCk7XHJcblx0XHRjb25zdCB5ID0gR01hdGguY2xhbXAodmFsdWUueSwgbWluLnksIG1heC55KTtcclxuXHRcdGNvbnN0IHogPSBHTWF0aC5jbGFtcCh2YWx1ZS56LCBtaW4ueiwgbWF4LnopO1xyXG5cclxuXHRcdHJlc3VsdC54ID0geDtcclxuXHRcdHJlc3VsdC55ID0geTtcclxuXHRcdHJlc3VsdC56ID0gejtcclxuXHJcblx0XHRyZXR1cm4gcmVzdWx0O1xyXG5cdH1cclxuXHJcblx0c3RhdGljIG1hZ25pdHVkZVNxdWFyZWQoY2FydGVzaWFuOiBWZWN0b3IzKTogbnVtYmVyIHtcclxuXHRcdHJldHVybiBjYXJ0ZXNpYW4ueCAqIGNhcnRlc2lhbi54ICsgY2FydGVzaWFuLnkgKiBjYXJ0ZXNpYW4ueSArIGNhcnRlc2lhbi56ICogY2FydGVzaWFuLno7XHJcblx0fVxyXG5cclxuXHRzdGF0aWMgbWFnbml0dWRlKGNhcnRlc2lhbjogVmVjdG9yMyk6IG51bWJlciB7XHJcblx0XHRyZXR1cm4gTWF0aC5zcXJ0KFZlY3RvcjMubWFnbml0dWRlU3F1YXJlZChjYXJ0ZXNpYW4pKTtcclxuXHR9XHJcblxyXG5cdHN0YXRpYyBkaXN0YW5jZShsZWZ0OiBWZWN0b3IzLCByaWdodDogVmVjdG9yMyk6IG51bWJlciB7XHJcblx0XHRWZWN0b3IzLnN1YnRyYWN0KGxlZnQsIHJpZ2h0LCBkaXN0YW5jZVNjcmF0Y2gpO1xyXG5cdFx0cmV0dXJuIFZlY3RvcjMubWFnbml0dWRlKGRpc3RhbmNlU2NyYXRjaCk7XHJcblx0fVxyXG5cclxuXHRzdGF0aWMgZGlzdGFuY2VTcXVhcmVkKGxlZnQ6IFZlY3RvcjMsIHJpZ2h0OiBWZWN0b3IzKTogbnVtYmVyIHtcclxuXHRcdFZlY3RvcjMuc3VidHJhY3QobGVmdCwgcmlnaHQsIGRpc3RhbmNlU2NyYXRjaCk7XHJcblx0XHRyZXR1cm4gVmVjdG9yMy5tYWduaXR1ZGVTcXVhcmVkKGRpc3RhbmNlU2NyYXRjaCk7XHJcblx0fVxyXG5cclxuXHRzdGF0aWMgbm9ybWFsaXplKGNhcnRlc2lhbjogVmVjdG9yMywgcmVzdWx0OiBWZWN0b3IzKTogVmVjdG9yMyB7XHJcblx0XHRjb25zdCBtYWduaXR1ZGUgPSBWZWN0b3IzLm1hZ25pdHVkZShjYXJ0ZXNpYW4pO1xyXG5cclxuXHRcdHJlc3VsdC54ID0gY2FydGVzaWFuLnggLyBtYWduaXR1ZGU7XHJcblx0XHRyZXN1bHQueSA9IGNhcnRlc2lhbi55IC8gbWFnbml0dWRlO1xyXG5cdFx0cmVzdWx0LnogPSBjYXJ0ZXNpYW4ueiAvIG1hZ25pdHVkZTtcclxuXHJcblx0XHRpZiAoaXNOYU4ocmVzdWx0LngpIHx8IGlzTmFOKHJlc3VsdC55KSB8fCBpc05hTihyZXN1bHQueikpIHtcclxuXHRcdFx0dGhyb3cgbmV3IEVycm9yKFwibm9ybWFsaXplZCByZXN1bHQgaXMgbm90IGEgbnVtYmVyXCIpO1xyXG5cdFx0fVxyXG5cclxuXHRcdHJldHVybiByZXN1bHQ7XHJcblx0fVxyXG5cclxuXHRzdGF0aWMgZG90KGxlZnQ6IFZlY3RvcjMsIHJpZ2h0OiBWZWN0b3IzKTogbnVtYmVyIHtcclxuXHRcdHJldHVybiBsZWZ0LnggKiByaWdodC54ICsgbGVmdC55ICogcmlnaHQueSArIGxlZnQueiAqIHJpZ2h0Lno7XHJcblx0fVxyXG5cclxuXHRzdGF0aWMgbXVsdGlwbHlDb21wb25lbnRzKGxlZnQ6IFZlY3RvcjMsIHJpZ2h0OiBWZWN0b3IzLCByZXN1bHQ6IFZlY3RvcjMpOiBWZWN0b3IzIHtcclxuXHRcdHJlc3VsdC54ID0gbGVmdC54ICogcmlnaHQueDtcclxuXHRcdHJlc3VsdC55ID0gbGVmdC55ICogcmlnaHQueTtcclxuXHRcdHJlc3VsdC56ID0gbGVmdC56ICogcmlnaHQuejtcclxuXHRcdHJldHVybiByZXN1bHQ7XHJcblx0fVxyXG5cclxuXHRzdGF0aWMgZGl2aWRlQ29tcG9uZW50cyhsZWZ0OiBWZWN0b3IzLCByaWdodDogVmVjdG9yMywgcmVzdWx0OiBWZWN0b3IzKSB7XHJcblx0XHRyZXN1bHQueCA9IGxlZnQueCAvIHJpZ2h0Lng7XHJcblx0XHRyZXN1bHQueSA9IGxlZnQueSAvIHJpZ2h0Lnk7XHJcblx0XHRyZXN1bHQueiA9IGxlZnQueiAvIHJpZ2h0Lno7XHJcblx0XHRyZXR1cm4gcmVzdWx0O1xyXG5cdH1cclxuXHJcblx0c3RhdGljIGFkZChsZWZ0OiBWZWN0b3IzLCByaWdodDogVmVjdG9yMywgcmVzdWx0OiBWZWN0b3IzKTogVmVjdG9yMyB7XHJcblx0XHRyZXN1bHQueCA9IGxlZnQueCArIHJpZ2h0Lng7XHJcblx0XHRyZXN1bHQueSA9IGxlZnQueSArIHJpZ2h0Lnk7XHJcblx0XHRyZXN1bHQueiA9IGxlZnQueiArIHJpZ2h0Lno7XHJcblx0XHRyZXR1cm4gcmVzdWx0O1xyXG5cdH1cclxuXHJcblx0c3RhdGljIHN1YnRyYWN0KGxlZnQ6IFZlY3RvcjMsIHJpZ2h0OiBWZWN0b3IzLCByZXN1bHQ6IFZlY3RvcjMpOiBWZWN0b3IzIHtcclxuXHRcdHJlc3VsdC54ID0gbGVmdC54IC0gcmlnaHQueDtcclxuXHRcdHJlc3VsdC55ID0gbGVmdC55IC0gcmlnaHQueTtcclxuXHRcdHJlc3VsdC56ID0gbGVmdC56IC0gcmlnaHQuejtcclxuXHRcdHJldHVybiByZXN1bHQ7XHJcblx0fVxyXG5cclxuXHRzdGF0aWMgbXVsdGlwbHlCeVNjYWxhcihjYXJ0ZXNpYW46IFZlY3RvcjMsIHNjYWxhcjogbnVtYmVyLCByZXN1bHQ6IFZlY3RvcjMpOiBWZWN0b3IzIHtcclxuXHRcdHJlc3VsdC54ID0gY2FydGVzaWFuLnggKiBzY2FsYXI7XHJcblx0XHRyZXN1bHQueSA9IGNhcnRlc2lhbi55ICogc2NhbGFyO1xyXG5cdFx0cmVzdWx0LnogPSBjYXJ0ZXNpYW4ueiAqIHNjYWxhcjtcclxuXHRcdHJldHVybiByZXN1bHQ7XHJcblx0fVxyXG5cclxuXHRzdGF0aWMgZGl2aWRlQnlTY2FsYXIoY2FydGVzaWFuOiBWZWN0b3IzLCBzY2FsYXI6IG51bWJlciwgcmVzdWx0OiBWZWN0b3IzKTogVmVjdG9yMyB7XHJcblx0XHRyZXN1bHQueCA9IGNhcnRlc2lhbi54IC8gc2NhbGFyO1xyXG5cdFx0cmVzdWx0LnkgPSBjYXJ0ZXNpYW4ueSAvIHNjYWxhcjtcclxuXHRcdHJlc3VsdC56ID0gY2FydGVzaWFuLnogLyBzY2FsYXI7XHJcblx0XHRyZXR1cm4gcmVzdWx0O1xyXG5cdH1cclxuXHJcblx0c3RhdGljIG5lZ2F0ZShjYXJ0ZXNpYW46IFZlY3RvcjMsIHJlc3VsdDogVmVjdG9yMyk6IFZlY3RvcjMge1xyXG5cdFx0cmVzdWx0LnggPSAtY2FydGVzaWFuLng7XHJcblx0XHRyZXN1bHQueSA9IC1jYXJ0ZXNpYW4ueTtcclxuXHRcdHJlc3VsdC56ID0gLWNhcnRlc2lhbi56O1xyXG5cdFx0cmV0dXJuIHJlc3VsdDtcclxuXHR9XHJcblxyXG5cdHN0YXRpYyBhYnMoY2FydGVzaWFuOiBWZWN0b3IzLCByZXN1bHQ6IFZlY3RvcjMpOiBWZWN0b3IzIHtcclxuXHRcdHJlc3VsdC54ID0gTWF0aC5hYnMoY2FydGVzaWFuLngpO1xyXG5cdFx0cmVzdWx0LnkgPSBNYXRoLmFicyhjYXJ0ZXNpYW4ueSk7XHJcblx0XHRyZXN1bHQueiA9IE1hdGguYWJzKGNhcnRlc2lhbi56KTtcclxuXHRcdHJldHVybiByZXN1bHQ7XHJcblx0fVxyXG5cclxuXHRzdGF0aWMgbGVycChzdGFydDogVmVjdG9yMywgZW5kOiBWZWN0b3IzLCB0OiBudW1iZXIsIHJlc3VsdDogVmVjdG9yMyk6IFZlY3RvcjMge1xyXG5cdFx0VmVjdG9yMy5tdWx0aXBseUJ5U2NhbGFyKGVuZCwgdCwgbGVycFNjcmF0Y2gpO1xyXG5cdFx0cmVzdWx0ID0gVmVjdG9yMy5tdWx0aXBseUJ5U2NhbGFyKHN0YXJ0LCAxLjAgLSB0LCByZXN1bHQpO1xyXG5cdFx0cmV0dXJuIFZlY3RvcjMuYWRkKGxlcnBTY3JhdGNoLCByZXN1bHQsIHJlc3VsdCk7XHJcblx0fVxyXG5cclxuXHRzdGF0aWMgYW5nbGVCZXR3ZWVuKGxlZnQ6IFZlY3RvcjMsIHJpZ2h0OiBWZWN0b3IzKTogbnVtYmVyIHtcclxuXHRcdFZlY3RvcjMubm9ybWFsaXplKGxlZnQsIGFuZ2xlQmV0d2VlblNjcmF0Y2gpO1xyXG5cdFx0VmVjdG9yMy5ub3JtYWxpemUocmlnaHQsIGFuZ2xlQmV0d2VlblNjcmF0Y2gyKTtcclxuXHRcdGNvbnN0IGNvc2luZSA9IFZlY3RvcjMuZG90KGFuZ2xlQmV0d2VlblNjcmF0Y2gsIGFuZ2xlQmV0d2VlblNjcmF0Y2gyKTtcclxuXHRcdGNvbnN0IHNpbmUgPSBWZWN0b3IzLm1hZ25pdHVkZShWZWN0b3IzLmNyb3NzKGFuZ2xlQmV0d2VlblNjcmF0Y2gsIGFuZ2xlQmV0d2VlblNjcmF0Y2gyLCBhbmdsZUJldHdlZW5TY3JhdGNoKSk7XHJcblx0XHRyZXR1cm4gTWF0aC5hdGFuMihzaW5lLCBjb3NpbmUpO1xyXG5cdH1cclxuXHJcblx0c3RhdGljIG1vc3RPcnRob2dvbmFsQXhpcyhjYXJ0ZXNpYW46IFZlY3RvcjMsIHJlc3VsdDogVmVjdG9yMyk6IFZlY3RvcjMge1xyXG5cdFx0Y29uc3QgZiA9IFZlY3RvcjMubm9ybWFsaXplKGNhcnRlc2lhbiwgbW9zdE9ydGhvZ29uYWxBeGlzU2NyYXRjaCk7XHJcblx0XHRWZWN0b3IzLmFicyhmLCBmKTtcclxuXHJcblx0XHRpZiAoZi54IDw9IGYueSkge1xyXG5cdFx0XHRpZiAoZi54IDw9IGYueikge1xyXG5cdFx0XHRcdHJlc3VsdCA9IFZlY3RvcjMuY2xvbmUoVmVjdG9yMy5VTklUX1gsIHJlc3VsdCk7XHJcblx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0cmVzdWx0ID0gVmVjdG9yMy5jbG9uZShWZWN0b3IzLlVOSVRfWiwgcmVzdWx0KTtcclxuXHRcdFx0fVxyXG5cdFx0fSBlbHNlIGlmIChmLnkgPD0gZi56KSB7XHJcblx0XHRcdHJlc3VsdCA9IFZlY3RvcjMuY2xvbmUoVmVjdG9yMy5VTklUX1ksIHJlc3VsdCk7XHJcblx0XHR9IGVsc2Uge1xyXG5cdFx0XHRyZXN1bHQgPSBWZWN0b3IzLmNsb25lKFZlY3RvcjMuVU5JVF9aLCByZXN1bHQpO1xyXG5cdFx0fVxyXG5cclxuXHRcdHJldHVybiByZXN1bHQ7XHJcblx0fVxyXG5cclxuXHRzdGF0aWMgcHJvamVjdFZlY3RvcihhOiBWZWN0b3IzLCBiOiBWZWN0b3IzLCByZXN1bHQ6IFZlY3RvcjMpOiBWZWN0b3IzIHtcclxuXHRcdGNvbnN0IHNjYWxhciA9IFZlY3RvcjMuZG90KGEsIGIpIC8gVmVjdG9yMy5kb3QoYiwgYik7XHJcblx0XHRyZXR1cm4gVmVjdG9yMy5tdWx0aXBseUJ5U2NhbGFyKGIsIHNjYWxhciwgcmVzdWx0KTtcclxuXHR9XHJcblxyXG5cdHN0YXRpYyBlcXVhbHMobGVmdDogVmVjdG9yMywgcmlnaHQ6IFZlY3RvcjMpOiBib29sZWFuIHtcclxuXHRcdHJldHVybiAoXHJcblx0XHRcdGxlZnQgPT09IHJpZ2h0IHx8XHJcblx0XHRcdChkZWZpbmVkKGxlZnQpICYmIGRlZmluZWQocmlnaHQpICYmIGxlZnQueCA9PT0gcmlnaHQueCAmJiBsZWZ0LnkgPT09IHJpZ2h0LnkgJiYgbGVmdC56ID09PSByaWdodC56KVxyXG5cdFx0KTtcclxuXHR9XHJcblxyXG5cdC8qKlxyXG5cdCAqIEBwcml2YXRlXHJcblx0ICovXHJcblx0c3RhdGljIGVxdWFsc0FycmF5KGNhcnRlc2lhbjogVmVjdG9yMywgYXJyYXk6IG51bWJlcltdLCBvZmZzZXQ6IG51bWJlcik6IGJvb2xlYW4ge1xyXG5cdFx0cmV0dXJuIGNhcnRlc2lhbi54ID09PSBhcnJheVtvZmZzZXRdICYmIGNhcnRlc2lhbi55ID09PSBhcnJheVtvZmZzZXQgKyAxXSAmJiBjYXJ0ZXNpYW4ueiA9PT0gYXJyYXlbb2Zmc2V0ICsgMl07XHJcblx0fVxyXG5cclxuXHRzdGF0aWMgZXF1YWxzRXBzaWxvbihsZWZ0OiBWZWN0b3IzLCByaWdodDogVmVjdG9yMywgcmVsYXRpdmVFcHNpbG9uID0gMCwgYWJzb2x1dGVFcHNpbG9uID0gMCk6IGJvb2xlYW4ge1xyXG5cdFx0cmV0dXJuIChcclxuXHRcdFx0bGVmdCA9PT0gcmlnaHQgfHxcclxuXHRcdFx0KGRlZmluZWQobGVmdCkgJiZcclxuXHRcdFx0XHRkZWZpbmVkKHJpZ2h0KSAmJlxyXG5cdFx0XHRcdEdNYXRoLmVxdWFsc0Vwc2lsb24obGVmdC54LCByaWdodC54LCByZWxhdGl2ZUVwc2lsb24sIGFic29sdXRlRXBzaWxvbikgJiZcclxuXHRcdFx0XHRHTWF0aC5lcXVhbHNFcHNpbG9uKGxlZnQueSwgcmlnaHQueSwgcmVsYXRpdmVFcHNpbG9uLCBhYnNvbHV0ZUVwc2lsb24pICYmXHJcblx0XHRcdFx0R01hdGguZXF1YWxzRXBzaWxvbihsZWZ0LnosIHJpZ2h0LnosIHJlbGF0aXZlRXBzaWxvbiwgYWJzb2x1dGVFcHNpbG9uKSlcclxuXHRcdCk7XHJcblx0fVxyXG5cclxuXHRzdGF0aWMgY3Jvc3MobGVmdDogVmVjdG9yMywgcmlnaHQ6IFZlY3RvcjMsIHJlc3VsdDogVmVjdG9yMyk6IFZlY3RvcjMge1xyXG5cdFx0Y29uc3QgbGVmdFggPSBsZWZ0Lng7XHJcblx0XHRjb25zdCBsZWZ0WSA9IGxlZnQueTtcclxuXHRcdGNvbnN0IGxlZnRaID0gbGVmdC56O1xyXG5cdFx0Y29uc3QgcmlnaHRYID0gcmlnaHQueDtcclxuXHRcdGNvbnN0IHJpZ2h0WSA9IHJpZ2h0Lnk7XHJcblx0XHRjb25zdCByaWdodFogPSByaWdodC56O1xyXG5cclxuXHRcdGNvbnN0IHggPSBsZWZ0WSAqIHJpZ2h0WiAtIGxlZnRaICogcmlnaHRZO1xyXG5cdFx0Y29uc3QgeSA9IGxlZnRaICogcmlnaHRYIC0gbGVmdFggKiByaWdodFo7XHJcblx0XHRjb25zdCB6ID0gbGVmdFggKiByaWdodFkgLSBsZWZ0WSAqIHJpZ2h0WDtcclxuXHJcblx0XHRyZXN1bHQueCA9IHg7XHJcblx0XHRyZXN1bHQueSA9IHk7XHJcblx0XHRyZXN1bHQueiA9IHo7XHJcblx0XHRyZXR1cm4gcmVzdWx0O1xyXG5cdH1cclxuXHJcblx0c3RhdGljIG1pZHBvaW50ID0gZnVuY3Rpb24gKGxlZnQ6IFZlY3RvcjMsIHJpZ2h0OiBWZWN0b3IzLCByZXN1bHQ6IFZlY3RvcjMpOiBWZWN0b3IzIHtcclxuXHRcdHJlc3VsdC54ID0gKGxlZnQueCArIHJpZ2h0LngpICogMC41O1xyXG5cdFx0cmVzdWx0LnkgPSAobGVmdC55ICsgcmlnaHQueSkgKiAwLjU7XHJcblx0XHRyZXN1bHQueiA9IChsZWZ0LnogKyByaWdodC56KSAqIDAuNTtcclxuXHJcblx0XHRyZXR1cm4gcmVzdWx0O1xyXG5cdH07XHJcbn1cclxuY29uc3QgZGlzdGFuY2VTY3JhdGNoID0gbmV3IFZlY3RvcjMoKTtcclxuY29uc3QgbGVycFNjcmF0Y2ggPSBuZXcgVmVjdG9yMygpO1xyXG5jb25zdCBhbmdsZUJldHdlZW5TY3JhdGNoID0gbmV3IFZlY3RvcjMoKTtcclxuY29uc3QgYW5nbGVCZXR3ZWVuU2NyYXRjaDIgPSBuZXcgVmVjdG9yMygpO1xyXG5jb25zdCBtb3N0T3J0aG9nb25hbEF4aXNTY3JhdGNoID0gbmV3IFZlY3RvcjMoKTtcclxuZXhwb3J0IGRlZmF1bHQgVmVjdG9yMztcclxuIiwiaW1wb3J0IHsgVmVydGV4Rm9ybWF0IH0gZnJvbSBcIi4uL2NvcmUvV2ViR1BVQ29uc3RhbnRcIjtcbmltcG9ydCBWZWN0b3IyIGZyb20gXCIuLi9tYXRoL1ZlY3RvcjJcIjtcbmltcG9ydCBWZWN0b3IzIGZyb20gXCIuLi9tYXRoL1ZlY3RvcjNcIjtcbmltcG9ydCBCdWZmZXIgZnJvbSBcIi4uL3JlbmRlci9CdWZmZXJcIjtcblxuZXhwb3J0IGNsYXNzIEF0dHJpYnV0ZSB7XG5cdHB1YmxpYyBvZmZzZXQ6IG51bWJlcjtcblx0cHVibGljIHNoYWRlckxvY2F0aW9uOiBudW1iZXI7XG5cdHB1YmxpYyB0eXBlOiBzdHJpbmc7XG5cdHB1YmxpYyBmb3JtYXQ6IHN0cmluZztcblx0cHVibGljIGF0dHJpYnV0ZUJ5dGVTaXplOiBudW1iZXI7XG5cdHB1YmxpYyBhdHRyaWJ1dGVUeXBlOiBBdHRyaWJ1dGVUeXBlO1xuXHRwdWJsaWMgZGlydHk6IGJvb2xlYW47XG5cdHB1YmxpYyBzdGF0aWMgdjMgPSBuZXcgVmVjdG9yMygpO1xuXHRwdWJsaWMgc3RhdGljIHYyID0gbmV3IFZlY3RvcjIoKTtcblx0Y29uc3RydWN0b3IocHVibGljIG5hbWU6IHN0cmluZywgcHVibGljIHZhbHVlOiBBcnJheTxudW1iZXI+LCBwdWJsaWMgaXRlbVNpemU6IG51bWJlcikge1xuXHRcdHRoaXMubmFtZSA9IG5hbWU7XG5cdFx0dGhpcy5vZmZzZXQgPSAwO1xuXHRcdHRoaXMuc2hhZGVyTG9jYXRpb24gPSAwO1xuXHRcdHRoaXMuYXR0cmlidXRlVHlwZSA9IEF0dHJpYnV0ZVR5cGUuYXR0cmlidXRlO1xuXHRcdHRoaXMuZGlydHkgPSB0cnVlO1xuXHR9XG5cdGdldEdQVUF0dHJpYnV0ZSgpOiBBcnJheTxHUFVBdHRyaWJ1dGU+IHtcblx0XHRyZXR1cm4gW1xuXHRcdFx0e1xuXHRcdFx0XHRzaGFkZXJMb2NhdGlvbjogdGhpcy5zaGFkZXJMb2NhdGlvbixcblx0XHRcdFx0Zm9ybWF0OiB0aGlzLmZvcm1hdCxcblx0XHRcdFx0b2Zmc2V0OiB0aGlzLm9mZnNldFxuXHRcdFx0fVxuXHRcdF07XG5cdH1cblx0ZGVzdHJveSgpIHtcblx0XHR0aGlzLnZhbHVlID0gW107XG5cdH1cblx0YXBwbHlNYXRyaXgzKG1hdHJpeDMpIHtcblx0XHRpZiAodGhpcy5pdGVtU2l6ZSA9PT0gMikge1xuXHRcdFx0Zm9yIChsZXQgaSA9IDAsIGwgPSB0aGlzLnZhbHVlLmxlbmd0aCAvIHRoaXMuaXRlbVNpemU7IGkgPCBsOyBpKyspIHtcblx0XHRcdFx0QXR0cmlidXRlLnYyLmZyb21CdWZmZXJBdHRyaWJ1dGUodGhpcywgaSk7XG5cdFx0XHRcdEF0dHJpYnV0ZS52Mi5hcHBseU1hdHJpeDMobWF0cml4Myk7XG5cdFx0XHRcdHRoaXMuc2V0WFkoaSwgQXR0cmlidXRlLnYyLngsIEF0dHJpYnV0ZS52Mi55KTtcblx0XHRcdH1cblx0XHR9IGVsc2UgaWYgKHRoaXMuaXRlbVNpemUgPT09IDMpIHtcblx0XHRcdGZvciAobGV0IGkgPSAwLCBsID0gdGhpcy52YWx1ZS5sZW5ndGggLyB0aGlzLml0ZW1TaXplOyBpIDwgbDsgaSsrKSB7XG5cdFx0XHRcdEF0dHJpYnV0ZS52My5mcm9tQnVmZmVyQXR0cmlidXRlKHRoaXMsIGkpO1xuXHRcdFx0XHRBdHRyaWJ1dGUudjMuYXBwbHlNYXRyaXgzKG1hdHJpeDMpO1xuXHRcdFx0XHR0aGlzLnNldFhZWihpLCBBdHRyaWJ1dGUudjMueCwgQXR0cmlidXRlLnYzLnksIEF0dHJpYnV0ZS52My56KTtcblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblx0YXBwbHlNYXRyaXg0KG1hdHJpeDQpIHtcblx0XHRmb3IgKGxldCBpID0gMCwgbCA9IHRoaXMudmFsdWUubGVuZ3RoIC8gdGhpcy5pdGVtU2l6ZTsgaSA8IGw7IGkrKykge1xuXHRcdFx0QXR0cmlidXRlLnYzLmZyb21CdWZmZXJBdHRyaWJ1dGUodGhpcywgaSk7XG5cdFx0XHRBdHRyaWJ1dGUudjMuYXBwbHlNYXRyaXg0KG1hdHJpeDQpO1xuXHRcdFx0dGhpcy5zZXRYWVooaSwgQXR0cmlidXRlLnYzLngsIEF0dHJpYnV0ZS52My55LCBBdHRyaWJ1dGUudjMueik7XG5cdFx0fVxuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cdHNldFgoaW5kZXgsIHgpIHtcblx0XHR0aGlzLnZhbHVlW2luZGV4ICogdGhpcy5pdGVtU2l6ZV0gPSB4O1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cdGdldFgoaW5kZXgpIHtcblx0XHRjb25zdCB4ID0gdGhpcy52YWx1ZVtpbmRleCAqIHRoaXMuaXRlbVNpemVdO1xuXHRcdHJldHVybiB4O1xuXHR9XG5cdHNldFkoaW5kZXgsIHkpIHtcblx0XHR0aGlzLnZhbHVlW2luZGV4ICogdGhpcy5pdGVtU2l6ZSArIDFdID0geTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXHRnZXRZKGluZGV4KSB7XG5cdFx0Y29uc3QgeSA9IHRoaXMudmFsdWVbaW5kZXggKiB0aGlzLml0ZW1TaXplICsgMV07XG5cdFx0cmV0dXJuIHk7XG5cdH1cblx0c2V0WihpbmRleCwgeikge1xuXHRcdHRoaXMudmFsdWVbaW5kZXggKiB0aGlzLml0ZW1TaXplICsgMl0gPSB6O1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cdGdldFooaW5kZXgpIHtcblx0XHRjb25zdCB6ID0gdGhpcy52YWx1ZVtpbmRleCAqIHRoaXMuaXRlbVNpemUgKyAyXTtcblx0XHRyZXR1cm4gejtcblx0fVxuXHRnZXRXKGluZGV4KSB7XG5cdFx0Y29uc3QgdyA9IHRoaXMudmFsdWVbaW5kZXggKiB0aGlzLml0ZW1TaXplICsgM107XG5cdFx0cmV0dXJuIHc7XG5cdH1cblx0c2V0WFkoaW5kZXgsIHgsIHkpIHtcblx0XHRpbmRleCAqPSB0aGlzLml0ZW1TaXplO1xuXHRcdHRoaXMudmFsdWVbaW5kZXggKyAwXSA9IHg7XG5cdFx0dGhpcy52YWx1ZVtpbmRleCArIDFdID0geTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXHRzZXRYWVooaW5kZXgsIHgsIHksIHopIHtcblx0XHRpbmRleCAqPSB0aGlzLml0ZW1TaXplO1xuXHRcdHRoaXMudmFsdWVbaW5kZXggKyAwXSA9IHg7XG5cdFx0dGhpcy52YWx1ZVtpbmRleCArIDFdID0geTtcblx0XHR0aGlzLnZhbHVlW2luZGV4ICsgMl0gPSB6O1xuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cdHNldFhZWlcoaW5kZXgsIHgsIHksIHosIHcpIHtcblx0XHRpbmRleCAqPSB0aGlzLml0ZW1TaXplO1xuXHRcdHRoaXMudmFsdWVbaW5kZXggKyAwXSA9IHg7XG5cdFx0dGhpcy52YWx1ZVtpbmRleCArIDFdID0geTtcblx0XHR0aGlzLnZhbHVlW2luZGV4ICsgMl0gPSB6O1xuXHRcdHRoaXMudmFsdWVbaW5kZXggKyAzXSA9IHc7XG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cbn1cblxuZXhwb3J0IGNsYXNzIEludGVybGVhdmVkQXR0cmlidXRlIHtcblx0cHVibGljIG5hbWVzOiBzdHJpbmdbXTtcblx0cHVibGljIHZhbHVlOiBBcnJheTxudW1iZXI+O1xuXHRwdWJsaWMgaXRlbVNpemVzOiBudW1iZXJbXTtcblx0cHVibGljIGZvcm1hdDogc3RyaW5nO1xuXHRwdWJsaWMgYnl0ZVNpemU6IG51bWJlcjtcblx0cHVibGljIGF0dHJpYnV0ZVR5cGU6IEF0dHJpYnV0ZVR5cGU7XG5cdHB1YmxpYyBkaXJ0eTogYm9vbGVhbjtcblx0Y29uc3RydWN0b3IobmFtZXM6IHN0cmluZ1tdLCB2YWx1ZTogQXJyYXk8bnVtYmVyPiwgaXRlbVNpemVzOiBudW1iZXJbXSkge1xuXHRcdHRoaXMubmFtZXMgPSBuYW1lcztcblx0XHR0aGlzLml0ZW1TaXplcyA9IGl0ZW1TaXplcztcblx0XHR0aGlzLnZhbHVlID0gdmFsdWU7XG5cdFx0dGhpcy5hdHRyaWJ1dGVUeXBlID0gQXR0cmlidXRlVHlwZS5pbnRlcmxlYXZlZEF0dHJpYnV0ZTtcblx0XHR0aGlzLmRpcnR5ID0gdHJ1ZTtcblx0fVxuXHRnZXRHUFVBdHRyaWJ1dGUoKTogQXJyYXk8R1BVQXR0cmlidXRlPiB7XG5cdFx0Y29uc3QgcmVzdWx0ID0gW107XG5cdFx0dGhpcy5pdGVtU2l6ZXMucmVkdWNlKCh0b3RhbCwgY3VycmVudCwgaW5kZXgpID0+IHtcblx0XHRcdHJlc3VsdC5wdXNoKHtcblx0XHRcdFx0c2hhZGVyTG9jYXRpb246IGluZGV4LFxuXHRcdFx0XHRmb3JtYXQ6IGN1cnJlbnQgPT0gMSA/IGAke3RoaXMuZm9ybWF0fWAgOiBgJHt0aGlzLmZvcm1hdH14JHtjdXJyZW50fWAsXG5cdFx0XHRcdG9mZnNldDogdG90YWwgKiB0aGlzLmJ5dGVTaXplXG5cdFx0XHR9KTtcblx0XHRcdHJldHVybiAodG90YWwgKz0gY3VycmVudCk7XG5cdFx0fSwgMCk7XG5cdFx0cmV0dXJuIHJlc3VsdDtcblx0fVxuXHRkZXN0cm95KCkge1xuXHRcdHRoaXMudmFsdWUgPSBudWxsO1xuXHRcdHRoaXMubmFtZXMgPSBudWxsO1xuXHRcdHRoaXMuaXRlbVNpemVzID0gbnVsbDtcblx0fVxufVxuZXhwb3J0IGNsYXNzIEZsb2F0MzJBdHRyaWJ1dGUgZXh0ZW5kcyBBdHRyaWJ1dGUge1xuXHRjb25zdHJ1Y3RvcihuYW1lOiBzdHJpbmcsIHZhbHVlOiBBcnJheTxudW1iZXI+LCBpdGVtU2l6ZTogbnVtYmVyKSB7XG5cdFx0c3VwZXIobmFtZSwgdmFsdWUsIGl0ZW1TaXplKTtcblx0XHRjb25zdCB7IGZvcm1hdCwgdG90YWxCeXRlU2l6ZSB9ID0gZ2V0QXR0cmlidXRlRm9ybWF0KFZlcnRleEZvcm1hdC5GbG9hdDMyLCBpdGVtU2l6ZSk7XG5cdFx0dGhpcy5mb3JtYXQgPSBmb3JtYXQ7XG5cdFx0dGhpcy5hdHRyaWJ1dGVCeXRlU2l6ZSA9IHRvdGFsQnl0ZVNpemU7XG5cdH1cbn1cbmV4cG9ydCBjbGFzcyBJbnRlcmxlYXZlZEZsb2F0MzJBdHRyaWJ1dGUgZXh0ZW5kcyBJbnRlcmxlYXZlZEF0dHJpYnV0ZSB7XG5cdGNvbnN0cnVjdG9yKG5hbWVzOiBzdHJpbmdbXSwgdmFsdWU6IEFycmF5PG51bWJlcj4sIGl0ZW1TaXplczogbnVtYmVyW10pIHtcblx0XHRzdXBlcihuYW1lcywgdmFsdWUsIGl0ZW1TaXplcyk7XG5cdFx0dGhpcy5mb3JtYXQgPSBWZXJ0ZXhGb3JtYXQuRmxvYXQzMjtcblx0XHR0aGlzLmJ5dGVTaXplID0gRmxvYXQzMkFycmF5LkJZVEVTX1BFUl9FTEVNRU5UO1xuXHR9XG59XG5leHBvcnQgY2xhc3MgQnVmZmVyRmxvYXQzMkF0dHJpYnV0ZSBleHRlbmRzIEludGVybGVhdmVkRmxvYXQzMkF0dHJpYnV0ZSB7XG5cdHB1YmxpYyBidWZmZXI6IEJ1ZmZlcjtcblx0Y29uc3RydWN0b3IobmFtZXM6IHN0cmluZ1tdLCBidWZmZXI6IEJ1ZmZlciwgaXRlbVNpemVzOiBudW1iZXJbXSkge1xuXHRcdHN1cGVyKG5hbWVzLCB1bmRlZmluZWQsIGl0ZW1TaXplcyk7XG5cdFx0dGhpcy5idWZmZXIgPSBidWZmZXI7XG5cdH1cbn1cbmV4cG9ydCBlbnVtIEF0dHJpYnV0ZVR5cGUge1xuXHRpbnRlcmxlYXZlZEF0dHJpYnV0ZSA9IDAsXG5cdGF0dHJpYnV0ZSA9IDFcbn1cbmV4cG9ydCB0eXBlIEdQVUF0dHJpYnV0ZSA9IHtcblx0c2hhZGVyTG9jYXRpb246IG51bWJlcjtcblx0Zm9ybWF0OiBzdHJpbmc7XG5cdG9mZnNldDogbnVtYmVyO1xufTtcbmZ1bmN0aW9uIGdldEF0dHJpYnV0ZUZvcm1hdCh0eXBlOiBzdHJpbmcsIGl0ZW1TaXplOiBudW1iZXIpIHtcblx0Y29uc3Qga2V5ID0gYCR7dHlwZX14JHtpdGVtU2l6ZX1gO1xuXHRyZXR1cm4ge1xuXHRcdFtWZXJ0ZXhGb3JtYXQuRmxvYXQzMl06IHtcblx0XHRcdGZvcm1hdDogXCJmbG9hdDMyXCIsXG5cdFx0XHR0b3RhbEJ5dGVTaXplOiBGbG9hdDMyQXJyYXkuQllURVNfUEVSX0VMRU1FTlQgKiBpdGVtU2l6ZSxcblx0XHRcdGJ5dGVTaXplOiBGbG9hdDMyQXJyYXkuQllURVNfUEVSX0VMRU1FTlRcblx0XHR9LFxuXHRcdFtWZXJ0ZXhGb3JtYXQuRmxvYXQzMngyXToge1xuXHRcdFx0Zm9ybWF0OiBcImZsb2F0MzJ4MlwiLFxuXHRcdFx0dG90YWxCeXRlU2l6ZTogRmxvYXQzMkFycmF5LkJZVEVTX1BFUl9FTEVNRU5UICogaXRlbVNpemUsXG5cdFx0XHRieXRlU2l6ZTogRmxvYXQzMkFycmF5LkJZVEVTX1BFUl9FTEVNRU5UXG5cdFx0fSxcblx0XHRbVmVydGV4Rm9ybWF0LkZsb2F0MzJ4M106IHtcblx0XHRcdGZvcm1hdDogXCJmbG9hdDMyeDNcIixcblx0XHRcdHRvdGFsQnl0ZVNpemU6IEZsb2F0MzJBcnJheS5CWVRFU19QRVJfRUxFTUVOVCAqIGl0ZW1TaXplLFxuXHRcdFx0Ynl0ZVNpemU6IEZsb2F0MzJBcnJheS5CWVRFU19QRVJfRUxFTUVOVFxuXHRcdH0sXG5cdFx0W1ZlcnRleEZvcm1hdC5GbG9hdDMyeDRdOiB7XG5cdFx0XHRmb3JtYXQ6IFwiZmxvYXQzMng0XCIsXG5cdFx0XHR0b3RhbEJ5dGVTaXplOiBGbG9hdDMyQXJyYXkuQllURVNfUEVSX0VMRU1FTlQgKiBpdGVtU2l6ZSxcblx0XHRcdGJ5dGVTaXplOiBGbG9hdDMyQXJyYXkuQllURVNfUEVSX0VMRU1FTlRcblx0XHR9XG5cdH1ba2V5XTtcbn1cbiIsImltcG9ydCB7IEJpbmRHcm91cENhY2hlT3B0aW9ucyB9IGZyb20gXCIuLi9jb3JlL1dlYkdQVVR5cGVzXCI7XG5jb25zdCBiaW5kR3JvdXBDYWNoZSA9IG5ldyBNYXAoKTtcbmNsYXNzIEJpbmRHcm91cCB7XG5cdGRldmljZTogR1BVRGV2aWNlO1xuXHRncHVCaW5kR3JvdXA6IEdQVUJpbmRHcm91cDtcblx0bGFiZWw6IHN0cmluZztcblx0aW5kZXg6IG51bWJlcjtcblx0ZGlydHk6IGJvb2xlYW47XG5cdG9mZnNldD86IG51bWJlcjtcblx0Ly8gY29uc3QgdW5pZm9ybUJ5dGVzID0gNSAqIEZsb2F0MzJBcnJheS5CWVRFU19QRVJfRUxFTUVOVDtcblx0Ly8gY29uc3QgYWxpZ25lZFNpemVCeXRlcyA9IE1hdGguY2VpbCh1bmlmb3JtQnl0ZXMgLyAyNTYpICogMjU2O1xuXHQvLyBjb25zdCBhbGlnbmVkU2l6ZSA9YWxpZ25lZFNpemVCeXRlcyAvIEZsb2F0MzJBcnJheS5CWVRFU19QRVJfRUxFTUVOVDtcblx0YWxpZ25lZFNpemU/OiBudW1iZXI7XG5cdG1heE9mZnNldD86IG51bWJlcjtcblx0ZHluYW1pYz86IGJvb2xlYW47XG5cdGNvbnN0cnVjdG9yKG9wdGlvbnM6IEJpbmRHcm91cENhY2hlT3B0aW9ucykge1xuXHRcdHRoaXMuaW5kZXggPSBvcHRpb25zLmluZGV4IHx8IDA7XG5cdFx0dGhpcy5vZmZzZXQgPSBvcHRpb25zLm9mZnNldCA/PyAwO1xuXHRcdHRoaXMuYWxpZ25lZFNpemUgPSBvcHRpb25zLmFsaWduZWRTaXplID8/IDA7XG5cdFx0dGhpcy5tYXhPZmZzZXQgPSBvcHRpb25zLm1heE9mZnNldCA/PyAwO1xuXHRcdHRoaXMuZHluYW1pYyA9IG9wdGlvbnMuZHluYW1pYyA/PyBmYWxzZTtcblx0XHR0aGlzLmdwdUJpbmRHcm91cCA9IG9wdGlvbnMuZGV2aWNlLmNyZWF0ZUJpbmRHcm91cCh7XG5cdFx0XHRsYWJlbDogb3B0aW9ucy5sYWJlbCxcblx0XHRcdGxheW91dDogb3B0aW9ucy5sYXlvdXQuZ3B1QmluZEdyb3VwTGF5b3V0LFxuXHRcdFx0ZW50cmllczogb3B0aW9ucy5lbnRpcmVzLm1hcCgoZW50aXR5KSA9PiAoe1xuXHRcdFx0XHRiaW5kaW5nOiBlbnRpdHkuYmluZGluZyxcblx0XHRcdFx0cmVzb3VyY2U6IGVudGl0eS5yZXNvdXJjZVxuXHRcdFx0fSkpXG5cdFx0fSk7XG5cdH1cblx0YmluZChwYXNzRW5jb2RlcjogR1BVUmVuZGVyUGFzc0VuY29kZXIgfCBHUFVDb21wdXRlUGFzc0VuY29kZXIpIHtcblx0XHQvLyBkeW5hbWljIHVuaWZvcm1zIG11c3QgYmluZCBtdWx0aXBsZSB0aW1lc1xuXHRcdGlmICh0aGlzLmR5bmFtaWMpIHtcblx0XHRcdGNvbnN0IGR5bmFtaWNPZmZzZXRzID0gWzBdO1xuXHRcdFx0ZHluYW1pY09mZnNldHNbMF0gPSB0aGlzLm9mZnNldCAqIHRoaXMuYWxpZ25lZFNpemU7XG5cdFx0XHR0aGlzLm9mZnNldCA9ICsrdGhpcy5vZmZzZXQgPCB0aGlzLm1heE9mZnNldCA/IHRoaXMub2Zmc2V0IDogMDtcblx0XHRcdHBhc3NFbmNvZGVyLnNldEJpbmRHcm91cCh0aGlzLmluZGV4LCB0aGlzLmdwdUJpbmRHcm91cCwgZHluYW1pY09mZnNldHMpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRwYXNzRW5jb2Rlci5zZXRCaW5kR3JvdXAodGhpcy5pbmRleCwgdGhpcy5ncHVCaW5kR3JvdXApO1xuXHRcdH1cblx0fVxuXHRkZXN0cm95KCkge1xuXHRcdHRoaXMuZ3B1QmluZEdyb3VwID0gdW5kZWZpbmVkO1xuXHRcdHRoaXMuZGV2aWNlID0gdW5kZWZpbmVkO1xuXHR9XG5cdHN0YXRpYyBnZXRCaW5kR3JvdXBGcm9tQ2FjaGUob3B0aW9uczogQmluZEdyb3VwQ2FjaGVPcHRpb25zKTogQmluZEdyb3VwIHtcblx0XHRpZiAoYmluZEdyb3VwQ2FjaGUuaGFzKG9wdGlvbnMubGFiZWwpKSB7XG5cdFx0XHRyZXR1cm4gYmluZEdyb3VwQ2FjaGUuZ2V0KG9wdGlvbnMubGFiZWwpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRjb25zdCBiaW5kR3JvdXAgPSBuZXcgQmluZEdyb3VwKG9wdGlvbnMpO1xuXHRcdFx0YmluZEdyb3VwQ2FjaGUuc2V0KG9wdGlvbnMubGFiZWwsIGJpbmRHcm91cCk7XG5cdFx0XHRyZXR1cm4gYmluZEdyb3VwO1xuXHRcdH1cblx0fVxuXHRzdGF0aWMgcmVtb3ZlQmluZEdyb3VwRnJvbUNhY2hlKGJpbmRHcm91cDogQmluZEdyb3VwKSB7XG5cdFx0YmluZEdyb3VwQ2FjaGUuZGVsZXRlKGJpbmRHcm91cCk7XG5cdH1cbn1cblxuZXhwb3J0IGRlZmF1bHQgQmluZEdyb3VwO1xuIiwiaW1wb3J0IHsgQmluZEdyb3VwRW50aXR5T3B0aW9ucyB9IGZyb20gXCIuLi9jb3JlL1dlYkdQVVR5cGVzXCI7XG5leHBvcnQgZGVmYXVsdCBjbGFzcyBCaW5kR3JvdXBFbnRpdHkge1xuXHRiaW5kaW5nOiBudW1iZXI7XG5cdHJlc291cmNlOiBHUFVCaW5kaW5nUmVzb3VyY2U7XG5cdGNvbnN0cnVjdG9yKG9wdGlvbnM6IEJpbmRHcm91cEVudGl0eU9wdGlvbnMpIHtcblx0XHR0aGlzLmJpbmRpbmcgPSBvcHRpb25zLmJpbmRpbmc7XG5cdFx0dGhpcy5yZXNvdXJjZSA9IG9wdGlvbnMucmVzb3VyY2U7XG5cdH1cblx0cHVibGljIGdldEdQVUdyb3VwRW50aXR5KCkge1xuXHRcdHJldHVybiB7XG5cdFx0XHRiaW5kaW5nOiB0aGlzLmJpbmRpbmcsXG5cdFx0XHRyZXNvdXJjZTogdGhpcy5yZXNvdXJjZVxuXHRcdH07XG5cdH1cbn1cbiIsImltcG9ydCB7IFBhc3NUeXBlIH0gZnJvbSBcIi4uL2NvcmUvV2ViR1BVVHlwZXNcIjtcbmltcG9ydCBBdHRhY2htZW50IGZyb20gXCIuL0F0dGFjaG1lbnRcIjtcbmltcG9ydCBRdWVyeVNldCBmcm9tIFwiLi9RdWVyeVNldFwiO1xuaW1wb3J0IFRleHR1cmUgZnJvbSBcIi4vVGV4dHVyZVwiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBSZW5kZXJUYXJnZXQge1xuXHRwdWJsaWMgZGV2aWNlOiBHUFVEZXZpY2U7XG5cdHB1YmxpYyBjb21tYW5kRW5jb2RlcjogR1BVQ29tbWFuZEVuY29kZXIgfCBudWxsO1xuXHRwcml2YXRlIF9yZW5kZXJQYXNzRGVzY3JpcHRvcjogR1BVUmVuZGVyUGFzc0Rlc2NyaXB0b3I7XG5cdHByaXZhdGUgcmVuZGVyRW5jb2RlcjogR1BVUmVuZGVyUGFzc0VuY29kZXI7XG5cdHByaXZhdGUgY29tcHV0ZUVuY29kZXI6IEdQVUNvbXB1dGVQYXNzRW5jb2Rlcjtcblx0Y29uc3RydWN0b3IoXG5cdFx0cHVibGljIHR5cGU6IFBhc3NUeXBlLFxuXHRcdHB1YmxpYyBjb2xvckF0dGFjaG1lbnRzOiBBdHRhY2htZW50W10sXG5cdFx0cHVibGljIGRlcHRoQXR0YWNobWVudD86IEF0dGFjaG1lbnQsXG5cdFx0cHVibGljIHN0ZW5jaWxBdHRhY2htZW50PzogQXR0YWNobWVudCxcblx0XHRwdWJsaWMgcXVlcnlTZXQ/OiBRdWVyeVNldCxcblx0XHRwdWJsaWMgZml4ZWRTaXplPzogYm9vbGVhblxuXHQpIHtcblx0XHR0aGlzLnJlbmRlckVuY29kZXIgPSB1bmRlZmluZWQ7XG5cdFx0dGhpcy5jb21wdXRlRW5jb2RlciA9IHVuZGVmaW5lZDtcblx0XHR0aGlzLl9yZW5kZXJQYXNzRGVzY3JpcHRvciA9IHVuZGVmaW5lZDtcblx0XHR0aGlzLmNvbW1hbmRFbmNvZGVyID0gdW5kZWZpbmVkO1xuXHRcdHRoaXMuZGV2aWNlID0gdW5kZWZpbmVkO1xuXHRcdHRoaXMuZml4ZWRTaXplID0gZmFsc2U7XG5cdH1cblx0Z2V0IHJlbmRlclBhc3NEZXNjcmlwdG9yKCkge1xuXHRcdHRoaXMuX3JlbmRlclBhc3NEZXNjcmlwdG9yID0gdGhpcy5nZXRSZW5kZXJQYXNzRGVzY3JpcHRvcigpO1xuXHRcdHJldHVybiB0aGlzLl9yZW5kZXJQYXNzRGVzY3JpcHRvcjtcblx0fVxuXHRwdWJsaWMgZ2V0Q29sb3JUZXh0dXJlKGluZGV4ID0gMCk6IFRleHR1cmUge1xuXHRcdGNvbnN0IGNvbEF0dCA9IHRoaXMuY29sb3JBdHRhY2htZW50c1tpbmRleF07XG5cdFx0aWYgKGNvbEF0dCkge1xuXHRcdFx0cmV0dXJuIGNvbEF0dC50ZXh0dXJlIGFzIFRleHR1cmU7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHJldHVybiBudWxsO1xuXHRcdH1cblx0fVxuXHRwdWJsaWMgZ2V0RGVwdGhUZXh0dXJlKCk6IFRleHR1cmUge1xuXHRcdGlmICh0aGlzLmRlcHRoQXR0YWNobWVudCkge1xuXHRcdFx0cmV0dXJuIHRoaXMuZGVwdGhBdHRhY2htZW50LnRleHR1cmUgYXMgVGV4dHVyZTtcblx0XHR9XG5cdH1cblx0cHJpdmF0ZSBnZXRSZW5kZXJQYXNzRGVzY3JpcHRvcigpOiBHUFVSZW5kZXJQYXNzRGVzY3JpcHRvciB8IG51bGwge1xuXHRcdHRoaXMuZGVwdGhBdHRhY2htZW50Py50ZXh0dXJlPy51cGRhdGUodGhpcy5kZXZpY2UpO1xuXHRcdHRoaXM/LnF1ZXJ5U2V0Py51cGRhdGUodGhpcy5kZXZpY2UpO1xuXHRcdHJldHVybiB7XG5cdFx0XHQuLi4odGhpcy5jb2xvckF0dGFjaG1lbnRzICYmIHtcblx0XHRcdFx0Y29sb3JBdHRhY2htZW50czogdGhpcy5jb2xvckF0dGFjaG1lbnRzLm1hcCgoY29sb3JBdHRhY2htZW50KSA9PiB7XG5cdFx0XHRcdFx0Y29sb3JBdHRhY2htZW50Py50ZXh0dXJlPy51cGRhdGUgJiYgY29sb3JBdHRhY2htZW50Py50ZXh0dXJlPy51cGRhdGUodGhpcy5kZXZpY2UpO1xuXHRcdFx0XHRcdHJldHVybiB7XG5cdFx0XHRcdFx0XHR2aWV3OlxuXHRcdFx0XHRcdFx0XHQvLyDmmoLml7bov5nkuYjlhplcblx0XHRcdFx0XHRcdFx0Y29sb3JBdHRhY2htZW50Py50ZXh0dXJlVmlldz8uKCkgPz8gY29sb3JBdHRhY2htZW50LnRleHR1cmUudGV4dHVyZVZpZXcsXG5cdFx0XHRcdFx0XHRyZXNvbHZlVGFyZ2V0OlxuXHRcdFx0XHRcdFx0XHRjb2xvckF0dGFjaG1lbnQucmVzb2x2ZVRhcmdldCAhPSB1bmRlZmluZWRcblx0XHRcdFx0XHRcdFx0XHQ/IGNvbG9yQXR0YWNobWVudC5yZXNvbHZlVGFyZ2V0LnRleHR1cmVWaWV3XG5cdFx0XHRcdFx0XHRcdFx0OiB1bmRlZmluZWQsXG5cdFx0XHRcdFx0XHRjbGVhclZhbHVlOiBjb2xvckF0dGFjaG1lbnQudmFsdWUsXG5cdFx0XHRcdFx0XHRsb2FkT3A6IGNvbG9yQXR0YWNobWVudC5vcCxcblx0XHRcdFx0XHRcdHN0b3JlT3A6IGNvbG9yQXR0YWNobWVudC5zdG9yZU9wXG5cdFx0XHRcdFx0fSBhcyBHUFVSZW5kZXJQYXNzQ29sb3JBdHRhY2htZW50O1xuXHRcdFx0XHR9KVxuXHRcdFx0fSksXG5cdFx0XHQuLi4oKHRoaXMuZGVwdGhBdHRhY2htZW50IHx8IHRoaXMuc3RlbmNpbEF0dGFjaG1lbnQpICYmIHtcblx0XHRcdFx0ZGVwdGhTdGVuY2lsQXR0YWNobWVudDoge1xuXHRcdFx0XHRcdHZpZXc6IHRoaXMuZGVwdGhBdHRhY2htZW50Py50ZXh0dXJlPy50ZXh0dXJlVmlldyB8fCB1bmRlZmluZWQsXG5cdFx0XHRcdFx0ZGVwdGhMb2FkT3A6IHRoaXMuZGVwdGhBdHRhY2htZW50Py5vcCB8fCBcImNsZWFyXCIsXG5cdFx0XHRcdFx0ZGVwdGhDbGVhclZhbHVlOiB0aGlzLmRlcHRoQXR0YWNobWVudD8udmFsdWUgfHwgMS4wLFxuXHRcdFx0XHRcdGRlcHRoU3RvcmVPcDogdGhpcy5kZXB0aEF0dGFjaG1lbnQ/LnN0b3JlT3AgfHwgXCJzdG9yZVwiLFxuXHRcdFx0XHRcdGRlcHRoUmVhZE9ubHk6IHRoaXMuZGVwdGhBdHRhY2htZW50Py5yZWFkT25seSB8fCBmYWxzZVxuXHRcdFx0XHRcdC8vIHN0ZW5jaWxMb2FkT3A6IHRoaXMuc3RlbmNpbEF0dGFjaG1lbnQ/Lm9wIHx8IFwiY2xlYXJcIixcblx0XHRcdFx0XHQvLyBzdGVuY2lsQ2xlYXJWYWx1ZTogdGhpcy5zdGVuY2lsQXR0YWNobWVudD8udmFsdWUgfHwgMCxcblx0XHRcdFx0XHQvLyBzdGVuY2lsU3RvcmVPcDogdGhpcy5zdGVuY2lsQXR0YWNobWVudD8uc3RvcmVPcCB8fCBcInN0b3JlXCIsXG5cdFx0XHRcdH0gYXMgR1BVUmVuZGVyUGFzc0RlcHRoU3RlbmNpbEF0dGFjaG1lbnRcblx0XHRcdH0pLFxuXHRcdFx0Li4uKHRoaXMucXVlcnlTZXQgJiYgeyBvY2NsdXNpb25RdWVyeVNldDogdGhpcy5xdWVyeVNldC5ncHVRdWVyeVNldCB9KVxuXHRcdH07XG5cdH1cblxuXHRwdWJsaWMgYmVnaW5SZW5kZXJQYXNzKGRldmljZTogR1BVRGV2aWNlKSB7XG5cdFx0aWYgKCF0aGlzLmRldmljZSkgdGhpcy5kZXZpY2UgPSBkZXZpY2U7XG5cdFx0dGhpcy5jb21tYW5kRW5jb2RlciA9IHRoaXMuZGV2aWNlLmNyZWF0ZUNvbW1hbmRFbmNvZGVyKCk7XG5cdFx0dGhpcy5yZW5kZXJFbmNvZGVyID0gdGhpcy5jb21tYW5kRW5jb2Rlci5iZWdpblJlbmRlclBhc3ModGhpcy5yZW5kZXJQYXNzRGVzY3JpcHRvcik7XG5cdFx0cmV0dXJuIHRoaXMucmVuZGVyRW5jb2Rlcjtcblx0fVxuXHRwdWJsaWMgZW5kUmVuZGVyUGFzcygpIHtcblx0XHR0aGlzLnJlbmRlckVuY29kZXI/LmVuZCgpO1xuXHRcdHRoaXMuZGV2aWNlLnF1ZXVlLnN1Ym1pdChbdGhpcy5jb21tYW5kRW5jb2Rlci5maW5pc2goKV0pO1xuXHRcdHRoaXMuY29tbWFuZEVuY29kZXIgPSBudWxsO1xuXHRcdHRoaXMucmVuZGVyRW5jb2RlciA9IG51bGw7XG5cdH1cblx0cHVibGljIGJlZ2luQ29tcHV0ZVBhc3NFbmNvZGVyKGRldmljZTogR1BVRGV2aWNlKSB7XG5cdFx0aWYgKCF0aGlzLmRldmljZSkgdGhpcy5kZXZpY2UgPSBkZXZpY2U7XG5cdFx0dGhpcy5jb21tYW5kRW5jb2RlciA9IHRoaXMuZGV2aWNlLmNyZWF0ZUNvbW1hbmRFbmNvZGVyKCk7XG5cdFx0dGhpcy5jb21wdXRlRW5jb2RlciA9IHRoaXMuY29tbWFuZEVuY29kZXIuYmVnaW5Db21wdXRlUGFzcygpO1xuXHRcdHJldHVybiB0aGlzLmNvbXB1dGVFbmNvZGVyO1xuXHR9XG5cdHB1YmxpYyBlbmRDb21wdXRlUGFzc0VuY29kZXIoKSB7XG5cdFx0dGhpcy5jb21wdXRlRW5jb2Rlcj8uZW5kKCk7XG5cdFx0dGhpcy5kZXZpY2UucXVldWUuc3VibWl0KFt0aGlzLmNvbW1hbmRFbmNvZGVyLmZpbmlzaCgpXSk7XG5cdFx0dGhpcy5jb21tYW5kRW5jb2RlciA9IG51bGw7XG5cdFx0dGhpcy5yZW5kZXJFbmNvZGVyID0gbnVsbDtcblx0fVxuXHRwdWJsaWMgc2V0U2l6ZSh3aWR0aDogbnVtYmVyLCBoZWlnaHQ6IG51bWJlciwgZGVwdGggPSAxKSB7XG5cdFx0aWYgKHRoaXMuZml4ZWRTaXplKSByZXR1cm47XG5cdFx0dGhpcz8uZGVwdGhBdHRhY2htZW50Py50ZXh0dXJlPy5zZXRTaXplPy4od2lkdGgsIGhlaWdodCwgZGVwdGgpO1xuXHRcdHRoaXM/LmNvbG9yQXR0YWNobWVudHM/LmZvckVhY2g/LigoY29sb3JBdHRhY2htZW50KSA9PlxuXHRcdFx0Y29sb3JBdHRhY2htZW50Py50ZXh0dXJlPy5zZXRTaXplPy4od2lkdGgsIGhlaWdodCwgZGVwdGgpXG5cdFx0KTtcblx0fVxuXHRkZXN0cm95KCkge1xuXHRcdGlmICh0aGlzLmNvbG9yQXR0YWNobWVudHMpIHtcblx0XHRcdHRoaXMuY29sb3JBdHRhY2htZW50cy5mb3JFYWNoKChjb2xvckF0dGFjaG1lbnQpID0+IHtcblx0XHRcdFx0aWYgKGNvbG9yQXR0YWNobWVudC50ZXh0dXJlKSB7XG5cdFx0XHRcdFx0Y29sb3JBdHRhY2htZW50LnRleHR1cmUuZGVzdHJveSgpO1xuXHRcdFx0XHR9XG5cdFx0XHR9KTtcblx0XHR9XG5cdFx0aWYgKHRoaXMuZGVwdGhBdHRhY2htZW50LnRleHR1cmUpIHRoaXMuZGVwdGhBdHRhY2htZW50LnRleHR1cmUuZGVzdHJveSgpO1xuXHR9XG59XG4iLCJpbXBvcnQgZGVmYXVsdFZhbHVlIGZyb20gXCIuLi91dGlscy9kZWZhdWx0VmFsdWVcIjtcclxuaW1wb3J0IGRlZmluZWQgZnJvbSBcIi4uL3V0aWxzL2RlZmluZWRcIjtcclxuaW1wb3J0IEdNYXRoIGZyb20gXCIuL01hdGhcIjtcclxuaW1wb3J0IE1hdHJpeDQgZnJvbSBcIi4vTWF0cml4NFwiO1xyXG5pbXBvcnQgeyBRdWF0ZXJuaW9uIH0gZnJvbSBcIi4vUXVhdGVybmlvblwiO1xyXG5pbXBvcnQgVmVjdG9yMyBmcm9tIFwiLi9WZWN0b3IzXCI7XHJcbi8qKlxyXG4gKiBBIDN4MyBtYXRyaXgsIGluZGV4YWJsZSBhcyBhIGNvbHVtbi1tYWpvciBvcmRlciBhcnJheS5cclxuICogQHBhcmFtIHtOdW1iZXJ9IFtjb2x1bW4wUm93MD0wLjBdIFRoZSB2YWx1ZSBmb3IgY29sdW1uIDAsIHJvdyAwLlxyXG4gKiBAcGFyYW0ge051bWJlcn0gW2NvbHVtbjFSb3cwPTAuMF0gVGhlIHZhbHVlIGZvciBjb2x1bW4gMSwgcm93IDAuXHJcbiAqIEBwYXJhbSB7TnVtYmVyfSBbY29sdW1uMlJvdzA9MC4wXSBUaGUgdmFsdWUgZm9yIGNvbHVtbiAyLCByb3cgMC5cclxuICogQHBhcmFtIHtOdW1iZXJ9IFtjb2x1bW4wUm93MT0wLjBdIFRoZSB2YWx1ZSBmb3IgY29sdW1uIDAsIHJvdyAxLlxyXG4gKiBAcGFyYW0ge051bWJlcn0gW2NvbHVtbjFSb3cxPTAuMF0gVGhlIHZhbHVlIGZvciBjb2x1bW4gMSwgcm93IDEuXHJcbiAqIEBwYXJhbSB7TnVtYmVyfSBbY29sdW1uMlJvdzE9MC4wXSBUaGUgdmFsdWUgZm9yIGNvbHVtbiAyLCByb3cgMS5cclxuICogQHBhcmFtIHtOdW1iZXJ9IFtjb2x1bW4wUm93Mj0wLjBdIFRoZSB2YWx1ZSBmb3IgY29sdW1uIDAsIHJvdyAyLlxyXG4gKiBAcGFyYW0ge051bWJlcn0gW2NvbHVtbjFSb3cyPTAuMF0gVGhlIHZhbHVlIGZvciBjb2x1bW4gMSwgcm93IDIuXHJcbiAqIEBwYXJhbSB7TnVtYmVyfSBbY29sdW1uMlJvdzI9MC4wXSBUaGUgdmFsdWUgZm9yIGNvbHVtbiAyLCByb3cgMi5cclxuICovXHJcbmNsYXNzIE1hdHJpeDMge1xyXG5cdGNvbnN0cnVjdG9yKFxyXG5cdFx0Y29sdW1uMFJvdzAgPSAwLFxyXG5cdFx0Y29sdW1uMVJvdzAgPSAwLFxyXG5cdFx0Y29sdW1uMlJvdzAgPSAwLFxyXG5cdFx0Y29sdW1uMFJvdzEgPSAwLFxyXG5cdFx0Y29sdW1uMVJvdzEgPSAwLFxyXG5cdFx0Y29sdW1uMlJvdzEgPSAwLFxyXG5cdFx0Y29sdW1uMFJvdzIgPSAwLFxyXG5cdFx0Y29sdW1uMVJvdzIgPSAwLFxyXG5cdFx0Y29sdW1uMlJvdzIgPSAwXHJcblx0KSB7XHJcblx0XHR0aGlzWzBdID0gY29sdW1uMFJvdzA7XHJcblx0XHR0aGlzWzFdID0gY29sdW1uMFJvdzE7XHJcblx0XHR0aGlzWzJdID0gY29sdW1uMFJvdzI7XHJcblx0XHR0aGlzWzNdID0gY29sdW1uMVJvdzA7XHJcblx0XHR0aGlzWzRdID0gY29sdW1uMVJvdzE7XHJcblx0XHR0aGlzWzVdID0gY29sdW1uMVJvdzI7XHJcblx0XHR0aGlzWzZdID0gY29sdW1uMlJvdzA7XHJcblx0XHR0aGlzWzddID0gY29sdW1uMlJvdzE7XHJcblx0XHR0aGlzWzhdID0gY29sdW1uMlJvdzI7XHJcblx0fVxyXG5cdHNldEZyb21NYXRyaXg0KG1hdHJpeDogTWF0cml4NCk6IE1hdHJpeDMge1xyXG5cdFx0dGhpc1swXSA9IG1hdHJpeFswXTtcclxuXHRcdHRoaXNbMV0gPSBtYXRyaXhbMV07XHJcblx0XHR0aGlzWzJdID0gbWF0cml4WzJdO1xyXG5cdFx0dGhpc1szXSA9IG1hdHJpeFs0XTtcclxuXHRcdHRoaXNbNF0gPSBtYXRyaXhbNV07XHJcblx0XHR0aGlzWzVdID0gbWF0cml4WzJdO1xyXG5cdFx0dGhpc1s2XSA9IG1hdHJpeFs4XTtcclxuXHRcdHRoaXNbN10gPSBtYXRyaXhbOV07XHJcblx0XHR0aGlzWzhdID0gbWF0cml4WzEwXTtcclxuXHRcdHJldHVybiB0aGlzO1xyXG5cdH1cclxuXHRnZXROb3JtYWxNYXRyaXgobWF0cml4NDogTWF0cml4NCk6IE1hdHJpeDMge1xyXG5cdFx0dGhpcy5zZXRGcm9tTWF0cml4NChtYXRyaXg0KTtcclxuXHRcdE1hdHJpeDMuaW52ZXJzZSh0aGlzLCB0aGlzKTtcclxuXHRcdE1hdHJpeDMudHJhbnNwb3NlKHRoaXMsIHRoaXMpO1xyXG5cdFx0cmV0dXJuIHRoaXM7XHJcblx0fVxyXG5cclxuXHRzdGF0aWMgY2xvbmUobWF0cml4OiBNYXRyaXgzIHwgbnVtYmVyW10sIHJlc3VsdDogTWF0cml4Myk6IE1hdHJpeDMge1xyXG5cdFx0aWYgKCFkZWZpbmVkKG1hdHJpeCkpIHtcclxuXHRcdFx0cmV0dXJuIHVuZGVmaW5lZDtcclxuXHRcdH1cclxuXHRcdGlmICghZGVmaW5lZChyZXN1bHQpKSB7XHJcblx0XHRcdHJldHVybiBuZXcgTWF0cml4MyhcclxuXHRcdFx0XHRtYXRyaXhbMF0sXHJcblx0XHRcdFx0bWF0cml4WzNdLFxyXG5cdFx0XHRcdG1hdHJpeFs2XSxcclxuXHRcdFx0XHRtYXRyaXhbMV0sXHJcblx0XHRcdFx0bWF0cml4WzRdLFxyXG5cdFx0XHRcdG1hdHJpeFs3XSxcclxuXHRcdFx0XHRtYXRyaXhbMl0sXHJcblx0XHRcdFx0bWF0cml4WzVdLFxyXG5cdFx0XHRcdG1hdHJpeFs4XVxyXG5cdFx0XHQpO1xyXG5cdFx0fVxyXG5cdFx0cmVzdWx0WzBdID0gbWF0cml4WzBdO1xyXG5cdFx0cmVzdWx0WzFdID0gbWF0cml4WzFdO1xyXG5cdFx0cmVzdWx0WzJdID0gbWF0cml4WzJdO1xyXG5cdFx0cmVzdWx0WzNdID0gbWF0cml4WzNdO1xyXG5cdFx0cmVzdWx0WzRdID0gbWF0cml4WzRdO1xyXG5cdFx0cmVzdWx0WzVdID0gbWF0cml4WzVdO1xyXG5cdFx0cmVzdWx0WzZdID0gbWF0cml4WzZdO1xyXG5cdFx0cmVzdWx0WzddID0gbWF0cml4WzddO1xyXG5cdFx0cmVzdWx0WzhdID0gbWF0cml4WzhdO1xyXG5cdFx0cmV0dXJuIHJlc3VsdDtcclxuXHR9XHJcblxyXG5cdHN0YXRpYyBmcm9tQ29sdW1uTWFqb3JBcnJheSh2YWx1ZXM6IEFycmF5PG51bWJlcj4sIHJlc3VsdD86IE1hdHJpeDMpOiBNYXRyaXgzIHtcclxuXHRcdGlmICghZGVmaW5lZChyZXN1bHQpKSB7XHJcblx0XHRcdHJlc3VsdCA9IG5ldyBNYXRyaXgzKCk7XHJcblx0XHR9XHJcblx0XHRyZXR1cm4gTWF0cml4My5jbG9uZSh2YWx1ZXMsIHJlc3VsdCk7XHJcblx0fVxyXG5cclxuXHRzdGF0aWMgZnJvbVJvd01ham9yQXJyYXkodmFsdWVzOiBBcnJheTxudW1iZXI+LCByZXN1bHQ/OiBNYXRyaXgzKTogTWF0cml4MyB7XHJcblx0XHRpZiAoIWRlZmluZWQocmVzdWx0KSkge1xyXG5cdFx0XHRyZXR1cm4gbmV3IE1hdHJpeDMoXHJcblx0XHRcdFx0dmFsdWVzWzBdLFxyXG5cdFx0XHRcdHZhbHVlc1sxXSxcclxuXHRcdFx0XHR2YWx1ZXNbMl0sXHJcblx0XHRcdFx0dmFsdWVzWzNdLFxyXG5cdFx0XHRcdHZhbHVlc1s0XSxcclxuXHRcdFx0XHR2YWx1ZXNbNV0sXHJcblx0XHRcdFx0dmFsdWVzWzZdLFxyXG5cdFx0XHRcdHZhbHVlc1s3XSxcclxuXHRcdFx0XHR2YWx1ZXNbOF1cclxuXHRcdFx0KTtcclxuXHRcdH1cclxuXHRcdHJlc3VsdFswXSA9IHZhbHVlc1swXTtcclxuXHRcdHJlc3VsdFsxXSA9IHZhbHVlc1szXTtcclxuXHRcdHJlc3VsdFsyXSA9IHZhbHVlc1s2XTtcclxuXHRcdHJlc3VsdFszXSA9IHZhbHVlc1sxXTtcclxuXHRcdHJlc3VsdFs0XSA9IHZhbHVlc1s0XTtcclxuXHRcdHJlc3VsdFs1XSA9IHZhbHVlc1s3XTtcclxuXHRcdHJlc3VsdFs2XSA9IHZhbHVlc1syXTtcclxuXHRcdHJlc3VsdFs3XSA9IHZhbHVlc1s1XTtcclxuXHRcdHJlc3VsdFs4XSA9IHZhbHVlc1s4XTtcclxuXHRcdHJldHVybiByZXN1bHQ7XHJcblx0fVxyXG5cclxuXHRzdGF0aWMgZnJvbVF1YXRlcm5pb24ocXVhdGVybmlvbjogUXVhdGVybmlvbiwgcmVzdWx0PzogTWF0cml4Myk6IE1hdHJpeDMge1xyXG5cdFx0Y29uc3QgeDIgPSBxdWF0ZXJuaW9uLnggKiBxdWF0ZXJuaW9uLng7XHJcblx0XHRjb25zdCB4eSA9IHF1YXRlcm5pb24ueCAqIHF1YXRlcm5pb24ueTtcclxuXHRcdGNvbnN0IHh6ID0gcXVhdGVybmlvbi54ICogcXVhdGVybmlvbi56O1xyXG5cdFx0Y29uc3QgeHcgPSBxdWF0ZXJuaW9uLnggKiBxdWF0ZXJuaW9uLnc7XHJcblx0XHRjb25zdCB5MiA9IHF1YXRlcm5pb24ueSAqIHF1YXRlcm5pb24ueTtcclxuXHRcdGNvbnN0IHl6ID0gcXVhdGVybmlvbi55ICogcXVhdGVybmlvbi56O1xyXG5cdFx0Y29uc3QgeXcgPSBxdWF0ZXJuaW9uLnkgKiBxdWF0ZXJuaW9uLnc7XHJcblx0XHRjb25zdCB6MiA9IHF1YXRlcm5pb24ueiAqIHF1YXRlcm5pb24uejtcclxuXHRcdGNvbnN0IHp3ID0gcXVhdGVybmlvbi56ICogcXVhdGVybmlvbi53O1xyXG5cdFx0Y29uc3QgdzIgPSBxdWF0ZXJuaW9uLncgKiBxdWF0ZXJuaW9uLnc7XHJcblxyXG5cdFx0Y29uc3QgbTAwID0geDIgLSB5MiAtIHoyICsgdzI7XHJcblx0XHRjb25zdCBtMDEgPSAyLjAgKiAoeHkgLSB6dyk7XHJcblx0XHRjb25zdCBtMDIgPSAyLjAgKiAoeHogKyB5dyk7XHJcblxyXG5cdFx0Y29uc3QgbTEwID0gMi4wICogKHh5ICsgencpO1xyXG5cdFx0Y29uc3QgbTExID0gLXgyICsgeTIgLSB6MiArIHcyO1xyXG5cdFx0Y29uc3QgbTEyID0gMi4wICogKHl6IC0geHcpO1xyXG5cclxuXHRcdGNvbnN0IG0yMCA9IDIuMCAqICh4eiAtIHl3KTtcclxuXHRcdGNvbnN0IG0yMSA9IDIuMCAqICh5eiArIHh3KTtcclxuXHRcdGNvbnN0IG0yMiA9IC14MiAtIHkyICsgejIgKyB3MjtcclxuXHJcblx0XHRpZiAoIWRlZmluZWQocmVzdWx0KSkge1xyXG5cdFx0XHRyZXR1cm4gbmV3IE1hdHJpeDMobTAwLCBtMDEsIG0wMiwgbTEwLCBtMTEsIG0xMiwgbTIwLCBtMjEsIG0yMik7XHJcblx0XHR9XHJcblx0XHRyZXN1bHRbMF0gPSBtMDA7XHJcblx0XHRyZXN1bHRbMV0gPSBtMTA7XHJcblx0XHRyZXN1bHRbMl0gPSBtMjA7XHJcblx0XHRyZXN1bHRbM10gPSBtMDE7XHJcblx0XHRyZXN1bHRbNF0gPSBtMTE7XHJcblx0XHRyZXN1bHRbNV0gPSBtMjE7XHJcblx0XHRyZXN1bHRbNl0gPSBtMDI7XHJcblx0XHRyZXN1bHRbN10gPSBtMTI7XHJcblx0XHRyZXN1bHRbOF0gPSBtMjI7XHJcblx0XHRyZXR1cm4gcmVzdWx0O1xyXG5cdH1cclxuXHJcblx0c3RhdGljIGZyb21TY2FsZShzY2FsZTogVmVjdG9yMywgcmVzdWx0OiBNYXRyaXgzKTogTWF0cml4MyB7XHJcblx0XHRpZiAoIWRlZmluZWQocmVzdWx0KSkge1xyXG5cdFx0XHRyZXR1cm4gbmV3IE1hdHJpeDMoc2NhbGUueCwgMC4wLCAwLjAsIDAuMCwgc2NhbGUueSwgMC4wLCAwLjAsIDAuMCwgc2NhbGUueik7XHJcblx0XHR9XHJcblxyXG5cdFx0cmVzdWx0WzBdID0gc2NhbGUueDtcclxuXHRcdHJlc3VsdFsxXSA9IDAuMDtcclxuXHRcdHJlc3VsdFsyXSA9IDAuMDtcclxuXHRcdHJlc3VsdFszXSA9IDAuMDtcclxuXHRcdHJlc3VsdFs0XSA9IHNjYWxlLnk7XHJcblx0XHRyZXN1bHRbNV0gPSAwLjA7XHJcblx0XHRyZXN1bHRbNl0gPSAwLjA7XHJcblx0XHRyZXN1bHRbN10gPSAwLjA7XHJcblx0XHRyZXN1bHRbOF0gPSBzY2FsZS56O1xyXG5cdFx0cmV0dXJuIHJlc3VsdDtcclxuXHR9XHJcblxyXG5cdHN0YXRpYyBmcm9tUm90YXRpb25YKGFuZ2xlOiBudW1iZXIsIHJlc3VsdDogTWF0cml4Myk6IE1hdHJpeDMge1xyXG5cdFx0Y29uc3QgY29zQW5nbGUgPSBNYXRoLmNvcyhhbmdsZSk7XHJcblx0XHRjb25zdCBzaW5BbmdsZSA9IE1hdGguc2luKGFuZ2xlKTtcclxuXHJcblx0XHRpZiAoIWRlZmluZWQocmVzdWx0KSkge1xyXG5cdFx0XHRyZXR1cm4gbmV3IE1hdHJpeDMoMS4wLCAwLjAsIDAuMCwgMC4wLCBjb3NBbmdsZSwgLXNpbkFuZ2xlLCAwLjAsIHNpbkFuZ2xlLCBjb3NBbmdsZSk7XHJcblx0XHR9XHJcblxyXG5cdFx0cmVzdWx0WzBdID0gMS4wO1xyXG5cdFx0cmVzdWx0WzFdID0gMC4wO1xyXG5cdFx0cmVzdWx0WzJdID0gMC4wO1xyXG5cdFx0cmVzdWx0WzNdID0gMC4wO1xyXG5cdFx0cmVzdWx0WzRdID0gY29zQW5nbGU7XHJcblx0XHRyZXN1bHRbNV0gPSBzaW5BbmdsZTtcclxuXHRcdHJlc3VsdFs2XSA9IDAuMDtcclxuXHRcdHJlc3VsdFs3XSA9IC1zaW5BbmdsZTtcclxuXHRcdHJlc3VsdFs4XSA9IGNvc0FuZ2xlO1xyXG5cclxuXHRcdHJldHVybiByZXN1bHQ7XHJcblx0fVxyXG5cclxuXHRzdGF0aWMgZnJvbVJvdGF0aW9uWShhbmdsZTogbnVtYmVyLCByZXN1bHQ6IE1hdHJpeDMpOiBNYXRyaXgzIHtcclxuXHRcdGNvbnN0IGNvc0FuZ2xlID0gTWF0aC5jb3MoYW5nbGUpO1xyXG5cdFx0Y29uc3Qgc2luQW5nbGUgPSBNYXRoLnNpbihhbmdsZSk7XHJcblxyXG5cdFx0aWYgKCFkZWZpbmVkKHJlc3VsdCkpIHtcclxuXHRcdFx0cmV0dXJuIG5ldyBNYXRyaXgzKGNvc0FuZ2xlLCAwLjAsIHNpbkFuZ2xlLCAwLjAsIDEuMCwgMC4wLCAtc2luQW5nbGUsIDAuMCwgY29zQW5nbGUpO1xyXG5cdFx0fVxyXG5cclxuXHRcdHJlc3VsdFswXSA9IGNvc0FuZ2xlO1xyXG5cdFx0cmVzdWx0WzFdID0gMC4wO1xyXG5cdFx0cmVzdWx0WzJdID0gLXNpbkFuZ2xlO1xyXG5cdFx0cmVzdWx0WzNdID0gMC4wO1xyXG5cdFx0cmVzdWx0WzRdID0gMS4wO1xyXG5cdFx0cmVzdWx0WzVdID0gMC4wO1xyXG5cdFx0cmVzdWx0WzZdID0gc2luQW5nbGU7XHJcblx0XHRyZXN1bHRbN10gPSAwLjA7XHJcblx0XHRyZXN1bHRbOF0gPSBjb3NBbmdsZTtcclxuXHJcblx0XHRyZXR1cm4gcmVzdWx0O1xyXG5cdH1cclxuXHJcblx0c3RhdGljIGZyb21Sb3RhdGlvblpzdGF0aWMoYW5nbGU6IG51bWJlciwgcmVzdWx0OiBNYXRyaXgzKTogTWF0cml4MyB7XHJcblx0XHRjb25zdCBjb3NBbmdsZSA9IE1hdGguY29zKGFuZ2xlKTtcclxuXHRcdGNvbnN0IHNpbkFuZ2xlID0gTWF0aC5zaW4oYW5nbGUpO1xyXG5cclxuXHRcdGlmICghZGVmaW5lZChyZXN1bHQpKSB7XHJcblx0XHRcdHJldHVybiBuZXcgTWF0cml4Myhjb3NBbmdsZSwgLXNpbkFuZ2xlLCAwLjAsIHNpbkFuZ2xlLCBjb3NBbmdsZSwgMC4wLCAwLjAsIDAuMCwgMS4wKTtcclxuXHRcdH1cclxuXHJcblx0XHRyZXN1bHRbMF0gPSBjb3NBbmdsZTtcclxuXHRcdHJlc3VsdFsxXSA9IHNpbkFuZ2xlO1xyXG5cdFx0cmVzdWx0WzJdID0gMC4wO1xyXG5cdFx0cmVzdWx0WzNdID0gLXNpbkFuZ2xlO1xyXG5cdFx0cmVzdWx0WzRdID0gY29zQW5nbGU7XHJcblx0XHRyZXN1bHRbNV0gPSAwLjA7XHJcblx0XHRyZXN1bHRbNl0gPSAwLjA7XHJcblx0XHRyZXN1bHRbN10gPSAwLjA7XHJcblx0XHRyZXN1bHRbOF0gPSAxLjA7XHJcblxyXG5cdFx0cmV0dXJuIHJlc3VsdDtcclxuXHR9XHJcblx0dG9BcnJheSgpIHtcclxuXHRcdGNvbnN0IHJlc3VsdCA9IFtdO1xyXG5cdFx0TWF0cml4My50b0FycmF5KHRoaXMsIHJlc3VsdCk7XHJcblx0XHRyZXR1cm4gcmVzdWx0O1xyXG5cdH1cclxuXHJcblx0c3RhdGljIHRvQXJyYXkobWF0cml4OiBNYXRyaXgzLCByZXN1bHQ6IG51bWJlcltdKTogbnVtYmVyW10ge1xyXG5cdFx0aWYgKCFkZWZpbmVkKHJlc3VsdCkpIHtcclxuXHRcdFx0cmV0dXJuIFttYXRyaXhbMF0sIG1hdHJpeFsxXSwgbWF0cml4WzJdLCBtYXRyaXhbM10sIG1hdHJpeFs0XSwgbWF0cml4WzVdLCBtYXRyaXhbNl0sIG1hdHJpeFs3XSwgbWF0cml4WzhdXTtcclxuXHRcdH1cclxuXHRcdHJlc3VsdFswXSA9IG1hdHJpeFswXTtcclxuXHRcdHJlc3VsdFsxXSA9IG1hdHJpeFsxXTtcclxuXHRcdHJlc3VsdFsyXSA9IG1hdHJpeFsyXTtcclxuXHRcdHJlc3VsdFszXSA9IG1hdHJpeFszXTtcclxuXHRcdHJlc3VsdFs0XSA9IG1hdHJpeFs0XTtcclxuXHRcdHJlc3VsdFs1XSA9IG1hdHJpeFs1XTtcclxuXHRcdHJlc3VsdFs2XSA9IG1hdHJpeFs2XTtcclxuXHRcdHJlc3VsdFs3XSA9IG1hdHJpeFs3XTtcclxuXHRcdHJlc3VsdFs4XSA9IG1hdHJpeFs4XTtcclxuXHRcdHJldHVybiByZXN1bHQ7XHJcblx0fVxyXG5cclxuXHRzdGF0aWMgZ2V0RWxlbWVudEluZGV4KGNvbHVtbjogbnVtYmVyLCByb3c6IG51bWJlcik6IG51bWJlciB7XHJcblx0XHRyZXR1cm4gY29sdW1uICogMyArIHJvdztcclxuXHR9XHJcblxyXG5cdHN0YXRpYyBnZXRDb2x1bW4obWF0cml4OiBNYXRyaXgzLCBpbmRleDogbnVtYmVyLCByZXN1bHQ6IFZlY3RvcjMpOiBWZWN0b3IzIHtcclxuXHRcdGNvbnN0IHN0YXJ0SW5kZXggPSBpbmRleCAqIDM7XHJcblx0XHRjb25zdCB4ID0gbWF0cml4W3N0YXJ0SW5kZXhdO1xyXG5cdFx0Y29uc3QgeSA9IG1hdHJpeFtzdGFydEluZGV4ICsgMV07XHJcblx0XHRjb25zdCB6ID0gbWF0cml4W3N0YXJ0SW5kZXggKyAyXTtcclxuXHJcblx0XHRyZXN1bHQueCA9IHg7XHJcblx0XHRyZXN1bHQueSA9IHk7XHJcblx0XHRyZXN1bHQueiA9IHo7XHJcblx0XHRyZXR1cm4gcmVzdWx0O1xyXG5cdH1cclxuXHJcblx0c3RhdGljIHNldENvbHVtbihtYXRyaXg6IE1hdHJpeDMsIGluZGV4OiBudW1iZXIsIGNhcnRlc2lhbjogVmVjdG9yMywgcmVzdWx0OiBNYXRyaXgzKTogTWF0cml4MyB7XHJcblx0XHRyZXN1bHQgPSBNYXRyaXgzLmNsb25lKG1hdHJpeCwgcmVzdWx0KTtcclxuXHRcdGNvbnN0IHN0YXJ0SW5kZXggPSBpbmRleCAqIDM7XHJcblx0XHRyZXN1bHRbc3RhcnRJbmRleF0gPSBjYXJ0ZXNpYW4ueDtcclxuXHRcdHJlc3VsdFtzdGFydEluZGV4ICsgMV0gPSBjYXJ0ZXNpYW4ueTtcclxuXHRcdHJlc3VsdFtzdGFydEluZGV4ICsgMl0gPSBjYXJ0ZXNpYW4uejtcclxuXHRcdHJldHVybiByZXN1bHQ7XHJcblx0fVxyXG5cclxuXHRzdGF0aWMgZ2V0Um93KG1hdHJpeDogTWF0cml4MywgaW5kZXg6IG51bWJlciwgcmVzdWx0OiBWZWN0b3IzKTogVmVjdG9yMyB7XHJcblx0XHRjb25zdCB4ID0gbWF0cml4W2luZGV4XTtcclxuXHRcdGNvbnN0IHkgPSBtYXRyaXhbaW5kZXggKyAzXTtcclxuXHRcdGNvbnN0IHogPSBtYXRyaXhbaW5kZXggKyA2XTtcclxuXHJcblx0XHRyZXN1bHQueCA9IHg7XHJcblx0XHRyZXN1bHQueSA9IHk7XHJcblx0XHRyZXN1bHQueiA9IHo7XHJcblx0XHRyZXR1cm4gcmVzdWx0O1xyXG5cdH1cclxuXHJcblx0c3RhdGljIHNldFJvdyhtYXRyaXg6IE1hdHJpeDMsIGluZGV4OiBudW1iZXIsIGNhcnRlc2lhbjogVmVjdG9yMywgcmVzdWx0OiBNYXRyaXgzKTogTWF0cml4MyB7XHJcblx0XHRyZXN1bHQgPSBNYXRyaXgzLmNsb25lKG1hdHJpeCwgcmVzdWx0KTtcclxuXHRcdHJlc3VsdFtpbmRleF0gPSBjYXJ0ZXNpYW4ueDtcclxuXHRcdHJlc3VsdFtpbmRleCArIDNdID0gY2FydGVzaWFuLnk7XHJcblx0XHRyZXN1bHRbaW5kZXggKyA2XSA9IGNhcnRlc2lhbi56O1xyXG5cdFx0cmV0dXJuIHJlc3VsdDtcclxuXHR9XHJcblxyXG5cdHN0YXRpYyBzZXRTY2FsZShtYXRyaXg6IE1hdHJpeDMsIHNjYWxlOiBWZWN0b3IzLCByZXN1bHQ6IE1hdHJpeDMpOiBNYXRyaXgzIHtcclxuXHRcdGNvbnN0IGV4aXN0aW5nU2NhbGUgPSBNYXRyaXgzLmdldFNjYWxlKG1hdHJpeCwgc2NhbGVTY3JhdGNoMSk7XHJcblx0XHRjb25zdCBzY2FsZVJhdGlvWCA9IHNjYWxlLnggLyBleGlzdGluZ1NjYWxlLng7XHJcblx0XHRjb25zdCBzY2FsZVJhdGlvWSA9IHNjYWxlLnkgLyBleGlzdGluZ1NjYWxlLnk7XHJcblx0XHRjb25zdCBzY2FsZVJhdGlvWiA9IHNjYWxlLnogLyBleGlzdGluZ1NjYWxlLno7XHJcblxyXG5cdFx0cmVzdWx0WzBdID0gbWF0cml4WzBdICogc2NhbGVSYXRpb1g7XHJcblx0XHRyZXN1bHRbMV0gPSBtYXRyaXhbMV0gKiBzY2FsZVJhdGlvWDtcclxuXHRcdHJlc3VsdFsyXSA9IG1hdHJpeFsyXSAqIHNjYWxlUmF0aW9YO1xyXG5cdFx0cmVzdWx0WzNdID0gbWF0cml4WzNdICogc2NhbGVSYXRpb1k7XHJcblx0XHRyZXN1bHRbNF0gPSBtYXRyaXhbNF0gKiBzY2FsZVJhdGlvWTtcclxuXHRcdHJlc3VsdFs1XSA9IG1hdHJpeFs1XSAqIHNjYWxlUmF0aW9ZO1xyXG5cdFx0cmVzdWx0WzZdID0gbWF0cml4WzZdICogc2NhbGVSYXRpb1o7XHJcblx0XHRyZXN1bHRbN10gPSBtYXRyaXhbN10gKiBzY2FsZVJhdGlvWjtcclxuXHRcdHJlc3VsdFs4XSA9IG1hdHJpeFs4XSAqIHNjYWxlUmF0aW9aO1xyXG5cclxuXHRcdHJldHVybiByZXN1bHQ7XHJcblx0fVxyXG5cclxuXHRzdGF0aWMgZ2V0U2NhbGUobWF0cml4OiBNYXRyaXgzLCByZXN1bHQ6IFZlY3RvcjMpOiBWZWN0b3IzIHtcclxuXHRcdHJlc3VsdC54ID0gVmVjdG9yMy5tYWduaXR1ZGUoVmVjdG9yMy5mcm9tRWxlbWVudHMobWF0cml4WzBdLCBtYXRyaXhbMV0sIG1hdHJpeFsyXSwgc2NyYXRjaENvbHVtbikpO1xyXG5cdFx0cmVzdWx0LnkgPSBWZWN0b3IzLm1hZ25pdHVkZShWZWN0b3IzLmZyb21FbGVtZW50cyhtYXRyaXhbM10sIG1hdHJpeFs0XSwgbWF0cml4WzVdLCBzY3JhdGNoQ29sdW1uKSk7XHJcblx0XHRyZXN1bHQueiA9IFZlY3RvcjMubWFnbml0dWRlKFZlY3RvcjMuZnJvbUVsZW1lbnRzKG1hdHJpeFs2XSwgbWF0cml4WzddLCBtYXRyaXhbOF0sIHNjcmF0Y2hDb2x1bW4pKTtcclxuXHRcdHJldHVybiByZXN1bHQ7XHJcblx0fVxyXG5cclxuXHRzdGF0aWMgZ2V0TWF4aW11bVNjYWxlKG1hdHJpeDogTWF0cml4Myk6IG51bWJlciB7XHJcblx0XHRNYXRyaXgzLmdldFNjYWxlKG1hdHJpeCwgc2NhbGVTY3JhdGNoMyk7XHJcblx0XHRyZXR1cm4gVmVjdG9yMy5tYXhpbXVtQ29tcG9uZW50KHNjYWxlU2NyYXRjaDMpO1xyXG5cdH1cclxuXHJcblx0c3RhdGljIHNldFJvdGF0aW9uKG1hdHJpeDogTWF0cml4Mywgcm90YXRpb246IE1hdHJpeDMsIHJlc3VsdDogTWF0cml4Myk6IE1hdHJpeDMge1xyXG5cdFx0Y29uc3Qgc2NhbGUgPSBNYXRyaXgzLmdldFNjYWxlKG1hdHJpeCwgc2NhbGVTY3JhdGNoNCk7XHJcblxyXG5cdFx0cmVzdWx0WzBdID0gcm90YXRpb25bMF0gKiBzY2FsZS54O1xyXG5cdFx0cmVzdWx0WzFdID0gcm90YXRpb25bMV0gKiBzY2FsZS54O1xyXG5cdFx0cmVzdWx0WzJdID0gcm90YXRpb25bMl0gKiBzY2FsZS54O1xyXG5cdFx0cmVzdWx0WzNdID0gcm90YXRpb25bM10gKiBzY2FsZS55O1xyXG5cdFx0cmVzdWx0WzRdID0gcm90YXRpb25bNF0gKiBzY2FsZS55O1xyXG5cdFx0cmVzdWx0WzVdID0gcm90YXRpb25bNV0gKiBzY2FsZS55O1xyXG5cdFx0cmVzdWx0WzZdID0gcm90YXRpb25bNl0gKiBzY2FsZS56O1xyXG5cdFx0cmVzdWx0WzddID0gcm90YXRpb25bN10gKiBzY2FsZS56O1xyXG5cdFx0cmVzdWx0WzhdID0gcm90YXRpb25bOF0gKiBzY2FsZS56O1xyXG5cclxuXHRcdHJldHVybiByZXN1bHQ7XHJcblx0fVxyXG5cclxuXHRzdGF0aWMgZ2V0Um90YXRpb24obWF0cml4OiBNYXRyaXgzLCByZXN1bHQ6IE1hdHJpeDMpOiBNYXRyaXgzIHtcclxuXHRcdGNvbnN0IHNjYWxlID0gTWF0cml4My5nZXRTY2FsZShtYXRyaXgsIHNjYWxlU2NyYXRjaDUpO1xyXG5cclxuXHRcdHJlc3VsdFswXSA9IG1hdHJpeFswXSAvIHNjYWxlLng7XHJcblx0XHRyZXN1bHRbMV0gPSBtYXRyaXhbMV0gLyBzY2FsZS54O1xyXG5cdFx0cmVzdWx0WzJdID0gbWF0cml4WzJdIC8gc2NhbGUueDtcclxuXHRcdHJlc3VsdFszXSA9IG1hdHJpeFszXSAvIHNjYWxlLnk7XHJcblx0XHRyZXN1bHRbNF0gPSBtYXRyaXhbNF0gLyBzY2FsZS55O1xyXG5cdFx0cmVzdWx0WzVdID0gbWF0cml4WzVdIC8gc2NhbGUueTtcclxuXHRcdHJlc3VsdFs2XSA9IG1hdHJpeFs2XSAvIHNjYWxlLno7XHJcblx0XHRyZXN1bHRbN10gPSBtYXRyaXhbN10gLyBzY2FsZS56O1xyXG5cdFx0cmVzdWx0WzhdID0gbWF0cml4WzhdIC8gc2NhbGUuejtcclxuXHJcblx0XHRyZXR1cm4gcmVzdWx0O1xyXG5cdH1cclxuXHJcblx0c3RhdGljIG11bHRpcGx5KGxlZnQ6IE1hdHJpeDMsIHJpZ2h0OiBNYXRyaXgzLCByZXN1bHQ6IE1hdHJpeDMpOiBNYXRyaXgzIHtcclxuXHRcdGNvbnN0IGNvbHVtbjBSb3cwID0gbGVmdFswXSAqIHJpZ2h0WzBdICsgbGVmdFszXSAqIHJpZ2h0WzFdICsgbGVmdFs2XSAqIHJpZ2h0WzJdO1xyXG5cdFx0Y29uc3QgY29sdW1uMFJvdzEgPSBsZWZ0WzFdICogcmlnaHRbMF0gKyBsZWZ0WzRdICogcmlnaHRbMV0gKyBsZWZ0WzddICogcmlnaHRbMl07XHJcblx0XHRjb25zdCBjb2x1bW4wUm93MiA9IGxlZnRbMl0gKiByaWdodFswXSArIGxlZnRbNV0gKiByaWdodFsxXSArIGxlZnRbOF0gKiByaWdodFsyXTtcclxuXHJcblx0XHRjb25zdCBjb2x1bW4xUm93MCA9IGxlZnRbMF0gKiByaWdodFszXSArIGxlZnRbM10gKiByaWdodFs0XSArIGxlZnRbNl0gKiByaWdodFs1XTtcclxuXHRcdGNvbnN0IGNvbHVtbjFSb3cxID0gbGVmdFsxXSAqIHJpZ2h0WzNdICsgbGVmdFs0XSAqIHJpZ2h0WzRdICsgbGVmdFs3XSAqIHJpZ2h0WzVdO1xyXG5cdFx0Y29uc3QgY29sdW1uMVJvdzIgPSBsZWZ0WzJdICogcmlnaHRbM10gKyBsZWZ0WzVdICogcmlnaHRbNF0gKyBsZWZ0WzhdICogcmlnaHRbNV07XHJcblxyXG5cdFx0Y29uc3QgY29sdW1uMlJvdzAgPSBsZWZ0WzBdICogcmlnaHRbNl0gKyBsZWZ0WzNdICogcmlnaHRbN10gKyBsZWZ0WzZdICogcmlnaHRbOF07XHJcblx0XHRjb25zdCBjb2x1bW4yUm93MSA9IGxlZnRbMV0gKiByaWdodFs2XSArIGxlZnRbNF0gKiByaWdodFs3XSArIGxlZnRbN10gKiByaWdodFs4XTtcclxuXHRcdGNvbnN0IGNvbHVtbjJSb3cyID0gbGVmdFsyXSAqIHJpZ2h0WzZdICsgbGVmdFs1XSAqIHJpZ2h0WzddICsgbGVmdFs4XSAqIHJpZ2h0WzhdO1xyXG5cclxuXHRcdHJlc3VsdFswXSA9IGNvbHVtbjBSb3cwO1xyXG5cdFx0cmVzdWx0WzFdID0gY29sdW1uMFJvdzE7XHJcblx0XHRyZXN1bHRbMl0gPSBjb2x1bW4wUm93MjtcclxuXHRcdHJlc3VsdFszXSA9IGNvbHVtbjFSb3cwO1xyXG5cdFx0cmVzdWx0WzRdID0gY29sdW1uMVJvdzE7XHJcblx0XHRyZXN1bHRbNV0gPSBjb2x1bW4xUm93MjtcclxuXHRcdHJlc3VsdFs2XSA9IGNvbHVtbjJSb3cwO1xyXG5cdFx0cmVzdWx0WzddID0gY29sdW1uMlJvdzE7XHJcblx0XHRyZXN1bHRbOF0gPSBjb2x1bW4yUm93MjtcclxuXHRcdHJldHVybiByZXN1bHQ7XHJcblx0fVxyXG5cclxuXHRzdGF0aWMgYWRkKGxlZnQ6IE1hdHJpeDMsIHJpZ2h0OiBNYXRyaXgzLCByZXN1bHQ6IE1hdHJpeDMpOiBNYXRyaXgzIHtcclxuXHRcdHJlc3VsdFswXSA9IGxlZnRbMF0gKyByaWdodFswXTtcclxuXHRcdHJlc3VsdFsxXSA9IGxlZnRbMV0gKyByaWdodFsxXTtcclxuXHRcdHJlc3VsdFsyXSA9IGxlZnRbMl0gKyByaWdodFsyXTtcclxuXHRcdHJlc3VsdFszXSA9IGxlZnRbM10gKyByaWdodFszXTtcclxuXHRcdHJlc3VsdFs0XSA9IGxlZnRbNF0gKyByaWdodFs0XTtcclxuXHRcdHJlc3VsdFs1XSA9IGxlZnRbNV0gKyByaWdodFs1XTtcclxuXHRcdHJlc3VsdFs2XSA9IGxlZnRbNl0gKyByaWdodFs2XTtcclxuXHRcdHJlc3VsdFs3XSA9IGxlZnRbN10gKyByaWdodFs3XTtcclxuXHRcdHJlc3VsdFs4XSA9IGxlZnRbOF0gKyByaWdodFs4XTtcclxuXHRcdHJldHVybiByZXN1bHQ7XHJcblx0fVxyXG5cclxuXHRzdGF0aWMgc3VidHJhY3QobGVmdDogTWF0cml4MywgcmlnaHQ6IE1hdHJpeDMsIHJlc3VsdDogTWF0cml4Mykge1xyXG5cdFx0cmVzdWx0WzBdID0gbGVmdFswXSAtIHJpZ2h0WzBdO1xyXG5cdFx0cmVzdWx0WzFdID0gbGVmdFsxXSAtIHJpZ2h0WzFdO1xyXG5cdFx0cmVzdWx0WzJdID0gbGVmdFsyXSAtIHJpZ2h0WzJdO1xyXG5cdFx0cmVzdWx0WzNdID0gbGVmdFszXSAtIHJpZ2h0WzNdO1xyXG5cdFx0cmVzdWx0WzRdID0gbGVmdFs0XSAtIHJpZ2h0WzRdO1xyXG5cdFx0cmVzdWx0WzVdID0gbGVmdFs1XSAtIHJpZ2h0WzVdO1xyXG5cdFx0cmVzdWx0WzZdID0gbGVmdFs2XSAtIHJpZ2h0WzZdO1xyXG5cdFx0cmVzdWx0WzddID0gbGVmdFs3XSAtIHJpZ2h0WzddO1xyXG5cdFx0cmVzdWx0WzhdID0gbGVmdFs4XSAtIHJpZ2h0WzhdO1xyXG5cdFx0cmV0dXJuIHJlc3VsdDtcclxuXHR9XHJcblxyXG5cdHN0YXRpYyBtdWx0aXBseUJ5VmVjdG9yKG1hdHJpeDogTWF0cml4MywgY2FydGVzaWFuOiBWZWN0b3IzLCByZXN1bHQ6IFZlY3RvcjMpOiBWZWN0b3IzIHtcclxuXHRcdGNvbnN0IHZYID0gY2FydGVzaWFuLng7XHJcblx0XHRjb25zdCB2WSA9IGNhcnRlc2lhbi55O1xyXG5cdFx0Y29uc3QgdlogPSBjYXJ0ZXNpYW4uejtcclxuXHJcblx0XHRjb25zdCB4ID0gbWF0cml4WzBdICogdlggKyBtYXRyaXhbM10gKiB2WSArIG1hdHJpeFs2XSAqIHZaO1xyXG5cdFx0Y29uc3QgeSA9IG1hdHJpeFsxXSAqIHZYICsgbWF0cml4WzRdICogdlkgKyBtYXRyaXhbN10gKiB2WjtcclxuXHRcdGNvbnN0IHogPSBtYXRyaXhbMl0gKiB2WCArIG1hdHJpeFs1XSAqIHZZICsgbWF0cml4WzhdICogdlo7XHJcblxyXG5cdFx0cmVzdWx0LnggPSB4O1xyXG5cdFx0cmVzdWx0LnkgPSB5O1xyXG5cdFx0cmVzdWx0LnogPSB6O1xyXG5cdFx0cmV0dXJuIHJlc3VsdDtcclxuXHR9XHJcblxyXG5cdHN0YXRpYyBtdWx0aXBseUJ5U2NhbGFyKG1hdHJpeDogTWF0cml4Mywgc2NhbGFyOiBudW1iZXIsIHJlc3VsdDogTWF0cml4Myk6IE1hdHJpeDMge1xyXG5cdFx0cmVzdWx0WzBdID0gbWF0cml4WzBdICogc2NhbGFyO1xyXG5cdFx0cmVzdWx0WzFdID0gbWF0cml4WzFdICogc2NhbGFyO1xyXG5cdFx0cmVzdWx0WzJdID0gbWF0cml4WzJdICogc2NhbGFyO1xyXG5cdFx0cmVzdWx0WzNdID0gbWF0cml4WzNdICogc2NhbGFyO1xyXG5cdFx0cmVzdWx0WzRdID0gbWF0cml4WzRdICogc2NhbGFyO1xyXG5cdFx0cmVzdWx0WzVdID0gbWF0cml4WzVdICogc2NhbGFyO1xyXG5cdFx0cmVzdWx0WzZdID0gbWF0cml4WzZdICogc2NhbGFyO1xyXG5cdFx0cmVzdWx0WzddID0gbWF0cml4WzddICogc2NhbGFyO1xyXG5cdFx0cmVzdWx0WzhdID0gbWF0cml4WzhdICogc2NhbGFyO1xyXG5cdFx0cmV0dXJuIHJlc3VsdDtcclxuXHR9XHJcblxyXG5cdHN0YXRpYyBtdWx0aXBseUJ5U2NhbGUobWF0cml4OiBNYXRyaXgzLCBzY2FsZTogVmVjdG9yMywgcmVzdWx0OiBNYXRyaXgzKTogTWF0cml4MyB7XHJcblx0XHRyZXN1bHRbMF0gPSBtYXRyaXhbMF0gKiBzY2FsZS54O1xyXG5cdFx0cmVzdWx0WzFdID0gbWF0cml4WzFdICogc2NhbGUueDtcclxuXHRcdHJlc3VsdFsyXSA9IG1hdHJpeFsyXSAqIHNjYWxlLng7XHJcblx0XHRyZXN1bHRbM10gPSBtYXRyaXhbM10gKiBzY2FsZS55O1xyXG5cdFx0cmVzdWx0WzRdID0gbWF0cml4WzRdICogc2NhbGUueTtcclxuXHRcdHJlc3VsdFs1XSA9IG1hdHJpeFs1XSAqIHNjYWxlLnk7XHJcblx0XHRyZXN1bHRbNl0gPSBtYXRyaXhbNl0gKiBzY2FsZS56O1xyXG5cdFx0cmVzdWx0WzddID0gbWF0cml4WzddICogc2NhbGUuejtcclxuXHRcdHJlc3VsdFs4XSA9IG1hdHJpeFs4XSAqIHNjYWxlLno7XHJcblxyXG5cdFx0cmV0dXJuIHJlc3VsdDtcclxuXHR9XHJcblxyXG5cdHN0YXRpYyBuZWdhdGUobWF0cml4OiBNYXRyaXgzLCByZXN1bHQ6IE1hdHJpeDMpOiBNYXRyaXgzIHtcclxuXHRcdHJlc3VsdFswXSA9IC1tYXRyaXhbMF07XHJcblx0XHRyZXN1bHRbMV0gPSAtbWF0cml4WzFdO1xyXG5cdFx0cmVzdWx0WzJdID0gLW1hdHJpeFsyXTtcclxuXHRcdHJlc3VsdFszXSA9IC1tYXRyaXhbM107XHJcblx0XHRyZXN1bHRbNF0gPSAtbWF0cml4WzRdO1xyXG5cdFx0cmVzdWx0WzVdID0gLW1hdHJpeFs1XTtcclxuXHRcdHJlc3VsdFs2XSA9IC1tYXRyaXhbNl07XHJcblx0XHRyZXN1bHRbN10gPSAtbWF0cml4WzddO1xyXG5cdFx0cmVzdWx0WzhdID0gLW1hdHJpeFs4XTtcclxuXHRcdHJldHVybiByZXN1bHQ7XHJcblx0fVxyXG5cclxuXHRzdGF0aWMgdHJhbnNwb3NlKG1hdHJpeDogTWF0cml4MywgcmVzdWx0OiBNYXRyaXgzKTogTWF0cml4MyB7XHJcblx0XHRjb25zdCBjb2x1bW4wUm93MCA9IG1hdHJpeFswXTtcclxuXHRcdGNvbnN0IGNvbHVtbjBSb3cxID0gbWF0cml4WzNdO1xyXG5cdFx0Y29uc3QgY29sdW1uMFJvdzIgPSBtYXRyaXhbNl07XHJcblx0XHRjb25zdCBjb2x1bW4xUm93MCA9IG1hdHJpeFsxXTtcclxuXHRcdGNvbnN0IGNvbHVtbjFSb3cxID0gbWF0cml4WzRdO1xyXG5cdFx0Y29uc3QgY29sdW1uMVJvdzIgPSBtYXRyaXhbN107XHJcblx0XHRjb25zdCBjb2x1bW4yUm93MCA9IG1hdHJpeFsyXTtcclxuXHRcdGNvbnN0IGNvbHVtbjJSb3cxID0gbWF0cml4WzVdO1xyXG5cdFx0Y29uc3QgY29sdW1uMlJvdzIgPSBtYXRyaXhbOF07XHJcblxyXG5cdFx0cmVzdWx0WzBdID0gY29sdW1uMFJvdzA7XHJcblx0XHRyZXN1bHRbMV0gPSBjb2x1bW4wUm93MTtcclxuXHRcdHJlc3VsdFsyXSA9IGNvbHVtbjBSb3cyO1xyXG5cdFx0cmVzdWx0WzNdID0gY29sdW1uMVJvdzA7XHJcblx0XHRyZXN1bHRbNF0gPSBjb2x1bW4xUm93MTtcclxuXHRcdHJlc3VsdFs1XSA9IGNvbHVtbjFSb3cyO1xyXG5cdFx0cmVzdWx0WzZdID0gY29sdW1uMlJvdzA7XHJcblx0XHRyZXN1bHRbN10gPSBjb2x1bW4yUm93MTtcclxuXHRcdHJlc3VsdFs4XSA9IGNvbHVtbjJSb3cyO1xyXG5cdFx0cmV0dXJuIHJlc3VsdDtcclxuXHR9XHJcblxyXG5cdHN0YXRpYyBhYnMobWF0cml4OiBNYXRyaXgzLCByZXN1bHQ6IE1hdHJpeDMpOiBNYXRyaXgzIHtcclxuXHRcdHJlc3VsdFswXSA9IE1hdGguYWJzKG1hdHJpeFswXSk7XHJcblx0XHRyZXN1bHRbMV0gPSBNYXRoLmFicyhtYXRyaXhbMV0pO1xyXG5cdFx0cmVzdWx0WzJdID0gTWF0aC5hYnMobWF0cml4WzJdKTtcclxuXHRcdHJlc3VsdFszXSA9IE1hdGguYWJzKG1hdHJpeFszXSk7XHJcblx0XHRyZXN1bHRbNF0gPSBNYXRoLmFicyhtYXRyaXhbNF0pO1xyXG5cdFx0cmVzdWx0WzVdID0gTWF0aC5hYnMobWF0cml4WzVdKTtcclxuXHRcdHJlc3VsdFs2XSA9IE1hdGguYWJzKG1hdHJpeFs2XSk7XHJcblx0XHRyZXN1bHRbN10gPSBNYXRoLmFicyhtYXRyaXhbN10pO1xyXG5cdFx0cmVzdWx0WzhdID0gTWF0aC5hYnMobWF0cml4WzhdKTtcclxuXHJcblx0XHRyZXR1cm4gcmVzdWx0O1xyXG5cdH1cclxuXHJcblx0c3RhdGljIGRldGVybWluYW50KG1hdHJpeDogTWF0cml4Myk6IG51bWJlciB7XHJcblx0XHRjb25zdCBtMTEgPSBtYXRyaXhbMF07XHJcblx0XHRjb25zdCBtMjEgPSBtYXRyaXhbM107XHJcblx0XHRjb25zdCBtMzEgPSBtYXRyaXhbNl07XHJcblx0XHRjb25zdCBtMTIgPSBtYXRyaXhbMV07XHJcblx0XHRjb25zdCBtMjIgPSBtYXRyaXhbNF07XHJcblx0XHRjb25zdCBtMzIgPSBtYXRyaXhbN107XHJcblx0XHRjb25zdCBtMTMgPSBtYXRyaXhbMl07XHJcblx0XHRjb25zdCBtMjMgPSBtYXRyaXhbNV07XHJcblx0XHRjb25zdCBtMzMgPSBtYXRyaXhbOF07XHJcblxyXG5cdFx0cmV0dXJuIG0xMSAqIChtMjIgKiBtMzMgLSBtMjMgKiBtMzIpICsgbTEyICogKG0yMyAqIG0zMSAtIG0yMSAqIG0zMykgKyBtMTMgKiAobTIxICogbTMyIC0gbTIyICogbTMxKTtcclxuXHR9XHJcblxyXG5cdHN0YXRpYyBpbnZlcnNlKG1hdHJpeDogTWF0cml4MywgcmVzdWx0OiBNYXRyaXgzKTogTWF0cml4MyB7XHJcblx0XHRjb25zdCBtMTEgPSBtYXRyaXhbMF07XHJcblx0XHRjb25zdCBtMjEgPSBtYXRyaXhbMV07XHJcblx0XHRjb25zdCBtMzEgPSBtYXRyaXhbMl07XHJcblx0XHRjb25zdCBtMTIgPSBtYXRyaXhbM107XHJcblx0XHRjb25zdCBtMjIgPSBtYXRyaXhbNF07XHJcblx0XHRjb25zdCBtMzIgPSBtYXRyaXhbNV07XHJcblx0XHRjb25zdCBtMTMgPSBtYXRyaXhbNl07XHJcblx0XHRjb25zdCBtMjMgPSBtYXRyaXhbN107XHJcblx0XHRjb25zdCBtMzMgPSBtYXRyaXhbOF07XHJcblxyXG5cdFx0Y29uc3QgZGV0ZXJtaW5hbnQgPSBNYXRyaXgzLmRldGVybWluYW50KG1hdHJpeCk7XHJcblxyXG5cdFx0Ly8gPj5pbmNsdWRlU3RhcnQoJ2RlYnVnJywgcHJhZ21hcy5kZWJ1Zyk7XHJcblx0XHRpZiAoTWF0aC5hYnMoZGV0ZXJtaW5hbnQpIDw9IEdNYXRoLkVQU0lMT04xNSkge1xyXG5cdFx0XHR0aHJvdyBuZXcgRXJyb3IoXCJtYXRyaXggaXMgbm90IGludmVydGlibGVcIik7XHJcblx0XHR9XHJcblx0XHQvLyA+PmluY2x1ZGVFbmQoJ2RlYnVnJyk7XHJcblxyXG5cdFx0cmVzdWx0WzBdID0gbTIyICogbTMzIC0gbTIzICogbTMyO1xyXG5cdFx0cmVzdWx0WzFdID0gbTIzICogbTMxIC0gbTIxICogbTMzO1xyXG5cdFx0cmVzdWx0WzJdID0gbTIxICogbTMyIC0gbTIyICogbTMxO1xyXG5cdFx0cmVzdWx0WzNdID0gbTEzICogbTMyIC0gbTEyICogbTMzO1xyXG5cdFx0cmVzdWx0WzRdID0gbTExICogbTMzIC0gbTEzICogbTMxO1xyXG5cdFx0cmVzdWx0WzVdID0gbTEyICogbTMxIC0gbTExICogbTMyO1xyXG5cdFx0cmVzdWx0WzZdID0gbTEyICogbTIzIC0gbTEzICogbTIyO1xyXG5cdFx0cmVzdWx0WzddID0gbTEzICogbTIxIC0gbTExICogbTIzO1xyXG5cdFx0cmVzdWx0WzhdID0gbTExICogbTIyIC0gbTEyICogbTIxO1xyXG5cclxuXHRcdGNvbnN0IHNjYWxlID0gMS4wIC8gZGV0ZXJtaW5hbnQ7XHJcblx0XHRyZXR1cm4gTWF0cml4My5tdWx0aXBseUJ5U2NhbGFyKHJlc3VsdCwgc2NhbGUsIHJlc3VsdCk7XHJcblx0fVxyXG5cclxuXHRzdGF0aWMgaW52ZXJzZVRyYW5zcG9zZShtYXRyaXg6IE1hdHJpeDMsIHJlc3VsdDogTWF0cml4Mykge1xyXG5cdFx0cmV0dXJuIE1hdHJpeDMuaW52ZXJzZShNYXRyaXgzLnRyYW5zcG9zZShtYXRyaXgsIHNjcmF0Y2hUcmFuc3Bvc2VNYXRyaXgpLCByZXN1bHQpO1xyXG5cdH1cclxuXHJcblx0c3RhdGljIGVxdWFscyhsZWZ0OiBNYXRyaXgzLCByaWdodDogTWF0cml4Myk6IGJvb2xlYW4ge1xyXG5cdFx0cmV0dXJuIChcclxuXHRcdFx0bGVmdCA9PT0gcmlnaHQgfHxcclxuXHRcdFx0KGRlZmluZWQobGVmdCkgJiZcclxuXHRcdFx0XHRkZWZpbmVkKHJpZ2h0KSAmJlxyXG5cdFx0XHRcdGxlZnRbMF0gPT09IHJpZ2h0WzBdICYmXHJcblx0XHRcdFx0bGVmdFsxXSA9PT0gcmlnaHRbMV0gJiZcclxuXHRcdFx0XHRsZWZ0WzJdID09PSByaWdodFsyXSAmJlxyXG5cdFx0XHRcdGxlZnRbM10gPT09IHJpZ2h0WzNdICYmXHJcblx0XHRcdFx0bGVmdFs0XSA9PT0gcmlnaHRbNF0gJiZcclxuXHRcdFx0XHRsZWZ0WzVdID09PSByaWdodFs1XSAmJlxyXG5cdFx0XHRcdGxlZnRbNl0gPT09IHJpZ2h0WzZdICYmXHJcblx0XHRcdFx0bGVmdFs3XSA9PT0gcmlnaHRbN10gJiZcclxuXHRcdFx0XHRsZWZ0WzhdID09PSByaWdodFs4XSlcclxuXHRcdCk7XHJcblx0fVxyXG5cclxuXHRzdGF0aWMgZXF1YWxzRXBzaWxvbihsZWZ0OiBNYXRyaXgzLCByaWdodDogTWF0cml4MywgZXBzaWxvbiA9IDApOiBib29sZWFuIHtcclxuXHRcdGVwc2lsb24gPSBkZWZhdWx0VmFsdWUoZXBzaWxvbiwgMCk7XHJcblxyXG5cdFx0cmV0dXJuIChcclxuXHRcdFx0bGVmdCA9PT0gcmlnaHQgfHxcclxuXHRcdFx0KGRlZmluZWQobGVmdCkgJiZcclxuXHRcdFx0XHRkZWZpbmVkKHJpZ2h0KSAmJlxyXG5cdFx0XHRcdE1hdGguYWJzKGxlZnRbMF0gLSByaWdodFswXSkgPD0gZXBzaWxvbiAmJlxyXG5cdFx0XHRcdE1hdGguYWJzKGxlZnRbMV0gLSByaWdodFsxXSkgPD0gZXBzaWxvbiAmJlxyXG5cdFx0XHRcdE1hdGguYWJzKGxlZnRbMl0gLSByaWdodFsyXSkgPD0gZXBzaWxvbiAmJlxyXG5cdFx0XHRcdE1hdGguYWJzKGxlZnRbM10gLSByaWdodFszXSkgPD0gZXBzaWxvbiAmJlxyXG5cdFx0XHRcdE1hdGguYWJzKGxlZnRbNF0gLSByaWdodFs0XSkgPD0gZXBzaWxvbiAmJlxyXG5cdFx0XHRcdE1hdGguYWJzKGxlZnRbNV0gLSByaWdodFs1XSkgPD0gZXBzaWxvbiAmJlxyXG5cdFx0XHRcdE1hdGguYWJzKGxlZnRbNl0gLSByaWdodFs2XSkgPD0gZXBzaWxvbiAmJlxyXG5cdFx0XHRcdE1hdGguYWJzKGxlZnRbN10gLSByaWdodFs3XSkgPD0gZXBzaWxvbiAmJlxyXG5cdFx0XHRcdE1hdGguYWJzKGxlZnRbOF0gLSByaWdodFs4XSkgPD0gZXBzaWxvbilcclxuXHRcdCk7XHJcblx0fVxyXG5cclxuXHRzdGF0aWMgSURFTlRJVFkgPSBPYmplY3QuZnJlZXplKG5ldyBNYXRyaXgzKDEuMCwgMC4wLCAwLjAsIDAuMCwgMS4wLCAwLjAsIDAuMCwgMC4wLCAxLjApKTtcclxuXHJcblx0c3RhdGljIFpFUk8gPSBPYmplY3QuZnJlZXplKG5ldyBNYXRyaXgzKDAuMCwgMC4wLCAwLjAsIDAuMCwgMC4wLCAwLjAsIDAuMCwgMC4wLCAwLjApKTtcclxuXHJcblx0Y2xvbmUocmVzdWx0OiBNYXRyaXgzKTogTWF0cml4MyB7XHJcblx0XHRyZXR1cm4gTWF0cml4My5jbG9uZSh0aGlzLCByZXN1bHQpO1xyXG5cdH1cclxuXHJcblx0ZXF1YWxzKHJpZ2h0OiBNYXRyaXgzKTogYm9vbGVhbiB7XHJcblx0XHRyZXR1cm4gTWF0cml4My5lcXVhbHModGhpcywgcmlnaHQpO1xyXG5cdH1cclxuXHJcblx0LyoqXHJcblx0ICogQHByaXZhdGVcclxuXHQgKi9cclxuXHRlcXVhbHNBcnJheShtYXRyaXg6IE1hdHJpeDMgfCBudW1iZXJbXSwgYXJyYXk6IG51bWJlcltdLCBvZmZzZXQ6IG51bWJlcik6IGJvb2xlYW4ge1xyXG5cdFx0cmV0dXJuIChcclxuXHRcdFx0bWF0cml4WzBdID09PSBhcnJheVtvZmZzZXRdICYmXHJcblx0XHRcdG1hdHJpeFsxXSA9PT0gYXJyYXlbb2Zmc2V0ICsgMV0gJiZcclxuXHRcdFx0bWF0cml4WzJdID09PSBhcnJheVtvZmZzZXQgKyAyXSAmJlxyXG5cdFx0XHRtYXRyaXhbM10gPT09IGFycmF5W29mZnNldCArIDNdICYmXHJcblx0XHRcdG1hdHJpeFs0XSA9PT0gYXJyYXlbb2Zmc2V0ICsgNF0gJiZcclxuXHRcdFx0bWF0cml4WzVdID09PSBhcnJheVtvZmZzZXQgKyA1XSAmJlxyXG5cdFx0XHRtYXRyaXhbNl0gPT09IGFycmF5W29mZnNldCArIDZdICYmXHJcblx0XHRcdG1hdHJpeFs3XSA9PT0gYXJyYXlbb2Zmc2V0ICsgN10gJiZcclxuXHRcdFx0bWF0cml4WzhdID09PSBhcnJheVtvZmZzZXQgKyA4XVxyXG5cdFx0KTtcclxuXHR9XHJcblxyXG5cdC8qKlxyXG5cdCAqIENvbXBhcmVzIHRoaXMgbWF0cml4IHRvIHRoZSBwcm92aWRlZCBtYXRyaXggY29tcG9uZW50d2lzZSBhbmQgcmV0dXJuc1xyXG5cdCAqIDxjb2RlPnRydWU8L2NvZGU+IGlmIHRoZXkgYXJlIHdpdGhpbiB0aGUgcHJvdmlkZWQgZXBzaWxvbixcclxuXHQgKiA8Y29kZT5mYWxzZTwvY29kZT4gb3RoZXJ3aXNlLlxyXG5cdCAqXHJcblx0ICogQHBhcmFtIHtNYXRyaXgzfSBbcmlnaHRdIFRoZSByaWdodCBoYW5kIHNpZGUgbWF0cml4LlxyXG5cdCAqIEBwYXJhbSB7TnVtYmVyfSBbZXBzaWxvbj0wXSBUaGUgZXBzaWxvbiB0byB1c2UgZm9yIGVxdWFsaXR5IHRlc3RpbmcuXHJcblx0ICogQHJldHVybnMge0Jvb2xlYW59IDxjb2RlPnRydWU8L2NvZGU+IGlmIHRoZXkgYXJlIHdpdGhpbiB0aGUgcHJvdmlkZWQgZXBzaWxvbiwgPGNvZGU+ZmFsc2U8L2NvZGU+IG90aGVyd2lzZS5cclxuXHQgKi9cclxuXHRlcXVhbHNFcHNpbG9uKHJpZ2h0LCBlcHNpbG9uKSB7XHJcblx0XHRyZXR1cm4gTWF0cml4My5lcXVhbHNFcHNpbG9uKHRoaXMsIHJpZ2h0LCBlcHNpbG9uKTtcclxuXHR9XHJcblxyXG5cdHRvU3RyaW5nKCkge1xyXG5cdFx0cmV0dXJuIChcclxuXHRcdFx0YCgke3RoaXNbMF19LCAke3RoaXNbM119LCAke3RoaXNbNl19KVxcbmAgK1xyXG5cdFx0XHRgKCR7dGhpc1sxXX0sICR7dGhpc1s0XX0sICR7dGhpc1s3XX0pXFxuYCArXHJcblx0XHRcdGAoJHt0aGlzWzJdfSwgJHt0aGlzWzVdfSwgJHt0aGlzWzhdfSlgXHJcblx0XHQpO1xyXG5cdH1cclxufVxyXG5cclxuY29uc3Qgc2NhbGVTY3JhdGNoMSA9IG5ldyBWZWN0b3IzKCk7XHJcbmNvbnN0IHNjYWxlU2NyYXRjaDIgPSBuZXcgVmVjdG9yMygpO1xyXG5jb25zdCBzY3JhdGNoQ29sdW1uID0gbmV3IFZlY3RvcjMoKTtcclxuY29uc3Qgc2NhbGVTY3JhdGNoMyA9IG5ldyBWZWN0b3IzKCk7XHJcbmNvbnN0IHNjYWxlU2NyYXRjaDQgPSBuZXcgVmVjdG9yMygpO1xyXG5jb25zdCBzY2FsZVNjcmF0Y2g1ID0gbmV3IFZlY3RvcjMoKTtcclxuXHJcbmZ1bmN0aW9uIGNvbXB1dGVGcm9iZW5pdXNOb3JtKG1hdHJpeCkge1xyXG5cdGxldCBub3JtID0gMC4wO1xyXG5cdGZvciAobGV0IGkgPSAwOyBpIDwgOTsgKytpKSB7XHJcblx0XHRjb25zdCB0ZW1wID0gbWF0cml4W2ldO1xyXG5cdFx0bm9ybSArPSB0ZW1wICogdGVtcDtcclxuXHR9XHJcblxyXG5cdHJldHVybiBNYXRoLnNxcnQobm9ybSk7XHJcbn1cclxuXHJcbmNvbnN0IHJvd1ZhbCA9IFsxLCAwLCAwXTtcclxuY29uc3QgY29sVmFsID0gWzIsIDIsIDFdO1xyXG5cclxuZnVuY3Rpb24gb2ZmRGlhZ29uYWxGcm9iZW5pdXNOb3JtKG1hdHJpeCkge1xyXG5cdC8vIENvbXB1dGVzIHRoZSBcIm9mZi1kaWFnb25hbFwiIEZyb2Jlbml1cyBub3JtLlxyXG5cdC8vIEFzc3VtZXMgbWF0cml4IGlzIHN5bW1ldHJpYy5cclxuXHJcblx0bGV0IG5vcm0gPSAwLjA7XHJcblx0Zm9yIChsZXQgaSA9IDA7IGkgPCAzOyArK2kpIHtcclxuXHRcdGNvbnN0IHRlbXAgPSBtYXRyaXhbTWF0cml4My5nZXRFbGVtZW50SW5kZXgoY29sVmFsW2ldLCByb3dWYWxbaV0pXTtcclxuXHRcdG5vcm0gKz0gMi4wICogdGVtcCAqIHRlbXA7XHJcblx0fVxyXG5cclxuXHRyZXR1cm4gTWF0aC5zcXJ0KG5vcm0pO1xyXG59XHJcblxyXG5mdW5jdGlvbiBzaHVyRGVjb21wb3NpdGlvbihtYXRyaXgsIHJlc3VsdCkge1xyXG5cdC8vIFRoaXMgcm91dGluZSB3YXMgY3JlYXRlZCBiYXNlZCB1cG9uIE1hdHJpeCBDb21wdXRhdGlvbnMsIDNyZCBlZC4sIGJ5IEdvbHViIGFuZCBWYW4gTG9hbixcclxuXHQvLyBzZWN0aW9uIDguNC4yIFRoZSAyYnkyIFN5bW1ldHJpYyBTY2h1ciBEZWNvbXBvc2l0aW9uLlxyXG5cdC8vXHJcblx0Ly8gVGhlIHJvdXRpbmUgdGFrZXMgYSBtYXRyaXgsIHdoaWNoIGlzIGFzc3VtZWQgdG8gYmUgc3ltbWV0cmljLCBhbmRcclxuXHQvLyBmaW5kcyB0aGUgbGFyZ2VzdCBvZmYtZGlhZ29uYWwgdGVybSwgYW5kIHRoZW4gY3JlYXRlc1xyXG5cdC8vIGEgbWF0cml4IChyZXN1bHQpIHdoaWNoIGNhbiBiZSB1c2VkIHRvIGhlbHAgcmVkdWNlIGl0XHJcblxyXG5cdGNvbnN0IHRvbGVyYW5jZSA9IEdNYXRoLkVQU0lMT04xNTtcclxuXHJcblx0bGV0IG1heERpYWdvbmFsID0gMC4wO1xyXG5cdGxldCByb3RBeGlzID0gMTtcclxuXHJcblx0Ly8gZmluZCBwaXZvdCAocm90QXhpcykgYmFzZWQgb24gbWF4IGRpYWdvbmFsIG9mIG1hdHJpeFxyXG5cdGZvciAobGV0IGkgPSAwOyBpIDwgMzsgKytpKSB7XHJcblx0XHRjb25zdCB0ZW1wID0gTWF0aC5hYnMobWF0cml4W01hdHJpeDMuZ2V0RWxlbWVudEluZGV4KGNvbFZhbFtpXSwgcm93VmFsW2ldKV0pO1xyXG5cdFx0aWYgKHRlbXAgPiBtYXhEaWFnb25hbCkge1xyXG5cdFx0XHRyb3RBeGlzID0gaTtcclxuXHRcdFx0bWF4RGlhZ29uYWwgPSB0ZW1wO1xyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0bGV0IGMgPSAxLjA7XHJcblx0bGV0IHMgPSAwLjA7XHJcblxyXG5cdGNvbnN0IHAgPSByb3dWYWxbcm90QXhpc107XHJcblx0Y29uc3QgcSA9IGNvbFZhbFtyb3RBeGlzXTtcclxuXHJcblx0aWYgKE1hdGguYWJzKG1hdHJpeFtNYXRyaXgzLmdldEVsZW1lbnRJbmRleChxLCBwKV0pID4gdG9sZXJhbmNlKSB7XHJcblx0XHRjb25zdCBxcSA9IG1hdHJpeFtNYXRyaXgzLmdldEVsZW1lbnRJbmRleChxLCBxKV07XHJcblx0XHRjb25zdCBwcCA9IG1hdHJpeFtNYXRyaXgzLmdldEVsZW1lbnRJbmRleChwLCBwKV07XHJcblx0XHRjb25zdCBxcCA9IG1hdHJpeFtNYXRyaXgzLmdldEVsZW1lbnRJbmRleChxLCBwKV07XHJcblxyXG5cdFx0Y29uc3QgdGF1ID0gKHFxIC0gcHApIC8gMi4wIC8gcXA7XHJcblx0XHRsZXQgdDtcclxuXHJcblx0XHRpZiAodGF1IDwgMC4wKSB7XHJcblx0XHRcdHQgPSAtMS4wIC8gKC10YXUgKyBNYXRoLnNxcnQoMS4wICsgdGF1ICogdGF1KSk7XHJcblx0XHR9IGVsc2Uge1xyXG5cdFx0XHR0ID0gMS4wIC8gKHRhdSArIE1hdGguc3FydCgxLjAgKyB0YXUgKiB0YXUpKTtcclxuXHRcdH1cclxuXHJcblx0XHRjID0gMS4wIC8gTWF0aC5zcXJ0KDEuMCArIHQgKiB0KTtcclxuXHRcdHMgPSB0ICogYztcclxuXHR9XHJcblxyXG5cdHJlc3VsdCA9IE1hdHJpeDMuY2xvbmUoTWF0cml4My5JREVOVElUWSwgcmVzdWx0KTtcclxuXHJcblx0cmVzdWx0W01hdHJpeDMuZ2V0RWxlbWVudEluZGV4KHAsIHApXSA9IHJlc3VsdFtNYXRyaXgzLmdldEVsZW1lbnRJbmRleChxLCBxKV0gPSBjO1xyXG5cdHJlc3VsdFtNYXRyaXgzLmdldEVsZW1lbnRJbmRleChxLCBwKV0gPSBzO1xyXG5cdHJlc3VsdFtNYXRyaXgzLmdldEVsZW1lbnRJbmRleChwLCBxKV0gPSAtcztcclxuXHJcblx0cmV0dXJuIHJlc3VsdDtcclxufVxyXG5jb25zdCBzY3JhdGNoVHJhbnNwb3NlTWF0cml4ID0gbmV3IE1hdHJpeDMoKTtcclxuZXhwb3J0IGRlZmF1bHQgTWF0cml4MztcclxuIiwiaW1wb3J0IHsgQXR0cmlidXRlIH0gZnJvbSBcIi4uL3JlbmRlci9BdHRyaWJ1dGVcIjtcclxuaW1wb3J0IGRlZmluZWQgZnJvbSBcIi4uL3V0aWxzL2RlZmluZWRcIjtcclxuaW1wb3J0IEdNYXRoIGZyb20gXCIuL01hdGhcIjtcclxuXHJcbmNsYXNzIFZlY3RvcjQge1xyXG5cdHB1YmxpYyBzdGF0aWMgWkVSTyA9IE9iamVjdC5mcmVlemUobmV3IFZlY3RvcjQoMC4wLCAwLjAsIDAuMCwgMC4wKSk7XHJcblxyXG5cdHB1YmxpYyBzdGF0aWMgT05FID0gT2JqZWN0LmZyZWV6ZShuZXcgVmVjdG9yNCgxLjAsIDEuMCwgMS4wLCAxLjApKTtcclxuXHJcblx0cHVibGljIHN0YXRpYyBVTklUX1ggPSBPYmplY3QuZnJlZXplKG5ldyBWZWN0b3I0KDEuMCwgMC4wLCAwLjAsIDAuMCkpO1xyXG5cclxuXHRwdWJsaWMgc3RhdGljIFVOSVRfWSA9IE9iamVjdC5mcmVlemUobmV3IFZlY3RvcjQoMC4wLCAxLjAsIDAuMCwgMC4wKSk7XHJcblxyXG5cdHB1YmxpYyBzdGF0aWMgVU5JVF9aID0gT2JqZWN0LmZyZWV6ZShuZXcgVmVjdG9yNCgwLjAsIDAuMCwgMS4wLCAwLjApKTtcclxuXHJcblx0cHVibGljIHN0YXRpYyBVTklUX1cgPSBPYmplY3QuZnJlZXplKG5ldyBWZWN0b3I0KDAuMCwgMC4wLCAwLjAsIDEuMCkpO1xyXG5cdHg6IG51bWJlcjtcclxuXHR5OiBudW1iZXI7XHJcblx0ejogbnVtYmVyO1xyXG5cdHc6IG51bWJlcjtcclxuXHRjb25zdHJ1Y3Rvcih4ID0gMCwgeSA9IDAsIHogPSAwLCB3ID0gMCkge1xyXG5cdFx0dGhpcy54ID0geDtcclxuXHRcdHRoaXMueSA9IHk7XHJcblx0XHR0aGlzLnogPSB6O1xyXG5cdFx0dGhpcy53ID0gdztcclxuXHR9XHJcblx0c2V0KHg6IG51bWJlciwgeTogbnVtYmVyLCB6OiBudW1iZXIsIHc6IG51bWJlcik6IHZvaWQge1xyXG5cdFx0dGhpcy54ID0geDtcclxuXHRcdHRoaXMueSA9IHk7XHJcblx0XHR0aGlzLnogPSB6O1xyXG5cdFx0dGhpcy53ID0gdztcclxuXHR9XHJcblx0dG9BcnJheSgpOiBudW1iZXJbXSB7XHJcblx0XHRyZXR1cm4gW3RoaXMueCwgdGhpcy55LCB0aGlzLnosIHRoaXMud107XHJcblx0fVxyXG5cclxuXHRjbG9uZShyZXN1bHQ6IFZlY3RvcjQpOiBWZWN0b3I0IHtcclxuXHRcdHJldHVybiBWZWN0b3I0LmNsb25lKHRoaXMsIHJlc3VsdCk7XHJcblx0fVxyXG5cclxuXHRlcXVhbHMocmlnaHQ6IFZlY3RvcjQpOiBib29sZWFuIHtcclxuXHRcdHJldHVybiBWZWN0b3I0LmVxdWFscyh0aGlzLCByaWdodCk7XHJcblx0fVxyXG5cclxuXHRlcXVhbHNFcHNpbG9uKHJpZ2h0OiBWZWN0b3I0LCByZWxhdGl2ZUVwc2lsb24gPSAwLCBhYnNvbHV0ZUVwc2lsb24gPSAwKTogYm9vbGVhbiB7XHJcblx0XHRyZXR1cm4gVmVjdG9yNC5lcXVhbHNFcHNpbG9uKHRoaXMsIHJpZ2h0LCByZWxhdGl2ZUVwc2lsb24sIGFic29sdXRlRXBzaWxvbik7XHJcblx0fVxyXG5cclxuXHR0b1N0cmluZygpOiBzdHJpbmcge1xyXG5cdFx0cmV0dXJuIGAoJHt0aGlzLnh9LCAke3RoaXMueX0sICR7dGhpcy56fSwgJHt0aGlzLnd9KWA7XHJcblx0fVxyXG5cdGZyb21CdWZmZXJBdHRyaWJ1dGUoYXR0cmlidXRlOiBBdHRyaWJ1dGUsIGluZGV4OiBudW1iZXIpOiBWZWN0b3I0IHtcclxuXHRcdHRoaXMueCA9IGF0dHJpYnV0ZS5nZXRYKGluZGV4KTtcclxuXHRcdHRoaXMueSA9IGF0dHJpYnV0ZS5nZXRZKGluZGV4KTtcclxuXHRcdHRoaXMueiA9IGF0dHJpYnV0ZS5nZXRaKGluZGV4KTtcclxuXHRcdHRoaXMudyA9IGF0dHJpYnV0ZS5nZXRXKGluZGV4KTtcclxuXHJcblx0XHRyZXR1cm4gdGhpcztcclxuXHR9XHJcblxyXG5cdHN0YXRpYyBmcm9tRWxlbWVudHMoeDogbnVtYmVyLCB5OiBudW1iZXIsIHo6IG51bWJlciwgdzogbnVtYmVyLCByZXN1bHQ6IFZlY3RvcjQpOiBWZWN0b3I0IHtcclxuXHRcdGlmICghZGVmaW5lZChyZXN1bHQpKSB7XHJcblx0XHRcdHJldHVybiBuZXcgVmVjdG9yNCh4LCB5LCB6LCB3KTtcclxuXHRcdH1cclxuXHJcblx0XHRyZXN1bHQueCA9IHg7XHJcblx0XHRyZXN1bHQueSA9IHk7XHJcblx0XHRyZXN1bHQueiA9IHo7XHJcblx0XHRyZXN1bHQudyA9IHc7XHJcblx0XHRyZXR1cm4gcmVzdWx0O1xyXG5cdH1cclxuXHJcblx0c3RhdGljIGNsb25lKGNhcnRlc2lhbjogVmVjdG9yNCwgcmVzdWx0OiBWZWN0b3I0KTogVmVjdG9yNCB7XHJcblx0XHRpZiAoIWRlZmluZWQoY2FydGVzaWFuKSkge1xyXG5cdFx0XHRyZXR1cm4gdW5kZWZpbmVkO1xyXG5cdFx0fVxyXG5cclxuXHRcdGlmICghZGVmaW5lZChyZXN1bHQpKSB7XHJcblx0XHRcdHJldHVybiBuZXcgVmVjdG9yNChjYXJ0ZXNpYW4ueCwgY2FydGVzaWFuLnksIGNhcnRlc2lhbi56LCBjYXJ0ZXNpYW4udyk7XHJcblx0XHR9XHJcblxyXG5cdFx0cmVzdWx0LnggPSBjYXJ0ZXNpYW4ueDtcclxuXHRcdHJlc3VsdC55ID0gY2FydGVzaWFuLnk7XHJcblx0XHRyZXN1bHQueiA9IGNhcnRlc2lhbi56O1xyXG5cdFx0cmVzdWx0LncgPSBjYXJ0ZXNpYW4udztcclxuXHRcdHJldHVybiByZXN1bHQ7XHJcblx0fVxyXG5cclxuXHRzdGF0aWMgbWF4aW11bUNvbXBvbmVudChjYXJ0ZXNpYW46IFZlY3RvcjQpOiBudW1iZXIge1xyXG5cdFx0cmV0dXJuIE1hdGgubWF4KGNhcnRlc2lhbi54LCBjYXJ0ZXNpYW4ueSwgY2FydGVzaWFuLnosIGNhcnRlc2lhbi53KTtcclxuXHR9XHJcblxyXG5cdHN0YXRpYyBtaW5pbXVtQ29tcG9uZW50KGNhcnRlc2lhbjogVmVjdG9yNCk6IG51bWJlciB7XHJcblx0XHRyZXR1cm4gTWF0aC5taW4oY2FydGVzaWFuLngsIGNhcnRlc2lhbi55LCBjYXJ0ZXNpYW4ueiwgY2FydGVzaWFuLncpO1xyXG5cdH1cclxuXHJcblx0c3RhdGljIG1pbmltdW1CeUNvbXBvbmVudChmaXJzdDogVmVjdG9yNCwgc2Vjb25kOiBWZWN0b3I0LCByZXN1bHQ6IFZlY3RvcjQpOiBWZWN0b3I0IHtcclxuXHRcdHJlc3VsdC54ID0gTWF0aC5taW4oZmlyc3QueCwgc2Vjb25kLngpO1xyXG5cdFx0cmVzdWx0LnkgPSBNYXRoLm1pbihmaXJzdC55LCBzZWNvbmQueSk7XHJcblx0XHRyZXN1bHQueiA9IE1hdGgubWluKGZpcnN0LnosIHNlY29uZC56KTtcclxuXHRcdHJlc3VsdC53ID0gTWF0aC5taW4oZmlyc3Qudywgc2Vjb25kLncpO1xyXG5cclxuXHRcdHJldHVybiByZXN1bHQ7XHJcblx0fVxyXG5cclxuXHRzdGF0aWMgbWF4aW11bUJ5Q29tcG9uZW50KGZpcnN0OiBWZWN0b3I0LCBzZWNvbmQ6IFZlY3RvcjQsIHJlc3VsdDogVmVjdG9yNCk6IFZlY3RvcjQge1xyXG5cdFx0cmVzdWx0LnggPSBNYXRoLm1heChmaXJzdC54LCBzZWNvbmQueCk7XHJcblx0XHRyZXN1bHQueSA9IE1hdGgubWF4KGZpcnN0LnksIHNlY29uZC55KTtcclxuXHRcdHJlc3VsdC56ID0gTWF0aC5tYXgoZmlyc3Queiwgc2Vjb25kLnopO1xyXG5cdFx0cmVzdWx0LncgPSBNYXRoLm1heChmaXJzdC53LCBzZWNvbmQudyk7XHJcblxyXG5cdFx0cmV0dXJuIHJlc3VsdDtcclxuXHR9XHJcblxyXG5cdHN0YXRpYyBjbGFtcCh2YWx1ZTogVmVjdG9yNCwgbWluOiBWZWN0b3I0LCBtYXg6IFZlY3RvcjQsIHJlc3VsdDogVmVjdG9yNCk6IFZlY3RvcjQge1xyXG5cdFx0Y29uc3QgeCA9IEdNYXRoLmNsYW1wKHZhbHVlLngsIG1pbi54LCBtYXgueCk7XHJcblx0XHRjb25zdCB5ID0gR01hdGguY2xhbXAodmFsdWUueSwgbWluLnksIG1heC55KTtcclxuXHRcdGNvbnN0IHogPSBHTWF0aC5jbGFtcCh2YWx1ZS56LCBtaW4ueiwgbWF4LnopO1xyXG5cdFx0Y29uc3QgdyA9IEdNYXRoLmNsYW1wKHZhbHVlLncsIG1pbi53LCBtYXgudyk7XHJcblxyXG5cdFx0cmVzdWx0LnggPSB4O1xyXG5cdFx0cmVzdWx0LnkgPSB5O1xyXG5cdFx0cmVzdWx0LnogPSB6O1xyXG5cdFx0cmVzdWx0LncgPSB3O1xyXG5cclxuXHRcdHJldHVybiByZXN1bHQ7XHJcblx0fVxyXG5cclxuXHRzdGF0aWMgbWFnbml0dWRlU3F1YXJlZChjYXJ0ZXNpYW46IFZlY3RvcjQpOiBudW1iZXIge1xyXG5cdFx0cmV0dXJuIChcclxuXHRcdFx0Y2FydGVzaWFuLnggKiBjYXJ0ZXNpYW4ueCArXHJcblx0XHRcdGNhcnRlc2lhbi55ICogY2FydGVzaWFuLnkgK1xyXG5cdFx0XHRjYXJ0ZXNpYW4ueiAqIGNhcnRlc2lhbi56ICtcclxuXHRcdFx0Y2FydGVzaWFuLncgKiBjYXJ0ZXNpYW4ud1xyXG5cdFx0KTtcclxuXHR9XHJcblxyXG5cdHN0YXRpYyBtYWduaXR1ZGUoY2FydGVzaWFuOiBWZWN0b3I0KTogbnVtYmVyIHtcclxuXHRcdHJldHVybiBNYXRoLnNxcnQoVmVjdG9yNC5tYWduaXR1ZGVTcXVhcmVkKGNhcnRlc2lhbikpO1xyXG5cdH1cclxuXHJcblx0c3RhdGljIGRpc3RhbmNlKGxlZnQ6IFZlY3RvcjQsIHJpZ2h0OiBWZWN0b3I0KTogbnVtYmVyIHtcclxuXHRcdFZlY3RvcjQuc3VidHJhY3QobGVmdCwgcmlnaHQsIGRpc3RhbmNlU2NyYXRjaCk7XHJcblx0XHRyZXR1cm4gVmVjdG9yNC5tYWduaXR1ZGUoZGlzdGFuY2VTY3JhdGNoKTtcclxuXHR9XHJcblxyXG5cdHN0YXRpYyBkaXN0YW5jZVNxdWFyZWQobGVmdDogVmVjdG9yNCwgcmlnaHQ6IFZlY3RvcjQpOiBudW1iZXIge1xyXG5cdFx0VmVjdG9yNC5zdWJ0cmFjdChsZWZ0LCByaWdodCwgZGlzdGFuY2VTY3JhdGNoKTtcclxuXHRcdHJldHVybiBWZWN0b3I0Lm1hZ25pdHVkZVNxdWFyZWQoZGlzdGFuY2VTY3JhdGNoKTtcclxuXHR9XHJcblxyXG5cdHN0YXRpYyBub3JtYWxpemUoY2FydGVzaWFuOiBWZWN0b3I0LCByZXN1bHQ6IFZlY3RvcjQpOiBWZWN0b3I0IHtcclxuXHRcdGNvbnN0IG1hZ25pdHVkZSA9IFZlY3RvcjQubWFnbml0dWRlKGNhcnRlc2lhbik7XHJcblxyXG5cdFx0cmVzdWx0LnggPSBjYXJ0ZXNpYW4ueCAvIG1hZ25pdHVkZTtcclxuXHRcdHJlc3VsdC55ID0gY2FydGVzaWFuLnkgLyBtYWduaXR1ZGU7XHJcblx0XHRyZXN1bHQueiA9IGNhcnRlc2lhbi56IC8gbWFnbml0dWRlO1xyXG5cdFx0cmVzdWx0LncgPSBjYXJ0ZXNpYW4udyAvIG1hZ25pdHVkZTtcclxuXHJcblx0XHQvLyA+PmluY2x1ZGVTdGFydCgnZGVidWcnLCBwcmFnbWFzLmRlYnVnKTtcclxuXHRcdGlmIChpc05hTihyZXN1bHQueCkgfHwgaXNOYU4ocmVzdWx0LnkpIHx8IGlzTmFOKHJlc3VsdC56KSB8fCBpc05hTihyZXN1bHQudykpIHtcclxuXHRcdFx0dGhyb3cgbmV3IEVycm9yKFwibm9ybWFsaXplZCByZXN1bHQgaXMgbm90IGEgbnVtYmVyXCIpO1xyXG5cdFx0fVxyXG5cdFx0Ly8gPj5pbmNsdWRlRW5kKCdkZWJ1ZycpO1xyXG5cclxuXHRcdHJldHVybiByZXN1bHQ7XHJcblx0fVxyXG5cclxuXHRzdGF0aWMgZG90KGxlZnQ6IFZlY3RvcjQsIHJpZ2h0OiBWZWN0b3I0KTogbnVtYmVyIHtcclxuXHRcdHJldHVybiBsZWZ0LnggKiByaWdodC54ICsgbGVmdC55ICogcmlnaHQueSArIGxlZnQueiAqIHJpZ2h0LnogKyBsZWZ0LncgKiByaWdodC53O1xyXG5cdH1cclxuXHJcblx0c3RhdGljIG11bHRpcGx5Q29tcG9uZW50cyhsZWZ0OiBWZWN0b3I0LCByaWdodDogVmVjdG9yNCwgcmVzdWx0OiBWZWN0b3I0KTogVmVjdG9yNCB7XHJcblx0XHRyZXN1bHQueCA9IGxlZnQueCAqIHJpZ2h0Lng7XHJcblx0XHRyZXN1bHQueSA9IGxlZnQueSAqIHJpZ2h0Lnk7XHJcblx0XHRyZXN1bHQueiA9IGxlZnQueiAqIHJpZ2h0Lno7XHJcblx0XHRyZXN1bHQudyA9IGxlZnQudyAqIHJpZ2h0Lnc7XHJcblx0XHRyZXR1cm4gcmVzdWx0O1xyXG5cdH1cclxuXHJcblx0c3RhdGljIGRpdmlkZUNvbXBvbmVudHMobGVmdDogVmVjdG9yNCwgcmlnaHQ6IFZlY3RvcjQsIHJlc3VsdDogVmVjdG9yNCk6IFZlY3RvcjQge1xyXG5cdFx0cmVzdWx0LnggPSBsZWZ0LnggLyByaWdodC54O1xyXG5cdFx0cmVzdWx0LnkgPSBsZWZ0LnkgLyByaWdodC55O1xyXG5cdFx0cmVzdWx0LnogPSBsZWZ0LnogLyByaWdodC56O1xyXG5cdFx0cmVzdWx0LncgPSBsZWZ0LncgLyByaWdodC53O1xyXG5cdFx0cmV0dXJuIHJlc3VsdDtcclxuXHR9XHJcblxyXG5cdHN0YXRpYyBhZGQobGVmdDogVmVjdG9yNCwgcmlnaHQ6IFZlY3RvcjQsIHJlc3VsdDogVmVjdG9yNCk6IFZlY3RvcjQge1xyXG5cdFx0cmVzdWx0LnggPSBsZWZ0LnggKyByaWdodC54O1xyXG5cdFx0cmVzdWx0LnkgPSBsZWZ0LnkgKyByaWdodC55O1xyXG5cdFx0cmVzdWx0LnogPSBsZWZ0LnogKyByaWdodC56O1xyXG5cdFx0cmVzdWx0LncgPSBsZWZ0LncgKyByaWdodC53O1xyXG5cdFx0cmV0dXJuIHJlc3VsdDtcclxuXHR9XHJcblxyXG5cdHN0YXRpYyBzdWJ0cmFjdChsZWZ0OiBWZWN0b3I0LCByaWdodDogVmVjdG9yNCwgcmVzdWx0OiBWZWN0b3I0KTogVmVjdG9yNCB7XHJcblx0XHRyZXN1bHQueCA9IGxlZnQueCAtIHJpZ2h0Lng7XHJcblx0XHRyZXN1bHQueSA9IGxlZnQueSAtIHJpZ2h0Lnk7XHJcblx0XHRyZXN1bHQueiA9IGxlZnQueiAtIHJpZ2h0Lno7XHJcblx0XHRyZXN1bHQudyA9IGxlZnQudyAtIHJpZ2h0Lnc7XHJcblx0XHRyZXR1cm4gcmVzdWx0O1xyXG5cdH1cclxuXHJcblx0c3RhdGljIG11bHRpcGx5QnlTY2FsYXIoY2FydGVzaWFuOiBWZWN0b3I0LCBzY2FsYXI6IG51bWJlciwgcmVzdWx0OiBWZWN0b3I0KTogVmVjdG9yNCB7XHJcblx0XHRyZXN1bHQueCA9IGNhcnRlc2lhbi54ICogc2NhbGFyO1xyXG5cdFx0cmVzdWx0LnkgPSBjYXJ0ZXNpYW4ueSAqIHNjYWxhcjtcclxuXHRcdHJlc3VsdC56ID0gY2FydGVzaWFuLnogKiBzY2FsYXI7XHJcblx0XHRyZXN1bHQudyA9IGNhcnRlc2lhbi53ICogc2NhbGFyO1xyXG5cdFx0cmV0dXJuIHJlc3VsdDtcclxuXHR9XHJcblxyXG5cdHN0YXRpYyBkaXZpZGVCeVNjYWxhcihjYXJ0ZXNpYW46IFZlY3RvcjQsIHNjYWxhcjogbnVtYmVyLCByZXN1bHQ6IFZlY3RvcjQpOiBWZWN0b3I0IHtcclxuXHRcdHJlc3VsdC54ID0gY2FydGVzaWFuLnggLyBzY2FsYXI7XHJcblx0XHRyZXN1bHQueSA9IGNhcnRlc2lhbi55IC8gc2NhbGFyO1xyXG5cdFx0cmVzdWx0LnogPSBjYXJ0ZXNpYW4ueiAvIHNjYWxhcjtcclxuXHRcdHJlc3VsdC53ID0gY2FydGVzaWFuLncgLyBzY2FsYXI7XHJcblx0XHRyZXR1cm4gcmVzdWx0O1xyXG5cdH1cclxuXHJcblx0c3RhdGljIG5lZ2F0ZShjYXJ0ZXNpYW46IFZlY3RvcjQsIHJlc3VsdDogVmVjdG9yNCk6IFZlY3RvcjQge1xyXG5cdFx0cmVzdWx0LnggPSAtY2FydGVzaWFuLng7XHJcblx0XHRyZXN1bHQueSA9IC1jYXJ0ZXNpYW4ueTtcclxuXHRcdHJlc3VsdC56ID0gLWNhcnRlc2lhbi56O1xyXG5cdFx0cmVzdWx0LncgPSAtY2FydGVzaWFuLnc7XHJcblx0XHRyZXR1cm4gcmVzdWx0O1xyXG5cdH1cclxuXHJcblx0c3RhdGljIGFicyhjYXJ0ZXNpYW46IFZlY3RvcjQsIHJlc3VsdDogVmVjdG9yNCk6IFZlY3RvcjQge1xyXG5cdFx0cmVzdWx0LnggPSBNYXRoLmFicyhjYXJ0ZXNpYW4ueCk7XHJcblx0XHRyZXN1bHQueSA9IE1hdGguYWJzKGNhcnRlc2lhbi55KTtcclxuXHRcdHJlc3VsdC56ID0gTWF0aC5hYnMoY2FydGVzaWFuLnopO1xyXG5cdFx0cmVzdWx0LncgPSBNYXRoLmFicyhjYXJ0ZXNpYW4udyk7XHJcblx0XHRyZXR1cm4gcmVzdWx0O1xyXG5cdH1cclxuXHJcblx0c3RhdGljIGxlcnAoc3RhcnQ6IFZlY3RvcjQsIGVuZDogVmVjdG9yNCwgdDogbnVtYmVyLCByZXN1bHQ6IFZlY3RvcjQpOiBWZWN0b3I0IHtcclxuXHRcdFZlY3RvcjQubXVsdGlwbHlCeVNjYWxhcihlbmQsIHQsIGxlcnBTY3JhdGNoKTtcclxuXHRcdHJlc3VsdCA9IFZlY3RvcjQubXVsdGlwbHlCeVNjYWxhcihzdGFydCwgMS4wIC0gdCwgcmVzdWx0KTtcclxuXHRcdHJldHVybiBWZWN0b3I0LmFkZChsZXJwU2NyYXRjaCwgcmVzdWx0LCByZXN1bHQpO1xyXG5cdH1cclxuXHJcblx0c3RhdGljIGVxdWFscyhsZWZ0OiBWZWN0b3I0LCByaWdodDogVmVjdG9yNCk6IGJvb2xlYW4ge1xyXG5cdFx0cmV0dXJuIChcclxuXHRcdFx0bGVmdCA9PT0gcmlnaHQgfHxcclxuXHRcdFx0KGRlZmluZWQobGVmdCkgJiZcclxuXHRcdFx0XHRkZWZpbmVkKHJpZ2h0KSAmJlxyXG5cdFx0XHRcdGxlZnQueCA9PT0gcmlnaHQueCAmJlxyXG5cdFx0XHRcdGxlZnQueSA9PT0gcmlnaHQueSAmJlxyXG5cdFx0XHRcdGxlZnQueiA9PT0gcmlnaHQueiAmJlxyXG5cdFx0XHRcdGxlZnQudyA9PT0gcmlnaHQudylcclxuXHRcdCk7XHJcblx0fVxyXG5cclxuXHRzdGF0aWMgZXF1YWxzQXJyYXkoY2FydGVzaWFuOiBWZWN0b3I0LCBhcnJheTogbnVtYmVyW10sIG9mZnNldDogbnVtYmVyKTogYm9vbGVhbiB7XHJcblx0XHRyZXR1cm4gKFxyXG5cdFx0XHRjYXJ0ZXNpYW4ueCA9PT0gYXJyYXlbb2Zmc2V0XSAmJlxyXG5cdFx0XHRjYXJ0ZXNpYW4ueSA9PT0gYXJyYXlbb2Zmc2V0ICsgMV0gJiZcclxuXHRcdFx0Y2FydGVzaWFuLnogPT09IGFycmF5W29mZnNldCArIDJdICYmXHJcblx0XHRcdGNhcnRlc2lhbi53ID09PSBhcnJheVtvZmZzZXQgKyAzXVxyXG5cdFx0KTtcclxuXHR9XHJcblxyXG5cdHN0YXRpYyBlcXVhbHNFcHNpbG9uKGxlZnQ6IFZlY3RvcjQsIHJpZ2h0OiBWZWN0b3I0LCByZWxhdGl2ZUVwc2lsb24gPSAwLCBhYnNvbHV0ZUVwc2lsb24gPSAwKTogYm9vbGVhbiB7XHJcblx0XHRyZXR1cm4gKFxyXG5cdFx0XHRsZWZ0ID09PSByaWdodCB8fFxyXG5cdFx0XHQoZGVmaW5lZChsZWZ0KSAmJlxyXG5cdFx0XHRcdGRlZmluZWQocmlnaHQpICYmXHJcblx0XHRcdFx0R01hdGguZXF1YWxzRXBzaWxvbihsZWZ0LngsIHJpZ2h0LngsIHJlbGF0aXZlRXBzaWxvbiwgYWJzb2x1dGVFcHNpbG9uKSAmJlxyXG5cdFx0XHRcdEdNYXRoLmVxdWFsc0Vwc2lsb24obGVmdC55LCByaWdodC55LCByZWxhdGl2ZUVwc2lsb24sIGFic29sdXRlRXBzaWxvbikgJiZcclxuXHRcdFx0XHRHTWF0aC5lcXVhbHNFcHNpbG9uKGxlZnQueiwgcmlnaHQueiwgcmVsYXRpdmVFcHNpbG9uLCBhYnNvbHV0ZUVwc2lsb24pICYmXHJcblx0XHRcdFx0R01hdGguZXF1YWxzRXBzaWxvbihsZWZ0LncsIHJpZ2h0LncsIHJlbGF0aXZlRXBzaWxvbiwgYWJzb2x1dGVFcHNpbG9uKSlcclxuXHRcdCk7XHJcblx0fVxyXG59XHJcblxyXG4vLyBzY3JhdGNoVThBcnJheSBhbmQgc2NyYXRjaEYzMkFycmF5IGFyZSB2aWV3cyBpbnRvIHRoZSBzYW1lIGJ1ZmZlclxyXG5jb25zdCBzY3JhdGNoRjMyQXJyYXkgPSBuZXcgRmxvYXQzMkFycmF5KDEpO1xyXG5jb25zdCBzY3JhdGNoVThBcnJheSA9IG5ldyBVaW50OEFycmF5KHNjcmF0Y2hGMzJBcnJheS5idWZmZXIpO1xyXG5cclxuY29uc3QgdGVzdFUzMiA9IG5ldyBVaW50MzJBcnJheShbMHgxMTIyMzM0NF0pO1xyXG5jb25zdCB0ZXN0VTggPSBuZXcgVWludDhBcnJheSh0ZXN0VTMyLmJ1ZmZlcik7XHJcbmNvbnN0IGxpdHRsZUVuZGlhbiA9IHRlc3RVOFswXSA9PT0gMHg0NDtcclxuY29uc3QgZGlzdGFuY2VTY3JhdGNoID0gbmV3IFZlY3RvcjQoKTtcclxuY29uc3QgbGVycFNjcmF0Y2ggPSBuZXcgVmVjdG9yNCgpO1xyXG5jb25zdCBtb3N0T3J0aG9nb25hbEF4aXNTY3JhdGNoID0gbmV3IFZlY3RvcjQoKTtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IFZlY3RvcjQ7XHJcbiIsImltcG9ydCBkZWZhdWx0VmFsdWUgZnJvbSBcIi4uL3V0aWxzL2RlZmF1bHRWYWx1ZVwiO1xuaW1wb3J0IGRlZmluZWQgZnJvbSBcIi4uL3V0aWxzL2RlZmluZWRcIjtcbmltcG9ydCBHTWF0aCBmcm9tIFwiLi9NYXRoXCI7XG5pbXBvcnQgTWF0cml4MyBmcm9tIFwiLi9NYXRyaXgzXCI7XG5pbXBvcnQgeyBRdWF0ZXJuaW9uIH0gZnJvbSBcIi4vUXVhdGVybmlvblwiO1xuaW1wb3J0IFZlY3RvcjMgZnJvbSBcIi4vVmVjdG9yM1wiO1xuaW1wb3J0IFZlY3RvcjQgZnJvbSBcIi4vVmVjdG9yNFwiO1xuY2xhc3MgTWF0cml4NCB7XG5cdHB1YmxpYyBzdGF0aWMgSURFTlRJVFkgPSBPYmplY3QuZnJlZXplKFxuXHRcdG5ldyBNYXRyaXg0KDEuMCwgMC4wLCAwLjAsIDAuMCwgMC4wLCAxLjAsIDAuMCwgMC4wLCAwLjAsIDAuMCwgMS4wLCAwLjAsIDAuMCwgMC4wLCAwLjAsIDEuMClcblx0KTtcblx0cHVibGljIHN0YXRpYyBaRVJPID0gT2JqZWN0LmZyZWV6ZShcblx0XHRuZXcgTWF0cml4NCgwLjAsIDAuMCwgMC4wLCAwLjAsIDAuMCwgMC4wLCAwLjAsIDAuMCwgMC4wLCAwLjAsIDAuMCwgMC4wLCAwLjAsIDAuMCwgMC4wLCAwLjApXG5cdCk7XG5cdC8qKlxuXHQgKiBBIDR4NCBtYXRyaXgsIGluZGV4YWJsZSBhcyBhIGNvbHVtbi1tYWpvciBvcmRlciBhcnJheS5cblx0ICogQHBhcmFtIHtOdW1iZXJ9IFtjb2x1bW4wUm93MD0wLjBdIFRoZSB2YWx1ZSBmb3IgY29sdW1uIDAsIHJvdyAwLlxuXHQgKiBAcGFyYW0ge051bWJlcn0gW2NvbHVtbjFSb3cwPTAuMF0gVGhlIHZhbHVlIGZvciBjb2x1bW4gMSwgcm93IDAuXG5cdCAqIEBwYXJhbSB7TnVtYmVyfSBbY29sdW1uMlJvdzA9MC4wXSBUaGUgdmFsdWUgZm9yIGNvbHVtbiAyLCByb3cgMC5cblx0ICogQHBhcmFtIHtOdW1iZXJ9IFtjb2x1bW4zUm93MD0wLjBdIFRoZSB2YWx1ZSBmb3IgY29sdW1uIDMsIHJvdyAwLlxuXHQgKiBAcGFyYW0ge051bWJlcn0gW2NvbHVtbjBSb3cxPTAuMF0gVGhlIHZhbHVlIGZvciBjb2x1bW4gMCwgcm93IDEuXG5cdCAqIEBwYXJhbSB7TnVtYmVyfSBbY29sdW1uMVJvdzE9MC4wXSBUaGUgdmFsdWUgZm9yIGNvbHVtbiAxLCByb3cgMS5cblx0ICogQHBhcmFtIHtOdW1iZXJ9IFtjb2x1bW4yUm93MT0wLjBdIFRoZSB2YWx1ZSBmb3IgY29sdW1uIDIsIHJvdyAxLlxuXHQgKiBAcGFyYW0ge051bWJlcn0gW2NvbHVtbjNSb3cxPTAuMF0gVGhlIHZhbHVlIGZvciBjb2x1bW4gMywgcm93IDEuXG5cdCAqIEBwYXJhbSB7TnVtYmVyfSBbY29sdW1uMFJvdzI9MC4wXSBUaGUgdmFsdWUgZm9yIGNvbHVtbiAwLCByb3cgMi5cblx0ICogQHBhcmFtIHtOdW1iZXJ9IFtjb2x1bW4xUm93Mj0wLjBdIFRoZSB2YWx1ZSBmb3IgY29sdW1uIDEsIHJvdyAyLlxuXHQgKiBAcGFyYW0ge051bWJlcn0gW2NvbHVtbjJSb3cyPTAuMF0gVGhlIHZhbHVlIGZvciBjb2x1bW4gMiwgcm93IDIuXG5cdCAqIEBwYXJhbSB7TnVtYmVyfSBbY29sdW1uM1JvdzI9MC4wXSBUaGUgdmFsdWUgZm9yIGNvbHVtbiAzLCByb3cgMi5cblx0ICogQHBhcmFtIHtOdW1iZXJ9IFtjb2x1bW4wUm93Mz0wLjBdIFRoZSB2YWx1ZSBmb3IgY29sdW1uIDAsIHJvdyAzLlxuXHQgKiBAcGFyYW0ge051bWJlcn0gW2NvbHVtbjFSb3czPTAuMF0gVGhlIHZhbHVlIGZvciBjb2x1bW4gMSwgcm93IDMuXG5cdCAqIEBwYXJhbSB7TnVtYmVyfSBbY29sdW1uMlJvdzM9MC4wXSBUaGUgdmFsdWUgZm9yIGNvbHVtbiAyLCByb3cgMy5cblx0ICogQHBhcmFtIHtOdW1iZXJ9IFtjb2x1bW4zUm93Mz0wLjBdIFRoZSB2YWx1ZSBmb3IgY29sdW1uIDMsIHJvdyAzLlxuXHQgKi9cblx0Y29uc3RydWN0b3IoXG5cdFx0Y29sdW1uMFJvdzAgPSAwLFxuXHRcdGNvbHVtbjFSb3cwID0gMCxcblx0XHRjb2x1bW4yUm93MCA9IDAsXG5cdFx0Y29sdW1uM1JvdzAgPSAwLFxuXHRcdGNvbHVtbjBSb3cxID0gMCxcblx0XHRjb2x1bW4xUm93MSA9IDAsXG5cdFx0Y29sdW1uMlJvdzEgPSAwLFxuXHRcdGNvbHVtbjNSb3cxID0gMCxcblx0XHRjb2x1bW4wUm93MiA9IDAsXG5cdFx0Y29sdW1uMVJvdzIgPSAwLFxuXHRcdGNvbHVtbjJSb3cyID0gMCxcblx0XHRjb2x1bW4zUm93MiA9IDAsXG5cdFx0Y29sdW1uMFJvdzMgPSAwLFxuXHRcdGNvbHVtbjFSb3czID0gMCxcblx0XHRjb2x1bW4yUm93MyA9IDAsXG5cdFx0Y29sdW1uM1JvdzMgPSAwXG5cdCkge1xuXHRcdHRoaXNbMF0gPSBjb2x1bW4wUm93MDtcblx0XHR0aGlzWzFdID0gY29sdW1uMFJvdzE7XG5cdFx0dGhpc1syXSA9IGNvbHVtbjBSb3cyO1xuXHRcdHRoaXNbM10gPSBjb2x1bW4wUm93Mztcblx0XHR0aGlzWzRdID0gY29sdW1uMVJvdzA7XG5cdFx0dGhpc1s1XSA9IGNvbHVtbjFSb3cxO1xuXHRcdHRoaXNbNl0gPSBjb2x1bW4xUm93Mjtcblx0XHR0aGlzWzddID0gY29sdW1uMVJvdzM7XG5cdFx0dGhpc1s4XSA9IGNvbHVtbjJSb3cwO1xuXHRcdHRoaXNbOV0gPSBjb2x1bW4yUm93MTtcblx0XHR0aGlzWzEwXSA9IGNvbHVtbjJSb3cyO1xuXHRcdHRoaXNbMTFdID0gY29sdW1uMlJvdzM7XG5cdFx0dGhpc1sxMl0gPSBjb2x1bW4zUm93MDtcblx0XHR0aGlzWzEzXSA9IGNvbHVtbjNSb3cxO1xuXHRcdHRoaXNbMTRdID0gY29sdW1uM1JvdzI7XG5cdFx0dGhpc1sxNV0gPSBjb2x1bW4zUm93Mztcblx0fVxuXHQvLyA/Pz8/XG5cdGNsb25lKHJlc3VsdDogTWF0cml4NCA9IG5ldyBNYXRyaXg0KCkpOiBNYXRyaXg0IHtcblx0XHRyZXR1cm4gTWF0cml4NC5jbG9uZSh0aGlzLCByZXN1bHQpO1xuXHR9XG5cdHNldChtYXQ0OiBNYXRyaXg0KSB7XG5cdFx0TWF0cml4NC5jbG9uZShtYXQ0LCB0aGlzKTtcblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXHRlcXVhbHMocmlnaHQ6IE1hdHJpeDQpOiBib29sZWFuIHtcblx0XHRyZXR1cm4gTWF0cml4NC5lcXVhbHModGhpcywgcmlnaHQpO1xuXHR9XG5cdGNvbXBvc2UocG9zaXRpb246IFZlY3RvcjMsIHF1YXRlcm5pb246IFF1YXRlcm5pb24sIHNjYWxlOiBWZWN0b3IzKTogTWF0cml4NCB7XG5cdFx0Y29uc3QgdGUgPSB0aGlzO1xuXG5cdFx0Y29uc3QgeCA9IHF1YXRlcm5pb24ueCxcblx0XHRcdHkgPSBxdWF0ZXJuaW9uLnksXG5cdFx0XHR6ID0gcXVhdGVybmlvbi56LFxuXHRcdFx0dyA9IHF1YXRlcm5pb24udztcblx0XHRjb25zdCB4MiA9IHggKyB4LFxuXHRcdFx0eTIgPSB5ICsgeSxcblx0XHRcdHoyID0geiArIHo7XG5cdFx0Y29uc3QgeHggPSB4ICogeDIsXG5cdFx0XHR4eSA9IHggKiB5Mixcblx0XHRcdHh6ID0geCAqIHoyO1xuXHRcdGNvbnN0IHl5ID0geSAqIHkyLFxuXHRcdFx0eXogPSB5ICogejIsXG5cdFx0XHR6eiA9IHogKiB6Mjtcblx0XHRjb25zdCB3eCA9IHcgKiB4Mixcblx0XHRcdHd5ID0gdyAqIHkyLFxuXHRcdFx0d3ogPSB3ICogejI7XG5cblx0XHRjb25zdCBzeCA9IHNjYWxlLngsXG5cdFx0XHRzeSA9IHNjYWxlLnksXG5cdFx0XHRzeiA9IHNjYWxlLno7XG5cblx0XHR0ZVswXSA9ICgxIC0gKHl5ICsgenopKSAqIHN4O1xuXHRcdHRlWzFdID0gKHh5ICsgd3opICogc3g7XG5cdFx0dGVbMl0gPSAoeHogLSB3eSkgKiBzeDtcblx0XHR0ZVszXSA9IDA7XG5cblx0XHR0ZVs0XSA9ICh4eSAtIHd6KSAqIHN5O1xuXHRcdHRlWzVdID0gKDEgLSAoeHggKyB6eikpICogc3k7XG5cdFx0dGVbNl0gPSAoeXogKyB3eCkgKiBzeTtcblx0XHR0ZVs3XSA9IDA7XG5cblx0XHR0ZVs4XSA9ICh4eiArIHd5KSAqIHN6O1xuXHRcdHRlWzldID0gKHl6IC0gd3gpICogc3o7XG5cdFx0dGVbMTBdID0gKDEgLSAoeHggKyB5eSkpICogc3o7XG5cdFx0dGVbMTFdID0gMDtcblxuXHRcdHRlWzEyXSA9IHBvc2l0aW9uLng7XG5cdFx0dGVbMTNdID0gcG9zaXRpb24ueTtcblx0XHR0ZVsxNF0gPSBwb3NpdGlvbi56O1xuXHRcdHRlWzE1XSA9IDE7XG5cblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXHRlcXVhbHNFcHNpbG9uKHJpZ2h0OiBNYXRyaXg0LCBlcHNpbG9uID0gMCk6IGJvb2xlYW4ge1xuXHRcdHJldHVybiBNYXRyaXg0LmVxdWFsc0Vwc2lsb24odGhpcywgcmlnaHQsIGVwc2lsb24pO1xuXHR9XG5cdGxvb2tBdChleWU6IFZlY3RvcjMsIHRhcmdldDogVmVjdG9yMywgdXA6IFZlY3RvcjMpOiBNYXRyaXg0IHtcblx0XHRjb25zdCBtYXRyaXggPSB0aGlzO1xuXHRcdFZlY3RvcjMuc3VidHJhY3QoZXllLCB0YXJnZXQsIHopO1xuXHRcdGlmICh6Lmxlbmd0aCgpID09PSAwKSB7XG5cdFx0XHQvLyBleWUgYW5kIHRhcmdldCBhcmUgaW4gdGhlIHNhbWUgcG9zaXRpb25cblx0XHRcdHoueiA9IDE7XG5cdFx0fVxuXHRcdHoubm9ybWFsaXplKCk7XG5cdFx0VmVjdG9yMy5jcm9zcyh1cCwgeiwgeCk7XG5cdFx0aWYgKHgubGVuZ3RoKCkgPT09IDApIHtcblx0XHRcdC8vIHVwIGFuZCB6IGFyZSBwYXJhbGxlbFxuXG5cdFx0XHRpZiAoTWF0aC5hYnModXAueikgPT09IDEpIHtcblx0XHRcdFx0ei54ICs9IDAuMDAwMTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHoueiArPSAwLjAwMDE7XG5cdFx0XHR9XG5cdFx0XHR6Lm5vcm1hbGl6ZSgpO1xuXHRcdFx0VmVjdG9yMy5jcm9zcyh1cCwgeiwgeCk7XG5cdFx0fVxuXHRcdHgubm9ybWFsaXplKCk7XG5cdFx0VmVjdG9yMy5jcm9zcyh6LCB4LCB5KTtcblx0XHRtYXRyaXhbMF0gPSB4Lng7XG5cdFx0bWF0cml4WzRdID0geS54O1xuXHRcdG1hdHJpeFs4XSA9IHoueDtcblx0XHRtYXRyaXhbMV0gPSB4Lnk7XG5cdFx0bWF0cml4WzVdID0geS55O1xuXHRcdG1hdHJpeFs5XSA9IHoueTtcblx0XHRtYXRyaXhbMl0gPSB4Lno7XG5cdFx0bWF0cml4WzZdID0geS56O1xuXHRcdG1hdHJpeFsxMF0gPSB6Lno7XG5cblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXHR0b1N0cmluZygpIHtcblx0XHRyZXR1cm4gKFxuXHRcdFx0YCgke3RoaXNbMF19LCAke3RoaXNbNF19LCAke3RoaXNbOF19LCAke3RoaXNbMTJdfSlcXG5gICtcblx0XHRcdGAoJHt0aGlzWzFdfSwgJHt0aGlzWzVdfSwgJHt0aGlzWzldfSwgJHt0aGlzWzEzXX0pXFxuYCArXG5cdFx0XHRgKCR7dGhpc1syXX0sICR7dGhpc1s2XX0sICR7dGhpc1sxMF19LCAke3RoaXNbMTRdfSlcXG5gICtcblx0XHRcdGAoJHt0aGlzWzNdfSwgJHt0aGlzWzddfSwgJHt0aGlzWzExXX0sICR7dGhpc1sxNV19KWBcblx0XHQpO1xuXHR9XG5cdHN0YXRpYyBjbG9uZShtYXRyaXg6IE1hdHJpeDQgfCBudW1iZXJbXSwgcmVzdWx0OiBNYXRyaXg0KTogTWF0cml4NCB7XG5cdFx0aWYgKCFkZWZpbmVkKG1hdHJpeCkpIHtcblx0XHRcdHJldHVybiB1bmRlZmluZWQ7XG5cdFx0fVxuXHRcdGlmICghZGVmaW5lZChyZXN1bHQpKSB7XG5cdFx0XHRyZXR1cm4gbmV3IE1hdHJpeDQoXG5cdFx0XHRcdG1hdHJpeFswXSxcblx0XHRcdFx0bWF0cml4WzRdLFxuXHRcdFx0XHRtYXRyaXhbOF0sXG5cdFx0XHRcdG1hdHJpeFsxMl0sXG5cdFx0XHRcdG1hdHJpeFsxXSxcblx0XHRcdFx0bWF0cml4WzVdLFxuXHRcdFx0XHRtYXRyaXhbOV0sXG5cdFx0XHRcdG1hdHJpeFsxM10sXG5cdFx0XHRcdG1hdHJpeFsyXSxcblx0XHRcdFx0bWF0cml4WzZdLFxuXHRcdFx0XHRtYXRyaXhbMTBdLFxuXHRcdFx0XHRtYXRyaXhbMTRdLFxuXHRcdFx0XHRtYXRyaXhbM10sXG5cdFx0XHRcdG1hdHJpeFs3XSxcblx0XHRcdFx0bWF0cml4WzExXSxcblx0XHRcdFx0bWF0cml4WzE1XVxuXHRcdFx0KTtcblx0XHR9XG5cdFx0cmVzdWx0WzBdID0gbWF0cml4WzBdO1xuXHRcdHJlc3VsdFsxXSA9IG1hdHJpeFsxXTtcblx0XHRyZXN1bHRbMl0gPSBtYXRyaXhbMl07XG5cdFx0cmVzdWx0WzNdID0gbWF0cml4WzNdO1xuXHRcdHJlc3VsdFs0XSA9IG1hdHJpeFs0XTtcblx0XHRyZXN1bHRbNV0gPSBtYXRyaXhbNV07XG5cdFx0cmVzdWx0WzZdID0gbWF0cml4WzZdO1xuXHRcdHJlc3VsdFs3XSA9IG1hdHJpeFs3XTtcblx0XHRyZXN1bHRbOF0gPSBtYXRyaXhbOF07XG5cdFx0cmVzdWx0WzldID0gbWF0cml4WzldO1xuXHRcdHJlc3VsdFsxMF0gPSBtYXRyaXhbMTBdO1xuXHRcdHJlc3VsdFsxMV0gPSBtYXRyaXhbMTFdO1xuXHRcdHJlc3VsdFsxMl0gPSBtYXRyaXhbMTJdO1xuXHRcdHJlc3VsdFsxM10gPSBtYXRyaXhbMTNdO1xuXHRcdHJlc3VsdFsxNF0gPSBtYXRyaXhbMTRdO1xuXHRcdHJlc3VsdFsxNV0gPSBtYXRyaXhbMTVdO1xuXHRcdHJldHVybiByZXN1bHQ7XG5cdH1cblxuXHRzdGF0aWMgZnJvbUNvbHVtbk1ham9yQXJyYXkodmFsdWVzOiBudW1iZXJbXSwgcmVzdWx0OiBNYXRyaXg0KTogTWF0cml4NCB7XG5cdFx0cmV0dXJuIE1hdHJpeDQuY2xvbmUodmFsdWVzLCByZXN1bHQpO1xuXHR9XG5cblx0c3RhdGljIGZyb21Sb3dNYWpvckFycmF5KHZhbHVlczogbnVtYmVyW10sIHJlc3VsdDogTWF0cml4NCk6IE1hdHJpeDQge1xuXHRcdGlmICghZGVmaW5lZChyZXN1bHQpKSB7XG5cdFx0XHRyZXR1cm4gbmV3IE1hdHJpeDQoXG5cdFx0XHRcdHZhbHVlc1swXSxcblx0XHRcdFx0dmFsdWVzWzFdLFxuXHRcdFx0XHR2YWx1ZXNbMl0sXG5cdFx0XHRcdHZhbHVlc1szXSxcblx0XHRcdFx0dmFsdWVzWzRdLFxuXHRcdFx0XHR2YWx1ZXNbNV0sXG5cdFx0XHRcdHZhbHVlc1s2XSxcblx0XHRcdFx0dmFsdWVzWzddLFxuXHRcdFx0XHR2YWx1ZXNbOF0sXG5cdFx0XHRcdHZhbHVlc1s5XSxcblx0XHRcdFx0dmFsdWVzWzEwXSxcblx0XHRcdFx0dmFsdWVzWzExXSxcblx0XHRcdFx0dmFsdWVzWzEyXSxcblx0XHRcdFx0dmFsdWVzWzEzXSxcblx0XHRcdFx0dmFsdWVzWzE0XSxcblx0XHRcdFx0dmFsdWVzWzE1XVxuXHRcdFx0KTtcblx0XHR9XG5cdFx0cmVzdWx0WzBdID0gdmFsdWVzWzBdO1xuXHRcdHJlc3VsdFsxXSA9IHZhbHVlc1s0XTtcblx0XHRyZXN1bHRbMl0gPSB2YWx1ZXNbOF07XG5cdFx0cmVzdWx0WzNdID0gdmFsdWVzWzEyXTtcblx0XHRyZXN1bHRbNF0gPSB2YWx1ZXNbMV07XG5cdFx0cmVzdWx0WzVdID0gdmFsdWVzWzVdO1xuXHRcdHJlc3VsdFs2XSA9IHZhbHVlc1s5XTtcblx0XHRyZXN1bHRbN10gPSB2YWx1ZXNbMTNdO1xuXHRcdHJlc3VsdFs4XSA9IHZhbHVlc1syXTtcblx0XHRyZXN1bHRbOV0gPSB2YWx1ZXNbNl07XG5cdFx0cmVzdWx0WzEwXSA9IHZhbHVlc1sxMF07XG5cdFx0cmVzdWx0WzExXSA9IHZhbHVlc1sxNF07XG5cdFx0cmVzdWx0WzEyXSA9IHZhbHVlc1szXTtcblx0XHRyZXN1bHRbMTNdID0gdmFsdWVzWzddO1xuXHRcdHJlc3VsdFsxNF0gPSB2YWx1ZXNbMTFdO1xuXHRcdHJlc3VsdFsxNV0gPSB2YWx1ZXNbMTVdO1xuXHRcdHJldHVybiByZXN1bHQ7XG5cdH1cblxuXHRzdGF0aWMgZnJvbVJvdGF0aW9uVHJhbnNsYXRpb24ocm90YXRpb246IE1hdHJpeDMsIHRyYW5zbGF0aW9uOiBWZWN0b3IzLCByZXN1bHQ6IE1hdHJpeDQpOiBNYXRyaXg0IHtcblx0XHR0cmFuc2xhdGlvbiA9IGRlZmF1bHRWYWx1ZSh0cmFuc2xhdGlvbiwgVmVjdG9yMy5aRVJPKTtcblxuXHRcdGlmICghZGVmaW5lZChyZXN1bHQpKSB7XG5cdFx0XHRyZXR1cm4gbmV3IE1hdHJpeDQoXG5cdFx0XHRcdHJvdGF0aW9uWzBdLFxuXHRcdFx0XHRyb3RhdGlvblszXSxcblx0XHRcdFx0cm90YXRpb25bNl0sXG5cdFx0XHRcdHRyYW5zbGF0aW9uLngsXG5cdFx0XHRcdHJvdGF0aW9uWzFdLFxuXHRcdFx0XHRyb3RhdGlvbls0XSxcblx0XHRcdFx0cm90YXRpb25bN10sXG5cdFx0XHRcdHRyYW5zbGF0aW9uLnksXG5cdFx0XHRcdHJvdGF0aW9uWzJdLFxuXHRcdFx0XHRyb3RhdGlvbls1XSxcblx0XHRcdFx0cm90YXRpb25bOF0sXG5cdFx0XHRcdHRyYW5zbGF0aW9uLnosXG5cdFx0XHRcdDAuMCxcblx0XHRcdFx0MC4wLFxuXHRcdFx0XHQwLjAsXG5cdFx0XHRcdDEuMFxuXHRcdFx0KTtcblx0XHR9XG5cblx0XHRyZXN1bHRbMF0gPSByb3RhdGlvblswXTtcblx0XHRyZXN1bHRbMV0gPSByb3RhdGlvblsxXTtcblx0XHRyZXN1bHRbMl0gPSByb3RhdGlvblsyXTtcblx0XHRyZXN1bHRbM10gPSAwLjA7XG5cdFx0cmVzdWx0WzRdID0gcm90YXRpb25bM107XG5cdFx0cmVzdWx0WzVdID0gcm90YXRpb25bNF07XG5cdFx0cmVzdWx0WzZdID0gcm90YXRpb25bNV07XG5cdFx0cmVzdWx0WzddID0gMC4wO1xuXHRcdHJlc3VsdFs4XSA9IHJvdGF0aW9uWzZdO1xuXHRcdHJlc3VsdFs5XSA9IHJvdGF0aW9uWzddO1xuXHRcdHJlc3VsdFsxMF0gPSByb3RhdGlvbls4XTtcblx0XHRyZXN1bHRbMTFdID0gMC4wO1xuXHRcdHJlc3VsdFsxMl0gPSB0cmFuc2xhdGlvbi54O1xuXHRcdHJlc3VsdFsxM10gPSB0cmFuc2xhdGlvbi55O1xuXHRcdHJlc3VsdFsxNF0gPSB0cmFuc2xhdGlvbi56O1xuXHRcdHJlc3VsdFsxNV0gPSAxLjA7XG5cdFx0cmV0dXJuIHJlc3VsdDtcblx0fVxuXG5cdHN0YXRpYyBmcm9tVHJhbnNsYXRpb25RdWF0ZXJuaW9uUm90YXRpb25TY2FsZShcblx0XHR0cmFuc2xhdGlvbjogVmVjdG9yMyxcblx0XHRyb3RhdGlvbjogUXVhdGVybmlvbixcblx0XHRzY2FsZTogVmVjdG9yMyxcblx0XHRyZXN1bHQ6IE1hdHJpeDRcblx0KTogTWF0cml4NCB7XG5cdFx0aWYgKCFkZWZpbmVkKHJlc3VsdCkpIHtcblx0XHRcdHJlc3VsdCA9IG5ldyBNYXRyaXg0KCk7XG5cdFx0fVxuXG5cdFx0Y29uc3Qgc2NhbGVYID0gc2NhbGUueDtcblx0XHRjb25zdCBzY2FsZVkgPSBzY2FsZS55O1xuXHRcdGNvbnN0IHNjYWxlWiA9IHNjYWxlLno7XG5cblx0XHRjb25zdCB4MiA9IHJvdGF0aW9uLnggKiByb3RhdGlvbi54O1xuXHRcdGNvbnN0IHh5ID0gcm90YXRpb24ueCAqIHJvdGF0aW9uLnk7XG5cdFx0Y29uc3QgeHogPSByb3RhdGlvbi54ICogcm90YXRpb24uejtcblx0XHRjb25zdCB4dyA9IHJvdGF0aW9uLnggKiByb3RhdGlvbi53O1xuXHRcdGNvbnN0IHkyID0gcm90YXRpb24ueSAqIHJvdGF0aW9uLnk7XG5cdFx0Y29uc3QgeXogPSByb3RhdGlvbi55ICogcm90YXRpb24uejtcblx0XHRjb25zdCB5dyA9IHJvdGF0aW9uLnkgKiByb3RhdGlvbi53O1xuXHRcdGNvbnN0IHoyID0gcm90YXRpb24ueiAqIHJvdGF0aW9uLno7XG5cdFx0Y29uc3QgencgPSByb3RhdGlvbi56ICogcm90YXRpb24udztcblx0XHRjb25zdCB3MiA9IHJvdGF0aW9uLncgKiByb3RhdGlvbi53O1xuXG5cdFx0Y29uc3QgbTAwID0geDIgLSB5MiAtIHoyICsgdzI7XG5cdFx0Y29uc3QgbTAxID0gMi4wICogKHh5IC0gencpO1xuXHRcdGNvbnN0IG0wMiA9IDIuMCAqICh4eiArIHl3KTtcblxuXHRcdGNvbnN0IG0xMCA9IDIuMCAqICh4eSArIHp3KTtcblx0XHRjb25zdCBtMTEgPSAteDIgKyB5MiAtIHoyICsgdzI7XG5cdFx0Y29uc3QgbTEyID0gMi4wICogKHl6IC0geHcpO1xuXG5cdFx0Y29uc3QgbTIwID0gMi4wICogKHh6IC0geXcpO1xuXHRcdGNvbnN0IG0yMSA9IDIuMCAqICh5eiArIHh3KTtcblx0XHRjb25zdCBtMjIgPSAteDIgLSB5MiArIHoyICsgdzI7XG5cblx0XHRyZXN1bHRbMF0gPSBtMDAgKiBzY2FsZVg7XG5cdFx0cmVzdWx0WzFdID0gbTEwICogc2NhbGVYO1xuXHRcdHJlc3VsdFsyXSA9IG0yMCAqIHNjYWxlWDtcblx0XHRyZXN1bHRbM10gPSAwLjA7XG5cdFx0cmVzdWx0WzRdID0gbTAxICogc2NhbGVZO1xuXHRcdHJlc3VsdFs1XSA9IG0xMSAqIHNjYWxlWTtcblx0XHRyZXN1bHRbNl0gPSBtMjEgKiBzY2FsZVk7XG5cdFx0cmVzdWx0WzddID0gMC4wO1xuXHRcdHJlc3VsdFs4XSA9IG0wMiAqIHNjYWxlWjtcblx0XHRyZXN1bHRbOV0gPSBtMTIgKiBzY2FsZVo7XG5cdFx0cmVzdWx0WzEwXSA9IG0yMiAqIHNjYWxlWjtcblx0XHRyZXN1bHRbMTFdID0gMC4wO1xuXHRcdHJlc3VsdFsxMl0gPSB0cmFuc2xhdGlvbi54O1xuXHRcdHJlc3VsdFsxM10gPSB0cmFuc2xhdGlvbi55O1xuXHRcdHJlc3VsdFsxNF0gPSB0cmFuc2xhdGlvbi56O1xuXHRcdHJlc3VsdFsxNV0gPSAxLjA7XG5cblx0XHRyZXR1cm4gcmVzdWx0O1xuXHR9XG5cblx0c3RhdGljIGZyb21UcmFuc2xhdGlvblJvdGF0aW9uU2NhbGUoXG5cdFx0dHJhbnNsYXRpb25Sb3RhdGlvblNjYWxlOiB7XG5cdFx0XHR0cmFuc2xhdGlvbjogVmVjdG9yMztcblx0XHRcdHJvdGF0aW9uOiBRdWF0ZXJuaW9uO1xuXHRcdFx0c2NhbGU6IFZlY3RvcjM7XG5cdFx0fSxcblx0XHRyZXN1bHQ6IE1hdHJpeDRcblx0KTogTWF0cml4NCB7XG5cdFx0cmV0dXJuIE1hdHJpeDQuZnJvbVRyYW5zbGF0aW9uUXVhdGVybmlvblJvdGF0aW9uU2NhbGUoXG5cdFx0XHR0cmFuc2xhdGlvblJvdGF0aW9uU2NhbGUudHJhbnNsYXRpb24sXG5cdFx0XHR0cmFuc2xhdGlvblJvdGF0aW9uU2NhbGUucm90YXRpb24sXG5cdFx0XHR0cmFuc2xhdGlvblJvdGF0aW9uU2NhbGUuc2NhbGUsXG5cdFx0XHRyZXN1bHRcblx0XHQpO1xuXHR9XG5cblx0c3RhdGljIGZyb21UcmFuc2xhdGlvbih0cmFuc2xhdGlvbjogVmVjdG9yMywgcmVzdWx0OiBNYXRyaXg0KTogTWF0cml4NCB7XG5cdFx0cmV0dXJuIE1hdHJpeDQuZnJvbVJvdGF0aW9uVHJhbnNsYXRpb24oTWF0cml4My5JREVOVElUWSwgdHJhbnNsYXRpb24sIHJlc3VsdCk7XG5cdH1cblxuXHRzdGF0aWMgZnJvbVNjYWxlKHNjYWxlOiBWZWN0b3IzLCByZXN1bHQ6IE1hdHJpeDQpOiBNYXRyaXg0IHtcblx0XHRpZiAoIWRlZmluZWQocmVzdWx0KSkge1xuXHRcdFx0cmV0dXJuIG5ldyBNYXRyaXg0KFxuXHRcdFx0XHRzY2FsZS54LFxuXHRcdFx0XHQwLjAsXG5cdFx0XHRcdDAuMCxcblx0XHRcdFx0MC4wLFxuXHRcdFx0XHQwLjAsXG5cdFx0XHRcdHNjYWxlLnksXG5cdFx0XHRcdDAuMCxcblx0XHRcdFx0MC4wLFxuXHRcdFx0XHQwLjAsXG5cdFx0XHRcdDAuMCxcblx0XHRcdFx0c2NhbGUueixcblx0XHRcdFx0MC4wLFxuXHRcdFx0XHQwLjAsXG5cdFx0XHRcdDAuMCxcblx0XHRcdFx0MC4wLFxuXHRcdFx0XHQxLjBcblx0XHRcdCk7XG5cdFx0fVxuXG5cdFx0cmVzdWx0WzBdID0gc2NhbGUueDtcblx0XHRyZXN1bHRbMV0gPSAwLjA7XG5cdFx0cmVzdWx0WzJdID0gMC4wO1xuXHRcdHJlc3VsdFszXSA9IDAuMDtcblx0XHRyZXN1bHRbNF0gPSAwLjA7XG5cdFx0cmVzdWx0WzVdID0gc2NhbGUueTtcblx0XHRyZXN1bHRbNl0gPSAwLjA7XG5cdFx0cmVzdWx0WzddID0gMC4wO1xuXHRcdHJlc3VsdFs4XSA9IDAuMDtcblx0XHRyZXN1bHRbOV0gPSAwLjA7XG5cdFx0cmVzdWx0WzEwXSA9IHNjYWxlLno7XG5cdFx0cmVzdWx0WzExXSA9IDAuMDtcblx0XHRyZXN1bHRbMTJdID0gMC4wO1xuXHRcdHJlc3VsdFsxM10gPSAwLjA7XG5cdFx0cmVzdWx0WzE0XSA9IDAuMDtcblx0XHRyZXN1bHRbMTVdID0gMS4wO1xuXHRcdHJldHVybiByZXN1bHQ7XG5cdH1cblxuXHRzdGF0aWMgZnJvbVJvdGF0aW9uKHJvdGF0aW9uOiBNYXRyaXgzLCByZXN1bHQ6IE1hdHJpeDQpOiBNYXRyaXg0IHtcblx0XHRpZiAoIWRlZmluZWQocmVzdWx0KSkge1xuXHRcdFx0cmVzdWx0ID0gbmV3IE1hdHJpeDQoKTtcblx0XHR9XG5cdFx0cmVzdWx0WzBdID0gcm90YXRpb25bMF07XG5cdFx0cmVzdWx0WzFdID0gcm90YXRpb25bMV07XG5cdFx0cmVzdWx0WzJdID0gcm90YXRpb25bMl07XG5cdFx0cmVzdWx0WzNdID0gMC4wO1xuXG5cdFx0cmVzdWx0WzRdID0gcm90YXRpb25bM107XG5cdFx0cmVzdWx0WzVdID0gcm90YXRpb25bNF07XG5cdFx0cmVzdWx0WzZdID0gcm90YXRpb25bNV07XG5cdFx0cmVzdWx0WzddID0gMC4wO1xuXG5cdFx0cmVzdWx0WzhdID0gcm90YXRpb25bNl07XG5cdFx0cmVzdWx0WzldID0gcm90YXRpb25bN107XG5cdFx0cmVzdWx0WzEwXSA9IHJvdGF0aW9uWzhdO1xuXHRcdHJlc3VsdFsxMV0gPSAwLjA7XG5cblx0XHRyZXN1bHRbMTJdID0gMC4wO1xuXHRcdHJlc3VsdFsxM10gPSAwLjA7XG5cdFx0cmVzdWx0WzE0XSA9IDAuMDtcblx0XHRyZXN1bHRbMTVdID0gMS4wO1xuXG5cdFx0cmV0dXJuIHJlc3VsdDtcblx0fVxuXG5cdHN0YXRpYyBtYWtlUGVyc3BlY3RpdmUoXG5cdFx0bGVmdDogbnVtYmVyLFxuXHRcdHJpZ2h0OiBudW1iZXIsXG5cdFx0dG9wOiBudW1iZXIsXG5cdFx0Ym90dG9tOiBudW1iZXIsXG5cdFx0bmVhcjogbnVtYmVyLFxuXHRcdGZhcjogbnVtYmVyXG5cdCk6IE1hdHJpeDQge1xuXHRcdC8vIGZyb20gdGhyZWUuanNcblx0XHRjb25zdCBtYXRyaXggPSBuZXcgTWF0cml4NCgpO1xuXHRcdGNvbnN0IHggPSAoMiAqIG5lYXIpIC8gKHJpZ2h0IC0gbGVmdCk7XG5cdFx0Y29uc3QgeSA9ICgyICogbmVhcikgLyAodG9wIC0gYm90dG9tKTtcblxuXHRcdGNvbnN0IGEgPSAocmlnaHQgKyBsZWZ0KSAvIChyaWdodCAtIGxlZnQpO1xuXHRcdGNvbnN0IGIgPSAodG9wICsgYm90dG9tKSAvICh0b3AgLSBib3R0b20pO1xuXHRcdGNvbnN0IGMgPSAtZmFyIC8gKGZhciAtIG5lYXIpO1xuXHRcdGNvbnN0IGQgPSAoLWZhciAqIG5lYXIpIC8gKGZhciAtIG5lYXIpO1xuXG5cdFx0bWF0cml4WzBdID0geDtcblx0XHRtYXRyaXhbNF0gPSAwO1xuXHRcdG1hdHJpeFs4XSA9IGE7XG5cdFx0bWF0cml4WzEyXSA9IDA7XG5cdFx0bWF0cml4WzFdID0gMDtcblx0XHRtYXRyaXhbNV0gPSB5O1xuXHRcdG1hdHJpeFs5XSA9IGI7XG5cdFx0bWF0cml4WzEzXSA9IDA7XG5cdFx0bWF0cml4WzJdID0gMDtcblx0XHRtYXRyaXhbNl0gPSAwO1xuXHRcdG1hdHJpeFsxMF0gPSBjO1xuXHRcdG1hdHJpeFsxNF0gPSBkO1xuXHRcdG1hdHJpeFszXSA9IDA7XG5cdFx0bWF0cml4WzddID0gMDtcblx0XHRtYXRyaXhbMTFdID0gLTE7XG5cdFx0bWF0cml4WzE1XSA9IDA7XG5cdFx0cmV0dXJuIG1hdHJpeDtcblx0fVxuXHRzdGF0aWMgbWFrZU9ydGhvZ3JhcGhpYyhcblx0XHRsZWZ0OiBudW1iZXIsXG5cdFx0cmlnaHQ6IG51bWJlcixcblx0XHR0b3A6IG51bWJlcixcblx0XHRib3R0b206IG51bWJlcixcblx0XHRuZWFyOiBudW1iZXIsXG5cdFx0ZmFyOiBudW1iZXJcblx0KTogTWF0cml4NCB7XG5cdFx0Y29uc3QgbWF0cml4ID0gbmV3IE1hdHJpeDQoKTtcblx0XHRjb25zdCB3ID0gMS4wIC8gKHJpZ2h0IC0gbGVmdCk7XG5cdFx0Y29uc3QgaCA9IDEuMCAvICh0b3AgLSBib3R0b20pO1xuXHRcdGNvbnN0IHAgPSAxLjAgLyAoZmFyIC0gbmVhcik7XG5cblx0XHRjb25zdCB4ID0gKHJpZ2h0ICsgbGVmdCkgKiB3O1xuXHRcdGNvbnN0IHkgPSAodG9wICsgYm90dG9tKSAqIGg7XG5cdFx0Y29uc3QgeiA9IG5lYXIgKiBwO1xuXG5cdFx0bWF0cml4WzBdID0gMiAqIHc7XG5cdFx0bWF0cml4WzRdID0gMDtcblx0XHRtYXRyaXhbOF0gPSAwO1xuXHRcdG1hdHJpeFsxMl0gPSAteDtcblx0XHRtYXRyaXhbMV0gPSAwO1xuXHRcdG1hdHJpeFs1XSA9IDIgKiBoO1xuXHRcdG1hdHJpeFs5XSA9IDA7XG5cdFx0bWF0cml4WzEzXSA9IC15O1xuXHRcdG1hdHJpeFsyXSA9IDA7XG5cdFx0bWF0cml4WzZdID0gMDtcblx0XHRtYXRyaXhbMTBdID0gLTEgKiBwO1xuXHRcdG1hdHJpeFsxNF0gPSAtejtcblx0XHRtYXRyaXhbM10gPSAwO1xuXHRcdG1hdHJpeFs3XSA9IDA7XG5cdFx0bWF0cml4WzExXSA9IDA7XG5cdFx0bWF0cml4WzE1XSA9IDE7XG5cdFx0cmV0dXJuIG1hdHJpeDtcblx0fVxuXHR0b0FycmF5KCkge1xuXHRcdGNvbnN0IHJlc3VsdCA9IFtdO1xuXHRcdE1hdHJpeDQudG9BcnJheSh0aGlzLCByZXN1bHQpO1xuXHRcdHJldHVybiByZXN1bHQ7XG5cdH1cblx0LyoqXG5cdCAqIENvbXB1dGVzIGFuIEFycmF5IGZyb20gdGhlIHByb3ZpZGVkIE1hdHJpeDQgaW5zdGFuY2UuXG5cdCAqIFRoZSBhcnJheSB3aWxsIGJlIGluIGNvbHVtbi1tYWpvciBvcmRlci5cblx0ICogQGV4YW1wbGVcblx0ICogLy9jcmVhdGUgYW4gYXJyYXkgZnJvbSBhbiBpbnN0YW5jZSBvZiBNYXRyaXg0XG5cdCAqIC8vIG0gPSBbMTAuMCwgMTQuMCwgMTguMCwgMjIuMF1cblx0ICogLy8gICAgIFsxMS4wLCAxNS4wLCAxOS4wLCAyMy4wXVxuXHQgKiAvLyAgICAgWzEyLjAsIDE2LjAsIDIwLjAsIDI0LjBdXG5cdCAqIC8vICAgICBbMTMuMCwgMTcuMCwgMjEuMCwgMjUuMF1cblx0ICogY29uc3QgYSA9IE1hdHJpeDQudG9BcnJheShtKTtcblx0ICpcblx0ICogLy8gbSByZW1haW5zIHRoZSBzYW1lXG5cdCAqIC8vY3JlYXRlcyBhID0gWzEwLjAsIDExLjAsIDEyLjAsIDEzLjAsIDE0LjAsIDE1LjAsIDE2LjAsIDE3LjAsIDE4LjAsIDE5LjAsIDIwLjAsIDIxLjAsIDIyLjAsIDIzLjAsIDI0LjAsIDI1LjBdXG5cdCAqL1xuXHRzdGF0aWMgdG9BcnJheShtYXRyaXg6IEFycmF5PG51bWJlcj4gfCBNYXRyaXg0LCByZXN1bHQ6IEFycmF5PG51bWJlcj4pOiBBcnJheTxudW1iZXI+IHtcblx0XHRpZiAoIWRlZmluZWQocmVzdWx0KSkge1xuXHRcdFx0cmV0dXJuIFtcblx0XHRcdFx0bWF0cml4WzBdLFxuXHRcdFx0XHRtYXRyaXhbMV0sXG5cdFx0XHRcdG1hdHJpeFsyXSxcblx0XHRcdFx0bWF0cml4WzNdLFxuXHRcdFx0XHRtYXRyaXhbNF0sXG5cdFx0XHRcdG1hdHJpeFs1XSxcblx0XHRcdFx0bWF0cml4WzZdLFxuXHRcdFx0XHRtYXRyaXhbN10sXG5cdFx0XHRcdG1hdHJpeFs4XSxcblx0XHRcdFx0bWF0cml4WzldLFxuXHRcdFx0XHRtYXRyaXhbMTBdLFxuXHRcdFx0XHRtYXRyaXhbMTFdLFxuXHRcdFx0XHRtYXRyaXhbMTJdLFxuXHRcdFx0XHRtYXRyaXhbMTNdLFxuXHRcdFx0XHRtYXRyaXhbMTRdLFxuXHRcdFx0XHRtYXRyaXhbMTVdXG5cdFx0XHRdO1xuXHRcdH1cblx0XHRyZXN1bHRbMF0gPSBtYXRyaXhbMF07XG5cdFx0cmVzdWx0WzFdID0gbWF0cml4WzFdO1xuXHRcdHJlc3VsdFsyXSA9IG1hdHJpeFsyXTtcblx0XHRyZXN1bHRbM10gPSBtYXRyaXhbM107XG5cdFx0cmVzdWx0WzRdID0gbWF0cml4WzRdO1xuXHRcdHJlc3VsdFs1XSA9IG1hdHJpeFs1XTtcblx0XHRyZXN1bHRbNl0gPSBtYXRyaXhbNl07XG5cdFx0cmVzdWx0WzddID0gbWF0cml4WzddO1xuXHRcdHJlc3VsdFs4XSA9IG1hdHJpeFs4XTtcblx0XHRyZXN1bHRbOV0gPSBtYXRyaXhbOV07XG5cdFx0cmVzdWx0WzEwXSA9IG1hdHJpeFsxMF07XG5cdFx0cmVzdWx0WzExXSA9IG1hdHJpeFsxMV07XG5cdFx0cmVzdWx0WzEyXSA9IG1hdHJpeFsxMl07XG5cdFx0cmVzdWx0WzEzXSA9IG1hdHJpeFsxM107XG5cdFx0cmVzdWx0WzE0XSA9IG1hdHJpeFsxNF07XG5cdFx0cmVzdWx0WzE1XSA9IG1hdHJpeFsxNV07XG5cdFx0cmV0dXJuIHJlc3VsdDtcblx0fVxuXG5cdHN0YXRpYyBnZXRFbGVtZW50SW5kZXgoY29sdW1uOiBudW1iZXIsIHJvdzogbnVtYmVyKTogbnVtYmVyIHtcblx0XHRyZXR1cm4gY29sdW1uICogNCArIHJvdztcblx0fVxuXG5cdHN0YXRpYyBnZXRDb2x1bW4obWF0cml4OiBNYXRyaXg0LCBpbmRleDogbnVtYmVyLCByZXN1bHQ6IFZlY3RvcjQpOiBWZWN0b3I0IHtcblx0XHRjb25zdCBzdGFydEluZGV4ID0gaW5kZXggKiA0O1xuXHRcdGNvbnN0IHggPSBtYXRyaXhbc3RhcnRJbmRleF07XG5cdFx0Y29uc3QgeSA9IG1hdHJpeFtzdGFydEluZGV4ICsgMV07XG5cdFx0Y29uc3QgeiA9IG1hdHJpeFtzdGFydEluZGV4ICsgMl07XG5cdFx0Y29uc3QgdyA9IG1hdHJpeFtzdGFydEluZGV4ICsgM107XG5cblx0XHRyZXN1bHQueCA9IHg7XG5cdFx0cmVzdWx0LnkgPSB5O1xuXHRcdHJlc3VsdC56ID0gejtcblx0XHRyZXN1bHQudyA9IHc7XG5cdFx0cmV0dXJuIHJlc3VsdDtcblx0fVxuXG5cdHN0YXRpYyBzZXRDb2x1bW4obWF0cml4OiBNYXRyaXg0LCBpbmRleDogbnVtYmVyLCBjYXJ0ZXNpYW46IFZlY3RvcjQsIHJlc3VsdDogTWF0cml4NCk6IE1hdHJpeDQge1xuXHRcdHJlc3VsdCA9IE1hdHJpeDQuY2xvbmUobWF0cml4LCByZXN1bHQpO1xuXHRcdGNvbnN0IHN0YXJ0SW5kZXggPSBpbmRleCAqIDQ7XG5cdFx0cmVzdWx0W3N0YXJ0SW5kZXhdID0gY2FydGVzaWFuLng7XG5cdFx0cmVzdWx0W3N0YXJ0SW5kZXggKyAxXSA9IGNhcnRlc2lhbi55O1xuXHRcdHJlc3VsdFtzdGFydEluZGV4ICsgMl0gPSBjYXJ0ZXNpYW4uejtcblx0XHRyZXN1bHRbc3RhcnRJbmRleCArIDNdID0gY2FydGVzaWFuLnc7XG5cdFx0cmV0dXJuIHJlc3VsdDtcblx0fVxuXG5cdHN0YXRpYyBnZXRSb3cobWF0cml4OiBNYXRyaXg0LCBpbmRleDogbnVtYmVyLCByZXN1bHQ6IFZlY3RvcjQpOiBWZWN0b3I0IHtcblx0XHRjb25zdCB4ID0gbWF0cml4W2luZGV4XTtcblx0XHRjb25zdCB5ID0gbWF0cml4W2luZGV4ICsgNF07XG5cdFx0Y29uc3QgeiA9IG1hdHJpeFtpbmRleCArIDhdO1xuXHRcdGNvbnN0IHcgPSBtYXRyaXhbaW5kZXggKyAxMl07XG5cblx0XHRyZXN1bHQueCA9IHg7XG5cdFx0cmVzdWx0LnkgPSB5O1xuXHRcdHJlc3VsdC56ID0gejtcblx0XHRyZXN1bHQudyA9IHc7XG5cdFx0cmV0dXJuIHJlc3VsdDtcblx0fVxuXG5cdHN0YXRpYyBzZXRSb3cobWF0cml4OiBNYXRyaXg0LCBpbmRleDogbnVtYmVyLCBjYXJ0ZXNpYW46IFZlY3RvcjQsIHJlc3VsdDogTWF0cml4NCk6IE1hdHJpeDQge1xuXHRcdHJlc3VsdCA9IE1hdHJpeDQuY2xvbmUobWF0cml4LCByZXN1bHQpO1xuXHRcdHJlc3VsdFtpbmRleF0gPSBjYXJ0ZXNpYW4ueDtcblx0XHRyZXN1bHRbaW5kZXggKyA0XSA9IGNhcnRlc2lhbi55O1xuXHRcdHJlc3VsdFtpbmRleCArIDhdID0gY2FydGVzaWFuLno7XG5cdFx0cmVzdWx0W2luZGV4ICsgMTJdID0gY2FydGVzaWFuLnc7XG5cdFx0cmV0dXJuIHJlc3VsdDtcblx0fVxuXG5cdHN0YXRpYyBzZXRUcmFuc2xhdGlvbihtYXRyaXg6IE1hdHJpeDQsIHRyYW5zbGF0aW9uOiBWZWN0b3IzLCByZXN1bHQ6IE1hdHJpeDQpOiBNYXRyaXg0IHtcblx0XHRyZXN1bHRbMF0gPSBtYXRyaXhbMF07XG5cdFx0cmVzdWx0WzFdID0gbWF0cml4WzFdO1xuXHRcdHJlc3VsdFsyXSA9IG1hdHJpeFsyXTtcblx0XHRyZXN1bHRbM10gPSBtYXRyaXhbM107XG5cblx0XHRyZXN1bHRbNF0gPSBtYXRyaXhbNF07XG5cdFx0cmVzdWx0WzVdID0gbWF0cml4WzVdO1xuXHRcdHJlc3VsdFs2XSA9IG1hdHJpeFs2XTtcblx0XHRyZXN1bHRbN10gPSBtYXRyaXhbN107XG5cblx0XHRyZXN1bHRbOF0gPSBtYXRyaXhbOF07XG5cdFx0cmVzdWx0WzldID0gbWF0cml4WzldO1xuXHRcdHJlc3VsdFsxMF0gPSBtYXRyaXhbMTBdO1xuXHRcdHJlc3VsdFsxMV0gPSBtYXRyaXhbMTFdO1xuXG5cdFx0cmVzdWx0WzEyXSA9IHRyYW5zbGF0aW9uLng7XG5cdFx0cmVzdWx0WzEzXSA9IHRyYW5zbGF0aW9uLnk7XG5cdFx0cmVzdWx0WzE0XSA9IHRyYW5zbGF0aW9uLno7XG5cdFx0cmVzdWx0WzE1XSA9IG1hdHJpeFsxNV07XG5cblx0XHRyZXR1cm4gcmVzdWx0O1xuXHR9XG5cblx0c3RhdGljIHNldFNjYWxlKG1hdHJpeDogTWF0cml4NCwgc2NhbGU6IFZlY3RvcjMsIHJlc3VsdDogTWF0cml4NCk6IE1hdHJpeDQge1xuXHRcdGNvbnN0IGV4aXN0aW5nU2NhbGUgPSBNYXRyaXg0LmdldFNjYWxlKG1hdHJpeCwgc2NhbGVTY3JhdGNoMSk7XG5cdFx0Y29uc3Qgc2NhbGVSYXRpb1ggPSBzY2FsZS54IC8gZXhpc3RpbmdTY2FsZS54O1xuXHRcdGNvbnN0IHNjYWxlUmF0aW9ZID0gc2NhbGUueSAvIGV4aXN0aW5nU2NhbGUueTtcblx0XHRjb25zdCBzY2FsZVJhdGlvWiA9IHNjYWxlLnogLyBleGlzdGluZ1NjYWxlLno7XG5cblx0XHRyZXN1bHRbMF0gPSBtYXRyaXhbMF0gKiBzY2FsZVJhdGlvWDtcblx0XHRyZXN1bHRbMV0gPSBtYXRyaXhbMV0gKiBzY2FsZVJhdGlvWDtcblx0XHRyZXN1bHRbMl0gPSBtYXRyaXhbMl0gKiBzY2FsZVJhdGlvWDtcblx0XHRyZXN1bHRbM10gPSBtYXRyaXhbM107XG5cblx0XHRyZXN1bHRbNF0gPSBtYXRyaXhbNF0gKiBzY2FsZVJhdGlvWTtcblx0XHRyZXN1bHRbNV0gPSBtYXRyaXhbNV0gKiBzY2FsZVJhdGlvWTtcblx0XHRyZXN1bHRbNl0gPSBtYXRyaXhbNl0gKiBzY2FsZVJhdGlvWTtcblx0XHRyZXN1bHRbN10gPSBtYXRyaXhbN107XG5cblx0XHRyZXN1bHRbOF0gPSBtYXRyaXhbOF0gKiBzY2FsZVJhdGlvWjtcblx0XHRyZXN1bHRbOV0gPSBtYXRyaXhbOV0gKiBzY2FsZVJhdGlvWjtcblx0XHRyZXN1bHRbMTBdID0gbWF0cml4WzEwXSAqIHNjYWxlUmF0aW9aO1xuXHRcdHJlc3VsdFsxMV0gPSBtYXRyaXhbMTFdO1xuXG5cdFx0cmVzdWx0WzEyXSA9IG1hdHJpeFsxMl07XG5cdFx0cmVzdWx0WzEzXSA9IG1hdHJpeFsxM107XG5cdFx0cmVzdWx0WzE0XSA9IG1hdHJpeFsxNF07XG5cdFx0cmVzdWx0WzE1XSA9IG1hdHJpeFsxNV07XG5cblx0XHRyZXR1cm4gcmVzdWx0O1xuXHR9XG5cblx0c3RhdGljIGdldFNjYWxlKG1hdHJpeDogTWF0cml4NCwgcmVzdWx0OiBWZWN0b3IzKTogVmVjdG9yMyB7XG5cdFx0cmVzdWx0LnggPSBWZWN0b3IzLm1hZ25pdHVkZShWZWN0b3IzLmZyb21FbGVtZW50cyhtYXRyaXhbMF0sIG1hdHJpeFsxXSwgbWF0cml4WzJdLCBzY3JhdGNoQ29sdW1uKSk7XG5cdFx0cmVzdWx0LnkgPSBWZWN0b3IzLm1hZ25pdHVkZShWZWN0b3IzLmZyb21FbGVtZW50cyhtYXRyaXhbNF0sIG1hdHJpeFs1XSwgbWF0cml4WzZdLCBzY3JhdGNoQ29sdW1uKSk7XG5cdFx0cmVzdWx0LnogPSBWZWN0b3IzLm1hZ25pdHVkZShWZWN0b3IzLmZyb21FbGVtZW50cyhtYXRyaXhbOF0sIG1hdHJpeFs5XSwgbWF0cml4WzEwXSwgc2NyYXRjaENvbHVtbikpO1xuXHRcdHJldHVybiByZXN1bHQ7XG5cdH1cblxuXHRzdGF0aWMgZ2V0TWF4aW11bVNjYWxlKG1hdHJpeDogTWF0cml4NCk6IG51bWJlciB7XG5cdFx0TWF0cml4NC5nZXRTY2FsZShtYXRyaXgsIHNjYWxlU2NyYXRjaDMpO1xuXHRcdHJldHVybiBWZWN0b3IzLm1heGltdW1Db21wb25lbnQoc2NhbGVTY3JhdGNoMyk7XG5cdH1cblxuXHRzdGF0aWMgc2V0Um90YXRpb24obWF0cml4OiBNYXRyaXg0LCByb3RhdGlvbjogTWF0cml4MywgcmVzdWx0OiBNYXRyaXg0KTogTWF0cml4NCB7XG5cdFx0Y29uc3Qgc2NhbGUgPSBNYXRyaXg0LmdldFNjYWxlKG1hdHJpeCwgc2NhbGVTY3JhdGNoNCk7XG5cblx0XHRyZXN1bHRbMF0gPSByb3RhdGlvblswXSAqIHNjYWxlLng7XG5cdFx0cmVzdWx0WzFdID0gcm90YXRpb25bMV0gKiBzY2FsZS54O1xuXHRcdHJlc3VsdFsyXSA9IHJvdGF0aW9uWzJdICogc2NhbGUueDtcblx0XHRyZXN1bHRbM10gPSBtYXRyaXhbM107XG5cblx0XHRyZXN1bHRbNF0gPSByb3RhdGlvblszXSAqIHNjYWxlLnk7XG5cdFx0cmVzdWx0WzVdID0gcm90YXRpb25bNF0gKiBzY2FsZS55O1xuXHRcdHJlc3VsdFs2XSA9IHJvdGF0aW9uWzVdICogc2NhbGUueTtcblx0XHRyZXN1bHRbN10gPSBtYXRyaXhbN107XG5cblx0XHRyZXN1bHRbOF0gPSByb3RhdGlvbls2XSAqIHNjYWxlLno7XG5cdFx0cmVzdWx0WzldID0gcm90YXRpb25bN10gKiBzY2FsZS56O1xuXHRcdHJlc3VsdFsxMF0gPSByb3RhdGlvbls4XSAqIHNjYWxlLno7XG5cdFx0cmVzdWx0WzExXSA9IG1hdHJpeFsxMV07XG5cblx0XHRyZXN1bHRbMTJdID0gbWF0cml4WzEyXTtcblx0XHRyZXN1bHRbMTNdID0gbWF0cml4WzEzXTtcblx0XHRyZXN1bHRbMTRdID0gbWF0cml4WzE0XTtcblx0XHRyZXN1bHRbMTVdID0gbWF0cml4WzE1XTtcblxuXHRcdHJldHVybiByZXN1bHQ7XG5cdH1cblxuXHRzdGF0aWMgZ2V0Um90YXRpb24obWF0cml4OiBNYXRyaXg0LCByZXN1bHQ6IFF1YXRlcm5pb24pOiBRdWF0ZXJuaW9uIHtcblx0XHRjb25zdCBzY2FsZSA9IE1hdHJpeDQuZ2V0U2NhbGUobWF0cml4LCBzY2FsZVNjcmF0Y2g1KTtcblxuXHRcdGNvbnN0IGlzMSA9IDEgLyBzY2FsZS54O1xuXHRcdGNvbnN0IGlzMiA9IDEgLyBzY2FsZS55O1xuXHRcdGNvbnN0IGlzMyA9IDEgLyBzY2FsZS56O1xuXG5cdFx0Y29uc3Qgc20xMSA9IG1hdHJpeFswXSAqIGlzMTtcblx0XHRjb25zdCBzbTEyID0gbWF0cml4WzFdICogaXMyO1xuXHRcdGNvbnN0IHNtMTMgPSBtYXRyaXhbMl0gKiBpczM7XG5cdFx0Y29uc3Qgc20yMSA9IG1hdHJpeFs0XSAqIGlzMTtcblx0XHRjb25zdCBzbTIyID0gbWF0cml4WzVdICogaXMyO1xuXHRcdGNvbnN0IHNtMjMgPSBtYXRyaXhbNl0gKiBpczM7XG5cdFx0Y29uc3Qgc20zMSA9IG1hdHJpeFs4XSAqIGlzMTtcblx0XHRjb25zdCBzbTMyID0gbWF0cml4WzldICogaXMyO1xuXHRcdGNvbnN0IHNtMzMgPSBtYXRyaXhbMTBdICogaXMzO1xuXG5cdFx0Y29uc3QgdHJhY2UgPSBzbTExICsgc20yMiArIHNtMzM7XG5cdFx0bGV0IFMgPSAwO1xuXG5cdFx0aWYgKHRyYWNlID4gMCkge1xuXHRcdFx0UyA9IE1hdGguc3FydCh0cmFjZSArIDEuMCkgKiAyO1xuXHRcdFx0cmVzdWx0LncgPSAwLjI1ICogUztcblx0XHRcdHJlc3VsdC54ID0gKHNtMjMgLSBzbTMyKSAvIFM7XG5cdFx0XHRyZXN1bHQueSA9IChzbTMxIC0gc20xMykgLyBTO1xuXHRcdFx0cmVzdWx0LnogPSAoc20xMiAtIHNtMjEpIC8gUztcblx0XHR9IGVsc2UgaWYgKHNtMTEgPiBzbTIyICYmIHNtMTEgPiBzbTMzKSB7XG5cdFx0XHRTID0gTWF0aC5zcXJ0KDEuMCArIHNtMTEgLSBzbTIyIC0gc20zMykgKiAyO1xuXHRcdFx0cmVzdWx0LncgPSAoc20yMyAtIHNtMzIpIC8gUztcblx0XHRcdHJlc3VsdC54ID0gMC4yNSAqIFM7XG5cdFx0XHRyZXN1bHQueSA9IChzbTEyICsgc20yMSkgLyBTO1xuXHRcdFx0cmVzdWx0LnogPSAoc20zMSArIHNtMTMpIC8gUztcblx0XHR9IGVsc2UgaWYgKHNtMjIgPiBzbTMzKSB7XG5cdFx0XHRTID0gTWF0aC5zcXJ0KDEuMCArIHNtMjIgLSBzbTExIC0gc20zMykgKiAyO1xuXHRcdFx0cmVzdWx0LncgPSAoc20zMSAtIHNtMTMpIC8gUztcblx0XHRcdHJlc3VsdC54ID0gKHNtMTIgKyBzbTIxKSAvIFM7XG5cdFx0XHRyZXN1bHQueSA9IDAuMjUgKiBTO1xuXHRcdFx0cmVzdWx0LnogPSAoc20yMyArIHNtMzIpIC8gUztcblx0XHR9IGVsc2Uge1xuXHRcdFx0UyA9IE1hdGguc3FydCgxLjAgKyBzbTMzIC0gc20xMSAtIHNtMjIpICogMjtcblx0XHRcdHJlc3VsdC53ID0gKHNtMTIgLSBzbTIxKSAvIFM7XG5cdFx0XHRyZXN1bHQueCA9IChzbTMxICsgc20xMykgLyBTO1xuXHRcdFx0cmVzdWx0LnkgPSAoc20yMyArIHNtMzIpIC8gUztcblx0XHRcdHJlc3VsdC56ID0gMC4yNSAqIFM7XG5cdFx0fVxuXHRcdHJldHVybiByZXN1bHQ7XG5cdH1cblxuXHRzdGF0aWMgbXVsdGlwbHkobGVmdDogTWF0cml4NCwgcmlnaHQ6IE1hdHJpeDQsIHJlc3VsdDogTWF0cml4NCk6IE1hdHJpeDQge1xuXHRcdGNvbnN0IGxlZnQwID0gbGVmdFswXTtcblx0XHRjb25zdCBsZWZ0MSA9IGxlZnRbMV07XG5cdFx0Y29uc3QgbGVmdDIgPSBsZWZ0WzJdO1xuXHRcdGNvbnN0IGxlZnQzID0gbGVmdFszXTtcblx0XHRjb25zdCBsZWZ0NCA9IGxlZnRbNF07XG5cdFx0Y29uc3QgbGVmdDUgPSBsZWZ0WzVdO1xuXHRcdGNvbnN0IGxlZnQ2ID0gbGVmdFs2XTtcblx0XHRjb25zdCBsZWZ0NyA9IGxlZnRbN107XG5cdFx0Y29uc3QgbGVmdDggPSBsZWZ0WzhdO1xuXHRcdGNvbnN0IGxlZnQ5ID0gbGVmdFs5XTtcblx0XHRjb25zdCBsZWZ0MTAgPSBsZWZ0WzEwXTtcblx0XHRjb25zdCBsZWZ0MTEgPSBsZWZ0WzExXTtcblx0XHRjb25zdCBsZWZ0MTIgPSBsZWZ0WzEyXTtcblx0XHRjb25zdCBsZWZ0MTMgPSBsZWZ0WzEzXTtcblx0XHRjb25zdCBsZWZ0MTQgPSBsZWZ0WzE0XTtcblx0XHRjb25zdCBsZWZ0MTUgPSBsZWZ0WzE1XTtcblxuXHRcdGNvbnN0IHJpZ2h0MCA9IHJpZ2h0WzBdO1xuXHRcdGNvbnN0IHJpZ2h0MSA9IHJpZ2h0WzFdO1xuXHRcdGNvbnN0IHJpZ2h0MiA9IHJpZ2h0WzJdO1xuXHRcdGNvbnN0IHJpZ2h0MyA9IHJpZ2h0WzNdO1xuXHRcdGNvbnN0IHJpZ2h0NCA9IHJpZ2h0WzRdO1xuXHRcdGNvbnN0IHJpZ2h0NSA9IHJpZ2h0WzVdO1xuXHRcdGNvbnN0IHJpZ2h0NiA9IHJpZ2h0WzZdO1xuXHRcdGNvbnN0IHJpZ2h0NyA9IHJpZ2h0WzddO1xuXHRcdGNvbnN0IHJpZ2h0OCA9IHJpZ2h0WzhdO1xuXHRcdGNvbnN0IHJpZ2h0OSA9IHJpZ2h0WzldO1xuXHRcdGNvbnN0IHJpZ2h0MTAgPSByaWdodFsxMF07XG5cdFx0Y29uc3QgcmlnaHQxMSA9IHJpZ2h0WzExXTtcblx0XHRjb25zdCByaWdodDEyID0gcmlnaHRbMTJdO1xuXHRcdGNvbnN0IHJpZ2h0MTMgPSByaWdodFsxM107XG5cdFx0Y29uc3QgcmlnaHQxNCA9IHJpZ2h0WzE0XTtcblx0XHRjb25zdCByaWdodDE1ID0gcmlnaHRbMTVdO1xuXG5cdFx0Y29uc3QgY29sdW1uMFJvdzAgPSBsZWZ0MCAqIHJpZ2h0MCArIGxlZnQ0ICogcmlnaHQxICsgbGVmdDggKiByaWdodDIgKyBsZWZ0MTIgKiByaWdodDM7XG5cdFx0Y29uc3QgY29sdW1uMFJvdzEgPSBsZWZ0MSAqIHJpZ2h0MCArIGxlZnQ1ICogcmlnaHQxICsgbGVmdDkgKiByaWdodDIgKyBsZWZ0MTMgKiByaWdodDM7XG5cdFx0Y29uc3QgY29sdW1uMFJvdzIgPSBsZWZ0MiAqIHJpZ2h0MCArIGxlZnQ2ICogcmlnaHQxICsgbGVmdDEwICogcmlnaHQyICsgbGVmdDE0ICogcmlnaHQzO1xuXHRcdGNvbnN0IGNvbHVtbjBSb3czID0gbGVmdDMgKiByaWdodDAgKyBsZWZ0NyAqIHJpZ2h0MSArIGxlZnQxMSAqIHJpZ2h0MiArIGxlZnQxNSAqIHJpZ2h0MztcblxuXHRcdGNvbnN0IGNvbHVtbjFSb3cwID0gbGVmdDAgKiByaWdodDQgKyBsZWZ0NCAqIHJpZ2h0NSArIGxlZnQ4ICogcmlnaHQ2ICsgbGVmdDEyICogcmlnaHQ3O1xuXHRcdGNvbnN0IGNvbHVtbjFSb3cxID0gbGVmdDEgKiByaWdodDQgKyBsZWZ0NSAqIHJpZ2h0NSArIGxlZnQ5ICogcmlnaHQ2ICsgbGVmdDEzICogcmlnaHQ3O1xuXHRcdGNvbnN0IGNvbHVtbjFSb3cyID0gbGVmdDIgKiByaWdodDQgKyBsZWZ0NiAqIHJpZ2h0NSArIGxlZnQxMCAqIHJpZ2h0NiArIGxlZnQxNCAqIHJpZ2h0Nztcblx0XHRjb25zdCBjb2x1bW4xUm93MyA9IGxlZnQzICogcmlnaHQ0ICsgbGVmdDcgKiByaWdodDUgKyBsZWZ0MTEgKiByaWdodDYgKyBsZWZ0MTUgKiByaWdodDc7XG5cblx0XHRjb25zdCBjb2x1bW4yUm93MCA9IGxlZnQwICogcmlnaHQ4ICsgbGVmdDQgKiByaWdodDkgKyBsZWZ0OCAqIHJpZ2h0MTAgKyBsZWZ0MTIgKiByaWdodDExO1xuXHRcdGNvbnN0IGNvbHVtbjJSb3cxID0gbGVmdDEgKiByaWdodDggKyBsZWZ0NSAqIHJpZ2h0OSArIGxlZnQ5ICogcmlnaHQxMCArIGxlZnQxMyAqIHJpZ2h0MTE7XG5cdFx0Y29uc3QgY29sdW1uMlJvdzIgPSBsZWZ0MiAqIHJpZ2h0OCArIGxlZnQ2ICogcmlnaHQ5ICsgbGVmdDEwICogcmlnaHQxMCArIGxlZnQxNCAqIHJpZ2h0MTE7XG5cdFx0Y29uc3QgY29sdW1uMlJvdzMgPSBsZWZ0MyAqIHJpZ2h0OCArIGxlZnQ3ICogcmlnaHQ5ICsgbGVmdDExICogcmlnaHQxMCArIGxlZnQxNSAqIHJpZ2h0MTE7XG5cblx0XHRjb25zdCBjb2x1bW4zUm93MCA9IGxlZnQwICogcmlnaHQxMiArIGxlZnQ0ICogcmlnaHQxMyArIGxlZnQ4ICogcmlnaHQxNCArIGxlZnQxMiAqIHJpZ2h0MTU7XG5cdFx0Y29uc3QgY29sdW1uM1JvdzEgPSBsZWZ0MSAqIHJpZ2h0MTIgKyBsZWZ0NSAqIHJpZ2h0MTMgKyBsZWZ0OSAqIHJpZ2h0MTQgKyBsZWZ0MTMgKiByaWdodDE1O1xuXHRcdGNvbnN0IGNvbHVtbjNSb3cyID0gbGVmdDIgKiByaWdodDEyICsgbGVmdDYgKiByaWdodDEzICsgbGVmdDEwICogcmlnaHQxNCArIGxlZnQxNCAqIHJpZ2h0MTU7XG5cdFx0Y29uc3QgY29sdW1uM1JvdzMgPSBsZWZ0MyAqIHJpZ2h0MTIgKyBsZWZ0NyAqIHJpZ2h0MTMgKyBsZWZ0MTEgKiByaWdodDE0ICsgbGVmdDE1ICogcmlnaHQxNTtcblxuXHRcdHJlc3VsdFswXSA9IGNvbHVtbjBSb3cwO1xuXHRcdHJlc3VsdFsxXSA9IGNvbHVtbjBSb3cxO1xuXHRcdHJlc3VsdFsyXSA9IGNvbHVtbjBSb3cyO1xuXHRcdHJlc3VsdFszXSA9IGNvbHVtbjBSb3czO1xuXHRcdHJlc3VsdFs0XSA9IGNvbHVtbjFSb3cwO1xuXHRcdHJlc3VsdFs1XSA9IGNvbHVtbjFSb3cxO1xuXHRcdHJlc3VsdFs2XSA9IGNvbHVtbjFSb3cyO1xuXHRcdHJlc3VsdFs3XSA9IGNvbHVtbjFSb3czO1xuXHRcdHJlc3VsdFs4XSA9IGNvbHVtbjJSb3cwO1xuXHRcdHJlc3VsdFs5XSA9IGNvbHVtbjJSb3cxO1xuXHRcdHJlc3VsdFsxMF0gPSBjb2x1bW4yUm93Mjtcblx0XHRyZXN1bHRbMTFdID0gY29sdW1uMlJvdzM7XG5cdFx0cmVzdWx0WzEyXSA9IGNvbHVtbjNSb3cwO1xuXHRcdHJlc3VsdFsxM10gPSBjb2x1bW4zUm93MTtcblx0XHRyZXN1bHRbMTRdID0gY29sdW1uM1JvdzI7XG5cdFx0cmVzdWx0WzE1XSA9IGNvbHVtbjNSb3czO1xuXHRcdHJldHVybiByZXN1bHQ7XG5cdH1cblxuXHRzdGF0aWMgYWRkKGxlZnQ6IE1hdHJpeDQsIHJpZ2h0OiBNYXRyaXg0LCByZXN1bHQ6IE1hdHJpeDQpOiBNYXRyaXg0IHtcblx0XHRyZXN1bHRbMF0gPSBsZWZ0WzBdICsgcmlnaHRbMF07XG5cdFx0cmVzdWx0WzFdID0gbGVmdFsxXSArIHJpZ2h0WzFdO1xuXHRcdHJlc3VsdFsyXSA9IGxlZnRbMl0gKyByaWdodFsyXTtcblx0XHRyZXN1bHRbM10gPSBsZWZ0WzNdICsgcmlnaHRbM107XG5cdFx0cmVzdWx0WzRdID0gbGVmdFs0XSArIHJpZ2h0WzRdO1xuXHRcdHJlc3VsdFs1XSA9IGxlZnRbNV0gKyByaWdodFs1XTtcblx0XHRyZXN1bHRbNl0gPSBsZWZ0WzZdICsgcmlnaHRbNl07XG5cdFx0cmVzdWx0WzddID0gbGVmdFs3XSArIHJpZ2h0WzddO1xuXHRcdHJlc3VsdFs4XSA9IGxlZnRbOF0gKyByaWdodFs4XTtcblx0XHRyZXN1bHRbOV0gPSBsZWZ0WzldICsgcmlnaHRbOV07XG5cdFx0cmVzdWx0WzEwXSA9IGxlZnRbMTBdICsgcmlnaHRbMTBdO1xuXHRcdHJlc3VsdFsxMV0gPSBsZWZ0WzExXSArIHJpZ2h0WzExXTtcblx0XHRyZXN1bHRbMTJdID0gbGVmdFsxMl0gKyByaWdodFsxMl07XG5cdFx0cmVzdWx0WzEzXSA9IGxlZnRbMTNdICsgcmlnaHRbMTNdO1xuXHRcdHJlc3VsdFsxNF0gPSBsZWZ0WzE0XSArIHJpZ2h0WzE0XTtcblx0XHRyZXN1bHRbMTVdID0gbGVmdFsxNV0gKyByaWdodFsxNV07XG5cdFx0cmV0dXJuIHJlc3VsdDtcblx0fVxuXG5cdHN0YXRpYyBzdWJ0cmFjdChsZWZ0OiBNYXRyaXg0LCByaWdodDogTWF0cml4NCwgcmVzdWx0OiBNYXRyaXg0KSB7XG5cdFx0cmVzdWx0WzBdID0gbGVmdFswXSAtIHJpZ2h0WzBdO1xuXHRcdHJlc3VsdFsxXSA9IGxlZnRbMV0gLSByaWdodFsxXTtcblx0XHRyZXN1bHRbMl0gPSBsZWZ0WzJdIC0gcmlnaHRbMl07XG5cdFx0cmVzdWx0WzNdID0gbGVmdFszXSAtIHJpZ2h0WzNdO1xuXHRcdHJlc3VsdFs0XSA9IGxlZnRbNF0gLSByaWdodFs0XTtcblx0XHRyZXN1bHRbNV0gPSBsZWZ0WzVdIC0gcmlnaHRbNV07XG5cdFx0cmVzdWx0WzZdID0gbGVmdFs2XSAtIHJpZ2h0WzZdO1xuXHRcdHJlc3VsdFs3XSA9IGxlZnRbN10gLSByaWdodFs3XTtcblx0XHRyZXN1bHRbOF0gPSBsZWZ0WzhdIC0gcmlnaHRbOF07XG5cdFx0cmVzdWx0WzldID0gbGVmdFs5XSAtIHJpZ2h0WzldO1xuXHRcdHJlc3VsdFsxMF0gPSBsZWZ0WzEwXSAtIHJpZ2h0WzEwXTtcblx0XHRyZXN1bHRbMTFdID0gbGVmdFsxMV0gLSByaWdodFsxMV07XG5cdFx0cmVzdWx0WzEyXSA9IGxlZnRbMTJdIC0gcmlnaHRbMTJdO1xuXHRcdHJlc3VsdFsxM10gPSBsZWZ0WzEzXSAtIHJpZ2h0WzEzXTtcblx0XHRyZXN1bHRbMTRdID0gbGVmdFsxNF0gLSByaWdodFsxNF07XG5cdFx0cmVzdWx0WzE1XSA9IGxlZnRbMTVdIC0gcmlnaHRbMTVdO1xuXHRcdHJldHVybiByZXN1bHQ7XG5cdH1cblxuXHRzdGF0aWMgbXVsdGlwbHlUcmFuc2Zvcm1hdGlvbihsZWZ0OiBNYXRyaXg0LCByaWdodDogTWF0cml4NCwgcmVzdWx0OiBNYXRyaXg0KTogTWF0cml4NCB7XG5cdFx0Y29uc3QgbGVmdDAgPSBsZWZ0WzBdO1xuXHRcdGNvbnN0IGxlZnQxID0gbGVmdFsxXTtcblx0XHRjb25zdCBsZWZ0MiA9IGxlZnRbMl07XG5cdFx0Y29uc3QgbGVmdDQgPSBsZWZ0WzRdO1xuXHRcdGNvbnN0IGxlZnQ1ID0gbGVmdFs1XTtcblx0XHRjb25zdCBsZWZ0NiA9IGxlZnRbNl07XG5cdFx0Y29uc3QgbGVmdDggPSBsZWZ0WzhdO1xuXHRcdGNvbnN0IGxlZnQ5ID0gbGVmdFs5XTtcblx0XHRjb25zdCBsZWZ0MTAgPSBsZWZ0WzEwXTtcblx0XHRjb25zdCBsZWZ0MTIgPSBsZWZ0WzEyXTtcblx0XHRjb25zdCBsZWZ0MTMgPSBsZWZ0WzEzXTtcblx0XHRjb25zdCBsZWZ0MTQgPSBsZWZ0WzE0XTtcblxuXHRcdGNvbnN0IHJpZ2h0MCA9IHJpZ2h0WzBdO1xuXHRcdGNvbnN0IHJpZ2h0MSA9IHJpZ2h0WzFdO1xuXHRcdGNvbnN0IHJpZ2h0MiA9IHJpZ2h0WzJdO1xuXHRcdGNvbnN0IHJpZ2h0NCA9IHJpZ2h0WzRdO1xuXHRcdGNvbnN0IHJpZ2h0NSA9IHJpZ2h0WzVdO1xuXHRcdGNvbnN0IHJpZ2h0NiA9IHJpZ2h0WzZdO1xuXHRcdGNvbnN0IHJpZ2h0OCA9IHJpZ2h0WzhdO1xuXHRcdGNvbnN0IHJpZ2h0OSA9IHJpZ2h0WzldO1xuXHRcdGNvbnN0IHJpZ2h0MTAgPSByaWdodFsxMF07XG5cdFx0Y29uc3QgcmlnaHQxMiA9IHJpZ2h0WzEyXTtcblx0XHRjb25zdCByaWdodDEzID0gcmlnaHRbMTNdO1xuXHRcdGNvbnN0IHJpZ2h0MTQgPSByaWdodFsxNF07XG5cblx0XHRjb25zdCBjb2x1bW4wUm93MCA9IGxlZnQwICogcmlnaHQwICsgbGVmdDQgKiByaWdodDEgKyBsZWZ0OCAqIHJpZ2h0Mjtcblx0XHRjb25zdCBjb2x1bW4wUm93MSA9IGxlZnQxICogcmlnaHQwICsgbGVmdDUgKiByaWdodDEgKyBsZWZ0OSAqIHJpZ2h0Mjtcblx0XHRjb25zdCBjb2x1bW4wUm93MiA9IGxlZnQyICogcmlnaHQwICsgbGVmdDYgKiByaWdodDEgKyBsZWZ0MTAgKiByaWdodDI7XG5cblx0XHRjb25zdCBjb2x1bW4xUm93MCA9IGxlZnQwICogcmlnaHQ0ICsgbGVmdDQgKiByaWdodDUgKyBsZWZ0OCAqIHJpZ2h0Njtcblx0XHRjb25zdCBjb2x1bW4xUm93MSA9IGxlZnQxICogcmlnaHQ0ICsgbGVmdDUgKiByaWdodDUgKyBsZWZ0OSAqIHJpZ2h0Njtcblx0XHRjb25zdCBjb2x1bW4xUm93MiA9IGxlZnQyICogcmlnaHQ0ICsgbGVmdDYgKiByaWdodDUgKyBsZWZ0MTAgKiByaWdodDY7XG5cblx0XHRjb25zdCBjb2x1bW4yUm93MCA9IGxlZnQwICogcmlnaHQ4ICsgbGVmdDQgKiByaWdodDkgKyBsZWZ0OCAqIHJpZ2h0MTA7XG5cdFx0Y29uc3QgY29sdW1uMlJvdzEgPSBsZWZ0MSAqIHJpZ2h0OCArIGxlZnQ1ICogcmlnaHQ5ICsgbGVmdDkgKiByaWdodDEwO1xuXHRcdGNvbnN0IGNvbHVtbjJSb3cyID0gbGVmdDIgKiByaWdodDggKyBsZWZ0NiAqIHJpZ2h0OSArIGxlZnQxMCAqIHJpZ2h0MTA7XG5cblx0XHRjb25zdCBjb2x1bW4zUm93MCA9IGxlZnQwICogcmlnaHQxMiArIGxlZnQ0ICogcmlnaHQxMyArIGxlZnQ4ICogcmlnaHQxNCArIGxlZnQxMjtcblx0XHRjb25zdCBjb2x1bW4zUm93MSA9IGxlZnQxICogcmlnaHQxMiArIGxlZnQ1ICogcmlnaHQxMyArIGxlZnQ5ICogcmlnaHQxNCArIGxlZnQxMztcblx0XHRjb25zdCBjb2x1bW4zUm93MiA9IGxlZnQyICogcmlnaHQxMiArIGxlZnQ2ICogcmlnaHQxMyArIGxlZnQxMCAqIHJpZ2h0MTQgKyBsZWZ0MTQ7XG5cblx0XHRyZXN1bHRbMF0gPSBjb2x1bW4wUm93MDtcblx0XHRyZXN1bHRbMV0gPSBjb2x1bW4wUm93MTtcblx0XHRyZXN1bHRbMl0gPSBjb2x1bW4wUm93Mjtcblx0XHRyZXN1bHRbM10gPSAwLjA7XG5cdFx0cmVzdWx0WzRdID0gY29sdW1uMVJvdzA7XG5cdFx0cmVzdWx0WzVdID0gY29sdW1uMVJvdzE7XG5cdFx0cmVzdWx0WzZdID0gY29sdW1uMVJvdzI7XG5cdFx0cmVzdWx0WzddID0gMC4wO1xuXHRcdHJlc3VsdFs4XSA9IGNvbHVtbjJSb3cwO1xuXHRcdHJlc3VsdFs5XSA9IGNvbHVtbjJSb3cxO1xuXHRcdHJlc3VsdFsxMF0gPSBjb2x1bW4yUm93Mjtcblx0XHRyZXN1bHRbMTFdID0gMC4wO1xuXHRcdHJlc3VsdFsxMl0gPSBjb2x1bW4zUm93MDtcblx0XHRyZXN1bHRbMTNdID0gY29sdW1uM1JvdzE7XG5cdFx0cmVzdWx0WzE0XSA9IGNvbHVtbjNSb3cyO1xuXHRcdHJlc3VsdFsxNV0gPSAxLjA7XG5cdFx0cmV0dXJuIHJlc3VsdDtcblx0fVxuXG5cdHN0YXRpYyBtdWx0aXBseUJ5TWF0cml4MyhtYXRyaXg6IE1hdHJpeDQsIHJvdGF0aW9uOiBNYXRyaXgzLCByZXN1bHQ6IE1hdHJpeDQpOiBNYXRyaXg0IHtcblx0XHRjb25zdCBsZWZ0MCA9IG1hdHJpeFswXTtcblx0XHRjb25zdCBsZWZ0MSA9IG1hdHJpeFsxXTtcblx0XHRjb25zdCBsZWZ0MiA9IG1hdHJpeFsyXTtcblx0XHRjb25zdCBsZWZ0NCA9IG1hdHJpeFs0XTtcblx0XHRjb25zdCBsZWZ0NSA9IG1hdHJpeFs1XTtcblx0XHRjb25zdCBsZWZ0NiA9IG1hdHJpeFs2XTtcblx0XHRjb25zdCBsZWZ0OCA9IG1hdHJpeFs4XTtcblx0XHRjb25zdCBsZWZ0OSA9IG1hdHJpeFs5XTtcblx0XHRjb25zdCBsZWZ0MTAgPSBtYXRyaXhbMTBdO1xuXG5cdFx0Y29uc3QgcmlnaHQwID0gcm90YXRpb25bMF07XG5cdFx0Y29uc3QgcmlnaHQxID0gcm90YXRpb25bMV07XG5cdFx0Y29uc3QgcmlnaHQyID0gcm90YXRpb25bMl07XG5cdFx0Y29uc3QgcmlnaHQ0ID0gcm90YXRpb25bM107XG5cdFx0Y29uc3QgcmlnaHQ1ID0gcm90YXRpb25bNF07XG5cdFx0Y29uc3QgcmlnaHQ2ID0gcm90YXRpb25bNV07XG5cdFx0Y29uc3QgcmlnaHQ4ID0gcm90YXRpb25bNl07XG5cdFx0Y29uc3QgcmlnaHQ5ID0gcm90YXRpb25bN107XG5cdFx0Y29uc3QgcmlnaHQxMCA9IHJvdGF0aW9uWzhdO1xuXG5cdFx0Y29uc3QgY29sdW1uMFJvdzAgPSBsZWZ0MCAqIHJpZ2h0MCArIGxlZnQ0ICogcmlnaHQxICsgbGVmdDggKiByaWdodDI7XG5cdFx0Y29uc3QgY29sdW1uMFJvdzEgPSBsZWZ0MSAqIHJpZ2h0MCArIGxlZnQ1ICogcmlnaHQxICsgbGVmdDkgKiByaWdodDI7XG5cdFx0Y29uc3QgY29sdW1uMFJvdzIgPSBsZWZ0MiAqIHJpZ2h0MCArIGxlZnQ2ICogcmlnaHQxICsgbGVmdDEwICogcmlnaHQyO1xuXG5cdFx0Y29uc3QgY29sdW1uMVJvdzAgPSBsZWZ0MCAqIHJpZ2h0NCArIGxlZnQ0ICogcmlnaHQ1ICsgbGVmdDggKiByaWdodDY7XG5cdFx0Y29uc3QgY29sdW1uMVJvdzEgPSBsZWZ0MSAqIHJpZ2h0NCArIGxlZnQ1ICogcmlnaHQ1ICsgbGVmdDkgKiByaWdodDY7XG5cdFx0Y29uc3QgY29sdW1uMVJvdzIgPSBsZWZ0MiAqIHJpZ2h0NCArIGxlZnQ2ICogcmlnaHQ1ICsgbGVmdDEwICogcmlnaHQ2O1xuXG5cdFx0Y29uc3QgY29sdW1uMlJvdzAgPSBsZWZ0MCAqIHJpZ2h0OCArIGxlZnQ0ICogcmlnaHQ5ICsgbGVmdDggKiByaWdodDEwO1xuXHRcdGNvbnN0IGNvbHVtbjJSb3cxID0gbGVmdDEgKiByaWdodDggKyBsZWZ0NSAqIHJpZ2h0OSArIGxlZnQ5ICogcmlnaHQxMDtcblx0XHRjb25zdCBjb2x1bW4yUm93MiA9IGxlZnQyICogcmlnaHQ4ICsgbGVmdDYgKiByaWdodDkgKyBsZWZ0MTAgKiByaWdodDEwO1xuXG5cdFx0cmVzdWx0WzBdID0gY29sdW1uMFJvdzA7XG5cdFx0cmVzdWx0WzFdID0gY29sdW1uMFJvdzE7XG5cdFx0cmVzdWx0WzJdID0gY29sdW1uMFJvdzI7XG5cdFx0cmVzdWx0WzNdID0gMC4wO1xuXHRcdHJlc3VsdFs0XSA9IGNvbHVtbjFSb3cwO1xuXHRcdHJlc3VsdFs1XSA9IGNvbHVtbjFSb3cxO1xuXHRcdHJlc3VsdFs2XSA9IGNvbHVtbjFSb3cyO1xuXHRcdHJlc3VsdFs3XSA9IDAuMDtcblx0XHRyZXN1bHRbOF0gPSBjb2x1bW4yUm93MDtcblx0XHRyZXN1bHRbOV0gPSBjb2x1bW4yUm93MTtcblx0XHRyZXN1bHRbMTBdID0gY29sdW1uMlJvdzI7XG5cdFx0cmVzdWx0WzExXSA9IDAuMDtcblx0XHRyZXN1bHRbMTJdID0gbWF0cml4WzEyXTtcblx0XHRyZXN1bHRbMTNdID0gbWF0cml4WzEzXTtcblx0XHRyZXN1bHRbMTRdID0gbWF0cml4WzE0XTtcblx0XHRyZXN1bHRbMTVdID0gbWF0cml4WzE1XTtcblx0XHRyZXR1cm4gcmVzdWx0O1xuXHR9XG5cblx0c3RhdGljIG11bHRpcGx5QnlUcmFuc2xhdGlvbihtYXRyaXg6IE1hdHJpeDQsIHRyYW5zbGF0aW9uOiBWZWN0b3IzLCByZXN1bHQ6IE1hdHJpeDQpOiBNYXRyaXg0IHtcblx0XHRjb25zdCB4ID0gdHJhbnNsYXRpb24ueDtcblx0XHRjb25zdCB5ID0gdHJhbnNsYXRpb24ueTtcblx0XHRjb25zdCB6ID0gdHJhbnNsYXRpb24uejtcblxuXHRcdGNvbnN0IHR4ID0geCAqIG1hdHJpeFswXSArIHkgKiBtYXRyaXhbNF0gKyB6ICogbWF0cml4WzhdICsgbWF0cml4WzEyXTtcblx0XHRjb25zdCB0eSA9IHggKiBtYXRyaXhbMV0gKyB5ICogbWF0cml4WzVdICsgeiAqIG1hdHJpeFs5XSArIG1hdHJpeFsxM107XG5cdFx0Y29uc3QgdHogPSB4ICogbWF0cml4WzJdICsgeSAqIG1hdHJpeFs2XSArIHogKiBtYXRyaXhbMTBdICsgbWF0cml4WzE0XTtcblxuXHRcdHJlc3VsdFswXSA9IG1hdHJpeFswXTtcblx0XHRyZXN1bHRbMV0gPSBtYXRyaXhbMV07XG5cdFx0cmVzdWx0WzJdID0gbWF0cml4WzJdO1xuXHRcdHJlc3VsdFszXSA9IG1hdHJpeFszXTtcblx0XHRyZXN1bHRbNF0gPSBtYXRyaXhbNF07XG5cdFx0cmVzdWx0WzVdID0gbWF0cml4WzVdO1xuXHRcdHJlc3VsdFs2XSA9IG1hdHJpeFs2XTtcblx0XHRyZXN1bHRbN10gPSBtYXRyaXhbN107XG5cdFx0cmVzdWx0WzhdID0gbWF0cml4WzhdO1xuXHRcdHJlc3VsdFs5XSA9IG1hdHJpeFs5XTtcblx0XHRyZXN1bHRbMTBdID0gbWF0cml4WzEwXTtcblx0XHRyZXN1bHRbMTFdID0gbWF0cml4WzExXTtcblx0XHRyZXN1bHRbMTJdID0gdHg7XG5cdFx0cmVzdWx0WzEzXSA9IHR5O1xuXHRcdHJlc3VsdFsxNF0gPSB0ejtcblx0XHRyZXN1bHRbMTVdID0gbWF0cml4WzE1XTtcblx0XHRyZXR1cm4gcmVzdWx0O1xuXHR9XG5cblx0c3RhdGljIG11bHRpcGx5QnlTY2FsZShtYXRyaXg6IE1hdHJpeDQsIHNjYWxlOiBWZWN0b3IzLCByZXN1bHQ6IE1hdHJpeDQpOiBNYXRyaXg0IHtcblx0XHRjb25zdCBzY2FsZVggPSBzY2FsZS54O1xuXHRcdGNvbnN0IHNjYWxlWSA9IHNjYWxlLnk7XG5cdFx0Y29uc3Qgc2NhbGVaID0gc2NhbGUuejtcblxuXHRcdC8vIEZhc3RlciB0aGFuIFZlY3RvcjMuZXF1YWxzXG5cdFx0aWYgKHNjYWxlWCA9PT0gMS4wICYmIHNjYWxlWSA9PT0gMS4wICYmIHNjYWxlWiA9PT0gMS4wKSB7XG5cdFx0XHRyZXR1cm4gTWF0cml4NC5jbG9uZShtYXRyaXgsIHJlc3VsdCk7XG5cdFx0fVxuXG5cdFx0cmVzdWx0WzBdID0gc2NhbGVYICogbWF0cml4WzBdO1xuXHRcdHJlc3VsdFsxXSA9IHNjYWxlWCAqIG1hdHJpeFsxXTtcblx0XHRyZXN1bHRbMl0gPSBzY2FsZVggKiBtYXRyaXhbMl07XG5cdFx0cmVzdWx0WzNdID0gbWF0cml4WzNdO1xuXG5cdFx0cmVzdWx0WzRdID0gc2NhbGVZICogbWF0cml4WzRdO1xuXHRcdHJlc3VsdFs1XSA9IHNjYWxlWSAqIG1hdHJpeFs1XTtcblx0XHRyZXN1bHRbNl0gPSBzY2FsZVkgKiBtYXRyaXhbNl07XG5cdFx0cmVzdWx0WzddID0gbWF0cml4WzddO1xuXG5cdFx0cmVzdWx0WzhdID0gc2NhbGVaICogbWF0cml4WzhdO1xuXHRcdHJlc3VsdFs5XSA9IHNjYWxlWiAqIG1hdHJpeFs5XTtcblx0XHRyZXN1bHRbMTBdID0gc2NhbGVaICogbWF0cml4WzEwXTtcblx0XHRyZXN1bHRbMTFdID0gbWF0cml4WzExXTtcblxuXHRcdHJlc3VsdFsxMl0gPSBtYXRyaXhbMTJdO1xuXHRcdHJlc3VsdFsxM10gPSBtYXRyaXhbMTNdO1xuXHRcdHJlc3VsdFsxNF0gPSBtYXRyaXhbMTRdO1xuXHRcdHJlc3VsdFsxNV0gPSBtYXRyaXhbMTVdO1xuXG5cdFx0cmV0dXJuIHJlc3VsdDtcblx0fVxuXG5cdHN0YXRpYyBtdWx0aXBseUJ5VW5pZm9ybVNjYWxlKG1hdHJpeDogTWF0cml4NCwgc2NhbGU6IG51bWJlciwgcmVzdWx0OiBNYXRyaXg0KTogTWF0cml4NCB7XG5cdFx0cmVzdWx0WzBdID0gbWF0cml4WzBdICogc2NhbGU7XG5cdFx0cmVzdWx0WzFdID0gbWF0cml4WzFdICogc2NhbGU7XG5cdFx0cmVzdWx0WzJdID0gbWF0cml4WzJdICogc2NhbGU7XG5cdFx0cmVzdWx0WzNdID0gbWF0cml4WzNdO1xuXG5cdFx0cmVzdWx0WzRdID0gbWF0cml4WzRdICogc2NhbGU7XG5cdFx0cmVzdWx0WzVdID0gbWF0cml4WzVdICogc2NhbGU7XG5cdFx0cmVzdWx0WzZdID0gbWF0cml4WzZdICogc2NhbGU7XG5cdFx0cmVzdWx0WzddID0gbWF0cml4WzddO1xuXG5cdFx0cmVzdWx0WzhdID0gbWF0cml4WzhdICogc2NhbGU7XG5cdFx0cmVzdWx0WzldID0gbWF0cml4WzldICogc2NhbGU7XG5cdFx0cmVzdWx0WzEwXSA9IG1hdHJpeFsxMF0gKiBzY2FsZTtcblx0XHRyZXN1bHRbMTFdID0gbWF0cml4WzExXTtcblxuXHRcdHJlc3VsdFsxMl0gPSBtYXRyaXhbMTJdO1xuXHRcdHJlc3VsdFsxM10gPSBtYXRyaXhbMTNdO1xuXHRcdHJlc3VsdFsxNF0gPSBtYXRyaXhbMTRdO1xuXHRcdHJlc3VsdFsxNV0gPSBtYXRyaXhbMTVdO1xuXG5cdFx0cmV0dXJuIHJlc3VsdDtcblx0fVxuXG5cdHN0YXRpYyBtdWx0aXBseUJ5VmVjdG9yKG1hdHJpeDogTWF0cml4NCwgY2FydGVzaWFuOiBWZWN0b3I0LCByZXN1bHQ6IFZlY3RvcjQpOiBWZWN0b3I0IHtcblx0XHRjb25zdCB2WCA9IGNhcnRlc2lhbi54O1xuXHRcdGNvbnN0IHZZID0gY2FydGVzaWFuLnk7XG5cdFx0Y29uc3QgdlogPSBjYXJ0ZXNpYW4uejtcblx0XHRjb25zdCB2VyA9IGNhcnRlc2lhbi53O1xuXG5cdFx0Y29uc3QgeCA9IG1hdHJpeFswXSAqIHZYICsgbWF0cml4WzRdICogdlkgKyBtYXRyaXhbOF0gKiB2WiArIG1hdHJpeFsxMl0gKiB2Vztcblx0XHRjb25zdCB5ID0gbWF0cml4WzFdICogdlggKyBtYXRyaXhbNV0gKiB2WSArIG1hdHJpeFs5XSAqIHZaICsgbWF0cml4WzEzXSAqIHZXO1xuXHRcdGNvbnN0IHogPSBtYXRyaXhbMl0gKiB2WCArIG1hdHJpeFs2XSAqIHZZICsgbWF0cml4WzEwXSAqIHZaICsgbWF0cml4WzE0XSAqIHZXO1xuXHRcdGNvbnN0IHcgPSBtYXRyaXhbM10gKiB2WCArIG1hdHJpeFs3XSAqIHZZICsgbWF0cml4WzExXSAqIHZaICsgbWF0cml4WzE1XSAqIHZXO1xuXG5cdFx0cmVzdWx0LnggPSB4O1xuXHRcdHJlc3VsdC55ID0geTtcblx0XHRyZXN1bHQueiA9IHo7XG5cdFx0cmVzdWx0LncgPSB3O1xuXHRcdHJldHVybiByZXN1bHQ7XG5cdH1cblxuXHRzdGF0aWMgbXVsdGlwbHlCeVBvaW50QXNWZWN0b3IobWF0cml4OiBNYXRyaXg0LCBjYXJ0ZXNpYW46IFZlY3RvcjMsIHJlc3VsdDogVmVjdG9yMyk6IFZlY3RvcjMge1xuXHRcdGNvbnN0IHZYID0gY2FydGVzaWFuLng7XG5cdFx0Y29uc3QgdlkgPSBjYXJ0ZXNpYW4ueTtcblx0XHRjb25zdCB2WiA9IGNhcnRlc2lhbi56O1xuXG5cdFx0Y29uc3QgeCA9IG1hdHJpeFswXSAqIHZYICsgbWF0cml4WzRdICogdlkgKyBtYXRyaXhbOF0gKiB2Wjtcblx0XHRjb25zdCB5ID0gbWF0cml4WzFdICogdlggKyBtYXRyaXhbNV0gKiB2WSArIG1hdHJpeFs5XSAqIHZaO1xuXHRcdGNvbnN0IHogPSBtYXRyaXhbMl0gKiB2WCArIG1hdHJpeFs2XSAqIHZZICsgbWF0cml4WzEwXSAqIHZaO1xuXG5cdFx0cmVzdWx0LnggPSB4O1xuXHRcdHJlc3VsdC55ID0geTtcblx0XHRyZXN1bHQueiA9IHo7XG5cdFx0cmV0dXJuIHJlc3VsdDtcblx0fVxuXG5cdHN0YXRpYyBtdWx0aXBseUJ5UG9pbnQobWF0cml4OiBNYXRyaXg0LCBjYXJ0ZXNpYW46IFZlY3RvcjMsIHJlc3VsdDogVmVjdG9yMyk6IFZlY3RvcjMge1xuXHRcdGNvbnN0IHZYID0gY2FydGVzaWFuLng7XG5cdFx0Y29uc3QgdlkgPSBjYXJ0ZXNpYW4ueTtcblx0XHRjb25zdCB2WiA9IGNhcnRlc2lhbi56O1xuXG5cdFx0Y29uc3QgeCA9IG1hdHJpeFswXSAqIHZYICsgbWF0cml4WzRdICogdlkgKyBtYXRyaXhbOF0gKiB2WiArIG1hdHJpeFsxMl07XG5cdFx0Y29uc3QgeSA9IG1hdHJpeFsxXSAqIHZYICsgbWF0cml4WzVdICogdlkgKyBtYXRyaXhbOV0gKiB2WiArIG1hdHJpeFsxM107XG5cdFx0Y29uc3QgeiA9IG1hdHJpeFsyXSAqIHZYICsgbWF0cml4WzZdICogdlkgKyBtYXRyaXhbMTBdICogdlogKyBtYXRyaXhbMTRdO1xuXG5cdFx0cmVzdWx0LnggPSB4O1xuXHRcdHJlc3VsdC55ID0geTtcblx0XHRyZXN1bHQueiA9IHo7XG5cdFx0cmV0dXJuIHJlc3VsdDtcblx0fVxuXG5cdHN0YXRpYyBtdWx0aXBseUJ5U2NhbGFyKG1hdHJpeDogTWF0cml4NCwgc2NhbGFyOiBudW1iZXIsIHJlc3VsdDogTWF0cml4NCk6IE1hdHJpeDQge1xuXHRcdHJlc3VsdFswXSA9IG1hdHJpeFswXSAqIHNjYWxhcjtcblx0XHRyZXN1bHRbMV0gPSBtYXRyaXhbMV0gKiBzY2FsYXI7XG5cdFx0cmVzdWx0WzJdID0gbWF0cml4WzJdICogc2NhbGFyO1xuXHRcdHJlc3VsdFszXSA9IG1hdHJpeFszXSAqIHNjYWxhcjtcblx0XHRyZXN1bHRbNF0gPSBtYXRyaXhbNF0gKiBzY2FsYXI7XG5cdFx0cmVzdWx0WzVdID0gbWF0cml4WzVdICogc2NhbGFyO1xuXHRcdHJlc3VsdFs2XSA9IG1hdHJpeFs2XSAqIHNjYWxhcjtcblx0XHRyZXN1bHRbN10gPSBtYXRyaXhbN10gKiBzY2FsYXI7XG5cdFx0cmVzdWx0WzhdID0gbWF0cml4WzhdICogc2NhbGFyO1xuXHRcdHJlc3VsdFs5XSA9IG1hdHJpeFs5XSAqIHNjYWxhcjtcblx0XHRyZXN1bHRbMTBdID0gbWF0cml4WzEwXSAqIHNjYWxhcjtcblx0XHRyZXN1bHRbMTFdID0gbWF0cml4WzExXSAqIHNjYWxhcjtcblx0XHRyZXN1bHRbMTJdID0gbWF0cml4WzEyXSAqIHNjYWxhcjtcblx0XHRyZXN1bHRbMTNdID0gbWF0cml4WzEzXSAqIHNjYWxhcjtcblx0XHRyZXN1bHRbMTRdID0gbWF0cml4WzE0XSAqIHNjYWxhcjtcblx0XHRyZXN1bHRbMTVdID0gbWF0cml4WzE1XSAqIHNjYWxhcjtcblx0XHRyZXR1cm4gcmVzdWx0O1xuXHR9XG5cblx0c3RhdGljIG5lZ2F0ZShtYXRyaXg6IE1hdHJpeDQsIHJlc3VsdDogTWF0cml4NCk6IE1hdHJpeDQge1xuXHRcdHJlc3VsdFswXSA9IC1tYXRyaXhbMF07XG5cdFx0cmVzdWx0WzFdID0gLW1hdHJpeFsxXTtcblx0XHRyZXN1bHRbMl0gPSAtbWF0cml4WzJdO1xuXHRcdHJlc3VsdFszXSA9IC1tYXRyaXhbM107XG5cdFx0cmVzdWx0WzRdID0gLW1hdHJpeFs0XTtcblx0XHRyZXN1bHRbNV0gPSAtbWF0cml4WzVdO1xuXHRcdHJlc3VsdFs2XSA9IC1tYXRyaXhbNl07XG5cdFx0cmVzdWx0WzddID0gLW1hdHJpeFs3XTtcblx0XHRyZXN1bHRbOF0gPSAtbWF0cml4WzhdO1xuXHRcdHJlc3VsdFs5XSA9IC1tYXRyaXhbOV07XG5cdFx0cmVzdWx0WzEwXSA9IC1tYXRyaXhbMTBdO1xuXHRcdHJlc3VsdFsxMV0gPSAtbWF0cml4WzExXTtcblx0XHRyZXN1bHRbMTJdID0gLW1hdHJpeFsxMl07XG5cdFx0cmVzdWx0WzEzXSA9IC1tYXRyaXhbMTNdO1xuXHRcdHJlc3VsdFsxNF0gPSAtbWF0cml4WzE0XTtcblx0XHRyZXN1bHRbMTVdID0gLW1hdHJpeFsxNV07XG5cdFx0cmV0dXJuIHJlc3VsdDtcblx0fVxuXG5cdHN0YXRpYyB0cmFuc3Bvc2UobWF0cml4OiBNYXRyaXg0LCByZXN1bHQ6IE1hdHJpeDQpOiBNYXRyaXg0IHtcblx0XHRjb25zdCBtYXRyaXgxID0gbWF0cml4WzFdO1xuXHRcdGNvbnN0IG1hdHJpeDIgPSBtYXRyaXhbMl07XG5cdFx0Y29uc3QgbWF0cml4MyA9IG1hdHJpeFszXTtcblx0XHRjb25zdCBtYXRyaXg2ID0gbWF0cml4WzZdO1xuXHRcdGNvbnN0IG1hdHJpeDcgPSBtYXRyaXhbN107XG5cdFx0Y29uc3QgbWF0cml4MTEgPSBtYXRyaXhbMTFdO1xuXG5cdFx0cmVzdWx0WzBdID0gbWF0cml4WzBdO1xuXHRcdHJlc3VsdFsxXSA9IG1hdHJpeFs0XTtcblx0XHRyZXN1bHRbMl0gPSBtYXRyaXhbOF07XG5cdFx0cmVzdWx0WzNdID0gbWF0cml4WzEyXTtcblx0XHRyZXN1bHRbNF0gPSBtYXRyaXgxO1xuXHRcdHJlc3VsdFs1XSA9IG1hdHJpeFs1XTtcblx0XHRyZXN1bHRbNl0gPSBtYXRyaXhbOV07XG5cdFx0cmVzdWx0WzddID0gbWF0cml4WzEzXTtcblx0XHRyZXN1bHRbOF0gPSBtYXRyaXgyO1xuXHRcdHJlc3VsdFs5XSA9IG1hdHJpeDY7XG5cdFx0cmVzdWx0WzEwXSA9IG1hdHJpeFsxMF07XG5cdFx0cmVzdWx0WzExXSA9IG1hdHJpeFsxNF07XG5cdFx0cmVzdWx0WzEyXSA9IG1hdHJpeDM7XG5cdFx0cmVzdWx0WzEzXSA9IG1hdHJpeDc7XG5cdFx0cmVzdWx0WzE0XSA9IG1hdHJpeDExO1xuXHRcdHJlc3VsdFsxNV0gPSBtYXRyaXhbMTVdO1xuXHRcdHJldHVybiByZXN1bHQ7XG5cdH1cblxuXHRzdGF0aWMgYWJzKG1hdHJpeDogTWF0cml4NCwgcmVzdWx0OiBNYXRyaXg0KSB7XG5cdFx0cmVzdWx0WzBdID0gTWF0aC5hYnMobWF0cml4WzBdKTtcblx0XHRyZXN1bHRbMV0gPSBNYXRoLmFicyhtYXRyaXhbMV0pO1xuXHRcdHJlc3VsdFsyXSA9IE1hdGguYWJzKG1hdHJpeFsyXSk7XG5cdFx0cmVzdWx0WzNdID0gTWF0aC5hYnMobWF0cml4WzNdKTtcblx0XHRyZXN1bHRbNF0gPSBNYXRoLmFicyhtYXRyaXhbNF0pO1xuXHRcdHJlc3VsdFs1XSA9IE1hdGguYWJzKG1hdHJpeFs1XSk7XG5cdFx0cmVzdWx0WzZdID0gTWF0aC5hYnMobWF0cml4WzZdKTtcblx0XHRyZXN1bHRbN10gPSBNYXRoLmFicyhtYXRyaXhbN10pO1xuXHRcdHJlc3VsdFs4XSA9IE1hdGguYWJzKG1hdHJpeFs4XSk7XG5cdFx0cmVzdWx0WzldID0gTWF0aC5hYnMobWF0cml4WzldKTtcblx0XHRyZXN1bHRbMTBdID0gTWF0aC5hYnMobWF0cml4WzEwXSk7XG5cdFx0cmVzdWx0WzExXSA9IE1hdGguYWJzKG1hdHJpeFsxMV0pO1xuXHRcdHJlc3VsdFsxMl0gPSBNYXRoLmFicyhtYXRyaXhbMTJdKTtcblx0XHRyZXN1bHRbMTNdID0gTWF0aC5hYnMobWF0cml4WzEzXSk7XG5cdFx0cmVzdWx0WzE0XSA9IE1hdGguYWJzKG1hdHJpeFsxNF0pO1xuXHRcdHJlc3VsdFsxNV0gPSBNYXRoLmFicyhtYXRyaXhbMTVdKTtcblxuXHRcdHJldHVybiByZXN1bHQ7XG5cdH1cblxuXHRzdGF0aWMgZXF1YWxzKGxlZnQ6IE1hdHJpeDQsIHJpZ2h0OiBNYXRyaXg0KTogYm9vbGVhbiB7XG5cdFx0Ly8gR2l2ZW4gdGhhdCBtb3N0IG1hdHJpY2VzIHdpbGwgYmUgdHJhbnNmb3JtYXRpb24gbWF0cmljZXMsIHRoZSBlbGVtZW50c1xuXHRcdC8vIGFyZSB0ZXN0ZWQgaW4gb3JkZXIgc3VjaCB0aGF0IHRoZSB0ZXN0IGlzIGxpa2VseSB0byBmYWlsIGFzIGVhcmx5XG5cdFx0Ly8gYXMgcG9zc2libGUuICBJIF90aGlua18gdGhpcyBpcyBqdXN0IGFzIGZyaWVuZGx5IHRvIHRoZSBMMSBjYWNoZVxuXHRcdC8vIGFzIHRlc3RpbmcgaW4gaW5kZXggb3JkZXIuICBJdCBpcyBjZXJ0YWludHkgZmFzdGVyIGluIHByYWN0aWNlLlxuXHRcdHJldHVybiAoXG5cdFx0XHRsZWZ0ID09PSByaWdodCB8fFxuXHRcdFx0KGRlZmluZWQobGVmdCkgJiZcblx0XHRcdFx0ZGVmaW5lZChyaWdodCkgJiZcblx0XHRcdFx0Ly8gVHJhbnNsYXRpb25cblx0XHRcdFx0bGVmdFsxMl0gPT09IHJpZ2h0WzEyXSAmJlxuXHRcdFx0XHRsZWZ0WzEzXSA9PT0gcmlnaHRbMTNdICYmXG5cdFx0XHRcdGxlZnRbMTRdID09PSByaWdodFsxNF0gJiZcblx0XHRcdFx0Ly8gUm90YXRpb24vc2NhbGVcblx0XHRcdFx0bGVmdFswXSA9PT0gcmlnaHRbMF0gJiZcblx0XHRcdFx0bGVmdFsxXSA9PT0gcmlnaHRbMV0gJiZcblx0XHRcdFx0bGVmdFsyXSA9PT0gcmlnaHRbMl0gJiZcblx0XHRcdFx0bGVmdFs0XSA9PT0gcmlnaHRbNF0gJiZcblx0XHRcdFx0bGVmdFs1XSA9PT0gcmlnaHRbNV0gJiZcblx0XHRcdFx0bGVmdFs2XSA9PT0gcmlnaHRbNl0gJiZcblx0XHRcdFx0bGVmdFs4XSA9PT0gcmlnaHRbOF0gJiZcblx0XHRcdFx0bGVmdFs5XSA9PT0gcmlnaHRbOV0gJiZcblx0XHRcdFx0bGVmdFsxMF0gPT09IHJpZ2h0WzEwXSAmJlxuXHRcdFx0XHQvLyBCb3R0b20gcm93XG5cdFx0XHRcdGxlZnRbM10gPT09IHJpZ2h0WzNdICYmXG5cdFx0XHRcdGxlZnRbN10gPT09IHJpZ2h0WzddICYmXG5cdFx0XHRcdGxlZnRbMTFdID09PSByaWdodFsxMV0gJiZcblx0XHRcdFx0bGVmdFsxNV0gPT09IHJpZ2h0WzE1XSlcblx0XHQpO1xuXHR9XG5cblx0c3RhdGljIGVxdWFsc0Vwc2lsb24obGVmdDogTWF0cml4NCwgcmlnaHQ6IE1hdHJpeDQsIGVwc2lsb246IG51bWJlcik6IGJvb2xlYW4ge1xuXHRcdGVwc2lsb24gPSBkZWZhdWx0VmFsdWUoZXBzaWxvbiwgMCk7XG5cblx0XHRyZXR1cm4gKFxuXHRcdFx0bGVmdCA9PT0gcmlnaHQgfHxcblx0XHRcdChkZWZpbmVkKGxlZnQpICYmXG5cdFx0XHRcdGRlZmluZWQocmlnaHQpICYmXG5cdFx0XHRcdE1hdGguYWJzKGxlZnRbMF0gLSByaWdodFswXSkgPD0gZXBzaWxvbiAmJlxuXHRcdFx0XHRNYXRoLmFicyhsZWZ0WzFdIC0gcmlnaHRbMV0pIDw9IGVwc2lsb24gJiZcblx0XHRcdFx0TWF0aC5hYnMobGVmdFsyXSAtIHJpZ2h0WzJdKSA8PSBlcHNpbG9uICYmXG5cdFx0XHRcdE1hdGguYWJzKGxlZnRbM10gLSByaWdodFszXSkgPD0gZXBzaWxvbiAmJlxuXHRcdFx0XHRNYXRoLmFicyhsZWZ0WzRdIC0gcmlnaHRbNF0pIDw9IGVwc2lsb24gJiZcblx0XHRcdFx0TWF0aC5hYnMobGVmdFs1XSAtIHJpZ2h0WzVdKSA8PSBlcHNpbG9uICYmXG5cdFx0XHRcdE1hdGguYWJzKGxlZnRbNl0gLSByaWdodFs2XSkgPD0gZXBzaWxvbiAmJlxuXHRcdFx0XHRNYXRoLmFicyhsZWZ0WzddIC0gcmlnaHRbN10pIDw9IGVwc2lsb24gJiZcblx0XHRcdFx0TWF0aC5hYnMobGVmdFs4XSAtIHJpZ2h0WzhdKSA8PSBlcHNpbG9uICYmXG5cdFx0XHRcdE1hdGguYWJzKGxlZnRbOV0gLSByaWdodFs5XSkgPD0gZXBzaWxvbiAmJlxuXHRcdFx0XHRNYXRoLmFicyhsZWZ0WzEwXSAtIHJpZ2h0WzEwXSkgPD0gZXBzaWxvbiAmJlxuXHRcdFx0XHRNYXRoLmFicyhsZWZ0WzExXSAtIHJpZ2h0WzExXSkgPD0gZXBzaWxvbiAmJlxuXHRcdFx0XHRNYXRoLmFicyhsZWZ0WzEyXSAtIHJpZ2h0WzEyXSkgPD0gZXBzaWxvbiAmJlxuXHRcdFx0XHRNYXRoLmFicyhsZWZ0WzEzXSAtIHJpZ2h0WzEzXSkgPD0gZXBzaWxvbiAmJlxuXHRcdFx0XHRNYXRoLmFicyhsZWZ0WzE0XSAtIHJpZ2h0WzE0XSkgPD0gZXBzaWxvbiAmJlxuXHRcdFx0XHRNYXRoLmFicyhsZWZ0WzE1XSAtIHJpZ2h0WzE1XSkgPD0gZXBzaWxvbilcblx0XHQpO1xuXHR9XG5cblx0c3RhdGljIGdldFRyYW5zbGF0aW9uKG1hdHJpeDogTWF0cml4NCwgcmVzdWx0OiBWZWN0b3IzKTogVmVjdG9yMyB7XG5cdFx0cmVzdWx0LnggPSBtYXRyaXhbMTJdO1xuXHRcdHJlc3VsdC55ID0gbWF0cml4WzEzXTtcblx0XHRyZXN1bHQueiA9IG1hdHJpeFsxNF07XG5cdFx0cmV0dXJuIHJlc3VsdDtcblx0fVxuXG5cdHN0YXRpYyBnZXRNYXRyaXgzKG1hdHJpeDogTWF0cml4NCwgcmVzdWx0OiBNYXRyaXgzKTogTWF0cml4MyB7XG5cdFx0cmVzdWx0WzBdID0gbWF0cml4WzBdO1xuXHRcdHJlc3VsdFsxXSA9IG1hdHJpeFsxXTtcblx0XHRyZXN1bHRbMl0gPSBtYXRyaXhbMl07XG5cdFx0cmVzdWx0WzNdID0gbWF0cml4WzRdO1xuXHRcdHJlc3VsdFs0XSA9IG1hdHJpeFs1XTtcblx0XHRyZXN1bHRbNV0gPSBtYXRyaXhbNl07XG5cdFx0cmVzdWx0WzZdID0gbWF0cml4WzhdO1xuXHRcdHJlc3VsdFs3XSA9IG1hdHJpeFs5XTtcblx0XHRyZXN1bHRbOF0gPSBtYXRyaXhbMTBdO1xuXHRcdHJldHVybiByZXN1bHQ7XG5cdH1cblxuXHRzdGF0aWMgaW52ZXJzZShtYXRyaXg6IE1hdHJpeDQsIHJlc3VsdDogTWF0cml4NCkge1xuXHRcdC8vXG5cdFx0Ly8gUG9ydGVkIGZyb206XG5cdFx0Ly8gICBmdHA6Ly9kb3dubG9hZC5pbnRlbC5jb20vZGVzaWduL1BlbnRpdW1JSUkvc21sLzI0NTA0MzAxLnBkZlxuXHRcdC8vXG5cdFx0Y29uc3Qgc3JjMCA9IG1hdHJpeFswXTtcblx0XHRjb25zdCBzcmMxID0gbWF0cml4WzRdO1xuXHRcdGNvbnN0IHNyYzIgPSBtYXRyaXhbOF07XG5cdFx0Y29uc3Qgc3JjMyA9IG1hdHJpeFsxMl07XG5cdFx0Y29uc3Qgc3JjNCA9IG1hdHJpeFsxXTtcblx0XHRjb25zdCBzcmM1ID0gbWF0cml4WzVdO1xuXHRcdGNvbnN0IHNyYzYgPSBtYXRyaXhbOV07XG5cdFx0Y29uc3Qgc3JjNyA9IG1hdHJpeFsxM107XG5cdFx0Y29uc3Qgc3JjOCA9IG1hdHJpeFsyXTtcblx0XHRjb25zdCBzcmM5ID0gbWF0cml4WzZdO1xuXHRcdGNvbnN0IHNyYzEwID0gbWF0cml4WzEwXTtcblx0XHRjb25zdCBzcmMxMSA9IG1hdHJpeFsxNF07XG5cdFx0Y29uc3Qgc3JjMTIgPSBtYXRyaXhbM107XG5cdFx0Y29uc3Qgc3JjMTMgPSBtYXRyaXhbN107XG5cdFx0Y29uc3Qgc3JjMTQgPSBtYXRyaXhbMTFdO1xuXHRcdGNvbnN0IHNyYzE1ID0gbWF0cml4WzE1XTtcblxuXHRcdC8vIGNhbGN1bGF0ZSBwYWlycyBmb3IgZmlyc3QgOCBlbGVtZW50cyAoY29mYWN0b3JzKVxuXHRcdGxldCB0bXAwID0gc3JjMTAgKiBzcmMxNTtcblx0XHRsZXQgdG1wMSA9IHNyYzExICogc3JjMTQ7XG5cdFx0bGV0IHRtcDIgPSBzcmM5ICogc3JjMTU7XG5cdFx0bGV0IHRtcDMgPSBzcmMxMSAqIHNyYzEzO1xuXHRcdGxldCB0bXA0ID0gc3JjOSAqIHNyYzE0O1xuXHRcdGxldCB0bXA1ID0gc3JjMTAgKiBzcmMxMztcblx0XHRsZXQgdG1wNiA9IHNyYzggKiBzcmMxNTtcblx0XHRsZXQgdG1wNyA9IHNyYzExICogc3JjMTI7XG5cdFx0bGV0IHRtcDggPSBzcmM4ICogc3JjMTQ7XG5cdFx0bGV0IHRtcDkgPSBzcmMxMCAqIHNyYzEyO1xuXHRcdGxldCB0bXAxMCA9IHNyYzggKiBzcmMxMztcblx0XHRsZXQgdG1wMTEgPSBzcmM5ICogc3JjMTI7XG5cblx0XHQvLyBjYWxjdWxhdGUgZmlyc3QgOCBlbGVtZW50cyAoY29mYWN0b3JzKVxuXHRcdGNvbnN0IGRzdDAgPSB0bXAwICogc3JjNSArIHRtcDMgKiBzcmM2ICsgdG1wNCAqIHNyYzcgLSAodG1wMSAqIHNyYzUgKyB0bXAyICogc3JjNiArIHRtcDUgKiBzcmM3KTtcblx0XHRjb25zdCBkc3QxID0gdG1wMSAqIHNyYzQgKyB0bXA2ICogc3JjNiArIHRtcDkgKiBzcmM3IC0gKHRtcDAgKiBzcmM0ICsgdG1wNyAqIHNyYzYgKyB0bXA4ICogc3JjNyk7XG5cdFx0Y29uc3QgZHN0MiA9IHRtcDIgKiBzcmM0ICsgdG1wNyAqIHNyYzUgKyB0bXAxMCAqIHNyYzcgLSAodG1wMyAqIHNyYzQgKyB0bXA2ICogc3JjNSArIHRtcDExICogc3JjNyk7XG5cdFx0Y29uc3QgZHN0MyA9IHRtcDUgKiBzcmM0ICsgdG1wOCAqIHNyYzUgKyB0bXAxMSAqIHNyYzYgLSAodG1wNCAqIHNyYzQgKyB0bXA5ICogc3JjNSArIHRtcDEwICogc3JjNik7XG5cdFx0Y29uc3QgZHN0NCA9IHRtcDEgKiBzcmMxICsgdG1wMiAqIHNyYzIgKyB0bXA1ICogc3JjMyAtICh0bXAwICogc3JjMSArIHRtcDMgKiBzcmMyICsgdG1wNCAqIHNyYzMpO1xuXHRcdGNvbnN0IGRzdDUgPSB0bXAwICogc3JjMCArIHRtcDcgKiBzcmMyICsgdG1wOCAqIHNyYzMgLSAodG1wMSAqIHNyYzAgKyB0bXA2ICogc3JjMiArIHRtcDkgKiBzcmMzKTtcblx0XHRjb25zdCBkc3Q2ID0gdG1wMyAqIHNyYzAgKyB0bXA2ICogc3JjMSArIHRtcDExICogc3JjMyAtICh0bXAyICogc3JjMCArIHRtcDcgKiBzcmMxICsgdG1wMTAgKiBzcmMzKTtcblx0XHRjb25zdCBkc3Q3ID0gdG1wNCAqIHNyYzAgKyB0bXA5ICogc3JjMSArIHRtcDEwICogc3JjMiAtICh0bXA1ICogc3JjMCArIHRtcDggKiBzcmMxICsgdG1wMTEgKiBzcmMyKTtcblxuXHRcdC8vIGNhbGN1bGF0ZSBwYWlycyBmb3Igc2Vjb25kIDggZWxlbWVudHMgKGNvZmFjdG9ycylcblx0XHR0bXAwID0gc3JjMiAqIHNyYzc7XG5cdFx0dG1wMSA9IHNyYzMgKiBzcmM2O1xuXHRcdHRtcDIgPSBzcmMxICogc3JjNztcblx0XHR0bXAzID0gc3JjMyAqIHNyYzU7XG5cdFx0dG1wNCA9IHNyYzEgKiBzcmM2O1xuXHRcdHRtcDUgPSBzcmMyICogc3JjNTtcblx0XHR0bXA2ID0gc3JjMCAqIHNyYzc7XG5cdFx0dG1wNyA9IHNyYzMgKiBzcmM0O1xuXHRcdHRtcDggPSBzcmMwICogc3JjNjtcblx0XHR0bXA5ID0gc3JjMiAqIHNyYzQ7XG5cdFx0dG1wMTAgPSBzcmMwICogc3JjNTtcblx0XHR0bXAxMSA9IHNyYzEgKiBzcmM0O1xuXG5cdFx0Ly8gY2FsY3VsYXRlIHNlY29uZCA4IGVsZW1lbnRzIChjb2ZhY3RvcnMpXG5cdFx0Y29uc3QgZHN0OCA9IHRtcDAgKiBzcmMxMyArIHRtcDMgKiBzcmMxNCArIHRtcDQgKiBzcmMxNSAtICh0bXAxICogc3JjMTMgKyB0bXAyICogc3JjMTQgKyB0bXA1ICogc3JjMTUpO1xuXHRcdGNvbnN0IGRzdDkgPSB0bXAxICogc3JjMTIgKyB0bXA2ICogc3JjMTQgKyB0bXA5ICogc3JjMTUgLSAodG1wMCAqIHNyYzEyICsgdG1wNyAqIHNyYzE0ICsgdG1wOCAqIHNyYzE1KTtcblx0XHRjb25zdCBkc3QxMCA9IHRtcDIgKiBzcmMxMiArIHRtcDcgKiBzcmMxMyArIHRtcDEwICogc3JjMTUgLSAodG1wMyAqIHNyYzEyICsgdG1wNiAqIHNyYzEzICsgdG1wMTEgKiBzcmMxNSk7XG5cdFx0Y29uc3QgZHN0MTEgPSB0bXA1ICogc3JjMTIgKyB0bXA4ICogc3JjMTMgKyB0bXAxMSAqIHNyYzE0IC0gKHRtcDQgKiBzcmMxMiArIHRtcDkgKiBzcmMxMyArIHRtcDEwICogc3JjMTQpO1xuXHRcdGNvbnN0IGRzdDEyID0gdG1wMiAqIHNyYzEwICsgdG1wNSAqIHNyYzExICsgdG1wMSAqIHNyYzkgLSAodG1wNCAqIHNyYzExICsgdG1wMCAqIHNyYzkgKyB0bXAzICogc3JjMTApO1xuXHRcdGNvbnN0IGRzdDEzID0gdG1wOCAqIHNyYzExICsgdG1wMCAqIHNyYzggKyB0bXA3ICogc3JjMTAgLSAodG1wNiAqIHNyYzEwICsgdG1wOSAqIHNyYzExICsgdG1wMSAqIHNyYzgpO1xuXHRcdGNvbnN0IGRzdDE0ID0gdG1wNiAqIHNyYzkgKyB0bXAxMSAqIHNyYzExICsgdG1wMyAqIHNyYzggLSAodG1wMTAgKiBzcmMxMSArIHRtcDIgKiBzcmM4ICsgdG1wNyAqIHNyYzkpO1xuXHRcdGNvbnN0IGRzdDE1ID0gdG1wMTAgKiBzcmMxMCArIHRtcDQgKiBzcmM4ICsgdG1wOSAqIHNyYzkgLSAodG1wOCAqIHNyYzkgKyB0bXAxMSAqIHNyYzEwICsgdG1wNSAqIHNyYzgpO1xuXG5cdFx0Ly8gY2FsY3VsYXRlIGRldGVybWluYW50XG5cdFx0bGV0IGRldCA9IHNyYzAgKiBkc3QwICsgc3JjMSAqIGRzdDEgKyBzcmMyICogZHN0MiArIHNyYzMgKiBkc3QzO1xuXG5cdFx0aWYgKE1hdGguYWJzKGRldCkgPCBHTWF0aC5FUFNJTE9OMjEpIHtcblx0XHRcdC8vIFNwZWNpYWwgY2FzZSBmb3IgYSB6ZXJvIHNjYWxlIG1hdHJpeCB0aGF0IGNhbiBvY2N1ciwgZm9yIGV4YW1wbGUsXG5cdFx0XHQvLyB3aGVuIGEgbW9kZWwncyBub2RlIGhhcyBhIFswLCAwLCAwXSBzY2FsZS5cblx0XHRcdGlmIChcblx0XHRcdFx0TWF0cml4My5lcXVhbHNFcHNpbG9uKFxuXHRcdFx0XHRcdE1hdHJpeDQuZ2V0TWF0cml4MyhtYXRyaXgsIHNjcmF0Y2hJbnZlcnNlUm90YXRpb24pLFxuXHRcdFx0XHRcdHNjcmF0Y2hNYXRyaXgzWmVybyxcblx0XHRcdFx0XHRHTWF0aC5FUFNJTE9ON1xuXHRcdFx0XHQpICYmXG5cdFx0XHRcdFZlY3RvcjQuZXF1YWxzKE1hdHJpeDQuZ2V0Um93KG1hdHJpeCwgMywgc2NyYXRjaEJvdHRvbVJvdyksIHNjcmF0Y2hFeHBlY3RlZEJvdHRvbVJvdylcblx0XHRcdCkge1xuXHRcdFx0XHRyZXN1bHRbMF0gPSAwLjA7XG5cdFx0XHRcdHJlc3VsdFsxXSA9IDAuMDtcblx0XHRcdFx0cmVzdWx0WzJdID0gMC4wO1xuXHRcdFx0XHRyZXN1bHRbM10gPSAwLjA7XG5cdFx0XHRcdHJlc3VsdFs0XSA9IDAuMDtcblx0XHRcdFx0cmVzdWx0WzVdID0gMC4wO1xuXHRcdFx0XHRyZXN1bHRbNl0gPSAwLjA7XG5cdFx0XHRcdHJlc3VsdFs3XSA9IDAuMDtcblx0XHRcdFx0cmVzdWx0WzhdID0gMC4wO1xuXHRcdFx0XHRyZXN1bHRbOV0gPSAwLjA7XG5cdFx0XHRcdHJlc3VsdFsxMF0gPSAwLjA7XG5cdFx0XHRcdHJlc3VsdFsxMV0gPSAwLjA7XG5cdFx0XHRcdHJlc3VsdFsxMl0gPSAtbWF0cml4WzEyXTtcblx0XHRcdFx0cmVzdWx0WzEzXSA9IC1tYXRyaXhbMTNdO1xuXHRcdFx0XHRyZXN1bHRbMTRdID0gLW1hdHJpeFsxNF07XG5cdFx0XHRcdHJlc3VsdFsxNV0gPSAxLjA7XG5cdFx0XHRcdHJldHVybiByZXN1bHQ7XG5cdFx0XHR9XG5cblx0XHRcdHRocm93IG5ldyBFcnJvcihcIm1hdHJpeCBpcyBub3QgaW52ZXJ0aWJsZSBiZWNhdXNlIGl0cyBkZXRlcm1pbmF0ZSBpcyB6ZXJvLlwiKTtcblx0XHR9XG5cblx0XHQvLyBjYWxjdWxhdGUgbWF0cml4IGludmVyc2Vcblx0XHRkZXQgPSAxLjAgLyBkZXQ7XG5cblx0XHRyZXN1bHRbMF0gPSBkc3QwICogZGV0O1xuXHRcdHJlc3VsdFsxXSA9IGRzdDEgKiBkZXQ7XG5cdFx0cmVzdWx0WzJdID0gZHN0MiAqIGRldDtcblx0XHRyZXN1bHRbM10gPSBkc3QzICogZGV0O1xuXHRcdHJlc3VsdFs0XSA9IGRzdDQgKiBkZXQ7XG5cdFx0cmVzdWx0WzVdID0gZHN0NSAqIGRldDtcblx0XHRyZXN1bHRbNl0gPSBkc3Q2ICogZGV0O1xuXHRcdHJlc3VsdFs3XSA9IGRzdDcgKiBkZXQ7XG5cdFx0cmVzdWx0WzhdID0gZHN0OCAqIGRldDtcblx0XHRyZXN1bHRbOV0gPSBkc3Q5ICogZGV0O1xuXHRcdHJlc3VsdFsxMF0gPSBkc3QxMCAqIGRldDtcblx0XHRyZXN1bHRbMTFdID0gZHN0MTEgKiBkZXQ7XG5cdFx0cmVzdWx0WzEyXSA9IGRzdDEyICogZGV0O1xuXHRcdHJlc3VsdFsxM10gPSBkc3QxMyAqIGRldDtcblx0XHRyZXN1bHRbMTRdID0gZHN0MTQgKiBkZXQ7XG5cdFx0cmVzdWx0WzE1XSA9IGRzdDE1ICogZGV0O1xuXHRcdHJldHVybiByZXN1bHQ7XG5cdH1cblxuXHRzdGF0aWMgaW52ZXJzZVRyYW5zZm9ybWF0aW9uKG1hdHJpeDogTWF0cml4NCwgcmVzdWx0OiBNYXRyaXg0KTogTWF0cml4NCB7XG5cdFx0Ly8gVGhpcyBmdW5jdGlvbiBpcyBhbiBvcHRpbWl6ZWQgdmVyc2lvbiBvZiB0aGUgYmVsb3cgNCBsaW5lcy5cblx0XHQvLyBjb25zdCByVCA9IE1hdHJpeDMudHJhbnNwb3NlKE1hdHJpeDQuZ2V0TWF0cml4MyhtYXRyaXgpKTtcblx0XHQvLyBjb25zdCByVE4gPSBNYXRyaXgzLm5lZ2F0ZShyVCk7XG5cdFx0Ly8gY29uc3QgclRUID0gTWF0cml4My5tdWx0aXBseUJ5VmVjdG9yKHJUTiwgTWF0cml4NC5nZXRUcmFuc2xhdGlvbihtYXRyaXgpKTtcblx0XHQvLyByZXR1cm4gTWF0cml4NC5mcm9tUm90YXRpb25UcmFuc2xhdGlvbihyVCwgclRULCByZXN1bHQpO1xuXG5cdFx0Y29uc3QgbWF0cml4MCA9IG1hdHJpeFswXTtcblx0XHRjb25zdCBtYXRyaXgxID0gbWF0cml4WzFdO1xuXHRcdGNvbnN0IG1hdHJpeDIgPSBtYXRyaXhbMl07XG5cdFx0Y29uc3QgbWF0cml4NCA9IG1hdHJpeFs0XTtcblx0XHRjb25zdCBtYXRyaXg1ID0gbWF0cml4WzVdO1xuXHRcdGNvbnN0IG1hdHJpeDYgPSBtYXRyaXhbNl07XG5cdFx0Y29uc3QgbWF0cml4OCA9IG1hdHJpeFs4XTtcblx0XHRjb25zdCBtYXRyaXg5ID0gbWF0cml4WzldO1xuXHRcdGNvbnN0IG1hdHJpeDEwID0gbWF0cml4WzEwXTtcblxuXHRcdGNvbnN0IHZYID0gbWF0cml4WzEyXTtcblx0XHRjb25zdCB2WSA9IG1hdHJpeFsxM107XG5cdFx0Y29uc3QgdlogPSBtYXRyaXhbMTRdO1xuXG5cdFx0Y29uc3QgeCA9IC1tYXRyaXgwICogdlggLSBtYXRyaXgxICogdlkgLSBtYXRyaXgyICogdlo7XG5cdFx0Y29uc3QgeSA9IC1tYXRyaXg0ICogdlggLSBtYXRyaXg1ICogdlkgLSBtYXRyaXg2ICogdlo7XG5cdFx0Y29uc3QgeiA9IC1tYXRyaXg4ICogdlggLSBtYXRyaXg5ICogdlkgLSBtYXRyaXgxMCAqIHZaO1xuXG5cdFx0cmVzdWx0WzBdID0gbWF0cml4MDtcblx0XHRyZXN1bHRbMV0gPSBtYXRyaXg0O1xuXHRcdHJlc3VsdFsyXSA9IG1hdHJpeDg7XG5cdFx0cmVzdWx0WzNdID0gMC4wO1xuXHRcdHJlc3VsdFs0XSA9IG1hdHJpeDE7XG5cdFx0cmVzdWx0WzVdID0gbWF0cml4NTtcblx0XHRyZXN1bHRbNl0gPSBtYXRyaXg5O1xuXHRcdHJlc3VsdFs3XSA9IDAuMDtcblx0XHRyZXN1bHRbOF0gPSBtYXRyaXgyO1xuXHRcdHJlc3VsdFs5XSA9IG1hdHJpeDY7XG5cdFx0cmVzdWx0WzEwXSA9IG1hdHJpeDEwO1xuXHRcdHJlc3VsdFsxMV0gPSAwLjA7XG5cdFx0cmVzdWx0WzEyXSA9IHg7XG5cdFx0cmVzdWx0WzEzXSA9IHk7XG5cdFx0cmVzdWx0WzE0XSA9IHo7XG5cdFx0cmVzdWx0WzE1XSA9IDEuMDtcblx0XHRyZXR1cm4gcmVzdWx0O1xuXHR9XG5cblx0c3RhdGljIGludmVyc2VUcmFuc3Bvc2UobWF0cml4OiBNYXRyaXg0LCByZXN1bHQ6IE1hdHJpeDQpOiBNYXRyaXg0IHtcblx0XHRyZXR1cm4gTWF0cml4NC5pbnZlcnNlKE1hdHJpeDQudHJhbnNwb3NlKG1hdHJpeCwgc2NyYXRjaFRyYW5zcG9zZU1hdHJpeCksIHJlc3VsdCk7XG5cdH1cblx0LyoqXG5cdCAqIEBwcml2YXRlXG5cdCAqL1xuXHRzdGF0aWMgZXF1YWxzQXJyYXkobWF0cml4OiBNYXRyaXg0LCBhcnJheTogQXJyYXk8bnVtYmVyPiwgb2Zmc2V0OiBudW1iZXIpOiBib29sZWFuIHtcblx0XHRyZXR1cm4gKFxuXHRcdFx0bWF0cml4WzBdID09PSBhcnJheVtvZmZzZXRdICYmXG5cdFx0XHRtYXRyaXhbMV0gPT09IGFycmF5W29mZnNldCArIDFdICYmXG5cdFx0XHRtYXRyaXhbMl0gPT09IGFycmF5W29mZnNldCArIDJdICYmXG5cdFx0XHRtYXRyaXhbM10gPT09IGFycmF5W29mZnNldCArIDNdICYmXG5cdFx0XHRtYXRyaXhbNF0gPT09IGFycmF5W29mZnNldCArIDRdICYmXG5cdFx0XHRtYXRyaXhbNV0gPT09IGFycmF5W29mZnNldCArIDVdICYmXG5cdFx0XHRtYXRyaXhbNl0gPT09IGFycmF5W29mZnNldCArIDZdICYmXG5cdFx0XHRtYXRyaXhbN10gPT09IGFycmF5W29mZnNldCArIDddICYmXG5cdFx0XHRtYXRyaXhbOF0gPT09IGFycmF5W29mZnNldCArIDhdICYmXG5cdFx0XHRtYXRyaXhbOV0gPT09IGFycmF5W29mZnNldCArIDldICYmXG5cdFx0XHRtYXRyaXhbMTBdID09PSBhcnJheVtvZmZzZXQgKyAxMF0gJiZcblx0XHRcdG1hdHJpeFsxMV0gPT09IGFycmF5W29mZnNldCArIDExXSAmJlxuXHRcdFx0bWF0cml4WzEyXSA9PT0gYXJyYXlbb2Zmc2V0ICsgMTJdICYmXG5cdFx0XHRtYXRyaXhbMTNdID09PSBhcnJheVtvZmZzZXQgKyAxM10gJiZcblx0XHRcdG1hdHJpeFsxNF0gPT09IGFycmF5W29mZnNldCArIDE0XSAmJlxuXHRcdFx0bWF0cml4WzE1XSA9PT0gYXJyYXlbb2Zmc2V0ICsgMTVdXG5cdFx0KTtcblx0fVxufVxuXG5jb25zdCBzY3JhdGNoVHJhbnNwb3NlTWF0cml4ID0gbmV3IE1hdHJpeDQoKTtcblxuY29uc3QgZnJvbUNhbWVyYUYgPSBuZXcgVmVjdG9yMygpO1xuY29uc3QgZnJvbUNhbWVyYVIgPSBuZXcgVmVjdG9yMygpO1xuY29uc3QgZnJvbUNhbWVyYVUgPSBuZXcgVmVjdG9yMygpO1xuXG5jb25zdCBzY2FsZVNjcmF0Y2gxID0gbmV3IFZlY3RvcjMoKTtcbmNvbnN0IHNjYWxlU2NyYXRjaDIgPSBuZXcgVmVjdG9yMygpO1xuY29uc3Qgc2NyYXRjaENvbHVtbiA9IG5ldyBWZWN0b3IzKCk7XG5jb25zdCBzY2FsZVNjcmF0Y2gzID0gbmV3IFZlY3RvcjMoKTtcbmNvbnN0IHNjYWxlU2NyYXRjaDQgPSBuZXcgVmVjdG9yMygpO1xuY29uc3Qgc2NhbGVTY3JhdGNoNSA9IG5ldyBWZWN0b3IzKCk7XG5jb25zdCBzY3JhdGNoSW52ZXJzZVJvdGF0aW9uID0gbmV3IE1hdHJpeDMoKTtcbmNvbnN0IHNjcmF0Y2hNYXRyaXgzWmVybyA9IG5ldyBNYXRyaXgzKCk7XG5jb25zdCBzY3JhdGNoQm90dG9tUm93ID0gbmV3IFZlY3RvcjQoKTtcbmNvbnN0IHNjcmF0Y2hFeHBlY3RlZEJvdHRvbVJvdyA9IG5ldyBWZWN0b3I0KDAuMCwgMC4wLCAwLjAsIDEuMCk7XG5jb25zdCB4ID0gbmV3IFZlY3RvcjMoKTtcbmNvbnN0IHkgPSBuZXcgVmVjdG9yMygpO1xuY29uc3QgeiA9IG5ldyBWZWN0b3IzKCk7XG5leHBvcnQgZGVmYXVsdCBNYXRyaXg0O1xuIiwiaW1wb3J0IENhbWVyYSBmcm9tIFwiLi4vY2FtZXJhL0NhbWVyYVwiO1xuaW1wb3J0IE1hdHJpeDQgZnJvbSBcIi4uL21hdGgvTWF0cml4NFwiO1xuaW1wb3J0IFBsYW5lIGZyb20gXCIuLi9tYXRoL1BsYW5lXCI7XG5pbXBvcnQgVmVjdG9yMyBmcm9tIFwiLi4vbWF0aC9WZWN0b3IzXCI7XG5pbXBvcnQgZGVmYXVsdFZhbHVlIGZyb20gXCIuLi91dGlscy9kZWZhdWx0VmFsdWVcIjtcbmltcG9ydCBkZWZpbmVkIGZyb20gXCIuLi91dGlscy9kZWZpbmVkXCI7XG5pbXBvcnQgeyBJbnRlcnNlY3QgfSBmcm9tIFwiLi9XZWJHUFVDb25zdGFudFwiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBCb3VuZGluZ1NwaGVyZSB7XG5cdHJhZGl1czogbnVtYmVyO1xuXHRjZW50ZXI6IFZlY3RvcjM7XG5cdG9yaWdpblJhZGl1czogbnVtYmVyO1xuXHRvcmlnaW5DZW50ZXI6IFZlY3RvcjM7XG5cdGNvbnN0cnVjdG9yKGNlbnRlcjogVmVjdG9yMyA9IG5ldyBWZWN0b3IzKDAsIDAsIDApLCByYWRpdXMgPSAwKSB7XG5cdFx0dGhpcy5jZW50ZXIgPSBjZW50ZXI7XG5cdFx0dGhpcy5yYWRpdXMgPSByYWRpdXM7XG5cdFx0dGhpcy5vcmlnaW5DZW50ZXIgPSB0aGlzLmNlbnRlci5jbG9uZSgpO1xuXHRcdHRoaXMub3JpZ2luUmFkaXVzID0gcmFkaXVzO1xuXHR9XG5cdC8qKlxuXHQgKiBAcGFyYW0ge1ZlY3RvcjNbXX0gW3Bvc2l0aW9uc10gQW4gYXJyYXkgb2YgcG9pbnRzIHRoYXQgdGhlIGJvdW5kaW5nIHNwaGVyZSB3aWxsIGVuY2xvc2UuICBFYWNoIHBvaW50IG11c3QgaGF2ZSA8Y29kZT54PC9jb2RlPiwgPGNvZGU+eTwvY29kZT4sIGFuZCA8Y29kZT56PC9jb2RlPiBwcm9wZXJ0aWVzLlxuXHQgKiBAcmV0dXJucyB7Qm91bmRpbmdTcGhlcmV9IFRoZSBtb2RpZmllZCByZXN1bHQgcGFyYW1ldGVyIG9yIGEgbmV3IEJvdW5kaW5nU3BoZXJlIGluc3RhbmNlIGlmIG9uZSB3YXMgbm90IHByb3ZpZGVkLlxuXHQgKi9cblx0c3RhdGljIGZyb21Qb2ludHMocG9zaXRpb25zOiBWZWN0b3IzW10pIHtcblx0XHRjb25zdCByZXN1bHQgPSBuZXcgQm91bmRpbmdTcGhlcmUoKTtcblxuXHRcdGlmICghZGVmaW5lZChwb3NpdGlvbnMpIHx8IHBvc2l0aW9ucy5sZW5ndGggPT09IDApIHtcblx0XHRcdHJlc3VsdC5jZW50ZXIgPSBWZWN0b3IzLmNsb25lKFZlY3RvcjMuWkVSTywgcmVzdWx0LmNlbnRlcik7XG5cdFx0XHRyZXN1bHQucmFkaXVzID0gMC4wO1xuXHRcdFx0cmV0dXJuIHJlc3VsdDtcblx0XHR9XG5cblx0XHRjb25zdCBjdXJyZW50UG9zID0gVmVjdG9yMy5jbG9uZShwb3NpdGlvbnNbMF0sIGZyb21Qb2ludHNDdXJyZW50UG9zKTtcblxuXHRcdGNvbnN0IHhNaW4gPSBWZWN0b3IzLmNsb25lKGN1cnJlbnRQb3MsIGZyb21Qb2ludHNYTWluKTtcblx0XHRjb25zdCB5TWluID0gVmVjdG9yMy5jbG9uZShjdXJyZW50UG9zLCBmcm9tUG9pbnRzWU1pbik7XG5cdFx0Y29uc3Qgek1pbiA9IFZlY3RvcjMuY2xvbmUoY3VycmVudFBvcywgZnJvbVBvaW50c1pNaW4pO1xuXG5cdFx0Y29uc3QgeE1heCA9IFZlY3RvcjMuY2xvbmUoY3VycmVudFBvcywgZnJvbVBvaW50c1hNYXgpO1xuXHRcdGNvbnN0IHlNYXggPSBWZWN0b3IzLmNsb25lKGN1cnJlbnRQb3MsIGZyb21Qb2ludHNZTWF4KTtcblx0XHRjb25zdCB6TWF4ID0gVmVjdG9yMy5jbG9uZShjdXJyZW50UG9zLCBmcm9tUG9pbnRzWk1heCk7XG5cblx0XHRjb25zdCBudW1Qb3NpdGlvbnMgPSBwb3NpdGlvbnMubGVuZ3RoO1xuXHRcdGxldCBpO1xuXHRcdGZvciAoaSA9IDE7IGkgPCBudW1Qb3NpdGlvbnM7IGkrKykge1xuXHRcdFx0VmVjdG9yMy5jbG9uZShwb3NpdGlvbnNbaV0sIGN1cnJlbnRQb3MpO1xuXG5cdFx0XHRjb25zdCB4ID0gY3VycmVudFBvcy54O1xuXHRcdFx0Y29uc3QgeSA9IGN1cnJlbnRQb3MueTtcblx0XHRcdGNvbnN0IHogPSBjdXJyZW50UG9zLno7XG5cblx0XHRcdC8vIFN0b3JlIHBvaW50cyBjb250YWluaW5nIHRoZSB0aGUgc21hbGxlc3QgYW5kIGxhcmdlc3QgY29tcG9uZW50c1xuXHRcdFx0aWYgKHggPCB4TWluLngpIHtcblx0XHRcdFx0VmVjdG9yMy5jbG9uZShjdXJyZW50UG9zLCB4TWluKTtcblx0XHRcdH1cblxuXHRcdFx0aWYgKHggPiB4TWF4LngpIHtcblx0XHRcdFx0VmVjdG9yMy5jbG9uZShjdXJyZW50UG9zLCB4TWF4KTtcblx0XHRcdH1cblxuXHRcdFx0aWYgKHkgPCB5TWluLnkpIHtcblx0XHRcdFx0VmVjdG9yMy5jbG9uZShjdXJyZW50UG9zLCB5TWluKTtcblx0XHRcdH1cblxuXHRcdFx0aWYgKHkgPiB5TWF4LnkpIHtcblx0XHRcdFx0VmVjdG9yMy5jbG9uZShjdXJyZW50UG9zLCB5TWF4KTtcblx0XHRcdH1cblxuXHRcdFx0aWYgKHogPCB6TWluLnopIHtcblx0XHRcdFx0VmVjdG9yMy5jbG9uZShjdXJyZW50UG9zLCB6TWluKTtcblx0XHRcdH1cblxuXHRcdFx0aWYgKHogPiB6TWF4LnopIHtcblx0XHRcdFx0VmVjdG9yMy5jbG9uZShjdXJyZW50UG9zLCB6TWF4KTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHQvLyBDb21wdXRlIHgtLCB5LSwgYW5kIHotc3BhbnMgKFNxdWFyZWQgZGlzdGFuY2VzIGIvbiBlYWNoIGNvbXBvbmVudCdzIG1pbi4gYW5kIG1heC4pLlxuXHRcdGNvbnN0IHhTcGFuID0gVmVjdG9yMy5tYWduaXR1ZGVTcXVhcmVkKFZlY3RvcjMuc3VidHJhY3QoeE1heCwgeE1pbiwgZnJvbVBvaW50c1NjcmF0Y2gpKTtcblx0XHRjb25zdCB5U3BhbiA9IFZlY3RvcjMubWFnbml0dWRlU3F1YXJlZChWZWN0b3IzLnN1YnRyYWN0KHlNYXgsIHlNaW4sIGZyb21Qb2ludHNTY3JhdGNoKSk7XG5cdFx0Y29uc3QgelNwYW4gPSBWZWN0b3IzLm1hZ25pdHVkZVNxdWFyZWQoVmVjdG9yMy5zdWJ0cmFjdCh6TWF4LCB6TWluLCBmcm9tUG9pbnRzU2NyYXRjaCkpO1xuXG5cdFx0Ly8gU2V0IHRoZSBkaWFtZXRlciBlbmRwb2ludHMgdG8gdGhlIGxhcmdlc3Qgc3Bhbi5cblx0XHRsZXQgZGlhbWV0ZXIxID0geE1pbjtcblx0XHRsZXQgZGlhbWV0ZXIyID0geE1heDtcblx0XHRsZXQgbWF4U3BhbiA9IHhTcGFuO1xuXHRcdGlmICh5U3BhbiA+IG1heFNwYW4pIHtcblx0XHRcdG1heFNwYW4gPSB5U3Bhbjtcblx0XHRcdGRpYW1ldGVyMSA9IHlNaW47XG5cdFx0XHRkaWFtZXRlcjIgPSB5TWF4O1xuXHRcdH1cblx0XHRpZiAoelNwYW4gPiBtYXhTcGFuKSB7XG5cdFx0XHRtYXhTcGFuID0gelNwYW47XG5cdFx0XHRkaWFtZXRlcjEgPSB6TWluO1xuXHRcdFx0ZGlhbWV0ZXIyID0gek1heDtcblx0XHR9XG5cblx0XHQvLyBDYWxjdWxhdGUgdGhlIGNlbnRlciBvZiB0aGUgaW5pdGlhbCBzcGhlcmUgZm91bmQgYnkgUml0dGVyJ3MgYWxnb3JpdGhtXG5cdFx0Y29uc3Qgcml0dGVyQ2VudGVyID0gZnJvbVBvaW50c1JpdHRlckNlbnRlcjtcblx0XHRyaXR0ZXJDZW50ZXIueCA9IChkaWFtZXRlcjEueCArIGRpYW1ldGVyMi54KSAqIDAuNTtcblx0XHRyaXR0ZXJDZW50ZXIueSA9IChkaWFtZXRlcjEueSArIGRpYW1ldGVyMi55KSAqIDAuNTtcblx0XHRyaXR0ZXJDZW50ZXIueiA9IChkaWFtZXRlcjEueiArIGRpYW1ldGVyMi56KSAqIDAuNTtcblxuXHRcdC8vIENhbGN1bGF0ZSB0aGUgcmFkaXVzIG9mIHRoZSBpbml0aWFsIHNwaGVyZSBmb3VuZCBieSBSaXR0ZXIncyBhbGdvcml0aG1cblx0XHRsZXQgcmFkaXVzU3F1YXJlZCA9IFZlY3RvcjMubWFnbml0dWRlU3F1YXJlZChWZWN0b3IzLnN1YnRyYWN0KGRpYW1ldGVyMiwgcml0dGVyQ2VudGVyLCBmcm9tUG9pbnRzU2NyYXRjaCkpO1xuXHRcdGxldCByaXR0ZXJSYWRpdXMgPSBNYXRoLnNxcnQocmFkaXVzU3F1YXJlZCk7XG5cblx0XHQvLyBGaW5kIHRoZSBjZW50ZXIgb2YgdGhlIHNwaGVyZSBmb3VuZCB1c2luZyB0aGUgTmFpdmUgbWV0aG9kLlxuXHRcdGNvbnN0IG1pbkJveFB0ID0gZnJvbVBvaW50c01pbkJveFB0O1xuXHRcdG1pbkJveFB0LnggPSB4TWluLng7XG5cdFx0bWluQm94UHQueSA9IHlNaW4ueTtcblx0XHRtaW5Cb3hQdC56ID0gek1pbi56O1xuXG5cdFx0Y29uc3QgbWF4Qm94UHQgPSBmcm9tUG9pbnRzTWF4Qm94UHQ7XG5cdFx0bWF4Qm94UHQueCA9IHhNYXgueDtcblx0XHRtYXhCb3hQdC55ID0geU1heC55O1xuXHRcdG1heEJveFB0LnogPSB6TWF4Lno7XG5cblx0XHRjb25zdCBuYWl2ZUNlbnRlciA9IFZlY3RvcjMubWlkcG9pbnQobWluQm94UHQsIG1heEJveFB0LCBmcm9tUG9pbnRzTmFpdmVDZW50ZXJTY3JhdGNoKTtcblxuXHRcdC8vIEJlZ2luIDJuZCBwYXNzIHRvIGZpbmQgbmFpdmUgcmFkaXVzIGFuZCBtb2RpZnkgdGhlIHJpdHRlciBzcGhlcmUuXG5cdFx0bGV0IG5haXZlUmFkaXVzID0gMDtcblx0XHRmb3IgKGkgPSAwOyBpIDwgbnVtUG9zaXRpb25zOyBpKyspIHtcblx0XHRcdFZlY3RvcjMuY2xvbmUocG9zaXRpb25zW2ldLCBjdXJyZW50UG9zKTtcblxuXHRcdFx0Ly8gRmluZCB0aGUgZnVydGhlc3QgcG9pbnQgZnJvbSB0aGUgbmFpdmUgY2VudGVyIHRvIGNhbGN1bGF0ZSB0aGUgbmFpdmUgcmFkaXVzLlxuXHRcdFx0Y29uc3QgciA9IFZlY3RvcjMubWFnbml0dWRlKFZlY3RvcjMuc3VidHJhY3QoY3VycmVudFBvcywgbmFpdmVDZW50ZXIsIGZyb21Qb2ludHNTY3JhdGNoKSk7XG5cdFx0XHRpZiAociA+IG5haXZlUmFkaXVzKSB7XG5cdFx0XHRcdG5haXZlUmFkaXVzID0gcjtcblx0XHRcdH1cblxuXHRcdFx0Ly8gTWFrZSBhZGp1c3RtZW50cyB0byB0aGUgUml0dGVyIFNwaGVyZSB0byBpbmNsdWRlIGFsbCBwb2ludHMuXG5cdFx0XHRjb25zdCBvbGRDZW50ZXJUb1BvaW50U3F1YXJlZCA9IFZlY3RvcjMubWFnbml0dWRlU3F1YXJlZChcblx0XHRcdFx0VmVjdG9yMy5zdWJ0cmFjdChjdXJyZW50UG9zLCByaXR0ZXJDZW50ZXIsIGZyb21Qb2ludHNTY3JhdGNoKVxuXHRcdFx0KTtcblx0XHRcdGlmIChvbGRDZW50ZXJUb1BvaW50U3F1YXJlZCA+IHJhZGl1c1NxdWFyZWQpIHtcblx0XHRcdFx0Y29uc3Qgb2xkQ2VudGVyVG9Qb2ludCA9IE1hdGguc3FydChvbGRDZW50ZXJUb1BvaW50U3F1YXJlZCk7XG5cdFx0XHRcdC8vIENhbGN1bGF0ZSBuZXcgcmFkaXVzIHRvIGluY2x1ZGUgdGhlIHBvaW50IHRoYXQgbGllcyBvdXRzaWRlXG5cdFx0XHRcdHJpdHRlclJhZGl1cyA9IChyaXR0ZXJSYWRpdXMgKyBvbGRDZW50ZXJUb1BvaW50KSAqIDAuNTtcblx0XHRcdFx0cmFkaXVzU3F1YXJlZCA9IHJpdHRlclJhZGl1cyAqIHJpdHRlclJhZGl1cztcblx0XHRcdFx0Ly8gQ2FsY3VsYXRlIGNlbnRlciBvZiBuZXcgUml0dGVyIHNwaGVyZVxuXHRcdFx0XHRjb25zdCBvbGRUb05ldyA9IG9sZENlbnRlclRvUG9pbnQgLSByaXR0ZXJSYWRpdXM7XG5cdFx0XHRcdHJpdHRlckNlbnRlci54ID0gKHJpdHRlclJhZGl1cyAqIHJpdHRlckNlbnRlci54ICsgb2xkVG9OZXcgKiBjdXJyZW50UG9zLngpIC8gb2xkQ2VudGVyVG9Qb2ludDtcblx0XHRcdFx0cml0dGVyQ2VudGVyLnkgPSAocml0dGVyUmFkaXVzICogcml0dGVyQ2VudGVyLnkgKyBvbGRUb05ldyAqIGN1cnJlbnRQb3MueSkgLyBvbGRDZW50ZXJUb1BvaW50O1xuXHRcdFx0XHRyaXR0ZXJDZW50ZXIueiA9IChyaXR0ZXJSYWRpdXMgKiByaXR0ZXJDZW50ZXIueiArIG9sZFRvTmV3ICogY3VycmVudFBvcy56KSAvIG9sZENlbnRlclRvUG9pbnQ7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0aWYgKHJpdHRlclJhZGl1cyA8IG5haXZlUmFkaXVzKSB7XG5cdFx0XHRWZWN0b3IzLmNsb25lKHJpdHRlckNlbnRlciwgcmVzdWx0LmNlbnRlcik7XG5cdFx0XHRyZXN1bHQucmFkaXVzID0gcml0dGVyUmFkaXVzO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRWZWN0b3IzLmNsb25lKG5haXZlQ2VudGVyLCByZXN1bHQuY2VudGVyKTtcblx0XHRcdHJlc3VsdC5yYWRpdXMgPSBuYWl2ZVJhZGl1cztcblx0XHR9XG5cblx0XHRyZXR1cm4gcmVzdWx0O1xuXHR9XG5cdC8qKlxuXHQgKiBDb21wdXRlcyBhIHRpZ2h0LWZpdHRpbmcgYm91bmRpbmcgc3BoZXJlIGVuY2xvc2luZyBhIGxpc3Qgb2YgM0QgcG9pbnRzLCB3aGVyZSB0aGUgcG9pbnRzIGFyZVxuXHQgKiBzdG9yZWQgaW4gYSBmbGF0IGFycmF5IGluIFgsIFksIFosIG9yZGVyLiAgVGhlIGJvdW5kaW5nIHNwaGVyZSBpcyBjb21wdXRlZCBieSBydW5uaW5nIHR3b1xuXHQgKiBhbGdvcml0aG1zLCBhIG5haXZlIGFsZ29yaXRobSBhbmQgUml0dGVyJ3MgYWxnb3JpdGhtLiBUaGUgc21hbGxlciBvZiB0aGUgdHdvIHNwaGVyZXMgaXMgdXNlZCB0b1xuXHQgKiBlbnN1cmUgYSB0aWdodCBmaXQuXG5cdCAqXG5cdCAqIEBwYXJhbSB7TnVtYmVyW119IFtwb3NpdGlvbnNdIEFuIGFycmF5IG9mIHBvaW50cyB0aGF0IHRoZSBib3VuZGluZyBzcGhlcmUgd2lsbCBlbmNsb3NlLiAgRWFjaCBwb2ludFxuXHQgKiAgICAgICAgaXMgZm9ybWVkIGZyb20gdGhyZWUgZWxlbWVudHMgaW4gdGhlIGFycmF5IGluIHRoZSBvcmRlciBYLCBZLCBaLlxuXHQgKiBAcGFyYW0ge1ZlY3RvcjN9IFtjZW50ZXI9VmVjdG9yMy5aRVJPXSBUaGUgcG9zaXRpb24gdG8gd2hpY2ggdGhlIHBvc2l0aW9ucyBhcmUgcmVsYXRpdmUsIHdoaWNoIG5lZWQgbm90IGJlIHRoZVxuXHQgKiAgICAgICAgb3JpZ2luIG9mIHRoZSBjb29yZGluYXRlIHN5c3RlbS4gIFRoaXMgaXMgdXNlZnVsIHdoZW4gdGhlIHBvc2l0aW9ucyBhcmUgdG8gYmUgdXNlZCBmb3Jcblx0ICogICAgICAgIHJlbGF0aXZlLXRvLWNlbnRlciAoUlRDKSByZW5kZXJpbmcuXG5cdCAqIEBwYXJhbSB7TnVtYmVyfSBbc3RyaWRlPTNdIFRoZSBudW1iZXIgb2YgYXJyYXkgZWxlbWVudHMgcGVyIHZlcnRleC4gIEl0IG11c3QgYmUgYXQgbGVhc3QgMywgYnV0IGl0IG1heVxuXHQgKiAgICAgICAgYmUgaGlnaGVyLiAgUmVnYXJkbGVzcyBvZiB0aGUgdmFsdWUgb2YgdGhpcyBwYXJhbWV0ZXIsIHRoZSBYIGNvb3JkaW5hdGUgb2YgdGhlIGZpcnN0IHBvc2l0aW9uXG5cdCAqICAgICAgICBpcyBhdCBhcnJheSBpbmRleCAwLCB0aGUgWSBjb29yZGluYXRlIGlzIGF0IGFycmF5IGluZGV4IDEsIGFuZCB0aGUgWiBjb29yZGluYXRlIGlzIGF0IGFycmF5IGluZGV4XG5cdCAqICAgICAgICAyLiAgV2hlbiBzdHJpZGUgaXMgMywgdGhlIFggY29vcmRpbmF0ZSBvZiB0aGUgbmV4dCBwb3NpdGlvbiB0aGVuIGJlZ2lucyBhdCBhcnJheSBpbmRleCAzLiAgSWZcblx0ICogICAgICAgIHRoZSBzdHJpZGUgaXMgNSwgaG93ZXZlciwgdHdvIGFycmF5IGVsZW1lbnRzIGFyZSBza2lwcGVkIGFuZCB0aGUgbmV4dCBwb3NpdGlvbiBiZWdpbnMgYXQgYXJyYXlcblx0ICogICAgICAgIGluZGV4IDUuXG5cdCAqIEBwYXJhbSB7Qm91bmRpbmdTcGhlcmV9IFtyZXN1bHRdIFRoZSBvYmplY3Qgb250byB3aGljaCB0byBzdG9yZSB0aGUgcmVzdWx0LlxuXHQgKiBAcmV0dXJucyB7Qm91bmRpbmdTcGhlcmV9IFRoZSBtb2RpZmllZCByZXN1bHQgcGFyYW1ldGVyIG9yIGEgbmV3IEJvdW5kaW5nU3BoZXJlIGluc3RhbmNlIGlmIG9uZSB3YXMgbm90IHByb3ZpZGVkLlxuXHQgKlxuXHQgKiBAZXhhbXBsZVxuXHQgKiAvLyBDb21wdXRlIHRoZSBib3VuZGluZyBzcGhlcmUgZnJvbSAzIHBvc2l0aW9ucywgZWFjaCBzcGVjaWZpZWQgcmVsYXRpdmUgdG8gYSBjZW50ZXIuXG5cdCAqIC8vIEluIGFkZGl0aW9uIHRvIHRoZSBYLCBZLCBhbmQgWiBjb29yZGluYXRlcywgdGhlIHBvaW50cyBhcnJheSBjb250YWlucyB0d28gYWRkaXRpb25hbFxuXHQgKiAvLyBlbGVtZW50cyBwZXIgcG9pbnQgd2hpY2ggYXJlIGlnbm9yZWQgZm9yIHRoZSBwdXJwb3NlIG9mIGNvbXB1dGluZyB0aGUgYm91bmRpbmcgc3BoZXJlLlxuXHQgKiBjb25zdCBjZW50ZXIgPSBuZXcgVmVjdG9yMygxLjAsIDIuMCwgMy4wKTtcblx0ICogY29uc3QgcG9pbnRzID0gWzEuMCwgMi4wLCAzLjAsIDAuMSwgMC4yLFxuXHQgKiAgICAgICAgICAgICAgIDQuMCwgNS4wLCA2LjAsIDAuMSwgMC4yLFxuXHQgKiAgICAgICAgICAgICAgIDcuMCwgOC4wLCA5LjAsIDAuMSwgMC4yXTtcblx0ICogY29uc3Qgc3BoZXJlID0gQm91bmRpbmdTcGhlcmUuZnJvbVZlcnRpY2VzKHBvaW50cywgY2VudGVyLCA1KTtcblx0ICpcblx0ICovXG5cdHN0YXRpYyBmcm9tVmVydGljZXMocG9zaXRpb25zOiBudW1iZXJbXSwgY2VudGVyOiBWZWN0b3IzID0gVmVjdG9yMy5aRVJPLCBzdHJpZGUgPSAzKSB7XG5cdFx0Y29uc3QgcmVzdWx0ID0gbmV3IEJvdW5kaW5nU3BoZXJlKCk7XG5cblx0XHRpZiAoIWRlZmluZWQocG9zaXRpb25zKSB8fCBwb3NpdGlvbnMubGVuZ3RoID09PSAwKSB7XG5cdFx0XHRyZXN1bHQuY2VudGVyID0gVmVjdG9yMy5jbG9uZShWZWN0b3IzLlpFUk8sIHJlc3VsdC5jZW50ZXIpO1xuXHRcdFx0cmVzdWx0LnJhZGl1cyA9IDAuMDtcblx0XHRcdHJldHVybiByZXN1bHQ7XG5cdFx0fVxuXG5cdFx0Y2VudGVyID0gZGVmYXVsdFZhbHVlKGNlbnRlciwgVmVjdG9yMy5aRVJPKTtcblxuXHRcdHN0cmlkZSA9IGRlZmF1bHRWYWx1ZShzdHJpZGUsIDMpO1xuXG5cdFx0Y29uc3QgY3VycmVudFBvcyA9IGZyb21Qb2ludHNDdXJyZW50UG9zO1xuXHRcdGN1cnJlbnRQb3MueCA9IHBvc2l0aW9uc1swXSArIGNlbnRlci54O1xuXHRcdGN1cnJlbnRQb3MueSA9IHBvc2l0aW9uc1sxXSArIGNlbnRlci55O1xuXHRcdGN1cnJlbnRQb3MueiA9IHBvc2l0aW9uc1syXSArIGNlbnRlci56O1xuXG5cdFx0Y29uc3QgeE1pbiA9IFZlY3RvcjMuY2xvbmUoY3VycmVudFBvcywgZnJvbVBvaW50c1hNaW4pO1xuXHRcdGNvbnN0IHlNaW4gPSBWZWN0b3IzLmNsb25lKGN1cnJlbnRQb3MsIGZyb21Qb2ludHNZTWluKTtcblx0XHRjb25zdCB6TWluID0gVmVjdG9yMy5jbG9uZShjdXJyZW50UG9zLCBmcm9tUG9pbnRzWk1pbik7XG5cblx0XHRjb25zdCB4TWF4ID0gVmVjdG9yMy5jbG9uZShjdXJyZW50UG9zLCBmcm9tUG9pbnRzWE1heCk7XG5cdFx0Y29uc3QgeU1heCA9IFZlY3RvcjMuY2xvbmUoY3VycmVudFBvcywgZnJvbVBvaW50c1lNYXgpO1xuXHRcdGNvbnN0IHpNYXggPSBWZWN0b3IzLmNsb25lKGN1cnJlbnRQb3MsIGZyb21Qb2ludHNaTWF4KTtcblxuXHRcdGNvbnN0IG51bUVsZW1lbnRzID0gcG9zaXRpb25zLmxlbmd0aDtcblx0XHRsZXQgaTtcblx0XHRmb3IgKGkgPSAwOyBpIDwgbnVtRWxlbWVudHM7IGkgKz0gc3RyaWRlKSB7XG5cdFx0XHRjb25zdCB4ID0gcG9zaXRpb25zW2ldICsgY2VudGVyLng7XG5cdFx0XHRjb25zdCB5ID0gcG9zaXRpb25zW2kgKyAxXSArIGNlbnRlci55O1xuXHRcdFx0Y29uc3QgeiA9IHBvc2l0aW9uc1tpICsgMl0gKyBjZW50ZXIuejtcblxuXHRcdFx0Y3VycmVudFBvcy54ID0geDtcblx0XHRcdGN1cnJlbnRQb3MueSA9IHk7XG5cdFx0XHRjdXJyZW50UG9zLnogPSB6O1xuXG5cdFx0XHQvLyBTdG9yZSBwb2ludHMgY29udGFpbmluZyB0aGUgdGhlIHNtYWxsZXN0IGFuZCBsYXJnZXN0IGNvbXBvbmVudHNcblx0XHRcdGlmICh4IDwgeE1pbi54KSB7XG5cdFx0XHRcdFZlY3RvcjMuY2xvbmUoY3VycmVudFBvcywgeE1pbik7XG5cdFx0XHR9XG5cblx0XHRcdGlmICh4ID4geE1heC54KSB7XG5cdFx0XHRcdFZlY3RvcjMuY2xvbmUoY3VycmVudFBvcywgeE1heCk7XG5cdFx0XHR9XG5cblx0XHRcdGlmICh5IDwgeU1pbi55KSB7XG5cdFx0XHRcdFZlY3RvcjMuY2xvbmUoY3VycmVudFBvcywgeU1pbik7XG5cdFx0XHR9XG5cblx0XHRcdGlmICh5ID4geU1heC55KSB7XG5cdFx0XHRcdFZlY3RvcjMuY2xvbmUoY3VycmVudFBvcywgeU1heCk7XG5cdFx0XHR9XG5cblx0XHRcdGlmICh6IDwgek1pbi56KSB7XG5cdFx0XHRcdFZlY3RvcjMuY2xvbmUoY3VycmVudFBvcywgek1pbik7XG5cdFx0XHR9XG5cblx0XHRcdGlmICh6ID4gek1heC56KSB7XG5cdFx0XHRcdFZlY3RvcjMuY2xvbmUoY3VycmVudFBvcywgek1heCk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0Ly8gQ29tcHV0ZSB4LSwgeS0sIGFuZCB6LXNwYW5zIChTcXVhcmVkIGRpc3RhbmNlcyBiL24gZWFjaCBjb21wb25lbnQncyBtaW4uIGFuZCBtYXguKS5cblx0XHRjb25zdCB4U3BhbiA9IFZlY3RvcjMubWFnbml0dWRlU3F1YXJlZChWZWN0b3IzLnN1YnRyYWN0KHhNYXgsIHhNaW4sIGZyb21Qb2ludHNTY3JhdGNoKSk7XG5cdFx0Y29uc3QgeVNwYW4gPSBWZWN0b3IzLm1hZ25pdHVkZVNxdWFyZWQoVmVjdG9yMy5zdWJ0cmFjdCh5TWF4LCB5TWluLCBmcm9tUG9pbnRzU2NyYXRjaCkpO1xuXHRcdGNvbnN0IHpTcGFuID0gVmVjdG9yMy5tYWduaXR1ZGVTcXVhcmVkKFZlY3RvcjMuc3VidHJhY3Qoek1heCwgek1pbiwgZnJvbVBvaW50c1NjcmF0Y2gpKTtcblxuXHRcdC8vIFNldCB0aGUgZGlhbWV0ZXIgZW5kcG9pbnRzIHRvIHRoZSBsYXJnZXN0IHNwYW4uXG5cdFx0bGV0IGRpYW1ldGVyMSA9IHhNaW47XG5cdFx0bGV0IGRpYW1ldGVyMiA9IHhNYXg7XG5cdFx0bGV0IG1heFNwYW4gPSB4U3Bhbjtcblx0XHRpZiAoeVNwYW4gPiBtYXhTcGFuKSB7XG5cdFx0XHRtYXhTcGFuID0geVNwYW47XG5cdFx0XHRkaWFtZXRlcjEgPSB5TWluO1xuXHRcdFx0ZGlhbWV0ZXIyID0geU1heDtcblx0XHR9XG5cdFx0aWYgKHpTcGFuID4gbWF4U3Bhbikge1xuXHRcdFx0bWF4U3BhbiA9IHpTcGFuO1xuXHRcdFx0ZGlhbWV0ZXIxID0gek1pbjtcblx0XHRcdGRpYW1ldGVyMiA9IHpNYXg7XG5cdFx0fVxuXG5cdFx0Ly8gQ2FsY3VsYXRlIHRoZSBjZW50ZXIgb2YgdGhlIGluaXRpYWwgc3BoZXJlIGZvdW5kIGJ5IFJpdHRlcidzIGFsZ29yaXRobVxuXHRcdGNvbnN0IHJpdHRlckNlbnRlciA9IGZyb21Qb2ludHNSaXR0ZXJDZW50ZXI7XG5cdFx0cml0dGVyQ2VudGVyLnggPSAoZGlhbWV0ZXIxLnggKyBkaWFtZXRlcjIueCkgKiAwLjU7XG5cdFx0cml0dGVyQ2VudGVyLnkgPSAoZGlhbWV0ZXIxLnkgKyBkaWFtZXRlcjIueSkgKiAwLjU7XG5cdFx0cml0dGVyQ2VudGVyLnogPSAoZGlhbWV0ZXIxLnogKyBkaWFtZXRlcjIueikgKiAwLjU7XG5cblx0XHQvLyBDYWxjdWxhdGUgdGhlIHJhZGl1cyBvZiB0aGUgaW5pdGlhbCBzcGhlcmUgZm91bmQgYnkgUml0dGVyJ3MgYWxnb3JpdGhtXG5cdFx0bGV0IHJhZGl1c1NxdWFyZWQgPSBWZWN0b3IzLm1hZ25pdHVkZVNxdWFyZWQoVmVjdG9yMy5zdWJ0cmFjdChkaWFtZXRlcjIsIHJpdHRlckNlbnRlciwgZnJvbVBvaW50c1NjcmF0Y2gpKTtcblx0XHRsZXQgcml0dGVyUmFkaXVzID0gTWF0aC5zcXJ0KHJhZGl1c1NxdWFyZWQpO1xuXG5cdFx0Ly8gRmluZCB0aGUgY2VudGVyIG9mIHRoZSBzcGhlcmUgZm91bmQgdXNpbmcgdGhlIE5haXZlIG1ldGhvZC5cblx0XHRjb25zdCBtaW5Cb3hQdCA9IGZyb21Qb2ludHNNaW5Cb3hQdDtcblx0XHRtaW5Cb3hQdC54ID0geE1pbi54O1xuXHRcdG1pbkJveFB0LnkgPSB5TWluLnk7XG5cdFx0bWluQm94UHQueiA9IHpNaW4uejtcblxuXHRcdGNvbnN0IG1heEJveFB0ID0gZnJvbVBvaW50c01heEJveFB0O1xuXHRcdG1heEJveFB0LnggPSB4TWF4Lng7XG5cdFx0bWF4Qm94UHQueSA9IHlNYXgueTtcblx0XHRtYXhCb3hQdC56ID0gek1heC56O1xuXG5cdFx0Y29uc3QgbmFpdmVDZW50ZXIgPSBWZWN0b3IzLm1pZHBvaW50KG1pbkJveFB0LCBtYXhCb3hQdCwgZnJvbVBvaW50c05haXZlQ2VudGVyU2NyYXRjaCk7XG5cblx0XHQvLyBCZWdpbiAybmQgcGFzcyB0byBmaW5kIG5haXZlIHJhZGl1cyBhbmQgbW9kaWZ5IHRoZSByaXR0ZXIgc3BoZXJlLlxuXHRcdGxldCBuYWl2ZVJhZGl1cyA9IDA7XG5cdFx0Zm9yIChpID0gMDsgaSA8IG51bUVsZW1lbnRzOyBpICs9IHN0cmlkZSkge1xuXHRcdFx0Y3VycmVudFBvcy54ID0gcG9zaXRpb25zW2ldICsgY2VudGVyLng7XG5cdFx0XHRjdXJyZW50UG9zLnkgPSBwb3NpdGlvbnNbaSArIDFdICsgY2VudGVyLnk7XG5cdFx0XHRjdXJyZW50UG9zLnogPSBwb3NpdGlvbnNbaSArIDJdICsgY2VudGVyLno7XG5cblx0XHRcdC8vIEZpbmQgdGhlIGZ1cnRoZXN0IHBvaW50IGZyb20gdGhlIG5haXZlIGNlbnRlciB0byBjYWxjdWxhdGUgdGhlIG5haXZlIHJhZGl1cy5cblx0XHRcdGNvbnN0IHIgPSBWZWN0b3IzLm1hZ25pdHVkZShWZWN0b3IzLnN1YnRyYWN0KGN1cnJlbnRQb3MsIG5haXZlQ2VudGVyLCBmcm9tUG9pbnRzU2NyYXRjaCkpO1xuXHRcdFx0aWYgKHIgPiBuYWl2ZVJhZGl1cykge1xuXHRcdFx0XHRuYWl2ZVJhZGl1cyA9IHI7XG5cdFx0XHR9XG5cblx0XHRcdC8vIE1ha2UgYWRqdXN0bWVudHMgdG8gdGhlIFJpdHRlciBTcGhlcmUgdG8gaW5jbHVkZSBhbGwgcG9pbnRzLlxuXHRcdFx0Y29uc3Qgb2xkQ2VudGVyVG9Qb2ludFNxdWFyZWQgPSBWZWN0b3IzLm1hZ25pdHVkZVNxdWFyZWQoXG5cdFx0XHRcdFZlY3RvcjMuc3VidHJhY3QoY3VycmVudFBvcywgcml0dGVyQ2VudGVyLCBmcm9tUG9pbnRzU2NyYXRjaClcblx0XHRcdCk7XG5cdFx0XHRpZiAob2xkQ2VudGVyVG9Qb2ludFNxdWFyZWQgPiByYWRpdXNTcXVhcmVkKSB7XG5cdFx0XHRcdGNvbnN0IG9sZENlbnRlclRvUG9pbnQgPSBNYXRoLnNxcnQob2xkQ2VudGVyVG9Qb2ludFNxdWFyZWQpO1xuXHRcdFx0XHQvLyBDYWxjdWxhdGUgbmV3IHJhZGl1cyB0byBpbmNsdWRlIHRoZSBwb2ludCB0aGF0IGxpZXMgb3V0c2lkZVxuXHRcdFx0XHRyaXR0ZXJSYWRpdXMgPSAocml0dGVyUmFkaXVzICsgb2xkQ2VudGVyVG9Qb2ludCkgKiAwLjU7XG5cdFx0XHRcdHJhZGl1c1NxdWFyZWQgPSByaXR0ZXJSYWRpdXMgKiByaXR0ZXJSYWRpdXM7XG5cdFx0XHRcdC8vIENhbGN1bGF0ZSBjZW50ZXIgb2YgbmV3IFJpdHRlciBzcGhlcmVcblx0XHRcdFx0Y29uc3Qgb2xkVG9OZXcgPSBvbGRDZW50ZXJUb1BvaW50IC0gcml0dGVyUmFkaXVzO1xuXHRcdFx0XHRyaXR0ZXJDZW50ZXIueCA9IChyaXR0ZXJSYWRpdXMgKiByaXR0ZXJDZW50ZXIueCArIG9sZFRvTmV3ICogY3VycmVudFBvcy54KSAvIG9sZENlbnRlclRvUG9pbnQ7XG5cdFx0XHRcdHJpdHRlckNlbnRlci55ID0gKHJpdHRlclJhZGl1cyAqIHJpdHRlckNlbnRlci55ICsgb2xkVG9OZXcgKiBjdXJyZW50UG9zLnkpIC8gb2xkQ2VudGVyVG9Qb2ludDtcblx0XHRcdFx0cml0dGVyQ2VudGVyLnogPSAocml0dGVyUmFkaXVzICogcml0dGVyQ2VudGVyLnogKyBvbGRUb05ldyAqIGN1cnJlbnRQb3MueikgLyBvbGRDZW50ZXJUb1BvaW50O1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdGlmIChyaXR0ZXJSYWRpdXMgPCBuYWl2ZVJhZGl1cykge1xuXHRcdFx0VmVjdG9yMy5jbG9uZShyaXR0ZXJDZW50ZXIsIHJlc3VsdC5jZW50ZXIpO1xuXHRcdFx0cmVzdWx0LnJhZGl1cyA9IHJpdHRlclJhZGl1cztcblx0XHR9IGVsc2Uge1xuXHRcdFx0VmVjdG9yMy5jbG9uZShuYWl2ZUNlbnRlciwgcmVzdWx0LmNlbnRlcik7XG5cdFx0XHRyZXN1bHQucmFkaXVzID0gbmFpdmVSYWRpdXM7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHJlc3VsdDtcblx0fVxuXG5cdGludGVyc2VjdFBsYW5lKHBsYW5lOiBQbGFuZSkge1xuXHRcdGNvbnN0IGNlbnRlciA9IHRoaXMuY2VudGVyO1xuXHRcdGNvbnN0IHJhZGl1cyA9IHRoaXMucmFkaXVzO1xuXHRcdGNvbnN0IG5vcm1hbCA9IHBsYW5lLm5vcm1hbDtcblx0XHRjb25zdCBkaXN0YW5jZVRvUGxhbmUgPSBWZWN0b3IzLmRvdChub3JtYWwsIGNlbnRlcikgKyBwbGFuZS5kaXN0YW5jZTtcblxuXHRcdGlmIChkaXN0YW5jZVRvUGxhbmUgPCAtcmFkaXVzKSB7XG5cdFx0XHQvLyBUaGUgY2VudGVyIHBvaW50IGlzIG5lZ2F0aXZlIHNpZGUgb2YgdGhlIHBsYW5lIG5vcm1hbFxuXHRcdFx0cmV0dXJuIEludGVyc2VjdC5PVVRTSURFO1xuXHRcdH0gZWxzZSBpZiAoZGlzdGFuY2VUb1BsYW5lIDwgcmFkaXVzKSB7XG5cdFx0XHQvLyBUaGUgY2VudGVyIHBvaW50IGlzIHBvc2l0aXZlIHNpZGUgb2YgdGhlIHBsYW5lLCBidXQgcmFkaXVzIGV4dGVuZHMgYmV5b25kIGl0OyBwYXJ0aWFsIG92ZXJsYXBcblx0XHRcdHJldHVybiBJbnRlcnNlY3QuSU5URVJTRUNUSU5HO1xuXHRcdH1cblx0XHRyZXR1cm4gSW50ZXJzZWN0LklOU0lERTtcblx0fVxuXHR1cGRhdGUodHJhbnNmb3JtOiBNYXRyaXg0KSB7XG5cdFx0TWF0cml4NC5tdWx0aXBseUJ5UG9pbnQodHJhbnNmb3JtLCB0aGlzLm9yaWdpbkNlbnRlciwgdGhpcy5jZW50ZXIpO1xuXHRcdHRoaXMucmFkaXVzID0gTWF0cml4NC5nZXRNYXhpbXVtU2NhbGUodHJhbnNmb3JtKSAqIHRoaXMub3JpZ2luUmFkaXVzO1xuXHR9XG5cdGRpc3RhbmNlVG9DYW1lcmEoY2FtZXJhOiBDYW1lcmEpIHtcblx0XHRyZXR1cm4gTWF0aC5tYXgoMC4wLCBWZWN0b3IzLmRpc3RhbmNlKHRoaXMuY2VudGVyLCBjYW1lcmEucG9zaXRpb24pIC0gdGhpcy5yYWRpdXMpO1xuXHR9XG59XG5jb25zdCBmcm9tUG9pbnRzWE1pbiA9IG5ldyBWZWN0b3IzKCk7XG5jb25zdCBmcm9tUG9pbnRzWU1pbiA9IG5ldyBWZWN0b3IzKCk7XG5jb25zdCBmcm9tUG9pbnRzWk1pbiA9IG5ldyBWZWN0b3IzKCk7XG5jb25zdCBmcm9tUG9pbnRzWE1heCA9IG5ldyBWZWN0b3IzKCk7XG5jb25zdCBmcm9tUG9pbnRzWU1heCA9IG5ldyBWZWN0b3IzKCk7XG5jb25zdCBmcm9tUG9pbnRzWk1heCA9IG5ldyBWZWN0b3IzKCk7XG5jb25zdCBmcm9tUG9pbnRzQ3VycmVudFBvcyA9IG5ldyBWZWN0b3IzKCk7XG5jb25zdCBmcm9tUG9pbnRzU2NyYXRjaCA9IG5ldyBWZWN0b3IzKCk7XG5jb25zdCBmcm9tUG9pbnRzUml0dGVyQ2VudGVyID0gbmV3IFZlY3RvcjMoKTtcbmNvbnN0IGZyb21Qb2ludHNNaW5Cb3hQdCA9IG5ldyBWZWN0b3IzKCk7XG5jb25zdCBmcm9tUG9pbnRzTWF4Qm94UHQgPSBuZXcgVmVjdG9yMygpO1xuY29uc3QgZnJvbVBvaW50c05haXZlQ2VudGVyU2NyYXRjaCA9IG5ldyBWZWN0b3IzKCk7XG4iLCJpbXBvcnQgeyBJbmRleEZvcm1hdCB9IGZyb20gXCIuLi9jb3JlL1dlYkdQVUNvbnN0YW50XCI7XHJcbmltcG9ydCBCdWZmZXIgZnJvbSBcIi4vQnVmZmVyXCI7XHJcbmltcG9ydCB7VHlwZWRBcnJheX0gZnJvbSBcIi4uL3V0aWxzL2dsdGZVdGlsc1wiO1xyXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBJbmRleEJ1ZmZlciB7XHJcblx0YnVmZmVyOiBCdWZmZXI7XHJcblx0aW5kaWNlczogVHlwZWRBcnJheTtcclxuXHRpbmRleEZvcm1hdDogR1BVSW5kZXhGb3JtYXQ7XHJcblx0ZGlydHk6IGJvb2xlYW47XHJcblx0cHJpdmF0ZSBsYWJlbDogc3RyaW5nO1xyXG5cdGNvbnN0cnVjdG9yKGxhYmVsOiBzdHJpbmcsIGluZGljZXM/OiBUeXBlZEFycmF5KSB7XHJcblx0XHR0aGlzLmxhYmVsID0gbGFiZWw7XHJcblx0XHR0aGlzLmluZGljZXMgPSBpbmRpY2VzO1xyXG5cdFx0dGhpcy5pbmRleEZvcm1hdCA9IGluZGljZXMgaW5zdGFuY2VvZiBVaW50MzJBcnJheSA/IEluZGV4Rm9ybWF0LlVpbnQzMiA6IEluZGV4Rm9ybWF0LlVpbnQxNjtcclxuXHRcdHRoaXMuZGlydHkgPSB0cnVlO1xyXG5cdH1cclxuXHRzZXRJbmRpY2VzKGluZGljZXMpIHtcclxuXHRcdHRoaXMuaW5kaWNlcyA9IGluZGljZXM7XHJcblx0XHR0aGlzLmluZGV4Rm9ybWF0ID0gaW5kaWNlcyBpbnN0YW5jZW9mIFVpbnQzMkFycmF5ID8gSW5kZXhGb3JtYXQuVWludDMyIDogSW5kZXhGb3JtYXQuVWludDE2O1xyXG5cdFx0dGhpcy5kaXJ0eSA9IHRydWU7XHJcblx0fVxyXG5cdGJpbmQoZGV2aWNlOiBHUFVEZXZpY2UsIHBhc3NFbmNvZGVyOiBHUFVSZW5kZXJQYXNzRW5jb2Rlcikge1xyXG5cdFx0aWYgKHRoaXMuZGlydHkpIHtcclxuXHRcdFx0dGhpcy5kaXJ0eSA9IGZhbHNlO1xyXG5cdFx0XHR0aGlzLmJ1ZmZlciA9IEJ1ZmZlci5jcmVhdGVJbmRleEJ1ZmZlcihcclxuXHRcdFx0XHR0aGlzLmxhYmVsLFxyXG5cdFx0XHRcdGRldmljZSxcclxuXHRcdFx0XHR0aGlzLmluZGljZXMgaW5zdGFuY2VvZiBBcnJheSA/XHJcblx0XHRcdFx0XHQoSW5kZXhGb3JtYXQuVWludDE2ID8gbmV3IFVpbnQxNkFycmF5KHRoaXMuaW5kaWNlcykgOiBuZXcgVWludDMyQXJyYXkodGhpcy5pbmRpY2VzKSk6XHJcblx0XHRcdFx0XHR0aGlzLmluZGljZXMpO1xyXG5cdFx0fVxyXG5cdFx0cGFzc0VuY29kZXIuc2V0SW5kZXhCdWZmZXIodGhpcy5idWZmZXIuZ3B1QnVmZmVyLCB0aGlzLmluZGV4Rm9ybWF0KTtcclxuXHR9XHJcblx0ZGVzdHJveSgpIHtcclxuXHRcdHRoaXMuYnVmZmVyLmRlc3Ryb3koKTtcclxuXHR9XHJcbn1cclxuIiwiaW1wb3J0IHsgQXR0cmlidXRlLCBBdHRyaWJ1dGVUeXBlLCBCdWZmZXJGbG9hdDMyQXR0cmlidXRlLCBJbnRlcmxlYXZlZEF0dHJpYnV0ZSB9IGZyb20gXCIuL0F0dHJpYnV0ZVwiO1xuaW1wb3J0IEJ1ZmZlciBmcm9tIFwiLi9CdWZmZXJcIjtcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEF0dHJpYnV0ZXMge1xuXHRwdWJsaWMgaW50ZXJsZWF2ZTogYm9vbGVhbjtcblx0cHJpdmF0ZSBfYXR0cmlidXRlczogTWFwPHN0cmluZywgQXR0cmlidXRlIHwgSW50ZXJsZWF2ZWRBdHRyaWJ1dGU+O1xuXHRwcml2YXRlIHNoYWRlckxvY2F0aW9uOiBudW1iZXI7XG5cdHByaXZhdGUgb2Zmc2V0OiBudW1iZXI7XG5cdGNvbnN0cnVjdG9yKHNoYWRlckxvY2F0aW9uID0gMCkge1xuXHRcdHRoaXMuX2F0dHJpYnV0ZXMgPSBuZXcgTWFwKCk7XG5cdFx0dGhpcy5zaGFkZXJMb2NhdGlvbiA9IHNoYWRlckxvY2F0aW9uO1xuXHRcdHRoaXMub2Zmc2V0ID0gMDtcblx0XHR0aGlzLmludGVybGVhdmUgPSBmYWxzZTtcblx0fVxuXHRnZXQgZGlydHkoKTogYm9vbGVhbiB7XG5cdFx0bGV0IHJlc3VsdCA9IGZhbHNlO1xuXHRcdHRoaXMuX2F0dHJpYnV0ZXMuZm9yRWFjaCgoYXR0cmlidXRlKSA9PiAoIXJlc3VsdCA/IChyZXN1bHQgPSBhdHRyaWJ1dGUuZGlydHkpIDogZmFsc2UpKTtcblx0XHRyZXR1cm4gcmVzdWx0O1xuXHR9XG5cdHNldCBkaXJ0eSh2YWx1ZTogYm9vbGVhbikge1xuXHRcdHRoaXMuX2F0dHJpYnV0ZXMuZm9yRWFjaCgoYXR0cmlidXRlKSA9PiAoYXR0cmlidXRlLmRpcnR5ID0gdmFsdWUpKTtcblx0fVxuXHRnZXQgdmFsdWVzKCk6IE1hcDxzdHJpbmcsIEF0dHJpYnV0ZSB8IEludGVybGVhdmVkQXR0cmlidXRlPiB7XG5cdFx0cmV0dXJuIHRoaXMuX2F0dHJpYnV0ZXM7XG5cdH1cblx0Z2V0QXR0cmlidXRlKG5hbWUpOiBBdHRyaWJ1dGUgfCBJbnRlcmxlYXZlZEF0dHJpYnV0ZSB7XG5cdFx0cmV0dXJuIHRoaXMuX2F0dHJpYnV0ZXMuZ2V0KG5hbWUpO1xuXHR9XG5cdHNldEF0dHJpYnV0ZShhdHRyaWJ1dGU6IEF0dHJpYnV0ZSB8IEludGVybGVhdmVkQXR0cmlidXRlKSB7XG5cdFx0aWYgKGF0dHJpYnV0ZS5hdHRyaWJ1dGVUeXBlID09PSBBdHRyaWJ1dGVUeXBlLmF0dHJpYnV0ZSkge1xuXHRcdFx0dGhpcy5zZXROb3RJbnRlcmxlYXZlZEF0dHJpYnV0ZShhdHRyaWJ1dGUgYXMgQXR0cmlidXRlKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0dGhpcy5zZXRJbnRlcmxlYXZlZEF0dHJpYnV0ZShhdHRyaWJ1dGUgYXMgSW50ZXJsZWF2ZWRBdHRyaWJ1dGUpO1xuXHRcdH1cblx0fVxuXHRwcml2YXRlIHNldE5vdEludGVybGVhdmVkQXR0cmlidXRlKGF0dHJpYnV0ZTogQXR0cmlidXRlKSB7XG5cdFx0aWYgKHRoaXMuX2F0dHJpYnV0ZXMuaGFzKGF0dHJpYnV0ZS5uYW1lKSkgcmV0dXJuO1xuXHRcdGF0dHJpYnV0ZS5zaGFkZXJMb2NhdGlvbiA9IHRoaXMuc2hhZGVyTG9jYXRpb247XG5cdFx0dGhpcy5zaGFkZXJMb2NhdGlvbiArPSAxO1xuXHRcdGF0dHJpYnV0ZS5vZmZzZXQgPSB0aGlzLm9mZnNldDtcblx0XHR0aGlzLm9mZnNldCArPSBhdHRyaWJ1dGUuYXR0cmlidXRlQnl0ZVNpemU7XG5cdFx0dGhpcy5fYXR0cmlidXRlcy5zZXQoYXR0cmlidXRlLm5hbWUsIGF0dHJpYnV0ZSk7XG5cdH1cblx0cHJpdmF0ZSBzZXRJbnRlcmxlYXZlZEF0dHJpYnV0ZShhdHRyaWJ1dGU6IEludGVybGVhdmVkQXR0cmlidXRlKSB7XG5cdFx0aWYgKHRoaXMuX2F0dHJpYnV0ZXMuaGFzKGF0dHJpYnV0ZS5uYW1lcy50b1N0cmluZygpKSkgcmV0dXJuO1xuXHRcdHRoaXMuX2F0dHJpYnV0ZXMuc2V0KGF0dHJpYnV0ZS5uYW1lcy50b1N0cmluZygpLCBhdHRyaWJ1dGUpO1xuXHR9XG5cdGdldEdQVUF0dHJpYnV0ZXNEZXMoKSB7XG5cdFx0Y29uc3QgcmVzdWx0ID0gW107XG5cdFx0dGhpcy5fYXR0cmlidXRlcy5mb3JFYWNoKChhdHRyaWJ1dGUpID0+IHtcblx0XHRcdHJlc3VsdC5wdXNoKC4uLmF0dHJpYnV0ZS5nZXRHUFVBdHRyaWJ1dGUoKSk7XG5cdFx0fSk7XG5cdFx0cmV0dXJuIHJlc3VsdDtcblx0fVxuXHRnZXRBdHJyaWJ1dGVWYWx1ZXMoKToge1xuXHRcdGFycmF5U3RyaWRlOiBudW1iZXI7XG5cdFx0dHlwZUFycmF5OiBGbG9hdDMyQXJyYXk7XG5cdFx0YnVmZmVyPzogQnVmZmVyO1xuXHR9IHtcblx0XHRjb25zdCBhcnJheVN0cmlkZXMgPSBbXTtcblx0XHRsZXQgYXJyYXlTdHJpZGUgPSAwO1xuXHRcdGxldCBidWZmZXIgPSB1bmRlZmluZWQ7XG5cdFx0bGV0IHZhbHVlcyA9IG51bGw7XG5cdFx0Y29uc3QgYXJyYXlzID0gW107XG5cdFx0dGhpcy5fYXR0cmlidXRlcy5mb3JFYWNoKChhdHRyaWJ1dGU6IEF0dHJpYnV0ZSB8IEludGVybGVhdmVkQXR0cmlidXRlKSA9PiB7XG5cdFx0XHRpZiAoYXR0cmlidXRlLmF0dHJpYnV0ZVR5cGUgPT09IEF0dHJpYnV0ZVR5cGUuYXR0cmlidXRlKSB7XG5cdFx0XHRcdGFycmF5U3RyaWRlcy5wdXNoKChhdHRyaWJ1dGUgYXMgQXR0cmlidXRlKS5pdGVtU2l6ZSk7XG5cdFx0XHRcdGFycmF5cy5wdXNoKGF0dHJpYnV0ZS52YWx1ZSk7XG5cdFx0XHRcdGFycmF5U3RyaWRlICs9IChhdHRyaWJ1dGUgYXMgQXR0cmlidXRlKS5pdGVtU2l6ZTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdGlmICghdGhpcy5pbnRlcmxlYXZlKSB0aGlzLmludGVybGVhdmUgPSB0cnVlO1xuXHRcdFx0XHR2YWx1ZXMgPSB2YWx1ZXMgPz8gYXR0cmlidXRlLnZhbHVlO1xuXHRcdFx0XHRidWZmZXIgPSAoYXR0cmlidXRlIGFzIEJ1ZmZlckZsb2F0MzJBdHRyaWJ1dGUpPy5idWZmZXI7XG5cdFx0XHRcdGFycmF5U3RyaWRlID0gKGF0dHJpYnV0ZSBhcyBJbnRlcmxlYXZlZEF0dHJpYnV0ZSkuaXRlbVNpemVzLnJlZHVjZShcblx0XHRcdFx0XHQodG90YWwsIGN1cnJlbnQpID0+ICh0b3RhbCArPSBjdXJyZW50KSxcblx0XHRcdFx0XHQwXG5cdFx0XHRcdCk7XG5cdFx0XHR9XG5cdFx0fSk7XG5cblx0XHRjb25zdCB0eXBlQXJyYXkgPSB0aGlzLmludGVybGVhdmVcblx0XHRcdD8gbmV3IEZsb2F0MzJBcnJheSh2YWx1ZXMpXG5cdFx0XHQ6IHRoaXMuaW50ZXJsZWF2ZVR5cGVkQXJyYXkoRmxvYXQzMkFycmF5LCBhcnJheVN0cmlkZXMsIC4uLmFycmF5cyk7XG5cdFx0cmV0dXJuIHtcblx0XHRcdGFycmF5U3RyaWRlOiBhcnJheVN0cmlkZSAqIHR5cGVBcnJheS5CWVRFU19QRVJfRUxFTUVOVCxcblx0XHRcdHR5cGVBcnJheSxcblx0XHRcdGJ1ZmZlclxuXHRcdH07XG5cdH1cblx0ZGVzdHJveSgpIHtcblx0XHR0aGlzLl9hdHRyaWJ1dGVzLmZvckVhY2goKGF0dHJpYnV0ZSkgPT4ge1xuXHRcdFx0YXR0cmlidXRlLmRlc3Ryb3koKTtcblx0XHR9KTtcblx0fVxuXHQvKipcblx0ICogSW50ZXJsZWF2ZSBuIHR5cGVkIGFycmF5c1xuXHQgKiBAYWxpYXMgbW9kdWxlOmludGVybGVhdmVUeXBlZEFycmF5XG5cdCAqIEBwYXJhbSB7VHlwZWRBcnJheX0gUmVzdWx0Q29uc3RydWN0b3IgUmV0dXJuZWQgdHlwZWQgYXJyYXkgY29uc3RydWN0b3Jcblx0ICogQHBhcmFtIHtBcnJheX0gZWxlbWVudHMgTnVtYmVyIG9mIGVsZW1lbnRzIHRvIGdyb3VwIGZvciBlYWNoIHR5cGVkIGFycmF5XG5cdCAqIEBwYXJhbSB7Li4uVHlwZWRBcnJheX0gYXJyYXlzIEFycmF5cyB0byBpbnRlcmxlYXZlXG5cdCAqIEByZXR1cm5zIHtUeXBlZEFycmF5fVxuXHQgKi9cblx0aW50ZXJsZWF2ZVR5cGVkQXJyYXkoUmVzdWx0Q29uc3RydWN0b3IsIGVsZW1lbnRzLCAuLi5hcnJheXMpIHtcblx0XHRjb25zdCB0b3RhbExlbmd0aCA9IGFycmF5cy5yZWR1Y2UoKHRvdGFsLCBhcnIpID0+IHRvdGFsICsgYXJyLmxlbmd0aCwgMCk7XG5cdFx0Y29uc3QgcmVzdWx0ID0gbmV3IFJlc3VsdENvbnN0cnVjdG9yKHRvdGFsTGVuZ3RoKTtcblx0XHRjb25zdCBzdHJpZGUgPSBlbGVtZW50cy5yZWR1Y2UoKGEsIGIpID0+IGEgKyBiKTtcblxuXHRcdGZvciAobGV0IGkgPSAwOyBpIDwgdG90YWxMZW5ndGg7IGkrKykge1xuXHRcdFx0bGV0IG9mZnNldCA9IDA7XG5cdFx0XHRmb3IgKGxldCBqID0gMDsgaiA8IGVsZW1lbnRzLmxlbmd0aDsgaisrKSB7XG5cdFx0XHRcdGZvciAobGV0IGsgPSAwOyBrIDwgZWxlbWVudHNbal07IGsrKykge1xuXHRcdFx0XHRcdHJlc3VsdFtpICogc3RyaWRlICsgb2Zmc2V0XSA9IGFycmF5c1tqXVtlbGVtZW50c1tqXSAqIGkgKyBrXTtcblx0XHRcdFx0XHRvZmZzZXQrKztcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH1cblx0XHRyZXR1cm4gcmVzdWx0O1xuXHR9XG59XG4iLCJpbXBvcnQgeyBJbnB1dFN0ZXBNb2RlIH0gZnJvbSBcIi4uL2NvcmUvV2ViR1BVQ29uc3RhbnRcIjtcbmltcG9ydCB7IFZlcnRleEJ1ZmZlclBhcmFtcyB9IGZyb20gXCIuLi9jb3JlL1dlYkdQVVR5cGVzXCI7XG5pbXBvcnQgeyBBdHRyaWJ1dGUsIEF0dHJpYnV0ZVR5cGUsIEludGVybGVhdmVkQXR0cmlidXRlLCBJbnRlcmxlYXZlZEZsb2F0MzJBdHRyaWJ1dGUgfSBmcm9tIFwiLi9BdHRyaWJ1dGVcIjtcbmltcG9ydCBBdHRyaWJ1dGVzIGZyb20gXCIuL0F0dHJpYnV0ZXNcIjtcbmltcG9ydCBCdWZmZXIgZnJvbSBcIi4vQnVmZmVyXCI7XG5leHBvcnQgZGVmYXVsdCBjbGFzcyBWZXJ0ZXhCdWZmZXIge1xuXHRwdWJsaWMgaW5kZXg6IG51bWJlcjtcblx0cHVibGljIGFycmF5U3RyaWRlOiBudW1iZXI7XG5cdHB1YmxpYyBzdGVwTW9kZTogc3RyaW5nO1xuXHRwdWJsaWMgYnVmZmVyOiBCdWZmZXI7XG5cdHB1YmxpYyBhdHRyaWJ1dGVzOiBBdHRyaWJ1dGVzO1xuXHRwdWJsaWMgZGlydHk6IGJvb2xlYW47XG5cdHB1YmxpYyBkZWZpbmVzOiB7IFtwcm9wOiBzdHJpbmddOiBib29sZWFuIHwgbnVtYmVyIH07XG5cdHB1YmxpYyBsb2NhdGlvbkluZGV4OiBudW1iZXI7XG5cdHByaXZhdGUgbGFiZWw6IHN0cmluZztcblx0Ly9cblx0Y29uc3RydWN0b3IocGFyYW1zOiBWZXJ0ZXhCdWZmZXJQYXJhbXMpIHtcblx0XHRjb25zdCB7IGxhYmVsLCBpbmRleCwgbG9jYXRpb25JbmRleCA9IDAsIHN0ZXBNb2RlID0gSW5wdXRTdGVwTW9kZS5WZXJ0ZXgsIGFycmF5U3RyaWRlIH0gPSBwYXJhbXM7XG5cdFx0dGhpcy5pbmRleCA9IGluZGV4IHx8IDA7XG5cdFx0dGhpcy5hdHRyaWJ1dGVzID0gbmV3IEF0dHJpYnV0ZXMobG9jYXRpb25JbmRleCk7XG5cdFx0dGhpcy5zdGVwTW9kZSA9IHN0ZXBNb2RlO1xuXHRcdHRoaXMuZGlydHkgPSB0cnVlO1xuXHRcdHRoaXMubGFiZWwgPSBsYWJlbD8uY29uY2F0KGBfJHtpbmRleH1fVmVydGV4QnVmZmVyYCk7XG5cdFx0dGhpcy5hcnJheVN0cmlkZSA9IGFycmF5U3RyaWRlO1xuXHRcdHRoaXMuZGVmaW5lcyA9IHt9O1xuXHRcdHRoaXMubG9jYXRpb25JbmRleCA9IGxvY2F0aW9uSW5kZXg7XG5cdH1cblx0cHVibGljIGdldEJ1ZmZlckRlcygpIHtcblx0XHRjb25zdCByZXN1bHQgPSB7XG5cdFx0XHRhcnJheVN0cmlkZTogdGhpcy5hcnJheVN0cmlkZSxcblx0XHRcdHN0ZXBNb2RlOiB0aGlzLnN0ZXBNb2RlLFxuXHRcdFx0YXR0cmlidXRlczogdGhpcy5hdHRyaWJ1dGVzLmdldEdQVUF0dHJpYnV0ZXNEZXMoKVxuXHRcdH07XG5cdFx0cmV0dXJuIHJlc3VsdDtcblx0fVxuXHRwdWJsaWMgc2V0QXR0cmlidXRlKGF0dHJpYnV0ZTogQXR0cmlidXRlIHwgSW50ZXJsZWF2ZWRBdHRyaWJ1dGUpIHtcblx0XHRpZiAoYXR0cmlidXRlLmF0dHJpYnV0ZVR5cGUgPT09IEF0dHJpYnV0ZVR5cGUuYXR0cmlidXRlKSB7XG5cdFx0XHR0aGlzLnNldExvY2F0aW9uSW5kZXgoKGF0dHJpYnV0ZSBhcyBBdHRyaWJ1dGUpLm5hbWUpO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHQoYXR0cmlidXRlIGFzIEludGVybGVhdmVkRmxvYXQzMkF0dHJpYnV0ZSk/Lm5hbWVzLmZvckVhY2goKG5hbWU6IHN0cmluZykgPT4gdGhpcy5zZXRMb2NhdGlvbkluZGV4KG5hbWUpKTtcblx0XHR9XG5cdFx0dGhpcy5hdHRyaWJ1dGVzLnNldEF0dHJpYnV0ZShhdHRyaWJ1dGUpO1xuXHRcdHRoaXMuZGlydHkgPSB0cnVlO1xuXHR9XG5cdHB1YmxpYyBnZXRBdHRyaWJ1dGUobmFtZTogc3RyaW5nKTogQXR0cmlidXRlIHwgSW50ZXJsZWF2ZWRBdHRyaWJ1dGUge1xuXHRcdHJldHVybiB0aGlzLmF0dHJpYnV0ZXMuZ2V0QXR0cmlidXRlKG5hbWUpO1xuXHR9XG5cdHB1YmxpYyBjb250YWluQXR0cmlidXRlKG5hbWU6IHN0cmluZyk6IGJvb2xlYW4ge1xuXHRcdHJldHVybiB0aGlzLmRlZmluZXNbbmFtZT8uY29uY2F0KFwiTG9jYXRpb25cIildICE9IHVuZGVmaW5lZCA/IHRydWUgOiBmYWxzZTtcblx0fVxuXHRwdWJsaWMgYmluZChkZXZpY2U6IEdQVURldmljZSwgcGFzc0VuY29kZXI6IEdQVVJlbmRlclBhc3NFbmNvZGVyKSB7XG5cdFx0aWYgKHRoaXMuYXR0cmlidXRlcy5kaXJ0eSkge1xuXHRcdFx0dGhpcy5hdHRyaWJ1dGVzLmRpcnR5ID0gZmFsc2U7XG5cdFx0XHRjb25zdCB7IGFycmF5U3RyaWRlLCB0eXBlQXJyYXksIGJ1ZmZlciB9ID0gdGhpcy5hdHRyaWJ1dGVzLmdldEF0cnJpYnV0ZVZhbHVlcygpO1xuXHRcdFx0aWYgKHRoaXMuYXJyYXlTdHJpZGUgPT09IHVuZGVmaW5lZCkgdGhpcy5hcnJheVN0cmlkZSA9IGFycmF5U3RyaWRlO1xuXHRcdFx0aWYgKCF0aGlzLmJ1ZmZlcikge1xuXHRcdFx0XHR0aGlzLmJ1ZmZlciA9IGJ1ZmZlciA/PyBCdWZmZXIuY3JlYXRlVmVydGV4QnVmZmVyKHRoaXMubGFiZWwsIGRldmljZSwgdHlwZUFycmF5KTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdC8vIHVwZGF0ZSBCdWZmZXJcblx0XHRcdFx0aWYgKHR5cGVBcnJheSkgdGhpcy5idWZmZXIuc2V0U3ViRGF0YSgwLCB0eXBlQXJyYXkpO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRwYXNzRW5jb2Rlci5zZXRWZXJ0ZXhCdWZmZXIodGhpcy5pbmRleCwgdGhpcy5idWZmZXIuZ3B1QnVmZmVyKTtcblx0fVxuXHRwcml2YXRlIHNldExvY2F0aW9uSW5kZXgobmFtZTogc3RyaW5nKSB7XG5cdFx0aWYgKHRoaXMuZGVmaW5lc1tuYW1lPy5jb25jYXQoXCJMb2NhdGlvblwiKV0gfHwgIW5hbWUpIHJldHVybjtcblx0XHR0aGlzLmRlZmluZXNbbmFtZT8uY29uY2F0KFwiTG9jYXRpb25cIildID0gdGhpcy5sb2NhdGlvbkluZGV4O1xuXHRcdHRoaXMubG9jYXRpb25JbmRleCArPSAxO1xuXHR9XG5cdGRlc3Ryb3koKSB7XG5cdFx0dGhpcy5idWZmZXIuZGVzdHJveSgpO1xuXHRcdHRoaXMuYXR0cmlidXRlcy5kZXN0cm95KCk7XG5cdH1cbn1cbiIsImltcG9ydCBkZWZhdWx0VmFsdWUgZnJvbSBcIi4vZGVmYXVsdFZhbHVlXCI7XG5pbXBvcnQgZGVmaW5lZCBmcm9tIFwiLi9kZWZpbmVkXCI7XG5cbi8qKlxuICogTWVyZ2VzIHR3byBvYmplY3RzLCBjb3B5aW5nIHRoZWlyIHByb3BlcnRpZXMgb250byBhIG5ldyBjb21iaW5lZCBvYmplY3QuIFdoZW4gdHdvIG9iamVjdHMgaGF2ZSB0aGUgc2FtZVxuICogcHJvcGVydHksIHRoZSB2YWx1ZSBvZiB0aGUgcHJvcGVydHkgb24gdGhlIGZpcnN0IG9iamVjdCBpcyB1c2VkLiAgSWYgZWl0aGVyIG9iamVjdCBpcyB1bmRlZmluZWQsXG4gKiBpdCB3aWxsIGJlIHRyZWF0ZWQgYXMgYW4gZW1wdHkgb2JqZWN0LlxuICpcbiAqIEBleGFtcGxlXG4gKiBjb25zdCBvYmplY3QxID0ge1xuICogICAgIHByb3BPbmUgOiAxLFxuICogICAgIHByb3BUd28gOiB7XG4gKiAgICAgICAgIHZhbHVlMSA6IDEwXG4gKiAgICAgfVxuICogfVxuICogY29uc3Qgb2JqZWN0MiA9IHtcbiAqICAgICBwcm9wVHdvIDogMlxuICogfVxuICogY29uc3QgZmluYWwgPSBjb21iaW5lKG9iamVjdDEsIG9iamVjdDIpO1xuICpcbiAqIC8vIGZpbmFsID09PSB7XG4gKiAvLyAgICAgcHJvcE9uZSA6IDEsXG4gKiAvLyAgICAgcHJvcFR3byA6IHtcbiAqIC8vICAgICAgICAgdmFsdWUxIDogMTBcbiAqIC8vICAgICB9XG4gKiAvLyB9XG4gKlxuICogQHBhcmFtIHtPYmplY3R9IFtvYmplY3QxXSBUaGUgZmlyc3Qgb2JqZWN0IHRvIG1lcmdlLlxuICogQHBhcmFtIHtPYmplY3R9IFtvYmplY3QyXSBUaGUgc2Vjb25kIG9iamVjdCB0byBtZXJnZS5cbiAqIEBwYXJhbSB7Qm9vbGVhbn0gW2RlZXA9ZmFsc2VdIFBlcmZvcm0gYSByZWN1cnNpdmUgbWVyZ2UuXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBUaGUgY29tYmluZWQgb2JqZWN0IGNvbnRhaW5pbmcgYWxsIHByb3BlcnRpZXMgZnJvbSBib3RoIG9iamVjdHMuXG4gKlxuICogQGZ1bmN0aW9uXG4gKi9cbmZ1bmN0aW9uIGNvbWJpbmUob2JqZWN0MSwgb2JqZWN0MiwgZGVlcCkge1xuXHRkZWVwID0gZGVmYXVsdFZhbHVlKGRlZXAsIGZhbHNlKTtcblxuXHRjb25zdCByZXN1bHQgPSB7fTtcblxuXHRjb25zdCBvYmplY3QxRGVmaW5lZCA9IGRlZmluZWQob2JqZWN0MSk7XG5cdGNvbnN0IG9iamVjdDJEZWZpbmVkID0gZGVmaW5lZChvYmplY3QyKTtcblx0bGV0IHByb3BlcnR5O1xuXHRsZXQgb2JqZWN0MVZhbHVlO1xuXHRsZXQgb2JqZWN0MlZhbHVlO1xuXHRpZiAob2JqZWN0MURlZmluZWQpIHtcblx0XHRmb3IgKHByb3BlcnR5IGluIG9iamVjdDEpIHtcblx0XHRcdGlmIChvYmplY3QxLmhhc093blByb3BlcnR5KHByb3BlcnR5KSkge1xuXHRcdFx0XHRvYmplY3QxVmFsdWUgPSBvYmplY3QxW3Byb3BlcnR5XTtcblx0XHRcdFx0aWYgKG9iamVjdDJEZWZpbmVkICYmIGRlZXAgJiYgdHlwZW9mIG9iamVjdDFWYWx1ZSA9PT0gXCJvYmplY3RcIiAmJiBvYmplY3QyLmhhc093blByb3BlcnR5KHByb3BlcnR5KSkge1xuXHRcdFx0XHRcdG9iamVjdDJWYWx1ZSA9IG9iamVjdDJbcHJvcGVydHldO1xuXHRcdFx0XHRcdGlmICh0eXBlb2Ygb2JqZWN0MlZhbHVlID09PSBcIm9iamVjdFwiKSB7XG5cdFx0XHRcdFx0XHRyZXN1bHRbcHJvcGVydHldID0gY29tYmluZShvYmplY3QxVmFsdWUsIG9iamVjdDJWYWx1ZSwgZGVlcCk7XG5cdFx0XHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0XHRcdHJlc3VsdFtwcm9wZXJ0eV0gPSBvYmplY3QxVmFsdWU7XG5cdFx0XHRcdFx0fVxuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdHJlc3VsdFtwcm9wZXJ0eV0gPSBvYmplY3QxVmFsdWU7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHR9XG5cdH1cblx0aWYgKG9iamVjdDJEZWZpbmVkKSB7XG5cdFx0Zm9yIChwcm9wZXJ0eSBpbiBvYmplY3QyKSB7XG5cdFx0XHRpZiAob2JqZWN0Mi5oYXNPd25Qcm9wZXJ0eShwcm9wZXJ0eSkgJiYgIXJlc3VsdC5oYXNPd25Qcm9wZXJ0eShwcm9wZXJ0eSkpIHtcblx0XHRcdFx0b2JqZWN0MlZhbHVlID0gb2JqZWN0Mltwcm9wZXJ0eV07XG5cdFx0XHRcdHJlc3VsdFtwcm9wZXJ0eV0gPSBvYmplY3QyVmFsdWU7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cdHJldHVybiByZXN1bHQ7XG59XG5leHBvcnQgZGVmYXVsdCBjb21iaW5lO1xuIiwiaW1wb3J0IEJvdW5kaW5nQm94IGZyb20gXCIuLi9jb3JlL0JvdW5kaW5nQm94XCI7XG5pbXBvcnQgQm91bmRpbmdTcGhlcmUgZnJvbSBcIi4uL2NvcmUvQm91bmRpbmdTcGhlcmVcIjtcbmltcG9ydCB7IEZyYW1lU3RhdGUgfSBmcm9tIFwiLi4vY29yZS9GcmFtZVN0YXRlXCI7XG5pbXBvcnQgVmVjdG9yMiBmcm9tIFwiLi4vbWF0aC9WZWN0b3IyXCI7XG5pbXBvcnQgVmVjdG9yMyBmcm9tIFwiLi4vbWF0aC9WZWN0b3IzXCI7XG5pbXBvcnQgVmVjdG9yNCBmcm9tIFwiLi4vbWF0aC9WZWN0b3I0XCI7XG5pbXBvcnQgeyBBdHRyaWJ1dGUsIEludGVybGVhdmVkRmxvYXQzMkF0dHJpYnV0ZSB9IGZyb20gXCIuLi9yZW5kZXIvQXR0cmlidXRlXCI7XG5pbXBvcnQgSW5kZXhCdWZmZXIgZnJvbSBcIi4uL3JlbmRlci9JbmRleEJ1ZmZlclwiO1xuaW1wb3J0IFZlcnRleEJ1ZmZlciBmcm9tIFwiLi4vcmVuZGVyL1ZlcnRleEJ1ZmZlclwiO1xuaW1wb3J0IGNvbWJpbmUgZnJvbSBcIi4uL3V0aWxzL2NvbWJpbmVcIjtcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEdlb21ldHJ5IHtcblx0bm9ybWFsczogbnVtYmVyW107XG5cdHV2czogbnVtYmVyW107XG5cdHBvc2l0aW9uczogbnVtYmVyW107XG5cdGluZGljZXM6IG51bWJlcltdO1xuXHR0YW5nZW50czogbnVtYmVyW107XG5cdHR5cGU6IHN0cmluZztcblx0ZGlydHk6IGJvb2xlYW47XG5cdGluZGV4QnVmZmVyPzogSW5kZXhCdWZmZXI7XG5cdGRlZmF1bHRWZXJ0ZXhCdWZmZXI6IFZlcnRleEJ1ZmZlcjtcblx0Y291bnQ6IG51bWJlcjtcblx0Ym91bmRpbmdTcGhlcmU/OiBCb3VuZGluZ1NwaGVyZTtcblx0Ym91bmRpbmdCb3g/OiBCb3VuZGluZ0JveDtcblx0cHJpdmF0ZSBfZGVmaW5lczogeyBbcHJvcDogc3RyaW5nXTogYm9vbGVhbiB8IG51bWJlciB9O1xuXHRwdWJsaWMgdmVydGV4QnVmZmVyczogQXJyYXk8VmVydGV4QnVmZmVyPjtcblx0ZGVmaW5lc0RpcnR5OiBib29sZWFuO1xuXHRnZXQgZGVmaW5lcygpIHtcblx0XHRyZXR1cm4gT2JqZWN0LmFzc2lnbih7fSwgdGhpcy5fZGVmaW5lcywgLi4udGhpcy52ZXJ0ZXhCdWZmZXJzLm1hcCgodmVydGV4QnVmZmVyKSA9PiB2ZXJ0ZXhCdWZmZXIuZGVmaW5lcykpO1xuXHR9XG5cdHNldCBkZWZpbmVzKHZhbHVlKSB7XG5cdFx0dGhpcy5kZWZpbmVzRGlydHkgPSB0cnVlO1xuXHRcdHRoaXMuX2RlZmluZXMgPSBjb21iaW5lKHZhbHVlLCB0aGlzLl9kZWZpbmVzLCBmYWxzZSk7XG5cdH1cblx0Z2V0IGN1cnJlbnRMb2NhdGlvbkluZGV4KCk6IG51bWJlciB7XG5cdFx0cmV0dXJuIHRoaXM/LnZlcnRleEJ1ZmZlcnM/LnJlZHVjZShcblx0XHRcdChtYXgsIGN1cnJlbnQpID0+IChjdXJyZW50LmxvY2F0aW9uSW5kZXggPiBtYXggPyAobWF4ID0gY3VycmVudC5sb2NhdGlvbkluZGV4KSA6IG1heCksXG5cdFx0XHQwXG5cdFx0KTtcblx0fVxuXHRnZXQgdmVydGV4QnVmZmVyQ291bnQoKTogbnVtYmVyIHtcblx0XHRyZXR1cm4gdGhpcy52ZXJ0ZXhCdWZmZXJzLmxlbmd0aDtcblx0fVxuXHRjb25zdHJ1Y3RvcihvcHRpb25zPzogeyB0eXBlPzogc3RyaW5nIH0pIHtcblx0XHR0aGlzLnR5cGUgPSBvcHRpb25zLnR5cGUgfHwgdW5kZWZpbmVkO1xuXHRcdHRoaXMuYm91bmRpbmdTcGhlcmUgPSB1bmRlZmluZWQ7XG5cdFx0dGhpcy5kaXJ0eSA9IGZhbHNlO1xuXHRcdHRoaXMuZGVmaW5lc0RpcnR5ID0gdHJ1ZTtcblx0XHR0aGlzLmRlZmF1bHRWZXJ0ZXhCdWZmZXIgPSBuZXcgVmVydGV4QnVmZmVyKHtcblx0XHRcdGxhYmVsOiB0aGlzLnR5cGUsXG5cdFx0XHRpbmRleDogMFxuXHRcdH0pO1xuXHRcdHRoaXMudmVydGV4QnVmZmVycyA9IFt0aGlzLmRlZmF1bHRWZXJ0ZXhCdWZmZXJdO1xuXHRcdHRoaXMuX2RlZmluZXMgPSB7fTtcblx0XHR0aGlzLm5vcm1hbHMgPSBbXTtcblx0XHR0aGlzLnV2cyA9IFtdO1xuXHRcdHRoaXMucG9zaXRpb25zID0gW107XG5cdFx0dGhpcy5pbmRpY2VzID0gW107XG5cdFx0dGhpcy50YW5nZW50cyA9IFtdO1xuXHR9XG5cdGdldEF0dHJpYnV0ZShuYW1lOiBzdHJpbmcpIHtcblx0XHRyZXR1cm4gdGhpcy5kZWZhdWx0VmVydGV4QnVmZmVyLmdldEF0dHJpYnV0ZShuYW1lKTtcblx0fVxuXHRzZXRBdHRyaWJ1dGUoYXR0cmlidXRlOiBBdHRyaWJ1dGUgfCBJbnRlcmxlYXZlZEZsb2F0MzJBdHRyaWJ1dGUpIHtcblx0XHR0aGlzLmRlZmF1bHRWZXJ0ZXhCdWZmZXIuc2V0QXR0cmlidXRlKGF0dHJpYnV0ZSk7XG5cdH1cblx0c2V0SW5kaWNlKGluZGljZXM6IEFycmF5PG51bWJlcj4pIHtcblx0XHR0aGlzLmluZGljZXMgPSBpbmRpY2VzO1xuXHRcdGlmICghdGhpcy5pbmRleEJ1ZmZlcikgdGhpcy5pbmRleEJ1ZmZlciA9IG5ldyBJbmRleEJ1ZmZlcih0aGlzLnR5cGUgKyBcIkluZGV4QnVmZmVyXCIpO1xuXHRcdHRoaXMuaW5kZXhCdWZmZXIuc2V0SW5kaWNlcyhpbmRpY2VzKTtcblx0fVxuXHR1cGRhdGUoZnJhbWVTdGF0ZTogRnJhbWVTdGF0ZSkge1xuXHRcdC8vIHRvZG9cblx0fVxuXHRjb21wdXRlQm91bmRpbmdTcGhlcmUocG9zaXRpb25zOiBudW1iZXJbXSwgc3RyaWRlID0gMykge1xuXHRcdHRoaXMuYm91bmRpbmdTcGhlcmUgPSBCb3VuZGluZ1NwaGVyZS5mcm9tVmVydGljZXMocG9zaXRpb25zLCBuZXcgVmVjdG9yMygwLCAwLCAwKSwgc3RyaWRlKTtcblx0fVxuXHQvKipcblx0ICogQ2FsY3VsYXRlIG1lc2ggdGFuZ2VudC5cblx0ICogQHJlbWFyayBuZWVkIHRvIHNldCBwb3NpdGlvbnMod2l0aCBvciBub3Qgd2l0aCBpbmRpY2VzKSwgbm9ybWFscywgdXYgYmVmb3JlIGNhbGN1bGF0aW9uLlxuXHQgKiBAcmVtYXJrIGJhc2VkIG9uIGh0dHA6Ly9mb3VuZGF0aW9uc29mZ2FtZWVuZ2luZWRldi5jb20vRkdFRDItc2FtcGxlLnBkZlxuXHQgKi9cblx0Y2FsY3VsYXRlVGFuZ2VudHMoKTogdm9pZCB7XG5cdFx0aWYgKCF0aGlzLm5vcm1hbHMgfHwgIXRoaXMudXZzKSB7XG5cdFx0XHR0aHJvdyBcIlNldCBub3JtYWwgYW5kIHV2IGJlZm9yZSBjYWxjdWxhdGlvbi5cIjtcblx0XHR9XG5cdFx0Y29uc3QgeyBpbmRpY2VzLCBwb3NpdGlvbnMsIG5vcm1hbHMsIHV2cyB9ID0gdGhpcztcblx0XHRjb25zdCB0ZW1wUG9zMCA9IG5ldyBWZWN0b3IzKCksXG5cdFx0XHR0ZW1wUG9zMSA9IG5ldyBWZWN0b3IzKCksXG5cdFx0XHR0ZW1wUG9zMiA9IG5ldyBWZWN0b3IzKCksXG5cdFx0XHR0ZW1wVVYwID0gbmV3IFZlY3RvcjIoKSxcblx0XHRcdHRlbXBVVjEgPSBuZXcgVmVjdG9yMigpLFxuXHRcdFx0dGVtcFVWMiA9IG5ldyBWZWN0b3IyKCk7XG5cdFx0Y29uc3QgZTEgPSBuZXcgVmVjdG9yMygpLFxuXHRcdFx0ZTIgPSBuZXcgVmVjdG9yMygpLFxuXHRcdFx0dCA9IG5ldyBWZWN0b3IzKCksXG5cdFx0XHRiID0gbmV3IFZlY3RvcjMoKSxcblx0XHRcdHRlbXAgPSBuZXcgVmVjdG9yMygpO1xuXHRcdGNvbnN0IHZlcnRleENvdW50ID0gdGhpcy5pbmRpY2VzLmxlbmd0aDtcblx0XHRjb25zdCB0cmlhbmdsZUNvdW50ID0gaW5kaWNlcyA/IGluZGljZXMubGVuZ3RoIC8gMyA6IHBvc2l0aW9ucy5sZW5ndGggLyAzO1xuXHRcdGNvbnN0IHRhbmdlbnRzID0gbmV3IEFycmF5PFZlY3RvcjQ+KHZlcnRleENvdW50KTtcblx0XHRjb25zdCBiaVRhbmdlbnRzID0gbmV3IEFycmF5PFZlY3RvcjM+KHZlcnRleENvdW50KTtcblx0XHR0aGlzLnRhbmdlbnRzID0gW107XG5cdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCB2ZXJ0ZXhDb3VudDsgaSsrKSB7XG5cdFx0XHR0YW5nZW50c1tpXSA9IG5ldyBWZWN0b3I0KCk7XG5cdFx0XHRiaVRhbmdlbnRzW2ldID0gbmV3IFZlY3RvcjMoKTtcblx0XHR9XG5cblx0XHQvLyBDYWxjdWxhdGUgdGFuZ2VudCBhbmQgYmktdGFuZ2VudCBmb3IgZWFjaCB0cmlhbmdsZSBhbmQgYWRkIHRvIGFsbCB0aHJlZSB2ZXJ0aWNlcy5cblx0XHRmb3IgKGxldCBrID0gMDsgayA8IHRyaWFuZ2xlQ291bnQ7IGsrKykge1xuXHRcdFx0bGV0IGkwID0gMyAqIGs7XG5cdFx0XHRsZXQgaTEgPSAzICogayArIDE7XG5cdFx0XHRsZXQgaTIgPSAzICogayArIDI7XG5cdFx0XHRpZiAoaW5kaWNlcykge1xuXHRcdFx0XHRpMCA9IGluZGljZXNbaTBdO1xuXHRcdFx0XHRpMSA9IGluZGljZXNbaTFdO1xuXHRcdFx0XHRpMiA9IGluZGljZXNbaTJdO1xuXHRcdFx0fVxuXG5cdFx0XHRjb25zdCBwMCA9IHRlbXBQb3MwLnNldChwb3NpdGlvbnNbaTBdLCBwb3NpdGlvbnNbaTAgKyAxXSwgcG9zaXRpb25zW2kwICsgMl0pO1xuXHRcdFx0Y29uc3QgcDEgPSB0ZW1wUG9zMS5zZXQocG9zaXRpb25zW2kxXSwgcG9zaXRpb25zW2kxICsgMV0sIHBvc2l0aW9uc1tpMSArIDJdKTtcblx0XHRcdGNvbnN0IHAyID0gdGVtcFBvczIuc2V0KHBvc2l0aW9uc1tpMl0sIHBvc2l0aW9uc1tpMiArIDFdLCBwb3NpdGlvbnNbaTIgKyAyXSk7XG5cdFx0XHRjb25zdCB3MCA9IHRlbXBVVjAuc2V0KHV2c1tpMF0sIHV2c1tpMCArIDFdKTtcblx0XHRcdGNvbnN0IHcxID0gdGVtcFVWMS5zZXQodXZzW2kxXSwgdXZzW2kxICsgMV0pO1xuXHRcdFx0Y29uc3QgdzIgPSB0ZW1wVVYyLnNldCh1dnNbaTJdLCB1dnNbaTIgKyAxXSk7XG5cblx0XHRcdFZlY3RvcjMuc3VidHJhY3QocDEsIHAwLCBlMSk7XG5cdFx0XHRWZWN0b3IzLnN1YnRyYWN0KHAyLCBwMCwgZTIpO1xuXHRcdFx0Y29uc3QgeDEgPSB3MS54IC0gdzAueDtcblx0XHRcdGNvbnN0IHgyID0gdzIueCAtIHcwLng7XG5cdFx0XHRjb25zdCB5MSA9IHcxLnkgLSB3MC55O1xuXHRcdFx0Y29uc3QgeTIgPSB3Mi55IC0gdzAueTtcblx0XHRcdGNvbnN0IHIgPSAxLjAgLyAoeDEgKiB5MiAtIHgyICogeTEpO1xuXG5cdFx0XHRWZWN0b3IzLm11bHRpcGx5QnlTY2FsYXIoZTEsIHkyICogciwgdCk7XG5cdFx0XHRWZWN0b3IzLm11bHRpcGx5QnlTY2FsYXIoZTIsIHkxICogciwgdGVtcCk7XG5cdFx0XHRWZWN0b3IzLnN1YnRyYWN0KHQsIHRlbXAsIHQpO1xuXHRcdFx0VmVjdG9yMy5tdWx0aXBseUJ5U2NhbGFyKGUyLCB4MSAqIHIsIGIpO1xuXHRcdFx0VmVjdG9yMy5tdWx0aXBseUJ5U2NhbGFyKGUxLCB4MiAqIHIsIHRlbXApO1xuXHRcdFx0VmVjdG9yMy5zdWJ0cmFjdChiLCB0ZW1wLCBiKTtcblxuXHRcdFx0bGV0IHRhbmdlbnQgPSB0YW5nZW50c1tpMF07XG5cdFx0XHR0YW5nZW50LnNldCh0YW5nZW50LnggKyB0LngsIHRhbmdlbnQueSArIHQueSwgdGFuZ2VudC56ICsgdC56LCAxLjApO1xuXG5cdFx0XHR0YW5nZW50ID0gdGFuZ2VudHNbaTFdO1xuXHRcdFx0dGFuZ2VudC5zZXQodGFuZ2VudC54ICsgdC54LCB0YW5nZW50LnkgKyB0LnksIHRhbmdlbnQueiArIHQueiwgMS4wKTtcblxuXHRcdFx0dGFuZ2VudCA9IHRhbmdlbnRzW2kyXTtcblx0XHRcdHRhbmdlbnQuc2V0KHRhbmdlbnQueCArIHQueCwgdGFuZ2VudC55ICsgdC55LCB0YW5nZW50LnogKyB0LnosIDEuMCk7XG5cdFx0XHRiaVRhbmdlbnRzW2kwXS5hZGQoYik7XG5cdFx0XHRiaVRhbmdlbnRzW2kxXS5hZGQoYik7XG5cdFx0XHRiaVRhbmdlbnRzW2kyXS5hZGQoYik7XG5cdFx0fVxuXG5cdFx0Ly8gT3J0aG9ub3JtYWxpemUgZWFjaCB0YW5nZW50IGFuZCBjYWxjdWxhdGUgdGhlIGhhbmRlZG5lc3MuXG5cdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCB2ZXJ0ZXhDb3VudDsgaSsrKSB7XG5cdFx0XHRjb25zdCBuID0gbmV3IFZlY3RvcjMobm9ybWFsc1szICogaV0sIG5vcm1hbHNbMyAqIGkgKyAxXSwgbm9ybWFsc1szICogaSArIDJdKTtcblx0XHRcdGNvbnN0IGIgPSBiaVRhbmdlbnRzW2ldO1xuXHRcdFx0Y29uc3QgdGFuZ2VudCA9IHRhbmdlbnRzW2ldO1xuXHRcdFx0dC5zZXQodGFuZ2VudC54LCB0YW5nZW50LnksIHRhbmdlbnQueik7XG5cblx0XHRcdFZlY3RvcjMuY3Jvc3ModCwgYiwgdGVtcCk7XG5cdFx0XHRjb25zdCB3ID0gVmVjdG9yMy5kb3QodGVtcCwgbikgPiAwLjAgPyAxIDogLTE7XG5cdFx0XHRWZWN0b3IzLm11bHRpcGx5QnlTY2FsYXIobiwgVmVjdG9yMy5kb3QodCwgbiksIHRlbXApO1xuXHRcdFx0VmVjdG9yMy5zdWJ0cmFjdCh0LCB0ZW1wLCB0KTtcblx0XHRcdFZlY3RvcjMubm9ybWFsaXplKHQsIHQpO1xuXHRcdFx0Ly8gdC5ub3JtYWxpemUoKTtcblx0XHRcdHRhbmdlbnQuc2V0KHQueCwgdC55LCB0LnosIHcpO1xuXHRcdFx0dGhpcy50YW5nZW50cy5wdXNoKHQueCwgdC55LCB0LnosIHcpO1xuXHRcdH1cblx0XHQvLyB0aGlzLnNldFRhbmdlbnRzKHRhbmdlbnRzKTtcblx0fVxuXHRkZXN0cm95KCkge1xuXHRcdHRoaXM/LmluZGV4QnVmZmVyLmRlc3Ryb3koKTtcblx0XHR0aGlzLmRlZmF1bHRWZXJ0ZXhCdWZmZXIuZGVzdHJveSgpO1xuXHRcdHRoaXMubm9ybWFscyA9IG51bGw7XG5cdFx0dGhpcy51dnMgPSBudWxsO1xuXHRcdHRoaXMucG9zaXRpb25zID0gbnVsbDtcblx0XHR0aGlzLmluZGljZXMgPSBudWxsO1xuXHRcdHRoaXMudGFuZ2VudHMgPSBudWxsO1xuXHRcdHRoaXMuYm91bmRpbmdTcGhlcmUgPSB1bmRlZmluZWQ7XG5cdH1cbn1cbiIsImltcG9ydCB7IEZsb2F0MzJBdHRyaWJ1dGUgfSBmcm9tIFwiLi4vcmVuZGVyL0F0dHJpYnV0ZVwiO1xuaW1wb3J0IEdlb21ldHJ5IGZyb20gXCIuL0dlb21ldHJ5XCI7XG5leHBvcnQgZGVmYXVsdCBjbGFzcyBQbGFuZUdlb21ldHJ5IGV4dGVuZHMgR2VvbWV0cnkge1xuXHRjb25zdHJ1Y3RvcihwdWJsaWMgd2lkdGg6IG51bWJlciA9IDEwLCBwdWJsaWMgaGVpZ2h0OiBudW1iZXIgPSAxMCkge1xuXHRcdHN1cGVyKHtcblx0XHRcdHR5cGU6IFwicGxhbmVHZW9tZXRyeVwiXG5cdFx0fSk7XG5cdFx0dGhpcy5kZWZpbmVzID0ge1xuXHRcdFx0SEFTX05PUk1BTDogdHJ1ZVxuXHRcdH07XG5cdFx0dGhpcy5pbml0KCk7XG5cdH1cblx0cHJpdmF0ZSBpbml0KCkge1xuXHRcdC8vIGdlbmVyYXRlIHBvcyB1diBub3JtYWwgc28gb25cblx0XHRjb25zdCB7IGluZGljZXMsIG5vcm1hbHMsIHV2cywgdmVydGljZXMgfSA9IHRoaXMuY3JlYXRlR3JpZCh0aGlzLndpZHRoLCB0aGlzLmhlaWdodCk7XG5cdFx0dGhpcy5jb21wdXRlQm91bmRpbmdTcGhlcmUodmVydGljZXMpO1xuXHRcdHRoaXMuc2V0QXR0cmlidXRlKG5ldyBGbG9hdDMyQXR0cmlidXRlKFwicG9zaXRpb25cIiwgdmVydGljZXMsIDMpKTtcblx0XHR0aGlzLnNldEF0dHJpYnV0ZShuZXcgRmxvYXQzMkF0dHJpYnV0ZShcIm5vcm1hbFwiLCBub3JtYWxzLCAzKSk7XG5cdFx0dGhpcy5zZXRBdHRyaWJ1dGUobmV3IEZsb2F0MzJBdHRyaWJ1dGUoXCJ1dlwiLCB1dnMsIDIpKTtcblx0XHR0aGlzLnNldEluZGljZShpbmRpY2VzKTtcblx0XHR0aGlzLmNvdW50ID0gaW5kaWNlcy5sZW5ndGg7XG5cdH1cblx0cHJpdmF0ZSBjcmVhdGVHcmlkKHdpZHRoID0gMSwgaGVpZ2h0ID0gMSwgd2lkdGhTZWdtZW50cyA9IDEsIGhlaWdodFNlZ21lbnRzID0gMSkge1xuXHRcdGNvbnN0IHdpZHRoX2hhbGYgPSB3aWR0aCAvIDI7XG5cdFx0Y29uc3QgaGVpZ2h0X2hhbGYgPSBoZWlnaHQgLyAyO1xuXG5cdFx0Y29uc3QgZ3JpZFggPSBNYXRoLmZsb29yKHdpZHRoU2VnbWVudHMpO1xuXHRcdGNvbnN0IGdyaWRZID0gTWF0aC5mbG9vcihoZWlnaHRTZWdtZW50cyk7XG5cblx0XHRjb25zdCBncmlkWDEgPSBncmlkWCArIDE7XG5cdFx0Y29uc3QgZ3JpZFkxID0gZ3JpZFkgKyAxO1xuXG5cdFx0Y29uc3Qgc2VnbWVudF93aWR0aCA9IHdpZHRoIC8gZ3JpZFg7XG5cdFx0Y29uc3Qgc2VnbWVudF9oZWlnaHQgPSBoZWlnaHQgLyBncmlkWTtcblxuXHRcdC8vXG5cblx0XHRjb25zdCBpbmRpY2VzID0gW107XG5cdFx0Y29uc3QgdmVydGljZXMgPSBbXTtcblx0XHRjb25zdCBub3JtYWxzID0gW107XG5cdFx0Y29uc3QgdXZzID0gW107XG5cblx0XHRmb3IgKGxldCBpeSA9IDA7IGl5IDwgZ3JpZFkxOyBpeSsrKSB7XG5cdFx0XHRjb25zdCB5ID0gaXkgKiBzZWdtZW50X2hlaWdodCAtIGhlaWdodF9oYWxmO1xuXG5cdFx0XHRmb3IgKGxldCBpeCA9IDA7IGl4IDwgZ3JpZFgxOyBpeCsrKSB7XG5cdFx0XHRcdGNvbnN0IHggPSBpeCAqIHNlZ21lbnRfd2lkdGggLSB3aWR0aF9oYWxmO1xuXG5cdFx0XHRcdHZlcnRpY2VzLnB1c2goeCwgLXksIDApO1xuXG5cdFx0XHRcdG5vcm1hbHMucHVzaCgwLCAwLCAxKTtcblxuXHRcdFx0XHR1dnMucHVzaChpeCAvIGdyaWRYKTtcblx0XHRcdFx0dXZzLnB1c2goMSAtIGl5IC8gZ3JpZFkpO1xuXHRcdFx0fVxuXHRcdH1cblxuXHRcdGZvciAobGV0IGl5ID0gMDsgaXkgPCBncmlkWTsgaXkrKykge1xuXHRcdFx0Zm9yIChsZXQgaXggPSAwOyBpeCA8IGdyaWRYOyBpeCsrKSB7XG5cdFx0XHRcdGNvbnN0IGEgPSBpeCArIGdyaWRYMSAqIGl5O1xuXHRcdFx0XHRjb25zdCBiID0gaXggKyBncmlkWDEgKiAoaXkgKyAxKTtcblx0XHRcdFx0Y29uc3QgYyA9IGl4ICsgMSArIGdyaWRYMSAqIChpeSArIDEpO1xuXHRcdFx0XHRjb25zdCBkID0gaXggKyAxICsgZ3JpZFgxICogaXk7XG5cblx0XHRcdFx0aW5kaWNlcy5wdXNoKGEsIGIsIGQpO1xuXHRcdFx0XHRpbmRpY2VzLnB1c2goYiwgYywgZCk7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdHJldHVybiB7IGluZGljZXMsIG5vcm1hbHMsIHV2cywgdmVydGljZXMgfTtcblx0fVxufVxuIiwiaW1wb3J0IGRlZmF1bHRWYWx1ZSBmcm9tIFwiLi4vdXRpbHMvZGVmYXVsdFZhbHVlXCI7XHJcbmltcG9ydCBkZWZpbmVkIGZyb20gXCIuLi91dGlscy9kZWZpbmVkXCI7XHJcbmltcG9ydCBHTWF0aCBmcm9tIFwiLi9NYXRoXCI7XHJcbmltcG9ydCBNYXRyaXg0IGZyb20gXCIuL01hdHJpeDRcIjtcclxuaW1wb3J0IFZlY3RvcjMgZnJvbSBcIi4vVmVjdG9yM1wiO1xyXG4vKipcclxuICogQSBzZXQgb2YgNC1kaW1lbnNpb25hbCBjb29yZGluYXRlcyB1c2VkIHRvIHJlcHJlc2VudCByb3RhdGlvbiBpbiAzLWRpbWVuc2lvbmFsIHNwYWNlLlxyXG4gKiBAYWxpYXMgUXVhdGVybmlvblxyXG4gKiBAY29uc3RydWN0b3JcclxuICpcclxuICogQHBhcmFtIHtOdW1iZXJ9IFt4PTAuMF0gVGhlIFggY29tcG9uZW50LlxyXG4gKiBAcGFyYW0ge051bWJlcn0gW3k9MC4wXSBUaGUgWSBjb21wb25lbnQuXHJcbiAqIEBwYXJhbSB7TnVtYmVyfSBbej0wLjBdIFRoZSBaIGNvbXBvbmVudC5cclxuICogQHBhcmFtIHtOdW1iZXJ9IFt3PTAuMF0gVGhlIFcgY29tcG9uZW50LlxyXG4gKlxyXG4gKiBAc2VlIFBhY2thYmxlRm9ySW50ZXJwb2xhdGlvblxyXG4gKi9cclxuZXhwb3J0IGNsYXNzIFF1YXRlcm5pb24ge1xyXG5cdHB1YmxpYyBzdGF0aWMgWkVSTyA9IE9iamVjdC5mcmVlemUobmV3IFF1YXRlcm5pb24oMC4wLCAwLjAsIDAuMCwgMC4wKSk7XHJcblxyXG5cdHB1YmxpYyBzdGF0aWMgSURFTlRJVFkgPSBPYmplY3QuZnJlZXplKG5ldyBRdWF0ZXJuaW9uKDAuMCwgMC4wLCAwLjAsIDEuMCkpO1xyXG5cclxuXHRjb25zdHJ1Y3RvcihwdWJsaWMgeDogbnVtYmVyID0gMCwgcHVibGljIHk6IG51bWJlciA9IDAsIHB1YmxpYyB6OiBudW1iZXIgPSAwLCBwdWJsaWMgdzogbnVtYmVyID0gMSkge31cclxuXHRzZXQoeCwgeSwgeiwgdykge1xyXG5cdFx0dGhpcy54ID0geDtcclxuXHRcdHRoaXMueSA9IHk7XHJcblx0XHR0aGlzLnogPSB6O1xyXG5cdFx0dGhpcy53ID0gdztcclxuXHR9XHJcblx0bm9ybWFsaXplKCkge1xyXG5cdFx0Y29uc3QgaW52ZXJzZU1hZ25pdHVkZSA9IDEuMCAvIFF1YXRlcm5pb24ubWFnbml0dWRlKHRoaXMpO1xyXG5cdFx0Y29uc3QgeCA9IHRoaXMueCAqIGludmVyc2VNYWduaXR1ZGU7XHJcblx0XHRjb25zdCB5ID0gdGhpcy55ICogaW52ZXJzZU1hZ25pdHVkZTtcclxuXHRcdGNvbnN0IHogPSB0aGlzLnogKiBpbnZlcnNlTWFnbml0dWRlO1xyXG5cdFx0Y29uc3QgdyA9IHRoaXMudyAqIGludmVyc2VNYWduaXR1ZGU7XHJcblxyXG5cdFx0dGhpcy54ID0geDtcclxuXHRcdHRoaXMueSA9IHk7XHJcblx0XHR0aGlzLnogPSB6O1xyXG5cdFx0dGhpcy53ID0gdztcclxuXHRcdHJldHVybiB0aGlzO1xyXG5cdH1cclxuXHRpbnZlcnQoKSB7XHJcblx0XHR0aGlzLnggKj0gLTE7XHJcblx0XHR0aGlzLnkgKj0gLTE7XHJcblx0XHR0aGlzLnogKj0gLTE7XHJcblxyXG5cdFx0cmV0dXJuIHRoaXM7XHJcblx0fVxyXG5cdGRvdCh2OiBRdWF0ZXJuaW9uKTogbnVtYmVyIHtcclxuXHRcdHJldHVybiB0aGlzLnggKiB2LnggKyB0aGlzLnkgKiB2LnkgKyB0aGlzLnogKiB2LnogKyB0aGlzLncgKiB2Lnc7XHJcblx0fVxyXG5cdHNldEZyb21Vbml0VmVjdG9ycyh2RnJvbTogVmVjdG9yMywgdlRvOiBWZWN0b3IzKTogUXVhdGVybmlvbiB7XHJcblx0XHQvLyBhc3N1bWVzIGRpcmVjdGlvbiB2ZWN0b3JzIHZGcm9tIGFuZCB2VG8gYXJlIG5vcm1hbGl6ZWRcclxuXHRcdGxldCByID0gVmVjdG9yMy5kb3QodkZyb20sIHZUbykgKyAxO1xyXG5cdFx0aWYgKHIgPCBOdW1iZXIuRVBTSUxPTikge1xyXG5cdFx0XHQvLyB2RnJvbSBhbmQgdlRvIHBvaW50IGluIG9wcG9zaXRlIGRpcmVjdGlvbnNcclxuXHJcblx0XHRcdHIgPSAwO1xyXG5cclxuXHRcdFx0aWYgKE1hdGguYWJzKHZGcm9tLngpID4gTWF0aC5hYnModkZyb20ueikpIHtcclxuXHRcdFx0XHR0aGlzLnggPSAtdkZyb20ueTtcclxuXHRcdFx0XHR0aGlzLnkgPSB2RnJvbS54O1xyXG5cdFx0XHRcdHRoaXMueiA9IDA7XHJcblx0XHRcdFx0dGhpcy53ID0gcjtcclxuXHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHR0aGlzLnggPSAwO1xyXG5cdFx0XHRcdHRoaXMueSA9IC12RnJvbS56O1xyXG5cdFx0XHRcdHRoaXMueiA9IHZGcm9tLnk7XHJcblx0XHRcdFx0dGhpcy53ID0gcjtcclxuXHRcdFx0fVxyXG5cdFx0fSBlbHNlIHtcclxuXHRcdFx0Ly8gY3Jvc3NWZWN0b3JzKCB2RnJvbSwgdlRvICk7IC8vIGlubGluZWQgdG8gYXZvaWQgY3ljbGljIGRlcGVuZGVuY3kgb24gVmVjdG9yM1xyXG5cclxuXHRcdFx0dGhpcy54ID0gdkZyb20ueSAqIHZUby56IC0gdkZyb20ueiAqIHZUby55O1xyXG5cdFx0XHR0aGlzLnkgPSB2RnJvbS56ICogdlRvLnggLSB2RnJvbS54ICogdlRvLno7XHJcblx0XHRcdHRoaXMueiA9IHZGcm9tLnggKiB2VG8ueSAtIHZGcm9tLnkgKiB2VG8ueDtcclxuXHRcdFx0dGhpcy53ID0gcjtcclxuXHRcdH1cclxuXHJcblx0XHRyZXR1cm4gdGhpcy5ub3JtYWxpemUoKTtcclxuXHR9XHJcblx0c2V0RnJvbVJvdGF0aW9uTWF0cml4KG1hdHJpeDogTWF0cml4NCk6IFF1YXRlcm5pb24ge1xyXG5cdFx0Y29uc3QgdGUgPSBtYXRyaXgsXHJcblx0XHRcdG0xMSA9IHRlWzBdLFxyXG5cdFx0XHRtMTIgPSB0ZVs0XSxcclxuXHRcdFx0bTEzID0gdGVbOF0sXHJcblx0XHRcdG0yMSA9IHRlWzFdLFxyXG5cdFx0XHRtMjIgPSB0ZVs1XSxcclxuXHRcdFx0bTIzID0gdGVbOV0sXHJcblx0XHRcdG0zMSA9IHRlWzJdLFxyXG5cdFx0XHRtMzIgPSB0ZVs2XSxcclxuXHRcdFx0bTMzID0gdGVbMTBdLFxyXG5cdFx0XHR0cmFjZSA9IG0xMSArIG0yMiArIG0zMztcclxuXHJcblx0XHRpZiAodHJhY2UgPiAwKSB7XHJcblx0XHRcdGNvbnN0IHMgPSAwLjUgLyBNYXRoLnNxcnQodHJhY2UgKyAxLjApO1xyXG5cclxuXHRcdFx0dGhpcy53ID0gMC4yNSAvIHM7XHJcblx0XHRcdHRoaXMueCA9IChtMzIgLSBtMjMpICogcztcclxuXHRcdFx0dGhpcy55ID0gKG0xMyAtIG0zMSkgKiBzO1xyXG5cdFx0XHR0aGlzLnogPSAobTIxIC0gbTEyKSAqIHM7XHJcblx0XHR9IGVsc2UgaWYgKG0xMSA+IG0yMiAmJiBtMTEgPiBtMzMpIHtcclxuXHRcdFx0Y29uc3QgcyA9IDIuMCAqIE1hdGguc3FydCgxLjAgKyBtMTEgLSBtMjIgLSBtMzMpO1xyXG5cclxuXHRcdFx0dGhpcy53ID0gKG0zMiAtIG0yMykgLyBzO1xyXG5cdFx0XHR0aGlzLnggPSAwLjI1ICogcztcclxuXHRcdFx0dGhpcy55ID0gKG0xMiArIG0yMSkgLyBzO1xyXG5cdFx0XHR0aGlzLnogPSAobTEzICsgbTMxKSAvIHM7XHJcblx0XHR9IGVsc2UgaWYgKG0yMiA+IG0zMykge1xyXG5cdFx0XHRjb25zdCBzID0gMi4wICogTWF0aC5zcXJ0KDEuMCArIG0yMiAtIG0xMSAtIG0zMyk7XHJcblxyXG5cdFx0XHR0aGlzLncgPSAobTEzIC0gbTMxKSAvIHM7XHJcblx0XHRcdHRoaXMueCA9IChtMTIgKyBtMjEpIC8gcztcclxuXHRcdFx0dGhpcy55ID0gMC4yNSAqIHM7XHJcblx0XHRcdHRoaXMueiA9IChtMjMgKyBtMzIpIC8gcztcclxuXHRcdH0gZWxzZSB7XHJcblx0XHRcdGNvbnN0IHMgPSAyLjAgKiBNYXRoLnNxcnQoMS4wICsgbTMzIC0gbTExIC0gbTIyKTtcclxuXHJcblx0XHRcdHRoaXMudyA9IChtMjEgLSBtMTIpIC8gcztcclxuXHRcdFx0dGhpcy54ID0gKG0xMyArIG0zMSkgLyBzO1xyXG5cdFx0XHR0aGlzLnkgPSAobTIzICsgbTMyKSAvIHM7XHJcblx0XHRcdHRoaXMueiA9IDAuMjUgKiBzO1xyXG5cdFx0fVxyXG5cdFx0cmV0dXJuIHRoaXM7XHJcblx0fVxyXG5cdGNsb25lKCkge1xyXG5cdFx0cmV0dXJuIFF1YXRlcm5pb24uY2xvbmUodGhpcywgdGhpcyk7XHJcblx0fVxyXG5cclxuXHRlcXVhbHMocmlnaHQ6IFF1YXRlcm5pb24pOiBib29sZWFuIHtcclxuXHRcdHJldHVybiBRdWF0ZXJuaW9uLmVxdWFscyh0aGlzLCByaWdodCk7XHJcblx0fVxyXG5cclxuXHRlcXVhbHNFcHNpbG9uKHJpZ2h0OiBRdWF0ZXJuaW9uLCBlcHNpbG9uID0gMCk6IGJvb2xlYW4ge1xyXG5cdFx0cmV0dXJuIFF1YXRlcm5pb24uZXF1YWxzRXBzaWxvbih0aGlzLCByaWdodCwgZXBzaWxvbik7XHJcblx0fVxyXG5cdHRvQXJyYXkoKTogbnVtYmVyW10ge1xyXG5cdFx0Y29uc3QgeyB4LCB5LCB6LCB3IH0gPSB0aGlzO1xyXG5cdFx0cmV0dXJuIFt4LCB5LCB6LCB3XTtcclxuXHR9XHJcblx0c3RhdGljIGZyb21BeGlzQW5nbGUoYXhpczogVmVjdG9yMywgYW5nbGU6IG51bWJlcik6IFF1YXRlcm5pb24ge1xyXG5cdFx0Y29uc3QgaGFsZkFuZ2xlID0gYW5nbGUgLyAyLjA7XHJcblx0XHRjb25zdCBzID0gTWF0aC5zaW4oaGFsZkFuZ2xlKTtcclxuXHRcdGZyb21BeGlzQW5nbGVTY3JhdGNoID0gVmVjdG9yMy5ub3JtYWxpemUoYXhpcywgZnJvbUF4aXNBbmdsZVNjcmF0Y2gpO1xyXG5cclxuXHRcdGNvbnN0IHggPSBmcm9tQXhpc0FuZ2xlU2NyYXRjaC54ICogcztcclxuXHRcdGNvbnN0IHkgPSBmcm9tQXhpc0FuZ2xlU2NyYXRjaC55ICogcztcclxuXHRcdGNvbnN0IHogPSBmcm9tQXhpc0FuZ2xlU2NyYXRjaC56ICogcztcclxuXHRcdGNvbnN0IHcgPSBNYXRoLmNvcyhoYWxmQW5nbGUpO1xyXG5cdFx0Ly8gaWYgKCFkZWZpbmVkKHJlc3VsdCkpIHtcclxuXHRcdC8vICAgcmV0dXJuXHJcblx0XHQvLyB9XHJcblx0XHRjb25zdCByZXN1bHQgPSBuZXcgUXVhdGVybmlvbih4LCB5LCB6LCB3KTtcclxuXHRcdHJlc3VsdC54ID0geDtcclxuXHRcdHJlc3VsdC55ID0geTtcclxuXHRcdHJlc3VsdC56ID0gejtcclxuXHRcdHJlc3VsdC53ID0gdztcclxuXHRcdHJldHVybiByZXN1bHQ7XHJcblx0fVxyXG5cclxuXHQvLyBzdGF0aWMgZnJvbVJvdGF0aW9uTWF0cml4KG1hdHJpeDogTWF0cml4MywgcmVzdWx0OiBRdWF0ZXJuaW9uKTogUXVhdGVybmlvbiB7XHJcblx0Ly8gXHRsZXQgcm9vdDtcclxuXHQvLyBcdGxldCB4O1xyXG5cdC8vIFx0bGV0IHk7XHJcblx0Ly8gXHRsZXQgejtcclxuXHQvLyBcdGxldCB3O1xyXG5cclxuXHQvLyBcdGNvbnN0IG0wMCA9IG1hdHJpeFtNYXRyaXgzLkNPTFVNTjBST1cwXTtcclxuXHQvLyBcdGNvbnN0IG0xMSA9IG1hdHJpeFtNYXRyaXgzLkNPTFVNTjFST1cxXTtcclxuXHQvLyBcdGNvbnN0IG0yMiA9IG1hdHJpeFtNYXRyaXgzLkNPTFVNTjJST1cyXTtcclxuXHQvLyBcdGNvbnN0IHRyYWNlID0gbTAwICsgbTExICsgbTIyO1xyXG5cclxuXHQvLyBcdGlmICh0cmFjZSA+IDAuMCkge1xyXG5cdC8vIFx0XHQvLyB8d3wgPiAxLzIsIG1heSBhcyB3ZWxsIGNob29zZSB3ID4gMS8yXHJcblx0Ly8gXHRcdHJvb3QgPSBNYXRoLnNxcnQodHJhY2UgKyAxLjApOyAvLyAyd1xyXG5cdC8vIFx0XHR3ID0gMC41ICogcm9vdDtcclxuXHQvLyBcdFx0cm9vdCA9IDAuNSAvIHJvb3Q7IC8vIDEvKDR3KVxyXG5cclxuXHQvLyBcdFx0eCA9IChtYXRyaXhbTWF0cml4My5DT0xVTU4xUk9XMl0gLSBtYXRyaXhbTWF0cml4My5DT0xVTU4yUk9XMV0pICogcm9vdDtcclxuXHQvLyBcdFx0eSA9IChtYXRyaXhbTWF0cml4My5DT0xVTU4yUk9XMF0gLSBtYXRyaXhbTWF0cml4My5DT0xVTU4wUk9XMl0pICogcm9vdDtcclxuXHQvLyBcdFx0eiA9IChtYXRyaXhbTWF0cml4My5DT0xVTU4wUk9XMV0gLSBtYXRyaXhbTWF0cml4My5DT0xVTU4xUk9XMF0pICogcm9vdDtcclxuXHQvLyBcdH0gZWxzZSB7XHJcblx0Ly8gXHRcdC8vIHx3fCA8PSAxLzJcclxuXHQvLyBcdFx0Y29uc3QgbmV4dCA9IGZyb21Sb3RhdGlvbk1hdHJpeE5leHQ7XHJcblxyXG5cdC8vIFx0XHRsZXQgaSA9IDA7XHJcblx0Ly8gXHRcdGlmIChtMTEgPiBtMDApIHtcclxuXHQvLyBcdFx0XHRpID0gMTtcclxuXHQvLyBcdFx0fVxyXG5cdC8vIFx0XHRpZiAobTIyID4gbTAwICYmIG0yMiA+IG0xMSkge1xyXG5cdC8vIFx0XHRcdGkgPSAyO1xyXG5cdC8vIFx0XHR9XHJcblx0Ly8gXHRcdGNvbnN0IGogPSBuZXh0W2ldO1xyXG5cdC8vIFx0XHRjb25zdCBrID0gbmV4dFtqXTtcclxuXHJcblx0Ly8gXHRcdHJvb3QgPSBNYXRoLnNxcnQoXHJcblx0Ly8gXHRcdFx0bWF0cml4W01hdHJpeDMuZ2V0RWxlbWVudEluZGV4KGksIGkpXSAtXHJcblx0Ly8gXHRcdFx0XHRtYXRyaXhbTWF0cml4My5nZXRFbGVtZW50SW5kZXgoaiwgaildIC1cclxuXHQvLyBcdFx0XHRcdG1hdHJpeFtNYXRyaXgzLmdldEVsZW1lbnRJbmRleChrLCBrKV0gK1xyXG5cdC8vIFx0XHRcdFx0MS4wXHJcblx0Ly8gXHRcdCk7XHJcblxyXG5cdC8vIFx0XHRjb25zdCBxdWF0ID0gZnJvbVJvdGF0aW9uTWF0cml4UXVhdDtcclxuXHQvLyBcdFx0cXVhdFtpXSA9IDAuNSAqIHJvb3Q7XHJcblx0Ly8gXHRcdHJvb3QgPSAwLjUgLyByb290O1xyXG5cdC8vIFx0XHR3ID0gKG1hdHJpeFtNYXRyaXgzLmdldEVsZW1lbnRJbmRleChrLCBqKV0gLSBtYXRyaXhbTWF0cml4My5nZXRFbGVtZW50SW5kZXgoaiwgayldKSAqIHJvb3Q7XHJcblx0Ly8gXHRcdHF1YXRbal0gPSAobWF0cml4W01hdHJpeDMuZ2V0RWxlbWVudEluZGV4KGosIGkpXSArIG1hdHJpeFtNYXRyaXgzLmdldEVsZW1lbnRJbmRleChpLCBqKV0pICogcm9vdDtcclxuXHQvLyBcdFx0cXVhdFtrXSA9IChtYXRyaXhbTWF0cml4My5nZXRFbGVtZW50SW5kZXgoaywgaSldICsgbWF0cml4W01hdHJpeDMuZ2V0RWxlbWVudEluZGV4KGksIGspXSkgKiByb290O1xyXG5cclxuXHQvLyBcdFx0eCA9IC1xdWF0WzBdO1xyXG5cdC8vIFx0XHR5ID0gLXF1YXRbMV07XHJcblx0Ly8gXHRcdHogPSAtcXVhdFsyXTtcclxuXHQvLyBcdH1cclxuXHJcblx0Ly8gXHRpZiAoIWRlZmluZWQocmVzdWx0KSkge1xyXG5cdC8vIFx0XHRyZXR1cm4gbmV3IFF1YXRlcm5pb24oeCwgeSwgeiwgdyk7XHJcblx0Ly8gXHR9XHJcblx0Ly8gXHRyZXN1bHQueCA9IHg7XHJcblx0Ly8gXHRyZXN1bHQueSA9IHk7XHJcblx0Ly8gXHRyZXN1bHQueiA9IHo7XHJcblx0Ly8gXHRyZXN1bHQudyA9IHc7XHJcblx0Ly8gXHRyZXR1cm4gcmVzdWx0O1xyXG5cdC8vIH1cclxuXHJcblx0c3RhdGljIGNsb25lKHF1YXRlcm5pb246IFF1YXRlcm5pb24sIHJlc3VsdDogUXVhdGVybmlvbik6IFF1YXRlcm5pb24ge1xyXG5cdFx0aWYgKCFkZWZpbmVkKHF1YXRlcm5pb24pKSB7XHJcblx0XHRcdHJldHVybiB1bmRlZmluZWQ7XHJcblx0XHR9XHJcblxyXG5cdFx0aWYgKCFkZWZpbmVkKHJlc3VsdCkpIHtcclxuXHRcdFx0cmV0dXJuIG5ldyBRdWF0ZXJuaW9uKHF1YXRlcm5pb24ueCwgcXVhdGVybmlvbi55LCBxdWF0ZXJuaW9uLnosIHF1YXRlcm5pb24udyk7XHJcblx0XHR9XHJcblxyXG5cdFx0cmVzdWx0LnggPSBxdWF0ZXJuaW9uLng7XHJcblx0XHRyZXN1bHQueSA9IHF1YXRlcm5pb24ueTtcclxuXHRcdHJlc3VsdC56ID0gcXVhdGVybmlvbi56O1xyXG5cdFx0cmVzdWx0LncgPSBxdWF0ZXJuaW9uLnc7XHJcblx0XHRyZXR1cm4gcmVzdWx0O1xyXG5cdH1cclxuXHJcblx0c3RhdGljIGNvbmp1Z2F0ZShxdWF0ZXJuaW9uOiBRdWF0ZXJuaW9uLCByZXN1bHQ6IFF1YXRlcm5pb24pOiBRdWF0ZXJuaW9uIHtcclxuXHRcdHJlc3VsdC54ID0gLXF1YXRlcm5pb24ueDtcclxuXHRcdHJlc3VsdC55ID0gLXF1YXRlcm5pb24ueTtcclxuXHRcdHJlc3VsdC56ID0gLXF1YXRlcm5pb24uejtcclxuXHRcdHJlc3VsdC53ID0gcXVhdGVybmlvbi53O1xyXG5cdFx0cmV0dXJuIHJlc3VsdDtcclxuXHR9XHJcblxyXG5cdHN0YXRpYyBtYWduaXR1ZGVTcXVhcmVkKHF1YXRlcm5pb246IFF1YXRlcm5pb24pOiBudW1iZXIge1xyXG5cdFx0cmV0dXJuIChcclxuXHRcdFx0cXVhdGVybmlvbi54ICogcXVhdGVybmlvbi54ICtcclxuXHRcdFx0cXVhdGVybmlvbi55ICogcXVhdGVybmlvbi55ICtcclxuXHRcdFx0cXVhdGVybmlvbi56ICogcXVhdGVybmlvbi56ICtcclxuXHRcdFx0cXVhdGVybmlvbi53ICogcXVhdGVybmlvbi53XHJcblx0XHQpO1xyXG5cdH1cclxuXHJcblx0c3RhdGljIG1hZ25pdHVkZShxdWF0ZXJuaW9uOiBRdWF0ZXJuaW9uKTogbnVtYmVyIHtcclxuXHRcdHJldHVybiBNYXRoLnNxcnQoUXVhdGVybmlvbi5tYWduaXR1ZGVTcXVhcmVkKHF1YXRlcm5pb24pKTtcclxuXHR9XHJcblxyXG5cdHN0YXRpYyBub3JtYWxpemUocXVhdGVybmlvbjogUXVhdGVybmlvbiwgcmVzdWx0OiBRdWF0ZXJuaW9uKTogUXVhdGVybmlvbiB7XHJcblx0XHRjb25zdCBpbnZlcnNlTWFnbml0dWRlID0gMS4wIC8gUXVhdGVybmlvbi5tYWduaXR1ZGUocXVhdGVybmlvbik7XHJcblx0XHRjb25zdCB4ID0gcXVhdGVybmlvbi54ICogaW52ZXJzZU1hZ25pdHVkZTtcclxuXHRcdGNvbnN0IHkgPSBxdWF0ZXJuaW9uLnkgKiBpbnZlcnNlTWFnbml0dWRlO1xyXG5cdFx0Y29uc3QgeiA9IHF1YXRlcm5pb24ueiAqIGludmVyc2VNYWduaXR1ZGU7XHJcblx0XHRjb25zdCB3ID0gcXVhdGVybmlvbi53ICogaW52ZXJzZU1hZ25pdHVkZTtcclxuXHJcblx0XHRyZXN1bHQueCA9IHg7XHJcblx0XHRyZXN1bHQueSA9IHk7XHJcblx0XHRyZXN1bHQueiA9IHo7XHJcblx0XHRyZXN1bHQudyA9IHc7XHJcblx0XHRyZXR1cm4gcmVzdWx0O1xyXG5cdH1cclxuXHJcblx0c3RhdGljIGludmVyc2UocXVhdGVybmlvbjogUXVhdGVybmlvbiwgcmVzdWx0OiBRdWF0ZXJuaW9uKTogUXVhdGVybmlvbiB7XHJcblx0XHRjb25zdCBtYWduaXR1ZGVTcXVhcmVkID0gUXVhdGVybmlvbi5tYWduaXR1ZGVTcXVhcmVkKHF1YXRlcm5pb24pO1xyXG5cdFx0cmVzdWx0ID0gUXVhdGVybmlvbi5jb25qdWdhdGUocXVhdGVybmlvbiwgcmVzdWx0KTtcclxuXHRcdHJldHVybiBRdWF0ZXJuaW9uLm11bHRpcGx5QnlTY2FsYXIocmVzdWx0LCAxLjAgLyBtYWduaXR1ZGVTcXVhcmVkLCByZXN1bHQpO1xyXG5cdH1cclxuXHJcblx0c3RhdGljIGFkZChsZWZ0OiBRdWF0ZXJuaW9uLCByaWdodDogUXVhdGVybmlvbiwgcmVzdWx0OiBRdWF0ZXJuaW9uKTogUXVhdGVybmlvbiB7XHJcblx0XHRyZXN1bHQueCA9IGxlZnQueCArIHJpZ2h0Lng7XHJcblx0XHRyZXN1bHQueSA9IGxlZnQueSArIHJpZ2h0Lnk7XHJcblx0XHRyZXN1bHQueiA9IGxlZnQueiArIHJpZ2h0Lno7XHJcblx0XHRyZXN1bHQudyA9IGxlZnQudyArIHJpZ2h0Lnc7XHJcblx0XHRyZXR1cm4gcmVzdWx0O1xyXG5cdH1cclxuXHJcblx0c3RhdGljIHN1YnRyYWN0KGxlZnQ6IFF1YXRlcm5pb24sIHJpZ2h0OiBRdWF0ZXJuaW9uLCByZXN1bHQ6IFF1YXRlcm5pb24pOiBRdWF0ZXJuaW9uIHtcclxuXHRcdHJlc3VsdC54ID0gbGVmdC54IC0gcmlnaHQueDtcclxuXHRcdHJlc3VsdC55ID0gbGVmdC55IC0gcmlnaHQueTtcclxuXHRcdHJlc3VsdC56ID0gbGVmdC56IC0gcmlnaHQuejtcclxuXHRcdHJlc3VsdC53ID0gbGVmdC53IC0gcmlnaHQudztcclxuXHRcdHJldHVybiByZXN1bHQ7XHJcblx0fVxyXG5cclxuXHRzdGF0aWMgbmVnYXRlKHF1YXRlcm5pb246IFF1YXRlcm5pb24sIHJlc3VsdDogUXVhdGVybmlvbik6IFF1YXRlcm5pb24ge1xyXG5cdFx0cmVzdWx0LnggPSAtcXVhdGVybmlvbi54O1xyXG5cdFx0cmVzdWx0LnkgPSAtcXVhdGVybmlvbi55O1xyXG5cdFx0cmVzdWx0LnogPSAtcXVhdGVybmlvbi56O1xyXG5cdFx0cmVzdWx0LncgPSAtcXVhdGVybmlvbi53O1xyXG5cdFx0cmV0dXJuIHJlc3VsdDtcclxuXHR9XHJcblxyXG5cdHN0YXRpYyBkb3QobGVmdDogUXVhdGVybmlvbiwgcmlnaHQ6IFF1YXRlcm5pb24pOiBudW1iZXIge1xyXG5cdFx0cmV0dXJuIGxlZnQueCAqIHJpZ2h0LnggKyBsZWZ0LnkgKiByaWdodC55ICsgbGVmdC56ICogcmlnaHQueiArIGxlZnQudyAqIHJpZ2h0Lnc7XHJcblx0fVxyXG5cclxuXHRzdGF0aWMgbXVsdGlwbHkobGVmdDogUXVhdGVybmlvbiwgcmlnaHQ6IFF1YXRlcm5pb24sIHJlc3VsdDogUXVhdGVybmlvbik6IFF1YXRlcm5pb24ge1xyXG5cdFx0Y29uc3QgbGVmdFggPSBsZWZ0Lng7XHJcblx0XHRjb25zdCBsZWZ0WSA9IGxlZnQueTtcclxuXHRcdGNvbnN0IGxlZnRaID0gbGVmdC56O1xyXG5cdFx0Y29uc3QgbGVmdFcgPSBsZWZ0Lnc7XHJcblxyXG5cdFx0Y29uc3QgcmlnaHRYID0gcmlnaHQueDtcclxuXHRcdGNvbnN0IHJpZ2h0WSA9IHJpZ2h0Lnk7XHJcblx0XHRjb25zdCByaWdodFogPSByaWdodC56O1xyXG5cdFx0Y29uc3QgcmlnaHRXID0gcmlnaHQudztcclxuXHJcblx0XHRjb25zdCB4ID0gbGVmdFcgKiByaWdodFggKyBsZWZ0WCAqIHJpZ2h0VyArIGxlZnRZICogcmlnaHRaIC0gbGVmdFogKiByaWdodFk7XHJcblx0XHRjb25zdCB5ID0gbGVmdFcgKiByaWdodFkgLSBsZWZ0WCAqIHJpZ2h0WiArIGxlZnRZICogcmlnaHRXICsgbGVmdFogKiByaWdodFg7XHJcblx0XHRjb25zdCB6ID0gbGVmdFcgKiByaWdodFogKyBsZWZ0WCAqIHJpZ2h0WSAtIGxlZnRZICogcmlnaHRYICsgbGVmdFogKiByaWdodFc7XHJcblx0XHRjb25zdCB3ID0gbGVmdFcgKiByaWdodFcgLSBsZWZ0WCAqIHJpZ2h0WCAtIGxlZnRZICogcmlnaHRZIC0gbGVmdFogKiByaWdodFo7XHJcblxyXG5cdFx0cmVzdWx0LnggPSB4O1xyXG5cdFx0cmVzdWx0LnkgPSB5O1xyXG5cdFx0cmVzdWx0LnogPSB6O1xyXG5cdFx0cmVzdWx0LncgPSB3O1xyXG5cdFx0cmV0dXJuIHJlc3VsdDtcclxuXHR9XHJcblxyXG5cdHN0YXRpYyBtdWx0aXBseUJ5U2NhbGFyKHF1YXRlcm5pb246IFF1YXRlcm5pb24sIHNjYWxhcjogbnVtYmVyLCByZXN1bHQ6IFF1YXRlcm5pb24pOiBRdWF0ZXJuaW9uIHtcclxuXHRcdHJlc3VsdC54ID0gcXVhdGVybmlvbi54ICogc2NhbGFyO1xyXG5cdFx0cmVzdWx0LnkgPSBxdWF0ZXJuaW9uLnkgKiBzY2FsYXI7XHJcblx0XHRyZXN1bHQueiA9IHF1YXRlcm5pb24ueiAqIHNjYWxhcjtcclxuXHRcdHJlc3VsdC53ID0gcXVhdGVybmlvbi53ICogc2NhbGFyO1xyXG5cdFx0cmV0dXJuIHJlc3VsdDtcclxuXHR9XHJcblxyXG5cdHN0YXRpYyBkaXZpZGVCeVNjYWxhcihxdWF0ZXJuaW9uOiBRdWF0ZXJuaW9uLCBzY2FsYXI6IG51bWJlciwgcmVzdWx0OiBRdWF0ZXJuaW9uKTogUXVhdGVybmlvbiB7XHJcblx0XHRyZXN1bHQueCA9IHF1YXRlcm5pb24ueCAvIHNjYWxhcjtcclxuXHRcdHJlc3VsdC55ID0gcXVhdGVybmlvbi55IC8gc2NhbGFyO1xyXG5cdFx0cmVzdWx0LnogPSBxdWF0ZXJuaW9uLnogLyBzY2FsYXI7XHJcblx0XHRyZXN1bHQudyA9IHF1YXRlcm5pb24udyAvIHNjYWxhcjtcclxuXHRcdHJldHVybiByZXN1bHQ7XHJcblx0fVxyXG5cclxuXHRzdGF0aWMgY29tcHV0ZUF4aXMocXVhdGVybmlvbjogUXVhdGVybmlvbiwgcmVzdWx0OiBWZWN0b3IzKTogVmVjdG9yMyB7XHJcblx0XHRjb25zdCB3ID0gcXVhdGVybmlvbi53O1xyXG5cdFx0aWYgKE1hdGguYWJzKHcgLSAxLjApIDwgR01hdGguRVBTSUxPTjYpIHtcclxuXHRcdFx0cmVzdWx0LnggPSByZXN1bHQueSA9IHJlc3VsdC56ID0gMDtcclxuXHRcdFx0cmV0dXJuIHJlc3VsdDtcclxuXHRcdH1cclxuXHJcblx0XHRjb25zdCBzY2FsYXIgPSAxLjAgLyBNYXRoLnNxcnQoMS4wIC0gdyAqIHcpO1xyXG5cclxuXHRcdHJlc3VsdC54ID0gcXVhdGVybmlvbi54ICogc2NhbGFyO1xyXG5cdFx0cmVzdWx0LnkgPSBxdWF0ZXJuaW9uLnkgKiBzY2FsYXI7XHJcblx0XHRyZXN1bHQueiA9IHF1YXRlcm5pb24ueiAqIHNjYWxhcjtcclxuXHRcdHJldHVybiByZXN1bHQ7XHJcblx0fVxyXG5cclxuXHRzdGF0aWMgY29tcHV0ZUFuZ2xlKHF1YXRlcm5pb246IFF1YXRlcm5pb24pOiBudW1iZXIge1xyXG5cdFx0aWYgKE1hdGguYWJzKHF1YXRlcm5pb24udyAtIDEuMCkgPCBHTWF0aC5FUFNJTE9ONikge1xyXG5cdFx0XHRyZXR1cm4gMC4wO1xyXG5cdFx0fVxyXG5cdFx0cmV0dXJuIDIuMCAqIE1hdGguYWNvcyhxdWF0ZXJuaW9uLncpO1xyXG5cdH1cclxuXHJcblx0c3RhdGljIGxlcnAoc3RhcnQ6IFF1YXRlcm5pb24sIGVuZDogUXVhdGVybmlvbiwgdDogbnVtYmVyLCByZXN1bHQ6IFF1YXRlcm5pb24pOiBRdWF0ZXJuaW9uIHtcclxuXHRcdGxlcnBTY3JhdGNoID0gUXVhdGVybmlvbi5tdWx0aXBseUJ5U2NhbGFyKGVuZCwgdCwgbGVycFNjcmF0Y2gpO1xyXG5cdFx0cmVzdWx0ID0gUXVhdGVybmlvbi5tdWx0aXBseUJ5U2NhbGFyKHN0YXJ0LCAxLjAgLSB0LCByZXN1bHQpO1xyXG5cdFx0cmV0dXJuIFF1YXRlcm5pb24uYWRkKGxlcnBTY3JhdGNoLCByZXN1bHQsIHJlc3VsdCk7XHJcblx0fVxyXG5cclxuXHRzdGF0aWMgc2xlcnAoc3RhcnQ6IFF1YXRlcm5pb24sIGVuZDogUXVhdGVybmlvbiwgdDogbnVtYmVyLCByZXN1bHQ6IFF1YXRlcm5pb24pOiBRdWF0ZXJuaW9uIHtcclxuXHRcdGxldCBkb3QgPSBRdWF0ZXJuaW9uLmRvdChzdGFydCwgZW5kKTtcclxuXHJcblx0XHQvLyBUaGUgYW5nbGUgYmV0d2VlbiBzdGFydCBtdXN0IGJlIGFjdXRlLiBTaW5jZSBxIGFuZCAtcSByZXByZXNlbnRcclxuXHRcdC8vIHRoZSBzYW1lIHJvdGF0aW9uLCBuZWdhdGUgcSB0byBnZXQgdGhlIGFjdXRlIGFuZ2xlLlxyXG5cdFx0bGV0IHIgPSBlbmQ7XHJcblx0XHRpZiAoZG90IDwgMC4wKSB7XHJcblx0XHRcdGRvdCA9IC1kb3Q7XHJcblx0XHRcdHIgPSBzbGVycEVuZE5lZ2F0ZWQgPSBRdWF0ZXJuaW9uLm5lZ2F0ZShlbmQsIHNsZXJwRW5kTmVnYXRlZCk7XHJcblx0XHR9XHJcblxyXG5cdFx0Ly8gZG90ID4gMCwgYXMgdGhlIGRvdCBwcm9kdWN0IGFwcHJvYWNoZXMgMSwgdGhlIGFuZ2xlIGJldHdlZW4gdGhlXHJcblx0XHQvLyBxdWF0ZXJuaW9ucyB2YW5pc2hlcy4gdXNlIGxpbmVhciBpbnRlcnBvbGF0aW9uLlxyXG5cdFx0aWYgKDEuMCAtIGRvdCA8IEdNYXRoLkVQU0lMT042KSB7XHJcblx0XHRcdHJldHVybiBRdWF0ZXJuaW9uLmxlcnAoc3RhcnQsIHIsIHQsIHJlc3VsdCk7XHJcblx0XHR9XHJcblxyXG5cdFx0Y29uc3QgdGhldGEgPSBNYXRoLmFjb3MoZG90KTtcclxuXHRcdHNsZXJwU2NhbGVkUCA9IFF1YXRlcm5pb24ubXVsdGlwbHlCeVNjYWxhcihzdGFydCwgTWF0aC5zaW4oKDEgLSB0KSAqIHRoZXRhKSwgc2xlcnBTY2FsZWRQKTtcclxuXHRcdHNsZXJwU2NhbGVkUiA9IFF1YXRlcm5pb24ubXVsdGlwbHlCeVNjYWxhcihyLCBNYXRoLnNpbih0ICogdGhldGEpLCBzbGVycFNjYWxlZFIpO1xyXG5cdFx0cmVzdWx0ID0gUXVhdGVybmlvbi5hZGQoc2xlcnBTY2FsZWRQLCBzbGVycFNjYWxlZFIsIHJlc3VsdCk7XHJcblx0XHRyZXR1cm4gUXVhdGVybmlvbi5tdWx0aXBseUJ5U2NhbGFyKHJlc3VsdCwgMS4wIC8gTWF0aC5zaW4odGhldGEpLCByZXN1bHQpO1xyXG5cdH1cclxuXHJcblx0c3RhdGljIHNxdWFkKFxyXG5cdFx0cTA6IFF1YXRlcm5pb24sXHJcblx0XHRxMTogUXVhdGVybmlvbixcclxuXHRcdHMwOiBRdWF0ZXJuaW9uLFxyXG5cdFx0czE6IFF1YXRlcm5pb24sXHJcblx0XHR0OiBudW1iZXIsXHJcblx0XHRyZXN1bHQ6IFF1YXRlcm5pb25cclxuXHQpOiBRdWF0ZXJuaW9uIHtcclxuXHRcdGNvbnN0IHNsZXJwMCA9IFF1YXRlcm5pb24uc2xlcnAocTAsIHExLCB0LCBzcXVhZFNjcmF0Y2hRdWF0ZXJuaW9uMCk7XHJcblx0XHRjb25zdCBzbGVycDEgPSBRdWF0ZXJuaW9uLnNsZXJwKHMwLCBzMSwgdCwgc3F1YWRTY3JhdGNoUXVhdGVybmlvbjEpO1xyXG5cdFx0cmV0dXJuIFF1YXRlcm5pb24uc2xlcnAoc2xlcnAwLCBzbGVycDEsIDIuMCAqIHQgKiAoMS4wIC0gdCksIHJlc3VsdCk7XHJcblx0fVxyXG5cdHN0YXRpYyBlcXVhbHMobGVmdDogUXVhdGVybmlvbiwgcmlnaHQ6IFF1YXRlcm5pb24pOiBib29sZWFuIHtcclxuXHRcdHJldHVybiAoXHJcblx0XHRcdGxlZnQgPT09IHJpZ2h0IHx8XHJcblx0XHRcdChkZWZpbmVkKGxlZnQpICYmXHJcblx0XHRcdFx0ZGVmaW5lZChyaWdodCkgJiZcclxuXHRcdFx0XHRsZWZ0LnggPT09IHJpZ2h0LnggJiZcclxuXHRcdFx0XHRsZWZ0LnkgPT09IHJpZ2h0LnkgJiZcclxuXHRcdFx0XHRsZWZ0LnogPT09IHJpZ2h0LnogJiZcclxuXHRcdFx0XHRsZWZ0LncgPT09IHJpZ2h0LncpXHJcblx0XHQpO1xyXG5cdH1cclxuXHJcblx0c3RhdGljIGVxdWFsc0Vwc2lsb24obGVmdDogUXVhdGVybmlvbiwgcmlnaHQ6IFF1YXRlcm5pb24sIGVwc2lsb24gPSAwKTogYm9vbGVhbiB7XHJcblx0XHRlcHNpbG9uID0gZGVmYXVsdFZhbHVlKGVwc2lsb24sIDApO1xyXG5cclxuXHRcdHJldHVybiAoXHJcblx0XHRcdGxlZnQgPT09IHJpZ2h0IHx8XHJcblx0XHRcdChkZWZpbmVkKGxlZnQpICYmXHJcblx0XHRcdFx0ZGVmaW5lZChyaWdodCkgJiZcclxuXHRcdFx0XHRNYXRoLmFicyhsZWZ0LnggLSByaWdodC54KSA8PSBlcHNpbG9uICYmXHJcblx0XHRcdFx0TWF0aC5hYnMobGVmdC55IC0gcmlnaHQueSkgPD0gZXBzaWxvbiAmJlxyXG5cdFx0XHRcdE1hdGguYWJzKGxlZnQueiAtIHJpZ2h0LnopIDw9IGVwc2lsb24gJiZcclxuXHRcdFx0XHRNYXRoLmFicyhsZWZ0LncgLSByaWdodC53KSA8PSBlcHNpbG9uKVxyXG5cdFx0KTtcclxuXHR9XHJcblxyXG5cdHN0YXRpYyBleHAoY2FydGVzaWFuOiBWZWN0b3IzLCByZXN1bHQ6IFF1YXRlcm5pb24pOiBRdWF0ZXJuaW9uIHtcclxuXHRcdGNvbnN0IHRoZXRhID0gVmVjdG9yMy5tYWduaXR1ZGUoY2FydGVzaWFuKTtcclxuXHRcdGxldCBzaW5UaGV0YU92ZXJUaGV0YSA9IDAuMDtcclxuXHJcblx0XHRpZiAodGhldGEgIT09IDAuMCkge1xyXG5cdFx0XHRzaW5UaGV0YU92ZXJUaGV0YSA9IE1hdGguc2luKHRoZXRhKSAvIHRoZXRhO1xyXG5cdFx0fVxyXG5cclxuXHRcdHJlc3VsdC54ID0gY2FydGVzaWFuLnggKiBzaW5UaGV0YU92ZXJUaGV0YTtcclxuXHRcdHJlc3VsdC55ID0gY2FydGVzaWFuLnkgKiBzaW5UaGV0YU92ZXJUaGV0YTtcclxuXHRcdHJlc3VsdC56ID0gY2FydGVzaWFuLnogKiBzaW5UaGV0YU92ZXJUaGV0YTtcclxuXHRcdHJlc3VsdC53ID0gTWF0aC5jb3ModGhldGEpO1xyXG5cclxuXHRcdHJldHVybiByZXN1bHQ7XHJcblx0fVxyXG59XHJcblxyXG5sZXQgZnJvbUF4aXNBbmdsZVNjcmF0Y2ggPSBuZXcgVmVjdG9yMygpO1xyXG5cclxuY29uc3QgZnJvbVJvdGF0aW9uTWF0cml4TmV4dCA9IFsxLCAyLCAwXTtcclxuY29uc3QgZnJvbVJvdGF0aW9uTWF0cml4UXVhdCA9IG5ldyBBcnJheSgzKTtcclxuXHJcbmxldCBsZXJwU2NyYXRjaCA9IG5ldyBRdWF0ZXJuaW9uKCk7XHJcblxyXG5sZXQgc2xlcnBFbmROZWdhdGVkID0gbmV3IFF1YXRlcm5pb24oKTtcclxubGV0IHNsZXJwU2NhbGVkUCA9IG5ldyBRdWF0ZXJuaW9uKCk7XHJcbmxldCBzbGVycFNjYWxlZFIgPSBuZXcgUXVhdGVybmlvbigpO1xyXG5cclxuY29uc3Qgc3F1YWRTY3JhdGNoQ2FydGVzaWFuMCA9IG5ldyBWZWN0b3IzKCk7XHJcbmNvbnN0IHNxdWFkU2NyYXRjaENhcnRlc2lhbjEgPSBuZXcgVmVjdG9yMygpO1xyXG5jb25zdCBzcXVhZFNjcmF0Y2hRdWF0ZXJuaW9uMCA9IG5ldyBRdWF0ZXJuaW9uKCk7XHJcbmNvbnN0IHNxdWFkU2NyYXRjaFF1YXRlcm5pb24xID0gbmV3IFF1YXRlcm5pb24oKTtcclxuIiwiaW1wb3J0IE1hdHJpeDQgZnJvbSBcIi4uL21hdGgvTWF0cml4NFwiO1xuaW1wb3J0IHsgUXVhdGVybmlvbiB9IGZyb20gXCIuLi9tYXRoL1F1YXRlcm5pb25cIjtcbmltcG9ydCBWZWN0b3IzIGZyb20gXCIuLi9tYXRoL1ZlY3RvcjNcIjtcbmltcG9ydCBJQ2xvbmUgZnJvbSBcIi4vSUNsb25lXCI7XG5pbXBvcnQgeyBSZW5kZXJPYmplY3RUeXBlIH0gZnJvbSBcIi4vV2ViR1BVVHlwZXNcIjtcblxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgUmVuZGVyT2JqZWN0IGltcGxlbWVudHMgSUNsb25lIHtcblx0cHVibGljIHVwOiBWZWN0b3IzO1xuXHRwcm90ZWN0ZWQgX3Bvc2l0aW9uOiBWZWN0b3IzO1xuXHRwcm90ZWN0ZWQgX3NjYWxlOiBWZWN0b3IzO1xuXHRwcm90ZWN0ZWQgX3F1YXRlcm5pb246IFF1YXRlcm5pb247XG5cdHByb3RlY3RlZCBfdGFyZ2V0OiBWZWN0b3IzO1xuXHRwcml2YXRlIF9ub3JtYWxNYXRyaXg6IE1hdHJpeDQ7XG5cdG1vZGVsTWF0cml4OiBNYXRyaXg0O1xuXHRwYXJlbnQ6IFJlbmRlck9iamVjdDtcblx0dHlwZTogUmVuZGVyT2JqZWN0VHlwZTtcblx0bmFtZTogc3RyaW5nO1xuXHRjb25zdHJ1Y3RvcigpIHtcblx0XHR0aGlzLl9wb3NpdGlvbiA9IG5ldyBWZWN0b3IzKCk7XG5cdFx0dGhpcy5fc2NhbGUgPSBuZXcgVmVjdG9yMygxLCAxLCAxKTtcblx0XHR0aGlzLl9xdWF0ZXJuaW9uID0gbmV3IFF1YXRlcm5pb24oKTtcblx0XHR0aGlzLm1vZGVsTWF0cml4ID0gTWF0cml4NC5jbG9uZShNYXRyaXg0LklERU5USVRZLCBuZXcgTWF0cml4NCgpKTtcblx0XHR0aGlzLl9ub3JtYWxNYXRyaXggPSBNYXRyaXg0LmNsb25lKE1hdHJpeDQuSURFTlRJVFksIG5ldyBNYXRyaXg0KCkpO1xuXHRcdHRoaXMudXAgPSBuZXcgVmVjdG9yMygwLCAxLCAwKTtcblx0XHR0aGlzLl90YXJnZXQgPSBuZXcgVmVjdG9yMygwLCAwLCAwKTtcblx0fVxuXHRwdWJsaWMgZ2V0IG5vcm1hbE1hdHJpeCgpOiBNYXRyaXg0IHtcblx0XHRyZXR1cm4gdGhpcy5fbm9ybWFsTWF0cml4O1xuXHR9XG5cblx0cHVibGljIGdldCBwb3NpdGlvbigpOiBWZWN0b3IzIHtcblx0XHRyZXR1cm4gdGhpcy5fcG9zaXRpb247XG5cdH1cblx0cHVibGljIGdldCBzY2FsZSgpOiBWZWN0b3IzIHtcblx0XHRyZXR1cm4gdGhpcy5fc2NhbGU7XG5cdH1cblx0cHVibGljIGdldCBxdWF0ZXJuaW9uKCk6IFF1YXRlcm5pb24ge1xuXHRcdHJldHVybiB0aGlzLl9xdWF0ZXJuaW9uO1xuXHR9XG5cdHByaXZhdGUgdXBkYXRlTm9ybWFsTWF0cml4KCkge1xuXHRcdE1hdHJpeDQuaW52ZXJzZSh0aGlzLm1vZGVsTWF0cml4LCB0aGlzLl9ub3JtYWxNYXRyaXgpO1xuXHRcdE1hdHJpeDQudHJhbnNwb3NlKHRoaXMuX25vcm1hbE1hdHJpeCwgdGhpcy5fbm9ybWFsTWF0cml4KTtcblx0fVxuXHR1cGRhdGVNYXRyaXgobWF0cml4PzogTWF0cml4NCkge1xuXHRcdHRoaXMubW9kZWxNYXRyaXguY29tcG9zZSh0aGlzLnBvc2l0aW9uLCB0aGlzLnF1YXRlcm5pb24sIHRoaXMuc2NhbGUpO1xuXHRcdGlmIChtYXRyaXgpIE1hdHJpeDQubXVsdGlwbHkobWF0cml4LCB0aGlzLm1vZGVsTWF0cml4LCB0aGlzLm1vZGVsTWF0cml4KTtcblx0XHR0aGlzLnVwZGF0ZU5vcm1hbE1hdHJpeCgpO1xuXHR9XG5cdGxvb2tBdCh4LCB5LCB6KSB7XG5cdFx0dGhpcy5fdGFyZ2V0LnNldCh4LCB5LCB6KTtcblx0XHRpZiAodGhpcy50eXBlID09IFJlbmRlck9iamVjdFR5cGUuQ2FtZXJhIHx8IHRoaXMudHlwZSA9PSBSZW5kZXJPYmplY3RUeXBlLkxpZ2h0KSB7XG5cdFx0XHRfbTEubG9va0F0KHRoaXMucG9zaXRpb24sIHRoaXMuX3RhcmdldCwgdGhpcy51cCk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdF9tMS5sb29rQXQodGhpcy5fdGFyZ2V0LCB0aGlzLnBvc2l0aW9uLCB0aGlzLnVwKTtcblx0XHR9XG5cdFx0dGhpcy5xdWF0ZXJuaW9uLnNldEZyb21Sb3RhdGlvbk1hdHJpeChfbTEpO1xuXHR9XG5cdHJvdGF0ZU9uQXhpcyhheGlzLCBhbmdsZSkge1xuXHRcdGNvbnN0IHF1YXQgPSBRdWF0ZXJuaW9uLmZyb21BeGlzQW5nbGUoYXhpcywgYW5nbGUpO1xuXHRcdFF1YXRlcm5pb24ubXVsdGlwbHkodGhpcy5xdWF0ZXJuaW9uLCBxdWF0LCB0aGlzLnF1YXRlcm5pb24pO1xuXHR9XG5cdHJvdGF0ZVgoYW5nbGUpIHtcblx0XHRyZXR1cm4gdGhpcy5yb3RhdGVPbkF4aXMoX3hBeGlzLCBhbmdsZSk7XG5cdH1cblx0cm90YXRlWShhbmdsZSkge1xuXHRcdHJldHVybiB0aGlzLnJvdGF0ZU9uQXhpcyhfeUF4aXMsIGFuZ2xlKTtcblx0fVxuXHRyb3RhdGVaKGFuZ2xlKSB7XG5cdFx0cmV0dXJuIHRoaXMucm90YXRlT25BeGlzKF96QXhpcywgYW5nbGUpO1xuXHR9XG59XG5jb25zdCBfeEF4aXMgPSBuZXcgVmVjdG9yMygxLCAwLCAwKTtcbmNvbnN0IF95QXhpcyA9IG5ldyBWZWN0b3IzKDAsIDEsIDApO1xuY29uc3QgX3pBeGlzID0gbmV3IFZlY3RvcjMoMCwgMCwgMSk7XG5jb25zdCBfbTEgPSBuZXcgTWF0cml4NCgpO1xuIiwiaW1wb3J0IFJlbmRlck9iamVjdCBmcm9tIFwiLi4vY29yZS9SZW5kZXJPYmplY3RcIjtcclxuaW1wb3J0IHsgTGlnaHRUeXBlLCBSZW5kZXJPYmplY3RUeXBlIH0gZnJvbSBcIi4uL2NvcmUvV2ViR1BVVHlwZXNcIjtcclxuaW1wb3J0IFZlY3RvcjMgZnJvbSBcIi4uL21hdGgvVmVjdG9yM1wiO1xyXG5pbXBvcnQgeyBCYXNlU2hhZG93IH0gZnJvbSBcIi4vc2hhZG93cy9CYXNlU2hhZG93XCI7XHJcblxyXG5leHBvcnQgY2xhc3MgTGlnaHQgZXh0ZW5kcyBSZW5kZXJPYmplY3Qge1xyXG5cdHByaXZhdGUgX2NvbG9yOiBWZWN0b3IzO1xyXG5cdHR5cGU6IFJlbmRlck9iamVjdFR5cGU7XHJcblx0cHJpdmF0ZSBfaW50ZW5zaXR5OiBudW1iZXI7XHJcblx0ZGlydHk6IGJvb2xlYW47XHJcblx0Y29sb3JEaXJ0eTogYm9vbGVhbjtcclxuXHRzaGFkb3dEaXJ0eTogYm9vbGVhbjtcclxuXHRpbnRlbnNpdHlEaXJ0eTogYm9vbGVhbjtcclxuXHRwb3NpdGlvbkRpcnR5OiBib29sZWFuO1xyXG5cdHB1YmxpYyBfc2hhZG93OiBCYXNlU2hhZG93O1xyXG5cdHB1YmxpYyB0YXJnZXREaXJ0eTogYm9vbGVhbjtcclxuXHRwdWJsaWMgbGlnaHRUeXBlOiBMaWdodFR5cGU7XHJcblxyXG5cdGNvbnN0cnVjdG9yKGNvbG9yOiBWZWN0b3IzLCBpbnRlbnNpdHk6IG51bWJlcikge1xyXG5cdFx0c3VwZXIoKTtcclxuXHRcdHRoaXMudHlwZSA9IFJlbmRlck9iamVjdFR5cGUuTGlnaHQ7XHJcblx0XHR0aGlzLl9jb2xvciA9IFZlY3RvcjMubXVsdGlwbHlCeVNjYWxhcihjb2xvciwgaW50ZW5zaXR5LCBuZXcgVmVjdG9yMygpKTtcclxuXHRcdHRoaXMuX2ludGVuc2l0eSA9IGludGVuc2l0eTtcclxuXHRcdHRoaXMuX3Bvc2l0aW9uID0gbmV3IFZlY3RvcjMoMCwgMSwgMCk7XHJcblx0XHR0aGlzLl90YXJnZXQgPSBuZXcgVmVjdG9yMygpO1xyXG5cdFx0dGhpcy5wb3NpdGlvbkRpcnR5ID0gdHJ1ZTtcclxuXHRcdHRoaXMudGFyZ2V0RGlydHkgPSB0cnVlO1xyXG5cdFx0dGhpcy5jb2xvckRpcnR5ID0gdHJ1ZTtcclxuXHRcdHRoaXMuc2hhZG93RGlydHkgPSB0cnVlO1xyXG5cdFx0dGhpcy5pbnRlbnNpdHlEaXJ0eSA9IHRydWU7XHJcblx0XHR0aGlzLl9zaGFkb3cgPSBudWxsO1xyXG5cdH1cclxuXHJcblx0Z2V0IHBvc2l0aW9uKCkge1xyXG5cdFx0cmV0dXJuIHRoaXMuX3Bvc2l0aW9uO1xyXG5cdH1cclxuXHJcblx0c2V0IHBvc2l0aW9uKHZhbHVlKSB7XHJcblx0XHR0aGlzLnBvc2l0aW9uRGlydHkgPSB0cnVlO1xyXG5cdFx0dGhpcy5fcG9zaXRpb24gPSB2YWx1ZTtcclxuXHR9XHJcblxyXG5cdGdldCB0YXJnZXQoKSB7XHJcblx0XHRyZXR1cm4gdGhpcy5fdGFyZ2V0O1xyXG5cdH1cclxuXHJcblx0c2V0IHRhcmdldCh2YWx1ZSkge1xyXG5cdFx0dGhpcy50YXJnZXREaXJ0eSA9IHRydWU7XHJcblx0XHR0aGlzLl90YXJnZXQgPSB2YWx1ZTtcclxuXHR9XHJcblxyXG5cdGdldCBjb2xvcigpIHtcclxuXHRcdHJldHVybiB0aGlzLl9jb2xvcjtcclxuXHR9XHJcblxyXG5cdHNldCBjb2xvcih2YWx1ZSkge1xyXG5cdFx0dGhpcy5jb2xvckRpcnR5ID0gdHJ1ZTtcclxuXHRcdHRoaXMuX2NvbG9yID0gdmFsdWU7XHJcblx0fVxyXG5cclxuXHRzZXQgaW50ZW5zaXR5KHZhbHVlKSB7XHJcblx0XHR0aGlzLmNvbG9yID0gVmVjdG9yMy5tdWx0aXBseUJ5U2NhbGFyKHRoaXMuY29sb3IsIHZhbHVlLCBuZXcgVmVjdG9yMygpKTtcclxuXHRcdHRoaXMuaW50ZW5zaXR5RGlydHkgPSB0cnVlO1xyXG5cdFx0dGhpcy5faW50ZW5zaXR5ID0gdmFsdWU7XHJcblx0fVxyXG5cclxuXHRnZXQgaW50ZW5zaXR5KCkge1xyXG5cdFx0cmV0dXJuIHRoaXMuX2ludGVuc2l0eTtcclxuXHR9XHJcblxyXG5cdGdldCBzaGFkb3coKSB7XHJcblx0XHRyZXR1cm4gdGhpcy5fc2hhZG93O1xyXG5cdH1cclxuXHJcblx0c2V0IHNoYWRvdyh2YWx1ZSkge1xyXG5cdFx0dGhpcy5zaGFkb3dEaXJ0eSA9IHRydWU7XHJcblx0XHR0aGlzLl9zaGFkb3cgPSB2YWx1ZTtcclxuXHR9XHJcbn1cclxuIiwiaW1wb3J0IGRlZmF1bHRWYWx1ZSBmcm9tIFwiLi4vdXRpbHMvZGVmYXVsdFZhbHVlXCI7XHJcbmltcG9ydCBkZWZpbmVkIGZyb20gXCIuLi91dGlscy9kZWZpbmVkXCI7XHJcbmltcG9ydCBHTWF0aCBmcm9tIFwiLi9NYXRoXCI7XHJcbi8vICNyZ2JhXHJcbmNvbnN0IHJnYmFNYXRjaGVyID0gL14jKFswLTlhLWZdKShbMC05YS1mXSkoWzAtOWEtZl0pKFswLTlhLWZdKT8kL2k7XHJcbi8vICNycmdnYmJhYVxyXG5jb25zdCBycmdnYmJhYU1hdGNoZXIgPSAvXiMoWzAtOWEtZl17Mn0pKFswLTlhLWZdezJ9KShbMC05YS1mXXsyfSkoWzAtOWEtZl17Mn0pPyQvaTtcclxuLy8gcmdiKCksIHJnYmEoKSwgb3IgcmdiJSgpXHJcbmNvbnN0IHJnYlBhcmVudGhlc2VzTWF0Y2hlciA9IC9ecmdiYT9cXChcXHMqKFswLTkuXSslPylcXHMqLFxccyooWzAtOS5dKyU/KVxccyosXFxzKihbMC05Ll0rJT8pKD86XFxzKixcXHMqKFswLTkuXSspKT9cXHMqXFwpJC9pO1xyXG4vLyBoc2woKSBvciBoc2xhKClcclxuY29uc3QgaHNsUGFyZW50aGVzZXNNYXRjaGVyID0gL15oc2xhP1xcKFxccyooWzAtOS5dKylcXHMqLFxccyooWzAtOS5dKyUpXFxzKixcXHMqKFswLTkuXSslKSg/OlxccyosXFxzKihbMC05Ll0rKSk/XFxzKlxcKSQvaTtcclxuZnVuY3Rpb24gaHVlMnJnYihtMSwgbTIsIGgpIHtcclxuXHRpZiAoaCA8IDApIHtcclxuXHRcdGggKz0gMTtcclxuXHR9XHJcblx0aWYgKGggPiAxKSB7XHJcblx0XHRoIC09IDE7XHJcblx0fVxyXG5cdGlmIChoICogNiA8IDEpIHtcclxuXHRcdHJldHVybiBtMSArIChtMiAtIG0xKSAqIDYgKiBoO1xyXG5cdH1cclxuXHRpZiAoaCAqIDIgPCAxKSB7XHJcblx0XHRyZXR1cm4gbTI7XHJcblx0fVxyXG5cdGlmIChoICogMyA8IDIpIHtcclxuXHRcdHJldHVybiBtMSArIChtMiAtIG0xKSAqICgyIC8gMyAtIGgpICogNjtcclxuXHR9XHJcblx0cmV0dXJuIG0xO1xyXG59XHJcblxyXG5jbGFzcyBDb2xvciB7XHJcblx0Z3JlZW46IG51bWJlcjtcclxuXHRyZWQ6IG51bWJlcjtcclxuXHRibHVlOiBudW1iZXI7XHJcblx0Y29uc3RydWN0b3IocmVkID0gMS4wLCBncmVlbiA9IDEuMCwgYmx1ZSA9IDEuMCkge1xyXG5cdFx0LyoqXHJcblx0XHQgKiBUaGUgcmVkIGNvbXBvbmVudC5cclxuXHRcdCAqIEB0eXBlIHtOdW1iZXJ9XHJcblx0XHQgKiBAZGVmYXVsdCAxLjBcclxuXHRcdCAqL1xyXG5cdFx0dGhpcy5yZWQgPSByZWQ7XHJcblx0XHQvKipcclxuXHRcdCAqIFRoZSBncmVlbiBjb21wb25lbnQuXHJcblx0XHQgKiBAdHlwZSB7TnVtYmVyfVxyXG5cdFx0ICogQGRlZmF1bHQgMS4wXHJcblx0XHQgKi9cclxuXHRcdHRoaXMuZ3JlZW4gPSBncmVlbjtcclxuXHRcdC8qKlxyXG5cdFx0ICogVGhlIGJsdWUgY29tcG9uZW50LlxyXG5cdFx0ICogQHR5cGUge051bWJlcn1cclxuXHRcdCAqIEBkZWZhdWx0IDEuMFxyXG5cdFx0ICovXHJcblx0XHR0aGlzLmJsdWUgPSBibHVlO1xyXG5cdH1cclxuXHRzZXQodmFsdWU6IHN0cmluZyk6IENvbG9yIHtcclxuXHRcdGlmICh0eXBlb2YgdmFsdWUgPT09IFwic3RyaW5nXCIpIHtcclxuXHRcdFx0Q29sb3IuZnJvbUNzc0NvbG9yU3RyaW5nKHZhbHVlLCB0aGlzKTtcclxuXHRcdH1cclxuXHRcdHJldHVybiB0aGlzO1xyXG5cdH1cclxuXHR0b0FycmF5KCk6IG51bWJlcltdIHtcclxuXHRcdHJldHVybiBbdGhpcy5yZWQsIHRoaXMuZ3JlZW4sIHRoaXMuYmx1ZV07XHJcblx0fVxyXG5cclxuXHRjbG9uZShyZXN1bHQ6IENvbG9yKTogQ29sb3Ige1xyXG5cdFx0cmV0dXJuIENvbG9yLmNsb25lKHRoaXMsIHJlc3VsdCk7XHJcblx0fVxyXG5cclxuXHRlcXVhbHMob3RoZXI6IENvbG9yKTogYm9vbGVhbiB7XHJcblx0XHRyZXR1cm4gQ29sb3IuZXF1YWxzKHRoaXMsIG90aGVyKTtcclxuXHR9XHJcblxyXG5cdHRvQ3NzSGV4U3RyaW5nKCk6IHN0cmluZyB7XHJcblx0XHRsZXQgciA9IENvbG9yLmZsb2F0VG9CeXRlKHRoaXMucmVkKS50b1N0cmluZygxNik7XHJcblx0XHRpZiAoci5sZW5ndGggPCAyKSB7XHJcblx0XHRcdHIgPSBgMCR7cn1gO1xyXG5cdFx0fVxyXG5cdFx0bGV0IGcgPSBDb2xvci5mbG9hdFRvQnl0ZSh0aGlzLmdyZWVuKS50b1N0cmluZygxNik7XHJcblx0XHRpZiAoZy5sZW5ndGggPCAyKSB7XHJcblx0XHRcdGcgPSBgMCR7Z31gO1xyXG5cdFx0fVxyXG5cdFx0bGV0IGIgPSBDb2xvci5mbG9hdFRvQnl0ZSh0aGlzLmJsdWUpLnRvU3RyaW5nKDE2KTtcclxuXHRcdGlmIChiLmxlbmd0aCA8IDIpIHtcclxuXHRcdFx0YiA9IGAwJHtifWA7XHJcblx0XHR9XHJcblx0XHRyZXR1cm4gYCMke3J9JHtnfSR7Yn1gO1xyXG5cdH1cclxuXHJcblx0dG9CeXRlcyhyZXN1bHQ6IG51bWJlcltdKTogbnVtYmVyW10ge1xyXG5cdFx0Y29uc3QgcmVkID0gQ29sb3IuZmxvYXRUb0J5dGUodGhpcy5yZWQpO1xyXG5cdFx0Y29uc3QgZ3JlZW4gPSBDb2xvci5mbG9hdFRvQnl0ZSh0aGlzLmdyZWVuKTtcclxuXHRcdGNvbnN0IGJsdWUgPSBDb2xvci5mbG9hdFRvQnl0ZSh0aGlzLmJsdWUpO1xyXG5cclxuXHRcdGlmICghZGVmaW5lZChyZXN1bHQpKSB7XHJcblx0XHRcdHJldHVybiBbcmVkLCBncmVlbiwgYmx1ZV07XHJcblx0XHR9XHJcblx0XHRyZXN1bHRbMF0gPSByZWQ7XHJcblx0XHRyZXN1bHRbMV0gPSBncmVlbjtcclxuXHRcdHJlc3VsdFsyXSA9IGJsdWU7XHJcblx0XHRyZXR1cm4gcmVzdWx0O1xyXG5cdH1cclxuXHJcblx0c3RhdGljIGZyb21CeXRlcyhyZWQ6IG51bWJlciwgZ3JlZW46IG51bWJlciwgYmx1ZTogbnVtYmVyLCByZXN1bHQ6IENvbG9yKTogQ29sb3Ige1xyXG5cdFx0cmVkID0gQ29sb3IuYnl0ZVRvRmxvYXQoZGVmYXVsdFZhbHVlKHJlZCwgMjU1LjApKTtcclxuXHRcdGdyZWVuID0gQ29sb3IuYnl0ZVRvRmxvYXQoZGVmYXVsdFZhbHVlKGdyZWVuLCAyNTUuMCkpO1xyXG5cdFx0Ymx1ZSA9IENvbG9yLmJ5dGVUb0Zsb2F0KGRlZmF1bHRWYWx1ZShibHVlLCAyNTUuMCkpO1xyXG5cclxuXHRcdGlmICghZGVmaW5lZChyZXN1bHQpKSB7XHJcblx0XHRcdHJldHVybiBuZXcgQ29sb3IocmVkLCBncmVlbiwgYmx1ZSk7XHJcblx0XHR9XHJcblxyXG5cdFx0cmVzdWx0LnJlZCA9IHJlZDtcclxuXHRcdHJlc3VsdC5ncmVlbiA9IGdyZWVuO1xyXG5cdFx0cmVzdWx0LmJsdWUgPSBibHVlO1xyXG5cdFx0cmV0dXJuIHJlc3VsdDtcclxuXHR9XHJcblxyXG5cdHN0YXRpYyBmcm9tSHNsKGh1ZTogbnVtYmVyLCBzYXR1cmF0aW9uOiBudW1iZXIsIGxpZ2h0bmVzczogbnVtYmVyLCByZXN1bHQ6IENvbG9yKTogQ29sb3Ige1xyXG5cdFx0aHVlID0gZGVmYXVsdFZhbHVlKGh1ZSwgMC4wKSAlIDEuMDtcclxuXHRcdHNhdHVyYXRpb24gPSBkZWZhdWx0VmFsdWUoc2F0dXJhdGlvbiwgMC4wKTtcclxuXHRcdGxpZ2h0bmVzcyA9IGRlZmF1bHRWYWx1ZShsaWdodG5lc3MsIDAuMCk7XHJcblx0XHRsZXQgcmVkID0gbGlnaHRuZXNzO1xyXG5cdFx0bGV0IGdyZWVuID0gbGlnaHRuZXNzO1xyXG5cdFx0bGV0IGJsdWUgPSBsaWdodG5lc3M7XHJcblxyXG5cdFx0aWYgKHNhdHVyYXRpb24gIT09IDApIHtcclxuXHRcdFx0bGV0IG0yO1xyXG5cdFx0XHRpZiAobGlnaHRuZXNzIDwgMC41KSB7XHJcblx0XHRcdFx0bTIgPSBsaWdodG5lc3MgKiAoMSArIHNhdHVyYXRpb24pO1xyXG5cdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdG0yID0gbGlnaHRuZXNzICsgc2F0dXJhdGlvbiAtIGxpZ2h0bmVzcyAqIHNhdHVyYXRpb247XHJcblx0XHRcdH1cclxuXHJcblx0XHRcdGNvbnN0IG0xID0gMi4wICogbGlnaHRuZXNzIC0gbTI7XHJcblx0XHRcdHJlZCA9IGh1ZTJyZ2IobTEsIG0yLCBodWUgKyAxIC8gMyk7XHJcblx0XHRcdGdyZWVuID0gaHVlMnJnYihtMSwgbTIsIGh1ZSk7XHJcblx0XHRcdGJsdWUgPSBodWUycmdiKG0xLCBtMiwgaHVlIC0gMSAvIDMpO1xyXG5cdFx0fVxyXG5cclxuXHRcdGlmICghZGVmaW5lZChyZXN1bHQpKSB7XHJcblx0XHRcdHJldHVybiBuZXcgQ29sb3IocmVkLCBncmVlbiwgYmx1ZSk7XHJcblx0XHR9XHJcblxyXG5cdFx0cmVzdWx0LnJlZCA9IHJlZDtcclxuXHRcdHJlc3VsdC5ncmVlbiA9IGdyZWVuO1xyXG5cdFx0cmVzdWx0LmJsdWUgPSBibHVlO1xyXG5cdFx0cmV0dXJuIHJlc3VsdDtcclxuXHR9XHJcblxyXG5cdC8qKlxyXG5cdCAqIENyZWF0ZXMgYSByYW5kb20gY29sb3IgdXNpbmcgdGhlIHByb3ZpZGVkIG9wdGlvbnMuIEZvciByZXByb2R1Y2libGUgcmFuZG9tIGNvbG9ycywgeW91IHNob3VsZFxyXG5cdCAqIGNhbGwge0BsaW5rIEdNYXRoI3NldFJhbmRvbU51bWJlclNlZWR9IG9uY2UgYXQgdGhlIGJlZ2lubmluZyBvZiB5b3VyIGFwcGxpY2F0aW9uLlxyXG5cdCAqXHJcblx0ICogQHBhcmFtIHtPYmplY3R9IFtvcHRpb25zXSBPYmplY3Qgd2l0aCB0aGUgZm9sbG93aW5nIHByb3BlcnRpZXM6XHJcblx0ICogQHBhcmFtIHtOdW1iZXJ9IFtvcHRpb25zLnJlZF0gSWYgc3BlY2lmaWVkLCB0aGUgcmVkIGNvbXBvbmVudCB0byB1c2UgaW5zdGVhZCBvZiBhIHJhbmRvbWl6ZWQgdmFsdWUuXHJcblx0ICogQHBhcmFtIHtOdW1iZXJ9IFtvcHRpb25zLm1pbmltdW1SZWQ9MC4wXSBUaGUgbWF4aW11bSByZWQgdmFsdWUgdG8gZ2VuZXJhdGUgaWYgbm9uZSB3YXMgc3BlY2lmaWVkLlxyXG5cdCAqIEBwYXJhbSB7TnVtYmVyfSBbb3B0aW9ucy5tYXhpbXVtUmVkPTEuMF0gVGhlIG1pbmltdW0gcmVkIHZhbHVlIHRvIGdlbmVyYXRlIGlmIG5vbmUgd2FzIHNwZWNpZmllZC5cclxuXHQgKiBAcGFyYW0ge051bWJlcn0gW29wdGlvbnMuZ3JlZW5dIElmIHNwZWNpZmllZCwgdGhlIGdyZWVuIGNvbXBvbmVudCB0byB1c2UgaW5zdGVhZCBvZiBhIHJhbmRvbWl6ZWQgdmFsdWUuXHJcblx0ICogQHBhcmFtIHtOdW1iZXJ9IFtvcHRpb25zLm1pbmltdW1HcmVlbj0wLjBdIFRoZSBtYXhpbXVtIGdyZWVuIHZhbHVlIHRvIGdlbmVyYXRlIGlmIG5vbmUgd2FzIHNwZWNpZmllZC5cclxuXHQgKiBAcGFyYW0ge051bWJlcn0gW29wdGlvbnMubWF4aW11bUdyZWVuPTEuMF0gVGhlIG1pbmltdW0gZ3JlZW4gdmFsdWUgdG8gZ2VuZXJhdGUgaWYgbm9uZSB3YXMgc3BlY2lmaWVkLlxyXG5cdCAqIEBwYXJhbSB7TnVtYmVyfSBbb3B0aW9ucy5ibHVlXSBJZiBzcGVjaWZpZWQsIHRoZSBibHVlIGNvbXBvbmVudCB0byB1c2UgaW5zdGVhZCBvZiBhIHJhbmRvbWl6ZWQgdmFsdWUuXHJcblx0ICogQHBhcmFtIHtOdW1iZXJ9IFtvcHRpb25zLm1pbmltdW1CbHVlPTAuMF0gVGhlIG1heGltdW0gYmx1ZSB2YWx1ZSB0byBnZW5lcmF0ZSBpZiBub25lIHdhcyBzcGVjaWZpZWQuXHJcblx0ICogQHBhcmFtIHtOdW1iZXJ9IFtvcHRpb25zLm1heGltdW1CbHVlPTEuMF0gVGhlIG1pbmltdW0gYmx1ZSB2YWx1ZSB0byBnZW5lcmF0ZSBpZiBub25lIHdhcyBzcGVjaWZpZWQuXHJcblx0ICogQHBhcmFtIHtDb2xvcn0gW3Jlc3VsdF0gVGhlIG9iamVjdCB0byBzdG9yZSB0aGUgcmVzdWx0IGluLCBpZiB1bmRlZmluZWQgYSBuZXcgaW5zdGFuY2Ugd2lsbCBiZSBjcmVhdGVkLlxyXG5cdCAqIEByZXR1cm5zIHtDb2xvcn0gVGhlIG1vZGlmaWVkIHJlc3VsdCBwYXJhbWV0ZXIgb3IgYSBuZXcgaW5zdGFuY2UgaWYgcmVzdWx0IHdhcyB1bmRlZmluZWQuXHJcblx0ICpcclxuXHQgKiBAZXhhbXBsZVxyXG5cdCAqIC8vQ3JlYXRlIGEgY29tcGxldGVseSByYW5kb20gY29sb3JcclxuXHQgKiBjb25zdCBjb2xvciA9IENvbG9yLmZyb21SYW5kb20oKTtcclxuXHQgKlxyXG5cdCAqIC8vQ3JlYXRlIGEgcmFuZG9tIHNoYWRlIG9mIHllbGxvdy5cclxuXHQgKiBjb25zdCBjb2xvcjEgPSBDb2xvci5mcm9tUmFuZG9tKHtcclxuXHQgKiAgICAgcmVkIDogMS4wLFxyXG5cdCAqICAgICBncmVlbiA6IDEuMCxcclxuXHQgKiB9KTtcclxuXHQgKlxyXG5cdCAqIC8vQ3JlYXRlIGEgcmFuZG9tIGJyaWdodCBjb2xvci5cclxuXHQgKiBjb25zdCBjb2xvcjIgPSBDb2xvci5mcm9tUmFuZG9tKHtcclxuXHQgKiAgICAgbWluaW11bVJlZCA6IDAuNzUsXHJcblx0ICogICAgIG1pbmltdW1HcmVlbiA6IDAuNzUsXHJcblx0ICogICAgIG1pbmltdW1CbHVlIDogMC43NSxcclxuXHQgKiB9KTtcclxuXHQgKi9cclxuXHRzdGF0aWMgZnJvbVJhbmRvbShvcHRpb25zLCByZXN1bHQ6IENvbG9yKTogQ29sb3Ige1xyXG5cdFx0b3B0aW9ucyA9IGRlZmF1bHRWYWx1ZShvcHRpb25zLCBkZWZhdWx0VmFsdWUuRU1QVFlfT0JKRUNUKTtcclxuXHJcblx0XHRsZXQgcmVkID0gb3B0aW9ucy5yZWQ7XHJcblx0XHRpZiAoIWRlZmluZWQocmVkKSkge1xyXG5cdFx0XHRjb25zdCBtaW5pbXVtUmVkID0gZGVmYXVsdFZhbHVlKG9wdGlvbnMubWluaW11bVJlZCwgMCk7XHJcblx0XHRcdGNvbnN0IG1heGltdW1SZWQgPSBkZWZhdWx0VmFsdWUob3B0aW9ucy5tYXhpbXVtUmVkLCAxLjApO1xyXG5cclxuXHRcdFx0cmVkID0gbWluaW11bVJlZCArIEdNYXRoLm5leHRSYW5kb21OdW1iZXIoKSAqIChtYXhpbXVtUmVkIC0gbWluaW11bVJlZCk7XHJcblx0XHR9XHJcblxyXG5cdFx0bGV0IGdyZWVuID0gb3B0aW9ucy5ncmVlbjtcclxuXHRcdGlmICghZGVmaW5lZChncmVlbikpIHtcclxuXHRcdFx0Y29uc3QgbWluaW11bUdyZWVuID0gZGVmYXVsdFZhbHVlKG9wdGlvbnMubWluaW11bUdyZWVuLCAwKTtcclxuXHRcdFx0Y29uc3QgbWF4aW11bUdyZWVuID0gZGVmYXVsdFZhbHVlKG9wdGlvbnMubWF4aW11bUdyZWVuLCAxLjApO1xyXG5cclxuXHRcdFx0Z3JlZW4gPSBtaW5pbXVtR3JlZW4gKyBHTWF0aC5uZXh0UmFuZG9tTnVtYmVyKCkgKiAobWF4aW11bUdyZWVuIC0gbWluaW11bUdyZWVuKTtcclxuXHRcdH1cclxuXHJcblx0XHRsZXQgYmx1ZSA9IG9wdGlvbnMuYmx1ZTtcclxuXHRcdGlmICghZGVmaW5lZChibHVlKSkge1xyXG5cdFx0XHRjb25zdCBtaW5pbXVtQmx1ZSA9IGRlZmF1bHRWYWx1ZShvcHRpb25zLm1pbmltdW1CbHVlLCAwKTtcclxuXHRcdFx0Y29uc3QgbWF4aW11bUJsdWUgPSBkZWZhdWx0VmFsdWUob3B0aW9ucy5tYXhpbXVtQmx1ZSwgMS4wKTtcclxuXHJcblx0XHRcdGJsdWUgPSBtaW5pbXVtQmx1ZSArIEdNYXRoLm5leHRSYW5kb21OdW1iZXIoKSAqIChtYXhpbXVtQmx1ZSAtIG1pbmltdW1CbHVlKTtcclxuXHRcdH1cclxuXHRcdGlmICghZGVmaW5lZChyZXN1bHQpKSB7XHJcblx0XHRcdHJldHVybiBuZXcgQ29sb3IocmVkLCBncmVlbiwgYmx1ZSk7XHJcblx0XHR9XHJcblxyXG5cdFx0cmVzdWx0LnJlZCA9IHJlZDtcclxuXHRcdHJlc3VsdC5ncmVlbiA9IGdyZWVuO1xyXG5cdFx0cmVzdWx0LmJsdWUgPSBibHVlO1xyXG5cdFx0cmV0dXJuIHJlc3VsdDtcclxuXHR9XHJcblxyXG5cdHN0YXRpYyBmcm9tQ3NzQ29sb3JTdHJpbmcoY29sb3I6IHN0cmluZywgcmVzdWx0OiBDb2xvciA9IG5ldyBDb2xvcigpKTogQ29sb3Ige1xyXG5cdFx0Ly8gUmVtb3ZlIGFsbCB3aGl0ZXNwYWNlcyBmcm9tIHRoZSBjb2xvciBzdHJpbmdcclxuXHRcdGNvbG9yID0gY29sb3IucmVwbGFjZSgvXFxzL2csIFwiXCIpO1xyXG5cclxuXHRcdGNvbnN0IG5hbWVkQ29sb3IgPSBDb2xvcltjb2xvci50b1VwcGVyQ2FzZSgpXTtcclxuXHRcdGlmIChkZWZpbmVkKG5hbWVkQ29sb3IpKSB7XHJcblx0XHRcdENvbG9yLmNsb25lKG5hbWVkQ29sb3IsIHJlc3VsdCk7XHJcblx0XHRcdHJldHVybiByZXN1bHQ7XHJcblx0XHR9XHJcblxyXG5cdFx0bGV0IG1hdGNoZXMgPSByZ2JhTWF0Y2hlci5leGVjKGNvbG9yKTtcclxuXHRcdGlmIChtYXRjaGVzICE9PSBudWxsKSB7XHJcblx0XHRcdHJlc3VsdC5yZWQgPSBwYXJzZUludChtYXRjaGVzWzFdLCAxNikgLyAxNTtcclxuXHRcdFx0cmVzdWx0LmdyZWVuID0gcGFyc2VJbnQobWF0Y2hlc1syXSwgMTYpIC8gMTUuMDtcclxuXHRcdFx0cmVzdWx0LmJsdWUgPSBwYXJzZUludChtYXRjaGVzWzNdLCAxNikgLyAxNS4wO1xyXG5cdFx0XHRyZXR1cm4gcmVzdWx0O1xyXG5cdFx0fVxyXG5cclxuXHRcdG1hdGNoZXMgPSBycmdnYmJhYU1hdGNoZXIuZXhlYyhjb2xvcik7XHJcblx0XHRpZiAobWF0Y2hlcyAhPT0gbnVsbCkge1xyXG5cdFx0XHRyZXN1bHQucmVkID0gcGFyc2VJbnQobWF0Y2hlc1sxXSwgMTYpIC8gMjU1LjA7XHJcblx0XHRcdHJlc3VsdC5ncmVlbiA9IHBhcnNlSW50KG1hdGNoZXNbMl0sIDE2KSAvIDI1NS4wO1xyXG5cdFx0XHRyZXN1bHQuYmx1ZSA9IHBhcnNlSW50KG1hdGNoZXNbM10sIDE2KSAvIDI1NS4wO1xyXG5cdFx0XHRyZXR1cm4gcmVzdWx0O1xyXG5cdFx0fVxyXG5cclxuXHRcdG1hdGNoZXMgPSByZ2JQYXJlbnRoZXNlc01hdGNoZXIuZXhlYyhjb2xvcik7XHJcblx0XHRpZiAobWF0Y2hlcyAhPT0gbnVsbCkge1xyXG5cdFx0XHRyZXN1bHQucmVkID0gcGFyc2VGbG9hdChtYXRjaGVzWzFdKSAvIChcIiVcIiA9PT0gbWF0Y2hlc1sxXS5zdWJzdHIoLTEpID8gMTAwLjAgOiAyNTUuMCk7XHJcblx0XHRcdHJlc3VsdC5ncmVlbiA9IHBhcnNlRmxvYXQobWF0Y2hlc1syXSkgLyAoXCIlXCIgPT09IG1hdGNoZXNbMl0uc3Vic3RyKC0xKSA/IDEwMC4wIDogMjU1LjApO1xyXG5cdFx0XHRyZXN1bHQuYmx1ZSA9IHBhcnNlRmxvYXQobWF0Y2hlc1szXSkgLyAoXCIlXCIgPT09IG1hdGNoZXNbM10uc3Vic3RyKC0xKSA/IDEwMC4wIDogMjU1LjApO1xyXG5cdFx0XHRyZXR1cm4gcmVzdWx0O1xyXG5cdFx0fVxyXG5cclxuXHRcdG1hdGNoZXMgPSBoc2xQYXJlbnRoZXNlc01hdGNoZXIuZXhlYyhjb2xvcik7XHJcblx0XHRpZiAobWF0Y2hlcyAhPT0gbnVsbCkge1xyXG5cdFx0XHRyZXR1cm4gQ29sb3IuZnJvbUhzbChcclxuXHRcdFx0XHRwYXJzZUZsb2F0KG1hdGNoZXNbMV0pIC8gMzYwLjAsXHJcblx0XHRcdFx0cGFyc2VGbG9hdChtYXRjaGVzWzJdKSAvIDEwMC4wLFxyXG5cdFx0XHRcdHBhcnNlRmxvYXQobWF0Y2hlc1szXSkgLyAxMDAuMCxcclxuXHRcdFx0XHRyZXN1bHRcclxuXHRcdFx0KTtcclxuXHRcdH1cclxuXHJcblx0XHRyZXN1bHQgPSB1bmRlZmluZWQ7XHJcblx0XHRyZXR1cm4gcmVzdWx0O1xyXG5cdH1cclxuXHJcblx0c3RhdGljIGJ5dGVUb0Zsb2F0KHZhbHVlOiBudW1iZXIpOiBudW1iZXIge1xyXG5cdFx0cmV0dXJuIHZhbHVlIC8gMjU1LjA7XHJcblx0fVxyXG5cclxuXHRzdGF0aWMgZmxvYXRUb0J5dGUodmFsdWU6IG51bWJlcik6IG51bWJlciB7XHJcblx0XHRyZXR1cm4gdmFsdWUgPT09IDEuMCA/IDI1NS4wIDogKHZhbHVlICogMjU2LjApIHwgMDtcclxuXHR9XHJcblxyXG5cdHN0YXRpYyBjbG9uZShjb2xvcjogQ29sb3IsIHJlc3VsdDogQ29sb3IpOiBDb2xvciB7XHJcblx0XHRpZiAoIWRlZmluZWQoY29sb3IpKSB7XHJcblx0XHRcdHJldHVybiB1bmRlZmluZWQ7XHJcblx0XHR9XHJcblx0XHRpZiAoIWRlZmluZWQocmVzdWx0KSkge1xyXG5cdFx0XHRyZXR1cm4gbmV3IENvbG9yKGNvbG9yLnJlZCwgY29sb3IuZ3JlZW4sIGNvbG9yLmJsdWUpO1xyXG5cdFx0fVxyXG5cdFx0cmVzdWx0LnJlZCA9IGNvbG9yLnJlZDtcclxuXHRcdHJlc3VsdC5ncmVlbiA9IGNvbG9yLmdyZWVuO1xyXG5cdFx0cmVzdWx0LmJsdWUgPSBjb2xvci5ibHVlO1xyXG5cdFx0cmV0dXJuIHJlc3VsdDtcclxuXHR9XHJcblxyXG5cdHN0YXRpYyBlcXVhbHMobGVmdDogQ29sb3IsIHJpZ2h0OiBDb2xvcik6IGJvb2xlYW4ge1xyXG5cdFx0cmV0dXJuIChcclxuXHRcdFx0bGVmdCA9PT0gcmlnaHQgfHwgLy9cclxuXHRcdFx0KGRlZmluZWQobGVmdCkgJiYgLy9cclxuXHRcdFx0XHRkZWZpbmVkKHJpZ2h0KSAmJiAvL1xyXG5cdFx0XHRcdGxlZnQucmVkID09PSByaWdodC5yZWQgJiYgLy9cclxuXHRcdFx0XHRsZWZ0LmdyZWVuID09PSByaWdodC5ncmVlbiAmJiAvL1xyXG5cdFx0XHRcdGxlZnQuYmx1ZSA9PT0gcmlnaHQuYmx1ZSlcclxuXHRcdCk7XHJcblx0fVxyXG5cclxuXHQvKipcclxuXHQgKiBAcHJpdmF0ZVxyXG5cdCAqL1xyXG5cdHN0YXRpYyBlcXVhbHNBcnJheShjb2xvcjogQ29sb3IsIGFycmF5OiBudW1iZXJbXSwgb2Zmc2V0OiBudW1iZXIpOiBib29sZWFuIHtcclxuXHRcdHJldHVybiBjb2xvci5yZWQgPT09IGFycmF5W29mZnNldF0gJiYgY29sb3IuZ3JlZW4gPT09IGFycmF5W29mZnNldCArIDFdICYmIGNvbG9yLmJsdWUgPT09IGFycmF5W29mZnNldCArIDJdO1xyXG5cdH1cclxufVxyXG5leHBvcnQgZGVmYXVsdCBDb2xvcjtcclxuIiwiaW1wb3J0IGRlZmF1bHRWYWx1ZSBmcm9tIFwiLi4vdXRpbHMvZGVmYXVsdFZhbHVlXCI7XHJcbmltcG9ydCBkZWZpbmVkIGZyb20gXCIuLi91dGlscy9kZWZpbmVkXCI7XHJcbmltcG9ydCBWZWN0b3IyIGZyb20gXCIuL1ZlY3RvcjJcIjtcclxuXHJcbi8qKlxyXG4gKiBBIDJ4MiBtYXRyaXgsIGluZGV4YWJsZSBhcyBhIGNvbHVtbi1tYWpvciBvcmRlciBhcnJheS5cclxuICogQHBhcmFtIHtOdW1iZXJ9IFtjb2x1bW4wUm93MD0wLjBdIFRoZSB2YWx1ZSBmb3IgY29sdW1uIDAsIHJvdyAwLlxyXG4gKiBAcGFyYW0ge051bWJlcn0gW2NvbHVtbjFSb3cwPTAuMF0gVGhlIHZhbHVlIGZvciBjb2x1bW4gMSwgcm93IDAuXHJcbiAqIEBwYXJhbSB7TnVtYmVyfSBbY29sdW1uMFJvdzE9MC4wXSBUaGUgdmFsdWUgZm9yIGNvbHVtbiAwLCByb3cgMS5cclxuICogQHBhcmFtIHtOdW1iZXJ9IFtjb2x1bW4xUm93MT0wLjBdIFRoZSB2YWx1ZSBmb3IgY29sdW1uIDEsIHJvdyAxLlxyXG4gKi9cclxuY2xhc3MgTWF0cml4MiB7XHJcblx0Y29uc3RydWN0b3IoY29sdW1uMFJvdzAgPSAwLCBjb2x1bW4xUm93MCA9IDAsIGNvbHVtbjBSb3cxID0gMCwgY29sdW1uMVJvdzEgPSAwKSB7XHJcblx0XHR0aGlzWzBdID0gY29sdW1uMFJvdzA7XHJcblx0XHR0aGlzWzFdID0gY29sdW1uMFJvdzE7XHJcblx0XHR0aGlzWzJdID0gY29sdW1uMVJvdzA7XHJcblx0XHR0aGlzWzNdID0gY29sdW1uMVJvdzE7XHJcblx0fVxyXG5cclxuXHRzdGF0aWMgY2xvbmUobWF0cml4OiBNYXRyaXgyIHwgbnVtYmVyW10sIHJlc3VsdDogTWF0cml4Mik6IE1hdHJpeDIge1xyXG5cdFx0aWYgKCFkZWZpbmVkKG1hdHJpeCkpIHtcclxuXHRcdFx0cmV0dXJuIHVuZGVmaW5lZDtcclxuXHRcdH1cclxuXHRcdGlmICghZGVmaW5lZChyZXN1bHQpKSB7XHJcblx0XHRcdHJldHVybiBuZXcgTWF0cml4MihtYXRyaXhbMF0sIG1hdHJpeFsyXSwgbWF0cml4WzFdLCBtYXRyaXhbM10pO1xyXG5cdFx0fVxyXG5cdFx0cmVzdWx0WzBdID0gbWF0cml4WzBdO1xyXG5cdFx0cmVzdWx0WzFdID0gbWF0cml4WzFdO1xyXG5cdFx0cmVzdWx0WzJdID0gbWF0cml4WzJdO1xyXG5cdFx0cmVzdWx0WzNdID0gbWF0cml4WzNdO1xyXG5cdFx0cmV0dXJuIHJlc3VsdDtcclxuXHR9XHJcblxyXG5cdHN0YXRpYyBmcm9tQ29sdW1uTWFqb3JBcnJheSh2YWx1ZXM6IG51bWJlcltdLCByZXN1bHQ6IE1hdHJpeDIpOiBNYXRyaXgyIHtcclxuXHRcdHJldHVybiBNYXRyaXgyLmNsb25lKHZhbHVlcywgcmVzdWx0KTtcclxuXHR9XHJcblxyXG5cdHN0YXRpYyBmcm9tUm93TWFqb3JBcnJheSh2YWx1ZXM6IG51bWJlciwgcmVzdWx0OiBNYXRyaXgyKTogTWF0cml4MiB7XHJcblx0XHRpZiAoIWRlZmluZWQocmVzdWx0KSkge1xyXG5cdFx0XHRyZXR1cm4gbmV3IE1hdHJpeDIodmFsdWVzWzBdLCB2YWx1ZXNbMV0sIHZhbHVlc1syXSwgdmFsdWVzWzNdKTtcclxuXHRcdH1cclxuXHRcdHJlc3VsdFswXSA9IHZhbHVlc1swXTtcclxuXHRcdHJlc3VsdFsxXSA9IHZhbHVlc1syXTtcclxuXHRcdHJlc3VsdFsyXSA9IHZhbHVlc1sxXTtcclxuXHRcdHJlc3VsdFszXSA9IHZhbHVlc1szXTtcclxuXHRcdHJldHVybiByZXN1bHQ7XHJcblx0fVxyXG5cclxuXHRzdGF0aWMgZnJvbVNjYWxlKHNjYWxlOiBWZWN0b3IyLCByZXN1bHQ6IE1hdHJpeDIpOiBNYXRyaXgyIHtcclxuXHRcdGlmICghZGVmaW5lZChyZXN1bHQpKSB7XHJcblx0XHRcdHJldHVybiBuZXcgTWF0cml4MihzY2FsZS54LCAwLjAsIDAuMCwgc2NhbGUueSk7XHJcblx0XHR9XHJcblxyXG5cdFx0cmVzdWx0WzBdID0gc2NhbGUueDtcclxuXHRcdHJlc3VsdFsxXSA9IDAuMDtcclxuXHRcdHJlc3VsdFsyXSA9IDAuMDtcclxuXHRcdHJlc3VsdFszXSA9IHNjYWxlLnk7XHJcblx0XHRyZXR1cm4gcmVzdWx0O1xyXG5cdH1cclxuXHJcblx0c3RhdGljIGZyb21Sb3RhdGlvbihhbmdsZTogbnVtYmVyLCByZXN1bHQ6IE1hdHJpeDIpOiBNYXRyaXgyIHtcclxuXHRcdGNvbnN0IGNvc0FuZ2xlID0gTWF0aC5jb3MoYW5nbGUpO1xyXG5cdFx0Y29uc3Qgc2luQW5nbGUgPSBNYXRoLnNpbihhbmdsZSk7XHJcblxyXG5cdFx0aWYgKCFkZWZpbmVkKHJlc3VsdCkpIHtcclxuXHRcdFx0cmV0dXJuIG5ldyBNYXRyaXgyKGNvc0FuZ2xlLCAtc2luQW5nbGUsIHNpbkFuZ2xlLCBjb3NBbmdsZSk7XHJcblx0XHR9XHJcblx0XHRyZXN1bHRbMF0gPSBjb3NBbmdsZTtcclxuXHRcdHJlc3VsdFsxXSA9IHNpbkFuZ2xlO1xyXG5cdFx0cmVzdWx0WzJdID0gLXNpbkFuZ2xlO1xyXG5cdFx0cmVzdWx0WzNdID0gY29zQW5nbGU7XHJcblx0XHRyZXR1cm4gcmVzdWx0O1xyXG5cdH1cclxuXHR0b0FycmF5KCkge1xyXG5cdFx0Y29uc3QgcmVzdWx0ID0gW107XHJcblx0XHRNYXRyaXgyLnRvQXJyYXkodGhpcywgcmVzdWx0KTtcclxuXHRcdHJldHVybiByZXN1bHQ7XHJcblx0fVxyXG5cclxuXHRzdGF0aWMgdG9BcnJheShtYXRyaXg6IE1hdHJpeDIsIHJlc3VsdDogbnVtYmVyW10pOiBudW1iZXJbXSB7XHJcblx0XHRpZiAoIWRlZmluZWQocmVzdWx0KSkge1xyXG5cdFx0XHRyZXR1cm4gW21hdHJpeFswXSwgbWF0cml4WzFdLCBtYXRyaXhbMl0sIG1hdHJpeFszXV07XHJcblx0XHR9XHJcblx0XHRyZXN1bHRbMF0gPSBtYXRyaXhbMF07XHJcblx0XHRyZXN1bHRbMV0gPSBtYXRyaXhbMV07XHJcblx0XHRyZXN1bHRbMl0gPSBtYXRyaXhbMl07XHJcblx0XHRyZXN1bHRbM10gPSBtYXRyaXhbM107XHJcblx0XHRyZXR1cm4gcmVzdWx0O1xyXG5cdH1cclxuXHJcblx0c3RhdGljIGdldEVsZW1lbnRJbmRleChjb2x1bW46IG51bWJlciwgcm93OiBudW1iZXIpOiBudW1iZXIge1xyXG5cdFx0cmV0dXJuIGNvbHVtbiAqIDIgKyByb3c7XHJcblx0fVxyXG5cclxuXHRzdGF0aWMgZ2V0Q29sdW1uKG1hdHJpeDogTWF0cml4MiwgaW5kZXg6IG51bWJlciwgcmVzdWx0OiBWZWN0b3IyKTogVmVjdG9yMiB7XHJcblx0XHRjb25zdCBzdGFydEluZGV4ID0gaW5kZXggKiAyO1xyXG5cdFx0Y29uc3QgeCA9IG1hdHJpeFtzdGFydEluZGV4XTtcclxuXHRcdGNvbnN0IHkgPSBtYXRyaXhbc3RhcnRJbmRleCArIDFdO1xyXG5cclxuXHRcdHJlc3VsdC54ID0geDtcclxuXHRcdHJlc3VsdC55ID0geTtcclxuXHRcdHJldHVybiByZXN1bHQ7XHJcblx0fVxyXG5cclxuXHRzdGF0aWMgc2V0Q29sdW1uKG1hdHJpeDogTWF0cml4MiwgaW5kZXg6IG51bWJlciwgY2FydGVzaWFuOiBWZWN0b3IyLCByZXN1bHQ6IE1hdHJpeDIpOiBNYXRyaXgyIHtcclxuXHRcdHJlc3VsdCA9IE1hdHJpeDIuY2xvbmUobWF0cml4LCByZXN1bHQpO1xyXG5cdFx0Y29uc3Qgc3RhcnRJbmRleCA9IGluZGV4ICogMjtcclxuXHRcdHJlc3VsdFtzdGFydEluZGV4XSA9IGNhcnRlc2lhbi54O1xyXG5cdFx0cmVzdWx0W3N0YXJ0SW5kZXggKyAxXSA9IGNhcnRlc2lhbi55O1xyXG5cdFx0cmV0dXJuIHJlc3VsdDtcclxuXHR9XHJcblxyXG5cdHN0YXRpYyBnZXRSb3cobWF0cml4OiBNYXRyaXgyLCBpbmRleDogbnVtYmVyLCByZXN1bHQ6IFZlY3RvcjIpOiBWZWN0b3IyIHtcclxuXHRcdGNvbnN0IHggPSBtYXRyaXhbaW5kZXhdO1xyXG5cdFx0Y29uc3QgeSA9IG1hdHJpeFtpbmRleCArIDJdO1xyXG5cclxuXHRcdHJlc3VsdC54ID0geDtcclxuXHRcdHJlc3VsdC55ID0geTtcclxuXHRcdHJldHVybiByZXN1bHQ7XHJcblx0fVxyXG5cclxuXHRzdGF0aWMgc2V0Um93KG1hdHJpeDogTWF0cml4MiwgaW5kZXg6IG51bWJlciwgY2FydGVzaWFuOiBWZWN0b3IyLCByZXN1bHQ6IE1hdHJpeDIpOiBNYXRyaXgyIHtcclxuXHRcdHJlc3VsdCA9IE1hdHJpeDIuY2xvbmUobWF0cml4LCByZXN1bHQpO1xyXG5cdFx0cmVzdWx0W2luZGV4XSA9IGNhcnRlc2lhbi54O1xyXG5cdFx0cmVzdWx0W2luZGV4ICsgMl0gPSBjYXJ0ZXNpYW4ueTtcclxuXHRcdHJldHVybiByZXN1bHQ7XHJcblx0fVxyXG5cclxuXHRzdGF0aWMgc2V0U2NhbGUobWF0cml4OiBNYXRyaXgyLCBzY2FsZTogVmVjdG9yMiwgcmVzdWx0OiBNYXRyaXgyKTogTWF0cml4MiB7XHJcblx0XHRjb25zdCBleGlzdGluZ1NjYWxlID0gTWF0cml4Mi5nZXRTY2FsZShtYXRyaXgsIHNjYWxlU2NyYXRjaDEpO1xyXG5cdFx0Y29uc3Qgc2NhbGVSYXRpb1ggPSBzY2FsZS54IC8gZXhpc3RpbmdTY2FsZS54O1xyXG5cdFx0Y29uc3Qgc2NhbGVSYXRpb1kgPSBzY2FsZS55IC8gZXhpc3RpbmdTY2FsZS55O1xyXG5cclxuXHRcdHJlc3VsdFswXSA9IG1hdHJpeFswXSAqIHNjYWxlUmF0aW9YO1xyXG5cdFx0cmVzdWx0WzFdID0gbWF0cml4WzFdICogc2NhbGVSYXRpb1g7XHJcblx0XHRyZXN1bHRbMl0gPSBtYXRyaXhbMl0gKiBzY2FsZVJhdGlvWTtcclxuXHRcdHJlc3VsdFszXSA9IG1hdHJpeFszXSAqIHNjYWxlUmF0aW9ZO1xyXG5cclxuXHRcdHJldHVybiByZXN1bHQ7XHJcblx0fVxyXG5cclxuXHRzdGF0aWMgZ2V0U2NhbGUobWF0cml4OiBNYXRyaXgyLCByZXN1bHQ6IFZlY3RvcjIpOiBWZWN0b3IyIHtcclxuXHRcdHJlc3VsdC54ID0gVmVjdG9yMi5tYWduaXR1ZGUoVmVjdG9yMi5mcm9tRWxlbWVudHMobWF0cml4WzBdLCBtYXRyaXhbMV0sIHNjcmF0Y2hDb2x1bW4pKTtcclxuXHRcdHJlc3VsdC55ID0gVmVjdG9yMi5tYWduaXR1ZGUoVmVjdG9yMi5mcm9tRWxlbWVudHMobWF0cml4WzJdLCBtYXRyaXhbM10sIHNjcmF0Y2hDb2x1bW4pKTtcclxuXHRcdHJldHVybiByZXN1bHQ7XHJcblx0fVxyXG5cclxuXHRzdGF0aWMgZ2V0TWF4aW11bVNjYWxlKG1hdHJpeDogTWF0cml4Mik6IG51bWJlciB7XHJcblx0XHRNYXRyaXgyLmdldFNjYWxlKG1hdHJpeCwgc2NhbGVTY3JhdGNoMyk7XHJcblx0XHRyZXR1cm4gVmVjdG9yMi5tYXhpbXVtQ29tcG9uZW50KHNjYWxlU2NyYXRjaDMpO1xyXG5cdH1cclxuXHJcblx0c3RhdGljIHNldFJvdGF0aW9uKG1hdHJpeDogTWF0cml4Miwgcm90YXRpb246IE1hdHJpeDIsIHJlc3VsdDogTWF0cml4Mik6IE1hdHJpeDIge1xyXG5cdFx0Y29uc3Qgc2NhbGUgPSBNYXRyaXgyLmdldFNjYWxlKG1hdHJpeCwgc2NhbGVTY3JhdGNoNCk7XHJcblxyXG5cdFx0cmVzdWx0WzBdID0gcm90YXRpb25bMF0gKiBzY2FsZS54O1xyXG5cdFx0cmVzdWx0WzFdID0gcm90YXRpb25bMV0gKiBzY2FsZS54O1xyXG5cdFx0cmVzdWx0WzJdID0gcm90YXRpb25bMl0gKiBzY2FsZS55O1xyXG5cdFx0cmVzdWx0WzNdID0gcm90YXRpb25bM10gKiBzY2FsZS55O1xyXG5cclxuXHRcdHJldHVybiByZXN1bHQ7XHJcblx0fVxyXG5cclxuXHRzdGF0aWMgZ2V0Um90YXRpb24obWF0cml4OiBNYXRyaXgyLCByZXN1bHQ6IE1hdHJpeDIpOiBNYXRyaXgyIHtcclxuXHRcdGNvbnN0IHNjYWxlID0gTWF0cml4Mi5nZXRTY2FsZShtYXRyaXgsIHNjYWxlU2NyYXRjaDUpO1xyXG5cclxuXHRcdHJlc3VsdFswXSA9IG1hdHJpeFswXSAvIHNjYWxlLng7XHJcblx0XHRyZXN1bHRbMV0gPSBtYXRyaXhbMV0gLyBzY2FsZS54O1xyXG5cdFx0cmVzdWx0WzJdID0gbWF0cml4WzJdIC8gc2NhbGUueTtcclxuXHRcdHJlc3VsdFszXSA9IG1hdHJpeFszXSAvIHNjYWxlLnk7XHJcblxyXG5cdFx0cmV0dXJuIHJlc3VsdDtcclxuXHR9XHJcblxyXG5cdHN0YXRpYyBtdWx0aXBseShsZWZ0OiBNYXRyaXgyLCByaWdodDogTWF0cml4MiwgcmVzdWx0OiBNYXRyaXgyKTogTWF0cml4MiB7XHJcblx0XHRjb25zdCBjb2x1bW4wUm93MCA9IGxlZnRbMF0gKiByaWdodFswXSArIGxlZnRbMl0gKiByaWdodFsxXTtcclxuXHRcdGNvbnN0IGNvbHVtbjFSb3cwID0gbGVmdFswXSAqIHJpZ2h0WzJdICsgbGVmdFsyXSAqIHJpZ2h0WzNdO1xyXG5cdFx0Y29uc3QgY29sdW1uMFJvdzEgPSBsZWZ0WzFdICogcmlnaHRbMF0gKyBsZWZ0WzNdICogcmlnaHRbMV07XHJcblx0XHRjb25zdCBjb2x1bW4xUm93MSA9IGxlZnRbMV0gKiByaWdodFsyXSArIGxlZnRbM10gKiByaWdodFszXTtcclxuXHJcblx0XHRyZXN1bHRbMF0gPSBjb2x1bW4wUm93MDtcclxuXHRcdHJlc3VsdFsxXSA9IGNvbHVtbjBSb3cxO1xyXG5cdFx0cmVzdWx0WzJdID0gY29sdW1uMVJvdzA7XHJcblx0XHRyZXN1bHRbM10gPSBjb2x1bW4xUm93MTtcclxuXHRcdHJldHVybiByZXN1bHQ7XHJcblx0fVxyXG5cclxuXHRzdGF0aWMgYWRkKGxlZnQ6IE1hdHJpeDIsIHJpZ2h0OiBNYXRyaXgyLCByZXN1bHQ6IE1hdHJpeDIpIHtcclxuXHRcdHJlc3VsdFswXSA9IGxlZnRbMF0gKyByaWdodFswXTtcclxuXHRcdHJlc3VsdFsxXSA9IGxlZnRbMV0gKyByaWdodFsxXTtcclxuXHRcdHJlc3VsdFsyXSA9IGxlZnRbMl0gKyByaWdodFsyXTtcclxuXHRcdHJlc3VsdFszXSA9IGxlZnRbM10gKyByaWdodFszXTtcclxuXHRcdHJldHVybiByZXN1bHQ7XHJcblx0fVxyXG5cclxuXHRzdGF0aWMgc3VidHJhY3QobGVmdDogTWF0cml4MiwgcmlnaHQ6IE1hdHJpeDIsIHJlc3VsdDogTWF0cml4Mik6IE1hdHJpeDIge1xyXG5cdFx0cmVzdWx0WzBdID0gbGVmdFswXSAtIHJpZ2h0WzBdO1xyXG5cdFx0cmVzdWx0WzFdID0gbGVmdFsxXSAtIHJpZ2h0WzFdO1xyXG5cdFx0cmVzdWx0WzJdID0gbGVmdFsyXSAtIHJpZ2h0WzJdO1xyXG5cdFx0cmVzdWx0WzNdID0gbGVmdFszXSAtIHJpZ2h0WzNdO1xyXG5cdFx0cmV0dXJuIHJlc3VsdDtcclxuXHR9XHJcblxyXG5cdHN0YXRpYyBtdWx0aXBseUJ5VmVjdG9yKG1hdHJpeDogTWF0cml4MiwgY2FydGVzaWFuOiBWZWN0b3IyLCByZXN1bHQ6IFZlY3RvcjIpOiBWZWN0b3IyIHtcclxuXHRcdGNvbnN0IHggPSBtYXRyaXhbMF0gKiBjYXJ0ZXNpYW4ueCArIG1hdHJpeFsyXSAqIGNhcnRlc2lhbi55O1xyXG5cdFx0Y29uc3QgeSA9IG1hdHJpeFsxXSAqIGNhcnRlc2lhbi54ICsgbWF0cml4WzNdICogY2FydGVzaWFuLnk7XHJcblxyXG5cdFx0cmVzdWx0LnggPSB4O1xyXG5cdFx0cmVzdWx0LnkgPSB5O1xyXG5cdFx0cmV0dXJuIHJlc3VsdDtcclxuXHR9XHJcblxyXG5cdHN0YXRpYyBtdWx0aXBseUJ5U2NhbGFyKG1hdHJpeDogTWF0cml4Miwgc2NhbGFyOiBudW1iZXIsIHJlc3VsdDogTWF0cml4Mik6IE1hdHJpeDIge1xyXG5cdFx0cmVzdWx0WzBdID0gbWF0cml4WzBdICogc2NhbGFyO1xyXG5cdFx0cmVzdWx0WzFdID0gbWF0cml4WzFdICogc2NhbGFyO1xyXG5cdFx0cmVzdWx0WzJdID0gbWF0cml4WzJdICogc2NhbGFyO1xyXG5cdFx0cmVzdWx0WzNdID0gbWF0cml4WzNdICogc2NhbGFyO1xyXG5cdFx0cmV0dXJuIHJlc3VsdDtcclxuXHR9XHJcblxyXG5cdHN0YXRpYyBtdWx0aXBseUJ5U2NhbGUobWF0cml4OiBNYXRyaXgyLCBzY2FsZTogVmVjdG9yMiwgcmVzdWx0OiBNYXRyaXgyKTogTWF0cml4MiB7XHJcblx0XHRyZXN1bHRbMF0gPSBtYXRyaXhbMF0gKiBzY2FsZS54O1xyXG5cdFx0cmVzdWx0WzFdID0gbWF0cml4WzFdICogc2NhbGUueDtcclxuXHRcdHJlc3VsdFsyXSA9IG1hdHJpeFsyXSAqIHNjYWxlLnk7XHJcblx0XHRyZXN1bHRbM10gPSBtYXRyaXhbM10gKiBzY2FsZS55O1xyXG5cclxuXHRcdHJldHVybiByZXN1bHQ7XHJcblx0fVxyXG5cclxuXHRzdGF0aWMgbmVnYXRlKG1hdHJpeDogTWF0cml4MiwgcmVzdWx0OiBNYXRyaXgyKTogTWF0cml4MiB7XHJcblx0XHRyZXN1bHRbMF0gPSAtbWF0cml4WzBdO1xyXG5cdFx0cmVzdWx0WzFdID0gLW1hdHJpeFsxXTtcclxuXHRcdHJlc3VsdFsyXSA9IC1tYXRyaXhbMl07XHJcblx0XHRyZXN1bHRbM10gPSAtbWF0cml4WzNdO1xyXG5cdFx0cmV0dXJuIHJlc3VsdDtcclxuXHR9XHJcblxyXG5cdHN0YXRpYyB0cmFuc3Bvc2UobWF0cml4OiBNYXRyaXgyLCByZXN1bHQ6IE1hdHJpeDIpOiBNYXRyaXgyIHtcclxuXHRcdGNvbnN0IGNvbHVtbjBSb3cwID0gbWF0cml4WzBdO1xyXG5cdFx0Y29uc3QgY29sdW1uMFJvdzEgPSBtYXRyaXhbMl07XHJcblx0XHRjb25zdCBjb2x1bW4xUm93MCA9IG1hdHJpeFsxXTtcclxuXHRcdGNvbnN0IGNvbHVtbjFSb3cxID0gbWF0cml4WzNdO1xyXG5cclxuXHRcdHJlc3VsdFswXSA9IGNvbHVtbjBSb3cwO1xyXG5cdFx0cmVzdWx0WzFdID0gY29sdW1uMFJvdzE7XHJcblx0XHRyZXN1bHRbMl0gPSBjb2x1bW4xUm93MDtcclxuXHRcdHJlc3VsdFszXSA9IGNvbHVtbjFSb3cxO1xyXG5cdFx0cmV0dXJuIHJlc3VsdDtcclxuXHR9XHJcblxyXG5cdHN0YXRpYyBhYnMobWF0cml4OiBNYXRyaXgyLCByZXN1bHQ6IE1hdHJpeDIpOiBNYXRyaXgyIHtcclxuXHRcdHJlc3VsdFswXSA9IE1hdGguYWJzKG1hdHJpeFswXSk7XHJcblx0XHRyZXN1bHRbMV0gPSBNYXRoLmFicyhtYXRyaXhbMV0pO1xyXG5cdFx0cmVzdWx0WzJdID0gTWF0aC5hYnMobWF0cml4WzJdKTtcclxuXHRcdHJlc3VsdFszXSA9IE1hdGguYWJzKG1hdHJpeFszXSk7XHJcblxyXG5cdFx0cmV0dXJuIHJlc3VsdDtcclxuXHR9XHJcblxyXG5cdHN0YXRpYyBlcXVhbHMobGVmdDogTWF0cml4MiwgcmlnaHQ6IE1hdHJpeDIpOiBib29sZWFuIHtcclxuXHRcdHJldHVybiAoXHJcblx0XHRcdGxlZnQgPT09IHJpZ2h0IHx8XHJcblx0XHRcdChkZWZpbmVkKGxlZnQpICYmXHJcblx0XHRcdFx0ZGVmaW5lZChyaWdodCkgJiZcclxuXHRcdFx0XHRsZWZ0WzBdID09PSByaWdodFswXSAmJlxyXG5cdFx0XHRcdGxlZnRbMV0gPT09IHJpZ2h0WzFdICYmXHJcblx0XHRcdFx0bGVmdFsyXSA9PT0gcmlnaHRbMl0gJiZcclxuXHRcdFx0XHRsZWZ0WzNdID09PSByaWdodFszXSlcclxuXHRcdCk7XHJcblx0fVxyXG5cclxuXHQvKipcclxuXHQgKiBAcHJpdmF0ZVxyXG5cdCAqL1xyXG5cdHN0YXRpYyBlcXVhbHNBcnJheShtYXRyaXg6IE1hdHJpeDIsIGFycmF5OiBudW1iZXJbXSwgb2Zmc2V0OiBudW1iZXIpOiBib29sZWFuIHtcclxuXHRcdHJldHVybiAoXHJcblx0XHRcdG1hdHJpeFswXSA9PT0gYXJyYXlbb2Zmc2V0XSAmJlxyXG5cdFx0XHRtYXRyaXhbMV0gPT09IGFycmF5W29mZnNldCArIDFdICYmXHJcblx0XHRcdG1hdHJpeFsyXSA9PT0gYXJyYXlbb2Zmc2V0ICsgMl0gJiZcclxuXHRcdFx0bWF0cml4WzNdID09PSBhcnJheVtvZmZzZXQgKyAzXVxyXG5cdFx0KTtcclxuXHR9XHJcblxyXG5cdHN0YXRpYyBlcXVhbHNFcHNpbG9uKGxlZnQ6IE1hdHJpeDIsIHJpZ2h0OiBNYXRyaXgyLCBlcHNpbG9uID0gMCk6IGJvb2xlYW4ge1xyXG5cdFx0ZXBzaWxvbiA9IGRlZmF1bHRWYWx1ZShlcHNpbG9uLCAwKTtcclxuXHRcdHJldHVybiAoXHJcblx0XHRcdGxlZnQgPT09IHJpZ2h0IHx8XHJcblx0XHRcdChkZWZpbmVkKGxlZnQpICYmXHJcblx0XHRcdFx0ZGVmaW5lZChyaWdodCkgJiZcclxuXHRcdFx0XHRNYXRoLmFicyhsZWZ0WzBdIC0gcmlnaHRbMF0pIDw9IGVwc2lsb24gJiZcclxuXHRcdFx0XHRNYXRoLmFicyhsZWZ0WzFdIC0gcmlnaHRbMV0pIDw9IGVwc2lsb24gJiZcclxuXHRcdFx0XHRNYXRoLmFicyhsZWZ0WzJdIC0gcmlnaHRbMl0pIDw9IGVwc2lsb24gJiZcclxuXHRcdFx0XHRNYXRoLmFicyhsZWZ0WzNdIC0gcmlnaHRbM10pIDw9IGVwc2lsb24pXHJcblx0XHQpO1xyXG5cdH1cclxuXHJcblx0cHVibGljIHN0YXRpYyBJREVOVElUWSA9IE9iamVjdC5mcmVlemUobmV3IE1hdHJpeDIoMS4wLCAwLjAsIDAuMCwgMS4wKSk7XHJcblxyXG5cdHB1YmxpYyBzdGF0aWMgWkVSTyA9IE9iamVjdC5mcmVlemUobmV3IE1hdHJpeDIoMC4wLCAwLjAsIDAuMCwgMC4wKSk7XHJcblxyXG5cdGNsb25lKHJlc3VsdDogTWF0cml4Mik6IE1hdHJpeDIge1xyXG5cdFx0cmV0dXJuIE1hdHJpeDIuY2xvbmUodGhpcywgcmVzdWx0KTtcclxuXHR9XHJcblxyXG5cdGVxdWFscyhyaWdodDogTWF0cml4Mik6IGJvb2xlYW4ge1xyXG5cdFx0cmV0dXJuIE1hdHJpeDIuZXF1YWxzKHRoaXMsIHJpZ2h0KTtcclxuXHR9XHJcblxyXG5cdGVxdWFsc0Vwc2lsb24ocmlnaHQ6IE1hdHJpeDIsIGVwc2lsb24gPSAwKTogYm9vbGVhbiB7XHJcblx0XHRyZXR1cm4gTWF0cml4Mi5lcXVhbHNFcHNpbG9uKHRoaXMsIHJpZ2h0LCBlcHNpbG9uKTtcclxuXHR9XHJcblxyXG5cdHRvU3RyaW5nKCkge1xyXG5cdFx0cmV0dXJuIGAoJHt0aGlzWzBdfSwgJHt0aGlzWzJdfSlcXG5gICsgYCgke3RoaXNbMV19LCAke3RoaXNbM119KWA7XHJcblx0fVxyXG59XHJcbmNvbnN0IHNjYWxlU2NyYXRjaDEgPSBuZXcgVmVjdG9yMigpO1xyXG5jb25zdCBzY2FsZVNjcmF0Y2gyID0gbmV3IFZlY3RvcjIoKTtcclxuY29uc3Qgc2NhbGVTY3JhdGNoMyA9IG5ldyBWZWN0b3IyKCk7XHJcbmNvbnN0IHNjYWxlU2NyYXRjaDQgPSBuZXcgVmVjdG9yMigpO1xyXG5jb25zdCBzY3JhdGNoQ29sdW1uID0gbmV3IFZlY3RvcjIoKTtcclxuY29uc3Qgc2NhbGVTY3JhdGNoNSA9IG5ldyBWZWN0b3IyKCk7XHJcbmV4cG9ydCBkZWZhdWx0IE1hdHJpeDI7XHJcbiIsImltcG9ydCB7IFNoYWRlclN0YWdlIH0gZnJvbSBcIi4uL2NvcmUvV2ViR1BVQ29uc3RhbnRcIjtcbmltcG9ydCB7IFVuaWZvcm1GdW5jLCBVbmlmb3JtRW51bSwgVW5pZm9ybVN0cnVjdCB9IGZyb20gXCIuLi9jb3JlL1dlYkdQVVR5cGVzXCI7XG5pbXBvcnQgeyBEaXJlY3Rpb25hbExpZ2h0IH0gZnJvbSBcIi4uL2xpZ2h0L0RpcmVjdGlvbmFsTGlnaHRcIjtcbmltcG9ydCB7IFBvaW50TGlnaHQgfSBmcm9tIFwiLi4vbGlnaHQvUG9pbnRMaWdodFwiO1xuaW1wb3J0IHsgU3BvdExpZ2h0IH0gZnJvbSBcIi4uL2xpZ2h0L1Nwb3RMaWdodFwiO1xuaW1wb3J0IENvbG9yIGZyb20gXCIuLi9tYXRoL0NvbG9yXCI7XG5pbXBvcnQgTWF0cml4MiBmcm9tIFwiLi4vbWF0aC9NYXRyaXgyXCI7XG5pbXBvcnQgTWF0cml4MyBmcm9tIFwiLi4vbWF0aC9NYXRyaXgzXCI7XG5pbXBvcnQgTWF0cml4NCBmcm9tIFwiLi4vbWF0aC9NYXRyaXg0XCI7XG5pbXBvcnQgVmVjdG9yMiBmcm9tIFwiLi4vbWF0aC9WZWN0b3IyXCI7XG5pbXBvcnQgVmVjdG9yMyBmcm9tIFwiLi4vbWF0aC9WZWN0b3IzXCI7XG5pbXBvcnQgVmVjdG9yNCBmcm9tIFwiLi4vbWF0aC9WZWN0b3I0XCI7XG5pbXBvcnQgZGVmYXVsdFZhbHVlIGZyb20gXCIuLi91dGlscy9kZWZhdWx0VmFsdWVcIjtcbmltcG9ydCBTYW1wbGVyIGZyb20gXCIuL1NhbXBsZXJcIjtcbmltcG9ydCBUZXh0dXJlIGZyb20gXCIuL1RleHR1cmVcIjtcbmltcG9ydCBVbmlmb3JtQnVmZmVyIGZyb20gXCIuL1VuaWZvcm1CdWZmZXJcIjtcbmV4cG9ydCBjbGFzcyBVbmlmb3JtPFQ+IHtcblx0X3ZhbHVlOiBUO1xuXHRuYW1lOiBzdHJpbmc7XG5cdHZhbHVlOiBUO1xuXHRvZmZzZXQ6IG51bWJlcjtcblx0YnVmZmVyOiBGbG9hdDMyQXJyYXkgfCBVaW50MTZBcnJheSB8IFVpbnQzMkFycmF5IHwgVWludDhBcnJheSB8IEZsb2F0NjRBcnJheTtcblx0Y2I6IFVuaWZvcm1GdW5jIHwgbnVtYmVyIHwgb2JqZWN0O1xuXHRieXRlU2l6ZTogbnVtYmVyO1xuXHR0eXBlPzogc3RyaW5nO1xuXHRkaXJ0eT86IGJvb2xlYW47XG5cblx0Y29uc3RydWN0b3IodW5pZm9ybU5hbWU6IHN0cmluZywgY2I/OiBVbmlmb3JtRnVuYyB8IG51bWJlciB8IG9iamVjdCwgb2Zmc2V0PzogbnVtYmVyKSB7XG5cdFx0dGhpcy5uYW1lID0gdW5pZm9ybU5hbWU7XG5cdFx0dGhpcy5jYiA9IGNiO1xuXHRcdHRoaXMub2Zmc2V0ID0gZGVmYXVsdFZhbHVlKG9mZnNldCwgMCk7XG5cdFx0dGhpcy50eXBlID0gXCJudW1iZXJcIjtcblx0fVxuXHRzZXRCdWZmZXIoYXJyYXk6IEFycmF5PG51bWJlcj4sIG9mZnNldCA9IDApIHtcblx0XHRmb3IgKGxldCBpID0gMDsgaSA8IGFycmF5Lmxlbmd0aDsgaSsrKSB7XG5cdFx0XHR0aGlzLmJ1ZmZlcltpICsgb2Zmc2V0XSA9IGFycmF5W2ldO1xuXHRcdH1cblx0fVxuXHRzZXQoKSB7XG5cdFx0cmV0dXJuIHVuZGVmaW5lZDtcblx0fVxuXHRnZXRWYWx1ZSgpIHtcblx0XHRsZXQgcmVzdWx0O1xuXHRcdGNvbnN0IGNiVHlwZSA9IHR5cGVvZiB0aGlzLmNiO1xuXHRcdHN3aXRjaCAoY2JUeXBlKSB7XG5cdFx0XHRjYXNlIFwib2JqZWN0XCI6XG5cdFx0XHRcdHJlc3VsdCA9IHRoaXMuY2JbdGhpcy5uYW1lXSB8fCB0aGlzLmNiO1xuXHRcdFx0XHRicmVhaztcblx0XHRcdGNhc2UgXCJmdW5jdGlvblwiOlxuXHRcdFx0XHQvLyBAdHMtaWdub3JlXG5cdFx0XHRcdHJlc3VsdCA9IHRoaXMuY2IoKTtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRjYXNlIFwibnVtYmVyXCI6XG5cdFx0XHRcdHJlc3VsdCA9IHRoaXMuY2I7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0ZGVmYXVsdDpcblx0XHRcdFx0dGhyb3cgbmV3IEVycm9yKFwidHlwZSBpcyBlcnJvclwiKTtcblx0XHR9XG5cdFx0cmV0dXJuIHJlc3VsdDtcblx0fVxuXHQvLyBjb21wYXJlIGFycmF5XG5cdGVxdWFscyh2KSB7XG5cdFx0aWYgKCh0aGlzLl92YWx1ZSBhcyBBcnJheTxudW1iZXI+KS5sZW5ndGggIT09IHYubGVuZ3RoKSByZXR1cm4gZmFsc2U7XG5cdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCB2Lmxlbmd0aDsgaSsrKSB7XG5cdFx0XHRpZiAodltpXSAhPT0gdGhpcy5fdmFsdWVbaV0pIHtcblx0XHRcdFx0cmV0dXJuIGZhbHNlO1xuXHRcdFx0fVxuXHRcdH1cblx0XHRyZXR1cm4gdHJ1ZTtcblx0fVxufVxuXG5leHBvcnQgY2xhc3MgVW5pZm9ybVVpbnQgZXh0ZW5kcyBVbmlmb3JtPG51bWJlcj4ge1xuXHRzdGF0aWMgYWxpZ24gPSA0O1xuXHRjb25zdHJ1Y3Rvcihcblx0XHR1bmlmb3JtTmFtZTogc3RyaW5nLFxuXHRcdGJ1ZmZlcjogRmxvYXQzMkFycmF5LFxuXHRcdGJ5dGVPZmZzZXQ6IG51bWJlcixcblx0XHRjYjogVW5pZm9ybUZ1bmMgfCBudW1iZXIgfCBvYmplY3QsXG5cdFx0b2Zmc2V0PzogbnVtYmVyXG5cdCkge1xuXHRcdHN1cGVyKHVuaWZvcm1OYW1lLCBjYiwgb2Zmc2V0KTtcblx0XHR0aGlzLnZhbHVlID0gdW5kZWZpbmVkO1xuXHRcdHRoaXMuX3ZhbHVlID0gMDtcblx0XHR0aGlzLmJ5dGVTaXplID0gNDtcblx0XHR0aGlzLmJ1ZmZlciA9IG5ldyBVaW50MzJBcnJheShidWZmZXIuYnVmZmVyLCBieXRlT2Zmc2V0LCAxKTtcblx0XHR0aGlzLnR5cGUgPSBcInVpbnRcIjtcblx0fVxuXHRzZXQoKSB7XG5cdFx0aWYgKHRoaXMuY2IgIT0gdW5kZWZpbmVkKSB0aGlzLnZhbHVlID0gdGhpcy5nZXRWYWx1ZSgpO1xuXHRcdGlmICh0aGlzLnZhbHVlICE9PSB0aGlzLl92YWx1ZSkge1xuXHRcdFx0dGhpcy5fdmFsdWUgPSB0aGlzLnZhbHVlO1xuXHRcdFx0dGhpcy5idWZmZXJbMF0gPSB0aGlzLnZhbHVlO1xuXHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0fVxuXHRcdHJldHVybiBmYWxzZTtcblx0fVxufVxuXG5leHBvcnQgY2xhc3MgVW5pZm9ybUZsb2F0IGV4dGVuZHMgVW5pZm9ybTxudW1iZXI+IHtcblx0c3RhdGljIGFsaWduID0gNDtcblx0Y29uc3RydWN0b3IoXG5cdFx0dW5pZm9ybU5hbWU6IHN0cmluZyxcblx0XHRidWZmZXI6IEZsb2F0MzJBcnJheSxcblx0XHRieXRlT2Zmc2V0OiBudW1iZXIsXG5cdFx0Y2I6IFVuaWZvcm1GdW5jIHwgbnVtYmVyIHwgb2JqZWN0LFxuXHRcdG9mZnNldD86IG51bWJlclxuXHQpIHtcblx0XHRzdXBlcih1bmlmb3JtTmFtZSwgY2IsIG9mZnNldCk7XG5cdFx0dGhpcy52YWx1ZSA9IHVuZGVmaW5lZDtcblx0XHR0aGlzLl92YWx1ZSA9IDA7XG5cdFx0dGhpcy5ieXRlU2l6ZSA9IDQ7XG5cdFx0dGhpcy5idWZmZXIgPSBuZXcgRmxvYXQzMkFycmF5KGJ1ZmZlci5idWZmZXIsIGJ5dGVPZmZzZXQsIDEpO1xuXHRcdHRoaXMudHlwZSA9IFwidmVjMVwiO1xuXHR9XG5cdHNldCgpIHtcblx0XHRpZiAodGhpcy5jYiAhPSB1bmRlZmluZWQpIHRoaXMudmFsdWUgPSB0aGlzLmdldFZhbHVlKCk7XG5cdFx0aWYgKHRoaXMudmFsdWUgIT09IHRoaXMuX3ZhbHVlKSB7XG5cdFx0XHR0aGlzLl92YWx1ZSA9IHRoaXMudmFsdWU7XG5cdFx0XHR0aGlzLmJ1ZmZlclswXSA9IHRoaXMudmFsdWU7XG5cdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHR9XG5cdFx0cmV0dXJuIGZhbHNlO1xuXHR9XG59XG5leHBvcnQgY2xhc3MgVW5pZm9ybUZsb2F0VmVjMiBleHRlbmRzIFVuaWZvcm08VmVjdG9yMj4ge1xuXHRzdGF0aWMgYWxpZ24gPSA4O1xuXHRjb25zdHJ1Y3Rvcihcblx0XHR1bmlmb3JtTmFtZTogc3RyaW5nLFxuXHRcdGJ1ZmZlcjogRmxvYXQzMkFycmF5LFxuXHRcdGJ5dGVPZmZzZXQ6IG51bWJlcixcblx0XHRjYjogVW5pZm9ybUZ1bmMgfCBudW1iZXIgfCBvYmplY3QsXG5cdFx0b2Zmc2V0PzogbnVtYmVyXG5cdCkge1xuXHRcdHN1cGVyKHVuaWZvcm1OYW1lLCBjYiwgb2Zmc2V0KTtcblx0XHR0aGlzLnZhbHVlID0gdW5kZWZpbmVkO1xuXHRcdHRoaXMuX3ZhbHVlID0gbmV3IFZlY3RvcjIoKTtcblx0XHR0aGlzLmJ1ZmZlciA9IG5ldyBGbG9hdDMyQXJyYXkoYnVmZmVyLmJ1ZmZlciwgYnl0ZU9mZnNldCwgMik7XG5cdFx0dGhpcy5ieXRlU2l6ZSA9IDg7XG5cdFx0dGhpcy50eXBlID0gXCJ2ZWMyXCI7XG5cdH1cblx0c2V0KCk6IGJvb2xlYW4ge1xuXHRcdGlmICh0aGlzLmNiICE9IHVuZGVmaW5lZCkgdGhpcy52YWx1ZSA9IHRoaXMuZ2V0VmFsdWUoKTtcblx0XHRjb25zdCB2ID0gdGhpcy52YWx1ZTtcblx0XHRpZiAodiBpbnN0YW5jZW9mIFZlY3RvcjIpIHtcblx0XHRcdGlmIChWZWN0b3IyLmVxdWFscyh2LCB0aGlzLl92YWx1ZSkpIHJldHVybiBmYWxzZTtcblx0XHRcdFZlY3RvcjIuY2xvbmUodiwgdGhpcy5fdmFsdWUpO1xuXHRcdFx0dGhpcy5zZXRCdWZmZXIodGhpcy5fdmFsdWUudG9BcnJheSgpKTtcblx0XHRcdHJldHVybiB0cnVlO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHRpZiAodGhpcy5lcXVhbHModikpIHJldHVybiBmYWxzZTtcblx0XHRcdHRoaXMuX3ZhbHVlID0gdjtcblx0XHRcdHRoaXMuc2V0QnVmZmVyKHYpO1xuXHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0fVxuXHR9XG59XG5leHBvcnQgY2xhc3MgVW5pZm9ybUZsb2F0VmVjMyBleHRlbmRzIFVuaWZvcm08VmVjdG9yMz4ge1xuXHRzdGF0aWMgYWxpZ24gPSAxNjtcblx0Y29uc3RydWN0b3IoXG5cdFx0dW5pZm9ybU5hbWU6IHN0cmluZyxcblx0XHRidWZmZXI6IEZsb2F0MzJBcnJheSxcblx0XHRieXRlT2Zmc2V0OiBudW1iZXIsXG5cdFx0Y2I6IFVuaWZvcm1GdW5jIHwgbnVtYmVyIHwgb2JqZWN0LFxuXHRcdG9mZnNldD86IG51bWJlclxuXHQpIHtcblx0XHRzdXBlcih1bmlmb3JtTmFtZSwgY2IsIG9mZnNldCk7XG5cdFx0dGhpcy52YWx1ZSA9IHVuZGVmaW5lZDtcblx0XHR0aGlzLl92YWx1ZSA9IG5ldyBWZWN0b3IzKCk7XG5cdFx0dGhpcy5idWZmZXIgPSBuZXcgRmxvYXQzMkFycmF5KGJ1ZmZlci5idWZmZXIsIGJ5dGVPZmZzZXQsIDMpO1xuXHRcdHRoaXMuYnl0ZVNpemUgPSAxMjtcblx0XHR0aGlzLnR5cGUgPSBcInZlYzNcIjtcblx0fVxuXHRzZXQoKTogYm9vbGVhbiB7XG5cdFx0aWYgKHRoaXMuY2IgIT0gdW5kZWZpbmVkKSB0aGlzLnZhbHVlID0gdGhpcy5nZXRWYWx1ZSgpO1xuXHRcdGNvbnN0IHYgPSB0aGlzLnZhbHVlO1xuXHRcdGlmICh2IGluc3RhbmNlb2YgVmVjdG9yMykge1xuXHRcdFx0aWYgKFZlY3RvcjMuZXF1YWxzKHYsIHRoaXMuX3ZhbHVlKSkgcmV0dXJuIGZhbHNlO1xuXHRcdFx0VmVjdG9yMy5jbG9uZSh2LCB0aGlzLl92YWx1ZSk7XG5cdFx0XHR0aGlzLnNldEJ1ZmZlcih0aGlzLl92YWx1ZS50b0FycmF5KCkpO1xuXHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0fSBlbHNlIHtcblx0XHRcdGlmICh0aGlzLmVxdWFscyh2KSkgcmV0dXJuIGZhbHNlO1xuXHRcdFx0dGhpcy5fdmFsdWUgPSB2O1xuXHRcdFx0dGhpcy5zZXRCdWZmZXIodik7XG5cdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHR9XG5cdH1cbn1cbmV4cG9ydCBjbGFzcyBVbmlmb3JtRmxvYXRWZWM0IGV4dGVuZHMgVW5pZm9ybTxWZWN0b3I0PiB7XG5cdHN0YXRpYyBhbGlnbiA9IDE2O1xuXHRjb25zdHJ1Y3Rvcihcblx0XHR1bmlmb3JtTmFtZTogc3RyaW5nLFxuXHRcdGJ1ZmZlcjogRmxvYXQzMkFycmF5LFxuXHRcdGJ5dGVPZmZzZXQ6IG51bWJlcixcblx0XHRjYjogVW5pZm9ybUZ1bmMgfCBudW1iZXIgfCBvYmplY3QsXG5cdFx0b2Zmc2V0PzogbnVtYmVyXG5cdCkge1xuXHRcdHN1cGVyKHVuaWZvcm1OYW1lLCBjYiwgb2Zmc2V0KTtcblx0XHR0aGlzLnZhbHVlID0gdW5kZWZpbmVkO1xuXHRcdHRoaXMuX3ZhbHVlID0gbmV3IFZlY3RvcjQoKTtcblx0XHR0aGlzLmJ1ZmZlciA9IG5ldyBGbG9hdDMyQXJyYXkoYnVmZmVyLmJ1ZmZlciwgYnl0ZU9mZnNldCwgNCk7XG5cdFx0dGhpcy5ieXRlU2l6ZSA9IDE2O1xuXHRcdHRoaXMudHlwZSA9IFwidmVjNFwiO1xuXHR9XG5cdHNldCgpOiBib29sZWFuIHtcblx0XHRpZiAodGhpcy5jYiAhPSB1bmRlZmluZWQpIHRoaXMudmFsdWUgPSB0aGlzLmdldFZhbHVlKCk7XG5cdFx0Y29uc3QgdiA9IHRoaXMudmFsdWU7XG5cdFx0aWYgKHYgaW5zdGFuY2VvZiBWZWN0b3I0KSB7XG5cdFx0XHRpZiAoVmVjdG9yNC5lcXVhbHModiwgdGhpcy5fdmFsdWUpKSByZXR1cm4gZmFsc2U7XG5cdFx0XHRWZWN0b3I0LmNsb25lKHYsIHRoaXMuX3ZhbHVlKTtcblx0XHRcdHRoaXMuc2V0QnVmZmVyKHRoaXMuX3ZhbHVlLnRvQXJyYXkoKSk7XG5cdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0aWYgKHRoaXMuZXF1YWxzKHYpKSByZXR1cm4gZmFsc2U7XG5cdFx0XHR0aGlzLl92YWx1ZSA9IHY7XG5cdFx0XHR0aGlzLnNldEJ1ZmZlcih2KTtcblx0XHRcdHJldHVybiB0cnVlO1xuXHRcdH1cblx0fVxufVxuZXhwb3J0IGNsYXNzIFVuaWZvcm1Db2xvciBleHRlbmRzIFVuaWZvcm08Q29sb3I+IHtcblx0c3RhdGljIGFsaWduID0gMTY7XG5cdGNvbnN0cnVjdG9yKFxuXHRcdHVuaWZvcm1OYW1lOiBzdHJpbmcsXG5cdFx0YnVmZmVyOiBGbG9hdDMyQXJyYXksXG5cdFx0Ynl0ZU9mZnNldDogbnVtYmVyLFxuXHRcdGNiOiBVbmlmb3JtRnVuYyB8IG51bWJlciB8IG9iamVjdCxcblx0XHRvZmZzZXQ/OiBudW1iZXJcblx0KSB7XG5cdFx0c3VwZXIodW5pZm9ybU5hbWUsIGNiLCBvZmZzZXQpO1xuXHRcdHRoaXMudmFsdWUgPSB1bmRlZmluZWQ7XG5cdFx0dGhpcy5fdmFsdWUgPSBuZXcgQ29sb3IoKTtcblx0XHR0aGlzLmJ1ZmZlciA9IG5ldyBGbG9hdDMyQXJyYXkoYnVmZmVyLmJ1ZmZlciwgYnl0ZU9mZnNldCwgMyk7XG5cdFx0dGhpcy5ieXRlU2l6ZSA9IDEyO1xuXHRcdHRoaXMudHlwZSA9IFwidmVjM1wiO1xuXHR9XG5cdHNldCgpOiBib29sZWFuIHtcblx0XHRpZiAodGhpcy5jYiAhPSB1bmRlZmluZWQpIHRoaXMudmFsdWUgPSB0aGlzLmdldFZhbHVlKCk7XG5cdFx0Y29uc3QgdiA9IHRoaXMudmFsdWU7XG5cdFx0aWYgKHYgaW5zdGFuY2VvZiBDb2xvcikge1xuXHRcdFx0aWYgKENvbG9yLmVxdWFscyh2LCB0aGlzLl92YWx1ZSkpIHJldHVybiBmYWxzZTtcblx0XHRcdENvbG9yLmNsb25lKHYsIHRoaXMuX3ZhbHVlKTtcblx0XHRcdHRoaXMuc2V0QnVmZmVyKHRoaXMuX3ZhbHVlLnRvQXJyYXkoKSk7XG5cdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0aWYgKHRoaXMuZXF1YWxzKHYpKSByZXR1cm4gZmFsc2U7XG5cdFx0XHR0aGlzLl92YWx1ZSA9IHY7XG5cdFx0XHR0aGlzLnNldEJ1ZmZlcih2KTtcblx0XHRcdHJldHVybiB0cnVlO1xuXHRcdH1cblx0fVxufVxuXG5leHBvcnQgY2xhc3MgVW5pZm9ybU1hdDIgZXh0ZW5kcyBVbmlmb3JtPE1hdHJpeDI+IHtcblx0c3RhdGljIGFsaWduID0gODtcblx0Y29uc3RydWN0b3IoXG5cdFx0dW5pZm9ybU5hbWU6IHN0cmluZyxcblx0XHRidWZmZXI6IEZsb2F0MzJBcnJheSxcblx0XHRieXRlT2Zmc2V0OiBudW1iZXIsXG5cdFx0Y2I6IFVuaWZvcm1GdW5jIHwgbnVtYmVyIHwgb2JqZWN0LFxuXHRcdG9mZnNldD86IG51bWJlclxuXHQpIHtcblx0XHRzdXBlcih1bmlmb3JtTmFtZSwgY2IsIG9mZnNldCk7XG5cdFx0dGhpcy52YWx1ZSA9IHVuZGVmaW5lZDtcblx0XHR0aGlzLl92YWx1ZSA9IG5ldyBNYXRyaXgyKCk7XG5cdFx0dGhpcy5idWZmZXIgPSBuZXcgRmxvYXQzMkFycmF5KGJ1ZmZlci5idWZmZXIsIGJ5dGVPZmZzZXQsIDQpO1xuXHRcdHRoaXMuYnl0ZVNpemUgPSAxNjtcblx0XHR0aGlzLnR5cGUgPSBcIm1hdDJcIjtcblx0fVxuXHRzZXQoKTogYm9vbGVhbiB7XG5cdFx0aWYgKHRoaXMuY2IgIT0gdW5kZWZpbmVkKSB0aGlzLnZhbHVlID0gdGhpcy5nZXRWYWx1ZSgpO1xuXHRcdGNvbnN0IHYgPSB0aGlzLnZhbHVlO1xuXHRcdGlmICh2IGluc3RhbmNlb2YgTWF0cml4Mikge1xuXHRcdFx0aWYgKE1hdHJpeDIuZXF1YWxzKHYsIHRoaXMuX3ZhbHVlKSkgcmV0dXJuIGZhbHNlO1xuXHRcdFx0TWF0cml4Mi5jbG9uZSh2LCB0aGlzLl92YWx1ZSk7XG5cdFx0XHR0aGlzLnNldEJ1ZmZlcih0aGlzLl92YWx1ZS50b0FycmF5KCkpO1xuXHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0fSBlbHNlIHtcblx0XHRcdGlmICh0aGlzLmVxdWFscyh2KSkgcmV0dXJuIGZhbHNlO1xuXHRcdFx0dGhpcy5fdmFsdWUgPSB2O1xuXHRcdFx0dGhpcy5zZXRCdWZmZXIodik7XG5cdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHR9XG5cdH1cbn1cbmV4cG9ydCBjbGFzcyBVbmlmb3JtTWF0MyBleHRlbmRzIFVuaWZvcm08TWF0cml4Mz4ge1xuXHRzdGF0aWMgYWxpZ24gPSAxNjtcblx0Y29uc3RydWN0b3IoXG5cdFx0dW5pZm9ybU5hbWU6IHN0cmluZyxcblx0XHRidWZmZXI6IEZsb2F0MzJBcnJheSxcblx0XHRieXRlT2Zmc2V0OiBudW1iZXIsXG5cdFx0Y2I6IFVuaWZvcm1GdW5jIHwgbnVtYmVyIHwgb2JqZWN0LFxuXHRcdG9mZnNldD86IG51bWJlclxuXHQpIHtcblx0XHRzdXBlcih1bmlmb3JtTmFtZSwgY2IsIG9mZnNldCk7XG5cdFx0dGhpcy52YWx1ZSA9IHVuZGVmaW5lZDtcblx0XHR0aGlzLl92YWx1ZSA9IG5ldyBNYXRyaXgzKCk7XG5cdFx0dGhpcy5idWZmZXIgPSBuZXcgRmxvYXQzMkFycmF5KGJ1ZmZlci5idWZmZXIsIGJ5dGVPZmZzZXQsIDkpO1xuXHRcdHRoaXMuYnl0ZVNpemUgPSA0ODtcblx0XHR0aGlzLnR5cGUgPSBcIm1hdDNcIjtcblx0fVxuXHRzZXQoKTogYm9vbGVhbiB7XG5cdFx0aWYgKHRoaXMuY2IgIT0gdW5kZWZpbmVkKSB0aGlzLnZhbHVlID0gdGhpcy5nZXRWYWx1ZSgpO1xuXHRcdGNvbnN0IHYgPSB0aGlzLnZhbHVlO1xuXHRcdGlmICh2IGluc3RhbmNlb2YgTWF0cml4Mykge1xuXHRcdFx0aWYgKE1hdHJpeDMuZXF1YWxzKHYsIHRoaXMuX3ZhbHVlKSkgcmV0dXJuIGZhbHNlO1xuXHRcdFx0TWF0cml4My5jbG9uZSh2LCB0aGlzLl92YWx1ZSk7XG5cdFx0XHR0aGlzLnNldEJ1ZmZlcih0aGlzLl92YWx1ZS50b0FycmF5KCkpO1xuXHRcdFx0cmV0dXJuIHRydWU7XG5cdFx0fSBlbHNlIHtcblx0XHRcdGlmICh0aGlzLmVxdWFscyh2KSkgcmV0dXJuIGZhbHNlO1xuXHRcdFx0dGhpcy5fdmFsdWUgPSB2O1xuXHRcdFx0dGhpcy5zZXRCdWZmZXIodik7XG5cdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHR9XG5cdH1cbn1cbmV4cG9ydCBjbGFzcyBVbmlmb3JtTWF0NCBleHRlbmRzIFVuaWZvcm08TWF0cml4ND4ge1xuXHRzdGF0aWMgYWxpZ24gPSAxNjtcblx0Y29uc3RydWN0b3IoXG5cdFx0dW5pZm9ybU5hbWU6IHN0cmluZyxcblx0XHRidWZmZXI6IEZsb2F0MzJBcnJheSxcblx0XHRieXRlT2Zmc2V0OiBudW1iZXIsXG5cdFx0Y2I6IFVuaWZvcm1GdW5jIHwgbnVtYmVyIHwgb2JqZWN0LFxuXHRcdG9mZnNldD86IG51bWJlclxuXHQpIHtcblx0XHRzdXBlcih1bmlmb3JtTmFtZSwgY2IsIG9mZnNldCk7XG5cdFx0dGhpcy52YWx1ZSA9IHVuZGVmaW5lZDtcblx0XHR0aGlzLl92YWx1ZSA9IG5ldyBNYXRyaXg0KCk7XG5cdFx0dGhpcy5idWZmZXIgPSBuZXcgRmxvYXQzMkFycmF5KGJ1ZmZlci5idWZmZXIsIGJ5dGVPZmZzZXQsIDE2KTtcblx0XHR0aGlzLmJ5dGVTaXplID0gNjQ7XG5cdFx0dGhpcy50eXBlID0gXCJtYXQ0XCI7XG5cdH1cblx0c2V0KCk6IGJvb2xlYW4ge1xuXHRcdGlmICh0aGlzLmNiICE9IHVuZGVmaW5lZCkgdGhpcy52YWx1ZSA9IHRoaXMuZ2V0VmFsdWUoKTtcblx0XHRjb25zdCB2ID0gdGhpcy52YWx1ZTtcblx0XHRpZiAodiBpbnN0YW5jZW9mIE1hdHJpeDQpIHtcblx0XHRcdGlmIChNYXRyaXg0LmVxdWFscyh2LCB0aGlzLl92YWx1ZSkpIHJldHVybiBmYWxzZTtcblx0XHRcdE1hdHJpeDQuY2xvbmUodiwgdGhpcy5fdmFsdWUpO1xuXHRcdFx0dGhpcy5zZXRCdWZmZXIodGhpcy5fdmFsdWUudG9BcnJheSgpKTtcblx0XHRcdHJldHVybiB0cnVlO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHQvLyBpZih0aGlzLmVxdWFscyh2KSkgcmV0dXJuIGZhbHNlO1xuXHRcdFx0dGhpcy5fdmFsdWUgPSB2O1xuXHRcdFx0dGhpcy5zZXRCdWZmZXIodik7XG5cdFx0XHRyZXR1cm4gdHJ1ZTtcblx0XHR9XG5cdH1cbn1cbmV4cG9ydCBjbGFzcyBVbmlmb3JtTWF0cml4NEFycmF5IGV4dGVuZHMgVW5pZm9ybTxBcnJheTxNYXRyaXg0Pj4ge1xuXHRzdGF0aWMgYWxpZ24gPSAxNjtcblx0Y29uc3RydWN0b3IoXG5cdFx0dW5pZm9ybU5hbWU6IHN0cmluZyxcblx0XHRidWZmZXI6IEZsb2F0MzJBcnJheSxcblx0XHRieXRlT2Zmc2V0OiBudW1iZXIsXG5cdFx0Y2I6IFVuaWZvcm1GdW5jIHwgbnVtYmVyIHwgb2JqZWN0LFxuXHRcdGNvdW50PzogbnVtYmVyXG5cdCkge1xuXHRcdHN1cGVyKHVuaWZvcm1OYW1lLCBjYiwgMCk7XG5cdFx0dGhpcy5ieXRlU2l6ZSA9IGNvdW50ICogNjQ7XG5cdFx0dGhpcy5idWZmZXIgPSBuZXcgRmxvYXQzMkFycmF5KGJ1ZmZlci5idWZmZXIsIGJ5dGVPZmZzZXQsIHRoaXMuYnl0ZVNpemUgLyA0KTtcblx0XHR0aGlzLnR5cGUgPSBcIm1hdDQtYXJyYXlcIjtcblx0fVxuXHRzZXQoKTogYm9vbGVhbiB7XG5cdFx0dGhpcy52YWx1ZSA9IHRoaXMuZ2V0VmFsdWUoKTtcblx0XHRpZiAoIXRoaXMudmFsdWUpIHJldHVybiBmYWxzZTtcblx0XHRmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMudmFsdWUubGVuZ3RoOyBpKyspIHtcblx0XHRcdHRoaXMuc2V0QnVmZmVyKHRoaXMudmFsdWVbaV0udG9BcnJheSgpLCBpICogMTYpO1xuXHRcdH1cblx0XHRyZXR1cm4gdHJ1ZTtcblx0fVxufVxuZXhwb3J0IGNsYXNzIFVuaWZvcm1GbG9hdEFycmF5IGV4dGVuZHMgVW5pZm9ybTxBcnJheTxudW1iZXI+PiB7XG5cdHN0YXRpYyBhbGlnbiA9IDQ7XG5cdC8vIGNiOiBGdW5jdGlvbjtcblx0Y29uc3RydWN0b3IoXG5cdFx0dW5pZm9ybU5hbWU6IHN0cmluZyxcblx0XHRidWZmZXI6IEZsb2F0MzJBcnJheSxcblx0XHRieXRlT2Zmc2V0OiBudW1iZXIsXG5cdFx0Y2I6IFVuaWZvcm1GdW5jIHwgbnVtYmVyIHwgb2JqZWN0LFxuXHRcdGNvdW50PzogbnVtYmVyXG5cdCkge1xuXHRcdHN1cGVyKHVuaWZvcm1OYW1lLCBjYiwgMCk7XG5cdFx0dGhpcy5idWZmZXIgPSBuZXcgRmxvYXQzMkFycmF5KGJ1ZmZlci5idWZmZXIsIGJ5dGVPZmZzZXQsIGNvdW50KTtcblx0XHR0aGlzLmJ5dGVTaXplID0gNCAqIGNvdW50O1xuXHRcdHRoaXMudHlwZSA9IFwiZmxvYXQtYXJyYXlcIjtcblx0fVxuXHRzZXQoKTogYm9vbGVhbiB7XG5cdFx0dGhpcy52YWx1ZSA9IHRoaXMuZ2V0VmFsdWUoKTtcblx0XHRmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMudmFsdWUubGVuZ3RoOyBpKyspIHtcblx0XHRcdHRoaXMuYnVmZmVyW2ldID0gdGhpcy52YWx1ZVtpXTtcblx0XHR9XG5cdFx0cmV0dXJuIHRydWU7XG5cdH1cbn1cbmV4cG9ydCBjbGFzcyBVbmlmb3JtVmVjMkFycmF5IGV4dGVuZHMgVW5pZm9ybTxBcnJheTxWZWN0b3IyPj4ge1xuXHRzdGF0aWMgYWxpZ24gPSA4O1xuXHRjb25zdHJ1Y3Rvcihcblx0XHR1bmlmb3JtTmFtZTogc3RyaW5nLFxuXHRcdGJ1ZmZlcjogRmxvYXQzMkFycmF5LFxuXHRcdGJ5dGVPZmZzZXQ6IG51bWJlcixcblx0XHRjYjogVW5pZm9ybUZ1bmMgfCBudW1iZXIgfCBvYmplY3QsXG5cdFx0Y291bnQ/OiBudW1iZXJcblx0KSB7XG5cdFx0c3VwZXIodW5pZm9ybU5hbWUsIGNiLCAwKTtcblx0XHR0aGlzLmJ5dGVTaXplID0gY291bnQgKiA4O1xuXHRcdHRoaXMuYnVmZmVyID0gbmV3IEZsb2F0MzJBcnJheShidWZmZXIuYnVmZmVyLCBieXRlT2Zmc2V0LCB0aGlzLmJ5dGVTaXplIC8gNCk7XG5cdFx0dGhpcy50eXBlID0gXCJ2ZWMyLWFycmF5XCI7XG5cdH1cblx0c2V0KCk6IGJvb2xlYW4ge1xuXHRcdC8vIHRoaXMudmFsdWUgPSB0aGlzLmNiKCk7XG5cdFx0dGhpcy52YWx1ZSA9IHRoaXMuZ2V0VmFsdWUoKTtcblx0XHRsZXQgaiA9IDA7XG5cdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLnZhbHVlLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHR0aGlzLmJ1ZmZlcltqXSA9IHRoaXMudmFsdWVbaV0ueDtcblx0XHRcdHRoaXMuYnVmZmVyW2ogKyAxXSA9IHRoaXMudmFsdWVbaV0ueTtcblx0XHRcdGogKz0gMjtcblx0XHR9XG5cdFx0cmV0dXJuIHRydWU7XG5cdH1cbn1cbmV4cG9ydCBjbGFzcyBVbmlmb3JtVmVjM0FycmF5IGV4dGVuZHMgVW5pZm9ybTxBcnJheTxWZWN0b3IzPj4ge1xuXHRzdGF0aWMgYWxpZ24gPSAxNjtcblx0Ly8gY2I6IEZ1bmN0aW9uO1xuXHRjb25zdHJ1Y3Rvcihcblx0XHR1bmlmb3JtTmFtZTogc3RyaW5nLFxuXHRcdGJ1ZmZlcjogRmxvYXQzMkFycmF5LFxuXHRcdGJ5dGVPZmZzZXQ6IG51bWJlcixcblx0XHRjYjogVW5pZm9ybUZ1bmMgfCBudW1iZXIgfCBvYmplY3QsXG5cdFx0Y291bnQ/OiBudW1iZXJcblx0KSB7XG5cdFx0c3VwZXIodW5pZm9ybU5hbWUsIGNiLCAwKTtcblx0XHR0aGlzLmJ5dGVTaXplID0gY291bnQgKiAxNjtcblx0XHR0aGlzLmJ1ZmZlciA9IG5ldyBGbG9hdDMyQXJyYXkoYnVmZmVyLmJ1ZmZlciwgYnl0ZU9mZnNldCwgdGhpcy5ieXRlU2l6ZSAvIDQpO1xuXHRcdHRoaXMudHlwZSA9IFwidmVjMy1hcnJheVwiO1xuXHR9XG5cdHNldCgpOiBib29sZWFuIHtcblx0XHQvLyB0aGlzLnZhbHVlID0gdGhpcy5jYigpO1xuXHRcdHRoaXMudmFsdWUgPSB0aGlzLmdldFZhbHVlKCk7XG5cdFx0bGV0IGogPSAwO1xuXHRcdGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy52YWx1ZS5sZW5ndGg7IGkrKykge1xuXHRcdFx0dGhpcy5idWZmZXJbal0gPSB0aGlzLnZhbHVlW2ldLng7XG5cdFx0XHR0aGlzLmJ1ZmZlcltqICsgMV0gPSB0aGlzLnZhbHVlW2ldLnk7XG5cdFx0XHR0aGlzLmJ1ZmZlcltqICsgMl0gPSB0aGlzLnZhbHVlW2ldLno7XG5cdFx0XHR0aGlzLmJ1ZmZlcltqICsgM10gPSAwO1xuXHRcdFx0aiArPSA0O1xuXHRcdH1cblx0XHRyZXR1cm4gdHJ1ZTtcblx0fVxufVxuZXhwb3J0IGNsYXNzIFVuaWZvcm1WZWM0QXJyYXkgZXh0ZW5kcyBVbmlmb3JtPEFycmF5PFZlY3RvcjQ+PiB7XG5cdHN0YXRpYyBhbGlnbiA9IDE2O1xuXHQvLyBjYjogRnVuY3Rpb247XG5cdGNvbnN0cnVjdG9yKFxuXHRcdHVuaWZvcm1OYW1lOiBzdHJpbmcsXG5cdFx0YnVmZmVyOiBGbG9hdDMyQXJyYXksXG5cdFx0Ynl0ZU9mZnNldDogbnVtYmVyLFxuXHRcdGNiOiBVbmlmb3JtRnVuYyB8IG51bWJlciB8IG9iamVjdCxcblx0XHRjb3VudD86IG51bWJlclxuXHQpIHtcblx0XHRzdXBlcih1bmlmb3JtTmFtZSwgY2IsIDApO1xuXHRcdHRoaXMuYnl0ZVNpemUgPSBjb3VudCAqIDE2O1xuXHRcdHRoaXMuYnVmZmVyID0gbmV3IEZsb2F0MzJBcnJheShidWZmZXIuYnVmZmVyLCBieXRlT2Zmc2V0LCB0aGlzLmJ5dGVTaXplIC8gNCk7XG5cdFx0dGhpcy50eXBlID0gXCJ2ZWM0LWFycmF5XCI7XG5cdH1cblx0c2V0KCk6IGJvb2xlYW4ge1xuXHRcdHRoaXMudmFsdWUgPSB0aGlzLmdldFZhbHVlKCk7XG5cdFx0bGV0IGogPSAwO1xuXHRcdGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy52YWx1ZS5sZW5ndGg7IGkrKykge1xuXHRcdFx0dGhpcy5idWZmZXJbal0gPSB0aGlzLnZhbHVlW2ldLng7XG5cdFx0XHR0aGlzLmJ1ZmZlcltqICsgMV0gPSB0aGlzLnZhbHVlW2ldLnk7XG5cdFx0XHR0aGlzLmJ1ZmZlcltqICsgMl0gPSB0aGlzLnZhbHVlW2ldLno7XG5cdFx0XHR0aGlzLmJ1ZmZlcltqICsgM10gPSB0aGlzLnZhbHVlW2ldLnc7XG5cdFx0XHRqICs9IDQ7XG5cdFx0fVxuXHRcdHJldHVybiB0cnVlO1xuXHR9XG59XG5leHBvcnQgY2xhc3MgVW5pZm9ybVRleHR1cmUgZXh0ZW5kcyBVbmlmb3JtPFRleHR1cmU+IHtcblx0cHVibGljIGJpbmRpbmc6IG51bWJlcjtcblx0cHVibGljIHR5cGU6IHN0cmluZztcblx0cHVibGljIHZpc2liaWxpdHk6IFNoYWRlclN0YWdlO1xuXHRwdWJsaWMgbmFtZTogc3RyaW5nO1xuXHRwdWJsaWMgdGV4dHVyZTogVGV4dHVyZTtcblx0cHVibGljIGlzVGV4dHVyZTogYm9vbGVhbjtcblx0cHVibGljIHRleHR1cmVWaWV3PzogR1BVVGV4dHVyZVZpZXc7XG5cdHByaXZhdGUgX3RleHR1cmU6IFVuaWZvcm1GdW5jIHwgVGV4dHVyZTtcblx0Y29uc3RydWN0b3IoXG5cdFx0dW5pZm9ybU5hbWU6IHN0cmluZyxcblx0XHRiaW5kaW5nOiBudW1iZXIsXG5cdFx0dGV4dHVyZTogVW5pZm9ybUZ1bmMgfCBUZXh0dXJlLFxuXHRcdHR5cGU/OiBzdHJpbmcsXG5cdFx0dmlzaWJpbGl0eT86IFNoYWRlclN0YWdlLFxuXHRcdHRleHR1cmVWaWV3PzogR1BVVGV4dHVyZVZpZXdcblx0KSB7XG5cdFx0c3VwZXIodW5pZm9ybU5hbWUsIHVuZGVmaW5lZCwgMCk7XG5cdFx0dGhpcy5iaW5kaW5nID0gYmluZGluZztcblx0XHR0aGlzLnZpc2liaWxpdHkgPSBkZWZhdWx0VmFsdWUodmlzaWJpbGl0eSwgU2hhZGVyU3RhZ2UuVmVydGV4IHwgU2hhZGVyU3RhZ2UuRnJhZ21lbnQpO1xuXHRcdHRoaXMudGV4dHVyZVZpZXcgPSB0ZXh0dXJlVmlldztcblx0XHR0aGlzLnR5cGUgPSB0eXBlID8/IFwidGV4dHVyZVwiO1xuXHRcdHRoaXMuaXNUZXh0dXJlID0gdHJ1ZTtcblx0XHR0aGlzLl90ZXh0dXJlID0gdGV4dHVyZTtcblx0fVxuXHRnZXQgbGF5b3V0VHlwZSgpIHtcblx0XHRyZXR1cm4gdGhpcy50ZXh0dXJlPy5sYXlvdXRUeXBlIHx8IFwibm90IHlldCBiaW5kXCI7XG5cdH1cblx0Z2V0IHN0b3JhZ2VUZXh0dXJlTGF5b3V0VHlwZSgpIHtcblx0XHRyZXR1cm4gdGhpcy50ZXh0dXJlPy5zdG9yYWdlVGV4dHVyZUxheW91dFR5cGUgfHwgXCJub3QgeWV0IGJpbmRcIjtcblx0fVxuXHRiaW5kKGRldmljZTogR1BVRGV2aWNlKSB7XG5cdFx0aWYgKCF0aGlzLl90ZXh0dXJlKSByZXR1cm47XG5cdFx0dGhpcy50ZXh0dXJlID0gdGhpcy5fdGV4dHVyZSBpbnN0YW5jZW9mIEZ1bmN0aW9uID8gdGhpcy5fdGV4dHVyZSgpIDogdGhpcy5fdGV4dHVyZTtcblx0XHR0aGlzLnRleHR1cmUudXBkYXRlKGRldmljZSk7XG5cdH1cbn1cbmV4cG9ydCBjbGFzcyBVbmlmb3JtU2FtcGxlciBleHRlbmRzIFVuaWZvcm08U2FtcGxlcj4ge1xuXHRwdWJsaWMgYmluZGluZzogbnVtYmVyO1xuXHRwdWJsaWMgdHlwZTogc3RyaW5nO1xuXHRwdWJsaWMgdmlzaWJpbGl0eTogU2hhZGVyU3RhZ2U7XG5cdHB1YmxpYyBuYW1lOiBzdHJpbmc7XG5cdHB1YmxpYyBzYW1wbGVyOiBTYW1wbGVyO1xuXHRwdWJsaWMgaXNTYW1wbGVyOiBib29sZWFuO1xuXHRwcml2YXRlIF9zYW1wbGVyOiBVbmlmb3JtRnVuYyB8IFNhbXBsZXI7XG5cdGNvbnN0cnVjdG9yKHVuaWZvcm1OYW1lOiBzdHJpbmcsIGJpbmRpbmc6IG51bWJlciwgc2FtcGxlcjogVW5pZm9ybUZ1bmMgfCBTYW1wbGVyLCB2aXNpYmlsaXR5PzogU2hhZGVyU3RhZ2UpIHtcblx0XHRzdXBlcih1bmlmb3JtTmFtZSwgdW5kZWZpbmVkLCAwKTtcblx0XHR0aGlzLnZpc2liaWxpdHkgPSBkZWZhdWx0VmFsdWUodmlzaWJpbGl0eSwgU2hhZGVyU3RhZ2UuVmVydGV4IHwgU2hhZGVyU3RhZ2UuRnJhZ21lbnQpO1xuXHRcdHRoaXMubmFtZSA9IHVuaWZvcm1OYW1lO1xuXHRcdHRoaXMuYmluZGluZyA9IGJpbmRpbmc7XG5cdFx0dGhpcy50eXBlID0gXCJzYW1wbGVyXCI7XG5cdFx0dGhpcy5pc1NhbXBsZXIgPSB0cnVlO1xuXHRcdHRoaXMuX3NhbXBsZXIgPSBzYW1wbGVyO1xuXHR9XG5cdGdldCBsYXlvdXRUeXBlKCkge1xuXHRcdHJldHVybiB0aGlzLnNhbXBsZXI/LmxheW91dFR5cGUgfHwgXCJub3QgeWV0IGJpbmRcIjtcblx0fVxuXHRiaW5kKGRldmljZTogR1BVRGV2aWNlKSB7XG5cdFx0dGhpcy5zYW1wbGVyID0gdGhpcy5fc2FtcGxlciBpbnN0YW5jZW9mIEZ1bmN0aW9uID8gdGhpcy5fc2FtcGxlcigpIDogdGhpcy5fc2FtcGxlcjtcblx0XHR0aGlzLnNhbXBsZXIudXBkYXRlKGRldmljZSk7XG5cdH1cbn1cbmV4cG9ydCBjbGFzcyBVbmlmb3JtU3RydWN0QXJyYXkgZXh0ZW5kcyBVbmlmb3JtPFVuaWZvcm1TdHJ1Y3Q+IHtcblx0c3RhdGljIGFsaWduID0gMTY7XG5cdHN0YXRpYyBhbGlnbnMgPSB7XG5cdFx0W1VuaWZvcm1FbnVtLlVuaWZvcm1VaW50XTogNCxcblx0XHRbVW5pZm9ybUVudW0uRmxvYXRdOiA0LFxuXHRcdFtVbmlmb3JtRW51bS5GbG9hdFZlYzJdOiA4LFxuXHRcdFtVbmlmb3JtRW51bS5GbG9hdFZlYzNdOiAxNixcblx0XHRbVW5pZm9ybUVudW0uRmxvYXRWZWM0XTogMTYsXG5cdFx0W1VuaWZvcm1FbnVtLk1hdDJdOiA4LFxuXHRcdFtVbmlmb3JtRW51bS5NYXQzXTogMTYsXG5cdFx0W1VuaWZvcm1FbnVtLk1hdDRdOiAxNixcblx0XHRbVW5pZm9ybUVudW0uQ29sb3JdOiAxNlxuXHR9O1xuXHRzdGF0aWMgYnl0ZVNpemVzID0ge1xuXHRcdFtVbmlmb3JtRW51bS5Vbmlmb3JtVWludF06IDQsXG5cdFx0W1VuaWZvcm1FbnVtLkZsb2F0XTogNCxcblx0XHRbVW5pZm9ybUVudW0uRmxvYXRWZWMyXTogOCxcblx0XHRbVW5pZm9ybUVudW0uRmxvYXRWZWMzXTogMTIsXG5cdFx0W1VuaWZvcm1FbnVtLkZsb2F0VmVjNF06IDE2LFxuXHRcdFtVbmlmb3JtRW51bS5NYXQyXTogMTYsXG5cdFx0W1VuaWZvcm1FbnVtLk1hdDNdOiA0OCxcblx0XHRbVW5pZm9ybUVudW0uTWF0NF06IDY0LFxuXHRcdFtVbmlmb3JtRW51bS5Db2xvcl06IDEyXG5cdH07XG5cdGJ5dGVPZmZzZXQ/OiBudW1iZXI7XG5cdHNvdXJjZUJ1ZmZlcj86IEZsb2F0MzJBcnJheTtcblx0c3RydWN0QXJyYXk/OiBBcnJheTxVbmlmb3JtU3RydWN0Pjtcblx0Y29uc3RydWN0b3IoXG5cdFx0dW5pZm9ybU5hbWU6IHN0cmluZyxcblx0XHRidWZmZXI6IEZsb2F0MzJBcnJheSxcblx0XHRieXRlT2Zmc2V0OiBudW1iZXIsXG5cdFx0Y2I6IFVuaWZvcm1GdW5jIHwgbnVtYmVyIHwgb2JqZWN0LFxuXHRcdG9mZnNldD86IG51bWJlclxuXHQpIHtcblx0XHRzdXBlcih1bmlmb3JtTmFtZSwgY2IsIG9mZnNldCk7XG5cdFx0dGhpcy5jYiA9IGNiO1xuXHRcdHRoaXMudHlwZSA9IFwic3RydWN0LWFycmF5XCI7XG5cdFx0dGhpcy5kaXJ0eSA9IGZhbHNlO1xuXHRcdHRoaXMuYnl0ZU9mZnNldCA9IGJ5dGVPZmZzZXQ7XG5cdFx0dGhpcy5zb3VyY2VCdWZmZXIgPSBidWZmZXI7XG5cdH1cblx0c2V0KCkge1xuXHRcdC8vXG5cdFx0dGhpcy5zdHJ1Y3RBcnJheSA9IHRoaXMuZ2V0VmFsdWUoKTtcblx0XHR0aGlzLmJ5dGVTaXplID0gdGhpcy5nZXRTdHJ1Y3RTaXplKCk7XG5cdFx0dGhpcy5idWZmZXIgPSBuZXcgRmxvYXQzMkFycmF5KHRoaXMuc291cmNlQnVmZmVyLmJ1ZmZlciwgdGhpcy5ieXRlT2Zmc2V0LCB0aGlzLmJ5dGVTaXplIC8gNCk7XG5cdFx0dGhpcy5zZXRTdWJEYXRhKCk7XG5cdFx0cmV0dXJuIHRydWU7XG5cdH1cblx0cHJpdmF0ZSBzZXRTdWJEYXRhKCkge1xuXHRcdHRoaXMuc3RydWN0QXJyYXkuZm9yRWFjaCgoc3RydWN0KSA9PiB7XG5cdFx0XHRjb25zdCBrZXlzID0gT2JqZWN0LmtleXMoc3RydWN0KTtcblx0XHRcdGtleXMuZm9yRWFjaCgoa2V5KSA9PiB7XG5cdFx0XHRcdGNvbnN0IGRhdGEgPSBBcnJheS5pc0FycmF5KHN0cnVjdFtrZXldPy52YWx1ZSlcblx0XHRcdFx0XHQ/IHN0cnVjdFtrZXldPy52YWx1ZVxuXHRcdFx0XHRcdDogKHN0cnVjdFtrZXldPy52YWx1ZSBhcyBhbnkpLnRvQXJyYXkoKTtcblx0XHRcdFx0c2V0RGF0YVRvVHlwZUFycmF5KHRoaXMuYnVmZmVyLCBkYXRhLCBzdHJ1Y3Rba2V5XS5vZmZzZXQpO1xuXHRcdFx0fSk7XG5cdFx0fSk7XG5cdH1cblx0cHJpdmF0ZSBnZXRTdHJ1Y3RTaXplKCkge1xuXHRcdGxldCBieXRlT2Zmc2V0ID0gMDtcblx0XHR0aGlzLnN0cnVjdEFycmF5LmZvckVhY2goKHN0cnVjdCkgPT4ge1xuXHRcdFx0Y29uc3Qga2V5cyA9IE9iamVjdC5rZXlzKHN0cnVjdCk7XG5cdFx0XHRrZXlzLmZvckVhY2goKGtleSkgPT4ge1xuXHRcdFx0XHRieXRlT2Zmc2V0ICs9IFVuaWZvcm1CdWZmZXIuY2hlY2tVbmlmb3JtT2Zmc2V0KGJ5dGVPZmZzZXQsIFVuaWZvcm1TdHJ1Y3RBcnJheS5hbGlnbnNbc3RydWN0W2tleV0udHlwZV0pO1xuXHRcdFx0XHRzdHJ1Y3Rba2V5XS5vZmZzZXQgPSBieXRlT2Zmc2V0O1xuXHRcdFx0XHR0aGlzLmJ5dGVPZmZzZXQgKz0gVW5pZm9ybVN0cnVjdEFycmF5LmJ5dGVTaXplc1tzdHJ1Y3Rba2V5XS50eXBlXTtcblx0XHRcdH0pO1xuXHRcdH0pO1xuXHRcdHJldHVybiBieXRlT2Zmc2V0O1xuXHR9XG59XG5leHBvcnQgY2xhc3MgVW5pZm9ybVNwb3RMaWdodHMgZXh0ZW5kcyBVbmlmb3JtPFNwb3RMaWdodD4ge1xuXHRzdGF0aWMgYWxpZ24gPSAxNjtcblx0bGlnaHRzOiBBcnJheTxTcG90TGlnaHQ+O1xuXHQvLyBjYjogRnVuY3Rpb247XG5cdGNvbnN0cnVjdG9yKFxuXHRcdHVuaWZvcm1OYW1lOiBzdHJpbmcsXG5cdFx0YnVmZmVyOiBGbG9hdDMyQXJyYXksXG5cdFx0Ynl0ZU9mZnNldDogbnVtYmVyLFxuXHRcdGNiOiBVbmlmb3JtRnVuYyB8IG51bWJlciB8IG9iamVjdCxcblx0XHRjb3VudD86IG51bWJlclxuXHQpIHtcblx0XHRzdXBlcih1bmlmb3JtTmFtZSwgY2IsIDApO1xuXHRcdHRoaXMuY2IgPSBjYjtcblx0XHR0aGlzLmJ5dGVTaXplID0gY291bnQgKiA2NDtcblx0XHR0aGlzLmJ1ZmZlciA9IG5ldyBGbG9hdDMyQXJyYXkoYnVmZmVyLmJ1ZmZlciwgYnl0ZU9mZnNldCwgdGhpcy5ieXRlU2l6ZSAvIDQpO1xuXHRcdHRoaXMudHlwZSA9IFwic3BvdHNMaWdodFwiO1xuXHRcdHRoaXMuZGlydHkgPSBmYWxzZTtcblx0fVxuXHRzZXQoKSB7XG5cdFx0dGhpcy5saWdodHMgPSB0aGlzLmdldFZhbHVlKCk7XG5cdFx0dGhpcy5saWdodHMuZm9yRWFjaCgoc3BvdExpZ2h0LCBpbmRleCkgPT4ge1xuXHRcdFx0dGhpcy5zZXRTdWJEYXRhKHNwb3RMaWdodCwgaW5kZXgpO1xuXHRcdH0pO1xuXHRcdHJldHVybiB0aGlzLmRpcnR5O1xuXHR9XG5cdHByaXZhdGUgc2V0U3ViRGF0YShzcG90TGlnaHQ6IFNwb3RMaWdodCwgaW5kZXg6IG51bWJlcikge1xuXHRcdGNvbnN0IG9mZnNldCA9IGluZGV4ICogMTY7XG5cdFx0aWYgKHNwb3RMaWdodC5wb3NpdGlvbkRpcnR5KSB7XG5cdFx0XHR0aGlzLmRpcnR5ID0gc2V0RGF0YVRvVHlwZUFycmF5KHRoaXMuYnVmZmVyLCBzcG90TGlnaHQucG9zaXRpb24udG9BcnJheSgpLCBvZmZzZXQgKyAwKTsgLy8gYnl0ZU9mZnNldD0wO1xuXHRcdH1cblx0XHRpZiAoc3BvdExpZ2h0LmRpc3RhbmNlRGlydHkpIHtcblx0XHRcdHRoaXMuZGlydHkgPSBzZXREYXRhVG9UeXBlQXJyYXkodGhpcy5idWZmZXIsIHNwb3RMaWdodC5kaXN0YW5jZSwgb2Zmc2V0ICsgMyk7IC8vIGJ5dGVPZmZzZXQ9MTI7XG5cdFx0fVxuXHRcdGlmIChzcG90TGlnaHQuZGlydGVjdERpcnR5KSB7XG5cdFx0XHR0aGlzLmRpcnR5ID0gc2V0RGF0YVRvVHlwZUFycmF5KHRoaXMuYnVmZmVyLCBzcG90TGlnaHQuZGlyZWN0aW9uYWwudG9BcnJheSgpLCBvZmZzZXQgKyA0KTsgLy8gYnl0ZU9mZnNldD0xNjtcblx0XHR9XG5cdFx0aWYgKHNwb3RMaWdodC5jb25lQ29zRGlydHkpIHtcblx0XHRcdHRoaXMuZGlydHkgPSBzZXREYXRhVG9UeXBlQXJyYXkodGhpcy5idWZmZXIsIHNwb3RMaWdodC5jb25lQ29zLCBvZmZzZXQgKyA3KTsgLy8gYnl0ZU9mZnNldD0yODtcblx0XHR9XG5cdFx0aWYgKHNwb3RMaWdodC5jb2xvckRpcnR5KSB7XG5cdFx0XHR0aGlzLmRpcnR5ID0gc2V0RGF0YVRvVHlwZUFycmF5KHRoaXMuYnVmZmVyLCBzcG90TGlnaHQuY29sb3IudG9BcnJheSgpLCBvZmZzZXQgKyA4KTsgLy8gYnl0ZU9mZnNldD0zMjtcblx0XHR9XG5cdFx0aWYgKHNwb3RMaWdodC5wZW51bWJyYUNvc0RpcnR5KSB7XG5cdFx0XHR0aGlzLmRpcnR5ID0gc2V0RGF0YVRvVHlwZUFycmF5KHRoaXMuYnVmZmVyLCBzcG90TGlnaHQucGVudW1icmFDb3MsIG9mZnNldCArIDExKTsgLy8gYnl0ZU9mZnNldD00NDtcblx0XHR9XG5cdFx0aWYgKHNwb3RMaWdodC5kZWNheURpcnR5KSB7XG5cdFx0XHR0aGlzLmRpcnR5ID0gc2V0RGF0YVRvVHlwZUFycmF5KHRoaXMuYnVmZmVyLCBzcG90TGlnaHQuZGVjYXksIG9mZnNldCArIDEyKTsgLy8gYnl0ZU9mZnNldD00ODtcblx0XHR9XG5cblx0XHRzcG90TGlnaHQucG9zaXRpb25EaXJ0eSA9IGZhbHNlO1xuXHRcdHNwb3RMaWdodC5kaXN0YW5jZURpcnR5ID0gZmFsc2U7XG5cdFx0c3BvdExpZ2h0LmRpcnRlY3REaXJ0eSA9IGZhbHNlO1xuXHRcdHNwb3RMaWdodC5jb25lQ29zRGlydHkgPSBmYWxzZTtcblx0XHRzcG90TGlnaHQuY29sb3JEaXJ0eSA9IGZhbHNlO1xuXHRcdHNwb3RMaWdodC5wZW51bWJyYUNvc0RpcnR5ID0gZmFsc2U7XG5cdFx0c3BvdExpZ2h0LmRlY2F5RGlydHkgPSBmYWxzZTtcblx0fVxufVxuXG5leHBvcnQgY2xhc3MgVW5pZm9ybVNwb3RMaWdodFNoYWRvd3MgZXh0ZW5kcyBVbmlmb3JtPFNwb3RMaWdodD4ge1xuXHRzdGF0aWMgYWxpZ24gPSAxNjtcblx0c3RhdGljIHVuaWZvcm1TaXplID0gMTg7XG5cdGxpZ2h0czogQXJyYXk8U3BvdExpZ2h0Pjtcblx0Ly8gY2I6IEZ1bmN0aW9uO1xuXHRwcml2YXRlIF9uZWFyVmFsdWU6IG51bWJlcjtcblx0cHJpdmF0ZSBfZmFyVmFsdWU6IG51bWJlcjtcblx0cHJpdmF0ZSBfc3ViRGF0YVNpemU6IG51bWJlcjtcblxuXHRjb25zdHJ1Y3Rvcihcblx0XHR1bmlmb3JtTmFtZTogc3RyaW5nLFxuXHRcdGJ1ZmZlcjogRmxvYXQzMkFycmF5LFxuXHRcdGJ5dGVPZmZzZXQ6IG51bWJlcixcblx0XHRjYjogVW5pZm9ybUZ1bmMgfCBudW1iZXIgfCBvYmplY3QsXG5cdFx0Y291bnQ/OiBudW1iZXJcblx0KSB7XG5cdFx0c3VwZXIodW5pZm9ybU5hbWUsIGNiLCAwKTtcblx0XHRjb25zdCBieXRlc1BlckVsZW1lbnQgPSBGbG9hdDMyQXJyYXkuQllURVNfUEVSX0VMRU1FTlQ7XG5cdFx0dGhpcy5fc3ViRGF0YVNpemUgPSBVbmlmb3JtU3BvdExpZ2h0U2hhZG93cy51bmlmb3JtU2l6ZTtcblx0XHR0aGlzLmJ5dGVTaXplID0gY291bnQgKiB0aGlzLl9zdWJEYXRhU2l6ZSAqIGJ5dGVzUGVyRWxlbWVudDtcblx0XHR0aGlzLmJ1ZmZlciA9IG5ldyBGbG9hdDMyQXJyYXkoYnVmZmVyLmJ1ZmZlciwgYnl0ZU9mZnNldCwgdGhpcy5ieXRlU2l6ZSAvIDQpO1xuXHRcdHRoaXMudHlwZSA9IFwic3BvdExpZ2h0U2hhZG93c1wiO1xuXHRcdHRoaXMuX25lYXJWYWx1ZSA9IG51bGw7XG5cdFx0dGhpcy5fZmFyVmFsdWUgPSBudWxsO1xuXHR9XG5cdHNldCgpIHtcblx0XHR0aGlzLmxpZ2h0cyA9IHRoaXMuZ2V0VmFsdWUoKTtcblx0XHR0aGlzLmxpZ2h0cy5mb3JFYWNoKChzcG90TGlnaHQsIGluZGV4KSA9PiB7XG5cdFx0XHR0aGlzLnNldFN1YkRhdGEoc3BvdExpZ2h0LCBpbmRleCk7XG5cdFx0fSk7XG5cdFx0cmV0dXJuIHRoaXMuZGlydHk7XG5cdH1cblx0cHJpdmF0ZSBzZXRTdWJEYXRhKHNwb3RMaWdodDogU3BvdExpZ2h0LCBpbmRleDogbnVtYmVyKSB7XG5cdFx0Y29uc3Qgb2Zmc2V0ID0gaW5kZXggKiB0aGlzLl9zdWJEYXRhU2l6ZTtcblx0XHRpZiAoc3BvdExpZ2h0LnNoYWRvdy52cE1hdHJpeERpcnR5KSB7XG5cdFx0XHRzcG90TGlnaHQuc2hhZG93LnZwTWF0cml4RGlydHkgPSBmYWxzZTtcblx0XHRcdHRoaXMuZGlydHkgPSBzZXREYXRhVG9UeXBlQXJyYXkodGhpcy5idWZmZXIsIHNwb3RMaWdodC5zaGFkb3cuY2FtZXJhLnZwTWF0cml4LnRvQXJyYXkoKSwgb2Zmc2V0ICsgMCk7IC8vIGJ5dGVPZmZzZXQ9MDtcblx0XHR9XG5cdFx0Y29uc3QgbmVhclZhbHVlID0gc3BvdExpZ2h0LnNoYWRvdy5jYW1lcmEubmVhcjtcblx0XHRpZiAobmVhclZhbHVlICE9IHRoaXMuX25lYXJWYWx1ZSkge1xuXHRcdFx0dGhpcy5fbmVhclZhbHVlID0gbmVhclZhbHVlO1xuXHRcdFx0dGhpcy5kaXJ0eSA9IHNldERhdGFUb1R5cGVBcnJheSh0aGlzLmJ1ZmZlciwgdGhpcy5fbmVhclZhbHVlLCBvZmZzZXQgKyAxNik7IC8vIGJ5dGVPZmZzZXQ9MDtcblx0XHR9XG5cdFx0Y29uc3QgZmFyVmFsdWUgPSBzcG90TGlnaHQuc2hhZG93LmNhbWVyYS5mYXI7XG5cdFx0aWYgKGZhclZhbHVlICE9IHRoaXMuX2ZhclZhbHVlKSB7XG5cdFx0XHR0aGlzLl9mYXJWYWx1ZSA9IGZhclZhbHVlO1xuXHRcdFx0dGhpcy5kaXJ0eSA9IHNldERhdGFUb1R5cGVBcnJheSh0aGlzLmJ1ZmZlciwgdGhpcy5fZmFyVmFsdWUsIG9mZnNldCArIDE3KTsgLy8gYnl0ZU9mZnNldD0wO1xuXHRcdH1cblx0fVxufVxuZXhwb3J0IGNsYXNzIFVuaWZvcm1Qb2ludExpZ2h0cyBleHRlbmRzIFVuaWZvcm08UG9pbnRMaWdodD4ge1xuXHRzdGF0aWMgYWxpZ24gPSAxNjtcblx0bGlnaHRzOiBBcnJheTxQb2ludExpZ2h0Pjtcblx0Ly8gY2I6IEZ1bmN0aW9uO1xuXHRjb25zdHJ1Y3Rvcihcblx0XHR1bmlmb3JtTmFtZTogc3RyaW5nLFxuXHRcdGJ1ZmZlcjogRmxvYXQzMkFycmF5LFxuXHRcdGJ5dGVPZmZzZXQ6IG51bWJlcixcblx0XHRjYjogVW5pZm9ybUZ1bmMgfCBudW1iZXIgfCBvYmplY3QsXG5cdFx0Y291bnQ/OiBudW1iZXJcblx0KSB7XG5cdFx0c3VwZXIodW5pZm9ybU5hbWUsIGNiLCAwKTtcblx0XHR0aGlzLmJ5dGVTaXplID0gY291bnQgKiAzMjtcblx0XHR0aGlzLmJ1ZmZlciA9IG5ldyBGbG9hdDMyQXJyYXkoYnVmZmVyLmJ1ZmZlciwgYnl0ZU9mZnNldCwgdGhpcy5ieXRlU2l6ZSAvIDQpO1xuXHRcdHRoaXMudHlwZSA9IFwicG9pbnRzTGlnaHRcIjtcblx0fVxuXHRzZXQoKSB7XG5cdFx0dGhpcy5saWdodHMgPSB0aGlzLmdldFZhbHVlKCk7XG5cdFx0dGhpcy5saWdodHMuZm9yRWFjaCgocG9pbnRMaWdodCwgaW5kZXgpID0+IHtcblx0XHRcdHRoaXMuc2V0U3ViRGF0YShwb2ludExpZ2h0LCBpbmRleCk7XG5cdFx0fSk7XG5cdFx0cmV0dXJuIHRoaXMuZGlydHk7XG5cdH1cblx0cHJpdmF0ZSBzZXRTdWJEYXRhKHBvaW50TGlnaHQ6IFBvaW50TGlnaHQsIGluZGV4OiBudW1iZXIpIHtcblx0XHRjb25zdCBvZmZzZXQgPSBpbmRleCAqIDg7XG5cdFx0aWYgKHBvaW50TGlnaHQucG9zaXRpb25EaXJ0eSkge1xuXHRcdFx0cG9pbnRMaWdodC5wb3NpdGlvbkRpcnR5ID0gZmFsc2U7XG5cdFx0XHR0aGlzLmRpcnR5ID0gc2V0RGF0YVRvVHlwZUFycmF5KHRoaXMuYnVmZmVyLCBwb2ludExpZ2h0LnBvc2l0aW9uLnRvQXJyYXkoKSwgb2Zmc2V0ICsgMCk7IC8vIGJ5dGVPZmZzZXQ9MDtcblx0XHR9XG5cdFx0aWYgKHBvaW50TGlnaHQuZGlzdGFuY2VEaXJ0eSkge1xuXHRcdFx0cG9pbnRMaWdodC5kaXN0YW5jZURpcnR5ID0gZmFsc2U7XG5cdFx0XHR0aGlzLmRpcnR5ID0gc2V0RGF0YVRvVHlwZUFycmF5KHRoaXMuYnVmZmVyLCBwb2ludExpZ2h0LmRpc3RhbmNlLCBvZmZzZXQgKyAzKTsgLy8gYnl0ZU9mZnNldD0xMjtcblx0XHR9XG5cdFx0aWYgKHBvaW50TGlnaHQuY29sb3JEaXJ0eSkge1xuXHRcdFx0cG9pbnRMaWdodC5jb2xvckRpcnR5ID0gZmFsc2U7XG5cdFx0XHR0aGlzLmRpcnR5ID0gc2V0RGF0YVRvVHlwZUFycmF5KHRoaXMuYnVmZmVyLCBwb2ludExpZ2h0LmNvbG9yLnRvQXJyYXkoKSwgb2Zmc2V0ICsgNCk7IC8vIGJ5dGVPZmZzZXQ9MzI7XG5cdFx0fVxuXHRcdGlmIChwb2ludExpZ2h0LmRlY2F5RGlydHkpIHtcblx0XHRcdHBvaW50TGlnaHQuZGVjYXlEaXJ0eSA9IGZhbHNlO1xuXHRcdFx0dGhpcy5kaXJ0eSA9IHNldERhdGFUb1R5cGVBcnJheSh0aGlzLmJ1ZmZlciwgcG9pbnRMaWdodC5kZWNheSwgb2Zmc2V0ICsgNyk7IC8vIGJ5dGVPZmZzZXQ9MTI7XG5cdFx0fVxuXHR9XG59XG5cbmV4cG9ydCBjbGFzcyBVbmlmb3JtUG9pbnRMaWdodFNoYWRvd3MgZXh0ZW5kcyBVbmlmb3JtPFBvaW50TGlnaHQ+IHtcblx0c3RhdGljIGFsaWduID0gMTY7XG5cdHN0YXRpYyB1bmlmb3JtU2l6ZSA9IDEyMjtcblx0bGlnaHRzOiBBcnJheTxQb2ludExpZ2h0Pjtcblx0Ly8gY2I6IEZ1bmN0aW9uO1xuXHRwcml2YXRlIF9uZWFyVmFsdWU6IG51bWJlcjtcblx0cHJpdmF0ZSBfZmFyVmFsdWU6IG51bWJlcjtcblx0cHJpdmF0ZSBfc3ViRGF0YVNpemU6IG51bWJlcjtcblxuXHRjb25zdHJ1Y3Rvcihcblx0XHR1bmlmb3JtTmFtZTogc3RyaW5nLFxuXHRcdGJ1ZmZlcjogRmxvYXQzMkFycmF5LFxuXHRcdGJ5dGVPZmZzZXQ6IG51bWJlcixcblx0XHRjYjogVW5pZm9ybUZ1bmMgfCBudW1iZXIgfCBvYmplY3QsXG5cdFx0Y291bnQ/OiBudW1iZXJcblx0KSB7XG5cdFx0c3VwZXIodW5pZm9ybU5hbWUsIGNiLCAwKTtcblx0XHRjb25zdCBieXRlc1BlckVsZW1lbnQgPSBGbG9hdDMyQXJyYXkuQllURVNfUEVSX0VMRU1FTlQ7XG5cdFx0dGhpcy5fc3ViRGF0YVNpemUgPSBVbmlmb3JtUG9pbnRMaWdodFNoYWRvd3MudW5pZm9ybVNpemU7XG5cdFx0dGhpcy5ieXRlU2l6ZSA9IGNvdW50ICogYnl0ZXNQZXJFbGVtZW50ICogdGhpcy5fc3ViRGF0YVNpemU7XG5cdFx0dGhpcy5idWZmZXIgPSBuZXcgRmxvYXQzMkFycmF5KGJ1ZmZlci5idWZmZXIsIGJ5dGVPZmZzZXQsIHRoaXMuYnl0ZVNpemUgLyA0KTtcblx0XHR0aGlzLnR5cGUgPSBcInBvaW50TGlnaHRTaGFkb3dzXCI7XG5cdFx0dGhpcy5fbmVhclZhbHVlID0gbnVsbDtcblx0XHR0aGlzLl9mYXJWYWx1ZSA9IG51bGw7XG5cdH1cblx0c2V0KCkge1xuXHRcdHRoaXMubGlnaHRzID0gdGhpcy5nZXRWYWx1ZSgpO1xuXHRcdHRoaXMubGlnaHRzLmZvckVhY2goKHBvaW50TGlnaHQsIGluZGV4KSA9PiB7XG5cdFx0XHR0aGlzLnNldFN1YkRhdGEocG9pbnRMaWdodCwgaW5kZXgpO1xuXHRcdH0pO1xuXHRcdHJldHVybiB0aGlzLmRpcnR5O1xuXHR9XG5cdHByaXZhdGUgc2V0U3ViRGF0YShwb2ludExpZ2h0OiBQb2ludExpZ2h0LCBpbmRleDogbnVtYmVyKSB7XG5cdFx0Y29uc3Qgb2Zmc2V0ID0gaW5kZXggKiB0aGlzLl9zdWJEYXRhU2l6ZTtcblxuXHRcdGlmIChwb2ludExpZ2h0LnNoYWRvdy52cE1hdHJpeEFycmF5RGlydHkpIHtcblx0XHRcdHBvaW50TGlnaHQuc2hhZG93LnZwTWF0cml4QXJyYXlEaXJ0eSA9IGZhbHNlO1xuXHRcdFx0Y29uc3QgdnBNYXRyaXhBcnJheSA9IHBvaW50TGlnaHQuc2hhZG93LmNhbWVyYS52cE1hdHJpeEFycmF5O1xuXHRcdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCB2cE1hdHJpeEFycmF5Lmxlbmd0aDsgaSsrKSB7XG5cdFx0XHRcdGNvbnN0IHZwTWF0cml4ID0gdnBNYXRyaXhBcnJheVtpXTtcblx0XHRcdFx0dGhpcy5kaXJ0eSA9IHNldERhdGFUb1R5cGVBcnJheSh0aGlzLmJ1ZmZlciwgdnBNYXRyaXgudG9BcnJheSgpLCBvZmZzZXQgKyAwICsgMTYgKiBpKTsgLy8gYnl0ZU9mZnNldD05OCAqIDQ7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0aWYgKHBvaW50TGlnaHQuc2hhZG93LnZpZXdQb3J0RGlydHkpIHtcblx0XHRcdHBvaW50TGlnaHQuc2hhZG93LnZpZXdQb3J0RGlydHkgPSBmYWxzZTtcblx0XHRcdGZvciAobGV0IGkgPSAwOyBpIDwgNjsgaSsrKSB7XG5cdFx0XHRcdHRoaXMuZGlydHkgPSBzZXREYXRhVG9UeXBlQXJyYXkoXG5cdFx0XHRcdFx0dGhpcy5idWZmZXIsXG5cdFx0XHRcdFx0cG9pbnRMaWdodC5zaGFkb3cudmlld3BvcnRzW2ldLnRvQXJyYXkoKSxcblx0XHRcdFx0XHRvZmZzZXQgKyA5NiArIDQgKiBpXG5cdFx0XHRcdCk7IC8vIGJ5dGVPZmZzZXQ9MDtcblx0XHRcdH1cblx0XHR9XG5cblx0XHRjb25zdCBuZWFyVmFsdWUgPSBwb2ludExpZ2h0LnNoYWRvdy5jYW1lcmEubmVhcjtcblx0XHRpZiAobmVhclZhbHVlICE9IHRoaXMuX25lYXJWYWx1ZSkge1xuXHRcdFx0dGhpcy5fbmVhclZhbHVlID0gbmVhclZhbHVlO1xuXHRcdFx0dGhpcy5kaXJ0eSA9IHNldERhdGFUb1R5cGVBcnJheSh0aGlzLmJ1ZmZlciwgdGhpcy5fbmVhclZhbHVlLCBvZmZzZXQgKyAxMjApOyAvLyBieXRlT2Zmc2V0PTA7XG5cdFx0fVxuXHRcdGNvbnN0IGZhclZhbHVlID0gcG9pbnRMaWdodC5zaGFkb3cuY2FtZXJhLmZhcjtcblx0XHRpZiAoZmFyVmFsdWUgIT0gdGhpcy5fZmFyVmFsdWUpIHtcblx0XHRcdHRoaXMuX2ZhclZhbHVlID0gZmFyVmFsdWU7XG5cdFx0XHR0aGlzLmRpcnR5ID0gc2V0RGF0YVRvVHlwZUFycmF5KHRoaXMuYnVmZmVyLCB0aGlzLl9mYXJWYWx1ZSwgb2Zmc2V0ICsgMTIxKTsgLy8gYnl0ZU9mZnNldD0xO1xuXHRcdH1cblx0fVxufVxuZXhwb3J0IGNsYXNzIFVuaWZvcm1EaXJ0ZWN0TGlnaHRzIGV4dGVuZHMgVW5pZm9ybTxEaXJlY3Rpb25hbExpZ2h0PiB7XG5cdHN0YXRpYyBhbGlnbiA9IDE2O1xuXHRsaWdodHM6IEFycmF5PERpcmVjdGlvbmFsTGlnaHQ+O1xuXHRjb25zdHJ1Y3Rvcihcblx0XHR1bmlmb3JtTmFtZTogc3RyaW5nLFxuXHRcdGJ1ZmZlcjogRmxvYXQzMkFycmF5LFxuXHRcdGJ5dGVPZmZzZXQ6IG51bWJlcixcblx0XHRjYjogVW5pZm9ybUZ1bmMgfCBudW1iZXIgfCBvYmplY3QsXG5cdFx0Y291bnQ/OiBudW1iZXJcblx0KSB7XG5cdFx0c3VwZXIodW5pZm9ybU5hbWUsIGNiLCAwKTtcblx0XHR0aGlzLmNiID0gY2I7XG5cdFx0dGhpcy5ieXRlU2l6ZSA9IGNvdW50ICogMzI7XG5cdFx0dGhpcy5idWZmZXIgPSBuZXcgRmxvYXQzMkFycmF5KGJ1ZmZlci5idWZmZXIsIGJ5dGVPZmZzZXQsIHRoaXMuYnl0ZVNpemUgLyA0KTtcblx0XHR0aGlzLnR5cGUgPSBcImRpcnRlY3RMaWdodHNcIjtcblx0fVxuXHRzZXQoKSB7XG5cdFx0dGhpcy5saWdodHMgPSB0aGlzLmdldFZhbHVlKCk7XG5cdFx0dGhpcy5saWdodHMuZm9yRWFjaCgoZGlyZWN0aW9uYWxMaWdodCwgaW5kZXgpID0+IHtcblx0XHRcdHRoaXMuc2V0U3ViRGF0YShkaXJlY3Rpb25hbExpZ2h0LCBpbmRleCk7XG5cdFx0fSk7XG5cdFx0cmV0dXJuIHRoaXMuZGlydHk7XG5cdH1cblx0cHJpdmF0ZSBzZXRTdWJEYXRhKGRpcmVjdGlvbmFsTGlnaHQ6IERpcmVjdGlvbmFsTGlnaHQsIGluZGV4OiBudW1iZXIpIHtcblx0XHRjb25zdCBvZmZzZXQgPSBpbmRleCAqIDg7XG5cdFx0aWYgKGRpcmVjdGlvbmFsTGlnaHQuZGlydGVjdERpcnR5KSB7XG5cdFx0XHRkaXJlY3Rpb25hbExpZ2h0LmRpcnRlY3REaXJ0eSA9IGZhbHNlO1xuXHRcdFx0dGhpcy5kaXJ0eSA9IHNldERhdGFUb1R5cGVBcnJheSh0aGlzLmJ1ZmZlciwgZGlyZWN0aW9uYWxMaWdodC5kaXJlY3Rpb25hbC50b0FycmF5KCksIG9mZnNldCArIDApOyAvLyBieXRlT2Zmc2V0PTE2O1xuXHRcdH1cblx0XHRpZiAoZGlyZWN0aW9uYWxMaWdodC5jb2xvckRpcnR5KSB7XG5cdFx0XHRkaXJlY3Rpb25hbExpZ2h0LmNvbG9yRGlydHkgPSBmYWxzZTtcblx0XHRcdHRoaXMuZGlydHkgPSBzZXREYXRhVG9UeXBlQXJyYXkodGhpcy5idWZmZXIsIGRpcmVjdGlvbmFsTGlnaHQuY29sb3IudG9BcnJheSgpLCBvZmZzZXQgKyA0KTsgLy8gYnl0ZU9mZnNldD0zMjtcblx0XHR9XG5cdH1cbn1cblxuZXhwb3J0IGNsYXNzIFVuaWZvcm1EaXJ0ZWN0TGlnaHRTaGFkb3dzIGV4dGVuZHMgVW5pZm9ybTxEaXJlY3Rpb25hbExpZ2h0PiB7XG5cdHN0YXRpYyBhbGlnbiA9IDE2O1xuXHRzdGF0aWMgdW5pZm9ybVNpemUgPSAxNjtcblx0bGlnaHRzOiBBcnJheTxEaXJlY3Rpb25hbExpZ2h0Pjtcblx0cHJpdmF0ZSBfc3ViRGF0YVNpemU6IG51bWJlcjtcblxuXHRjb25zdHJ1Y3Rvcihcblx0XHR1bmlmb3JtTmFtZTogc3RyaW5nLFxuXHRcdGJ1ZmZlcjogRmxvYXQzMkFycmF5LFxuXHRcdGJ5dGVPZmZzZXQ6IG51bWJlcixcblx0XHRjYjogVW5pZm9ybUZ1bmMgfCBudW1iZXIgfCBvYmplY3QsXG5cdFx0Y291bnQ/OiBudW1iZXJcblx0KSB7XG5cdFx0c3VwZXIodW5pZm9ybU5hbWUsIGNiLCAwKTtcblx0XHRjb25zdCBieXRlc1BlckVsZW1lbnQgPSBGbG9hdDMyQXJyYXkuQllURVNfUEVSX0VMRU1FTlQ7XG5cdFx0dGhpcy5fc3ViRGF0YVNpemUgPSBVbmlmb3JtRGlydGVjdExpZ2h0U2hhZG93cy51bmlmb3JtU2l6ZTtcblx0XHR0aGlzLmJ5dGVTaXplID0gY291bnQgKiBieXRlc1BlckVsZW1lbnQgKiB0aGlzLl9zdWJEYXRhU2l6ZTtcblx0XHR0aGlzLmJ1ZmZlciA9IG5ldyBGbG9hdDMyQXJyYXkoYnVmZmVyLmJ1ZmZlciwgYnl0ZU9mZnNldCwgdGhpcy5ieXRlU2l6ZSAvIDQpO1xuXHRcdHRoaXMudHlwZSA9IFwiZGlydGVjdExpZ2h0U2hhZG93c1wiO1xuXHR9XG5cdHNldCgpIHtcblx0XHR0aGlzLmxpZ2h0cyA9IHRoaXMuZ2V0VmFsdWUoKTtcblx0XHR0aGlzLmxpZ2h0cy5mb3JFYWNoKChkaXJlY3Rpb25hbExpZ2h0LCBpbmRleCkgPT4ge1xuXHRcdFx0dGhpcy5zZXRTdWJEYXRhKGRpcmVjdGlvbmFsTGlnaHQsIGluZGV4KTtcblx0XHR9KTtcblx0XHRyZXR1cm4gdGhpcy5kaXJ0eTtcblx0fVxuXHRwcml2YXRlIHNldFN1YkRhdGEoZGlyZWN0aW9uYWxMaWdodDogRGlyZWN0aW9uYWxMaWdodCwgaW5kZXg6IG51bWJlcikge1xuXHRcdGNvbnN0IG9mZnNldCA9IGluZGV4ICogdGhpcy5fc3ViRGF0YVNpemU7XG5cdFx0aWYgKGRpcmVjdGlvbmFsTGlnaHQuc2hhZG93LnZwTWF0cml4RGlydHkpIHtcblx0XHRcdGRpcmVjdGlvbmFsTGlnaHQuc2hhZG93LnZwTWF0cml4RGlydHkgPSBmYWxzZTtcblx0XHRcdHRoaXMuZGlydHkgPSBzZXREYXRhVG9UeXBlQXJyYXkodGhpcy5idWZmZXIsIGRpcmVjdGlvbmFsTGlnaHQuc2hhZG93LmNhbWVyYS52cE1hdHJpeC50b0FycmF5KCksIG9mZnNldCArIDApOyAvLyBieXRlT2Zmc2V0PTE2O1xuXHRcdH1cblx0fVxufVxuZnVuY3Rpb24gc2V0RGF0YVRvVHlwZUFycmF5KGJ1ZmZlciwgZGF0YSwgb2Zmc2V0KSB7XG5cdGlmIChBcnJheS5pc0FycmF5KGRhdGEpKSB7XG5cdFx0ZGF0YS5mb3JFYWNoKCh2YWx1ZSwgaW5kZXgpID0+IHtcblx0XHRcdGJ1ZmZlcltpbmRleCArIG9mZnNldF0gPSB2YWx1ZTtcblx0XHR9KTtcblx0fSBlbHNlIHtcblx0XHRidWZmZXJbb2Zmc2V0XSA9IGRhdGE7XG5cdH1cblx0cmV0dXJuIHRydWU7XG59XG4iLCJpbXBvcnQgeyBCdWZmZXJCaW5kaW5nVHlwZSwgQnVmZmVyVXNhZ2UsIFNoYWRlclN0YWdlIH0gZnJvbSBcIi4uL2NvcmUvV2ViR1BVQ29uc3RhbnRcIjtcbmltcG9ydCB7IFVuaWZvcm1GdW5jLCBVbmlmb3JtRW51bSB9IGZyb20gXCIuLi9jb3JlL1dlYkdQVVR5cGVzXCI7XG5pbXBvcnQgZGVmYXVsdFZhbHVlIGZyb20gXCIuLi91dGlscy9kZWZhdWx0VmFsdWVcIjtcbmltcG9ydCBCdWZmZXIgZnJvbSBcIi4vQnVmZmVyXCI7XG5cbmltcG9ydCB7XG5cdFVuaWZvcm0sXG5cdFVuaWZvcm1Db2xvcixcblx0VW5pZm9ybURpcnRlY3RMaWdodHMsXG5cdFVuaWZvcm1EaXJ0ZWN0TGlnaHRTaGFkb3dzLFxuXHRVbmlmb3JtRmxvYXQsXG5cdFVuaWZvcm1GbG9hdEFycmF5LFxuXHRVbmlmb3JtRmxvYXRWZWMyLFxuXHRVbmlmb3JtRmxvYXRWZWMzLFxuXHRVbmlmb3JtRmxvYXRWZWM0LFxuXHRVbmlmb3JtTWF0Mixcblx0VW5pZm9ybU1hdDMsXG5cdFVuaWZvcm1NYXQ0LFxuXHRVbmlmb3JtTWF0cml4NEFycmF5LFxuXHRVbmlmb3JtUG9pbnRMaWdodHMsXG5cdFVuaWZvcm1Qb2ludExpZ2h0U2hhZG93cyxcblx0VW5pZm9ybVNwb3RMaWdodHMsXG5cdFVuaWZvcm1TcG90TGlnaHRTaGFkb3dzLFxuXHRVbmlmb3JtVWludCxcblx0VW5pZm9ybVZlYzJBcnJheSxcblx0VW5pZm9ybVZlYzNBcnJheSxcblx0VW5pZm9ybVZlYzRBcnJheSxcblx0VW5pZm9ybVN0cnVjdEFycmF5XG59IGZyb20gXCIuL1VuaWZvcm1zXCI7XG5leHBvcnQgZGVmYXVsdCBjbGFzcyBVbmlmb3JtQnVmZmVyIHtcblx0cHVibGljIHR5cGU6IHN0cmluZztcblx0cHVibGljIGhhc0R5bmFtaWNPZmZzZXQ6IGJvb2xlYW47XG5cdHB1YmxpYyBtaW5CaW5kaW5nU2l6ZTogbnVtYmVyO1xuXHRwcml2YXRlIF91bmlmb3JtU3RydWN0OiBNYXA8c3RyaW5nLCBVbmlmb3JtPGFueT4+O1xuXHRwcml2YXRlIF9idWZmZXJTaXplOiBudW1iZXI7XG5cdHByaXZhdGUgbGFiZWw6IHN0cmluZztcblx0cHVibGljIGJ5dGVPZmZzZXQ6IG51bWJlcjtcblx0cHVibGljIHVuaWZvcm1EaXJ0eTogYm9vbGVhbjtcblx0cHVibGljIGJpbmRpbmc6IG51bWJlcjtcblx0cHVibGljIHZpc2liaWxpdHk6IFNoYWRlclN0YWdlO1xuXHRwdWJsaWMgdXNhZ2U6IEJ1ZmZlclVzYWdlO1xuXHRwdWJsaWMgYnVmZmVyOiBCdWZmZXI7XG5cdHB1YmxpYyBkYXRhQnVmZmVyOiBGbG9hdDMyQXJyYXk7XG5cdHB1YmxpYyBvZmZzZXQ6IG51bWJlcjtcblx0cHVibGljIG1heE9mZnNldDogbnVtYmVyO1xuXHRwdWJsaWMgaXNVbmlmb3JtQnVmZmVyOiBib29sZWFuO1xuXHRwdWJsaWMgbmFtZTogc3RyaW5nO1xuXHRwcml2YXRlIHN0YXRpYyBVbmlmb3JtVHlwZSA9IHtcblx0XHRbVW5pZm9ybUVudW0uVW5pZm9ybVVpbnRdOiBVbmlmb3JtVWludCxcblx0XHRbVW5pZm9ybUVudW0uRmxvYXRdOiBVbmlmb3JtRmxvYXQsXG5cdFx0W1VuaWZvcm1FbnVtLkZsb2F0VmVjMl06IFVuaWZvcm1GbG9hdFZlYzIsXG5cdFx0W1VuaWZvcm1FbnVtLkZsb2F0VmVjM106IFVuaWZvcm1GbG9hdFZlYzMsXG5cdFx0W1VuaWZvcm1FbnVtLkZsb2F0VmVjNF06IFVuaWZvcm1GbG9hdFZlYzQsXG5cdFx0W1VuaWZvcm1FbnVtLk1hdDJdOiBVbmlmb3JtTWF0Mixcblx0XHRbVW5pZm9ybUVudW0uTWF0M106IFVuaWZvcm1NYXQzLFxuXHRcdFtVbmlmb3JtRW51bS5NYXQ0XTogVW5pZm9ybU1hdDQsXG5cdFx0W1VuaWZvcm1FbnVtLkNvbG9yXTogVW5pZm9ybUNvbG9yLFxuXHRcdFtVbmlmb3JtRW51bS5GbG9hdEFycmF5XTogVW5pZm9ybUZsb2F0QXJyYXksXG5cdFx0W1VuaWZvcm1FbnVtLlZlYzJBcnJheV06IFVuaWZvcm1WZWMyQXJyYXksXG5cdFx0W1VuaWZvcm1FbnVtLlZlYzNBcnJheV06IFVuaWZvcm1WZWMzQXJyYXksXG5cdFx0W1VuaWZvcm1FbnVtLlZlYzRBcnJheV06IFVuaWZvcm1WZWM0QXJyYXksXG5cdFx0W1VuaWZvcm1FbnVtLk1hdDRBcnJheV06IFVuaWZvcm1NYXRyaXg0QXJyYXksXG5cdFx0W1VuaWZvcm1FbnVtLlBvaW50TGlnaHRzXTogVW5pZm9ybVBvaW50TGlnaHRzLFxuXHRcdFtVbmlmb3JtRW51bS5TcG90TGlnaHRzXTogVW5pZm9ybVNwb3RMaWdodHMsXG5cdFx0W1VuaWZvcm1FbnVtLkRpcnRlY3RMaWdodHNdOiBVbmlmb3JtRGlydGVjdExpZ2h0cyxcblx0XHRbVW5pZm9ybUVudW0uUG9pbnRMaWdodFNoYWRvd3NdOiBVbmlmb3JtUG9pbnRMaWdodFNoYWRvd3MsXG5cdFx0W1VuaWZvcm1FbnVtLlNwb3RMaWdodFNoYWRvd3NdOiBVbmlmb3JtU3BvdExpZ2h0U2hhZG93cyxcblx0XHRbVW5pZm9ybUVudW0uRGlydGVjdExpZ2h0U2hhZG93c106IFVuaWZvcm1EaXJ0ZWN0TGlnaHRTaGFkb3dzLFxuXHRcdFtVbmlmb3JtRW51bS5Vbmlmb3JtU3RydWN0QXJyYXldOiBVbmlmb3JtU3RydWN0QXJyYXlcblx0fTtcblx0Y29uc3RydWN0b3Iob3B0aW9uczogVW5pZm9ybUJ1ZmZlclBhcmFtcykge1xuXHRcdHRoaXMudHlwZSA9IGRlZmF1bHRWYWx1ZShvcHRpb25zLnR5cGUsIFwidW5pZm9ybVwiKTtcblx0XHR0aGlzLmxhYmVsID0gZGVmYXVsdFZhbHVlKG9wdGlvbnMubGFiZWwsIFwiXCIpO1xuXHRcdHRoaXMubmFtZSA9IGRlZmF1bHRWYWx1ZShvcHRpb25zLmxhYmVsLCBcIlwiKTtcblx0XHR0aGlzLmhhc0R5bmFtaWNPZmZzZXQgPSBvcHRpb25zLmhhc0R5bmFtaWNPZmZzZXQgPz8gZmFsc2U7XG5cdFx0dGhpcy5taW5CaW5kaW5nU2l6ZSA9IG9wdGlvbnMubWluQmluZGluZ1NpemUgPz8gMDtcblx0XHR0aGlzLmJpbmRpbmcgPSBvcHRpb25zLmJpbmRpbmcgPz8gMDtcblx0XHR0aGlzLnZpc2liaWxpdHkgPSBkZWZhdWx0VmFsdWUob3B0aW9ucy52aXNpYmlsaXR5LCBTaGFkZXJTdGFnZS5GcmFnbWVudCB8IFNoYWRlclN0YWdlLlZlcnRleCk7XG5cdFx0dGhpcy51c2FnZSA9IGRlZmF1bHRWYWx1ZShvcHRpb25zLnVzYWdlLCBCdWZmZXJVc2FnZS5Vbmlmb3JtIHwgQnVmZmVyVXNhZ2UuQ29weURzdCk7XG5cdFx0dGhpcy5fdW5pZm9ybVN0cnVjdCA9IG5ldyBNYXAoKTtcblx0XHR0aGlzLnVuaWZvcm1EaXJ0eSA9IHRydWU7XG5cdFx0dGhpcy5fYnVmZmVyU2l6ZSA9IG9wdGlvbnMuc2l6ZTtcblx0XHR0aGlzLmJ1ZmZlciA9IG9wdGlvbnMuYnVmZmVyO1xuXHRcdHRoaXMub2Zmc2V0ID0gMDtcblx0XHR0aGlzLmRhdGFCdWZmZXIgPSBkZWZhdWx0VmFsdWUob3B0aW9ucy5kYXRhQnVmZmVyLCBuZXcgRmxvYXQzMkFycmF5KGRlZmF1bHRWYWx1ZSh0aGlzLl9idWZmZXJTaXplLCA0MDApKSk7XG5cdFx0dGhpcy5ieXRlT2Zmc2V0ID0gMDtcblx0XHR0aGlzLmlzVW5pZm9ybUJ1ZmZlciA9IHRydWU7XG5cdFx0dGhpcy5tYXhPZmZzZXQgPSBvcHRpb25zLm1heE9mZnNldCA/PyAwO1xuXHR9XG5cdGdldCBsYXlvdXRUeXBlKCkge1xuXHRcdHJldHVybiB7XG5cdFx0XHR0eXBlOiB0aGlzLnR5cGUsXG5cdFx0XHRoYXNEeW5hbWljT2Zmc2V0OiB0aGlzLmhhc0R5bmFtaWNPZmZzZXQsXG5cdFx0XHRtaW5CaW5kaW5nU2l6ZTogdGhpcy5taW5CaW5kaW5nU2l6ZVxuXHRcdH07XG5cdH1cblx0Z2V0IGJ1ZmZlclNpemUoKSB7XG5cdFx0cmV0dXJuIHRoaXMuX2J1ZmZlclNpemUgPz8gdGhpcy51bmlmb3Jtc1NpemUgKiA0O1xuXHR9XG5cdGdldCB1bmlmb3Jtc1NpemUoKSB7XG5cdFx0Ly8gaHR0cHM6Ly9ncHV3ZWIuZ2l0aHViLmlvL2dwdXdlYi93Z3NsLyNhZGRyZXNzLXNwYWNlLWxheW91dC1jb25zdHJhaW50c1xuXHRcdHJldHVybiB0aGlzLl9idWZmZXJTaXplICE9IHVuZGVmaW5lZCA/IHRoaXMuX2J1ZmZlclNpemUgLyA0IDogTWF0aC5jZWlsKHRoaXMuYnl0ZU9mZnNldCAvIDE2KSAqIDE2O1xuXHR9XG5cdGJpbmQoZGV2aWNlOiBHUFVEZXZpY2UpIHtcblx0XHR0aGlzLl91bmlmb3JtU3RydWN0LmZvckVhY2goKHVuaWZvcm0pID0+IHtcblx0XHRcdGNvbnN0IHJlc3VsdCA9IHVuaWZvcm0uc2V0KCk7XG5cdFx0XHRpZiAodW5pZm9ybT8uZGlydHkgIT0gdW5kZWZpbmVkKSB1bmlmb3JtLmRpcnR5ID0gZmFsc2U7XG5cdFx0XHRpZiAocmVzdWx0ICE9IHVuZGVmaW5lZCAmJiB0aGlzLnVuaWZvcm1EaXJ0eSA9PSBmYWxzZSkgdGhpcy51bmlmb3JtRGlydHkgPSByZXN1bHQ7XG5cdFx0fSk7XG5cdFx0aWYgKHRoaXMudW5pZm9ybURpcnR5KSB7XG5cdFx0XHR0aGlzLnVuaWZvcm1EaXJ0eSA9IGZhbHNlO1xuXHRcdFx0aWYgKCF0aGlzLmJ1ZmZlcikgdGhpcy5idWZmZXIgPSBCdWZmZXIuY3JlYXRlVW5pZm9ybUJ1ZmZlcih0aGlzLmxhYmVsLCBkZXZpY2UsIHRoaXMuYnVmZmVyU2l6ZSwgdGhpcy51c2FnZSk7XG5cdFx0XHRpZiAodGhpcy50eXBlICE9IEJ1ZmZlckJpbmRpbmdUeXBlLlN0b3JhZ2UpXG5cdFx0XHRcdHRoaXMuYnVmZmVyLnNldFN1YkRhdGEoXG5cdFx0XHRcdFx0MCxcblx0XHRcdFx0XHR0aGlzLmRhdGFCdWZmZXIuc2xpY2UoMCwgZGVmYXVsdFZhbHVlKHRoaXM/LmJ1ZmZlclNpemUgLyA0LCB0aGlzLnVuaWZvcm1zU2l6ZSkpXG5cdFx0XHRcdCk7XG5cdFx0fVxuXHR9XG5cdHB1YmxpYyBnZXRVbmlmb3JtQnVmZmVyU3RydWN0KCkge1xuXHRcdGxldCB1bmlmb3JtU3RydWN0ID0gYHN0cnVjdCBNYXRlcmlhbFVuaWZvcm0ge1xcbiBgO1xuXHRcdHRoaXMuX3VuaWZvcm1TdHJ1Y3QuZm9yRWFjaCgodW5pZm9ybSkgPT4ge1xuXHRcdFx0dW5pZm9ybVN0cnVjdCArPSB0aGlzLmNyZWF0ZVVuaWZvcm1TdHJpbmcodW5pZm9ybSk7XG5cdFx0fSk7XG5cdFx0dW5pZm9ybVN0cnVjdCArPSBgfVxcbmA7XG5cdFx0cmV0dXJuIHVuaWZvcm1TdHJ1Y3Q7XG5cdH1cblx0cHJpdmF0ZSBjcmVhdGVVbmlmb3JtU3RyaW5nKHVuaWZvcm0pIHtcblx0XHRsZXQgcmVzdWx0ID0gYGA7XG5cdFx0c3dpdGNoICh1bmlmb3JtLnR5cGUpIHtcblx0XHRcdGNhc2UgXCJ2ZWMxXCI6XG5cdFx0XHRcdHJlc3VsdCA9IGAke3VuaWZvcm0ubmFtZX0gOmYzMixcXG5gO1xuXHRcdFx0XHRicmVhaztcblx0XHRcdGNhc2UgXCJ2ZWMyXCI6XG5cdFx0XHRcdHJlc3VsdCA9IGAke3VuaWZvcm0ubmFtZX0gOnZlYzI8ZjMyPixcXG5gO1xuXHRcdFx0XHRicmVhaztcblx0XHRcdGNhc2UgXCJ2ZWMzXCI6XG5cdFx0XHRcdHJlc3VsdCA9IGAke3VuaWZvcm0ubmFtZX0gOnZlYzM8ZjMyPixcXG5gO1xuXHRcdFx0XHRicmVhaztcblx0XHRcdGNhc2UgXCJ2ZWM0XCI6XG5cdFx0XHRcdHJlc3VsdCA9IGAke3VuaWZvcm0ubmFtZX0gOnZlYzQ8ZjMyPixcXG5gO1xuXHRcdFx0XHRicmVhaztcblx0XHRcdGNhc2UgXCJtYXQyXCI6XG5cdFx0XHRcdHJlc3VsdCA9IGAke3VuaWZvcm0ubmFtZX0gOm1hdDJ4MjxmMzI+LFxcbmA7XG5cdFx0XHRcdGJyZWFrO1xuXHRcdFx0Y2FzZSBcIm1hdDNcIjpcblx0XHRcdFx0cmVzdWx0ID0gYCR7dW5pZm9ybS5uYW1lfSA6bWF0M3gzPGYzMj4sXFxuYDtcblx0XHRcdFx0YnJlYWs7XG5cdFx0XHRjYXNlIFwibWF0NFwiOlxuXHRcdFx0XHRyZXN1bHQgPSBgJHt1bmlmb3JtLm5hbWV9IDptYXQ0eDQ8ZjMyPixcXG5gO1xuXHRcdFx0XHRicmVhaztcblx0XHR9XG5cdFx0cmV0dXJuIHJlc3VsdDtcblx0fVxuXHRjb250YWlucyhuYW1lOiBzdHJpbmcpOiBVbmlmb3JtPGFueT4ge1xuXHRcdHJldHVybiB0aGlzLl91bmlmb3JtU3RydWN0LmdldChuYW1lKTtcblx0fVxuXHRyZXBsYWNlVW5pZm9ybVZhbHVlKG5hbWU6IHN0cmluZywgdmFsdWU6IFVuaWZvcm1GdW5jIHwgbnVtYmVyIHwgb2JqZWN0KSB7XG5cdFx0Y29uc3QgdW5pZm9ybSA9IHRoaXMuX3VuaWZvcm1TdHJ1Y3QuZ2V0KG5hbWUpO1xuXHRcdGlmICghdW5pZm9ybSkgcmV0dXJuO1xuXHRcdHVuaWZvcm0uY2IgPSB2YWx1ZTtcblx0fVxuXHQvLyB1bmlmb3JtQnVmZmVyLnNldFZlYzNBcnJheSgndGVzdCcsKCk9PntyZXR1cm4gW25ldyBWZWN0b3IzKDEsMCwwKSxuZXcgVmVjdG9yMygxLDAuOCwwLjUpXX0sMik7XG5cdC8vIHVuaWZvcm1CdWZmZXIuc2V0RmxvYXRBcnJheSgndGVzdDEnLCgpPT57cmV0dXJuIFswLjUsMC41LDEuMF19LDMpO1xuXHQvLyB1bmlmb3JtQnVmZmVyLnNldFZlYzRBcnJheSgndGVzdDQnLCgpPT57cmV0dXJuIFtuZXcgVmVjdG9yNCgwLjUsMC42LDAuMiwxLjApLG5ldyBWZWN0b3I0KDAuNSwwLjgsMC44LDEuMCldfSwyKTtcblx0Ly8gdW5pZm9ybUJ1ZmZlci5zZXRWZWMyQXJyYXkoJ3Rlc3QyJywoKT0+e3JldHVybiBbbmV3IFZlY3RvcjIoMC41LDAuNiksbmV3IFZlY3RvcjIoMC41LDAuOCwpXX0sMik7XG5cdHNldFVuaWZvcm0obmFtZTogc3RyaW5nLCB2YWx1ZTogVW5pZm9ybUZ1bmMgfCBudW1iZXIgfCBvYmplY3QsIHVuaWZvcm1UeXBlOiBVbmlmb3JtRW51bSwgY291bnQ/OiBudW1iZXIpIHtcblx0XHRpZiAodGhpcy5fdW5pZm9ybVN0cnVjdC5nZXQobmFtZSkpIHJldHVybjtcblx0XHRjb25zdCBUeXBlVW5pZm9ybSA9IFVuaWZvcm1CdWZmZXIuVW5pZm9ybVR5cGVbdW5pZm9ybVR5cGVdO1xuXHRcdHRoaXMuYnl0ZU9mZnNldCArPSBVbmlmb3JtQnVmZmVyLmNoZWNrVW5pZm9ybU9mZnNldCh0aGlzLmJ5dGVPZmZzZXQsIFR5cGVVbmlmb3JtLmFsaWduKTtcblx0XHRjb25zdCB1bmlmb3JtID1cblx0XHRcdGNvdW50ICE9IHVuZGVmaW5lZFxuXHRcdFx0XHQ/IG5ldyBUeXBlVW5pZm9ybShuYW1lLCB0aGlzLmRhdGFCdWZmZXIsIHRoaXMuYnl0ZU9mZnNldCwgdmFsdWUsIGNvdW50KVxuXHRcdFx0XHQ6IG5ldyBUeXBlVW5pZm9ybShuYW1lLCB0aGlzLmRhdGFCdWZmZXIsIHRoaXMuYnl0ZU9mZnNldCwgdmFsdWUpO1xuXHRcdHRoaXMuX3VuaWZvcm1TdHJ1Y3Quc2V0KG5hbWUsIHVuaWZvcm0pO1xuXHRcdHRoaXMuYnl0ZU9mZnNldCArPSB1bmlmb3JtLmJ5dGVTaXplO1xuXHR9XG5cdHN0YXRpYyBjaGVja1VuaWZvcm1PZmZzZXQoYnl0ZVNpemU6IG51bWJlciwgQWxpZ246IG51bWJlcik6IG51bWJlciB7XG5cdFx0Ly8gZnJvbSBodHRwczovL2dwdXdlYi5naXRodWIuaW8vZ3B1d2ViL3dnc2wvI2FkZHJlc3Mtc3BhY2UtbGF5b3V0LWNvbnN0cmFpbnRzXG5cdFx0Ly8gcmV0dXJuIHRoaXMuaGFzRHluYW1pY09mZnNldFxuXHRcdC8vIFx0PyBNYXRoLmNlaWwoYnl0ZVNpemUgLyAyNTYpICogMjU2IC0gYnl0ZVNpemVcblx0XHQvLyBcdDogTWF0aC5jZWlsKGJ5dGVTaXplIC8gQWxpZ24pICogQWxpZ24gLSBieXRlU2l6ZTtcblx0XHRyZXR1cm4gTWF0aC5jZWlsKGJ5dGVTaXplIC8gQWxpZ24pICogQWxpZ24gLSBieXRlU2l6ZTtcblx0fVxuXHRkZXN0cm95KCkge1xuXHRcdHRoaXM/LmJ1ZmZlcj8uZGVzdHJveSgpO1xuXHR9XG59XG50eXBlIFVuaWZvcm1CdWZmZXJQYXJhbXMgPSB7XG5cdGxhYmVsOiBzdHJpbmc7XG5cdHR5cGU/OiBzdHJpbmc7XG5cdHVzYWdlPzogQnVmZmVyVXNhZ2U7XG5cdHNpemU/OiBudW1iZXI7XG5cdGRhdGFCdWZmZXI/OiBGbG9hdDMyQXJyYXk7XG5cdGJpbmRpbmc/OiBudW1iZXI7XG5cdGhhc0R5bmFtaWNPZmZzZXQ/OiBib29sZWFuO1xuXHRtaW5CaW5kaW5nU2l6ZT86IG51bWJlcjtcblx0bWF4T2Zmc2V0PzogbnVtYmVyO1xuXHRidWZmZXI/OiBCdWZmZXI7XG5cdHZpc2liaWxpdHk/OiBTaGFkZXJTdGFnZTtcbn07XG4iLCJpbXBvcnQgeyBJVW5pZm9ybSwgVW5pZm9ybUVudW0gfSBmcm9tIFwiLi4vY29yZS9XZWJHUFVUeXBlc1wiO1xuaW1wb3J0IHsgTWVzaCB9IGZyb20gXCIuLi9tZXNoL01lc2hcIjtcbmltcG9ydCBTaGFkZXJEYXRhIGZyb20gXCIuLi9yZW5kZXIvU2hhZGVyRGF0YVwiO1xuaW1wb3J0IFVuaWZvcm1CdWZmZXIgZnJvbSBcIi4uL3JlbmRlci9Vbmlmb3JtQnVmZmVyXCI7XG5jb25zdCB1bmlmb3JtQXJyYXlOYW1lcyA9IFtcImFycmF5PGYzMj5cIiwgXCJhcnJheTx2ZWMyPGYzMj4+XCIsIFwiYXJyYXk8dmVjMzxmMzI+PlwiLCBcImFycmF5PHZlYzQ8ZjMyPj5cIl07XG5leHBvcnQgZnVuY3Rpb24gY2hlY2tDb250YWluRmxvYXRUeXBlKHVuaWZvcm1zKSB7XG5cdGxldCByZXN1bHQgPSAwO1xuXHRsZXQgaGFzQXJyYXl0eXBlID0gZmFsc2U7XG5cdGNvbnN0IHVuaWZvcm1zTmFtZXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyh1bmlmb3Jtcyk7XG5cdHVuaWZvcm1zTmFtZXMubWFwKCh1bmlmb3Jtc05hbWUpID0+IHtcblx0XHRpZiAodW5pZm9ybXNbdW5pZm9ybXNOYW1lXS50eXBlID09IFwidGV4dHVyZVwiIHx8IHVuaWZvcm1zW3VuaWZvcm1zTmFtZV0udHlwZSA9PSBcInNhbXBsZXJcIikge1xuXHRcdFx0cmVzdWx0ICs9IDA7XG5cdFx0fSBlbHNlIHtcblx0XHRcdGlmIChcblx0XHRcdFx0dW5pZm9ybUFycmF5TmFtZXMuZmluZCgobmFtZSkgPT4ge1xuXHRcdFx0XHRcdHJldHVybiBuYW1lID09PSB1bmlmb3Jtc1t1bmlmb3Jtc05hbWVdLnR5cGU7XG5cdFx0XHRcdH0pXG5cdFx0XHQpIHtcblx0XHRcdFx0aGFzQXJyYXl0eXBlID0gdHJ1ZTtcblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHJlc3VsdCArPSAxO1xuXHRcdFx0fVxuXHRcdH1cblx0fSk7XG5cdHJldHVybiB7XG5cdFx0aGFzRmxvYXQ6IHJlc3VsdCxcblx0XHRoYXNBcnJheXR5cGVcblx0fTtcbn1cbmV4cG9ydCBmdW5jdGlvbiBhZGRVbmlmb3JtVG9TaGFkZXJEYXRhKFxuXHRuYW1lOiBzdHJpbmcsXG5cdHVuaWZvcm06IElVbmlmb3JtLFxuXHRzaGFkZXJEYXRhOiBTaGFkZXJEYXRhLFxuXHRtZXNoPzogTWVzaCxcblx0dW5pZm9ybUJ1ZmZlcj86IFVuaWZvcm1CdWZmZXJcbikge1xuXHRjb25zdCB2YWx1ZUlzRnVuYyA9IHVuaWZvcm0/LnZhbHVlIGluc3RhbmNlb2YgRnVuY3Rpb247XG5cdHN3aXRjaCAodW5pZm9ybS50eXBlKSB7XG5cdFx0Y2FzZSBcImYzMlwiOlxuXHRcdFx0dW5pZm9ybUJ1ZmZlci5zZXRVbmlmb3JtKFxuXHRcdFx0XHRuYW1lLFxuXHRcdFx0XHR2YWx1ZUlzRnVuY1xuXHRcdFx0XHRcdD8gdW5pZm9ybS52YWx1ZVxuXHRcdFx0XHRcdDogKCkgPT4ge1xuXHRcdFx0XHRcdFx0XHRyZXR1cm4gdW5pZm9ybS52YWx1ZTtcblx0XHRcdFx0XHQgIH0sXG5cdFx0XHRcdFVuaWZvcm1FbnVtLkZsb2F0XG5cdFx0XHQpO1xuXHRcdFx0YnJlYWs7XG5cdFx0Y2FzZSBcInZlYzI8ZjMyPlwiOlxuXHRcdFx0dW5pZm9ybUJ1ZmZlci5zZXRVbmlmb3JtKFxuXHRcdFx0XHRuYW1lLFxuXHRcdFx0XHR2YWx1ZUlzRnVuY1xuXHRcdFx0XHRcdD8gdW5pZm9ybS52YWx1ZVxuXHRcdFx0XHRcdDogKCkgPT4ge1xuXHRcdFx0XHRcdFx0XHRyZXR1cm4gdW5pZm9ybS52YWx1ZTtcblx0XHRcdFx0XHQgIH0sXG5cdFx0XHRcdFVuaWZvcm1FbnVtLkZsb2F0VmVjMlxuXHRcdFx0KTtcblx0XHRcdGJyZWFrO1xuXHRcdGNhc2UgXCJ2ZWMzPGYzMj5cIjpcblx0XHRcdHVuaWZvcm1CdWZmZXIuc2V0VW5pZm9ybShcblx0XHRcdFx0bmFtZSxcblx0XHRcdFx0dmFsdWVJc0Z1bmNcblx0XHRcdFx0XHQ/IHVuaWZvcm0udmFsdWVcblx0XHRcdFx0XHQ6ICgpID0+IHtcblx0XHRcdFx0XHRcdFx0cmV0dXJuIHVuaWZvcm0udmFsdWU7XG5cdFx0XHRcdFx0ICB9LFxuXHRcdFx0XHRVbmlmb3JtRW51bS5GbG9hdFZlYzNcblx0XHRcdCk7XG5cdFx0XHRicmVhaztcblx0XHRjYXNlIFwiY29sb3JcIjpcblx0XHRcdHVuaWZvcm1CdWZmZXIuc2V0VW5pZm9ybShcblx0XHRcdFx0bmFtZSxcblx0XHRcdFx0dmFsdWVJc0Z1bmNcblx0XHRcdFx0XHQ/IHVuaWZvcm0udmFsdWVcblx0XHRcdFx0XHQ6ICgpID0+IHtcblx0XHRcdFx0XHRcdFx0cmV0dXJuIHVuaWZvcm0udmFsdWU7XG5cdFx0XHRcdFx0ICB9LFxuXHRcdFx0XHRVbmlmb3JtRW51bS5Db2xvclxuXHRcdFx0KTtcblx0XHRcdGJyZWFrO1xuXHRcdGNhc2UgXCJ2ZWM0PGYzMj5cIjpcblx0XHRcdHVuaWZvcm1CdWZmZXIuc2V0VW5pZm9ybShcblx0XHRcdFx0bmFtZSxcblx0XHRcdFx0dmFsdWVJc0Z1bmNcblx0XHRcdFx0XHQ/IHVuaWZvcm0udmFsdWVcblx0XHRcdFx0XHQ6ICgpID0+IHtcblx0XHRcdFx0XHRcdFx0cmV0dXJuIHVuaWZvcm0udmFsdWU7XG5cdFx0XHRcdFx0ICB9LFxuXHRcdFx0XHRVbmlmb3JtRW51bS5GbG9hdFZlYzRcblx0XHRcdCk7XG5cdFx0XHRicmVhaztcblx0XHRjYXNlIFwibWF0MngyPGYzMj5cIjpcblx0XHRcdHVuaWZvcm1CdWZmZXIuc2V0VW5pZm9ybShcblx0XHRcdFx0bmFtZSxcblx0XHRcdFx0dmFsdWVJc0Z1bmNcblx0XHRcdFx0XHQ/IHVuaWZvcm0udmFsdWVcblx0XHRcdFx0XHQ6ICgpID0+IHtcblx0XHRcdFx0XHRcdFx0cmV0dXJuIHVuaWZvcm0udmFsdWU7XG5cdFx0XHRcdFx0ICB9LFxuXHRcdFx0XHRVbmlmb3JtRW51bS5NYXQyXG5cdFx0XHQpO1xuXHRcdFx0YnJlYWs7XG5cdFx0Y2FzZSBcIm1hdDN4MzxmMzI+XCI6XG5cdFx0XHR1bmlmb3JtQnVmZmVyLnNldFVuaWZvcm0oXG5cdFx0XHRcdG5hbWUsXG5cdFx0XHRcdHZhbHVlSXNGdW5jXG5cdFx0XHRcdFx0PyB1bmlmb3JtLnZhbHVlXG5cdFx0XHRcdFx0OiAoKSA9PiB7XG5cdFx0XHRcdFx0XHRcdHJldHVybiB1bmlmb3JtLnZhbHVlO1xuXHRcdFx0XHRcdCAgfSxcblx0XHRcdFx0VW5pZm9ybUVudW0uTWF0M1xuXHRcdFx0KTtcblx0XHRcdGJyZWFrO1xuXHRcdGNhc2UgXCJtYXQ0eDQ8ZjMyPlwiOlxuXHRcdFx0dW5pZm9ybUJ1ZmZlci5zZXRVbmlmb3JtKFxuXHRcdFx0XHRuYW1lLFxuXHRcdFx0XHR2YWx1ZUlzRnVuY1xuXHRcdFx0XHRcdD8gdW5pZm9ybS52YWx1ZVxuXHRcdFx0XHRcdDogKCkgPT5cblx0XHRcdFx0XHRcdFx0bmFtZSA9PSBcIm1vZGVsTWF0cml4XCJcblx0XHRcdFx0XHRcdFx0XHQ/IG1lc2g/Lm1vZGVsTWF0cml4XG5cdFx0XHRcdFx0XHRcdFx0OiBuYW1lID09PSBcIm5vcm1hbE1hdHJpeFwiXG5cdFx0XHRcdFx0XHRcdFx0PyBtZXNoPy5ub3JtYWxNYXRyaXhcblx0XHRcdFx0XHRcdFx0XHQ6IHVuaWZvcm0udmFsdWUsXG5cdFx0XHRcdFVuaWZvcm1FbnVtLk1hdDRcblx0XHRcdCk7XG5cdFx0XHRicmVhaztcblx0XHRjYXNlIFwiYXJyYXk8ZjMyPlwiOlxuXHRcdFx0dW5pZm9ybUJ1ZmZlci5zZXRVbmlmb3JtKFxuXHRcdFx0XHRuYW1lLFxuXHRcdFx0XHR2YWx1ZUlzRnVuY1xuXHRcdFx0XHRcdD8gdW5pZm9ybS52YWx1ZVxuXHRcdFx0XHRcdDogKCkgPT4ge1xuXHRcdFx0XHRcdFx0XHRyZXR1cm4gdW5pZm9ybS52YWx1ZTtcblx0XHRcdFx0XHQgIH0sXG5cdFx0XHRcdFVuaWZvcm1FbnVtLkZsb2F0QXJyYXksXG5cdFx0XHRcdHVuaWZvcm0udmFsdWUubGVuZ3RoXG5cdFx0XHQpO1xuXHRcdFx0YnJlYWs7XG5cdFx0Y2FzZSBcImFycmF5PHZlYzI8ZjMyPj5cIjpcblx0XHRcdHVuaWZvcm1CdWZmZXIuc2V0VW5pZm9ybShcblx0XHRcdFx0bmFtZSxcblx0XHRcdFx0dmFsdWVJc0Z1bmNcblx0XHRcdFx0XHQ/IHVuaWZvcm0udmFsdWVcblx0XHRcdFx0XHQ6ICgpID0+IHtcblx0XHRcdFx0XHRcdFx0cmV0dXJuIHVuaWZvcm0udmFsdWU7XG5cdFx0XHRcdFx0ICB9LFxuXHRcdFx0XHRVbmlmb3JtRW51bS5WZWMyQXJyYXksXG5cdFx0XHRcdHVuaWZvcm0udmFsdWUubGVuZ3RoXG5cdFx0XHQpO1xuXHRcdFx0YnJlYWs7XG5cdFx0Y2FzZSBcImFycmF5PHZlYzM8ZjMyPj5cIjpcblx0XHRcdHVuaWZvcm1CdWZmZXIuc2V0VW5pZm9ybShcblx0XHRcdFx0bmFtZSxcblx0XHRcdFx0dmFsdWVJc0Z1bmNcblx0XHRcdFx0XHQ/IHVuaWZvcm0udmFsdWVcblx0XHRcdFx0XHQ6ICgpID0+IHtcblx0XHRcdFx0XHRcdFx0cmV0dXJuIHVuaWZvcm0udmFsdWU7XG5cdFx0XHRcdFx0ICB9LFxuXHRcdFx0XHRVbmlmb3JtRW51bS5WZWMzQXJyYXksXG5cdFx0XHRcdHVuaWZvcm0udmFsdWUubGVuZ3RoXG5cdFx0XHQpO1xuXHRcdFx0YnJlYWs7XG5cdFx0Y2FzZSBcImFycmF5PHZlYzQ8ZjMyPj5cIjpcblx0XHRcdHVuaWZvcm1CdWZmZXIuc2V0VW5pZm9ybShcblx0XHRcdFx0bmFtZSxcblx0XHRcdFx0dmFsdWVJc0Z1bmNcblx0XHRcdFx0XHQ/IHVuaWZvcm0udmFsdWVcblx0XHRcdFx0XHQ6ICgpID0+IHtcblx0XHRcdFx0XHRcdFx0cmV0dXJuIHVuaWZvcm0udmFsdWU7XG5cdFx0XHRcdFx0ICB9LFxuXHRcdFx0XHRVbmlmb3JtRW51bS5WZWM0QXJyYXksXG5cdFx0XHRcdHVuaWZvcm0udmFsdWUubGVuZ3RoXG5cdFx0XHQpO1xuXHRcdFx0YnJlYWs7XG5cdFx0Y2FzZSBcInRleHR1cmVcIjpcblx0XHRjYXNlIFwic3RvcmFnZVRleHR1cmVcIjpcblx0XHRcdHNoYWRlckRhdGEuc2V0VGV4dHVyZShcblx0XHRcdFx0bmFtZSxcblx0XHRcdFx0dmFsdWVJc0Z1bmNcblx0XHRcdFx0XHQ/IHVuaWZvcm0udmFsdWVcblx0XHRcdFx0XHQ6ICgpID0+IHtcblx0XHRcdFx0XHRcdFx0cmV0dXJuIHVuaWZvcm0udmFsdWU7XG5cdFx0XHRcdFx0ICB9LFxuXHRcdFx0XHR1bmlmb3JtPy5iaW5kaW5nLFxuXHRcdFx0XHR1bmlmb3JtPy50eXBlLFxuXHRcdFx0XHR1bmlmb3JtPy52aXNpYmlsaXR5LFxuXHRcdFx0XHR1bmlmb3JtPy50ZXh0dXJlVmlld1xuXHRcdFx0KTtcblx0XHRcdGJyZWFrO1xuXHRcdGNhc2UgXCJzYW1wbGVyXCI6XG5cdFx0XHRzaGFkZXJEYXRhLnNldFNhbXBsZXIoXG5cdFx0XHRcdG5hbWUsXG5cdFx0XHRcdHZhbHVlSXNGdW5jXG5cdFx0XHRcdFx0PyB1bmlmb3JtLnZhbHVlXG5cdFx0XHRcdFx0OiAoKSA9PiB7XG5cdFx0XHRcdFx0XHRcdHJldHVybiB1bmlmb3JtLnZhbHVlO1xuXHRcdFx0XHRcdCAgfSxcblx0XHRcdFx0dW5pZm9ybT8uYmluZGluZyxcblx0XHRcdFx0dW5pZm9ybT8udmlzaWJpbGl0eVxuXHRcdFx0KTtcblx0XHRcdGJyZWFrO1xuXHRcdGRlZmF1bHQ6XG5cdFx0XHR0aHJvdyBuZXcgRXJyb3IoXCJub3QgbWF0Y2ggdW5pZnJvbSB0eXBlXCIpO1xuXHR9XG59XG4iLCJpbXBvcnQgQmluZEdyb3VwTGF5b3V0RW50cnkgZnJvbSBcIi4vQmluZEdyb3VwTGF5b3V0RW50cnlcIjtcclxuY29uc3QgbGF5b3V0Q2FjaGUgPSBuZXcgTWFwKCk7XHJcbmNsYXNzIEJpbmRHcm91cExheW91dCB7XHJcblx0cHVibGljIGdwdUJpbmRHcm91cExheW91dDogR1BVQmluZEdyb3VwTGF5b3V0O1xyXG5cdGluZGV4OiBudW1iZXI7XHJcblx0cHJpdmF0ZSBjb25zdHJ1Y3RvcihkZXZpY2U6IEdQVURldmljZSwgbGFiZWw6IHN0cmluZywgcHVibGljIGVudHJpZXM6IEJpbmRHcm91cExheW91dEVudHJ5W10gPSBbXSwgaW5kZXggPSAwKSB7XHJcblx0XHR0aGlzLmluZGV4ID0gaW5kZXggfHwgMDtcclxuXHRcdHRoaXMuZ3B1QmluZEdyb3VwTGF5b3V0ID0gZGV2aWNlLmNyZWF0ZUJpbmRHcm91cExheW91dCh7XHJcblx0XHRcdGxhYmVsOiBsYWJlbCxcclxuXHRcdFx0ZW50cmllczogZW50cmllcy5tYXAoKHsgdmlzaWJpbGl0eSwgYnVmZmVyLCBzYW1wbGVyLCB0ZXh0dXJlLCBzdG9yYWdlVGV4dHVyZSwgYmluZGluZyB9KSA9PiAoe1xyXG5cdFx0XHRcdGJpbmRpbmcsXHJcblx0XHRcdFx0dmlzaWJpbGl0eSxcclxuXHRcdFx0XHRidWZmZXIsXHJcblx0XHRcdFx0c2FtcGxlcixcclxuXHRcdFx0XHR0ZXh0dXJlLFxyXG5cdFx0XHRcdHN0b3JhZ2VUZXh0dXJlXHJcblx0XHRcdH0pKVxyXG5cdFx0fSk7XHJcblx0fVxyXG5cdHN0YXRpYyBnZXRCaW5kR3JvdXBMYXlvdXRGcm9tQ2FjaGUoXHJcblx0XHRkZXZpY2U6IEdQVURldmljZSxcclxuXHRcdGxhYmVsOiBzdHJpbmcsXHJcblx0XHRlbnRpcmVzOiBCaW5kR3JvdXBMYXlvdXRFbnRyeVtdLFxyXG5cdFx0aW5kZXhcclxuXHQpOiBCaW5kR3JvdXBMYXlvdXQge1xyXG5cdFx0aWYgKGxheW91dENhY2hlLmhhcyhsYWJlbCkpIHtcclxuXHRcdFx0cmV0dXJuIGxheW91dENhY2hlLmdldChsYWJlbCk7XHJcblx0XHR9IGVsc2Uge1xyXG5cdFx0XHRjb25zdCBiaW5kR3JvdXBMYXlvdXQgPSBuZXcgQmluZEdyb3VwTGF5b3V0KGRldmljZSwgbGFiZWwsIGVudGlyZXMsIGluZGV4KTtcclxuXHRcdFx0bGF5b3V0Q2FjaGUuc2V0KGxhYmVsLCBiaW5kR3JvdXBMYXlvdXQpO1xyXG5cdFx0XHRyZXR1cm4gYmluZEdyb3VwTGF5b3V0O1xyXG5cdFx0fVxyXG5cdH1cclxuXHRzdGF0aWMgcmVtb3ZlQmluZEdyb3VwTGF5b3V0RnJvbUNhY2hlKGJpbmRHcm91cExheW91dDogQmluZEdyb3VwTGF5b3V0KSB7XHJcblx0XHRsYXlvdXRDYWNoZS5kZWxldGUoYmluZEdyb3VwTGF5b3V0KTtcclxuXHR9XHJcbn1cclxuXHJcbmV4cG9ydCBkZWZhdWx0IEJpbmRHcm91cExheW91dDtcclxuIiwiaW1wb3J0IHsgQmluZEdyb3VwTGF5b3V0RW50cnlUeXBlIH0gZnJvbSBcIi4uL2NvcmUvV2ViR1BVVHlwZXNcIjtcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEJpbmRHcm91cExheW91dEVudHJ5IHtcblx0YmluZGluZzogbnVtYmVyO1xuXHR2aXNpYmlsaXR5OiBHUFVTaGFkZXJTdGFnZUZsYWdzO1xuXHR1bmlmb3Jtcz86IGFueVtdO1xuXHRidWZmZXI/OiBHUFVCdWZmZXJCaW5kaW5nTGF5b3V0O1xuXHRzYW1wbGVyPzogR1BVU2FtcGxlckJpbmRpbmdMYXlvdXQ7XG5cdHRleHR1cmU/OiBHUFVUZXh0dXJlQmluZGluZ0xheW91dDtcblx0c3RvcmFnZVRleHR1cmU/OiBHUFVTdG9yYWdlVGV4dHVyZUJpbmRpbmdMYXlvdXQ7XG5cdGV4dGVybmFsVGV4dHVyZT86IEdQVUV4dGVybmFsVGV4dHVyZUJpbmRpbmdMYXlvdXQ7XG5cdGNvbnN0cnVjdG9yKG9wdGlvbnM6IEJpbmRHcm91cExheW91dEVudHJ5VHlwZSkge1xuXHRcdHRoaXMuYmluZGluZyA9IG9wdGlvbnMuYmluZGluZztcblx0XHR0aGlzLnZpc2liaWxpdHkgPSBvcHRpb25zLnZpc2liaWxpdHk7XG5cdFx0dGhpcy5idWZmZXIgPSBvcHRpb25zLmJ1ZmZlcjtcblx0XHR0aGlzLnNhbXBsZXIgPSBvcHRpb25zLnNhbXBsZXI7XG5cdFx0dGhpcy50ZXh0dXJlID0gb3B0aW9ucy50ZXh0dXJlO1xuXHRcdHRoaXMuc3RvcmFnZVRleHR1cmUgPSBvcHRpb25zLnN0b3JhZ2VUZXh0dXJlO1xuXHRcdHRoaXMuZXh0ZXJuYWxUZXh0dXJlID0gb3B0aW9ucy5leHRlcm5hbFRleHR1cmU7XG5cdH1cblx0Z2V0R1BVTGF5b3V0RW50aXR5KCkge1xuXHRcdHJldHVybiB7XG5cdFx0XHRiaW5kaW5nOiB0aGlzLmJpbmRpbmcsXG5cdFx0XHR2aXNpYmlsaXR5OiB0aGlzLnZpc2liaWxpdHksXG5cdFx0XHRidWZmZXI6IHRoaXMuYnVmZmVyLFxuXHRcdFx0c2FtcGxlcjogdGhpcy5zYW1wbGVyLFxuXHRcdFx0dGV4dHVyZTogdGhpcy50ZXh0dXJlLFxuXHRcdFx0ZXh0ZXJuYWxUZXh0dXJlOiB0aGlzLmV4dGVybmFsVGV4dHVyZSxcblx0XHRcdHN0b3JhZ2VUZXh0dXJlOiB0aGlzLnN0b3JhZ2VUZXh0dXJlXG5cdFx0fTtcblx0fVxufVxuIiwiaW1wb3J0IHsgU2hhZGVyU3RhZ2UgfSBmcm9tIFwiLi4vY29yZS9XZWJHUFVDb25zdGFudFwiO1xuaW1wb3J0IHsgVW5pZm9ybUZ1bmMsIFNoYWRlckRlZmluZSB9IGZyb20gXCIuLi9jb3JlL1dlYkdQVVR5cGVzXCI7XG5pbXBvcnQgZGVmYXVsdFZhbHVlIGZyb20gXCIuLi91dGlscy9kZWZhdWx0VmFsdWVcIjtcbmltcG9ydCBCaW5kR3JvdXAgZnJvbSBcIi4vQmluZEdyb3VwXCI7XG5pbXBvcnQgQmluZEdyb3VwRW50aXR5IGZyb20gXCIuL0JpbmRHcm91cEVudGl0eVwiO1xuaW1wb3J0IEJpbmRHcm91cExheW91dCBmcm9tIFwiLi9CaW5kR3JvdXBMYXlvdXRcIjtcbmltcG9ydCBCaW5kR3JvdXBMYXlvdXRFbnRyeSBmcm9tIFwiLi9CaW5kR3JvdXBMYXlvdXRFbnRyeVwiO1xuaW1wb3J0IFNhbXBsZXIgZnJvbSBcIi4vU2FtcGxlclwiO1xuaW1wb3J0IFRleHR1cmUgZnJvbSBcIi4vVGV4dHVyZVwiO1xuaW1wb3J0IFVuaWZvcm1CdWZmZXIgZnJvbSBcIi4vVW5pZm9ybUJ1ZmZlclwiO1xuaW1wb3J0IHsgVW5pZm9ybVNhbXBsZXIsIFVuaWZvcm1UZXh0dXJlIH0gZnJvbSBcIi4vVW5pZm9ybXNcIjtcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFNoYWRlckRhdGEge1xuXHRjdXJyZW50QmluZGluZzogbnVtYmVyO1xuXG5cdGRlZmluZXM6IFNoYWRlckRlZmluZTtcblxuXHRkZWZpbmVEaXJ0eTogYm9vbGVhbjtcblxuXHRsYWJlbDogc3RyaW5nO1xuXG5cdGJpbmRHcm91cDogQmluZEdyb3VwO1xuXG5cdGdyb3VwTGF5b3V0OiBCaW5kR3JvdXBMYXlvdXQ7XG5cblx0bGF5b3V0SW5kZXg6IG51bWJlcjtcblxuXHRncm91cEluZGV4OiBudW1iZXI7XG5cblx0cHJvdGVjdGVkIF91bmlmb3JtczogTWFwPHN0cmluZywgYW55PjtcblxuXHRjb25zdHJ1Y3RvcihsYWJlbDogc3RyaW5nLCBzaXplPzogbnVtYmVyLCBsYXlvdXRJbmRleD86IG51bWJlciwgZ3JvdXBJbmRleD8pIHtcblx0XHR0aGlzLmxhYmVsID0gbGFiZWw7XG5cdFx0dGhpcy5jdXJyZW50QmluZGluZyA9IDA7XG5cdFx0dGhpcy5kZWZpbmVEaXJ0eSA9IHRydWU7XG5cdFx0dGhpcy5kZWZpbmVzID0ge307XG5cdFx0dGhpcy5fdW5pZm9ybXMgPSBuZXcgTWFwKCk7XG5cdFx0dGhpcy5ncm91cEluZGV4ID0gZGVmYXVsdFZhbHVlKGdyb3VwSW5kZXgsIDApO1xuXHRcdHRoaXMubGF5b3V0SW5kZXggPSBkZWZhdWx0VmFsdWUobGF5b3V0SW5kZXgsIDApO1xuXHR9XG5cdGdldFVuaWZvcm1CdWZmZXIobmFtZTogc3RyaW5nKTogVW5pZm9ybUJ1ZmZlciB7XG5cdFx0cmV0dXJuIHRoaXMuX3VuaWZvcm1zLmdldChuYW1lKTtcblx0fVxuXHRnZXRUZXh0dXJlKG5hbWU6IHN0cmluZyk6IFRleHR1cmUge1xuXHRcdHJldHVybiB0aGlzLl91bmlmb3Jtcy5nZXQobmFtZSk7XG5cdH1cblx0Z2V0U2FtcGxlcihuYW1lOiBzdHJpbmcpOiBTYW1wbGVyIHtcblx0XHRyZXR1cm4gdGhpcy5fdW5pZm9ybXMuZ2V0KG5hbWUpO1xuXHR9XG5cdHNldFVuaWZvcm1CdWZmZXIobmFtZTogc3RyaW5nLCB1bmlmb3JtQnVmZmVyOiBVbmlmb3JtQnVmZmVyLCBiaW5kaW5nPzogbnVtYmVyKSB7XG5cdFx0aWYgKHRoaXMuX3VuaWZvcm1zLmdldChuYW1lKSkgcmV0dXJuO1xuXHRcdHVuaWZvcm1CdWZmZXIuYmluZGluZyA9IHRoaXMuY3VycmVudEJpbmRpbmc7XG5cdFx0dGhpcy5zZXREZWZpbmUobmFtZS5jb25jYXQoXCJCaW5kaW5nXCIpLCBiaW5kaW5nID8/IHRoaXMuY3VycmVudEJpbmRpbmcpO1xuXHRcdHRoaXMuY3VycmVudEJpbmRpbmcgKz0gMTtcblx0XHR0aGlzLl91bmlmb3Jtcy5zZXQobmFtZSwgdW5pZm9ybUJ1ZmZlcik7XG5cdH1cblx0c2V0VGV4dHVyZShcblx0XHRuYW1lOiBzdHJpbmcsXG5cdFx0dmFsdWU6IFVuaWZvcm1GdW5jIHwgVGV4dHVyZSxcblx0XHRiaW5kaW5nPzogbnVtYmVyLFxuXHRcdHR5cGU/OiBzdHJpbmcsXG5cdFx0dmlzaWJpbGl0eT86IFNoYWRlclN0YWdlLFxuXHRcdHRleHR1cmVWaWV3PzogR1BVVGV4dHVyZVZpZXdcblx0KSB7XG5cdFx0aWYgKHRoaXMuX3VuaWZvcm1zLmdldChuYW1lKSkgcmV0dXJuO1xuXHRcdGNvbnN0IHVuaWZvcm0gPSBuZXcgVW5pZm9ybVRleHR1cmUobmFtZSwgYmluZGluZyA/PyB0aGlzLmN1cnJlbnRCaW5kaW5nLCB2YWx1ZSwgdHlwZSwgdmlzaWJpbGl0eSwgdGV4dHVyZVZpZXcpO1xuXHRcdHRoaXMuc2V0RGVmaW5lKG5hbWUuY29uY2F0KFwiQmluZGluZ1wiKSwgYmluZGluZyA/PyB0aGlzLmN1cnJlbnRCaW5kaW5nKTtcblx0XHR0aGlzLmN1cnJlbnRCaW5kaW5nICs9IDE7XG5cdFx0dGhpcy5fdW5pZm9ybXMuc2V0KG5hbWUsIHVuaWZvcm0pO1xuXHR9XG5cdHNldFNhbXBsZXIobmFtZTogc3RyaW5nLCB2YWx1ZTogVW5pZm9ybUZ1bmMgfCBTYW1wbGVyLCBiaW5kaW5nPzogbnVtYmVyLCB2aXNpYmlsaXR5PzogU2hhZGVyU3RhZ2UpIHtcblx0XHRpZiAodGhpcy5fdW5pZm9ybXMuZ2V0KG5hbWUpKSByZXR1cm47XG5cdFx0Y29uc3QgdW5pZm9ybSA9IG5ldyBVbmlmb3JtU2FtcGxlcihuYW1lLCBiaW5kaW5nID8/IHRoaXMuY3VycmVudEJpbmRpbmcsIHZhbHVlLCB2aXNpYmlsaXR5KTtcblx0XHR0aGlzLnNldERlZmluZShuYW1lLmNvbmNhdChcIkJpbmRpbmdcIiksIGJpbmRpbmcgPz8gdGhpcy5jdXJyZW50QmluZGluZyk7XG5cdFx0dGhpcy5jdXJyZW50QmluZGluZyArPSAxO1xuXHRcdHRoaXMuX3VuaWZvcm1zLnNldChuYW1lLCB1bmlmb3JtKTtcblx0fVxuXHRzZXREZWZpbmUobmFtZTogc3RyaW5nLCB2YWx1ZTogYm9vbGVhbiB8IG51bWJlcikge1xuXHRcdGlmICh0aGlzLmRlZmluZXNbbmFtZV0gPT09IHVuZGVmaW5lZCkge1xuXHRcdFx0dGhpcy5kZWZpbmVEaXJ0eSA9IHRydWU7XG5cdFx0XHR0aGlzLmRlZmluZXNbbmFtZV0gPSB2YWx1ZTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0aWYgKHRoaXMuZGVmaW5lc1tuYW1lXSA9PT0gdmFsdWUpIHtcblx0XHRcdFx0cmV0dXJuO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0dGhpcy5kZWZpbmVEaXJ0eSA9IHRydWU7XG5cdFx0XHRcdHRoaXMuZGVmaW5lc1tuYW1lXSA9IHZhbHVlO1xuXHRcdFx0fVxuXHRcdH1cblx0fVxuXHRyZXBsYWNlVW5pZm9ybUJ1ZmZlclZhbHVlKG5hbWU6IHN0cmluZywgdmFsdWU6IFVuaWZvcm1GdW5jIHwgbnVtYmVyIHwgb2JqZWN0KSB7XG5cdFx0dGhpcy5fdW5pZm9ybXMuZm9yRWFjaCgodW5pZm9ybSkgPT4ge1xuXHRcdFx0aWYgKHVuaWZvcm0/LmlzVW5pZm9ybUJ1ZmZlcikge1xuXHRcdFx0XHR1bmlmb3JtLnJlcGxhY2VVbmlmb3JtVmFsdWUobmFtZSwgdmFsdWUpO1xuXHRcdFx0fVxuXHRcdH0pO1xuXHR9XG5cdGJpbmQoZGV2aWNlOiBHUFVEZXZpY2UsIHBhc3NFbmNvZGVyOiBHUFVSZW5kZXJQYXNzRW5jb2RlciB8IEdQVUNvbXB1dGVQYXNzRW5jb2Rlcikge1xuXHRcdHRoaXMudXBsb2FkVW5pZm9ybShkZXZpY2UpO1xuXHRcdGlmICghdGhpcy5ncm91cExheW91dCkgdGhpcy5ncm91cExheW91dCA9IHRoaXMuY3JlYXRlQmluZEdyb3VwTGF5b3V0KGRldmljZSwgdGhpcy5sYWJlbCwgdGhpcy5sYXlvdXRJbmRleCk7XG5cdFx0aWYgKCF0aGlzLmJpbmRHcm91cCkgdGhpcy5iaW5kR3JvdXAgPSB0aGlzLmNyZWF0ZUJpbmRHcm91cChkZXZpY2UsIHRoaXMubGFiZWwsIHRoaXMuZ3JvdXBJbmRleCk7XG5cdFx0dGhpcy5iaW5kR3JvdXAuYmluZChwYXNzRW5jb2Rlcik7XG5cdH1cblx0ZGVzdHJveSgpIHtcblx0XHR0aGlzLl91bmlmb3Jtcy5mb3JFYWNoKCh1bmlmb3JtKSA9PiB7XG5cdFx0XHRpZiAodW5pZm9ybS5kZXN0cm95KSB1bmlmb3JtPy5kZXN0cm95KCk7XG5cdFx0fSk7XG5cdFx0dGhpcy5sYWJlbCA9IHVuZGVmaW5lZDtcblx0XHR0aGlzLmN1cnJlbnRCaW5kaW5nID0gMTtcblx0XHR0aGlzLmRlZmluZURpcnR5ID0gdHJ1ZTtcblx0XHR0aGlzLmRlZmluZXMgPSB1bmRlZmluZWQ7XG5cdFx0dGhpcy5fdW5pZm9ybXMuY2xlYXIoKTtcblx0XHRCaW5kR3JvdXBMYXlvdXQucmVtb3ZlQmluZEdyb3VwTGF5b3V0RnJvbUNhY2hlKHRoaXMuZ3JvdXBMYXlvdXQpO1xuXHRcdHRoaXMuYmluZEdyb3VwID0gdW5kZWZpbmVkO1xuXHR9XG5cdHByaXZhdGUgY3JlYXRlQmluZEdyb3VwKGRldmljZTogR1BVRGV2aWNlLCBsYWJlbDogc3RyaW5nLCBncm91cEluZGV4PzogbnVtYmVyKSB7XG5cdFx0Y29uc3QgeyBlbnRpdGllcywgZHluYW1pYywgYWxpZ25lZFNpemUsIG1heE9mZnNldCB9ID0gdGhpcy5jcmVhdGVCaW5kR3JvdXBFbnRpdHkoKTtcblx0XHRjb25zdCBiaW5kR3JvdXAgPSBuZXcgQmluZEdyb3VwKHtcblx0XHRcdGxhYmVsOiBsYWJlbCxcblx0XHRcdGVudGlyZXM6IGVudGl0aWVzLFxuXHRcdFx0ZGV2aWNlOiBkZXZpY2UsXG5cdFx0XHRsYXlvdXQ6IHRoaXMuZ3JvdXBMYXlvdXQsXG5cdFx0XHRpbmRleDogZ3JvdXBJbmRleCB8fCAwLCAvLyDlkI7nu63mlLnmiJBncm91cEluZGV4XG5cdFx0XHRkeW5hbWljLFxuXHRcdFx0YWxpZ25lZFNpemUsXG5cdFx0XHRtYXhPZmZzZXRcblx0XHR9KTtcblx0XHRyZXR1cm4gYmluZEdyb3VwO1xuXHR9XG5cdHByaXZhdGUgY3JlYXRlQmluZEdyb3VwTGF5b3V0KGRldmljZTogR1BVRGV2aWNlLCBsYWJlbDogc3RyaW5nLCBsYXlvdXRJbmRleD86IG51bWJlcikge1xuXHRcdGNvbnN0IHJlc3VsdCA9IHRoaXMuY3JlYXRlQmluZEdyb3VwTGF5b3V0RW50cnkoKTtcblx0XHRjb25zdCBncm91cExheW91dCA9IEJpbmRHcm91cExheW91dC5nZXRCaW5kR3JvdXBMYXlvdXRGcm9tQ2FjaGUoXG5cdFx0XHRkZXZpY2UsXG5cdFx0XHRsYWJlbCArIFwiLVwiICsgcmVzdWx0LnVpZCxcblx0XHRcdHJlc3VsdC5sYXlvdXRzLFxuXHRcdFx0bGF5b3V0SW5kZXggfHwgMFxuXHRcdCk7XG5cdFx0cmV0dXJuIGdyb3VwTGF5b3V0O1xuXHR9XG5cdHByb3RlY3RlZCB1cGxvYWRVbmlmb3JtKGRldmljZTogR1BVRGV2aWNlKSB7XG5cdFx0dGhpcy5fdW5pZm9ybXMuZm9yRWFjaCgodW5pZm9ybSkgPT4ge1xuXHRcdFx0dW5pZm9ybS5iaW5kKGRldmljZSk7XG5cdFx0fSk7XG5cdH1cblx0cHJpdmF0ZSBjcmVhdGVCaW5kR3JvdXBMYXlvdXRFbnRyeSgpIHtcblx0XHRsZXQgdWlkID0gXCJcIjtcblx0XHRjb25zdCByZXN1bHQgPSBuZXcgTWFwKCk7XG5cdFx0dGhpcy5fdW5pZm9ybXMuZm9yRWFjaCgodW5pZm9ybSkgPT4ge1xuXHRcdFx0aWYgKCFyZXN1bHQuaGFzKHVuaWZvcm0ubmFtZSkpIHtcblx0XHRcdFx0dWlkID0gdWlkID09PSBcIlwiID8gdWlkLmNvbmNhdCh1bmlmb3JtLm5hbWUpIDogdWlkLmNvbmNhdChcIiwgXCIpLmNvbmNhdCh1bmlmb3JtLm5hbWUpO1xuXHRcdFx0XHRyZXN1bHQuc2V0KHVuaWZvcm0ubmFtZSwgdGhpcy5jcmVhdGVPbmVMYXlvdXRFbnRyeSh1bmlmb3JtKSk7XG5cdFx0XHR9XG5cdFx0fSk7XG5cdFx0dWlkID0gYHVuaWZvcm1zWyR7dWlkfV1gO1xuXHRcdHJldHVybiB7IHVpZCwgbGF5b3V0czogWy4uLnJlc3VsdC52YWx1ZXMoKV0gfTtcblx0fVxuXHRwcml2YXRlIGNyZWF0ZUJpbmRHcm91cEVudGl0eSgpIHtcblx0XHRjb25zdCByZXN1bHQgPSBuZXcgTWFwKCk7XG5cdFx0bGV0IGR5bmFtaWMgPSBmYWxzZSxcblx0XHRcdGFsaWduZWRTaXplID0gMCxcblx0XHRcdG1heE9mZnNldCA9IDA7XG5cdFx0dGhpcy5fdW5pZm9ybXMuZm9yRWFjaCgodW5pZm9ybSkgPT4ge1xuXHRcdFx0aWYgKCFyZXN1bHQuaGFzKHVuaWZvcm0ubmFtZSkpIHtcblx0XHRcdFx0aWYgKHVuaWZvcm0/Lmhhc0R5bmFtaWNPZmZzZXQpIHtcblx0XHRcdFx0XHRkeW5hbWljID0gdHJ1ZTtcblx0XHRcdFx0XHRtYXhPZmZzZXQgPSB1bmlmb3JtLm1heE9mZnNldDtcblx0XHRcdFx0XHRhbGlnbmVkU2l6ZSA9IE1hdGguY2VpbCh1bmlmb3JtLnVuaWZvcm1zU2l6ZSAvICg0ICogMjU2KSkgKiAyNTY7XG5cdFx0XHRcdH1cblx0XHRcdFx0cmVzdWx0LnNldCh1bmlmb3JtLm5hbWUsIHRoaXMuY3JlYXllT25lR3JvdXBFbnRpdHkodW5pZm9ybSkpO1xuXHRcdFx0fVxuXHRcdH0pO1xuXHRcdHJldHVybiB7XG5cdFx0XHRlbnRpdGllczogWy4uLnJlc3VsdC52YWx1ZXMoKV0sXG5cdFx0XHRkeW5hbWljLFxuXHRcdFx0YWxpZ25lZFNpemUsXG5cdFx0XHRtYXhPZmZzZXRcblx0XHR9O1xuXHR9XG5cdHByaXZhdGUgY3JlYXRlT25lTGF5b3V0RW50cnkodW5pZm9ybSkge1xuXHRcdGxldCBsYXlvdXRFbnRpdHk7XG5cdFx0aWYgKHVuaWZvcm0uaXNVbmlmb3JtQnVmZmVyKSB7XG5cdFx0XHRsYXlvdXRFbnRpdHkgPSBuZXcgQmluZEdyb3VwTGF5b3V0RW50cnkoe1xuXHRcdFx0XHRiaW5kaW5nOiB1bmlmb3JtLmJpbmRpbmcsXG5cdFx0XHRcdGJ1ZmZlcjogdW5pZm9ybS5sYXlvdXRUeXBlLFxuXHRcdFx0XHR2aXNpYmlsaXR5OiB1bmlmb3JtLnZpc2liaWxpdHlcblx0XHRcdH0pO1xuXHRcdH0gZWxzZSBpZiAodW5pZm9ybS5pc1RleHR1cmUpIHtcblx0XHRcdGxheW91dEVudGl0eSA9IG5ldyBCaW5kR3JvdXBMYXlvdXRFbnRyeSh7XG5cdFx0XHRcdGJpbmRpbmc6IHVuaWZvcm0uYmluZGluZyxcblx0XHRcdFx0dmlzaWJpbGl0eTogdW5pZm9ybS52aXNpYmlsaXR5LFxuXHRcdFx0XHR0ZXh0dXJlOiB1bmlmb3JtLnR5cGUgPT0gXCJ0ZXh0dXJlXCIgPyB1bmlmb3JtLmxheW91dFR5cGUgOiB1bmRlZmluZWQsXG5cdFx0XHRcdHN0b3JhZ2VUZXh0dXJlOiB1bmlmb3JtLnR5cGUgPT0gXCJzdG9yYWdlVGV4dHVyZVwiID8gdW5pZm9ybS5zdG9yYWdlVGV4dHVyZUxheW91dFR5cGUgOiB1bmRlZmluZWRcblx0XHRcdH0pO1xuXHRcdH0gZWxzZSBpZiAodW5pZm9ybS5pc1NhbXBsZXIpIHtcblx0XHRcdGxheW91dEVudGl0eSA9IG5ldyBCaW5kR3JvdXBMYXlvdXRFbnRyeSh7XG5cdFx0XHRcdGJpbmRpbmc6IHVuaWZvcm0uYmluZGluZyxcblx0XHRcdFx0dmlzaWJpbGl0eTogdW5pZm9ybS52aXNpYmlsaXR5LFxuXHRcdFx0XHRzYW1wbGVyOiB1bmlmb3JtLmxheW91dFR5cGVcblx0XHRcdH0pO1xuXHRcdH1cblx0XHRyZXR1cm4gbGF5b3V0RW50aXR5O1xuXHR9XG5cdHByaXZhdGUgY3JlYXllT25lR3JvdXBFbnRpdHkodW5pZm9ybSkge1xuXHRcdGxldCBncm91cEVudGl0eTtcblx0XHRpZiAodW5pZm9ybS5pc1VuaWZvcm1CdWZmZXIpIHtcblx0XHRcdGdyb3VwRW50aXR5ID0gbmV3IEJpbmRHcm91cEVudGl0eSh7XG5cdFx0XHRcdGJpbmRpbmc6IHVuaWZvcm0uYmluZGluZyxcblx0XHRcdFx0cmVzb3VyY2U6IHtcblx0XHRcdFx0XHRidWZmZXI6IHVuaWZvcm0uYnVmZmVyLmdwdUJ1ZmZlcixcblx0XHRcdFx0XHRvZmZzZXQ6IHVuaWZvcm0ub2Zmc2V0LFxuXHRcdFx0XHRcdHNpemU6IHVuaWZvcm0uYnVmZmVyU2l6ZVxuXHRcdFx0XHR9XG5cdFx0XHR9KTtcblx0XHR9IGVsc2UgaWYgKHVuaWZvcm0uaXNUZXh0dXJlKSB7XG5cdFx0XHRncm91cEVudGl0eSA9IG5ldyBCaW5kR3JvdXBFbnRpdHkoe1xuXHRcdFx0XHRiaW5kaW5nOiB1bmlmb3JtLmJpbmRpbmcsXG5cdFx0XHRcdHJlc291cmNlOiB1bmlmb3JtPy50ZXh0dXJlVmlldyA/PyB1bmlmb3JtLnRleHR1cmUudGV4dHVyZVZpZXdcblx0XHRcdH0pO1xuXHRcdH0gZWxzZSBpZiAodW5pZm9ybS5pc1NhbXBsZXIpIHtcblx0XHRcdGdyb3VwRW50aXR5ID0gbmV3IEJpbmRHcm91cEVudGl0eSh7XG5cdFx0XHRcdGJpbmRpbmc6IHVuaWZvcm0uYmluZGluZyxcblx0XHRcdFx0cmVzb3VyY2U6IHVuaWZvcm0uc2FtcGxlci5ncHVTYW1wbGVyXG5cdFx0XHR9KTtcblx0XHR9XG5cdFx0cmV0dXJuIGdyb3VwRW50aXR5O1xuXHR9XG59XG4iLCJpbXBvcnQgeyBGcmFtZVN0YXRlIH0gZnJvbSBcIi4uL2NvcmUvRnJhbWVTdGF0ZVwiO1xuaW1wb3J0IHsgQ3VsbE1vZGUsIFByaW1pdGl2ZVRvcG9sb2d5IH0gZnJvbSBcIi4uL2NvcmUvV2ViR1BVQ29uc3RhbnRcIjtcbmltcG9ydCBDb2xvciBmcm9tIFwiLi4vbWF0aC9Db2xvclwiO1xuaW1wb3J0IHsgTWVzaCB9IGZyb20gXCIuLi9tZXNoL01lc2hcIjtcbmltcG9ydCB7IERlcHRoU3RlbmNpbCwgUmVuZGVyU3RhdGUsIFRhcmdldCwgUHJpbWl0aXZlIH0gZnJvbSBcIi4uL3JlbmRlci9SZW5kZXJTdGF0ZVwiO1xuaW1wb3J0IFNhbXBsZXIgZnJvbSBcIi4uL3JlbmRlci9TYW1wbGVyXCI7XG5pbXBvcnQgU2hhZGVyRGF0YSBmcm9tIFwiLi4vcmVuZGVyL1NoYWRlckRhdGFcIjtcbmltcG9ydCBUZXh0dXJlIGZyb20gXCIuLi9yZW5kZXIvVGV4dHVyZVwiO1xuaW1wb3J0IHsgU2hhZGVyU291cmNlIH0gZnJvbSBcIi4uL3NoYWRlci9TaGFkZXJTb3VyY2VcIjtcbmV4cG9ydCBjbGFzcyBNYXRlcmlhbCB7XG5cdHB1YmxpYyBzaGFkZXJEYXRhOiBTaGFkZXJEYXRhO1xuXG5cdGNvbG9yPzogQ29sb3I7XG5cblx0YmFzZVNhbXBsZXI/OiBTYW1wbGVyO1xuXG5cdGJhc2VUZXh0dXJlPzogVGV4dHVyZTtcblxuXHR0eXBlOiBzdHJpbmc7XG5cblx0bGFiZWw6IHN0cmluZztcblxuXHRzaGFkZXJTb3VyY2U6IFNoYWRlclNvdXJjZTtcblxuXHR0cmFuc3BhcmVudDogYm9vbGVhbjtcblxuXHRkaXJ0eTogYm9vbGVhbjtcblxuXHRsaWdodDogYm9vbGVhbjtcblxuXHRyZWFkeTogYm9vbGVhbjtcblxuXHRwcml2YXRlIF9lbWlzc2l2ZTogQ29sb3I7XG5cblx0cHJpdmF0ZSBfb3BhY2l0eTogbnVtYmVyO1xuXG5cdHByaXZhdGUgX2VtaXNzaXZlSW50ZW5zaXR5OiBudW1iZXI7XG5cblx0cHJpdmF0ZSBfZGlmZnVzZTogQ29sb3I7XG5cblx0cHJpdmF0ZSBfcmVuZGVyU3RhdGU6IFJlbmRlclN0YXRlO1xuXG5cdHByaXZhdGUgX2RvdWJsZVNpZGVkOiBib29sZWFuO1xuXG5cdGNvbnN0cnVjdG9yKCkge1xuXHRcdHRoaXMubGFiZWwgPSB1bmRlZmluZWQ7XG5cdFx0dGhpcy50eXBlID0gdW5kZWZpbmVkO1xuXHRcdHRoaXMuYmFzZVRleHR1cmUgPSB1bmRlZmluZWQ7XG5cdFx0dGhpcy5iYXNlU2FtcGxlciA9IHVuZGVmaW5lZDtcblx0XHR0aGlzLl9kaWZmdXNlID0gbmV3IENvbG9yKDAuMCwgMC4wLCAwLjApO1xuXHRcdHRoaXMuX29wYWNpdHkgPSAxLjA7XG5cdFx0Ly8gQnVmZmVyXG5cdFx0dGhpcy5zaGFkZXJEYXRhID0gdW5kZWZpbmVkO1xuXHRcdHRoaXMuc2hhZGVyU291cmNlID0gdW5kZWZpbmVkO1xuXHRcdHRoaXMuZGlydHkgPSB0cnVlO1xuXHRcdHRoaXMuX2VtaXNzaXZlID0gbmV3IENvbG9yKDAuMCwgMC4wLCAwKTtcblx0XHR0aGlzLl9lbWlzc2l2ZUludGVuc2l0eSA9IDEuMDtcblx0XHR0aGlzLl9kb3VibGVTaWRlZCA9IHRydWU7XG5cdFx0dGhpcy5saWdodCA9IGZhbHNlO1xuXHRcdHRoaXMucmVhZHkgPSBmYWxzZTtcblx0XHR0aGlzLmluaXQoKTtcblx0fVxuXHRwdWJsaWMgc2V0IHdpcmVmcmFtZSh2YWx1ZTogYm9vbGVhbikge1xuXHRcdHRoaXMucmVuZGVyU3RhdGUucHJpbWl0aXZlLnRvcG9sb2d5ID0gdmFsdWUgPyBQcmltaXRpdmVUb3BvbG9neS5MaW5lTGlzdCA6IFByaW1pdGl2ZVRvcG9sb2d5LlRyaWFuZ2xlTGlzdDtcblx0fVxuXHRwdWJsaWMgc2V0IHRvcG9sb2d5KHZhbHVlOiBQcmltaXRpdmVUb3BvbG9neSkge1xuXHRcdHRoaXMucmVuZGVyU3RhdGUucHJpbWl0aXZlLnRvcG9sb2d5ID0gdmFsdWU7XG5cdH1cblx0cHVibGljIGdldCBkb3VibGVTaWRlZCgpIHtcblx0XHRyZXR1cm4gdGhpcy5fZG91YmxlU2lkZWQ7XG5cdH1cblx0cHVibGljIHNldCBkb3VibGVTaWRlZCh2YWx1ZTogYm9vbGVhbikge1xuXHRcdHRoaXMuX3JlbmRlclN0YXRlLnByaW1pdGl2ZS5jdWxsTW9kZSA9IHZhbHVlID8gQ3VsbE1vZGUuTm9uZSA6IEN1bGxNb2RlLkJhY2s7XG5cdFx0dGhpcy5fZG91YmxlU2lkZWQgPSB2YWx1ZTtcblx0fVxuXHRwdWJsaWMgZ2V0IHJlbmRlclN0YXRlKCkge1xuXHRcdHJldHVybiB0aGlzLl9yZW5kZXJTdGF0ZTtcblx0fVxuXHRwdWJsaWMgc2V0IHJlbmRlclN0YXRlKHZhbHVlOiBSZW5kZXJTdGF0ZSkge1xuXHRcdHRoaXMuX3JlbmRlclN0YXRlID0gdmFsdWU7XG5cdH1cblx0cHVibGljIGdldCBkaWZmdXNlKCk6IENvbG9yIHtcblx0XHRyZXR1cm4gdGhpcy5fZGlmZnVzZTtcblx0fVxuXHRwdWJsaWMgc2V0IGRpZmZ1c2UodjogQ29sb3IpIHtcblx0XHR0aGlzLl9kaWZmdXNlID0gdjtcblx0fVxuXHRwdWJsaWMgZ2V0IGVtaXNzaXZlKCk6IENvbG9yIHtcblx0XHRyZXR1cm4gdGhpcy5fZW1pc3NpdmU7XG5cdH1cblx0cHVibGljIHNldCBlbWlzc2l2ZSh2OiBDb2xvcikge1xuXHRcdHRoaXMuX2VtaXNzaXZlID0gdjtcblx0fVxuXHRwdWJsaWMgZ2V0IGVtaXNzaXZlSW50ZW5zaXR5KCk6IG51bWJlciB7XG5cdFx0cmV0dXJuIHRoaXMuX2VtaXNzaXZlSW50ZW5zaXR5O1xuXHR9XG5cdHB1YmxpYyBzZXQgZW1pc3NpdmVJbnRlbnNpdHkodjogbnVtYmVyKSB7XG5cdFx0dGhpcy5fZW1pc3NpdmVJbnRlbnNpdHkgPSB2O1xuXHR9XG5cdHB1YmxpYyBnZXQgb3BhY2l0eSgpOiBudW1iZXIge1xuXHRcdHJldHVybiB0aGlzLl9vcGFjaXR5O1xuXHR9XG5cdHB1YmxpYyBzZXQgb3BhY2l0eSh2OiBudW1iZXIpIHtcblx0XHR0aGlzLl9vcGFjaXR5ID0gdjtcblx0fVxuXHRvbkJlZm9yZVJlbmRlcigpIHtcblx0XHQvLyBjYWxsYmFja1xuXHR9XG5cblx0b25CZWZvcmVDb21waWxlKCkge1xuXHRcdC8vIGNhbGxiYWNrXG5cdH1cblx0Y2xvbmUoKTogTWF0ZXJpYWwge1xuXHRcdHJldHVybiBudWxsO1xuXHR9XG5cdHVwZGF0ZShmcmFtZVN0YXRlPzogRnJhbWVTdGF0ZSwgbWVzaD86IE1lc2gpIHtcblx0XHQvLyB1cGRhdGUgbWF0ZXJpYWxcblx0fVxuXHRwcm90ZWN0ZWQgY3JlYXRlU2hhZGVyRGF0YSgpIHtcblx0XHRpZiAodGhpcy5zaGFkZXJEYXRhKSB0aGlzLnNoYWRlckRhdGEuZGVzdHJveSgpO1xuXHRcdHRoaXMuc2hhZGVyRGF0YSA9IG5ldyBTaGFkZXJEYXRhKHRoaXMudHlwZSwgMCk7XG5cdFx0dGhpcy5yZWFkeSA9IHRydWU7XG5cdH1cblx0cHJpdmF0ZSBpbml0KCkge1xuXHRcdC8vIOm7mOiupOa4suafk+eKtuaAgVxuXHRcdGNvbnN0IHByaW1pdGl2ZSA9IG5ldyBQcmltaXRpdmUoKTtcblx0XHRjb25zdCB0YXJnZXQgPSBuZXcgVGFyZ2V0KCk7XG5cdFx0Y29uc3QgZGVwdGhTdGVuY2lsID0gbmV3IERlcHRoU3RlbmNpbCgpO1xuXHRcdHRoaXMuX3JlbmRlclN0YXRlID0gbmV3IFJlbmRlclN0YXRlKCk7XG5cdFx0dGhpcy5fcmVuZGVyU3RhdGUucHJpbWl0aXZlID0gcHJpbWl0aXZlO1xuXHRcdHRoaXMuX3JlbmRlclN0YXRlLnRhcmdldHMgPSBbdGFyZ2V0XTtcblx0XHR0aGlzLl9yZW5kZXJTdGF0ZS5kZXB0aFN0ZW5jaWwgPSBkZXB0aFN0ZW5jaWw7XG5cdH1cblx0cHVibGljIGRlc3Ryb3koKSB7XG5cdFx0dGhpcy5sYWJlbCA9IHVuZGVmaW5lZDtcblx0XHR0aGlzLnR5cGUgPSB1bmRlZmluZWQ7XG5cdFx0dGhpcy5iYXNlVGV4dHVyZSA9IHVuZGVmaW5lZDtcblx0XHR0aGlzLmJhc2VTYW1wbGVyID0gdW5kZWZpbmVkO1xuXHRcdHRoaXMuY29sb3IgPSB1bmRlZmluZWQ7XG5cdH1cbn1cbiIsImltcG9ydCB7IEZyYW1lU3RhdGUgfSBmcm9tIFwiLi4vY29yZS9GcmFtZVN0YXRlXCI7XG5pbXBvcnQgeyBCdWZmZXJCaW5kaW5nVHlwZSwgQnVmZmVyVXNhZ2UgfSBmcm9tIFwiLi4vY29yZS9XZWJHUFVDb25zdGFudFwiO1xuaW1wb3J0IHsgU2hhZGVyTWF0ZXJpYWxQYXJtcywgVW5pZm9ybXMgfSBmcm9tIFwiLi4vY29yZS9XZWJHUFVUeXBlc1wiO1xuaW1wb3J0IHsgTWVzaCB9IGZyb20gXCIuLi9tZXNoL01lc2hcIjtcbmltcG9ydCBVbmlmb3JtQnVmZmVyIGZyb20gXCIuLi9yZW5kZXIvVW5pZm9ybUJ1ZmZlclwiO1xuaW1wb3J0IHsgU2hhZGVyU291cmNlIH0gZnJvbSBcIi4uL3NoYWRlci9TaGFkZXJTb3VyY2VcIjtcbmltcG9ydCBkZWZhdWx0VmFsdWUgZnJvbSBcIi4uL3V0aWxzL2RlZmF1bHRWYWx1ZVwiO1xuaW1wb3J0IHsgYWRkVW5pZm9ybVRvU2hhZGVyRGF0YSwgY2hlY2tDb250YWluRmxvYXRUeXBlIH0gZnJvbSBcIi4uL3V0aWxzL3VuaWZvcm1VdGlsc1wiO1xuaW1wb3J0IHsgTWF0ZXJpYWwgfSBmcm9tIFwiLi9NYXRlcmlhbFwiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBTaGFkZXJNYXRlcmlhbCBleHRlbmRzIE1hdGVyaWFsIHtcblx0dW5pZm9ybXM6IFVuaWZvcm1zO1xuXHR1bmlmb3JtQnVmZmVyOiBVbmlmb3JtQnVmZmVyO1xuXHRwcml2YXRlIHNoYWRlck1hdGVyaWFsUGFybXM6IFNoYWRlck1hdGVyaWFsUGFybXM7XG5cdGNvbnN0cnVjdG9yKG9wdGlvbnM6IFNoYWRlck1hdGVyaWFsUGFybXMpIHtcblx0XHRzdXBlcigpO1xuXHRcdGNvbnN0IHsgdHlwZSwgZnJhZywgdmVydCwgZGVmaW5lcywgbGlnaHQgfSA9IG9wdGlvbnM7XG5cdFx0dGhpcy50eXBlID0gdHlwZTtcblx0XHR0aGlzLnNoYWRlck1hdGVyaWFsUGFybXMgPSBvcHRpb25zO1xuXHRcdHRoaXMuc2hhZGVyU291cmNlID0gbmV3IFNoYWRlclNvdXJjZSh7XG5cdFx0XHRzaGFkZXJJZDogdHlwZSxcblx0XHRcdHJlbmRlcjoge1xuXHRcdFx0XHRmcmFnU2hhZGVyOiBmcmFnLFxuXHRcdFx0XHR2ZXJ0U2hhZGVyOiB2ZXJ0XG5cdFx0XHR9LFxuXHRcdFx0ZGVmaW5lczogZGVmYXVsdFZhbHVlKGRlZmluZXMsIHt9KVxuXHRcdH0pO1xuXHRcdHRoaXMudW5pZm9ybXMgPSBvcHRpb25zLnVuaWZvcm1zO1xuXHRcdHRoaXMudW5pZm9ybUJ1ZmZlciA9IHVuZGVmaW5lZDtcblx0XHR0aGlzLmxpZ2h0ID0gbGlnaHQgfHwgZmFsc2U7XG5cdH1cblx0dXBkYXRlKGZyYW1lU3RhdGU/OiBGcmFtZVN0YXRlLCBtZXNoPzogTWVzaCkge1xuXHRcdGlmICghdGhpcy5zaGFkZXJEYXRhIHx8IHRoaXMuZGlydHkpIHRoaXMuY3JlYXRlU2hhZGVyRGF0YShtZXNoKTtcblx0fVxuXHRjbG9uZSgpIHtcblx0XHRyZXR1cm4gbmV3IFNoYWRlck1hdGVyaWFsKHRoaXMuc2hhZGVyTWF0ZXJpYWxQYXJtcyk7XG5cdH1cblx0cHJvdGVjdGVkIGNyZWF0ZVNoYWRlckRhdGEobWVzaD86IE1lc2gpIHtcblx0XHRzdXBlci5jcmVhdGVTaGFkZXJEYXRhKCk7XG5cdFx0Y29uc3QgcmVzdWx0ID0gY2hlY2tDb250YWluRmxvYXRUeXBlKHRoaXMudW5pZm9ybXMpO1xuXHRcdGlmIChyZXN1bHQuaGFzRmxvYXQpIHtcblx0XHRcdHRoaXMudW5pZm9ybUJ1ZmZlciA9IHJlc3VsdC5oYXNBcnJheXR5cGVcblx0XHRcdFx0PyBuZXcgVW5pZm9ybUJ1ZmZlcih7XG5cdFx0XHRcdFx0XHRsYWJlbDogdGhpcy50eXBlICsgXCJVbmlmb3JtQnVmZmVyXCIsXG5cdFx0XHRcdFx0XHR0eXBlOiBCdWZmZXJCaW5kaW5nVHlwZS5SZWFkT25seVN0b3JhZ2UsXG5cdFx0XHRcdFx0XHR1c2FnZTogQnVmZmVyVXNhZ2UuU3RvcmFnZSB8IEJ1ZmZlclVzYWdlLkNvcHlEc3Rcblx0XHRcdFx0ICB9KVxuXHRcdFx0XHQ6IG5ldyBVbmlmb3JtQnVmZmVyKHsgbGFiZWw6IHRoaXMudHlwZSArIFwiVW5pZm9ybUJ1ZmZlclwiIH0pO1xuXHRcdFx0dGhpcy5zaGFkZXJEYXRhLnNldFVuaWZvcm1CdWZmZXIodGhpcy50eXBlLCB0aGlzLnVuaWZvcm1CdWZmZXIpO1xuXHRcdH1cblx0XHRjb25zdCB1bmlmb3Jtc05hbWVzID0gT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXModGhpcy51bmlmb3Jtcyk7XG5cdFx0dW5pZm9ybXNOYW1lcy5tYXAoKHVuaWZvcm1zTmFtZSkgPT4ge1xuXHRcdFx0YWRkVW5pZm9ybVRvU2hhZGVyRGF0YShcblx0XHRcdFx0dW5pZm9ybXNOYW1lLFxuXHRcdFx0XHR0aGlzLnVuaWZvcm1zW3VuaWZvcm1zTmFtZV0sXG5cdFx0XHRcdHRoaXMuc2hhZGVyRGF0YSxcblx0XHRcdFx0bWVzaCxcblx0XHRcdFx0dGhpcy51bmlmb3JtQnVmZmVyXG5cdFx0XHQpO1xuXHRcdH0pO1xuXHR9XG59XG4iLCJmdW5jdGlvbiBjcmVhdGVHdWlkKCkge1xyXG4gIC8vIGh0dHA6Ly9zdGFja292ZXJmbG93LmNvbS9xdWVzdGlvbnMvMTA1MDM0L2hvdy10by1jcmVhdGUtYS1ndWlkLXV1aWQtaW4tamF2YXNjcmlwdFxyXG4gIHJldHVybiBcInh4eHh4eHh4LXh4eHgtNHh4eC15eHh4LXh4eHh4eHh4eHh4eFwiLnJlcGxhY2UoL1t4eV0vZywgZnVuY3Rpb24gKGMpIHtcclxuICAgIGNvbnN0IHIgPSAoTWF0aC5yYW5kb20oKSAqIDE2KSB8IDA7XHJcbiAgICBjb25zdCB2ID0gYyA9PT0gXCJ4XCIgPyByIDogKHIgJiAweDMpIHwgMHg4O1xyXG4gICAgcmV0dXJuIHYudG9TdHJpbmcoMTYpO1xyXG4gIH0pO1xyXG59XHJcbmV4cG9ydCBkZWZhdWx0IGNyZWF0ZUd1aWQ7XHJcbiIsImltcG9ydCBDYW1lcmEgZnJvbSBcIi4uL2NhbWVyYS9DYW1lcmFcIjtcbmltcG9ydCB7IEZyYW1lU3RhdGUgfSBmcm9tIFwiLi4vY29yZS9GcmFtZVN0YXRlXCI7XG5pbXBvcnQgTGlnaHRNYW5nZXIgZnJvbSBcIi4uL2NvcmUvTGlnaHRNYW5nZXJcIjtcbmltcG9ydCBSZW5kZXJPYmplY3QgZnJvbSBcIi4uL2NvcmUvUmVuZGVyT2JqZWN0XCI7XG5pbXBvcnQgeyBDb21tYW5kU3ViVHlwZSwgSW50ZXJzZWN0IH0gZnJvbSBcIi4uL2NvcmUvV2ViR1BVQ29uc3RhbnRcIjtcbmltcG9ydCB7IFJlbmRlck9iamVjdFR5cGUgfSBmcm9tIFwiLi4vY29yZS9XZWJHUFVUeXBlc1wiO1xuaW1wb3J0IEdlb21ldHJ5IGZyb20gXCIuLi9nZW9tZXRyeS9HZW9tZXRyeVwiO1xuaW1wb3J0IHsgTWF0ZXJpYWwgfSBmcm9tIFwiLi4vbWF0ZXJpYWwvTWF0ZXJpYWxcIjtcbmltcG9ydCBEcmF3Q29tbWFuZCBmcm9tIFwiLi4vcmVuZGVyL0RyYXdDb21tYW5kXCI7XG5pbXBvcnQgY3JlYXRlR3VpZCBmcm9tIFwiLi4vdXRpbHMvY3JlYXRlR3VpZFwiO1xuZXhwb3J0IGNsYXNzIE1lc2ggZXh0ZW5kcyBSZW5kZXJPYmplY3Qge1xuXHRbeDogc3RyaW5nXTogYW55O1xuXHR1aWQ6IHN0cmluZztcblx0ZnJ1c3R1bUN1bGw6IGJvb2xlYW47XG5cdHN1YkNvbW1hbmRzOiB7IFtwcm9wOiBzdHJpbmddOiBEcmF3Q29tbWFuZCB9O1xuXHRnZW9tZXRyeT86IEdlb21ldHJ5O1xuXHRtYXRlcmlhbD86IE1hdGVyaWFsO1xuXHRpbnN0YW5jZUNvdW50PzogbnVtYmVyO1xuXHRwcmlvcml0eT86IG51bWJlcjtcblx0ZHJhd0NvbW1hbmQ/OiBEcmF3Q29tbWFuZDtcblx0ZGlzdGFuY2VUb0NhbWVyYT86IG51bWJlcjtcblx0Y29uc3RydWN0b3IoZ2VvbWV0cnk/OiBHZW9tZXRyeSwgbWF0ZXJpYWw/OiBNYXRlcmlhbCkge1xuXHRcdHN1cGVyKCk7XG5cdFx0dGhpcy5nZW9tZXRyeSA9IGdlb21ldHJ5O1xuXHRcdHRoaXMubWF0ZXJpYWwgPSBtYXRlcmlhbDtcblx0XHR0aGlzLnR5cGUgPSBSZW5kZXJPYmplY3RUeXBlLk1lc2g7XG5cdFx0dGhpcy5mcnVzdHVtQ3VsbCA9IHRydWU7XG5cdFx0dGhpcy51aWQgPSBjcmVhdGVHdWlkKCk7XG5cdFx0dGhpcy5zdWJDb21tYW5kcyA9IHt9O1xuXHR9XG5cdGdldCByZWFkeSgpIHtcblx0XHRyZXR1cm4gdGhpcy5tYXRlcmlhbC5yZWFkeTtcblx0fVxuXHR1cGRhdGUoZnJhbWVTdGF0ZTogRnJhbWVTdGF0ZSwgY2FtZXJhPzogQ2FtZXJhKSB7XG5cdFx0Ly8gdXBkYXRlIG1hdHJpeFxuXHRcdHRoaXMudXBkYXRlTWF0cml4KHRoaXM/LnBhcmVudD8ubW9kZWxNYXRyaXgpO1xuXHRcdC8vIGNyZWF0ZVxuXHRcdHRoaXMuZ2VvbWV0cnkudXBkYXRlKGZyYW1lU3RhdGUpO1xuXHRcdHRoaXMubWF0ZXJpYWwudXBkYXRlKGZyYW1lU3RhdGUsIHRoaXMpO1xuXHRcdC8vIHVwZGF0ZSBib3VuZGluZ1NwaGVyZVxuXHRcdHRoaXMuZ2VvbWV0cnkuYm91bmRpbmdTcGhlcmUudXBkYXRlKHRoaXMubW9kZWxNYXRyaXgpO1xuXHRcdHRoaXMubWF0ZXJpYWwuc2hhZGVyU291cmNlLnNldERlZmluZXMoZnJhbWVTdGF0ZS5kZWZpbmVzKTtcblx0XHRpZiAodGhpcy50eXBlID09IFJlbmRlck9iamVjdFR5cGUuRGVidWcpIHtcblx0XHRcdGZyYW1lU3RhdGUucmVuZGVyUXVldWUuZGVidWdRdWV1ZS5wdXNoKHRoaXMpO1xuXHRcdFx0cmV0dXJuO1xuXHRcdH1cblx0XHR0aGlzLmRpc3RhbmNlVG9DYW1lcmEgPSB0aGlzLmdlb21ldHJ5LmJvdW5kaW5nU3BoZXJlLmRpc3RhbmNlVG9DYW1lcmEoY2FtZXJhKTtcblxuXHRcdGNvbnN0IHZpc2liaWxpdHkgPSBmcmFtZVN0YXRlLmN1bGxpbmdWb2x1bWUuY29tcHV0ZVZpc2liaWxpdHkodGhpcy5nZW9tZXRyeS5ib3VuZGluZ1NwaGVyZSk7XG5cdFx0Ly8g6KeG6ZSl5YmU6ZmkXG5cdFx0aWYgKHZpc2liaWxpdHkgPT09IEludGVyc2VjdC5PVVRTSURFIHx8ICF0aGlzLmZydXN0dW1DdWxsKSByZXR1cm47XG5cdFx0aWYgKHRoaXMubWF0ZXJpYWwudHJhbnNwYXJlbnQpIHtcblx0XHRcdGZyYW1lU3RhdGUucmVuZGVyUXVldWUudHJhbnNwYXJlbnQucHVzaCh0aGlzKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0ZnJhbWVTdGF0ZS5yZW5kZXJRdWV1ZS5vcGFxdWUucHVzaCh0aGlzKTtcblx0XHR9XG5cdH1cblx0YmVmb3JlUmVuZGVyKCkge1xuXHRcdC8vIGJlZm9yZSByZW5kZXJcblx0fVxuXHRhZnRlclJlbmRlcigpIHtcblx0XHQvLyBhZnRlciByZW5kZXJcblx0fVxuXHRwdWJsaWMgZ2V0RHJhd0NvbW1hbmQob3ZlcnJpZGVNYXRlcmlhbD86IE1hdGVyaWFsLCBjb21tYW5kU3ViVHlwZT86IENvbW1hbmRTdWJUeXBlLCBsaWdodE1hbmdlcj86IExpZ2h0TWFuZ2VyKSB7XG5cdFx0aWYgKCF0aGlzLmRyYXdDb21tYW5kIHx8IHRoaXMubWF0ZXJpYWwuZGlydHkpIHtcblx0XHRcdHRoaXMubWF0ZXJpYWwuc2hhZGVyU291cmNlLnNldERlZmluZXMoXG5cdFx0XHRcdE9iamVjdC5hc3NpZ24oe30sIHRoaXMubWF0ZXJpYWwuc2hhZGVyRGF0YS5kZWZpbmVzLCB0aGlzLmdlb21ldHJ5LmRlZmluZXMpXG5cdFx0XHQpO1xuXHRcdFx0aWYgKHRoaXMubWF0ZXJpYWwuZGlydHkpIHRoaXMubWF0ZXJpYWwuZGlydHkgPSBmYWxzZTtcblx0XHRcdHRoaXMuZHJhd0NvbW1hbmQgPSBuZXcgRHJhd0NvbW1hbmQoe1xuXHRcdFx0XHR2ZXJ0ZXhCdWZmZXJzOiB0aGlzLmdlb21ldHJ5LnZlcnRleEJ1ZmZlcnMsXG5cdFx0XHRcdGluZGV4QnVmZmVyOiB0aGlzLmdlb21ldHJ5LmluZGV4QnVmZmVyLFxuXHRcdFx0XHRzaGFkZXJEYXRhOiB0aGlzLm1hdGVyaWFsLnNoYWRlckRhdGEsXG5cdFx0XHRcdGluc3RhbmNlczogdGhpcy5pbnN0YW5jZUNvdW50LFxuXHRcdFx0XHRjb3VudDogdGhpcy5nZW9tZXRyeS5jb3VudCxcblx0XHRcdFx0cmVuZGVyU3RhdGU6IHRoaXMubWF0ZXJpYWwucmVuZGVyU3RhdGUsXG5cdFx0XHRcdHNoYWRlclNvdXJjZTogdGhpcy5tYXRlcmlhbC5zaGFkZXJTb3VyY2UsXG5cdFx0XHRcdGxpZ2h0U2hhZGVyRGF0YTogdGhpcy5tYXRlcmlhbC5saWdodCA/IGxpZ2h0TWFuZ2VyPy5saWdodFNoYWRlckRhdGEgOiB1bmRlZmluZWQsXG5cdFx0XHRcdHVzZUxpZ2h0OiB0aGlzLm1hdGVyaWFsLmxpZ2h0XG5cdFx0XHR9KTtcblx0XHR9XG5cdFx0aWYgKG92ZXJyaWRlTWF0ZXJpYWwpIHtcblx0XHRcdGlmICghdGhpcy5zdWJDb21tYW5kc1tjb21tYW5kU3ViVHlwZV0pIHtcblx0XHRcdFx0Y29uc3QgY29weU1hdCA9IG92ZXJyaWRlTWF0ZXJpYWwuY2xvbmUoKTtcblx0XHRcdFx0Y29weU1hdC51cGRhdGUodW5kZWZpbmVkLCB0aGlzKTtcblx0XHRcdFx0aWYgKGNvcHlNYXQuZGlydHkpIGNvcHlNYXQuZGlydHkgPSBmYWxzZTtcblx0XHRcdFx0dGhpcy5zdWJDb21tYW5kc1tjb21tYW5kU3ViVHlwZV0gPSB0aGlzLmRyYXdDb21tYW5kLnNoYWxsb3dDbG9uZShjb3B5TWF0KTtcblx0XHRcdH1cblx0XHRcdHJldHVybiB0aGlzLnN1YkNvbW1hbmRzW2NvbW1hbmRTdWJUeXBlXTtcblx0XHR9XG5cdFx0cmV0dXJuIHRoaXMuZHJhd0NvbW1hbmQ7XG5cdH1cblx0ZGVzdHJveSgpIHtcblx0XHR0aGlzLmdlb21ldHJ5LmRlc3Ryb3koKTtcblx0XHR0aGlzLm1hdGVyaWFsLmRlc3Ryb3koKTtcblx0fVxufVxuIiwiaW1wb3J0IHsgUmVuZGVyT2JqZWN0VHlwZSB9IGZyb20gXCIuLi9jb3JlL1dlYkdQVVR5cGVzXCI7XHJcbmltcG9ydCBHZW9tZXRyeSBmcm9tIFwiLi4vZ2VvbWV0cnkvR2VvbWV0cnlcIjtcclxuaW1wb3J0IFBsYW5lR2VvbWV0cnkgZnJvbSBcIi4uL2dlb21ldHJ5L1BsYW5lR2VvbWV0cnlcIjtcclxuaW1wb3J0IHsgTGlnaHQgfSBmcm9tIFwiLi4vbGlnaHQvTGlnaHRcIjtcclxuaW1wb3J0IFNoYWRlck1hdGVyaWFsIGZyb20gXCIuLi9tYXRlcmlhbC9TaGFkZXJNYXRlcmlhbFwiO1xyXG5pbXBvcnQgeyBNZXNoIH0gZnJvbSBcIi4uL21lc2gvTWVzaFwiO1xyXG5pbXBvcnQgeyBWaWV3UG9ydCB9IGZyb20gXCIuLi9yZW5kZXIvUmVuZGVyU3RhdGVcIjtcclxuaW1wb3J0IFNhbXBsZXIgZnJvbSBcIi4uL3JlbmRlci9TYW1wbGVyXCI7XHJcbmltcG9ydCB7IFNjZW5lIH0gZnJvbSBcIi4uL1NjZW5lXCI7XHJcbmltcG9ydCBnZXRWZXJ0RnJhZyBmcm9tIFwiLi4vc2hhZGVyL1NoYWRlcnNcIjtcclxuXHJcbmV4cG9ydCBjbGFzcyBTaGFkb3dNYXBEZWJ1Z2dlciB7XHJcblx0cHJpdmF0ZSBtZXNoOiBNZXNoO1xyXG5cdHByaXZhdGUgZGVidWdnZXJTaXplOiB7IHdpZHRoOiBudW1iZXI7IGhlaWdodDogbnVtYmVyIH07XHJcblx0cHVibGljIGxpZ2h0OiBMaWdodDtcclxuXHRwcml2YXRlIGdlb21ldHJ5OiBHZW9tZXRyeTtcclxuXHRwcml2YXRlIG1hdGVyaWFsOiBTaGFkZXJNYXRlcmlhbDtcclxuXHRwcml2YXRlIHNjZW5lOiBTY2VuZTtcclxuXHJcblx0Y29uc3RydWN0b3IobGlnaHQ6IExpZ2h0LCBzY2VuZTogU2NlbmUpIHtcclxuXHRcdGlmICghbGlnaHQgfHwgIShsaWdodCBpbnN0YW5jZW9mIExpZ2h0KSkgdGhyb3cgbmV3IEVycm9yKFwiVGhlIHBhcmFtZXRlciBtdXN0IGJlIExpZ2h0IGluc3RhbmNlXCIpO1xyXG5cclxuXHRcdHRoaXMubGlnaHQgPSBsaWdodDtcclxuXHRcdHRoaXMuc2NlbmUgPSBzY2VuZTtcclxuXHRcdHRoaXMuZGVidWdnZXJTaXplID0ge1xyXG5cdFx0XHR3aWR0aDogMjU2LFxyXG5cdFx0XHRoZWlnaHQ6IDI1NlxyXG5cdFx0fTtcclxuXHJcblx0XHR0aGlzLm1lc2ggPSB0aGlzLl9jcmVhdGVTaGFkb3dNYXBNZXNoKCk7XHJcblx0XHRjb25zdCBzaGFkb3dNYXAgPSB0aGlzLmxpZ2h0LnNoYWRvdy5nZXRTaGFkb3dNYXBUZXh0dXJlKCk7XHJcblx0XHR0aGlzLm1hdGVyaWFsLnVuaWZvcm1zLnRleHR1cmUudmFsdWUgPSBzaGFkb3dNYXA7XHJcblx0XHR0aGlzLm1lc2gudHlwZSA9IFJlbmRlck9iamVjdFR5cGUuRGVidWc7XHJcblx0XHR0aGlzLnNjZW5lLmFkZCh0aGlzLm1lc2gpO1xyXG5cdH1cclxuXHJcblx0X2NyZWF0ZVNoYWRvd01hcE1lc2goKSB7XHJcblx0XHRjb25zdCBzaGFkZXIgPSBnZXRWZXJ0RnJhZyhcInNoYWRvd01hcERlYnVnZ2VyXCIsIHtcclxuXHRcdFx0cG9zaXRpb25Mb2NhdGlvbjogMFxyXG5cdFx0fSk7XHJcblx0XHR0aGlzLmdlb21ldHJ5ID0gbmV3IFBsYW5lR2VvbWV0cnkoMiwgMik7XHJcblx0XHR0aGlzLm1hdGVyaWFsID0gbmV3IFNoYWRlck1hdGVyaWFsKHtcclxuXHRcdFx0dHlwZTogXCJzaGFkb3dNYXBEZWJ1Z2dlclwiLFxyXG5cdFx0XHRmcmFnOiBzaGFkZXIuZnJhZyxcclxuXHRcdFx0dmVydDogc2hhZGVyLnZlcnQsXHJcblx0XHRcdHVuaWZvcm1zOiB7XHJcblx0XHRcdFx0dGV4dHVyZToge1xyXG5cdFx0XHRcdFx0dHlwZTogXCJ0ZXh0dXJlXCIsXHJcblx0XHRcdFx0XHR2YWx1ZTogdW5kZWZpbmVkXHJcblx0XHRcdFx0fSxcclxuXHRcdFx0XHRzYW1wbGVyOiB7XHJcblx0XHRcdFx0XHR0eXBlOiBcInNhbXBsZXJcIixcclxuXHRcdFx0XHRcdHZhbHVlOiBuZXcgU2FtcGxlcih7XHJcblx0XHRcdFx0XHRcdG1hZ0ZpbHRlcjogXCJsaW5lYXJcIixcclxuXHRcdFx0XHRcdFx0bWluRmlsdGVyOiBcImxpbmVhclwiXHJcblx0XHRcdFx0XHR9KVxyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cdFx0fSk7XHJcblx0XHR0aGlzLm1hdGVyaWFsLnJlbmRlclN0YXRlLnZpZXdwb3J0ID0gbmV3IFZpZXdQb3J0KDAsIDAsIHRoaXMuZGVidWdnZXJTaXplLndpZHRoLCB0aGlzLmRlYnVnZ2VyU2l6ZS5oZWlnaHQpO1xyXG5cdFx0cmV0dXJuIG5ldyBNZXNoKHRoaXMuZ2VvbWV0cnksIHRoaXMubWF0ZXJpYWwpO1xyXG5cdH1cclxuXHJcblx0c2V0U2l6ZSh3aWR0aDogbnVtYmVyLCBoZWlnaHQ6IG51bWJlcikge1xyXG5cdFx0aWYgKCF3aWR0aCB8fCAhaGVpZ2h0KSByZXR1cm47XHJcblx0XHR0aGlzLmRlYnVnZ2VyU2l6ZS53aWR0aCA9IHdpZHRoO1xyXG5cdFx0dGhpcy5kZWJ1Z2dlclNpemUuaGVpZ2h0ID0gaGVpZ2h0O1xyXG5cdFx0dGhpcy51cGRhdGUoKTtcclxuXHR9XHJcblxyXG5cdHVwZGF0ZSgpIHtcclxuXHRcdHRoaXMubWF0ZXJpYWwucmVuZGVyU3RhdGUudmlld3BvcnQgPSBuZXcgVmlld1BvcnQoMCwgMCwgdGhpcy5kZWJ1Z2dlclNpemUud2lkdGgsIHRoaXMuZGVidWdnZXJTaXplLmhlaWdodCk7XHJcblx0fVxyXG59XHJcbiIsImltcG9ydCB7IEZyYW1lU3RhdGUgfSBmcm9tIFwiLi4vY29yZS9GcmFtZVN0YXRlXCI7XG5pbXBvcnQgeyBVbmlmb3JtRW51bSB9IGZyb20gXCIuLi9jb3JlL1dlYkdQVVR5cGVzXCI7XG5pbXBvcnQgeyBNZXNoIH0gZnJvbSBcIi4uL21lc2gvTWVzaFwiO1xuaW1wb3J0IFVuaWZvcm1CdWZmZXIgZnJvbSBcIi4uL3JlbmRlci9Vbmlmb3JtQnVmZmVyXCI7XG5pbXBvcnQgeyBTaGFkZXJTb3VyY2UgfSBmcm9tIFwiLi4vc2hhZGVyL1NoYWRlclNvdXJjZVwiO1xuaW1wb3J0IHsgTWF0ZXJpYWwgfSBmcm9tIFwiLi9NYXRlcmlhbFwiO1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQ29sb3JNYXRlcmlhbCBleHRlbmRzIE1hdGVyaWFsIHtcblx0Y29uc3RydWN0b3IoKSB7XG5cdFx0c3VwZXIoKTtcblx0XHR0aGlzLnR5cGUgPSBcImNvbG9yXCI7XG5cdFx0dGhpcy5zaGFkZXJTb3VyY2UgPSBuZXcgU2hhZGVyU291cmNlKHtcblx0XHRcdHNoYWRlcklkOiB0aGlzLnR5cGUsXG5cdFx0XHRkZWZpbmVzOiB7fVxuXHRcdH0pO1xuXHR9XG5cdHVwZGF0ZShmcmFtZVN0YXRlPzogRnJhbWVTdGF0ZSwgbWVzaD86IE1lc2gpIHtcblx0XHRpZiAoIXRoaXMuc2hhZGVyRGF0YSB8fCB0aGlzLmRpcnR5KSB0aGlzLmNyZWF0ZVNoYWRlckRhdGEoKTtcblx0XHRjb25zdCB1bmlmb3JtQnVmZmVyID0gbmV3IFVuaWZvcm1CdWZmZXIoeyBsYWJlbDogXCJjb2xvclwiIH0pO1xuXHRcdHVuaWZvcm1CdWZmZXIuc2V0VW5pZm9ybShcblx0XHRcdFwibW9kZWxNYXRyaXhcIixcblx0XHRcdCgpID0+IHtcblx0XHRcdFx0cmV0dXJuIG1lc2gubW9kZWxNYXRyaXg7XG5cdFx0XHR9LFxuXHRcdFx0VW5pZm9ybUVudW0uTWF0NFxuXHRcdCk7XG5cdFx0dGhpcy5zaGFkZXJEYXRhLnNldFVuaWZvcm1CdWZmZXIoXCJjb2xvclwiLCB1bmlmb3JtQnVmZmVyKTtcblx0fVxufVxuIiwiaW1wb3J0IHsgRnJhbWVTdGF0ZSB9IGZyb20gXCIuLi9jb3JlL0ZyYW1lU3RhdGVcIjtcclxuaW1wb3J0IHsgUmVuZGVyT2JqZWN0VHlwZSB9IGZyb20gXCIuLi9jb3JlL1dlYkdQVVR5cGVzXCI7XHJcbmltcG9ydCBHZW9tZXRyeSBmcm9tIFwiLi4vZ2VvbWV0cnkvR2VvbWV0cnlcIjtcclxuaW1wb3J0IENvbG9yTWF0ZXJpYWwgZnJvbSBcIi4uL21hdGVyaWFsL0NvbG9yTWF0ZXJpYWxcIjtcclxuaW1wb3J0IHsgRmxvYXQzMkF0dHJpYnV0ZSB9IGZyb20gXCIuLi9yZW5kZXIvQXR0cmlidXRlXCI7XHJcbmltcG9ydCB7IE1lc2ggfSBmcm9tIFwiLi9NZXNoXCI7XHJcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEF4ZXMgZXh0ZW5kcyBNZXNoIHtcclxuXHRtYXRlcmlhbDogQ29sb3JNYXRlcmlhbDtcclxuXHRjb25zdHJ1Y3RvcigpIHtcclxuXHRcdHN1cGVyKCk7XHJcblx0XHR0aGlzLnR5cGUgPSBSZW5kZXJPYmplY3RUeXBlLkF4ZXM7XHJcblx0XHR0aGlzLmRpc3RhbmNlVG9DYW1lcmEgPSAxMDtcclxuXHRcdHRoaXMubWF0ZXJpYWwgPSBuZXcgQ29sb3JNYXRlcmlhbCgpO1xyXG5cdFx0dGhpcy5tYXRlcmlhbC53aXJlZnJhbWUgPSB0cnVlO1xyXG5cdFx0dGhpcy5pbml0KCk7XHJcblx0fVxyXG5cdHVwZGF0ZShmcmFtZVN0YXRlOiBGcmFtZVN0YXRlKSB7XHJcblx0XHR0aGlzLnVwZGF0ZU1hdHJpeCgpO1xyXG5cdFx0dGhpcy5tYXRlcmlhbC51cGRhdGUoZnJhbWVTdGF0ZSwgdGhpcyk7XHJcblx0XHRmcmFtZVN0YXRlLnJlbmRlclF1ZXVlLm9wYXF1ZS5wdXNoKHRoaXMpO1xyXG5cdH1cclxuXHRwcml2YXRlIGluaXQoKSB7XHJcblx0XHRjb25zdCBwb3NpdGlvbiA9IFswLCAwLCAwLCAxLCAwLCAwLCAwLCAwLCAwLCAwLCAxLCAwLCAwLCAwLCAwLCAwLCAwLCAxXTtcclxuXHRcdGNvbnN0IGNvbG9ycyA9IFsxLCAwLCAwLCAxLCAxLCAwLjUsIDAuNSwgMSwgMCwgMSwgMCwgMSwgMC41LCAxLCAwLjUsIDEsIDAsIDAsIDEsIDEsIDAuNSwgMC41LCAxLCAxXTtcclxuXHRcdGNvbnN0IGluZGljZXMgPSBbMCwgMSwgMiwgMywgNCwgNV07XHJcblx0XHR0aGlzLmdlb21ldHJ5ID0gbmV3IEdlb21ldHJ5KHt9KTtcclxuXHRcdHRoaXMuZ2VvbWV0cnkuc2V0QXR0cmlidXRlKG5ldyBGbG9hdDMyQXR0cmlidXRlKFwicG9zaXRpb25cIiwgcG9zaXRpb24sIDMpKTtcclxuXHRcdHRoaXMuZ2VvbWV0cnkuc2V0QXR0cmlidXRlKG5ldyBGbG9hdDMyQXR0cmlidXRlKFwiY29sb3JcIiwgY29sb3JzLCA0KSk7XHJcblx0XHR0aGlzLmdlb21ldHJ5LnNldEluZGljZShpbmRpY2VzKTtcclxuXHRcdHRoaXMuZ2VvbWV0cnkuY291bnQgPSBpbmRpY2VzLmxlbmd0aDtcclxuXHR9XHJcbn1cclxuIiwiaW1wb3J0IHsgRmxvYXQzMkF0dHJpYnV0ZSB9IGZyb20gXCIuLi9yZW5kZXIvQXR0cmlidXRlXCI7XG5pbXBvcnQgR2VvbWV0cnkgZnJvbSBcIi4vR2VvbWV0cnlcIjtcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFNreUJveEdlb21ldHJ5IGV4dGVuZHMgR2VvbWV0cnkge1xuXHRjb25zdHJ1Y3RvcigpIHtcblx0XHRzdXBlcih7XG5cdFx0XHR0eXBlOiBcInNreUJveEdlb21ldHJ5XCJcblx0XHR9KTtcblx0XHR0aGlzLmluaXQoKTtcblx0fVxuXHRwdWJsaWMgaW5pdCgpIHtcblx0XHRjb25zdCBwb3NpdGlvbnMgPSBbXG5cdFx0XHQxLjAsXG5cdFx0XHQxLjAsXG5cdFx0XHQxLjAsIC8vIDBcblx0XHRcdC0xLjAsXG5cdFx0XHQxLjAsXG5cdFx0XHQxLjAsIC8vIDFcblx0XHRcdDEuMCxcblx0XHRcdC0xLjAsXG5cdFx0XHQxLjAsIC8vIDJcblx0XHRcdC0xLjAsXG5cdFx0XHQtMS4wLFxuXHRcdFx0MS4wLCAvLyAzXG5cdFx0XHQxLjAsXG5cdFx0XHQxLjAsXG5cdFx0XHQtMS4wLCAvLyA0XG5cdFx0XHQtMS4wLFxuXHRcdFx0MS4wLFxuXHRcdFx0LTEuMCwgLy8gNVxuXHRcdFx0MS4wLFxuXHRcdFx0LTEuMCxcblx0XHRcdC0xLjAsIC8vIDZcblx0XHRcdC0xLjAsXG5cdFx0XHQtMS4wLFxuXHRcdFx0LTEuMCAvLyA3XG5cdFx0XTtcblx0XHRjb25zdCBpbmRpY2VzID0gW1xuXHRcdFx0Ly8gUG9zWCAoUmlnaHQpXG5cdFx0XHQwLCAyLCA0LCA2LCA0LCAyLFxuXG5cdFx0XHQvLyBOZWdYIChMZWZ0KVxuXHRcdFx0NSwgMywgMSwgMywgNSwgNyxcblxuXHRcdFx0Ly8gUG9zWSAoVG9wKVxuXHRcdFx0NCwgMSwgMCwgMSwgNCwgNSxcblxuXHRcdFx0Ly8gTmVnWSAoQm90dG9tKVxuXHRcdFx0MiwgMywgNiwgNywgNiwgMyxcblxuXHRcdFx0Ly8gUG9zWiAoRnJvbnQpXG5cdFx0XHQwLCAxLCAyLCAzLCAyLCAxLFxuXG5cdFx0XHQvLyBOZWdaIChCYWNrKVxuXHRcdFx0NiwgNSwgNCwgNSwgNiwgN1xuXHRcdF07XG5cdFx0dGhpcy5zZXRBdHRyaWJ1dGUobmV3IEZsb2F0MzJBdHRyaWJ1dGUoXCJwb3NpdGlvblwiLCBwb3NpdGlvbnMsIDMpKTtcblx0XHR0aGlzLnNldEluZGljZShpbmRpY2VzKTtcblx0XHR0aGlzLmNvdW50ID0gaW5kaWNlcy5sZW5ndGg7XG5cdH1cbn1cbiIsImZ1bmN0aW9uIHJldHVyblRydWUoKSB7XHJcblx0cmV0dXJuIHRydWU7XHJcbn1cclxuZXhwb3J0IGZ1bmN0aW9uIGRlc3Ryb3lPYmplY3Qob2JqZWN0KSB7XHJcblx0Ly8gbWVzc2FnZSA9bWVzc2FnZXx8XCJUaGlzIG9iamVjdCB3YXMgZGVzdHJveWVkLCBpLmUuLCBkZXN0cm95KCkgd2FzIGNhbGxlZC5cIjtcclxuXHJcblx0ZnVuY3Rpb24gdGhyb3dPbkRlc3Ryb3llZCgpIHtcclxuXHRcdHRocm93IG5ldyBFcnJvcihcIlRoaXMgb2JqZWN0IHdhcyBkZXN0cm95ZWQsIGkuZS4sIGRlc3Ryb3koKSB3YXMgY2FsbGVkLlwiKTtcclxuXHR9XHJcblxyXG5cdGZvciAoY29uc3Qga2V5IGluIG9iamVjdCkge1xyXG5cdFx0aWYgKHR5cGVvZiBvYmplY3Rba2V5XSA9PT0gXCJmdW5jdGlvblwiKSB7XHJcblx0XHRcdG9iamVjdFtrZXldID0gdGhyb3dPbkRlc3Ryb3llZDtcclxuXHRcdH1cclxuXHR9XHJcblxyXG5cdG9iamVjdC5pc0Rlc3Ryb3llZCA9IHJldHVyblRydWU7XHJcblxyXG5cdHJldHVybiB1bmRlZmluZWQ7XHJcbn1cclxuIiwiaW1wb3J0IFNhbXBsZXIgZnJvbSBcIi4uL3JlbmRlci9TYW1wbGVyXCI7XG5pbXBvcnQgVGV4dHVyZSBmcm9tIFwiLi4vcmVuZGVyL1RleHR1cmVcIjtcbmltcG9ydCBkZWZpbmVkIGZyb20gXCIuLi91dGlscy9kZWZpbmVkXCI7XG5pbXBvcnQgeyBkZXN0cm95T2JqZWN0IH0gZnJvbSBcIi4uL3V0aWxzL2Rlc3Ryb3lPYmplY3RcIjtcbnR5cGUgVGV4dHVyZUNhY2hlUHJvcCA9IHtcblx0dGV4dHVyZTogVGV4dHVyZTtcblx0Y291bnQ6IG51bWJlcjtcbn07XG5jbGFzcyBUZXh0dXJlQ2FjaGUge1xuXHRwdWJsaWMgZGVmYXVsdFNhbXBsZXI6IFNhbXBsZXI7XG5cdHByaXZhdGUgX251bWJlck9mVGV4dHVyZXM6IG51bWJlcjtcblx0cHJpdmF0ZSBfdGV4dHVyZXM6IE1hcDxzdHJpbmcsIFRleHR1cmVDYWNoZVByb3A+O1xuXHRwcml2YXRlIF90ZXh0dXJlc1RvUmVsZWFzZTogTWFwPHN0cmluZywgVGV4dHVyZUNhY2hlUHJvcD47XG5cdGNvbnN0cnVjdG9yKCkge1xuXHRcdHRoaXMuX251bWJlck9mVGV4dHVyZXMgPSAwO1xuXHRcdHRoaXMuX3RleHR1cmVzID0gbmV3IE1hcCgpO1xuXHRcdHRoaXMuX251bWJlck9mVGV4dHVyZXMgPSAwO1xuXHRcdHRoaXMuX3RleHR1cmVzVG9SZWxlYXNlID0gbmV3IE1hcCgpO1xuXHRcdHRoaXMuZGVmYXVsdFNhbXBsZXIgPSBuZXcgU2FtcGxlcih7XG5cdFx0XHRtYWdGaWx0ZXI6IFwibGluZWFyXCIsXG5cdFx0XHRtaW5GaWx0ZXI6IFwibGluZWFyXCIsXG5cdFx0XHRhZGRyZXNzTW9kZVU6IFwicmVwZWF0XCIsXG5cdFx0XHRhZGRyZXNzTW9kZVY6IFwicmVwZWF0XCJcblx0XHR9KTtcblx0fVxuXHRnZXQgbnVtYmVyT2ZUZXh0dXJlcygpOiBudW1iZXIge1xuXHRcdHJldHVybiB0aGlzLl9udW1iZXJPZlRleHR1cmVzO1xuXHR9XG5cdGdldFRleHR1cmUoa2V5d29yZCkge1xuXHRcdGNvbnN0IGNhY2hlZFRleHR1cmUgPSB0aGlzLl90ZXh0dXJlcy5nZXQoa2V5d29yZCk7XG5cdFx0aWYgKCFkZWZpbmVkKGNhY2hlZFRleHR1cmUpKSB7XG5cdFx0XHRyZXR1cm4gdW5kZWZpbmVkO1xuXHRcdH1cblx0XHQvLyBObyBsb25nZXIgd2FudCB0byByZWxlYXNlIHRoaXMgaWYgaXQgd2FzIHByZXZpb3VzbHkgcmVsZWFzZWQuXG5cdFx0ZGVsZXRlIHRoaXMuX3RleHR1cmVzVG9SZWxlYXNlW2tleXdvcmRdO1xuXG5cdFx0KytjYWNoZWRUZXh0dXJlLmNvdW50O1xuXHRcdHJldHVybiBjYWNoZWRUZXh0dXJlLnRleHR1cmU7XG5cdH1cblx0YWRkVGV4dHVyZShrZXl3b3JkLCB0ZXh0dXJlKSB7XG5cdFx0Y29uc3QgY2FjaGVkVGV4dHVyZSA9IHtcblx0XHRcdHRleHR1cmU6IHRleHR1cmUsXG5cdFx0XHRjb3VudDogMVxuXHRcdH07XG5cblx0XHR0ZXh0dXJlLmZpbmFsRGVzdHJveSA9IHRleHR1cmUuZGVzdHJveTtcblxuXHRcdC8vIGNvbnN0IHRoYXQgPSB0aGlzO1xuXHRcdHRleHR1cmUuZGVzdHJveSA9ICgpID0+IHtcblx0XHRcdGlmICgtLWNhY2hlZFRleHR1cmUuY291bnQgPT09IDApIHtcblx0XHRcdFx0dGhpcy5fdGV4dHVyZXNUb1JlbGVhc2Uuc2V0KGtleXdvcmQsIGNhY2hlZFRleHR1cmUpO1xuXHRcdFx0fVxuXHRcdH07XG5cblx0XHR0aGlzLl90ZXh0dXJlcy5zZXQoa2V5d29yZCwgY2FjaGVkVGV4dHVyZSk7XG5cdFx0Kyt0aGlzLl9udW1iZXJPZlRleHR1cmVzO1xuXHR9XG5cdHJlbGVhc2VkVGV4dHVyZXMoKSB7XG5cdFx0dGhpcy5fdGV4dHVyZXNUb1JlbGVhc2UuZm9yRWFjaCgoY2FjaGVUZXh0dXJlKSA9PiB7XG5cdFx0XHRjYWNoZVRleHR1cmUudGV4dHVyZT8uZmluYWxEZXN0cm95KCk7XG5cdFx0XHQtLXRoaXMuX251bWJlck9mVGV4dHVyZXM7XG5cdFx0fSk7XG5cblx0XHR0aGlzLl90ZXh0dXJlc1RvUmVsZWFzZS5jbGVhcigpO1xuXHR9XG5cdGRlc3Ryb3koKSB7XG5cdFx0dGhpcy5fdGV4dHVyZXMuZm9yRWFjaCgoY2FjaGVkVGV4dHVyZSkgPT4ge1xuXHRcdFx0Y2FjaGVkVGV4dHVyZS50ZXh0dXJlPy5maW5hbERlc3Ryb3koKTtcblx0XHR9KTtcblx0XHRyZXR1cm4gZGVzdHJveU9iamVjdCh0aGlzKTtcblx0fVxufVxuY29uc3QgdGV4dHVyZUNhY2hlID0gbmV3IFRleHR1cmVDYWNoZSgpO1xuZXhwb3J0IGRlZmF1bHQgdGV4dHVyZUNhY2hlO1xuIiwiaW1wb3J0IFNhbXBsZXIgZnJvbSBcIi4uL3JlbmRlci9TYW1wbGVyXCI7XG5pbXBvcnQgVGV4dHVyZSBmcm9tIFwiLi4vcmVuZGVyL1RleHR1cmVcIjtcblxuZXhwb3J0IGRlZmF1bHQgYXN5bmMgZnVuY3Rpb24gQ3ViZVRleHR1cmVMb2FkZXIodXJscykge1xuXHRjb25zdCBwcm9taXNlcyA9IHVybHMubWFwKChzcmMpID0+IHtcblx0XHRjb25zdCBpbWcgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiaW1nXCIpO1xuXHRcdGltZy5zcmMgPSBzcmM7XG5cdFx0cmV0dXJuIGltZy5kZWNvZGUoKS50aGVuKCgpID0+IGNyZWF0ZUltYWdlQml0bWFwKGltZykpO1xuXHR9KTtcblx0Y29uc3QgaW1hZ2VzID0gYXdhaXQgUHJvbWlzZS5hbGwocHJvbWlzZXMpO1xuXHRhd2FpdCBQcm9taXNlLmFsbChpbWFnZXMpO1xuXHRjb25zdCBiYXNlU2FtcGxlciA9IG5ldyBTYW1wbGVyKHtcblx0XHRtYWdGaWx0ZXI6IFwibGluZWFyXCIsXG5cdFx0bWluRmlsdGVyOiBcImxpbmVhclwiXG5cdH0pO1xuXHRjb25zdCBkYXRhID0gaW1hZ2VzLm1hcCgoaW1hZ2UsIGkpID0+IHtcblx0XHRyZXR1cm4ge1xuXHRcdFx0c291cmNlOiBpbWFnZSxcblx0XHRcdHdpZHRoOiBpbWFnZS53aWR0aCxcblx0XHRcdGhlaWdodDogaW1hZ2UuaGVpZ2h0LFxuXHRcdFx0ZGVwdGg6IDEsXG5cdFx0XHR4OiAwLFxuXHRcdFx0eTogMCxcblx0XHRcdHo6IGlcblx0XHR9O1xuXHR9KTtcblx0Y29uc3QgYmFzZVRleHR1cmUgPSBuZXcgVGV4dHVyZSh7XG5cdFx0c2l6ZToge1xuXHRcdFx0d2lkdGg6IGltYWdlc1swXS53aWR0aCxcblx0XHRcdGhlaWdodDogaW1hZ2VzWzBdLmhlaWdodCxcblx0XHRcdGRlcHRoOiA2XG5cdFx0fSxcblx0XHRmb3JtYXQ6IFwicmdiYTh1bm9ybVwiLFxuXHRcdHVzYWdlOiBHUFVUZXh0dXJlVXNhZ2UuVEVYVFVSRV9CSU5ESU5HIHwgR1BVVGV4dHVyZVVzYWdlLkNPUFlfRFNUIHwgR1BVVGV4dHVyZVVzYWdlLlJFTkRFUl9BVFRBQ0hNRU5ULFxuXHRcdGRhdGEsXG5cdFx0dmlld0Zvcm1hdHM6IFwiY3ViZVwiLFxuXHRcdG1pcExldmVsQ291bnQ6IDYsXG5cdFx0bmVlZE1pcE1hcDogdHJ1ZVxuXHR9KTtcblx0cmV0dXJuIHtcblx0XHR0ZXh0dXJlOiBiYXNlVGV4dHVyZSxcblx0XHRzYW1wbGVyOiBiYXNlU2FtcGxlclxuXHR9O1xufVxuIiwiaW1wb3J0IHsgRnJhbWVTdGF0ZSB9IGZyb20gXCIuLi9jb3JlL0ZyYW1lU3RhdGVcIjtcbmltcG9ydCB0ZXh0dXJlQ2FjaGUgZnJvbSBcIi4uL2NvcmUvVGV4dHVyZUNhY2hlXCI7XG5pbXBvcnQgeyBDb21wYXJlRnVuY3Rpb24gfSBmcm9tIFwiLi4vY29yZS9XZWJHUFVDb25zdGFudFwiO1xuaW1wb3J0IHsgVW5pZm9ybUVudW0gfSBmcm9tIFwiLi4vY29yZS9XZWJHUFVUeXBlc1wiO1xuaW1wb3J0IEN1YmVUZXh0dXJlTG9hZGVyIGZyb20gXCIuLi9sb2FkZXIvQ3ViZVRleHR1cmVMb2FkZXJcIjtcbmltcG9ydCB7IE1lc2ggfSBmcm9tIFwiLi4vbWVzaC9NZXNoXCI7XG5pbXBvcnQgVW5pZm9ybUJ1ZmZlciBmcm9tIFwiLi4vcmVuZGVyL1VuaWZvcm1CdWZmZXJcIjtcbmltcG9ydCB7IFNoYWRlclNvdXJjZSB9IGZyb20gXCIuLi9zaGFkZXIvU2hhZGVyU291cmNlXCI7XG5pbXBvcnQgeyBNYXRlcmlhbCB9IGZyb20gXCIuL01hdGVyaWFsXCI7XG5leHBvcnQgZGVmYXVsdCBjbGFzcyBTa3lCb3hNYXRlcmlhbCBleHRlbmRzIE1hdGVyaWFsIHtcblx0bG9hZEZpc2g6IGJvb2xlYW47XG5cdGNvbnN0cnVjdG9yKCkge1xuXHRcdHN1cGVyKCk7XG5cdFx0dGhpcy50eXBlID0gXCJza3lib3hcIjtcblx0XHR0aGlzLnNoYWRlclNvdXJjZSA9IG5ldyBTaGFkZXJTb3VyY2Uoe1xuXHRcdFx0c2hhZGVySWQ6IHRoaXMudHlwZSxcblx0XHRcdGRlZmluZXM6IHt9XG5cdFx0fSk7XG5cdFx0dGhpcy5sb2FkRmlzaCA9IGZhbHNlO1xuXHRcdHRoaXMucmVuZGVyU3RhdGUuZGVwdGhTdGVuY2lsLmRlcHRoV3JpdGVFbmFibGVkID0gZmFsc2U7XG5cdFx0dGhpcy5yZW5kZXJTdGF0ZS5kZXB0aFN0ZW5jaWwuZGVwdGhDb21wYXJlID0gQ29tcGFyZUZ1bmN0aW9uLkxlc3NFcXVhbDtcblx0fVxuXHRhc3luYyBsb2FkVGV4dHVyZSh1cmxzKSB7XG5cdFx0Y29uc3QgcmVzdWx0ID0gYXdhaXQgQ3ViZVRleHR1cmVMb2FkZXIodXJscyk7XG5cdFx0dGhpcy5sb2FkRmlzaCA9IHRydWU7XG5cdFx0dGV4dHVyZUNhY2hlLmFkZFRleHR1cmUoXCJzcGVjdWxhclwiLCByZXN1bHQudGV4dHVyZSk7XG5cdFx0dGhpcy5iYXNlVGV4dHVyZSA9IHJlc3VsdC50ZXh0dXJlO1xuXHRcdHRoaXMuYmFzZVNhbXBsZXIgPSByZXN1bHQuc2FtcGxlcjtcblx0fVxuXHR1cGRhdGUoZnJhbWVTdGF0ZT86IEZyYW1lU3RhdGUsIG1lc2g/OiBNZXNoKSB7XG5cdFx0aWYgKCF0aGlzLmxvYWRGaXNoKSByZXR1cm47XG5cdFx0aWYgKCF0aGlzLnNoYWRlckRhdGEpIHtcblx0XHRcdHRoaXMuY3JlYXRlU2hhZGVyRGF0YShtZXNoKTtcblx0XHR9XG5cdH1cblx0cHJvdGVjdGVkIGNyZWF0ZVNoYWRlckRhdGEobWVzaD86IE1lc2gpIHtcblx0XHRzdXBlci5jcmVhdGVTaGFkZXJEYXRhKCk7XG5cdFx0Y29uc3QgdW5pZm9ybUJ1ZmZlciA9IG5ldyBVbmlmb3JtQnVmZmVyKHsgbGFiZWw6IFwic2t5Ym94XCIgfSk7XG5cdFx0dW5pZm9ybUJ1ZmZlci5zZXRVbmlmb3JtKFxuXHRcdFx0XCJtb2RlbE1hdHJpeFwiLFxuXHRcdFx0KCkgPT4ge1xuXHRcdFx0XHRyZXR1cm4gbWVzaC5tb2RlbE1hdHJpeDtcblx0XHRcdH0sXG5cdFx0XHRVbmlmb3JtRW51bS5NYXQ0XG5cdFx0KTtcblx0XHR0aGlzLnNoYWRlckRhdGEuc2V0VW5pZm9ybUJ1ZmZlcihcInNreWJveFwiLCB1bmlmb3JtQnVmZmVyKTtcblx0XHR0aGlzLnNoYWRlckRhdGEuc2V0VGV4dHVyZShcImJhc2VUZXh0dXJlXCIsIHRoaXMuYmFzZVRleHR1cmUpO1xuXHRcdHRoaXMuc2hhZGVyRGF0YS5zZXRTYW1wbGVyKFwiYmFzZVNhbXBsZXJcIiwgdGhpcy5iYXNlU2FtcGxlcik7XG5cdH1cbn1cbiIsImltcG9ydCB7IEZyYW1lU3RhdGUgfSBmcm9tIFwiLi4vY29yZS9GcmFtZVN0YXRlXCI7XHJcbmltcG9ydCB7IFJlbmRlck9iamVjdFR5cGUgfSBmcm9tIFwiLi4vY29yZS9XZWJHUFVUeXBlc1wiO1xyXG5pbXBvcnQgU2t5Qm94R2VvbWV0cnkgZnJvbSBcIi4uL2dlb21ldHJ5L1NreUJveEdlb21ldHJ5XCI7XHJcbmltcG9ydCBTa3lCb3hNYXRlcmlhbCBmcm9tIFwiLi4vbWF0ZXJpYWwvU2t5Qm94TWF0ZXJpYWxcIjtcclxuaW1wb3J0IHsgTWVzaCB9IGZyb20gXCIuL01lc2hcIjtcclxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgU2t5Qm94IGV4dGVuZHMgTWVzaCB7XHJcblx0bWF0ZXJpYWw6IFNreUJveE1hdGVyaWFsO1xyXG5cdHB1YmxpYyB2aXNpYmlsaXR5OiBib29sZWFuO1xyXG5cdGNvbnN0cnVjdG9yKHVybHM/OiBBcnJheTxzdHJpbmc+KSB7XHJcblx0XHRzdXBlcigpO1xyXG5cdFx0dGhpcy50eXBlID0gUmVuZGVyT2JqZWN0VHlwZS5Ta3lib3g7XHJcblx0XHR0aGlzLnZpc2liaWxpdHkgPSB0cnVlO1xyXG5cdFx0dGhpcy5tYXRlcmlhbCA9IG5ldyBTa3lCb3hNYXRlcmlhbCgpO1xyXG5cdFx0aWYgKHVybHMpIHRoaXMubWF0ZXJpYWwubG9hZFRleHR1cmUodXJscyk7XHJcblx0XHR0aGlzLmdlb21ldHJ5ID0gbmV3IFNreUJveEdlb21ldHJ5KCk7XHJcblx0XHR0aGlzLmlzU2t5Qm94ID0gdHJ1ZTtcclxuXHR9XHJcblx0dXBkYXRlKGZyYW1lU3RhdGU6IEZyYW1lU3RhdGUpIHtcclxuXHRcdHRoaXMudXBkYXRlTWF0cml4KCk7XHJcblx0XHR0aGlzLmdlb21ldHJ5LnVwZGF0ZShmcmFtZVN0YXRlKTtcclxuXHRcdHRoaXMubWF0ZXJpYWwudXBkYXRlKGZyYW1lU3RhdGUsIHRoaXMpO1xyXG5cdFx0aWYgKHRoaXMudmlzaWJpbGl0eSkgZnJhbWVTdGF0ZS5yZW5kZXJRdWV1ZS5wcmUucHVzaCh0aGlzKTtcclxuXHR9XHJcbn1cclxuIiwiaW1wb3J0IFJlbmRlck9iamVjdCBmcm9tIFwiLi4vY29yZS9SZW5kZXJPYmplY3RcIjtcbmltcG9ydCBNYXRyaXg0IGZyb20gXCIuLi9tYXRoL01hdHJpeDRcIjtcbmltcG9ydCBjcmVhdGVHdWlkIGZyb20gXCIuLi91dGlscy9jcmVhdGVHdWlkXCI7XG5cbmV4cG9ydCBjbGFzcyBJbnN0YW5jZSBleHRlbmRzIFJlbmRlck9iamVjdCB7XG5cdHB1YmxpYyBpZDogc3RyaW5nIHwgbnVtYmVyO1xuXHRwdWJsaWMgdmlzaWJsaXR5OiBib29sZWFuO1xuXHRwcml2YXRlIF9ub3RVcGRhdGVNYXRyaXg6IGJvb2xlYW47XG5cdGNvbnN0cnVjdG9yKCkge1xuXHRcdHN1cGVyKCk7XG5cdFx0dGhpcy5fbm90VXBkYXRlTWF0cml4ID0gZmFsc2U7XG5cdFx0dGhpcy52aXNpYmxpdHkgPSBmYWxzZTtcblx0XHR0aGlzLmlkID0gY3JlYXRlR3VpZCgpO1xuXHR9XG5cdHNldE1hdHJpeDQobWF0NDogTWF0cml4NCkge1xuXHRcdHRoaXMubW9kZWxNYXRyaXguc2V0KG1hdDQpO1xuXHRcdHRoaXMuX25vdFVwZGF0ZU1hdHJpeCA9IHRydWU7XG5cdH1cblx0dXBkYXRlTWF0cml4KG1hdHJpeD86IE1hdHJpeDQpIHtcblx0XHRpZiAodGhpcy5fbm90VXBkYXRlTWF0cml4KSByZXR1cm47XG5cdFx0c3VwZXIudXBkYXRlTWF0cml4KG1hdHJpeCk7XG5cdH1cbn1cbiIsImltcG9ydCBDYW1lcmEgZnJvbSBcIi4uL2NhbWVyYS9DYW1lcmFcIjtcbmltcG9ydCB7IEZyYW1lU3RhdGUgfSBmcm9tIFwiLi4vY29yZS9GcmFtZVN0YXRlXCI7XG5pbXBvcnQgeyBCdWZmZXJCaW5kaW5nVHlwZSwgQnVmZmVyVXNhZ2UsIEludGVyc2VjdCB9IGZyb20gXCIuLi9jb3JlL1dlYkdQVUNvbnN0YW50XCI7XG5pbXBvcnQgeyBVbmlmb3JtRW51bSB9IGZyb20gXCIuLi9jb3JlL1dlYkdQVVR5cGVzXCI7XG5pbXBvcnQgR2VvbWV0cnkgZnJvbSBcIi4uL2dlb21ldHJ5L0dlb21ldHJ5XCI7XG5pbXBvcnQgeyBNYXRlcmlhbCB9IGZyb20gXCIuLi9tYXRlcmlhbC9NYXRlcmlhbFwiO1xuaW1wb3J0IFVuaWZvcm1CdWZmZXIgZnJvbSBcIi4uL3JlbmRlci9Vbmlmb3JtQnVmZmVyXCI7XG5pbXBvcnQgeyBJbnN0YW5jZSB9IGZyb20gXCIuL0luc3RhbmNlXCI7XG5pbXBvcnQgeyBNZXNoIH0gZnJvbSBcIi4vTWVzaFwiO1xuXG5leHBvcnQgY2xhc3MgSW5zdGFuY2VNZXNoIGV4dGVuZHMgTWVzaCB7XG5cdHByaXZhdGUgaW5zdGFuY2VzOiBNYXA8c3RyaW5nIHwgbnVtYmVyLCBJbnN0YW5jZT47XG5cdHByaXZhdGUgcmVuZGVySW5zdGFuY2VzOiBBcnJheTxJbnN0YW5jZT47XG5cdHByaXZhdGUgaGFzQWRkSW5zdGFuY2VzOiBib29sZWFuO1xuXHRjb25zdHJ1Y3RvcihnZW86IEdlb21ldHJ5LCBtYXQ6IE1hdGVyaWFsKSB7XG5cdFx0c3VwZXIoZ2VvLCBtYXQpO1xuXHRcdHRoaXMuaW5zdGFuY2VzID0gbmV3IE1hcCgpO1xuXHRcdHRoaXMucmVuZGVySW5zdGFuY2VzID0gW107XG5cdFx0dGhpcy5oYXNBZGRJbnN0YW5jZXMgPSBmYWxzZTtcblx0fVxuXHR1cGRhdGUoZnJhbWVTdGF0ZTogRnJhbWVTdGF0ZSwgY2FtZXJhPzogQ2FtZXJhKSB7XG5cdFx0Ly8gdXBkYXRlIGluc3RhbmNlcyB2aXNpYmxpdHlcblx0XHR0aGlzLmNoZWNrSW5zdGFuY2VzVmlzaWJsaXR5KHsgZnJhbWVTdGF0ZSwgY2FtZXJhIH0pO1xuXHRcdHRoaXMuZ2VvbWV0cnkudXBkYXRlKGZyYW1lU3RhdGUpO1xuXHRcdHRoaXMubWF0ZXJpYWwudXBkYXRlKGZyYW1lU3RhdGUsIHRoaXMpO1xuXHRcdGlmICghdGhpcy5oYXNBZGRJbnN0YW5jZXMpIHRoaXMuYWRkVW5pZm9ybXNUb01hdGVyaWFsKCk7XG5cdFx0dGhpcy5pbnN0YW5jZUNvdW50ID0gdGhpcy5yZW5kZXJJbnN0YW5jZXMubGVuZ3RoO1xuXHRcdGlmICh0aGlzLnJlbmRlckluc3RhbmNlcy5sZW5ndGggPCAxKSByZXR1cm47XG5cdFx0aWYgKHRoaXMubWF0ZXJpYWwudHJhbnNwYXJlbnQpIHtcblx0XHRcdGZyYW1lU3RhdGUucmVuZGVyUXVldWUudHJhbnNwYXJlbnQucHVzaCh0aGlzKTtcblx0XHR9IGVsc2Uge1xuXHRcdFx0ZnJhbWVTdGF0ZS5yZW5kZXJRdWV1ZS5vcGFxdWUucHVzaCh0aGlzKTtcblx0XHR9XG5cdH1cblx0YWRkSW5zdGFuY2UoaW5zdGFuY2U6IEluc3RhbmNlKSB7XG5cdFx0aWYgKHRoaXMuaW5zdGFuY2VzLmdldChpbnN0YW5jZS5pZCkpIHJldHVybjtcblx0XHR0aGlzLmluc3RhbmNlcy5zZXQoaW5zdGFuY2UuaWQsIGluc3RhbmNlKTtcblx0fVxuXHRyZW1vdmVJbnN0YW5jZShrZXk6IG51bWJlciB8IHN0cmluZykge1xuXHRcdHJldHVybiB0aGlzLmluc3RhbmNlcy5kZWxldGUoa2V5KTtcblx0fVxuXHRnZXRJbnN0YW5jZShrZXk6IG51bWJlciB8IHN0cmluZykge1xuXHRcdHJldHVybiB0aGlzLmluc3RhbmNlcy5nZXQoa2V5KTtcblx0fVxuXHRwcml2YXRlIGNoZWNrSW5zdGFuY2VzVmlzaWJsaXR5KG9wdGlvbnM6IHsgZnJhbWVTdGF0ZTogRnJhbWVTdGF0ZTsgY2FtZXJhOiBDYW1lcmEgfSkge1xuXHRcdGNvbnN0IHsgZnJhbWVTdGF0ZSwgY2FtZXJhIH0gPSBvcHRpb25zO1xuXHRcdGNvbnN0IHByZUZyYW1lSW5zdGFuY2VDb3VudCA9IHRoaXMucmVuZGVySW5zdGFuY2VzLmxlbmd0aDtcblx0XHR0aGlzLnJlbmRlckluc3RhbmNlcyA9IFtdO1xuXHRcdHRoaXMuaW5zdGFuY2VzLmZvckVhY2goKGluc3RhbmNlOiBJbnN0YW5jZSkgPT4ge1xuXHRcdFx0aW5zdGFuY2UudXBkYXRlTWF0cml4KHRoaXM/LnBhcmVudD8ubW9kZWxNYXRyaXgpO1xuXHRcdFx0aW5zdGFuY2UudmlzaWJsaXR5ID0gdGhpcy5nZXRJbnN0YW5jZVZpc2libGl0eSh7IGluc3RhbmNlLCBmcmFtZVN0YXRlLCBjYW1lcmEgfSk7XG5cdFx0XHRpZiAoaW5zdGFuY2UudmlzaWJsaXR5KSB0aGlzLnJlbmRlckluc3RhbmNlcy5wdXNoKGluc3RhbmNlKTtcblx0XHR9KTtcblx0XHR0aGlzLm1hdGVyaWFsLmRpcnR5ID0gdGhpcy5yZW5kZXJJbnN0YW5jZXMubGVuZ3RoID09PSBwcmVGcmFtZUluc3RhbmNlQ291bnQ7XG5cdFx0Ly8gcmVidWlsZCBpbnN0YW5jZU1hdHJpeHNCdWZmZXJcblx0XHRpZiAodGhpcy5tYXRlcmlhbC5kaXJ0eSkgdGhpcy5oYXNBZGRJbnN0YW5jZXMgPSBmYWxzZTtcblx0fVxuXHRwcml2YXRlIGdldEluc3RhbmNlVmlzaWJsaXR5KG9wdGlvbnM6IHsgaW5zdGFuY2U6IEluc3RhbmNlOyBmcmFtZVN0YXRlOiBGcmFtZVN0YXRlOyBjYW1lcmE6IENhbWVyYSB9KTogYm9vbGVhbiB7XG5cdFx0Y29uc3QgeyBpbnN0YW5jZSwgZnJhbWVTdGF0ZSwgY2FtZXJhIH0gPSBvcHRpb25zO1xuXHRcdHRoaXMuZ2VvbWV0cnkuYm91bmRpbmdTcGhlcmUudXBkYXRlKGluc3RhbmNlLm1vZGVsTWF0cml4KTtcblx0XHR0aGlzLmRpc3RhbmNlVG9DYW1lcmEgPSB0aGlzLmdlb21ldHJ5LmJvdW5kaW5nU3BoZXJlLmRpc3RhbmNlVG9DYW1lcmEoY2FtZXJhKTtcblx0XHRjb25zdCB2aXNpYmlsaXR5ID0gZnJhbWVTdGF0ZS5jdWxsaW5nVm9sdW1lLmNvbXB1dGVWaXNpYmlsaXR5KHRoaXMuZ2VvbWV0cnkuYm91bmRpbmdTcGhlcmUpO1xuXHRcdHJldHVybiB2aXNpYmlsaXR5ID09PSBJbnRlcnNlY3QuSU5URVJTRUNUSU5HIHx8IHZpc2liaWxpdHkgPT09IEludGVyc2VjdC5JTlNJREU7XG5cdH1cblx0cHJpdmF0ZSBhZGRVbmlmb3Jtc1RvTWF0ZXJpYWwoKSB7XG5cdFx0aWYgKCF0aGlzLm1hdGVyaWFsLnNoYWRlckRhdGEpIHJldHVybjtcblx0XHR0aGlzLmhhc0FkZEluc3RhbmNlcyA9IHRydWU7XG5cdFx0Y29uc3QgaW5zdGFuY2VNYXRyaXhzQnVmZmVyID0gbmV3IFVuaWZvcm1CdWZmZXIoe1xuXHRcdFx0bGFiZWw6IFwiaW5zdGFuY2VNYXRyaXhzQnVmZmVyXCIsXG5cdFx0XHR0eXBlOiBCdWZmZXJCaW5kaW5nVHlwZS5SZWFkT25seVN0b3JhZ2UsXG5cdFx0XHR1c2FnZTogQnVmZmVyVXNhZ2UuU3RvcmFnZSB8IEJ1ZmZlclVzYWdlLkNvcHlEc3QsXG5cdFx0XHRzaXplOiB0aGlzLmluc3RhbmNlcy5zaXplICogNjRcblx0XHR9KTtcblx0XHRpbnN0YW5jZU1hdHJpeHNCdWZmZXIuc2V0VW5pZm9ybShcblx0XHRcdFwiaW5zdGFuY2VNYXRyaXhzXCIsXG5cdFx0XHQoKSA9PiB7XG5cdFx0XHRcdHJldHVybiB0aGlzPy5yZW5kZXJJbnN0YW5jZXM/Lm1hcCgocmVuZGVySW5zdGFuY2U6IEluc3RhbmNlKSA9PiByZW5kZXJJbnN0YW5jZS5tb2RlbE1hdHJpeCk7XG5cdFx0XHR9LFxuXHRcdFx0VW5pZm9ybUVudW0uTWF0NEFycmF5LFxuXHRcdFx0dGhpcz8ucmVuZGVySW5zdGFuY2VzPy5sZW5ndGhcblx0XHQpO1xuXHRcdHRoaXMubWF0ZXJpYWwuc2hhZGVyRGF0YS5zZXRVbmlmb3JtQnVmZmVyKFwiaW5zdGFuY2VNYXRyaXhzQnVmZmVyXCIsIGluc3RhbmNlTWF0cml4c0J1ZmZlcik7XG5cdFx0dGhpcy5tYXRlcmlhbC5zaGFkZXJEYXRhLnNldERlZmluZShcIlVTRV9JTlNUQU5DRVwiLCB0cnVlKTtcblx0XHR0aGlzLm1hdGVyaWFsLnNoYWRlckRhdGEuc2V0RGVmaW5lKFwiaW5zdGFuY2VDb3VudFwiLCB0aGlzPy5yZW5kZXJJbnN0YW5jZXM/Lmxlbmd0aCk7XG5cdH1cbn1cbiIsImltcG9ydCB7IFNoYWRlclNvdXJjZSB9IGZyb20gXCIuLi9zaGFkZXIvU2hhZGVyU291cmNlXCI7XG5pbXBvcnQgeyBDb21tYW5kIH0gZnJvbSBcIi4vQ29tbWFuZFwiO1xuaW1wb3J0IFBpcGVsaW5lIGZyb20gXCIuL1BpcGVsaW5lXCI7XG5pbXBvcnQgU2hhZGVyRGF0YSBmcm9tIFwiLi9TaGFkZXJEYXRhXCI7XG5cbmV4cG9ydCBjbGFzcyBDb21wdXRlQ29tbWFuZCBpbXBsZW1lbnRzIENvbW1hbmQge1xuXHRwdWJsaWMgZGlzcGF0Y2g/OiB7IHg/OiBudW1iZXI7IHk/OiBudW1iZXI7IHo/OiBudW1iZXIgfTtcblx0cHVibGljIHNoYWRlclNvdXJjZT86IFNoYWRlclNvdXJjZTtcblx0cHVibGljIHNoYWRlckRhdGE/OiBTaGFkZXJEYXRhO1xuXHRjb25zdHJ1Y3RvcihvcHRpb25zOiBDb21wdXRlQ29tbWFuZFR5cGUpIHtcblx0XHR0aGlzLmRpc3BhdGNoID0gb3B0aW9ucy5kaXNwYXRjaDtcblx0XHR0aGlzLnNoYWRlckRhdGEgPSBvcHRpb25zLnNoYWRlckRhdGE7XG5cdFx0dGhpcy5zaGFkZXJTb3VyY2UgPSBvcHRpb25zLnNoYWRlclNvdXJjZTtcblx0fVxuXHRyZW5kZXIocGFyYW1zPzogQ29tcHV0ZVBhcmFtcyk6IHZvaWQge1xuXHRcdGNvbnN0IHsgZGV2aWNlLCBwYXNzRW5jb2RlciB9ID0gcGFyYW1zO1xuXHRcdHRoaXMuc2hhZGVyRGF0YT8uYmluZD8uKGRldmljZSwgcGFzc0VuY29kZXIpO1xuXHRcdGNvbnN0IHBpcGVsaW5lID0gUGlwZWxpbmUuZ2V0Q29tcHV0ZVBpcGVsaW5lRnJvbUNhY2hlKGRldmljZSwgdGhpcywgW3RoaXMuc2hhZGVyRGF0YS5ncm91cExheW91dF0pO1xuXHRcdHBpcGVsaW5lLmJpbmQocGFzc0VuY29kZXIpO1xuXHRcdGNvbnN0IHsgeCwgeSwgeiB9ID0gdGhpcy5kaXNwYXRjaDtcblx0XHRwYXNzRW5jb2Rlci5kaXNwYXRjaFdvcmtncm91cHMoeCwgeSwgeik7XG5cdH1cbn1cbnR5cGUgQ29tcHV0ZUNvbW1hbmRUeXBlID0ge1xuXHRkaXNwYXRjaD86IHsgeD86IG51bWJlcjsgeT86IG51bWJlcjsgej86IG51bWJlciB9O1xuXG5cdHNoYWRlclNvdXJjZT86IFNoYWRlclNvdXJjZTtcblxuXHRzaGFkZXJEYXRhPzogU2hhZGVyRGF0YTtcbn07XG50eXBlIENvbXB1dGVQYXJhbXMgPSB7XG5cdGRldmljZT86IEdQVURldmljZTtcblx0cGFzc0VuY29kZXI/OiBHUFVDb21wdXRlUGFzc0VuY29kZXI7XG59O1xuIiwiaW1wb3J0IHtcblx0QnVmZmVyQmluZGluZ1R5cGUsXG5cdEJ1ZmZlclVzYWdlLFxuXHRDdWxsTW9kZSxcblx0RnJvbnRGYWNlLFxuXHRJbnB1dFN0ZXBNb2RlLFxuXHRQcmltaXRpdmVUb3BvbG9neVxufSBmcm9tIFwiLi4vY29yZS9XZWJHUFVDb25zdGFudFwiO1xuaW1wb3J0IHsgTW9kZWxQYXJhbXMgfSBmcm9tIFwiLi4vY29yZS9XZWJHUFVUeXBlc1wiO1xuaW1wb3J0IHsgQnVmZmVyRmxvYXQzMkF0dHJpYnV0ZSwgRmxvYXQzMkF0dHJpYnV0ZSwgSW50ZXJsZWF2ZWRGbG9hdDMyQXR0cmlidXRlIH0gZnJvbSBcIi4uL3JlbmRlci9BdHRyaWJ1dGVcIjtcbmltcG9ydCB7IENvbXB1dGVDb21tYW5kIH0gZnJvbSBcIi4uL3JlbmRlci9Db21wdXRlQ29tbWFuZFwiO1xuaW1wb3J0IERyYXdDb21tYW5kIGZyb20gXCIuLi9yZW5kZXIvRHJhd0NvbW1hbmRcIjtcbmltcG9ydCBJbmRleEJ1ZmZlciBmcm9tIFwiLi4vcmVuZGVyL0luZGV4QnVmZmVyXCI7XG5pbXBvcnQge1xuXHRCbGVuZENvbnN0YW50LFxuXHREZXB0aFN0ZW5jaWwsXG5cdERlcHRoU3RlbmNpbFByb3BzLFxuXHRNdWx0aVNhbXBsZSxcblx0UHJpbWl0aXZlLFxuXHRSZW5kZXJTdGF0ZSxcblx0U2Npc3NvclRlc3QsXG5cdFRhcmdldCxcblx0Vmlld1BvcnRcbn0gZnJvbSBcIi4uL3JlbmRlci9SZW5kZXJTdGF0ZVwiO1xuaW1wb3J0IFNoYWRlckRhdGEgZnJvbSBcIi4uL3JlbmRlci9TaGFkZXJEYXRhXCI7XG5pbXBvcnQgVGV4dHVyZSBmcm9tIFwiLi4vcmVuZGVyL1RleHR1cmVcIjtcbmltcG9ydCBVbmlmb3JtQnVmZmVyIGZyb20gXCIuLi9yZW5kZXIvVW5pZm9ybUJ1ZmZlclwiO1xuaW1wb3J0IFZlcnRleEJ1ZmZlciBmcm9tIFwiLi4vcmVuZGVyL1ZlcnRleEJ1ZmZlclwiO1xuaW1wb3J0IHsgU2hhZGVyU291cmNlIH0gZnJvbSBcIi4uL3NoYWRlci9TaGFkZXJTb3VyY2VcIjtcbmltcG9ydCB7IGFkZFVuaWZvcm1Ub1NoYWRlckRhdGEgfSBmcm9tIFwiLi4vdXRpbHMvdW5pZm9ybVV0aWxzXCI7XG5cbmV4cG9ydCBjbGFzcyBNb2RlbCB7XG5cdHB1YmxpYyBtb2RlbFBhcmFtczogTW9kZWxQYXJhbXM7XG5cdHB1YmxpYyBjb21tYW5kOiBEcmF3Q29tbWFuZCB8IENvbXB1dGVDb21tYW5kO1xuXHRwdWJsaWMgcmVuZGVyVHlwZTogc3RyaW5nO1xuXHRwcml2YXRlIHZlcnRleEJ1ZmZlcnM6IE1hcDxzdHJpbmcsIFZlcnRleEJ1ZmZlcj47XG5cdHByaXZhdGUgc2hhZGVyRGF0YTogU2hhZGVyRGF0YTtcblx0Y29uc3RydWN0b3IocGFyYW1zOiBNb2RlbFBhcmFtcykge1xuXHRcdHRoaXMubW9kZWxQYXJhbXMgPSBwYXJhbXM7XG5cdFx0dGhpcy5yZW5kZXJUeXBlID0gdGhpcy5tb2RlbFBhcmFtcy5jb21wdXRlICE9IHVuZGVmaW5lZCA/IFwiY29tcHV0ZVwiIDogXCJyZW5kZXJcIjtcblx0XHR0aGlzLnZlcnRleEJ1ZmZlcnMgPSBuZXcgTWFwKCk7XG5cdH1cblx0cmVuZGVyKHBhcmFtczogcmVuZGVyTW9kZWxQYXJhbXMpIHtcblx0XHRjb25zdCB7IGRldmljZSwgcGFzc0VuY29kZXIgfSA9IHBhcmFtcztcblx0XHRpZiAoIXRoaXMuY29tbWFuZClcblx0XHRcdHRoaXMuY29tbWFuZCA9IHRoaXMucmVuZGVyVHlwZSA9PT0gXCJyZW5kZXJcIiA/IHRoaXMuY3JlYXRlRHJhd0NvbW1hbmQoKSA6IHRoaXMuY3JlYXRlQ29tcHV0ZUNvbW1hbmQoKTtcblx0XHRpZiAodGhpcy5yZW5kZXJUeXBlID09PSBcInJlbmRlclwiKSB7XG5cdFx0XHQodGhpcy5jb21tYW5kIGFzIERyYXdDb21tYW5kKS5yZW5kZXIoe1xuXHRcdFx0XHRkZXZpY2UsXG5cdFx0XHRcdHBhc3NFbmNvZGVyOiA8R1BVUmVuZGVyUGFzc0VuY29kZXI+cGFzc0VuY29kZXJcblx0XHRcdH0pO1xuXHRcdH0gZWxzZSB7XG5cdFx0XHQodGhpcy5jb21tYW5kIGFzIENvbXB1dGVDb21tYW5kKS5yZW5kZXIoe1xuXHRcdFx0XHRkZXZpY2UsXG5cdFx0XHRcdHBhc3NFbmNvZGVyOiA8R1BVQ29tcHV0ZVBhc3NFbmNvZGVyPnBhc3NFbmNvZGVyXG5cdFx0XHR9KTtcblx0XHR9XG5cdH1cblx0Y29tcHV0ZShwYXJhbXM6IHJlbmRlck1vZGVsUGFyYW1zKSB7XG5cdFx0Y29uc3QgeyBkZXZpY2UsIHBhc3NFbmNvZGVyIH0gPSBwYXJhbXM7XG5cdFx0aWYgKCF0aGlzLmNvbW1hbmQpIHRoaXMuY29tbWFuZCA9IHRoaXMuY3JlYXRlQ29tcHV0ZUNvbW1hbmQoKTtcblx0XHQodGhpcy5jb21tYW5kIGFzIENvbXB1dGVDb21tYW5kKS5yZW5kZXIoe1xuXHRcdFx0ZGV2aWNlLFxuXHRcdFx0cGFzc0VuY29kZXI6IDxHUFVDb21wdXRlUGFzc0VuY29kZXI+cGFzc0VuY29kZXJcblx0XHR9KTtcblx0fVxuXHRwdWJsaWMgZ2V0VmVydGV4QnVmZmVyQnlVaWQodWlkOiBzdHJpbmcpOiBWZXJ0ZXhCdWZmZXIge1xuXHRcdHJldHVybiB0aGlzLnZlcnRleEJ1ZmZlcnMuZ2V0KHVpZCk7XG5cdH1cblx0cHVibGljIGdldFVuaWZvcm1CdWZmZXJCeVVpZCh1aWQ6IHN0cmluZyk6IFVuaWZvcm1CdWZmZXIge1xuXHRcdHJldHVybiB0aGlzLnNoYWRlckRhdGEuZ2V0VW5pZm9ybUJ1ZmZlcih1aWQpO1xuXHR9XG5cdHB1YmxpYyBnZXRUZXh0dXJlQnlOYW1lKG5hbWU6IHN0cmluZyk6IFRleHR1cmUge1xuXHRcdHJldHVybiB0aGlzLnNoYWRlckRhdGEuZ2V0VGV4dHVyZShuYW1lKTtcblx0fVxuXHRwdWJsaWMgZ2V0U2FtcGxlckJ5TmFtZShuYW1lOiBzdHJpbmcpIHtcblx0XHRyZXR1cm4gdGhpcy5zaGFkZXJEYXRhLmdldFNhbXBsZXIobmFtZSk7XG5cdH1cblx0cHVibGljIGRlc3Ryb3koKSB7XG5cdFx0dGhpcz8udmVydGV4QnVmZmVycy5jbGVhcigpO1xuXHRcdHRoaXM/LnNoYWRlckRhdGEuZGVzdHJveSgpO1xuXHRcdHRoaXMuY29tbWFuZCA9IG51bGw7XG5cdFx0dGhpcy5tb2RlbFBhcmFtcyA9IG51bGw7XG5cdH1cblx0cHJpdmF0ZSBjcmVhdGVEcmF3Q29tbWFuZCgpIHtcblx0XHRjb25zdCB7IGNvdW50LCBpbnN0YW5jZXMgfSA9IHRoaXMubW9kZWxQYXJhbXM7XG5cdFx0Y29uc3QgdmVydGV4QnVmZmVycyA9IHRoaXMuY3JlYXRlVmVydGV4QnVmZmVyKCk7XG5cdFx0dGhpcy5zaGFkZXJEYXRhID0gdGhpcy5jcmVhdGVTaGFkZXJEYXRhKCk7XG5cdFx0Y29uc3QgaW5kZXhCdWZmZXIgPSB0aGlzLmNyZWF0ZUluZGV4QnVmZmVyKCk7XG5cdFx0Y29uc3Qgc2hhZGVyU291cmNlID0gdGhpcy5jcmVhdGVTaGFkZXJTb3VyY2UoKTtcblx0XHRjb25zdCByZW5kZXJTdGF0ZSA9IHRoaXMuY3JlYXRlUmVuZGVyU3RhdGUoKTtcblx0XHRyZXR1cm4gbmV3IERyYXdDb21tYW5kKHtcblx0XHRcdHZlcnRleEJ1ZmZlcnMsXG5cdFx0XHRzaGFkZXJEYXRhOiB0aGlzLnNoYWRlckRhdGEsXG5cdFx0XHRpbmRleEJ1ZmZlcixcblx0XHRcdHNoYWRlclNvdXJjZSxcblx0XHRcdHJlbmRlclN0YXRlLFxuXHRcdFx0Y291bnQsXG5cdFx0XHRpbnN0YW5jZXNcblx0XHR9KTtcblx0fVxuXHRwcml2YXRlIGNyZWF0ZUNvbXB1dGVDb21tYW5kKCkge1xuXHRcdGNvbnN0IHsgZGlzcGF0Y2ggfSA9IHRoaXMubW9kZWxQYXJhbXM7XG5cdFx0Y29uc3Qgc2hhZGVyRGF0YSA9IHRoaXMuY3JlYXRlU2hhZGVyRGF0YSgpO1xuXHRcdGNvbnN0IHNoYWRlclNvdXJjZSA9IHRoaXMuY3JlYXRlU2hhZGVyU291cmNlKCk7XG5cdFx0cmV0dXJuIG5ldyBDb21wdXRlQ29tbWFuZCh7XG5cdFx0XHRkaXNwYXRjaCxcblx0XHRcdHNoYWRlckRhdGEsXG5cdFx0XHRzaGFkZXJTb3VyY2Vcblx0XHR9KTtcblx0fVxuXHRwcml2YXRlIGNyZWF0ZVZlcnRleEJ1ZmZlcigpIHtcblx0XHRjb25zdCB7IHZlcnRleEJ1ZmZlcnMsIHNoYWRlcklkIH0gPSB0aGlzLm1vZGVsUGFyYW1zO1xuXHRcdGxldCBsb2NhdGlvbkluZGV4ID0gMDtcblx0XHRyZXR1cm4gKFxuXHRcdFx0dmVydGV4QnVmZmVycz8ubWFwKCh2ZXJ0ZXhCdWZmZXJPYmplY3QsIGluZGV4KSA9PiB7XG5cdFx0XHRcdGNvbnN0IHsgYXR0cmlidXRlcywgc3RlcE1vZGUsIHVpZCwgYXJyYXlTdHJpZGUgfSA9IHZlcnRleEJ1ZmZlck9iamVjdDtcblx0XHRcdFx0Y29uc3QgdmVydGV4QnVmZmVyID0gbmV3IFZlcnRleEJ1ZmZlcih7XG5cdFx0XHRcdFx0bGFiZWw6IHNoYWRlcklkLFxuXHRcdFx0XHRcdGluZGV4LFxuXHRcdFx0XHRcdGxvY2F0aW9uSW5kZXgsXG5cdFx0XHRcdFx0c3RlcE1vZGU6IDxJbnB1dFN0ZXBNb2RlPnN0ZXBNb2RlLFxuXHRcdFx0XHRcdGFycmF5U3RyaWRlXG5cdFx0XHRcdH0pO1xuXHRcdFx0XHRjb25zdCBhdHRyaWJ1dGVLZXlzID0gT2JqZWN0LmtleXMoYXR0cmlidXRlcyk7XG5cdFx0XHRcdGF0dHJpYnV0ZUtleXMuZm9yRWFjaCgoa2V5OiBzdHJpbmcpID0+IHtcblx0XHRcdFx0XHRjb25zdCB7IHNpemUsIHZhbHVlLCBuYW1lcywgaXRlbVNpemVzLCBidWZmZXIgfSA9IGF0dHJpYnV0ZXNba2V5XTtcblx0XHRcdFx0XHR2ZXJ0ZXhCdWZmZXIuc2V0QXR0cmlidXRlKFxuXHRcdFx0XHRcdFx0bmFtZXM/Lmxlbmd0aCA+IDBcblx0XHRcdFx0XHRcdFx0PyBidWZmZXJcblx0XHRcdFx0XHRcdFx0XHQ/IG5ldyBCdWZmZXJGbG9hdDMyQXR0cmlidXRlKG5hbWVzLCBidWZmZXIsIGl0ZW1TaXplcylcblx0XHRcdFx0XHRcdFx0XHQ6IG5ldyBJbnRlcmxlYXZlZEZsb2F0MzJBdHRyaWJ1dGUobmFtZXMsIHZhbHVlLCBpdGVtU2l6ZXMpXG5cdFx0XHRcdFx0XHRcdDogbmV3IEZsb2F0MzJBdHRyaWJ1dGUoa2V5LCB2YWx1ZSwgc2l6ZSlcblx0XHRcdFx0XHQpO1xuXHRcdFx0XHRcdGNvbnN0IGNvdW50ID0gbmFtZXM/Lmxlbmd0aCA+IDAgPyBuYW1lcz8ubGVuZ3RoIDogMTtcblx0XHRcdFx0XHRsb2NhdGlvbkluZGV4ICs9IGNvdW50O1xuXHRcdFx0XHR9KTtcblx0XHRcdFx0dGhpcy52ZXJ0ZXhCdWZmZXJzLnNldCh1aWQsIHZlcnRleEJ1ZmZlcik7XG5cdFx0XHRcdHJldHVybiB2ZXJ0ZXhCdWZmZXI7XG5cdFx0XHR9KSB8fCBbXVxuXHRcdCk7XG5cdH1cblx0cHJpdmF0ZSBjcmVhdGVTaGFkZXJTb3VyY2UoKSB7XG5cdFx0Y29uc3QgeyB2ZXJ0LCBmcmFnLCBjb21wdXRlLCBzaGFkZXJJZCB9ID0gdGhpcy5tb2RlbFBhcmFtcztcblx0XHRyZXR1cm4gbmV3IFNoYWRlclNvdXJjZSh7XG5cdFx0XHRzaGFkZXJJZCxcblx0XHRcdHJlbmRlcjoge1xuXHRcdFx0XHR2ZXJ0U2hhZGVyOiB2ZXJ0LFxuXHRcdFx0XHRmcmFnU2hhZGVyOiBmcmFnXG5cdFx0XHR9LFxuXHRcdFx0Y29tcHV0ZToge1xuXHRcdFx0XHRjb21wdXRlU2hhZGVyOiBjb21wdXRlXG5cdFx0XHR9XG5cdFx0fSk7XG5cdH1cblx0cHJpdmF0ZSBjcmVhdGVTaGFkZXJEYXRhKCkge1xuXHRcdGNvbnN0IHsgc2hhZGVySWQsIHVuaWZvcm1CdWZmZXJzLCB1bmlmb3JtVGV4dHVyZUFuZFNhbXBsZXIgfSA9IHRoaXMubW9kZWxQYXJhbXM7XG5cdFx0Y29uc3Qgc2hhZGVyRGF0YSA9IG5ldyBTaGFkZXJEYXRhKHNoYWRlcklkKTtcblx0XHQvLyBmaWxsIHVuaWZvcm1CdWZmZXJcblx0XHR1bmlmb3JtQnVmZmVycy5mb3JFYWNoKCh1bmlmb3JtQnVmZmVyKSA9PiB0aGlzLmNyZWF0ZVVuaWZvcm1CdWZmZXIodW5pZm9ybUJ1ZmZlciwgc2hhZGVyRGF0YSwgc2hhZGVySWQpKTtcblx0XHQvLyBmaWxsIHRleHR1cmUgYW5kIHNhbXBsZXJcblx0XHR0aGlzLmFkZFVuaWZvcm1Ub1NoYWRlckRhdGEodW5pZm9ybVRleHR1cmVBbmRTYW1wbGVyLCBzaGFkZXJEYXRhLCB1bmRlZmluZWQpO1xuXHRcdHJldHVybiBzaGFkZXJEYXRhO1xuXHR9XG5cdHByaXZhdGUgY3JlYXRlUmVuZGVyU3RhdGUoKSB7XG5cdFx0Y29uc3Qge1xuXHRcdFx0YmxlbmRDb25zdGFudCxcblx0XHRcdGRlcHRoU3RlbmNpbCxcblx0XHRcdHZpZXdQb3J0LFxuXHRcdFx0c2Npc3NvclRlc3QsXG5cdFx0XHR0YXJnZXRzLFxuXHRcdFx0bXVsdGlTYW1wbGUsXG5cdFx0XHRwcmltaXRpdmUsXG5cdFx0XHRzdGVuY2lsUmVmZXJlbmNlXG5cdFx0fSA9IHRoaXMubW9kZWxQYXJhbXMucmVuZGVyU3RhdGU7XG5cdFx0cmV0dXJuIG5ldyBSZW5kZXJTdGF0ZSh7XG5cdFx0XHRzY2lzc29yVGVzdDogc2Npc3NvclRlc3Rcblx0XHRcdFx0PyBuZXcgU2Npc3NvclRlc3Qoc2Npc3NvclRlc3QueCwgc2Npc3NvclRlc3QueSwgc2Npc3NvclRlc3Qud2lkdGgsIHNjaXNzb3JUZXN0LmhlaWdodClcblx0XHRcdFx0OiB1bmRlZmluZWQsXG5cdFx0XHR2aWV3cG9ydDogdmlld1BvcnQgPyBuZXcgVmlld1BvcnQodmlld1BvcnQueCwgdmlld1BvcnQueSwgdmlld1BvcnQud2lkdGgsIHZpZXdQb3J0LmhlaWdodCkgOiB1bmRlZmluZWQsXG5cdFx0XHR0YXJnZXRzOiB0YXJnZXRzPy5tYXAoKHRhcmdldCkgPT4ge1xuXHRcdFx0XHRyZXR1cm4gbmV3IFRhcmdldCh0YXJnZXQgYXMgYW55KTtcblx0XHRcdH0pLFxuXHRcdFx0ZGVwdGhTdGVuY2lsOiBkZXB0aFN0ZW5jaWwgPyBuZXcgRGVwdGhTdGVuY2lsKDxEZXB0aFN0ZW5jaWxQcm9wcz5kZXB0aFN0ZW5jaWwpIDogdW5kZWZpbmVkLFxuXHRcdFx0YmxlbmRDb25zdGFudDogYmxlbmRDb25zdGFudFxuXHRcdFx0XHQ/IG5ldyBCbGVuZENvbnN0YW50KGJsZW5kQ29uc3RhbnQuciwgYmxlbmRDb25zdGFudC5nLCBibGVuZENvbnN0YW50LmIsIGJsZW5kQ29uc3RhbnQuYSlcblx0XHRcdFx0OiB1bmRlZmluZWQsXG5cdFx0XHRzdGVuY2lsUmVmZXJlbmNlOiBzdGVuY2lsUmVmZXJlbmNlIHx8IDAsXG5cdFx0XHRtdWx0aXNhbXBsZTogbXVsdGlTYW1wbGVcblx0XHRcdFx0PyBuZXcgTXVsdGlTYW1wbGUobXVsdGlTYW1wbGUuY291bnQsIG11bHRpU2FtcGxlLm1hc2ssIG11bHRpU2FtcGxlLmFscGhhVG9Db3ZlcmFnZUVuYWJsZWQpXG5cdFx0XHRcdDogdW5kZWZpbmVkLFxuXHRcdFx0cHJpbWl0aXZlOiBwcmltaXRpdmVcblx0XHRcdFx0PyBuZXcgUHJpbWl0aXZlKFxuXHRcdFx0XHRcdFx0PFByaW1pdGl2ZVRvcG9sb2d5PnByaW1pdGl2ZS50b3BvbG9neSxcblx0XHRcdFx0XHRcdDxDdWxsTW9kZT5wcmltaXRpdmUuY3VsbE1vZGUsXG5cdFx0XHRcdFx0XHQ8RnJvbnRGYWNlPnByaW1pdGl2ZS5mcm9udEZhY2UsXG5cdFx0XHRcdFx0XHRwcmltaXRpdmUudW5jbGlwcGVkRGVwdGhcblx0XHRcdFx0ICApXG5cdFx0XHRcdDogdW5kZWZpbmVkLFxuXHRcdFx0c3RlbmNpbEVuYWJsZWQ6IGZhbHNlLFxuXHRcdFx0c2Npc3NvclRlc3RFbmFibGVkOiBmYWxzZVxuXHRcdH0pO1xuXHR9XG5cdHByaXZhdGUgY3JlYXRlSW5kZXhCdWZmZXIoKSB7XG5cdFx0Y29uc3QgeyBpbmRpY2VzLCBzaGFkZXJJZCB9ID0gdGhpcy5tb2RlbFBhcmFtcztcblx0XHRsZXQgaW5kZXhCdWZmZXIgPSB1bmRlZmluZWQ7XG5cdFx0aWYgKGluZGljZXMpIHtcblx0XHRcdGluZGV4QnVmZmVyID0gbmV3IEluZGV4QnVmZmVyKHNoYWRlcklkICsgXCJJbmRleEJ1ZmZlclwiKTtcblx0XHRcdGluZGV4QnVmZmVyLnNldEluZGljZXMoaW5kaWNlcyk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIGluZGV4QnVmZmVyO1xuXHR9XG5cdHByaXZhdGUgY3JlYXRlVW5pZm9ybUJ1ZmZlcih1bmlmb3JtQnVmZmVyUGFyYW1zLCBzaGFkZXJEYXRhOiBTaGFkZXJEYXRhLCBzaGFkZXJJZDogc3RyaW5nKSB7XG5cdFx0Y29uc3Qge1xuXHRcdFx0dHlwZSA9IFwidW5pZm9ybVwiLFxuXHRcdFx0dXNhZ2UgPSBCdWZmZXJVc2FnZS5Vbmlmb3JtIHwgQnVmZmVyVXNhZ2UuQ29weURzdCxcblx0XHRcdHVuaWZvcm1zLFxuXHRcdFx0dWlkLFxuXHRcdFx0YmluZGluZyxcblx0XHRcdGJ1ZmZlcixcblx0XHRcdGJ1ZmZlclNpemUsXG5cdFx0XHR2aXNpYmlsaXR5XG5cdFx0fSA9IHVuaWZvcm1CdWZmZXJQYXJhbXM7XG5cdFx0Y29uc3QgdW5pZm9ybUJ1ZmZlciA9IG5ldyBVbmlmb3JtQnVmZmVyKHtcblx0XHRcdGxhYmVsOiB1aWQgKyBcIl9Vbmlmb3JtQnVmZmVyXCIsXG5cdFx0XHR0eXBlOiA8QnVmZmVyQmluZGluZ1R5cGU+dHlwZSxcblx0XHRcdHVzYWdlOiA8QnVmZmVyVXNhZ2U+dXNhZ2UsXG5cdFx0XHRiaW5kaW5nLFxuXHRcdFx0YnVmZmVyLFxuXHRcdFx0dmlzaWJpbGl0eSxcblx0XHRcdHNpemU6IGJ1ZmZlcj8uc2l6ZSA/PyBidWZmZXJTaXplXG5cdFx0fSk7XG5cdFx0c2hhZGVyRGF0YS5zZXRVbmlmb3JtQnVmZmVyKHVpZCwgdW5pZm9ybUJ1ZmZlcik7XG5cdFx0aWYgKCFidWZmZXIpIHRoaXMuYWRkVW5pZm9ybVRvU2hhZGVyRGF0YSh1bmlmb3Jtcywgc2hhZGVyRGF0YSwgdW5pZm9ybUJ1ZmZlcik7XG5cdH1cblx0cHJpdmF0ZSBhZGRVbmlmb3JtVG9TaGFkZXJEYXRhKHVuaWZvcm1zLCBzaGFkZXJEYXRhOiBTaGFkZXJEYXRhLCB1bmlmb3JtQnVmZmVyOiBVbmlmb3JtQnVmZmVyKSB7XG5cdFx0aWYgKCF1bmlmb3JtcykgcmV0dXJuO1xuXHRcdGNvbnN0IHVuaWZvcm1zTmFtZXMgPSBPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyh1bmlmb3Jtcyk7XG5cdFx0dW5pZm9ybXNOYW1lcy5tYXAoKHVuaWZvcm1zTmFtZSkgPT4ge1xuXHRcdFx0YWRkVW5pZm9ybVRvU2hhZGVyRGF0YSh1bmlmb3Jtc05hbWUsIHVuaWZvcm1zW3VuaWZvcm1zTmFtZV0sIHNoYWRlckRhdGEsIHVuZGVmaW5lZCwgdW5pZm9ybUJ1ZmZlcik7XG5cdFx0fSk7XG5cdH1cbn1cblxuZXhwb3J0IHR5cGUgcmVuZGVyTW9kZWxQYXJhbXMgPSB7XG5cdGRldmljZTogR1BVRGV2aWNlO1xuXHRwYXNzRW5jb2RlcjogR1BVUmVuZGVyUGFzc0VuY29kZXIgfCBHUFVDb21wdXRlUGFzc0VuY29kZXI7XG59O1xuIiwiaW1wb3J0IHsgSW50ZXJsZWF2ZWRGbG9hdDMyQXR0cmlidXRlIH0gZnJvbSBcIi4uL3JlbmRlci9BdHRyaWJ1dGVcIjtcbmltcG9ydCBHZW9tZXRyeSBmcm9tIFwiLi9HZW9tZXRyeVwiO1xuZXhwb3J0IGNsYXNzIFNwcml0ZUdlb21ldHJ5IGV4dGVuZHMgR2VvbWV0cnkge1xuXHRjb25zdHJ1Y3RvcigpIHtcblx0XHRzdXBlcih7XG5cdFx0XHR0eXBlOiBcInNwcml0ZUdlb21ldHJ5XCJcblx0XHR9KTtcblx0XHR0aGlzLmluaXQoKTtcblx0fVxuXHRwcml2YXRlIGluaXQoKSB7XG5cdFx0Ly8geHl644CBdXZcblx0XHRjb25zdCB2ZXJ0aWNlcyA9IFstMC41LCAtMC41LCAwLCAwLCAwLCAwLjUsIC0wLjUsIDAsIDEsIDAsIDAuNSwgMC41LCAwLCAxLCAxLCAtMC41LCAwLjUsIDAsIDAsIDFdO1xuXHRcdGNvbnN0IGluZGljZXMgPSBbMCwgMSwgMiwgMCwgMiwgM107XG5cdFx0dGhpcy5jb21wdXRlQm91bmRpbmdTcGhlcmUodmVydGljZXMsIDUpO1xuXHRcdHRoaXMuc2V0QXR0cmlidXRlKG5ldyBJbnRlcmxlYXZlZEZsb2F0MzJBdHRyaWJ1dGUoW1wicG9zaXRpb25cIiwgXCJ1dlwiXSwgdmVydGljZXMsIFszLCAyXSkpO1xuXHRcdHRoaXMuc2V0SW5kaWNlKGluZGljZXMpO1xuXHRcdHRoaXMuY291bnQgPSBpbmRpY2VzLmxlbmd0aDtcblx0fVxufVxuIiwiaW1wb3J0IHsgRnJhbWVTdGF0ZSB9IGZyb20gXCIuLi9jb3JlL0ZyYW1lU3RhdGVcIjtcbmltcG9ydCB0ZXh0dXJlQ2FjaGUgZnJvbSBcIi4uL2NvcmUvVGV4dHVyZUNhY2hlXCI7XG5pbXBvcnQgeyBVbmlmb3JtRW51bSB9IGZyb20gXCIuLi9jb3JlL1dlYkdQVVR5cGVzXCI7XG5pbXBvcnQgQ29sb3IgZnJvbSBcIi4uL21hdGgvQ29sb3JcIjtcbmltcG9ydCBWZWN0b3IyIGZyb20gXCIuLi9tYXRoL1ZlY3RvcjJcIjtcbmltcG9ydCB7IE1lc2ggfSBmcm9tIFwiLi4vbWVzaC9NZXNoXCI7XG5pbXBvcnQgVW5pZm9ybUJ1ZmZlciBmcm9tIFwiLi4vcmVuZGVyL1VuaWZvcm1CdWZmZXJcIjtcbmltcG9ydCB7IFNoYWRlclNvdXJjZSB9IGZyb20gXCIuLi9zaGFkZXIvU2hhZGVyU291cmNlXCI7XG5pbXBvcnQgeyBNYXRlcmlhbCB9IGZyb20gXCIuL01hdGVyaWFsXCI7XG5cbmV4cG9ydCBjbGFzcyBTcHJpdGVNYXRlcmlhbCBleHRlbmRzIE1hdGVyaWFsIHtcblx0cHVibGljIHJvdGF0aW9uOiBudW1iZXI7XG5cdHB1YmxpYyBjZW50ZXI6IFZlY3RvcjI7XG5cdGNvbnN0cnVjdG9yKCkge1xuXHRcdHN1cGVyKCk7XG5cdFx0dGhpcy50eXBlID0gXCJzcHJpdGVcIjtcblx0XHR0aGlzLnNoYWRlclNvdXJjZSA9IG5ldyBTaGFkZXJTb3VyY2Uoe1xuXHRcdFx0c2hhZGVySWQ6IHRoaXMudHlwZSxcblx0XHRcdGRlZmluZXM6IHtcblx0XHRcdFx0SEFTX1VWOiB0cnVlXG5cdFx0XHR9XG5cdFx0fSk7XG5cdFx0dGhpcy5yb3RhdGlvbiA9IE1hdGguUEk7XG5cdFx0dGhpcy5vcGFjaXR5ID0gMTtcblx0XHR0aGlzLmNlbnRlciA9IG5ldyBWZWN0b3IyKDAsIDApO1xuXHRcdHRoaXMuY29sb3IgPSBuZXcgQ29sb3IoMSwgMCwgMCk7XG5cdH1cblx0dXBkYXRlKGZyYW1lU3RhdGU/OiBGcmFtZVN0YXRlLCBtZXNoPzogTWVzaCkge1xuXHRcdGlmICghdGhpcy5zaGFkZXJEYXRhIHx8IHRoaXMuZGlydHkpIHRoaXMuY3JlYXRlU2hhZGVyRGF0YShtZXNoKTtcblx0fVxuXHRwcm90ZWN0ZWQgY3JlYXRlU2hhZGVyRGF0YShtZXNoPzogTWVzaCkge1xuXHRcdHN1cGVyLmNyZWF0ZVNoYWRlckRhdGEoKTtcblx0XHRjb25zdCB1bmlmb3JtQnVmZmVyID0gbmV3IFVuaWZvcm1CdWZmZXIoeyBsYWJlbDogXCJzcHJpdGVcIiB9KTtcblx0XHR1bmlmb3JtQnVmZmVyLnNldFVuaWZvcm0oXG5cdFx0XHRcIm1vZGVsTWF0cml4XCIsXG5cdFx0XHQoKSA9PiB7XG5cdFx0XHRcdHJldHVybiBtZXNoLm1vZGVsTWF0cml4O1xuXHRcdFx0fSxcblx0XHRcdFVuaWZvcm1FbnVtLk1hdDRcblx0XHQpO1xuXHRcdHVuaWZvcm1CdWZmZXIuc2V0VW5pZm9ybShcImNvbG9yXCIsIHRoaXMsIFVuaWZvcm1FbnVtLkNvbG9yKTtcblx0XHR1bmlmb3JtQnVmZmVyLnNldFVuaWZvcm0oXCJyb3RhdGlvblwiLCB0aGlzLCBVbmlmb3JtRW51bS5GbG9hdCk7XG5cdFx0dW5pZm9ybUJ1ZmZlci5zZXRVbmlmb3JtKFwiY2VudGVyXCIsIHRoaXMsIFVuaWZvcm1FbnVtLkZsb2F0VmVjMik7XG5cdFx0dW5pZm9ybUJ1ZmZlci5zZXRVbmlmb3JtKFwib3BhY2l0eVwiLCB0aGlzLCBVbmlmb3JtRW51bS5GbG9hdCk7XG5cdFx0dGhpcy5zaGFkZXJEYXRhLnNldFVuaWZvcm1CdWZmZXIoXCJzcHJpdGVcIiwgdW5pZm9ybUJ1ZmZlcik7XG5cdFx0aWYgKHRoaXMuYmFzZVRleHR1cmUpIHtcblx0XHRcdHRoaXMuc2hhZGVyRGF0YS5zZXREZWZpbmUoXCJVU0VfQ09MT1JURVhUVVJFXCIsIHRydWUpO1xuXHRcdFx0dGhpcy5zaGFkZXJEYXRhLnNldFRleHR1cmUoXCJiYXNlQ29sb3JUZXh0dXJlXCIsIHRoaXMuYmFzZVRleHR1cmUpO1xuXHRcdFx0dGhpcy5zaGFkZXJEYXRhLnNldFNhbXBsZXIoXCJiYXNlQ29sb3JTYW1wbGVyXCIsIHRoaXMuYmFzZVNhbXBsZXIgfHwgdGV4dHVyZUNhY2hlLmRlZmF1bHRTYW1wbGVyKTtcblx0XHR9XG5cdH1cblx0ZGVzdHJveSgpIHtcblx0XHR0aGlzPy5iYXNlVGV4dHVyZT8uZGVzdHJveSgpO1xuXHRcdHN1cGVyLmRlc3Ryb3koKTtcblx0fVxufVxuIiwiaW1wb3J0IHsgU3ByaXRlR2VvbWV0cnkgfSBmcm9tIFwiLi4vZ2VvbWV0cnkvU3ByaXRlR2VvbWV0cnlcIjtcbmltcG9ydCB7IFNwcml0ZU1hdGVyaWFsIH0gZnJvbSBcIi4uL21hdGVyaWFsL1Nwcml0ZU1hdGVyaWFsXCI7XG5pbXBvcnQgU2FtcGxlciBmcm9tIFwiLi4vcmVuZGVyL1NhbXBsZXJcIjtcbmltcG9ydCBUZXh0dXJlIGZyb20gXCIuLi9yZW5kZXIvVGV4dHVyZVwiO1xuaW1wb3J0IHsgTWVzaCB9IGZyb20gXCIuL01lc2hcIjtcblxuZXhwb3J0IGNsYXNzIFNwcml0ZSBleHRlbmRzIE1lc2gge1xuXHRjb25zdHJ1Y3RvcigpIHtcblx0XHRzdXBlcigpO1xuXHRcdHRoaXMubWF0ZXJpYWwgPSBuZXcgU3ByaXRlTWF0ZXJpYWwoKTtcblx0XHR0aGlzLmdlb21ldHJ5ID0gbmV3IFNwcml0ZUdlb21ldHJ5KCk7XG5cdH1cblx0c2V0VGV4dHVyZSh0ZXh0dXJlOiBUZXh0dXJlKSB7XG5cdFx0dGhpcy5tYXRlcmlhbC5iYXNlVGV4dHVyZSA9IHRleHR1cmU7XG5cdH1cblx0c2V0U2FtcGxlcihzYW1wbGVyOiBTYW1wbGVyKSB7XG5cdFx0dGhpcy5tYXRlcmlhbC5iYXNlU2FtcGxlciA9IHNhbXBsZXI7XG5cdH1cbn1cbiIsIi8qKlxyXG4gKiBFbnN1cmUgZmlyc3QgYXJndW1lbnQgcGFzc2VkIHRvIHRoZSBwcmltaXRpdmUgZnVuY3Rpb25zIGlzIGFuIG9iamVjdFxyXG4gKiBAcGFyYW0gey4uLip9IGFyZ3NcclxuICovXHJcbmZ1bmN0aW9uIGNoZWNrQXJndW1lbnRzKGFyZ3MpIHtcclxuXHRjb25zdCBhcmd1bWVudFR5cGUgPSB0eXBlb2YgYXJnc1swXTtcclxuXHRpZiAoYXJndW1lbnRUeXBlICE9PSBcIm9iamVjdFwiICYmIGFyZ3VtZW50VHlwZSAhPT0gXCJ1bmRlZmluZWRcIikge1xyXG5cdFx0Y29uc29sZS5lcnJvcihcIkZpcnN0IGFyZ3VtZW50IG11c3QgYmUgYW4gb2JqZWN0LlwiKTtcclxuXHR9XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBAcHJpdmF0ZVxyXG4gKi9cclxubGV0IFRZUEVEX0FSUkFZX1RZUEU7XHJcblxyXG4vKipcclxuICogU2VsZWN0IGNlbGxzIHR5cGVkIGFycmF5IGZyb20gYSBzaXplIGRldGVybWluZWQgYnkgYW1vdW50IG9mIHZlcnRpY2VzLlxyXG4gKlxyXG4gKiBAcGFyYW0ge251bWJlcn0gc2l6ZSBUaGUgbWF4IHZhbHVlIGV4cGVjdGVkXHJcbiAqIEByZXR1cm5zIHsoVWludDhBcnJheXxVaW50MTZBcnJheXxVaW50MzJBcnJheSl9XHJcbiAqIEBzZWUgW01ETiBUeXBlZEFycmF5IG9iamVjdHNde0BsaW5rIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0phdmFTY3JpcHQvUmVmZXJlbmNlL0dsb2JhbF9PYmplY3RzL1R5cGVkQXJyYXkjdHlwZWRhcnJheV9vYmplY3RzfVxyXG4gKi9cclxuY29uc3QgZ2V0Q2VsbHNUeXBlZEFycmF5ID0gKHNpemUpID0+XHJcblx0VFlQRURfQVJSQVlfVFlQRSB8fCAoc2l6ZSA8PSAyNTUgPyBVaW50OEFycmF5IDogc2l6ZSA8PSA2NTUzNSA/IFVpbnQxNkFycmF5IDogVWludDMyQXJyYXkpO1xyXG5cclxuLyoqXHJcbiAqIEBwcml2YXRlXHJcbiAqL1xyXG5jb25zdCBQTEFORV9ESVJFQ1RJT05TID0ge1xyXG5cdHo6IFswLCAxLCAyLCAxLCAtMSwgMV0sXHJcblx0XCItelwiOiBbMCwgMSwgMiwgLTEsIC0xLCAtMV0sXHJcblx0XCIteFwiOiBbMiwgMSwgMCwgMSwgLTEsIC0xXSxcclxuXHR4OiBbMiwgMSwgMCwgLTEsIC0xLCAxXSxcclxuXHR5OiBbMCwgMiwgMSwgMSwgMSwgMV0sXHJcblx0XCIteVwiOiBbMCwgMiwgMSwgMSwgLTEsIC0xXVxyXG59O1xyXG5cclxuLyoqXHJcbiAqIEBwcml2YXRlXHJcbiAqL1xyXG5mdW5jdGlvbiBjb21wdXRlUGxhbmUoXHJcblx0Z2VvbWV0cnksXHJcblx0aW5kaWNlcyxcclxuXHRzdSxcclxuXHRzdixcclxuXHRudSxcclxuXHRudixcclxuXHRkaXJlY3Rpb24gPSBcInpcIixcclxuXHRwdyA9IDAsXHJcblx0cXVhZHMgPSBmYWxzZSxcclxuXHR1dlNjYWxlID0gWzEsIDFdLFxyXG5cdHV2T2Zmc2V0ID0gWzAsIDBdLFxyXG5cdGNlbnRlciA9IFswLCAwLCAwXSxcclxuXHRjY3cgPSB0cnVlXHJcbikge1xyXG5cdGNvbnN0IHsgcG9zaXRpb25zLCBub3JtYWxzLCB1dnMsIGNlbGxzIH0gPSBnZW9tZXRyeTtcclxuXHRjb25zdCBbdSwgdiwgdywgZmxpcFUsIGZsaXBWLCBub3JtYWxdID0gUExBTkVfRElSRUNUSU9OU1tkaXJlY3Rpb25dO1xyXG5cclxuXHRjb25zdCB2ZXJ0ZXhPZmZzZXQgPSBpbmRpY2VzLnZlcnRleDtcclxuXHJcblx0Zm9yIChsZXQgaiA9IDA7IGogPD0gbnY7IGorKykge1xyXG5cdFx0Zm9yIChsZXQgaSA9IDA7IGkgPD0gbnU7IGkrKykge1xyXG5cdFx0XHRwb3NpdGlvbnNbaW5kaWNlcy52ZXJ0ZXggKiAzICsgdV0gPSAoLXN1IC8gMiArIChpICogc3UpIC8gbnUpICogZmxpcFUgKyBjZW50ZXJbdV07XHJcblx0XHRcdHBvc2l0aW9uc1tpbmRpY2VzLnZlcnRleCAqIDMgKyB2XSA9ICgtc3YgLyAyICsgKGogKiBzdikgLyBudikgKiBmbGlwViArIGNlbnRlclt2XTtcclxuXHRcdFx0cG9zaXRpb25zW2luZGljZXMudmVydGV4ICogMyArIHddID0gcHcgKyBjZW50ZXJbd107XHJcblxyXG5cdFx0XHRub3JtYWxzW2luZGljZXMudmVydGV4ICogMyArIHddID0gbm9ybWFsO1xyXG5cclxuXHRcdFx0dXZzW2luZGljZXMudmVydGV4ICogMl0gPSAoaSAvIG51KSAqIHV2U2NhbGVbMF0gKyB1dk9mZnNldFswXTtcclxuXHRcdFx0dXZzW2luZGljZXMudmVydGV4ICogMiArIDFdID0gKDEgLSBqIC8gbnYpICogdXZTY2FsZVsxXSArIHV2T2Zmc2V0WzFdO1xyXG5cclxuXHRcdFx0aW5kaWNlcy52ZXJ0ZXgrKztcclxuXHJcblx0XHRcdGlmIChqIDwgbnYgJiYgaSA8IG51KSB7XHJcblx0XHRcdFx0Y29uc3QgbiA9IHZlcnRleE9mZnNldCArIGogKiAobnUgKyAxKSArIGk7XHJcblx0XHRcdFx0aWYgKHF1YWRzKSB7XHJcblx0XHRcdFx0XHRjb25zdCBvID0gdmVydGV4T2Zmc2V0ICsgKGogKyAxKSAqIChudSArIDEpICsgaTtcclxuXHRcdFx0XHRcdGNlbGxzW2luZGljZXMuY2VsbF0gPSBuO1xyXG5cdFx0XHRcdFx0Y2VsbHNbaW5kaWNlcy5jZWxsICsgMV0gPSBvO1xyXG5cdFx0XHRcdFx0Y2VsbHNbaW5kaWNlcy5jZWxsICsgMl0gPSBvICsgMTtcclxuXHRcdFx0XHRcdGNlbGxzW2luZGljZXMuY2VsbCArIDNdID0gbiArIDE7XHJcblx0XHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHRcdGNlbGxzW2luZGljZXMuY2VsbF0gPSBuO1xyXG5cdFx0XHRcdFx0Y2VsbHNbaW5kaWNlcy5jZWxsICsgKGNjdyA/IDEgOiAyKV0gPSBuICsgbnUgKyAxO1xyXG5cdFx0XHRcdFx0Y2VsbHNbaW5kaWNlcy5jZWxsICsgKGNjdyA/IDIgOiAxKV0gPSBuICsgbnUgKyAyO1xyXG5cclxuXHRcdFx0XHRcdGNlbGxzW2luZGljZXMuY2VsbCArIDNdID0gbjtcclxuXHRcdFx0XHRcdGNlbGxzW2luZGljZXMuY2VsbCArIChjY3cgPyA0IDogNSldID0gbiArIG51ICsgMjtcclxuXHRcdFx0XHRcdGNlbGxzW2luZGljZXMuY2VsbCArIChjY3cgPyA1IDogNCldID0gbiArIDE7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHRcdGluZGljZXMuY2VsbCArPSBxdWFkcyA/IDQgOiA2O1xyXG5cdFx0XHR9XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHRyZXR1cm4gZ2VvbWV0cnk7XHJcbn1cclxuLyoqXHJcbiAqIEB0eXBlZGVmIHtPYmplY3R9IEN1YmVPcHRpb25zXHJcbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBbc3g9MV1cclxuICogQHByb3BlcnR5IHtudW1iZXJ9IFtzeT1zeF1cclxuICogQHByb3BlcnR5IHtudW1iZXJ9IFtzej1zeF1cclxuICogQHByb3BlcnR5IHtudW1iZXJ9IFtueD0xXVxyXG4gKiBAcHJvcGVydHkge251bWJlcn0gW255PW54XVxyXG4gKiBAcHJvcGVydHkge251bWJlcn0gW256PW54XVxyXG4gKi9cclxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUN1YmUoeyBzeCA9IDEsIHN5ID0gMSwgc3ogPSAxLCBueCA9IDEsIG55ID0gMSwgbnogPSAxIH0gPSB7fSkge1xyXG5cdGNoZWNrQXJndW1lbnRzKGFyZ3VtZW50cyk7XHJcblxyXG5cdGNvbnN0IHNpemUgPSAobnggKyAxKSAqIChueSArIDEpICogMiArIChueCArIDEpICogKG56ICsgMSkgKiAyICsgKG56ICsgMSkgKiAobnkgKyAxKSAqIDI7XHJcblxyXG5cdGNvbnN0IGdlb21ldHJ5ID0ge1xyXG5cdFx0cG9zaXRpb25zOiBuZXcgRmxvYXQzMkFycmF5KHNpemUgKiAzKSxcclxuXHRcdG5vcm1hbHM6IG5ldyBGbG9hdDMyQXJyYXkoc2l6ZSAqIDMpLFxyXG5cdFx0dXZzOiBuZXcgRmxvYXQzMkFycmF5KHNpemUgKiAyKSxcclxuXHRcdGNlbGxzOiBuZXcgKGdldENlbGxzVHlwZWRBcnJheShzaXplKSkoKG54ICogbnkgKiAyICsgbnggKiBueiAqIDIgKyBueiAqIG55ICogMikgKiA2KVxyXG5cdH07XHJcblxyXG5cdGNvbnN0IGhhbGZTWCA9IHN4ICogMC41O1xyXG5cdGNvbnN0IGhhbGZTWSA9IHN5ICogMC41O1xyXG5cdGNvbnN0IGhhbGZTWiA9IHN6ICogMC41O1xyXG5cclxuXHRjb25zdCBpbmRpY2VzID0geyB2ZXJ0ZXg6IDAsIGNlbGw6IDAgfTtcclxuXHJcblx0Y29tcHV0ZVBsYW5lKGdlb21ldHJ5LCBpbmRpY2VzLCBzeCwgc3ksIG54LCBueSwgXCJ6XCIsIGhhbGZTWik7XHJcblx0Y29tcHV0ZVBsYW5lKGdlb21ldHJ5LCBpbmRpY2VzLCBzeCwgc3ksIG54LCBueSwgXCItelwiLCAtaGFsZlNaKTtcclxuXHRjb21wdXRlUGxhbmUoZ2VvbWV0cnksIGluZGljZXMsIHN6LCBzeSwgbnosIG55LCBcIi14XCIsIC1oYWxmU1gpO1xyXG5cdGNvbXB1dGVQbGFuZShnZW9tZXRyeSwgaW5kaWNlcywgc3osIHN5LCBueiwgbnksIFwieFwiLCBoYWxmU1gpO1xyXG5cdGNvbXB1dGVQbGFuZShnZW9tZXRyeSwgaW5kaWNlcywgc3gsIHN6LCBueCwgbnosIFwieVwiLCBoYWxmU1kpO1xyXG5cdGNvbXB1dGVQbGFuZShnZW9tZXRyeSwgaW5kaWNlcywgc3gsIHN6LCBueCwgbnosIFwiLXlcIiwgLWhhbGZTWSk7XHJcblxyXG5cdHJldHVybiBnZW9tZXRyeTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUJveChvcHRpb25zKSB7XHJcblx0b3B0aW9ucyA9IG9wdGlvbnMgfHwge307XHJcblxyXG5cdGNvbnN0IGRpbWVuc2lvbnMgPSBvcHRpb25zLmRpbWVuc2lvbnMgfHwgWzEsIDEsIDFdO1xyXG5cdGNvbnN0IHBvc2l0aW9uID0gb3B0aW9ucy5wb3NpdGlvbiB8fCBbLWRpbWVuc2lvbnNbMF0gLyAyLCAtZGltZW5zaW9uc1sxXSAvIDIsIC1kaW1lbnNpb25zWzJdIC8gMl07XHJcblx0Y29uc3QgeCA9IHBvc2l0aW9uWzBdO1xyXG5cdGNvbnN0IHkgPSBwb3NpdGlvblsxXTtcclxuXHRjb25zdCB6ID0gcG9zaXRpb25bMl07XHJcblx0Y29uc3Qgd2lkdGggPSBkaW1lbnNpb25zWzBdO1xyXG5cdGNvbnN0IGhlaWdodCA9IGRpbWVuc2lvbnNbMV07XHJcblx0Y29uc3QgZGVwdGggPSBkaW1lbnNpb25zWzJdO1xyXG5cclxuXHRjb25zdCBmYmwgPSB7IHg6IHgsIHk6IHksIHo6IHogKyBkZXB0aCB9O1xyXG5cdGNvbnN0IGZiciA9IHsgeDogeCArIHdpZHRoLCB5OiB5LCB6OiB6ICsgZGVwdGggfTtcclxuXHRjb25zdCBmdGwgPSB7IHg6IHgsIHk6IHkgKyBoZWlnaHQsIHo6IHogKyBkZXB0aCB9O1xyXG5cdGNvbnN0IGZ0ciA9IHsgeDogeCArIHdpZHRoLCB5OiB5ICsgaGVpZ2h0LCB6OiB6ICsgZGVwdGggfTtcclxuXHRjb25zdCBiYmwgPSB7IHg6IHgsIHk6IHksIHo6IHogfTtcclxuXHRjb25zdCBiYnIgPSB7IHg6IHggKyB3aWR0aCwgeTogeSwgejogeiB9O1xyXG5cdGNvbnN0IGJ0bCA9IHsgeDogeCwgeTogeSArIGhlaWdodCwgejogeiB9O1xyXG5cdGNvbnN0IGJ0ciA9IHsgeDogeCArIHdpZHRoLCB5OiB5ICsgaGVpZ2h0LCB6OiB6IH07XHJcblxyXG5cdGNvbnN0IHBvc2l0aW9ucyA9IFtcclxuXHRcdC8vIGZyb250XHJcblx0XHRmYmwueCxcclxuXHRcdGZibC55LFxyXG5cdFx0ZmJsLnosXHJcblx0XHRmYnIueCxcclxuXHRcdGZici55LFxyXG5cdFx0ZmJyLnosXHJcblx0XHRmdGwueCxcclxuXHRcdGZ0bC55LFxyXG5cdFx0ZnRsLnosXHJcblx0XHRmdGwueCxcclxuXHRcdGZ0bC55LFxyXG5cdFx0ZnRsLnosXHJcblx0XHRmYnIueCxcclxuXHRcdGZici55LFxyXG5cdFx0ZmJyLnosXHJcblx0XHRmdHIueCxcclxuXHRcdGZ0ci55LFxyXG5cdFx0ZnRyLnosXHJcblxyXG5cdFx0Ly8gcmlnaHRcclxuXHRcdGZici54LFxyXG5cdFx0ZmJyLnksXHJcblx0XHRmYnIueixcclxuXHRcdGJici54LFxyXG5cdFx0YmJyLnksXHJcblx0XHRiYnIueixcclxuXHRcdGZ0ci54LFxyXG5cdFx0ZnRyLnksXHJcblx0XHRmdHIueixcclxuXHRcdGZ0ci54LFxyXG5cdFx0ZnRyLnksXHJcblx0XHRmdHIueixcclxuXHRcdGJici54LFxyXG5cdFx0YmJyLnksXHJcblx0XHRiYnIueixcclxuXHRcdGJ0ci54LFxyXG5cdFx0YnRyLnksXHJcblx0XHRidHIueixcclxuXHJcblx0XHQvLyBiYWNrXHJcblx0XHRmYnIueCxcclxuXHRcdGJici55LFxyXG5cdFx0YmJyLnosXHJcblx0XHRiYmwueCxcclxuXHRcdGJibC55LFxyXG5cdFx0YmJsLnosXHJcblx0XHRidHIueCxcclxuXHRcdGJ0ci55LFxyXG5cdFx0YnRyLnosXHJcblx0XHRidHIueCxcclxuXHRcdGJ0ci55LFxyXG5cdFx0YnRyLnosXHJcblx0XHRiYmwueCxcclxuXHRcdGJibC55LFxyXG5cdFx0YmJsLnosXHJcblx0XHRidGwueCxcclxuXHRcdGJ0bC55LFxyXG5cdFx0YnRsLnosXHJcblxyXG5cdFx0Ly8gbGVmdFxyXG5cdFx0YmJsLngsXHJcblx0XHRiYmwueSxcclxuXHRcdGJibC56LFxyXG5cdFx0ZmJsLngsXHJcblx0XHRmYmwueSxcclxuXHRcdGZibC56LFxyXG5cdFx0YnRsLngsXHJcblx0XHRidGwueSxcclxuXHRcdGJ0bC56LFxyXG5cdFx0YnRsLngsXHJcblx0XHRidGwueSxcclxuXHRcdGJ0bC56LFxyXG5cdFx0ZmJsLngsXHJcblx0XHRmYmwueSxcclxuXHRcdGZibC56LFxyXG5cdFx0ZnRsLngsXHJcblx0XHRmdGwueSxcclxuXHRcdGZ0bC56LFxyXG5cclxuXHRcdC8vIHRvcFxyXG5cdFx0ZnRsLngsXHJcblx0XHRmdGwueSxcclxuXHRcdGZ0bC56LFxyXG5cdFx0ZnRyLngsXHJcblx0XHRmdHIueSxcclxuXHRcdGZ0ci56LFxyXG5cdFx0YnRsLngsXHJcblx0XHRidGwueSxcclxuXHRcdGJ0bC56LFxyXG5cdFx0YnRsLngsXHJcblx0XHRidGwueSxcclxuXHRcdGJ0bC56LFxyXG5cdFx0ZnRyLngsXHJcblx0XHRmdHIueSxcclxuXHRcdGZ0ci56LFxyXG5cdFx0YnRyLngsXHJcblx0XHRidHIueSxcclxuXHRcdGJ0ci56LFxyXG5cclxuXHRcdC8vIGJvdHRvbVxyXG5cdFx0YmJsLngsXHJcblx0XHRiYmwueSxcclxuXHRcdGJibC56LFxyXG5cdFx0YmJyLngsXHJcblx0XHRiYnIueSxcclxuXHRcdGJici56LFxyXG5cdFx0ZmJsLngsXHJcblx0XHRmYmwueSxcclxuXHRcdGZibC56LFxyXG5cdFx0ZmJsLngsXHJcblx0XHRmYmwueSxcclxuXHRcdGZibC56LFxyXG5cdFx0YmJyLngsXHJcblx0XHRiYnIueSxcclxuXHRcdGJici56LFxyXG5cdFx0ZmJyLngsXHJcblx0XHRmYnIueSxcclxuXHRcdGZici56XHJcblx0XTtcclxuXHJcblx0Y29uc3QgdXZzID0gW1xyXG5cdFx0Ly8gZnJvbnRcclxuXHRcdDAsIDAsIDEsIDAsIDAsIDEsIDAsIDEsIDEsIDAsIDEsIDEsXHJcblxyXG5cdFx0Ly8gcmlnaHRcclxuXHRcdDAsIDAsIDEsIDAsIDAsIDEsIDAsIDEsIDEsIDAsIDEsIDEsXHJcblxyXG5cdFx0Ly8gYmFja1xyXG5cdFx0MCwgMCwgMSwgMCwgMCwgMSwgMCwgMSwgMSwgMCwgMSwgMSxcclxuXHJcblx0XHQvLyBsZWZ0XHJcblx0XHQwLCAwLCAxLCAwLCAwLCAxLCAwLCAxLCAxLCAwLCAxLCAxLFxyXG5cclxuXHRcdC8vIHRvcFxyXG5cdFx0MCwgMCwgMSwgMCwgMCwgMSwgMCwgMSwgMSwgMCwgMSwgMSxcclxuXHJcblx0XHQvLyBib3R0b21cclxuXHRcdDAsIDAsIDEsIDAsIDAsIDEsIDAsIDEsIDEsIDAsIDEsIDFcclxuXHRdO1xyXG5cclxuXHRjb25zdCBub3JtYWxzID0gW1xyXG5cdFx0Ly8gZnJvbnRcclxuXHRcdDAsIDAsIDEsIDAsIDAsIDEsIDAsIDAsIDEsIDAsIDAsIDEsIDAsIDAsIDEsIDAsIDAsIDEsXHJcblxyXG5cdFx0Ly8gcmlnaHRcclxuXHRcdDEsIDAsIDAsIDEsIDAsIDAsIDEsIDAsIDAsIDEsIDAsIDAsIDEsIDAsIDAsIDEsIDAsIDAsXHJcblxyXG5cdFx0Ly8gYmFja1xyXG5cdFx0MCwgMCwgLTEsIDAsIDAsIC0xLCAwLCAwLCAtMSwgMCwgMCwgLTEsIDAsIDAsIC0xLCAwLCAwLCAtMSxcclxuXHJcblx0XHQvLyBsZWZ0XHJcblx0XHQtMSwgMCwgMCwgLTEsIDAsIDAsIC0xLCAwLCAwLCAtMSwgMCwgMCwgLTEsIDAsIDAsIC0xLCAwLCAwLFxyXG5cclxuXHRcdC8vIHRvcFxyXG5cdFx0MCwgMSwgMCwgMCwgMSwgMCwgMCwgMSwgMCwgMCwgMSwgMCwgMCwgMSwgMCwgMCwgMSwgMCxcclxuXHJcblx0XHQvLyBib3R0b21cclxuXHRcdDAsIC0xLCAwLCAwLCAtMSwgMCwgMCwgLTEsIDAsIDAsIC0xLCAwLCAwLCAtMSwgMCwgMCwgLTEsIDBcclxuXHRdO1xyXG5cdHJldHVybiB7XHJcblx0XHRwb3NpdGlvbnM6IHBvc2l0aW9ucyxcclxuXHRcdG5vcm1hbHM6IG5vcm1hbHMsXHJcblx0XHR1dnM6IHV2c1xyXG5cdH07XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVTcGhlcmUob3B0aW9ucykge1xyXG5cdG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xyXG5cclxuXHRjb25zdCBsb25nQmFuZHMgPSBvcHRpb25zLmxvbmdCYW5kcyB8fCAzMjtcclxuXHRjb25zdCBsYXRCYW5kcyA9IG9wdGlvbnMubGF0QmFuZHMgfHwgMzI7XHJcblx0Y29uc3QgcmFkaXVzID0gb3B0aW9ucy5yYWRpdXMgfHwgMTtcclxuXHRjb25zdCBsYXRfc3RlcCA9IE1hdGguUEkgLyBsYXRCYW5kcztcclxuXHRjb25zdCBsb25nX3N0ZXAgPSAoMiAqIE1hdGguUEkpIC8gbG9uZ0JhbmRzO1xyXG5cdGNvbnN0IG51bV9wb3NpdGlvbnMgPSBsb25nQmFuZHMgKiBsYXRCYW5kcyAqIDQ7XHJcblx0Y29uc3QgbnVtX2luZGljZXMgPSBsb25nQmFuZHMgKiBsYXRCYW5kcyAqIDY7XHJcblx0bGV0IGxhdF9hbmdsZSwgbG9uZ19hbmdsZTtcclxuXHRjb25zdCBwb3NpdGlvbnMgPSBuZXcgQXJyYXkobnVtX3Bvc2l0aW9ucyAqIDMpO1xyXG5cdGNvbnN0IG5vcm1hbHMgPSBuZXcgQXJyYXkobnVtX3Bvc2l0aW9ucyAqIDMpO1xyXG5cdGNvbnN0IHV2cyA9IG5ldyBBcnJheShudW1fcG9zaXRpb25zICogMik7XHJcblx0Y29uc3QgaW5kaWNlcyA9IG5ldyBBcnJheShudW1faW5kaWNlcyk7XHJcblx0bGV0IHgxLCB4MiwgeDMsIHg0LCB5MSwgeTIsIHoxLCB6MiwgejMsIHo0LCB1MSwgdTIsIHYxLCB2MjtcclxuXHRsZXQgaSwgajtcclxuXHRsZXQgayA9IDAsXHJcblx0XHRsID0gMDtcclxuXHRsZXQgdmksIHRpO1xyXG5cclxuXHRmb3IgKGkgPSAwOyBpIDwgbGF0QmFuZHM7IGkrKykge1xyXG5cdFx0bGF0X2FuZ2xlID0gaSAqIGxhdF9zdGVwO1xyXG5cdFx0eTEgPSBNYXRoLmNvcyhsYXRfYW5nbGUpO1xyXG5cdFx0eTIgPSBNYXRoLmNvcyhsYXRfYW5nbGUgKyBsYXRfc3RlcCk7XHJcblx0XHRmb3IgKGogPSAwOyBqIDwgbG9uZ0JhbmRzOyBqKyspIHtcclxuXHRcdFx0bG9uZ19hbmdsZSA9IGogKiBsb25nX3N0ZXA7XHJcblx0XHRcdHgxID0gTWF0aC5zaW4obGF0X2FuZ2xlKSAqIE1hdGguY29zKGxvbmdfYW5nbGUpO1xyXG5cdFx0XHR4MiA9IE1hdGguc2luKGxhdF9hbmdsZSkgKiBNYXRoLmNvcyhsb25nX2FuZ2xlICsgbG9uZ19zdGVwKTtcclxuXHRcdFx0eDMgPSBNYXRoLnNpbihsYXRfYW5nbGUgKyBsYXRfc3RlcCkgKiBNYXRoLmNvcyhsb25nX2FuZ2xlKTtcclxuXHRcdFx0eDQgPSBNYXRoLnNpbihsYXRfYW5nbGUgKyBsYXRfc3RlcCkgKiBNYXRoLmNvcyhsb25nX2FuZ2xlICsgbG9uZ19zdGVwKTtcclxuXHRcdFx0ejEgPSBNYXRoLnNpbihsYXRfYW5nbGUpICogTWF0aC5zaW4obG9uZ19hbmdsZSk7XHJcblx0XHRcdHoyID0gTWF0aC5zaW4obGF0X2FuZ2xlKSAqIE1hdGguc2luKGxvbmdfYW5nbGUgKyBsb25nX3N0ZXApO1xyXG5cdFx0XHR6MyA9IE1hdGguc2luKGxhdF9hbmdsZSArIGxhdF9zdGVwKSAqIE1hdGguc2luKGxvbmdfYW5nbGUpO1xyXG5cdFx0XHR6NCA9IE1hdGguc2luKGxhdF9hbmdsZSArIGxhdF9zdGVwKSAqIE1hdGguc2luKGxvbmdfYW5nbGUgKyBsb25nX3N0ZXApO1xyXG5cdFx0XHR1MSA9IDEgLSBqIC8gbG9uZ0JhbmRzO1xyXG5cdFx0XHR1MiA9IDEgLSAoaiArIDEpIC8gbG9uZ0JhbmRzO1xyXG5cdFx0XHR2MSA9IDEgLSBpIC8gbGF0QmFuZHM7XHJcblx0XHRcdHYyID0gMSAtIChpICsgMSkgLyBsYXRCYW5kcztcclxuXHRcdFx0dmkgPSBrICogMztcclxuXHRcdFx0dGkgPSBrICogMjtcclxuXHJcblx0XHRcdHBvc2l0aW9uc1t2aV0gPSB4MSAqIHJhZGl1cztcclxuXHRcdFx0cG9zaXRpb25zW3ZpICsgMV0gPSB5MSAqIHJhZGl1cztcclxuXHRcdFx0cG9zaXRpb25zW3ZpICsgMl0gPSB6MSAqIHJhZGl1czsgLy8gdjBcclxuXHJcblx0XHRcdHBvc2l0aW9uc1t2aSArIDNdID0geDIgKiByYWRpdXM7XHJcblx0XHRcdHBvc2l0aW9uc1t2aSArIDRdID0geTEgKiByYWRpdXM7XHJcblx0XHRcdHBvc2l0aW9uc1t2aSArIDVdID0gejIgKiByYWRpdXM7IC8vIHYxXHJcblxyXG5cdFx0XHRwb3NpdGlvbnNbdmkgKyA2XSA9IHgzICogcmFkaXVzO1xyXG5cdFx0XHRwb3NpdGlvbnNbdmkgKyA3XSA9IHkyICogcmFkaXVzO1xyXG5cdFx0XHRwb3NpdGlvbnNbdmkgKyA4XSA9IHozICogcmFkaXVzOyAvLyB2MlxyXG5cclxuXHRcdFx0cG9zaXRpb25zW3ZpICsgOV0gPSB4NCAqIHJhZGl1cztcclxuXHRcdFx0cG9zaXRpb25zW3ZpICsgMTBdID0geTIgKiByYWRpdXM7XHJcblx0XHRcdHBvc2l0aW9uc1t2aSArIDExXSA9IHo0ICogcmFkaXVzOyAvLyB2M1xyXG5cclxuXHRcdFx0bm9ybWFsc1t2aV0gPSB4MTtcclxuXHRcdFx0bm9ybWFsc1t2aSArIDFdID0geTE7XHJcblx0XHRcdG5vcm1hbHNbdmkgKyAyXSA9IHoxO1xyXG5cclxuXHRcdFx0bm9ybWFsc1t2aSArIDNdID0geDI7XHJcblx0XHRcdG5vcm1hbHNbdmkgKyA0XSA9IHkxO1xyXG5cdFx0XHRub3JtYWxzW3ZpICsgNV0gPSB6MjtcclxuXHJcblx0XHRcdG5vcm1hbHNbdmkgKyA2XSA9IHgzO1xyXG5cdFx0XHRub3JtYWxzW3ZpICsgN10gPSB5MjtcclxuXHRcdFx0bm9ybWFsc1t2aSArIDhdID0gejM7XHJcblxyXG5cdFx0XHRub3JtYWxzW3ZpICsgOV0gPSB4NDtcclxuXHRcdFx0bm9ybWFsc1t2aSArIDEwXSA9IHkyO1xyXG5cdFx0XHRub3JtYWxzW3ZpICsgMTFdID0gejQ7XHJcblxyXG5cdFx0XHR1dnNbdGldID0gdTE7XHJcblx0XHRcdHV2c1t0aSArIDFdID0gdjE7XHJcblxyXG5cdFx0XHR1dnNbdGkgKyAyXSA9IHUyO1xyXG5cdFx0XHR1dnNbdGkgKyAzXSA9IHYxO1xyXG5cclxuXHRcdFx0dXZzW3RpICsgNF0gPSB1MTtcclxuXHRcdFx0dXZzW3RpICsgNV0gPSB2MjtcclxuXHJcblx0XHRcdHV2c1t0aSArIDZdID0gdTI7XHJcblx0XHRcdHV2c1t0aSArIDddID0gdjI7XHJcblxyXG5cdFx0XHRpbmRpY2VzW2xdID0gaztcclxuXHRcdFx0aW5kaWNlc1tsICsgMV0gPSBrICsgMTtcclxuXHRcdFx0aW5kaWNlc1tsICsgMl0gPSBrICsgMjtcclxuXHRcdFx0aW5kaWNlc1tsICsgM10gPSBrICsgMjtcclxuXHRcdFx0aW5kaWNlc1tsICsgNF0gPSBrICsgMTtcclxuXHRcdFx0aW5kaWNlc1tsICsgNV0gPSBrICsgMztcclxuXHJcblx0XHRcdGsgKz0gNDtcclxuXHRcdFx0bCArPSA2O1xyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0cmV0dXJuIHtcclxuXHRcdHBvc2l0aW9uczogcG9zaXRpb25zLFxyXG5cdFx0bm9ybWFsczogbm9ybWFscyxcclxuXHRcdHV2czogdXZzLFxyXG5cdFx0aW5kaWNlczogaW5kaWNlc1xyXG5cdH07XHJcbn1cclxuIiwiaW1wb3J0IHsgRmxvYXQzMkF0dHJpYnV0ZSB9IGZyb20gXCIuLi9yZW5kZXIvQXR0cmlidXRlXCI7XHJcbmltcG9ydCB7IGNyZWF0ZVNwaGVyZSB9IGZyb20gXCIuLi91dGlscy9HZW9tZXRyeVV0aWxzXCI7XHJcbmltcG9ydCBHZW9tZXRyeSBmcm9tIFwiLi9HZW9tZXRyeVwiO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgU3BoZXJlR2VvbWV0cnkgZXh0ZW5kcyBHZW9tZXRyeSB7XHJcblx0cmFkaXVzOiBudW1iZXI7XHJcblx0Y29uc3RydWN0b3IocmFkaXVzOiBudW1iZXIpIHtcclxuXHRcdHN1cGVyKHtcclxuXHRcdFx0dHlwZTogXCJzcGhlcmVHZW9tZXRyeVwiXHJcblx0XHR9KTtcclxuXHRcdHRoaXMuZGVmaW5lcyA9IHtcclxuXHRcdFx0SEFTX05PUk1BTDogdHJ1ZVxyXG5cdFx0fTtcclxuXHRcdHRoaXMucmFkaXVzID0gcmFkaXVzO1xyXG5cdFx0dGhpcy5pbml0KCk7XHJcblx0fVxyXG5cdHByaXZhdGUgaW5pdCgpIHtcclxuXHRcdGNvbnN0IHsgcG9zaXRpb25zLCBub3JtYWxzLCB1dnMsIGluZGljZXMgfSA9IGNyZWF0ZVNwaGVyZSh7IHJhZGl1czogdGhpcy5yYWRpdXMgfSk7XHJcblx0XHQvLyB0aGlzLnBvc2l0aW9ucyA9IHBvc2l0aW9ucztcclxuXHRcdC8vIHRoaXMubm9ybWFscyA9IG5vcm1hbHM7XHJcblx0XHQvLyB0aGlzLnV2cyA9IHV2cztcclxuXHRcdC8vIHRoaXMuaW5kaWNlcyA9IGluZGljZXM7XHJcblx0XHR0aGlzLmNvbXB1dGVCb3VuZGluZ1NwaGVyZShwb3NpdGlvbnMpO1xyXG5cdFx0dGhpcy5zZXRBdHRyaWJ1dGUobmV3IEZsb2F0MzJBdHRyaWJ1dGUoXCJwb3NpdGlvblwiLCBwb3NpdGlvbnMsIDMpKTtcclxuXHRcdHRoaXMuc2V0QXR0cmlidXRlKG5ldyBGbG9hdDMyQXR0cmlidXRlKFwibm9ybWFsXCIsIG5vcm1hbHMsIDMpKTtcclxuXHRcdHRoaXMuc2V0QXR0cmlidXRlKG5ldyBGbG9hdDMyQXR0cmlidXRlKFwidXZcIiwgdXZzLCAyKSk7XHJcblxyXG5cdFx0dGhpcy5zZXRJbmRpY2UoaW5kaWNlcyk7XHJcblx0XHR0aGlzLmNvdW50ID0gaW5kaWNlcy5sZW5ndGg7XHJcblx0fVxyXG59XHJcbiIsImltcG9ydCB7IEZsb2F0MzJBdHRyaWJ1dGUgfSBmcm9tIFwiLi4vcmVuZGVyL0F0dHJpYnV0ZVwiO1xuaW1wb3J0IHsgY3JlYXRlQm94IH0gZnJvbSBcIi4uL3V0aWxzL0dlb21ldHJ5VXRpbHNcIjtcbmltcG9ydCBHZW9tZXRyeSBmcm9tIFwiLi9HZW9tZXRyeVwiO1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQm94R2VvbWV0cnkgZXh0ZW5kcyBHZW9tZXRyeSB7XG5cdGNvbnN0cnVjdG9yKHB1YmxpYyB3aWR0aDogbnVtYmVyID0gMTAsIHB1YmxpYyBoZWlnaHQ6IG51bWJlciA9IDEwLCBwdWJsaWMgZGVwdGg6IG51bWJlciA9IDEwKSB7XG5cdFx0c3VwZXIoe1xuXHRcdFx0dHlwZTogXCJib3hHZW9tZXRyeVwiXG5cdFx0fSk7XG5cdFx0dGhpcy5kZWZpbmVzID0ge1xuXHRcdFx0SEFTX05PUk1BTDogdHJ1ZVxuXHRcdH07XG5cdFx0dGhpcy5pbml0KCk7XG5cdH1cblx0cHJpdmF0ZSBpbml0KCkge1xuXHRcdC8vIGdlbmVyYXRlIHBvcyB1diBub3JtYWwgc28gb25cblx0XHRjb25zdCB7IHBvc2l0aW9ucywgbm9ybWFscywgdXZzIH0gPSBjcmVhdGVCb3goe1xuXHRcdFx0ZGltZW5zaW9uczogW3RoaXMuZGVwdGgsIHRoaXMud2lkdGgsIHRoaXMuaGVpZ2h0XVxuXHRcdH0pO1xuXHRcdHRoaXMuY29tcHV0ZUJvdW5kaW5nU3BoZXJlKHBvc2l0aW9ucyk7XG5cdFx0dGhpcy5zZXRBdHRyaWJ1dGUobmV3IEZsb2F0MzJBdHRyaWJ1dGUoXCJwb3NpdGlvblwiLCBwb3NpdGlvbnMsIDMpKTtcblx0XHR0aGlzLnNldEF0dHJpYnV0ZShuZXcgRmxvYXQzMkF0dHJpYnV0ZShcIm5vcm1hbFwiLCBub3JtYWxzLCAzKSk7XG5cdFx0dGhpcy5zZXRBdHRyaWJ1dGUobmV3IEZsb2F0MzJBdHRyaWJ1dGUoXCJ1dlwiLCB1dnMsIDIpKTtcblx0XHR0aGlzLmNvdW50ID0gMzY7XG5cdH1cbn1cbiIsImltcG9ydCBWZWN0b3IzIGZyb20gXCIuLi9tYXRoL1ZlY3RvcjNcIjtcbmltcG9ydCB7IEZsb2F0MzJBdHRyaWJ1dGUgfSBmcm9tIFwiLi4vcmVuZGVyL0F0dHJpYnV0ZVwiO1xuaW1wb3J0IEdlb21ldHJ5IGZyb20gXCIuL0dlb21ldHJ5XCI7XG5leHBvcnQgZGVmYXVsdCBjbGFzcyBUb3J1c0tub3RHZW9tZXRyeSBleHRlbmRzIEdlb21ldHJ5IHtcblx0cmFkaXVzOiBudW1iZXI7XG5cdHR1YmU6IG51bWJlcjtcblx0dHVidWxhclNlZ21lbnRzOiBudW1iZXI7XG5cdHJhZGlhbFNlZ21lbnRzOiBudW1iZXI7XG5cdHA6IG51bWJlcjtcblx0cTogbnVtYmVyO1xuXHRjb25zdHJ1Y3RvcihyYWRpdXMgPSAxLCB0dWJlID0gMC40LCB0dWJ1bGFyU2VnbWVudHMgPSA2NCwgcmFkaWFsU2VnbWVudHMgPSA4LCBwID0gMiwgcSA9IDMpIHtcblx0XHRzdXBlcih7XG5cdFx0XHR0eXBlOiBcInRvcnVzS25vdEdlb21ldHJ5XCJcblx0XHR9KTtcblx0XHR0aGlzLmRlZmluZXMgPSB7XG5cdFx0XHRIQVNfTk9STUFMOiB0cnVlXG5cdFx0fTtcblx0XHR0aGlzLnJhZGl1cyA9IHJhZGl1cztcblx0XHR0aGlzLnR1YmUgPSB0dWJlO1xuXHRcdHRoaXMudHVidWxhclNlZ21lbnRzID0gdHVidWxhclNlZ21lbnRzO1xuXHRcdHRoaXMucmFkaWFsU2VnbWVudHMgPSByYWRpYWxTZWdtZW50cztcblx0XHR0aGlzLnAgPSBwO1xuXHRcdHRoaXMucSA9IHE7XG5cdFx0dGhpcy5pbml0KCk7XG5cdH1cblx0cHJpdmF0ZSBpbml0KCkge1xuXHRcdGNvbnN0IHsgbm9ybWFscywgdXZzLCBwb3NpdGlvbnMsIGluZGljZXMgfSA9IHRoaXMuY3JlYXRlR2VvbWV0cnkoKTtcblx0XHR0aGlzLmNvbXB1dGVCb3VuZGluZ1NwaGVyZShwb3NpdGlvbnMpO1xuXHRcdHRoaXMuc2V0QXR0cmlidXRlKG5ldyBGbG9hdDMyQXR0cmlidXRlKFwicG9zaXRpb25cIiwgcG9zaXRpb25zLCAzKSk7XG5cdFx0dGhpcy5zZXRBdHRyaWJ1dGUobmV3IEZsb2F0MzJBdHRyaWJ1dGUoXCJub3JtYWxcIiwgbm9ybWFscywgMykpO1xuXHRcdHRoaXMuc2V0QXR0cmlidXRlKG5ldyBGbG9hdDMyQXR0cmlidXRlKFwidXZcIiwgdXZzLCAyKSk7XG5cdFx0dGhpcy5zZXRJbmRpY2UoaW5kaWNlcyk7XG5cdFx0dGhpcy5jb3VudCA9IGluZGljZXMubGVuZ3RoO1xuXHR9XG5cdHByaXZhdGUgY3JlYXRlR2VvbWV0cnkoKSB7XG5cdFx0Y29uc3QgcG9zaXRpb25zID0gW10sXG5cdFx0XHRub3JtYWxzID0gW10sXG5cdFx0XHR1dnMgPSBbXSxcblx0XHRcdGluZGljZXMgPSBbXTtcblx0XHRjb25zdCB0dWJ1bGFyU2VnbWVudHMgPSBNYXRoLmZsb29yKHRoaXMudHVidWxhclNlZ21lbnRzKTtcblx0XHRjb25zdCByYWRpYWxTZWdtZW50cyA9IE1hdGguZmxvb3IodGhpcy5yYWRpYWxTZWdtZW50cyk7XG5cdFx0Ly8gaGVscGVyIHZhcmlhYmxlc1xuXG5cdFx0Y29uc3QgdmVydGV4ID0gbmV3IFZlY3RvcjMoKTtcblx0XHRjb25zdCBub3JtYWwgPSBuZXcgVmVjdG9yMygpO1xuXG5cdFx0Y29uc3QgUDEgPSBuZXcgVmVjdG9yMygpO1xuXHRcdGNvbnN0IFAyID0gbmV3IFZlY3RvcjMoKTtcblxuXHRcdGNvbnN0IEIgPSBuZXcgVmVjdG9yMygpO1xuXHRcdGNvbnN0IFQgPSBuZXcgVmVjdG9yMygpO1xuXHRcdGNvbnN0IE4gPSBuZXcgVmVjdG9yMygpO1xuXG5cdFx0Ly8gZ2VuZXJhdGUgdmVydGljZXMsIG5vcm1hbHMgYW5kIHV2c1xuXG5cdFx0Zm9yIChsZXQgaSA9IDA7IGkgPD0gdHVidWxhclNlZ21lbnRzOyArK2kpIHtcblx0XHRcdC8vIHRoZSByYWRpYW4gXCJ1XCIgaXMgdXNlZCB0byBjYWxjdWxhdGUgdGhlIHBvc2l0aW9uIG9uIHRoZSB0b3J1cyBjdXJ2ZSBvZiB0aGUgY3VycmVudCB0dWJ1bGFyIHNlZ21lbnRcblxuXHRcdFx0Y29uc3QgdSA9IChpIC8gdHVidWxhclNlZ21lbnRzKSAqIHRoaXMucCAqIE1hdGguUEkgKiAyO1xuXG5cdFx0XHQvLyBub3cgd2UgY2FsY3VsYXRlIHR3byBwb2ludHMuIFAxIGlzIG91ciBjdXJyZW50IHBvc2l0aW9uIG9uIHRoZSBjdXJ2ZSwgUDIgaXMgYSBsaXR0bGUgZmFydGhlciBhaGVhZC5cblx0XHRcdC8vIHRoZXNlIHBvaW50cyBhcmUgdXNlZCB0byBjcmVhdGUgYSBzcGVjaWFsIFwiY29vcmRpbmF0ZSBzcGFjZVwiLCB3aGljaCBpcyBuZWNlc3NhcnkgdG8gY2FsY3VsYXRlIHRoZSBjb3JyZWN0IHZlcnRleCBwb3NpdGlvbnNcblxuXHRcdFx0Y2FsY3VsYXRlUG9zaXRpb25PbkN1cnZlKHUsIHRoaXMucCwgdGhpcy5xLCB0aGlzLnJhZGl1cywgUDEpO1xuXHRcdFx0Y2FsY3VsYXRlUG9zaXRpb25PbkN1cnZlKHUgKyAwLjAxLCB0aGlzLnAsIHRoaXMucSwgdGhpcy5yYWRpdXMsIFAyKTtcblxuXHRcdFx0Ly8gY2FsY3VsYXRlIG9ydGhvbm9ybWFsIGJhc2lzXG5cblx0XHRcdFZlY3RvcjMuc3VidHJhY3QoUDIsIFAxLCBUKTtcblx0XHRcdC8vIFQuc3ViVmVjdG9ycyggUDIsIFAxICk7XG5cdFx0XHRWZWN0b3IzLmFkZChQMiwgUDEsIE4pO1xuXHRcdFx0Ly8gTi5hZGRWZWN0b3JzKCBQMiwgUDEgKTtcblx0XHRcdFZlY3RvcjMuY3Jvc3MoVCwgTiwgQik7XG5cdFx0XHQvLyBCLmNyb3NzVmVjdG9ycyggVCwgTiApO1xuXHRcdFx0VmVjdG9yMy5jcm9zcyhCLCBULCBOKTtcblx0XHRcdC8vIE4uY3Jvc3NWZWN0b3JzKCBCLCBUICk7XG5cblx0XHRcdC8vIG5vcm1hbGl6ZSBCLCBOLiBUIGNhbiBiZSBpZ25vcmVkLCB3ZSBkb24ndCB1c2UgaXRcblxuXHRcdFx0Qi5ub3JtYWxpemUoKTtcblx0XHRcdE4ubm9ybWFsaXplKCk7XG5cblx0XHRcdGZvciAobGV0IGogPSAwOyBqIDw9IHJhZGlhbFNlZ21lbnRzOyArK2opIHtcblx0XHRcdFx0Ly8gbm93IGNhbGN1bGF0ZSB0aGUgdmVydGljZXMuIHRoZXkgYXJlIG5vdGhpbmcgbW9yZSB0aGFuIGFuIGV4dHJ1c2lvbiBvZiB0aGUgdG9ydXMgY3VydmUuXG5cdFx0XHRcdC8vIGJlY2F1c2Ugd2UgZXh0cnVkZSBhIHNoYXBlIGluIHRoZSB4eS1wbGFuZSwgdGhlcmUgaXMgbm8gbmVlZCB0byBjYWxjdWxhdGUgYSB6LXZhbHVlLlxuXG5cdFx0XHRcdGNvbnN0IHYgPSAoaiAvIHJhZGlhbFNlZ21lbnRzKSAqIE1hdGguUEkgKiAyO1xuXHRcdFx0XHRjb25zdCBjeCA9IC10aGlzLnR1YmUgKiBNYXRoLmNvcyh2KTtcblx0XHRcdFx0Y29uc3QgY3kgPSB0aGlzLnR1YmUgKiBNYXRoLnNpbih2KTtcblxuXHRcdFx0XHQvLyBub3cgY2FsY3VsYXRlIHRoZSBmaW5hbCB2ZXJ0ZXggcG9zaXRpb24uXG5cdFx0XHRcdC8vIGZpcnN0IHdlIG9yaWVudCB0aGUgZXh0cnVzaW9uIHdpdGggb3VyIGJhc2lzIHZlY3RvcnMsIHRoZW4gd2UgYWRkIGl0IHRvIHRoZSBjdXJyZW50IHBvc2l0aW9uIG9uIHRoZSBjdXJ2ZVxuXG5cdFx0XHRcdHZlcnRleC54ID0gUDEueCArIChjeCAqIE4ueCArIGN5ICogQi54KTtcblx0XHRcdFx0dmVydGV4LnkgPSBQMS55ICsgKGN4ICogTi55ICsgY3kgKiBCLnkpO1xuXHRcdFx0XHR2ZXJ0ZXgueiA9IFAxLnogKyAoY3ggKiBOLnogKyBjeSAqIEIueik7XG5cblx0XHRcdFx0cG9zaXRpb25zLnB1c2godmVydGV4LngsIHZlcnRleC55LCB2ZXJ0ZXgueik7XG5cblx0XHRcdFx0Ly8gbm9ybWFsIChQMSBpcyBhbHdheXMgdGhlIGNlbnRlci9vcmlnaW4gb2YgdGhlIGV4dHJ1c2lvbiwgdGh1cyB3ZSBjYW4gdXNlIGl0IHRvIGNhbGN1bGF0ZSB0aGUgbm9ybWFsKVxuXHRcdFx0XHRWZWN0b3IzLnN1YnRyYWN0KHZlcnRleCwgUDEsIG5vcm1hbCk7XG5cdFx0XHRcdG5vcm1hbC5ub3JtYWxpemUoKTtcblxuXHRcdFx0XHRub3JtYWxzLnB1c2gobm9ybWFsLngsIG5vcm1hbC55LCBub3JtYWwueik7XG5cblx0XHRcdFx0Ly8gdXZcblxuXHRcdFx0XHR1dnMucHVzaChpIC8gdHVidWxhclNlZ21lbnRzKTtcblx0XHRcdFx0dXZzLnB1c2goaiAvIHJhZGlhbFNlZ21lbnRzKTtcblx0XHRcdH1cblx0XHR9XG5cblx0XHQvLyBnZW5lcmF0ZSBpbmRpY2VzXG5cblx0XHRmb3IgKGxldCBqID0gMTsgaiA8PSB0dWJ1bGFyU2VnbWVudHM7IGorKykge1xuXHRcdFx0Zm9yIChsZXQgaSA9IDE7IGkgPD0gcmFkaWFsU2VnbWVudHM7IGkrKykge1xuXHRcdFx0XHQvLyBpbmRpY2VzXG5cblx0XHRcdFx0Y29uc3QgYSA9IChyYWRpYWxTZWdtZW50cyArIDEpICogKGogLSAxKSArIChpIC0gMSk7XG5cdFx0XHRcdGNvbnN0IGIgPSAocmFkaWFsU2VnbWVudHMgKyAxKSAqIGogKyAoaSAtIDEpO1xuXHRcdFx0XHRjb25zdCBjID0gKHJhZGlhbFNlZ21lbnRzICsgMSkgKiBqICsgaTtcblx0XHRcdFx0Y29uc3QgZCA9IChyYWRpYWxTZWdtZW50cyArIDEpICogKGogLSAxKSArIGk7XG5cblx0XHRcdFx0Ly8gZmFjZXNcblxuXHRcdFx0XHRpbmRpY2VzLnB1c2goYSwgYiwgZCk7XG5cdFx0XHRcdGluZGljZXMucHVzaChiLCBjLCBkKTtcblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJuIHtcblx0XHRcdG5vcm1hbHMsXG5cdFx0XHR1dnMsXG5cdFx0XHRwb3NpdGlvbnMsXG5cdFx0XHRpbmRpY2VzXG5cdFx0fTtcblx0fVxufVxuZnVuY3Rpb24gY2FsY3VsYXRlUG9zaXRpb25PbkN1cnZlKHUsIHAsIHEsIHJhZGl1cywgcG9zaXRpb24pIHtcblx0Y29uc3QgY3UgPSBNYXRoLmNvcyh1KTtcblx0Y29uc3Qgc3UgPSBNYXRoLnNpbih1KTtcblx0Y29uc3QgcXVPdmVyUCA9IChxIC8gcCkgKiB1O1xuXHRjb25zdCBjcyA9IE1hdGguY29zKHF1T3ZlclApO1xuXG5cdHBvc2l0aW9uLnggPSByYWRpdXMgKiAoMiArIGNzKSAqIDAuNSAqIGN1O1xuXHRwb3NpdGlvbi55ID0gcmFkaXVzICogKDIgKyBjcykgKiBzdSAqIDAuNTtcblx0cG9zaXRpb24ueiA9IHJhZGl1cyAqIE1hdGguc2luKHF1T3ZlclApICogMC41O1xufVxuIiwiaW1wb3J0IHsgRnJhbWVTdGF0ZSB9IGZyb20gXCIuLi9jb3JlL0ZyYW1lU3RhdGVcIjtcbmltcG9ydCB0ZXh0dXJlQ2FjaGUgZnJvbSBcIi4uL2NvcmUvVGV4dHVyZUNhY2hlXCI7XG5pbXBvcnQgeyBVbmlmb3JtRW51bSB9IGZyb20gXCIuLi9jb3JlL1dlYkdQVVR5cGVzXCI7XG5pbXBvcnQgQ29sb3IgZnJvbSBcIi4uL21hdGgvQ29sb3JcIjtcbmltcG9ydCB7IE1lc2ggfSBmcm9tIFwiLi4vbWVzaC9NZXNoXCI7XG5pbXBvcnQgU2FtcGxlciBmcm9tIFwiLi4vcmVuZGVyL1NhbXBsZXJcIjtcbmltcG9ydCBUZXh0dXJlIGZyb20gXCIuLi9yZW5kZXIvVGV4dHVyZVwiO1xuaW1wb3J0IFVuaWZvcm1CdWZmZXIgZnJvbSBcIi4uL3JlbmRlci9Vbmlmb3JtQnVmZmVyXCI7XG5pbXBvcnQgeyBTaGFkZXJTb3VyY2UgfSBmcm9tIFwiLi4vc2hhZGVyL1NoYWRlclNvdXJjZVwiO1xuaW1wb3J0IHsgTWF0ZXJpYWwgfSBmcm9tIFwiLi9NYXRlcmlhbFwiO1xuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQmxpbm5QaG9uZ01hdGVyaWFsIGV4dGVuZHMgTWF0ZXJpYWwge1xuXHRwdWJsaWMgc3BlY3VsYXI6IENvbG9yO1xuXHRwdWJsaWMgc2hpbmluZXNzOiBudW1iZXI7XG5cdHB1YmxpYyBub3JtYWxUZXh0dXJlOiBUZXh0dXJlO1xuXHRwdWJsaWMgbm9ybWFsU2FtcGxlcjogU2FtcGxlcjtcblx0Y29uc3RydWN0b3IoKSB7XG5cdFx0c3VwZXIoKTtcblx0XHR0aGlzLnR5cGUgPSBcInBob25nXCI7XG5cdFx0dGhpcy5jb2xvciA9IG5ldyBDb2xvcigxLjAsIDAuMCwgMC4wKTtcblx0XHR0aGlzLnNoYWRlclNvdXJjZSA9IG5ldyBTaGFkZXJTb3VyY2Uoe1xuXHRcdFx0c2hhZGVySWQ6IHRoaXMudHlwZSxcblx0XHRcdGRlZmluZXM6IHtcblx0XHRcdFx0bWF0ZXJpYWxQaG9uZzogdHJ1ZVxuXHRcdFx0fVxuXHRcdH0pO1xuXHRcdHRoaXMubGlnaHQgPSB0cnVlO1xuXHRcdHRoaXMuc3BlY3VsYXIgPSBuZXcgQ29sb3IoMS4wLCAxLjAsIDEuMCk7XG5cdFx0dGhpcy5zaGluaW5lc3MgPSAzMC4wO1xuXHRcdHRoaXMuYmFzZVRleHR1cmUgPSB1bmRlZmluZWQ7XG5cdFx0dGhpcy5iYXNlU2FtcGxlciA9IHVuZGVmaW5lZDtcblx0fVxuXHR1cGRhdGUoZnJhbWVTdGF0ZT86IEZyYW1lU3RhdGUsIG1lc2g/OiBNZXNoKSB7XG5cdFx0aWYgKCF0aGlzLnNoYWRlckRhdGEgfHwgdGhpcy5kaXJ0eSkgdGhpcy5jcmVhdGVTaGFkZXJEYXRhKG1lc2gpO1xuXHR9XG5cdHByb3RlY3RlZCBjcmVhdGVTaGFkZXJEYXRhKG1lc2g/OiBNZXNoKSB7XG5cdFx0c3VwZXIuY3JlYXRlU2hhZGVyRGF0YSgpO1xuXHRcdGNvbnN0IHVuaWZvcm1CdWZmZXIgPSBuZXcgVW5pZm9ybUJ1ZmZlcih7IGxhYmVsOiBcInBob25nXCIgfSk7XG5cdFx0dW5pZm9ybUJ1ZmZlci5zZXRVbmlmb3JtKFxuXHRcdFx0XCJtb2RlbE1hdHJpeFwiLFxuXHRcdFx0KCkgPT4ge1xuXHRcdFx0XHRyZXR1cm4gbWVzaC5tb2RlbE1hdHJpeDtcblx0XHRcdH0sXG5cdFx0XHRVbmlmb3JtRW51bS5NYXQ0XG5cdFx0KTtcblx0XHR1bmlmb3JtQnVmZmVyLnNldFVuaWZvcm0oXCJjb2xvclwiLCB0aGlzLCBVbmlmb3JtRW51bS5Db2xvcik7XG5cdFx0dW5pZm9ybUJ1ZmZlci5zZXRVbmlmb3JtKFwib3BhY2l0eVwiLCB0aGlzLCBVbmlmb3JtRW51bS5GbG9hdCk7XG5cdFx0dW5pZm9ybUJ1ZmZlci5zZXRVbmlmb3JtKFxuXHRcdFx0XCJub3JtYWxNdHJpeFwiLFxuXHRcdFx0KCkgPT4ge1xuXHRcdFx0XHRyZXR1cm4gbWVzaC5ub3JtYWxNYXRyaXg7XG5cdFx0XHR9LFxuXHRcdFx0VW5pZm9ybUVudW0uTWF0NFxuXHRcdCk7XG5cdFx0dW5pZm9ybUJ1ZmZlci5zZXRVbmlmb3JtKFwiZW1pc3NpdmVcIiwgdGhpcywgVW5pZm9ybUVudW0uQ29sb3IpO1xuXHRcdHVuaWZvcm1CdWZmZXIuc2V0VW5pZm9ybShcInNoaW5pbmVzc1wiLCB0aGlzLCBVbmlmb3JtRW51bS5GbG9hdCk7XG5cdFx0dW5pZm9ybUJ1ZmZlci5zZXRVbmlmb3JtKFwic3BlY3VsYXJcIiwgdGhpcywgVW5pZm9ybUVudW0uQ29sb3IpO1xuXHRcdHRoaXMuc2hhZGVyRGF0YS5zZXRVbmlmb3JtQnVmZmVyKFwicGhvbmdcIiwgdW5pZm9ybUJ1ZmZlcik7XG5cdFx0aWYgKHRoaXMuYmFzZVRleHR1cmUpIHtcblx0XHRcdHRoaXMuc2hhZGVyRGF0YS5zZXREZWZpbmUoXCJVU0VfQ09MT1JURVhUVVJFXCIsIHRydWUpO1xuXHRcdFx0dGhpcy5zaGFkZXJEYXRhLnNldFRleHR1cmUoXCJiYXNlQ29sb3JUZXh0dXJlXCIsIHRoaXMuYmFzZVRleHR1cmUpO1xuXHRcdFx0dGhpcy5zaGFkZXJEYXRhLnNldFNhbXBsZXIoXCJiYXNlQ29sb3JTYW1wbGVyXCIsIHRoaXMuYmFzZVNhbXBsZXIgfHwgdGV4dHVyZUNhY2hlLmRlZmF1bHRTYW1wbGVyKTtcblx0XHR9XG5cdFx0aWYgKHRoaXMubm9ybWFsVGV4dHVyZSkge1xuXHRcdFx0dGhpcy5zaGFkZXJEYXRhLnNldERlZmluZShcIlVTRV9OT1JNQUxURVhUVVJFXCIsIHRydWUpO1xuXHRcdFx0dGhpcy5zaGFkZXJEYXRhLnNldFRleHR1cmUoXCJub3JtYWxUZXh0dXJlXCIsIHRoaXMubm9ybWFsVGV4dHVyZSk7XG5cdFx0XHR0aGlzLnNoYWRlckRhdGEuc2V0U2FtcGxlcihcIm5vcm1hbFNhbXBsZXJcIiwgdGhpcy5ub3JtYWxTYW1wbGVyIHx8IHRleHR1cmVDYWNoZS5kZWZhdWx0U2FtcGxlcik7XG5cdFx0fVxuXHR9XG5cdGRlc3Ryb3koKSB7XG5cdFx0dGhpcz8uYmFzZVRleHR1cmU/LmRlc3Ryb3koKTtcblx0XHRzdXBlci5kZXN0cm95KCk7XG5cdH1cbn1cbiIsImltcG9ydCB7IEZyYW1lU3RhdGUgfSBmcm9tIFwiLi4vY29yZS9GcmFtZVN0YXRlXCI7XG5pbXBvcnQgdGV4dHVyZUNhY2hlIGZyb20gXCIuLi9jb3JlL1RleHR1cmVDYWNoZVwiO1xuaW1wb3J0IHsgQ3VsbE1vZGUgfSBmcm9tIFwiLi4vY29yZS9XZWJHUFVDb25zdGFudFwiO1xuaW1wb3J0IHsgVW5pZm9ybUVudW0gfSBmcm9tIFwiLi4vY29yZS9XZWJHUFVUeXBlc1wiO1xuaW1wb3J0IFZlY3RvcjIgZnJvbSBcIi4uL21hdGgvVmVjdG9yMlwiO1xuaW1wb3J0IHsgTWVzaCB9IGZyb20gXCIuLi9tZXNoL01lc2hcIjtcbmltcG9ydCBTYW1wbGVyIGZyb20gXCIuLi9yZW5kZXIvU2FtcGxlclwiO1xuaW1wb3J0IFRleHR1cmUgZnJvbSBcIi4uL3JlbmRlci9UZXh0dXJlXCI7XG5pbXBvcnQgVW5pZm9ybUJ1ZmZlciBmcm9tIFwiLi4vcmVuZGVyL1VuaWZvcm1CdWZmZXJcIjtcbmltcG9ydCB7IFNoYWRlclNvdXJjZSB9IGZyb20gXCIuLi9zaGFkZXIvU2hhZGVyU291cmNlXCI7XG5pbXBvcnQgeyBNYXRlcmlhbCB9IGZyb20gXCIuL01hdGVyaWFsXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFBick1hdGVyaWFsIGV4dGVuZHMgTWF0ZXJpYWwge1xuXHRwdWJsaWMgc3BlY3VsYXJFbnZUZXh0dXJlOiBUZXh0dXJlO1xuXG5cdHB1YmxpYyBzcGVjdWxhckVudlNhbXBsZXI6IFNhbXBsZXI7XG5cblx0cHVibGljIGVtaXNzaXZlVGV4dHVyZTogVGV4dHVyZTtcblxuXHRwdWJsaWMgZW1pc3NpdmVTYW1wbGVyOiBTYW1wbGVyO1xuXG5cdHB1YmxpYyBub3JtYWxUZXh0dXJlOiBUZXh0dXJlO1xuXG5cdHB1YmxpYyBub3JtYWxTYW1wbGVyOiBTYW1wbGVyO1xuXG5cdHB1YmxpYyBhb1RleHR1cmU6IFRleHR1cmU7XG5cblx0cHVibGljIGFvU2FtcGxlcjogU2FtcGxlcjtcblxuXHRwdWJsaWMgbWV0YWxuZXNzUm91Z2huZXNzVGV4dHVyZTogVGV4dHVyZTtcblxuXHRwdWJsaWMgbWV0YWxuZXNzUm91Z2huZXNzU2FtcGxlcjogU2FtcGxlcjtcblxuXHRwcml2YXRlIF9yb3VnaG5lc3M6IG51bWJlcjtcblxuXHRwcml2YXRlIF9tZXRhbG5lc3M6IG51bWJlcjtcblxuXHRwcml2YXRlIF9hb1RleHR1cmVJbnRlbnNpdHk6IG51bWJlcjtcblxuXHRwcml2YXRlIF9ub3JtYWxTY2FsZTogVmVjdG9yMjtcblxuXHRwcml2YXRlIF9JQkxSZW5kZXI6IGJvb2xlYW47XG5cblx0cHVibGljIGdldCByb3VnaG5lc3MoKTogbnVtYmVyIHtcblx0XHRyZXR1cm4gdGhpcy5fcm91Z2huZXNzO1xuXHR9XG5cdHB1YmxpYyBzZXQgcm91Z2huZXNzKHZhbHVlKSB7XG5cdFx0dGhpcy5fcm91Z2huZXNzID0gdmFsdWU7XG5cdH1cblx0cHVibGljIGdldCBtZXRhbG5lc3MoKTogbnVtYmVyIHtcblx0XHRyZXR1cm4gdGhpcy5fbWV0YWxuZXNzO1xuXHR9XG5cdHB1YmxpYyBzZXQgbWV0YWxuZXNzKHY6IG51bWJlcikge1xuXHRcdHRoaXMuX21ldGFsbmVzcyA9IHY7XG5cdH1cblx0cHVibGljIGdldCBhb1RleHR1cmVJbnRlbnNpdHkoKTogbnVtYmVyIHtcblx0XHRyZXR1cm4gdGhpcy5fYW9UZXh0dXJlSW50ZW5zaXR5O1xuXHR9XG5cdHB1YmxpYyBzZXQgYW9UZXh0dXJlSW50ZW5zaXR5KHY6IG51bWJlcikge1xuXHRcdHRoaXMuX2FvVGV4dHVyZUludGVuc2l0eSA9IHY7XG5cdH1cblx0cHVibGljIGdldCBub3JtYWxTY2FsZSgpOiBWZWN0b3IyIHtcblx0XHRpZiAodGhpcy5yZW5kZXJTdGF0ZSAmJiB0aGlzLnJlbmRlclN0YXRlLnByaW1pdGl2ZSkge1xuXHRcdFx0aWYgKHRoaXMucmVuZGVyU3RhdGUucHJpbWl0aXZlLmN1bGxNb2RlID09IEN1bGxNb2RlLkJhY2spIHtcblx0XHRcdFx0cmV0dXJuIFZlY3RvcjIubmVnYXRlKHRoaXMuX25vcm1hbFNjYWxlLCBuZXcgVmVjdG9yMigpKTtcblx0XHRcdH1cblx0XHR9XG5cdFx0cmV0dXJuIHRoaXMuX25vcm1hbFNjYWxlO1xuXHR9XG5cdHB1YmxpYyBzZXQgbm9ybWFsU2NhbGUodjogVmVjdG9yMikge1xuXHRcdHRoaXMuX25vcm1hbFNjYWxlID0gdjtcblx0fVxuXHRwdWJsaWMgc2V0IElCTFJlbmRlcih2YWx1ZSkge1xuXHRcdHRoaXMuX0lCTFJlbmRlciA9IHZhbHVlO1xuXHRcdHRoaXMuc2hhZGVyU291cmNlLnNldERlZmluZXMoe1xuXHRcdFx0VVNFX0lCTDogdGhpcy5fSUJMUmVuZGVyXG5cdFx0fSk7XG5cdFx0dGhpcy5kaXJ0eSA9IHRydWU7XG5cdH1cblx0Y29uc3RydWN0b3IoKSB7XG5cdFx0c3VwZXIoKTtcblx0XHR0aGlzLnR5cGUgPSBcInBicl9tYXRcIjtcblxuXHRcdHRoaXMuX3JvdWdobmVzcyA9IDAuMTtcblxuXHRcdHRoaXMuX21ldGFsbmVzcyA9IDAuMTtcblxuXHRcdHRoaXMuX2FvVGV4dHVyZUludGVuc2l0eSA9IDEuMDtcblx0XHR0aGlzLmxpZ2h0ID0gdHJ1ZTtcblx0XHR0aGlzLl9ub3JtYWxTY2FsZSA9IG5ldyBWZWN0b3IyKDEsIDEpO1xuXHRcdHRoaXMuX0lCTFJlbmRlciA9IHRydWU7XG5cdFx0dGhpcy5zaGFkZXJTb3VyY2UgPSBuZXcgU2hhZGVyU291cmNlKHtcblx0XHRcdHNoYWRlcklkOiB0aGlzLnR5cGUsXG5cdFx0XHRkZWZpbmVzOiB7XG5cdFx0XHRcdG1hdGVyaWFsUGJyOiB0cnVlLFxuXHRcdFx0XHRVU0VfSUJMOiB0aGlzLl9JQkxSZW5kZXJcblx0XHRcdH1cblx0XHR9KTtcblx0fVxuXHR1cGRhdGUoZnJhbWVTdGF0ZT86IEZyYW1lU3RhdGUsIG1lc2g/OiBNZXNoKSB7XG5cdFx0aWYgKCF0ZXh0dXJlQ2FjaGUuZ2V0VGV4dHVyZShcInNwZWN1bGFyXCIpKSByZXR1cm47XG5cdFx0aWYgKCF0aGlzLnNoYWRlckRhdGEgfHwgdGhpcy5kaXJ0eSkge1xuXHRcdFx0dGhpcy5jcmVhdGVTaGFkZXJEYXRhKG1lc2gpO1xuXHRcdH1cblx0fVxuXHRwcm90ZWN0ZWQgY3JlYXRlU2hhZGVyRGF0YShtZXNoPzogTWVzaCkge1xuXHRcdHN1cGVyLmNyZWF0ZVNoYWRlckRhdGEoKTtcblx0XHRjb25zdCB1bmlmb3JtQnVmZmVyID0gbmV3IFVuaWZvcm1CdWZmZXIoeyBsYWJlbDogXCJwYnJcIiB9KTtcblx0XHR1bmlmb3JtQnVmZmVyLnNldFVuaWZvcm0oXG5cdFx0XHRcIm1vZGVsTWF0cml4XCIsXG5cdFx0XHQoKSA9PiB7XG5cdFx0XHRcdHJldHVybiBtZXNoLm1vZGVsTWF0cml4O1xuXHRcdFx0fSxcblx0XHRcdFVuaWZvcm1FbnVtLk1hdDRcblx0XHQpO1xuXHRcdHVuaWZvcm1CdWZmZXIuc2V0VW5pZm9ybShcImNvbG9yXCIsIHRoaXMsIFVuaWZvcm1FbnVtLkNvbG9yKTtcblx0XHR1bmlmb3JtQnVmZmVyLnNldFVuaWZvcm0oXCJvcGFjaXR5XCIsIHRoaXMsIFVuaWZvcm1FbnVtLkZsb2F0KTtcblx0XHR1bmlmb3JtQnVmZmVyLnNldFVuaWZvcm0oXG5cdFx0XHRcIm5vcm1hbE10cml4XCIsXG5cdFx0XHQoKSA9PiB7XG5cdFx0XHRcdHJldHVybiBtZXNoLm5vcm1hbE1hdHJpeDtcblx0XHRcdH0sXG5cdFx0XHRVbmlmb3JtRW51bS5NYXQ0XG5cdFx0KTtcblx0XHR1bmlmb3JtQnVmZmVyLnNldFVuaWZvcm0oXCJlbWlzc2l2ZVwiLCB0aGlzLCBVbmlmb3JtRW51bS5Db2xvcik7XG5cdFx0dW5pZm9ybUJ1ZmZlci5zZXRVbmlmb3JtKFwibWV0YWxuZXNzXCIsIHRoaXMsIFVuaWZvcm1FbnVtLkZsb2F0KTtcblx0XHR1bmlmb3JtQnVmZmVyLnNldFVuaWZvcm0oXCJyb3VnaG5lc3NcIiwgdGhpcywgVW5pZm9ybUVudW0uRmxvYXQpO1xuXHRcdHRoaXMuc2hhZGVyRGF0YS5zZXRVbmlmb3JtQnVmZmVyKFwicGJyXCIsIHVuaWZvcm1CdWZmZXIpO1xuXHRcdHRoaXMuc3BlY3VsYXJFbnZUZXh0dXJlID0gdGV4dHVyZUNhY2hlLmdldFRleHR1cmUoXCJzcGVjdWxhclwiKTtcblx0XHRpZiAodGhpcy5iYXNlVGV4dHVyZSkge1xuXHRcdFx0dGhpcy5zaGFkZXJEYXRhLnNldERlZmluZShcIlVTRV9URVhUVVJFXCIsIHRydWUpO1xuXHRcdFx0dGhpcy5zaGFkZXJEYXRhLnNldFRleHR1cmUoXCJiYXNlQ29sb3JUZXh0dXJlXCIsIHRoaXMuYmFzZVRleHR1cmUpO1xuXHRcdFx0dGhpcy5zaGFkZXJEYXRhLnNldFNhbXBsZXIoXCJiYXNlQ29sb3JTYW1wbGVyXCIsIHRoaXMuYmFzZVNhbXBsZXIgfHwgdGV4dHVyZUNhY2hlLmRlZmF1bHRTYW1wbGVyKTtcblx0XHR9XG5cdFx0aWYgKHRoaXMubWV0YWxuZXNzUm91Z2huZXNzVGV4dHVyZSkge1xuXHRcdFx0dGhpcy5zaGFkZXJEYXRhLnNldERlZmluZShcIlVTRV9NRVRBTE5FU1NURVhUVVJFXCIsIHRydWUpO1xuXHRcdFx0dGhpcy5zaGFkZXJEYXRhLnNldFRleHR1cmUoXCJtZXRhbG5lc3NSb3VnaG5lc3NUZXh0dXJlXCIsIHRoaXMubWV0YWxuZXNzUm91Z2huZXNzVGV4dHVyZSk7XG5cdFx0XHR0aGlzLnNoYWRlckRhdGEuc2V0U2FtcGxlcihcblx0XHRcdFx0XCJtZXRhbG5lc3NSb3VnaG5lc3NTYW1wbGVyXCIsXG5cdFx0XHRcdHRoaXMubWV0YWxuZXNzUm91Z2huZXNzU2FtcGxlciB8fCB0ZXh0dXJlQ2FjaGUuZGVmYXVsdFNhbXBsZXJcblx0XHRcdCk7XG5cdFx0fVxuXHRcdGlmICh0aGlzLm5vcm1hbFRleHR1cmUpIHtcblx0XHRcdHVuaWZvcm1CdWZmZXIuc2V0VW5pZm9ybShcIm5vcm1hbFNjYWxlXCIsIHRoaXMsIFVuaWZvcm1FbnVtLkZsb2F0VmVjMik7XG5cdFx0XHR0aGlzLnNoYWRlckRhdGEuc2V0RGVmaW5lKFwiVVNFX05PUk1BTFRFWFRVUkVcIiwgdHJ1ZSk7XG5cdFx0XHR0aGlzLnNoYWRlckRhdGEuc2V0VGV4dHVyZShcIm5vcm1hbFRleHR1cmVcIiwgdGhpcy5ub3JtYWxUZXh0dXJlKTtcblx0XHRcdHRoaXMuc2hhZGVyRGF0YS5zZXRTYW1wbGVyKFwibm9ybWFsU2FtcGxlclwiLCB0aGlzLm5vcm1hbFNhbXBsZXIgfHwgdGV4dHVyZUNhY2hlLmRlZmF1bHRTYW1wbGVyKTtcblx0XHR9XG5cdFx0aWYgKHRoaXMuYW9UZXh0dXJlKSB7XG5cdFx0XHR0aGlzLnNoYWRlckRhdGEuc2V0RGVmaW5lKFwiVVNFX0FPVEVYVFVSRVwiLCB0cnVlKTtcblx0XHRcdHRoaXMuc2hhZGVyRGF0YS5zZXRUZXh0dXJlKFwiYW9UZXh0dXJlXCIsIHRoaXMuYW9UZXh0dXJlKTtcblx0XHRcdHRoaXMuc2hhZGVyRGF0YS5zZXRTYW1wbGVyKFwiYW9TYW1wbGVyXCIsIHRoaXMuYW9TYW1wbGVyIHx8IHRleHR1cmVDYWNoZS5kZWZhdWx0U2FtcGxlcik7XG5cdFx0XHR1bmlmb3JtQnVmZmVyLnNldFVuaWZvcm0oXCJhb1RleHR1cmVJbnRlbnNpdHlcIiwgdGhpcywgVW5pZm9ybUVudW0uRmxvYXQpO1xuXHRcdH1cblx0XHRpZiAodGhpcy5lbWlzc2l2ZVRleHR1cmUpIHtcblx0XHRcdHRoaXMuc2hhZGVyRGF0YS5zZXREZWZpbmUoXCJVU0VfRU1JU1NJVkVURVhUVVJFXCIsIHRydWUpO1xuXHRcdFx0dGhpcy5zaGFkZXJEYXRhLnNldFRleHR1cmUoXCJlbWlzc2l2ZVRleHR1cmVcIiwgdGhpcy5lbWlzc2l2ZVRleHR1cmUpO1xuXHRcdFx0dGhpcy5zaGFkZXJEYXRhLnNldFNhbXBsZXIoXCJlbWlzc2l2ZVNhbXBsZXJcIiwgdGhpcy5lbWlzc2l2ZVNhbXBsZXIgfHwgdGV4dHVyZUNhY2hlLmRlZmF1bHRTYW1wbGVyKTtcblx0XHR9XG5cdFx0aWYgKHRoaXMuc3BlY3VsYXJFbnZUZXh0dXJlICYmIHRoaXMuX0lCTFJlbmRlcikge1xuXHRcdFx0dGhpcy5zaGFkZXJEYXRhLnNldFRleHR1cmUoXCJzcGVjdWxhckVudlRleHR1cmVcIiwgdGhpcy5zcGVjdWxhckVudlRleHR1cmUpO1xuXHRcdFx0dGhpcy5zaGFkZXJEYXRhLnNldFNhbXBsZXIoXCJzcGVjdWxhckVudlNhbXBsZXJcIiwgdGhpcy5zcGVjdWxhckVudlNhbXBsZXIgfHwgdGV4dHVyZUNhY2hlLmRlZmF1bHRTYW1wbGVyKTtcblx0XHR9XG5cdH1cblx0ZGVzdHJveSgpIHtcblx0XHR0aGlzPy5hb1RleHR1cmU/LmRlc3Ryb3koKTtcblx0XHR0aGlzPy5iYXNlVGV4dHVyZT8uZGVzdHJveSgpO1xuXHRcdHRoaXM/LmVtaXNzaXZlVGV4dHVyZT8uZGVzdHJveSgpO1xuXHRcdHRoaXM/Lm5vcm1hbFRleHR1cmU/LmRlc3Ryb3koKTtcblx0XHR0aGlzLnNwZWN1bGFyRW52VGV4dHVyZSA9IHVuZGVmaW5lZDtcblx0fVxufVxuIiwiZXhwb3J0IGNsYXNzIEV2ZW50RGlzcGF0Y2hlciB7XHJcblx0cHJpdmF0ZSBfbGlzdGVuZXJzOiBvYmplY3Q7XHJcblx0Y29uc3RydWN0b3IoKSB7XHJcblx0XHR0aGlzLl9saXN0ZW5lcnMgPSB7fTtcclxuXHR9XHJcblxyXG5cdGFkZEV2ZW50TGlzdGVuZXIodHlwZSwgbGlzdGVuZXIpIHtcclxuXHRcdGlmICh0aGlzLl9saXN0ZW5lcnMgPT09IHVuZGVmaW5lZCkgdGhpcy5fbGlzdGVuZXJzID0ge307XHJcblxyXG5cdFx0Y29uc3QgbGlzdGVuZXJzID0gdGhpcy5fbGlzdGVuZXJzO1xyXG5cclxuXHRcdGlmIChsaXN0ZW5lcnNbdHlwZV0gPT09IHVuZGVmaW5lZCkge1xyXG5cdFx0XHRsaXN0ZW5lcnNbdHlwZV0gPSBbXTtcclxuXHRcdH1cclxuXHJcblx0XHRpZiAobGlzdGVuZXJzW3R5cGVdLmluZGV4T2YobGlzdGVuZXIpID09PSAtMSkge1xyXG5cdFx0XHRsaXN0ZW5lcnNbdHlwZV0ucHVzaChsaXN0ZW5lcik7XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHRoYXNFdmVudExpc3RlbmVyKHR5cGUsIGxpc3RlbmVyKSB7XHJcblx0XHRpZiAodGhpcy5fbGlzdGVuZXJzID09PSB1bmRlZmluZWQpIHJldHVybiBmYWxzZTtcclxuXHJcblx0XHRjb25zdCBsaXN0ZW5lcnMgPSB0aGlzLl9saXN0ZW5lcnM7XHJcblxyXG5cdFx0cmV0dXJuIGxpc3RlbmVyc1t0eXBlXSAhPT0gdW5kZWZpbmVkICYmIGxpc3RlbmVyc1t0eXBlXS5pbmRleE9mKGxpc3RlbmVyKSAhPT0gLTE7XHJcblx0fVxyXG5cclxuXHRyZW1vdmVFdmVudExpc3RlbmVyKHR5cGUsIGxpc3RlbmVyKSB7XHJcblx0XHRpZiAodGhpcy5fbGlzdGVuZXJzID09PSB1bmRlZmluZWQpIHJldHVybjtcclxuXHJcblx0XHRjb25zdCBsaXN0ZW5lcnMgPSB0aGlzLl9saXN0ZW5lcnM7XHJcblx0XHRjb25zdCBsaXN0ZW5lckFycmF5ID0gbGlzdGVuZXJzW3R5cGVdO1xyXG5cclxuXHRcdGlmIChsaXN0ZW5lckFycmF5ICE9PSB1bmRlZmluZWQpIHtcclxuXHRcdFx0Y29uc3QgaW5kZXggPSBsaXN0ZW5lckFycmF5LmluZGV4T2YobGlzdGVuZXIpO1xyXG5cclxuXHRcdFx0aWYgKGluZGV4ICE9PSAtMSkge1xyXG5cdFx0XHRcdGxpc3RlbmVyQXJyYXkuc3BsaWNlKGluZGV4LCAxKTtcclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0ZGlzcGF0Y2hFdmVudChldmVudCkge1xyXG5cdFx0aWYgKHRoaXMuX2xpc3RlbmVycyA9PT0gdW5kZWZpbmVkKSByZXR1cm47XHJcblxyXG5cdFx0Y29uc3QgbGlzdGVuZXJzID0gdGhpcy5fbGlzdGVuZXJzO1xyXG5cdFx0Y29uc3QgbGlzdGVuZXJBcnJheSA9IGxpc3RlbmVyc1tldmVudC50eXBlXTtcclxuXHJcblx0XHRpZiAobGlzdGVuZXJBcnJheSAhPT0gdW5kZWZpbmVkKSB7XHJcblx0XHRcdGV2ZW50LnRhcmdldCA9IHRoaXM7XHJcblxyXG5cdFx0XHRjb25zdCBhcnJheSA9IGxpc3RlbmVyQXJyYXkuc2xpY2UoMCk7XHJcblxyXG5cdFx0XHRmb3IgKGxldCBpID0gMCwgbCA9IGFycmF5Lmxlbmd0aDsgaSA8IGw7IGkrKykge1xyXG5cdFx0XHRcdGFycmF5W2ldLmNhbGwodGhpcywgZXZlbnQpO1xyXG5cdFx0XHR9XHJcblx0XHRcdGV2ZW50LnRhcmdldCA9IG51bGw7XHJcblx0XHR9XHJcblx0fVxyXG59XHJcbiIsImltcG9ydCBDYW1lcmEgZnJvbSBcIi4uL2NhbWVyYS9DYW1lcmFcIjtcbmltcG9ydCB7IENvbXB1dGUgfSBmcm9tIFwiLi4vY29tcHV0ZS9Db21wdXRlXCI7XG5pbXBvcnQgeyBNYXRlcmlhbCB9IGZyb20gXCIuLi9tYXRlcmlhbC9NYXRlcmlhbFwiO1xuaW1wb3J0IHsgTWVzaCB9IGZyb20gXCIuLi9tZXNoL01lc2hcIjtcbmltcG9ydCB7IENvbXB1dGVDb21tYW5kIH0gZnJvbSBcIi4uL3JlbmRlci9Db21wdXRlQ29tbWFuZFwiO1xuaW1wb3J0IENvbnRleHQgZnJvbSBcIi4uL3JlbmRlci9Db250ZXh0XCI7XG5pbXBvcnQgRHJhd0NvbW1hbmQgZnJvbSBcIi4uL3JlbmRlci9EcmF3Q29tbWFuZFwiO1xuaW1wb3J0IExpZ2h0TWFuZ2VyIGZyb20gXCIuL0xpZ2h0TWFuZ2VyXCI7XG5pbXBvcnQgeyBDb21tYW5kU3ViVHlwZSB9IGZyb20gXCIuL1dlYkdQVUNvbnN0YW50XCI7XG5leHBvcnQgZGVmYXVsdCBjbGFzcyBSZW5kZXJRdWV1ZSB7XG5cdHB1YmxpYyBwcmU6IEFycmF5PE1lc2g+O1xuXHRwdWJsaWMgb3BhcXVlOiBBcnJheTxNZXNoPjtcblx0cHVibGljIHRyYW5zcGFyZW50OiBBcnJheTxNZXNoPjtcblx0cHVibGljIGRlYnVnUXVldWU6IEFycmF5PE1lc2g+O1xuXHRwdWJsaWMgY29tcHV0ZXM6IEFycmF5PENvbXB1dGU+O1xuXHRjb25zdHJ1Y3RvcigpIHtcblx0XHR0aGlzLnByZSA9IFtdO1xuXHRcdHRoaXMub3BhcXVlID0gW107XG5cdFx0dGhpcy50cmFuc3BhcmVudCA9IFtdO1xuXHRcdHRoaXMuY29tcHV0ZXMgPSBbXTtcblx0XHR0aGlzLmRlYnVnUXVldWUgPSBbXTtcblx0fVxuXHRzb3J0KCkge1xuXHRcdFJlbmRlclF1ZXVlLnNvcnQodGhpcy5vcGFxdWUsIDAsIHRoaXMub3BhcXVlLmxlbmd0aCwgUmVuZGVyUXVldWUuX2NvbXBhcmVGcm9tTmVhclRvRmFyKTtcblx0XHRSZW5kZXJRdWV1ZS5zb3J0KHRoaXMudHJhbnNwYXJlbnQsIDAsIHRoaXMudHJhbnNwYXJlbnQubGVuZ3RoLCBSZW5kZXJRdWV1ZS5fY29tcGFyZUZyb21GYXJUb05lYXIpO1xuXHR9XG5cdG9wYXF1ZVJlbmRlcihcblx0XHRjYW1lcmE6IENhbWVyYSxcblx0XHRjb250ZXh0OiBDb250ZXh0LFxuXHRcdHBhc3NFbmNvZGVyPzogR1BVUmVuZGVyUGFzc0VuY29kZXIsXG5cdFx0cmVwbGFjZU1hdGVyaWFsPzogTWF0ZXJpYWwsXG5cdFx0Y29tbWFuZFN1YlR5cGU/OiBDb21tYW5kU3ViVHlwZSxcblx0XHRsaWdodE1hbmdlcj86IExpZ2h0TWFuZ2VyXG5cdCkge1xuXHRcdHRoaXMub3BhcXVlLm1hcCgobWVzaCkgPT4ge1xuXHRcdFx0aWYgKCFtZXNoLnJlYWR5KSByZXR1cm47XG5cdFx0XHRtZXNoLmJlZm9yZVJlbmRlcigpO1xuXHRcdFx0UmVuZGVyUXVldWUuZXhjdXRlQ29tbWFuZChcblx0XHRcdFx0bWVzaC5nZXREcmF3Q29tbWFuZChyZXBsYWNlTWF0ZXJpYWwsIGNvbW1hbmRTdWJUeXBlLCBsaWdodE1hbmdlciksXG5cdFx0XHRcdGNvbnRleHQsXG5cdFx0XHRcdHBhc3NFbmNvZGVyLFxuXHRcdFx0XHRjYW1lcmFcblx0XHRcdCk7XG5cdFx0XHRtZXNoLmFmdGVyUmVuZGVyKCk7XG5cdFx0fSk7XG5cdH1cblx0dHJhbnNwYXJlbnRSZW5kZXIoXG5cdFx0Y2FtZXJhOiBDYW1lcmEsXG5cdFx0Y29udGV4dDogQ29udGV4dCxcblx0XHRwYXNzRW5jb2Rlcj86IEdQVVJlbmRlclBhc3NFbmNvZGVyLFxuXHRcdHJlcGxhY2VNYXRlcmlhbD86IE1hdGVyaWFsLFxuXHRcdGNvbW1hbmRTdWJUeXBlPzogQ29tbWFuZFN1YlR5cGUsXG5cdFx0bGlnaHRNYW5nZXI/OiBMaWdodE1hbmdlclxuXHQpIHtcblx0XHR0aGlzLnRyYW5zcGFyZW50Lm1hcCgobWVzaCkgPT4ge1xuXHRcdFx0aWYgKCFtZXNoLnJlYWR5KSByZXR1cm47XG5cdFx0XHRtZXNoLmJlZm9yZVJlbmRlcigpO1xuXHRcdFx0UmVuZGVyUXVldWUuZXhjdXRlQ29tbWFuZChcblx0XHRcdFx0bWVzaC5nZXREcmF3Q29tbWFuZChyZXBsYWNlTWF0ZXJpYWwsIGNvbW1hbmRTdWJUeXBlLCBsaWdodE1hbmdlciksXG5cdFx0XHRcdGNvbnRleHQsXG5cdFx0XHRcdHBhc3NFbmNvZGVyLFxuXHRcdFx0XHRjYW1lcmFcblx0XHRcdCk7XG5cdFx0XHRtZXNoLmFmdGVyUmVuZGVyKCk7XG5cdFx0fSk7XG5cdH1cblx0Y29tcHV0ZVJlbmRlcihjb250ZXh0OiBDb250ZXh0LCBwYXNzRW5jb2Rlcj86IEdQVUNvbXB1dGVQYXNzRW5jb2Rlcikge1xuXHRcdHRoaXMuY29tcHV0ZXMubWFwKChjb21wdXRlKSA9PiB7XG5cdFx0XHRSZW5kZXJRdWV1ZS5leGN1dGVDb21wdXRlKGNvbXB1dGUuZ2V0Q29tbWFuZCgpLCBjb250ZXh0LCBwYXNzRW5jb2Rlcik7XG5cdFx0fSk7XG5cdH1cblx0ZGVidWdRdWV1ZVJlbmRlcihcblx0XHRjYW1lcmE6IENhbWVyYSxcblx0XHRjb250ZXh0OiBDb250ZXh0LFxuXHRcdHBhc3NFbmNvZGVyPzogR1BVUmVuZGVyUGFzc0VuY29kZXIsXG5cdFx0cmVwbGFjZU1hdGVyaWFsPzogTWF0ZXJpYWwsXG5cdFx0Y29tbWFuZFN1YlR5cGU/OiBDb21tYW5kU3ViVHlwZVxuXHQpIHtcblx0XHR0aGlzLmRlYnVnUXVldWUubWFwKChtZXNoKSA9PiB7XG5cdFx0XHRpZiAoIW1lc2gucmVhZHkpIHJldHVybjtcblx0XHRcdG1lc2guYmVmb3JlUmVuZGVyKCk7XG5cdFx0XHRSZW5kZXJRdWV1ZS5leGN1dGVDb21tYW5kKFxuXHRcdFx0XHRtZXNoLmdldERyYXdDb21tYW5kKHJlcGxhY2VNYXRlcmlhbCwgY29tbWFuZFN1YlR5cGUpLFxuXHRcdFx0XHRjb250ZXh0LFxuXHRcdFx0XHRwYXNzRW5jb2Rlcixcblx0XHRcdFx0Y2FtZXJhXG5cdFx0XHQpO1xuXHRcdFx0bWVzaC5hZnRlclJlbmRlcigpO1xuXHRcdH0pO1xuXHR9XG5cdHByZVJlbmRlcihjYW1lcmE6IENhbWVyYSwgY29udGV4dDogQ29udGV4dCwgcGFzc0VuY29kZXI/OiBHUFVSZW5kZXJQYXNzRW5jb2RlciwgcmVwbGFjZU1hdGVyaWFsPzogTWF0ZXJpYWwpIHtcblx0XHR0aGlzLnByZS5tYXAoKG1lc2gpID0+IHtcblx0XHRcdGlmICghbWVzaC5yZWFkeSkgcmV0dXJuO1xuXHRcdFx0bWVzaC5iZWZvcmVSZW5kZXIoKTtcblx0XHRcdFJlbmRlclF1ZXVlLmV4Y3V0ZUNvbW1hbmQobWVzaC5nZXREcmF3Q29tbWFuZCgpLCBjb250ZXh0LCBwYXNzRW5jb2RlciwgY2FtZXJhKTtcblx0XHRcdG1lc2guYWZ0ZXJSZW5kZXIoKTtcblx0XHR9KTtcblx0fVxuXHRzdGF0aWMgZXhjdXRlQ29tbWFuZChjb21tYW5kOiBEcmF3Q29tbWFuZCwgY29udGV4dD86IENvbnRleHQsIHBhc3NFbmNvZGVyPzogR1BVUmVuZGVyUGFzc0VuY29kZXIsIGNhbWVyYT86IENhbWVyYSkge1xuXHRcdGNvbW1hbmQucmVuZGVyKHtcblx0XHRcdGRldmljZTogY29udGV4dC5kZXZpY2UsXG5cdFx0XHRwYXNzRW5jb2Rlcixcblx0XHRcdGNhbWVyYSxcblx0XHRcdHZpZXdQb3J0OiBjb250ZXh0Py52aWV3UG9ydCxcblx0XHRcdHNjaXNzb3JUZXN0OiBjb250ZXh0Py5zY2lzc29yVGVzdFxuXHRcdH0pO1xuXHR9XG5cdHN0YXRpYyBleGN1dGVDb21wdXRlKGNvbW1hbmQ6IENvbXB1dGVDb21tYW5kLCBjb250ZXh0PzogQ29udGV4dCwgcGFzc0VuY29kZXI/OiBHUFVDb21wdXRlUGFzc0VuY29kZXIpIHtcblx0XHRjb21tYW5kLnJlbmRlcih7IGRldmljZTogY29udGV4dC5kZXZpY2UsIHBhc3NFbmNvZGVyIH0pO1xuXHR9XG5cdHJlc2V0KCkge1xuXHRcdHRoaXMucHJlID0gW107XG5cdFx0dGhpcy5vcGFxdWUgPSBbXTtcblx0XHR0aGlzLnRyYW5zcGFyZW50ID0gW107XG5cdFx0dGhpcy5jb21wdXRlcyA9IFtdO1xuXHRcdHRoaXMuZGVidWdRdWV1ZSA9IFtdO1xuXHR9XG5cdHN0YXRpYyBfY29tcGFyZUZyb21OZWFyVG9GYXIoYTogTWVzaCwgYjogTWVzaCk6IG51bWJlciB7XG5cdFx0cmV0dXJuIGEucHJpb3JpdHkgLSBiLnByaW9yaXR5IHx8IGEuZGlzdGFuY2VUb0NhbWVyYSAtIGIuZGlzdGFuY2VUb0NhbWVyYTtcblx0fVxuXG5cdHN0YXRpYyBfY29tcGFyZUZyb21GYXJUb05lYXIoYTogTWVzaCwgYjogTWVzaCk6IG51bWJlciB7XG5cdFx0cmV0dXJuIGEucHJpb3JpdHkgLSBiLnByaW9yaXR5IHx8IGIuZGlzdGFuY2VUb0NhbWVyYSAtIGEuZGlzdGFuY2VUb0NhbWVyYTtcblx0fVxuXHQvLyBhY2NvcmRpbmcgdG8gY2FtZXJhIGRpc3RhbmNlXG5cdHN0YXRpYyBzb3J0PFQ+KGluc2F0bmNlOiBUW10sIGZyb206IG51bWJlciwgdG86IG51bWJlciwgY29tcGFyZUZ1bmM6IEZ1bmN0aW9uKTogdm9pZCB7XG5cdFx0UmVuZGVyUXVldWUuX3F1aWNrU29ydChpbnNhdG5jZSwgZnJvbSwgdG8sIGNvbXBhcmVGdW5jKTtcblx0fVxuXHQvLyBmcm9tIGh0dHBzOi8vZ2l0aHViLmNvbS9vYXNpcy1lbmdpbmUvZW5naW5lL2Jsb2IvbWFpbi9wYWNrYWdlcy9jb3JlL3NyYy9SZW5kZXJQaXBlbGluZS9SZW5kZXJRdWV1ZS50c1xuXHRwcml2YXRlIHN0YXRpYyBfcXVpY2tTb3J0PFQ+KGE6IFRbXSwgZnJvbTogbnVtYmVyLCB0bzogbnVtYmVyLCBjb21wYXJlRnVuYzogRnVuY3Rpb24pOiB2b2lkIHtcblx0XHR3aGlsZSAodHJ1ZSkge1xuXHRcdFx0Ly8gSW5zZXJ0aW9uIHNvcnQgaXMgZmFzdGVyIGZvciBzaG9ydCBhcnJheXMuXG5cdFx0XHRpZiAodG8gLSBmcm9tIDw9IDEwKSB7XG5cdFx0XHRcdFJlbmRlclF1ZXVlLl9pbnNlcnRpb25Tb3J0KGEsIGZyb20sIHRvLCBjb21wYXJlRnVuYyk7XG5cdFx0XHRcdHJldHVybjtcblx0XHRcdH1cblx0XHRcdGNvbnN0IHRoaXJkX2luZGV4ID0gKGZyb20gKyB0bykgPj4gMTtcblx0XHRcdC8vIEZpbmQgYSBwaXZvdCBhcyB0aGUgbWVkaWFuIG9mIGZpcnN0LCBsYXN0IGFuZCBtaWRkbGUgZWxlbWVudC5cblx0XHRcdGxldCB2MCA9IGFbZnJvbV07XG5cdFx0XHRsZXQgdjEgPSBhW3RvIC0gMV07XG5cdFx0XHRsZXQgdjIgPSBhW3RoaXJkX2luZGV4XTtcblx0XHRcdGNvbnN0IGMwMSA9IGNvbXBhcmVGdW5jKHYwLCB2MSk7XG5cdFx0XHRpZiAoYzAxID4gMCkge1xuXHRcdFx0XHQvLyB2MSA8IHYwLCBzbyBzd2FwIHRoZW0uXG5cdFx0XHRcdGNvbnN0IHRtcCA9IHYwO1xuXHRcdFx0XHR2MCA9IHYxO1xuXHRcdFx0XHR2MSA9IHRtcDtcblx0XHRcdH0gLy8gdjAgPD0gdjEuXG5cdFx0XHRjb25zdCBjMDIgPSBjb21wYXJlRnVuYyh2MCwgdjIpO1xuXHRcdFx0aWYgKGMwMiA+PSAwKSB7XG5cdFx0XHRcdC8vIHYyIDw9IHYwIDw9IHYxLlxuXHRcdFx0XHRjb25zdCB0bXAgPSB2MDtcblx0XHRcdFx0djAgPSB2Mjtcblx0XHRcdFx0djIgPSB2MTtcblx0XHRcdFx0djEgPSB0bXA7XG5cdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHQvLyB2MCA8PSB2MSAmJiB2MCA8IHYyXG5cdFx0XHRcdGNvbnN0IGMxMiA9IGNvbXBhcmVGdW5jKHYxLCB2Mik7XG5cdFx0XHRcdGlmIChjMTIgPiAwKSB7XG5cdFx0XHRcdFx0Ly8gdjAgPD0gdjIgPCB2MVxuXHRcdFx0XHRcdGNvbnN0IHRtcCA9IHYxO1xuXHRcdFx0XHRcdHYxID0gdjI7XG5cdFx0XHRcdFx0djIgPSB0bXA7XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdC8vIHYwIDw9IHYxIDw9IHYyXG5cdFx0XHRhW2Zyb21dID0gdjA7XG5cdFx0XHRhW3RvIC0gMV0gPSB2Mjtcblx0XHRcdGNvbnN0IHBpdm90ID0gdjE7XG5cdFx0XHRsZXQgbG93X2VuZCA9IGZyb20gKyAxOyAvLyBVcHBlciBib3VuZCBvZiBlbGVtZW50cyBsb3dlciB0aGFuIHBpdm90LlxuXHRcdFx0bGV0IGhpZ2hfc3RhcnQgPSB0byAtIDE7IC8vIExvd2VyIGJvdW5kIG9mIGVsZW1lbnRzIGdyZWF0ZXIgdGhhbiBwaXZvdC5cblx0XHRcdGFbdGhpcmRfaW5kZXhdID0gYVtsb3dfZW5kXTtcblx0XHRcdGFbbG93X2VuZF0gPSBwaXZvdDtcblxuXHRcdFx0Ly8gRnJvbSBsb3dfZW5kIHRvIGkgYXJlIGVsZW1lbnRzIGVxdWFsIHRvIHBpdm90LlxuXHRcdFx0Ly8gRnJvbSBpIHRvIGhpZ2hfc3RhcnQgYXJlIGVsZW1lbnRzIHRoYXQgaGF2ZW4ndCBiZWVuIGNvbXBhcmVkIHlldC5cblx0XHRcdHBhcnRpdGlvbjogZm9yIChsZXQgaSA9IGxvd19lbmQgKyAxOyBpIDwgaGlnaF9zdGFydDsgaSsrKSB7XG5cdFx0XHRcdGxldCBlbGVtZW50ID0gYVtpXTtcblx0XHRcdFx0bGV0IG9yZGVyID0gY29tcGFyZUZ1bmMoZWxlbWVudCwgcGl2b3QpO1xuXHRcdFx0XHRpZiAob3JkZXIgPCAwKSB7XG5cdFx0XHRcdFx0YVtpXSA9IGFbbG93X2VuZF07XG5cdFx0XHRcdFx0YVtsb3dfZW5kXSA9IGVsZW1lbnQ7XG5cdFx0XHRcdFx0bG93X2VuZCsrO1xuXHRcdFx0XHR9IGVsc2UgaWYgKG9yZGVyID4gMCkge1xuXHRcdFx0XHRcdGRvIHtcblx0XHRcdFx0XHRcdGhpZ2hfc3RhcnQtLTtcblx0XHRcdFx0XHRcdGlmIChoaWdoX3N0YXJ0ID09IGkpIGJyZWFrIHBhcnRpdGlvbjtcblx0XHRcdFx0XHRcdGNvbnN0IHRvcF9lbGVtID0gYVtoaWdoX3N0YXJ0XTtcblx0XHRcdFx0XHRcdG9yZGVyID0gY29tcGFyZUZ1bmModG9wX2VsZW0sIHBpdm90KTtcblx0XHRcdFx0XHR9IHdoaWxlIChvcmRlciA+IDApO1xuXHRcdFx0XHRcdGFbaV0gPSBhW2hpZ2hfc3RhcnRdO1xuXHRcdFx0XHRcdGFbaGlnaF9zdGFydF0gPSBlbGVtZW50O1xuXHRcdFx0XHRcdGlmIChvcmRlciA8IDApIHtcblx0XHRcdFx0XHRcdGVsZW1lbnQgPSBhW2ldO1xuXHRcdFx0XHRcdFx0YVtpXSA9IGFbbG93X2VuZF07XG5cdFx0XHRcdFx0XHRhW2xvd19lbmRdID0gZWxlbWVudDtcblx0XHRcdFx0XHRcdGxvd19lbmQrKztcblx0XHRcdFx0XHR9XG5cdFx0XHRcdH1cblx0XHRcdH1cblx0XHRcdGlmICh0byAtIGhpZ2hfc3RhcnQgPCBsb3dfZW5kIC0gZnJvbSkge1xuXHRcdFx0XHR0aGlzLl9xdWlja1NvcnQoYSwgaGlnaF9zdGFydCwgdG8sIGNvbXBhcmVGdW5jKTtcblx0XHRcdFx0dG8gPSBsb3dfZW5kO1xuXHRcdFx0fSBlbHNlIHtcblx0XHRcdFx0dGhpcy5fcXVpY2tTb3J0KGEsIGZyb20sIGxvd19lbmQsIGNvbXBhcmVGdW5jKTtcblx0XHRcdFx0ZnJvbSA9IGhpZ2hfc3RhcnQ7XG5cdFx0XHR9XG5cdFx0fVxuXHR9XG5cdHByaXZhdGUgc3RhdGljIF9pbnNlcnRpb25Tb3J0PFQ+KGE6IFRbXSwgZnJvbTogbnVtYmVyLCB0bzogbnVtYmVyLCBjb21wYXJlRnVuYzogRnVuY3Rpb24pOiB2b2lkIHtcblx0XHRmb3IgKGxldCBpID0gZnJvbSArIDE7IGkgPCB0bzsgaSsrKSB7XG5cdFx0XHRsZXQgajtcblx0XHRcdGNvbnN0IGVsZW1lbnQgPSBhW2ldO1xuXHRcdFx0Zm9yIChqID0gaSAtIDE7IGogPj0gZnJvbTsgai0tKSB7XG5cdFx0XHRcdGNvbnN0IHRtcCA9IGFbal07XG5cdFx0XHRcdGNvbnN0IG9yZGVyID0gY29tcGFyZUZ1bmModG1wLCBlbGVtZW50KTtcblx0XHRcdFx0aWYgKG9yZGVyID4gMCkge1xuXHRcdFx0XHRcdGFbaiArIDFdID0gdG1wO1xuXHRcdFx0XHR9IGVsc2Uge1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHR9XG5cdFx0XHR9XG5cdFx0XHRhW2ogKyAxXSA9IGVsZW1lbnQ7XG5cdFx0fVxuXHR9XG59XG4iLCJpbXBvcnQgeyBTY2VuZSB9IGZyb20gXCIuLi9TY2VuZVwiO1xyXG5pbXBvcnQgQ2FtZXJhIGZyb20gXCIuLi9jYW1lcmEvQ2FtZXJhXCI7XHJcbmltcG9ydCBDb2xvciBmcm9tIFwiLi4vbWF0aC9Db2xvclwiO1xyXG5pbXBvcnQgUGFzcyBmcm9tIFwiLi4vcGFzcy9QYXNzXCI7XHJcbmltcG9ydCBDb250ZXh0IGZyb20gXCIuLi9yZW5kZXIvQ29udGV4dFwiO1xyXG5pbXBvcnQgVGV4dHVyZSBmcm9tIFwiLi4vcmVuZGVyL1RleHR1cmVcIjtcclxuaW1wb3J0IGNvbWJpbmUgZnJvbSBcIi4uL3V0aWxzL2NvbWJpbmVcIjtcclxuaW1wb3J0IEN1bGxpbmdWb2x1bWUgZnJvbSBcIi4vQ3VsbGluZ1ZvbHVtZVwiO1xyXG5pbXBvcnQgTGlnaHRNYW5nZXIgZnJvbSBcIi4vTGlnaHRNYW5nZXJcIjtcclxuaW1wb3J0IFJlbmRlclF1ZXVlIGZyb20gXCIuL1JlbmRlclF1ZXVlXCI7XHJcblxyXG5pbnRlcmZhY2UgRnJhbWVTdGF0ZU9wdGlvbnMge1xyXG5cdGJhY2tncm91bmQ/OiBCYWNrZ3JvdW5kO1xyXG59XHJcblxyXG5leHBvcnQgaW50ZXJmYWNlIEJhY2tncm91bmQge1xyXG5cdHZhbHVlOiBDb2xvciB8IFRleHR1cmU7XHJcblx0b3BhY2l0eTogbnVtYmVyO1xyXG59XHJcblxyXG5leHBvcnQgY2xhc3MgRnJhbWVTdGF0ZSB7XHJcblx0cHVibGljIGJhY2tncm91bmQ6IEJhY2tncm91bmQ7XHJcblx0cHVibGljIHBhc3M6IFBhc3M7XHJcblx0cHVibGljIHJlbmRlclF1ZXVlOiBSZW5kZXJRdWV1ZTtcclxuXHRwdWJsaWMgZHJhd0NhbGxudW1zOiBudW1iZXI7XHJcblx0cHVibGljIGdlb21ldHJ5TWVtb3J5OiBudW1iZXI7XHJcblx0cHVibGljIHRleHR1cmVNZW1vcnk6IG51bWJlcjtcclxuXHRwdWJsaWMgZnJhbWVOdW1iZXI6IG51bWJlcjtcclxuXHRwdWJsaWMgY3VsbGluZ1ZvbHVtZTogQ3VsbGluZ1ZvbHVtZTtcclxuXHRwdWJsaWMgZGVmaW5lc0RpcnR5OiBib29sZWFuO1xyXG5cdHByaXZhdGUgX2RlZmluZXM6IG9iamVjdDtcclxuXHRjb25zdHJ1Y3RvcihwdWJsaWMgY29udGV4dDogQ29udGV4dCwgcHVibGljIGxpZ2h0TWFuZ2VyPzogTGlnaHRNYW5nZXIsIG9wdGlvbnM6IEZyYW1lU3RhdGVPcHRpb25zID0ge30pIHtcclxuXHRcdHRoaXMuYmFja2dyb3VuZCA9IG9wdGlvbnMuYmFja2dyb3VuZDtcclxuXHRcdHRoaXMucmVuZGVyUXVldWUgPSBuZXcgUmVuZGVyUXVldWUoKTtcclxuXHRcdHRoaXMuZ2VvbWV0cnlNZW1vcnkgPSAwO1xyXG5cdFx0dGhpcy50ZXh0dXJlTWVtb3J5ID0gMDtcclxuXHRcdHRoaXMuZnJhbWVOdW1iZXIgPSAwO1xyXG5cdFx0dGhpcy5fZGVmaW5lcyA9IHt9O1xyXG5cdFx0dGhpcy5kZWZpbmVzRGlydHkgPSB0cnVlO1xyXG5cdH1cclxuXHRnZXQgZGVmaW5lcygpIHtcclxuXHRcdHJldHVybiB0aGlzLl9kZWZpbmVzO1xyXG5cdH1cclxuXHRzZXQgZGVmaW5lcyh2YWx1ZSkge1xyXG5cdFx0dGhpcy5kZWZpbmVzRGlydHkgPSB0cnVlO1xyXG5cdFx0dGhpcy5fZGVmaW5lcyA9IGNvbWJpbmUodmFsdWUsIHRoaXMuX2RlZmluZXMsIGZhbHNlKTtcclxuXHR9XHJcblx0dXBkYXRlKGNhbWVyYTogQ2FtZXJhLCBvcHRpb25zOiBGcmFtZVN0YXRlT3B0aW9ucyA9IHt9KSB7XHJcblx0XHR0aGlzLmJhY2tncm91bmQgPSBvcHRpb25zLmJhY2tncm91bmQ7XHJcblxyXG5cdFx0dGhpcy5yZW5kZXJRdWV1ZS5yZXNldCgpO1xyXG5cdFx0dGhpcz8ubGlnaHRNYW5nZXI/LnVwZGF0ZT8uKHRoaXMsIGNhbWVyYSk7XHJcblx0XHR0aGlzLmN1bGxpbmdWb2x1bWUgPSBjYW1lcmEuZ2V0Q3VsbGluZ1ZvbHVtZSgpO1xyXG5cdFx0dGhpcy5mcmFtZU51bWJlciArPSAxO1xyXG5cdH1cclxuXHJcblx0cmVzZXRDdWxsaW5nVm9sdW1lKGNhbWVyYTogQ2FtZXJhKSB7XHJcblx0XHR0aGlzLmN1bGxpbmdWb2x1bWUgPSBjYW1lcmEuZ2V0Q3VsbGluZ1ZvbHVtZSgpO1xyXG5cdH1cclxuXHJcblx0c3RhdGljIGdldEZyYW1lU3RhdGVPcHRpb25zQnlTY2VuZShzY2VuZUluc3RhbmNlOiBTY2VuZSkge1xyXG5cdFx0cmV0dXJuIHtcclxuXHRcdFx0YmFja2dyb3VuZDogc2NlbmVJbnN0YW5jZS5iYWNrZ3JvdW5kXHJcblx0XHR9O1xyXG5cdH1cclxufVxyXG4iLCJpbXBvcnQgeyBMaWdodFR5cGUgfSBmcm9tIFwiLi4vY29yZS9XZWJHUFVUeXBlc1wiO1xyXG5pbXBvcnQgVmVjdG9yMyBmcm9tIFwiLi4vbWF0aC9WZWN0b3IzXCI7XHJcbmltcG9ydCBWZWN0b3I0IGZyb20gXCIuLi9tYXRoL1ZlY3RvcjRcIjtcclxuaW1wb3J0IHsgTGlnaHQgfSBmcm9tIFwiLi9MaWdodFwiO1xyXG5cclxuZXhwb3J0IGNsYXNzIEFtYmllbnRMaWdodCBleHRlbmRzIExpZ2h0IHtcclxuXHRwcml2YXRlIF9jb2xvckFuZEludGVuc2l0eTogVmVjdG9yNDtcclxuXHRjb25zdHJ1Y3Rvcihjb2xvcjogVmVjdG9yMywgaW50ZW5zaXR5OiBudW1iZXIpIHtcclxuXHRcdHN1cGVyKGNvbG9yLCBpbnRlbnNpdHkpO1xyXG5cdFx0dGhpcy5saWdodFR5cGUgPSBMaWdodFR5cGUuQW1iaWVudExpZ2h0O1xyXG5cdFx0dGhpcy5fY29sb3JBbmRJbnRlbnNpdHkgPSBuZXcgVmVjdG9yNChjb2xvci54LCBjb2xvci55LCBjb2xvci56LCBpbnRlbnNpdHkpO1xyXG5cdH1cclxuXHRnZXQgQ29sb3JBbmRJbnRlbnNpdHkoKSB7XHJcblx0XHR0aGlzLl9jb2xvckFuZEludGVuc2l0eS5zZXQodGhpcy5jb2xvci54LCB0aGlzLmNvbG9yLnksIHRoaXMuY29sb3IueiwgdGhpcy5pbnRlbnNpdHkpO1xyXG5cdFx0cmV0dXJuIHRoaXMuX2NvbG9yQW5kSW50ZW5zaXR5O1xyXG5cdH1cclxufVxyXG4vLyBsaWdodC5jb2xvciApLm11bHRpcGx5U2NhbGFyKCBsaWdodC5pbnRlbnNpdHkgKiBzY2FsZUZhY3RvciApO1xyXG4iLCJpbXBvcnQgQ2FtZXJhIGZyb20gXCIuLi9jYW1lcmEvQ2FtZXJhXCI7XG5pbXBvcnQgeyBMaWdodE1hbmdlck9wdGlvbnMsIExpZ2h0VHlwZSwgVW5pZm9ybUVudW0gfSBmcm9tIFwiLi4vY29yZS9XZWJHUFVUeXBlc1wiO1xuaW1wb3J0IHsgQW1iaWVudExpZ2h0IH0gZnJvbSBcIi4uL2xpZ2h0L0FtYmllbnRMaWdodFwiO1xuaW1wb3J0IHsgRGlyZWN0aW9uYWxMaWdodCB9IGZyb20gXCIuLi9saWdodC9EaXJlY3Rpb25hbExpZ2h0XCI7XG5pbXBvcnQgeyBMaWdodCB9IGZyb20gXCIuLi9saWdodC9MaWdodFwiO1xuaW1wb3J0IHsgUG9pbnRMaWdodCB9IGZyb20gXCIuLi9saWdodC9Qb2ludExpZ2h0XCI7XG5pbXBvcnQgeyBTcG90TGlnaHQgfSBmcm9tIFwiLi4vbGlnaHQvU3BvdExpZ2h0XCI7XG5pbXBvcnQgVmVjdG9yMyBmcm9tIFwiLi4vbWF0aC9WZWN0b3IzXCI7XG5pbXBvcnQgU2FtcGxlciBmcm9tIFwiLi4vcmVuZGVyL1NhbXBsZXJcIjtcbmltcG9ydCBTaGFkZXJEYXRhIGZyb20gXCIuLi9yZW5kZXIvU2hhZGVyRGF0YVwiO1xuaW1wb3J0IFRleHR1cmUgZnJvbSBcIi4uL3JlbmRlci9UZXh0dXJlXCI7XG5pbXBvcnQgVW5pZm9ybUJ1ZmZlciBmcm9tIFwiLi4vcmVuZGVyL1VuaWZvcm1CdWZmZXJcIjtcbmltcG9ydCB7IEZyYW1lU3RhdGUgfSBmcm9tIFwiLi9GcmFtZVN0YXRlXCI7XG5pbXBvcnQge1xuXHRUZXh0dXJlVXNhZ2UsXG5cdEJ1ZmZlclVzYWdlLFxuXHRUZXh0dXJlRm9ybWF0LFxuXHRDb21wYXJlRnVuY3Rpb24sXG5cdFNhbXBsZXJCaW5kaW5nVHlwZSxcblx0VGV4dHVyZVNhbXBsZVR5cGUsXG5cdFRleHR1cmVWaWV3RGltZW5zaW9uLFxuXHRCdWZmZXJCaW5kaW5nVHlwZVxufSBmcm9tIFwiLi9XZWJHUFVDb25zdGFudFwiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBMaWdodE1hbmdlciB7XG5cdGxpZ2h0VW5pZm9ybUJ1ZmZlcjogVW5pZm9ybUJ1ZmZlcjtcblx0c2hhZG93VW5pZm9ybUJ1ZmZlcjogVW5pZm9ybUJ1ZmZlcjtcblx0cG9pbnRMaWdodHM6IFBvaW50TGlnaHRbXTtcblxuXHRzcG90TGlnaHRzOiBTcG90TGlnaHRbXTtcblxuXHRkaXJlY3RMaWdodHM6IERpcmVjdGlvbmFsTGlnaHRbXTtcblxuXHRhbWJpZW50TGlnaHQ6IEFtYmllbnRMaWdodDtcblxuXHRsaWdodFNoYWRlckRhdGE6IFNoYWRlckRhdGE7XG5cblx0bGlnaHRDb3VudERpcnR5OiBib29sZWFuO1xuXG5cdHByaXZhdGUgb3BlblNoYWRvdzogYm9vbGVhbjtcblx0c3BvdExpZ2h0U2hhZG93TWFwVGV4dHVyZUFycmF5OiBUZXh0dXJlO1xuXHRwb2ludExpZ2h0U2hhZG93TWFwVGV4dHVyZUFycmF5OiBUZXh0dXJlO1xuXHRkaXJlY3RMaWdodFNoYWRvd01hcFRleHR1cmVBcnJheTogVGV4dHVyZTtcblx0X3Rlc3RUZXh0dXJlOiBUZXh0dXJlO1xuXG5cdGNvbnN0cnVjdG9yKG9wdGlvbnM6IExpZ2h0TWFuZ2VyT3B0aW9ucykge1xuXHRcdHRoaXMuc3BvdExpZ2h0cyA9IFtdO1xuXHRcdHRoaXMucG9pbnRMaWdodHMgPSBbXTtcblx0XHR0aGlzLmRpcmVjdExpZ2h0cyA9IFtdO1xuXHRcdHRoaXMuYW1iaWVudExpZ2h0ID0gbmV3IEFtYmllbnRMaWdodChuZXcgVmVjdG9yMygxLjAsIDEuMCwgMS4wKSwgMC4yKTtcblx0XHR0aGlzLmxpZ2h0Q291bnREaXJ0eSA9IHRydWU7XG5cdFx0dGhpcy5vcGVuU2hhZG93ID0gb3B0aW9ucy5vcGVuU2hhZG93O1xuXHR9XG5cdHVwZGF0ZShmcmFtZVN0YXRlOiBGcmFtZVN0YXRlLCBjYW1lcmE6IENhbWVyYSkge1xuXHRcdHRoaXMuY2hlY2tMaWdodFNoYWRvd1N0YXRlKCk7XG5cdFx0dGhpcy51cGRhdGVMaWdodChjYW1lcmEpO1xuXHR9XG5cdGFkZChsaWdodDogTGlnaHQpIHtcblx0XHR0aGlzLmxpZ2h0Q291bnREaXJ0eSA9IHRydWU7XG5cdFx0aWYgKGxpZ2h0LmxpZ2h0VHlwZSA9PSBMaWdodFR5cGUuQW1iaWVudExpZ2h0KSB7XG5cdFx0XHR0aGlzLmFtYmllbnRMaWdodCA9IDxBbWJpZW50TGlnaHQ+bGlnaHQ7XG5cdFx0fSBlbHNlIGlmIChsaWdodC5saWdodFR5cGUgPT0gTGlnaHRUeXBlLkRpcmVjdGlvbmFsTGlnaHQpIHtcblx0XHRcdHRoaXMuZGlyZWN0TGlnaHRzLnB1c2goPERpcmVjdGlvbmFsTGlnaHQ+bGlnaHQpO1xuXHRcdH0gZWxzZSBpZiAobGlnaHQubGlnaHRUeXBlID09IExpZ2h0VHlwZS5Qb2ludExpZ2h0KSB7XG5cdFx0XHR0aGlzLnBvaW50TGlnaHRzLnB1c2goPFBvaW50TGlnaHQ+bGlnaHQpO1xuXHRcdH0gZWxzZSBpZiAobGlnaHQubGlnaHRUeXBlID09IExpZ2h0VHlwZS5TcG90TGlnaHQpIHtcblx0XHRcdHRoaXMuc3BvdExpZ2h0cy5wdXNoKDxTcG90TGlnaHQ+bGlnaHQpO1xuXHRcdH1cblx0fVxuXHRyZW1vdmUobGlnaHQ6IExpZ2h0KSB7XG5cdFx0dGhpcy5saWdodENvdW50RGlydHkgPSB0cnVlO1xuXHRcdGlmIChsaWdodC5saWdodFR5cGUgPT0gTGlnaHRUeXBlLkFtYmllbnRMaWdodCkge1xuXHRcdFx0dGhpcy5hbWJpZW50TGlnaHQgPSBuZXcgQW1iaWVudExpZ2h0KG5ldyBWZWN0b3IzKDEuMCwgMS4wLCAxLjApLCAxLjApO1xuXHRcdH0gZWxzZSBpZiAobGlnaHQubGlnaHRUeXBlID09IExpZ2h0VHlwZS5EaXJlY3Rpb25hbExpZ2h0KSB7XG5cdFx0XHR0aGlzLmRpcmVjdExpZ2h0cy5zcGxpY2UodGhpcy5kaXJlY3RMaWdodHMuaW5kZXhPZig8RGlyZWN0aW9uYWxMaWdodD5saWdodCksIDEpO1xuXHRcdH0gZWxzZSBpZiAobGlnaHQubGlnaHRUeXBlID09IExpZ2h0VHlwZS5Qb2ludExpZ2h0KSB7XG5cdFx0XHR0aGlzLnBvaW50TGlnaHRzLnNwbGljZSh0aGlzLnBvaW50TGlnaHRzLmluZGV4T2YoPFBvaW50TGlnaHQ+bGlnaHQpLCAxKTtcblx0XHR9IGVsc2UgaWYgKGxpZ2h0LmxpZ2h0VHlwZSA9PSBMaWdodFR5cGUuU3BvdExpZ2h0KSB7XG5cdFx0XHR0aGlzLnNwb3RMaWdodHMuc3BsaWNlKHRoaXMuc3BvdExpZ2h0cy5pbmRleE9mKDxTcG90TGlnaHQ+bGlnaHQpLCAxKTtcblx0XHR9XG5cdH1cblx0Y2hlY2tMaWdodFNoYWRvd1N0YXRlKCkge1xuXHRcdGNvbnN0IGxpZ2h0cyA9IHRoaXMuZ2V0QWxsTGlnaHRzKCk7XG5cdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCBsaWdodHMubGVuZ3RoOyBpKyspIHtcblx0XHRcdGNvbnN0IGxpZ2h0ID0gbGlnaHRzW2ldO1xuXHRcdFx0aWYgKGxpZ2h0LnNoYWRvd0RpcnR5KSB7XG5cdFx0XHRcdGxpZ2h0LnNoYWRvd0RpcnR5ID0gZmFsc2U7XG5cdFx0XHRcdHRoaXMubGlnaHRDb3VudERpcnR5ID0gdHJ1ZTtcblx0XHRcdH1cblx0XHR9XG5cdH1cblxuXHR1cGRhdGVMaWdodFNoYWRvdygpIHtcblx0XHRpZiAodGhpcy5zcG90TGlnaHRTaGFkb3dNYXBUZXh0dXJlQXJyYXkpIHRoaXMuc3BvdExpZ2h0U2hhZG93TWFwVGV4dHVyZUFycmF5LmRpcnR5ID0gdHJ1ZTtcblxuXHRcdGlmICh0aGlzLnBvaW50TGlnaHRTaGFkb3dNYXBUZXh0dXJlQXJyYXkpIHRoaXMucG9pbnRMaWdodFNoYWRvd01hcFRleHR1cmVBcnJheS5kaXJ0eSA9IHRydWU7XG5cblx0XHRpZiAodGhpcy5kaXJlY3RMaWdodFNoYWRvd01hcFRleHR1cmVBcnJheSkgdGhpcy5kaXJlY3RMaWdodFNoYWRvd01hcFRleHR1cmVBcnJheS5kaXJ0eSA9IHRydWU7XG5cdH1cblxuXHRwcml2YXRlIHVwZGF0ZUxpZ2h0KGNhbWVyYTogQ2FtZXJhKSB7XG5cdFx0aWYgKHRoaXMubGlnaHRDb3VudERpcnR5KSB7XG5cdFx0XHR0aGlzLmxpZ2h0Q291bnREaXJ0eSA9IGZhbHNlO1xuXHRcdFx0aWYgKHRoaXMubGlnaHRTaGFkZXJEYXRhKSB0aGlzLmxpZ2h0U2hhZGVyRGF0YS5kZXN0cm95KCk7XG5cdFx0XHR0aGlzLmNyZWF0ZUxpZ2h0U2hhZGVyRGF0YSgpO1xuXHRcdH1cblx0fVxuXHRwcml2YXRlIGNyZWF0ZUxpZ2h0U2hhZGVyRGF0YSgpIHtcblx0XHR0aGlzLmxpZ2h0U2hhZGVyRGF0YSA9IG5ldyBTaGFkZXJEYXRhKFwibGlnaHRcIiwgMCwgMiwgMik7XG5cdFx0dGhpcy5saWdodFVuaWZvcm1CdWZmZXIgPSBuZXcgVW5pZm9ybUJ1ZmZlcih7XG5cdFx0XHRsYWJlbDogXCJsaWdodFwiLFxuXHRcdFx0dHlwZTogQnVmZmVyQmluZGluZ1R5cGUuUmVhZE9ubHlTdG9yYWdlLFxuXHRcdFx0dXNhZ2U6IEJ1ZmZlclVzYWdlLlN0b3JhZ2UgfCBCdWZmZXJVc2FnZS5Db3B5RHN0XG5cdFx0fSk7XG5cblx0XHR0aGlzLmxpZ2h0U2hhZGVyRGF0YS5zZXREZWZpbmUoXCJzcG90TGlnaHRzQ291bnRcIiwgdGhpcy5zcG90TGlnaHRzLmxlbmd0aCk7XG5cdFx0dGhpcy5saWdodFNoYWRlckRhdGEuc2V0RGVmaW5lKFwicG9pbnRMaWdodHNDb3VudFwiLCB0aGlzLnBvaW50TGlnaHRzLmxlbmd0aCk7XG5cdFx0dGhpcy5saWdodFNoYWRlckRhdGEuc2V0RGVmaW5lKFwiZGlydGVjdExpZ2h0c0NvdW50XCIsIHRoaXMuZGlyZWN0TGlnaHRzLmxlbmd0aCk7XG5cdFx0dGhpcy5saWdodFNoYWRlckRhdGEuc2V0RGVmaW5lKFwiYW1iaWVudExpZ2h0Q291bnRcIiwgMSk7XG5cdFx0aWYgKHRoaXMuYW1iaWVudExpZ2h0KVxuXHRcdFx0dGhpcy5saWdodFVuaWZvcm1CdWZmZXIuc2V0VW5pZm9ybShcblx0XHRcdFx0XCJhbWJpZW50TGlnaHRcIixcblx0XHRcdFx0KCkgPT4ge1xuXHRcdFx0XHRcdHJldHVybiB0aGlzLmFtYmllbnRMaWdodC5Db2xvckFuZEludGVuc2l0eTtcblx0XHRcdFx0fSxcblx0XHRcdFx0VW5pZm9ybUVudW0uRmxvYXRWZWM0XG5cdFx0XHQpO1xuXHRcdGlmICh0aGlzLnNwb3RMaWdodHMubGVuZ3RoKSB7XG5cdFx0XHQvLyDliJ3lp4vljJbogZrlhYnnga9cblx0XHRcdHRoaXMubGlnaHRVbmlmb3JtQnVmZmVyLnNldFVuaWZvcm0oXG5cdFx0XHRcdFwic3BvdExpZ2h0c1wiLFxuXHRcdFx0XHQoKSA9PiB7XG5cdFx0XHRcdFx0cmV0dXJuIHRoaXMuc3BvdExpZ2h0cztcblx0XHRcdFx0fSxcblx0XHRcdFx0VW5pZm9ybUVudW0uU3BvdExpZ2h0cyxcblx0XHRcdFx0dGhpcy5zcG90TGlnaHRzLmxlbmd0aFxuXHRcdFx0KTtcblx0XHR9XG5cdFx0aWYgKHRoaXMucG9pbnRMaWdodHMubGVuZ3RoKSB7XG5cdFx0XHQvLyDngrnlhYnmupBcblx0XHRcdHRoaXMubGlnaHRVbmlmb3JtQnVmZmVyLnNldFVuaWZvcm0oXG5cdFx0XHRcdFwicG9pbnRMaWdodHNcIixcblx0XHRcdFx0KCkgPT4ge1xuXHRcdFx0XHRcdHJldHVybiB0aGlzLnBvaW50TGlnaHRzO1xuXHRcdFx0XHR9LFxuXHRcdFx0XHRVbmlmb3JtRW51bS5Qb2ludExpZ2h0cyxcblx0XHRcdFx0dGhpcy5wb2ludExpZ2h0cy5sZW5ndGhcblx0XHRcdCk7XG5cdFx0fVxuXHRcdGlmICh0aGlzLmRpcmVjdExpZ2h0cy5sZW5ndGgpIHtcblx0XHRcdC8vIOaWueWQkeWFiVxuXHRcdFx0dGhpcy5saWdodFVuaWZvcm1CdWZmZXIuc2V0VW5pZm9ybShcblx0XHRcdFx0XCJkaXJlY3RMaWdodHNcIixcblx0XHRcdFx0KCkgPT4ge1xuXHRcdFx0XHRcdHJldHVybiB0aGlzLmRpcmVjdExpZ2h0cztcblx0XHRcdFx0fSxcblx0XHRcdFx0VW5pZm9ybUVudW0uRGlydGVjdExpZ2h0cyxcblx0XHRcdFx0dGhpcy5kaXJlY3RMaWdodHMubGVuZ3RoXG5cdFx0XHQpO1xuXHRcdH1cblxuXHRcdHNoYWRvd1NoYWRlckRhdGE6IHtcblx0XHRcdGlmICh0aGlzLm9wZW5TaGFkb3cpIHtcblx0XHRcdFx0Y29uc3Qgc3BvdExpZ2h0U2hhZG93TWFwVGV4dHVyZUFycmF5ID0gKHRoaXMuc3BvdExpZ2h0U2hhZG93TWFwVGV4dHVyZUFycmF5ID1cblx0XHRcdFx0XHR0aGlzLmNyZWF0ZVNoYWRvd01hcFRleHR1cmVBcnJheSh0aGlzLnNwb3RMaWdodHMpKTtcblx0XHRcdFx0Y29uc3QgcG9pbnRMaWdodFNoYWRvd01hcFRleHR1cmVBcnJheSA9ICh0aGlzLnBvaW50TGlnaHRTaGFkb3dNYXBUZXh0dXJlQXJyYXkgPVxuXHRcdFx0XHRcdHRoaXMuY3JlYXRlU2hhZG93TWFwVGV4dHVyZUFycmF5KHRoaXMucG9pbnRMaWdodHMpKTtcblx0XHRcdFx0Y29uc3QgZGlyZWN0TGlnaHRTaGFkb3dNYXBUZXh0dXJlQXJyYXkgPSAodGhpcy5kaXJlY3RMaWdodFNoYWRvd01hcFRleHR1cmVBcnJheSA9XG5cdFx0XHRcdFx0dGhpcy5jcmVhdGVTaGFkb3dNYXBUZXh0dXJlQXJyYXkodGhpcy5kaXJlY3RMaWdodHMpKTtcblx0XHRcdFx0aWYgKFxuXHRcdFx0XHRcdCFzcG90TGlnaHRTaGFkb3dNYXBUZXh0dXJlQXJyYXkgJiZcblx0XHRcdFx0XHQhcG9pbnRMaWdodFNoYWRvd01hcFRleHR1cmVBcnJheSAmJlxuXHRcdFx0XHRcdCFkaXJlY3RMaWdodFNoYWRvd01hcFRleHR1cmVBcnJheVxuXHRcdFx0XHQpXG5cdFx0XHRcdFx0YnJlYWsgc2hhZG93U2hhZGVyRGF0YTtcblxuXHRcdFx0XHQvLyBkZWZpbmVcblx0XHRcdFx0dGhpcy5saWdodFNoYWRlckRhdGEuc2V0RGVmaW5lKFwib3BlblNoYWRvd1wiLCB0aGlzLm9wZW5TaGFkb3cpO1xuXG5cdFx0XHRcdC8vIHNoYWRvd1VuaWZvcm1CdWZmZXJcblx0XHRcdFx0dGhpcy5zaGFkb3dVbmlmb3JtQnVmZmVyID0gbmV3IFVuaWZvcm1CdWZmZXIoe1xuXHRcdFx0XHRcdGxhYmVsOiBcInNoYWRvd1wiLFxuXHRcdFx0XHRcdHR5cGU6IEJ1ZmZlckJpbmRpbmdUeXBlLlJlYWRPbmx5U3RvcmFnZSxcblx0XHRcdFx0XHR1c2FnZTogQnVmZmVyVXNhZ2UuU3RvcmFnZSB8IEJ1ZmZlclVzYWdlLkNvcHlEc3Rcblx0XHRcdFx0fSk7XG5cblx0XHRcdFx0Ly8gbWF0cml4LG5lYXIsZmFyLi4uXG5cdFx0XHRcdGNvbnN0IHNwb3RMaWdodFdpdGhTaGFkb3dDb3VudCA9IHRoaXMuc2V0U2hhZG93VW5pZm9ybShcblx0XHRcdFx0XHRcInNwb3RMaWdodFNoYWRvd3NcIixcblx0XHRcdFx0XHR0aGlzLnNwb3RMaWdodHMsXG5cdFx0XHRcdFx0VW5pZm9ybUVudW0uU3BvdExpZ2h0U2hhZG93c1xuXHRcdFx0XHQpO1xuXHRcdFx0XHRjb25zdCBwb2ludExpZ2h0V2l0aFNoYWRvd0NvdW50ID0gdGhpcy5zZXRTaGFkb3dVbmlmb3JtKFxuXHRcdFx0XHRcdFwicG9pbnRMaWdodFNoYWRvd3NcIixcblx0XHRcdFx0XHR0aGlzLnBvaW50TGlnaHRzLFxuXHRcdFx0XHRcdFVuaWZvcm1FbnVtLlBvaW50TGlnaHRTaGFkb3dzXG5cdFx0XHRcdCk7XG5cdFx0XHRcdGNvbnN0IGRpcmVjdExpZ2h0V2l0aFNoYWRvd0NvdW50ID0gdGhpcy5zZXRTaGFkb3dVbmlmb3JtKFxuXHRcdFx0XHRcdFwiZGlyZWN0TGlnaHRTaGFkb3dzXCIsXG5cdFx0XHRcdFx0dGhpcy5kaXJlY3RMaWdodHMsXG5cdFx0XHRcdFx0VW5pZm9ybUVudW0uRGlydGVjdExpZ2h0U2hhZG93c1xuXHRcdFx0XHQpO1xuXHRcdFx0XHR0aGlzLmxpZ2h0U2hhZGVyRGF0YS5zZXRVbmlmb3JtQnVmZmVyKFwic2hhZG93XCIsIHRoaXMuc2hhZG93VW5pZm9ybUJ1ZmZlcik7XG5cblx0XHRcdFx0dGhpcy5saWdodFNoYWRlckRhdGEuc2V0RGVmaW5lKFwic3BvdExpZ2h0U2hhZG93TWFwc0NvdW50XCIsIHNwb3RMaWdodFdpdGhTaGFkb3dDb3VudCk7XG5cdFx0XHRcdHRoaXMubGlnaHRTaGFkZXJEYXRhLnNldERlZmluZShcInBvaW50TGlnaHRTaGFkb3dNYXBzQ291bnRcIiwgcG9pbnRMaWdodFdpdGhTaGFkb3dDb3VudCk7XG5cdFx0XHRcdHRoaXMubGlnaHRTaGFkZXJEYXRhLnNldERlZmluZShcImRpcmVjdExpZ2h0U2hhZG93TWFwc0NvdW50XCIsIGRpcmVjdExpZ2h0V2l0aFNoYWRvd0NvdW50KTtcblxuXHRcdFx0XHQvLyB0ZXh0dXJlLHNhbXBsZVxuXHRcdFx0XHRpZiAoc3BvdExpZ2h0U2hhZG93TWFwVGV4dHVyZUFycmF5ICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdFx0XHRpZiAoc3BvdExpZ2h0U2hhZG93TWFwVGV4dHVyZUFycmF5LnRleHR1cmVQcm9wLnNpemUuZGVwdGggIT0gc3BvdExpZ2h0V2l0aFNoYWRvd0NvdW50KVxuXHRcdFx0XHRcdFx0Y29uc29sZS53YXJuKFwic3BvdExpZ2h0U2hhZG93TWFwIGFsaWduIGhhcyBwcm9ibGVtXCIpO1xuXHRcdFx0XHRcdHRoaXMubGlnaHRTaGFkZXJEYXRhLnNldFRleHR1cmUoXCJzcG90TGlnaHRTaGFkb3dNYXBUZXh0dXJlQXJyYXlcIiwgc3BvdExpZ2h0U2hhZG93TWFwVGV4dHVyZUFycmF5KTtcblx0XHRcdFx0XHQvLyB0aGlzLl90ZXN0VGV4dHVyZSA9IHNwb3RMaWdodFNoYWRvd01hcFRleHR1cmVBcnJheVxuXHRcdFx0XHR9XG5cdFx0XHRcdGlmIChwb2ludExpZ2h0U2hhZG93TWFwVGV4dHVyZUFycmF5ICE9PSB1bmRlZmluZWQpIHtcblx0XHRcdFx0XHRpZiAocG9pbnRMaWdodFNoYWRvd01hcFRleHR1cmVBcnJheS50ZXh0dXJlUHJvcC5zaXplLmRlcHRoICE9IHBvaW50TGlnaHRXaXRoU2hhZG93Q291bnQpXG5cdFx0XHRcdFx0XHRjb25zb2xlLndhcm4oXCJwb2ludExpZ2h0U2hhZG93TWFwIGFsaWduIGhhcyBwcm9ibGVtXCIpO1xuXHRcdFx0XHRcdHRoaXMubGlnaHRTaGFkZXJEYXRhLnNldFRleHR1cmUoXCJwb2ludExpZ2h0U2hhZG93TWFwVGV4dHVyZUFycmF5XCIsIHBvaW50TGlnaHRTaGFkb3dNYXBUZXh0dXJlQXJyYXkpO1xuXHRcdFx0XHRcdC8vIHRoaXMuX3Rlc3RUZXh0dXJlID0gcG9pbnRMaWdodFNoYWRvd01hcFRleHR1cmVBcnJheTtcblx0XHRcdFx0fVxuXHRcdFx0XHRpZiAoZGlyZWN0TGlnaHRTaGFkb3dNYXBUZXh0dXJlQXJyYXkgIT09IHVuZGVmaW5lZCkge1xuXHRcdFx0XHRcdGlmIChkaXJlY3RMaWdodFNoYWRvd01hcFRleHR1cmVBcnJheS50ZXh0dXJlUHJvcC5zaXplLmRlcHRoICE9IGRpcmVjdExpZ2h0V2l0aFNoYWRvd0NvdW50KVxuXHRcdFx0XHRcdFx0Y29uc29sZS53YXJuKFwiZGlyZWN0TGlnaHRTaGFkb3dNYXAgYWxpZ24gaGFzIHByb2JsZW1cIik7XG5cdFx0XHRcdFx0dGhpcy5saWdodFNoYWRlckRhdGEuc2V0VGV4dHVyZShcblx0XHRcdFx0XHRcdFwiZGlyZWN0TGlnaHRTaGFkb3dNYXBUZXh0dXJlQXJyYXlcIixcblx0XHRcdFx0XHRcdGRpcmVjdExpZ2h0U2hhZG93TWFwVGV4dHVyZUFycmF5XG5cdFx0XHRcdFx0KTtcblx0XHRcdFx0XHQvLyB0aGlzLl90ZXN0VGV4dHVyZSA9IGRpcmVjdExpZ2h0U2hhZG93TWFwVGV4dHVyZUFycmF5XG5cdFx0XHRcdH1cblx0XHRcdFx0dGhpcy5saWdodFNoYWRlckRhdGEuc2V0U2FtcGxlcihcblx0XHRcdFx0XHRcInNoYWRvd1NhbXBsZXJcIixcblx0XHRcdFx0XHRuZXcgU2FtcGxlcih7IGNvbXBhcmU6IENvbXBhcmVGdW5jdGlvbi5MZXNzIH0sIHsgdHlwZTogU2FtcGxlckJpbmRpbmdUeXBlLkNvbXBhcmlzb24gfSlcblx0XHRcdFx0KTtcblx0XHRcdFx0Ly8gdGhpcy5saWdodFNoYWRlckRhdGEuc2V0U2FtcGxlcihcInNoYWRvd1NhbXBsZXJcIiwgbmV3IFNhbXBsZXIoKSk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0dGhpcy5saWdodFNoYWRlckRhdGEuc2V0VW5pZm9ybUJ1ZmZlcihcImxpZ2h0XCIsIHRoaXMubGlnaHRVbmlmb3JtQnVmZmVyKTtcblx0fVxuXG5cdHB1YmxpYyBnZXRBbGxMaWdodHMoKTogQXJyYXk8TGlnaHQ+IHtcblx0XHRjb25zdCByZXN1bHQgPSBbXTtcblx0XHRyZXR1cm4gcmVzdWx0LmNvbmNhdCh0aGlzLnNwb3RMaWdodHMsIHRoaXMucG9pbnRMaWdodHMsIHRoaXMuZGlyZWN0TGlnaHRzKTtcblx0fVxuXG5cdGRlc3Ryb3koKSB7XG5cdFx0dGhpcy5saWdodFNoYWRlckRhdGEuZGVzdHJveSgpO1xuXHRcdHRoaXMubGlnaHRVbmlmb3JtQnVmZmVyLmRlc3Ryb3koKTtcblx0fVxuXG5cdGNyZWF0ZVNoYWRvd01hcFRleHR1cmVBcnJheShsaWdodHM6IEFycmF5PExpZ2h0Pikge1xuXHRcdGlmIChsaWdodHMubGVuZ3RoIDw9IDApIHJldHVybiB1bmRlZmluZWQ7XG5cdFx0Y29uc3Qgc2hhZG93TWFwU291cmNlcyA9IFtdO1xuXHRcdGZvciAobGV0IGkgPSAwOyBpIDwgbGlnaHRzLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHRjb25zdCBsaWdodCA9IGxpZ2h0c1tpXTtcblx0XHRcdGlmIChsaWdodC5zaGFkb3cpIHtcblx0XHRcdFx0Y29uc3Qgc2hhZG93TWFwVGV4dHVyZSA9IGxpZ2h0LnNoYWRvdy5nZXRTaGFkb3dNYXBUZXh0dXJlKCk7XG5cdFx0XHRcdGNvbnN0IHNoYWRvd01hcFNvdXJjZSA9IHtcblx0XHRcdFx0XHRzb3VyY2U6IHNoYWRvd01hcFRleHR1cmUsXG5cdFx0XHRcdFx0d2lkdGg6IHNoYWRvd01hcFRleHR1cmUudGV4dHVyZVByb3Auc2l6ZS53aWR0aCxcblx0XHRcdFx0XHRoZWlnaHQ6IHNoYWRvd01hcFRleHR1cmUudGV4dHVyZVByb3Auc2l6ZS5oZWlnaHQsXG5cdFx0XHRcdFx0ZGVwdGg6IDEsXG5cdFx0XHRcdFx0eDogMCxcblx0XHRcdFx0XHR5OiAwLFxuXHRcdFx0XHRcdHo6IGlcblx0XHRcdFx0fTtcblx0XHRcdFx0c2hhZG93TWFwU291cmNlcy5wdXNoKHNoYWRvd01hcFNvdXJjZSk7XG5cdFx0XHR9XG5cdFx0fVxuXG5cdFx0aWYgKHNoYWRvd01hcFNvdXJjZXMubGVuZ3RoIDw9IDApIHJldHVybiB1bmRlZmluZWQ7XG5cblx0XHRjb25zdCBzaGFkb3dNYXBUZXh0dXJlQXJyYXkgPSBuZXcgVGV4dHVyZSh7XG5cdFx0XHRzaXplOiB7XG5cdFx0XHRcdHdpZHRoOiBzaGFkb3dNYXBTb3VyY2VzWzBdLndpZHRoLFxuXHRcdFx0XHRoZWlnaHQ6IHNoYWRvd01hcFNvdXJjZXNbMF0uaGVpZ2h0LFxuXHRcdFx0XHRkZXB0aDogc2hhZG93TWFwU291cmNlcy5sZW5ndGhcblx0XHRcdH0sXG5cdFx0XHRmaXhlZFNpemU6IHRydWUsXG5cdFx0XHRzYW1wbGVUeXBlOiBUZXh0dXJlU2FtcGxlVHlwZS5EZXB0aCxcblx0XHRcdGZvcm1hdDogVGV4dHVyZUZvcm1hdC5EZXB0aDI0UGx1cyxcblx0XHRcdHVzYWdlOiBUZXh0dXJlVXNhZ2UuVGV4dHVyZUJpbmRpbmcgfCBUZXh0dXJlVXNhZ2UuQ29weURzdCxcblx0XHRcdGRhdGE6IHNoYWRvd01hcFNvdXJjZXMsXG5cdFx0XHR2aWV3Rm9ybWF0czogVGV4dHVyZVZpZXdEaW1lbnNpb24uRTJkQXJyYXlcblx0XHR9KTtcblxuXHRcdHJldHVybiBzaGFkb3dNYXBUZXh0dXJlQXJyYXk7XG5cdH1cblxuXHRzZXRTaGFkb3dVbmlmb3JtKHVuaWZvcm1OYW1lOiBzdHJpbmcsIGxpZ2h0czogQXJyYXk8TGlnaHQ+LCB1bmlmb3JtVHlwZTogVW5pZm9ybUVudW0pIHtcblx0XHRpZiAobGlnaHRzLmxlbmd0aCkge1xuXHRcdFx0Y29uc3QgbGlnaHRXaXRoU2hhZG93QXJyYXkgPSBbXTtcblx0XHRcdGZvciAobGV0IGkgPSAwOyBpIDwgbGlnaHRzLmxlbmd0aDsgaSsrKSB7XG5cdFx0XHRcdGNvbnN0IGxpZ2h0ID0gbGlnaHRzW2ldO1xuXHRcdFx0XHRpZiAoIWxpZ2h0LnNoYWRvdykgY29udGludWU7XG5cdFx0XHRcdGxpZ2h0V2l0aFNoYWRvd0FycmF5LnB1c2gobGlnaHQpO1xuXHRcdFx0fVxuXG5cdFx0XHR0aGlzLnNoYWRvd1VuaWZvcm1CdWZmZXIuc2V0VW5pZm9ybShcblx0XHRcdFx0dW5pZm9ybU5hbWUsXG5cdFx0XHRcdCgpID0+IHtcblx0XHRcdFx0XHRyZXR1cm4gbGlnaHRXaXRoU2hhZG93QXJyYXk7XG5cdFx0XHRcdH0sXG5cdFx0XHRcdHVuaWZvcm1UeXBlLFxuXHRcdFx0XHRsaWdodFdpdGhTaGFkb3dBcnJheS5sZW5ndGhcblx0XHRcdCk7XG5cblx0XHRcdHJldHVybiBsaWdodFdpdGhTaGFkb3dBcnJheS5sZW5ndGg7XG5cdFx0fVxuXHR9XG59XG4iLCJpbXBvcnQgQ2FtZXJhIGZyb20gXCIuLi9jYW1lcmEvQ2FtZXJhXCI7XG5pbXBvcnQgeyBNZXNoIH0gZnJvbSBcIi4uL21lc2gvTWVzaFwiO1xuaW1wb3J0IHsgRnJhbWVTdGF0ZSB9IGZyb20gXCIuL0ZyYW1lU3RhdGVcIjtcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIE1lc2hNYW5nZXIge1xuXHRwcml2YXRlIF9saXN0OiBNYXA8c3RyaW5nIHwgbnVtYmVyLCBNZXNoPjtcblx0Y29uc3RydWN0b3IoKSB7XG5cdFx0dGhpcy5fbGlzdCA9IG5ldyBNYXAoKTtcblx0fVxuXHRnZXQgbGVuZ3RoKCkge1xuXHRcdHJldHVybiB0aGlzLl9saXN0LnNpemU7XG5cdH1cblx0dXBkYXRlKGZyYW1lU3RhdGU6IEZyYW1lU3RhdGUsIGNhbWVyYTogQ2FtZXJhKTogdm9pZCB7XG5cdFx0dGhpcy5fbGlzdC5mb3JFYWNoKChpbnN0YW5jZSkgPT4ge1xuXHRcdFx0aW5zdGFuY2UudXBkYXRlKGZyYW1lU3RhdGUsIGNhbWVyYSk7XG5cdFx0fSk7XG5cdH1cblx0YWRkKGluc3RhbmNlOiBNZXNoKTogTWVzaCB7XG5cdFx0aWYgKHRoaXMuX2xpc3QuZ2V0KGluc3RhbmNlLnVpZCkpIHJldHVybiB0aGlzLl9saXN0LmdldChpbnN0YW5jZS51aWQpO1xuXHRcdHRoaXMuX2xpc3Quc2V0KGluc3RhbmNlLnVpZCwgaW5zdGFuY2UpO1xuXHRcdHJldHVybiBpbnN0YW5jZTtcblx0fVxuXHRyZW1vdmUoaW5zdGFuY2U6IE1lc2gpOiBib29sZWFuIHtcblx0XHRpZiAodGhpcy5fbGlzdC5nZXQoaW5zdGFuY2UudWlkKSkge1xuXHRcdFx0aW5zdGFuY2UuZGVzdHJveSgpO1xuXHRcdFx0dGhpcy5fbGlzdC5kZWxldGUoaW5zdGFuY2UudWlkKTtcblx0XHRcdHJldHVybiB0cnVlO1xuXHRcdH1cblx0XHRyZXR1cm4gZmFsc2U7XG5cdH1cblx0Y29udGFpbnMoaW5zdGFuY2U6IE1lc2gpIHtcblx0XHRyZXR1cm4gISF0aGlzLl9saXN0LmdldChpbnN0YW5jZS51aWQpO1xuXHR9XG59XG4iLCJpbXBvcnQgeyBUZXh0dXJlRm9ybWF0LCBUZXh0dXJlVXNhZ2UgfSBmcm9tIFwiLi4vY29yZS9XZWJHUFVDb25zdGFudFwiO1xuaW1wb3J0IEdlb21ldHJ5IGZyb20gXCIuLi9nZW9tZXRyeS9HZW9tZXRyeVwiO1xuaW1wb3J0IFNoYWRlck1hdGVyaWFsIGZyb20gXCIuLi9tYXRlcmlhbC9TaGFkZXJNYXRlcmlhbFwiO1xuaW1wb3J0IHsgTWVzaCB9IGZyb20gXCIuLi9tZXNoL01lc2hcIjtcbmltcG9ydCBBdHRhY2htZW50IGZyb20gXCIuLi9yZW5kZXIvQXR0YWNobWVudFwiO1xuaW1wb3J0IHsgRmxvYXQzMkF0dHJpYnV0ZSB9IGZyb20gXCIuLi9yZW5kZXIvQXR0cmlidXRlXCI7XG5pbXBvcnQgQ29udGV4dCBmcm9tIFwiLi4vcmVuZGVyL0NvbnRleHRcIjtcbmltcG9ydCBSZW5kZXJUYXJnZXQgZnJvbSBcIi4uL3JlbmRlci9SZW5kZXJUYXJnZXRcIjtcbmltcG9ydCBTYW1wbGVyIGZyb20gXCIuLi9yZW5kZXIvU2FtcGxlclwiO1xuaW1wb3J0IFRleHR1cmUgZnJvbSBcIi4uL3JlbmRlci9UZXh0dXJlXCI7XG5pbXBvcnQgZ2V0VmVydEZyYWcgZnJvbSBcIi4uL3NoYWRlci9TaGFkZXJzXCI7XG5leHBvcnQgZGVmYXVsdCBjbGFzcyBSZXNvbHZlRnJhbWUge1xuXHRjYW52YXNSZW5kZXJUYXJnZXQ6IFJlbmRlclRhcmdldDtcblx0bWF0ZXJpYWw6IFNoYWRlck1hdGVyaWFsO1xuXHRnZW9tZXRyeTogR2VvbWV0cnk7XG5cdHF1YWRNZXNoOiBNZXNoO1xuXHRjb25zdHJ1Y3RvcigpIHtcblx0XHR0aGlzLmdlb21ldHJ5ID0gbmV3IEdlb21ldHJ5KHt9KTtcblx0XHR0aGlzLmdlb21ldHJ5LnNldEF0dHJpYnV0ZShcblx0XHRcdG5ldyBGbG9hdDMyQXR0cmlidXRlKFwicG9zaXRpb25cIiwgWy0xLjAsIDEuMCwgLTEuMCwgLTEuMCwgMS4wLCAtMS4wLCAxLjAsIC0xLjAsIDEuMCwgMS4wLCAtMS4wLCAxLjBdLCAyKVxuXHRcdCk7XG5cdFx0dGhpcy5nZW9tZXRyeS5jb3VudCA9IDY7XG5cdFx0Y29uc3Qgc2hhZGVyID0gZ2V0VmVydEZyYWcoXCJyZXNvbHZlXCIsIHsgcG9zaXRpb25Mb2NhdGlvbjogMCB9KTtcblx0XHR0aGlzLm1hdGVyaWFsID0gbmV3IFNoYWRlck1hdGVyaWFsKHtcblx0XHRcdHR5cGU6IFwicmVzb2x2ZVwiLFxuXHRcdFx0ZnJhZzogc2hhZGVyLmZyYWcsXG5cdFx0XHR2ZXJ0OiBzaGFkZXIudmVydCxcblx0XHRcdHVuaWZvcm1zOiB7XG5cdFx0XHRcdHRleHR1cmU6IHtcblx0XHRcdFx0XHR0eXBlOiBcInRleHR1cmVcIixcblx0XHRcdFx0XHR2YWx1ZTogdW5kZWZpbmVkXG5cdFx0XHRcdH0sXG5cdFx0XHRcdHNhbXBsZXI6IHtcblx0XHRcdFx0XHR0eXBlOiBcInNhbXBsZXJcIixcblx0XHRcdFx0XHR2YWx1ZTogbmV3IFNhbXBsZXIoe1xuXHRcdFx0XHRcdFx0bWFnRmlsdGVyOiBcImxpbmVhclwiLFxuXHRcdFx0XHRcdFx0bWluRmlsdGVyOiBcImxpbmVhclwiXG5cdFx0XHRcdFx0fSlcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdH0pO1xuXHRcdHRoaXMucXVhZE1lc2ggPSBuZXcgTWVzaCh0aGlzLmdlb21ldHJ5LCB0aGlzLm1hdGVyaWFsKTtcblx0fVxuXHRzZXRTaXplKHdpZHRoOiBudW1iZXIsIGhlaWdodDogbnVtYmVyKSB7XG5cdFx0dGhpcy5jYW52YXNSZW5kZXJUYXJnZXQuc2V0U2l6ZSh3aWR0aCwgaGVpZ2h0KTtcblx0XHR0aGlzLm1hdGVyaWFsLmRpcnR5ID0gdHJ1ZTtcblx0fVxuXHRyZW5kZXIoY29udGV4dDogQ29udGV4dCwgY29sb3JUZXh0dXJlPzogVGV4dHVyZSkge1xuXHRcdGlmICghdGhpcy5jYW52YXNSZW5kZXJUYXJnZXQpIHRoaXMuaW5pdFJlbmRlclRhcmdldChjb250ZXh0KTtcblx0XHQvLyB0aGlzLm1hdGVyaWFsXG5cdFx0dGhpcy5tYXRlcmlhbC51bmlmb3Jtcy50ZXh0dXJlLnZhbHVlID0gY29sb3JUZXh0dXJlO1xuXG5cdFx0dGhpcy5tYXRlcmlhbC51cGRhdGUodW5kZWZpbmVkLCB0aGlzLnF1YWRNZXNoKTtcblxuXHRcdGNvbnN0IGRyYXdDb21hbmQgPSB0aGlzLnF1YWRNZXNoLmdldERyYXdDb21tYW5kKCk7XG5cblx0XHRjb25zdCBjdXJyZW50UmVuZGVyUGFzc0VuY29kZXIgPSB0aGlzLmNhbnZhc1JlbmRlclRhcmdldC5iZWdpblJlbmRlclBhc3MoY29udGV4dC5kZXZpY2UpO1xuXG5cdFx0ZHJhd0NvbWFuZC5yZW5kZXIoeyBkZXZpY2U6IGNvbnRleHQuZGV2aWNlLCBwYXNzRW5jb2RlcjogY3VycmVudFJlbmRlclBhc3NFbmNvZGVyIH0pO1xuXG5cdFx0dGhpcy5jYW52YXNSZW5kZXJUYXJnZXQuZW5kUmVuZGVyUGFzcygpO1xuXHR9XG5cdHByaXZhdGUgaW5pdFJlbmRlclRhcmdldChjb250ZXh0OiBDb250ZXh0KSB7XG5cdFx0Y29uc3QgeyB3aWR0aCwgaGVpZ2h0LCBkZXB0aCB9ID0gY29udGV4dC5wcmVzZW50YXRpb25TaXplO1xuXHRcdGNvbnN0IGNvbG9yQXR0YWNobWVudCA9IG5ldyBBdHRhY2htZW50KFxuXHRcdFx0eyByOiAwLjAsIGc6IDAuMCwgYjogMC4wLCBhOiAwIH0sXG5cdFx0XHR7XG5cdFx0XHRcdHRleHR1cmVWaWV3OiAoKSA9PiB7XG5cdFx0XHRcdFx0cmV0dXJuIGNvbnRleHQuY29udGV4dC5nZXRDdXJyZW50VGV4dHVyZSgpLmNyZWF0ZVZpZXcoKTtcblx0XHRcdFx0fVxuXHRcdFx0fVxuXHRcdCk7XG5cdFx0Y29uc3QgZGVwdGhUZXh0dXJlID0gbmV3IFRleHR1cmUoe1xuXHRcdFx0bGFiZWw6IFwicmVzb2x2ZURlcHRoXCIsXG5cdFx0XHRzaXplOiB7IHdpZHRoLCBoZWlnaHQsIGRlcHRoIH0sXG5cdFx0XHRmb3JtYXQ6IFRleHR1cmVGb3JtYXQuRGVwdGgyNFBsdXMsXG5cdFx0XHR1c2FnZTogVGV4dHVyZVVzYWdlLlJlbmRlckF0dGFjaG1lbnRcblx0XHR9KTtcblx0XHRjb25zdCBkZXB0aEF0dGFjaG1lbnQgPSBuZXcgQXR0YWNobWVudCgxLjAsIHsgdGV4dHVyZTogZGVwdGhUZXh0dXJlIH0pO1xuXHRcdHRoaXMuY2FudmFzUmVuZGVyVGFyZ2V0ID0gbmV3IFJlbmRlclRhcmdldChcInJlbmRlclwiLCBbY29sb3JBdHRhY2htZW50XSwgZGVwdGhBdHRhY2htZW50KTtcblx0fVxufVxuIiwiaW1wb3J0IENvbnRleHQgZnJvbSBcIi4uL3JlbmRlci9Db250ZXh0XCI7XG5pbXBvcnQgVGV4dHVyZSBmcm9tIFwiLi4vcmVuZGVyL1RleHR1cmVcIjtcbmltcG9ydCBQb3N0RWZmZWN0IGZyb20gXCIuL1Bvc3RFZmZlY3RcIjtcbmltcG9ydCBSZXNvbHZlRnJhbWUgZnJvbSBcIi4vUmVzb2x2ZUZyYW1lXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFBvc3RFZmZlY3RDb2xsZWN0aW9uIHtcblx0cHJpdmF0ZSBfcG9zdEVmZmVjdHM6IE1hcDxzdHJpbmcsIFBvc3RFZmZlY3Q+O1xuXHRwdWJsaWMgY3VycmVudENvbG9yVGV4dHVyZTogVGV4dHVyZTtcblx0cHJpdmF0ZSByZXNvbHZlRnJhbWU6IFJlc29sdmVGcmFtZTtcblx0Y29uc3RydWN0b3IoKSB7XG5cdFx0dGhpcy5fcG9zdEVmZmVjdHMgPSBuZXcgTWFwKCk7XG5cdFx0dGhpcy5jdXJyZW50Q29sb3JUZXh0dXJlID0gdW5kZWZpbmVkO1xuXHRcdHRoaXMucmVzb2x2ZUZyYW1lID0gbmV3IFJlc29sdmVGcmFtZSgpO1xuXHR9XG5cdGFkZChwb3N0RWZmZWN0OiBQb3N0RWZmZWN0KSB7XG5cdFx0dGhpcy5fcG9zdEVmZmVjdHMuc2V0KHBvc3RFZmZlY3QuaWQsIHBvc3RFZmZlY3QpO1xuXHR9XG5cdHJlbW92ZShwb3N0RWZmZWN0OiBQb3N0RWZmZWN0KSB7XG5cdFx0dGhpcy5fcG9zdEVmZmVjdHMuZGVsZXRlKHBvc3RFZmZlY3QuaWQpO1xuXHRcdHBvc3RFZmZlY3QuZGVzdHJveSgpO1xuXHR9XG5cdHJlbmRlcihjb250ZXh0OiBDb250ZXh0LCBjb2xvclRleHR1cmU6IFRleHR1cmUpOiB2b2lkIHtcblx0XHR0aGlzLmN1cnJlbnRDb2xvclRleHR1cmUgPSBjb2xvclRleHR1cmU7XG5cdFx0dGhpcy5fcG9zdEVmZmVjdHMuZm9yRWFjaCgocG9zdEVmZmVjdCkgPT4ge1xuXHRcdFx0dGhpcy5jdXJyZW50Q29sb3JUZXh0dXJlID0gcG9zdEVmZmVjdC5yZW5kZXIoY29udGV4dCwgdGhpcy5jdXJyZW50Q29sb3JUZXh0dXJlKTtcblx0XHR9KTtcblx0XHR0aGlzLnJlc29sdmVGcmFtZS5yZW5kZXIoY29udGV4dCwgdGhpcy5jdXJyZW50Q29sb3JUZXh0dXJlKTtcblx0fVxuXHRzZXRTaXplKHdpZHRoOiBudW1iZXIsIGhlaWdodDogbnVtYmVyKSB7XG5cdFx0dGhpcy5fcG9zdEVmZmVjdHMuZm9yRWFjaCgocG9zdEVmZmVjdCkgPT4gcG9zdEVmZmVjdC5zZXRTaXplKHdpZHRoLCBoZWlnaHQpKTtcblx0XHR0aGlzLnJlc29sdmVGcmFtZS5zZXRTaXplKHdpZHRoLCBoZWlnaHQpO1xuXHR9XG5cdHByaXZhdGUgcG9zdEVmZmVjdHNTb3J0KCkge1xuXHRcdC8vIHRoaXMuX3Bvc3RFZmZlY3RzLnNvcnQoKVxuXHR9XG59XG4iLCJpbXBvcnQgeyBGcmFtZVN0YXRlIH0gZnJvbSBcIi4uL2NvcmUvRnJhbWVTdGF0ZS5qc1wiO1xuaW1wb3J0IHsgTWF0ZXJpYWwgfSBmcm9tIFwiLi4vbWF0ZXJpYWwvTWF0ZXJpYWwuanNcIjtcbmltcG9ydCBDb250ZXh0IGZyb20gXCIuLi9yZW5kZXIvQ29udGV4dC5qc1wiO1xuaW1wb3J0IHsgVGFyZ2V0IH0gZnJvbSBcIi4uL3JlbmRlci9SZW5kZXJTdGF0ZVwiO1xuaW1wb3J0IFJlbmRlclRhcmdldCBmcm9tIFwiLi4vcmVuZGVyL1JlbmRlclRhcmdldC5qc1wiO1xuaW1wb3J0IFRleHR1cmUgZnJvbSBcIi4uL3JlbmRlci9UZXh0dXJlLmpzXCI7XG5cbmNsYXNzIFBhc3Mge1xuXHRwdWJsaWMgcmVuZGVyVGFyZ2V0OiBSZW5kZXJUYXJnZXQ7XG5cdHB1YmxpYyBjb21wdXRlVGFyZ2V0OiBSZW5kZXJUYXJnZXQ7XG5cdHB1YmxpYyBjb250ZXh0OiBDb250ZXh0O1xuXHRwdWJsaWMgb3ZlcnJpZGVNYXRlcmlhbD86IE1hdGVyaWFsO1xuXHRwdWJsaWMgY29sb3JUYXJnZXRzPzogQXJyYXk8VGFyZ2V0Pjtcblx0cHVibGljIHBhc3NSZW5kZXJFbmNvZGVyOiBHUFVSZW5kZXJQYXNzRW5jb2RlciB8IG51bGw7XG5cdHB1YmxpYyBwYXNzQ29tcHV0ZUVuY29kZXI6IEdQVUNvbXB1dGVQYXNzRW5jb2Rlcjtcblx0Y29uc3RydWN0b3IoY29udGV4dDogQ29udGV4dCkge1xuXHRcdHRoaXMuY29udGV4dCA9IGNvbnRleHQ7XG5cdH1cblx0dXBkYXRlKGZyYW1lU3RhdGU6IEZyYW1lU3RhdGUpOiB2b2lkIHtcblx0XHQvLyB0b2RvO1xuXHR9XG5cdHNldFNpemUod2lkdGg6IG51bWJlciwgaGVpZ2h0OiBudW1iZXIpOiB2b2lkIHtcblx0XHQvLyB0b2RvIDtcblx0fVxuXHRiZWZvcmVSZW5kZXIob3B0aW9ucz86IGFueSkge1xuXHRcdHRoaXMucGFzc1JlbmRlckVuY29kZXIgPSB0aGlzLnJlbmRlclRhcmdldC5iZWdpblJlbmRlclBhc3ModGhpcy5jb250ZXh0LmRldmljZSk7XG5cdFx0aWYgKHRoaXMuY29tcHV0ZVRhcmdldClcblx0XHRcdHRoaXMucGFzc0NvbXB1dGVFbmNvZGVyID0gdGhpcy5jb21wdXRlVGFyZ2V0LmJlZ2luQ29tcHV0ZVBhc3NFbmNvZGVyKHRoaXMuY29udGV4dC5kZXZpY2UpO1xuXHR9XG5cdGdldENvbG9yVGV4dHVyZShpbmRleCA9IDApOiBUZXh0dXJlIHtcblx0XHRyZXR1cm4gdGhpcy5yZW5kZXJUYXJnZXQuZ2V0Q29sb3JUZXh0dXJlKGluZGV4KSBhcyBUZXh0dXJlO1xuXHR9XG5cdGdldERlcHRoVGV4dHVyZSgpOiBUZXh0dXJlIHwgeyBncHVUZXh0dXJlOiBHUFVUZXh0dXJlIH0ge1xuXHRcdHJldHVybiB0aGlzLnJlbmRlclRhcmdldC5nZXREZXB0aFRleHR1cmUoKTtcblx0fVxuXHRhZnRlclJlbmRlcigpIHtcblx0XHR0aGlzLnJlbmRlclRhcmdldC5lbmRSZW5kZXJQYXNzKCk7XG5cdFx0aWYgKHRoaXMuY29tcHV0ZVRhcmdldCkgdGhpcy5jb21wdXRlVGFyZ2V0LmVuZENvbXB1dGVQYXNzRW5jb2RlcigpO1xuXHR9XG59XG5cbmV4cG9ydCBkZWZhdWx0IFBhc3M7XG4iLCJpbXBvcnQgQ2FtZXJhIGZyb20gXCIuLi9jYW1lcmEvQ2FtZXJhXCI7XG5pbXBvcnQgeyBGcmFtZVN0YXRlIH0gZnJvbSBcIi4uL2NvcmUvRnJhbWVTdGF0ZVwiO1xuaW1wb3J0IHsgVGV4dHVyZUZvcm1hdCwgVGV4dHVyZVVzYWdlIH0gZnJvbSBcIi4uL2NvcmUvV2ViR1BVQ29uc3RhbnRcIjtcbmltcG9ydCBDb2xvciBmcm9tIFwiLi4vbWF0aC9Db2xvclwiO1xuaW1wb3J0IEF0dGFjaG1lbnQgZnJvbSBcIi4uL3JlbmRlci9BdHRhY2htZW50XCI7XG5pbXBvcnQgQ29udGV4dCBmcm9tIFwiLi4vcmVuZGVyL0NvbnRleHRcIjtcbmltcG9ydCBEcmF3Q29tbWFuZCBmcm9tIFwiLi4vcmVuZGVyL0RyYXdDb21tYW5kXCI7XG5pbXBvcnQgUmVuZGVyVGFyZ2V0IGZyb20gXCIuLi9yZW5kZXIvUmVuZGVyVGFyZ2V0XCI7XG5pbXBvcnQgVGV4dHVyZSBmcm9tIFwiLi4vcmVuZGVyL1RleHR1cmVcIjtcbmltcG9ydCBQYXNzIGZyb20gXCIuL1Bhc3NcIjtcblxuZXhwb3J0IGNsYXNzIEJhc2ljUGFzcyBleHRlbmRzIFBhc3Mge1xuXHRza3lib3hEcmF3Q29tYW5kOiBEcmF3Q29tbWFuZDtcblx0Y29uc3RydWN0b3IoY29udGV4dDogQ29udGV4dCkge1xuXHRcdHN1cGVyKGNvbnRleHQpO1xuXHRcdHRoaXMuaW5pdChjb250ZXh0KTtcblx0fVxuXG5cdGJlZm9yZVJlbmRlcihmcmFtZVN0YXRlOiBGcmFtZVN0YXRlKSB7XG5cdFx0dGhpcy51cGRhdGVSZW5kZXJUYXJnZXQoZnJhbWVTdGF0ZSk7XG5cblx0XHRzdXBlci5iZWZvcmVSZW5kZXIoKTtcblx0fVxuXG5cdHJlbmRlcihmcmFtZVN0YXRlOiBGcmFtZVN0YXRlLCBjYW1lcmE/OiBDYW1lcmEpIHtcblx0XHRjb25zdCB7IHJlbmRlclF1ZXVlLCBsaWdodE1hbmdlciB9ID0gZnJhbWVTdGF0ZTtcblxuXHRcdHJlbmRlclF1ZXVlLnNvcnQoKTtcblx0XHRyZW5kZXJRdWV1ZS5wcmVSZW5kZXIoY2FtZXJhLCB0aGlzLmNvbnRleHQsIHRoaXMucGFzc1JlbmRlckVuY29kZXIpO1xuXHRcdHJlbmRlclF1ZXVlLnRyYW5zcGFyZW50UmVuZGVyKGNhbWVyYSwgdGhpcy5jb250ZXh0LCB0aGlzLnBhc3NSZW5kZXJFbmNvZGVyLCB1bmRlZmluZWQsIHVuZGVmaW5lZCwgbGlnaHRNYW5nZXIpO1xuXHRcdHJlbmRlclF1ZXVlLm9wYXF1ZVJlbmRlcihjYW1lcmEsIHRoaXMuY29udGV4dCwgdGhpcy5wYXNzUmVuZGVyRW5jb2RlciwgdW5kZWZpbmVkLCB1bmRlZmluZWQsIGxpZ2h0TWFuZ2VyKTtcblx0XHRyZW5kZXJRdWV1ZS5kZWJ1Z1F1ZXVlUmVuZGVyKGNhbWVyYSwgdGhpcy5jb250ZXh0LCB0aGlzLnBhc3NSZW5kZXJFbmNvZGVyKTtcblx0fVxuXHRwcml2YXRlIGluaXQoY29udGV4dDogQ29udGV4dCkge1xuXHRcdHRoaXMuY3JlYXRlUmVuZGVyVGFyZ2V0KGNvbnRleHQpO1xuXHR9XG5cdHByaXZhdGUgY3JlYXRlUmVuZGVyVGFyZ2V0KGNvbnRleHQ6IENvbnRleHQpIHtcblx0XHRjb25zdCB7IHdpZHRoLCBoZWlnaHQsIGRlcHRoIH0gPSBjb250ZXh0LnByZXNlbnRhdGlvblNpemU7XG5cdFx0Y29uc3QgY29sb3JUZXh0dXJlID0gbmV3IFRleHR1cmUoe1xuXHRcdFx0bGFiZWw6IFwiYmFzaWNQYXNzQ29sb3JcIixcblx0XHRcdHNpemU6IHsgd2lkdGgsIGhlaWdodCwgZGVwdGggfSxcblx0XHRcdGZvcm1hdDogdGhpcy5jb250ZXh0LnByZXNlbnRhdGlvbkZvcm1hdCxcblx0XHRcdHVzYWdlOiBUZXh0dXJlVXNhZ2UuUmVuZGVyQXR0YWNobWVudCB8IFRleHR1cmVVc2FnZS5UZXh0dXJlQmluZGluZ1xuXHRcdH0pO1xuXHRcdGNvbnN0IGRlcHRoVGV4dHVyZSA9IG5ldyBUZXh0dXJlKHtcblx0XHRcdGxhYmVsOiBcImJhc2ljUGFzc0RlcHRoXCIsXG5cdFx0XHRzaXplOiB7IHdpZHRoLCBoZWlnaHQsIGRlcHRoIH0sXG5cdFx0XHRmb3JtYXQ6IFRleHR1cmVGb3JtYXQuRGVwdGgyNFBsdXMsXG5cdFx0XHR1c2FnZTogVGV4dHVyZVVzYWdlLlJlbmRlckF0dGFjaG1lbnRcblx0XHR9KTtcblx0XHRjb25zdCBjb2xvckF0dGFjaG1lbnQgPSBuZXcgQXR0YWNobWVudCh7IHI6IDAuMCwgZzogMC4wLCBiOiAwLjAsIGE6IDAuMCB9LCB7IHRleHR1cmU6IGNvbG9yVGV4dHVyZSB9KTtcblx0XHRjb25zdCBkZXB0aEF0dGFjaG1lbnQgPSBuZXcgQXR0YWNobWVudCgxLjAsIHsgdGV4dHVyZTogZGVwdGhUZXh0dXJlIH0pO1xuXHRcdHRoaXMucmVuZGVyVGFyZ2V0ID0gbmV3IFJlbmRlclRhcmdldChcInJlbmRlclwiLCBbY29sb3JBdHRhY2htZW50XSwgZGVwdGhBdHRhY2htZW50KTtcblx0fVxuXHRwdWJsaWMgc2V0U2l6ZSh3aWR0aDogbnVtYmVyLCBoZWlnaHQ6IG51bWJlcik6IHZvaWQge1xuXHRcdHRoaXMucmVuZGVyVGFyZ2V0LnNldFNpemUod2lkdGgsIGhlaWdodCwgMSk7XG5cdH1cblx0cHJpdmF0ZSB1cGRhdGVSZW5kZXJUYXJnZXQoZnJhbWVTdGF0ZTogRnJhbWVTdGF0ZSkge1xuXHRcdGlmIChmcmFtZVN0YXRlPy5iYWNrZ3JvdW5kPy52YWx1ZSBpbnN0YW5jZW9mIENvbG9yKSB7XG5cdFx0XHRjb25zdCB7IHJlZCwgZ3JlZW4sIGJsdWUgfSA9IGZyYW1lU3RhdGUuYmFja2dyb3VuZC52YWx1ZTtcblx0XHRcdGNvbnN0IG9wYWNpdHkgPSBmcmFtZVN0YXRlLmJhY2tncm91bmQ/Lm9wYWNpdHk7XG5cdFx0XHRjb25zdCBjbGVhclZhbHVlID0ge1xuXHRcdFx0XHRyOiByZWQsXG5cdFx0XHRcdGc6IGdyZWVuLFxuXHRcdFx0XHRiOiBibHVlLFxuXHRcdFx0XHRhOiBvcGFjaXR5ID8/IDEuMFxuXHRcdFx0fTtcblx0XHRcdHRoaXMucmVuZGVyVGFyZ2V0LmNvbG9yQXR0YWNobWVudHNbMF0udmFsdWUgPSBjbGVhclZhbHVlO1xuXHRcdH1cblx0fVxufVxuIiwiaW1wb3J0IGRlZmluZWQgZnJvbSBcIi4uL3V0aWxzL2RlZmluZWRcIjtcclxuaW1wb3J0IEdNYXRoIGZyb20gXCIuL01hdGhcIjtcclxuaW1wb3J0IE1hdHJpeDQgZnJvbSBcIi4vTWF0cml4NFwiO1xyXG5pbXBvcnQgVmVjdG9yMyBmcm9tIFwiLi9WZWN0b3IzXCI7XHJcbmltcG9ydCBWZWN0b3I0IGZyb20gXCIuL1ZlY3RvcjRcIjtcclxuXHJcbi8qKlxyXG4gKiBBIHBsYW5lIGluIEhlc3NpYW4gTm9ybWFsIEZvcm0gZGVmaW5lZCBieVxyXG4gKiA8cHJlPlxyXG4gKiBheCArIGJ5ICsgY3ogKyBkID0gMFxyXG4gKiA8L3ByZT5cclxuICogd2hlcmUgKGEsIGIsIGMpIGlzIHRoZSBwbGFuZSdzIDxjb2RlPm5vcm1hbDwvY29kZT4sIGQgaXMgdGhlIHNpZ25lZFxyXG4gKiA8Y29kZT5kaXN0YW5jZTwvY29kZT4gdG8gdGhlIHBsYW5lLCBhbmQgKHgsIHksIHopIGlzIGFueSBwb2ludCBvblxyXG4gKiB0aGUgcGxhbmUuXHJcbiAqXHJcbiAqIEBhbGlhcyBQbGFuZVxyXG4gKiBAY29uc3RydWN0b3JcclxuICpcclxuICogQHBhcmFtIHtWZWN0b3IzfSBub3JtYWwgVGhlIHBsYW5lJ3Mgbm9ybWFsIChub3JtYWxpemVkKS5cclxuICogQHBhcmFtIHtOdW1iZXJ9IGRpc3RhbmNlIFRoZSBzaG9ydGVzdCBkaXN0YW5jZSBmcm9tIHRoZSBvcmlnaW4gdG8gdGhlIHBsYW5lLiAgVGhlIHNpZ24gb2ZcclxuICogQGV4YW1wbGVcclxuICogLy8gVGhlIHBsYW5lIHg9MFxyXG4gKiBjb25zdCBwbGFuZSA9IG5ldyBQbGFuZShWZWN0b3IzLlVOSVRfWCwgMC4wKTtcclxuICpcclxuICogQGV4Y2VwdGlvbiB7RGV2ZWxvcGVyRXJyb3J9IE5vcm1hbCBtdXN0IGJlIG5vcm1hbGl6ZWRcclxuICovXHJcbmNsYXNzIFBsYW5lIHtcclxuXHRub3JtYWw6IFZlY3RvcjM7XHJcblx0ZGlzdGFuY2U6IG51bWJlcjtcclxuXHRwdWJsaWMgc3RhdGljIE9SSUdJTl9YWV9QTEFORSA9IE9iamVjdC5mcmVlemUobmV3IFBsYW5lKFZlY3RvcjMuVU5JVF9aLCAwLjApKTtcclxuXHJcblx0cHVibGljIHN0YXRpYyBPUklHSU5fWVpfUExBTkUgPSBPYmplY3QuZnJlZXplKG5ldyBQbGFuZShWZWN0b3IzLlVOSVRfWCwgMC4wKSk7XHJcblxyXG5cdHB1YmxpYyBzdGF0aWMgT1JJR0lOX1pYX1BMQU5FID0gT2JqZWN0LmZyZWV6ZShuZXcgUGxhbmUoVmVjdG9yMy5VTklUX1ksIDAuMCkpO1xyXG5cdGNvbnN0cnVjdG9yKG5vcm1hbDogVmVjdG9yMywgZGlzdGFuY2U6IG51bWJlcikge1xyXG5cdFx0dGhpcy5ub3JtYWwgPSBWZWN0b3IzLmNsb25lKG5vcm1hbCk7XHJcblxyXG5cdFx0dGhpcy5kaXN0YW5jZSA9IGRpc3RhbmNlO1xyXG5cdH1cclxuXHRub3JtYWxpemUoKSB7XHJcblx0XHRjb25zdCBpbnZlcnNlTm9ybWFsTGVuZ3RoID0gMS4wIC8gdGhpcy5ub3JtYWwubGVuZ3RoKCk7XHJcblx0XHR0aGlzLm5vcm1hbCA9IFZlY3RvcjMubXVsdGlwbHlCeVNjYWxhcih0aGlzLm5vcm1hbCwgaW52ZXJzZU5vcm1hbExlbmd0aCwgdGhpcy5ub3JtYWwpO1xyXG5cdFx0dGhpcy5kaXN0YW5jZSAqPSBpbnZlcnNlTm9ybWFsTGVuZ3RoO1xyXG5cdFx0cmV0dXJuIHRoaXM7XHJcblx0fVxyXG5cclxuXHRzdGF0aWMgZnJvbVBvaW50Tm9ybWFsKHBvaW50OiBWZWN0b3IzLCBub3JtYWw6IFZlY3RvcjMsIHJlc3VsdDogUGxhbmUpOiBQbGFuZSB7XHJcblx0XHRpZiAoIUdNYXRoLmVxdWFsc0Vwc2lsb24oVmVjdG9yMy5tYWduaXR1ZGUobm9ybWFsKSwgMS4wLCBHTWF0aC5FUFNJTE9ONikpIHtcclxuXHRcdFx0dGhyb3cgbmV3IEVycm9yKFwibm9ybWFsIG11c3QgYmUgbm9ybWFsaXplZC5cIik7XHJcblx0XHR9XHJcblx0XHQvLyA+PmluY2x1ZGVFbmQoJ2RlYnVnJyk7XHJcblxyXG5cdFx0Y29uc3QgZGlzdGFuY2UgPSAtVmVjdG9yMy5kb3Qobm9ybWFsLCBwb2ludCk7XHJcblxyXG5cdFx0aWYgKCFkZWZpbmVkKHJlc3VsdCkpIHtcclxuXHRcdFx0cmV0dXJuIG5ldyBQbGFuZShub3JtYWwsIGRpc3RhbmNlKTtcclxuXHRcdH1cclxuXHJcblx0XHRWZWN0b3IzLmNsb25lKG5vcm1hbCwgcmVzdWx0Lm5vcm1hbCk7XHJcblx0XHRyZXN1bHQuZGlzdGFuY2UgPSBkaXN0YW5jZTtcclxuXHRcdHJldHVybiByZXN1bHQ7XHJcblx0fVxyXG5cclxuXHRzdGF0aWMgZnJvbVZlY3RvcjQoY29lZmZpY2llbnRzOiBWZWN0b3I0LCByZXN1bHQ6IFBsYW5lKTogUGxhbmUge1xyXG5cdFx0Y29uc3Qgbm9ybWFsID0gVmVjdG9yMy5mcm9tVmVjdG9yNChjb2VmZmljaWVudHMsIHNjcmF0Y2hOb3JtYWwpO1xyXG5cdFx0Y29uc3QgZGlzdGFuY2UgPSBjb2VmZmljaWVudHMudztcclxuXHJcblx0XHQvLyA+PmluY2x1ZGVTdGFydCgnZGVidWcnLCBwcmFnbWFzLmRlYnVnKTtcclxuXHRcdGlmICghR01hdGguZXF1YWxzRXBzaWxvbihWZWN0b3IzLm1hZ25pdHVkZShub3JtYWwpLCAxLjAsIEdNYXRoLkVQU0lMT042KSkge1xyXG5cdFx0XHR0aHJvdyBuZXcgRXJyb3IoXCJub3JtYWwgbXVzdCBiZSBub3JtYWxpemVkLlwiKTtcclxuXHRcdH1cclxuXHRcdC8vID4+aW5jbHVkZUVuZCgnZGVidWcnKTtcclxuXHJcblx0XHRpZiAoIWRlZmluZWQocmVzdWx0KSkge1xyXG5cdFx0XHRyZXR1cm4gbmV3IFBsYW5lKG5vcm1hbCwgZGlzdGFuY2UpO1xyXG5cdFx0fVxyXG5cdFx0VmVjdG9yMy5jbG9uZShub3JtYWwsIHJlc3VsdC5ub3JtYWwpO1xyXG5cdFx0cmVzdWx0LmRpc3RhbmNlID0gZGlzdGFuY2U7XHJcblx0XHRyZXR1cm4gcmVzdWx0O1xyXG5cdH1cclxuXHJcblx0c3RhdGljIGdldFBvaW50RGlzdGFuY2UocGxhbmU6IFBsYW5lLCBwb2ludDogVmVjdG9yMyk6IG51bWJlciB7XHJcblx0XHRyZXR1cm4gVmVjdG9yMy5kb3QocGxhbmUubm9ybWFsLCBwb2ludCkgKyBwbGFuZS5kaXN0YW5jZTtcclxuXHR9XHJcblxyXG5cdHN0YXRpYyBwcm9qZWN0UG9pbnRPbnRvUGxhbmUocGxhbmU6IFBsYW5lLCBwb2ludDogVmVjdG9yMywgcmVzdWx0OiBWZWN0b3IzKTogVmVjdG9yMyB7XHJcblx0XHRpZiAoIWRlZmluZWQocmVzdWx0KSkge1xyXG5cdFx0XHRyZXN1bHQgPSBuZXcgVmVjdG9yMygpO1xyXG5cdFx0fVxyXG5cclxuXHRcdC8vIHByb2plY3RlZFBvaW50ID0gcG9pbnQgLSAobm9ybWFsLnBvaW50ICsgc2NhbGUpICogbm9ybWFsXHJcblx0XHRjb25zdCBwb2ludERpc3RhbmNlID0gUGxhbmUuZ2V0UG9pbnREaXN0YW5jZShwbGFuZSwgcG9pbnQpO1xyXG5cdFx0Y29uc3Qgc2NhbGVkTm9ybWFsID0gVmVjdG9yMy5tdWx0aXBseUJ5U2NhbGFyKHBsYW5lLm5vcm1hbCwgcG9pbnREaXN0YW5jZSwgc2NyYXRjaENhcnRlc2lhbik7XHJcblxyXG5cdFx0cmV0dXJuIFZlY3RvcjMuc3VidHJhY3QocG9pbnQsIHNjYWxlZE5vcm1hbCwgcmVzdWx0KTtcclxuXHR9XHJcblxyXG5cdHN0YXRpYyB0cmFuc2Zvcm0ocGxhbmU6IFBsYW5lLCB0cmFuc2Zvcm06IE1hdHJpeDQsIHJlc3VsdDogUGxhbmUpOiBQbGFuZSB7XHJcblx0XHRjb25zdCBub3JtYWwgPSBwbGFuZS5ub3JtYWw7XHJcblx0XHRjb25zdCBkaXN0YW5jZSA9IHBsYW5lLmRpc3RhbmNlO1xyXG5cdFx0Y29uc3QgaW52ZXJzZVRyYW5zcG9zZSA9IE1hdHJpeDQuaW52ZXJzZVRyYW5zcG9zZSh0cmFuc2Zvcm0sIHNjcmF0Y2hJbnZlcnNlVHJhbnNwb3NlKTtcclxuXHRcdGxldCBwbGFuZUFzQ2FydGVzaWFuNCA9IFZlY3RvcjQuZnJvbUVsZW1lbnRzKG5vcm1hbC54LCBub3JtYWwueSwgbm9ybWFsLnosIGRpc3RhbmNlLCBzY3JhdGNoUGxhbmVDYXJ0ZXNpYW40KTtcclxuXHRcdHBsYW5lQXNDYXJ0ZXNpYW40ID0gTWF0cml4NC5tdWx0aXBseUJ5VmVjdG9yKGludmVyc2VUcmFuc3Bvc2UsIHBsYW5lQXNDYXJ0ZXNpYW40LCBwbGFuZUFzQ2FydGVzaWFuNCk7XHJcblxyXG5cdFx0Ly8gQ29udmVydCB0aGUgdHJhbnNmb3JtZWQgcGxhbmUgdG8gSGVzc2lhbiBOb3JtYWwgRm9ybVxyXG5cdFx0Y29uc3QgdHJhbnNmb3JtZWROb3JtYWwgPSBWZWN0b3IzLmZyb21WZWN0b3I0KHBsYW5lQXNDYXJ0ZXNpYW40LCBzY3JhdGNoVHJhbnNmb3JtTm9ybWFsKTtcclxuXHJcblx0XHRwbGFuZUFzQ2FydGVzaWFuNCA9IFZlY3RvcjQuZGl2aWRlQnlTY2FsYXIoXHJcblx0XHRcdHBsYW5lQXNDYXJ0ZXNpYW40LFxyXG5cdFx0XHRWZWN0b3IzLm1hZ25pdHVkZSh0cmFuc2Zvcm1lZE5vcm1hbCksXHJcblx0XHRcdHBsYW5lQXNDYXJ0ZXNpYW40XHJcblx0XHQpO1xyXG5cclxuXHRcdHJldHVybiBQbGFuZS5mcm9tVmVjdG9yNChwbGFuZUFzQ2FydGVzaWFuNCwgcmVzdWx0KTtcclxuXHR9XHJcblxyXG5cdHN0YXRpYyBjbG9uZShwbGFuZTogUGxhbmUsIHJlc3VsdDogUGxhbmUpOiBQbGFuZSB7XHJcblx0XHRpZiAoIWRlZmluZWQocmVzdWx0KSkge1xyXG5cdFx0XHRyZXR1cm4gbmV3IFBsYW5lKHBsYW5lLm5vcm1hbCwgcGxhbmUuZGlzdGFuY2UpO1xyXG5cdFx0fVxyXG5cclxuXHRcdFZlY3RvcjMuY2xvbmUocGxhbmUubm9ybWFsLCByZXN1bHQubm9ybWFsKTtcclxuXHRcdHJlc3VsdC5kaXN0YW5jZSA9IHBsYW5lLmRpc3RhbmNlO1xyXG5cclxuXHRcdHJldHVybiByZXN1bHQ7XHJcblx0fVxyXG5cclxuXHRzdGF0aWMgZXF1YWxzKGxlZnQ6IFBsYW5lLCByaWdodDogUGxhbmUpOiBib29sZWFuIHtcclxuXHRcdHJldHVybiBsZWZ0LmRpc3RhbmNlID09PSByaWdodC5kaXN0YW5jZSAmJiBWZWN0b3IzLmVxdWFscyhsZWZ0Lm5vcm1hbCwgcmlnaHQubm9ybWFsKTtcclxuXHR9XHJcbn1cclxuY29uc3Qgc2NyYXRjaE5vcm1hbCA9IG5ldyBWZWN0b3IzKCk7XHJcbmNvbnN0IHNjcmF0Y2hDYXJ0ZXNpYW4gPSBuZXcgVmVjdG9yMygpO1xyXG5jb25zdCBzY3JhdGNoSW52ZXJzZVRyYW5zcG9zZSA9IG5ldyBNYXRyaXg0KCk7XHJcbmNvbnN0IHNjcmF0Y2hQbGFuZUNhcnRlc2lhbjQgPSBuZXcgVmVjdG9yNCgpO1xyXG5jb25zdCBzY3JhdGNoVHJhbnNmb3JtTm9ybWFsID0gbmV3IFZlY3RvcjMoKTtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IFBsYW5lO1xyXG4iLCJpbXBvcnQgVmVjdG9yMyBmcm9tIFwiLi4vbWF0aC9WZWN0b3IzXCI7XHJcbmltcG9ydCBWZWN0b3I0IGZyb20gXCIuLi9tYXRoL1ZlY3RvcjRcIjtcclxuaW1wb3J0IGRlZmF1bHRWYWx1ZSBmcm9tIFwiLi4vdXRpbHMvZGVmYXVsdFZhbHVlXCI7XHJcbmltcG9ydCBkZWZpbmVkIGZyb20gXCIuLi91dGlscy9kZWZpbmVkXCI7XHJcbmltcG9ydCB7IEludGVyc2VjdCB9IGZyb20gXCIuL1dlYkdQVUNvbnN0YW50XCI7XHJcbmltcG9ydCBQbGFuZSBmcm9tIFwiLi4vbWF0aC9QbGFuZVwiO1xyXG5cclxuLyoqXHJcbiAqIFRoZSBjdWxsaW5nIHZvbHVtZSBkZWZpbmVkIGJ5IHBsYW5lcy5cclxuICpcclxuICogQGFsaWFzIEN1bGxpbmdWb2x1bWVcclxuICogQGNvbnN0cnVjdG9yXHJcbiAqXHJcbiAqIEBwYXJhbSB7VmVjdG9yNFtdfSBbcGxhbmVzXSBBbiBhcnJheSBvZiBjbGlwcGluZyBwbGFuZXMuXHJcbiAqL1xyXG5jbGFzcyBDdWxsaW5nVm9sdW1lIHtcclxuXHRwbGFuZXM6IFBsYW5lW107XHJcblxyXG5cdHB1YmxpYyBzdGF0aWMgTUFTS19PVVRTSURFID0gMHhmZmZmZmZmZjtcclxuXHJcblx0cHVibGljIHN0YXRpYyBNQVNLX0lOU0lERSA9IDB4MDAwMDAwMDA7XHJcblxyXG5cdHB1YmxpYyBzdGF0aWMgTUFTS19JTkRFVEVSTUlOQVRFID0gMHg3ZmZmZmZmZjtcclxuXHJcblx0Y29uc3RydWN0b3IocGxhbmVzPzogUGxhbmVbXSkge1xyXG5cdFx0dGhpcy5wbGFuZXMgPSBkZWZhdWx0VmFsdWUocGxhbmVzLCBbXHJcblx0XHRcdG5ldyBQbGFuZShWZWN0b3IzLlVOSVRfWiwgMC4wKSxcclxuXHRcdFx0bmV3IFBsYW5lKFZlY3RvcjMuVU5JVF9aLCAwLjApLFxyXG5cdFx0XHRuZXcgUGxhbmUoVmVjdG9yMy5VTklUX1osIDAuMCksXHJcblx0XHRcdG5ldyBQbGFuZShWZWN0b3IzLlVOSVRfWiwgMC4wKSxcclxuXHRcdFx0bmV3IFBsYW5lKFZlY3RvcjMuVU5JVF9aLCAwLjApLFxyXG5cdFx0XHRuZXcgUGxhbmUoVmVjdG9yMy5VTklUX1osIDAuMClcclxuXHRcdF0pO1xyXG5cdH1cclxuXHQvKipcclxuXHQgKiBDb25zdHJ1Y3RzIGEgY3VsbGluZyB2b2x1bWUgZnJvbSBhIGJvdW5kaW5nIHNwaGVyZS4gQ3JlYXRlcyBzaXggcGxhbmVzIHRoYXQgY3JlYXRlIGEgYm94IGNvbnRhaW5pbmcgdGhlIHNwaGVyZS5cclxuXHQgKiBUaGUgcGxhbmVzIGFyZSBhbGlnbmVkIHRvIHRoZSB4LCB5LCBhbmQgeiBheGVzIGluIHdvcmxkIGNvb3JkaW5hdGVzLlxyXG5cdCAqXHJcblx0ICogQHBhcmFtIHtCb3VuZGluZ1NwaGVyZX0gYm91bmRpbmdTcGhlcmUgVGhlIGJvdW5kaW5nIHNwaGVyZSB1c2VkIHRvIGNyZWF0ZSB0aGUgY3VsbGluZyB2b2x1bWUuXHJcblx0ICogQHBhcmFtIHtDdWxsaW5nVm9sdW1lfSBbcmVzdWx0XSBUaGUgb2JqZWN0IG9udG8gd2hpY2ggdG8gc3RvcmUgdGhlIHJlc3VsdC5cclxuXHQgKiBAcmV0dXJucyB7Q3VsbGluZ1ZvbHVtZX0gVGhlIGN1bGxpbmcgdm9sdW1lIGNyZWF0ZWQgZnJvbSB0aGUgYm91bmRpbmcgc3BoZXJlLlxyXG5cdCAqL1xyXG5cdHN0YXRpYyBmcm9tQm91bmRpbmdTcGhlcmUoYm91bmRpbmdTcGhlcmUsIHJlc3VsdCkge1xyXG5cdFx0aWYgKCFkZWZpbmVkKGJvdW5kaW5nU3BoZXJlKSkge1xyXG5cdFx0XHR0aHJvdyBuZXcgRXJyb3IoXCJib3VuZGluZ1NwaGVyZSBpcyByZXF1aXJlZC5cIik7XHJcblx0XHR9XHJcblx0XHRpZiAoIWRlZmluZWQocmVzdWx0KSkge1xyXG5cdFx0XHRyZXN1bHQgPSBuZXcgQ3VsbGluZ1ZvbHVtZSgpO1xyXG5cdFx0fVxyXG5cclxuXHRcdGNvbnN0IGxlbmd0aCA9IGZhY2VzLmxlbmd0aDtcclxuXHRcdGNvbnN0IHBsYW5lcyA9IHJlc3VsdC5wbGFuZXM7XHJcblx0XHRwbGFuZXMubGVuZ3RoID0gMiAqIGxlbmd0aDtcclxuXHJcblx0XHRjb25zdCBjZW50ZXIgPSBib3VuZGluZ1NwaGVyZS5jZW50ZXI7XHJcblx0XHRjb25zdCByYWRpdXMgPSBib3VuZGluZ1NwaGVyZS5yYWRpdXM7XHJcblxyXG5cdFx0bGV0IHBsYW5lSW5kZXggPSAwO1xyXG5cclxuXHRcdGZvciAobGV0IGkgPSAwOyBpIDwgbGVuZ3RoOyArK2kpIHtcclxuXHRcdFx0Y29uc3QgZmFjZU5vcm1hbCA9IGZhY2VzW2ldO1xyXG5cclxuXHRcdFx0bGV0IHBsYW5lMCA9IHBsYW5lc1twbGFuZUluZGV4XTtcclxuXHRcdFx0bGV0IHBsYW5lMSA9IHBsYW5lc1twbGFuZUluZGV4ICsgMV07XHJcblxyXG5cdFx0XHRpZiAoIWRlZmluZWQocGxhbmUwKSkge1xyXG5cdFx0XHRcdHBsYW5lMCA9IHBsYW5lc1twbGFuZUluZGV4XSA9IG5ldyBWZWN0b3I0KCk7XHJcblx0XHRcdH1cclxuXHRcdFx0aWYgKCFkZWZpbmVkKHBsYW5lMSkpIHtcclxuXHRcdFx0XHRwbGFuZTEgPSBwbGFuZXNbcGxhbmVJbmRleCArIDFdID0gbmV3IFZlY3RvcjQoKTtcclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0VmVjdG9yMy5tdWx0aXBseUJ5U2NhbGFyKGZhY2VOb3JtYWwsIC1yYWRpdXMsIHNjcmF0Y2hQbGFuZUNlbnRlcik7XHJcblx0XHRcdFZlY3RvcjMuYWRkKGNlbnRlciwgc2NyYXRjaFBsYW5lQ2VudGVyLCBzY3JhdGNoUGxhbmVDZW50ZXIpO1xyXG5cclxuXHRcdFx0cGxhbmUwLnggPSBmYWNlTm9ybWFsLng7XHJcblx0XHRcdHBsYW5lMC55ID0gZmFjZU5vcm1hbC55O1xyXG5cdFx0XHRwbGFuZTAueiA9IGZhY2VOb3JtYWwuejtcclxuXHRcdFx0cGxhbmUwLncgPSAtVmVjdG9yMy5kb3QoZmFjZU5vcm1hbCwgc2NyYXRjaFBsYW5lQ2VudGVyKTtcclxuXHJcblx0XHRcdFZlY3RvcjMubXVsdGlwbHlCeVNjYWxhcihmYWNlTm9ybWFsLCByYWRpdXMsIHNjcmF0Y2hQbGFuZUNlbnRlcik7XHJcblx0XHRcdFZlY3RvcjMuYWRkKGNlbnRlciwgc2NyYXRjaFBsYW5lQ2VudGVyLCBzY3JhdGNoUGxhbmVDZW50ZXIpO1xyXG5cclxuXHRcdFx0cGxhbmUxLnggPSAtZmFjZU5vcm1hbC54O1xyXG5cdFx0XHRwbGFuZTEueSA9IC1mYWNlTm9ybWFsLnk7XHJcblx0XHRcdHBsYW5lMS56ID0gLWZhY2VOb3JtYWwuejtcclxuXHRcdFx0cGxhbmUxLncgPSAtVmVjdG9yMy5kb3QoVmVjdG9yMy5uZWdhdGUoZmFjZU5vcm1hbCwgc2NyYXRjaFBsYW5lTm9ybWFsKSwgc2NyYXRjaFBsYW5lQ2VudGVyKTtcclxuXHJcblx0XHRcdHBsYW5lSW5kZXggKz0gMjtcclxuXHRcdH1cclxuXHJcblx0XHRyZXR1cm4gcmVzdWx0O1xyXG5cdH1cclxuXHQvKipcclxuXHQgKiBEZXRlcm1pbmVzIHdoZXRoZXIgYSBib3VuZGluZyB2b2x1bWUgaW50ZXJzZWN0cyB0aGUgY3VsbGluZyB2b2x1bWUuXHJcblx0ICpcclxuXHQgKiBAcGFyYW0ge09iamVjdH0gYm91bmRpbmdWb2x1bWUgVGhlIGJvdW5kaW5nIHZvbHVtZSB3aG9zZSBpbnRlcnNlY3Rpb24gd2l0aCB0aGUgY3VsbGluZyB2b2x1bWUgaXMgdG8gYmUgdGVzdGVkLlxyXG5cdCAqIEByZXR1cm5zIHtJbnRlcnNlY3R9ICBJbnRlcnNlY3QuT1VUU0lERSwgSW50ZXJzZWN0LklOVEVSU0VDVElORywgb3IgSW50ZXJzZWN0LklOU0lERS5cclxuXHQgKi9cclxuXHRjb21wdXRlVmlzaWJpbGl0eShib3VuZGluZ1ZvbHVtZSkge1xyXG5cdFx0aWYgKCFkZWZpbmVkKGJvdW5kaW5nVm9sdW1lKSkge1xyXG5cdFx0XHR0aHJvdyBuZXcgRXJyb3IoXCJib3VuZGluZ1ZvbHVtZSBpcyByZXF1aXJlZC5cIik7XHJcblx0XHR9XHJcblx0XHRjb25zdCBwbGFuZXMgPSB0aGlzLnBsYW5lcztcclxuXHRcdGxldCBpbnRlcnNlY3RpbmcgPSBmYWxzZTtcclxuXHRcdGZvciAobGV0IGsgPSAwLCBsZW4gPSBwbGFuZXMubGVuZ3RoOyBrIDwgbGVuOyArK2spIHtcclxuXHRcdFx0Y29uc3QgcmVzdWx0ID0gYm91bmRpbmdWb2x1bWUuaW50ZXJzZWN0UGxhbmUocGxhbmVzW2tdKTtcclxuXHRcdFx0aWYgKHJlc3VsdCA9PT0gSW50ZXJzZWN0Lk9VVFNJREUpIHtcclxuXHRcdFx0XHRyZXR1cm4gSW50ZXJzZWN0Lk9VVFNJREU7XHJcblx0XHRcdH0gZWxzZSBpZiAocmVzdWx0ID09PSBJbnRlcnNlY3QuSU5URVJTRUNUSU5HKSB7XHJcblx0XHRcdFx0aW50ZXJzZWN0aW5nID0gdHJ1ZTtcclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cclxuXHRcdHJldHVybiBpbnRlcnNlY3RpbmcgPyBJbnRlcnNlY3QuSU5URVJTRUNUSU5HIDogSW50ZXJzZWN0LklOU0lERTtcclxuXHR9XHJcbn1cclxuXHJcbmNvbnN0IGZhY2VzID0gW25ldyBWZWN0b3IzKCksIG5ldyBWZWN0b3IzKCksIG5ldyBWZWN0b3IzKCldO1xyXG5WZWN0b3IzLmNsb25lKFZlY3RvcjMuVU5JVF9YLCBmYWNlc1swXSk7XHJcblZlY3RvcjMuY2xvbmUoVmVjdG9yMy5VTklUX1ksIGZhY2VzWzFdKTtcclxuVmVjdG9yMy5jbG9uZShWZWN0b3IzLlVOSVRfWiwgZmFjZXNbMl0pO1xyXG5cclxuY29uc3Qgc2NyYXRjaFBsYW5lQ2VudGVyID0gbmV3IFZlY3RvcjMoKTtcclxuY29uc3Qgc2NyYXRjaFBsYW5lTm9ybWFsID0gbmV3IFZlY3RvcjMoKTtcclxuY29uc3Qgc2NyYXRjaFBsYW5lcyA9IG5ldyBWZWN0b3I0KCk7XHJcbmNvbnN0IHNjcmF0Y2hQbGFuZSA9IG5ldyBQbGFuZShuZXcgVmVjdG9yMygxLjAsIDAuMCwgMC4wKSwgMC4wKTtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IEN1bGxpbmdWb2x1bWU7XHJcbiIsImltcG9ydCBDdWxsaW5nVm9sdW1lIGZyb20gXCIuLi9jb3JlL0N1bGxpbmdWb2x1bWVcIjtcbmltcG9ydCBSZW5kZXJPYmplY3QgZnJvbSBcIi4uL2NvcmUvUmVuZGVyT2JqZWN0XCI7XG5pbXBvcnQgeyBSZW5kZXJPYmplY3RUeXBlLCBVbmlmb3JtRW51bSB9IGZyb20gXCIuLi9jb3JlL1dlYkdQVVR5cGVzXCI7XG5pbXBvcnQgTWF0cml4NCBmcm9tIFwiLi4vbWF0aC9NYXRyaXg0XCI7XG5pbXBvcnQgUGxhbmUgZnJvbSBcIi4uL21hdGgvUGxhbmVcIjtcbmltcG9ydCBWZWN0b3IzIGZyb20gXCIuLi9tYXRoL1ZlY3RvcjNcIjtcbmltcG9ydCBTaGFkZXJEYXRhIGZyb20gXCIuLi9yZW5kZXIvU2hhZGVyRGF0YVwiO1xuaW1wb3J0IFVuaWZvcm1CdWZmZXIgZnJvbSBcIi4uL3JlbmRlci9Vbmlmb3JtQnVmZmVyXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIENhbWVyYSBleHRlbmRzIFJlbmRlck9iamVjdCB7XG5cdHByaXZhdGUgX3ZpZXdNYXRyaXg6IE1hdHJpeDQ7XG5cdHByb3RlY3RlZCBfcHJvamVjdGlvbk1hdHJpeDogTWF0cml4NDtcblx0cHJpdmF0ZSBfdnBNYXRyaXg6IE1hdHJpeDQ7XG5cdGN1bGxpbmdWb2x1bWU6IEN1bGxpbmdWb2x1bWU7XG5cdHByb2plY3RNYXRyaXhEaXJ0eTogYm9vbGVhbjtcblx0c2hhZGVyRGF0YTogU2hhZGVyRGF0YTtcblx0bmVhcjogbnVtYmVyO1xuXHRmYXI6IG51bWJlcjtcblx0Y29uc3RydWN0b3IoKSB7XG5cdFx0c3VwZXIoKTtcblx0XHR0aGlzLl92aWV3TWF0cml4ID0gdW5kZWZpbmVkO1xuXHRcdHRoaXMudHlwZSA9IFJlbmRlck9iamVjdFR5cGUuQ2FtZXJhO1xuXHRcdHRoaXMuY3VsbGluZ1ZvbHVtZSA9IG5ldyBDdWxsaW5nVm9sdW1lKCk7XG5cdFx0dGhpcy5fdmlld01hdHJpeCA9IG5ldyBNYXRyaXg0KCk7XG5cdFx0dGhpcy5fdnBNYXRyaXggPSBuZXcgTWF0cml4NCgpO1xuXHRcdHRoaXMucHJvamVjdE1hdHJpeERpcnR5ID0gdHJ1ZTtcblx0XHR0aGlzLmNyZWF0ZVNoYWRlckRhdGEoKTtcblx0fVxuXHRnZXQgdmlld01hdHJpeCgpIHtcblx0XHR0aGlzLnVwZGF0ZU1hdHJpeCgpO1xuXHRcdE1hdHJpeDQuaW52ZXJzZSh0aGlzLm1vZGVsTWF0cml4LCB0aGlzLl92aWV3TWF0cml4KTtcblx0XHRyZXR1cm4gdGhpcy5fdmlld01hdHJpeDtcblx0fVxuXHRnZXQgcHJvamVjdGlvbk1hdHJpeCgpIHtcblx0XHR0aGlzLnVwZGF0ZVByb2plY3Rpb25NYXRyaXgoKTtcblx0XHRyZXR1cm4gdGhpcy5fcHJvamVjdGlvbk1hdHJpeDtcblx0fVxuXG5cdGdldCB2cE1hdHJpeCgpIHtcblx0XHRNYXRyaXg0Lm11bHRpcGx5KHRoaXMucHJvamVjdGlvbk1hdHJpeCwgdGhpcy52aWV3TWF0cml4LCB0aGlzLl92cE1hdHJpeCk7XG5cdFx0cmV0dXJuIHRoaXMuX3ZwTWF0cml4O1xuXHR9XG5cblx0Z2V0IGludmVyc2VWaWV3TWF0cml4KCkge1xuXHRcdHRoaXMudXBkYXRlTWF0cml4KCk7XG5cdFx0cmV0dXJuIHRoaXMubW9kZWxNYXRyaXg7XG5cdH1cblx0cHVibGljIHVwZGF0ZVByb2plY3Rpb25NYXRyaXgoKSB7fVxuXHQvKipcblx0ICogZ2V0IGEgY3VsbGluZyB2b2x1bWUgZm9yIHRoaXMgZnJ1c3R1bS5cblx0ICovXG5cdGdldEN1bGxpbmdWb2x1bWUoKSB7XG5cdFx0Y29uc3QgY2xvbmVWaWV3TWF0cml4ID0gdGhpcy52aWV3TWF0cml4LmNsb25lKG5ldyBNYXRyaXg0KCkpO1xuXHRcdGNvbnN0IHZwTWF0cml4ID0gTWF0cml4NC5tdWx0aXBseSh0aGlzLnByb2plY3Rpb25NYXRyaXgsIGNsb25lVmlld01hdHJpeCwgbmV3IE1hdHJpeDQoKSk7XG5cdFx0Y29uc3QgcGxhbmVzID0gdGhpcy5jdWxsaW5nVm9sdW1lLnBsYW5lcztcblx0XHRjb25zdCBtZSA9IHZwTWF0cml4O1xuXHRcdGNvbnN0IG1lMCA9IG1lWzBdLFxuXHRcdFx0bWUxID0gbWVbMV0sXG5cdFx0XHRtZTIgPSBtZVsyXSxcblx0XHRcdG1lMyA9IG1lWzNdO1xuXHRcdGNvbnN0IG1lNCA9IG1lWzRdLFxuXHRcdFx0bWU1ID0gbWVbNV0sXG5cdFx0XHRtZTYgPSBtZVs2XSxcblx0XHRcdG1lNyA9IG1lWzddO1xuXHRcdGNvbnN0IG1lOCA9IG1lWzhdLFxuXHRcdFx0bWU5ID0gbWVbOV0sXG5cdFx0XHRtZTEwID0gbWVbMTBdLFxuXHRcdFx0bWUxMSA9IG1lWzExXTtcblx0XHRjb25zdCBtZTEyID0gbWVbMTJdLFxuXHRcdFx0bWUxMyA9IG1lWzEzXSxcblx0XHRcdG1lMTQgPSBtZVsxNF0sXG5cdFx0XHRtZTE1ID0gbWVbMTVdO1xuXHRcdHBsYW5lc1swXSA9IG5ldyBQbGFuZShuZXcgVmVjdG9yMyhtZTMgLSBtZTAsIG1lNyAtIG1lNCwgbWUxMSAtIG1lOCksIG1lMTUgLSBtZTEyKTtcblx0XHRwbGFuZXNbMF0ubm9ybWFsaXplKCk7XG5cdFx0cGxhbmVzWzFdID0gbmV3IFBsYW5lKG5ldyBWZWN0b3IzKG1lMyArIG1lMCwgbWU3ICsgbWU0LCBtZTExICsgbWU4KSwgbWUxNSArIG1lMTIpO1xuXHRcdHBsYW5lc1sxXS5ub3JtYWxpemUoKTtcblxuXHRcdHBsYW5lc1syXSA9IG5ldyBQbGFuZShuZXcgVmVjdG9yMyhtZTMgKyBtZTEsIG1lNyArIG1lNSwgbWUxMSArIG1lOSksIG1lMTUgKyBtZTEzKTtcblx0XHRwbGFuZXNbMl0ubm9ybWFsaXplKCk7XG5cblx0XHRwbGFuZXNbM10gPSBuZXcgUGxhbmUobmV3IFZlY3RvcjMobWUzIC0gbWUxLCBtZTcgLSBtZTUsIG1lMTEgLSBtZTkpLCBtZTE1IC0gbWUxMyk7XG5cdFx0cGxhbmVzWzNdLm5vcm1hbGl6ZSgpO1xuXG5cdFx0cGxhbmVzWzRdID0gbmV3IFBsYW5lKG5ldyBWZWN0b3IzKG1lMyAtIG1lMiwgbWU3IC0gbWU2LCBtZTExIC0gbWUxMCksIG1lMTUgLSBtZTE0KTtcblx0XHRwbGFuZXNbNF0ubm9ybWFsaXplKCk7XG5cblx0XHRwbGFuZXNbNV0gPSBuZXcgUGxhbmUobmV3IFZlY3RvcjMobWUzICsgbWUyLCBtZTcgKyBtZTYsIG1lMTEgKyBtZTEwKSwgbWUxNSArIG1lMTQpO1xuXHRcdHBsYW5lc1s1XS5ub3JtYWxpemUoKTtcblxuXHRcdHJldHVybiB0aGlzLmN1bGxpbmdWb2x1bWU7XG5cdH1cblxuXHRjcmVhdGVTaGFkZXJEYXRhKCkge1xuXHRcdHRoaXMuc2hhZGVyRGF0YSA9IG5ldyBTaGFkZXJEYXRhKFwiY2FtZXJhXCIsIDAsIDEsIDEpO1xuXHRcdGNvbnN0IHVuaWZvcm1CdWZmZXIgPSBuZXcgVW5pZm9ybUJ1ZmZlcih7IGxhYmVsOiBcImNhbWVyYVwiIH0pO1xuXHRcdHVuaWZvcm1CdWZmZXIuc2V0VW5pZm9ybShcblx0XHRcdFwicHJvamVjdGlvbk1hdHJpeFwiLFxuXHRcdFx0KCkgPT4ge1xuXHRcdFx0XHRyZXR1cm4gdGhpcy5wcm9qZWN0aW9uTWF0cml4O1xuXHRcdFx0fSxcblx0XHRcdFVuaWZvcm1FbnVtLk1hdDRcblx0XHQpO1xuXHRcdHVuaWZvcm1CdWZmZXIuc2V0VW5pZm9ybShcblx0XHRcdFwidmlld01hdHJpeFwiLFxuXHRcdFx0KCkgPT4ge1xuXHRcdFx0XHRyZXR1cm4gdGhpcy52aWV3TWF0cml4O1xuXHRcdFx0fSxcblx0XHRcdFVuaWZvcm1FbnVtLk1hdDRcblx0XHQpO1xuXHRcdHVuaWZvcm1CdWZmZXIuc2V0VW5pZm9ybShcblx0XHRcdFwiaW52ZXJzZVZpZXdNYXRyaXhcIixcblx0XHRcdCgpID0+IHtcblx0XHRcdFx0cmV0dXJuIHRoaXMuaW52ZXJzZVZpZXdNYXRyaXg7XG5cdFx0XHR9LFxuXHRcdFx0VW5pZm9ybUVudW0uTWF0NFxuXHRcdCk7XG5cdFx0dW5pZm9ybUJ1ZmZlci5zZXRVbmlmb3JtKFxuXHRcdFx0XCJwb3NpdGlvblwiLFxuXHRcdFx0KCkgPT4ge1xuXHRcdFx0XHRyZXR1cm4gdGhpcy5wb3NpdGlvbjtcblx0XHRcdH0sXG5cdFx0XHRVbmlmb3JtRW51bS5GbG9hdFZlYzNcblx0XHQpO1xuXHRcdHRoaXMuc2hhZGVyRGF0YS5zZXRVbmlmb3JtQnVmZmVyKFwiY2FtZXJhXCIsIHVuaWZvcm1CdWZmZXIpO1xuXHR9XG59XG4iLCJpbXBvcnQgQ3VsbGluZ1ZvbHVtZSBmcm9tIFwiLi4vY29yZS9DdWxsaW5nVm9sdW1lXCI7XHJcbmltcG9ydCBHTWF0aCBmcm9tIFwiLi4vbWF0aC9NYXRoXCI7XHJcbmltcG9ydCBNYXRyaXg0IGZyb20gXCIuLi9tYXRoL01hdHJpeDRcIjtcclxuaW1wb3J0IENhbWVyYSBmcm9tIFwiLi9DYW1lcmFcIjtcclxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgUGVyc3BlY3RpdmVDYW1lcmEgZXh0ZW5kcyBDYW1lcmEge1xyXG5cdHhPZmZzZXQ6IG51bWJlcjtcclxuXHR5T2Zmc2V0OiBudW1iZXI7XHJcblx0Y3VsbGluZ1ZvbHVtZTogQ3VsbGluZ1ZvbHVtZTtcclxuXHRwcml2YXRlIF9hc3BlY3Q6IG51bWJlcjtcclxuXHRwcml2YXRlIF9mb3Y6IG51bWJlcjtcclxuXHRoZWlnaHQ6IG51bWJlcjtcclxuXHR3aWR0aDogbnVtYmVyO1xyXG5cdGlzUGVyc3BlY3RpdmVDYW1lcmE6IGJvb2xlYW47XHJcblx0bmVhcjogbnVtYmVyO1xyXG5cdGZhcjogbnVtYmVyO1xyXG5cdHRvcDogbnVtYmVyO1xyXG5cdGxlZnQ6IG51bWJlcjtcclxuXHRjb25zdHJ1Y3Rvcihmb3YgPSA1MCwgYXNwZWN0ID0gMSwgbmVhciA9IDAuMSwgZmFyID0gMjAwMCkge1xyXG5cdFx0c3VwZXIoKTtcclxuXHRcdHRoaXMuX2FzcGVjdCA9IGFzcGVjdDtcclxuXHRcdHRoaXMuZm92ID0gZm92O1xyXG5cdFx0dGhpcy5uZWFyID0gbmVhcjtcclxuXHRcdHRoaXMuZmFyID0gZmFyO1xyXG5cdFx0dGhpcy54T2Zmc2V0ID0gMDtcclxuXHRcdHRoaXMueU9mZnNldCA9IDA7XHJcblx0XHR0aGlzLnByb2plY3RNYXRyaXhEaXJ0eSA9IHRydWU7XHJcblx0XHR0aGlzLnVwZGF0ZUNhbWVyYVBhcm1zKCk7XHJcblx0XHR0aGlzLmN1bGxpbmdWb2x1bWUgPSBuZXcgQ3VsbGluZ1ZvbHVtZSgpO1xyXG5cdFx0dGhpcy5pc1BlcnNwZWN0aXZlQ2FtZXJhID0gdHJ1ZTtcclxuXHR9XHJcblx0Z2V0IGFzcGVjdCgpOiBudW1iZXIge1xyXG5cdFx0cmV0dXJuIHRoaXMuX2FzcGVjdDtcclxuXHR9XHJcblxyXG5cdHNldCBhc3BlY3QodjogbnVtYmVyKSB7XHJcblx0XHR0aGlzLnByb2plY3RNYXRyaXhEaXJ0eSA9IHRydWU7XHJcblx0XHR0aGlzLl9hc3BlY3QgPSB2O1xyXG5cdH1cclxuXHRnZXQgZm92KCk6IG51bWJlciB7XHJcblx0XHRyZXR1cm4gdGhpcy5fZm92O1xyXG5cdH1cclxuXHJcblx0c2V0IGZvdih2OiBudW1iZXIpIHtcclxuXHRcdHRoaXMucHJvamVjdE1hdHJpeERpcnR5ID0gdHJ1ZTtcclxuXHRcdHRoaXMuX2ZvdiA9IHY7XHJcblx0fVxyXG5cdHByaXZhdGUgdXBkYXRlQ2FtZXJhUGFybXMoKSB7XHJcblx0XHR0aGlzLnRvcCA9IHRoaXMubmVhciAqIE1hdGgudGFuKDAuNSAqIEdNYXRoLlJBRElBTlNfUEVSX0RFR1JFRSAqIHRoaXMuZm92KTtcclxuXHRcdHRoaXMuaGVpZ2h0ID0gMiAqIHRoaXMudG9wO1xyXG5cdFx0dGhpcy53aWR0aCA9IHRoaXMuYXNwZWN0ICogdGhpcy5oZWlnaHQ7XHJcblx0XHR0aGlzLmxlZnQgPSAtMC41ICogdGhpcy53aWR0aDtcclxuXHR9XHJcblx0cHVibGljIHVwZGF0ZVByb2plY3Rpb25NYXRyaXgoKSB7XHJcblx0XHRpZiAodGhpcy5wcm9qZWN0TWF0cml4RGlydHkpIHtcclxuXHRcdFx0dGhpcy51cGRhdGVDYW1lcmFQYXJtcygpO1xyXG5cdFx0XHR0aGlzLl9wcm9qZWN0aW9uTWF0cml4ID0gTWF0cml4NC5tYWtlUGVyc3BlY3RpdmUoXHJcblx0XHRcdFx0dGhpcy5sZWZ0LFxyXG5cdFx0XHRcdHRoaXMubGVmdCArIHRoaXMud2lkdGgsXHJcblx0XHRcdFx0dGhpcy50b3AsXHJcblx0XHRcdFx0dGhpcy50b3AgLSB0aGlzLmhlaWdodCxcclxuXHRcdFx0XHR0aGlzLm5lYXIsXHJcblx0XHRcdFx0dGhpcy5mYXJcclxuXHRcdFx0KTtcclxuXHRcdFx0dGhpcy5wcm9qZWN0TWF0cml4RGlydHkgPSBmYWxzZTtcclxuXHRcdH1cclxuXHR9XHJcbn1cclxuIiwiaW1wb3J0IHsgQnVmZmVyVXNhZ2UgfSBmcm9tIFwiLi4vY29yZS9XZWJHUFVDb25zdGFudFwiO1xuaW1wb3J0IHsgVW5pZm9ybUVudW0gfSBmcm9tIFwiLi4vY29yZS9XZWJHUFVUeXBlc1wiO1xuaW1wb3J0IE1hdHJpeDQgZnJvbSBcIi4uL21hdGgvTWF0cml4NFwiO1xuaW1wb3J0IFNoYWRlckRhdGEgZnJvbSBcIi4uL3JlbmRlci9TaGFkZXJEYXRhXCI7XG5pbXBvcnQgVW5pZm9ybUJ1ZmZlciBmcm9tIFwiLi4vcmVuZGVyL1VuaWZvcm1CdWZmZXJcIjtcbmltcG9ydCBQZXJzcGVjdGl2ZUNhbWVyYSBmcm9tIFwiLi9QZXJzcGVjdGl2ZUNhbWVyYVwiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBQb2ludExpZ2h0U2hhZG93Q2FtZXJhIGV4dGVuZHMgUGVyc3BlY3RpdmVDYW1lcmEge1xuXHRwdWJsaWMgdnBNYXRyaXhBcnJheTogQXJyYXk8TWF0cml4ND47XG5cdHB1YmxpYyB2cE1hdHJpeEluZGV4QXJyYXk6IEFycmF5PG51bWJlcj47XG5cblx0Y29uc3RydWN0b3IoZm92ID0gNTAsIGFzcGVjdCA9IDEsIG5lYXIgPSAwLjEsIGZhciA9IDIwMDApIHtcblx0XHRzdXBlcihmb3YsIGFzcGVjdCwgbmVhciwgZmFyKTtcblx0XHR0aGlzLnZwTWF0cml4QXJyYXkgPSBbbmV3IE1hdHJpeDQoKSwgbmV3IE1hdHJpeDQoKSwgbmV3IE1hdHJpeDQoKSwgbmV3IE1hdHJpeDQoKSwgbmV3IE1hdHJpeDQoKSwgbmV3IE1hdHJpeDQoKV07XG5cdH1cblxuXHQvLyBjcmVhdGVTaGFkZXJEYXRhKCkge1xuXHQvLyBcdHRoaXMuc2hhZGVyRGF0YSA9IG5ldyBTaGFkZXJEYXRhKFwiY2FtZXJhXCIsIDAsIDEsIDEpO1xuXG5cdC8vIFx0Y29uc3QgdW5pZm9ybUJ1ZmZlciA9IG5ldyBVbmlmb3JtQnVmZmVyKHtcblx0Ly8gXHRcdGxhYmVsOiBcInBvaW50TGlnaHRTaGFkb3dDYW1lcmFcIixcblx0Ly8gXHRcdHR5cGU6IFwicmVhZC1vbmx5LXN0b3JhZ2VcIixcblx0Ly8gXHRcdHVzYWdlOiBCdWZmZXJVc2FnZS5TdG9yYWdlIHwgQnVmZmVyVXNhZ2UuQ29weURzdCxcblx0Ly8gXHRcdGhhc0R5bmFtaWNPZmZzZXQ6IHRydWUsXG5cdC8vIFx0XHRtaW5CaW5kaW5nU2l6ZTogNjQsXG5cdC8vIFx0XHRtYXhPZmZzZXQ6IDYsXG5cdC8vIFx0XHRzaXplOiAyNTYgKiA2XG5cdC8vIFx0fSk7XG5cdC8vIFx0dW5pZm9ybUJ1ZmZlci5zZXRNYXRyaXg0QXJyYXkoXG5cdC8vIFx0XHRcInZwTWF0cml4QXJyYXlcIixcblx0Ly8gXHRcdCgpID0+IHtcblx0Ly8gXHRcdFx0aWYgKHRoaXMudnBNYXRyaXhBcnJheS5sZW5ndGggIT0gNikgdGhyb3cgbmV3IEVycm9yKFwicG9pbnRMaWdodFNoYWRvd0NhbWVyYSB1bmlmb3JtQnVmZmVyIGhhcyBFcnJvclwiKTtcblxuXHQvLyBcdFx0XHRyZXR1cm4gdGhpcy52cE1hdHJpeEFycmF5O1xuXHQvLyBcdFx0fSxcblx0Ly8gXHRcdDYsXG5cdC8vIFx0XHQyNTZcblx0Ly8gXHQpO1xuXG5cdC8vIFx0dGhpcy5zaGFkZXJEYXRhLnNldFVuaWZvcm1CdWZmZXIoXCJwb2ludExpZ2h0U2hhZG93Q2FtZXJhXCIsIHVuaWZvcm1CdWZmZXIpO1xuXHQvLyBcdHRoaXMuc2hhZGVyRGF0YS5zZXREZWZpbmUoXCJpc1BvaW50TGlnaHRTaGFkb3dNYXBcIiwgdHJ1ZSk7XG5cdC8vIH1cblxuXHRjcmVhdGVTaGFkZXJEYXRhKCkge1xuXHRcdHRoaXMuc2hhZGVyRGF0YSA9IG5ldyBTaGFkZXJEYXRhKFwiY2FtZXJhXCIsIDAsIDEsIDEpO1xuXG5cdFx0Y29uc3QgdW5pZm9ybUJ1ZmZlciA9IG5ldyBVbmlmb3JtQnVmZmVyKHtcblx0XHRcdGxhYmVsOiBcInBvaW50TGlnaHRTaGFkb3dDYW1lcmFcIixcblx0XHRcdHR5cGU6IFwicmVhZC1vbmx5LXN0b3JhZ2VcIixcblx0XHRcdHVzYWdlOiBCdWZmZXJVc2FnZS5TdG9yYWdlIHwgQnVmZmVyVXNhZ2UuQ29weURzdFxuXHRcdH0pO1xuXHRcdHVuaWZvcm1CdWZmZXIuc2V0VW5pZm9ybShcblx0XHRcdFwidnBNYXRyaXhcIixcblx0XHRcdCgpID0+IHtcblx0XHRcdFx0cmV0dXJuIHRoaXMudnBNYXRyaXg7XG5cdFx0XHR9LFxuXHRcdFx0VW5pZm9ybUVudW0uTWF0NFxuXHRcdCk7XG5cblx0XHR0aGlzLnNoYWRlckRhdGEuc2V0VW5pZm9ybUJ1ZmZlcihcInBvaW50TGlnaHRTaGFkb3dDYW1lcmFcIiwgdW5pZm9ybUJ1ZmZlcik7XG5cdFx0dGhpcy5zaGFkZXJEYXRhLnNldERlZmluZShcImlzUG9pbnRMaWdodFNoYWRvd01hcFwiLCB0cnVlKTtcblx0fVxuXG5cdHVwZGF0ZVZwTWF0cml4QXJyYXlBbmRJbmRleChpbmRleDogbnVtYmVyKSB7XG5cdFx0TWF0cml4NC5jbG9uZSh0aGlzLnZwTWF0cml4LCB0aGlzLnZwTWF0cml4QXJyYXlbaW5kZXhdKTtcblx0fVxufVxuIiwiaW1wb3J0IENhbWVyYSBmcm9tIFwiLi4vLi4vY2FtZXJhL0NhbWVyYVwiO1xyXG5pbXBvcnQgeyBUZXh0dXJlRm9ybWF0LCBUZXh0dXJlU2FtcGxlVHlwZSwgVGV4dHVyZVVzYWdlIH0gZnJvbSBcIi4uLy4uL2NvcmUvV2ViR1BVQ29uc3RhbnRcIjtcclxuaW1wb3J0IFZlY3RvcjIgZnJvbSBcIi4uLy4uL21hdGgvVmVjdG9yMlwiO1xyXG5pbXBvcnQgVmVjdG9yNCBmcm9tIFwiLi4vLi4vbWF0aC9WZWN0b3I0XCI7XHJcbmltcG9ydCBUZXh0dXJlIGZyb20gXCIuLi8uLi9yZW5kZXIvVGV4dHVyZVwiO1xyXG5pbXBvcnQgeyBMaWdodCB9IGZyb20gXCIuLi9MaWdodFwiO1xyXG5leHBvcnQgY2xhc3MgQmFzZVNoYWRvdyB7XHJcblx0cHJvdGVjdGVkIF9zaGFkb3dNYXBTaXplOiBWZWN0b3IyO1xyXG5cdHByb3RlY3RlZCBfY2FtZXJhOiBDYW1lcmE7XHJcblx0cHJvdGVjdGVkIF9zaGFkb3dNYXA6IFRleHR1cmU7XHJcblx0cHVibGljIHR5cGU6IHN0cmluZztcclxuXHRwdWJsaWMgX3ZpZXdwb3J0czogQXJyYXk8VmVjdG9yND47XHJcblx0cHVibGljIHZpZXdwb3J0U2l6ZTogVmVjdG9yMjtcclxuXHRwdWJsaWMgY3VycmVudFZpZXdwb3J0SW5kZXg6IG51bWJlcjtcclxuXHRwdWJsaWMgdmlld1BvcnREaXJ0eTogYm9vbGVhbjtcclxuXHRwdWJsaWMgdnBNYXRyaXhEaXJ0eTogYm9vbGVhbjtcclxuXHJcblx0Y29uc3RydWN0b3Ioc2hhZG93TWFwU2l6ZTogVmVjdG9yMiwgY2FtZXJhOiBDYW1lcmEpIHtcclxuXHRcdHRoaXMuX3NoYWRvd01hcFNpemUgPSBzaGFkb3dNYXBTaXplO1xyXG5cdFx0dGhpcy5fY2FtZXJhID0gY2FtZXJhO1xyXG5cdFx0dGhpcy52aWV3UG9ydERpcnR5ID0gdHJ1ZTtcclxuXHRcdHRoaXMudnBNYXRyaXhEaXJ0eSA9IHRydWU7XHJcblxyXG5cdFx0dGhpcy5faW5pdCgpO1xyXG5cdH1cclxuXHJcblx0Z2V0IGNhbWVyYSgpIHtcclxuXHRcdHJldHVybiB0aGlzLl9jYW1lcmE7XHJcblx0fVxyXG5cclxuXHRnZXQgc2hhZG93TWFwU2l6ZSgpIHtcclxuXHRcdHJldHVybiB0aGlzLl9zaGFkb3dNYXBTaXplO1xyXG5cdH1cclxuXHJcblx0Z2V0IHZpZXdwb3J0cygpIHtcclxuXHRcdHJldHVybiB0aGlzLl92aWV3cG9ydHM7XHJcblx0fVxyXG5cclxuXHRwdWJsaWMgZ2V0U2hhZG93TWFwVGV4dHVyZSgpIHtcclxuXHRcdHJldHVybiB0aGlzLl9zaGFkb3dNYXA7XHJcblx0fVxyXG5cclxuXHRwcm90ZWN0ZWQgX2luaXQoKSB7XHJcblx0XHR0aGlzLl9pbml0U2hhZG93TWFwVGV4dHVyZSgpO1xyXG5cdH1cclxuXHJcblx0cHJvdGVjdGVkIF9pbml0U2hhZG93TWFwVGV4dHVyZSgpIHtcclxuXHRcdHRoaXMuX2NyZWF0ZVNoYWRvd01hcFRleHR1cmUoKTtcclxuXHR9XHJcblxyXG5cdHByb3RlY3RlZCBfY3JlYXRlU2hhZG93TWFwVGV4dHVyZSgpIHtcclxuXHRcdHRoaXMuX3NoYWRvd01hcCA9IG5ldyBUZXh0dXJlKHtcclxuXHRcdFx0c2l6ZToge1xyXG5cdFx0XHRcdHdpZHRoOiB0aGlzLl9zaGFkb3dNYXBTaXplLngsXHJcblx0XHRcdFx0aGVpZ2h0OiB0aGlzLl9zaGFkb3dNYXBTaXplLnksXHJcblx0XHRcdFx0ZGVwdGg6IDFcclxuXHRcdFx0fSxcclxuXHRcdFx0Zml4ZWRTaXplOiB0cnVlLFxyXG5cdFx0XHRzYW1wbGVUeXBlOiBUZXh0dXJlU2FtcGxlVHlwZS5EZXB0aCxcclxuXHRcdFx0Zm9ybWF0OiBUZXh0dXJlRm9ybWF0LkRlcHRoMjRQbHVzLFxyXG5cdFx0XHR1c2FnZTogVGV4dHVyZVVzYWdlLlJlbmRlckF0dGFjaG1lbnQgfCBUZXh0dXJlVXNhZ2UuVGV4dHVyZUJpbmRpbmcgfCBUZXh0dXJlVXNhZ2UuQ29weVNyY1xyXG5cdFx0fSk7XHJcblx0fVxyXG5cclxuXHRwdWJsaWMgdXBkYXRlKGxpZ2h0OiBMaWdodCkge31cclxufVxyXG4iLCJpbXBvcnQgUG9pbnRMaWdodFNoYWRvd0NhbWVyYSBmcm9tIFwiLi4vLi4vY2FtZXJhL1BvaW50TGlnaHRTaGFkb3dDYW1lcmFcIjtcclxuaW1wb3J0IFZlY3RvcjIgZnJvbSBcIi4uLy4uL21hdGgvVmVjdG9yMlwiO1xyXG5pbXBvcnQgVmVjdG9yMyBmcm9tIFwiLi4vLi4vbWF0aC9WZWN0b3IzXCI7XHJcbmltcG9ydCBWZWN0b3I0IGZyb20gXCIuLi8uLi9tYXRoL1ZlY3RvcjRcIjtcclxuaW1wb3J0IHsgUG9pbnRMaWdodCB9IGZyb20gXCIuLi9Qb2ludExpZ2h0XCI7XHJcbmltcG9ydCB7IEJhc2VTaGFkb3cgfSBmcm9tIFwiLi9CYXNlU2hhZG93XCI7XHJcblxyXG5leHBvcnQgY2xhc3MgUG9pbnRMaWdodFNoYWRvdyBleHRlbmRzIEJhc2VTaGFkb3cge1xyXG5cdHB1YmxpYyB0eXBlOiBzdHJpbmc7XHJcblx0cHJpdmF0ZSBfcG9pbnRMaWdodFNoYWRvd0xvb2tEaXJlY3Rpb25zOiBBcnJheTxWZWN0b3IzPjtcclxuXHRwcml2YXRlIF9wb2ludExpZ2h0U2hhZG93VXBzOiBBcnJheTxWZWN0b3IzPjtcclxuXHR2cE1hdHJpeEFycmF5RGlydHk6IGJvb2xlYW47XHJcblxyXG5cdGdldCBjYW1lcmEoKTogUG9pbnRMaWdodFNoYWRvd0NhbWVyYSB7XHJcblx0XHRyZXR1cm4gdGhpcy5fY2FtZXJhIGFzIFBvaW50TGlnaHRTaGFkb3dDYW1lcmE7XHJcblx0fVxyXG5cclxuXHRjb25zdHJ1Y3RvcigpIHtcclxuXHRcdGNvbnN0IGNhbWVyYSA9IG5ldyBQb2ludExpZ2h0U2hhZG93Q2FtZXJhKDkwLCAxLCAwLjEsIDUwMCk7XHJcblx0XHRzdXBlcihuZXcgVmVjdG9yMigxNTM2LCAxMDI0KSwgY2FtZXJhKTtcclxuXHRcdHRoaXMudmlld3BvcnRTaXplID0gbmV3IFZlY3RvcjIoNTEyLCA1MTIpO1xyXG5cdFx0dGhpcy5jdXJyZW50Vmlld3BvcnRJbmRleCA9IDA7XHJcblx0XHR0aGlzLnR5cGUgPSBcInBvaW50TGlnaHRTaGFkb3dcIjtcclxuXHRcdHRoaXMudnBNYXRyaXhBcnJheURpcnR5ID0gdHJ1ZTtcclxuXHJcblx0XHR0aGlzLl92aWV3cG9ydHMgPSBbXHJcblx0XHRcdC8vIHBvc2l0aXZlIFggMFxyXG5cdFx0XHRuZXcgVmVjdG9yNCgwLCAwLCAxIC8gMywgMSAvIDIpLFxyXG5cdFx0XHQvLyBuZWdhdGl2ZSBYIDFcclxuXHRcdFx0bmV3IFZlY3RvcjQoMSwgMCwgMSAvIDMsIDEgLyAyKSxcclxuXHRcdFx0Ly8gcG9zaXRpdmUgWiAyXHJcblx0XHRcdG5ldyBWZWN0b3I0KDIsIDAsIDEgLyAzLCAxIC8gMiksXHJcblx0XHRcdC8vIG5lZ2F0aXZlIFogM1xyXG5cdFx0XHRuZXcgVmVjdG9yNCgwLCAxLCAxIC8gMywgMSAvIDIpLFxyXG5cdFx0XHQvLyBwb3NpdGl2ZSBZIDRcclxuXHRcdFx0bmV3IFZlY3RvcjQoMSwgMSwgMSAvIDMsIDEgLyAyKSxcclxuXHRcdFx0Ly8gbmVnYXRpdmUgWSA1XHJcblx0XHRcdG5ldyBWZWN0b3I0KDIsIDEsIDEgLyAzLCAxIC8gMilcclxuXHRcdF07XHJcblxyXG5cdFx0dGhpcy5fcG9pbnRMaWdodFNoYWRvd0xvb2tEaXJlY3Rpb25zID0gW1xyXG5cdFx0XHRuZXcgVmVjdG9yMygxLCAwLCAwKSxcclxuXHRcdFx0bmV3IFZlY3RvcjMoLTEsIDAsIDApLFxyXG5cdFx0XHRuZXcgVmVjdG9yMygwLCAwLCAxKSxcclxuXHRcdFx0bmV3IFZlY3RvcjMoMCwgMCwgLTEpLFxyXG5cdFx0XHRuZXcgVmVjdG9yMygwLCAxLCAwKSxcclxuXHRcdFx0bmV3IFZlY3RvcjMoMCwgLTEsIDApXHJcblx0XHRdO1xyXG5cclxuXHRcdHRoaXMuX3BvaW50TGlnaHRTaGFkb3dVcHMgPSBbXHJcblx0XHRcdG5ldyBWZWN0b3IzKDAsIDEsIDApLFxyXG5cdFx0XHRuZXcgVmVjdG9yMygwLCAxLCAwKSxcclxuXHRcdFx0bmV3IFZlY3RvcjMoMCwgMSwgMCksXHJcblx0XHRcdG5ldyBWZWN0b3IzKDAsIDEsIDApLFxyXG5cdFx0XHRuZXcgVmVjdG9yMygwLCAwLCAxKSxcclxuXHRcdFx0bmV3IFZlY3RvcjMoMCwgMCwgLTEpXHJcblx0XHRdO1xyXG5cdH1cclxuXHJcblx0cHVibGljIHVwZGF0ZShsaWdodDogUG9pbnRMaWdodCkge1xyXG5cdFx0dGhpcy51cGRhdGVNYXRyaWNlcyhsaWdodCk7XHJcblx0fVxyXG5cclxuXHR1cGRhdGVNYXRyaWNlcyhsaWdodDogUG9pbnRMaWdodCkge1xyXG5cdFx0aWYgKHRoaXMuY2FtZXJhIGluc3RhbmNlb2YgUG9pbnRMaWdodFNoYWRvd0NhbWVyYSkge1xyXG5cdFx0XHR0aGlzLmNhbWVyYS5wb3NpdGlvbi5jb3B5KGxpZ2h0LnBvc2l0aW9uKTtcclxuXHRcdFx0Y29uc3QgdGFyZ2V0ID0gVmVjdG9yMy5jbG9uZShsaWdodC5wb3NpdGlvbik7XHJcblx0XHRcdHRhcmdldC5hZGQodGhpcy5fcG9pbnRMaWdodFNoYWRvd0xvb2tEaXJlY3Rpb25zW3RoaXMuY3VycmVudFZpZXdwb3J0SW5kZXhdKTtcclxuXHRcdFx0dGhpcy5jYW1lcmEudXAuY29weSh0aGlzLl9wb2ludExpZ2h0U2hhZG93VXBzW3RoaXMuY3VycmVudFZpZXdwb3J0SW5kZXhdKTtcclxuXHRcdFx0Y29uc3QgeyB4LCB5LCB6IH0gPSB0YXJnZXQ7XHJcblx0XHRcdHRoaXMuY2FtZXJhLmxvb2tBdCh4LCB5LCB6KTtcclxuXHRcdFx0dGhpcy5jYW1lcmEudXBkYXRlTWF0cml4KCk7XHJcblx0XHRcdHRoaXMuY2FtZXJhLnVwZGF0ZVZwTWF0cml4QXJyYXlBbmRJbmRleCh0aGlzLmN1cnJlbnRWaWV3cG9ydEluZGV4KTtcclxuXHRcdFx0aWYgKHRoaXMuY3VycmVudFZpZXdwb3J0SW5kZXggPT0gNSkgdGhpcy52cE1hdHJpeEFycmF5RGlydHkgPSB0cnVlO1xyXG5cdFx0fVxyXG5cdH1cclxufVxyXG4iLCJpbXBvcnQgeyBMaWdodFR5cGUgfSBmcm9tIFwiLi4vY29yZS9XZWJHUFVUeXBlc1wiO1xyXG5pbXBvcnQgVmVjdG9yMyBmcm9tIFwiLi4vbWF0aC9WZWN0b3IzXCI7XHJcbmltcG9ydCB7IExpZ2h0IH0gZnJvbSBcIi4vTGlnaHRcIjtcclxuaW1wb3J0IHsgUG9pbnRMaWdodFNoYWRvdyB9IGZyb20gXCIuL3NoYWRvd3MvUG9pbnRMaWdodFNoYWRvd1wiO1xyXG5cclxuZXhwb3J0IGNsYXNzIFBvaW50TGlnaHQgZXh0ZW5kcyBMaWdodCB7XHJcblx0cHJpdmF0ZSBfZGlzdGFuY2U6IG51bWJlcjtcclxuXHRwcml2YXRlIF9kZWNheTogbnVtYmVyO1xyXG5cdGRpc3RhbmNlRGlydHk6IGJvb2xlYW47XHJcblx0ZGVjYXlEaXJ0eTogYm9vbGVhbjtcclxuXHJcblx0Z2V0IHNoYWRvdygpOiBQb2ludExpZ2h0U2hhZG93IHtcclxuXHRcdHJldHVybiB0aGlzLl9zaGFkb3cgYXMgUG9pbnRMaWdodFNoYWRvdztcclxuXHR9XHJcblxyXG5cdHNldCBzaGFkb3codmFsdWU6IFBvaW50TGlnaHRTaGFkb3cpIHtcclxuXHRcdHRoaXMuc2hhZG93RGlydHkgPSB0cnVlO1xyXG5cdFx0dGhpcy5fc2hhZG93ID0gdmFsdWU7XHJcblx0fVxyXG5cclxuXHRjb25zdHJ1Y3Rvcihjb2xvcjogVmVjdG9yMywgaW50ZW5zaXR5OiBudW1iZXIsIGRpc3RhbmNlID0gMCwgZGVjYXkgPSA0LCBvcGVuU2hhZG93ID0gdHJ1ZSkge1xyXG5cdFx0c3VwZXIoY29sb3IsIGludGVuc2l0eSk7XHJcblx0XHR0aGlzLl9kaXN0YW5jZSA9IGRpc3RhbmNlO1xyXG5cdFx0dGhpcy5fZGVjYXkgPSBkZWNheTtcclxuXHRcdHRoaXMuZGlzdGFuY2VEaXJ0eSA9IHRydWU7XHJcblx0XHR0aGlzLmRlY2F5RGlydHkgPSB0cnVlO1xyXG5cdFx0dGhpcy5saWdodFR5cGUgPSBMaWdodFR5cGUuUG9pbnRMaWdodDtcclxuXHRcdGlmIChvcGVuU2hhZG93KSB0aGlzLnNoYWRvdyA9IG5ldyBQb2ludExpZ2h0U2hhZG93KCk7XHJcblx0fVxyXG5cdHNldCBkaXN0YW5jZSh2YWx1ZSkge1xyXG5cdFx0dGhpcy5kaXN0YW5jZURpcnR5ID0gdHJ1ZTtcclxuXHRcdHRoaXMuX2Rpc3RhbmNlID0gdmFsdWU7XHJcblx0fVxyXG5cdGdldCBkaXN0YW5jZSgpIHtcclxuXHRcdHJldHVybiB0aGlzLl9kaXN0YW5jZTtcclxuXHR9XHJcblx0c2V0IGRlY2F5KHZhbHVlKSB7XHJcblx0XHR0aGlzLmRlY2F5RGlydHkgPSB0cnVlO1xyXG5cdFx0dGhpcy5fZGVjYXkgPSB2YWx1ZTtcclxuXHR9XHJcblx0Z2V0IGRlY2F5KCkge1xyXG5cdFx0cmV0dXJuIHRoaXMuX2RlY2F5O1xyXG5cdH1cclxufVxyXG4vLyB1bmlmb3JtXHJcbi8vIGNvbG9yOiB7fSxcclxuLy8gcG9zaXRpb246IHt9LFxyXG4vLyBkZWNheToge30sXHJcbi8vIGRpc3RhbmNlOiB7fVxyXG4iLCJpbXBvcnQgQ2FtZXJhIGZyb20gXCIuLi9jYW1lcmEvQ2FtZXJhXCI7XG5pbXBvcnQgeyBGcmFtZVN0YXRlIH0gZnJvbSBcIi4uL2NvcmUvRnJhbWVTdGF0ZVwiO1xuaW1wb3J0IExpZ2h0TWFuZ2VyIGZyb20gXCIuLi9jb3JlL0xpZ2h0TWFuZ2VyXCI7XG5pbXBvcnQgUmVuZGVyUXVldWUgZnJvbSBcIi4uL2NvcmUvUmVuZGVyUXVldWVcIjtcbmltcG9ydCB7IENvbW1hbmRTdWJUeXBlIH0gZnJvbSBcIi4uL2NvcmUvV2ViR1BVQ29uc3RhbnRcIjtcbmltcG9ydCB7IExpZ2h0IH0gZnJvbSBcIi4uL2xpZ2h0L0xpZ2h0XCI7XG5pbXBvcnQgeyBQb2ludExpZ2h0IH0gZnJvbSBcIi4uL2xpZ2h0L1BvaW50TGlnaHRcIjtcbmltcG9ydCB7IEJhc2VTaGFkb3cgfSBmcm9tIFwiLi4vbGlnaHQvc2hhZG93cy9CYXNlU2hhZG93XCI7XG5pbXBvcnQgeyBQb2ludExpZ2h0U2hhZG93IH0gZnJvbSBcIi4uL2xpZ2h0L3NoYWRvd3MvUG9pbnRMaWdodFNoYWRvd1wiO1xuaW1wb3J0IFNoYWRlck1hdGVyaWFsIGZyb20gXCIuLi9tYXRlcmlhbC9TaGFkZXJNYXRlcmlhbFwiO1xuaW1wb3J0IEF0dGFjaG1lbnQgZnJvbSBcIi4uL3JlbmRlci9BdHRhY2htZW50XCI7XG5pbXBvcnQgQ29udGV4dCBmcm9tIFwiLi4vcmVuZGVyL0NvbnRleHRcIjtcbmltcG9ydCBSZW5kZXJUYXJnZXQgZnJvbSBcIi4uL3JlbmRlci9SZW5kZXJUYXJnZXRcIjtcbmltcG9ydCBUZXh0dXJlIGZyb20gXCIuLi9yZW5kZXIvVGV4dHVyZVwiO1xuaW1wb3J0IGdldFZlcnRGcmFnIGZyb20gXCIuLi9zaGFkZXIvU2hhZGVyc1wiO1xuaW1wb3J0IFBhc3MgZnJvbSBcIi4vUGFzc1wiO1xuZXhwb3J0IGNsYXNzIFNoYWRvd1Bhc3MgZXh0ZW5kcyBQYXNzIHtcblx0cHVibGljIHNoYWRvd01hdGVyaWFsOiBTaGFkZXJNYXRlcmlhbDtcblx0X3Rlc3RUZXh0dXJlOiBUZXh0dXJlO1xuXHRjb25zdHJ1Y3Rvcihjb250ZXh0OiBDb250ZXh0KSB7XG5cdFx0c3VwZXIoY29udGV4dCk7XG5cdFx0dGhpcy5pbml0KGNvbnRleHQpO1xuXHR9XG5cdHJlbmRlcihmcmFtZVN0YXRlOiBGcmFtZVN0YXRlLCBjYW1lcmE/OiBDYW1lcmEpIHtcblx0XHRjb25zdCB7IHJlbmRlclF1ZXVlLCBjb250ZXh0LCBsaWdodE1hbmdlciB9ID0gZnJhbWVTdGF0ZTtcblx0XHRjb25zdCBsaWdodHMgPSBsaWdodE1hbmdlci5nZXRBbGxMaWdodHMoKTtcblx0XHRpZiAobGlnaHRzLmxlbmd0aCA9PT0gMCkgcmV0dXJuO1xuXG5cdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCBsaWdodHMubGVuZ3RoOyBpKyspIHtcblx0XHRcdGNvbnN0IGxpZ2h0OiBQb2ludExpZ2h0IHwgTGlnaHQgPSBsaWdodHNbaV07XG5cdFx0XHRjb25zdCBzaGFkb3cgPSBsaWdodC5zaGFkb3c7XG5cdFx0XHRpZiAoIXNoYWRvdykgY29udGludWU7XG5cdFx0XHQvLyB0aGlzLl90ZXN0VGV4dHVyZSA9IGNvbnRleHQubGlnaHRNYW5nZXIuX3Rlc3RUZXh0dXJlXG5cdFx0XHQvLyB0aGlzLmJlZm9yZVJlbmRlcih7IHNoYWRvdyB9KTtcblx0XHRcdGlmIChzaGFkb3cgaW5zdGFuY2VvZiBQb2ludExpZ2h0U2hhZG93ICYmIGxpZ2h0IGluc3RhbmNlb2YgUG9pbnRMaWdodCkge1xuXHRcdFx0XHRmb3IgKGxldCBpID0gMDsgaSA8IHNoYWRvdy52aWV3cG9ydHMubGVuZ3RoOyBpKyspIHtcblx0XHRcdFx0XHQvLyDliqjmgIFidWZmZXLmmoLmnKrosIPpgJrvvIzlhYjku6XmraTnp43mlrnlvI/op6PlhrNcblx0XHRcdFx0XHRzd2l0Y2ggKGkpIHtcblx0XHRcdFx0XHRcdGNhc2UgMDpcblx0XHRcdFx0XHRcdFx0dGhpcy5yZW5kZXJUYXJnZXQuZGVwdGhBdHRhY2htZW50Lm9wID0gXCJjbGVhclwiO1xuXHRcdFx0XHRcdFx0XHRicmVhaztcblxuXHRcdFx0XHRcdFx0ZGVmYXVsdDpcblx0XHRcdFx0XHRcdFx0dGhpcy5yZW5kZXJUYXJnZXQuZGVwdGhBdHRhY2htZW50Lm9wID0gXCJsb2FkXCI7XG5cdFx0XHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRcdH1cblx0XHRcdFx0XHR0aGlzLmJlZm9yZVJlbmRlcih7IHNoYWRvdyB9KTtcblxuXHRcdFx0XHRcdGNvbnN0IHZpZXdwb3J0ID0gc2hhZG93LnZpZXdwb3J0c1tpXTtcblx0XHRcdFx0XHRjb25zdCB2aWV3cG9ydFNpemUgPSBzaGFkb3cudmlld3BvcnRTaXplO1xuXHRcdFx0XHRcdHNoYWRvdy5jdXJyZW50Vmlld3BvcnRJbmRleCA9IGk7XG5cdFx0XHRcdFx0c2hhZG93LnVwZGF0ZShsaWdodCk7XG5cdFx0XHRcdFx0Ly8gbGlnaHQuZm9yY2VVcGRhdGUgPSB0cnVlO1xuXHRcdFx0XHRcdGNvbnRleHQuc2V0Vmlld1BvcnQoXG5cdFx0XHRcdFx0XHR2aWV3cG9ydC54ICogdmlld3BvcnRTaXplLngsXG5cdFx0XHRcdFx0XHR2aWV3cG9ydC55ICogdmlld3BvcnRTaXplLnksXG5cdFx0XHRcdFx0XHR2aWV3cG9ydFNpemUueCxcblx0XHRcdFx0XHRcdHZpZXdwb3J0U2l6ZS55XG5cdFx0XHRcdFx0KTtcblx0XHRcdFx0XHRjb250ZXh0LnNldFNjaXNzb3JUZXN0KFxuXHRcdFx0XHRcdFx0dmlld3BvcnQueCAqIHZpZXdwb3J0U2l6ZS54LFxuXHRcdFx0XHRcdFx0dmlld3BvcnQueSAqIHZpZXdwb3J0U2l6ZS55LFxuXHRcdFx0XHRcdFx0dmlld3BvcnRTaXplLngsXG5cdFx0XHRcdFx0XHR2aWV3cG9ydFNpemUueVxuXHRcdFx0XHRcdCk7XG5cdFx0XHRcdFx0dGhpcy5zdWJSZW5kZXIocmVuZGVyUXVldWUsIHNoYWRvdywgbGlnaHRNYW5nZXIpO1xuXHRcdFx0XHRcdHN1cGVyLmFmdGVyUmVuZGVyKCk7XG5cdFx0XHRcdH1cblx0XHRcdH0gZWxzZSB7XG5cdFx0XHRcdHRoaXMucmVuZGVyVGFyZ2V0LmRlcHRoQXR0YWNobWVudC5vcCA9IFwiY2xlYXJcIjtcblx0XHRcdFx0dGhpcy5iZWZvcmVSZW5kZXIoeyBzaGFkb3cgfSk7XG5cdFx0XHRcdHNoYWRvdy51cGRhdGUobGlnaHQpO1xuXHRcdFx0XHRjb250ZXh0LnNldFZpZXdQb3J0KDAsIDAsIHNoYWRvdy5zaGFkb3dNYXBTaXplLngsIHNoYWRvdy5zaGFkb3dNYXBTaXplLnkpO1xuXHRcdFx0XHRjb250ZXh0LnNldFNjaXNzb3JUZXN0KDAsIDAsIHNoYWRvdy5zaGFkb3dNYXBTaXplLngsIHNoYWRvdy5zaGFkb3dNYXBTaXplLnkpO1xuXHRcdFx0XHR0aGlzLnN1YlJlbmRlcihyZW5kZXJRdWV1ZSwgc2hhZG93LCBsaWdodE1hbmdlcik7XG5cdFx0XHRcdHN1cGVyLmFmdGVyUmVuZGVyKCk7XG5cdFx0XHR9XG5cdFx0fVxuXHRcdC8vIHN1cGVyLmFmdGVyUmVuZGVyKCk7XG5cdFx0bGlnaHRNYW5nZXIudXBkYXRlTGlnaHRTaGFkb3coKTtcblx0XHRjb250ZXh0LnJlc2V0Vmlld1BvcnRUb0Z1bGxDYW52YXMoKTtcblx0fVxuXG5cdHN1YlJlbmRlcihyZW5kZXJRdWV1ZTogUmVuZGVyUXVldWUsIHNoYWRvdzogQmFzZVNoYWRvdywgbGlnaHRNYW5nZXI6IExpZ2h0TWFuZ2VyKSB7XG5cdFx0cmVuZGVyUXVldWUuc29ydCgpO1xuXHRcdC8vIHJlbmRlclF1ZXVlLnByZVJlbmRlcihzaGFkb3cuY2FtZXJhLCB0aGlzLmNvbnRleHQsIHRoaXMucGFzc1JlbmRlckVuY29kZXIpO1xuXHRcdHJlbmRlclF1ZXVlLnRyYW5zcGFyZW50UmVuZGVyKFxuXHRcdFx0c2hhZG93LmNhbWVyYSxcblx0XHRcdHRoaXMuY29udGV4dCxcblx0XHRcdHRoaXMucGFzc1JlbmRlckVuY29kZXIsXG5cdFx0XHR0aGlzLnNoYWRvd01hdGVyaWFsLFxuXHRcdFx0Q29tbWFuZFN1YlR5cGUuU2hhZG93LFxuXHRcdFx0bGlnaHRNYW5nZXJcblx0XHQpO1xuXHRcdHJlbmRlclF1ZXVlLm9wYXF1ZVJlbmRlcihcblx0XHRcdHNoYWRvdy5jYW1lcmEsXG5cdFx0XHR0aGlzLmNvbnRleHQsXG5cdFx0XHR0aGlzLnBhc3NSZW5kZXJFbmNvZGVyLFxuXHRcdFx0dGhpcy5zaGFkb3dNYXRlcmlhbCxcblx0XHRcdENvbW1hbmRTdWJUeXBlLlNoYWRvdyxcblx0XHRcdGxpZ2h0TWFuZ2VyXG5cdFx0KTtcblx0fVxuXG5cdC8vIGdldERlcHRoVGV4dHVyZSgpOiBUZXh0dXJlIHtcblx0Ly8gXHRyZXR1cm4gdGhpcy5fdGVzdFRleHR1cmU7XG5cdC8vIH1cblx0YmVmb3JlUmVuZGVyKG9wdGlvbnM6IHsgc2hhZG93OiBCYXNlU2hhZG93IH0pIHtcblx0XHRjb25zdCB7IHNoYWRvdyB9ID0gb3B0aW9ucztcblx0XHR0aGlzLnNldFJlbmRlclRhcmdldChzaGFkb3cpO1xuXHRcdHN1cGVyLmJlZm9yZVJlbmRlcigpO1xuXHR9XG5cdHB1YmxpYyBzZXRTaXplKHdpZHRoOiBudW1iZXIsIGhlaWdodDogbnVtYmVyKTogdm9pZCB7XG5cdFx0dGhpcy5yZW5kZXJUYXJnZXQuc2V0U2l6ZSh3aWR0aCwgaGVpZ2h0LCAxKTtcblx0fVxuXHRwcml2YXRlIHNldFJlbmRlclRhcmdldChzaGFkb3c6IEJhc2VTaGFkb3cpIHtcblx0XHR0aGlzLnJlbmRlclRhcmdldC5kZXB0aEF0dGFjaG1lbnQudGV4dHVyZSA9IHNoYWRvdy5nZXRTaGFkb3dNYXBUZXh0dXJlKCk7XG5cdH1cblxuXHRwcml2YXRlIGluaXQoY29udGV4dDogQ29udGV4dCkge1xuXHRcdHRoaXMuY3JlYXRlUmVuZGVyVGFyZ2V0KGNvbnRleHQpO1xuXHRcdHRoaXMuY3JlYXRlU2hhZG93TWF0ZXJpYWwoKTtcblx0fVxuXHRwcml2YXRlIGNyZWF0ZVJlbmRlclRhcmdldChjb250ZXh0OiBDb250ZXh0KSB7XG5cdFx0Y29uc3QgZGVwdGhBdHRhY2htZW50ID0gbmV3IEF0dGFjaG1lbnQoMS4wLCB7IHRleHR1cmU6IHVuZGVmaW5lZCB9KTtcblx0XHR0aGlzLnJlbmRlclRhcmdldCA9IG5ldyBSZW5kZXJUYXJnZXQoXCJyZW5kZXJcIiwgW10sIGRlcHRoQXR0YWNobWVudCk7XG5cdH1cblxuXHRwcml2YXRlIGNyZWF0ZVNoYWRvd01hdGVyaWFsKCkge1xuXHRcdGNvbnN0IHNoYWRvd01hcFNoYWRlckZ1bmN0aW9uID0gKGRlZmluZXMgPSB7fSkgPT4ge1xuXHRcdFx0Y29uc3QgZmluYWxEZWZpbmVzID0gT2JqZWN0LmFzc2lnbihcblx0XHRcdFx0e1xuXHRcdFx0XHRcdHNlbGZCaW5kaW5nOiAwLFxuXHRcdFx0XHRcdGNhbWVyYUJpbmRpbmc6IDAsXG5cdFx0XHRcdFx0cG9zaXRpb25Mb2NhdGlvbjogMFxuXHRcdFx0XHR9LFxuXHRcdFx0XHRkZWZpbmVzXG5cdFx0XHQpO1xuXHRcdFx0cmV0dXJuIGdldFZlcnRGcmFnKFwic2hhZG93TWFwXCIsIGZpbmFsRGVmaW5lcykudmVydDtcblx0XHR9O1xuXG5cdFx0dGhpcy5zaGFkb3dNYXRlcmlhbCA9IG5ldyBTaGFkZXJNYXRlcmlhbCh7XG5cdFx0XHR0eXBlOiBcInNoYWRvd01hdGVyaWFsXCIsXG5cdFx0XHR1bmlmb3Jtczoge1xuXHRcdFx0XHRtb2RlbE1hdHJpeDogeyB0eXBlOiBcIm1hdDR4NDxmMzI+XCIsIHZhbHVlOiBudWxsIH1cblx0XHRcdH0sXG5cdFx0XHR2ZXJ0OiBzaGFkb3dNYXBTaGFkZXJGdW5jdGlvbixcblx0XHRcdGZyYWc6IHVuZGVmaW5lZCxcblx0XHRcdGxpZ2h0OiBmYWxzZSAvLyBUT0RPOuWFiHRydWXvvIxmYWxzZeacieaYvuekumJ1Z1xuXHRcdH0pO1xuXHR9XG59XG4iLCJpbXBvcnQgQ2FtZXJhIGZyb20gXCIuLi9jYW1lcmEvQ2FtZXJhXCI7XG5pbXBvcnQgeyBGcmFtZVN0YXRlIH0gZnJvbSBcIi4uL2NvcmUvRnJhbWVTdGF0ZVwiO1xuaW1wb3J0IHsgQmFzaWNQYXNzIH0gZnJvbSBcIi4uL3Bhc3MvQmFzaWNQYXNzXCI7XG5pbXBvcnQgeyBTaGFkb3dQYXNzIH0gZnJvbSBcIi4uL3Bhc3MvU2hhZG93UGFzc1wiO1xuaW1wb3J0IENvbnRleHQgZnJvbSBcIi4uL3JlbmRlci9Db250ZXh0XCI7XG5pbXBvcnQgVGV4dHVyZSBmcm9tIFwiLi4vcmVuZGVyL1RleHR1cmVcIjtcbmltcG9ydCBJQmFzZVJlbmRlckxpbmUgZnJvbSBcIi4vSUJhc2VSZW5kZXJMaW5lXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEZvcndhcmRSZW5kZXJMaW5lIGltcGxlbWVudHMgSUJhc2VSZW5kZXJMaW5lIHtcblx0cHJpdmF0ZSBiYXNpY1Bhc3M6IEJhc2ljUGFzcztcblx0cHJvdGVjdGVkIHNoYWRvd1Bhc3M6IFNoYWRvd1Bhc3M7XG5cdGNvbnN0cnVjdG9yKHB1YmxpYyBjb250ZXh0OiBDb250ZXh0KSB7XG5cdFx0dGhpcy5iYXNpY1Bhc3MgPSBuZXcgQmFzaWNQYXNzKGNvbnRleHQpO1xuXHRcdHRoaXMuc2hhZG93UGFzcyA9IG5ldyBTaGFkb3dQYXNzKGNvbnRleHQpO1xuXHR9XG5cdGdldE91dHB1dFRleHR1cmUoKTogVGV4dHVyZSB7XG5cdFx0cmV0dXJuIHRoaXMuYmFzaWNQYXNzLmdldENvbG9yVGV4dHVyZSgwKTtcblx0XHQvLyByZXR1cm4gdGhpcy5zaGFkb3dQYXNzLmdldERlcHRoVGV4dHVyZSgpXG5cdH1cblx0cmVuZGVyKGZyYW1lU3RhdGU6IEZyYW1lU3RhdGUsIGNhbWVyYT86IENhbWVyYSkge1xuXHRcdHRoaXMuc2hhZG93UGFzcy5yZW5kZXIoZnJhbWVTdGF0ZSwgY2FtZXJhKTtcblxuXHRcdHRoaXMuYmFzaWNQYXNzLmJlZm9yZVJlbmRlcihmcmFtZVN0YXRlKTtcblx0XHR0aGlzLmJhc2ljUGFzcy5yZW5kZXIoZnJhbWVTdGF0ZSwgY2FtZXJhKTtcblx0XHR0aGlzLmJhc2ljUGFzcy5hZnRlclJlbmRlcigpO1xuXHR9XG5cdHNldFNpemUod2lkdGg6IG51bWJlciwgaGVpZ2h0OiBudW1iZXIpIHtcblx0XHR0aGlzLmJhc2ljUGFzcy5zZXRTaXplKHdpZHRoLCBoZWlnaHQpO1xuXHRcdHRoaXMuc2hhZG93UGFzcy5zZXRTaXplKHdpZHRoLCBoZWlnaHQpO1xuXHR9XG5cdGRlc3Ryb3koKSB7XG5cdFx0dGhpcy5iYXNpY1Bhc3MgPSB1bmRlZmluZWQ7XG5cdH1cbn1cbiIsImltcG9ydCBDYW1lcmEgZnJvbSBcIi4vY2FtZXJhL0NhbWVyYVwiO1xuaW1wb3J0IFBlcnNwZWN0aXZlQ2FtZXJhIGZyb20gXCIuL2NhbWVyYS9QZXJzcGVjdGl2ZUNhbWVyYVwiO1xuaW1wb3J0IHsgRXZlbnREaXNwYXRjaGVyIH0gZnJvbSBcIi4vY29yZS9FdmVudERpc3BhdGNoZXJcIjtcbmltcG9ydCB7IEZyYW1lU3RhdGUsIEJhY2tncm91bmQgfSBmcm9tIFwiLi9jb3JlL0ZyYW1lU3RhdGVcIjtcbmltcG9ydCBMaWdodE1hbmdlciBmcm9tIFwiLi9jb3JlL0xpZ2h0TWFuZ2VyXCI7XG5pbXBvcnQgTWVzaE1hbmdlciBmcm9tIFwiLi9jb3JlL01lc2hNYW5nZXJcIjtcbmltcG9ydCB0ZXh0dXJlQ2FjaGUgZnJvbSBcIi4vY29yZS9UZXh0dXJlQ2FjaGVcIjtcbmltcG9ydCB7IEluc3RhbmNlLCBSZW5kZXJPYmplY3RUeXBlIH0gZnJvbSBcIi4vY29yZS9XZWJHUFVUeXBlc1wiO1xuaW1wb3J0IHsgTGlnaHQgfSBmcm9tIFwiLi9saWdodC9MaWdodFwiO1xuaW1wb3J0IHsgTWVzaCB9IGZyb20gXCIuL21lc2gvTWVzaFwiO1xuaW1wb3J0IE5vZGUgZnJvbSBcIi4vbWVzaC9Ob2RlXCI7XG5pbXBvcnQgUG9zdEVmZmVjdCBmcm9tIFwiLi9wb3N0LXByb2Nlc3MvUG9zdEVmZmVjdFwiO1xuaW1wb3J0IFBvc3RFZmZlY3RDb2xsZWN0aW9uIGZyb20gXCIuL3Bvc3QtcHJvY2Vzcy9Qb3N0RWZmZWN0Q29sbGVjdGlvblwiO1xuaW1wb3J0IENvbnRleHQgZnJvbSBcIi4vcmVuZGVyL0NvbnRleHRcIjtcbmltcG9ydCB7IFZpZXdQb3J0IH0gZnJvbSBcIi4vcmVuZGVyL1JlbmRlclN0YXRlXCI7XG5pbXBvcnQgRm9yd2FyZFJlbmRlckxpbmUgZnJvbSBcIi4vcmVuZGVycGlwZWxpbmUvRm9yd2FyZFJlbmRlckxpbmVcIjtcbmltcG9ydCBJQmFzZVJlbmRlckxpbmUgZnJvbSBcIi4vcmVuZGVycGlwZWxpbmUvSUJhc2VSZW5kZXJMaW5lXCI7XG5cbmV4cG9ydCBjbGFzcyBTY2VuZSBleHRlbmRzIEV2ZW50RGlzcGF0Y2hlciB7XG5cdGNhbWVyYTogUGVyc3BlY3RpdmVDYW1lcmE7XG5cdGNvbnRleHQ6IENvbnRleHQ7XG5cdHJlcXVlc3RBZGFwdGVyOiBvYmplY3Q7XG5cdGRldmljZURlc2NyaXB0b3I6IG9iamVjdDtcblx0cHJlc2VudGF0aW9uQ29udGV4dERlc2NyaXB0b3I6IG9iamVjdDtcblx0Y29udGFpbmVyOiBIVE1MRGl2RWxlbWVudDtcblx0ZnJhbWVTdGF0ZTogRnJhbWVTdGF0ZTtcblx0Y3VycmVudFJlbmRlclBpcGVsaW5lOiBJQmFzZVJlbmRlckxpbmU7XG5cdHZpZXdwb3J0OiBWaWV3UG9ydDtcblx0YmFja2dyb3VuZDogQmFja2dyb3VuZDtcblx0cHJpdmF0ZSByZWFkeTogYm9vbGVhbjtcblx0cHJpdmF0ZSBpbml0ZWQ6IGJvb2xlYW47XG5cdHByaXZhdGUgbWVzaE1hbmdlcjogTWVzaE1hbmdlcjtcblx0cHJpdmF0ZSBwb3N0RWZmZWN0Q29sbGVjdGlvbjogUG9zdEVmZmVjdENvbGxlY3Rpb247XG5cdHByaXZhdGUgbGlnaHRNYW5nZXI6IExpZ2h0TWFuZ2VyO1xuXHRjb25zdHJ1Y3RvcihvcHRpb25zKSB7XG5cdFx0c3VwZXIoKTtcblx0XHR0aGlzLmNvbnRhaW5lciA9XG5cdFx0XHRvcHRpb25zLmNvbnRhaW5lciBpbnN0YW5jZW9mIEhUTUxEaXZFbGVtZW50XG5cdFx0XHRcdD8gb3B0aW9ucy5jb250YWluZXJcblx0XHRcdFx0OiBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChvcHRpb25zLmNvbnRhaW5lcik7XG5cdFx0dGhpcy5tZXNoTWFuZ2VyID0gbmV3IE1lc2hNYW5nZXIoKTtcblx0XHR0aGlzLnBvc3RFZmZlY3RDb2xsZWN0aW9uID0gbmV3IFBvc3RFZmZlY3RDb2xsZWN0aW9uKCk7XG5cdFx0dGhpcy5jb250ZXh0ID0gbmV3IENvbnRleHQoe1xuXHRcdFx0Y2FudmFzOiBudWxsLFxuXHRcdFx0Y29udGFpbmVyOiB0aGlzLmNvbnRhaW5lcixcblx0XHRcdHBpeGVsUmF0aW86IDFcblx0XHR9KTtcblx0XHR0aGlzLnJlcXVlc3RBZGFwdGVyID0gb3B0aW9ucy5yZXF1ZXN0QWRhcHRlciB8fCB7fTtcblx0XHR0aGlzLmRldmljZURlc2NyaXB0b3IgPSBvcHRpb25zLmRldmljZURlc2NyaXB0b3IgfHwge307XG5cdFx0dGhpcy5wcmVzZW50YXRpb25Db250ZXh0RGVzY3JpcHRvciA9IG9wdGlvbnMucHJlc2VudGF0aW9uQ29udGV4dERlc2NyaXB0b3I7XG5cdFx0dGhpcy5yZWFkeSA9IGZhbHNlO1xuXHRcdHRoaXMuaW5pdGVkID0gZmFsc2U7XG5cdFx0dGhpcy5saWdodE1hbmdlciA9IG5ldyBMaWdodE1hbmdlcih7IG9wZW5TaGFkb3c6IHRydWUgfSk7XG5cdFx0dGhpcy5iYWNrZ3JvdW5kID0gb3B0aW9ucy5iYWNrZ3JvdW5kO1xuXHR9XG5cdHByaXZhdGUgYXN5bmMgaW5pdCgpIHtcblx0XHRhd2FpdCB0aGlzLmNvbnRleHQuaW5pdCh0aGlzLnJlcXVlc3RBZGFwdGVyLCB0aGlzLmRldmljZURlc2NyaXB0b3IsIHRoaXMucHJlc2VudGF0aW9uQ29udGV4dERlc2NyaXB0b3IpO1xuXHRcdHRoaXMuY3VycmVudFJlbmRlclBpcGVsaW5lID0gbmV3IEZvcndhcmRSZW5kZXJMaW5lKHRoaXMuY29udGV4dCk7XG5cdFx0dGhpcy5mcmFtZVN0YXRlID0gbmV3IEZyYW1lU3RhdGUodGhpcy5jb250ZXh0LCB0aGlzLmxpZ2h0TWFuZ2VyLCBGcmFtZVN0YXRlLmdldEZyYW1lU3RhdGVPcHRpb25zQnlTY2VuZSh0aGlzKSk7XG5cdFx0dGhpcy52aWV3cG9ydCA9IG5ldyBWaWV3UG9ydCgwLCAwLCB0aGlzLmNvbnRleHQucHJlc2VudGF0aW9uU2l6ZS53aWR0aCwgdGhpcy5jb250ZXh0LnByZXNlbnRhdGlvblNpemUuaGVpZ2h0KTtcblx0XHR0aGlzLnJlYWR5ID0gdHJ1ZTtcblx0fVxuXHRhZGQoaW5zdGFuY2U6IEluc3RhbmNlKSB7XG5cdFx0aWYgKFxuXHRcdFx0W1JlbmRlck9iamVjdFR5cGUuTm9kZSwgUmVuZGVyT2JqZWN0VHlwZS5Ta3lib3gsIFJlbmRlck9iamVjdFR5cGUuTWVzaCwgUmVuZGVyT2JqZWN0VHlwZS5EZWJ1Z10uaW5jbHVkZXMoXG5cdFx0XHRcdGluc3RhbmNlLnR5cGVcblx0XHRcdClcblx0XHQpIHtcblx0XHRcdHRoaXMubWVzaE1hbmdlci5hZGQoPE1lc2g+aW5zdGFuY2UpO1xuXHRcdH0gZWxzZSBpZiAoaW5zdGFuY2UudHlwZSA9PSBSZW5kZXJPYmplY3RUeXBlLkxpZ2h0KSB7XG5cdFx0XHR0aGlzLmxpZ2h0TWFuZ2VyLmFkZCg8TGlnaHQ+aW5zdGFuY2UpO1xuXHRcdH0gZWxzZSBpZiAoaW5zdGFuY2UudHlwZSA9PSBSZW5kZXJPYmplY3RUeXBlLlBvc3RFZmZlY3QpIHtcblx0XHRcdHRoaXMucG9zdEVmZmVjdENvbGxlY3Rpb24uYWRkKDxQb3N0RWZmZWN0Pmluc3RhbmNlKTtcblx0XHR9XG5cdH1cblx0cmVtb3ZlKGluc3RhbmNlOiBJbnN0YW5jZSkge1xuXHRcdGlmIChbUmVuZGVyT2JqZWN0VHlwZS5Ob2RlLCBSZW5kZXJPYmplY3RUeXBlLlNreWJveCwgUmVuZGVyT2JqZWN0VHlwZS5NZXNoXS5pbmNsdWRlcyhpbnN0YW5jZS50eXBlKSkge1xuXHRcdFx0dGhpcy5tZXNoTWFuZ2VyLnJlbW92ZSg8TWVzaD5pbnN0YW5jZSk7XG5cdFx0fSBlbHNlIGlmIChpbnN0YW5jZS50eXBlID09IFJlbmRlck9iamVjdFR5cGUuTGlnaHQpIHtcblx0XHRcdHRoaXMubGlnaHRNYW5nZXIucmVtb3ZlKDxMaWdodD5pbnN0YW5jZSk7XG5cdFx0fSBlbHNlIGlmIChpbnN0YW5jZS50eXBlID09IFJlbmRlck9iamVjdFR5cGUuUG9zdEVmZmVjdCkge1xuXHRcdFx0dGhpcy5wb3N0RWZmZWN0Q29sbGVjdGlvbi5yZW1vdmUoPFBvc3RFZmZlY3Q+aW5zdGFuY2UpO1xuXHRcdH1cblx0fVxuXHRzZXRDYW1lcmEoY2FtZXJhKSB7XG5cdFx0dGhpcy5jYW1lcmEgPSBjYW1lcmE7XG5cdH1cblx0cmVzaXplKHdpZHRoOiBudW1iZXIsIGhlaWdodDogbnVtYmVyKSB7XG5cdFx0dGhpcy5jb250ZXh0LnJlc2l6ZSh3aWR0aCwgaGVpZ2h0KTtcblx0XHR0aGlzPy5jdXJyZW50UmVuZGVyUGlwZWxpbmU/LnNldFNpemUod2lkdGgsIGhlaWdodCk7XG5cdFx0dGhpcz8ucG9zdEVmZmVjdENvbGxlY3Rpb24/LnNldFNpemUod2lkdGgsIGhlaWdodCk7XG5cdH1cblx0YXN5bmMgcmVuZGVyKG5vZGU/OiBOb2RlLCBjYW1lcmE/OiBDYW1lcmEpIHtcblx0XHRpZiAoIXRoaXMuaW5pdGVkKSB7XG5cdFx0XHR0aGlzLmluaXRlZCA9IHRydWU7XG5cdFx0XHRhd2FpdCB0aGlzLmluaXQoKTtcblx0XHRcdHRoaXMudXBkYXRlKG5vZGUsIGNhbWVyYSk7XG5cdFx0XHR0aGlzLmFmdGVyUmVuZGVyKCk7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHRoaXMudXBkYXRlKG5vZGUsIGNhbWVyYSk7XG5cdFx0XHR0aGlzLmFmdGVyUmVuZGVyKCk7XG5cdFx0fVxuXHR9XG5cblx0YWZ0ZXJSZW5kZXIoKSB7XG5cdFx0Ly8gVE9ET1xuXHR9XG5cblx0cHVibGljIHNldFZpZXdQb3J0KHg6IG51bWJlciwgeTogbnVtYmVyLCB3aWR0aDogbnVtYmVyLCBoZWlnaHQ6IG51bWJlcik6IGJvb2xlYW4ge1xuXHRcdGlmICghdGhpcy5yZWFkeSkgcmV0dXJuIGZhbHNlO1xuXHRcdHRoaXMuY29udGV4dC5zZXRWaWV3UG9ydCh4LCB5LCB3aWR0aCwgaGVpZ2h0KTtcblx0XHRyZXR1cm4gdHJ1ZTtcblx0fVxuXHRwdWJsaWMgc2V0U2Npc3NvclRlc3QoeDogbnVtYmVyLCB5OiBudW1iZXIsIHdpZHRoOiBudW1iZXIsIGhlaWdodDogbnVtYmVyKTogYm9vbGVhbiB7XG5cdFx0aWYgKCF0aGlzLnJlYWR5KSByZXR1cm4gZmFsc2U7XG5cdFx0dGhpcy5jb250ZXh0LnNldFNjaXNzb3JUZXN0KHgsIHksIHdpZHRoLCBoZWlnaHQpO1xuXHRcdHJldHVybiB0cnVlO1xuXHR9XG5cdHByaXZhdGUgdXBkYXRlKG5vZGU/OiBOb2RlLCBjYW1lcmE/OiBDYW1lcmEpIHtcblx0XHRpZiAoIXRoaXMucmVhZHkpIHJldHVybjtcblx0XHQvLyDph4rmlL7nurnnkIZcblx0XHR0ZXh0dXJlQ2FjaGUucmVsZWFzZWRUZXh0dXJlcygpO1xuXHRcdC8vIOabtOaWsEZyYW1lU3RhdGVcblx0XHR0aGlzLmZyYW1lU3RhdGUudXBkYXRlKGNhbWVyYSA/PyB0aGlzLmNhbWVyYSwgRnJhbWVTdGF0ZS5nZXRGcmFtZVN0YXRlT3B0aW9uc0J5U2NlbmUodGhpcykpO1xuXHRcdC8vIHVwZGF0ZSBwcmltaXRpdmUgYW5kIHNlbGVjdFxuXHRcdChub2RlID8/IHRoaXMubWVzaE1hbmdlcikudXBkYXRlKHRoaXMuZnJhbWVTdGF0ZSwgY2FtZXJhID8/IHRoaXMuY2FtZXJhKTtcblx0XHQvLyBzZWxjdCByZW5kZXJQaXBlbGluZVxuXHRcdHRoaXMuY3VycmVudFJlbmRlclBpcGVsaW5lLnJlbmRlcih0aGlzLmZyYW1lU3RhdGUsIGNhbWVyYSA/PyB0aGlzLmNhbWVyYSk7XG5cdFx0Ly8g5ZCO5aSE55CGXG5cdFx0dGhpcy5wb3N0RWZmZWN0Q29sbGVjdGlvbi5yZW5kZXIodGhpcy5jb250ZXh0LCB0aGlzLmN1cnJlbnRSZW5kZXJQaXBlbGluZS5nZXRPdXRwdXRUZXh0dXJlKCkpO1xuXHR9XG59XG4iLCJpbXBvcnQgSUNsb25lIGZyb20gXCIuLi9jb3JlL0lDbG9uZVwiO1xuaW1wb3J0IHsgUmVuZGVyT2JqZWN0VHlwZSB9IGZyb20gXCIuLi9jb3JlL1dlYkdQVVR5cGVzXCI7XG5pbXBvcnQgR2VvbWV0cnkgZnJvbSBcIi4uL2dlb21ldHJ5L0dlb21ldHJ5XCI7XG5pbXBvcnQgeyBNZXNoIH0gZnJvbSBcIi4uL21lc2gvTWVzaFwiO1xuaW1wb3J0IHsgRmxvYXQzMkF0dHJpYnV0ZSB9IGZyb20gXCIuLi9yZW5kZXIvQXR0cmlidXRlXCI7XG5pbXBvcnQgQ29udGV4dCBmcm9tIFwiLi4vcmVuZGVyL0NvbnRleHRcIjtcbmltcG9ydCB7IFByaW1pdGl2ZSwgUmVuZGVyU3RhdGUsIFRhcmdldCB9IGZyb20gXCIuLi9yZW5kZXIvUmVuZGVyU3RhdGVcIjtcbmltcG9ydCBSZW5kZXJUYXJnZXQgZnJvbSBcIi4uL3JlbmRlci9SZW5kZXJUYXJnZXRcIjtcbmltcG9ydCBTYW1wbGVyIGZyb20gXCIuLi9yZW5kZXIvU2FtcGxlclwiO1xuaW1wb3J0IFRleHR1cmUgZnJvbSBcIi4uL3JlbmRlci9UZXh0dXJlXCI7XG5cbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFBvc3RFZmZlY3QgaW1wbGVtZW50cyBJQ2xvbmUge1xuXHR3aWR0aDogbnVtYmVyO1xuXG5cdGhlaWdodDogbnVtYmVyO1xuXG5cdGRlZmF1bHRTYW1wbGVyOiBTYW1wbGVyO1xuXG5cdHJlc29sdmVUb0NhbnZhczogYm9vbGVhbjtcblxuXHRjdXJyZW50UmVuZGVyVGFyZ2V0OiBSZW5kZXJUYXJnZXQ7XG5cblx0ZnVsbFNjcmVlblF1YWQ6IE1lc2g7XG5cblx0cmVuZGVyU3RhdGU6IFJlbmRlclN0YXRlO1xuXG5cdGlkOiBzdHJpbmc7XG5cblx0cHJpb3JpdHk6IG51bWJlcjtcblxuXHRpc1Bvc3RFZmZlY3Q6IGJvb2xlYW47XG5cblx0dHlwZTogUmVuZGVyT2JqZWN0VHlwZTtcblxuXHRjb25zdHJ1Y3Rvcih3aWR0aDogbnVtYmVyLCBoZWlnaHQ6IG51bWJlciwgaWQ6IHN0cmluZykge1xuXHRcdHRoaXMud2lkdGggPSB3aWR0aDtcblx0XHR0aGlzLmhlaWdodCA9IGhlaWdodDtcblx0XHR0aGlzLmluaXREZWZhdWx0UGFybXMoKTtcblx0XHR0aGlzLmlkID0gaWQ7XG5cdFx0dGhpcy5wcmlvcml0eSA9IDA7XG5cdFx0dGhpcy5pc1Bvc3RFZmZlY3QgPSB0cnVlO1xuXHRcdHRoaXMudHlwZSA9IFJlbmRlck9iamVjdFR5cGUuUG9zdEVmZmVjdDtcblx0fVxuXHRyZW5kZXIoY29udGV4dDogQ29udGV4dCwgY29sb3JUZXh0dXJlOiBUZXh0dXJlKTogVGV4dHVyZSB7XG5cdFx0cmV0dXJuIG51bGw7XG5cdH1cblx0c2V0U2l6ZSh3aWR0aDogbnVtYmVyLCBoZWlnaHQ6IG51bWJlcik6IHZvaWQge1xuXHRcdC8vIHRvZG8gO1xuXHR9XG5cdGRlc3Ryb3koKSB7XG5cdFx0dGhpcz8uY3VycmVudFJlbmRlclRhcmdldD8uZGVzdHJveSgpO1xuXHR9XG5cdHByb3RlY3RlZCByZW5kZXJNZXNoKGNvbnRleHQ6IENvbnRleHQpIHtcblx0XHR0aGlzLmZ1bGxTY3JlZW5RdWFkLm1hdGVyaWFsLmRpcnR5ID0gdHJ1ZTtcblx0XHR0aGlzLmZ1bGxTY3JlZW5RdWFkLm1hdGVyaWFsLnVwZGF0ZSgpO1xuXHRcdGNvbnN0IGRyYXdDb21hbmQgPSB0aGlzLmZ1bGxTY3JlZW5RdWFkLmdldERyYXdDb21tYW5kKCk7XG5cdFx0Y29uc3QgY3VycmVudFJlbmRlclBhc3NFbmNvZGVyID0gdGhpcy5jdXJyZW50UmVuZGVyVGFyZ2V0LmJlZ2luUmVuZGVyUGFzcyhjb250ZXh0LmRldmljZSk7XG5cdFx0ZHJhd0NvbWFuZC5yZW5kZXIoeyBkZXZpY2U6IGNvbnRleHQuZGV2aWNlLCBwYXNzRW5jb2RlcjogY3VycmVudFJlbmRlclBhc3NFbmNvZGVyIH0pO1xuXHRcdHRoaXMuY3VycmVudFJlbmRlclRhcmdldC5lbmRSZW5kZXJQYXNzKCk7XG5cdH1cblx0cHJpdmF0ZSBpbml0RGVmYXVsdFBhcm1zKCkge1xuXHRcdGNvbnN0IGdlb21ldHJ5ID0gbmV3IEdlb21ldHJ5KHt9KTtcblx0XHRnZW9tZXRyeS5zZXRBdHRyaWJ1dGUoXG5cdFx0XHRuZXcgRmxvYXQzMkF0dHJpYnV0ZShcInBvc2l0aW9uXCIsIFstMS4wLCAxLjAsIC0xLjAsIC0xLjAsIDEuMCwgLTEuMCwgMS4wLCAtMS4wLCAxLjAsIDEuMCwgLTEuMCwgMS4wXSwgMilcblx0XHQpO1xuXHRcdGdlb21ldHJ5LmNvdW50ID0gNjtcblx0XHQvLyByc1xuXHRcdGNvbnN0IHByaW1pdGl2ZSA9IG5ldyBQcmltaXRpdmUoKTtcblx0XHRjb25zdCB0YXJnZXQgPSBuZXcgVGFyZ2V0KCk7XG5cdFx0Ly8gdGFyZ2V0LmZvcm1hdD1UZXh0dXJlRm9ybWF0LlJHQkE4VW5vcm1cblx0XHRjb25zdCByZW5kZXJTdGF0ZSA9IG5ldyBSZW5kZXJTdGF0ZSgpO1xuXHRcdHJlbmRlclN0YXRlLnByaW1pdGl2ZSA9IHByaW1pdGl2ZTtcblx0XHRyZW5kZXJTdGF0ZS50YXJnZXRzID0gW3RhcmdldF07XG5cdFx0dGhpcy5yZW5kZXJTdGF0ZSA9IHJlbmRlclN0YXRlO1xuXHRcdHRoaXMuZnVsbFNjcmVlblF1YWQgPSBuZXcgTWVzaChnZW9tZXRyeSk7XG5cblx0XHR0aGlzLmRlZmF1bHRTYW1wbGVyID0gbmV3IFNhbXBsZXIoKTtcblx0fVxufVxuIiwiaW1wb3J0IHsgVGV4dHVyZUZvcm1hdCwgVGV4dHVyZVVzYWdlIH0gZnJvbSBcIi4uL2NvcmUvV2ViR1BVQ29uc3RhbnRcIjtcbmltcG9ydCB7IFVuaWZvcm1zIH0gZnJvbSBcIi4uL2NvcmUvV2ViR1BVVHlwZXNcIjtcbmltcG9ydCBTaGFkZXJNYXRlcmlhbCBmcm9tIFwiLi4vbWF0ZXJpYWwvU2hhZGVyTWF0ZXJpYWxcIjtcbmltcG9ydCBDb2xvciBmcm9tIFwiLi4vbWF0aC9Db2xvclwiO1xuaW1wb3J0IFZlY3RvcjIgZnJvbSBcIi4uL21hdGgvVmVjdG9yMlwiO1xuaW1wb3J0IFZlY3RvcjMgZnJvbSBcIi4uL21hdGgvVmVjdG9yM1wiO1xuaW1wb3J0IEF0dGFjaG1lbnQgZnJvbSBcIi4uL3JlbmRlci9BdHRhY2htZW50XCI7XG5pbXBvcnQgQ29udGV4dCBmcm9tIFwiLi4vcmVuZGVyL0NvbnRleHRcIjtcbmltcG9ydCBSZW5kZXJUYXJnZXQgZnJvbSBcIi4uL3JlbmRlci9SZW5kZXJUYXJnZXRcIjtcbmltcG9ydCBUZXh0dXJlIGZyb20gXCIuLi9yZW5kZXIvVGV4dHVyZVwiO1xuaW1wb3J0IGdldFZlcnRGcmFnIGZyb20gXCIuLi9zaGFkZXIvU2hhZGVyc1wiO1xuaW1wb3J0IFBvc3RFZmZlY3QgZnJvbSBcIi4vUG9zdEVmZmVjdFwiO1xuXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBCbG9vbVBvc3RFZmZlY3QgZXh0ZW5kcyBQb3N0RWZmZWN0IHtcblx0c3RhdGljIEJsdXJEaXJlY3Rpb25YID0gbmV3IFZlY3RvcjIoMS4wLCAwLjApO1xuXHRzdGF0aWMgQmx1ckRpcmVjdGlvblkgPSBuZXcgVmVjdG9yMigwLjAsIDEuMCk7XG5cdHN0cmVuZ3RoOiBudW1iZXI7XG5cdHJhZGl1czogbnVtYmVyO1xuXHR0aHJlc2hvbGQ6IG51bWJlcjtcblx0cmVuZGVyVGFyZ2V0c0hvcml6b250YWw6IFJlbmRlclRhcmdldFtdO1xuXHRyZW5kZXJUYXJnZXRzVmVydGljYWw6IFJlbmRlclRhcmdldFtdO1xuXHRuTWlwczogbnVtYmVyO1xuXHRyZW5kZXJUYXJnZXRCcmlnaHQ6IFJlbmRlclRhcmdldDtcblx0bWF0ZXJpYWxIaWdoUGFzc0ZpbHRlcjogU2hhZGVyTWF0ZXJpYWw7XG5cdGhpZ2hQYXNzVW5pZm9ybXM6IFVuaWZvcm1zO1xuXHRjb21wb3NpdGVNYXRlcmlhbDogU2hhZGVyTWF0ZXJpYWw7XG5cdHNlcGFyYWJsZUJsdXJNYXRlcmlhbHM6IFNoYWRlck1hdGVyaWFsW107XG5cdHNlcGFyYWJsZUJsdXJZTWF0ZXJpYWxzOiBTaGFkZXJNYXRlcmlhbFtdO1xuXHRibGVuZFVuaWZvcm1zOiBVbmlmb3Jtcztcblx0YmxlbmRNYXRlcmlhbDogU2hhZGVyTWF0ZXJpYWw7XG5cdGJsZW5kVGFyZ2V0OiBSZW5kZXJUYXJnZXQ7XG5cblx0Y29uc3RydWN0b3Iob3B0aW9uczogQmxvb21Qb3N0RWZmZWN0UHJvcHMpIHtcblx0XHRzdXBlcihvcHRpb25zLndpZHRoLCBvcHRpb25zLmhlaWdodCwgXCJibG9vbVwiKTtcblx0XHR0aGlzLnN0cmVuZ3RoID0gb3B0aW9ucy5zdHJlbmd0aDtcblx0XHR0aGlzLnJhZGl1cyA9IG9wdGlvbnMucmFkaXVzO1xuXHRcdHRoaXMudGhyZXNob2xkID0gb3B0aW9ucy50aHJlc2hvbGQ7XG5cdFx0dGhpcy5pbml0KCk7XG5cdH1cblx0ZGVzdHJveSgpIHtcblx0XHR0aGlzLnJlbmRlclRhcmdldEJyaWdodC5kZXN0cm95KCk7XG5cdH1cblx0cmVuZGVyKGNvbnRleHQ6IENvbnRleHQsIGNvbG9yVGV4dHVyZTogVGV4dHVyZSk6IFRleHR1cmUge1xuXHRcdC8vIDEuIEV4dHJhY3QgQnJpZ2h0IEFyZWFzXG5cdFx0dGhpcy5jdXJyZW50UmVuZGVyVGFyZ2V0ID0gdGhpcy5yZW5kZXJUYXJnZXRCcmlnaHQ7XG5cdFx0dGhpcy5oaWdoUGFzc1VuaWZvcm1zLnREaWZmdXNlLnZhbHVlID0gY29sb3JUZXh0dXJlO1xuXHRcdHRoaXMuZnVsbFNjcmVlblF1YWQubWF0ZXJpYWwgPSB0aGlzLm1hdGVyaWFsSGlnaFBhc3NGaWx0ZXI7XG5cdFx0dGhpcy5yZW5kZXJNZXNoKGNvbnRleHQpO1xuXHRcdC8vIDIuIEJsdXIgQWxsIHRoZSBtaXBzIHByb2dyZXNzaXZlbHlcblx0XHRsZXQgaW5wdXRSZW5kZXJUYXJnZXQgPSB0aGlzLnJlbmRlclRhcmdldEJyaWdodDtcblx0XHRmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMubk1pcHM7IGkrKykge1xuXHRcdFx0dGhpcy5mdWxsU2NyZWVuUXVhZC5tYXRlcmlhbCA9IHRoaXMuc2VwYXJhYmxlQmx1ck1hdGVyaWFsc1tpXTtcblxuXHRcdFx0dGhpcy5zZXBhcmFibGVCbHVyTWF0ZXJpYWxzW2ldLnVuaWZvcm1zLnREaWZmdXNlLnZhbHVlID0gaW5wdXRSZW5kZXJUYXJnZXQuZ2V0Q29sb3JUZXh0dXJlKCk7XG5cdFx0XHR0aGlzLnNlcGFyYWJsZUJsdXJNYXRlcmlhbHNbaV0udW5pZm9ybXMuZGlyZWN0aW9uLnZhbHVlID0gQmxvb21Qb3N0RWZmZWN0LkJsdXJEaXJlY3Rpb25YO1xuXHRcdFx0dGhpcy5jdXJyZW50UmVuZGVyVGFyZ2V0ID0gdGhpcy5yZW5kZXJUYXJnZXRzSG9yaXpvbnRhbFtpXTtcblxuXHRcdFx0dGhpcy5yZW5kZXJNZXNoKGNvbnRleHQpO1xuXHRcdFx0dGhpcy5mdWxsU2NyZWVuUXVhZC5tYXRlcmlhbCA9IHRoaXMuc2VwYXJhYmxlQmx1cllNYXRlcmlhbHNbaV07XG5cdFx0XHR0aGlzLnNlcGFyYWJsZUJsdXJZTWF0ZXJpYWxzW2ldLnVuaWZvcm1zLnREaWZmdXNlLnZhbHVlID0gdGhpcy5yZW5kZXJUYXJnZXRzSG9yaXpvbnRhbFtpXS5nZXRDb2xvclRleHR1cmUoKTtcblx0XHRcdHRoaXMuc2VwYXJhYmxlQmx1cllNYXRlcmlhbHNbaV0udW5pZm9ybXMuZGlyZWN0aW9uLnZhbHVlID0gQmxvb21Qb3N0RWZmZWN0LkJsdXJEaXJlY3Rpb25ZO1xuXHRcdFx0dGhpcy5jdXJyZW50UmVuZGVyVGFyZ2V0ID0gdGhpcy5yZW5kZXJUYXJnZXRzVmVydGljYWxbaV07XG5cblx0XHRcdHRoaXMucmVuZGVyTWVzaChjb250ZXh0KTtcblxuXHRcdFx0aW5wdXRSZW5kZXJUYXJnZXQgPSB0aGlzLnJlbmRlclRhcmdldHNWZXJ0aWNhbFtpXTtcblx0XHR9XG5cdFx0Ly8gQ29tcG9zaXRlIEFsbCB0aGUgbWlwc1xuXHRcdHRoaXMuZnVsbFNjcmVlblF1YWQubWF0ZXJpYWwgPSB0aGlzLmNvbXBvc2l0ZU1hdGVyaWFsO1xuXHRcdHRoaXMuY3VycmVudFJlbmRlclRhcmdldCA9IHRoaXMucmVuZGVyVGFyZ2V0c0hvcml6b250YWxbMF07XG5cdFx0dGhpcy5yZW5kZXJNZXNoKGNvbnRleHQpO1xuXHRcdC8vIGJsZW5kXG5cdFx0dGhpcy5ibGVuZFVuaWZvcm1zLmJhc2VDb2xvclRleHR1cmUudmFsdWUgPSBjb2xvclRleHR1cmU7XG5cdFx0dGhpcy5mdWxsU2NyZWVuUXVhZC5tYXRlcmlhbCA9IHRoaXMuYmxlbmRNYXRlcmlhbDtcblx0XHR0aGlzLmN1cnJlbnRSZW5kZXJUYXJnZXQgPSB0aGlzLmJsZW5kVGFyZ2V0O1xuXHRcdHRoaXMucmVuZGVyTWVzaChjb250ZXh0KTtcblx0XHRyZXR1cm4gdGhpcy5jdXJyZW50UmVuZGVyVGFyZ2V0LmdldENvbG9yVGV4dHVyZSgpO1xuXHR9XG5cdHNldFNpemUod2lkdGg6IG51bWJlciwgaGVpZ2h0OiBudW1iZXIpOiB2b2lkIHtcblx0XHR0aGlzPy5yZW5kZXJUYXJnZXRzSG9yaXpvbnRhbD8uZm9yRWFjaCgocmVuZGVyVGFyZ2V0KSA9PiByZW5kZXJUYXJnZXQuc2V0U2l6ZSh3aWR0aCwgaGVpZ2h0LCAxKSk7XG5cdFx0dGhpcz8ucmVuZGVyVGFyZ2V0c1ZlcnRpY2FsPy5mb3JFYWNoKChyZW5kZXJUYXJnZXQpID0+IHJlbmRlclRhcmdldC5zZXRTaXplKHdpZHRoLCBoZWlnaHQsIDEpKTtcblx0XHR0aGlzPy5yZW5kZXJUYXJnZXRCcmlnaHQ/LnNldFNpemU/Lih3aWR0aCwgaGVpZ2h0LCAxKTtcblx0XHR0aGlzPy5ibGVuZFRhcmdldD8uc2V0U2l6ZT8uKHdpZHRoLCBoZWlnaHQsIDEpO1xuXHR9XG5cdHByaXZhdGUgaW5pdCgpIHtcblx0XHR0aGlzLnJlbmRlclRhcmdldHNIb3Jpem9udGFsID0gW107XG5cdFx0dGhpcy5yZW5kZXJUYXJnZXRzVmVydGljYWwgPSBbXTtcblx0XHR0aGlzLm5NaXBzID0gNTtcblx0XHRsZXQgcmVzeCA9IE1hdGgucm91bmQodGhpcy53aWR0aCAvIDIpO1xuXHRcdGxldCByZXN5ID0gTWF0aC5yb3VuZCh0aGlzLmhlaWdodCAvIDIpO1xuXG5cdFx0dGhpcy5yZW5kZXJUYXJnZXRCcmlnaHQgPSBuZXcgUmVuZGVyVGFyZ2V0KFwicmVuZGVyXCIsIFt0aGlzLmNyZWF0ZUNvbG9yQXR0YWNobWVudChyZXN4LCByZXN5KV0pO1xuXG5cdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLm5NaXBzOyBpKyspIHtcblx0XHRcdGNvbnN0IHJlbmRlclRhcmdldEhvcml6b25hbCA9IG5ldyBSZW5kZXJUYXJnZXQoXCJyZW5kZXJcIiwgW3RoaXMuY3JlYXRlQ29sb3JBdHRhY2htZW50KHJlc3gsIHJlc3kpXSk7XG5cdFx0XHR0aGlzLnJlbmRlclRhcmdldHNIb3Jpem9udGFsLnB1c2gocmVuZGVyVGFyZ2V0SG9yaXpvbmFsKTtcblx0XHRcdGNvbnN0IHJlbmRlclRhcmdldFZlcnRpY2FsID0gbmV3IFJlbmRlclRhcmdldChcInJlbmRlclwiLCBbdGhpcy5jcmVhdGVDb2xvckF0dGFjaG1lbnQocmVzeCwgcmVzeSldKTtcblx0XHRcdHRoaXMucmVuZGVyVGFyZ2V0c1ZlcnRpY2FsLnB1c2gocmVuZGVyVGFyZ2V0VmVydGljYWwpO1xuXHRcdFx0cmVzeCA9IE1hdGgucm91bmQocmVzeCAvIDIpO1xuXHRcdFx0cmVzeSA9IE1hdGgucm91bmQocmVzeSAvIDIpO1xuXHRcdH1cblx0XHQvLyBsdW1pbm9zaXR5IGhpZ2ggcGFzcyBtYXRlcmlhbFxuXHRcdHRoaXMuaGlnaFBhc3NVbmlmb3JtcyA9IHtcblx0XHRcdHREaWZmdXNlOiB7IHR5cGU6IFwidGV4dHVyZVwiLCB2YWx1ZTogbnVsbCB9LFxuXHRcdFx0dFNhbXBsZXI6IHtcblx0XHRcdFx0dHlwZTogXCJzYW1wbGVyXCIsXG5cdFx0XHRcdHZhbHVlOiB0aGlzLmRlZmF1bHRTYW1wbGVyXG5cdFx0XHR9LFxuXHRcdFx0bHVtaW5vc2l0eVRocmVzaG9sOiB7IHR5cGU6IFwiZmxvYXRcIiwgdmFsdWU6IHRoaXMudGhyZXNob2xkIH0sXG5cdFx0XHRzbW9vdGhXaWR0aDogeyB0eXBlOiBcImZsb2F0XCIsIHZhbHVlOiAwLjAxIH0sXG5cdFx0XHRkZWZhdWx0Q29sb3I6IHsgdHlwZTogXCJjb2xvclwiLCB2YWx1ZTogbmV3IENvbG9yKDAuMCwgMCwgMCkgfSxcblx0XHRcdGRlZmF1bHRPcGFjaXR5OiB7IHR5cGU6IFwiZmxvYXRcIiwgdmFsdWU6IDEuMCB9XG5cdFx0fTtcblx0XHRjb25zdCBzaGFkZXIgPSBnZXRWZXJ0RnJhZyhcImx1bWlub3NpdHlIaWdoXCIsIHsgcG9zaXRpb25Mb2NhdGlvbjogMCB9KTtcblx0XHR0aGlzLm1hdGVyaWFsSGlnaFBhc3NGaWx0ZXIgPSBuZXcgU2hhZGVyTWF0ZXJpYWwoe1xuXHRcdFx0dHlwZTogXCJibG9vbVwiLFxuXHRcdFx0dW5pZm9ybXM6IHRoaXMuaGlnaFBhc3NVbmlmb3Jtcyxcblx0XHRcdHZlcnQ6IHNoYWRlci52ZXJ0LFxuXHRcdFx0ZnJhZzogc2hhZGVyLmZyYWdcblx0XHR9KTtcblx0XHQvLyBHYXVzc2lhbiBCbHVyIE1hdGVyaWFsc1xuXHRcdHRoaXMubWF0ZXJpYWxIaWdoUGFzc0ZpbHRlci5yZW5kZXJTdGF0ZSA9IHRoaXMucmVuZGVyU3RhdGU7XG5cdFx0dGhpcy5zZXBhcmFibGVCbHVyTWF0ZXJpYWxzID0gW107XG5cdFx0dGhpcy5zZXBhcmFibGVCbHVyWU1hdGVyaWFscyA9IFtdO1xuXHRcdGNvbnN0IGtlcm5lbFNpemVBcnJheSA9IFszLCA1LCA3LCA5LCAxMV07XG5cdFx0cmVzeCA9IE1hdGgucm91bmQodGhpcy53aWR0aCAvIDIpO1xuXHRcdHJlc3kgPSBNYXRoLnJvdW5kKHRoaXMuaGVpZ2h0IC8gMik7XG5cblx0XHRmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMubk1pcHM7IGkrKykge1xuXHRcdFx0dGhpcy5zZXBhcmFibGVCbHVyTWF0ZXJpYWxzLnB1c2godGhpcy5nZXRTZXBlcmFibGVCbHVyTWF0ZXJpYWwoa2VybmVsU2l6ZUFycmF5W2ldLCBcIkJsdXJNYXRlcmlhbFwiICsgaSkpO1xuXHRcdFx0dGhpcy5zZXBhcmFibGVCbHVyWU1hdGVyaWFscy5wdXNoKHRoaXMuZ2V0U2VwZXJhYmxlQmx1ck1hdGVyaWFsKGtlcm5lbFNpemVBcnJheVtpXSwgXCJCbHVyTWF0ZXJpYWxZXCIgKyBpKSk7XG5cdFx0XHRyZXN4ID0gTWF0aC5yb3VuZChyZXN4IC8gMik7XG5cblx0XHRcdHJlc3kgPSBNYXRoLnJvdW5kKHJlc3kgLyAyKTtcblx0XHR9XG5cdFx0Ly8gQ29tcG9zaXRlIG1hdGVyaWFsXG5cdFx0dGhpcy5jb21wb3NpdGVNYXRlcmlhbCA9IHRoaXMuZ2V0Q29tcG9zaXRlTWF0ZXJpYWwodGhpcy5uTWlwcywgXCJjb21wb3NpdGVNYXRlcmlhbFwiKTtcblx0XHR0aGlzLmNvbXBvc2l0ZU1hdGVyaWFsLnJlbmRlclN0YXRlID0gdGhpcy5yZW5kZXJTdGF0ZTtcblx0XHR0aGlzLmJsZW5kVW5pZm9ybXMgPSB7XG5cdFx0XHR0RGlmZnVzZTogeyB0eXBlOiBcInRleHR1cmVcIiwgdmFsdWU6IHRoaXMucmVuZGVyVGFyZ2V0c0hvcml6b250YWxbMF0uZ2V0Q29sb3JUZXh0dXJlKCkgfSxcblx0XHRcdGJhc2VDb2xvclRleHR1cmU6IHsgdHlwZTogXCJ0ZXh0dXJlXCIsIHZhbHVlOiBudWxsIH0sXG5cdFx0XHR0U2FtcGxlcjoge1xuXHRcdFx0XHR0eXBlOiBcInNhbXBsZXJcIixcblx0XHRcdFx0dmFsdWU6IHRoaXMuZGVmYXVsdFNhbXBsZXJcblx0XHRcdH1cblx0XHR9O1xuXHRcdGNvbnN0IGJsZW5kU2hhZGVyID0gZ2V0VmVydEZyYWcoXCJibGVuZFwiLCB7IHBvc2l0aW9uTG9jYXRpb246IDAgfSk7XG5cdFx0dGhpcy5ibGVuZE1hdGVyaWFsID0gbmV3IFNoYWRlck1hdGVyaWFsKHtcblx0XHRcdHR5cGU6IFwicG9zdEJsZW5kXCIsXG5cdFx0XHR1bmlmb3JtczogdGhpcy5ibGVuZFVuaWZvcm1zLFxuXHRcdFx0dmVydDogYmxlbmRTaGFkZXIudmVydCxcblx0XHRcdGZyYWc6IGJsZW5kU2hhZGVyLmZyYWdcblx0XHR9KTtcblx0XHR0aGlzLmJsZW5kTWF0ZXJpYWwucmVuZGVyU3RhdGUgPSB0aGlzLnJlbmRlclN0YXRlO1xuXHRcdHRoaXMuYmxlbmRUYXJnZXQgPSBuZXcgUmVuZGVyVGFyZ2V0KFwicmVuZGVyXCIsIFt0aGlzLmNyZWF0ZUNvbG9yQXR0YWNobWVudCh0aGlzLndpZHRoLCB0aGlzLmhlaWdodCldKTtcblx0fVxuXHRwcml2YXRlIGNyZWF0ZUNvbG9yQXR0YWNobWVudCh3aWR0aDogbnVtYmVyLCBoZWlnaHQ6IG51bWJlcik6IEF0dGFjaG1lbnQge1xuXHRcdGNvbnN0IGNvbG9yVGV4dHVyZSA9IG5ldyBUZXh0dXJlKHtcblx0XHRcdHNpemU6IHsgd2lkdGgsIGhlaWdodCwgZGVwdGg6IDEgfSxcblx0XHRcdGZvcm1hdDogVGV4dHVyZUZvcm1hdC5CR1JBOFVub3JtLFxuXHRcdFx0dXNhZ2U6IFRleHR1cmVVc2FnZS5SZW5kZXJBdHRhY2htZW50IHwgVGV4dHVyZVVzYWdlLlRleHR1cmVCaW5kaW5nXG5cdFx0fSk7XG5cdFx0Y29uc3QgY29sb3JBdHRhY2htZW50ID0gbmV3IEF0dGFjaG1lbnQoeyByOiAwLjAsIGc6IDAuMCwgYjogMC4wLCBhOiAwLjAgfSwgeyB0ZXh0dXJlOiBjb2xvclRleHR1cmUgfSk7XG5cdFx0cmV0dXJuIGNvbG9yQXR0YWNobWVudDtcblx0fVxuXHRwcml2YXRlIGdldENvbXBvc2l0ZU1hdGVyaWFsKG5NaXBzOiBudW1iZXIsIHR5cGUpOiBTaGFkZXJNYXRlcmlhbCB7XG5cdFx0cmV0dXJuIG5ldyBTaGFkZXJNYXRlcmlhbCh7XG5cdFx0XHR0eXBlLFxuXHRcdFx0dW5pZm9ybXM6IHtcblx0XHRcdFx0Ymx1clRleHR1cmUxOiB7IHR5cGU6IFwidGV4dHVyZVwiLCB2YWx1ZTogdGhpcy5yZW5kZXJUYXJnZXRzVmVydGljYWxbMF0uZ2V0Q29sb3JUZXh0dXJlKCkgfSxcblx0XHRcdFx0Ymx1clRleHR1cmUyOiB7IHR5cGU6IFwidGV4dHVyZVwiLCB2YWx1ZTogdGhpcy5yZW5kZXJUYXJnZXRzVmVydGljYWxbMV0uZ2V0Q29sb3JUZXh0dXJlKCkgfSxcblx0XHRcdFx0Ymx1clRleHR1cmUzOiB7IHR5cGU6IFwidGV4dHVyZVwiLCB2YWx1ZTogdGhpcy5yZW5kZXJUYXJnZXRzVmVydGljYWxbMl0uZ2V0Q29sb3JUZXh0dXJlKCkgfSxcblx0XHRcdFx0Ymx1clRleHR1cmU0OiB7IHR5cGU6IFwidGV4dHVyZVwiLCB2YWx1ZTogdGhpcy5yZW5kZXJUYXJnZXRzVmVydGljYWxbM10uZ2V0Q29sb3JUZXh0dXJlKCkgfSxcblx0XHRcdFx0Ymx1clRleHR1cmU1OiB7IHR5cGU6IFwidGV4dHVyZVwiLCB2YWx1ZTogdGhpcy5yZW5kZXJUYXJnZXRzVmVydGljYWxbNF0uZ2V0Q29sb3JUZXh0dXJlKCkgfSxcblx0XHRcdFx0dFNhbXBsZXI6IHtcblx0XHRcdFx0XHR0eXBlOiBcInNhbXBsZXJcIixcblx0XHRcdFx0XHR2YWx1ZTogdGhpcy5kZWZhdWx0U2FtcGxlclxuXHRcdFx0XHR9LFxuXHRcdFx0XHRibG9vbVN0cmVuZ3RoOiB7IHR5cGU6IFwiZjMyXCIsIHZhbHVlOiB0aGlzLnN0cmVuZ3RoIH0sXG5cdFx0XHRcdGJsb29tUmFkaXVzOiB7IHR5cGU6IFwiZjMyXCIsIHZhbHVlOiB0aGlzLnJhZGl1cyB9LFxuXHRcdFx0XHRibG9vbUZhY3RvcnM6IHsgdHlwZTogXCJhcnJheTxmMzI+XCIsIHZhbHVlOiBbMS4wLCAwLjgsIDAuNiwgMC40LCAwLjJdIH0sXG5cdFx0XHRcdGJsb29tVGludENvbG9yczoge1xuXHRcdFx0XHRcdHR5cGU6IFwiYXJyYXk8ZjMyPlwiLFxuXHRcdFx0XHRcdHZhbHVlOiBbXG5cdFx0XHRcdFx0XHRuZXcgVmVjdG9yMygxLCAxLCAxKSxcblx0XHRcdFx0XHRcdG5ldyBWZWN0b3IzKDEsIDEsIDEpLFxuXHRcdFx0XHRcdFx0bmV3IFZlY3RvcjMoMSwgMSwgMSksXG5cdFx0XHRcdFx0XHRuZXcgVmVjdG9yMygxLCAxLCAxKSxcblx0XHRcdFx0XHRcdG5ldyBWZWN0b3IzKDEsIDEsIDEpXG5cdFx0XHRcdFx0XVxuXHRcdFx0XHR9XG5cdFx0XHR9LFxuXG5cdFx0XHR2ZXJ0OiAoKSA9PiB7XG5cdFx0XHRcdHJldHVybiBgXG4gICAgICAgICAgICAgIHN0cnVjdCBWZXJ0ZXhJbnB1dCB7XG4gICAgICAgICAgICAgICAgICAgIEBsb2NhdGlvbigwKSBwb3NpdGlvbjogdmVjMjxmMzI+LCAgICAgICBcbiAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgIHN0cnVjdCBWZXJ0ZXhPdXRwdXQge1xuICAgICAgICAgICAgICAgICAgICBAYnVpbHRpbihwb3NpdGlvbikgcG9zaXRpb246IHZlYzQ8ZjMyPixcbiAgICAgICAgICAgICAgICAgICAgQGxvY2F0aW9uKDApIHV2OiB2ZWMyPGYzMj4sXG4gICAgICAgICAgICAgICAgfTtcbiAgICAgICAgICAgICAgIEB2ZXJ0ZXhcbiAgICAgICAgICAgICAgIGZuIG1haW4oaW5wdXQ6IFZlcnRleElucHV0KSAtPiBWZXJ0ZXhPdXRwdXQge1xuICAgICAgICAgICAgICAgIHZhciBvdXRwdXQ6VmVydGV4T3V0cHV0O1xuICAgICAgICAgICAgICAgIG91dHB1dC51diA9IGlucHV0LnBvc2l0aW9uICogMC41ICsgMC41O1xuICAgICAgICAgICAgICAgIG91dHB1dC5wb3NpdGlvbiA9IHZlYzQ8ZjMyPihpbnB1dC5wb3NpdGlvbiwgMC4wLCAxLjApOztcbiAgICAgICAgICAgICAgICByZXR1cm4gb3V0cHV0O1xuICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGA7XG5cdFx0XHR9LFxuXG5cdFx0XHRmcmFnOiAoZGVmaW5lcykgPT4ge1xuXHRcdFx0XHRyZXR1cm4gYFxuICAgICAgICAgICAgICAgIHN0cnVjdCBGcmFnSW5wdXQge1xuICAgICAgICAgICAgICAgICAgICBAbG9jYXRpb24oMCkgdXY6IHZlYzI8ZjMyPixcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgICAgIHN0cnVjdCBCbG9vbVVuaWZvcm1ze1xuICAgICAgICAgICAgICAgICAgICBibG9vbVN0cmVuZ3RoOmYzMixcbiAgICAgICAgICAgICAgICAgICAgYmxvb21SYWRpdXM6ZjMyLFxuICAgICAgICAgICAgICAgICAgICBibG9vbUZhY3RvcnMgOiBhcnJheTxmMzIsNT4sXG4gICAgICAgICAgICAgICAgICAgIGJsb29tVGludENvbG9ycyA6IGFycmF5PHZlYzM8ZjMyPiw1PlxuICAgICAgICAgICAgICAgIH0gIFxuICAgICAgICAgICAgICAgIEBncm91cCgwKSBAYmluZGluZygwKSAgdmFyPHN0b3JhZ2UsIHJlYWQ+IGJsb29tVW5pZm9ybXMgOiBCbG9vbVVuaWZvcm1zO1xuXG4gICAgICAgICAgICAgICAgQGdyb3VwKDApIEBiaW5kaW5nKCR7ZGVmaW5lcy5ibHVyVGV4dHVyZTFCaW5kaW5nfSkgdmFyIGJsdXJUZXh0dXJlMTogdGV4dHVyZV8yZDxmMzI+O1xuICAgICAgICAgICAgICAgIEBncm91cCgwKSBAYmluZGluZygke2RlZmluZXMuYmx1clRleHR1cmUyQmluZGluZ30pIHZhciBibHVyVGV4dHVyZTI6IHRleHR1cmVfMmQ8ZjMyPjtcbiAgICAgICAgICAgICAgICBAZ3JvdXAoMCkgQGJpbmRpbmcoJHtkZWZpbmVzLmJsdXJUZXh0dXJlM0JpbmRpbmd9KSB2YXIgYmx1clRleHR1cmUzOiB0ZXh0dXJlXzJkPGYzMj47XG4gICAgICAgICAgICAgICAgQGdyb3VwKDApIEBiaW5kaW5nKCR7ZGVmaW5lcy5ibHVyVGV4dHVyZTRCaW5kaW5nfSkgdmFyIGJsdXJUZXh0dXJlNDogdGV4dHVyZV8yZDxmMzI+O1xuICAgICAgICAgICAgICAgIEBncm91cCgwKSBAYmluZGluZygke2RlZmluZXMuYmx1clRleHR1cmU1QmluZGluZ30pIHZhciBibHVyVGV4dHVyZTU6IHRleHR1cmVfMmQ8ZjMyPjtcbiAgICAgICAgICAgICAgICBAZ3JvdXAoMCkgQGJpbmRpbmcoJHtkZWZpbmVzLnRTYW1wbGVyQmluZGluZ319KSB2YXIgdFNhbXBsZXI6IHNhbXBsZXI7XG5cblx0XHRcdFx0Zm4gbGVycEJsb29tRmFjdG9yKGZhY3RvcjpmMzIpLT5mMzIge1xuXHRcdFx0XHRcdGxldCBtaXJyb3JGYWN0b3I6ZjMyID0gMS4yIC0gZmFjdG9yO1xuXHRcdFx0XHRcdHJldHVybiBtaXgoZmFjdG9yLCBtaXJyb3JGYWN0b3IsIGJsb29tVW5pZm9ybXMuYmxvb21SYWRpdXMpO1xuXHRcdFx0XHR9XG4gICAgICAgICAgICAgICAgQGZyYWdtZW50XG5cdFx0XHRcdGZuIG1haW4oaW5wdXQ6RnJhZ0lucHV0KS0+IEBsb2NhdGlvbigwKSB2ZWM0PGYzMj4gIHtcblx0XHRcdFx0XHRyZXR1cm4gYmxvb21Vbmlmb3Jtcy5ibG9vbVN0cmVuZ3RoICogKCBsZXJwQmxvb21GYWN0b3IoYmxvb21Vbmlmb3Jtcy5ibG9vbUZhY3RvcnNbMF0pICogdmVjNChibG9vbVVuaWZvcm1zLmJsb29tVGludENvbG9yc1swXSwgMS4wKSAqIHRleHR1cmVTYW1wbGUoYmx1clRleHR1cmUxLCB0U2FtcGxlciwgaW5wdXQudXYpICtcblx0XHRcdFx0XHRcdGxlcnBCbG9vbUZhY3RvcihibG9vbVVuaWZvcm1zLmJsb29tRmFjdG9yc1sxXSkgKiB2ZWM0PGYzMj4oYmxvb21Vbmlmb3Jtcy5ibG9vbVRpbnRDb2xvcnNbMV0sIDEuMCkgKiB0ZXh0dXJlU2FtcGxlKGJsdXJUZXh0dXJlMiwgdFNhbXBsZXIsIGlucHV0LnV2KSArXG5cdFx0XHRcdFx0XHRsZXJwQmxvb21GYWN0b3IoYmxvb21Vbmlmb3Jtcy5ibG9vbUZhY3RvcnNbMl0pICogdmVjNDxmMzI+KGJsb29tVW5pZm9ybXMuYmxvb21UaW50Q29sb3JzWzJdLCAxLjApICogdGV4dHVyZVNhbXBsZShibHVyVGV4dHVyZTMsIHRTYW1wbGVyLCBpbnB1dC51dikgK1xuXHRcdFx0XHRcdFx0bGVycEJsb29tRmFjdG9yKGJsb29tVW5pZm9ybXMuYmxvb21GYWN0b3JzWzNdKSAqIHZlYzQ8ZjMyPihibG9vbVVuaWZvcm1zLmJsb29tVGludENvbG9yc1szXSwgMS4wKSAqIHRleHR1cmVTYW1wbGUoYmx1clRleHR1cmU0LCB0U2FtcGxlciwgaW5wdXQudXYpICtcblx0XHRcdFx0XHRcdGxlcnBCbG9vbUZhY3RvcihibG9vbVVuaWZvcm1zLmJsb29tRmFjdG9yc1s0XSkgKiB2ZWM0PGYzMj4oYmxvb21Vbmlmb3Jtcy5ibG9vbVRpbnRDb2xvcnNbNF0sIDEuMCkgKiB0ZXh0dXJlU2FtcGxlKGJsdXJUZXh0dXJlNSwgdFNhbXBsZXIsIGlucHV0LnV2KSApO1xuXHRcdFx0XHR9YDtcblx0XHRcdH1cblx0XHR9KTtcblx0fVxuXHRwcml2YXRlIGdldFNlcGVyYWJsZUJsdXJNYXRlcmlhbChrZXJuZWxSYWRpdXMsIHR5cGUpIHtcblx0XHRjb25zdCBzaGFkZXIgPSBnZXRWZXJ0RnJhZyhcImJsdXJcIiwge1xuXHRcdFx0S0VSTkVMX1JBRElVUzoga2VybmVsUmFkaXVzLFxuXHRcdFx0U0lHTUE6IGtlcm5lbFJhZGl1cyxcblx0XHRcdHBvc2l0aW9uTG9jYXRpb246IDBcblx0XHR9KTtcblx0XHRjb25zdCBtYXQgPSBuZXcgU2hhZGVyTWF0ZXJpYWwoe1xuXHRcdFx0dHlwZSxcblx0XHRcdHVuaWZvcm1zOiB7XG5cdFx0XHRcdHREaWZmdXNlOiB7IHR5cGU6IFwidGV4dHVyZVwiLCB2YWx1ZTogbnVsbCB9LFxuXHRcdFx0XHRkaXJlY3Rpb246IHsgdHlwZTogXCJ2ZWMyPGYzMj5cIiwgdmFsdWU6IG5ldyBWZWN0b3IyKDAuMCwgMC4wKSB9LFxuXHRcdFx0XHR0U2FtcGxlcjoge1xuXHRcdFx0XHRcdHR5cGU6IFwic2FtcGxlclwiLFxuXHRcdFx0XHRcdHZhbHVlOiB0aGlzLmRlZmF1bHRTYW1wbGVyXG5cdFx0XHRcdH1cblx0XHRcdH0sXG5cblx0XHRcdHZlcnQ6IHNoYWRlci52ZXJ0LFxuXG5cdFx0XHRmcmFnOiBzaGFkZXIuZnJhZ1xuXHRcdH0pO1xuXHRcdG1hdC5yZW5kZXJTdGF0ZSA9IHRoaXMucmVuZGVyU3RhdGU7XG5cdFx0cmV0dXJuIG1hdDtcblx0fVxufVxuXG50eXBlIEJsb29tUG9zdEVmZmVjdFByb3BzID0ge1xuXHR3aWR0aDogbnVtYmVyO1xuXHRoZWlnaHQ6IG51bWJlcjtcblx0c3RyZW5ndGg6IG51bWJlcjtcblx0cmFkaXVzOiBudW1iZXI7XG5cdHRocmVzaG9sZDogbnVtYmVyO1xufTtcbiIsImltcG9ydCBNYXRyaXg0IGZyb20gXCIuLi9tYXRoL01hdHJpeDRcIjtcclxuaW1wb3J0IENhbWVyYSBmcm9tIFwiLi9DYW1lcmFcIjtcclxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgT3J0aG9ncmFwaGljQ2FtZXJhIGV4dGVuZHMgQ2FtZXJhIHtcclxuXHRyaWdodDogbnVtYmVyO1xyXG5cdGlzT3J0aG9ncmFwaGljQ2FtZXJhOiBib29sZWFuO1xyXG5cdGJvdHRvbTogbnVtYmVyO1xyXG5cdGxlZnQ6IG51bWJlcjtcclxuXHRuZWFyOiBudW1iZXI7XHJcblx0ZmFyOiBudW1iZXI7XHJcblx0dG9wOiBudW1iZXI7XHJcblx0Y29uc3RydWN0b3IobGVmdCA9IC0xLCByaWdodCA9IDEsIHRvcCA9IDEsIGJvdHRvbSA9IC0xLCBuZWFyID0gMC4xLCBmYXIgPSAyMDAwKSB7XHJcblx0XHRzdXBlcigpO1xyXG5cdFx0dGhpcy5uZWFyID0gbmVhcjtcclxuXHRcdHRoaXMuZmFyID0gZmFyO1xyXG5cdFx0dGhpcy5sZWZ0ID0gbGVmdDtcclxuXHRcdHRoaXMudG9wID0gdG9wO1xyXG5cdFx0dGhpcy5ib3R0b20gPSBib3R0b207XHJcblx0XHR0aGlzLnJpZ2h0ID0gcmlnaHQ7XHJcblx0XHR0aGlzLmlzT3J0aG9ncmFwaGljQ2FtZXJhID0gdHJ1ZTtcclxuXHR9XHJcblx0cHJpdmF0ZSB1cGRhdGVDYW1lcmFQYXJtcygpIHtcclxuXHRcdGNvbnN0IGR4ID0gKHRoaXMucmlnaHQgLSB0aGlzLmxlZnQpIC8gMjtcclxuXHRcdGNvbnN0IGR5ID0gKHRoaXMudG9wIC0gdGhpcy5ib3R0b20pIC8gMjtcclxuXHRcdGNvbnN0IGN4ID0gKHRoaXMucmlnaHQgKyB0aGlzLmxlZnQpIC8gMjtcclxuXHRcdGNvbnN0IGN5ID0gKHRoaXMudG9wICsgdGhpcy5ib3R0b20pIC8gMjtcclxuXHRcdHJldHVybiB7XHJcblx0XHRcdGxlZnQ6IGN4IC0gZHgsXHJcblx0XHRcdHJpZ2h0OiBjeCArIGR4LFxyXG5cdFx0XHR0b3A6IGN5ICsgZHksXHJcblx0XHRcdGJvdHRvbTogY3kgLSBkeVxyXG5cdFx0fTtcclxuXHR9XHJcblx0cHVibGljIHVwZGF0ZVByb2plY3Rpb25NYXRyaXgoKSB7XHJcblx0XHRpZiAodGhpcy5wcm9qZWN0TWF0cml4RGlydHkpIHtcclxuXHRcdFx0Y29uc3QgeyBsZWZ0LCByaWdodCwgdG9wLCBib3R0b20gfSA9IHRoaXMudXBkYXRlQ2FtZXJhUGFybXMoKTtcclxuXHRcdFx0dGhpcy5fcHJvamVjdGlvbk1hdHJpeCA9IE1hdHJpeDQubWFrZU9ydGhvZ3JhcGhpYyhsZWZ0LCByaWdodCwgdG9wLCBib3R0b20sIHRoaXMubmVhciwgdGhpcy5mYXIpO1xyXG5cdFx0XHR0aGlzLnByb2plY3RNYXRyaXhEaXJ0eSA9IGZhbHNlO1xyXG5cdFx0fVxyXG5cdH1cclxufVxyXG4iLCJpbXBvcnQgUGVyc3BlY3RpdmVDYW1lcmEgZnJvbSBcIi4uLy4uL2NhbWVyYS9QZXJzcGVjdGl2ZUNhbWVyYVwiO1xuaW1wb3J0IFZlY3RvcjIgZnJvbSBcIi4uLy4uL21hdGgvVmVjdG9yMlwiO1xuaW1wb3J0IHsgU3BvdExpZ2h0IH0gZnJvbSBcIi4uL1Nwb3RMaWdodFwiO1xuaW1wb3J0IHsgQmFzZVNoYWRvdyB9IGZyb20gXCIuL0Jhc2VTaGFkb3dcIjtcblxuZXhwb3J0IGNsYXNzIFNwb3RMaWdodFNoYWRvdyBleHRlbmRzIEJhc2VTaGFkb3cge1xuXHRwdWJsaWMgdHlwZTogc3RyaW5nO1xuXHRjb25zdHJ1Y3RvcigpIHtcblx0XHRjb25zdCBjYW1lcmEgPSBuZXcgUGVyc3BlY3RpdmVDYW1lcmEoNjAsIDEsIDAuMSwgNTAwKTtcblx0XHRzdXBlcihuZXcgVmVjdG9yMigxMDI0LCAxMDI0KSwgY2FtZXJhKTtcblx0XHR0aGlzLnR5cGUgPSBcInNwb3RMaWdodFNoYWRvd1wiO1xuXHR9XG5cblx0cHVibGljIHVwZGF0ZShsaWdodDogU3BvdExpZ2h0KSB7XG5cdFx0dGhpcy51cGRhdGVNYXRyaWNlcyhsaWdodCk7XG5cdH1cblxuXHR1cGRhdGVNYXRyaWNlcyhsaWdodDogU3BvdExpZ2h0KSB7XG5cdFx0dGhpcy5jYW1lcmEucG9zaXRpb24uY29weShsaWdodC5wb3NpdGlvbik7XG5cdFx0Y29uc3QgeyB4LCB5LCB6IH0gPSBsaWdodC50YXJnZXQ7XG5cdFx0dGhpcy5jYW1lcmEubG9va0F0KHgsIHksIHopO1xuXHRcdHRoaXMuY2FtZXJhLnVwZGF0ZU1hdHJpeCgpO1xuXHRcdHRoaXMudnBNYXRyaXhEaXJ0eSA9IHRydWU7XG5cdH1cbn1cbiIsImltcG9ydCB7IExpZ2h0VHlwZSB9IGZyb20gXCIuLi9jb3JlL1dlYkdQVVR5cGVzXCI7XHJcbmltcG9ydCBWZWN0b3IzIGZyb20gXCIuLi9tYXRoL1ZlY3RvcjNcIjtcclxuaW1wb3J0IHsgTGlnaHQgfSBmcm9tIFwiLi9MaWdodFwiO1xyXG5pbXBvcnQgeyBTcG90TGlnaHRTaGFkb3cgfSBmcm9tIFwiLi9zaGFkb3dzL1Nwb3RMaWdodFNoYWRvd1wiO1xyXG5cclxuZXhwb3J0IGNsYXNzIFNwb3RMaWdodCBleHRlbmRzIExpZ2h0IHtcclxuXHRwcml2YXRlIF9kaXN0YW5jZTogbnVtYmVyO1xyXG5cdHByaXZhdGUgX2FuZ2xlOiBudW1iZXI7XHJcblx0cHJpdmF0ZSBfcGVudW1icmE6IG51bWJlcjtcclxuXHRwcml2YXRlIF9kZWNheTogbnVtYmVyO1xyXG5cdGRlY2F5RGlydHk6IGJvb2xlYW47XHJcblx0ZGlzdGFuY2VEaXJ0eTogYm9vbGVhbjtcclxuXHRwcml2YXRlIF9jb25lQ29zOiBudW1iZXI7XHJcblx0cHJpdmF0ZSBfcGVudW1icmFDb3M6IG51bWJlcjtcclxuXHRjb25lQ29zRGlydHk6IGJvb2xlYW47XHJcblx0cGVudW1icmFEaXJ0eTogYm9vbGVhbjtcclxuXHRhbmdsZURpcnR5OiBib29sZWFuO1xyXG5cdHBlbnVtYnJhQ29zRGlydHk6IGJvb2xlYW47XHJcblx0Y29uc3RydWN0b3IoY29sb3IsIGludGVuc2l0eSwgZGlzdGFuY2UgPSAwLCBhbmdsZSA9IDYwLCBwZW51bWJyYSA9IDYwLCBkZWNheSA9IDQsIG9wZW5TaGFkb3cgPSB0cnVlKSB7XHJcblx0XHRzdXBlcihjb2xvciwgaW50ZW5zaXR5KTtcclxuXHRcdHRoaXMuX2Rpc3RhbmNlID0gZGlzdGFuY2U7XHJcblx0XHR0aGlzLl9hbmdsZSA9IChhbmdsZSAvIDE4MCkgKiBNYXRoLlBJO1xyXG5cdFx0dGhpcy5fcGVudW1icmEgPSAocGVudW1icmEgLyAxODApICogTWF0aC5QSTtcclxuXHRcdHRoaXMuX2RlY2F5ID0gZGVjYXk7XHJcblx0XHR0aGlzLmxpZ2h0VHlwZSA9IExpZ2h0VHlwZS5TcG90TGlnaHQ7XHJcblx0XHR0aGlzLmFuZ2xlRGlydHkgPSB0cnVlO1xyXG5cdFx0dGhpcy5wZW51bWJyYURpcnR5ID0gdHJ1ZTtcclxuXHRcdHRoaXMuZGlzdGFuY2VEaXJ0eSA9IHRydWU7XHJcblx0XHR0aGlzLmRlY2F5RGlydHkgPSB0cnVlO1xyXG5cdFx0dGhpcy5jb25lQ29zRGlydHkgPSB0cnVlO1xyXG5cdFx0dGhpcy5wZW51bWJyYUNvc0RpcnR5ID0gdHJ1ZTtcclxuXHRcdGlmIChvcGVuU2hhZG93KSB0aGlzLnNoYWRvdyA9IG5ldyBTcG90TGlnaHRTaGFkb3coKTtcclxuXHRcdHRoaXMudXBkYXRlQ29uZUNvc09yUGVudW1icmFDb3MoKTtcclxuXHR9XHJcblxyXG5cdGdldCBkaXJ0ZWN0RGlydHkoKSB7XHJcblx0XHRyZXR1cm4gdGhpcy5wb3NpdGlvbkRpcnR5IHx8IHRoaXMudGFyZ2V0RGlydHk7XHJcblx0fVxyXG5cclxuXHRzZXQgZGlydGVjdERpcnR5KHZhbHVlKSB7XHJcblx0XHR0aGlzLnBvc2l0aW9uRGlydHkgPSB2YWx1ZTtcclxuXHRcdHRoaXMudGFyZ2V0RGlydHkgPSB2YWx1ZTtcclxuXHR9XHJcblxyXG5cdGdldCBkaXJlY3Rpb25hbCgpIHtcclxuXHRcdGNvbnN0IHJlc3VsdCA9IG5ldyBWZWN0b3IzKCk7XHJcblx0XHRWZWN0b3IzLnN1YnRyYWN0KHRoaXMucG9zaXRpb24sIHRoaXMudGFyZ2V0LCByZXN1bHQpO1xyXG5cdFx0cmV0dXJuIFZlY3RvcjMubm9ybWFsaXplKHJlc3VsdCwgbmV3IFZlY3RvcjMoKSk7XHJcblx0fVxyXG5cdGdldCBhbmdsZSgpIHtcclxuXHRcdHJldHVybiB0aGlzLl9hbmdsZTtcclxuXHR9XHJcblx0c2V0IGFuZ2xlKHZhbHVlKSB7XHJcblx0XHR0aGlzLmFuZ2xlRGlydHkgPSB0cnVlO1xyXG5cdFx0dGhpcy5fYW5nbGUgPSAodmFsdWUgLyAxODApICogTWF0aC5QSTtcclxuXHRcdHRoaXMudXBkYXRlQ29uZUNvc09yUGVudW1icmFDb3MoKTtcclxuXHR9XHJcblx0Z2V0IHBlbnVtYnJhKCkge1xyXG5cdFx0cmV0dXJuIHRoaXMuX3BlbnVtYnJhO1xyXG5cdH1cclxuXHRzZXQgcGVudW1icmEodmFsdWUpIHtcclxuXHRcdHRoaXMucGVudW1icmFEaXJ0eSA9IHRydWU7XHJcblx0XHR0aGlzLl9wZW51bWJyYSA9ICh2YWx1ZSAvIDE4MCkgKiBNYXRoLlBJO1xyXG5cdFx0dGhpcy51cGRhdGVDb25lQ29zT3JQZW51bWJyYUNvcygpO1xyXG5cdH1cclxuXHRzZXQgZGlzdGFuY2UodmFsdWUpIHtcclxuXHRcdHRoaXMuZGlzdGFuY2VEaXJ0eSA9IHRydWU7XHJcblx0XHR0aGlzLl9kaXN0YW5jZSA9IHZhbHVlO1xyXG5cdH1cclxuXHRnZXQgZGlzdGFuY2UoKSB7XHJcblx0XHRyZXR1cm4gdGhpcy5fZGlzdGFuY2U7XHJcblx0fVxyXG5cdHNldCBkZWNheSh2YWx1ZSkge1xyXG5cdFx0dGhpcy5kZWNheURpcnR5ID0gdHJ1ZTtcclxuXHRcdHRoaXMuX2RlY2F5ID0gdmFsdWU7XHJcblx0fVxyXG5cdGdldCBkZWNheSgpIHtcclxuXHRcdHJldHVybiB0aGlzLl9kZWNheTtcclxuXHR9XHJcblx0c2V0IGNvbmVDb3ModmFsdWUpIHtcclxuXHRcdHRoaXMuY29uZUNvc0RpcnR5ID0gdHJ1ZTtcclxuXHRcdHRoaXMuX2NvbmVDb3MgPSB2YWx1ZTtcclxuXHR9XHJcblx0Z2V0IGNvbmVDb3MoKSB7XHJcblx0XHRyZXR1cm4gdGhpcy5fY29uZUNvcztcclxuXHR9XHJcblx0c2V0IHBlbnVtYnJhQ29zKHZhbHVlKSB7XHJcblx0XHR0aGlzLnBlbnVtYnJhQ29zRGlydHkgPSB0cnVlO1xyXG5cdFx0dGhpcy5fcGVudW1icmFDb3MgPSB2YWx1ZTtcclxuXHR9XHJcblx0Z2V0IHBlbnVtYnJhQ29zKCkge1xyXG5cdFx0cmV0dXJuIHRoaXMuX3BlbnVtYnJhQ29zO1xyXG5cdH1cclxuXHRwcml2YXRlIHVwZGF0ZUNvbmVDb3NPclBlbnVtYnJhQ29zKCkge1xyXG5cdFx0dGhpcy5fY29uZUNvcyA9IE1hdGguY29zKHRoaXMuYW5nbGUpO1xyXG5cdFx0dGhpcy5fcGVudW1icmFDb3MgPSBNYXRoLmNvcyh0aGlzLmFuZ2xlICsgdGhpcy5wZW51bWJyYSk7XHJcblx0fVxyXG59XHJcbi8vIHVuaWZvcm1cclxuLy8gY29sb3I6IHt9LFxyXG4vLyBwb3NpdGlvbjoge30sXHJcbi8vIGRpcmVjdGlvbjoge30sXHJcbi8vIGRpc3RhbmNlOiB7fSxcclxuLy8gY29uZUNvczoge30sXHJcbi8vIHBlbnVtYnJhQ29zOiB7fSxcclxuLy8gZGVjYXk6IHt9XHJcbiIsImltcG9ydCBPcnRob2dyYXBoaWNDYW1lcmEgZnJvbSBcIi4uLy4uL2NhbWVyYS9PcnRob2dyYXBoaWNDYW1lcmFcIjtcbmltcG9ydCBWZWN0b3IyIGZyb20gXCIuLi8uLi9tYXRoL1ZlY3RvcjJcIjtcbmltcG9ydCB7IERpcmVjdGlvbmFsTGlnaHQgfSBmcm9tIFwiLi4vRGlyZWN0aW9uYWxMaWdodFwiO1xuaW1wb3J0IHsgQmFzZVNoYWRvdyB9IGZyb20gXCIuL0Jhc2VTaGFkb3dcIjtcblxuZXhwb3J0IGNsYXNzIERpcmVjdGlvbmFsTGlnaHRTaGFkb3cgZXh0ZW5kcyBCYXNlU2hhZG93IHtcblx0cHVibGljIHR5cGU6IHN0cmluZztcblx0Y29uc3RydWN0b3IoKSB7XG5cdFx0Y29uc3QgY2FtZXJhID0gbmV3IE9ydGhvZ3JhcGhpY0NhbWVyYSgtNTAsIDUwLCA1MCwgLTUwLCAwLCAxMDApO1xuXHRcdHN1cGVyKG5ldyBWZWN0b3IyKDEwMjQsIDEwMjQpLCBjYW1lcmEpO1xuXHRcdHRoaXMudHlwZSA9IFwiZGlyZWN0aW9uYWxMaWdodFNoYWRvd1wiO1xuXHR9XG5cblx0cHVibGljIHVwZGF0ZShsaWdodDogRGlyZWN0aW9uYWxMaWdodCkge1xuXHRcdHRoaXMudXBkYXRlTWF0cmljZXMobGlnaHQpO1xuXHR9XG5cblx0dXBkYXRlTWF0cmljZXMobGlnaHQ6IERpcmVjdGlvbmFsTGlnaHQpIHtcblx0XHR0aGlzLmNhbWVyYS5wb3NpdGlvbi5jb3B5KGxpZ2h0LnBvc2l0aW9uKTtcblx0XHRjb25zdCB7IHgsIHksIHogfSA9IGxpZ2h0LnRhcmdldDtcblx0XHR0aGlzLmNhbWVyYS5sb29rQXQoeCwgeSwgeik7XG5cdFx0dGhpcy5jYW1lcmEudXBkYXRlTWF0cml4KCk7XG5cdFx0dGhpcy52cE1hdHJpeERpcnR5ID0gdHJ1ZTtcblx0fVxufVxuIiwiaW1wb3J0IHsgTGlnaHRUeXBlIH0gZnJvbSBcIi4uL2NvcmUvV2ViR1BVVHlwZXNcIjtcbmltcG9ydCBWZWN0b3IzIGZyb20gXCIuLi9tYXRoL1ZlY3RvcjNcIjtcbmltcG9ydCB7IExpZ2h0IH0gZnJvbSBcIi4vTGlnaHRcIjtcbmltcG9ydCB7IERpcmVjdGlvbmFsTGlnaHRTaGFkb3cgfSBmcm9tIFwiLi9zaGFkb3dzL0RpcmVjdGlvbmFsTGlnaHRTaGFkb3dcIjtcblxuZXhwb3J0IGNsYXNzIERpcmVjdGlvbmFsTGlnaHQgZXh0ZW5kcyBMaWdodCB7XG5cdGNvbnN0cnVjdG9yKGNvbG9yOiBWZWN0b3IzLCBpbnRlbnNpdHk6IG51bWJlciwgb3BlblNoYWRvdyA9IHRydWUpIHtcblx0XHRzdXBlcihjb2xvciwgaW50ZW5zaXR5KTtcblx0XHR0aGlzLmxpZ2h0VHlwZSA9IExpZ2h0VHlwZS5EaXJlY3Rpb25hbExpZ2h0O1xuXHRcdGlmIChvcGVuU2hhZG93KSB0aGlzLnNoYWRvdyA9IG5ldyBEaXJlY3Rpb25hbExpZ2h0U2hhZG93KCk7XG5cdH1cblxuXHRnZXQgZGlydGVjdERpcnR5KCkge1xuXHRcdHJldHVybiB0aGlzLnBvc2l0aW9uRGlydHkgfHwgdGhpcy50YXJnZXREaXJ0eTtcblx0fVxuXG5cdHNldCBkaXJ0ZWN0RGlydHkodmFsdWUpIHtcblx0XHR0aGlzLnBvc2l0aW9uRGlydHkgPSB2YWx1ZTtcblx0XHR0aGlzLnRhcmdldERpcnR5ID0gdmFsdWU7XG5cdH1cblxuXHRnZXQgZGlyZWN0aW9uYWwoKSB7XG5cdFx0Y29uc3QgcmVzdWx0ID0gbmV3IFZlY3RvcjMoKTtcblx0XHRWZWN0b3IzLnN1YnRyYWN0KHRoaXMudGFyZ2V0LCB0aGlzLnBvc2l0aW9uLCByZXN1bHQpO1xuXHRcdHJldHVybiByZXN1bHQubm9ybWFsaXplKCk7XG5cdH1cbn1cbi8vIHVuaWZvcm1cbi8vIGRpcmVjdGlvbjoge30sXG4vLyBjb2xvcjoge31cbiIsImltcG9ydCBDYW1lcmEgZnJvbSBcIi4uL2NhbWVyYS9DYW1lcmFcIjtcclxuaW1wb3J0IHsgRnJhbWVTdGF0ZSB9IGZyb20gXCIuLi9jb3JlL0ZyYW1lU3RhdGVcIjtcclxuaW1wb3J0IFJlbmRlck9iamVjdCBmcm9tIFwiLi4vY29yZS9SZW5kZXJPYmplY3RcIjtcclxuaW1wb3J0IHsgUmVuZGVyT2JqZWN0VHlwZSB9IGZyb20gXCIuLi9jb3JlL1dlYkdQVVR5cGVzXCI7XHJcbmltcG9ydCBjcmVhdGVHdWlkIGZyb20gXCIuLi91dGlscy9jcmVhdGVHdWlkXCI7XHJcbmltcG9ydCB7IE1lc2ggfSBmcm9tIFwiLi9NZXNoXCI7XHJcblxyXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBOb2RlIGV4dGVuZHMgUmVuZGVyT2JqZWN0IHtcclxuXHR1aWQ6IHN0cmluZztcclxuXHRjaGlsZHJlbjogTWFwPHN0cmluZywgTm9kZSB8IE1lc2g+O1xyXG5cdG5hbWU6IHN0cmluZztcclxuXHRjb25zdHJ1Y3RvcigpIHtcclxuXHRcdHN1cGVyKCk7XHJcblx0XHR0aGlzLnR5cGUgPSBSZW5kZXJPYmplY3RUeXBlLk5vZGU7XHJcblx0XHR0aGlzLmNoaWxkcmVuID0gbmV3IE1hcCgpO1xyXG5cdFx0dGhpcy5wYXJlbnQgPSBudWxsO1xyXG5cdFx0dGhpcy51aWQgPSBjcmVhdGVHdWlkKCk7XHJcblx0fVxyXG5cdGFkZChub2RlOiBOb2RlIHwgTWVzaCkge1xyXG5cdFx0bm9kZS5wYXJlbnQgPSB0aGlzO1xyXG5cdFx0dGhpcy5jaGlsZHJlbi5zZXQobm9kZS51aWQsIG5vZGUpO1xyXG5cdH1cclxuXHRyZW1vdmUobm9kZTogTm9kZSB8IE1lc2gpIHtcclxuXHRcdHRoaXMuY2hpbGRyZW4uZGVsZXRlKG5vZGUudWlkKTtcclxuXHR9XHJcblx0dXBkYXRlKGZyYW1lU3RhdGU6IEZyYW1lU3RhdGUsIGNhbWVyYT86IENhbWVyYSkge1xyXG5cdFx0dGhpcy51cGRhdGVNYXRyaXgodGhpcz8ucGFyZW50Py5tb2RlbE1hdHJpeD8uY2xvbmUoKSk7XHJcblx0XHR0aGlzPy5jaGlsZHJlbj8uZm9yRWFjaD8uKChub2RlKSA9PiB7XHJcblx0XHRcdG5vZGUudXBkYXRlKGZyYW1lU3RhdGUsIGNhbWVyYSk7XHJcblx0XHR9KTtcclxuXHR9XHJcblx0ZGVzdHJveSgpIHtcclxuXHRcdHRoaXMuY2hpbGRyZW4uZm9yRWFjaCgobm9kZSkgPT4ge1xyXG5cdFx0XHRub2RlLmRlc3Ryb3koKTtcclxuXHRcdH0pO1xyXG5cdFx0dGhpcz8uY2hpbGRyZW4/LmNsZWFyKCk7XHJcblx0fVxyXG5cdHRyYXZlcnNlKHRyYXZlcnNlRnVuY3Rpb246IEZ1bmN0aW9uLCBwYXJhbTogeyBbcHJvcDogc3RyaW5nXTogYW55IH0pOiB2b2lkIHtcclxuXHRcdGZvciAobGV0IGkgPSAwLCBsZW4gPSB0aGlzLmNoaWxkcmVuLnNpemU7IGkgPCBsZW47IGkrKykge1xyXG5cdFx0XHR0aGlzLmNoaWxkcmVuLmZvckVhY2goKGNoaWxkKSA9PiB7XHJcblx0XHRcdFx0Y2hpbGQudHJhdmVyc2UodHJhdmVyc2VGdW5jdGlvbiwgcGFyYW0pO1xyXG5cdFx0XHR9KTtcclxuXHRcdH1cclxuXHR9XHJcbn1cclxuIiwiaW1wb3J0IENhbWVyYSBmcm9tIFwiLi4vY2FtZXJhL0NhbWVyYVwiO1xuaW1wb3J0IHsgRnJhbWVTdGF0ZSB9IGZyb20gXCIuLi9jb3JlL0ZyYW1lU3RhdGVcIjtcbmltcG9ydCB7IEJ1ZmZlckJpbmRpbmdUeXBlLCBCdWZmZXJVc2FnZSB9IGZyb20gXCIuLi9jb3JlL1dlYkdQVUNvbnN0YW50XCI7XG5pbXBvcnQgeyBSZW5kZXJPYmplY3RUeXBlLCBVbmlmb3JtRW51bSB9IGZyb20gXCIuLi9jb3JlL1dlYkdQVVR5cGVzXCI7XG5pbXBvcnQgR2VvbWV0cnkgZnJvbSBcIi4uL2dlb21ldHJ5L0dlb21ldHJ5XCI7XG5pbXBvcnQgeyBNYXRlcmlhbCB9IGZyb20gXCIuLi9tYXRlcmlhbC9NYXRlcmlhbFwiO1xuaW1wb3J0IE1hdHJpeDQgZnJvbSBcIi4uL21hdGgvTWF0cml4NFwiO1xuaW1wb3J0IFVuaWZvcm1CdWZmZXIgZnJvbSBcIi4uL3JlbmRlci9Vbmlmb3JtQnVmZmVyXCI7XG5pbXBvcnQgeyBNZXNoIH0gZnJvbSBcIi4vTWVzaFwiO1xuaW1wb3J0IE5vZGUgZnJvbSBcIi4vTm9kZVwiO1xuXG5leHBvcnQgY2xhc3MgU0tpbk1lc2ggZXh0ZW5kcyBNZXNoIHtcblx0aW52ZXJzZUJpbmRNYXRyaWNlczogQXJyYXk8TWF0cml4ND47XG5cdHVuaWZvcm1NYXRyaXhzOiBBcnJheTxNYXRyaXg0Pjtcblx0am9pbnRzOiBBcnJheTxOb2RlPjtcblx0cHJpdmF0ZSBoYXNBZGRKb2ludHM6IGJvb2xlYW47XG5cdGNvbnN0cnVjdG9yKGdlb21ldHJ5PzogR2VvbWV0cnksIG1hdGVyaWFsPzogTWF0ZXJpYWwpIHtcblx0XHRzdXBlcihnZW9tZXRyeSwgbWF0ZXJpYWwpO1xuXHRcdHRoaXMudHlwZSA9IFJlbmRlck9iamVjdFR5cGUuU2tpbk1lc2g7XG5cdFx0dGhpcy51bmlmb3JtTWF0cml4cyA9IFtdO1xuXHRcdHRoaXMuaGFzQWRkSm9pbnRzID0gZmFsc2U7XG5cdH1cblx0c2V0U2tpbkRhdGEoZGF0YTogU2tpbkRhdGFUeXBlKSB7XG5cdFx0dGhpcy5pbnZlcnNlQmluZE1hdHJpY2VzID0gZGF0YS5pbnZlcnNlQmluZE1hdHJpY2VzO1xuXHRcdHRoaXMuam9pbnRzID0gZGF0YS5qb2ludHM7XG5cdH1cblx0dXBkYXRlKGZyYW1lU3RhdGU6IEZyYW1lU3RhdGUsIGNhbWVyYT86IENhbWVyYSkge1xuXHRcdHRoaXMudW5pZm9ybU1hdHJpeHMgPSB0aGlzLmpvaW50cy5tYXAoKGpvaW50KSA9PiAoam9pbnQgYXMgTm9kZSkubW9kZWxNYXRyaXgpO1xuXHRcdHN1cGVyLnVwZGF0ZShmcmFtZVN0YXRlLCBjYW1lcmEpO1xuXHRcdGlmICghdGhpcy5oYXNBZGRKb2ludHMpIHRoaXMuYWRkVW5pZm9ybXNUb01hdGVyaWFsKCk7XG5cdH1cblx0cHJpdmF0ZSBhZGRVbmlmb3Jtc1RvTWF0ZXJpYWwoKSB7XG5cdFx0aWYgKCF0aGlzLm1hdGVyaWFsLnNoYWRlckRhdGEpIHJldHVybjtcblx0XHR0aGlzLmhhc0FkZEpvaW50cyA9IHRydWU7XG5cdFx0aWYgKHRoaXMuam9pbnRzKSB7XG5cdFx0XHRjb25zdCBza2luSm9pbnRzQnVmZmVyID0gbmV3IFVuaWZvcm1CdWZmZXIoe1xuXHRcdFx0XHRsYWJlbDogXCJza2luSm9pbnRzQnVmZmVyXCIsXG5cdFx0XHRcdHR5cGU6IEJ1ZmZlckJpbmRpbmdUeXBlLlJlYWRPbmx5U3RvcmFnZSxcblx0XHRcdFx0dXNhZ2U6IEJ1ZmZlclVzYWdlLlN0b3JhZ2UgfCBCdWZmZXJVc2FnZS5Db3B5RHN0LFxuXHRcdFx0XHRzaXplOiAzMDAwXG5cdFx0XHR9KTtcblx0XHRcdGNvbnN0IGludnNCdWZmZXIgPSBuZXcgVW5pZm9ybUJ1ZmZlcih7XG5cdFx0XHRcdGxhYmVsOiBcImludnNCdWZmZXJcIixcblx0XHRcdFx0dHlwZTogQnVmZmVyQmluZGluZ1R5cGUuUmVhZE9ubHlTdG9yYWdlLFxuXHRcdFx0XHR1c2FnZTogQnVmZmVyVXNhZ2UuU3RvcmFnZSB8IEJ1ZmZlclVzYWdlLkNvcHlEc3QsXG5cdFx0XHRcdHNpemU6IDMwMDBcblx0XHRcdH0pO1xuXHRcdFx0c2tpbkpvaW50c0J1ZmZlci5zZXRVbmlmb3JtKFxuXHRcdFx0XHRcImpvaW50c1wiLFxuXHRcdFx0XHQoKSA9PiB7XG5cdFx0XHRcdFx0cmV0dXJuIHRoaXMudW5pZm9ybU1hdHJpeHM7XG5cdFx0XHRcdH0sXG5cdFx0XHRcdFVuaWZvcm1FbnVtLk1hdDRBcnJheSxcblx0XHRcdFx0dGhpcy51bmlmb3JtTWF0cml4cy5sZW5ndGhcblx0XHRcdCk7XG5cdFx0XHRpbnZzQnVmZmVyLnNldFVuaWZvcm0oXG5cdFx0XHRcdFwiam9pbnRzSW52XCIsXG5cdFx0XHRcdCgpID0+IHtcblx0XHRcdFx0XHRyZXR1cm4gdGhpcy5pbnZlcnNlQmluZE1hdHJpY2VzO1xuXHRcdFx0XHR9LFxuXHRcdFx0XHRVbmlmb3JtRW51bS5NYXQ0QXJyYXksXG5cdFx0XHRcdHRoaXMuaW52ZXJzZUJpbmRNYXRyaWNlcy5sZW5ndGhcblx0XHRcdCk7XG5cdFx0XHR0aGlzLm1hdGVyaWFsLnNoYWRlckRhdGEuc2V0VW5pZm9ybUJ1ZmZlcihcInNraW5Kb2ludHNCdWZmZXJcIiwgc2tpbkpvaW50c0J1ZmZlcik7XG5cdFx0XHR0aGlzLm1hdGVyaWFsLnNoYWRlckRhdGEuc2V0VW5pZm9ybUJ1ZmZlcihcImludnNCdWZmZXJcIiwgaW52c0J1ZmZlcik7XG5cdFx0fVxuXHR9XG59XG5leHBvcnQgdHlwZSBTa2luRGF0YVR5cGUgPSB7XG5cdGludmVyc2VCaW5kTWF0cmljZXM/OiBBcnJheTxNYXRyaXg0Pjtcblx0am9pbnRzPzogQXJyYXk8Tm9kZT47XG59O1xuIiwiaW1wb3J0IHsgUXVhdGVybmlvbiB9IGZyb20gXCIuLi9tYXRoL1F1YXRlcm5pb25cIjtcclxuaW1wb3J0IFZlY3RvcjIgZnJvbSBcIi4uL21hdGgvVmVjdG9yMlwiO1xyXG5pbXBvcnQgVmVjdG9yMyBmcm9tIFwiLi4vbWF0aC9WZWN0b3IzXCI7XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gY2xhbXAobnVtOiBudW1iZXIsIG1pbjogbnVtYmVyLCBtYXg6IG51bWJlcikge1xyXG5cdHJldHVybiBNYXRoLm1pbihNYXRoLm1heChudW0sIG1pbiksIG1heCk7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiB0b0Zsb2F0KG51bTogbnVtYmVyIHwgdW5kZWZpbmVkLCBkZWZhdWx0VmFsdWUgPSAxKSB7XHJcblx0Y29uc3QgbiA9IG51bSAhPT0gdW5kZWZpbmVkID8gbnVtIDogZGVmYXVsdFZhbHVlO1xyXG5cdGlmIChOdW1iZXIuaXNJbnRlZ2VyKG4pKSB7XHJcblx0XHRyZXR1cm4gYCR7bn0uMGA7XHJcblx0fVxyXG5cdHJldHVybiBuO1xyXG59XHJcblxyXG5leHBvcnQgdHlwZSBUeXBlZEFycmF5ID0gSW50OEFycmF5IHwgVWludDhBcnJheSB8IEludDE2QXJyYXkgfCBVaW50MTZBcnJheSB8IFVpbnQzMkFycmF5IHwgRmxvYXQzMkFycmF5O1xyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIG5ld1R5cGVkQXJyYXkodHlwZTogbnVtYmVyLCBidWZmZXI6IEFycmF5QnVmZmVyLCBieXRlT2Zmc2V0OiBudW1iZXIsIGxlbmd0aDogbnVtYmVyKSB7XHJcblx0c3dpdGNoICh0eXBlKSB7XHJcblx0XHRjYXNlIDUxMjA6XHJcblx0XHRcdHJldHVybiBuZXcgSW50OEFycmF5KGJ1ZmZlciwgYnl0ZU9mZnNldCwgbGVuZ3RoKTtcclxuXHRcdGNhc2UgNTEyMTpcclxuXHRcdFx0cmV0dXJuIG5ldyBVaW50OEFycmF5KGJ1ZmZlciwgYnl0ZU9mZnNldCwgbGVuZ3RoKTtcclxuXHRcdGNhc2UgNTEyMjpcclxuXHRcdFx0cmV0dXJuIG5ldyBJbnQxNkFycmF5KGJ1ZmZlciwgYnl0ZU9mZnNldCwgbGVuZ3RoKTtcclxuXHRcdGNhc2UgNTEyMzpcclxuXHRcdFx0cmV0dXJuIG5ldyBVaW50MTZBcnJheShidWZmZXIsIGJ5dGVPZmZzZXQsIGxlbmd0aCk7XHJcblx0XHRjYXNlIDUxMjQ6XHJcblx0XHRcdHJldHVybiBuZXcgSW50MzJBcnJheShidWZmZXIsIGJ5dGVPZmZzZXQsIGxlbmd0aCk7XHJcblx0XHRjYXNlIDUxMjU6XHJcblx0XHRcdHJldHVybiBuZXcgVWludDMyQXJyYXkoYnVmZmVyLCBieXRlT2Zmc2V0LCBsZW5ndGgpO1xyXG5cdFx0Y2FzZSA1MTI2OlxyXG5cdFx0XHRyZXR1cm4gbmV3IEZsb2F0MzJBcnJheShidWZmZXIsIGJ5dGVPZmZzZXQsIGxlbmd0aCk7XHJcblx0XHRkZWZhdWx0OlxyXG5cdFx0XHR0aHJvdyBuZXcgRXJyb3IoXCJpbnZhbGlkIGNvbXBvbmVudCB0eXBlXCIpO1xyXG5cdH1cclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIHRvSW5kaWNlcyhhcnJheTogVHlwZWRBcnJheSk6IFVpbnQxNkFycmF5IHwgVWludDMyQXJyYXkge1xyXG5cdGlmIChhcnJheSBpbnN0YW5jZW9mIFVpbnQxNkFycmF5IHx8IGFycmF5IGluc3RhbmNlb2YgVWludDMyQXJyYXkpIHtcclxuXHRcdHJldHVybiBhcnJheTtcclxuXHR9XHJcblx0bGV0IHRvQXJyYXk7XHJcblx0aWYgKGFycmF5IGluc3RhbmNlb2YgRmxvYXQzMkFycmF5KSB7XHJcblx0XHR0b0FycmF5ID0gbmV3IFVpbnQzMkFycmF5KGFycmF5Lmxlbmd0aCk7XHJcblx0fSBlbHNlIHtcclxuXHRcdGxldCBtYXggPSAwO1xyXG5cdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCBhcnJheS5sZW5ndGg7IGkrKykge1xyXG5cdFx0XHRtYXggPSBtYXggPCBhcnJheVtpXSA/IGFycmF5W2ldIDogbWF4O1xyXG5cdFx0fVxyXG5cdFx0aWYgKG1heCA8IDY1NTM2KSB7XHJcblx0XHRcdHRvQXJyYXkgPSBuZXcgVWludDE2QXJyYXkoYXJyYXkubGVuZ3RoKTtcclxuXHRcdH0gZWxzZSB7XHJcblx0XHRcdHRvQXJyYXkgPSBuZXcgVWludDMyQXJyYXkoYXJyYXkubGVuZ3RoKTtcclxuXHRcdH1cclxuXHR9XHJcblx0YXJyYXkuZm9yRWFjaCgoZWxlbWVudCwgaW5kZXgpID0+IHtcclxuXHRcdHRvQXJyYXlbaW5kZXhdID0gZWxlbWVudDtcclxuXHR9KTtcclxuXHRyZXR1cm4gdG9BcnJheTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGpvaW5BcnJheShhcnJheXM6IEFycmF5PEZsb2F0MzJBcnJheT4pIHtcclxuXHRsZXQgbGVuZ3RoID0gMDtcclxuXHRhcnJheXMuZm9yRWFjaCgoYXJyYXkpID0+IHtcclxuXHRcdGxlbmd0aCArPSBhcnJheS5sZW5ndGg7XHJcblx0fSk7XHJcblx0Y29uc3Qgam9pbmVkID0gbmV3IEZsb2F0MzJBcnJheShsZW5ndGgpO1xyXG5cdGxlbmd0aCA9IDA7XHJcblx0YXJyYXlzLmZvckVhY2goKGFycmF5KSA9PiB7XHJcblx0XHRqb2luZWQuc2V0KGFycmF5LCBsZW5ndGgpO1xyXG5cdFx0bGVuZ3RoICs9IGFycmF5Lmxlbmd0aDtcclxuXHR9KTtcclxuXHRyZXR1cm4gam9pbmVkO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlR1BVQnVmZmVyKGFycmF5OiBUeXBlZEFycmF5LCB1c2FnZTogbnVtYmVyLCBkZXZpY2U6IEdQVURldmljZSkge1xyXG5cdGNvbnN0IGJ1ZmZlciA9IGRldmljZS5jcmVhdGVCdWZmZXIoe1xyXG5cdFx0c2l6ZTogKGFycmF5LmJ5dGVMZW5ndGggKyAzKSAmIH4zLCAvLyBlc2xpbnQtZGlzYWJsZS1saW5lIG5vLWJpdHdpc2VcclxuXHRcdHVzYWdlLFxyXG5cdFx0bWFwcGVkQXRDcmVhdGlvbjogdHJ1ZVxyXG5cdH0pO1xyXG5cdGxldCB3cml0ZUFyYXJ5O1xyXG5cdGlmIChhcnJheSBpbnN0YW5jZW9mIEludDhBcnJheSkge1xyXG5cdFx0d3JpdGVBcmFyeSA9IG5ldyBJbnQ4QXJyYXkoYnVmZmVyLmdldE1hcHBlZFJhbmdlKCkpO1xyXG5cdH0gZWxzZSBpZiAoYXJyYXkgaW5zdGFuY2VvZiBVaW50OEFycmF5KSB7XHJcblx0XHR3cml0ZUFyYXJ5ID0gbmV3IFVpbnQ4QXJyYXkoYnVmZmVyLmdldE1hcHBlZFJhbmdlKCkpO1xyXG5cdH0gZWxzZSBpZiAoYXJyYXkgaW5zdGFuY2VvZiBJbnQxNkFycmF5KSB7XHJcblx0XHR3cml0ZUFyYXJ5ID0gbmV3IEludDE2QXJyYXkoYnVmZmVyLmdldE1hcHBlZFJhbmdlKCkpO1xyXG5cdH0gZWxzZSBpZiAoYXJyYXkgaW5zdGFuY2VvZiBVaW50MTZBcnJheSkge1xyXG5cdFx0d3JpdGVBcmFyeSA9IG5ldyBVaW50MTZBcnJheShidWZmZXIuZ2V0TWFwcGVkUmFuZ2UoKSk7XHJcblx0fSBlbHNlIGlmIChhcnJheSBpbnN0YW5jZW9mIFVpbnQzMkFycmF5KSB7XHJcblx0XHR3cml0ZUFyYXJ5ID0gbmV3IFVpbnQzMkFycmF5KGJ1ZmZlci5nZXRNYXBwZWRSYW5nZSgpKTtcclxuXHR9IGVsc2Uge1xyXG5cdFx0d3JpdGVBcmFyeSA9IG5ldyBGbG9hdDMyQXJyYXkoYnVmZmVyLmdldE1hcHBlZFJhbmdlKCkpO1xyXG5cdH1cclxuXHR3cml0ZUFyYXJ5LnNldChhcnJheSk7XHJcblx0YnVmZmVyLnVubWFwKCk7XHJcblx0cmV0dXJuIGJ1ZmZlcjtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGdlbmVyYXRlTm9ybWFscyhpbmRpY2VzOiBUeXBlZEFycmF5IHwgbnVsbCwgcG9zaXRpb25zOiBUeXBlZEFycmF5KSB7XHJcblx0Y29uc3Qgbm9ybWFscyA9IG5ldyBGbG9hdDMyQXJyYXkocG9zaXRpb25zLmxlbmd0aCk7XHJcblx0Y29uc3QgdmVydGV4Q291bnQgPSBpbmRpY2VzID8gaW5kaWNlcy5sZW5ndGggOiBwb3NpdGlvbnMubGVuZ3RoO1xyXG5cdGZvciAobGV0IGkgPSAwOyBpIDwgdmVydGV4Q291bnQ7IGkgKz0gMykge1xyXG5cdFx0Y29uc3QgdHJpSW5kaWNlcyA9IFtdO1xyXG5cdFx0Zm9yIChsZXQgbiA9IDA7IG4gPCAzOyBuICs9IDEpIHtcclxuXHRcdFx0aWYgKGluZGljZXMpIHtcclxuXHRcdFx0XHR0cmlJbmRpY2VzLnB1c2goaW5kaWNlc1tpICsgbl0pO1xyXG5cdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdHRyaUluZGljZXMucHVzaChpICsgbik7XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHRcdGNvbnN0IHRyaWFuZ2xlID0gdHJpSW5kaWNlcy5tYXAoKHZlcnRleEluZGV4KSA9PiB7XHJcblx0XHRcdGNvbnN0IGluZGV4ID0gdmVydGV4SW5kZXggKiAzO1xyXG5cdFx0XHRyZXR1cm4gbmV3IFZlY3RvcjMocG9zaXRpb25zW2luZGV4XSwgcG9zaXRpb25zW2luZGV4ICsgMV0sIHBvc2l0aW9uc1tpbmRleCArIDJdKTtcclxuXHRcdH0pO1xyXG5cdFx0Y29uc3QgZHYxID0gbmV3IFZlY3RvcjMoKTtcclxuXHRcdFZlY3RvcjMuc3VidHJhY3QodHJpYW5nbGVbMV0sIHRyaWFuZ2xlWzBdLCBkdjEpO1xyXG5cdFx0Y29uc3QgZHYyID0gbmV3IFZlY3RvcjMoKTtcclxuXHRcdFZlY3RvcjMuc3VidHJhY3QodHJpYW5nbGVbMl0sIHRyaWFuZ2xlWzBdLCBkdjIpO1xyXG5cdFx0Y29uc3Qgbm9ybWFsID0gbmV3IFZlY3RvcjMoKTtcclxuXHRcdFZlY3RvcjMuY3Jvc3MoZHYxLm5vcm1hbGl6ZSgpLCBkdjIubm9ybWFsaXplKCksIG5vcm1hbCk7XHJcblx0XHRmb3IgKGxldCBuID0gMDsgbiA8IDM7IG4gKz0gMSkge1xyXG5cdFx0XHRjb25zdCBpbmRleCA9IChpICsgbikgKiAzO1xyXG5cdFx0XHRub3JtYWxzW2luZGV4ICsgMF0gKz0gbm9ybWFsLng7XHJcblx0XHRcdG5vcm1hbHNbaW5kZXggKyAxXSArPSBub3JtYWwueTtcclxuXHRcdFx0bm9ybWFsc1tpbmRleCArIDJdICs9IG5vcm1hbC56O1xyXG5cdFx0fVxyXG5cdH1cclxuXHRyZXR1cm4gbm9ybWFscztcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGdlbmVyYXRlVGFuZ2VudHMoXHJcblx0aW5kaWNlczogVHlwZWRBcnJheSB8IG51bGwsXHJcblx0cG9zaXRpb25zOiBUeXBlZEFycmF5LFxyXG5cdG5vcm1hbHM6IFR5cGVkQXJyYXksXHJcblx0dXZzOiBUeXBlZEFycmF5XHJcbikge1xyXG5cdGNvbnN0IHRhbmdlbnRzID0gbmV3IEZsb2F0MzJBcnJheSgobm9ybWFscy5sZW5ndGggLyAzKSAqIDQpO1xyXG5cdGNvbnN0IHZlcnRleENvdW50ID0gaW5kaWNlcyA/IGluZGljZXMubGVuZ3RoIDogcG9zaXRpb25zLmxlbmd0aDtcclxuXHRmb3IgKGxldCBpID0gMDsgaSA8IHZlcnRleENvdW50OyBpICs9IDMpIHtcclxuXHRcdGNvbnN0IHRyaUluZGljZXMgPSBbXTtcclxuXHRcdGZvciAobGV0IG4gPSAwOyBuIDwgMzsgbiArPSAxKSB7XHJcblx0XHRcdGlmIChpbmRpY2VzKSB7XHJcblx0XHRcdFx0dHJpSW5kaWNlcy5wdXNoKGluZGljZXNbaSArIG5dKTtcclxuXHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHR0cmlJbmRpY2VzLnB1c2goaSArIG4pO1xyXG5cdFx0XHR9XHJcblx0XHR9XHJcblx0XHRjb25zdCBwb3MgPSB0cmlJbmRpY2VzLm1hcCgodmVydGV4SW5kZXgpID0+IHtcclxuXHRcdFx0Y29uc3QgaW5kZXggPSB2ZXJ0ZXhJbmRleCAqIDM7XHJcblx0XHRcdHJldHVybiBuZXcgVmVjdG9yMyhwb3NpdGlvbnNbaW5kZXhdLCBwb3NpdGlvbnNbaW5kZXggKyAxXSwgcG9zaXRpb25zW2luZGV4ICsgMl0pO1xyXG5cdFx0fSk7XHJcblx0XHRjb25zdCB1diA9IHRyaUluZGljZXMubWFwKCh2ZXJ0ZXhJbmRleCkgPT4ge1xyXG5cdFx0XHRjb25zdCBpbmRleCA9IHZlcnRleEluZGV4ICogMjtcclxuXHRcdFx0cmV0dXJuIG5ldyBWZWN0b3IyKHV2cz8uW2luZGV4XSwgdXZzPy5baW5kZXggKyAxXSk7XHJcblx0XHR9KTtcclxuXHJcblx0XHRjb25zdCBkdjEgPSBuZXcgVmVjdG9yMygpO1xyXG5cdFx0VmVjdG9yMy5zdWJ0cmFjdChwb3NbMV0sIHBvc1swXSwgZHYxKTtcclxuXHRcdGNvbnN0IGR2MiA9IG5ldyBWZWN0b3IzKCk7XHJcblx0XHRWZWN0b3IzLnN1YnRyYWN0KHBvc1syXSwgcG9zWzBdLCBkdjIpO1xyXG5cdFx0Y29uc3QgZHV2MSA9IG5ldyBWZWN0b3IyKCk7XHJcblx0XHRWZWN0b3IyLnN1YnRyYWN0KHV2WzFdLCB1dlswXSwgZHV2MSk7XHJcblx0XHRjb25zdCBkdXYyID0gbmV3IFZlY3RvcjIoKTtcclxuXHRcdFZlY3RvcjIuc3VidHJhY3QodXZbMl0sIHV2WzBdLCBkdXYyKTtcclxuXHJcblx0XHRjb25zdCB0YW5nZW50ID0gbmV3IFZlY3RvcjMoKTtcclxuXHRcdFZlY3RvcjMubXVsdGlwbHlCeVNjYWxhcihkdjEsIGR1djEueSwgZHYxKTtcclxuXHRcdFZlY3RvcjMubXVsdGlwbHlCeVNjYWxhcihkdjIsIGR1djIueSwgZHYyKTtcclxuXHRcdFZlY3RvcjMuc3VidHJhY3QoZHYxLCBkdjIsIHRhbmdlbnQpO1xyXG5cclxuXHRcdFZlY3RvcjMubXVsdGlwbHlCeVNjYWxhcih0YW5nZW50LCBkdXYyLnkgKiBkdXYxLnggLSBkdXYxLnkgKiBkdXYyLngsIHRhbmdlbnQpO1xyXG5cclxuXHRcdHRhbmdlbnQubm9ybWFsaXplKCk7XHJcblx0XHRmb3IgKGxldCBuID0gMDsgbiA8IDM7IG4gKz0gMSkge1xyXG5cdFx0XHRjb25zdCBpbmRleCA9IChpICsgbikgKiA0O1xyXG5cclxuXHRcdFx0dGFuZ2VudHNbaW5kZXggKyAwXSArPSB0YW5nZW50Lng7XHJcblx0XHRcdHRhbmdlbnRzW2luZGV4ICsgMV0gKz0gdGFuZ2VudC55O1xyXG5cdFx0XHR0YW5nZW50c1tpbmRleCArIDJdICs9IHRhbmdlbnQuejtcclxuXHRcdFx0dGFuZ2VudHNbaW5kZXggKyAzXSA9IDE7XHJcblx0XHR9XHJcblx0fVxyXG5cdHJldHVybiB0YW5nZW50cztcclxufVxyXG5cclxuZnVuY3Rpb24gbGVycChhOiBudW1iZXIsIGI6IG51bWJlciwgeDogbnVtYmVyKSB7XHJcblx0aWYgKHggPCBhKSB7XHJcblx0XHRyZXR1cm4gMDtcclxuXHR9XHJcblx0aWYgKHggPiBiKSB7XHJcblx0XHRyZXR1cm4gMTtcclxuXHR9XHJcblx0cmV0dXJuICh4IC0gYSkgLyAoYiAtIGEpO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gaW50ZXJwUXVhdChpbnB1dDogVHlwZWRBcnJheSwgbzogVHlwZWRBcnJheSwgdGltZTogbnVtYmVyLCBtZXRob2Q6IHN0cmluZykge1xyXG5cdGxldCBpbmRleCA9IDE7XHJcblx0d2hpbGUgKGluZGV4IDwgaW5wdXQubGVuZ3RoIC0gMSAmJiB0aW1lID49IGlucHV0W2luZGV4XSkge1xyXG5cdFx0aW5kZXggKz0gMTtcclxuXHR9XHJcblx0Y29uc3QgdCA9IGxlcnAoaW5wdXRbaW5kZXggLSAxXSwgaW5wdXRbaW5kZXhdLCB0aW1lKTtcclxuXHJcblx0aWYgKG1ldGhvZCA9PT0gXCJDVUJJQ1NQTElORVwiKSB7XHJcblx0XHRjb25zdCB0ZCA9IGlucHV0W2luZGV4XSAtIGlucHV0W2luZGV4IC0gMV07XHJcblx0XHRjb25zdCB0MiA9IHQgKiB0O1xyXG5cdFx0Y29uc3QgdDMgPSB0MiAqIHQ7XHJcblx0XHRjb25zdCBpID0gMTIgKiBpbmRleDtcclxuXHJcblx0XHRjb25zdCB2MCA9IG5ldyBRdWF0ZXJuaW9uKG9baSAtIDhdLCBvW2kgLSA3XSwgb1tpIC0gNl0sIG9baSAtIDVdKTtcclxuXHRcdGNvbnN0IGIwID0gbmV3IFF1YXRlcm5pb24ob1tpIC0gNF0sIG9baSAtIDNdLCBvW2kgLSAyXSwgb1tpIC0gMV0pO1xyXG5cdFx0Y29uc3QgdjEgPSBuZXcgUXVhdGVybmlvbihvW2kgKyA0XSwgb1tpICsgNV0sIG9baSArIDZdLCBvW2kgKyA3XSk7XHJcblx0XHRjb25zdCBhMSA9IG5ldyBRdWF0ZXJuaW9uKG9baV0sIG9baSArIDFdLCBvW2kgKyAyXSwgb1tpICsgM10pO1xyXG5cdFx0UXVhdGVybmlvbi5tdWx0aXBseUJ5U2NhbGFyKHYwLCAyICogdDMgLSAzICogdDIgKyAxLCB2MCk7XHJcblx0XHRRdWF0ZXJuaW9uLm11bHRpcGx5QnlTY2FsYXIoYjAsIHRkICogKHQzIC0gMiAqIHQyICsgdCksIGIwKTtcclxuXHRcdFF1YXRlcm5pb24ubXVsdGlwbHlCeVNjYWxhcih2MSwgLTIgKiB0MyArIDMgKiB0MiwgdjEpO1xyXG5cdFx0UXVhdGVybmlvbi5tdWx0aXBseUJ5U2NhbGFyKGExLCB0ZCAqICh0MyAtIHQyKSwgYTEpO1xyXG5cclxuXHRcdGNvbnN0IHJlc3VsdCA9IG5ldyBRdWF0ZXJuaW9uKCk7XHJcblx0XHRRdWF0ZXJuaW9uLmFkZChyZXN1bHQsIHYwLCByZXN1bHQpO1xyXG5cdFx0UXVhdGVybmlvbi5hZGQocmVzdWx0LCBiMCwgcmVzdWx0KTtcclxuXHRcdFF1YXRlcm5pb24uYWRkKHJlc3VsdCwgdjEsIHJlc3VsdCk7XHJcblx0XHRRdWF0ZXJuaW9uLmFkZChyZXN1bHQsIGExLCByZXN1bHQpO1xyXG5cdFx0UXVhdGVybmlvbi5ub3JtYWxpemUocmVzdWx0LCByZXN1bHQpO1xyXG5cdFx0cmV0dXJuIHJlc3VsdDtcclxuXHR9XHJcblxyXG5cdGNvbnN0IHEgPSBbXTtcclxuXHRmb3IgKGxldCBuID0gLTE7IG4gPCAxOyBuICs9IDEpIHtcclxuXHRcdGNvbnN0IGkgPSA0ICogKGluZGV4ICsgbik7XHJcblx0XHRxLnB1c2gobmV3IFF1YXRlcm5pb24ob1tpXSwgb1tpICsgMV0sIG9baSArIDJdLCBvW2kgKyAzXSkpO1xyXG5cdH1cclxuXHJcblx0aWYgKG1ldGhvZCA9PT0gXCJTVEVQXCIpIHtcclxuXHRcdHJldHVybiB0IDwgMSA/IHFbMF0gOiBxWzFdO1xyXG5cdH1cclxuXHRjb25zdCByZXN1bHQgPSBuZXcgUXVhdGVybmlvbigpO1xyXG5cdFF1YXRlcm5pb24uc2xlcnAocVswXSwgcVsxXSwgdCwgcmVzdWx0KTtcclxuXHRyZXR1cm4gcmVzdWx0O1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gaW50ZXJwVmVjMyhpbnB1dDogVHlwZWRBcnJheSwgb3V0cHV0OiBUeXBlZEFycmF5LCB0aW1lOiBudW1iZXIsIG1ldGhvZDogc3RyaW5nKSB7XHJcblx0bGV0IGluZGV4ID0gMTtcclxuXHR3aGlsZSAoaW5kZXggPCBpbnB1dC5sZW5ndGggLSAxICYmIHRpbWUgPj0gaW5wdXRbaW5kZXhdKSB7XHJcblx0XHRpbmRleCArPSAxO1xyXG5cdH1cclxuXHRjb25zdCB0ID0gbGVycChpbnB1dFtpbmRleCAtIDFdLCBpbnB1dFtpbmRleF0sIHRpbWUpO1xyXG5cclxuXHRpZiAobWV0aG9kID09PSBcIkNVQklDU1BMSU5FXCIpIHtcclxuXHRcdGNvbnN0IHRkID0gaW5wdXRbaW5kZXhdIC0gaW5wdXRbaW5kZXggLSAxXTtcclxuXHRcdGNvbnN0IHQyID0gdCAqIHQ7XHJcblx0XHRjb25zdCB0MyA9IHQyICogdDtcclxuXHRcdGNvbnN0IGkgPSA5ICogaW5kZXg7XHJcblx0XHRjb25zdCB2MCA9IG5ldyBWZWN0b3IzKG91dHB1dFtpIC0gNl0sIG91dHB1dFtpIC0gNV0sIG91dHB1dFtpIC0gNF0pO1xyXG5cdFx0Y29uc3QgYjAgPSBuZXcgVmVjdG9yMyhvdXRwdXRbaSAtIDNdLCBvdXRwdXRbaSAtIDJdLCBvdXRwdXRbaSAtIDFdKTtcclxuXHRcdGNvbnN0IHYxID0gbmV3IFZlY3RvcjMob3V0cHV0W2kgKyAzXSwgb3V0cHV0W2kgKyA0XSwgb3V0cHV0W2kgKyA1XSk7XHJcblx0XHRjb25zdCBhMSA9IG5ldyBWZWN0b3IzKG91dHB1dFtpXSwgb3V0cHV0W2kgKyAxXSwgb3V0cHV0W2kgKyAyXSk7XHJcblx0XHRWZWN0b3IzLm11bHRpcGx5QnlTY2FsYXIodjAsIDIgKiB0MyAtIDMgKiB0MiArIDEsIHYwKTtcclxuXHRcdFZlY3RvcjMubXVsdGlwbHlCeVNjYWxhcihiMCwgdGQgKiAodDMgLSAyICogdDIgKyB0KSwgYjApO1xyXG5cdFx0VmVjdG9yMy5tdWx0aXBseUJ5U2NhbGFyKHYxLCAtMiAqIHQzICsgMyAqIHQyLCB2MSk7XHJcblx0XHRWZWN0b3IzLm11bHRpcGx5QnlTY2FsYXIoYTEsIHRkICogKHQzIC0gdDIpLCBhMSk7XHJcblx0XHRjb25zdCByZXN1bHQgPSBuZXcgVmVjdG9yMygpO1xyXG5cdFx0VmVjdG9yMy5hZGQocmVzdWx0LCB2MCwgcmVzdWx0KTtcclxuXHRcdFZlY3RvcjMuYWRkKHJlc3VsdCwgYjAsIHJlc3VsdCk7XHJcblx0XHRWZWN0b3IzLmFkZChyZXN1bHQsIHYxLCByZXN1bHQpO1xyXG5cdFx0VmVjdG9yMy5hZGQocmVzdWx0LCBhMSwgcmVzdWx0KTtcclxuXHRcdHJldHVybiByZXN1bHQ7XHJcblx0fVxyXG5cclxuXHRjb25zdCB2ID0gW107XHJcblx0Zm9yIChsZXQgbiA9IC0xOyBuIDwgMTsgbiArPSAxKSB7XHJcblx0XHRjb25zdCBpID0gMyAqIChpbmRleCArIG4pO1xyXG5cdFx0di5wdXNoKG5ldyBWZWN0b3IzKG91dHB1dFtpXSwgb3V0cHV0W2kgKyAxXSwgb3V0cHV0W2kgKyAyXSkpO1xyXG5cdH1cclxuXHJcblx0aWYgKG1ldGhvZCA9PT0gXCJTVEVQXCIpIHtcclxuXHRcdHJldHVybiB0IDwgMSA/IHZbMF0gOiB2WzFdO1xyXG5cdH1cclxuXHRjb25zdCByZXN1bHQgPSBuZXcgVmVjdG9yMygpO1xyXG5cdHJldHVybiBWZWN0b3IzLmxlcnAodlswXSwgdlsxXSwgdCwgcmVzdWx0KTtcclxufVxyXG5cclxuZXhwb3J0IGNvbnN0IGdsdGZFbnVtOiB7IFtrZXk6IHN0cmluZ106IHN0cmluZyB8IG51bWJlciB9ID0ge1xyXG5cdFNDQUxBUjogMSxcclxuXHRWRUMyOiAyLFxyXG5cdFZFQzM6IDMsXHJcblx0VkVDNDogNCxcclxuXHRNQVQyOiA0LFxyXG5cdE1BVDM6IDksXHJcblx0TUFUNDogMTYsXHJcblx0NTEyMDogMSxcclxuXHQ1MTIxOiAxLFxyXG5cdDUxMjI6IDIsXHJcblx0NTEyMzogMixcclxuXHQ1MTI1OiA0LFxyXG5cdDUxMjY6IDQsXHJcblx0OTcyODogXCJuZWFyZXN0XCIsXHJcblx0OTcyOTogXCJsaW5lYXJcIixcclxuXHQ5OTg0OiBcImxpbmVhclwiLFxyXG5cdDk5ODU6IFwibGluZWFyXCIsXHJcblx0OTk4NjogXCJsaW5lYXJcIixcclxuXHQ5OTg3OiBcImxpbmVhclwiLFxyXG5cdDMzMDcxOiBcImNsYW1wLXRvLWVkZ2VcIixcclxuXHQzMzY0ODogXCJtaXJyb3ItcmVwZWF0XCIsXHJcblx0MTA0OTc6IFwicmVwZWF0XCJcclxufTtcclxuIiwiaW1wb3J0IE1hdHJpeDQgZnJvbSBcIi4uLy4uLy4uL21hdGgvTWF0cml4NFwiO1xyXG5pbXBvcnQgVmVjdG9yNCBmcm9tIFwiLi4vLi4vLi4vbWF0aC9WZWN0b3I0XCI7XHJcblxyXG5leHBvcnQgY2xhc3MgQWNjZXNzb3Ige1xyXG5cdHZhbHVlczogYW55O1xyXG5cdGlkOiBudW1iZXI7XHJcblx0Y291bnQ6IG51bWJlcjtcclxuXHRjb21wb25lbnRUeXBlOiBudW1iZXI7XHJcblx0dHlwZTogbnVtYmVyO1xyXG5cdG1pbjogbnVtYmVyW107XHJcblx0bWF4OiBudW1iZXJbXTtcclxuXHRjb25zdHJ1Y3RvcihvcHRpb25zOiBBY2Nlc3NvclBhcm1zKSB7XHJcblx0XHR0aGlzLnZhbHVlcyA9IG9wdGlvbnMudmFsdWVzID8/IFtdO1xyXG5cdFx0dGhpcy5pZCA9IG9wdGlvbnMuaWQ7XHJcblx0XHR0aGlzLmNvdW50ID0gb3B0aW9ucy5jb3VudDtcclxuXHRcdHRoaXMuY29tcG9uZW50VHlwZSA9IG9wdGlvbnMuY29tcG9uZW50VHlwZTtcclxuXHRcdHRoaXMudHlwZSA9IG9wdGlvbnMudHlwZTtcclxuXHRcdHRoaXMubWluID0gb3B0aW9ucy5taW47XHJcblx0XHR0aGlzLm1heCA9IG9wdGlvbnMubWF4O1xyXG5cdH1cclxuXHRnZXRBcnJheSgpOiBudW1iZXJbXSB7XHJcblx0XHRyZXR1cm4gQXJyYXkuZnJvbSh0aGlzLnZhbHVlcyk7XHJcblx0fVxyXG5cdGdldFZlYzRBcnJheSgpOiBWZWN0b3I0W10ge1xyXG5cdFx0Y29uc3QgcmVzdWx0ID0gW107XHJcblx0XHRmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMudmFsdWVzLmxlbmd0aDsgaSArPSA0KSB7XHJcblx0XHRcdHJlc3VsdC5wdXNoKG5ldyBWZWN0b3I0KHRoaXMudmFsdWVzW2ldLCB0aGlzLnZhbHVlc1tpICsgMV0sIHRoaXMudmFsdWVzW2kgKyAyXSwgdGhpcy52YWx1ZXNbaSArIDNdKSk7XHJcblx0XHR9XHJcblx0XHRyZXR1cm4gcmVzdWx0O1xyXG5cdH1cclxuXHRnZXRNYXQ0QXJyYXkoKTogTWF0cml4NFtdIHtcclxuXHRcdGNvbnN0IHJlc3VsdCA9IFtdO1xyXG5cdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLnZhbHVlcy5sZW5ndGg7IGkgKz0gMTYpIHtcclxuXHRcdFx0Y29uc3QgbWF0NCA9IG5ldyBNYXRyaXg0KCk7XHJcblx0XHRcdE1hdHJpeDQuZnJvbUNvbHVtbk1ham9yQXJyYXkodGhpcy52YWx1ZXMuc2xpY2UoaSwgaSArIDE2KSwgbWF0NCk7XHJcblx0XHRcdHJlc3VsdC5wdXNoKG1hdDQpO1xyXG5cdFx0fVxyXG5cdFx0cmV0dXJuIHJlc3VsdDtcclxuXHR9XHJcbn1cclxuZXhwb3J0IHR5cGUgQWNjZXNzb3JQYXJtcyA9IFBhcnRpYWw8QWNjZXNzb3I+O1xyXG4iLCJpbXBvcnQgeyBRdWF0ZXJuaW9uIH0gZnJvbSBcIi4uLy4uLy4uL21hdGgvUXVhdGVybmlvblwiO1xuaW1wb3J0IFZlY3RvcjQgZnJvbSBcIi4uLy4uLy4uL21hdGgvVmVjdG9yNFwiO1xuaW1wb3J0IHsgQW5pbWF0aW9uQ2hhbm5lbCB9IGZyb20gXCIuL0FuaW1hdGlvbkNoYW5uZWxcIjtcbmltcG9ydCB7IEFuaW1hdGlvblNhbXBsZXIgfSBmcm9tIFwiLi9BbmltYXRpb25TYW1wbGVyXCI7XG5cbmV4cG9ydCBjbGFzcyBBbmltYXRpb24ge1xuXHRjb25zdHJ1Y3RvcihwdWJsaWMgbmFtZTogc3RyaW5nLCBwdWJsaWMgc2FtcGxlcnM6IEFuaW1hdGlvblNhbXBsZXJbXSwgcHVibGljIGNoYW5uZWxzOiBBbmltYXRpb25DaGFubmVsW10pIHt9XG5cdHBsYXkodGltZTogbnVtYmVyKSB7XG5cdFx0bGV0IG5vZGUsIGFuaW1hdGlvblNhbXBsZXIsIHRhcmdldDtcblx0XHR0aGlzPy5jaGFubmVscz8ubWFwKChjaGFubmVsKSA9PiB7XG5cdFx0XHRhbmltYXRpb25TYW1wbGVyID0gY2hhbm5lbC5zYW1wbGVyO1xuXHRcdFx0YW5pbWF0aW9uU2FtcGxlci5nZXRWYWx1ZSh0aW1lKTtcblx0XHRcdHRhcmdldCA9IGNoYW5uZWwudGFyZ2V0O1xuXHRcdFx0bm9kZSA9IHRhcmdldC5ub2RlO1xuXHRcdFx0c3dpdGNoICh0YXJnZXQucGF0aCkge1xuXHRcdFx0XHRjYXNlIFwicm90YXRpb25cIjpcblx0XHRcdFx0XHRRdWF0ZXJuaW9uLmNsb25lKGFuaW1hdGlvblNhbXBsZXIuY3VycmVudFZhbHVlLCBub2RlLnF1YXRlcm5pb24pO1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRjYXNlIFwidHJhbnNsYXRpb25cIjpcblx0XHRcdFx0XHRWZWN0b3I0LmNsb25lKGFuaW1hdGlvblNhbXBsZXIuY3VycmVudFZhbHVlLCBub2RlLnBvc2l0aW9uKTtcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdFx0Y2FzZSBcInNjYWxlXCI6XG5cdFx0XHRcdFx0VmVjdG9yNC5jbG9uZShhbmltYXRpb25TYW1wbGVyLmN1cnJlbnRWYWx1ZSwgbm9kZS5zY2FsZSk7XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHR9XG5cdFx0fSk7XG5cdH1cbn1cbiIsImltcG9ydCB7IEFuaW1hdGlvbkNoYW5uZWxUYXJnZXQgfSBmcm9tIFwiLi9BbmltYXRpb25DaGFubmVsVGFyZ2V0XCI7XG5pbXBvcnQgeyBBbmltYXRpb25TYW1wbGVyIH0gZnJvbSBcIi4vQW5pbWF0aW9uU2FtcGxlclwiO1xuXG5leHBvcnQgY2xhc3MgQW5pbWF0aW9uQ2hhbm5lbCB7XG5cdHNhbXBsZXI6IEFuaW1hdGlvblNhbXBsZXI7XG5cdHRhcmdldDogQW5pbWF0aW9uQ2hhbm5lbFRhcmdldDtcblx0Y29uc3RydWN0b3IoKSB7fVxufVxuIiwiaW1wb3J0IE5vZGUgZnJvbSBcIi4uLy4uLy4uL21lc2gvTm9kZVwiO1xuXG5leHBvcnQgY2xhc3MgQW5pbWF0aW9uQ2hhbm5lbFRhcmdldCB7XG5cdG5vZGU6IE5vZGU7XG5cdHBhdGg6IFwidHJhbnNsYXRpb25cIiB8IFwicm90YXRpb25cIiB8IFwic2NhbGVcIiB8IFwid2VpZ2h0c1wiO1xuXHRjb25zdHJ1Y3Rvcihub2RlLCBwYXRoKSB7XG5cdFx0dGhpcy5ub2RlID0gbm9kZTtcblx0XHR0aGlzLnBhdGggPSBwYXRoO1xuXHR9XG59XG4iLCJleHBvcnQgZW51bSBUeXBlMk51bU9mQ29tcG9uZW50IHtcclxuXHRcIlNDQUxBUlwiID0gMSxcclxuXHRcIlZFQzJcIiA9IDIsXHJcblx0XCJWRUMzXCIgPSAzLFxyXG5cdFwiVkVDNFwiID0gNCxcclxuXHRcIk1BVDJcIiA9IDQsXHJcblx0XCJNQVQzXCIgPSA5LFxyXG5cdFwiTUFUNFwiID0gMTZcclxufVxyXG4iLCJpbXBvcnQgeyBRdWF0ZXJuaW9uIH0gZnJvbSBcIi4uLy4uLy4uL21hdGgvUXVhdGVybmlvblwiO1xyXG5pbXBvcnQgVmVjdG9yNCBmcm9tIFwiLi4vLi4vLi4vbWF0aC9WZWN0b3I0XCI7XHJcbmltcG9ydCB7IFR5cGUyTnVtT2ZDb21wb25lbnQgfSBmcm9tIFwiLi4vdHlwZXMvZ2x0ZlR5cGVcIjtcclxuZXhwb3J0IGNsYXNzIEFuaW1hdGlvblNhbXBsZXIge1xyXG5cdGlucHV0OiBhbnk7XHJcblx0aW50ZXJwb2xhdGlvbjogXCJMSU5FQVJcIiB8IFwiU1RFUFwiIHwgXCJDVUJJQ1NQTElORVwiO1xyXG5cdG91dHB1dDogYW55O1xyXG5cdGN1cnJlbnRJbmRleDogbnVtYmVyO1xyXG5cdHN0YXJ0VGltZTogbnVtYmVyO1xyXG5cdGVuZFRpbWU6IG51bWJlcjtcclxuXHRjdXJyZW50VmFsdWU6IFZlY3RvcjQgfCBRdWF0ZXJuaW9uO1xyXG5cdGR1cmF0aW9uOiBudW1iZXI7XHJcblx0aW5wdXRNYXg6IG51bWJlcjtcclxuXHRwcml2YXRlIGlucHV0VHlwZTogc3RyaW5nO1xyXG5cdHByaXZhdGUgb3V0cHV0VHlwZTogc3RyaW5nO1xyXG5cdGNvbnN0cnVjdG9yKCkge31cclxuXHRmb3JtR2x0ZihnbHRmLCBzYW1wbGVyKSB7XHJcblx0XHR0aGlzLmlucHV0ID0gZ2x0Zi5hY2Nlc3NvcnNbc2FtcGxlci5pbnB1dF0udmFsdWVzOyAvL3JlcXVpcmVkLCBhY2Nlc3NvciBvYmplY3RcclxuXHRcdHRoaXMub3V0cHV0ID0gZ2x0Zi5hY2Nlc3NvcnNbc2FtcGxlci5vdXRwdXRdLnZhbHVlczsgLy9yZXF1aXJlZCwgYWNjZXNzb3Igb2JqZWN0XHJcblx0XHR0aGlzLmludGVycG9sYXRpb24gPSBzYW1wbGVyLmludGVycG9sYXRpb24gIT09IHVuZGVmaW5lZCA/IHNhbXBsZXIuaW50ZXJwb2xhdGlvbiA6IFwiTElORUFSXCI7XHJcblx0XHR0aGlzLmN1cnJlbnRJbmRleCA9IDA7XHJcblx0XHQvLyB0aGlzLmN1cnJlbnRWYWx1ZT1uZXcgVmVjdG9yNCgpO1xyXG5cdFx0dGhpcy5lbmRUaW1lID0gdGhpcy5pbnB1dFt0aGlzLmlucHV0Lmxlbmd0aCAtIDFdO1xyXG5cdFx0dGhpcy5pbnB1dE1heCA9IHRoaXMuZW5kVGltZSAtIHRoaXMuaW5wdXRbMF07XHJcblx0XHR0aGlzLmlucHV0VHlwZSA9IGdsdGY/Lmpzb24/LmFjY2Vzc29yc1tzYW1wbGVyLmlucHV0XT8udHlwZTtcclxuXHRcdHRoaXMub3V0cHV0VHlwZSA9IGdsdGY/Lmpzb24/LmFjY2Vzc29yc1tzYW1wbGVyLm91dHB1dF0/LnR5cGU7XHJcblx0fVxyXG5cdGdldFZhbHVlKHRpbWU6IG51bWJlcik6IHZvaWQge1xyXG5cdFx0aWYgKHRpbWUgPiB0aGlzLmVuZFRpbWUpIHtcclxuXHRcdFx0dGltZSAtPSB0aGlzLmlucHV0TWF4ICogTWF0aC5jZWlsKCh0aW1lIC0gdGhpcy5lbmRUaW1lKSAvIHRoaXMuaW5wdXRNYXgpO1xyXG5cdFx0XHR0aGlzLmN1cnJlbnRJbmRleCA9IDA7XHJcblx0XHR9XHJcblxyXG5cdFx0Y29uc3QgbGVuID0gdGhpcy5pbnB1dC5sZW5ndGg7XHJcblx0XHR3aGlsZSAodGhpcy5jdXJyZW50SW5kZXggPD0gbGVuIC0gMiAmJiB0aW1lID49IHRoaXMuaW5wdXRbdGhpcy5jdXJyZW50SW5kZXggKyAxXSkge1xyXG5cdFx0XHR0aGlzLmN1cnJlbnRJbmRleCsrO1xyXG5cdFx0fVxyXG5cclxuXHRcdGlmICh0aGlzLmN1cnJlbnRJbmRleCA+PSBsZW4gLSAxKSB7XHJcblx0XHRcdC8vIGxvb3BcclxuXHRcdFx0dGltZSAtPSB0aGlzLmlucHV0TWF4O1xyXG5cdFx0XHR0aGlzLmN1cnJlbnRJbmRleCA9IDA7XHJcblx0XHR9XHJcblxyXG5cdFx0Ly8gQHRtcDogYXNzdW1lIG5vIHN0cmlkZVxyXG5cdFx0Y29uc3QgY291bnQgPSBUeXBlMk51bU9mQ29tcG9uZW50W3RoaXMub3V0cHV0VHlwZV07XHJcblxyXG5cdFx0Y29uc3QgYW5pbWF0aW9uT3V0cHV0VmFsdWVWZWM0YSA9IGNvdW50ID09PSA0ID8gbmV3IFF1YXRlcm5pb24oKSA6IG5ldyBWZWN0b3I0KCk7XHJcblx0XHRjb25zdCBhbmltYXRpb25PdXRwdXRWYWx1ZVZlYzRiID0gY291bnQgPT09IDQgPyBuZXcgUXVhdGVybmlvbigpIDogbmV3IFZlY3RvcjQoKTtcclxuXHRcdGlmICghdGhpcy5jdXJyZW50VmFsdWUpIHRoaXMuY3VycmVudFZhbHVlID0gY291bnQgPT09IDQgPyBuZXcgUXVhdGVybmlvbigpIDogbmV3IFZlY3RvcjQoKTtcclxuXHRcdGNvbnN0IGkgPSB0aGlzLmN1cnJlbnRJbmRleDtcclxuXHRcdGNvbnN0IG8gPSBpICogY291bnQ7XHJcblx0XHRjb25zdCBvbiA9IG8gKyBjb3VudDtcclxuXHJcblx0XHRjb25zdCB1ID0gTWF0aC5tYXgoMCwgdGltZSAtIHRoaXMuaW5wdXRbaV0pIC8gKHRoaXMuaW5wdXRbaSArIDFdIC0gdGhpcy5pbnB1dFtpXSk7XHJcblx0XHRhbmltYXRpb25PdXRwdXRWYWx1ZVZlYzRhLnNldCh0aGlzLm91dHB1dFtvICsgMF0sIHRoaXMub3V0cHV0W28gKyAxXSwgdGhpcy5vdXRwdXRbbyArIDJdLCB0aGlzLm91dHB1dFtvICsgM10pO1xyXG5cdFx0YW5pbWF0aW9uT3V0cHV0VmFsdWVWZWM0Yi5zZXQoXHJcblx0XHRcdHRoaXMub3V0cHV0W29uICsgMF0sXHJcblx0XHRcdHRoaXMub3V0cHV0W29uICsgMV0sXHJcblx0XHRcdHRoaXMub3V0cHV0W29uICsgMl0sXHJcblx0XHRcdHRoaXMub3V0cHV0W29uICsgM11cclxuXHRcdCk7XHJcblx0XHRzd2l0Y2ggKHRoaXMuaW50ZXJwb2xhdGlvbikge1xyXG5cdFx0XHRjYXNlIFwiTElORUFSXCI6XHJcblx0XHRcdFx0Y291bnQgPT09IDRcclxuXHRcdFx0XHRcdD8gUXVhdGVybmlvbi5zbGVycChcclxuXHRcdFx0XHRcdFx0XHQ8UXVhdGVybmlvbj5hbmltYXRpb25PdXRwdXRWYWx1ZVZlYzRhLFxyXG5cdFx0XHRcdFx0XHRcdDxRdWF0ZXJuaW9uPmFuaW1hdGlvbk91dHB1dFZhbHVlVmVjNGIsXHJcblx0XHRcdFx0XHRcdFx0dSxcclxuXHRcdFx0XHRcdFx0XHQ8UXVhdGVybmlvbj50aGlzLmN1cnJlbnRWYWx1ZVxyXG5cdFx0XHRcdFx0ICApXHJcblx0XHRcdFx0XHQ6IFZlY3RvcjQubGVycChcclxuXHRcdFx0XHRcdFx0XHQ8VmVjdG9yND5hbmltYXRpb25PdXRwdXRWYWx1ZVZlYzRhLFxyXG5cdFx0XHRcdFx0XHRcdDxWZWN0b3I0PmFuaW1hdGlvbk91dHB1dFZhbHVlVmVjNGIsXHJcblx0XHRcdFx0XHRcdFx0dSxcclxuXHRcdFx0XHRcdFx0XHQ8VmVjdG9yND50aGlzLmN1cnJlbnRWYWx1ZVxyXG5cdFx0XHRcdFx0ICApO1xyXG5cdFx0XHRcdGJyZWFrO1xyXG5cdFx0XHRkZWZhdWx0OlxyXG5cdFx0XHRcdGJyZWFrO1xyXG5cdFx0fVxyXG5cdH1cclxufVxyXG4iLCJpbXBvcnQgeyBSZW5kZXJPYmplY3RUeXBlIH0gZnJvbSBcIi4uL2NvcmUvV2ViR1BVVHlwZXNcIjtcclxuaW1wb3J0IEdlb21ldHJ5IGZyb20gXCIuLi9nZW9tZXRyeS9HZW9tZXRyeVwiO1xyXG5pbXBvcnQgUGJyTWF0ZXJpYWwgZnJvbSBcIi4uL21hdGVyaWFsL1Bick1hdGVyaWFsXCI7XHJcbmltcG9ydCBDb2xvciBmcm9tIFwiLi4vbWF0aC9Db2xvclwiO1xyXG5pbXBvcnQgTWF0cml4NCBmcm9tIFwiLi4vbWF0aC9NYXRyaXg0XCI7XHJcbmltcG9ydCB7IFF1YXRlcm5pb24gfSBmcm9tIFwiLi4vbWF0aC9RdWF0ZXJuaW9uXCI7XHJcbmltcG9ydCBWZWN0b3IzIGZyb20gXCIuLi9tYXRoL1ZlY3RvcjNcIjtcclxuaW1wb3J0IHsgTWVzaCB9IGZyb20gXCIuLi9tZXNoL01lc2hcIjtcclxuaW1wb3J0IE5vZGUgZnJvbSBcIi4uL21lc2gvTm9kZVwiO1xyXG5pbXBvcnQgeyBTS2luTWVzaCB9IGZyb20gXCIuLi9tZXNoL1NLaW5NZXNoXCI7XHJcbmltcG9ydCB7IEZsb2F0MzJBdHRyaWJ1dGUgfSBmcm9tIFwiLi4vcmVuZGVyL0F0dHJpYnV0ZVwiO1xyXG5pbXBvcnQgU2FtcGxlciBmcm9tIFwiLi4vcmVuZGVyL1NhbXBsZXJcIjtcclxuaW1wb3J0IFRleHR1cmUgZnJvbSBcIi4uL3JlbmRlci9UZXh0dXJlXCI7XHJcbmltcG9ydCB7IGdlbmVyYXRlTm9ybWFscywgZ2x0ZkVudW0sIG5ld1R5cGVkQXJyYXksIHRvSW5kaWNlcywgVHlwZWRBcnJheSB9IGZyb20gXCIuLi91dGlscy9nbHRmVXRpbHNcIjtcclxuaW1wb3J0IHsgQWNjZXNzb3IgfSBmcm9tIFwiLi9nbHRmL2xpYnMvQWNjZXNzb3JcIjtcclxuaW1wb3J0IHsgQW5pbWF0aW9uIH0gZnJvbSBcIi4vZ2x0Zi9saWJzL0FuaW1hdGlvblwiO1xyXG5pbXBvcnQgeyBBbmltYXRpb25DaGFubmVsIH0gZnJvbSBcIi4vZ2x0Zi9saWJzL0FuaW1hdGlvbkNoYW5uZWxcIjtcclxuaW1wb3J0IHsgQW5pbWF0aW9uQ2hhbm5lbFRhcmdldCB9IGZyb20gXCIuL2dsdGYvbGlicy9BbmltYXRpb25DaGFubmVsVGFyZ2V0XCI7XHJcbmltcG9ydCB7IEFuaW1hdGlvblNhbXBsZXIgfSBmcm9tIFwiLi9nbHRmL2xpYnMvQW5pbWF0aW9uU2FtcGxlclwiO1xyXG5cclxuZXhwb3J0IHR5cGUgR0xURlByaW1pdGl2ZSA9IHtcclxuXHR2ZXJ0ZXhDb3VudDogbnVtYmVyO1xyXG5cdGluZGljZXM6IFVpbnQxNkFycmF5IHwgVWludDMyQXJyYXkgfCBudWxsO1xyXG5cdHBvc2l0aW9uczogVHlwZWRBcnJheTtcclxuXHRub3JtYWxzOiBUeXBlZEFycmF5O1xyXG5cdHV2czogVHlwZWRBcnJheSB8IG51bGw7XHJcblx0dXYxczogVHlwZWRBcnJheSB8IG51bGw7XHJcblx0dGFuZ2VudHM6IFR5cGVkQXJyYXkgfCBudWxsO1xyXG5cdGNvbG9yczogVHlwZWRBcnJheSB8IG51bGw7XHJcblx0bWF0ZXJpYWw6IGFueTtcclxuXHRib3VuZGluZ0JveDoge1xyXG5cdFx0bWF4OiBbbnVtYmVyLCBudW1iZXIsIG51bWJlcl07XHJcblx0XHRtaW46IFtudW1iZXIsIG51bWJlciwgbnVtYmVyXTtcclxuXHR9O1xyXG59O1xyXG5cclxuZXhwb3J0IHR5cGUgR0xURk1lc2ggPSBBcnJheTxHTFRGUHJpbWl0aXZlPjtcclxuXHJcbmV4cG9ydCB0eXBlIEdMVEZBbmltYXRpb24gPSB7XHJcblx0Y2hhbm5lbHM6IEFycmF5PHtcclxuXHRcdGlucHV0OiBUeXBlZEFycmF5O1xyXG5cdFx0b3V0cHV0OiBUeXBlZEFycmF5O1xyXG5cdFx0aW50ZXJwb2xhdGlvbjogc3RyaW5nO1xyXG5cdFx0bm9kZTogbnVtYmVyO1xyXG5cdFx0cGF0aDogc3RyaW5nO1xyXG5cdH0+O1xyXG5cdGxlbmd0aDogbnVtYmVyO1xyXG59O1xyXG5cclxuZXhwb3J0IGNsYXNzIEdMVEYge1xyXG5cdHNjZW5lczogQXJyYXk8Tm9kZT47XHJcblxyXG5cdG5vZGVzOiBBcnJheTxhbnk+O1xyXG5cclxuXHRjYW1lcmFzOiBBcnJheTxhbnk+O1xyXG5cclxuXHRtZXNoZXM6IEFycmF5PGFueT47XHJcblxyXG5cdGltYWdlczogQXJyYXk8SW1hZ2VCaXRtYXA+O1xyXG5cclxuXHRhbmltYXRpb25zOiBBcnJheTxHTFRGQW5pbWF0aW9uPjtcclxuXHJcblx0cHJpdmF0ZSBnbGJPZmZzZXQ6IG51bWJlcjtcclxuXHJcblx0cHJpdmF0ZSBidWZmZXJzOiBBcnJheUJ1ZmZlcltdO1xyXG5cclxuXHRwcml2YXRlIGJ1ZmZlclZpZXdzOiBhbnk7XHJcblxyXG5cdGFjY2Vzc29yczogYW55O1xyXG5cclxuXHRqc29uOiBhbnk7XHJcblxyXG5cdHByaXZhdGUgbWF0ZXJpYWxzOiBhbnk7XHJcblxyXG5cdHByaXZhdGUgZ2xiQmluPzogQXJyYXlCdWZmZXI7XHJcblxyXG5cdHByaXZhdGUgcm9vdFVybDogc3RyaW5nO1xyXG5cclxuXHR0ZXh0dXJlczogYW55W107XHJcblxyXG5cdHNhbXBsZXJzOiBTYW1wbGVyW107XHJcblxyXG5cdGNvbnN0cnVjdG9yKGpzb246IGFueSwgcm9vdFVybDogc3RyaW5nLCBnbGJPZmZzZXQgPSAwLCBnbGJCaW4/OiBBcnJheUJ1ZmZlcikge1xyXG5cdFx0dGhpcy5qc29uID0ganNvbjtcclxuXHRcdHRoaXMuYnVmZmVyVmlld3MgPSBqc29uLmJ1ZmZlclZpZXdzO1xyXG5cdFx0dGhpcy5nbGJPZmZzZXQgPSBnbGJPZmZzZXQ7XHJcblx0XHR0aGlzLnJvb3RVcmwgPSByb290VXJsO1xyXG5cdFx0dGhpcy5zY2VuZXMgPSBqc29uLnNjZW5lcztcclxuXHRcdHRoaXMuY2FtZXJhcyA9IGpzb24uY2FtZXJhcyB8fCBbXTtcclxuXHRcdHRoaXMuZ2xiQmluID0gZ2xiQmluO1xyXG5cdFx0dGhpcy5tZXNoZXMgPSBbXTtcclxuXHR9XHJcblx0YXN5bmMgcGFyc2VEYXRhKCkge1xyXG5cdFx0dGhpcy5idWZmZXJzID0gYXdhaXQgdGhpcy5sb2FkQnVmZmVzKCk7XHJcblx0XHR0aGlzLmltYWdlcyA9IGF3YWl0IHRoaXMubG9hZEltYWdlcygpO1xyXG5cdFx0dGhpcy5wYXJzZVNhbXBsZXJzKCk7XHJcblx0XHR0aGlzLnBhcnNlVGV4dHVyZXMoKTtcclxuXHRcdHRoaXMucGFyc2VNYXRlcmlhbHMoKTtcclxuXHRcdHRoaXMucGFyc2VBY2Nlc3NvcnMoKTtcclxuXHRcdHRoaXMucGFyc2VNZXNocygpO1xyXG5cdFx0dGhpcy5wYXJzZU5vZGVzKCk7XHJcblx0XHR0aGlzLm5vcm1hbGl6ZURhdGEoKTtcclxuXHRcdHRoaXMucGFyc2VTY2VuZXMoKTtcclxuXHRcdHRoaXMucGFyc2VBbmltYXRpb25zKCk7XHJcblx0fVxyXG5cdHByaXZhdGUgZ2V0QWNjZXNzb3IoaW5kZXg6IG51bWJlcikge1xyXG5cdFx0cmV0dXJuIHRoaXMuYWNjZXNzb3JzW2luZGV4XTtcclxuXHR9XHJcblx0cHJpdmF0ZSBwYXJzZVNhbXBsZXJzKCkge1xyXG5cdFx0dGhpcy5zYW1wbGVycyA9IHRoaXMuanNvbi5zYW1wbGVyc1xyXG5cdFx0XHQ/ICh0aGlzLmpzb24uc2FtcGxlcnMgYXMgQXJyYXk8YW55PikubWFwKChzYW1wbGVyKSA9PiB0aGlzLmdldFNhbXBsZXIoc2FtcGxlcikpXHJcblx0XHRcdDogW107XHJcblx0fVxyXG5cdHByaXZhdGUgcGFyc2VTY2VuZXMoKSB7XHJcblx0XHR0aGlzLnNjZW5lcyA9IHRoaXMuanNvbi5zY2VuZXMubWFwKChzY2VuZSkgPT4ge1xyXG5cdFx0XHRjb25zdCBub2RlcyA9IHNjZW5lPy5ub2Rlcz8ubWFwKChub2RlSWQpID0+IHtcclxuXHRcdFx0XHRyZXR1cm4gdGhpcy5ub2Rlc1tub2RlSWRdO1xyXG5cdFx0XHR9KTtcclxuXHRcdFx0cmV0dXJuIG5vZGVzO1xyXG5cdFx0fSk7XHJcblx0fVxyXG5cdHByaXZhdGUgcGFyc2VUZXh0dXJlcygpIHtcclxuXHRcdHRoaXMudGV4dHVyZXMgPSB0aGlzLmpzb24udGV4dHVyZXNcclxuXHRcdFx0PyAodGhpcy5qc29uLnRleHR1cmVzIGFzIEFycmF5PGFueT4pLm1hcCgodGV4dHVyZSkgPT4ge1xyXG5cdFx0XHRcdFx0cmV0dXJuIHtcclxuXHRcdFx0XHRcdFx0c2FtcGxlcjogdGV4dHVyZS5zYW1wbGVyICE9PSB1bmRlZmluZWQgPyB0aGlzLnNhbXBsZXJzW3RleHR1cmUuc2FtcGxlcl0gOiB0aGlzLmdldFNhbXBsZXIoe30pLFxyXG5cdFx0XHRcdFx0XHR0ZXh0dXJlOiB0aGlzLmNyZWF0ZVRleHR1cmUodGV4dHVyZS5zb3VyY2UpXHJcblx0XHRcdFx0XHR9O1xyXG5cdFx0XHQgIH0pXHJcblx0XHRcdDogW107XHJcblx0fVxyXG5cdHByaXZhdGUgcGFyc2VNYXRlcmlhbHMoKSB7XHJcblx0XHR0aGlzLm1hdGVyaWFscyA9IHRoaXMuanNvbi5tYXRlcmlhbHNcclxuXHRcdFx0PyAodGhpcy5qc29uLm1hdGVyaWFscyBhcyBBcnJheTxhbnk+KS5tYXAoKG1hdGVyaWFsKSA9PiB7XHJcblx0XHRcdFx0XHRjb25zdCBtYXQgPSBuZXcgUGJyTWF0ZXJpYWwoKTtcclxuXHRcdFx0XHRcdGNvbnN0IHtcclxuXHRcdFx0XHRcdFx0YmFzZUNvbG9yRmFjdG9yLFxyXG5cdFx0XHRcdFx0XHRtZXRhbGxpY0ZhY3RvcixcclxuXHRcdFx0XHRcdFx0bWV0YWxsaWNSb3VnaG5lc3NUZXh0dXJlLFxyXG5cdFx0XHRcdFx0XHRiYXNlQ29sb3JUZXh0dXJlLFxyXG5cdFx0XHRcdFx0XHRyb3VnaG5lc3NGYWN0b3JcclxuXHRcdFx0XHRcdH0gPSBtYXRlcmlhbC5wYnJNZXRhbGxpY1JvdWdobmVzcztcclxuXHRcdFx0XHRcdGlmIChtYXRlcmlhbC5ub3JtYWxUZXh0dXJlKSBtYXQubm9ybWFsVGV4dHVyZSA9IHRoaXMudGV4dHVyZXNbbWF0ZXJpYWwubm9ybWFsVGV4dHVyZS5pbmRleF0udGV4dHVyZTtcclxuXHRcdFx0XHRcdGlmIChtYXRlcmlhbC5vY2NsdXNpb25UZXh0dXJlKVxyXG5cdFx0XHRcdFx0XHRtYXQuYW9UZXh0dXJlID0gdGhpcy50ZXh0dXJlc1ttYXRlcmlhbC5vY2NsdXNpb25UZXh0dXJlLmluZGV4XS50ZXh0dXJlO1xyXG5cdFx0XHRcdFx0aWYgKG1hdGVyaWFsLmVtaXNzaXZlVGV4dHVyZSlcclxuXHRcdFx0XHRcdFx0bWF0LmVtaXNzaXZlVGV4dHVyZSA9IHRoaXMudGV4dHVyZXNbbWF0ZXJpYWwuZW1pc3NpdmVUZXh0dXJlLmluZGV4XS50ZXh0dXJlO1xyXG5cdFx0XHRcdFx0aWYgKGJhc2VDb2xvclRleHR1cmUpIG1hdC5iYXNlVGV4dHVyZSA9IHRoaXMudGV4dHVyZXNbYmFzZUNvbG9yVGV4dHVyZS5pbmRleF0udGV4dHVyZTtcclxuXHRcdFx0XHRcdGlmIChtZXRhbGxpY1JvdWdobmVzc1RleHR1cmUpXHJcblx0XHRcdFx0XHRcdG1hdC5tZXRhbG5lc3NSb3VnaG5lc3NUZXh0dXJlID0gdGhpcy50ZXh0dXJlc1ttZXRhbGxpY1JvdWdobmVzc1RleHR1cmUuaW5kZXhdLnRleHR1cmU7XHJcblx0XHRcdFx0XHRpZiAoYmFzZUNvbG9yRmFjdG9yKVxyXG5cdFx0XHRcdFx0XHRtYXQuY29sb3IgPSBuZXcgQ29sb3IoYmFzZUNvbG9yRmFjdG9yWzBdLCBiYXNlQ29sb3JGYWN0b3JbMV0sIGJhc2VDb2xvckZhY3RvclsyXSk7XHJcblx0XHRcdFx0XHRtYXQubWV0YWxuZXNzID0gbWV0YWxsaWNGYWN0b3IgPz8gMS4wO1xyXG5cdFx0XHRcdFx0bWF0LnJvdWdobmVzcyA9IHJvdWdobmVzc0ZhY3RvciA/PyAwLjA7XHJcblx0XHRcdFx0XHRtYXQuYmFzZVNhbXBsZXIgPSBuZXcgU2FtcGxlcih7XHJcblx0XHRcdFx0XHRcdG1hZ0ZpbHRlcjogXCJsaW5lYXJcIixcclxuXHRcdFx0XHRcdFx0bWluRmlsdGVyOiBcImxpbmVhclwiLFxyXG5cdFx0XHRcdFx0XHRhZGRyZXNzTW9kZVU6IFwicmVwZWF0XCIsXHJcblx0XHRcdFx0XHRcdGFkZHJlc3NNb2RlVjogXCJyZXBlYXRcIlxyXG5cdFx0XHRcdFx0fSk7XHJcblx0XHRcdFx0XHRyZXR1cm4gbWF0O1xyXG5cdFx0XHQgIH0pXHJcblx0XHRcdDogW107XHJcblx0fVxyXG5cdHByaXZhdGUgcGFyc2VBY2Nlc3NvcnMoKSB7XHJcblx0XHR0aGlzLmFjY2Vzc29ycyA9ICh0aGlzLmpzb24uYWNjZXNzb3JzIGFzIEFycmF5PGFueT4pLm1hcCgoYWNjZXNzb3IsIGluZGV4KSA9PiB7XHJcblx0XHRcdGNvbnN0IG4gPSBnbHRmRW51bVthY2Nlc3Nvci50eXBlXSBhcyBudW1iZXI7XHJcblx0XHRcdGxldCBhcnJheTtcclxuXHRcdFx0aWYgKGFjY2Vzc29yLmJ1ZmZlclZpZXcgPT09IHVuZGVmaW5lZCkge1xyXG5cdFx0XHRcdGFycmF5ID0gbmV3VHlwZWRBcnJheShcclxuXHRcdFx0XHRcdGFjY2Vzc29yLmNvbXBvbmVudFR5cGUsXHJcblx0XHRcdFx0XHRuZXcgQXJyYXlCdWZmZXIobiAqIGFjY2Vzc29yLmNvdW50ICogKGdsdGZFbnVtW2FjY2Vzc29yLmNvbXBvbmVudFR5cGVdIGFzIG51bWJlcikpLFxyXG5cdFx0XHRcdFx0MCxcclxuXHRcdFx0XHRcdGFjY2Vzc29yLmNvdW50ICogblxyXG5cdFx0XHRcdCk7XHJcblx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0YXJyYXkgPSB0aGlzLmdldEJ1ZmZlclZpZXcoYWNjZXNzb3IsIG4pO1xyXG5cdFx0XHR9XHJcblxyXG5cdFx0XHRpZiAoYWNjZXNzb3Iuc3BhcnNlKSB7XHJcblx0XHRcdFx0YWNjZXNzb3Iuc3BhcnNlLmluZGljZXMuY291bnQgPSBhY2Nlc3Nvci5zcGFyc2UuY291bnQ7XHJcblx0XHRcdFx0YWNjZXNzb3Iuc3BhcnNlLnZhbHVlcy5jb3VudCA9IGFjY2Vzc29yLnNwYXJzZS5jb3VudDtcclxuXHRcdFx0XHRhY2Nlc3Nvci5zcGFyc2UudmFsdWVzLmNvbXBvbmVudFR5cGUgPSBhY2Nlc3Nvci5jb21wb25lbnRUeXBlO1xyXG5cdFx0XHRcdGNvbnN0IGluZGljZXMgPSB0aGlzLmdldEJ1ZmZlclZpZXcoYWNjZXNzb3Iuc3BhcnNlLmluZGljZXMsIDEpO1xyXG5cdFx0XHRcdGNvbnN0IHZhbHVlcyA9IHRoaXMuZ2V0QnVmZmVyVmlldyhhY2Nlc3Nvci5zcGFyc2UudmFsdWVzLCBuKTtcclxuXHRcdFx0XHRmb3IgKGxldCBpID0gMDsgaSA8IGFjY2Vzc29yLnNwYXJzZS5jb3VudDsgaSArPSAxKSB7XHJcblx0XHRcdFx0XHRmb3IgKGxldCBqID0gMDsgaiA8IG47IGogKz0gMSkge1xyXG5cdFx0XHRcdFx0XHRhcnJheVtpbmRpY2VzW2ldICogbiArIGpdID0gdmFsdWVzW2kgKiBuICsgal07XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9XHJcblx0XHRcdHJldHVybiBuZXcgQWNjZXNzb3Ioe1xyXG5cdFx0XHRcdGNvbXBvbmVudFR5cGU6IDxudW1iZXI+Z2x0ZkVudW1bYWNjZXNzb3IuY29tcG9uZW50VHlwZV0sXHJcblx0XHRcdFx0Y291bnQ6IGFjY2Vzc29yLmNvdW50LFxyXG5cdFx0XHRcdHR5cGU6IG4sXHJcblx0XHRcdFx0dmFsdWVzOiBhcnJheSxcclxuXHRcdFx0XHRpZDogaW5kZXgsXHJcblx0XHRcdFx0bWluOiBhY2Nlc3Nvcj8ubWluLFxyXG5cdFx0XHRcdG1heDogYWNjZXNzb3I/Lm1heFxyXG5cdFx0XHR9KTtcclxuXHRcdH0pO1xyXG5cdH1cclxuXHRwcml2YXRlIHBhcnNlQW5pbWF0aW9ucygpIHtcclxuXHRcdHRoaXMuYW5pbWF0aW9ucyA9IHRoaXM/Lmpzb24/LmFuaW1hdGlvbnM/Lm1hcCgoZ2x0ZkFuaW1hdGlvbiwgaW5kZXgpID0+IHtcclxuXHRcdFx0Y29uc3Qgc2FtcGxlcnMgPSBnbHRmQW5pbWF0aW9uPy5zYW1wbGVycz8ubWFwKChnbHRmU2FtcGxlcikgPT4ge1xyXG5cdFx0XHRcdGNvbnN0IHNhbXBsZXIgPSBuZXcgQW5pbWF0aW9uU2FtcGxlcigpO1xyXG5cdFx0XHRcdHNhbXBsZXIuZm9ybUdsdGYodGhpcywgZ2x0ZlNhbXBsZXIpO1xyXG5cdFx0XHRcdHJldHVybiBzYW1wbGVyO1xyXG5cdFx0XHR9KTtcclxuXHRcdFx0Y29uc3QgY2hhbm5lbHMgPSBnbHRmQW5pbWF0aW9uPy5jaGFubmVscz8ubWFwKChnbHRmQ2hhbm5lbCkgPT4ge1xyXG5cdFx0XHRcdGNvbnN0IGFuaW1hdGlvbkNoYW5uZWwgPSBuZXcgQW5pbWF0aW9uQ2hhbm5lbCgpO1xyXG5cdFx0XHRcdGFuaW1hdGlvbkNoYW5uZWwuc2FtcGxlciA9IHNhbXBsZXJzW2dsdGZDaGFubmVsLnNhbXBsZXJdO1xyXG5cdFx0XHRcdGFuaW1hdGlvbkNoYW5uZWwudGFyZ2V0ID0gbmV3IEFuaW1hdGlvbkNoYW5uZWxUYXJnZXQoXHJcblx0XHRcdFx0XHR0aGlzLm5vZGVzW2dsdGZDaGFubmVsLnRhcmdldC5ub2RlXSxcclxuXHRcdFx0XHRcdGdsdGZDaGFubmVsLnRhcmdldC5wYXRoXHJcblx0XHRcdFx0KTtcclxuXHRcdFx0XHRyZXR1cm4gYW5pbWF0aW9uQ2hhbm5lbDtcclxuXHRcdFx0fSk7XHJcblx0XHRcdGNvbnN0IGFuaW1hdGlvbiA9IG5ldyBBbmltYXRpb24oaW5kZXgudG9TdHJpbmcoKSwgc2FtcGxlcnMsIGNoYW5uZWxzKTtcclxuXHRcdFx0cmV0dXJuIGFuaW1hdGlvbjtcclxuXHRcdH0pO1xyXG5cdH1cclxuXHRwcml2YXRlIHBhcnNlTWVzaHMoKSB7XHJcblx0XHR0aGlzLm1lc2hlcyA9IHRoaXM/Lmpzb24/Lm1lc2hlcz8ubWFwPy4oKGdsdGZtZXNoKSA9PiB7XHJcblx0XHRcdHJldHVybiB7XHJcblx0XHRcdFx0bmFtZTogZ2x0Zm1lc2gubmFtZSxcclxuXHRcdFx0XHRwcmltaXRpdmVzOiBnbHRmbWVzaD8ucHJpbWl0aXZlcz8ubWFwPy4oKHByaW1pdGl2ZSkgPT4ge1xyXG5cdFx0XHRcdFx0Y29uc3QgbWF0ZXJpYWwgPVxyXG5cdFx0XHRcdFx0XHRwcmltaXRpdmUubWF0ZXJpYWwgIT09IHVuZGVmaW5lZFxyXG5cdFx0XHRcdFx0XHRcdD8gdGhpcy5tYXRlcmlhbHNbcHJpbWl0aXZlLm1hdGVyaWFsXVxyXG5cdFx0XHRcdFx0XHRcdDogeyBwYnJNZXRhbGxpY1JvdWdobmVzczoge30gfTtcclxuXHRcdFx0XHRcdGNvbnN0IGdlbyA9IHRoaXMuY3JlYXRlR2VvbWV0cnkocHJpbWl0aXZlLCBtYXRlcmlhbCk7XHJcblx0XHRcdFx0XHRjb25zdCBtZXNoID0gbmV3IE1lc2goZ2VvLCBtYXRlcmlhbCk7XHJcblx0XHRcdFx0XHRtZXNoLm5hbWUgPSBnbHRmbWVzaC5uYW1lO1xyXG5cdFx0XHRcdFx0cmV0dXJuIG1lc2g7XHJcblx0XHRcdFx0fSlcclxuXHRcdFx0fTtcclxuXHRcdH0pO1xyXG5cdH1cclxuXHRwcml2YXRlIGdldFNhbXBsZXIoc2FtcGxlckpzb246IGFueSkge1xyXG5cdFx0cmV0dXJuIG5ldyBTYW1wbGVyKHtcclxuXHRcdFx0bWFnRmlsdGVyOiBnbHRmRW51bVtzYW1wbGVySnNvbi5tYWdGaWx0ZXIgfHwgOTcyOV0gYXMgR1BVRmlsdGVyTW9kZSxcclxuXHRcdFx0bWluRmlsdGVyOiBnbHRmRW51bVtzYW1wbGVySnNvbi5taW5GaWx0ZXIgfHwgOTcyOV0gYXMgR1BVRmlsdGVyTW9kZSxcclxuXHRcdFx0YWRkcmVzc01vZGVVOiBnbHRmRW51bVtzYW1wbGVySnNvbi53cmFwUyB8fCAxMDQ5N10gYXMgR1BVQWRkcmVzc01vZGUsXHJcblx0XHRcdGFkZHJlc3NNb2RlVjogZ2x0ZkVudW1bc2FtcGxlckpzb24ud3JhcFQgfHwgMTA0OTddIGFzIEdQVUFkZHJlc3NNb2RlXHJcblx0XHR9KTtcclxuXHR9XHJcblx0cHJpdmF0ZSBnZXRCdWZmZXJWaWV3KGFjY2Vzc29yOiBhbnksIG46IG51bWJlcikge1xyXG5cdFx0Y29uc3QgYnVmZmVyVmlldyA9IHRoaXMuYnVmZmVyVmlld3NbYWNjZXNzb3IuYnVmZmVyVmlld107XHJcblx0XHRjb25zdCBvZmZzZXQgPSAoYnVmZmVyVmlldy5ieXRlT2Zmc2V0IHx8IDApICsgKGFjY2Vzc29yLmJ5dGVPZmZzZXQgfHwgMCk7XHJcblx0XHRjb25zdCBzdHJpZGUgPSBNYXRoLm1heChidWZmZXJWaWV3LmJ5dGVTdHJpZGUgLyA0IHx8IDAsIG4pO1xyXG5cdFx0bGV0IGFycmF5ID0gbmV3VHlwZWRBcnJheShcclxuXHRcdFx0YWNjZXNzb3IuY29tcG9uZW50VHlwZSxcclxuXHRcdFx0dGhpcy5idWZmZXJzW2J1ZmZlclZpZXcuYnVmZmVyXSxcclxuXHRcdFx0YnVmZmVyVmlldy5idWZmZXIgPT09IDAgPyBvZmZzZXQgKyB0aGlzLmdsYk9mZnNldCA6IG9mZnNldCxcclxuXHRcdFx0KGFjY2Vzc29yLmNvdW50IC0gMSkgKiBzdHJpZGUgKyBuXHJcblx0XHQpO1xyXG5cdFx0aWYgKHN0cmlkZSA+IG4pIHtcclxuXHRcdFx0Y29uc3QgVHlwZWRBcnJheUNvbnN0cnVjdG9yID0gYXJyYXkuY29uc3RydWN0b3IgYXMge1xyXG5cdFx0XHRcdG5ldyAoLi4uYXJnczogYW55KTogVHlwZWRBcnJheTtcclxuXHRcdFx0fTtcclxuXHRcdFx0Y29uc3Qgc3RyaWRlZCA9IG5ldyBUeXBlZEFycmF5Q29uc3RydWN0b3IoYWNjZXNzb3IuY291bnQgKiBuKTtcclxuXHRcdFx0Zm9yIChsZXQgaSA9IDAsIGogPSAwOyBpIDwgc3RyaWRlZC5sZW5ndGg7IGkgKz0gbiwgaiArPSBzdHJpZGUpIHtcclxuXHRcdFx0XHRmb3IgKGxldCBrID0gMDsgayA8IG47IGsgKz0gMSkge1xyXG5cdFx0XHRcdFx0c3RyaWRlZFtpICsga10gPSBhcnJheVtqICsga107XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9XHJcblx0XHRcdGFycmF5ID0gc3RyaWRlZDtcclxuXHRcdH1cclxuXHRcdHJldHVybiBhcnJheTtcclxuXHR9XHJcblx0cHJpdmF0ZSBjcmVhdGVHZW9tZXRyeShwcmltaXRpdmUsIG1hdGVyaWFsKSB7XHJcblx0XHRsZXQgaW5kaWNlcyA9IG51bGw7XHJcblx0XHRsZXQgYWNjZXNzb3IgPSBudWxsO1xyXG5cdFx0Y29uc3QgZGVmaW5lczogeyBbcHJvcDogc3RyaW5nXTogYm9vbGVhbiB8IG51bWJlciB9ID0geyBIQVNfTk9STUFMOiB0cnVlIH07XHJcblx0XHRsZXQgdmVydGV4Q291bnQ7XHJcblx0XHRhY2Nlc3NvciA9IHRoaXMuZ2V0QWNjZXNzb3IocHJpbWl0aXZlLmF0dHJpYnV0ZXMuUE9TSVRJT04pO1xyXG5cdFx0Y29uc3QgcG9zaXRpb25zID0gYWNjZXNzb3IuZ2V0QXJyYXkoKTtcclxuXHRcdHZlcnRleENvdW50ID0gYWNjZXNzb3IuY291bnQ7XHJcblx0XHQvLyBjb25zdCB7IG1heCwgbWluIH0gPSBhY2Nlc3NvcjtcclxuXHRcdC8vIGNvbnN0IGJvdW5kaW5nQm94ID0geyBtYXgsIG1pbiB9O1xyXG5cdFx0aWYgKHByaW1pdGl2ZS5pbmRpY2VzICE9PSB1bmRlZmluZWQpIHtcclxuXHRcdFx0YWNjZXNzb3IgPSB0aGlzLmdldEFjY2Vzc29yKHByaW1pdGl2ZS5pbmRpY2VzKTtcclxuXHRcdFx0aW5kaWNlcyA9IHRvSW5kaWNlcyhhY2Nlc3Nvci5nZXRBcnJheSgpKTtcclxuXHRcdFx0dmVydGV4Q291bnQgPSBhY2Nlc3Nvci5jb3VudDtcclxuXHRcdH1cclxuXHRcdGxldCBub3JtYWxzO1xyXG5cclxuXHRcdGlmIChwcmltaXRpdmUuYXR0cmlidXRlcy5OT1JNQUwgIT09IHVuZGVmaW5lZCkge1xyXG5cdFx0XHRhY2Nlc3NvciA9IHRoaXMuZ2V0QWNjZXNzb3IocHJpbWl0aXZlLmF0dHJpYnV0ZXMuTk9STUFMKTtcclxuXHRcdFx0bm9ybWFscyA9IGFjY2Vzc29yLmdldEFycmF5KCk7XHJcblx0XHR9IGVsc2Uge1xyXG5cdFx0XHRub3JtYWxzID0gZ2VuZXJhdGVOb3JtYWxzKGluZGljZXMsIHBvc2l0aW9ucyk7XHJcblx0XHR9XHJcblxyXG5cdFx0bGV0IHV2cyA9IG51bGw7XHJcblx0XHRpZiAocHJpbWl0aXZlLmF0dHJpYnV0ZXMuVEVYQ09PUkRfMCAhPT0gdW5kZWZpbmVkKSB7XHJcblx0XHRcdGFjY2Vzc29yID0gdGhpcy5nZXRBY2Nlc3NvcihwcmltaXRpdmUuYXR0cmlidXRlcy5URVhDT09SRF8wKTtcclxuXHRcdFx0dXZzID0gYWNjZXNzb3IuZ2V0QXJyYXkoKTtcclxuXHRcdFx0ZGVmaW5lcy5IQVNfVVYgPSB0cnVlO1xyXG5cdFx0fVxyXG5cdFx0bGV0IHV2MXMgPSBudWxsO1xyXG5cdFx0aWYgKHByaW1pdGl2ZS5hdHRyaWJ1dGVzLlRFWENPT1JEXzEgIT09IHVuZGVmaW5lZCkge1xyXG5cdFx0XHRhY2Nlc3NvciA9IHRoaXMuZ2V0QWNjZXNzb3IocHJpbWl0aXZlLmF0dHJpYnV0ZXMuVEVYQ09PUkRfMSk7XHJcblx0XHRcdHV2MXMgPSBhY2Nlc3Nvci5nZXRBcnJheSgpO1xyXG5cdFx0XHRkZWZpbmVzLkhBU19VVjEgPSB0cnVlO1xyXG5cdFx0fVxyXG5cclxuXHRcdGxldCB0YW5nZW50cyA9IG51bGw7XHJcblx0XHRpZiAocHJpbWl0aXZlLmF0dHJpYnV0ZXMuVEFOR0VOVCAhPT0gdW5kZWZpbmVkICYmIHByaW1pdGl2ZS5hdHRyaWJ1dGVzLk5PUk1BTCAhPT0gdW5kZWZpbmVkKSB7XHJcblx0XHRcdGFjY2Vzc29yID0gdGhpcy5nZXRBY2Nlc3NvcihwcmltaXRpdmUuYXR0cmlidXRlcy5UQU5HRU5UKTtcclxuXHRcdFx0dGFuZ2VudHMgPSBhY2Nlc3Nvci5nZXRBcnJheSgpO1xyXG5cdFx0XHQvLyBkZWZpbmVzLkhBU19UQU5HRU5UID0gdHJ1ZTtcclxuXHRcdH0gZWxzZSBpZiAobWF0ZXJpYWwubm9ybWFsVGV4dHVyZSkge1xyXG5cdFx0XHQvLyB0YW5nZW50cyA9IGdlbmVyYXRlVGFuZ2VudHMoaW5kaWNlcywgcG9zaXRpb25zLCBub3JtYWxzLCB1dnMhKTtcclxuXHRcdH1cclxuXHRcdGxldCBjb2xvcnMgPSBudWxsLFxyXG5cdFx0XHRjb2xvclNpemUgPSAzO1xyXG5cdFx0aWYgKHByaW1pdGl2ZS5hdHRyaWJ1dGVzLkNPTE9SXzAgIT09IHVuZGVmaW5lZCkge1xyXG5cdFx0XHRhY2Nlc3NvciA9IHRoaXMuYWNjZXNzb3JzW3ByaW1pdGl2ZS5hdHRyaWJ1dGVzLkNPTE9SXzBdO1xyXG5cdFx0XHRjb2xvcnMgPSBhY2Nlc3Nvci5nZXRBcnJheSgpO1xyXG5cdFx0XHRjb2xvclNpemUgPSBhY2Nlc3Nvci50eXBlO1xyXG5cdFx0XHRkZWZpbmVzLkhBU19DT0xPUiA9IHRydWU7XHJcblx0XHR9XHJcblx0XHRsZXQgam9pbnRzID0gbnVsbDtcclxuXHRcdGlmIChwcmltaXRpdmUuYXR0cmlidXRlcy5KT0lOVFNfMCAhPT0gdW5kZWZpbmVkKSB7XHJcblx0XHRcdGFjY2Vzc29yID0gdGhpcy5nZXRBY2Nlc3NvcihwcmltaXRpdmUuYXR0cmlidXRlcy5KT0lOVFNfMCk7XHJcblx0XHRcdGpvaW50cyA9IGFjY2Vzc29yLmdldEFycmF5KCk7XHJcblx0XHRcdGRlZmluZXMuSEFTX1NLSU4gPSB0cnVlO1xyXG5cdFx0fVxyXG5cdFx0bGV0IHdlaWdodHMgPSBudWxsO1xyXG5cdFx0aWYgKHByaW1pdGl2ZS5hdHRyaWJ1dGVzLldFSUdIVFNfMCAhPT0gdW5kZWZpbmVkKSB7XHJcblx0XHRcdGFjY2Vzc29yID0gdGhpcy5nZXRBY2Nlc3NvcihwcmltaXRpdmUuYXR0cmlidXRlcy5XRUlHSFRTXzApO1xyXG5cdFx0XHR3ZWlnaHRzID0gYWNjZXNzb3IuZ2V0QXJyYXkoKTtcclxuXHRcdH1cclxuXHRcdGNvbnN0IGdlbyA9IG5ldyBHZW9tZXRyeSh7IHR5cGU6IFwicGJyR2VvbXRyeVwiIH0pO1xyXG5cdFx0aWYgKGluZGljZXMpIGdlby5zZXRJbmRpY2UoaW5kaWNlcyk7XHJcblx0XHRpZiAocG9zaXRpb25zKSBnZW8uc2V0QXR0cmlidXRlKG5ldyBGbG9hdDMyQXR0cmlidXRlKFwicG9zaXRpb25cIiwgQXJyYXkuZnJvbShwb3NpdGlvbnMpLCAzKSk7XHJcblx0XHRpZiAobm9ybWFscykgZ2VvLnNldEF0dHJpYnV0ZShuZXcgRmxvYXQzMkF0dHJpYnV0ZShcIm5vcm1hbFwiLCBBcnJheS5mcm9tKG5vcm1hbHMpLCAzKSk7XHJcblx0XHRpZiAoY29sb3JzKSBnZW8uc2V0QXR0cmlidXRlKG5ldyBGbG9hdDMyQXR0cmlidXRlKFwiY29sb3JcIiwgQXJyYXkuZnJvbShjb2xvcnMpLCBjb2xvclNpemUpKTtcclxuXHRcdGlmICh1dnMpIGdlby5zZXRBdHRyaWJ1dGUobmV3IEZsb2F0MzJBdHRyaWJ1dGUoXCJ1dlwiLCBBcnJheS5mcm9tKHV2cyksIDIpKTtcclxuXHRcdGlmIChqb2ludHMpIGdlby5zZXRBdHRyaWJ1dGUobmV3IEZsb2F0MzJBdHRyaWJ1dGUoXCJqb2ludDBcIiwgQXJyYXkuZnJvbShqb2ludHMpLCA0KSk7XHJcblx0XHRpZiAod2VpZ2h0cykgZ2VvLnNldEF0dHJpYnV0ZShuZXcgRmxvYXQzMkF0dHJpYnV0ZShcIndlaWdodDBcIiwgQXJyYXkuZnJvbSh3ZWlnaHRzKSwgNCkpO1xyXG5cdFx0Z2VvLmRlZmluZXMgPSBkZWZpbmVzO1xyXG5cdFx0Z2VvLmNvbXB1dGVCb3VuZGluZ1NwaGVyZShBcnJheS5mcm9tKHBvc2l0aW9ucykpO1xyXG5cdFx0Z2VvLmNvdW50ID0gdmVydGV4Q291bnQ7XHJcblx0XHRyZXR1cm4gZ2VvO1xyXG5cdH1cclxuXHRwcml2YXRlIGNyZWF0ZVRleHR1cmUoc291cmNlOiBudW1iZXIpIHtcclxuXHRcdHJldHVybiBuZXcgVGV4dHVyZSh7XHJcblx0XHRcdHNpemU6IHtcclxuXHRcdFx0XHR3aWR0aDogdGhpcy5pbWFnZXNbc291cmNlXS53aWR0aCxcclxuXHRcdFx0XHRoZWlnaHQ6IHRoaXMuaW1hZ2VzW3NvdXJjZV0uaGVpZ2h0LFxyXG5cdFx0XHRcdGRlcHRoOiAxXHJcblx0XHRcdH0sXHJcblx0XHRcdGRhdGE6IHtcclxuXHRcdFx0XHRzb3VyY2U6IHRoaXMuaW1hZ2VzW3NvdXJjZV1cclxuXHRcdFx0fSxcclxuXHRcdFx0Zm9ybWF0OiBcInJnYmE4dW5vcm1cIixcclxuXHRcdFx0dXNhZ2U6IEdQVVRleHR1cmVVc2FnZS5URVhUVVJFX0JJTkRJTkcgfCBHUFVUZXh0dXJlVXNhZ2UuQ09QWV9EU1QgfCBHUFVUZXh0dXJlVXNhZ2UuUkVOREVSX0FUVEFDSE1FTlRcclxuXHRcdH0pO1xyXG5cdH1cclxuXHRwcml2YXRlIGFzeW5jIGxvYWRJbWFnZXMoKSB7XHJcblx0XHRjb25zdCBpbWFnZXM6IEFycmF5PEltYWdlQml0bWFwPiA9IFtdO1xyXG5cdFx0bGV0IGxvYWRFeHRlcm5hbEltYWdlczogUHJvbWlzZTxhbnk+ID0gUHJvbWlzZS5yZXNvbHZlKCk7XHJcblx0XHRpZiAodGhpcy5qc29uLmltYWdlcykge1xyXG5cdFx0XHRsb2FkRXh0ZXJuYWxJbWFnZXMgPSBQcm9taXNlLmFsbChcclxuXHRcdFx0XHR0aGlzLmpzb24uaW1hZ2VzLm1hcChhc3luYyAoaW1hZ2U6IGFueSwgaW5kZXg6IG51bWJlcikgPT4ge1xyXG5cdFx0XHRcdFx0aWYgKGltYWdlLnVyaSkge1xyXG5cdFx0XHRcdFx0XHRjb25zdCBpbWFnZVVybCA9IGltYWdlLnVyaS5zbGljZSgwLCA1KSA9PT0gXCJkYXRhOlwiID8gaW1hZ2UudXJpIDogYCR7dGhpcy5yb290VXJsfS8ke2ltYWdlLnVyaX1gO1xyXG5cdFx0XHRcdFx0XHRpbWFnZXNbaW5kZXhdID0gYXdhaXQgZmV0Y2goaW1hZ2VVcmwpXHJcblx0XHRcdFx0XHRcdFx0LnRoZW4oKHJlc3BvbnNlKSA9PiByZXNwb25zZS5ibG9iKCkpXHJcblx0XHRcdFx0XHRcdFx0LnRoZW4oKGJsb2IpID0+XHJcblx0XHRcdFx0XHRcdFx0XHRjcmVhdGVJbWFnZUJpdG1hcChibG9iLCB7XHJcblx0XHRcdFx0XHRcdFx0XHRcdGNvbG9yU3BhY2VDb252ZXJzaW9uOiBcIm5vbmVcIlxyXG5cdFx0XHRcdFx0XHRcdFx0fSlcclxuXHRcdFx0XHRcdFx0XHQpO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH0pXHJcblx0XHRcdCk7XHJcblx0XHR9XHJcblx0XHRsZXQgbG9hZEludGVybmFsSW1hZ2VzOiBQcm9taXNlPGFueT4gPSBQcm9taXNlLnJlc29sdmUoKTtcclxuXHRcdGlmICh0aGlzLmpzb24uaW1hZ2VzKSB7XHJcblx0XHRcdGxvYWRJbnRlcm5hbEltYWdlcyA9IFByb21pc2UuYWxsKFxyXG5cdFx0XHRcdHRoaXMuanNvbi5pbWFnZXMubWFwKGFzeW5jIChpbWFnZTogYW55LCBpbmRleDogbnVtYmVyKSA9PiB7XHJcblx0XHRcdFx0XHRpZiAoaW1hZ2UuYnVmZmVyVmlldyAhPT0gdW5kZWZpbmVkKSB7XHJcblx0XHRcdFx0XHRcdGNvbnN0IHsgYnVmZmVyLCBieXRlT2Zmc2V0LCBieXRlTGVuZ3RoIH0gPSB0aGlzLmpzb24uYnVmZmVyVmlld3NbaW1hZ2UuYnVmZmVyVmlld107XHJcblx0XHRcdFx0XHRcdGNvbnN0IGFycmF5ID0gbmV3IFVpbnQ4QXJyYXkoXHJcblx0XHRcdFx0XHRcdFx0dGhpcy5idWZmZXJzW2J1ZmZlcl0sXHJcblx0XHRcdFx0XHRcdFx0YnVmZmVyID09PSAwID8gYnl0ZU9mZnNldCArIHRoaXMuZ2xiT2Zmc2V0IDogYnl0ZU9mZnNldCxcclxuXHRcdFx0XHRcdFx0XHRieXRlTGVuZ3RoXHJcblx0XHRcdFx0XHRcdCk7XHJcblx0XHRcdFx0XHRcdGxldCB0eXBlO1xyXG5cdFx0XHRcdFx0XHRpZiAoaW1hZ2UubWltZVR5cGUpIHtcclxuXHRcdFx0XHRcdFx0XHR0eXBlID0gaW1hZ2UubWltZVR5cGU7XHJcblx0XHRcdFx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0XHRcdFx0dHlwZSA9IGFycmF5WzBdID09PSAweGZmID8gXCJpbWFnZS9qcGVnXCIgOiBcImltYWdlL3BuZ1wiO1xyXG5cdFx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRcdGNvbnN0IGJsb2IgPSBuZXcgQmxvYihbYXJyYXldLCB7IHR5cGUgfSk7XHJcblx0XHRcdFx0XHRcdGltYWdlc1tpbmRleF0gPSBhd2FpdCBjcmVhdGVJbWFnZUJpdG1hcChibG9iLCB7XHJcblx0XHRcdFx0XHRcdFx0Y29sb3JTcGFjZUNvbnZlcnNpb246IFwibm9uZVwiXHJcblx0XHRcdFx0XHRcdH0pO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH0pXHJcblx0XHRcdCk7XHJcblx0XHR9XHJcblxyXG5cdFx0YXdhaXQgUHJvbWlzZS5hbGwoW2xvYWRFeHRlcm5hbEltYWdlcywgbG9hZEludGVybmFsSW1hZ2VzXSk7XHJcblx0XHRyZXR1cm4gaW1hZ2VzO1xyXG5cdH1cclxuXHRwcml2YXRlIGFzeW5jIGxvYWRCdWZmZXMoKSB7XHJcblx0XHRjb25zdCBidWZmZXJzOiBBcnJheTxBcnJheUJ1ZmZlcj4gPSBbXTtcclxuXHRcdGF3YWl0IFByb21pc2UuYWxsKFxyXG5cdFx0XHR0aGlzLmpzb24uYnVmZmVycy5tYXAoKGJ1ZmZlcjogYW55LCBpbmRleDogbnVtYmVyKSA9PiB7XHJcblx0XHRcdFx0aWYgKCFidWZmZXIudXJpKSB7XHJcblx0XHRcdFx0XHRpZiAoaW5kZXggIT09IDApIHtcclxuXHRcdFx0XHRcdFx0dGhyb3cgbmV3IEVycm9yKFwiYnVmZmVyIHVyaSB1bmRlZmluZWRcIik7XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRidWZmZXJzW2luZGV4XSA9IHRoaXMuZ2xiQmluITtcclxuXHRcdFx0XHRcdHJldHVybiBQcm9taXNlLnJlc29sdmUoKTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdFx0Y29uc3QgYnVmZmVyVXJsID0gYnVmZmVyLnVyaS5zbGljZSgwLCA1KSA9PT0gXCJkYXRhOlwiID8gYnVmZmVyLnVyaSA6IGAke3RoaXMucm9vdFVybH0vJHtidWZmZXIudXJpfWA7XHJcblx0XHRcdFx0cmV0dXJuIGZldGNoKGJ1ZmZlclVybClcclxuXHRcdFx0XHRcdC50aGVuKChyZXNwb25zZSkgPT4gcmVzcG9uc2UuYXJyYXlCdWZmZXIoKSlcclxuXHRcdFx0XHRcdC50aGVuKChhcnJheUJ1ZmZlcjogQXJyYXlCdWZmZXIpID0+IHtcclxuXHRcdFx0XHRcdFx0YnVmZmVyc1tpbmRleF0gPSBhcnJheUJ1ZmZlcjtcclxuXHRcdFx0XHRcdH0pO1xyXG5cdFx0XHR9KVxyXG5cdFx0KTtcclxuXHRcdHJldHVybiBidWZmZXJzO1xyXG5cdH1cclxuXHRwcml2YXRlIHBhcnNlTm9kZXMoKSB7XHJcblx0XHR0aGlzLm5vZGVzID0gdGhpcz8uanNvbj8ubm9kZXM/Lm1hcCgoZ2x0Zk5vZGUpID0+IHtcclxuXHRcdFx0Y29uc3Qgbm9kZSA9IG5ldyBOb2RlKCk7XHJcblx0XHRcdHRoaXMucGFyc2VOb2RlVFJTKG5vZGUsIGdsdGZOb2RlKTtcclxuXHRcdFx0aWYgKGdsdGZOb2RlLm5hbWUpIG5vZGUubmFtZSA9IGdsdGZOb2RlLm5hbWU7XHJcblx0XHRcdGlmIChnbHRmTm9kZS5tZXNoICE9IHVuZGVmaW5lZCkge1xyXG5cdFx0XHRcdGxldCBnbHRmU2tpbiA9IHVuZGVmaW5lZCxcclxuXHRcdFx0XHRcdGlzU2tpbk1lc2ggPSBmYWxzZTtcclxuXHRcdFx0XHRpZiAoZ2x0Zk5vZGUuc2tpbiAhPSB1bmRlZmluZWQpIHtcclxuXHRcdFx0XHRcdGdsdGZTa2luID0gdGhpcy5qc29uLnNraW5zW2dsdGZOb2RlLnNraW5dO1xyXG5cdFx0XHRcdFx0aXNTa2luTWVzaCA9IHRydWU7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHRcdHRoaXMubWVzaGVzW2dsdGZOb2RlLm1lc2hdLnByaW1pdGl2ZXMuZm9yRWFjaCgocHJpbWl0aXZlOiBNZXNoLCBpbmRleDogbnVtYmVyLCBzb3VyY2U6IEFycmF5PE1lc2g+KSA9PiB7XHJcblx0XHRcdFx0XHRjb25zdCB0ZW1wUHJpbWl0aXZlID1cclxuXHRcdFx0XHRcdFx0aXNTa2luTWVzaCAmJiBwcmltaXRpdmUudHlwZSA9PSBSZW5kZXJPYmplY3RUeXBlLk1lc2hcclxuXHRcdFx0XHRcdFx0XHQ/IG5ldyBTS2luTWVzaChwcmltaXRpdmUuZ2VvbWV0cnksIHByaW1pdGl2ZS5tYXRlcmlhbClcclxuXHRcdFx0XHRcdFx0XHQ6IHByaW1pdGl2ZTtcclxuXHRcdFx0XHRcdGlmIChpc1NraW5NZXNoICYmIHByaW1pdGl2ZS50eXBlID09IFJlbmRlck9iamVjdFR5cGUuTWVzaCkge1xyXG5cdFx0XHRcdFx0XHRzb3VyY2VbaW5kZXhdID0gdGVtcFByaW1pdGl2ZTtcclxuXHRcdFx0XHRcdFx0dGVtcFByaW1pdGl2ZS5zZXRTa2luRGF0YSh7XHJcblx0XHRcdFx0XHRcdFx0aW52ZXJzZUJpbmRNYXRyaWNlczogdGhpcy5nZXRBY2Nlc3NvcihnbHRmU2tpbi5pbnZlcnNlQmluZE1hdHJpY2VzKS5nZXRNYXQ0QXJyYXkoKSxcclxuXHRcdFx0XHRcdFx0XHRqb2ludHM6IGdsdGZTa2luLmpvaW50c1xyXG5cdFx0XHRcdFx0XHRcdC8vIG5hbWU6IGdsdGZTa2luLm5hbWUsXHJcblx0XHRcdFx0XHRcdFx0Ly8gc2tlbGV0b246IGdsdGZTa2luLnNrZWxldG9uXHJcblx0XHRcdFx0XHRcdH0pO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0bm9kZS5hZGQodGVtcFByaW1pdGl2ZSk7XHJcblx0XHRcdFx0fSk7XHJcblx0XHRcdH1cclxuXHRcdFx0cmV0dXJuIG5vZGU7XHJcblx0XHR9KTtcclxuXHR9XHJcblx0cHJpdmF0ZSBwYXJzZU5vZGVUUlMobm9kZTogTm9kZSwgZ2x0Zk5vZGU6IEdMVEZOb2RlUGFybXMpOiBOb2RlIHtcclxuXHRcdGxldCB7IG1hdHJpeCwgcm90YXRpb24sIHRyYW5zbGF0aW9uLCBzY2FsZSB9ID0gZ2x0Zk5vZGU7XHJcblx0XHRpZiAobWF0cml4KSB7XHJcblx0XHRcdGNvbnN0IHRlbXBNYXRyaXg0ID0gbmV3IE1hdHJpeDQoKSxcclxuXHRcdFx0XHR0ZW1wU2NhbGUgPSBuZXcgVmVjdG9yMygpLFxyXG5cdFx0XHRcdHRlbXBUcmFuc2xhdGlvbiA9IG5ldyBWZWN0b3IzKCksXHJcblx0XHRcdFx0dGVtcFJvdGF0aW9uID0gbmV3IFF1YXRlcm5pb24oKTtcclxuXHRcdFx0TWF0cml4NC5mcm9tQ29sdW1uTWFqb3JBcnJheShtYXRyaXgsIHRlbXBNYXRyaXg0KTtcclxuXHRcdFx0TWF0cml4NC5nZXRTY2FsZSh0ZW1wTWF0cml4NCwgdGVtcFNjYWxlKTtcclxuXHRcdFx0TWF0cml4NC5nZXRUcmFuc2xhdGlvbih0ZW1wTWF0cml4NCwgdGVtcFRyYW5zbGF0aW9uKTtcclxuXHRcdFx0TWF0cml4NC5nZXRSb3RhdGlvbih0ZW1wTWF0cml4NCwgdGVtcFJvdGF0aW9uKTtcclxuXHRcdFx0cm90YXRpb24gPSB0ZW1wUm90YXRpb24udG9BcnJheSgpO1xyXG5cdFx0XHR0cmFuc2xhdGlvbiA9IHRlbXBUcmFuc2xhdGlvbi50b0FycmF5KCk7XHJcblx0XHRcdHNjYWxlID0gdGVtcFNjYWxlLnRvQXJyYXkoKTtcclxuXHRcdH1cclxuXHRcdGlmIChyb3RhdGlvbikgbm9kZS5xdWF0ZXJuaW9uLnNldChyb3RhdGlvblswXSwgcm90YXRpb25bMV0sIHJvdGF0aW9uWzJdLCByb3RhdGlvblszXSk7XHJcblx0XHRpZiAodHJhbnNsYXRpb24pIG5vZGUucG9zaXRpb24uc2V0KHRyYW5zbGF0aW9uWzBdLCB0cmFuc2xhdGlvblsxXSwgdHJhbnNsYXRpb25bMl0pO1xyXG5cdFx0aWYgKHNjYWxlKSBub2RlLnNjYWxlLnNldChzY2FsZVswXSwgc2NhbGVbMV0sIHNjYWxlWzJdKTtcclxuXHRcdHJldHVybiBub2RlO1xyXG5cdH1cclxuXHRwcml2YXRlIG5vcm1hbGl6ZURhdGEoKSB7XHJcblx0XHR0aGlzPy5ub2Rlcz8ubWFwPy4oKG5vZGU6IE5vZGUsIGluZGV4KSA9PiB7XHJcblx0XHRcdHRoaXMuanNvbj8ubm9kZXNbaW5kZXhdPy5jaGlsZHJlbj8ubWFwKChub2RlSWQ6IG51bWJlcikgPT4ge1xyXG5cdFx0XHRcdGNvbnN0IGNoaWxkTm9kZSA9IHRoaXMubm9kZXNbbm9kZUlkXTtcclxuXHRcdFx0XHRub2RlLmFkZChjaGlsZE5vZGUpO1xyXG5cdFx0XHR9KTtcclxuXHRcdH0pO1xyXG5cdFx0dGhpcy5tZXNoZXMubWFwKChtZXNoKSA9PiB7XHJcblx0XHRcdG1lc2gucHJpbWl0aXZlcy5tYXAoKHByaW1pdGl2ZSkgPT4ge1xyXG5cdFx0XHRcdGlmIChwcmltaXRpdmUudHlwZSA9PSBSZW5kZXJPYmplY3RUeXBlLlNraW5NZXNoKVxyXG5cdFx0XHRcdFx0cHJpbWl0aXZlLmpvaW50cyA9IHByaW1pdGl2ZS5qb2ludHMubWFwKChqb2ludCkgPT4ge1xyXG5cdFx0XHRcdFx0XHRyZXR1cm4gdGhpcy5ub2Rlc1s8bnVtYmVyPmpvaW50XTtcclxuXHRcdFx0XHRcdH0pO1xyXG5cdFx0XHR9KTtcclxuXHRcdH0pO1xyXG5cdH1cclxufVxyXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gbG9hZEdMVEYodXJsOiBzdHJpbmcpIHtcclxuXHRsZXQgZ2x0ZjtcclxuXHRjb25zdCBleHQgPSB1cmwuc3BsaXQoXCIuXCIpLnBvcCgpO1xyXG5cdGNvbnN0IHJvb3RVcmwgPSB1cmwuc3Vic3RyaW5nKDAsIHVybC5sYXN0SW5kZXhPZihcIi9cIikpO1xyXG5cdGlmIChleHQgPT09IFwiZ2x0ZlwiKSB7XHJcblx0XHRjb25zdCBqc29uID0gYXdhaXQgZmV0Y2godXJsKS50aGVuKChyZXNwb25zZSkgPT4gcmVzcG9uc2UuanNvbigpKTtcclxuXHRcdGdsdGYgPSBuZXcgR0xURihqc29uLCByb290VXJsLCAwKTtcclxuXHR9IGVsc2Uge1xyXG5cdFx0Y29uc3QgZ2xiID0gYXdhaXQgZmV0Y2godXJsKS50aGVuKChyZXNwb25zZSkgPT4gcmVzcG9uc2UuYXJyYXlCdWZmZXIoKSk7XHJcblx0XHRjb25zdCBqc29uTGVuZ3RoID0gbmV3IFVpbnQzMkFycmF5KGdsYiwgMTIsIDEpWzBdO1xyXG5cdFx0Y29uc3QganNvbkNodW5rID0gbmV3IFVpbnQ4QXJyYXkoZ2xiLCAyMCwganNvbkxlbmd0aCk7XHJcblx0XHRjb25zdCBqc29uID0gSlNPTi5wYXJzZShuZXcgVGV4dERlY29kZXIoXCJ1dGYtOFwiKS5kZWNvZGUoanNvbkNodW5rKSk7XHJcblx0XHRnbHRmID0gbmV3IEdMVEYoanNvbiwgcm9vdFVybCwgMjggKyBqc29uTGVuZ3RoLCBnbGIpO1xyXG5cdH1cclxuXHRhd2FpdCBnbHRmLnBhcnNlRGF0YSgpO1xyXG5cdHJldHVybiBnbHRmO1xyXG59XHJcbnR5cGUgR0xURk5vZGVQYXJtcyA9IHtcclxuXHRjaGlsZHJlbj86IG51bWJlcltdO1xyXG5cdG1hdHJpeD86IG51bWJlcltdO1xyXG5cdHNjYWxlPzogbnVtYmVyW107XHJcblx0cm90YXRpb24/OiBudW1iZXJbXTtcclxuXHR0cmFuc2xhdGlvbj86IG51bWJlcltdO1xyXG59O1xyXG4iLCJpbXBvcnQgVGV4dHVyZSBmcm9tIFwiLi4vcmVuZGVyL1RleHR1cmVcIjtcclxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGxvYWRQYnJUZXh0dXJlKGJyZGYsIGRpZmZ1c2UsIHNwZWN1bGFyKSB7XHJcblx0aWYgKCFicmRmKSByZXR1cm47XHJcblx0Y29uc3QgYnJkZlRleHR1cmUgPSBhd2FpdCBsb2FkVGV4dHVyZShicmRmKTtcclxuXHRjb25zdCBkaWZmdXNlVGV4dHVyZSA9IGF3YWl0IGxvYWRDdWJlVGV4dHVyZShkaWZmdXNlKTtcclxuXHRjb25zdCBzcGVjdWxhclRleHR1cmUgPSBhd2FpdCBsb2FkQ3ViZVRleHR1cmUoc3BlY3VsYXIpO1xyXG5cdHJldHVybiB7XHJcblx0XHRicmRmVGV4dHVyZSxcclxuXHRcdGRpZmZ1c2VUZXh0dXJlLFxyXG5cdFx0c3BlY3VsYXJUZXh0dXJlXHJcblx0fTtcclxufVxyXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gbG9hZEN1YmVUZXh0dXJlKHVybHMpIHtcclxuXHRjb25zdCBwcm9taXNlcyA9IHVybHMubWFwKChzcmMpID0+IHtcclxuXHRcdGNvbnN0IGltZyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJpbWdcIik7XHJcblx0XHRpbWcuc3JjID0gc3JjO1xyXG5cdFx0cmV0dXJuIGltZy5kZWNvZGUoKS50aGVuKCgpID0+IGNyZWF0ZUltYWdlQml0bWFwKGltZykpO1xyXG5cdH0pO1xyXG5cdGNvbnN0IGltYWdlcyA9IGF3YWl0IFByb21pc2UuYWxsKHByb21pc2VzKTtcclxuXHRhd2FpdCBQcm9taXNlLmFsbChpbWFnZXMpO1xyXG5cdGNvbnN0IGRhdGEgPSBpbWFnZXMubWFwKChpbWFnZSwgaSkgPT4ge1xyXG5cdFx0cmV0dXJuIHtcclxuXHRcdFx0c291cmNlOiBpbWFnZSxcclxuXHRcdFx0d2lkdGg6IGltYWdlLndpZHRoLFxyXG5cdFx0XHRoZWlnaHQ6IGltYWdlLmhlaWdodCxcclxuXHRcdFx0ZGVwdGg6IDEsXHJcblx0XHRcdHg6IDAsXHJcblx0XHRcdHk6IDAsXHJcblx0XHRcdHo6IGlcclxuXHRcdH07XHJcblx0fSk7XHJcblx0cmV0dXJuIG5ldyBUZXh0dXJlKHtcclxuXHRcdHNpemU6IHtcclxuXHRcdFx0d2lkdGg6IGltYWdlc1swXS53aWR0aCxcclxuXHRcdFx0aGVpZ2h0OiBpbWFnZXNbMF0uaGVpZ2h0LFxyXG5cdFx0XHRkZXB0aDogNlxyXG5cdFx0fSxcclxuXHRcdGZvcm1hdDogXCJyZ2JhOHVub3JtXCIsXHJcblx0XHR1c2FnZTogR1BVVGV4dHVyZVVzYWdlLlRFWFRVUkVfQklORElORyB8IEdQVVRleHR1cmVVc2FnZS5DT1BZX0RTVCB8IEdQVVRleHR1cmVVc2FnZS5SRU5ERVJfQVRUQUNITUVOVCxcclxuXHRcdGRhdGEsXHJcblx0XHR2aWV3Rm9ybWF0czogXCJjdWJlXCIsXHJcblx0XHRtaXBMZXZlbENvdW50OiA2LFxyXG5cdFx0bmVlZE1pcE1hcDogdHJ1ZVxyXG5cdH0pO1xyXG59XHJcbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBsb2FkVGV4dHVyZSh1cmwpIHtcclxuXHRjb25zdCBpbWcgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiaW1nXCIpO1xyXG5cdGltZy5zcmMgPSB1cmw7XHJcblx0YXdhaXQgaW1nLmRlY29kZSgpO1xyXG5cdGNvbnN0IGltYWdlQml0bWFwID0gYXdhaXQgY3JlYXRlSW1hZ2VCaXRtYXAoaW1nKTtcclxuXHRjb25zdCBiYXNlVGV4dHVyZSA9IG5ldyBUZXh0dXJlKHtcclxuXHRcdHNpemU6IHsgd2lkdGg6IGltYWdlQml0bWFwLndpZHRoLCBoZWlnaHQ6IGltYWdlQml0bWFwLmhlaWdodCwgZGVwdGg6IDEgfSxcclxuXHRcdGRhdGE6IHtcclxuXHRcdFx0c291cmNlOiBpbWFnZUJpdG1hcFxyXG5cdFx0fSxcclxuXHRcdGZvcm1hdDogXCJyZ2JhOHVub3JtXCJcclxuXHR9KTtcclxuXHRyZXR1cm4gYmFzZVRleHR1cmU7XHJcbn1cclxuIiwiaW1wb3J0IEdNYXRoIGZyb20gXCIuL01hdGguanNcIjtcbmltcG9ydCBWZWN0b3IzIGZyb20gXCIuL1ZlY3RvcjMuanNcIjtcbi8vIGZyb20gdGhyZWUuanNcbmNsYXNzIFNwaGVyaWNhbCB7XG5cdHJhZGl1czogbnVtYmVyO1xuXHRwaGk6IG51bWJlcjtcblx0dGhldGE6IG51bWJlcjtcblxuXHRjb25zdHJ1Y3RvcihyYWRpdXMgPSAxLCBwaGkgPSAwLCB0aGV0YSA9IDApIHtcblx0XHR0aGlzLnJhZGl1cyA9IHJhZGl1cztcblx0XHR0aGlzLnBoaSA9IHBoaTsgLy8gcG9sYXIgYW5nbGVcblx0XHR0aGlzLnRoZXRhID0gdGhldGE7IC8vIGF6aW11dGhhbCBhbmdsZVxuXG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblx0c2V0KHJhZGl1czogbnVtYmVyLCBwaGk6IG51bWJlciwgdGhldGE6IG51bWJlcik6IFNwaGVyaWNhbCB7XG5cdFx0dGhpcy5yYWRpdXMgPSByYWRpdXM7XG5cdFx0dGhpcy5waGkgPSBwaGk7XG5cdFx0dGhpcy50aGV0YSA9IHRoZXRhO1xuXG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblx0Y29weShvdGhlcjogU3BoZXJpY2FsKTogU3BoZXJpY2FsIHtcblx0XHR0aGlzLnJhZGl1cyA9IG90aGVyLnJhZGl1cztcblx0XHR0aGlzLnBoaSA9IG90aGVyLnBoaTtcblx0XHR0aGlzLnRoZXRhID0gb3RoZXIudGhldGE7XG5cblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXHQvLyByZXN0cmljdCBwaGkgdG8gYmUgYmV0d2VlbiBFUFMgYW5kIFBJLUVQU1xuXHRtYWtlU2FmZSgpOiBTcGhlcmljYWwge1xuXHRcdGNvbnN0IEVQUyA9IDAuMDAwMDAxO1xuXHRcdHRoaXMucGhpID0gTWF0aC5tYXgoRVBTLCBNYXRoLm1pbihNYXRoLlBJIC0gRVBTLCB0aGlzLnBoaSkpO1xuXG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHRzZXRGcm9tVmVjdG9yMyh2OiBWZWN0b3IzKTogU3BoZXJpY2FsIHtcblx0XHRyZXR1cm4gdGhpcy5zZXRGcm9tQ2FydGVzaWFuQ29vcmRzKHYueCwgdi55LCB2LnopO1xuXHR9XG5cdHNldEZyb21DYXJ0ZXNpYW5Db29yZHMoeDogbnVtYmVyLCB5OiBudW1iZXIsIHo6IG51bWJlcik6IFNwaGVyaWNhbCB7XG5cdFx0dGhpcy5yYWRpdXMgPSBNYXRoLnNxcnQoeCAqIHggKyB5ICogeSArIHogKiB6KTtcblxuXHRcdGlmICh0aGlzLnJhZGl1cyA9PT0gMCkge1xuXHRcdFx0dGhpcy50aGV0YSA9IDA7XG5cdFx0XHR0aGlzLnBoaSA9IDA7XG5cdFx0fSBlbHNlIHtcblx0XHRcdHRoaXMudGhldGEgPSBNYXRoLmF0YW4yKHgsIHopO1xuXHRcdFx0dGhpcy5waGkgPSBNYXRoLmFjb3MoR01hdGguY2xhbXAoeSAvIHRoaXMucmFkaXVzLCAtMSwgMSkpO1xuXHRcdH1cblxuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cblx0Y2xvbmUoKTogU3BoZXJpY2FsIHtcblx0XHRyZXR1cm4gbmV3IFNwaGVyaWNhbCh0aGlzLnJhZGl1cywgdGhpcy5waGksIHRoaXMudGhldGEpO1xuXHR9XG59XG5cbmV4cG9ydCB7IFNwaGVyaWNhbCB9O1xuIiwiaW1wb3J0IHsgRXZlbnREaXNwYXRjaGVyIH0gZnJvbSBcIi4uL2NvcmUvRXZlbnREaXNwYXRjaGVyXCI7XHJcbmltcG9ydCB7IFF1YXRlcm5pb24gfSBmcm9tIFwiLi4vbWF0aC9RdWF0ZXJuaW9uXCI7XHJcbmltcG9ydCB7IFNwaGVyaWNhbCB9IGZyb20gXCIuLi9tYXRoL1NwaGVyaWNhbFwiO1xyXG5pbXBvcnQgVmVjdG9yMiBmcm9tIFwiLi4vbWF0aC9WZWN0b3IyXCI7XHJcbmltcG9ydCBWZWN0b3IzIGZyb20gXCIuLi9tYXRoL1ZlY3RvcjNcIjtcclxuLy9mcm9tIHRocmVlLmpzXHJcblxyXG5jb25zdCBfY2hhbmdlRXZlbnQgPSB7IHR5cGU6IFwiY2hhbmdlXCIgfTtcclxuY29uc3QgX3N0YXJ0RXZlbnQgPSB7IHR5cGU6IFwic3RhcnRcIiB9O1xyXG5jb25zdCBfZW5kRXZlbnQgPSB7IHR5cGU6IFwiZW5kXCIgfTtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIE9yYml0Q29udHJvbCBleHRlbmRzIEV2ZW50RGlzcGF0Y2hlciB7XHJcbiAgZG9tRWxlbWVudDogYW55O1xyXG4gIG9iamVjdDogYW55O1xyXG4gIGVuYWJsZWQ6IGJvb2xlYW47XHJcbiAgdGFyZ2V0OiBhbnk7XHJcbiAgbWluRGlzdGFuY2U6IG51bWJlcjtcclxuICBtYXhEaXN0YW5jZTogbnVtYmVyO1xyXG4gIG1pblpvb206IG51bWJlcjtcclxuICBtYXhab29tOiBudW1iZXI7XHJcbiAgbWluUG9sYXJBbmdsZTogbnVtYmVyO1xyXG4gIG1heFBvbGFyQW5nbGU6IG51bWJlcjtcclxuICBtaW5BemltdXRoQW5nbGU6IG51bWJlcjtcclxuICBtYXhBemltdXRoQW5nbGU6IG51bWJlcjtcclxuICBlbmFibGVEYW1waW5nOiBib29sZWFuO1xyXG4gIGRhbXBpbmdGYWN0b3I6IG51bWJlcjtcclxuICBlbmFibGVab29tOiBib29sZWFuO1xyXG4gIHpvb21TcGVlZDogbnVtYmVyO1xyXG4gIGVuYWJsZVJvdGF0ZTogYm9vbGVhbjtcclxuICByb3RhdGVTcGVlZDogbnVtYmVyO1xyXG4gIGVuYWJsZVBhbjogYm9vbGVhbjtcclxuICBwYW5TcGVlZDogbnVtYmVyO1xyXG4gIHNjcmVlblNwYWNlUGFubmluZzogYm9vbGVhbjtcclxuICBrZXlQYW5TcGVlZDogbnVtYmVyO1xyXG4gIGF1dG9Sb3RhdGU6IGJvb2xlYW47XHJcbiAgYXV0b1JvdGF0ZVNwZWVkOiBudW1iZXI7XHJcbiAga2V5czogeyBMRUZUOiBzdHJpbmc7IFVQOiBzdHJpbmc7IFJJR0hUOiBzdHJpbmc7IEJPVFRPTTogc3RyaW5nIH07XHJcbiAgbW91c2VCdXR0b25zOiB7IExFRlQ6IGFueTsgTUlERExFOiBhbnk7IFJJR0hUOiBhbnkgfTtcclxuICB0b3VjaGVzOiB7IE9ORTogYW55OyBUV086IGFueSB9O1xyXG4gIHRhcmdldDA6IGFueTtcclxuICBwb3NpdGlvbjA6IGFueTtcclxuICB6b29tMDogYW55O1xyXG4gIHByaXZhdGUgX2RvbUVsZW1lbnRLZXlFdmVudHM6IGFueTtcclxuICBzcGhlcmljYWw6IGFueTtcclxuICBvblBvaW50ZXJNb3ZlOiAoZXZlbnQ6IGFueSkgPT4gdm9pZDtcclxuICBvblBvaW50ZXJVcDogKGV2ZW50OiBhbnkpID0+IHZvaWQ7XHJcbiAgb25Db250ZXh0TWVudTogKGV2ZW50OiBhbnkpID0+IHZvaWQ7XHJcbiAgb25Qb2ludGVyRG93bjogKGV2ZW50OiBhbnkpID0+IHZvaWQ7XHJcbiAgb25Nb3VzZVdoZWVsOiAoZXZlbnQ6IGFueSkgPT4gdm9pZDtcclxuICBvbktleURvd246IChldmVudDogYW55KSA9PiB2b2lkO1xyXG4gIGdldEF1dG9Sb3RhdGlvbkFuZ2xlOiAoKSA9PiBudW1iZXI7XHJcbiAgdXBkYXRlOiAoKSA9PiBib29sZWFuO1xyXG4gIGNvbnN0cnVjdG9yKG9iamVjdCwgZG9tRWxlbWVudCkge1xyXG4gICAgc3VwZXIoKTtcclxuXHJcbiAgICBpZiAoZG9tRWxlbWVudCA9PT0gdW5kZWZpbmVkKVxyXG4gICAgICBjb25zb2xlLndhcm4oXHJcbiAgICAgICAgJ09yYml0Q29udHJvbHM6IFRoZSBzZWNvbmQgcGFyYW1ldGVyIFwiZG9tRWxlbWVudFwiIGlzIG5vdyBtYW5kYXRvcnkuJ1xyXG4gICAgICApO1xyXG4gICAgaWYgKGRvbUVsZW1lbnQgPT09IGRvY3VtZW50KVxyXG4gICAgICBjb25zb2xlLmVycm9yKFxyXG4gICAgICAgICdPcmJpdENvbnRyb2xzOiBcImRvY3VtZW50XCIgc2hvdWxkIG5vdCBiZSB1c2VkIGFzIHRoZSB0YXJnZXQgXCJkb21FbGVtZW50XCIuIFBsZWFzZSB1c2UgXCJyZW5kZXJlci5kb21FbGVtZW50XCIgaW5zdGVhZC4nXHJcbiAgICAgICk7XHJcblxyXG4gICAgdGhpcy5vYmplY3QgPSBvYmplY3Q7XHJcbiAgICB0aGlzLmRvbUVsZW1lbnQgPSBkb21FbGVtZW50O1xyXG4gICAgdGhpcy5kb21FbGVtZW50LnN0eWxlLnRvdWNoQWN0aW9uID0gXCJub25lXCI7IC8vIGRpc2FibGUgdG91Y2ggc2Nyb2xsXHJcblxyXG4gICAgLy8gU2V0IHRvIGZhbHNlIHRvIGRpc2FibGUgdGhpcyBjb250cm9sXHJcbiAgICB0aGlzLmVuYWJsZWQgPSB0cnVlO1xyXG5cclxuICAgIC8vIFwidGFyZ2V0XCIgc2V0cyB0aGUgbG9jYXRpb24gb2YgZm9jdXMsIHdoZXJlIHRoZSBvYmplY3Qgb3JiaXRzIGFyb3VuZFxyXG4gICAgdGhpcy50YXJnZXQgPSBuZXcgVmVjdG9yMygpO1xyXG5cclxuICAgIC8vIEhvdyBmYXIgeW91IGNhbiBkb2xseSBpbiBhbmQgb3V0ICggUGVyc3BlY3RpdmVDYW1lcmEgb25seSApXHJcbiAgICB0aGlzLm1pbkRpc3RhbmNlID0gMDtcclxuICAgIHRoaXMubWF4RGlzdGFuY2UgPSBJbmZpbml0eTtcclxuXHJcbiAgICAvLyBIb3cgZmFyIHlvdSBjYW4gem9vbSBpbiBhbmQgb3V0ICggT3J0aG9ncmFwaGljQ2FtZXJhIG9ubHkgKVxyXG4gICAgdGhpcy5taW5ab29tID0gMDtcclxuICAgIHRoaXMubWF4Wm9vbSA9IEluZmluaXR5O1xyXG5cclxuICAgIC8vIEhvdyBmYXIgeW91IGNhbiBvcmJpdCB2ZXJ0aWNhbGx5LCB1cHBlciBhbmQgbG93ZXIgbGltaXRzLlxyXG4gICAgLy8gUmFuZ2UgaXMgMCB0byBNYXRoLlBJIHJhZGlhbnMuXHJcbiAgICB0aGlzLm1pblBvbGFyQW5nbGUgPSAwOyAvLyByYWRpYW5zXHJcbiAgICB0aGlzLm1heFBvbGFyQW5nbGUgPSBNYXRoLlBJOyAvLyByYWRpYW5zXHJcblxyXG4gICAgLy8gSG93IGZhciB5b3UgY2FuIG9yYml0IGhvcml6b250YWxseSwgdXBwZXIgYW5kIGxvd2VyIGxpbWl0cy5cclxuICAgIC8vIElmIHNldCwgdGhlIGludGVydmFsIFsgbWluLCBtYXggXSBtdXN0IGJlIGEgc3ViLWludGVydmFsIG9mIFsgLSAyIFBJLCAyIFBJIF0sIHdpdGggKCBtYXggLSBtaW4gPCAyIFBJIClcclxuICAgIHRoaXMubWluQXppbXV0aEFuZ2xlID0gLUluZmluaXR5OyAvLyByYWRpYW5zXHJcbiAgICB0aGlzLm1heEF6aW11dGhBbmdsZSA9IEluZmluaXR5OyAvLyByYWRpYW5zXHJcblxyXG4gICAgLy8gU2V0IHRvIHRydWUgdG8gZW5hYmxlIGRhbXBpbmcgKGluZXJ0aWEpXHJcbiAgICAvLyBJZiBkYW1waW5nIGlzIGVuYWJsZWQsIHlvdSBtdXN0IGNhbGwgY29udHJvbHMudXBkYXRlKCkgaW4geW91ciBhbmltYXRpb24gbG9vcFxyXG4gICAgdGhpcy5lbmFibGVEYW1waW5nID0gZmFsc2U7XHJcbiAgICB0aGlzLmRhbXBpbmdGYWN0b3IgPSAwLjA1O1xyXG5cclxuICAgIC8vIFRoaXMgb3B0aW9uIGFjdHVhbGx5IGVuYWJsZXMgZG9sbHlpbmcgaW4gYW5kIG91dDsgbGVmdCBhcyBcInpvb21cIiBmb3IgYmFja3dhcmRzIGNvbXBhdGliaWxpdHkuXHJcbiAgICAvLyBTZXQgdG8gZmFsc2UgdG8gZGlzYWJsZSB6b29taW5nXHJcbiAgICB0aGlzLmVuYWJsZVpvb20gPSB0cnVlO1xyXG4gICAgdGhpcy56b29tU3BlZWQgPSAxLjA7XHJcblxyXG4gICAgLy8gU2V0IHRvIGZhbHNlIHRvIGRpc2FibGUgcm90YXRpbmdcclxuICAgIHRoaXMuZW5hYmxlUm90YXRlID0gdHJ1ZTtcclxuICAgIHRoaXMucm90YXRlU3BlZWQgPSAxLjA7XHJcblxyXG4gICAgLy8gU2V0IHRvIGZhbHNlIHRvIGRpc2FibGUgcGFubmluZ1xyXG4gICAgdGhpcy5lbmFibGVQYW4gPSB0cnVlO1xyXG4gICAgdGhpcy5wYW5TcGVlZCA9IDEuMDtcclxuICAgIHRoaXMuc2NyZWVuU3BhY2VQYW5uaW5nID0gZmFsc2U7IC8vIGlmIGZhbHNlLCBwYW4gb3J0aG9nb25hbCB0byB3b3JsZC1zcGFjZSBkaXJlY3Rpb24gY2FtZXJhLnVwXHJcbiAgICB0aGlzLmtleVBhblNwZWVkID0gNy4wOyAvLyBwaXhlbHMgbW92ZWQgcGVyIGFycm93IGtleSBwdXNoXHJcblxyXG4gICAgLy8gU2V0IHRvIHRydWUgdG8gYXV0b21hdGljYWxseSByb3RhdGUgYXJvdW5kIHRoZSB0YXJnZXRcclxuICAgIC8vIElmIGF1dG8tcm90YXRlIGlzIGVuYWJsZWQsIHlvdSBtdXN0IGNhbGwgY29udHJvbHMudXBkYXRlKCkgaW4geW91ciBhbmltYXRpb24gbG9vcFxyXG4gICAgdGhpcy5hdXRvUm90YXRlID0gZmFsc2U7XHJcbiAgICB0aGlzLmF1dG9Sb3RhdGVTcGVlZCA9IDIuMDsgLy8gMzAgc2Vjb25kcyBwZXIgb3JiaXQgd2hlbiBmcHMgaXMgNjBcclxuXHJcbiAgICAvLyBUaGUgZm91ciBhcnJvdyBrZXlzXHJcbiAgICB0aGlzLmtleXMgPSB7XHJcbiAgICAgIExFRlQ6IFwiQXJyb3dMZWZ0XCIsXHJcbiAgICAgIFVQOiBcIkFycm93VXBcIixcclxuICAgICAgUklHSFQ6IFwiQXJyb3dSaWdodFwiLFxyXG4gICAgICBCT1RUT006IFwiQXJyb3dEb3duXCIsXHJcbiAgICB9O1xyXG5cclxuICAgIC8vIE1vdXNlIGJ1dHRvbnNcclxuICAgIHRoaXMubW91c2VCdXR0b25zID0ge1xyXG4gICAgICBMRUZUOiBNT1VTRS5ST1RBVEUsXHJcbiAgICAgIE1JRERMRTogTU9VU0UuRE9MTFksXHJcbiAgICAgIFJJR0hUOiBNT1VTRS5QQU4sXHJcbiAgICB9O1xyXG5cclxuICAgIC8vIFRvdWNoIGZpbmdlcnNcclxuICAgIHRoaXMudG91Y2hlcyA9IHsgT05FOiBUT1VDSC5ST1RBVEUsIFRXTzogVE9VQ0guRE9MTFlfUEFOIH07XHJcblxyXG4gICAgLy8gZm9yIHJlc2V0XHJcbiAgICB0aGlzLnRhcmdldDAgPSB0aGlzLnRhcmdldC5jbG9uZSgpO1xyXG4gICAgdGhpcy5wb3NpdGlvbjAgPSB0aGlzLm9iamVjdC5wb3NpdGlvbi5jbG9uZSgpO1xyXG4gICAgdGhpcy56b29tMCA9IHRoaXMub2JqZWN0Lnpvb207XHJcblxyXG4gICAgLy8gdGhlIHRhcmdldCBET00gZWxlbWVudCBmb3Iga2V5IGV2ZW50c1xyXG4gICAgdGhpcy5fZG9tRWxlbWVudEtleUV2ZW50cyA9IG51bGw7XHJcblxyXG4gICAgLy9cclxuICAgIC8vIHB1YmxpYyBtZXRob2RzXHJcbiAgICAvL1xyXG4gICAgLy8gdGhpcyBtZXRob2QgaXMgZXhwb3NlZCwgYnV0IHBlcmhhcHMgaXQgd291bGQgYmUgYmV0dGVyIGlmIHdlIGNhbiBtYWtlIGl0IHByaXZhdGUuLi5cclxuICAgIGNvbnN0IHRoYXQgPSB0aGlzO1xyXG4gICAgdGhpcy51cGRhdGUgPSAoZnVuY3Rpb24gKCkge1xyXG4gICAgICBjb25zdCBvZmZzZXQgPSBuZXcgVmVjdG9yMygpO1xyXG4gICAgICAvLyBzbyBjYW1lcmEudXAgaXMgdGhlIG9yYml0IGF4aXNcclxuICAgICAgY29uc3QgcXVhdCA9IG5ldyBRdWF0ZXJuaW9uKCkuc2V0RnJvbVVuaXRWZWN0b3JzKFxyXG4gICAgICAgIHRoYXQub2JqZWN0LnVwLFxyXG4gICAgICAgIG5ldyBWZWN0b3IzKDAsIDEsIDApXHJcbiAgICAgICk7XHJcbiAgICAgIGNvbnN0IHF1YXRJbnZlcnNlID0gcXVhdC5jbG9uZSgpLmludmVydCgpO1xyXG5cclxuICAgICAgY29uc3QgbGFzdFBvc2l0aW9uID0gbmV3IFZlY3RvcjMoKTtcclxuICAgICAgY29uc3QgbGFzdFF1YXRlcm5pb24gPSBuZXcgUXVhdGVybmlvbigpO1xyXG5cclxuICAgICAgY29uc3QgdHdvUEkgPSAyICogTWF0aC5QSTtcclxuICAgICAgcmV0dXJuIGZ1bmN0aW9uIHVwZGF0ZSgpIHtcclxuICAgICAgICBjb25zdCBwb3NpdGlvbiA9IHRoYXQub2JqZWN0LnBvc2l0aW9uO1xyXG5cclxuICAgICAgICBvZmZzZXQuY29weShwb3NpdGlvbikuc3VidHJhY3QodGhhdC50YXJnZXQpO1xyXG5cclxuICAgICAgICAvLyByb3RhdGUgb2Zmc2V0IHRvIFwieS1heGlzLWlzLXVwXCIgc3BhY2VcclxuICAgICAgICBvZmZzZXQuYXBwbHlRdWF0ZXJuaW9uKHF1YXQpO1xyXG5cclxuICAgICAgICAvLyBhbmdsZSBmcm9tIHotYXhpcyBhcm91bmQgeS1heGlzXHJcbiAgICAgICAgc3BoZXJpY2FsLnNldEZyb21WZWN0b3IzKG9mZnNldCk7XHJcblxyXG4gICAgICAgIGlmICh0aGF0LmF1dG9Sb3RhdGUgJiYgc3RhdGUgPT09IFNUQVRFLk5PTkUpIHtcclxuICAgICAgICAgIHJvdGF0ZUxlZnQodGhhdC5nZXRBdXRvUm90YXRpb25BbmdsZSgpKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGlmICh0aGF0LmVuYWJsZURhbXBpbmcpIHtcclxuICAgICAgICAgIHNwaGVyaWNhbC50aGV0YSArPSBzcGhlcmljYWxEZWx0YS50aGV0YSAqIHRoYXQuZGFtcGluZ0ZhY3RvcjtcclxuICAgICAgICAgIHNwaGVyaWNhbC5waGkgKz0gc3BoZXJpY2FsRGVsdGEucGhpICogdGhhdC5kYW1waW5nRmFjdG9yO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICBzcGhlcmljYWwudGhldGEgKz0gc3BoZXJpY2FsRGVsdGEudGhldGE7XHJcbiAgICAgICAgICBzcGhlcmljYWwucGhpICs9IHNwaGVyaWNhbERlbHRhLnBoaTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIHJlc3RyaWN0IHRoZXRhIHRvIGJlIGJldHdlZW4gZGVzaXJlZCBsaW1pdHNcclxuXHJcbiAgICAgICAgbGV0IG1pbiA9IHRoYXQubWluQXppbXV0aEFuZ2xlO1xyXG4gICAgICAgIGxldCBtYXggPSB0aGF0Lm1heEF6aW11dGhBbmdsZTtcclxuXHJcbiAgICAgICAgaWYgKGlzRmluaXRlKG1pbikgJiYgaXNGaW5pdGUobWF4KSkge1xyXG4gICAgICAgICAgaWYgKG1pbiA8IC1NYXRoLlBJKSBtaW4gKz0gdHdvUEk7XHJcbiAgICAgICAgICBlbHNlIGlmIChtaW4gPiBNYXRoLlBJKSBtaW4gLT0gdHdvUEk7XHJcblxyXG4gICAgICAgICAgaWYgKG1heCA8IC1NYXRoLlBJKSBtYXggKz0gdHdvUEk7XHJcbiAgICAgICAgICBlbHNlIGlmIChtYXggPiBNYXRoLlBJKSBtYXggLT0gdHdvUEk7XHJcblxyXG4gICAgICAgICAgaWYgKG1pbiA8PSBtYXgpIHtcclxuICAgICAgICAgICAgc3BoZXJpY2FsLnRoZXRhID0gTWF0aC5tYXgobWluLCBNYXRoLm1pbihtYXgsIHNwaGVyaWNhbC50aGV0YSkpO1xyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgc3BoZXJpY2FsLnRoZXRhID1cclxuICAgICAgICAgICAgICBzcGhlcmljYWwudGhldGEgPiAobWluICsgbWF4KSAvIDJcclxuICAgICAgICAgICAgICAgID8gTWF0aC5tYXgobWluLCBzcGhlcmljYWwudGhldGEpXHJcbiAgICAgICAgICAgICAgICA6IE1hdGgubWluKG1heCwgc3BoZXJpY2FsLnRoZXRhKTtcclxuICAgICAgICAgIH1cclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIC8vIHJlc3RyaWN0IHBoaSB0byBiZSBiZXR3ZWVuIGRlc2lyZWQgbGltaXRzXHJcbiAgICAgICAgc3BoZXJpY2FsLnBoaSA9IE1hdGgubWF4KFxyXG4gICAgICAgICAgdGhhdC5taW5Qb2xhckFuZ2xlLFxyXG4gICAgICAgICAgTWF0aC5taW4odGhhdC5tYXhQb2xhckFuZ2xlLCBzcGhlcmljYWwucGhpKVxyXG4gICAgICAgICk7XHJcblxyXG4gICAgICAgIHNwaGVyaWNhbC5tYWtlU2FmZSgpO1xyXG5cclxuICAgICAgICBzcGhlcmljYWwucmFkaXVzICo9IHNjYWxlO1xyXG5cclxuICAgICAgICAvLyByZXN0cmljdCByYWRpdXMgdG8gYmUgYmV0d2VlbiBkZXNpcmVkIGxpbWl0c1xyXG4gICAgICAgIHNwaGVyaWNhbC5yYWRpdXMgPSBNYXRoLm1heChcclxuICAgICAgICAgIHRoYXQubWluRGlzdGFuY2UsXHJcbiAgICAgICAgICBNYXRoLm1pbih0aGF0Lm1heERpc3RhbmNlLCBzcGhlcmljYWwucmFkaXVzKVxyXG4gICAgICAgICk7XHJcblxyXG4gICAgICAgIC8vIG1vdmUgdGFyZ2V0IHRvIHBhbm5lZCBsb2NhdGlvblxyXG5cclxuICAgICAgICBpZiAodGhhdC5lbmFibGVEYW1waW5nID09PSB0cnVlKSB7XHJcbiAgICAgICAgICB0aGF0LnRhcmdldC5hZGRTY2FsZWRWZWN0b3IocGFuT2Zmc2V0LCB0aGF0LmRhbXBpbmdGYWN0b3IpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICB0aGF0LnRhcmdldC5hZGQocGFuT2Zmc2V0KTtcclxuICAgICAgICB9XHJcbiAgICAgICAgVmVjdG9yMy5mcm9tU3BoZXJpY2FsKHNwaGVyaWNhbCwgb2Zmc2V0KTtcclxuICAgICAgICAvLyByb3RhdGUgb2Zmc2V0IGJhY2sgdG8gXCJjYW1lcmEtdXAtdmVjdG9yLWlzLXVwXCIgc3BhY2VcclxuICAgICAgICBvZmZzZXQuYXBwbHlRdWF0ZXJuaW9uKHF1YXRJbnZlcnNlKTtcclxuXHJcbiAgICAgICAgcG9zaXRpb24uY29weSh0aGF0LnRhcmdldCkuYWRkKG9mZnNldCk7XHJcblxyXG4gICAgICAgIHRoYXQub2JqZWN0Lmxvb2tBdCh0aGF0LnRhcmdldC54LCB0aGF0LnRhcmdldC55LCB0aGF0LnRhcmdldC56KTtcclxuXHJcbiAgICAgICAgaWYgKHRoYXQuZW5hYmxlRGFtcGluZyA9PT0gdHJ1ZSkge1xyXG4gICAgICAgICAgc3BoZXJpY2FsRGVsdGEudGhldGEgKj0gMSAtIHRoYXQuZGFtcGluZ0ZhY3RvcjtcclxuICAgICAgICAgIHNwaGVyaWNhbERlbHRhLnBoaSAqPSAxIC0gdGhhdC5kYW1waW5nRmFjdG9yO1xyXG5cclxuICAgICAgICAgIFZlY3RvcjMubXVsdGlwbHlCeVNjYWxhcihcclxuICAgICAgICAgICAgcGFuT2Zmc2V0LFxyXG4gICAgICAgICAgICAxIC0gdGhhdC5kYW1waW5nRmFjdG9yLFxyXG4gICAgICAgICAgICBwYW5PZmZzZXRcclxuICAgICAgICAgICk7XHJcbiAgICAgICAgICAvLyBwYW5PZmZzZXQubXVsdGlwbHlTY2FsYXIoIDEgLSB0aGlzLmRhbXBpbmdGYWN0b3IgKTtcclxuICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgc3BoZXJpY2FsRGVsdGEuc2V0KDAsIDAsIDApO1xyXG5cclxuICAgICAgICAgIHBhbk9mZnNldC5zZXQoMCwgMCwgMCk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBzY2FsZSA9IDE7XHJcblxyXG4gICAgICAgIC8vIHVwZGF0ZSBjb25kaXRpb24gaXM6XHJcbiAgICAgICAgLy8gbWluKGNhbWVyYSBkaXNwbGFjZW1lbnQsIGNhbWVyYSByb3RhdGlvbiBpbiByYWRpYW5zKV4yID4gRVBTXHJcbiAgICAgICAgLy8gdXNpbmcgc21hbGwtYW5nbGUgYXBwcm94aW1hdGlvbiBjb3MoeC8yKSA9IDEgLSB4XjIgLyA4XHJcblxyXG4gICAgICAgIGlmIChcclxuICAgICAgICAgIHpvb21DaGFuZ2VkIHx8XHJcbiAgICAgICAgICBWZWN0b3IzLmRpc3RhbmNlU3F1YXJlZChsYXN0UG9zaXRpb24sIHRoYXQub2JqZWN0LnBvc2l0aW9uKSA+IEVQUyB8fFxyXG4gICAgICAgICAgOCAqICgxIC0gbGFzdFF1YXRlcm5pb24uZG90KHRoYXQub2JqZWN0LnF1YXRlcm5pb24pKSA+IEVQU1xyXG4gICAgICAgICkge1xyXG4gICAgICAgICAgdGhhdC5kaXNwYXRjaEV2ZW50KF9jaGFuZ2VFdmVudCk7XHJcblxyXG4gICAgICAgICAgLy9sYXN0UG9zaXRpb24uY29weSggdGhpcy5vYmplY3QucG9zaXRpb24gKTtcclxuICAgICAgICAgIFZlY3RvcjMuY2xvbmUodGhhdC5vYmplY3QucG9zaXRpb24sIGxhc3RQb3NpdGlvbik7XHJcbiAgICAgICAgICBRdWF0ZXJuaW9uLmNsb25lKHRoYXQub2JqZWN0LnF1YXRlcm5pb24sIGxhc3RRdWF0ZXJuaW9uKTtcclxuICAgICAgICAgIC8vbGFzdFF1YXRlcm5pb24uY29weSggdGhpcy5vYmplY3QucXVhdGVybmlvbiApO1xyXG4gICAgICAgICAgem9vbUNoYW5nZWQgPSBmYWxzZTtcclxuXHJcbiAgICAgICAgICByZXR1cm4gdHJ1ZTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHJldHVybiBmYWxzZTtcclxuICAgICAgfTtcclxuICAgIH0pKCk7XHJcbiAgICB0aGlzLmluaXQoKTtcclxuICB9XHJcbiAgZ2V0UG9sYXJBbmdsZSgpIHtcclxuICAgIHJldHVybiB0aGlzLnNwaGVyaWNhbC5waGk7XHJcbiAgfVxyXG4gIGdldEF6aW11dGhhbEFuZ2xlKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuc3BoZXJpY2FsLnRoZXRhO1xyXG4gIH1cclxuXHJcbiAgZ2V0RGlzdGFuY2UoKSB7XHJcbiAgICByZXR1cm4gVmVjdG9yMy5kaXN0YW5jZSh0aGlzLm9iamVjdC5wb3NpdGlvbiwgdGhpcy50YXJnZXQpO1xyXG4gIH1cclxuXHJcbiAgbGlzdGVuVG9LZXlFdmVudHMoZG9tRWxlbWVudCkge1xyXG4gICAgZG9tRWxlbWVudC5hZGRFdmVudExpc3RlbmVyKFwia2V5ZG93blwiLCB0aGlzLm9uS2V5RG93bik7XHJcbiAgICB0aGlzLl9kb21FbGVtZW50S2V5RXZlbnRzID0gZG9tRWxlbWVudDtcclxuICB9XHJcblxyXG4gIHNhdmVTdGF0ZSgpIHtcclxuICAgIFZlY3RvcjMuY2xvbmUodGhpcy50YXJnZXQsIHRoaXMudGFyZ2V0MCk7XHJcbiAgICAvL3RoaXMudGFyZ2V0MC5jb3B5KCB0aGlzLnRhcmdldCApO1xyXG4gICAgVmVjdG9yMy5jbG9uZSh0aGlzLm9iamVjdC5wb3NpdGlvbiwgdGhpcy5wb3NpdGlvbjApO1xyXG4gICAgLy90aGlzLnBvc2l0aW9uMC5jb3B5KCB0aGlzLm9iamVjdC5wb3NpdGlvbiApO1xyXG4gICAgdGhpcy56b29tMCA9IHRoaXMub2JqZWN0Lnpvb207XHJcbiAgfVxyXG5cclxuICByZXNldCgpIHtcclxuICAgIFZlY3RvcjMuY2xvbmUodGhpcy50YXJnZXQwLCB0aGlzLnRhcmdldCk7XHJcbiAgICAvL3RoaXMudGFyZ2V0LmNvcHkoIHRoaXMudGFyZ2V0MCApO1xyXG4gICAgVmVjdG9yMy5jbG9uZSh0aGlzLnBvc2l0aW9uMCwgdGhpcy5vYmplY3QucG9zaXRpb24pO1xyXG4gICAgLy90aGlzLm9iamVjdC5wb3NpdGlvbi5jb3B5KCB0aGlzLnBvc2l0aW9uMCApO1xyXG4gICAgdGhpcy5vYmplY3Quem9vbSA9IHRoaXMuem9vbTA7XHJcblxyXG4gICAgdGhpcy5vYmplY3QudXBkYXRlUHJvamVjdGlvbk1hdHJpeCgpO1xyXG4gICAgdGhpcy5kaXNwYXRjaEV2ZW50KF9jaGFuZ2VFdmVudCk7XHJcblxyXG4gICAgdGhpcy51cGRhdGUoKTtcclxuXHJcbiAgICBzdGF0ZSA9IFNUQVRFLk5PTkU7XHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGluaXQoKSB7XHJcbiAgICBjb25zdCB0aGF0ID0gdGhpcztcclxuICAgIGNvbnN0IHBhbkxlZnQgPSAoZnVuY3Rpb24gKCkge1xyXG4gICAgICBjb25zdCB2ID0gbmV3IFZlY3RvcjMoKTtcclxuICAgICAgcmV0dXJuIGZ1bmN0aW9uIHBhbkxlZnQoZGlzdGFuY2UsIG9iamVjdE1hdHJpeCkge1xyXG4gICAgICAgIHYuc2V0RnJvbU1hdHJpeENvbHVtbihvYmplY3RNYXRyaXgsIDApOyAvLyBnZXQgWCBjb2x1bW4gb2Ygb2JqZWN0TWF0cml4XHJcbiAgICAgICAgdi5tdWx0aXBseUJ5U2NhbGFyKC1kaXN0YW5jZSk7XHJcbiAgICAgICAgcGFuT2Zmc2V0LmFkZCh2KTtcclxuICAgICAgfTtcclxuICAgIH0pKCk7XHJcbiAgICBjb25zdCBwYW5VcCA9IChmdW5jdGlvbiAoKSB7XHJcbiAgICAgIGNvbnN0IHBhblVwViA9IG5ldyBWZWN0b3IzKCk7XHJcbiAgICAgIHJldHVybiBmdW5jdGlvbiBwYW5VcChkaXN0YW5jZSwgb2JqZWN0TWF0cml4KSB7XHJcbiAgICAgICAgaWYgKHRoYXQuc2NyZWVuU3BhY2VQYW5uaW5nID09PSB0cnVlKSB7XHJcbiAgICAgICAgICBwYW5VcFYuc2V0RnJvbU1hdHJpeENvbHVtbihvYmplY3RNYXRyaXgsIDEpO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICBwYW5VcFYuc2V0RnJvbU1hdHJpeENvbHVtbihvYmplY3RNYXRyaXgsIDApO1xyXG4gICAgICAgICAgLy9wYW5VcFYuY3Jvc3NWZWN0b3JzKCB0aGlzLm9iamVjdC51cCwgcGFuVXBWICk7XHJcbiAgICAgICAgICBWZWN0b3IzLmNyb3NzKHRoYXQub2JqZWN0LnVwLCBwYW5VcFYsIHBhblVwVik7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBwYW5VcFYubXVsdGlwbHlCeVNjYWxhcihkaXN0YW5jZSk7XHJcblxyXG4gICAgICAgIHBhbk9mZnNldC5hZGQocGFuVXBWKTtcclxuICAgICAgfTtcclxuICAgIH0pKCk7XHJcbiAgICAvLyBkZWx0YVggYW5kIGRlbHRhWSBhcmUgaW4gcGl4ZWxzOyByaWdodCBhbmQgZG93biBhcmUgcG9zaXRpdmVcclxuICAgIGNvbnN0IHBhbiA9IChmdW5jdGlvbiAoKSB7XHJcbiAgICAgIGNvbnN0IG9mZnNldCA9IG5ldyBWZWN0b3IzKCk7XHJcbiAgICAgIHJldHVybiBmdW5jdGlvbiBwYW4oZGVsdGFYLCBkZWx0YVkpIHtcclxuICAgICAgICBjb25zdCBlbGVtZW50ID0gdGhhdC5kb21FbGVtZW50O1xyXG4gICAgICAgIGlmICh0aGF0Lm9iamVjdC5pc1BlcnNwZWN0aXZlQ2FtZXJhKSB7XHJcbiAgICAgICAgICAvLyBwZXJzcGVjdGl2ZVxyXG4gICAgICAgICAgY29uc3QgcG9zaXRpb24gPSB0aGF0Lm9iamVjdC5wb3NpdGlvbjtcclxuICAgICAgICAgIG9mZnNldC5jb3B5KHBvc2l0aW9uKS5zdWJ0cmFjdCh0aGF0LnRhcmdldCk7XHJcbiAgICAgICAgICBsZXQgdGFyZ2V0RGlzdGFuY2UgPSBvZmZzZXQubGVuZ3RoKCk7XHJcblxyXG4gICAgICAgICAgLy8gaGFsZiBvZiB0aGUgZm92IGlzIGNlbnRlciB0byB0b3Agb2Ygc2NyZWVuXHJcbiAgICAgICAgICB0YXJnZXREaXN0YW5jZSAqPSBNYXRoLnRhbigoKHRoYXQub2JqZWN0LmZvdiAvIDIpICogTWF0aC5QSSkgLyAxODAuMCk7XHJcblxyXG4gICAgICAgICAgLy8gd2UgdXNlIG9ubHkgY2xpZW50SGVpZ2h0IGhlcmUgc28gYXNwZWN0IHJhdGlvIGRvZXMgbm90IGRpc3RvcnQgc3BlZWRcclxuICAgICAgICAgIHBhbkxlZnQoXHJcbiAgICAgICAgICAgICgyICogZGVsdGFYICogdGFyZ2V0RGlzdGFuY2UpIC8gZWxlbWVudC5jbGllbnRIZWlnaHQsXHJcbiAgICAgICAgICAgIHRoYXQub2JqZWN0Lm1vZGVsTWF0cml4XHJcbiAgICAgICAgICApO1xyXG4gICAgICAgICAgcGFuVXAoXHJcbiAgICAgICAgICAgICgyICogZGVsdGFZICogdGFyZ2V0RGlzdGFuY2UpIC8gZWxlbWVudC5jbGllbnRIZWlnaHQsXHJcbiAgICAgICAgICAgIHRoYXQub2JqZWN0Lm1vZGVsTWF0cml4XHJcbiAgICAgICAgICApO1xyXG4gICAgICAgIH0gZWxzZSBpZiAodGhhdC5vYmplY3QuaXNPcnRob2dyYXBoaWNDYW1lcmEpIHtcclxuICAgICAgICAgIC8vIG9ydGhvZ3JhcGhpY1xyXG4gICAgICAgICAgcGFuTGVmdChcclxuICAgICAgICAgICAgKGRlbHRhWCAqICh0aGF0Lm9iamVjdC5yaWdodCAtIHRoYXQub2JqZWN0LmxlZnQpKSAvXHJcbiAgICAgICAgICAgICAgdGhhdC5vYmplY3Quem9vbSAvXHJcbiAgICAgICAgICAgICAgZWxlbWVudC5jbGllbnRXaWR0aCxcclxuICAgICAgICAgICAgdGhhdC5vYmplY3QubW9kZWxNYXRyaXhcclxuICAgICAgICAgICk7XHJcbiAgICAgICAgICBwYW5VcChcclxuICAgICAgICAgICAgKGRlbHRhWSAqICh0aGF0Lm9iamVjdC50b3AgLSB0aGF0Lm9iamVjdC5ib3R0b20pKSAvXHJcbiAgICAgICAgICAgICAgdGhhdC5vYmplY3Quem9vbSAvXHJcbiAgICAgICAgICAgICAgZWxlbWVudC5jbGllbnRIZWlnaHQsXHJcbiAgICAgICAgICAgIHRoYXQub2JqZWN0Lm1vZGVsTWF0cml4XHJcbiAgICAgICAgICApO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAvLyBjYW1lcmEgbmVpdGhlciBvcnRob2dyYXBoaWMgbm9yIHBlcnNwZWN0aXZlXHJcbiAgICAgICAgICBjb25zb2xlLndhcm4oXHJcbiAgICAgICAgICAgIFwiV0FSTklORzogT3JiaXRDb250cm9scy5qcyBlbmNvdW50ZXJlZCBhbiB1bmtub3duIGNhbWVyYSB0eXBlIC0gcGFuIGRpc2FibGVkLlwiXHJcbiAgICAgICAgICApO1xyXG4gICAgICAgICAgdGhhdC5lbmFibGVQYW4gPSBmYWxzZTtcclxuICAgICAgICB9XHJcbiAgICAgIH07XHJcbiAgICB9KSgpO1xyXG4gICAgY29uc3QgZG9sbHlPdXQgPSAoZG9sbHlTY2FsZSkgPT4ge1xyXG4gICAgICBpZiAodGhpcy5vYmplY3QuaXNQZXJzcGVjdGl2ZUNhbWVyYSkge1xyXG4gICAgICAgIHNjYWxlIC89IGRvbGx5U2NhbGU7XHJcbiAgICAgIH0gZWxzZSBpZiAodGhpcy5vYmplY3QuaXNPcnRob2dyYXBoaWNDYW1lcmEpIHtcclxuICAgICAgICB0aGlzLm9iamVjdC56b29tID0gTWF0aC5tYXgoXHJcbiAgICAgICAgICB0aGlzLm1pblpvb20sXHJcbiAgICAgICAgICBNYXRoLm1pbih0aGlzLm1heFpvb20sIHRoaXMub2JqZWN0Lnpvb20gKiBkb2xseVNjYWxlKVxyXG4gICAgICAgICk7XHJcbiAgICAgICAgdGhpcy5vYmplY3QudXBkYXRlUHJvamVjdGlvbk1hdHJpeCgpO1xyXG4gICAgICAgIHpvb21DaGFuZ2VkID0gdHJ1ZTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBjb25zb2xlLndhcm4oXHJcbiAgICAgICAgICBcIldBUk5JTkc6IE9yYml0Q29udHJvbHMuanMgZW5jb3VudGVyZWQgYW4gdW5rbm93biBjYW1lcmEgdHlwZSAtIGRvbGx5L3pvb20gZGlzYWJsZWQuXCJcclxuICAgICAgICApO1xyXG4gICAgICAgIHRoaXMuZW5hYmxlWm9vbSA9IGZhbHNlO1xyXG4gICAgICB9XHJcbiAgICB9O1xyXG5cclxuICAgIGNvbnN0IGRvbGx5SW4gPSAoZG9sbHlTY2FsZSkgPT4ge1xyXG4gICAgICBpZiAodGhpcy5vYmplY3QuaXNQZXJzcGVjdGl2ZUNhbWVyYSkge1xyXG4gICAgICAgIHNjYWxlICo9IGRvbGx5U2NhbGU7XHJcbiAgICAgIH0gZWxzZSBpZiAodGhpcy5vYmplY3QuaXNPcnRob2dyYXBoaWNDYW1lcmEpIHtcclxuICAgICAgICB0aGlzLm9iamVjdC56b29tID0gTWF0aC5tYXgoXHJcbiAgICAgICAgICB0aGlzLm1pblpvb20sXHJcbiAgICAgICAgICBNYXRoLm1pbih0aGlzLm1heFpvb20sIHRoaXMub2JqZWN0Lnpvb20gLyBkb2xseVNjYWxlKVxyXG4gICAgICAgICk7XHJcbiAgICAgICAgdGhpcy5vYmplY3QudXBkYXRlUHJvamVjdGlvbk1hdHJpeCgpO1xyXG4gICAgICAgIHpvb21DaGFuZ2VkID0gdHJ1ZTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBjb25zb2xlLndhcm4oXHJcbiAgICAgICAgICBcIldBUk5JTkc6IE9yYml0Q29udHJvbHMuanMgZW5jb3VudGVyZWQgYW4gdW5rbm93biBjYW1lcmEgdHlwZSAtIGRvbGx5L3pvb20gZGlzYWJsZWQuXCJcclxuICAgICAgICApO1xyXG4gICAgICAgIHRoaXMuZW5hYmxlWm9vbSA9IGZhbHNlO1xyXG4gICAgICB9XHJcbiAgICB9O1xyXG4gICAgY29uc3QgaGFuZGxlTW91c2VNb3ZlUm90YXRlID0gKGV2ZW50KSA9PiB7XHJcbiAgICAgIHJvdGF0ZUVuZC5zZXQoZXZlbnQuY2xpZW50WCwgZXZlbnQuY2xpZW50WSk7XHJcblxyXG4gICAgICBWZWN0b3IyLnN1YnRyYWN0KHJvdGF0ZUVuZCwgcm90YXRlU3RhcnQsIHJvdGF0ZURlbHRhKTtcclxuICAgICAgVmVjdG9yMi5tdWx0aXBseUJ5U2NhbGFyKHJvdGF0ZURlbHRhLCB0aGlzLnJvdGF0ZVNwZWVkLCByb3RhdGVEZWx0YSk7XHJcbiAgICAgIC8vcm90YXRlRGVsdGEuc3ViVmVjdG9ycyggcm90YXRlRW5kLCByb3RhdGVTdGFydCApLm11bHRpcGx5U2NhbGFyKCB0aGlzLnJvdGF0ZVNwZWVkICk7XHJcblxyXG4gICAgICBjb25zdCBlbGVtZW50ID0gdGhpcy5kb21FbGVtZW50O1xyXG5cclxuICAgICAgcm90YXRlTGVmdCgoMiAqIE1hdGguUEkgKiByb3RhdGVEZWx0YS54KSAvIGVsZW1lbnQuY2xpZW50SGVpZ2h0KTsgLy8geWVzLCBoZWlnaHRcclxuXHJcbiAgICAgIHJvdGF0ZVVwKCgyICogTWF0aC5QSSAqIHJvdGF0ZURlbHRhLnkpIC8gZWxlbWVudC5jbGllbnRIZWlnaHQpO1xyXG5cclxuICAgICAgVmVjdG9yMi5jbG9uZShyb3RhdGVFbmQsIHJvdGF0ZVN0YXJ0KTtcclxuICAgICAgLy9yb3RhdGVTdGFydC5jb3B5KCByb3RhdGVFbmQgKTtcclxuXHJcbiAgICAgIHRoaXMudXBkYXRlKCk7XHJcbiAgICB9O1xyXG5cclxuICAgIGNvbnN0IGhhbmRsZU1vdXNlTW92ZURvbGx5ID0gKGV2ZW50KSA9PiB7XHJcbiAgICAgIGRvbGx5RW5kLnNldChldmVudC5jbGllbnRYLCBldmVudC5jbGllbnRZKTtcclxuXHJcbiAgICAgIFZlY3RvcjIuc3VidHJhY3QoZG9sbHlFbmQsIGRvbGx5U3RhcnQsIGRvbGx5RGVsdGEpO1xyXG4gICAgICAvLyBkb2xseURlbHRhLnN1YlZlY3RvcnMoIGRvbGx5RW5kLCBkb2xseVN0YXJ0ICk7XHJcblxyXG4gICAgICBpZiAoZG9sbHlEZWx0YS55ID4gMCkge1xyXG4gICAgICAgIGRvbGx5T3V0KGdldFpvb21TY2FsZSgpKTtcclxuICAgICAgfSBlbHNlIGlmIChkb2xseURlbHRhLnkgPCAwKSB7XHJcbiAgICAgICAgZG9sbHlJbihnZXRab29tU2NhbGUoKSk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIFZlY3RvcjIuY2xvbmUoZG9sbHlFbmQsIGRvbGx5U3RhcnQpO1xyXG4gICAgICAvLyBkb2xseVN0YXJ0LmNvcHkoIGRvbGx5RW5kICk7XHJcblxyXG4gICAgICB0aGlzLnVwZGF0ZSgpO1xyXG4gICAgfTtcclxuXHJcbiAgICBjb25zdCBoYW5kbGVNb3VzZU1vdmVQYW4gPSAoZXZlbnQpID0+IHtcclxuICAgICAgcGFuRW5kLnNldChldmVudC5jbGllbnRYLCBldmVudC5jbGllbnRZKTtcclxuXHJcbiAgICAgIFZlY3RvcjIuc3VidHJhY3QocGFuRW5kLCBwYW5TdGFydCwgcGFuRGVsdGEpO1xyXG4gICAgICBWZWN0b3IyLm11bHRpcGx5QnlTY2FsYXIocGFuRGVsdGEsIHRoaXMucGFuU3BlZWQsIHBhbkRlbHRhKTtcclxuICAgICAgLy9wYW5EZWx0YS5zdWJWZWN0b3JzKCBwYW5FbmQsIHBhblN0YXJ0ICkubXVsdGlwbHlTY2FsYXIoIHRoaXMucGFuU3BlZWQgKTtcclxuXHJcbiAgICAgIHBhbihwYW5EZWx0YS54LCBwYW5EZWx0YS55KTtcclxuXHJcbiAgICAgIFZlY3RvcjIuY2xvbmUocGFuRW5kLCBwYW5TdGFydCk7XHJcbiAgICAgIC8vcGFuU3RhcnQuY29weSggcGFuRW5kICk7XHJcblxyXG4gICAgICB0aGlzLnVwZGF0ZSgpO1xyXG4gICAgfTtcclxuXHJcbiAgICBjb25zdCBoYW5kbGVNb3VzZVdoZWVsID0gKGV2ZW50KSA9PiB7XHJcbiAgICAgIGlmIChldmVudC5kZWx0YVkgPCAwKSB7XHJcbiAgICAgICAgZG9sbHlJbihnZXRab29tU2NhbGUoKSk7XHJcbiAgICAgIH0gZWxzZSBpZiAoZXZlbnQuZGVsdGFZID4gMCkge1xyXG4gICAgICAgIGRvbGx5T3V0KGdldFpvb21TY2FsZSgpKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgdGhpcy51cGRhdGUoKTtcclxuICAgIH07XHJcblxyXG4gICAgY29uc3QgaGFuZGxlS2V5RG93biA9IChldmVudCkgPT4ge1xyXG4gICAgICBsZXQgbmVlZHNVcGRhdGUgPSBmYWxzZTtcclxuXHJcbiAgICAgIHN3aXRjaCAoZXZlbnQuY29kZSkge1xyXG4gICAgICAgIGNhc2UgdGhpcy5rZXlzLlVQOlxyXG4gICAgICAgICAgcGFuKDAsIHRoaXMua2V5UGFuU3BlZWQpO1xyXG4gICAgICAgICAgbmVlZHNVcGRhdGUgPSB0cnVlO1xyXG4gICAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICAgIGNhc2UgdGhpcy5rZXlzLkJPVFRPTTpcclxuICAgICAgICAgIHBhbigwLCAtdGhpcy5rZXlQYW5TcGVlZCk7XHJcbiAgICAgICAgICBuZWVkc1VwZGF0ZSA9IHRydWU7XHJcbiAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgY2FzZSB0aGlzLmtleXMuTEVGVDpcclxuICAgICAgICAgIHBhbih0aGlzLmtleVBhblNwZWVkLCAwKTtcclxuICAgICAgICAgIG5lZWRzVXBkYXRlID0gdHJ1ZTtcclxuICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICBjYXNlIHRoaXMua2V5cy5SSUdIVDpcclxuICAgICAgICAgIHBhbigtdGhpcy5rZXlQYW5TcGVlZCwgMCk7XHJcbiAgICAgICAgICBuZWVkc1VwZGF0ZSA9IHRydWU7XHJcbiAgICAgICAgICBicmVhaztcclxuICAgICAgfVxyXG5cclxuICAgICAgaWYgKG5lZWRzVXBkYXRlKSB7XHJcbiAgICAgICAgLy8gcHJldmVudCB0aGUgYnJvd3NlciBmcm9tIHNjcm9sbGluZyBvbiBjdXJzb3Iga2V5c1xyXG4gICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XHJcblxyXG4gICAgICAgIHRoaXMudXBkYXRlKCk7XHJcbiAgICAgIH1cclxuICAgIH07XHJcblxyXG4gICAgY29uc3QgaGFuZGxlVG91Y2hTdGFydERvbGx5UGFuID0gKCkgPT4ge1xyXG4gICAgICBpZiAodGhpcy5lbmFibGVab29tKSBoYW5kbGVUb3VjaFN0YXJ0RG9sbHkoKTtcclxuXHJcbiAgICAgIGlmICh0aGlzLmVuYWJsZVBhbikgaGFuZGxlVG91Y2hTdGFydFBhbigpO1xyXG4gICAgfTtcclxuICAgIGNvbnN0IGhhbmRsZVRvdWNoU3RhcnREb2xseVJvdGF0ZSA9ICgpID0+IHtcclxuICAgICAgaWYgKHRoaXMuZW5hYmxlWm9vbSkgaGFuZGxlVG91Y2hTdGFydERvbGx5KCk7XHJcblxyXG4gICAgICBpZiAodGhpcy5lbmFibGVSb3RhdGUpIGhhbmRsZVRvdWNoU3RhcnRSb3RhdGUoKTtcclxuICAgIH07XHJcblxyXG4gICAgY29uc3QgaGFuZGxlVG91Y2hNb3ZlUm90YXRlID0gKGV2ZW50KSA9PiB7XHJcbiAgICAgIGlmIChwb2ludGVycy5sZW5ndGggPT0gMSkge1xyXG4gICAgICAgIHJvdGF0ZUVuZC5zZXQoZXZlbnQucGFnZVgsIGV2ZW50LnBhZ2VZKTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBjb25zdCBwb3NpdGlvbiA9IGdldFNlY29uZFBvaW50ZXJQb3NpdGlvbihldmVudCk7XHJcblxyXG4gICAgICAgIGNvbnN0IHggPSAwLjUgKiAoZXZlbnQucGFnZVggKyBwb3NpdGlvbi54KTtcclxuICAgICAgICBjb25zdCB5ID0gMC41ICogKGV2ZW50LnBhZ2VZICsgcG9zaXRpb24ueSk7XHJcblxyXG4gICAgICAgIHJvdGF0ZUVuZC5zZXQoeCwgeSk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIFZlY3RvcjIuc3VidHJhY3Qocm90YXRlRW5kLCByb3RhdGVTdGFydCwgcm90YXRlRGVsdGEpO1xyXG4gICAgICBWZWN0b3IyLm11bHRpcGx5QnlTY2FsYXIocm90YXRlRGVsdGEsIHRoaXMucm90YXRlU3BlZWQsIHJvdGF0ZURlbHRhKTtcclxuICAgICAgLy9yb3RhdGVEZWx0YS5zdWJWZWN0b3JzKCByb3RhdGVFbmQsIHJvdGF0ZVN0YXJ0ICkubXVsdGlwbHlTY2FsYXIoIHRoaXMucm90YXRlU3BlZWQgKTtcclxuXHJcbiAgICAgIGNvbnN0IGVsZW1lbnQgPSB0aGlzLmRvbUVsZW1lbnQ7XHJcblxyXG4gICAgICByb3RhdGVMZWZ0KCgyICogTWF0aC5QSSAqIHJvdGF0ZURlbHRhLngpIC8gZWxlbWVudC5jbGllbnRIZWlnaHQpOyAvLyB5ZXMsIGhlaWdodFxyXG5cclxuICAgICAgcm90YXRlVXAoKDIgKiBNYXRoLlBJICogcm90YXRlRGVsdGEueSkgLyBlbGVtZW50LmNsaWVudEhlaWdodCk7XHJcbiAgICAgIFZlY3RvcjIuY2xvbmUocm90YXRlRW5kLCByb3RhdGVTdGFydCk7XHJcbiAgICAgIC8vcm90YXRlU3RhcnQuY29weSggcm90YXRlRW5kICk7XHJcbiAgICB9O1xyXG5cclxuICAgIGNvbnN0IGhhbmRsZVRvdWNoTW92ZVBhbiA9IChldmVudCkgPT4ge1xyXG4gICAgICBpZiAocG9pbnRlcnMubGVuZ3RoID09PSAxKSB7XHJcbiAgICAgICAgcGFuRW5kLnNldChldmVudC5wYWdlWCwgZXZlbnQucGFnZVkpO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGNvbnN0IHBvc2l0aW9uID0gZ2V0U2Vjb25kUG9pbnRlclBvc2l0aW9uKGV2ZW50KTtcclxuXHJcbiAgICAgICAgY29uc3QgeCA9IDAuNSAqIChldmVudC5wYWdlWCArIHBvc2l0aW9uLngpO1xyXG4gICAgICAgIGNvbnN0IHkgPSAwLjUgKiAoZXZlbnQucGFnZVkgKyBwb3NpdGlvbi55KTtcclxuXHJcbiAgICAgICAgcGFuRW5kLnNldCh4LCB5KTtcclxuICAgICAgfVxyXG4gICAgICBWZWN0b3IyLnN1YnRyYWN0KHBhbkVuZCwgcGFuU3RhcnQsIHBhbkRlbHRhKTtcclxuICAgICAgVmVjdG9yMi5tdWx0aXBseUJ5U2NhbGFyKHBhbkRlbHRhLCB0aGlzLnBhblNwZWVkLCBwYW5EZWx0YSk7XHJcblxyXG4gICAgICAvL3BhbkRlbHRhLnN1YlZlY3RvcnMoIHBhbkVuZCwgcGFuU3RhcnQgKS5tdWx0aXBseVNjYWxhciggdGhpcy5wYW5TcGVlZCApO1xyXG5cclxuICAgICAgcGFuKHBhbkRlbHRhLngsIHBhbkRlbHRhLnkpO1xyXG5cclxuICAgICAgVmVjdG9yMi5jbG9uZShwYW5FbmQsIHBhblN0YXJ0KTtcclxuICAgICAgLy8gcGFuU3RhcnQuY29weSggcGFuRW5kICk7XHJcbiAgICB9O1xyXG5cclxuICAgIGNvbnN0IGhhbmRsZVRvdWNoTW92ZURvbGx5ID0gKGV2ZW50KSA9PiB7XHJcbiAgICAgIGNvbnN0IHBvc2l0aW9uID0gZ2V0U2Vjb25kUG9pbnRlclBvc2l0aW9uKGV2ZW50KTtcclxuXHJcbiAgICAgIGNvbnN0IGR4ID0gZXZlbnQucGFnZVggLSBwb3NpdGlvbi54O1xyXG4gICAgICBjb25zdCBkeSA9IGV2ZW50LnBhZ2VZIC0gcG9zaXRpb24ueTtcclxuXHJcbiAgICAgIGNvbnN0IGRpc3RhbmNlID0gTWF0aC5zcXJ0KGR4ICogZHggKyBkeSAqIGR5KTtcclxuXHJcbiAgICAgIGRvbGx5RW5kLnNldCgwLCBkaXN0YW5jZSk7XHJcblxyXG4gICAgICBkb2xseURlbHRhLnNldCgwLCBNYXRoLnBvdyhkb2xseUVuZC55IC8gZG9sbHlTdGFydC55LCB0aGlzLnpvb21TcGVlZCkpO1xyXG5cclxuICAgICAgZG9sbHlPdXQoZG9sbHlEZWx0YS55KTtcclxuXHJcbiAgICAgIFZlY3RvcjIuY2xvbmUoZG9sbHlFbmQsIGRvbGx5U3RhcnQpO1xyXG4gICAgICAvL2RvbGx5U3RhcnQuY29weSggZG9sbHlFbmQgKTtcclxuICAgIH07XHJcblxyXG4gICAgY29uc3QgaGFuZGxlVG91Y2hNb3ZlRG9sbHlQYW4gPSAoZXZlbnQpID0+IHtcclxuICAgICAgaWYgKHRoaXMuZW5hYmxlWm9vbSkgaGFuZGxlVG91Y2hNb3ZlRG9sbHkoZXZlbnQpO1xyXG5cclxuICAgICAgaWYgKHRoaXMuZW5hYmxlUGFuKSBoYW5kbGVUb3VjaE1vdmVQYW4oZXZlbnQpO1xyXG4gICAgfTtcclxuXHJcbiAgICBjb25zdCBoYW5kbGVUb3VjaE1vdmVEb2xseVJvdGF0ZSA9IChldmVudCkgPT4ge1xyXG4gICAgICBpZiAodGhpcy5lbmFibGVab29tKSBoYW5kbGVUb3VjaE1vdmVEb2xseShldmVudCk7XHJcblxyXG4gICAgICBpZiAodGhpcy5lbmFibGVSb3RhdGUpIGhhbmRsZVRvdWNoTW92ZVJvdGF0ZShldmVudCk7XHJcbiAgICB9O1xyXG5cclxuICAgIC8vXHJcbiAgICAvLyBldmVudCBoYW5kbGVycyAtIEZTTTogbGlzdGVuIGZvciBldmVudHMgYW5kIHJlc2V0IHN0YXRlXHJcbiAgICAvL1xyXG5cclxuICAgIHRoaXMub25Qb2ludGVyRG93biA9IChldmVudCkgPT4ge1xyXG4gICAgICBpZiAodGhpcy5lbmFibGVkID09PSBmYWxzZSkgcmV0dXJuO1xyXG5cclxuICAgICAgaWYgKHBvaW50ZXJzLmxlbmd0aCA9PT0gMCkge1xyXG4gICAgICAgIHRoaXMuZG9tRWxlbWVudC5zZXRQb2ludGVyQ2FwdHVyZShldmVudC5wb2ludGVySWQpO1xyXG5cclxuICAgICAgICB0aGlzLmRvbUVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcihcInBvaW50ZXJtb3ZlXCIsIHRoaXMub25Qb2ludGVyTW92ZSk7XHJcbiAgICAgICAgdGhpcy5kb21FbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoXCJwb2ludGVydXBcIiwgdGhpcy5vblBvaW50ZXJVcCk7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIC8vXHJcblxyXG4gICAgICBhZGRQb2ludGVyKGV2ZW50KTtcclxuXHJcbiAgICAgIGlmIChldmVudC5wb2ludGVyVHlwZSA9PT0gXCJ0b3VjaFwiKSB7XHJcbiAgICAgICAgb25Ub3VjaFN0YXJ0KGV2ZW50KTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBvbk1vdXNlRG93bihldmVudCk7XHJcbiAgICAgIH1cclxuICAgIH07XHJcblxyXG4gICAgdGhpcy5vblBvaW50ZXJNb3ZlID0gKGV2ZW50KSA9PiB7XHJcbiAgICAgIGlmICh0aGlzLmVuYWJsZWQgPT09IGZhbHNlKSByZXR1cm47XHJcblxyXG4gICAgICBpZiAoZXZlbnQucG9pbnRlclR5cGUgPT09IFwidG91Y2hcIikge1xyXG4gICAgICAgIG9uVG91Y2hNb3ZlKGV2ZW50KTtcclxuICAgICAgfSBlbHNlIHtcclxuICAgICAgICBvbk1vdXNlTW92ZShldmVudCk7XHJcbiAgICAgIH1cclxuICAgIH07XHJcblxyXG4gICAgdGhpcy5vblBvaW50ZXJVcCA9IChldmVudCkgPT4ge1xyXG4gICAgICByZW1vdmVQb2ludGVyKGV2ZW50KTtcclxuXHJcbiAgICAgIGlmIChwb2ludGVycy5sZW5ndGggPT09IDApIHtcclxuICAgICAgICB0aGlzLmRvbUVsZW1lbnQucmVsZWFzZVBvaW50ZXJDYXB0dXJlKGV2ZW50LnBvaW50ZXJJZCk7XHJcblxyXG4gICAgICAgIHRoaXMuZG9tRWxlbWVudC5yZW1vdmVFdmVudExpc3RlbmVyKFwicG9pbnRlcm1vdmVcIiwgdGhpcy5vblBvaW50ZXJNb3ZlKTtcclxuICAgICAgICB0aGlzLmRvbUVsZW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcihcInBvaW50ZXJ1cFwiLCB0aGlzLm9uUG9pbnRlclVwKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgdGhpcy5kaXNwYXRjaEV2ZW50KF9lbmRFdmVudCk7XHJcblxyXG4gICAgICBzdGF0ZSA9IFNUQVRFLk5PTkU7XHJcbiAgICB9O1xyXG5cclxuICAgIGNvbnN0IG9uTW91c2VEb3duID0gKGV2ZW50KSA9PiB7XHJcbiAgICAgIGxldCBtb3VzZUFjdGlvbjtcclxuXHJcbiAgICAgIHN3aXRjaCAoZXZlbnQuYnV0dG9uKSB7XHJcbiAgICAgICAgY2FzZSAwOlxyXG4gICAgICAgICAgbW91c2VBY3Rpb24gPSB0aGlzLm1vdXNlQnV0dG9ucy5MRUZUO1xyXG4gICAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICAgIGNhc2UgMTpcclxuICAgICAgICAgIG1vdXNlQWN0aW9uID0gdGhpcy5tb3VzZUJ1dHRvbnMuTUlERExFO1xyXG4gICAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICAgIGNhc2UgMjpcclxuICAgICAgICAgIG1vdXNlQWN0aW9uID0gdGhpcy5tb3VzZUJ1dHRvbnMuUklHSFQ7XHJcbiAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgZGVmYXVsdDpcclxuICAgICAgICAgIG1vdXNlQWN0aW9uID0gLTE7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIHN3aXRjaCAobW91c2VBY3Rpb24pIHtcclxuICAgICAgICBjYXNlIE1PVVNFLkRPTExZOlxyXG4gICAgICAgICAgaWYgKHRoaXMuZW5hYmxlWm9vbSA9PT0gZmFsc2UpIHJldHVybjtcclxuXHJcbiAgICAgICAgICBoYW5kbGVNb3VzZURvd25Eb2xseShldmVudCk7XHJcblxyXG4gICAgICAgICAgc3RhdGUgPSBTVEFURS5ET0xMWTtcclxuXHJcbiAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgY2FzZSBNT1VTRS5ST1RBVEU6XHJcbiAgICAgICAgICBpZiAoZXZlbnQuY3RybEtleSB8fCBldmVudC5tZXRhS2V5IHx8IGV2ZW50LnNoaWZ0S2V5KSB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLmVuYWJsZVBhbiA9PT0gZmFsc2UpIHJldHVybjtcclxuXHJcbiAgICAgICAgICAgIGhhbmRsZU1vdXNlRG93blBhbihldmVudCk7XHJcblxyXG4gICAgICAgICAgICBzdGF0ZSA9IFNUQVRFLlBBTjtcclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLmVuYWJsZVJvdGF0ZSA9PT0gZmFsc2UpIHJldHVybjtcclxuXHJcbiAgICAgICAgICAgIGhhbmRsZU1vdXNlRG93blJvdGF0ZShldmVudCk7XHJcblxyXG4gICAgICAgICAgICBzdGF0ZSA9IFNUQVRFLlJPVEFURTtcclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgY2FzZSBNT1VTRS5QQU46XHJcbiAgICAgICAgICBpZiAoZXZlbnQuY3RybEtleSB8fCBldmVudC5tZXRhS2V5IHx8IGV2ZW50LnNoaWZ0S2V5KSB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLmVuYWJsZVJvdGF0ZSA9PT0gZmFsc2UpIHJldHVybjtcclxuXHJcbiAgICAgICAgICAgIGhhbmRsZU1vdXNlRG93blJvdGF0ZShldmVudCk7XHJcblxyXG4gICAgICAgICAgICBzdGF0ZSA9IFNUQVRFLlJPVEFURTtcclxuICAgICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICAgIGlmICh0aGlzLmVuYWJsZVBhbiA9PT0gZmFsc2UpIHJldHVybjtcclxuXHJcbiAgICAgICAgICAgIGhhbmRsZU1vdXNlRG93blBhbihldmVudCk7XHJcblxyXG4gICAgICAgICAgICBzdGF0ZSA9IFNUQVRFLlBBTjtcclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgZGVmYXVsdDpcclxuICAgICAgICAgIHN0YXRlID0gU1RBVEUuTk9ORTtcclxuICAgICAgfVxyXG5cclxuICAgICAgaWYgKHN0YXRlICE9PSBTVEFURS5OT05FKSB7XHJcbiAgICAgICAgdGhpcy5kaXNwYXRjaEV2ZW50KF9zdGFydEV2ZW50KTtcclxuICAgICAgfVxyXG4gICAgfTtcclxuXHJcbiAgICBjb25zdCBvbk1vdXNlTW92ZSA9IChldmVudCkgPT4ge1xyXG4gICAgICBzd2l0Y2ggKHN0YXRlKSB7XHJcbiAgICAgICAgY2FzZSBTVEFURS5ST1RBVEU6XHJcbiAgICAgICAgICBpZiAodGhpcy5lbmFibGVSb3RhdGUgPT09IGZhbHNlKSByZXR1cm47XHJcblxyXG4gICAgICAgICAgaGFuZGxlTW91c2VNb3ZlUm90YXRlKGV2ZW50KTtcclxuXHJcbiAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgY2FzZSBTVEFURS5ET0xMWTpcclxuICAgICAgICAgIGlmICh0aGlzLmVuYWJsZVpvb20gPT09IGZhbHNlKSByZXR1cm47XHJcblxyXG4gICAgICAgICAgaGFuZGxlTW91c2VNb3ZlRG9sbHkoZXZlbnQpO1xyXG5cclxuICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICBjYXNlIFNUQVRFLlBBTjpcclxuICAgICAgICAgIGlmICh0aGlzLmVuYWJsZVBhbiA9PT0gZmFsc2UpIHJldHVybjtcclxuXHJcbiAgICAgICAgICBoYW5kbGVNb3VzZU1vdmVQYW4oZXZlbnQpO1xyXG5cclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICB9XHJcbiAgICB9O1xyXG5cclxuICAgIHRoaXMub25Nb3VzZVdoZWVsID0gKGV2ZW50KSA9PiB7XHJcbiAgICAgIGlmIChcclxuICAgICAgICB0aGlzLmVuYWJsZWQgPT09IGZhbHNlIHx8XHJcbiAgICAgICAgdGhpcy5lbmFibGVab29tID09PSBmYWxzZSB8fFxyXG4gICAgICAgIHN0YXRlICE9PSBTVEFURS5OT05FXHJcbiAgICAgIClcclxuICAgICAgICByZXR1cm47XHJcblxyXG4gICAgICBldmVudC5wcmV2ZW50RGVmYXVsdCgpO1xyXG5cclxuICAgICAgdGhpcy5kaXNwYXRjaEV2ZW50KF9zdGFydEV2ZW50KTtcclxuXHJcbiAgICAgIGhhbmRsZU1vdXNlV2hlZWwoZXZlbnQpO1xyXG5cclxuICAgICAgdGhpcy5kaXNwYXRjaEV2ZW50KF9lbmRFdmVudCk7XHJcbiAgICB9O1xyXG5cclxuICAgIHRoaXMub25LZXlEb3duID0gKGV2ZW50KSA9PiB7XHJcbiAgICAgIGlmICh0aGlzLmVuYWJsZWQgPT09IGZhbHNlIHx8IHRoaXMuZW5hYmxlUGFuID09PSBmYWxzZSkgcmV0dXJuO1xyXG5cclxuICAgICAgaGFuZGxlS2V5RG93bihldmVudCk7XHJcbiAgICB9O1xyXG5cclxuICAgIGNvbnN0IG9uVG91Y2hTdGFydCA9IChldmVudCkgPT4ge1xyXG4gICAgICB0cmFja1BvaW50ZXIoZXZlbnQpO1xyXG5cclxuICAgICAgc3dpdGNoIChwb2ludGVycy5sZW5ndGgpIHtcclxuICAgICAgICBjYXNlIDE6XHJcbiAgICAgICAgICBzd2l0Y2ggKHRoaXMudG91Y2hlcy5PTkUpIHtcclxuICAgICAgICAgICAgY2FzZSBUT1VDSC5ST1RBVEU6XHJcbiAgICAgICAgICAgICAgaWYgKHRoaXMuZW5hYmxlUm90YXRlID09PSBmYWxzZSkgcmV0dXJuO1xyXG5cclxuICAgICAgICAgICAgICBoYW5kbGVUb3VjaFN0YXJ0Um90YXRlKCk7XHJcblxyXG4gICAgICAgICAgICAgIHN0YXRlID0gU1RBVEUuVE9VQ0hfUk9UQVRFO1xyXG5cclxuICAgICAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgICAgIGNhc2UgVE9VQ0guUEFOOlxyXG4gICAgICAgICAgICAgIGlmICh0aGlzLmVuYWJsZVBhbiA9PT0gZmFsc2UpIHJldHVybjtcclxuXHJcbiAgICAgICAgICAgICAgaGFuZGxlVG91Y2hTdGFydFBhbigpO1xyXG5cclxuICAgICAgICAgICAgICBzdGF0ZSA9IFNUQVRFLlRPVUNIX1BBTjtcclxuXHJcbiAgICAgICAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICAgICAgICBkZWZhdWx0OlxyXG4gICAgICAgICAgICAgIHN0YXRlID0gU1RBVEUuTk9ORTtcclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgY2FzZSAyOlxyXG4gICAgICAgICAgc3dpdGNoICh0aGlzLnRvdWNoZXMuVFdPKSB7XHJcbiAgICAgICAgICAgIGNhc2UgVE9VQ0guRE9MTFlfUEFOOlxyXG4gICAgICAgICAgICAgIGlmICh0aGlzLmVuYWJsZVpvb20gPT09IGZhbHNlICYmIHRoaXMuZW5hYmxlUGFuID09PSBmYWxzZSkgcmV0dXJuO1xyXG5cclxuICAgICAgICAgICAgICBoYW5kbGVUb3VjaFN0YXJ0RG9sbHlQYW4oKTtcclxuXHJcbiAgICAgICAgICAgICAgc3RhdGUgPSBTVEFURS5UT1VDSF9ET0xMWV9QQU47XHJcblxyXG4gICAgICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICAgICAgY2FzZSBUT1VDSC5ET0xMWV9ST1RBVEU6XHJcbiAgICAgICAgICAgICAgaWYgKHRoaXMuZW5hYmxlWm9vbSA9PT0gZmFsc2UgJiYgdGhpcy5lbmFibGVSb3RhdGUgPT09IGZhbHNlKVxyXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xyXG5cclxuICAgICAgICAgICAgICBoYW5kbGVUb3VjaFN0YXJ0RG9sbHlSb3RhdGUoKTtcclxuXHJcbiAgICAgICAgICAgICAgc3RhdGUgPSBTVEFURS5UT1VDSF9ET0xMWV9ST1RBVEU7XHJcblxyXG4gICAgICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICAgICAgZGVmYXVsdDpcclxuICAgICAgICAgICAgICBzdGF0ZSA9IFNUQVRFLk5PTkU7XHJcbiAgICAgICAgICB9XHJcblxyXG4gICAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgICBzdGF0ZSA9IFNUQVRFLk5PTkU7XHJcbiAgICAgIH1cclxuXHJcbiAgICAgIGlmIChzdGF0ZSAhPT0gU1RBVEUuTk9ORSkge1xyXG4gICAgICAgIHRoaXMuZGlzcGF0Y2hFdmVudChfc3RhcnRFdmVudCk7XHJcbiAgICAgIH1cclxuICAgIH07XHJcblxyXG4gICAgY29uc3Qgb25Ub3VjaE1vdmUgPSAoZXZlbnQpID0+IHtcclxuICAgICAgdHJhY2tQb2ludGVyKGV2ZW50KTtcclxuXHJcbiAgICAgIHN3aXRjaCAoc3RhdGUpIHtcclxuICAgICAgICBjYXNlIFNUQVRFLlRPVUNIX1JPVEFURTpcclxuICAgICAgICAgIGlmICh0aGlzLmVuYWJsZVJvdGF0ZSA9PT0gZmFsc2UpIHJldHVybjtcclxuXHJcbiAgICAgICAgICBoYW5kbGVUb3VjaE1vdmVSb3RhdGUoZXZlbnQpO1xyXG5cclxuICAgICAgICAgIHRoaXMudXBkYXRlKCk7XHJcblxyXG4gICAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICAgIGNhc2UgU1RBVEUuVE9VQ0hfUEFOOlxyXG4gICAgICAgICAgaWYgKHRoaXMuZW5hYmxlUGFuID09PSBmYWxzZSkgcmV0dXJuO1xyXG5cclxuICAgICAgICAgIGhhbmRsZVRvdWNoTW92ZVBhbihldmVudCk7XHJcblxyXG4gICAgICAgICAgdGhpcy51cGRhdGUoKTtcclxuXHJcbiAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgY2FzZSBTVEFURS5UT1VDSF9ET0xMWV9QQU46XHJcbiAgICAgICAgICBpZiAodGhpcy5lbmFibGVab29tID09PSBmYWxzZSAmJiB0aGlzLmVuYWJsZVBhbiA9PT0gZmFsc2UpIHJldHVybjtcclxuXHJcbiAgICAgICAgICBoYW5kbGVUb3VjaE1vdmVEb2xseVBhbihldmVudCk7XHJcblxyXG4gICAgICAgICAgdGhpcy51cGRhdGUoKTtcclxuXHJcbiAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgY2FzZSBTVEFURS5UT1VDSF9ET0xMWV9ST1RBVEU6XHJcbiAgICAgICAgICBpZiAodGhpcy5lbmFibGVab29tID09PSBmYWxzZSAmJiB0aGlzLmVuYWJsZVJvdGF0ZSA9PT0gZmFsc2UpIHJldHVybjtcclxuXHJcbiAgICAgICAgICBoYW5kbGVUb3VjaE1vdmVEb2xseVJvdGF0ZShldmVudCk7XHJcblxyXG4gICAgICAgICAgdGhpcy51cGRhdGUoKTtcclxuXHJcbiAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgZGVmYXVsdDpcclxuICAgICAgICAgIHN0YXRlID0gU1RBVEUuTk9ORTtcclxuICAgICAgfVxyXG4gICAgfTtcclxuXHJcbiAgICB0aGlzLm9uQ29udGV4dE1lbnUgPSAoZXZlbnQpID0+IHtcclxuICAgICAgaWYgKHRoaXMuZW5hYmxlZCA9PT0gZmFsc2UpIHJldHVybjtcclxuXHJcbiAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XHJcbiAgICB9O1xyXG4gICAgdGhpcy5nZXRBdXRvUm90YXRpb25BbmdsZSA9ICgpID0+IHtcclxuICAgICAgcmV0dXJuICgoMiAqIE1hdGguUEkpIC8gNjAgLyA2MCkgKiB0aGlzLmF1dG9Sb3RhdGVTcGVlZDtcclxuICAgIH07XHJcblxyXG4gICAgY29uc3QgZ2V0Wm9vbVNjYWxlID0gKCkgPT4ge1xyXG4gICAgICByZXR1cm4gTWF0aC5wb3coMC45NSwgdGhpcy56b29tU3BlZWQpO1xyXG4gICAgfTtcclxuICAgIHRoaXMuZG9tRWxlbWVudC5hZGRFdmVudExpc3RlbmVyKFwiY29udGV4dG1lbnVcIiwgdGhpcy5vbkNvbnRleHRNZW51KTtcclxuXHJcbiAgICB0aGlzLmRvbUVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcihcInBvaW50ZXJkb3duXCIsIHRoaXMub25Qb2ludGVyRG93bik7XHJcbiAgICB0aGlzLmRvbUVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcihcInBvaW50ZXJjYW5jZWxcIiwgb25Qb2ludGVyQ2FuY2VsKTtcclxuICAgIHRoaXMuZG9tRWxlbWVudC5hZGRFdmVudExpc3RlbmVyKFwid2hlZWxcIiwgdGhpcy5vbk1vdXNlV2hlZWwsIHtcclxuICAgICAgcGFzc2l2ZTogZmFsc2UsXHJcbiAgICB9KTtcclxuICB9XHJcbiAgZGlzcG9zZSgpIHtcclxuICAgIHRoaXMuZG9tRWxlbWVudC5yZW1vdmVFdmVudExpc3RlbmVyKFwiY29udGV4dG1lbnVcIiwgdGhpcy5vbkNvbnRleHRNZW51KTtcclxuXHJcbiAgICB0aGlzLmRvbUVsZW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcihcInBvaW50ZXJkb3duXCIsIHRoaXMub25Qb2ludGVyRG93bik7XHJcbiAgICB0aGlzLmRvbUVsZW1lbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcihcInBvaW50ZXJjYW5jZWxcIiwgb25Qb2ludGVyQ2FuY2VsKTtcclxuICAgIHRoaXMuZG9tRWxlbWVudC5yZW1vdmVFdmVudExpc3RlbmVyKFwid2hlZWxcIiwgdGhpcy5vbk1vdXNlV2hlZWwpO1xyXG5cclxuICAgIHRoaXMuZG9tRWxlbWVudC5yZW1vdmVFdmVudExpc3RlbmVyKFwicG9pbnRlcm1vdmVcIiwgdGhpcy5vblBvaW50ZXJNb3ZlKTtcclxuICAgIHRoaXMuZG9tRWxlbWVudC5yZW1vdmVFdmVudExpc3RlbmVyKFwicG9pbnRlcnVwXCIsIHRoaXMub25Qb2ludGVyVXApO1xyXG5cclxuICAgIGlmICh0aGlzLl9kb21FbGVtZW50S2V5RXZlbnRzICE9PSBudWxsKSB7XHJcbiAgICAgIHRoaXMuX2RvbUVsZW1lbnRLZXlFdmVudHMucmVtb3ZlRXZlbnRMaXN0ZW5lcihcImtleWRvd25cIiwgdGhpcy5vbktleURvd24pO1xyXG4gICAgfVxyXG5cclxuICAgIC8vdGhpcy5kaXNwYXRjaEV2ZW50KCB7IHR5cGU6ICdkaXNwb3NlJyB9ICk7IC8vIHNob3VsZCB0aGlzIGJlIGFkZGVkIGhlcmU/XHJcbiAgfVxyXG59XHJcbmNvbnN0IFNUQVRFID0ge1xyXG4gIE5PTkU6IC0xLFxyXG4gIFJPVEFURTogMCxcclxuICBET0xMWTogMSxcclxuICBQQU46IDIsXHJcbiAgVE9VQ0hfUk9UQVRFOiAzLFxyXG4gIFRPVUNIX1BBTjogNCxcclxuICBUT1VDSF9ET0xMWV9QQU46IDUsXHJcbiAgVE9VQ0hfRE9MTFlfUk9UQVRFOiA2LFxyXG59O1xyXG5cclxubGV0IHN0YXRlID0gU1RBVEUuTk9ORTtcclxuXHJcbmNvbnN0IEVQUyA9IDAuMDAwMDAxO1xyXG5cclxuLy8gY3VycmVudCBwb3NpdGlvbiBpbiBzcGhlcmljYWwgY29vcmRpbmF0ZXNcclxuY29uc3Qgc3BoZXJpY2FsID0gbmV3IFNwaGVyaWNhbCgpO1xyXG5jb25zdCBzcGhlcmljYWxEZWx0YSA9IG5ldyBTcGhlcmljYWwoKTtcclxuXHJcbmxldCBzY2FsZSA9IDE7XHJcbmNvbnN0IHBhbk9mZnNldCA9IG5ldyBWZWN0b3IzKCk7XHJcbmxldCB6b29tQ2hhbmdlZCA9IGZhbHNlO1xyXG5cclxuY29uc3Qgcm90YXRlU3RhcnQgPSBuZXcgVmVjdG9yMigpO1xyXG5jb25zdCByb3RhdGVFbmQgPSBuZXcgVmVjdG9yMigpO1xyXG5jb25zdCByb3RhdGVEZWx0YSA9IG5ldyBWZWN0b3IyKCk7XHJcblxyXG5jb25zdCBwYW5TdGFydCA9IG5ldyBWZWN0b3IyKCk7XHJcbmNvbnN0IHBhbkVuZCA9IG5ldyBWZWN0b3IyKCk7XHJcbmNvbnN0IHBhbkRlbHRhID0gbmV3IFZlY3RvcjIoKTtcclxuXHJcbmNvbnN0IGRvbGx5U3RhcnQgPSBuZXcgVmVjdG9yMigpO1xyXG5jb25zdCBkb2xseUVuZCA9IG5ldyBWZWN0b3IyKCk7XHJcbmNvbnN0IGRvbGx5RGVsdGEgPSBuZXcgVmVjdG9yMigpO1xyXG5cclxuY29uc3QgcG9pbnRlcnMgPSBbXTtcclxuY29uc3QgcG9pbnRlclBvc2l0aW9ucyA9IHt9O1xyXG5leHBvcnQgZW51bSBNT1VTRSB7XHJcbiAgTEVGVCA9IDAsXHJcbiAgTUlERExFID0gMSxcclxuICBSSUdIVCA9IDIsXHJcbiAgUk9UQVRFID0gMCxcclxuICBET0xMWSA9IDEsXHJcbiAgUEFOID0gMixcclxufVxyXG5cclxuZXhwb3J0IGVudW0gVE9VQ0gge1xyXG4gIFJPVEFURSxcclxuICBQQU4sXHJcbiAgRE9MTFlfUEFOLFxyXG4gIERPTExZX1JPVEFURSxcclxufVxyXG5mdW5jdGlvbiByb3RhdGVMZWZ0KGFuZ2xlKSB7XHJcbiAgc3BoZXJpY2FsRGVsdGEudGhldGEgLT0gYW5nbGU7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIHJvdGF0ZVVwKGFuZ2xlKSB7XHJcbiAgc3BoZXJpY2FsRGVsdGEucGhpIC09IGFuZ2xlO1xyXG59XHJcblxyXG5mdW5jdGlvbiBhZGRQb2ludGVyKGV2ZW50KSB7XHJcbiAgcG9pbnRlcnMucHVzaChldmVudCk7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIHJlbW92ZVBvaW50ZXIoZXZlbnQpIHtcclxuICBkZWxldGUgcG9pbnRlclBvc2l0aW9uc1tldmVudC5wb2ludGVySWRdO1xyXG5cclxuICBmb3IgKGxldCBpID0gMDsgaSA8IHBvaW50ZXJzLmxlbmd0aDsgaSsrKSB7XHJcbiAgICBpZiAocG9pbnRlcnNbaV0ucG9pbnRlcklkID09IGV2ZW50LnBvaW50ZXJJZCkge1xyXG4gICAgICBwb2ludGVycy5zcGxpY2UoaSwgMSk7XHJcbiAgICAgIHJldHVybjtcclxuICAgIH1cclxuICB9XHJcbn1cclxuXHJcbmZ1bmN0aW9uIHRyYWNrUG9pbnRlcihldmVudCkge1xyXG4gIGxldCBwb3NpdGlvbiA9IHBvaW50ZXJQb3NpdGlvbnNbZXZlbnQucG9pbnRlcklkXTtcclxuXHJcbiAgaWYgKHBvc2l0aW9uID09PSB1bmRlZmluZWQpIHtcclxuICAgIHBvc2l0aW9uID0gbmV3IFZlY3RvcjIoKTtcclxuICAgIHBvaW50ZXJQb3NpdGlvbnNbZXZlbnQucG9pbnRlcklkXSA9IHBvc2l0aW9uO1xyXG4gIH1cclxuXHJcbiAgcG9zaXRpb24uc2V0KGV2ZW50LnBhZ2VYLCBldmVudC5wYWdlWSk7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGdldFNlY29uZFBvaW50ZXJQb3NpdGlvbihldmVudCkge1xyXG4gIGNvbnN0IHBvaW50ZXIgPVxyXG4gICAgZXZlbnQucG9pbnRlcklkID09PSBwb2ludGVyc1swXS5wb2ludGVySWQgPyBwb2ludGVyc1sxXSA6IHBvaW50ZXJzWzBdO1xyXG5cclxuICByZXR1cm4gcG9pbnRlclBvc2l0aW9uc1twb2ludGVyLnBvaW50ZXJJZF07XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGhhbmRsZU1vdXNlRG93blJvdGF0ZShldmVudCkge1xyXG4gIHJvdGF0ZVN0YXJ0LnNldChldmVudC5jbGllbnRYLCBldmVudC5jbGllbnRZKTtcclxufVxyXG5cclxuZnVuY3Rpb24gaGFuZGxlTW91c2VEb3duRG9sbHkoZXZlbnQpIHtcclxuICBkb2xseVN0YXJ0LnNldChldmVudC5jbGllbnRYLCBldmVudC5jbGllbnRZKTtcclxufVxyXG5cclxuZnVuY3Rpb24gaGFuZGxlTW91c2VEb3duUGFuKGV2ZW50KSB7XHJcbiAgcGFuU3RhcnQuc2V0KGV2ZW50LmNsaWVudFgsIGV2ZW50LmNsaWVudFkpO1xyXG59XHJcbmZ1bmN0aW9uIG9uUG9pbnRlckNhbmNlbChldmVudCkge1xyXG4gIHJlbW92ZVBvaW50ZXIoZXZlbnQpO1xyXG59XHJcbmZ1bmN0aW9uIGhhbmRsZVRvdWNoU3RhcnRSb3RhdGUoKSB7XHJcbiAgaWYgKHBvaW50ZXJzLmxlbmd0aCA9PT0gMSkge1xyXG4gICAgcm90YXRlU3RhcnQuc2V0KHBvaW50ZXJzWzBdLnBhZ2VYLCBwb2ludGVyc1swXS5wYWdlWSk7XHJcbiAgfSBlbHNlIHtcclxuICAgIGNvbnN0IHggPSAwLjUgKiAocG9pbnRlcnNbMF0ucGFnZVggKyBwb2ludGVyc1sxXS5wYWdlWCk7XHJcbiAgICBjb25zdCB5ID0gMC41ICogKHBvaW50ZXJzWzBdLnBhZ2VZICsgcG9pbnRlcnNbMV0ucGFnZVkpO1xyXG5cclxuICAgIHJvdGF0ZVN0YXJ0LnNldCh4LCB5KTtcclxuICB9XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGhhbmRsZVRvdWNoU3RhcnRQYW4oKSB7XHJcbiAgaWYgKHBvaW50ZXJzLmxlbmd0aCA9PT0gMSkge1xyXG4gICAgcGFuU3RhcnQuc2V0KHBvaW50ZXJzWzBdLnBhZ2VYLCBwb2ludGVyc1swXS5wYWdlWSk7XHJcbiAgfSBlbHNlIHtcclxuICAgIGNvbnN0IHggPSAwLjUgKiAocG9pbnRlcnNbMF0ucGFnZVggKyBwb2ludGVyc1sxXS5wYWdlWCk7XHJcbiAgICBjb25zdCB5ID0gMC41ICogKHBvaW50ZXJzWzBdLnBhZ2VZICsgcG9pbnRlcnNbMV0ucGFnZVkpO1xyXG5cclxuICAgIHBhblN0YXJ0LnNldCh4LCB5KTtcclxuICB9XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGhhbmRsZVRvdWNoU3RhcnREb2xseSgpIHtcclxuICBjb25zdCBkeCA9IHBvaW50ZXJzWzBdLnBhZ2VYIC0gcG9pbnRlcnNbMV0ucGFnZVg7XHJcbiAgY29uc3QgZHkgPSBwb2ludGVyc1swXS5wYWdlWSAtIHBvaW50ZXJzWzFdLnBhZ2VZO1xyXG5cclxuICBjb25zdCBkaXN0YW5jZSA9IE1hdGguc3FydChkeCAqIGR4ICsgZHkgKiBkeSk7XHJcblxyXG4gIGRvbGx5U3RhcnQuc2V0KDAsIGRpc3RhbmNlKTtcclxufVxyXG4iXSwibmFtZXMiOlsiTWVyc2VubmVUd2lzdGVyIiwiZGlzdGFuY2VTY3JhdGNoIiwibGVycFNjcmF0Y2giLCJhbmdsZUJldHdlZW5TY3JhdGNoIiwiYW5nbGVCZXR3ZWVuU2NyYXRjaDIiLCJtb3N0T3J0aG9nb25hbEF4aXNTY3JhdGNoIiwic2NhbGVTY3JhdGNoMSIsInNjcmF0Y2hDb2x1bW4iLCJzY2FsZVNjcmF0Y2gzIiwic2NhbGVTY3JhdGNoNCIsInNjYWxlU2NyYXRjaDUiLCJzY3JhdGNoVHJhbnNwb3NlTWF0cml4Il0sIm1hcHBpbmdzIjoiQUFBQTtBQUNBLElBQVksb0JBRVgsQ0FBQTtBQUZELENBQUEsVUFBWSxvQkFBb0IsRUFBQTtBQUMvQixJQUFBLG9CQUFBLENBQUEsTUFBQSxDQUFBLEdBQUEsTUFBYSxDQUFBO0FBQ2QsQ0FBQyxFQUZXLG9CQUFvQixLQUFwQixvQkFBb0IsR0FFL0IsRUFBQSxDQUFBLENBQUEsQ0FBQTtBQUVEO0FBQ0EsSUFBWSxlQUdYLENBQUE7QUFIRCxDQUFBLFVBQVksZUFBZSxFQUFBO0FBQzFCLElBQUEsZUFBQSxDQUFBLFVBQUEsQ0FBQSxHQUFBLFdBQXNCLENBQUE7QUFDdEIsSUFBQSxlQUFBLENBQUEsaUJBQUEsQ0FBQSxHQUFBLGtCQUFvQyxDQUFBO0FBQ3JDLENBQUMsRUFIVyxlQUFlLEtBQWYsZUFBZSxHQUcxQixF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QUEsVUFBQSxDQUFBLEdBQUEsVUFBcUIsQ0FBQTtBQUNyQixJQUFBLFlBQUEsQ0FBQSxVQUFBLENBQUEsR0FBQSxVQUFxQixDQUFBO0FBQ3JCLElBQUEsWUFBQSxDQUFBLFVBQUEsQ0FBQSxHQUFBLFVBQXFCLENBQUE7QUFDckIsSUFBQSxZQUFBLENBQUEsVUFBQSxDQUFBLEdBQUEsVUFBcUIsQ0FBQTtBQUNyQixJQUFBLFlBQUEsQ0FBQSxVQUFBLENBQUEsR0FBQSxVQUFxQixDQUFBO0FBQ3JCLElBQUEsWUFBQSxDQUFBLFVBQUEsQ0FBQSxHQUFBLFVBQXFCLENBQUE7QUFDckIsSUFBQSxZQUFBLENBQUEsVUFBQSxDQUFBLEdBQUEsVUFBcUIsQ0FBQTtBQUNyQixJQUFBLFlBQUEsQ0FBQSxXQUFBLENBQUEsR0FBQSxXQUF1QixDQUFBO0FBQ3ZCLElBQUEsWUFBQSxDQUFBLFdBQUEsQ0FBQSxHQUFBLFdBQXVCLENBQUE7QUFDdkIsSUFBQSxZQUFBLENBQUEsV0FBQSxDQUFBLEdBQUEsV0FBdUIsQ0FBQTtBQUN2QixJQUFBLFlBQUEsQ0FBQSxXQUFBLENBQUEsR0FBQSxXQUF1QixDQUFBO0FBQ3ZCLElBQUEsWUFBQSxDQUFBLFdBQUEsQ0FBQSxHQUFBLFdBQXVCLENBQUE7QUFDdkIsSUFBQSxZQUFBLENBQUEsV0FBQSxDQUFBLEdBQUEsV0FBdUIsQ0FBQTtBQUN2QixJQUFBLFlBQUEsQ0FBQSxTQUFBLENBQUEsR0FBQSxTQUFtQixDQUFBO0FBQ25CLElBQUEsWUFBQSxDQUFBLFdBQUEsQ0FBQSxHQUFBLFdBQXVCLENBQUE7QUFDdkIsSUFBQSxZQUFBLENBQUEsV0FBQSxDQUFBLEdBQUEsV0FBdUIsQ0FBQTtBQUN2QixJQUFBLFlBQUEsQ0FBQSxXQUFBLENBQUEsR0FBQSxXQUF1QixDQUFBO0FBQ3ZCLElBQUEsWUFBQSxDQUFBLFFBQUEsQ0FBQSxHQUFBLFFBQWlCLENBQUE7QUFDakIsSUFBQSxZQUFBLENBQUEsVUFBQSxDQUFBLEdBQUEsVUFBcUIsQ0FBQTtBQUNyQixJQUFBLFlBQUEsQ0FBQSxVQUFB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LEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssRUFBRSxFQUFDO0FBQzlDLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsVUFBVSxNQUFNLEVBQUUsSUFBSSxPQUFPLEtBQUssRUFBRSxLQUFLLENBQUMsQ0FBQyxHQUFHLFVBQVUsSUFBSSxPQUFPLENBQUMsQ0FBQztBQUMzRyxJQUFJLFFBQVEsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDcEIsRUFBRSxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxNQUFNLENBQUMsQ0FBQztBQUNwQixFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUM7QUFDWCxFQUFFLElBQUksQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDLEVBQUUsRUFBRSxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRTtBQUN6RCxFQUFFLElBQUksQ0FBQyxFQUFFLFVBQVUsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3pCLEVBQUU7QUFDRixDQUFDLEtBQUssQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRTtBQUMxQixFQUFFLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEVBQUUsQ0FBQyxDQUFDO0FBQy9DLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsVUFBVSxNQUFNLEVBQUUsSUFBSSxVQUFVLEtBQUssRUFBRSxJQUFJLENBQUMsQ0FBQyxHQUFHLFVBQVUsSUFBSSxVQUFVLENBQUM7QUFDL0csSUFBSSxDQUFDLENBQUM7QUFDTixFQUFFLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0FBQ3BCLEVBQUUsQ0FBQyxFQUFFLENBQUM7QUFDTixFQUFFLElBQUksQ0FBQyxFQUFFLElBQUksQ0FBQyxDQUFDLEVBQUUsRUFBRSxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRTtBQUN6RCxFQUFFO0FBQ0Y7QUFDQSxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsVUFBVSxDQUFDO0FBQ3pCLEVBQUM7QUFDRDtBQUNBO0FBQ0E7QUFDQSxlQUFlLENBQUMsU0FBUyxDQUFDLFVBQVUsR0FBRyxXQUFXO0FBQ2xELENBQUMsSUFBSSxDQUFDLENBQUM7QUFDUCxDQUFDLElBQUksS0FBSyxHQUFHLElBQUksS0FBSyxDQUFDLEdBQUcsRUFBRSxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7QUFDM0M7QUFDQTtBQUNBLENBQUMsSUFBSSxJQUFJLENBQUMsR0FBRyxJQUFJLElBQUksQ0FBQyxDQUFDLEVBQUU7QUFDekIsRUFBRSxJQUFJLEVBQUUsQ0FBQztBQUNUO0FBQ0EsRUFBRSxJQUFJLElBQUksQ0FBQyxHQUFHLElBQUksSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzFCLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUN4QjtBQUNBLEVBQUUsS0FBSyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLEVBQUU7QUFDbkMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDO0FBQ3JFLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUM7QUFDakUsR0FBRztBQUNILEVBQUUsTUFBTSxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFBRSxFQUFFLEVBQUU7QUFDMUIsR0FBRyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLElBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLFVBQVUsQ0FBQyxDQUFDO0FBQ3JFLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRSxJQUFJLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQyxDQUFDO0FBQzFFLEdBQUc7QUFDSCxFQUFFLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxD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Q0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLEVBQ1YsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUM7UUFDWixNQUFNLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUNiLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUNSLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxFQUNSLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDOztBQUlWLFFBQUEsTUFBTSxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFDcEMsUUFBQSxNQUFNLEVBQUUsR0FBRyxFQUFFLEdBQUcsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQztBQUNwQyxRQUFBLE1BQU0sRUFBRSxHQUFHLEVBQUUsR0FBRyxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBQ3BDLFFBQUEsTUFBTSxFQUFFLEdBQUcsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQzs7UUFJckMsSUFBSSxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxDQUFDLEVBQUUsR0FBRyxFQUFFLEdBQUcsQ0FBQyxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDO1FBQ2xELElBQUksQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsQ0FBQyxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUMsRUFBRSxHQUFHLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQztRQUNsRCxJQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUMsRUFBRSxHQUFHLEVBQUUsR0FBRyxDQUFDLEVBQUUsR0FBRyxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUM7QUFFbEQsUUFBQSxPQUFPLElBQUksQ0FBQztLQUNaO0lBQ0QsbUJBQW1CLENBQUMsQ0FBb0IsRUFBRSxLQUFhLEVBQUE7UUFDdEQsT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsRUFBRSxLQUFLLEdBQUcsQ0FBQyxDQUFDLENBQUM7S0FDcEM7QUFDRCxJQUFBLFNBQVMsQ0FBQyxLQUF3QixFQUFFLE1BQU0sR0FBRyxDQUFDLEVBQUE7QUFDN0MsUUFBQSxJQUFJLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUN2QixJQUFJLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUM7UUFDM0IsSUFBSSxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBRTNCLFFBQUEsT0FBTyxJQUFJLENBQUM7S0FDWjtBQUVELElBQUEsZ0JBQWdCLENBQUMsS0FBYSxFQUFBO1FBQzdCLE9BQU8sQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLEVBQUUsS0FBSyxFQUFFLElBQUksQ0FBQyxDQUFDO0FBQzVDLFFBQUEsT0FBTyxJQUFJLENBQUM7S0FDWjtJQUVELEtBQUssR0FBQTtRQUNKLE9BQU8sT0FBTyxDQUFDLEtBQUssQ0FBQyxJQUFJLEVBQUUsSUFBSSxPQUFPLEVBQUUsQ0FBQyxDQUFDO0tBQzFDO0lBQ0QsTUFBTSxHQUFBO0FBQ0wsUUFBQSxPQUFPLElBQUksQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztLQUN0RTtBQUNELElBQUEsWUFBWSxDQUFDLE1BQWUsRUFBQTtBQUMzQixRQUFBLE1BQU0sQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLEVBQ2YsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLEVBQ1YsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUM7UUFDWixNQUFNLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDakIsUUFBQSxNQUFNLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDeEQsUUFBQSxJQUFJLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUN0RCxRQUFBLElBQUksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQ3RELFFBQUEsSUFBSSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDdkQsUUFBQSxPQUFPLElBQUksQ0FBQztLQUNaO0FBQ0QsSUFBQSxZQUFZLENBQUMsTUFBZSxFQUFBO0FBQzNCLFFBQUEsTUFBTSxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsRUFDZixDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsRUFDVixD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LEVBQUUsQ0FBQyxFQUFBO0FBQ1osUUFBQSxJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsUUFBUSxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUMxQyxRQUFBLE9BQU8sSUFBSSxDQUFDO0tBQ1o7QUFDRCxJQUFBLElBQUksQ0FBQyxLQUFLLEVBQUE7QUFDVCxRQUFBLE1BQU0sQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxRQUFRLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDaEQsUUFBQSxPQUFPLENBQUMsQ0FBQztLQUNUO0lBQ0QsSUFBSSxDQUFDLEtBQUssRUFBRSxDQUFDLEVBQUE7QUFDWixRQUFBLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxRQUFRLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQzFDLFFBQUEsT0FBTyxJQUFJLENBQUM7S0FDWjtBQUNELElBQUEsSUFBSSxDQUFDLEtBQUssRUFBQTtBQUNULFFBQUEsTUFBTSxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLFFBQVEsR0FBRyxDQUFDLENBQUMsQ0FBQztBQUNoRCxRQUFBLE9BQU8sQ0FBQyxDQUFDO0tBQ1Q7QUFDRCxJQUFBLElBQUksQ0FBQyxLQUFLLEVBQUE7QUFDVCxRQUFBLE1BQU0sQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxRQUFRLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDaEQsUUFBQSxPQUFPLENBQUMsQ0FBQztLQUNUO0FBQ0QsSUFBQSxLQUFLLENBQUMsS0FBSyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUE7QUFDaEIsUUFBQSxLQUFLLElBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQztRQUN2QixJQUFJLENBQUMsS0FBSyxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDMUIsSUFBSSxD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TUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUN0QixNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3RCLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDdEIsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUN0QixNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3RCLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDdEIsUUFBQSxPQUFPLE1BQU0sQ0FBQztLQUNkO0FBRUQsSUFBQSxPQUFPLGNBQWMsQ0FBQyxVQUFzQixFQUFFLE1BQWdCLEVBQUE7UUFDN0QsTUFBTSxFQUFFLEdBQUcsVUFBVSxDQUFDLENBQUMsR0FBRyxVQUFVLENBQUMsQ0FBQyxDQUFDO1FBQ3ZDLE1BQU0sRUFBRSxHQUFHLFVBQVUsQ0FBQyxDQUFDLEdBQUcsVUFBVSxDQUFDLENBQUMsQ0FBQztRQUN2QyxNQUFNLEVBQUUsR0FBRyxVQUFVLENBQUMsQ0FBQyxHQUFHLFVBQVUsQ0FBQyxDQUFDLENBQUM7UUFDdkMsTUFBTSxFQUFFLEdBQUcsVUFBVSxDQUFDLENBQUMsR0FBRyxVQUFVLENBQUMsQ0FBQyxDQUFDO1FBQ3ZDLE1BQU0sRUFBRSxHQUFHLFVBQVUsQ0FBQyxDQUFDLEdBQUcsVUFBVSxDQUFDLENBQUMsQ0FBQztRQUN2QyxNQUFNLEVBQUUsR0FBRyxVQUFVLENBQUMsQ0FBQyxHQUFHLFVBQVUsQ0FBQyxDQUFDLENBQUM7UUFDdkMsTUFBTSxFQUFFLEdBQUcsVUFBVSxDQUFDLENBQUMsR0FBRyxVQUFVLENBQUMsQ0FBQyxDQUFDO1FBQ3ZDLE1BQU0sRUFBRSxHQUFHLFVBQVUsQ0FBQyxDQUFDLEdBQUcsVUFBVSxDQUFDLENBQUMsQ0FBQztRQUN2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RCxJQUFBLE9BQU8sT0FBTyxDQUFDLE1BQWUsRUFBRSxNQUFnQixFQUFBO0FBQy9DLFFBQUEsSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsRUFBRTtZQUNyQixPQUFPLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUMzRyxTQUFBO1FBQ0QsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUN0QixNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3RCLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDdEIsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUN0QixNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3RCLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDdEIsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUN0QixNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3RCLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDdEIsUUFBQSxPQUFPLE1BQU0sQ0FBQztLQUNkO0FBRUQsSUFBQSxPQUFPLGVBQWUs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QUMsQ0FBQyxDQUFDO1FBQzlDLE1BQU0sV0FBVyxHQUFHLEtBQUssQ0FBQyxDQUFDLEdBQUcsYUFBYSxDQUFDLENBQUMsQ0FBQztRQUU5QyxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLFdBQVcsQ0FBQztRQUNwQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLFdBQVcsQ0FBQztRQUNwQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLFdBQVcsQ0FBQztRQUNwQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLFdBQVcsQ0FBQztRQUNwQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLFdBQVcsQ0FBQztRQUNwQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLFdBQVcsQ0FBQztRQUNwQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLFdBQVcsQ0FBQztRQUNwQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLFdBQVcsQ0FBQztRQUNwQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLFdBQVcsQ0FBQztBQUVwQyxRQUFBLE9BQU8sTUFBTSxDQUFDO0tBQ2Q7QUFFRCxJQUFBLE9BQU8sUUFBUSxDQUFDLE1BQWUsRUFBRSxNQUFlLEVBQUE7QUFDL0MsUUFBQSxNQUFNLENBQUMsQ0FBQyxHQUFHLE9BQU8sQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLFlBQVksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRUMsZUFBYSxDQUFDLENBQUMsQ0FBQztBQUNuRyxRQUFBLE1BQU0sQ0FBQyxDQUFDLEdBQUcsT0FBTyxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsWUFBWSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFQSxlQUFhLENBQUMsQ0FBQyxDQUFDO0FBQ25HLFFBQUEsTUFBTSxDQUFDLENBQUMsR0FBRyxPQUFPLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxZQUFZLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUVBLGVBQWEsQ0FBQyxDQUFDLENBQUM7QUFDbkcsUUFBQSxPQUFPLE1BQU0sQ0FBQztLQUNkO0lBRUQsT0FBTyxlQUFlLENBQUMsTUFBZSxFQUFBO0FBQ3JDLFFBQUEsT0FBTyxDQUFDLFFBQVEsQ0FBQyxNQUFNLEVBQUVDLGVBQWEsQ0FBQyxDQUFDO0FBQ3hDLFFBQUEsT0FBTyxPQUFPLENBQUMsZ0JBQWdCLENBQUNBLGVBQWEsQ0FBQyxDQUFDO0tBQy9DO0FBRUQsSUFBQSxPQUFPLFdBQVcsQ0FBQyxNQUFlLEVBQUUsUUFBaUIsRUFBRSxNQUFlLEVBQUE7UUFDckUsTUFBTSxLQUFLLEdBQUcsT0FBTyxDQUFDLFFBQVEsQ0FBQyxNQUFNLEVBQUVDLGVBQWEsQ0FBQyxDQUFDO0FBRXRELFFBQUEsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLFFBQVEsQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDO0FBQ2xDLFFBQUEsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLFFBQVEsQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDO0FBQ2xDLFFBQUEsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLFFBQVEsQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDO0FBQ2xDLFFBQUEsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLFFBQVEsQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDO0FBQ2xDLFFBQUEsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLFFBQVEsQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDO0FBQ2xDLFFBQUEsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLFFBQVEsQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDO0FBQ2xDLFFBQUEsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLFFBQVEsQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDO0FBQ2xDLFFBQUEsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLFFBQVEsQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDO0FBQ2xDLFFBQUEsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLFFBQVEsQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDO0FBRWxDLFFBQUEsT0FBTyxNQUFNLENBQUM7S0FDZDtBQUVELElBQUEsT0FBTyxXQUFXLENBQUMsTUFBZSxFQUFFLE1BQWUsRUFBQTtRQUNsRCxNQUFNLEtBQUssR0FBRyxPQUFPLENBQUMsUUFBUSxDQUFDLE1BQU0sRUFBRUMsZUFBYSxDQUFDLENBQUM7QUFFdEQsUUFBQSxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUM7QUFDaEMsUUFBQSxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUM7QUFDaEMsUUFBQSxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUM7QUFDaEMsUUFBQSxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUM7QUFDaEMsUUFBQSxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUM7QUFDaEMsUUFBQSxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUM7QUFDaEMsUUFBQSxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUM7QUFDaEMsUUFBQSxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUM7QUFDaEMsUUFBQSxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUM7QUFFaEMsUUFBQSxPQUFPLE1BQU0sQ0FBQztLQUNkO0FBRUQsSUFBQSxPQUFPLFFBQVEsQ0FBQyxJQUFhLEVBQUUsS0FBYyxFQUFFLE1BQWUsRUFBQTtBQUM3RCxRQUFBLE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2pGLFFBQUEsTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDakYsUUFBQSxNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUVqRixRQUFBLE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2pGLFFBQUEsTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDakYsUUFBQSxNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUVqRixRQUFBLE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2pGLFFBQUEsTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDakYsUUFBQSxNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUVqRixRQUFBLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxXQUFXLENBQUM7QUFDeEIsUUFBQSxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsV0FBVyxDQUFDO0FBQ3hCLFFBQUEsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLFdBQVcsQ0FBQztBQUN4QixRQUFBLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxXQUFXLENBQUM7QUFDeEIsUUFBQSxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsV0FBVyxDQUFDO0FBQ3hCLFFBQUEsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLFdBQVcsQ0FBQztBQUN4QixRQUFBLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxXQUFXLENBQUM7QUFDeEIsUUFBQSxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsV0FBVyxDQUFDO0FBQ3hCLFFBQUEsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLFdBQVcsQ0FBQztBQUN4QixRQUFBLE9BQU8sTUFBTSxDQUFDO0tBQ2Q7QUFFRCxJQUFBLE9BQU8sR0FBRyxDQUFDLElBQWEsRUFBRSxLQUFjLEVBQUUsTUFBZSxFQUFBO0FBQ3hELFFBQUEsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDL0IsUUFBQSxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUMvQixRQUFBLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQy9CLFFBQUEsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDL0IsUUFBQSxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUMvQixRQUFBLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQy9CLFFBQUEsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDL0IsUUFBQSxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUMvQixRQUFBLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQy9CLFFBQUEsT0FBTyxNQUFNLENBQUM7S0FDZDtBQUVELElBQUEsT0FBTyxRQUFRLENBQUMsSUFBYSxFQUFFLEtBQWMsRUFBRSxNQUFlLEVBQUE7QUFDN0QsUUFBQSxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUMvQixRQUFBLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQy9CLFFBQUEsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDL0IsUUFBQSxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUMvQixRQUFBLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQy9CLFFBQUEsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDL0IsUUFBQSxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUMvQixRQUFBLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQy9CLFFBQUEsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDL0IsUUFBQSxPQUFPLE1BQU0sQ0FBQztLQUNkO0FBRUQsSUFBQSxPQUFPLGdCQUFnQixDQUFDLE1BQWUsRUFBRSxTQUFrQixFQUFFLE1BQWUsRUFBQTtBQUMzRSxRQUFBLE1BQU0sRUFBRSxHQUFHLFNBQVMsQ0FBQyxDQUFDLENBQUM7QUFDdkIsUUFBQSxNQUFNLEVBQUUsR0FBRyxTQUFTLENBQUMsQ0FBQyxDQUFDO0FBQ3ZCLFFBQUEsTUFBTSxFQUFFLEdBQUcsU0FBUyxDQUFDLENBQUMsQ0FBQztRQUV2QixNQUFNLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQztRQUMzRCxNQUFNLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQztRQUMzRCxNQUFNLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUUzRCxRQUFBLE1BQU0sQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ2IsUUFBQSxNQUFNLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNiLFFBQUEsTUFBTSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDYixRQUFBLE9BQU8sTUFBTSxDQUFDO0tBQ2Q7QUFFRCxJQUFBLE9BQU8sZ0JBQWdCLENBQUMsTUFBZSxFQUFFLE1BQWMsRUFBRSxNQUFlLEVBQUE7UUFDdkUsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUM7UUFDL0IsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUM7UUFDL0IsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUM7UUFDL0IsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUM7UUFDL0IsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUM7UUFDL0IsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUM7UUFDL0IsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUM7UUFDL0IsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUM7UUFDL0IsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDL0IsUUFBQSxPQUFPLE1BQU0sQ0FBQztLQUNkO0FBRUQsSUFBQSxPQUFPLGVBQWUsQ0FBQyxNQUFlLEVBQUUsS0FBYyxFQUFFLE1BQWUsRUFBQTtBQUN0RSxRQUFBLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQztBQUNoQyxRQUFBLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQztBQUNoQyxRQUFBLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQztBQUNoQyxRQUFBLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQztBQUNoQyxRQUFBLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQztBQUNoQyxRQUFBLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQztBQUNoQyxRQUFBLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQztBQUNoQyxRQUFBLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQztBQUNoQyxRQUFBLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQztBQUVoQyxRQUFBLE9BQU8sTUFBTSxDQUFDO0tBQ2Q7QUFFRCxJQUFBLE9BQU8sTUFBTSxDQUFDLE1BQWUsRUFBRSxNQUFlLEVBQUE7UUFDN0MsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3ZCLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUN2QixNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDdkIsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3ZCLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUN2QixNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDdkIsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3ZCLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUN2QixNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDdkIsUUFBQSxPQUFPLE1BQU0sQ0FBQztLQUNkO0FBRUQsSUFBQSxPQUFPLFNBQVMsQ0FBQyxNQUFlLEVBQUUsTUFBZSxFQUFBO0FBQ2hELFFBQUEsTUFBTSxXQUFXLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzlCLFFBQUEsTUFBTSxXQUFXLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzlCLFFBQUEsTUFBTSxXQUFXLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzlCLFFBQUEsTUFBTSxXQUFXLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzlCLFFBQUEsTUFBTSxXQUFXLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzlCLFFBQUEsTUFBTSxXQUFXLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzlCLFFBQUEsTUFBTSxXQUFXLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzlCLFFBQUEsTUFBTSxXQUFXLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzlCLFFBQUEsTUFBTSxXQUFXLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBRTlCLFFBQUEsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLFdBQVcsQ0FBQztBQUN4QixRQUFBLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxXQUFXLENBQUM7QUFDeEIsUUFBQSxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsV0FBVyxDQUFDO0FBQ3hCLFFBQUEsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLFdBQVcsQ0FBQztBQUN4QixRQUFBLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxXQUFXLENBQUM7QUFDeEIsUUFBQSxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsV0FBVyxDQUFDO0FBQ3hCLFFBQUEsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLFdBQVcsQ0FBQztBQUN4QixRQUFBLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxXQUFXLENBQUM7QUFDeEIsUUFBQSxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsV0FBVyxDQUFDO0FBQ3hCLFFBQUEsT0FBTyxNQUFNLENBQUM7S0FDZDtBQUVELElBQUEsT0FBTyxHQUFHLENBQUMsTUFBZSxFQUFFLE1BQWUsRUFBQTtBQUMxQyxRQUFBLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2hDLFFBQUEsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDaEMsUUFBQSxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNoQyxRQUFBLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2hDLFFBQUEsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDaEMsUUFBQSxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNoQyxRQUFBLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2hDLFFBQUEsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDaEMsUUFBQSxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUVoQyxRQUFBLE9BQU8sTUFBTSxDQUFDO0tBQ2Q7SUFFRCxPQUFPLFdBQVcsQ0FBQyxNQUFlLEVBQUE7QUFDakMsUUFBQSxNQUFNLEdBQUcsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDdEIsUUFBQSxNQUFNLEdBQUcsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDdEIsUUFBQSxNQUFNLEdBQUcsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDdEIsUUFBQSxNQUFNLEdBQUcsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDdEIsUUFBQSxNQUFNLEdBQUcsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDdEIsUUFBQSxNQUFNLEdBQUcsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDdEIsUUFBQSxNQUFNLEdBQUcsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDdEIsUUFBQSxNQUFNLEdBQUcsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDdEIsUUFBQSxNQUFNLEdBQUcsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFFdEIsUUFBQSxPQUFPLEdBQUcsSUFBSSxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUMsR0FBRyxHQUFHLElBQUksR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDLEdBQUcsR0FBRyxJQUFJLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQyxDQUFDO0tBQ3JHO0FBRUQsSUFBQSxPQUFPLE9BQU8sQ0FBQyxNQUFlLEVBQUUsTUFBZSxFQUFBO0FBQzlDLFFBQUEsTUFBTSxHQUFHLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3RCLFFBQUEsTUFBTSxHQUFHLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3RCLFFBQUEsTUFBTSxHQUFHLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3RCLFFBQUEsTUFBTSxHQUFHLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3RCLFFBQUEsTUFBTSxHQUFHLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3RCLFFBQUEsTUFBTSxHQUFHLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3RCLFFBQUEsTUFBTSxHQUFHLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3RCLFFBQUEsTUFBTSxHQUFHLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3RCLFFBQUEsTUFBTSxHQUFHLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBRXRCLE1BQU0sV0FBVyxHQUFHLE9BQU8sQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDLENBQUM7O1FBR2hELElBQUksSUFBSSxDQUFDLEdBQUcsQ0FBQyxXQUFXLENBQUMsSUFBSSxLQUFLLENBQUMsU0FBUyxFQUFFO0FBQzdDLFlBQUEsTUFBTSxJQUFJLEtBQUssQ0FBQywwQkFBMEIsQ0FBQyxDQUFDO0FBQzVDLFNBQUE7O1FBR0QsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQztRQUNsQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDO1FBQ2xDLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUM7UUFDbEMsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQztRQUNsQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDO1FBQ2xDLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUM7UUFDbEMsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQztRQUNsQyxNQUFNLENB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QUFFLE1BQWUsRUFBRSxNQUFlLEVBQUE7QUFDekUsUUFBQSxNQUFNLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDdkMsUUFBQSxNQUFNLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDdkMsUUFBQSxNQUFNLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDdkMsUUFBQSxNQUFNLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFFdkMsUUFBQSxPQUFPLE1BQU0sQ0FBQztLQUNkO0lBRUQsT0FBTyxLQUFLLENBQUMsS0FBYyxFQUFFLEdBQVksRUFBRSxHQUFZLEVBQUUsTUFBZSxFQUFBO0FBQ3ZFLFFBQUEsTUFBTSxDQUFDLEdBQUcsS0FBSyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzdDLFFBQUEsTUFBTSxDQUFDLEdBQUcsS0FBSyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzdDLFFBQUEsTUFBTSxDQUFDLEdBQUcsS0FBSyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzdDLFFBQUEsTUFBTSxDQUFDLEdBQUcsS0FBSyxDQUFDLEtBQUssQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLEdB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QUFLLENBQUMsQ0FBQyxFQUNaLEVBQUUsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDO0FBRWQsUUFBQSxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksRUFBRSxHQUFHLEVBQUUsQ0FBQyxJQUFJLEVBQUUsQ0FBQztRQUM3QixFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxFQUFFLEdBQUcsRUFBRSxJQUFJLEVBQUUsQ0FBQztRQUN2QixFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxFQUFFLEdBQUcsRUFBRSxJQUFJLEVBQUUsQ0FBQztBQUN2QixRQUFBLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7UUFFVixFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxFQUFFLEdBQUcsRUFBRSxJQUFJLEVBQUUsQ0FBQztBQUN2QixRQUFBLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxFQUFFLEdBQUcsRUFBRSxDQUFDLElBQUksRUFBRSxDQUFDO1FBQzdCLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEVBQUUsR0FBRyxFQUFFLElBQUksRUFBRSxDQUFDO0FBQ3ZCLFFBQUEsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUVWLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEVBQUUsR0FBRyxFQUFFLElBQUksRUFBRSxDQUFDO1FBQ3ZCLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEVBQUUsR0FBRyxFQUFFLElBQUksRUFBRSxDQUFDO0FBQ3ZCLFFBQUEsRUFBRSxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLEVBQUUsR0FBRyxFQUFFLENBQUMsSUFBSSxFQUFFLENBQUM7QUFDOUIsUUFBQSxFQUFFLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBRVgsUUFBQSxFQUFFLENBQUMsRUFBRSxDQUFDLEdBQUcsUUFBUSxDQUFDLENBQUMsQ0FBQztBQUNwQixR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LENBQUMsRUFDVixNQUFNLENBQUMsRUFBRSxDQUFDLEVBQ1YsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUNULE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFDVCxNQUFNLENBQUMsRUFBRSxDQUFDLEVBQ1YsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUNWLENBQUM7QUFDRixTQUFBO1FBQ0QsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUN0QixNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3RCLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDdEIsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUN0QixNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3RCLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDdEIsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUN0QixNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3RCLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDdEIsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUN0QixNQUFNLENBQUMsRUFBRSxDQUFDLEdBQUcsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ3hCLE1BQU0sQ0FBQyxFQUFFLENBQUMsR0FBRyxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDeEIsTUFBTSxDQUFDLEVBQUUsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUN4QixNQUFNLENBQUMsRUFBRSxDQUFDLEdBQUcsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ3hCLE1BQU0sQ0FBQyxFQUFFLENBQUMsR0FBRyxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDeEIsTUFBTSxDQUFDLEVBQUUsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUN4QixRQUFBLE9BQU8sTUFBTSxDQUFDO0tBQ2Q7QUFFRCxJQUFBLE9BQU8sb0JBQW9CLENBQUMsTUFBZ0IsRUFBRSxNQUFlLEVBQUE7UUFDNUQsT0FBTyxPQUFPLENBQUMsS0FBSyxDQUFDLE1BQU0sRUFBRSxNQUFNLENBQUMsQ0FBQztLQUNyQztBQUVELElBQUEsT0FBTyxpQkFBaUIsQ0FBQyxNQUFnQixFQUFFLE1BQWUsRUFBQTtBQUN6RCxRQUFBLElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLEVBQUU7QUFDckIsWUFBQSxPQUFPLElBQUksT0FBTyxDQUNqQixNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQ1QsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUNULE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFDVCxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQ1QsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUNULE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFDVCxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQ1QsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUNULE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFDVCxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQ1QsTUFBTSxDQUFDLEVBQUUsQ0FBQyxFQUNWLE1BQU0sQ0FBQyxFQUFFLENBQUMsRUFDVixNQUFNLENBQUMsRUFBRSxDQUFDLEVBQ1YsTUFBTSxDQUFDLEVBQUUsQ0FBQyxFQUNWLE1BQU0sQ0FBQyxFQUFFLENBQUMsRUFDVixNQUFNLENBQUMsRUFBRSxDQUFDLENBQ1YsQ0FBQztBQUNGLFNBQUE7UUFDRCxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3RCLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDdEIsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUN0QixNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ3ZCLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDdEIsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUN0QixNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3RCLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDdkIsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUN0QixNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3RCLE1BQU0sQ0FBQyxFQUFFLENBQUMsR0FBRyxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDeEIsTUFBTSxDQUFDLEVBQUUsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUN4QixNQUFNLENBQUMsRUFBRSxDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3ZCLE1BQU0sQ0FBQyxFQUFFLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDdkIsTUFBTSxDQUFDLEVBQUUsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUN4QixNQUFNLENBQUMsRUFBRSxDQUFDLEdBQUcsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ3hCLFFBQUEsT0FBTyxNQUFNLENBQUM7S0FDZDtBQUVELElBQUEsT0FBTyx1QkFBdUIsQ0FBQyxRQUFpQixFQUFFLFdBQW9CLEVB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O1FBQ25DLE1BQU0sRUFBRSxHQUFHLFFBQVEsQ0FBQyxDQUFDLEdBQUcsUUFBUSxDQUFDLENBQUMsQ0FBQztRQUNuQyxNQUFNLEVBQUUsR0FBRyxRQUFRLENBQUMsQ0FBQyxHQUFHLFFBQVEsQ0FBQyxDQUFDLENBQUM7UUFDbkMsTUFBTSxFQUFFLEdBQUcsUUFBUSxDQUFDLENBQUMsR0FBRyxRQUFRLENBQUMsQ0FBQyxDQUFDO1FBQ25DLE1BQU0sRUFBRSxHQUFHLFFBQVEsQ0FBQyxDQUFDLEdBQUcsUUFBUSxDQUFDLENBQUMsQ0FBQztRQUNuQyxNQUFNLEVBQUUsR0FBRyxRQUFRLENBQUMsQ0FBQyxHQUFHLFFBQVEsQ0FBQyxDQUFDLENBQUM7UUFDbkMsTUFBTSxFQUFFLEdBQUcsUUFBUSxDQUFDLENBQUMsR0FBRyxRQUFRLENBQUMsQ0FBQyxDQUFDO1FBQ25DLE1BQU0sRUFBRSxHQUFHLFFBQVEsQ0FBQyxDQUFDLEdBQUcsUUFBUSxDQUFDLENBQUMsQ0FBQztRQUNuQyxNQUFNLEVBQUUsR0FBRyxRQUFRLENBQUMsQ0FBQyxHQUFHLFFBQVEsQ0FBQyxDQUFDLENBQUM7UUFFbkMsTUFBTSxHQUFHLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO1FBQzlCLE1BQU0sR0FBRyxHQUFHLEdBQUcsSUFBSSxFQUFFLEdBQUcsRUFBRSxDQUFDLENBQUM7UUFDNUIsTUFBTSxHQUFHLEdBQUcsR0FBRyxJQUFJLEVBQUUsR0FBRyxFQUFFLENBQUMsQ0FBQztRQUU1QixNQUFNLEdBQUcsR0FBRyxHQUFHLElBQUksRUFBRSxHQUFHLEVBQUUsQ0FBQyxDQUFDO1FBQzVCLE1BQU0sR0FBRyxHQUFHLENBQUMsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO1FBQy9CLE1BQU0sR0FBRyxHQUFHLEdBQUcsSUFBSSxFQUFFLEdBQUcsRUFBRSxDQUFDLENBQUM7UUFFNUIsTUFBTSxHQUFHLEdBQUcsR0FBRyxJQUFJLEVBQUUsR0FBRyxFQUFFLENBQUMsQ0FBQztRQUM1QixNQUFNLEdBQUcsR0FBRyxHQUFHLElBQUksRUFBRSxHQUFHLEVBQUUsQ0FBQyxDQUFDO1FBQzVCLE1BQU0sR0FBRyxHQUFHLENBQUMsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO0FBRS9CLFFBQUEsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxNQUFNLENBQUM7QUFDekIsUUFBQSxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLE1BQU0sQ0FBQztBQUN6QixRQUFBLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsTUFBTSxDQUFDO0FBQ3pCLFFBQUEsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNoQixRQUFBLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsTUFBTSxDQUFDO0FBQ3pCLFFBQUEsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxNQUFNLENBQUM7QUFDekIsUUFBQSxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLE1BQU0sQ0FBQztBQUN6QixRQUFBLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDaEIsUUFBQSxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLE1BQU0sQ0FBQztBQUN6QixRQUFBLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsTUFBTSxDQUFDO0FBQ3pCLFFBQUEsTUFBTSxDQUFDLEVBQUUsQ0FBQyxHQUFHLEdBQUcsR0FBRyxNQUFNLENBQUM7QUFDMUIsUUFBQSxNQUFNLENBQUMsRUFBRSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2pCLFFBQUEsTUFBTSxDQUFDLEVBQUUsQ0FBQyxHQUFHLFdBQVcsQ0FBQyxDQUFDLENBQUM7QUFDM0IsUUFBQSxNQUFNLENBQUMsRUFBRSxDQUFDLEdBQUcsV0FBVyxDQUFDLENBQUMsQ0FBQztBQUMzQixRQUFBLE1BQU0sQ0FBQyxFQUFFLENB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QUMsQ0FBQyxHQUFHLElBQUksS0FBSyxLQUFLLEdBQUcsSUFBSSxDQUFDLENBQUM7QUFDdEMsUUFBQSxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxJQUFJLEtBQUssR0FBRyxHQUFHLE1BQU0sQ0FBQyxDQUFDO0FBRXRDLFFBQUEsTUFBTSxDQUFDLEdBQUcsQ0FBQyxLQUFLLEdBQUcsSUFBSSxLQUFLLEtBQUssR0FBRyxJQUFJLENBQUMsQ0FBQztBQUMxQyxRQUFBLE1BQU0sQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLE1BQU0sS0FBSyxHQUFHLEdBQUcsTUFBTSxDQUFDLENBQUM7UUFDMUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxHQUFHLElBQUksR0FBRyxHQUFHLElBQUksQ0FBQyxDQUFDO0FBQzlCLFFBQUEsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsR0FBRyxJQUFJLEtBQUssR0FBRyxHQUFHLElBQUksQ0FBQyxDQUFDO0FBRXZDLFFBQUEsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNkLFFBQUEsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNkLFFBQUEsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNkLFFBQUEsTUFBTSxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNmLFFBQUEsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNkLFFBQUEsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNkLFFBQUEsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNkLFFBQUEsTUFBTSxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNmLFFBQUEsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNkLFFBQUEsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNkLFFBQUEsTUFBTSxDQUFDLEVBQUUsQ0FBQyxH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TUFBTSxDQUFDLENBQUMsQ0FBQztnQkFDVCxNQUFNLENBQUMsQ0FBQyxDQUFDO2dCQUNULE1BQU0sQ0FBQyxDQUFDLENBQUM7Z0JBQ1QsTUFBTSxDQUFDLENBQUMsQ0FBQztnQkFDVCxNQUFNLENBQUMsQ0FBQyxDQUFDO2dCQUNULE1BQU0sQ0FBQyxDQUFDLENBQUM7Z0JBQ1QsTUFBTSxDQUFDLENBQUMsQ0FBQztnQkFDVCxNQUFNLENBQUMsQ0FBQyxDQUFDO2dCQUNULE1BQU0sQ0FBQyxDQUFDLENBQUM7Z0JBQ1QsTUFBTSxDQUFDLENBQUMsQ0FBQztnQkFDVCxNQUFNLENBQUMsRUFBRSxDQUFDO2dCQUNWLE1BQU0sQ0FBQyxFQUFFLENBQUM7Z0JBQ1YsTUFBTSxDQUFDLEVBQUUsQ0FBQztnQkFDVixNQUFNLENBQUMsRUFBRSxDQUFDO2dCQUNWLE1BQU0sQ0FBQyxFQUFFLENBQUM7Z0JBQ1YsTUFBTSxDQUFDLEVBQUUsQ0FBQzthQUNWLENBQUM7QUFDRixTQUFBO1FBQ0QsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUN0QixNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3RCLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDdEIsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUN0QixNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3RCLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDdEIsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUN0QixNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3RCLE1BQU0sQ0FBQyxDQUFDLENB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VyxHQUFHLEtBQUssQ0FBQyxDQUFDLEdBQUcsYUFBYSxDQUFDLENBQUMsQ0FBQztRQUU5QyxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLFdBQVcsQ0FBQztRQUNwQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLFdBQVcsQ0FBQztRQUNwQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLFdBQVcsQ0FBQztRQUNwQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBRXRCLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsV0FBVyxDQUFDO1FBQ3BDLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsV0FBVyxDQUFDO1FBQ3BDLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsV0FBVyxDQUFDO1FBQ3BDLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFFdEIsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxXQUFXLENBQUM7UUFDcEMsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxXQUFXLENBQUM7UUFDcEMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxFQUFFLENBQUMsR0FBRyxXQUFXLENBQUM7UUFDdEMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUV4QixNQUFNLENBQUMsRUFBRSxDQUFDLEdBQUcsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ3hCLE1BQU0sQ0FBQyxFQUFFLENBQUMsR0FBRyxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDeEIsTUFBTSxDQUFDLEVBQUUsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUN4QixNQUFNLENBQUMsRUFBRSxDQUFDLEdBQUcsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBRXhCLFFBQUEsT0FBTyxNQUFNLENBQUM7S0FDZDtBQUVELElBQUEsT0FBTyxRQUFRLENBQUMsTUFBZSxFQUFFLE1BQWUsRUFBQTtBQUMvQyxRQUFBLE1BQU0sQ0FBQyxDQUFDLEdBQUcsT0FBTyxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsWUFBWSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFQyxlQUFhLENBQUMsQ0FBQyxDQUFDO0FBQ25HLFFBQUEsTUFBTSxDQUFDLENBQUMsR0FBRyxPQUFPLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxZQUFZLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUVBLGVBQWEsQ0FBQyxDQUFDLENBQUM7QUFDbkcsUUFBQSxNQUFNLENBQUMsQ0FBQyxHQUFHLE9BQU8sQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLFlBQVksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxFQUFFLENBQUMsRUFBRUEsZUFBYSxDQUFDLENBQUMsQ0FBQztBQUNwRyxRQUFBLE9BQU8sTUFBTSxDQUFDO0tBQ2Q7SUFFRCxPQUFPLGVBQWUsQ0FBQyxNQUFlLEVBQUE7QUFDckMsUUFBQSxPQUFPLENBQUMsUUFBUSxDQUFDLE1BQU0sRUFBRUMsZUFBYSxDQUFDLENBQUM7QUFDeEMsUUFBQSxPQUFPLE9BQU8sQ0FBQyxnQkFBZ0IsQ0FBQ0EsZUFBYSxDQUFDLENBQUM7S0FDL0M7QUFFRCxJQUFBLE9BQU8sV0FBVyxDQUFDLE1BQWUsRUFBRSxRQUFpQixFQUFFLE1BQWUsRUFBQTtRQUNyRSxNQUFNLEtBQUssR0FBRyxPQUFPLENBQUMsUUFBUSxDQUFDLE1BQU0sRUFBRUMsZUFBYSxDQUFDLENBQUM7QUFFdEQsUUFBQSxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsUUFBUSxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUM7QUFDbEMsUUFBQSxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsUUFBUSxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUM7QUFDbEMsUUFBQSxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsUUFBUSxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUM7UUFDbEMsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUV0QixRQUFBLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxRQUFRLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQztBQUNsQyxRQUFBLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxRQUFRLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQztBQUNsQyxRQUFBLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxRQUFRLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQztRQUNsQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBRXRCLFFBQUEsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLFFBQVEsQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDO0FBQ2xDLFFBQUEsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLFFBQVEsQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDO0FBQ2xDLFFBQUEsTUFBTSxDQUFDLEVBQUUsQ0FBQyxHQUFHLFFBQVEsQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDO1FBQ25DLE1BQU0sQ0FBQyxFQUFFLENBQUMsR0FBRyxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUM7UUFFeEIsTUFBTSxDQUFDLEVBQUUsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUN4QixNQUFNLENBQUMsRUFBRSxDQUFDLEdBQUcsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ3hCLE1BQU0sQ0FBQyxFQUFFLENBQUMsR0FBRyxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDeEIsTUFBTSxDQUFDLEVBQUUsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUV4QixRQUFBLE9BQU8sTUFBTSxDQUFDO0tBQ2Q7QUFFRCxJQUFBLE9BQU8sV0FBVyxDQUFDLE1BQWUsRUFBRSxNQUFrQixFQUFBO1FBQ3JELE1BQU0sS0FBSyxHQUFHLE9BQU8sQ0FBQyxRQUFRLENBQUMsTUFBTSxFQUFFQyxlQUFhLENBQUMsQ0FBQztBQUV0RCxRQUFBLE1BQU0sR0FBRyxHQUFHLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDO0FBQ3hCLFFBQUEsTUFBTSxHQUFHLEdBQUcsQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUM7QUFDeEIsUUFBQSxNQUFNLEdBQUcsR0FBRyxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQztRQUV4QixNQUFNLElBQUksR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO1FBQzdCLE1BQU0sSUFBSSxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7UUFDN0IsTUFBTSxJQUFJLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztRQUM3QixNQUFNLElBQUksR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO1FBQzdCLE1BQU0sSUFBSSxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7UUFDN0IsTUFBTSxJQUFJLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztRQUM3QixNQUFNLElBQUksR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO1FBQzdCLE1BQU0sSUFBSSxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7UUFDN0IsTUFBTSxJQUFJLEdBQUcsTUFBTSxDQUFDLEVBQUUsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUU5QixRQUFBLE1BQU0sS0FBSyxHQUFHLElBQUksR0FBRyxJQUFJLEdBQUcsSUFBSSxDQUFDO1FBQ2pDLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUVWLElBQUksS0FBSyxHQUFHLENBQUMsRUFBRTtZQUNkLENBQUMsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUssR0FBRyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDL0IsWUFBQSxNQUFNLENBQUMsQ0FBQyxHQUFHLElBQUksR0FBRyxDQUFDLENBQUM7WUFDcEIsTUFBTSxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksR0FBRyxJQUFJLElBQUksQ0FBQyxDQUFDO1lBQzdCLE1BQU0sQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLEdBQUcsSUFBSSxJQUFJLENBQUMsQ0FBQztZQUM3QixNQUFNLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxHQUFHLElBQUksSUFBSSxDQUFDLENBQUM7QUFDN0IsU0FBQTtBQUFNLGFBQUEsSUFBSSxJQUFJLEdBQUcsSUFBSSxJQUFJLElBQUksR0FBRyxJQUFJLEVBQUU7QUFDdEMsWUFBQSxDQUFDLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLEdBQUcsSUFBSSxHQUFHLElBQUksR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7WUFDNUMsTUFBTSxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksR0FBRyxJQUFJLElBQUksQ0FBQyxDQUFDO0FBQzdCLFlBQUEsTUFBTSxDQUFDLENBQUMsR0FBRyxJQUFJLEdBQUcsQ0FBQyxDQUFDO1lBQ3BCLE1BQU0sQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLEdBQUcsSUFBSSxJQUFJLENBQUMsQ0FBQztZQUM3QixNQUFNLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxHQUFHLElBQUksSUFBSSxDQUFDLENBQUM7QUFDN0IsU0FBQTthQUFNLElBQUksSUFBSSxHQUFHLElBQUksRUFBRTtBQUN2QixZQUFBLENBQUMsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsR0FBRyxJQUFJLEdBQUcsSUFBSSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUM1QyxNQUFNLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxHQUFHLElBQUksSUFBSSxDQUFDLENBQUM7WUFDN0IsTUFBTSxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksR0FBRyxJQUFJLElBQUksQ0FBQyxDQUFDO0FBQzdCLFlBQUEsTUFBTSxDQUFDLENBQUMsR0FBRyxJQUFJLEdBQUcsQ0FBQyxDQUFDO1lBQ3BCLE1BQU0sQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLEdBQUcsSUFBSSxJQUFJLENBQUMsQ0FBQztBQUM3QixTQUFBO0FBQU0sYUFBQTtBQUNOLFlBQUEsQ0FBQyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksR0FBRyxJQUFJLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQzVDLE1BQU0sQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLEdBQUcsSUFBSSxJQUFJLENBQUMsQ0FBQztZQUM3QixNQUFNLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxHQUFHLElBQUksSUFBSSxDQUFDLENBQUM7WUFDN0IsTUFBTSxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksR0FBRyxJQUFJLElBQUksQ0FBQyxDQUFDO0FBQzdCLFlBQUEsTUFBTSxDQUFDLENBQUMsR0FBRyxJQUFJLEdBQUcsQ0FBQyxDQUFDO0FBQ3BCLFNBQUE7QUFDRCxRQUFBLE9BQU8sTUFBTSxDQUFDO0tBQ2Q7QUFFRCxJQUFBLE9BQU8sUUFBUSxDQUFDLElBQWEsRUFBRSxLQUFjLEVBQUUsTUFBZSxFQUFBO0FBQzdELFFBQUEsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3RCLFFBQUEsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3RCLFFBQUEsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3RCLFFBQUEsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3RCLFFBQUEsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3RCLFFBQUEsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3RCLFFBQUEsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3RCLFFBQUEsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3RCLFFBQUEsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3RCLFFBQUEsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3RCLFFBQUEsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ3hCLFFBQUEsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ3hCLFFBQUEsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ3hCLFFBQUEsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ3hCLFFBQUEsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ3hCLFFBQUEsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBRXhCLFFBQUEsTUFBTSxNQUFNLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3hCLFFBQUEsTUFBTSxNQUFNLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3hCLFFBQUEsTUFBTSxNQUFNLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3hCLFFBQUEsTUFBTSxNQUFNLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3hCLFFBQUEsTUFBTSxNQUFNLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3hCLFFBQUEsTUFBTSxNQUFNLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3hCLFFBQUEsTUFBTSxNQUFNLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3hCLFFBQUEsTUFBTSxNQUFNLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3hCLFFBQUEsTUFBTSxNQUFNLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3hCLFFBQUEsTUFBTSxNQUFNLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3hCLFFBQUEsTUFBTSxPQUFPLEdBQUcsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQzFCLFFBQUEsTUFBTSxPQUFPLEdBQUcsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQzFCLFFBQUEsTUFBTSxPQUFPLEdBQUcsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQzFCLFFBQUEsTUFBTSxPQUFPLEdBQUcsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQzFCLFFBQUEsTUFBTSxPQUFPLEdBQUcsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQzFCLFFBQUEsTUFBTSxPQUFPLEdBQUcsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBRTFCLFFBQUEsTUFBTSxXQUFXLEdBQUcsS0FBSyxHQUFHLE1BQU0sR0FBRyxLQUFLLEdBQUcsTUFBTSxHQUFHLEtBQUssR0FBRyxNQUFNLEdBQUcsTUFBTSxHQUFHLE1BQU0sQ0FBQztBQUN2RixRQUFBLE1BQU0sV0FBVyxHQUFHLEtBQUssR0FBRyxNQUFNLEdBQUcsS0FBSyxHQUFHLE1BQU0sR0FBRyxLQUFLLEdBQUcsTUFBTSxHQUFHLE1BQU0sR0FBRyxNQUFNLENBQUM7QUFDdkYsUUFBQSxNQUFNLFdBQVcsR0FBRyxLQUFLLEdBQUcsTUFBTSxHQUFHLEtBQUssR0FBRyxNQUFNLEdBQUcsTUFBTSxHQUFHLE1BQU0sR0FBRyxNQUFNLEdBQUcsTUFBTSxDQUFDO0FBQ3hGLFFBQUEsTUFBTSxXQUFXLEdBQUcsS0FBSyxHQUFHLE1BQU0sR0FBRyxLQUFLLEdBQUcsTUFBTSxHQUFHLE1BQU0sR0FBRyxNQUFNLEdBQUcsTUFBTSxHQUFHLE1BQU0sQ0FBQztBQUV4RixRQUFBLE1BQU0sV0FBVyxHQUFHLEtBQUssR0FBRyxNQUFNLEdBQUcsS0FBSyxHQUFHLE1BQU0sR0FBRyxLQUFLLEdBQUcsTUFBTSxHQUFHLE1BQU0sR0FBRyxNQUFNLENBQUM7QUFDdkYsUUFBQSxNQUFNLFdBQVcsR0FBRyxLQUFLLEdBQUcsTUFBTSxHQUFHLEtBQUssR0FBRyxNQUFNLEdBQUcsS0FBSyxHQUFHLE1BQU0sR0FBRyxNQUFNLEdBQUcsTUFBTSxDQUFDO0FBQ3ZGLFFBQUEsTUFBTSxXQUFXLEdBQUcsS0FBSyxHQUFHLE1BQU0sR0FBRyxLQUFLLEdBQUcsTUFBTSxHQUFHLE1BQU0sR0FBRyxNQUFNLEdBQUcsTUFBTSxHQUFHLE1BQU0sQ0FBQztBQUN4RixRQUFBLE1BQU0sV0FBVyxHQUFHLEtBQUssR0FBRyxNQUFNLEdBQUcsS0FBSyxHQUFHLE1BQU0sR0FBRyxNQUFNLEdBQUcsTUFBTSxHQUFHLE1BQU0sR0FBRyxNQUFNLENBQUM7QUFFeEYsUUFBQSxNQUFNLFdBQVcsR0FBRyxLQUFLLEdBQUcsTUFBTSxHQUFHLEtBQUssR0FBRyxNQUFNLEdBQUcsS0FBSyxHQUFHLE9BQU8sR0FBRyxNQUFNLEdBQUcsT0FBTyxDQUFDO0FBQ3pGLFFBQUEsTUFBTSxXQUFXLEdBQUcsS0FBSyxHQUFHLE1BQU0sR0FBRyxLQUFLLEdBQUcsTUFBTSxHQUFHLEtBQUssR0FBRyxPQUFPLEdBQUcsTUFBTSxHQUFHLE9BQU8sQ0FBQztBQUN6RixRQUFBLE1BQU0sV0FBVyxHQUFHLEtBQUssR0FBRyxNQUFNLEdBQUcsS0FBSyxHQUFHLE1BQU0sR0FBRyxNQUFNLEdBQUcsT0FBTyxHQUFHLE1BQU0sR0FBRyxPQUFPLENBQUM7QUFDMUYsUUFBQSxNQUFNLFdBQVcsR0FBRyxLQUFLLEdBQUcsTUFBTSxHQUFHLEtBQUssR0FBRyxNQUFNLEdBQUcsTUFBTSxHQUFHLE9BQU8sR0FBRyxNQUFNLEdBQUcsT0FBTyxDQUFDO0FBRTFGLFFBQUEsTUFBTSxXQUFXLEdBQUcsS0FBSyxHQUFHLE9BQU8sR0FBRyxLQUFLLEdBQUcsT0FBTyxHQUFHLEtBQUssR0FBRyxPQUFPLEdBQUcsTUFBTSxHQUFHLE9BQU8sQ0FBQztBQUMzRixRQUFBLE1BQU0sV0FBVyxHQUFHLEtBQUssR0FBRyxPQUFPLEdBQUcsS0FBSyxHQUFHLE9BQU8sR0FBRyxLQUFLLEdBQUcsT0FBTyxHQUFHLE1BQU0sR0FBRyxPQUFPLENBQUM7QUFDM0YsUUFBQSxNQUFNLFdBQVcsR0FBRyxLQUFLLEdBQUcsT0FBTyxHQUFHLEtBQUssR0FBRyxPQUFPLEdBQUcsTUFBTSxHQUFHLE9BQU8sR0FBRyxNQUFNLEdBQUcsT0FBTyxDQUFDO0FBQzVGLFFBQUEsTUFBTSxXQUFXLEdBQUcsS0FBSyxHQUFHLE9BQU8sR0FBRyxLQUFLLEdBQUcsT0FBTyxHQUFHLE1BQU0sR0FBRyxPQUFPLEdBQUcsTUFBTSxHQUFHLE9BQU8sQ0FBQztBQUU1RixRQUFBLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxXQUFXLENBQUM7QUFDeEIsUUFBQSxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsV0FBVyxDQUFDO0FBQ3hCLFFBQUEsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLFdBQVcsQ0FBQztBQUN4QixRQUFBLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxXQUFXLENBQUM7QUFDeEIsUUFBQSxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsV0FBVyxDQUFDO0FBQ3hCLFFBQUEsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLFdBQVcsQ0FBQztBQUN4QixRQUFBLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxXQUFXLENBQUM7QUFDeEIsUUFBQSxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsV0FBVyxDQUFDO0FBQ3hCLFFBQUEsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLFdBQVcsQ0FBQztBQUN4QixRQUFBLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxXQUFXLENBQUM7QUFDeEIsUUFBQSxNQUFNLENBQUMsRUFBRSxDQUFDLEdBQUcsV0FBVyxDQUFDO0FBQ3pCLFFBQUEsTUFBTSxDQUFDLEVBQUUsQ0FBQyxHQUFHLFdBQVcsQ0FBQztBQUN6QixRQUFBLE1BQU0sQ0FBQyxFQUFFLENBQUMsR0FBRyxXQUFXLENBQUM7QUFDekIsUUFBQSxNQUFNLENBQUMsRUFBRSxDQUFDLEdBQUcsV0FBVyxDQUFDO0FBQ3pCLFFBQUEsTUFBTSxDQUFDLEVBQUUsQ0FBQyxHQUFHLFdBQVcsQ0FBQztBQUN6QixRQUFBLE1BQU0sQ0FBQyxFQUFFLENBQUMsR0FBRyxXQUFXLENBQUM7QUFDekIsUUFBQSxPQUFPLE1BQU0sQ0FBQztLQUNkO0FBRUQsSUFBQSxPQUFPLEdBQUcsQ0FBQyxJQUFhLEVBQUUsS0FBYyxFQUFFLE1BQWUsRUFBQTtBQUN4RCxRQUFBLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQy9CLFFBQUEsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDL0IsUUFBQSxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUMvQixRQUFBLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQy9CLFFBQUEsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDL0IsUUFBQSxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUMvQixRQUFBLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQy9CLFFBQUEsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDL0IsUUFBQSxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUMvQixRQUFBLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQy9CLFFBQUEsTUFBTSxDQUFDLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUMsR0FBRyxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDbEMsUUFBQSxNQUFNLENBQUMsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQyxHQUFHLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUNsQyxRQUFBLE1BQU0sQ0FBQyxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDLEdBQUcsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ2xDLFFBQUEsTUFBTSxDQUFDLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUMsR0FBRyxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDbEMsUUFBQSxNQUFNLENBQUMsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQyxHQUFHLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUNsQyxRQUFBLE1BQU0sQ0FBQyxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDLEdBQUcsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ2xDLFFBQUEsT0FBTyxNQUFNLENBQUM7S0FDZDtBQUVELElBQUEsT0FBTyxRQUFRLENBQUMsSUFBYSxFQUFFLEtBQWMsRUFBRSxNQUFlLEVBQUE7QUFDN0QsUUFBQSxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUMvQixRQUFBLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQy9CLFFBQUEsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDL0IsUUFBQSxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUMvQixRQUFBLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQy9CLFFBQUEsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDL0IsUUFBQSxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUMvQixRQUFBLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQy9CLFFBQUEsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDL0IsUUFBQSxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUMvQixRQUFBLE1BQU0sQ0FBQyxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDLEdBQUcsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ2xDLFFBQUEsTUFBTSxDQUFDLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUMsR0FBRyxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDbEMsUUFBQSxNQUFNLENBQUMsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQyxHQUFHLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUNsQyxRQUFBLE1BQU0sQ0FBQyxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDLEdBQUcsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ2xDLFFBQUEsTUFBTSxDQUFDLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUMsR0FBRyxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDbEMsUUFBQSxNQUFNLENBQUMsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQyxHQUFHLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUNsQyxRQUFBLE9BQU8sTUFBTSxDQUFDO0tBQ2Q7QUFFRCxJQUFBLE9BQU8sc0JBQXNCLENBQUMsSUFBYSxFQUFFLEtBQWMsRUFBRSxNQUFlLEVBQUE7QUFDM0UsUUFBQSxNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDdEIsUUFBQSxNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDdEIsUUFBQSxNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDdEIsUUFBQSxNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDdEIsUUFBQSxNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDdEIsUUFBQSxNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDdEIsUUFBQSxNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDdEIsUUFBQSxNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDdEIsUUFBQSxNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDeEIsUUFBQSxNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDeEIsUUFBQSxNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDeEIsUUFBQSxNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7QUFFeEIsUUFBQSxNQUFNLE1BQU0sR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDeEIsUUFBQSxNQUFNLE1BQU0sR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDeEIsUUFBQSxNQUFNLE1BQU0sR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDeEIsUUFBQSxNQUFNLE1BQU0sR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDeEIsUUFBQSxNQUFNLE1BQU0sR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDeEIsUUFBQSxNQUFNLE1BQU0sR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDeEIsUUFBQSxNQUFNLE1BQU0sR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDeEIsUUFBQSxNQUFNLE1BQU0sR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDeEIsUUFBQSxNQUFNLE9BQU8sR0FBRyxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDMUIsUUFBQSxNQUFNLE9BQU8sR0FBRyxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDMUIsUUFBQSxNQUFNLE9BQU8sR0FBRyxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDMUIsUUFBQSxNQUFNLE9BQU8sR0FBRyxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUM7QUFFMUIsUUFBQSxNQUFNLFdBQVcsR0FBRyxLQUFLLEdBQUcsTUFBTSxHQUFHLEtBQUssR0FBRyxNQUFNLEdBQUcsS0FBSyxHQUFHLE1BQU0sQ0FBQztBQUNyRSxRQUFBLE1BQU0sV0FBVyxHQUFHLEtBQUssR0FBRyxNQUFNLEdBQUcsS0FBSyxHQUFHLE1BQU0sR0FBRyxLQUFLLEdBQUcsTUFBTSxDQUFDO0FBQ3JFLFFBQUEsTUFBTSxXQUFXLEdBQUcsS0FBSyxHQUFHLE1BQU0sR0FBRyxLQUFLLEdBQUcsTUFBTSxHQUFHLE1BQU0sR0FBRyxNQUFNLENBQUM7QUFFdEUsUUFBQSxNQUFNLFdBQVcsR0FBRyxLQUFLLEdBQUcsTUFBTSxHQUFHLEtBQUssR0FBRyxNQUFNLEdBQUcsS0FBSyxHQUFHLE1BQU0sQ0FBQztBQUNyRSxRQUFBLE1BQU0sV0FBVyxHQUFHLEtBQUssR0FBRyxNQUFNLEdBQUcsS0FBSyxHQUFHLE1BQU0sR0FBRyxLQUFLLEdBQUcsTUFBTSxDQUFDO0FBQ3JFLFFBQUEsTUFBTSxXQUFXLEdBQUcsS0FBSyxHQUFHLE1BQU0sR0FBRyxLQUFLLEdBQUcsTUFBTSxHQUFHLE1BQU0sR0FBRyxNQUFNLENBQUM7QUFFdEUsUUFBQSxNQUFNLFdBQVcsR0FBRyxLQUFLLEdBQUcsTUFBTSxHQUFHLEtBQUssR0FBRyxNQUFNLEdBQUcsS0FBSyxHQUFHLE9BQU8sQ0FBQztBQUN0RSxRQUFBLE1BQU0sV0FBVyxHQUFHLEtBQUssR0FBRyxNQUFNLEdBQUcsS0FBSyxHQUFHLE1BQU0sR0FBRyxLQUFLLEdBQUcsT0FBTyxDQUFDO0FBQ3RFLFFBQUEsTUFBTSxXQUFXLEdBQUcsS0FBSyxHQUFHLE1BQU0sR0FBRyxLQUFLLEdBQUcsTUFBTSxHQUFHLE1BQU0sR0FBRyxPQUFPLENBQUM7QUFFdkUsUUFBQSxNQUFNLFdBQVcsR0FBRyxLQUFLLEdBQUcsT0FBTyxHQUFHLEtBQUssR0FBRyxPQUFPLEdBQUcsS0FBSyxHQUFHLE9BQU8sR0FBRyxNQUFNLENBQUM7QUFDakYsUUFBQSxNQUFNLFdBQVcsR0FBRyxLQUFLLEdBQUcsT0FBTyxHQUFHLEtBQUssR0FBRyxPQUFPLEdBQUcsS0FBSyxHQUFHLE9BQU8sR0FBRyxNQUFNLENBQUM7QUFDakYsUUFBQSxNQUFNLFdBQVcsR0FBRyxLQUFLLEdBQUcsT0FBTyxHQUFHLEtBQUssR0FBRyxPQUFPLEdBQUcsTUFBTSxHQUFHLE9BQU8sR0FBRyxNQUFNLENBQUM7QUFFbEYsUUFBQSxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsV0FBVyxDQUFDO0FBQ3hCLFFBQUEsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLFdBQVcsQ0FBQztBQUN4QixRQUFBLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxXQUFXLENBQUM7QUFDeEIsUUFBQSxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2hCLFFBQUEsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLFdBQVcsQ0FBQztBQUN4QixRQUFBLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxXQUFXLENBQUM7QUFDeEIsUUFBQSxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsV0FBVyxDQUFDO0FBQ3hCLFFBQUEsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNoQixRQUFBLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxXQUFXLENBQUM7QUFDeEIsUUFBQSxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsV0FBVyxDQUFDO0FBQ3hCLFFBQUEsTUFBTSxDQUFDLEVBQUUsQ0FBQyxHQUFHLFdBQVcsQ0FBQztBQUN6QixRQUFBLE1BQU0sQ0FBQyxFQUFFLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDakIsUUFBQSxNQUFNLENBQUMsRUFBRSxDQUFDLEdBQUcsV0FBVyxDQUFDO0FBQ3pCLFFBQUEsTUFBTSxDQUFDLEVBQUUsQ0FBQyxHQUFHLFdBQVcsQ0FBQztBQUN6QixRQUFBLE1BQU0sQ0FBQyxFQUFFLENBQUMsR0FBRyxXQUFXLENBQUM7QUFDekIsUUFBQSxNQUFNLENBQUMsRUFBRSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2pCLFFBQUEsT0FBTyxNQUFNLENBQUM7S0FDZDtBQUVELElBQUEsT0FBTyxpQkFBaUIsQ0FBQyxNQUFlLEVBQUUsUUFBaUIsRUFBRSxNQUFlLEVBQUE7QUFDM0UsUUFBQSxNQUFNLEtBQUssR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDeEIsUUFBQSxNQUFNLEtBQUssR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDeEIsUUFBQSxNQUFNLEtBQUssR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDeEIsUUFBQSxNQUFNLEtBQUssR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDeEIsUUFBQSxNQUFNLEtBQUssR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDeEIsUUFBQSxNQUFNLEtBQUssR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDeEIsUUFBQSxNQUFNLEtBQUssR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDeEIsUUFBQSxNQUFNLEtBQUssR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDeEIsUUFBQSxNQUFNLE1BQU0sR0FBRyxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUM7QUFFMUIsUUFBQSxNQUFNLE1BQU0sR0FBRyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDM0IsUUFBQSxNQUFNLE1BQU0sR0FBRyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDM0IsUUFBQSxNQUFNLE1BQU0sR0FBRyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDM0IsUUFBQSxNQUFNLE1BQU0sR0FBRyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDM0IsUUFBQSxNQUFNLE1BQU0sR0FBRyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDM0IsUUFBQSxNQUFNLE1BQU0sR0FBRyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDM0IsUUFBQSxNQUFNLE1BQU0sR0FBRyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDM0IsUUFBQSxNQUFNLE1BQU0sR0FBRyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDM0IsUUFBQSxNQUFNLE9BQU8sR0FBRyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFFNUIsUUFBQSxNQUFNLFdBQVcsR0FBRyxLQUFLLEdBQUcsTUFBTSxHQUFHLEtBQUssR0FBRyxNQUFNLEdBQUcsS0FBSyxHQUFHLE1BQU0sQ0FBQztBQUNyRSxRQUFBLE1BQU0sV0FBVyxHQUFHLEtBQUssR0FBRyxNQUFNLEdBQUcsS0FBSyxHQUFHLE1BQU0sR0FBRyxLQUFLLEdBQUcsTUFBTSxDQUFDO0FBQ3JFLFFBQUEsTUFBTSxXQUFXLEdBQUcsS0FBSyxHQUFHLE1BQU0sR0FBRyxLQUFLLEdBQUcsTUFBTSxHQUFHLE1BQU0sR0FBRyxNQUFNLENBQUM7QUFFdEUsUUFBQSxNQUFNLFdBQVcsR0FBRyxLQUFLLEdBQUcsTUFBTSxHQUFHLEtBQUssR0FBRyxNQUFNLEdBQUcsS0FBSyxHQUFHLE1BQU0sQ0FBQztBQUNyRSxRQUFBLE1BQU0sV0FBVyxHQUFHLEtBQUssR0FBRyxNQUFNLEdBQUcsS0FBSyxHQUFHLE1BQU0sR0FBRyxLQUFLLEdBQUcsTUFBTSxDQUFDO0FBQ3JFLFFBQUEsTUFBTSxXQUFXLEdBQUcsS0FBSyxHQUFHLE1BQU0sR0FBRyxLQUFLLEdBQUcsTUFBTSxHQUFHLE1BQU0sR0FBRyxNQUFNLENB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Q0FBQyxDQUFDLENBQUM7QUFDdkIsUUFBQSxNQUFNLE1BQU0sR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDO0FBQ3ZCLFFBQUEsTUFBTSxNQUFNLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQzs7UUFHdkIsSUFBSSxNQUFNLEtBQUssR0FBRyxJQUFJLE1BQU0sS0FBSyxHQUFHLElBQUksTUFBTSxLQUFLLEdBQUcsRUFBRTtZQUN2RCxPQUFPLE9BQU8sQ0FBQyxLQUFLLENBQUMsTUFBTSxFQUFFLE1BQU0sQ0FBQyxDQUFDO0FBQ3JDLFNBQUE7UUFFRCxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsTUFBTSxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUMvQixNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsTUFBTSxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUMvQixNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsTUFBTSxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUMvQixNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBRXRCLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxNQUFNLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQy9CLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxNQUFNLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQy9CLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxNQUFNLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQy9CLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFFdEIsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLE1BQU0sR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDL0IsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLE1BQU0sR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDL0IsTUFBTSxDQUFDLEVBQUUsQ0FBQyxHQUFHLE1BQU0sR0FBRyxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDakMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUV4QixNQUFNLENBQUMsRUFBRSxDQUFDLEdBQUcsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ3hCLE1BQU0sQ0FBQyxFQUFFLENBQUMsR0FBRyxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDeEIsTUFBTSxDQUFDLEVBQUUsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUN4QixNQUFNLENBQUMsRUFBRSxDQUFDLEdBQUcsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBRXhCLFFBQUEsT0FBTyxNQUFNLENBQUM7S0FDZDtBQUVELElBQUEsT0FBTyxzQkFBc0IsQ0FBQyxNQUFlLEVBQUUsS0FBYSxFQUFFLE1BQWUsRUFBQTtRQUM1RSxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQztRQUM5QixNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQztRQUM5QixNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQztRQUM5QixNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBRXRCLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDO1FBQzlCLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDO1FBQzlCLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDO1FBQzlCLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFFdEIsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUM7UUFDOUIsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUM7UUFDOUIsTUFBTSxDQUFDLEVBQUUsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxFQUFFLENBQUMsR0FBRyxLQUFLLENBQUM7UUFDaEMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUV4QixNQUFNLENBQUMsRUFBRSxDQUFDLEdBQUcsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ3hCLE1BQU0sQ0FBQyxFQUFFLENBQUMsR0FBRyxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDeEIsTUFBTSxDQUFDLEVBQUUsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUN4QixNQUFNLENBQUMsRUFBRSxDQUFDLEdBQUcsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBRXhCLFFBQUEsT0FBTyxNQUFNLENBQUM7S0FDZDtBQUVELElBQUEsT0FBTyxnQkFBZ0IsQ0FBQyxNQUFlLEVBQUUsU0FBa0IsRUFBRSxNQUFlLEVBQUE7QUFDM0UsUUFBQSxNQUFNLEVBQUUsR0FBRyxTQUFTLENBQUMsQ0FBQyxDQUFDO0FBQ3ZCLFFBQUEsTUFBTSxFQUFFLEdBQUcsU0FBUyxDQUFDLENBQUMsQ0FBQztBQUN2QixRQUFBLE1BQU0sRUFBRSxHQUFHLFNBQVMsQ0FBQyxDQUFDLENBQUM7QUFDdkIsUUFBQSxNQUFNLEVBQUUsR0FBRyxTQUFTLENBQUMsQ0FBQyxDQUFDO0FBRXZCLFFBQUEsTUFBTSxDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsTUFBTSxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUM3RSxRQUFBLE1BQU0sQ0FBQyxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLE1BQU0sQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLENBQUM7QUFDN0UsUUFBQSxNQUFNLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsTUFBTSxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsR0FBRyxNQUFNLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxDQUFDO0FBQzlFLFFBQUEsTUFBTSxDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLE1BQU0sQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUcsTUFBTSxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUU5RSxRQUFBLE1BQU0sQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ2IsUUFBQSxNQUFNLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNiLFFBQUEsTUFBTSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDYixRQUFBLE1BQU0sQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ2IsUUFBQSxPQUFPLE1BQU0sQ0FBQztLQUNkO0FBRUQsSUFBQSxPQUFPLHVCQUF1QixDQUFDLE1BQWUsRUFBRSxTQUFrQixFQUFFLE1BQWUsRUFBQTtBQUNsRixRQUFBLE1BQU0sRUFBRSxHQUFHLFNBQVMsQ0FBQyxDQUFDLENBQUM7QUFDdkIsUUFBQSxNQUFNLEVBQUUsR0FBRyxTQUFTLENBQUMsQ0FBQyxDQUFDO0FBQ3ZCLFFBQUEsTUFBTSxFQUFFLEdBQUcsU0FBUyxDQUFDLENBQUMsQ0FBQztRQUV2QixNQUFNLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQztRQUMzRCxNQUFNLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQztRQUMzRCxNQUFNLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsTUFBTSxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUU1RCxRQUFBLE1BQU0sQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ2IsUUFBQSxNQUFNLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNiLFFBQUEsTUFBTSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDYixRQUFBLE9BQU8sTUFBTSxDQUFDO0tBQ2Q7QUFFRCxJQUFBLE9BQU8sZUFBZSxDQUFDLE1BQWUsRUFBRSxTQUFrQixFQUFFLE1BQWUsRUFBQTtBQUMxRSxRQUFBLE1BQU0sRUFBRSxHQUFHLFNBQVMsQ0FBQyxDQUFDLENBQUM7QUFDdkIsUUFBQSxNQUFNLEVBQUUsR0FBRyxTQUFTLENBQUMsQ0FBQyxDQUFDO0FBQ3ZCLFFBQUEsTUFBTSxFQUFFLEdBQUcsU0FBUyxDQUFDLENBQUMsQ0FBQztRQUV2QixNQUFNLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDeEUsTUFBTSxDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ3hFLE1BQU0sQ0FBQyxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxNQUFNLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxHQUFHLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUV6RSxRQUFBLE1BQU0sQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ2IsUUFBQSxNQUFNLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNiLFFBQUEsTUFBTSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDYixRQUFBLE9BQU8sTUFBTSxDQUFDO0tBQ2Q7QUFFRCxJQUFBLE9BQU8sZ0JBQWdCLENBQUMsTUFBZSxFQUFFLE1BQWMsRUFBRSxNQUFlLEVBQUE7UUFDdkUsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUM7UUFDL0IsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUM7UUFDL0IsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUM7UUFDL0IsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUM7UUFDL0IsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUM7UUFDL0IsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUM7UUFDL0IsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUM7UUFDL0IsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUM7UUFDL0IsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUM7UUFDL0IsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUM7UUFDL0IsTUFBTSxDQUFDLEVBQUUsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxFQUFFLENBQUMsR0FBRyxNQUFNLENBQUM7UUFDakMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxFQUFFLENBQUMsR0FBRyxNQUFNLENBQUM7UUFDakMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxFQUFFLENBQUMsR0FBRyxNQUFNLENBQUM7UUFDakMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxFQUFFLENBQUMsR0FBRyxNQUFNLENBQUM7UUFDakMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxFQUFFLENBQUMsR0FBRyxNQUFNLENBQUM7UUFDakMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxFQUFFLENBQUMsR0FBRyxNQUFNLENBQUM7QUFDakMsUUFBQSxPQUFPLE1BQU0sQ0FBQztLQUNkO0FBRUQsSUFBQSxPQUFPLE1BQU0sQ0FBQyxNQUFlLEVBQUUsTUFBZSxFQUFBO1FBQzdDLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUN2QixNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDdkIsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3ZCLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUN2QixNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDdkIsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3ZCLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUN2QixNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDdkIsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3ZCLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUN2QixNQUFNLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDekIsTUFBTSxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ3pCLE1BQU0sQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUN6QixNQUFNLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDekIsTUFBTSxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ3pCLE1BQU0sQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUN6QixRQUFBLE9BQU8sTUFBTSxDQUFDO0tBQ2Q7QUFFRCxJQUFBLE9BQU8sU0FBUyxDQUFDLE1BQWUsRUFBRSxNQUFlLEVBQUE7QUFDaEQsUUFBQSxNQUFNLE9BQU8sR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDMUIsUUFBQSxNQUFNLE9BQU8sR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDMUIsUUFBQSxNQUFNLE9BQU8sR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDMUIsUUFBQSxNQUFNLE9BQU8sR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDMUIsUUFBQSxNQUFNLE9BQU8sR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDMUIsUUFBQSxNQUFNLFFBQVEsR0FBRyxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUM7UUFFNUIsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUN0QixNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3RCLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDdEIsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUN2QixRQUFBLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxPQUFPLENBQUM7UUFDcEIsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUN0QixNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3RCLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDdkIsUUFBQSxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsT0FBTyxDQUFDO0FBQ3BCLFFBQUEsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLE9BQU8sQ0FBQztRQUNwQixNQUFNLENBQUMsRUFBRSxDQUFDLEdBQUcsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ3hCLE1BQU0sQ0FBQyxFQUFFLENBQUMsR0FBRyxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDeEIsUUFBQSxNQUFNLENBQUMsRUFBRSxDQUFDLEdBQUcsT0FBTyxDQUFDO0FBQ3JCLFFBQUEsTUFBTSxDQUFDLEVBQUUsQ0FBQyxHQUFHLE9BQU8sQ0FBQztBQUNyQixRQUFBLE1BQU0sQ0FBQyxFQUFFLENBQUMsR0FBRyxRQUFRLENBQUM7UUFDdEIsTUFBTSxDQUFDLEVBQUUsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUN4QixRQUFBLE9BQU8sTUFBTSxDQUFDO0tBQ2Q7QUFFRCxJQUFBLE9BQU8sR0FBRyxDQUFDLE1BQWUsRUFBRSxNQUFlLEVBQUE7QUFDMUMsUUFBQSxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNoQyxRQUFBLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2hDLFFBQUEsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDaEMsUUFBQSxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNoQyxRQUFBLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2hDLFFBQUEsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDaEMsUUFBQSxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNoQyxRQUFBLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2hDLFFBQUEsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDaEMsUUFBQSxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNoQyxRQUFBLE1BQU0sQ0FBQyxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQ2xDLFFBQUEsTUFBTSxDQUFDLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDbEMsUUFBQSxNQUFNLENBQUMsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUNsQyxRQUFBLE1BQU0sQ0FBQyxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQ2xDLFFBQUEsTUFBTSxDQUFDLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDbEMsUUFBQSxNQUFNLENBQUMsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUVsQyxRQUFBLE9BQU8sTUFBTSxDQUFDO0tBQ2Q7QUFFRCxJQUFBLE9BQU8sTUFBTSxDQUFDLElBQWEsRUFBRSxLQUFjLEVBQUE7Ozs7O1FBSzFDLFFBQ0MsSUFBSSxLQUFLLEtBQUs7YUFDYixPQUFPLENBQUMsSUFBSSxDQUFDO2dCQUNiLE9BQU8sQ0FBQyxLQUFLLENBQUM7O0FBRWQsZ0JBQUEsSUFBSSxDQUFDLEVBQUUsQ0FBQyxLQUFLLEtBQUssQ0FBQyxFQUFFLENBQUM7QUFDdEIsZ0JBQUEsSUFBSSxDQUFDLEVBQUUsQ0FBQyxLQUFLLEtBQUssQ0FBQyxFQUFFLENBQUM7QUFDdEIsZ0JBQUEsSUFBSSxDQUFDLEVBQUUsQ0FBQyxLQUFLLEtBQUssQ0FBQyxFQUFFLENBQUM7O0FBRXRCLGdCQUFBLElBQUksQ0FBQyxDQUFDLENBQUMsS0FBSyxLQUFLLENBQUMsQ0FBQyxDQUFDO0FBQ3BCLGdCQUFBLElBQUksQ0FBQyxDQUFDLENBQUMsS0FBSyxLQUFLLENBQUMsQ0FBQyxDQUFDO0FBQ3BCLGdCQUFBLElBQUksQ0FBQyxDQUFDLENBQUMsS0FBSyxLQUFLLENBQUMsQ0FBQyxDQUFDO0FBQ3BCLGdCQUFBLElBQUksQ0FBQyxDQUFDLENBQUMsS0FBSyxLQUFLLENBQUMsQ0FBQyxDQUFDO0FBQ3BCLGdCQUFBLElBQUksQ0FBQyxDQUFDLENBQUMsS0FBSyxLQUFLLENBQUMsQ0FBQyxDQUFDO0FBQ3BCLGdCQUFBLElBQUksQ0FBQyxDQUFDLENBQUMsS0FBSyxLQUFLLENBQUMsQ0FBQyxDQUFDO0FBQ3BCLGdCQUFBLElBQUksQ0FBQyxDQUFDLENBQUMsS0FBSyxLQUFLLENBQUMsQ0FBQyxDQUFDO0FBQ3BCLGdCQUFBLElBQUksQ0FBQyxDQUFDLENBQUMsS0FBSyxLQUFLLENBQUMsQ0FBQyxDQUFDO0FBQ3BCLGdCQUFBLElBQUksQ0FBQyxFQUFFLENBQUMsS0FBSyxLQUFLLENBQUMsRUFBRSxDQUFDOztBQUV0QixnQkFBQSxJQUFJLENBQUMsQ0FBQyxDQUFDLEtBQUssS0FBSyxDQUFDLENBQUMsQ0FBQztBQUNwQixnQkFBQSxJQUFJLENBQUMsQ0FBQyxDQUFDLEtBQUssS0FBSyxDQUFDLENBQUMsQ0FBQztBQUNwQixnQkFBQSxJQUFJLENBQUMsRUFBRSxDQUFDLEtBQUssS0FBSyxDQUFDLEVBQUUs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QU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN2QixRQUFBLE1BQU0sSUFBSSxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN2QixRQUFBLE1BQU0sSUFBSSxHQUFHLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUN4QixRQUFBLE1BQU0sSUFBSSxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN2QixRQUFBLE1BQU0sSUFBSSxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN2QixRQUFBLE1BQU0sSUFBSSxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN2QixRQUFBLE1BQU0sSUFBSSxHQUFHLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUN4QixRQUFBLE1BQU0sSUFBSSxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN2QixRQUFBLE1BQU0sSUFBSSxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN2QixRQUFBLE1BQU0sS0FBSyxHQUFHLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUN6QixRQUFBLE1BQU0sS0FBSyxHQUFHLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUN6QixRQUFBLE1BQU0sS0FBSyxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN4QixRQUFBLE1BQU0sS0FBSyxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN4QixRQUFBLE1BQU0sS0FBSyxHQUFHLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUN6QixRQUFBLE1BQU0sS0FBSyxHQUFHLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQzs7QUFHekIsUUFBQSxJQUFJLElBQUksR0FBRyxLQUFLLEdBQUcsS0FBSyxDQUFDO0FBQ3pCLFFBQUEsSUFBSSxJQUFJLEdBQUcsS0FBSyxHQUFHLEtBQUssQ0FBQztBQUN6QixRQUFBLElBQUksSUFBSSxHQUFHLElBQUksR0FBRyxLQUFLLENBQUM7QUFDeEIsUUFBQSxJQUFJLElBQUksR0FBRyxLQUFLLEdBQUcsS0FBSyxDQUFDO0FBQ3pCLFFBQUEsSUFBSSxJQUFJLEdBQUcsSUFBSSxHQUFHLEtBQUssQ0FBQztBQUN4QixRQUFBLElBQUksSUFBSSxHQUFHLEtBQUssR0FBRyxLQUFLLENBQUM7QUFDekIsUUFBQSxJQUFJLElBQUksR0FBRyxJQUFJLEdBQUcsS0FBSyxDQUFDO0FBQ3hCLFFBQUEsSUFBSSxJQUFJLEdBQUcsS0FBSyxHQUFHLEtBQUssQ0FBQztBQUN6QixRQUFBLElBQUksSUFBSSxHQUFHLElBQUksR0FBRyxLQUFLLENBQUM7QUFDeEIsUUFBQSxJQUFJLElBQUksR0FBRyxLQUFLLEdBQUcsS0FBSyxDQUFDO0FBQ3pCLFFBQUEsSUFBSSxLQUFLLEdBQUcsSUFBSSxHQUFHLEtBQUssQ0FBQztBQUN6QixRQUFBLElBQUksS0FBSyxHQUFHLElBQUksR0FBRyxLQUFLLENBQUM7O1FBR3pCLE1BQU0sSUFBSSxHQUFHLElBQUksR0FBRyxJQUFJLEdBQUcsSUFBSSxHQUFHLElBQUksR0FBRyxJQUFJLEdBQUcsSUFBSSxJQUFJLElBQUksR0FBRyxJQUFJLEdBQUcsSUFBSSxHQUFHLElBQUksR0FBRyxJQUFJLEdBQUcsSUFBSSxDQUFDLENBQUM7UUFDakcsTUFBTSxJQUFJLEdBQUcsSUFBSSxHQUFHLElBQUksR0FBRyxJQUFJLEdBQUcsSUFBSSxHQUFHLElBQUksR0FBRyxJQUFJLElBQUksSUFBSSxHQUFHLElBQUksR0FBRyxJQUFJLEdBQUcsSUFBSSxHQUFHLElBQUksR0FBRyxJQUFJLENBQUMsQ0FBQztRQUNqRyxNQUFNLElBQUksR0FBRyxJQUFJLEdBQUcsSUFBSSxHQUFHLElBQUksR0FBRyxJQUFJLEdBQUcsS0FBSyxHQUFHLElBQUksSUFBSSxJQUFJLEdBQUcsSUFBSSxHQUFHLElBQUksR0FBRyxJQUFJLEdBQUcsS0FBSyxHQUFHLElBQUksQ0FBQyxDQUFDO1FBQ25HLE1BQU0sSUFBSSxHQUFHLElBQUksR0FBRyxJQUFJLEdBQUcsSUFBSSxHQUFHLElBQUksR0FBRyxLQUFLLEdBQUcsSUFBSSxJQUFJLElBQUksR0FBRyxJQUFJLEdBQUcsSUFBSSxHQUFHLElBQUksR0FBRyxLQUFLLEdBQUcsSUFBSSxDQUFDLENBQUM7UUFDbkcsTUFBTSxJQUFJLEdBQUcsSUFBSSxHQUFHLElBQUksR0FBRyxJQUFJLEdBQUcsSUFBSSxHQUFHLElBQUksR0FBRyxJQUFJLElBQUksSUFBSSxHQUFHLElBQUksR0FBRyxJQUFJLEdBQUcsSUFBSSxHQUFHLElBQUksR0FBRyxJQUFJLENBQUMsQ0FBQztRQUNqRyxNQUFNLElBQUksR0FBRyxJQUFJLEdBQUcsSUFBSSxHQUFHLElBQUksR0FBRyxJQUFJLEdBQUcsSUFBSSxHQUFHLElBQUksSUFBSSxJQUFJLEdBQUcsSUFBSSxHQUFHLElBQUksR0FBRyxJQUFJLEdBQUcsSUFBSSxHQUFHLElBQUksQ0FBQyxDQUFDO1FBQ2pHLE1BQU0sSUFBSSxHQUFHLElBQUksR0FBRyxJQUFJLEdBQUcsSUFBSSxHQUFHLElBQUksR0FBRyxLQUFLLEdBQUcsSUFBSSxJQUFJLElBQUksR0FBRyxJQUFJLEdBQUcsSUFBSSxHQUFHLElBQUksR0FBRyxLQUFLLEdBQUcsSUFBSSxDQUFDLENBQUM7UUFDbkcsTUFBTSxJQUFJLEdBQUcsSUFBSSxHQUFHLElBQUksR0FBRyxJQUFJLEdBQUcsSUFBSSxHQUFHLEtBQUssR0FBRyxJQUFJLElBQUksSUFBSSxHQUFHLElBQUksR0FBRyxJQUFJLEdBQUcsSUFBSSxHQUFHLEtBQUssR0FBRyxJQUFJLENBQUMsQ0FBQzs7QUFHbkcsUUFBQSxJQUFJLEdBQUcsSUFBSSxHQUFHLElBQUksQ0FBQztBQUNuQixRQUFBLElBQUksR0FBRyxJQUFJLEdBQUcsSUFBSSxDQUFDO0FBQ25CLFFBQUEsSUFBSSxHQUFHLElBQUksR0FBRyxJQUFJLENBQUM7QUFDbkIsUUFBQSxJQUFJLEdBQUcsSUFBSSxHQUFHLElBQUksQ0FBQztBQUNuQixRQUFBLElBQUksR0FBRyxJQUFJLEdBQUcsSUFBSSxDQUFDO0FBQ25CLFFBQUEsSUFBSSxHQUFHLElBQUksR0FBRyxJQUFJLENBQUM7QUFDbkIsUUFBQSxJQUFJLEdBQUcsSUFBSSxHQUFHLElBQUksQ0FBQztBQUNuQixRQUFBLElBQUksR0FBRyxJQUFJLEdBQUcsSUFBSSxDQUFDO0FBQ25CLFFBQUEsSUFBSSxHQUFHLElBQUksR0FBRyxJQUFJLENBQUM7QUFDbkIsUUFBQSxJQUFJLEdBQUcsSUFBSSxHQUFHLElBQUksQ0FBQztBQUNuQixRQUFBLEtBQUssR0FBRyxJQUFJLEdBQUcsSUFBSSxDQUFDO0FBQ3BCLFFBQUEsS0FBSyxHQUFHLElBQUksR0FBRyxJQUFJLENBQUM7O1FBR3BCLE1BQU0sSUFBSSxHQUFHLElBQUksR0FBRyxLQUFLLEdBQUcsSUFBSSxHQUFHLEtBQUssR0FBRyxJQUFJLEdBQUcsS0FBSyxJQUFJLElBQUksR0FBRyxLQUFLLEdBQUcsSUFBSSxHQUFHLEtBQUssR0FBRyxJQUFJLEdBQUcsS0FBSyxDQUFDLENBQUM7UUFDdkcsTUFBTSxJQUFJLEdBQUcsSUFBSSxHQUFHLEtBQUssR0FBRyxJQUFJLEdBQUcsS0FBSyxHQUFHLElBQUksR0FBRyxLQUFLLElBQUksSUFBSSxHQUFHLEtBQUssR0FBRyxJQUFJLEdBQUcsS0FBSyxHQUFHLElBQUksR0FBRyxLQUFLLENBQUMsQ0FBQztRQUN2RyxNQUFNLEtBQUssR0FBRyxJQUFJLEdBQUcsS0FBSyxHQUFHLElBQUksR0FBRyxLQUFLLEdBQUcsS0FBSyxHQUFHLEtBQUssSUFBSSxJQUFJLEdBQUcsS0FBSyxHQUFHLElBQUksR0FBRyxLQUFLLEdBQUcsS0FBSyxHQUFHLEtBQUssQ0FBQyxDQUFDO1FBQzFHLE1BQU0sS0FBSyxHQUFHLElBQUksR0FBRyxLQUFLLEdBQUcsSUFBSSxHQUFHLEtBQUssR0FBRyxLQUFLLEdBQUcsS0FBSyxJQUFJLElBQUksR0FBRyxLQUFLLEdBQUcsSUFBSSxHQUFHLEtBQUssR0FBRyxLQUFLLEdBQUcsS0FBSyxDQUFDLENBQUM7UUFDMUcsTUFBTSxLQUFLLEdBQUcsSUFBSSxHQUFHLEtBQUssR0FBRyxJQUFJLEdBQUcsS0FBSyxHQUFHLElB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QUFDN0UsU0FBQTs7QUFHRCxRQUFBLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDO0FBRWhCLFFBQUEsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksR0FBRyxHQUFHLENBQUM7QUFDdkIsUUFBQSxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxHQUFHLEdBQUcsQ0FBQztBQUN2QixRQUFBLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLEdBQUcsR0FBRyxDQUFDO0FBQ3ZCLFFBQUEsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksR0FBRyxHQUFHLENBQUM7QUFDdkIsUUFBQSxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxHQUFHLEdBQUcsQ0FBQztBQUN2QixRQUFBLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLEdBQUcsR0FBRyxDQUFDO0FBQ3ZCLFFBQUEsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksR0FBRyxHQUFHLENBQUM7QUFDdkIsUUFBQSxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxHQUFHLEdBQUcsQ0FBQztBQUN2QixRQUFBLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLEdBQUcsR0FBRyxDQUFDO0FBQ3ZCLFFBQUEsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksR0FBRyxHQUFHLENBQUM7QUFDdkIsUUFBQSxNQUFNLENBQUMsRUFBRSxDQUFDLEdBQUcsS0FBSyxHQUFHLEdBQUcsQ0FBQztBQUN6QixRQUFBLE1BQU0sQ0FBQyxFQUFFLENBQUMsR0FBRyxLQUFLLEdBQUcsR0FBRyxDQUFDO0FBQ3pCLFFBQUEsTUFBTSxDQUFDLEVBQUUsQ0FBQyxHQUFHLEtBQUssR0FBRyxHQUFHLENBQUM7QUFDekIsUUFBQSxNQUFNLENBQUMsRUFBRSxDQUFDLEdBQUcsS0FBSyxHQUFHLEdBQUcsQ0FBQztBQUN6QixRQUFBLE1BQU0sQ0FBQyxFQUFFLENBQUMsR0FBRyxLQUFLLEdBQUcsR0FBRyxDQUFDO0FBQ3pCLFFBQUEsTUFBTSxDQUFDLEVBQUUsQ0FBQyxHQUFHLEtBQUssR0FBRyxHQUFHLENBQUM7QUFDekIsUUFBQSxPQUFPLE1BQU0sQ0FBQztLQUNkO0FBRUQsSUFBQSxPQUFPLHFCQUFxQixDQUFDLE1BQWUsRUFBRSxNQUFlLEVBQUE7Ozs7OztBQU81RCxRQUFBLE1BQU0sT0FBTyxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUMxQixRQUFBLE1BQU0sT0FBTyxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUMxQixRQUFBLE1BQU0sT0FBTyxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUMxQixRQUFBLE1BQU0sT0FBTyxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUMxQixRQUFBLE1BQU0sT0FBTyxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUMxQixRQUFBLE1BQU0sT0FBTyxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUMxQixRQUFBLE1BQU0sT0FBTyxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUMxQixRQUFBLE1BQU0sT0FBTyxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUMxQixRQUFBLE1BQU0sUUFBUSxHQUFHLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUU1QixRQUFBLE1BQU0sRUFBRSxHQUFHLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUN0QixRQUFBLE1BQU0sRUFBRSxHQUFHLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUN0QixRQUFBLE1BQU0sRUFBRSxHQUFHLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUV0QixRQUFBLE1BQU0sQ0FBQyxHQUFHLENBQUMsT0FBTyxHQUFHLEVBQUUsR0FBRyxPQUFPLEdBQUcsRUFBRSxHQUFHLE9BQU8sR0FBRyxFQUFFLENBQUM7QUFDdEQsUUFBQSxNQUFNLENBQUMsR0FBRyxDQUFDLE9BQU8sR0FBRyxFQUFFLEdBQUcsT0FBTyxHQUFHLEVBQUUs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QVUsQ0FBQyxDQUFDLEdBQUcsU0FBUyxDQUFDLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUM7UUFFdkMsTUFBTSxJQUFJLEdBQUcsT0FBTyxDQUFDLEtBQUssQ0FBQyxVQUFVLEVBQUUsY0FBYyxDQUFDLENBQUM7UUFDdkQsTUFBTSxJQUFJLEdBQUcsT0FBTyxDQUFDLEtBQUssQ0FBQyxVQUFVLEVBQUUsY0FBYyxDQUFDLENBQUM7UUFDdkQsTUFBTSxJQUFJLEdBQUcsT0FBTyxDQUFDLEtBQUssQ0FBQyxVQUFVLEVBQUUsY0FBYyxDQUFDLENBQUM7UUFFdkQsTUFBTSxJQUFJLEdBQUcsT0FBTyxDQUFDLEtBQUssQ0FBQyxVQUFVLEVBQUUsY0FBYyxDQUFDLENBQUM7UUFDdkQsTUFBTSxJQUFJLEdBQUcsT0FBTyxDQUFDLEtBQUssQ0FBQyxVQUFVLEVBQUUsY0FBYyxDQUFDLENBQUM7UUFDdkQsTUFBTSxJQUFJLEdBQUcsT0FBTyxDQUFDLEtBQUssQ0FBQyxVQUFVLEVBQUUsY0FBYyxDQUFDLENBQUM7QUFFdkQsUUFBQSxNQUFNLFdBQVcsR0FBRyxTQUFTLENBQUMsTUFBTSxDQUFDO0FBQ3JDLFFBQUEsSUFBSSxDQUFDLENBQUM7UUFDTixLQUFLLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLFdBQVcsRUFBRSxDQUFDLElBQUksTUFBTSxFQUFFO1lBQ3pDLE1BQU0sQ0FBQyxHQUFHLFNBQVMsQ0FBQyxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDO0FBQ2xDLFlBQUEsTUFBTSxDQUFDLEdBQUcsU0FBUyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDO0FBQ3RDLFlBQUEsTUFBTSxDQUFDLEdBQUcsU0FBUyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDO0FBRXRDLFlBQUEsVUFBVSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDakIsWUFBQSxVQUFVLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNqQixZQUFBLFVBQVUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDOztBQUdqQixZQUFBLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLEVBQUU7QUFDZixnQkFBQSxPQUFPLENBQUMsS0FBSyxDQUFDLFVBQVUsRUFBRSxJQUFJLENBQUMsQ0FBQztBQUNoQyxhQUFBO0FBRUQsWUFBQSxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxFQUFFO0FBQ2YsZ0JBQUEsT0FBTyxDQUFDLEtBQUssQ0FBQyxVQUFVLEVBQUUsSUFBSSxDQUFDLENBQUM7QUFDaEMsYUFBQTtBQUVELFlBQUEsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsRUFBRTtBQUNmLGdCQUFBLE9BQU8sQ0FBQyxLQUFLLENBQUMsVUFBVSxFQUFFLElBQUksQ0FBQyxDQUFDO0FBQ2hDLGFBQUE7QUFFRCxZQUFBLElBQUksQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLEVBQUU7QUFDZixnQkFBQSxPQUFPLENBQUMsS0FBSyxDQUFDLFVBQVUsRUFBRSxJQUFJLENBQUMsQ0FBQztBQUNoQyxhQUFBO0FBRUQsWUFBQSxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxFQUFFO0FBQ2YsZ0JBQUEsT0FBTyxDQUFDLEtBQUssQ0FBQyxVQUFVLEVBQUUsSUFBSSxDQUFDLENBQUM7QUFDaEMsYUFBQTtBQUVELFlBQUEsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsRUFBRTtBQUNmLGdCQUFBLE9BQU8sQ0FBQyxLQUFLLENBQUMsVUFBVSxFQUFFLElBQUksQ0FBQyxDQUFDO0FBQ2hDLGFBQUE7QUFDRCxTQUFBOztBQUdELFFBQUEsTUFBTSxLQUFLLEdBQUcsT0FBTyxDQUFDLGdCQUFnQixDQUFDLE9BQU8sQ0FBQyxRQUFRLENBQUMsSUFBSSxFQUFFLElBQUksRUFBRSxpQkFBaUIsQ0FBQyxDQUFDLENBQUM7QUFDeEYsUUFBQSxNQUFNLEtBQUssR0FBRyxPQUFPLENBQUMsZ0JBQWdCLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxJQUFJLEVBQUUsSUFBSSxFQUFFLGlCQUFpQixDQUFDLENBQUMsQ0FBQztBQUN4RixRQUFBLE1BQU0sS0FBSyxHQUFHLE9BQU8sQ0FBQyxnQkFBZ0IsQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLElBQUksRUFBRSxJQUFJLEVBQUUsaUJBQWlCLENBQUMsQ0FBQyxDQUFDOztRQUd4RixJQUFJLFNBQVMsR0FBRyxJQUFJLENBQUM7UUFDckIsSUFBSSxTQUFTLEdBQUcsSUFBSSxDQUFDO1FBQ3JCLElBQUksT0FBTyxHQUFHLEtBQUssQ0FBQztRQUNwQixJQUFJLEtBQUssR0FBRyxPQUFPLEVBQUU7WUFDcEIsT0FBTyxHQUFHLEtBQUssQ0FBQztZQUNoQixTQUFTLEdBQUcsSUFBSSxDQUFDO1lBQ2pCLFNBQVMsR0FBRyxJQUFJLENBQUM7QUFDakIsU0FBQTtRQUNELElBQUksS0FBSyxHQUFHLE9BQU8sRUFBRTtZQUNwQixPQUFPLEdBQUcsS0FBSyxDQUFDO1lBQ2hCLFNBQVMsR0FBRyxJQUFJLENBQUM7WUFDakIsU0FBUyxHQUFHLElBQUksQ0FBQztBQUNqQixTQUFBOztRQUdELE1BQU0sWUFBWSxHQUFHLHNCQUFzQixDQUFDO0FBQzVDLFFBQUEsWUFBWSxDQUFDLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxDQUFDLEdBQUcsU0FBUyxDQUFDLENBQUMsSUFBSSxHQUFHLENBQUM7QUFDbkQsUUFBQSxZQUFZLENBQUMsQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDLENBQUMsR0FBRyxTQUFTLENBQUMsQ0FBQyxJQUFJLEdBQUcsQ0FBQztBQUNuRCxRQUFBLFlBQVksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsQ0FBQyxHQUFHLFNBQVMsQ0FBQyxDQUFDLElBQUksR0FBRyxDQUFDOztBQUduRCxRQUFBLElBQUksYUFBYSxHQUFHLE9BQU8sQ0FBQyxnQkFBZ0IsQ0FBQyxPQUFPLENBQUMsUUFBUSxDQUFDLFNBQVMsRUFBRSxZQUFZLEVBQUUsaUJBQWlCLENBQUMsQ0FBQyxDQUFDO1FBQzNHLElBQUksWUFBWSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsYUFBYSxDQUFDLENBQUM7O1FBRzVDLE1BQU0sUUFBUSxHQUFHLGtCQUFrQixDQUFDO0FBQ3BDLFFBQUEsUUFBUSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDO0FBQ3BCLFFBQUEsUUFBUSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDO0FBQ3BCLFFBQUEsUUFBUSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDO1FBRXBCLE1BQU0sUUFBUSxHQUFHLGtCQUFrQixDQUFDO0FBQ3BDLFFBQUEsUUFBUSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDO0FBQ3BCLFFBQUEsUUFBUSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDO0FBQ3BCLFFBQUEsUUFBUSxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDO0FBRXBCLFFBQUEsTUFBTSxXQUFXLEdBQUcsT0FBTyxDQUFDLFFBQVEsQ0FBQyxRQUFRLEVBQUUsUUFBUSxFQUFFLDRCQUE0QixDQUFDLENBQUM7O1FBR3ZGLElBQUksV0FBVyxHQUFHLENBQUMsQ0FBQztRQUNwQixLQUFLLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLFdBQVcsRUFBRSxDQUFDLElBQUksTUFBTSxFQUFFO1lBQ3pDLFVBQVUsQ0FBQyxDQUFDLEdBQUcsU0FBUyxDQUFDLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUM7QUFDdkMsWUFBQSxVQUFVLENBQUMsQ0FBQyxHQUFHLFNBQVMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQztBQUMzQyxZQUFBLFVBQVUsQ0FBQyxDQUFDLEdBQUcsU0FBUyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDOztBQUczQyxZQUFBLE1BQU0sQ0FBQyxHQUFHLE9BQU8sQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLFFBQVEsQ0FBQyxVQUFVLEVBQUUsV0FBVyxFQUFFLGlCQUFpQixDQUFDLENBQUMsQ0FBQztZQUMxRixJQUFJLENBQUMsR0FBRyxXQUFXLEVBQUU7Z0JBQ3BCLFdBQVcsR0FBRyxDQUFDLENBQUM7QUFDaEIsYUFBQTs7QUFHRCxZQUFBLE1BQU0sdUJBQXVCLEdBQUcsT0FBTyxDQUFDLGdCQUFnQixDQUN2RCxPQUFPLENBQUMsUUFBUSxDQUFDLFVBQVUsRUFBRSxZQUFZLEVBQUUsaUJBQWlCLENBQUMsQ0FDN0QsQ0FBQztZQUNGLElBQUksdUJBQXVCLEdBQUcsYUFBYSxFQUFFO2dCQUM1QyxNQUFNLGdCQUFnQixHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsdUJBQXVCLENBQUMsQ0FBQzs7Z0JBRTVELFlBQVksR0FBRyxDQUFDLFlBQVksR0FBRyxnQkFBZ0IsSUFBSSxHQUFHLENBQUM7QUFDdkQsZ0JBQUEsYUFBYSxHQUFHLFlBQVksR0FBRyxZQUFZLENBQUM7O0FBRTVDLGdCQUFBLE1BQU0sUUFBUSxHQUFHLGdCQUFnQixHQUFHLFlBQVksQ0FBQztBQUNqRCxnQkFBQSxZQUFZLENBQUMsQ0FBQyxHQUFHLENBQUMsWUFBWSxHQUFHLFlBQVksQ0FBQyxDQUFDLEdBQUcsUUFBUSxHQUFHLFVBQVUsQ0FBQyxDQUFDLElBQUksZ0JBQWdCLENBQUM7QUFDOUYsZ0JBQUEsWUFBWSxDQUFDLENBQUMsR0FBRyxDQUFDLFlBQVksR0FBRyxZQUFZLENBQUMsQ0FBQyxHQUFHLFFBQVEsR0FBRyxVQUFVLENBQUMsQ0FBQyxJQUFJLGdCQUFnQixDQUFDO0FBQzlGLGdCQUFBLFlBQVksQ0FBQyxDQUFDLEdBQUcsQ0FBQyxZQUFZLEdBQUcsWUFBWSxDQUFDLENBQUMsR0FBRyxRQUFRLEdBQUcsVUFBVSxDQUFDLENBQUMsSUFBSSxnQkFBZ0IsQ0FBQztBQUM5RixhQUFBO0FBQ0QsU0FBQTtRQUVELElBQUksWUFBWSxHQUFHLFdBQVcsRUFBRTtZQUMvQixPQUFPLENBQUMsS0FBSyxDQUFDLFlBQVksRUFBRSxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUM7QUFDM0MsWUFBQSxNQUFNLENBQUMsTUFBTSxHQUFHLFlBQVksQ0FBQztBQUM3QixTQUFBO0FBQU0sYUFBQTtZQUNOLE9BQU8sQ0FBQyxLQUFLLENBQUMsV0FBVyxFQUFFLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQztBQUMxQyxZQUFBLE1BQU0sQ0FBQyxNQUFNLEdBQUcsV0FBVyxDQUFDO0FBQzVCLFNBQUE7QUFFRCxRQUFBLE9BQU8sTUFBTSxDQUFDO0tBQ2Q7QUFFRCxJQUFBLGNBQWMsQ0FBQyxLQUFZLEVBQUE7QUFDMUIsUUFBQSxNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsTUFBTSxDQUFDO0FBQzNCLFFBQUEsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQztBQUMzQixRQUFBLE1BQU0sTUFBTSxHQUFHLEtBQUssQ0FBQyxNQUFNLENBQUM7QUFDNUIsUUFBQSxNQUFNLGVBQWUsR0FBRyxPQUFPLENBQUMsR0FBRyxDQUFDLE1BQU0sRUFBRSxNQUFNLENBQUMsR0FBRyxLQUFLLENBQUMsUUFBUSxDQUFDO0FBRXJFLFFBQUEsSUFBSSxlQUFlLEdBQUcsQ0FBQyxNQUFNLEVBQUU7O1lBRTlCLE9BQU8sU0FBUyxDQUFDLE9BQU8sQ0FBQztBQUN6QixTQUFBO2FBQU0sSUFBSSxlQUFlLEdBQUcsTUFBTSxFQUFFOztZQUVwQyxPQUFPLFNBQVMsQ0FBQyxZQUFZLENBQUM7QUFDOUIsU0FBQTtRQUNELE9BQU8sU0FBUyxDQUFDLE1BQU0sQ0FBQztLQUN4QjtBQUNELElBQUEsTUFBTSxDQUFDLFNBQWtCLEVBQUE7QUFDeEIsUUFBQSxPQUFPLENBQUMsZUFBZSxDQUFDLFNBQVMsRUFBRSxJQUFJLENBQUMsWUFBWSxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztBQUNuRSxRQUFBLElBQUksQ0FBQyxNQUFNLEdBQUcsT0FBTyxDQUFDLGVBQWUsQ0FBQyxTQUFTLENBQUMsR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDO0tBQ3JFO0FBQ0QsSUFBQSxnQkFBZ0IsQ0FBQyxNQUFjLEVBQUE7UUFDOUIsT0FBTyxJQUFJLENBQUMsR0FBRyxDQUFDLEdBQUcsRUFBRSxPQUFPLENBQUMsUUFBUSxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsTUFBTSxDQUFDLFFBQVEsQ0FBQyxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztLQUNuRjtBQUNELENBQUE7QUFDRCxNQUFNLGNBQWMsR0FBRyxJQUFJLE9BQU8sRUFBRSxDQUFDO0FBQ3JDLE1BQU0sY0FBYyxHQUFHLElBQUksT0FBTyxFQUFFLENBQUM7QUFDckMsTUFBTSxjQUFjLEdBQUcsSUFBSSxPQUFPLEVBQUUsQ0FBQztBQUNyQyxNQUFNLGNBQWMsR0FBRyxJQUFJLE9BQU8sRUFBRSxDQUFDO0FBQ3JDLE1BQU0sY0FBYyxHQUFHLElBQUksT0FBTyxFQUFFLENBQUM7QUFDckMsTUFBTSxjQUFjLEdBQUcsSUFBSSxPQUFPLEVBQUUsQ0FBQztBQUNyQyxNQUFNLG9CQUFvQixHQUFHLElBQUksT0FBTyxFQUFFLENBQUM7QUFDM0MsTUFBTSxpQkFBaUIsR0FBRyxJQUFJLE9BQU8sRUFBRSxDQUFDO0FBQ3hDLE1BQU0sc0JBQXNCLEdBQUcsSUFBSSxPQUFPLEVBQUUsQ0FBQztBQUM3QyxNQUFNLGtCQUFrQixHQUFHLElBQUksT0FBTyxFQUFFLENBQUM7QUFDekMsTUFBTSxrQkFBa0IsR0FBRyxJQUFJLE9BQU8sRUFBRSxDQUFDO0FBQ3pDLE1BQU0sNEJBQTRCLEdBQUcsSUFBSSxPQUFPLEVBQUU7O0FDL1dwQyxNQUFPLFdBQVcsQ0FBQTtJQU0vQixXQUFZLENBQUEsS0FBYSxFQUFFLE9BQW9CLEVBQUE7QUFDOUMsUUFBQSxJQUFJLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQztBQUNuQixRQUFBLElBQUksQ0FBQyxPQUFPLEdBQUcsT0FBTyxDQUFDO0FBQ3ZCLFFBQUEsSUFBSSxDQUFDLFdBQVcsR0FBRyxPQUFPLFlBQVksV0FBVyxHQUFHLFdBQVcsQ0FBQyxNQUFNLEdBQUcsV0FBVyxDQUFDLE1BQU0sQ0FBQztBQUM1RixRQUFBLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDO0tBQ2xCO0FBQ0QsSUFBQSxVQUFVLENBQUMsT0FBTyxFQUFBO0FBQ2pCLFFBQUEsSUFBSSxDQUFDLE9BQU8sR0FBRyxPQUFPLENBQUM7QUFDdkIsUUFBQSxJQUFJLENBQUMsV0FBVyxHQUFHLE9BQU8sWUFBWSxXQUFXLEdBQUcsV0FBVyxDQUFDLE1BQU0sR0FBRyxXQUFXLENBQUMsTUFBTSxDQUFDO0FBQzVGLFFBQUEsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUM7S0FDbEI7SUFDRCxJQUFJLENBQUMsTUFBaUIsRUFBRSxXQUFpQyxFQUFBO1FBQ3hELElBQUksSUFBSSxDQUFDLEtBQUssRUFBRTtBQUNmLFlBQUEsSUFBSSxDQUFDLEtBQUssR0FBRyxLQUFLLENBQUM7QUFDbkIsWUFBQSxJQUFJLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQyxpQkFBaUIsQ0FDckMsSUFBSSxDQUFDLEtBQUssRUFDVixNQUFNLEVBQ04sSUFBSSxDQUFDLE9BQU8sWUFBWSxLQUFLO2lCQUMzQixXQUFXLENBQUMsTUFBTSxHQUFHLElBQUksV0FBVyxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsR0FBRyxJQUFJLFdBQVcsQ0FBQyxJQUFJLENBQUMsT0FBTyxDQUFDO2dCQUNuRixJQUFJLENBQUMsT0FBTyxDQUFDLENBQUM7QUFDaEIsU0FBQTtBQUNELFFBQUEsV0FBVyxDQUFDLGNBQWMsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLFNBQVMsRUFBRSxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUM7S0FDcEU7SUFDRCxPQUFPLEdBQUE7QUFDTixRQUFBLElBQUksQ0FBQyxNQUFNLENBQUMsT0FBTyxFQUFFLENBQUM7S0FDdEI7QUFDRDs7QUNqQ2EsTUFBTyxVQUFVLENBQUE7SUFLOUIsV0FBWSxDQUFBLGNBQWMsR0FBRyxDQUFDLEVBQUE7QUFDN0IsUUFBQSxJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksR0FBRyxFQUFFLENBQUM7QUFDN0IsUUFBQSxJQUFJLENBQUMsY0FBYyxHQUFHLGNBQWMsQ0FBQztBQUNyQyxRQUFBLElBQUksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDO0FBQ2hCLFFBQUEsSUFBSSxDQUFDLFVBQVUsR0FBRyxLQUFLLENBQUM7S0FDeEI7QUFDRCxJQUFBLElBQUksS0FBSyxHQUFBO1FBQ1IsSUFBSSxNQUFNLEdBQUcsS0FBSyxDQUFDO0FBQ25CLFFBQUEsSUFBSSxDQUFDLFdBQVcsQ0FBQyxPQUFPLENBQUMsQ0FBQyxTQUFTLE1BQU0sQ0FBQyxNQUFNLElBQUksTUFBTSxHQUFHLFNBQVMsQ0FBQyxLQUFLLElBQUksS0FBSyxDQUFDLENBQUMsQ0FBQztBQUN4RixRQUFBLE9BQU8sTUFBTSxDQUFDO0tBQ2Q7SUFDRCxJQUFJLEtBQUssQ0FBQyxLQUFjLEVBQUE7QUFDdkIsUUFBQSxJQUFJLENBQUMsV0FBVyxDQUFDLE9BQU8sQ0FBQyxDQUFDLFNBQVMsTUFBTSxTQUFTLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUM7S0FDbkU7QUFDRCxJQUFBLElBQUksTUFBTSxHQUFBO1FBQ1QsT0FBTyxJQUFJLENBQUMsV0FBVyxDQUFDO0tBQ3hCO0FBQ0QsSUFBQSxZQUFZLENBQUMsSUFBSSxFQUFBO1FBQ2hCLE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7S0FDbEM7QUFDRCxJQUFBLFlBQVksQ0FBQyxTQUEyQyxFQUFBO0FBQ3ZELFFBQUEsSUFBSSxTQUFTLENBQUMsYUFBYSxLQUFLLGFBQWEsQ0FBQyxTQUFTLEVBQUU7QUFDeEQsWUFBQSxJQUFJLENBQUMsMEJBQTBCLENBQUMsU0FBc0IsQ0FBQyxDQUFDO0FBQ3hELFNBQUE7QUFBTSxhQUFBO0FBQ04sWUFBQSxJQUFJLENBQUMsdUJBQXVCLENBQUMsU0FBaUMsQ0FBQyxDQUFDO0FBQ2hFLFNBQUE7S0FDRDtBQUNPLElBQUEsMEJBQTBCLENBQUMsU0FBb0IsRUFBQTtRQUN0RCxJQUFJLElBQUksQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUM7WUFBRSxPQUFPO0FBQ2pELFFBQUEsU0FBUyxDQUFDLGNBQWMsR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDO0FBQy9DLFFBQUEsSUFBSSxDQUFDLGNBQWMsSUFBSSxDQUFDLENBQUM7QUFDekIsUUFBQSxTQUFTLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxNQUFNLENBQUM7QUFDL0IsUUFBQSxJQUFJLENBQUMsTUFBTSxJQUFJLFNBQVMsQ0FBQyxpQkFBaUIsQ0FBQztRQUMzQyxJQUFJLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsSUFBSSxFQUFFLFNBQVMsQ0FBQyxDQUFDO0tBQ2hEO0FBQ08sSUFBQSx1QkFBdUIsQ0FBQyxTQUErQixFQUFBO0FBQzlELFFBQUEsSUFBSSxJQUFJLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLFFBQVEsRUFBRSxDQUFDO1lBQUUsT0FBTztBQUM3RCxRQUFBLElBQUksQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxLQUFLLENBQUMsUUFBUSxFQUFFLEVBQUUsU0FBUyxDQUFDLENBQUM7S0FDNUQ7SUFDRCxtQkFBbUIsR0FBQTtRQUNsQixNQUFNLE1BQU0sR0FBRyxFQUFFLENBQUM7UUFDbEIsSUFBSSxDQUFDLFdBQVcsQ0FBQyxPQUFPLENBQUMsQ0FBQyxTQUFTLEtBQUk7WUFDdEMsTUFBTSxDQUFDLElBQUksQ0FBQyxHQUFHLFNBQVMsQ0FBQyxlQUFlLEVBQUUsQ0FBQyxDQUFDO0FBQzdDLFNBQUMsQ0FBQyxDQUFDO0FBQ0gsUUFBQSxPQUFPLE1BQU0sQ0FBQztLQUNkO0lBQ0Qsa0JBQWtCLEdBQUE7UUFLakIsTUFBTSxZQUFZLEdBQUcsRUFBRSxDQUFDO1FBQ3hCLElBQUksV0FBVyxHQUFHLENBQUMsQ0FBQztRQUNwQixJQUFJLE1BQU0sR0FBRyxTQUFTLENBQUM7UUFDdkIsSUFBSSxNQUFNLEdBQUcsSUFBSSxDQUFDO1FBQ2xCLE1BQU0sTUFBTSxHQUFHLEVBQUUsQ0FBQztRQUNsQixJQUFJLENBQUMsV0FBVyxDQUFDLE9BQU8sQ0FBQyxDQUFDLFNBQTJDLEtBQUk7QUFDeEUsWUFBQSxJQUFJLFNBQVMsQ0FBQyxhQUFhLEtBQUssYUFBYSxDQUFDLFNBQVMsRUFBRTtBQUN4RCxnQkFBQSxZQUFZLENBQUMsSUFBSSxDQUFFLFNBQXVCLENBQUMsUUFBUSxDQUFDLENBQUM7QUFDckQsZ0JBQUEsTUFBTSxDQUFDLElBQUksQ0FBQyxTQUFTLENBQUMsS0FBSyxDQUFDLENBQUM7QUFDN0IsZ0JBQUEsV0FBVyxJQUFLLFNBQXVCLENBQUMsUUFBUSxDQUFDO0FBQ2pELGFBQUE7QUFBTSxpQkFBQTtnQkFDTixJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVU7QUFBRSxvQkFBQSxJQUFJLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQztBQUM3QyxnQkFBQSxNQUFNLEdBQUcsTUFBTSxJQUFJLFNBQVMsQ0FBQyxLQUFLLENBQUM7QUFDbkMsZ0JBQUEsTUFBTSxHQUFJLFNBQW9DLEVBQUUsTUFBTSxDQUFDO2dCQUN2RCxXQUFXLEdBQUksU0FBa0MsQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUNqRSxDQUFDLEtBQUssRUFBRSxPQUFPLE1BQU0sS0FBSyxJQUFJLE9BQU8sQ0FBQyxFQUN0QyxDQUFDLENBQ0QsQ0FBQztBQUNGLGFBQUE7QUFDRixTQUFDLENBQUMsQ0FBQztBQUVILFFBQUEsTUFBTSxTQUFTLEdBQUcsSUFBSSxDQUFDLFVBQVU7QUFDaEMsY0FBRSxJQUFJLFlBQVksQ0FBQyxNQUFNLENBQUM7QUFDMUIsY0FBRSxJQUFJLENBQUMsb0JBQW9CLENBQUMsWUFBWSxFQUFFLFlBQVksRUFBRSxHQUFHLE1BQU0sQ0FBQyxDQUFDO1FBQ3BFLE9BQU87QUFDTixZQUFBLFdBQVcsRUFBRSxXQUFXLEdBQUcsU0FBUyxDQUFDLGlCQUFpQjtZQUN0RCxTQUFTO1lBQ1QsTUFBTTtTQUNOLENBQUM7S0FDRjtJQUNELE9BQU8sR0FBQTtRQUNOLElBQUksQ0FBQyxXQUFXLENBQUMsT0FBTyxDQUFDLENBQUMsU0FBUyxLQUFJO1lBQ3RDLFNBQVMsQ0FBQyxPQUFPLEVBQUUsQ0FBQztBQUNyQixTQUFDLENBQUMsQ0FBQztLQUNIO0FBQ0Q7Ozs7Ozs7QUFPRztBQUNILElBQUEsb0JBQW9CLENBQUMsaUJBQWlCLEVBQUUsUUFBUSxFQUFFLEdBQUcsTUFBTSxFQUFBO1FBQzFELE1BQU0sV0FBVyxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsQ0FBQyxLQUFLLEVBQUUsR0FBRyxLQUFLLEtBQUssR0FBRyxHQUFHLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQ3pFLFFBQUEsTUFBTSxNQUFNLEdBQUcsSUFBSSxpQkFBaUIsQ0FBQyxXQUFXLENBQUMsQ0FBQztBQUNsRCxRQUFBLE1BQU0sTUFBTSxHQUFHLFFBQVEsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztRQUVoRCxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsV0FBVyxFQUFFLENBQUMsRUFBRSxFQUFFO1lBQ3JDLElBQUksTUFBTSxHQUFHLENBQUMsQ0FBQztBQUNmLFlBQUEsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLFFBQVEsQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7QUFDekMsZ0JBQUEsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLFFBQVEsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsRUFBRTtvQkFDckMsTUFBTSxDQUFDLENBQUMsR0FBRyxNQUFNLEdBQUcsTUFBTSxDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLFFBQVEsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDN0Qsb0JBQUEsTUFBTSxFQUFFLENBQUM7QUFDVCxpQkFBQTtBQUNELGFBQUE7QUFDRCxTQUFBO0FBQ0QsUUFBQSxPQUFPLE1BQU0sQ0FBQztLQUNkO0FBQ0Q7O0FDaEhhLE1BQU8sWUFBWSxDQUFBOztBQVdoQyxJQUFBLFdBQUEsQ0FBWSxNQUEwQixFQUFBO0FBQ3JDLFFBQUEsTUFBTSxFQUFFLEtBQUssRUFBRSxLQUFLLEVBQUUsYUFBYSxHQUFHLENBQUMsRUFBRSxRQUFRLEdBQUcsYUFBYSxDQUFDLE1BQU0sRUFBRSxXQUFXLEVBQUUsR0FBRyxNQUFNLENBQUM7QUFDakcsUUFBQSxJQUFJLENBQUMsS0FBSyxHQUFHLEtBQUssSUFBSSxDQUFDLENBQUM7UUFDeEIsSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLFVBQVUsQ0FBQyxhQUFhLENBQUMsQ0FBQztBQUNoRCxRQUFBLElBQUksQ0FBQyxRQUFRLEdBQUcsUUFBUSxDQUFDO0FBQ3pCLFFBQUEsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUM7UUFDbEIsSUFBSSxDQUFDLEtBQUssR0FBRyxLQUFLLEVBQUUsTUFBTSxDQUFDLENBQUksQ0FBQSxFQUFBLEtBQUssQ0FBZSxhQUFBLENBQUEsQ0FBQyxDQUFDO0FBQ3JELFFBQUEsSUFBSSxDQUFDLFdBQVcsR0FBRyxXQUFXLENBQUM7QUFDL0IsUUFBQSxJQUFJLENBQUMsT0FBTyxHQUFHLEVBQUUsQ0FBQztBQUNsQixRQUFBLElBQUksQ0FBQyxhQUFhLEdBQUcsYUFBYSxDQUFDO0tBQ25DO0lBQ00sWUFBWSxHQUFBO0FBQ2xCLFFBQUEsTUFBTSxNQUFNLEdBQUc7WUFDZCxXQUFXLEVBQUUsSUFBSSxDQUFDLFdBQVc7WUFDN0IsUUFBUSxFQUFFLElBQUksQ0FBQyxRQUFRO0FBQ3ZCLFlBQUEsVUFBVSxFQUFFLElBQUksQ0FBQyxVQUFVLENBQUMsbUJBQW1CLEVBQUU7U0FDakQsQ0FBQztBQUNGLFFBQUEsT0FBTyxNQUFNLENBQUM7S0FDZDtBQUNNLElBQUEsWUFBWSxDQUFDLFNBQTJDLEVBQUE7QUFDOUQsUUFBQSxJQUFJLFNBQVMsQ0FBQyxhQUFhLEtBQUssYUFBYSxDQUFDLFNBQVMsRUFBRTtBQUN4RCxZQUFBLElBQUksQ0FBQyxnQkFBZ0IsQ0FBRSxTQUF1QixDQUFDLElBQUksQ0FBQyxDQUFDO0FBQ3JELFNBQUE7QUFBTSxhQUFBO0FBQ0wsWUFBQSxTQUF5QyxFQUFFLEtBQUssQ0FBQyxPQUFPLENBQUMsQ0FBQyxJQUFZLEtBQUssSUFBSSxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7QUFDekcsU0FBQTtBQUNELFFBQUEsSUFBSSxDQUFDLFVBQVUsQ0FBQyxZQUFZLENBQUMsU0FBUyxDQUFDLENBQUM7QUFDeEMsUUFBQSxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQztLQUNsQjtBQUNNLElBQUEsWUFBWSxDQUFDLElBQVksRUFBQTtRQUMvQixPQUFPLElBQUksQ0FBQyxVQUFVLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxDQUFDO0tBQzFDO0FBQ00sSUFBQSxnQkFBZ0IsQ0FBQyxJQUFZLEVBQUE7UUFDbkMsT0FBTyxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksRUFBRSxNQUFNLENBQUMsVUFBVSxDQUFDLENBQUMsSUFBSSxTQUFTLEdBQUcsSUFBSSxHQUFHLEtBQUssQ0FBQztLQUMxRTtJQUNNLElBQUksQ0FBQyxNQUFpQixFQUFFLFdBQWlDLEVBQUE7QUFDL0QsUUFBQSxJQUFJLElBQUksQ0FBQyxVQUFVLENBQUMsS0FBSyxFQUFFO0FBQzFCLFlBQUEsSUFBSSxDQUFDLFVBQVUsQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDO0FBQzlCLFlBQUEsTUFBTSxFQUFFLFdBQVcsRUFBRSxTQUFTLEVBQUUsTUFBTSxFQUFFLEdBQUcsSUFBSSxDQUFDLFVBQVUsQ0FBQyxrQkFBa0IsRUFBRSxDQUFDO0FBQ2hGLFlBQUEsSUFBSSxJQUFJLENBQUMsV0FBVyxLQUFLLFNBQVM7QUFBRSxnQkFBQSxJQUFJLENBQUMsV0FBVyxHQUFHLFdBQVcsQ0FBQztBQUNuRSxZQUFBLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFO0FBQ2pCLGdCQUFBLElBQUksQ0FBQyxNQUFNLEdBQUcsTUFBTSxJQUFJLE1BQU0sQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLE1BQU0sRUFBRSxTQUFTLENBQUMsQ0FBQztBQUNqRixhQUFBO0FBQU0saUJBQUE7O0FBRU4sZ0JBQUEsSUFBSSxTQUFTO29CQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLENBQUMsRUFBRSxTQUFTLENBQUMsQ0FBQztBQUNwRCxhQUFBO0FBQ0QsU0FBQTtBQUNELFFBQUEsV0FBVyxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLENBQUM7S0FDL0Q7QUFDTyxJQUFBLGdCQUFnQixDQUFDLElBQVksRUFBQTtBQUNwQyxRQUFBLElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLEVBQUUsTUFBTSxDQUFDLFVBQVUsQ0FBQyxDQUFDLElBQUksQ0FBQyxJQUFJO1lBQUUsT0FBTztBQUM1RCxRQUFBLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQyxVQUFVLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUM7QUFDNUQsUUFBQSxJQUFJLENBQUMsYUFBYSxJQUFJLENBQUMsQ0FBQztLQUN4QjtJQUNELE9BQU8sR0FBQTtBQUNOLFFBQUEsSUFBSSxDQUFDLE1BQU0sQ0FBQyxPQUFPLEVBQUUsQ0FBQztBQUN0QixRQUFBLElBQUksQ0FBQyxVQUFVLENBQUMsT0FBTyxFQUFFLENBQUM7S0FDMUI7QUFDRDs7QUN0RUQ7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7Ozs7OztBQThCRztBQUNILFNBQVMsT0FBTyxDQUFDLE9BQU8sRUFBRSxPQUFPLEVBQUUsSUFBSSxFQUFBO0FBQ3RDLElBQUEsSUFBSSxHQUFHLFlBQVksQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLENBQUM7SUFFakMsTUFBTSxNQUFNLEdBQUcsRUFBRSxDQUFDO0FBRWxCLElBQUEsTUFBTSxjQUFjLEdBQUcsT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFDO0FBQ3hDLElBQUEsTUFBTSxjQUFjLEdBQUcsT0FBTyxDQUFDLE9BQU8sQ0FBQyxDQUFDO0FBQ3hDLElBQUEsSUFBSSxRQUFRLENBQUM7QUFDYixJQUFBLElBQUksWUFBWSxDQUFDO0FBQ2pCLElBQUEsSUFBSSxZQUFZLENBQUM7QUFDakIsSUFBQSxJQUFJLGNBQWMsRUFBRTtRQUNuQixLQUFLLFFBQVEsSUFBSSxPQUFPLEVBQUU7QUFDekIsWUFBQSxJQUFJLE9BQU8sQ0FBQyxjQUFjLENBQUMsUUFBUSxDQUFDLEVBQUU7QUFDckMsZ0JBQUEsWUFBWSxHQUFHLE9BQU8sQ0FBQyxRQUFRLENBQUMsQ0FBQztBQUNqQyxnQkFBQSxJQUFJLGNBQWMsSUFBSSxJQUFJLElBQUksT0FBTyxZQUFZLEtBQUssUUFBUSxJQUFJLE9BQU8sQ0FBQyxjQUFjLENBQUMsUUFBUSxDQUFDLEVBQUU7QUFDbkcsb0JBQUEsWUFBWSxHQUFHLE9BQU8sQ0FBQyxRQUFRLENBQUMsQ0FBQztBQUNqQyxvQkFBQSxJQUFJLE9BQU8sWUFBWSxLQUFLLFFBQVEsRUFBRTtBQUNyQyx3QkFBQSxNQUFNLENBQUMsUUFBUSxDQUFDLEdBQUcsT0FBTyxDQUFDLFlBQVksRUFBRSxZQUFZLEVBQUUsSUFBSSxDQUFDLENBQUM7QUFDN0QscUJBQUE7QUFBTSx5QkFBQTtBQUNOLHdCQUFBLE1BQU0sQ0FBQyxRQUFRLENBQUMsR0FBRyxZQUFZLENBQUM7QUFDaEMscUJBQUE7QUFDRCxpQkFBQTtBQUFNLHFCQUFBO0FBQ04sb0JBQUEsTUFBTSxDQUFDLFFBQVEsQ0FBQyxHQUFHLFlBQVksQ0FBQztBQUNoQyxpQkFBQTtBQUNELGFBQUE7QUFDRCxTQUFBO0FBQ0QsS0FBQTtBQUNELElBQUEsSUFBSSxjQUFjLEVBQUU7UUFDbkIsS0FBSyxRQUFRLElBQUksT0FBTyxFQUFFO0FBQ3pCLFlBQUEsSUFBSSxPQUFPLENBQUMsY0FBYyxDQUFDLFFBQVEsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLGNBQWMsQ0FBQyxRQUFRLENBQUMsRUFBRTtBQUN6RSxnQkFBQSxZQUFZLEdBQUcsT0FBTyxDQUFDLFFBQVEsQ0FBQyxDQUFDO0FBQ2pDLGdCQUFBLE1BQU0sQ0FBQyxRQUFRLENBQUMsR0FBRyxZQUFZLENBQUM7QUFDaEMsYUFBQTtBQUNELFNBQUE7QUFDRCxLQUFBO0FBQ0QsSUFBQSxPQUFPLE1BQU0sQ0FBQztBQUNmOztBQzVEYyxNQUFPLFFBQVEsQ0FBQTtBQWdCNUIsSUFBQSxJQUFJLE9BQU8sR0FBQTtRQUNWLE9BQU8sTUFBTSxDQUFDLE1BQU0sQ0FBQyxFQUFFLEVBQUUsSUFBSSxDQUFDLFFBQVEsRUFBRSxHQUFHLElBQUksQ0FBQyxhQUFhLENBQUMsR0FBRyxDQUFDLENBQUMsWUFBWSxLQUFLLFlBQVksQ0FBQyxPQUFPLENBQUMsQ0FBQyxDQUFDO0tBQzNHO0lBQ0QsSUFBSSxPQUFPLENBQUMsS0FBSyxFQUFBO0FBQ2hCLFFBQUEsSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUM7QUFDekIsUUFBQSxJQUFJLENBQUMsUUFBUSxHQUFHLE9BQU8sQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLFFBQVEsRUFBRSxLQUFLLENBQUMsQ0FBQztLQUNyRDtBQUNELElBQUEsSUFBSSxvQkFBb0IsR0FBQTtBQUN2QixRQUFBLE9BQU8sSUFBSSxFQUFFLGFBQWEsRUFBRSxNQUFNLENBQ2pDLENBQUMsR0FBRyxFQUFFLE9BQU8sTUFBTSxPQUFPLENBQUMsYUFBYSxHQUFHLEdBQUcsSUFBSSxHQUFHLEdBQUcsT0FBTyxDQUFDLGFBQWEsSUFBSSxHQUFHLENBQUMsRUFDckYsQ0FBQyxDQUNELENBQUM7S0FDRjtBQUNELElBQUEsSUFBSSxpQkFBaUIsR0FBQTtBQUNwQixRQUFBLE9BQU8sSUFBSSxDQUFDLGFBQWEsQ0FBQyxNQUFNLENBQUM7S0FDakM7QUFDRCxJQUFBLFdBQUEsQ0FBWSxPQUEyQixFQUFBO1FBQ3RDLElBQUksQ0FBQyxJQUFJLEdBQUcsT0FBTyxDQUFDLElBQUksSUFBSSxTQUFTLENBQUM7QUFDdEMsUUFBQSxJQUFJLENBQUMsY0FBYyxHQUFHLFNBQVMsQ0FBQztBQUNoQyxRQUFBLElBQUksQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDO0FBQ25CLFFBQUEsSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUM7QUFDekIsUUFBQSxJQUFJLENBQUMsbUJBQW1CLEdBQUcsSUFBSSxZQUFZLENBQUM7WUFDM0MsS0FBSyxFQUFFLElBQUksQ0FBQyxJQUFJO0FBQ2hCLFlBQUEsS0FBSyxFQUFFLENBQUM7QUFDUixTQUFBLENBQUMsQ0FBQztRQUNILElBQUksQ0FBQyxhQUFhLEdBQUcsQ0FBQyxJQUFJLENBQUMsbUJBQW1CLENBQUMsQ0FBQztBQUNoRCxRQUFBLElBQUksQ0FBQyxRQUFRLEdBQUcsRUFBRSxDQUFDO0FBQ25CLFFBQUEsSUFBSSxDQUFDLE9BQU8sR0FBRyxFQUFFLENBQUM7QUFDbEIsUUFBQSxJQUFJLENBQUMsR0FBRyxHQUFHLEVBQUUsQ0FBQztBQUNkLFFBQUEsSUFBSSxDQUFDLFNBQVMsR0FBRyxFQUFFLENBQUM7QUFDcEIsUUFBQSxJQUFJLENBQUMsT0FBTyxHQUFHLEVBQUUsQ0FBQztBQUNsQixRQUFBLElBQUksQ0FBQyxRQUFRLEdBQUcsRUFBRSxDQUFDO0tBQ25CO0FBQ0QsSUFBQSxZQUFZLENBQUMsSUFBWSxFQUFBO1FBQ3hCLE9BQU8sSUFBSSxDQUFDLG1CQUFtQixDQUFDLFlBQVksQ0FBQyxJQUFJLENBQUMsQ0FBQztLQUNuRDtBQUNELElBQUEsWUFBWSxDQUFDLFNBQWtELEVBQUE7QUFDOUQsUUFBQSxJQUFJLENBQUMsbUJBQW1CLENBQUMsWUFBWSxDQUFDLFNBQVMsQ0FBQyxDQUFDO0tBQ2pEO0FBQ0QsSUFBQSxTQUFTLENBQUMsT0FBc0IsRUFBQTtBQUMvQixRQUFBLElBQUksQ0FBQyxPQUFPLEdBQUcsT0FBTyxDQUFDO1FBQ3ZCLElBQUksQ0FBQyxJQUFJLENBQUMsV0FBVztBQUFFLFlBQUEsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLFdBQVcsQ0FBQyxJQUFJLENBQUMsSUFBSSxHQUFHLGFBQWEsQ0FBQyxDQUFDO0FBQ3JGLFFBQUEsSUFBSSxDQUFDLFdBQVcsQ0FBQyxVQUFVLENBQUMsT0FBTyxDQUFDLENBQUM7S0FDckM7QUFDRCxJQUFBLE1BQU0sQ0FBQyxVQUFzQixFQUFBOztLQUU1QjtBQUNELElBQUEscUJBQXFCLENBQUMsU0FBbUIsRUFBRSxNQUFNLEdBQUcsQ0FBQyxFQUFBO1FBQ3BELElBQUksQ0FBQyxjQUFjLEdBQUcsY0FBYyxDQUFDLFlBQVksQ0FBQyxTQUFTLEVBQUUsSUFBSSxPQUFPLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxNQUFNLENBQUMsQ0FBQztLQUMzRjtBQUNEOzs7O0FBSUc7SUFDSCxpQkFBaUIsR0FBQTtRQUNoQixJQUFJLENBQUMsSUFBSSxDQUFDLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLEVBQUU7QUFDL0IsWUFBQSxNQUFNLHVDQUF1QyxDQUFDO0FBQzlDLFNBQUE7UUFDRCxNQUFNLEVBQUUsT0FBTyxFQUFFLFNBQVMsRUFBRSxPQUFPLEVBQUUsR0FBRyxFQUFFLEdBQUcsSUFBSSxDQUFDO0FBQ2xELFFBQUEsTUFBTSxRQUFRLEdBQUcsSUFBSSxPQUFPLEVBQUUsRUFDN0IsUUFBUSxHQUFHLElBQUksT0FBTyxFQUFFLEVBQ3hCLFFBQVEsR0FBRyxJQUFJLE9BQU8sRUFBRSxFQUN4QixPQUFPLEdBQUcsSUFBSSxPQUFPLEVBQUUsRUFDdkIsT0FBTyxHQUFHLElBQUksT0FBTyxFQUFFLEVBQ3ZCLE9BQU8sR0FBRyxJQUFJLE9BQU8sRUFBRSxDQUFDO0FBQ3pCLFFBQUEsTUFBTSxFQUFFLEdBQUcsSUFBSSxPQUFPLEVBQUUsRUFDdkIsRUFBRSxHQUFHLElBQUksT0FBTyxFQUFFLEVBQ2xCLENBQUMsR0FBRyxJQUFJLE9BQU8sRUFBRSxFQUNqQixDQUFDLEdBQUcsSUFBSSxPQUFPLEVBQUUsRUFDakIsSUFBSSxHQUFHLElBQUksT0FBTyxFQUFFLENBQUM7QUFDdEIsUUFBQSxNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQztBQUN4QyxRQUFBLE1BQU0sYUFBYSxHQUFHLE9BQU8sR0FBRyxPQUFPLENBQUMsTUFBTSxHQUFHLENBQUMsR0FBRyxTQUFTLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQztBQUMxRSxRQUFBLE1BQU0sUUFBUSxHQUFHLElBQUksS0FBSyxDQUFVLFdBQVcsQ0FBQyxDQUFDO0FBQ2pELFFBQUEsTUFBTSxVQUFVLEdBQUcsSUFBSSxLQUFLLENBQVUsV0FBVyxDQUFDLENBQUM7QUFDbkQsUUFBQSxJQUFJLENBQUMsUUFBUSxHQUFHLEVBQUUsQ0FBQztRQUNuQixLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsV0FBVyxFQUFFLENBQUMsRUFBRSxFQUFFO0FBQ3JDLFlBQUEsUUFBUSxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksT0FBTyxFQUFFLENBQUM7QUFDNUIsWUFBQSxVQUFVLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxPQUFPLEVBQUUsQ0FBQztBQUM5QixTQUFBOztRQUdELEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxhQUFhLEVBQUUsQ0FBQyxFQUFFLEVBQUU7QUFDdkMsWUFBQSxJQUFJLEVBQUUsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ2YsWUFBQSxJQUFJLEVBQUUsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNuQixZQUFBLElBQUksRUFBRSxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ25CLFlBQUEsSUFBSSxPQUFPLEVBQUU7QUFDWixnQkFBQSxFQUFFLEdBQUcsT0FBTyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ2pCLGdCQUFBLEVBQUUsR0FBRyxPQUFPLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDakIsZ0JBQUEsRUFBRSxHQUFHLE9BQU8sQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUNqQixhQUFBO1lBRUQsTUFBTSxFQUFFLEdBQUcsUUFBUSxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsRUFBRSxDQUFDLEVBQUUsU0FBUyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsRUFBRSxTQUFTLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDN0UsTUFBTSxFQUFFLEdBQUcsUUFBUSxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsRUFBRSxDQUFDLEVBQUUsU0FBUyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsRUFBRSxTQUFTLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDN0UsTUFBTSxFQUFFLEdBQUcsUUFBUSxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsRUFBRSxDQUFDLEVBQUUsU0FBUyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsRUFBRSxTQUFTLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDN0UsWUFBQSxNQUFNLEVBQUUsR0FBRyxPQUFPLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsRUFBRSxHQUFHLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDN0MsWUFBQSxNQUFNLEVBQUUsR0FBRyxPQUFPLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsRUFBRSxHQUFHLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDN0MsWUFBQSxNQUFNLEVBQUUsR0FBRyxPQUFPLENBQUMsR0FBRyxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsRUFBRSxHQUFHLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFFN0MsT0FBTyxDQUFDLFFBQVEsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDO1lBQzdCLE9BQU8sQ0FBQyxRQUFRLENBQUMsRUFBRSxFQUFFLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQztZQUM3QixNQUFNLEVBQUUsR0FBRyxFQUFFLENBQUMsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUM7WUFDdkIsTUFBTSxFQUFFLEdBQUcs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QUFHLE9BQU8sQ0FBQyxRQUFRLENBQUMsTUFBTSxFQUFFLGFBQWEsQ0FBQyxDQUFDO0FBRXRELFFBQUEsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDO0FBQ2hDLFFBQUEsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDO0FBQ2hDLFFBQUEsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDO0FBQ2hDLFFBQUEsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDO0FBRWhDLFFBQUEsT0FBTyxNQUFNLENBQUM7S0FDZDtBQUVELElBQUEsT0FBTyxRQUFRLENBQUMsSUFBYSxFQUFFLEtBQWMsRUFBRSxNQUFlLEVBQUE7UUFDN0QsTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQzVELE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUM1RCxNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDNUQsTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBRTVELFFBQUEsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLFdBQVcsQ0FBQztBQUN4QixRQUFBLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxXQUFXLENBQUM7QUFDeEIsUUFBQSxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsV0FBVyxDQUFDO0FBQ3hCLFFBQUEsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLFdBQVcsQ0FBQztBQUN4QixRQUFBLE9BQU8sTUFBTSxDQUFDO0tBQ2Q7QUFFRCxJQUFBLE9BQU8sR0FBRyxDQUFDLElBQWEsRUFBRSxLQUFjLEVBQUUsTUFBZSxFQUFBO0FBQ3hELFFBQUEsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDL0IsUUFBQSxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUMvQixRQUFBLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQy9CLFFBQUEsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDL0IsUUFBQSxPQUFPLE1BQU0sQ0FBQztLQUNkO0FBRUQsSUFBQSxPQUFPLFFBQVEsQ0FBQyxJQUFhLEVBQUUsS0FBYyxFQUFFLE1BQWUsRUFBQTtBQUM3RCxRQUFBLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQy9CLFFBQUEsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDL0IsUUFBQSxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUMvQixRQUFBLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQy9CLFFBQUEsT0FBTyxNQUFNLENBQUM7S0FDZDtBQUVELElBQUEsT0FBTyxnQkFBZ0IsQ0FBQyxNQUFlLEVBQUUsU0FBa0IsRUFBRSxNQUFlLEVBQUE7QUFDM0UsUUFBQSxNQUFNLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsU0FBUyxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsU0FBUyxDQUFDLENBQUMsQ0FBQztBQUM1RCxRQUFBLE1BQU0sQ0FBQyxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxTQUFTLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxTQUFTLENBQUMsQ0FBQyxDQUFDO0FBRTVELFFBQUEsTUFBTSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDYixRQUFBLE1BQU0sQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ2IsUUFBQSxPQUFPLE1BQU0sQ0FBQztLQUNkO0FBRUQsSUFBQSxPQUFPLGdCQUFnQixDQUFDLE1BQWUsRUFBRSxNQUFjLEVBQUUsTUFBZSxFQUFBO1FBQ3ZFLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDO1FBQy9CLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDO1FBQy9CLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDO1FBQy9CLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDO0FBQy9CLFFBQUEsT0FBTyxNQUFNLENBQUM7S0FDZDtBQUVELElBQUEsT0FBTyxlQUFlLENBQUMsTUFBZSxFQUFFLEtBQWMsRUFBRSxNQUFlLEVBQUE7QUFDdEUsUUFBQSxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUM7QUFDaEMsUUFBQSxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUM7QUFDaEMsUUFBQSxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUM7QUFDaEMsUUFBQSxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUM7QUFFaEMsUUFBQSxPQUFPLE1BQU0sQ0FBQztLQUNkO0FBRUQsSUFBQSxPQUFPLE1BQU0sQ0FBQyxNQUFlLEVBQUUsTUFBZSxFQUFBO1FBQzdDLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUN2QixNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDdkIsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3ZCLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN2QixRQUFBLE9BQU8sTUFBTSxDQUFDO0tBQ2Q7QUFFRCxJQUFBLE9BQU8sU0FBUyxDQUFDLE1BQWUsRUFBRSxNQUFlLEVBQUE7QUFDaEQsUUFBQSxNQUFNLFdBQVcsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDOUIsUUFBQSxNQUFNLFdBQVcsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDOUIsUUFBQSxNQUFNLFdBQVcsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDOUIsUUFBQSxNQUFNLFdBQVcsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFFOUIsUUFBQSxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsV0FBVyxDQUFDO0FBQ3hCLFFBQUEsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLFdBQVcsQ0FBQztBQUN4QixRQUFBLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxXQUFXLENBQUM7QUFDeEIsUUFBQSxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsV0FBVyxDQUFDO0FBQ3hCLFFBQUEsT0FBTyxNQUFNLENBQUM7S0FDZDtBQUVELElBQUEsT0FBTyxHQUFHLENBQUMsTUFBZSxFQUFFLE1BQWUsRUFBQTtBQUMxQyxRQUFBLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2hDLFFBQUEsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDaEMsUUFBQSxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNoQyxRQUFBLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBRWhDLFFBQUEsT0FBTyxNQUFNLENBQUM7S0FDZDtBQUVELElBQUEsT0FBTyxNQUFNLENBQUMsSUFBYSxFQUFFLEtBQWMsRUFBQTtRQUMxQyxRQUNDLElBQUksS0FBSyxLQUFLO2FBQ2IsT0FBTyxDQUFDLElBQUksQ0FBQztnQkFDYixPQUFPLENBQUMsS0FBSyxDQUFDO0FBQ2QsZ0JBQUEsSUFBSSxDQUFDLENBQUMsQ0FBQyxLQUFLLEtBQUssQ0FBQyxDQUFDLENBQUM7QUFDcEIsZ0JBQUEsSUFBSSxDQUFDLENBQUMsQ0FBQyxLQUFLLEtBQUssQ0FBQyxDQUFDLENBQUM7QUFDcEIsZ0JBQUEsSUFBSSxDQUFDLENBQUMsQ0FBQyxLQUFLLEtBQUssQ0FBQyxDQUFDLENBQUM7Z0JBQ3BCLElBQUksQ0FBQyxDQUFDLENBQUMsS0FBSyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsRUFDckI7S0FDRjtBQUVEOztBQUVHO0FBQ0gsSUFBQSxPQUFPLFdBQVcsQ0FBQyxNQUFlLEVBQUUsS0FBZSxFQUFFLE1BQWMsRUFBQTtRQUNsRSxRQUNDLE1BQU0sQ0FBQyxDQUFDLENBQUMsS0FBSyxLQUFLLENBQUMsTUFBTSxDQUFDO1lBQzNCLE1BQU0sQ0FBQyxDQUFDLENBQUMsS0FBSyxLQUFLLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQztZQUMvQixNQUFNLENBQUMsQ0FBQyxDQUFDLEtBQUssS0FBSyxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUM7WUFDL0IsTUFBTSxDQUFDLENBQUMsQ0FBQyxLQUFLLEtBQUssQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDLEVBQzlCO0tBQ0Y7SUFFRCxPQUFPLGFBQWEsQ0FBQyxJQUFhLEVBQUUsS0FBYyxFQUFFLE9BQU8sR0FBRyxDQUFDLEVBQUE7QUFDOUQsUUFBQSxPQUFPLEdBQUcsWUFBWSxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUMsQ0FBQztRQUNuQyxRQUNDLElBQUksS0FBSyxLQUFLO2FBQ2IsT0FBTyxDQUFDLElBQUksQ0FBQztnQkFDYixPQUFPLENBQUMsS0FBSyxDQUFDO0FBQ2QsZ0JBQUEsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksT0FBTztBQUN2QyxnQkFBQSxJQUFJLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxPQUFPO0FBQ3ZDLGdCQUFBLElBQUksQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLE9BQU87QUFDdkMsZ0JBQUEsSUFBSSxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksT0FBTyxDQUFDLEVBQ3hDO0tBQ0Y7QUFNRCxJQUFBLEtBQUssQ0FBQyxNQUFlLEVBQUE7UUFDcEIsT0FBTyxPQUFPLENBQUMsS0FBSyxDQUFDLElBQUksRUFBRSxNQUFNLENBQUMsQ0FBQztLQUNuQztBQUVELElBQUEsTUFBTSxDQUFDLEtBQWMsRUFBQTtRQUNwQixPQUFPLE9BQU8sQ0FBQyxNQUFNLENBQUMsSUFBSSxFQUFFLEtBQUssQ0FBQyxDQUFDO0tBQ25DO0FBRUQsSUFBQSxhQUFhLENBQUMsS0FBYyxFQUFFLE9BQU8sR0FBRyxDQUFDLEVBQUE7UUFDeEMsT0FBTyxPQUFPLENBQUMsYUFBYSxDQUFDLElBQUksRUFBRSxLQUFLLEVBQUUsT0FBTyxDQUFDLENBQUM7S0FDbkQ7SUFFRCxRQUFRLEdBQUE7UUFDUCxPQUFPLENBQUEsQ0FBQSxFQUFJLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBSyxFQUFBLEVBQUEsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFBLEdBQUEsQ0FBSyxHQUFHLENBQUksQ0FBQSxFQUFBLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQSxFQUFBLEVBQUssSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFBLENBQUEsQ0FBRyxDQUFDO0tBQ2pFOztBQWxCYSxPQUFBLENBQUEsUUFBUSxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsSUFBSSxPQUFPLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQztBQUUxRCxPQUFBLENBQUEsSUFBSSxHQUFHLE1BQU0sQ0FBQyxNQUFNLENBQUMsSUFBSSxPQUFPLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQztBQWtCckUsTUFBTSxhQUFhLEdBQUcsSUFBSSxPQUFPLEVBQUUsQ0FBQztBQUNkLElBQUksT0FBTyxHQUFHO0FBQ3BDLE1BQU0sYUFBYSxHQUFHLElBQUksT0FBTyxFQUFFLENBQUM7QUFDcEMsTUFBTSxhQUFhLEdBQUcsSUFBSSxPQUFPLEVBQUUsQ0FBQztBQUNwQyxNQUFNLGFBQWEsR0FBRyxJQUFJLE9BQU8sRUFBRSxDQUFDO0FBQ3BDLE1BQU0sYUFBYSxHQUFHLElBQUksT0FBTyxFQUFFOztNQ2pUdEIsT0FBTyxDQUFBO0FBV25CLElBQUEsV0FBQSxDQUFZLFdBQW1CLEVBQUUsRUFBa0MsRUFBRSxNQUFlLEVBQUE7QUFDbkYsUUFBQSxJQUFJLENBQUMsSUFBSSxHQUFHLFdBQVcsQ0FBQztBQUN4QixRQUFBLElBQUksQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDO1FBQ2IsSUFBSSxDQUFDLE1BQU0sR0FBRyxZQUFZLENBQUMsTUFBTSxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQ3RDLFFBQUEsSUFBSSxDQUFDLElBQUksR0FBRyxRQUFRLENBQUM7S0FDckI7QUFDRCxJQUFBLFNBQVMsQ0FBQyxLQUFvQixFQUFFLE1BQU0sR0FBRyxDQUFDLEVBQUE7QUFDekMsUUFBQSxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsS0FBSyxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTtBQUN0QyxZQUFBLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNuQyxTQUFBO0tBQ0Q7SUFDRCxHQUFHLEdBQUE7QUFDRixRQUFBLE9BQU8sU0FBUyxDQUFDO0tBQ2pCO0lBQ0QsUUFBUSxHQUFBO0FBQ1AsUUFBQSxJQUFJLE1BQU0sQ0FBQztBQUNYLFFBQUEsTUFBTSxNQUFNLEdBQUcsT0FBTyxJQUFJLENBQUMsRUFBRSxDQUFDO0FBQzlCLFFBQUEsUUFBUSxNQUFNO0FBQ2IsWUFBQSxLQUFLLFFBQVE7QUFDWixnQkFBQSxNQUFNLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLElBQUksSUFBSSxDQUFDLEVBQUUsQ0FBQztnQkFDdkMsTUFBTTtBQUNQLFlBQUEsS0FBSyxVQUFVOztBQUVkLGdCQUFBLE1BQU0sR0FBRyxJQUFJLENBQUMsRUFBRSxFQUFFLENBQUM7Z0JBQ25CLE1BQU07QUFDUCxZQUFBLEtBQUssUUFBUTtBQUNaLGdCQUFBLE1BQU0sR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDO2dCQUNqQixNQUFNO0FBQ1AsWUFBQTtBQUNDLGdCQUFBLE1BQU0sSUFBSSxLQUFLLENBQUMsZUFBZSxDQUFDLENBQUM7QUFDbEMsU0FBQTtBQUNELFFBQUEsT0FBTyxNQUFNLENBQUM7S0FDZDs7QUFFRCxJQUFBLE1BQU0sQ0FBQyxDQUFDLEVBQUE7UUFDUCxJQUFLLElBQUksQ0FBQyxNQUF3QixDQUFDLE1BQU0sS0FBSyxDQUFDLENBQUMsTUFBTTtBQUFFLFlBQUEsT0FBTyxLQUFLLENBQUM7QUFDckUsUUFBQSxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTtZQUNsQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFO0FBQzVCLGdCQUFBLE9BQU8sS0FBSyxDQUFDO0FBQ2IsYUFBQTtBQUNELFNBQUE7QUFDRCxRQUFBLE9BQU8sSUFBSSxDQUFDO0tBQ1o7QUFDRCxDQUFBO0FBRUssTUFBTyxXQUFZLFNBQVEsT0FBZSxDQUFBO0lBRS9DLFdBQ0MsQ0FBQSxXQUFtQixFQUNuQixNQUFvQixFQUNwQixVQUFrQixFQUNsQixFQUFpQyxFQUNqQyxNQUFlLEVBQUE7QUFFZixRQUFBLEtBQUssQ0FBQyxXQUFXLEVBQUUsRUFBRSxFQUFFLE1BQU0sQ0FBQyxDQUFDO0FBQy9CLFFBQUEsSUFBSSxDQUFDLEtBQUssR0FBRyxTQUFTLENBQUM7QUFDdkIsUUFBQSxJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQztBQUNoQixRQUFBLElBQUksQ0FBQyxRQUFRLEdBQUcsQ0FBQyxDQUFDO0FBQ2xCLFFBQUEsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLFdBQVcsQ0FBQyxNQUFNLENBQUMsTUFBTSxFQUFFLFVBQVUsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUM1RCxRQUFBLElBQUksQ0FBQyxJQUFJLEdBQUcsTUFBTSxDQUFDO0tBQ25CO0lBQ0QsR0FBRyxHQUFBO0FBQ0YsUUFBQSxJQUFJLElBQUksQ0FBQyxFQUFFLElBQUksU0FBUztBQUFFLFlBQUEsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7QUFDdkQsUUFBQSxJQUFJLElBQUksQ0FBQyxLQUFLLEtBQUssSUFBSSxDQUFDLE1BQU0sRUFBRTtBQUMvQixZQUFBLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQztZQUN6QixJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7QUFDNUIsWUFBQSxPQUFPLElBQUksQ0FBQztBQUNaLFNBQUE7QUFDRCxRQUFBLE9BQU8sS0FBSyxDQUFDO0tBQ2I7O0FBdkJNLFdBQUssQ0FBQSxLQUFBLEdBQUcsQ0FBQyxDQUFDO0FBMEJaLE1BQU8sWUFBYSxTQUFRLE9BQWUsQ0FBQTtJQUVoRCxXQUNDLENBQUEsV0FBbUIsRUFDbkIsTUFBb0IsRUFDcEIsVUFBa0IsRUFDbEIsRUFBaUMsRUFDakMsTUFBZSxFQUFBO0FBRWYsUUFBQSxLQUFLLENBQUMsV0FBVyxFQUFFLEVBQUUsRUFBRSxNQUFNLENBQUMsQ0FBQztBQUMvQixRQUFBLElBQUksQ0FBQyxLQUFLLEdBQUcsU0FBUyxDQUFDO0FBQ3ZCLFFBQUEsSUFBSSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUM7QUFDaEIsUUFBQSxJQUFJLENBQUMsUUFBUSxHQUFHLENBQUMsQ0FBQztBQUNsQixRQUFBLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxZQUFZLENBQUMsTUFBTSxDQUFDLE1BQU0sRUFBRSxVQUFVLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDN0QsUUFBQSxJQUFJLENBQUMsSUFBSSxHQUFHLE1BQU0sQ0FBQztLQUNuQjtJQUNELEdBQUcsR0FBQTtBQUNGLFFBQUEsSUFBSSxJQUFJLENBQUMsRUFBRSxJQUFJLFNBQVM7QUFBRSxZQUFBLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO0FBQ3ZELFFBQUEsSUFBSSxJQUFJLENBQUMsS0FBSyxLQUFLLElBQUksQ0FBQyxNQUFNLEVBQUU7QUFDL0IsWUFBQSxJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7WUFDekIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO0FBQzVCLFlBQUEsT0FBTyxJQUFJLENBQUM7QUFDWixTQUFBO0FBQ0QsUUFBQSxPQUFPLEtBQUssQ0FBQztLQUNiOztBQXZCTSxZQUFLLENBQUEsS0FBQSxHQUFHLENBQUMsQ0FBQztBQXlCWixNQUFPLGdCQUFpQixTQUFRLE9BQWdCLENBQUE7SUFFckQsV0FDQyxDQUFBLFdBQW1CLEVBQ25CLE1BQW9CLEVBQ3BCLFVBQWtCLEVBQ2xCLEVBQWlDLEVBQ2pDLE1BQWUsRUFBQTtBQUVmLFFBQUEsS0FBSyxDQUFDLFdBQVcsRUFBRSxFQUFFLEVBQUUsTUFBTSxDQUFDLENBQUM7QUFDL0IsUUFBQSxJQUFJLENBQUMsS0FBSyxHQUFHLFNBQVMsQ0FBQztBQUN2QixRQUFBLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxPQUFPLEVBQUUsQ0FBQztBQUM1QixRQUFBLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxZQUFZLENBQUMsTUFBTSxDQUFDLE1BQU0sRUFBRSxVQUFVLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDN0QsUUFBQSxJQUFJLENBQUMsUUFBUSxHQUFHLENBQUMsQ0FBQztBQUNsQixRQUFBLElBQUksQ0FBQyxJQUFJLEdBQUcsTUFBTSxDQUFDO0tBQ25CO0lBQ0QsR0FBRyxHQUFBO0FBQ0YsUUFBQSxJQUFJLElBQUksQ0FBQyxFQUFFLElBQUksU0FBUztBQUFFLFlBQUEsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7QUFDdkQsUUFBQSxNQUFNLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO1FBQ3JCLElBQUksQ0FBQyxZQUFZLE9BQU8sRUFBRTtZQUN6QixJQUFJLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUM7QUFBRSxnQkFBQSxPQUFPLEtBQUssQ0FBQztZQUNqRCxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7WUFDOUIsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUM7QUFDdEMsWUFBQSxPQUFPLElBQUksQ0FBQztBQUNaLFNBQUE7QUFBTSxhQUFBO0FBQ04sWUFBQSxJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO0FBQUUsZ0JBQUEsT0FBTyxLQUFLLENBQUM7QUFDakMsWUFBQSxJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQztBQUNoQixZQUFBLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDbEIsWUFBQSxPQUFPLElBQUksQ0FBQztBQUNaLFNBQUE7S0FDRDs7QUE3Qk0sZ0JBQUssQ0FBQSxLQUFBLEdBQUcsQ0FBQyxDQUFDO0FBK0JaLE1BQU8sZ0JBQWlCLFNBQVEsT0FBZ0IsQ0FBQTtJQUVyRCxXQUNDLENBQUEsV0FBbUIsRUFDbkIsTUFBb0IsRUFDcEIsVUFBa0IsRUFDbEIsRUFBaUMsRUFDakMsTUFBZSxFQUFBO0FBRWYsUUFBQSxLQUFLLENBQUMsV0FBVyxFQUFFLEVBQUUsRUFBRSxNQUFNLENBQUMsQ0FBQztBQUMvQixRQUFBLElBQUksQ0FBQyxLQUFLLEdBQUcsU0FBUyxDQUFDO0FBQ3ZCLFFBQUEsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLE9BQU8sRUFBRSxDQUFDO0FBQzVCLFFBQUEsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLFlBQVksQ0FBQyxNQUFNLENBQUMsTUFBTSxFQUFFLFVBQVUsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUM3RCxRQUFBLElBQUksQ0FBQyxRQUFRLEdBQUcsRUFBRSxDQUFDO0FBQ25CLFFBQUEsSUFBSSxDQUFDLElBQUksR0FBRyxNQUFNLENBQUM7S0FDbkI7SUFDRCxHQUFHLEdBQUE7QUFDRixRQUFBLElBQUksSUFBSSxDQUFDLEVBQUUsSUFBSSxTQUFTO0FBQUUsWUFBQSxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztBQUN2RCxRQUFBLE1BQU0sQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7UUFDckIsSUFBSSxDQUFDLFlBQVksT0FBTyxFQUFFO1lBQ3pCLElBQUksT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQztBQUFFLGdCQUFBLE9BQU8sS0FBSyxDQUFDO1lBQ2pELE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztZQUM5QixJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQztBQUN0QyxZQUFBLE9BQU8sSUFBSSxDQUFDO0FBQ1osU0FBQTtBQUFNLGFBQUE7QUFDTixZQUFBLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7QUFBRSxnQkFBQSxPQUFPLEtBQUssQ0FBQztBQUNqQyxZQUFBLElBQUksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDO0FBQ2hCLFlBQUEsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNsQixZQUFBLE9BQU8sSUFBSSxDQUFDO0FBQ1osU0FBQTtLQUNEOztBQTdCTSxnQkFBSyxDQUFBLEtBQUEsR0FBRyxFQUFFLENBQUM7QUErQmIsTUFBTyxnQkFBaUIsU0FBUSxPQUFnQixDQUFBO0lBRXJELFdBQ0MsQ0FBQSxXQUFtQixFQUNuQixNQUFvQixFQUNwQixVQUFrQixFQUNsQixFQUFpQyxFQUNqQyxNQUFlLEVBQUE7QUFFZixRQUFBLEtBQUssQ0FBQyxXQUFXLEVBQUUsRUFBRSxFQUFFLE1BQU0sQ0FBQyxDQUFDO0FBQy9CLFFBQUEsSUFBSSxDQUFDLEtBQUssR0FBRyxTQUFTLENBQUM7QUFDdkIsUUFBQSxJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksT0FBTyxFQUFFLENBQUM7QUFDNUIsUUFBQSxJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksWUFBWSxDQUFDLE1BQU0sQ0FBQyxNQUFNLEVBQUUsVUFBVSxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQzdELFFBQUEsSUFBSSxDQUFDLFFBQVEsR0FBRyxFQUFFLENBQUM7QUFDbkIsUUFBQSxJQUFJLENBQUMsSUFBSSxHQUFHLE1BQU0sQ0FBQztLQUNuQjtJQUNELEdBQUcsR0FBQTtBQUNGLFFBQUEsSUFBSSxJQUFJLENBQUMsRUFBRSxJQUFJLFNBQVM7QUFBRSxZQUFBLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO0FBQ3ZELFFBQUEsTUFBTSxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQztRQUNyQixJQUFJLENBQUMsWUFBWSxPQUFPLEVBQUU7WUFDekIsSUFBSSxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDO0FBQUUsZ0JBQUEsT0FBTyxLQUFLLENBQUM7WUFDakQsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1lBQzlCLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDO0FBQ3RDLFlBQUEsT0FBTyxJQUFJLENBQUM7QUFDWixTQUFBO0FBQU0sYUFBQTtBQUNOLFlBQUEsSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztBQUFFLGdCQUFBLE9BQU8sS0FBSyxDQUFDO0FBQ2pDLFlBQUEsSUFBSSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUM7QUFDaEIsWUFBQSxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2xCLFlBQUEsT0FBTyxJQUFJLENBQUM7QUFDWixTQUFBO0tBQ0Q7O0FBN0JNLGdCQUFLLENBQUEsS0FBQSxHQUFHLEVBQUUsQ0FBQztBQStCYixNQUFPLFlBQWEsU0FBUSxPQUFjLENBQUE7SUFFL0MsV0FDQyxDQUFBLFdBQW1CLEVBQ25CLE1BQW9CLEVBQ3BCLFVBQWtCLEVBQ2xCLEVBQWlDLEVBQ2pDLE1BQWUsRUFBQTtBQUVmLFFBQUEsS0FBSyxDQUFDLFdBQVcsRUFBRSxFQUFFLEVBQUUsTUFBTSxDQUFDLENBQUM7QUFDL0IsUUFBQSxJQUFJLENBQUMsS0FBSyxHQUFHLFNBQVMsQ0FBQztBQUN2QixRQUFBLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxLQUFLLEVBQUUsQ0FBQztBQUMxQixRQUFBLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxZQUFZLENBQUMsTUFBTSxDQUFDLE1BQU0sRUFBRSxVQUFVLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDN0QsUUFBQSxJQUFJLENBQUMsUUFBUSxHQUFHLEVBQUUsQ0FBQztBQUNuQixRQUFBLElBQUksQ0FBQyxJQUFJLEdBQUcsTUFBTSxDQUFDO0tBQ25CO0lBQ0QsR0FBRyxHQUFBO0FBQ0YsUUFBQSxJQUFJLElBQUksQ0FBQyxFQUFFLElBQUksU0FBUztBQUFFLFlBQUEsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7QUFDdkQsUUFBQSxNQUFNLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO1FBQ3JCLElBQUksQ0FBQyxZQUFZLEtBQUssRUFBRTtZQUN2QixJQUFJLEtBQUssQ0FBQyxNQUFNLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUM7QUFBRSxnQkFBQSxPQUFPLEtBQUssQ0FBQztZQUMvQyxLQUFLLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7WUFDNUIsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUM7QUFDdEMsWUFBQSxPQUFPLElBQUksQ0FBQztBQUNaLFNBQUE7QUFBTSxhQUFBO0FBQ04sWUFBQSxJQUFJLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDO0FBQUUsZ0JBQUEsT0FBTyxLQUFLLENBQUM7QUFDakMsWUFBQSxJQUFJLENBQUMsTUFBTSxHQUFHLENBQUMsQ0FBQztBQUNoQixZQUFBLElBQUksQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDbEIsWUFBQSxPQUFPLElBQUksQ0FBQztBQUNaLFNBQUE7S0FDRDs7QUE3Qk0sWUFBSyxDQUFBLEtBQUEsR0FBRyxFQUFFLENBQUM7QUFnQ2IsTUFBTyxXQUFZLFNBQVEsT0FBZ0IsQ0FBQTtJQUVoRCxXQUNDLENBQUEsV0FBbUIsRUFDbkIsTUFBb0IsRUFDcEIsVUFBa0IsRUFDbEIsRUFBaUMsRUFDakMsTUFBZSxFQUFBO0FBRWYsUUFBQSxLQUFLLENBQUMsV0FBVyxFQUFFLEVBQUUsRUFBRSxNQUFNLENBQUMsQ0FBQztBQUMvQixRQUFBLElBQUksQ0FBQyxLQUFLLEdBQUcsU0FBUyxDQUFDO0FBQ3ZCLFFBQUEsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLE9BQU8sRUFBRSxDQUFDO0FBQzVCLFFBQUEsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLFlBQVksQ0FBQyxNQUFNLENBQUMsTUFBTSxFQUFFLFVBQVUsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUM3RCxRQUFBLElBQUksQ0FBQyxRQUFRLEdBQUcsRUFBRSxDQUFDO0FBQ25CLFFBQUEsSUFBSSxDQUFDLElBQUksR0FBRyxNQUFNLENBQUM7S0FDbkI7SUFDRCxHQUFHLEdBQUE7QUFDRixRQUFBLElBQUksSUFBSSxDQUFDLEVBQUUsSUFBSSxTQUFTO0FBQUUsWUFBQSxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztBQUN2RCxRQUFBLE1BQU0sQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUM7UUFDckIsSUFBSSxDQUFDLFlBQVksT0FBTyxFQUFFO1lBQ3pCLElBQUksT0FBTyxDQUFDLE1BQU0sQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQztBQUFFLGdCQUFBLE9BQU8sS0FBSyxDQUFDO1lBQ2pELE9BQU8sQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztZQUM5QixJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsT0FBTyxFQUFFLENBQUMsQ0FBQztBQUN0QyxZQUFBLE9BQU8sSUFBSSxDQUFDO0FBQ1osU0FBQTtBQUFNLGFBQUE7QUFDTixZQUFBLElBQUksSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUM7QUFBRSxnQkFBQSxPQUFPLEtBQUssQ0FBQztBQUNqQyxZQUFBLElBQUksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDO0FBQ2hCLFlBQUEsSUFBSSxDQUFDLFNBQVMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNsQixZQUFBLE9BQU8sSUFBSSxDQUFDO0FBQ1osU0FBQTtLQUNEOztBQTdCTSxXQUFLLENBQUEsS0FBQSxHQUFHLENBQUMsQ0FBQztBQStCWixNQUFPLFdBQVksU0FBUSxPQUFnQixDQUFBO0lBRWhELFdBQ0MsQ0FBQSxXQUFtQixFQUNuQixNQUFvQixFQUNwQixVQUFrQixFQUNsQixFQUFpQyxFQUNqQyxNQUFlLEVBQUE7QUFFZixRQUFBLEtBQUssQ0FBQyxXQUFXLEVBQUUsRUFBRSxFQUFFLE1BQU0sQ0FBQyxDQUFDO0FBQy9CLFFBQUEsSUFBSSxDQUFDLEtBQUssR0FBRyxTQUFTLENBQUM7QUFDdkIsUUFBQSxJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksT0FBTyxFQUFFLENBQUM7QUFDNUIsUUFBQSxJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksWUFBWSxDQUFDLE1BQU0sQ0FBQyxNQUFNLEVBQUUsVUFBVSxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQzdELFFBQUEsSUFBSSxDQUFDLFFBQVEsR0FBRyxFQUFFLENBQUM7QUFDbkIsUUFBQSxJQUFJLENBQUMsSUFBSSxHQUFHLE1BQU0sQ0FBQztLQUNuQjtJQUNELEdBQUcsR0FBQTtBQUNGLFFBQUEsSUFBSSxJQUFJLENBQUMsRUFBRSxJQUFJLFNBQVM7QUFBRSxZQUFBLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxDQUFDLFFBQVEsRUFBRSxDQUFDO0FBQ3ZELFFBQUEsTUFBTSxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQztRQUNyQixJQUFJLENBQUMsWUFBWSxPQUFPLEVBQUU7WUFDekIsSUFBSSxPQUFPLENBQUMsTUFBTSxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDO0FBQUUsZ0JBQUEsT0FBTyxLQUFLLENBQUM7WUFDakQsT0FBTyxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO1lBQzlCLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxPQUFPLEVBQUUsQ0FBQyxDQUFDO0FBQ3RDLFlBQUEsT0FBTyxJQUFJLENBQUM7QUFDWixTQUFBO0FBQU0sYUFBQTtBQUNOLFlBQUEsSUFBSSxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQztBQUFFLGdCQUFBLE9BQU8sS0FBSyxDQUFDO0FBQ2pDLFlBQUEsSUFBSSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUM7QUFDaEIsWUFBQSxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2xCLFlBQUEsT0FBTyxJQUFJLENBQUM7QUFDWixTQUFBO0tBQ0Q7O0FBN0JNLFdBQUssQ0FBQSxLQUFBLEdBQUcsRUFBRSxDQUFDO0FBK0JiLE1BQU8sV0FBWSxTQUFRLE9BQWdCLENBQUE7SUFFaEQsV0FDQyxDQUFBLFdBQW1CLEVBQ25CLE1BQW9CLEVBQ3BCLFVBQWtCLEVBQ2xCLEVBQWlDLEVBQ2pDLE1BQWUsRUFBQTtBQUVmLFFBQUEsS0FBSyxDQUFDLFdBQVcsRUFBRSxFQUFFLEVBQUUsTUFBTSxDQUFDLENBQUM7QUFDL0IsUUFBQSxJQUFJLENBQUMsS0FBSyxHQUFHLFNBQVMsQ0FBQztBQUN2QixRQUFBLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxPQUFPLEVBQUUsQ0FBQztBQUM1QixRQUFBLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxZQUFZLENBQUMsTUFBTSxDQUFDLE1BQU0sRUFBRSxVQUFVLEVBQUUsRUFBRSxDQUFDLENBQUM7QUFDOUQsUUFBQSxJQUFJLENBQUMsUUFBUSxHQUFHLEVBQUUsQ0FBQztBQUNuQixRQUFBLElBQUksQ0FBQyxJQUFJLEdBQUcsTUFBTSxDQUFDO0tBQ25CO0lBQ0QsR0FBRyxHQUFBO0FBQ0YsUUFBQSxJQUFJLElBQUksQ0FBQyxFQUFFLElBQUksU0FBUztBQUFFLFlBQUEsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7QUFDdkQsUUFBQSxNQUFNLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDO1FBQ3JCLElBQUksQ0FBQyxZQUFZLE9BQU8sRUFBRTtZQUN6QixJQUFJLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQyxFQUFFLElBQUksQ0FBQyxNQUFNLENBQUM7QUFBRSxnQkFBQSxPQUFPLEtBQUssQ0FBQztZQUNqRCxPQUFPLENBQUMsS0FBSyxDQUFDLENBQUMsRUFBRSxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7WUFDOUIsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLE9BQU8sRUFBRSxDQUFDLENBQUM7QUFDdEMsWUFBQSxPQUFPLElBQUksQ0FBQztBQUNaLFNBQUE7QUFBTSxhQUFBOztBQUVOLFlBQUEsSUFBSSxDQUFDLE1BQU0sR0FBRyxDQUFDLENBQUM7QUFDaEIsWUFBQSxJQUFJLENBQUMsU0FBUyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2xCLFlBQUEsT0FBTyxJQUFJLENBQUM7QUFDWixTQUFBO0tBQ0Q7O0FBN0JNLFdBQUssQ0FBQSxLQUFBLEdBQUcsRUFBRSxDQUFDO0FBK0JiLE1BQU8sbUJBQW9CLFNBQVEsT0FBdUIsQ0FBQTtJQUUvRCxXQUNDLENBQUEsV0FBbUIsRUFDbkIsTUFBb0IsRUFDcEIsVUFBa0IsRUFDbEIsRUFBaUMsRUFDakMsS0FBYyxFQUFBO0FBRWQsUUFBQSxLQUFLLENBQUMsV0FBVyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUMxQixRQUFBLElBQUksQ0FBQyxRQUFRLEdBQUcsS0FBSyxHQUFHLEVBQUUsQ0FBQztBQUMzQixRQUFBLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxZQUFZLENBQUMsTUFBTSxDQUFDLE1BQU0sRUFBRSxVQUFVLEVBQUUsSUFBSSxDQUFDLFFBQVEsR0FBRyxDQUFDLENBQUMsQ0FBQztBQUM3RSxRQUFBLElBQUksQ0FBQyxJQUFJLEdBQUcsWUFBWSxDQUFDO0tBQ3pCO0lBQ0QsR0FBRyxHQUFBO0FBQ0YsUUFBQSxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztRQUM3QixJQUFJLENBQUMsSUFBSSxDQUFDLEtBQUs7QUFBRSxZQUFBLE9BQU8sS0FBSyxDQUFDO0FBQzlCLFFBQUEsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFO0FBQzNDLFlBQUEsSUFBSSxDQUFDLFNBQVMsQ0FBQyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLE9BQU8sRUFBRSxFQUFFLENBQUMsR0FBRyxFQUFFLENBQUMsQ0FBQztBQUNoRCxTQUFBO0FBQ0QsUUFBQSxPQUFPLElBQUksQ0FBQztLQUNaOztBQXBCTSxtQkFBSyxDQUFBLEtBQUEsR0FBRyxFQUFFLENBQUM7QUFzQmIsTUFBTyxpQkFBa0IsU0FBUSxPQUFzQixDQUFBOztJQUc1RCxXQUNDLENBQUEsV0FBbUIsRUFDbkIsTUFBb0IsRUFDcEIsVUFBa0IsRUFDbEIsRUFBaUMsRUFDakMsS0FBYyxFQUFBO0FBRWQsUUFBQSxLQUFLLENBQUMsV0FBVyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUMxQixRQUFBLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxZQUFZLENBQUMsTUFBTSxDQUFDLE1BQU0sRUFBRSxVQUFVLEVBQUUsS0FBSyxDQUFDLENBQUM7QUFDakUsUUFBQSxJQUFJLENBQUMsUUFBUSxHQUFHLENBQUMsR0FBRyxLQUFLLENBQUM7QUFDMUIsUUFBQSxJQUFJLENBQUMsSUFBSSxHQUFHLGFBQWEsQ0FBQztLQUMxQjtJQUNELEdBQUcsR0FBQTtBQUNGLFFBQUEsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7QUFDN0IsUUFBQSxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7QUFDM0MsWUFBQSxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDL0IsU0FBQTtBQUNELFFBQUEsT0FBTyxJQUFJLENBQUM7S0FDWjs7QUFwQk0saUJBQUssQ0FBQSxLQUFBLEdBQUcsQ0FBQyxDQUFDO0FBc0JaLE1BQU8sZ0JBQWlCLFNBQVEsT0FBdUIsQ0FBQTtJQUU1RCxXQUNDLENBQUEsV0FBbUIsRUFDbkIsTUFBb0IsRUFDcEIsVUFBa0IsRUFDbEIsRUFBaUMsRUFDakMsS0FBYyxFQUFBO0FBRWQsUUFBQSxLQUFLLENBQUMsV0FBVyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUMxQixRQUFBLElBQUksQ0FBQyxRQUFRLEdBQUcsS0FBSyxHQUFHLENBQUMsQ0FBQztBQUMxQixRQUFBLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxZQUFZLENBQUMsTUFBTSxDQUFDLE1BQU0sRUFBRSxVQUFVLEVBQUUsSUFBSSxDQUFDLFFBQVEsR0FBRyxDQUFDLENBQUMsQ0FBQztBQUM3RSxRQUFBLElBQUksQ0FBQyxJQUFJLEdBQUcsWUFBWSxDQUFDO0tBQ3pCO0lBQ0QsR0FBRyxHQUFBOztBQUVGLFFBQUEsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7UUFDN0IsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ1YsUUFBQSxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7QUFDM0MsWUFBQSxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2pDLFlBQUEsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7WUFDckMsQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUNQLFNBQUE7QUFDRCxRQUFBLE9BQU8sSUFBSSxDQUFDO0tBQ1o7O0FBdkJNLGdCQUFLLENBQUEsS0FBQSxHQUFHLENBQUMsQ0FBQztBQXlCWixNQUFPLGdCQUFpQixTQUFRLE9BQXVCLENBQUE7O0lBRzVELFdBQ0MsQ0FBQSxXQUFtQixFQUNuQixNQUFvQixFQUNwQixVQUFrQixFQUNsQixFQUFpQyxFQUNqQyxLQUFjLEVBQUE7QUFFZCxRQUFBLEtBQUssQ0FBQyxXQUFXLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQzFCLFFBQUEsSUFBSSxDQUFDLFFBQVEsR0FBRyxLQUFLLEdBQUcsRUFBRSxDQUFDO0FBQzNCLFFBQUEsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLFlBQVksQ0FBQyxNQUFNLENBQUMsTUFBTSxFQUFFLFVBQVUsRUFBRSxJQUFJLENBQUMsUUFBUSxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQzdFLFFBQUEsSUFBSSxDQUFDLElBQUksR0FBRyxZQUFZLENBQUM7S0FDekI7SUFDRCxHQUFHLEdBQUE7O0FBRUYsUUFBQSxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztRQUM3QixJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDVixRQUFBLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTtBQUMzQyxZQUFBLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDakMsWUFBQSxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNyQyxZQUFBLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ3JDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUN2QixDQUFDLElBQUksQ0FBQyxDQUFDO0FBQ1AsU0FBQTtBQUNELFFBQUEsT0FBTyxJQUFJLENBQUM7S0FDWjs7QUExQk0sZ0JBQUssQ0FBQSxLQUFBLEdBQUcsRUFBRSxDQUFDO0FBNEJiLE1BQU8sZ0JBQWlCLFNBQVEsT0FBdUIsQ0FBQTs7SUFHNUQsV0FDQyxDQUFBLFdBQW1CLEVBQ25CLE1BQW9CLEVBQ3BCLFVBQWtCLEVBQ2xCLEVBQWlDLEVBQ2pDLEtBQWMsRUFBQTtBQUVkLFFBQUEsS0FBSyxDQUFDLFdBQVcsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDMUIsUUFBQSxJQUFJLENBQUMsUUFBUSxHQUFHLEtBQUssR0FBRyxFQUFFLENBQUM7QUFDM0IsUUFBQSxJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksWUFBWSxDQUFDLE1BQU0sQ0FBQyxNQUFNLEVBQUUsVUFBVSxFQUFFLElBQUksQ0FBQyxRQUFRLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDN0UsUUFBQSxJQUFJLENBQUMsSUFBSSxHQUFHLFlBQVksQ0FBQztLQUN6QjtJQUNELEdBQUcsR0FBQTtBQUNGLFFBQUEsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7UUFDN0IsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ1YsUUFBQSxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxNQUFNLEVBQUUsQ0FBQyxFQUFFLEVBQUU7QUFDM0MsWUFBQSxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2pDLFlBQUEsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDckMsWUFBQSxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNyQyxZQUFBLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO1lBQ3JDLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDUCxTQUFBO0FBQ0QsUUFBQSxPQUFPLElBQUksQ0FBQztLQUNaOztBQXpCTSxnQkFBSyxDQUFBLEtBQUEsR0FBRyxFQUFFLENBQUM7QUEyQmIsTUFBTyxjQUFlLFNBQVEsT0FBZ0IsQ0FBQTtJQVNuRCxXQUNDLENBQUEsV0FBbUIsRUFDbkIsT0FBZSxFQUNmLE9BQThCLEVBQzlCLElBQWEsRUFDYixVQUF3QixFQUN4QixXQUE0QixFQUFBO0FBRTVCLFFBQUEsS0FBSyxDQUFDLFdBQVcsRUFBRSxTQUFTLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDakMsUUFBQSxJQUFJLENBQUMsT0FBTyxHQUFHLE9BQU8sQ0FBQztBQUN2QixRQUFBLElBQUksQ0FBQyxVQUFVLEdBQUcsWUFBWSxDQUFDLFVBQVUsRUFBRSxXQUFXLENBQUMsTUFBTSxHQUFHLFdBQVcsQ0FBQyxRQUFRLENBQUMsQ0FBQztBQUN0RixRQUFBLElBQUksQ0FBQyxXQUFXLEdBQUcsV0FBVyxDQUFDO0FBQy9CLFFBQUEsSUFBSSxDQUFDLElBQUksR0FBRyxJQUFJLElBQUksU0FBUyxDQUFDO0FBQzlCLFFBQUEsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLENBQUM7QUFDdEIsUUFBQSxJQUFJLENBQUMsUUFBUSxHQUFHLE9BQU8sQ0FBQztLQUN4QjtBQUNELElBQUEsSUFBSSxVQUFVLEdBQUE7QUFDYixRQUFBLE9BQU8sSUFBSSxDQUFDLE9BQU8sRUFBRSxVQUFVLElBQUksY0FBYyxDQUFDO0tBQ2xEO0FBQ0QsSUFBQSxJQUFJLHdCQUF3QixHQUFBO0FBQzNCLFFBQUEsT0FBTyxJQUFJLENBQUMsT0FBTyxFQUFFLHdCQUF3QixJQUFJLGNBQWMsQ0FBQztLQUNoRTtBQUNELElBQUEsSUFBSSxDQUFDLE1BQWlCLEVBQUE7UUFDckIsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRO1lBQUUsT0FBTztRQUMzQixJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxRQUFRLFlBQVksUUFBUSxHQUFHLElBQUksQ0FBQyxRQUFRLEVBQUUsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDO0FBQ25GLFFBQUEsSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLENBQUM7S0FDNUI7QUFDRCxDQUFBO0FBQ0ssTUFBTyxjQUFlLFNBQVEsT0FBZ0IsQ0FBQTtBQVFuRCxJQUFBLFdBQUEsQ0FBWSxXQUFtQixFQUFFLE9BQWUsRUFBRSxPQUE4QixFQUFFLFVBQXdCLEVBQUE7QUFDekcsUUFBQSxLQUFLLENBQUMsV0FBVyxFQUFFLFNBQVMsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUNqQyxRQUFBLElBQUksQ0FBQyxVQUFVLEdBQUcsWUFBWSxDQUFDLFVBQVUsRUFBRSxXQUFXLENBQUMsTUFBTSxHQUFHLFdBQVcsQ0FBQyxRQUFRLENBQUMsQ0FBQztBQUN0RixRQUFBLElBQUksQ0FBQyxJQUFJLEdBQUcsV0FBVyxDQUFDO0FBQ3hCLFFBQUEsSUFBSSxDQUFDLE9BQU8sR0FBRyxPQUFPLENBQUM7QUFDdkIsUUFBQSxJQUFJLENBQUMsSUFBSSxHQUFHLFNBQVMsQ0FBQztBQUN0QixRQUFBLElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDO0FBQ3RCLFFBQUEsSUFBSSxDQUFDLFFBQVEsR0FBRyxPQUFPLENBQUM7S0FDeEI7QUFDRCxJQUFBLElBQUksVUFBVSxHQUFBO0FBQ2IsUUFBQSxPQUFPLElBQUksQ0FBQyxPQUFPLEVBQUUsVUFBVSxJQUFJLGNBQWMsQ0FBQztLQUNsRDtBQUNELElBQUEsSUFBSSxDQUFDLE1BQWlCLEVBQUE7UUFDckIsSUFBSSxDQUFDLE9BQU8sR0FBRyxJQUFJLENBQUMsUUFBUSxZQUFZLFFBQVEsR0FBRyxJQUFJLENBQUMsUUFBUSxFQUFFLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQztBQUNuRixRQUFBLElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0tBQzVCO0FBQ0QsQ0FBQTtBQUNLLE1BQU8sa0JBQW1CLFNBQVEsT0FBc0IsQ0FBQTtJQTJCN0QsV0FDQyxDQUFBLFdBQW1CLEVBQ25CLE1BQW9CLEVBQ3BCLFVBQWtCLEVBQ2xCLEVBQWlDLEVBQ2pDLE1BQWUsRUFBQTtBQUVmLFFBQUEsS0FBSyxDQUFDLFdBQVcsRUFBRSxFQUFFLEVBQUUsTUFBTSxDQUFDLENBQUM7QUFDL0IsUUFBQSxJQUFJLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQztBQUNiLFFBQUEsSUFBSSxDQUFDLElBQUksR0FBRyxjQUFjLENBQUM7QUFDM0IsUUFBQSxJQUFJLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQztBQUNuQixRQUFBLElBQUksQ0FBQyxVQUFVLEdBQUcsVUFBVSxDQUFDO0FBQzdCLFFBQUEsSUFBSSxDQUFDLFlBQVksR0FBRyxNQUFNLENBQUM7S0FDM0I7SUFDRCxHQUFHLEdBQUE7O0FBRUYsUUFBQSxJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztBQUNuQyxRQUFBLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxDQUFDLGFBQWEsRUFBRSxDQUFDO1FBQ3JDLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxZQUFZLENBQUMsSUFBSSxDQUFDLFlBQVksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLFVBQVUsRUFBRSxJQUFJLENBQUMsUUFBUSxHQUFHLENBQUMsQ0FBQyxDQUFDO1FBQzdGLElBQUksQ0FBQyxVQUFVLEVBQUUsQ0FBQztBQUNsQixRQUFBLE9BQU8sSUFBSSxDQUFDO0tBQ1o7SUFDTyxVQUFVLEdBQUE7UUFDakIsSUFBSSxDQUFDLFdBQVcsQ0FBQyxPQUFPLENBQUMsQ0FBQyxNQUFNLEtBQUk7WUFDbkMsTUFBTSxJQUFJLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQztBQUNqQyxZQUFBLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxHQUFHLEtBQUk7QUFDcEIsZ0JBQUEsTUFBTSxJQUFJLEdBQUcsS0FBSyxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLEVBQUUsS0FBSyxDQUFDO0FBQzdDLHNCQUFFLE1BQU0sQ0FBQyxHQUFHLENBQUMsRUFBRSxLQUFLO0FBQ3BCLHNCQUFFLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxFQUFFLEtBQWEsRUFBQyxPQUFPLEVBQUUsQ0FBQztBQUN6QyxnQkFBQSxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksRUFBRSxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUM7QUFDM0QsYUFBQyxDQUFDLENBQUM7QUFDSixTQUFDLENBQUMsQ0FBQztLQUNIO0lBQ08sYUFBYSxHQUFBO1FBQ3BCLElBQUksVUFBVSxHQUFHLENBQUMsQ0FBQztRQUNuQixJQUFJLENBQUMsV0FBVyxDQUFDLE9BQU8sQ0FBQyxDQUFDLE1BQU0sS0FBSTtZQUNuQyxNQUFNLElBQUksR0FBRyxNQUFNLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDO0FBQ2pDLFlBQUEsSUFBSSxDQUFDLE9BQU8sQ0FBQyxDQUFDLEdBQUcsS0FBSTtBQUNwQixnQkFBQSxVQUFVLElBQUksYUFBYSxDQUFDLGtCQUFrQixDQUFDLFVBQVUsRUFBRSxrQkFBa0IsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUM7QUFDeEcsZ0JBQUEsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLE1BQU0sR0FBRyxVQUFVLENBQUM7QUFDaEMsZ0JBQUEsSUFBSSxDQUFDLFVBQVUsSUFBSSxrQkFBa0IsQ0FBQyxTQUFTLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQ25FLGFBQUMsQ0FBQyxDQUFDO0FBQ0osU0FBQyxDQUFDLENBQUM7QUFDSCxRQUFBLE9BQU8sVUFBVSxDQUFDO0tBQ2xCOztBQXRFTSxrQkFBSyxDQUFBLEtBQUEsR0FBRyxFQUFFLENBQUM7QUFDWCxrQkFBQSxDQUFBLE1BQU0sR0FBRztBQUNmLElBQUEsQ0FBQyxXQUFXLENBQUMsV0FBVyxHQUFHLENBQUM7QUFDNUIsSUFBQSxDQUFDLFdBQVcsQ0FBQyxLQUFLLEdBQUcsQ0FBQztBQUN0QixJQUFBLENBQUMsV0FBVyxDQUFDLFNBQVMsR0FBRyxDQUFDO0FBQzFCLElBQUEsQ0FBQyxXQUFXLENBQUMsU0FBUyxHQUFHLEVBQUU7QUFDM0IsSUFBQSxDQUFDLFdBQVcsQ0FBQyxTQUFTLEdBQUcsRUFBRTtBQUMzQixJQUFBLENBQUMsV0FBVyxDQUFDLElBQUksR0FBRyxDQUFDO0FBQ3JCLElBQUEsQ0FBQyxXQUFXLENBQUMsSUFBSSxHQUFHLEVBQUU7QUFDdEIsSUFBQSxDQUFDLFdBQVcsQ0FBQyxJQUFJLEdBQUcsRUFBRTtBQUN0QixJQUFBLENBQUMsV0FBVyxDQUFDLEtBQUssR0FBRyxFQUFFO0NBQ3ZCLENBQUM7QUFDSyxrQkFBQSxDQUFBLFNBQVMsR0FBRztBQUNsQixJQUFBLENBQUMsV0FBVyxDQUFDLFdBQVcsR0FBRyxDQUFDO0FBQzVCLElBQUEsQ0FBQyxXQUFXLENBQUMsS0FBSyxHQUFHLENBQUM7QUFDdEIsSUFBQSxDQUFDLFdBQVcsQ0FBQyxTQUFTLEdBQUcsQ0FBQztBQUMxQixJQUFBLENBQUMsV0FBVyxDQUFDLFNBQVMsR0FBRyxFQUFFO0FBQzNCLElBQUEsQ0FBQyxXQUFXLENBQUMsU0FBUyxHQUFHLEVBQUU7QUFDM0IsSUFBQSxDQUFDLFdBQVcsQ0FBQyxJQUFJLEdBQUcsRUFBRTtBQUN0QixJQUFBLENBQUMsV0FBVyxDQUFDLElBQUksR0FBRyxFQUFFO0FBQ3RCLElBQUEsQ0FBQyxXQUFXLENBQUMsSUFBSSxHQUFHLEVBQUU7QUFDdEIsSUFBQSxDQUFDLFdBQVcsQ0FBQyxLQUFLLEdBQUcsRUFBRTtDQUN2QixDQUFDO0FBa0RHLE1BQU8saUJBQWtCLFNBQVEsT0FBa0IsQ0FBQTs7SUFJeEQsV0FDQyxDQUFBLFdBQW1CLEVBQ25CLE1BQW9CLEVBQ3BCLFVBQWtCLEVBQ2xCLEVBQWlDLEVBQ2pDLEtBQWMsRUFBQTtBQUVkLFFBQUEsS0FBSyxDQUFDLFdBQVcsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDMUIsUUFBQSxJQUFJLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQztBQUNiLFFBQUEsSUFBSSxDQUFDLFFBQVEsR0FBRyxLQUFLLEdBQUcsRUFBRSxDQUFDO0FBQzNCLFFBQUEsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLFlBQVksQ0FBQyxNQUFNLENBQUMsTUFBTSxFQUFFLFVBQVUsRUFBRSxJQUFJLENBQUMsUUFBUSxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQzdFLFFBQUEsSUFBSSxDQUFDLElBQUksR0FBRyxZQUFZLENBQUM7QUFDekIsUUFBQSxJQUFJLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQztLQUNuQjtJQUNELEdBQUcsR0FBQTtBQUNGLFFBQUEsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7UUFDOUIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQyxTQUFTLEVBQUUsS0FBSyxLQUFJO0FBQ3hDLFlBQUEsSUFBSSxDQUFDLFVBQVUsQ0FBQyxTQUFTLEVBQUUsS0FBSyxDQUFDLENBQUM7QUFDbkMsU0FBQyxDQUFDLENBQUM7UUFDSCxPQUFPLElBQUksQ0FBQyxLQUFLLENBQUM7S0FDbEI7SUFDTyxVQUFVLENBQUMsU0FBb0IsRUFBRSxLQUFhLEVBQUE7QUFDckQsUUFBQSxNQUFNLE1BQU0sR0FBRyxLQUFLLEdBQUcsRUFBRSxDQUFDO1FBQzFCLElBQUksU0FBUyxDQUFDLGFBQWEsRUFBRTtZQUM1QixJQUFJLENBQUMsS0FBSyxHQUFHLGtCQUFrQixDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsU0FBUyxDQUFDLFFBQVEsQ0FBQyxPQUFPLEVBQUUsRUFBRSxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDdkYsU0FBQTtRQUNELElBQUksU0FBUyxDQUFDLGFBQWEsRUFBRTtBQUM1QixZQUFBLElBQUksQ0FBQyxLQUFLLEdBQUcsa0JBQWtCLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxTQUFTLENBQUMsUUFBUSxFQUFFLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQztBQUM3RSxTQUFBO1FBQ0QsSUFBSSxTQUFTLENBQUMsWUFBWSxFQUFFO1lBQzNCLElBQUksQ0FBQyxLQUFLLEdBQUcsa0JBQWtCLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxTQUFTLENBQUMsV0FBVyxDQUFDLE9BQU8sRUFBRSxFQUFFLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQztBQUMxRixTQUFBO1FBQ0QsSUFBSSxTQUFTLENBQUMsWUFBWSxFQUFFO0FBQzNCLFlBQUEsSUFBSSxDQUFDLEtBQUssR0FBRyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLFNBQVMsQ0FBQyxPQUFPLEVBQUUsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQzVFLFNBQUE7UUFDRCxJQUFJLFNBQVMsQ0FBQyxVQUFVLEVBQUU7WUFDekIsSUFBSSxDQUFDLEtBQUssR0FBRyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLFNBQVMsQ0FBQyxLQUFLLENBQUMsT0FBTyxFQUFFLEVBQUUsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQ3BGLFNBQUE7UUFDRCxJQUFJLFNBQVMsQ0FBQyxnQkFBZ0IsRUFBRTtBQUMvQixZQUFBLElBQUksQ0FBQyxLQUFLLEdBQUcsa0JBQWtCLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxTQUFTLENBQUMsV0FBVyxFQUFFLE1BQU0sR0FBRyxFQUFFLENBQUMsQ0FBQztBQUNqRixTQUFBO1FBQ0QsSUFBSSxTQUFTLENBQUMsVUFBVSxFQUFFO0FBQ3pCLFlBQUEsSUFBSSxDQUFDLEtBQUssR0FBRyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLFNBQVMsQ0FBQyxLQUFLLEVBQUUsTUFBTSxHQUFHLEVBQUUsQ0FBQyxDQUFDO0FBQzNFLFNBQUE7QUFFRCxRQUFBLFNBQVMsQ0FBQyxhQUFhLEdBQUcsS0FBSyxDQUFDO0FBQ2hDLFFBQUEsU0FBUyxDQUFDLGFBQWEsR0FBRyxLQUFLLENBQUM7QUFDaEMsUUFBQSxTQUFTLENBQUMsWUFBWSxHQUFHLEtBQUssQ0FBQztBQUMvQixRQUFBLFNBQVMsQ0FBQyxZQUFZLEdBQUcsS0FBSyxDQUFDO0FBQy9CLFFBQUEsU0FBUyxDQUFDLFVBQVUsR0FBRyxLQUFLLENBQUM7QUFDN0IsUUFBQSxTQUFTLENBQUMsZ0JBQWdCLEdBQUcsS0FBSyxDQUFDO0FBQ25DLFFBQUEsU0FBUyxDQUFDLFVBQVUsR0FBRyxLQUFLLENBQUM7S0FDN0I7O0FBdkRNLGlCQUFLLENBQUEsS0FBQSxHQUFHLEVBQUUsQ0FBQztBQTBEYixNQUFPLHVCQUF3QixTQUFRLE9BQWtCLENBQUE7SUFTOUQsV0FDQyxDQUFBLFdBQW1CLEVBQ25CLE1BQW9CLEVBQ3BCLFVBQWtCLEVBQ2xCLEVBQWlDLEVBQ2pDLEtBQWMsRUFBQTtBQUVkLFFBQUEsS0FBSyxDQUFDLFdBQVcsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDMUIsUUFBQSxNQUFNLGVBQWUsR0FBRyxZQUFZLENBQUMsaUJBQWlCLENBQUM7QUFDdkQsUUFBQSxJQUFJLENBQUMsWUFBWSxHQUFHLHVCQUF1QixDQUFDLFdBQVcsQ0FBQztRQUN4RCxJQUFJLENBQUMsUUFBUSxHQUFHLEtBQUssR0FBRyxJQUFJLENBQUMsWUFBWSxHQUFHLGVBQWUsQ0FBQztBQUM1RCxRQUFBLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxZQUFZLENBQUMsTUFBTSxDQUFDLE1BQU0sRUFBRSxVQUFVLEVBQUUsSUFBSSxDQUFDLFFBQVEsR0FBRyxDQUFDLENBQUMsQ0FBQztBQUM3RSxRQUFBLElBQUksQ0FBQyxJQUFJLEdBQUcsa0JBQWtCLENBQUM7QUFDL0IsUUFBQSxJQUFJLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQztBQUN2QixRQUFBLElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDO0tBQ3RCO0lBQ0QsR0FBRyxHQUFBO0FBQ0YsUUFBQSxJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztRQUM5QixJQUFJLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDLFNBQVMsRUFBRSxLQUFLLEtBQUk7QUFDeEMsWUFBQSxJQUFJLENBQUMsVUFBVSxDQUFDLFNBQVMsRUFBRSxLQUFLLENBQUMsQ0FBQztBQUNuQyxTQUFDLENBQUMsQ0FBQztRQUNILE9BQU8sSUFBSSxDQUFDLEtBQUssQ0FBQztLQUNsQjtJQUNPLFVBQVUsQ0FBQyxTQUFvQixFQUFFLEtBQWEsRUFBQTtBQUNyRCxRQUFBLE1BQU0sTUFBTSxHQUFHLEtBQUssR0FBRyxJQUFJLENBQUMsWUFBWSxDQUFDO0FBQ3pDLFFBQUEsSUFBSSxTQUFTLENBQUMsTUFBTSxDQUFDLGFBQWEsRUFBRTtBQUNuQyxZQUFBLFNBQVMsQ0FBQyxNQUFNLENBQUMsYUFBYSxHQUFHLEtBQUssQ0FBQztZQUN2QyxJQUFJLENBQUMsS0FBSyxHQUFHLGtCQUFrQixDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsU0FBUyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsUUFBUSxDQUFDLE9BQU8sRUFBRSxFQUFFLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQztBQUNyRyxTQUFBO1FBQ0QsTUFBTSxTQUFTLEdBQUcsU0FBUyxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDO0FBQy9DLFFBQUEsSUFBSSxTQUFTLElBQUksSUFBSSxDQUFDLFVBQVUsRUFBRTtBQUNqQyxZQUFBLElBQUksQ0FBQyxVQUFVLEdBQUcsU0FBUyxDQUFDO0FBQzVCLFlBQUEsSUFBSSxDQUFDLEtBQUssR0FBRyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxVQUFVLEVBQUUsTUFBTSxHQUFHLEVBQUUsQ0FBQyxDQUFDO0FBQzNFLFNBQUE7UUFDRCxNQUFNLFFBQVEsR0FBRyxTQUFTLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUM7QUFDN0MsUUFBQSxJQUFJLFFBQVEsSUFBSSxJQUFJLENBQUMsU0FBUyxFQUFFO0FBQy9CLFlBQUEsSUFBSSxDQUFDLFNBQVMsR0FBRyxRQUFRLENBQUM7QUFDMUIsWUFBQSxJQUFJLENBQUMsS0FBSyxHQUFHLGtCQUFrQixDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLFNBQVMsRUFBRSxNQUFNLEdBQUcsRUFBRSxDQUFDLENBQUM7QUFDMUUsU0FBQTtLQUNEOztBQS9DTSx1QkFBSyxDQUFBLEtBQUEsR0FBRyxFQUFFLENBQUM7QUFDWCx1QkFBVyxDQUFBLFdBQUEsR0FBRyxFQUFFLENBQUM7QUFnRG5CLE1BQU8sa0JBQW1CLFNBQVEsT0FBbUIsQ0FBQTs7SUFJMUQsV0FDQyxDQUFBLFdBQW1CLEVBQ25CLE1BQW9CLEVBQ3BCLFVBQWtCLEVBQ2xCLEVBQWlDLEVBQ2pDLEtBQWMsRUFBQTtBQUVkLFFBQUEsS0FBSyxDQUFDLFdBQVcsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDMUIsUUFBQSxJQUFJLENBQUMsUUFBUSxHQUFHLEtBQUssR0FBRyxFQUFFLENBQUM7QUFDM0IsUUFBQSxJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksWUFBWSxDQUFDLE1BQU0sQ0FBQyxNQUFNLEVBQUUsVUFBVSxFQUFFLElBQUksQ0FBQyxRQUFRLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDN0UsUUFBQSxJQUFJLENBQUMsSUFBSSxHQUFHLGFBQWEsQ0FBQztLQUMxQjtJQUNELEdBQUcsR0FBQTtBQUNGLFFBQUEsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7UUFDOUIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQyxVQUFVLEVBQUUsS0FBSyxLQUFJO0FBQ3pDLFlBQUEsSUFBSSxDQUFDLFVBQVUsQ0FBQyxVQUFVLEVBQUUsS0FBSyxDQUFDLENBQUM7QUFDcEMsU0FBQyxDQUFDLENBQUM7UUFDSCxPQUFPLElBQUksQ0FBQyxLQUFLLENBQUM7S0FDbEI7SUFDTyxVQUFVLENBQUMsVUFBc0IsRUFBRSxLQUFhLEVBQUE7QUFDdkQsUUFBQSxNQUFNLE1BQU0sR0FBRyxLQUFLLEdBQUcsQ0FBQyxDQUFDO1FBQ3pCLElBQUksVUFBVSxDQUFDLGFBQWEsRUFBRTtBQUM3QixZQUFBLFVBQVUsQ0FBQyxhQUFhLEdBQUcsS0FBSyxDQUFDO1lBQ2pDLElBQUksQ0FBQyxLQUFLLEdBQUcsa0JBQWtCLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxVQUFVLENBQUMsUUFBUSxDQUFDLE9BQU8sRUFBRSxFQUFFLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQztBQUN4RixTQUFBO1FBQ0QsSUFBSSxVQUFVLENBQUMsYUFBYSxFQUFFO0FBQzdCLFlBQUEsVUFBVSxDQUFDLGFBQWEsR0FBRyxLQUFLLENBQUM7QUFDakMsWUFBQSxJQUFJLENBQUMsS0FBSyxHQUFHLGtCQUFrQixDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsVUFBVSxDQUFDLFFBQVEsRUFBRSxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDOUUsU0FBQTtRQUNELElBQUksVUFBVSxDQUFDLFVBQVUsRUFBRTtBQUMxQixZQUFBLFVBQVUsQ0FBQyxVQUFVLEdBQUcsS0FBSyxDQUFDO1lBQzlCLElBQUksQ0FBQyxLQUFLLEdBQUcsa0JBQWtCLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxVQUFVLENBQUMsS0FBSyxDQUFDLE9BQU8sRUFBRSxFQUFFLE1BQU0sR0FBRyxDQUFDLENBQUMsQ0FBQztBQUNyRixTQUFBO1FBQ0QsSUFBSSxVQUFVLENBQUMsVUFBVSxFQUFFO0FBQzFCLFlBQUEsVUFBVSxDQUFDLFVBQVUsR0FBRyxLQUFLLENBQUM7QUFDOUIsWUFBQSxJQUFJLENBQUMsS0FBSyxHQUFHLGtCQUFrQixDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsVUFBVSxDQUFDLEtBQUssRUFBRSxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDM0UsU0FBQTtLQUNEOztBQXhDTSxrQkFBSyxDQUFBLEtBQUEsR0FBRyxFQUFFLENBQUM7QUEyQ2IsTUFBTyx3QkFBeUIsU0FBUSxPQUFtQixDQUFBO0lBU2hFLFdBQ0MsQ0FBQSxXQUFtQixFQUNuQixNQUFvQixFQUNwQixVQUFrQixFQUNsQixFQUFpQyxFQUNqQyxLQUFjLEVBQUE7QUFFZCxRQUFBLEtBQUssQ0FBQyxXQUFXLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQzFCLFFBQUEsTUFBTSxlQUFlLEdBQUcsWUFBWSxDQUFDLGlCQUFpQixDQUFDO0FBQ3ZELFFBQUEsSUFBSSxDQUFDLFlBQVksR0FBRyx3QkFBd0IsQ0FBQyxXQUFXLENBQUM7UUFDekQsSUFBSSxDQUFDLFFBQVEsR0FBRyxLQUFLLEdBQUcsZUFBZSxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUM7QUFDNUQsUUFBQSxJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksWUFBWSxDQUFDLE1BQU0sQ0FBQyxNQUFNLEVBQUUsVUFBVSxFQUFFLElBQUksQ0FBQyxRQUFRLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDN0UsUUFBQSxJQUFJLENBQUMsSUFBSSxHQUFHLG1CQUFtQixDQUFDO0FBQ2hDLFFBQUEsSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUM7QUFDdkIsUUFBQSxJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQztLQUN0QjtJQUNELEdBQUcsR0FBQTtBQUNGLFFBQUEsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7UUFDOUIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQyxVQUFVLEVBQUUsS0FBSyxLQUFJO0FBQ3pDLFlBQUEsSUFBSSxDQUFDLFVBQVUsQ0FBQyxVQUFVLEVBQUUsS0FBSyxDQUFDLENBQUM7QUFDcEMsU0FBQyxDQUFDLENBQUM7UUFDSCxPQUFPLElBQUksQ0FBQyxLQUFLLENBQUM7S0FDbEI7SUFDTyxVQUFVLENBQUMsVUFBc0IsRUFBRSxLQUFhLEVBQUE7QUFDdkQsUUFBQSxNQUFNLE1BQU0sR0FBRyxLQUFLLEdBQUcsSUFBSSxDQUFDLFlBQVksQ0FBQztBQUV6QyxRQUFBLElBQUksVUFBVSxDQUFDLE1BQU0sQ0FBQyxrQkFBa0IsRUFBRTtBQUN6QyxZQUFBLFVBQVUsQ0FBQyxNQUFNLENBQUMsa0JBQWtCLEdBQUcsS0FBSyxDQUFDO1lBQzdDLE1BQU0sYUFBYSxHQUFHLFVBQVUsQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLGFBQWEsQ0FBQztBQUM3RCxZQUFBLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxhQUFhLENBQUMsTUFBTSxFQUFFLENBQUMsRUFBRSxFQUFFO0FBQzlDLGdCQUFBLE1BQU0sUUFBUSxHQUFHLGFBQWEsQ0FBQyxDQUFDLENBQUMsQ0FBQztnQkFDbEMsSUFBSSxDQUFDLEtBQUssR0FBRyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLFFBQVEsQ0FBQyxPQUFPLEVBQUUsRUFBRSxNQUFNLEdBQUcsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQztBQUN0RixhQUFBO0FBQ0QsU0FBQTtBQUVELFFBQUEsSUFBSSxVQUFVLENBQUMsTUFBTSxDQUFDLGFBQWEsRUFBRTtBQUNwQyxZQUFBLFVBQVUsQ0FBQyxNQUFNLENBQUMsYUFBYSxHQUFHLEtBQUssQ0FBQztZQUN4QyxLQUFLLElBQUksQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFO0FBQzNCLGdCQUFBLElBQUksQ0FBQyxLQUFLLEdBQUcsa0JBQWtCLENBQzlCLElBQUksQ0FBQyxNQUFNLEVBQ1gsVUFBVSxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsQ0FBQyxDQUFDLENBQUMsT0FBTyxFQUFFLEVBQ3hDLE1BQU0sR0FBRyxFQUFFLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FDbkIsQ0FBQztBQUNGLGFBQUE7QUFDRCxTQUFBO1FBRUQsTUFBTSxTQUFTLEdBQUcsVUFBVSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDO0FBQ2hELFFBQUEsSUFBSSxTQUFTLElBQUksSUFBSSxDQUFDLFVBQVUsRUFBRTtBQUNqQyxZQUFBLElBQUksQ0FBQyxVQUFVLEdBQUcsU0FBUyxDQUFDO0FBQzVCLFlBQUEsSUFBSSxDQUFDLEtBQUssR0FBRyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLElBQUksQ0FBQyxVQUFVLEVBQUUsTUFBTSxHQUFHLEdBQUcsQ0FBQyxDQUFDO0FBQzVFLFNBQUE7UUFDRCxNQUFNLFFBQVEsR0FBRyxVQUFVLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUM7QUFDOUMsUUFBQSxJQUFJLFFBQVEsSUFBSSxJQUFJLENBQUMsU0FBUyxFQUFFO0FBQy9CLFlBQUEsSUFBSSxDQUFDLFNBQVMsR0FBRyxRQUFRLENBQUM7QUFDMUIsWUFBQSxJQUFJLENBQUMsS0FBSyxHQUFHLGtCQUFrQixDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLFNBQVMsRUFBRSxNQUFNLEdBQUcsR0FBRyxDQUFDLENBQUM7QUFDM0UsU0FBQTtLQUNEOztBQWhFTSx3QkFBSyxDQUFBLEtBQUEsR0FBRyxFQUFFLENBQUM7QUFDWCx3QkFBVyxDQUFBLFdBQUEsR0FBRyxHQUFHLENBQUM7QUFpRXBCLE1BQU8sb0JBQXFCLFNBQVEsT0FBeUIsQ0FBQTtJQUdsRSxXQUNDLENBQUEsV0FBbUIsRUFDbkIsTUFBb0IsRUFDcEIsVUFBa0IsRUFDbEIsRUFBaUMsRUFDakMsS0FBYyxFQUFBO0FBRWQsUUFBQSxLQUFLLENBQUMsV0FBVyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUMxQixRQUFBLElBQUksQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDO0FBQ2IsUUFBQSxJQUFJLENBQUMsUUFBUSxHQUFHLEtBQUssR0FBRyxFQUFFLENBQUM7QUFDM0IsUUFBQSxJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksWUFBWSxDQUFDLE1BQU0sQ0FBQyxNQUFNLEVBQUUsVUFBVSxFQUFFLElBQUksQ0FBQyxRQUFRLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDN0UsUUFBQSxJQUFJLENBQUMsSUFBSSxHQUFHLGVBQWUsQ0FBQztLQUM1QjtJQUNELEdBQUcsR0FBQTtBQUNGLFFBQUEsSUFBSSxDQUFDLE1BQU0sR0FBRyxJQUFJLENBQUMsUUFBUSxFQUFFLENBQUM7UUFDOUIsSUFBSSxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsQ0FBQyxnQkFBZ0IsRUFBRSxLQUFLLEtBQUk7QUFDL0MsWUFBQSxJQUFJLENBQUMsVUFBVSxDQUFDLGdCQUFnQixFQUFFLEtBQUssQ0FBQyxDQUFDO0FBQzFDLFNBQUMsQ0FBQyxDQUFDO1FBQ0gsT0FBTyxJQUFJLENBQUMsS0FBSyxDQUFDO0tBQ2xCO0lBQ08sVUFBVSxDQUFDLGdCQUFrQyxFQUFFLEtBQWEsRUFBQTtBQUNuRSxRQUFBLE1BQU0sTUFBTSxHQUFHLEtBQUssR0FBRyxDQUFDLENBQUM7UUFDekIsSUFBSSxnQkFBZ0IsQ0FBQyxZQUFZLEVBQUU7QUFDbEMsWUFBQSxnQkFBZ0IsQ0FBQyxZQUFZLEdBQUcsS0FBSyxDQUFDO1lBQ3RDLElBQUksQ0FBQyxLQUFLLEdBQUcsa0JBQWtCLENBQUMsSUFBSSxDQUFDLE1BQU0sRUFBRSxnQkFBZ0IsQ0FBQyxXQUFXLENBQUMsT0FBTyxFQUFFLEVBQUUsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQ2pHLFNBQUE7UUFDRCxJQUFJLGdCQUFnQixDQUFDLFVBQVUsRUFBRTtBQUNoQyxZQUFBLGdCQUFnQixDQUFDLFVBQVUsR0FBRyxLQUFLLENBQUM7WUFDcEMsSUFBSSxDQUFDLEtBQUssR0FBRyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsTUFBTSxFQUFFLGdCQUFnQixDQUFDLEtBQUssQ0FBQyxPQUFPLEVBQUUsRUFBRSxNQUFNLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDM0YsU0FBQTtLQUNEOztBQWhDTSxvQkFBSyxDQUFBLEtBQUEsR0FBRyxFQUFFLENBQUM7QUFtQ2IsTUFBTywwQkFBMkIsU0FBUSxPQUF5QixDQUFBO0lBTXhFLFdBQ0MsQ0FBQSxXQUFtQixFQUNuQixNQUFvQixFQUNwQixVQUFrQixFQUNsQixFQUFpQyxFQUNqQyxLQUFjLEVBQUE7QUFFZCxRQUFBLEtBQUssQ0FBQyxXQUFXLEVBQUUsRUFBRSxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQzFCLFFBQUEsTUFBTSxlQUFlLEdBQUcsWUFBWSxDQUFDLGlCQUFpQixDQUFDO0FBQ3ZELFFBQUEsSUFBSSxDQUFDLFlBQVksR0FBRywwQkFBMEIsQ0FBQyxXQUFXLENBQUM7UUFDM0QsSUFBSSxDQUFDLFFBQVEsR0FBRyxLQUFLLEdBQUcsZUFBZSxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUM7QUFDNUQsUUFBQSxJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksWUFBWSxDQUFDLE1BQU0sQ0FBQyxNQUFNLEVBQUUsVUFBVSxFQUFFLElBQUksQ0FBQyxRQUFRLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDN0UsUUFBQSxJQUFJLENBQUMsSUFBSSxHQUFHLHFCQUFxQixDQUFDO0tBQ2xDO0lBQ0QsR0FBRyxHQUFBO0FBQ0YsUUFBQSxJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztRQUM5QixJQUFJLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FBQyxDQUFDLGdCQUFnQixFQUFFLEtBQUssS0FBSTtBQUMvQyxZQUFBLElBQUksQ0FBQyxVQUFVLENBQUMsZ0JBQWdCLEVBQUUsS0FBSyxDQUFDLENBQUM7QUFDMUMsU0FBQyxDQUFDLENBQUM7UUFDSCxPQUFPLElBQUksQ0FBQyxLQUFLLENBQUM7S0FDbEI7SUFDTyxVQUFVLENBQUMsZ0JBQWtDLEVBQUUsS0FBYSxFQUFBO0FBQ25FLFFBQUEsTUFBTSxNQUFNLEdBQUcsS0FBSyxHQUFHLElBQUksQ0FBQyxZQUFZLENBQUM7QUFDekMsUUFBQSxJQUFJLGdCQUFnQixDQUFDLE1BQU0sQ0FBQyxhQUFhLEVBQUU7QUFDMUMsWUFBQSxnQkFBZ0IsQ0FBQyxNQUFNLENBQUMsYUFBYSxHQUFHLEtBQUssQ0FBQztZQUM5QyxJQUFJLENBQUMsS0FBSyxHQUFHLGtCQUFrQixDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsZ0JBQWdCLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxRQUFRLENBQUMsT0FBTyxFQUFFLEVBQUUsTUFBTSxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQzVHLFNBQUE7S0FDRDs7QUFoQ00sMEJBQUssQ0FBQSxLQUFBLEdBQUcsRUFBRSxDQUFDO0FBQ1gsMEJBQVcsQ0FBQSxXQUFBLEdBQUcsRUFBRSxDQUFDO0FBaUN6QixTQUFTLGtCQUFrQixDQUFDLE1BQU0sRUFBRSxJQUFJLEVBQUUsTUFBTSxFQUFBO0FBQy9DLElBQUEsSUFBSSxLQUFLLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxFQUFFO1FBQ3hCLElBQUksQ0FBQyxPQUFPLENBQUMsQ0FBQyxLQUFLLEVBQUUsS0FBSyxLQUFJO0FBQzdCLFlBQUEsTUFBTSxDQUFDLEtBQUssR0FBRyxNQUFNLENBQUMsR0FBRyxLQUFLLENBQUM7QUFDaEMsU0FBQyxDQUFDLENBQUM7QUFDSCxLQUFBO0FBQU0sU0FBQTtBQUNOLFFBQUEsTUFBTSxDQUFDLE1BQU0sQ0FBQyxHQUFHLElBQUksQ0FBQztBQUN0QixLQUFBO0FBQ0QsSUFBQSxPQUFPLElBQUksQ0FBQztBQUNiOztBQ3IzQmMsTUFBTyxhQUFhLENBQUE7QUF5Q2pDLElBQUEsV0FBQSxDQUFZLE9BQTRCLEVBQUE7UUFDdkMsSUFBSSxDQUFDLElBQUksR0FBRyxZQUFZLENBQUMsT0FBTyxDQUFDLElBQUksRUFBRSxTQUFTLENBQUMsQ0FBQztRQUNsRCxJQUFJLENBQUMsS0FBSyxHQUFHLFlBQVksQ0FBQyxPQUFPLENBQUMsS0FBSyxFQUFFLEVBQUUsQ0FBQyxDQUFDO1FBQzdDLElBQUksQ0FBQyxJQUFJLEdBQUcsWUFBWSxDQUFDLE9BQU8sQ0FBQyxLQUFLLEVBQUUsRUFBRSxDQUFDLENBQUM7UUFDNUMsSUFBSSxDQUFDLGdCQUFnQixHQUFHLE9BQU8sQ0FBQyxnQkFBZ0IsSUFBSSxLQUFLLENBQUM7UUFDMUQsSUFBSSxDQUFDLGNBQWMsR0FBRyxPQUFPLENBQUMsY0FBYyxJQUFJLENBQUMsQ0FBQztRQUNsRCxJQUFJLENBQUMsT0FBTyxHQUFHLE9BQU8sQ0FBQyxPQUFPLElBQUksQ0FBQyxDQUFDO0FBQ3BDLFFBQUEsSUFBSSxDQUFDLFVBQVUsR0FBRyxZQUFZLENBQUMsT0FBTyxDQUFDLFVBQVUsRUFBRSxXQUFXLENBQUMsUUFBUSxHQUFHLFdBQVcsQ0FBQyxNQUFNLENBQUMsQ0FBQztBQUM5RixRQUFBLElBQUksQ0FBQyxLQUFLLEdBQUcsWUFBWSxDQUFDLE9BQU8sQ0FBQyxLQUFLLEVBQUUsV0FBVyxDQUFDLE9BQU8sR0FBRyxXQUFXLENBQUMsT0FBTyxDQUFDLENBQUM7QUFDcEYsUUFBQSxJQUFJLENBQUMsY0FBYyxHQUFHLElBQUksR0FBRyxFQUFFLENBQUM7QUFDaEMsUUFBQSxJQUFJLENBQUMsWUFBWSxHQUFHLElBQUksQ0FBQztBQUN6QixRQUFBLElBQUksQ0FBQyxXQUFXLEdBQUcsT0FBTyxDQUFDLElBQUksQ0FBQztBQUNoQyxRQUFBLElBQUksQ0FBQyxNQUFNLEdBQUcsT0FBTyxDQUFDLE1BQU0sQ0FBQztBQUM3QixRQUFBLElBQUksQ0FBQyxNQUFNLEdBQUcsQ0FBQyxDQUFDO1FBQ2hCLElBQUksQ0FBQyxVQUFVLEdBQUcsWUFBWSxDQUFDLE9BQU8sQ0FBQyxVQUFVLEVBQUUsSUFBSSxZQUFZLENBQUMsWUFBWSxDQUFDLElBQUksQ0FBQyxXQUFXLEVBQUUsR0FBRyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzFHLFFBQUEsSUFBSSxDQUFDLFVBQVUsR0FBRyxDQUFDLENBQUM7QUFDcEIsUUFBQSxJQUFJLENBQUMsZUFBZSxHQUFHLElBQUksQ0FBQztRQUM1QixJQUFJLENBQUMsU0FBUyxHQUFHLE9BQU8sQ0FBQyxTQUFTLElBQUksQ0FBQyxDQUFDO0tBQ3hDO0FBQ0QsSUFBQSxJQUFJLFVBQVUsR0FBQTtRQUNiLE9BQU87WUFDTixJQUFJLEVBQUUsSUFBSSxDQUFDLElBQUk7WUFDZixnQkFBZ0IsRUFBRSxJQUFJLENBQUMsZ0JBQWdCO1lBQ3ZDLGNBQWMsRUFBRSxJQUFJLENBQUMsY0FBYztTQUNuQyxDQUFDO0tBQ0Y7QUFDRCxJQUFBLElBQUksVUFBVSxHQUFBO1FBQ2IsT0FBTyxJQUFJLENBQUMsV0FBVyxJQUFJLElBQUksQ0FBQyxZQUFZLEdBQUcsQ0FBQyxDQUFDO0tBQ2pEO0FBQ0QsSUFBQSxJQUFJLFlBQVksR0FBQTs7QUFFZixRQUFBLE9BQU8sSUFBSSxDQUFDLFdBQVcsSUFBSSxTQUFTLEdBQUcsSUFBSSxDQUFDLFdBQVcsR0FBRyxDQUFDLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxHQUFHLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQztLQUNuRztBQUNELElBQUEsSUFBSSxDQUFDLE1BQWlCLEVBQUE7UUFDckIsSUFBSSxDQUFDLGNBQWMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxPQUFPLEtBQUk7QUFDdkMsWUFBQSxNQUFNLE1BQU0sR0FBRyxPQUFPLENBQUMsR0FBRyxFQUFFLENBQUM7QUFDN0IsWUFBQSxJQUFJLE9BQU8sRUFBRSxLQUFLLElBQUksU0FBUztBQUFFLGdCQUFBLE9BQU8sQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDO1lBQ3ZELElBQUksTUFBTSxJQUFJLFNBQVMsSUFBSSxJQUFJLENBQUMsWUFBWSxJQUFJLEtBQUs7QUFBRSxnQkFBQSxJQUFJLENBQUMsWUFBWSxHQUFHLE1BQU0sQ0FBQztBQUNuRixTQUFDLENBQUMsQ0FBQztRQUNILElBQUksSUFBSSxDQUFDLFlBQVksRUFBRTtBQUN0QixZQUFBLElBQUksQ0FBQyxZQUFZLEdBQUcsS0FBSyxDQUFDO1lBQzFCLElBQUksQ0FBQyxJQUFJLENBQUMsTUFBTTtnQkFBRSxJQUFJLENBQUMsTUFBTSxHQUFHLE1BQU0sQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLENBQUMsS0FBSyxFQUFFLE1BQU0sRUFBRSxJQUFJLENBQUMsVUFBVSxFQUFFLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUM1RyxZQUFBLElBQUksSUFBSSxDQUFDLElBQUksSUFBSSxpQkFBaUIsQ0FBQyxPQUFPO0FBQ3pDLGdCQUFBLElBQUksQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUNyQixDQUFDLEVBQ0QsSUFBSSxDQUFDLFVBQVUsQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLFlBQVksQ0FBQyxJQUFJLEVBQUUsVUFBVSxHQUFHLENBQUMsRUFBRSxJQUFJLENBQUMsWUFBWSxDQUFDLENBQUMsQ0FDL0UsQ0FBQztBQUNILFNBQUE7S0FDRDtJQUNNLHNCQUFzQixHQUFBO1FBQzVCLElBQUksYUFBYSxHQUFHLENBQUEsMkJBQUEsQ0FBNkIsQ0FBQztRQUNsRCxJQUFJLENBQUMsY0FBYyxDQUFDLE9BQU8sQ0FBQyxDQUFDLE9BQU8sS0FBSTtBQUN2QyxZQUFBLGFBQWEsSUFBSSxJQUFJLENBQUMsbUJBQW1CLENBQUMsT0FBTyxDQUFDLENBQUM7QUFDcEQsU0FBQyxDQUFDLENBQUM7UUFDSCxhQUFhLElBQUksS0FBSyxDQUFDO0FBQ3ZCLFFBQUEsT0FBTyxhQUFhLENBQUM7S0FDckI7QUFDTyxJQUFBLG1CQUFtQixDQUFDLE9BQU8sRUFBQTtRQUNsQyxJQUFJLE1BQU0sR0FBRyxDQUFBLENBQUUsQ0FBQztRQUNoQixRQUFRLE9BQU8sQ0FBQyxJQUFJO0FBQ25CLFlBQUEsS0FBSyxNQUFNO0FBQ1YsZ0JBQUEsTUFBTSxHQUFHLENBQUcsRUFBQSxPQUFPLENBQUMsSUFBSSxVQUFVLENBQUM7Z0JBQ25DLE1BQU07QUFDUCxZQUFBLEtBQUssTUFBTTtBQUNWLGdCQUFBLE1BQU0sR0FBRyxDQUFHLEVBQUEsT0FBTyxDQUFDLElBQUksZ0JBQWdCLENBQUM7Z0JBQ3pDLE1BQU07QUFDUCxZQUFBLEtBQUssTUFBTTtBQUNWLGdCQUFBLE1BQU0sR0FBRyxDQUFHLEVBQUEsT0FBTyxDQUFDLElBQUksZ0JBQWdCLENBQUM7Z0JBQ3pDLE1BQU07QUFDUCxZQUFBLEtBQUssTUFBTTtBQUNWLGdCQUFBLE1BQU0sR0FBRyxDQUFHLEVBQUEsT0FBTyxDQUFDLElBQUksZ0JBQWdCLENBQUM7Z0JBQ3pDLE1BQU07QUFDUCxZQUFBLEtBQUssTUFBTTtBQUNWLGdCQUFBLE1BQU0sR0FBRyxDQUFHLEVBQUEsT0FBTyxDQUFDLElBQUksa0JBQWtCLENBQUM7Z0JBQzNDLE1BQU07QUFDUCxZQUFBLEtBQUssTUFBTTtBQUNWLGdCQUFBLE1BQU0sR0FBRyxDQUFHLEVBQUEsT0FBTyxDQUFDLElBQUksa0JBQWtCLENBQUM7Z0JBQzNDLE1BQU07QUFDUCxZQUFBLEtBQUssTUFBTTtBQUNWLGdCQUFBLE1BQU0sR0FBRyxDQUFHLEVBQUEsT0FBTyxDQUFDLElBQUksa0JBQWtCLENBQUM7Z0JBQzNDLE1BQU07QUFDUCxTQUFBO0FBQ0QsUUFBQSxPQUFPLE1BQU0sQ0FBQztLQUNkO0FBQ0QsSUFBQSxRQUFRLENBQUMsSUFBWSxFQUFBO1FBQ3BCLE9BQU8sSUFBSSxDQUFDLGNBQWMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7S0FDckM7SUFDRCxtQkFBbUIsQ0FBQyxJQUFZLEVBQUUsS0FBb0MsRUFBQTtRQUNyRSxNQUFNLE9BQU8sR0FBRyxJQUFJLENBQUMsY0FBYyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUM5QyxRQUFBLElBQUksQ0FBQyxPQUFPO1lBQUUsT0FBTztBQUNyQixRQUFBLE9BQU8sQ0FBQyxFQUFFLEdBQUcsS0FBSyxDQUFDO0tBQ25COzs7OztBQUtELElBQUEsVUFBVSxDQUFDLElBQVksRUFBRSxLQUFvQyxFQUFFLFdBQXdCLEVBQUUsS0FBYyxFQUFBO0FBQ3RHLFFBQUEsSUFBSSxJQUFJLENBQUMsY0FBYyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUM7WUFBRSxPQUFPO1FBQzFDLE1BQU0sV0FBVyxHQUFHLGFBQWEsQ0FBQyxXQUFXLENBQUMsV0FBVyxDQUFDLENBQUM7QUFDM0QsUUFBQSxJQUFJLENBQUMsVUFBVSxJQUFJLGFBQWEsQ0FBQyxrQkFBa0IsQ0FBQyxJQUFJLENBQUMsVUFBVSxFQUFFLFdBQVcsQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUN4RixRQUFBLE1BQU0sT0FBTyxHQUNaLEtBQUssSUFBSSxTQUFTO0FBQ2pCLGNBQUUsSUFBSSxXQUFXLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxVQUFVLEVBQUUsSUFBSSxDQUFDLFVBQVUsRUFBRSxLQUFLLEVBQUUsS0FBSyxDQUFDO0FBQ3ZFLGNBQUUsSUFBSSxXQUFXLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxVQUFVLEVBQUUsSUFBSSxDQUFDLFVBQVUsRUFBRSxLQUFLLENBQUMsQ0FBQztRQUNuRSxJQUFJLENBQUMsY0FBYyxDQUFDLEdBQUcsQ0FBQyxJQUFJLEVBQUUsT0FBTyxDQUFDLENBQUM7QUFDdkMsUUFBQSxJQUFJLENBQUMsVUFBVSxJQUFJLE9BQU8sQ0FBQyxRQUFRLENBQUM7S0FDcEM7QUFDRCxJQUFBLE9BQU8sa0JBQWtCLENBQUMsUUFBZ0IsRUFBRSxLQUFhLEVBQUE7Ozs7O0FBS3hELFFBQUEsT0FBTyxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsR0FBRyxLQUFLLENBQUMsR0FBRyxLQUFLLEdBQUcsUUFBUSxDQUFDO0tBQ3REO0lBQ0QsT0FBTyxHQUFBO0FBQ04sUUFBQSxJQUFJLEVBQUUsTUFBTSxFQUFFLE9BQU8sRUFBRSxDQUFDO0tBQ3hCOztBQTNJYyxhQUFBLENBQUEsV0FBVyxHQUFHO0FBQzVCLElBQUEsQ0FBQyxXQUFXLENBQUMsV0FBVyxHQUFHLFdBQVc7QUFDdEMsSUFBQSxDQUFDLFdBQVcsQ0FBQyxLQUFLLEdBQUcsWUFBWTtBQUNqQyxJQUFBLENBQUMsV0FBVyxDQUFDLFNBQVMsR0FBRyxnQkFBZ0I7QUFDekMsSUFBQSxDQUFDLFdBQVcsQ0FBQyxTQUFTLEdBQUcsZ0JBQWdCO0FBQ3pDLElBQUEsQ0FBQyxXQUFXLENBQUMsU0FBUyxHQUFHLGdCQUFnQjtBQUN6QyxJQUFBLENBQUMsV0FBVyxDQUFDLElBQUksR0FBRyxXQUFXO0FBQy9CLElBQUEsQ0FBQyxXQUFXLENBQUMsSUFBSSxHQUFHLFdBQVc7QUFDL0IsSUFBQSxDQUFDLFdBQVcsQ0FBQyxJQUFJLEdBQUcsV0FBVztBQUMvQixJQUFBLENBQUMsV0FBVyxDQUFDLEtBQUssR0FBRyxZQUFZO0FBQ2pDLElBQUEsQ0FBQyxXQUFXLENBQUMsVUFBVSxHQUFHLGlCQUFpQjtBQUMzQyxJQUFBLENBQUMsV0FBVyxDQUFDLFNBQVMsR0FBRyxnQkFBZ0I7QUFDekMsSUFBQSxDQUFDLFdBQVcsQ0FBQyxTQUFTLEdBQUcsZ0JBQWdCO0FBQ3pDLElBQUEsQ0FBQyxXQUFXLENBQUMsU0FBUyxHQUFHLGdCQUFnQjtBQUN6QyxJQUFBLENBQUMsV0FBVyxDQUFDLFNBQVMsR0FBRyxtQkFBbUI7QUFDNUMsSUFBQSxDQUFDLFdBQVcsQ0FBQyxXQUFXLEdBQUcsa0JBQWtCO0FBQzdDLElBQUEsQ0FBQyxXQUFXLENBQUMsVUFBVSxHQUFHLGlCQUFpQjtBQUMzQyxJQUFBLENBQUMsV0FBVyxDQUFDLGFBQWEsR0FBRyxvQkFBb0I7QUFDakQsSUFBQSxDQUFDLFdBQVcsQ0FBQyxpQkFBaUIsR0FBRyx3QkFBd0I7QUFDekQsSUFBQSxDQUFDLFdBQVcsQ0FBQyxnQkFBZ0IsR0FBRyx1QkFBdUI7QUFDdkQsSUFBQSxDQUFDLFdBQVcsQ0FBQyxtQkFBbUIsR0FBRywwQkFBMEI7QUFDN0QsSUFBQSxDQUFDLFdBQVcsQ0FBQyxrQkFBa0IsR0FBRyxrQkFBa0I7Q0FDcEQ7O0FDakVGLE1BQU0saUJBQWlCLEdBQUcsQ0FBQyxZQUFZLEVBQUUsa0JBQWtCLEVBQUUsa0JBQWtCLEVBQUUsa0JBQWtCLENBQUMsQ0FBQztBQUMvRixTQUFVLHFCQUFxQixDQUFDLFFBQVEsRUFBQTtJQUM3QyxJQUFJLE1BQU0sR0FBRyxDQUFDLENBQUM7SUFDZixJQUFJLFlBQVksR0FBRyxLQUFLLENBQUM7SUFDekIsTUFBTSxhQUFhLEdBQUcsTUFBTSxDQUFDLG1CQUFtQixDQUFDLFFBQVEsQ0FBQyxDQUFDO0FBQzNELElBQUEsYUFBYSxDQUFDLEdBQUcsQ0FBQyxDQUFDLFlBQVksS0FBSTtBQUNsQyxRQUFBLElBQUksUUFBUSxDQUFDLFlBQVksQ0FBQyxDQUFDLElBQUksSUFBSSxTQUFTLElBQUksUUFBUSxDQUFDLFlBQVksQ0FBQyxDQUFDLElBQUksSUFBSSxTQUFTLEVBQUU7WUFDekYsTUFBTSxJQUFJLENBQUMsQ0FBQztBQUNaLFNBQUE7QUFBTSxhQUFBO0FBQ04sWUFBQSxJQUNDLGlCQUFpQixDQUFDLElBQUksQ0FBQyxDQUFDLElBQUksS0FBSTtnQkFDL0IsT0FBTyxJQUFJLEtBQUssUUFBUSxDQUFDLFlBQVksQ0FBQyxDQUFDLElBQUksQ0FBQztBQUM3QyxhQUFDLENBQUMsRUFDRDtnQkFDRCxZQUFZLEdBQUcsSUFBSSxDQUFDO0FBQ3BCLGFBQUE7QUFBTSxpQkFBQTtnQkFDTixNQUFNLElBQUksQ0FBQyxDQUFDO0FBQ1osYUFBQTtBQUNELFNBQUE7QUFDRixLQUFDLENBQUMsQ0FBQztJQUNILE9BQU87QUFDTixRQUFBLFFBQVEsRUFBRSxNQUFNO1FBQ2hCLFlBQVk7S0FDWixDQUFDO0FBQ0gsQ0FBQztBQUNLLFNBQVUsc0JBQXNCLENBQ3JDLElBQVksRUFDWixPQUFpQixFQUNqQixVQUFzQixFQUN0QixJQUFXLEVBQ1gsYUFBNkIsRUFBQTtBQUU3QixJQUFBLE1BQU0sV0FBVyxHQUFHLE9BQU8sRUFBRSxLQUFLLFlBQVksUUFBUSxDQUFDO0lBQ3ZELFFBQVEsT0FBTyxDQUFDLElBQUk7QUFDbkIsUUFBQSxLQUFLLEtBQUs7QUFDVCxZQUFBLGFBQWEsQ0FBQyxVQUFVLENBQ3ZCLElBQUksRUFDSixXQUFXO2tCQUNSLE9BQU8sQ0FBQyxLQUFLO2tCQUNiLE1BQUs7b0JBQ0wsT0FBTyxPQUFPLENBQUMsS0FBSyxDQUFDO0FBQ3JCLGlCQUFDLEVBQ0osV0FBVyxDQUFDLEtBQUssQ0FDakIsQ0FBQztZQUNGLE1BQU07QUFDUCxRQUFBLEtBQUssV0FBVztBQUNmLFlBQUEsYUFBYSxDQUFDLFVBQVUsQ0FDdkIsSUFBSSxFQUNKLFdBQVc7a0JBQ1IsT0FBTyxDQUFDLEtBQUs7a0JBQ2IsTUFBSztvQkFDTCxPQUFPLE9BQU8sQ0FBQyxLQUFLLENBQUM7QUFDckIsaUJBQUMsRUFDSixXQUFXLENBQUMsU0FBUyxDQUNyQixDQUFDO1lBQ0YsTUFBTTtBQUNQLFFBQUEsS0FBSyxXQUFXO0FBQ2YsWUFBQSxhQUFhLENBQUMsVUFBVSxDQUN2QixJQUFJLEVBQ0osV0FBVztrQkFDUixPQUFPLENBQUMsS0FBSztrQkFDYixNQUFLO29CQUNMLE9BQU8sT0FBTyxDQUFDLEtBQUssQ0FBQztBQUNyQixpQkFBQyxFQUNKLFdBQVcsQ0FBQyxTQUFTLENBQ3JCLENBQUM7WUFDRixNQUFNO0FBQ1AsUUFBQSxLQUFLLE9BQU87QUFDWCxZQUFBLGFBQWEsQ0FBQyxVQUFVLENBQ3ZCLElBQUksRUFDSixXQUFXO2tCQUNSLE9BQU8sQ0FBQyxLQUFLO2tCQUNiLE1BQUs7b0JBQ0wsT0FBTyxPQUFPLENBQUMsS0FBSyxDQUFDO0FBQ3JCLGlCQUFDLEVBQ0osV0FBVyxDQUFDLEtBQUssQ0FDakIsQ0FBQztZQUNGLE1BQU07QUFDUCxRQUFBLEtBQUssV0FBVztBQUNmLFlBQUEsYUFBYSxDQUFDLFVBQVUsQ0FDdkIsSUFBSSxFQUNKLFdBQVc7a0JBQ1IsT0FBTyxDQUFDLEtBQUs7a0JBQ2IsTUFBSztvQkFDTCxPQUFPLE9BQU8sQ0FBQyxLQUFLLENBQUM7QUFDckIsaUJBQUMsRUFDSixXQUFXLENBQUMsU0FBUyxDQUNyQixDQUFDO1lBQ0YsTUFBTTtBQUNQLFFBQUEsS0FBSyxhQUFhO0FBQ2pCLFlBQUEsYUFBYSxDQUFDLFVBQVUsQ0FDdkIsSUFBSSxFQUNKLFdBQVc7a0JBQ1IsT0FBTyxDQUFDLEtBQUs7a0JBQ2IsTUFBSztvQkFDTCxPQUFPLE9BQU8sQ0FBQyxLQUFLLENBQUM7QUFDckIsaUJBQUMsRUFDSixXQUFXLENBQUMsSUFBSSxDQUNoQixDQUFDO1lBQ0YsTUFBTTtBQUNQLFFBQUEsS0FBSyxhQUFhO0FBQ2pCLFlBQUEsYUFBYSxDQUFDLFVBQVUsQ0FDdkIsSUFBSSxFQUNKLFdBQVc7a0JBQ1IsT0FBTyxDQUFDLEtBQUs7a0JBQ2IsTUFBSztvQkFDTCxPQUFPLE9BQU8sQ0FBQyxLQUFLLENBQUM7QUFDckIsaUJBQUMsRUFDSixXQUFXLENBQUMsSUFBSSxDQUNoQixDQUFDO1lBQ0YsTUFBTTtBQUNQLFFBQUEsS0FBSyxhQUFhO0FBQ2pCLFlBQUEsYUFBYSxDQUFDLFVBQVUsQ0FDdkIsSUFBSSxFQUNKLFdBQVc7a0JBQ1IsT0FBTyxDQUFDLEtBQUs7QUFDZixrQkFBRSxNQUNBLElBQUksSUFBSSxhQUFhO3NCQUNsQixJQUFJLEVBQUUsV0FBVztzQkFDakIsSUFBSSxLQUFLLGNBQWM7MEJBQ3ZCLElBQUksRUFBRSxZQUFZOzBCQUNsQixPQUFPLENBQUMsS0FBSyxFQUNuQixXQUFXLENBQUMsSUFBSSxDQUNoQixDQUFDO1lBQ0YsTUFBTTtBQUNQLFFBQUEsS0FBSyxZQUFZO0FBQ2hCLFlBQUEsYUFBYSxDQUFDLFVBQVUsQ0FDdkIsSUFBSSxFQUNKLFdBQVc7a0JBQ1IsT0FBTyxDQUFDLEtBQUs7a0JBQ2IsTUFBSztvQkFDTCxPQUFPLE9BQU8sQ0FBQyxLQUFLLENBQUM7aUJBQ3BCLEVBQ0osV0FBVyxDQUFDLFVBQVUsRUFDdEIsT0FBTyxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQ3BCLENBQUM7WUFDRixNQUFNO0FBQ1AsUUFBQSxLQUFLLGtCQUFrQjtBQUN0QixZQUFBLGFBQWEsQ0FBQyxVQUFVLENBQ3ZCLElBQUksRUFDSixXQUFXO2tCQUNSLE9BQU8sQ0FBQyxLQUFLO2tCQUNiLE1BQUs7b0JBQ0wsT0FBTyxPQUFPLENBQUMsS0FBSyxDQUFDO2lCQUNwQixFQUNKLFdBQVcsQ0FBQyxTQUFTLEVBQ3JCLE9BQU8sQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUNwQixDQUFDO1lBQ0YsTUFBTTtBQUNQLFFBQUEsS0FBSyxrQkFBa0I7QUFDdEIsWUFBQSxhQUFhLENBQUMsVUFBVSxDQUN2QixJQUFJLEVBQ0osV0FBVztrQkFDUixPQUFPLENBQUMsS0FBSztrQkFDYixNQUFLO29CQUNMLE9BQU8sT0FBTyxDQUFDLEtBQUssQ0FBQztpQkFDcEIsRUFDSixXQUFXLENBQUMsU0FBUyxFQUNyQixPQUFPLENBQUMsS0FBSyxDQUFDLE1BQU0sQ0FDcEIsQ0FBQztZQUNGLE1BQU07QUFDUCxRQUFBLEtBQUssa0JBQWtCO0FBQ3RCLFlBQUEsYUFBYSxDQUFDLFVBQVUsQ0FDdkIsSUFBSSxFQUNKLFdBQVc7a0JBQ1IsT0FBTyxDQUFDLEtBQUs7a0JBQ2IsTUFBSztvQkFDTCxPQUFPLE9BQU8sQ0FBQyxLQUFLLENBQUM7aUJBQ3BCLEVBQ0osV0FBVyxDQUFDLFNBQVMsRUFDckIsT0FBTyxDQUFDLEtBQUssQ0FBQyxNQUFNLENBQ3BCLENBQUM7WUFDRixNQUFNO0FBQ1AsUUFBQSxLQUFLLFNBQVMsQ0FBQztBQUNmLFFBQUEsS0FBSyxnQkFBZ0I7QUFDcEIsWUFBQSxVQUFVLENBQUMsVUFBVSxDQUNwQixJQUFJLEVBQ0osV0FBVztrQkFDUixPQUFPLENBQUMsS0FBSztrQkFDYixNQUFLO29CQUNMLE9BQU8sT0FBTyxDQUFDLEtBQUssQ0FBQztBQUNyQixpQkFBQyxFQUNKLE9BQU8sRUFBRSxPQUFPLEVBQ2hCLE9BQU8sRUFBRSxJQUFJLEVBQ2IsT0FBTyxFQUFFLFVBQVUsRUFDbkIsT0FBTyxFQUFFLFdBQVcsQ0FDcEIsQ0FBQztZQUNGLE1BQU07QUFDUCxRQUFBLEtBQUssU0FBUztBQUNiLFlBQUEsVUFBVSxDQUFDLFVBQVUsQ0FDcEIsSUFBSSxFQUNKLFdBQVc7a0JBQ1IsT0FBTyxDQUFDLEtBQUs7a0JBQ2IsTUFBSztvQkFDTCxPQUFPLE9BQU8sQ0FBQyxLQUFLLENBQUM7aUJBQ3BCLEVBQ0osT0FBTyxFQUFFLE9BQU8sRUFDaEIsT0FBTyxFQUFFLFVBQVUsQ0FDbkIsQ0FBQztZQUNGLE1BQU07QUFDUCxRQUFBO0FBQ0MsWUFBQSxNQUFNLElBQUksS0FBSyxDQUFDLHdCQUF3QixDQUFDLENBQUM7QUFDM0MsS0FBQTtBQUNGOztBQzlNQSxNQUFNLFdBQVcsR0FBRyxJQUFJLEdBQUcsRUFBRSxDQUFDO0FBQzlCLE1BQU0sZUFBZSxDQUFBO0lBR3BCLFdBQW9CLENBQUEsTUFBaUIsRUFBRSxLQUFhLEVBQVMsVUFBa0MsRUFBRSxFQUFFLEtBQUssR0FBRyxDQUFDLEVBQUE7UUFBL0MsSUFBTyxDQUFBLE9BQUEsR0FBUCxPQUFPLENBQTZCO0FBQ2hHLFFBQUEsSUFBSSxDQUFDLEtBQUssR0FBRyxLQUFLLElBQUksQ0FBQyxDQUFDO0FBQ3hCLFFBQUEsSUFBSSxDQUFDLGtCQUFrQixHQUFHLE1BQU0sQ0FBQyxxQkFBcUIsQ0FBQztBQUN0RCxZQUFBLEtBQUssRUFBRSxLQUFLO1lBQ1osT0FBTyxFQUFFLE9BQU8sQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxjQUFjLEVBQUUsT0FBTyxFQUFFLE1BQU07Z0JBQzVGLE9BQU87Z0JBQ1AsVUFBVTtnQkFDVixNQUFNO2dCQUNOLE9BQU87Z0JBQ1AsT0FBTztnQkFDUCxjQUFjO0FBQ2QsYUFBQSxDQUFDLENBQUM7QUFDSCxTQUFBLENBQUMsQ0FBQztLQUNIO0lBQ0QsT0FBTywyQkFBMkIsQ0FDakMsTUFBaUIsRUFDakIsS0FBYSxFQUNiLE9BQStCLEVBQy9CLEtBQUssRUFBQTtBQUVMLFFBQUEsSUFBSSxXQUFXLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxFQUFFO0FBQzNCLFlBQUEsT0FBTyxXQUFXLENBQUMsR0FBRyxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQzlCLFNBQUE7QUFBTSxhQUFBO0FBQ04sWUFBQSxNQUFNLGVBQWUsR0FBRyxJQUFJLGVBQWUsQ0FBQyxNQUFNLEVBQUUsS0FBSyxFQUFFLE9BQU8sRUFBRSxLQUFLLENBQUMsQ0FBQztBQUMzRSxZQUFBLFdBQVcsQ0FBQyxHQUFHLENBQUMsS0FBSyxFQUFFLGVBQWUsQ0FBQyxDQUFDO0FBQ3hDLFlBQUEsT0FBTyxlQUFlLENBQUM7QUFDdkIsU0FBQTtLQUNEO0lBQ0QsT0FBTyw4QkFBOEIsQ0FBQyxlQUFnQyxFQUFBO0FBQ3JFLFFBQUEsV0FBVyxDQUFDLE1BQU0sQ0FBQyxlQUFlLENBQUMsQ0FBQztLQUNwQztBQUNEOztBQ25DYSxNQUFPLG9CQUFvQixDQUFBO0FBU3hDLElBQUEsV0FBQSxDQUFZLE9BQWlDLEVBQUE7QUFDNUMsUUFBQSxJQUFJLENBQUMsT0FBTyxHQUFHLE9BQU8sQ0FBQyxPQUFPLENBQUM7QUFDL0IsUUFBQSxJQUFJLENBQUMsVUFBVSxHQUFHLE9BQU8sQ0FBQyxVQUFVLENBQUM7QUFDckMsUUFBQSxJQUFJLENBQUMsTUFBTSxHQUFHLE9BQU8sQ0FBQyxNQUFNLENBQUM7QUFDN0IsUUFBQSxJQUFJLENBQUMsT0FBTyxHQUFHLE9BQU8sQ0FBQyxPQUFPLENBQUM7QUFDL0IsUUFBQSxJQUFJLENBQUMsT0FBTyxHQUFHLE9BQU8sQ0FBQyxPQUFPLENBQUM7QUFDL0IsUUFBQSxJQUFJLENBQUMsY0FBYyxHQUFHLE9BQU8sQ0FBQyxjQUFjLENBQUM7QUFDN0MsUUFBQSxJQUFJLENBQUMsZUFBZSxHQUFHLE9BQU8sQ0FBQyxlQUFlLENBQUM7S0FDL0M7SUFDRCxrQkFBa0IsR0FBQTtRQUNqQixPQUFPO1lBQ04sT0FBTyxFQUFFLElBQUksQ0FBQyxPQUFPO1lBQ3JCLFVBQVUsRUFBRSxJQUFJLENBQUMsVUFBVTtZQUMzQixNQUFNLEVBQUUsSUFBSSxDQUFDLE1BQU07WUFDbkIsT0FBTyxFQUFFLElBQUksQ0FBQyxPQUFPO1lBQ3JCLE9BQU8sRUFBRSxJQUFJLENBQUMsT0FBTztZQUNyQixlQUFlLEVBQUUsSUFBSSxDQUFDLGVBQWU7WUFDckMsY0FBYyxFQUFFLElBQUksQ0FBQyxjQUFjO1NBQ25DLENBQUM7S0FDRjtBQUNEOztBQ25CYSxNQUFPLFVBQVUsQ0FBQTtBQW1COUIsSUFBQSxXQUFBLENBQVksS0FBYSxFQUFFLElBQWEsRUFBRSxXQUFvQixFQUFFLFVBQVcsRUFBQTtBQUMxRSxRQUFBLElBQUksQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDO0FBQ25CLFFBQUEsSUFBSSxDQUFDLGNBQWMsR0FBRyxDQUFDLENBQUM7QUFDeEIsUUFBQSxJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQztBQUN4QixRQUFBLElBQUksQ0FBQyxPQUFPLEdBQUcsRUFBRSxDQUFDO0FBQ2xCLFFBQUEsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLEdBQUcsRUFBRSxDQUFDO1FBQzNCLElBQUksQ0FBQyxVQUFVLEdBQUcsWUFBWSxDQUFDLFVBQVUsRUFBRSxDQUFDLENBQUMsQ0FBQztRQUM5QyxJQUFJLENBQUMsV0FBVyxHQUFHLFlBQVksQ0FBQyxXQUFXLEVBQUUsQ0FBQyxDQUFDLENBQUM7S0FDaEQ7QUFDRCxJQUFBLGdCQUFnQixDQUFDLElBQVksRUFBQTtRQUM1QixPQUFPLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDO0tBQ2hDO0FBQ0QsSUFBQSxVQUFVLENBQUMsSUFBWSxFQUFBO1FBQ3RCLE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLENBQUM7S0FDaEM7QUFDRCxJQUFBLFVBQVUsQ0FBQyxJQUFZLEVBQUE7UUFDdEIsT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsQ0FBQztLQUNoQztBQUNELElBQUEsZ0JBQWdCLENBQUMsSUFBWSxFQUFFLGFBQTRCLEVBQUUsT0FBZ0IsRUFBQTtBQUM1RSxRQUFBLElBQUksSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDO1lBQUUsT0FBTztBQUNyQyxRQUFBLGFBQWEsQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDLGNBQWMsQ0FBQztBQUM1QyxRQUFBLElBQUksQ0FBQyxTQUFTLENBQUMsSUFBSSxDQUFDLE1BQU0sQ0FBQyxTQUFTLENBQUMsRUFBRSxPQUFPLElBQUksSUFBSSxDQUFDLGNBQWMsQ0FBQyxDQUFDO0FBQ3ZFLFFBQUEsSUFBSSxDQUFDLGNBQWMsSUFBSSxDQUFDLENBQUM7UUFDekIsSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsSUFBSSxFQUFFLGFBQWEsQ0FBQyxDQUFDO0tBQ3hDO0lBQ0QsVUFBVSxDQUNULElBQVksRUFDWixLQUE0QixFQUM1QixPQUFnQixFQUNoQixJQUFhLEVBQ2IsVUFBd0IsRUFDeEIsV0FBNEIsRUFBQTtBQUU1QixRQUFBLElBQUksSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDO1lBQUUsT0FBTztRQUNyQyxNQUFNLE9BQU8sR0FBRyxJQUFJLGNBQWMsQ0FBQyxJQUFJLEVBQUUsT0FBTyxJQUFJLElBQUksQ0FBQyxjQUFjLEVBQUUsS0FBSyxFQUFFLElBQUksRUFBRSxVQUFVLEVBQUUsV0FBVyxDQUFDLENBQUM7QUFDL0csUUFBQSxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLEVBQUUsT0FBTyxJQUFJLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQztBQUN2RSxRQUFBLElBQUksQ0FBQyxjQUFjLElBQUksQ0FBQyxDQUFDO1FBQ3pCLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLElBQUksRUFBRSxPQUFPLENBQUMsQ0FBQztLQUNsQztBQUNELElBQUEsVUFBVSxDQUFDLElBQVksRUFBRSxLQUE0QixFQUFFLE9BQWdCLEVBQUUsVUFBd0IsRUFBQTtBQUNoRyxRQUFBLElBQUksSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDO1lBQUUsT0FBTztBQUNyQyxRQUFBLE1BQU0sT0FBTyxHQUFHLElBQUksY0FBYyxDQUFDLElBQUksRUFBRSxPQUFPLElBQUksSUFBSSxDQUFDLGNBQWMsRUFBRSxLQUFLLEVBQUUsVUFBVSxDQUFDLENBQUM7QUFDNUYsUUFBQSxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLEVBQUUsT0FBTyxJQUFJLElBQUksQ0FBQyxjQUFjLENBQUMsQ0FBQztBQUN2RSxRQUFBLElBQUksQ0FBQyxjQUFjLElBQUksQ0FBQyxDQUFDO1FBQ3pCLElBQUksQ0FBQyxTQUFTLENBQUMsR0FBRyxDQUFDLElBQUksRUFBRSxPQUFPLENBQUMsQ0FBQztLQUNsQztJQUNELFNBQVMsQ0FBQyxJQUFZLEVBQUUsS0FBdUIsRUFBQTtRQUM5QyxJQUFJLElBQUksQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEtBQUssU0FBUyxFQUFFO0FBQ3JDLFlBQUEsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUM7QUFDeEIsWUFBQSxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxHQUFHLEtBQUssQ0FBQztBQUMzQixTQUFBO0FBQU0sYUFBQTtZQUNOLElBQUksSUFBSSxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsS0FBSyxLQUFLLEVBQUU7Z0JBQ2pDLE9BQU87QUFDUCxhQUFBO0FBQU0saUJBQUE7QUFDTixnQkFBQSxJQUFJLENBQUMsV0FBVyxHQUFHLElBQUksQ0FBQztBQUN4QixnQkFBQSxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxHQUFHLEtBQUssQ0FBQztBQUMzQixhQUFBO0FBQ0QsU0FBQTtLQUNEO0lBQ0QseUJBQXlCLENBQUMsSUFBWSxFQUFFLEtBQW9DLEVBQUE7UUFDM0UsSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxPQUFPLEtBQUk7WUFDbEMsSUFBSSxPQUFPLEVBQUUsZUFBZSxFQUFFO0FBQzdCLGdCQUFBLE9BQU8sQ0FBQyxtQkFBbUIsQ0FBQyxJQUFJLEVBQUUsS0FBSyxDQUFDLENBQUM7QUFDekMsYUFBQTtBQUNGLFNBQUMsQ0FBQyxDQUFDO0tBQ0g7SUFDRCxJQUFJLENBQUMsTUFBaUIsRUFBRSxXQUF5RCxFQUFBO0FBQ2hGLFFBQUEsSUFBSSxDQUFDLGFBQWEsQ0FBQyxNQUFNLENBQUMsQ0FBQztRQUMzQixJQUFJLENBQUMsSUFBSSxDQUFDLFdBQVc7QUFBRSxZQUFBLElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDLHFCQUFxQixDQUFDLE1BQU0sRUFBRSxJQUFJLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUMzRyxJQUFJLENBQUMsSUFBSSxDQUFDLFNBQVM7QUFBRSxZQUFBLElBQUksQ0FBQyxTQUFTLEdBQUcsSUFBSSxDQUFDLGVBQWUsQ0FBQyxNQUFNLEVBQUUsSUFBSSxDQUFDLEtBQUssRUFBRSxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUM7QUFDaEcsUUFBQSxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQztLQUNqQztJQUNELE9BQU8sR0FBQTtRQUNOLElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLENBQUMsT0FBTyxLQUFJO1lBQ2xDLElBQUksT0FBTyxDQUFDLE9BQU87Z0JBQUUsT0FBTyxFQUFFLE9BQU8sRUFBRSxDQUFDO0FBQ3pDLFNBQUMsQ0FBQyxDQUFDO0FBQ0gsUUFBQSxJQUFJLENBQUMsS0FBSyxHQUFHLFNBQVMsQ0FBQztBQUN2QixRQUFBLElBQUksQ0FBQyxjQUFjLEdBQUcsQ0FBQyxDQUFDO0FBQ3hCLFFBQUEsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUM7QUFDeEIsUUFBQSxJQUFJLENBQUMsT0FBTyxHQUFHLFNBQVMsQ0FBQztBQUN6QixRQUFBLElBQUksQ0FBQyxTQUFTLENBQUMsS0FBSyxFQUFFLENBQUM7QUFDdkIsUUFBQSxlQUFlLENBQUMsOEJBQThCLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxDQUFDO0FBQ2pFLFFBQUEsSUFBSSxDQUFDLFNBQVMsR0FBRyxTQUFTLENBQUM7S0FDM0I7QUFDTyxJQUFBLGVBQWUsQ0FBQyxNQUFpQixFQUFFLEtBQWEsRUFBRSxVQUFtQixFQUFBO0FBQzVFLFFBQUEsTUFBTSxFQUFFLFFBQVEsRUFBRSxPQUFPLEVBQUUsV0FBVyxFQUFFLFNBQVMsRUFBRSxHQUFHLElBQUksQ0FBQyxxQkFBcUIsRUFBRSxDQUFDO0FBQ25GLFFBQUEsTUFBTSxTQUFTLEdBQUcsSUFBSSxTQUFTLENBQUM7QUFDL0IsWUFBQSxLQUFLLEVBQUUsS0FBSztBQUNaLFlBQUEsT0FBTyxFQUFFLFFBQVE7QUFDakIsWUFBQSxNQUFNLEVBQUUsTUFBTTtZQUNkLE1BQU0sRUFBRSxJQUFJLENBQUMsV0FBVztZQUN4QixLQUFLLEVBQUUsVUFBVSxJQUFJLENBQUM7WUFDdEIsT0FBTztZQUNQLFdBQVc7WUFDWCxTQUFTO0FBQ1QsU0FBQSxDQUFDLENBQUM7QUFDSCxRQUFBLE9BQU8sU0FBUyxDQUFDO0tBQ2pCO0FBQ08sSUFBQSxxQkFBcUIsQ0FBQyxNQUFpQixFQUFFLEtBQWEsRUFBRSxXQUFvQixFQUFBO0FBQ25GLFFBQUEsTUFBTSxNQUFNLEdBQUcsSUFBSSxDQUFDLDBCQUEwQixFQUFFLENBQUM7UUFDakQsTUFBTSxXQUFXLEdBQUcsZUFBZSxDQUFDLDJCQUEyQixDQUM5RCxNQUFNLEVBQ04sS0FBSyxHQUFHLEdBQUcsR0FBRyxNQUFNLENBQUMsR0FBRyxFQUN4QixNQUFNLENBQUMsT0FBTyxFQUNkLFdBQVcsSUFBSSxDQUFDLENBQ2hCLENBQUM7QUFDRixRQUFBLE9BQU8sV0FBVyxDQUFDO0tBQ25CO0FBQ1MsSUFBQSxhQUFhLENBQUMsTUFBaUIsRUFBQTtRQUN4QyxJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxDQUFDLE9BQU8sS0FBSTtBQUNsQyxZQUFBLE9BQU8sQ0FBQyxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUM7QUFDdEIsU0FBQyxDQUFDLENBQUM7S0FDSDtJQUNPLDBCQUEwQixHQUFBO1FBQ2pDLElBQUksR0FBRyxHQUFHLEVBQUUsQ0FBQztBQUNiLFFBQUEsTUFBTSxNQUFNLEdBQUcsSUFBSSxHQUFHLEVBQUUsQ0FBQztRQUN6QixJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxDQUFDLE9BQU8sS0FBSTtZQUNsQyxJQUFJLENBQUMsTUFBTSxDQUFDLEdBQUcsQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEVBQUU7QUFDOUIsZ0JBQUEsR0FBRyxHQUFHLEdBQUcsS0FBSyxFQUFFLEdBQUcsR0FBRyxDQUFDLE1BQU0sQ0FBQyxPQUFPLENBQUMsSUFBSSxDQUFDLEdBQUcsR0FBRyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsQ0FBQyxNQUFNLENBQUMsT0FBTyxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQ3BGLGdCQUFBLE1BQU0sQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsb0JBQW9CLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQztBQUM3RCxhQUFBO0FBQ0YsU0FBQyxDQUFDLENBQUM7QUFDSCxRQUFBLEdBQUcsR0FBRyxDQUFBLFNBQUEsRUFBWSxHQUFHLENBQUEsQ0FBQSxDQUFHLENBQUM7QUFDekIsUUFBQSxPQUFPLEVBQUUsR0FBRyxFQUFFLE9BQU8sRUFBRSxDQUFDLEdBQUcsTUFBTSxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsQ0FBQztLQUM5QztJQUNPLHFCQUFxQixHQUFBO0FBQzVCLFFBQUEsTUFBTSxNQUFNLEdBQUcsSUFBSSxHQUFHLEVBQUUsQ0FBQztRQUN6QixJQUFJLE9BQU8sR0FBRyxLQUFLLEVBQ2xCLFdBQVcsR0FBRyxDQUFDLEVBQ2YsU0FBUyxHQUFHLENBQUMsQ0FBQztRQUNmLElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLENBQUMsT0FBTyxLQUFJO1lBQ2xDLElBQUksQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLE9BQU8sQ0FBQyxJQUFJLENBQUMsRUFBRTtnQkFDOUIsSUFBSSxPQUFPLEVBQUUsZ0JBQWdCLEVBQUU7b0JBQzlCLE9BQU8sR0FBRyxJQUFJLENBQUM7QUFDZixvQkFBQSxTQUFTLEdBQUcsT0FBTyxDQUFDLFNBQVMsQ0FBQztBQUM5QixvQkFBQSxXQUFXLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPLENBQUMsWUFBWSxJQUFJLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNoRSxpQkFBQTtBQUNELGdCQUFBLE1BQU0sQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLElBQUksRUFBRSxJQUFJLENBQUMsb0JBQW9CLENBQUMsT0FBTyxDQUFDLENBQUMsQ0FBQztBQUM3RCxhQUFBO0FBQ0YsU0FBQyxDQUFDLENBQUM7UUFDSCxPQUFPO0FBQ04sWUFBQSxRQUFRLEVBQUUsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxNQUFNLEVBQUUsQ0FBQztZQUM5QixPQUFPO1lBQ1AsV0FBVztZQUNYLFNBQVM7U0FDVCxDQUFDO0tBQ0Y7QUFDTyxJQUFBLG9CQUFvQixDQUFDLE9BQU8sRUFBQTtBQUNuQyxRQUFBLElBQUksWUFBWSxDQUFDO1FBQ2pCLElBQUksT0FBTyxDQUFDLGVBQWUsRUFBRTtZQUM1QixZQUFZLEdBQUcsSUFBSSxvQkFBb0IsQ0FBQztnQkFDdkMsT0FBTyxFQUFFLE9BQU8sQ0FBQyxPQUFPO2dCQUN4QixNQUFNLEVBQUUsT0FBTyxDQUFDLFVBQVU7Z0JBQzFCLFVBQVUsRUFBRSxPQUFPLENBQUMsVUFBVTtBQUM5QixhQUFBLENBQUMsQ0FBQztBQUNILFNBQUE7YUFBTSxJQUFJLE9BQU8sQ0FBQyxTQUFTLEVBQUU7WUFDN0IsWUFBWSxHQUFHLElBQUksb0JBQW9CLENBQUM7Z0JBQ3ZDLE9BQU8sRUFBRSxPQUFPLENBQUMsT0FBTztnQkFDeEIsVUFBVSxFQUFFLE9BQU8sQ0FBQyxVQUFVO0FBQzlCLGdCQUFBLE9BQU8sRUFBRSxPQUFPLENBQUMsSUFBSSxJQUFJLFNBQVMsR0FBRyxPQUFPLENBQUMsVUFBVSxHQUFHLFNBQVM7QUFDbkUsZ0JBQUEsY0FBYyxFQUFFLE9BQU8sQ0FBQyxJQUFJLElBQUksZ0JBQWdCLEdBQUcsT0FBTyxDQUFDLHdCQUF3QixHQUFHLFNBQVM7QUFDL0YsYUFBQSxDQUFDLENBQUM7QUFDSCxTQUFBO2FBQU0sSUFBSSxPQUFPLENBQUMsU0FBUyxFQUFFO1lBQzdCLFlBQVksR0FBRyxJQUFJLG9CQUFvQixDQUFDO2dCQUN2QyxPQUFPLEVBQUUsT0FBTyxDQUFDLE9BQU87Z0JBQ3hCLFVBQVUsRUFBRSxPQUFPLENBQUMsVUFBVTtnQkFDOUIsT0FBTyxFQUFFLE9BQU8sQ0FBQyxVQUFVO0FBQzNCLGFBQUEsQ0FBQyxDQUFDO0FBQ0gsU0FBQTtBQUNELFFBQUEsT0FBTyxZQUFZLENBQUM7S0FDcEI7QUFDTyxJQUFBLG9CQUFvQixDQUFDLE9BQU8sRUFBQTtBQUNuQyxRQUFBLElBQUksV0FBVyxDQUFDO1FBQ2hCLElBQUksT0FBTyxDQUFDLGVBQWUsRUFBRTtZQUM1QixXQUFXLEdBQUcsSUFBSSxlQUFlLENBQUM7Z0JBQ2pDLE9BQU8sRUFBRSxPQUFPLENBQUMsT0FBTztBQUN4QixnQkFBQSxRQUFRLEVBQUU7QUFDVCxvQkFBQSxNQUFNLEVBQUUsT0FBTyxDQUFDLE1BQU0sQ0FBQyxTQUFTO29CQUNoQyxNQUFNLEVBQUUsT0FBTyxDQUFDLE1BQU07b0JBQ3RCLElBQUksRUFBRSxPQUFPLENBQUMsVUFBVTtBQUN4QixpQkFBQTtBQUNELGFBQUEsQ0FBQyxDQUFDO0FBQ0gsU0FBQTthQUFNLElBQUksT0FBTyxDQUFDLFNBQVMsRUFBRTtZQUM3QixXQUFXLEdBQUcsSUFBSSxlQUFlLENBQUM7Z0JBQ2pDLE9BQU8sRUFBRSxPQUFPLENBQUMsT0FBTztnQkFDeEIsUUFBUSxFQUFFLE9BQU8sRUFBRSxXQUFXLElBQUksT0FBTyxDQUFDLE9BQU8sQ0FBQyxXQUFXO0FBQzdELGFBQUEsQ0FBQyxDQUFDO0FBQ0gsU0FBQTthQUFNLElBQUksT0FBTyxDQUFDLFNBQVMsRUFBRTtZQUM3QixXQUFXLEdBQUcsSUFBSSxlQUFlLENBQUM7Z0JBQ2pDLE9BQU8sRUFBRSxPQUFPLENBQUMsT0FBTztBQUN4QixnQkFBQSxRQUFRLEVBQUUsT0FBTyxDQUFDLE9BQU8sQ0FBQyxVQUFVO0FBQ3BDLGFBQUEsQ0FBQyxDQUFDO0FBQ0gsU0FBQTtBQUNELFFBQUEsT0FBTyxXQUFXLENBQUM7S0FDbkI7QUFDRDs7TUN4TlksUUFBUSxDQUFBO0FBbUNwQixJQUFBLFdBQUEsR0FBQTtBQUNDLFFBQUEsSUFBSSxDQUFDLEtBQUssR0FBRyxTQUFTLENBQUM7QUFDdkIsUUFBQSxJQUFJLENBQUMsSUFBSSxHQUFHLFNBQVMsQ0FBQztBQUN0QixRQUFBLElBQUksQ0FBQyxXQUFXLEdBQUcsU0FBUyxDQUFDO0FBQzdCLFFBQUEsSUFBSSxDQUFDLFdBQVcsR0FBRyxTQUFTLENBQUM7QUFDN0IsUUFBQSxJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksS0FBSyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFDekMsUUFBQSxJQUFJLENBQUMsUUFBUSxHQUFHLEdBQUcsQ0FBQzs7QUFFcEIsUUFBQSxJQUFJLENBQUMsVUFBVSxHQUFHLFNBQVMsQ0FBQztBQUM1QixRQUFBLElBQUksQ0FBQyxZQUFZLEdBQUcsU0FBUyxDQUFDO0FBQzlCLFFBQUEsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUM7QUFDbEIsUUFBQSxJQUFJLENBQUMsU0FBUyxHQUFHLElBQUksS0FBSyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDeEMsUUFBQSxJQUFJLENBQUMsa0JBQWtCLEdBQUcsR0FBRyxDQUFDO0FBQzlCLFFBQUEsSUFBSSxDQUFDLFlBQVksR0FBRyxJQUFJLENBQUM7QUFDekIsUUFBQSxJQUFJLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQztBQUNuQixRQUFBLElBQUksQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDO1FBQ25CLElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztLQUNaO0lBQ0QsSUFBVyxTQUFTLENBQUMsS0FBYyxFQUFBO1FBQ2xDLElBQUksQ0FBQyxXQUFXLENBQUMsU0FBUyxDQUFDLFFBQVEsR0FBRyxLQUFLLEdBQUcsaUJBQWlCLENBQUMsUUFBUSxHQUFHLGlCQUFpQixDQUFDLFlBQVksQ0FBQztLQUMxRztJQUNELElBQVcsUUFBUSxDQUFDLEtBQXdCLEVBQUE7UUFDM0MsSUFBSSxDQUFDLFdBQVcsQ0FBQyxTQUFTLENBQUMsUUFBUSxHQUFHLEtBQUssQ0FBQztLQUM1QztBQUNELElBQUEsSUFBVyxXQUFXLEdBQUE7UUFDckIsT0FBTyxJQUFJLENBQUMsWUFBWSxDQUFDO0tBQ3pCO0lBQ0QsSUFBVyxXQUFXLENBQUMsS0FBYyxFQUFBO1FBQ3BDLElBQUksQ0FBQyxZQUFZLENBQUMsU0FBUyxDQUFDLFFBQVEsR0FBRyxLQUFLLEdBQUcsUUFBUSxDQUFDLElBQUksR0FBRyxRQUFRLENBQUMsSUFBSSxDQUFDO0FBQzdFLFFBQUEsSUFBSSxDQUFDLFlBQVksR0FBRyxLQUFLLENBQUM7S0FDMUI7QUFDRCxJQUFBLElBQVcsV0FBVyxHQUFBO1FBQ3JCLE9BQU8sSUFBSSxDQUFDLFlBQVksQ0FBQztLQUN6QjtJQUNELElBQVcsV0FBVyxDQUFDLEtBQWtCLEVBQUE7QUFDeEMsUUFBQSxJQUFJLENBQUMsWUFBWSxHQUFHLEtBQUssQ0FBQztLQUMxQjtBQUNELElBQUEsSUFBVyxPQUFPLEdBQUE7UUFDakIsT0FBTyxJQUFJLENBQUMsUUFBUSxDQUFDO0tBQ3JCO0lBQ0QsSUFBVyxPQUFPLENBQUMsQ0FBUSxFQUFBO0FBQzFCLFFBQUEsSUFBSSxDQUFDLFFBQVEsR0FBRyxDQUFDLENBQUM7S0FDbEI7QUFDRCxJQUFBLElBQVcsUUFBUSxHQUFBO1FBQ2xCLE9BQU8sSUFBSSxDQUFDLFNBQVMsQ0FBQztLQUN0QjtJQUNELElBQVcsUUFBUSxDQUFDLENBQVEsRUFBQTtBQUMzQixRQUFBLElBQUksQ0FBQyxTQUFTLEdBQUcsQ0FBQyxDQUFDO0tBQ25CO0FBQ0QsSUFBQSxJQUFXLGlCQUFpQixHQUFBO1FBQzNCLE9BQU8sSUFBSSxDQUFDLGtCQUFrQixDQUFDO0tBQy9CO0lBQ0QsSUFBVyxpQkFBaUIsQ0FBQyxDQUFTLEVBQUE7QUFDckMsUUFBQSxJQUFJLENBQUMsa0JBQWtCLEdBQUcsQ0FBQyxDQUFDO0tBQzVCO0FBQ0QsSUFBQSxJQUFXLE9BQU8sR0FBQTtRQUNqQixPQUFPLElBQUksQ0FBQyxRQUFRLENBQUM7S0FDckI7SUFDRCxJQUFXLE9BQU8sQ0FBQyxDQUFTLEVBQUE7QUFDM0IsUUFBQSxJQUFJLENBQUMsUUFBUSxHQUFHLENBQUMsQ0FBQztLQUNsQjtJQUNELGNBQWMsR0FBQTs7S0FFYjtJQUVELGVBQWUsR0FBQTs7S0FFZDtJQUNELEtBQUssR0FBQTtBQUNKLFFBQUEsT0FBTyxJQUFJLENBQUM7S0FDWjtJQUNELE1BQU0sQ0FBQyxVQUF1QixFQUFFLElBQVcsRUFBQTs7S0FFMUM7SUFDUyxnQkFBZ0IsR0FBQTtRQUN6QixJQUFJLElBQUksQ0FBQyxVQUFVO0FBQUUsWUFBQSxJQUFJLENBQUMsVUFBVSxDQUFDLE9BQU8sRUFBRSxDQUFDO0FBQy9DLFFBQUEsSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLFVBQVUsQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQy9DLFFBQUEsSUFBSSxDQUFDLEtBQUssR0FBRyxJQUFJLENBQUM7S0FDbEI7SUFDTyxJQUFJLEdBQUE7O0FBRVgsUUFBQSxNQUFNLFNBQVMsR0FBRyxJQUFJLFNBQVMsRUFBRSxDQUFDO0FBQ2xDLFFBQUEsTUFBTSxNQUFNLEdBQUcsSUFBSSxNQUFNLEVBQUUsQ0FBQztBQUM1QixRQUFBLE1BQU0sWUFBWSxHQUFHLElBQUksWUFBWSxFQUFFLENBQUM7QUFDeEMsUUFBQSxJQUFJLENBQUMsWUFBWSxHQUFHLElBQUksV0FBVyxFQUFFLENBQUM7QUFDdEMsUUFBQSxJQUFJLENBQUMsWUFBWSxDQUFDLFNBQVMsR0FBRyxTQUFTLENBQUM7UUFDeEMsSUFBSSxDQUFDLFlBQVksQ0FBQyxPQUFPLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQztBQUNyQyxRQUFBLElBQUksQ0FBQyxZQUFZLENBQUMsWUFBWSxHQUFHLFlBQVksQ0FBQztLQUM5QztJQUNNLE9BQU8sR0FBQTtBQUNiLFFBQUEsSUFBSSxDQUFDLEtBQUssR0FBRyxTQUFTLENBQUM7QUFDdkIsUUFBQSxJQUFJLENBQUMsSUFBSSxHQUFHLFNBQVMsQ0FBQztBQUN0QixRQUFBLElBQUksQ0FBQyxXQUFXLEdBQUcsU0FBUyxDQUFDO0FBQzdCLFFBQUEsSUFBSSxDQUFDLFdBQVcsR0FBRyxTQUFTLENBQUM7QUFDN0IsUUFBQSxJQUFJLENBQUMsS0FBSyxHQUFHLFNBQVMsQ0FBQztLQUN2QjtBQUNEOztBQ2xJb0IsTUFBQSxjQUFlLFNBQVEsUUFBUSxDQUFBO0FBSW5ELElBQUEsV0FBQSxDQUFZLE9BQTRCLEVBQUE7QUFDdkMsUUFBQSxLQUFLLEVBQUUsQ0FBQztBQUNSLFFBQUEsTUFBTSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsSUFBSSxFQUFFLE9BQU8sRUFBRSxLQUFLLEVBQUUsR0FBRyxPQUFPLENBQUM7QUFDckQsUUFBQSxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQztBQUNqQixRQUFBLElBQUksQ0FBQyxtQkFBbUIsR0FBRyxPQUFPLENBQUM7QUFDbkMsUUFBQSxJQUFJLENBQUMsWUFBWSxHQUFHLElBQUksWUFBWSxDQUFDO0FBQ3BDLFlBQUEsUUFBUSxFQUFFLElBQUk7QUFDZCxZQUFBLE1BQU0sRUFBRTtBQUNQLGdCQUFBLFVBQVUsRUFBRSxJQUFJO0FBQ2hCLGdCQUFBLFVBQVUsRUFBRSxJQUFJO0FBQ2hCLGFBQUE7QUFDRCxZQUFBLE9BQU8sRUFBRSxZQUFZLENBQUMsT0FBTyxFQUFFLEVBQUUsQ0FBQztBQUNsQyxTQUFBLENBQUMsQ0FBQztBQUNILFFBQUEsSUFBSSxDQUFDLFFBQVEsR0FBRyxPQUFPLENBQUMsUUFBUSxDQUFDO0FBQ2pDLFFBQUEsSUFBSSxDQUFDLGFBQWEsR0FBRyxTQUFTLENBQUM7QUFDL0IsUUFBQSxJQUFJLENBQUMsS0FBSyxHQUFHLEtBQUssSUFBSSxLQUFLLENBQUM7S0FDNUI7SUFDRCxNQUFNLENBQUMsVUFBdUIsRUFBRSxJQUFXLEVBQUE7QUFDMUMsUUFBQSxJQUFJLENBQUMsSUFBSSxDQUFDLFVBQVUsSUFBSSxJQUFJLENBQUMsS0FBSztBQUFFLFlBQUEsSUFBSSxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxDQUFDO0tBQ2hFO0lBQ0QsS0FBSyxHQUFBO0FBQ0osUUFBQSxPQUFPLElBQUksY0FBYyxDQUFDLElBQUksQ0FBQyxtQkFBbUIsQ0FBQyxDQUFDO0tBQ3BEO0FBQ1MsSUFBQSxnQkFBZ0IsQ0FBQyxJQUFXLEVBQUE7UUFDckMsS0FBSyxDQUFDLGdCQUFnQixFQUFFLENBQUM7UUFDekIsTUFBTSxNQUFNLEdBQUcscUJBQXFCLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxDQUFDO1FBQ3BELElBQUksTUFBTSxDQUFDLFFBQVEsRUFBRTtBQUNwQixZQUFBLElBQUksQ0FBQyxhQUFhLEdBQUcsTUFBTSxDQUFDLFlBQVk7a0JBQ3JDLElBQUksYUFBYSxDQUFDO0FBQ2xCLG9CQUFBLEtBQUssRUFBRSxJQUFJLENBQUMsSUFBSSxHQUFHLGVBQWU7b0JBQ2xDLElBQUksRUFBRSxpQkFBaUIsQ0FBQyxlQUFlO0FBQ3ZDLG9CQUFBLEtBQUssRUFBRSxXQUFXLENBQUMsT0FBTyxHQUFHLFdBQVcsQ0FBQyxPQUFPO2lCQUMvQyxDQUFDO0FBQ0osa0JBQUUsSUFBSSxhQUFhLENBQUMsRUFBRSxLQUFLLEVBQUUsSUFBSSxDQUFDLElBQUksR0FBRyxlQUFlLEVBQUUsQ0FBQyxDQUFDO0FBQzdELFlBQUEsSUFBSSxDQUFDLFVBQVUsQ0FBQyxnQkFBZ0IsQ0FBQyxJQUFJLENBQUMsSUFBSSxFQUFFLElBQUksQ0FBQyxhQUFhLENBQUMsQ0FBQztBQUNoRSxTQUFBO1FBQ0QsTUFBTSxhQUFhLEdBQUcsTUFBTSxDQUFDLG1CQUFtQixDQUFDLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztBQUNoRSxRQUFBLGFBQWEsQ0FBQyxHQUFHLENBQUMsQ0FBQyxZQUFZLEtBQUk7WUFDbEMsc0JBQXNCLENBQ3JCLFlBQVksRUFDWixJQUFJLENBQUMsUUFBUSxDQUFDLFlBQVksQ0FBQyxFQUMzQixJQUFJLENBQUMsVUFBVSxFQUNmLElBQUksRUFDSixJQUFJLENBQUMsYUFBYSxDQUNsQixDQUFDO0FBQ0gsU0FBQyxDQUFDLENBQUM7S0FDSDtBQUNEOztBQzdERCxTQUFTLFVBQVUsR0FBQTs7QUFFakIsSUFBQSxPQUFPLHNDQUFzQyxDQUFDLE9BQU8sQ0FBQyxPQUFPLEVBQUUsVUFBVSxDQUFDLEVBQUE7QUFDeEUsUUFBQSxNQUFNLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxNQUFNLEVBQUUsR0FBRyxFQUFFLElBQUksQ0FBQyxDQUFDO0FBQ25DLFFBQUEsTUFBTSxDQUFDLEdBQUcsQ0FBQyxLQUFLLEdBQUcsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsR0FBRyxJQUFJLEdBQUcsQ0FBQztBQUMxQyxRQUFBLE9BQU8sQ0FBQyxDQUFDLFFBQVEsQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUN4QixLQUFDLENBQUMsQ0FBQztBQUNMOztBQ0dNLE1BQU8sSUFBSyxTQUFRLFlBQVksQ0FBQTtJQVdyQyxXQUFZLENBQUEsUUFBbUIsRUFBRSxRQUFtQixFQUFBO0FBQ25ELFFBQUEsS0FBSyxFQUFFLENBQUM7QUFDUixRQUFBLElBQUksQ0FBQyxRQUFRLEdBQUcsUUFBUSxDQUFDO0FBQ3pCLFFBQUEsSUFBSSxDQUFDLFFBQVEsR0FBRyxRQUFRLENBQUM7QUFDekIsUUFBQSxJQUFJLENBQUMsSUFBSSxHQUFHLGdCQUFnQixDQUFDLElBQUksQ0FBQztBQUNsQyxRQUFBLElBQUksQ0FBQyxXQUFXLEdBQUcsSUFBSSxDQUFDO0FBQ3hCLFFBQUEsSUFBSSxDQUFDLEdBQUcsR0FBRyxVQUFVLEVBQUUsQ0FBQztBQUN4QixRQUFBLElBQUksQ0FBQyxXQUFXLEdBQUcsRUFBRSxDQUFDO0tBQ3RCO0FBQ0QsSUFBQSxJQUFJLEtBQUssR0FBQTtBQUNSLFFBQUEsT0FBTyxJQUFJLENBQUMsUUFBUSxDQUFDLEtBQUssQ0FBQztLQUMzQjtJQUNELE1BQU0sQ0FBQyxVQUFzQixFQUFFLE1BQWUsRUFBQTs7UUFFN0MsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLEVBQUUsTUFBTSxFQUFFLFdBQVcsQ0FBQyxDQUFDOztBQUU3QyxRQUFBLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLFVBQVUsQ0FBQyxDQUFDO1FBQ2pDLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLFVBQVUsRUFBRSxJQUFJLENBQUMsQ0FBQzs7UUFFdkMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxjQUFjLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQztRQUN0RCxJQUFJLENBQUMsUUFBUSxDQUFDLFlBQVksQ0FBQyxVQUFVLENBQUMsVUFBVSxDQUFDLE9BQU8sQ0FBQyxDQUFDO0FBQzFELFFBQUEsSUFBSSxJQUFJLENBQUMsSUFBSSxJQUFJLGdCQUFnQixDQUFDLEtBQUssRUFBRTtZQUN4QyxVQUFVLENBQUMsV0FBVyxDQUFDLFVBQVUsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7WUFDN0MsT0FBTztBQUNQLFNBQUE7QUFDRCxRQUFBLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLGNBQWMsQ0FBQyxnQkFBZ0IsQ0FBQyxNQUFNLENBQUMsQ0FBQztBQUU5RSxRQUFBLE1BQU0sVUFBVSxHQUFHLFVBQVUsQ0FBQyxhQUFhLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxjQUFjLENBQUMsQ0FBQzs7UUFFNUYsSUFBSSxVQUFVLEtBQUssU0FBUyxDQUFDLE9BQU8sSUFBSSxDQUFDLElBQUksQ0FBQyxXQUFXO1lBQUUsT0FBTztBQUNsRSxRQUFBLElBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQyxXQUFXLEVBQUU7WUFDOUIsVUFBVSxDQUFDLFdBQVcsQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQzlDLFNBQUE7QUFBTSxhQUFBO1lBQ04sVUFBVSxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQ3pDLFNBQUE7S0FDRDtJQUNELFlBQVksR0FBQTs7S0FFWDtJQUNELFdBQVcsR0FBQTs7S0FFVjtBQUNNLElBQUEsY0FBYyxDQUFDLGdCQUEyQixFQUFFLGNBQStCLEVBQUUsV0FBeUIsRUFBQTtRQUM1RyxJQUFJLENBQUMsSUFBSSxDQUFDLFdBQVcsSUFBSSxJQUFJLENBQUMsUUFBUSxDQUFDLEtBQUssRUFBRTtBQUM3QyxZQUFBLElBQUksQ0FBQyxRQUFRLENBQUMsWUFBWSxDQUFDLFVBQVUsQ0FDcEMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxFQUFFLEVBQUUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxVQUFVLENBQUMsT0FBTyxFQUFFLElBQUksQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLENBQzFFLENBQUM7QUFDRixZQUFBLElBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQyxLQUFLO0FBQUUsZ0JBQUEsSUFBSSxDQUFDLFFBQVEsQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDO0FBQ3JELFlBQUEsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLFdBQVcsQ0FBQztBQUNsQyxnQkFBQSxhQUFhLEVBQUUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxhQUFhO0FBQzFDLGdCQUFBLFdBQVcsRUFBRSxJQUFJLENBQUMsUUFBUSxDQUFDLFdBQVc7QUFDdEMsZ0JBQUEsVUFBVSxFQUFFLElBQUksQ0FBQyxRQUFRLENBQUMsVUFBVTtnQkFDcEMsU0FBUyxFQUFFLElBQUksQ0FBQyxhQUFhO0FBQzdCLGdCQUFBLEtBQUssRUFBRSxJQUFJLENBQUMsUUFBUSxDQUFDLEtBQUs7QUFDMUIsZ0JBQUEsV0FBVyxFQUFFLElBQUksQ0FBQyxRQUFRLENBQUMsV0FBVztBQUN0QyxnQkFBQSxZQUFZLEVBQUUsSUFBSSxDQUFDLFFBQVEsQ0FBQyxZQUFZO0FBQ3hDLGdCQUFBLGVBQWUsRUFBRSxJQUFJLENBQUMsUUFBUSxDQUFDLEtBQUssR0FBRyxXQUFXLEVBQUUsZUFBZSxHQUFHLFNBQVM7QUFDL0UsZ0JBQUEsUUFBUSxFQUFFLElBQUksQ0FBQyxRQUFRLENBQUMsS0FBSztBQUM3QixhQUFBLENBQUMsQ0FBQztBQUNILFNBQUE7QUFDRCxRQUFBLElBQUksZ0JBQWdCLEVBQUU7QUFDckIsWUFBQSxJQUFJLENBQUMsSUFBSSxDQUFDLFdBQVcsQ0FBQyxjQUFjLENBQUMsRUFBRTtBQUN0QyxnQkFBQSxNQUFNLE9BQU8sR0FBRyxnQkFBZ0IsQ0FBQyxLQUFLLEVBQUUsQ0FBQztBQUN6QyxnQkFBQSxPQUFPLENBQUMsTUFBTSxDQUFDLFNBQVMsRUFBRSxJQUFJLENBQUMsQ0FBQztnQkFDaEMsSUFBSSxPQUFPLENBQUMsS0FBSztBQUFFLG9CQUFBLE9BQU8sQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDO0FBQ3pDLGdCQUFBLElBQUksQ0FBQyxXQUFXLENBQUMsY0FBYyxDQUFDLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQyxZQUFZLENBQUMsT0FBTyxDQUFDLENBQUM7QUFDMUUsYUFBQTtBQUNELFlBQUEsT0FBTyxJQUFJLENBQUMsV0FBVyxDQUFDLGNBQWMsQ0FBQyxDQUFDO0FBQ3hDLFNBQUE7UUFDRCxPQUFPLElBQUksQ0FBQyxXQUFXLENBQUM7S0FDeEI7SUFDRCxPQUFPLEdBQUE7QUFDTixRQUFBLElBQUksQ0FBQyxRQUFRLENBQUMsT0FBTyxFQUFFLENBQUM7QUFDeEIsUUFBQSxJQUFJLENBQUMsUUFBUSxDQUFDLE9BQU8sRUFBRSxDQUFDO0tBQ3hCO0FBQ0Q7O01DckZZLGlCQUFpQixDQUFBO0lBUTdCLFdBQVksQ0FBQSxLQUFZLEVBQUUsS0FBWSxFQUFBO1FBQ3JDLElBQUksQ0FBQyxLQUFLLElBQUksRUFBRSxLQUFLLFlBQVksS0FBSyxDQUFDO0FBQUUsWUFBQSxNQUFNLElBQUksS0FBSyxDQUFDLHNDQUFzQyxDQUFDLENBQUM7QUFFakcsUUFBQSxJQUFJLENBQUMsS0FBSyxHQUFHLEtBQUssQ0FBQztBQUNuQixRQUFBLElBQUksQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDO1FBQ25CLElBQUksQ0FBQyxZQUFZLEdBQUc7QUFDbkIsWUFBQSxLQUFLLEVBQUUsR0FBRztBQUNWLFlBQUEsTUFBTSxFQUFFLEdBQUc7U0FDWCxDQUFDO0FBRUYsUUFBQSxJQUFJLENBQUMsSUFBSSxHQUFHLElBQUksQ0FBQyxvQkFBb0IsRUFBRSxDQUFDO1FBQ3hDLE1BQU0sU0FBUyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsTUFBTSxDQUFDLG1CQUFtQixFQUFFLENBQUM7UUFDMUQsSUFBSSxDQUFDLFFBQVEsQ0FBQyxRQUFRLENBQUMsT0FBTyxDQUFDLEtBQUssR0FBRyxTQUFTLENBQUM7UUFDakQsSUFBSSxDQUFDLElBQUksQ0FBQyxJQUFJLEdBQUcsZ0JBQWdCLENBQUMsS0FBSyxDQUFDO1FBQ3hDLElBQUksQ0FBQyxLQUFLLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztLQUMxQjtJQUVELG9CQUFvQixHQUFBO0FBQ25CLFFBQUEsTUFBTSxNQUFNLEdBQUcsV0FBVyxDQUFDLG1CQUFtQixFQUFFO0FBQy9DLFlBQUEsZ0JBQWdCLEVBQUUsQ0FBQztBQUNuQixTQUFBLENBQUMsQ0FBQztRQUNILElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxhQUFhLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQ3hDLFFBQUEsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLGNBQWMsQ0FBQztBQUNsQyxZQUFBLElBQUksRUFBRSxtQkFBbUI7WUFDekIsSUFBSSxFQUFFLE1BQU0sQ0FBQyxJQUFJO1lBQ2pCLElBQUksRUFBRSxNQUFNLENBQUMsSUFBSTtBQUNqQixZQUFBLFFBQVEsRUFBRTtBQUNULGdCQUFBLE9BQU8sRUFBRTtBQUNSLG9CQUFBLElBQUksRUFBRSxTQUFTO0FBQ2Ysb0JBQUEsS0FBSyxFQUFFLFNBQVM7QUFDaEIsaUJBQUE7QUFDRCxnQkFBQSxPQUFPLEVBQUU7QUFDUixvQkFBQSxJQUFJLEVBQUUsU0FBUztvQkFDZixLQUFLLEVBQUUsSUFBSSxPQUFPLENBQUM7QUFDbEIsd0JBQUEsU0FBUyxFQUFFLFFBQVE7QUFDbkIsd0JBQUEsU0FBUyxFQUFFLFFBQVE7cUJBQ25CLENBQUM7QUFDRixpQkFBQTtBQUNELGFBQUE7QUFDRCxTQUFBLENBQUMsQ0FBQztRQUNILElBQUksQ0FBQyxRQUFRLENBQUMsV0FBVyxDQUFDLFFBQVEsR0FBRyxJQUFJLFFBQVEsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLElBQUksQ0FBQyxZQUFZLENBQUMsS0FBSyxFQUFFLElBQUksQ0FBQyxZQUFZLENBQUMsTUFBTSxDQUFDLENBQUM7UUFDM0csT0FBTyxJQUFJLElBQUksQ0FBQyxJQUFJLENBQUMsUUFBUSxFQUFFLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztLQUM5QztJQUVELE9BQU8sQ0FBQyxLQUFhLEVBQUUsTUFBYyxFQUFBO0FBQ3BDLFFBQUEsSUFBSSxDQUFDLEtBQUssSUFBSSxDQUFDLE1BQU07WUFBRSxPQUFPO0FBQzlCLFFBQUEsSUFBSSxDQUFDLFlBQVksQ0FBQyxLQUFLLEdBQUcsS0FBSyxDQUFDO0FBQ2hDLFFBQUEsSUFBSSxDQUFDLFlBQVksQ0FBQyxNQUFNLEdBQUcsTUFBTSxDQUFDO1FBQ2xDLElBQUksQ0FBQyxNQUFNLEVBQUUsQ0FBQztLQUNkO0lBRUQsTUFBTSxHQUFBO1FBQ0wsSUFBSSxDQUFDLFFBQVEsQ0FBQyxXQUFXLENBQUMsUUFBUSxHQUFHLElBQUksUUFBUSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsSUFBSSxDQUFDLFlBQVksQ0FBQyxLQUFLLEVBQUUsSUFBSSxDQUFDLFlBQVksQ0FBQyxNQUFNLENBQUMsQ0FBQztLQUMzRztBQUNEOztBQ25Fb0IsTUFBQSxhQUFjLFNBQVEsUUFBUSxDQUFBO0FBQ2xELElBQUEsV0FBQSxHQUFBO0FBQ0MsUUFBQSxLQUFLLEVBQUUsQ0FBQztBQUNSLFFBQUEsSUFBSSxDQUFDLElBQUksR0FBRyxPQUFPLENBQUM7QUFDcEIsUUFBQSxJQUFJLENBQUMsWUFBWSxHQUFHLElBQUksWUFBWSxDQUFDO1lBQ3BDLFFBQVEsRUFBRSxJQUFJLENBQUMsSUFBSTtBQUNuQixZQUFBLE9BQU8sRUFBRSxFQUFFO0FBQ1gsU0FBQSxDQUFDLENBQUM7S0FDSDtJQUNELE1BQU0sQ0FBQyxVQUF1QixFQUFFLElBQVcsRUFBQTtBQUMxQyxRQUFBLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxJQUFJLElBQUksQ0FBQyxLQUFLO1lBQUUsSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUM7UUFDNUQsTUFBTSxhQUFhLEdBQUcsSUFBSSxhQUFhLENBQUMsRUFBRSxLQUFLLEVBQUUsT0FBTyxFQUFFLENBQUMsQ0FBQztBQUM1RCxRQUFBLGFBQWEsQ0FBQyxVQUFVLENBQ3ZCLGFBQWEsRUFDYixNQUFLO1lBQ0osT0FBTyxJQUFJLENBQUMsV0FBVyxDQUFDO0FBQ3pCLFNBQUMsRUFDRCxXQUFXLENBQUMsSUFBSSxDQUNoQixDQUFDO1FBQ0YsSUFBSSxDQUFDLFVBQVUsQ0FBQyxnQkFBZ0IsQ0FBQyxPQUFPLEVBQUUsYUFBYSxDQUFDLENBQUM7S0FDekQ7QUFDRDs7QUNyQm9CLE1BQUEsSUFBSyxTQUFRLElBQUksQ0FBQTtBQUVyQyxJQUFBLFdBQUEsR0FBQTtBQUNDLFFBQUEsS0FBSyxFQUFFLENBQUM7QUFDUixRQUFBLElBQUksQ0FBQyxJQUFJLEdBQUcsZ0JBQWdCLENBQUMsSUFBSSxDQUFDO0FBQ2xDLFFBQUEsSUFBSSxDQUFDLGdCQUFnQixHQUFHLEVBQUUsQ0FBQztBQUMzQixRQUFBLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxhQUFhLEVBQUUsQ0FBQztBQUNwQyxRQUFBLElBQUksQ0FBQyxRQUFRLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQztRQUMvQixJQUFJLENBQUMsSUFBSSxFQUFFLENBQUM7S0FDWjtBQUNELElBQUEsTUFBTSxDQUFDLFVBQXNCLEVBQUE7UUFDNUIsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO1FBQ3BCLElBQUksQ0FBQyxRQUFRLENBQUMsTUFBTSxDQUFDLFVBQVUsRUFBRSxJQUFJLENBQUMsQ0FBQztRQUN2QyxVQUFVLENBQUMsV0FBVyxDQUFDLE1BQU0sQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7S0FDekM7SUFDTyxJQUFJLEdBQUE7QUFDWCxRQUFBLE1BQU0sUUFBUSxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztRQUN4RSxNQUFNLE1BQU0sR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDLEVBQUUsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDcEcsUUFBQSxNQUFNLE9BQU8sR0FBRyxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFDbkMsSUFBSSxDQUFDLFFBQVEsR0FBRyxJQUFJLFFBQVEsQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUNqQyxRQUFBLElBQUksQ0FBQyxRQUFRLENBQUMsWUFBWSxDQUFDLElBQUksZ0JBQWdCLENBQUMsVUFBVSxFQUFFLFFBQVEsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzFFLFFBQUEsSUFBSSxDQUFDLFFBQVEsQ0FBQyxZQUFZLENBQUMsSUFBSSxnQkFBZ0IsQ0FBQyxPQUFPLEVBQUUsTUFBTSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDckUsUUFBQSxJQUFJLENBQUMsUUFBUSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsQ0FBQztRQUNqQyxJQUFJLENBQUMsUUFBUSxDQUFDLEtBQUssR0FBRyxPQUFPLENBQUMsTUFBTSxDQUFDO0tBQ3JDO0FBQ0Q7O0FDN0JvQixNQUFBLGNBQWUsU0FBUSxRQUFRLENBQUE7QUFDbkQsSUFBQSxXQUFBLEdBQUE7QUFDQyxRQUFBLEtBQUssQ0FBQztBQUNMLFlBQUEsSUFBSSxFQUFFLGdCQUFnQjtBQUN0QixTQUFBLENBQUMsQ0FBQztRQUNILElBQUksQ0FBQyxJQUFJLEVBQUUsQ0FBQztLQUNaO0lBQ00sSUFBSSxHQUFBO0FBQ1YsUUFBQSxNQUFNLFNBQVMsR0FBRztZQUNqQixHQUFHO1lBQ0gsR0FBRztZQUNILEdBQUc7QUFDSCxZQUFBLENBQUMsR0FBRztZQUNKLEdBQUc7WUFDSCxHQUFHO1lBQ0gsR0FBRztBQUNILFlBQUEsQ0FBQyxHQUFHO1lBQ0osR0FBRztBQUNILFlBQUEsQ0FBQyxHQUFHO0FBQ0osWUFBQSxDQUFDLEdBQUc7WUFDSixHQUFHO1lBQ0gsR0FBRztZQUNILEdBQUc7QUFDSCxZQUFBLENBQUMsR0FBRztBQUNKLFlBQUEsQ0FBQyxHQUFHO1lBQ0osR0FBRztBQUNILFlBQUEsQ0FBQyxHQUFHO1lBQ0osR0FBRztBQUNILFlBQUEsQ0FBQyxHQUFHO0FBQ0osWUFBQSxDQUFDLEdBQUc7QUFDSixZQUFBLENBQUMsR0FBRztBQUNKLFlBQUEsQ0FBQyxHQUFHO1lBQ0osQ0FBQyxHQUFHO1NBQ0osQ0FBQztBQUNGLFFBQUEsTUFBTSxPQUFPLEdBQUc7O1lBRWYsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDOztZQUdoQixDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUM7O1lBR2hCLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQzs7WUFHaEIsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDOztZQUdoQixDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUM7O1lBR2hCLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQztTQUNoQixDQUFDO0FBQ0YsUUFBQSxJQUFJLENBQUMsWUFBWSxDQUFDLElBQUksZ0JBQWdCLENBQUMsVUFBVSxFQUFFLFNBQVMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2xFLFFBQUEsSUFBSSxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsQ0FBQztBQUN4QixRQUFBLElBQUksQ0FBQyxLQUFLLEdBQUcsT0FBTyxDQUFDLE1BQU0sQ0FBQztLQUM1QjtBQUNEOztBQzNERCxTQUFTLFVBQVUsR0FBQTtBQUNsQixJQUFBLE9BQU8sSUFBSSxDQUFDO0FBQ2IsQ0FBQztBQUNLLFNBQVUsYUFBYSxDQUFDLE1BQU0sRUFBQTs7QUFHbkMsSUFBQSxTQUFTLGdCQUFnQixHQUFBO0FBQ3hCLFFBQUEsTUFBTSxJQUFJLEtBQUssQ0FBQyx3REFBd0QsQ0FBQyxDQUFDO0tBQzFFO0FBRUQsSUFBQSxLQUFLLE1BQU0sR0FBRyxJQUFJLE1BQU0sRUFBRTtBQUN6QixRQUFBLElBQUksT0FBTyxNQUFNLENBQUMsR0FBRyxDQUFDLEtBQUssVUFBVSxFQUFFO0FBQ3RDLFlBQUEsTUFBTSxDQUFDLEdBQUcsQ0FBQyxHQUFHLGdCQUFnQixDQUFDO0FBQy9CLFNBQUE7QUFDRCxLQUFBO0FBRUQsSUFBQSxNQUFNLENBQUMsV0FBVyxHQUFHLFVBQVUsQ0FBQztBQUVoQyxJQUFBLE9BQU8sU0FBUyxDQUFDO0FBQ2xCOztBQ1hBLE1BQU0sWUFBWSxDQUFBO0FBS2pCLElBQUEsV0FBQSxHQUFBO0FBQ0MsUUFBQSxJQUFJLENBQUMsaUJBQWlCLEdBQUcsQ0FBQyxDQUFDO0FBQzNCLFFBQUEsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLEdBQUcsRUFBRSxDQUFDO0FBQzNCLFFBQUEsSUFBSSxDQUFDLGlCQUFpQixHQUFHLENBQUMsQ0FBQztBQUMzQixRQUFBLElBQUksQ0FBQyxrQkFBa0IsR0FBRyxJQUFJLEdBQUcsRUFBRSxDQUFDO0FBQ3BDLFFBQUEsSUFBSSxDQUFDLGNBQWMsR0FBRyxJQUFJLE9BQU8sQ0FBQztBQUNqQyxZQUFBLFNBQVMsRUFBRSxRQUFRO0FBQ25CLFlBQUEsU0FBUyxFQUFFLFFBQVE7QUFDbkIsWUFBQSxZQUFZLEVBQUUsUUFBUTtBQUN0QixZQUFBLFlBQVksRUFBRSxRQUFRO0FBQ3RCLFNBQUEsQ0FBQyxDQUFDO0tBQ0g7QUFDRCxJQUFBLElBQUksZ0JBQWdCLEdBQUE7UUFDbkIsT0FBTyxJQUFJLENBQUMsaUJBQWlCLENBQUM7S0FDOUI7QUFDRCxJQUFBLFVBQVUsQ0FBQyxPQUFPLEVBQUE7UUFDakIsTUFBTSxhQUFhLEdBQUcsSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsT0FBTyxDQUFDLENBQUM7QUFDbEQsUUFBQSxJQUFJLENBQUMsT0FBTyxDQUFDLGFBQWEsQ0FBQyxFQUFFO0FBQzVCLFlBQUEsT0FBTyxTQUFTLENBQUM7QUFDakIsU0FBQTs7QUFFRCxRQUFBLE9BQU8sSUFBSSxDQUFDLGtCQUFrQixDQUFDLE9BQU8sQ0FBQyxDQUFDO1FBRXhDLEVBQUUsYUFBYSxDQUFDLEtBQUssQ0FBQztRQUN0QixPQUFPLGFBQWEsQ0FBQyxPQUFPLENBQUM7S0FDN0I7SUFDRCxVQUFVLENBQUMsT0FBTyxFQUFFLE9BQU8sRUFBQTtBQUMxQixRQUFBLE1BQU0sYUFBYSxHQUFHO0FBQ3JCLFlBQUEsT0FBTyxFQUFFLE9BQU87QUFDaEIsWUFBQSxLQUFLLEVBQUUsQ0FBQztTQUNSLENBQUM7QUFFRixRQUFBLE9BQU8sQ0FBQyxZQUFZLEdBQUcsT0FBTyxDQUFDLE9BQU8sQ0FBQzs7QUFHdkMsUUFBQSxPQUFPLENBQUMsT0FBTyxHQUFHLE1BQUs7QUFDdEIsWUFBQSxJQUFJLEVBQUUsYUFBYSxDQUFDLEtBQUssS0FBSyxDQUFDLEVBQUU7Z0JBQ2hDLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxHQUFHLENBQUMsT0FBTyxFQUFFLGFBQWEsQ0FBQyxDQUFDO0FBQ3BELGFBQUE7QUFDRixTQUFDLENBQUM7UUFFRixJQUFJLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxPQUFPLEVBQUUsYUFBYSxDQUFDLENBQUM7UUFDM0MsRUFBRSxJQUFJLENBQUMsaUJBQWlCLENBQUM7S0FDekI7SUFDRCxnQkFBZ0IsR0FBQTtRQUNmLElBQUksQ0FBQyxrQkFBa0IsQ0FBQyxPQUFPLENBQUMsQ0FBQyxZQUFZLEtBQUk7QUFDaEQsWUFBQSxZQUFZLENBQUMsT0FBTyxFQUFFLFlBQVksRUFBRSxDQUFDO1lBQ3JDLEVBQUUsSUFBSSxDQUFDLGlCQUFpQixDQUFDO0FBQzFCLFNBQUMsQ0FBQyxDQUFDO0FBRUgsUUFBQSxJQUFJLENBQUMsa0JBQWtCLENBQUMsS0FBSyxFQUFFLENBQUM7S0FDaEM7SUFDRCxPQUFPLEdBQUE7UUFDTixJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxDQUFDLGFBQWEsS0FBSTtBQUN4QyxZQUFBLGFBQWEsQ0FBQyxPQUFPLEVBQUUsWUFBWSxFQUFFLENBQUM7QUFDdkMsU0FBQyxDQUFDLENBQUM7QUFDSCxRQUFBLE9BQU8sYUFBYSxDQUFDLElBQUksQ0FBQyxDQUFDO0tBQzNCO0FBQ0QsQ0FBQTtBQUNELE1BQU0sWUFBWSxHQUFHLElBQUksWUFBWSxFQUFFOztBQ3JFeEIsZUFBZSxpQkFBaUIsQ0FBQyxJQUFJLEVBQUE7SUFDbkQsTUFBTSxRQUFRLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsS0FBSTtRQUNqQyxNQUFNLEdBQUcsR0FBRyxRQUFRLENBQUMsYUFBYSxDQUFDLEtBQUssQ0FBQyxDQUFDO0FBQzFDLFFBQUEsR0FBRyxDQUFDLEdBQUcsR0FBRyxHQUFHLENBQUM7QUFDZCxRQUFBLE9BQU8sR0FBRyxDQUFDLE1BQU0sRUFBRSxDQUFDLElBQUksQ0FBQyxNQUFNLGlCQUFpQixDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDeEQsS0FBQyxDQUFDLENBQUM7SUFDSCxNQUFNLE1BQU0sR0FBRyxNQUFNLE9BQU8sQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLENBQUM7QUFDM0MsSUFBQSxNQUFNLE9BQU8sQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUM7QUFDMUIsSUFBQSxNQUFNLFdBQVcsR0FBRyxJQUFJLE9BQU8sQ0FBQztBQUMvQixRQUFBLFNBQVMsRUFBRSxRQUFRO0FBQ25CLFFBQUEsU0FBUyxFQUFFLFFBQVE7QUFDbkIsS0FBQSxDQUFDLENBQUM7SUFDSCxNQUFNLElBQUksR0FBRyxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsS0FBSyxFQUFFLENBQUMsS0FBSTtRQUNwQyxPQUFPO0FBQ04sWUFBQSxNQUFNLEVBQUUsS0FBSztZQUNiLEtBQUssRUFBRSxLQUFLLENBQUMsS0FBSztZQUNsQixNQUFNLEVBQUUsS0FBSyxDQUFDLE1BQU07QUFDcEIsWUFBQSxLQUFLLEVBQUUsQ0FBQztBQUNSLFlBQUEsQ0FBQyxFQUFFLENBQUM7QUFDSixZQUFBLENBQUMsRUFBRSxDQUFDO0FBQ0osWUFBQSxDQUFDLEVBQUUsQ0FBQztTQUNKLENBQUM7QUFDSCxLQUFDLENBQUMsQ0FBQztBQUNILElBQUEsTUFBTSxXQUFXLEdBQUcsSUFBSSxPQUFPLENBQUM7QUFDL0IsUUFBQSxJQUFJLEVBQUU7QUFDTCxZQUFBLEtBQUssRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSztBQUN0QixZQUFBLE1BQU0sRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsTUFBTTtBQUN4QixZQUFBLEtBQUssRUFBRSxDQUFDO0FBQ1IsU0FBQTtBQUNELFFBQUEsTUFBTSxFQUFFLFlBQVk7UUFDcEIsS0FBSyxFQUFFLGVBQWUsQ0FBQyxlQUFlLEdBQUcsZUFBZSxDQUFDLFFBQVEsR0FBRyxlQUFlLENBQUMsaUJBQWlCO1FBQ3JHLElBQUk7QUFDSixRQUFBLFdBQVcsRUFBRSxNQUFNO0FBQ25CLFFBQUEsYUFBYSxFQUFFLENBQUM7QUFDaEIsUUFBQSxVQUFVLEVBQUUsSUFBSTtBQUNoQixLQUFBLENBQUMsQ0FBQztJQUNILE9BQU87QUFDTixRQUFBLE9BQU8sRUFBRSxXQUFXO0FBQ3BCLFFBQUEsT0FBTyxFQUFFLFdBQVc7S0FDcEIsQ0FBQztBQUNIOztBQ2xDcUIsTUFBQSxjQUFlLFNBQVEsUUFBUSxDQUFBO0FBRW5ELElBQUEsV0FBQSxHQUFBO0FBQ0MsUUFBQSxLQUFLLEVBQUUsQ0FBQztBQUNSLFFBQUEsSUFBSSxDQUFDLElBQUksR0FBRyxRQUFRLENBQUM7QUFDckIsUUFBQSxJQUFJLENBQUMsWUFBWSxHQUFHLElBQUksWUFBWSxDQUFDO1lBQ3BDLFFBQVEsRUFBRSxJQUFJLENBQUMsSUFBSTtBQUNuQixZQUFBLE9BQU8sRUFBRSxFQUFFO0FBQ1gsU0FBQSxDQUFDLENBQUM7QUFDSCxRQUFBLElBQUksQ0FBQyxRQUFRLEdBQUcsS0FBSyxDQUFDO1FBQ3RCLElBQUksQ0FBQyxXQUFXLENBQUMsWUFBWSxDQUFDLGlCQUFpQixHQUFHLEtBQUssQ0FBQztRQUN4RCxJQUFJLENBQUMsV0FBVyxDQUFDLFlBQVksQ0FBQyxZQUFZLEdBQUcsZUFBZSxDQUFDLFNBQVMsQ0FBQztLQUN2RTtJQUNELE1BQU0sV0FBVyxDQUFDLElBQUksRUFBQTtBQUNyQixRQUFBLE1BQU0sTUFBTSxHQUFHLE1BQU0saUJBQWlCLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDN0MsUUFBQSxJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQztRQUNyQixZQUFZLENBQUMsVUFBVSxDQUFDLFVBQVUsRUFBRSxNQUFNLENBQUMsT0FBTyxDQUFDLENBQUM7QUFDcEQsUUFBQSxJQUFJLENBQUMsV0FBVyxHQUFHLE1BQU0sQ0FBQyxPQUFPLENBQUM7QUFDbEMsUUFBQSxJQUFJLENBQUMsV0FBVyxHQUFHLE1BQU0sQ0FBQyxPQUFPLENBQUM7S0FDbEM7SUFDRCxNQUFNLENBQUMsVUFBdUIsRUFBRSxJQUFXLEVBQUE7UUFDMUMsSUFBSSxDQUFDLElBQUksQ0FBQyxRQUFRO1lBQUUsT0FBTztBQUMzQixRQUFBLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxFQUFFO0FBQ3JCLFlBQUEsSUFBSSxDQUFDLGdCQUFnQixDQUFDLElBQUksQ0FBQyxDQUFDO0FBQzVCLFNBQUE7S0FDRDtBQUNTLElBQUEsZ0JBQWdCLENBQUMsSUFBVyxFQUFBO1FBQ3JDLEtBQUssQ0FBQyxnQkFBZ0IsRUFBRSxDQUFDO1FBQ3pCLE1BQU0sYUFBYSxHQUFHLElBQUksYUFBYSxDQUFDLEVBQUUsS0FBSyxFQUFFLFFBQVEsRUFBRSxDQUFDLENBQUM7QUFDN0QsUUFBQSxhQUFhLENBQUMsVUFBVSxDQUN2QixhQUFhLEVBQ2IsTUFBSztZQUNKLE9BQU8sSUFBSSxDQUFDLFdBQVcsQ0FBQztBQUN6QixTQUFDLEVBQ0QsV0FBVyxDQUFDLElBQUksQ0FDaEIsQ0FBQztRQUNGLElBQUksQ0FBQyxVQUFVLENBQUMsZ0JBQWdCLENBQUMsUUFBUSxFQUFFLGFBQWEsQ0FBQyxDQUFDO1FBQzFELElBQUksQ0FBQyxVQUFVLENBQUMsVUFBVSxDQUFDLGFBQWEsRUFBRSxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUM7UUFDNUQsSUFBSSxDQUFDLFVBQVUsQ0FBQyxVQUFVLENBQUMsYUFBYSxFQUFFLElBQUksQ0FBQyxXQUFXLENBQUMsQ0FBQztLQUM1RDtBQUNEOztBQzVDb0IsTUFBQSxNQUFPLFNBQVEsSUFBSSxDQUFBO0FBR3ZDLElBQUEsV0FBQSxDQUFZLElBQW9CLEVBQUE7QUFDL0IsUUFBQSxLQUFLLEVBQUUsQ0FBQztBQUNSLFFBQUEsSUFBSSxDQUFDLElBQUksR0FBRyxnQkFBZ0IsQ0FBQyxNQUFNLENBQUM7QUFDcEMsUUFBQSxJQUFJLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQztBQUN2QixRQUFBLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxjQUFjLEVBQUUsQ0FBQztBQUNyQyxRQUFBLElBQUksSUFBSTtBQUFFLFlBQUEsSUFBSSxDQUFDLFFBQVEsQ0FBQyxXQUFXLENBQUMsSUFBSSxDQUFDLENBQUM7QUFDMUMsUUFBQSxJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksY0FBYyxFQUFFLENBQUM7QUFDckMsUUFBQSxJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQztLQUNyQjtBQUNELElBQUEsTUFBTSxDQUFDLFVBQXNCLEVBQUE7UUFDNUIsSUFBSSxDQUFDLFlBQVksRUFBRSxDQUFDO0FBQ3BCLFFBQUEsSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsVUFBVSxDQUFDLENBQUM7UUFDakMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxNQUFNLENBQUMsVUFBVSxFQUFFLElBQUksQ0FBQyxDQUFDO1FBQ3ZDLElBQUksSUFBSSxDQUFDLFVBQVU7WUFBRSxVQUFVLENBQUMsV0FBVyxDQUFDLEdBQUcsQ0FBQyxJQUFJLENBQUMsSUFBSSxDQUFDLENBQUM7S0FDM0Q7QUFDRDs7QUNuQkssTUFBTyxRQUFTLFNBQVEsWUFBWSxDQUFBO0FBSXpDLElBQUEsV0FBQSxHQUFBO0FBQ0MsUUFBQSxLQUFLLEVBQUUsQ0FBQztBQUNSLFFBQUEsSUFBSSxDQUFDLGdCQUFnQixHQUFHLEtBQUssQ0FBQztBQUM5QixRQUFBLElBQUksQ0FBQyxTQUFTLEdBQUcsS0FBSyxDQUFDO0FBQ3ZCLFFBQUEsSUFBSSxDQUFDLEVBQUUsR0FBRyxVQUFVLEVBQUUsQ0FBQztLQUN2QjtBQUNELElBQUEsVUFBVSxDQUFDLElBQWEsRUFBQTtBQUN2QixRQUFBLElBQUksQ0FBQyxXQUFXLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQzNCLFFBQUEsSUFBSSxDQUFDLGdCQUFnQixHQUFHLElBQUksQ0FBQztLQUM3QjtBQUNELElBQUEsWUFBWSxDQUFDLE1BQWdCLEVBQUE7UUFDNUIsSUFBSSxJQUFJLENBQUMsZ0JBQWdCO1lBQUUsT0FBTztBQUNsQyxRQUFBLEtBQUssQ0FBQyxZQUFZLENBQUMsTUFBTSxDQUFDLENBQUM7S0FDM0I7QUFDRDs7QUNaSyxNQUFPLFlBQWEsU0FBUSxJQUFJLENBQUE7SUFJckMsV0FBWSxDQUFBLEdBQWEsRUFBRSxHQUFhLEVBQUE7QUFDdkMsUUFBQSxLQUFLLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBQ2hCLFFBQUEsSUFBSSxDQUFDLFNBQVMsR0FBRyxJQUFJLEdBQUcsRUFBRSxDQUFDO0FBQzNCLFFBQUEsSUFBSSxDQUFDLGVBQWUsR0FBRyxFQUFFLENBQUM7QUFDMUIsUUFBQSxJQUFJLENBQUMsZUFBZSxHQUFHLEtBQUssQ0FBQztLQUM3QjtJQUNELE1BQU0sQ0FBQyxVQUFzQixFQUFFLE1BQWUsRUFBQTs7UUFFN0MsSUFBSSxDQUFDLHVCQUF1QixDQUFDLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSxDQUFDLENBQUM7QUFDckQsUUFBQSxJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUNqQyxJQUFJLENBQUMsUUFBUSxDQUFDLE1BQU0sQ0FBQyxVQUFVLEVBQUUsSUFBSSxDQUFDLENBQUM7UUFDdkMsSUFBSSxDQUFDLElBQUksQ0FBQyxlQUFlO1lBQUUsSUFBSSxDQUFDLHFCQUFxQixFQUFFLENBQUM7UUFDeEQsSUFBSSxDQUFDLGFBQWEsR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDLE1BQU0sQ0FBQztBQUNqRCxRQUFBLElBQUksSUFBSSxDQUFDLGVBQWUsQ0FBQyxNQUFNLEdBQUcsQ0FBQztZQUFFLE9BQU87QUFDNUMsUUFBQSxJQUFJLElBQUksQ0FBQyxRQUFRLENBQUMsV0FBVyxFQUFFO1lBQzlCLFVBQVUsQ0FBQyxXQUFXLENBQUMsV0FBVyxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUM5QyxTQUFBO0FBQU0sYUFBQTtZQUNOLFVBQVUsQ0FBQyxXQUFXLENBQUMsTUFBTSxDQUFDLElBQUksQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUN6QyxTQUFBO0tBQ0Q7QUFDRCxJQUFBLFdBQVcsQ0FBQyxRQUFrQixFQUFBO1FBQzdCLElBQUksSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLEVBQUUsQ0FBQztZQUFFLE9BQU87UUFDNUMsSUFBSSxDQUFDLFNBQVMsQ0FBQyxHQUFHLENBQUMsUUFBUSxDQUFDLEVBQUUsRUFBRSxRQUFRLENBQUMsQ0FBQztLQUMxQztBQUNELElBQUEsY0FBYyxDQUFDLEdBQW9CLEVBQUE7UUFDbEMsT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQztLQUNsQztBQUNELElBQUEsV0FBVyxDQUFDLEdBQW9CLEVBQUE7UUFDL0IsT0FBTyxJQUFJLENBQUMsU0FBUyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztLQUMvQjtBQUNPLElBQUEsdUJBQXVCLENBQUMsT0FBbUQsRUFBQTtBQUNsRixRQUFBLE1BQU0sRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFLEdBQUcsT0FBTyxDQUFDO0FBQ3ZDLFFBQUEsTUFBTSxxQkFBcUIsR0FBRyxJQUFJLENBQUMsZUFBZSxDQUFDLE1BQU0sQ0FBQztBQUMxRCxRQUFBLElBQUksQ0FBQyxlQUFlLEdBQUcsRUFBRSxDQUFDO1FBQzFCLElBQUksQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLENBQUMsUUFBa0IsS0FBSTtZQUM3QyxRQUFRLENBQUMsWUFBWSxDQUFDLElBQUksRUFBRSxNQUFNLEVBQUUsV0FBVyxDQUFDLENBQUM7QUFDakQsWUFBQSxRQUFRLENBQUMsU0FBUyxHQUFHLElBQUksQ0FBQyxvQkFBb0IsQ0FBQyxFQUFFLFFBQVEsRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFLENBQUMsQ0FBQztZQUNqRixJQUFJLFFBQVEsQ0FBQyxTQUFTO0FBQUUsZ0JBQUEsSUFBSSxDQUFDLGVBQWUsQ0FBQyxJQUFJLENBQUMsUUFBUSxDQUFDLENBQUM7QUFDN0QsU0FBQyxDQUFDLENBQUM7QUFDSCxRQUFBLElBQUksQ0FBQyxRQUFRLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxlQUFlLENBQUMsTUFBTSxLQUFLLHFCQUFxQixDQUFDOztBQUU1RSxRQUFBLElBQUksSUFBSSxDQUFDLFFBQVEsQ0FBQyxLQUFLO0FBQUUsWUFBQSxJQUFJLENBQUMsZUFBZSxHQUFHLEtBQUssQ0FBQztLQUN0RDtBQUNPLElBQUEsb0JBQW9CLENBQUMsT0FBdUUsRUFBQTtRQUNuRyxNQUFNLEVBQUUsUUFBUSxFQUFFLFVBQVUsRUFBRSxNQUFNLEVBQUUsR0FBRyxPQUFPLENBQUM7UUFDakQsSUFBSSxDQUFDLFFBQVEsQ0FBQyxjQUFjLENBQUMsTUFBTSxDQUFDLFFBQVEsQ0FBQyxXQUFXLENBQUMsQ0FBQztBQUMxRCxRQUFBLElBQUksQ0FBQyxnQkFBZ0IsR0FBRyxJQUFJLENBQUMsUUFBUSxDQUFDLGNBQWMsQ0FBQyxnQkFBZ0IsQ0FBQyxNQUFNLENBQUMsQ0FBQztBQUM5RSxRQUFBLE1BQU0sVUFBVSxHQUFHLFVBQVUsQ0FBQyxhQUFhLENBQUMsaUJBQWlCLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxjQUFjLENBQUMsQ0FBQztRQUM1RixPQUFPLFVBQVUsS0FBSyxTQUFTLENBQUMsWUFBWSxJQUFJLFVBQVUsS0FBSyxTQUFTLENBQUMsTUFBTSxDQUFDO0tBQ2hGO0lBQ08scUJBQXFCLEdBQUE7QUFDNUIsUUFBQSxJQUFJLENBQUMsSUFBSSxDQUFDLFFBQVEsQ0FBQyxVQUFVO1lBQUUsT0FBTztBQUN0QyxRQUFBLElBQUksQ0FBQyxlQUFlLEdBQUcsSUFBSSxDQUFDO0FBQzVCLFFBQUEsTUFBTSxxQkFBcUIsR0FBRyxJQUFJLGFBQWEsQ0FBQztBQUMvQyxZQUFBLEtBQUssRUFBRSx1QkFBdUI7WUFDOUIsSUFBSSxFQUFFLGlCQUFpQixDQUFDLGVBQWU7QUFDdkMsWUFBQSxLQUFLLEVBQUUsV0FBVyxDQUFDLE9BQU8sR0FBRyxXQUFXLENBQUMsT0FBTztBQUNoRCxZQUFBLElBQUksRUFBRSxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksR0FBRyxFQUFFO0FBQzlCLFNBQUEsQ0FBQyxDQUFDO0FBQ0gsUUFBQSxxQkFBcUIsQ0FBQyxVQUFVLENBQy9CLGlCQUFpQixFQUNqQixNQUFLO0FBQ0osWUFBQSxPQUFPLElBQUksRUFBRSxlQUFlLEVBQUUsR0FBRyxDQUFDLENBQUMsY0FBd0IsS0FBSyxjQUFjLENBQUMsV0FBVyxDQUFDLENBQUM7U0FDNUYsRUFDRCxXQUFXLENBQUMsU0FBUyxFQUNyQixJQUFJLEVBQUUsZUFBZSxFQUFFLE1BQU0sQ0FDN0IsQ0FBQztRQUNGLElBQUksQ0FBQyxRQUFRLENBQUMsVUFBVSxDQUFDLGdCQUFnQixDQUFDLHVCQUF1QixFQUFFLHFCQUFxQixDQUFDLENBQUM7UUFDMUYsSUFBSSxDQUFDLFFBQVEsQ0FBQyxVQUFVLENBQUMsU0FBUyxDQUFDLGNBQWMsRUFBRSxJQUFJLENBQUMsQ0FBQztBQUN6RCxRQUFBLElBQUksQ0FBQyxRQUFRLENBQUMsVUFBVSxDQUFDLFNBQVMsQ0FBQyxlQUFlLEVBQUUsSUFBSSxFQUFFLGVBQWUsRUFBRSxNQUFNLENBQUMsQ0FBQztLQUNuRjtBQUNEOztNQ2hGWSxjQUFjLENBQUE7QUFJMUIsSUFBQSxXQUFBLENBQVksT0FBMkIsRUFBQTtBQUN0QyxRQUFBLElBQUksQ0FBQyxRQUFRLEdBQUcsT0FBTyxDQUFDLFFBQVEsQ0FBQztBQUNqQyxRQUFBLElBQUksQ0FBQyxVQUFVLEdBQUcsT0FBTyxDQUFDLFVBQVUsQ0FBQztBQUNyQyxRQUFBLElBQUksQ0FBQyxZQUFZLEdBQUcsT0FBTyxDQUFDLFlBQVksQ0FBQztLQUN6QztBQUNELElBQUEsTUFBTSxDQUFDLE1BQXNCLEVBQUE7QUFDNUIsUUFBQSxNQUFNLEVBQUUsTUFBTSxFQUFFLFdBQVcsRUFBRSxHQUFHLE1BQU0sQ0FBQztRQUN2QyxJQUFJLENBQUMsVUFBVSxFQUFFLElBQUksR0FBRyxNQUFNLEVBQUUsV0FBVyxDQUFDLENBQUM7QUFDN0MsUUFBQSxNQUFNLFFBQVEsR0FBRyxRQUFRLENBQUMsMkJBQTJCLENBQUMsTUFBTSxFQUFFLElBQUksRUFBRSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsV0FBVyxDQUFDLENBQUMsQ0FBQztBQUNuRyxRQUFBLFFBQVEsQ0FBQyxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUM7UUFDM0IsTUFBTSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLEdBQUcsSUFBSSxDQUFDLFFBQVEsQ0FBQztRQUNsQyxXQUFXLENBQUMsa0JBQWtCLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztLQUN4QztBQUNEOztNQ1NZLEtBQUssQ0FBQTtBQU1qQixJQUFBLFdBQUEsQ0FBWSxNQUFtQixFQUFBO0FBQzlCLFFBQUEsSUFBSSxDQUFDLFdBQVcsR0FBRyxNQUFNLENBQUM7QUFDMUIsUUFBQSxJQUFJLENBQUMsVUFBVSxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUMsT0FBTyxJQUFJLFNBQVMsR0FBRyxTQUFTLEdBQUcsUUFBUSxDQUFDO0FBQy9FLFFBQUEsSUFBSSxDQUFDLGFBQWEsR0FBRyxJQUFJLEdBQUcsRUFBRSxDQUFDO0tBQy9CO0FBQ0QsSUFBQSxNQUFNLENBQUMsTUFBeUIsRUFBQTtBQUMvQixRQUFBLE1BQU0sRUFBRSxNQUFNLEVBQUUsV0FBVyxFQUFFLEdBQUcsTUFBTSxDQUFDO1FBQ3ZDLElBQUksQ0FBQyxJQUFJLENBQUMsT0FBTztZQUNoQixJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxVQUFVLEtBQUssUUFBUSxHQUFHLElBQUksQ0FBQyxpQkFBaUIsRUFBRSxHQUFHLElBQUksQ0FBQyxvQkFBb0IsRUFBRSxDQUFDO0FBQ3RHLFFBQUEsSUFBSSxJQUFJLENBQUMsVUFBVSxLQUFLLFFBQVEsRUFBRTtBQUNoQyxZQUFBLElBQUksQ0FBQyxPQUF1QixDQUFDLE1BQU0sQ0FBQztnQkFDcEMsTUFBTTtBQUNOLGdCQUFBLFdBQVcsRUFBd0IsV0FBVztBQUM5QyxhQUFBLENBQUMsQ0FBQztBQUNILFNBQUE7QUFBTSxhQUFBO0FBQ0wsWUFBQSxJQUFJLENBQUMsT0FBMEIsQ0FBQyxNQUFNLENBQUM7Z0JBQ3ZDLE1BQU07QUFDTixnQkFBQSxXQUFXLEVBQXlCLFdBQVc7QUFDL0MsYUFBQSxDQUFDLENBQUM7QUFDSCxTQUFBO0tBQ0Q7QUFDRCxJQUFBLE9BQU8sQ0FBQyxNQUF5QixFQUFBO0FBQ2hDLFFBQUEsTUFBTSxFQUFFLE1BQU0sRUFBRSxXQUFXLEVBQUUsR0FBRyxNQUFNLENBQUM7UUFDdkMsSUFBSSxDQUFDLElBQUksQ0FBQyxPQUFPO0FBQUUsWUFBQSxJQUFJLENBQUMsT0FBTyxHQUFHLElBQUksQ0FBQyxvQkFBb0IsRUFBRSxDQUFDO0FBQzdELFFBQUEsSUFBSSxDQUFDLE9BQTBCLENBQUMsTUFBTSxDQUFDO1lBQ3ZDLE1BQU07QUFDTixZQUFBLFdBQVcsRUFBeUIsV0FBVztBQUMvQyxTQUFBLENBQUMsQ0FBQztLQUNIO0FBQ00sSUFBQSxvQkFBb0IsQ0FBQyxHQUFXLEVBQUE7UUFDdEMsT0FBTyxJQUFJLENBQUMsYUFBYSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztLQUNuQztBQUNNLElBQUEscUJBQXFCLENBQUMsR0FBVyxFQUFBO1FBQ3ZDLE9BQU8sSUFBSSxDQUFDLFVBQVUsQ0FBQyxnQkFBZ0IsQ0FBQyxHQUFHLENBQUMsQ0FBQztLQUM3QztBQUNNLElBQUEsZ0JBQWdCLENBQUMsSUFBWSxFQUFBO1FBQ25DLE9BQU8sSUFBSSxDQUFDLFVBQVUsQ0FBQyxVQUFVLENBQUMsSUFBSSxDQUFDLENBQUM7S0FDeEM7QUFDTSxJQUFBLGdCQUFnQixDQUFDLElBQVksRUFBQTtRQUNuQyxPQUFPLElBQUksQ0FBQyxVQUFVLENBQUMsVUFBVSxDQUFDLElBQUksQ0FBQyxDQUFDO0tBQ3hDO0lBQ00sT0FBTyxHQUFBO0FBQ2IsUUFBQSxJQUFJLEVBQUUsYUFBYSxDQUFDLEtBQUssRUFBRSxDQUFDO0FBQzVCLFFBQUEsSUFBSSxFQUFFLFVBQVUsQ0FBQyxPQUFPLEVBQUUsQ0FBQztBQUMzQixRQUFBLElBQUksQ0FBQyxPQUFPLEdBQUcsSUFBSSxDQUFDO0FBQ3BCLFFBQUEsSUFBSSxDQUFDLFdBQVcsR0FBRyxJQUFJLENBQUM7S0FDeEI7SUFDTyxpQkFBaUIsR0FBQTtRQUN4QixNQUFNLEVBQUUsS0FBSyxFQUFFLFNBQVMsRUFBRSxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUM7QUFDOUMsUUFBQSxNQUFNLGFBQWEsR0FBRyxJQUFJLENBQUMsa0JBQWtCLEVBQUUsQ0FBQztBQUNoRCxRQUFBLElBQUksQ0FBQyxVQUFVLEdBQUcsSUFBSSxDQUFDLGdCQUFnQixFQUFFLENBQUM7QUFDMUMsUUFBQSxNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsaUJBQWlCLEVBQUUsQ0FBQztBQUM3QyxRQUFBLE1BQU0sWUFBWSxHQUFHLElBQUksQ0FBQyxrQkFBa0IsRUFBRSxDQUFDO0FBQy9DLFFBQUEsTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLGlCQUFpQixFQUFFLENBQUM7UUFDN0MsT0FBTyxJQUFJLFdBQVcsQ0FBQztZQUN0QixhQUFhO1lBQ2IsVUFBVSxFQUFFLElBQUksQ0FBQyxVQUFVO1lBQzNCLFdBQVc7WUFDWCxZQUFZO1lBQ1osV0FBVztZQUNYLEtBQUs7WUFDTCxTQUFTO0FBQ1QsU0FBQSxDQUFDLENBQUM7S0FDSDtJQUNPLG9CQUFvQixHQUFBO0FBQzNCLFFBQUEsTUFBTSxFQUFFLFFBQVEsRUFBRSxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUM7QUFDdEMsUUFBQSxNQUFNLFVBQVUsR0FBRyxJQUFJLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztBQUMzQyxRQUFBLE1BQU0sWUFBWSxHQUFHLElBQUksQ0FBQyxrQkFBa0IsRUFBRSxDQUFDO1FBQy9DLE9BQU8sSUFBSSxjQUFjLENBQUM7WUFDekIsUUFBUTtZQUNSLFVBQVU7WUFDVixZQUFZO0FBQ1osU0FBQSxDQUFDLENBQUM7S0FDSDtJQUNPLGtCQUFrQixHQUFBO1FBQ3pCLE1BQU0sRUFBRSxhQUFhLEVBQUUsUUFBUSxFQUFFLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQztRQUNyRCxJQUFJLGFBQWEsR0FBRyxDQUFDLENBQUM7UUFDdEIsUUFDQyxhQUFhLEVBQUUsR0FBRyxDQUFDLENBQUMsa0JBQWtCLEVBQUUsS0FBSyxLQUFJO1lBQ2hELE1BQU0sRUFBRSxVQUFVLEVBQUUsUUFBUSxFQUFFLEdBQUcsRUFBRSxXQUFXLEVBQUUsR0FBRyxrQkFBa0IsQ0FBQztBQUN0RSxZQUFBLE1BQU0sWUFBWSxHQUFHLElBQUksWUFBWSxDQUFDO0FBQ3JDLGdCQUFBLEtBQUssRUFBRSxRQUFRO2dCQUNmLEtBQUs7Z0JBQ0wsYUFBYTtBQUNiLGdCQUFBLFFBQVEsRUFBaUIsUUFBUTtnQkFDakMsV0FBVztBQUNYLGFBQUEsQ0FBQyxDQUFDO1lBQ0gsTUFBTSxhQUFhLEdBQUcsTUFBTSxDQUFDLElBQUksQ0FBQyxVQUFVLENBQUMsQ0FBQztBQUM5QyxZQUFBLGFBQWEsQ0FBQyxPQUFPLENBQUMsQ0FBQyxHQUFXLEtBQUk7QUFDckMsZ0JBQUEsTUFBTSxFQUFFLElBQUksRUFBRSxLQUFLLEVBQUUsS0FBSyxFQUFFLFNBQVMsRUFBRSxNQUFNLEVBQUUsR0FBRyxVQUFVLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDbEUsZ0JBQUEsWUFBWSxDQUFDLFlBQVksQ0FDeEIsS0FBSyxFQUFFLE1BQU0sR0FBRyxDQUFDO0FBQ2hCLHNCQUFFLE1BQU07MEJBQ0wsSUFBSSxzQkFBc0IsQ0FBQyxLQUFLLEVBQUUsTUFBTSxFQUFFLFNBQVMsQ0FBQzswQkFDcEQsSUFBSSwyQkFBMkIsQ0FBQyxLQUFLLEVBQUUsS0FBSyxFQUFFLFNBQVMsQ0FBQztzQkFDekQsSUFBSSxnQkFBZ0IsQ0FBQyxHQUFHLEVBQUUsS0FBSyxFQUFFLElBQUksQ0FBQyxDQUN6QyxDQUFDO0FBQ0YsZ0JBQUEsTUFBTSxLQUFLLEdBQUcsS0FBSyxFQUFFLE1BQU0sR0FBRyxDQUFDLEdBQUcsS0FBSyxFQUFFLE1BQU0sR0FBRyxDQUFDLENBQUM7Z0JBQ3BELGFBQWEsSUFBSSxLQUFLLENBQUM7QUFDeEIsYUFBQyxDQUFDLENBQUM7WUFDSCxJQUFJLENBQUMsYUFBYSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEVBQUUsWUFBWSxDQUFDLENBQUM7QUFDMUMsWUFBQSxPQUFPLFlBQVksQ0FBQztBQUNyQixTQUFDLENBQUMsSUFBSSxFQUFFLEVBQ1A7S0FDRjtJQUNPLGtCQUFrQixHQUFBO0FBQ3pCLFFBQUEsTUFBTSxFQUFFLElBQUksRUFBRSxJQUFJLEVBQUUsT0FBTyxFQUFFLFFBQVEsRUFBRSxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUM7UUFDM0QsT0FBTyxJQUFJLFlBQVksQ0FBQztZQUN2QixRQUFRO0FBQ1IsWUFBQSxNQUFNLEVBQUU7QUFDUCxnQkFBQSxVQUFVLEVBQUUsSUFBSTtBQUNoQixnQkFBQSxVQUFVLEVBQUUsSUFBSTtBQUNoQixhQUFBO0FBQ0QsWUFBQSxPQUFPLEVBQUU7QUFDUixnQkFBQSxhQUFhLEVBQUUsT0FBTztBQUN0QixhQUFBO0FBQ0QsU0FBQSxDQUFDLENBQUM7S0FDSDtJQUNPLGdCQUFnQixHQUFBO1FBQ3ZCLE1BQU0sRUFBRSxRQUFRLEVBQUUsY0FBYyxFQUFFLHdCQUF3QixFQUFFLEdBQUcsSUFBSSxDQUFDLFdBQVcsQ0FBQztBQUNoRixRQUFBLE1BQU0sVUFBVSxHQUFHLElBQUksVUFBVSxDQUFDLFFBQVEsQ0FBQyxDQUFDOztBQUU1QyxRQUFBLGNBQWMsQ0FBQyxPQUFPLENBQUMsQ0FBQyxhQUFhLEtBQUssSUFBSSxDQUFDLG1CQUFtQixDQUFDLGFBQWEsRUFBRSxVQUFVLEVBQUUsUUFBUSxDQUFDLENBQUMsQ0FBQzs7UUFFekcsSUFBSSxDQUFDLHNCQUFzQixDQUFDLHdCQUF3QixFQUFFLFVBQVUsRUFBRSxTQUFTLENBQUMsQ0FBQztBQUM3RSxRQUFBLE9BQU8sVUFBVSxDQUFDO0tBQ2xCO0lBQ08saUJBQWlCLEdBQUE7UUFDeEIsTUFBTSxFQUNMLGFBQWEsRUFDYixZQUFZLEVBQ1osUUFBUSxFQUNSLFdBQVcsRUFDWCxPQUFPLEVBQ1AsV0FBVyxFQUNYLFNBQVMsRUFDVCxnQkFBZ0IsRUFDaEIsR0FBRyxJQUFJLENBQUMsV0FBVyxDQUFDLFdBQVcsQ0FBQztRQUNqQyxPQUFPLElBQUksV0FBVyxDQUFDO0FBQ3RCLFlBQUEsV0FBVyxFQUFFLFdBQVc7QUFDdkIsa0JBQUUsSUFBSSxXQUFXLENBQUMsV0FBVyxDQUFDLENBQUMsRUFBRSxXQUFXLENBQUMsQ0FBQyxFQUFFLFdBQVcsQ0FBQyxLQUFLLEVBQUUsV0FBVyxDQUFDLE1BQU0sQ0FBQztBQUN0RixrQkFBRSxTQUFTO1lBQ1osUUFBUSxFQUFFLFFBQVEsR0FBRyxJQUFJLFFBQVEsQ0FBQyxRQUFRLENBQUMsQ0FBQyxFQUFFLFFBQVEsQ0FBQyxDQUFDLEVBQUUsUUFBUSxDQUFDLEtBQUssRUFBRSxRQUFRLENBQUMsTUFBTSxDQUFDLEdBQUcsU0FBUztZQUN0RyxPQUFPLEVBQUUsT0FBTyxFQUFFLEdBQUcsQ0FBQyxDQUFDLE1BQU0sS0FBSTtBQUNoQyxnQkFBQSxPQUFPLElBQUksTUFBTSxDQUFDLE1BQWEsQ0FBQyxDQUFDO0FBQ2xDLGFBQUMsQ0FBQztBQUNGLFlBQUEsWUFBWSxFQUFFLFlBQVksR0FBRyxJQUFJLFlBQVksQ0FBb0IsWUFBWSxDQUFDLEdBQUcsU0FBUztBQUMxRixZQUFBLGFBQWEsRUFBRSxhQUFhO0FBQzNCLGtCQUFFLElBQUksYUFBYSxDQUFDLGFBQWEsQ0FBQyxDQUFDLEVBQUUsYUFBYSxDQUFDLENBQUMsRUFBRSxhQUFhLENBQUMsQ0FBQyxFQUFFLGFBQWEsQ0FBQyxDQUFDLENBQUM7QUFDdkYsa0JBQUUsU0FBUztZQUNaLGdCQUFnQixFQUFFLGdCQUFnQixJQUFJLENBQUM7QUFDdkMsWUFBQSxXQUFXLEVBQUUsV0FBVztBQUN2QixrQkFBRSxJQUFJLFdBQVcsQ0FBQyxXQUFXLENBQUMsS0FBSyxFQUFFLFdBQVcsQ0FBQyxJQUFJLEVBQUUsV0FBVyxDQUFDLHNCQUFzQixDQUFDO0FBQzFGLGtCQUFFLFNBQVM7QUFDWixZQUFBLFNBQVMsRUFBRSxTQUFTO0FBQ25CLGtCQUFFLElBQUksU0FBUyxDQUNNLFNBQVMsQ0FBQyxRQUFRLEVBQzNCLFNBQVMsQ0FBQyxRQUFRLEVBQ2pCLFNBQVMsQ0FBQyxTQUFTLEVBQzlCLFNBQVMsQ0FBQyxjQUFjLENBQ3ZCO0FBQ0gsa0JBQUUsU0FBUztBQUNaLFlBQUEsY0FBYyxFQUFFLEtBQUs7QUFDckIsWUFBQSxrQkFBa0IsRUFBRSxLQUFLO0FBQ3pCLFNBQUEsQ0FBQyxDQUFDO0tBQ0g7SUFDTyxpQkFBaUIsR0FBQTtRQUN4QixNQUFNLEVBQUUsT0FBTyxFQUFFLFFBQVEsRUFBRSxHQUFHLElBQUksQ0FBQyxXQUFXLENBQUM7UUFDL0MsSUFBSSxXQUFXLEdBQUcsU0FBUyxDQUFDO0FBQzVCLFFBQUEsSUFBSSxPQUFPLEVBQUU7WUFDWixXQUFXLEdBQUcsSUFBSSxXQUFXLENBQUMsUUFBUSxHQUFHLGFBQWEsQ0FBQyxDQUFDO0FBQ3hELFlBQUEsV0FBVyxDQUFDLFVBQVUsQ0FBQyxPQUFPLENBQUMsQ0FBQztBQUNoQyxTQUFBO0FBRUQsUUFBQSxPQUFPLFdBQVcsQ0FBQztLQUNuQjtBQUNPLElBQUEsbUJBQW1CLENBQUMsbUJBQW1CLEVBQUUsVUFBc0IsRUFBRSxRQUFnQixFQUFBO0FBQ3hGLFFBQUEsTUFBTSxFQUNMLElBQUksR0FBRyxTQUFTLEVBQ2hCLEtBQUssR0FBRyxXQUFXLENBQUMsT0FBTyxHQUFHLFdBQVcsQ0FBQyxPQUFPLEVBQ2pELFFBQVEsRUFDUixHQUFHLEVBQ0gsT0FBTyxFQUNQLE1BQU0sRUFDTixVQUFVLEVBQ1YsVUFBVSxFQUNWLEdBQUcsbUJBQW1CLENBQUM7QUFDeEIsUUFBQSxNQUFNLGFBQWEsR0FBRyxJQUFJLGFBQWEsQ0FBQztZQUN2QyxLQUFLLEVBQUUsR0FBRyxHQUFHLGdCQUFnQjtBQUM3QixZQUFBLElBQUksRUFBcUIsSUFBSTtBQUM3QixZQUFBLEtBQUssRUFBZSxLQUFLO1lBQ3pCLE9BQU87WUFDUCxNQUFNO1lBQ04sVUFBVTtBQUNWLFlBQUEsSUFBSSxFQUFFLE1BQU0sRUFBRSxJQUFJLElBQUksVUFBVTtBQUNoQyxTQUFBLENBQUMsQ0FBQztBQUNILFFBQUEsVUFBVSxDQUFDLGdCQUFnQixDQUFDLEdBQUcsRUFBRSxhQUFhLENBQUMsQ0FBQztBQUNoRCxRQUFBLElBQUksQ0FBQyxNQUFNO1lBQUUsSUFBSSxDQUFDLHNCQUFzQixDQUFDLFFBQVEsRUFBRSxVQUFVLEVBQUUsYUFBYSxDQUFDLENBQUM7S0FDOUU7QUFDTyxJQUFBLHNCQUFzQixDQUFDLFFBQVEsRUFBRSxVQUFzQixFQUFFLGFBQTRCLEVBQUE7QUFDNUYsUUFBQSxJQUFJLENBQUMsUUFBUTtZQUFFLE9BQU87UUFDdEIsTUFBTSxhQUFhLEdBQUcsTUFBTSxDQUFDLG1CQUFtQixDQUFDLFFBQVEsQ0FBQyxDQUFDO0FBQzNELFFBQUEsYUFBYSxDQUFDLEdBQUcsQ0FBQyxDQUFDLFlBQVksS0FBSTtBQUNsQyxZQUFBLHNCQUFzQixDQUFDLFlBQVksRUFBRSxRQUFRLENBQUMsWUFBWSxDQUFDLEVBQUUsVUFBVSxFQUFFLFNBQVMsRUFBRSxhQUFhLENBQUMsQ0FBQztBQUNwRyxTQUFDLENBQUMsQ0FBQztLQUNIO0FBQ0Q7O0FDalBLLE1BQU8sY0FBZSxTQUFRLFFBQVEsQ0FBQTtBQUMzQyxJQUFBLFdBQUEsR0FBQTtBQUNDLFFBQUEsS0FBSyxDQUFDO0FBQ0wsWUFBQSxJQUFJLEVBQUUsZ0JBQWdCO0FBQ3RCLFNBQUEsQ0FBQyxDQUFDO1FBQ0gsSUFBSSxDQUFDLElBQUksRUFBRSxDQUFDO0tBQ1o7SUFDTyxJQUFJLEdBQUE7O1FBRVgsTUFBTSxRQUFRLEdBQUcsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxHQUFHLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUNsRyxRQUFBLE1BQU0sT0FBTyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUNuQyxRQUFBLElBQUksQ0FBQyxxQkFBcUIsQ0FBQyxRQUFRLEVBQUUsQ0FBQyxDQUFDLENBQUM7UUFDeEMsSUFBSSxDQUFDLFlBQVksQ0FBQyxJQUFJLDJCQUEyQixDQUFDLENBQUMsVUFBVSxFQUFFLElBQUksQ0FBQyxFQUFFLFFBQVEsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDekYsUUFBQSxJQUFJLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxDQUFDO0FBQ3hCLFFBQUEsSUFBSSxDQUFDLEtBQUssR0FBRyxPQUFPLENBQUMsTUFBTSxDQUFDO0tBQzVCO0FBQ0Q7O0FDUkssTUFBTyxjQUFlLFNBQVEsUUFBUSxDQUFBO0FBRzNDLElBQUEsV0FBQSxHQUFBO0FBQ0MsUUFBQSxLQUFLLEVBQUUsQ0FBQztBQUNSLFFBQUEsSUFBSSxDQUFDLElBQUksR0FBRyxRQUFRLENBQUM7QUFDckIsUUFBQSxJQUFJLENBQUMsWUFBWSxHQUFHLElBQUksWUFBWSxDQUFDO1lBQ3BDLFFBQVEsRUFBRSxJQUFJLENBQUMsSUFBSTtBQUNuQixZQUFBLE9BQU8sRUFBRTtBQUNSLGdCQUFBLE1BQU0sRUFBRSxJQUFJO0FBQ1osYUFBQTtBQUNELFNBQUEsQ0FBQyxDQUFDO0FBQ0gsUUFBQSxJQUFJLENBQUMsUUFBUSxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUM7QUFDeEIsUUFBQSxJQUFJLENBQUMsT0FBTyxHQUFHLENBQUMsQ0FBQztRQUNqQixJQUFJLENBQUMsTUFBTSxHQUFHLElBQUksT0FBTyxDQUFDLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUNoQyxRQUFBLElBQUksQ0FBQyxLQUFLLEdBQUcsSUFBSSxLQUFLLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztLQUNoQztJQUNELE1BQU0sQ0FBQyxVQUF1QixFQUFFLElBQVcsRUFBQTtBQUMxQyxRQUFBLElBQUksQ0FBQyxJQUFJLENBQUMsVUFBVSxJQUFJLElBQUksQ0FBQyxLQUFLO0FBQUUsWUFBQSxJQUFJLENBQUMsZ0JBQWdCLENBQUMsSUFBSSxDQUFDLENBQUM7S0FDaEU7QUFDUyxJQUFBLGdCQUFnQixDQUFDLElBQVcsRUFBQTtRQUNyQyxLQUFLLENBQUMsZ0JBQWdCLEVBQUUsQ0FBQztRQUN6QixNQUFNLGFBQWEsR0FBRyxJQUFJLGFBQWEsQ0FBQyxFQUFFLEtBQUssRUFBRSxRQUFRLEVBQUUsQ0FBQyxDQUFDO0FBQzdELFFBQUEsYUFBYSxDQUFDLFVBQVUsQ0FDdkIsYUFBYSxFQUNiLE1BQUs7WUFDSixPQUFPLElBQUksQ0FBQyxXQUFXLENBQUM7QUFDekIsU0FBQyxFQUNELFdBQVcsQ0FBQyxJQUFJLENBQ2hCLENBQUM7UUFDRixhQUFhLENBQUMsVUFBVSxDQUFDLE9BQU8sRUFBRSxJQUFJLEVBQUUsV0FBVyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQzNELGFBQWEsQ0FBQyxVQUFVLENBQUMsVUFBVSxFQUFFLElBQUksRUFBRSxXQUFXLENBQUMsS0FBSyxDQUFDLENBQUM7UUFDOUQsYUFBYSxDQUFDLFVBQVUsQ0FBQyxRQUFRLEVBQUUsSUFBSSxFQUFFLFdBQVcsQ0FBQyxTQUFTLENBQUMsQ0FBQztRQUNoRSxhQUFhLENBQUMsVUFBVSxDQUFDLFNBQVMsRUFBRSxJQUFJLEVBQUUsV0FBVyxDQUFDLEtBQUssQ0FBQyxDQUFDO1FBQzdELElBQUksQ0FBQyxVQUFVLENBQUMsZ0JBQWdCLENBQUMsUUFBUSxFQUFFLGFBQWEsQ0FBQyxDQUFDO1FBQzFELElBQUksSUFBSSxDQUFDLFdBQVcsRUFBRTtZQUNyQixJQUFJLENBQUMsVUFBVSxDQUFDLFNBQVMsQ0FBQyxrQkFBa0IsRUFBRSxJQUFJLENBQUMsQ0FBQztZQUNwRCxJQUFJLENBQUMsVUFBVSxDQUFDLFVBQVUsQ0FBQyxrQkFBa0IsRUFBRSxJQUFJLENBQUMsV0FBVyxDQUFDLENBQUM7QUFDakUsWUFBQSxJQUFJLENBQUMsVUFBVSxDQUFDLFVBQVUsQ0FBQyxrQkFBa0IsRUFBRSxJQUFJLENBQUMsV0FBVyxJQUFJLFlBQVksQ0FBQyxjQUFjLENBQUMsQ0FBQztBQUNoRyxTQUFBO0tBQ0Q7SUFDRCxPQUFPLEdBQUE7QUFDTixRQUFBLElBQUksRUFBRSxXQUFXLEVBQUUsT0FBTyxFQUFFLENBQUM7UUFDN0IsS0FBSyxDQUFDLE9BQU8sRUFBRSxDQUFDO0tBQ2hCO0FBQ0Q7O0FDakRLLE1BQU8sTUFBTyxTQUFRLElBQUksQ0FBQTtBQUMvQixJQUFBLFdBQUEsR0FBQTtBQUNDLFFBQUEsS0FBSyxFQUFFLENBQUM7QUFDUixRQUFBLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxjQUFjLEVBQUUsQ0FBQztBQUNyQyxRQUFBLElBQUksQ0FBQyxRQUFRLEdBQUcsSUFBSSxjQUFjLEVBQUUsQ0FBQztLQUNyQztBQUNELElBQUEsVUFBVSxDQUFDLE9BQWdCLEVBQUE7QUFDMUIsUUFBQSxJQUFJLENBQUMsUUFBUSxDQUFDLFdBQVcsR0FBRyxPQUFPLENBQUM7S0FDcEM7QUFDRCxJQUFBLFVBQVUsQ0FBQyxPQUFnQixFQUFBO0FBQzFCLFFBQUEsSUFBSSxDQUFDLFFBQVEsQ0FBQyxXQUFXLEdBQUcsT0FBTyxDQUFDO0tBQ3BDO0FBQ0Q7O0FDbEJEOzs7QUFHRztBQW9JRyxTQUFVLFNBQVMsQ0FBQyxPQUFPLEVBQUE7QUFDaEMsSUFBQSxPQUFPLEdBQUcsT0FBTyxJQUFJLEVBQUUsQ0FBQztBQUV4QixJQUFBLE1BQU0sVUFBVSxHQUFHLE9BQU8sQ0FBQyxVQUFVLElBQUksQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQ25ELElBQUEsTUFBTSxRQUFRLEdBQUcsT0FBTyxDQUFDLFFBQVEsSUFBSSxDQUFDLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLFVBQVUsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxVQUFVLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDbEcsSUFBQSxNQUFNLENBQUMsR0FBRyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDdEIsSUFBQSxNQUFNLENBQUMsR0FBRyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDdEIsSUFBQSxNQUFNLENBQUMsR0FBRyxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDdEIsSUFBQSxNQUFNLEtBQUssR0FBRyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDNUIsSUFBQSxNQUFNLE1BQU0sR0FBRyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDN0IsSUFBQSxNQUFNLEtBQUssR0FBRyxVQUFVLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFFNUIsSUFBQSxNQUFNLEdBQUcsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxHQUFHLEtBQUssRUFBRSxDQUFDO0FBQ3pDLElBQUEsTUFBTSxHQUFHLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxHQUFHLEtBQUssRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEdBQUcsS0FBSyxFQUFFLENBQUM7QUFDakQsSUFBQSxNQUFNLEdBQUcsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsR0FBRyxNQUFNLEVBQUUsQ0FBQyxFQUFFLENBQUMsR0FBRyxLQUFLLEVBQUUsQ0FBQztJQUNsRCxNQUFNLEdBQUcsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLEdBQUcsS0FBSyxFQUFFLENBQUMsRUFBRSxDQUFDLEdBQUcsTUFBTSxFQUFFLENBQUMsRUFBRSxDQUFDLEdBQUcsS0FBSyxFQUFFLENBQUM7QUFDMUQsSUFBQSxNQUFNLEdBQUcsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUM7QUFDakMsSUFBQSxNQUFNLEdBQUcsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLEdBQUcsS0FBSyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDO0FBQ3pDLElBQUEsTUFBTSxHQUFHLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEdBQUcsTUFBTSxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUMxQyxJQUFBLE1BQU0sR0FBRyxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsR0FBRyxLQUFLLEVBQUUsQ0FBQyxFQUFFLENBQUMsR0FBRyxNQUFNLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDO0FBRWxELElBQUEsTUFBTSxTQUFTLEdBQUc7O0FBRWpCLFFBQUEsR0FBRyxDQUFDLENBQUM7QUFDTCxRQUFBLEdBQUcsQ0FBQyxDQUFDO0FBQ0wsUUFBQSxHQUFHLENBQUMsQ0FBQztBQUNMLFFBQUEsR0FBRyxDQUFDLENBQUM7QUFDTCxRQUFBLEdBQUcsQ0FBQyxDQUFDO0FBQ0wsUUFBQSxHQUFHLENBQUMsQ0FBQztBQUNMLFFBQUEsR0FBRyxDQUFDLENBQUM7QUFDTCxRQUFBLEdBQUcsQ0FBQyxDQUFDO0FBQ0wsUUFBQSxHQUFHLENBQUMsQ0FBQztBQUNMLFFBQUEsR0FBRyxDQUFDLENBQUM7QUFDTCxRQUFBLEdBQUcsQ0FBQyxDQUFDO0FBQ0wsUUFBQSxHQUFHLENBQUMsQ0FBQztBQUNMLFFBQUEsR0FBRyxDQUFDLENBQUM7QUFDTCxRQUFBLEdBQUcsQ0FBQyxDQUFDO0FBQ0wsUUFBQSxHQUFHLENBQUMsQ0FBQztBQUNMLFFBQUEsR0FBRyxDQUFDLENBQUM7QUFDTCxRQUFBLEdBQUcsQ0FBQyxDQUFDO0FBQ0wsUUFBQSxHQUFHLENBQUMsQ0FBQzs7QUFHTCxRQUFBLEdBQUcsQ0FBQyxDQUFDO0FBQ0wsUUFBQSxHQUFHLENBQUMsQ0FBQztBQUNMLFFBQUEsR0FBRyxDQUFDLENBQUM7QUFDTCxRQUFBLEdBQUcsQ0FBQyxDQUFDO0FBQ0wsUUFBQSxHQUFHLENBQUMsQ0FBQztBQUNMLFFBQUEsR0FBRyxDQUFDLENBQUM7QUFDTCxRQUFBLEdBQUcsQ0FBQyxDQUFDO0FBQ0wsUUFBQSxHQUFHLENBQUMsQ0FBQztBQUNMLFFBQUEsR0FBRyxDQUFDLENBQUM7QUFDTCxRQUFBLEdBQUcsQ0FBQyxDQUFDO0FBQ0wsUUFBQSxHQUFHLENBQUMsQ0FBQztBQUNMLFFBQUEsR0FBRyxDQUFDLENBQUM7QUFDTCxRQUFBLEdBQUcsQ0FBQyxDQUFDO0FBQ0wsUUFBQSxHQUFHLENBQUMsQ0FBQztBQUNMLFFBQUEsR0FBRyxDQUFDLENBQUM7QUFDTCxRQUFBLEdBQUcsQ0FBQyxDQUFDO0FBQ0wsUUFBQSxHQUFHLENBQUMsQ0FBQztBQUNMLFFBQUEsR0FBRyxDQUFDLENBQUM7O0FBR0wsUUFBQSxHQUFHLENBQUMsQ0FBQztBQUNMLFFBQUEsR0FBRyxDQUFDLENBQUM7QUFDTCxRQUFBLEdBQUcsQ0FBQyxDQUFDO0FBQ0wsUUFBQSxHQUFHLENBQUMsQ0FBQztBQUNMLFFBQUEsR0FBRyxDQUFDLENBQUM7QUFDTCxRQUFBLEdBQUcsQ0FBQyxDQUFDO0FBQ0wsUUFBQSxHQUFHLENBQUMsQ0FBQztBQUNMLFFBQUEsR0FBRyxDQUFDLENBQUM7QUFDTCxRQUFBLEdBQUcsQ0FBQyxDQUFDO0FBQ0wsUUFBQSxHQUFHLENBQUMsQ0FBQztBQUNMLFFBQUEsR0FBRyxDQUFDLENBQUM7QUFDTCxRQUFBLEdBQUcsQ0FBQyxDQUFDO0FBQ0wsUUFBQSxHQUFHLENBQUMsQ0FBQztBQUNMLFFBQUEsR0FBRyxDQUFDLENBQUM7QUFDTCxRQUFBLEdBQUcsQ0FBQyxDQUFDO0FBQ0wsUUFBQSxHQUFHLENBQUMsQ0FBQztBQUNMLFFBQUEsR0FBRyxDQUFDLENBQUM7QUFDTCxRQUFBLEdBQUcsQ0FBQyxDQUFDOztBQUdMLFFBQUEsR0FBRyxDQUFDLENBQUM7QUFDTCxRQUFBLEdBQUcsQ0FBQyxDQUFDO0FBQ0wsUUFBQSxHQUFHLENBQUMsQ0FBQztBQUNMLFFBQUEsR0FBRyxDQUFDLENBQUM7QUFDTCxRQUFBLEdBQUcsQ0FBQyxDQUFDO0FBQ0wsUUFBQSxHQUFHLENBQUMsQ0FBQztBQUNMLFFBQUEsR0FBRyxDQUFDLENBQUM7QUFDTCxRQUFBLEdBQUcsQ0FBQyxDQUFDO0FBQ0wsUUFBQSxHQUFHLENBQUMsQ0FBQztBQUNMLFFBQUEsR0FBRyxDQUFDLENBQUM7QUFDTCxRQUFBLEdBQUcsQ0FBQyxDQUFDO0FBQ0wsUUFBQSxHQUFHLENBQUMsQ0FBQztBQUNMLFFBQUEsR0FBRyxDQUFDLENBQUM7QUFDTCxRQUFBLEdBQUcsQ0FBQyxDQUFDO0FBQ0wsUUFBQSxHQUFHLENBQUMsQ0FBQztBQUNMLFFBQUEsR0FBRyxDQUFDLENBQUM7QUFDTCxRQUFBLEdBQUcsQ0FBQyxDQUFDO0FBQ0wsUUFBQSxHQUFHLENBQUMsQ0FBQzs7QUFHTCxRQUFBLEdBQUcsQ0FBQyxDQUFDO0FBQ0wsUUFBQSxHQUFHLENBQUMsQ0FBQztBQUNMLFFBQUEsR0FBRyxDQUFDLENBQUM7QUFDTCxRQUFBLEdBQUcsQ0FBQyxDQUFDO0FBQ0wsUUFBQSxHQUFHLENBQUMsQ0FBQztBQUNMLFFBQUEsR0FBRyxDQUFDLENBQUM7QUFDTCxRQUFBLEdBQUcsQ0FBQyxDQUFDO0FBQ0wsUUFBQSxHQUFHLENBQUMsQ0FBQztBQUNMLFFBQUEsR0FBRyxDQUFDLENBQUM7QUFDTCxRQUFBLEdBQUcsQ0FBQyxDQUFDO0FBQ0wsUUFBQSxHQUFHLENBQUMsQ0FBQztBQUNMLFFBQUEsR0FBRyxDQUFDLENBQUM7QUFDTCxRQUFBLEdBQUcsQ0FBQyxDQUFDO0FBQ0wsUUFBQSxHQUFHLENBQUMsQ0FBQztBQUNMLFFBQUEsR0FBRyxDQUFDLENBQUM7QUFDTCxRQUFBLEdBQUcsQ0FBQyxDQUFDO0FBQ0wsUUFBQSxHQUFHLENBQUMsQ0FBQztBQUNMLFFBQUEsR0FBRyxDQUFDLENBQUM7O0FBR0wsUUFBQSxHQUFHLENBQUMsQ0FBQztBQUNMLFFBQUEsR0FBRyxDQUFDLENBQUM7QUFDTCxRQUFBLEdBQUcsQ0FBQyxDQUFDO0FBQ0wsUUFBQSxHQUFHLENBQUMsQ0FBQztBQUNMLFFBQUEsR0FBRyxDQUFDLENBQUM7QUFDTCxRQUFBLEdBQUcsQ0FBQyxDQUFDO0FBQ0wsUUFBQSxHQUFHLENBQUMsQ0FBQztBQUNMLFFBQUEsR0FBRyxDQUFDLENBQUM7QUFDTCxRQUFBLEdBQUcsQ0FBQyxDQUFDO0FBQ0wsUUFBQSxHQUFHLENBQUMsQ0FBQztBQUNMLFFBQUEsR0FBRyxDQUFDLENBQUM7QUFDTCxRQUFBLEdBQUcsQ0FBQyxDQUFDO0FBQ0wsUUFBQSxHQUFHLENBQUMsQ0FBQztBQUNMLFFBQUEsR0FBRyxDQUFDLENBQUM7QUFDTCxRQUFBLEdBQUcsQ0FBQyxDQUFDO0FBQ0wsUUFBQSxHQUFHLENBQUMsQ0FBQztBQUNMLFFBQUEsR0FBRyxDQUFDLENBQUM7QUFDTCxRQUFBLEdBQUcsQ0FBQyxDQUFDO0tBQ0wsQ0FBQztBQUVGLElBQUEsTUFBTSxHQUFHLEdBQUc7O1FBRVgsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDOztRQUdsQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUM7O1FBR2xDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQzs7UUFHbEMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDOztRQUdsQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUM7O1FBR2xDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQztLQUNsQyxDQUFDO0FBRUYsSUFBQSxNQUFNLE9BQU8sR0FBRzs7QUFFZixRQUFBLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQzs7QUFHcEQsUUFBQSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUM7O0FBR3BELFFBQUEsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDOztBQUcxRCxRQUFBLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQzs7QUFHMUQsUUFBQSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUM7O0FBR3BELFFBQUEsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FB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QUFFLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxTQUFTLEdBQUcsUUFBUSxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxVQUFVLEdBQUcsU0FBUyxDQUFDLENBQUM7QUFDdkUsWUFBQSxFQUFFLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBQyxDQUFDO0FBQ2hELFlBQUEsRUFBRSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxVQUFVLEdBQUcsU0FBUyxDQUFDLENBQUM7QUFDNUQsWUFBQSxFQUFFLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxTQUFTLEdBQUcsUUFBUSxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUMsQ0FBQztBQUMzRCxZQUFBLEVBQUUsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLFNBQVMsR0FBRyxRQUFRLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLFVBQVUsR0FBRyxTQUFTLENBQUMsQ0FBQztBQUN2RSxZQUFBLEVBQUUsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLFNBQVMsQ0FBQztZQUN2QixFQUFFLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxTQUFTLENBQUM7QUFDN0IsWUFBQSxFQUFFLEdBQUcsQ0FBQyxHQUFHLENBQUMsR0FBRyxRQUFRLENBQUM7WUFDdEIsRUFBRSxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksUUFBUSxDQUFDO0FBQzVCLFlBQUEsRUFBRSxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDWCxZQUFBLEVBQUUsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBRVgsWUFBQSxTQUFTLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxHQUFHLE1BQU0sQ0FBQztZQUM1QixTQUFTLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxH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QU0sQ0FBQyxHQUFHLEdBQUcsSUFBSSxRQUFRLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxHQUFHLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLENBQUMsQ0FBQztBQUV4RCxRQUFBLFFBQVEsQ0FBQyxHQUFHLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQ3BCLEtBQUE7QUFDSCxDQUFDO0FBRUQsU0FBUyxxQkFBcUIsR0FBQTtBQUM1QixJQUFBLE1BQU0sRUFBRSxHQUFHLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQztBQUNqRCxJQUFBLE1BQU0sRUFBRSxHQUFHLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQyxLQUFLLEdBQUcsUUFBUSxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssQ0FBQztBQUVqRCxJQUFBLE1BQU0sUUFBUSxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDLENBQUM7QUFFOUMsSUFBQSxVQUFVLENBQUMsR0FBRyxDQUFDLENBQUMsRUFBRSxRQUFRLENBQUMsQ0FBQztBQUM5Qjs7OzsifQ== +//# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5kZXguanMiLCJzb3VyY2VzIjpbIi4uL3NyYy9jb3JlL1dlYkdQVUNvbnN0YW50LnRzIiwiLi4vc3JjL3JlbmRlci9CdWZmZXIudHMiLCIuLi9zcmMvcmVuZGVyL1BpcGVsaW5lTGF5b3V0LnRzIiwiLi4vc3JjL3JlbmRlci9QaXBlbGluZS50cyIsIi4uL3NyYy9yZW5kZXIvRHJhd0NvbW1hbmQudHMiLCIuLi9zcmMvY29yZS9XZWJHUFVUeXBlcy50cyIsIi4uL3NyYy9zaGFkZXIvbWF0ZXJpYWwvY29sb3JGcmFnLnRzIiwiLi4vc3JjL3NoYWRlci9tYXRlcmlhbC9jb2xvclZlcnQudHMiLCIuLi9zcmMvc2hhZGVyL1dnc2xQcmVwcm9jZXNzb3IudHMiLCIuLi9zcmMvc2hhZGVyL21hdGVyaWFsL3Bicl9mcy50cyIsIi4uL3NyYy9zaGFkZXIvbWF0ZXJpYWwvcGJyX3ZzLnRzIiwiLi4vc3JjL3NoYWRlci9tYXRlcmlhbC9wYnJGcmFnLnRzIiwiLi4vc3JjL3NoYWRlci9tYXRlcmlhbC9wYnJWZXJ0LnRzIiwiLi4vc3JjL3NoYWRlci9tYXRlcmlhbC9waG9uZ0ZyYWcudHMiLCIuLi9zcmMvc2hhZGVyL21hdGVyaWFsL3Bob25nVmVydC50cyIsIi4uL3NyYy9zaGFkZXIvbWF0ZXJpYWwvcG9pbnRfZnMudHMiLCIuLi9zcmMvc2hhZGVyL21hdGVyaWFsL3BvaW50X3ZzLnRzIiwiLi4vc3JjL3NoYWRlci9tYXRlcmlhbC9xdWFkRnJhZy50cyIsIi4uL3NyYy9zaGFkZXIvbWF0ZXJpYWwvcXVhZFZlcnQudHMiLCIuLi9zcmMvc2hhZGVyL21hdGVyaWFsL3NreUJveEZyYWcudHMiLCIuLi9zcmMvc2hhZGVyL21hdGVyaWFsL3NreUJveFZlcnQudHMiLCIuLi9zcmMvc2hhZGVyL21hdGVyaWFsL3Nwcml0ZV9mcy50cyIsIi4uL3NyYy9zaGFkZXIvbWF0ZXJpYWwvc3ByaXRlX3ZzLnRzIiwiLi4vc3JjL3NoYWRlci9wb3N0UHJvY2Vzcy9ibGVuZC9ibGVuZEZyYWcudHMiLCIuLi9zcmMvc2hhZGVyL3Bvc3RQcm9jZXNzL2Jsb29tL0JsdXIudHMiLCIuLi9zcmMvc2hhZGVyL3Bvc3RQcm9jZXNzL2Jsb29tL0x1bWlub3NpdHlIaWdoLnRzIiwiLi4vc3JjL3NoYWRlci9zaGFkZXJDaHVuay9hdHRyaWJ1dGUvRnJhZ0lucHV0LnRzIiwiLi4vc3JjL3NoYWRlci9zaGFkZXJDaHVuay9hdHRyaWJ1dGUvUG9pbnRGcmFnSW5wdXQudHMiLCIuLi9zcmMvc2hhZGVyL3NoYWRlckNodW5rL2F0dHJpYnV0ZS9Qb2ludFZlcnRJbnB1dC50cyIsIi4uL3NyYy9zaGFkZXIvc2hhZGVyQ2h1bmsvYXR0cmlidXRlL1BvaW50VmVydE91dHB1dC50cyIsIi4uL3NyYy9zaGFkZXIvc2hhZGVyQ2h1bmsvYXR0cmlidXRlL1ZlcnRleElucHV0LnRzIiwiLi4vc3JjL3NoYWRlci9zaGFkZXJDaHVuay9hdHRyaWJ1dGUvVmVydGV4T3V0cHV0LnRzIiwiLi4vc3JjL3NoYWRlci9zaGFkZXJDaHVuay9jb21tb24vU3lzdGVtVW5pZm9ybS50cyIsIi4uL3NyYy9zaGFkZXIvc2hhZGVyQ2h1bmsvY29tbW9uL1RleHR1cmVBbmRTYW1wbGVyRGVmaW5lLnRzIiwiLi4vc3JjL3NoYWRlci9zaGFkZXJDaHVuay9lbnZpcm9ubWVudC9lbnZpcm9ubWVudC50cyIsIi4uL3NyYy9zaGFkZXIvc2hhZGVyQ2h1bmsvaW5zdGFuY2UvSW5zdGFuY2UudHMiLCIuLi9zcmMvc2hhZGVyL3NoYWRlckNodW5rL2xpZ2h0L2xpZ2h0LnRzIiwiLi4vc3JjL3NoYWRlci9zaGFkZXJDaHVuay9saWdodC9saWdodENvbW1vbi50cyIsIi4uL3NyYy9zaGFkZXIvc2hhZGVyQ2h1bmsvbm9ybWFsL2dldE5vcm1hbEJhY2tVcC50cyIsIi4uL3NyYy9zaGFkZXIvc2hhZGVyQ2h1bmsvcGJyL2JyZGYudHMiLCIuLi9zcmMvc2hhZGVyL3NoYWRlckNodW5rL3Bici9pYmwudHMiLCIuLi9zcmMvc2hhZGVyL3NoYWRlckNodW5rL3Bici9wYnJGdW5jdGlvbi50cyIsIi4uL3NyYy9zaGFkZXIvc2hhZGVyQ2h1bmsvcGJyL3BiclN0cnVjdC50cyIsIi4uL3NyYy9zaGFkZXIvc2hhZGVyQ2h1bmsvcGJyL3BiclRleHR1cmUudHMiLCIuLi9zcmMvc2hhZGVyL3NoYWRlckNodW5rL3Bici9wYnJVdGlscy50cyIsIi4uL3NyYy9zaGFkZXIvc2hhZGVyQ2h1bmsvcGhvbmcvYmxpbm5fcGhvbmcudHMiLCIuLi9zcmMvc2hhZGVyL3NoYWRlckNodW5rL3Bob25nL3Bob25nRnVuY3Rpb24udHMiLCIuLi9zcmMvc2hhZGVyL3NoYWRlckNodW5rL3Bob25nL3Bob25nVXRpbHMudHMiLCIuLi9zcmMvc2hhZGVyL3NoYWRlckNodW5rL3NraW4vU2tpblZlcnQudHMiLCIuLi9zcmMvc2hhZGVyL3NoYWRlckNodW5rL3N0cnVjdC9QYnJNYXRlcmlhbFN0cnVjdC50cyIsIi4uL3NyYy9zaGFkZXIvc2hhZGVyQ2h1bmsvU2hhZGVyQ2h1bmsudHMiLCIuLi9zcmMvc2hhZGVyL3NoYWRlckNodW5rL3NoYWRvdy9zaGFkb3dNYXBEZWJ1Z2dlckZyYWcudHMiLCIuLi9zcmMvc2hhZGVyL3NoYWRlckNodW5rL3NoYWRvdy9zaGFkb3dNYXBEZWJ1Z2dlclZlcnQudHMiLCIuLi9zcmMvc2hhZGVyL3NoYWRlckNodW5rL3NoYWRvdy9zaGFkb3dNYXBGcmFnLnRzIiwiLi4vc3JjL3NoYWRlci9zaGFkZXJDaHVuay9zaGFkb3cvc2hhZG93TWFwVmVydC50cyIsIi4uL3NyYy9zaGFkZXIvU2hhZGVycy50cyIsIi4uL3NyYy9zaGFkZXIvU2hhZGVyU291cmNlLnRzIiwiLi4vc3JjL3V0aWxzL2xvYWRHbHNsYW5nTW9kdWxlLnRzIiwiLi4vc3JjL3V0aWxzL01pcG1hcEdlbmVyYXRvci50cyIsIi4uL3NyYy91dGlscy9kZWZhdWx0VmFsdWUudHMiLCIuLi9zcmMvcmVuZGVyL1JlbmRlclN0YXRlLnRzIiwiLi4vc3JjL3JlbmRlci9Db250ZXh0LnRzIiwiLi4vc3JjL3JlbmRlci9UZXh0dXJlLnRzIiwiLi4vc3JjL3JlbmRlci9TYW1wbGVyLnRzIiwiLi4vc3JjL3JlbmRlci9BdHRhY2htZW50LnRzIiwiLi4vc3JjL3V0aWxzL2RlZmluZWQudHMiLCIuLi9ub2RlX21vZHVsZXMvbWVyc2VubmUtdHdpc3Rlci9zcmMvbWVyc2VubmUtdHdpc3Rlci5qcyIsIi4uL3NyYy9tYXRoL01hdGgudHMiLCIuLi9zcmMvbWF0aC9WZWN0b3IyLnRzIiwiLi4vc3JjL21hdGgvVmVjdG9yMy50cyIsIi4uL3NyYy9yZW5kZXIvQXR0cmlidXRlLnRzIiwiLi4vc3JjL3JlbmRlci9CaW5kR3JvdXAudHMiLCIuLi9zcmMvcmVuZGVyL0JpbmRHcm91cEVudGl0eS50cyIsIi4uL3NyYy9yZW5kZXIvUmVuZGVyVGFyZ2V0LnRzIiwiLi4vc3JjL21hdGgvTWF0cml4My50cyIsIi4uL3NyYy9tYXRoL1ZlY3RvcjQudHMiLCIuLi9zcmMvbWF0aC9NYXRyaXg0LnRzIiwiLi4vc3JjL2NvcmUvQm91bmRpbmdTcGhlcmUudHMiLCIuLi9zcmMvcmVuZGVyL0luZGV4QnVmZmVyLnRzIiwiLi4vc3JjL3JlbmRlci9BdHRyaWJ1dGVzLnRzIiwiLi4vc3JjL3JlbmRlci9WZXJ0ZXhCdWZmZXIudHMiLCIuLi9zcmMvdXRpbHMvY29tYmluZS50cyIsIi4uL3NyYy9nZW9tZXRyeS9HZW9tZXRyeS50cyIsIi4uL3NyYy9nZW9tZXRyeS9QbGFuZUdlb21ldHJ5LnRzIiwiLi4vc3JjL21hdGgvUXVhdGVybmlvbi50cyIsIi4uL3NyYy9jb3JlL1JlbmRlck9iamVjdC50cyIsIi4uL3NyYy9saWdodC9MaWdodC50cyIsIi4uL3NyYy9tYXRoL0NvbG9yLnRzIiwiLi4vc3JjL21hdGgvTWF0cml4Mi50cyIsIi4uL3NyYy9yZW5kZXIvVW5pZm9ybXMudHMiLCIuLi9zcmMvcmVuZGVyL1VuaWZvcm1CdWZmZXIudHMiLCIuLi9zcmMvdXRpbHMvdW5pZm9ybVV0aWxzLnRzIiwiLi4vc3JjL3JlbmRlci9CaW5kR3JvdXBMYXlvdXQudHMiLCIuLi9zcmMvcmVuZGVyL0JpbmRHcm91cExheW91dEVudHJ5LnRzIiwiLi4vc3JjL3JlbmRlci9TaGFkZXJEYXRhLnRzIiwiLi4vc3JjL21hdGVyaWFsL01hdGVyaWFsLnRzIiwiLi4vc3JjL21hdGVyaWFsL1NoYWRlck1hdGVyaWFsLnRzIiwiLi4vc3JjL3V0aWxzL2NyZWF0ZUd1aWQudHMiLCIuLi9zcmMvbWVzaC9NZXNoLnRzIiwiLi4vc3JjL2hlbHBlci9TaGFkb3dNYXBEZWJ1Z2dlci50cyIsIi4uL3NyYy9tYXRlcmlhbC9Db2xvck1hdGVyaWFsLnRzIiwiLi4vc3JjL21lc2gvQXhlcy50cyIsIi4uL3NyYy9nZW9tZXRyeS9Ta3lCb3hHZW9tZXRyeS50cyIsIi4uL3NyYy91dGlscy9kZXN0cm95T2JqZWN0LnRzIiwiLi4vc3JjL2NvcmUvVGV4dHVyZUNhY2hlLnRzIiwiLi4vc3JjL2xvYWRlci9DdWJlVGV4dHVyZUxvYWRlci50cyIsIi4uL3NyYy9tYXRlcmlhbC9Ta3lCb3hNYXRlcmlhbC50cyIsIi4uL3NyYy9tZXNoL1NreUJveC50cyIsIi4uL3NyYy9tZXNoL0luc3RhbmNlLnRzIiwiLi4vc3JjL21lc2gvSW5zdGFuY2VNZXNoLnRzIiwiLi4vc3JjL3JlbmRlci9Db21wdXRlQ29tbWFuZC50cyIsIi4uL3NyYy9tZXNoL01vZGVsLnRzIiwiLi4vc3JjL2dlb21ldHJ5L1Nwcml0ZUdlb21ldHJ5LnRzIiwiLi4vc3JjL21hdGVyaWFsL1Nwcml0ZU1hdGVyaWFsLnRzIiwiLi4vc3JjL21lc2gvU3ByaXRlLnRzIiwiLi4vc3JjL3V0aWxzL0dlb21ldHJ5VXRpbHMudHMiLCIuLi9zcmMvZ2VvbWV0cnkvU3BoZXJlR2VvbWV0cnkudHMiLCIuLi9zcmMvZ2VvbWV0cnkvQm94R2VvbWV0cnkudHMiLCIuLi9zcmMvZ2VvbWV0cnkvVG9ydXNLbm90R2VvbWV0cnkudHMiLCIuLi9zcmMvbWF0ZXJpYWwvQmxpbm5QaG9uZ01hdGVyaWFsLnRzIiwiLi4vc3JjL21hdGVyaWFsL1Bick1hdGVyaWFsLnRzIiwiLi4vc3JjL2NvcmUvRXZlbnREaXNwYXRjaGVyLnRzIiwiLi4vc3JjL2NvcmUvUmVuZGVyUXVldWUudHMiLCIuLi9zcmMvY29yZS9GcmFtZVN0YXRlLnRzIiwiLi4vc3JjL2xpZ2h0L0FtYmllbnRMaWdodC50cyIsIi4uL3NyYy9jb3JlL0xpZ2h0TWFuZ2VyLnRzIiwiLi4vc3JjL2NvcmUvTWVzaE1hbmdlci50cyIsIi4uL3NyYy9wb3N0LXByb2Nlc3MvUmVzb2x2ZUZyYW1lLnRzIiwiLi4vc3JjL3Bvc3QtcHJvY2Vzcy9Qb3N0RWZmZWN0Q29sbGVjdGlvbi50cyIsIi4uL3NyYy9wYXNzL1Bhc3MudHMiLCIuLi9zcmMvcGFzcy9CYXNpY1Bhc3MudHMiLCIuLi9zcmMvbWF0aC9QbGFuZS50cyIsIi4uL3NyYy9jb3JlL0N1bGxpbmdWb2x1bWUudHMiLCIuLi9zcmMvY2FtZXJhL0NhbWVyYS50cyIsIi4uL3NyYy9jYW1lcmEvUGVyc3BlY3RpdmVDYW1lcmEudHMiLCIuLi9zcmMvY2FtZXJhL1BvaW50TGlnaHRTaGFkb3dDYW1lcmEudHMiLCIuLi9zcmMvbGlnaHQvc2hhZG93cy9CYXNlU2hhZG93LnRzIiwiLi4vc3JjL2xpZ2h0L3NoYWRvd3MvUG9pbnRMaWdodFNoYWRvdy50cyIsIi4uL3NyYy9saWdodC9Qb2ludExpZ2h0LnRzIiwiLi4vc3JjL3Bhc3MvU2hhZG93UGFzcy50cyIsIi4uL3NyYy9yZW5kZXJwaXBlbGluZS9Gb3J3YXJkUmVuZGVyTGluZS50cyIsIi4uL3NyYy9TY2VuZS50cyIsIi4uL3NyYy9wb3N0LXByb2Nlc3MvUG9zdEVmZmVjdC50cyIsIi4uL3NyYy9wb3N0LXByb2Nlc3MvQmxvb21Qb3N0RWZmZWN0LnRzIiwiLi4vc3JjL2NhbWVyYS9PcnRob2dyYXBoaWNDYW1lcmEudHMiLCIuLi9zcmMvbGlnaHQvc2hhZG93cy9TcG90TGlnaHRTaGFkb3cudHMiLCIuLi9zcmMvbGlnaHQvU3BvdExpZ2h0LnRzIiwiLi4vc3JjL2xpZ2h0L3NoYWRvd3MvRGlyZWN0aW9uYWxMaWdodFNoYWRvdy50cyIsIi4uL3NyYy9saWdodC9EaXJlY3Rpb25hbExpZ2h0LnRzIiwiLi4vc3JjL21lc2gvTm9kZS50cyIsIi4uL3NyYy9tZXNoL1NLaW5NZXNoLnRzIiwiLi4vc3JjL3V0aWxzL2dsdGZVdGlscy50cyIsIi4uL3NyYy9sb2FkZXIvZ2x0Zi9saWJzL0FjY2Vzc29yLnRzIiwiLi4vc3JjL2xvYWRlci9nbHRmL2xpYnMvQW5pbWF0aW9uLnRzIiwiLi4vc3JjL2xvYWRlci9nbHRmL2xpYnMvQW5pbWF0aW9uQ2hhbm5lbC50cyIsIi4uL3NyYy9sb2FkZXIvZ2x0Zi9saWJzL0FuaW1hdGlvbkNoYW5uZWxUYXJnZXQudHMiLCIuLi9zcmMvbG9hZGVyL2dsdGYvdHlwZXMvZ2x0ZlR5cGUudHMiLCIuLi9zcmMvbG9hZGVyL2dsdGYvbGlicy9BbmltYXRpb25TYW1wbGVyLnRzIiwiLi4vc3JjL2xvYWRlci9HTFRGTG9hZGVyLnRzIiwiLi4vc3JjL3V0aWxzL3V0aWxzLnRzIiwiLi4vc3JjL21hdGgvU3BoZXJpY2FsLnRzIiwiLi4vc3JjL2NvbnRyb2wvT3JiaXRDb250cm9sLnRzIl0sInNvdXJjZXNDb250ZW50IjpbIi8qKiBAaW50ZXJuYWwgKi9cbmV4cG9ydCBlbnVtIFByZWRlZmluZWRDb2xvclNwYWNlIHtcblx0U1JHQiA9IFwic3JnYlwiXG59XG5cbi8qKiBAaW50ZXJuYWwgKi9cbmV4cG9ydCBlbnVtIFBvd2VyUHJlZmVyZW5jZSB7XG5cdExvd1Bvd2VyID0gXCJsb3ctcG93ZXJcIixcblx0SGlnaFBlcmZvcm1hbmNlID0gXCJoaWdoLXBlcmZvcm1hbmNlXCJcbn1cblxuLyoqIEBpbnRlcm5hbCAqL1xuZXhwb3J0IGVudW0gRmVhdHVyZU5hbWUge1xuXHREZXB0aENsaXBDb250cm9sID0gXCJkZXB0aC1jbGlwLWNvbnRyb2xcIixcblx0RGVwdGgyNFVub3JtU3RlbmNpbDggPSBcImRlcHRoMjR1bm9ybS1zdGVuY2lsOFwiLFxuXHREZXB0aDMyRmxvYXRTdGVuY2lsOCA9IFwiZGVwdGgzMmZsb2F0LXN0ZW5jaWw4XCIsXG5cdFRleHR1cmVDb21wcmVzc2lvbkJDID0gXCJ0ZXh0dXJlLWNvbXByZXNzaW9uLWJjXCIsXG5cdFRleHR1cmVDb21wcmVzc2lvbkVUQzIgPSBcInRleHR1cmUtY29tcHJlc3Npb24tZXRjMlwiLFxuXHRUZXh0dXJlQ29tcHJlc3Npb25BU1RDID0gXCJ0ZXh0dXJlLWNvbXByZXNzaW9uLWFzdGNcIixcblx0VGltZXN0YW1wUXVlcnkgPSBcInRpbWVzdGFtcC1xdWVyeVwiLFxuXHRJbmRpcmVjdEZpcnN0SW5zdGFuY2UgPSBcImluZGlyZWN0LWZpcnN0LWluc3RhbmNlXCIsXG5cdFNoYWRlckYxNiA9IFwic2hhZGVyLWYxNlwiLFxuXHRCR1JBOFVub3JtU3RvcmFnZSA9IFwiYmdyYTh1bm9ybS1zdG9yYWdlXCJcbn1cblxuLyoqIEBpbnRlcm5hbCAqL1xuZXhwb3J0IGVudW0gQnVmZmVyVXNhZ2Uge1xuXHRNYXBSZWFkID0gMSxcblx0TWFwV3JpdGUgPSAyLFxuXHRDb3B5U3JjID0gNCxcblx0Q29weURzdCA9IDgsXG5cdEluZGV4ID0gMTYsXG5cdFZlcnRleCA9IDMyLFxuXHRVbmlmb3JtID0gNjQsXG5cdFN0b3JhZ2UgPSAxMjgsXG5cdEluZGlyZWN0ID0gMjU2LFxuXHRRdWVyeVJlc29sdmUgPSA1MTJcbn1cblxuLyoqIEBpbnRlcm5hbCAqL1xuZXhwb3J0IGVudW0gTWFwTW9kZSB7XG5cdFJlYWQgPSAxLFxuXHRXcml0ZSA9IDJcbn1cblxuLyoqIEBpbnRlcm5hbCAqL1xuZXhwb3J0IGVudW0gVGV4dHVyZURpbWVuc2lvbiB7XG5cdEUxZCA9IFwiMWRcIixcblx0RTJkID0gXCIyZFwiLFxuXHRFM2QgPSBcIjNkXCJcbn1cblxuLyoqIEBpbnRlcm5hbCAqL1xuZXhwb3J0IGVudW0gVGV4dHVyZVVzYWdlIHtcblx0Q29weVNyYyA9IDEsXG5cdENvcHlEc3QgPSAyLFxuXHRUZXh0dXJlQmluZGluZyA9IDQsXG5cdFN0b3JhZ2VCaW5kaW5nID0gOCxcblx0UmVuZGVyQXR0YWNobWVudCA9IDE2XG59XG5cbi8qKiBAaW50ZXJuYWwgKi9cbmV4cG9ydCBlbnVtIFRleHR1cmVWaWV3RGltZW5zaW9uIHtcblx0RTFkID0gXCIxZFwiLFxuXHRFMmQgPSBcIjJkXCIsXG5cdEUyZEFycmF5ID0gXCIyZC1hcnJheVwiLFxuXHRDdWJlID0gXCJjdWJlXCIsXG5cdEN1YmVBcnJheSA9IFwiY3ViZS1hcnJheVwiLFxuXHRFM2QgPSBcIjNkXCJcbn1cblxuLyoqIEBpbnRlcm5hbCAqL1xuZXhwb3J0IGVudW0gVGV4dHVyZUFzcGVjdCB7XG5cdEFsbCA9IFwiYWxsXCIsXG5cdFN0ZW5jaWxPbmx5ID0gXCJzdGVuY2lsLW9ubHlcIixcblx0RGVwdGhPbmx5ID0gXCJkZXB0aC1vbmx5XCJcbn1cblxuLyoqXG4gKiBDb21tZW50cyB0YWtlbiBmcm9tIGh0dHBzOi8vZ2l0aHViLmNvbS9nZngtcnMvd2dwdS9ibG9iL21hc3Rlci93Z3B1LXR5cGVzL3NyYy9saWIucnNcbiAqIEBpbnRlcm5hbFxuICovXG5leHBvcnQgZW51bSBUZXh0dXJlRm9ybWF0IHtcblx0Ly8gOC1iaXQgZm9ybWF0c1xuXHRSOFVub3JtID0gXCJyOHVub3JtXCIsIC8vIFJlZCBjaGFubmVsIG9ubHkuIDggYml0IGludGVnZXIgcGVyIGNoYW5uZWwuIFswLCAyNTVdIGNvbnZlcnRlZCB0by9mcm9tIGZsb2F0IFswLCAxXSBpbiBzaGFkZXIuXG5cdFI4U25vcm0gPSBcInI4c25vcm1cIiwgLy8gUmVkIGNoYW5uZWwgb25seS4gOCBiaXQgaW50ZWdlciBwZXIgY2hhbm5lbC4gWy0xMjcsIDEyN10gY29udmVydGVkIHRvL2Zyb20gZmxvYXQgWy0xLCAxXSBpbiBzaGFkZXIuXG5cdFI4VWludCA9IFwicjh1aW50XCIsIC8vIFJlZCBjaGFubmVsIG9ubHkuIDggYml0IGludGVnZXIgcGVyIGNoYW5uZWwuIFVuc2lnbmVkIGluIHNoYWRlci5cblx0UjhTaW50ID0gXCJyOHNpbnRcIiwgLy8gUmVkIGNoYW5uZWwgb25seS4gOCBiaXQgaW50ZWdlciBwZXIgY2hhbm5lbC4gU2lnbmVkIGluIHNoYWRlci5cblxuXHQvLyAxNi1iaXQgZm9ybWF0c1xuXHRSMTZVaW50ID0gXCJyMTZ1aW50XCIsIC8vIFJlZCBjaGFubmVsIG9ubHkuIDE2IGJpdCBpbnRlZ2VyIHBlciBjaGFubmVsLiBVbnNpZ25lZCBpbiBzaGFkZXIuXG5cdFIxNlNpbnQgPSBcInIxNnNpbnRcIiwgLy8gUmVkIGNoYW5uZWwgb25seS4gMTYgYml0IGludGVnZXIgcGVyIGNoYW5uZWwuIFNpZ25lZCBpbiBzaGFkZXIuXG5cdFIxNkZsb2F0ID0gXCJyMTZmbG9hdFwiLCAvLyBSZWQgY2hhbm5lbCBvbmx5LiAxNiBiaXQgZmxvYXQgcGVyIGNoYW5uZWwuIEZsb2F0IGluIHNoYWRlci5cblx0Ukc4VW5vcm0gPSBcInJnOHVub3JtXCIsIC8vIFJlZCBhbmQgZ3JlZW4gY2hhbm5lbHMuIDggYml0IGludGVnZXIgcGVyIGNoYW5uZWwuIFswLCAyNTVdIGNvbnZlcnRlZCB0by9mcm9tIGZsb2F0IFswLCAxXSBpbiBzaGFkZXIuXG5cdFJHOFNub3JtID0gXCJyZzhzbm9ybVwiLCAvLyBSZWQgYW5kIGdyZWVuIGNoYW5uZWxzLiA4IGJpdCBpbnRlZ2VyIHBlciBjaGFubmVsLiBbLTEyNywgMTI3XSBjb252ZXJ0ZWQgdG8vZnJvbSBmbG9hdCBbLTEsIDFdIGluIHNoYWRlci5cblx0Ukc4VWludCA9IFwicmc4dWludFwiLCAvLyBSZWQgYW5kIGdyZWVuIGNoYW5uZWxzLiA4IGJpdCBpbnRlZ2VyIHBlciBjaGFubmVsLiBVbnNpZ25lZCBpbiBzaGFkZXIuXG5cdFJHOFNpbnQgPSBcInJnOHNpbnRcIiwgLy8gUmVkIGFuZCBncmVlbiBjaGFubmVscy4gOCBiaXQgaW50ZWdlciBwZXIgY2hhbm5lbC4gU2lnbmVkIGluIHNoYWRlci5cblxuXHQvLyAzMi1iaXQgZm9ybWF0c1xuXHRSMzJVaW50ID0gXCJyMzJ1aW50XCIsIC8vIFJlZCBjaGFubmVsIG9ubHkuIDMyIGJpdCBpbnRlZ2VyIHBlciBjaGFubmVsLiBVbnNpZ25lZCBpbiBzaGFkZXIuXG5cdFIzMlNpbnQgPSBcInIzMnNpbnRcIiwgLy8gUmVkIGNoYW5uZWwgb25seS4gMzIgYml0IGludGVnZXIgcGVyIGNoYW5uZWwuIFNpZ25lZCBpbiBzaGFkZXIuXG5cdFIzMkZsb2F0ID0gXCJyMzJmbG9hdFwiLCAvLyBSZWQgY2hhbm5lbCBvbmx5LiAzMiBiaXQgZmxvYXQgcGVyIGNoYW5uZWwuIEZsb2F0IGluIHNoYWRlci5cblx0UkcxNlVpbnQgPSBcInJnMTZ1aW50XCIsIC8vIFJlZCBhbmQgZ3JlZW4gY2hhbm5lbHMuIDE2IGJpdCBpbnRlZ2VyIHBlciBjaGFubmVsLiBVbnNpZ25lZCBpbiBzaGFkZXIuXG5cdFJHMTZTaW50ID0gXCJyZzE2c2ludFwiLCAvLyBSZWQgYW5kIGdyZWVuIGNoYW5uZWxzLiAxNiBiaXQgaW50ZWdlciBwZXIgY2hhbm5lbC4gU2lnbmVkIGluIHNoYWRlci5cblx0UkcxNkZsb2F0ID0gXCJyZzE2ZmxvYXRcIiwgLy8gUmVkIGFuZCBncmVlbiBjaGFubmVscy4gMTYgYml0IGZsb2F0IHBlciBjaGFubmVsLiBGbG9hdCBpbiBzaGFkZXIuXG5cdFJHQkE4VW5vcm0gPSBcInJnYmE4dW5vcm1cIiwgLy8gUmVkLCBncmVlbiwgYmx1ZSwgYW5kIGFscGhhIGNoYW5uZWxzLiA4IGJpdCBpbnRlZ2VyIHBlciBjaGFubmVsLiBbMCwgMjU1XSBjb252ZXJ0ZWQgdG8vZnJvbSBmbG9hdCBbMCwgMV0gaW4gc2hhZGVyLlxuXHRSR0JBOFVub3JtU1JHQiA9IFwicmdiYTh1bm9ybS1zcmdiXCIsIC8vIFJlZCwgZ3JlZW4sIGJsdWUsIGFuZCBhbHBoYSBjaGFubmVscy4gOCBiaXQgaW50ZWdlciBwZXIgY2hhbm5lbC4gU3JnYi1jb2xvciBbMCwgMjU1XSBjb252ZXJ0ZWQgdG8vZnJvbSBsaW5lYXItY29sb3IgZmxvYXQgWzAsIDFdIGluIHNoYWRlci5cblx0UkdCQThTbm9ybSA9IFwicmdiYThzbm9ybVwiLCAvLyBSZWQsIGdyZWVuLCBibHVlLCBhbmQgYWxwaGEgY2hhbm5lbHMuIDggYml0IGludGVnZXIgcGVyIGNoYW5uZWwuIFstMTI3LCAxMjddIGNvbnZlcnRlZCB0by9mcm9tIGZsb2F0IFstMSwgMV0gaW4gc2hhZGVyLlxuXHRSR0JBOFVpbnQgPSBcInJnYmE4dWludFwiLCAvLyBSZWQsIGdyZWVuLCBibHVlLCBhbmQgYWxwaGEgY2hhbm5lbHMuIDggYml0IGludGVnZXIgcGVyIGNoYW5uZWwuIFVuc2lnbmVkIGluIHNoYWRlci5cblx0UkdCQThTaW50ID0gXCJyZ2JhOHNpbnRcIiwgLy8gUmVkLCBncmVlbiwgYmx1ZSwgYW5kIGFscGhhIGNoYW5uZWxzLiA4IGJpdCBpbnRlZ2VyIHBlciBjaGFubmVsLiBTaWduZWQgaW4gc2hhZGVyLlxuXHRCR1JBOFVub3JtID0gXCJiZ3JhOHVub3JtXCIsIC8vIEJsdWUsIGdyZWVuLCByZWQsIGFuZCBhbHBoYSBjaGFubmVscy4gOCBiaXQgaW50ZWdlciBwZXIgY2hhbm5lbC4gWzAsIDI1NV0gY29udmVydGVkIHRvL2Zyb20gZmxvYXQgWzAsIDFdIGluIHNoYWRlci5cblx0QkdSQThVbm9ybVNSR0IgPSBcImJncmE4dW5vcm0tc3JnYlwiLCAvLyBCbHVlLCBncmVlbiwgcmVkLCBhbmQgYWxwaGEgY2hhbm5lbHMuIDggYml0IGludGVnZXIgcGVyIGNoYW5uZWwuIFNyZ2ItY29sb3IgWzAsIDI1NV0gY29udmVydGVkIHRvL2Zyb20gbGluZWFyLWNvbG9yIGZsb2F0IFswLCAxXSBpbiBzaGFkZXIuXG5cdC8vIFBhY2tlZCAzMi1iaXQgZm9ybWF0c1xuXHRSR0I5RTVVRmxvYXQgPSBcInJnYjllNXVmbG9hdFwiLCAvLyBQYWNrZWQgdW5zaWduZWQgZmxvYXQgd2l0aCA5IGJpdHMgbWFudGlzYSBmb3IgZWFjaCBSR0IgY29tcG9uZW50LCB0aGVuIGEgY29tbW9uIDUgYml0cyBleHBvbmVudFxuXHRSR0IxMEEyVW5vcm0gPSBcInJnYjEwYTJ1bm9ybVwiLCAvLyBSZWQsIGdyZWVuLCBibHVlLCBhbmQgYWxwaGEgY2hhbm5lbHMuIDEwIGJpdCBpbnRlZ2VyIGZvciBSR0IgY2hhbm5lbHMsIDIgYml0IGludGVnZXIgZm9yIGFscGhhIGNoYW5uZWwuIFswLCAxMDIzXSAoWzAsIDNdIGZvciBhbHBoYSkgY29udmVydGVkIHRvL2Zyb20gZmxvYXQgWzAsIDFdIGluIHNoYWRlci5cblx0UkcxMUIxMFVGbG9hdCA9IFwicmcxMWIxMHVmbG9hdFwiLCAvLyBSZWQsIGdyZWVuLCBhbmQgYmx1ZSBjaGFubmVscy4gMTEgYml0IGZsb2F0IHdpdGggbm8gc2lnbiBiaXQgZm9yIFJHIGNoYW5uZWxzLiAxMCBiaXQgZmxvYXQgd2l0aCBubyBzaWduIGJpdCBmb3IgYmx1ZSBjaGFubmVsLiBGbG9hdCBpbiBzaGFkZXIuXG5cblx0Ly8gNjQtYml0IGZvcm1hdHNcblx0UkczMlVpbnQgPSBcInJnMzJ1aW50XCIsIC8vIFJlZCBhbmQgZ3JlZW4gY2hhbm5lbHMuIDMyIGJpdCBpbnRlZ2VyIHBlciBjaGFubmVsLiBVbnNpZ25lZCBpbiBzaGFkZXIuXG5cdFJHMzJTaW50ID0gXCJyZzMyc2ludFwiLCAvLyBSZWQgYW5kIGdyZWVuIGNoYW5uZWxzLiAzMiBiaXQgaW50ZWdlciBwZXIgY2hhbm5lbC4gU2lnbmVkIGluIHNoYWRlci5cblx0UkczMkZsb2F0ID0gXCJyZzMyZmxvYXRcIiwgLy8gUmVkIGFuZCBncmVlbiBjaGFubmVscy4gMzIgYml0IGZsb2F0IHBlciBjaGFubmVsLiBGbG9hdCBpbiBzaGFkZXIuXG5cdFJHQkExNlVpbnQgPSBcInJnYmExNnVpbnRcIiwgLy8gUmVkLCBncmVlbiwgYmx1ZSwgYW5kIGFscGhhIGNoYW5uZWxzLiAxNiBiaXQgaW50ZWdlciBwZXIgY2hhbm5lbC4gVW5zaWduZWQgaW4gc2hhZGVyLlxuXHRSR0JBMTZTaW50ID0gXCJyZ2JhMTZzaW50XCIsIC8vIFJlZCwgZ3JlZW4sIGJsdWUsIGFuZCBhbHBoYSBjaGFubmVscy4gMTYgYml0IGludGVnZXIgcGVyIGNoYW5uZWwuIFNpZ25lZCBpbiBzaGFkZXIuXG5cdFJHQkExNkZsb2F0ID0gXCJyZ2JhMTZmbG9hdFwiLCAvLyBSZWQsIGdyZWVuLCBibHVlLCBhbmQgYWxwaGEgY2hhbm5lbHMuIDE2IGJpdCBmbG9hdCBwZXIgY2hhbm5lbC4gRmxvYXQgaW4gc2hhZGVyLlxuXG5cdC8vIDEyOC1iaXQgZm9ybWF0c1xuXHRSR0JBMzJVaW50ID0gXCJyZ2JhMzJ1aW50XCIsIC8vIFJlZCwgZ3JlZW4sIGJsdWUsIGFuZCBhbHBoYSBjaGFubmVscy4gMzIgYml0IGludGVnZXIgcGVyIGNoYW5uZWwuIFVuc2lnbmVkIGluIHNoYWRlci5cblx0UkdCQTMyU2ludCA9IFwicmdiYTMyc2ludFwiLCAvLyBSZWQsIGdyZWVuLCBibHVlLCBhbmQgYWxwaGEgY2hhbm5lbHMuIDMyIGJpdCBpbnRlZ2VyIHBlciBjaGFubmVsLiBTaWduZWQgaW4gc2hhZGVyLlxuXHRSR0JBMzJGbG9hdCA9IFwicmdiYTMyZmxvYXRcIiwgLy8gUmVkLCBncmVlbiwgYmx1ZSwgYW5kIGFscGhhIGNoYW5uZWxzLiAzMiBiaXQgZmxvYXQgcGVyIGNoYW5uZWwuIEZsb2F0IGluIHNoYWRlci5cblxuXHQvLyBEZXB0aCBhbmQgc3RlbmNpbCBmb3JtYXRzXG5cdFN0ZW5jaWw4ID0gXCJzdGVuY2lsOFwiLFxuXHREZXB0aDE2VW5vcm0gPSBcImRlcHRoMTZ1bm9ybVwiLFxuXHREZXB0aDI0UGx1cyA9IFwiZGVwdGgyNHBsdXNcIiwgLy8gU3BlY2lhbCBkZXB0aCBmb3JtYXQgd2l0aCBhdCBsZWFzdCAyNCBiaXQgaW50ZWdlciBkZXB0aC5cblx0RGVwdGgyNFBsdXNTdGVuY2lsOCA9IFwiZGVwdGgyNHBsdXMtc3RlbmNpbDhcIiwgLy8gU3BlY2lhbCBkZXB0aC9zdGVuY2lsIGZvcm1hdCB3aXRoIGF0IGxlYXN0IDI0IGJpdCBpbnRlZ2VyIGRlcHRoIGFuZCA4IGJpdHMgaW50ZWdlciBzdGVuY2lsLlxuXHREZXB0aDMyRmxvYXQgPSBcImRlcHRoMzJmbG9hdFwiLCAvLyBTcGVjaWFsIGRlcHRoIGZvcm1hdCB3aXRoIDMyIGJpdCBmbG9hdGluZyBwb2ludCBkZXB0aC5cblxuXHQvLyBCQyBjb21wcmVzc2VkIGZvcm1hdHMgdXNhYmxlIGlmIFwidGV4dHVyZS1jb21wcmVzc2lvbi1iY1wiIGlzIGJvdGhcblx0Ly8gc3VwcG9ydGVkIGJ5IHRoZSBkZXZpY2UvdXNlciBhZ2VudCBhbmQgZW5hYmxlZCBpbiByZXF1ZXN0RGV2aWNlLlxuXHRCQzFSR0JBVW5vcm0gPSBcImJjMS1yZ2JhLXVub3JtXCIsIC8vIDR4NCBibG9jayBjb21wcmVzc2VkIHRleHR1cmUuIDggYnl0ZXMgcGVyIGJsb2NrICg0IGJpdC9weCkuIDQgY29sb3IgKyBhbHBoYSBwYWxsZXQuIDUgYml0IFIgKyA2IGJpdCBHICsgNSBiaXQgQiArIDEgYml0IGFscGhhLiBBbHNvIGtub3duIGFzIERYVDEuXG5cdEJDMVJHQkFVbm9ybVNSR0IgPSBcImJjMS1yZ2JhLXVub3JtLXNyZ2JcIiwgLy8gNHg0IGJsb2NrIGNvbXByZXNzZWQgdGV4dHVyZS4gOCBieXRlcyBwZXIgYmxvY2sgKDQgYml0L3B4KS4gNCBjb2xvciArIGFscGhhIHBhbGxldC4gNSBiaXQgUiArIDYgYml0IEcgKyA1IGJpdCBCICsgMSBiaXQgYWxwaGEuIEFsc28ga25vd24gYXMgRFhUMS5cblx0QkMyUkdCQVVub3JtID0gXCJiYzItcmdiYS11bm9ybVwiLCAvLyA0eDQgYmxvY2sgY29tcHJlc3NlZCB0ZXh0dXJlLiAxNiBieXRlcyBwZXIgYmxvY2sgKDggYml0L3B4KS4gNCBjb2xvciBwYWxsZXQuIDUgYml0IFIgKyA2IGJpdCBHICsgNSBiaXQgQiArIDQgYml0IGFscGhhLiBBbHNvIGtub3duIGFzIERYVDMuXG5cdEJDMlJHQkFVbm9ybVNSR0IgPSBcImJjMi1yZ2JhLXVub3JtLXNyZ2JcIiwgLy8gNHg0IGJsb2NrIGNvbXByZXNzZWQgdGV4dHVyZS4gMTYgYnl0ZXMgcGVyIGJsb2NrICg4IGJpdC9weCkuIDQgY29sb3IgcGFsbGV0LiA1IGJpdCBSICsgNiBiaXQgRyArIDUgYml0IEIgKyA0IGJpdCBhbHBoYS4gQWxzbyBrbm93biBhcyBEWFQzLlxuXHRCQzNSR0JBVW5vcm0gPSBcImJjMy1yZ2JhLXVub3JtXCIsIC8vIDR4NCBibG9jayBjb21wcmVzc2VkIHRleHR1cmUuIDE2IGJ5dGVzIHBlciBibG9jayAoOCBiaXQvcHgpLiA0IGNvbG9yIHBhbGxldCArIDggYWxwaGEgcGFsbGV0LiA1IGJpdCBSICsgNiBiaXQgRyArIDUgYml0IEIgKyA4IGJpdCBhbHBoYS4gQWxzbyBrbm93biBhcyBEWFQ1LlxuXHRCQzNSR0JBVW5vcm1TUkdCID0gXCJiYzMtcmdiYS11bm9ybS1zcmdiXCIsIC8vIDR4NCBibG9jayBjb21wcmVzc2VkIHRleHR1cmUuIDE2IGJ5dGVzIHBlciBibG9jayAoOCBiaXQvcHgpLiA0IGNvbG9yIHBhbGxldCArIDggYWxwaGEgcGFsbGV0LiA1IGJpdCBSICsgNiBiaXQgRyArIDUgYml0IEIgKyA4IGJpdCBhbHBoYS4gQWxzbyBrbm93biBhcyBEWFQ1LlxuXHRCQzRSVW5vcm0gPSBcImJjNC1yLXVub3JtXCIsIC8vIDR4NCBibG9jayBjb21wcmVzc2VkIHRleHR1cmUuIDggYnl0ZXMgcGVyIGJsb2NrICg0IGJpdC9weCkuIDggY29sb3IgcGFsbGV0LiA4IGJpdCBSLiBBbHNvIGtub3duIGFzIFJHVEMxLlxuXHRCQzRSU25vcm0gPSBcImJjNC1yLXNub3JtXCIsIC8vIDR4NCBibG9jayBjb21wcmVzc2VkIHRleHR1cmUuIDggYnl0ZXMgcGVyIGJsb2NrICg0IGJpdC9weCkuIDggY29sb3IgcGFsbGV0LiA4IGJpdCBSLiBBbHNvIGtub3duIGFzIFJHVEMxLlxuXHRCQzVSR1Vub3JtID0gXCJiYzUtcmctdW5vcm1cIiwgLy8gNHg0IGJsb2NrIGNvbXByZXNzZWQgdGV4dHVyZS4gMTYgYnl0ZXMgcGVyIGJsb2NrICg4IGJpdC9weCkuIDggY29sb3IgcmVkIHBhbGxldCArIDggY29sb3IgZ3JlZW4gcGFsbGV0LiA4IGJpdCBSRy4gQWxzbyBrbm93biBhcyBSR1RDMi5cblx0QkM1UkdTbm9ybSA9IFwiYmM1LXJnLXNub3JtXCIsIC8vIDR4NCBibG9jayBjb21wcmVzc2VkIHRleHR1cmUuIDE2IGJ5dGVzIHBlciBibG9jayAoOCBiaXQvcHgpLiA4IGNvbG9yIHJlZCBwYWxsZXQgKyA4IGNvbG9yIGdyZWVuIHBhbGxldC4gOCBiaXQgUkcuIEFsc28ga25vd24gYXMgUkdUQzIuXG5cdEJDNkhSR0JVRmxvYXQgPSBcImJjNmgtcmdiLXVmbG9hdFwiLCAvLyA0eDQgYmxvY2sgY29tcHJlc3NlZCB0ZXh0dXJlLiAxNiBieXRlcyBwZXIgYmxvY2sgKDggYml0L3B4KS4gVmFyaWFibGUgc2l6ZWQgcGFsbGV0LiAxNiBiaXQgdW5zaWduZWQgZmxvYXQgUkdCLiBGbG9hdCBpbiBzaGFkZXIuIEFsc28ga25vd24gYXMgQlBUQyAoZmxvYXQpLlxuXHRCQzZIUkdCRmxvYXQgPSBcImJjNmgtcmdiLWZsb2F0XCIsIC8vIDR4NCBibG9jayBjb21wcmVzc2VkIHRleHR1cmUuIDE2IGJ5dGVzIHBlciBibG9jayAoOCBiaXQvcHgpLiBWYXJpYWJsZSBzaXplZCBwYWxsZXQuIDE2IGJpdCBzaWduZWQgZmxvYXQgUkdCLiBGbG9hdCBpbiBzaGFkZXIuIEFsc28ga25vd24gYXMgQlBUQyAoZmxvYXQpLlxuXHRCQzdSR0JBVW5vcm0gPSBcImJjNy1yZ2JhLXVub3JtXCIsIC8vIDR4NCBibG9jayBjb21wcmVzc2VkIHRleHR1cmUuIDE2IGJ5dGVzIHBlciBibG9jayAoOCBiaXQvcHgpLiBWYXJpYWJsZSBzaXplZCBwYWxsZXQuIDggYml0IGludGVnZXIgUkdCQS4gQWxzbyBrbm93biBhcyBCUFRDICh1bm9ybSkuXG5cdEJDN1JHQkFVbm9ybVNSR0IgPSBcImJjNy1yZ2JhLXVub3JtLXNyZ2JcIiwgLy8gNHg0IGJsb2NrIGNvbXByZXNzZWQgdGV4dHVyZS4gMTYgYnl0ZXMgcGVyIGJsb2NrICg4IGJpdC9weCkuIFZhcmlhYmxlIHNpemVkIHBhbGxldC4gOCBiaXQgaW50ZWdlciBSR0JBLiBBbHNvIGtub3duIGFzIEJQVEMgKHVub3JtKS5cblxuXHQvLyBFVEMyIGNvbXByZXNzZWQgZm9ybWF0cyB1c2FibGUgaWYgXCJ0ZXh0dXJlLWNvbXByZXNzaW9uLWV0YzJcIiBpcyBib3RoXG5cdC8vIHN1cHBvcnRlZCBieSB0aGUgZGV2aWNlL3VzZXIgYWdlbnQgYW5kIGVuYWJsZWQgaW4gcmVxdWVzdERldmljZS5cblx0RVRDMlJHQjhVbm9ybSA9IFwiZXRjMi1yZ2I4dW5vcm1cIiwgLy8gNHg0IGJsb2NrIGNvbXByZXNzZWQgdGV4dHVyZS4gOCBieXRlcyBwZXIgYmxvY2sgKDQgYml0L3B4KS4gQ29tcGxleCBwYWxsZXQuIDggYml0IGludGVnZXIgUkdCLlxuXHRFVEMyUkdCOFVub3JtU1JHQiA9IFwiZXRjMi1yZ2I4dW5vcm0tc3JnYlwiLCAvLyA0eDQgYmxvY2sgY29tcHJlc3NlZCB0ZXh0dXJlLiA4IGJ5dGVzIHBlciBibG9jayAoNCBiaXQvcHgpLiBDb21wbGV4IHBhbGxldC4gOCBiaXQgaW50ZWdlciBSR0IuXG5cdEVUQzJSR0I4QTFVbm9ybSA9IFwiZXRjMi1yZ2I4YTF1bm9ybVwiLCAvLyA0eDQgYmxvY2sgY29tcHJlc3NlZCB0ZXh0dXJlLiA4IGJ5dGVzIHBlciBibG9jayAoNCBiaXQvcHgpLiBDb21wbGV4IHBhbGxldC4gOCBiaXQgaW50ZWdlciBSR0IgKyAxIGJpdCBhbHBoYS5cblx0RVRDMlJHQjhBMVVub3JtU1JHQiA9IFwiZXRjMi1yZ2I4YTF1bm9ybS1zcmdiXCIsIC8vIDR4NCBibG9jayBjb21wcmVzc2VkIHRleHR1cmUuIDggYnl0ZXMgcGVyIGJsb2NrICg0IGJpdC9weCkuIENvbXBsZXggcGFsbGV0LiA4IGJpdCBpbnRlZ2VyIFJHQiArIDEgYml0IGFscGhhLlxuXHRFVEMyUkdCQThVbm9ybSA9IFwiZXRjMi1yZ2JhOHVub3JtXCIsIC8vIDR4NCBibG9jayBjb21wcmVzc2VkIHRleHR1cmUuIDE2IGJ5dGVzIHBlciBibG9jayAoOCBiaXQvcHgpLiBDb21wbGV4IHBhbGxldC4gOCBiaXQgaW50ZWdlciBSR0IgKyA4IGJpdCBhbHBoYS5cblx0RVRDMlJHQkE4VW5vcm1TUkdCID0gXCJldGMyLXJnYmE4dW5vcm0tc3JnYlwiLCAvLyA0eDQgYmxvY2sgY29tcHJlc3NlZCB0ZXh0dXJlLiAxNiBieXRlcyBwZXIgYmxvY2sgKDggYml0L3B4KS4gQ29tcGxleCBwYWxsZXQuIDggYml0IGludGVnZXIgUkdCICsgOCBiaXQgYWxwaGEuXG5cdEVBQ1IxMVVub3JtID0gXCJlYWMtcjExdW5vcm1cIiwgLy8gNHg0IGJsb2NrIGNvbXByZXNzZWQgdGV4dHVyZS4gOCBieXRlcyBwZXIgYmxvY2sgKDQgYml0L3B4KS4gQ29tcGxleCBwYWxsZXQuIDExIGJpdCBpbnRlZ2VyIFIuXG5cdEVBQ1IxMVNub3JtID0gXCJlYWMtcjExc25vcm1cIiwgLy8gNHg0IGJsb2NrIGNvbXByZXNzZWQgdGV4dHVyZS4gOCBieXRlcyBwZXIgYmxvY2sgKDQgYml0L3B4KS4gQ29tcGxleCBwYWxsZXQuIDExIGJpdCBpbnRlZ2VyIFIuXG5cdEVBQ1JHMTFVbm9ybSA9IFwiZWFjLXJnMTF1bm9ybVwiLCAvLyA0eDQgYmxvY2sgY29tcHJlc3NlZCB0ZXh0dXJlLiAxNiBieXRlcyBwZXIgYmxvY2sgKDggYml0L3B4KS4gQ29tcGxleCBwYWxsZXQuIDExIGJpdCBpbnRlZ2VyIFIgKyAxMSBiaXQgaW50ZWdlciBHLlxuXHRFQUNSRzExU25vcm0gPSBcImVhYy1yZzExc25vcm1cIiwgLy8gNHg0IGJsb2NrIGNvbXByZXNzZWQgdGV4dHVyZS4gMTYgYnl0ZXMgcGVyIGJsb2NrICg4IGJpdC9weCkuIENvbXBsZXggcGFsbGV0LiAxMSBiaXQgaW50ZWdlciBSICsgMTEgYml0IGludGVnZXIgRy5cblxuXHQvLyBBU1RDIGNvbXByZXNzZWQgZm9ybWF0cyB1c2FibGUgaWYgXCJ0ZXh0dXJlLWNvbXByZXNzaW9uLWFzdGNcIiBpcyBib3RoXG5cdC8vIHN1cHBvcnRlZCBieSB0aGUgZGV2aWNlL3VzZXIgYWdlbnQgYW5kIGVuYWJsZWQgaW4gcmVxdWVzdERldmljZS5cblx0QVNUQzR4NFVub3JtID0gXCJhc3RjLTR4NC11bm9ybVwiLCAvLyA0eDQgYmxvY2sgY29tcHJlc3NlZCB0ZXh0dXJlLiAxNiBieXRlcyBwZXIgYmxvY2sgKDggYml0L3B4KS4gQ29tcGxleCBwYWxsZXQuIDggYml0IGludGVnZXIgUkdCQS5cblx0QVNUQzR4NFVub3JtU1JHQiA9IFwiYXN0Yy00eDQtdW5vcm0tc3JnYlwiLCAvLyA0eDQgYmxvY2sgY29tcHJlc3NlZCB0ZXh0dXJlLiAxNiBieXRlcyBwZXIgYmxvY2sgKDggYml0L3B4KS4gQ29tcGxleCBwYWxsZXQuIDggYml0IGludGVnZXIgUkdCQS5cblx0QVNUQzV4NFVub3JtID0gXCJhc3RjLTV4NC11bm9ybVwiLCAvLyA1eDQgYmxvY2sgY29tcHJlc3NlZCB0ZXh0dXJlLiAxNiBieXRlcyBwZXIgYmxvY2sgKDYuNCBiaXQvcHgpLiBDb21wbGV4IHBhbGxldC4gOCBiaXQgaW50ZWdlciBSR0JBLlxuXHRBU1RDNXg0VW5vcm1TUkdCID0gXCJhc3RjLTV4NC11bm9ybS1zcmdiXCIsIC8vIDV4NCBibG9jayBjb21wcmVzc2VkIHRleHR1cmUuIDE2IGJ5dGVzIHBlciBibG9jayAoNi40IGJpdC9weCkuIENvbXBsZXggcGFsbGV0LiA4IGJpdCBpbnRlZ2VyIFJHQkEuXG5cdEFTVEM1eDVVbm9ybSA9IFwiYXN0Yy01eDUtdW5vcm1cIiwgLy8gNXg1IGJsb2NrIGNvbXByZXNzZWQgdGV4dHVyZS4gMTYgYnl0ZXMgcGVyIGJsb2NrICg1LjEyIGJpdC9weCkuIENvbXBsZXggcGFsbGV0LiA4IGJpdCBpbnRlZ2VyIFJHQkEuXG5cdEFTVEM1eDVVbm9ybVNSR0IgPSBcImFzdGMtNXg1LXVub3JtLXNyZ2JcIiwgLy8gNXg1IGJsb2NrIGNvbXByZXNzZWQgdGV4dHVyZS4gMTYgYnl0ZXMgcGVyIGJsb2NrICg1LjEyIGJpdC9weCkuIENvbXBsZXggcGFsbGV0LiA4IGJpdCBpbnRlZ2VyIFJHQkEuXG5cdEFTVEM2eDVVbm9ybSA9IFwiYXN0Yy02eDUtdW5vcm1cIiwgLy8gNng1IGJsb2NrIGNvbXByZXNzZWQgdGV4dHVyZS4gMTYgYnl0ZXMgcGVyIGJsb2NrICg0LjI3IGJpdC9weCkuIENvbXBsZXggcGFsbGV0LiA4IGJpdCBpbnRlZ2VyIFJHQkEuXG5cdEFTVEM2eDVVbm9ybVNSR0IgPSBcImFzdGMtNng1LXVub3JtLXNyZ2JcIiwgLy8gNng1IGJsb2NrIGNvbXByZXNzZWQgdGV4dHVyZS4gMTYgYnl0ZXMgcGVyIGJsb2NrICg0LjI3IGJpdC9weCkuIENvbXBsZXggcGFsbGV0LiA4IGJpdCBpbnRlZ2VyIFJHQkEuXG5cdEFTVEM2eDZVbm9ybSA9IFwiYXN0Yy02eDYtdW5vcm1cIiwgLy8gNng2IGJsb2NrIGNvbXByZXNzZWQgdGV4dHVyZS4gMTYgYnl0ZXMgcGVyIGJsb2NrICgzLjU2IGJpdC9weCkuIENvbXBsZXggcGFsbGV0LiA4IGJpdCBpbnRlZ2VyIFJHQkEuXG5cdEFTVEM2eDZVbm9ybVNSR0IgPSBcImFzdGMtNng2LXVub3JtLXNyZ2JcIiwgLy8gNng2IGJsb2NrIGNvbXByZXNzZWQgdGV4dHVyZS4gMTYgYnl0ZXMgcGVyIGJsb2NrICgzLjU2IGJpdC9weCkuIENvbXBsZXggcGFsbGV0LiA4IGJpdCBpbnRlZ2VyIFJHQkEuXG5cdEFTVEM4eDVVbm9ybSA9IFwiYXN0Yy04eDUtdW5vcm1cIiwgLy8gOHg1IGJsb2NrIGNvbXByZXNzZWQgdGV4dHVyZS4gMTYgYnl0ZXMgcGVyIGJsb2NrICgzLjIgYml0L3B4KS4gQ29tcGxleCBwYWxsZXQuIDggYml0IGludGVnZXIgUkdCQS5cblx0QVNUQzh4NVVub3JtU1JHQiA9IFwiYXN0Yy04eDUtdW5vcm0tc3JnYlwiLCAvLyA4eDUgYmxvY2sgY29tcHJlc3NlZCB0ZXh0dXJlLiAxNiBieXRlcyBwZXIgYmxvY2sgKDMuMiBiaXQvcHgpLiBDb21wbGV4IHBhbGxldC4gOCBiaXQgaW50ZWdlciBSR0JBLlxuXHRBU1RDOHg2VW5vcm0gPSBcImFzdGMtOHg2LXVub3JtXCIsIC8vIDh4NiBibG9jayBjb21wcmVzc2VkIHRleHR1cmUuIDE2IGJ5dGVzIHBlciBibG9jayAoMi42NyBiaXQvcHgpLiBDb21wbGV4IHBhbGxldC4gOCBiaXQgaW50ZWdlciBSR0JBLlxuXHRBU1RDOHg2VW5vcm1TUkdCID0gXCJhc3RjLTh4Ni11bm9ybS1zcmdiXCIsIC8vIDh4NiBibG9jayBjb21wcmVzc2VkIHRleHR1cmUuIDE2IGJ5dGVzIHBlciBibG9jayAoMi42NyBiaXQvcHgpLiBDb21wbGV4IHBhbGxldC4gOCBiaXQgaW50ZWdlciBSR0JBLlxuXHRBU1RDOHg4VW5vcm0gPSBcImFzdGMtOHg4LXVub3JtXCIsIC8vIDh4OCBibG9jayBjb21wcmVzc2VkIHRleHR1cmUuIDE2IGJ5dGVzIHBlciBibG9jayAoMiBiaXQvcHgpLiBDb21wbGV4IHBhbGxldC4gOCBiaXQgaW50ZWdlciBSR0JBLlxuXHRBU1RDOHg4VW5vcm1TUkdCID0gXCJhc3RjLTh4OC11bm9ybS1zcmdiXCIsIC8vIDh4OCBibG9jayBjb21wcmVzc2VkIHRleHR1cmUuIDE2IGJ5dGVzIHBlciBibG9jayAoMiBiaXQvcHgpLiBDb21wbGV4IHBhbGxldC4gOCBiaXQgaW50ZWdlciBSR0JBLlxuXHRBU1RDMTB4NVVub3JtID0gXCJhc3RjLTEweDUtdW5vcm1cIiwgLy8gMTB4NSBibG9jayBjb21wcmVzc2VkIHRleHR1cmUuIDE2IGJ5dGVzIHBlciBibG9jayAoMi41NiBiaXQvcHgpLiBDb21wbGV4IHBhbGxldC4gOCBiaXQgaW50ZWdlciBSR0JBLlxuXHRBU1RDMTB4NVVub3JtU1JHQiA9IFwiYXN0Yy0xMHg1LXVub3JtLXNyZ2JcIiwgLy8gMTB4NSBibG9jayBjb21wcmVzc2VkIHRleHR1cmUuIDE2IGJ5dGVzIHBlciBibG9jayAoMi41NiBiaXQvcHgpLiBDb21wbGV4IHBhbGxldC4gOCBiaXQgaW50ZWdlciBSR0JBLlxuXHRBU1RDMTB4NlVub3JtID0gXCJhc3RjLTEweDYtdW5vcm1cIiwgLy8gMTB4NiBibG9jayBjb21wcmVzc2VkIHRleHR1cmUuIDE2IGJ5dGVzIHBlciBibG9jayAoMi4xMyBiaXQvcHgpLiBDb21wbGV4IHBhbGxldC4gOCBiaXQgaW50ZWdlciBSR0JBLlxuXHRBU1RDMTB4NlVub3JtU1JHQiA9IFwiYXN0Yy0xMHg2LXVub3JtLXNyZ2JcIiwgLy8gMTB4NiBibG9jayBjb21wcmVzc2VkIHRleHR1cmUuIDE2IGJ5dGVzIHBlciBibG9jayAoMi4xMyBiaXQvcHgpLiBDb21wbGV4IHBhbGxldC4gOCBiaXQgaW50ZWdlciBSR0JBLlxuXHRBU1RDMTB4OFVub3JtID0gXCJhc3RjLTEweDgtdW5vcm1cIiwgLy8gMTB4OCBibG9jayBjb21wcmVzc2VkIHRleHR1cmUuIDE2IGJ5dGVzIHBlciBibG9jayAoMS42IGJpdC9weCkuIENvbXBsZXggcGFsbGV0LiA4IGJpdCBpbnRlZ2VyIFJHQkEuXG5cdEFTVEMxMHg4VW5vcm1TUkdCID0gXCJhc3RjLTEweDgtdW5vcm0tc3JnYlwiLCAvLyAxMHg4IGJsb2NrIGNvbXByZXNzZWQgdGV4dHVyZS4gMTYgYnl0ZXMgcGVyIGJsb2NrICgxLjYgYml0L3B4KS4gQ29tcGxleCBwYWxsZXQuIDggYml0IGludGVnZXIgUkdCQS5cblx0QVNUQzEweDEwVW5vcm0gPSBcImFzdGMtMTB4MTAtdW5vcm1cIiwgLy8gMTB4MTAgYmxvY2sgY29tcHJlc3NlZCB0ZXh0dXJlLiAxNiBieXRlcyBwZXIgYmxvY2sgKDEuMjggYml0L3B4KS4gQ29tcGxleCBwYWxsZXQuIDggYml0IGludGVnZXIgUkdCQS5cblx0QVNUQzEweDEwVW5vcm1TUkdCID0gXCJhc3RjLTEweDEwLXVub3JtLXNyZ2JcIiwgLy8gMTB4MTAgYmxvY2sgY29tcHJlc3NlZCB0ZXh0dXJlLiAxNiBieXRlcyBwZXIgYmxvY2sgKDEuMjggYml0L3B4KS4gQ29tcGxleCBwYWxsZXQuIDggYml0IGludGVnZXIgUkdCQS5cblx0QVNUQzEyeDEwVW5vcm0gPSBcImFzdGMtMTJ4MTAtdW5vcm1cIiwgLy8gMTJ4MTAgYmxvY2sgY29tcHJlc3NlZCB0ZXh0dXJlLiAxNiBieXRlcyBwZXIgYmxvY2sgKDEuMDcgYml0L3B4KS4gQ29tcGxleCBwYWxsZXQuIDggYml0IGludGVnZXIgUkdCQS5cblx0QVNUQzEyeDEwVW5vcm1TUkdCID0gXCJhc3RjLTEyeDEwLXVub3JtLXNyZ2JcIiwgLy8gMTJ4MTAgYmxvY2sgY29tcHJlc3NlZCB0ZXh0dXJlLiAxNiBieXRlcyBwZXIgYmxvY2sgKDEuMDcgYml0L3B4KS4gQ29tcGxleCBwYWxsZXQuIDggYml0IGludGVnZXIgUkdCQS5cblx0QVNUQzEyeDEyVW5vcm0gPSBcImFzdGMtMTJ4MTItdW5vcm1cIiwgLy8gMTJ4MTIgYmxvY2sgY29tcHJlc3NlZCB0ZXh0dXJlLiAxNiBieXRlcyBwZXIgYmxvY2sgKDAuODkgYml0L3B4KS4gQ29tcGxleCBwYWxsZXQuIDggYml0IGludGVnZXIgUkdCQS5cblx0QVNUQzEyeDEyVW5vcm1TUkdCID0gXCJhc3RjLTEyeDEyLXVub3JtLXNyZ2JcIiwgLy8gMTJ4MTIgYmxvY2sgY29tcHJlc3NlZCB0ZXh0dXJlLiAxNiBieXRlcyBwZXIgYmxvY2sgKDAuODkgYml0L3B4KS4gQ29tcGxleCBwYWxsZXQuIDggYml0IGludGVnZXIgUkdCQS5cblxuXHQvLyBcImRlcHRoMjR1bm9ybS1zdGVuY2lsOFwiIGZlYXR1cmVcblx0RGVwdGgyNFVub3JtU3RlbmNpbDggPSBcImRlcHRoMjR1bm9ybS1zdGVuY2lsOFwiLFxuXG5cdC8vIFwiZGVwdGgzMmZsb2F0LXN0ZW5jaWw4XCIgZmVhdHVyZVxuXHREZXB0aDMyRmxvYXRTdGVuY2lsOCA9IFwiZGVwdGgzMmZsb2F0LXN0ZW5jaWw4XCJcbn1cblxuLyoqIEBpbnRlcm5hbCAqL1xuZXhwb3J0IGVudW0gQWRkcmVzc01vZGUge1xuXHRDbGFtcFRvRWRnZSA9IFwiY2xhbXAtdG8tZWRnZVwiLFxuXHRSZXBlYXQgPSBcInJlcGVhdFwiLFxuXHRNaXJyb3JSZXBlYXQgPSBcIm1pcnJvci1yZXBlYXRcIlxufVxuXG4vKiogQGludGVybmFsICovXG5leHBvcnQgZW51bSBGaWx0ZXJNb2RlIHtcblx0TmVhcmVzdCA9IFwibmVhcmVzdFwiLFxuXHRMaW5lYXIgPSBcImxpbmVhclwiXG59XG5cbi8qKiBAaW50ZXJuYWwgKi9cbmV4cG9ydCBlbnVtIENvbXBhcmVGdW5jdGlvbiB7XG5cdE5ldmVyID0gXCJuZXZlclwiLFxuXHRMZXNzID0gXCJsZXNzXCIsXG5cdEVxdWFsID0gXCJlcXVhbFwiLFxuXHRMZXNzRXF1YWwgPSBcImxlc3MtZXF1YWxcIixcblx0R3JlYXRlciA9IFwiZ3JlYXRlclwiLFxuXHROb3RFcXVhbCA9IFwibm90LWVxdWFsXCIsXG5cdEdyZWF0ZXJFcXVhbCA9IFwiZ3JlYXRlci1lcXVhbFwiLFxuXHRBbHdheXMgPSBcImFsd2F5c1wiXG59XG5cbi8qKiBAaW50ZXJuYWwgKi9cbmV4cG9ydCBlbnVtIFNoYWRlclN0YWdlIHtcblx0VmVydGV4ID0gMSxcblx0RnJhZ21lbnQgPSAyLFxuXHRDb21wdXRlID0gNFxufVxuXG4vKiogQGludGVybmFsICovXG5leHBvcnQgZW51bSBCdWZmZXJCaW5kaW5nVHlwZSB7XG5cdFVuaWZvcm0gPSBcInVuaWZvcm1cIixcblx0U3RvcmFnZSA9IFwic3RvcmFnZVwiLFxuXHRSZWFkT25seVN0b3JhZ2UgPSBcInJlYWQtb25seS1zdG9yYWdlXCJcbn1cblxuLyoqIEBpbnRlcm5hbCAqL1xuZXhwb3J0IGVudW0gU2FtcGxlckJpbmRpbmdUeXBlIHtcblx0RmlsdGVyaW5nID0gXCJmaWx0ZXJpbmdcIixcblx0Tm9uRmlsdGVyaW5nID0gXCJub24tZmlsdGVyaW5nXCIsXG5cdENvbXBhcmlzb24gPSBcImNvbXBhcmlzb25cIlxufVxuXG4vKiogQGludGVybmFsICovXG5leHBvcnQgZW51bSBUZXh0dXJlU2FtcGxlVHlwZSB7XG5cdEZsb2F0ID0gXCJmbG9hdFwiLFxuXHRVbmZpbHRlcmFibGVGbG9hdCA9IFwidW5maWx0ZXJhYmxlLWZsb2F0XCIsXG5cdERlcHRoID0gXCJkZXB0aFwiLFxuXHRTaW50ID0gXCJzaW50XCIsXG5cdFVpbnQgPSBcInVpbnRcIlxufVxuXG4vKiogQGludGVybmFsICovXG5leHBvcnQgZW51bSBTdG9yYWdlVGV4dHVyZUFjY2VzcyB7XG5cdFdyaXRlT25seSA9IFwid3JpdGUtb25seVwiXG59XG5cbi8qKiBAaW50ZXJuYWwgKi9cbmV4cG9ydCBlbnVtIENvbXBpbGF0aW9uTWVzc2FnZVR5cGUge1xuXHRFcnJvciA9IFwiZXJyb3JcIixcblx0V2FybmluZyA9IFwid2FybmluZ1wiLFxuXHRJbmZvID0gXCJpbmZvXCJcbn1cblxuLyoqIEBpbnRlcm5hbCAqL1xuZXhwb3J0IGVudW0gQXV0b0xheW91dE1vZGUge1xuXHRBdXRvID0gXCJhdXRvXCJcbn1cblxuLyoqIEBpbnRlcm5hbCAqL1xuZXhwb3J0IGVudW0gUHJpbWl0aXZlVG9wb2xvZ3kge1xuXHRQb2ludExpc3QgPSBcInBvaW50LWxpc3RcIixcblx0TGluZUxpc3QgPSBcImxpbmUtbGlzdFwiLFxuXHRMaW5lU3RyaXAgPSBcImxpbmUtc3RyaXBcIixcblx0VHJpYW5nbGVMaXN0ID0gXCJ0cmlhbmdsZS1saXN0XCIsXG5cdFRyaWFuZ2xlU3RyaXAgPSBcInRyaWFuZ2xlLXN0cmlwXCJcbn1cblxuLyoqIEBpbnRlcm5hbCAqL1xuZXhwb3J0IGVudW0gRnJvbnRGYWNlIHtcblx0Q0NXID0gXCJjY3dcIixcblx0Q1cgPSBcImN3XCJcbn1cblxuLyoqIEBpbnRlcm5hbCAqL1xuZXhwb3J0IGVudW0gQ3VsbE1vZGUge1xuXHROb25lID0gXCJub25lXCIsXG5cdEZyb250ID0gXCJmcm9udFwiLFxuXHRCYWNrID0gXCJiYWNrXCJcbn1cblxuLyoqIEBpbnRlcm5hbCAqL1xuZXhwb3J0IGVudW0gQ29sb3JXcml0ZUZsYWdzIHtcblx0UmVkID0gMSxcblx0R3JlZW4gPSAyLFxuXHRCbHVlID0gNCxcblx0QWxwaGEgPSA4LFxuXHRBbGwgPSAxNVxufVxuXG4vKiogQGludGVybmFsICovXG5leHBvcnQgZW51bSBCbGVuZEZhY3RvciB7XG5cdFplcm8gPSBcInplcm9cIixcblx0T25lID0gXCJvbmVcIixcblx0U3JjID0gXCJzcmNcIixcblx0T25lTWludXNTcmMgPSBcIm9uZS1taW51cy1zcmNcIixcblx0U3JjQWxwaGEgPSBcInNyYy1hbHBoYVwiLFxuXHRPbmVNaW51c1NyY0FscGhhID0gXCJvbmUtbWludXMtc3JjLWFscGhhXCIsXG5cdERzdCA9IFwiZHN0XCIsXG5cdE9uZU1pbnVzRHN0ID0gXCJvbmUtbWludXMtZHN0XCIsXG5cdERzdEFscGhhID0gXCJkc3QtYWxwaGFcIixcblx0T25lTWludXNEc3RBbHBoYSA9IFwib25lLW1pbnVzLWRzdC1hbHBoYVwiLFxuXHRTcmNBbHBoYVNhdHVyYXRlZCA9IFwic3JjLWFscGhhLXNhdHVyYXRlZFwiLFxuXHRDb25zdGFudCA9IFwiY29uc3RhbnRcIixcblx0T25lTWludXNDb25zdGFudCA9IFwib25lLW1pbnVzLWNvbnN0YW50XCJcbn1cblxuLyoqIEBpbnRlcm5hbCAqL1xuZXhwb3J0IGVudW0gQmxlbmRPcGVyYXRpb24ge1xuXHRBZGQgPSBcImFkZFwiLFxuXHRTdWJ0cmFjdCA9IFwic3VidHJhY3RcIixcblx0UmV2ZXJzZVN1YnRyYWN0ID0gXCJyZXZlcnNlLXN1YnRyYWN0XCIsXG5cdE1pbiA9IFwibWluXCIsXG5cdE1heCA9IFwibWF4XCJcbn1cblxuLyoqIEBpbnRlcm5hbCAqL1xuZXhwb3J0IGVudW0gU3RlbmNpbE9wZXJhdGlvbiB7XG5cdEtlZXAgPSBcImtlZXBcIixcblx0WmVybyA9IFwiemVyb1wiLFxuXHRSZXBsYWNlID0gXCJyZXBsYWNlXCIsXG5cdEludmVydCA9IFwiaW52ZXJ0XCIsXG5cdEluY3JlbWVudENsYW1wID0gXCJpbmNyZW1lbnQtY2xhbXBcIixcblx0RGVjcmVtZW50Q2xhbXAgPSBcImRlY3JlbWVudC1jbGFtcFwiLFxuXHRJbmNyZW1lbnRXcmFwID0gXCJpbmNyZW1lbnQtd3JhcFwiLFxuXHREZWNyZW1lbnRXcmFwID0gXCJkZWNyZW1lbnQtd3JhcFwiXG59XG5cbi8qKiBAaW50ZXJuYWwgKi9cbmV4cG9ydCBlbnVtIEluZGV4Rm9ybWF0IHtcblx0VWludDE2ID0gXCJ1aW50MTZcIixcblx0VWludDMyID0gXCJ1aW50MzJcIlxufVxuXG4vKiogQGludGVybmFsICovXG5leHBvcnQgZW51bSBWZXJ0ZXhGb3JtYXQge1xuXHRVaW50OHgyID0gXCJ1aW50OHgyXCIsXG5cdFVpbnQ4eDQgPSBcInVpbnQ4eDRcIixcblx0U2ludDh4MiA9IFwic2ludDh4MlwiLFxuXHRTaW50OHg0ID0gXCJzaW50OHg0XCIsXG5cdFVub3JtOHgyID0gXCJ1bm9ybTh4MlwiLFxuXHRVbm9ybTh4NCA9IFwidW5vcm04eDRcIixcblx0U25vcm04eDIgPSBcInNub3JtOHgyXCIsXG5cdFNub3JtOHg0ID0gXCJzbm9ybTh4NFwiLFxuXHRVaW50MTZ4MiA9IFwidWludDE2eDJcIixcblx0VWludDE2eDQgPSBcInVpbnQxNng0XCIsXG5cdFNpbnQxNngyID0gXCJzaW50MTZ4MlwiLFxuXHRTaW50MTZ4NCA9IFwic2ludDE2eDRcIixcblx0VW5vcm0xNngyID0gXCJ1bm9ybTE2eDJcIixcblx0VW5vcm0xNng0ID0gXCJ1bm9ybTE2eDRcIixcblx0U25vcm0xNngyID0gXCJzbm9ybTE2eDJcIixcblx0U25vcm0xNng0ID0gXCJzbm9ybTE2eDRcIixcblx0RmxvYXQxNngyID0gXCJmbG9hdDE2eDJcIixcblx0RmxvYXQxNng0ID0gXCJmbG9hdDE2eDRcIixcblx0RmxvYXQzMiA9IFwiZmxvYXQzMlwiLFxuXHRGbG9hdDMyeDIgPSBcImZsb2F0MzJ4MlwiLFxuXHRGbG9hdDMyeDMgPSBcImZsb2F0MzJ4M1wiLFxuXHRGbG9hdDMyeDQgPSBcImZsb2F0MzJ4NFwiLFxuXHRVaW50MzIgPSBcInVpbnQzMlwiLFxuXHRVaW50MzJ4MiA9IFwidWludDMyeDJcIixcblx0VWludDMyeDMgPSBcInVpbnQzMngzXCIsXG5cdFVpbnQzMng0ID0gXCJ1aW50MzJ4NFwiLFxuXHRTaW50MzIgPSBcInNpbnQzMlwiLFxuXHRTaW50MzJ4MiA9IFwic2ludDMyeDJcIixcblx0U2ludDMyeDMgPSBcInNpbnQzMngzXCIsXG5cdFNpbnQzMng0ID0gXCJzaW50MzJ4NFwiXG59XG5cbi8qKiBAaW50ZXJuYWwgKi9cbmV4cG9ydCBlbnVtIElucHV0U3RlcE1vZGUge1xuXHRWZXJ0ZXggPSBcInZlcnRleFwiLFxuXHRJbnN0YW5jZSA9IFwiaW5zdGFuY2VcIlxufVxuXG4vKiogQGludGVybmFsICovXG5leHBvcnQgZW51bSBDb21wdXRlUGFzc1RpbWVzdGFtcExvY2F0aW9uIHtcblx0QmVnaW5uaW5nID0gXCJiZWdpbm5pbmdcIixcblx0RW5kID0gXCJlbmRcIlxufVxuXG4vKiogQGludGVybmFsICovXG5leHBvcnQgZW51bSBSZW5kZXJQYXNzVGltZXN0YW1wTG9jYXRpb24ge1xuXHRCZWdpbm5pbmcgPSBcImJlZ2lubmluZ1wiLFxuXHRFbmQgPSBcImVuZFwiXG59XG5cbi8qKiBAaW50ZXJuYWwgKi9cbmV4cG9ydCBlbnVtIExvYWRPcCB7XG5cdExvYWQgPSBcImxvYWRcIixcblx0Q2xlYXIgPSBcImNsZWFyXCJcbn1cblxuLyoqIEBpbnRlcm5hbCAqL1xuZXhwb3J0IGVudW0gU3RvcmVPcCB7XG5cdFN0b3JlID0gXCJzdG9yZVwiLFxuXHREaXNjYXJkID0gXCJkaXNjYXJkXCJcbn1cblxuLyoqIEBpbnRlcm5hbCAqL1xuZXhwb3J0IGVudW0gUXVlcnlUeXBlIHtcblx0T2NjbHVzaW9uID0gXCJvY2NsdXNpb25cIixcblx0VGltZXN0YW1wID0gXCJ0aW1lc3RhbXBcIlxufVxuXG4vKiogQGludGVybmFsICovXG5leHBvcnQgZW51bSBDYW52YXNBbHBoYU1vZGUge1xuXHRPcGFxdWUgPSBcIm9wYXF1ZVwiLFxuXHRQcmVtdWx0aXBsaWVkID0gXCJwcmVtdWx0aXBsaWVkXCJcbn1cblxuLyoqIEBpbnRlcm5hbCAqL1xuZXhwb3J0IGVudW0gRGV2aWNlTG9zdFJlYXNvbiB7XG5cdERlc3Ryb3llZCA9IFwiZGVzdHJveWVkXCJcbn1cblxuLyoqIEBpbnRlcm5hbCAqL1xuZXhwb3J0IGVudW0gRXJyb3JGaWx0ZXIge1xuXHRPdXRPZk1lbW9yeSA9IFwib3V0LW9mLW1lbW9yeVwiLFxuXHRWYWxpZGF0aW9uID0gXCJ2YWxpZGF0aW9uXCJcbn1cblxuZXhwb3J0IGVudW0gR1BVQ29sb3JXcml0ZSB7XG5cdFJlZCA9IDB4MSxcblx0R3JlZW4gPSAweDIsXG5cdEJsdWUgPSAweDQsXG5cdEFscGhhID0gMHg4LFxuXHRBbGwgPSAweGZcbn1cbmV4cG9ydCBlbnVtIENvbW1hbmRTdWJUeXBlIHtcblx0U2hhZG93ID0gXCJzaGFkb3dcIixcblx0UGljayA9IFwicGlja1wiXG59XG5leHBvcnQgZW51bSBJbnRlcnNlY3Qge1xuXHRPVVRTSURFID0gLTEsXG5cdElOVEVSU0VDVElORyA9IDAsXG5cdElOU0lERSA9IDFcbn1cbiIsImltcG9ydCB7IEJ1ZmZlclVzYWdlIH0gZnJvbSBcIi4uL2NvcmUvV2ViR1BVQ29uc3RhbnRcIjtcclxuY2xhc3MgQnVmZmVyIHtcclxuXHRwdWJsaWMgZ3B1QnVmZmVyOiBHUFVCdWZmZXI7XHJcblx0ZGV2aWNlOiBHUFVEZXZpY2U7XHJcblx0dXNhZ2U6IG51bWJlcjtcclxuXHRkYXRhOiBBcnJheUJ1ZmZlclZpZXc7XHJcblx0c2l6ZTogbnVtYmVyO1xyXG5cdGNvbnN0cnVjdG9yKFxyXG5cdFx0bGFiZWw6IHN0cmluZyxcclxuXHRcdGRldmljZTogR1BVRGV2aWNlLFxyXG5cdFx0dXNhZ2U6IEdQVUJ1ZmZlclVzYWdlRmxhZ3MsXHJcblx0XHRkYXRhOiBBcnJheUJ1ZmZlclZpZXcgfCBudWxsLFxyXG5cdFx0c2l6ZT86IG51bWJlclxyXG5cdCkge1xyXG5cdFx0dGhpcy5kZXZpY2UgPSBkZXZpY2U7XHJcblx0XHR0aGlzLnVzYWdlID0gdXNhZ2U7XHJcblx0XHR0aGlzLmRhdGEgPSBkYXRhO1xyXG5cdFx0dGhpcy5zaXplID0gc2l6ZSAhPSB1bmRlZmluZWQgPyAoc2l6ZSArIDMpICYgfjMgOiAoZGF0YS5ieXRlTGVuZ3RoICsgMykgJiB+MzsgLy8gNCBieXRlcyBhbGlnbm1lbnRzIChiZWNhdXNlIG9mIHRoZSB1cGxvYWQgd2hpY2ggcmVxdWlyZXMgdGhpcylcclxuXHRcdHRoaXMuZ3B1QnVmZmVyID0gZGV2aWNlLmNyZWF0ZUJ1ZmZlcih7XHJcblx0XHRcdGxhYmVsOiBsYWJlbCB8fCBcIlwiLFxyXG5cdFx0XHRzaXplOiB0aGlzLnNpemUsXHJcblx0XHRcdHVzYWdlXHJcblx0XHR9KTtcclxuXHRcdGlmIChkYXRhKSB0aGlzLnNldFN1YkRhdGEoMCwgZGF0YSwgdGhpcy5zaXplKTtcclxuXHR9XHJcblx0c3RhdGljIGNyZWF0ZShcclxuXHRcdGxhYmVsOiBzdHJpbmcsXHJcblx0XHRkZXZpY2U6IEdQVURldmljZSxcclxuXHRcdHVzYWdlOiBHUFVCdWZmZXJVc2FnZUZsYWdzLFxyXG5cdFx0ZGF0YTogQXJyYXlCdWZmZXJWaWV3IHwgbnVsbCxcclxuXHRcdHNpemU/OiBudW1iZXJcclxuXHQpIHtcclxuXHRcdHJldHVybiBuZXcgQnVmZmVyKGxhYmVsLCBkZXZpY2UsIHVzYWdlLCBkYXRhLCBzaXplKTtcclxuXHR9XHJcblx0c3RhdGljIGNyZWF0ZVZlcnRleEJ1ZmZlcihsYWJlbDogc3RyaW5nLCBkZXZpY2U6IEdQVURldmljZSwgZGF0YTogQXJyYXlCdWZmZXJWaWV3KTogQnVmZmVyIHtcclxuXHRcdHJldHVybiBuZXcgQnVmZmVyKGxhYmVsLCBkZXZpY2UsIEJ1ZmZlclVzYWdlLlZlcnRleCB8IEJ1ZmZlclVzYWdlLkNvcHlEc3QsIGRhdGEsIGRhdGEuYnl0ZUxlbmd0aCk7XHJcblx0fVxyXG5cclxuXHRzdGF0aWMgY3JlYXRlSW5kZXhCdWZmZXIobGFiZWw6IHN0cmluZywgZGV2aWNlOiBHUFVEZXZpY2UsIGRhdGE6IEFycmF5QnVmZmVyVmlldyk6IEJ1ZmZlciB7XHJcblx0XHRyZXR1cm4gbmV3IEJ1ZmZlcihsYWJlbCwgZGV2aWNlLCBCdWZmZXJVc2FnZS5JbmRleCB8IEJ1ZmZlclVzYWdlLkNvcHlEc3QsIGRhdGEpO1xyXG5cdH1cclxuXHJcblx0c3RhdGljIGNyZWF0ZVVuaWZvcm1CdWZmZXIobGFiZWw6IHN0cmluZywgZGV2aWNlOiBHUFVEZXZpY2UsIHNpemU6IG51bWJlciwgdXNhZ2U/OiBCdWZmZXJVc2FnZSk6IEJ1ZmZlciB7XHJcblx0XHRyZXR1cm4gbmV3IEJ1ZmZlcihsYWJlbCwgZGV2aWNlLCB1c2FnZSwgbnVsbCwgc2l6ZSk7XHJcblx0fVxyXG5cclxuXHRzdGF0aWMgY3JlYXRlU3RvcmFnZUJ1ZmZlcihsYWJlbDogc3RyaW5nLCBkZXZpY2U6IEdQVURldmljZSwgc2l6ZTogbnVtYmVyLCB1c2FnZSA9IEJ1ZmZlclVzYWdlLlN0b3JhZ2UpOiBCdWZmZXIge1xyXG5cdFx0cmV0dXJuIG5ldyBCdWZmZXIobGFiZWwsIGRldmljZSwgdXNhZ2UsIG51bGwsIHNpemUpO1xyXG5cdH1cclxuXHQvLyBodHRwczovL2dpdGh1Yi5jb20vZ3B1d2ViL2dwdXdlYi9ibG9iL21haW4vZGVzaWduL0J1ZmZlck9wZXJhdGlvbnMubWRcclxuXHRwdWJsaWMgc2V0U3ViRGF0YShvZmZzZXQ6IG51bWJlciwgZGF0YTogQXJyYXlCdWZmZXJWaWV3LCBzaXplPzogbnVtYmVyKTogdm9pZCB7XHJcblx0XHRjb25zdCBzcmNBcnJheUJ1ZmZlciA9IGRhdGEuYnVmZmVyO1xyXG5cdFx0Y29uc3QgYnl0ZUNvdW50ID0gc2l6ZSA/PyBzcmNBcnJheUJ1ZmZlci5ieXRlTGVuZ3RoO1xyXG5cdFx0Y29uc3Qgc3JjQnVmZmVyID0gdGhpcy5kZXZpY2UuY3JlYXRlQnVmZmVyKHtcclxuXHRcdFx0bWFwcGVkQXRDcmVhdGlvbjogdHJ1ZSxcclxuXHRcdFx0c2l6ZTogYnl0ZUNvdW50LFxyXG5cdFx0XHR1c2FnZTogR1BVQnVmZmVyVXNhZ2UuQ09QWV9TUkNcclxuXHRcdH0pO1xyXG5cdFx0Y29uc3QgYXJyYXlCdWZmZXIgPSBzcmNCdWZmZXIuZ2V0TWFwcGVkUmFuZ2UoKTtcclxuXHJcblx0XHRuZXcgVWludDE2QXJyYXkoYXJyYXlCdWZmZXIpLnNldChuZXcgVWludDE2QXJyYXkoc3JjQXJyYXlCdWZmZXIpKTsgLy8gbWVtY3B5XHJcblx0XHRzcmNCdWZmZXIudW5tYXAoKTtcclxuXHJcblx0XHR0aGlzLmNvcHlUb0J1ZmZlcihzcmNCdWZmZXIsIG9mZnNldCwgYnl0ZUNvdW50KTtcclxuXHJcblx0XHRzcmNCdWZmZXIuZGVzdHJveSgpO1xyXG5cdH1cclxuXHJcblx0cHVibGljIGNvcHlUb0J1ZmZlcihzcmNCdWZmZXI6IEdQVUJ1ZmZlciwgb2Zmc2V0OiBudW1iZXIsIGJ5dGVDb3VudDogbnVtYmVyKTogdm9pZCB7XHJcblx0XHRjb25zdCBjb21tYW5kRW5jb2RlciA9IHRoaXMuZGV2aWNlLmNyZWF0ZUNvbW1hbmRFbmNvZGVyKCk7XHJcblx0XHRjb21tYW5kRW5jb2Rlci5jb3B5QnVmZmVyVG9CdWZmZXIoc3JjQnVmZmVyLCAwLCB0aGlzLmdwdUJ1ZmZlciwgb2Zmc2V0LCBieXRlQ291bnQpO1xyXG5cdFx0dGhpcy5kZXZpY2UucXVldWUuc3VibWl0KFtjb21tYW5kRW5jb2Rlci5maW5pc2goKV0pO1xyXG5cdH1cclxuXHJcblx0cHVibGljIGNvcHlUb1RleHR1cmUoXHJcblx0XHRieXRlc1BlclJvdzogbnVtYmVyLFxyXG5cdFx0cm93c1BlckltYWdlOiBudW1iZXIsXHJcblx0XHRkZXN0aW5hdGlvbjogR1BVSW1hZ2VDb3B5VGV4dHVyZSxcclxuXHRcdGV4dGVudDogR1BVRXh0ZW50M0RcclxuXHQpOiB2b2lkIHtcclxuXHRcdGNvbnN0IGNvbW1hbmRFbmNvZGVyID0gdGhpcy5kZXZpY2UuY3JlYXRlQ29tbWFuZEVuY29kZXIoKTtcclxuXHRcdGNvbW1hbmRFbmNvZGVyLmNvcHlCdWZmZXJUb1RleHR1cmUoXHJcblx0XHRcdHtcclxuXHRcdFx0XHRidWZmZXI6IHRoaXMuZ3B1QnVmZmVyLFxyXG5cdFx0XHRcdGJ5dGVzUGVyUm93LFxyXG5cdFx0XHRcdHJvd3NQZXJJbWFnZVxyXG5cdFx0XHR9LFxyXG5cdFx0XHRkZXN0aW5hdGlvbixcclxuXHRcdFx0ZXh0ZW50XHJcblx0XHQpO1xyXG5cdFx0dGhpcy5kZXZpY2UucXVldWUuc3VibWl0KFtjb21tYW5kRW5jb2Rlci5maW5pc2goKV0pO1xyXG5cdH1cclxuXHJcblx0cHVibGljIGRlc3Ryb3koKTogdm9pZCB7XHJcblx0XHR0aGlzLmdwdUJ1ZmZlci5kZXN0cm95KCk7XHJcblx0fVxyXG59XHJcblxyXG5leHBvcnQgZGVmYXVsdCBCdWZmZXI7XHJcbiIsImltcG9ydCBCaW5kR3JvdXBMYXlvdXQgZnJvbSBcIi4vQmluZEdyb3VwTGF5b3V0XCI7XHJcblxyXG5jb25zdCBwaXBlbGluZUxheW91dENhY2hlID0gbmV3IE1hcCgpO1xyXG5leHBvcnQgY2xhc3MgUGlwZWxpbmVMYXlvdXQge1xyXG4gIHB1YmxpYyBncHVQaXBlbGluZUxheW91dDogR1BVUGlwZWxpbmVMYXlvdXQ7XHJcbiAgaW5kZXg6IG51bWJlcjtcclxuICBwcml2YXRlIGNvbnN0cnVjdG9yKFxyXG4gICAgZGV2aWNlOiBHUFVEZXZpY2UsXHJcbiAgICBsYWJlbDogc3RyaW5nLFxyXG4gICAgcHVibGljIGdyb3VwTGF5b3V0czogQmluZEdyb3VwTGF5b3V0W10gPSBbXSxcclxuICAgIGluZGV4PzogbnVtYmVyXHJcbiAgKSB7XHJcbiAgICB0aGlzLmluZGV4ID0gaW5kZXggfHwgMDtcclxuICAgIHRoaXMuZ3B1UGlwZWxpbmVMYXlvdXQgPSBkZXZpY2UuY3JlYXRlUGlwZWxpbmVMYXlvdXQoe1xyXG4gICAgICBsYWJlbDogbGFiZWwsXHJcbiAgICAgIGJpbmRHcm91cExheW91dHM6IGdyb3VwTGF5b3V0cy5tYXAoKGxheW91dCkgPT4ge1xyXG4gICAgICAgIHJldHVybiBsYXlvdXQuZ3B1QmluZEdyb3VwTGF5b3V0O1xyXG4gICAgICB9KSxcclxuICAgIH0pO1xyXG4gIH1cclxuICBzdGF0aWMgZ2V0UGlwZWxpbmVMYXlvdXRGcm9tQ2FjaGUoXHJcbiAgICBkZXZpY2U6IEdQVURldmljZSxcclxuICAgIGxhYmVsOiBzdHJpbmcsXHJcbiAgICBncm91cExheW91dHM6IEJpbmRHcm91cExheW91dFtdXHJcbiAgKTogUGlwZWxpbmVMYXlvdXQge1xyXG4gICAgaWYgKHBpcGVsaW5lTGF5b3V0Q2FjaGUuaGFzKGxhYmVsKSkge1xyXG4gICAgICByZXR1cm4gcGlwZWxpbmVMYXlvdXRDYWNoZS5nZXQobGFiZWwpO1xyXG4gICAgfSBlbHNlIHtcclxuICAgICAgY29uc3QgYmluZEdyb3VwTGF5b3V0ID0gbmV3IFBpcGVsaW5lTGF5b3V0KGRldmljZSwgbGFiZWwsIGdyb3VwTGF5b3V0cyk7XHJcbiAgICAgIHBpcGVsaW5lTGF5b3V0Q2FjaGUuc2V0KGxhYmVsLCBiaW5kR3JvdXBMYXlvdXQpO1xyXG4gICAgICByZXR1cm4gYmluZEdyb3VwTGF5b3V0O1xyXG4gICAgfVxyXG4gIH1cclxufVxyXG4iLCJpbXBvcnQgQmluZEdyb3VwTGF5b3V0IGZyb20gXCIuL0JpbmRHcm91cExheW91dFwiO1xyXG5pbXBvcnQgeyBDb21wdXRlQ29tbWFuZCB9IGZyb20gXCIuL0NvbXB1dGVDb21tYW5kXCI7XHJcbmltcG9ydCBEcmF3Q29tbWFuZCBmcm9tIFwiLi9EcmF3Q29tbWFuZFwiO1xyXG5pbXBvcnQgeyBQaXBlbGluZUxheW91dCB9IGZyb20gXCIuL1BpcGVsaW5lTGF5b3V0XCI7XHJcbmltcG9ydCB7IFJlbmRlclN0YXRlIH0gZnJvbSBcIi4vUmVuZGVyU3RhdGVcIjtcclxuXHJcbmNvbnN0IHJlbmRlclBpcGVsaW5lcyA9IG5ldyBNYXAoKTtcclxuY29uc3QgY29tcHV0ZVBpcGVsaW5lcyA9IG5ldyBNYXAoKTtcclxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgUGlwZWxpbmUge1xyXG5cdGdwdVBpcGVsaW5lOiBHUFVSZW5kZXJQaXBlbGluZSB8IEdQVUNvbXB1dGVQaXBlbGluZTtcclxuXHR0eXBlOiBzdHJpbmc7XHJcblx0ZGV2aWNlOiBHUFVEZXZpY2U7XHJcblx0ZGVzY3JpcHRvcjogR1BVUmVuZGVyUGlwZWxpbmVEZXNjcmlwdG9yIHwgR1BVQ29tcHV0ZVBpcGVsaW5lRGVzY3JpcHRvcjtcclxuXHRjb25zdHJ1Y3RvcihcclxuXHRcdHR5cGU6IHN0cmluZyxcclxuXHRcdGRldmljZTogR1BVRGV2aWNlLFxyXG5cdFx0ZGVzY3JpcHRvcjogR1BVUmVuZGVyUGlwZWxpbmVEZXNjcmlwdG9yIHwgR1BVQ29tcHV0ZVBpcGVsaW5lRGVzY3JpcHRvclxyXG5cdCkge1xyXG5cdFx0dGhpcy50eXBlID0gdHlwZTtcclxuXHRcdHRoaXMuZGVzY3JpcHRvciA9IGRlc2NyaXB0b3I7XHJcblx0XHR0aGlzLmRldmljZSA9IGRldmljZTtcclxuXHRcdHRoaXMuY3JlYXRlUGlwZWxpbmUoKTtcclxuXHR9XHJcblx0cHJpdmF0ZSBjcmVhdGVQaXBlbGluZSgpIHtcclxuXHRcdGlmICh0aGlzLnR5cGUgPT0gXCJyZW5kZXJcIikge1xyXG5cdFx0XHR0aGlzLmdwdVBpcGVsaW5lID0gdGhpcy5kZXZpY2UuY3JlYXRlUmVuZGVyUGlwZWxpbmUodGhpcy5kZXNjcmlwdG9yIGFzIEdQVVJlbmRlclBpcGVsaW5lRGVzY3JpcHRvcik7XHJcblx0XHR9IGVsc2Uge1xyXG5cdFx0XHR0aGlzLmdwdVBpcGVsaW5lID0gdGhpcy5kZXZpY2UuY3JlYXRlQ29tcHV0ZVBpcGVsaW5lKHRoaXMuZGVzY3JpcHRvciBhcyBHUFVDb21wdXRlUGlwZWxpbmVEZXNjcmlwdG9yKTtcclxuXHRcdH1cclxuXHR9XHJcblx0cHVibGljIGJpbmQocGFzc0VuY29kZXI6IEdQVVJlbmRlclBhc3NFbmNvZGVyIHwgR1BVQ29tcHV0ZVBhc3NFbmNvZGVyKSB7XHJcblx0XHRpZiAodGhpcy50eXBlID09IFwicmVuZGVyXCIpIHtcclxuXHRcdFx0KHBhc3NFbmNvZGVyIGFzIEdQVVJlbmRlclBhc3NFbmNvZGVyKS5zZXRQaXBlbGluZSh0aGlzLmdwdVBpcGVsaW5lIGFzIEdQVVJlbmRlclBpcGVsaW5lKTtcclxuXHRcdH0gZWxzZSB7XHJcblx0XHRcdChwYXNzRW5jb2RlciBhcyBHUFVDb21wdXRlUGFzc0VuY29kZXIpLnNldFBpcGVsaW5lKHRoaXMuZ3B1UGlwZWxpbmUgYXMgR1BVQ29tcHV0ZVBpcGVsaW5lKTtcclxuXHRcdH1cclxuXHR9XHJcblx0c3RhdGljIGdldFJlbmRlclBpcGVsaW5lRnJvbUNhY2hlKFxyXG5cdFx0ZGV2aWNlOiBHUFVEZXZpY2UsXHJcblx0XHRkcmF3Q29tYW5kOiBEcmF3Q29tbWFuZCxcclxuXHRcdGdyb3VwTGF5b3V0czogQmluZEdyb3VwTGF5b3V0W11cclxuXHQpOiBQaXBlbGluZSB7XHJcblx0XHRjb25zdCB7IHJlbmRlclN0YXRlLCBzaGFkZXJTb3VyY2UgfSA9IGRyYXdDb21hbmQ7XHJcblx0XHRjb25zdCByc1N0ciA9IEpTT04uc3RyaW5naWZ5KHJlbmRlclN0YXRlKTtcclxuXHRcdGNvbnN0IGNvbWJpbmVTdHIgPSBzaGFkZXJTb3VyY2UudWlkLmNvbmNhdChyc1N0cik7XHJcblx0XHRjb25zdCBoYXNoSWQgPSBzdHJpbmdUb0hhc2goY29tYmluZVN0cik7XHJcblx0XHRjb25zdCBjb21iaW5lTGF5b3V0cyA9IGdyb3VwTGF5b3V0c1xyXG5cdFx0XHQ/LmZpbHRlcigobGF5b3V0KSA9PiBsYXlvdXQgIT0gdW5kZWZpbmVkKVxyXG5cdFx0XHQ/LnNvcnQoKGxheW91dDEsIGxheW91dDIpID0+IGxheW91dDEuaW5kZXggLSBsYXlvdXQyLmluZGV4KTtcclxuXHRcdGxldCBwaXBlbGluZSA9IHJlbmRlclBpcGVsaW5lcy5nZXQoaGFzaElkKTtcclxuXHRcdGlmICghcGlwZWxpbmUpIHtcclxuXHRcdFx0Y29uc3QgZGVzY3JpcHRvciA9IFBpcGVsaW5lLmdldFBpcGVsaW5lRGVzY3JpcHRvcihcclxuXHRcdFx0XHRkZXZpY2UsXHJcblx0XHRcdFx0ZHJhd0NvbWFuZCxcclxuXHRcdFx0XHRyZW5kZXJTdGF0ZSxcclxuXHRcdFx0XHRjb21iaW5lTGF5b3V0cyxcclxuXHRcdFx0XHRoYXNoSWQudG9TdHJpbmcoKVxyXG5cdFx0XHQpO1xyXG5cdFx0XHRwaXBlbGluZSA9IG5ldyBQaXBlbGluZShcInJlbmRlclwiLCBkZXZpY2UsIGRlc2NyaXB0b3IpO1xyXG5cdFx0XHRyZW5kZXJQaXBlbGluZXMuc2V0KGhhc2hJZCwgcGlwZWxpbmUpO1xyXG5cdFx0fVxyXG5cdFx0cmV0dXJuIHBpcGVsaW5lO1xyXG5cdH1cclxuXHRzdGF0aWMgZ2V0Q29tcHV0ZVBpcGVsaW5lRnJvbUNhY2hlKFxyXG5cdFx0ZGV2aWNlOiBHUFVEZXZpY2UsXHJcblx0XHRjb21wdXRlQ29tbWFkOiBDb21wdXRlQ29tbWFuZCxcclxuXHRcdGdyb3VwTGF5b3V0czogQmluZEdyb3VwTGF5b3V0W11cclxuXHQpOiBQaXBlbGluZSB7XHJcblx0XHRjb25zdCB7IHNoYWRlclNvdXJjZSB9ID0gY29tcHV0ZUNvbW1hZDtcclxuXHRcdGNvbnN0IGhhc2hJZCA9IHN0cmluZ1RvSGFzaChzaGFkZXJTb3VyY2UudWlkKTtcclxuXHRcdGxldCBwaXBlbGluZSA9IGNvbXB1dGVQaXBlbGluZXMuZ2V0KGhhc2hJZCk7XHJcblx0XHRpZiAoIXBpcGVsaW5lKSB7XHJcblx0XHRcdHBpcGVsaW5lID0gbmV3IFBpcGVsaW5lKFwiY29tcHV0ZVwiLCBkZXZpY2UsIHtcclxuXHRcdFx0XHRsYXlvdXQ6IFBpcGVsaW5lTGF5b3V0LmdldFBpcGVsaW5lTGF5b3V0RnJvbUNhY2hlKGRldmljZSwgaGFzaElkLnRvU3RyaW5nKCksIGdyb3VwTGF5b3V0cylcclxuXHRcdFx0XHRcdC5ncHVQaXBlbGluZUxheW91dCxcclxuXHRcdFx0XHRjb21wdXRlOiB7XHJcblx0XHRcdFx0XHRtb2R1bGU6IHNoYWRlclNvdXJjZS5nZXRTaGFkZXJNb2R1bGUoZGV2aWNlKS5jb21wdXRlLFxyXG5cdFx0XHRcdFx0ZW50cnlQb2ludDogc2hhZGVyU291cmNlPy5jb21wdXRlPy5jb21wdXRlTWFpbiB8fCBcIm1haW5cIlxyXG5cdFx0XHRcdH1cclxuXHRcdFx0fSk7XHJcblx0XHRcdGNvbXB1dGVQaXBlbGluZXMuc2V0KGhhc2hJZCwgcGlwZWxpbmUpO1xyXG5cdFx0fVxyXG5cdFx0cmV0dXJuIHBpcGVsaW5lO1xyXG5cdH1cclxuXHRwcml2YXRlIHN0YXRpYyBnZXRQaXBlbGluZURlc2NyaXB0b3IoXHJcblx0XHRkZXZpY2U6IEdQVURldmljZSxcclxuXHRcdGRyYXdDb21hbmQ6IERyYXdDb21tYW5kLFxyXG5cdFx0cmVuZGVyU3RhdGU6IFJlbmRlclN0YXRlLFxyXG5cdFx0Z3JvdXBMYXlvdXRzOiBCaW5kR3JvdXBMYXlvdXRbXSxcclxuXHRcdGhhc2hJZDogc3RyaW5nXHJcblx0KTogR1BVUmVuZGVyUGlwZWxpbmVEZXNjcmlwdG9yIHtcclxuXHRcdGNvbnN0IHsgdmVydGV4QnVmZmVycywgc2hhZGVyU291cmNlIH0gPSBkcmF3Q29tYW5kO1xyXG5cdFx0Y29uc3QgeyB2ZXJ0LCBmcmFnIH0gPSBzaGFkZXJTb3VyY2UuZ2V0U2hhZGVyTW9kdWxlKGRldmljZSk7XHJcblx0XHRjb25zdCBwaXBlbGluZURlYyA9IHtcclxuXHRcdFx0bGF5b3V0OiBQaXBlbGluZUxheW91dC5nZXRQaXBlbGluZUxheW91dEZyb21DYWNoZShkZXZpY2UsIGhhc2hJZCwgZ3JvdXBMYXlvdXRzKS5ncHVQaXBlbGluZUxheW91dFxyXG5cdFx0fSBhcyBhbnk7XHJcblx0XHRpZiAodmVydClcclxuXHRcdFx0cGlwZWxpbmVEZWMudmVydGV4ID0ge1xyXG5cdFx0XHRcdG1vZHVsZTogdmVydCxcclxuXHRcdFx0XHRlbnRyeVBvaW50OiBzaGFkZXJTb3VyY2U/LnJlbmRlcj8udmVydE1haW4gfHwgXCJtYWluXCIsXHJcblx0XHRcdFx0YnVmZmVyczogdmVydGV4QnVmZmVycy5tYXAoKHZlcnRleEJ1ZmZlcikgPT4gdmVydGV4QnVmZmVyLmdldEJ1ZmZlckRlcygpKVxyXG5cdFx0XHR9O1xyXG5cdFx0aWYgKHJlbmRlclN0YXRlLnByaW1pdGl2ZSkgcGlwZWxpbmVEZWMucHJpbWl0aXZlID0gcmVuZGVyU3RhdGUucHJpbWl0aXZlLmdldEdQVVByaW1pdGl2ZURlYygpO1xyXG5cdFx0aWYgKHJlbmRlclN0YXRlLmRlcHRoU3RlbmNpbCkgcGlwZWxpbmVEZWMuZGVwdGhTdGVuY2lsID0gcmVuZGVyU3RhdGUuZGVwdGhTdGVuY2lsLmdldEdQVURlcHRoU3RlbmNpbERlYygpO1xyXG5cdFx0aWYgKHJlbmRlclN0YXRlLm11bHRpc2FtcGxlKSBwaXBlbGluZURlYy5tdWx0aXNhbXBsZSA9IHJlbmRlclN0YXRlLm11bHRpc2FtcGxlLmdldE11bHRpU2FtcGxlRGVjKCk7XHJcblx0XHRpZiAoZnJhZylcclxuXHRcdFx0cGlwZWxpbmVEZWMuZnJhZ21lbnQgPSB7XHJcblx0XHRcdFx0bW9kdWxlOiBmcmFnLFxyXG5cdFx0XHRcdGVudHJ5UG9pbnQ6IHNoYWRlclNvdXJjZT8ucmVuZGVyPy5mcmFnTWFpbiB8fCBcIm1haW5cIixcclxuXHRcdFx0XHR0YXJnZXRzOiByZW5kZXJTdGF0ZS50YXJnZXRzLm1hcCgodGFyZ2V0KSA9PiB7XHJcblx0XHRcdFx0XHRyZXR1cm4gdGFyZ2V0LmdldEdQVVRhcmdldERlYygpO1xyXG5cdFx0XHRcdH0pXHJcblx0XHRcdH07XHJcblx0XHRyZXR1cm4gcGlwZWxpbmVEZWM7XHJcblx0fVxyXG59XHJcbi8vIEJvcnJvd2VkIGZyb20gaHR0cHM6Ly93ZXJ4bHRkLmNvbS93cC8yMDEwLzA1LzEzL2phdmFzY3JpcHQtaW1wbGVtZW50YXRpb24tb2YtamF2YXMtc3RyaW5nLWhhc2hjb2RlLW1ldGhvZC9cclxuZnVuY3Rpb24gc3RyaW5nVG9IYXNoKHN0cikge1xyXG5cdGxldCBoYXNoID0gMDtcclxuXHRpZiAoc3RyLmxlbmd0aCA9PSAwKSByZXR1cm4gaGFzaDtcclxuXHRmb3IgKGxldCBpID0gMDsgaSA8IHN0ci5sZW5ndGg7IGkrKykge1xyXG5cdFx0Y29uc3QgY2hhciA9IHN0ci5jaGFyQ29kZUF0KGkpO1xyXG5cdFx0aGFzaCA9IChoYXNoIDw8IDUpIC0gaGFzaCArIGNoYXI7XHJcblx0XHRoYXNoID0gaGFzaCAmIGhhc2g7IC8vIENvbnZlcnQgdG8gMzJiaXQgaW50ZWdlclxyXG5cdH1cclxuXHRyZXR1cm4gaGFzaDtcclxufVxyXG4iLCJpbXBvcnQgQ2FtZXJhIGZyb20gXCIuLi9jYW1lcmEvQ2FtZXJhXCI7XHJcbmltcG9ydCB7IERyYXdDb21tYW5kUGFyYW1zIH0gZnJvbSBcIi4uL2NvcmUvV2ViR1BVVHlwZXNcIjtcclxuaW1wb3J0IHsgTWF0ZXJpYWwgfSBmcm9tIFwiLi4vbWF0ZXJpYWwvTWF0ZXJpYWxcIjtcclxuaW1wb3J0IHsgU2hhZGVyU291cmNlIH0gZnJvbSBcIi4uL3NoYWRlci9TaGFkZXJTb3VyY2VcIjtcclxuaW1wb3J0IEJ1ZmZlciBmcm9tIFwiLi9CdWZmZXJcIjtcclxuaW1wb3J0IHsgQ29tbWFuZCB9IGZyb20gXCIuL0NvbW1hbmRcIjtcclxuaW1wb3J0IENvbnRleHQgZnJvbSBcIi4vQ29udGV4dFwiO1xyXG5pbXBvcnQgSW5kZXhCdWZmZXIgZnJvbSBcIi4vSW5kZXhCdWZmZXJcIjtcclxuaW1wb3J0IFBpcGVsaW5lIGZyb20gXCIuL1BpcGVsaW5lXCI7XHJcbmltcG9ydCBRdWVyeVNldCBmcm9tIFwiLi9RdWVyeVNldFwiO1xyXG5pbXBvcnQgeyBSZW5kZXJTdGF0ZSwgU2Npc3NvclRlc3QsIFZpZXdQb3J0IH0gZnJvbSBcIi4vUmVuZGVyU3RhdGVcIjtcclxuaW1wb3J0IFJlbmRlclRhcmdldCBmcm9tIFwiLi9SZW5kZXJUYXJnZXRcIjtcclxuaW1wb3J0IFNoYWRlckRhdGEgZnJvbSBcIi4vU2hhZGVyRGF0YVwiO1xyXG5pbXBvcnQgVmVydGV4QnVmZmVyIGZyb20gXCIuL1ZlcnRleEJ1ZmZlclwiO1xyXG5cclxuY2xhc3MgRHJhd0NvbW1hbmQgaW1wbGVtZW50cyBDb21tYW5kIHtcclxuXHRwdWJsaWMgc2hhZGVyRGF0YT86IFNoYWRlckRhdGE7XHJcblxyXG5cdHB1YmxpYyByZW5kZXJUYXJnZXQ/OiBSZW5kZXJUYXJnZXQ7XHJcblxyXG5cdHB1YmxpYyB2ZXJ0ZXhCdWZmZXJzPzogQXJyYXk8VmVydGV4QnVmZmVyPjtcclxuXHJcblx0cHVibGljIGluZGV4QnVmZmVyPzogSW5kZXhCdWZmZXI7XHJcblxyXG5cdHB1YmxpYyByZW5kZXJTdGF0ZT86IFJlbmRlclN0YXRlO1xyXG5cclxuXHRwdWJsaWMgcXVlcnlJbmRleD86IG51bWJlcjtcclxuXHJcblx0cHVibGljIGNvdW50PzogbnVtYmVyO1xyXG5cclxuXHRwdWJsaWMgaW5zdGFuY2VzPzogbnVtYmVyO1xyXG5cclxuXHRwdWJsaWMgc2hhZGVyU291cmNlPzogU2hhZGVyU291cmNlO1xyXG5cclxuXHRwdWJsaWMgZGlydHk/OiBib29sZWFuO1xyXG5cclxuXHRwdWJsaWMgaW5kaXJlY3RCdWZmZXI/OiBCdWZmZXI7XHJcblxyXG5cdHB1YmxpYyBpbmRpcmVjdE9mZnNldD86IG51bWJlcjtcclxuXHJcblx0cHVibGljIGxpZ2h0U2hhZGVyRGF0YT86IFNoYWRlckRhdGE7XHJcblxyXG5cdHB1YmxpYyB1c2VMaWdodD86IGJvb2xlYW47XHJcblxyXG5cdGNvbnN0cnVjdG9yKG9wdGlvbnM6IERyYXdDb21tYW5kUGFyYW1zKSB7XHJcblx0XHR0aGlzLnNoYWRlckRhdGEgPSBvcHRpb25zLnNoYWRlckRhdGE7XHJcblxyXG5cdFx0dGhpcy5yZW5kZXJUYXJnZXQgPSBvcHRpb25zLnJlbmRlclRhcmdldDtcclxuXHJcblx0XHR0aGlzLnVzZUxpZ2h0ID0gb3B0aW9ucy51c2VMaWdodDtcclxuXHJcblx0XHR0aGlzLnZlcnRleEJ1ZmZlcnMgPSBvcHRpb25zLnZlcnRleEJ1ZmZlcnM7XHJcblxyXG5cdFx0dGhpcy5pbmRleEJ1ZmZlciA9IG9wdGlvbnMuaW5kZXhCdWZmZXI7XHJcblxyXG5cdFx0dGhpcy5yZW5kZXJTdGF0ZSA9IG9wdGlvbnMucmVuZGVyU3RhdGU7XHJcblxyXG5cdFx0dGhpcy5xdWVyeUluZGV4ID0gb3B0aW9ucy5xdWVyeUluZGV4O1xyXG5cclxuXHRcdHRoaXMuY291bnQgPSBvcHRpb25zLmNvdW50O1xyXG5cclxuXHRcdHRoaXMuaW5zdGFuY2VzID0gb3B0aW9ucy5pbnN0YW5jZXM7XHJcblxyXG5cdFx0dGhpcy5zaGFkZXJTb3VyY2UgPSBvcHRpb25zLnNoYWRlclNvdXJjZTtcclxuXHJcblx0XHR0aGlzLmRpcnR5ID0gb3B0aW9ucy5kaXJ0eTtcclxuXHJcblx0XHR0aGlzLmxpZ2h0U2hhZGVyRGF0YSA9IG9wdGlvbnMubGlnaHRTaGFkZXJEYXRhO1xyXG5cdH1cclxuXHRwdWJsaWMgc2hhbGxvd0Nsb25lKG1hdGVyaWFsPzogTWF0ZXJpYWwpIHtcclxuXHRcdGlmICghbWF0ZXJpYWwpIHJldHVybjtcclxuXHRcdHJldHVybiBuZXcgRHJhd0NvbW1hbmQoe1xyXG5cdFx0XHR2ZXJ0ZXhCdWZmZXJzOiB0aGlzLnZlcnRleEJ1ZmZlcnMsXHJcblx0XHRcdGluZGV4QnVmZmVyOiB0aGlzLmluZGV4QnVmZmVyLFxyXG5cdFx0XHRzaGFkZXJEYXRhOiBtYXRlcmlhbC5zaGFkZXJEYXRhLFxyXG5cdFx0XHRpbnN0YW5jZXM6IHRoaXMuaW5zdGFuY2VzLFxyXG5cdFx0XHRjb3VudDogdGhpcy5jb3VudCxcclxuXHRcdFx0cmVuZGVyU3RhdGU6IG1hdGVyaWFsLnJlbmRlclN0YXRlLFxyXG5cdFx0XHRzaGFkZXJTb3VyY2U6IG1hdGVyaWFsLnNoYWRlclNvdXJjZSxcclxuXHRcdFx0bGlnaHRTaGFkZXJEYXRhOiBtYXRlcmlhbC5saWdodCA/IHRoaXMubGlnaHRTaGFkZXJEYXRhIDogdW5kZWZpbmVkLFxyXG5cdFx0XHR1c2VMaWdodDogbWF0ZXJpYWwubGlnaHRcclxuXHRcdH0pO1xyXG5cdH1cclxuXHRwdWJsaWMgcmVuZGVyKHBhcmFtcz86IFJlbmRlclBhcmFtcyk6IHZvaWQge1xyXG5cdFx0Y29uc3QgeyBkZXZpY2UsIHBhc3NFbmNvZGVyLCBjYW1lcmEsIHF1ZXJ5U2V0LCB2aWV3UG9ydCwgc2Npc3NvclRlc3QgfSA9IHBhcmFtcyB8fCB7fTtcclxuXHRcdGNvbnN0IHtcclxuXHRcdFx0c2hhZGVyRGF0YSxcclxuXHRcdFx0cmVuZGVyU3RhdGUsXHJcblx0XHRcdHZlcnRleEJ1ZmZlcnMsXHJcblx0XHRcdGluZGV4QnVmZmVyLFxyXG5cdFx0XHRsaWdodFNoYWRlckRhdGEsXHJcblx0XHRcdHNoYWRlclNvdXJjZSxcclxuXHRcdFx0Y291bnQsXHJcblx0XHRcdGluc3RhbmNlcyxcclxuXHRcdFx0cmVuZGVyVGFyZ2V0LFxyXG5cdFx0XHR1c2VMaWdodCxcclxuXHRcdFx0aW5kaXJlY3RPZmZzZXQsXHJcblx0XHRcdGluZGlyZWN0QnVmZmVyLFxyXG5cdFx0XHRxdWVyeUluZGV4XHJcblx0XHR9ID0gdGhpcztcclxuXHRcdGNvbnN0IGN1cnJlbnRQYXNzRW5jb2RlciA9IHJlbmRlclRhcmdldD8uYmVnaW5SZW5kZXJQYXNzPy4oZGV2aWNlKSA/PyBwYXNzRW5jb2RlcjtcclxuXHRcdGNvbnN0IGRlZmluZXMgPSBPYmplY3QuYXNzaWduKHt9LCBsaWdodFNoYWRlckRhdGE/LmRlZmluZXMgPz8ge30sIGNhbWVyYT8uc2hhZGVyRGF0YT8uZGVmaW5lcyA/PyB7fSk7XHJcblxyXG5cdFx0c2hhZGVyRGF0YT8uYmluZD8uKGRldmljZSwgY3VycmVudFBhc3NFbmNvZGVyKTtcclxuXHJcblx0XHRjYW1lcmE/LnNoYWRlckRhdGE/LmJpbmQoZGV2aWNlLCBjdXJyZW50UGFzc0VuY29kZXIpO1xyXG5cclxuXHRcdHVzZUxpZ2h0ICYmIGxpZ2h0U2hhZGVyRGF0YT8uYmluZD8uKGRldmljZSwgY3VycmVudFBhc3NFbmNvZGVyKTtcclxuXHJcblx0XHRyZW5kZXJTdGF0ZT8uYmluZD8uKHtcclxuXHRcdFx0cGFzc0VuY29kZXI6IGN1cnJlbnRQYXNzRW5jb2RlcixcclxuXHRcdFx0dmlld1BvcnQ6IHZpZXdQb3J0IGFzIFZpZXdQb3J0LFxyXG5cdFx0XHRzY2lzc29yVGVzdDogPFNjaXNzb3JUZXN0PnNjaXNzb3JUZXN0XHJcblx0XHR9KTtcclxuXHJcblx0XHR2ZXJ0ZXhCdWZmZXJzPy5mb3JFYWNoPy4oKHZlcnRleEJ1ZmZlcjogVmVydGV4QnVmZmVyKSA9PiB2ZXJ0ZXhCdWZmZXI/LmJpbmQ/LihkZXZpY2UsIGN1cnJlbnRQYXNzRW5jb2RlcikpO1xyXG5cclxuXHRcdGluZGV4QnVmZmVyPy5iaW5kPy4oZGV2aWNlLCBjdXJyZW50UGFzc0VuY29kZXIpO1xyXG5cclxuXHRcdHNoYWRlclNvdXJjZT8uc2V0RGVmaW5lcz8uKGRlZmluZXMpO1xyXG5cclxuXHRcdGNvbnN0IHBpcGVsaW5lID0gUGlwZWxpbmUuZ2V0UmVuZGVyUGlwZWxpbmVGcm9tQ2FjaGUoZGV2aWNlLCB0aGlzLCBbXHJcblx0XHRcdHNoYWRlckRhdGE/Lmdyb3VwTGF5b3V0LFxyXG5cdFx0XHRsaWdodFNoYWRlckRhdGE/Lmdyb3VwTGF5b3V0LFxyXG5cdFx0XHRjYW1lcmE/LnNoYWRlckRhdGE/Lmdyb3VwTGF5b3V0XHJcblx0XHRdKTtcclxuXHRcdGlmIChxdWVyeUluZGV4ICE9IHVuZGVmaW5lZCkgcXVlcnlTZXQ/LmJlZ2luUXVlcnkoY3VycmVudFBhc3NFbmNvZGVyLCBxdWVyeUluZGV4KTtcclxuXHRcdHBpcGVsaW5lLmJpbmQoY3VycmVudFBhc3NFbmNvZGVyKTtcclxuXHRcdGlmIChpbmRleEJ1ZmZlcikge1xyXG5cdFx0XHRpZiAoaW5kaXJlY3RCdWZmZXIpIHtcclxuXHRcdFx0XHRjdXJyZW50UGFzc0VuY29kZXIuZHJhd0luZGV4ZWRJbmRpcmVjdChpbmRpcmVjdEJ1ZmZlci5ncHVCdWZmZXIsIGluZGlyZWN0T2Zmc2V0IHx8IDApO1xyXG5cdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdGN1cnJlbnRQYXNzRW5jb2Rlci5kcmF3SW5kZXhlZChjb3VudCB8fCAwLCBpbnN0YW5jZXMgfHwgMSwgMCwgMCwgMCk7XHJcblx0XHRcdH1cclxuXHRcdH0gZWxzZSBpZiAoY291bnQpIHtcclxuXHRcdFx0aWYgKGluZGlyZWN0QnVmZmVyKSB7XHJcblx0XHRcdFx0Y3VycmVudFBhc3NFbmNvZGVyLmRyYXdJbmRpcmVjdChpbmRpcmVjdEJ1ZmZlci5ncHVCdWZmZXIsIGluZGlyZWN0T2Zmc2V0KTtcclxuXHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHRjdXJyZW50UGFzc0VuY29kZXIuZHJhdyhjb3VudCwgaW5zdGFuY2VzIHx8IDEsIDAsIDApO1xyXG5cdFx0XHR9XHJcblx0XHR9XHJcblx0XHRpZiAocXVlcnlJbmRleCAhPSB1bmRlZmluZWQpIHF1ZXJ5U2V0Py5lbmRRdWVyeShjdXJyZW50UGFzc0VuY29kZXIpO1xyXG5cdFx0cmVuZGVyVGFyZ2V0Py5lbmRSZW5kZXJQYXNzPy4oKTtcclxuXHR9XHJcbn1cclxuZXhwb3J0IGRlZmF1bHQgRHJhd0NvbW1hbmQ7XHJcbnR5cGUgUmVuZGVyUGFyYW1zID0ge1xyXG5cdGNvbnRleHQ/OiBDb250ZXh0O1xyXG5cdGRldmljZT86IEdQVURldmljZTtcclxuXHRwYXNzRW5jb2Rlcj86IEdQVVJlbmRlclBhc3NFbmNvZGVyO1xyXG5cdGNhbWVyYT86IENhbWVyYTtcclxuXHRxdWVyeVNldD86IFF1ZXJ5U2V0O1xyXG5cdHZpZXdQb3J0PzogVmlld1BvcnQ7XHJcblx0c2Npc3NvclRlc3Q/OiBTY2lzc29yVGVzdDtcclxufTtcclxuIiwiaW1wb3J0IHsgTGlnaHQgfSBmcm9tIFwiLi4vbGlnaHQvTGlnaHRcIjtcclxuaW1wb3J0IHsgTWVzaCB9IGZyb20gXCIuLi9tZXNoL01lc2hcIjtcclxuaW1wb3J0IFBvc3RFZmZlY3QgZnJvbSBcIi4uL3Bvc3QtcHJvY2Vzcy9Qb3N0RWZmZWN0XCI7XHJcbmltcG9ydCBCaW5kR3JvdXBFbnRpdHkgZnJvbSBcIi4uL3JlbmRlci9CaW5kR3JvdXBFbnRpdHlcIjtcclxuaW1wb3J0IEJpbmRHcm91cExheW91dCBmcm9tIFwiLi4vcmVuZGVyL0JpbmRHcm91cExheW91dFwiO1xyXG5pbXBvcnQgQnVmZmVyIGZyb20gXCIuLi9yZW5kZXIvQnVmZmVyXCI7XHJcbmltcG9ydCBJbmRleEJ1ZmZlciBmcm9tIFwiLi4vcmVuZGVyL0luZGV4QnVmZmVyXCI7XHJcbmltcG9ydCB7IFJlbmRlclN0YXRlIH0gZnJvbSBcIi4uL3JlbmRlci9SZW5kZXJTdGF0ZVwiO1xyXG5pbXBvcnQgUmVuZGVyVGFyZ2V0IGZyb20gXCIuLi9yZW5kZXIvUmVuZGVyVGFyZ2V0XCI7XHJcbmltcG9ydCBTYW1wbGVyIGZyb20gXCIuLi9yZW5kZXIvU2FtcGxlclwiO1xyXG5pbXBvcnQgU2hhZGVyRGF0YSBmcm9tIFwiLi4vcmVuZGVyL1NoYWRlckRhdGFcIjtcclxuaW1wb3J0IFRleHR1cmUgZnJvbSBcIi4uL3JlbmRlci9UZXh0dXJlXCI7XHJcbmltcG9ydCBWZXJ0ZXhCdWZmZXIgZnJvbSBcIi4uL3JlbmRlci9WZXJ0ZXhCdWZmZXJcIjtcclxuaW1wb3J0IHsgU2hhZGVyU291cmNlIH0gZnJvbSBcIi4uL3NoYWRlci9TaGFkZXJTb3VyY2VcIjtcclxuaW1wb3J0IHtcclxuXHRCbGVuZEZhY3RvcixcclxuXHRCbGVuZE9wZXJhdGlvbixcclxuXHRDb2xvcldyaXRlRmxhZ3MsXHJcblx0Q29tcGFyZUZ1bmN0aW9uLFxyXG5cdEN1bGxNb2RlLFxyXG5cdEZyb250RmFjZSxcclxuXHRJbmRleEZvcm1hdCxcclxuXHRJbnB1dFN0ZXBNb2RlLFxyXG5cdFByaW1pdGl2ZVRvcG9sb2d5LFxyXG5cdFNoYWRlclN0YWdlLFxyXG5cdFN0ZW5jaWxPcGVyYXRpb24sXHJcblx0U3RvcmFnZVRleHR1cmVBY2Nlc3MsXHJcblx0VGV4dHVyZUZvcm1hdFxyXG59IGZyb20gXCIuL1dlYkdQVUNvbnN0YW50XCI7XHJcbmV4cG9ydCBjb25zdCBHUFVDYW52YXNDb21wb3NpdGluZ0FscGhhTW9kZToge1xyXG5cdFtrZXk6IHN0cmluZ106IEdQVUNhbnZhc0NvbXBvc2l0aW5nQWxwaGFNb2RlO1xyXG59ID0ge1xyXG5cdE9wYXF1ZTogXCJvcGFxdWVcIixcclxuXHRQcmVtdWx0aXBsaWVkOiBcInByZW11bHRpcGxpZWRcIlxyXG59O1xyXG5leHBvcnQgaW50ZXJmYWNlIENvbnRleHRTdGF0ZSB7XHJcblx0ZGV2aWNlOiBHUFVEZXZpY2U7XHJcblx0Z2xzbGFuZzoge1xyXG5cdFx0Y29tcGlsZUdMU0w6IChzb3VyY2U6IHN0cmluZywgdHlwZTogc3RyaW5nKSA9PiBzdHJpbmc7XHJcblx0fTtcclxuXHRkZWJ1ZzogYm9vbGVhbjtcclxuXHRlcnJvcjogYm9vbGVhbjtcclxufVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBDb250ZXh0T3B0aW9ucyB7XHJcblx0Y2FudmFzPzogSFRNTENhbnZhc0VsZW1lbnQ7XHJcblx0Y29udGFpbmVyPzogSFRNTERpdkVsZW1lbnQ7XHJcblx0Y29udGV4dD86IEdQVUNhbnZhc0NvbnRleHQ7XHJcblx0cGl4ZWxSYXRpbz86IG51bWJlcjtcclxuXHR1c2VHTFNMPzogYm9vbGVhbjtcclxufVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBMaWdodE1hbmdlck9wdGlvbnMge1xyXG5cdG9wZW5TaGFkb3c6IGJvb2xlYW47XHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgQmluZEdyb3VwTGF5b3V0RW50cnkgZXh0ZW5kcyBHUFVCaW5kR3JvdXBMYXlvdXRFbnRyeSB7XHJcblx0bmFtZTogc3RyaW5nO1xyXG5cdHVuaWZvcm1zPzogYW55W107XHJcblx0ZGltZW5zaW9uPzogR1BVVGV4dHVyZURpbWVuc2lvbjtcclxufVxyXG5cclxuZXhwb3J0IGludGVyZmFjZSBCaW5kR3JvdXBPcHRpb25zIGV4dGVuZHMgR1BVQmluZEdyb3VwRGVzY3JpcHRvciB7XHJcblx0cmVzb3VyY2VzOiBHUFVCaW5kaW5nUmVzb3VyY2VbXTtcclxufVxyXG5cclxuZXhwb3J0IHR5cGUgU2hhZGVyU3RhZ2VOYW1lID0gXCJ2ZXJ0ZXhcIiB8IFwiZnJhZ21lbnRcIiB8IFwiY29tcHV0ZVwiO1xyXG5cclxuZXhwb3J0IHR5cGUgU2hhZGVyU3RhZ2VOYW1lT2JqZWN0S2V5cyA9IHtcclxuXHRba2V5IGluIFNoYWRlclN0YWdlTmFtZV0/OiBzdHJpbmc7XHJcbn07XHJcbmV4cG9ydCB0eXBlIFNoYWRlclN0YWdlQm9keU5hbWUgPSBcInZlcnRleEJvZHlcIiB8IFwiZnJhZ21lbnRCb2R5XCIgfCBcImNvbXB1dGVCb2R5XCI7XHJcbmV4cG9ydCB0eXBlIFNoYWRlclN0YWdlQm9keU5hbWVPYmplY3RLZXlzID0ge1xyXG5cdFtrZXkgaW4gU2hhZGVyU3RhZ2VCb2R5TmFtZV0/OiBzdHJpbmc7XHJcbn07XHJcbmV4cG9ydCBpbnRlcmZhY2UgQXR0YWNobWVudE9wdGlvbnMge1xyXG5cdG9wPzogR1BVU3RvcmVPcDtcclxuXHR0ZXh0dXJlPzogVGV4dHVyZTtcclxuXHRyZXNvbHZlVGFyZ2V0PzogVGV4dHVyZTtcclxuXHRzdG9yZU9wPzogR1BVU3RvcmVPcDtcclxuXHR0ZXh0dXJlVmlldz86ICgpID0+IEdQVVRleHR1cmVWaWV3O1xyXG59XHJcblxyXG5leHBvcnQgdHlwZSBQYXNzVHlwZSA9IFwicmVuZGVyXCIgfCBcImNvbXB1dGVcIjtcclxuXHJcbmV4cG9ydCB0eXBlIEdQVUJpbmRpbmdUeXBlID1cclxuXHR8IEdQVUJ1ZmZlckJpbmRpbmdUeXBlXHJcblx0fCBHUFVTYW1wbGVyQmluZGluZ1R5cGVcclxuXHR8IEdQVVRleHR1cmVTYW1wbGVUeXBlXHJcblx0fCBHUFVTdG9yYWdlVGV4dHVyZUFjY2VzcztcclxuXHJcbmV4cG9ydCB0eXBlIEJpbmRHcm91cExheW91dEVudHJ5VHlwZSA9IHtcclxuXHRiaW5kaW5nOiBudW1iZXI7XHJcblx0dmlzaWJpbGl0eTogR1BVU2hhZGVyU3RhZ2VGbGFncztcclxuXHR1bmlmb3Jtcz86IGFueVtdO1xyXG5cdGJ1ZmZlcj86IEdQVUJ1ZmZlckJpbmRpbmdMYXlvdXQ7XHJcblx0c2FtcGxlcj86IEdQVVNhbXBsZXJCaW5kaW5nTGF5b3V0O1xyXG5cdHRleHR1cmU/OiBHUFVUZXh0dXJlQmluZGluZ0xheW91dDtcclxuXHRzdG9yYWdlVGV4dHVyZT86IEdQVVN0b3JhZ2VUZXh0dXJlQmluZGluZ0xheW91dDtcclxuXHRleHRlcm5hbFRleHR1cmU/OiBHUFVFeHRlcm5hbFRleHR1cmVCaW5kaW5nTGF5b3V0O1xyXG59O1xyXG5leHBvcnQgdHlwZSBCdWZmZXJSZXNvdXJjZVR5cGUgPSB7XHJcblx0YnVmZmVyOiBHUFVCdWZmZXJCaW5kaW5nVHlwZTtcclxuXHRvZmZzZXQ6IG51bWJlcjtcclxuXHRzaXplOiBudW1iZXI7XHJcbn07XHJcbmV4cG9ydCB0eXBlIHNhbXBsZXJCaW5kRW50aXR5UmVzb3VyY2VUeXBlID0ge1xyXG5cdHJlc291cmNlOiBHUFVTYW1wbGVyO1xyXG59O1xyXG5leHBvcnQgdHlwZSB0ZXh0dXJlQmluZEVudGl0eVJlc291cmNlVHlwZSA9IHtcclxuXHRyZXNvdXJjZTogR1BVVGV4dHVyZVZpZXc7XHJcbn07XHJcbmV4cG9ydCB0eXBlIEJpbmRHcm91cEVudGl0eVJlc291cmNlVHlwZSA9XHJcblx0fCBCdWZmZXJSZXNvdXJjZVR5cGVcclxuXHR8IHNhbXBsZXJCaW5kRW50aXR5UmVzb3VyY2VUeXBlXHJcblx0fCB0ZXh0dXJlQmluZEVudGl0eVJlc291cmNlVHlwZTtcclxuZXhwb3J0IHR5cGUgQmluZEdyb3VwRW50aXR5T3B0aW9ucyA9IHtcclxuXHRiaW5kaW5nOiBudW1iZXI7XHJcblx0cmVzb3VyY2U6IEdQVUJpbmRpbmdSZXNvdXJjZTtcclxufTtcclxuZXhwb3J0IHR5cGUgQmluZEdyb3VwQ2FjaGVPcHRpb25zID0ge1xyXG5cdGRldmljZTogR1BVRGV2aWNlO1xyXG5cdGxhYmVsOiBzdHJpbmc7XHJcblx0bGF5b3V0OiBCaW5kR3JvdXBMYXlvdXQ7XHJcblx0ZW50aXJlczogQmluZEdyb3VwRW50aXR5W107XHJcblx0aW5kZXg/OiBudW1iZXI7XHJcblx0b2Zmc2V0PzogbnVtYmVyO1xyXG5cdGFsaWduZWRTaXplPzogbnVtYmVyO1xyXG5cdG1heE9mZnNldD86IG51bWJlcjtcclxuXHRkeW5hbWljPzogYm9vbGVhbjtcclxufTtcclxuZXhwb3J0IHR5cGUgSW1hZ2VEYXRhID0ge1xyXG5cdHNvdXJjZTogSW1hZ2VCaXRtYXAgfCBIVE1MQ2FudmFzRWxlbWVudCB8IFRleHR1cmU7XHJcblx0d2lkdGg/OiBudW1iZXI7XHJcblx0aGVpZ2h0PzogbnVtYmVyO1xyXG5cdGRlcHRoPzogbnVtYmVyO1xyXG5cdHNvdXJjZVg/OiBudW1iZXI7XHJcblx0c291cmNlWT86IG51bWJlcjtcclxuXHRtaXBMZXZlbD86IG51bWJlcjtcclxuXHR4PzogbnVtYmVyO1xyXG5cdHk/OiBudW1iZXI7XHJcblx0ej86IG51bWJlcjtcclxuXHRhc3BlY3Q/OiBcImFsbFwiIHwgXCJzdGVuY2lsLW9ubHlcIiB8IFwiZGVwdGgtb25seVwiO1xyXG5cdGNvbG9yU3BhY2U/OiBcInNyZ2JcIjtcclxuXHRwcmVtdWx0aXBsaWVkQWxwaGE/OiBib29sZWFuO1xyXG59O1xyXG5leHBvcnQgdHlwZSBXZWJHUFVUZXh0dXJlUHJvcHMgPSB7XHJcblx0c2l6ZTogdGV4dHVyZVNpemU7XHJcblxyXG5cdGZpeGVkU2l6ZT86IGJvb2xlYW47XHJcblxyXG5cdGZvcm1hdDogc3RyaW5nO1xyXG5cclxuXHRsYWJlbD86IHN0cmluZztcclxuXHJcblx0dXNhZ2U/OiBudW1iZXI7XHJcblxyXG5cdHNhbXBsZXI/OiBTYW1wbGVyO1xyXG5cclxuXHRkYXRhPzogSW1hZ2VEYXRhIHwgQXJyYXk8SW1hZ2VEYXRhPjtcclxuXHJcblx0bWlwTGV2ZWxDb3VudD86IG51bWJlcjtcclxuXHJcblx0c2FtcGxlQ291bnQ/OiBudW1iZXI7XHJcblxyXG5cdGRpbWVuc2lvbj86IGRpbWVuc2lvbjtcclxuXHJcblx0dmlld0Zvcm1hdHM/OiBzdHJpbmc7XHJcblxyXG5cdHNhbXBsZVR5cGU/OiBzdHJpbmc7XHJcblxyXG5cdG5lZWRNaXBNYXA/OiBib29sZWFuO1xyXG5cclxuXHRkYXRhSXNUZXh0dXJlPzogYm9vbGVhbjtcclxuXHJcblx0YWNjZXNzPzogU3RvcmFnZVRleHR1cmVBY2Nlc3M7XHJcbn07XHJcbmV4cG9ydCB0eXBlIHRleHR1cmVTaXplID0ge1xyXG5cdHdpZHRoOiBudW1iZXI7XHJcblx0aGVpZ2h0OiBudW1iZXI7XHJcblx0ZGVwdGg6IG51bWJlcjtcclxufTtcclxuZXhwb3J0IHR5cGUgZGltZW5zaW9uID0gXCIxZFwiIHwgXCIyZFwiIHwgXCIzZFwiO1xyXG5leHBvcnQgdHlwZSBidWZmZXJMYXlvdXRUeXBlID0ge1xyXG5cdHR5cGU6IHN0cmluZzsgLy8gXCJ1bmlmb3JtXCJcclxuXHRoYXNEeW5hbWljT2Zmc2V0PzogYm9vbGVhbjtcclxuXHRtaW5CaW5kaW5nU2l6ZT86IG51bWJlcjtcclxufTtcclxuLy8gcmVuZGVyc3RhdGVcclxuZXhwb3J0IHR5cGUgRGVwdGhTdGVuY2lsID0ge1xyXG5cdGZvcm1hdDogVGV4dHVyZUZvcm1hdDtcclxuXHRkZXB0aFdyaXRlRW5hYmxlZDogYm9vbGVhbjtcclxuXHRkZXB0aENvbXBhcmU6IENvbXBhcmVGdW5jdGlvbjtcclxuXHRzdGVuY2lsUmVhZE1hc2s/OiBudW1iZXI7XHJcblx0c3RlbmNpbFdyaXRlTWFzaz86IG51bWJlcjtcclxuXHRzdGVuY2lsRnJvbnQ/OiB7XHJcblx0XHRjb21wYXJlOiBDb21wYXJlRnVuY3Rpb247XHJcblx0XHRmYWlsT3A6IFN0ZW5jaWxPcGVyYXRpb247XHJcblx0XHRkZXB0aEZhaWxPcDogU3RlbmNpbE9wZXJhdGlvbjtcclxuXHRcdHBhc3NPcDogU3RlbmNpbE9wZXJhdGlvbjtcclxuXHR9O1xyXG5cdHN0ZW5jaWxCYWNrPzoge1xyXG5cdFx0Y29tcGFyZTogQ29tcGFyZUZ1bmN0aW9uO1xyXG5cdFx0ZmFpbE9wOiBTdGVuY2lsT3BlcmF0aW9uO1xyXG5cdFx0ZGVwdGhGYWlsT3A6IFN0ZW5jaWxPcGVyYXRpb247XHJcblx0XHRwYXNzT3A6IFN0ZW5jaWxPcGVyYXRpb247XHJcblx0fTtcclxuXHRkZXB0aEJpYXM/OiBudW1iZXI7XHJcblx0ZGVwdGhCaWFzU2xvcGVTY2FsZT86IG51bWJlcjtcclxuXHRkZXB0aEJpYXNDbGFtcD86IG51bWJlcjtcclxufTtcclxuZXhwb3J0IHR5cGUgUHJpbWl0aXZlU3RhdGUgPSB7XHJcblx0ZnJvbnRGYWNlPzogRnJvbnRGYWNlO1xyXG5cdGN1bGxNb2RlPzogQ3VsbE1vZGU7XHJcblx0dW5jbGlwcGVkRGVwdGg/OiBib29sZWFuO1xyXG5cdHRvcG9sb2d5PzogUHJpbWl0aXZlVG9wb2xvZ3k7XHJcblx0c3RyaXBJbmRleEZvcm1hdD86IEluZGV4Rm9ybWF0O1xyXG59O1xyXG5leHBvcnQgdHlwZSBNdWx0aVNhbXBsZSA9IHtcclxuXHRjb3VudD86IG51bWJlcjtcclxuXHRtYXNrPzogbnVtYmVyO1xyXG5cdGFscGhhVG9Db3ZlcmFnZUVuYWJsZWQ/OiBib29sZWFuO1xyXG59O1xyXG5leHBvcnQgdHlwZSBUYXJnZXQgPSB7XHJcblx0Zm9ybWF0OiBUZXh0dXJlRm9ybWF0O1xyXG5cdGJsZW5kPzoge1xyXG5cdFx0Y29sb3I6IHtcclxuXHRcdFx0b3BlcmF0aW9uOiBCbGVuZE9wZXJhdGlvbjtcclxuXHRcdFx0c3JjRmFjdG9yOiBCbGVuZEZhY3RvcjtcclxuXHRcdFx0ZHN0RmFjdG9yOiBCbGVuZEZhY3RvcjtcclxuXHRcdH07XHJcblx0XHRhbHBoYToge1xyXG5cdFx0XHRvcGVyYXRpb246IEJsZW5kT3BlcmF0aW9uO1xyXG5cdFx0XHRzcmNGYWN0b3I6IEJsZW5kRmFjdG9yO1xyXG5cdFx0XHRkc3RGYWN0b3I6IEJsZW5kRmFjdG9yO1xyXG5cdFx0fTtcclxuXHR9O1xyXG5cdHdyaXRlTWFzazogQ29sb3JXcml0ZUZsYWdzO1xyXG59O1xyXG5leHBvcnQgdHlwZSBCbGVuZENvbnN0YW50ID0ge1xyXG5cdHI6IG51bWJlcjtcclxuXHRnOiBudW1iZXI7XHJcblx0YjogbnVtYmVyO1xyXG5cdGE6IG51bWJlcjtcclxufTtcclxuZXhwb3J0IHR5cGUgUmVuZGVyU3RhdGVQcm9wcyA9IHtcclxuXHRkZXB0aFN0ZW5jaWw/OiBEZXB0aFN0ZW5jaWw7XHJcblx0cHJpbWl0aXZlPzogUHJpbWl0aXZlU3RhdGU7XHJcblx0bXVsdGlzYW1wbGU/OiBNdWx0aVNhbXBsZTtcclxuXHRzdGVuY2lsUmVmZXJlbmNlPzogbnVtYmVyO1xyXG5cdHRhcmdldHM/OiBBcnJheTxUYXJnZXQ+O1xyXG5cdHZpZXdwb3J0PzogeyB4OiBudW1iZXI7IHk6IG51bWJlcjsgd2lkdGg6IG51bWJlcjsgaGVpZ2h0OiBudW1iZXIgfTtcclxuXHRibGVuZENvbnN0YW50PzogQmxlbmRDb25zdGFudDtcclxuXHRzY2lzc29yVGVzdEVuYWJsZWQ/OiBib29sZWFuO1xyXG5cdHN0ZW5jaWxFbmFibGVkPzogYm9vbGVhbjtcclxufTtcclxuZXhwb3J0IHR5cGUgVmlld1BvcnQgPSB7XHJcblx0eD86IG51bWJlcjtcclxuXHR5PzogbnVtYmVyO1xyXG5cdHdpZHRoPzogbnVtYmVyO1xyXG5cdGhlaWdodD86IG51bWJlcjtcclxuXHRtaW5EZXB0aD86IG51bWJlcjtcclxuXHRtYXhEZXB0aD86IG51bWJlcjtcclxufTtcclxuZXhwb3J0IHR5cGUgU2Npc3NvclRlc3QgPSB7XHJcblx0eDogbnVtYmVyO1xyXG5cdHk6IG51bWJlcjtcclxuXHR3aWR0aDogbnVtYmVyO1xyXG5cdGhlaWdodDogbnVtYmVyO1xyXG59O1xyXG5leHBvcnQgdHlwZSBTaGFkZXJNYXRlcmlhbFBhcm1zID0ge1xyXG5cdHR5cGU6IHN0cmluZztcclxuXHRmcmFnOiBzdHJpbmcgfCBTaGFkZXJGdW5jO1xyXG5cdHZlcnQ6IHN0cmluZyB8IFNoYWRlckZ1bmM7XHJcblx0dW5pZm9ybXM6IHsgW3VuaWZvcm06IHN0cmluZ106IElVbmlmb3JtIH07XHJcblx0ZGVmaW5lcz86IFNoYWRlckRlZmluZTtcclxuXHRsaWdodD86IGJvb2xlYW47XHJcbn07XHJcbmV4cG9ydCBpbnRlcmZhY2UgSVVuaWZvcm08VFZhbHVlID0gYW55PiB7XHJcblx0dHlwZTogc3RyaW5nO1xyXG5cdHZhbHVlOiBUVmFsdWU7XHJcblx0YmluZGluZz86IG51bWJlcjtcclxuXHR2aXNpYmlsaXR5PzogbnVtYmVyO1xyXG5cdHRleHR1cmVWaWV3PzogR1BVVGV4dHVyZVZpZXc7XHJcbn1cclxuZXhwb3J0IHR5cGUgVW5pZm9ybXMgPSB7IFt1bmlmb3JtOiBzdHJpbmddOiBJVW5pZm9ybSB9O1xyXG5leHBvcnQgdHlwZSBJbnN0YW5jZSA9IE1lc2ggfCBQb3N0RWZmZWN0IHwgTGlnaHQ7XHJcblxyXG5leHBvcnQgZW51bSBSZW5kZXJPYmplY3RUeXBlIHtcclxuXHRDYW1lcmEgPSBcImNhbWVyYVwiLFxyXG5cdExpZ2h0ID0gXCJsaWdodFwiLFxyXG5cdE1lc2ggPSBcIm1lc2hcIixcclxuXHRTa2luTWVzaCA9IFwic2tpbk1lc2hcIixcclxuXHROb2RlID0gXCJub2RlXCIsXHJcblx0QXhlcyA9IFwiYXhlc1wiLFxyXG5cdFNreWJveCA9IFwic2t5Qm94XCIsXHJcblx0UG9zdEVmZmVjdCA9IFwicG9zdEVmZmVjdFwiLFxyXG5cdERlYnVnID0gXCJkZWJ1Z1wiXHJcbn1cclxuZXhwb3J0IGVudW0gTGlnaHRUeXBlIHtcclxuXHRTcG90TGlnaHQgPSBcInNwb3RMaWdodFwiLFxyXG5cdFBvaW50TGlnaHQgPSBcInBvaW50TGlnaHRcIixcclxuXHRBbWJpZW50TGlnaHQgPSBcImFtYmllbnRMaWdodFwiLFxyXG5cdERpcmVjdGlvbmFsTGlnaHQgPSBcImRpcmVjdGlvbmFsTGlnaHRcIlxyXG59XHJcbmV4cG9ydCB0eXBlIFNoYWRlckRlZmluZSA9IHsgW3Byb3A6IHN0cmluZ106IGJvb2xlYW4gfCBudW1iZXIgfTtcclxuXHJcbmV4cG9ydCB0eXBlIFNoYWRlclNvdXJjZVBhcmFtcyA9IHtcclxuXHRzaGFkZXJJZD86IHN0cmluZztcclxuXHRkZWZpbmVzPzogU2hhZGVyRGVmaW5lO1xyXG5cdGNvbXB1dGU/OiBjb21wdXRlUGFyYW1zO1xyXG5cdHJlbmRlcj86IHJlbmRlclBhcmFtcztcclxuXHRsYW5ndWFnZT86IFNoYWRlckxhbmd1YWdlO1xyXG59O1xyXG5leHBvcnQgdHlwZSByZW5kZXJQYXJhbXMgPSB7XHJcblx0dmVydE1haW4/OiBzdHJpbmc7XHJcblx0ZnJhZ01haW4/OiBzdHJpbmc7XHJcblx0ZnJhZ1NoYWRlcj86IHN0cmluZyB8IFNoYWRlckZ1bmM7XHJcblx0dmVydFNoYWRlcj86IHN0cmluZyB8IFNoYWRlckZ1bmM7XHJcbn07XHJcbmV4cG9ydCB0eXBlIGNvbXB1dGVQYXJhbXMgPSB7XHJcblx0Y29tcHV0ZU1haW4/OiBzdHJpbmc7XHJcblx0Y29tcHV0ZVNoYWRlcj86IHN0cmluZyB8IFNoYWRlckZ1bmM7XHJcbn07XHJcbmV4cG9ydCBpbnRlcmZhY2UgR1BVU2hhZGVyTW9kdWxlT2JqZWN0IHtcclxuXHR2ZXJ0OiBHUFVTaGFkZXJNb2R1bGU7XHJcblx0ZnJhZzogR1BVU2hhZGVyTW9kdWxlO1xyXG59XHJcbmV4cG9ydCB0eXBlIFNoYWRlckZ1bmMgPSAoZGVmaW5lcz86IFNoYWRlckRlZmluZSkgPT4gc3RyaW5nO1xyXG5leHBvcnQgdHlwZSBTaGFkZXJTdHJpbmcgPSB7XHJcblx0dmVydD86IHN0cmluZztcclxuXHRmcmFnPzogc3RyaW5nO1xyXG5cdGNvbXB1dGU/OiBzdHJpbmc7XHJcbn07XHJcbmV4cG9ydCB0eXBlIFNoYWRlck1vZHVsZSA9IHtcclxuXHR2ZXJ0PzogR1BVU2hhZGVyTW9kdWxlO1xyXG5cdGZyYWc/OiBHUFVTaGFkZXJNb2R1bGU7XHJcblx0Y29tcHV0ZT86IEdQVVNoYWRlck1vZHVsZTtcclxufTtcclxuZXhwb3J0IHR5cGUgVW5pZm9ybUZ1bmMgPSAoKSA9PiBhbnk7XHJcblxyXG5leHBvcnQgdHlwZSBEcmF3Q29tbWFuZFBhcmFtcyA9IHtcclxuXHRzaGFkZXJEYXRhPzogU2hhZGVyRGF0YTtcclxuXHJcblx0cmVuZGVyVGFyZ2V0PzogUmVuZGVyVGFyZ2V0O1xyXG5cclxuXHR2ZXJ0ZXhCdWZmZXJzPzogQXJyYXk8VmVydGV4QnVmZmVyPjtcclxuXHJcblx0aW5kZXhCdWZmZXI/OiBJbmRleEJ1ZmZlcjtcclxuXHJcblx0cmVuZGVyU3RhdGU/OiBSZW5kZXJTdGF0ZTtcclxuXHJcblx0cXVlcnlJbmRleD86IG51bWJlcjtcclxuXHJcblx0Y291bnQ/OiBudW1iZXI7XHJcblxyXG5cdGluc3RhbmNlcz86IG51bWJlcjtcclxuXHJcblx0c2hhZGVyU291cmNlPzogU2hhZGVyU291cmNlO1xyXG5cclxuXHRkaXJ0eT86IGJvb2xlYW47XHJcblxyXG5cdGxpZ2h0U2hhZGVyRGF0YT86IFNoYWRlckRhdGE7XHJcblxyXG5cdHVzZUxpZ2h0PzogYm9vbGVhbjtcclxufTtcclxuXHJcbmV4cG9ydCB0eXBlIE1vZGVsUGFyYW1zID0ge1xyXG5cdHNoYWRlcklkPzogc3RyaW5nO1xyXG5cdGZyYWc/OiBzdHJpbmc7XHJcblx0dmVydD86IHN0cmluZztcclxuXHRjb21wdXRlPzogc3RyaW5nO1xyXG5cdHZlcnRleEJ1ZmZlcnM/OiBBcnJheTxWZXJ0ZXhCdWZmZXJQcm9wPjtcclxuXHR1bmlmb3JtVGV4dHVyZUFuZFNhbXBsZXI/OiB7XHJcblx0XHRbdW5pZm9ybTogc3RyaW5nXTogSVVuaWZvcm08YW55PjtcclxuXHR9O1xyXG5cdHVuaWZvcm1CdWZmZXJzPzogQXJyYXk8VW5pZm9ybUJ1ZmZlclByb3A+O1xyXG5cdHJlbmRlclN0YXRlPzogUmVuZGVyU3RhdGVQcm9wO1xyXG5cdGNvdW50PzogbnVtYmVyO1xyXG5cdGluc3RhbmNlcz86IG51bWJlcjtcclxuXHRpbmRpY2VzPzogQXJyYXk8bnVtYmVyPjtcclxuXHRkcmF3PzogRHJhd1Bhcm1hcztcclxuXHRkaXNwYXRjaD86IHsgeD86IG51bWJlcjsgeT86IG51bWJlcjsgej86IG51bWJlciB9O1xyXG5cdHJlbmRlclRhcmdldD86IFJlbmRlclRhcmdldDtcclxufTtcclxuZXhwb3J0IHR5cGUgVmVydGV4QnVmZmVyUHJvcCA9IHtcclxuXHR1aWQ/OiBzdHJpbmc7XHJcblx0c3RlcE1vZGU/OiBzdHJpbmc7XHJcblx0YXJyYXlTdHJpZGU/OiBudW1iZXI7XHJcblx0YXR0cmlidXRlcz86IHsgW3Byb3A6IHN0cmluZ106IEF0dHJpYnV0ZVByb3AgfTtcclxufTtcclxuZXhwb3J0IHR5cGUgVW5pZm9ybUJ1ZmZlclByb3AgPSB7XHJcblx0dWlkPzogc3RyaW5nO1xyXG5cdHR5cGU/OiBzdHJpbmc7XHJcblx0dXNhZ2U/OiBudW1iZXI7XHJcblx0YmluZGluZz86IG51bWJlcjtcclxuXHRidWZmZXI/OiBCdWZmZXI7XHJcblx0YnVmZmVyU2l6ZT86IG51bWJlcjtcclxuXHR2aXNpYmxpdHk/OiBTaGFkZXJTdGFnZTtcclxuXHR1bmlmb3Jtcz86IHsgW3VuaWZvcm06IHN0cmluZ106IElVbmlmb3JtPGFueT4gfTtcclxufTtcclxuZXhwb3J0IHR5cGUgQXR0cmlidXRlUHJvcCA9IHtcclxuXHRzaXplPzogbnVtYmVyO1xyXG5cdHZhbHVlPzogW107XHJcblx0bmFtZXM/OiBBcnJheTxzdHJpbmc+O1xyXG5cdGl0ZW1TaXplcz86IFtdO1xyXG5cdGJ1ZmZlcj86IEJ1ZmZlcjtcclxufTtcclxuZXhwb3J0IHR5cGUgUmVuZGVyU3RhdGVQcm9wID0ge1xyXG5cdHN0ZW5jaWxSZWZlcmVuY2U6IG51bWJlcjtcclxuXHRibGVuZENvbnN0YW50Pzoge1xyXG5cdFx0cjogbnVtYmVyO1xyXG5cdFx0ZzogbnVtYmVyO1xyXG5cdFx0YjogbnVtYmVyO1xyXG5cdFx0YTogbnVtYmVyO1xyXG5cdH07XHJcblx0bXVsdGlTYW1wbGU/OiB7XHJcblx0XHRjb3VudDogbnVtYmVyO1xyXG5cdFx0bWFzazogbnVtYmVyO1xyXG5cdFx0YWxwaGFUb0NvdmVyYWdlRW5hYmxlZDogYm9vbGVhbjtcclxuXHR9O1xyXG5cdHNjaXNzb3JUZXN0Pzoge1xyXG5cdFx0eDogbnVtYmVyO1xyXG5cdFx0eTogbnVtYmVyO1xyXG5cdFx0d2lkdGg6IG51bWJlcjtcclxuXHRcdGhlaWdodDogbnVtYmVyO1xyXG5cdH07XHJcblx0dmlld1BvcnQ/OiB7XHJcblx0XHR4OiBudW1iZXI7XHJcblx0XHR5OiBudW1iZXI7XHJcblx0XHR3aWR0aDogbnVtYmVyO1xyXG5cdFx0aGVpZ2h0OiBudW1iZXI7XHJcblx0XHRtaW5EZXB0aDogbnVtYmVyO1xyXG5cdFx0bWF4RGVwdGg6IG51bWJlcjtcclxuXHR9O1xyXG5cdHByaW1pdGl2ZT86IHtcclxuXHRcdGZyb250RmFjZTogc3RyaW5nO1xyXG5cdFx0Y3VsbE1vZGU6IHN0cmluZztcclxuXHRcdHVuY2xpcHBlZERlcHRoOiBib29sZWFuO1xyXG5cdFx0dG9wb2xvZ3k6IHN0cmluZztcclxuXHR9O1xyXG5cdGRlcHRoU3RlbmNpbD86IHtcclxuXHRcdGZvcm1hdDogc3RyaW5nO1xyXG5cdFx0ZGVwdGhXcml0ZUVuYWJsZWQ6IGJvb2xlYW47XHJcblx0XHRkZXB0aENvbXBhcmU6IHN0cmluZztcclxuXHRcdHN0ZW5jaWxSZWFkTWFzazogbnVtYmVyO1xyXG5cdFx0c3RlbmNpbFdyaXRlTWFzazogbnVtYmVyO1xyXG5cdFx0c3RlbmNpbEZyb250Q29tcGFyZTogc3RyaW5nO1xyXG5cdFx0c3RlbmNpbEZyb250RmFpbE9wOiBzdHJpbmc7XHJcblx0XHRzdGVuY2lsRnJvbnREZXB0aEZhaWxPcDogc3RyaW5nO1xyXG5cdFx0c3RlbmNpbEZyb250UGFzc09wOiBzdHJpbmc7XHJcblxyXG5cdFx0c3RlbmNpbEJhY2tDb21wYXJlOiBzdHJpbmc7XHJcblx0XHRzdGVuY2lsQmFja0ZhaWxPcDogc3RyaW5nO1xyXG5cdFx0c3RlbmNpbEJhY2tEZXB0aEZhaWxPcDogc3RyaW5nO1xyXG5cdFx0c3RlbmNpbEJhY2tQYXNzT3A6IHN0cmluZztcclxuXHRcdGRlcHRoQmlhczogbnVtYmVyO1xyXG5cdFx0ZGVwdGhCaWFzU2xvcGVTY2FsZTogbnVtYmVyO1xyXG5cdFx0ZGVwdGhCaWFzQ2xhbXA6IG51bWJlcjtcclxuXHR9O1xyXG5cdHRhcmdldHM/OiBBcnJheTx7XHJcblx0XHRmb3JtYXQ/OiBzdHJpbmc7XHJcblx0XHRibGVuZENvbG9yT3BlcmF0aW9uPzogc3RyaW5nO1xyXG5cdFx0YmxlbmRDb2xvclNyY0ZhY3Rvcj86IHN0cmluZztcclxuXHRcdGJsZW5kQ29sb3JEc3RGYWN0b3I/OiBzdHJpbmc7XHJcblx0XHRibGVuZEFscGhhT3BlcmF0aW9uPzogc3RyaW5nO1xyXG5cdFx0YmxlbmRBbHBoYVNyY0ZhY3Rvcj86IHN0cmluZztcclxuXHRcdGJsZW5kQWxwaGFEc3RGYWN0b3I/OiBzdHJpbmc7XHJcblx0XHR3cml0ZU1hc2s6IEdQVUNvbG9yV3JpdGU7XHJcblx0fT47XHJcbn07XHJcbmV4cG9ydCB0eXBlIERyYXdQYXJtYXMgPSB7XHJcblx0Y291bnQ/OiBudW1iZXI7IC8vIFRoZSBudW1iZXIgb2YgaW5kaWNlcyB0byBkcmF3Li9UaGUgbnVtYmVyIG9mIHZlcnRpY2VzIHRvIGRyYXcuXHJcblx0aW5zdGFuY2VDb3VudD86IG51bWJlcjsgLy8gVGhlIG51bWJlciBvZiBpbnN0YW5jZXMgdG8gZHJhdy5cclxuXHRmaXJzdEluZGV4PzogbnVtYmVyOyAvLyBPZmZzZXQgaW50byB0aGUgaW5kZXggYnVmZmVyLCBpbiBpbmRpY2VzLCBiZWdpbiBkcmF3aW5nXHJcblx0Zmlyc3RWZXJ0ZXg/OiBudW1iZXI7IC8vIE9mZnNldCBpbnRvIHRoZSB2ZXJ0ZXggYnVmZmVycywgaW4gdmVydGljZXMsIHRvIGJlZ2luIGRyYXdpbmcgZnJvbS5cclxuXHRiYXNlVmVydGV4PzogbnVtYmVyOyAvLyAgQWRkZWQgdG8gZWFjaCBpbmRleCB2YWx1ZSBiZWZvcmUgaW5kZXhpbmcgaW50byB0aGUgdmVydGV4IGJ1ZmZlcnMuXHJcblx0Zmlyc3RJbnN0YW5jZT86IG51bWJlcjsgLy8gRmlyc3QgaW5zdGFuY2UgdG8gZHJhdy5cclxufTtcclxuZXhwb3J0IHR5cGUgVW5pZm9ybVN0cnVjdCA9IHtcclxuXHRbdW5pZm9ybTogc3RyaW5nXTogeyB0eXBlPzogc3RyaW5nOyB2YWx1ZT86IG9iamVjdCB8IEFycmF5PG51bWJlcj47IG9mZnNldD86IG51bWJlciB9O1xyXG59O1xyXG5leHBvcnQgZW51bSBVbmlmb3JtRW51bSB7XHJcblx0RmxvYXQgPSBcImYzMlwiLFxyXG5cdEZsb2F0VmVjMiA9IFwidmVjMjxmMzI+XCIsXHJcblx0RmxvYXRWZWMzID0gXCJ2ZWMzPGYzMj5cIixcclxuXHRGbG9hdFZlYzQgPSBcInZlYzQ8ZjMyPlwiLFxyXG5cdEZsb2F0QXJyYXkgPSBcImFycmF5PGYzMj5cIixcclxuXHRNYXQyID0gXCJtYXQyeDI8ZjMyPlwiLFxyXG5cdE1hdDMgPSBcIm1hdDN4MzxmMzI+XCIsXHJcblx0TWF0NCA9IFwibWF0NHg0PGYzMj5cIixcclxuXHRDb2xvciA9IFwiY29sb3JcIixcclxuXHRNYXQ0QXJyYXkgPSBcImFycmF5PG1hdDR4NDxmMzI+PlwiLFxyXG5cdFZlYzJBcnJheSA9IFwiYXJyYXk8dmVjMjxmMzI+PlwiLFxyXG5cdFZlYzNBcnJheSA9IFwiYXJyYXk8dmVjMzxmMzI+PlwiLFxyXG5cdFZlYzRBcnJheSA9IFwiYXJyYXk8dmVjNDxmMzI+PlwiLFxyXG5cdFVuaWZvcm1VaW50ID0gXCJ1MzJcIixcclxuXHRQb2ludExpZ2h0cyA9IFwicG9pbnRMaWdodHNcIixcclxuXHRQb2ludExpZ2h0U2hhZG93cyA9IFwicG9pbnRMaWdodFNoYWRvd3NcIixcclxuXHRTcG90TGlnaHRzID0gXCJzcG90TGlnaHRzXCIsXHJcblx0U3BvdExpZ2h0U2hhZG93cyA9IFwic3BvdExpZ2h0U2hhZG93c1wiLFxyXG5cdERpcnRlY3RMaWdodHMgPSBcImRpcnRlY3RMaWdodHNcIixcclxuXHREaXJ0ZWN0TGlnaHRTaGFkb3dzID0gXCJkaXJ0ZWN0TGlnaHRTaGFkb3dzXCIsXHJcblx0VW5pZm9ybVN0cnVjdEFycmF5ID0gXCJTdHJ1Y3RBcnJheVwiXHJcbn1cclxuZXhwb3J0IHR5cGUgVmVydGV4QnVmZmVyUGFyYW1zID0ge1xyXG5cdGxhYmVsOiBzdHJpbmc7XHJcblx0aW5kZXg/OiBudW1iZXI7XHJcblx0bG9jYXRpb25JbmRleD86IG51bWJlcjtcclxuXHRzdGVwTW9kZT86IElucHV0U3RlcE1vZGU7XHJcblx0YXJyYXlTdHJpZGU/OiBudW1iZXI7XHJcbn07XHJcbmV4cG9ydCBlbnVtIFNoYWRlckxhbmd1YWdlIHtcclxuXHRXR1NMID0gXCJ3Z3NsXCIsXHJcblx0R0xTTCA9IFwiZ2xzbFwiXHJcbn1cclxuZXhwb3J0IGVudW0gU2hhZGVyTWFpblN0YWdlIHtcclxuXHRWRVJUID0gXCJ2ZXJ0ZXhcIixcclxuXHRGUkFHID0gXCJmcmFnbWVudFwiLFxyXG5cdENPTVBVVEUgPSBcImNvbXB1dGVcIlxyXG59XHJcbiIsIi8vIGltcG9ydCBDb2xvciBmcm9tIFwiLi4vLi4vbWF0aC9Db2xvclwiO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gY29sb3JGcmFnKGRlZmluZXMpIHtcclxuICByZXR1cm4gYFxyXG4gICAgc3RydWN0IFZlcnRleE91dHB1dCB7XHJcbiAgICAgICAgQGJ1aWx0aW4ocG9zaXRpb24pIHBvc2l0aW9uOiB2ZWM0PGYzMj4sXHJcbiAgICAgICAgQGxvY2F0aW9uKDApIGNvbG9yOiB2ZWM0PGYzMj4sXHJcbiAgICB9O1xyXG4gICAgQGZyYWdtZW50XHJcbiAgICBmbiBtYWluKGlucHV0OlZlcnRleE91dHB1dCkgLT4gQGxvY2F0aW9uKDApIHZlYzQ8ZjMyPiB7XHJcbiAgICAgIHJldHVybiBpbnB1dC5jb2xvcjtcclxuICAgIH1cclxuICAgIGA7XHJcbn1cclxuIiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gY29sb3JWZXJ0KGRlZmluZXMpIHtcblx0cmV0dXJuIGBcbiAgIHN0cnVjdCBWZXJ0ZXhJbnB1dCB7XG4gICAgICAgIEBsb2NhdGlvbigke2RlZmluZXMucG9zaXRpb25Mb2NhdGlvbn0pIHBvc2l0aW9uOiB2ZWMzPGYzMj4sICAgICAgIFxuICAgICAgICBAbG9jYXRpb24oJHtkZWZpbmVzLmNvbG9yTG9jYXRpb259KSBjb2xvcjogdmVjNDxmMzI+LFxuICAgfVxuICAgc3RydWN0IFZlcnRleE91dHB1dCB7XG4gICAgICAgIEBidWlsdGluKHBvc2l0aW9uKSBwb3NpdGlvbjogdmVjNDxmMzI+LFxuICAgICAgICBAbG9jYXRpb24oMCkgY29sb3I6IHZlYzQ8ZjMyPixcbiAgICB9O1xuICAgc3RydWN0IFNlbGZVbmlmb3JtIHtcbiAgICAgIG1vZGVsTWF0cml4OiBtYXQ0eDQ8ZjMyPixcbiAgIH1cbiAgIHN0cnVjdCBTeXN0ZW1Vbmlmb3JtIHtcbiAgICAgIHByb2plY3Rpb25NYXRyaXg6IG1hdDR4NDxmMzI+LFxuICAgICAgdmlld01hdHJpeDogbWF0NHg0PGYzMj4sXG4gICAgICBpbnZlcnNlVmlld01hdHJpeDogbWF0NHg0PGYzMj4sXG4gICAgICBjYW1lcmFQb3NpdGlvbjogdmVjMzxmMzI+LFxuICAgfTsgXG4gICBAYmluZGluZygke2RlZmluZXMuY29sb3JCaW5kaW5nfSkgQGdyb3VwKDApIHZhcjx1bmlmb3JtPiBzZWxmVW5pZm9ybSA6IFNlbGZVbmlmb3JtO1xuICAgQGJpbmRpbmcoJHtkZWZpbmVzLmNhbWVyYUJpbmRpbmd9KSBAZ3JvdXAoMSkgdmFyPHVuaWZvcm0+IHN5c3RlbVVuaWZvcm0gOiBTeXN0ZW1Vbmlmb3JtO1xuICAgQHZlcnRleFxuICAgZm4gbWFpbihpbnB1dDogVmVydGV4SW5wdXQpIC0+IFZlcnRleE91dHB1dCB7XG4gICAgdmFyIG91dHB1dDpWZXJ0ZXhPdXRwdXQ7XG4gICAgb3V0cHV0LmNvbG9yPWlucHV0LmNvbG9yO1xuICAgIG91dHB1dC5wb3NpdGlvbiA9IHN5c3RlbVVuaWZvcm0ucHJvamVjdGlvbk1hdHJpeCAqIHN5c3RlbVVuaWZvcm0udmlld01hdHJpeCAqc2VsZlVuaWZvcm0ubW9kZWxNYXRyaXgqdmVjNDxmMzI+KGlucHV0LnBvc2l0aW9uLDEuMCk7XG4gICAgcmV0dXJuIG91dHB1dDtcbiAgIH1cbiAgIGA7XG59XG4iLCJjb25zdCBwcmVwcm9jZXNzb3JTeW1ib2xzID0gLyMoW15cXHNdKikoXFxzKikvZ207XHJcbi8vIFRlbXBsYXRlIGxpdGVyYWwgdGFnIHRoYXQgaGFuZGxlcyBzaW1wbGUgcHJlcHJvY2Vzc29yIHN5bWJvbHMgZm9yIFdHU0xcclxuLy8gc2hhZGVycy4gU3VwcG9ydHMgI2lmL2VsaWYvZWxzZS9lbmRpZiBzdGF0ZW1lbnRzLlxyXG5leHBvcnQgZnVuY3Rpb24gd2dzbFBhcnNlRGVmaW5lcyhzdHJpbmdzLCAuLi52YWx1ZXMpIHtcclxuXHRjb25zdCBzdGF0ZVN0YWNrID0gW107XHJcblx0bGV0IHN0YXRlID0geyBmcmFnOiBcIlwiLCBlbHNlSXNWYWxpZDogZmFsc2UsIGV4cHJlc3Npb246IHRydWUgfTtcclxuXHRsZXQgZGVwdGggPSAxO1xyXG5cclxuXHRmb3IgKGxldCBpID0gMDsgaSA8IHN0cmluZ3MubGVuZ3RoOyArK2kpIHtcclxuXHRcdGNvbnN0IGZyYWcgPSBzdHJpbmdzW2ldO1xyXG5cdFx0Y29uc3QgbWF0Y2hlZFN5bWJvbHMgPSBmcmFnLm1hdGNoQWxsKHByZXByb2Nlc3NvclN5bWJvbHMpO1xyXG5cclxuXHRcdGxldCBsYXN0SW5kZXggPSAwO1xyXG5cdFx0bGV0IHZhbHVlQ29uc3VtZWQgPSBmYWxzZTtcclxuXHJcblx0XHRmb3IgKGNvbnN0IG1hdGNoIG9mIG1hdGNoZWRTeW1ib2xzKSB7XHJcblx0XHRcdHN0YXRlLmZyYWcgKz0gZnJhZy5zdWJzdHJpbmcobGFzdEluZGV4LCBtYXRjaC5pbmRleCk7XHJcblxyXG5cdFx0XHRzd2l0Y2ggKG1hdGNoWzFdKSB7XHJcblx0XHRcdFx0Y2FzZSBcImlmXCI6XHJcblx0XHRcdFx0XHRpZiAobWF0Y2guaW5kZXggKyBtYXRjaFswXS5sZW5ndGggIT0gZnJhZy5sZW5ndGgpIHtcclxuXHRcdFx0XHRcdFx0dGhyb3cgbmV3IEVycm9yKFwiI2lmIG11c3QgYmUgaW1tZWRpYXRlbHkgZm9sbG93ZWQgYnkgYSB0ZW1wbGF0ZSBleHByZXNzaW9uIChpZTogJHt2YWx1ZX0pXCIpO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0dmFsdWVDb25zdW1lZCA9IHRydWU7XHJcblx0XHRcdFx0XHRzdGF0ZVN0YWNrLnB1c2goc3RhdGUpO1xyXG5cdFx0XHRcdFx0ZGVwdGgrKztcclxuXHRcdFx0XHRcdHN0YXRlID0geyBmcmFnOiBcIlwiLCBlbHNlSXNWYWxpZDogdHJ1ZSwgZXhwcmVzc2lvbjogISF2YWx1ZXNbaV0gfTtcclxuXHRcdFx0XHRcdGJyZWFrO1xyXG5cdFx0XHRcdGNhc2UgXCJlbGlmXCI6XHJcblx0XHRcdFx0XHRpZiAobWF0Y2guaW5kZXggKyBtYXRjaFswXS5sZW5ndGggIT0gZnJhZy5sZW5ndGgpIHtcclxuXHRcdFx0XHRcdFx0dGhyb3cgbmV3IEVycm9yKFwiI2VsaWYgbXVzdCBiZSBpbW1lZGlhdGVseSBmb2xsb3dlZCBieSBhIHRlbXBsYXRlIGV4cHJlc3Npb24gKGllOiAke3ZhbHVlfSlcIik7XHJcblx0XHRcdFx0XHR9IGVsc2UgaWYgKCFzdGF0ZS5lbHNlSXNWYWxpZCkge1xyXG5cdFx0XHRcdFx0XHR0aHJvdyBuZXcgRXJyb3IoXCIjZWxpZiBub3QgcHJlY2VlZGVkIGJ5IGFuICNpZiBvciAjZWxpZlwiKTtcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdHZhbHVlQ29uc3VtZWQgPSB0cnVlO1xyXG5cdFx0XHRcdFx0aWYgKHN0YXRlLmV4cHJlc3Npb24gJiYgc3RhdGVTdGFjay5sZW5ndGggIT0gZGVwdGgpIHtcclxuXHRcdFx0XHRcdFx0c3RhdGVTdGFjay5wdXNoKHN0YXRlKTtcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdHN0YXRlID0geyBmcmFnOiBcIlwiLCBlbHNlSXNWYWxpZDogdHJ1ZSwgZXhwcmVzc2lvbjogISF2YWx1ZXNbaV0gfTtcclxuXHRcdFx0XHRcdGJyZWFrO1xyXG5cdFx0XHRcdGNhc2UgXCJlbHNlXCI6XHJcblx0XHRcdFx0XHRpZiAoIXN0YXRlLmVsc2VJc1ZhbGlkKSB7XHJcblx0XHRcdFx0XHRcdHRocm93IG5ldyBFcnJvcihcIiNlbHNlIG5vdCBwcmVjZWVkZWQgYnkgYW4gI2lmIG9yICNlbGlmXCIpO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0aWYgKHN0YXRlLmV4cHJlc3Npb24gJiYgc3RhdGVTdGFjay5sZW5ndGggIT0gZGVwdGgpIHtcclxuXHRcdFx0XHRcdFx0c3RhdGVTdGFjay5wdXNoKHN0YXRlKTtcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdHN0YXRlID0geyBmcmFnOiBtYXRjaFsyXSwgZWxzZUlzVmFsaWQ6IGZhbHNlLCBleHByZXNzaW9uOiB0cnVlIH07XHJcblx0XHRcdFx0XHRicmVhaztcclxuXHRcdFx0XHRjYXNlIFwiZW5kaWZcIjpcclxuXHRcdFx0XHRcdGlmICghc3RhdGVTdGFjay5sZW5ndGgpIHtcclxuXHRcdFx0XHRcdFx0dGhyb3cgbmV3IEVycm9yKFwiI2VuZGlmIG5vdCBwcmVjZWVkZWQgYnkgYW4gI2lmXCIpO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdFx0Y29uc3QgYnJhbmNoU3RhdGUgPSBzdGF0ZVN0YWNrLmxlbmd0aCA9PSBkZXB0aCA/IHN0YXRlU3RhY2sucG9wKCkgOiBzdGF0ZTtcclxuXHRcdFx0XHRcdHN0YXRlID0gc3RhdGVTdGFjay5wb3AoKTtcclxuXHRcdFx0XHRcdGRlcHRoLS07XHJcblx0XHRcdFx0XHRpZiAoYnJhbmNoU3RhdGUuZXhwcmVzc2lvbikge1xyXG5cdFx0XHRcdFx0XHRzdGF0ZS5mcmFnICs9IGJyYW5jaFN0YXRlLmZyYWc7XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRzdGF0ZS5mcmFnICs9IG1hdGNoWzJdO1xyXG5cdFx0XHRcdFx0YnJlYWs7XHJcblx0XHRcdFx0ZGVmYXVsdDpcclxuXHRcdFx0XHRcdC8vIFVua25vd24gcHJlcHJvY2Vzc29yIHN5bWJvbC4gRW1pdCBpdCBiYWNrIGludG8gdGhlIG91dHB1dCBmcmFnIHVuY2hhbmdlZC5cclxuXHRcdFx0XHRcdHN0YXRlLmZyYWcgKz0gbWF0Y2hbMF07XHJcblx0XHRcdFx0XHRicmVhaztcclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0bGFzdEluZGV4ID0gbWF0Y2guaW5kZXggKyBtYXRjaFswXS5sZW5ndGg7XHJcblx0XHR9XHJcblxyXG5cdFx0Ly8gSWYgdGhlIGZyYWcgZGlkbid0IGVuZCBvbiBvbmUgb2YgdGhlIHByZXByb2Nlc3NvciBzeW1ib2xzIGFwcGVuZCB0aGUgcmVzdCBvZiBpdCBoZXJlLlxyXG5cdFx0aWYgKGxhc3RJbmRleCAhPSBmcmFnLmxlbmd0aCkge1xyXG5cdFx0XHRzdGF0ZS5mcmFnICs9IGZyYWcuc3Vic3RyaW5nKGxhc3RJbmRleCwgZnJhZy5sZW5ndGgpO1xyXG5cdFx0fVxyXG5cclxuXHRcdC8vIElmIHRoZSBuZXh0IHZhbHVlIHdhc24ndCBjb25zdW1lZCBieSB0aGUgcHJlcHJvY2Vzc29yIHN5bWJvbCwgYXBwZW5kIGl0IGhlcmUuXHJcblx0XHRpZiAoIXZhbHVlQ29uc3VtZWQgJiYgdmFsdWVzLmxlbmd0aCA+IGkpIHtcclxuXHRcdFx0c3RhdGUuZnJhZyArPSB2YWx1ZXNbaV07XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHRpZiAoc3RhdGVTdGFjay5sZW5ndGgpIHtcclxuXHRcdHRocm93IG5ldyBFcnJvcihcIk1pc21hdGNoZWQgI2lmLyNlbmRpZiBjb3VudFwiKTtcclxuXHR9XHJcblxyXG5cdHJldHVybiBzdGF0ZS5mcmFnO1xyXG59XHJcbiIsImltcG9ydCB7IHdnc2xQYXJzZURlZmluZXMgfSBmcm9tIFwiLi4vV2dzbFByZXByb2Nlc3NvclwiO1xyXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBwYnJfZnMoZGVmaW5lcykge1xyXG5cdHJldHVybiB3Z3NsUGFyc2VEZWZpbmVzYFxyXG4gICAgICAgIC8vIHJlZmVyZW5jZTogaHR0cHM6Ly9naXRodWIuY29tL0tocm9ub3NHcm91cC9nbFRGLVdlYkdMLVBCUi9ibG9iL21hc3Rlci9zaGFkZXJzL3Bici1mcmFnLmdsc2xcclxuICAgICAgICAjaW5jbHVkZSA8cGJyVXRpbHM+XHJcbiAgICAgICAgI2luY2x1ZGUgPGxpZ2h0PlxyXG4gICAgICAgICNpbmNsdWRlIDxicmRmPlxyXG4gICAgICAgICNpbmNsdWRlIDxQYnJNYXRlcmlhbFN0cnVjdD5cclxuICAgICAgICAjaW5jbHVkZSA8U3lzdGVtVW5pZm9ybT4gXHJcbiAgICAgICAgI2luY2x1ZGUgPEZyYWdJbnB1dD4gICBcclxuICAgICAgICBzdHJ1Y3QgUGh5c2ljYWxNYXRlcmlhbCB7XHJcbiAgICAgICAgICAgIGRpZmZ1c2VDb2xvcjp2ZWMzPGYzMj4sXHJcbiAgICAgICAgICAgIHJvdWdobmVzczpmMzIsXHJcbiAgICAgICAgICAgIHNwZWN1bGFyQ29sb3I6dmVjMzxmMzI+LFxyXG4gICAgICAgICAgICNpZiAke2RlZmluZXMuVVNFX0NMRUFSQ09BVH1cclxuICAgICAgICAgICAgICAgY2xlYXJjb2F0OmYzMixcclxuICAgICAgICAgICAgICAgY2xlYXJjb2F0Um91Z2huZXNzOmYzMixcclxuICAgICAgICAgICAgICAgY2xlYXJjb2F0RjA6dmVjMzxmMzI+LFxyXG4gICAgICAgICAgICAgICBjbGVhcmNvYXRGOTA6ZjMyLFxyXG4gICAgICAgICAgICNlbmRpZlxyXG5cclxuICAgICAgICAgICAjaWYgJHtkZWZpbmVzLlVTRV9JUklERVNDRU5DRX1cclxuICAgICAgICAgICAgICAgaXJpZGVzY2VuY2U6ZjMyLFxyXG4gICAgICAgICAgICAgICBpcmlkZXNjZW5jZUlPUjpmMzIsXHJcbiAgICAgICAgICAgICAgIGlyaWRlc2NlbmNlVGhpY2tuZXNzOmYzMixcclxuICAgICAgICAgICAgICAgaXJpZGVzY2VuY2VGcmVzbmVsOnZlYzM8ZjMyPixcclxuICAgICAgICAgICAgICAgaXJpZGVzY2VuY2VGMDp2ZWMzPGYzMj4sXHJcbiAgICAgICAgICAgI2VuZGlmXHJcblxyXG4gICAgICAgICAgICNpZiAke2RlZmluZXMuVVNFX1NIRUVOfVxyXG4gICAgICAgICAgICAgICBzaGVlbkNvbG9yOnZlYzM8ZjMyPixcclxuICAgICAgICAgICAgICAgc2hlZW5Sb3VnaG5lc3M6ZjMyLFxyXG4gICAgICAgICAgICNlbmRpZlxyXG5cclxuICAgICAgICAgICAjaWYgJHtkZWZpbmVzLklPUn1cclxuICAgICAgICAgICAgICAgIGlvcjpmMzIsXHJcbiAgICAgICAgICAgI2VuZGlmXHJcblxyXG4gICAgICAgICAgICNpZiAke2RlZmluZXMuVVNFX1RSQU5TTUlTU0lPTn1cclxuICAgICAgICAgICAgICAgdHJhbnNtaXNzaW9uOmYzMixcclxuICAgICAgICAgICAgICAgdHJhbnNtaXNzaW9uQWxwaGE6ZjMyLFxyXG4gICAgICAgICAgICAgICB0aGlja25lc3M6ZjMyLFxyXG4gICAgICAgICAgICAgICBhdHRlbnVhdGlvbkRpc3RhbmNlOmYzMixcclxuICAgICAgICAgICAgICAgYXR0ZW51YXRpb25Db2xvcjp2ZWMzPGYzMj4sXHJcbiAgICAgICAgICAgI2VuZGlmXHJcbiAgICAgICB9O1xyXG4gICAgICAgIGNvbnN0IE1fUEk6ZjMyID0gMy4xNDE1OTI2NTM1ODk3OTM7XHJcbiAgICAgICAgY29uc3QgY19NaW5Sb3VnaG5lc3M6ZjMyID0gMC4wNDtcclxuICAgICAgICAjaW5jbHVkZSA8VGV4dHVyZUFuZFNhbXBsZXJEZWZpbmU+XHJcbiAgICAgICAgI2lmICR7ZGVmaW5lcy5VU0VfSUJMfVxyXG4gICAgICAgICAgICAjaW5jbHVkZSA8aWJsPlxyXG4gICAgICAgICNlbmRpZlxyXG4gICAgICAgIEBiaW5kaW5nKCR7ZGVmaW5lcy5wYnJCaW5kaW5nfSkgQGdyb3VwKDApIHZhcjx1bmlmb3JtPiBtYXRlcmlhbFVuaWZvcm0gOiBNYXRlcmlhbFVuaWZvcm07XHJcbiAgICAgICAgQGJpbmRpbmcoJHtkZWZpbmVzLmNhbWVyYUJpbmRpbmd9KSBAZ3JvdXAoMSkgdmFyPHVuaWZvcm0+IHN5c3RlbVVuaWZvcm0gOiBTeXN0ZW1Vbmlmb3JtO1xyXG4gICAgICAgIEBmcmFnbWVudFxyXG4gICAgICAgIGZuIG1haW4oaW5wdXQ6RnJhZ0lucHV0KSAtPiBAbG9jYXRpb24oMCkgdmVjNDxmMzI+IFxyXG4gICAgICAgIHtcclxuICAgICAgICAgICAgdmFyIHBlcmNlcHR1YWxSb3VnaG5lc3M6ZjMyID0gbWF0ZXJpYWxVbmlmb3JtLnJvdWdobmVzcztcclxuICAgICAgICAgICAgdmFyIG1ldGFsbGljOmYzMiA9IG1hdGVyaWFsVW5pZm9ybS5tZXRhbGxpYztcclxuXHJcbiAgICAgICAgICAgICNpZiAke2RlZmluZXMuVVNFX01FVEFMTkVTU1RFWFRVUkV9XHJcbiAgICAgICAgICAgICAgICBsZXQgbXJTYW1wbGU6dmVjNDxmMzI+ID0gdGV4dHVyZVNhbXBsZShtZXRhbG5lc3NSb3VnaG5lc3NUZXh0dXJlLG1ldGFsbmVzc1JvdWdobmVzc1NhbXBsZXIsIGlucHV0LnV2KTtcclxuICAgICAgICAgICAgICAgIHBlcmNlcHR1YWxSb3VnaG5lc3MgPSBtclNhbXBsZS5nICogcGVyY2VwdHVhbFJvdWdobmVzcztcclxuICAgICAgICAgICAgICAgIG1ldGFsbGljID0gbXJTYW1wbGUuYiAqIG1ldGFsbGljO1xyXG4gICAgICAgICAgICAjZW5kaWZcclxuICAgICAgICAgICAgcGVyY2VwdHVhbFJvdWdobmVzcyA9IGNsYW1wKHBlcmNlcHR1YWxSb3VnaG5lc3MsIGNfTWluUm91Z2huZXNzLCAxLjApO1xyXG4gICAgICAgICAgICBtZXRhbGxpYyA9IGNsYW1wKG1ldGFsbGljLCAwLjAsIDEuMCk7XHJcbiAgICAgICAgICAgIGxldCBhbHBoYVJvdWdobmVzczpmMzIgPSBwZXJjZXB0dWFsUm91Z2huZXNzICogcGVyY2VwdHVhbFJvdWdobmVzcztcclxuXHJcblxyXG4gICAgICAgICAgICAvLyBUaGUgYWxiZWRvIG1heSBiZSBkZWZpbmVkIGZyb20gYSBiYXNlIHRleHR1cmUgb3IgYSBmbGF0IGNvbG9yXHJcbiAgICAgICAgICAgICNpZiAke2RlZmluZXMuVVNFX1RFWFRVUkV9XHJcbiAgICAgICAgICAgICAgICBsZXQgYmFzZUNvbG9yOnZlYzQ8ZjMyPiA9IHRleHR1cmVTYW1wbGUoYmFzZUNvbG9yVGV4dHVyZSxiYXNlQ29sb3JTYW1wbGVyLCBpbnB1dC51dikgO1xyXG4gICAgICAgICAgICAjZWxzZVxyXG4gICAgICAgICAgICAgICAgbGV0IGJhc2VDb2xvcjp2ZWM0PGYzMj4gPSB2ZWM0PGYzMj4obWF0ZXJpYWxVbmlmb3JtLmNvbG9yLDEuMCk7XHJcbiAgICAgICAgICAgICNlbmRpZlxyXG5cclxuICAgICAgICAgICAgI2lmICR7ZGVmaW5lcy5VU0VfTk9STUFMVEVYVFVSRX1cclxuICAgICAgICAgICAgICAgIGxldCBuOnZlYzM8ZjMyPiA9IGdldE5vcm1hbEJ5Tm9ybWFsVGV4dHVyZShpbnB1dCk7ICBcclxuICAgICAgICAgICAgI2Vsc2VcclxuICAgICAgICAgICAgICAgIGxldCBuOnZlYzM8ZjMyPiA9IGdldE5vcm1hbChpbnB1dCk7XHJcbiAgICAgICAgICAgICNlbmRpZlxyXG4gICAgICAgICAgICB2YXIgbWF0ZXJpYWw6UGh5c2ljYWxNYXRlcmlhbDtcclxuICAgICAgICAgICAgbWF0ZXJpYWwuZGlmZnVzZUNvbG9yPWJhc2VDb2xvci5yZ2IqKCAxLjAgLSBtZXRhbGxpYyApO1xyXG4gICAgICAgICAgICBtYXRlcmlhbC5yb3VnaG5lc3M9cGVyY2VwdHVhbFJvdWdobmVzcztcclxuICAgICAgICAgICAgbWF0ZXJpYWwuc3BlY3VsYXJDb2xvcj1taXgoIHZlYzM8ZjMyPiggMC4wNCksIGJhc2VDb2xvci5yZ2IsIG1ldGFsbGljICk7XHJcbiAgICAgICAgICAgIHZhciBnZW9tZXRyeTpHZW9tZXRyeTtcclxuICAgICAgICAgICAgZ2VvbWV0cnkubm9ybWFsPW47XHJcbiAgICAgICAgICAgIGdlb21ldHJ5LnZpZXdEaXI9bm9ybWFsaXplKHN5c3RlbVVuaWZvcm0uY2FtZXJhUG9zaXRpb24gLSBpbnB1dC53b3JsZFBvcyk7XHJcbiAgICAgICAgICAgIGdlb21ldHJ5LnBvc2l0aW9uPWlucHV0LndvcmxkUG9zO1xyXG4gICAgICAgICAgICBnZW9tZXRyeS5kb3ROViA9IHNhdHVyYXRlKGRvdChnZW9tZXRyeS5ub3JtYWwsIGdlb21ldHJ5LnZpZXdEaXIpICk7XHJcbiAgICAgICAgICAgIC8vbGlnaHQgc2hhZGluZ1xyXG4gICAgICAgICAgICB2YXIgcmVmbGVjdGVkTGlnaHQ9cGFyc2VMaWdodHMoZ2VvbWV0cnksbWF0ZXJpYWwpO1xyXG4gICAgICAgICAgICB2YXIgY29sb3I9cmVmbGVjdGVkTGlnaHQuZGlyZWN0RGlmZnVzZStyZWZsZWN0ZWRMaWdodC5kaXJlY3RTcGVjdWxhcjtcclxuICAgICAgICAgICAgLy9JQkxcclxuICAgICAgICAgICAgI2lmICR7ZGVmaW5lcy5VU0VfSUJMICYmIGRlZmluZXMuSEFTX1VWfVxyXG4gICAgICAgICAgICAgICAgdmFyIHJlZmxlY3RlZExpZ2h0RGlmZnVzZT1pbmRpcmVjdERpZmZ1c2VfUGh5c2ljYWwoZ2VvbWV0cnksbWF0ZXJpYWwpO1xyXG4gICAgICAgICAgICAgICAgdmFyIHJlZmxlY3RlZExpZ2h0U3BlY3VsYXI9aW5kaXJlY3RTcGVjdWxhcl9QaHlzaWNhbChnZW9tZXRyeSxtYXRlcmlhbCk7XHJcbiAgICAgICAgICAgICAgICBjb2xvcis9cmVmbGVjdGVkTGlnaHREaWZmdXNlLmluZGlyZWN0RGlmZnVzZTtcclxuICAgICAgICAgICAgICAgIGNvbG9yKz1yZWZsZWN0ZWRMaWdodFNwZWN1bGFyLmluZGlyZWN0U3BlY3VsYXI7XHJcbiAgICAgICAgICAgICNlbmRpZlxyXG4gICAgICAgICAgICAjaWYgJHtkZWZpbmVzLlVTRV9BT1RFWFRVUkV9XHJcbiAgICAgICAgICAgICAgICBsZXQgYW86ZjMyID0gdGV4dHVyZVNhbXBsZShhb1RleHR1cmUsYW9TYW1wbGVyLCBpbnB1dC51dikucjtcclxuICAgICAgICAgICAgICAgIGNvbG9yID0gbWl4KGNvbG9yLCBjb2xvciAqIGFvLCBtYXRlcmlhbFVuaWZvcm0ub2NjbHVzaW9uU3RyZW5ndGgpO1xyXG4gICAgICAgICAgICAjZW5kaWZcclxuXHJcbiAgICAgICAgICAgICNpZiAke2RlZmluZXMuVVNFX0VNSVNTSVZFVEVYVFVSRX1cclxuICAgICAgICAgICAgICAgIGxldCBlbWlzc2l2ZTp2ZWMzPGYzMj4gPSB0ZXh0dXJlU2FtcGxlKGVtaXNzaXZlVGV4dHVyZSwgZW1pc3NpdmVTYW1wbGVyLGlucHV0LnV2KS5yZ2IgO1xyXG4gICAgICAgICAgICAgICAgY29sb3IgKz0gZW1pc3NpdmU7XHJcbiAgICAgICAgICAgICNlbmRpZlxyXG4gICAgICAgcmV0dXJuIHZlYzQ8ZjMyPihjb2xvciwgYmFzZUNvbG9yLmEpO1xyXG4gICAgfVxyXG4gICBgO1xyXG59XHJcbiIsImltcG9ydCB7IHdnc2xQYXJzZURlZmluZXMgfSBmcm9tIFwiLi4vV2dzbFByZXByb2Nlc3NvclwiO1xyXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBwYnJfdnMoZGVmaW5lcykge1xyXG5cdHJldHVybiB3Z3NsUGFyc2VEZWZpbmVzYFxyXG4gICAgI2luY2x1ZGUgPFBick1hdGVyaWFsU3RydWN0PlxyXG4gICAgI2luY2x1ZGUgPFN5c3RlbVVuaWZvcm0+XHJcbiAgICAjaW5jbHVkZSA8VmVydGV4SW5wdXQ+XHJcbiAgICAjaW5jbHVkZSA8VmVydGV4T3V0cHV0PiBcclxuICAgICNpbmNsdWRlIDxza2luVmVydEhlYWRlcj5cclxuICAgICNpbmNsdWRlIDxpbnN0YW5jZVZlcnRIZWFkZXI+XHJcbiAgICBAYmluZGluZygke2RlZmluZXMucGJyQmluZGluZ30pIEBncm91cCgwKSB2YXI8dW5pZm9ybT4gbWF0ZXJpYWxVbmlmb3JtIDogTWF0ZXJpYWxVbmlmb3JtO1xyXG4gICAgQGJpbmRpbmcoJHtkZWZpbmVzLmNhbWVyYUJpbmRpbmd9KSBAZ3JvdXAoMSkgdmFyPHVuaWZvcm0+IHN5c3RlbVVuaWZvcm0gOiBTeXN0ZW1Vbmlmb3JtO1xyXG4gICAgQHZlcnRleFxyXG4gICAgZm4gbWFpbihpbnB1dDogVmVydGV4SW5wdXQpLT4gVmVydGV4T3V0cHV0XHJcbiAgIHtcclxuICAgICAgICB2YXIgb3V0cHV0OiBWZXJ0ZXhPdXRwdXQ7XHJcbiAgICAgICAgI2lmICR7ZGVmaW5lcy5IQVNfVVZ9XHJcbiAgICAgICAgICAgIG91dHB1dC51diA9IGlucHV0LnV2O1xyXG4gICAgICAgICNlbmRpZlxyXG4gICAgICAgIHZhciBtb2RlbE1hdHJpeDptYXQ0eDQ8ZjMyPjtcclxuICAgICAgICB2YXIgdk5vcm1hbFZpZXc6dmVjMzxmMzI+O1xyXG4gICAgICAgIHZOb3JtYWxWaWV3ID0gbm9ybWFsaXplKG1hdGVyaWFsVW5pZm9ybS5ub3JtYWxNYXRyaXggKiB2ZWM0PGYzMj4oaW5wdXQubm9ybWFsLDAuMCkpLnh5ejtcclxuICAgICAgICBtb2RlbE1hdHJpeD1tYXRlcmlhbFVuaWZvcm0ubW9kZWxNYXRyaXg7ICAgXHJcbiAgICAgICAgI2luY2x1ZGUgPHNraW5WZXJ0TWFpbj5cclxuICAgICAgICAjaW5jbHVkZSA8aW5zdGFuY2VWZXJ0TWFpbj4gIFxyXG4gICAgICAgIG91dHB1dC5ub3JtYWwgPSB2Tm9ybWFsVmlldy54eXo7XHJcbiAgICAgICAgb3V0cHV0LnBvc2l0aW9uID0gc3lzdGVtVW5pZm9ybS5wcm9qZWN0aW9uTWF0cml4ICogc3lzdGVtVW5pZm9ybS52aWV3TWF0cml4ICptb2RlbE1hdHJpeCogdmVjNDxmMzI+KGlucHV0LnBvc2l0aW9uLCAxLjApO1xyXG4gICAgICAgIGxldCBtb2RlbFBvcz1tb2RlbE1hdHJpeCAqdmVjNDxmMzI+KGlucHV0LnBvc2l0aW9uLDEuMCk7XHJcbiAgICAgICAgb3V0cHV0LndvcmxkUG9zID0gbW9kZWxQb3MueHl6L21vZGVsUG9zLnc7XHJcbiAgICAgICAgcmV0dXJuIG91dHB1dDsgICBcclxuICAgfVxyXG4gICBgO1xyXG59XHJcbiIsImltcG9ydCB7IHdnc2xQYXJzZURlZmluZXMgfSBmcm9tIFwiLi4vV2dzbFByZXByb2Nlc3NvclwiO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gcGJyRnJhZyhkZWZpbmVzKSB7XHJcblx0cmV0dXJuIHdnc2xQYXJzZURlZmluZXNgXHJcbiAgICAjaW5jbHVkZSA8bGlnaHRDb21tb24+XHJcbiAgICAjaW5jbHVkZSA8bGlnaHQ+XHJcbiAgICAjaW5jbHVkZSA8YnJkZj5cclxuICAgICNpbmNsdWRlIDxwYnJTdHJ1Y3Q+XHJcbiAgICAjaW5jbHVkZSA8cGJyVXRpbHM+XHJcbiAgICAjaW5jbHVkZSA8cGJyRnVuY3Rpb24+XHJcbiAgICAjaW5jbHVkZSA8cGJyVGV4dHVyZT5cclxuICAgICNpbmNsdWRlIDxlbnZpcm9ubWVudD5cclxuICAgIHN0cnVjdCBTeXN0ZW1Vbmlmb3JtIHtcclxuICAgICAgICBwcm9qZWN0aW9uTWF0cml4OiBtYXQ0eDQ8ZjMyPixcclxuICAgICAgICB2aWV3TWF0cml4OiBtYXQ0eDQ8ZjMyPixcclxuICAgICAgICBpbnZlcnNlVmlld01hdHJpeDogbWF0NHg0PGYzMj4sXHJcbiAgICAgICAgY2FtZXJhUG9zaXRpb246IHZlYzM8ZjMyPixcclxuICAgIH07IFxyXG4gICAgLy8gdW5pZm9ybSB2ZWMzIGxpZ2h0UHJvYmVbOV0sXHJcbi8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vLy8vL1xyXG5zdHJ1Y3QgVmVydGV4T3V0cHV0IHtcclxuICAgIEBidWlsdGluKHBvc2l0aW9uKSBwb3NpdGlvbjogdmVjNDxmMzI+LFxyXG4gICAgQGJ1aWx0aW4oZnJvbnRfZmFjaW5nKSBpc19mcm9udDogYm9vbCxcclxuICAgIEBsb2NhdGlvbigwKSB2VXY6IHZlYzI8ZjMyPixcclxuICAgIEBsb2NhdGlvbigxKSB2Vmlld1Bvc2l0aW9uOiB2ZWMzPGYzMj4sIC8vIFZlY3RvciBmcm9tIHZlcnRleCB0byBjYW1lcmEuXHJcbiAgICBAbG9jYXRpb24oMikgdldvcmxkUG9zaXRpb246IHZlYzM8ZjMyPixcclxuICAgIEBsb2NhdGlvbigzKSB2Tm9ybWFsOiB2ZWMzPGYzMj4sXHJcbiAgICAvLyDlj6/pgIlcclxuICAgICNpZiAke2RlZmluZXMuVVNFX0xJR0hUVEVYVFVSRSB8fCBkZWZpbmVzLlVTRV9BT1RFWFRVUkV9XHJcbiAgICAgICAgQGxvY2F0aW9uKCR7ZGVmaW5lcy52VXYyT3V0TG9jYXRpb259KSB2VXYyOiB2ZWMyPGYzMj4sXHJcbiAgICAjZW5kaWZcclxuXHJcbiAgICAjaWYgJHtkZWZpbmVzLlVTRV9DT0xPUl9BTFBIQX1cclxuICAgICAgICBAbG9jYXRpb24oJHtkZWZpbmVzLnZDb2xvck91dExvY2F0aW9ufSkgdkNvbG9yOiB2ZWM0PGYzMj4sXHJcbiAgICAjZWxpZiAke2RlZmluZXMuVVNFX0NPTE9SIHx8IGRlZmluZXMuVVNFX0lOU1RBTkNJTkdfQ09MT1J9XHJcbiAgICAgICAgQGxvY2F0aW9uKCR7ZGVmaW5lcy52Q29sb3JPdXRMb2NhdGlvbn0pIHZDb2xvcjogdmVjMzxmMzI+LFxyXG4gICAgI2VuZGlmXHJcblxyXG4gICAgI2lmICR7ZGVmaW5lcy5VU0VfVEFOR0VOVH1cclxuICAgICAgICBAbG9jYXRpb24oJHtkZWZpbmVzLnZUYW5nZW50T3V0TG9jYXRpb259KSB2VGFuZ2VudDogdmVjMzxmMzI+LFxyXG4gICAgICAgIEBsb2NhdGlvbigke2RlZmluZXMudkJpdGFuZ2VudE91dExvY2F0aW9ufSkgdkJpdGFuZ2VudDogdmVjMzxmMzI+LFxyXG4gICAgI2VuZGlmXHJcbn07XHJcbiAgICAgICAgc3RydWN0IFBoeXNpY2FsTWF0ZXJpYWwge1xyXG4gICAgICAgICAgICAgZGlmZnVzZUNvbG9yOnZlYzM8ZjMyPixcclxuICAgICAgICAgICAgIHJvdWdobmVzczpmMzIsXHJcbiAgICAgICAgICAgICBzcGVjdWxhckNvbG9yOnZlYzM8ZjMyPixcclxuICAgICAgICAgICAgIHNwZWN1bGFyRjkwOmYzMixcclxuICAgICAgICAgICAgI2lmICR7ZGVmaW5lcy5VU0VfQ0xFQVJDT0FUfVxyXG4gICAgICAgICAgICAgICAgY2xlYXJjb2F0OmYzMixcclxuICAgICAgICAgICAgICAgIGNsZWFyY29hdFJvdWdobmVzczpmMzIsXHJcbiAgICAgICAgICAgICAgICBjbGVhcmNvYXRGMDp2ZWMzPGYzMj4sXHJcbiAgICAgICAgICAgICAgICBjbGVhcmNvYXRGOTA6ZjMyLFxyXG4gICAgICAgICAgICAjZW5kaWZcclxuXHJcbiAgICAgICAgICAgICNpZiAke2RlZmluZXMuVVNFX0lSSURFU0NFTkNFfVxyXG4gICAgICAgICAgICAgICAgaXJpZGVzY2VuY2U6ZjMyLFxyXG4gICAgICAgICAgICAgICAgaXJpZGVzY2VuY2VJT1I6ZjMyLFxyXG4gICAgICAgICAgICAgICAgaXJpZGVzY2VuY2VUaGlja25lc3M6ZjMyLFxyXG4gICAgICAgICAgICAgICAgaXJpZGVzY2VuY2VGcmVzbmVsOnZlYzM8ZjMyPixcclxuICAgICAgICAgICAgICAgIGlyaWRlc2NlbmNlRjA6dmVjMzxmMzI+LFxyXG4gICAgICAgICAgICAjZW5kaWZcclxuXHJcbiAgICAgICAgICAgICNpZiAke2RlZmluZXMuVVNFX1NIRUVOfVxyXG4gICAgICAgICAgICAgICAgc2hlZW5Db2xvcjp2ZWMzPGYzMj4sXHJcbiAgICAgICAgICAgICAgICBzaGVlblJvdWdobmVzczpmMzIsXHJcbiAgICAgICAgICAgICNlbmRpZlxyXG5cclxuICAgICAgICAgICAgI2lmICR7ZGVmaW5lcy5JT1J9XHJcbiAgICAgICAgICAgICAgICAgaW9yOmYzMixcclxuICAgICAgICAgICAgI2VuZGlmXHJcblxyXG4gICAgICAgICAgICAjaWYgJHtkZWZpbmVzLlVTRV9UUkFOU01JU1NJT059XHJcbiAgICAgICAgICAgICAgICB0cmFuc21pc3Npb246ZjMyLFxyXG4gICAgICAgICAgICAgICAgdHJhbnNtaXNzaW9uQWxwaGE6ZjMyLFxyXG4gICAgICAgICAgICAgICAgdGhpY2tuZXNzOmYzMixcclxuICAgICAgICAgICAgICAgIGF0dGVudWF0aW9uRGlzdGFuY2U6ZjMyLFxyXG4gICAgICAgICAgICAgICAgYXR0ZW51YXRpb25Db2xvcjp2ZWMzPGYzMj4sXHJcbiAgICAgICAgICAgICNlbmRpZlxyXG4gICAgICAgIH07XHJcbkBiaW5kaW5nKDApIEBncm91cCgwKSB2YXI8dW5pZm9ybT4gbWF0ZXJpYWxVbmlmb3JtIDogTWF0ZXJpYWxVbmlmb3JtO1xyXG5AYmluZGluZygwKSBAZ3JvdXAoMSkgdmFyPHVuaWZvcm0+IHN5c3RlbVVuaWZvcm0gOiBTeXN0ZW1Vbmlmb3JtO1xyXG5AZnJhZ21lbnRcclxuZm4gbWFpbihpbnB1dDpWZXJ0ZXhPdXRwdXQpLT4gQGxvY2F0aW9uKDApIHZlYzQ8ZjMyPiB7XHJcbiAgICAgICAgdmFyIGRpZmZ1c2VDb2xvcjp2ZWM0PGYzMj4gPSB2ZWM0KG1hdGVyaWFsVW5pZm9ybS5kaWZmdXNlLCBtYXRlcmlhbFVuaWZvcm0ub3BhY2l0eSApO1xyXG4gICAgICAgLy8gUmVmbGVjdGVkTGlnaHQgcmVmbGVjdGVkTGlnaHQgPSBSZWZsZWN0ZWRMaWdodCggdmVjMyggMC4wICksIHZlYzMoIDAuMCApLCB2ZWMzKCAwLjAgKSwgdmVjMyggMC4wICkgKTtcclxuICAgICAgICB2YXIgcmVmbGVjdGVkTGlnaHQ6UmVmbGVjdGVkTGlnaHQ7XHJcbiAgICAgICAgdmFyIHRvdGFsRW1pc3NpdmVSYWRpYW5jZTp2ZWMzPGYzMj4gPSBtYXRlcmlhbFVuaWZvcm0uZW1pc3NpdmU7XHJcbiAgICAgICAgI2lmICR7ZGVmaW5lcy5VU0VfVEVYVFVSRX1cclxuICAgICAgICAgICAgdmFyIHNhbXBsZWREaWZmdXNlQ29sb3I6dmVjNDxmMzI+ID10ZXh0dXJlU2FtcGxlKGJhc2VUZXh0dXJlLCBiYXNlU2FtcGxlciwgaW5wdXQudlV2KTtcclxuICAgICAgICAgICAgI2lmICR7ZGVmaW5lcy5ERUNPREVfVklERU9fVEVYVFVSRX1cclxuICAgICAgICAgICAgICAgIHNhbXBsZWREaWZmdXNlQ29sb3IgPSB2ZWM0PGYzMj4oIG1peCggcG93KCBzYW1wbGVkRGlmZnVzZUNvbG9yLnJnYiAqIDAuOTQ3ODY3Mjk4NiArIHZlYzM8ZjMyPiggMC4wNTIxMzI3MDE0ICksIHZlYzM8ZjMyPiggMi40ICkgKSwgc2FtcGxlZERpZmZ1c2VDb2xvci5yZ2IgKiAwLjA3NzM5OTM4MDgsIHZlYzM8ZjMyPiggbGVzc1RoYW5FcXVhbCggc2FtcGxlZERpZmZ1c2VDb2xvci5yZ2IsIHZlYzM8ZjMyPiggMC4wNDA0NSApICkgKSApLCBzYW1wbGVkRGlmZnVzZUNvbG9yLncgKTtcclxuICAgICAgICAgICAgI2VuZGlmXHJcblxyXG4gICAgICAgICAgICBkaWZmdXNlQ29sb3IgKj0gc2FtcGxlZERpZmZ1c2VDb2xvcjtcclxuICAgICAgICAjZW5kaWZcclxuXHJcbiAgICAgICAgdmFyIHJvdWdobmVzc0ZhY3RvcjpmMzIgPSBtYXRlcmlhbFVuaWZvcm0ucm91Z2huZXNzO1xyXG4gICAgXHJcbiAgICAgICAgI2lmICR7ZGVmaW5lcy5VU0VfUk9VR0hORVNTVEVYVFVSRX1cclxuICAgICAgICAgICAgbGV0IHRleGVsUm91Z2huZXNzOnZlYzQ8ZjMyPj10ZXh0dXJlU2FtcGxlKHJvdWdobmVzc1RleHR1cmUsIGJhc2VTYW1wbGVyLCBpbnB1dC52VXYpO1xyXG4gICAgICAgICAgICByb3VnaG5lc3NGYWN0b3IgKj0gdGV4ZWxSb3VnaG5lc3MuZztcclxuICAgICAgICAjZW5kaWZcclxuXHJcbiAgICAgICAgdmFyIG1ldGFsbmVzc0ZhY3RvcjpmMzIgPSBtYXRlcmlhbFVuaWZvcm0ubWV0YWxuZXNzO1xyXG4gICAgXHJcbiAgICAgICAgI2lmICR7ZGVmaW5lcy5VU0VfTUVUQUxORVNTVEVYVFVSRX1cclxuICAgICAgICAgICAgbGV0IHRleGVsTWV0YWxuZXNzOnZlYzQ8ZjMyPiA9dGV4dHVyZVNhbXBsZShtZXRhbG5lc3NUZXh0dXJlLCBiYXNlU2FtcGxlciwgaW5wdXQudlV2KTtcclxuICAgICAgICAgICAgbWV0YWxuZXNzRmFjdG9yICo9IHRleGVsTWV0YWxuZXNzLmI7XHJcbiAgICAgICAgI2VuZGlmXHJcblxyXG4gICAgICAgIGxldCBmYWNlRGlyZWN0aW9uOmYzMiA9c2VsZWN0KC0xLjAsMS4wLGlucHV0LmlzX2Zyb250KTtcclxuICAgICAgICAjaWYgJHtkZWZpbmVzLkZMQVRfU0hBREVEfVxyXG4gICAgICAgICAgICBsZXQgZmR4OnZlYzM8ZjMyPiA9IGRwZHgoIGlucHV0LnZWaWV3UG9zaXRpb24gKTtcclxuICAgICAgICAgICAgbGV0IGZkeTp2ZWMzPGYzMj4gPSBkcGR5KCBpbnB1dC52Vmlld1Bvc2l0aW9uICk7XHJcbiAgICAgICAgICAgIGxldCBub3JtYWw6dmVjMzxmMzI+ID0gbm9ybWFsaXplKCBjcm9zcyggZmR5LCBmZHggKSApO1xyXG4gICAgICAgICNlbHNlXHJcbiAgICAgICAgICAgIGxldCBub3JtYWw6dmVjMzxmMzI+ID0gbm9ybWFsaXplKCBpbnB1dC52Tm9ybWFsICk7XHJcbiAgICAgICAgICAgICNpZiAke2RlZmluZXMuRE9VQkxFX1NJREVEfVxyXG4gICAgICAgICAgICAgICAgbm9ybWFsID0gbm9ybWFsICogZmFjZURpcmVjdGlvbjtcclxuICAgICAgICAgICAgI2VuZGlmXHJcbiAgICAgICAgICAgICNpZiAke2RlZmluZXMuVVNFX1RBTkdFTlR9XHJcbiAgICAgICAgICAgICAgICBsZXQgdGFuZ2VudDp2ZWMzPGYzMj4gPSBub3JtYWxpemUoIGlucHV0LnZUYW5nZW50ICk7XHJcbiAgICAgICAgICAgICAgICBsZXQgYml0YW5nZW50OnZlYzM8ZjMyPiA9IG5vcm1hbGl6ZSggaW5wdXQudkJpdGFuZ2VudCApO1xyXG4gICAgICAgICAgICAgICAgI2lmICR7ZGVmaW5lcy5ET1VCTEVfU0lERUR9XHJcbiAgICAgICAgICAgICAgICAgICAgdGFuZ2VudCA9IHRhbmdlbnQgKiBmYWNlRGlyZWN0aW9uO1xyXG4gICAgICAgICAgICAgICAgICAgIGJpdGFuZ2VudCA9IGJpdGFuZ2VudCAqIGZhY2VEaXJlY3Rpb247XHJcbiAgICAgICAgICAgICAgICAjZW5kaWZcclxuICAgICAgICAgICAgICAgICNpZiAke2RlZmluZXMuVEFOR0VOVFNQQUNFX05PUk1BTFRFWFRVUkUgfHwgZGVmaW5lcy5VU0VfQ0xFQVJDT0FUX05PUk1BTFRFWFRVUkV9XHJcbiAgICAgICAgICAgICAgICAgICAgbGV0IHZUQk46bWF0M3gzPGYzMj4gPSBtYXQzeDM8ZjMyPiggdGFuZ2VudCwgYml0YW5nZW50LCBub3JtYWwgKTtcclxuICAgICAgICAgICAgICAgICNlbmRpZlxyXG4gICAgICAgICAgICAjZW5kaWZcclxuICAgICAgICAjZW5kaWZcclxuICAgIFxyXG4gICAgICAgIGxldCBnZW9tZXRyeU5vcm1hbDp2ZWMzPGYzMj4gPSBub3JtYWw7XHJcblxyXG4gICAgICAgICNpZiAke2RlZmluZXMuT0JKRUNUU1BBQ0VfTk9STUFMVEVYVFVSRX1cclxuICAgICAgICAgICAgbm9ybWFsID10ZXh0dXJlU2FtcGxlKG5vcm1hbFRleHR1cmUsIGJhc2VTYW1wbGVyLCBpbnB1dC52VXYpLnh5eiAqIDIuMCAtIDEuMDtcclxuICAgICAgICAgICAgI2lmICR7ZGVmaW5lcy5GTElQX1NJREVEfVxyXG4gICAgICAgICAgICAgICAgbm9ybWFsID0gLSBub3JtYWw7XHJcbiAgICAgICAgICAgICNlbmRpZlxyXG4gICAgICAgICAgICAjaWYgJHtkZWZpbmVzLkRPVUJMRV9TSURFRH1cclxuICAgICAgICAgICAgICAgIG5vcm1hbCA9IG5vcm1hbCAqIGZhY2VEaXJlY3Rpb247XHJcbiAgICAgICAgICAgICNlbmRpZlxyXG5cclxuICAgICAgICAgICAgbm9ybWFsID0gbm9ybWFsaXplKG1hdGVyaWFsVW5pZm9ybS5ub3JtYWxNYXRyaXggKiBub3JtYWwgKTtcclxuXHJcbiAgICAgICAgICAgICNlbGlmICR7ZGVmaW5lcy5UQU5HRU5UU1BBQ0VfTk9STUFMVEVYVFVSRX1cclxuICAgICAgICAgICAgbGV0IHRlbXBNYXBOOnZlYzM8ZjMyPiA9dGV4dHVyZVNhbXBsZShub3JtYWxUZXh0dXJlLCBiYXNlU2FtcGxlciwgaW5wdXQudlV2KS54eXogKiAyLjAgLSAxLjA7XHJcbiAgICAgICAgICAgIGxldCBtYXBOOnZlYzM8ZjMyPiA9dGVtcE1hcE4ueHkgKj0gbWF0ZXJpYWxVbmlmb3JtLm5vcm1hbFNjYWxlO1xyXG4gICAgICAgICAgICAjaWYgJHtkZWZpbmVzLlVTRV9UQU5HRU5UfVxyXG4gICAgICAgICAgICAgICAgbm9ybWFsID0gbm9ybWFsaXplKCB2VEJOICogbWFwTiApO1xyXG4gICAgICAgICAgICAjZWxzZVxyXG4gICAgICAgICAgICAgICAgbm9ybWFsID0gcGVydHVyYk5vcm1hbDJBcmIoIC0gaW5wdXQudlZpZXdQb3NpdGlvbiwgbm9ybWFsLCBtYXBOLCBmYWNlRGlyZWN0aW9uICk7XHJcbiAgICAgICAgICAgICNlbmRpZlxyXG5cclxuICAgICAgICAgICAgI2VsaWYgJHtkZWZpbmVzLlVTRV9CVU1QVEVYVFVSRX1cclxuXHJcbiAgICAgICAgICAgICAgICBub3JtYWwgPSBwZXJ0dXJiTm9ybWFsQXJiKCAtIGlucHV0LnZWaWV3UG9zaXRpb24sIG5vcm1hbCwgZEhkeHlfZndkKCksIGZhY2VEaXJlY3Rpb24gKTtcclxuICAgICAgICAjZW5kaWZcclxuXHJcbiAgICAgICAgI2lmICR7ZGVmaW5lcy5VU0VfQ0xFQVJDT0FUfVxyXG4gICAgICAgICAgICB2YXIgY2xlYXJjb2F0Tm9ybWFsOnZlYzM8ZjMyPiA9IGdlb21ldHJ5Tm9ybWFsO1xyXG4gICAgICAgICNlbmRpZlxyXG4gICAgICAgICNpZiAke2RlZmluZXMuVVNFX0NMRUFSQ09BVF9OT1JNQUxURVhUVVJFfVxyXG4gICAgICAgICAgICB2YXIgY2xlYXJjb2F0TWFwTjp2ZWMzPGYzMj4gPXRleHR1cmVTYW1wbGUoY2xlYXJjb2F0Tm9ybWFsVGV4dHVyZSwgYmFzZVNhbXBsZXIsIGlucHV0LnZVdikueHl6ICogMi4wIC0gMS4wO1xyXG4gICAgICAgICAgICBjbGVhcmNvYXRNYXBOLnh5ICo9IG1hdGVyaWFsVW5pZm9ybS5jbGVhcmNvYXROb3JtYWxTY2FsZTtcclxuICAgICAgICAgICAgI2lmICR7ZGVmaW5lcy5VU0VfVEFOR0VOVH1cclxuICAgICAgICAgICAgICAgIGNsZWFyY29hdE5vcm1hbCA9IG5vcm1hbGl6ZSggdlRCTiAqIGNsZWFyY29hdE1hcE4gKTtcclxuICAgICAgICAgICAgI2Vsc2VcclxuICAgICAgICAgICAgICAgIGNsZWFyY29hdE5vcm1hbCA9IHBlcnR1cmJOb3JtYWwyQXJiKCAtIGlucHV0LnZWaWV3UG9zaXRpb24sIGNsZWFyY29hdE5vcm1hbCwgY2xlYXJjb2F0TWFwTiwgZmFjZURpcmVjdGlvbiApO1xyXG4gICAgICAgICAgICAjZW5kaWZcclxuICAgICAgICAjZW5kaWZcclxuICAgICAgICAjaWYgJHtkZWZpbmVzLlVTRV9FTUlTU0lWRVRFWFRVUkV9XHJcbiAgICAgICAgICAgIGxldCBlbWlzc2l2ZUNvbG9yOnZlYzQ8ZjMyPiA9dGV4dHVyZVNhbXBsZShlbWlzc2l2ZVRleHR1cmUsIGJhc2VTYW1wbGVyLCBpbnB1dC52VXYpO1xyXG4gICAgICAgICAgICB0b3RhbEVtaXNzaXZlUmFkaWFuY2UgKj0gZW1pc3NpdmVDb2xvci5yZ2I7XHJcbiAgICAgICAgI2VuZGlmXHJcblxyXG4gICAgICAgIHZhciBtYXRlcmlhbDpQaHlzaWNhbE1hdGVyaWFsO1xyXG4gICAgICAgIG1hdGVyaWFsLmRpZmZ1c2VDb2xvciA9IGRpZmZ1c2VDb2xvci5yZ2IgKiAoIDEuMCAtIG1ldGFsbmVzc0ZhY3RvciApO1xyXG4gICAgICAgIGxldCBkeHk6dmVjMzxmMzI+ID0gbWF4KCBhYnMoIGRwZHgoIGdlb21ldHJ5Tm9ybWFsICkgKSwgYWJzKCBkcGR5KCBnZW9tZXRyeU5vcm1hbCApICkgKTtcclxuICAgICAgICBsZXQgZ2VvbWV0cnlSb3VnaG5lc3M6ZjMyID0gbWF4KCBtYXgoIGR4eS54LCBkeHkueSApLCBkeHkueiApO1xyXG4gICAgICAgIG1hdGVyaWFsLnJvdWdobmVzcyA9IG1heCggcm91Z2huZXNzRmFjdG9yLCAwLjA1MjUgKTtcclxuICAgICAgICBtYXRlcmlhbC5yb3VnaG5lc3MgKz0gZ2VvbWV0cnlSb3VnaG5lc3M7XHJcbiAgICAgICAgbWF0ZXJpYWwucm91Z2huZXNzID0gbWluKCBtYXRlcmlhbC5yb3VnaG5lc3MsIDEuMCApO1xyXG5cclxuICAgICAgICAjaWYgJHtkZWZpbmVzLklPUn1cclxuICAgICAgICAgICAgbWF0ZXJpYWwuaW9yID0gbWF0ZXJpYWxVbmlmb3JtLmlvcjtcclxuICAgICAgICAgICAgI2lmICR7ZGVmaW5lcy5TUEVDVUxBUn1cclxuICAgICAgICAgICAgICAgIGxldCBzcGVjdWxhckludGVuc2l0eUZhY3RvcjpmMzIgPSBtYXRlcmlhbFVuaWZvcm0uc3BlY3VsYXJJbnRlbnNpdHk7XHJcbiAgICAgICAgICAgICAgICBsZXQgc3BlY3VsYXJDb2xvckZhY3Rvcjp2ZWMzPGYzMj4gPSBtYXRlcmlhbFVuaWZvcm0uc3BlY3VsYXJDb2xvcjtcclxuICAgICAgICAgICAgICAgICNpZiAke2RlZmluZXMuVVNFX1NQRUNVTEFSSU5URU5TSVRZVEVYVFVSRX1cclxuICAgICAgICAgICAgICAgICAgICBzcGVjdWxhckludGVuc2l0eUZhY3RvciAqPXRleHR1cmVTYW1wbGUoc3BlY3VsYXJJbnRlbnNpdHlUZXh0dXJlLCBiYXNlU2FtcGxlciwgaW5wdXQudlV2KS5hO1xyXG4gICAgICAgICAgICAgICAgI2VuZGlmXHJcblxyXG4gICAgICAgICAgICAgICAgI2lmICR7ZGVmaW5lcy5VU0VfU1BFQ1VMQVJDT0xPUlRFWFRVUkV9XHJcbiAgICAgICAgICAgICAgICAgICAgc3BlY3VsYXJDb2xvckZhY3RvciAqPXRleHR1cmVTYW1wbGUoc3BlY3VsYXJDb2xvclRleHR1cmUsIGJhc2VTYW1wbGVyLCBpbnB1dC52VXYpLnJnYjtcclxuICAgICAgICAgICAgICAgICNlbmRpZlxyXG5cclxuICAgICAgICAgICAgICAgIG1hdGVyaWFsLnNwZWN1bGFyRjkwID0gbWl4KCBzcGVjdWxhckludGVuc2l0eUZhY3RvciwgMS4wLCBtZXRhbG5lc3NGYWN0b3IgKTtcclxuICAgICAgICAgICAgI2Vsc2VcclxuICAgICAgICAgICAgICAgIGxldCBzcGVjdWxhckludGVuc2l0eUZhY3RvcjpmMzIgPSAxLjA7XHJcbiAgICAgICAgICAgICAgICBsZXQgc3BlY3VsYXJDb2xvckZhY3Rvcjp2ZWMzPGYzMj4gPSB2ZWMzPGYzMj4oIDEuMCApO1xyXG4gICAgICAgICAgICAgICAgbWF0ZXJpYWwuc3BlY3VsYXJGOTAgPSAxLjA7XHJcbiAgICAgICAgICAgICNlbmRpZlxyXG4gICAgICAgICAgICBtYXRlcmlhbC5zcGVjdWxhckNvbG9yID0gbWl4KCBtaW4oIHBvdzIoICggbWF0ZXJpYWwuaW9yIC0gMS4wICkgLyAoIG1hdGVyaWFsLmlvciArIDEuMCApICkgKiBzcGVjdWxhckNvbG9yRmFjdG9yLCB2ZWMzKCAxLjAgKSApICogc3BlY3VsYXJJbnRlbnNpdHlGYWN0b3IsIGRpZmZ1c2VDb2xvci5yZ2IsIG1ldGFsbmVzc0ZhY3RvciApO1xyXG4gICAgICAgICNlbHNlXHJcbiAgICAgICAgICAgIG1hdGVyaWFsLnNwZWN1bGFyQ29sb3IgPSBtaXgoIHZlYzM8ZjMyPiggMC4wNCApLCBkaWZmdXNlQ29sb3IucmdiLCBtZXRhbG5lc3NGYWN0b3IgKTtcclxuICAgICAgICAgICAgbWF0ZXJpYWwuc3BlY3VsYXJGOTAgPSAxLjA7XHJcbiAgICAgICAgI2VuZGlmXHJcbiAgICAgICAgI2lmICR7ZGVmaW5lcy5VU0VfQ0xFQVJDT0FUfVxyXG4gICAgICAgICAgICBtYXRlcmlhbC5jbGVhcmNvYXQgPSBtYXRlcmlhbFVuaWZvcm0uY2xlYXJjb2F0O1xyXG4gICAgICAgICAgICBtYXRlcmlhbC5jbGVhcmNvYXRSb3VnaG5lc3MgPSBtYXRlcmlhbFVuaWZvcm0uY2xlYXJjb2F0Um91Z2huZXNzO1xyXG4gICAgICAgICAgICBtYXRlcmlhbC5jbGVhcmNvYXRGMCA9IHZlYzM8ZjMyPiggMC4wNCApO1xyXG4gICAgICAgICAgICBtYXRlcmlhbC5jbGVhcmNvYXRGOTAgPSAxLjA7XHJcbiAgICAgICAgICAgICNpZiAke2RlZmluZXMuVVNFX0NMRUFSQ09BVFRFWFRVUkV9XHJcbiAgICAgICAgICAgICAgICBtYXRlcmlhbC5jbGVhcmNvYXQgKj10ZXh0dXJlU2FtcGxlKGNsZWFyY29hdFRleHR1cmUsIGJhc2VTYW1wbGVyLCBpbnB1dC52VXYpLng7XHJcbiAgICAgICAgICAgICNlbmRpZlxyXG4gICAgICAgICAgICAjaWYgJHtkZWZpbmVzLlVTRV9DTEVBUkNPQVRfUk9VR0hORVNTVEVYVFVSRX1cclxuICAgICAgICAgICAgICAgIG1hdGVyaWFsLmNsZWFyY29hdFJvdWdobmVzcyAqPXRleHR1cmVTYW1wbGUoY2xlYXJjb2F0Um91Z2huZXNzVGV4dHVyZSwgYmFzZVNhbXBsZXIsIGlucHV0LnZVdikueTtcclxuICAgICAgICAgICAgI2VuZGlmXHJcbiAgICAgICAgICAgIG1hdGVyaWFsLmNsZWFyY29hdCA9IHNhdHVyYXRlKCBtYXRlcmlhbC5jbGVhcmNvYXQgKTtcclxuICAgICAgICAgICAgbWF0ZXJpYWwuY2xlYXJjb2F0Um91Z2huZXNzID0gbWF4KCBtYXRlcmlhbC5jbGVhcmNvYXRSb3VnaG5lc3MsIDAuMDUyNSApO1xyXG4gICAgICAgICAgICBtYXRlcmlhbC5jbGVhcmNvYXRSb3VnaG5lc3MgKz0gZ2VvbWV0cnlSb3VnaG5lc3M7XHJcbiAgICAgICAgICAgIG1hdGVyaWFsLmNsZWFyY29hdFJvdWdobmVzcyA9IG1pbiggbWF0ZXJpYWwuY2xlYXJjb2F0Um91Z2huZXNzLCAxLjAgKTtcclxuICAgICAgICAjZW5kaWZcclxuICAgICAgICAjaWYgJHtkZWZpbmVzLlVTRV9JUklERVNDRU5DRX1cclxuICAgICAgICAgICAgbWF0ZXJpYWwuaXJpZGVzY2VuY2UgPSBtYXRlcmlhbFVuaWZvcm0uaXJpZGVzY2VuY2U7XHJcbiAgICAgICAgICAgIG1hdGVyaWFsLmlyaWRlc2NlbmNlSU9SID0gbWF0ZXJpYWxVbmlmb3JtLmlyaWRlc2NlbmNlSU9SO1xyXG4gICAgICAgICAgICAjaWYgJHtkZWZpbmVzLlVTRV9JUklERVNDRU5DRVRFWFRVUkV9XHJcbiAgICAgICAgICAgICAgICBtYXRlcmlhbC5pcmlkZXNjZW5jZSAqPXRleHR1cmVTYW1wbGUoaXJpZGVzY2VuY2VUZXh0dXJlLCBiYXNlU2FtcGxlciwgaW5wdXQudlV2KS5yO1xyXG4gICAgICAgICAgICAjZW5kaWZcclxuICAgICAgICAgICAgI2lmICR7ZGVmaW5lcy5VU0VfSVJJREVTQ0VOQ0VfVEhJQ0tORVNTVEVYVFVSRX1cclxuICAgICAgICAgICAgICAgIG1hdGVyaWFsLmlyaWRlc2NlbmNlVGhpY2tuZXNzID0gKG1hdGVyaWFsVW5pZm9ybS5pcmlkZXNjZW5jZVRoaWNrbmVzc01heGltdW0gLSBtYXRlcmlhbFVuaWZvcm0uaXJpZGVzY2VuY2VUaGlja25lc3NNaW5pbXVtKSAqIHRleHR1cmVTYW1wbGUoaXJpZGVzY2VuY2VUaGlja25lc3NUZXh0dXJlLCBiYXNlU2FtcGxlciwgaW5wdXQudlV2KS5nICsgbWF0ZXJpYWxVbmlmb3JtLmlyaWRlc2NlbmNlVGhpY2tuZXNzTWluaW11bTtcclxuICAgICAgICAgICAgI2Vsc2VcclxuICAgICAgICAgICAgICAgIG1hdGVyaWFsLmlyaWRlc2NlbmNlVGhpY2tuZXNzID0gbWF0ZXJpYWxVbmlmb3JtLmlyaWRlc2NlbmNlVGhpY2tuZXNzTWF4aW11bTtcclxuICAgICAgICAgICAgI2VuZGlmXHJcbiAgICAgICAgI2VuZGlmXHJcbiAgICAgICAgI2lmICR7ZGVmaW5lcy5VU0VfU0hFRU59XHJcbiAgICAgICAgICAgIG1hdGVyaWFsLnNoZWVuQ29sb3IgPSBtYXRlcmlhbFVuaWZvcm0uc2hlZW5Db2xvcjtcclxuICAgICAgICAgICAgI2lmICR7ZGVmaW5lcy5VU0VfU0hFRU5DT0xPUlRFWFRVUkV9XHJcbiAgICAgICAgICAgICAgICBtYXRlcmlhbC5zaGVlbkNvbG9yICo9dGV4dHVyZVNhbXBsZShzaGVlbkNvbG9yVGV4dHVyZSwgYmFzZVNhbXBsZXIsIGlucHV0LnZVdikucmdiO1xyXG4gICAgICAgICAgICAjZW5kaWZcclxuICAgICAgICAgICAgbWF0ZXJpYWwuc2hlZW5Sb3VnaG5lc3MgPSBjbGFtcCggbWF0ZXJpYWxVbmlmb3JtLnNoZWVuUm91Z2huZXNzLCAwLjA3LCAxLjAgKTtcclxuICAgICAgICAgICAgI2lmICR7ZGVmaW5lcy5VU0VfU0hFRU5ST1VHSE5FU1NURVhUVVJFfVxyXG4gICAgICAgICAgICAgICAgbWF0ZXJpYWwuc2hlZW5Sb3VnaG5lc3MgKj10ZXh0dXJlU2FtcGxlKHNoZWVuUm91Z2huZXNzVGV4dHVyZSwgYmFzZVNhbXBsZXIsIGlucHV0LnZVdikuYTtcclxuICAgICAgICAgICAgI2VuZGlmXHJcbiAgICAgICAgI2VuZGlmXHJcbiAgICAgICAgXHJcbiAgICAgICAgdmFyIGdlb21ldHJ5Okdlb21ldHJpY0NvbnRleHQ7XHJcbiAgICAgICAgZ2VvbWV0cnkucG9zaXRpb24gPSAtIGlucHV0LnZWaWV3UG9zaXRpb247XHJcbiAgICAgICAgZ2VvbWV0cnkubm9ybWFsID0gbm9ybWFsO1xyXG4gICAgICAgLy8gZ2VvbWV0cnkudmlld0RpciA9ICggaXNPcnRob2dyYXBoaWMgKSA/IHZlYzMoIDAsIDAsIDEgKSA6IG5vcm1hbGl6ZSggaW5wdXQudlZpZXdQb3NpdGlvbiApO1xyXG4gICAgICAgIGdlb21ldHJ5LnZpZXdEaXIgPSBub3JtYWxpemUoIGlucHV0LnZWaWV3UG9zaXRpb24pOyBcclxuXHJcbiAgICAgICAgI2lmICR7ZGVmaW5lcy5VU0VfQ0xFQVJDT0FUfVxyXG4gICAgICAgICAgICBnZW9tZXRyeS5jbGVhcmNvYXROb3JtYWwgPSBjbGVhcmNvYXROb3JtYWw7XHJcbiAgICAgICAgI2VuZGlmXHJcblxyXG4gICAgICAgICNpZiAke2RlZmluZXMuVVNFX0lSSURFU0NFTkNFfVxyXG4gICAgICAgICAgICBsZXQgZG90TlZpOmYzMiA9IHNhdHVyYXRlKCBkb3QoIG5vcm1hbCwgZ2VvbWV0cnkudmlld0RpciApICk7XHJcbiAgICAgICAgICAgIGlmICggbWF0ZXJpYWwuaXJpZGVzY2VuY2VUaGlja25lc3MgPT0gMC4wICkge1xyXG4gICAgICAgICAgICAgICAgbWF0ZXJpYWwuaXJpZGVzY2VuY2UgPSAwLjA7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBtYXRlcmlhbC5pcmlkZXNjZW5jZSA9IHNhdHVyYXRlKCBtYXRlcmlhbC5pcmlkZXNjZW5jZSApO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGlmICggbWF0ZXJpYWwuaXJpZGVzY2VuY2UgPiAwLjAgKSB7XHJcbiAgICAgICAgICAgICAgICBtYXRlcmlhbC5pcmlkZXNjZW5jZUZyZXNuZWwgPSBldmFsSXJpZGVzY2VuY2UoIDEuMCwgbWF0ZXJpYWwuaXJpZGVzY2VuY2VJT1IsIGRvdE5WaSwgbWF0ZXJpYWwuaXJpZGVzY2VuY2VUaGlja25lc3MsIG1hdGVyaWFsLnNwZWN1bGFyQ29sb3IgKTtcclxuICAgICAgICAgICAgICAgIG1hdGVyaWFsLmlyaWRlc2NlbmNlRjAgPSBTY2hsaWNrX3RvX0YwKCBtYXRlcmlhbC5pcmlkZXNjZW5jZUZyZXNuZWwsIDEuMCwgZG90TlZpICk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAjZW5kaWZcclxuXHJcbiAgICAgICAgdmFyIGlibElycmFkaWFuY2U6dmVjMzxmMzI+ID0gdmVjMzxmMzI+KCAwLjAgKTtcclxuICAgICAgICB2YXIgaXJyYWRpYW5jZTp2ZWMzPGYzMj4gPSBnZXRBbWJpZW50TGlnaHRJcnJhZGlhbmNlKGNvbW1vbkxpZ2h0c1Bhcm1zLmFtYmllbnQpO1xyXG4gICAgICAgIC8vaXJyYWRpYW5jZSArPSBnZXRMaWdodFByb2JlSXJyYWRpYW5jZSggbGlnaHRQcm9iZSwgZ2VvbWV0cnkubm9ybWFsLHN5c3RlbVVuaWZvcm0udmlld01hdHJpeCApO1xyXG5cclxuICAgICAgICB2YXIgcmFkaWFuY2U6dmVjMzxmMzI+ID0gdmVjMzxmMzI+KCAwLjAgKTtcclxuICAgICAgICB2YXIgY2xlYXJjb2F0UmFkaWFuY2U6dmVjMzxmMzI+ID0gdmVjMzxmMzI+KCAwLjAgKTtcclxuXHJcbiAgICAgICAgI2lmICR7ZGVmaW5lcy5VU0VfTElHSFRURVhUVVJFfVxyXG4gICAgICAgICAgICBsZXQgbGlnaHRNYXBUZXhlbDp2ZWM0PGYzMj4gPXRleHR1cmVTYW1wbGUobGlnaHRUZXh0dXJlLCBiYXNlU2FtcGxlciwgaW5wdXQudlV2Mik7XHJcbiAgICAgICAgICAgIGxldCBsaWdodE1hcElycmFkaWFuY2U6dmVjMzxmMzI+ID0gbGlnaHRNYXBUZXhlbC5yZ2IgKiBtYXRlcmlhbFVuaWZvcm0ubGlnaHRUZXh0dXJlSW50ZW5zaXR5O1xyXG4gICAgICAgICAgICBpcnJhZGlhbmNlICs9IGxpZ2h0TWFwSXJyYWRpYW5jZTtcclxuICAgICAgICAjZW5kaWZcclxuICAgICAgICAvLyYmIGRlZmluZXMuU1RBTkRBUkQmJmRlZmluZXMuRU5WVEVYVFVSRV9UWVBFX0NVQkVfVVZcclxuICAgICAgICAjaWYgJHtkZWZpbmVzLlVTRV9FTlZURVhUVVJFfSBcclxuICAgICAgICAgICAgaWJsSXJyYWRpYW5jZSArPSBnZXRJQkxJcnJhZGlhbmNlKCBnZW9tZXRyeS5ub3JtYWwsYmFzZVNhbXBsZXIsc3lzdGVtVW5pZm9ybS52aWV3TWF0cml4ICk7XHJcbiAgICAgICAgI2VuZGlmXHJcbiAgICAgICAgI2lmICR7ZGVmaW5lcy5VU0VfRU5WVEVYVFVSRX1cclxuICAgICAgICAgICAgcmFkaWFuY2UgKz0gZ2V0SUJMUmFkaWFuY2UoIGdlb21ldHJ5LnZpZXdEaXIsYmFzZVNhbXBsZXIsc3lzdGVtVW5pZm9ybS52aWV3TWF0cml4LCBnZW9tZXRyeS5ub3JtYWwsIG1hdGVyaWFsVW5pZm9ybS5yb3VnaG5lc3MgKTtcclxuICAgICAgICAgICAgI2lmICR7ZGVmaW5lcy5VU0VfQ0xFQVJDT0FUfVxyXG4gICAgICAgICAgICAgICAgY2xlYXJjb2F0UmFkaWFuY2UgKz0gZ2V0SUJMUmFkaWFuY2UoIGdlb21ldHJ5LnZpZXdEaXIsYmFzZVNhbXBsZXIsc3lzdGVtVW5pZm9ybS52aWV3TWF0cml4LCBnZW9tZXRyeS5jbGVhcmNvYXROb3JtYWwsIG1hdGVyaWFsLmNsZWFyY29hdFJvdWdobmVzcyApO1xyXG4gICAgICAgICAgICAjZW5kaWZcclxuICAgICAgICAjZW5kaWZcclxuICAgICAgICAvL+ebtOaOpeWFieeFp1xyXG4gICAgICAgICAgICBsZXQgZGlyUmVmbGVjdGVkTGlnaHQ6UmVmbGVjdGVkTGlnaHQ9IHBhcnNlTGlnaHRzKGdlb21ldHJ5LG1hdGVyaWFsKTtcclxuICAgICAgICAgICAgcmVmbGVjdGVkTGlnaHQuZGlyZWN0RGlmZnVzZSArPWRpclJlZmxlY3RlZExpZ2h0LmRpcmVjdERpZmZ1c2U7XHJcbiAgICAgICAgICAgIHJlZmxlY3RlZExpZ2h0LmRpcmVjdFNwZWN1bGFyICs9ZGlyUmVmbGVjdGVkTGlnaHQuZGlyZWN0U3BlY3VsYXI7XHJcbiAgICAgICAgLy/pl7TmjqXmvKvlj43lsIRcclxuICAgICAgICAgICAgbGV0IGluZGlyZWN0RGlmZnVzZUxpZ2h0OlJlZmxlY3RlZExpZ2h0PSBSRV9JbmRpcmVjdERpZmZ1c2VfUGh5c2ljYWwoIGlycmFkaWFuY2UsIGdlb21ldHJ5LCBtYXRlcmlhbCk7XHJcbiAgICAgICAgICAgIHJlZmxlY3RlZExpZ2h0LmRpcmVjdERpZmZ1c2UgKz1pbmRpcmVjdERpZmZ1c2VMaWdodC5pbmRpcmVjdERpZmZ1c2U7XHJcbiAgICAgICAgICAgIHJlZmxlY3RlZExpZ2h0LmRpcmVjdFNwZWN1bGFyICs9aW5kaXJlY3REaWZmdXNlTGlnaHQuaW5kaXJlY3RTcGVjdWxhcjtcclxuICAgICAgICAvL+mXtOaOpemrmOWFiVxyXG4gICAgICAgICAgICBsZXQgaW5kaXJlY3RTcGVjdWxhckxpZ2h0OlJlZmxlY3RlZExpZ2h0PVJFX0luZGlyZWN0U3BlY3VsYXJfUGh5c2ljYWwoIHJhZGlhbmNlLCBpYmxJcnJhZGlhbmNlLCBjbGVhcmNvYXRSYWRpYW5jZSwgZ2VvbWV0cnksIG1hdGVyaWFsKTtcclxuICAgICAgICAgICAgcmVmbGVjdGVkTGlnaHQuZGlyZWN0RGlmZnVzZSArPWluZGlyZWN0U3BlY3VsYXJMaWdodC5pbmRpcmVjdERpZmZ1c2U7XHJcbiAgICAgICAgICAgIHJlZmxlY3RlZExpZ2h0LmRpcmVjdFNwZWN1bGFyICs9aW5kaXJlY3RTcGVjdWxhckxpZ2h0LmluZGlyZWN0U3BlY3VsYXI7XHJcbiAgICAgICAgLy/njq/looPlhYnpga7olL1cclxuICAgICAgICAjaWYgJHtkZWZpbmVzLlVTRV9BT1RFWFRVUkV9XHJcbiAgICAgICAgICAgIGxldCBhbWJpZW50T2NjbHVzaW9uOmYzMiA9ICh0ZXh0dXJlU2FtcGxlKGFvVGV4dHVyZSwgYmFzZVNhbXBsZXIsIGlucHV0LnZVdjIpLnIgLSAxLjAgKSAqIG1hdGVyaWFsVW5pZm9ybS5hb1RleHR1cmVJbnRlbnNpdHkgKyAxLjA7XHJcblxyXG4gICAgICAgICAgICByZWZsZWN0ZWRMaWdodC5pbmRpcmVjdERpZmZ1c2UgKj0gYW1iaWVudE9jY2x1c2lvbjtcclxuICAgICAgICAgICAgLy8mJmRlZmluZXMuU1RBTkRBUkRcclxuICAgICAgICAgICAgI2lmICR7ZGVmaW5lcy5VU0VfRU5WVEVYVFVSRX0gXHJcbiAgICAgICAgICAgICAgICBsZXQgZG90TlY6ZjMyID0gc2F0dXJhdGUoIGRvdCggZ2VvbWV0cnkubm9ybWFsLCBnZW9tZXRyeS52aWV3RGlyICkgKTtcclxuICAgICAgICAgICAgICAgIHJlZmxlY3RlZExpZ2h0LmluZGlyZWN0U3BlY3VsYXIgKj0gY29tcHV0ZVNwZWN1bGFyT2NjbHVzaW9uKCBkb3ROViwgYW1iaWVudE9jY2x1c2lvbiwgbWF0ZXJpYWwucm91Z2huZXNzICk7XHJcbiAgICAgICAgICAgICNlbmRpZlxyXG4gICAgICAgICNlbmRpZlxyXG5cclxuICAgICAgICB2YXIgdG90YWxEaWZmdXNlOnZlYzM8ZjMyPiA9IHJlZmxlY3RlZExpZ2h0LmRpcmVjdERpZmZ1c2UgKyByZWZsZWN0ZWRMaWdodC5pbmRpcmVjdERpZmZ1c2U7XHJcbiAgICAgICAgdmFyIHRvdGFsU3BlY3VsYXI6dmVjMzxmMzI+ID0gcmVmbGVjdGVkTGlnaHQuZGlyZWN0U3BlY3VsYXIgKyByZWZsZWN0ZWRMaWdodC5pbmRpcmVjdFNwZWN1bGFyO1xyXG4gICAgICAgIC8v6YCP5bCEXHJcbiAgICAgICAgI2lmICR7ZGVmaW5lcy5VU0VfVFJBTlNNSVNTSU9OfVxyXG4gICAgICAgICAgICBtYXRlcmlhbC50cmFuc21pc3Npb24gPSBtYXRlcmlhbFVuaWZvcm0udHJhbnNtaXNzaW9uO1xyXG4gICAgICAgICAgICBtYXRlcmlhbC50cmFuc21pc3Npb25BbHBoYSA9IDEuMDtcclxuICAgICAgICAgICAgbWF0ZXJpYWwudGhpY2tuZXNzID0gbWF0ZXJpYWxVbmlmb3JtLnRoaWNrbmVzcztcclxuICAgICAgICAgICAgbWF0ZXJpYWwuYXR0ZW51YXRpb25EaXN0YW5jZSA9IG1hdGVyaWFsVW5pZm9ybS5hdHRlbnVhdGlvbkRpc3RhbmNlO1xyXG4gICAgICAgICAgICBtYXRlcmlhbC5hdHRlbnVhdGlvbkNvbG9yID0gbWF0ZXJpYWxVbmlmb3JtLmF0dGVudWF0aW9uQ29sb3I7XHJcbiAgICAgICAgICAgICNpZiAke2RlZmluZXMuVVNFX1RSQU5TTUlTU0lPTlRFWFRVUkV9XHJcbiAgICAgICAgICAgICAgICBtYXRlcmlhbC50cmFuc21pc3Npb24gKj10ZXh0dXJlU2FtcGxlKHRyYW5zbWlzc2lvblRleHR1cmUsIGJhc2VTYW1wbGVyLCBpbnB1dC52VXYpLnI7XHJcbiAgICAgICAgICAgICNlbmRpZlxyXG4gICAgICAgICAgICAjaWYgJHtkZWZpbmVzLlVTRV9USElDS05FU1NURVhUVVJFfVxyXG4gICAgICAgICAgICAgICAgbWF0ZXJpYWwudGhpY2tuZXNzICo9dGV4dHVyZVNhbXBsZSh0aGlja25lc3NUZXh0dXJlLCBiYXNlU2FtcGxlciwgaW5wdXQudlV2KS5nO1xyXG4gICAgICAgICAgICAjZW5kaWZcclxuICAgICAgICAgICAgbGV0IHBvczp2ZWMzPGYzMj4gPSB2V29ybGRQb3NpdGlvbjtcclxuICAgICAgICAgICAgbGV0IHY6dmVjMzxmMzI+ID0gbm9ybWFsaXplKCBjYW1lcmFQb3NpdGlvbiAtIHBvcyApO1xyXG4gICAgICAgICAgICBsZXQgbjp2ZWMzPGYzMj4gPSBpbnZlcnNlVHJhbnNmb3JtRGlyZWN0aW9uKCBub3JtYWwsIHN5c3RlbVVuaWZvcm0udmlld01hdHJpeCApO1xyXG4gICAgICAgICAgICBsZXQgdHJhbnNtaXNzaW9uOnZlYzQ8ZjMyPiA9IGdldElCTFZvbHVtZVJlZnJhY3Rpb24oXHJcbiAgICAgICAgICAgIG4sIHYsIG1hdGVyaWFsLnJvdWdobmVzcywgbWF0ZXJpYWwuZGlmZnVzZUNvbG9yLCBtYXRlcmlhbC5zcGVjdWxhckNvbG9yLCBtYXRlcmlhbC5zcGVjdWxhckY5MCwgcG9zLCBtb2RlbE1hdHJpeCwgc3lzdGVtVW5pZm9ybS52aWV3TWF0cml4LCBzeXN0ZW1Vbmlmb3JtLnByb2plY3Rpb25NYXRyaXgsIG1hdGVyaWFsLmlvciwgbWF0ZXJpYWwudGhpY2tuZXNzLCBtYXRlcmlhbC5hdHRlbnVhdGlvbkNvbG9yLCBtYXRlcmlhbC5hdHRlbnVhdGlvbkRpc3RhbmNlICk7XHJcbiAgICAgICAgICAgIG1hdGVyaWFsLnRyYW5zbWlzc2lvbkFscGhhID0gbWl4KCBtYXRlcmlhbC50cmFuc21pc3Npb25BbHBoYSwgdHJhbnNtaXNzaW9uLmEsIG1hdGVyaWFsLnRyYW5zbWlzc2lvbiApO1xyXG4gICAgICAgICAgICB0b3RhbERpZmZ1c2UgPSBtaXgoIHRvdGFsRGlmZnVzZSwgdHJhbnNtaXNzaW9uLnJnYiwgbWF0ZXJpYWwudHJhbnNtaXNzaW9uICk7XHJcbiAgICAgICAgI2VuZGlmXHJcblxyXG4gICAgICAgIGxldCBvdXRnb2luZ0xpZ2h0OnZlYzM8ZjMyPiA9IHRvdGFsRGlmZnVzZSArIHRvdGFsU3BlY3VsYXIgKyB0b3RhbEVtaXNzaXZlUmFkaWFuY2U7XHJcblxyXG4gICAgICAgICNpZiAke2RlZmluZXMuVVNFX1NIRUVOfVxyXG4gICAgICAgICAgICBsZXQgc2hlZW5FbmVyZ3lDb21wOmYzMiA9IDEuMCAtIDAuMTU3ICogbWF4MyggbWF0ZXJpYWwuc2hlZW5Db2xvciApO1xyXG4gICAgICAgICAgICBvdXRnb2luZ0xpZ2h0ID0gb3V0Z29pbmdMaWdodCAqIHNoZWVuRW5lcmd5Q29tcCArIHNoZWVuU3BlY3VsYXI7XHJcbiAgICAgICAgI2VuZGlmXHJcblxyXG4gICAgICAgICNpZiAke2RlZmluZXMuVVNFX0NMRUFSQ09BVH1cclxuICAgICAgICAgICAgbGV0IGRvdE5WY2M6ZjMyID0gc2F0dXJhdGUoIGRvdCggZ2VvbWV0cnkuY2xlYXJjb2F0Tm9ybWFsLCBnZW9tZXRyeS52aWV3RGlyICkgKTtcclxuICAgICAgICAgICAgbGV0IEZjYzp2ZWMzPGYzMj4gPSBGX1NjaGxpY2soIG1hdGVyaWFsLmNsZWFyY29hdEYwLCBtYXRlcmlhbC5jbGVhcmNvYXRGOTAsIGRvdE5WY2MgKTtcclxuICAgICAgICAgICAgb3V0Z29pbmdMaWdodCA9IG91dGdvaW5nTGlnaHQgKiAoIDEuMCAtIG1hdGVyaWFsLmNsZWFyY29hdCAqIEZjYyApICsgY2xlYXJjb2F0U3BlY3VsYXIgKiBtYXRlcmlhbC5jbGVhcmNvYXQ7XHJcbiAgICAgICAgI2VuZGlmXHJcblxyXG4gICAgICAgICNpZiAke2RlZmluZXMuVVNFX1RSQU5TTUlTU0lPTn1cclxuICAgICAgICAgICAgZGlmZnVzZUNvbG9yLmEgKj0gbWF0ZXJpYWwudHJhbnNtaXNzaW9uQWxwaGEgKyAwLjE7XHJcbiAgICAgICAgI2VuZGlmXHJcblxyXG4gICAgICAgIHZhciBmaW5uYWxDb2xvcjp2ZWM0PGYzMj47XHJcbiAgICAgICAgZmlubmFsQ29sb3IgPSB2ZWM0PGYzMj4oIG91dGdvaW5nTGlnaHQsIGRpZmZ1c2VDb2xvci5hICk7XHJcbiAgICAgICAgI2lmICR7ZGVmaW5lcy5UT05FX01BUFBJTkd9XHJcbiAgICAgICAgICAgZmlubmFsQ29sb3IucmdiID0gdG9uZU1hcHBpbmcoIGZpbm5hbENvbG9yLnJnYixtYXRlcmlhbFVuaWZvcm0udG9uZU1hcHBpbmdFeHBvc3VyZSApO1xyXG4gICAgICAgICNlbmRpZlxyXG5cclxuICAgICAgICAgIGZpbm5hbENvbG9yID0gbGluZWFyVG9PdXRwdXRUZXhlbCggZmlubmFsQ29sb3IpO1xyXG5cclxuICAgICAgICAjaWYgJHtkZWZpbmVzLlBSRU1VTFRJUExJRURfQUxQSEF9XHJcbiAgICAgICAgICAgIGZpbm5hbENvbG9yLnJnYiAqPSBmaW5uYWxDb2xvci5hO1xyXG4gICAgICAgICNlbmRpZlxyXG4gICAgICAgICNpZiAke2RlZmluZXMuRElUSEVSSU5HfVxyXG4gICAgICAgICAgICBmaW5uYWxDb2xvci5yZ2IgPSBkaXRoZXJpbmcoIGZpbm5hbENvbG9yLnJnYiApO1xyXG4gICAgICAgICNlbmRpZlxyXG4gICAgICAgIHJldHVybiBmaW5uYWxDb2xvcjtcclxuICAgIH1gO1xyXG59XHJcbiIsImltcG9ydCB7IHdnc2xQYXJzZURlZmluZXMgfSBmcm9tIFwiLi4vV2dzbFByZXByb2Nlc3NvclwiO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gcGJyVmVydChkZWZpbmVzKSB7XHJcbiAgcmV0dXJuIHdnc2xQYXJzZURlZmluZXNgXHJcbiAgICAjaW5jbHVkZSA8cGJyU3RydWN0PlxyXG4gICAgc3RydWN0IFZlcnRleE91dHB1dCB7XHJcbiAgICAgICAgQGJ1aWx0aW4ocG9zaXRpb24pIHBvc2l0aW9uOiB2ZWM0PGYzMj4sXHJcbiAgICAgICAgQGxvY2F0aW9uKDApIHZVdjogdmVjMjxmMzI+LFxyXG4gICAgICAgIEBsb2NhdGlvbigxKSB2Vmlld1Bvc2l0aW9uOiB2ZWMzPGYzMj4sIC8vIFZlY3RvciBmcm9tIHZlcnRleCB0byBjYW1lcmEuXHJcbiAgICAgICAgQGxvY2F0aW9uKDIpIHZXb3JsZFBvc2l0aW9uOiB2ZWMzPGYzMj4sXHJcbiAgICAgICAgQGxvY2F0aW9uKDMpIHZOb3JtYWw6IHZlYzM8ZjMyPixcclxuICAgICAgICAvLyDlj6/pgIlcclxuICAgICAgICAjaWYgJHtkZWZpbmVzLlVTRV9MSUdIVFRFWFRVUkUgfHwgZGVmaW5lcy5VU0VfQU9URVhUVVJFfVxyXG4gICAgICAgICAgICBAbG9jYXRpb24oJHtkZWZpbmVzLnZVdjJPdXRMb2NhdGlvbn0pIHZVdjI6IHZlYzI8ZjMyPixcclxuICAgICAgICAjZW5kaWZcclxuXHJcbiAgICAgICAgI2lmICR7ZGVmaW5lcy5VU0VfQ09MT1JfQUxQSEF9XHJcbiAgICAgICAgICAgIEBsb2NhdGlvbigke2RlZmluZXMudkNvbG9yT3V0TG9jYXRpb259KSB2Q29sb3I6IHZlYzQ8ZjMyPixcclxuICAgICAgICAjZWxpZiAke2RlZmluZXMuVVNFX0NPTE9SIHx8IGRlZmluZXMuVVNFX0lOU1RBTkNJTkdfQ09MT1J9XHJcbiAgICAgICAgICAgIEBsb2NhdGlvbigke2RlZmluZXMudkNvbG9yT3V0TG9jYXRpb259KSB2Q29sb3I6IHZlYzM8ZjMyPixcclxuICAgICAgICAjZW5kaWZcclxuXHJcbiAgICAgICAgI2lmICR7ZGVmaW5lcy5VU0VfVEFOR0VOVH1cclxuICAgICAgICAgICAgQGxvY2F0aW9uKCR7ZGVmaW5lcy52VGFuZ2VudE91dExvY2F0aW9ufSkgdlRhbmdlbnQ6IHZlYzM8ZjMyPixcclxuICAgICAgICAgICAgQGxvY2F0aW9uKCR7ZGVmaW5lcy52Qml0YW5nZW50T3V0TG9jYXRpb259KSB2Qml0YW5nZW50OiB2ZWMzPGYzMj4sXHJcbiAgICAgICAgI2VuZGlmXHJcbiAgICB9O1xyXG4gICAgc3RydWN0IEdsb2JhbFVuaWZvcm0ge1xyXG4gICAgICAgIHByb2plY3Rpb25NYXRyaXg6IG1hdDR4NDxmMzI+LFxyXG4gICAgICAgIHZpZXdNYXRyaXg6IG1hdDR4NDxmMzI+LFxyXG4gICAgICAgIGludmVyc2VWaWV3TWF0cml4OiBtYXQ0eDQ8ZjMyPixcclxuICAgICAgICBjYW1lcmFQb3NpdGlvbjogdmVjMzxmMzI+LFxyXG4gICAgfTtcclxuXHJcbiAgICAvL3RleHR1cmUgYW5kIHNhbXBsZXJcclxuICAgIC8vIEBncm91cCgwKSBAYmluZGluZygke2RlZmluZXMuc2FtcGxlckJpbmRpbmd9KSB2YXIgYmFzZVNhbXBsZXI6IHNhbXBsZXI7XHJcbiAgICAjaWYgJHtkZWZpbmVzLlVTRV9TS0lOTklOR31cclxuICAgICAgICAvL3VuaWZvcm0gaGlnaHAgc2FtcGxlcjJEIGJvbmVUZXh0dXJlO1xyXG4gICAgICAgIEBncm91cCgwKSBAYmluZGluZygke1xyXG4gICAgICAgICAgZGVmaW5lcy5ib25lVGV4dHVyZUJpbmRpbmdcclxuICAgICAgICB9KSB2YXIgYm9uZVRleHR1cmU6IHRleHR1cmVfMmQ8ZjMyPjtcclxuICAgICNlbmRpZlxyXG5cclxuICAgICNpZiAke2RlZmluZXMuVVNFX0RJU1BMQUNFTUVOVFRFWFRVUkV9XHJcbiAgICAgICAgLy91bmlmb3JtIHNhbXBsZXIyRCBkaXNwbGFjZW1lbnRNYXA7XHJcbiAgICAgICAgQGdyb3VwKDApIEBiaW5kaW5nKCR7XHJcbiAgICAgICAgICBkZWZpbmVzLmRpc3BsYWNlbWVudFRleHR1cmVCaW5kaW5nXHJcbiAgICAgICAgfSkgdmFyIGRpc3BsYWNlbWVudE1hcDogdGV4dHVyZV8yZDxmMzI+O1xyXG4gICAgI2VuZGlmXHJcblxyXG4gICAgI2lmICR7ZGVmaW5lcy5NT1JQSFRBUkdFVFNfVEVYVFVSRX1cclxuICAgICAgICAvL3VuaWZvcm0gc2FtcGxlcjJEQXJyYXkgbW9ycGhUYXJnZXRzVGV4dHVyZTtcclxuICAgICAgICBAZ3JvdXAoMCkgQGJpbmRpbmcoJHtcclxuICAgICAgICAgIGRlZmluZXMubW9ycGhUYXJnZXRzVGV4dHVyZUJpbmRpbmdcclxuICAgICAgICB9KSB2YXIgbW9ycGhUYXJnZXRzVGV4dHVyZTogdGV4dHVyZV8yZF9hcnJheTxmMzI+O1xyXG4gICAgI2VuZGlmXHJcblxyXG4gICAgc3RydWN0IFZlcnRleElucHV0IHtcclxuICAgICAgICBAbG9jYXRpb24oMCkgcG9zaXRpb246IHZlYzM8ZjMyPiwgIFxyXG5cclxuICAgICAgICBAbG9jYXRpb24oMSkgbm9ybWFsOiB2ZWMzPGYzMj4sXHJcblxyXG4gICAgICAgIEBsb2NhdGlvbigyKSB1djogdmVjMjxmMzI+LFxyXG4gICAgICAgICNpZiAke2RlZmluZXMuVVNFX0xJR0hUVEVYVFVSRSB8fCBkZWZpbmVzLlVTRV9BT1RFWFRVUkV9XHJcbiAgICAgICAgICAgIEBsb2NhdGlvbigke2RlZmluZXMudXYyTG9jYXRpb259KSB1djI6dmVjMjxmMzI+LFxyXG4gICAgICAgICNlbmRpZlxyXG4gICAgICAgICNpZiAke2RlZmluZXMuVVNFX0lOU1RBTkNJTkd9XHJcbiAgICAgICAgICAgIEBsb2NhdGlvbigke1xyXG4gICAgICAgICAgICAgIGRlZmluZXMuaW5zdGFuY2VNYXRyaXhMb2NhdGlvblxyXG4gICAgICAgICAgICB9KSBpbnN0YW5jZU1hdHJpeDptYXQ0eDQ8ZjMyPixcclxuICAgICAgICAjZW5kaWZcclxuICAgICAgICAjaWYgJHtkZWZpbmVzLlVTRV9JTlNUQU5DSU5HX0NPTE9SfVxyXG4gICAgICAgICAgICBAbG9jYXRpb24oJHtkZWZpbmVzLmluc3RhbmNlQ29sb3JMb2NhdGlvbn0pIGluc3RhbmNlQ29sb3I6dmVjMzxmMzI+LFxyXG4gICAgICAgICNlbmRpZlxyXG4gICAgICAgIFxyXG4gICAgICAgICNpZiAke2RlZmluZXMuVVNFX1RBTkdFTlR9XHJcbiAgICAgICAgICAgIEBsb2NhdGlvbigke2RlZmluZXMudGFuZ2VudExvY2F0aW9ufSkgdGFuZ2VudDp2ZWM0PGYzMj4sXHJcbiAgICAgICAgI2VuZGlmXHJcbiAgICAgICAgI2lmICR7ZGVmaW5lcy5VU0VfQ09MT1JfQUxQSEF9XHJcbiAgICAgICAgICAgIEBsb2NhdGlvbigke2RlZmluZXMuY29sb3JMb2NhdGlvbn0pIGNvbG9yOnZlYzQ8ZjMyPixcclxuICAgICAgICAjZWxpZiAke2RlZmluZXMuVVNFX0NPTE9SfVxyXG4gICAgICAgICAgICBAbG9jYXRpb24oJHtkZWZpbmVzLmNvbG9yTG9jYXRpb259KSBjb2xvcjp2ZWMzPGYzMj4sXHJcbiAgICAgICAgI2VuZGlmXHJcblxyXG4gICAgICAgICNpZiAke2RlZmluZXMuVVNFX01PUlBIVEFSR0VUUyAmJiAhZGVmaW5lcy5NT1JQSFRBUkdFVFNfVEVYVFVSRX1cclxuICAgICAgICAgICAgQGxvY2F0aW9uKCR7ZGVmaW5lcy5tb3JwaFRhcmdldDBMb2NhdGlvbn0pIG1vcnBoVGFyZ2V0MDp2ZWMzPGYzMj4sXHJcblxyXG4gICAgICAgICAgICBAbG9jYXRpb24oJHtkZWZpbmVzLm1vcnBoVGFyZ2V0MUxvY2F0aW9ufSkgbW9ycGhUYXJnZXQxOnZlYzM8ZjMyPixcclxuXHJcbiAgICAgICAgICAgIEBsb2NhdGlvbigke2RlZmluZXMubW9ycGhUYXJnZXQyTG9jYXRpb259KSBtb3JwaFRhcmdldDI6dmVjMzxmMzI+LFxyXG5cclxuICAgICAgICAgICAgQGxvY2F0aW9uKCR7ZGVmaW5lcy5tb3JwaFRhcmdldDNMb2NhdGlvbn0pIG1vcnBoVGFyZ2V0Mzp2ZWMzPGYzMj4sXHJcbiAgICAgICAgICAgICNpZiAke2RlZmluZXMuVVNFX01PUlBITk9STUFMU31cclxuICAgICAgICAgICAgICAgIEBsb2NhdGlvbigke1xyXG4gICAgICAgICAgICAgICAgICBkZWZpbmVzLm1vcnBoTm9ybWFsMExvY2F0aW9uXHJcbiAgICAgICAgICAgICAgICB9KSBtb3JwaE5vcm1hbDA6dmVjMzxmMzI+LFxyXG5cclxuICAgICAgICAgICAgICAgIEBsb2NhdGlvbigke1xyXG4gICAgICAgICAgICAgICAgICBkZWZpbmVzLm1vcnBoTm9ybWFsMUxvY2F0aW9uXHJcbiAgICAgICAgICAgICAgICB9KSBtb3JwaE5vcm1hbDE6dmVjMzxmMzI+LFxyXG5cclxuICAgICAgICAgICAgICAgIEBsb2NhdGlvbigke1xyXG4gICAgICAgICAgICAgICAgICBkZWZpbmVzLm1vcnBoTm9ybWFsMkxvY2F0aW9uXHJcbiAgICAgICAgICAgICAgICB9KSBtb3JwaE5vcm1hbDI6dmVjMzxmMzI+LFxyXG5cclxuICAgICAgICAgICAgICAgIEBsb2NhdGlvbigke1xyXG4gICAgICAgICAgICAgICAgICBkZWZpbmVzLm1vcnBoTm9ybWFsM0xvY2F0aW9uXHJcbiAgICAgICAgICAgICAgICB9KSBtb3JwaE5vcm1hbDM6dmVjMzxmMzI+LFxyXG4gICAgICAgICAgICAjZWxzZVxyXG4gICAgICAgICAgICAgICAgQGxvY2F0aW9uKCR7XHJcbiAgICAgICAgICAgICAgICAgIGRlZmluZXMubW9ycGhUYXJnZXQ0TG9jYXRpb25cclxuICAgICAgICAgICAgICAgIH0pIG1vcnBoVGFyZ2V0NDp2ZWMzPGYzMj4sXHJcblxyXG4gICAgICAgICAgICAgICAgQGxvY2F0aW9uKCR7XHJcbiAgICAgICAgICAgICAgICAgIGRlZmluZXMubW9ycGhUYXJnZXQ1TG9jYXRpb25cclxuICAgICAgICAgICAgICAgIH0pIG1vcnBoVGFyZ2V0NTp2ZWMzPGYzMj4sXHJcblxyXG4gICAgICAgICAgICAgICAgQGxvY2F0aW9uKCR7XHJcbiAgICAgICAgICAgICAgICAgIGRlZmluZXMubW9ycGhUYXJnZXQ2TG9jYXRpb25cclxuICAgICAgICAgICAgICAgIH0pIG1vcnBoVGFyZ2V0Njp2ZWMzPGYzMj4sXHJcblxyXG4gICAgICAgICAgICAgICAgQGxvY2F0aW9uKCR7XHJcbiAgICAgICAgICAgICAgICAgIGRlZmluZXMubW9ycGhUYXJnZXQ3TG9jYXRpb25cclxuICAgICAgICAgICAgICAgIH0pIG1vcnBoVGFyZ2V0Nzp2ZWMzPGYzMj4sXHJcbiAgICAgICAgICAgICNlbmRpZlxyXG4gICAgICAgICNlbmRpZlxyXG4gICAgICAgICNpZiAke2RlZmluZXMuVVNFX1NLSU5OSU5HfVxyXG4gICAgICAgICAgICBAbG9jYXRpb24oJHtkZWZpbmVzLnNraW5JbmRleExvY2F0aW9ufSkgc2tpbkluZGV4OnZlYzQ8ZjMyPixcclxuICAgICAgICAgICAgQGxvY2F0aW9uKCR7ZGVmaW5lcy5za2luV2VpZ2h0TG9jYXRpb259KSBza2luV2VpZ2h0OnZlYzQ8ZjMyPixcclxuICAgICAgICAjZW5kaWZcclxuICB9XHJcblxyXG4gICAgI2lmICR7ZGVmaW5lcy5NT1JQSFRBUkdFVFNfVEVYVFVSRX1cclxuICAgICAgICBmbiBnZXRNb3JwaCggdmVydGV4SW5kZXg6dTMyLCBtb3JwaFRhcmdldEluZGV4OnUzMixvZmZzZXQ6dTMyICktPnZlYzQ8ZjMyPiB7XHJcbiAgICAgICAgICAgIGxldCB0ZXhlbEluZGV4OnUzMiA9IHZlcnRleEluZGV4ICogTU9SUEhUQVJHRVRTX1RFWFRVUkVfU1RSSURFICsgb2Zmc2V0O1xyXG4gICAgICAgICAgICBsZXQgeTp1MzIgPSB0ZXhlbEluZGV4IC8gbWF0ZXJpYWxVbmlmb3JtLm1vcnBoVGFyZ2V0c1RleHR1cmVTaXplLng7XHJcbiAgICAgICAgICAgIGxldCB4OnUzMiA9IHRleGVsSW5kZXggLSB5ICogbWF0ZXJpYWxVbmlmb3JtLm1vcnBoVGFyZ2V0c1RleHR1cmVTaXplLng7XHJcbiAgICAgICAgICAgIGxldCBtb3JwaFVWOnZlYzM8dTMyPiA9IHZlYzM8dTMyPiggeCwgeSwgbW9ycGhUYXJnZXRJbmRleCApO1xyXG4gICAgICAgICAgICAvL3RleHR1cmVMb2FkXHJcbiAgICAgICAgICAgIC8vcmV0dXJuIHRleGVsRmV0Y2goIG1vcnBoVGFyZ2V0c1RleHR1cmUsIG1vcnBoVVYsIDAgKTtcclxuICAgICAgICAgICAgcmV0dXJuIHRleHR1cmVMb2FkKCBtb3JwaFRhcmdldHNUZXh0dXJlLCBtb3JwaFVWLCAwICk7XHJcbiAgICAgICAgfVxyXG4gICAgI2VuZGlmXHJcbiAgICAjaWYgJHtkZWZpbmVzLlVTRV9TS0lOTklOR31cclxuICAgICAgICBmbiBnZXRCb25lTWF0cml4KCBpOmYzMiApLT5tYXQ0eDQ8ZjMyPiB7XHJcbiAgICAgICAgICAgIGxldCBqOmYzMiA9IGkgKiA0LjA7XHJcbiAgICAgICAgICAgIGxldCB4OmYzMiA9IGolZjMyKCBtYXRlcmlhbFVuaWZvcm0uYm9uZVRleHR1cmVTaXplICk7XHJcbiAgICAgICAgICAgIGxldCB5OmYzMiA9IGZsb29yKCBqIC8gZjMyKCBtYXRlcmlhbFVuaWZvcm0uYm9uZVRleHR1cmVTaXplICkgKTtcclxuICAgICAgICAgICAgbGV0IGR4OmYzMiA9IDEuMCAvIGYzMiggbWF0ZXJpYWxVbmlmb3JtLmJvbmVUZXh0dXJlU2l6ZSApO1xyXG4gICAgICAgICAgICBsZXQgZHk6ZjMyID0gMS4wIC8gZjMyKCBtYXRlcmlhbFVuaWZvcm0uYm9uZVRleHR1cmVTaXplICk7XHJcbiAgICAgICAgICAgIHkgPSBkeSAqICggeSArIDAuNSApO1xyXG4gICAgICAgICAgICBcclxuICAgICAgICAgICAgbGV0IHYxOnZlYzQ8ZjMyPiA9IHRleHR1cmVTYW1wbGUoYm9uZVRleHR1cmUsIGJhc2VTYW1wbGVyLCB2ZWMyPGYzMj4oIGR4ICogKCB4ICsgMC41ICksIHkgKSApO1xyXG4gICAgICAgICAgICBsZXQgdjI6dmVjNDxmMzI+ID0gdGV4dHVyZVNhbXBsZShib25lVGV4dHVyZSwgYmFzZVNhbXBsZXIsIHZlYzI8ZjMyPiggZHggKiAoIHggKyAxLjUgKSwgeSApICk7XHJcbiAgICAgICAgICAgIGxldCB2Mzp2ZWM0PGYzMj4gPSB0ZXh0dXJlU2FtcGxlKGJvbmVUZXh0dXJlLCBiYXNlU2FtcGxlciwgdmVjMjxmMzI+KCBkeCAqICggeCArIDIuNSApLCB5ICkgKTtcclxuICAgICAgICAgICAgbGV0IHY0OnZlYzQ8ZjMyPiA9IHRleHR1cmVTYW1wbGUoYm9uZVRleHR1cmUsIGJhc2VTYW1wbGVyLCB2ZWMyPGYzMj4oIGR4ICogKCB4ICsgMy41ICksIHkgKSApO1xyXG4gICAgICAgICAgICBsZXQgYm9uZTptYXQ0eDQ8ZjMyPiA9IG1hdDR4NDxmMzI+KCB2MSwgdjIsIHYzLCB2NCApO1xyXG4gICAgICAgICAgICByZXR1cm4gYm9uZTtcclxuICAgICAgICB9XHJcbiAgICAjZW5kaWZcclxuXHJcbiAgICBAYmluZGluZygwKSBAZ3JvdXAoMCkgdmFyPHVuaWZvcm0+IG1hdGVyaWFsVW5pZm9ybSA6IE1hdGVyaWFsVW5pZm9ybTtcclxuICAgIEBiaW5kaW5nKDApIEBncm91cCgxKSB2YXI8dW5pZm9ybT4gZ2xvYmFsVW5pZm9ybSA6IEdsb2JhbFVuaWZvcm07XHJcbiAgICBAdmVydGV4XHJcbiAgICBmbiBtYWluKGlucHV0OlZlcnRleElucHV0KS0+VmVydGV4T3V0cHV0IHtcclxuICAgICAgICB2YXIgdmVydGV4T3V0cHV0OlZlcnRleE91dHB1dDtcclxuICAgICAgICAjaWYgJHtkZWZpbmVzLlVTRV9URVhUVVJFfVxyXG4gICAgICAgICAgICB2ZXJ0ZXhPdXRwdXQudlV2ID0gaW5wdXQudXY7XHJcbiAgICAgICAgI2VuZGlmXHJcbiAgICAgICAgI2lmICR7ZGVmaW5lcy5VU0VfTElHSFRURVhUVVJFIHx8IGRlZmluZXMuVVNFX0FPVEVYVFVSRX1cclxuICAgICAgICAgICAgdmVydGV4T3V0cHV0LnZVdjIgaW5wdXQudXYyO1xyXG4gICAgICAgICNlbmRpZlxyXG4gICAgICAgICNpZiAke2RlZmluZXMuVVNFX0NPTE9SX0FMUEhBfVxyXG4gICAgICAgICAgICB2ZXJ0ZXhPdXRwdXQudkNvbG9yID0gdmVjNCggMS4wICk7XHJcbiAgICAgICAgICAgICNlbGlmICR7ZGVmaW5lcy5VU0VfQ09MT1IgfHwgZGVmaW5lcy5VU0VfSU5TVEFOQ0lOR19DT0xPUn1cclxuICAgICAgICAgICAgdmVydGV4T3V0cHV0LnZDb2xvciA9IHZlYzMoIDEuMCApO1xyXG4gICAgICAgICNlbmRpZlxyXG4gICAgICAgICNpZiAke2RlZmluZXMuVVNFX0NPTE9SfVxyXG4gICAgICAgICAgICB2ZXJ0ZXhPdXRwdXQudkNvbG9yICo9IGlucHV0LmNvbG9yO1xyXG4gICAgICAgICNlbmRpZlxyXG4gICAgICAgICNpZiAke2RlZmluZXMuVVNFX0lOU1RBTkNJTkdfQ09MT1J9XHJcbiAgICAgICAgICAgIHZlcnRleE91dHB1dC52Q29sb3IueHl6ICo9IGlucHV0Lmluc3RhbmNlQ29sb3IueHl6O1xyXG4gICAgICAgICNlbmRpZlxyXG4gICAgICAgICNpZiAke2RlZmluZXMuVVNFX01PUlBIQ09MT1JTICYmIGRlZmluZXMuTU9SUEhUQVJHRVRTX1RFWFRVUkV9XHJcbiAgICAgICAgICAgIHZlcnRleE91dHB1dC52Q29sb3IgKj0gbWF0ZXJpYWxVbmlmb3JtLm1vcnBoVGFyZ2V0QmFzZUluZmx1ZW5jZTtcclxuICAgICAgICAgICAgZm9yIChsZXQgaSA6IHUzMiA9IDB1OyBpIDwgbWF0ZXJpYWxVbmlmb3JtLk1PUlBIVEFSR0VUU19DT1VOVDsgaSA9IGkgKyAxdSApIHtcclxuICAgICAgICAgICAgICAgICNpZiAke2RlZmluZXMuVVNFX0NPTE9SX0FMUEhBfVxyXG4gICAgICAgICAgICAgICAgICAgIGlmICggbWF0ZXJpYWxVbmlmb3JtLm1vcnBoVGFyZ2V0SW5mbHVlbmNlc1sgaSBdICEgPSAwLjAgKSB2ZXJ0ZXhPdXRwdXQudkNvbG9yICs9IGdldE1vcnBoKCBnbF9WZXJ0ZXhJRCwgaSwgMiApICogbWF0ZXJpYWxVbmlmb3JtLm1vcnBoVGFyZ2V0SW5mbHVlbmNlc1sgaSBdO1xyXG4gICAgICAgICAgICAgICAgICAgICNlbGlmICR7ZGVmaW5lcy5VU0VfQ09MT1J9XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgKCBtYXRlcmlhbFVuaWZvcm0ubW9ycGhUYXJnZXRJbmZsdWVuY2VzWyBpIF0gISA9IDAuMCApIHZlcnRleE91dHB1dC52Q29sb3IgKz0gZ2V0TW9ycGgoIGdsX1ZlcnRleElELCBpLCAyICkucmdiICogbWF0ZXJpYWxVbmlmb3JtLm1vcnBoVGFyZ2V0SW5mbHVlbmNlc1sgaSBdO1xyXG4gICAgICAgICAgICAgICAgI2VuZGlmXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAjZW5kaWZcclxuICAgICAgICB2YXIgb2JqZWN0Tm9ybWFsOnZlYzM8ZjMyPiA9IHZlYzM8ZjMyPihpbnB1dC5ub3JtYWwpO1xyXG4gICAgICAgICNpZiAke2RlZmluZXMuVVNFX1RBTkdFTlR9XHJcbiAgICAgICAgICAgIGxldCBvYmplY3RUYW5nZW50OnZlYzM8ZjMyPiA9IHZlYzM8ZjMyPiggaW5wdXQudGFuZ2VudC54eXogKTtcclxuICAgICAgICAjZW5kaWZcclxuICAgICAgICAjaWYgJHtkZWZpbmVzLlVTRV9NT1JQSE5PUk1BTFN9XHJcbiAgICAgICAgICAgIG9iamVjdE5vcm1hbCAqPSBtYXRlcmlhbFVuaWZvcm0ubW9ycGhUYXJnZXRCYXNlSW5mbHVlbmNlO1xyXG4gICAgICAgICAgICAjaWYgJHtkZWZpbmVzLk1PUlBIVEFSR0VUU19URVhUVVJFfVxyXG4gICAgICAgICAgICAgICAgZm9yICggbGV0IGkgOiB1MzIgPSAwdTsgaSA8IG1hdGVyaWFsVW5pZm9ybS5NT1JQSFRBUkdFVFNfQ09VTlQ7IGkgPSBpICsgMXUpIHtcclxuICAgICAgICAgICAgICAgICAgICBpZiAoIG1hdGVyaWFsVW5pZm9ybS5tb3JwaFRhcmdldEluZmx1ZW5jZXNbIGkgXSAhID0gMC4wICkgb2JqZWN0Tm9ybWFsICs9IGdldE1vcnBoKCBnbF9WZXJ0ZXhJRCwgaSwgMSApLnh5eiAqIG1hdGVyaWFsVW5pZm9ybS5tb3JwaFRhcmdldEluZmx1ZW5jZXNbIGkgXTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgI2Vsc2VcclxuICAgICAgICAgICAgICAgIG9iamVjdE5vcm1hbCArPSBtb3JwaE5vcm1hbDAgKiBtYXRlcmlhbFVuaWZvcm0ubW9ycGhUYXJnZXRJbmZsdWVuY2VzWyAwIF07XHJcbiAgICAgICAgICAgICAgICBvYmplY3ROb3JtYWwgKz0gbW9ycGhOb3JtYWwxICogbWF0ZXJpYWxVbmlmb3JtLm1vcnBoVGFyZ2V0SW5mbHVlbmNlc1sgMSBdO1xyXG4gICAgICAgICAgICAgICAgb2JqZWN0Tm9ybWFsICs9IG1vcnBoTm9ybWFsMiAqIG1hdGVyaWFsVW5pZm9ybS5tb3JwaFRhcmdldEluZmx1ZW5jZXNbIDIgXTtcclxuICAgICAgICAgICAgICAgIG9iamVjdE5vcm1hbCArPSBtb3JwaE5vcm1hbDMgKiBtYXRlcmlhbFVuaWZvcm0ubW9ycGhUYXJnZXRJbmZsdWVuY2VzWyAzIF07XHJcbiAgICAgICAgICAgICNlbmRpZlxyXG4gICAgICAgICNlbmRpZlxyXG4gICAgICAgICNpZiAke2RlZmluZXMuVVNFX1NLSU5OSU5HfVxyXG4gICAgICAgICAgICBsZXQgYm9uZU1hdFg6bWF0NHg0PGYzMj4gPSBnZXRCb25lTWF0cml4KCBpbnB1dC5za2luSW5kZXgueCApO1xyXG4gICAgICAgICAgICBsZXQgYm9uZU1hdFk6bWF0NHg0PGYzMj4gPSBnZXRCb25lTWF0cml4KCBpbnB1dC5za2luSW5kZXgueSApO1xyXG4gICAgICAgICAgICBsZXQgYm9uZU1hdFo6bWF0NHg0PGYzMj4gPSBnZXRCb25lTWF0cml4KCBpbnB1dC5za2luSW5kZXgueiApO1xyXG4gICAgICAgICAgICBsZXQgYm9uZU1hdFc6bWF0NHg0PGYzMj4gPSBnZXRCb25lTWF0cml4KCBpbnB1dC5za2luSW5kZXgudyApO1xyXG4gICAgICAgICNlbmRpZlxyXG4gICAgICAgICNpZiAke2RlZmluZXMuVVNFX1NLSU5OSU5HfVxyXG4gICAgICAgICAgICBsZXQgc2tpbk1hdHJpeDptYXQ0eDQ8ZjMyPiA9IG1hdDR4NDxmMzI+KCAwLjAgKTtcclxuICAgICAgICAgICAgc2tpbk1hdHJpeCArPSBpbnB1dC5za2luV2VpZ2h0LnggKiBib25lTWF0WDtcclxuICAgICAgICAgICAgc2tpbk1hdHJpeCArPSBpbnB1dC5za2luV2VpZ2h0LnkgKiBib25lTWF0WTtcclxuICAgICAgICAgICAgc2tpbk1hdHJpeCArPSBpbnB1dC5za2luV2VpZ2h0LnogKiBib25lTWF0WjtcclxuICAgICAgICAgICAgc2tpbk1hdHJpeCArPSBpbnB1dC5za2luV2VpZ2h0LncgKiBib25lTWF0VztcclxuICAgICAgICAgICAgc2tpbk1hdHJpeCA9IG1hdGVyaWFsVW5pZm9ybS5iaW5kTWF0cml4SW52ZXJzZSAqIHNraW5NYXRyaXggKiBtYXRlcmlhbFVuaWZvcm0uYmluZE1hdHJpeDtcclxuICAgICAgICAgICAgb2JqZWN0Tm9ybWFsID0gdmVjNDxmMzI+KCBza2luTWF0cml4ICogdmVjNDxmMzI+KCBvYmplY3ROb3JtYWwsIDAuMCApICkueHl6O1xyXG4gICAgICAgICAgICAjaWYgJHtkZWZpbmVzLlVTRV9UQU5HRU5UfVxyXG4gICAgICAgICAgICAgICAgb2JqZWN0VGFuZ2VudCA9IHZlYzQ8ZjMyPiggc2tpbk1hdHJpeCAqIHZlYzQ8ZjMyPiggb2JqZWN0VGFuZ2VudCwgMC4wICkgKS54eXo7XHJcbiAgICAgICAgICAgICNlbmRpZlxyXG4gICAgICAgICNlbmRpZlxyXG4gICAgICAgIHZhciB0cmFuc2Zvcm1lZE5vcm1hbDp2ZWMzPGYzMj4gPSBvYmplY3ROb3JtYWw7XHJcbiAgICAgICAgLy8gdHJhbnNmb3JtZWROb3JtYWwrPXZlYzM8ZjMyPigwLjApO1xyXG4gICAgICAgICNpZiAke2RlZmluZXMuVVNFX0lOU1RBTkNJTkd9XHJcbiAgICAgICAgICAgIGxldCBtOm1hdDN4MzxmMzI+ID0gbWF0M3gzPGYzMj4oIGlucHV0Lmluc3RhbmNlTWF0cml4ICk7XHJcbiAgICAgICAgICAgIHRyYW5zZm9ybWVkTm9ybWFsIC89IHZlYzM8ZjMyPiggZG90KCBtWyAwIF0sIG1bIDAgXSApLCBkb3QoIG1bIDEgXSwgbVsgMSBdICksIGRvdCggbVsgMiBdLCBtWyAyIF0gKSApO1xyXG4gICAgICAgICAgICB0cmFuc2Zvcm1lZE5vcm1hbCA9IG0gKiB0cmFuc2Zvcm1lZE5vcm1hbDtcclxuICAgICAgICAjZW5kaWZcclxuICAgICAgICB0cmFuc2Zvcm1lZE5vcm1hbCA9IG1hdGVyaWFsVW5pZm9ybS5ub3JtYWxNYXRyaXggKiB0cmFuc2Zvcm1lZE5vcm1hbDtcclxuICAgICAgICAjaWYgJHtkZWZpbmVzLkZMSVBfU0lERUR9XHJcbiAgICAgICAgICAgIHRyYW5zZm9ybWVkTm9ybWFsID0gLSB0cmFuc2Zvcm1lZE5vcm1hbDtcclxuICAgICAgICAjZW5kaWZcclxuICAgICAgICAjaWYgJHtkZWZpbmVzLlVTRV9UQU5HRU5UfVxyXG4gICAgICAgICAgICBsZXQgdHJhbnNmb3JtZWRUYW5nZW50OnZlYzM8ZjMyPiA9IChnbG9iYWxVbmlmb3JtLnZpZXdNYXRyaXgqbWF0ZXJpYWxVbmlmb3JtLm1vZGVsTWF0cml4ICogdmVjNDxmMzI+KCBvYmplY3RUYW5nZW50LCAwLjAgKSApLnh5ejtcclxuICAgICAgICAgICAgI2lmICR7ZGVmaW5lcy5GTElQX1NJREVEfVxyXG4gICAgICAgICAgICAgICAgdHJhbnNmb3JtZWRUYW5nZW50ID0gLSB0cmFuc2Zvcm1lZFRhbmdlbnQ7XHJcbiAgICAgICAgICAgICNlbmRpZlxyXG4gICAgICAgICNlbmRpZlxyXG4gICAgICAgIHZlcnRleE91dHB1dC52Tm9ybWFsID0gbm9ybWFsaXplKCB0cmFuc2Zvcm1lZE5vcm1hbCApO1xyXG4gICAgICAgICNpZiAke2RlZmluZXMuRkxBVF9TSEFERUR9XHJcbiAgICAgICAgICAgICNpZiAke2RlZmluZXMuVVNFX1RBTkdFTlR9XHJcbiAgICAgICAgICAgICAgICB2VGFuZ2VudCA9IG5vcm1hbGl6ZSggdHJhbnNmb3JtZWRUYW5nZW50ICk7XHJcbiAgICAgICAgICAgICAgICB2Qml0YW5nZW50ID0gbm9ybWFsaXplKCBjcm9zcyggdk5vcm1hbCwgdlRhbmdlbnQgKSAqIGlucHV0LnRhbmdlbnQudyApO1xyXG4gICAgICAgICAgICAjZW5kaWZcclxuICAgICAgICAjZW5kaWZcclxuICAgICAgICBsZXQgdHJhbnNmb3JtZWQ6dmVjMzxmMzI+ID0gdmVjMzxmMzI+KCBpbnB1dC5wb3NpdGlvbiApO1xyXG4gICAgICAgICNpZiAke2RlZmluZXMuVVNFX01PUlBIVEFSR0VUU31cclxuICAgICAgICAgICAgdHJhbnNmb3JtZWQgKj0gbWF0ZXJpYWxVbmlmb3JtLm1vcnBoVGFyZ2V0QmFzZUluZmx1ZW5jZTtcclxuICAgICAgICAgICAgI2lmICR7ZGVmaW5lcy5NT1JQSFRBUkdFVFNfVEVYVFVSRX1cclxuICAgICAgICAgICAgICAgIGZvciAoIGxldCBpIDogdTMyID0gMHU7IGkgPCBtYXRlcmlhbFVuaWZvcm0uTU9SUEhUQVJHRVRTX0NPVU5UOyBpID0gaSArIDF1ICkge1xyXG4gICAgICAgICAgICAgICAgICAgIGlmICggbWF0ZXJpYWxVbmlmb3JtLm1vcnBoVGFyZ2V0SW5mbHVlbmNlc1sgaSBdICEgPSAwLjAgKSB0cmFuc2Zvcm1lZCArPSBnZXRNb3JwaCggZ2xfVmVydGV4SUQsIGksIDAgKS54eXogKiBtb3JwaFRhcmdldEluZmx1ZW5jZXNbIGkgXTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgI2Vsc2VcclxuICAgICAgICAgICAgICAgIHRyYW5zZm9ybWVkICs9IGlucHV0Lm1vcnBoVGFyZ2V0MCAqIG1hdGVyaWFsVW5pZm9ybS5tb3JwaFRhcmdldEluZmx1ZW5jZXNbIDAgXTtcclxuICAgICAgICAgICAgICAgIHRyYW5zZm9ybWVkICs9IGlucHV0Lm1vcnBoVGFyZ2V0MSAqIG1hdGVyaWFsVW5pZm9ybS5tb3JwaFRhcmdldEluZmx1ZW5jZXNbIDEgXTtcclxuICAgICAgICAgICAgICAgIHRyYW5zZm9ybWVkICs9IGlucHV0Lm1vcnBoVGFyZ2V0MiAqIG1hdGVyaWFsVW5pZm9ybS5tb3JwaFRhcmdldEluZmx1ZW5jZXNbIDIgXTtcclxuICAgICAgICAgICAgICAgIHRyYW5zZm9ybWVkICs9IGlucHV0Lm1vcnBoVGFyZ2V0MyAqIG1hdGVyaWFsVW5pZm9ybS5tb3JwaFRhcmdldEluZmx1ZW5jZXNbIDMgXTtcclxuICAgICAgICAgICAgICAgICNpZiAke2RlZmluZXMuVVNFX01PUlBITk9STUFMU31cclxuICAgICAgICAgICAgICAgICAgICB0cmFuc2Zvcm1lZCArPSBpbnB1dC5tb3JwaFRhcmdldDQgKiBtYXRlcmlhbFVuaWZvcm0ubW9ycGhUYXJnZXRJbmZsdWVuY2VzWyA0IF07XHJcbiAgICAgICAgICAgICAgICAgICAgdHJhbnNmb3JtZWQgKz0gaW5wdXQubW9ycGhUYXJnZXQ1ICogbWF0ZXJpYWxVbmlmb3JtLm1vcnBoVGFyZ2V0SW5mbHVlbmNlc1sgNSBdO1xyXG4gICAgICAgICAgICAgICAgICAgIHRyYW5zZm9ybWVkICs9IGlucHV0Lm1vcnBoVGFyZ2V0NiAqIG1hdGVyaWFsVW5pZm9ybS5tb3JwaFRhcmdldEluZmx1ZW5jZXNbIDYgXTtcclxuICAgICAgICAgICAgICAgICAgICB0cmFuc2Zvcm1lZCArPSBpbnB1dC5tb3JwaFRhcmdldDcgKiBtYXRlcmlhbFVuaWZvcm0ubW9ycGhUYXJnZXRJbmZsdWVuY2VzWyA3IF07XHJcbiAgICAgICAgICAgICAgICAjZW5kaWZcclxuICAgICAgICAgICAgI2VuZGlmXHJcbiAgICAgICAgI2VuZGlmXHJcbiAgICAgICAgI2lmICR7ZGVmaW5lcy5VU0VfU0tJTk5JTkd9XHJcbiAgICAgICAgICAgIGxldCBza2luVmVydGV4OnZlYzQ8ZjMyPiA9IG1hdGVyaWFsVW5pZm9ybS5iaW5kTWF0cml4ICogdmVjNDxmMzI+KCB0cmFuc2Zvcm1lZCwgMS4wICk7XHJcbiAgICAgICAgICAgIGxldCBza2lubmVkOnZlYzQ8ZjMyPiA9IHZlYzQ8ZjMyPiggMC4wICk7XHJcbiAgICAgICAgICAgIHNraW5uZWQgKz0gYm9uZU1hdFggKiBza2luVmVydGV4ICogaW5wdXQuc2tpbldlaWdodC54O1xyXG4gICAgICAgICAgICBza2lubmVkICs9IGJvbmVNYXRZICogc2tpblZlcnRleCAqIGlucHV0LnNraW5XZWlnaHQueTtcclxuICAgICAgICAgICAgc2tpbm5lZCArPSBib25lTWF0WiAqIHNraW5WZXJ0ZXggKiBpbnB1dC5za2luV2VpZ2h0Lno7XHJcbiAgICAgICAgICAgIHNraW5uZWQgKz0gYm9uZU1hdFcgKiBza2luVmVydGV4ICogaW5wdXQuc2tpbldlaWdodC53O1xyXG4gICAgICAgICAgICB0cmFuc2Zvcm1lZCA9ICggbWF0ZXJpYWxVbmlmb3JtLmJpbmRNYXRyaXhJbnZlcnNlICogc2tpbm5lZCApLnh5ejtcclxuICAgICAgICAjZW5kaWZcclxuICAgICAgICAjaWYgJHtkZWZpbmVzLlVTRV9ESVNQTEFDRU1FTlRURVhUVVJFfSBcclxuICAgICAgICAgICAgdHJhbnNmb3JtZWQgKz0gbm9ybWFsaXplKCBvYmplY3ROb3JtYWwgKSAqICh0ZXh0dXJlU2FtcGxlKGRpc3BsYWNlbWVudE1hcCwgYmFzZVNhbXBsZXIsIHZVdikueCAqIG1hdGVyaWFsVW5pZm9ybS5kaXNwbGFjZW1lbnRTY2FsZSArIG1hdGVyaWFsVW5pZm9ybS5kaXNwbGFjZW1lbnRCaWFzICk7XHJcbiAgICAgICAgI2VuZGlmXHJcbiAgICAgICAgdmFyIG12UG9zaXRpb246dmVjNDxmMzI+ID0gdmVjNDxmMzI+KCB0cmFuc2Zvcm1lZCwgMS4wICk7XHJcbiAgICAgICAgI2lmICR7ZGVmaW5lcy5VU0VfSU5TVEFOQ0lOR31cclxuICAgICAgICAgICAgbXZQb3NpdGlvbiA9IGlucHV0Lmluc3RhbmNlTWF0cml4ICogbXZQb3NpdGlvbjtcclxuICAgICAgICAjZW5kaWZcclxuICAgICAgICBtdlBvc2l0aW9uID0gZ2xvYmFsVW5pZm9ybS52aWV3TWF0cml4Km1hdGVyaWFsVW5pZm9ybS5tb2RlbE1hdHJpeCAqIG12UG9zaXRpb247XHJcbiAgICAgICAgdmVydGV4T3V0cHV0LnBvc2l0aW9uID0gZ2xvYmFsVW5pZm9ybS5wcm9qZWN0aW9uTWF0cml4ICogbXZQb3NpdGlvbjtcclxuICAgICAgICB2ZXJ0ZXhPdXRwdXQudlZpZXdQb3NpdGlvbiA9IC0gbXZQb3NpdGlvbi54eXovbXZQb3NpdGlvbi53O1xyXG4gICAgICAgICNpZiAke1xyXG4gICAgICAgICAgZGVmaW5lcy5VU0VfRU5WVEVYVFVSRSB8fCBkZWZpbmVzLkRJU1RBTkNFIHx8IGRlZmluZXMuVVNFX1RSQU5TTUlTU0lPTlxyXG4gICAgICAgIH0gXHJcbiAgICAgICAgICAgIHZhciB3b3JsZFBvc2l0aW9uOnZlYzQ8ZjMyPiA9IHZlYzQ8ZjMyPiggdHJhbnNmb3JtZWQsIDEuMCApO1xyXG4gICAgICAgICAgICAjaWYgJHtkZWZpbmVzLlVTRV9JTlNUQU5DSU5HfVxyXG4gICAgICAgICAgICAgICAgd29ybGRQb3NpdGlvbiA9IGlucHV0Lmluc3RhbmNlTWF0cml4ICogd29ybGRQb3NpdGlvbjtcclxuICAgICAgICAgICAgI2VuZGlmXHJcbiAgICAgICAgICAgIHdvcmxkUG9zaXRpb24gPSBtYXRlcmlhbFVuaWZvcm0ubW9kZWxNYXRyaXggKiB3b3JsZFBvc2l0aW9uO1xyXG4gICAgICAgICNlbmRpZlxyXG4gICAgICAgICNpZiAke2RlZmluZXMuVVNFX1RSQU5TTUlTU0lPTn1cclxuICAgICAgICAgICAgdmVydGV4T3V0cHV0LnZXb3JsZFBvc2l0aW9uID0gd29ybGRQb3NpdGlvbi54eXo7XHJcbiAgICAgICAgI2VuZGlmXHJcbiAgICAgICAgcmV0dXJuIHZlcnRleE91dHB1dDtcclxuICAgIH1cclxuICAgIGA7XHJcbn1cclxuIiwiaW1wb3J0IHsgd2dzbFBhcnNlRGVmaW5lcyB9IGZyb20gXCIuLi9XZ3NsUHJlcHJvY2Vzc29yXCI7XHJcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHBob25nRnJhZyhkZWZpbmVzKSB7XHJcblx0cmV0dXJuIHdnc2xQYXJzZURlZmluZXNgICBcclxuICAgIHN0cnVjdCBNYXRlcmlhbFVuaWZvcm0ge1xyXG4gICAgICBtb2RlbE1hdHJpeDogbWF0NHg0PGYzMj4sXHJcbiAgICAgIGNvbG9yOiB2ZWMzPGYzMj4sXHJcbiAgICAgIG9wYWNpdHk6ZjMyLFxyXG4gICAgICBub3JtYWxNYXRyaXg6IG1hdDR4NDxmMzI+LFxyXG4gICAgICBlbWlzc2l2ZTp2ZWMzPGYzMj4sXHJcbiAgICAgIHNoaW5pbmVzczpmMzIsXHJcbiAgICAgIHNwZWN1bGFyOnZlYzM8ZjMyPiwgICAgICBcclxuICAgfVxyXG4gICAgI2luY2x1ZGUgPEZyYWdJbnB1dD5cclxuICAgICNpbmNsdWRlIDxTeXN0ZW1Vbmlmb3JtPlxyXG4gICAgI2luY2x1ZGUgPFRleHR1cmVBbmRTYW1wbGVyRGVmaW5lPlxyXG4gICAgI2luY2x1ZGUgPGxpZ2h0PlxyXG4gICAgQGJpbmRpbmcoJHtkZWZpbmVzLnBob25nQmluZGluZ30pIEBncm91cCgwKSB2YXI8dW5pZm9ybT4gbWF0ZXJpYWxVbmlmb3JtIDogTWF0ZXJpYWxVbmlmb3JtO1xyXG4gICAgQGJpbmRpbmcoJHtkZWZpbmVzLmNhbWVyYUJpbmRpbmd9KSBAZ3JvdXAoMSkgdmFyPHVuaWZvcm0+IHN5c3RlbVVuaWZvcm0gOiBTeXN0ZW1Vbmlmb3JtO1xyXG4gICAgQGZyYWdtZW50XHJcbiAgICBmbiBtYWluKGlucHV0OkZyYWdJbnB1dCkgLT4gQGxvY2F0aW9uKDApIHZlYzQ8ZjMyPiB7XHJcbiAgICAgICAgdmFyIHRvdGFsRW1pc3NpdmVSYWRpYW5jZTp2ZWMzPGYzMj4gPSBtYXRlcmlhbFVuaWZvcm0uZW1pc3NpdmU7XHJcbiAgICAgICAgdmFyIGNvbG9yOnZlYzQ8ZjMyPjtcclxuICAgICAgICAjaWYke2RlZmluZXMuVVNFX0NPTE9SVEVYVFVSRX1cclxuICAgICAgICAgICAgY29sb3I9IHZlYzQ8ZjMyPih0ZXh0dXJlU2FtcGxlKGJhc2VDb2xvclRleHR1cmUsIGJhc2VDb2xvclNhbXBsZXIsIGlucHV0LnV2KS5yZ2IrbWF0ZXJpYWxVbmlmb3JtLmNvbG9yLG1hdGVyaWFsVW5pZm9ybS5vcGFjaXR5KTtcclxuICAgICAgICAjZWxzZVxyXG4gICAgICAgICAgICBjb2xvcj12ZWM0PGYzMj4obWF0ZXJpYWxVbmlmb3JtLmNvbG9yLG1hdGVyaWFsVW5pZm9ybS5vcGFjaXR5KTtcclxuICAgICAgICAjZW5kaWYgICAgIFxyXG4gICAgICAgIGxldCAgVjp2ZWMzPGYzMj4gPSAgbm9ybWFsaXplKCBzeXN0ZW1Vbmlmb3JtLmNhbWVyYVBvc2l0aW9uIC0gaW5wdXQud29ybGRQb3MpO1xyXG4gICAgICAgICNpZiAke2RlZmluZXMuVVNFX05PUk1BTFRFWFRVUkV9XHJcbiAgICAgICAgICAgIGxldCBOOnZlYzM8ZjMyPiA9IGdldE5vcm1hbEJ5Tm9ybWFsVGV4dHVyZShpbnB1dCk7ICBcclxuICAgICAgICAjZWxzZVxyXG4gICAgICAgICAgICBsZXQgTjp2ZWMzPGYzMj4gPSBnZXROb3JtYWwoaW5wdXQpO1xyXG4gICAgICAgICNlbmRpZlxyXG4gICAgICAgIHZhciBnZW9tZXRyeTpHZW9tZXRyeTtcclxuICAgICAgICBnZW9tZXRyeS5ub3JtYWw9TjtcclxuICAgICAgICBnZW9tZXRyeS52aWV3RGlyPVY7XHJcbiAgICAgICAgZ2VvbWV0cnkucG9zaXRpb249aW5wdXQud29ybGRQb3M7XHJcbiAgICAgICAgbGV0IGxpZ2h0Q29sb3I6UmVmbGVjdGVkTGlnaHQ9cGFyc2VMaWdodHMoZ2VvbWV0cnksbWF0ZXJpYWxVbmlmb3JtLnNoaW5pbmVzcyk7XHJcbiAgICAgICAgLy8gdmFyIGZpbm5hbENvbG9yOnZlYzM8ZjMyPj1jb2xvci54eXogKyAobGlnaHRDb2xvci5kaXJlY3REaWZmdXNlICsgbGlnaHRDb2xvci5kaXJlY3RTcGVjdWxhciArIGxpZ2h0Q29sb3IuYW1iaWVudCk7XHJcbiAgICAgICAgdmFyIGZpbm5hbENvbG9yOnZlYzM8ZjMyPj1jb2xvci54eXogKiAobGlnaHRDb2xvci5kaXJlY3REaWZmdXNlICsgbGlnaHRDb2xvci5kaXJlY3RTcGVjdWxhciArIGxpZ2h0Q29sb3IuYW1iaWVudCk7XHJcblxyXG4gICAgICAgIC8vIGZpbm5hbENvbG9yID0gbGlnaHRDb2xvci50ZXN0Q29sb3IueHl6O1xyXG5cclxuICAgICAgICByZXR1cm4gdmVjNDxmMzI+KGZpbm5hbENvbG9yLGNvbG9yLmEpO1xyXG4gICAgfWA7XHJcbn1cclxuIiwiaW1wb3J0IHsgd2dzbFBhcnNlRGVmaW5lcyB9IGZyb20gXCIuLi9XZ3NsUHJlcHJvY2Vzc29yXCI7XHJcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHBob25nVmVydChkZWZpbmVzKSB7XHJcblx0cmV0dXJuIHdnc2xQYXJzZURlZmluZXNgXHJcbiAgICAgIHN0cnVjdCBNYXRlcmlhbFVuaWZvcm0ge1xyXG4gICAgICAgICAgICBtb2RlbE1hdHJpeDogbWF0NHg0PGYzMj4sXHJcbiAgICAgICAgICAgIGNvbG9yOiB2ZWMzPGYzMj4sXHJcbiAgICAgICAgICAgIG9wYWNpdHk6ZjMyLFxyXG4gICAgICAgICAgICBub3JtYWxNYXRyaXg6IG1hdDR4NDxmMzI+LFxyXG4gICAgICAgICAgICBlbWlzc2l2ZTp2ZWMzPGYzMj4sXHJcbiAgICAgICAgICAgIHNwZWN1bGFyOnZlYzM8ZjMyPixcclxuICAgICAgICAgICAgc2hpbmluZXNzOmYzMixcclxuICAgICAgfVxyXG4gICAgICAjaW5jbHVkZSA8VmVydGV4T3V0cHV0PlxyXG4gICAgICAjaW5jbHVkZSA8U3lzdGVtVW5pZm9ybT5cclxuICAgICAgI2luY2x1ZGUgPFZlcnRleElucHV0PlxyXG4gICAgICBAYmluZGluZygke2RlZmluZXMucGhvbmdCaW5kaW5nfSkgQGdyb3VwKDApIHZhcjx1bmlmb3JtPiBzZWxmVW5pZm9ybSA6IE1hdGVyaWFsVW5pZm9ybTtcclxuICAgICAgQGJpbmRpbmcoJHtkZWZpbmVzLmNhbWVyYUJpbmRpbmd9KSBAZ3JvdXAoMSkgdmFyPHVuaWZvcm0+IHN5c3RlbVVuaWZvcm0gOiBTeXN0ZW1Vbmlmb3JtO1xyXG4gICAgICBAdmVydGV4XHJcbiAgICAgIGZuIG1haW4oaW5wdXQ6IFZlcnRleElucHV0KSAtPiBWZXJ0ZXhPdXRwdXQge1xyXG4gICAgICAgICAgICB2YXIgb3V0cHV0OiBWZXJ0ZXhPdXRwdXQ7XHJcbiAgICAgICAgICAgICNpZiAke2RlZmluZXMuSEFTX1VWfVxyXG4gICAgICAgICAgICAgICBvdXRwdXQudXYgPSBpbnB1dC51djtcclxuICAgICAgICAgICAgI2VuZGlmIFxyXG4gICAgICAgICAgICBsZXQgbW9kZWxQb3M9c2VsZlVuaWZvcm0ubW9kZWxNYXRyaXggKnZlYzQ8ZjMyPihpbnB1dC5wb3NpdGlvbiwxLjApO1xyXG4gICAgICAgICAgICBvdXRwdXQud29ybGRQb3MgPSBtb2RlbFBvcy54eXovbW9kZWxQb3MudztcclxuICAgICAgICAgICAgbGV0IHZOb3JtYWxWaWV3ID0gc2VsZlVuaWZvcm0ubm9ybWFsTWF0cml4ICogdmVjNDxmMzI+KGlucHV0Lm5vcm1hbCwwLjApO1xyXG4gICAgICAgICAgICBvdXRwdXQubm9ybWFsID0gIHZOb3JtYWxWaWV3Lnh5ejtcclxuICAgICAgICAgICAgb3V0cHV0LnZpZXcgPSBzeXN0ZW1Vbmlmb3JtLmNhbWVyYVBvc2l0aW9uLnh5eiAtIG1vZGVsUG9zLnh5ejtcclxuICAgICAgICAgICAgbGV0IHZpZXdQb3NpdGlvbj1zeXN0ZW1Vbmlmb3JtLnZpZXdNYXRyaXggKiBtb2RlbFBvcztcclxuICAgICAgICAgICAgb3V0cHV0LnZpZXdQb3NpdGlvbiA9IC12aWV3UG9zaXRpb24ueHl6O1xyXG4gICAgICAgICAgICBvdXRwdXQucG9zaXRpb24gPSBzeXN0ZW1Vbmlmb3JtLnByb2plY3Rpb25NYXRyaXggKiBzeXN0ZW1Vbmlmb3JtLnZpZXdNYXRyaXggKiBtb2RlbFBvcztcclxuICAgICAgICAgICAgcmV0dXJuIG91dHB1dDtcclxuICAgICAgfWA7XHJcbn1cclxuIiwiaW1wb3J0IHsgd2dzbFBhcnNlRGVmaW5lcyB9IGZyb20gXCIuLi9XZ3NsUHJlcHJvY2Vzc29yXCI7XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gcG9pbnRfZnMoZGVmaW5lcykge1xyXG5cdHJldHVybiB3Z3NsUGFyc2VEZWZpbmVzYFxyXG4gICNpbmNsdWRlIDxQb2ludEZyYWdJbnB1dD5cclxuICBzdHJ1Y3QgU2VsZlVuaWZvcm0ge1xyXG4gICAgbW9kZWxNYXRyaXg6IG1hdDR4NDxmMzI+LFxyXG4gICAgY29sb3I6dmVjMzxmMzI+LFxyXG4gICAgc2l6ZTpmMzIsXHJcbiAgICBvcGFjaXR5OmYzMixcclxuICB9XHJcbiAgQGJpbmRpbmcoJHtkZWZpbmVzLnBvaW50QmluZGluZ30pIEBncm91cCgwKSB2YXI8dW5pZm9ybT4gc2VsZlVuaWZvcm0gOiBTZWxmVW5pZm9ybTtcclxuICAjaWYke2RlZmluZXMuVVNFX0NPTE9SVEVYVFVSRX1cclxuICAgIEBncm91cCgwKSBAYmluZGluZygke2RlZmluZXMuYmFzZUNvbG9yU2FtcGxlckJpbmRpbmd9KSB2YXIgYmFzZUNvbG9yU2FtcGxlcjogc2FtcGxlcjtcclxuICAgIEBncm91cCgwKSBAYmluZGluZygke2RlZmluZXMuYmFzZUNvbG9yVGV4dHVyZUJpbmRpbmd9KSB2YXIgYmFzZUNvbG9yVGV4dHVyZTogdGV4dHVyZV8yZDxmMzI+O1xyXG4gICNlbmRpZlxyXG4gIEBmcmFnbWVudFxyXG4gIGZuIG1haW4oaW5wdXQ6UG9pbnRGcmFnSW5wdXQpIC0+IEBsb2NhdGlvbigwKSB2ZWM0PGYzMj4ge1xyXG4gICAgdmFyIGNvbG9yOnZlYzQ8ZjMyPj12ZWM0PGYzMj4oc2VsZlVuaWZvcm0uY29sb3Isc2VsZlVuaWZvcm0ub3BhY2l0eSk7XHJcbiAgICAjaWYke2RlZmluZXMuVVNFX0NPTE9SVEVYVFVSRX1cclxuICAgICAgY29sb3I9dGV4dHVyZVNhbXBsZShiYXNlQ29sb3JUZXh0dXJlLCBiYXNlQ29sb3JTYW1wbGVyLCBpbnB1dC51dik7XHJcbiAgICAjZW5kaWZcclxuICAgICNpZiR7ZGVmaW5lcy5IQVNfQ09MT1J9XHJcbiAgICAgIGNvbG9yPXZlYzQ8ZjMyPihpbnB1dC5jb2xvcixzZWxmVW5pZm9ybS5vcGFjaXR5KTtcclxuICAgICNlbmRpZlxyXG4gICAgcmV0dXJuIGNvbG9yO1xyXG4gIH1cclxuICBgO1xyXG59XHJcbiIsImltcG9ydCB7IHdnc2xQYXJzZURlZmluZXMgfSBmcm9tIFwiLi4vV2dzbFByZXByb2Nlc3NvclwiO1xyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIHBvaW50X3ZzKGRlZmluZXMpIHtcclxuXHRyZXR1cm4gd2dzbFBhcnNlRGVmaW5lc2BcclxuICAgICNpbmNsdWRlIDxQb2ludFZlcnRPdXRwdXQ+XHJcbiAgICAjaW5jbHVkZSA8U3lzdGVtVW5pZm9ybT5cclxuICAgICNpbmNsdWRlIDxQb2ludFZlcnRJbnB1dD5cclxuICAgIHN0cnVjdCBTZWxmVW5pZm9ybSB7XHJcbiAgICAgIG1vZGVsTWF0cml4OiBtYXQ0eDQ8ZjMyPixcclxuICAgICAgY29sb3I6dmVjMzxmMzI+LFxyXG4gICAgICBzaXplOmYzMixcclxuICAgICAgb3BhY2l0eTpmMzIsXHJcbiAgICB9XHJcbiAgICBAYmluZGluZygke2RlZmluZXMucG9pbnRCaW5kaW5nfSkgQGdyb3VwKDApIHZhcjx1bmlmb3JtPiBzZWxmVW5pZm9ybSA6IFNlbGZVbmlmb3JtO1xyXG4gICAgQGJpbmRpbmcoJHtkZWZpbmVzLmNhbWVyYUJpbmRpbmd9KSBAZ3JvdXAoMSkgdmFyPHVuaWZvcm0+IHN5c3RlbVVuaWZvcm0gOiBTeXN0ZW1Vbmlmb3JtO1xyXG4gICAgQHZlcnRleFxyXG4gICAgICBmbiBtYWluKGlucHV0OiBQb2ludFZlcnRJbnB1dCkgLT4gUG9pbnRWZXJ0T3V0cHV0IHtcclxuICAgICAgdmFyIG91dHB1dDpQb2ludFZlcnRPdXRwdXQ7XHJcbiAgICAgIGxldCBtdlBvc2l0aW9uOnZlYzQ8ZjMyPj0geXN0ZW1Vbmlmb3JtLnZpZXdNYXRyaXggKnNlbGZVbmlmb3JtLm1vZGVsTWF0cml4KnZlYzQ8ZjMyPigwLjAsMC4wLDAuMCwgMS4wICk7XHJcbiAgICAgICNpZiAke2RlZmluZXMuSEFTX1VWfVxyXG4gICAgICAgICAgb3V0cHV0LnV2PWlucHV0LnV2O1xyXG4gICAgICAjZW5kaWZcclxuICAgICAgI2lmICR7ZGVmaW5lcy5IQVNfQ09MT1J9XHJcbiAgICAgICAgICBvdXRwdXQuY29sb3I9aW5wdXQuY29sb3I7XHJcbiAgICAgICNlbmRpZlxyXG4gICAgICAjaWYgJHtkZWZpbmVzLkhBU19TSVpFfVxyXG4gICAgICAgICAgb3V0cHV0LnNpemU9aW5wdXQuc2l6ZTtcclxuICAgICAgI2VuZGlmXHJcbiAgICAgIHZlYzIgYWxpZ25lZFBvc2l0aW9uID0gaW5wdXQucG9zaXRpb24ueHkqIHNlbGZVbmlmb3JtLnNpemU7XHJcbiAgICAgIG12UG9zaXRpb24ueHkgKz0gYWxpZ25lZFBvc2l0aW9uO1xyXG4gICAgICBvdXRwdXQucG9zaXRpb24gPSBzeXN0ZW1Vbmlmb3JtLnByb2plY3Rpb25NYXRyaXggKiBtdlBvc2l0aW9uO1xyXG4gICAgICByZXR1cm4gb3V0cHV0O1xyXG4gICAgICB9XHJcbiAgIGA7XHJcbn1cclxuIiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gcXVhZEZyYWcoZGVmaW5lcykge1xyXG5cdHJldHVybiBgXHJcbiAgICBAZ3JvdXAoMCkgQGJpbmRpbmcoMSkgdmFyIGJhc2VTYW1wbGVyOiBzYW1wbGVyO1xyXG4gICAgQGdyb3VwKDApIEBiaW5kaW5nKDApIHZhciBjb2xvclRleHR1cmU6IHRleHR1cmVfMmQ8ZjMyPjtcclxuICAgIHN0cnVjdCBWZXJ0ZXhPdXRwdXQge1xyXG4gICAgICAgIEBidWlsdGluKHBvc2l0aW9uKSBwb3NpdGlvbjogdmVjNDxmMzI+LFxyXG4gICAgICAgIEBsb2NhdGlvbigwKSB1djogdmVjMjxmMzI+LFxyXG4gICAgfTtcclxuICAgIEBmcmFnbWVudFxyXG4gICAgZm4gbWFpbihpbnB1dDpWZXJ0ZXhPdXRwdXQpIC0+IEBsb2NhdGlvbigwKSB2ZWM0PGYzMj4ge1xyXG4gICAgICByZXR1cm4gdGV4dHVyZVNhbXBsZShjb2xvclRleHR1cmUsIGJhc2VTYW1wbGVyLCB2ZWMyPGYzMj4oaW5wdXQudXYueCwxLjAtaW5wdXQudXYueSkpO1xyXG4gICAgfVxyXG4gICAgYDtcclxufVxyXG4iLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBxdWFkVmVydChkZWZpbmVzKSB7XG5cdHJldHVybiBgXG4gICAgc3RydWN0IFZlcnRleElucHV0IHtcbiAgICAgICAgIEBsb2NhdGlvbigke2RlZmluZXMucG9zaXRpb25Mb2NhdGlvbn0pIHBvc2l0aW9uOiB2ZWMyPGYzMj4sICAgICAgIFxuICAgIH1cbiAgICBzdHJ1Y3QgVmVydGV4T3V0cHV0IHtcbiAgICAgICAgIEBidWlsdGluKHBvc2l0aW9uKSBwb3NpdGlvbjogdmVjNDxmMzI+LFxuICAgICAgICAgQGxvY2F0aW9uKDApIHV2OiB2ZWMyPGYzMj4sXG4gICAgIH07XG4gICAgQHZlcnRleFxuICAgIGZuIG1haW4oaW5wdXQ6IFZlcnRleElucHV0KSAtPiBWZXJ0ZXhPdXRwdXQge1xuICAgICB2YXIgb3V0cHV0OlZlcnRleE91dHB1dDtcbiAgICAgb3V0cHV0LnV2ID0gaW5wdXQucG9zaXRpb24gKiAwLjUgKyAwLjU7XG4gICAgIG91dHB1dC5wb3NpdGlvbiA9IHZlYzQ8ZjMyPihpbnB1dC5wb3NpdGlvbiwgMC4wLCAxLjApOztcbiAgICAgcmV0dXJuIG91dHB1dDtcbiAgICB9XG4gICAgYDtcbn1cbiIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHNreUJveEZyYWcoZGVmaW5lcykge1xyXG4gIHJldHVybiBgXHJcbiAgICBmbiBsZXNzVGhhbkVxdWFsKGE6dmVjMzxmMzI+LGI6dmVjMzxmMzI+KS0+dmVjMzxmMzI+e1xyXG4gICAgICAgIGxldCB4VmFsdWU6ZjMyPXNlbGVjdChiLngsYS54LGEueDw9Yi54KTtcclxuICAgICAgICBsZXQgeVZhbHVlOmYzMj1zZWxlY3QoYi55LGEueSxhLnk8PWIueSk7XHJcbiAgICAgICAgbGV0IHpWYWx1ZTpmMzI9c2VsZWN0KGIueixhLnosYS56PD1iLnopO1xyXG4gICAgICAgIHJldHVybiB2ZWMzPGYzMj4oeFZhbHVlLHlWYWx1ZSx6VmFsdWUpOyAgICBcclxuICAgICB9XHJcbiAgICBmbiBMaW5lYXJUb3NSR0IoIHZhbHVlOnZlYzQ8ZjMyPiApLT52ZWM0PGYzMj4ge1xyXG4gICAgICAgIHJldHVybiB2ZWM0PGYzMj4oIG1peCggcG93KCB2YWx1ZS5yZ2IsIHZlYzM8ZjMyPiggMC40MTY2NiApICkgKiAxLjA1NSAtIHZlYzM8ZjMyPiggMC4wNTUgKSwgdmFsdWUucmdiICogMTIuOTIsIHZlYzM8ZjMyPiggbGVzc1RoYW5FcXVhbCggdmFsdWUucmdiLCB2ZWMzPGYzMj4oIDAuMDAzMTMwOCApICkgKSApLCB2YWx1ZS5hICk7XHJcbiAgICB9XHJcbiAgc3RydWN0IEZyYWdtZW50SW5wdXQge1xyXG4gICAgQGxvY2F0aW9uKDApIHRleENvb3JkIDogdmVjMzxmMzI+XHJcbiAgfTtcclxuICBAZ3JvdXAoMCkgQGJpbmRpbmcoMikgdmFyIGRlZmF1bHRTYW1wbGVyOiBzYW1wbGVyO1xyXG4gIEBncm91cCgwKSBAYmluZGluZygxKSB2YXIgc2t5Ym94VGV4dHVyZTogdGV4dHVyZV9jdWJlPGYzMj47XHJcbiAgQGZyYWdtZW50XHJcbiAgZm4gbWFpbihpbnB1dCA6IEZyYWdtZW50SW5wdXQpIC0+IEBsb2NhdGlvbigwKSB2ZWM0PGYzMj4ge1xyXG4gICAgbGV0IGNvbG9yID0gdGV4dHVyZVNhbXBsZShza3lib3hUZXh0dXJlLCBkZWZhdWx0U2FtcGxlciwgaW5wdXQudGV4Q29vcmQpO1xyXG4gICAgcmV0dXJuIExpbmVhclRvc1JHQihjb2xvcik7XHJcbiAgfVxyXG5gO1xyXG59XHJcbiIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHNreUJveFZlcnQoZGVmaW5lcykge1xuXHRyZXR1cm4gYFxuICAgc3RydWN0IFN5c3RlbVVuaWZvcm0ge1xuICAgICAgIHByb2plY3Rpb25NYXRyaXg6IG1hdDR4NDxmMzI+LFxuICAgICAgIHZpZXdNYXRyaXg6IG1hdDR4NDxmMzI+LFxuICAgICAgIGludmVyc2VWaWV3TWF0cml4OiBtYXQ0eDQ8ZjMyPixcbiAgICAgICBjYW1lcmFQb3NpdGlvbjogdmVjMzxmMzI+LFxuICAgfTsgXG4gICBzdHJ1Y3QgTWF0ZXJpYWxVbmlmb3JtIHtcbiAgICBtb2RlbE1hdHJpeDogbWF0NHg0PGYzMj4sXG4gfVxuICAgQGJpbmRpbmcoJHtkZWZpbmVzLnNreWJveEJpbmRpbmd9KSBAZ3JvdXAoMCkgdmFyPHVuaWZvcm0+IHNlbGZVbmlmb3JtIDogTWF0ZXJpYWxVbmlmb3JtO1xuICAgQGJpbmRpbmcoJHtkZWZpbmVzLmNhbWVyYUJpbmRpbmd9KSBAZ3JvdXAoMSkgdmFyPHVuaWZvcm0+IHN5c3RlbVVuaWZvcm0gOiBTeXN0ZW1Vbmlmb3JtO1xuICAgICBzdHJ1Y3QgVmVydGV4SW5wdXQge1xuICAgICAgIEBsb2NhdGlvbigke2RlZmluZXMucG9zaXRpb25Mb2NhdGlvbn0pIHBvc2l0aW9uIDogdmVjMzxmMzI+LFxuICAgICB9O1xuICAgICBzdHJ1Y3QgVmVydGV4T3V0cHV0IHtcbiAgICAgICBAYnVpbHRpbihwb3NpdGlvbikgcG9zaXRpb24gOiB2ZWM0PGYzMj4sXG4gICAgICAgQGxvY2F0aW9uKDApIHRleENvb3JkIDogdmVjMzxmMzI+LFxuICAgICB9O1xuICAgICBAdmVydGV4XG4gICAgIGZuIG1haW4oaW5wdXQgOiBWZXJ0ZXhJbnB1dCkgLT4gVmVydGV4T3V0cHV0IHtcbiAgICAgICB2YXIgb3V0cHV0IDogVmVydGV4T3V0cHV0O1xuICAgICAgIG91dHB1dC50ZXhDb29yZCA9IGlucHV0LnBvc2l0aW9uLnh5ejtcbiAgICAgICB2YXIgbW9kZWxWaWV3ID0gc3lzdGVtVW5pZm9ybS52aWV3TWF0cml4O1xuICAgICAgIC8vIERyb3AgdGhlIHRyYW5zbGF0aW9uIHBvcnRpb24gb2YgdGhlIG1vZGVsVmlldyBtYXRyaXhcbiAgICAgICBtb2RlbFZpZXdbM10gPSB2ZWM0KDAuMCwgMC4wLCAwLjAsIG1vZGVsVmlld1szXS53KTtcbiAgICAgICBvdXRwdXQucG9zaXRpb24gPSBzeXN0ZW1Vbmlmb3JtLnByb2plY3Rpb25NYXRyaXggKiBtb2RlbFZpZXcgKiB2ZWM0PGYzMj4oaW5wdXQucG9zaXRpb24sMS4wKTtcbiAgICAgICBvdXRwdXQucG9zaXRpb24gPSBvdXRwdXQucG9zaXRpb24ueHl3dztcbiAgICAgICByZXR1cm4gb3V0cHV0O1xuICAgICB9XG4gICBgO1xufVxuIiwiaW1wb3J0IHsgd2dzbFBhcnNlRGVmaW5lcyB9IGZyb20gXCIuLi9XZ3NsUHJlcHJvY2Vzc29yXCI7XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gc3ByaXRlX2ZzKGRlZmluZXMpIHtcclxuXHRyZXR1cm4gd2dzbFBhcnNlRGVmaW5lc2BcclxuICAjaW5jbHVkZSA8VmVydGV4T3V0cHV0PlxyXG4gIHN0cnVjdCBTZWxmVW5pZm9ybSB7XHJcbiAgICBtb2RlbE1hdHJpeDogbWF0NHg0PGYzMj4sXHJcbiAgICBjb2xvcjp2ZWMzPGYzMj4sXHJcbiAgICByb3RhdGlvbjpmMzIsXHJcbiAgICBjZW50ZXI6dmVjMjxmMzI+LFxyXG4gICAgb3BhY2l0eTpmMzIsXHJcbiAgfVxyXG4gIEBiaW5kaW5nKCR7ZGVmaW5lcy5zcHJpdGVCaW5kaW5nfSkgQGdyb3VwKDApIHZhcjx1bmlmb3JtPiBzZWxmVW5pZm9ybSA6IFNlbGZVbmlmb3JtO1xyXG4gICNpZiR7ZGVmaW5lcy5VU0VfQ09MT1JURVhUVVJFfVxyXG4gICAgQGdyb3VwKDApIEBiaW5kaW5nKCR7ZGVmaW5lcy5iYXNlQ29sb3JTYW1wbGVyQmluZGluZ30pIHZhciBiYXNlQ29sb3JTYW1wbGVyOiBzYW1wbGVyO1xyXG4gICAgQGdyb3VwKDApIEBiaW5kaW5nKCR7ZGVmaW5lcy5iYXNlQ29sb3JUZXh0dXJlQmluZGluZ30pIHZhciBiYXNlQ29sb3JUZXh0dXJlOiB0ZXh0dXJlXzJkPGYzMj47XHJcbiAgI2VuZGlmXHJcbiAgQGZyYWdtZW50XHJcbiAgZm4gbWFpbihpbnB1dDpWZXJ0ZXhPdXRwdXQpIC0+IEBsb2NhdGlvbigwKSB2ZWM0PGYzMj4ge1xyXG4gICAgI2lmJHtkZWZpbmVzLlVTRV9DT0xPUlRFWFRVUkV9XHJcbiAgICAgIHJldHVybiB0ZXh0dXJlU2FtcGxlKGJhc2VDb2xvclRleHR1cmUsIGJhc2VDb2xvclNhbXBsZXIsIGlucHV0LnV2KTtcclxuICAgICNlbHNlXHJcbiAgICAgIHJldHVybiB2ZWM0PGYzMj4oc2VsZlVuaWZvcm0uY29sb3Isc2VsZlVuaWZvcm0ub3BhY2l0eSk7XHJcbiAgICAjZW5kaWZcclxuICB9XHJcbiAgYDtcclxufVxyXG4iLCJpbXBvcnQgeyB3Z3NsUGFyc2VEZWZpbmVzIH0gZnJvbSBcIi4uL1dnc2xQcmVwcm9jZXNzb3JcIjtcclxuZXhwb3J0IGZ1bmN0aW9uIHNwcml0ZV92cyhkZWZpbmVzKSB7XHJcblx0cmV0dXJuIHdnc2xQYXJzZURlZmluZXNgXHJcblxyXG4gICNpbmNsdWRlIDxWZXJ0ZXhJbnB1dD5cclxuICAjaW5jbHVkZSA8VmVydGV4T3V0cHV0PlxyXG4gICNpbmNsdWRlIDxTeXN0ZW1Vbmlmb3JtPlxyXG4gIHN0cnVjdCBTZWxmVW5pZm9ybSB7XHJcbiAgICBtb2RlbE1hdHJpeDogbWF0NHg0PGYzMj4sXHJcbiAgICBjb2xvcjp2ZWMzPGYzMj4sXHJcbiAgICByb3RhdGlvbjpmMzIsXHJcbiAgICBjZW50ZXI6dmVjMjxmMzI+LFxyXG4gICAgb3BhY2l0eTpmMzIsXHJcbiAgfVxyXG4gIEBiaW5kaW5nKCR7ZGVmaW5lcy5zcHJpdGVCaW5kaW5nfSkgQGdyb3VwKDApIHZhcjx1bmlmb3JtPiBzZWxmVW5pZm9ybSA6IFNlbGZVbmlmb3JtO1xyXG4gIEBiaW5kaW5nKCR7ZGVmaW5lcy5jYW1lcmFCaW5kaW5nfSkgQGdyb3VwKDEpIHZhcjx1bmlmb3JtPiBzeXN0ZW1Vbmlmb3JtIDogU3lzdGVtVW5pZm9ybTtcclxuICBAdmVydGV4XHJcbiAgZm4gbWFpbihpbnB1dDogVmVydGV4SW5wdXQpIC0+IFZlcnRleE91dHB1dCB7XHJcbiAgICAgIHZhciBvdXRwdXQ6VmVydGV4T3V0cHV0O1xyXG4gICAgICB2YXIgbXZQb3NpdGlvbjp2ZWM0PGYzMj49IHN5c3RlbVVuaWZvcm0udmlld01hdHJpeCAqc2VsZlVuaWZvcm0ubW9kZWxNYXRyaXgqdmVjNDxmMzI+KDAuMCwwLjAsMC4wLDEuMCk7XHJcbiAgICAgICNpZiAke2RlZmluZXMuSEFTX1VWfVxyXG4gICAgICAgIG91dHB1dC51dj1pbnB1dC51djtcclxuICAgICAgI2VuZGlmXHJcbiAgICAgIHZhciBzY2FsZTp2ZWMyPGYzMj47XHJcbiAgICAgIHNjYWxlLnggPSBsZW5ndGgodmVjMzxmMzI+KHNlbGZVbmlmb3JtLm1vZGVsTWF0cml4WzBdLngsIHNlbGZVbmlmb3JtLm1vZGVsTWF0cml4WzBdLnksIHNlbGZVbmlmb3JtLm1vZGVsTWF0cml4WzBdLnopKTtcclxuICAgICAgc2NhbGUueSA9IGxlbmd0aCh2ZWMzPGYzMj4oc2VsZlVuaWZvcm0ubW9kZWxNYXRyaXhbMV0ueCwgc2VsZlVuaWZvcm0ubW9kZWxNYXRyaXhbMV0ueSwgc2VsZlVuaWZvcm0ubW9kZWxNYXRyaXhbMV0ueikpO1xyXG4gICAgICAvLyBzY2FsZSAqPSAtIG12UG9zaXRpb24uejtcclxuICAgICAgdmFyIGFsaWduZWRQb3NpdGlvbjp2ZWMyPGYzMj4gPShpbnB1dC5wb3NpdGlvbi54eS0gKHNlbGZVbmlmb3JtLmNlbnRlciAtIHZlYzI8ZjMyPigwLjUsMC41KSkpICogc2NhbGU7XHJcbiAgICAgIGxldCByb3RhdGVkUG9zaXRpb25YID0gY29zKHNlbGZVbmlmb3JtLnJvdGF0aW9uKSAqIGFsaWduZWRQb3NpdGlvbi54IC0gc2luKCBzZWxmVW5pZm9ybS5yb3RhdGlvbiApICogYWxpZ25lZFBvc2l0aW9uLnk7XHJcbiAgICAgIGxldCByb3RhdGVkUG9zaXRpb25ZID0gc2luKHNlbGZVbmlmb3JtLnJvdGF0aW9uKSAqIGFsaWduZWRQb3NpdGlvbi54ICsgY29zKCBzZWxmVW5pZm9ybS5yb3RhdGlvbiApICogYWxpZ25lZFBvc2l0aW9uLnk7XHJcbiAgICAgIHZhciByb3RhdGVkUG9zaXRpb249dmVjMjxmMzI+KHJvdGF0ZWRQb3NpdGlvblgscm90YXRlZFBvc2l0aW9uWSk7XHJcbiAgICAgIGxldCBuZXdQb2ludCA9bXZQb3NpdGlvbi54eSsgcm90YXRlZFBvc2l0aW9uO1xyXG4gICAgICBvdXRwdXQucG9zaXRpb24gPSBzeXN0ZW1Vbmlmb3JtLnByb2plY3Rpb25NYXRyaXggKiB2ZWM0PGYzMj4obmV3UG9pbnQueCxuZXdQb2ludC55LG12UG9zaXRpb24ueixtdlBvc2l0aW9uLncpO1xyXG4gICAgICByZXR1cm4gb3V0cHV0O1xyXG4gIH1cclxuICBgO1xyXG59XHJcbiIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGJsZW5kRnJhZyhkZWZpbmVzKSB7XHJcblx0cmV0dXJuIGBcclxuICAgIHN0cnVjdCBGcmFnSW5wdXQge1xyXG4gICAgICAgIEBsb2NhdGlvbigwKSB1djogdmVjMjxmMzI+LFxyXG4gICAgfTtcclxuICAgIEBncm91cCgwKSBAYmluZGluZyh7e3REaWZmdXNlQmluZGluZ319KSB2YXIgdERpZmZ1c2U6IHRleHR1cmVfMmQ8ZjMyPjtcclxuICAgIEBncm91cCgwKSBAYmluZGluZyh7e2Jhc2VDb2xvclRleHR1cmVCaW5kaW5nfX0pIHZhciBiYXNlQ29sb3JUZXh0dXJlOiB0ZXh0dXJlXzJkPGYzMj47XHJcbiAgICBAZ3JvdXAoMCkgQGJpbmRpbmcoe3t0U2FtcGxlckJpbmRpbmd9fSkgdmFyIHRTYW1wbGVyOiBzYW1wbGVyO1xyXG4gICAgQGZyYWdtZW50XHJcbiAgICBmbiBtYWluKGlucHV0OkZyYWdJbnB1dCkgLT4gQGxvY2F0aW9uKDApIHZlYzQ8ZjMyPiB7XHJcbiAgICAgICAgbGV0IHBvc3RDb2xvcjp2ZWM0PGYzMj4gPSB0ZXh0dXJlU2FtcGxlKHREaWZmdXNlLCB0U2FtcGxlciwgaW5wdXQudXYpO1xyXG4gICAgICAgIGxldCBiYXNlQ29sb3I6dmVjNDxmMzI+ID0gdGV4dHVyZVNhbXBsZShiYXNlQ29sb3JUZXh0dXJlLCB0U2FtcGxlciwgaW5wdXQudXYpO1xyXG4gICAgICByZXR1cm4gYmFzZUNvbG9yK3Bvc3RDb2xvcjtcclxuICAgIH0gICBcclxuICAgIGA7XHJcbn1cclxuIiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gQmx1cihkZWZpbmVzKSB7XHJcblx0cmV0dXJuIGBcclxuICAgIHN0cnVjdCBGcmFnSW5wdXQge1xyXG4gICAgICAgIEBsb2NhdGlvbigwKSB1djogdmVjMjxmMzI+LFxyXG4gICAgfVxyXG4gICAgc3RydWN0IEJsdXJVbmlmb3JtcyB7XHJcbiAgICAgICAgZGlyZWN0aW9uOnZlYzI8ZjMyPixcclxuICAgIH1cclxuICAgIGZuIGdhdXNzaWFuUGRmKHg6ZjMyLCBzaWdtYTpmMzIpLT5mMzIge1xyXG4gICAgICAgIHJldHVybiAwLjM5ODk0ICogZXhwKCAtMC41ICogeCAqIHgvKCBzaWdtYSAqIHNpZ21hKSkvc2lnbWE7XHJcbiAgICB9XHJcbiAgICBAZ3JvdXAoMCkgQGJpbmRpbmcoMCkgIHZhcjx1bmlmb3JtPiBibHVyVW5pZm9ybXMgOiBCbHVyVW5pZm9ybXM7XHJcbiAgICBAZ3JvdXAoMCkgQGJpbmRpbmcoe3t0RGlmZnVzZUJpbmRpbmd9fSkgdmFyIHREaWZmdXNlOiB0ZXh0dXJlXzJkPGYzMj47XHJcbiAgICBAZ3JvdXAoMCkgQGJpbmRpbmcoe3t0U2FtcGxlckJpbmRpbmd9fSkgdmFyIHRTYW1wbGVyOiBzYW1wbGVyO1xyXG4gICAgQGZyYWdtZW50XHJcbiAgICBmbiBtYWluKGlucHV0OkZyYWdJbnB1dCkgLT4gQGxvY2F0aW9uKDApIHZlYzQ8ZjMyPiB7XHJcbiAgICAgICAgbGV0IGludlNpemU6dmVjMjxmMzI+ID0gdmVjMjxmMzI+KDEuMCwxLjApIC8gdmVjMjxmMzI+KHRleHR1cmVEaW1lbnNpb25zKHREaWZmdXNlKSk7XHJcbiAgICAgICAgbGV0IGZTaWdtYTpmMzIgPWYzMigke2RlZmluZXMuU0lHTUF9KTtcclxuICAgICAgICB2YXIgd2VpZ2h0U3VtOmYzMiA9IGdhdXNzaWFuUGRmKDAuMCwgZlNpZ21hKTtcclxuICAgICAgICBsZXQgYmFzZUNvbG9yPXRleHR1cmVTYW1wbGUodERpZmZ1c2UsIHRTYW1wbGVyLCBpbnB1dC51dik7XHJcbiAgICAgICAgdmFyIGRpZmZ1c2VTdW06dmVjMzxmMzI+ID0gYmFzZUNvbG9yLnJnYiAqIHdlaWdodFN1bTtcclxuICAgICAgICBsZXQgdXZPZmZzZXQ6dmVjMjxmMzI+ID0gYmx1clVuaWZvcm1zLmRpcmVjdGlvbiAqIGludlNpemU7XHJcbiAgICAgICAgZm9yKCB2YXIgaSA6IHUzMiA9IDE7IGkgPCAke2RlZmluZXMuS0VSTkVMX1JBRElVU307aSA9IGkgKyAxICkge1xyXG4gICAgICAgICAgICBsZXQgeDpmMzIgPSBmMzIoaSk7XHJcbiAgICAgICAgICAgIGxldCB3OmYzMiA9IGdhdXNzaWFuUGRmKHgsIGZTaWdtYSk7XHJcbiAgICAgICAgICAgIGxldCBzYW1wbGUxOnZlYzM8ZjMyPj10ZXh0dXJlU2FtcGxlKHREaWZmdXNlLCB0U2FtcGxlciwgaW5wdXQudXYrIHV2T2Zmc2V0KngpLnJnYjtcclxuICAgICAgICAgICAgbGV0IHNhbXBsZTI6dmVjMzxmMzI+PXRleHR1cmVTYW1wbGUodERpZmZ1c2UsIHRTYW1wbGVyLCBpbnB1dC51di0gdXZPZmZzZXQqeCkucmdiO1xyXG4gICAgICAgICAgICBkaWZmdXNlU3VtID1kaWZmdXNlU3VtKyAoc2FtcGxlMitzYW1wbGUyKSogdztcclxuICAgICAgICAgICAgd2VpZ2h0U3VtICs9IDIuMCAqIHc7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGRpZmZ1c2VTdW0vPXdlaWdodFN1bTtcclxuICAgICAgcmV0dXJuIHZlYzQ8ZjMyPihkaWZmdXNlU3VtLGJhc2VDb2xvci5hKTtcclxuICAgIH1cclxuICBgO1xyXG59XHJcbiIsImV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIEx1bWlub3NpdHlIaWdoKGRlZmluZXMpIHtcclxuXHRyZXR1cm4gYFxyXG4gICAgc3RydWN0IEx1bWlub3NpdHlVbmlmb3Jtc3tcclxuICAgICAgICBsdW1pbm9zaXR5VGhyZXNob2xkOmYzMixcclxuICAgICAgICBzbW9vdGhXaWR0aDpmMzIsXHJcbiAgICAgICAgZGVmYXVsdENvbG9yOnZlYzM8ZjMyPixcclxuICAgICAgICBkZWZhdWx0T3BhY2l0eTpmMzIsXHJcbiAgICB9XHJcbiAgICBzdHJ1Y3QgRnJhZ0lucHV0IHtcclxuICAgICAgICBAbG9jYXRpb24oMCkgdXY6IHZlYzI8ZjMyPixcclxuICAgIH07XHJcbiAgICBAZ3JvdXAoMCkgQGJpbmRpbmcoMCkgIHZhcjx1bmlmb3JtPiBsdW1pbm9zaXR5VW5pZm9ybXMgOiBMdW1pbm9zaXR5VW5pZm9ybXM7XHJcbiAgICBAZ3JvdXAoMCkgQGJpbmRpbmcoe3t0RGlmZnVzZUJpbmRpbmd9fSkgdmFyIHREaWZmdXNlOiB0ZXh0dXJlXzJkPGYzMj47XHJcbiAgICBAZ3JvdXAoMCkgQGJpbmRpbmcoe3t0U2FtcGxlckJpbmRpbmd9fSkgdmFyIHRTYW1wbGVyOiBzYW1wbGVyO1xyXG4gICAgQGZyYWdtZW50XHJcbiAgICBmbiBtYWluKGlucHV0OkZyYWdJbnB1dCktPiBAbG9jYXRpb24oMCkgdmVjNDxmMzI+IHtcclxuXHJcbiAgICAgICAgbGV0IHRleGVsOnZlYzQ8ZjMyPiA9IHRleHR1cmVTYW1wbGUodERpZmZ1c2UsIHRTYW1wbGVyLCBpbnB1dC51dik7XHJcblxyXG4gICAgICAgIGxldCBsdW1hOnZlYzM8ZjMyPiA9IHZlYzM8ZjMyPiggMC4yOTksMC41ODcsMC4xMTQgKTtcclxuXHJcbiAgICAgICAgbGV0IHY6ZjMyID0gZG90KCB0ZXhlbC54eXosIGx1bWEgKTtcclxuXHJcbiAgICAgICAgbGV0IG91dHB1dENvbG9yOnZlYzQ8ZjMyPiA9IHZlYzQ8ZjMyPiggbHVtaW5vc2l0eVVuaWZvcm1zLmRlZmF1bHRDb2xvci5yZ2IsIGx1bWlub3NpdHlVbmlmb3Jtcy5kZWZhdWx0T3BhY2l0eSApO1xyXG5cclxuICAgICAgICBsZXQgYWxwaGE6ZjMyID0gc21vb3Roc3RlcCggbHVtaW5vc2l0eVVuaWZvcm1zLmx1bWlub3NpdHlUaHJlc2hvbGQsIGx1bWlub3NpdHlVbmlmb3Jtcy5sdW1pbm9zaXR5VGhyZXNob2xkICsgbHVtaW5vc2l0eVVuaWZvcm1zLnNtb290aFdpZHRoLCB2ICk7XHJcblxyXG4gICAgICAgcmV0dXJuIG1peCggb3V0cHV0Q29sb3IsIHRleGVsLCBhbHBoYSApO1xyXG4gICAgfVxyXG4gICAgYDtcclxufVxyXG4iLCJpbXBvcnQgeyB3Z3NsUGFyc2VEZWZpbmVzIH0gZnJvbSBcIi4uLy4uL1dnc2xQcmVwcm9jZXNzb3JcIjtcclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBGcmFnSW5wdXQoZGVmaW5lcykge1xyXG5cdHJldHVybiB3Z3NsUGFyc2VEZWZpbmVzYFxyXG4gICAgc3RydWN0IEZyYWdJbnB1dCB7XHJcbiAgICAgIEBidWlsdGluKGZyb250X2ZhY2luZykgZnJvbnRGYWNpbmc6IGJvb2wsXHJcbiAgICAgIEBsb2NhdGlvbigwKSB3b3JsZFBvczp2ZWMzPGYzMj4sXHJcbiAgICAgIEBsb2NhdGlvbigxKSBub3JtYWw6dmVjMzxmMzI+LFxyXG4gICAgICBAbG9jYXRpb24oMikgdXY6dmVjMjxmMzI+LFxyXG4gICAgICBAbG9jYXRpb24oMykgdmlldzogdmVjMzxmMzI+LCAvLyBWZWN0b3IgZnJvbSB2ZXJ0ZXggdG8gY2FtZXJhLlxyXG4gICAgICBAbG9jYXRpb24oNCkgY29sb3I6IHZlYzQ8ZjMyPixcclxuICAgICAgQGxvY2F0aW9uKDUpIHZpZXdQb3NpdGlvbjogdmVjMzxmMzI+LFxyXG4gIH0gXHJcbiAgYDtcclxufVxyXG4iLCJleHBvcnQgZnVuY3Rpb24gUG9pbnRGcmFnSW5wdXQoZGVmaW5lcykge1xyXG5cdHJldHVybiBgXHJcbiAgICAgIHN0cnVjdCBQb2ludEZyYWdJbnB1dHtcclxuICAgICAgICBAbG9jYXRpb24oMCkgdXY6dmVjMjxmMzI+LFxyXG4gICAgICAgIEBsb2NhdGlvbigxKSBjb2xvcjogdmVjNDxmMzI+LFxyXG4gICAgICAgIEBsb2NhdGlvbigyKSBzaXplOiBmMzIsXHJcbiAgICAgIH1cclxuICAgIGA7XHJcbn1cclxuIiwiaW1wb3J0IHsgd2dzbFBhcnNlRGVmaW5lcyB9IGZyb20gXCIuLi8uLi9XZ3NsUHJlcHJvY2Vzc29yXCI7XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gUG9pbnRWZXJ0SW5wdXQoZGVmaW5lcykge1xyXG5cdHJldHVybiB3Z3NsUGFyc2VEZWZpbmVzYFxyXG4gIHN0cnVjdCBQb2ludFZlcnRJbnB1dCB7XHJcbiAgICBAbG9jYXRpb24oJHtkZWZpbmVzLnBvc2l0aW9uTG9jYXRpb259KSBwb3NpdGlvbjogdmVjMzxmMzI+LCAgICAgICBcclxuICAgIEBsb2NhdGlvbigke2RlZmluZXMudXZMb2NhdGlvbn0pIHV2OiB2ZWMyPGYzMj4sXHJcbiAgICAjaWYke2RlZmluZXMuSEFTX0NPTE9SfSBcclxuICAgICAgICBAbG9jYXRpb24oJHtkZWZpbmVzLmNvbG9yTG9jYXRpb259KSBjb2xvcjogdmVjMzxmMzI+LFxyXG4gICAgI2VuZGlmXHJcbiAgICAjaWYgJHtkZWZpbmVzLkhBU19TSVpFfVxyXG4gICAgICAgIEBsb2NhdGlvbigke2RlZmluZXMuc2l6ZUxvY2F0aW9ufSkgc2l6ZTogZjMyLFxyXG4gICAgI2VuZGlmXHJcbiAgICAjaWYgJHtkZWZpbmVzLlVTRV9JTlNUQU5DRX1cclxuICAgICAgICBAYnVpbHRpbihpbnN0YW5jZV9pbmRleCkgaW5zdGFuY2VJZHggOiB1MzJcclxuICAgICNlbmRpZlxyXG4gIH1cclxuICBgO1xyXG59XHJcbiIsImV4cG9ydCBmdW5jdGlvbiBQb2ludFZlcnRPdXRwdXQoZGVmaW5lcykge1xyXG5cdHJldHVybiBgXHJcbiAgICBzdHJ1Y3QgUG9pbnRWZXJ0T3V0cHV0e1xyXG4gICAgICAgIEBidWlsdGluKHBvc2l0aW9uKSBwb3NpdGlvbjp2ZWM0PGYzMj4sXHJcbiAgICAgICAgQGxvY2F0aW9uKDApIHV2OnZlYzI8ZjMyPixcclxuICAgICAgICBAbG9jYXRpb24oMSkgY29sb3I6IHZlYzQ8ZjMyPixcclxuICAgICAgICBAbG9jYXRpb24oMikgc2l6ZTogZjMyLFxyXG4gICAgfVxyXG4gICBgO1xyXG59XHJcbiIsImltcG9ydCB7IHdnc2xQYXJzZURlZmluZXMgfSBmcm9tIFwiLi4vLi4vV2dzbFByZXByb2Nlc3NvclwiO1xyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIFZlcnRleElucHV0KGRlZmluZXMpIHtcclxuXHRyZXR1cm4gd2dzbFBhcnNlRGVmaW5lc2BcclxuICAgICAgICBzdHJ1Y3QgVmVydGV4SW5wdXQge1xyXG4gICAgICAgICAgICBAbG9jYXRpb24oJHtkZWZpbmVzLnBvc2l0aW9uTG9jYXRpb259KSBwb3NpdGlvbjogdmVjMzxmMzI+LCAgIFxyXG4gICAgICAgICAgICAjaWYke2RlZmluZXMuSEFTX05PUk1BTH0gIFxyXG4gICAgICAgICAgICAgICAgQGxvY2F0aW9uKCR7ZGVmaW5lcy5ub3JtYWxMb2NhdGlvbn0pIG5vcm1hbDogdmVjMzxmMzI+LFxyXG4gICAgICAgICAgICAjZW5kaWZcclxuICAgICAgICAgICAgI2lmJHtkZWZpbmVzLkhBU19DT0xPUn0gXHJcbiAgICAgICAgICAgICAgICBAbG9jYXRpb24oJHtkZWZpbmVzLmNvbG9yTG9jYXRpb259KSBjb2xvcjogdmVjMzxmMzI+LFxyXG4gICAgICAgICAgICAjZW5kaWZcclxuICAgICAgICAgICAgI2lmICR7ZGVmaW5lcy5IQVNfVVZ9XHJcbiAgICAgICAgICAgICAgICBAbG9jYXRpb24oJHtkZWZpbmVzLnV2TG9jYXRpb259KSB1djogdmVjMjxmMzI+LFxyXG4gICAgICAgICAgICAjZW5kaWZcclxuICAgICAgICAgICAgI2lmJHtkZWZpbmVzLkhBU19TS0lOfSBcclxuICAgICAgICAgICAgICAgIEBsb2NhdGlvbigke2RlZmluZXMuam9pbnQwTG9jYXRpb259KSBqb2ludDA6dmVjNDxmMzI+LFxyXG4gICAgICAgICAgICAgICAgQGxvY2F0aW9uKCR7ZGVmaW5lcy53ZWlnaHQwTG9jYXRpb259KSB3ZWlnaHQwOnZlYzQ8ZjMyPixcclxuICAgICAgICAgICAgI2VuZGlmXHJcbiAgICAgICAgICAgICNpZiAke2RlZmluZXMuVVNFX0lOU1RBTkNFfVxyXG4gICAgICAgICAgICAgICAgQGJ1aWx0aW4oaW5zdGFuY2VfaW5kZXgpIGluc3RhbmNlSWR4IDogdTMyXHJcbiAgICAgICAgICAgICNlbmRpZlxyXG4gICAgICAgIH1cclxuICAgYDtcclxufVxyXG4iLCJpbXBvcnQgeyB3Z3NsUGFyc2VEZWZpbmVzIH0gZnJvbSBcIi4uLy4uL1dnc2xQcmVwcm9jZXNzb3JcIjtcclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBWZXJ0ZXhPdXRwdXQoZGVmaW5lcykge1xyXG5cdHJldHVybiB3Z3NsUGFyc2VEZWZpbmVzYFxyXG4gICAgc3RydWN0IFZlcnRleE91dHB1dCB7XHJcbiAgICAgICAgQGJ1aWx0aW4ocG9zaXRpb24pIHBvc2l0aW9uOnZlYzQ8ZjMyPixcclxuICAgICAgICBAbG9jYXRpb24oMCkgd29ybGRQb3M6dmVjMzxmMzI+LFxyXG4gICAgICAgIEBsb2NhdGlvbigxKSBub3JtYWw6dmVjMzxmMzI+LFxyXG4gICAgICAgIEBsb2NhdGlvbigyKSB1djp2ZWMyPGYzMj4sXHJcbiAgICAgICAgQGxvY2F0aW9uKDMpIHZpZXc6IHZlYzM8ZjMyPiwgLy8gVmVjdG9yIGZyb20gdmVydGV4IHRvIGNhbWVyYS5cclxuICAgICAgICBAbG9jYXRpb24oNCkgY29sb3I6IHZlYzQ8ZjMyPixcclxuICAgICAgICBAbG9jYXRpb24oNSkgdmlld1Bvc2l0aW9uOiB2ZWMzPGYzMj4sXHJcbiAgICB9IFxyXG4gICAgYDtcclxufVxyXG4iLCJpbXBvcnQgeyB3Z3NsUGFyc2VEZWZpbmVzIH0gZnJvbSBcIi4uLy4uL1dnc2xQcmVwcm9jZXNzb3JcIjtcclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBTeXN0ZW1Vbmlmb3JtKGRlZmluZXMpIHtcclxuXHRyZXR1cm4gd2dzbFBhcnNlRGVmaW5lc2BcclxuICAgICAgc3RydWN0IFN5c3RlbVVuaWZvcm0ge1xyXG4gICAgICAgICAgcHJvamVjdGlvbk1hdHJpeDogbWF0NHg0PGYzMj4sXHJcbiAgICAgICAgICB2aWV3TWF0cml4OiBtYXQ0eDQ8ZjMyPixcclxuICAgICAgICAgIGludmVyc2VWaWV3TWF0cml4OiBtYXQ0eDQ8ZjMyPixcclxuICAgICAgICAgIGNhbWVyYVBvc2l0aW9uOiB2ZWMzPGYzMj4sXHJcbiAgICAgIH07IFxyXG4gIGA7XHJcbn1cclxuIiwiaW1wb3J0IHsgd2dzbFBhcnNlRGVmaW5lcyB9IGZyb20gXCIuLi8uLi9XZ3NsUHJlcHJvY2Vzc29yXCI7XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gVGV4dHVyZUFuZFNhbXBsZXJEZWZpbmUoZGVmaW5lcykge1xyXG5cdHJldHVybiB3Z3NsUGFyc2VEZWZpbmVzYFxyXG4gICAgI2lmICR7ZGVmaW5lcy5VU0VfSUJMfVxyXG4gICAgICBAZ3JvdXAoMCkgQGJpbmRpbmcoJHtkZWZpbmVzLnNwZWN1bGFyRW52VGV4dHVyZUJpbmRpbmd9KSB2YXIgc3BlY3VsYXJFbnZUZXh0dXJlOiB0ZXh0dXJlX2N1YmU8ZjMyPjtcclxuICAgICAgQGdyb3VwKDApIEBiaW5kaW5nKCR7ZGVmaW5lcy5zcGVjdWxhckVudlNhbXBsZXJCaW5kaW5nfSkgdmFyIHNwZWN1bGFyRW52U2FtcGxlcjogc2FtcGxlcjtcclxuICAgICNlbmRpZlxyXG4gICAgI2lmICR7ZGVmaW5lcy5VU0VfVEVYVFVSRX1cclxuICAgICAgQGdyb3VwKDApIEBiaW5kaW5nKCR7ZGVmaW5lcy5iYXNlQ29sb3JUZXh0dXJlQmluZGluZ30pIHZhciBiYXNlQ29sb3JUZXh0dXJlOiB0ZXh0dXJlXzJkPGYzMj47XHJcbiAgICAgIEBncm91cCgwKSBAYmluZGluZygke2RlZmluZXMuYmFzZUNvbG9yU2FtcGxlckJpbmRpbmd9KSB2YXIgYmFzZUNvbG9yU2FtcGxlcjogc2FtcGxlcjtcclxuICAgICNlbmRpZlxyXG4gICAgLy8gbm9ybWFsIG1hcFxyXG4gICAgI2lmICR7ZGVmaW5lcy5VU0VfTk9STUFMVEVYVFVSRX1cclxuICAgICAgQGdyb3VwKDApIEBiaW5kaW5nKCR7ZGVmaW5lcy5ub3JtYWxUZXh0dXJlQmluZGluZ30pIHZhciBub3JtYWxUZXh0dXJlOiB0ZXh0dXJlXzJkPGYzMj47XHJcbiAgICAgIEBncm91cCgwKSBAYmluZGluZygke2RlZmluZXMubm9ybWFsU2FtcGxlckJpbmRpbmd9KSB2YXIgbm9ybWFsU2FtcGxlcjogc2FtcGxlcjtcclxuICAgICNlbmRpZlxyXG4gICAgLy8gZW1taXN2ZSBtYXBcclxuICAgICNpZiAke2RlZmluZXMuVVNFX0VNSVNTSVZFVEVYVFVSRX1cclxuICAgICAgQGdyb3VwKDApIEBiaW5kaW5nKCR7ZGVmaW5lcy5lbWlzc2l2ZVRleHR1cmVCaW5kaW5nfSkgdmFyIGVtaXNzaXZlVGV4dHVyZTogdGV4dHVyZV8yZDxmMzI+O1xyXG4gICAgICBAZ3JvdXAoMCkgQGJpbmRpbmcoJHtkZWZpbmVzLmVtaXNzaXZlU2FtcGxlckJpbmRpbmd9KSB2YXIgZW1pc3NpdmVTYW1wbGVyOiBzYW1wbGVyO1xyXG4gICAgI2VuZGlmXHJcblxyXG4gICAgLy8gbWV0YWwgcm91Z2huZXNzXHJcbiAgICAjaWYgJHtkZWZpbmVzLlVTRV9NRVRBTE5FU1NURVhUVVJFfVxyXG4gICAgICBAZ3JvdXAoMCkgQGJpbmRpbmcoJHtkZWZpbmVzLm1ldGFsbmVzc1JvdWdobmVzc1RleHR1cmVCaW5kaW5nfSkgdmFyIG1ldGFsbmVzc1JvdWdobmVzc1RleHR1cmU6IHRleHR1cmVfMmQ8ZjMyPjtcclxuICAgICAgQGdyb3VwKDApIEBiaW5kaW5nKCR7ZGVmaW5lcy5tZXRhbG5lc3NSb3VnaG5lc3NTYW1wbGVyQmluZGluZ30pIHZhciBtZXRhbG5lc3NSb3VnaG5lc3NTYW1wbGVyOiBzYW1wbGVyO1xyXG4gICAgI2VuZGlmXHJcbiAgICAvLyBvY2NsdXNpb24gdGV4dHVyZVxyXG4gICAgI2lmICR7ZGVmaW5lcy5VU0VfQU9URVhUVVJFfVxyXG4gICAgICBAZ3JvdXAoMCkgQGJpbmRpbmcoJHtkZWZpbmVzLmFvVGV4dHVyZUJpbmRpbmd9KSB2YXIgYW9UZXh0dXJlOiB0ZXh0dXJlXzJkPGYzMj47XHJcbiAgICAgIEBncm91cCgwKSBAYmluZGluZygke2RlZmluZXMuYW9TYW1wbGVyQmluZGluZ30pIHZhciBhb1NhbXBsZXI6IHNhbXBsZXI7XHJcbiAgICAjZW5kaWZcclxuICAgICNpZiAke2RlZmluZXMuVVNFX05PUk1BTFRFWFRVUkV9XHJcbiAgICAgICNpbmNsdWRlIDxnZXRUQk4+XHJcbiAgICAgICNpbmNsdWRlIDxnZXROb3JtYWxCeU5vcm1hbFRleHR1cmU+XHJcbiAgICAjZWxzZVxyXG4gICAgICAjaW5jbHVkZSA8Z2V0Tm9ybWFsPlxyXG4gICAgI2VuZGlmXHJcbiAgYDtcclxufVxyXG4iLCJpbXBvcnQgeyB3Z3NsUGFyc2VEZWZpbmVzIH0gZnJvbSBcIi4uLy4uL1dnc2xQcmVwcm9jZXNzb3JcIjtcclxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZW52aXJvbm1lbnQoZGVmaW5lcykge1xyXG4gIHJldHVybiB3Z3NsUGFyc2VEZWZpbmVzYFxyXG4gICAjaWYgJHtkZWZpbmVzLkVOVlRFWFRVUkVfVFlQRV9DVUJFX1VWfVxyXG4gICAgICAgIGNvbnN0IGN1YmVVVl9taW5NaXBMZXZlbDpmMzI9IDQuMDtcclxuICAgICAgICBjb25zdCBjdWJlVVZfbWluVGlsZVNpemU6ZjMyPSAxNi4wO1xyXG4gICAgICAgIGNvbnN0IENVQkVVVl9NQVhfTUlQOmYzMj02LjA7XHJcbiAgICAgICAgY29uc3QgQ1VCRVVWX1RFWEVMX1dJRFRIOmYzMj0xLjAvMjU2LjA7XHJcbiAgICAgICAgY29uc3QgQ1VCRVVWX1RFWEVMX0hFSUdIVDpmMzI9MS4wLzI1Ni4wO1xyXG4gICAgICAgIGZuIGdldEZhY2UoZGlyZWN0aW9uOnZlYzM8ZjMyPiApLT5mMzIge1xyXG4gICAgICAgICAgICBsZXQgYWJzRGlyZWN0aW9uOnZlYzM8ZjMyPiA9IGFicyggZGlyZWN0aW9uICk7XHJcbiAgICAgICAgICAgIHZhciBmYWNlOmYzMiA9IC0gMS4wO1xyXG4gICAgICAgICAgICBpZiAoIGFic0RpcmVjdGlvbi54ID4gYWJzRGlyZWN0aW9uLnogKSB7XHJcbiAgICAgICAgICAgICAgICBpZiAoIGFic0RpcmVjdGlvbi54ID4gYWJzRGlyZWN0aW9uLnkgKXtcclxuICAgICAgICAgICAgICAgICAgICBmYWNlID1zZWxlY3QoMy4wLDAuMCxkaXJlY3Rpb24ueCA+IDAuMCk7XHJcbiAgICAgICAgICAgICAgICB9ZWxzZXtcclxuICAgICAgICAgICAgICAgICAgICBmYWNlID1zZWxlY3QoNC4wLDEuMCxkaXJlY3Rpb24ueSA+IDAuMCk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgICAgIGlmICggYWJzRGlyZWN0aW9uLnogPiBhYnNEaXJlY3Rpb24ueSApe1xyXG4gICAgICAgICAgICAgICAgICAgIGZhY2UgPXNlbGVjdCg1LjAsMi4wLGRpcmVjdGlvbi56ID4gMC4wKTtcclxuICAgICAgICAgICAgICAgIH1lbHNle1xyXG4gICAgICAgICAgICAgICAgICAgIGZhY2UgPXNlbGVjdCg0LjAsMS4wLGRpcmVjdGlvbi55ID4gMC4wKTtcclxuICAgICAgICAgICAgICAgIH0gICAgICAgXHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuIGZhY2U7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGZuIGdldFVWKCBkaXJlY3Rpb246dmVjMzxmMzI+LCBmYWNlOmYzMiApLT52ZWMyPGYzMj4ge1xyXG4gICAgICAgICAgICB2YXIgdXY6dmVjMjxmMzI+O1xyXG4gICAgICAgICAgICBpZiAoIGZhY2UgPT0gMC4wICkge1xyXG4gICAgICAgICAgICAgICAgdXYgPSB2ZWMyPGYzMj4oIGRpcmVjdGlvbi56LCBkaXJlY3Rpb24ueSApIC8gYWJzKCBkaXJlY3Rpb24ueCApO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIGVsc2UgaWYgKCBmYWNlID09IDEuMCApIHtcclxuICAgICAgICAgICAgICAgIHV2ID0gdmVjMjxmMzI+KCAtIGRpcmVjdGlvbi54LCAtIGRpcmVjdGlvbi56ICkgLyBhYnMoIGRpcmVjdGlvbi55ICk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSBpZiAoIGZhY2UgPT0gMi4wICkge1xyXG4gICAgICAgICAgICAgICAgdXYgPSB2ZWMyPGYzMj4oIC0gZGlyZWN0aW9uLngsIGRpcmVjdGlvbi55ICkgLyBhYnMoIGRpcmVjdGlvbi56ICk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSBpZiAoIGZhY2UgPT0gMy4wICkge1xyXG4gICAgICAgICAgICAgICAgdXYgPSB2ZWMyPGYzMj4oIC0gZGlyZWN0aW9uLnosIGRpcmVjdGlvbi55ICkgLyBhYnMoIGRpcmVjdGlvbi54ICk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSBpZiAoIGZhY2UgPT0gNC4wICkge1xyXG4gICAgICAgICAgICAgICAgdXYgPSB2ZWMyPGYzMj4oIC0gZGlyZWN0aW9uLngsIGRpcmVjdGlvbi56ICkgLyBhYnMoIGRpcmVjdGlvbi55ICk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICB1diA9IHZlYzI8ZjMyPiggZGlyZWN0aW9uLngsIGRpcmVjdGlvbi55ICkgLyBhYnMoIGRpcmVjdGlvbi56ICk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgcmV0dXJuIDAuNSAqICggdXYgKyAxLjAgKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZm4gYmlsaW5lYXJDdWJlVVYoZW52VGV4dHVyZTp0ZXh0dXJlX2N1YmU8ZjMyPixiYXNlU2FtcGxlcjpzYW1wbGVyLGRpcmVjdGlvbjp2ZWMzPGYzMj4sIG1pcEludDpmMzIgKS0+dmVjMzxmMzI+IHtcclxuICAgICAgICAgICAgdmFyIGZhY2U6ZjMyID0gZ2V0RmFjZSggZGlyZWN0aW9uICk7XHJcbiAgICAgICAgICAgIGxldCBmaWx0ZXJJbnQ6ZjMyID0gbWF4KCBjdWJlVVZfbWluTWlwTGV2ZWwgLSBtaXBJbnQsIDAuMCApO1xyXG4gICAgICAgICAgICBsZXQgdGVtcE1pcEludCA9IG1heCggbWlwSW50LCBjdWJlVVZfbWluTWlwTGV2ZWwgKTtcclxuICAgICAgICAgICAgbGV0IGZhY2VTaXplOmYzMiA9IGV4cDIoIHRlbXBNaXBJbnQgKTtcclxuICAgICAgICAgICAgdmFyIHV2OnZlYzI8ZjMyPiA9IGdldFVWKCBkaXJlY3Rpb24sIGZhY2UgKSAqICggZmFjZVNpemUgLSAyLjAgKSArIDEuMDtcclxuICAgICAgICAgICAgaWYgKCBmYWNlID4gMi4wICkge1xyXG4gICAgICAgICAgICAgICAgdXYueSArPSBmYWNlU2l6ZTtcclxuICAgICAgICAgICAgICAgIGZhY2UgLT0gMy4wO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHV2LnggKz0gZmFjZSAqIGZhY2VTaXplO1xyXG4gICAgICAgICAgICB1di54ICs9IGZpbHRlckludCAqIDMuMCAqIGN1YmVVVl9taW5UaWxlU2l6ZTtcclxuICAgICAgICAgICAgdXYueSArPSA0LjAgKiAoIGV4cDIoIENVQkVVVl9NQVhfTUlQICkgLSBmYWNlU2l6ZSApO1xyXG4gICAgICAgICAgICB1di54ICo9IENVQkVVVl9URVhFTF9XSURUSDtcclxuICAgICAgICAgICAgdXYueSAqPSBDVUJFVVZfVEVYRUxfSEVJR0hUO1xyXG4gICAgICAgICAgICByZXR1cm4gdGV4dHVyZVNhbXBsZShlbnZUZXh0dXJlLGJhc2VTYW1wbGVyLGRpcmVjdGlvbikucmdiO1xyXG4gICAgICAgIH1cclxuICAgICAgICBjb25zdCBjdWJlVVZfcjA6ZjMyPSAxLjA7XHJcbiAgICAgICAgY29uc3QgY3ViZVVWX3YwOmYzMj0gMC4zMzk7XHJcbiAgICAgICAgY29uc3QgY3ViZVVWX20wOmYzMj0gLSAyLjA7XHJcbiAgICAgICAgY29uc3QgY3ViZVVWX3IxOmYzMj0gMC44O1xyXG4gICAgICAgIGNvbnN0IGN1YmVVVl92MTpmMzI9IDAuMjc2O1xyXG4gICAgICAgIGNvbnN0IGN1YmVVVl9tMTpmMzI9IC0gMS4wO1xyXG4gICAgICAgIGNvbnN0IGN1YmVVVl9yNDpmMzI9IDAuNDtcclxuICAgICAgICBjb25zdCBjdWJlVVZfdjQ6ZjMyPSAwLjA0NjtcclxuICAgICAgICBjb25zdCBjdWJlVVZfbTQ6ZjMyPSAyLjA7XHJcbiAgICAgICAgY29uc3QgY3ViZVVWX3I1OmYzMj0gMC4zMDU7XHJcbiAgICAgICAgY29uc3QgY3ViZVVWX3Y1OmYzMj0gMC4wMTY7XHJcbiAgICAgICAgY29uc3QgY3ViZVVWX201OmYzMj0gMy4wO1xyXG4gICAgICAgIGNvbnN0IGN1YmVVVl9yNjpmMzI9IDAuMjE7XHJcbiAgICAgICAgY29uc3QgY3ViZVVWX3Y2OmYzMj0gMC4wMDM4O1xyXG4gICAgICAgIGNvbnN0IGN1YmVVVl9tNjpmMzI9IDQuMDtcclxuICAgICAgICBmbiByb3VnaG5lc3NUb01pcCggcm91Z2huZXNzOmYzMiktPmYzMiB7XHJcbiAgICAgICAgICAgIHZhciBtaXA6ZjMyID0gMC4wO1xyXG4gICAgICAgICAgICBpZiAoIHJvdWdobmVzcyA+PSBjdWJlVVZfcjEgKSB7XHJcbiAgICAgICAgICAgICAgICBtaXAgPSAoIGN1YmVVVl9yMCAtIHJvdWdobmVzcyApICogKCBjdWJlVVZfbTEgLSBjdWJlVVZfbTAgKSAvICggY3ViZVVWX3IwIC0gY3ViZVVWX3IxICkgKyBjdWJlVVZfbTA7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSBpZiAoIHJvdWdobmVzcyA+PSBjdWJlVVZfcjQgKSB7XHJcbiAgICAgICAgICAgICAgICBtaXAgPSAoIGN1YmVVVl9yMSAtIHJvdWdobmVzcyApICogKCBjdWJlVVZfbTQgLSBjdWJlVVZfbTEgKSAvICggY3ViZVVWX3IxIC0gY3ViZVVWX3I0ICkgKyBjdWJlVVZfbTE7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSBpZiAoIHJvdWdobmVzcyA+PSBjdWJlVVZfcjUgKSB7XHJcbiAgICAgICAgICAgICAgICBtaXAgPSAoIGN1YmVVVl9yNCAtIHJvdWdobmVzcyApICogKCBjdWJlVVZfbTUgLSBjdWJlVVZfbTQgKSAvICggY3ViZVVWX3I0IC0gY3ViZVVWX3I1ICkgKyBjdWJlVVZfbTQ7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSBpZiAoIHJvdWdobmVzcyA+PSBjdWJlVVZfcjYgKSB7XHJcbiAgICAgICAgICAgICAgICBtaXAgPSAoIGN1YmVVVl9yNSAtIHJvdWdobmVzcyApICogKCBjdWJlVVZfbTYgLSBjdWJlVVZfbTUgKSAvICggY3ViZVVWX3I1IC0gY3ViZVVWX3I2ICkgKyBjdWJlVVZfbTU7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBtaXAgPSAtIDIuMCAqIGxvZzIoIDEuMTYgKiByb3VnaG5lc3MgKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm4gbWlwO1xyXG4gICAgICAgIH1cclxuICAgICAgICBmbiB0ZXh0dXJlQ3ViZVVWKGVudlRleHR1cmU6dGV4dHVyZV9jdWJlPGYzMj4sIGJhc2VTYW1wbGVyOnNhbXBsZXIsc2FtcGxlRGlyOnZlYzM8ZjMyPixyb3VnaG5lc3M6ZjMyICktPnZlYzQ8ZjMyPiB7XHJcbiAgICAgICAgICAgIGxldCBtaXAgPSBjbGFtcCggcm91Z2huZXNzVG9NaXAoIHJvdWdobmVzcyApLCBjdWJlVVZfbTAsIENVQkVVVl9NQVhfTUlQICk7XHJcbiAgICAgICAgICAgIGxldCBtaXBGID0gZnJhY3QoIG1pcCApO1xyXG4gICAgICAgICAgICBsZXQgbWlwSW50ID0gZmxvb3IoIG1pcCApO1xyXG4gICAgICAgICAgICBsZXQgY29sb3IwOnZlYzM8ZjMyPiA9IGJpbGluZWFyQ3ViZVVWKCBlbnZUZXh0dXJlLGJhc2VTYW1wbGVyLHNhbXBsZURpciwgbWlwSW50ICk7XHJcbiAgICAgICAgICAgIGlmICggbWlwRiA9PSAwLjAgKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdmVjNDxmMzI+KGNvbG9yMCwgMS4wICk7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgZWxzZSB7XHJcbiAgICAgICAgICAgICAgICBsZXQgY29sb3IxOnZlYzM8ZjMyPiA9IGJpbGluZWFyQ3ViZVVWKCBlbnZUZXh0dXJlLGJhc2VTYW1wbGVyLCBzYW1wbGVEaXIsIG1pcEludCArIDEuMCApO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHZlYzQ8ZjMyPihtaXgoIGNvbG9yMCwgY29sb3IxLCBtaXBGICksIDEuMCApO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgXHJcbiAgICAgICAgfVxyXG4gICAjZW5kaWZcclxuICAgI2lmICR7ZGVmaW5lcy5VU0VfRU5WVEVYVFVSRX1cclxuICAgICAgICBmbiBnZXRJQkxJcnJhZGlhbmNlKCBub3JtYWw6dmVjMzxmMzI+LGJhc2VTYW1wbGVyOnNhbXBsZXIsdmlld01hdHJpeDptYXQ0eDQ8ZjMyPiktPnZlYzM8ZjMyPiB7XHJcbiAgICAgICAgICAgICNpZiAke2RlZmluZXMuRU5WVEVYVFVSRV9UWVBFX0NVQkVfVVZ9XHJcbiAgICAgICAgICAgICAgICBsZXQgd29ybGROb3JtYWw6dmVjMzxmMzI+ID0gaW52ZXJzZVRyYW5zZm9ybURpcmVjdGlvbiggbm9ybWFsLCB2aWV3TWF0cml4ICk7XHJcbiAgICAgICAgICAgICAgICBsZXQgZW52VGV4dHVyZUNvbG9yOnZlYzQ8ZjMyPiA9IHRleHR1cmVDdWJlVVYoIGVudlRleHR1cmUsYmFzZVNhbXBsZXIsIHdvcmxkTm9ybWFsLCAxLjAgKTtcclxuICAgICAgICAgICAgICAgIHJldHVybiBQSSAqIGVudlRleHR1cmVDb2xvci5yZ2IgKiBtYXRlcmlhbFVuaWZvcm0uZW52VGV4dHVyZUludGVuc2l0eTtcclxuICAgICAgICAgICAgI2Vsc2VcclxuICAgICAgICAgICAgICAgIHJldHVybiB2ZWMzPGYzMj4oIDAuMCApO1xyXG4gICAgICAgICAgICAjZW5kaWZcclxuICAgICAgICB9XHJcbiAgICAgICAgZm4gZ2V0SUJMUmFkaWFuY2UoIHZpZXdEaXI6dmVjMzxmMzI+LGJhc2VTYW1wbGVyOnNhbXBsZXIsdmlld01hdHJpeDptYXQ0eDQ8ZjMyPixub3JtYWw6dmVjMzxmMzI+LCByb3VnaG5lc3M6ZjMyICktPnZlYzM8ZjMyPiB7XHJcbiAgICAgICAgICAgICNpZiAke2RlZmluZXMuRU5WVEVYVFVSRV9UWVBFX0NVQkVfVVZ9XHJcbiAgICAgICAgICAgICAgICB2YXIgcmVmbGVjdFZlYzp2ZWMzPGYzMj4gPSByZWZsZWN0KCAtIHZpZXdEaXIsIG5vcm1hbCApO1xyXG4gICAgICAgICAgICAgICAgcmVmbGVjdFZlYyA9IG5vcm1hbGl6ZSggbWl4KCByZWZsZWN0VmVjLCBub3JtYWwsIHJvdWdobmVzcyAqIHJvdWdobmVzcykgKTtcclxuICAgICAgICAgICAgICAgIHJlZmxlY3RWZWMgPSBpbnZlcnNlVHJhbnNmb3JtRGlyZWN0aW9uKCByZWZsZWN0VmVjLCB2aWV3TWF0cml4ICk7XHJcbiAgICAgICAgICAgICAgICBsZXQgZW52VGV4dHVyZUNvbG9yOnZlYzQ8ZjMyPiA9IHRleHR1cmVDdWJlVVYoIGVudlRleHR1cmUsYmFzZVNhbXBsZXIsIHJlZmxlY3RWZWMsIHJvdWdobmVzcyApO1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIGVudlRleHR1cmVDb2xvci5yZ2IgKiBtYXRlcmlhbFVuaWZvcm0uZW52VGV4dHVyZUludGVuc2l0eTtcclxuICAgICAgICAgICAgI2Vsc2VcclxuICAgICAgICAgICAgICAgIHJldHVybiB2ZWMzPGYzMj4oIDAuMCApO1xyXG4gICAgICAgICAgICAjZW5kaWZcclxuICAgICAgICAgICAgfVxyXG4gICAgI2VuZGlmXHJcbiAgIGA7XHJcbn1cclxuIiwiaW1wb3J0IHsgd2dzbFBhcnNlRGVmaW5lcyB9IGZyb20gXCIuLi8uLi9XZ3NsUHJlcHJvY2Vzc29yXCI7XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gaW5zdGFuY2VWZXJ0SGVhZGVyKGRlZmluZXMpIHtcclxuXHRyZXR1cm4gd2dzbFBhcnNlRGVmaW5lc2BcclxuICAgI2lmICR7ZGVmaW5lcy5VU0VfSU5TVEFOQ0V9XHJcbiAgICAgIHN0cnVjdCBJbnN0YW5jZXNVbmlmb3JtIHtcclxuICAgICAgICAgaW5zdGFuY2VNYXRyaXhzOiAgYXJyYXk8bWF0NHg0PGYzMj4sICR7ZGVmaW5lcy5pbnN0YW5jZUNvdW50fT4sXHJcbiAgICAgIH07XHJcbiAgICAgIEBncm91cCgwKSBAYmluZGluZygke2RlZmluZXMuaW5zdGFuY2VNYXRyaXhzQnVmZmVyQmluZGluZ30pIHZhcjxzdG9yYWdlLCByZWFkPiBpbnN0YW5jZXNVbmlmb3JtOiBJbnN0YW5jZXNVbmlmb3JtO1xyXG4gICAgI2VuZGlmXHJcbiAgIGA7XHJcbn1cclxuZXhwb3J0IGZ1bmN0aW9uIGluc3RhbmNlVmVydE1haW4oZGVmaW5lcykge1xyXG5cdHJldHVybiB3Z3NsUGFyc2VEZWZpbmVzYFxyXG4gICAgICAjaWYgJHtkZWZpbmVzLlVTRV9JTlNUQU5DRX1cclxuICAgICAgICAgbW9kZWxNYXRyaXg9aW5zdGFuY2VzVW5pZm9ybS5pbnN0YW5jZU1hdHJpeHNbaW5wdXQuaW5zdGFuY2VJZHhdO1xyXG4gICAgICAjZW5kaWZcclxuICAgYDtcclxufVxyXG4iLCJpbXBvcnQgeyB3Z3NsUGFyc2VEZWZpbmVzIH0gZnJvbSBcIi4uLy4uL1dnc2xQcmVwcm9jZXNzb3JcIjtcclxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gbGlnaHQoZGVmaW5lcykge1xyXG5cdHJldHVybiB3Z3NsUGFyc2VEZWZpbmVzYCBcclxuICAgIHN0cnVjdCBSZWZsZWN0ZWRMaWdodCB7XHJcbiAgICAgICAgYW1iaWVudDogdmVjMzxmMzI+LFxyXG4gICAgICAgIGRpcmVjdERpZmZ1c2U6dmVjMzxmMzI+LFxyXG4gICAgICAgIGRpcmVjdFNwZWN1bGFyOnZlYzM8ZjMyPixcclxuICAgICAgICBpbmRpcmVjdERpZmZ1c2U6dmVjMzxmMzI+LFxyXG4gICAgICAgIGluZGlyZWN0U3BlY3VsYXI6dmVjMzxmMzI+LFxyXG4gICAgICAgIHRlc3RDb2xvcjogdmVjMzxmMzI+LFxyXG4gICAgfTsgXHJcbiAgICBzdHJ1Y3QgSW5jaWRlbnRMaWdodCB7XHJcbiAgICAgICAgY29sb3I6IHZlYzM8ZjMyPixcclxuICAgICAgICBkaXJlY3Rpb246IHZlYzM8ZjMyPixcclxuICAgICAgICB2aXNpYmxlOiBib29sLFxyXG4gICAgfTtcclxuICAgIHN0cnVjdCBHZW9tZXRyeSB7XHJcbiAgICAgICAgcG9zaXRpb246IHZlYzM8ZjMyPixcclxuICAgICAgICBub3JtYWw6IHZlYzM8ZjMyPixcclxuICAgICAgICB2aWV3RGlyOiB2ZWMzPGYzMj4sXHJcbiAgICAgICAgZG90TlY6ZjMyLFxyXG4gICAgICAgICNpZiAke2RlZmluZXMuVVNFX0NMRUFSQ09BVH1cclxuICAgICAgICAgICAgdmVjMyBjbGVhcmNvYXROb3JtYWw7XHJcbiAgICAgICAgI2VuZGlmXHJcbiAgICB9O1xyXG5cclxuICAgICNpZiAke2RlZmluZXMuc3BvdExpZ2h0c0NvdW50ID4gMH1cclxuICAgICAgICBzdHJ1Y3QgU3BvdExpZ2h0IHtcclxuICAgICAgICAgICAgcG9zaXRpb246IHZlYzM8ZjMyPixcclxuICAgICAgICAgICAgZGlzdGFuY2U6IGYzMixcclxuICAgICAgICAgICAgZGlyZWN0aW9uOiB2ZWMzPGYzMj4sXHJcbiAgICAgICAgICAgIGNvbmVDb3M6IGYzMixcclxuICAgICAgICAgICAgY29sb3I6IHZlYzM8ZjMyPixcclxuICAgICAgICAgICAgcGVudW1icmFDb3M6IGYzMixcclxuICAgICAgICAgICAgZGVjYXk6IGYzMixcclxuICAgICAgICB9O1xyXG4gICAgICAgIGZuIGdldFNwb3RMaWdodEluZm8oc3BvdExpZ2h0OlNwb3RMaWdodCx3b3JsZFBvczp2ZWMzPGYzMj4sc2hpbmluZXNzOmYzMixOOnZlYzM8ZjMyPixWOnZlYzM8ZjMyPiktPlJlZmxlY3RlZExpZ2h0e1xyXG4gICAgICAgICAgICAgICAgdmFyIGRpcmVjdGlvbjp2ZWMzPGYzMj4gPSBzcG90TGlnaHQucG9zaXRpb24gLSB3b3JsZFBvcztcclxuICAgICAgICAgICAgICAgIHZhciBsaWdodENvbG9yOlJlZmxlY3RlZExpZ2h0O1xyXG4gICAgICAgICAgICAgICAgbGV0IGxpZ2h0RGlzdGFuY2U6ZjMyID0gbGVuZ3RoKGRpcmVjdGlvbik7XHJcbiAgICAgICAgICAgICAgICBkaXJlY3Rpb24gPSBub3JtYWxpemUoZGlyZWN0aW9uKTtcclxuICAgICAgICAgICAgICAgIGxldCBhbmdsZUNvczpmMzIgPSBkb3QoIGRpcmVjdGlvbiwgc3BvdExpZ2h0LmRpcmVjdGlvbiApO1xyXG4gICAgICAgICAgICAgICAgbGV0IGRlY2F5OmYzMiA9IGNsYW1wKDEuMCAtIHBvdyhsaWdodERpc3RhbmNlL3Nwb3RMaWdodC5kaXN0YW5jZSwgc3BvdExpZ2h0LmRlY2F5KSwgMC4wLCAxLjApO1xyXG4gICAgICAgICAgICAgICAgbGV0IHNwb3RFZmZlY3Q6ZjMyID0gc21vb3Roc3RlcCggc3BvdExpZ2h0LnBlbnVtYnJhQ29zLCBzcG90TGlnaHQuY29uZUNvcywgYW5nbGVDb3MgKTtcclxuICAgICAgICAgICAgICAgIGxldCBkZWNheVRvdGFsOmYzMiA9IGRlY2F5ICogc3BvdEVmZmVjdDtcclxuICAgICAgICAgICAgICAgIGxldCBkOmYzMiA9IG1heCggZG90KCBOLCBkaXJlY3Rpb24gKSwgMC4wICkgICogZGVjYXlUb3RhbDtcclxuICAgICAgICAgICAgICAgIGxpZ2h0Q29sb3IuZGlyZWN0RGlmZnVzZT0gc3BvdExpZ2h0LmNvbG9yICogZDtcclxuICAgICAgICAgICAgICAgIGxldCBoYWxmRGlyOnZlYzM8ZjMyPiA9IG5vcm1hbGl6ZSggViArIGRpcmVjdGlvbiApO1xyXG4gICAgICAgICAgICAgICAgbGV0IHM6ZjMyID0gcG93KCBjbGFtcCggZG90KCBOLCBoYWxmRGlyICksIDAuMCwgMS4wICksIHNoaW5pbmVzcyApICogZGVjYXlUb3RhbDtcclxuICAgICAgICAgICAgICAgIGxpZ2h0Q29sb3IuZGlyZWN0U3BlY3VsYXI9IHNwb3RMaWdodC5jb2xvciAqIHM7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gbGlnaHRDb2xvcjtcclxuICAgICAgICB9XHJcbiAgICAgICAgZm4gZ2V0U3BvdExpZ2h0SW5jaWRlbnRMaWdodChzcG90TGlnaHQ6U3BvdExpZ2h0LCBnZW9tZXRyeTpHZW9tZXRyeSktPkluY2lkZW50TGlnaHQge1xyXG4gICAgICAgICAgICB2YXIgaW5jaWRlbnRMaWdodDpJbmNpZGVudExpZ2h0O1xyXG4gICAgICAgICAgICBsZXQgbFZlY3Rvcjp2ZWMzPGYzMj4gPSBzcG90TGlnaHQucG9zaXRpb24gLSBnZW9tZXRyeS5wb3NpdGlvbjtcclxuICAgICAgICAgICAgaW5jaWRlbnRMaWdodC5kaXJlY3Rpb24gPSBub3JtYWxpemUoIGxWZWN0b3IgKTtcclxuICAgIFxyXG4gICAgICAgICAgICBsZXQgbGlnaHREaXN0YW5jZTpmMzIgPSBsZW5ndGgoIGxWZWN0b3IgKTtcclxuICAgICAgICAgICAgbGV0IGFuZ2xlQ29zOmYzMiA9IGRvdCggaW5jaWRlbnRMaWdodC5kaXJlY3Rpb24sIHNwb3RMaWdodC5kaXJlY3Rpb24gKTtcclxuICAgIFxyXG4gICAgICAgICAgICBsZXQgc3BvdEVmZmVjdDpmMzIgPSBzbW9vdGhzdGVwKCBzcG90TGlnaHQucGVudW1icmFDb3MsIHNwb3RMaWdodC5jb25lQ29zLCBhbmdsZUNvcyApO1xyXG4gICAgICAgICAgICBsZXQgZGVjYXlFZmZlY3Q6ZjMyID0gY2xhbXAoMS4wIC0gcG93KGxpZ2h0RGlzdGFuY2Uvc3BvdExpZ2h0LmRpc3RhbmNlLCA0LjApLCAwLjAsIDEuMCk7XHJcbiAgICBcclxuICAgICAgICAgICAgaW5jaWRlbnRMaWdodC5jb2xvcj1zcG90TGlnaHQuY29sb3Iqc3BvdEVmZmVjdCAqIGRlY2F5RWZmZWN0OyBcclxuICAgICAgICAgICAgcmV0dXJuICBpbmNpZGVudExpZ2h0O1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAjZW5kaWYgXHJcblxyXG4gICAgI2lmICR7ZGVmaW5lcy5wb2ludExpZ2h0c0NvdW50ID4gMH1cclxuICAgICAgICBzdHJ1Y3QgUG9pbnRMaWdodCB7XHJcbiAgICAgICAgICAgIHBvc2l0aW9uOiB2ZWMzPGYzMj4sXHJcbiAgICAgICAgICAgIGRpc3RhbmNlOiBmMzIsXHJcbiAgICAgICAgICAgIGNvbG9yOiB2ZWMzPGYzMj4sXHJcbiAgICAgICAgICAgIGRlY2F5OiBmMzIsXHJcbiAgICAgICAgfTtcclxuICAgICAgICBmbiBnZXRQb2ludExpZ2h0SW5mbyhwb2ludExpZ2h0OlBvaW50TGlnaHQsd29ybGRQb3M6dmVjMzxmMzI+LHNoaW5pbmVzczpmMzIsTjp2ZWMzPGYzMj4sVjp2ZWMzPGYzMj4pLT5SZWZsZWN0ZWRMaWdodHtcclxuICAgICAgICAgICAgdmFyIGxpZ2h0Q29sb3I6UmVmbGVjdGVkTGlnaHQ7XHJcbiAgICAgICAgICAgIHZhciBkaXJlY3Rpb246dmVjMzxmMzI+ID0gd29ybGRQb3MgLSBwb2ludExpZ2h0LnBvc2l0aW9uO1xyXG4gICAgICAgICAgICBsZXQgZGlzdDpmMzIgPSBsZW5ndGgoIGRpcmVjdGlvbiApO1xyXG4gICAgICAgICAgICBkaXJlY3Rpb24gPSBub3JtYWxpemUoZGlyZWN0aW9uKTtcclxuICAgICAgICAgICAgbGV0IGRlY2F5ID0gY2xhbXAoMS4wIC0gcG93KGRpc3QgLyBwb2ludExpZ2h0LmRpc3RhbmNlLCBwb2ludExpZ2h0LmRlY2F5KSwgMC4wLCAxLjApO1xyXG4gICAgXHJcbiAgICAgICAgICAgIGxldCBkID0gIG1heCggZG90KCBOLCAtZGlyZWN0aW9uICksIDAuMCApICogZGVjYXk7XHJcbiAgICAgICAgICAgIGxpZ2h0Q29sb3IuZGlyZWN0RGlmZnVzZSA9IHBvaW50TGlnaHQuY29sb3IgKiBkO1xyXG4gICAgXHJcbiAgICAgICAgICAgIGxldCBoYWxmRGlyOnZlYzM8ZjMyPiA9IG5vcm1hbGl6ZSggViAtIGRpcmVjdGlvbiApO1xyXG4gICAgICAgICAgICBsZXQgczpmMzIgPSBwb3coIGNsYW1wKCBkb3QoIE4sIGhhbGZEaXIgKSwgMC4wLCAxLjAgKSwgc2hpbmluZXNzICkgICogZGVjYXk7XHJcbiAgICAgICAgICAgIGxpZ2h0Q29sb3IuZGlyZWN0U3BlY3VsYXIgPSBwb2ludExpZ2h0LmNvbG9yICogcztcclxuICAgICAgICAgICAgcmV0dXJuIGxpZ2h0Q29sb3I7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGZuIGdldFBvaW50TGlnaHRJbmNpZGVudExpZ2h0KHBvaW50TGlnaHQ6UG9pbnRMaWdodCwgZ2VvbWV0cnk6R2VvbWV0cnkpLT5JbmNpZGVudExpZ2h0IHtcclxuICAgICAgICAgICAgdmFyIGluY2lkZW50TGlnaHQ6SW5jaWRlbnRMaWdodDtcclxuICAgICAgICAgICAgbGV0IGxWZWN0b3I6dmVjMzxmMzI+ID0gcG9pbnRMaWdodC5wb3NpdGlvbi1nZW9tZXRyeS5wb3NpdGlvbjtcclxuICAgICAgICAgICAgaW5jaWRlbnRMaWdodC5kaXJlY3Rpb249IG5vcm1hbGl6ZSggbFZlY3RvciApO1xyXG4gICAgICAgICAgICBsZXQgbGlnaHREaXN0YW5jZTpmMzIgPSBsZW5ndGgoIGxWZWN0b3IgKTtcclxuICAgICAgICAgICAgLy8gbGV0IHdlaWdodDpmMzI9MS4wIC0gcG93KGxpZ2h0RGlzdGFuY2UvcG9pbnRMaWdodC5kaXN0YW5jZSwgNC4wKTtcclxuICAgICAgICAgICAgaW5jaWRlbnRMaWdodC5jb2xvcj1wb2ludExpZ2h0LmNvbG9yKmNsYW1wKDEuMCAtIHBvdyhsaWdodERpc3RhbmNlL3BvaW50TGlnaHQuZGlzdGFuY2UsIDQuMCksIDAuMCwgMS4wKTtcclxuICAgICAgICAgICAgcmV0dXJuIGluY2lkZW50TGlnaHQ7XHJcbiAgICAgICAgfVxyXG4gICAgI2VuZGlmXHJcbiAgICAjaWYgJHtkZWZpbmVzLmRpcnRlY3RMaWdodHNDb3VudCA+IDB9XHJcbiAgICAgICAgc3RydWN0IERpcmVjdGlvbmFsTGlnaHQge1xyXG4gICAgICAgICAgICBkaXJlY3Rpb246IHZlYzM8ZjMyPixcclxuICAgICAgICAgICAgY29sb3I6IHZlYzM8ZjMyPixcclxuICAgICAgICB9O1xyXG4gICAgICAgIGZuIGdldERpcmVjdExpZ2h0SW5mbyhkaXJlY3Rpb25hbExpZ2h0OkRpcmVjdGlvbmFsTGlnaHQsc2hpbmluZXNzOmYzMixOOnZlYzM8ZjMyPixWOnZlYzM8ZjMyPiktPlJlZmxlY3RlZExpZ2h0e1xyXG4gICAgICAgICAgICB2YXIgbGlnaHRDb2xvcjpSZWZsZWN0ZWRMaWdodDtcclxuICAgICAgICAgICAgbGV0IGQ6ZjMyID0gbWF4KGRvdChOLCAtZGlyZWN0aW9uYWxMaWdodC5kaXJlY3Rpb24pLCAwLjApO1xyXG4gICAgICAgICAgICBsaWdodENvbG9yLmRpcmVjdERpZmZ1c2UgKz0gZGlyZWN0aW9uYWxMaWdodC5jb2xvciAqIGQ7XHJcbiAgICBcclxuICAgICAgICAgICAgbGV0IGhhbGZEaXI6dmVjMzxmMzI+ID0gbm9ybWFsaXplKCBWIC0gZGlyZWN0aW9uYWxMaWdodC5kaXJlY3Rpb24gKTtcclxuICAgICAgICAgICAgbGV0IHM6ZjMyID0gcG93KCBjbGFtcCggZG90KCBOLCBoYWxmRGlyICksIDAuMCwgMS4wICksIHNoaW5pbmVzcyApO1xyXG4gICAgICAgICAgICBsaWdodENvbG9yLmRpcmVjdFNwZWN1bGFyICs9IGRpcmVjdGlvbmFsTGlnaHQuY29sb3IgKiBzO1xyXG4gICAgICAgICAgICByZXR1cm4gbGlnaHRDb2xvcjtcclxuICAgICAgICB9XHJcbiAgICAgICAgZm4gZ2V0RGlyZWN0aW9uYWxEaXJlY3RMaWdodEluY2lkZW50TGlnaHQoZGlyZWN0aW9uYWxMaWdodDpEaXJlY3Rpb25hbExpZ2h0LGdlb21ldHJ5Okdlb21ldHJ5KS0+SW5jaWRlbnRMaWdodCB7XHJcbiAgICAgICAgICAgIHZhciBpbmNpZGVudExpZ2h0OkluY2lkZW50TGlnaHQ7XHJcbiAgICAgICAgICAgIGluY2lkZW50TGlnaHQuY29sb3IgPSBkaXJlY3Rpb25hbExpZ2h0LmNvbG9yO1xyXG4gICAgICAgICAgICBpbmNpZGVudExpZ2h0LmRpcmVjdGlvbiA9IG5vcm1hbGl6ZShkaXJlY3Rpb25hbExpZ2h0LmRpcmVjdGlvbik7XHJcbiAgICAgICAgICAgIHJldHVybiBpbmNpZGVudExpZ2h0OyAgICAgICAgIFxyXG4gICAgICAgIH1cclxuICAgICNlbmRpZlxyXG5cclxuICAgICNpZiAke2RlZmluZXMub3BlblNoYWRvd30gXHJcbiAgICAgICAgc3RydWN0IExpZ2h0SW5mbyB7XHJcbiAgICAgICAgICAgIGRpcmVjdGlvbjogdmVjMzxmMzI+LFxyXG4gICAgICAgICAgICB2aWV3cG9ydDogdmVjNDxmMzI+LFxyXG4gICAgICAgIH07XHJcbiAgICAgICAgXHJcbiAgICAgICAgZm4gbGluZWFyaXplRGVwdGgoZGVwdGg6IGYzMiwgbmVhcjogZjMyLCBmYXI6IGYzMiktPmYzMiB7XHJcbiAgICAgICAgICAgIHJldHVybiAyICogKG5lYXIgKiBmYXIpIC8gKGZhciArIG5lYXIgLSBkZXB0aCAqIChmYXIgLSBuZWFyKSk7XHJcbiAgICAgICAgfVxyXG5cclxuICAgICAgICBmbiBnZXRDdWJlRmFjZSh2IDogdmVjMzxmMzI+KSAtPiBpMzJ7XHJcbiAgICAgICAgICAgIGxldCB2QWJzID0gYWJzKHYpO1xyXG4gICAgICAgIFxyXG4gICAgICAgICAgICBpZiAodkFicy56ID49IHZBYnMueCAmJiB2QWJzLnogPj0gdkFicy55KSB7XHJcbiAgICAgICAgICAgICAgaWYgKHYueiA8IDAuMCkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIDM7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIHJldHVybiAyO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgXHJcbiAgICAgICAgICAgIGlmICh2QWJzLnkgPj0gdkFicy54KSB7XHJcbiAgICAgICAgICAgICAgaWYgKHYueSA8IDAuMCkge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIDU7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgIHJldHVybiA0O1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgXHJcbiAgICAgICAgICAgIGlmICh2LnggPCAwLjApIHtcclxuICAgICAgICAgICAgICByZXR1cm4gMTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm4gMDtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIGZuIGdldFNoYWRvd1ZhbHVlKHNoYWRvd01hcEFycmF5OnRleHR1cmVfZGVwdGhfMmRfYXJyYXksIHNoYWRvd1NhbXBsZXI6c2FtcGxlcl9jb21wYXJpc29uLCBsaWdodFBvczp2ZWM0PGYzMj4sIGdlb21ldHJ5Okdlb21ldHJ5LCBsaWdodEluZm86TGlnaHRJbmZvLCBpbmRleDp1MzIsIGlzUG9pbnRMaWdodDogYm9vbCwgbmVhcjogZjMyLCBmYXI6IGYzMiktPmYzMiB7XHJcbiAgICAgICAgICAgIHZhciB2aXNpYmlsaXR5ID0gMC4wO1xyXG4gICAgICAgICAgICB2YXIgcHJvamVjdFBvczogdmVjMzxmMzI+ID0gbGlnaHRQb3MueHl6IC8gbGlnaHRQb3MudztcclxuICAgICAgICAgICAgdmFyIHNoYWRvd1BvczogdmVjMzxmMzI+ID0gdmVjMyhwcm9qZWN0UG9zLnh5ICogdmVjMigwLjUsIC0wLjUpICsgdmVjMigwLjUpLCBwcm9qZWN0UG9zLnopO1xyXG4gICAgICAgICAgICB2YXIgZDpmMzIgPSBkb3QoZ2VvbWV0cnkubm9ybWFsLCAtbGlnaHRJbmZvLmRpcmVjdGlvbik7XHJcbiAgICAgICAgICAgIHZhciBiaWFzID0gbWF4KDAuMDEyICogKDEuMCAtIGQpLCAwLjAwMSkgLyBsaWdodFBvcy53O1xyXG4gICAgICAgICAgICBsZXQgb25lT3ZlclNoYWRvd0RlcHRoVGV4dHVyZVNpemUgPSAxLjAgLyAxMDI0LjA7XHJcbiAgICAgICAgICAgIC8vIHZhciBkZXB0aCA9IHNlbGVjdChzaGFkb3dQb3MueiwgKGxpbmVhcml6ZURlcHRoKHNoYWRvd1Bvcy56LCBuZWFyLCBmYXIpIC0gbmVhcikgLyAoZmFyLSBuZWFyKSwgaXNQZXJzcGVjdGl2ZUNhbWVyYSk7XHJcbiAgICAgICAgICAgIHZhciBkZXB0aCA9IHNoYWRvd1Bvcy56O1xyXG5cclxuICAgICAgICAgICAgaWYgKGlzUG9pbnRMaWdodCkge1xyXG4gICAgICAgICAgICAgICAgc2hhZG93UG9zLnggPSBzaGFkb3dQb3MueCAqIGxpZ2h0SW5mby52aWV3cG9ydC56O1xyXG4gICAgICAgICAgICAgICAgc2hhZG93UG9zLnkgPSBzaGFkb3dQb3MueSAqIGxpZ2h0SW5mby52aWV3cG9ydC53O1xyXG4gICAgICAgICAgICAgICAgdmFyIHZpZXdwb3J0WCA9IGxpZ2h0SW5mby52aWV3cG9ydC54ICogbGlnaHRJbmZvLnZpZXdwb3J0Lno7XHJcbiAgICAgICAgICAgICAgICB2YXIgdmlld3BvcnRZID0gbGlnaHRJbmZvLnZpZXdwb3J0LnkgKiBsaWdodEluZm8udmlld3BvcnQudztcclxuICAgICAgICAgICAgICAgIHZhciB1dk9mZnNldCA9IDEuNSAvIDEwMjQuMDtcclxuICAgICAgICAgICAgICAgIHNoYWRvd1Bvcy54ID0gY2xhbXAoc2hhZG93UG9zLnggKyB2aWV3cG9ydFgsIHZpZXdwb3J0WCArIHV2T2Zmc2V0LCB2aWV3cG9ydFggKyBsaWdodEluZm8udmlld3BvcnQueiAtIHV2T2Zmc2V0KTtcclxuICAgICAgICAgICAgICAgIHNoYWRvd1Bvcy55ID0gY2xhbXAoc2hhZG93UG9zLnkgKyB2aWV3cG9ydFksIHZpZXdwb3J0WSArIHV2T2Zmc2V0LCB2aWV3cG9ydFkgKyBsaWdodEluZm8udmlld3BvcnQudyAtIHV2T2Zmc2V0KTtcclxuICAgICAgICAgICAgfVxyXG5cclxuICAgICAgICAgICAgZm9yICh2YXIgeSA9IC0xOyB5IDw9IDE7IHkrKykge1xyXG4gICAgICAgICAgICAgICAgZm9yICh2YXIgeCA9IC0xOyB4IDw9IDE7IHgrKykge1xyXG4gICAgICAgICAgICAgICAgICAgIGxldCBvZmZzZXQgPSB2ZWMyPGYzMj4odmVjMih4LCB5KSkgKiBvbmVPdmVyU2hhZG93RGVwdGhUZXh0dXJlU2l6ZTtcclxuICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgICAgIHZpc2liaWxpdHkgKz0gdGV4dHVyZVNhbXBsZUNvbXBhcmUoXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHNoYWRvd01hcEFycmF5LCBzaGFkb3dTYW1wbGVyLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICBzaGFkb3dQb3MueHkgKyBvZmZzZXQsIGluZGV4LCBkZXB0aCAtIGJpYXMpO1xyXG4gICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgICAgIHZpc2liaWxpdHkgLz0gOS4wO1xyXG4gICAgICAgICAgICB2YXIgaW5GcnVzdHVtID0gc2hhZG93UG9zLnggPj0gMC4wICYmIHNoYWRvd1Bvcy54IDw9IDEuMCAmJiBzaGFkb3dQb3MueSA+PSAwLjAgJiYgc2hhZG93UG9zLnkgPD0gMS4wO1xyXG4gICAgICAgICAgICBpZiAoIWluRnJ1c3R1bSB8fCBkZXB0aCA+IDEuMCkge1xyXG4gICAgICAgICAgICAgICAgdmlzaWJpbGl0eSA9IDEuMDtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm4gdmlzaWJpbGl0eTtcclxuICAgICAgICB9XHJcbiAgICAjZW5kaWZcclxuXHJcbiAgICAjaWYgJHtcclxuXHRcdGRlZmluZXMuYW1iaWVudExpZ2h0Q291bnQgfHwgZGVmaW5lcy5zcG90TGlnaHRzQ291bnQgfHwgZGVmaW5lcy5wb2ludExpZ2h0c0NvdW50IHx8IGRlZmluZXMuZGlydGVjdExpZ2h0c0NvdW50XHJcblx0fVxyXG4gICAgICAgIHN0cnVjdCBMaWdodFVuaWZvcm1ze1xyXG4gICAgICAgICAgICAjaWYgJHtkZWZpbmVzLmFtYmllbnRMaWdodENvdW50fVxyXG4gICAgICAgICAgICAgICAgYW1iaWVudDp2ZWM0PGYzMj4sXHJcbiAgICAgICAgICAgICNlbmRpZlxyXG4gICAgICAgICAgICAjaWYgJHtkZWZpbmVzLnNwb3RMaWdodHNDb3VudH1cclxuICAgICAgICAgICAgICAgIHNwb3RMaWdodHM6YXJyYXk8U3BvdExpZ2h0LCR7ZGVmaW5lcy5zcG90TGlnaHRzQ291bnR9PixcclxuICAgICAgICAgICAgI2VuZGlmXHJcbiAgICAgICAgICAgICNpZiAke2RlZmluZXMucG9pbnRMaWdodHNDb3VudH1cclxuICAgICAgICAgICAgICAgIHBvaW50TGlnaHRzOmFycmF5PFBvaW50TGlnaHQsJHtkZWZpbmVzLnBvaW50TGlnaHRzQ291bnR9PixcclxuICAgICAgICAgICAgI2VuZGlmXHJcbiAgICAgICAgICAgICNpZiAke2RlZmluZXMuZGlydGVjdExpZ2h0c0NvdW50fVxyXG4gICAgICAgICAgICAgICAgZGlydGVjdExpZ2h0czphcnJheTxEaXJlY3Rpb25hbExpZ2h0LCR7ZGVmaW5lcy5kaXJ0ZWN0TGlnaHRzQ291bnR9PixcclxuICAgICAgICAgICAgI2VuZGlmXHJcbiAgICAgICAgfVxyXG4gICAgICAgIEBncm91cCgyKSBAYmluZGluZygke2RlZmluZXMubGlnaHRCaW5kaW5nfSkgdmFyPHN0b3JhZ2UsIHJlYWQ+IGxpZ2h0VW5pZm9ybXM6IExpZ2h0VW5pZm9ybXM7XHJcblxyXG4gICAgICAgICNpZiAke2RlZmluZXMub3BlblNoYWRvd31cclxuICAgICAgICAgICAgI2lmICR7ZGVmaW5lcy5zcG90TGlnaHRTaGFkb3dNYXBzQ291bnR9XHJcbiAgICAgICAgICAgICAgICBzdHJ1Y3QgU3BvdExpZ2h0U2hhZG93IHtcclxuICAgICAgICAgICAgICAgICAgICBzaGFkb3dDYW1lcmFWUE1hdHJpeDogbWF0NHg0PGYzMj4sXHJcbiAgICAgICAgICAgICAgICAgICAgc2hhZG93Q2FtZXJhTmVhcjogZjMyLFxyXG4gICAgICAgICAgICAgICAgICAgIHNoYWRvd0NhbWVyYUZhcjogZjMyXHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICNlbmRpZlxyXG4gICAgICAgICAgICAjaWYgJHtkZWZpbmVzLnBvaW50TGlnaHRTaGFkb3dNYXBzQ291bnR9XHJcbiAgICAgICAgICAgICAgICBzdHJ1Y3QgUG9pbnRMaWdodFNoYWRvdyB7XHJcbiAgICAgICAgICAgICAgICAgICAgc2hhZG93Q2FtZXJhVlBNYXRyaXhBcnJheTogYXJyYXk8bWF0NHg0PGYzMj4sIDY+LFxyXG4gICAgICAgICAgICAgICAgICAgIHNoYWRvd0NhbWVyYVZpZXdwb3J0QXJyYXk6IGFycmF5PHZlYzQ8ZjMyPiwgNj4sXHJcbiAgICAgICAgICAgICAgICAgICAgc2hhZG93Q2FtZXJhTmVhcjogZjMyLFxyXG4gICAgICAgICAgICAgICAgICAgIHNoYWRvd0NhbWVyYUZhcjogZjMyLFxyXG4gICAgICAgICAgICAgICAgICAgIC8vIHNoYWRvd0NhbWVyYVZQTWF0cml4OiBtYXQ0eDQ8ZjMyPixcclxuICAgICAgICAgICAgICAgICAgICAvLyBzaGFkb3dDYW1lcmFWUE1hdHJpeEFycmF5OiBhcnJheTxtYXQ0eDQ8ZjMyPiwgNj4sXHJcbiAgICAgICAgICAgICAgICAgICAgLy8gc2hhZG93Q2FtZXJhVmlld3BvcnRBcnJheTogYXJyYXk8dmVjNDxmMzI+LCA2PixcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgI2VuZGlmXHJcbiAgICAgICAgICAgICNpZiAke2RlZmluZXMuZGlyZWN0TGlnaHRTaGFkb3dNYXBzQ291bnR9XHJcbiAgICAgICAgICAgICAgICBzdHJ1Y3QgRGlyZWN0TGlnaHRTaGFkb3cge1xyXG4gICAgICAgICAgICAgICAgICAgIHNoYWRvd0NhbWVyYVZQTWF0cml4OiBtYXQ0eDQ8ZjMyPixcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgI2VuZGlmXHJcbiAgICAgICAgICAgIHN0cnVjdCBTaGFkb3dVbmlmb3Jtc3tcclxuICAgICAgICAgICAgICAgICNpZiAke2RlZmluZXMuc3BvdExpZ2h0U2hhZG93TWFwc0NvdW50fVxyXG4gICAgICAgICAgICAgICAgICAgIHNwb3RMaWdodFNoYWRvd3M6YXJyYXk8U3BvdExpZ2h0U2hhZG93LCR7ZGVmaW5lcy5zcG90TGlnaHRTaGFkb3dNYXBzQ291bnR9PixcclxuICAgICAgICAgICAgICAgICNlbmRpZlxyXG4gICAgICAgICAgICAgICAgI2lmICR7ZGVmaW5lcy5wb2ludExpZ2h0U2hhZG93TWFwc0NvdW50fVxyXG4gICAgICAgICAgICAgICAgICAgIHBvaW50TGlnaHRTaGFkb3dzOmFycmF5PFBvaW50TGlnaHRTaGFkb3csJHtkZWZpbmVzLnBvaW50TGlnaHRTaGFkb3dNYXBzQ291bnR9PixcclxuICAgICAgICAgICAgICAgICNlbmRpZlxyXG4gICAgICAgICAgICAgICAgI2lmICR7ZGVmaW5lcy5kaXJlY3RMaWdodFNoYWRvd01hcHNDb3VudH1cclxuICAgICAgICAgICAgICAgICAgICBkaXJlY3RMaWdodFNoYWRvd3M6YXJyYXk8RGlyZWN0TGlnaHRTaGFkb3csJHtkZWZpbmVzLmRpcmVjdExpZ2h0U2hhZG93TWFwc0NvdW50fT4sXHJcbiAgICAgICAgICAgICAgICAjZW5kaWZcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBAZ3JvdXAoMikgQGJpbmRpbmcoJHtkZWZpbmVzLnNoYWRvd0JpbmRpbmd9KSB2YXI8c3RvcmFnZSwgcmVhZD4gc2hhZG93VW5pZm9ybXM6IFNoYWRvd1VuaWZvcm1zO1xyXG5cclxuICAgICAgICAgICAgI2lmICR7ZGVmaW5lcy5zcG90TGlnaHRTaGFkb3dNYXBUZXh0dXJlQXJyYXlCaW5kaW5nfVxyXG4gICAgICAgICAgICAgICAgQGdyb3VwKDIpIEBiaW5kaW5nKCR7XHJcblx0XHRcdFx0XHRkZWZpbmVzLnNwb3RMaWdodFNoYWRvd01hcFRleHR1cmVBcnJheUJpbmRpbmdcclxuXHRcdFx0XHR9KSB2YXIgc3BvdExpZ2h0U2hhZG93TWFwVGV4dHVyZUFycmF5OiB0ZXh0dXJlX2RlcHRoXzJkX2FycmF5O1xyXG4gICAgICAgICAgICAjZW5kaWZcclxuICAgICAgICAgICAgI2lmICR7ZGVmaW5lcy5wb2ludExpZ2h0U2hhZG93TWFwVGV4dHVyZUFycmF5QmluZGluZ31cclxuICAgICAgICAgICAgICAgIEBncm91cCgyKSBAYmluZGluZygke1xyXG5cdFx0XHRcdFx0ZGVmaW5lcy5wb2ludExpZ2h0U2hhZG93TWFwVGV4dHVyZUFycmF5QmluZGluZ1xyXG5cdFx0XHRcdH0pIHZhciBwb2ludExpZ2h0U2hhZG93TWFwVGV4dHVyZUFycmF5OiB0ZXh0dXJlX2RlcHRoXzJkX2FycmF5O1xyXG4gICAgICAgICAgICAjZW5kaWZcclxuICAgICAgICAgICAgI2lmICR7ZGVmaW5lcy5kaXJlY3RMaWdodFNoYWRvd01hcFRleHR1cmVBcnJheUJpbmRpbmd9XHJcbiAgICAgICAgICAgICAgICBAZ3JvdXAoMikgQGJpbmRpbmcoJHtcclxuXHRcdFx0XHRcdGRlZmluZXMuZGlyZWN0TGlnaHRTaGFkb3dNYXBUZXh0dXJlQXJyYXlCaW5kaW5nXHJcblx0XHRcdFx0fSkgdmFyIGRpcmVjdExpZ2h0U2hhZG93TWFwVGV4dHVyZUFycmF5OiB0ZXh0dXJlX2RlcHRoXzJkX2FycmF5O1xyXG4gICAgICAgICAgICAjZW5kaWZcclxuICAgICAgICAgICAgQGdyb3VwKDIpIEBiaW5kaW5nKCR7ZGVmaW5lcy5zaGFkb3dTYW1wbGVyQmluZGluZ30pIHZhciBzaGFkb3dTYW1wbGVyOiBzYW1wbGVyX2NvbXBhcmlzb247XHJcbiAgICAgICAgI2VuZGlmXHJcblxyXG4gICAgI2VuZGlmXHJcbiAgICAjaWYgJHtkZWZpbmVzLm1hdGVyaWFsUGhvbmd9XHJcbiAgICAgICAgZm4gcGFyc2VMaWdodHMoZ2VvbWV0cnk6R2VvbWV0cnksc2hpbmluZXNzOmYzMiktPlJlZmxlY3RlZExpZ2h0IHtcclxuICAgICNlbGlmICR7ZGVmaW5lcy5tYXRlcmlhbFBicn1cclxuICAgICAgICBmbiBwYXJzZUxpZ2h0cyhnZW9tZXRyeTpHZW9tZXRyeSxtYXRlcmlhbDpQaHlzaWNhbE1hdGVyaWFsKS0+UmVmbGVjdGVkTGlnaHR7XHJcbiAgICAjZW5kaWZcclxuICAgICAgICB2YXIgcmVmbGVjdGVkTGlnaHQ6UmVmbGVjdGVkTGlnaHQ7XHJcbiAgICAgICAgdmFyIHNoYWRvd1ZhbHVlOmYzMiA9IDEuMDtcclxuICAgICAgICAjaWYgJHtkZWZpbmVzLmFtYmllbnRMaWdodENvdW50ID4gMH1cclxuICAgICAgICAgICAgLy/lpITnkIbnjq/looPlhYlcclxuICAgICAgICAgICAgdmFyIGFtYmllbnRDb2xvcjp2ZWMzPGYzMj4gPSBsaWdodFVuaWZvcm1zLmFtYmllbnQueHl6ICogbGlnaHRVbmlmb3Jtcy5hbWJpZW50Lnc7XHJcbiAgICAgICAgICAgIHJlZmxlY3RlZExpZ2h0LmFtYmllbnQgKz0gYW1iaWVudENvbG9yO1xyXG4gICAgICAgICNlbmRpZlxyXG5cclxuICAgICAgICAjaWYgJHtkZWZpbmVzLnNwb3RMaWdodHNDb3VudCA+IDB9XHJcbiAgICAgICAgICAgIC8v5aSE55CG6IGa5YWJ54GvXHJcbiAgICAgICAgICAgIHZhciBzcG90TGlnaHQ6U3BvdExpZ2h0O1xyXG4gICAgICAgICAgICBmb3IgKHZhciBrID0gMHU7IGsgPCAke2RlZmluZXMuc3BvdExpZ2h0c0NvdW50fTsgayA9IGsgKyAxdSkge1xyXG4gICAgICAgICAgICAgICAgc3BvdExpZ2h0PSBsaWdodFVuaWZvcm1zLnNwb3RMaWdodHNba107XHJcbiAgICAgICAgICAgICAgICAjaWYgJHtkZWZpbmVzLm1hdGVyaWFsUGhvbmcgJiYgZGVmaW5lcy5vcGVuU2hhZG93ICYmIGRlZmluZXMuc3BvdExpZ2h0U2hhZG93TWFwc0NvdW50fVxyXG4gICAgICAgICAgICAgICAgICAgIGlmIGsgPCB0ZXh0dXJlTnVtTGF5ZXJzKHNwb3RMaWdodFNoYWRvd01hcFRleHR1cmVBcnJheSkge1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgc3BvdExpZ2h0U2hhZG93OlNwb3RMaWdodFNoYWRvdyA9IHNoYWRvd1VuaWZvcm1zLnNwb3RMaWdodFNoYWRvd3Nba107XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBsaWdodFBvczogdmVjNDxmMzI+ID0gc3BvdExpZ2h0U2hhZG93LnNoYWRvd0NhbWVyYVZQTWF0cml4ICogdmVjNDxmMzI+KGdlb21ldHJ5LnBvc2l0aW9uLDEuMCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBsaWdodEluZm86TGlnaHRJbmZvO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBsaWdodEluZm8uZGlyZWN0aW9uID0gbm9ybWFsaXplKGdlb21ldHJ5LnBvc2l0aW9uIC0gc3BvdExpZ2h0LnBvc2l0aW9uKTtcclxuXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHNoYWRvd1ZhbHVlID0gZ2V0U2hhZG93VmFsdWUoc3BvdExpZ2h0U2hhZG93TWFwVGV4dHVyZUFycmF5LCBzaGFkb3dTYW1wbGVyLCBsaWdodFBvcywgZ2VvbWV0cnksIGxpZ2h0SW5mbywgaywgZmFsc2UsXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBzcG90TGlnaHRTaGFkb3cuc2hhZG93Q2FtZXJhTmVhciwgc3BvdExpZ2h0U2hhZG93LnNoYWRvd0NhbWVyYUZhcik7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIHNwb3RMaWdodC5jb2xvciAqPSBzaGFkb3dWYWx1ZTtcclxuICAgICAgICAgICAgICAgICNlbmRpZlxyXG4gICAgICAgICAgICAgICAgI2lmICR7ZGVmaW5lcy5tYXRlcmlhbFBob25nfVxyXG4gICAgICAgICAgICAgICAgICAgIGxldCBzcFJlZmxlY3RlZExpZ2h0PWdldFNwb3RMaWdodEluZm8oc3BvdExpZ2h0LGdlb21ldHJ5LnBvc2l0aW9uLHNoaW5pbmVzcyxnZW9tZXRyeS5ub3JtYWwsZ2VvbWV0cnkudmlld0Rpcik7XHJcbiAgICAgICAgICAgICAgICAjZWxpZiAke2RlZmluZXMubWF0ZXJpYWxQYnJ9XHJcbiAgICAgICAgICAgICAgICAgICAgbGV0IGluY2lkZW50TGlnaHQ9Z2V0U3BvdExpZ2h0SW5jaWRlbnRMaWdodChzcG90TGlnaHQsZ2VvbWV0cnkpO1xyXG4gICAgICAgICAgICAgICAgICAgIGxldCBzcFJlZmxlY3RlZExpZ2h0PWRpcmVjdF9QaHlzaWNhbChpbmNpZGVudExpZ2h0LCBnZW9tZXRyeSwgbWF0ZXJpYWwpO1xyXG4gICAgICAgICAgICAgICAgI2VuZGlmXHJcblxyXG4gICAgICAgICAgICAgICAgcmVmbGVjdGVkTGlnaHQuZGlyZWN0RGlmZnVzZSs9c3BSZWZsZWN0ZWRMaWdodC5kaXJlY3REaWZmdXNlO1xyXG4gICAgICAgICAgICAgICAgcmVmbGVjdGVkTGlnaHQuZGlyZWN0U3BlY3VsYXIrPXNwUmVmbGVjdGVkTGlnaHQuZGlyZWN0U3BlY3VsYXI7XHJcbiAgICAgICAgICAgIH1cclxuICAgICAgICAjZW5kaWZcclxuICAgICAgICAjaWYgJHtkZWZpbmVzLnBvaW50TGlnaHRzQ291bnQgPiAwfVxyXG4gICAgICAgICAgICAvL+WkhOeQhueCueWFiea6kFxyXG4gICAgICAgICAgICB2YXIgcG9pbnRMaWdodDpQb2ludExpZ2h0O1xyXG4gICAgICAgICAgICBmb3IgKHZhciBqID0gMHU7IGogPCAke2RlZmluZXMucG9pbnRMaWdodHNDb3VudH07aiA9IGogKyAxdSkge1xyXG4gICAgICAgICAgICAgICAgcG9pbnRMaWdodCA9IGxpZ2h0VW5pZm9ybXMucG9pbnRMaWdodHNbal07XHJcbiAgICAgICAgICAgICAgICAjaWYgJHtkZWZpbmVzLm1hdGVyaWFsUGhvbmcgJiYgZGVmaW5lcy5vcGVuU2hhZG93ICYmIGRlZmluZXMucG9pbnRMaWdodFNoYWRvd01hcHNDb3VudH1cclxuICAgICAgICAgICAgICAgICAgICBpZiBqIDwgdGV4dHVyZU51bUxheWVycyhwb2ludExpZ2h0U2hhZG93TWFwVGV4dHVyZUFycmF5KSB7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBwb2ludExpZ2h0U2hhZG93OlBvaW50TGlnaHRTaGFkb3cgPSBzaGFkb3dVbmlmb3Jtcy5wb2ludExpZ2h0U2hhZG93c1tqXTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGxpZ2h0SW5mbzpMaWdodEluZm87XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIGxpZ2h0SW5mby5kaXJlY3Rpb24gPSBub3JtYWxpemUoZ2VvbWV0cnkucG9zaXRpb24gLSBwb2ludExpZ2h0LnBvc2l0aW9uKTtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGN1YmVGYWNlID0gZ2V0Q3ViZUZhY2UobGlnaHRJbmZvLmRpcmVjdGlvbik7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBsaWdodFBvczogdmVjNDxmMzI+ID0gcG9pbnRMaWdodFNoYWRvdy5zaGFkb3dDYW1lcmFWUE1hdHJpeEFycmF5W2N1YmVGYWNlXSAqIHZlYzQ8ZjMyPihnZW9tZXRyeS5wb3NpdGlvbiwxLjApO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBsaWdodEluZm8udmlld3BvcnQgPSBwb2ludExpZ2h0U2hhZG93LnNoYWRvd0NhbWVyYVZpZXdwb3J0QXJyYXlbY3ViZUZhY2VdO1xyXG5cclxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gdmFyIGxpZ2h0UG9zOiB2ZWM0PGYzMj4gPSBwb2ludExpZ2h0U2hhZG93LnNoYWRvd0NhbWVyYVZQTWF0cml4ICogdmVjNDxmMzI+KGdlb21ldHJ5LnBvc2l0aW9uLDEuMCk7XHJcblxyXG4gICAgICAgICAgICAgICAgICAgICAgICBzaGFkb3dWYWx1ZSA9IGdldFNoYWRvd1ZhbHVlKHBvaW50TGlnaHRTaGFkb3dNYXBUZXh0dXJlQXJyYXksIHNoYWRvd1NhbXBsZXIsIGxpZ2h0UG9zLCBnZW9tZXRyeSwgbGlnaHRJbmZvLCBqLCB0cnVlLFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgcG9pbnRMaWdodFNoYWRvdy5zaGFkb3dDYW1lcmFOZWFyLCBwb2ludExpZ2h0U2hhZG93LnNoYWRvd0NhbWVyYUZhcik7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAgICAgICAgICAgICAvLyByZWZsZWN0ZWRMaWdodC50ZXN0Q29sb3IgPSB2ZWMzKHBvaW50TGlnaHRTaGFkb3cuc2hhZG93Q2FtZXJhRmFyIC8gMTAwMCwgXHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vICAgICBwb2ludExpZ2h0U2hhZG93LnNoYWRvd0NhbWVyYVZQTWF0cml4QXJyYXlbNV1bM11bMl0gLyAyNTUsIHBvaW50TGlnaHRTaGFkb3cuc2hhZG93Q2FtZXJhVlBNYXRyaXhBcnJheVs1XVszXVszXSAvIDI1NSk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIC8vIHJlZmxlY3RlZExpZ2h0LnRlc3RDb2xvciA9IHZlYzMocG9pbnRMaWdodFNoYWRvdy5zaGFkb3dDYW1lcmFOZWFyLCBwb2ludExpZ2h0U2hhZG93LnNoYWRvd0NhbWVyYU5lYXIsIHBvaW50TGlnaHRTaGFkb3cuc2hhZG93Q2FtZXJhTmVhcik7XHJcbiAgICAgICAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICAgICAgICAgIHBvaW50TGlnaHQuY29sb3IgKj0gc2hhZG93VmFsdWU7XHJcbiAgICAgICAgICAgICAgICAjZW5kaWZcclxuICAgICAgICAgICAgICAgICNpZiAke2RlZmluZXMubWF0ZXJpYWxQaG9uZ31cclxuICAgICAgICAgICAgICAgICAgICBsZXQgcG9pUmVmbGVjdGVkTGlnaHQ9Z2V0UG9pbnRMaWdodEluZm8ocG9pbnRMaWdodCxnZW9tZXRyeS5wb3NpdGlvbixzaGluaW5lc3MsZ2VvbWV0cnkubm9ybWFsLGdlb21ldHJ5LnZpZXdEaXIpO1xyXG4gICAgICAgICAgICAgICAgI2VsaWYgJHtkZWZpbmVzLm1hdGVyaWFsUGJyfVxyXG4gICAgICAgICAgICAgICAgICAgbGV0IGluY2lkZW50TGlnaHQ9Z2V0UG9pbnRMaWdodEluY2lkZW50TGlnaHQocG9pbnRMaWdodCxnZW9tZXRyeSk7XHJcbiAgICAgICAgICAgICAgICAgICBsZXQgcG9pUmVmbGVjdGVkTGlnaHQ9ZGlyZWN0X1BoeXNpY2FsKGluY2lkZW50TGlnaHQsIGdlb21ldHJ5LCBtYXRlcmlhbCk7XHJcbiAgICAgICAgICAgICAgICAjZW5kaWZcclxuXHJcbiAgICAgICAgICAgICAgICByZWZsZWN0ZWRMaWdodC5kaXJlY3REaWZmdXNlKz1wb2lSZWZsZWN0ZWRMaWdodC5kaXJlY3REaWZmdXNlO1xyXG4gICAgICAgICAgICAgICAgcmVmbGVjdGVkTGlnaHQuZGlyZWN0U3BlY3VsYXIrPXBvaVJlZmxlY3RlZExpZ2h0LmRpcmVjdFNwZWN1bGFyO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgI2VuZGlmXHJcbiAgICAgICAgI2lmICR7ZGVmaW5lcy5kaXJ0ZWN0TGlnaHRzQ291bnQgPiAwfVxyXG4gICAgICAgICAgICAvL+WkhOeQhuaWueWQkeWFiVxyXG4gICAgICAgICAgICB2YXIgZGlyZWN0aW9uYWxMaWdodDpEaXJlY3Rpb25hbExpZ2h0O1xyXG4gICAgICAgICAgICBmb3IgKHZhciBpPSAwdTsgaSA8JHtkZWZpbmVzLmRpcnRlY3RMaWdodHNDb3VudH07IGkgPSBpICsgMXUpIHtcclxuICAgICAgICAgICAgICAgIGRpcmVjdGlvbmFsTGlnaHQgPSBsaWdodFVuaWZvcm1zLmRpcnRlY3RMaWdodHNbaV07XHJcbiAgICAgICAgICAgICAgICAjaWYgJHtkZWZpbmVzLm1hdGVyaWFsUGhvbmcgJiYgZGVmaW5lcy5vcGVuU2hhZG93ICYmIGRlZmluZXMuZGlyZWN0TGlnaHRTaGFkb3dNYXBzQ291bnR9XHJcbiAgICAgICAgICAgICAgICAgICAgaWYgaSA8IHRleHR1cmVOdW1MYXllcnMoZGlyZWN0TGlnaHRTaGFkb3dNYXBUZXh0dXJlQXJyYXkpIHtcclxuICAgICAgICAgICAgICAgICAgICAgICAgdmFyIGRpcmVjdExpZ2h0U2hhZG93OkRpcmVjdExpZ2h0U2hhZG93ID0gc2hhZG93VW5pZm9ybXMuZGlyZWN0TGlnaHRTaGFkb3dzW2ldO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICB2YXIgbGlnaHRQb3M6IHZlYzQ8ZjMyPiA9IGRpcmVjdExpZ2h0U2hhZG93LnNoYWRvd0NhbWVyYVZQTWF0cml4ICogdmVjNDxmMzI+KGdlb21ldHJ5LnBvc2l0aW9uLDEuMCk7XHJcbiAgICAgICAgICAgICAgICAgICAgICAgIHZhciBsaWdodEluZm86TGlnaHRJbmZvO1xyXG4gICAgICAgICAgICAgICAgICAgICAgICBsaWdodEluZm8uZGlyZWN0aW9uID0gZGlyZWN0aW9uYWxMaWdodC5kaXJlY3Rpb247XHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgICAgICAgICAgc2hhZG93VmFsdWUgPSBnZXRTaGFkb3dWYWx1ZShkaXJlY3RMaWdodFNoYWRvd01hcFRleHR1cmVBcnJheSwgc2hhZG93U2FtcGxlciwgbGlnaHRQb3MsIGdlb21ldHJ5LCBsaWdodEluZm8sIGksIGZhbHNlLCAwLCAwKTtcclxuICAgICAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICAgICAgZGlyZWN0aW9uYWxMaWdodC5jb2xvciAqPSBzaGFkb3dWYWx1ZTtcclxuICAgICAgICAgICAgICAgICNlbmRpZlxyXG4gICAgICAgICAgICBcclxuICAgICAgICAgICAgICAgICNpZiAke2RlZmluZXMubWF0ZXJpYWxQaG9uZ31cclxuICAgICAgICAgICAgICAgICAgICBsZXQgZGlyUmVmbGVjdGVkTGlnaHQ9Z2V0RGlyZWN0TGlnaHRJbmZvKGRpcmVjdGlvbmFsTGlnaHQsc2hpbmluZXNzLGdlb21ldHJ5Lm5vcm1hbCxnZW9tZXRyeS52aWV3RGlyKTtcclxuICAgICAgICAgICAgICAgICNlbGlmICR7ZGVmaW5lcy5tYXRlcmlhbFBicn1cclxuICAgICAgICAgICAgICAgICAgICBsZXQgaW5jaWRlbnRMaWdodD1nZXREaXJlY3Rpb25hbERpcmVjdExpZ2h0SW5jaWRlbnRMaWdodChkaXJlY3Rpb25hbExpZ2h0LGdlb21ldHJ5KTtcclxuICAgICAgICAgICAgICAgICAgICBsZXQgZGlyUmVmbGVjdGVkTGlnaHQ9ZGlyZWN0X1BoeXNpY2FsKGluY2lkZW50TGlnaHQsIGdlb21ldHJ5LCBtYXRlcmlhbCk7XHJcbiAgICAgICAgICAgICAgICAjZW5kaWZcclxuXHJcbiAgICAgICAgICAgICAgICByZWZsZWN0ZWRMaWdodC5kaXJlY3REaWZmdXNlKz1kaXJSZWZsZWN0ZWRMaWdodC5kaXJlY3REaWZmdXNlO1xyXG4gICAgICAgICAgICAgICAgcmVmbGVjdGVkTGlnaHQuZGlyZWN0U3BlY3VsYXIrPWRpclJlZmxlY3RlZExpZ2h0LmRpcmVjdFNwZWN1bGFyO1xyXG4gICAgICAgICAgICB9XHJcbiAgICAgICAgI2VuZGlmXHJcbiAgICAgICAgcmV0dXJuIHJlZmxlY3RlZExpZ2h0O1xyXG4gICAgfWA7XHJcbn1cclxuIiwiaW1wb3J0IHsgd2dzbFBhcnNlRGVmaW5lcyB9IGZyb20gXCIuLi8uLi9XZ3NsUHJlcHJvY2Vzc29yXCI7XHJcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIGxpZ2h0Q29tbW9uKGRlZmluZXMpIHtcclxuXHRyZXR1cm4gd2dzbFBhcnNlRGVmaW5lc2BcclxuICAgIHN0cnVjdCBSZWZsZWN0ZWRMaWdodCB7XHJcbiAgICAgICAgZGlyZWN0RGlmZnVzZTp2ZWMzPGYzMj4sXHJcbiAgICAgICAgZGlyZWN0U3BlY3VsYXI6dmVjMzxmMzI+LFxyXG4gICAgICAgIGluZGlyZWN0RGlmZnVzZTp2ZWMzPGYzMj4sXHJcbiAgICAgICAgaW5kaXJlY3RTcGVjdWxhcjp2ZWMzPGYzMj4sXHJcbiAgICB9O1xyXG4gICAgc3RydWN0IEdlb21ldHJ5IHtcclxuICAgICAgICBwb3NpdGlvbjogdmVjMzxmMzI+LFxyXG4gICAgICAgIG5vcm1hbDogdmVjMzxmMzI+LFxyXG4gICAgICAgIHZpZXdEaXI6IHZlYzM8ZjMyPixcclxuICAgICAgICAjaWYgJHtkZWZpbmVzLlVTRV9DTEVBUkNPQVR9XHJcbiAgICAgICAgICAgIHZlYzMgY2xlYXJjb2F0Tm9ybWFsO1xyXG4gICAgICAgICNlbmRpZlxyXG4gICAgfTtcclxuICAgIGZuIGdldEFtYmllbnRMaWdodElycmFkaWFuY2UoYW1iaWVudExpZ2h0Q29sb3I6IHZlYzM8ZjMyPikgLT4gdmVjMzxmMzI+IHtcclxuICAgICAgICBsZXQgaXJyYWRpYW5jZSA9IGFtYmllbnRMaWdodENvbG9yO1xyXG4gICAgICAgIHJldHVybiBpcnJhZGlhbmNlO1xyXG4gICAgfVxyXG4gICAgZm4gZ2V0RGlzdGFuY2VBdHRlbnVhdGlvbihsaWdodERpc3RhbmNlOiBmMzIsIGN1dG9mZkRpc3RhbmNlOiBmMzIsIGRlY2F5RXhwb25lbnQ6IGYzMikgLT4gZjMyIHtcclxuICAgICAgICBpZiAoY3V0b2ZmRGlzdGFuY2UgPiAwLjAgJiYgZGVjYXlFeHBvbmVudCA+IDAuMCkge1xyXG4gICAgICAgICAgICBsZXQgeDpmMzIgPSBzYXR1cmF0ZSgtIGxpZ2h0RGlzdGFuY2UgLyBjdXRvZmZEaXN0YW5jZSArIDEuMCk7XHJcbiAgICAgICAgICAgIHJldHVybiBwb3coeCwgZGVjYXlFeHBvbmVudCk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiAxLjA7XHJcbiAgICB9XHJcbiAgICBmbiBnZXRTcG90QXR0ZW51YXRpb24oY29uZUNvc2luZTogZjMyLCBwZW51bWJyYUNvc2luZTogZjMyLCBhbmdsZUNvc2luZTogZjMyKSAtPiBmMzIge1xyXG4gICAgICAgIHJldHVybiBzbW9vdGhzdGVwKGNvbmVDb3NpbmUsIHBlbnVtYnJhQ29zaW5lLCBhbmdsZUNvc2luZSk7XHJcbiAgICB9XHJcbiAgICBmbiBzaEdldElycmFkaWFuY2VBdCggbm9ybWFsOnZlYzM8ZjMyPiwgc2hDb2VmZmljaWVudHM6YXJyYXk8dmVjMzxmMzI+LDk+KS0+dmVjMzxmMzI+IHtcclxuICAgICAgICBsZXQgeDpmMzIgPSBub3JtYWwueDsgXHJcbiAgICAgICAgbGV0IHk6ZjMyID0gbm9ybWFsLnk7IFxyXG4gICAgICAgIGxldCB6OmYzMiA9IG5vcm1hbC56O1xyXG4gICAgICAgIHZhciByZXN1bHQ6dmVjMzxmMzI+ID0gc2hDb2VmZmljaWVudHNbIDAgXSAqIDAuODg2MjI3O1xyXG4gICAgICAgIHJlc3VsdCArPSBzaENvZWZmaWNpZW50c1sgMSBdICogMi4wICogMC41MTE2NjQgKiB5O1xyXG4gICAgICAgIHJlc3VsdCArPSBzaENvZWZmaWNpZW50c1sgMiBdICogMi4wICogMC41MTE2NjQgKiB6O1xyXG4gICAgICAgIHJlc3VsdCArPSBzaENvZWZmaWNpZW50c1sgMyBdICogMi4wICogMC41MTE2NjQgKiB4O1xyXG4gICAgICAgIHJlc3VsdCArPSBzaENvZWZmaWNpZW50c1sgNCBdICogMi4wICogMC40MjkwNDMgKiB4ICogeTtcclxuICAgICAgICByZXN1bHQgKz0gc2hDb2VmZmljaWVudHNbIDUgXSAqIDIuMCAqIDAuNDI5MDQzICogeSAqIHo7XHJcbiAgICAgICAgcmVzdWx0ICs9IHNoQ29lZmZpY2llbnRzWyA2IF0gKiAoIDAuNzQzMTI1ICogeiAqIHogLSAwLjI0NzcwOCApO1xyXG4gICAgICAgIHJlc3VsdCArPSBzaENvZWZmaWNpZW50c1sgNyBdICogMi4wICogMC40MjkwNDMgKiB4ICogejtcclxuICAgICAgICByZXN1bHQgKz0gc2hDb2VmZmljaWVudHNbIDggXSAqIDAuNDI5MDQzICogKCB4ICogeCAtIHkgKiB5ICk7XHJcbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcclxuICAgIH1cclxuICAgIGZuIGludmVyc2VUcmFuc2Zvcm1EaXJlY3Rpb24oIGRpcjp2ZWMzPGYzMj4sIG1hdHJpeDptYXQ0eDQ8ZjMyPiApLT52ZWMzPGYzMj4ge1xyXG4gICAgICAgIHJldHVybiBub3JtYWxpemUoICggdmVjNDxmMzI+KCBkaXIsIDAuMCApICogbWF0cml4ICkueHl6ICk7XHJcbiAgICB9XHJcbiBgO1xyXG59XHJcbiIsImltcG9ydCB7IHdnc2xQYXJzZURlZmluZXMgfSBmcm9tIFwiLi4vLi4vV2dzbFByZXByb2Nlc3NvclwiO1xyXG5leHBvcnQgZnVuY3Rpb24gZ2V0Tm9ybWFsKGRlZmluZXMpIHtcclxuXHRyZXR1cm4gd2dzbFBhcnNlRGVmaW5lc2BcclxuICAgICAgZm4gZ2V0Tm9ybWFsKGlucHV0OkZyYWdJbnB1dCktPnZlYzM8ZjMyPntcclxuICAgICAgICB2YXIgbm9ybWFsOnZlYzM8ZjMyPjtcclxuICAgICAgICAjaWYgJHtkZWZpbmVzLkhBU19OT1JNQUx9XHJcbiAgICAgICAgICAgIG5vcm1hbD0gaW5wdXQubm9ybWFsO1xyXG4gICAgICAgICNlbHNlXHJcbiAgICAgICAgICBsZXQgcG9zX2R4ID0gZHBkeChpbnB1dC53b3JsZFBvcyk7XHJcbiAgICAgICAgICBsZXQgcG9zX2R5ID0gZHBkeShpbnB1dC53b3JsZFBvcyk7XHJcbiAgICAgICAgICBub3JtYWwgPSBub3JtYWxpemUoIGNyb3NzKHBvc19keSwgcG9zX2R4KSApO1xyXG4gICAgICAgICNlbmRpZlxyXG4gICAgICAgIHJldHVybiBub3JtYWwqKGYzMihpbnB1dC5mcm9udEZhY2luZykgKiAyLjAgLSAxLjApO1xyXG4gICAgICB9XHJcbiAgICBgO1xyXG59XHJcbmV4cG9ydCBmdW5jdGlvbiBnZXROb3JtYWxCeU5vcm1hbFRleHR1cmUoZGVmaW5lcykge1xyXG5cdHJldHVybiB3Z3NsUGFyc2VEZWZpbmVzYFxyXG4gICAgICBmbiBnZXROb3JtYWxCeU5vcm1hbFRleHR1cmUoaW5wdXQ6RnJhZ0lucHV0KS0+dmVjMzxmMzI+e1xyXG4gICAgICAgIHZhciBuOnZlYzM8ZjMyPiA9IHRleHR1cmVTYW1wbGUobm9ybWFsVGV4dHVyZSxub3JtYWxTYW1wbGVyLCBpbnB1dC51dikucmdiO1xyXG4gICAgICAgIGxldCB0Ym46bWF0M3gzPGYzMj4gPWdldFRCTihpbnB1dCk7XHJcbiAgICAgICAgbiA9IG5vcm1hbGl6ZSh0Ym4gKiAoMi4wICogbiAtIHZlYzMoMS4wKSkpO1xyXG4gICAgICAgIG49biooZjMyKGlucHV0LmZyb250RmFjaW5nKSAqIDIuMCAtIDEuMCk7XHJcbiAgICAgICAgcmV0dXJuIG47XHJcbiAgICAgIH1cclxuICAgIGA7XHJcbn1cclxuZXhwb3J0IGZ1bmN0aW9uIGdldFRCTihkZWZpbmVzKSB7XHJcblx0cmV0dXJuIHdnc2xQYXJzZURlZmluZXNgXHJcbiAgICAgICAgZm4gZ2V0VEJOKGlucHV0OkZyYWdJbnB1dCktPm1hdDN4MzxmMzI+e1xyXG4gICAgICAgICNpZiAke2RlZmluZXMuSEFTX1RBTkdFTlR9XHJcbiAgICAgICAgICAgIGxldCB0Ym46bWF0M3gzPGYzMj4gPSBpbnB1dC50Ym47XHJcbiAgICAgICAgI2Vsc2VcclxuICAgICAgICAgICAgbGV0IG5vcm1hbDp2ZWMzPGYzMj4gPW5vcm1hbGl6ZShpbnB1dC5ub3JtYWwpO1xyXG4gICAgICAgICAgICBsZXQgdXY6dmVjMjxmMzI+ID0gc2VsZWN0KC1pbnB1dC51dixpbnB1dC51dixpbnB1dC5mcm9udEZhY2luZyk7XHJcbiAgICAgICAgICAgICAgLy8gcmVmOiBodHRwOi8vd3d3LnRoZXRlbnRocGxhbmV0LmRlL2FyY2hpdmVzLzExODBcclxuICAgICAgICAgICAgICAvLyBnZXQgZWRnZSB2ZWN0b3JzIG9mIHRoZSBwaXhlbCB0cmlhbmdsZVxyXG4gICAgICAgICAgICAgIGxldCBkcDE6dmVjMzxmMzI+ID0gIHZlYzM8ZjMyPihkcGR4KGlucHV0LndvcmxkUG9zLngpLCBkcGR4KGlucHV0LndvcmxkUG9zLnkpLCBkcGR4KGlucHV0LndvcmxkUG9zLnopKTtcclxuICAgICAgICAgICAgICBsZXQgZHAyOnZlYzM8ZjMyPiA9ICB2ZWMzPGYzMj4oZHBkeShpbnB1dC53b3JsZFBvcy54KSwgZHBkeShpbnB1dC53b3JsZFBvcy55KSwgZHBkeShpbnB1dC53b3JsZFBvcy56KSk7XHJcbiAgICAgICAgICAgICAgbGV0IGR1djE6dmVjMjxmMzI+ID0gZHBkeCh1dik7XHJcbiAgICAgICAgICAgICAgbGV0IGR1djI6dmVjMjxmMzI+ID0gZHBkeSh1dik7XHJcblxyXG4gICAgICAgICAgICAgIC8vIHNvbHZlIHRoZSBsaW5lYXIgc3lzdGVtXHJcbiAgICAgICAgICAgICAgbGV0IGRwMnBlcnA6dmVjMzxmMzI+ID0gY3Jvc3MoZHAyLCBub3JtYWwpO1xyXG4gICAgICAgICAgICAgIGxldCBkcDFwZXJwOnZlYzM8ZjMyPiA9IGNyb3NzKG5vcm1hbCwgZHAxKTtcclxuICAgICAgICAgICAgICBsZXQgdGFuZ2VudDp2ZWMzPGYzMj4gPSBkcDJwZXJwICogZHV2MS54ICsgZHAxcGVycCAqIGR1djIueDtcclxuICAgICAgICAgICAgICBsZXQgYmlub3JtYWw6dmVjMzxmMzI+ID0gZHAycGVycCAqIGR1djEueSArIGRwMXBlcnAgKiBkdXYyLnk7XHJcbiAgICAgICAgICAgICAgLy8gY29uc3RydWN0IGEgc2NhbGUtaW52YXJpYW50IGZyYW1lIFxyXG4gICAgICAgICAgICAgIGxldCByZXN1bHQ6ZjMyPW1heChkb3QodGFuZ2VudCwgdGFuZ2VudCksIGRvdChiaW5vcm1hbCwgYmlub3JtYWwpKTtcclxuICAgICAgICAgICAgICBsZXQgaW52bWF4OmYzMiA9IDEuMC9zcXJ0KHJlc3VsdCk7XHJcbiAgICAgICAgICAgICAgbGV0IHRibjptYXQzeDM8ZjMyPiA9IG1hdDN4MzxmMzI+KHRhbmdlbnQgKiBpbnZtYXgsIGJpbm9ybWFsICogaW52bWF4LCBub3JtYWwpO1xyXG4gICAgICAgICNlbmRpZlxyXG4gICAgICAgIHJldHVybiB0Ym47XHJcbiAgICAgIH1cclxuICBgO1xyXG59XHJcbiIsImltcG9ydCB7IHdnc2xQYXJzZURlZmluZXMgfSBmcm9tIFwiLi4vLi4vV2dzbFByZXByb2Nlc3NvclwiO1xyXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBicmRmKGRlZmluZXMpIHtcclxuXHRyZXR1cm4gd2dzbFBhcnNlRGVmaW5lc2BcclxuICAgICAgICAjaWYgJHtkZWZpbmVzLlVTRV9TSEVFTn1cclxuICAgICAgICAgICAgICAgIGZuIERfQ2hhcmxpZSggcm91Z2huZXNzOmYzMixkb3ROSDpmMzIgKS0+ZjMyIHtcclxuICAgICAgICAgICAgICAgICAgICBsZXQgYWxwaGE6ZjMyID0gcG93Miggcm91Z2huZXNzICk7XHJcbiAgICAgICAgICAgICAgICAgICAgbGV0IGludkFscGhhOmYzMiA9IDEuMCAvIGFscGhhO1xyXG4gICAgICAgICAgICAgICAgICAgIGxldCBjb3MyaDpmMzIgPSBkb3ROSCAqIGRvdE5IO1xyXG4gICAgICAgICAgICAgICAgICAgIGxldCBzaW4yaDpmMzIgPSBtYXgoIDEuMCAtIGNvczJoLCAwLjAwNzgxMjUgKTtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gKCAyLjAgKyBpbnZBbHBoYSApICogcG93KCBzaW4yaCwgaW52QWxwaGEgKiAwLjUgKSAvICggMi4wICogUEkgKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGZuIFZfTmV1YmVsdCggZG90TlY6ZjMyLCBkb3ROTDpmMzIgKS0+ZjMyIHtcclxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gc2F0dXJhdGUoIDEuMCAvICggNC4wICogKCBkb3ROTCArIGRvdE5WIC0gZG90TkwgKiBkb3ROViApICkgKTtcclxuICAgICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICAgIGZuIEJSREZfU2hlZW4obGlnaHREaXI6dmVjMzxmMzI+LCB2aWV3RGlyOnZlYzM8ZjMyPiwgbm9ybWFsOnZlYzM8ZjMyPixzaGVlbkNvbG9yOnZlYzM8ZjMyPixzaGVlblJvdWdobmVzczpmMzIgKS0+dmVjMzxmMzI+IHtcclxuICAgICAgICAgICAgICAgICAgICBsZXQgaGFsZkRpcjp2ZWMzPGYzMj4gPSBub3JtYWxpemUoIGxpZ2h0RGlyICsgdmlld0RpciApO1xyXG4gICAgICAgICAgICAgICAgICAgIGxldCBkb3ROTDpmMzIgPSBzYXR1cmF0ZSggZG90KCBub3JtYWwsIGxpZ2h0RGlyICkgKTtcclxuICAgICAgICAgICAgICAgICAgICBsZXQgZG90TlY6ZjMyID0gc2F0dXJhdGUoIGRvdCggbm9ybWFsLCB2aWV3RGlyICkgKTtcclxuICAgICAgICAgICAgICAgICAgICBsZXQgZG90Tkg6ZjMyID0gc2F0dXJhdGUoIGRvdCggbm9ybWFsLCBoYWxmRGlyICkgKTtcclxuICAgICAgICAgICAgICAgICAgICBsZXQgRDpmMzIgPSBEX0NoYXJsaWUoIHNoZWVuUm91Z2huZXNzLCBkb3ROSCApO1xyXG4gICAgICAgICAgICAgICAgICAgIGxldCBWOmYzMiA9IFZfTmV1YmVsdCggZG90TlYsIGRvdE5MICk7XHJcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHNoZWVuQ29sb3IgKiAoIEQgKiBWICk7XHJcbiAgICAgICAgICAgICAgICB9XHJcbiAgICAgICAgI2VuZGlmXHJcbiAgICAgICAgZm4gQlJERl9MYW1iZXJ0KGRpZmZ1c2VDb2xvcjp2ZWMzPGYzMj4pLT52ZWMzPGYzMj4ge1xyXG5cclxuICAgICAgICAgICAgcmV0dXJuIFJFQ0lQUk9DQUxfUEkgKiBkaWZmdXNlQ29sb3I7XHJcblxyXG4gICAgICAgIH0gLy8gdmFsaWRhdGVkXHJcblxyXG4gICAgICAgIGZuIEZfU2NobGljayggZjA6dmVjMzxmMzI+LCBkb3RWSDpmMzIgKS0+dmVjMzxmMzI+IHtcclxuXHJcbiAgICAgICAgICAgIC8vIE9yaWdpbmFsIGFwcHJveGltYXRpb24gYnkgQ2hyaXN0b3BoZSBTY2hsaWNrICc5NFxyXG4gICAgICAgICAgICAvLyBmbG9hdCBmcmVzbmVsID0gcG93KCAxLjAgLSBkb3RWSCwgNS4wICk7XHJcblxyXG4gICAgICAgICAgICAvLyBPcHRpbWl6ZWQgdmFyaWFudCAocHJlc2VudGVkIGJ5IEVwaWMgYXQgU0lHR1JBUEggJzEzKVxyXG4gICAgICAgICAgICAvLyBodHRwczovL2NkbjIudW5yZWFsZW5naW5lLmNvbS9SZXNvdXJjZXMvZmlsZXMvMjAxM1NpZ2dyYXBoUHJlc2VudGF0aW9uc05vdGVzLTI2OTE1NzM4LnBkZlxyXG4gICAgICAgICAgIGxldCBmcmVzbmVsID0gZXhwMiggKCAtIDUuNTU0NzMgKiBkb3RWSCAtIDYuOTgzMTYgKSAqIGRvdFZIICk7XHJcbiAgICAgICAgICAgcmV0dXJuICggMS4wIC0gZjAgKSAqIGZyZXNuZWwgKyBmMDtcclxuXHJcbiAgICAgICAgfSAvLyB2YWxpZGF0ZWRcclxuXHJcbiAgICAgICAgZm4gU2NobGlja190b19GMChmOnZlYzM8ZjMyPiwgZjkwOmYzMiwgZG90Vkg6ZjMyICktPnZlYzM8ZjMyPiB7XHJcbiAgICAgICAgICAgIGxldCB4OmYzMiA9IGNsYW1wKCAxLjAgLSBkb3RWSCwgMC4wLCAxLjAgKTtcclxuICAgICAgICAgICAgbGV0IHgyOmYzMiA9IHggKiB4O1xyXG4gICAgICAgICAgICBsZXQgeDU6ZjMyID0gY2xhbXAoIHggKiB4MiAqIHgyLCAwLjAsIDAuOTk5OSApO1xyXG5cclxuICAgICAgICAgICAgcmV0dXJuICggZiAtIHZlYzMoIGY5MCApICogeDUgKSAvICggMS4wIC0geDUgKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZm4gVl9HR1hfU21pdGhDb3JyZWxhdGVkKCBhbHBoYTpmMzIsIGRvdE5MOmYzMixkb3ROVjpmMzIgKS0+ZjMyIHtcclxuXHJcbiAgICAgICAgICAgIGxldCBhMiA6ZjMyPSBwb3cyKCBhbHBoYSApO1xyXG5cclxuICAgICAgICAgICAgbGV0IGd2OmYzMiA9IGRvdE5MICogc3FydCggYTIgKyAoIDEuMCAtIGEyICkgKiBwb3cyKCBkb3ROViApICk7XHJcbiAgICAgICAgICAgIGxldCBnbDpmMzIgPSBkb3ROViAqIHNxcnQoIGEyICsgKCAxLjAgLSBhMiApICogcG93MiggZG90TkwgKSApO1xyXG5cclxuICAgICAgICAgICAgcmV0dXJuIDAuNSAvIG1heCgoZ3YgKyBnbCksIDAuMDAwMDAwMDAxICk7XHJcblxyXG4gICAgICAgIH1cclxuICAgICAgICBmbiBEX0dHWCggYWxwaGE6ZjMyLCBkb3ROSDpmMzIgKS0+ZjMyIHtcclxuXHJcbiAgICAgICAgICAgIGxldCBhMjpmMzIgPSBwb3cyKCBhbHBoYSApO1xyXG5cclxuICAgICAgICAgICAgbGV0IGRlbm9tOmYzMiA9IHBvdzIoIGRvdE5IICkgKiAoIGEyIC0gMS4wICkgKyAxLjA7IC8vIGF2b2lkIGFscGhhID0gMCB3aXRoIGRvdE5IID0gMVxyXG5cclxuICAgICAgICAgICAgcmV0dXJuIFJFQ0lQUk9DQUxfUEkgKiBhMiAvIHBvdzIoIGRlbm9tICk7XHJcblxyXG4gICAgICAgIH1cclxuICAgICAgICBmbiBCUkRGX0dHWCggbGlnaHREaXI6dmVjMzxmMzI+LCB2aWV3RGlyOnZlYzM8ZjMyPiwgbm9ybWFsOnZlYzM8ZjMyPiwgZjA6dmVjMzxmMzI+LCAgcm91Z2huZXNzOmYzMiApLT52ZWMzPGYzMj4ge1xyXG5cclxuICAgICAgICAgICAgbGV0IGFscGhhOmYzMiA9IHBvdzIoIHJvdWdobmVzcyApOyAvLyBVRTQncyByb3VnaG5lc3NcclxuXHJcbiAgICAgICAgICAgIGxldCBoYWxmRGlyID0gbm9ybWFsaXplKCBsaWdodERpciArIHZpZXdEaXIgKTtcclxuXHJcbiAgICAgICAgICAgIGxldCBkb3ROTDpmMzIgPSBzYXR1cmF0ZSggZG90KCBub3JtYWwsIGxpZ2h0RGlyICkgKTtcclxuICAgICAgICAgICAgbGV0IGRvdE5WOmYzMiA9IHNhdHVyYXRlKCBkb3QoIG5vcm1hbCwgdmlld0RpciApICk7XHJcbiAgICAgICAgICAgIGxldCBkb3ROSDpmMzIgPSBzYXR1cmF0ZSggZG90KCBub3JtYWwsIGhhbGZEaXIgKSApO1xyXG4gICAgICAgICAgICBsZXQgZG90Vkg6ZjMyID0gc2F0dXJhdGUoIGRvdCggbGlnaHREaXIsIGhhbGZEaXIgKSApO1xyXG5cclxuICAgICAgICAgICAgbGV0IEYgPSBGX1NjaGxpY2soIGYwLCAgZG90VkggKTtcclxuXHJcbiAgICAgICAgICAgIGxldCBWID0gVl9HR1hfU21pdGhDb3JyZWxhdGVkKCBhbHBoYSwgZG90TkwsIGRvdE5WICk7XHJcblxyXG4gICAgICAgICAgICBsZXQgRCA9IERfR0dYKCBhbHBoYSwgZG90TkggKTtcclxuXHJcbiAgICAgICAgICAgIHJldHVybiBGICogKCBWICogRCApO1xyXG5cclxuICAgICAgICB9XHJcbiAgICAgICAgZm4gZGlyZWN0X1BoeXNpY2FsKCBkaXJlY3RMaWdodDpJbmNpZGVudExpZ2h0LCBnZW9tZXRyeTpHZW9tZXRyeSxtYXRlcmlhbDpQaHlzaWNhbE1hdGVyaWFsKS0+UmVmbGVjdGVkTGlnaHQge1xyXG4gICAgICAgICAgICB2YXIgcmVmbGVjdGVkTGlnaHQ6UmVmbGVjdGVkTGlnaHQ7XHJcbiAgICAgICAgICAgIGxldCBkb3ROTDpmMzIgPSBzYXR1cmF0ZShkb3QoIGdlb21ldHJ5Lm5vcm1hbCxnZW9tZXRyeS52aWV3RGlyKSk7XHJcbiAgICAgICAgICAgIGxldCBpcnJhZGlhbmNlOnZlYzM8ZjMyPiA9IGRvdE5MICogZGlyZWN0TGlnaHQuY29sb3IqMy4xNDE1OTI2O1xyXG4gICAgICAgICAgICByZWZsZWN0ZWRMaWdodC5kaXJlY3RTcGVjdWxhciA9IGlycmFkaWFuY2UgKiBCUkRGX0dHWCggZGlyZWN0TGlnaHQuZGlyZWN0aW9uLCBnZW9tZXRyeS52aWV3RGlyLCBnZW9tZXRyeS5ub3JtYWwsIG1hdGVyaWFsLnNwZWN1bGFyQ29sb3IsIG1hdGVyaWFsLnJvdWdobmVzcyApO1xyXG4gICAgICAgICAgICByZWZsZWN0ZWRMaWdodC5kaXJlY3REaWZmdXNlID0gaXJyYWRpYW5jZSAqIEJSREZfTGFtYmVydCggbWF0ZXJpYWwuZGlmZnVzZUNvbG9yICk7XHJcbiAgICAgICAgICAgIHJldHVybiByZWZsZWN0ZWRMaWdodDtcclxuICAgICAgICB9XHJcbiAgYDtcclxufVxyXG4iLCJpbXBvcnQgeyB3Z3NsUGFyc2VEZWZpbmVzIH0gZnJvbSBcIi4uLy4uL1dnc2xQcmVwcm9jZXNzb3JcIjtcclxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gaWJsKGRlZmluZXMpIHtcclxuXHRyZXR1cm4gd2dzbFBhcnNlRGVmaW5lc2BcclxuICBmbiBnZXRMaWdodFByb2JlUmFkaWFuY2UoIHZpZXdEaXI6dmVjMzxmMzI+LG5vcm1hbDp2ZWMzPGYzMj4sIHJvdWdobmVzczpmMzIgKS0+dmVjMzxmMzI+e1xyXG4gICAgdmFyIHJlZmxlY3RWZWM6dmVjMzxmMzI+ID0gcmVmbGVjdCggLXZpZXdEaXIsIG5vcm1hbCApO1xyXG4gICAgcmVmbGVjdFZlYy54ID0gLXJlZmxlY3RWZWMueDsgLy8gVGV4dHVyZUN1YmUgaXMgbGVmdC1oYW5kLHNvIHggbmVlZCBpbnZlcnNlXHJcbiAgICBsZXQgbWlwQ291bnQ6ZjMyID0gMTAuMDsgLy8gcmVzb2x1dGlvbiBvZiAyNTZ4MjU2XHJcbiAgICBsZXQgbG9kOmYzMiA9IHJvdWdobmVzcyAqIG1pcENvdW50O1xyXG4gICAgbGV0IHNwZWN1bGFyTGlnaHQ6dmVjMzxmMzI+ID0gdGV4dHVyZVNhbXBsZUxldmVsKHNwZWN1bGFyRW52VGV4dHVyZSxzcGVjdWxhckVudlNhbXBsZXIsIHJlZmxlY3RWZWMsIGxvZCkucmdiO1xyXG4gICAgcmV0dXJuIHNwZWN1bGFyTGlnaHQ7XHJcbiAgfVxyXG4gIGZuIGdldExpZ2h0UHJvYmVJcnJhZGlhbmNlKCBsaWdodFByb2JlOmFycmF5PHZlYzM8ZjMyPiw5Piwgbm9ybWFsOnZlYzM8ZjMyPiktPnZlYzM8ZjMyPiB7XHJcbiAgICB2YXIgd29ybGROb3JtYWw6dmVjMzxmMzI+ID0gbm9ybWFsO1xyXG4gICAgd29ybGROb3JtYWwueCA9IC1ub3JtYWwueDtcclxuICAgIHZhciBpcnJhZGlhbmNlOnZlYzM8ZjMyPiA9IGxpZ2h0UHJvYmVbMF07XHJcbiAgICBpcnJhZGlhbmNlKz1saWdodFByb2JlWzFdICogKG5vcm1hbC55KTtcclxuICAgIGlycmFkaWFuY2UrPWxpZ2h0UHJvYmVbMl0gKiAobm9ybWFsLnopIDtcclxuICAgIGlycmFkaWFuY2UrPWxpZ2h0UHJvYmVbM10gKiAobm9ybWFsLngpIDtcclxuXHJcbiAgICBpcnJhZGlhbmNlKz1saWdodFByb2JlWzRdICogKG5vcm1hbC55ICogbm9ybWFsLngpIDtcclxuICAgIGlycmFkaWFuY2UrPWxpZ2h0UHJvYmVbNV0gKiAobm9ybWFsLnkgKiBub3JtYWwueikgO1xyXG4gICAgaXJyYWRpYW5jZSs9bGlnaHRQcm9iZVs2XSAqICgzLjAgKiBub3JtYWwueiAqIG5vcm1hbC56IC0gMS4wKTtcclxuICAgIGlycmFkaWFuY2UrPWxpZ2h0UHJvYmVbN10gKiAobm9ybWFsLnogKiBub3JtYWwueCkgO1xyXG4gICAgaXJyYWRpYW5jZSs9bGlnaHRQcm9iZVs4XSAqIChub3JtYWwueCAqIG5vcm1hbC54IC0gbm9ybWFsLnkgKiBub3JtYWwueSk7XHJcblxyXG4gICAgcmV0dXJuIG1heChpcnJhZGlhbmNlLCB2ZWMzPGYzMj4oMC4wLDAuMCwwLjApKTtcclxuICB9XHJcbiAgZm4gREZHQXBwcm94KCBzcGVjdWxhckNvbG9yOnZlYzM8ZjMyPiwgcm91Z2huZXNzOmYzMixkb3ROVjpmMzIgKS0+dmVjMzxmMzI+IHtcclxuICAgIGNvbnN0IGMwOnZlYzQ8ZjMyPiA9IHZlYzQ8ZjMyPiggLSAxLCAtIDAuMDI3NSwgLSAwLjU3MiwgMC4wMjIgKTtcclxuICAgIGxldCBjMTp2ZWM0PGYzMj4gPSB2ZWM0PGYzMj4oIDEsIDAuMDQyNSwgMS4wNCwgLSAwLjA0ICk7XHJcbiAgICBsZXQgcjp2ZWM0PGYzMj4gPSByb3VnaG5lc3MgKiBjMCArIGMxO1xyXG4gICAgbGV0IGEwMDQ6ZjMyID0gbWluKCByLnggKiByLngsIGV4cDIoIC0gOS4yOCAqIGRvdE5WICkgKSAqIHIueCArIHIueTtcclxuICAgIGxldCBmYWI6dmVjMjxmMzI+ID0gdmVjMjxmMzI+KCAtIDEuMDQsIDEuMDQgKSAqIGEwMDQgKyByLnp3O1xyXG4gICAgcmV0dXJuIHNwZWN1bGFyQ29sb3IgKiBmYWIueCArIGZhYi55O1xyXG4gIH1cclxuICAvL+mXtOaOpeWFieeFp1xyXG4gIGZuIGluZGlyZWN0RGlmZnVzZV9QaHlzaWNhbChnZW9tZXRyeTpHZW9tZXRyeSwgbWF0ZXJpYWw6UGh5c2ljYWxNYXRlcmlhbCApLT5SZWZsZWN0ZWRMaWdodCB7XHJcbiAgICAgIHZhciByZWZsZWN0ZWRMaWdodDpSZWZsZWN0ZWRMaWdodDtcclxuICAgICAgdmFyIGlycmFkaWFuY2U6dmVjMzxmMzI+ID0gbGlnaHRVbmlmb3Jtcy5hbWJpZW50Lnh5eipsaWdodFVuaWZvcm1zLmFtYmllbnQudztcclxuICAgICAgaXJyYWRpYW5jZSAqPSBQSTtcclxuICAgICAgcmVmbGVjdGVkTGlnaHQuaW5kaXJlY3REaWZmdXNlICs9IGlycmFkaWFuY2UgKiBCUkRGX0xhbWJlcnQoIG1hdGVyaWFsLmRpZmZ1c2VDb2xvciApO1xyXG4gICAgICByZXR1cm4gcmVmbGVjdGVkTGlnaHQ7XHJcbiAgfVxyXG4gIC8v6Ze05o6l6auY5YWJXHJcbiAgZm4gaW5kaXJlY3RTcGVjdWxhcl9QaHlzaWNhbChnZW9tZXRyeTpHZW9tZXRyeSwgbWF0ZXJpYWw6UGh5c2ljYWxNYXRlcmlhbCktPlJlZmxlY3RlZExpZ2h0IHtcclxuICAgICAgdmFyIHJlZmxlY3RlZExpZ2h0OlJlZmxlY3RlZExpZ2h0O1xyXG4gICAgICAvLyBJQkwgc3BlY3VsYXJcclxuICAgICAgbGV0IHJhZGlhbmNlOnZlYzM8ZjMyPiA9IGdldExpZ2h0UHJvYmVSYWRpYW5jZShnZW9tZXRyeS52aWV3RGlyLCBnZW9tZXRyeS5ub3JtYWwsIG1hdGVyaWFsLnJvdWdobmVzcyk7XHJcbiAgICAgIGxldCByYWRpYW5jZUF0dGVudWF0aW9uOmYzMiA9IDEuMDtcclxuICAgICAgcmVmbGVjdGVkTGlnaHQuaW5kaXJlY3RTcGVjdWxhciArPSByYWRpYW5jZUF0dGVudWF0aW9uICogcmFkaWFuY2UgKiBERkdBcHByb3gobWF0ZXJpYWwuc3BlY3VsYXJDb2xvciwgbWF0ZXJpYWwucm91Z2huZXNzLCBnZW9tZXRyeS5kb3ROViApO1xyXG4gICAgICByZXR1cm4gcmVmbGVjdGVkTGlnaHQ7XHJcbiAgICB9XHJcbiAgYDtcclxufVxyXG4iLCJpbXBvcnQgeyB3Z3NsUGFyc2VEZWZpbmVzIH0gZnJvbSBcIi4uLy4uL1dnc2xQcmVwcm9jZXNzb3JcIjtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHBickZ1bmN0aW9uKGRlZmluZXMpIHtcclxuXHRyZXR1cm4gd2dzbFBhcnNlRGVmaW5lc2BcclxuXHJcbiAgICAjaWYgJHtkZWZpbmVzLkRJVEhFUklOR31cclxuICAgICAgICBmbiBkaXRoZXJpbmcoY29sb3I6dmVjMzxmMzI+ICktPnZlYzM8ZjMyPiB7XHJcbiAgICAgICAgICAgIGxldCBncmlkX3Bvc2l0aW9uOmYzMiA9IHJhbmQoIGdsX0ZyYWdDb29yZC54eSApO1xyXG4gICAgICAgICAgICBsZXQgZGl0aGVyX3NoaWZ0X1JHQjp2ZWMzPGYzMj4gPSB2ZWMzPGYzMj4oIDAuMjUgLyAyNTUuMCwgLTAuMjUgLyAyNTUuMCwgMC4yNSAvIDI1NS4wICk7XHJcbiAgICAgICAgICAgIGRpdGhlcl9zaGlmdF9SR0IgPSBtaXgoIDIuMCAqIGRpdGhlcl9zaGlmdF9SR0IsIC0yLjAgKiBkaXRoZXJfc2hpZnRfUkdCLCBncmlkX3Bvc2l0aW9uICk7XHJcbiAgICAgICAgICAgIHJldHVybiBjb2xvciArIGRpdGhlcl9zaGlmdF9SR0I7XHJcbiAgICAgICAgfVxyXG4gICAgI2VuZGlmXHJcblxyXG4gICAgI2lmICR7ZGVmaW5lcy5VU0VfSVJJREVTQ0VOQ0V9XHJcbiAgICAgICAgZm4gQlJERl9HR1hfSXJpZGVzY2VuY2UoIGxpZ2h0RGlyOnZlYzM8ZjMyPiwgdmlld0Rpcjp2ZWMzPGYzMj4sbm9ybWFsOnZlYzM8ZjMyPiwgZjA6dmVjMzxmMzI+LCBmOTA6ZjMyLGlyaWRlc2NlbmNlOmYzMiwgaXJpZGVzY2VuY2VGcmVzbmVsOnZlYzM8ZjMyPixyb3VnaG5lc3M6ZjMyICktPnZlYzM8ZjMyPiB7XHJcbiAgICAgICAgICAgIGxldCBhbHBoYTpmMzIgPSBwb3cyKCByb3VnaG5lc3MgKTtcclxuICAgICAgICAgICAgbGV0IGhhbGZEaXI6dmVjMzxmMzI+ID0gbm9ybWFsaXplKCBsaWdodERpciArIHZpZXdEaXIgKTtcclxuICAgICAgICAgICAgbGV0IGRvdE5MOmYzMiA9IHNhdHVyYXRlKCBkb3QoIG5vcm1hbCwgbGlnaHREaXIgKSApO1xyXG4gICAgICAgICAgICBsZXQgZG90TlY6ZjMyID0gc2F0dXJhdGUoIGRvdCggbm9ybWFsLCB2aWV3RGlyICkgKTtcclxuICAgICAgICAgICAgbGV0IGRvdE5IOmYzMiA9IHNhdHVyYXRlKCBkb3QoIG5vcm1hbCwgaGFsZkRpciApICk7XHJcbiAgICAgICAgICAgIGxldCBkb3RWSDpmMzIgPSBzYXR1cmF0ZSggZG90KCB2aWV3RGlyLCBoYWxmRGlyICkgKTtcclxuICAgICAgICAgICAgbGV0IEY6dmVjMzxmMzI+ID0gbWl4KCBGX1NjaGxpY2soIGYwLCBmOTAsIGRvdFZIICksIGlyaWRlc2NlbmNlRnJlc25lbCwgaXJpZGVzY2VuY2UgKTtcclxuICAgICAgICAgICAgbGV0IFY6ZjMyID0gVl9HR1hfU21pdGhDb3JyZWxhdGVkKCBhbHBoYSwgZG90TkwsIGRvdE5WICk7XHJcbiAgICAgICAgICAgIGxldCBEOmYzMiA9IERfR0dYKCBhbHBoYSwgZG90TkggKTtcclxuICAgICAgICAgICAgcmV0dXJuIEYgKiAoIFYgKiBEICk7XHJcbiAgICAgICAgfVxyXG4gICAgI2VuZGlmXHJcblxyXG4gICAgI2lmICR7ZGVmaW5lcy5VU0VfU0hFRU59XHJcbiAgICAgICAgZm4gRF9DaGFybGllKCByb3VnaG5lc3M6ZjMyLGRvdE5IOmYzMiApLT5mMzIge1xyXG4gICAgICAgICAgICBsZXQgYWxwaGE6ZjMyID0gcG93Miggcm91Z2huZXNzICk7XHJcbiAgICAgICAgICAgIGxldCBpbnZBbHBoYTpmMzIgPSAxLjAgLyBhbHBoYTtcclxuICAgICAgICAgICAgbGV0IGNvczJoOmYzMiA9IGRvdE5IICogZG90Tkg7XHJcbiAgICAgICAgICAgIGxldCBzaW4yaDpmMzIgPSBtYXgoIDEuMCAtIGNvczJoLCAwLjAwNzgxMjUgKTtcclxuICAgICAgICAgICAgcmV0dXJuICggMi4wICsgaW52QWxwaGEgKSAqIHBvdyggc2luMmgsIGludkFscGhhICogMC41ICkgLyAoIDIuMCAqIFBJICk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGZuIFZfTmV1YmVsdCggZG90TlY6ZjMyLCBkb3ROTDpmMzIgKS0+ZjMyIHtcclxuICAgICAgICAgICAgcmV0dXJuIHNhdHVyYXRlKCAxLjAgLyAoIDQuMCAqICggZG90TkwgKyBkb3ROViAtIGRvdE5MICogZG90TlYgKSApICk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGZuIEJSREZfU2hlZW4obGlnaHREaXI6dmVjMzxmMzI+LCB2aWV3RGlyOnZlYzM8ZjMyPiwgbm9ybWFsOnZlYzM8ZjMyPixzaGVlbkNvbG9yOnZlYzM8ZjMyPixzaGVlblJvdWdobmVzczpmMzIgKS0+dmVjMzxmMzI+IHtcclxuICAgICAgICAgICAgbGV0IGhhbGZEaXI6dmVjMzxmMzI+ID0gbm9ybWFsaXplKCBsaWdodERpciArIHZpZXdEaXIgKTtcclxuICAgICAgICAgICAgbGV0IGRvdE5MOmYzMiA9IHNhdHVyYXRlKCBkb3QoIG5vcm1hbCwgbGlnaHREaXIgKSApO1xyXG4gICAgICAgICAgICBsZXQgZG90TlY6ZjMyID0gc2F0dXJhdGUoIGRvdCggbm9ybWFsLCB2aWV3RGlyICkgKTtcclxuICAgICAgICAgICAgbGV0IGRvdE5IOmYzMiA9IHNhdHVyYXRlKCBkb3QoIG5vcm1hbCwgaGFsZkRpciApICk7XHJcbiAgICAgICAgICAgIGxldCBEOmYzMiA9IERfQ2hhcmxpZSggc2hlZW5Sb3VnaG5lc3MsIGRvdE5IICk7XHJcbiAgICAgICAgICAgIGxldCBWOmYzMiA9IFZfTmV1YmVsdCggZG90TlYsIGRvdE5MICk7XHJcbiAgICAgICAgICAgIHJldHVybiBzaGVlbkNvbG9yICogKCBEICogViApO1xyXG4gICAgICAgIH1cclxuICAgICNlbmRpZlxyXG5cclxuICAgICNpZiAke2RlZmluZXMuVVNFX0lSSURFU0NFTkNFfVxyXG4gICAgICAgIGxldCBYWVpfVE9fUkVDNzA5OiBtYXQzeDM8ZjMyPiA9IG1hdDN4MzxmMzI+KFxyXG4gICAgICAgIDMuMjQwNDU0MiwgLTAuOTY5MjY2MCwgMC4wNTU2NDM0LCAtMS41MzcxMzg1LCAxLjg3NjAxMDgsIC0wLjIwNDAyNTksIC0wLjQ5ODUzMTQsIDAuMDQxNTU2MCwgMS4wNTcyMjUyXHJcbiAgICAgICAgKTtcclxuICAgICAgICBmbiBGcmVzbmVsMFRvSW9yKCBmcmVzbmVsMDp2ZWMzPGYzMj4gKS0+dmVjMzxmMzI+IHtcclxuICAgICAgICAgICAgbGV0IHNxcnRGMDp2ZWMzPGYzMj4gPSBzcXJ0KCBmcmVzbmVsMCApO1xyXG4gICAgICAgICAgICByZXR1cm4gKCB2ZWMzPGYzMj4oIDEuMCApICsgc3FydEYwICkgLyAoIHZlYzM8ZjMyPiggMS4wICkgLSBzcXJ0RjAgKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZm4gSW9yVG9GcmVzbmVsMCh0cmFuc21pdHRlZElvcjp2ZWMzPGYzMj4saW5jaWRlbnRJb3I6ZjMyICktPnZlYzM8ZjMyPiB7XHJcbiAgICAgICAgICAgIHJldHVybiBwb3cyVmVjdG9yKCAoIHRyYW5zbWl0dGVkSW9yIC0gdmVjMzxmMzI+KCBpbmNpZGVudElvciApICkgLyAoIHRyYW5zbWl0dGVkSW9yICsgdmVjMzxmMzI+KCBpbmNpZGVudElvciApICkgKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZm4gSW9yVG9GcmVzbmVsMCh0cmFuc21pdHRlZElvcjpmMzIsIGluY2lkZW50SW9yOmYzMiApLT5mMzIge1xyXG4gICAgICAgICAgICByZXR1cm4gcG93MlZlY3RvciggKCB0cmFuc21pdHRlZElvciAtIGluY2lkZW50SW9yICkgLyAoIHRyYW5zbWl0dGVkSW9yICsgaW5jaWRlbnRJb3IgKSk7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIGZuIGV2YWxTZW5zaXRpdml0eShPUEQ6ZjMyLHNoaWZ0OnZlYzM8ZjMyPiApLT52ZWMzPGYzMj4ge1xyXG4gICAgICAgICAgICBsZXQgcGhhc2U6ZjMyID0gMi4wICogUEkgKiBPUEQgKiAxLjBlLTk7XHJcbiAgICAgICAgICAgIGxldCB2YWw6dmVjMzxmMzI+ID0gdmVjMzxmMzI+KCA1LjQ4NTZlLTEzLCA0LjQyMDFlLTEzLCA1LjI0ODFlLTEzICk7XHJcbiAgICAgICAgICAgIGxldCBwb3M6dmVjMzxmMzI+ID0gdmVjMzxmMzI+KCAxLjY4MTBlKzA2LCAxLjc5NTNlKzA2LCAyLjIwODRlKzA2ICk7XHJcbiAgICAgICAgICAgIGxldCB2YXJ0OnZlYzM8ZjMyPiA9IHZlYzM8ZjMyPiggNC4zMjc4ZSswOSwgOS4zMDQ2ZSswOSwgNi42MTIxZSswOSApO1xyXG4gICAgICAgICAgICBsZXQgeHl6OnZlYzM8ZjMyPiA9IHZhbCAqIHNxcnQoIDIuMCAqIFBJICogdmFydCApICogY29zKCBwb3MgKiBwaGFzZSArIHNoaWZ0ICkgKiBleHAoIC0gcG93MiggcGhhc2UgKSAqIHZhcnQgKTtcclxuICAgICAgICAgICAgeHl6LnggKz0gOS43NDcwZS0xNCAqIHNxcnQoIDIuMCAqIFBJICogNC41MjgyZSswOSApICogY29zKCAyLjIzOTllKzA2ICogcGhhc2UgKyBzaGlmdFsgMCBdICkgKiBleHAoIC0gNC41MjgyZSswOSAqIHBvdzIoIHBoYXNlICkgKTtcclxuICAgICAgICAgICAgeHl6IC89IDEuMDY4NWUtNztcclxuICAgICAgICAgICAgbGV0IHJnYjp2ZWMzPGYzMj4gPSBYWVpfVE9fUkVDNzA5ICogeHl6O1xyXG4gICAgICAgICAgICByZXR1cm4gcmdiO1xyXG4gICAgICAgIH1cclxuICAgICAgICBmbiBldmFsSXJpZGVzY2VuY2Uob3V0c2lkZUlPUjpmMzIsIGV0YTI6ZjMyLGNvc1RoZXRhMTpmMzIsdGhpbkZpbG1UaGlja25lc3M6ZjMyLGJhc2VGMDp2ZWMzPGYzMj4gKS0+dmVjMzxmMzI+IHtcclxuICAgICAgICAgICAgdmFyIEk6dmVjMzxmMzI+O1xyXG4gICAgICAgICAgICBsZXQgaXJpZGVzY2VuY2VJT1I6ZjMyID0gbWl4KCBvdXRzaWRlSU9SLCBldGEyLCBzbW9vdGhzdGVwKCAwLjAsIDAuMDMsIHRoaW5GaWxtVGhpY2tuZXNzICkgKTtcclxuICAgICAgICAgICAgbGV0IHNpblRoZXRhMlNxOmYzMiA9IHBvdzIoIG91dHNpZGVJT1IgLyBpcmlkZXNjZW5jZUlPUiApICogKCAxLjAgLSBwb3cyKCBjb3NUaGV0YTEgKSApO1xyXG4gICAgICAgICAgICBsZXQgY29zVGhldGEyU3E6ZjMyID0gMS4wIC0gc2luVGhldGEyU3E7XHJcbiAgICAgICAgICAgIGlmICggY29zVGhldGEyU3EgPCAwLjAgKSB7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gdmVjMzxmMzI+KCAxLjAgKTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBsZXQgY29zVGhldGEyOmYzMiA9IHNxcnQoIGNvc1RoZXRhMlNxICk7XHJcbiAgICAgICAgICAgIGxldCBSMDpmMzIgPSBJb3JUb0ZyZXNuZWwwKCBpcmlkZXNjZW5jZUlPUiwgb3V0c2lkZUlPUiApO1xyXG4gICAgICAgICAgICBsZXQgUjEyOmYzMiA9IEZfU2NobGljayggUjAsIDEuMCwgY29zVGhldGExICk7XHJcbiAgICAgICAgICAgIGxldCBSMjE6ZjMyID0gUjEyO1xyXG4gICAgICAgICAgICBsZXQgVDEyMTpmMzIgPSAxLjAgLSBSMTI7XHJcbiAgICAgICAgICAgIGxldCBwaGkxMjpmMzIgPSAwLjA7XHJcbiAgICAgICAgICAgIGlmICggaXJpZGVzY2VuY2VJT1IgPCBvdXRzaWRlSU9SICkgcGhpMTIgPSBQSTtcclxuICAgICAgICAgICAgbGV0IHBoaTIxOmYzMiA9IFBJIC0gcGhpMTI7XHJcbiAgICAgICAgICAgIGxldCBiYXNlSU9SOnZlYzM8ZjMyPiA9IEZyZXNuZWwwVG9Jb3IoIGNsYW1wKCBiYXNlRjAsIDAuMCwgMC45OTk5ICkgKTtcclxuICAgICAgICAgICAgbGV0IFIxOnZlYzM8ZjMyPiA9IElvclRvRnJlc25lbDAoIGJhc2VJT1IsIGlyaWRlc2NlbmNlSU9SICk7XHJcbiAgICAgICAgICAgIGxldCBSMjM6dmVjMzxmMzI+ID0gRl9TY2hsaWNrKCBSMSwgMS4wLCBjb3NUaGV0YTIgKTtcclxuICAgICAgICAgICAgbGV0IHBoaTIzOnZlYzM8ZjMyPiA9IHZlYzM8ZjMyPiggMC4wICk7XHJcbiAgICAgICAgICAgIGlmICggYmFzZUlPUlsgMCBdIDwgaXJpZGVzY2VuY2VJT1IgKSBwaGkyM1sgMCBdID0gUEk7XHJcbiAgICAgICAgICAgIGlmICggYmFzZUlPUlsgMSBdIDwgaXJpZGVzY2VuY2VJT1IgKSBwaGkyM1sgMSBdID0gUEk7XHJcbiAgICAgICAgICAgIGlmICggYmFzZUlPUlsgMiBdIDwgaXJpZGVzY2VuY2VJT1IgKSBwaGkyM1sgMiBdID0gUEk7XHJcbiAgICAgICAgICAgIGxldCBPUEQ6ZjMyID0gMi4wICogaXJpZGVzY2VuY2VJT1IgKiB0aGluRmlsbVRoaWNrbmVzcyAqIGNvc1RoZXRhMjtcclxuICAgICAgICAgICAgbGV0IHBoaTp2ZWMzPGYzMj4gPSB2ZWMzPGYzMj4oIHBoaTIxICkgKyBwaGkyMztcclxuICAgICAgICAgICAgbGV0IFIxMjM6dmVjMzxmMzI+ID0gY2xhbXAoIFIxMiAqIFIyMywgMWUtNSwgMC45OTk5ICk7XHJcbiAgICAgICAgICAgIGxldCByMTIzOnZlYzM8ZjMyPiA9IHNxcnQoIFIxMjMgKTtcclxuICAgICAgICAgICAgbGV0IFJzOnZlYzM8ZjMyPiA9IHBvdzIoIFQxMjEgKSAqIFIyMyAvICggdmVjMzxmMzI+KCAxLjAgKSAtIFIxMjMgKTtcclxuICAgICAgICAgICAgbGV0IEMwOnZlYzM8ZjMyPiA9IFIxMiArIFJzO1xyXG4gICAgICAgICAgICBJID0gQzA7XHJcbiAgICAgICAgICAgIGxldCBDbTp2ZWMzPGYzMj4gPSBScyAtIFQxMjE7XHJcbiAgICAgICAgICAgIGZvciAoIGxldCBtIDogdTMyID0gMTttIDw9IDI7ICsrIG0gKSB7XHJcbiAgICAgICAgICAgICAgICBDbSAqPSByMTIzO1xyXG4gICAgICAgICAgICAgICAgU206dmVjMzxmMzI+ID0gMi4wICogZXZhbFNlbnNpdGl2aXR5KCBmMzIoIG0gKSAqIE9QRCwgZjMyKCBtICkgKiBwaGkgKTtcclxuICAgICAgICAgICAgICAgIEkgKz0gQ20gKiBTbTtcclxuICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICByZXR1cm4gbWF4KCBJLCB2ZWMzPGYzMj4oIDAuMCApICk7XHJcbiAgICAgICAgfVxyXG4gICAgI2VuZGlmXHJcbiAgICBjb25zdCBjbGVhcmNvYXRTcGVjdWxhcjp2ZWMzPGYzMj4gPSB2ZWMzPGYzMj4oIDAuMCApO1xyXG4gICAgY29uc3Qgc2hlZW5TcGVjdWxhcjp2ZWMzPGYzMj4gPSB2ZWMzPGYzMj4oIDAuMCApO1xyXG5cclxuICAgIGZuIElCTFNoZWVuQlJERiggbm9ybWFsOnZlYzM8ZjMyPiwgdmlld0Rpcjp2ZWMzPGYzMj4sIHJvdWdobmVzczpmMzIgKS0+ZjMyIHtcclxuICAgICAgICBsZXQgZG90TlY6ZjMyID0gc2F0dXJhdGUoIGRvdCggbm9ybWFsLCB2aWV3RGlyICkgKTtcclxuICAgICAgICBsZXQgcjI6ZjMyID0gcm91Z2huZXNzICogcm91Z2huZXNzO1xyXG4gICAgICAgIGxldCBhOmYzMiA9c2VsZWN0KC04LjQ4ICogcjIgKyAxNC4zICogcm91Z2huZXNzIC0gOS45NSwtMzM5LjIgKiByMiArIDE2MS40ICogcm91Z2huZXNzIC0gMjUuOSxyb3VnaG5lc3MgPCAwLjI1KTtcclxuICAgICAgICAvL2xldCBhOmYzMiA9IHJvdWdobmVzcyA8IDAuMjUgPyAtMzM5LjIgKiByMiArIDE2MS40ICogcm91Z2huZXNzIC0gMjUuOSA6IC04LjQ4ICogcjIgKyAxNC4zICogcm91Z2huZXNzIC0gOS45NTtcclxuICAgICAgICBsZXQgYjpmMzI9c2VsZWN0KDEuOTcgKiByMiAtIDMuMjcgKiByb3VnaG5lc3MgKyAwLjcyLDQ0LjAgKiByMiAtIDIzLjcgKiByb3VnaG5lc3MgKyAzLjI2LCByb3VnaG5lc3MgPCAwLjI1KTtcclxuICAgICAgICAvL2xldCBiOmYzMiA9IHJvdWdobmVzcyA8IDAuMjUgPyA0NC4wICogcjIgLSAyMy43ICogcm91Z2huZXNzICsgMy4yNiA6IDEuOTcgKiByMiAtIDMuMjcgKiByb3VnaG5lc3MgKyAwLjcyO1xyXG4gICAgICAgIC8vbGV0IERHOmYzMiA9IGV4cCggYSAqIGRvdE5WICsgYiApICsgKCByb3VnaG5lc3MgPCAwLjI1ID8gMC4wIDogMC4xICogKCByb3VnaG5lc3MgLSAwLjI1ICkgKTtcclxuICAgICAgICBsZXQgREc6ZjMyID0gZXhwKCBhICogZG90TlYgKyBiICkgKyBzZWxlY3QoMC4xICogKCByb3VnaG5lc3MgLSAwLjI1ICksMC4wLHJvdWdobmVzcyA8IDAuMjUpO1xyXG4gICAgICAgIHJldHVybiBzYXR1cmF0ZSggREcgKiBSRUNJUFJPQ0FMX1BJICk7XHJcbiAgICB9XHJcbiAgICBmbiBERkdBcHByb3goIHNwZWN1bGFyQ29sb3I6dmVjMzxmMzI+LCByb3VnaG5lc3M6ZjMyLGRvdE5WOmYzMiApLT52ZWMzPGYzMj4ge1xyXG4gICAgICAgIGNvbnN0IGMwOnZlYzQ8ZjMyPiA9IHZlYzQ8ZjMyPiggLSAxLCAtIDAuMDI3NSwgLSAwLjU3MiwgMC4wMjIgKTtcclxuICAgICAgICBsZXQgYzE6dmVjNDxmMzI+ID0gdmVjNDxmMzI+KCAxLCAwLjA0MjUsIDEuMDQsIC0gMC4wNCApO1xyXG4gICAgICAgIGxldCByOnZlYzQ8ZjMyPiA9IHJvdWdobmVzcyAqIGMwICsgYzE7XHJcbiAgICAgICAgbGV0IGEwMDQ6ZjMyID0gbWluKCByLnggKiByLngsIGV4cDIoIC0gOS4yOCAqIGRvdE5WICkgKSAqIHIueCArIHIueTtcclxuICAgICAgICBsZXQgZmFiOnZlYzI8ZjMyPiA9IHZlYzI8ZjMyPiggLSAxLjA0LCAxLjA0ICkgKiBhMDA0ICsgci56dztcclxuICAgICAgICByZXR1cm4gc3BlY3VsYXJDb2xvciAqIGZhYi54ICsgZmFiLnk7XHJcbiAgICB9XHJcbiAgICBmbiBFbnZpcm9ubWVudEJSREYoIG5vcm1hbDp2ZWMzPGYzMj4sdmlld0Rpcjp2ZWMzPGYzMj4sc3BlY3VsYXJDb2xvcjp2ZWMzPGYzMj4sIHNwZWN1bGFyRjkwOmYzMixyb3VnaG5lc3M6ZjMyICktPnZlYzM8ZjMyPiB7XHJcbiAgICAgICAgbGV0IGZhYjp2ZWMyPGYzMj4gPSBERkdBcHByb3goIG5vcm1hbCwgdmlld0Rpciwgcm91Z2huZXNzICk7XHJcbiAgICAgICAgcmV0dXJuIHNwZWN1bGFyQ29sb3IgKiBmYWIueCArIHNwZWN1bGFyRjkwICogZmFiLnk7XHJcbiAgICB9XHJcblxyXG5cclxuICAgIGZuIGNvbXB1dGVTcGVjdWxhck9jY2x1c2lvbiggZG90TlY6ZjMyLCBhbWJpZW50T2NjbHVzaW9uOmYzMiwgcm91Z2huZXNzOmYzMiApLT5mMzIge1xyXG4gICAgICAgIHJldHVybiBzYXR1cmF0ZSggcG93KCBkb3ROViArIGFtYmllbnRPY2NsdXNpb24sIGV4cDIoIC0gMTYuMCAqIHJvdWdobmVzcyAtIDEuMCApICkgLSAxLjAgKyBhbWJpZW50T2NjbHVzaW9uICk7XHJcbiAgICB9XHJcbiAgICAjaWYgJHtkZWZpbmVzLlVTRV9UUkFOU01JU1NJT059XHJcblxyXG4gICAgZm4gZ2V0Vm9sdW1lVHJhbnNtaXNzaW9uUmF5KCBuOnZlYzM8ZjMyPiwgdjp2ZWMzPGYzMj4sIHRoaWNrbmVzczpmMzIsIGlvcjpmMzIsIG1vZGVsTWF0cml4Om1hdDR4NDpmMzIpLT52ZWMzPGYzMj4ge1xyXG4gICAgICAgIHZhciByZWZyYWN0aW9uVmVjdG9yOnZlYzM8ZjMyPiA9IHJlZnJhY3QoIC0gdiwgbm9ybWFsaXplKCBuICksIDEuMCAvIGlvciApO1xyXG4gICAgICAgIHZhciBtb2RlbFNjYWxlOnZlYzM8ZjMyPjtcclxuICAgICAgICBtb2RlbFNjYWxlLnggPSBsZW5ndGgoIHZlYzM8ZjMyPiggbW9kZWxNYXRyaXhbMF0ueHl6ICkgKTtcclxuICAgICAgICBtb2RlbFNjYWxlLnkgPSBsZW5ndGgoIHZlYzM8ZjMyPiggbW9kZWxNYXRyaXhbMV0ueHl6ICkgKTtcclxuICAgICAgICBtb2RlbFNjYWxlLnogPSBsZW5ndGgoIHZlYzM8ZjMyPiggbW9kZWxNYXRyaXhbMl0ueHl6ICkgKTtcclxuICAgICAgICByZXR1cm4gbm9ybWFsaXplKCByZWZyYWN0aW9uVmVjdG9yICkgKiB0aGlja25lc3MgKiBtb2RlbFNjYWxlO1xyXG4gICAgfVxyXG4gICAgZm4gYXBwbHlJb3JUb1JvdWdobmVzcyhyb3VnaG5lc3M6ZjMyLCBpb3I6ZjMyICktPmYzMiB7XHJcbiAgICAgICAgcmV0dXJuIHJvdWdobmVzcyAqIGNsYW1wKCBpb3IgKiAyLjAgLSAyLjAsIDAuMCwgMS4wICk7XHJcbiAgICB9XHJcbiAgICBmbiBnZXRUcmFuc21pc3Npb25TYW1wbGUoIGZyYWdDb29yZDp2ZWMyPGYzMj4sIHJvdWdobmVzczpmMzIsaW9yOmYzMiApLT52ZWM0PGYzMj4ge1xyXG4gICAgICAgIGxldCBmcmFtZWJ1ZmZlckxvZDpmMzIgPSBsb2cyKCBtYXRlcmlhbFVuaWZvcm0udHJhbnNtaXNzaW9uU2FtcGxlclNpemUueCApICogYXBwbHlJb3JUb1JvdWdobmVzcyggcm91Z2huZXNzLCBpb3IgKTtcclxuICAgICAgICByZXR1cm4gdGV4dHVyZVNhbXBsZUxldmVsKHRyYW5zbWlzc2lvblNhbXBsZXJUZXh0dXJlLGJhc2VTYW1wbGVyLGZyYWdDb29yZC54eSwgZnJhbWVidWZmZXJMb2QpO1xyXG5cclxuICAgIH1cclxuICAgIGZuIGFwcGx5Vm9sdW1lQXR0ZW51YXRpb24oIHJhZGlhbmNlOnZlYzM8dmVjMz4sIHRyYW5zbWlzc2lvbkRpc3RhbmNlOmYzMixhdHRlbnVhdGlvbkNvbG9yOnZlYzM8ZjMyPixhdHRlbnVhdGlvbkRpc3RhbmNlOmYzMiApLT52ZWMzPGYzMj4ge1xyXG4gICAgICAgIGlmICggaXNpbmYoIGF0dGVudWF0aW9uRGlzdGFuY2UgKSApIHtcclxuICAgICAgICAgICAgcmV0dXJuIHJhZGlhbmNlO1xyXG4gICAgICAgIH1cclxuICAgICAgICBlbHNlIHtcclxuICAgICAgICAgICAgbGV0IGF0dGVudWF0aW9uQ29lZmZpY2llbnQ6dmVjMzxmMzI+ID0gLWxvZyggYXR0ZW51YXRpb25Db2xvciApIC8gYXR0ZW51YXRpb25EaXN0YW5jZTtcclxuICAgICAgICAgICAgbGV0IHRyYW5zbWl0dGFuY2U6dmVjMzxmMzI+ID0gZXhwKCAtIGF0dGVudWF0aW9uQ29lZmZpY2llbnQgKiB0cmFuc21pc3Npb25EaXN0YW5jZSApO1xyXG4gICAgICAgICAgICByZXR1cm4gdHJhbnNtaXR0YW5jZSAqIHJhZGlhbmNlO1xyXG4gICAgICAgIH1cclxuICAgIFxyXG4gICAgfVxyXG4gICAgZm4gZ2V0SUJMVm9sdW1lUmVmcmFjdGlvbiggbjp2ZWMzPGYzMj4sdjp2ZWMzPGYzMj4sIHJvdWdobmVzczpmMzIsIGRpZmZ1c2VDb2xvcjp2ZWMzPGYzMj4sc3BlY3VsYXJDb2xvcjp2ZWMzPGYzMj4sIHNwZWN1bGFyRjkwOmYzMixwb3NpdGlvbjp2ZWMzPGYzMj4sIG1vZGVsTWF0cml4Om1hdDR4NDxmMzI+LCB2aWV3TWF0cml4Om1hdDR4NDxmMzI+LHByb2pNYXRyaXg6bWF0NHg0PGYzMj4saW9yOmYzMiwgdGhpY2tuZXNzOmYzMixhdHRlbnVhdGlvbkNvbG9yOnZlYzM8ZjMyPixhdHRlbnVhdGlvbkRpc3RhbmNlOmYzMiApLT52ZWM0PGYzMj4ge1xyXG4gICAgICAgIGxldCB0cmFuc21pc3Npb25SYXk6dmVjMzxmMzI+ID0gZ2V0Vm9sdW1lVHJhbnNtaXNzaW9uUmF5KCBuLCB2LCB0aGlja25lc3MsIGlvciwgbW9kZWxNYXRyaXggKTtcclxuICAgICAgICBsZXQgcmVmcmFjdGVkUmF5RXhpdDp2ZWMzPGYzMj4gPSBwb3NpdGlvbiArIHRyYW5zbWlzc2lvblJheTtcclxuICAgICAgICBsZXQgbmRjUG9zOnZlYzQ8ZjMyPiA9IHByb2pNYXRyaXggKiB2aWV3TWF0cml4ICogdmVjNCggcmVmcmFjdGVkUmF5RXhpdCwgMS4wICk7XHJcbiAgICAgICAgbGV0IHJlZnJhY3Rpb25Db29yZHM6dmVjMjxmMzI+ID0gbmRjUG9zLnh5IC8gbmRjUG9zLnc7XHJcbiAgICAgICAgcmVmcmFjdGlvbkNvb3JkcyArPSAxLjA7XHJcbiAgICAgICAgcmVmcmFjdGlvbkNvb3JkcyAvPSAyLjA7XHJcbiAgICAgICAgbGV0IHRyYW5zbWl0dGVkTGlnaHQ6dmVjNDxmMzI+ID0gZ2V0VHJhbnNtaXNzaW9uU2FtcGxlKCByZWZyYWN0aW9uQ29vcmRzLCByb3VnaG5lc3MsIGlvciApO1xyXG4gICAgICAgIGxldCBhdHRlbnVhdGVkQ29sb3I6dmVjMzxmMzI+ID0gYXBwbHlWb2x1bWVBdHRlbnVhdGlvbiggdHJhbnNtaXR0ZWRMaWdodC5yZ2IsIGxlbmd0aCggdHJhbnNtaXNzaW9uUmF5ICksIGF0dGVudWF0aW9uQ29sb3IsIGF0dGVudWF0aW9uRGlzdGFuY2UgKTtcclxuICAgICAgICBsZXQgRjp2ZWMzPGYzMj4gPSBFbnZpcm9ubWVudEJSREYoIG4sIHYsIHNwZWN1bGFyQ29sb3IsIHNwZWN1bGFyRjkwLCByb3VnaG5lc3MgKTtcclxuICAgICAgICByZXR1cm4gdmVjNDxmMzI+KCAoIDEuMCAtIEYgKSAqIGF0dGVudWF0ZWRDb2xvciAqIGRpZmZ1c2VDb2xvciwgdHJhbnNtaXR0ZWRMaWdodC5hICk7XHJcbiAgICB9XHJcbiAgICAjZW5kaWZcclxuXHJcbiAgICAjaWYgJHtkZWZpbmVzLlVTRV9CVU1QVEVYVFVSRX1cclxuICAgICAgICBmbiBkSGR4eV9md2QoKS0+dmVjMjxmMzI+IHtcclxuICAgICAgICAgICAgbGV0IGRTVGR4OnZlYzI8ZjMyPiA9IGRwZHgoIHZVdiApO1xyXG4gICAgICAgICAgICBsZXQgZFNUZHk6dmVjMjxmMzI+ID0gZHBkeSggdlV2ICk7XHJcblxyXG4gICAgICAgICAgICBsZXQgSGxsOmYzMiA9IG1hdGVyaWFsVW5pZm9ybS5idW1wU2NhbGUgKiB0ZXh0dXJlU2FtcGxlKGJ1bXBUZXh0dXJlLCBiYXNlU2FtcGxlciwgdlV2KS54O1xyXG4gICAgICAgICAgICBsZXQgZEJ4OmYzMiA9IG1hdGVyaWFsVW5pZm9ybS5idW1wU2NhbGUgKiB0ZXh0dXJlU2FtcGxlKGJ1bXBUZXh0dXJlLCBiYXNlU2FtcGxlciwgdlV2ICsgZFNUZHgpLnggLSBIbGw7XHJcbiAgICAgICAgICAgIGxldCBkQnk6ZjMyID0gbWF0ZXJpYWxVbmlmb3JtLmJ1bXBTY2FsZSAqIHRleHR1cmVTYW1wbGUoYnVtcFRleHR1cmUsIGJhc2VTYW1wbGVyLCB2VXYgKyBkU1RkeSkueCAtIEhsbDtcclxuICAgICAgICAgICAgcmV0dXJuIHZlYzI8ZjMyPiggZEJ4LCBkQnkgKTtcclxuICAgICAgICB9XHJcbiAgICAgICAgZm4gcGVydHVyYk5vcm1hbEFyYiggc3VyZl9wb3M6dmVjMzxmMzI+LCBzdXJmX25vcm06dmVjMzxmMzI+LCBkSGR4eTp2ZWMyPGYzMj4sIGZhY2VEaXJlY3Rpb246ZjMyICktPnZlYzM8ZjMyPiB7XHJcbiAgICAgICAgICAgIGxldCB2U2lnbWFYOnZlYzM8ZjMyPiA9IGRwZHgoIHN1cmZfcG9zLnh5eiApO1xyXG4gICAgICAgICAgICBsZXQgdlNpZ21hWTp2ZWMzPGYzMj4gPSBkcGR5KCBzdXJmX3Bvcy54eXogKTtcclxuICAgICAgICAgICAgbGV0IHZOOnZlYzM8ZjMyPiA9IHN1cmZfbm9ybTtcclxuICAgICAgICAgICAgbGV0IFIxOnZlYzM8ZjMyPiA9IGNyb3NzKCB2U2lnbWFZLCB2TiApO1xyXG4gICAgICAgICAgICBsZXQgUjI6dmVjMzxmMzI+ID0gY3Jvc3MoIHZOLCB2U2lnbWFYICk7XHJcbiAgICAgICAgICAgIGxldCBmRGV0OmYzMiA9IGRvdCggdlNpZ21hWCwgUjEgKSAqIGZhY2VEaXJlY3Rpb247XHJcbiAgICAgICAgICAgIGxldCB2R3JhZDp2ZWMzPGYzMj4gPSBzaWduKCBmRGV0ICkgKiAoIGRIZHh5LnggKiBSMSArIGRIZHh5LnkgKiBSMiApO1xyXG4gICAgICAgICAgICByZXR1cm4gbm9ybWFsaXplKCBhYnMoIGZEZXQgKSAqIHN1cmZfbm9ybSAtIHZHcmFkICk7XHJcbiAgICAgICAgfVxyXG4gICAgI2VuZGlmXHJcblxyXG4gICAgLy8hIGRlZmluZWQgKCBVU0VfVEFOR0VOVCApICYmICggZGVmaW5lZCAoIFRBTkdFTlRTUEFDRV9OT1JNQUxURVhUVVJFICkgfHwgZGVmaW5lZCAoIFVTRV9DTEVBUkNPQVRfTk9STUFMVEVYVFVSRSApIClcclxuICAgICNpZiAkeyghZGVmaW5lcy5VU0VfVEFOR0VOVCAmJiBkZWZpbmVzLlRBTkdFTlRTUEFDRV9OT1JNQUxURVhUVVJFKSB8fCBkZWZpbmVzLlVTRV9DTEVBUkNPQVRfTk9STUFMVEVYVFVSRX1cclxuICAgIGZuIHBlcnR1cmJOb3JtYWwyQXJiKCBleWVfcG9zOnZlYzM8ZjMyPiwgc3VyZl9ub3JtOnZlYzM8ZjMyPiwgdGV4dHVyZU46dmVjMzxmMzI+LCBmYWNlRGlyZWN0aW9uOmYzMiApLT52ZWMzPGYzMj4ge1xyXG4gICAgICAgIGxldCBxMDp2ZWMzPGYzMj4gPSBkcGR4KCBleWVfcG9zLnh5eiApO1xyXG4gICAgICAgIGxldCBxMTp2ZWMzPGYzMj4gPSBkcGR5KCBleWVfcG9zLnh5eiApO1xyXG4gICAgICAgIGxldCBzdDA6dmVjMjxmMzI+ID0gZHBkeCggdlV2LnN0ICk7XHJcbiAgICAgICAgbGV0IHN0MTp2ZWMyPGYzMj4gPSBkcGR5KCB2VXYuc3QgKTtcclxuICAgICAgICBsZXQgTjp2ZWMzPGYzMj4gPSBzdXJmX25vcm07XHJcbiAgICAgICAgbGV0IHExcGVycDp2ZWMzPGYzMj4gPSBjcm9zcyggcTEsIE4gKTtcclxuICAgICAgICBsZXQgcTBwZXJwOnZlYzM8ZjMyPiA9IGNyb3NzKCBOLCBxMCApO1xyXG4gICAgICAgIGxldCBUOnZlYzM8ZjMyPiA9IHExcGVycCAqIHN0MC54ICsgcTBwZXJwICogc3QxLng7XHJcbiAgICAgICAgbGV0IEI6dmVjMzxmMzI+ID0gcTFwZXJwICogc3QwLnkgKyBxMHBlcnAgKiBzdDEueTtcclxuICAgICAgICBsZXQgZGV0OmYzMiA9IG1heCggZG90KCBULCBUICksIGRvdCggQiwgQiApICk7XHJcbiAgICAgICAgbGV0IHNjYWxlOmYzMiA9ICggZGV0ID09IDAuMCApID8gMC4wIDogZmFjZURpcmVjdGlvbiAqIGludmVyc2VzcXJ0KCBkZXQgKTtcclxuICAgICAgICByZXR1cm4gbm9ybWFsaXplKCBUICogKCB0ZXh0dXJlTi54ICogc2NhbGUgKSArIEIgKiAoIHRleHR1cmVOLnkgKiBzY2FsZSApICsgTiAqIHRleHR1cmVOLnogKTtcclxuICAgIH1cclxuICAgICNlbmRpZlxyXG4gICAgc3RydWN0IE11bHRpQW5kU2luZ2xlU2NhdHRlcntcclxuICAgICAgICBtdWx0aVNjYXR0ZXI6dmVjMzxmMzI+LFxyXG4gICAgICAgIHNpbmdsZVNjYXR0ZXI6dmVjMzxmMzI+XHJcbiAgICB9XHJcbiAgICNpZiAke2RlZmluZXMuVVNFX0lSSURFU0NFTkNFfVxyXG4gICAvLy8vLy8vL2lub3V0IHZlYzMgc2luZ2xlU2NhdHRlciwgaW5vdXQgdmVjMyBtdWx0aVNjYXR0ZXJcclxuICAgICAgIGZuIGNvbXB1dGVNdWx0aXNjYXR0ZXJpbmdJcmlkZXNjZW5jZSggbm9ybWFsOnZlYzM8ZjMyPiwgdmlld0Rpcjp2ZWMzPGYzMj4sIHNwZWN1bGFyQ29sb3I6dmVjMzxmMzI+LCBzcGVjdWxhckY5MDpmMzIsIGlyaWRlc2NlbmNlOmYzMixpcmlkZXNjZW5jZUYwOnZlYzM8ZjMyPiwgcm91Z2huZXNzOmYzMiApLT5NdWx0aUFuZFNpbmdsZVNjYXR0ZXIge1xyXG4gICAjZWxzZVxyXG4gICAvLy8vLy8vL2lub3V0IHZlYzMgc2luZ2xlU2NhdHRlciwgaW5vdXQgdmVjMyBtdWx0aVNjYXR0ZXJcclxuICAgICAgIGZuIGNvbXB1dGVNdWx0aXNjYXR0ZXJpbmcoIG5vcm1hbDp2ZWMzPGYzMj4sdmlld0Rpcjp2ZWMzPGYzMj4sIHNwZWN1bGFyQ29sb3I6dmVjMzxmMzI+LCBzcGVjdWxhckY5MDpmMzIsIHJvdWdobmVzczpmMzIpLT5NdWx0aUFuZFNpbmdsZVNjYXR0ZXIge1xyXG4gICAjZW5kaWZcclxuICAgbGV0IGZhYjp2ZWMyPGYzMj4gPSBERkdBcHByb3goIG5vcm1hbCwgdmlld0Rpciwgcm91Z2huZXNzICk7XHJcblxyXG4gICB2YXIgbXVsdGlBbmRTaW5nbGVTY2F0dGVyOk11bHRpQW5kU2luZ2xlU2NhdHRlcjtcclxuXHJcbiAgICNpZiAke2RlZmluZXMuVVNFX0lSSURFU0NFTkNFfVxyXG4gICAgICAgbGV0IEZyOnZlYzM8ZjMyPiA9IG1peCggc3BlY3VsYXJDb2xvciwgaXJpZGVzY2VuY2VGMCwgaXJpZGVzY2VuY2UgKTtcclxuICAgI2Vsc2VcclxuICAgICAgIGxldCBGcjp2ZWMzPGYzMj4gPSBzcGVjdWxhckNvbG9yO1xyXG4gICAjZW5kaWZcclxuICAgICAgIGxldCBGc3NFc3M6dmVjMzxmMzI+ID0gRnIgKiBmYWIueCArIHNwZWN1bGFyRjkwICogZmFiLnk7XHJcbiAgICAgICBsZXQgRXNzOmYzMiA9IGZhYi54ICsgZmFiLnk7XHJcbiAgICAgICBsZXQgRW1zOmYzMiA9IDEuMCAtIEVzcztcclxuICAgICAgIGxldCBGYXZnOnZlYzM8ZjMyPiA9IEZyICsgKCAxLjAgLSBGciApICogMC4wNDc2MTk7XHJcbiAgICAgICBsZXQgRm1zOnZlYzM8ZjMyPiA9IEZzc0VzcyAqIEZhdmcgLyAoIDEuMCAtIEVtcyAqIEZhdmcgKTtcclxuICAgIC8vICAgIHNpbmdsZVNjYXR0ZXIgKz0gRnNzRXNzO1xyXG4gICAgLy8gICAgbXVsdGlTY2F0dGVyICs9IEZtcyAqIEVtcztcclxuICAgICAgIG11bHRpQW5kU2luZ2xlU2NhdHRlci5tdWx0aVNjYXR0ZXI9Rm1zICogRW1zO1xyXG4gICAgICAgbXVsdGlBbmRTaW5nbGVTY2F0dGVyLnNpbmdsZVNjYXR0ZXI9RnNzRXNzO1xyXG4gICAgICAgcmV0dXJuIG11bHRpQW5kU2luZ2xlU2NhdHRlcjtcclxuICAgfVxyXG4gICAvL+ebtOaOpeWFieeFp1xyXG4gICBmbiBSRV9EaXJlY3RfUGh5c2ljYWwoIGRpcmVjdExpZ2h0OkluY2lkZW50TGlnaHQsIGdlb21ldHJ5Okdlb21ldHJpY0NvbnRleHQsICBtYXRlcmlhbDpQaHlzaWNhbE1hdGVyaWFsKS0+UmVmbGVjdGVkTGlnaHQge1xyXG4gICAgICAgdmFyIHJlZmxlY3RlZExpZ2h0OlJlZmxlY3RlZExpZ2h0O1xyXG4gICAgICAgbGV0IGRvdE5MOmYzMiA9IHNhdHVyYXRlKGRvdCggZ2VvbWV0cnkubm9ybWFsLCBkaXJlY3RMaWdodC5kaXJlY3Rpb24pKTtcclxuICAgICAgIGxldCBpcnJhZGlhbmNlOnZlYzM8ZjMyPiA9IGRvdE5MICogZGlyZWN0TGlnaHQuY29sb3I7XHJcbiAgICAgICAjaWYgJHtkZWZpbmVzLlVTRV9DTEVBUkNPQVR9XHJcbiAgICAgICAgICAgbGV0IGRvdE5MY2M6ZjMyID0gc2F0dXJhdGUoIGRvdCggZ2VvbWV0cnkuY2xlYXJjb2F0Tm9ybWFsLCBkaXJlY3RMaWdodC5kaXJlY3Rpb24gKSApO1xyXG4gICAgICAgICAgIGxldCBjY0lycmFkaWFuY2U6dmVjMzxmMzI+ID0gZG90TkxjYyAqIGRpcmVjdExpZ2h0LmNvbG9yO1xyXG4gICAgICAgICAgIGNsZWFyY29hdFNwZWN1bGFyICs9IGNjSXJyYWRpYW5jZSAqIEJSREZfR0dYKCBkaXJlY3RMaWdodC5kaXJlY3Rpb24sIGdlb21ldHJ5LnZpZXdEaXIsIGdlb21ldHJ5LmNsZWFyY29hdE5vcm1hbCwgbWF0ZXJpYWwuY2xlYXJjb2F0RjAsIG1hdGVyaWFsLmNsZWFyY29hdEY5MCwgbWF0ZXJpYWwuY2xlYXJjb2F0Um91Z2huZXNzICk7XHJcbiAgICAgICAjZW5kaWZcclxuXHJcbiAgICAgICAjaWYgJHtkZWZpbmVzLlVTRV9TSEVFTn1cclxuICAgICAgICAgICBzaGVlblNwZWN1bGFyICs9IGlycmFkaWFuY2UgKiBCUkRGX1NoZWVuKCBkaXJlY3RMaWdodC5kaXJlY3Rpb24sIGdlb21ldHJ5LnZpZXdEaXIsIGdlb21ldHJ5Lm5vcm1hbCwgbWF0ZXJpYWwuc2hlZW5Db2xvciwgbWF0ZXJpYWwuc2hlZW5Sb3VnaG5lc3MgKTtcclxuICAgICAgICNlbmRpZlxyXG5cclxuICAgICAgICNpZiAke2RlZmluZXMuVVNFX0lSSURFU0NFTkNFfVxyXG4gICAgICAgICAgIHJlZmxlY3RlZExpZ2h0LmRpcmVjdFNwZWN1bGFyID0gaXJyYWRpYW5jZSAqIEJSREZfR0dYX0lyaWRlc2NlbmNlKCBkaXJlY3RMaWdodC5kaXJlY3Rpb24sIGdlb21ldHJ5LnZpZXdEaXIsIGdlb21ldHJ5Lm5vcm1hbCwgbWF0ZXJpYWwuc3BlY3VsYXJDb2xvciwgbWF0ZXJpYWwuc3BlY3VsYXJGOTAsIG1hdGVyaWFsLmlyaWRlc2NlbmNlLCBtYXRlcmlhbC5pcmlkZXNjZW5jZUZyZXNuZWwsIG1hdGVyaWFsLnJvdWdobmVzcyApO1xyXG4gICAgICAgI2Vsc2VcclxuICAgICAgICAgICByZWZsZWN0ZWRMaWdodC5kaXJlY3RTcGVjdWxhciA9IGlycmFkaWFuY2UgKiBCUkRGX0dHWCggZGlyZWN0TGlnaHQuZGlyZWN0aW9uLCBnZW9tZXRyeS52aWV3RGlyLCBnZW9tZXRyeS5ub3JtYWwsIG1hdGVyaWFsLnNwZWN1bGFyQ29sb3IsIG1hdGVyaWFsLnNwZWN1bGFyRjkwLCBtYXRlcmlhbC5yb3VnaG5lc3MgKTtcclxuICAgICAgICNlbmRpZlxyXG4gICAgICAgcmVmbGVjdGVkTGlnaHQuZGlyZWN0RGlmZnVzZSA9IGlycmFkaWFuY2UgKiBCUkRGX0xhbWJlcnQoIG1hdGVyaWFsLmRpZmZ1c2VDb2xvciApO1xyXG4gICAgICAgcmV0dXJuIHJlZmxlY3RlZExpZ2h0O1xyXG4gICB9XHJcbiAgIC8v6Ze05o6l5YWJ54WnXHJcbiAgIGZuIFJFX0luZGlyZWN0RGlmZnVzZV9QaHlzaWNhbCggaXJyYWRpYW5jZTp2ZWMzPGYzMj4sIGdlb21ldHJ5Okdlb21ldHJpY0NvbnRleHQsIG1hdGVyaWFsOlBoeXNpY2FsTWF0ZXJpYWwgKS0+UmVmbGVjdGVkTGlnaHQge1xyXG4gICAgICAgdmFyIHJlZmxlY3RlZExpZ2h0OlJlZmxlY3RlZExpZ2h0O1xyXG4gICAgICAgcmVmbGVjdGVkTGlnaHQuaW5kaXJlY3REaWZmdXNlID0gaXJyYWRpYW5jZSAqIEJSREZfTGFtYmVydCggbWF0ZXJpYWwuZGlmZnVzZUNvbG9yICk7XHJcbiAgICAgICByZXR1cm4gcmVmbGVjdGVkTGlnaHQ7XHJcbiAgIH1cclxuICAgLy/pl7TmjqXpq5jlhYlcclxuICAgZm4gUkVfSW5kaXJlY3RTcGVjdWxhcl9QaHlzaWNhbCggcmFkaWFuY2U6dmVjMzxmMzI+LCBpcnJhZGlhbmNlOnZlYzM8ZjMyPiwgY2xlYXJjb2F0UmFkaWFuY2U6dmVjMzxmMzI+LCBnZW9tZXRyeTpHZW9tZXRyaWNDb250ZXh0LCBtYXRlcmlhbDpQaHlzaWNhbE1hdGVyaWFsKS0+UmVmbGVjdGVkTGlnaHQge1xyXG4gICAgICAgdmFyIHJlZmxlY3RlZExpZ2h0OlJlZmxlY3RlZExpZ2h0O1xyXG4gICAgICAgI2lmICR7ZGVmaW5lcy5VU0VfQ0xFQVJDT0FUfVxyXG4gICAgICAgICAgIGNsZWFyY29hdFNwZWN1bGFyICs9IGNsZWFyY29hdFJhZGlhbmNlICogRW52aXJvbm1lbnRCUkRGKCBnZW9tZXRyeS5jbGVhcmNvYXROb3JtYWwsIGdlb21ldHJ5LnZpZXdEaXIsIG1hdGVyaWFsLmNsZWFyY29hdEYwLCBtYXRlcmlhbC5jbGVhcmNvYXRGOTAsIG1hdGVyaWFsLmNsZWFyY29hdFJvdWdobmVzcyApO1xyXG4gICAgICAgI2VuZGlmXHJcbiAgICAgICAjaWYgJHtkZWZpbmVzLlVTRV9TSEVFTn1cclxuICAgICAgICAgICBzaGVlblNwZWN1bGFyICs9IGlycmFkaWFuY2UgKiBtYXRlcmlhbC5zaGVlbkNvbG9yICogSUJMU2hlZW5CUkRGKCBnZW9tZXRyeS5ub3JtYWwsIGdlb21ldHJ5LnZpZXdEaXIsIG1hdGVyaWFsLnNoZWVuUm91Z2huZXNzICk7XHJcbiAgICAgICAjZW5kaWZcclxuICAgICAgIHZhciBzaW5nbGVTY2F0dGVyaW5nOnZlYzM8ZjMyPjtcclxuICAgICAgIHZhciBtdWx0aVNjYXR0ZXJpbmc6dmVjMzxmMzI+O1xyXG4gICAgICAgbGV0IGNvc2luZVdlaWdodGVkSXJyYWRpYW5jZTp2ZWMzPGYzMj4gPSBpcnJhZGlhbmNlICogUkVDSVBST0NBTF9QSTtcclxuICAgICAgIHZhciB0ZW1wTXVsdGlBbmRTaW5nbGVTY2F0dGVyOk11bHRpQW5kU2luZ2xlU2NhdHRlcjtcclxuICAgICAgICNpZiAke2RlZmluZXMuVVNFX0lSSURFU0NFTkNFfVxyXG4gICAgICAgICAgICAgdGVtcE11bHRpQW5kU2luZ2xlU2NhdHRlcj1jb21wdXRlTXVsdGlzY2F0dGVyaW5nSXJpZGVzY2VuY2UoIGdlb21ldHJ5Lm5vcm1hbCwgZ2VvbWV0cnkudmlld0RpciwgbWF0ZXJpYWwuc3BlY3VsYXJDb2xvciwgbWF0ZXJpYWwuc3BlY3VsYXJGOTAsIG1hdGVyaWFsLmlyaWRlc2NlbmNlLCBtYXRlcmlhbC5pcmlkZXNjZW5jZUZyZXNuZWwsIG1hdGVyaWFsLnJvdWdobmVzcyApO1xyXG4gICAgICAgI2Vsc2VcclxuICAgICAgICAgICAgdGVtcE11bHRpQW5kU2luZ2xlU2NhdHRlcj0gY29tcHV0ZU11bHRpc2NhdHRlcmluZyggZ2VvbWV0cnkubm9ybWFsLCBnZW9tZXRyeS52aWV3RGlyLCBtYXRlcmlhbC5zcGVjdWxhckNvbG9yLCBtYXRlcmlhbC5zcGVjdWxhckY5MCwgbWF0ZXJpYWwucm91Z2huZXNzICk7XHJcbiAgICAgICAjZW5kaWZcclxuICAgICAgIHNpbmdsZVNjYXR0ZXJpbmc9dGVtcE11bHRpQW5kU2luZ2xlU2NhdHRlci5zaW5nbGVTY2F0dGVyOyBcclxuICAgICAgIG11bHRpU2NhdHRlcmluZz10ZW1wTXVsdGlBbmRTaW5nbGVTY2F0dGVyLm11bHRpU2NhdHRlcjtcclxuICAgICAgIGxldCB0b3RhbFNjYXR0ZXJpbmc6dmVjMzxmMzI+ID0gc2luZ2xlU2NhdHRlcmluZyArIG11bHRpU2NhdHRlcmluZztcclxuICAgICAgIGxldCBkaWZmdXNlOnZlYzM8ZjMyPiA9IG1hdGVyaWFsLmRpZmZ1c2VDb2xvciAqICggMS4wIC0gbWF4KCBtYXgoIHRvdGFsU2NhdHRlcmluZy5yLCB0b3RhbFNjYXR0ZXJpbmcuZyApLCB0b3RhbFNjYXR0ZXJpbmcuYiApICk7XHJcbiAgICAgICByZWZsZWN0ZWRMaWdodC5pbmRpcmVjdFNwZWN1bGFyID0gcmFkaWFuY2UgKiBzaW5nbGVTY2F0dGVyaW5nO1xyXG4gICAgICAgcmVmbGVjdGVkTGlnaHQuaW5kaXJlY3RTcGVjdWxhciA9IG11bHRpU2NhdHRlcmluZyAqIGNvc2luZVdlaWdodGVkSXJyYWRpYW5jZTtcclxuICAgICAgIHJlZmxlY3RlZExpZ2h0LmluZGlyZWN0RGlmZnVzZSA9IGRpZmZ1c2UgKiBjb3NpbmVXZWlnaHRlZElycmFkaWFuY2U7XHJcbiAgICAgICByZXR1cm4gcmVmbGVjdGVkTGlnaHQ7XHJcbiAgIH1cclxuICAgYDtcclxufVxyXG4iLCJpbXBvcnQgeyB3Z3NsUGFyc2VEZWZpbmVzIH0gZnJvbSBcIi4uLy4uL1dnc2xQcmVwcm9jZXNzb3JcIjtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHBiclN0cnVjdChkZWZpbmVzKSB7XHJcbiAgcmV0dXJuIHdnc2xQYXJzZURlZmluZXNgXHJcbiAgICAgICAgc3RydWN0IE1hdGVyaWFsVW5pZm9ybXtcclxuXHJcbiAgICAgICAgICAgIG1vZGVsTWF0cml4OiBtYXQ0eDQ8ZjMyPixcclxuICAgIFxyXG4gICAgICAgICAgICBkaWZmdXNlOnZlYzM8ZjMyPixcclxuICAgIFxyXG4gICAgICAgICAgICBvcGFjaXR5OmYzMixcclxuICAgIFxyXG4gICAgICAgICAgICBub3JtYWxNYXRyaXg6IG1hdDN4MzxmMzI+LFxyXG4gICAgXHJcbiAgICAgICAgICAgIGVtaXNzaXZlOnZlYzM8ZjMyPixcclxuICAgIFxyXG4gICAgICAgICAgICByb3VnaG5lc3M6ZjMyLFxyXG4gICAgXHJcbiAgICAgICAgICAgIG1ldGFsbmVzczpmMzIsXHJcbiAgICBcclxuICAgICAgICAgICAgI2lmICR7ZGVmaW5lcy5UT05FX01BUFBJTkd9XHJcbiAgICAgICAgICAgICAgICB0b25lTWFwcGluZ0V4cG9zdXJlOmYzMixcclxuICAgICAgICAgICAgI2VuZGlmXHJcbiAgICAgICAgICAgXHJcbiAgICAgICAgICAgICNpZiAke2RlZmluZXMuU1BFQ1VMQVJ9XHJcbiAgICBcclxuICAgICAgICAgICAgICAgICBzcGVjdWxhckNvbG9yOnZlYzM8ZjMyPixcclxuICAgIFxyXG4gICAgICAgICAgICAgICAgIHNwZWN1bGFySW50ZW5zaXR5OmYzMixcclxuICAgICAgICAgICAgI2VuZGlmXHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAjaWYgJHtkZWZpbmVzLlVTRV9TSEVFTn1cclxuICAgIFxyXG4gICAgICAgICAgICAgICAgc2hlZW5Db2xvcjp2ZWMzPGYzMj4sXHJcbiAgICBcclxuICAgICAgICAgICAgICAgIHNoZWVuUm91Z2huZXNzOmYzMixcclxuICAgICAgICAgICAgI2VuZGlmXHJcblxyXG4gICAgICAgICAgICAjaWYgJHtkZWZpbmVzLlVTRV9UUkFOU01JU1NJT059XHJcbiAgICBcclxuICAgICAgICAgICAgICAgIGF0dGVudWF0aW9uQ29sb3I6dmVjMzxmMzI+LFxyXG4gICAgXHJcbiAgICAgICAgICAgICAgICB0cmFuc21pc3Npb246ZjMyLFxyXG4gICAgXHJcbiAgICAgICAgICAgICAgICB0cmFuc21pc3Npb25TYW1wbGVyU2l6ZTp2ZWMyPGYzMj4sXHJcbiAgICBcclxuICAgICAgICAgICAgICAgIHRoaWNrbmVzczpmMzIsXHJcbiAgICBcclxuICAgICAgICAgICAgICAgIGF0dGVudWF0aW9uRGlzdGFuY2U6ZjMyLFxyXG4gICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICNlbmRpZlxyXG5cclxuICAgICAgICAgICAgI2lmICR7ZGVmaW5lcy5VU0VfU0tJTk5JTkd9XHJcbiAgICBcclxuICAgICAgICAgICAgICAgIGJpbmRNYXRyaXg6bWF0NHg0PGYzMj4sXHJcbiAgICBcclxuICAgICAgICAgICAgICAgIGJpbmRNYXRyaXhJbnZlcnNlOm1hdDR4NDxmMzI+LFxyXG4gICAgXHJcbiAgICAgICAgICAgICAgICBib25lVGV4dHVyZVNpemU6dTMyLFxyXG4gICAgICAgICAgICAjZW5kaWZcclxuXHJcbiAgICAgICAgICAgICNpZiAke2RlZmluZXMuVVNFX05PUk1BTFRFWFRVUkV9XHJcbiAgICAgICAgICAgICAgICAgbm9ybWFsU2NhbGU6dmVjMjxmMzI+LFxyXG4gICAgICAgICAgICAjZW5kaWZcclxuICAgIFxyXG4gICAgICAgICAgICAjaWYgJHtkZWZpbmVzLklPUn1cclxuICAgICAgICAgICAgICAgIGlvcjpmMzIsXHJcbiAgICAgICAgICAgICNlbmRpZlxyXG4gICAgXHJcbiAgICAgICAgICAgICNpZiAke2RlZmluZXMuVVNFX0NMRUFSQ09BVH1cclxuICAgIFxyXG4gICAgICAgICAgICAgICAgI2lmICR7ZGVmaW5lcy5VU0VfQ0xFQVJDT0FUX05PUk1BTFRFWFRVUkV9XHJcbiAgICAgICAgICAgICAgICAgICAgY2xlYXJjb2F0Tm9ybWFsU2NhbGU6dmVjMjxmMzI+LFxyXG4gICAgICAgICAgICAgICAgI2VuZGlmXHJcbiAgICBcclxuICAgICAgICAgICAgICAgICBjbGVhcmNvYXQ6ZjMyLFxyXG4gICAgXHJcbiAgICAgICAgICAgICAgICAgY2xlYXJjb2F0Um91Z2huZXNzOmYzMixcclxuICAgICAgICAgICAgI2VuZGlmXHJcbiAgICBcclxuICAgICAgICAgICAgI2lmICR7ZGVmaW5lcy5VU0VfSVJJREVTQ0VOQ0V9XHJcbiAgICAgICAgICAgICAgICBpcmlkZXNjZW5jZTpmMzIsXHJcbiAgICBcclxuICAgICAgICAgICAgICAgIGlyaWRlc2NlbmNlSU9SOmYzMixcclxuICAgIFxyXG4gICAgICAgICAgICAgICAgaXJpZGVzY2VuY2VUaGlja25lc3NNaW5pbXVtOmYzMixcclxuICAgIFxyXG4gICAgICAgICAgICAgICAgaXJpZGVzY2VuY2VUaGlja25lc3NNYXhpbXVtOmYzMixcclxuICAgIFxyXG4gICAgICAgICAgICAjZW5kaWZcclxuXHJcbiAgICAgICAgICAgICNpZiAke2RlZmluZXMuVVNFX0FPVEVYVFVSRX1cclxuICAgICAgICAgICAgICAgICBhb1RleHR1cmVJbnRlbnNpdHk6ZjMyLFxyXG4gICAgICAgICAgICAjZW5kaWZcclxuXHJcbiAgICAgICAgICAgICNpZiAke2RlZmluZXMuVVNFX0xJR0hUVEVYVFVSRX1cclxuICAgICAgICAgICAgICAgICBsaWdodFRleHR1cmVJbnRlbnNpdHk6ZjMyLFxyXG4gICAgICAgICAgICAjZW5kaWZcclxuICAgIFxyXG4gICAgICAgICAgICAjaWYgJHtkZWZpbmVzLlVTRV9FTlZURVhUVVJFfVxyXG4gICAgICAgICAgICAgICAgZW52VGV4dHVyZUludGVuc2l0eTpmMzIsXHJcbiAgICBcclxuICAgICAgICAgICAgICAgIGZsaXBFbnZUZXh0dXJlOmYzMixcclxuICAgICAgICAgICAgI2VuZGlmXHJcblxyXG4gICAgICAgICAgICAjaWYgJHtkZWZpbmVzLlVTRV9CVU1QVEVYVFVSRX1cclxuICAgICAgICAgICAgICAgIGJ1bXBTY2FsZTpmMzI7XHJcbiAgICAgICAgICAgICNlbmRpZlxyXG5cclxuICAgICAgICAgICAgI2lmICR7ZGVmaW5lcy5VU0VfRElTUExBQ0VNRU5UVEVYVFVSRX1cclxuICAgIFxyXG4gICAgICAgICAgICAgICAgZGlzcGxhY2VtZW50U2NhbGU6ZjMyLFxyXG4gICAgXHJcbiAgICAgICAgICAgICAgICBkaXNwbGFjZW1lbnRCaWFzOmYzMixcclxuICAgICAgICAgICAgI2VuZGlmXHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAjaWYgJHtkZWZpbmVzLlVTRV9NT1JQSFRBUkdFVFN9XHJcbiAgICBcclxuICAgICAgICAgICAgICAgIG1vcnBoVGFyZ2V0QmFzZUluZmx1ZW5jZTpmMzIsXHJcbiAgICBcclxuICAgICAgICAgICAgICAgICNpZiAke2RlZmluZXMuTU9SUEhUQVJHRVRTX1RFWFRVUkV9IFxyXG4gICAgXHJcbiAgICAgICAgICAgICAgICAgICAgbW9ycGhUYXJnZXRzVGV4dHVyZVNpemU6dmVjMjx1MzI+LFxyXG4gICAgXHJcbiAgICAgICAgICAgICAgICAgICAgTU9SUEhUQVJHRVRTX0NPVU5UOnUzMixcclxuICAgIFxyXG4gICAgICAgICAgICAgICAgI2VuZGlmXHJcbiAgICBcclxuICAgICAgICAgICAgICAgIG1vcnBoVGFyZ2V0SW5mbHVlbmNlczphcnJheTxmMzI+LFxyXG4gICAgICAgICAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAjZW5kaWZcclxuICAgICAgICB9XHJcblxyXG4gICBgO1xyXG59XHJcbiIsImltcG9ydCB7IHdnc2xQYXJzZURlZmluZXMgfSBmcm9tIFwiLi4vLi4vV2dzbFByZXByb2Nlc3NvclwiO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gcGJyVGV4dHVyZShkZWZpbmVzKSB7XHJcbiAgcmV0dXJuIHdnc2xQYXJzZURlZmluZXNgICAgICAgICBcclxuICAgICAgICAgICAgI2lmICR7ZGVmaW5lcy5VU0VfQlVNUFRFWFRVUkV9XHJcbiAgICAgICAgICAgICAgICBAZ3JvdXAoMCkgQGJpbmRpbmcoJHtkZWZpbmVzLmJ1bXBUZXh0dXJlQmluZGluZ30pIHZhciBidW1wVGV4dHVyZTogdGV4dHVyZV8yZDxmMzI+O1xyXG4gICAgICAgICAgICAjZW5kaWZcclxuICAgICAgICAgICAgI2lmICR7ZGVmaW5lcy5VU0VfVFJBTlNNSVNTSU9OfVxyXG4gICAgICAgICAgICAgICAgI2lmICR7ZGVmaW5lcy5VU0VfVFJBTlNNSVNTSU9OVEVYVFVSRX1cclxuICAgICAgICAgICAgICAgICAgICBAZ3JvdXAoMCkgQGJpbmRpbmcoJHtkZWZpbmVzLnRyYW5zbWlzc2lvblRleHR1cmVCaW5kaW5nfSkgdmFyIHRyYW5zbWlzc2lvblRleHR1cmU6IHRleHR1cmVfMmQ8ZjMyPjtcclxuICAgICAgICAgICAgICAgICNlbmRpZlxyXG4gICAgICAgICAgICAgICAgI2lmICR7ZGVmaW5lcy5VU0VfVEhJQ0tORVNTVEVYVFVSRX1cclxuICAgICAgICAgICAgICAgICAgICBAZ3JvdXAoMCkgQGJpbmRpbmcoJHtkZWZpbmVzLnRoaWNrbmVzc1RleHR1cmVCaW5kaW5nfSkgdmFyIHRoaWNrbmVzc1RleHR1cmU6IHRleHR1cmVfMmQ8ZjMyPjtcclxuICAgICAgICAgICAgICAgICNlbmRpZlxyXG4gICAgICAgICAgICAgICAgQGdyb3VwKDApIEBiaW5kaW5nKCR7ZGVmaW5lcy50cmFuc21pc3Npb25TYW1wbGVyVGV4dHVyZUJpbmRpbmd9KSB2YXIgdHJhbnNtaXNzaW9uU2FtcGxlclRleHR1cmU6IHRleHR1cmVfMmQ8ZjMyPjtcclxuICAgICAgICAgICAgI2VuZGlmXHJcbiAgICAgICAgICAgICNpZiAke2RlZmluZXMuVVNFX0VOVlRFWFRVUkV9XHJcbiAgICAgICAgICAgICAgICBAZ3JvdXAoMCkgQGJpbmRpbmcoJHtkZWZpbmVzLmVudlRleHR1cmVCaW5kaW5nfSkgdmFyIGVudlRleHR1cmU6IHRleHR1cmVfY3ViZTxmMzI+O1xyXG4gICAgICAgICAgICAjZW5kaWZcclxuICAgICAgICAgICAgI2lmICR7ZGVmaW5lcy5VU0VfTk9STUFMVEVYVFVSRX1cclxuICAgICAgICAgICAgICAgIEBncm91cCgwKSBAYmluZGluZygke2RlZmluZXMubm9ybWFsVGV4dHVyZUJpbmRpbmd9KSB2YXIgbm9ybWFsVGV4dHVyZTogdGV4dHVyZV8yZDxmMzI+O1xyXG4gICAgICAgICAgICAjZW5kaWZcclxuICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICNpZiAke2RlZmluZXMuVVNFX0NMRUFSQ09BVFRFWFRVUkV9XHJcbiAgICAgICAgICAgICAgICBAZ3JvdXAoMCkgQGJpbmRpbmcoJHtkZWZpbmVzLmNsZWFyY29hdFRleHR1cmVCaW5kaW5nfSkgdmFyIGNsZWFyY29hdFRleHR1cmU6IHRleHR1cmVfMmQ8ZjMyPjtcclxuICAgICAgICAgICAgI2VuZGlmXHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAjaWYgJHtkZWZpbmVzLlVTRV9DTEVBUkNPQVRfUk9VR0hORVNTVEVYVFVSRX1cclxuICAgICAgICAgICAgICAgIEBncm91cCgwKSBAYmluZGluZygke2RlZmluZXMuY2xlYXJjb2F0UmNsZWFyY29hdFJvdWdobmVzc1RleHR1cmVCaW5kaW5nfSkgdmFyIGNsZWFyY29hdFJvdWdobmVzc1RleHR1cmU6IHRleHR1cmVfMmQ8ZjMyPjtcclxuICAgICAgICAgICAgI2VuZGlmXHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAjaWYgJHtkZWZpbmVzLlVTRV9DTEVBUkNPQVRfTk9STUFMVEVYVFVSRX1cclxuICAgICAgICAgICAgICAgIEBncm91cCgwKSBAYmluZGluZygke2RlZmluZXMuY2xlYXJjb2F0Tm9ybWFsVGV4dHVyZUJpbmRpbmd9KSB2YXIgY2xlYXJjb2F0Tm9ybWFsVGV4dHVyZTogdGV4dHVyZV8yZDxmMzI+O1xyXG4gICAgICAgICAgICAjZW5kaWZcclxuICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICNpZiAke2RlZmluZXMuVVNFX0lSSURFU0NFTkNFVEVYVFVSRX1cclxuICAgICAgICAgICAgICAgIEBncm91cCgwKSBAYmluZGluZygke2RlZmluZXMuaXJpZGVzY2VuY2VUZXh0dXJlQmluZGluZ30pIHZhciBpcmlkZXNjZW5jZVRleHR1cmU6IHRleHR1cmVfMmQ8ZjMyPjtcclxuICAgICAgICAgICAgI2VuZGlmXHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAjaWYgJHtkZWZpbmVzLlVTRV9JUklERVNDRU5DRV9USElDS05FU1NURVhUVVJFfVxyXG4gICAgICAgICAgICAgICAgQGdyb3VwKDApIEBiaW5kaW5nKCR7ZGVmaW5lcy5pcmlkZXNjZW5jZVRoaWNrbmVzc1RleHR1cmVCaW5kaW5nfSkgdmFyIGlyaWRlc2NlbmNlVGhpY2tuZXNzVGV4dHVyZTogdGV4dHVyZV8yZDxmMzI+O1xyXG4gICAgICAgICAgICAjZW5kaWZcclxuICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICNpZiAke2RlZmluZXMuVVNFX1JPVUdITkVTU1RFWFRVUkV9XHJcbiAgICAgICAgICAgICAgICBAZ3JvdXAoMCkgQGJpbmRpbmcoJHtkZWZpbmVzLnJvdWdobmVzc1RleHR1cmVCaW5kaW5nfSkgdmFyIHJvdWdobmVzc1RleHR1cmU6IHRleHR1cmVfMmQ8ZjMyPjtcclxuICAgICAgICAgICAgI2VuZGlmXHJcbiAgICAgICAgICAgIFxyXG4gICAgICAgICAgICAjaWYgJHtkZWZpbmVzLlVTRV9NRVRBTE5FU1NURVhUVVJFfVxyXG4gICAgICAgICAgICAgICAgQGdyb3VwKDApIEBiaW5kaW5nKCR7ZGVmaW5lcy5tZXRhbG5lc3NUZXh0dXJlQmluZGluZ30pIHZhciBtZXRhbG5lc3NUZXh0dXJlOiB0ZXh0dXJlXzJkPGYzMj47XHJcbiAgICAgICAgICAgICNlbmRpZlxyXG5cclxuICAgICAgICAgICAgI2lmICR7ZGVmaW5lcy5TUEVDVUxBUn1cclxuICAgICAgICAgICAgICAgICNpZiAke2RlZmluZXMuVVNFX1NQRUNVTEFSSU5URU5TSVRZVEVYVFVSRX1cclxuICAgICAgICAgICAgICAgICAgICBAZ3JvdXAoMCkgQGJpbmRpbmcoJHtkZWZpbmVzLnNwZWN1bGFySW50ZW5zaXR5VGV4dHVyZUJpbmRpbmd9KSB2YXIgc3BlY3VsYXJJbnRlbnNpdHlUZXh0dXJlOiB0ZXh0dXJlXzJkPGYzMj47XHJcbiAgICAgICAgICAgICAgICAjZW5kaWZcclxuXHJcbiAgICAgICAgICAgICAgICAjaWYgJHtkZWZpbmVzLlVTRV9TUEVDVUxBUkNPTE9SVEVYVFVSRX1cclxuICAgICAgICAgICAgICAgICAgICBAZ3JvdXAoMCkgQGJpbmRpbmcoJHtkZWZpbmVzLnNwZWN1bGFyQ29sb3JUZXh0dXJlQmluZGluZ30pIHZhciBzcGVjdWxhckNvbG9yVGV4dHVyZTogdGV4dHVyZV8yZDxmMzI+O1xyXG4gICAgICAgICAgICAgICAgI2VuZGlmXHJcbiAgICAgICAgICAgICNlbmRpZlxyXG5cclxuICAgICAgICAgICAgI2lmICR7ZGVmaW5lcy5VU0VfU0hFRU59XHJcbiAgICAgICAgICAgICAgICAjaWYgJHtkZWZpbmVzLlVTRV9TSEVFTkNPTE9SVEVYVFVSRX1cclxuICAgICAgICAgICAgICAgICAgICBAZ3JvdXAoMCkgQGJpbmRpbmcoJHtkZWZpbmVzLnNoZWVuQ29sb3JUZXh0dXJlQmluZGluZ30pIHZhciBzaGVlbkNvbG9yVGV4dHVyZTogdGV4dHVyZV8yZDxmMzI+O1xyXG4gICAgICAgICAgICAgICAgI2VuZGlmXHJcbiAgICAgICAgICAgICAgICAjaWYgJHtkZWZpbmVzLlVTRV9TSEVFTlJPVUdITkVTU1RFWFRVUkV9XHJcbiAgICAgICAgICAgICAgICAgICAgQGdyb3VwKDApIEBiaW5kaW5nKCR7ZGVmaW5lcy5zaGVlblJvdWdobmVzc1RleHR1cmVCaW5kaW5nfSkgdmFyIHNoZWVuUm91Z2huZXNzVGV4dHVyZTogdGV4dHVyZV8yZDxmMzI+O1xyXG4gICAgICAgICAgICAgICAgI2VuZGlmXHJcbiAgICAgICAgICAgICNlbmRpZlxyXG5cclxuICAgICAgICAgICAgI2lmICR7ZGVmaW5lcy5VU0VfVEVYVFVSRX1cclxuICAgICAgICAgICAgICAgIEBncm91cCgwKSBAYmluZGluZygke2RlZmluZXMuYmFzZVNhbXBsZXJCaW5kaW5nfSkgdmFyIGJhc2VTYW1wbGVyOiBzYW1wbGVyO1xyXG4gICAgICAgICAgICAgICAgQGdyb3VwKDApIEBiaW5kaW5nKCR7ZGVmaW5lcy5iYXNlVGV4dHVyZUJpbmRpbmd9KSB2YXIgYmFzZVRleHR1cmU6IHRleHR1cmVfMmQ8ZjMyPjtcclxuICAgICAgICAgICAgI2VuZGlmXHJcblxyXG4gICAgICAgICAgICAjaWYgJHtkZWZpbmVzLlVTRV9BTFBIQVRFWFRVUkV9XHJcbiAgICAgICAgICAgICAgICBAZ3JvdXAoMCkgQGJpbmRpbmcoJHtkZWZpbmVzLmFscGhhVGV4dHVyZUJpbmRpbmd9KSB2YXIgYWxwaGFUZXh0dXJlOiB0ZXh0dXJlXzJkPGYzMj47XHJcbiAgICAgICAgICAgICNlbmRpZlxyXG5cclxuICAgICAgICAgICAgI2lmICR7ZGVmaW5lcy5VU0VfQU9URVhUVVJFfVxyXG4gICAgICAgICAgICAgICAgQGdyb3VwKDApIEBiaW5kaW5nKCR7ZGVmaW5lcy5hb1RleHR1cmVCaW5kaW5nfSkgdmFyIGFvVGV4dHVyZTogdGV4dHVyZV8yZDxmMzI+O1xyXG4gICAgICAgICAgICAgICAgXHJcbiAgICAgICAgICAgICNlbmRpZlxyXG4gICAgICAgICAgICAjaWYgJHtkZWZpbmVzLlVTRV9MSUdIVFRFWFRVUkV9XHJcbiAgICAgICAgICAgICAgICBAZ3JvdXAoMCkgQGJpbmRpbmcoJHtkZWZpbmVzLmxpZ2h0VGV4dHVyZUJpbmRpbmd9KSB2YXIgbGlnaHRUZXh0dXJlOiB0ZXh0dXJlXzJkPGYzMj47XHJcbiAgICAgICAgICAgICNlbmRpZlxyXG5cclxuICAgICAgICAgICAgI2lmICR7ZGVmaW5lcy5VU0VfRU1JU1NJVkVURVhUVVJFfVxyXG4gICAgICAgICAgICAgICAgQGdyb3VwKDApIEBiaW5kaW5nKCR7ZGVmaW5lcy5lbWlzc2l2ZVRleHR1cmVCaW5kaW5nfSkgdmFyIGVtaXNzaXZlVGV4dHVyZTogdGV4dHVyZV8yZDxmMzI+O1xyXG4gICAgICAgICAgICAjZW5kaWZcclxuICAgICBgO1xyXG59XHJcbiIsImltcG9ydCB7IHdnc2xQYXJzZURlZmluZXMgfSBmcm9tIFwiLi4vLi4vV2dzbFByZXByb2Nlc3NvclwiO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gcGJyVXRpbHMoZGVmaW5lcykge1xyXG4gIHJldHVybiB3Z3NsUGFyc2VEZWZpbmVzYFxyXG4gICAgY29uc3QgUEk6ZjMyPSAzLjE0MTU5MjY1MzU4OTc5MztcclxuICAgIGNvbnN0IFBJMjpmMzI9IDYuMjgzMTg1MzA3MTc5NTg2O1xyXG4gICAgY29uc3QgUElfSEFMRjpmMzI9IDEuNTcwNzk2MzI2Nzk0ODk2NjtcclxuICAgIGNvbnN0IFJFQ0lQUk9DQUxfUEk6ZjMyPSAwLjMxODMwOTg4NjE4Mzc5MDc7XHJcbiAgICBjb25zdCBSRUNJUFJPQ0FMX1BJMjpmMzI9IDAuMTU5MTU0OTQzMDkxODk1MzU7XHJcbiAgICBjb25zdCBFUFNJTE9OOmYzMj0gMWUtNjtcclxuXHJcbiAgICBmbiBwb3cyKHg6ZjMyICktPmYzMiB7XHJcbiAgICAgICAgcmV0dXJuIHgqeDtcclxuICAgIH1cclxuICAgIGZuIHBvdzJWZWN0b3IoeDp2ZWMzPGYzMj4gKS0+dmVjMzxmMzI+IHtcclxuICAgICAgICByZXR1cm4geCp4O1xyXG4gICAgfVxyXG4gICAgZm4gcG93MyggeDpmMzIgKS0+ZjMyIHtcclxuICAgICAgICByZXR1cm4geCp4Kng7XHJcbiAgICB9XHJcbiAgICBmbiBwb3c0KCB4OmYzMiApLT5mMzIge1xyXG4gICAgICAgIGxldCB4MjpmMzIgPSB4Kng7XHJcbiAgICAgICAgcmV0dXJuIHgyKngyO1xyXG4gICAgfVxyXG4gICAgZm4gbWF4Myggdjp2ZWMzPGYzMj4gKS0+ZjMyIHtcclxuICAgICAgICByZXR1cm4gbWF4KCBtYXgoIHYueCwgdi55ICksIHYueiApO1xyXG4gICAgfVxyXG4gICAgZm4gYXZlcmFnZSh2OnZlYzM8ZjMyPiApLT5mMzIge1xyXG4gICAgICAgIHJldHVybiBkb3QoIHYsIHZlYzM8ZjMyPiggMC4zMzMzMzMzICkgKTtcclxuICAgIH1cclxuICAgIGZuIHJhbmQoIHV2OnZlYzI8ZjMyPiApLT5mMzIge1xyXG4gICAgICAgIGxldCBhOmYzMiA9IDEyLjk4OTg7XHJcbiAgICAgICAgbGV0IGI6ZjMyID0gNzguMjMzO1xyXG4gICAgICAgIGxldCBjOmYzMiA9IDQzNzU4LjU0NTM7XHJcbiAgICAgICAgbGV0IGR0OmYzMiA9IGRvdCggdXYueHksIHZlYzI8ZjMyPiggYSwgYiApICk7XHJcbiAgICAgICAgbGV0IHNuOmYzMiA9IGR0ICUgUEk7XHJcbiAgICAgICAgcmV0dXJuIGZyYWN0KCBzaW4oIHNuICkgKiBjICk7XHJcbiAgICB9XHJcbiAgICBmbiB0cmFuc2Zvcm1EaXJlY3Rpb24oIGRpcjp2ZWMzPGYzMj4sIG1hdHJpeDptYXQ0eDQ8ZjMyPiApLT52ZWMzPGYzMj4ge1xyXG4gICAgICAgIHJldHVybiBub3JtYWxpemUoICggbWF0cml4ICogdmVjNDxmMzI+KCBkaXIsIDAuMCApICkueHl6ICk7XHJcbiAgICB9XHJcblxyXG4gICAgZm4gdHJhbnNwb3NlTWF0MyggbTptYXQzeDM8ZjMyPiApLT5tYXQzeDM8ZjMyPiB7XHJcbiAgICAgICAgdmFyIHRtcDptYXQzeDM8ZjMyPjtcclxuICAgICAgICB0bXBbIDAgXSA9IHZlYzM8ZjMyPiggbVsgMCBdLngsIG1bIDEgXS54LCBtWyAyIF0ueCApO1xyXG4gICAgICAgIHRtcFsgMSBdID0gdmVjMzxmMzI+KCBtWyAwIF0ueSwgbVsgMSBdLnksIG1bIDIgXS55ICk7XHJcbiAgICAgICAgdG1wWyAyIF0gPSB2ZWMzPGYzMj4oIG1bIDAgXS56LCBtWyAxIF0ueiwgbVsgMiBdLnogKTtcclxuICAgICAgICByZXR1cm4gdG1wO1xyXG4gICAgfVxyXG4gICAgZm4gbHVtaW5hbmNlKCByZ2I6dmVjMzxmMzI+ICktPmYzMiB7XHJcbiAgICAgICAgbGV0IHdlaWdodHM6dmVjMzxmMzI+ID0gdmVjMzxmMzI+KDAuMjEyNjcyOSwgMC43MTUxNTIyLCAwLjA3MjE3NTAgKTtcclxuICAgICAgICByZXR1cm4gZG90KCB3ZWlnaHRzLCByZ2IgKTtcclxuICAgIH1cclxuICAgIGZuIExpbmVhclRvbmVNYXBwaW5nKCBjb2xvcjp2ZWMzPGYzMj4sdG9uZU1hcHBpbmdFeHBvc3VyZTpmMzIgICktPnZlYzM8ZjMyPiB7XHJcbiAgICAgICAgcmV0dXJuIHRvbmVNYXBwaW5nRXhwb3N1cmUgKiBjb2xvcjtcclxuICAgIH1cclxuXHJcbiAgICBmbiBSZWluaGFyZFRvbmVNYXBwaW5nKCBjb2xvcjp2ZWMzPGYzMj4sdG9uZU1hcHBpbmdFeHBvc3VyZTpmMzIgKS0+dmVjMzxmMzI+IHtcclxuICAgICAgICB2YXIgdGVtcENvbG9yOnZlYzM8ZjMyPjtcclxuICAgICAgICB0ZW1wQ29sb3I9Y29sb3I7XHJcbiAgICAgICAgdGVtcENvbG9yICo9IHRvbmVNYXBwaW5nRXhwb3N1cmU7XHJcbiAgICAgICAgcmV0dXJuIHNhdHVyYXRlKCB0ZW1wQ29sb3IgLyAoIHZlYzM8ZjMyPiggMS4wICkgKyB0ZW1wQ29sb3IgKSApO1xyXG4gICAgfVxyXG4gICAgZm4gQ3VzdG9tVG9uZU1hcHBpbmcoIGNvbG9yOnZlYzM8ZjMyPiApLT52ZWMzPGYzMj4ge1xyXG4gICAgICAgIHJldHVybiBjb2xvcjtcclxuICAgIH1cclxuICAgIGZuIHRvbmVNYXBwaW5nKCBjb2xvcjp2ZWMzPGYzMj4sdG9uZU1hcHBpbmdFeHBvc3VyZTpmMzIgICktPnZlYzM8ZjMyPiB7XHJcbiAgICAgICAgcmV0dXJuIFJlaW5oYXJkVG9uZU1hcHBpbmcoIGNvbG9yLHRvbmVNYXBwaW5nRXhwb3N1cmUgKTtcclxuICAgIH1cclxuXHJcbiAgICBmbiBMaW5lYXJUb0xpbmVhciggdmFsdWU6dmVjNDxmMzI+ICktPnZlYzQ8ZjMyPiB7XHJcbiAgICAgICAgcmV0dXJuIHZhbHVlO1xyXG4gICAgfVxyXG4gICAgZm4gbGVzc1RoYW5FcXVhbChhOnZlYzM8ZjMyPixiOnZlYzM8ZjMyPiktPnZlYzM8ZjMyPntcclxuICAgICAgIGxldCB4VmFsdWU6ZjMyPXNlbGVjdChiLngsYS54LGEueDw9Yi54KTtcclxuICAgICAgIGxldCB5VmFsdWU6ZjMyPXNlbGVjdChiLnksYS55LGEueTw9Yi55KTtcclxuICAgICAgIGxldCB6VmFsdWU6ZjMyPXNlbGVjdChiLnosYS56LGEuejw9Yi56KTtcclxuICAgICAgIHJldHVybiB2ZWMzPGYzMj4oeFZhbHVlLHlWYWx1ZSx6VmFsdWUpOyAgICBcclxuICAgIH1cclxuICAgIGZuIExpbmVhclRvc1JHQiggdmFsdWU6dmVjNDxmMzI+ICktPnZlYzQ8ZjMyPiB7XHJcbiAgICAgICAgcmV0dXJuIHZlYzQ8ZjMyPiggbWl4KCBwb3coIHZhbHVlLnJnYiwgdmVjMzxmMzI+KCAwLjQxNjY2ICkgKSAqIDEuMDU1IC0gdmVjMzxmMzI+KCAwLjA1NSApLCB2YWx1ZS5yZ2IgKiAxMi45MiwgdmVjMzxmMzI+KCBsZXNzVGhhbkVxdWFsKCB2YWx1ZS5yZ2IsIHZlYzM8ZjMyPiggMC4wMDMxMzA4ICkgKSApICksIHZhbHVlLmEgKTtcclxuICAgIH1cclxuICAgIGZuIGxpbmVhclRvT3V0cHV0VGV4ZWwodmFsdWU6dmVjNDxmMzI+ICktPnZlYzQ8ZjMyPiB7XHJcbiAgICAgICAgcmV0dXJuIExpbmVhclRvc1JHQiggdmFsdWUgKTtcclxuICAgIH1cclxuICAgIGA7XHJcbn1cclxuIiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gYmxpbm5fcGhvbmcoZGVmaW5lcykge1xyXG5cdHJldHVybiBgXHJcbiAgICAgICBmbiBnZXRQb2ludExpZ2h0SW5mbyhwb2ludExpZ2h0OlBvaW50TGlnaHQsd29ybGRQb3M6dmVjMzxmMzI+LHNoaW5pbmVzczpmMzIsTjp2ZWMzPGYzMj4sVjp2ZWMzPGYzMj4pLT52ZWMzPGYzMj57XHJcbiAgICAgICAgdmFyIGNvbG9yPXZlYzM8ZjMyPigwLjAsMC4wLDAuMCk7XHJcbiAgICAgICAgdmFyIGRpcmVjdGlvbjp2ZWMzPGYzMj4gPSB3b3JsZFBvcyAtIHBvaW50TGlnaHQucG9zaXRpb247XHJcbiAgICAgICAgbGV0IGRpc3Q6ZjMyID0gbGVuZ3RoKCBkaXJlY3Rpb24gKTtcclxuICAgICAgICBkaXJlY3Rpb24gPSBub3JtYWxpemUoZGlyZWN0aW9uKTtcclxuICAgICAgICBsZXQgZGVjYXkgPSBjbGFtcCgxLjAgLSBwb3coZGlzdCAvIHBvaW50TGlnaHQuZGlzdGFuY2UsIDQuMCksIDAuMCwgMS4wKTtcclxuXHJcbiAgICAgICAgbGV0IGQgPSAgbWF4KCBkb3QoIE4sIC1kaXJlY3Rpb24gKSwgMC4wICkgKiBkZWNheTtcclxuICAgICAgICBjb2xvciArPSBwb2ludExpZ2h0LmNvbG9yICogZDtcclxuXHJcbiAgICAgICAgbGV0IGhhbGZEaXI6dmVjMzxmMzI+ID0gbm9ybWFsaXplKCBWIC0gZGlyZWN0aW9uICk7XHJcbiAgICAgICAgbGV0IHM6ZjMyID0gcG93KCBjbGFtcCggZG90KCBOLCBoYWxmRGlyICksIDAuMCwgMS4wICksIHNoaW5pbmVzcyApICAqIGRlY2F5O1xyXG4gICAgICAgIGNvbG9yICs9IHBvaW50TGlnaHQuY29sb3IgKiBzO1xyXG4gICAgICAgIHJldHVybiBjb2xvcjtcclxuICAgICAgIH1cclxuICAgICAgIGZuIGdldFNwb3RMaWdodEluZm8oc3BvdExpZ2h0OlNwb3RMaWdodCx3b3JsZFBvczp2ZWMzPGYzMj4sc2hpbmluZXNzOmYzMixOOnZlYzM8ZjMyPixWOnZlYzM8ZjMyPiktPnZlYzM8ZjMyPntcclxuICAgICAgICB2YXIgY29sb3I9dmVjMzxmMzI+KDAuMCwwLjAsMC4wKTtcclxuICAgICAgICAgICAgdmFyIGRpcmVjdGlvbjp2ZWMzPGYzMj4gPSBzcG90TGlnaHQucG9zaXRpb24gLSB3b3JsZFBvcztcclxuICAgICAgICAgICAgbGV0IGxpZ2h0RGlzdGFuY2U6ZjMyID0gbGVuZ3RoKGRpcmVjdGlvbik7XHJcbiAgICAgICAgICAgIGRpcmVjdGlvbiA9IG5vcm1hbGl6ZShkaXJlY3Rpb24pO1xyXG4gICAgICAgICAgICBsZXQgYW5nbGVDb3M6ZjMyID0gZG90KCBkaXJlY3Rpb24sIC1zcG90TGlnaHQuZGlyZWN0aW9uICk7XHJcbiAgICAgICAgICAgIGxldCBkZWNheTpmMzIgPSBjbGFtcCgxLjAgLSBwb3cobGlnaHREaXN0YW5jZS9zcG90TGlnaHQuZGlzdGFuY2UsIDQuMCksIDAuMCwgMS4wKTtcclxuICAgICAgICAgICAgbGV0IHNwb3RFZmZlY3Q6ZjMyID0gc21vb3Roc3RlcCggc3BvdExpZ2h0LnBlbnVtYnJhQ29zLCBzcG90TGlnaHQuY29uZUNvcywgYW5nbGVDb3MgKTtcclxuICAgICAgICAgICAgbGV0IGRlY2F5VG90YWw6ZjMyID0gZGVjYXkgKiBzcG90RWZmZWN0O1xyXG4gICAgICAgICAgICBsZXQgZDpmMzIgPSBtYXgoIGRvdCggTiwgZGlyZWN0aW9uICksIDAuMCApICAqIGRlY2F5VG90YWw7XHJcbiAgICAgICAgICAgIGNvbG9yICs9IHNwb3RMaWdodC5jb2xvciAqIGQ7XHJcbiAgICAgICAgICAgIGxldCBoYWxmRGlyOnZlYzM8ZjMyPiA9IG5vcm1hbGl6ZSggViArIGRpcmVjdGlvbiApO1xyXG4gICAgICAgICAgICBsZXQgczpmMzIgPSBwb3coIGNsYW1wKCBkb3QoIE4sIGhhbGZEaXIgKSwgMC4wLCAxLjAgKSwgc2hpbmluZXNzICkgKiBkZWNheVRvdGFsO1xyXG4gICAgICAgICAgICBjb2xvciArPSBzcG90TGlnaHQuY29sb3IgKiBzO1xyXG4gICAgICAgICAgICByZXR1cm4gY29sb3I7XHJcbiAgICAgICB9XHJcbiAgICBzdHJ1Y3QgRGlyZWN0aW9uYWxMaWdodCB7XHJcbiAgICAgICAgZGlyZWN0aW9uOiB2ZWMzPGYzMj4sXHJcbiAgICAgICAgY29sb3I6IHZlYzM8ZjMyPixcclxuICAgIH07XHJcbiAgICAgIGZuIGdldERpcmVjdExpZ2h0SW5mbyhkaXJlY3Rpb25hbExpZ2h0OkRpcmVjdGlvbmFsTGlnaHQsc2hpbmluZXNzOmYzMixOOnZlYzM8ZjMyPixWOnZlYzM8ZjMyPiktPnZlYzM8ZjMyPntcclxuICAgICAgICB2YXIgY29sb3I9dmVjMzxmMzI+KDAuMCwwLjAsMC4wKTtcclxuICAgICAgICBsZXQgZDpmMzIgPSBtYXgoZG90KE4sIC1kaXJlY3Rpb25hbExpZ2h0LmRpcmVjdGlvbiksIDAuMCk7XHJcbiAgICAgICAgY29sb3IgKz0gZGlyZWN0aW9uYWxMaWdodC5jb2xvciAqIGQ7XHJcblxyXG4gICAgICAgIGxldCBoYWxmRGlyOnZlYzM8ZjMyPiA9IG5vcm1hbGl6ZSggViAtIGRpcmVjdGlvbmFsTGlnaHQuZGlyZWN0aW9uICk7XHJcbiAgICAgICAgbGV0IHM6ZjMyID0gcG93KCBjbGFtcCggZG90KCBOLCBoYWxmRGlyICksIDAuMCwgMS4wICksIHNoaW5pbmVzcyApO1xyXG4gICAgICAgIGNvbG9yICs9IGRpcmVjdGlvbmFsTGlnaHQuY29sb3IgKiBzO1xyXG4gICAgICAgIHJldHVybiBjb2xvcjtcclxuICAgICAgIH1cclxuICAgIGA7XHJcbn1cclxuIiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gcGhvbmdGdW5jdGlvbihkZWZpbmVzKSB7XHJcbiAgcmV0dXJuIGBcclxuICAgIGZuIEdfQmxpbm5QaG9uZ19JbXBsaWNpdCggKS0+ZjMyIHtcclxuXHJcbiAgICAgICAgLy8gZ2VvbWV0cnkgdGVybSBpcyAobiBkb3QgbCkobiBkb3QgdikgLyA0KG4gZG90IGwpKG4gZG90IHYpXHJcbiAgICAgICAgcmV0dXJuIDAuMjU7XHJcblxyXG4gICAgfVxyXG4gICAgZm4gRF9CbGlublBob25nKCBzaGluaW5lc3M6ZjMyLCBkb3ROSDpmMzIgKS0+ZjMyIHtcclxuXHJcbiAgICAgICAgcmV0dXJuIFJFQ0lQUk9DQUxfUEkgKiAoIHNoaW5pbmVzcyAqIDAuNSArIDEuMCApICogcG93KGRvdE5ILCBzaGluaW5lc3MpO1xyXG5cclxuICAgIH1cclxuICAgIGZuIEJSREZfQmxpbm5QaG9uZyggbGlnaHREaXI6dmVjMzxmMzI+LCB2aWV3RGlyOnZlYzM8ZjMyPiwgbm9ybWFsOnZlYzM8ZjMyPiwgc3BlY3VsYXJDb2xvcjp2ZWMzPGYzMj4sIHNoaW5pbmVzczpmMzIgKS0+dmVjMzxmMzI+IHtcclxuXHJcbiAgICAgICAgbGV0ICBoYWxmRGlyID0gbm9ybWFsaXplKCBsaWdodERpciArIHZpZXdEaXIgKTtcclxuXHJcbiAgICAgICAgbGV0ICBkb3ROSDpmMzIgPSBzYXR1cmF0ZSggZG90KCBub3JtYWwsIGhhbGZEaXIgKSApO1xyXG4gICAgICAgIGxldCBkb3RWSDpmMzIgPSBzYXR1cmF0ZSggZG90KCB2aWV3RGlyLCBoYWxmRGlyICkgKTtcclxuXHJcbiAgICAgICAgbGV0IEYgPSBGX1NjaGxpY2soIHNwZWN1bGFyQ29sb3IsIDEuMCwgZG90VkggKTtcclxuXHJcbiAgICAgICAgbGV0IEc6ZjMyID0gR19CbGlublBob25nX0ltcGxpY2l0KCApO1xyXG5cclxuICAgICAgICBsZXQgRCA9IERfQmxpbm5QaG9uZyggc2hpbmluZXNzLCBkb3ROSCApO1xyXG5cclxuICAgICAgICByZXR1cm4gRiAqICggRyAqIEQgKTtcclxuXHJcbiAgICB9IFxyXG4gICAgZm4gUkVfRGlyZWN0X0JsaW5uUGhvbmcoICBkaXJlY3RMaWdodDpJbmNpZGVudExpZ2h0LGdlb21ldHJ5Okdlb21ldHJpY0NvbnRleHQsIG1hdGVyaWFsOkJsaW5uUGhvbmdNYXRlcmlhbCApLT5SZWZsZWN0ZWRMaWdodHtcclxuICAgICAgICB2YXIgcmVmbGVjdGVkTGlnaHQ6UmVmbGVjdGVkTGlnaHQ7IFxyXG4gICAgICAgIGxldCBkb3ROTDpmMzIgPSBzYXR1cmF0ZShkb3QoZ2VvbWV0cnkubm9ybWFsLCBkaXJlY3RMaWdodC5kaXJlY3Rpb24pKTtcclxuICAgICAgICBsZXQgaXJyYWRpYW5jZTp2ZWMzPGYzMj4gPSBkb3ROTCpkaXJlY3RMaWdodC5jb2xvcjtcclxuXHJcbiAgICAgICAgcmVmbGVjdGVkTGlnaHQuZGlyZWN0RGlmZnVzZT0gaXJyYWRpYW5jZSAqIEJSREZfTGFtYmVydCggbWF0ZXJpYWwuZGlmZnVzZUNvbG9yICk7XHJcblxyXG4gICAgICAgIHJlZmxlY3RlZExpZ2h0LmRpcmVjdFNwZWN1bGFyPSBpcnJhZGlhbmNlICogQlJERl9CbGlublBob25nKCBkaXJlY3RMaWdodC5kaXJlY3Rpb24sIGdlb21ldHJ5LnZpZXdEaXIsIGdlb21ldHJ5Lm5vcm1hbCwgbWF0ZXJpYWwuc3BlY3VsYXJDb2xvciwgbWF0ZXJpYWwuc3BlY3VsYXJTaGluaW5lc3MgKSAqIG1hdGVyaWFsLnNwZWN1bGFyU3RyZW5ndGg7XHJcbiAgICAgICAgcmV0dXJuIHJlZmxlY3RlZExpZ2h0O1xyXG4gICAgfVxyXG4gICAgZm4gUkVfSW5kaXJlY3REaWZmdXNlX0JsaW5uUGhvbmcoIGlycmFkaWFuY2U6dmVjMzxmMzI+LCBnZW9tZXRyeTpHZW9tZXRyaWNDb250ZXh0LCBtYXRlcmlhbDpCbGlublBob25nTWF0ZXJpYWwpLT5SZWZsZWN0ZWRMaWdodCB7XHJcbiAgICAgICAgdmFyIHJlZmxlY3RlZExpZ2h0OlJlZmxlY3RlZExpZ2h0OyBcclxuICAgICAgICByZWZsZWN0ZWRMaWdodC5pbmRpcmVjdERpZmZ1c2UgKz0gaXJyYWRpYW5jZSAqIEJSREZfTGFtYmVydCggbWF0ZXJpYWwuZGlmZnVzZUNvbG9yICk7XHJcbiAgICAgICAgcmV0dXJuIHJlZmxlY3RlZExpZ2h0O1xyXG4gICAgfVxyXG4gICAgYDtcclxufVxyXG4iLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBwaG9uZ1V0aWxzKGRlZmluZXMpIHtcclxuICByZXR1cm4gYFxyXG4gICBzdHJ1Y3QgQmxpbm5QaG9uZ01hdGVyaWFsIHtcclxuICAgICAgICBkaWZmdXNlQ29sb3I6dmVjMzxmMzI+LFxyXG4gICAgICAgIHNwZWN1bGFyQ29sb3I6dmVjMzxmMzI+LFxyXG4gICAgICAgIHNwZWN1bGFyU2hpbmluZXNzOmYzMixcclxuICAgICAgICBzcGVjdWxhclN0cmVuZ3RoOmYzMixcclxuICAgIH07XHJcbiAgICBjb25zdCBSRUNJUFJPQ0FMX1BJOmYzMj0gMC4zMTgzMDk4ODYxODM3OTA3O1xyXG4gICBmbiBwb3cyKCB4OmYzMiApLT5mMzIgeyByZXR1cm4geCp4OyB9XHJcbiAgIGZuIHBvdzMoIHg6ZjMyICktPmYzMiB7IHJldHVybiB4KngqeDsgfVxyXG4gICBmbiBwb3c0KHg6ZjMyICktPmYzMiB7IGxldCB4MiA9IHgqeDsgcmV0dXJuIHgyKngyOyB9XHJcbiAgIGZuIG1heDMoIHY6dmVjMzxmMzI+ICktPmYzMiB7IHJldHVybiBtYXgoIG1heCggdi54LCB2LnkgKSwgdi56ICk7IH1cclxuICAgZm4gYXZlcmFnZSh2OnZlYzM8ZjMyPiApLT5mMzIgeyBcclxuICAgICAgIGxldCByZXN1bHQ9dmVjMzxmMzI+KCAwLjMzMzMzMzMsICAwLjMzMzMzMzMsIDAuMzMzMzMzMyk7XHJcbiAgICAgICByZXR1cm4gZG90KCB2LHJlc3VsdCApOyBcclxuICAgfVxyXG4gICBgO1xyXG59XHJcbiIsImltcG9ydCB7IHdnc2xQYXJzZURlZmluZXMgfSBmcm9tIFwiLi4vLi4vV2dzbFByZXByb2Nlc3NvclwiO1xyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGdldFNraW5NYXRyaXgoZGVmaW5lcykge1xyXG5cdHJldHVybiB3Z3NsUGFyc2VEZWZpbmVzYFxyXG4gICAjaWYgJHtkZWZpbmVzLkhBU19TS0lOfSBcclxuICAgICAgICBzdHJ1Y3QgSm9pbnRzVW5pZm9ybXtcclxuICAgICAgICAgICAgIG1hdHJpeHM6YXJyYXk8bWF0NHg0Zj4sXHJcbiAgICAgICAgfVxyXG4gICAgICAgIHN0cnVjdCBJbnZlcnNlQmluZE1hdHJpY2VzVW5pZm9ybXtcclxuICAgICAgICAgICAgbWF0cml4czphcnJheTxtYXQ0eDRmPixcclxuICAgICAgICB9XHJcbiAgICAgICAgQGJpbmRpbmcoJHtkZWZpbmVzLnNraW5Kb2ludHNCdWZmZXJCaW5kaW5nfSkgQGdyb3VwKDApIHZhcjxzdG9yYWdlLCByZWFkPiBqb2ludHNVbmlmb3JtIDogSm9pbnRzVW5pZm9ybTtcclxuICAgICAgICBAYmluZGluZygke2RlZmluZXMuaW52c0J1ZmZlckJpbmRpbmd9KSBAZ3JvdXAoMCkgdmFyPHN0b3JhZ2UsIHJlYWQ+IGludmVyc2VCaW5kTWF0cmljZXNVbmlmb3JtIDogSW52ZXJzZUJpbmRNYXRyaWNlc1VuaWZvcm07XHJcbiAgICAgICAgZm4gZ2V0U2tpbk1hdHJpeChqb2ludHM6IHZlYzRmLCB3ZWlnaHRzOiB2ZWM0ZikgLT4gbWF0NHg0PGYzMj4ge1xyXG4gICAgICAgICAgICBsZXQgam9pbnQwID0gam9pbnRzVW5pZm9ybS5tYXRyaXhzW3UzMihqb2ludHMueCldICogaW52ZXJzZUJpbmRNYXRyaWNlc1VuaWZvcm0ubWF0cml4c1t1MzIoam9pbnRzLngpXTtcclxuICAgICAgICAgICAgbGV0IGpvaW50MSA9IGpvaW50c1VuaWZvcm0ubWF0cml4c1t1MzIoam9pbnRzLnkpXSAqIGludmVyc2VCaW5kTWF0cmljZXNVbmlmb3JtLm1hdHJpeHNbdTMyKGpvaW50cy55KV07XHJcbiAgICAgICAgICAgIGxldCBqb2ludDIgPSBqb2ludHNVbmlmb3JtLm1hdHJpeHNbdTMyKGpvaW50cy56KV0gKiBpbnZlcnNlQmluZE1hdHJpY2VzVW5pZm9ybS5tYXRyaXhzW3UzMihqb2ludHMueildO1xyXG4gICAgICAgICAgICBsZXQgam9pbnQzID0gam9pbnRzVW5pZm9ybS5tYXRyaXhzW3UzMihqb2ludHMudyldICogaW52ZXJzZUJpbmRNYXRyaWNlc1VuaWZvcm0ubWF0cml4c1t1MzIoam9pbnRzLncpXTtcclxuICAgICAgICBcclxuICAgICAgICAgICAgbGV0IHNraW5NYXRyaXggPSBqb2ludDAgKiB3ZWlnaHRzLnggK1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgam9pbnQxICogd2VpZ2h0cy55ICtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGpvaW50MiAqIHdlaWdodHMueiArXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBqb2ludDMgKiB3ZWlnaHRzLnc7XHJcbiAgICAgICAgICAgIHJldHVybiBza2luTWF0cml4O1xyXG4gICAgICAgIH1cclxuICAgICAgICAjZW5kaWZcclxuICAgYDtcclxufVxyXG5leHBvcnQgZnVuY3Rpb24gc2tpblZlcnRIZWFkZXIoZGVmaW5lcykge1xyXG5cdHJldHVybiB3Z3NsUGFyc2VEZWZpbmVzYFxyXG4gICAjaWYgJHtkZWZpbmVzLkhBU19TS0lOfSBcclxuICAgICAgICBzdHJ1Y3QgSm9pbnRzVW5pZm9ybXtcclxuICAgICAgICAgICAgIG1hdHJpeHM6YXJyYXk8bWF0NHg0Zj4sXHJcbiAgICAgICAgfVxyXG4gICAgICAgIHN0cnVjdCBJbnZlcnNlQmluZE1hdHJpY2VzVW5pZm9ybXtcclxuICAgICAgICAgICAgbWF0cml4czphcnJheTxtYXQ0eDRmPixcclxuICAgICAgICB9XHJcbiAgICAgICAgQGJpbmRpbmcoJHtkZWZpbmVzLnNraW5Kb2ludHNCdWZmZXJCaW5kaW5nfSkgQGdyb3VwKDApIHZhcjxzdG9yYWdlLCByZWFkPiBqb2ludHNVbmlmb3JtIDogSm9pbnRzVW5pZm9ybTtcclxuICAgICAgICBAYmluZGluZygke2RlZmluZXMuaW52c0J1ZmZlckJpbmRpbmd9KSBAZ3JvdXAoMCkgdmFyPHN0b3JhZ2UsIHJlYWQ+IGludmVyc2VCaW5kTWF0cmljZXNVbmlmb3JtIDogSW52ZXJzZUJpbmRNYXRyaWNlc1VuaWZvcm07XHJcbiAgICAgICAgZm4gZ2V0U2tpbk1hdHJpeChqb2ludHM6IHZlYzRmLCB3ZWlnaHRzOiB2ZWM0ZikgLT4gbWF0NHg0PGYzMj4ge1xyXG4gICAgICAgICAgICBsZXQgam9pbnQwID0gam9pbnRzVW5pZm9ybS5tYXRyaXhzW3UzMihqb2ludHMueCldICogaW52ZXJzZUJpbmRNYXRyaWNlc1VuaWZvcm0ubWF0cml4c1t1MzIoam9pbnRzLngpXTtcclxuICAgICAgICAgICAgbGV0IGpvaW50MSA9IGpvaW50c1VuaWZvcm0ubWF0cml4c1t1MzIoam9pbnRzLnkpXSAqIGludmVyc2VCaW5kTWF0cmljZXNVbmlmb3JtLm1hdHJpeHNbdTMyKGpvaW50cy55KV07XHJcbiAgICAgICAgICAgIGxldCBqb2ludDIgPSBqb2ludHNVbmlmb3JtLm1hdHJpeHNbdTMyKGpvaW50cy56KV0gKiBpbnZlcnNlQmluZE1hdHJpY2VzVW5pZm9ybS5tYXRyaXhzW3UzMihqb2ludHMueildO1xyXG4gICAgICAgICAgICBsZXQgam9pbnQzID0gam9pbnRzVW5pZm9ybS5tYXRyaXhzW3UzMihqb2ludHMudyldICogaW52ZXJzZUJpbmRNYXRyaWNlc1VuaWZvcm0ubWF0cml4c1t1MzIoam9pbnRzLncpXTtcclxuICAgICAgICBcclxuICAgICAgICAgICAgbGV0IHNraW5NYXRyaXggPSBqb2ludDAgKiB3ZWlnaHRzLnggK1xyXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgam9pbnQxICogd2VpZ2h0cy55ICtcclxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGpvaW50MiAqIHdlaWdodHMueiArXHJcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBqb2ludDMgKiB3ZWlnaHRzLnc7XHJcbiAgICAgICAgICAgIHJldHVybiBza2luTWF0cml4O1xyXG4gICAgICAgIH1cclxuICAgICAgICAjZW5kaWZcclxuICAgYDtcclxufVxyXG5leHBvcnQgZnVuY3Rpb24gc2tpblZlcnRNYWluKGRlZmluZXMpIHtcclxuXHRyZXR1cm4gd2dzbFBhcnNlRGVmaW5lc2BcclxuICAgICAgICAjaWYgJHtkZWZpbmVzLkhBU19TS0lOfVxyXG4gICAgICAgICAgICBtb2RlbE1hdHJpeCA9Z2V0U2tpbk1hdHJpeChpbnB1dC5qb2ludDAsaW5wdXQud2VpZ2h0MCk7XHJcbiAgICAgICAgICAgIHZOb3JtYWxWaWV3ID0gbm9ybWFsaXplKChtYXRlcmlhbFVuaWZvcm0ubm9ybWFsTWF0cml4ICogbW9kZWxNYXRyaXggKiB2ZWM0PGYzMj4oaW5wdXQubm9ybWFsLCAwLjApKS54eXopO1xyXG4gICAgICAgICNlbmRpZlxyXG4gIGA7XHJcbn1cclxuIiwiaW1wb3J0IHsgd2dzbFBhcnNlRGVmaW5lcyB9IGZyb20gXCIuLi8uLi9XZ3NsUHJlcHJvY2Vzc29yXCI7XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gUGJyTWF0ZXJpYWxTdHJ1Y3QoZGVmaW5lcykge1xyXG5cdHJldHVybiB3Z3NsUGFyc2VEZWZpbmVzYFxyXG4gICAgc3RydWN0IE1hdGVyaWFsVW5pZm9ybSB7XHJcbiAgICAgICAgICBtb2RlbE1hdHJpeDogbWF0NHg0PGYzMj4sXHJcbiAgICAgICAgICBjb2xvcjogdmVjMzxmMzI+LFxyXG4gICAgICAgICAgb3BhY2l0eTpmMzIsXHJcbiAgICAgICAgICBub3JtYWxNYXRyaXg6IG1hdDR4NDxmMzI+LFxyXG4gICAgICAgICAgZW1pc3NpdmU6dmVjMzxmMzI+LFxyXG4gICAgICAgICAgbWV0YWxsaWM6ZjMyLFxyXG4gICAgICAgICAgcm91Z2huZXNzOmYzMixcclxuICAgICAgICAgICNpZiAke2RlZmluZXMuVVNFX05PUk1BTFRFWFRVUkV9XHJcbiAgICAgICAgICAgICAgbm9ybWFsVGV4dHVyZVNjYWxlOnZlYzI8ZjMyPixcclxuICAgICAgICAgICNlbmRpZlxyXG4gICAgICAgICAgI2lmICR7ZGVmaW5lcy5VU0VfQU9URVhUVVJFfVxyXG4gICAgICAgICAgICAgIG9jY2x1c2lvblN0cmVuZ3RoOmYzMixcclxuICAgICAgICAgICNlbmRpZlxyXG4gICAgICB9XHJcbiAgIGA7XHJcbn1cclxuIiwiaW1wb3J0IHsgRnJhZ0lucHV0IH0gZnJvbSBcIi4vYXR0cmlidXRlL0ZyYWdJbnB1dFwiO1xyXG5pbXBvcnQgeyBQb2ludEZyYWdJbnB1dCB9IGZyb20gXCIuL2F0dHJpYnV0ZS9Qb2ludEZyYWdJbnB1dFwiO1xyXG5pbXBvcnQgeyBQb2ludFZlcnRJbnB1dCB9IGZyb20gXCIuL2F0dHJpYnV0ZS9Qb2ludFZlcnRJbnB1dFwiO1xyXG5pbXBvcnQgeyBQb2ludFZlcnRPdXRwdXQgfSBmcm9tIFwiLi9hdHRyaWJ1dGUvUG9pbnRWZXJ0T3V0cHV0XCI7XHJcbmltcG9ydCB7IFZlcnRleElucHV0IH0gZnJvbSBcIi4vYXR0cmlidXRlL1ZlcnRleElucHV0XCI7XHJcbmltcG9ydCB7IFZlcnRleE91dHB1dCB9IGZyb20gXCIuL2F0dHJpYnV0ZS9WZXJ0ZXhPdXRwdXRcIjtcclxuaW1wb3J0IHsgU3lzdGVtVW5pZm9ybSB9IGZyb20gXCIuL2NvbW1vbi9TeXN0ZW1Vbmlmb3JtXCI7XHJcbmltcG9ydCB7IFRleHR1cmVBbmRTYW1wbGVyRGVmaW5lIH0gZnJvbSBcIi4vY29tbW9uL1RleHR1cmVBbmRTYW1wbGVyRGVmaW5lXCI7XHJcbmltcG9ydCBlbnZpcm9ubWVudCBmcm9tIFwiLi9lbnZpcm9ubWVudC9lbnZpcm9ubWVudFwiO1xyXG5pbXBvcnQgeyBpbnN0YW5jZVZlcnRIZWFkZXIsIGluc3RhbmNlVmVydE1haW4gfSBmcm9tIFwiLi9pbnN0YW5jZS9JbnN0YW5jZVwiO1xyXG5pbXBvcnQgbGlnaHQgZnJvbSBcIi4vbGlnaHQvbGlnaHRcIjtcclxuaW1wb3J0IGxpZ2h0Q29tbW9uIGZyb20gXCIuL2xpZ2h0L2xpZ2h0Q29tbW9uXCI7XHJcbmltcG9ydCB7IGdldE5vcm1hbEJ5Tm9ybWFsVGV4dHVyZSwgZ2V0VEJOLCBnZXROb3JtYWwgfSBmcm9tIFwiLi9ub3JtYWwvZ2V0Tm9ybWFsQmFja1VwXCI7XHJcbmltcG9ydCBicmRmIGZyb20gXCIuL3Bici9icmRmXCI7XHJcbmltcG9ydCBpYmwgZnJvbSBcIi4vcGJyL2libFwiO1xyXG5pbXBvcnQgcGJyRnVuY3Rpb24gZnJvbSBcIi4vcGJyL3BickZ1bmN0aW9uXCI7XHJcbmltcG9ydCBwYnJTdHJ1Y3QgZnJvbSBcIi4vcGJyL3BiclN0cnVjdFwiO1xyXG5pbXBvcnQgcGJyVGV4dHVyZSBmcm9tIFwiLi9wYnIvcGJyVGV4dHVyZVwiO1xyXG5pbXBvcnQgcGJyVXRpbHMgZnJvbSBcIi4vcGJyL3BiclV0aWxzXCI7XHJcbmltcG9ydCBibGlubl9waG9uZyBmcm9tIFwiLi9waG9uZy9ibGlubl9waG9uZ1wiO1xyXG5pbXBvcnQgcGhvbmdGdW5jdGlvbiBmcm9tIFwiLi9waG9uZy9waG9uZ0Z1bmN0aW9uXCI7XHJcbmltcG9ydCBwaG9uZ1V0aWxzIGZyb20gXCIuL3Bob25nL3Bob25nVXRpbHNcIjtcclxuLy8gaW1wb3J0IGdldE5vcm1hbCBmcm9tIFwiLi9ub3JtYWwvZ2V0Tm9ybWFsXCI7XHJcbmltcG9ydCB7IHNraW5WZXJ0SGVhZGVyLCBza2luVmVydE1haW4gfSBmcm9tIFwiLi9za2luL1NraW5WZXJ0XCI7XHJcbmltcG9ydCB7IFBick1hdGVyaWFsU3RydWN0IH0gZnJvbSBcIi4vc3RydWN0L1Bick1hdGVyaWFsU3RydWN0XCI7XHJcbmNvbnN0IFNoYWRlckNodW5rID0ge1xyXG5cdGxpZ2h0LFxyXG5cdGJyZGYsXHJcblx0cGhvbmdGdW5jdGlvbixcclxuXHRwaG9uZ1V0aWxzLFxyXG5cdGxpZ2h0Q29tbW9uLFxyXG5cdHBiclN0cnVjdCxcclxuXHRwYnJGdW5jdGlvbixcclxuXHRwYnJUZXh0dXJlLFxyXG5cdHBiclV0aWxzLFxyXG5cdGVudmlyb25tZW50LFxyXG5cdGJsaW5uX3Bob25nLFxyXG5cdGdldE5vcm1hbCxcclxuXHRnZXRUQk4sXHJcblx0Z2V0Tm9ybWFsQnlOb3JtYWxUZXh0dXJlLFxyXG5cdGlibCxcclxuXHRza2luVmVydE1haW4sXHJcblx0c2tpblZlcnRIZWFkZXIsXHJcblx0RnJhZ0lucHV0LFxyXG5cdFZlcnRleElucHV0LFxyXG5cdFZlcnRleE91dHB1dCxcclxuXHRQYnJNYXRlcmlhbFN0cnVjdCxcclxuXHRTeXN0ZW1Vbmlmb3JtLFxyXG5cdGluc3RhbmNlVmVydE1haW4sXHJcblx0aW5zdGFuY2VWZXJ0SGVhZGVyLFxyXG5cdFRleHR1cmVBbmRTYW1wbGVyRGVmaW5lLFxyXG5cdFBvaW50VmVydElucHV0LFxyXG5cdFBvaW50VmVydE91dHB1dCxcclxuXHRQb2ludEZyYWdJbnB1dFxyXG59O1xyXG5leHBvcnQgZGVmYXVsdCBTaGFkZXJDaHVuaztcclxuIiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gc2hhZG93TWFwRGVidWdnZXJGcmFnKGRlZmluZXMpIHtcclxuXHRyZXR1cm4gYFxyXG4gICAgQGdyb3VwKDApIEBiaW5kaW5nKDEpIHZhciBzaGFkb3dTYW1wbGVyOiBzYW1wbGVyO1xyXG4gICAgQGdyb3VwKDApIEBiaW5kaW5nKDApIHZhciBzaGFkb3dNYXA6IHRleHR1cmVfZGVwdGhfMmQ7XHJcbiAgICBcclxuICAgIC8vIEBncm91cCgwKSBAYmluZGluZygwKSB2YXIgc2hhZG93TWFwOiB0ZXh0dXJlX2RlcHRoXzJkX2FycmF5O1xyXG4gICAgLy8gQGdyb3VwKDApIEBiaW5kaW5nKDApIHZhciBzaGFkb3dNYXA6IHRleHR1cmVfMmQ8ZjMyPjtcclxuXHJcbiAgICBzdHJ1Y3QgVmVydGV4T3V0cHV0IHtcclxuICAgICAgICBAYnVpbHRpbihwb3NpdGlvbikgcG9zaXRpb246IHZlYzQ8ZjMyPixcclxuICAgICAgICBAbG9jYXRpb24oMCkgdXY6IHZlYzI8ZjMyPixcclxuICAgIH07XHJcblxyXG4gICAgZm4gbGluZWFyaXplRGVwdGgoZGVwdGg6IGYzMiwgbmVhcjogZjMyLCBmYXI6IGYzMiktPmYzMiB7XHJcbiAgICAgIHJldHVybiAyICogKG5lYXIgKiBmYXIpIC8gKGZhciArIG5lYXIgLSBkZXB0aCAqIChmYXIgLSBuZWFyKSk7XHJcbiAgICB9XHJcblxyXG4gICAgQGZyYWdtZW50XHJcbiAgICBmbiBtYWluKGlucHV0OlZlcnRleE91dHB1dCkgLT4gQGxvY2F0aW9uKDApIHZlYzQ8ZjMyPiB7XHJcblx0XHRcdGxldCBjb2xvcjogdmVjNDxmMzI+ID0gdGV4dHVyZUdhdGhlcihzaGFkb3dNYXAsIHNoYWRvd1NhbXBsZXIsIHZlYzI8ZjMyPihpbnB1dC51di54LDEuMC1pbnB1dC51di55KSk7XHJcbiAgICAgIGxldCBkZXB0aCA9IChsaW5lYXJpemVEZXB0aChjb2xvci5yLCAwLjEsIDUwMCkgLSAwLjEpIC8gKDUwMCAtIDAuMSk7XHJcbiAgICAgIHJldHVybiB2ZWM0KHZlYzMoZGVwdGgpLCAxLjApOyAvLyBQZXJzcGVjdGl2ZUNhbWVyYVxyXG4gICAgICAvLyByZXR1cm4gY29sb3I7XHJcblxyXG4gICAgICAvLyByZXR1cm4gdGV4dHVyZVNhbXBsZShzaGFkb3dNYXAsIHNoYWRvd1NhbXBsZXIsIHZlYzI8ZjMyPihpbnB1dC51di54LDEuMC1pbnB1dC51di55KSk7XHJcblxyXG4gICAgfVxyXG4gICAgYDtcclxufVxyXG4iLCJleHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBzaGFkb3dNYXBEZWJ1Z2dlclZlcnQoZGVmaW5lcykge1xyXG5cdHJldHVybiBgXHJcbiAgICBzdHJ1Y3QgVmVydGV4SW5wdXQge1xyXG4gICAgICAgICBAbG9jYXRpb24oJHtkZWZpbmVzLnBvc2l0aW9uTG9jYXRpb259KSBwb3NpdGlvbjogdmVjMjxmMzI+LCAgICAgICBcclxuICAgIH1cclxuICAgIHN0cnVjdCBWZXJ0ZXhPdXRwdXQge1xyXG4gICAgICAgICBAYnVpbHRpbihwb3NpdGlvbikgcG9zaXRpb246IHZlYzQ8ZjMyPixcclxuICAgICAgICAgQGxvY2F0aW9uKDApIHV2OiB2ZWMyPGYzMj4sXHJcbiAgICAgfTtcclxuICAgIEB2ZXJ0ZXhcclxuICAgIGZuIG1haW4oaW5wdXQ6IFZlcnRleElucHV0KSAtPiBWZXJ0ZXhPdXRwdXQge1xyXG4gICAgIHZhciBvdXRwdXQ6VmVydGV4T3V0cHV0O1xyXG4gICAgIG91dHB1dC51diA9IGlucHV0LnBvc2l0aW9uICogMC41ICsgMC41O1xyXG4gICAgIG91dHB1dC5wb3NpdGlvbiA9IHZlYzQ8ZjMyPihpbnB1dC5wb3NpdGlvbiwgMC4wLCAxLjApOztcclxuICAgICByZXR1cm4gb3V0cHV0O1xyXG4gICAgfVxyXG4gICAgYDtcclxufVxyXG4iLCIvLyBpbXBvcnQgQ29sb3IgZnJvbSBcIi4uLy4uL21hdGgvQ29sb3JcIjtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IGZ1bmN0aW9uIHNoYWRvd01hcEZyYWcoZGVmaW5lcykge1xyXG5cdHJldHVybiBgXHJcbiAgICBzdHJ1Y3QgVmVydGV4T3V0cHV0IHtcclxuICAgICAgICBAYnVpbHRpbihwb3NpdGlvbikgcG9zaXRpb246IHZlYzQ8ZjMyPixcclxuICAgICAgICBAbG9jYXRpb24oMCkgY29sb3I6IHZlYzQ8ZjMyPixcclxuICAgIH07XHJcbiAgICBAZnJhZ21lbnRcclxuICAgIGZuIG1haW4oaW5wdXQ6VmVydGV4T3V0cHV0KSAtPiBAbG9jYXRpb24oMCkgdmVjNDxmMzI+IHtcclxuICAgICAgcmV0dXJuIGlucHV0LmNvbG9yO1xyXG4gICAgfVxyXG4gICAgYDtcclxufVxyXG4iLCJpbXBvcnQgeyB3Z3NsUGFyc2VEZWZpbmVzIH0gZnJvbSBcIi4uLy4uL1dnc2xQcmVwcm9jZXNzb3JcIjtcclxuZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gc2hhZG93TWFwVmVydChkZWZpbmVzKSB7XHJcblx0cmV0dXJuIHdnc2xQYXJzZURlZmluZXNgXHJcbiAgIHN0cnVjdCBWZXJ0ZXhJbnB1dCB7XHJcbiAgICAgIEBsb2NhdGlvbigke2RlZmluZXMucG9zaXRpb25Mb2NhdGlvbn0pIHBvc2l0aW9uOiB2ZWMzPGYzMj4sICAgICAgIFxyXG4gICB9O1xyXG4gICBzdHJ1Y3QgVmVydGV4T3V0cHV0IHtcclxuICAgICAgQGJ1aWx0aW4ocG9zaXRpb24pIHBvc2l0aW9uOiB2ZWM0PGYzMj4sXHJcbiAgICB9O1xyXG4gICBzdHJ1Y3QgU2VsZlVuaWZvcm0ge1xyXG4gICAgICBtb2RlbE1hdHJpeDogbWF0NHg0PGYzMj4sXHJcbiAgIH07XHJcbiAgIHN0cnVjdCBTeXN0ZW1Vbmlmb3JtIHtcclxuICAgICAgcHJvamVjdGlvbk1hdHJpeDogbWF0NHg0PGYzMj4sXHJcbiAgICAgIHZpZXdNYXRyaXg6IG1hdDR4NDxmMzI+LFxyXG4gICAgICBpbnZlcnNlVmlld01hdHJpeDogbWF0NHg0PGYzMj4sXHJcbiAgICAgIGNhbWVyYVBvc2l0aW9uOiB2ZWMzPGYzMj4sXHJcbiAgIH07XHJcblxyXG4gICAjaWYgJHtkZWZpbmVzLmlzUG9pbnRMaWdodFNoYWRvd01hcH1cclxuICAgICAgc3RydWN0IFBvaW50TGlnaHRVbmlmb3JtIHtcclxuICAgICAgICAgdnBNYXRyaXg6IG1hdDR4NDxmMzI+LFxyXG4gICAgICAgICAvLyB2cE1hdHJpeEFycmF5OiBhcnJheTxtYXQ0eDQ8ZjMyPiwgNj4sXHJcbiAgICAgIH07XHJcbiAgICAgIEBncm91cCgxKSBAYmluZGluZygke2RlZmluZXMucG9pbnRMaWdodFNoYWRvd0NhbWVyYUJpbmRpbmd9KSB2YXI8c3RvcmFnZSwgcmVhZD4gcG9pbnRMaWdodFVuaWZvcm06IFBvaW50TGlnaHRVbmlmb3JtO1xyXG4gICAjZW5kaWZcclxuXHJcbiAgIEBncm91cCgwKSBAYmluZGluZygke2RlZmluZXMuc2VsZkJpbmRpbmd9KSB2YXI8dW5pZm9ybT4gc2VsZlVuaWZvcm0gOiBTZWxmVW5pZm9ybTtcclxuICAgQGdyb3VwKDEpIEBiaW5kaW5nKCR7ZGVmaW5lcy5jYW1lcmFCaW5kaW5nfSkgdmFyPHVuaWZvcm0+IHN5c3RlbVVuaWZvcm0gOiBTeXN0ZW1Vbmlmb3JtO1xyXG5cclxuICAgQHZlcnRleFxyXG4gICBmbiBtYWluKGlucHV0OiBWZXJ0ZXhJbnB1dCkgLT4gVmVydGV4T3V0cHV0IHtcclxuICAgICAgdmFyIG91dHB1dDpWZXJ0ZXhPdXRwdXQ7XHJcbiAgICAgICNpZiAke2RlZmluZXMuaXNQb2ludExpZ2h0U2hhZG93TWFwfVxyXG4gICAgICAgICBvdXRwdXQucG9zaXRpb24gPSBwb2ludExpZ2h0VW5pZm9ybS52cE1hdHJpeCAqIHNlbGZVbmlmb3JtLm1vZGVsTWF0cml4ICogdmVjNDxmMzI+KGlucHV0LnBvc2l0aW9uLDEuMCk7XHJcbiAgICAgICNlbHNlXHJcbiAgICAgICAgIG91dHB1dC5wb3NpdGlvbiA9IHN5c3RlbVVuaWZvcm0ucHJvamVjdGlvbk1hdHJpeCAqIHN5c3RlbVVuaWZvcm0udmlld01hdHJpeCAqIHNlbGZVbmlmb3JtLm1vZGVsTWF0cml4ICogdmVjNDxmMzI+KGlucHV0LnBvc2l0aW9uLDEuMCk7XHJcbiAgICAgICNlbmRpZlxyXG4gICAgICByZXR1cm4gb3V0cHV0O1xyXG4gICB9XHJcbiAgIGA7XHJcbn1cclxuIiwiaW1wb3J0IGNvbG9yRnJhZyBmcm9tIFwiLi9tYXRlcmlhbC9jb2xvckZyYWdcIjtcclxuaW1wb3J0IGNvbG9yVmVydCBmcm9tIFwiLi9tYXRlcmlhbC9jb2xvclZlcnRcIjtcclxuaW1wb3J0IHBicl9mcyBmcm9tIFwiLi9tYXRlcmlhbC9wYnJfZnNcIjtcclxuaW1wb3J0IHBicl92cyBmcm9tIFwiLi9tYXRlcmlhbC9wYnJfdnNcIjtcclxuaW1wb3J0IHBickZyYWcgZnJvbSBcIi4vbWF0ZXJpYWwvcGJyRnJhZ1wiO1xyXG5pbXBvcnQgcGJyVmVydCBmcm9tIFwiLi9tYXRlcmlhbC9wYnJWZXJ0XCI7XHJcbmltcG9ydCBwaG9uZ0ZyYWcgZnJvbSBcIi4vbWF0ZXJpYWwvcGhvbmdGcmFnXCI7XHJcbmltcG9ydCBwaG9uZ1ZlcnQgZnJvbSBcIi4vbWF0ZXJpYWwvcGhvbmdWZXJ0XCI7XHJcbmltcG9ydCB7IHBvaW50X2ZzIH0gZnJvbSBcIi4vbWF0ZXJpYWwvcG9pbnRfZnNcIjtcclxuaW1wb3J0IHsgcG9pbnRfdnMgfSBmcm9tIFwiLi9tYXRlcmlhbC9wb2ludF92c1wiO1xyXG5pbXBvcnQgcXVhZEZyYWcgZnJvbSBcIi4vbWF0ZXJpYWwvcXVhZEZyYWdcIjtcclxuaW1wb3J0IHF1YWRWZXJ0IGZyb20gXCIuL21hdGVyaWFsL3F1YWRWZXJ0XCI7XHJcbmltcG9ydCBza3lCb3hGcmFnIGZyb20gXCIuL21hdGVyaWFsL3NreUJveEZyYWdcIjtcclxuaW1wb3J0IHNreUJveFZlcnQgZnJvbSBcIi4vbWF0ZXJpYWwvc2t5Qm94VmVydFwiO1xyXG5pbXBvcnQgeyBzcHJpdGVfZnMgfSBmcm9tIFwiLi9tYXRlcmlhbC9zcHJpdGVfZnNcIjtcclxuaW1wb3J0IHsgc3ByaXRlX3ZzIH0gZnJvbSBcIi4vbWF0ZXJpYWwvc3ByaXRlX3ZzXCI7XHJcbmltcG9ydCBibGVuZEZyYWcgZnJvbSBcIi4vcG9zdFByb2Nlc3MvYmxlbmQvYmxlbmRGcmFnXCI7XHJcbmltcG9ydCBCbHVyIGZyb20gXCIuL3Bvc3RQcm9jZXNzL2Jsb29tL0JsdXJcIjtcclxuaW1wb3J0IEx1bWlub3NpdHlIaWdoIGZyb20gXCIuL3Bvc3RQcm9jZXNzL2Jsb29tL0x1bWlub3NpdHlIaWdoXCI7XHJcbmltcG9ydCBTaGFkZXJDaHVuayBmcm9tIFwiLi9zaGFkZXJDaHVuay9TaGFkZXJDaHVua1wiO1xyXG5pbXBvcnQgc2hhZG93TWFwRGVidWdnZXJGcmFnIGZyb20gXCIuL3NoYWRlckNodW5rL3NoYWRvdy9zaGFkb3dNYXBEZWJ1Z2dlckZyYWdcIjtcclxuaW1wb3J0IHNoYWRvd01hcERlYnVnZ2VyVmVydCBmcm9tIFwiLi9zaGFkZXJDaHVuay9zaGFkb3cvc2hhZG93TWFwRGVidWdnZXJWZXJ0XCI7XHJcbmltcG9ydCBzaGFkb3dNYXBGcmFnIGZyb20gXCIuL3NoYWRlckNodW5rL3NoYWRvdy9zaGFkb3dNYXBGcmFnXCI7XHJcbmltcG9ydCBzaGFkb3dNYXBWZXJ0IGZyb20gXCIuL3NoYWRlckNodW5rL3NoYWRvdy9zaGFkb3dNYXBWZXJ0XCI7XHJcblxyXG5mdW5jdGlvbiByZWR1Y2VDb21tYShzaGFkZXIpIHtcclxuXHQvLyDlr7nmiYDmnInnmoRpbmNsdWRl5aSE55CGXHJcblx0cmV0dXJuIHNoYWRlciAhPSB1bmRlZmluZWQgPyByZXNvbHZlSW5jbHVkZXMoc2hhZGVyKSA6IHVuZGVmaW5lZDtcclxufVxyXG5jb25zdCBpbmNsdWRlUGF0dGVybiA9IC9eWyBcXHRdKiNpbmNsdWRlICs8KFtcXHdcXGQuL10rKT4vZ207XHJcbmxldCBjdXJyZW50RGVmaW5lcyA9IHt9O1xyXG5jb25zdCBzaGFkZXJzID0ge1xyXG5cdHBob25nOiB7XHJcblx0XHRmcmFnOiBwaG9uZ0ZyYWcsXHJcblx0XHR2ZXJ0OiBwaG9uZ1ZlcnRcclxuXHR9LFxyXG5cdGNvbG9yOiB7XHJcblx0XHRmcmFnOiBjb2xvckZyYWcsXHJcblx0XHR2ZXJ0OiBjb2xvclZlcnRcclxuXHR9LFxyXG5cdHBicjoge1xyXG5cdFx0ZnJhZzogcGJyRnJhZyxcclxuXHRcdHZlcnQ6IHBiclZlcnRcclxuXHR9LFxyXG5cdHNreWJveDoge1xyXG5cdFx0ZnJhZzogc2t5Qm94RnJhZyxcclxuXHRcdHZlcnQ6IHNreUJveFZlcnRcclxuXHR9LFxyXG5cdHJlc29sdmU6IHtcclxuXHRcdGZyYWc6IHF1YWRGcmFnLFxyXG5cdFx0dmVydDogcXVhZFZlcnRcclxuXHR9LFxyXG5cdHBicl9tYXQ6IHtcclxuXHRcdGZyYWc6IHBicl9mcyxcclxuXHRcdHZlcnQ6IHBicl92c1xyXG5cdH0sXHJcblx0Ymx1cjoge1xyXG5cdFx0ZnJhZzogQmx1cixcclxuXHRcdHZlcnQ6IHF1YWRWZXJ0XHJcblx0fSxcclxuXHRsdW1pbm9zaXR5SGlnaDoge1xyXG5cdFx0ZnJhZzogTHVtaW5vc2l0eUhpZ2gsXHJcblx0XHR2ZXJ0OiBxdWFkVmVydFxyXG5cdH0sXHJcblx0YmxlbmQ6IHtcclxuXHRcdGZyYWc6IGJsZW5kRnJhZyxcclxuXHRcdHZlcnQ6IHF1YWRWZXJ0XHJcblx0fSxcclxuXHRzaGFkb3dNYXBEZWJ1Z2dlcjoge1xyXG5cdFx0ZnJhZzogc2hhZG93TWFwRGVidWdnZXJGcmFnLFxyXG5cdFx0dmVydDogc2hhZG93TWFwRGVidWdnZXJWZXJ0XHJcblx0fSxcclxuXHRzaGFkb3dNYXA6IHtcclxuXHRcdHZlcnQ6IHNoYWRvd01hcFZlcnQsXHJcblx0XHRmcmFnOiBzaGFkb3dNYXBGcmFnXHJcblx0fSxcclxuXHRzcHJpdGU6IHtcclxuXHRcdHZlcnQ6IHNwcml0ZV92cyxcclxuXHRcdGZyYWc6IHNwcml0ZV9mc1xyXG5cdH0sXHJcblx0cG9pbnQ6IHtcclxuXHRcdHZlcnQ6IHBvaW50X3ZzLFxyXG5cdFx0ZnJhZzogcG9pbnRfZnNcclxuXHR9XHJcbn07XHJcblxyXG5mdW5jdGlvbiByZXNvbHZlSW5jbHVkZXMoc3RyaW5nKSB7XHJcblx0cmV0dXJuIHN0cmluZy5yZXBsYWNlKGluY2x1ZGVQYXR0ZXJuLCBpbmNsdWRlUmVwbGFjZXIpO1xyXG59XHJcblxyXG5mdW5jdGlvbiBpbmNsdWRlUmVwbGFjZXIobWF0Y2gsIGluY2x1ZGUpIHtcclxuXHRjb25zdCBleGN1dGUgPSBTaGFkZXJDaHVua1tpbmNsdWRlXTtcclxuXHRpZiAoZXhjdXRlID09PSB1bmRlZmluZWQpIHtcclxuXHRcdHRocm93IG5ldyBFcnJvcihgQ2FuIG5vdCByZXNvbHZlICNpbmNsdWRlIDwke2luY2x1ZGV9PmApO1xyXG5cdH1cclxuXHRjb25zdCByZXN1bHQgPSBleGN1dGUoY3VycmVudERlZmluZXMpO1xyXG5cdHJldHVybiByZXNvbHZlSW5jbHVkZXMocmVzdWx0KTtcclxufVxyXG5leHBvcnQgZGVmYXVsdCBmdW5jdGlvbiBnZXRWZXJ0RnJhZyh0eXBlLCBkZWZpbmVzID0ge30pIHtcclxuXHRjb25zdCBleGN1dGVGdW5jID0gc2hhZGVyc1t0eXBlXTtcclxuXHRjdXJyZW50RGVmaW5lcyA9IGRlZmluZXM7XHJcblx0cmV0dXJuIHtcclxuXHRcdHZlcnQ6IHJlZHVjZUNvbW1hKGV4Y3V0ZUZ1bmM/LnZlcnQoY3VycmVudERlZmluZXMpKSxcclxuXHRcdGZyYWc6IHJlZHVjZUNvbW1hKGV4Y3V0ZUZ1bmM/LmZyYWcoY3VycmVudERlZmluZXMpKVxyXG5cdH07XHJcbn1cclxuIiwiaW1wb3J0IHtcclxuXHRTaGFkZXJEZWZpbmUsXHJcblx0U2hhZGVyU3RyaW5nLFxyXG5cdGNvbXB1dGVQYXJhbXMsXHJcblx0cmVuZGVyUGFyYW1zLFxyXG5cdFNoYWRlck1vZHVsZSxcclxuXHRTaGFkZXJTb3VyY2VQYXJhbXMsXHJcblx0U2hhZGVyRnVuYyxcclxuXHRTaGFkZXJMYW5ndWFnZSxcclxuXHRTaGFkZXJNYWluU3RhZ2VcclxufSBmcm9tIFwiLi4vY29yZS9XZWJHUFVUeXBlc1wiO1xyXG5pbXBvcnQgZ2V0VmVydEZyYWcgZnJvbSBcIi4vU2hhZGVyc1wiO1xyXG5leHBvcnQgY2xhc3MgU2hhZGVyU291cmNlIHtcclxuXHRwdWJsaWMgY29tcHV0ZTogY29tcHV0ZVBhcmFtcztcclxuXHRwdWJsaWMgc3RhdGljIGdsc2xhbmc7XHJcblx0cHVibGljIHJlbmRlcjogcmVuZGVyUGFyYW1zO1xyXG5cdHB1YmxpYyBzaGFkZXJJZDogc3RyaW5nO1xyXG5cdHB1YmxpYyBkaXJ0eTogYm9vbGVhbjtcclxuXHRwdWJsaWMgZGVmaW5lcz86IFNoYWRlckRlZmluZTtcclxuXHRwcml2YXRlIF91aWQ6IHN0cmluZztcclxuXHRwcml2YXRlIF9zaGFkZXJNb2R1bGU6IFNoYWRlck1vZHVsZTtcclxuXHRwcml2YXRlIF9zaGFkZXJMYW5ndWFnZTogU2hhZGVyTGFuZ3VhZ2U7XHJcblx0Y29uc3RydWN0b3Iob3B0aW9uczogU2hhZGVyU291cmNlUGFyYW1zKSB7XHJcblx0XHR0aGlzLnNoYWRlcklkID0gb3B0aW9ucy5zaGFkZXJJZDtcclxuXHRcdHRoaXMuZGVmaW5lcyA9IG9wdGlvbnMuZGVmaW5lcyB8fCB7fTtcclxuXHRcdHRoaXMucmVuZGVyID0gb3B0aW9ucy5yZW5kZXI7XHJcblx0XHR0aGlzLmNvbXB1dGUgPSBvcHRpb25zLmNvbXB1dGU7XHJcblx0XHR0aGlzLl9zaGFkZXJMYW5ndWFnZSA9IG9wdGlvbnMubGFuZ3VhZ2U7XHJcblx0XHR0aGlzLmRpcnR5ID0gdHJ1ZTtcclxuXHR9XHJcblx0Z2V0IHVpZCgpIHtcclxuXHRcdHRoaXMuX3VpZCA9IHRoaXMuc2hhZGVySWQuY29uY2F0KEpTT04uc3RyaW5naWZ5KHRoaXMuZGVmaW5lcykpO1xyXG5cdFx0cmV0dXJuIHRoaXMuX3VpZDtcclxuXHR9XHJcblx0cHVibGljIHNldERlZmluZXMoZGVmaW5lcykge1xyXG5cdFx0aWYgKCFkZWZpbmVzKSByZXR1cm47XHJcblx0XHR0aGlzLmRpcnR5ID0gdHJ1ZTtcclxuXHRcdHRoaXMuZGVmaW5lcyA9IE9iamVjdC5hc3NpZ24odGhpcy5kZWZpbmVzLCBkZWZpbmVzKTtcclxuXHR9XHJcblx0cHVibGljIGdldFNoYWRlck1vZHVsZShkZXZpY2U6IEdQVURldmljZSk6IFNoYWRlck1vZHVsZSB7XHJcblx0XHRpZiAodGhpcy5kaXJ0eSkge1xyXG5cdFx0XHRjb25zdCB7IHZlcnQsIGZyYWcsIGNvbXB1dGUgfSA9IHRoaXMuZ2V0U2hhZGVyU3RyKCkgfHwge307XHJcblx0XHRcdGNvbnN0IGlzR0xTTCA9IHRoaXMuX3NoYWRlckxhbmd1YWdlID09IFNoYWRlckxhbmd1YWdlLkdMU0w7XHJcblx0XHRcdGNvbnN0IHZlcnRHUFVNb2R1bGUgPSB2ZXJ0XHJcblx0XHRcdFx0PyBkZXZpY2UuY3JlYXRlU2hhZGVyTW9kdWxlKHtcclxuXHRcdFx0XHRcdFx0Y29kZTogaXNHTFNMID8gU2hhZGVyU291cmNlPy5nbHNsYW5nLmNvbXBpbGVHTFNMKHZlcnQsIFNoYWRlck1haW5TdGFnZS5WRVJUKSA6IHZlcnRcclxuXHRcdFx0XHQgIH0pXHJcblx0XHRcdFx0OiB1bmRlZmluZWQ7XHJcblx0XHRcdGNvbnN0IGZyYWdHUFVNb2R1bGUgPSBmcmFnXHJcblx0XHRcdFx0PyBkZXZpY2UuY3JlYXRlU2hhZGVyTW9kdWxlKHtcclxuXHRcdFx0XHRcdFx0Y29kZTogaXNHTFNMID8gU2hhZGVyU291cmNlPy5nbHNsYW5nLmNvbXBpbGVHTFNMKGZyYWcsIFNoYWRlck1haW5TdGFnZS5GUkFHKSA6IGZyYWdcclxuXHRcdFx0XHQgIH0pXHJcblx0XHRcdFx0OiB1bmRlZmluZWQ7XHJcblx0XHRcdGNvbnN0IGNvbXB1dGVHUFVNb2R1bGUgPSBjb21wdXRlXHJcblx0XHRcdFx0PyBkZXZpY2UuY3JlYXRlU2hhZGVyTW9kdWxlKHtcclxuXHRcdFx0XHRcdFx0Y29kZTogaXNHTFNMID8gU2hhZGVyU291cmNlPy5nbHNsYW5nLmNvbXBpbGVHTFNMKGNvbXB1dGUsIFNoYWRlck1haW5TdGFnZS5DT01QVVRFKSA6IGNvbXB1dGVcclxuXHRcdFx0XHQgIH0pXHJcblx0XHRcdFx0OiB1bmRlZmluZWQ7XHJcblx0XHRcdHRoaXMuX3NoYWRlck1vZHVsZSA9IHtcclxuXHRcdFx0XHR2ZXJ0OiB2ZXJ0R1BVTW9kdWxlLFxyXG5cdFx0XHRcdGZyYWc6IGZyYWdHUFVNb2R1bGUsXHJcblx0XHRcdFx0Y29tcHV0ZTogY29tcHV0ZUdQVU1vZHVsZVxyXG5cdFx0XHR9O1xyXG5cdFx0XHR0aGlzLmRpcnR5ID0gZmFsc2U7XHJcblx0XHR9XHJcblx0XHRyZXR1cm4gdGhpcy5fc2hhZGVyTW9kdWxlO1xyXG5cdH1cclxuXHRwdWJsaWMgZGVzdHJveSgpIHtcclxuXHRcdHRoaXMucmVuZGVyID0gbnVsbDtcclxuXHRcdHRoaXMuY29tcHV0ZSA9IG51bGw7XHJcblx0XHR0aGlzLl9zaGFkZXJNb2R1bGUgPSBudWxsO1xyXG5cdFx0dGhpcy5kZWZpbmVzID0gbnVsbDtcclxuXHR9XHJcblx0cHJpdmF0ZSBnZXRTaGFkZXJTdHIoKTogU2hhZGVyU3RyaW5nIHtcclxuXHRcdGNvbnN0IHsgZnJhZ1NoYWRlciwgdmVydFNoYWRlciB9ID0gdGhpcy5yZW5kZXIgfHwge307XHJcblx0XHRjb25zdCB7IGNvbXB1dGVTaGFkZXIgfSA9IHRoaXMuY29tcHV0ZSB8fCB7fTtcclxuXHRcdGNvbnN0IHNvdXJjZSA9IGdldFZlcnRGcmFnKHRoaXMuc2hhZGVySWQsIHRoaXMuZGVmaW5lcyk7XHJcblx0XHRjb25zdCB2ZXJ0ID1cclxuXHRcdFx0c291cmNlPy52ZXJ0ID8/ICh2ZXJ0U2hhZGVyIGluc3RhbmNlb2YgRnVuY3Rpb24gPyAoPFNoYWRlckZ1bmM+dmVydFNoYWRlcikodGhpcy5kZWZpbmVzKSA6IHZlcnRTaGFkZXIpO1xyXG5cdFx0Y29uc3QgZnJhZyA9XHJcblx0XHRcdHNvdXJjZT8uZnJhZyA/PyAoZnJhZ1NoYWRlciBpbnN0YW5jZW9mIEZ1bmN0aW9uID8gKDxTaGFkZXJGdW5jPmZyYWdTaGFkZXIpKHRoaXMuZGVmaW5lcykgOiBmcmFnU2hhZGVyKTtcclxuXHRcdGNvbnN0IGNvbXB1dGUgPSBjb21wdXRlU2hhZGVyIGluc3RhbmNlb2YgRnVuY3Rpb24gPyAoY29tcHV0ZVNoYWRlciBhcyBTaGFkZXJGdW5jKSh0aGlzLmRlZmluZXMpIDogY29tcHV0ZVNoYWRlcjtcclxuXHRcdHJldHVybiB7XHJcblx0XHRcdHZlcnQsXHJcblx0XHRcdGZyYWcsXHJcblx0XHRcdGNvbXB1dGVcclxuXHRcdH07XHJcblx0fVxyXG5cdHN0YXRpYyByZXBsYWNlTWFpbihzb3VyY2U6IHN0cmluZywgcmVuYW1lZE1haW46IHN0cmluZykge1xyXG5cdFx0cmVuYW1lZE1haW4gPSBgdm9pZCAke3JlbmFtZWRNYWlufSgpYDtcclxuXHRcdHJldHVybiBzb3VyY2UucmVwbGFjZSgvdm9pZFxccyttYWluXFxzKlxcKFxccyooPzp2b2lkKT9cXHMqXFwpL2csIHJlbmFtZWRNYWluKTtcclxuXHR9XHJcbn1cclxuIiwiZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGxvYWRHbHNsYW5nTW9kdWxlKCk6IFByb21pc2U8YW55PiB7XHJcblx0Ly8gQHRzLWlnbm9yZVxyXG5cdGNvbnN0IGdsc2xhbmdNb2R1bGUgPSBhd2FpdCBpbXBvcnQoXCJodHRwczovL3VucGtnLmNvbS9Ad2ViZ3B1L2dsc2xhbmdAMC4wLjE1L2Rpc3Qvd2ViLWRldmVsL2dsc2xhbmcuanNcIik7XHJcblx0Y29uc3QgZ2xzbGFuZyA9IGF3YWl0IGdsc2xhbmdNb2R1bGUuZGVmYXVsdCgpO1xyXG5cdHJldHVybiBnbHNsYW5nO1xyXG59XHJcbiIsImltcG9ydCBUZXh0dXJlIGZyb20gXCIuLi9yZW5kZXIvVGV4dHVyZVwiO1xyXG5cclxuZXhwb3J0IGNsYXNzIE1pcG1hcEdlbmVyYXRvciB7XHJcblx0ZGV2aWNlOiBHUFVEZXZpY2U7XHJcblx0c2FtcGxlcjogR1BVU2FtcGxlcjtcclxuXHRwaXBlbGluZXM6IG9iamVjdDtcclxuXHRtaXBtYXBTaGFkZXJNb2R1bGU6IEdQVVNoYWRlck1vZHVsZTtcclxuXHRjb25zdHJ1Y3RvcihkZXZpY2UpIHtcclxuXHRcdHRoaXMuZGV2aWNlID0gZGV2aWNlO1xyXG5cdFx0dGhpcy5zYW1wbGVyID0gZGV2aWNlLmNyZWF0ZVNhbXBsZXIoeyBtaW5GaWx0ZXI6IFwibGluZWFyXCIgfSk7XHJcblx0XHQvLyBXZSdsbCBuZWVkIGEgbmV3IHBpcGVsaW5lIGZvciBldmVyeSB0ZXh0dXJlIGZvcm1hdCB1c2VkLlxyXG5cdFx0dGhpcy5waXBlbGluZXMgPSB7fTtcclxuXHR9XHJcblx0cHJpdmF0ZSBnZXRNaXBtYXBQaXBlbGluZShmb3JtYXQpIHtcclxuXHRcdGxldCBwaXBlbGluZSA9IHRoaXMucGlwZWxpbmVzW2Zvcm1hdF07XHJcblx0XHRpZiAoIXBpcGVsaW5lKSB7XHJcblx0XHRcdC8vIFNoYWRlciBtb2R1bGVzIGlzIHNoYXJlZCBiZXR3ZWVuIGFsbCBwaXBlbGluZXMsIHNvIG9ubHkgY3JlYXRlIG9uY2UuXHJcblx0XHRcdGlmICghdGhpcy5taXBtYXBTaGFkZXJNb2R1bGUpIHtcclxuXHRcdFx0XHR0aGlzLm1pcG1hcFNoYWRlck1vZHVsZSA9IHRoaXMuZGV2aWNlLmNyZWF0ZVNoYWRlck1vZHVsZSh7XHJcblx0XHRcdFx0XHRjb2RlOiBgXHJcbiAgICAgICAgICAgICAgdmFyPHByaXZhdGU+IHBvcyA6IGFycmF5PHZlYzI8ZjMyPiwgMz4gPSBhcnJheTx2ZWMyPGYzMj4sIDM+KFxyXG4gICAgICAgICAgICAgICAgdmVjMjxmMzI+KC0xLjAsIC0xLjApLCB2ZWMyPGYzMj4oLTEuMCwgMy4wKSwgdmVjMjxmMzI+KDMuMCwgLTEuMCkpO1xyXG4gICAgICAgICAgICAgIHN0cnVjdCBWZXJ0ZXhPdXRwdXQge1xyXG4gICAgICAgICAgICAgICAgQGJ1aWx0aW4ocG9zaXRpb24pIHBvc2l0aW9uIDogdmVjNDxmMzI+LFxyXG4gICAgICAgICAgICAgICAgQGxvY2F0aW9uKDApIHRleENvb3JkIDogdmVjMjxmMzI+LFxyXG4gICAgICAgICAgICAgIH07XHJcbiAgICAgICAgICAgICAgQHZlcnRleFxyXG4gICAgICAgICAgICAgIGZuIHZlcnRleE1haW4oQGJ1aWx0aW4odmVydGV4X2luZGV4KSB2ZXJ0ZXhJbmRleCA6IHUzMikgLT4gVmVydGV4T3V0cHV0IHtcclxuICAgICAgICAgICAgICAgIHZhciBvdXRwdXQgOiBWZXJ0ZXhPdXRwdXQ7XHJcbiAgICAgICAgICAgICAgICBvdXRwdXQudGV4Q29vcmQgPSBwb3NbdmVydGV4SW5kZXhdICogdmVjMjxmMzI+KDAuNSwgLTAuNSkgKyB2ZWMyPGYzMj4oMC41KTtcclxuICAgICAgICAgICAgICAgIG91dHB1dC5wb3NpdGlvbiA9IHZlYzQ8ZjMyPihwb3NbdmVydGV4SW5kZXhdLCAwLjAsIDEuMCk7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gb3V0cHV0O1xyXG4gICAgICAgICAgICAgIH1cclxuICAgICAgICAgICAgICBAZ3JvdXAoMCkgQGJpbmRpbmcoMCkgdmFyIGltZ1NhbXBsZXIgOiBzYW1wbGVyO1xyXG4gICAgICAgICAgICAgIEBncm91cCgwKSBAYmluZGluZygxKSB2YXIgaW1nIDogdGV4dHVyZV8yZDxmMzI+O1xyXG4gICAgICAgICAgICAgIEBmcmFnbWVudFxyXG4gICAgICAgICAgICAgIGZuIGZyYWdtZW50TWFpbihAbG9jYXRpb24oMCkgdGV4Q29vcmQgOiB2ZWMyPGYzMj4pIC0+IEBsb2NhdGlvbigwKSB2ZWM0PGYzMj4ge1xyXG4gICAgICAgICAgICAgICAgcmV0dXJuIHRleHR1cmVTYW1wbGUoaW1nLCBpbWdTYW1wbGVyLCB0ZXhDb29yZCk7XHJcbiAgICAgICAgICAgICAgfVxyXG4gICAgICAgICAgICBgXHJcblx0XHRcdFx0fSk7XHJcblx0XHRcdH1cclxuXHRcdFx0cGlwZWxpbmUgPSB0aGlzLmRldmljZS5jcmVhdGVSZW5kZXJQaXBlbGluZSh7XHJcblx0XHRcdFx0bGF5b3V0OiBcImF1dG9cIixcclxuXHRcdFx0XHR2ZXJ0ZXg6IHtcclxuXHRcdFx0XHRcdG1vZHVsZTogdGhpcy5taXBtYXBTaGFkZXJNb2R1bGUsXHJcblx0XHRcdFx0XHRlbnRyeVBvaW50OiBcInZlcnRleE1haW5cIlxyXG5cdFx0XHRcdH0sXHJcblx0XHRcdFx0ZnJhZ21lbnQ6IHtcclxuXHRcdFx0XHRcdG1vZHVsZTogdGhpcy5taXBtYXBTaGFkZXJNb2R1bGUsXHJcblx0XHRcdFx0XHRlbnRyeVBvaW50OiBcImZyYWdtZW50TWFpblwiLFxyXG5cdFx0XHRcdFx0dGFyZ2V0czogW3sgZm9ybWF0IH1dXHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9KTtcclxuXHRcdFx0dGhpcy5waXBlbGluZXNbZm9ybWF0XSA9IHBpcGVsaW5lO1xyXG5cdFx0fVxyXG5cdFx0cmV0dXJuIHBpcGVsaW5lO1xyXG5cdH1cclxuXHJcblx0LyoqXHJcblx0ICogR2VuZXJhdGVzIG1pcG1hcHMgZm9yIHRoZSBnaXZlbiBHUFVUZXh0dXJlIGZyb20gdGhlIGRhdGEgaW4gbGV2ZWwgMC5cclxuXHQgKlxyXG5cdCAqIEBwYXJhbSB7bW9kdWxlOkV4dGVybmFsLkdQVVRleHR1cmV9IHRleHR1cmUgLSBUZXh0dXJlIHRvIGdlbmVyYXRlIG1pcG1hcHMgZm9yLlxyXG5cdCAqIEBwYXJhbSB7b2JqZWN0fSB0ZXh0dXJlRGVzY3JpcHRvciAtIEdQVVRleHR1cmVEZXNjcmlwdG9yIHRoZSB0ZXh0dXJlIHdhcyBjcmVhdGVkIHdpdGguXHJcblx0ICogQHJldHVybnMge21vZHVsZTpFeHRlcm5hbC5HUFVUZXh0dXJlfSAtIFRoZSBvcmlnaW5hbGx5IHBhc3NlZCB0ZXh0dXJlXHJcblx0ICovXHJcblx0Z2VuZXJhdGVNaXBtYXAoc291cmNlVGV4dHVyZTogVGV4dHVyZSkge1xyXG5cdFx0Y29uc3QgdGV4dHVyZSA9IHNvdXJjZVRleHR1cmUuZ3B1VGV4dHVyZTtcclxuXHRcdGNvbnN0IHRleHR1cmVEZXNjcmlwdG9yID0gc291cmNlVGV4dHVyZS50ZXh0dXJlUHJvcDtcclxuXHRcdC8vIFRPRE86IERvZXMgdGhpcyBuZWVkIHRvIGhhbmRsZSBzUkdCIGZvcm1hdHMgZGlmZmVyZW50bHk/XHJcblx0XHRjb25zdCBwaXBlbGluZSA9IHRoaXMuZ2V0TWlwbWFwUGlwZWxpbmUodGV4dHVyZURlc2NyaXB0b3IuZm9ybWF0KTtcclxuXHJcblx0XHRpZiAodGV4dHVyZURlc2NyaXB0b3IuZGltZW5zaW9uID09IFwiM2RcIiB8fCB0ZXh0dXJlRGVzY3JpcHRvci5kaW1lbnNpb24gPT0gXCIxZFwiKSB7XHJcblx0XHRcdHRocm93IG5ldyBFcnJvcihcIkdlbmVyYXRpbmcgbWlwbWFwcyBmb3Igbm9uLTJkIHRleHR1cmVzIGlzIGN1cnJlbnRseSB1bnN1cHBvcnRlZCFcIik7XHJcblx0XHR9XHJcblxyXG5cdFx0bGV0IG1pcFRleHR1cmUgPSB0ZXh0dXJlO1xyXG5cdFx0Y29uc3QgYXJyYXlMYXllckNvdW50ID0gdGV4dHVyZURlc2NyaXB0b3Iuc2l6ZS5kZXB0aCB8fCAxOyAvLyBPbmx5IHZhbGlkIGZvciAyRCB0ZXh0dXJlcy5cclxuXHJcblx0XHQvLyBJZiB0aGUgdGV4dHVyZSB3YXMgY3JlYXRlZCB3aXRoIFJFTkRFUl9BVFRBQ0hNRU5UIHVzYWdlIHdlIGNhbiByZW5kZXIgZGlyZWN0bHkgYmV0d2VlbiBtaXAgbGV2ZWxzLlxyXG5cdFx0Y29uc3QgcmVuZGVyVG9Tb3VyY2UgPSB0ZXh0dXJlRGVzY3JpcHRvci51c2FnZSAmIEdQVVRleHR1cmVVc2FnZS5SRU5ERVJfQVRUQUNITUVOVDtcclxuXHRcdGlmICghcmVuZGVyVG9Tb3VyY2UpIHtcclxuXHRcdFx0Ly8gT3RoZXJ3aXNlIHdlIGhhdmUgdG8gdXNlIGEgc2VwYXJhdGUgdGV4dHVyZSB0byByZW5kZXIgaW50by4gSXQgY2FuIGJlIG9uZSBtaXAgbGV2ZWwgc21hbGxlciB0aGFuIHRoZSBzb3VyY2VcclxuXHRcdFx0Ly8gdGV4dHVyZSwgc2luY2Ugd2UgYWxyZWFkeSBoYXZlIHRoZSB0b3AgbGV2ZWwuXHJcblx0XHRcdGNvbnN0IG1pcFRleHR1cmVEZXNjcmlwdG9yID0ge1xyXG5cdFx0XHRcdHNpemU6IHtcclxuXHRcdFx0XHRcdHdpZHRoOiBNYXRoLmNlaWwodGV4dHVyZURlc2NyaXB0b3Iuc2l6ZS53aWR0aCAvIDIpLFxyXG5cdFx0XHRcdFx0aGVpZ2h0OiBNYXRoLmNlaWwodGV4dHVyZURlc2NyaXB0b3Iuc2l6ZS5oZWlnaHQgLyAyKSxcclxuXHRcdFx0XHRcdGRlcHRoT3JBcnJheUxheWVyczogYXJyYXlMYXllckNvdW50XHJcblx0XHRcdFx0fSxcclxuXHRcdFx0XHRmb3JtYXQ6IDxHUFVUZXh0dXJlRm9ybWF0PnRleHR1cmVEZXNjcmlwdG9yLmZvcm1hdCxcclxuXHRcdFx0XHR1c2FnZTogR1BVVGV4dHVyZVVzYWdlLlRFWFRVUkVfQklORElORyB8IEdQVVRleHR1cmVVc2FnZS5DT1BZX1NSQyB8IEdQVVRleHR1cmVVc2FnZS5SRU5ERVJfQVRUQUNITUVOVCxcclxuXHRcdFx0XHRtaXBMZXZlbENvdW50OiB0ZXh0dXJlRGVzY3JpcHRvci5taXBMZXZlbENvdW50IC0gMVxyXG5cdFx0XHR9O1xyXG5cdFx0XHRtaXBUZXh0dXJlID0gdGhpcy5kZXZpY2UuY3JlYXRlVGV4dHVyZShtaXBUZXh0dXJlRGVzY3JpcHRvcik7XHJcblx0XHR9XHJcblxyXG5cdFx0Y29uc3QgY29tbWFuZEVuY29kZXIgPSB0aGlzLmRldmljZS5jcmVhdGVDb21tYW5kRW5jb2Rlcih7fSk7XHJcblx0XHQvLyBUT0RPOiBDb25zaWRlciBtYWtpbmcgdGhpcyBzdGF0aWMuXHJcblx0XHRjb25zdCBiaW5kR3JvdXBMYXlvdXQgPSBwaXBlbGluZS5nZXRCaW5kR3JvdXBMYXlvdXQoMCk7XHJcblxyXG5cdFx0Zm9yIChsZXQgYXJyYXlMYXllciA9IDA7IGFycmF5TGF5ZXIgPCBhcnJheUxheWVyQ291bnQ7ICsrYXJyYXlMYXllcikge1xyXG5cdFx0XHRsZXQgc3JjVmlldyA9IHRleHR1cmUuY3JlYXRlVmlldyh7XHJcblx0XHRcdFx0YmFzZU1pcExldmVsOiAwLFxyXG5cdFx0XHRcdG1pcExldmVsQ291bnQ6IDEsXHJcblx0XHRcdFx0ZGltZW5zaW9uOiBcIjJkXCIsXHJcblx0XHRcdFx0YmFzZUFycmF5TGF5ZXI6IGFycmF5TGF5ZXIsXHJcblx0XHRcdFx0YXJyYXlMYXllckNvdW50OiAxXHJcblx0XHRcdH0pO1xyXG5cclxuXHRcdFx0bGV0IGRzdE1pcExldmVsID0gcmVuZGVyVG9Tb3VyY2UgPyAxIDogMDtcclxuXHRcdFx0Zm9yIChsZXQgaSA9IDE7IGkgPCB0ZXh0dXJlRGVzY3JpcHRvci5taXBMZXZlbENvdW50OyArK2kpIHtcclxuXHRcdFx0XHRjb25zdCBkc3RWaWV3ID0gbWlwVGV4dHVyZS5jcmVhdGVWaWV3KHtcclxuXHRcdFx0XHRcdGJhc2VNaXBMZXZlbDogZHN0TWlwTGV2ZWwrKyxcclxuXHRcdFx0XHRcdG1pcExldmVsQ291bnQ6IDEsXHJcblx0XHRcdFx0XHRkaW1lbnNpb246IFwiMmRcIixcclxuXHRcdFx0XHRcdGJhc2VBcnJheUxheWVyOiBhcnJheUxheWVyLFxyXG5cdFx0XHRcdFx0YXJyYXlMYXllckNvdW50OiAxXHJcblx0XHRcdFx0fSk7XHJcblxyXG5cdFx0XHRcdGNvbnN0IHBhc3NFbmNvZGVyID0gY29tbWFuZEVuY29kZXIuYmVnaW5SZW5kZXJQYXNzKHtcclxuXHRcdFx0XHRcdGNvbG9yQXR0YWNobWVudHM6IFtcclxuXHRcdFx0XHRcdFx0e1xyXG5cdFx0XHRcdFx0XHRcdHZpZXc6IGRzdFZpZXcsXHJcblx0XHRcdFx0XHRcdFx0bG9hZE9wOiBcImNsZWFyXCIsXHJcblx0XHRcdFx0XHRcdFx0c3RvcmVPcDogXCJzdG9yZVwiXHJcblx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdF1cclxuXHRcdFx0XHR9KTtcclxuXHJcblx0XHRcdFx0Y29uc3QgYmluZEdyb3VwID0gdGhpcy5kZXZpY2UuY3JlYXRlQmluZEdyb3VwKHtcclxuXHRcdFx0XHRcdGxheW91dDogYmluZEdyb3VwTGF5b3V0LFxyXG5cdFx0XHRcdFx0ZW50cmllczogW1xyXG5cdFx0XHRcdFx0XHR7XHJcblx0XHRcdFx0XHRcdFx0YmluZGluZzogMCxcclxuXHRcdFx0XHRcdFx0XHRyZXNvdXJjZTogdGhpcy5zYW1wbGVyXHJcblx0XHRcdFx0XHRcdH0sXHJcblx0XHRcdFx0XHRcdHtcclxuXHRcdFx0XHRcdFx0XHRiaW5kaW5nOiAxLFxyXG5cdFx0XHRcdFx0XHRcdHJlc291cmNlOiBzcmNWaWV3XHJcblx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdF1cclxuXHRcdFx0XHR9KTtcclxuXHJcblx0XHRcdFx0cGFzc0VuY29kZXIuc2V0UGlwZWxpbmUocGlwZWxpbmUpO1xyXG5cdFx0XHRcdHBhc3NFbmNvZGVyLnNldEJpbmRHcm91cCgwLCBiaW5kR3JvdXApO1xyXG5cdFx0XHRcdHBhc3NFbmNvZGVyLmRyYXcoMywgMSwgMCwgMCk7XHJcblx0XHRcdFx0cGFzc0VuY29kZXIuZW5kKCk7XHJcblxyXG5cdFx0XHRcdHNyY1ZpZXcgPSBkc3RWaWV3O1xyXG5cdFx0XHR9XHJcblx0XHR9XHJcblxyXG5cdFx0Ly8gSWYgd2UgZGlkbid0IHJlbmRlciB0byB0aGUgc291cmNlIHRleHR1cmUsIGZpbmlzaCBieSBjb3B5aW5nIHRoZSBtaXAgcmVzdWx0cyBmcm9tIHRoZSB0ZW1wb3JhcnkgbWlwbWFwIHRleHR1cmVcclxuXHRcdC8vIHRvIHRoZSBzb3VyY2UuXHJcblx0XHRpZiAoIXJlbmRlclRvU291cmNlKSB7XHJcblx0XHRcdGNvbnN0IG1pcExldmVsU2l6ZSA9IHtcclxuXHRcdFx0XHR3aWR0aDogTWF0aC5jZWlsKHRleHR1cmVEZXNjcmlwdG9yLnNpemUud2lkdGggLyAyKSxcclxuXHRcdFx0XHRoZWlnaHQ6IE1hdGguY2VpbCh0ZXh0dXJlRGVzY3JpcHRvci5zaXplLmhlaWdodCAvIDIpLFxyXG5cdFx0XHRcdGRlcHRoT3JBcnJheUxheWVyczogYXJyYXlMYXllckNvdW50XHJcblx0XHRcdH07XHJcblxyXG5cdFx0XHRmb3IgKGxldCBpID0gMTsgaSA8IHRleHR1cmVEZXNjcmlwdG9yLm1pcExldmVsQ291bnQ7ICsraSkge1xyXG5cdFx0XHRcdGNvbW1hbmRFbmNvZGVyLmNvcHlUZXh0dXJlVG9UZXh0dXJlKFxyXG5cdFx0XHRcdFx0e1xyXG5cdFx0XHRcdFx0XHR0ZXh0dXJlOiBtaXBUZXh0dXJlLFxyXG5cdFx0XHRcdFx0XHRtaXBMZXZlbDogaSAtIDFcclxuXHRcdFx0XHRcdH0sXHJcblx0XHRcdFx0XHR7XHJcblx0XHRcdFx0XHRcdHRleHR1cmU6IHRleHR1cmUsXHJcblx0XHRcdFx0XHRcdG1pcExldmVsOiBpXHJcblx0XHRcdFx0XHR9LFxyXG5cdFx0XHRcdFx0bWlwTGV2ZWxTaXplXHJcblx0XHRcdFx0KTtcclxuXHJcblx0XHRcdFx0bWlwTGV2ZWxTaXplLndpZHRoID0gTWF0aC5jZWlsKG1pcExldmVsU2l6ZS53aWR0aCAvIDIpO1xyXG5cdFx0XHRcdG1pcExldmVsU2l6ZS5oZWlnaHQgPSBNYXRoLmNlaWwobWlwTGV2ZWxTaXplLmhlaWdodCAvIDIpO1xyXG5cdFx0XHR9XHJcblx0XHR9XHJcblxyXG5cdFx0dGhpcy5kZXZpY2UucXVldWUuc3VibWl0KFtjb21tYW5kRW5jb2Rlci5maW5pc2goKV0pO1xyXG5cclxuXHRcdGlmICghcmVuZGVyVG9Tb3VyY2UpIHtcclxuXHRcdFx0bWlwVGV4dHVyZS5kZXN0cm95KCk7XHJcblx0XHR9XHJcblxyXG5cdFx0cmV0dXJuIHRleHR1cmU7XHJcblx0fVxyXG59XHJcbiIsImZ1bmN0aW9uIGRlZmF1bHRWYWx1ZShhLCBiKSB7XG5cdGlmIChhICE9PSB1bmRlZmluZWQgJiYgYSAhPT0gbnVsbCkge1xuXHRcdHJldHVybiBhO1xuXHR9XG5cdHJldHVybiBiO1xufVxuXG4vKipcbiAqIEEgZnJvemVuIGVtcHR5IG9iamVjdCB0aGF0IGNhbiBiZSB1c2VkIGFzIHRoZSBkZWZhdWx0IHZhbHVlIGZvciBvcHRpb25zIHBhc3NlZCBhc1xuICogYW4gb2JqZWN0IGxpdGVyYWwuXG4gKiBAdHlwZSB7T2JqZWN0fVxuICogQG1lbWJlcm9mIGRlZmF1bHRWYWx1ZVxuICovXG5kZWZhdWx0VmFsdWUuRU1QVFlfT0JKRUNUID0gT2JqZWN0LmZyZWV6ZSh7fSk7XG5cbmV4cG9ydCBkZWZhdWx0IGRlZmF1bHRWYWx1ZTtcbiIsImltcG9ydCB7XHJcblx0QmxlbmRGYWN0b3IsXHJcblx0QmxlbmRPcGVyYXRpb24sXHJcblx0VGV4dHVyZUZvcm1hdCxcclxuXHRHUFVDb2xvcldyaXRlLFxyXG5cdENvbXBhcmVGdW5jdGlvbixcclxuXHRTdGVuY2lsT3BlcmF0aW9uLFxyXG5cdEZyb250RmFjZSxcclxuXHRDdWxsTW9kZSxcclxuXHRQcmltaXRpdmVUb3BvbG9neVxyXG59IGZyb20gXCIuLi9jb3JlL1dlYkdQVUNvbnN0YW50XCI7XHJcbi8vIGltcG9ydCB7IEJpbmRSZW5kZXJTdGF0ZSB9IGZyb20gXCIuLi9jb3JlL1dlYkdQVVR5cGVzXCI7XHJcbmltcG9ydCBkZWZhdWx0VmFsdWUgZnJvbSBcIi4uL3V0aWxzL2RlZmF1bHRWYWx1ZVwiO1xyXG5cclxuZXhwb3J0IGNsYXNzIFJlbmRlclN0YXRlIHtcclxuXHRzY2lzc29yVGVzdDogU2Npc3NvclRlc3Q7XHJcblx0dmlld3BvcnQ6IFZpZXdQb3J0O1xyXG5cdHRhcmdldHM6IEFycmF5PFRhcmdldD47XHJcblx0ZGVwdGhTdGVuY2lsOiBEZXB0aFN0ZW5jaWw7XHJcblx0YmxlbmRDb25zdGFudDogQmxlbmRDb25zdGFudDtcclxuXHRzdGVuY2lsUmVmZXJlbmNlOiBudW1iZXI7XHJcblx0bXVsdGlzYW1wbGU6IE11bHRpU2FtcGxlO1xyXG5cdHByaW1pdGl2ZTogUHJpbWl0aXZlO1xyXG5cdHN0ZW5jaWxFbmFibGVkOiBib29sZWFuO1xyXG5cdHNjaXNzb3JUZXN0RW5hYmxlZDogYm9vbGVhbjtcclxuXHRjb25zdHJ1Y3RvcihwYXJhbXM/OiBSZW5kZXJTdGF0ZVBhcmFtcykge1xyXG5cdFx0dGhpcy5zY2lzc29yVGVzdCA9IHBhcmFtcz8uc2Npc3NvclRlc3Q7XHJcblx0XHR0aGlzLnZpZXdwb3J0ID0gcGFyYW1zPy52aWV3cG9ydDtcclxuXHRcdHRoaXMuZGVwdGhTdGVuY2lsID0gcGFyYW1zPy5kZXB0aFN0ZW5jaWw7XHJcblx0XHR0aGlzLmJsZW5kQ29uc3RhbnQgPSBwYXJhbXM/LmJsZW5kQ29uc3RhbnQ7XHJcblx0XHR0aGlzLnN0ZW5jaWxSZWZlcmVuY2UgPSBwYXJhbXM/LnN0ZW5jaWxSZWZlcmVuY2U7XHJcblx0XHR0aGlzLm11bHRpc2FtcGxlID0gcGFyYW1zPy5tdWx0aXNhbXBsZTtcclxuXHRcdHRoaXMucHJpbWl0aXZlID0gcGFyYW1zPy5wcmltaXRpdmU7XHJcblx0XHR0aGlzLnN0ZW5jaWxFbmFibGVkID0gZmFsc2U7XHJcblx0XHR0aGlzLnNjaXNzb3JUZXN0RW5hYmxlZCA9IGZhbHNlO1xyXG5cdFx0dGhpcy50YXJnZXRzID0gcGFyYW1zPy50YXJnZXRzO1xyXG5cdH1cclxuXHRiaW5kKHBhcmFtczogQmluZFJlbmRlclN0YXRlKSB7XHJcblx0XHRjb25zdCB7IHBhc3NFbmNvZGVyLCB2aWV3UG9ydCwgc2Npc3NvclRlc3QgfSA9IHBhcmFtcztcclxuXHRcdGNvbnN0IGZpbmFsVmlld3BvcnQgPSB0aGlzLnZpZXdwb3J0ID8/IHZpZXdQb3J0O1xyXG5cdFx0Y29uc3QgZmluYWxTY2lzc29yVGVzdCA9IHRoaXMuc2Npc3NvclRlc3QgPz8gc2Npc3NvclRlc3Q7XHJcblx0XHRpZiAodGhpcy5zdGVuY2lsUmVmZXJlbmNlKSBwYXNzRW5jb2Rlci5zZXRTdGVuY2lsUmVmZXJlbmNlKHRoaXMuc3RlbmNpbFJlZmVyZW5jZSk7XHJcblx0XHRpZiAoKGZpbmFsVmlld3BvcnQgYXMgVmlld1BvcnQpPy5lcXVhbHNBbmRVcGRhdGVDYWNoZShjYWNoZVZpZXdQb3J0KSkge1xyXG5cdFx0XHRjb25zdCB7IHgsIHksIHdpZHRoLCBoZWlnaHQsIG1pbkRlcHRoLCBtYXhEZXB0aCB9ID0gZmluYWxWaWV3cG9ydDtcclxuXHRcdFx0cGFzc0VuY29kZXIuc2V0Vmlld3BvcnQoeCwgeSwgd2lkdGgsIGhlaWdodCwgbWluRGVwdGgsIG1heERlcHRoKTtcclxuXHRcdH1cclxuXHRcdGlmICh0aGlzLmJsZW5kQ29uc3RhbnQpIHBhc3NFbmNvZGVyLnNldEJsZW5kQ29uc3RhbnQodGhpcy5ibGVuZENvbnN0YW50KTtcclxuXHRcdGlmICgoZmluYWxTY2lzc29yVGVzdCBhcyBTY2lzc29yVGVzdCk/LmVxdWFsc0FuZFVwZGF0ZUNhY2hlKGNhY2hlU2Npc3NvclRlc3QpKSB7XHJcblx0XHRcdGNvbnN0IHsgeCwgeSwgd2lkdGgsIGhlaWdodCB9ID0gZmluYWxTY2lzc29yVGVzdDtcclxuXHRcdFx0cGFzc0VuY29kZXIuc2V0U2Npc3NvclJlY3QoeCwgeSwgd2lkdGgsIGhlaWdodCk7XHJcblx0XHR9XHJcblx0fVxyXG5cdGRlc3Ryb3koKSB7XHJcblx0XHR0aGlzLnNjaXNzb3JUZXN0ID0gdW5kZWZpbmVkO1xyXG5cdFx0dGhpcy52aWV3cG9ydCA9IHVuZGVmaW5lZDtcclxuXHRcdHRoaXMuZGVwdGhTdGVuY2lsID0gdW5kZWZpbmVkO1xyXG5cdFx0dGhpcy5ibGVuZENvbnN0YW50ID0gdW5kZWZpbmVkO1xyXG5cdFx0dGhpcy5zdGVuY2lsUmVmZXJlbmNlID0gLTE7XHJcblx0XHR0aGlzLm11bHRpc2FtcGxlID0gdW5kZWZpbmVkO1xyXG5cdFx0dGhpcy5wcmltaXRpdmUgPSB1bmRlZmluZWQ7XHJcblx0XHR0aGlzLnN0ZW5jaWxFbmFibGVkID0gZmFsc2U7XHJcblx0XHR0aGlzLnNjaXNzb3JUZXN0RW5hYmxlZCA9IGZhbHNlO1xyXG5cdH1cclxufVxyXG5leHBvcnQgY2xhc3MgQmxlbmRDb25zdGFudCB7XHJcblx0cjogbnVtYmVyO1xyXG5cdGc6IG51bWJlcjtcclxuXHRiOiBudW1iZXI7XHJcblx0YTogbnVtYmVyO1xyXG5cdGNvbnN0cnVjdG9yKHI6IG51bWJlciwgZzogbnVtYmVyLCBiOiBudW1iZXIsIGE6IG51bWJlcikge1xyXG5cdFx0dGhpcy5yID0gcjtcclxuXHRcdHRoaXMuZyA9IGc7XHJcblx0XHR0aGlzLmIgPSBiO1xyXG5cdFx0dGhpcy5hID0gYTtcclxuXHR9XHJcbn1cclxuZXhwb3J0IGNsYXNzIE11bHRpU2FtcGxlIHtcclxuXHRjb3VudDogbnVtYmVyO1xyXG5cdG1hc2s6IG51bWJlcjtcclxuXHRhbHBoYVRvQ292ZXJhZ2VFbmFibGVkOiBib29sZWFuO1xyXG5cdGNvbnN0cnVjdG9yKGNvdW50ID0gMSwgbWFzayA9IDB4ZmZmZmZmZmYsIGFscGhhVG9Db3ZlcmFnZUVuYWJsZWQgPSBmYWxzZSkge1xyXG5cdFx0dGhpcy5jb3VudCA9IGNvdW50O1xyXG5cdFx0dGhpcy5tYXNrID0gbWFzaztcclxuXHRcdHRoaXMuYWxwaGFUb0NvdmVyYWdlRW5hYmxlZCA9IGFscGhhVG9Db3ZlcmFnZUVuYWJsZWQ7XHJcblx0fVxyXG5cdGdldE11bHRpU2FtcGxlRGVjKCkge1xyXG5cdFx0cmV0dXJuIHtcclxuXHRcdFx0Y291bnQ6IHRoaXMuY291bnQsXHJcblx0XHRcdG1hc2s6IHRoaXMubWFzayxcclxuXHRcdFx0YWxwaGFUb0NvdmVyYWdlRW5hYmxlZDogdGhpcy5hbHBoYVRvQ292ZXJhZ2VFbmFibGVkXHJcblx0XHR9O1xyXG5cdH1cclxufVxyXG5leHBvcnQgY2xhc3MgU2Npc3NvclRlc3Qge1xyXG5cdHg6IG51bWJlcjtcclxuXHR5OiBudW1iZXI7XHJcblx0d2lkdGg6IG51bWJlcjtcclxuXHRoZWlnaHQ6IG51bWJlcjtcclxuXHR2YXJpYWJsZTogYm9vbGVhbjtcclxuXHRjb25zdHJ1Y3Rvcih4ID0gMCwgeSA9IDAsIHdpZHRoID0gMCwgaGVpZ2h0ID0gMCwgdmFyaWFibGUgPSB0cnVlKSB7XHJcblx0XHR0aGlzLnggPSB4O1xyXG5cdFx0dGhpcy55ID0geTtcclxuXHRcdHRoaXMud2lkdGggPSB3aWR0aDtcclxuXHRcdHRoaXMuaGVpZ2h0ID0gaGVpZ2h0O1xyXG5cdFx0dGhpcy52YXJpYWJsZSA9IHZhcmlhYmxlO1xyXG5cdH1cclxuXHRzZXQoeDogbnVtYmVyLCB5OiBudW1iZXIsIHdpZHRoOiBudW1iZXIsIGhlaWdodDogbnVtYmVyKSB7XHJcblx0XHR0aGlzLnggPSB4O1xyXG5cdFx0dGhpcy55ID0geTtcclxuXHRcdHRoaXMud2lkdGggPSB3aWR0aDtcclxuXHRcdHRoaXMuaGVpZ2h0ID0gaGVpZ2h0O1xyXG5cdH1cclxuXHRlcXVhbHNBbmRVcGRhdGVDYWNoZShzY2lzc29yVGVzdDogU2Npc3NvclRlc3QpOiBib29sZWFuIHtcclxuXHRcdGNvbnN0IHsgeCwgeSwgd2lkdGgsIGhlaWdodCB9ID0gc2Npc3NvclRlc3Q7XHJcblx0XHRpZiAodGhpcy54ICE9IHggfHwgdGhpcy55ICE9IHkgfHwgdGhpcy53aWR0aCAhPSB3aWR0aCB8fCB0aGlzLmhlaWdodCAhPSBoZWlnaHQpIHtcclxuXHRcdFx0c2Npc3NvclRlc3Quc2V0KHRoaXMueCwgdGhpcy55LCB0aGlzLndpZHRoLCB0aGlzLmhlaWdodCk7XHJcblx0XHRcdHJldHVybiB0cnVlO1xyXG5cdFx0fVxyXG5cdFx0cmV0dXJuIGZhbHNlO1xyXG5cdH1cclxufVxyXG5leHBvcnQgY2xhc3MgVmlld1BvcnQge1xyXG5cdHg6IG51bWJlcjtcclxuXHR5OiBudW1iZXI7XHJcblx0d2lkdGg6IG51bWJlcjtcclxuXHRoZWlnaHQ6IG51bWJlcjtcclxuXHRtaW5EZXB0aDogbnVtYmVyO1xyXG5cdG1heERlcHRoOiBudW1iZXI7XHJcblx0dmFyaWFibGU6IGJvb2xlYW47XHJcblx0Y29uc3RydWN0b3IoeCA9IDAsIHkgPSAwLCB3aWR0aCA9IDAsIGhlaWdodCA9IDAsIG1pbkRlcHRoID0gMCwgbWF4RGVwdGggPSAxLCB2YXJpYWJsZSA9IHRydWUpIHtcclxuXHRcdHRoaXMueCA9IHg7XHJcblx0XHR0aGlzLnkgPSB5O1xyXG5cdFx0dGhpcy53aWR0aCA9IHdpZHRoO1xyXG5cdFx0dGhpcy5oZWlnaHQgPSBoZWlnaHQ7XHJcblx0XHR0aGlzLm1pbkRlcHRoID0gbWluRGVwdGg7XHJcblx0XHR0aGlzLm1heERlcHRoID0gbWF4RGVwdGg7XHJcblx0XHR0aGlzLnZhcmlhYmxlID0gdmFyaWFibGU7XHJcblx0fVxyXG5cdHNldCh4OiBudW1iZXIsIHk6IG51bWJlciwgd2lkdGg6IG51bWJlciwgaGVpZ2h0OiBudW1iZXIsIG1pbkRlcHRoID0gMCwgbWF4RGVwdGggPSAxKSB7XHJcblx0XHRpZiAoIXRoaXMudmFyaWFibGUpIHJldHVybjtcclxuXHRcdHRoaXMueCA9IHg7XHJcblx0XHR0aGlzLnkgPSB5O1xyXG5cdFx0dGhpcy53aWR0aCA9IHdpZHRoO1xyXG5cdFx0dGhpcy5oZWlnaHQgPSBoZWlnaHQ7XHJcblx0XHR0aGlzLm1pbkRlcHRoID0gbWluRGVwdGg7XHJcblx0XHR0aGlzLm1heERlcHRoID0gbWF4RGVwdGg7XHJcblx0fVxyXG5cdGVxdWFsc0FuZFVwZGF0ZUNhY2hlKHZpZXdQb3J0OiBWaWV3UG9ydCk6IGJvb2xlYW4ge1xyXG5cdFx0Y29uc3QgeyB4LCB5LCB3aWR0aCwgaGVpZ2h0LCBtaW5EZXB0aCwgbWF4RGVwdGggfSA9IHZpZXdQb3J0O1xyXG5cdFx0aWYgKFxyXG5cdFx0XHR0aGlzLnggIT0geCB8fFxyXG5cdFx0XHR0aGlzLnkgIT0geSB8fFxyXG5cdFx0XHR0aGlzLndpZHRoICE9IHdpZHRoIHx8XHJcblx0XHRcdHRoaXMuaGVpZ2h0ICE9IGhlaWdodCB8fFxyXG5cdFx0XHR0aGlzLm1pbkRlcHRoICE9IG1pbkRlcHRoIHx8XHJcblx0XHRcdHRoaXMubWF4RGVwdGggIT0gbWF4RGVwdGhcclxuXHRcdCkge1xyXG5cdFx0XHR2aWV3UG9ydC5zZXQodGhpcy54LCB0aGlzLnksIHRoaXMud2lkdGgsIHRoaXMuaGVpZ2h0LCB0aGlzLm1pbkRlcHRoLCB0aGlzLm1heERlcHRoKTtcclxuXHRcdFx0cmV0dXJuIHRydWU7XHJcblx0XHR9XHJcblx0XHRyZXR1cm4gZmFsc2U7XHJcblx0fVxyXG59XHJcbmV4cG9ydCBjbGFzcyBQcmltaXRpdmUge1xyXG5cdGZyb250RmFjZTogRnJvbnRGYWNlO1xyXG5cdGN1bGxNb2RlOiBDdWxsTW9kZTtcclxuXHR1bmNsaXBwZWREZXB0aDogYm9vbGVhbjtcclxuXHR0b3BvbG9neTogUHJpbWl0aXZlVG9wb2xvZ3k7XHJcblx0Y29uc3RydWN0b3IodG9wb2xvZ3k/OiBQcmltaXRpdmVUb3BvbG9neSwgY3VsbE1vZGU/OiBDdWxsTW9kZSwgZnJvbnRGYWNlPzogRnJvbnRGYWNlLCB1bmNsaXBwZWREZXB0aD86IGJvb2xlYW4pIHtcclxuXHRcdHRoaXMuZnJvbnRGYWNlID0gZGVmYXVsdFZhbHVlKGZyb250RmFjZSwgRnJvbnRGYWNlLkNDVyk7XHJcblx0XHR0aGlzLmN1bGxNb2RlID0gZGVmYXVsdFZhbHVlKGN1bGxNb2RlLCBDdWxsTW9kZS5Ob25lKTtcclxuXHRcdHRoaXMudW5jbGlwcGVkRGVwdGggPSBkZWZhdWx0VmFsdWUodW5jbGlwcGVkRGVwdGgsIGZhbHNlKTtcclxuXHRcdHRoaXMudG9wb2xvZ3kgPSBkZWZhdWx0VmFsdWUodG9wb2xvZ3ksIFByaW1pdGl2ZVRvcG9sb2d5LlRyaWFuZ2xlTGlzdCk7XHJcblx0fVxyXG5cdGdldEdQVVByaW1pdGl2ZURlYygpIHtcclxuXHRcdHJldHVybiB7XHJcblx0XHRcdGZyb250RmFjZTogdGhpcy5mcm9udEZhY2UsXHJcblx0XHRcdGN1bGxNb2RlOiB0aGlzLmN1bGxNb2RlLFxyXG5cdFx0XHR1bmNsaXBwZWREZXB0aDogdGhpcy51bmNsaXBwZWREZXB0aCxcclxuXHRcdFx0dG9wb2xvZ3k6IHRoaXMudG9wb2xvZ3lcclxuXHRcdH07XHJcblx0fVxyXG59XHJcbmV4cG9ydCBjbGFzcyBEZXB0aFN0ZW5jaWwge1xyXG5cdGZvcm1hdDogVGV4dHVyZUZvcm1hdDtcclxuXHRkZXB0aFdyaXRlRW5hYmxlZDogYm9vbGVhbjtcclxuXHRkZXB0aENvbXBhcmU6IENvbXBhcmVGdW5jdGlvbjtcclxuXHRzdGVuY2lsUmVhZE1hc2s6IG51bWJlcjtcclxuXHRzdGVuY2lsV3JpdGVNYXNrOiBudW1iZXI7XHJcblx0c3RlbmNpbEZyb250Q29tcGFyZTogQ29tcGFyZUZ1bmN0aW9uO1xyXG5cdHN0ZW5jaWxGcm9udEZhaWxPcDogU3RlbmNpbE9wZXJhdGlvbjtcclxuXHRzdGVuY2lsRnJvbnREZXB0aEZhaWxPcDogU3RlbmNpbE9wZXJhdGlvbjtcclxuXHRzdGVuY2lsRnJvbnRQYXNzT3A6IFN0ZW5jaWxPcGVyYXRpb247XHJcblxyXG5cdHN0ZW5jaWxCYWNrQ29tcGFyZTogQ29tcGFyZUZ1bmN0aW9uO1xyXG5cdHN0ZW5jaWxCYWNrRmFpbE9wOiBTdGVuY2lsT3BlcmF0aW9uO1xyXG5cdHN0ZW5jaWxCYWNrRGVwdGhGYWlsT3A6IFN0ZW5jaWxPcGVyYXRpb247XHJcblx0c3RlbmNpbEJhY2tQYXNzT3A6IFN0ZW5jaWxPcGVyYXRpb247XHJcblx0ZGVwdGhCaWFzOiBudW1iZXI7XHJcblx0ZGVwdGhCaWFzU2xvcGVTY2FsZTogbnVtYmVyO1xyXG5cdGRlcHRoQmlhc0NsYW1wOiBudW1iZXI7XHJcblx0Y29uc3RydWN0b3Iob3B0aW9ucz86IERlcHRoU3RlbmNpbFByb3BzKSB7XHJcblx0XHR0aGlzLmZvcm1hdCA9IGRlZmF1bHRWYWx1ZShvcHRpb25zPy5mb3JtYXQsIFRleHR1cmVGb3JtYXQuRGVwdGgyNFBsdXMpO1xyXG5cdFx0dGhpcy5kZXB0aFdyaXRlRW5hYmxlZCA9IGRlZmF1bHRWYWx1ZShvcHRpb25zPy5kZXB0aFdyaXRlRW5hYmxlZCwgdHJ1ZSk7XHJcblx0XHR0aGlzLmRlcHRoQ29tcGFyZSA9IGRlZmF1bHRWYWx1ZShvcHRpb25zPy5kZXB0aENvbXBhcmUsIENvbXBhcmVGdW5jdGlvbi5MZXNzKTtcclxuXHRcdHRoaXMuc3RlbmNpbFJlYWRNYXNrID0gZGVmYXVsdFZhbHVlKG9wdGlvbnM/LnN0ZW5jaWxSZWFkTWFzaywgMHhmZmZmZmZmZik7XHJcblx0XHR0aGlzLnN0ZW5jaWxXcml0ZU1hc2sgPSBkZWZhdWx0VmFsdWUob3B0aW9ucz8uc3RlbmNpbFdyaXRlTWFzaywgMHhmZmZmZmZmZik7XHJcblx0XHR0aGlzLnN0ZW5jaWxGcm9udENvbXBhcmUgPSBkZWZhdWx0VmFsdWUob3B0aW9ucz8uc3RlbmNpbEZyb250Q29tcGFyZSwgQ29tcGFyZUZ1bmN0aW9uLkFsd2F5cyk7XHJcblx0XHR0aGlzLnN0ZW5jaWxGcm9udEZhaWxPcCA9IGRlZmF1bHRWYWx1ZShvcHRpb25zPy5zdGVuY2lsRnJvbnRGYWlsT3AsIFN0ZW5jaWxPcGVyYXRpb24uS2VlcCk7XHJcblx0XHR0aGlzLnN0ZW5jaWxGcm9udERlcHRoRmFpbE9wID0gZGVmYXVsdFZhbHVlKG9wdGlvbnM/LnN0ZW5jaWxGcm9udERlcHRoRmFpbE9wLCBTdGVuY2lsT3BlcmF0aW9uLktlZXApO1xyXG5cdFx0dGhpcy5zdGVuY2lsRnJvbnRQYXNzT3AgPSBkZWZhdWx0VmFsdWUob3B0aW9ucz8uc3RlbmNpbEZyb250UGFzc09wLCBTdGVuY2lsT3BlcmF0aW9uLktlZXApO1xyXG5cdFx0dGhpcy5zdGVuY2lsQmFja0NvbXBhcmUgPSBkZWZhdWx0VmFsdWUob3B0aW9ucz8uc3RlbmNpbEJhY2tDb21wYXJlLCBDb21wYXJlRnVuY3Rpb24uQWx3YXlzKTtcclxuXHRcdHRoaXMuc3RlbmNpbEJhY2tGYWlsT3AgPSBkZWZhdWx0VmFsdWUob3B0aW9ucz8uc3RlbmNpbEJhY2tGYWlsT3AsIFN0ZW5jaWxPcGVyYXRpb24uS2VlcCk7XHJcblx0XHR0aGlzLnN0ZW5jaWxCYWNrRGVwdGhGYWlsT3AgPSBkZWZhdWx0VmFsdWUob3B0aW9ucz8uc3RlbmNpbEJhY2tEZXB0aEZhaWxPcCwgU3RlbmNpbE9wZXJhdGlvbi5LZWVwKTtcclxuXHRcdHRoaXMuc3RlbmNpbEJhY2tQYXNzT3AgPSBkZWZhdWx0VmFsdWUob3B0aW9ucz8uc3RlbmNpbEJhY2tQYXNzT3AsIFN0ZW5jaWxPcGVyYXRpb24uS2VlcCk7XHJcblx0XHR0aGlzLmRlcHRoQmlhcyA9IGRlZmF1bHRWYWx1ZShvcHRpb25zPy5kZXB0aEJpYXMsIDApO1xyXG5cdFx0dGhpcy5kZXB0aEJpYXNTbG9wZVNjYWxlID0gZGVmYXVsdFZhbHVlKG9wdGlvbnM/LmRlcHRoQmlhc1Nsb3BlU2NhbGUsIDApO1xyXG5cdFx0dGhpcy5kZXB0aEJpYXNDbGFtcCA9IGRlZmF1bHRWYWx1ZShvcHRpb25zPy5kZXB0aEJpYXNDbGFtcCwgMCk7XHJcblx0fVxyXG5cdGdldEdQVURlcHRoU3RlbmNpbERlYygpIHtcclxuXHRcdHJldHVybiB7XHJcblx0XHRcdGZvcm1hdDogdGhpcy5mb3JtYXQsXHJcblx0XHRcdGRlcHRoV3JpdGVFbmFibGVkOiB0aGlzLmRlcHRoV3JpdGVFbmFibGVkLFxyXG5cdFx0XHRkZXB0aENvbXBhcmU6IHRoaXMuZGVwdGhDb21wYXJlLFxyXG5cdFx0XHRzdGVuY2lsUmVhZE1hc2s6IHRoaXMuc3RlbmNpbFJlYWRNYXNrLFxyXG5cdFx0XHRzdGVuY2lsV3JpdGVNYXNrOiB0aGlzLnN0ZW5jaWxXcml0ZU1hc2ssXHJcblx0XHRcdHN0ZW5jaWxGcm9udDoge1xyXG5cdFx0XHRcdGNvbXBhcmU6IHRoaXMuc3RlbmNpbEZyb250Q29tcGFyZSxcclxuXHRcdFx0XHRmYWlsT3A6IHRoaXMuc3RlbmNpbEZyb250RmFpbE9wLFxyXG5cdFx0XHRcdGRlcHRoRmFpbE9wOiB0aGlzLnN0ZW5jaWxGcm9udERlcHRoRmFpbE9wLFxyXG5cdFx0XHRcdHBhc3NPcDogdGhpcy5zdGVuY2lsRnJvbnRQYXNzT3BcclxuXHRcdFx0fSxcclxuXHRcdFx0c3RlbmNpbEJhY2s6IHtcclxuXHRcdFx0XHRjb21wYXJlOiB0aGlzLnN0ZW5jaWxCYWNrQ29tcGFyZSxcclxuXHRcdFx0XHRmYWlsT3A6IHRoaXMuc3RlbmNpbEJhY2tGYWlsT3AsXHJcblx0XHRcdFx0ZGVwdGhGYWlsT3A6IHRoaXMuc3RlbmNpbEJhY2tEZXB0aEZhaWxPcCxcclxuXHRcdFx0XHRwYXNzT3A6IHRoaXMuc3RlbmNpbEJhY2tQYXNzT3BcclxuXHRcdFx0fSxcclxuXHRcdFx0ZGVwdGhCaWFzOiB0aGlzLmRlcHRoQmlhcyxcclxuXHRcdFx0ZGVwdGhCaWFzU2xvcGVTY2FsZTogdGhpcy5kZXB0aEJpYXNTbG9wZVNjYWxlLFxyXG5cdFx0XHRkZXB0aEJpYXNDbGFtcDogdGhpcy5kZXB0aEJpYXNDbGFtcFxyXG5cdFx0fTtcclxuXHR9XHJcbn1cclxuZXhwb3J0IGNsYXNzIFRhcmdldCB7XHJcblx0Zm9ybWF0OiBUZXh0dXJlRm9ybWF0O1xyXG5cdGJsZW5kQ29sb3JPcGVyYXRpb24/OiBCbGVuZE9wZXJhdGlvbjtcclxuXHRibGVuZENvbG9yU3JjRmFjdG9yPzogQmxlbmRGYWN0b3I7XHJcblx0YmxlbmRDb2xvckRzdEZhY3Rvcj86IEJsZW5kRmFjdG9yO1xyXG5cdGJsZW5kQWxwaGFPcGVyYXRpb24/OiBCbGVuZE9wZXJhdGlvbjtcclxuXHRibGVuZEFscGhhU3JjRmFjdG9yPzogQmxlbmRGYWN0b3I7XHJcblx0YmxlbmRBbHBoYURzdEZhY3Rvcj86IEJsZW5kRmFjdG9yO1xyXG5cdHdyaXRlTWFzazogR1BVQ29sb3JXcml0ZTtcclxuXHRjb25zdHJ1Y3RvcihvcHRpb25zPzogVGFyZ2V0UHJvcHMpIHtcclxuXHRcdHRoaXMuZm9ybWF0ID0gZGVmYXVsdFZhbHVlKG9wdGlvbnM/LmZvcm1hdCwgVGV4dHVyZUZvcm1hdC5CR1JBOFVub3JtKTtcclxuXHRcdHRoaXMuYmxlbmRDb2xvck9wZXJhdGlvbiA9IGRlZmF1bHRWYWx1ZShvcHRpb25zPy5ibGVuZENvbG9yT3BlcmF0aW9uLCBCbGVuZE9wZXJhdGlvbi5BZGQpO1xyXG5cdFx0dGhpcy5ibGVuZENvbG9yU3JjRmFjdG9yID0gZGVmYXVsdFZhbHVlKG9wdGlvbnM/LmJsZW5kQ29sb3JTcmNGYWN0b3IsIEJsZW5kRmFjdG9yPy5TcmNBbHBoYSk7XHJcblx0XHR0aGlzLmJsZW5kQ29sb3JEc3RGYWN0b3IgPSBkZWZhdWx0VmFsdWUob3B0aW9ucz8uYmxlbmRDb2xvckRzdEZhY3RvciwgQmxlbmRGYWN0b3IuT25lTWludXNTcmNBbHBoYSk7XHJcblx0XHR0aGlzLmJsZW5kQWxwaGFPcGVyYXRpb24gPSBkZWZhdWx0VmFsdWUob3B0aW9ucz8uYmxlbmRBbHBoYU9wZXJhdGlvbiwgQmxlbmRPcGVyYXRpb24uQWRkKTtcclxuXHRcdHRoaXMuYmxlbmRBbHBoYVNyY0ZhY3RvciA9IGRlZmF1bHRWYWx1ZShvcHRpb25zPy5ibGVuZEFscGhhU3JjRmFjdG9yLCBCbGVuZEZhY3Rvci5PbmUpO1xyXG5cdFx0dGhpcy5ibGVuZEFscGhhRHN0RmFjdG9yID0gZGVmYXVsdFZhbHVlKG9wdGlvbnM/LmJsZW5kQWxwaGFEc3RGYWN0b3IsIEJsZW5kRmFjdG9yLk9uZSk7XHJcblx0XHR0aGlzLndyaXRlTWFzayA9IGRlZmF1bHRWYWx1ZShvcHRpb25zPy53cml0ZU1hc2ssIEdQVUNvbG9yV3JpdGUuQWxsKTtcclxuXHR9XHJcblx0Z2V0R1BVVGFyZ2V0RGVjKCkge1xyXG5cdFx0cmV0dXJuIHtcclxuXHRcdFx0Zm9ybWF0OiB0aGlzLmZvcm1hdCxcclxuXHRcdFx0YmxlbmQ6IHtcclxuXHRcdFx0XHRjb2xvcjoge1xyXG5cdFx0XHRcdFx0b3BlcmF0aW9uOiB0aGlzLmJsZW5kQ29sb3JPcGVyYXRpb24sXHJcblx0XHRcdFx0XHRzcmNGYWN0b3I6IHRoaXMuYmxlbmRDb2xvclNyY0ZhY3RvcixcclxuXHRcdFx0XHRcdGRzdEZhY3RvcjogdGhpcy5ibGVuZENvbG9yRHN0RmFjdG9yXHJcblx0XHRcdFx0fSxcclxuXHRcdFx0XHRhbHBoYToge1xyXG5cdFx0XHRcdFx0b3BlcmF0aW9uOiB0aGlzLmJsZW5kQWxwaGFPcGVyYXRpb24sXHJcblx0XHRcdFx0XHRzcmNGYWN0b3I6IHRoaXMuYmxlbmRBbHBoYVNyY0ZhY3RvcixcclxuXHRcdFx0XHRcdGRzdEZhY3RvcjogdGhpcy5ibGVuZEFscGhhRHN0RmFjdG9yXHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9LFxyXG5cdFx0XHR3cml0ZU1hc2s6IHRoaXMud3JpdGVNYXNrXHJcblx0XHR9O1xyXG5cdH1cclxufVxyXG5jb25zdCBjYWNoZVZpZXdQb3J0ID0gbmV3IFZpZXdQb3J0KCk7XHJcbmNvbnN0IGNhY2hlU2Npc3NvclRlc3QgPSBuZXcgU2Npc3NvclRlc3QoKTtcclxuZXhwb3J0IHR5cGUgRGVwdGhTdGVuY2lsUHJvcHMgPSB7XHJcblx0Zm9ybWF0PzogVGV4dHVyZUZvcm1hdDtcclxuXHRkZXB0aFdyaXRlRW5hYmxlZD86IGJvb2xlYW47XHJcblx0ZGVwdGhDb21wYXJlPzogQ29tcGFyZUZ1bmN0aW9uO1xyXG5cdHN0ZW5jaWxSZWFkTWFzaz86IG51bWJlcjtcclxuXHRzdGVuY2lsV3JpdGVNYXNrPzogbnVtYmVyO1xyXG5cdHN0ZW5jaWxGcm9udENvbXBhcmU/OiBDb21wYXJlRnVuY3Rpb247XHJcblx0c3RlbmNpbEZyb250RmFpbE9wPzogU3RlbmNpbE9wZXJhdGlvbjtcclxuXHRzdGVuY2lsRnJvbnREZXB0aEZhaWxPcD86IFN0ZW5jaWxPcGVyYXRpb247XHJcblx0c3RlbmNpbEZyb250UGFzc09wPzogU3RlbmNpbE9wZXJhdGlvbjtcclxuXHJcblx0c3RlbmNpbEJhY2tDb21wYXJlPzogQ29tcGFyZUZ1bmN0aW9uO1xyXG5cdHN0ZW5jaWxCYWNrRmFpbE9wPzogU3RlbmNpbE9wZXJhdGlvbjtcclxuXHRzdGVuY2lsQmFja0RlcHRoRmFpbE9wPzogU3RlbmNpbE9wZXJhdGlvbjtcclxuXHRzdGVuY2lsQmFja1Bhc3NPcD86IFN0ZW5jaWxPcGVyYXRpb247XHJcblx0ZGVwdGhCaWFzPzogbnVtYmVyO1xyXG5cdGRlcHRoQmlhc1Nsb3BlU2NhbGU/OiBudW1iZXI7XHJcblx0ZGVwdGhCaWFzQ2xhbXA/OiBudW1iZXI7XHJcbn07XHJcbmV4cG9ydCB0eXBlIFRhcmdldFByb3BzID0ge1xyXG5cdGZvcm1hdD86IFRleHR1cmVGb3JtYXQ7XHJcblx0YmxlbmRDb2xvck9wZXJhdGlvbj86IEJsZW5kT3BlcmF0aW9uO1xyXG5cdGJsZW5kQ29sb3JTcmNGYWN0b3I/OiBCbGVuZEZhY3RvcjtcclxuXHRibGVuZENvbG9yRHN0RmFjdG9yPzogQmxlbmRGYWN0b3I7XHJcblx0YmxlbmRBbHBoYU9wZXJhdGlvbj86IEJsZW5kT3BlcmF0aW9uO1xyXG5cdGJsZW5kQWxwaGFTcmNGYWN0b3I/OiBCbGVuZEZhY3RvcjtcclxuXHRibGVuZEFscGhhRHN0RmFjdG9yPzogQmxlbmRGYWN0b3I7XHJcblx0d3JpdGVNYXNrPzogR1BVQ29sb3JXcml0ZTtcclxufTtcclxuZXhwb3J0IHR5cGUgUmVuZGVyU3RhdGVQYXJhbXMgPSB7XHJcblx0c2Npc3NvclRlc3Q/OiBTY2lzc29yVGVzdDtcclxuXHR2aWV3cG9ydD86IFZpZXdQb3J0O1xyXG5cdHRhcmdldHM/OiBBcnJheTxUYXJnZXQ+O1xyXG5cdGRlcHRoU3RlbmNpbD86IERlcHRoU3RlbmNpbDtcclxuXHRibGVuZENvbnN0YW50PzogQmxlbmRDb25zdGFudDtcclxuXHRzdGVuY2lsUmVmZXJlbmNlPzogbnVtYmVyO1xyXG5cdG11bHRpc2FtcGxlPzogTXVsdGlTYW1wbGU7XHJcblx0cHJpbWl0aXZlPzogUHJpbWl0aXZlO1xyXG5cdHN0ZW5jaWxFbmFibGVkPzogYm9vbGVhbjtcclxuXHRzY2lzc29yVGVzdEVuYWJsZWQ/OiBib29sZWFuO1xyXG59O1xyXG5leHBvcnQgdHlwZSBCaW5kUmVuZGVyU3RhdGUgPSB7XHJcblx0cGFzc0VuY29kZXI6IEdQVVJlbmRlclBhc3NFbmNvZGVyO1xyXG5cdHZpZXdQb3J0OiBWaWV3UG9ydDtcclxuXHRzY2lzc29yVGVzdDogU2Npc3NvclRlc3Q7XHJcbn07XHJcbiIsImltcG9ydCB7IFRleHR1cmVVc2FnZSB9IGZyb20gXCIuLi9jb3JlL1dlYkdQVUNvbnN0YW50XCI7XHJcbmltcG9ydCB7IEdQVUNhbnZhc0NvbXBvc2l0aW5nQWxwaGFNb2RlLCBDb250ZXh0T3B0aW9ucyB9IGZyb20gXCIuLi9jb3JlL1dlYkdQVVR5cGVzXCI7XHJcbmltcG9ydCB7IFNoYWRlclNvdXJjZSB9IGZyb20gXCIuLi9zaGFkZXIvU2hhZGVyU291cmNlXCI7XHJcbmltcG9ydCB7IGxvYWRHbHNsYW5nTW9kdWxlIH0gZnJvbSBcIi4uL3V0aWxzL2xvYWRHbHNsYW5nTW9kdWxlXCI7XHJcbmltcG9ydCB7IE1pcG1hcEdlbmVyYXRvciB9IGZyb20gXCIuLi91dGlscy9NaXBtYXBHZW5lcmF0b3JcIjtcclxuaW1wb3J0IHsgU2Npc3NvclRlc3QsIFZpZXdQb3J0IH0gZnJvbSBcIi4vUmVuZGVyU3RhdGVcIjtcclxuXHJcbmNsYXNzIENvbnRleHQge1xyXG5cdHB1YmxpYyBjYW52YXM6IEhUTUxDYW52YXNFbGVtZW50O1xyXG5cclxuXHRwdWJsaWMgY29udGV4dDogR1BVQ2FudmFzQ29udGV4dDtcclxuXHJcblx0cHVibGljIHBpeGVsUmF0aW86IG51bWJlcjtcclxuXHJcblx0cHVibGljIGRldmljZTogR1BVRGV2aWNlO1xyXG5cclxuXHRwcml2YXRlIGFkYXB0ZXI6IEdQVUFkYXB0ZXI7XHJcblxyXG5cdHB1YmxpYyBwcmVzZW50YXRpb25TaXplOiB7IHdpZHRoOiBudW1iZXI7IGhlaWdodDogbnVtYmVyOyBkZXB0aDogbnVtYmVyIH07XHJcblxyXG5cdHB1YmxpYyBwcmVzZW50YXRpb25Gb3JtYXQ6IEdQVVRleHR1cmVGb3JtYXQ7XHJcblxyXG5cdHB1YmxpYyBtaXBtYXBUb29sczogTWlwbWFwR2VuZXJhdG9yO1xyXG5cclxuXHRwcml2YXRlIF92aWV3UG9ydDogVmlld1BvcnQ7XHJcblxyXG5cdHByaXZhdGUgX3NjaXNzb3JUZXN0OiBTY2lzc29yVGVzdDtcclxuXHJcblx0cHJpdmF0ZSBfdXNlR0xTTDogYm9vbGVhbjsgLy8gd2lsbCBnbHNsIHNoYWRlcnMgYmUgdXNlZFxyXG5cclxuXHRwdWJsaWMgZ2V0IHZpZXdQb3J0KCk6IFZpZXdQb3J0IHtcclxuXHRcdHJldHVybiB0aGlzLl92aWV3UG9ydDtcclxuXHR9XHJcblxyXG5cdHB1YmxpYyBnZXQgc2Npc3NvclRlc3QoKTogU2Npc3NvclRlc3Qge1xyXG5cdFx0cmV0dXJuIHRoaXMuX3NjaXNzb3JUZXN0O1xyXG5cdH1cclxuXHRjb25zdHJ1Y3Rvcih7IGNhbnZhcywgY29udGFpbmVyLCBjb250ZXh0LCBwaXhlbFJhdGlvLCB1c2VHTFNMID0gZmFsc2UgfTogQ29udGV4dE9wdGlvbnMpIHtcclxuXHRcdGlmICghY29udGFpbmVyLmNsaWVudFdpZHRoIHx8ICFjb250YWluZXIuY2xpZW50SGVpZ2h0KSB0aHJvdyBuZXcgRXJyb3IoXCJjb250YWluZXIgd2lkdGggb3IgaGVpZ2h0IGlsbGVnYWxpdHlcIik7XHJcblx0XHR0aGlzLmNhbnZhcyA9IGNhbnZhcyB8fCBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiY2FudmFzXCIpO1xyXG5cdFx0Ly8gdGhpcy5jYW52YXMuc3R5bGUuZGlzcGxheSA9IFwiYmxvY2tcIjtcclxuXHRcdHRoaXMucGl4ZWxSYXRpbyA9IHBpeGVsUmF0aW8gfHwgd2luZG93LmRldmljZVBpeGVsUmF0aW8gfHwgMTtcclxuXHRcdGNvbnN0IHdpZHRoID0gY29udGFpbmVyLmNsaWVudFdpZHRoICogdGhpcy5waXhlbFJhdGlvO1xyXG5cdFx0Y29uc3QgaGVpZ2h0ID0gY29udGFpbmVyLmNsaWVudEhlaWdodCAqIHRoaXMucGl4ZWxSYXRpbztcclxuXHRcdHRoaXMuY2FudmFzLndpZHRoID0gd2lkdGg7XHJcblx0XHR0aGlzLmNhbnZhcy5oZWlnaHQgPSBoZWlnaHQ7XHJcblx0XHR0aGlzLmNhbnZhcy5zdHlsZS53aWR0aCA9IGNvbnRhaW5lci5jbGllbnRXaWR0aCArIFwicHhcIjtcclxuXHRcdHRoaXMuY2FudmFzLnN0eWxlLmhlaWdodCA9IGNvbnRhaW5lci5jbGllbnRIZWlnaHQgKyBcInB4XCI7XHJcblx0XHRjb250YWluZXIuYXBwZW5kQ2hpbGQodGhpcy5jYW52YXMpO1xyXG5cdFx0dGhpcy5jb250ZXh0ID0gY29udGV4dCB8fCAodGhpcy5jYW52YXMuZ2V0Q29udGV4dChcIndlYmdwdVwiKSBhcyBHUFVDYW52YXNDb250ZXh0KTtcclxuXHRcdHRoaXMuX3VzZUdMU0wgPSB1c2VHTFNMO1xyXG5cdFx0dGhpcy5kZXZpY2UgPSB1bmRlZmluZWQ7XHJcblx0fVxyXG5cclxuXHRwdWJsaWMgYXN5bmMgaW5pdChcclxuXHRcdHJlcXVlc3RBZGFwdGVyID0ge30sXHJcblx0XHRkZXZpY2VEZXNjcmlwdG9yID0ge30sXHJcblx0XHRwcmVzZW50YXRpb25Db250ZXh0RGVzY3JpcHRvciA9IHt9XHJcblx0KTogUHJvbWlzZTxib29sZWFuPiB7XHJcblx0XHR0cnkge1xyXG5cdFx0XHRpZiAoIXRoaXMuY29udGV4dCkge1xyXG5cdFx0XHRcdHRocm93IG5ldyBFcnJvcihgRmFpbGVkIHRvIGluc3RhbnRpYXRlIFwid2ViZ3B1XCIgY29udGV4dC5gKTtcclxuXHRcdFx0fVxyXG5cdFx0XHRpZiAoIW5hdmlnYXRvci5ncHUpIHtcclxuXHRcdFx0XHR0aHJvdyBuZXcgRXJyb3IoYE1pc3NpbmcgXCJuYXZpZ2F0b3IuZ3B1XCIuYCk7XHJcblx0XHRcdH1cclxuXHJcblx0XHRcdHRoaXMuYWRhcHRlciA9IGF3YWl0IG5hdmlnYXRvci5ncHUucmVxdWVzdEFkYXB0ZXIoKTtcclxuXHRcdFx0dGhpcy5kZXZpY2UgPSBhd2FpdCB0aGlzLmFkYXB0ZXIucmVxdWVzdERldmljZSgpO1xyXG5cdFx0XHR0aGlzLnByZXNlbnRhdGlvblNpemUgPSB7XHJcblx0XHRcdFx0d2lkdGg6IHRoaXMuY2FudmFzLmNsaWVudFdpZHRoICogdGhpcy5waXhlbFJhdGlvLFxyXG5cdFx0XHRcdGhlaWdodDogdGhpcy5jYW52YXMuY2xpZW50SGVpZ2h0ICogdGhpcy5waXhlbFJhdGlvLFxyXG5cdFx0XHRcdGRlcHRoOiAxXHJcblx0XHRcdH07XHJcblx0XHRcdHRoaXMucHJlc2VudGF0aW9uRm9ybWF0ID0gbmF2aWdhdG9yLmdwdS5nZXRQcmVmZXJyZWRDYW52YXNGb3JtYXQoKTtcclxuXHRcdFx0dGhpcy5kZXZpY2UuYWRkRXZlbnRMaXN0ZW5lcihcInVuY2FwdHVyZWRlcnJvclwiLCAoZXJyb3IpID0+IHtcclxuXHRcdFx0XHRjb25zb2xlLmVycm9yKGVycm9yKTtcclxuXHRcdFx0XHQvLyBTdGF0ZS5lcnJvciA9IHRydWU7XHJcblx0XHRcdH0pO1xyXG5cdFx0XHRpZiAodGhpcy5fdXNlR0xTTCkgU2hhZGVyU291cmNlLmdsc2xhbmcgPSBhd2FpdCBsb2FkR2xzbGFuZ01vZHVsZSgpO1xyXG5cdFx0XHR0aGlzLm1pcG1hcFRvb2xzID0gbmV3IE1pcG1hcEdlbmVyYXRvcih0aGlzLmRldmljZSk7XHJcblx0XHRcdHRoaXMuY29udGV4dC5jb25maWd1cmUoe1xyXG5cdFx0XHRcdGRldmljZTogdGhpcy5kZXZpY2UsXHJcblx0XHRcdFx0Zm9ybWF0OiB0aGlzLnByZXNlbnRhdGlvbkZvcm1hdCxcclxuXHRcdFx0XHR1c2FnZTogVGV4dHVyZVVzYWdlLlJlbmRlckF0dGFjaG1lbnQsXHJcblx0XHRcdFx0YWxwaGFNb2RlOiBcInByZW11bHRpcGxpZWRcIixcclxuXHRcdFx0XHQuLi5wcmVzZW50YXRpb25Db250ZXh0RGVzY3JpcHRvclxyXG5cdFx0XHR9KTtcclxuXHRcdFx0dGhpcy5fdmlld1BvcnQgPSBuZXcgVmlld1BvcnQoXHJcblx0XHRcdFx0MCxcclxuXHRcdFx0XHQwLFxyXG5cdFx0XHRcdHRoaXMuY2FudmFzLmNsaWVudFdpZHRoICogdGhpcy5waXhlbFJhdGlvLFxyXG5cdFx0XHRcdHRoaXMuY2FudmFzLmNsaWVudEhlaWdodCAqIHRoaXMucGl4ZWxSYXRpb1xyXG5cdFx0XHQpO1xyXG5cdFx0XHR0aGlzLl9zY2lzc29yVGVzdCA9IG5ldyBTY2lzc29yVGVzdChcclxuXHRcdFx0XHQwLFxyXG5cdFx0XHRcdDAsXHJcblx0XHRcdFx0dGhpcy5jYW52YXMuY2xpZW50V2lkdGggKiB0aGlzLnBpeGVsUmF0aW8sXHJcblx0XHRcdFx0dGhpcy5jYW52YXMuY2xpZW50SGVpZ2h0ICogdGhpcy5waXhlbFJhdGlvXHJcblx0XHRcdCk7XHJcblx0XHR9IGNhdGNoIChlcnJvcikge1xyXG5cdFx0XHRjb25zb2xlLmVycm9yKGVycm9yKTtcclxuXHRcdFx0cmV0dXJuIGZhbHNlO1xyXG5cdFx0fVxyXG5cclxuXHRcdHJldHVybiB0cnVlO1xyXG5cdH1cclxuXHRwdWJsaWMgc2V0Vmlld1BvcnQoeDogbnVtYmVyLCB5OiBudW1iZXIsIHdpZHRoOiBudW1iZXIsIGhlaWdodDogbnVtYmVyKSB7XHJcblx0XHR0aGlzLl92aWV3UG9ydC5zZXQoeCwgeSwgd2lkdGgsIGhlaWdodCk7XHJcblx0fVxyXG5cclxuXHRwdWJsaWMgcmVzZXRWaWV3UG9ydFRvRnVsbENhbnZhcygpIHtcclxuXHRcdHRoaXMuX3ZpZXdQb3J0LnNldCgwLCAwLCB0aGlzLmNhbnZhcy5jbGllbnRXaWR0aCAqIHRoaXMucGl4ZWxSYXRpbywgdGhpcy5jYW52YXMuY2xpZW50SGVpZ2h0ICogdGhpcy5waXhlbFJhdGlvKTtcclxuXHR9XHJcblxyXG5cdHB1YmxpYyBzZXRTY2lzc29yVGVzdCh4OiBudW1iZXIsIHk6IG51bWJlciwgd2lkdGg6IG51bWJlciwgaGVpZ2h0OiBudW1iZXIpIHtcclxuXHRcdHRoaXMuX3NjaXNzb3JUZXN0LnNldCh4LCB5LCB3aWR0aCwgaGVpZ2h0KTtcclxuXHR9XHJcblx0cHVibGljIHJlc2l6ZSh3aWR0aDogbnVtYmVyLCBoZWlnaHQ6IG51bWJlciwgcHJlc2VudGF0aW9uQ29udGV4dERlc2NyaXB0b3IgPSB7fSk6IHZvaWQge1xyXG5cdFx0Y29uc3QgdyA9IHdpZHRoICogdGhpcy5waXhlbFJhdGlvO1xyXG5cdFx0Y29uc3QgaCA9IGhlaWdodCAqIHRoaXMucGl4ZWxSYXRpbztcclxuXHRcdHRoaXMuY2FudmFzLnN0eWxlLndpZHRoID0gdyArIFwicHhcIjtcclxuXHRcdHRoaXMuY2FudmFzLnN0eWxlLmhlaWdodCA9IGggKyBcInB4XCI7XHJcblx0XHR0aGlzLmNhbnZhcy53aWR0aCA9IHc7XHJcblx0XHR0aGlzLmNhbnZhcy5oZWlnaHQgPSBoO1xyXG5cdFx0dGhpcy5wcmVzZW50YXRpb25TaXplID0ge1xyXG5cdFx0XHR3aWR0aDogdyxcclxuXHRcdFx0aGVpZ2h0OiBoLFxyXG5cdFx0XHRkZXB0aDogMVxyXG5cdFx0fTtcclxuXHRcdHRoaXMuY29udGV4dC5jb25maWd1cmUoe1xyXG5cdFx0XHRkZXZpY2U6IHRoaXMuZGV2aWNlLFxyXG5cdFx0XHRmb3JtYXQ6IG5hdmlnYXRvci5ncHUuZ2V0UHJlZmVycmVkQ2FudmFzRm9ybWF0KCksXHJcblx0XHRcdHVzYWdlOiBUZXh0dXJlVXNhZ2UuUmVuZGVyQXR0YWNobWVudCxcclxuXHRcdFx0YWxwaGFNb2RlOiBHUFVDYW52YXNDb21wb3NpdGluZ0FscGhhTW9kZS5QcmVtdWx0aXBsaWVkLFxyXG5cdFx0XHQuLi5wcmVzZW50YXRpb25Db250ZXh0RGVzY3JpcHRvclxyXG5cdFx0fSk7XHJcblx0fVxyXG59XHJcblxyXG5leHBvcnQgZGVmYXVsdCBDb250ZXh0O1xyXG4iLCJpbXBvcnQgeyBTdG9yYWdlVGV4dHVyZUFjY2VzcywgVGV4dHVyZUZvcm1hdCB9IGZyb20gXCIuLi9jb3JlL1dlYkdQVUNvbnN0YW50XCI7XHJcbmltcG9ydCB7IFdlYkdQVVRleHR1cmVQcm9wcywgSW1hZ2VEYXRhIH0gZnJvbSBcIi4uL2NvcmUvV2ViR1BVVHlwZXNcIjtcclxuaW1wb3J0IGRlZmF1bHRWYWx1ZSBmcm9tIFwiLi4vdXRpbHMvZGVmYXVsdFZhbHVlXCI7XHJcbmltcG9ydCB7IE1pcG1hcEdlbmVyYXRvciB9IGZyb20gXCIuLi91dGlscy9NaXBtYXBHZW5lcmF0b3JcIjtcclxuaW1wb3J0IENvbnRleHQgZnJvbSBcIi4vQ29udGV4dFwiO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgVGV4dHVyZSB7XHJcblx0W3g6IHN0cmluZ106IGFueTtcclxuXHRwcml2YXRlIF90ZXh0dXJlVmlldzogR1BVVGV4dHVyZVZpZXc7XHJcblx0cHVibGljIGdwdVRleHR1cmU/OiBHUFVUZXh0dXJlO1xyXG5cdHB1YmxpYyBtaXBMZXZlbENvdW50PzogbnVtYmVyO1xyXG5cdHB1YmxpYyBjb250ZXh0PzogQ29udGV4dDtcclxuXHRwdWJsaWMgZGV2aWNlPzogR1BVRGV2aWNlO1xyXG5cdHB1YmxpYyB0ZXh0dXJlUHJvcD86IFdlYkdQVVRleHR1cmVQcm9wcztcclxuXHRwdWJsaWMgZGlydHk6IGJvb2xlYW47XHJcblx0cHVibGljIGZpeGVkU2l6ZTogYm9vbGVhbjtcclxuXHRwdWJsaWMgc3RhdGljIG1pcG1hcFRvb2xzOiBNaXBtYXBHZW5lcmF0b3I7XHJcblx0Y29uc3RydWN0b3IodGV4dHVyZVByb3A6IFdlYkdQVVRleHR1cmVQcm9wcykge1xyXG5cdFx0dGhpcy50ZXh0dXJlUHJvcCA9IE9iamVjdC5hc3NpZ24oXHJcblx0XHRcdHtcclxuXHRcdFx0XHRmb3JtYXQ6IFRleHR1cmVGb3JtYXQuUkdCQThVbm9ybSxcclxuXHRcdFx0XHR1c2FnZTogR1BVVGV4dHVyZVVzYWdlLlRFWFRVUkVfQklORElORyB8IEdQVVRleHR1cmVVc2FnZS5DT1BZX0RTVCB8IEdQVVRleHR1cmVVc2FnZS5SRU5ERVJfQVRUQUNITUVOVCxcclxuXHRcdFx0XHRkYXRhSXNUZXh0dXJlOiBmYWxzZVxyXG5cdFx0XHR9LFxyXG5cdFx0XHR0ZXh0dXJlUHJvcFxyXG5cdFx0KTtcclxuXHRcdHRoaXMuZGlydHkgPSB0cnVlO1xyXG5cdFx0dGhpcy5maXhlZFNpemUgPSB0ZXh0dXJlUHJvcC5maXhlZFNpemUgfHwgZmFsc2U7XHJcblx0fVxyXG5cdGdldCBsYXlvdXRUeXBlKCkge1xyXG5cdFx0Y29uc3QgeyB2aWV3Rm9ybWF0cywgc2FtcGxlVHlwZSwgc2FtcGxlQ291bnQgfSA9IHRoaXMudGV4dHVyZVByb3A7XHJcblx0XHQvLyBjb25zdFxyXG5cdFx0cmV0dXJuIHtcclxuXHRcdFx0c2FtcGxlVHlwZTogZGVmYXVsdFZhbHVlKHNhbXBsZVR5cGUsIFwiZmxvYXRcIiksXHJcblx0XHRcdHZpZXdEaW1lbnNpb246IGRlZmF1bHRWYWx1ZSh2aWV3Rm9ybWF0cywgXCIyZFwiKSxcclxuXHRcdFx0bXVsdGlzYW1wbGVkOiBzYW1wbGVDb3VudCAmJiBzYW1wbGVDb3VudCA+IDEgPyB0cnVlIDogZmFsc2VcclxuXHRcdH07XHJcblx0fVxyXG5cdGdldCBzdG9yYWdlVGV4dHVyZUxheW91dFR5cGUoKSB7XHJcblx0XHRjb25zdCB7IGFjY2VzcyA9IFN0b3JhZ2VUZXh0dXJlQWNjZXNzLldyaXRlT25seSwgdmlld0Zvcm1hdHMsIGZvcm1hdCB9ID0gdGhpcy50ZXh0dXJlUHJvcDtcclxuXHRcdHJldHVybiB7XHJcblx0XHRcdHZpZXdEaW1lbnNpb246IGRlZmF1bHRWYWx1ZSh2aWV3Rm9ybWF0cywgXCIyZFwiKSxcclxuXHRcdFx0YWNjZXNzLFxyXG5cdFx0XHRmb3JtYXRcclxuXHRcdH07XHJcblx0fVxyXG5cdGdldCB0ZXh0dXJlVmlldygpIHtcclxuXHRcdGlmICghdGhpcy5fdGV4dHVyZVZpZXcpXHJcblx0XHRcdHRoaXMuX3RleHR1cmVWaWV3ID0gdGhpcy5ncHVUZXh0dXJlLmNyZWF0ZVZpZXcoe1xyXG5cdFx0XHRcdGRpbWVuc2lvbjogPEdQVVRleHR1cmVWaWV3RGltZW5zaW9uPmRlZmF1bHRWYWx1ZSh0aGlzLnRleHR1cmVQcm9wLnZpZXdGb3JtYXRzLCBcIjJkXCIpXHJcblx0XHRcdH0pO1xyXG5cdFx0cmV0dXJuIHRoaXMuX3RleHR1cmVWaWV3O1xyXG5cdH1cclxuXHR1cGRhdGUoZGV2aWNlOiBHUFVEZXZpY2UpIHtcclxuXHRcdGlmICghdGhpcy5kZXZpY2UpIHRoaXMuZGV2aWNlID0gZGV2aWNlO1xyXG5cdFx0aWYgKHRoaXMuZGlydHkpIHtcclxuXHRcdFx0dGhpcy5jaGVja05lZWRDcmVhdGVUZXh0dXJlKCk7XHJcblx0XHRcdHRoaXMuZGlydHkgPSBmYWxzZTtcclxuXHRcdFx0aWYgKHRoaXMudGV4dHVyZVByb3AuZGF0YSkge1xyXG5cdFx0XHRcdGlmIChBcnJheS5pc0FycmF5KHRoaXMudGV4dHVyZVByb3AuZGF0YSkpIHtcclxuXHRcdFx0XHRcdHRoaXMudGV4dHVyZVByb3AuZGF0YS5mb3JFYWNoKChpbWFnZURhdGEpID0+IHtcclxuXHRcdFx0XHRcdFx0dGhpcy5zZXREYXRhKGltYWdlRGF0YSk7XHJcblx0XHRcdFx0XHR9KTtcclxuXHRcdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdFx0dGhpcy5zZXREYXRhKHRoaXMudGV4dHVyZVByb3AuZGF0YSk7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9XHJcblx0XHRcdGlmICh0aGlzLnRleHR1cmVQcm9wLm5lZWRNaXBNYXApIHtcclxuXHRcdFx0XHRpZiAoIVRleHR1cmUubWlwbWFwVG9vbHMpIFRleHR1cmUubWlwbWFwVG9vbHMgPSBuZXcgTWlwbWFwR2VuZXJhdG9yKHRoaXMuZGV2aWNlKTtcclxuXHRcdFx0XHR0aGlzLmdwdVRleHR1cmUgPSBUZXh0dXJlLm1pcG1hcFRvb2xzLmdlbmVyYXRlTWlwbWFwKHRoaXMpO1xyXG5cdFx0XHR9XHJcblx0XHR9XHJcblx0fVxyXG5cdHByaXZhdGUgc2V0RGF0YShvcHRpb25zOiBJbWFnZURhdGEpIHtcclxuXHRcdGNvbnN0IHtcclxuXHRcdFx0c291cmNlLFxyXG5cdFx0XHR3aWR0aCA9IG9wdGlvbnMuc291cmNlLndpZHRoLFxyXG5cdFx0XHRoZWlnaHQgPSBvcHRpb25zLnNvdXJjZS5oZWlnaHQsXHJcblx0XHRcdGRlcHRoID0gMSxcclxuXHRcdFx0c291cmNlWCA9IDAsXHJcblx0XHRcdHNvdXJjZVkgPSAwLFxyXG5cdFx0XHRtaXBMZXZlbCA9IDAsXHJcblx0XHRcdHggPSAwLFxyXG5cdFx0XHR5ID0gMCxcclxuXHRcdFx0eiA9IDAsXHJcblx0XHRcdGFzcGVjdCA9IFwiYWxsXCIsXHJcblx0XHRcdGNvbG9yU3BhY2UgPSBcInNyZ2JcIixcclxuXHRcdFx0cHJlbXVsdGlwbGllZEFscGhhID0gZmFsc2VcclxuXHRcdH0gPSBvcHRpb25zO1xyXG5cdFx0aWYgKHNvdXJjZSBpbnN0YW5jZW9mIFRleHR1cmUpIHtcclxuXHRcdFx0bGV0IGNvbW1hbmRFbmNvZGVyID0gdGhpcy5kZXZpY2UuY3JlYXRlQ29tbWFuZEVuY29kZXIoKTtcclxuXHRcdFx0Y29tbWFuZEVuY29kZXIuY29weVRleHR1cmVUb1RleHR1cmUoXHJcblx0XHRcdFx0e1xyXG5cdFx0XHRcdFx0dGV4dHVyZTogPEdQVVRleHR1cmU+c291cmNlLmdwdVRleHR1cmUsXHJcblx0XHRcdFx0XHRvcmlnaW46IFtzb3VyY2VYLCBzb3VyY2VZXVxyXG5cdFx0XHRcdFx0Ly8gYXNwZWN0XHJcblx0XHRcdFx0fSxcclxuXHRcdFx0XHR7XHJcblx0XHRcdFx0XHR0ZXh0dXJlOiB0aGlzLmdwdVRleHR1cmUsXHJcblx0XHRcdFx0XHRvcmlnaW46IHsgeDogMCwgeTogMCwgeiB9LFxyXG5cdFx0XHRcdFx0bWlwTGV2ZWxcclxuXHRcdFx0XHRcdC8vIGFzcGVjdFxyXG5cdFx0XHRcdH0sXHJcblx0XHRcdFx0e1xyXG5cdFx0XHRcdFx0d2lkdGgsXHJcblx0XHRcdFx0XHRoZWlnaHQsXHJcblx0XHRcdFx0XHRkZXB0aE9yQXJyYXlMYXllcnM6IDFcclxuXHRcdFx0XHR9XHJcblx0XHRcdCk7XHJcblx0XHRcdHRoaXMuZGV2aWNlLnF1ZXVlLnN1Ym1pdChbY29tbWFuZEVuY29kZXIuZmluaXNoKCldKTtcclxuXHRcdFx0Y29tbWFuZEVuY29kZXIgPSBudWxsO1xyXG5cdFx0fSBlbHNlIHtcclxuXHRcdFx0dGhpcy5kZXZpY2UucXVldWUuY29weUV4dGVybmFsSW1hZ2VUb1RleHR1cmUoXHJcblx0XHRcdFx0e1xyXG5cdFx0XHRcdFx0c291cmNlLFxyXG5cdFx0XHRcdFx0b3JpZ2luOiBbc291cmNlWCwgc291cmNlWV1cclxuXHRcdFx0XHR9LFxyXG5cdFx0XHRcdHtcclxuXHRcdFx0XHRcdHRleHR1cmU6IHRoaXMuZ3B1VGV4dHVyZSxcclxuXHRcdFx0XHRcdG9yaWdpbjogW3gsIHksIHpdLFxyXG5cdFx0XHRcdFx0bWlwTGV2ZWwsXHJcblx0XHRcdFx0XHRhc3BlY3QsXHJcblx0XHRcdFx0XHRjb2xvclNwYWNlLFxyXG5cdFx0XHRcdFx0cHJlbXVsdGlwbGllZEFscGhhXHJcblx0XHRcdFx0fSxcclxuXHRcdFx0XHRbd2lkdGgsIGhlaWdodCwgZGVwdGhdXHJcblx0XHRcdCk7XHJcblx0XHR9XHJcblx0fVxyXG5cdHNldFNpemUod2lkdGg6IG51bWJlciwgaGVpZ2h0OiBudW1iZXIsIGRlcHRoPzogbnVtYmVyKSB7XHJcblx0XHRpZiAodGhpcy5maXhlZFNpemUpIHJldHVybjtcclxuXHRcdHRoaXMudGV4dHVyZVByb3Auc2l6ZS53aWR0aCA9IHdpZHRoO1xyXG5cdFx0dGhpcy50ZXh0dXJlUHJvcC5zaXplLmhlaWdodCA9IGhlaWdodDtcclxuXHRcdGlmIChkZXB0aCkgdGhpcy50ZXh0dXJlUHJvcC5zaXplLmRlcHRoID0gZGVwdGg7XHJcblx0XHR0aGlzLmRpcnR5ID0gdHJ1ZTtcclxuXHR9XHJcblx0ZGVzdHJveSgpOiB2b2lkIHtcclxuXHRcdHRoaXMuZ3B1VGV4dHVyZS5kZXN0cm95KCk7XHJcblx0fVxyXG5cdHByaXZhdGUgY3JlYXRlR1BVVGV4dHVyZSgpIHtcclxuXHRcdGlmICh0eXBlb2YgdGhpcy50ZXh0dXJlUHJvcC5mb3JtYXQgPT09IFwibnVtYmVyXCIpIHtcclxuXHRcdFx0dGhyb3cgbmV3IEVycm9yKFwibnVtYmVyIGZvcm1hdFwiKTtcclxuXHRcdH1cclxuXHRcdGNvbnN0IHsgd2lkdGgsIGhlaWdodCwgZGVwdGggfSA9IHRoaXMudGV4dHVyZVByb3Auc2l6ZTtcclxuXHRcdHJldHVybiB0aGlzLmRldmljZS5jcmVhdGVUZXh0dXJlKHtcclxuXHRcdFx0bGFiZWw6IHRoaXMudGV4dHVyZVByb3A/LmxhYmVsIHx8IFwidW5kZWZpbmVkXCIsXHJcblx0XHRcdHNpemU6IFt3aWR0aCwgaGVpZ2h0LCBkZXB0aF0sXHJcblx0XHRcdGRpbWVuc2lvbjogdGhpcy50ZXh0dXJlUHJvcC5kaW1lbnNpb24gfHwgXCIyZFwiLFxyXG5cdFx0XHRmb3JtYXQ6IHRoaXMudGV4dHVyZVByb3AuZm9ybWF0IGFzIEdQVVRleHR1cmVGb3JtYXQsXHJcblx0XHRcdHVzYWdlOiB0aGlzLnRleHR1cmVQcm9wLnVzYWdlLFxyXG5cdFx0XHRtaXBMZXZlbENvdW50OiB0aGlzLnRleHR1cmVQcm9wLm1pcExldmVsQ291bnQgfHwgMSxcclxuXHRcdFx0c2FtcGxlQ291bnQ6IHRoaXMudGV4dHVyZVByb3Auc2FtcGxlQ291bnQgfHwgMVxyXG5cdFx0fSk7XHJcblx0fVxyXG5cdHByaXZhdGUgY2hlY2tOZWVkQ3JlYXRlVGV4dHVyZSgpIHtcclxuXHRcdGNvbnN0IHsgd2lkdGgsIGhlaWdodCwgZGVwdGggfSA9IHRoaXMudGV4dHVyZVByb3Auc2l6ZTtcclxuXHRcdGlmICh0aGlzLmdwdVRleHR1cmUpIHtcclxuXHRcdFx0aWYgKHdpZHRoICE9IHRoaXMuZ3B1VGV4dHVyZS53aWR0aCB8fCBoZWlnaHQgIT0gdGhpcy5ncHVUZXh0dXJlLmhlaWdodCkge1xyXG5cdFx0XHRcdHRoaXMuX3RleHR1cmVWaWV3ID0gdW5kZWZpbmVkO1xyXG5cdFx0XHRcdHRoaXMuZ3B1VGV4dHVyZS5kZXN0cm95KCk7XHJcblx0XHRcdFx0dGhpcy5ncHVUZXh0dXJlID0gdGhpcy5jcmVhdGVHUFVUZXh0dXJlKCk7XHJcblx0XHRcdH1cclxuXHRcdH0gZWxzZSB7XHJcblx0XHRcdHRoaXMuZ3B1VGV4dHVyZSA9IHRoaXMuY3JlYXRlR1BVVGV4dHVyZSgpO1xyXG5cdFx0fVxyXG5cdH1cclxufVxyXG4iLCJjbGFzcyBTYW1wbGVyIHtcclxuXHRwdWJsaWMgZ3B1U2FtcGxlcjogR1BVU2FtcGxlcjtcclxuXHRwdWJsaWMgbGF5b3V0VHlwZTogR1BVU2FtcGxlckJpbmRpbmdMYXlvdXQ7XHJcblxyXG5cdHN0YXRpYyBiYXNlU2FtcGxlciA9IG5ldyBTYW1wbGVyKHtcclxuXHRcdG1hZ0ZpbHRlcjogXCJsaW5lYXJcIixcclxuXHRcdG1pbkZpbHRlcjogXCJsaW5lYXJcIlxyXG5cdH0pO1xyXG5cclxuXHRjb25zdHJ1Y3RvcihcclxuXHRcdHB1YmxpYyBkZXNjcmlwdG9yPzogR1BVU2FtcGxlckRlc2NyaXB0b3IsXHJcblx0XHRsYXlvdXRUeXBlOiBHUFVTYW1wbGVyQmluZGluZ0xheW91dCA9IHtcclxuXHRcdFx0dHlwZTogXCJmaWx0ZXJpbmdcIlxyXG5cdFx0fVxyXG5cdCkge1xyXG5cdFx0dGhpcy5kZXNjcmlwdG9yID0ge307XHJcblx0XHRPYmplY3QuYXNzaWduKFxyXG5cdFx0XHR0aGlzLmRlc2NyaXB0b3IsXHJcblx0XHRcdHtcclxuXHRcdFx0XHRtYWdGaWx0ZXI6IFwibGluZWFyXCIsXHJcblx0XHRcdFx0bWluRmlsdGVyOiBcImxpbmVhclwiLFxyXG5cdFx0XHRcdC8vIG1pcG1hcEZpbHRlcjogXCJsaW5lYXJcIixcclxuXHRcdFx0XHRhZGRyZXNzTW9kZVU6IFwiY2xhbXAtdG8tZWRnZVwiLFxyXG5cdFx0XHRcdGFkZHJlc3NNb2RlVjogXCJjbGFtcC10by1lZGdlXCJcclxuXHRcdFx0XHQvLyBhZGRyZXNzTW9kZVc6IFwiY2xhbXAtdG8tZWRnZVwiLFxyXG5cdFx0XHR9LFxyXG5cdFx0XHRkZXNjcmlwdG9yXHJcblx0XHQpO1xyXG5cdFx0dGhpcy5sYXlvdXRUeXBlID0gbGF5b3V0VHlwZTtcclxuXHR9XHJcblx0dXBkYXRlKGRldmljZTogR1BVRGV2aWNlKSB7XHJcblx0XHRpZiAoIXRoaXMuZ3B1U2FtcGxlcikgdGhpcy5ncHVTYW1wbGVyID0gZGV2aWNlLmNyZWF0ZVNhbXBsZXIodGhpcy5kZXNjcmlwdG9yKTtcclxuXHR9XHJcbn1cclxuXHJcbmV4cG9ydCBkZWZhdWx0IFNhbXBsZXI7XHJcbiIsImltcG9ydCB7IEF0dGFjaG1lbnRPcHRpb25zIH0gZnJvbSBcIi4uL2NvcmUvV2ViR1BVVHlwZXNcIjtcclxuaW1wb3J0IFRleHR1cmUgZnJvbSBcIi4vVGV4dHVyZVwiO1xyXG5cclxuY2xhc3MgQXR0YWNobWVudCB7XHJcblx0cHVibGljIG9wOiBHUFVMb2FkT3AgPSBcImNsZWFyXCI7XHJcblx0cHVibGljIHN0b3JlT3A6IEdQVVN0b3JlT3AgPSBcInN0b3JlXCI7XHJcblxyXG5cdHB1YmxpYyB0ZXh0dXJlPzogVGV4dHVyZTtcclxuXHRwdWJsaWMgcmVzb2x2ZVRhcmdldD86IFRleHR1cmU7XHJcblx0cHVibGljIHRleHR1cmVWaWV3PzogKCkgPT4gR1BVVGV4dHVyZVZpZXc7XHJcblx0cHVibGljIHJlYWRPbmx5PzogYm9vbGVhbjtcclxuXHJcblx0Y29uc3RydWN0b3IocHVibGljIHZhbHVlOiBHUFVDb2xvckRpY3QgfCBHUFVDb2xvciB8IG51bWJlciwgb3B0aW9ucz86IEF0dGFjaG1lbnRPcHRpb25zKSB7XHJcblx0XHRPYmplY3QuYXNzaWduKHRoaXMsIG9wdGlvbnMpO1xyXG5cdH1cclxufVxyXG5cclxuZXhwb3J0IGRlZmF1bHQgQXR0YWNobWVudDtcclxuIiwiZXhwb3J0IGRlZmF1bHQgZnVuY3Rpb24gZGVmaW5lZCh2YWx1ZSkge1xuXHRyZXR1cm4gdmFsdWUgIT09IHVuZGVmaW5lZCAmJiB2YWx1ZSAhPT0gbnVsbDtcbn1cbiIsIi8qXG4gIGh0dHBzOi8vZ2l0aHViLmNvbS9iYW5rc2VhbiB3cmFwcGVkIE1ha290byBNYXRzdW1vdG8gYW5kIFRha3VqaSBOaXNoaW11cmEncyBjb2RlIGluIGEgbmFtZXNwYWNlXG4gIHNvIGl0J3MgYmV0dGVyIGVuY2Fwc3VsYXRlZC4gTm93IHlvdSBjYW4gaGF2ZSBtdWx0aXBsZSByYW5kb20gbnVtYmVyIGdlbmVyYXRvcnNcbiAgYW5kIHRoZXkgd29uJ3Qgc3RvbXAgYWxsIG92ZXIgZWFjaG90aGVyJ3Mgc3RhdGUuXG5cbiAgSWYgeW91IHdhbnQgdG8gdXNlIHRoaXMgYXMgYSBzdWJzdGl0dXRlIGZvciBNYXRoLnJhbmRvbSgpLCB1c2UgdGhlIHJhbmRvbSgpXG4gIG1ldGhvZCBsaWtlIHNvOlxuXG4gIHZhciBtID0gbmV3IE1lcnNlbm5lVHdpc3RlcigpO1xuICB2YXIgcmFuZG9tTnVtYmVyID0gbS5yYW5kb20oKTtcblxuICBZb3UgY2FuIGFsc28gY2FsbCB0aGUgb3RoZXIgZ2VucmFuZF97Zm9vfSgpIG1ldGhvZHMgb24gdGhlIGluc3RhbmNlLlxuXG4gIElmIHlvdSB3YW50IHRvIHVzZSBhIHNwZWNpZmljIHNlZWQgaW4gb3JkZXIgdG8gZ2V0IGEgcmVwZWF0YWJsZSByYW5kb21cbiAgc2VxdWVuY2UsIHBhc3MgYW4gaW50ZWdlciBpbnRvIHRoZSBjb25zdHJ1Y3RvcjpcblxuICB2YXIgbSA9IG5ldyBNZXJzZW5uZVR3aXN0ZXIoMTIzKTtcblxuICBhbmQgdGhhdCB3aWxsIGFsd2F5cyBwcm9kdWNlIHRoZSBzYW1lIHJhbmRvbSBzZXF1ZW5jZS5cblxuICBTZWFuIE1jQ3VsbG91Z2ggKGJhbmtzZWFuQGdtYWlsLmNvbSlcbiovXG5cbi8qXG4gICBBIEMtcHJvZ3JhbSBmb3IgTVQxOTkzNywgd2l0aCBpbml0aWFsaXphdGlvbiBpbXByb3ZlZCAyMDAyLzEvMjYuXG4gICBDb2RlZCBieSBUYWt1amkgTmlzaGltdXJhIGFuZCBNYWtvdG8gTWF0c3Vtb3RvLlxuXG4gICBCZWZvcmUgdXNpbmcsIGluaXRpYWxpemUgdGhlIHN0YXRlIGJ5IHVzaW5nIGluaXRfc2VlZChzZWVkKVxuICAgb3IgaW5pdF9ieV9hcnJheShpbml0X2tleSwga2V5X2xlbmd0aCkuXG5cbiAgIENvcHlyaWdodCAoQykgMTk5NyAtIDIwMDIsIE1ha290byBNYXRzdW1vdG8gYW5kIFRha3VqaSBOaXNoaW11cmEsXG4gICBBbGwgcmlnaHRzIHJlc2VydmVkLlxuXG4gICBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXRcbiAgIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uc1xuICAgYXJlIG1ldDpcblxuICAgICAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodFxuICAgICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuXG5cbiAgICAgMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHRcbiAgICAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZVxuICAgICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLlxuXG4gICAgIDMuIFRoZSBuYW1lcyBvZiBpdHMgY29udHJpYnV0b3JzIG1heSBub3QgYmUgdXNlZCB0byBlbmRvcnNlIG9yIHByb21vdGVcbiAgICAgICAgcHJvZHVjdHMgZGVyaXZlZCBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuXG4gICAgICAgIHBlcm1pc3Npb24uXG5cbiAgIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIEFORCBDT05UUklCVVRPUlNcbiAgIFwiQVMgSVNcIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1RcbiAgIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUlxuICAgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBUSEUgQ09QWVJJR0hUIE9XTkVSIE9SXG4gICBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCxcbiAgIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTyxcbiAgIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUlxuICAgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWSBPRlxuICAgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUIChJTkNMVURJTkdcbiAgIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJU1xuICAgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuXG5cblxuICAgQW55IGZlZWRiYWNrIGlzIHZlcnkgd2VsY29tZS5cbiAgIGh0dHA6Ly93d3cubWF0aC5zY2kuaGlyb3NoaW1hLXUuYWMuanAvfm0tbWF0L01UL2VtdC5odG1sXG4gICBlbWFpbDogbS1tYXQgQCBtYXRoLnNjaS5oaXJvc2hpbWEtdS5hYy5qcCAocmVtb3ZlIHNwYWNlKVxuKi9cblxudmFyIE1lcnNlbm5lVHdpc3RlciA9IGZ1bmN0aW9uKHNlZWQpIHtcblx0aWYgKHNlZWQgPT0gdW5kZWZpbmVkKSB7XG5cdFx0c2VlZCA9IG5ldyBEYXRlKCkuZ2V0VGltZSgpO1xuXHR9XG5cblx0LyogUGVyaW9kIHBhcmFtZXRlcnMgKi9cblx0dGhpcy5OID0gNjI0O1xuXHR0aGlzLk0gPSAzOTc7XG5cdHRoaXMuTUFUUklYX0EgPSAweDk5MDhiMGRmOyAgIC8qIGNvbnN0YW50IHZlY3RvciBhICovXG5cdHRoaXMuVVBQRVJfTUFTSyA9IDB4ODAwMDAwMDA7IC8qIG1vc3Qgc2lnbmlmaWNhbnQgdy1yIGJpdHMgKi9cblx0dGhpcy5MT1dFUl9NQVNLID0gMHg3ZmZmZmZmZjsgLyogbGVhc3Qgc2lnbmlmaWNhbnQgciBiaXRzICovXG5cblx0dGhpcy5tdCA9IG5ldyBBcnJheSh0aGlzLk4pOyAvKiB0aGUgYXJyYXkgZm9yIHRoZSBzdGF0ZSB2ZWN0b3IgKi9cblx0dGhpcy5tdGk9dGhpcy5OKzE7IC8qIG10aT09TisxIG1lYW5zIG10W05dIGlzIG5vdCBpbml0aWFsaXplZCAqL1xuXG5cdGlmIChzZWVkLmNvbnN0cnVjdG9yID09IEFycmF5KSB7XG5cdFx0dGhpcy5pbml0X2J5X2FycmF5KHNlZWQsIHNlZWQubGVuZ3RoKTtcblx0fVxuXHRlbHNlIHtcblx0XHR0aGlzLmluaXRfc2VlZChzZWVkKTtcblx0fVxufVxuXG4vKiBpbml0aWFsaXplcyBtdFtOXSB3aXRoIGEgc2VlZCAqL1xuLyogb3JpZ2luIG5hbWUgaW5pdF9nZW5yYW5kICovXG5NZXJzZW5uZVR3aXN0ZXIucHJvdG90eXBlLmluaXRfc2VlZCA9IGZ1bmN0aW9uKHMpIHtcblx0dGhpcy5tdFswXSA9IHMgPj4+IDA7XG5cdGZvciAodGhpcy5tdGk9MTsgdGhpcy5tdGk8dGhpcy5OOyB0aGlzLm10aSsrKSB7XG5cdFx0dmFyIHMgPSB0aGlzLm10W3RoaXMubXRpLTFdIF4gKHRoaXMubXRbdGhpcy5tdGktMV0gPj4+IDMwKTtcblx0XHR0aGlzLm10W3RoaXMubXRpXSA9ICgoKCgocyAmIDB4ZmZmZjAwMDApID4+PiAxNikgKiAxODEyNDMzMjUzKSA8PCAxNikgKyAocyAmIDB4MDAwMGZmZmYpICogMTgxMjQzMzI1Mylcblx0XHQrIHRoaXMubXRpO1xuXHRcdC8qIFNlZSBLbnV0aCBUQU9DUCBWb2wyLiAzcmQgRWQuIFAuMTA2IGZvciBtdWx0aXBsaWVyLiAqL1xuXHRcdC8qIEluIHRoZSBwcmV2aW91cyB2ZXJzaW9ucywgTVNCcyBvZiB0aGUgc2VlZCBhZmZlY3QgICAqL1xuXHRcdC8qIG9ubHkgTVNCcyBvZiB0aGUgYXJyYXkgbXRbXS4gICAgICAgICAgICAgICAgICAgICAgICAqL1xuXHRcdC8qIDIwMDIvMDEvMDkgbW9kaWZpZWQgYnkgTWFrb3RvIE1hdHN1bW90byAgICAgICAgICAgICAqL1xuXHRcdHRoaXMubXRbdGhpcy5tdGldID4+Pj0gMDtcblx0XHQvKiBmb3IgPjMyIGJpdCBtYWNoaW5lcyAqL1xuXHR9XG59XG5cbi8qIGluaXRpYWxpemUgYnkgYW4gYXJyYXkgd2l0aCBhcnJheS1sZW5ndGggKi9cbi8qIGluaXRfa2V5IGlzIHRoZSBhcnJheSBmb3IgaW5pdGlhbGl6aW5nIGtleXMgKi9cbi8qIGtleV9sZW5ndGggaXMgaXRzIGxlbmd0aCAqL1xuLyogc2xpZ2h0IGNoYW5nZSBmb3IgQysrLCAyMDA0LzIvMjYgKi9cbk1lcnNlbm5lVHdpc3Rlci5wcm90b3R5cGUuaW5pdF9ieV9hcnJheSA9IGZ1bmN0aW9uKGluaXRfa2V5LCBrZXlfbGVuZ3RoKSB7XG5cdHZhciBpLCBqLCBrO1xuXHR0aGlzLmluaXRfc2VlZCgxOTY1MDIxOCk7XG5cdGk9MTsgaj0wO1xuXHRrID0gKHRoaXMuTj5rZXlfbGVuZ3RoID8gdGhpcy5OIDoga2V5X2xlbmd0aCk7XG5cdGZvciAoOyBrOyBrLS0pIHtcblx0XHR2YXIgcyA9IHRoaXMubXRbaS0xXSBeICh0aGlzLm10W2ktMV0gPj4+IDMwKVxuXHRcdHRoaXMubXRbaV0gPSAodGhpcy5tdFtpXSBeICgoKCgocyAmIDB4ZmZmZjAwMDApID4+PiAxNikgKiAxNjY0NTI1KSA8PCAxNikgKyAoKHMgJiAweDAwMDBmZmZmKSAqIDE2NjQ1MjUpKSlcblx0XHQrIGluaXRfa2V5W2pdICsgajsgLyogbm9uIGxpbmVhciAqL1xuXHRcdHRoaXMubXRbaV0gPj4+PSAwOyAvKiBmb3IgV09SRFNJWkUgPiAzMiBtYWNoaW5lcyAqL1xuXHRcdGkrKzsgaisrO1xuXHRcdGlmIChpPj10aGlzLk4pIHsgdGhpcy5tdFswXSA9IHRoaXMubXRbdGhpcy5OLTFdOyBpPTE7IH1cblx0XHRpZiAoaj49a2V5X2xlbmd0aCkgaj0wO1xuXHR9XG5cdGZvciAoaz10aGlzLk4tMTsgazsgay0tKSB7XG5cdFx0dmFyIHMgPSB0aGlzLm10W2ktMV0gXiAodGhpcy5tdFtpLTFdID4+PiAzMCk7XG5cdFx0dGhpcy5tdFtpXSA9ICh0aGlzLm10W2ldIF4gKCgoKChzICYgMHhmZmZmMDAwMCkgPj4+IDE2KSAqIDE1NjYwODM5NDEpIDw8IDE2KSArIChzICYgMHgwMDAwZmZmZikgKiAxNTY2MDgzOTQxKSlcblx0XHQtIGk7IC8qIG5vbiBsaW5lYXIgKi9cblx0XHR0aGlzLm10W2ldID4+Pj0gMDsgLyogZm9yIFdPUkRTSVpFID4gMzIgbWFjaGluZXMgKi9cblx0XHRpKys7XG5cdFx0aWYgKGk+PXRoaXMuTikgeyB0aGlzLm10WzBdID0gdGhpcy5tdFt0aGlzLk4tMV07IGk9MTsgfVxuXHR9XG5cblx0dGhpcy5tdFswXSA9IDB4ODAwMDAwMDA7IC8qIE1TQiBpcyAxOyBhc3N1cmluZyBub24temVybyBpbml0aWFsIGFycmF5ICovXG59XG5cbi8qIGdlbmVyYXRlcyBhIHJhbmRvbSBudW1iZXIgb24gWzAsMHhmZmZmZmZmZl0taW50ZXJ2YWwgKi9cbi8qIG9yaWdpbiBuYW1lIGdlbnJhbmRfaW50MzIgKi9cbk1lcnNlbm5lVHdpc3Rlci5wcm90b3R5cGUucmFuZG9tX2ludCA9IGZ1bmN0aW9uKCkge1xuXHR2YXIgeTtcblx0dmFyIG1hZzAxID0gbmV3IEFycmF5KDB4MCwgdGhpcy5NQVRSSVhfQSk7XG5cdC8qIG1hZzAxW3hdID0geCAqIE1BVFJJWF9BICBmb3IgeD0wLDEgKi9cblxuXHRpZiAodGhpcy5tdGkgPj0gdGhpcy5OKSB7IC8qIGdlbmVyYXRlIE4gd29yZHMgYXQgb25lIHRpbWUgKi9cblx0XHR2YXIga2s7XG5cblx0XHRpZiAodGhpcy5tdGkgPT0gdGhpcy5OKzEpICAvKiBpZiBpbml0X3NlZWQoKSBoYXMgbm90IGJlZW4gY2FsbGVkLCAqL1xuXHRcdFx0dGhpcy5pbml0X3NlZWQoNTQ4OSk7ICAvKiBhIGRlZmF1bHQgaW5pdGlhbCBzZWVkIGlzIHVzZWQgKi9cblxuXHRcdGZvciAoa2s9MDtrazx0aGlzLk4tdGhpcy5NO2trKyspIHtcblx0XHRcdHkgPSAodGhpcy5tdFtra10mdGhpcy5VUFBFUl9NQVNLKXwodGhpcy5tdFtraysxXSZ0aGlzLkxPV0VSX01BU0spO1xuXHRcdFx0dGhpcy5tdFtra10gPSB0aGlzLm10W2trK3RoaXMuTV0gXiAoeSA+Pj4gMSkgXiBtYWcwMVt5ICYgMHgxXTtcblx0XHR9XG5cdFx0Zm9yICg7a2s8dGhpcy5OLTE7a2srKykge1xuXHRcdFx0eSA9ICh0aGlzLm10W2trXSZ0aGlzLlVQUEVSX01BU0spfCh0aGlzLm10W2trKzFdJnRoaXMuTE9XRVJfTUFTSyk7XG5cdFx0XHR0aGlzLm10W2trXSA9IHRoaXMubXRba2srKHRoaXMuTS10aGlzLk4pXSBeICh5ID4+PiAxKSBeIG1hZzAxW3kgJiAweDFdO1xuXHRcdH1cblx0XHR5ID0gKHRoaXMubXRbdGhpcy5OLTFdJnRoaXMuVVBQRVJfTUFTSyl8KHRoaXMubXRbMF0mdGhpcy5MT1dFUl9NQVNLKTtcblx0XHR0aGlzLm10W3RoaXMuTi0xXSA9IHRoaXMubXRbdGhpcy5NLTFdIF4gKHkgPj4+IDEpIF4gbWFnMDFbeSAmIDB4MV07XG5cblx0XHR0aGlzLm10aSA9IDA7XG5cdH1cblxuXHR5ID0gdGhpcy5tdFt0aGlzLm10aSsrXTtcblxuXHQvKiBUZW1wZXJpbmcgKi9cblx0eSBePSAoeSA+Pj4gMTEpO1xuXHR5IF49ICh5IDw8IDcpICYgMHg5ZDJjNTY4MDtcblx0eSBePSAoeSA8PCAxNSkgJiAweGVmYzYwMDAwO1xuXHR5IF49ICh5ID4+PiAxOCk7XG5cblx0cmV0dXJuIHkgPj4+IDA7XG59XG5cbi8qIGdlbmVyYXRlcyBhIHJhbmRvbSBudW1iZXIgb24gWzAsMHg3ZmZmZmZmZl0taW50ZXJ2YWwgKi9cbi8qIG9yaWdpbiBuYW1lIGdlbnJhbmRfaW50MzEgKi9cbk1lcnNlbm5lVHdpc3Rlci5wcm90b3R5cGUucmFuZG9tX2ludDMxID0gZnVuY3Rpb24oKSB7XG5cdHJldHVybiAodGhpcy5yYW5kb21faW50KCk+Pj4xKTtcbn1cblxuLyogZ2VuZXJhdGVzIGEgcmFuZG9tIG51bWJlciBvbiBbMCwxXS1yZWFsLWludGVydmFsICovXG4vKiBvcmlnaW4gbmFtZSBnZW5yYW5kX3JlYWwxICovXG5NZXJzZW5uZVR3aXN0ZXIucHJvdG90eXBlLnJhbmRvbV9pbmNsID0gZnVuY3Rpb24oKSB7XG5cdHJldHVybiB0aGlzLnJhbmRvbV9pbnQoKSooMS4wLzQyOTQ5NjcyOTUuMCk7XG5cdC8qIGRpdmlkZWQgYnkgMl4zMi0xICovXG59XG5cbi8qIGdlbmVyYXRlcyBhIHJhbmRvbSBudW1iZXIgb24gWzAsMSktcmVhbC1pbnRlcnZhbCAqL1xuTWVyc2VubmVUd2lzdGVyLnByb3RvdHlwZS5yYW5kb20gPSBmdW5jdGlvbigpIHtcblx0cmV0dXJuIHRoaXMucmFuZG9tX2ludCgpKigxLjAvNDI5NDk2NzI5Ni4wKTtcblx0LyogZGl2aWRlZCBieSAyXjMyICovXG59XG5cbi8qIGdlbmVyYXRlcyBhIHJhbmRvbSBudW1iZXIgb24gKDAsMSktcmVhbC1pbnRlcnZhbCAqL1xuLyogb3JpZ2luIG5hbWUgZ2VucmFuZF9yZWFsMyAqL1xuTWVyc2VubmVUd2lzdGVyLnByb3RvdHlwZS5yYW5kb21fZXhjbCA9IGZ1bmN0aW9uKCkge1xuXHRyZXR1cm4gKHRoaXMucmFuZG9tX2ludCgpICsgMC41KSooMS4wLzQyOTQ5NjcyOTYuMCk7XG5cdC8qIGRpdmlkZWQgYnkgMl4zMiAqL1xufVxuXG4vKiBnZW5lcmF0ZXMgYSByYW5kb20gbnVtYmVyIG9uIFswLDEpIHdpdGggNTMtYml0IHJlc29sdXRpb24qL1xuLyogb3JpZ2luIG5hbWUgZ2VucmFuZF9yZXM1MyAqL1xuTWVyc2VubmVUd2lzdGVyLnByb3RvdHlwZS5yYW5kb21fbG9uZyA9IGZ1bmN0aW9uKCkge1xuXHR2YXIgYT10aGlzLnJhbmRvbV9pbnQoKT4+PjUsIGI9dGhpcy5yYW5kb21faW50KCk+Pj42O1xuXHRyZXR1cm4oYSo2NzEwODg2NC4wK2IpKigxLjAvOTAwNzE5OTI1NDc0MDk5Mi4wKTtcbn1cblxuLyogVGhlc2UgcmVhbCB2ZXJzaW9ucyBhcmUgZHVlIHRvIElzYWt1IFdhZGEsIDIwMDIvMDEvMDkgYWRkZWQgKi9cblxubW9kdWxlLmV4cG9ydHMgPSBNZXJzZW5uZVR3aXN0ZXI7XG4iLCJpbXBvcnQgTWVyc2VubmVUd2lzdGVyIGZyb20gXCJtZXJzZW5uZS10d2lzdGVyXCI7XHJcbmltcG9ydCBkZWZhdWx0VmFsdWUgZnJvbSBcIi4uL3V0aWxzL2RlZmF1bHRWYWx1ZVwiO1xyXG5pbXBvcnQgZGVmaW5lZCBmcm9tIFwiLi4vdXRpbHMvZGVmaW5lZFwiO1xyXG5cclxuY2xhc3MgR01hdGgge1xyXG5cdHB1YmxpYyBzdGF0aWMgRVBTSUxPTjEgPSAwLjE7XHJcblxyXG5cdHB1YmxpYyBzdGF0aWMgRVBTSUxPTjIgPSAwLjAxO1xyXG5cclxuXHRwdWJsaWMgc3RhdGljIEVQU0lMT04zID0gMC4wMDE7XHJcblx0cHVibGljIHN0YXRpYyBFUFNJTE9ONCA9IDAuMDAwMTtcclxuXHJcblx0cHVibGljIHN0YXRpYyBFUFNJTE9ONSA9IDAuMDAwMDE7XHJcblxyXG5cdHB1YmxpYyBzdGF0aWMgRVBTSUxPTjYgPSAwLjAwMDAwMTtcclxuXHJcblx0cHVibGljIHN0YXRpYyBFUFNJTE9ONyA9IDAuMDAwMDAwMTtcclxuXHJcblx0cHVibGljIHN0YXRpYyBFUFNJTE9OOCA9IDAuMDAwMDAwMDE7XHJcblxyXG5cdHB1YmxpYyBzdGF0aWMgRVBTSUxPTjkgPSAwLjAwMDAwMDAwMTtcclxuXHJcblx0cHVibGljIHN0YXRpYyBFUFNJTE9OMTAgPSAwLjAwMDAwMDAwMDE7XHJcblxyXG5cdHB1YmxpYyBzdGF0aWMgRVBTSUxPTjExID0gMC4wMDAwMDAwMDAwMTtcclxuXHJcblx0cHVibGljIHN0YXRpYyBFUFNJTE9OMTIgPSAwLjAwMDAwMDAwMDAwMTtcclxuXHJcblx0cHVibGljIHN0YXRpYyBFUFNJTE9OMTMgPSAwLjAwMDAwMDAwMDAwMDE7XHJcblxyXG5cdHB1YmxpYyBzdGF0aWMgRVBTSUxPTjE0ID0gMC4wMDAwMDAwMDAwMDAwMTtcclxuXHJcblx0cHVibGljIHN0YXRpYyBFUFNJTE9OMTUgPSAwLjAwMDAwMDAwMDAwMDAwMTtcclxuXHJcblx0cHVibGljIHN0YXRpYyBFUFNJTE9OMTYgPSAwLjAwMDAwMDAwMDAwMDAwMDE7XHJcblxyXG5cdHB1YmxpYyBzdGF0aWMgRVBTSUxPTjE3ID0gMC4wMDAwMDAwMDAwMDAwMDAwMTtcclxuXHJcblx0cHVibGljIHN0YXRpYyBFUFNJTE9OMTggPSAwLjAwMDAwMDAwMDAwMDAwMDAwMTtcclxuXHJcblx0cHVibGljIHN0YXRpYyBFUFNJTE9OMTkgPSAwLjAwMDAwMDAwMDAwMDAwMDAwMDE7XHJcblxyXG5cdHB1YmxpYyBzdGF0aWMgRVBTSUxPTjIwID0gMC4wMDAwMDAwMDAwMDAwMDAwMDAwMTtcclxuXHJcblx0cHVibGljIHN0YXRpYyBFUFNJTE9OMjEgPSAwLjAwMDAwMDAwMDAwMDAwMDAwMDAwMTtcclxuXHJcblx0cHVibGljIHN0YXRpYyBHUkFWSVRBVElPTkFMUEFSQU1FVEVSID0gMy45ODYwMDQ0MThlMTQ7XHJcblxyXG5cdHB1YmxpYyBzdGF0aWMgU0lYVFlfRk9VUl9LSUxPQllURVMgPSA2NCAqIDEwMjQ7XHJcblxyXG5cdHB1YmxpYyBzdGF0aWMgRk9VUl9HSUdBQllURVMgPSA0ICogMTAyNCAqIDEwMjQgKiAxMDI0O1xyXG5cclxuXHRzdGF0aWMgc2lnbiA9IGRlZmF1bHRWYWx1ZShNYXRoLnNpZ24sIGZ1bmN0aW9uIHNpZ24odmFsdWUpIHtcclxuXHRcdHZhbHVlID0gK3ZhbHVlOyAvLyBjb2VyY2UgdG8gbnVtYmVyXHJcblx0XHRpZiAodmFsdWUgPT09IDAgfHwgdmFsdWUgIT09IHZhbHVlKSB7XHJcblx0XHRcdC8vIHplcm8gb3IgTmFOXHJcblx0XHRcdHJldHVybiB2YWx1ZTtcclxuXHRcdH1cclxuXHRcdHJldHVybiB2YWx1ZSA+IDAgPyAxIDogLTE7XHJcblx0fSk7XHJcblxyXG5cdHN0YXRpYyBzaWduTm90WmVybyh2YWx1ZSkge1xyXG5cdFx0cmV0dXJuIHZhbHVlIDwgMC4wID8gLTEuMCA6IDEuMDtcclxuXHR9XHJcblxyXG5cdHN0YXRpYyB0b1NOb3JtKHZhbHVlOiBudW1iZXIsIHJhbmdlTWF4aW11bTogbnVtYmVyKTogbnVtYmVyIHtcclxuXHRcdHJhbmdlTWF4aW11bSA9IGRlZmF1bHRWYWx1ZShyYW5nZU1heGltdW0sIDI1NSk7XHJcblx0XHRyZXR1cm4gTWF0aC5yb3VuZCgoR01hdGguY2xhbXAodmFsdWUsIC0xLjAsIDEuMCkgKiAwLjUgKyAwLjUpICogcmFuZ2VNYXhpbXVtKTtcclxuXHR9XHJcblxyXG5cdHN0YXRpYyBmcm9tU05vcm0odmFsdWU6IG51bWJlciwgcmFuZ2VNYXhpbXVtOiBudW1iZXIpOiBudW1iZXIge1xyXG5cdFx0cmFuZ2VNYXhpbXVtID0gZGVmYXVsdFZhbHVlKHJhbmdlTWF4aW11bSwgMjU1KTtcclxuXHRcdHJldHVybiAoR01hdGguY2xhbXAodmFsdWUsIDAuMCwgcmFuZ2VNYXhpbXVtKSAvIHJhbmdlTWF4aW11bSkgKiAyLjAgLSAxLjA7XHJcblx0fVxyXG5cclxuXHRzdGF0aWMgbm9ybWFsaXplKHZhbHVlOiBudW1iZXIsIHJhbmdlTWluaW11bTogbnVtYmVyLCByYW5nZU1heGltdW06IG51bWJlcik6IG51bWJlciB7XHJcblx0XHRyYW5nZU1heGltdW0gPSBNYXRoLm1heChyYW5nZU1heGltdW0gLSByYW5nZU1pbmltdW0sIDAuMCk7XHJcblx0XHRyZXR1cm4gcmFuZ2VNYXhpbXVtID09PSAwLjAgPyAwLjAgOiBHTWF0aC5jbGFtcCgodmFsdWUgLSByYW5nZU1pbmltdW0pIC8gcmFuZ2VNYXhpbXVtLCAwLjAsIDEuMCk7XHJcblx0fVxyXG5cclxuXHRzdGF0aWMgc2luaCA9IGRlZmF1bHRWYWx1ZShNYXRoLnNpbmgsIGZ1bmN0aW9uIHNpbmgodmFsdWUpIHtcclxuXHRcdHJldHVybiAoTWF0aC5leHAodmFsdWUpIC0gTWF0aC5leHAoLXZhbHVlKSkgLyAyLjA7XHJcblx0fSk7XHJcblxyXG5cdHN0YXRpYyBjb3NoID0gZGVmYXVsdFZhbHVlKE1hdGguY29zaCwgZnVuY3Rpb24gY29zaCh2YWx1ZSkge1xyXG5cdFx0cmV0dXJuIChNYXRoLmV4cCh2YWx1ZSkgKyBNYXRoLmV4cCgtdmFsdWUpKSAvIDIuMDtcclxuXHR9KTtcclxuXHJcblx0c3RhdGljIGxlcnAocDogbnVtYmVyLCBxOiBudW1iZXIsIHRpbWU6IG51bWJlcik6IG51bWJlciB7XHJcblx0XHRyZXR1cm4gKDEuMCAtIHRpbWUpICogcCArIHRpbWUgKiBxO1xyXG5cdH1cclxuXHJcblx0c3RhdGljIFBJID0gTWF0aC5QSTtcclxuXHJcblx0c3RhdGljIE9ORV9PVkVSX1BJID0gMS4wIC8gTWF0aC5QSTtcclxuXHJcblx0c3RhdGljIFBJX09WRVJfVFdPID0gTWF0aC5QSSAvIDIuMDtcclxuXHJcblx0c3RhdGljIFBJX09WRVJfVEhSRUUgPSBNYXRoLlBJIC8gMy4wO1xyXG5cclxuXHRzdGF0aWMgUElfT1ZFUl9GT1VSID0gTWF0aC5QSSAvIDQuMDtcclxuXHJcblx0c3RhdGljIFBJX09WRVJfU0lYID0gTWF0aC5QSSAvIDYuMDtcclxuXHJcblx0c3RhdGljIFRIUkVFX1BJX09WRVJfVFdPID0gKDMuMCAqIE1hdGguUEkpIC8gMi4wO1xyXG5cclxuXHRzdGF0aWMgVFdPX1BJID0gMi4wICogTWF0aC5QSTtcclxuXHJcblx0c3RhdGljIE9ORV9PVkVSX1RXT19QSSA9IDEuMCAvICgyLjAgKiBNYXRoLlBJKTtcclxuXHJcblx0c3RhdGljIFJBRElBTlNfUEVSX0RFR1JFRSA9IE1hdGguUEkgLyAxODAuMDtcclxuXHJcblx0c3RhdGljIERFR1JFRVNfUEVSX1JBRElBTiA9IDE4MC4wIC8gTWF0aC5QSTtcclxuXHJcblx0c3RhdGljIFJBRElBTlNfUEVSX0FSQ1NFQ09ORCA9IEdNYXRoLlJBRElBTlNfUEVSX0RFR1JFRSAvIDM2MDAuMDtcclxuXHJcblx0c3RhdGljIHRvUmFkaWFucyhkZWdyZWVzOiBudW1iZXIpOiBudW1iZXIge1xyXG5cdFx0aWYgKCFkZWZpbmVkKGRlZ3JlZXMpKSB7XHJcblx0XHRcdHRocm93IG5ldyBFcnJvcihcImRlZ3JlZXMgaXMgcmVxdWlyZWQuXCIpO1xyXG5cdFx0fVxyXG5cdFx0cmV0dXJuIGRlZ3JlZXMgKiBHTWF0aC5SQURJQU5TX1BFUl9ERUdSRUU7XHJcblx0fVxyXG5cclxuXHRzdGF0aWMgdG9EZWdyZWVzKHJhZGlhbnM6IG51bWJlcik6IG51bWJlciB7XHJcblx0XHRpZiAoIWRlZmluZWQocmFkaWFucykpIHtcclxuXHRcdFx0dGhyb3cgbmV3IEVycm9yKFwicmFkaWFucyBpcyByZXF1aXJlZC5cIik7XHJcblx0XHR9XHJcblx0XHRyZXR1cm4gcmFkaWFucyAqIEdNYXRoLkRFR1JFRVNfUEVSX1JBRElBTjtcclxuXHR9XHJcblxyXG5cdHN0YXRpYyBuZWdhdGl2ZVBpVG9QaShhbmdsZTogbnVtYmVyKTogbnVtYmVyIHtcclxuXHRcdGlmICghZGVmaW5lZChhbmdsZSkpIHtcclxuXHRcdFx0dGhyb3cgbmV3IEVycm9yKFwiYW5nbGUgaXMgcmVxdWlyZWQuXCIpO1xyXG5cdFx0fVxyXG5cdFx0aWYgKGFuZ2xlID49IC1HTWF0aC5QSSAmJiBhbmdsZSA8PSBHTWF0aC5QSSkge1xyXG5cdFx0XHQvLyBFYXJseSBleGl0IGlmIHRoZSBpbnB1dCBpcyBhbHJlYWR5IGluc2lkZSB0aGUgcmFuZ2UuIFRoaXMgYXZvaWRzXHJcblx0XHRcdC8vIHVubmVjZXNzYXJ5IG1hdGggd2hpY2ggY291bGQgaW50cm9kdWNlIGZsb2F0aW5nIHBvaW50IGVycm9yLlxyXG5cdFx0XHRyZXR1cm4gYW5nbGU7XHJcblx0XHR9XHJcblx0XHRyZXR1cm4gR01hdGguemVyb1RvVHdvUGkoYW5nbGUgKyBHTWF0aC5QSSkgLSBHTWF0aC5QSTtcclxuXHR9XHJcblxyXG5cdHN0YXRpYyB6ZXJvVG9Ud29QaShhbmdsZTogbnVtYmVyKTogbnVtYmVyIHtcclxuXHRcdGlmICghZGVmaW5lZChhbmdsZSkpIHtcclxuXHRcdFx0dGhyb3cgbmV3IEVycm9yKFwiYW5nbGUgaXMgcmVxdWlyZWQuXCIpO1xyXG5cdFx0fVxyXG5cdFx0aWYgKGFuZ2xlID49IDAgJiYgYW5nbGUgPD0gR01hdGguVFdPX1BJKSB7XHJcblx0XHRcdC8vIEVhcmx5IGV4aXQgaWYgdGhlIGlucHV0IGlzIGFscmVhZHkgaW5zaWRlIHRoZSByYW5nZS4gVGhpcyBhdm9pZHNcclxuXHRcdFx0Ly8gdW5uZWNlc3NhcnkgbWF0aCB3aGljaCBjb3VsZCBpbnRyb2R1Y2UgZmxvYXRpbmcgcG9pbnQgZXJyb3IuXHJcblx0XHRcdHJldHVybiBhbmdsZTtcclxuXHRcdH1cclxuXHRcdGNvbnN0IG1vZCA9IEdNYXRoLm1vZChhbmdsZSwgR01hdGguVFdPX1BJKTtcclxuXHRcdGlmIChNYXRoLmFicyhtb2QpIDwgR01hdGguRVBTSUxPTjE0ICYmIE1hdGguYWJzKGFuZ2xlKSA+IEdNYXRoLkVQU0lMT04xNCkge1xyXG5cdFx0XHRyZXR1cm4gR01hdGguVFdPX1BJO1xyXG5cdFx0fVxyXG5cdFx0cmV0dXJuIG1vZDtcclxuXHR9XHJcblxyXG5cdHN0YXRpYyBtb2QobTogbnVtYmVyLCBuOiBudW1iZXIpOiBudW1iZXIge1xyXG5cdFx0aWYgKCFkZWZpbmVkKG0pKSB7XHJcblx0XHRcdHRocm93IG5ldyBFcnJvcihcIm0gaXMgcmVxdWlyZWQuXCIpO1xyXG5cdFx0fVxyXG5cdFx0aWYgKCFkZWZpbmVkKG4pKSB7XHJcblx0XHRcdHRocm93IG5ldyBFcnJvcihcIm4gaXMgcmVxdWlyZWQuXCIpO1xyXG5cdFx0fVxyXG5cdFx0aWYgKG4gPT09IDAuMCkge1xyXG5cdFx0XHR0aHJvdyBuZXcgRXJyb3IoXCJkaXZpc29yIGNhbm5vdCBiZSAwLlwiKTtcclxuXHRcdH1cclxuXHRcdGlmIChHTWF0aC5zaWduKG0pID09PSBHTWF0aC5zaWduKG4pICYmIE1hdGguYWJzKG0pIDwgTWF0aC5hYnMobikpIHtcclxuXHRcdFx0Ly8gRWFybHkgZXhpdCBpZiB0aGUgaW5wdXQgZG9lcyBub3QgbmVlZCB0byBiZSBtb2RkZWQuIFRoaXMgYXZvaWRzXHJcblx0XHRcdC8vIHVubmVjZXNzYXJ5IG1hdGggd2hpY2ggY291bGQgaW50cm9kdWNlIGZsb2F0aW5nIHBvaW50IGVycm9yLlxyXG5cdFx0XHRyZXR1cm4gbTtcclxuXHRcdH1cclxuXHJcblx0XHRyZXR1cm4gKChtICUgbikgKyBuKSAlIG47XHJcblx0fVxyXG5cclxuXHRzdGF0aWMgZXF1YWxzRXBzaWxvbihcclxuXHRcdGxlZnQ6IG51bWJlcixcclxuXHRcdHJpZ2h0OiBudW1iZXIsXHJcblx0XHRyZWxhdGl2ZUVwc2lsb246IG51bWJlcixcclxuXHRcdGFic29sdXRlRXBzaWxvbjogbnVtYmVyID0gcmVsYXRpdmVFcHNpbG9uXHJcblx0KTogYm9vbGVhbiB7XHJcblx0XHRpZiAoIWRlZmluZWQobGVmdCkpIHtcclxuXHRcdFx0dGhyb3cgbmV3IEVycm9yKFwibGVmdCBpcyByZXF1aXJlZC5cIik7XHJcblx0XHR9XHJcblx0XHRpZiAoIWRlZmluZWQocmlnaHQpKSB7XHJcblx0XHRcdHRocm93IG5ldyBFcnJvcihcInJpZ2h0IGlzIHJlcXVpcmVkLlwiKTtcclxuXHRcdH1cclxuXHJcblx0XHRyZWxhdGl2ZUVwc2lsb24gPSBkZWZhdWx0VmFsdWUocmVsYXRpdmVFcHNpbG9uLCAwLjApO1xyXG5cdFx0YWJzb2x1dGVFcHNpbG9uID0gZGVmYXVsdFZhbHVlKGFic29sdXRlRXBzaWxvbiwgcmVsYXRpdmVFcHNpbG9uKTtcclxuXHRcdGNvbnN0IGFic0RpZmYgPSBNYXRoLmFicyhsZWZ0IC0gcmlnaHQpO1xyXG5cdFx0cmV0dXJuIGFic0RpZmYgPD0gYWJzb2x1dGVFcHNpbG9uIHx8IGFic0RpZmYgPD0gcmVsYXRpdmVFcHNpbG9uICogTWF0aC5tYXgoTWF0aC5hYnMobGVmdCksIE1hdGguYWJzKHJpZ2h0KSk7XHJcblx0fVxyXG5cclxuXHRzdGF0aWMgbGVzc1RoYW4obGVmdDogbnVtYmVyLCByaWdodDogbnVtYmVyLCBhYnNvbHV0ZUVwc2lsb24gPSAwKTogYm9vbGVhbiB7XHJcblx0XHRpZiAoIWRlZmluZWQobGVmdCkpIHtcclxuXHRcdFx0dGhyb3cgbmV3IEVycm9yKFwiZmlyc3QgaXMgcmVxdWlyZWQuXCIpO1xyXG5cdFx0fVxyXG5cdFx0aWYgKCFkZWZpbmVkKHJpZ2h0KSkge1xyXG5cdFx0XHR0aHJvdyBuZXcgRXJyb3IoXCJzZWNvbmQgaXMgcmVxdWlyZWQuXCIpO1xyXG5cdFx0fVxyXG5cdFx0aWYgKCFkZWZpbmVkKGFic29sdXRlRXBzaWxvbikpIHtcclxuXHRcdFx0dGhyb3cgbmV3IEVycm9yKFwiYWJzb2x1dGVFcHNpbG9uIGlzIHJlcXVpcmVkLlwiKTtcclxuXHRcdH1cclxuXHRcdHJldHVybiBsZWZ0IC0gcmlnaHQgPCAtYWJzb2x1dGVFcHNpbG9uO1xyXG5cdH1cclxuXHJcblx0c3RhdGljIGxlc3NUaGFuT3JFcXVhbHMobGVmdDogbnVtYmVyLCByaWdodDogbnVtYmVyLCBhYnNvbHV0ZUVwc2lsb24gPSAwKTogYm9vbGVhbiB7XHJcblx0XHRpZiAoIWRlZmluZWQobGVmdCkpIHtcclxuXHRcdFx0dGhyb3cgbmV3IEVycm9yKFwiZmlyc3QgaXMgcmVxdWlyZWQuXCIpO1xyXG5cdFx0fVxyXG5cdFx0aWYgKCFkZWZpbmVkKHJpZ2h0KSkge1xyXG5cdFx0XHR0aHJvdyBuZXcgRXJyb3IoXCJzZWNvbmQgaXMgcmVxdWlyZWQuXCIpO1xyXG5cdFx0fVxyXG5cdFx0aWYgKCFkZWZpbmVkKGFic29sdXRlRXBzaWxvbikpIHtcclxuXHRcdFx0dGhyb3cgbmV3IEVycm9yKFwiYWJzb2x1dGVFcHNpbG9uIGlzIHJlcXVpcmVkLlwiKTtcclxuXHRcdH1cclxuXHRcdHJldHVybiBsZWZ0IC0gcmlnaHQgPCBhYnNvbHV0ZUVwc2lsb247XHJcblx0fVxyXG5cclxuXHRzdGF0aWMgZ3JlYXRlclRoYW4obGVmdDogbnVtYmVyLCByaWdodDogbnVtYmVyLCBhYnNvbHV0ZUVwc2lsb24gPSAwKTogYm9vbGVhbiB7XHJcblx0XHRpZiAoIWRlZmluZWQobGVmdCkpIHtcclxuXHRcdFx0dGhyb3cgbmV3IEVycm9yKFwiZmlyc3QgaXMgcmVxdWlyZWQuXCIpO1xyXG5cdFx0fVxyXG5cdFx0aWYgKCFkZWZpbmVkKHJpZ2h0KSkge1xyXG5cdFx0XHR0aHJvdyBuZXcgRXJyb3IoXCJzZWNvbmQgaXMgcmVxdWlyZWQuXCIpO1xyXG5cdFx0fVxyXG5cdFx0aWYgKCFkZWZpbmVkKGFic29sdXRlRXBzaWxvbikpIHtcclxuXHRcdFx0dGhyb3cgbmV3IEVycm9yKFwiYWJzb2x1dGVFcHNpbG9uIGlzIHJlcXVpcmVkLlwiKTtcclxuXHRcdH1cclxuXHRcdHJldHVybiBsZWZ0IC0gcmlnaHQgPiBhYnNvbHV0ZUVwc2lsb247XHJcblx0fVxyXG5cclxuXHRzdGF0aWMgZ3JlYXRlclRoYW5PckVxdWFscyhsZWZ0OiBudW1iZXIsIHJpZ2h0OiBudW1iZXIsIGFic29sdXRlRXBzaWxvbiA9IDApOiBib29sZWFuIHtcclxuXHRcdGlmICghZGVmaW5lZChsZWZ0KSkge1xyXG5cdFx0XHR0aHJvdyBuZXcgRXJyb3IoXCJmaXJzdCBpcyByZXF1aXJlZC5cIik7XHJcblx0XHR9XHJcblx0XHRpZiAoIWRlZmluZWQocmlnaHQpKSB7XHJcblx0XHRcdHRocm93IG5ldyBFcnJvcihcInNlY29uZCBpcyByZXF1aXJlZC5cIik7XHJcblx0XHR9XHJcblx0XHRpZiAoIWRlZmluZWQoYWJzb2x1dGVFcHNpbG9uKSkge1xyXG5cdFx0XHR0aHJvdyBuZXcgRXJyb3IoXCJhYnNvbHV0ZUVwc2lsb24gaXMgcmVxdWlyZWQuXCIpO1xyXG5cdFx0fVxyXG5cdFx0cmV0dXJuIGxlZnQgLSByaWdodCA+IC1hYnNvbHV0ZUVwc2lsb247XHJcblx0fVxyXG5cclxuXHRzdGF0aWMgaXNQb3dlck9mVHdvKG46IG51bWJlcik6IGJvb2xlYW4ge1xyXG5cdFx0Ly8gPj5pbmNsdWRlU3RhcnQoJ2RlYnVnJywgcHJhZ21hcy5kZWJ1Zyk7XHJcblx0XHRpZiAodHlwZW9mIG4gIT09IFwibnVtYmVyXCIgfHwgbiA8IDAgfHwgbiA+IDQyOTQ5NjcyOTUpIHtcclxuXHRcdFx0dGhyb3cgbmV3IEVycm9yKFwiQSBudW1iZXIgYmV0d2VlbiAwIGFuZCAoMl4zMiktMSBpcyByZXF1aXJlZC5cIik7XHJcblx0XHR9XHJcblx0XHQvLyA+PmluY2x1ZGVFbmQoJ2RlYnVnJyk7XHJcblxyXG5cdFx0cmV0dXJuIG4gIT09IDAgJiYgKG4gJiAobiAtIDEpKSA9PT0gMDtcclxuXHR9XHJcblxyXG5cdHN0YXRpYyBuZXh0UG93ZXJPZlR3byhuOiBudW1iZXIpOiBudW1iZXIge1xyXG5cdFx0aWYgKHR5cGVvZiBuICE9PSBcIm51bWJlclwiIHx8IG4gPCAwIHx8IG4gPiAyMTQ3NDgzNjQ4KSB7XHJcblx0XHRcdHRocm93IG5ldyBFcnJvcihcIkEgbnVtYmVyIGJldHdlZW4gMCBhbmQgMl4zMSBpcyByZXF1aXJlZC5cIik7XHJcblx0XHR9XHJcblx0XHQvLyBGcm9tIGh0dHA6Ly9ncmFwaGljcy5zdGFuZm9yZC5lZHUvfnNlYW5kZXIvYml0aGFja3MuaHRtbCNSb3VuZFVwUG93ZXJPZjJcclxuXHRcdC0tbjtcclxuXHRcdG4gfD0gbiA+PiAxO1xyXG5cdFx0biB8PSBuID4+IDI7XHJcblx0XHRuIHw9IG4gPj4gNDtcclxuXHRcdG4gfD0gbiA+PiA4O1xyXG5cdFx0biB8PSBuID4+IDE2O1xyXG5cdFx0KytuO1xyXG5cclxuXHRcdHJldHVybiBuO1xyXG5cdH1cclxuXHJcblx0c3RhdGljIHByZXZpb3VzUG93ZXJPZlR3byhuOiBudW1iZXIpOiBudW1iZXIge1xyXG5cdFx0aWYgKHR5cGVvZiBuICE9PSBcIm51bWJlclwiIHx8IG4gPCAwIHx8IG4gPiA0Mjk0OTY3Mjk1KSB7XHJcblx0XHRcdHRocm93IG5ldyBFcnJvcihcIkEgbnVtYmVyIGJldHdlZW4gMCBhbmQgKDJeMzIpLTEgaXMgcmVxdWlyZWQuXCIpO1xyXG5cdFx0fVxyXG5cclxuXHRcdG4gfD0gbiA+PiAxO1xyXG5cdFx0biB8PSBuID4+IDI7XHJcblx0XHRuIHw9IG4gPj4gNDtcclxuXHRcdG4gfD0gbiA+PiA4O1xyXG5cdFx0biB8PSBuID4+IDE2O1xyXG5cdFx0biB8PSBuID4+IDMyO1xyXG5cclxuXHRcdC8vIFRoZSBwcmV2aW91cyBiaXR3aXNlIG9wZXJhdGlvbnMgaW1wbGljaXRseSBjb252ZXJ0IHRvIHNpZ25lZCAzMi1iaXQuIFVzZSBgPj4+YCB0byBjb252ZXJ0IHRvIHVuc2lnbmVkXHJcblx0XHRuID0gKG4gPj4+IDApIC0gKG4gPj4+IDEpO1xyXG5cclxuXHRcdHJldHVybiBuO1xyXG5cdH1cclxuXHJcblx0c3RhdGljIGNsYW1wKHZhbHVlOiBudW1iZXIsIG1pbjogbnVtYmVyLCBtYXg6IG51bWJlcik6IG51bWJlciB7XHJcblx0XHRyZXR1cm4gdmFsdWUgPCBtaW4gPyBtaW4gOiB2YWx1ZSA+IG1heCA/IG1heCA6IHZhbHVlO1xyXG5cdH1cclxuXHJcblx0c3RhdGljIG5leHRSYW5kb21OdW1iZXIgPSBmdW5jdGlvbiAoKTogbnVtYmVyIHtcclxuXHRcdHJldHVybiByYW5kb21OdW1iZXJHZW5lcmF0b3IucmFuZG9tKCk7XHJcblx0fTtcclxuXHJcblx0c3RhdGljIHJhbmRvbUJldHdlZW4gPSBmdW5jdGlvbiAobWluOiBudW1iZXIsIG1heDogbnVtYmVyKTogbnVtYmVyIHtcclxuXHRcdHJldHVybiBHTWF0aC5uZXh0UmFuZG9tTnVtYmVyKCkgKiAobWF4IC0gbWluKSArIG1pbjtcclxuXHR9O1xyXG5cclxuXHRzdGF0aWMgYWNvc0NsYW1wZWQgPSBmdW5jdGlvbiAodmFsdWU6IG51bWJlcik6IG51bWJlciB7XHJcblx0XHRpZiAoIWRlZmluZWQodmFsdWUpKSB7XHJcblx0XHRcdHRocm93IG5ldyBFcnJvcihcInZhbHVlIGlzIHJlcXVpcmVkLlwiKTtcclxuXHRcdH1cclxuXHJcblx0XHRyZXR1cm4gTWF0aC5hY29zKEdNYXRoLmNsYW1wKHZhbHVlLCAtMS4wLCAxLjApKTtcclxuXHR9O1xyXG5cclxuXHRzdGF0aWMgYXNpbkNsYW1wZWQgPSBmdW5jdGlvbiAodmFsdWU6IG51bWJlcik6IG51bWJlciB7XHJcblx0XHRpZiAoIWRlZmluZWQodmFsdWUpKSB7XHJcblx0XHRcdHRocm93IG5ldyBFcnJvcihcInZhbHVlIGlzIHJlcXVpcmVkLlwiKTtcclxuXHRcdH1cclxuXHJcblx0XHRyZXR1cm4gTWF0aC5hc2luKEdNYXRoLmNsYW1wKHZhbHVlLCAtMS4wLCAxLjApKTtcclxuXHR9O1xyXG5cclxuXHRzdGF0aWMgY2hvcmRMZW5ndGggPSBmdW5jdGlvbiAoYW5nbGU6IG51bWJlciwgcmFkaXVzOiBudW1iZXIpOiBudW1iZXIge1xyXG5cdFx0aWYgKCFkZWZpbmVkKGFuZ2xlKSkge1xyXG5cdFx0XHR0aHJvdyBuZXcgRXJyb3IoXCJhbmdsZSBpcyByZXF1aXJlZC5cIik7XHJcblx0XHR9XHJcblx0XHRpZiAoIWRlZmluZWQocmFkaXVzKSkge1xyXG5cdFx0XHR0aHJvdyBuZXcgRXJyb3IoXCJyYWRpdXMgaXMgcmVxdWlyZWQuXCIpO1xyXG5cdFx0fVxyXG5cclxuXHRcdHJldHVybiAyLjAgKiByYWRpdXMgKiBNYXRoLnNpbihhbmdsZSAqIDAuNSk7XHJcblx0fTtcclxuXHJcblx0c3RhdGljIGxvZ0Jhc2UgPSBmdW5jdGlvbiAobnVtYmVyOiBudW1iZXIsIGJhc2U6IG51bWJlcik6IG51bWJlciB7XHJcblx0XHRpZiAoIWRlZmluZWQobnVtYmVyKSkge1xyXG5cdFx0XHR0aHJvdyBuZXcgRXJyb3IoXCJudW1iZXIgaXMgcmVxdWlyZWQuXCIpO1xyXG5cdFx0fVxyXG5cdFx0aWYgKCFkZWZpbmVkKGJhc2UpKSB7XHJcblx0XHRcdHRocm93IG5ldyBFcnJvcihcImJhc2UgaXMgcmVxdWlyZWQuXCIpO1xyXG5cdFx0fVxyXG5cclxuXHRcdHJldHVybiBNYXRoLmxvZyhudW1iZXIpIC8gTWF0aC5sb2coYmFzZSk7XHJcblx0fTtcclxuXHJcblx0c3RhdGljIGNicnQgPSBkZWZhdWx0VmFsdWUoTWF0aC5jYnJ0LCBmdW5jdGlvbiBjYnJ0KG51bWJlcikge1xyXG5cdFx0Y29uc3QgcmVzdWx0ID0gTWF0aC5wb3coTWF0aC5hYnMobnVtYmVyKSwgMS4wIC8gMy4wKTtcclxuXHRcdHJldHVybiBudW1iZXIgPCAwLjAgPyAtcmVzdWx0IDogcmVzdWx0O1xyXG5cdH0pO1xyXG5cdHN0YXRpYyBsb2cyID0gZGVmYXVsdFZhbHVlKE1hdGgubG9nMiwgZnVuY3Rpb24gbG9nMihudW1iZXIpIHtcclxuXHRcdHJldHVybiBNYXRoLmxvZyhudW1iZXIpICogTWF0aC5MT0cyRTtcclxuXHR9KTtcclxuXHJcblx0LyoqXHJcblx0ICogQHByaXZhdGVcclxuXHQgKi9cclxuXHRzdGF0aWMgZm9nKGRpc3RhbmNlVG9DYW1lcmE6IG51bWJlciwgZGVuc2l0eTogbnVtYmVyKTogbnVtYmVyIHtcclxuXHRcdGNvbnN0IHNjYWxhciA9IGRpc3RhbmNlVG9DYW1lcmEgKiBkZW5zaXR5O1xyXG5cdFx0cmV0dXJuIDEuMCAtIE1hdGguZXhwKC0oc2NhbGFyICogc2NhbGFyKSk7XHJcblx0fVxyXG59XHJcbmNvbnN0IHJhbmRvbU51bWJlckdlbmVyYXRvciA9IG5ldyBNZXJzZW5uZVR3aXN0ZXIoKTtcclxuY29uc3QgZmFjdG9yaWFscyA9IFsxXTtcclxuZXhwb3J0IGRlZmF1bHQgR01hdGg7XHJcbiIsImltcG9ydCB7IEF0dHJpYnV0ZSB9IGZyb20gXCIuLi9yZW5kZXIvQXR0cmlidXRlXCI7XHJcbmltcG9ydCBkZWZpbmVkIGZyb20gXCIuLi91dGlscy9kZWZpbmVkXCI7XHJcbmltcG9ydCBHTWF0aCBmcm9tIFwiLi9NYXRoXCI7XHJcbmltcG9ydCBNYXRyaXgzIGZyb20gXCIuL01hdHJpeDNcIjtcclxuLyoqXHJcbiAqIEEgMkQgQ2FydGVzaWFuIHBvaW50LlxyXG4gKiBAYWxpYXMgVmVjdG9yMlxyXG4gKiBAY29uc3RydWN0b3JcclxuICpcclxuICogQHBhcmFtIHtOdW1iZXJ9IFt4PTAuMF0gVGhlIFggY29tcG9uZW50LlxyXG4gKiBAcGFyYW0ge051bWJlcn0gW3k9MC4wXSBUaGUgWSBjb21wb25lbnQuXHJcbiAqXHJcbiAqL1xyXG5jbGFzcyBWZWN0b3IyIHtcclxuXHRwdWJsaWMgc3RhdGljIFpFUk8gPSBPYmplY3QuZnJlZXplKG5ldyBWZWN0b3IyKDAuMCwgMC4wKSk7XHJcblxyXG5cdHB1YmxpYyBzdGF0aWMgT05FID0gT2JqZWN0LmZyZWV6ZShuZXcgVmVjdG9yMigxLjAsIDEuMCkpO1xyXG5cclxuXHRwdWJsaWMgc3RhdGljIFVOSVRfWCA9IE9iamVjdC5mcmVlemUobmV3IFZlY3RvcjIoMS4wLCAwLjApKTtcclxuXHJcblx0cHVibGljIHN0YXRpYyBVTklUX1kgPSBPYmplY3QuZnJlZXplKG5ldyBWZWN0b3IyKDAuMCwgMS4wKSk7XHJcblxyXG5cdGNvbnN0cnVjdG9yKHB1YmxpYyB4OiBudW1iZXIgPSAwLjAsIHB1YmxpYyB5OiBudW1iZXIgPSAwLjApIHtcclxuXHRcdHRoaXMueCA9IHg7XHJcblx0XHR0aGlzLnkgPSB5O1xyXG5cdH1cclxuXHRzZXQoeDogbnVtYmVyLCB5OiBudW1iZXIpOiBWZWN0b3IyIHtcclxuXHRcdHRoaXMueCA9IHg7XHJcblx0XHR0aGlzLnkgPSB5O1xyXG5cdFx0cmV0dXJuIHRoaXM7XHJcblx0fVxyXG5cdHRvQXJyYXkoKSB7XHJcblx0XHRyZXR1cm4gW3RoaXMueCwgdGhpcy55XTtcclxuXHR9XHJcblxyXG5cdGNsb25lKHJlc3VsdDogVmVjdG9yMik6IFZlY3RvcjIge1xyXG5cdFx0cmV0dXJuIFZlY3RvcjIuY2xvbmUodGhpcywgcmVzdWx0KTtcclxuXHR9XHJcblxyXG5cdGVxdWFscyhyaWdodDogVmVjdG9yMik6IGJvb2xlYW4ge1xyXG5cdFx0cmV0dXJuIFZlY3RvcjIuZXF1YWxzKHRoaXMsIHJpZ2h0KTtcclxuXHR9XHJcblx0ZXF1YWxzRXBzaWxvbihyaWdodDogVmVjdG9yMiwgcmVsYXRpdmVFcHNpbG9uID0gMCwgYWJzb2x1dGVFcHNpbG9uID0gMCk6IGJvb2xlYW4ge1xyXG5cdFx0cmV0dXJuIFZlY3RvcjIuZXF1YWxzRXBzaWxvbih0aGlzLCByaWdodCwgcmVsYXRpdmVFcHNpbG9uLCBhYnNvbHV0ZUVwc2lsb24pO1xyXG5cdH1cclxuXHJcblx0dG9TdHJpbmcoKSB7XHJcblx0XHRyZXR1cm4gYCgke3RoaXMueH0sICR7dGhpcy55fSlgO1xyXG5cdH1cclxuXHRmcm9tQnVmZmVyQXR0cmlidXRlKGF0dHJpYnV0ZTogQXR0cmlidXRlLCBpbmRleDogbnVtYmVyKTogVmVjdG9yMiB7XHJcblx0XHR0aGlzLnggPSBhdHRyaWJ1dGUuZ2V0WChpbmRleCk7XHJcblx0XHR0aGlzLnkgPSBhdHRyaWJ1dGUuZ2V0WShpbmRleCk7XHJcblx0XHRyZXR1cm4gdGhpcztcclxuXHR9XHJcblx0YXBwbHlNYXRyaXgzKG1hdHJpeDM6IE1hdHJpeDMpOiBWZWN0b3IyIHtcclxuXHRcdGNvbnN0IHggPSB0aGlzLngsXHJcblx0XHRcdHkgPSB0aGlzLnk7XHJcblx0XHR0aGlzLnggPSBtYXRyaXgzWzBdICogeCArIG1hdHJpeDNbM10gKiB5ICsgbWF0cml4M1s2XTtcclxuXHRcdHRoaXMueSA9IG1hdHJpeDNbMV0gKiB4ICsgbWF0cml4M1s0XSAqIHkgKyBtYXRyaXgzWzddO1xyXG5cdFx0cmV0dXJuIHRoaXM7XHJcblx0fVxyXG5cclxuXHRzdGF0aWMgZnJvbUVsZW1lbnRzKHg6IG51bWJlciwgeTogbnVtYmVyLCByZXN1bHQ6IFZlY3RvcjIpOiBWZWN0b3IyIHtcclxuXHRcdGlmICghZGVmaW5lZChyZXN1bHQpKSB7XHJcblx0XHRcdHJldHVybiBuZXcgVmVjdG9yMih4LCB5KTtcclxuXHRcdH1cclxuXHJcblx0XHRyZXN1bHQueCA9IHg7XHJcblx0XHRyZXN1bHQueSA9IHk7XHJcblx0XHRyZXR1cm4gcmVzdWx0O1xyXG5cdH1cclxuXHJcblx0c3RhdGljIGNsb25lKGNhcnRlc2lhbjogVmVjdG9yMiwgcmVzdWx0OiBWZWN0b3IyKTogVmVjdG9yMiB7XHJcblx0XHRpZiAoIWRlZmluZWQoY2FydGVzaWFuKSkge1xyXG5cdFx0XHRyZXR1cm4gdW5kZWZpbmVkO1xyXG5cdFx0fVxyXG5cdFx0aWYgKCFkZWZpbmVkKHJlc3VsdCkpIHtcclxuXHRcdFx0cmV0dXJuIG5ldyBWZWN0b3IyKGNhcnRlc2lhbi54LCBjYXJ0ZXNpYW4ueSk7XHJcblx0XHR9XHJcblxyXG5cdFx0cmVzdWx0LnggPSBjYXJ0ZXNpYW4ueDtcclxuXHRcdHJlc3VsdC55ID0gY2FydGVzaWFuLnk7XHJcblx0XHRyZXR1cm4gcmVzdWx0O1xyXG5cdH1cclxuXHJcblx0c3RhdGljIG1heGltdW1Db21wb25lbnQoY2FydGVzaWFuOiBWZWN0b3IyKTogbnVtYmVyIHtcclxuXHRcdHJldHVybiBNYXRoLm1heChjYXJ0ZXNpYW4ueCwgY2FydGVzaWFuLnkpO1xyXG5cdH1cclxuXHJcblx0c3RhdGljIG1pbmltdW1Db21wb25lbnQoY2FydGVzaWFuOiBWZWN0b3IyKTogbnVtYmVyIHtcclxuXHRcdHJldHVybiBNYXRoLm1pbihjYXJ0ZXNpYW4ueCwgY2FydGVzaWFuLnkpO1xyXG5cdH1cclxuXHJcblx0c3RhdGljIG1pbmltdW1CeUNvbXBvbmVudChmaXJzdDogVmVjdG9yMiwgc2Vjb25kOiBWZWN0b3IyLCByZXN1bHQ6IFZlY3RvcjIpOiBWZWN0b3IyIHtcclxuXHRcdHJlc3VsdC54ID0gTWF0aC5taW4oZmlyc3QueCwgc2Vjb25kLngpO1xyXG5cdFx0cmVzdWx0LnkgPSBNYXRoLm1pbihmaXJzdC55LCBzZWNvbmQueSk7XHJcblxyXG5cdFx0cmV0dXJuIHJlc3VsdDtcclxuXHR9XHJcblxyXG5cdHN0YXRpYyBtYXhpbXVtQnlDb21wb25lbnQoZmlyc3Q6IFZlY3RvcjIsIHNlY29uZDogVmVjdG9yMiwgcmVzdWx0OiBWZWN0b3IyKTogVmVjdG9yMiB7XHJcblx0XHRyZXN1bHQueCA9IE1hdGgubWF4KGZpcnN0LngsIHNlY29uZC54KTtcclxuXHRcdHJlc3VsdC55ID0gTWF0aC5tYXgoZmlyc3QueSwgc2Vjb25kLnkpO1xyXG5cdFx0cmV0dXJuIHJlc3VsdDtcclxuXHR9XHJcblxyXG5cdHN0YXRpYyBjbGFtcCh2YWx1ZTogVmVjdG9yMiwgbWluOiBWZWN0b3IyLCBtYXg6IFZlY3RvcjIsIHJlc3VsdDogVmVjdG9yMik6IFZlY3RvcjIge1xyXG5cdFx0Y29uc3QgeCA9IEdNYXRoLmNsYW1wKHZhbHVlLngsIG1pbi54LCBtYXgueCk7XHJcblx0XHRjb25zdCB5ID0gR01hdGguY2xhbXAodmFsdWUueSwgbWluLnksIG1heC55KTtcclxuXHJcblx0XHRyZXN1bHQueCA9IHg7XHJcblx0XHRyZXN1bHQueSA9IHk7XHJcblxyXG5cdFx0cmV0dXJuIHJlc3VsdDtcclxuXHR9XHJcblxyXG5cdHN0YXRpYyBtYWduaXR1ZGVTcXVhcmVkKGNhcnRlc2lhbjogVmVjdG9yMik6IG51bWJlciB7XHJcblx0XHRyZXR1cm4gY2FydGVzaWFuLnggKiBjYXJ0ZXNpYW4ueCArIGNhcnRlc2lhbi55ICogY2FydGVzaWFuLnk7XHJcblx0fVxyXG5cclxuXHRzdGF0aWMgbWFnbml0dWRlKGNhcnRlc2lhbjogVmVjdG9yMik6IG51bWJlciB7XHJcblx0XHRyZXR1cm4gTWF0aC5zcXJ0KFZlY3RvcjIubWFnbml0dWRlU3F1YXJlZChjYXJ0ZXNpYW4pKTtcclxuXHR9XHJcblxyXG5cdHN0YXRpYyBkaXN0YW5jZShsZWZ0OiBWZWN0b3IyLCByaWdodDogVmVjdG9yMik6IG51bWJlciB7XHJcblx0XHRWZWN0b3IyLnN1YnRyYWN0KGxlZnQsIHJpZ2h0LCBkaXN0YW5jZVNjcmF0Y2gpO1xyXG5cdFx0cmV0dXJuIFZlY3RvcjIubWFnbml0dWRlKGRpc3RhbmNlU2NyYXRjaCk7XHJcblx0fVxyXG5cclxuXHRzdGF0aWMgZGlzdGFuY2VTcXVhcmVkKGxlZnQ6IFZlY3RvcjIsIHJpZ2h0OiBWZWN0b3IyKTogbnVtYmVyIHtcclxuXHRcdFZlY3RvcjIuc3VidHJhY3QobGVmdCwgcmlnaHQsIGRpc3RhbmNlU2NyYXRjaCk7XHJcblx0XHRyZXR1cm4gVmVjdG9yMi5tYWduaXR1ZGVTcXVhcmVkKGRpc3RhbmNlU2NyYXRjaCk7XHJcblx0fVxyXG5cclxuXHRzdGF0aWMgbm9ybWFsaXplKGNhcnRlc2lhbjogVmVjdG9yMiwgcmVzdWx0OiBWZWN0b3IyKTogVmVjdG9yMiB7XHJcblx0XHRjb25zdCBtYWduaXR1ZGUgPSBWZWN0b3IyLm1hZ25pdHVkZShjYXJ0ZXNpYW4pO1xyXG5cclxuXHRcdHJlc3VsdC54ID0gY2FydGVzaWFuLnggLyBtYWduaXR1ZGU7XHJcblx0XHRyZXN1bHQueSA9IGNhcnRlc2lhbi55IC8gbWFnbml0dWRlO1xyXG5cclxuXHRcdC8vID4+aW5jbHVkZVN0YXJ0KCdkZWJ1ZycsIHByYWdtYXMuZGVidWcpO1xyXG5cdFx0aWYgKGlzTmFOKHJlc3VsdC54KSB8fCBpc05hTihyZXN1bHQueSkpIHtcclxuXHRcdFx0dGhyb3cgbmV3IEVycm9yKFwibm9ybWFsaXplZCByZXN1bHQgaXMgbm90IGEgbnVtYmVyXCIpO1xyXG5cdFx0fVxyXG5cdFx0Ly8gPj5pbmNsdWRlRW5kKCdkZWJ1ZycpO1xyXG5cclxuXHRcdHJldHVybiByZXN1bHQ7XHJcblx0fVxyXG5cclxuXHRzdGF0aWMgZG90KGxlZnQ6IFZlY3RvcjIsIHJpZ2h0OiBWZWN0b3IyKTogbnVtYmVyIHtcclxuXHRcdHJldHVybiBsZWZ0LnggKiByaWdodC54ICsgbGVmdC55ICogcmlnaHQueTtcclxuXHR9XHJcblxyXG5cdHN0YXRpYyBjcm9zcyhsZWZ0OiBWZWN0b3IyLCByaWdodDogVmVjdG9yMik6IG51bWJlciB7XHJcblx0XHRyZXR1cm4gbGVmdC54ICogcmlnaHQueSAtIGxlZnQueSAqIHJpZ2h0Lng7XHJcblx0fVxyXG5cclxuXHRzdGF0aWMgbXVsdGlwbHlDb21wb25lbnRzKGxlZnQ6IFZlY3RvcjIsIHJpZ2h0OiBWZWN0b3IyLCByZXN1bHQ6IFZlY3RvcjIpOiBWZWN0b3IyIHtcclxuXHRcdHJlc3VsdC54ID0gbGVmdC54ICogcmlnaHQueDtcclxuXHRcdHJlc3VsdC55ID0gbGVmdC55ICogcmlnaHQueTtcclxuXHRcdHJldHVybiByZXN1bHQ7XHJcblx0fVxyXG5cclxuXHRzdGF0aWMgZGl2aWRlQ29tcG9uZW50cyhsZWZ0OiBWZWN0b3IyLCByaWdodDogVmVjdG9yMiwgcmVzdWx0OiBWZWN0b3IyKTogVmVjdG9yMiB7XHJcblx0XHRyZXN1bHQueCA9IGxlZnQueCAvIHJpZ2h0Lng7XHJcblx0XHRyZXN1bHQueSA9IGxlZnQueSAvIHJpZ2h0Lnk7XHJcblx0XHRyZXR1cm4gcmVzdWx0O1xyXG5cdH1cclxuXHJcblx0c3RhdGljIGFkZChsZWZ0OiBWZWN0b3IyLCByaWdodDogVmVjdG9yMiwgcmVzdWx0OiBWZWN0b3IyKTogVmVjdG9yMiB7XHJcblx0XHRyZXN1bHQueCA9IGxlZnQueCArIHJpZ2h0Lng7XHJcblx0XHRyZXN1bHQueSA9IGxlZnQueSArIHJpZ2h0Lnk7XHJcblx0XHRyZXR1cm4gcmVzdWx0O1xyXG5cdH1cclxuXHJcblx0c3RhdGljIHN1YnRyYWN0KGxlZnQ6IFZlY3RvcjIsIHJpZ2h0OiBWZWN0b3IyLCByZXN1bHQ6IFZlY3RvcjIpOiBWZWN0b3IyIHtcclxuXHRcdHJlc3VsdC54ID0gbGVmdC54IC0gcmlnaHQueDtcclxuXHRcdHJlc3VsdC55ID0gbGVmdC55IC0gcmlnaHQueTtcclxuXHRcdHJldHVybiByZXN1bHQ7XHJcblx0fVxyXG5cclxuXHRzdGF0aWMgbXVsdGlwbHlCeVNjYWxhcihjYXJ0ZXNpYW46IFZlY3RvcjIsIHNjYWxhcjogbnVtYmVyLCByZXN1bHQ6IFZlY3RvcjIpOiBWZWN0b3IyIHtcclxuXHRcdHJlc3VsdC54ID0gY2FydGVzaWFuLnggKiBzY2FsYXI7XHJcblx0XHRyZXN1bHQueSA9IGNhcnRlc2lhbi55ICogc2NhbGFyO1xyXG5cdFx0cmV0dXJuIHJlc3VsdDtcclxuXHR9XHJcblxyXG5cdHN0YXRpYyBkaXZpZGVCeVNjYWxhcihjYXJ0ZXNpYW46IFZlY3RvcjIsIHNjYWxhcjogbnVtYmVyLCByZXN1bHQ6IFZlY3RvcjIpOiBWZWN0b3IyIHtcclxuXHRcdHJlc3VsdC54ID0gY2FydGVzaWFuLnggLyBzY2FsYXI7XHJcblx0XHRyZXN1bHQueSA9IGNhcnRlc2lhbi55IC8gc2NhbGFyO1xyXG5cdFx0cmV0dXJuIHJlc3VsdDtcclxuXHR9XHJcblxyXG5cdHN0YXRpYyBuZWdhdGUoY2FydGVzaWFuOiBWZWN0b3IyLCByZXN1bHQ6IFZlY3RvcjIpOiBWZWN0b3IyIHtcclxuXHRcdHJlc3VsdC54ID0gLWNhcnRlc2lhbi54O1xyXG5cdFx0cmVzdWx0LnkgPSAtY2FydGVzaWFuLnk7XHJcblx0XHRyZXR1cm4gcmVzdWx0O1xyXG5cdH1cclxuXHJcblx0c3RhdGljIGFicyhjYXJ0ZXNpYW46IFZlY3RvcjIsIHJlc3VsdDogVmVjdG9yMik6IFZlY3RvcjIge1xyXG5cdFx0cmVzdWx0LnggPSBNYXRoLmFicyhjYXJ0ZXNpYW4ueCk7XHJcblx0XHRyZXN1bHQueSA9IE1hdGguYWJzKGNhcnRlc2lhbi55KTtcclxuXHRcdHJldHVybiByZXN1bHQ7XHJcblx0fVxyXG5cclxuXHRzdGF0aWMgbGVycChzdGFydDogVmVjdG9yMiwgZW5kOiBWZWN0b3IyLCB0OiBudW1iZXIsIHJlc3VsdDogVmVjdG9yMik6IFZlY3RvcjIge1xyXG5cdFx0VmVjdG9yMi5tdWx0aXBseUJ5U2NhbGFyKGVuZCwgdCwgbGVycFNjcmF0Y2gpO1xyXG5cdFx0cmVzdWx0ID0gVmVjdG9yMi5tdWx0aXBseUJ5U2NhbGFyKHN0YXJ0LCAxLjAgLSB0LCByZXN1bHQpO1xyXG5cdFx0cmV0dXJuIFZlY3RvcjIuYWRkKGxlcnBTY3JhdGNoLCByZXN1bHQsIHJlc3VsdCk7XHJcblx0fVxyXG5cclxuXHRzdGF0aWMgYW5nbGVCZXR3ZWVuKGxlZnQ6IFZlY3RvcjIsIHJpZ2h0OiBWZWN0b3IyKTogbnVtYmVyIHtcclxuXHRcdFZlY3RvcjIubm9ybWFsaXplKGxlZnQsIGFuZ2xlQmV0d2VlblNjcmF0Y2gpO1xyXG5cdFx0VmVjdG9yMi5ub3JtYWxpemUocmlnaHQsIGFuZ2xlQmV0d2VlblNjcmF0Y2gyKTtcclxuXHRcdHJldHVybiBHTWF0aC5hY29zQ2xhbXBlZChWZWN0b3IyLmRvdChhbmdsZUJldHdlZW5TY3JhdGNoLCBhbmdsZUJldHdlZW5TY3JhdGNoMikpO1xyXG5cdH1cclxuXHJcblx0c3RhdGljIG1vc3RPcnRob2dvbmFsQXhpcyhjYXJ0ZXNpYW46IFZlY3RvcjIsIHJlc3VsdDogVmVjdG9yMik6IFZlY3RvcjIge1xyXG5cdFx0Y29uc3QgZiA9IFZlY3RvcjIubm9ybWFsaXplKGNhcnRlc2lhbiwgbW9zdE9ydGhvZ29uYWxBeGlzU2NyYXRjaCk7XHJcblx0XHRWZWN0b3IyLmFicyhmLCBmKTtcclxuXHJcblx0XHRpZiAoZi54IDw9IGYueSkge1xyXG5cdFx0XHRyZXN1bHQgPSBWZWN0b3IyLmNsb25lKFZlY3RvcjIuVU5JVF9YLCByZXN1bHQpO1xyXG5cdFx0fSBlbHNlIHtcclxuXHRcdFx0cmVzdWx0ID0gVmVjdG9yMi5jbG9uZShWZWN0b3IyLlVOSVRfWSwgcmVzdWx0KTtcclxuXHRcdH1cclxuXHJcblx0XHRyZXR1cm4gcmVzdWx0O1xyXG5cdH1cclxuXHJcblx0c3RhdGljIGVxdWFscyhsZWZ0OiBWZWN0b3IyLCByaWdodDogVmVjdG9yMik6IGJvb2xlYW4ge1xyXG5cdFx0cmV0dXJuIGxlZnQgPT09IHJpZ2h0IHx8IChkZWZpbmVkKGxlZnQpICYmIGRlZmluZWQocmlnaHQpICYmIGxlZnQueCA9PT0gcmlnaHQueCAmJiBsZWZ0LnkgPT09IHJpZ2h0LnkpO1xyXG5cdH1cclxuXHJcblx0LyoqXHJcblx0ICogQHByaXZhdGVcclxuXHQgKi9cclxuXHRzdGF0aWMgZXF1YWxzQXJyYXkoY2FydGVzaWFuOiBWZWN0b3IyLCBhcnJheTogbnVtYmVyW10sIG9mZnNldDogbnVtYmVyKTogYm9vbGVhbiB7XHJcblx0XHRyZXR1cm4gY2FydGVzaWFuLnggPT09IGFycmF5W29mZnNldF0gJiYgY2FydGVzaWFuLnkgPT09IGFycmF5W29mZnNldCArIDFdO1xyXG5cdH1cclxuXHJcblx0c3RhdGljIGVxdWFsc0Vwc2lsb24obGVmdDogVmVjdG9yMiwgcmlnaHQ6IFZlY3RvcjIsIHJlbGF0aXZlRXBzaWxvbiA9IDAsIGFic29sdXRlRXBzaWxvbiA9IDApOiBib29sZWFuIHtcclxuXHRcdHJldHVybiAoXHJcblx0XHRcdGxlZnQgPT09IHJpZ2h0IHx8XHJcblx0XHRcdChkZWZpbmVkKGxlZnQpICYmXHJcblx0XHRcdFx0ZGVmaW5lZChyaWdodCkgJiZcclxuXHRcdFx0XHRHTWF0aC5lcXVhbHNFcHNpbG9uKGxlZnQueCwgcmlnaHQueCwgcmVsYXRpdmVFcHNpbG9uLCBhYnNvbHV0ZUVwc2lsb24pICYmXHJcblx0XHRcdFx0R01hdGguZXF1YWxzRXBzaWxvbihsZWZ0LnksIHJpZ2h0LnksIHJlbGF0aXZlRXBzaWxvbiwgYWJzb2x1dGVFcHNpbG9uKSlcclxuXHRcdCk7XHJcblx0fVxyXG59XHJcbmNvbnN0IGRpc3RhbmNlU2NyYXRjaCA9IG5ldyBWZWN0b3IyKCk7XHJcbmNvbnN0IGxlcnBTY3JhdGNoID0gbmV3IFZlY3RvcjIoKTtcclxuY29uc3QgYW5nbGVCZXR3ZWVuU2NyYXRjaCA9IG5ldyBWZWN0b3IyKCk7XHJcbmNvbnN0IGFuZ2xlQmV0d2VlblNjcmF0Y2gyID0gbmV3IFZlY3RvcjIoKTtcclxuY29uc3QgbW9zdE9ydGhvZ29uYWxBeGlzU2NyYXRjaCA9IG5ldyBWZWN0b3IyKCk7XHJcblxyXG5leHBvcnQgZGVmYXVsdCBWZWN0b3IyO1xyXG4iLCJpbXBvcnQgeyBBdHRyaWJ1dGUgfSBmcm9tIFwiLi4vcmVuZGVyL0F0dHJpYnV0ZVwiO1xyXG5pbXBvcnQgZGVmaW5lZCBmcm9tIFwiLi4vdXRpbHMvZGVmaW5lZFwiO1xyXG5pbXBvcnQgR01hdGggZnJvbSBcIi4vTWF0aFwiO1xyXG5pbXBvcnQgTWF0cml4MyBmcm9tIFwiLi9NYXRyaXgzXCI7XHJcbmltcG9ydCBNYXRyaXg0IGZyb20gXCIuL01hdHJpeDRcIjtcclxuaW1wb3J0IHsgUXVhdGVybmlvbiB9IGZyb20gXCIuL1F1YXRlcm5pb25cIjtcclxuaW1wb3J0IHsgU3BoZXJpY2FsIH0gZnJvbSBcIi4vU3BoZXJpY2FsXCI7XHJcbmltcG9ydCBWZWN0b3I0IGZyb20gXCIuL1ZlY3RvcjRcIjtcclxuY2xhc3MgVmVjdG9yMyB7XHJcblx0cHVibGljIHN0YXRpYyBaRVJPID0gT2JqZWN0LmZyZWV6ZShuZXcgVmVjdG9yMygwLjAsIDAuMCwgMC4wKSk7XHJcblxyXG5cdHB1YmxpYyBzdGF0aWMgT05FID0gT2JqZWN0LmZyZWV6ZShuZXcgVmVjdG9yMygxLjAsIDEuMCwgMS4wKSk7XHJcblxyXG5cdHB1YmxpYyBzdGF0aWMgVU5JVF9YID0gT2JqZWN0LmZyZWV6ZShuZXcgVmVjdG9yMygxLjAsIDAuMCwgMC4wKSk7XHJcblxyXG5cdHB1YmxpYyBzdGF0aWMgVU5JVF9ZID0gT2JqZWN0LmZyZWV6ZShuZXcgVmVjdG9yMygwLjAsIDEuMCwgMC4wKSk7XHJcblxyXG5cdHB1YmxpYyBzdGF0aWMgVU5JVF9aID0gT2JqZWN0LmZyZWV6ZShuZXcgVmVjdG9yMygwLjAsIDAuMCwgMS4wKSk7XHJcblx0eDogbnVtYmVyO1xyXG5cdHk6IG51bWJlcjtcclxuXHR6OiBudW1iZXI7XHJcblxyXG5cdGNvbnN0cnVjdG9yKHggPSAwLCB5ID0gMCwgeiA9IDApIHtcclxuXHRcdHRoaXMueCA9IHg7XHJcblx0XHR0aGlzLnkgPSB5O1xyXG5cdFx0dGhpcy56ID0gejtcclxuXHR9XHJcblx0c2V0KHg6IG51bWJlciwgeTogbnVtYmVyLCB6OiBudW1iZXIpOiBWZWN0b3IzIHtcclxuXHRcdHRoaXMueCA9IHg7XHJcblx0XHR0aGlzLnkgPSB5O1xyXG5cdFx0dGhpcy56ID0gejtcclxuXHRcdHJldHVybiB0aGlzO1xyXG5cdH1cclxuXHR0b0FycmF5KCk6IG51bWJlcltdIHtcclxuXHRcdHJldHVybiBbdGhpcy54LCB0aGlzLnksIHRoaXMuel07XHJcblx0fVxyXG5cclxuXHRjb3B5KHY6IFZlY3RvcjMpOiBWZWN0b3IzIHtcclxuXHRcdHRoaXMueCA9IHYueDtcclxuXHRcdHRoaXMueSA9IHYueTtcclxuXHRcdHRoaXMueiA9IHYuejtcclxuXHRcdHJldHVybiB0aGlzO1xyXG5cdH1cclxuXHRsZXJwKGVuZDogVmVjdG9yMywgdDogbnVtYmVyKTogVmVjdG9yMyB7XHJcblx0XHRWZWN0b3IzLmxlcnAodGhpcywgZW5kLCB0LCB0aGlzKTtcclxuXHRcdHJldHVybiB0aGlzO1xyXG5cdH1cclxuXHRhZGQodjogVmVjdG9yMyk6IFZlY3RvcjMge1xyXG5cdFx0VmVjdG9yMy5hZGQodGhpcywgdiwgdGhpcyk7XHJcblx0XHRyZXR1cm4gdGhpcztcclxuXHR9XHJcblx0YWRkU2NhbGVkVmVjdG9yKHY6IFZlY3RvcjMsIHM6IG51bWJlcik6IFZlY3RvcjMge1xyXG5cdFx0dGhpcy54ICs9IHYueCAqIHM7XHJcblx0XHR0aGlzLnkgKz0gdi55ICogcztcclxuXHRcdHRoaXMueiArPSB2LnogKiBzO1xyXG5cdFx0cmV0dXJuIHRoaXM7XHJcblx0fVxyXG5cdHN1YnRyYWN0KHY6IFZlY3RvcjMpOiBWZWN0b3IzIHtcclxuXHRcdFZlY3RvcjMuc3VidHJhY3QodGhpcywgdiwgdGhpcyk7XHJcblx0XHRyZXR1cm4gdGhpcztcclxuXHR9XHJcblx0YXBwbHlRdWF0ZXJuaW9uKHE6IFF1YXRlcm5pb24pOiBWZWN0b3IzIHtcclxuXHRcdGNvbnN0IHggPSB0aGlzLngsXHJcblx0XHRcdHkgPSB0aGlzLnksXHJcblx0XHRcdHogPSB0aGlzLno7XHJcblx0XHRjb25zdCBxeCA9IHEueCxcclxuXHRcdFx0cXkgPSBxLnksXHJcblx0XHRcdHF6ID0gcS56LFxyXG5cdFx0XHRxdyA9IHEudztcclxuXHJcblx0XHQvLyBjYWxjdWxhdGUgcXVhdCAqIHZlY3RvclxyXG5cclxuXHRcdGNvbnN0IGl4ID0gcXcgKiB4ICsgcXkgKiB6IC0gcXogKiB5O1xyXG5cdFx0Y29uc3QgaXkgPSBxdyAqIHkgKyBxeiAqIHggLSBxeCAqIHo7XHJcblx0XHRjb25zdCBpeiA9IHF3ICogeiArIHF4ICogeSAtIHF5ICogeDtcclxuXHRcdGNvbnN0IGl3ID0gLXF4ICogeCAtIHF5ICogeSAtIHF6ICogejtcclxuXHJcblx0XHQvLyBjYWxjdWxhdGUgcmVzdWx0ICogaW52ZXJzZSBxdWF0XHJcblxyXG5cdFx0dGhpcy54ID0gaXggKiBxdyArIGl3ICogLXF4ICsgaXkgKiAtcXogLSBpeiAqIC1xeTtcclxuXHRcdHRoaXMueSA9IGl5ICogcXcgKyBpdyAqIC1xeSArIGl6ICogLXF4IC0gaXggKiAtcXo7XHJcblx0XHR0aGlzLnogPSBpeiAqIHF3ICsgaXcgKiAtcXogKyBpeCAqIC1xeSAtIGl5ICogLXF4O1xyXG5cclxuXHRcdHJldHVybiB0aGlzO1xyXG5cdH1cclxuXHRzZXRGcm9tTWF0cml4Q29sdW1uKG06IE1hdHJpeDMgfCBNYXRyaXg0LCBpbmRleDogbnVtYmVyKTogVmVjdG9yMyB7XHJcblx0XHRyZXR1cm4gdGhpcy5mcm9tQXJyYXkobSwgaW5kZXggKiA0KTtcclxuXHR9XHJcblx0ZnJvbUFycmF5KGFycmF5OiBNYXRyaXgzIHwgTWF0cml4NCwgb2Zmc2V0ID0gMCk6IFZlY3RvcjMge1xyXG5cdFx0dGhpcy54ID0gYXJyYXlbb2Zmc2V0XTtcclxuXHRcdHRoaXMueSA9IGFycmF5W29mZnNldCArIDFdO1xyXG5cdFx0dGhpcy56ID0gYXJyYXlbb2Zmc2V0ICsgMl07XHJcblxyXG5cdFx0cmV0dXJuIHRoaXM7XHJcblx0fVxyXG5cclxuXHRtdWx0aXBseUJ5U2NhbGFyKHNjYWxlOiBudW1iZXIpOiBWZWN0b3IzIHtcclxuXHRcdFZlY3RvcjMubXVsdGlwbHlCeVNjYWxhcih0aGlzLCBzY2FsZSwgdGhpcyk7XHJcblx0XHRyZXR1cm4gdGhpcztcclxuXHR9XHJcblxyXG5cdGNsb25lKCk6IFZlY3RvcjMge1xyXG5cdFx0cmV0dXJuIFZlY3RvcjMuY2xvbmUodGhpcywgbmV3IFZlY3RvcjMoKSk7XHJcblx0fVxyXG5cdGxlbmd0aCgpOiBudW1iZXIge1xyXG5cdFx0cmV0dXJuIE1hdGguc3FydCh0aGlzLnggKiB0aGlzLnggKyB0aGlzLnkgKiB0aGlzLnkgKyB0aGlzLnogKiB0aGlzLnopO1xyXG5cdH1cclxuXHRhcHBseU1hdHJpeDQobWF0cml4OiBNYXRyaXg0KTogVmVjdG9yMyB7XHJcblx0XHRjb25zdCB4ID0gdGhpcy54LFxyXG5cdFx0XHR5ID0gdGhpcy55LFxyXG5cdFx0XHR6ID0gdGhpcy56O1xyXG5cdFx0Y29uc3QgZSA9IG1hdHJpeDtcclxuXHRcdGNvbnN0IHcgPSAxIC8gKGVbM10gKiB4ICsgZVs3XSAqIHkgKyBlWzExXSAqIHogKyBlWzE1XSk7XHJcblx0XHR0aGlzLnggPSAoZVswXSAqIHggKyBlWzRdICogeSArIGVbOF0gKiB6ICsgZVsxMl0pICogdztcclxuXHRcdHRoaXMueSA9IChlWzFdICogeCArIGVbNV0gKiB5ICsgZVs5XSAqIHogKyBlWzEzXSkgKiB3O1xyXG5cdFx0dGhpcy56ID0gKGVbMl0gKiB4ICsgZVs2XSAqIHkgKyBlWzEwXSAqIHogKyBlWzE0XSkgKiB3O1xyXG5cdFx0cmV0dXJuIHRoaXM7XHJcblx0fVxyXG5cdGFwcGx5TWF0cml4MyhtYXRyaXg6IE1hdHJpeDMpOiBWZWN0b3IzIHtcclxuXHRcdGNvbnN0IHggPSB0aGlzLngsXHJcblx0XHRcdHkgPSB0aGlzLnksXHJcblx0XHRcdHogPSB0aGlzLno7XHJcblx0XHR0aGlzLnggPSB4ICogbWF0cml4WzBdICsgeSAqIG1hdHJpeFszXSArIHogKiBtYXRyaXhbNl07XHJcblx0XHR0aGlzLnkgPSB4ICogbWF0cml4WzFdICsgeSAqIG1hdHJpeFs0XSArIHogKiBtYXRyaXhbN107XHJcblx0XHR0aGlzLnogPSB4ICogbWF0cml4WzJdICsgeSAqIG1hdHJpeFs1XSArIHogKiBtYXRyaXhbOF07XHJcblx0XHRyZXR1cm4gdGhpcztcclxuXHR9XHJcblx0dHJhbnNmb3JtRGlyZWN0aW9uKG1hdHJpeDogTWF0cml4MyB8IE1hdHJpeDQpOiBWZWN0b3IzIHtcclxuXHRcdGNvbnN0IHggPSB0aGlzLngsXHJcblx0XHRcdHkgPSB0aGlzLnksXHJcblx0XHRcdHogPSB0aGlzLno7XHJcblx0XHRjb25zdCBlID0gbWF0cml4O1xyXG5cdFx0dGhpcy54ID0gZVswXSAqIHggKyBlWzRdICogeSArIGVbOF0gKiB6O1xyXG5cdFx0dGhpcy55ID0gZVsxXSAqIHggKyBlWzVdICogeSArIGVbOV0gKiB6O1xyXG5cdFx0dGhpcy56ID0gZVsyXSAqIHggKyBlWzZdICogeSArIGVbMTBdICogejtcclxuXHRcdHJldHVybiB0aGlzLm5vcm1hbGl6ZSgpO1xyXG5cdH1cclxuXHJcblx0c2V0RnJvbU1hdHJpeFBvc2l0aW9uKG1hdHJpeDogTWF0cml4NCkge1xyXG5cdFx0Y29uc3QgZSA9IG1hdHJpeDtcclxuXHJcblx0XHR0aGlzLnggPSBlWzEyXTtcclxuXHRcdHRoaXMueSA9IGVbMTNdO1xyXG5cdFx0dGhpcy56ID0gZVsxNF07XHJcblxyXG5cdFx0cmV0dXJuIHRoaXM7XHJcblx0fVxyXG5cclxuXHRub3JtYWxpemUoKTogVmVjdG9yMyB7XHJcblx0XHRWZWN0b3IzLm5vcm1hbGl6ZSh0aGlzLCB0aGlzKTtcclxuXHRcdHJldHVybiB0aGlzO1xyXG5cdH1cclxuXHJcblx0ZXF1YWxzKHJpZ2h0OiBWZWN0b3IzKTogYm9vbGVhbiB7XHJcblx0XHRyZXR1cm4gVmVjdG9yMy5lcXVhbHModGhpcywgcmlnaHQpO1xyXG5cdH1cclxuXHJcblx0ZXF1YWxzRXBzaWxvbihyaWdodDogVmVjdG9yMywgcmVsYXRpdmVFcHNpbG9uID0gMCwgYWJzb2x1dGVFcHNpbG9uID0gMCk6IGJvb2xlYW4ge1xyXG5cdFx0cmV0dXJuIFZlY3RvcjMuZXF1YWxzRXBzaWxvbih0aGlzLCByaWdodCwgcmVsYXRpdmVFcHNpbG9uLCBhYnNvbHV0ZUVwc2lsb24pO1xyXG5cdH1cclxuXHJcblx0dG9TdHJpbmcoKSB7XHJcblx0XHRyZXR1cm4gYCgke3RoaXMueH0sICR7dGhpcy55fSwgJHt0aGlzLnp9KWA7XHJcblx0fVxyXG5cdGZyb21CdWZmZXJBdHRyaWJ1dGUoYXR0cmlidXRlOiBBdHRyaWJ1dGUsIGluZGV4OiBudW1iZXIpOiBWZWN0b3IzIHtcclxuXHRcdHRoaXMueCA9IGF0dHJpYnV0ZS5nZXRYKGluZGV4KTtcclxuXHRcdHRoaXMueSA9IGF0dHJpYnV0ZS5nZXRZKGluZGV4KTtcclxuXHRcdHRoaXMueiA9IGF0dHJpYnV0ZS5nZXRaKGluZGV4KTtcclxuXHRcdHJldHVybiB0aGlzO1xyXG5cdH1cclxuXHRzdGF0aWMgZnJvbVZlY3RvcjQodmVjNDogVmVjdG9yNCwgcmVzdWx0OiBWZWN0b3IzKTogVmVjdG9yMyB7XHJcblx0XHRyZXN1bHQueCA9IHZlYzQueDtcclxuXHRcdHJlc3VsdC55ID0gdmVjNC55O1xyXG5cdFx0cmVzdWx0LnogPSB2ZWM0Lno7XHJcblx0XHRyZXR1cm4gcmVzdWx0O1xyXG5cdH1cclxuXHJcblx0c3RhdGljIGZyb21TcGhlcmljYWwoc3BoZXJpY2FsOiBTcGhlcmljYWwsIHJlc3VsdDogVmVjdG9yMyk6IFZlY3RvcjMge1xyXG5cdFx0aWYgKCFkZWZpbmVkKHJlc3VsdCkpIHtcclxuXHRcdFx0cmVzdWx0ID0gbmV3IFZlY3RvcjMoKTtcclxuXHRcdH1cclxuXHRcdGNvbnN0IHsgcGhpLCByYWRpdXMsIHRoZXRhIH0gPSBzcGhlcmljYWw7XHJcblx0XHRjb25zdCBzaW5QaGlSYWRpdXMgPSBNYXRoLnNpbihwaGkpICogcmFkaXVzO1xyXG5cdFx0cmVzdWx0LnggPSBzaW5QaGlSYWRpdXMgKiBNYXRoLnNpbih0aGV0YSk7XHJcblx0XHRyZXN1bHQueSA9IE1hdGguY29zKHBoaSkgKiByYWRpdXM7XHJcblx0XHRyZXN1bHQueiA9IHNpblBoaVJhZGl1cyAqIE1hdGguY29zKHRoZXRhKTtcclxuXHRcdHJldHVybiByZXN1bHQ7XHJcblx0fVxyXG5cclxuXHRzdGF0aWMgZnJvbUVsZW1lbnRzKHg6IG51bWJlciwgeTogbnVtYmVyLCB6OiBudW1iZXIsIHJlc3VsdDogVmVjdG9yMyk6IFZlY3RvcjMge1xyXG5cdFx0aWYgKCFkZWZpbmVkKHJlc3VsdCkpIHtcclxuXHRcdFx0cmV0dXJuIG5ldyBWZWN0b3IzKHgsIHksIHopO1xyXG5cdFx0fVxyXG5cclxuXHRcdHJlc3VsdC54ID0geDtcclxuXHRcdHJlc3VsdC55ID0geTtcclxuXHRcdHJlc3VsdC56ID0gejtcclxuXHRcdHJldHVybiByZXN1bHQ7XHJcblx0fVxyXG5cclxuXHRzdGF0aWMgY2xvbmUoY2FydGVzaWFuOiBWZWN0b3IzLCByZXN1bHQ6IFZlY3RvcjMgPSBuZXcgVmVjdG9yMygpKTogVmVjdG9yMyB7XHJcblx0XHRpZiAoIWRlZmluZWQoY2FydGVzaWFuKSkge1xyXG5cdFx0XHRyZXR1cm4gdW5kZWZpbmVkO1xyXG5cdFx0fVxyXG5cdFx0aWYgKCFkZWZpbmVkKHJlc3VsdCkpIHtcclxuXHRcdFx0cmV0dXJuIG5ldyBWZWN0b3IzKGNhcnRlc2lhbi54LCBjYXJ0ZXNpYW4ueSwgY2FydGVzaWFuLnopO1xyXG5cdFx0fVxyXG5cclxuXHRcdHJlc3VsdC54ID0gY2FydGVzaWFuLng7XHJcblx0XHRyZXN1bHQueSA9IGNhcnRlc2lhbi55O1xyXG5cdFx0cmVzdWx0LnogPSBjYXJ0ZXNpYW4uejtcclxuXHRcdHJldHVybiByZXN1bHQ7XHJcblx0fVxyXG5cclxuXHRzdGF0aWMgbWF4aW11bUNvbXBvbmVudChjYXJ0ZXNpYW46IFZlY3RvcjMpOiBudW1iZXIge1xyXG5cdFx0cmV0dXJuIE1hdGgubWF4KGNhcnRlc2lhbi54LCBjYXJ0ZXNpYW4ueSwgY2FydGVzaWFuLnopO1xyXG5cdH1cclxuXHJcblx0c3RhdGljIG1pbmltdW1Db21wb25lbnQoY2FydGVzaWFuOiBWZWN0b3IzKTogbnVtYmVyIHtcclxuXHRcdHJldHVybiBNYXRoLm1pbihjYXJ0ZXNpYW4ueCwgY2FydGVzaWFuLnksIGNhcnRlc2lhbi56KTtcclxuXHR9XHJcblxyXG5cdHN0YXRpYyBtaW5pbXVtQnlDb21wb25lbnQoZmlyc3Q6IFZlY3RvcjMsIHNlY29uZDogVmVjdG9yMywgcmVzdWx0OiBWZWN0b3IzKTogVmVjdG9yMyB7XHJcblx0XHRyZXN1bHQueCA9IE1hdGgubWluKGZpcnN0LngsIHNlY29uZC54KTtcclxuXHRcdHJlc3VsdC55ID0gTWF0aC5taW4oZmlyc3QueSwgc2Vjb25kLnkpO1xyXG5cdFx0cmVzdWx0LnogPSBNYXRoLm1pbihmaXJzdC56LCBzZWNvbmQueik7XHJcblxyXG5cdFx0cmV0dXJuIHJlc3VsdDtcclxuXHR9XHJcblxyXG5cdHN0YXRpYyBtYXhpbXVtQnlDb21wb25lbnQoZmlyc3Q6IFZlY3RvcjMsIHNlY29uZDogVmVjdG9yMywgcmVzdWx0OiBWZWN0b3IzKTogVmVjdG9yMyB7XHJcblx0XHRyZXN1bHQueCA9IE1hdGgubWF4KGZpcnN0LngsIHNlY29uZC54KTtcclxuXHRcdHJlc3VsdC55ID0gTWF0aC5tYXgoZmlyc3QueSwgc2Vjb25kLnkpO1xyXG5cdFx0cmVzdWx0LnogPSBNYXRoLm1heChmaXJzdC56LCBzZWNvbmQueik7XHJcblx0XHRyZXR1cm4gcmVzdWx0O1xyXG5cdH1cclxuXHJcblx0c3RhdGljIGNsYW1wKHZhbHVlOiBWZWN0b3IzLCBtaW46IFZlY3RvcjMsIG1heDogVmVjdG9yMywgcmVzdWx0OiBWZWN0b3IzKTogVmVjdG9yMyB7XHJcblx0XHRjb25zdCB4ID0gR01hdGguY2xhbXAodmFsdWUueCwgbWluLngsIG1heC54KTtcclxuXHRcdGNvbnN0IHkgPSBHTWF0aC5jbGFtcCh2YWx1ZS55LCBtaW4ueSwgbWF4LnkpO1xyXG5cdFx0Y29uc3QgeiA9IEdNYXRoLmNsYW1wKHZhbHVlLnosIG1pbi56LCBtYXgueik7XHJcblxyXG5cdFx0cmVzdWx0LnggPSB4O1xyXG5cdFx0cmVzdWx0LnkgPSB5O1xyXG5cdFx0cmVzdWx0LnogPSB6O1xyXG5cclxuXHRcdHJldHVybiByZXN1bHQ7XHJcblx0fVxyXG5cclxuXHRzdGF0aWMgbWFnbml0dWRlU3F1YXJlZChjYXJ0ZXNpYW46IFZlY3RvcjMpOiBudW1iZXIge1xyXG5cdFx0cmV0dXJuIGNhcnRlc2lhbi54ICogY2FydGVzaWFuLnggKyBjYXJ0ZXNpYW4ueSAqIGNhcnRlc2lhbi55ICsgY2FydGVzaWFuLnogKiBjYXJ0ZXNpYW4uejtcclxuXHR9XHJcblxyXG5cdHN0YXRpYyBtYWduaXR1ZGUoY2FydGVzaWFuOiBWZWN0b3IzKTogbnVtYmVyIHtcclxuXHRcdHJldHVybiBNYXRoLnNxcnQoVmVjdG9yMy5tYWduaXR1ZGVTcXVhcmVkKGNhcnRlc2lhbikpO1xyXG5cdH1cclxuXHJcblx0c3RhdGljIGRpc3RhbmNlKGxlZnQ6IFZlY3RvcjMsIHJpZ2h0OiBWZWN0b3IzKTogbnVtYmVyIHtcclxuXHRcdFZlY3RvcjMuc3VidHJhY3QobGVmdCwgcmlnaHQsIGRpc3RhbmNlU2NyYXRjaCk7XHJcblx0XHRyZXR1cm4gVmVjdG9yMy5tYWduaXR1ZGUoZGlzdGFuY2VTY3JhdGNoKTtcclxuXHR9XHJcblxyXG5cdHN0YXRpYyBkaXN0YW5jZVNxdWFyZWQobGVmdDogVmVjdG9yMywgcmlnaHQ6IFZlY3RvcjMpOiBudW1iZXIge1xyXG5cdFx0VmVjdG9yMy5zdWJ0cmFjdChsZWZ0LCByaWdodCwgZGlzdGFuY2VTY3JhdGNoKTtcclxuXHRcdHJldHVybiBWZWN0b3IzLm1hZ25pdHVkZVNxdWFyZWQoZGlzdGFuY2VTY3JhdGNoKTtcclxuXHR9XHJcblxyXG5cdHN0YXRpYyBub3JtYWxpemUoY2FydGVzaWFuOiBWZWN0b3IzLCByZXN1bHQ6IFZlY3RvcjMpOiBWZWN0b3IzIHtcclxuXHRcdGNvbnN0IG1hZ25pdHVkZSA9IFZlY3RvcjMubWFnbml0dWRlKGNhcnRlc2lhbik7XHJcblxyXG5cdFx0cmVzdWx0LnggPSBjYXJ0ZXNpYW4ueCAvIG1hZ25pdHVkZTtcclxuXHRcdHJlc3VsdC55ID0gY2FydGVzaWFuLnkgLyBtYWduaXR1ZGU7XHJcblx0XHRyZXN1bHQueiA9IGNhcnRlc2lhbi56IC8gbWFnbml0dWRlO1xyXG5cclxuXHRcdGlmIChpc05hTihyZXN1bHQueCkgfHwgaXNOYU4ocmVzdWx0LnkpIHx8IGlzTmFOKHJlc3VsdC56KSkge1xyXG5cdFx0XHR0aHJvdyBuZXcgRXJyb3IoXCJub3JtYWxpemVkIHJlc3VsdCBpcyBub3QgYSBudW1iZXJcIik7XHJcblx0XHR9XHJcblxyXG5cdFx0cmV0dXJuIHJlc3VsdDtcclxuXHR9XHJcblxyXG5cdHN0YXRpYyBkb3QobGVmdDogVmVjdG9yMywgcmlnaHQ6IFZlY3RvcjMpOiBudW1iZXIge1xyXG5cdFx0cmV0dXJuIGxlZnQueCAqIHJpZ2h0LnggKyBsZWZ0LnkgKiByaWdodC55ICsgbGVmdC56ICogcmlnaHQuejtcclxuXHR9XHJcblxyXG5cdHN0YXRpYyBtdWx0aXBseUNvbXBvbmVudHMobGVmdDogVmVjdG9yMywgcmlnaHQ6IFZlY3RvcjMsIHJlc3VsdDogVmVjdG9yMyk6IFZlY3RvcjMge1xyXG5cdFx0cmVzdWx0LnggPSBsZWZ0LnggKiByaWdodC54O1xyXG5cdFx0cmVzdWx0LnkgPSBsZWZ0LnkgKiByaWdodC55O1xyXG5cdFx0cmVzdWx0LnogPSBsZWZ0LnogKiByaWdodC56O1xyXG5cdFx0cmV0dXJuIHJlc3VsdDtcclxuXHR9XHJcblxyXG5cdHN0YXRpYyBkaXZpZGVDb21wb25lbnRzKGxlZnQ6IFZlY3RvcjMsIHJpZ2h0OiBWZWN0b3IzLCByZXN1bHQ6IFZlY3RvcjMpIHtcclxuXHRcdHJlc3VsdC54ID0gbGVmdC54IC8gcmlnaHQueDtcclxuXHRcdHJlc3VsdC55ID0gbGVmdC55IC8gcmlnaHQueTtcclxuXHRcdHJlc3VsdC56ID0gbGVmdC56IC8gcmlnaHQuejtcclxuXHRcdHJldHVybiByZXN1bHQ7XHJcblx0fVxyXG5cclxuXHRzdGF0aWMgYWRkKGxlZnQ6IFZlY3RvcjMsIHJpZ2h0OiBWZWN0b3IzLCByZXN1bHQ6IFZlY3RvcjMpOiBWZWN0b3IzIHtcclxuXHRcdHJlc3VsdC54ID0gbGVmdC54ICsgcmlnaHQueDtcclxuXHRcdHJlc3VsdC55ID0gbGVmdC55ICsgcmlnaHQueTtcclxuXHRcdHJlc3VsdC56ID0gbGVmdC56ICsgcmlnaHQuejtcclxuXHRcdHJldHVybiByZXN1bHQ7XHJcblx0fVxyXG5cclxuXHRzdGF0aWMgc3VidHJhY3QobGVmdDogVmVjdG9yMywgcmlnaHQ6IFZlY3RvcjMsIHJlc3VsdDogVmVjdG9yMyk6IFZlY3RvcjMge1xyXG5cdFx0cmVzdWx0LnggPSBsZWZ0LnggLSByaWdodC54O1xyXG5cdFx0cmVzdWx0LnkgPSBsZWZ0LnkgLSByaWdodC55O1xyXG5cdFx0cmVzdWx0LnogPSBsZWZ0LnogLSByaWdodC56O1xyXG5cdFx0cmV0dXJuIHJlc3VsdDtcclxuXHR9XHJcblxyXG5cdHN0YXRpYyBtdWx0aXBseUJ5U2NhbGFyKGNhcnRlc2lhbjogVmVjdG9yMywgc2NhbGFyOiBudW1iZXIsIHJlc3VsdDogVmVjdG9yMyk6IFZlY3RvcjMge1xyXG5cdFx0cmVzdWx0LnggPSBjYXJ0ZXNpYW4ueCAqIHNjYWxhcjtcclxuXHRcdHJlc3VsdC55ID0gY2FydGVzaWFuLnkgKiBzY2FsYXI7XHJcblx0XHRyZXN1bHQueiA9IGNhcnRlc2lhbi56ICogc2NhbGFyO1xyXG5cdFx0cmV0dXJuIHJlc3VsdDtcclxuXHR9XHJcblxyXG5cdHN0YXRpYyBkaXZpZGVCeVNjYWxhcihjYXJ0ZXNpYW46IFZlY3RvcjMsIHNjYWxhcjogbnVtYmVyLCByZXN1bHQ6IFZlY3RvcjMpOiBWZWN0b3IzIHtcclxuXHRcdHJlc3VsdC54ID0gY2FydGVzaWFuLnggLyBzY2FsYXI7XHJcblx0XHRyZXN1bHQueSA9IGNhcnRlc2lhbi55IC8gc2NhbGFyO1xyXG5cdFx0cmVzdWx0LnogPSBjYXJ0ZXNpYW4ueiAvIHNjYWxhcjtcclxuXHRcdHJldHVybiByZXN1bHQ7XHJcblx0fVxyXG5cclxuXHRzdGF0aWMgbmVnYXRlKGNhcnRlc2lhbjogVmVjdG9yMywgcmVzdWx0OiBWZWN0b3IzKTogVmVjdG9yMyB7XHJcblx0XHRyZXN1bHQueCA9IC1jYXJ0ZXNpYW4ueDtcclxuXHRcdHJlc3VsdC55ID0gLWNhcnRlc2lhbi55O1xyXG5cdFx0cmVzdWx0LnogPSAtY2FydGVzaWFuLno7XHJcblx0XHRyZXR1cm4gcmVzdWx0O1xyXG5cdH1cclxuXHJcblx0c3RhdGljIGFicyhjYXJ0ZXNpYW46IFZlY3RvcjMsIHJlc3VsdDogVmVjdG9yMyk6IFZlY3RvcjMge1xyXG5cdFx0cmVzdWx0LnggPSBNYXRoLmFicyhjYXJ0ZXNpYW4ueCk7XHJcblx0XHRyZXN1bHQueSA9IE1hdGguYWJzKGNhcnRlc2lhbi55KTtcclxuXHRcdHJlc3VsdC56ID0gTWF0aC5hYnMoY2FydGVzaWFuLnopO1xyXG5cdFx0cmV0dXJuIHJlc3VsdDtcclxuXHR9XHJcblxyXG5cdHN0YXRpYyBsZXJwKHN0YXJ0OiBWZWN0b3IzLCBlbmQ6IFZlY3RvcjMsIHQ6IG51bWJlciwgcmVzdWx0OiBWZWN0b3IzKTogVmVjdG9yMyB7XHJcblx0XHRWZWN0b3IzLm11bHRpcGx5QnlTY2FsYXIoZW5kLCB0LCBsZXJwU2NyYXRjaCk7XHJcblx0XHRyZXN1bHQgPSBWZWN0b3IzLm11bHRpcGx5QnlTY2FsYXIoc3RhcnQsIDEuMCAtIHQsIHJlc3VsdCk7XHJcblx0XHRyZXR1cm4gVmVjdG9yMy5hZGQobGVycFNjcmF0Y2gsIHJlc3VsdCwgcmVzdWx0KTtcclxuXHR9XHJcblxyXG5cdHN0YXRpYyBhbmdsZUJldHdlZW4obGVmdDogVmVjdG9yMywgcmlnaHQ6IFZlY3RvcjMpOiBudW1iZXIge1xyXG5cdFx0VmVjdG9yMy5ub3JtYWxpemUobGVmdCwgYW5nbGVCZXR3ZWVuU2NyYXRjaCk7XHJcblx0XHRWZWN0b3IzLm5vcm1hbGl6ZShyaWdodCwgYW5nbGVCZXR3ZWVuU2NyYXRjaDIpO1xyXG5cdFx0Y29uc3QgY29zaW5lID0gVmVjdG9yMy5kb3QoYW5nbGVCZXR3ZWVuU2NyYXRjaCwgYW5nbGVCZXR3ZWVuU2NyYXRjaDIpO1xyXG5cdFx0Y29uc3Qgc2luZSA9IFZlY3RvcjMubWFnbml0dWRlKFZlY3RvcjMuY3Jvc3MoYW5nbGVCZXR3ZWVuU2NyYXRjaCwgYW5nbGVCZXR3ZWVuU2NyYXRjaDIsIGFuZ2xlQmV0d2VlblNjcmF0Y2gpKTtcclxuXHRcdHJldHVybiBNYXRoLmF0YW4yKHNpbmUsIGNvc2luZSk7XHJcblx0fVxyXG5cclxuXHRzdGF0aWMgbW9zdE9ydGhvZ29uYWxBeGlzKGNhcnRlc2lhbjogVmVjdG9yMywgcmVzdWx0OiBWZWN0b3IzKTogVmVjdG9yMyB7XHJcblx0XHRjb25zdCBmID0gVmVjdG9yMy5ub3JtYWxpemUoY2FydGVzaWFuLCBtb3N0T3J0aG9nb25hbEF4aXNTY3JhdGNoKTtcclxuXHRcdFZlY3RvcjMuYWJzKGYsIGYpO1xyXG5cclxuXHRcdGlmIChmLnggPD0gZi55KSB7XHJcblx0XHRcdGlmIChmLnggPD0gZi56KSB7XHJcblx0XHRcdFx0cmVzdWx0ID0gVmVjdG9yMy5jbG9uZShWZWN0b3IzLlVOSVRfWCwgcmVzdWx0KTtcclxuXHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHRyZXN1bHQgPSBWZWN0b3IzLmNsb25lKFZlY3RvcjMuVU5JVF9aLCByZXN1bHQpO1xyXG5cdFx0XHR9XHJcblx0XHR9IGVsc2UgaWYgKGYueSA8PSBmLnopIHtcclxuXHRcdFx0cmVzdWx0ID0gVmVjdG9yMy5jbG9uZShWZWN0b3IzLlVOSVRfWSwgcmVzdWx0KTtcclxuXHRcdH0gZWxzZSB7XHJcblx0XHRcdHJlc3VsdCA9IFZlY3RvcjMuY2xvbmUoVmVjdG9yMy5VTklUX1osIHJlc3VsdCk7XHJcblx0XHR9XHJcblxyXG5cdFx0cmV0dXJuIHJlc3VsdDtcclxuXHR9XHJcblxyXG5cdHN0YXRpYyBwcm9qZWN0VmVjdG9yKGE6IFZlY3RvcjMsIGI6IFZlY3RvcjMsIHJlc3VsdDogVmVjdG9yMyk6IFZlY3RvcjMge1xyXG5cdFx0Y29uc3Qgc2NhbGFyID0gVmVjdG9yMy5kb3QoYSwgYikgLyBWZWN0b3IzLmRvdChiLCBiKTtcclxuXHRcdHJldHVybiBWZWN0b3IzLm11bHRpcGx5QnlTY2FsYXIoYiwgc2NhbGFyLCByZXN1bHQpO1xyXG5cdH1cclxuXHJcblx0c3RhdGljIGVxdWFscyhsZWZ0OiBWZWN0b3IzLCByaWdodDogVmVjdG9yMyk6IGJvb2xlYW4ge1xyXG5cdFx0cmV0dXJuIChcclxuXHRcdFx0bGVmdCA9PT0gcmlnaHQgfHxcclxuXHRcdFx0KGRlZmluZWQobGVmdCkgJiYgZGVmaW5lZChyaWdodCkgJiYgbGVmdC54ID09PSByaWdodC54ICYmIGxlZnQueSA9PT0gcmlnaHQueSAmJiBsZWZ0LnogPT09IHJpZ2h0LnopXHJcblx0XHQpO1xyXG5cdH1cclxuXHJcblx0LyoqXHJcblx0ICogQHByaXZhdGVcclxuXHQgKi9cclxuXHRzdGF0aWMgZXF1YWxzQXJyYXkoY2FydGVzaWFuOiBWZWN0b3IzLCBhcnJheTogbnVtYmVyW10sIG9mZnNldDogbnVtYmVyKTogYm9vbGVhbiB7XHJcblx0XHRyZXR1cm4gY2FydGVzaWFuLnggPT09IGFycmF5W29mZnNldF0gJiYgY2FydGVzaWFuLnkgPT09IGFycmF5W29mZnNldCArIDFdICYmIGNhcnRlc2lhbi56ID09PSBhcnJheVtvZmZzZXQgKyAyXTtcclxuXHR9XHJcblxyXG5cdHN0YXRpYyBlcXVhbHNFcHNpbG9uKGxlZnQ6IFZlY3RvcjMsIHJpZ2h0OiBWZWN0b3IzLCByZWxhdGl2ZUVwc2lsb24gPSAwLCBhYnNvbHV0ZUVwc2lsb24gPSAwKTogYm9vbGVhbiB7XHJcblx0XHRyZXR1cm4gKFxyXG5cdFx0XHRsZWZ0ID09PSByaWdodCB8fFxyXG5cdFx0XHQoZGVmaW5lZChsZWZ0KSAmJlxyXG5cdFx0XHRcdGRlZmluZWQocmlnaHQpICYmXHJcblx0XHRcdFx0R01hdGguZXF1YWxzRXBzaWxvbihsZWZ0LngsIHJpZ2h0LngsIHJlbGF0aXZlRXBzaWxvbiwgYWJzb2x1dGVFcHNpbG9uKSAmJlxyXG5cdFx0XHRcdEdNYXRoLmVxdWFsc0Vwc2lsb24obGVmdC55LCByaWdodC55LCByZWxhdGl2ZUVwc2lsb24sIGFic29sdXRlRXBzaWxvbikgJiZcclxuXHRcdFx0XHRHTWF0aC5lcXVhbHNFcHNpbG9uKGxlZnQueiwgcmlnaHQueiwgcmVsYXRpdmVFcHNpbG9uLCBhYnNvbHV0ZUVwc2lsb24pKVxyXG5cdFx0KTtcclxuXHR9XHJcblxyXG5cdHN0YXRpYyBjcm9zcyhsZWZ0OiBWZWN0b3IzLCByaWdodDogVmVjdG9yMywgcmVzdWx0OiBWZWN0b3IzKTogVmVjdG9yMyB7XHJcblx0XHRjb25zdCBsZWZ0WCA9IGxlZnQueDtcclxuXHRcdGNvbnN0IGxlZnRZID0gbGVmdC55O1xyXG5cdFx0Y29uc3QgbGVmdFogPSBsZWZ0Lno7XHJcblx0XHRjb25zdCByaWdodFggPSByaWdodC54O1xyXG5cdFx0Y29uc3QgcmlnaHRZID0gcmlnaHQueTtcclxuXHRcdGNvbnN0IHJpZ2h0WiA9IHJpZ2h0Lno7XHJcblxyXG5cdFx0Y29uc3QgeCA9IGxlZnRZICogcmlnaHRaIC0gbGVmdFogKiByaWdodFk7XHJcblx0XHRjb25zdCB5ID0gbGVmdFogKiByaWdodFggLSBsZWZ0WCAqIHJpZ2h0WjtcclxuXHRcdGNvbnN0IHogPSBsZWZ0WCAqIHJpZ2h0WSAtIGxlZnRZICogcmlnaHRYO1xyXG5cclxuXHRcdHJlc3VsdC54ID0geDtcclxuXHRcdHJlc3VsdC55ID0geTtcclxuXHRcdHJlc3VsdC56ID0gejtcclxuXHRcdHJldHVybiByZXN1bHQ7XHJcblx0fVxyXG5cclxuXHRzdGF0aWMgbWlkcG9pbnQgPSBmdW5jdGlvbiAobGVmdDogVmVjdG9yMywgcmlnaHQ6IFZlY3RvcjMsIHJlc3VsdDogVmVjdG9yMyk6IFZlY3RvcjMge1xyXG5cdFx0cmVzdWx0LnggPSAobGVmdC54ICsgcmlnaHQueCkgKiAwLjU7XHJcblx0XHRyZXN1bHQueSA9IChsZWZ0LnkgKyByaWdodC55KSAqIDAuNTtcclxuXHRcdHJlc3VsdC56ID0gKGxlZnQueiArIHJpZ2h0LnopICogMC41O1xyXG5cclxuXHRcdHJldHVybiByZXN1bHQ7XHJcblx0fTtcclxufVxyXG5jb25zdCBkaXN0YW5jZVNjcmF0Y2ggPSBuZXcgVmVjdG9yMygpO1xyXG5jb25zdCBsZXJwU2NyYXRjaCA9IG5ldyBWZWN0b3IzKCk7XHJcbmNvbnN0IGFuZ2xlQmV0d2VlblNjcmF0Y2ggPSBuZXcgVmVjdG9yMygpO1xyXG5jb25zdCBhbmdsZUJldHdlZW5TY3JhdGNoMiA9IG5ldyBWZWN0b3IzKCk7XHJcbmNvbnN0IG1vc3RPcnRob2dvbmFsQXhpc1NjcmF0Y2ggPSBuZXcgVmVjdG9yMygpO1xyXG5leHBvcnQgZGVmYXVsdCBWZWN0b3IzO1xyXG4iLCJpbXBvcnQgeyBWZXJ0ZXhGb3JtYXQgfSBmcm9tIFwiLi4vY29yZS9XZWJHUFVDb25zdGFudFwiO1xyXG5pbXBvcnQgVmVjdG9yMiBmcm9tIFwiLi4vbWF0aC9WZWN0b3IyXCI7XHJcbmltcG9ydCBWZWN0b3IzIGZyb20gXCIuLi9tYXRoL1ZlY3RvcjNcIjtcclxuaW1wb3J0IEJ1ZmZlciBmcm9tIFwiLi4vcmVuZGVyL0J1ZmZlclwiO1xyXG5cclxuZXhwb3J0IGNsYXNzIEF0dHJpYnV0ZSB7XHJcblx0cHVibGljIG9mZnNldDogbnVtYmVyO1xyXG5cdHB1YmxpYyBzaGFkZXJMb2NhdGlvbjogbnVtYmVyO1xyXG5cdHB1YmxpYyB0eXBlOiBzdHJpbmc7XHJcblx0cHVibGljIGZvcm1hdDogc3RyaW5nO1xyXG5cdHB1YmxpYyBhdHRyaWJ1dGVCeXRlU2l6ZTogbnVtYmVyO1xyXG5cdHB1YmxpYyBhdHRyaWJ1dGVUeXBlOiBBdHRyaWJ1dGVUeXBlO1xyXG5cdHB1YmxpYyBkaXJ0eTogYm9vbGVhbjtcclxuXHRwdWJsaWMgc3RhdGljIHYzID0gbmV3IFZlY3RvcjMoKTtcclxuXHRwdWJsaWMgc3RhdGljIHYyID0gbmV3IFZlY3RvcjIoKTtcclxuXHRjb25zdHJ1Y3RvcihwdWJsaWMgbmFtZTogc3RyaW5nLCBwdWJsaWMgdmFsdWU6IEFycmF5PG51bWJlcj4sIHB1YmxpYyBpdGVtU2l6ZTogbnVtYmVyKSB7XHJcblx0XHR0aGlzLm5hbWUgPSBuYW1lO1xyXG5cdFx0dGhpcy5vZmZzZXQgPSAwO1xyXG5cdFx0dGhpcy5zaGFkZXJMb2NhdGlvbiA9IDA7XHJcblx0XHR0aGlzLmF0dHJpYnV0ZVR5cGUgPSBBdHRyaWJ1dGVUeXBlLmF0dHJpYnV0ZTtcclxuXHRcdHRoaXMuZGlydHkgPSB0cnVlO1xyXG5cdH1cclxuXHRnZXRHUFVBdHRyaWJ1dGUoKTogQXJyYXk8R1BVQXR0cmlidXRlPiB7XHJcblx0XHRyZXR1cm4gW1xyXG5cdFx0XHR7XHJcblx0XHRcdFx0c2hhZGVyTG9jYXRpb246IHRoaXMuc2hhZGVyTG9jYXRpb24sXHJcblx0XHRcdFx0Zm9ybWF0OiB0aGlzLmZvcm1hdCxcclxuXHRcdFx0XHRvZmZzZXQ6IHRoaXMub2Zmc2V0XHJcblx0XHRcdH1cclxuXHRcdF07XHJcblx0fVxyXG5cdGRlc3Ryb3koKSB7XHJcblx0XHR0aGlzLnZhbHVlID0gW107XHJcblx0fVxyXG5cdGFwcGx5TWF0cml4MyhtYXRyaXgzKSB7XHJcblx0XHRpZiAodGhpcy5pdGVtU2l6ZSA9PT0gMikge1xyXG5cdFx0XHRmb3IgKGxldCBpID0gMCwgbCA9IHRoaXMudmFsdWUubGVuZ3RoIC8gdGhpcy5pdGVtU2l6ZTsgaSA8IGw7IGkrKykge1xyXG5cdFx0XHRcdEF0dHJpYnV0ZS52Mi5mcm9tQnVmZmVyQXR0cmlidXRlKHRoaXMsIGkpO1xyXG5cdFx0XHRcdEF0dHJpYnV0ZS52Mi5hcHBseU1hdHJpeDMobWF0cml4Myk7XHJcblx0XHRcdFx0dGhpcy5zZXRYWShpLCBBdHRyaWJ1dGUudjIueCwgQXR0cmlidXRlLnYyLnkpO1xyXG5cdFx0XHR9XHJcblx0XHR9IGVsc2UgaWYgKHRoaXMuaXRlbVNpemUgPT09IDMpIHtcclxuXHRcdFx0Zm9yIChsZXQgaSA9IDAsIGwgPSB0aGlzLnZhbHVlLmxlbmd0aCAvIHRoaXMuaXRlbVNpemU7IGkgPCBsOyBpKyspIHtcclxuXHRcdFx0XHRBdHRyaWJ1dGUudjMuZnJvbUJ1ZmZlckF0dHJpYnV0ZSh0aGlzLCBpKTtcclxuXHRcdFx0XHRBdHRyaWJ1dGUudjMuYXBwbHlNYXRyaXgzKG1hdHJpeDMpO1xyXG5cdFx0XHRcdHRoaXMuc2V0WFlaKGksIEF0dHJpYnV0ZS52My54LCBBdHRyaWJ1dGUudjMueSwgQXR0cmlidXRlLnYzLnopO1xyXG5cdFx0XHR9XHJcblx0XHR9XHJcblx0XHRyZXR1cm4gdGhpcztcclxuXHR9XHJcblx0YXBwbHlNYXRyaXg0KG1hdHJpeDQpIHtcclxuXHRcdGZvciAobGV0IGkgPSAwLCBsID0gdGhpcy52YWx1ZS5sZW5ndGggLyB0aGlzLml0ZW1TaXplOyBpIDwgbDsgaSsrKSB7XHJcblx0XHRcdEF0dHJpYnV0ZS52My5mcm9tQnVmZmVyQXR0cmlidXRlKHRoaXMsIGkpO1xyXG5cdFx0XHRBdHRyaWJ1dGUudjMuYXBwbHlNYXRyaXg0KG1hdHJpeDQpO1xyXG5cdFx0XHR0aGlzLnNldFhZWihpLCBBdHRyaWJ1dGUudjMueCwgQXR0cmlidXRlLnYzLnksIEF0dHJpYnV0ZS52My56KTtcclxuXHRcdH1cclxuXHRcdHJldHVybiB0aGlzO1xyXG5cdH1cclxuXHRzZXRYKGluZGV4LCB4KSB7XHJcblx0XHR0aGlzLnZhbHVlW2luZGV4ICogdGhpcy5pdGVtU2l6ZV0gPSB4O1xyXG5cdFx0cmV0dXJuIHRoaXM7XHJcblx0fVxyXG5cdGdldFgoaW5kZXgpIHtcclxuXHRcdGNvbnN0IHggPSB0aGlzLnZhbHVlW2luZGV4ICogdGhpcy5pdGVtU2l6ZV07XHJcblx0XHRyZXR1cm4geDtcclxuXHR9XHJcblx0c2V0WShpbmRleCwgeSkge1xyXG5cdFx0dGhpcy52YWx1ZVtpbmRleCAqIHRoaXMuaXRlbVNpemUgKyAxXSA9IHk7XHJcblx0XHRyZXR1cm4gdGhpcztcclxuXHR9XHJcblx0Z2V0WShpbmRleCkge1xyXG5cdFx0Y29uc3QgeSA9IHRoaXMudmFsdWVbaW5kZXggKiB0aGlzLml0ZW1TaXplICsgMV07XHJcblx0XHRyZXR1cm4geTtcclxuXHR9XHJcblx0c2V0WihpbmRleCwgeikge1xyXG5cdFx0dGhpcy52YWx1ZVtpbmRleCAqIHRoaXMuaXRlbVNpemUgKyAyXSA9IHo7XHJcblx0XHRyZXR1cm4gdGhpcztcclxuXHR9XHJcblx0Z2V0WihpbmRleCkge1xyXG5cdFx0Y29uc3QgeiA9IHRoaXMudmFsdWVbaW5kZXggKiB0aGlzLml0ZW1TaXplICsgMl07XHJcblx0XHRyZXR1cm4gejtcclxuXHR9XHJcblx0Z2V0VyhpbmRleCkge1xyXG5cdFx0Y29uc3QgdyA9IHRoaXMudmFsdWVbaW5kZXggKiB0aGlzLml0ZW1TaXplICsgM107XHJcblx0XHRyZXR1cm4gdztcclxuXHR9XHJcblx0c2V0WFkoaW5kZXgsIHgsIHkpIHtcclxuXHRcdGluZGV4ICo9IHRoaXMuaXRlbVNpemU7XHJcblx0XHR0aGlzLnZhbHVlW2luZGV4ICsgMF0gPSB4O1xyXG5cdFx0dGhpcy52YWx1ZVtpbmRleCArIDFdID0geTtcclxuXHRcdHJldHVybiB0aGlzO1xyXG5cdH1cclxuXHRzZXRYWVooaW5kZXgsIHgsIHksIHopIHtcclxuXHRcdGluZGV4ICo9IHRoaXMuaXRlbVNpemU7XHJcblx0XHR0aGlzLnZhbHVlW2luZGV4ICsgMF0gPSB4O1xyXG5cdFx0dGhpcy52YWx1ZVtpbmRleCArIDFdID0geTtcclxuXHRcdHRoaXMudmFsdWVbaW5kZXggKyAyXSA9IHo7XHJcblx0XHRyZXR1cm4gdGhpcztcclxuXHR9XHJcblx0c2V0WFlaVyhpbmRleCwgeCwgeSwgeiwgdykge1xyXG5cdFx0aW5kZXggKj0gdGhpcy5pdGVtU2l6ZTtcclxuXHRcdHRoaXMudmFsdWVbaW5kZXggKyAwXSA9IHg7XHJcblx0XHR0aGlzLnZhbHVlW2luZGV4ICsgMV0gPSB5O1xyXG5cdFx0dGhpcy52YWx1ZVtpbmRleCArIDJdID0gejtcclxuXHRcdHRoaXMudmFsdWVbaW5kZXggKyAzXSA9IHc7XHJcblx0XHRyZXR1cm4gdGhpcztcclxuXHR9XHJcbn1cclxuXHJcbmV4cG9ydCBjbGFzcyBJbnRlcmxlYXZlZEF0dHJpYnV0ZSB7XHJcblx0cHVibGljIG5hbWVzOiBzdHJpbmdbXTtcclxuXHRwdWJsaWMgdmFsdWU6IEFycmF5PG51bWJlcj47XHJcblx0cHVibGljIGl0ZW1TaXplczogbnVtYmVyW107XHJcblx0cHVibGljIGZvcm1hdDogc3RyaW5nO1xyXG5cdHB1YmxpYyBieXRlU2l6ZTogbnVtYmVyO1xyXG5cdHB1YmxpYyBhdHRyaWJ1dGVUeXBlOiBBdHRyaWJ1dGVUeXBlO1xyXG5cdHB1YmxpYyBkaXJ0eTogYm9vbGVhbjtcclxuXHRjb25zdHJ1Y3RvcihuYW1lczogc3RyaW5nW10sIHZhbHVlOiBBcnJheTxudW1iZXI+LCBpdGVtU2l6ZXM6IG51bWJlcltdKSB7XHJcblx0XHR0aGlzLm5hbWVzID0gbmFtZXM7XHJcblx0XHR0aGlzLml0ZW1TaXplcyA9IGl0ZW1TaXplcztcclxuXHRcdHRoaXMudmFsdWUgPSB2YWx1ZTtcclxuXHRcdHRoaXMuYXR0cmlidXRlVHlwZSA9IEF0dHJpYnV0ZVR5cGUuaW50ZXJsZWF2ZWRBdHRyaWJ1dGU7XHJcblx0XHR0aGlzLmRpcnR5ID0gdHJ1ZTtcclxuXHR9XHJcblx0Z2V0R1BVQXR0cmlidXRlKCk6IEFycmF5PEdQVUF0dHJpYnV0ZT4ge1xyXG5cdFx0Y29uc3QgcmVzdWx0ID0gW107XHJcblx0XHR0aGlzLml0ZW1TaXplcy5yZWR1Y2UoKHRvdGFsLCBjdXJyZW50LCBpbmRleCkgPT4ge1xyXG5cdFx0XHRyZXN1bHQucHVzaCh7XHJcblx0XHRcdFx0c2hhZGVyTG9jYXRpb246IGluZGV4LFxyXG5cdFx0XHRcdGZvcm1hdDogY3VycmVudCA9PSAxID8gYCR7dGhpcy5mb3JtYXR9YCA6IGAke3RoaXMuZm9ybWF0fXgke2N1cnJlbnR9YCxcclxuXHRcdFx0XHRvZmZzZXQ6IHRvdGFsICogdGhpcy5ieXRlU2l6ZVxyXG5cdFx0XHR9KTtcclxuXHRcdFx0cmV0dXJuICh0b3RhbCArPSBjdXJyZW50KTtcclxuXHRcdH0sIDApO1xyXG5cdFx0cmV0dXJuIHJlc3VsdDtcclxuXHR9XHJcblx0ZGVzdHJveSgpIHtcclxuXHRcdHRoaXMudmFsdWUgPSBudWxsO1xyXG5cdFx0dGhpcy5uYW1lcyA9IG51bGw7XHJcblx0XHR0aGlzLml0ZW1TaXplcyA9IG51bGw7XHJcblx0fVxyXG59XHJcbmV4cG9ydCBjbGFzcyBGbG9hdDMyQXR0cmlidXRlIGV4dGVuZHMgQXR0cmlidXRlIHtcclxuXHRjb25zdHJ1Y3RvcihuYW1lOiBzdHJpbmcsIHZhbHVlOiBBcnJheTxudW1iZXI+LCBpdGVtU2l6ZTogbnVtYmVyKSB7XHJcblx0XHRzdXBlcihuYW1lLCB2YWx1ZSwgaXRlbVNpemUpO1xyXG5cdFx0Y29uc3QgeyBmb3JtYXQsIHRvdGFsQnl0ZVNpemUgfSA9IGdldEF0dHJpYnV0ZUZvcm1hdChWZXJ0ZXhGb3JtYXQuRmxvYXQzMiwgaXRlbVNpemUpO1xyXG5cdFx0dGhpcy5mb3JtYXQgPSBmb3JtYXQ7XHJcblx0XHR0aGlzLmF0dHJpYnV0ZUJ5dGVTaXplID0gdG90YWxCeXRlU2l6ZTtcclxuXHR9XHJcbn1cclxuZXhwb3J0IGNsYXNzIEludGVybGVhdmVkRmxvYXQzMkF0dHJpYnV0ZSBleHRlbmRzIEludGVybGVhdmVkQXR0cmlidXRlIHtcclxuXHRjb25zdHJ1Y3RvcihuYW1lczogc3RyaW5nW10sIHZhbHVlOiBBcnJheTxudW1iZXI+LCBpdGVtU2l6ZXM6IG51bWJlcltdKSB7XHJcblx0XHRzdXBlcihuYW1lcywgdmFsdWUsIGl0ZW1TaXplcyk7XHJcblx0XHR0aGlzLmZvcm1hdCA9IFZlcnRleEZvcm1hdC5GbG9hdDMyO1xyXG5cdFx0dGhpcy5ieXRlU2l6ZSA9IEZsb2F0MzJBcnJheS5CWVRFU19QRVJfRUxFTUVOVDtcclxuXHR9XHJcbn1cclxuZXhwb3J0IGNsYXNzIEJ1ZmZlckZsb2F0MzJBdHRyaWJ1dGUgZXh0ZW5kcyBJbnRlcmxlYXZlZEZsb2F0MzJBdHRyaWJ1dGUge1xyXG5cdHB1YmxpYyBidWZmZXI6IEJ1ZmZlcjtcclxuXHRjb25zdHJ1Y3RvcihuYW1lczogc3RyaW5nW10sIGJ1ZmZlcjogQnVmZmVyLCBpdGVtU2l6ZXM6IG51bWJlcltdKSB7XHJcblx0XHRzdXBlcihuYW1lcywgdW5kZWZpbmVkLCBpdGVtU2l6ZXMpO1xyXG5cdFx0dGhpcy5idWZmZXIgPSBidWZmZXI7XHJcblx0fVxyXG59XHJcbmV4cG9ydCBlbnVtIEF0dHJpYnV0ZVR5cGUge1xyXG5cdGludGVybGVhdmVkQXR0cmlidXRlID0gMCxcclxuXHRhdHRyaWJ1dGUgPSAxXHJcbn1cclxuZXhwb3J0IHR5cGUgR1BVQXR0cmlidXRlID0ge1xyXG5cdHNoYWRlckxvY2F0aW9uOiBudW1iZXI7XHJcblx0Zm9ybWF0OiBzdHJpbmc7XHJcblx0b2Zmc2V0OiBudW1iZXI7XHJcbn07XHJcbmZ1bmN0aW9uIGdldEF0dHJpYnV0ZUZvcm1hdCh0eXBlOiBzdHJpbmcsIGl0ZW1TaXplOiBudW1iZXIpIHtcclxuXHRjb25zdCBrZXkgPSBgJHt0eXBlfXgke2l0ZW1TaXplfWA7XHJcblx0cmV0dXJuIHtcclxuXHRcdFtWZXJ0ZXhGb3JtYXQuRmxvYXQzMl06IHtcclxuXHRcdFx0Zm9ybWF0OiBcImZsb2F0MzJcIixcclxuXHRcdFx0dG90YWxCeXRlU2l6ZTogRmxvYXQzMkFycmF5LkJZVEVTX1BFUl9FTEVNRU5UICogaXRlbVNpemUsXHJcblx0XHRcdGJ5dGVTaXplOiBGbG9hdDMyQXJyYXkuQllURVNfUEVSX0VMRU1FTlRcclxuXHRcdH0sXHJcblx0XHRbVmVydGV4Rm9ybWF0LkZsb2F0MzJ4Ml06IHtcclxuXHRcdFx0Zm9ybWF0OiBcImZsb2F0MzJ4MlwiLFxyXG5cdFx0XHR0b3RhbEJ5dGVTaXplOiBGbG9hdDMyQXJyYXkuQllURVNfUEVSX0VMRU1FTlQgKiBpdGVtU2l6ZSxcclxuXHRcdFx0Ynl0ZVNpemU6IEZsb2F0MzJBcnJheS5CWVRFU19QRVJfRUxFTUVOVFxyXG5cdFx0fSxcclxuXHRcdFtWZXJ0ZXhGb3JtYXQuRmxvYXQzMngzXToge1xyXG5cdFx0XHRmb3JtYXQ6IFwiZmxvYXQzMngzXCIsXHJcblx0XHRcdHRvdGFsQnl0ZVNpemU6IEZsb2F0MzJBcnJheS5CWVRFU19QRVJfRUxFTUVOVCAqIGl0ZW1TaXplLFxyXG5cdFx0XHRieXRlU2l6ZTogRmxvYXQzMkFycmF5LkJZVEVTX1BFUl9FTEVNRU5UXHJcblx0XHR9LFxyXG5cdFx0W1ZlcnRleEZvcm1hdC5GbG9hdDMyeDRdOiB7XHJcblx0XHRcdGZvcm1hdDogXCJmbG9hdDMyeDRcIixcclxuXHRcdFx0dG90YWxCeXRlU2l6ZTogRmxvYXQzMkFycmF5LkJZVEVTX1BFUl9FTEVNRU5UICogaXRlbVNpemUsXHJcblx0XHRcdGJ5dGVTaXplOiBGbG9hdDMyQXJyYXkuQllURVNfUEVSX0VMRU1FTlRcclxuXHRcdH1cclxuXHR9W2tleV07XHJcbn1cclxuIiwiaW1wb3J0IHsgQmluZEdyb3VwQ2FjaGVPcHRpb25zIH0gZnJvbSBcIi4uL2NvcmUvV2ViR1BVVHlwZXNcIjtcclxuY29uc3QgYmluZEdyb3VwQ2FjaGUgPSBuZXcgTWFwKCk7XHJcbmNsYXNzIEJpbmRHcm91cCB7XHJcblx0ZGV2aWNlOiBHUFVEZXZpY2U7XHJcblx0Z3B1QmluZEdyb3VwOiBHUFVCaW5kR3JvdXA7XHJcblx0bGFiZWw6IHN0cmluZztcclxuXHRpbmRleDogbnVtYmVyO1xyXG5cdGRpcnR5OiBib29sZWFuO1xyXG5cdG9mZnNldD86IG51bWJlcjtcclxuXHQvLyBjb25zdCB1bmlmb3JtQnl0ZXMgPSA1ICogRmxvYXQzMkFycmF5LkJZVEVTX1BFUl9FTEVNRU5UO1xyXG5cdC8vIGNvbnN0IGFsaWduZWRTaXplQnl0ZXMgPSBNYXRoLmNlaWwodW5pZm9ybUJ5dGVzIC8gMjU2KSAqIDI1NjtcclxuXHQvLyBjb25zdCBhbGlnbmVkU2l6ZSA9YWxpZ25lZFNpemVCeXRlcyAvIEZsb2F0MzJBcnJheS5CWVRFU19QRVJfRUxFTUVOVDtcclxuXHRhbGlnbmVkU2l6ZT86IG51bWJlcjtcclxuXHRtYXhPZmZzZXQ/OiBudW1iZXI7XHJcblx0ZHluYW1pYz86IGJvb2xlYW47XHJcblx0Y29uc3RydWN0b3Iob3B0aW9uczogQmluZEdyb3VwQ2FjaGVPcHRpb25zKSB7XHJcblx0XHR0aGlzLmluZGV4ID0gb3B0aW9ucy5pbmRleCB8fCAwO1xyXG5cdFx0dGhpcy5vZmZzZXQgPSBvcHRpb25zLm9mZnNldCA/PyAwO1xyXG5cdFx0dGhpcy5hbGlnbmVkU2l6ZSA9IG9wdGlvbnMuYWxpZ25lZFNpemUgPz8gMDtcclxuXHRcdHRoaXMubWF4T2Zmc2V0ID0gb3B0aW9ucy5tYXhPZmZzZXQgPz8gMDtcclxuXHRcdHRoaXMuZHluYW1pYyA9IG9wdGlvbnMuZHluYW1pYyA/PyBmYWxzZTtcclxuXHRcdHRoaXMuZ3B1QmluZEdyb3VwID0gb3B0aW9ucy5kZXZpY2UuY3JlYXRlQmluZEdyb3VwKHtcclxuXHRcdFx0bGFiZWw6IG9wdGlvbnMubGFiZWwsXHJcblx0XHRcdGxheW91dDogb3B0aW9ucy5sYXlvdXQuZ3B1QmluZEdyb3VwTGF5b3V0LFxyXG5cdFx0XHRlbnRyaWVzOiBvcHRpb25zLmVudGlyZXMubWFwKChlbnRpdHkpID0+ICh7XHJcblx0XHRcdFx0YmluZGluZzogZW50aXR5LmJpbmRpbmcsXHJcblx0XHRcdFx0cmVzb3VyY2U6IGVudGl0eS5yZXNvdXJjZVxyXG5cdFx0XHR9KSlcclxuXHRcdH0pO1xyXG5cdH1cclxuXHRiaW5kKHBhc3NFbmNvZGVyOiBHUFVSZW5kZXJQYXNzRW5jb2RlciB8IEdQVUNvbXB1dGVQYXNzRW5jb2Rlcikge1xyXG5cdFx0Ly8gZHluYW1pYyB1bmlmb3JtcyBtdXN0IGJpbmQgbXVsdGlwbGUgdGltZXNcclxuXHRcdGlmICh0aGlzLmR5bmFtaWMpIHtcclxuXHRcdFx0Y29uc3QgZHluYW1pY09mZnNldHMgPSBbMF07XHJcblx0XHRcdGR5bmFtaWNPZmZzZXRzWzBdID0gdGhpcy5vZmZzZXQgKiB0aGlzLmFsaWduZWRTaXplO1xyXG5cdFx0XHR0aGlzLm9mZnNldCA9ICsrdGhpcy5vZmZzZXQgPCB0aGlzLm1heE9mZnNldCA/IHRoaXMub2Zmc2V0IDogMDtcclxuXHRcdFx0cGFzc0VuY29kZXIuc2V0QmluZEdyb3VwKHRoaXMuaW5kZXgsIHRoaXMuZ3B1QmluZEdyb3VwLCBkeW5hbWljT2Zmc2V0cyk7XHJcblx0XHR9IGVsc2Uge1xyXG5cdFx0XHRwYXNzRW5jb2Rlci5zZXRCaW5kR3JvdXAodGhpcy5pbmRleCwgdGhpcy5ncHVCaW5kR3JvdXApO1xyXG5cdFx0fVxyXG5cdH1cclxuXHRkZXN0cm95KCkge1xyXG5cdFx0dGhpcy5ncHVCaW5kR3JvdXAgPSB1bmRlZmluZWQ7XHJcblx0XHR0aGlzLmRldmljZSA9IHVuZGVmaW5lZDtcclxuXHR9XHJcblx0c3RhdGljIGdldEJpbmRHcm91cEZyb21DYWNoZShvcHRpb25zOiBCaW5kR3JvdXBDYWNoZU9wdGlvbnMpOiBCaW5kR3JvdXAge1xyXG5cdFx0aWYgKGJpbmRHcm91cENhY2hlLmhhcyhvcHRpb25zLmxhYmVsKSkge1xyXG5cdFx0XHRyZXR1cm4gYmluZEdyb3VwQ2FjaGUuZ2V0KG9wdGlvbnMubGFiZWwpO1xyXG5cdFx0fSBlbHNlIHtcclxuXHRcdFx0Y29uc3QgYmluZEdyb3VwID0gbmV3IEJpbmRHcm91cChvcHRpb25zKTtcclxuXHRcdFx0YmluZEdyb3VwQ2FjaGUuc2V0KG9wdGlvbnMubGFiZWwsIGJpbmRHcm91cCk7XHJcblx0XHRcdHJldHVybiBiaW5kR3JvdXA7XHJcblx0XHR9XHJcblx0fVxyXG5cdHN0YXRpYyByZW1vdmVCaW5kR3JvdXBGcm9tQ2FjaGUoYmluZEdyb3VwOiBCaW5kR3JvdXApIHtcclxuXHRcdGJpbmRHcm91cENhY2hlLmRlbGV0ZShiaW5kR3JvdXApO1xyXG5cdH1cclxufVxyXG5cclxuZXhwb3J0IGRlZmF1bHQgQmluZEdyb3VwO1xyXG4iLCJpbXBvcnQgeyBCaW5kR3JvdXBFbnRpdHlPcHRpb25zIH0gZnJvbSBcIi4uL2NvcmUvV2ViR1BVVHlwZXNcIjtcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEJpbmRHcm91cEVudGl0eSB7XG5cdGJpbmRpbmc6IG51bWJlcjtcblx0cmVzb3VyY2U6IEdQVUJpbmRpbmdSZXNvdXJjZTtcblx0Y29uc3RydWN0b3Iob3B0aW9uczogQmluZEdyb3VwRW50aXR5T3B0aW9ucykge1xuXHRcdHRoaXMuYmluZGluZyA9IG9wdGlvbnMuYmluZGluZztcblx0XHR0aGlzLnJlc291cmNlID0gb3B0aW9ucy5yZXNvdXJjZTtcblx0fVxuXHRwdWJsaWMgZ2V0R1BVR3JvdXBFbnRpdHkoKSB7XG5cdFx0cmV0dXJuIHtcblx0XHRcdGJpbmRpbmc6IHRoaXMuYmluZGluZyxcblx0XHRcdHJlc291cmNlOiB0aGlzLnJlc291cmNlXG5cdFx0fTtcblx0fVxufVxuIiwiaW1wb3J0IHsgUGFzc1R5cGUgfSBmcm9tIFwiLi4vY29yZS9XZWJHUFVUeXBlc1wiO1xyXG5pbXBvcnQgQXR0YWNobWVudCBmcm9tIFwiLi9BdHRhY2htZW50XCI7XHJcbmltcG9ydCBRdWVyeVNldCBmcm9tIFwiLi9RdWVyeVNldFwiO1xyXG5pbXBvcnQgVGV4dHVyZSBmcm9tIFwiLi9UZXh0dXJlXCI7XHJcblxyXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBSZW5kZXJUYXJnZXQge1xyXG5cdHB1YmxpYyBkZXZpY2U6IEdQVURldmljZTtcclxuXHRwdWJsaWMgY29tbWFuZEVuY29kZXI6IEdQVUNvbW1hbmRFbmNvZGVyIHwgbnVsbDtcclxuXHRwcml2YXRlIF9yZW5kZXJQYXNzRGVzY3JpcHRvcjogR1BVUmVuZGVyUGFzc0Rlc2NyaXB0b3I7XHJcblx0cHJpdmF0ZSByZW5kZXJFbmNvZGVyOiBHUFVSZW5kZXJQYXNzRW5jb2RlcjtcclxuXHRwcml2YXRlIGNvbXB1dGVFbmNvZGVyOiBHUFVDb21wdXRlUGFzc0VuY29kZXI7XHJcblx0Y29uc3RydWN0b3IoXHJcblx0XHRwdWJsaWMgdHlwZTogUGFzc1R5cGUsXHJcblx0XHRwdWJsaWMgY29sb3JBdHRhY2htZW50czogQXR0YWNobWVudFtdLFxyXG5cdFx0cHVibGljIGRlcHRoQXR0YWNobWVudD86IEF0dGFjaG1lbnQsXHJcblx0XHRwdWJsaWMgc3RlbmNpbEF0dGFjaG1lbnQ/OiBBdHRhY2htZW50LFxyXG5cdFx0cHVibGljIHF1ZXJ5U2V0PzogUXVlcnlTZXQsXHJcblx0XHRwdWJsaWMgZml4ZWRTaXplPzogYm9vbGVhblxyXG5cdCkge1xyXG5cdFx0dGhpcy5yZW5kZXJFbmNvZGVyID0gdW5kZWZpbmVkO1xyXG5cdFx0dGhpcy5jb21wdXRlRW5jb2RlciA9IHVuZGVmaW5lZDtcclxuXHRcdHRoaXMuX3JlbmRlclBhc3NEZXNjcmlwdG9yID0gdW5kZWZpbmVkO1xyXG5cdFx0dGhpcy5jb21tYW5kRW5jb2RlciA9IHVuZGVmaW5lZDtcclxuXHRcdHRoaXMuZGV2aWNlID0gdW5kZWZpbmVkO1xyXG5cdFx0dGhpcy5maXhlZFNpemUgPSBmYWxzZTtcclxuXHR9XHJcblx0Z2V0IHJlbmRlclBhc3NEZXNjcmlwdG9yKCkge1xyXG5cdFx0dGhpcy5fcmVuZGVyUGFzc0Rlc2NyaXB0b3IgPSB0aGlzLmdldFJlbmRlclBhc3NEZXNjcmlwdG9yKCk7XHJcblx0XHRyZXR1cm4gdGhpcy5fcmVuZGVyUGFzc0Rlc2NyaXB0b3I7XHJcblx0fVxyXG5cdHB1YmxpYyBnZXRDb2xvclRleHR1cmUoaW5kZXggPSAwKTogVGV4dHVyZSB7XHJcblx0XHRjb25zdCBjb2xBdHQgPSB0aGlzLmNvbG9yQXR0YWNobWVudHNbaW5kZXhdO1xyXG5cdFx0aWYgKGNvbEF0dCkge1xyXG5cdFx0XHRyZXR1cm4gY29sQXR0LnRleHR1cmUgYXMgVGV4dHVyZTtcclxuXHRcdH0gZWxzZSB7XHJcblx0XHRcdHJldHVybiBudWxsO1xyXG5cdFx0fVxyXG5cdH1cclxuXHRwdWJsaWMgZ2V0RGVwdGhUZXh0dXJlKCk6IFRleHR1cmUge1xyXG5cdFx0aWYgKHRoaXMuZGVwdGhBdHRhY2htZW50KSB7XHJcblx0XHRcdHJldHVybiB0aGlzLmRlcHRoQXR0YWNobWVudC50ZXh0dXJlIGFzIFRleHR1cmU7XHJcblx0XHR9XHJcblx0fVxyXG5cdHByaXZhdGUgZ2V0UmVuZGVyUGFzc0Rlc2NyaXB0b3IoKTogR1BVUmVuZGVyUGFzc0Rlc2NyaXB0b3IgfCBudWxsIHtcclxuXHRcdHRoaXMuZGVwdGhBdHRhY2htZW50Py50ZXh0dXJlPy51cGRhdGUodGhpcy5kZXZpY2UpO1xyXG5cdFx0dGhpcz8ucXVlcnlTZXQ/LnVwZGF0ZSh0aGlzLmRldmljZSk7XHJcblx0XHRyZXR1cm4ge1xyXG5cdFx0XHQuLi4odGhpcy5jb2xvckF0dGFjaG1lbnRzICYmIHtcclxuXHRcdFx0XHRjb2xvckF0dGFjaG1lbnRzOiB0aGlzLmNvbG9yQXR0YWNobWVudHMubWFwKChjb2xvckF0dGFjaG1lbnQpID0+IHtcclxuXHRcdFx0XHRcdGNvbG9yQXR0YWNobWVudD8udGV4dHVyZT8udXBkYXRlICYmIGNvbG9yQXR0YWNobWVudD8udGV4dHVyZT8udXBkYXRlKHRoaXMuZGV2aWNlKTtcclxuXHRcdFx0XHRcdHJldHVybiB7XHJcblx0XHRcdFx0XHRcdHZpZXc6XHJcblx0XHRcdFx0XHRcdFx0Ly8g5pqC5pe26L+Z5LmI5YaZXHJcblx0XHRcdFx0XHRcdFx0Y29sb3JBdHRhY2htZW50Py50ZXh0dXJlVmlldz8uKCkgPz8gY29sb3JBdHRhY2htZW50LnRleHR1cmUudGV4dHVyZVZpZXcsXHJcblx0XHRcdFx0XHRcdHJlc29sdmVUYXJnZXQ6XHJcblx0XHRcdFx0XHRcdFx0Y29sb3JBdHRhY2htZW50LnJlc29sdmVUYXJnZXQgIT0gdW5kZWZpbmVkXHJcblx0XHRcdFx0XHRcdFx0XHQ/IGNvbG9yQXR0YWNobWVudC5yZXNvbHZlVGFyZ2V0LnRleHR1cmVWaWV3XHJcblx0XHRcdFx0XHRcdFx0XHQ6IHVuZGVmaW5lZCxcclxuXHRcdFx0XHRcdFx0Y2xlYXJWYWx1ZTogY29sb3JBdHRhY2htZW50LnZhbHVlLFxyXG5cdFx0XHRcdFx0XHRsb2FkT3A6IGNvbG9yQXR0YWNobWVudC5vcCxcclxuXHRcdFx0XHRcdFx0c3RvcmVPcDogY29sb3JBdHRhY2htZW50LnN0b3JlT3BcclxuXHRcdFx0XHRcdH0gYXMgR1BVUmVuZGVyUGFzc0NvbG9yQXR0YWNobWVudDtcclxuXHRcdFx0XHR9KVxyXG5cdFx0XHR9KSxcclxuXHRcdFx0Li4uKCh0aGlzLmRlcHRoQXR0YWNobWVudCB8fCB0aGlzLnN0ZW5jaWxBdHRhY2htZW50KSAmJiB7XHJcblx0XHRcdFx0ZGVwdGhTdGVuY2lsQXR0YWNobWVudDoge1xyXG5cdFx0XHRcdFx0dmlldzogdGhpcy5kZXB0aEF0dGFjaG1lbnQ/LnRleHR1cmU/LnRleHR1cmVWaWV3IHx8IHVuZGVmaW5lZCxcclxuXHRcdFx0XHRcdGRlcHRoTG9hZE9wOiB0aGlzLmRlcHRoQXR0YWNobWVudD8ub3AgfHwgXCJjbGVhclwiLFxyXG5cdFx0XHRcdFx0ZGVwdGhDbGVhclZhbHVlOiB0aGlzLmRlcHRoQXR0YWNobWVudD8udmFsdWUgfHwgMS4wLFxyXG5cdFx0XHRcdFx0ZGVwdGhTdG9yZU9wOiB0aGlzLmRlcHRoQXR0YWNobWVudD8uc3RvcmVPcCB8fCBcInN0b3JlXCIsXHJcblx0XHRcdFx0XHRkZXB0aFJlYWRPbmx5OiB0aGlzLmRlcHRoQXR0YWNobWVudD8ucmVhZE9ubHkgfHwgZmFsc2VcclxuXHRcdFx0XHRcdC8vIHN0ZW5jaWxMb2FkT3A6IHRoaXMuc3RlbmNpbEF0dGFjaG1lbnQ/Lm9wIHx8IFwiY2xlYXJcIixcclxuXHRcdFx0XHRcdC8vIHN0ZW5jaWxDbGVhclZhbHVlOiB0aGlzLnN0ZW5jaWxBdHRhY2htZW50Py52YWx1ZSB8fCAwLFxyXG5cdFx0XHRcdFx0Ly8gc3RlbmNpbFN0b3JlT3A6IHRoaXMuc3RlbmNpbEF0dGFjaG1lbnQ/LnN0b3JlT3AgfHwgXCJzdG9yZVwiLFxyXG5cdFx0XHRcdH0gYXMgR1BVUmVuZGVyUGFzc0RlcHRoU3RlbmNpbEF0dGFjaG1lbnRcclxuXHRcdFx0fSksXHJcblx0XHRcdC4uLih0aGlzLnF1ZXJ5U2V0ICYmIHsgb2NjbHVzaW9uUXVlcnlTZXQ6IHRoaXMucXVlcnlTZXQuZ3B1UXVlcnlTZXQgfSlcclxuXHRcdH07XHJcblx0fVxyXG5cclxuXHRwdWJsaWMgYmVnaW5SZW5kZXJQYXNzKGRldmljZTogR1BVRGV2aWNlKSB7XHJcblx0XHRpZiAoIXRoaXMuZGV2aWNlKSB0aGlzLmRldmljZSA9IGRldmljZTtcclxuXHRcdHRoaXMuY29tbWFuZEVuY29kZXIgPSB0aGlzLmRldmljZS5jcmVhdGVDb21tYW5kRW5jb2RlcigpO1xyXG5cdFx0dGhpcy5yZW5kZXJFbmNvZGVyID0gdGhpcy5jb21tYW5kRW5jb2Rlci5iZWdpblJlbmRlclBhc3ModGhpcy5yZW5kZXJQYXNzRGVzY3JpcHRvcik7XHJcblx0XHRyZXR1cm4gdGhpcy5yZW5kZXJFbmNvZGVyO1xyXG5cdH1cclxuXHRwdWJsaWMgZW5kUmVuZGVyUGFzcygpIHtcclxuXHRcdHRoaXMucmVuZGVyRW5jb2Rlcj8uZW5kKCk7XHJcblx0XHR0aGlzLmRldmljZS5xdWV1ZS5zdWJtaXQoW3RoaXMuY29tbWFuZEVuY29kZXIuZmluaXNoKCldKTtcclxuXHRcdHRoaXMuY29tbWFuZEVuY29kZXIgPSBudWxsO1xyXG5cdFx0dGhpcy5yZW5kZXJFbmNvZGVyID0gbnVsbDtcclxuXHR9XHJcblx0cHVibGljIGJlZ2luQ29tcHV0ZVBhc3NFbmNvZGVyKGRldmljZTogR1BVRGV2aWNlKSB7XHJcblx0XHRpZiAoIXRoaXMuZGV2aWNlKSB0aGlzLmRldmljZSA9IGRldmljZTtcclxuXHRcdHRoaXMuY29tbWFuZEVuY29kZXIgPSB0aGlzLmRldmljZS5jcmVhdGVDb21tYW5kRW5jb2RlcigpO1xyXG5cdFx0dGhpcy5jb21wdXRlRW5jb2RlciA9IHRoaXMuY29tbWFuZEVuY29kZXIuYmVnaW5Db21wdXRlUGFzcygpO1xyXG5cdFx0cmV0dXJuIHRoaXMuY29tcHV0ZUVuY29kZXI7XHJcblx0fVxyXG5cdHB1YmxpYyBlbmRDb21wdXRlUGFzc0VuY29kZXIoKSB7XHJcblx0XHR0aGlzLmNvbXB1dGVFbmNvZGVyPy5lbmQoKTtcclxuXHRcdHRoaXMuZGV2aWNlLnF1ZXVlLnN1Ym1pdChbdGhpcy5jb21tYW5kRW5jb2Rlci5maW5pc2goKV0pO1xyXG5cdFx0dGhpcy5jb21tYW5kRW5jb2RlciA9IG51bGw7XHJcblx0XHR0aGlzLnJlbmRlckVuY29kZXIgPSBudWxsO1xyXG5cdH1cclxuXHRwdWJsaWMgc2V0U2l6ZSh3aWR0aDogbnVtYmVyLCBoZWlnaHQ6IG51bWJlciwgZGVwdGggPSAxKSB7XHJcblx0XHRpZiAodGhpcy5maXhlZFNpemUpIHJldHVybjtcclxuXHRcdHRoaXM/LmRlcHRoQXR0YWNobWVudD8udGV4dHVyZT8uc2V0U2l6ZT8uKHdpZHRoLCBoZWlnaHQsIGRlcHRoKTtcclxuXHRcdHRoaXM/LmNvbG9yQXR0YWNobWVudHM/LmZvckVhY2g/LigoY29sb3JBdHRhY2htZW50KSA9PlxyXG5cdFx0XHRjb2xvckF0dGFjaG1lbnQ/LnRleHR1cmU/LnNldFNpemU/Lih3aWR0aCwgaGVpZ2h0LCBkZXB0aClcclxuXHRcdCk7XHJcblx0fVxyXG5cdGRlc3Ryb3koKSB7XHJcblx0XHRpZiAodGhpcy5jb2xvckF0dGFjaG1lbnRzKSB7XHJcblx0XHRcdHRoaXMuY29sb3JBdHRhY2htZW50cy5mb3JFYWNoKChjb2xvckF0dGFjaG1lbnQpID0+IHtcclxuXHRcdFx0XHRpZiAoY29sb3JBdHRhY2htZW50LnRleHR1cmUpIHtcclxuXHRcdFx0XHRcdGNvbG9yQXR0YWNobWVudC50ZXh0dXJlLmRlc3Ryb3koKTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdH0pO1xyXG5cdFx0fVxyXG5cdFx0aWYgKHRoaXMuZGVwdGhBdHRhY2htZW50LnRleHR1cmUpIHRoaXMuZGVwdGhBdHRhY2htZW50LnRleHR1cmUuZGVzdHJveSgpO1xyXG5cdH1cclxufVxyXG4iLCJpbXBvcnQgZGVmYXVsdFZhbHVlIGZyb20gXCIuLi91dGlscy9kZWZhdWx0VmFsdWVcIjtcclxuaW1wb3J0IGRlZmluZWQgZnJvbSBcIi4uL3V0aWxzL2RlZmluZWRcIjtcclxuaW1wb3J0IEdNYXRoIGZyb20gXCIuL01hdGhcIjtcclxuaW1wb3J0IE1hdHJpeDQgZnJvbSBcIi4vTWF0cml4NFwiO1xyXG5pbXBvcnQgeyBRdWF0ZXJuaW9uIH0gZnJvbSBcIi4vUXVhdGVybmlvblwiO1xyXG5pbXBvcnQgVmVjdG9yMyBmcm9tIFwiLi9WZWN0b3IzXCI7XHJcbi8qKlxyXG4gKiBBIDN4MyBtYXRyaXgsIGluZGV4YWJsZSBhcyBhIGNvbHVtbi1tYWpvciBvcmRlciBhcnJheS5cclxuICogQHBhcmFtIHtOdW1iZXJ9IFtjb2x1bW4wUm93MD0wLjBdIFRoZSB2YWx1ZSBmb3IgY29sdW1uIDAsIHJvdyAwLlxyXG4gKiBAcGFyYW0ge051bWJlcn0gW2NvbHVtbjFSb3cwPTAuMF0gVGhlIHZhbHVlIGZvciBjb2x1bW4gMSwgcm93IDAuXHJcbiAqIEBwYXJhbSB7TnVtYmVyfSBbY29sdW1uMlJvdzA9MC4wXSBUaGUgdmFsdWUgZm9yIGNvbHVtbiAyLCByb3cgMC5cclxuICogQHBhcmFtIHtOdW1iZXJ9IFtjb2x1bW4wUm93MT0wLjBdIFRoZSB2YWx1ZSBmb3IgY29sdW1uIDAsIHJvdyAxLlxyXG4gKiBAcGFyYW0ge051bWJlcn0gW2NvbHVtbjFSb3cxPTAuMF0gVGhlIHZhbHVlIGZvciBjb2x1bW4gMSwgcm93IDEuXHJcbiAqIEBwYXJhbSB7TnVtYmVyfSBbY29sdW1uMlJvdzE9MC4wXSBUaGUgdmFsdWUgZm9yIGNvbHVtbiAyLCByb3cgMS5cclxuICogQHBhcmFtIHtOdW1iZXJ9IFtjb2x1bW4wUm93Mj0wLjBdIFRoZSB2YWx1ZSBmb3IgY29sdW1uIDAsIHJvdyAyLlxyXG4gKiBAcGFyYW0ge051bWJlcn0gW2NvbHVtbjFSb3cyPTAuMF0gVGhlIHZhbHVlIGZvciBjb2x1bW4gMSwgcm93IDIuXHJcbiAqIEBwYXJhbSB7TnVtYmVyfSBbY29sdW1uMlJvdzI9MC4wXSBUaGUgdmFsdWUgZm9yIGNvbHVtbiAyLCByb3cgMi5cclxuICovXHJcbmNsYXNzIE1hdHJpeDMge1xyXG5cdGNvbnN0cnVjdG9yKFxyXG5cdFx0Y29sdW1uMFJvdzAgPSAwLFxyXG5cdFx0Y29sdW1uMVJvdzAgPSAwLFxyXG5cdFx0Y29sdW1uMlJvdzAgPSAwLFxyXG5cdFx0Y29sdW1uMFJvdzEgPSAwLFxyXG5cdFx0Y29sdW1uMVJvdzEgPSAwLFxyXG5cdFx0Y29sdW1uMlJvdzEgPSAwLFxyXG5cdFx0Y29sdW1uMFJvdzIgPSAwLFxyXG5cdFx0Y29sdW1uMVJvdzIgPSAwLFxyXG5cdFx0Y29sdW1uMlJvdzIgPSAwXHJcblx0KSB7XHJcblx0XHR0aGlzWzBdID0gY29sdW1uMFJvdzA7XHJcblx0XHR0aGlzWzFdID0gY29sdW1uMFJvdzE7XHJcblx0XHR0aGlzWzJdID0gY29sdW1uMFJvdzI7XHJcblx0XHR0aGlzWzNdID0gY29sdW1uMVJvdzA7XHJcblx0XHR0aGlzWzRdID0gY29sdW1uMVJvdzE7XHJcblx0XHR0aGlzWzVdID0gY29sdW1uMVJvdzI7XHJcblx0XHR0aGlzWzZdID0gY29sdW1uMlJvdzA7XHJcblx0XHR0aGlzWzddID0gY29sdW1uMlJvdzE7XHJcblx0XHR0aGlzWzhdID0gY29sdW1uMlJvdzI7XHJcblx0fVxyXG5cdHNldEZyb21NYXRyaXg0KG1hdHJpeDogTWF0cml4NCk6IE1hdHJpeDMge1xyXG5cdFx0dGhpc1swXSA9IG1hdHJpeFswXTtcclxuXHRcdHRoaXNbMV0gPSBtYXRyaXhbMV07XHJcblx0XHR0aGlzWzJdID0gbWF0cml4WzJdO1xyXG5cdFx0dGhpc1szXSA9IG1hdHJpeFs0XTtcclxuXHRcdHRoaXNbNF0gPSBtYXRyaXhbNV07XHJcblx0XHR0aGlzWzVdID0gbWF0cml4WzJdO1xyXG5cdFx0dGhpc1s2XSA9IG1hdHJpeFs4XTtcclxuXHRcdHRoaXNbN10gPSBtYXRyaXhbOV07XHJcblx0XHR0aGlzWzhdID0gbWF0cml4WzEwXTtcclxuXHRcdHJldHVybiB0aGlzO1xyXG5cdH1cclxuXHRnZXROb3JtYWxNYXRyaXgobWF0cml4NDogTWF0cml4NCk6IE1hdHJpeDMge1xyXG5cdFx0dGhpcy5zZXRGcm9tTWF0cml4NChtYXRyaXg0KTtcclxuXHRcdE1hdHJpeDMuaW52ZXJzZSh0aGlzLCB0aGlzKTtcclxuXHRcdE1hdHJpeDMudHJhbnNwb3NlKHRoaXMsIHRoaXMpO1xyXG5cdFx0cmV0dXJuIHRoaXM7XHJcblx0fVxyXG5cclxuXHRzdGF0aWMgY2xvbmUobWF0cml4OiBNYXRyaXgzIHwgbnVtYmVyW10sIHJlc3VsdDogTWF0cml4Myk6IE1hdHJpeDMge1xyXG5cdFx0aWYgKCFkZWZpbmVkKG1hdHJpeCkpIHtcclxuXHRcdFx0cmV0dXJuIHVuZGVmaW5lZDtcclxuXHRcdH1cclxuXHRcdGlmICghZGVmaW5lZChyZXN1bHQpKSB7XHJcblx0XHRcdHJldHVybiBuZXcgTWF0cml4MyhcclxuXHRcdFx0XHRtYXRyaXhbMF0sXHJcblx0XHRcdFx0bWF0cml4WzNdLFxyXG5cdFx0XHRcdG1hdHJpeFs2XSxcclxuXHRcdFx0XHRtYXRyaXhbMV0sXHJcblx0XHRcdFx0bWF0cml4WzRdLFxyXG5cdFx0XHRcdG1hdHJpeFs3XSxcclxuXHRcdFx0XHRtYXRyaXhbMl0sXHJcblx0XHRcdFx0bWF0cml4WzVdLFxyXG5cdFx0XHRcdG1hdHJpeFs4XVxyXG5cdFx0XHQpO1xyXG5cdFx0fVxyXG5cdFx0cmVzdWx0WzBdID0gbWF0cml4WzBdO1xyXG5cdFx0cmVzdWx0WzFdID0gbWF0cml4WzFdO1xyXG5cdFx0cmVzdWx0WzJdID0gbWF0cml4WzJdO1xyXG5cdFx0cmVzdWx0WzNdID0gbWF0cml4WzNdO1xyXG5cdFx0cmVzdWx0WzRdID0gbWF0cml4WzRdO1xyXG5cdFx0cmVzdWx0WzVdID0gbWF0cml4WzVdO1xyXG5cdFx0cmVzdWx0WzZdID0gbWF0cml4WzZdO1xyXG5cdFx0cmVzdWx0WzddID0gbWF0cml4WzddO1xyXG5cdFx0cmVzdWx0WzhdID0gbWF0cml4WzhdO1xyXG5cdFx0cmV0dXJuIHJlc3VsdDtcclxuXHR9XHJcblxyXG5cdHN0YXRpYyBmcm9tQ29sdW1uTWFqb3JBcnJheSh2YWx1ZXM6IEFycmF5PG51bWJlcj4sIHJlc3VsdD86IE1hdHJpeDMpOiBNYXRyaXgzIHtcclxuXHRcdGlmICghZGVmaW5lZChyZXN1bHQpKSB7XHJcblx0XHRcdHJlc3VsdCA9IG5ldyBNYXRyaXgzKCk7XHJcblx0XHR9XHJcblx0XHRyZXR1cm4gTWF0cml4My5jbG9uZSh2YWx1ZXMsIHJlc3VsdCk7XHJcblx0fVxyXG5cclxuXHRzdGF0aWMgZnJvbVJvd01ham9yQXJyYXkodmFsdWVzOiBBcnJheTxudW1iZXI+LCByZXN1bHQ/OiBNYXRyaXgzKTogTWF0cml4MyB7XHJcblx0XHRpZiAoIWRlZmluZWQocmVzdWx0KSkge1xyXG5cdFx0XHRyZXR1cm4gbmV3IE1hdHJpeDMoXHJcblx0XHRcdFx0dmFsdWVzWzBdLFxyXG5cdFx0XHRcdHZhbHVlc1sxXSxcclxuXHRcdFx0XHR2YWx1ZXNbMl0sXHJcblx0XHRcdFx0dmFsdWVzWzNdLFxyXG5cdFx0XHRcdHZhbHVlc1s0XSxcclxuXHRcdFx0XHR2YWx1ZXNbNV0sXHJcblx0XHRcdFx0dmFsdWVzWzZdLFxyXG5cdFx0XHRcdHZhbHVlc1s3XSxcclxuXHRcdFx0XHR2YWx1ZXNbOF1cclxuXHRcdFx0KTtcclxuXHRcdH1cclxuXHRcdHJlc3VsdFswXSA9IHZhbHVlc1swXTtcclxuXHRcdHJlc3VsdFsxXSA9IHZhbHVlc1szXTtcclxuXHRcdHJlc3VsdFsyXSA9IHZhbHVlc1s2XTtcclxuXHRcdHJlc3VsdFszXSA9IHZhbHVlc1sxXTtcclxuXHRcdHJlc3VsdFs0XSA9IHZhbHVlc1s0XTtcclxuXHRcdHJlc3VsdFs1XSA9IHZhbHVlc1s3XTtcclxuXHRcdHJlc3VsdFs2XSA9IHZhbHVlc1syXTtcclxuXHRcdHJlc3VsdFs3XSA9IHZhbHVlc1s1XTtcclxuXHRcdHJlc3VsdFs4XSA9IHZhbHVlc1s4XTtcclxuXHRcdHJldHVybiByZXN1bHQ7XHJcblx0fVxyXG5cclxuXHRzdGF0aWMgZnJvbVF1YXRlcm5pb24ocXVhdGVybmlvbjogUXVhdGVybmlvbiwgcmVzdWx0PzogTWF0cml4Myk6IE1hdHJpeDMge1xyXG5cdFx0Y29uc3QgeDIgPSBxdWF0ZXJuaW9uLnggKiBxdWF0ZXJuaW9uLng7XHJcblx0XHRjb25zdCB4eSA9IHF1YXRlcm5pb24ueCAqIHF1YXRlcm5pb24ueTtcclxuXHRcdGNvbnN0IHh6ID0gcXVhdGVybmlvbi54ICogcXVhdGVybmlvbi56O1xyXG5cdFx0Y29uc3QgeHcgPSBxdWF0ZXJuaW9uLnggKiBxdWF0ZXJuaW9uLnc7XHJcblx0XHRjb25zdCB5MiA9IHF1YXRlcm5pb24ueSAqIHF1YXRlcm5pb24ueTtcclxuXHRcdGNvbnN0IHl6ID0gcXVhdGVybmlvbi55ICogcXVhdGVybmlvbi56O1xyXG5cdFx0Y29uc3QgeXcgPSBxdWF0ZXJuaW9uLnkgKiBxdWF0ZXJuaW9uLnc7XHJcblx0XHRjb25zdCB6MiA9IHF1YXRlcm5pb24ueiAqIHF1YXRlcm5pb24uejtcclxuXHRcdGNvbnN0IHp3ID0gcXVhdGVybmlvbi56ICogcXVhdGVybmlvbi53O1xyXG5cdFx0Y29uc3QgdzIgPSBxdWF0ZXJuaW9uLncgKiBxdWF0ZXJuaW9uLnc7XHJcblxyXG5cdFx0Y29uc3QgbTAwID0geDIgLSB5MiAtIHoyICsgdzI7XHJcblx0XHRjb25zdCBtMDEgPSAyLjAgKiAoeHkgLSB6dyk7XHJcblx0XHRjb25zdCBtMDIgPSAyLjAgKiAoeHogKyB5dyk7XHJcblxyXG5cdFx0Y29uc3QgbTEwID0gMi4wICogKHh5ICsgencpO1xyXG5cdFx0Y29uc3QgbTExID0gLXgyICsgeTIgLSB6MiArIHcyO1xyXG5cdFx0Y29uc3QgbTEyID0gMi4wICogKHl6IC0geHcpO1xyXG5cclxuXHRcdGNvbnN0IG0yMCA9IDIuMCAqICh4eiAtIHl3KTtcclxuXHRcdGNvbnN0IG0yMSA9IDIuMCAqICh5eiArIHh3KTtcclxuXHRcdGNvbnN0IG0yMiA9IC14MiAtIHkyICsgejIgKyB3MjtcclxuXHJcblx0XHRpZiAoIWRlZmluZWQocmVzdWx0KSkge1xyXG5cdFx0XHRyZXR1cm4gbmV3IE1hdHJpeDMobTAwLCBtMDEsIG0wMiwgbTEwLCBtMTEsIG0xMiwgbTIwLCBtMjEsIG0yMik7XHJcblx0XHR9XHJcblx0XHRyZXN1bHRbMF0gPSBtMDA7XHJcblx0XHRyZXN1bHRbMV0gPSBtMTA7XHJcblx0XHRyZXN1bHRbMl0gPSBtMjA7XHJcblx0XHRyZXN1bHRbM10gPSBtMDE7XHJcblx0XHRyZXN1bHRbNF0gPSBtMTE7XHJcblx0XHRyZXN1bHRbNV0gPSBtMjE7XHJcblx0XHRyZXN1bHRbNl0gPSBtMDI7XHJcblx0XHRyZXN1bHRbN10gPSBtMTI7XHJcblx0XHRyZXN1bHRbOF0gPSBtMjI7XHJcblx0XHRyZXR1cm4gcmVzdWx0O1xyXG5cdH1cclxuXHJcblx0c3RhdGljIGZyb21TY2FsZShzY2FsZTogVmVjdG9yMywgcmVzdWx0OiBNYXRyaXgzKTogTWF0cml4MyB7XHJcblx0XHRpZiAoIWRlZmluZWQocmVzdWx0KSkge1xyXG5cdFx0XHRyZXR1cm4gbmV3IE1hdHJpeDMoc2NhbGUueCwgMC4wLCAwLjAsIDAuMCwgc2NhbGUueSwgMC4wLCAwLjAsIDAuMCwgc2NhbGUueik7XHJcblx0XHR9XHJcblxyXG5cdFx0cmVzdWx0WzBdID0gc2NhbGUueDtcclxuXHRcdHJlc3VsdFsxXSA9IDAuMDtcclxuXHRcdHJlc3VsdFsyXSA9IDAuMDtcclxuXHRcdHJlc3VsdFszXSA9IDAuMDtcclxuXHRcdHJlc3VsdFs0XSA9IHNjYWxlLnk7XHJcblx0XHRyZXN1bHRbNV0gPSAwLjA7XHJcblx0XHRyZXN1bHRbNl0gPSAwLjA7XHJcblx0XHRyZXN1bHRbN10gPSAwLjA7XHJcblx0XHRyZXN1bHRbOF0gPSBzY2FsZS56O1xyXG5cdFx0cmV0dXJuIHJlc3VsdDtcclxuXHR9XHJcblxyXG5cdHN0YXRpYyBmcm9tUm90YXRpb25YKGFuZ2xlOiBudW1iZXIsIHJlc3VsdDogTWF0cml4Myk6IE1hdHJpeDMge1xyXG5cdFx0Y29uc3QgY29zQW5nbGUgPSBNYXRoLmNvcyhhbmdsZSk7XHJcblx0XHRjb25zdCBzaW5BbmdsZSA9IE1hdGguc2luKGFuZ2xlKTtcclxuXHJcblx0XHRpZiAoIWRlZmluZWQocmVzdWx0KSkge1xyXG5cdFx0XHRyZXR1cm4gbmV3IE1hdHJpeDMoMS4wLCAwLjAsIDAuMCwgMC4wLCBjb3NBbmdsZSwgLXNpbkFuZ2xlLCAwLjAsIHNpbkFuZ2xlLCBjb3NBbmdsZSk7XHJcblx0XHR9XHJcblxyXG5cdFx0cmVzdWx0WzBdID0gMS4wO1xyXG5cdFx0cmVzdWx0WzFdID0gMC4wO1xyXG5cdFx0cmVzdWx0WzJdID0gMC4wO1xyXG5cdFx0cmVzdWx0WzNdID0gMC4wO1xyXG5cdFx0cmVzdWx0WzRdID0gY29zQW5nbGU7XHJcblx0XHRyZXN1bHRbNV0gPSBzaW5BbmdsZTtcclxuXHRcdHJlc3VsdFs2XSA9IDAuMDtcclxuXHRcdHJlc3VsdFs3XSA9IC1zaW5BbmdsZTtcclxuXHRcdHJlc3VsdFs4XSA9IGNvc0FuZ2xlO1xyXG5cclxuXHRcdHJldHVybiByZXN1bHQ7XHJcblx0fVxyXG5cclxuXHRzdGF0aWMgZnJvbVJvdGF0aW9uWShhbmdsZTogbnVtYmVyLCByZXN1bHQ6IE1hdHJpeDMpOiBNYXRyaXgzIHtcclxuXHRcdGNvbnN0IGNvc0FuZ2xlID0gTWF0aC5jb3MoYW5nbGUpO1xyXG5cdFx0Y29uc3Qgc2luQW5nbGUgPSBNYXRoLnNpbihhbmdsZSk7XHJcblxyXG5cdFx0aWYgKCFkZWZpbmVkKHJlc3VsdCkpIHtcclxuXHRcdFx0cmV0dXJuIG5ldyBNYXRyaXgzKGNvc0FuZ2xlLCAwLjAsIHNpbkFuZ2xlLCAwLjAsIDEuMCwgMC4wLCAtc2luQW5nbGUsIDAuMCwgY29zQW5nbGUpO1xyXG5cdFx0fVxyXG5cclxuXHRcdHJlc3VsdFswXSA9IGNvc0FuZ2xlO1xyXG5cdFx0cmVzdWx0WzFdID0gMC4wO1xyXG5cdFx0cmVzdWx0WzJdID0gLXNpbkFuZ2xlO1xyXG5cdFx0cmVzdWx0WzNdID0gMC4wO1xyXG5cdFx0cmVzdWx0WzRdID0gMS4wO1xyXG5cdFx0cmVzdWx0WzVdID0gMC4wO1xyXG5cdFx0cmVzdWx0WzZdID0gc2luQW5nbGU7XHJcblx0XHRyZXN1bHRbN10gPSAwLjA7XHJcblx0XHRyZXN1bHRbOF0gPSBjb3NBbmdsZTtcclxuXHJcblx0XHRyZXR1cm4gcmVzdWx0O1xyXG5cdH1cclxuXHJcblx0c3RhdGljIGZyb21Sb3RhdGlvblpzdGF0aWMoYW5nbGU6IG51bWJlciwgcmVzdWx0OiBNYXRyaXgzKTogTWF0cml4MyB7XHJcblx0XHRjb25zdCBjb3NBbmdsZSA9IE1hdGguY29zKGFuZ2xlKTtcclxuXHRcdGNvbnN0IHNpbkFuZ2xlID0gTWF0aC5zaW4oYW5nbGUpO1xyXG5cclxuXHRcdGlmICghZGVmaW5lZChyZXN1bHQpKSB7XHJcblx0XHRcdHJldHVybiBuZXcgTWF0cml4Myhjb3NBbmdsZSwgLXNpbkFuZ2xlLCAwLjAsIHNpbkFuZ2xlLCBjb3NBbmdsZSwgMC4wLCAwLjAsIDAuMCwgMS4wKTtcclxuXHRcdH1cclxuXHJcblx0XHRyZXN1bHRbMF0gPSBjb3NBbmdsZTtcclxuXHRcdHJlc3VsdFsxXSA9IHNpbkFuZ2xlO1xyXG5cdFx0cmVzdWx0WzJdID0gMC4wO1xyXG5cdFx0cmVzdWx0WzNdID0gLXNpbkFuZ2xlO1xyXG5cdFx0cmVzdWx0WzRdID0gY29zQW5nbGU7XHJcblx0XHRyZXN1bHRbNV0gPSAwLjA7XHJcblx0XHRyZXN1bHRbNl0gPSAwLjA7XHJcblx0XHRyZXN1bHRbN10gPSAwLjA7XHJcblx0XHRyZXN1bHRbOF0gPSAxLjA7XHJcblxyXG5cdFx0cmV0dXJuIHJlc3VsdDtcclxuXHR9XHJcblx0dG9BcnJheSgpIHtcclxuXHRcdGNvbnN0IHJlc3VsdCA9IFtdO1xyXG5cdFx0TWF0cml4My50b0FycmF5KHRoaXMsIHJlc3VsdCk7XHJcblx0XHRyZXR1cm4gcmVzdWx0O1xyXG5cdH1cclxuXHJcblx0c3RhdGljIHRvQXJyYXkobWF0cml4OiBNYXRyaXgzLCByZXN1bHQ6IG51bWJlcltdKTogbnVtYmVyW10ge1xyXG5cdFx0aWYgKCFkZWZpbmVkKHJlc3VsdCkpIHtcclxuXHRcdFx0cmV0dXJuIFttYXRyaXhbMF0sIG1hdHJpeFsxXSwgbWF0cml4WzJdLCBtYXRyaXhbM10sIG1hdHJpeFs0XSwgbWF0cml4WzVdLCBtYXRyaXhbNl0sIG1hdHJpeFs3XSwgbWF0cml4WzhdXTtcclxuXHRcdH1cclxuXHRcdHJlc3VsdFswXSA9IG1hdHJpeFswXTtcclxuXHRcdHJlc3VsdFsxXSA9IG1hdHJpeFsxXTtcclxuXHRcdHJlc3VsdFsyXSA9IG1hdHJpeFsyXTtcclxuXHRcdHJlc3VsdFszXSA9IG1hdHJpeFszXTtcclxuXHRcdHJlc3VsdFs0XSA9IG1hdHJpeFs0XTtcclxuXHRcdHJlc3VsdFs1XSA9IG1hdHJpeFs1XTtcclxuXHRcdHJlc3VsdFs2XSA9IG1hdHJpeFs2XTtcclxuXHRcdHJlc3VsdFs3XSA9IG1hdHJpeFs3XTtcclxuXHRcdHJlc3VsdFs4XSA9IG1hdHJpeFs4XTtcclxuXHRcdHJldHVybiByZXN1bHQ7XHJcblx0fVxyXG5cclxuXHRzdGF0aWMgZ2V0RWxlbWVudEluZGV4KGNvbHVtbjogbnVtYmVyLCByb3c6IG51bWJlcik6IG51bWJlciB7XHJcblx0XHRyZXR1cm4gY29sdW1uICogMyArIHJvdztcclxuXHR9XHJcblxyXG5cdHN0YXRpYyBnZXRDb2x1bW4obWF0cml4OiBNYXRyaXgzLCBpbmRleDogbnVtYmVyLCByZXN1bHQ6IFZlY3RvcjMpOiBWZWN0b3IzIHtcclxuXHRcdGNvbnN0IHN0YXJ0SW5kZXggPSBpbmRleCAqIDM7XHJcblx0XHRjb25zdCB4ID0gbWF0cml4W3N0YXJ0SW5kZXhdO1xyXG5cdFx0Y29uc3QgeSA9IG1hdHJpeFtzdGFydEluZGV4ICsgMV07XHJcblx0XHRjb25zdCB6ID0gbWF0cml4W3N0YXJ0SW5kZXggKyAyXTtcclxuXHJcblx0XHRyZXN1bHQueCA9IHg7XHJcblx0XHRyZXN1bHQueSA9IHk7XHJcblx0XHRyZXN1bHQueiA9IHo7XHJcblx0XHRyZXR1cm4gcmVzdWx0O1xyXG5cdH1cclxuXHJcblx0c3RhdGljIHNldENvbHVtbihtYXRyaXg6IE1hdHJpeDMsIGluZGV4OiBudW1iZXIsIGNhcnRlc2lhbjogVmVjdG9yMywgcmVzdWx0OiBNYXRyaXgzKTogTWF0cml4MyB7XHJcblx0XHRyZXN1bHQgPSBNYXRyaXgzLmNsb25lKG1hdHJpeCwgcmVzdWx0KTtcclxuXHRcdGNvbnN0IHN0YXJ0SW5kZXggPSBpbmRleCAqIDM7XHJcblx0XHRyZXN1bHRbc3RhcnRJbmRleF0gPSBjYXJ0ZXNpYW4ueDtcclxuXHRcdHJlc3VsdFtzdGFydEluZGV4ICsgMV0gPSBjYXJ0ZXNpYW4ueTtcclxuXHRcdHJlc3VsdFtzdGFydEluZGV4ICsgMl0gPSBjYXJ0ZXNpYW4uejtcclxuXHRcdHJldHVybiByZXN1bHQ7XHJcblx0fVxyXG5cclxuXHRzdGF0aWMgZ2V0Um93KG1hdHJpeDogTWF0cml4MywgaW5kZXg6IG51bWJlciwgcmVzdWx0OiBWZWN0b3IzKTogVmVjdG9yMyB7XHJcblx0XHRjb25zdCB4ID0gbWF0cml4W2luZGV4XTtcclxuXHRcdGNvbnN0IHkgPSBtYXRyaXhbaW5kZXggKyAzXTtcclxuXHRcdGNvbnN0IHogPSBtYXRyaXhbaW5kZXggKyA2XTtcclxuXHJcblx0XHRyZXN1bHQueCA9IHg7XHJcblx0XHRyZXN1bHQueSA9IHk7XHJcblx0XHRyZXN1bHQueiA9IHo7XHJcblx0XHRyZXR1cm4gcmVzdWx0O1xyXG5cdH1cclxuXHJcblx0c3RhdGljIHNldFJvdyhtYXRyaXg6IE1hdHJpeDMsIGluZGV4OiBudW1iZXIsIGNhcnRlc2lhbjogVmVjdG9yMywgcmVzdWx0OiBNYXRyaXgzKTogTWF0cml4MyB7XHJcblx0XHRyZXN1bHQgPSBNYXRyaXgzLmNsb25lKG1hdHJpeCwgcmVzdWx0KTtcclxuXHRcdHJlc3VsdFtpbmRleF0gPSBjYXJ0ZXNpYW4ueDtcclxuXHRcdHJlc3VsdFtpbmRleCArIDNdID0gY2FydGVzaWFuLnk7XHJcblx0XHRyZXN1bHRbaW5kZXggKyA2XSA9IGNhcnRlc2lhbi56O1xyXG5cdFx0cmV0dXJuIHJlc3VsdDtcclxuXHR9XHJcblxyXG5cdHN0YXRpYyBzZXRTY2FsZShtYXRyaXg6IE1hdHJpeDMsIHNjYWxlOiBWZWN0b3IzLCByZXN1bHQ6IE1hdHJpeDMpOiBNYXRyaXgzIHtcclxuXHRcdGNvbnN0IGV4aXN0aW5nU2NhbGUgPSBNYXRyaXgzLmdldFNjYWxlKG1hdHJpeCwgc2NhbGVTY3JhdGNoMSk7XHJcblx0XHRjb25zdCBzY2FsZVJhdGlvWCA9IHNjYWxlLnggLyBleGlzdGluZ1NjYWxlLng7XHJcblx0XHRjb25zdCBzY2FsZVJhdGlvWSA9IHNjYWxlLnkgLyBleGlzdGluZ1NjYWxlLnk7XHJcblx0XHRjb25zdCBzY2FsZVJhdGlvWiA9IHNjYWxlLnogLyBleGlzdGluZ1NjYWxlLno7XHJcblxyXG5cdFx0cmVzdWx0WzBdID0gbWF0cml4WzBdICogc2NhbGVSYXRpb1g7XHJcblx0XHRyZXN1bHRbMV0gPSBtYXRyaXhbMV0gKiBzY2FsZVJhdGlvWDtcclxuXHRcdHJlc3VsdFsyXSA9IG1hdHJpeFsyXSAqIHNjYWxlUmF0aW9YO1xyXG5cdFx0cmVzdWx0WzNdID0gbWF0cml4WzNdICogc2NhbGVSYXRpb1k7XHJcblx0XHRyZXN1bHRbNF0gPSBtYXRyaXhbNF0gKiBzY2FsZVJhdGlvWTtcclxuXHRcdHJlc3VsdFs1XSA9IG1hdHJpeFs1XSAqIHNjYWxlUmF0aW9ZO1xyXG5cdFx0cmVzdWx0WzZdID0gbWF0cml4WzZdICogc2NhbGVSYXRpb1o7XHJcblx0XHRyZXN1bHRbN10gPSBtYXRyaXhbN10gKiBzY2FsZVJhdGlvWjtcclxuXHRcdHJlc3VsdFs4XSA9IG1hdHJpeFs4XSAqIHNjYWxlUmF0aW9aO1xyXG5cclxuXHRcdHJldHVybiByZXN1bHQ7XHJcblx0fVxyXG5cclxuXHRzdGF0aWMgZ2V0U2NhbGUobWF0cml4OiBNYXRyaXgzLCByZXN1bHQ6IFZlY3RvcjMpOiBWZWN0b3IzIHtcclxuXHRcdHJlc3VsdC54ID0gVmVjdG9yMy5tYWduaXR1ZGUoVmVjdG9yMy5mcm9tRWxlbWVudHMobWF0cml4WzBdLCBtYXRyaXhbMV0sIG1hdHJpeFsyXSwgc2NyYXRjaENvbHVtbikpO1xyXG5cdFx0cmVzdWx0LnkgPSBWZWN0b3IzLm1hZ25pdHVkZShWZWN0b3IzLmZyb21FbGVtZW50cyhtYXRyaXhbM10sIG1hdHJpeFs0XSwgbWF0cml4WzVdLCBzY3JhdGNoQ29sdW1uKSk7XHJcblx0XHRyZXN1bHQueiA9IFZlY3RvcjMubWFnbml0dWRlKFZlY3RvcjMuZnJvbUVsZW1lbnRzKG1hdHJpeFs2XSwgbWF0cml4WzddLCBtYXRyaXhbOF0sIHNjcmF0Y2hDb2x1bW4pKTtcclxuXHRcdHJldHVybiByZXN1bHQ7XHJcblx0fVxyXG5cclxuXHRzdGF0aWMgZ2V0TWF4aW11bVNjYWxlKG1hdHJpeDogTWF0cml4Myk6IG51bWJlciB7XHJcblx0XHRNYXRyaXgzLmdldFNjYWxlKG1hdHJpeCwgc2NhbGVTY3JhdGNoMyk7XHJcblx0XHRyZXR1cm4gVmVjdG9yMy5tYXhpbXVtQ29tcG9uZW50KHNjYWxlU2NyYXRjaDMpO1xyXG5cdH1cclxuXHJcblx0c3RhdGljIHNldFJvdGF0aW9uKG1hdHJpeDogTWF0cml4Mywgcm90YXRpb246IE1hdHJpeDMsIHJlc3VsdDogTWF0cml4Myk6IE1hdHJpeDMge1xyXG5cdFx0Y29uc3Qgc2NhbGUgPSBNYXRyaXgzLmdldFNjYWxlKG1hdHJpeCwgc2NhbGVTY3JhdGNoNCk7XHJcblxyXG5cdFx0cmVzdWx0WzBdID0gcm90YXRpb25bMF0gKiBzY2FsZS54O1xyXG5cdFx0cmVzdWx0WzFdID0gcm90YXRpb25bMV0gKiBzY2FsZS54O1xyXG5cdFx0cmVzdWx0WzJdID0gcm90YXRpb25bMl0gKiBzY2FsZS54O1xyXG5cdFx0cmVzdWx0WzNdID0gcm90YXRpb25bM10gKiBzY2FsZS55O1xyXG5cdFx0cmVzdWx0WzRdID0gcm90YXRpb25bNF0gKiBzY2FsZS55O1xyXG5cdFx0cmVzdWx0WzVdID0gcm90YXRpb25bNV0gKiBzY2FsZS55O1xyXG5cdFx0cmVzdWx0WzZdID0gcm90YXRpb25bNl0gKiBzY2FsZS56O1xyXG5cdFx0cmVzdWx0WzddID0gcm90YXRpb25bN10gKiBzY2FsZS56O1xyXG5cdFx0cmVzdWx0WzhdID0gcm90YXRpb25bOF0gKiBzY2FsZS56O1xyXG5cclxuXHRcdHJldHVybiByZXN1bHQ7XHJcblx0fVxyXG5cclxuXHRzdGF0aWMgZ2V0Um90YXRpb24obWF0cml4OiBNYXRyaXgzLCByZXN1bHQ6IE1hdHJpeDMpOiBNYXRyaXgzIHtcclxuXHRcdGNvbnN0IHNjYWxlID0gTWF0cml4My5nZXRTY2FsZShtYXRyaXgsIHNjYWxlU2NyYXRjaDUpO1xyXG5cclxuXHRcdHJlc3VsdFswXSA9IG1hdHJpeFswXSAvIHNjYWxlLng7XHJcblx0XHRyZXN1bHRbMV0gPSBtYXRyaXhbMV0gLyBzY2FsZS54O1xyXG5cdFx0cmVzdWx0WzJdID0gbWF0cml4WzJdIC8gc2NhbGUueDtcclxuXHRcdHJlc3VsdFszXSA9IG1hdHJpeFszXSAvIHNjYWxlLnk7XHJcblx0XHRyZXN1bHRbNF0gPSBtYXRyaXhbNF0gLyBzY2FsZS55O1xyXG5cdFx0cmVzdWx0WzVdID0gbWF0cml4WzVdIC8gc2NhbGUueTtcclxuXHRcdHJlc3VsdFs2XSA9IG1hdHJpeFs2XSAvIHNjYWxlLno7XHJcblx0XHRyZXN1bHRbN10gPSBtYXRyaXhbN10gLyBzY2FsZS56O1xyXG5cdFx0cmVzdWx0WzhdID0gbWF0cml4WzhdIC8gc2NhbGUuejtcclxuXHJcblx0XHRyZXR1cm4gcmVzdWx0O1xyXG5cdH1cclxuXHJcblx0c3RhdGljIG11bHRpcGx5KGxlZnQ6IE1hdHJpeDMsIHJpZ2h0OiBNYXRyaXgzLCByZXN1bHQ6IE1hdHJpeDMpOiBNYXRyaXgzIHtcclxuXHRcdGNvbnN0IGNvbHVtbjBSb3cwID0gbGVmdFswXSAqIHJpZ2h0WzBdICsgbGVmdFszXSAqIHJpZ2h0WzFdICsgbGVmdFs2XSAqIHJpZ2h0WzJdO1xyXG5cdFx0Y29uc3QgY29sdW1uMFJvdzEgPSBsZWZ0WzFdICogcmlnaHRbMF0gKyBsZWZ0WzRdICogcmlnaHRbMV0gKyBsZWZ0WzddICogcmlnaHRbMl07XHJcblx0XHRjb25zdCBjb2x1bW4wUm93MiA9IGxlZnRbMl0gKiByaWdodFswXSArIGxlZnRbNV0gKiByaWdodFsxXSArIGxlZnRbOF0gKiByaWdodFsyXTtcclxuXHJcblx0XHRjb25zdCBjb2x1bW4xUm93MCA9IGxlZnRbMF0gKiByaWdodFszXSArIGxlZnRbM10gKiByaWdodFs0XSArIGxlZnRbNl0gKiByaWdodFs1XTtcclxuXHRcdGNvbnN0IGNvbHVtbjFSb3cxID0gbGVmdFsxXSAqIHJpZ2h0WzNdICsgbGVmdFs0XSAqIHJpZ2h0WzRdICsgbGVmdFs3XSAqIHJpZ2h0WzVdO1xyXG5cdFx0Y29uc3QgY29sdW1uMVJvdzIgPSBsZWZ0WzJdICogcmlnaHRbM10gKyBsZWZ0WzVdICogcmlnaHRbNF0gKyBsZWZ0WzhdICogcmlnaHRbNV07XHJcblxyXG5cdFx0Y29uc3QgY29sdW1uMlJvdzAgPSBsZWZ0WzBdICogcmlnaHRbNl0gKyBsZWZ0WzNdICogcmlnaHRbN10gKyBsZWZ0WzZdICogcmlnaHRbOF07XHJcblx0XHRjb25zdCBjb2x1bW4yUm93MSA9IGxlZnRbMV0gKiByaWdodFs2XSArIGxlZnRbNF0gKiByaWdodFs3XSArIGxlZnRbN10gKiByaWdodFs4XTtcclxuXHRcdGNvbnN0IGNvbHVtbjJSb3cyID0gbGVmdFsyXSAqIHJpZ2h0WzZdICsgbGVmdFs1XSAqIHJpZ2h0WzddICsgbGVmdFs4XSAqIHJpZ2h0WzhdO1xyXG5cclxuXHRcdHJlc3VsdFswXSA9IGNvbHVtbjBSb3cwO1xyXG5cdFx0cmVzdWx0WzFdID0gY29sdW1uMFJvdzE7XHJcblx0XHRyZXN1bHRbMl0gPSBjb2x1bW4wUm93MjtcclxuXHRcdHJlc3VsdFszXSA9IGNvbHVtbjFSb3cwO1xyXG5cdFx0cmVzdWx0WzRdID0gY29sdW1uMVJvdzE7XHJcblx0XHRyZXN1bHRbNV0gPSBjb2x1bW4xUm93MjtcclxuXHRcdHJlc3VsdFs2XSA9IGNvbHVtbjJSb3cwO1xyXG5cdFx0cmVzdWx0WzddID0gY29sdW1uMlJvdzE7XHJcblx0XHRyZXN1bHRbOF0gPSBjb2x1bW4yUm93MjtcclxuXHRcdHJldHVybiByZXN1bHQ7XHJcblx0fVxyXG5cclxuXHRzdGF0aWMgYWRkKGxlZnQ6IE1hdHJpeDMsIHJpZ2h0OiBNYXRyaXgzLCByZXN1bHQ6IE1hdHJpeDMpOiBNYXRyaXgzIHtcclxuXHRcdHJlc3VsdFswXSA9IGxlZnRbMF0gKyByaWdodFswXTtcclxuXHRcdHJlc3VsdFsxXSA9IGxlZnRbMV0gKyByaWdodFsxXTtcclxuXHRcdHJlc3VsdFsyXSA9IGxlZnRbMl0gKyByaWdodFsyXTtcclxuXHRcdHJlc3VsdFszXSA9IGxlZnRbM10gKyByaWdodFszXTtcclxuXHRcdHJlc3VsdFs0XSA9IGxlZnRbNF0gKyByaWdodFs0XTtcclxuXHRcdHJlc3VsdFs1XSA9IGxlZnRbNV0gKyByaWdodFs1XTtcclxuXHRcdHJlc3VsdFs2XSA9IGxlZnRbNl0gKyByaWdodFs2XTtcclxuXHRcdHJlc3VsdFs3XSA9IGxlZnRbN10gKyByaWdodFs3XTtcclxuXHRcdHJlc3VsdFs4XSA9IGxlZnRbOF0gKyByaWdodFs4XTtcclxuXHRcdHJldHVybiByZXN1bHQ7XHJcblx0fVxyXG5cclxuXHRzdGF0aWMgc3VidHJhY3QobGVmdDogTWF0cml4MywgcmlnaHQ6IE1hdHJpeDMsIHJlc3VsdDogTWF0cml4Mykge1xyXG5cdFx0cmVzdWx0WzBdID0gbGVmdFswXSAtIHJpZ2h0WzBdO1xyXG5cdFx0cmVzdWx0WzFdID0gbGVmdFsxXSAtIHJpZ2h0WzFdO1xyXG5cdFx0cmVzdWx0WzJdID0gbGVmdFsyXSAtIHJpZ2h0WzJdO1xyXG5cdFx0cmVzdWx0WzNdID0gbGVmdFszXSAtIHJpZ2h0WzNdO1xyXG5cdFx0cmVzdWx0WzRdID0gbGVmdFs0XSAtIHJpZ2h0WzRdO1xyXG5cdFx0cmVzdWx0WzVdID0gbGVmdFs1XSAtIHJpZ2h0WzVdO1xyXG5cdFx0cmVzdWx0WzZdID0gbGVmdFs2XSAtIHJpZ2h0WzZdO1xyXG5cdFx0cmVzdWx0WzddID0gbGVmdFs3XSAtIHJpZ2h0WzddO1xyXG5cdFx0cmVzdWx0WzhdID0gbGVmdFs4XSAtIHJpZ2h0WzhdO1xyXG5cdFx0cmV0dXJuIHJlc3VsdDtcclxuXHR9XHJcblxyXG5cdHN0YXRpYyBtdWx0aXBseUJ5VmVjdG9yKG1hdHJpeDogTWF0cml4MywgY2FydGVzaWFuOiBWZWN0b3IzLCByZXN1bHQ6IFZlY3RvcjMpOiBWZWN0b3IzIHtcclxuXHRcdGNvbnN0IHZYID0gY2FydGVzaWFuLng7XHJcblx0XHRjb25zdCB2WSA9IGNhcnRlc2lhbi55O1xyXG5cdFx0Y29uc3QgdlogPSBjYXJ0ZXNpYW4uejtcclxuXHJcblx0XHRjb25zdCB4ID0gbWF0cml4WzBdICogdlggKyBtYXRyaXhbM10gKiB2WSArIG1hdHJpeFs2XSAqIHZaO1xyXG5cdFx0Y29uc3QgeSA9IG1hdHJpeFsxXSAqIHZYICsgbWF0cml4WzRdICogdlkgKyBtYXRyaXhbN10gKiB2WjtcclxuXHRcdGNvbnN0IHogPSBtYXRyaXhbMl0gKiB2WCArIG1hdHJpeFs1XSAqIHZZICsgbWF0cml4WzhdICogdlo7XHJcblxyXG5cdFx0cmVzdWx0LnggPSB4O1xyXG5cdFx0cmVzdWx0LnkgPSB5O1xyXG5cdFx0cmVzdWx0LnogPSB6O1xyXG5cdFx0cmV0dXJuIHJlc3VsdDtcclxuXHR9XHJcblxyXG5cdHN0YXRpYyBtdWx0aXBseUJ5U2NhbGFyKG1hdHJpeDogTWF0cml4Mywgc2NhbGFyOiBudW1iZXIsIHJlc3VsdDogTWF0cml4Myk6IE1hdHJpeDMge1xyXG5cdFx0cmVzdWx0WzBdID0gbWF0cml4WzBdICogc2NhbGFyO1xyXG5cdFx0cmVzdWx0WzFdID0gbWF0cml4WzFdICogc2NhbGFyO1xyXG5cdFx0cmVzdWx0WzJdID0gbWF0cml4WzJdICogc2NhbGFyO1xyXG5cdFx0cmVzdWx0WzNdID0gbWF0cml4WzNdICogc2NhbGFyO1xyXG5cdFx0cmVzdWx0WzRdID0gbWF0cml4WzRdICogc2NhbGFyO1xyXG5cdFx0cmVzdWx0WzVdID0gbWF0cml4WzVdICogc2NhbGFyO1xyXG5cdFx0cmVzdWx0WzZdID0gbWF0cml4WzZdICogc2NhbGFyO1xyXG5cdFx0cmVzdWx0WzddID0gbWF0cml4WzddICogc2NhbGFyO1xyXG5cdFx0cmVzdWx0WzhdID0gbWF0cml4WzhdICogc2NhbGFyO1xyXG5cdFx0cmV0dXJuIHJlc3VsdDtcclxuXHR9XHJcblxyXG5cdHN0YXRpYyBtdWx0aXBseUJ5U2NhbGUobWF0cml4OiBNYXRyaXgzLCBzY2FsZTogVmVjdG9yMywgcmVzdWx0OiBNYXRyaXgzKTogTWF0cml4MyB7XHJcblx0XHRyZXN1bHRbMF0gPSBtYXRyaXhbMF0gKiBzY2FsZS54O1xyXG5cdFx0cmVzdWx0WzFdID0gbWF0cml4WzFdICogc2NhbGUueDtcclxuXHRcdHJlc3VsdFsyXSA9IG1hdHJpeFsyXSAqIHNjYWxlLng7XHJcblx0XHRyZXN1bHRbM10gPSBtYXRyaXhbM10gKiBzY2FsZS55O1xyXG5cdFx0cmVzdWx0WzRdID0gbWF0cml4WzRdICogc2NhbGUueTtcclxuXHRcdHJlc3VsdFs1XSA9IG1hdHJpeFs1XSAqIHNjYWxlLnk7XHJcblx0XHRyZXN1bHRbNl0gPSBtYXRyaXhbNl0gKiBzY2FsZS56O1xyXG5cdFx0cmVzdWx0WzddID0gbWF0cml4WzddICogc2NhbGUuejtcclxuXHRcdHJlc3VsdFs4XSA9IG1hdHJpeFs4XSAqIHNjYWxlLno7XHJcblxyXG5cdFx0cmV0dXJuIHJlc3VsdDtcclxuXHR9XHJcblxyXG5cdHN0YXRpYyBuZWdhdGUobWF0cml4OiBNYXRyaXgzLCByZXN1bHQ6IE1hdHJpeDMpOiBNYXRyaXgzIHtcclxuXHRcdHJlc3VsdFswXSA9IC1tYXRyaXhbMF07XHJcblx0XHRyZXN1bHRbMV0gPSAtbWF0cml4WzFdO1xyXG5cdFx0cmVzdWx0WzJdID0gLW1hdHJpeFsyXTtcclxuXHRcdHJlc3VsdFszXSA9IC1tYXRyaXhbM107XHJcblx0XHRyZXN1bHRbNF0gPSAtbWF0cml4WzRdO1xyXG5cdFx0cmVzdWx0WzVdID0gLW1hdHJpeFs1XTtcclxuXHRcdHJlc3VsdFs2XSA9IC1tYXRyaXhbNl07XHJcblx0XHRyZXN1bHRbN10gPSAtbWF0cml4WzddO1xyXG5cdFx0cmVzdWx0WzhdID0gLW1hdHJpeFs4XTtcclxuXHRcdHJldHVybiByZXN1bHQ7XHJcblx0fVxyXG5cclxuXHRzdGF0aWMgdHJhbnNwb3NlKG1hdHJpeDogTWF0cml4MywgcmVzdWx0OiBNYXRyaXgzKTogTWF0cml4MyB7XHJcblx0XHRjb25zdCBjb2x1bW4wUm93MCA9IG1hdHJpeFswXTtcclxuXHRcdGNvbnN0IGNvbHVtbjBSb3cxID0gbWF0cml4WzNdO1xyXG5cdFx0Y29uc3QgY29sdW1uMFJvdzIgPSBtYXRyaXhbNl07XHJcblx0XHRjb25zdCBjb2x1bW4xUm93MCA9IG1hdHJpeFsxXTtcclxuXHRcdGNvbnN0IGNvbHVtbjFSb3cxID0gbWF0cml4WzRdO1xyXG5cdFx0Y29uc3QgY29sdW1uMVJvdzIgPSBtYXRyaXhbN107XHJcblx0XHRjb25zdCBjb2x1bW4yUm93MCA9IG1hdHJpeFsyXTtcclxuXHRcdGNvbnN0IGNvbHVtbjJSb3cxID0gbWF0cml4WzVdO1xyXG5cdFx0Y29uc3QgY29sdW1uMlJvdzIgPSBtYXRyaXhbOF07XHJcblxyXG5cdFx0cmVzdWx0WzBdID0gY29sdW1uMFJvdzA7XHJcblx0XHRyZXN1bHRbMV0gPSBjb2x1bW4wUm93MTtcclxuXHRcdHJlc3VsdFsyXSA9IGNvbHVtbjBSb3cyO1xyXG5cdFx0cmVzdWx0WzNdID0gY29sdW1uMVJvdzA7XHJcblx0XHRyZXN1bHRbNF0gPSBjb2x1bW4xUm93MTtcclxuXHRcdHJlc3VsdFs1XSA9IGNvbHVtbjFSb3cyO1xyXG5cdFx0cmVzdWx0WzZdID0gY29sdW1uMlJvdzA7XHJcblx0XHRyZXN1bHRbN10gPSBjb2x1bW4yUm93MTtcclxuXHRcdHJlc3VsdFs4XSA9IGNvbHVtbjJSb3cyO1xyXG5cdFx0cmV0dXJuIHJlc3VsdDtcclxuXHR9XHJcblxyXG5cdHN0YXRpYyBhYnMobWF0cml4OiBNYXRyaXgzLCByZXN1bHQ6IE1hdHJpeDMpOiBNYXRyaXgzIHtcclxuXHRcdHJlc3VsdFswXSA9IE1hdGguYWJzKG1hdHJpeFswXSk7XHJcblx0XHRyZXN1bHRbMV0gPSBNYXRoLmFicyhtYXRyaXhbMV0pO1xyXG5cdFx0cmVzdWx0WzJdID0gTWF0aC5hYnMobWF0cml4WzJdKTtcclxuXHRcdHJlc3VsdFszXSA9IE1hdGguYWJzKG1hdHJpeFszXSk7XHJcblx0XHRyZXN1bHRbNF0gPSBNYXRoLmFicyhtYXRyaXhbNF0pO1xyXG5cdFx0cmVzdWx0WzVdID0gTWF0aC5hYnMobWF0cml4WzVdKTtcclxuXHRcdHJlc3VsdFs2XSA9IE1hdGguYWJzKG1hdHJpeFs2XSk7XHJcblx0XHRyZXN1bHRbN10gPSBNYXRoLmFicyhtYXRyaXhbN10pO1xyXG5cdFx0cmVzdWx0WzhdID0gTWF0aC5hYnMobWF0cml4WzhdKTtcclxuXHJcblx0XHRyZXR1cm4gcmVzdWx0O1xyXG5cdH1cclxuXHJcblx0c3RhdGljIGRldGVybWluYW50KG1hdHJpeDogTWF0cml4Myk6IG51bWJlciB7XHJcblx0XHRjb25zdCBtMTEgPSBtYXRyaXhbMF07XHJcblx0XHRjb25zdCBtMjEgPSBtYXRyaXhbM107XHJcblx0XHRjb25zdCBtMzEgPSBtYXRyaXhbNl07XHJcblx0XHRjb25zdCBtMTIgPSBtYXRyaXhbMV07XHJcblx0XHRjb25zdCBtMjIgPSBtYXRyaXhbNF07XHJcblx0XHRjb25zdCBtMzIgPSBtYXRyaXhbN107XHJcblx0XHRjb25zdCBtMTMgPSBtYXRyaXhbMl07XHJcblx0XHRjb25zdCBtMjMgPSBtYXRyaXhbNV07XHJcblx0XHRjb25zdCBtMzMgPSBtYXRyaXhbOF07XHJcblxyXG5cdFx0cmV0dXJuIG0xMSAqIChtMjIgKiBtMzMgLSBtMjMgKiBtMzIpICsgbTEyICogKG0yMyAqIG0zMSAtIG0yMSAqIG0zMykgKyBtMTMgKiAobTIxICogbTMyIC0gbTIyICogbTMxKTtcclxuXHR9XHJcblxyXG5cdHN0YXRpYyBpbnZlcnNlKG1hdHJpeDogTWF0cml4MywgcmVzdWx0OiBNYXRyaXgzKTogTWF0cml4MyB7XHJcblx0XHRjb25zdCBtMTEgPSBtYXRyaXhbMF07XHJcblx0XHRjb25zdCBtMjEgPSBtYXRyaXhbMV07XHJcblx0XHRjb25zdCBtMzEgPSBtYXRyaXhbMl07XHJcblx0XHRjb25zdCBtMTIgPSBtYXRyaXhbM107XHJcblx0XHRjb25zdCBtMjIgPSBtYXRyaXhbNF07XHJcblx0XHRjb25zdCBtMzIgPSBtYXRyaXhbNV07XHJcblx0XHRjb25zdCBtMTMgPSBtYXRyaXhbNl07XHJcblx0XHRjb25zdCBtMjMgPSBtYXRyaXhbN107XHJcblx0XHRjb25zdCBtMzMgPSBtYXRyaXhbOF07XHJcblxyXG5cdFx0Y29uc3QgZGV0ZXJtaW5hbnQgPSBNYXRyaXgzLmRldGVybWluYW50KG1hdHJpeCk7XHJcblxyXG5cdFx0Ly8gPj5pbmNsdWRlU3RhcnQoJ2RlYnVnJywgcHJhZ21hcy5kZWJ1Zyk7XHJcblx0XHRpZiAoTWF0aC5hYnMoZGV0ZXJtaW5hbnQpIDw9IEdNYXRoLkVQU0lMT04xNSkge1xyXG5cdFx0XHR0aHJvdyBuZXcgRXJyb3IoXCJtYXRyaXggaXMgbm90IGludmVydGlibGVcIik7XHJcblx0XHR9XHJcblx0XHQvLyA+PmluY2x1ZGVFbmQoJ2RlYnVnJyk7XHJcblxyXG5cdFx0cmVzdWx0WzBdID0gbTIyICogbTMzIC0gbTIzICogbTMyO1xyXG5cdFx0cmVzdWx0WzFdID0gbTIzICogbTMxIC0gbTIxICogbTMzO1xyXG5cdFx0cmVzdWx0WzJdID0gbTIxICogbTMyIC0gbTIyICogbTMxO1xyXG5cdFx0cmVzdWx0WzNdID0gbTEzICogbTMyIC0gbTEyICogbTMzO1xyXG5cdFx0cmVzdWx0WzRdID0gbTExICogbTMzIC0gbTEzICogbTMxO1xyXG5cdFx0cmVzdWx0WzVdID0gbTEyICogbTMxIC0gbTExICogbTMyO1xyXG5cdFx0cmVzdWx0WzZdID0gbTEyICogbTIzIC0gbTEzICogbTIyO1xyXG5cdFx0cmVzdWx0WzddID0gbTEzICogbTIxIC0gbTExICogbTIzO1xyXG5cdFx0cmVzdWx0WzhdID0gbTExICogbTIyIC0gbTEyICogbTIxO1xyXG5cclxuXHRcdGNvbnN0IHNjYWxlID0gMS4wIC8gZGV0ZXJtaW5hbnQ7XHJcblx0XHRyZXR1cm4gTWF0cml4My5tdWx0aXBseUJ5U2NhbGFyKHJlc3VsdCwgc2NhbGUsIHJlc3VsdCk7XHJcblx0fVxyXG5cclxuXHRzdGF0aWMgaW52ZXJzZVRyYW5zcG9zZShtYXRyaXg6IE1hdHJpeDMsIHJlc3VsdDogTWF0cml4Mykge1xyXG5cdFx0cmV0dXJuIE1hdHJpeDMuaW52ZXJzZShNYXRyaXgzLnRyYW5zcG9zZShtYXRyaXgsIHNjcmF0Y2hUcmFuc3Bvc2VNYXRyaXgpLCByZXN1bHQpO1xyXG5cdH1cclxuXHJcblx0c3RhdGljIGVxdWFscyhsZWZ0OiBNYXRyaXgzLCByaWdodDogTWF0cml4Myk6IGJvb2xlYW4ge1xyXG5cdFx0cmV0dXJuIChcclxuXHRcdFx0bGVmdCA9PT0gcmlnaHQgfHxcclxuXHRcdFx0KGRlZmluZWQobGVmdCkgJiZcclxuXHRcdFx0XHRkZWZpbmVkKHJpZ2h0KSAmJlxyXG5cdFx0XHRcdGxlZnRbMF0gPT09IHJpZ2h0WzBdICYmXHJcblx0XHRcdFx0bGVmdFsxXSA9PT0gcmlnaHRbMV0gJiZcclxuXHRcdFx0XHRsZWZ0WzJdID09PSByaWdodFsyXSAmJlxyXG5cdFx0XHRcdGxlZnRbM10gPT09IHJpZ2h0WzNdICYmXHJcblx0XHRcdFx0bGVmdFs0XSA9PT0gcmlnaHRbNF0gJiZcclxuXHRcdFx0XHRsZWZ0WzVdID09PSByaWdodFs1XSAmJlxyXG5cdFx0XHRcdGxlZnRbNl0gPT09IHJpZ2h0WzZdICYmXHJcblx0XHRcdFx0bGVmdFs3XSA9PT0gcmlnaHRbN10gJiZcclxuXHRcdFx0XHRsZWZ0WzhdID09PSByaWdodFs4XSlcclxuXHRcdCk7XHJcblx0fVxyXG5cclxuXHRzdGF0aWMgZXF1YWxzRXBzaWxvbihsZWZ0OiBNYXRyaXgzLCByaWdodDogTWF0cml4MywgZXBzaWxvbiA9IDApOiBib29sZWFuIHtcclxuXHRcdGVwc2lsb24gPSBkZWZhdWx0VmFsdWUoZXBzaWxvbiwgMCk7XHJcblxyXG5cdFx0cmV0dXJuIChcclxuXHRcdFx0bGVmdCA9PT0gcmlnaHQgfHxcclxuXHRcdFx0KGRlZmluZWQobGVmdCkgJiZcclxuXHRcdFx0XHRkZWZpbmVkKHJpZ2h0KSAmJlxyXG5cdFx0XHRcdE1hdGguYWJzKGxlZnRbMF0gLSByaWdodFswXSkgPD0gZXBzaWxvbiAmJlxyXG5cdFx0XHRcdE1hdGguYWJzKGxlZnRbMV0gLSByaWdodFsxXSkgPD0gZXBzaWxvbiAmJlxyXG5cdFx0XHRcdE1hdGguYWJzKGxlZnRbMl0gLSByaWdodFsyXSkgPD0gZXBzaWxvbiAmJlxyXG5cdFx0XHRcdE1hdGguYWJzKGxlZnRbM10gLSByaWdodFszXSkgPD0gZXBzaWxvbiAmJlxyXG5cdFx0XHRcdE1hdGguYWJzKGxlZnRbNF0gLSByaWdodFs0XSkgPD0gZXBzaWxvbiAmJlxyXG5cdFx0XHRcdE1hdGguYWJzKGxlZnRbNV0gLSByaWdodFs1XSkgPD0gZXBzaWxvbiAmJlxyXG5cdFx0XHRcdE1hdGguYWJzKGxlZnRbNl0gLSByaWdodFs2XSkgPD0gZXBzaWxvbiAmJlxyXG5cdFx0XHRcdE1hdGguYWJzKGxlZnRbN10gLSByaWdodFs3XSkgPD0gZXBzaWxvbiAmJlxyXG5cdFx0XHRcdE1hdGguYWJzKGxlZnRbOF0gLSByaWdodFs4XSkgPD0gZXBzaWxvbilcclxuXHRcdCk7XHJcblx0fVxyXG5cclxuXHRzdGF0aWMgSURFTlRJVFkgPSBPYmplY3QuZnJlZXplKG5ldyBNYXRyaXgzKDEuMCwgMC4wLCAwLjAsIDAuMCwgMS4wLCAwLjAsIDAuMCwgMC4wLCAxLjApKTtcclxuXHJcblx0c3RhdGljIFpFUk8gPSBPYmplY3QuZnJlZXplKG5ldyBNYXRyaXgzKDAuMCwgMC4wLCAwLjAsIDAuMCwgMC4wLCAwLjAsIDAuMCwgMC4wLCAwLjApKTtcclxuXHJcblx0Y2xvbmUocmVzdWx0OiBNYXRyaXgzKTogTWF0cml4MyB7XHJcblx0XHRyZXR1cm4gTWF0cml4My5jbG9uZSh0aGlzLCByZXN1bHQpO1xyXG5cdH1cclxuXHJcblx0ZXF1YWxzKHJpZ2h0OiBNYXRyaXgzKTogYm9vbGVhbiB7XHJcblx0XHRyZXR1cm4gTWF0cml4My5lcXVhbHModGhpcywgcmlnaHQpO1xyXG5cdH1cclxuXHJcblx0LyoqXHJcblx0ICogQHByaXZhdGVcclxuXHQgKi9cclxuXHRlcXVhbHNBcnJheShtYXRyaXg6IE1hdHJpeDMgfCBudW1iZXJbXSwgYXJyYXk6IG51bWJlcltdLCBvZmZzZXQ6IG51bWJlcik6IGJvb2xlYW4ge1xyXG5cdFx0cmV0dXJuIChcclxuXHRcdFx0bWF0cml4WzBdID09PSBhcnJheVtvZmZzZXRdICYmXHJcblx0XHRcdG1hdHJpeFsxXSA9PT0gYXJyYXlbb2Zmc2V0ICsgMV0gJiZcclxuXHRcdFx0bWF0cml4WzJdID09PSBhcnJheVtvZmZzZXQgKyAyXSAmJlxyXG5cdFx0XHRtYXRyaXhbM10gPT09IGFycmF5W29mZnNldCArIDNdICYmXHJcblx0XHRcdG1hdHJpeFs0XSA9PT0gYXJyYXlbb2Zmc2V0ICsgNF0gJiZcclxuXHRcdFx0bWF0cml4WzVdID09PSBhcnJheVtvZmZzZXQgKyA1XSAmJlxyXG5cdFx0XHRtYXRyaXhbNl0gPT09IGFycmF5W29mZnNldCArIDZdICYmXHJcblx0XHRcdG1hdHJpeFs3XSA9PT0gYXJyYXlbb2Zmc2V0ICsgN10gJiZcclxuXHRcdFx0bWF0cml4WzhdID09PSBhcnJheVtvZmZzZXQgKyA4XVxyXG5cdFx0KTtcclxuXHR9XHJcblxyXG5cdC8qKlxyXG5cdCAqIENvbXBhcmVzIHRoaXMgbWF0cml4IHRvIHRoZSBwcm92aWRlZCBtYXRyaXggY29tcG9uZW50d2lzZSBhbmQgcmV0dXJuc1xyXG5cdCAqIDxjb2RlPnRydWU8L2NvZGU+IGlmIHRoZXkgYXJlIHdpdGhpbiB0aGUgcHJvdmlkZWQgZXBzaWxvbixcclxuXHQgKiA8Y29kZT5mYWxzZTwvY29kZT4gb3RoZXJ3aXNlLlxyXG5cdCAqXHJcblx0ICogQHBhcmFtIHtNYXRyaXgzfSBbcmlnaHRdIFRoZSByaWdodCBoYW5kIHNpZGUgbWF0cml4LlxyXG5cdCAqIEBwYXJhbSB7TnVtYmVyfSBbZXBzaWxvbj0wXSBUaGUgZXBzaWxvbiB0byB1c2UgZm9yIGVxdWFsaXR5IHRlc3RpbmcuXHJcblx0ICogQHJldHVybnMge0Jvb2xlYW59IDxjb2RlPnRydWU8L2NvZGU+IGlmIHRoZXkgYXJlIHdpdGhpbiB0aGUgcHJvdmlkZWQgZXBzaWxvbiwgPGNvZGU+ZmFsc2U8L2NvZGU+IG90aGVyd2lzZS5cclxuXHQgKi9cclxuXHRlcXVhbHNFcHNpbG9uKHJpZ2h0LCBlcHNpbG9uKSB7XHJcblx0XHRyZXR1cm4gTWF0cml4My5lcXVhbHNFcHNpbG9uKHRoaXMsIHJpZ2h0LCBlcHNpbG9uKTtcclxuXHR9XHJcblxyXG5cdHRvU3RyaW5nKCkge1xyXG5cdFx0cmV0dXJuIChcclxuXHRcdFx0YCgke3RoaXNbMF19LCAke3RoaXNbM119LCAke3RoaXNbNl19KVxcbmAgK1xyXG5cdFx0XHRgKCR7dGhpc1sxXX0sICR7dGhpc1s0XX0sICR7dGhpc1s3XX0pXFxuYCArXHJcblx0XHRcdGAoJHt0aGlzWzJdfSwgJHt0aGlzWzVdfSwgJHt0aGlzWzhdfSlgXHJcblx0XHQpO1xyXG5cdH1cclxufVxyXG5cclxuY29uc3Qgc2NhbGVTY3JhdGNoMSA9IG5ldyBWZWN0b3IzKCk7XHJcbmNvbnN0IHNjYWxlU2NyYXRjaDIgPSBuZXcgVmVjdG9yMygpO1xyXG5jb25zdCBzY3JhdGNoQ29sdW1uID0gbmV3IFZlY3RvcjMoKTtcclxuY29uc3Qgc2NhbGVTY3JhdGNoMyA9IG5ldyBWZWN0b3IzKCk7XHJcbmNvbnN0IHNjYWxlU2NyYXRjaDQgPSBuZXcgVmVjdG9yMygpO1xyXG5jb25zdCBzY2FsZVNjcmF0Y2g1ID0gbmV3IFZlY3RvcjMoKTtcclxuXHJcbmZ1bmN0aW9uIGNvbXB1dGVGcm9iZW5pdXNOb3JtKG1hdHJpeCkge1xyXG5cdGxldCBub3JtID0gMC4wO1xyXG5cdGZvciAobGV0IGkgPSAwOyBpIDwgOTsgKytpKSB7XHJcblx0XHRjb25zdCB0ZW1wID0gbWF0cml4W2ldO1xyXG5cdFx0bm9ybSArPSB0ZW1wICogdGVtcDtcclxuXHR9XHJcblxyXG5cdHJldHVybiBNYXRoLnNxcnQobm9ybSk7XHJcbn1cclxuXHJcbmNvbnN0IHJvd1ZhbCA9IFsxLCAwLCAwXTtcclxuY29uc3QgY29sVmFsID0gWzIsIDIsIDFdO1xyXG5cclxuZnVuY3Rpb24gb2ZmRGlhZ29uYWxGcm9iZW5pdXNOb3JtKG1hdHJpeCkge1xyXG5cdC8vIENvbXB1dGVzIHRoZSBcIm9mZi1kaWFnb25hbFwiIEZyb2Jlbml1cyBub3JtLlxyXG5cdC8vIEFzc3VtZXMgbWF0cml4IGlzIHN5bW1ldHJpYy5cclxuXHJcblx0bGV0IG5vcm0gPSAwLjA7XHJcblx0Zm9yIChsZXQgaSA9IDA7IGkgPCAzOyArK2kpIHtcclxuXHRcdGNvbnN0IHRlbXAgPSBtYXRyaXhbTWF0cml4My5nZXRFbGVtZW50SW5kZXgoY29sVmFsW2ldLCByb3dWYWxbaV0pXTtcclxuXHRcdG5vcm0gKz0gMi4wICogdGVtcCAqIHRlbXA7XHJcblx0fVxyXG5cclxuXHRyZXR1cm4gTWF0aC5zcXJ0KG5vcm0pO1xyXG59XHJcblxyXG5mdW5jdGlvbiBzaHVyRGVjb21wb3NpdGlvbihtYXRyaXgsIHJlc3VsdCkge1xyXG5cdC8vIFRoaXMgcm91dGluZSB3YXMgY3JlYXRlZCBiYXNlZCB1cG9uIE1hdHJpeCBDb21wdXRhdGlvbnMsIDNyZCBlZC4sIGJ5IEdvbHViIGFuZCBWYW4gTG9hbixcclxuXHQvLyBzZWN0aW9uIDguNC4yIFRoZSAyYnkyIFN5bW1ldHJpYyBTY2h1ciBEZWNvbXBvc2l0aW9uLlxyXG5cdC8vXHJcblx0Ly8gVGhlIHJvdXRpbmUgdGFrZXMgYSBtYXRyaXgsIHdoaWNoIGlzIGFzc3VtZWQgdG8gYmUgc3ltbWV0cmljLCBhbmRcclxuXHQvLyBmaW5kcyB0aGUgbGFyZ2VzdCBvZmYtZGlhZ29uYWwgdGVybSwgYW5kIHRoZW4gY3JlYXRlc1xyXG5cdC8vIGEgbWF0cml4IChyZXN1bHQpIHdoaWNoIGNhbiBiZSB1c2VkIHRvIGhlbHAgcmVkdWNlIGl0XHJcblxyXG5cdGNvbnN0IHRvbGVyYW5jZSA9IEdNYXRoLkVQU0lMT04xNTtcclxuXHJcblx0bGV0IG1heERpYWdvbmFsID0gMC4wO1xyXG5cdGxldCByb3RBeGlzID0gMTtcclxuXHJcblx0Ly8gZmluZCBwaXZvdCAocm90QXhpcykgYmFzZWQgb24gbWF4IGRpYWdvbmFsIG9mIG1hdHJpeFxyXG5cdGZvciAobGV0IGkgPSAwOyBpIDwgMzsgKytpKSB7XHJcblx0XHRjb25zdCB0ZW1wID0gTWF0aC5hYnMobWF0cml4W01hdHJpeDMuZ2V0RWxlbWVudEluZGV4KGNvbFZhbFtpXSwgcm93VmFsW2ldKV0pO1xyXG5cdFx0aWYgKHRlbXAgPiBtYXhEaWFnb25hbCkge1xyXG5cdFx0XHRyb3RBeGlzID0gaTtcclxuXHRcdFx0bWF4RGlhZ29uYWwgPSB0ZW1wO1xyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0bGV0IGMgPSAxLjA7XHJcblx0bGV0IHMgPSAwLjA7XHJcblxyXG5cdGNvbnN0IHAgPSByb3dWYWxbcm90QXhpc107XHJcblx0Y29uc3QgcSA9IGNvbFZhbFtyb3RBeGlzXTtcclxuXHJcblx0aWYgKE1hdGguYWJzKG1hdHJpeFtNYXRyaXgzLmdldEVsZW1lbnRJbmRleChxLCBwKV0pID4gdG9sZXJhbmNlKSB7XHJcblx0XHRjb25zdCBxcSA9IG1hdHJpeFtNYXRyaXgzLmdldEVsZW1lbnRJbmRleChxLCBxKV07XHJcblx0XHRjb25zdCBwcCA9IG1hdHJpeFtNYXRyaXgzLmdldEVsZW1lbnRJbmRleChwLCBwKV07XHJcblx0XHRjb25zdCBxcCA9IG1hdHJpeFtNYXRyaXgzLmdldEVsZW1lbnRJbmRleChxLCBwKV07XHJcblxyXG5cdFx0Y29uc3QgdGF1ID0gKHFxIC0gcHApIC8gMi4wIC8gcXA7XHJcblx0XHRsZXQgdDtcclxuXHJcblx0XHRpZiAodGF1IDwgMC4wKSB7XHJcblx0XHRcdHQgPSAtMS4wIC8gKC10YXUgKyBNYXRoLnNxcnQoMS4wICsgdGF1ICogdGF1KSk7XHJcblx0XHR9IGVsc2Uge1xyXG5cdFx0XHR0ID0gMS4wIC8gKHRhdSArIE1hdGguc3FydCgxLjAgKyB0YXUgKiB0YXUpKTtcclxuXHRcdH1cclxuXHJcblx0XHRjID0gMS4wIC8gTWF0aC5zcXJ0KDEuMCArIHQgKiB0KTtcclxuXHRcdHMgPSB0ICogYztcclxuXHR9XHJcblxyXG5cdHJlc3VsdCA9IE1hdHJpeDMuY2xvbmUoTWF0cml4My5JREVOVElUWSwgcmVzdWx0KTtcclxuXHJcblx0cmVzdWx0W01hdHJpeDMuZ2V0RWxlbWVudEluZGV4KHAsIHApXSA9IHJlc3VsdFtNYXRyaXgzLmdldEVsZW1lbnRJbmRleChxLCBxKV0gPSBjO1xyXG5cdHJlc3VsdFtNYXRyaXgzLmdldEVsZW1lbnRJbmRleChxLCBwKV0gPSBzO1xyXG5cdHJlc3VsdFtNYXRyaXgzLmdldEVsZW1lbnRJbmRleChwLCBxKV0gPSAtcztcclxuXHJcblx0cmV0dXJuIHJlc3VsdDtcclxufVxyXG5jb25zdCBzY3JhdGNoVHJhbnNwb3NlTWF0cml4ID0gbmV3IE1hdHJpeDMoKTtcclxuZXhwb3J0IGRlZmF1bHQgTWF0cml4MztcclxuIiwiaW1wb3J0IHsgQXR0cmlidXRlIH0gZnJvbSBcIi4uL3JlbmRlci9BdHRyaWJ1dGVcIjtcclxuaW1wb3J0IGRlZmluZWQgZnJvbSBcIi4uL3V0aWxzL2RlZmluZWRcIjtcclxuaW1wb3J0IEdNYXRoIGZyb20gXCIuL01hdGhcIjtcclxuXHJcbmNsYXNzIFZlY3RvcjQge1xyXG5cdHB1YmxpYyBzdGF0aWMgWkVSTyA9IE9iamVjdC5mcmVlemUobmV3IFZlY3RvcjQoMC4wLCAwLjAsIDAuMCwgMC4wKSk7XHJcblxyXG5cdHB1YmxpYyBzdGF0aWMgT05FID0gT2JqZWN0LmZyZWV6ZShuZXcgVmVjdG9yNCgxLjAsIDEuMCwgMS4wLCAxLjApKTtcclxuXHJcblx0cHVibGljIHN0YXRpYyBVTklUX1ggPSBPYmplY3QuZnJlZXplKG5ldyBWZWN0b3I0KDEuMCwgMC4wLCAwLjAsIDAuMCkpO1xyXG5cclxuXHRwdWJsaWMgc3RhdGljIFVOSVRfWSA9IE9iamVjdC5mcmVlemUobmV3IFZlY3RvcjQoMC4wLCAxLjAsIDAuMCwgMC4wKSk7XHJcblxyXG5cdHB1YmxpYyBzdGF0aWMgVU5JVF9aID0gT2JqZWN0LmZyZWV6ZShuZXcgVmVjdG9yNCgwLjAsIDAuMCwgMS4wLCAwLjApKTtcclxuXHJcblx0cHVibGljIHN0YXRpYyBVTklUX1cgPSBPYmplY3QuZnJlZXplKG5ldyBWZWN0b3I0KDAuMCwgMC4wLCAwLjAsIDEuMCkpO1xyXG5cdHg6IG51bWJlcjtcclxuXHR5OiBudW1iZXI7XHJcblx0ejogbnVtYmVyO1xyXG5cdHc6IG51bWJlcjtcclxuXHRjb25zdHJ1Y3Rvcih4ID0gMCwgeSA9IDAsIHogPSAwLCB3ID0gMCkge1xyXG5cdFx0dGhpcy54ID0geDtcclxuXHRcdHRoaXMueSA9IHk7XHJcblx0XHR0aGlzLnogPSB6O1xyXG5cdFx0dGhpcy53ID0gdztcclxuXHR9XHJcblx0c2V0KHg6IG51bWJlciwgeTogbnVtYmVyLCB6OiBudW1iZXIsIHc6IG51bWJlcik6IHZvaWQge1xyXG5cdFx0dGhpcy54ID0geDtcclxuXHRcdHRoaXMueSA9IHk7XHJcblx0XHR0aGlzLnogPSB6O1xyXG5cdFx0dGhpcy53ID0gdztcclxuXHR9XHJcblx0dG9BcnJheSgpOiBudW1iZXJbXSB7XHJcblx0XHRyZXR1cm4gW3RoaXMueCwgdGhpcy55LCB0aGlzLnosIHRoaXMud107XHJcblx0fVxyXG5cclxuXHRjbG9uZShyZXN1bHQ6IFZlY3RvcjQpOiBWZWN0b3I0IHtcclxuXHRcdHJldHVybiBWZWN0b3I0LmNsb25lKHRoaXMsIHJlc3VsdCk7XHJcblx0fVxyXG5cclxuXHRlcXVhbHMocmlnaHQ6IFZlY3RvcjQpOiBib29sZWFuIHtcclxuXHRcdHJldHVybiBWZWN0b3I0LmVxdWFscyh0aGlzLCByaWdodCk7XHJcblx0fVxyXG5cclxuXHRlcXVhbHNFcHNpbG9uKHJpZ2h0OiBWZWN0b3I0LCByZWxhdGl2ZUVwc2lsb24gPSAwLCBhYnNvbHV0ZUVwc2lsb24gPSAwKTogYm9vbGVhbiB7XHJcblx0XHRyZXR1cm4gVmVjdG9yNC5lcXVhbHNFcHNpbG9uKHRoaXMsIHJpZ2h0LCByZWxhdGl2ZUVwc2lsb24sIGFic29sdXRlRXBzaWxvbik7XHJcblx0fVxyXG5cclxuXHR0b1N0cmluZygpOiBzdHJpbmcge1xyXG5cdFx0cmV0dXJuIGAoJHt0aGlzLnh9LCAke3RoaXMueX0sICR7dGhpcy56fSwgJHt0aGlzLnd9KWA7XHJcblx0fVxyXG5cdGZyb21CdWZmZXJBdHRyaWJ1dGUoYXR0cmlidXRlOiBBdHRyaWJ1dGUsIGluZGV4OiBudW1iZXIpOiBWZWN0b3I0IHtcclxuXHRcdHRoaXMueCA9IGF0dHJpYnV0ZS5nZXRYKGluZGV4KTtcclxuXHRcdHRoaXMueSA9IGF0dHJpYnV0ZS5nZXRZKGluZGV4KTtcclxuXHRcdHRoaXMueiA9IGF0dHJpYnV0ZS5nZXRaKGluZGV4KTtcclxuXHRcdHRoaXMudyA9IGF0dHJpYnV0ZS5nZXRXKGluZGV4KTtcclxuXHJcblx0XHRyZXR1cm4gdGhpcztcclxuXHR9XHJcblxyXG5cdHN0YXRpYyBmcm9tRWxlbWVudHMoeDogbnVtYmVyLCB5OiBudW1iZXIsIHo6IG51bWJlciwgdzogbnVtYmVyLCByZXN1bHQ6IFZlY3RvcjQpOiBWZWN0b3I0IHtcclxuXHRcdGlmICghZGVmaW5lZChyZXN1bHQpKSB7XHJcblx0XHRcdHJldHVybiBuZXcgVmVjdG9yNCh4LCB5LCB6LCB3KTtcclxuXHRcdH1cclxuXHJcblx0XHRyZXN1bHQueCA9IHg7XHJcblx0XHRyZXN1bHQueSA9IHk7XHJcblx0XHRyZXN1bHQueiA9IHo7XHJcblx0XHRyZXN1bHQudyA9IHc7XHJcblx0XHRyZXR1cm4gcmVzdWx0O1xyXG5cdH1cclxuXHJcblx0c3RhdGljIGNsb25lKGNhcnRlc2lhbjogVmVjdG9yNCwgcmVzdWx0OiBWZWN0b3I0KTogVmVjdG9yNCB7XHJcblx0XHRpZiAoIWRlZmluZWQoY2FydGVzaWFuKSkge1xyXG5cdFx0XHRyZXR1cm4gdW5kZWZpbmVkO1xyXG5cdFx0fVxyXG5cclxuXHRcdGlmICghZGVmaW5lZChyZXN1bHQpKSB7XHJcblx0XHRcdHJldHVybiBuZXcgVmVjdG9yNChjYXJ0ZXNpYW4ueCwgY2FydGVzaWFuLnksIGNhcnRlc2lhbi56LCBjYXJ0ZXNpYW4udyk7XHJcblx0XHR9XHJcblxyXG5cdFx0cmVzdWx0LnggPSBjYXJ0ZXNpYW4ueDtcclxuXHRcdHJlc3VsdC55ID0gY2FydGVzaWFuLnk7XHJcblx0XHRyZXN1bHQueiA9IGNhcnRlc2lhbi56O1xyXG5cdFx0cmVzdWx0LncgPSBjYXJ0ZXNpYW4udztcclxuXHRcdHJldHVybiByZXN1bHQ7XHJcblx0fVxyXG5cclxuXHRzdGF0aWMgbWF4aW11bUNvbXBvbmVudChjYXJ0ZXNpYW46IFZlY3RvcjQpOiBudW1iZXIge1xyXG5cdFx0cmV0dXJuIE1hdGgubWF4KGNhcnRlc2lhbi54LCBjYXJ0ZXNpYW4ueSwgY2FydGVzaWFuLnosIGNhcnRlc2lhbi53KTtcclxuXHR9XHJcblxyXG5cdHN0YXRpYyBtaW5pbXVtQ29tcG9uZW50KGNhcnRlc2lhbjogVmVjdG9yNCk6IG51bWJlciB7XHJcblx0XHRyZXR1cm4gTWF0aC5taW4oY2FydGVzaWFuLngsIGNhcnRlc2lhbi55LCBjYXJ0ZXNpYW4ueiwgY2FydGVzaWFuLncpO1xyXG5cdH1cclxuXHJcblx0c3RhdGljIG1pbmltdW1CeUNvbXBvbmVudChmaXJzdDogVmVjdG9yNCwgc2Vjb25kOiBWZWN0b3I0LCByZXN1bHQ6IFZlY3RvcjQpOiBWZWN0b3I0IHtcclxuXHRcdHJlc3VsdC54ID0gTWF0aC5taW4oZmlyc3QueCwgc2Vjb25kLngpO1xyXG5cdFx0cmVzdWx0LnkgPSBNYXRoLm1pbihmaXJzdC55LCBzZWNvbmQueSk7XHJcblx0XHRyZXN1bHQueiA9IE1hdGgubWluKGZpcnN0LnosIHNlY29uZC56KTtcclxuXHRcdHJlc3VsdC53ID0gTWF0aC5taW4oZmlyc3Qudywgc2Vjb25kLncpO1xyXG5cclxuXHRcdHJldHVybiByZXN1bHQ7XHJcblx0fVxyXG5cclxuXHRzdGF0aWMgbWF4aW11bUJ5Q29tcG9uZW50KGZpcnN0OiBWZWN0b3I0LCBzZWNvbmQ6IFZlY3RvcjQsIHJlc3VsdDogVmVjdG9yNCk6IFZlY3RvcjQge1xyXG5cdFx0cmVzdWx0LnggPSBNYXRoLm1heChmaXJzdC54LCBzZWNvbmQueCk7XHJcblx0XHRyZXN1bHQueSA9IE1hdGgubWF4KGZpcnN0LnksIHNlY29uZC55KTtcclxuXHRcdHJlc3VsdC56ID0gTWF0aC5tYXgoZmlyc3Queiwgc2Vjb25kLnopO1xyXG5cdFx0cmVzdWx0LncgPSBNYXRoLm1heChmaXJzdC53LCBzZWNvbmQudyk7XHJcblxyXG5cdFx0cmV0dXJuIHJlc3VsdDtcclxuXHR9XHJcblxyXG5cdHN0YXRpYyBjbGFtcCh2YWx1ZTogVmVjdG9yNCwgbWluOiBWZWN0b3I0LCBtYXg6IFZlY3RvcjQsIHJlc3VsdDogVmVjdG9yNCk6IFZlY3RvcjQge1xyXG5cdFx0Y29uc3QgeCA9IEdNYXRoLmNsYW1wKHZhbHVlLngsIG1pbi54LCBtYXgueCk7XHJcblx0XHRjb25zdCB5ID0gR01hdGguY2xhbXAodmFsdWUueSwgbWluLnksIG1heC55KTtcclxuXHRcdGNvbnN0IHogPSBHTWF0aC5jbGFtcCh2YWx1ZS56LCBtaW4ueiwgbWF4LnopO1xyXG5cdFx0Y29uc3QgdyA9IEdNYXRoLmNsYW1wKHZhbHVlLncsIG1pbi53LCBtYXgudyk7XHJcblxyXG5cdFx0cmVzdWx0LnggPSB4O1xyXG5cdFx0cmVzdWx0LnkgPSB5O1xyXG5cdFx0cmVzdWx0LnogPSB6O1xyXG5cdFx0cmVzdWx0LncgPSB3O1xyXG5cclxuXHRcdHJldHVybiByZXN1bHQ7XHJcblx0fVxyXG5cclxuXHRzdGF0aWMgbWFnbml0dWRlU3F1YXJlZChjYXJ0ZXNpYW46IFZlY3RvcjQpOiBudW1iZXIge1xyXG5cdFx0cmV0dXJuIChcclxuXHRcdFx0Y2FydGVzaWFuLnggKiBjYXJ0ZXNpYW4ueCArXHJcblx0XHRcdGNhcnRlc2lhbi55ICogY2FydGVzaWFuLnkgK1xyXG5cdFx0XHRjYXJ0ZXNpYW4ueiAqIGNhcnRlc2lhbi56ICtcclxuXHRcdFx0Y2FydGVzaWFuLncgKiBjYXJ0ZXNpYW4ud1xyXG5cdFx0KTtcclxuXHR9XHJcblxyXG5cdHN0YXRpYyBtYWduaXR1ZGUoY2FydGVzaWFuOiBWZWN0b3I0KTogbnVtYmVyIHtcclxuXHRcdHJldHVybiBNYXRoLnNxcnQoVmVjdG9yNC5tYWduaXR1ZGVTcXVhcmVkKGNhcnRlc2lhbikpO1xyXG5cdH1cclxuXHJcblx0c3RhdGljIGRpc3RhbmNlKGxlZnQ6IFZlY3RvcjQsIHJpZ2h0OiBWZWN0b3I0KTogbnVtYmVyIHtcclxuXHRcdFZlY3RvcjQuc3VidHJhY3QobGVmdCwgcmlnaHQsIGRpc3RhbmNlU2NyYXRjaCk7XHJcblx0XHRyZXR1cm4gVmVjdG9yNC5tYWduaXR1ZGUoZGlzdGFuY2VTY3JhdGNoKTtcclxuXHR9XHJcblxyXG5cdHN0YXRpYyBkaXN0YW5jZVNxdWFyZWQobGVmdDogVmVjdG9yNCwgcmlnaHQ6IFZlY3RvcjQpOiBudW1iZXIge1xyXG5cdFx0VmVjdG9yNC5zdWJ0cmFjdChsZWZ0LCByaWdodCwgZGlzdGFuY2VTY3JhdGNoKTtcclxuXHRcdHJldHVybiBWZWN0b3I0Lm1hZ25pdHVkZVNxdWFyZWQoZGlzdGFuY2VTY3JhdGNoKTtcclxuXHR9XHJcblxyXG5cdHN0YXRpYyBub3JtYWxpemUoY2FydGVzaWFuOiBWZWN0b3I0LCByZXN1bHQ6IFZlY3RvcjQpOiBWZWN0b3I0IHtcclxuXHRcdGNvbnN0IG1hZ25pdHVkZSA9IFZlY3RvcjQubWFnbml0dWRlKGNhcnRlc2lhbik7XHJcblxyXG5cdFx0cmVzdWx0LnggPSBjYXJ0ZXNpYW4ueCAvIG1hZ25pdHVkZTtcclxuXHRcdHJlc3VsdC55ID0gY2FydGVzaWFuLnkgLyBtYWduaXR1ZGU7XHJcblx0XHRyZXN1bHQueiA9IGNhcnRlc2lhbi56IC8gbWFnbml0dWRlO1xyXG5cdFx0cmVzdWx0LncgPSBjYXJ0ZXNpYW4udyAvIG1hZ25pdHVkZTtcclxuXHJcblx0XHQvLyA+PmluY2x1ZGVTdGFydCgnZGVidWcnLCBwcmFnbWFzLmRlYnVnKTtcclxuXHRcdGlmIChpc05hTihyZXN1bHQueCkgfHwgaXNOYU4ocmVzdWx0LnkpIHx8IGlzTmFOKHJlc3VsdC56KSB8fCBpc05hTihyZXN1bHQudykpIHtcclxuXHRcdFx0dGhyb3cgbmV3IEVycm9yKFwibm9ybWFsaXplZCByZXN1bHQgaXMgbm90IGEgbnVtYmVyXCIpO1xyXG5cdFx0fVxyXG5cdFx0Ly8gPj5pbmNsdWRlRW5kKCdkZWJ1ZycpO1xyXG5cclxuXHRcdHJldHVybiByZXN1bHQ7XHJcblx0fVxyXG5cclxuXHRzdGF0aWMgZG90KGxlZnQ6IFZlY3RvcjQsIHJpZ2h0OiBWZWN0b3I0KTogbnVtYmVyIHtcclxuXHRcdHJldHVybiBsZWZ0LnggKiByaWdodC54ICsgbGVmdC55ICogcmlnaHQueSArIGxlZnQueiAqIHJpZ2h0LnogKyBsZWZ0LncgKiByaWdodC53O1xyXG5cdH1cclxuXHJcblx0c3RhdGljIG11bHRpcGx5Q29tcG9uZW50cyhsZWZ0OiBWZWN0b3I0LCByaWdodDogVmVjdG9yNCwgcmVzdWx0OiBWZWN0b3I0KTogVmVjdG9yNCB7XHJcblx0XHRyZXN1bHQueCA9IGxlZnQueCAqIHJpZ2h0Lng7XHJcblx0XHRyZXN1bHQueSA9IGxlZnQueSAqIHJpZ2h0Lnk7XHJcblx0XHRyZXN1bHQueiA9IGxlZnQueiAqIHJpZ2h0Lno7XHJcblx0XHRyZXN1bHQudyA9IGxlZnQudyAqIHJpZ2h0Lnc7XHJcblx0XHRyZXR1cm4gcmVzdWx0O1xyXG5cdH1cclxuXHJcblx0c3RhdGljIGRpdmlkZUNvbXBvbmVudHMobGVmdDogVmVjdG9yNCwgcmlnaHQ6IFZlY3RvcjQsIHJlc3VsdDogVmVjdG9yNCk6IFZlY3RvcjQge1xyXG5cdFx0cmVzdWx0LnggPSBsZWZ0LnggLyByaWdodC54O1xyXG5cdFx0cmVzdWx0LnkgPSBsZWZ0LnkgLyByaWdodC55O1xyXG5cdFx0cmVzdWx0LnogPSBsZWZ0LnogLyByaWdodC56O1xyXG5cdFx0cmVzdWx0LncgPSBsZWZ0LncgLyByaWdodC53O1xyXG5cdFx0cmV0dXJuIHJlc3VsdDtcclxuXHR9XHJcblxyXG5cdHN0YXRpYyBhZGQobGVmdDogVmVjdG9yNCwgcmlnaHQ6IFZlY3RvcjQsIHJlc3VsdDogVmVjdG9yNCk6IFZlY3RvcjQge1xyXG5cdFx0cmVzdWx0LnggPSBsZWZ0LnggKyByaWdodC54O1xyXG5cdFx0cmVzdWx0LnkgPSBsZWZ0LnkgKyByaWdodC55O1xyXG5cdFx0cmVzdWx0LnogPSBsZWZ0LnogKyByaWdodC56O1xyXG5cdFx0cmVzdWx0LncgPSBsZWZ0LncgKyByaWdodC53O1xyXG5cdFx0cmV0dXJuIHJlc3VsdDtcclxuXHR9XHJcblxyXG5cdHN0YXRpYyBzdWJ0cmFjdChsZWZ0OiBWZWN0b3I0LCByaWdodDogVmVjdG9yNCwgcmVzdWx0OiBWZWN0b3I0KTogVmVjdG9yNCB7XHJcblx0XHRyZXN1bHQueCA9IGxlZnQueCAtIHJpZ2h0Lng7XHJcblx0XHRyZXN1bHQueSA9IGxlZnQueSAtIHJpZ2h0Lnk7XHJcblx0XHRyZXN1bHQueiA9IGxlZnQueiAtIHJpZ2h0Lno7XHJcblx0XHRyZXN1bHQudyA9IGxlZnQudyAtIHJpZ2h0Lnc7XHJcblx0XHRyZXR1cm4gcmVzdWx0O1xyXG5cdH1cclxuXHJcblx0c3RhdGljIG11bHRpcGx5QnlTY2FsYXIoY2FydGVzaWFuOiBWZWN0b3I0LCBzY2FsYXI6IG51bWJlciwgcmVzdWx0OiBWZWN0b3I0KTogVmVjdG9yNCB7XHJcblx0XHRyZXN1bHQueCA9IGNhcnRlc2lhbi54ICogc2NhbGFyO1xyXG5cdFx0cmVzdWx0LnkgPSBjYXJ0ZXNpYW4ueSAqIHNjYWxhcjtcclxuXHRcdHJlc3VsdC56ID0gY2FydGVzaWFuLnogKiBzY2FsYXI7XHJcblx0XHRyZXN1bHQudyA9IGNhcnRlc2lhbi53ICogc2NhbGFyO1xyXG5cdFx0cmV0dXJuIHJlc3VsdDtcclxuXHR9XHJcblxyXG5cdHN0YXRpYyBkaXZpZGVCeVNjYWxhcihjYXJ0ZXNpYW46IFZlY3RvcjQsIHNjYWxhcjogbnVtYmVyLCByZXN1bHQ6IFZlY3RvcjQpOiBWZWN0b3I0IHtcclxuXHRcdHJlc3VsdC54ID0gY2FydGVzaWFuLnggLyBzY2FsYXI7XHJcblx0XHRyZXN1bHQueSA9IGNhcnRlc2lhbi55IC8gc2NhbGFyO1xyXG5cdFx0cmVzdWx0LnogPSBjYXJ0ZXNpYW4ueiAvIHNjYWxhcjtcclxuXHRcdHJlc3VsdC53ID0gY2FydGVzaWFuLncgLyBzY2FsYXI7XHJcblx0XHRyZXR1cm4gcmVzdWx0O1xyXG5cdH1cclxuXHJcblx0c3RhdGljIG5lZ2F0ZShjYXJ0ZXNpYW46IFZlY3RvcjQsIHJlc3VsdDogVmVjdG9yNCk6IFZlY3RvcjQge1xyXG5cdFx0cmVzdWx0LnggPSAtY2FydGVzaWFuLng7XHJcblx0XHRyZXN1bHQueSA9IC1jYXJ0ZXNpYW4ueTtcclxuXHRcdHJlc3VsdC56ID0gLWNhcnRlc2lhbi56O1xyXG5cdFx0cmVzdWx0LncgPSAtY2FydGVzaWFuLnc7XHJcblx0XHRyZXR1cm4gcmVzdWx0O1xyXG5cdH1cclxuXHJcblx0c3RhdGljIGFicyhjYXJ0ZXNpYW46IFZlY3RvcjQsIHJlc3VsdDogVmVjdG9yNCk6IFZlY3RvcjQge1xyXG5cdFx0cmVzdWx0LnggPSBNYXRoLmFicyhjYXJ0ZXNpYW4ueCk7XHJcblx0XHRyZXN1bHQueSA9IE1hdGguYWJzKGNhcnRlc2lhbi55KTtcclxuXHRcdHJlc3VsdC56ID0gTWF0aC5hYnMoY2FydGVzaWFuLnopO1xyXG5cdFx0cmVzdWx0LncgPSBNYXRoLmFicyhjYXJ0ZXNpYW4udyk7XHJcblx0XHRyZXR1cm4gcmVzdWx0O1xyXG5cdH1cclxuXHJcblx0c3RhdGljIGxlcnAoc3RhcnQ6IFZlY3RvcjQsIGVuZDogVmVjdG9yNCwgdDogbnVtYmVyLCByZXN1bHQ6IFZlY3RvcjQpOiBWZWN0b3I0IHtcclxuXHRcdFZlY3RvcjQubXVsdGlwbHlCeVNjYWxhcihlbmQsIHQsIGxlcnBTY3JhdGNoKTtcclxuXHRcdHJlc3VsdCA9IFZlY3RvcjQubXVsdGlwbHlCeVNjYWxhcihzdGFydCwgMS4wIC0gdCwgcmVzdWx0KTtcclxuXHRcdHJldHVybiBWZWN0b3I0LmFkZChsZXJwU2NyYXRjaCwgcmVzdWx0LCByZXN1bHQpO1xyXG5cdH1cclxuXHJcblx0c3RhdGljIGVxdWFscyhsZWZ0OiBWZWN0b3I0LCByaWdodDogVmVjdG9yNCk6IGJvb2xlYW4ge1xyXG5cdFx0cmV0dXJuIChcclxuXHRcdFx0bGVmdCA9PT0gcmlnaHQgfHxcclxuXHRcdFx0KGRlZmluZWQobGVmdCkgJiZcclxuXHRcdFx0XHRkZWZpbmVkKHJpZ2h0KSAmJlxyXG5cdFx0XHRcdGxlZnQueCA9PT0gcmlnaHQueCAmJlxyXG5cdFx0XHRcdGxlZnQueSA9PT0gcmlnaHQueSAmJlxyXG5cdFx0XHRcdGxlZnQueiA9PT0gcmlnaHQueiAmJlxyXG5cdFx0XHRcdGxlZnQudyA9PT0gcmlnaHQudylcclxuXHRcdCk7XHJcblx0fVxyXG5cclxuXHRzdGF0aWMgZXF1YWxzQXJyYXkoY2FydGVzaWFuOiBWZWN0b3I0LCBhcnJheTogbnVtYmVyW10sIG9mZnNldDogbnVtYmVyKTogYm9vbGVhbiB7XHJcblx0XHRyZXR1cm4gKFxyXG5cdFx0XHRjYXJ0ZXNpYW4ueCA9PT0gYXJyYXlbb2Zmc2V0XSAmJlxyXG5cdFx0XHRjYXJ0ZXNpYW4ueSA9PT0gYXJyYXlbb2Zmc2V0ICsgMV0gJiZcclxuXHRcdFx0Y2FydGVzaWFuLnogPT09IGFycmF5W29mZnNldCArIDJdICYmXHJcblx0XHRcdGNhcnRlc2lhbi53ID09PSBhcnJheVtvZmZzZXQgKyAzXVxyXG5cdFx0KTtcclxuXHR9XHJcblxyXG5cdHN0YXRpYyBlcXVhbHNFcHNpbG9uKGxlZnQ6IFZlY3RvcjQsIHJpZ2h0OiBWZWN0b3I0LCByZWxhdGl2ZUVwc2lsb24gPSAwLCBhYnNvbHV0ZUVwc2lsb24gPSAwKTogYm9vbGVhbiB7XHJcblx0XHRyZXR1cm4gKFxyXG5cdFx0XHRsZWZ0ID09PSByaWdodCB8fFxyXG5cdFx0XHQoZGVmaW5lZChsZWZ0KSAmJlxyXG5cdFx0XHRcdGRlZmluZWQocmlnaHQpICYmXHJcblx0XHRcdFx0R01hdGguZXF1YWxzRXBzaWxvbihsZWZ0LngsIHJpZ2h0LngsIHJlbGF0aXZlRXBzaWxvbiwgYWJzb2x1dGVFcHNpbG9uKSAmJlxyXG5cdFx0XHRcdEdNYXRoLmVxdWFsc0Vwc2lsb24obGVmdC55LCByaWdodC55LCByZWxhdGl2ZUVwc2lsb24sIGFic29sdXRlRXBzaWxvbikgJiZcclxuXHRcdFx0XHRHTWF0aC5lcXVhbHNFcHNpbG9uKGxlZnQueiwgcmlnaHQueiwgcmVsYXRpdmVFcHNpbG9uLCBhYnNvbHV0ZUVwc2lsb24pICYmXHJcblx0XHRcdFx0R01hdGguZXF1YWxzRXBzaWxvbihsZWZ0LncsIHJpZ2h0LncsIHJlbGF0aXZlRXBzaWxvbiwgYWJzb2x1dGVFcHNpbG9uKSlcclxuXHRcdCk7XHJcblx0fVxyXG59XHJcblxyXG4vLyBzY3JhdGNoVThBcnJheSBhbmQgc2NyYXRjaEYzMkFycmF5IGFyZSB2aWV3cyBpbnRvIHRoZSBzYW1lIGJ1ZmZlclxyXG5jb25zdCBzY3JhdGNoRjMyQXJyYXkgPSBuZXcgRmxvYXQzMkFycmF5KDEpO1xyXG5jb25zdCBzY3JhdGNoVThBcnJheSA9IG5ldyBVaW50OEFycmF5KHNjcmF0Y2hGMzJBcnJheS5idWZmZXIpO1xyXG5cclxuY29uc3QgdGVzdFUzMiA9IG5ldyBVaW50MzJBcnJheShbMHgxMTIyMzM0NF0pO1xyXG5jb25zdCB0ZXN0VTggPSBuZXcgVWludDhBcnJheSh0ZXN0VTMyLmJ1ZmZlcik7XHJcbmNvbnN0IGxpdHRsZUVuZGlhbiA9IHRlc3RVOFswXSA9PT0gMHg0NDtcclxuY29uc3QgZGlzdGFuY2VTY3JhdGNoID0gbmV3IFZlY3RvcjQoKTtcclxuY29uc3QgbGVycFNjcmF0Y2ggPSBuZXcgVmVjdG9yNCgpO1xyXG5jb25zdCBtb3N0T3J0aG9nb25hbEF4aXNTY3JhdGNoID0gbmV3IFZlY3RvcjQoKTtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IFZlY3RvcjQ7XHJcbiIsImltcG9ydCBkZWZhdWx0VmFsdWUgZnJvbSBcIi4uL3V0aWxzL2RlZmF1bHRWYWx1ZVwiO1xyXG5pbXBvcnQgZGVmaW5lZCBmcm9tIFwiLi4vdXRpbHMvZGVmaW5lZFwiO1xyXG5pbXBvcnQgR01hdGggZnJvbSBcIi4vTWF0aFwiO1xyXG5pbXBvcnQgTWF0cml4MyBmcm9tIFwiLi9NYXRyaXgzXCI7XHJcbmltcG9ydCB7IFF1YXRlcm5pb24gfSBmcm9tIFwiLi9RdWF0ZXJuaW9uXCI7XHJcbmltcG9ydCBWZWN0b3IzIGZyb20gXCIuL1ZlY3RvcjNcIjtcclxuaW1wb3J0IFZlY3RvcjQgZnJvbSBcIi4vVmVjdG9yNFwiO1xyXG5jbGFzcyBNYXRyaXg0IHtcclxuXHRwdWJsaWMgc3RhdGljIElERU5USVRZID0gT2JqZWN0LmZyZWV6ZShcclxuXHRcdG5ldyBNYXRyaXg0KDEuMCwgMC4wLCAwLjAsIDAuMCwgMC4wLCAxLjAsIDAuMCwgMC4wLCAwLjAsIDAuMCwgMS4wLCAwLjAsIDAuMCwgMC4wLCAwLjAsIDEuMClcclxuXHQpO1xyXG5cdHB1YmxpYyBzdGF0aWMgWkVSTyA9IE9iamVjdC5mcmVlemUoXHJcblx0XHRuZXcgTWF0cml4NCgwLjAsIDAuMCwgMC4wLCAwLjAsIDAuMCwgMC4wLCAwLjAsIDAuMCwgMC4wLCAwLjAsIDAuMCwgMC4wLCAwLjAsIDAuMCwgMC4wLCAwLjApXHJcblx0KTtcclxuXHQvKipcclxuXHQgKiBBIDR4NCBtYXRyaXgsIGluZGV4YWJsZSBhcyBhIGNvbHVtbi1tYWpvciBvcmRlciBhcnJheS5cclxuXHQgKiBAcGFyYW0ge051bWJlcn0gW2NvbHVtbjBSb3cwPTAuMF0gVGhlIHZhbHVlIGZvciBjb2x1bW4gMCwgcm93IDAuXHJcblx0ICogQHBhcmFtIHtOdW1iZXJ9IFtjb2x1bW4xUm93MD0wLjBdIFRoZSB2YWx1ZSBmb3IgY29sdW1uIDEsIHJvdyAwLlxyXG5cdCAqIEBwYXJhbSB7TnVtYmVyfSBbY29sdW1uMlJvdzA9MC4wXSBUaGUgdmFsdWUgZm9yIGNvbHVtbiAyLCByb3cgMC5cclxuXHQgKiBAcGFyYW0ge051bWJlcn0gW2NvbHVtbjNSb3cwPTAuMF0gVGhlIHZhbHVlIGZvciBjb2x1bW4gMywgcm93IDAuXHJcblx0ICogQHBhcmFtIHtOdW1iZXJ9IFtjb2x1bW4wUm93MT0wLjBdIFRoZSB2YWx1ZSBmb3IgY29sdW1uIDAsIHJvdyAxLlxyXG5cdCAqIEBwYXJhbSB7TnVtYmVyfSBbY29sdW1uMVJvdzE9MC4wXSBUaGUgdmFsdWUgZm9yIGNvbHVtbiAxLCByb3cgMS5cclxuXHQgKiBAcGFyYW0ge051bWJlcn0gW2NvbHVtbjJSb3cxPTAuMF0gVGhlIHZhbHVlIGZvciBjb2x1bW4gMiwgcm93IDEuXHJcblx0ICogQHBhcmFtIHtOdW1iZXJ9IFtjb2x1bW4zUm93MT0wLjBdIFRoZSB2YWx1ZSBmb3IgY29sdW1uIDMsIHJvdyAxLlxyXG5cdCAqIEBwYXJhbSB7TnVtYmVyfSBbY29sdW1uMFJvdzI9MC4wXSBUaGUgdmFsdWUgZm9yIGNvbHVtbiAwLCByb3cgMi5cclxuXHQgKiBAcGFyYW0ge051bWJlcn0gW2NvbHVtbjFSb3cyPTAuMF0gVGhlIHZhbHVlIGZvciBjb2x1bW4gMSwgcm93IDIuXHJcblx0ICogQHBhcmFtIHtOdW1iZXJ9IFtjb2x1bW4yUm93Mj0wLjBdIFRoZSB2YWx1ZSBmb3IgY29sdW1uIDIsIHJvdyAyLlxyXG5cdCAqIEBwYXJhbSB7TnVtYmVyfSBbY29sdW1uM1JvdzI9MC4wXSBUaGUgdmFsdWUgZm9yIGNvbHVtbiAzLCByb3cgMi5cclxuXHQgKiBAcGFyYW0ge051bWJlcn0gW2NvbHVtbjBSb3czPTAuMF0gVGhlIHZhbHVlIGZvciBjb2x1bW4gMCwgcm93IDMuXHJcblx0ICogQHBhcmFtIHtOdW1iZXJ9IFtjb2x1bW4xUm93Mz0wLjBdIFRoZSB2YWx1ZSBmb3IgY29sdW1uIDEsIHJvdyAzLlxyXG5cdCAqIEBwYXJhbSB7TnVtYmVyfSBbY29sdW1uMlJvdzM9MC4wXSBUaGUgdmFsdWUgZm9yIGNvbHVtbiAyLCByb3cgMy5cclxuXHQgKiBAcGFyYW0ge051bWJlcn0gW2NvbHVtbjNSb3czPTAuMF0gVGhlIHZhbHVlIGZvciBjb2x1bW4gMywgcm93IDMuXHJcblx0ICovXHJcblx0Y29uc3RydWN0b3IoXHJcblx0XHRjb2x1bW4wUm93MCA9IDAsXHJcblx0XHRjb2x1bW4xUm93MCA9IDAsXHJcblx0XHRjb2x1bW4yUm93MCA9IDAsXHJcblx0XHRjb2x1bW4zUm93MCA9IDAsXHJcblx0XHRjb2x1bW4wUm93MSA9IDAsXHJcblx0XHRjb2x1bW4xUm93MSA9IDAsXHJcblx0XHRjb2x1bW4yUm93MSA9IDAsXHJcblx0XHRjb2x1bW4zUm93MSA9IDAsXHJcblx0XHRjb2x1bW4wUm93MiA9IDAsXHJcblx0XHRjb2x1bW4xUm93MiA9IDAsXHJcblx0XHRjb2x1bW4yUm93MiA9IDAsXHJcblx0XHRjb2x1bW4zUm93MiA9IDAsXHJcblx0XHRjb2x1bW4wUm93MyA9IDAsXHJcblx0XHRjb2x1bW4xUm93MyA9IDAsXHJcblx0XHRjb2x1bW4yUm93MyA9IDAsXHJcblx0XHRjb2x1bW4zUm93MyA9IDBcclxuXHQpIHtcclxuXHRcdHRoaXNbMF0gPSBjb2x1bW4wUm93MDtcclxuXHRcdHRoaXNbMV0gPSBjb2x1bW4wUm93MTtcclxuXHRcdHRoaXNbMl0gPSBjb2x1bW4wUm93MjtcclxuXHRcdHRoaXNbM10gPSBjb2x1bW4wUm93MztcclxuXHRcdHRoaXNbNF0gPSBjb2x1bW4xUm93MDtcclxuXHRcdHRoaXNbNV0gPSBjb2x1bW4xUm93MTtcclxuXHRcdHRoaXNbNl0gPSBjb2x1bW4xUm93MjtcclxuXHRcdHRoaXNbN10gPSBjb2x1bW4xUm93MztcclxuXHRcdHRoaXNbOF0gPSBjb2x1bW4yUm93MDtcclxuXHRcdHRoaXNbOV0gPSBjb2x1bW4yUm93MTtcclxuXHRcdHRoaXNbMTBdID0gY29sdW1uMlJvdzI7XHJcblx0XHR0aGlzWzExXSA9IGNvbHVtbjJSb3czO1xyXG5cdFx0dGhpc1sxMl0gPSBjb2x1bW4zUm93MDtcclxuXHRcdHRoaXNbMTNdID0gY29sdW1uM1JvdzE7XHJcblx0XHR0aGlzWzE0XSA9IGNvbHVtbjNSb3cyO1xyXG5cdFx0dGhpc1sxNV0gPSBjb2x1bW4zUm93MztcclxuXHR9XHJcblx0Ly8gPz8/P1xyXG5cdGNsb25lKHJlc3VsdDogTWF0cml4NCA9IG5ldyBNYXRyaXg0KCkpOiBNYXRyaXg0IHtcclxuXHRcdHJldHVybiBNYXRyaXg0LmNsb25lKHRoaXMsIHJlc3VsdCk7XHJcblx0fVxyXG5cdHNldChtYXQ0OiBNYXRyaXg0KSB7XHJcblx0XHRNYXRyaXg0LmNsb25lKG1hdDQsIHRoaXMpO1xyXG5cdFx0cmV0dXJuIHRoaXM7XHJcblx0fVxyXG5cdGVxdWFscyhyaWdodDogTWF0cml4NCk6IGJvb2xlYW4ge1xyXG5cdFx0cmV0dXJuIE1hdHJpeDQuZXF1YWxzKHRoaXMsIHJpZ2h0KTtcclxuXHR9XHJcblx0Y29tcG9zZShwb3NpdGlvbjogVmVjdG9yMywgcXVhdGVybmlvbjogUXVhdGVybmlvbiwgc2NhbGU6IFZlY3RvcjMpOiBNYXRyaXg0IHtcclxuXHRcdGNvbnN0IHRlID0gdGhpcztcclxuXHJcblx0XHRjb25zdCB4ID0gcXVhdGVybmlvbi54LFxyXG5cdFx0XHR5ID0gcXVhdGVybmlvbi55LFxyXG5cdFx0XHR6ID0gcXVhdGVybmlvbi56LFxyXG5cdFx0XHR3ID0gcXVhdGVybmlvbi53O1xyXG5cdFx0Y29uc3QgeDIgPSB4ICsgeCxcclxuXHRcdFx0eTIgPSB5ICsgeSxcclxuXHRcdFx0ejIgPSB6ICsgejtcclxuXHRcdGNvbnN0IHh4ID0geCAqIHgyLFxyXG5cdFx0XHR4eSA9IHggKiB5MixcclxuXHRcdFx0eHogPSB4ICogejI7XHJcblx0XHRjb25zdCB5eSA9IHkgKiB5MixcclxuXHRcdFx0eXogPSB5ICogejIsXHJcblx0XHRcdHp6ID0geiAqIHoyO1xyXG5cdFx0Y29uc3Qgd3ggPSB3ICogeDIsXHJcblx0XHRcdHd5ID0gdyAqIHkyLFxyXG5cdFx0XHR3eiA9IHcgKiB6MjtcclxuXHJcblx0XHRjb25zdCBzeCA9IHNjYWxlLngsXHJcblx0XHRcdHN5ID0gc2NhbGUueSxcclxuXHRcdFx0c3ogPSBzY2FsZS56O1xyXG5cclxuXHRcdHRlWzBdID0gKDEgLSAoeXkgKyB6eikpICogc3g7XHJcblx0XHR0ZVsxXSA9ICh4eSArIHd6KSAqIHN4O1xyXG5cdFx0dGVbMl0gPSAoeHogLSB3eSkgKiBzeDtcclxuXHRcdHRlWzNdID0gMDtcclxuXHJcblx0XHR0ZVs0XSA9ICh4eSAtIHd6KSAqIHN5O1xyXG5cdFx0dGVbNV0gPSAoMSAtICh4eCArIHp6KSkgKiBzeTtcclxuXHRcdHRlWzZdID0gKHl6ICsgd3gpICogc3k7XHJcblx0XHR0ZVs3XSA9IDA7XHJcblxyXG5cdFx0dGVbOF0gPSAoeHogKyB3eSkgKiBzejtcclxuXHRcdHRlWzldID0gKHl6IC0gd3gpICogc3o7XHJcblx0XHR0ZVsxMF0gPSAoMSAtICh4eCArIHl5KSkgKiBzejtcclxuXHRcdHRlWzExXSA9IDA7XHJcblxyXG5cdFx0dGVbMTJdID0gcG9zaXRpb24ueDtcclxuXHRcdHRlWzEzXSA9IHBvc2l0aW9uLnk7XHJcblx0XHR0ZVsxNF0gPSBwb3NpdGlvbi56O1xyXG5cdFx0dGVbMTVdID0gMTtcclxuXHJcblx0XHRyZXR1cm4gdGhpcztcclxuXHR9XHJcblx0ZXF1YWxzRXBzaWxvbihyaWdodDogTWF0cml4NCwgZXBzaWxvbiA9IDApOiBib29sZWFuIHtcclxuXHRcdHJldHVybiBNYXRyaXg0LmVxdWFsc0Vwc2lsb24odGhpcywgcmlnaHQsIGVwc2lsb24pO1xyXG5cdH1cclxuXHRsb29rQXQoZXllOiBWZWN0b3IzLCB0YXJnZXQ6IFZlY3RvcjMsIHVwOiBWZWN0b3IzKTogTWF0cml4NCB7XHJcblx0XHRjb25zdCBtYXRyaXggPSB0aGlzO1xyXG5cdFx0VmVjdG9yMy5zdWJ0cmFjdChleWUsIHRhcmdldCwgeik7XHJcblx0XHRpZiAoei5sZW5ndGgoKSA9PT0gMCkge1xyXG5cdFx0XHQvLyBleWUgYW5kIHRhcmdldCBhcmUgaW4gdGhlIHNhbWUgcG9zaXRpb25cclxuXHRcdFx0ei56ID0gMTtcclxuXHRcdH1cclxuXHRcdHoubm9ybWFsaXplKCk7XHJcblx0XHRWZWN0b3IzLmNyb3NzKHVwLCB6LCB4KTtcclxuXHRcdGlmICh4Lmxlbmd0aCgpID09PSAwKSB7XHJcblx0XHRcdC8vIHVwIGFuZCB6IGFyZSBwYXJhbGxlbFxyXG5cclxuXHRcdFx0aWYgKE1hdGguYWJzKHVwLnopID09PSAxKSB7XHJcblx0XHRcdFx0ei54ICs9IDAuMDAwMTtcclxuXHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHR6LnogKz0gMC4wMDAxO1xyXG5cdFx0XHR9XHJcblx0XHRcdHoubm9ybWFsaXplKCk7XHJcblx0XHRcdFZlY3RvcjMuY3Jvc3ModXAsIHosIHgpO1xyXG5cdFx0fVxyXG5cdFx0eC5ub3JtYWxpemUoKTtcclxuXHRcdFZlY3RvcjMuY3Jvc3MoeiwgeCwgeSk7XHJcblx0XHRtYXRyaXhbMF0gPSB4Lng7XHJcblx0XHRtYXRyaXhbNF0gPSB5Lng7XHJcblx0XHRtYXRyaXhbOF0gPSB6Lng7XHJcblx0XHRtYXRyaXhbMV0gPSB4Lnk7XHJcblx0XHRtYXRyaXhbNV0gPSB5Lnk7XHJcblx0XHRtYXRyaXhbOV0gPSB6Lnk7XHJcblx0XHRtYXRyaXhbMl0gPSB4Lno7XHJcblx0XHRtYXRyaXhbNl0gPSB5Lno7XHJcblx0XHRtYXRyaXhbMTBdID0gei56O1xyXG5cclxuXHRcdHJldHVybiB0aGlzO1xyXG5cdH1cclxuXHR0b1N0cmluZygpIHtcclxuXHRcdHJldHVybiAoXHJcblx0XHRcdGAoJHt0aGlzWzBdfSwgJHt0aGlzWzRdfSwgJHt0aGlzWzhdfSwgJHt0aGlzWzEyXX0pXFxuYCArXHJcblx0XHRcdGAoJHt0aGlzWzFdfSwgJHt0aGlzWzVdfSwgJHt0aGlzWzldfSwgJHt0aGlzWzEzXX0pXFxuYCArXHJcblx0XHRcdGAoJHt0aGlzWzJdfSwgJHt0aGlzWzZdfSwgJHt0aGlzWzEwXX0sICR7dGhpc1sxNF19KVxcbmAgK1xyXG5cdFx0XHRgKCR7dGhpc1szXX0sICR7dGhpc1s3XX0sICR7dGhpc1sxMV19LCAke3RoaXNbMTVdfSlgXHJcblx0XHQpO1xyXG5cdH1cclxuXHRzdGF0aWMgY2xvbmUobWF0cml4OiBNYXRyaXg0IHwgbnVtYmVyW10sIHJlc3VsdDogTWF0cml4NCk6IE1hdHJpeDQge1xyXG5cdFx0aWYgKCFkZWZpbmVkKG1hdHJpeCkpIHtcclxuXHRcdFx0cmV0dXJuIHVuZGVmaW5lZDtcclxuXHRcdH1cclxuXHRcdGlmICghZGVmaW5lZChyZXN1bHQpKSB7XHJcblx0XHRcdHJldHVybiBuZXcgTWF0cml4NChcclxuXHRcdFx0XHRtYXRyaXhbMF0sXHJcblx0XHRcdFx0bWF0cml4WzRdLFxyXG5cdFx0XHRcdG1hdHJpeFs4XSxcclxuXHRcdFx0XHRtYXRyaXhbMTJdLFxyXG5cdFx0XHRcdG1hdHJpeFsxXSxcclxuXHRcdFx0XHRtYXRyaXhbNV0sXHJcblx0XHRcdFx0bWF0cml4WzldLFxyXG5cdFx0XHRcdG1hdHJpeFsxM10sXHJcblx0XHRcdFx0bWF0cml4WzJdLFxyXG5cdFx0XHRcdG1hdHJpeFs2XSxcclxuXHRcdFx0XHRtYXRyaXhbMTBdLFxyXG5cdFx0XHRcdG1hdHJpeFsxNF0sXHJcblx0XHRcdFx0bWF0cml4WzNdLFxyXG5cdFx0XHRcdG1hdHJpeFs3XSxcclxuXHRcdFx0XHRtYXRyaXhbMTFdLFxyXG5cdFx0XHRcdG1hdHJpeFsxNV1cclxuXHRcdFx0KTtcclxuXHRcdH1cclxuXHRcdHJlc3VsdFswXSA9IG1hdHJpeFswXTtcclxuXHRcdHJlc3VsdFsxXSA9IG1hdHJpeFsxXTtcclxuXHRcdHJlc3VsdFsyXSA9IG1hdHJpeFsyXTtcclxuXHRcdHJlc3VsdFszXSA9IG1hdHJpeFszXTtcclxuXHRcdHJlc3VsdFs0XSA9IG1hdHJpeFs0XTtcclxuXHRcdHJlc3VsdFs1XSA9IG1hdHJpeFs1XTtcclxuXHRcdHJlc3VsdFs2XSA9IG1hdHJpeFs2XTtcclxuXHRcdHJlc3VsdFs3XSA9IG1hdHJpeFs3XTtcclxuXHRcdHJlc3VsdFs4XSA9IG1hdHJpeFs4XTtcclxuXHRcdHJlc3VsdFs5XSA9IG1hdHJpeFs5XTtcclxuXHRcdHJlc3VsdFsxMF0gPSBtYXRyaXhbMTBdO1xyXG5cdFx0cmVzdWx0WzExXSA9IG1hdHJpeFsxMV07XHJcblx0XHRyZXN1bHRbMTJdID0gbWF0cml4WzEyXTtcclxuXHRcdHJlc3VsdFsxM10gPSBtYXRyaXhbMTNdO1xyXG5cdFx0cmVzdWx0WzE0XSA9IG1hdHJpeFsxNF07XHJcblx0XHRyZXN1bHRbMTVdID0gbWF0cml4WzE1XTtcclxuXHRcdHJldHVybiByZXN1bHQ7XHJcblx0fVxyXG5cclxuXHRzdGF0aWMgZnJvbUNvbHVtbk1ham9yQXJyYXkodmFsdWVzOiBudW1iZXJbXSwgcmVzdWx0OiBNYXRyaXg0KTogTWF0cml4NCB7XHJcblx0XHRyZXR1cm4gTWF0cml4NC5jbG9uZSh2YWx1ZXMsIHJlc3VsdCk7XHJcblx0fVxyXG5cclxuXHRzdGF0aWMgZnJvbVJvd01ham9yQXJyYXkodmFsdWVzOiBudW1iZXJbXSwgcmVzdWx0OiBNYXRyaXg0KTogTWF0cml4NCB7XHJcblx0XHRpZiAoIWRlZmluZWQocmVzdWx0KSkge1xyXG5cdFx0XHRyZXR1cm4gbmV3IE1hdHJpeDQoXHJcblx0XHRcdFx0dmFsdWVzWzBdLFxyXG5cdFx0XHRcdHZhbHVlc1sxXSxcclxuXHRcdFx0XHR2YWx1ZXNbMl0sXHJcblx0XHRcdFx0dmFsdWVzWzNdLFxyXG5cdFx0XHRcdHZhbHVlc1s0XSxcclxuXHRcdFx0XHR2YWx1ZXNbNV0sXHJcblx0XHRcdFx0dmFsdWVzWzZdLFxyXG5cdFx0XHRcdHZhbHVlc1s3XSxcclxuXHRcdFx0XHR2YWx1ZXNbOF0sXHJcblx0XHRcdFx0dmFsdWVzWzldLFxyXG5cdFx0XHRcdHZhbHVlc1sxMF0sXHJcblx0XHRcdFx0dmFsdWVzWzExXSxcclxuXHRcdFx0XHR2YWx1ZXNbMTJdLFxyXG5cdFx0XHRcdHZhbHVlc1sxM10sXHJcblx0XHRcdFx0dmFsdWVzWzE0XSxcclxuXHRcdFx0XHR2YWx1ZXNbMTVdXHJcblx0XHRcdCk7XHJcblx0XHR9XHJcblx0XHRyZXN1bHRbMF0gPSB2YWx1ZXNbMF07XHJcblx0XHRyZXN1bHRbMV0gPSB2YWx1ZXNbNF07XHJcblx0XHRyZXN1bHRbMl0gPSB2YWx1ZXNbOF07XHJcblx0XHRyZXN1bHRbM10gPSB2YWx1ZXNbMTJdO1xyXG5cdFx0cmVzdWx0WzRdID0gdmFsdWVzWzFdO1xyXG5cdFx0cmVzdWx0WzVdID0gdmFsdWVzWzVdO1xyXG5cdFx0cmVzdWx0WzZdID0gdmFsdWVzWzldO1xyXG5cdFx0cmVzdWx0WzddID0gdmFsdWVzWzEzXTtcclxuXHRcdHJlc3VsdFs4XSA9IHZhbHVlc1syXTtcclxuXHRcdHJlc3VsdFs5XSA9IHZhbHVlc1s2XTtcclxuXHRcdHJlc3VsdFsxMF0gPSB2YWx1ZXNbMTBdO1xyXG5cdFx0cmVzdWx0WzExXSA9IHZhbHVlc1sxNF07XHJcblx0XHRyZXN1bHRbMTJdID0gdmFsdWVzWzNdO1xyXG5cdFx0cmVzdWx0WzEzXSA9IHZhbHVlc1s3XTtcclxuXHRcdHJlc3VsdFsxNF0gPSB2YWx1ZXNbMTFdO1xyXG5cdFx0cmVzdWx0WzE1XSA9IHZhbHVlc1sxNV07XHJcblx0XHRyZXR1cm4gcmVzdWx0O1xyXG5cdH1cclxuXHJcblx0c3RhdGljIGZyb21Sb3RhdGlvblRyYW5zbGF0aW9uKHJvdGF0aW9uOiBNYXRyaXgzLCB0cmFuc2xhdGlvbjogVmVjdG9yMywgcmVzdWx0OiBNYXRyaXg0KTogTWF0cml4NCB7XHJcblx0XHR0cmFuc2xhdGlvbiA9IGRlZmF1bHRWYWx1ZSh0cmFuc2xhdGlvbiwgVmVjdG9yMy5aRVJPKTtcclxuXHJcblx0XHRpZiAoIWRlZmluZWQocmVzdWx0KSkge1xyXG5cdFx0XHRyZXR1cm4gbmV3IE1hdHJpeDQoXHJcblx0XHRcdFx0cm90YXRpb25bMF0sXHJcblx0XHRcdFx0cm90YXRpb25bM10sXHJcblx0XHRcdFx0cm90YXRpb25bNl0sXHJcblx0XHRcdFx0dHJhbnNsYXRpb24ueCxcclxuXHRcdFx0XHRyb3RhdGlvblsxXSxcclxuXHRcdFx0XHRyb3RhdGlvbls0XSxcclxuXHRcdFx0XHRyb3RhdGlvbls3XSxcclxuXHRcdFx0XHR0cmFuc2xhdGlvbi55LFxyXG5cdFx0XHRcdHJvdGF0aW9uWzJdLFxyXG5cdFx0XHRcdHJvdGF0aW9uWzVdLFxyXG5cdFx0XHRcdHJvdGF0aW9uWzhdLFxyXG5cdFx0XHRcdHRyYW5zbGF0aW9uLnosXHJcblx0XHRcdFx0MC4wLFxyXG5cdFx0XHRcdDAuMCxcclxuXHRcdFx0XHQwLjAsXHJcblx0XHRcdFx0MS4wXHJcblx0XHRcdCk7XHJcblx0XHR9XHJcblxyXG5cdFx0cmVzdWx0WzBdID0gcm90YXRpb25bMF07XHJcblx0XHRyZXN1bHRbMV0gPSByb3RhdGlvblsxXTtcclxuXHRcdHJlc3VsdFsyXSA9IHJvdGF0aW9uWzJdO1xyXG5cdFx0cmVzdWx0WzNdID0gMC4wO1xyXG5cdFx0cmVzdWx0WzRdID0gcm90YXRpb25bM107XHJcblx0XHRyZXN1bHRbNV0gPSByb3RhdGlvbls0XTtcclxuXHRcdHJlc3VsdFs2XSA9IHJvdGF0aW9uWzVdO1xyXG5cdFx0cmVzdWx0WzddID0gMC4wO1xyXG5cdFx0cmVzdWx0WzhdID0gcm90YXRpb25bNl07XHJcblx0XHRyZXN1bHRbOV0gPSByb3RhdGlvbls3XTtcclxuXHRcdHJlc3VsdFsxMF0gPSByb3RhdGlvbls4XTtcclxuXHRcdHJlc3VsdFsxMV0gPSAwLjA7XHJcblx0XHRyZXN1bHRbMTJdID0gdHJhbnNsYXRpb24ueDtcclxuXHRcdHJlc3VsdFsxM10gPSB0cmFuc2xhdGlvbi55O1xyXG5cdFx0cmVzdWx0WzE0XSA9IHRyYW5zbGF0aW9uLno7XHJcblx0XHRyZXN1bHRbMTVdID0gMS4wO1xyXG5cdFx0cmV0dXJuIHJlc3VsdDtcclxuXHR9XHJcblxyXG5cdHN0YXRpYyBmcm9tVHJhbnNsYXRpb25RdWF0ZXJuaW9uUm90YXRpb25TY2FsZShcclxuXHRcdHRyYW5zbGF0aW9uOiBWZWN0b3IzLFxyXG5cdFx0cm90YXRpb246IFF1YXRlcm5pb24sXHJcblx0XHRzY2FsZTogVmVjdG9yMyxcclxuXHRcdHJlc3VsdDogTWF0cml4NFxyXG5cdCk6IE1hdHJpeDQge1xyXG5cdFx0aWYgKCFkZWZpbmVkKHJlc3VsdCkpIHtcclxuXHRcdFx0cmVzdWx0ID0gbmV3IE1hdHJpeDQoKTtcclxuXHRcdH1cclxuXHJcblx0XHRjb25zdCBzY2FsZVggPSBzY2FsZS54O1xyXG5cdFx0Y29uc3Qgc2NhbGVZID0gc2NhbGUueTtcclxuXHRcdGNvbnN0IHNjYWxlWiA9IHNjYWxlLno7XHJcblxyXG5cdFx0Y29uc3QgeDIgPSByb3RhdGlvbi54ICogcm90YXRpb24ueDtcclxuXHRcdGNvbnN0IHh5ID0gcm90YXRpb24ueCAqIHJvdGF0aW9uLnk7XHJcblx0XHRjb25zdCB4eiA9IHJvdGF0aW9uLnggKiByb3RhdGlvbi56O1xyXG5cdFx0Y29uc3QgeHcgPSByb3RhdGlvbi54ICogcm90YXRpb24udztcclxuXHRcdGNvbnN0IHkyID0gcm90YXRpb24ueSAqIHJvdGF0aW9uLnk7XHJcblx0XHRjb25zdCB5eiA9IHJvdGF0aW9uLnkgKiByb3RhdGlvbi56O1xyXG5cdFx0Y29uc3QgeXcgPSByb3RhdGlvbi55ICogcm90YXRpb24udztcclxuXHRcdGNvbnN0IHoyID0gcm90YXRpb24ueiAqIHJvdGF0aW9uLno7XHJcblx0XHRjb25zdCB6dyA9IHJvdGF0aW9uLnogKiByb3RhdGlvbi53O1xyXG5cdFx0Y29uc3QgdzIgPSByb3RhdGlvbi53ICogcm90YXRpb24udztcclxuXHJcblx0XHRjb25zdCBtMDAgPSB4MiAtIHkyIC0gejIgKyB3MjtcclxuXHRcdGNvbnN0IG0wMSA9IDIuMCAqICh4eSAtIHp3KTtcclxuXHRcdGNvbnN0IG0wMiA9IDIuMCAqICh4eiArIHl3KTtcclxuXHJcblx0XHRjb25zdCBtMTAgPSAyLjAgKiAoeHkgKyB6dyk7XHJcblx0XHRjb25zdCBtMTEgPSAteDIgKyB5MiAtIHoyICsgdzI7XHJcblx0XHRjb25zdCBtMTIgPSAyLjAgKiAoeXogLSB4dyk7XHJcblxyXG5cdFx0Y29uc3QgbTIwID0gMi4wICogKHh6IC0geXcpO1xyXG5cdFx0Y29uc3QgbTIxID0gMi4wICogKHl6ICsgeHcpO1xyXG5cdFx0Y29uc3QgbTIyID0gLXgyIC0geTIgKyB6MiArIHcyO1xyXG5cclxuXHRcdHJlc3VsdFswXSA9IG0wMCAqIHNjYWxlWDtcclxuXHRcdHJlc3VsdFsxXSA9IG0xMCAqIHNjYWxlWDtcclxuXHRcdHJlc3VsdFsyXSA9IG0yMCAqIHNjYWxlWDtcclxuXHRcdHJlc3VsdFszXSA9IDAuMDtcclxuXHRcdHJlc3VsdFs0XSA9IG0wMSAqIHNjYWxlWTtcclxuXHRcdHJlc3VsdFs1XSA9IG0xMSAqIHNjYWxlWTtcclxuXHRcdHJlc3VsdFs2XSA9IG0yMSAqIHNjYWxlWTtcclxuXHRcdHJlc3VsdFs3XSA9IDAuMDtcclxuXHRcdHJlc3VsdFs4XSA9IG0wMiAqIHNjYWxlWjtcclxuXHRcdHJlc3VsdFs5XSA9IG0xMiAqIHNjYWxlWjtcclxuXHRcdHJlc3VsdFsxMF0gPSBtMjIgKiBzY2FsZVo7XHJcblx0XHRyZXN1bHRbMTFdID0gMC4wO1xyXG5cdFx0cmVzdWx0WzEyXSA9IHRyYW5zbGF0aW9uLng7XHJcblx0XHRyZXN1bHRbMTNdID0gdHJhbnNsYXRpb24ueTtcclxuXHRcdHJlc3VsdFsxNF0gPSB0cmFuc2xhdGlvbi56O1xyXG5cdFx0cmVzdWx0WzE1XSA9IDEuMDtcclxuXHJcblx0XHRyZXR1cm4gcmVzdWx0O1xyXG5cdH1cclxuXHJcblx0c3RhdGljIGZyb21UcmFuc2xhdGlvblJvdGF0aW9uU2NhbGUoXHJcblx0XHR0cmFuc2xhdGlvblJvdGF0aW9uU2NhbGU6IHtcclxuXHRcdFx0dHJhbnNsYXRpb246IFZlY3RvcjM7XHJcblx0XHRcdHJvdGF0aW9uOiBRdWF0ZXJuaW9uO1xyXG5cdFx0XHRzY2FsZTogVmVjdG9yMztcclxuXHRcdH0sXHJcblx0XHRyZXN1bHQ6IE1hdHJpeDRcclxuXHQpOiBNYXRyaXg0IHtcclxuXHRcdHJldHVybiBNYXRyaXg0LmZyb21UcmFuc2xhdGlvblF1YXRlcm5pb25Sb3RhdGlvblNjYWxlKFxyXG5cdFx0XHR0cmFuc2xhdGlvblJvdGF0aW9uU2NhbGUudHJhbnNsYXRpb24sXHJcblx0XHRcdHRyYW5zbGF0aW9uUm90YXRpb25TY2FsZS5yb3RhdGlvbixcclxuXHRcdFx0dHJhbnNsYXRpb25Sb3RhdGlvblNjYWxlLnNjYWxlLFxyXG5cdFx0XHRyZXN1bHRcclxuXHRcdCk7XHJcblx0fVxyXG5cclxuXHRzdGF0aWMgZnJvbVRyYW5zbGF0aW9uKHRyYW5zbGF0aW9uOiBWZWN0b3IzLCByZXN1bHQ6IE1hdHJpeDQpOiBNYXRyaXg0IHtcclxuXHRcdHJldHVybiBNYXRyaXg0LmZyb21Sb3RhdGlvblRyYW5zbGF0aW9uKE1hdHJpeDMuSURFTlRJVFksIHRyYW5zbGF0aW9uLCByZXN1bHQpO1xyXG5cdH1cclxuXHJcblx0c3RhdGljIGZyb21TY2FsZShzY2FsZTogVmVjdG9yMywgcmVzdWx0OiBNYXRyaXg0KTogTWF0cml4NCB7XHJcblx0XHRpZiAoIWRlZmluZWQocmVzdWx0KSkge1xyXG5cdFx0XHRyZXR1cm4gbmV3IE1hdHJpeDQoXHJcblx0XHRcdFx0c2NhbGUueCxcclxuXHRcdFx0XHQwLjAsXHJcblx0XHRcdFx0MC4wLFxyXG5cdFx0XHRcdDAuMCxcclxuXHRcdFx0XHQwLjAsXHJcblx0XHRcdFx0c2NhbGUueSxcclxuXHRcdFx0XHQwLjAsXHJcblx0XHRcdFx0MC4wLFxyXG5cdFx0XHRcdDAuMCxcclxuXHRcdFx0XHQwLjAsXHJcblx0XHRcdFx0c2NhbGUueixcclxuXHRcdFx0XHQwLjAsXHJcblx0XHRcdFx0MC4wLFxyXG5cdFx0XHRcdDAuMCxcclxuXHRcdFx0XHQwLjAsXHJcblx0XHRcdFx0MS4wXHJcblx0XHRcdCk7XHJcblx0XHR9XHJcblxyXG5cdFx0cmVzdWx0WzBdID0gc2NhbGUueDtcclxuXHRcdHJlc3VsdFsxXSA9IDAuMDtcclxuXHRcdHJlc3VsdFsyXSA9IDAuMDtcclxuXHRcdHJlc3VsdFszXSA9IDAuMDtcclxuXHRcdHJlc3VsdFs0XSA9IDAuMDtcclxuXHRcdHJlc3VsdFs1XSA9IHNjYWxlLnk7XHJcblx0XHRyZXN1bHRbNl0gPSAwLjA7XHJcblx0XHRyZXN1bHRbN10gPSAwLjA7XHJcblx0XHRyZXN1bHRbOF0gPSAwLjA7XHJcblx0XHRyZXN1bHRbOV0gPSAwLjA7XHJcblx0XHRyZXN1bHRbMTBdID0gc2NhbGUuejtcclxuXHRcdHJlc3VsdFsxMV0gPSAwLjA7XHJcblx0XHRyZXN1bHRbMTJdID0gMC4wO1xyXG5cdFx0cmVzdWx0WzEzXSA9IDAuMDtcclxuXHRcdHJlc3VsdFsxNF0gPSAwLjA7XHJcblx0XHRyZXN1bHRbMTVdID0gMS4wO1xyXG5cdFx0cmV0dXJuIHJlc3VsdDtcclxuXHR9XHJcblxyXG5cdHN0YXRpYyBmcm9tUm90YXRpb24ocm90YXRpb246IE1hdHJpeDMsIHJlc3VsdDogTWF0cml4NCk6IE1hdHJpeDQge1xyXG5cdFx0aWYgKCFkZWZpbmVkKHJlc3VsdCkpIHtcclxuXHRcdFx0cmVzdWx0ID0gbmV3IE1hdHJpeDQoKTtcclxuXHRcdH1cclxuXHRcdHJlc3VsdFswXSA9IHJvdGF0aW9uWzBdO1xyXG5cdFx0cmVzdWx0WzFdID0gcm90YXRpb25bMV07XHJcblx0XHRyZXN1bHRbMl0gPSByb3RhdGlvblsyXTtcclxuXHRcdHJlc3VsdFszXSA9IDAuMDtcclxuXHJcblx0XHRyZXN1bHRbNF0gPSByb3RhdGlvblszXTtcclxuXHRcdHJlc3VsdFs1XSA9IHJvdGF0aW9uWzRdO1xyXG5cdFx0cmVzdWx0WzZdID0gcm90YXRpb25bNV07XHJcblx0XHRyZXN1bHRbN10gPSAwLjA7XHJcblxyXG5cdFx0cmVzdWx0WzhdID0gcm90YXRpb25bNl07XHJcblx0XHRyZXN1bHRbOV0gPSByb3RhdGlvbls3XTtcclxuXHRcdHJlc3VsdFsxMF0gPSByb3RhdGlvbls4XTtcclxuXHRcdHJlc3VsdFsxMV0gPSAwLjA7XHJcblxyXG5cdFx0cmVzdWx0WzEyXSA9IDAuMDtcclxuXHRcdHJlc3VsdFsxM10gPSAwLjA7XHJcblx0XHRyZXN1bHRbMTRdID0gMC4wO1xyXG5cdFx0cmVzdWx0WzE1XSA9IDEuMDtcclxuXHJcblx0XHRyZXR1cm4gcmVzdWx0O1xyXG5cdH1cclxuXHJcblx0c3RhdGljIG1ha2VQZXJzcGVjdGl2ZShcclxuXHRcdGxlZnQ6IG51bWJlcixcclxuXHRcdHJpZ2h0OiBudW1iZXIsXHJcblx0XHR0b3A6IG51bWJlcixcclxuXHRcdGJvdHRvbTogbnVtYmVyLFxyXG5cdFx0bmVhcjogbnVtYmVyLFxyXG5cdFx0ZmFyOiBudW1iZXJcclxuXHQpOiBNYXRyaXg0IHtcclxuXHRcdC8vIGZyb20gdGhyZWUuanNcclxuXHRcdGNvbnN0IG1hdHJpeCA9IG5ldyBNYXRyaXg0KCk7XHJcblx0XHRjb25zdCB4ID0gKDIgKiBuZWFyKSAvIChyaWdodCAtIGxlZnQpO1xyXG5cdFx0Y29uc3QgeSA9ICgyICogbmVhcikgLyAodG9wIC0gYm90dG9tKTtcclxuXHJcblx0XHRjb25zdCBhID0gKHJpZ2h0ICsgbGVmdCkgLyAocmlnaHQgLSBsZWZ0KTtcclxuXHRcdGNvbnN0IGIgPSAodG9wICsgYm90dG9tKSAvICh0b3AgLSBib3R0b20pO1xyXG5cdFx0Y29uc3QgYyA9IC1mYXIgLyAoZmFyIC0gbmVhcik7XHJcblx0XHRjb25zdCBkID0gKC1mYXIgKiBuZWFyKSAvIChmYXIgLSBuZWFyKTtcclxuXHJcblx0XHRtYXRyaXhbMF0gPSB4O1xyXG5cdFx0bWF0cml4WzRdID0gMDtcclxuXHRcdG1hdHJpeFs4XSA9IGE7XHJcblx0XHRtYXRyaXhbMTJdID0gMDtcclxuXHRcdG1hdHJpeFsxXSA9IDA7XHJcblx0XHRtYXRyaXhbNV0gPSB5O1xyXG5cdFx0bWF0cml4WzldID0gYjtcclxuXHRcdG1hdHJpeFsxM10gPSAwO1xyXG5cdFx0bWF0cml4WzJdID0gMDtcclxuXHRcdG1hdHJpeFs2XSA9IDA7XHJcblx0XHRtYXRyaXhbMTBdID0gYztcclxuXHRcdG1hdHJpeFsxNF0gPSBkO1xyXG5cdFx0bWF0cml4WzNdID0gMDtcclxuXHRcdG1hdHJpeFs3XSA9IDA7XHJcblx0XHRtYXRyaXhbMTFdID0gLTE7XHJcblx0XHRtYXRyaXhbMTVdID0gMDtcclxuXHRcdHJldHVybiBtYXRyaXg7XHJcblx0fVxyXG5cdHN0YXRpYyBtYWtlT3J0aG9ncmFwaGljKFxyXG5cdFx0bGVmdDogbnVtYmVyLFxyXG5cdFx0cmlnaHQ6IG51bWJlcixcclxuXHRcdHRvcDogbnVtYmVyLFxyXG5cdFx0Ym90dG9tOiBudW1iZXIsXHJcblx0XHRuZWFyOiBudW1iZXIsXHJcblx0XHRmYXI6IG51bWJlclxyXG5cdCk6IE1hdHJpeDQge1xyXG5cdFx0Y29uc3QgbWF0cml4ID0gbmV3IE1hdHJpeDQoKTtcclxuXHRcdGNvbnN0IHcgPSAxLjAgLyAocmlnaHQgLSBsZWZ0KTtcclxuXHRcdGNvbnN0IGggPSAxLjAgLyAodG9wIC0gYm90dG9tKTtcclxuXHRcdGNvbnN0IHAgPSAxLjAgLyAoZmFyIC0gbmVhcik7XHJcblxyXG5cdFx0Y29uc3QgeCA9IChyaWdodCArIGxlZnQpICogdztcclxuXHRcdGNvbnN0IHkgPSAodG9wICsgYm90dG9tKSAqIGg7XHJcblx0XHRjb25zdCB6ID0gbmVhciAqIHA7XHJcblxyXG5cdFx0bWF0cml4WzBdID0gMiAqIHc7XHJcblx0XHRtYXRyaXhbNF0gPSAwO1xyXG5cdFx0bWF0cml4WzhdID0gMDtcclxuXHRcdG1hdHJpeFsxMl0gPSAteDtcclxuXHRcdG1hdHJpeFsxXSA9IDA7XHJcblx0XHRtYXRyaXhbNV0gPSAyICogaDtcclxuXHRcdG1hdHJpeFs5XSA9IDA7XHJcblx0XHRtYXRyaXhbMTNdID0gLXk7XHJcblx0XHRtYXRyaXhbMl0gPSAwO1xyXG5cdFx0bWF0cml4WzZdID0gMDtcclxuXHRcdG1hdHJpeFsxMF0gPSAtMSAqIHA7XHJcblx0XHRtYXRyaXhbMTRdID0gLXo7XHJcblx0XHRtYXRyaXhbM10gPSAwO1xyXG5cdFx0bWF0cml4WzddID0gMDtcclxuXHRcdG1hdHJpeFsxMV0gPSAwO1xyXG5cdFx0bWF0cml4WzE1XSA9IDE7XHJcblx0XHRyZXR1cm4gbWF0cml4O1xyXG5cdH1cclxuXHR0b0FycmF5KCkge1xyXG5cdFx0Y29uc3QgcmVzdWx0ID0gW107XHJcblx0XHRNYXRyaXg0LnRvQXJyYXkodGhpcywgcmVzdWx0KTtcclxuXHRcdHJldHVybiByZXN1bHQ7XHJcblx0fVxyXG5cdC8qKlxyXG5cdCAqIENvbXB1dGVzIGFuIEFycmF5IGZyb20gdGhlIHByb3ZpZGVkIE1hdHJpeDQgaW5zdGFuY2UuXHJcblx0ICogVGhlIGFycmF5IHdpbGwgYmUgaW4gY29sdW1uLW1ham9yIG9yZGVyLlxyXG5cdCAqIEBleGFtcGxlXHJcblx0ICogLy9jcmVhdGUgYW4gYXJyYXkgZnJvbSBhbiBpbnN0YW5jZSBvZiBNYXRyaXg0XHJcblx0ICogLy8gbSA9IFsxMC4wLCAxNC4wLCAxOC4wLCAyMi4wXVxyXG5cdCAqIC8vICAgICBbMTEuMCwgMTUuMCwgMTkuMCwgMjMuMF1cclxuXHQgKiAvLyAgICAgWzEyLjAsIDE2LjAsIDIwLjAsIDI0LjBdXHJcblx0ICogLy8gICAgIFsxMy4wLCAxNy4wLCAyMS4wLCAyNS4wXVxyXG5cdCAqIGNvbnN0IGEgPSBNYXRyaXg0LnRvQXJyYXkobSk7XHJcblx0ICpcclxuXHQgKiAvLyBtIHJlbWFpbnMgdGhlIHNhbWVcclxuXHQgKiAvL2NyZWF0ZXMgYSA9IFsxMC4wLCAxMS4wLCAxMi4wLCAxMy4wLCAxNC4wLCAxNS4wLCAxNi4wLCAxNy4wLCAxOC4wLCAxOS4wLCAyMC4wLCAyMS4wLCAyMi4wLCAyMy4wLCAyNC4wLCAyNS4wXVxyXG5cdCAqL1xyXG5cdHN0YXRpYyB0b0FycmF5KG1hdHJpeDogQXJyYXk8bnVtYmVyPiB8IE1hdHJpeDQsIHJlc3VsdDogQXJyYXk8bnVtYmVyPik6IEFycmF5PG51bWJlcj4ge1xyXG5cdFx0aWYgKCFkZWZpbmVkKHJlc3VsdCkpIHtcclxuXHRcdFx0cmV0dXJuIFtcclxuXHRcdFx0XHRtYXRyaXhbMF0sXHJcblx0XHRcdFx0bWF0cml4WzFdLFxyXG5cdFx0XHRcdG1hdHJpeFsyXSxcclxuXHRcdFx0XHRtYXRyaXhbM10sXHJcblx0XHRcdFx0bWF0cml4WzRdLFxyXG5cdFx0XHRcdG1hdHJpeFs1XSxcclxuXHRcdFx0XHRtYXRyaXhbNl0sXHJcblx0XHRcdFx0bWF0cml4WzddLFxyXG5cdFx0XHRcdG1hdHJpeFs4XSxcclxuXHRcdFx0XHRtYXRyaXhbOV0sXHJcblx0XHRcdFx0bWF0cml4WzEwXSxcclxuXHRcdFx0XHRtYXRyaXhbMTFdLFxyXG5cdFx0XHRcdG1hdHJpeFsxMl0sXHJcblx0XHRcdFx0bWF0cml4WzEzXSxcclxuXHRcdFx0XHRtYXRyaXhbMTRdLFxyXG5cdFx0XHRcdG1hdHJpeFsxNV1cclxuXHRcdFx0XTtcclxuXHRcdH1cclxuXHRcdHJlc3VsdFswXSA9IG1hdHJpeFswXTtcclxuXHRcdHJlc3VsdFsxXSA9IG1hdHJpeFsxXTtcclxuXHRcdHJlc3VsdFsyXSA9IG1hdHJpeFsyXTtcclxuXHRcdHJlc3VsdFszXSA9IG1hdHJpeFszXTtcclxuXHRcdHJlc3VsdFs0XSA9IG1hdHJpeFs0XTtcclxuXHRcdHJlc3VsdFs1XSA9IG1hdHJpeFs1XTtcclxuXHRcdHJlc3VsdFs2XSA9IG1hdHJpeFs2XTtcclxuXHRcdHJlc3VsdFs3XSA9IG1hdHJpeFs3XTtcclxuXHRcdHJlc3VsdFs4XSA9IG1hdHJpeFs4XTtcclxuXHRcdHJlc3VsdFs5XSA9IG1hdHJpeFs5XTtcclxuXHRcdHJlc3VsdFsxMF0gPSBtYXRyaXhbMTBdO1xyXG5cdFx0cmVzdWx0WzExXSA9IG1hdHJpeFsxMV07XHJcblx0XHRyZXN1bHRbMTJdID0gbWF0cml4WzEyXTtcclxuXHRcdHJlc3VsdFsxM10gPSBtYXRyaXhbMTNdO1xyXG5cdFx0cmVzdWx0WzE0XSA9IG1hdHJpeFsxNF07XHJcblx0XHRyZXN1bHRbMTVdID0gbWF0cml4WzE1XTtcclxuXHRcdHJldHVybiByZXN1bHQ7XHJcblx0fVxyXG5cclxuXHRzdGF0aWMgZ2V0RWxlbWVudEluZGV4KGNvbHVtbjogbnVtYmVyLCByb3c6IG51bWJlcik6IG51bWJlciB7XHJcblx0XHRyZXR1cm4gY29sdW1uICogNCArIHJvdztcclxuXHR9XHJcblxyXG5cdHN0YXRpYyBnZXRDb2x1bW4obWF0cml4OiBNYXRyaXg0LCBpbmRleDogbnVtYmVyLCByZXN1bHQ6IFZlY3RvcjQpOiBWZWN0b3I0IHtcclxuXHRcdGNvbnN0IHN0YXJ0SW5kZXggPSBpbmRleCAqIDQ7XHJcblx0XHRjb25zdCB4ID0gbWF0cml4W3N0YXJ0SW5kZXhdO1xyXG5cdFx0Y29uc3QgeSA9IG1hdHJpeFtzdGFydEluZGV4ICsgMV07XHJcblx0XHRjb25zdCB6ID0gbWF0cml4W3N0YXJ0SW5kZXggKyAyXTtcclxuXHRcdGNvbnN0IHcgPSBtYXRyaXhbc3RhcnRJbmRleCArIDNdO1xyXG5cclxuXHRcdHJlc3VsdC54ID0geDtcclxuXHRcdHJlc3VsdC55ID0geTtcclxuXHRcdHJlc3VsdC56ID0gejtcclxuXHRcdHJlc3VsdC53ID0gdztcclxuXHRcdHJldHVybiByZXN1bHQ7XHJcblx0fVxyXG5cclxuXHRzdGF0aWMgc2V0Q29sdW1uKG1hdHJpeDogTWF0cml4NCwgaW5kZXg6IG51bWJlciwgY2FydGVzaWFuOiBWZWN0b3I0LCByZXN1bHQ6IE1hdHJpeDQpOiBNYXRyaXg0IHtcclxuXHRcdHJlc3VsdCA9IE1hdHJpeDQuY2xvbmUobWF0cml4LCByZXN1bHQpO1xyXG5cdFx0Y29uc3Qgc3RhcnRJbmRleCA9IGluZGV4ICogNDtcclxuXHRcdHJlc3VsdFtzdGFydEluZGV4XSA9IGNhcnRlc2lhbi54O1xyXG5cdFx0cmVzdWx0W3N0YXJ0SW5kZXggKyAxXSA9IGNhcnRlc2lhbi55O1xyXG5cdFx0cmVzdWx0W3N0YXJ0SW5kZXggKyAyXSA9IGNhcnRlc2lhbi56O1xyXG5cdFx0cmVzdWx0W3N0YXJ0SW5kZXggKyAzXSA9IGNhcnRlc2lhbi53O1xyXG5cdFx0cmV0dXJuIHJlc3VsdDtcclxuXHR9XHJcblxyXG5cdHN0YXRpYyBnZXRSb3cobWF0cml4OiBNYXRyaXg0LCBpbmRleDogbnVtYmVyLCByZXN1bHQ6IFZlY3RvcjQpOiBWZWN0b3I0IHtcclxuXHRcdGNvbnN0IHggPSBtYXRyaXhbaW5kZXhdO1xyXG5cdFx0Y29uc3QgeSA9IG1hdHJpeFtpbmRleCArIDRdO1xyXG5cdFx0Y29uc3QgeiA9IG1hdHJpeFtpbmRleCArIDhdO1xyXG5cdFx0Y29uc3QgdyA9IG1hdHJpeFtpbmRleCArIDEyXTtcclxuXHJcblx0XHRyZXN1bHQueCA9IHg7XHJcblx0XHRyZXN1bHQueSA9IHk7XHJcblx0XHRyZXN1bHQueiA9IHo7XHJcblx0XHRyZXN1bHQudyA9IHc7XHJcblx0XHRyZXR1cm4gcmVzdWx0O1xyXG5cdH1cclxuXHJcblx0c3RhdGljIHNldFJvdyhtYXRyaXg6IE1hdHJpeDQsIGluZGV4OiBudW1iZXIsIGNhcnRlc2lhbjogVmVjdG9yNCwgcmVzdWx0OiBNYXRyaXg0KTogTWF0cml4NCB7XHJcblx0XHRyZXN1bHQgPSBNYXRyaXg0LmNsb25lKG1hdHJpeCwgcmVzdWx0KTtcclxuXHRcdHJlc3VsdFtpbmRleF0gPSBjYXJ0ZXNpYW4ueDtcclxuXHRcdHJlc3VsdFtpbmRleCArIDRdID0gY2FydGVzaWFuLnk7XHJcblx0XHRyZXN1bHRbaW5kZXggKyA4XSA9IGNhcnRlc2lhbi56O1xyXG5cdFx0cmVzdWx0W2luZGV4ICsgMTJdID0gY2FydGVzaWFuLnc7XHJcblx0XHRyZXR1cm4gcmVzdWx0O1xyXG5cdH1cclxuXHJcblx0c3RhdGljIHNldFRyYW5zbGF0aW9uKG1hdHJpeDogTWF0cml4NCwgdHJhbnNsYXRpb246IFZlY3RvcjMsIHJlc3VsdDogTWF0cml4NCk6IE1hdHJpeDQge1xyXG5cdFx0cmVzdWx0WzBdID0gbWF0cml4WzBdO1xyXG5cdFx0cmVzdWx0WzFdID0gbWF0cml4WzFdO1xyXG5cdFx0cmVzdWx0WzJdID0gbWF0cml4WzJdO1xyXG5cdFx0cmVzdWx0WzNdID0gbWF0cml4WzNdO1xyXG5cclxuXHRcdHJlc3VsdFs0XSA9IG1hdHJpeFs0XTtcclxuXHRcdHJlc3VsdFs1XSA9IG1hdHJpeFs1XTtcclxuXHRcdHJlc3VsdFs2XSA9IG1hdHJpeFs2XTtcclxuXHRcdHJlc3VsdFs3XSA9IG1hdHJpeFs3XTtcclxuXHJcblx0XHRyZXN1bHRbOF0gPSBtYXRyaXhbOF07XHJcblx0XHRyZXN1bHRbOV0gPSBtYXRyaXhbOV07XHJcblx0XHRyZXN1bHRbMTBdID0gbWF0cml4WzEwXTtcclxuXHRcdHJlc3VsdFsxMV0gPSBtYXRyaXhbMTFdO1xyXG5cclxuXHRcdHJlc3VsdFsxMl0gPSB0cmFuc2xhdGlvbi54O1xyXG5cdFx0cmVzdWx0WzEzXSA9IHRyYW5zbGF0aW9uLnk7XHJcblx0XHRyZXN1bHRbMTRdID0gdHJhbnNsYXRpb24uejtcclxuXHRcdHJlc3VsdFsxNV0gPSBtYXRyaXhbMTVdO1xyXG5cclxuXHRcdHJldHVybiByZXN1bHQ7XHJcblx0fVxyXG5cclxuXHRzdGF0aWMgc2V0U2NhbGUobWF0cml4OiBNYXRyaXg0LCBzY2FsZTogVmVjdG9yMywgcmVzdWx0OiBNYXRyaXg0KTogTWF0cml4NCB7XHJcblx0XHRjb25zdCBleGlzdGluZ1NjYWxlID0gTWF0cml4NC5nZXRTY2FsZShtYXRyaXgsIHNjYWxlU2NyYXRjaDEpO1xyXG5cdFx0Y29uc3Qgc2NhbGVSYXRpb1ggPSBzY2FsZS54IC8gZXhpc3RpbmdTY2FsZS54O1xyXG5cdFx0Y29uc3Qgc2NhbGVSYXRpb1kgPSBzY2FsZS55IC8gZXhpc3RpbmdTY2FsZS55O1xyXG5cdFx0Y29uc3Qgc2NhbGVSYXRpb1ogPSBzY2FsZS56IC8gZXhpc3RpbmdTY2FsZS56O1xyXG5cclxuXHRcdHJlc3VsdFswXSA9IG1hdHJpeFswXSAqIHNjYWxlUmF0aW9YO1xyXG5cdFx0cmVzdWx0WzFdID0gbWF0cml4WzFdICogc2NhbGVSYXRpb1g7XHJcblx0XHRyZXN1bHRbMl0gPSBtYXRyaXhbMl0gKiBzY2FsZVJhdGlvWDtcclxuXHRcdHJlc3VsdFszXSA9IG1hdHJpeFszXTtcclxuXHJcblx0XHRyZXN1bHRbNF0gPSBtYXRyaXhbNF0gKiBzY2FsZVJhdGlvWTtcclxuXHRcdHJlc3VsdFs1XSA9IG1hdHJpeFs1XSAqIHNjYWxlUmF0aW9ZO1xyXG5cdFx0cmVzdWx0WzZdID0gbWF0cml4WzZdICogc2NhbGVSYXRpb1k7XHJcblx0XHRyZXN1bHRbN10gPSBtYXRyaXhbN107XHJcblxyXG5cdFx0cmVzdWx0WzhdID0gbWF0cml4WzhdICogc2NhbGVSYXRpb1o7XHJcblx0XHRyZXN1bHRbOV0gPSBtYXRyaXhbOV0gKiBzY2FsZVJhdGlvWjtcclxuXHRcdHJlc3VsdFsxMF0gPSBtYXRyaXhbMTBdICogc2NhbGVSYXRpb1o7XHJcblx0XHRyZXN1bHRbMTFdID0gbWF0cml4WzExXTtcclxuXHJcblx0XHRyZXN1bHRbMTJdID0gbWF0cml4WzEyXTtcclxuXHRcdHJlc3VsdFsxM10gPSBtYXRyaXhbMTNdO1xyXG5cdFx0cmVzdWx0WzE0XSA9IG1hdHJpeFsxNF07XHJcblx0XHRyZXN1bHRbMTVdID0gbWF0cml4WzE1XTtcclxuXHJcblx0XHRyZXR1cm4gcmVzdWx0O1xyXG5cdH1cclxuXHJcblx0c3RhdGljIGdldFNjYWxlKG1hdHJpeDogTWF0cml4NCwgcmVzdWx0OiBWZWN0b3IzKTogVmVjdG9yMyB7XHJcblx0XHRyZXN1bHQueCA9IFZlY3RvcjMubWFnbml0dWRlKFZlY3RvcjMuZnJvbUVsZW1lbnRzKG1hdHJpeFswXSwgbWF0cml4WzFdLCBtYXRyaXhbMl0sIHNjcmF0Y2hDb2x1bW4pKTtcclxuXHRcdHJlc3VsdC55ID0gVmVjdG9yMy5tYWduaXR1ZGUoVmVjdG9yMy5mcm9tRWxlbWVudHMobWF0cml4WzRdLCBtYXRyaXhbNV0sIG1hdHJpeFs2XSwgc2NyYXRjaENvbHVtbikpO1xyXG5cdFx0cmVzdWx0LnogPSBWZWN0b3IzLm1hZ25pdHVkZShWZWN0b3IzLmZyb21FbGVtZW50cyhtYXRyaXhbOF0sIG1hdHJpeFs5XSwgbWF0cml4WzEwXSwgc2NyYXRjaENvbHVtbikpO1xyXG5cdFx0cmV0dXJuIHJlc3VsdDtcclxuXHR9XHJcblxyXG5cdHN0YXRpYyBnZXRNYXhpbXVtU2NhbGUobWF0cml4OiBNYXRyaXg0KTogbnVtYmVyIHtcclxuXHRcdE1hdHJpeDQuZ2V0U2NhbGUobWF0cml4LCBzY2FsZVNjcmF0Y2gzKTtcclxuXHRcdHJldHVybiBWZWN0b3IzLm1heGltdW1Db21wb25lbnQoc2NhbGVTY3JhdGNoMyk7XHJcblx0fVxyXG5cclxuXHRzdGF0aWMgc2V0Um90YXRpb24obWF0cml4OiBNYXRyaXg0LCByb3RhdGlvbjogTWF0cml4MywgcmVzdWx0OiBNYXRyaXg0KTogTWF0cml4NCB7XHJcblx0XHRjb25zdCBzY2FsZSA9IE1hdHJpeDQuZ2V0U2NhbGUobWF0cml4LCBzY2FsZVNjcmF0Y2g0KTtcclxuXHJcblx0XHRyZXN1bHRbMF0gPSByb3RhdGlvblswXSAqIHNjYWxlLng7XHJcblx0XHRyZXN1bHRbMV0gPSByb3RhdGlvblsxXSAqIHNjYWxlLng7XHJcblx0XHRyZXN1bHRbMl0gPSByb3RhdGlvblsyXSAqIHNjYWxlLng7XHJcblx0XHRyZXN1bHRbM10gPSBtYXRyaXhbM107XHJcblxyXG5cdFx0cmVzdWx0WzRdID0gcm90YXRpb25bM10gKiBzY2FsZS55O1xyXG5cdFx0cmVzdWx0WzVdID0gcm90YXRpb25bNF0gKiBzY2FsZS55O1xyXG5cdFx0cmVzdWx0WzZdID0gcm90YXRpb25bNV0gKiBzY2FsZS55O1xyXG5cdFx0cmVzdWx0WzddID0gbWF0cml4WzddO1xyXG5cclxuXHRcdHJlc3VsdFs4XSA9IHJvdGF0aW9uWzZdICogc2NhbGUuejtcclxuXHRcdHJlc3VsdFs5XSA9IHJvdGF0aW9uWzddICogc2NhbGUuejtcclxuXHRcdHJlc3VsdFsxMF0gPSByb3RhdGlvbls4XSAqIHNjYWxlLno7XHJcblx0XHRyZXN1bHRbMTFdID0gbWF0cml4WzExXTtcclxuXHJcblx0XHRyZXN1bHRbMTJdID0gbWF0cml4WzEyXTtcclxuXHRcdHJlc3VsdFsxM10gPSBtYXRyaXhbMTNdO1xyXG5cdFx0cmVzdWx0WzE0XSA9IG1hdHJpeFsxNF07XHJcblx0XHRyZXN1bHRbMTVdID0gbWF0cml4WzE1XTtcclxuXHJcblx0XHRyZXR1cm4gcmVzdWx0O1xyXG5cdH1cclxuXHJcblx0c3RhdGljIGdldFJvdGF0aW9uKG1hdHJpeDogTWF0cml4NCwgcmVzdWx0OiBRdWF0ZXJuaW9uKTogUXVhdGVybmlvbiB7XHJcblx0XHRjb25zdCBzY2FsZSA9IE1hdHJpeDQuZ2V0U2NhbGUobWF0cml4LCBzY2FsZVNjcmF0Y2g1KTtcclxuXHJcblx0XHRjb25zdCBpczEgPSAxIC8gc2NhbGUueDtcclxuXHRcdGNvbnN0IGlzMiA9IDEgLyBzY2FsZS55O1xyXG5cdFx0Y29uc3QgaXMzID0gMSAvIHNjYWxlLno7XHJcblxyXG5cdFx0Y29uc3Qgc20xMSA9IG1hdHJpeFswXSAqIGlzMTtcclxuXHRcdGNvbnN0IHNtMTIgPSBtYXRyaXhbMV0gKiBpczI7XHJcblx0XHRjb25zdCBzbTEzID0gbWF0cml4WzJdICogaXMzO1xyXG5cdFx0Y29uc3Qgc20yMSA9IG1hdHJpeFs0XSAqIGlzMTtcclxuXHRcdGNvbnN0IHNtMjIgPSBtYXRyaXhbNV0gKiBpczI7XHJcblx0XHRjb25zdCBzbTIzID0gbWF0cml4WzZdICogaXMzO1xyXG5cdFx0Y29uc3Qgc20zMSA9IG1hdHJpeFs4XSAqIGlzMTtcclxuXHRcdGNvbnN0IHNtMzIgPSBtYXRyaXhbOV0gKiBpczI7XHJcblx0XHRjb25zdCBzbTMzID0gbWF0cml4WzEwXSAqIGlzMztcclxuXHJcblx0XHRjb25zdCB0cmFjZSA9IHNtMTEgKyBzbTIyICsgc20zMztcclxuXHRcdGxldCBTID0gMDtcclxuXHJcblx0XHRpZiAodHJhY2UgPiAwKSB7XHJcblx0XHRcdFMgPSBNYXRoLnNxcnQodHJhY2UgKyAxLjApICogMjtcclxuXHRcdFx0cmVzdWx0LncgPSAwLjI1ICogUztcclxuXHRcdFx0cmVzdWx0LnggPSAoc20yMyAtIHNtMzIpIC8gUztcclxuXHRcdFx0cmVzdWx0LnkgPSAoc20zMSAtIHNtMTMpIC8gUztcclxuXHRcdFx0cmVzdWx0LnogPSAoc20xMiAtIHNtMjEpIC8gUztcclxuXHRcdH0gZWxzZSBpZiAoc20xMSA+IHNtMjIgJiYgc20xMSA+IHNtMzMpIHtcclxuXHRcdFx0UyA9IE1hdGguc3FydCgxLjAgKyBzbTExIC0gc20yMiAtIHNtMzMpICogMjtcclxuXHRcdFx0cmVzdWx0LncgPSAoc20yMyAtIHNtMzIpIC8gUztcclxuXHRcdFx0cmVzdWx0LnggPSAwLjI1ICogUztcclxuXHRcdFx0cmVzdWx0LnkgPSAoc20xMiArIHNtMjEpIC8gUztcclxuXHRcdFx0cmVzdWx0LnogPSAoc20zMSArIHNtMTMpIC8gUztcclxuXHRcdH0gZWxzZSBpZiAoc20yMiA+IHNtMzMpIHtcclxuXHRcdFx0UyA9IE1hdGguc3FydCgxLjAgKyBzbTIyIC0gc20xMSAtIHNtMzMpICogMjtcclxuXHRcdFx0cmVzdWx0LncgPSAoc20zMSAtIHNtMTMpIC8gUztcclxuXHRcdFx0cmVzdWx0LnggPSAoc20xMiArIHNtMjEpIC8gUztcclxuXHRcdFx0cmVzdWx0LnkgPSAwLjI1ICogUztcclxuXHRcdFx0cmVzdWx0LnogPSAoc20yMyArIHNtMzIpIC8gUztcclxuXHRcdH0gZWxzZSB7XHJcblx0XHRcdFMgPSBNYXRoLnNxcnQoMS4wICsgc20zMyAtIHNtMTEgLSBzbTIyKSAqIDI7XHJcblx0XHRcdHJlc3VsdC53ID0gKHNtMTIgLSBzbTIxKSAvIFM7XHJcblx0XHRcdHJlc3VsdC54ID0gKHNtMzEgKyBzbTEzKSAvIFM7XHJcblx0XHRcdHJlc3VsdC55ID0gKHNtMjMgKyBzbTMyKSAvIFM7XHJcblx0XHRcdHJlc3VsdC56ID0gMC4yNSAqIFM7XHJcblx0XHR9XHJcblx0XHRyZXR1cm4gcmVzdWx0O1xyXG5cdH1cclxuXHJcblx0c3RhdGljIG11bHRpcGx5KGxlZnQ6IE1hdHJpeDQsIHJpZ2h0OiBNYXRyaXg0LCByZXN1bHQ6IE1hdHJpeDQpOiBNYXRyaXg0IHtcclxuXHRcdGNvbnN0IGxlZnQwID0gbGVmdFswXTtcclxuXHRcdGNvbnN0IGxlZnQxID0gbGVmdFsxXTtcclxuXHRcdGNvbnN0IGxlZnQyID0gbGVmdFsyXTtcclxuXHRcdGNvbnN0IGxlZnQzID0gbGVmdFszXTtcclxuXHRcdGNvbnN0IGxlZnQ0ID0gbGVmdFs0XTtcclxuXHRcdGNvbnN0IGxlZnQ1ID0gbGVmdFs1XTtcclxuXHRcdGNvbnN0IGxlZnQ2ID0gbGVmdFs2XTtcclxuXHRcdGNvbnN0IGxlZnQ3ID0gbGVmdFs3XTtcclxuXHRcdGNvbnN0IGxlZnQ4ID0gbGVmdFs4XTtcclxuXHRcdGNvbnN0IGxlZnQ5ID0gbGVmdFs5XTtcclxuXHRcdGNvbnN0IGxlZnQxMCA9IGxlZnRbMTBdO1xyXG5cdFx0Y29uc3QgbGVmdDExID0gbGVmdFsxMV07XHJcblx0XHRjb25zdCBsZWZ0MTIgPSBsZWZ0WzEyXTtcclxuXHRcdGNvbnN0IGxlZnQxMyA9IGxlZnRbMTNdO1xyXG5cdFx0Y29uc3QgbGVmdDE0ID0gbGVmdFsxNF07XHJcblx0XHRjb25zdCBsZWZ0MTUgPSBsZWZ0WzE1XTtcclxuXHJcblx0XHRjb25zdCByaWdodDAgPSByaWdodFswXTtcclxuXHRcdGNvbnN0IHJpZ2h0MSA9IHJpZ2h0WzFdO1xyXG5cdFx0Y29uc3QgcmlnaHQyID0gcmlnaHRbMl07XHJcblx0XHRjb25zdCByaWdodDMgPSByaWdodFszXTtcclxuXHRcdGNvbnN0IHJpZ2h0NCA9IHJpZ2h0WzRdO1xyXG5cdFx0Y29uc3QgcmlnaHQ1ID0gcmlnaHRbNV07XHJcblx0XHRjb25zdCByaWdodDYgPSByaWdodFs2XTtcclxuXHRcdGNvbnN0IHJpZ2h0NyA9IHJpZ2h0WzddO1xyXG5cdFx0Y29uc3QgcmlnaHQ4ID0gcmlnaHRbOF07XHJcblx0XHRjb25zdCByaWdodDkgPSByaWdodFs5XTtcclxuXHRcdGNvbnN0IHJpZ2h0MTAgPSByaWdodFsxMF07XHJcblx0XHRjb25zdCByaWdodDExID0gcmlnaHRbMTFdO1xyXG5cdFx0Y29uc3QgcmlnaHQxMiA9IHJpZ2h0WzEyXTtcclxuXHRcdGNvbnN0IHJpZ2h0MTMgPSByaWdodFsxM107XHJcblx0XHRjb25zdCByaWdodDE0ID0gcmlnaHRbMTRdO1xyXG5cdFx0Y29uc3QgcmlnaHQxNSA9IHJpZ2h0WzE1XTtcclxuXHJcblx0XHRjb25zdCBjb2x1bW4wUm93MCA9IGxlZnQwICogcmlnaHQwICsgbGVmdDQgKiByaWdodDEgKyBsZWZ0OCAqIHJpZ2h0MiArIGxlZnQxMiAqIHJpZ2h0MztcclxuXHRcdGNvbnN0IGNvbHVtbjBSb3cxID0gbGVmdDEgKiByaWdodDAgKyBsZWZ0NSAqIHJpZ2h0MSArIGxlZnQ5ICogcmlnaHQyICsgbGVmdDEzICogcmlnaHQzO1xyXG5cdFx0Y29uc3QgY29sdW1uMFJvdzIgPSBsZWZ0MiAqIHJpZ2h0MCArIGxlZnQ2ICogcmlnaHQxICsgbGVmdDEwICogcmlnaHQyICsgbGVmdDE0ICogcmlnaHQzO1xyXG5cdFx0Y29uc3QgY29sdW1uMFJvdzMgPSBsZWZ0MyAqIHJpZ2h0MCArIGxlZnQ3ICogcmlnaHQxICsgbGVmdDExICogcmlnaHQyICsgbGVmdDE1ICogcmlnaHQzO1xyXG5cclxuXHRcdGNvbnN0IGNvbHVtbjFSb3cwID0gbGVmdDAgKiByaWdodDQgKyBsZWZ0NCAqIHJpZ2h0NSArIGxlZnQ4ICogcmlnaHQ2ICsgbGVmdDEyICogcmlnaHQ3O1xyXG5cdFx0Y29uc3QgY29sdW1uMVJvdzEgPSBsZWZ0MSAqIHJpZ2h0NCArIGxlZnQ1ICogcmlnaHQ1ICsgbGVmdDkgKiByaWdodDYgKyBsZWZ0MTMgKiByaWdodDc7XHJcblx0XHRjb25zdCBjb2x1bW4xUm93MiA9IGxlZnQyICogcmlnaHQ0ICsgbGVmdDYgKiByaWdodDUgKyBsZWZ0MTAgKiByaWdodDYgKyBsZWZ0MTQgKiByaWdodDc7XHJcblx0XHRjb25zdCBjb2x1bW4xUm93MyA9IGxlZnQzICogcmlnaHQ0ICsgbGVmdDcgKiByaWdodDUgKyBsZWZ0MTEgKiByaWdodDYgKyBsZWZ0MTUgKiByaWdodDc7XHJcblxyXG5cdFx0Y29uc3QgY29sdW1uMlJvdzAgPSBsZWZ0MCAqIHJpZ2h0OCArIGxlZnQ0ICogcmlnaHQ5ICsgbGVmdDggKiByaWdodDEwICsgbGVmdDEyICogcmlnaHQxMTtcclxuXHRcdGNvbnN0IGNvbHVtbjJSb3cxID0gbGVmdDEgKiByaWdodDggKyBsZWZ0NSAqIHJpZ2h0OSArIGxlZnQ5ICogcmlnaHQxMCArIGxlZnQxMyAqIHJpZ2h0MTE7XHJcblx0XHRjb25zdCBjb2x1bW4yUm93MiA9IGxlZnQyICogcmlnaHQ4ICsgbGVmdDYgKiByaWdodDkgKyBsZWZ0MTAgKiByaWdodDEwICsgbGVmdDE0ICogcmlnaHQxMTtcclxuXHRcdGNvbnN0IGNvbHVtbjJSb3czID0gbGVmdDMgKiByaWdodDggKyBsZWZ0NyAqIHJpZ2h0OSArIGxlZnQxMSAqIHJpZ2h0MTAgKyBsZWZ0MTUgKiByaWdodDExO1xyXG5cclxuXHRcdGNvbnN0IGNvbHVtbjNSb3cwID0gbGVmdDAgKiByaWdodDEyICsgbGVmdDQgKiByaWdodDEzICsgbGVmdDggKiByaWdodDE0ICsgbGVmdDEyICogcmlnaHQxNTtcclxuXHRcdGNvbnN0IGNvbHVtbjNSb3cxID0gbGVmdDEgKiByaWdodDEyICsgbGVmdDUgKiByaWdodDEzICsgbGVmdDkgKiByaWdodDE0ICsgbGVmdDEzICogcmlnaHQxNTtcclxuXHRcdGNvbnN0IGNvbHVtbjNSb3cyID0gbGVmdDIgKiByaWdodDEyICsgbGVmdDYgKiByaWdodDEzICsgbGVmdDEwICogcmlnaHQxNCArIGxlZnQxNCAqIHJpZ2h0MTU7XHJcblx0XHRjb25zdCBjb2x1bW4zUm93MyA9IGxlZnQzICogcmlnaHQxMiArIGxlZnQ3ICogcmlnaHQxMyArIGxlZnQxMSAqIHJpZ2h0MTQgKyBsZWZ0MTUgKiByaWdodDE1O1xyXG5cclxuXHRcdHJlc3VsdFswXSA9IGNvbHVtbjBSb3cwO1xyXG5cdFx0cmVzdWx0WzFdID0gY29sdW1uMFJvdzE7XHJcblx0XHRyZXN1bHRbMl0gPSBjb2x1bW4wUm93MjtcclxuXHRcdHJlc3VsdFszXSA9IGNvbHVtbjBSb3czO1xyXG5cdFx0cmVzdWx0WzRdID0gY29sdW1uMVJvdzA7XHJcblx0XHRyZXN1bHRbNV0gPSBjb2x1bW4xUm93MTtcclxuXHRcdHJlc3VsdFs2XSA9IGNvbHVtbjFSb3cyO1xyXG5cdFx0cmVzdWx0WzddID0gY29sdW1uMVJvdzM7XHJcblx0XHRyZXN1bHRbOF0gPSBjb2x1bW4yUm93MDtcclxuXHRcdHJlc3VsdFs5XSA9IGNvbHVtbjJSb3cxO1xyXG5cdFx0cmVzdWx0WzEwXSA9IGNvbHVtbjJSb3cyO1xyXG5cdFx0cmVzdWx0WzExXSA9IGNvbHVtbjJSb3czO1xyXG5cdFx0cmVzdWx0WzEyXSA9IGNvbHVtbjNSb3cwO1xyXG5cdFx0cmVzdWx0WzEzXSA9IGNvbHVtbjNSb3cxO1xyXG5cdFx0cmVzdWx0WzE0XSA9IGNvbHVtbjNSb3cyO1xyXG5cdFx0cmVzdWx0WzE1XSA9IGNvbHVtbjNSb3czO1xyXG5cdFx0cmV0dXJuIHJlc3VsdDtcclxuXHR9XHJcblxyXG5cdHN0YXRpYyBhZGQobGVmdDogTWF0cml4NCwgcmlnaHQ6IE1hdHJpeDQsIHJlc3VsdDogTWF0cml4NCk6IE1hdHJpeDQge1xyXG5cdFx0cmVzdWx0WzBdID0gbGVmdFswXSArIHJpZ2h0WzBdO1xyXG5cdFx0cmVzdWx0WzFdID0gbGVmdFsxXSArIHJpZ2h0WzFdO1xyXG5cdFx0cmVzdWx0WzJdID0gbGVmdFsyXSArIHJpZ2h0WzJdO1xyXG5cdFx0cmVzdWx0WzNdID0gbGVmdFszXSArIHJpZ2h0WzNdO1xyXG5cdFx0cmVzdWx0WzRdID0gbGVmdFs0XSArIHJpZ2h0WzRdO1xyXG5cdFx0cmVzdWx0WzVdID0gbGVmdFs1XSArIHJpZ2h0WzVdO1xyXG5cdFx0cmVzdWx0WzZdID0gbGVmdFs2XSArIHJpZ2h0WzZdO1xyXG5cdFx0cmVzdWx0WzddID0gbGVmdFs3XSArIHJpZ2h0WzddO1xyXG5cdFx0cmVzdWx0WzhdID0gbGVmdFs4XSArIHJpZ2h0WzhdO1xyXG5cdFx0cmVzdWx0WzldID0gbGVmdFs5XSArIHJpZ2h0WzldO1xyXG5cdFx0cmVzdWx0WzEwXSA9IGxlZnRbMTBdICsgcmlnaHRbMTBdO1xyXG5cdFx0cmVzdWx0WzExXSA9IGxlZnRbMTFdICsgcmlnaHRbMTFdO1xyXG5cdFx0cmVzdWx0WzEyXSA9IGxlZnRbMTJdICsgcmlnaHRbMTJdO1xyXG5cdFx0cmVzdWx0WzEzXSA9IGxlZnRbMTNdICsgcmlnaHRbMTNdO1xyXG5cdFx0cmVzdWx0WzE0XSA9IGxlZnRbMTRdICsgcmlnaHRbMTRdO1xyXG5cdFx0cmVzdWx0WzE1XSA9IGxlZnRbMTVdICsgcmlnaHRbMTVdO1xyXG5cdFx0cmV0dXJuIHJlc3VsdDtcclxuXHR9XHJcblxyXG5cdHN0YXRpYyBzdWJ0cmFjdChsZWZ0OiBNYXRyaXg0LCByaWdodDogTWF0cml4NCwgcmVzdWx0OiBNYXRyaXg0KSB7XHJcblx0XHRyZXN1bHRbMF0gPSBsZWZ0WzBdIC0gcmlnaHRbMF07XHJcblx0XHRyZXN1bHRbMV0gPSBsZWZ0WzFdIC0gcmlnaHRbMV07XHJcblx0XHRyZXN1bHRbMl0gPSBsZWZ0WzJdIC0gcmlnaHRbMl07XHJcblx0XHRyZXN1bHRbM10gPSBsZWZ0WzNdIC0gcmlnaHRbM107XHJcblx0XHRyZXN1bHRbNF0gPSBsZWZ0WzRdIC0gcmlnaHRbNF07XHJcblx0XHRyZXN1bHRbNV0gPSBsZWZ0WzVdIC0gcmlnaHRbNV07XHJcblx0XHRyZXN1bHRbNl0gPSBsZWZ0WzZdIC0gcmlnaHRbNl07XHJcblx0XHRyZXN1bHRbN10gPSBsZWZ0WzddIC0gcmlnaHRbN107XHJcblx0XHRyZXN1bHRbOF0gPSBsZWZ0WzhdIC0gcmlnaHRbOF07XHJcblx0XHRyZXN1bHRbOV0gPSBsZWZ0WzldIC0gcmlnaHRbOV07XHJcblx0XHRyZXN1bHRbMTBdID0gbGVmdFsxMF0gLSByaWdodFsxMF07XHJcblx0XHRyZXN1bHRbMTFdID0gbGVmdFsxMV0gLSByaWdodFsxMV07XHJcblx0XHRyZXN1bHRbMTJdID0gbGVmdFsxMl0gLSByaWdodFsxMl07XHJcblx0XHRyZXN1bHRbMTNdID0gbGVmdFsxM10gLSByaWdodFsxM107XHJcblx0XHRyZXN1bHRbMTRdID0gbGVmdFsxNF0gLSByaWdodFsxNF07XHJcblx0XHRyZXN1bHRbMTVdID0gbGVmdFsxNV0gLSByaWdodFsxNV07XHJcblx0XHRyZXR1cm4gcmVzdWx0O1xyXG5cdH1cclxuXHJcblx0c3RhdGljIG11bHRpcGx5VHJhbnNmb3JtYXRpb24obGVmdDogTWF0cml4NCwgcmlnaHQ6IE1hdHJpeDQsIHJlc3VsdDogTWF0cml4NCk6IE1hdHJpeDQge1xyXG5cdFx0Y29uc3QgbGVmdDAgPSBsZWZ0WzBdO1xyXG5cdFx0Y29uc3QgbGVmdDEgPSBsZWZ0WzFdO1xyXG5cdFx0Y29uc3QgbGVmdDIgPSBsZWZ0WzJdO1xyXG5cdFx0Y29uc3QgbGVmdDQgPSBsZWZ0WzRdO1xyXG5cdFx0Y29uc3QgbGVmdDUgPSBsZWZ0WzVdO1xyXG5cdFx0Y29uc3QgbGVmdDYgPSBsZWZ0WzZdO1xyXG5cdFx0Y29uc3QgbGVmdDggPSBsZWZ0WzhdO1xyXG5cdFx0Y29uc3QgbGVmdDkgPSBsZWZ0WzldO1xyXG5cdFx0Y29uc3QgbGVmdDEwID0gbGVmdFsxMF07XHJcblx0XHRjb25zdCBsZWZ0MTIgPSBsZWZ0WzEyXTtcclxuXHRcdGNvbnN0IGxlZnQxMyA9IGxlZnRbMTNdO1xyXG5cdFx0Y29uc3QgbGVmdDE0ID0gbGVmdFsxNF07XHJcblxyXG5cdFx0Y29uc3QgcmlnaHQwID0gcmlnaHRbMF07XHJcblx0XHRjb25zdCByaWdodDEgPSByaWdodFsxXTtcclxuXHRcdGNvbnN0IHJpZ2h0MiA9IHJpZ2h0WzJdO1xyXG5cdFx0Y29uc3QgcmlnaHQ0ID0gcmlnaHRbNF07XHJcblx0XHRjb25zdCByaWdodDUgPSByaWdodFs1XTtcclxuXHRcdGNvbnN0IHJpZ2h0NiA9IHJpZ2h0WzZdO1xyXG5cdFx0Y29uc3QgcmlnaHQ4ID0gcmlnaHRbOF07XHJcblx0XHRjb25zdCByaWdodDkgPSByaWdodFs5XTtcclxuXHRcdGNvbnN0IHJpZ2h0MTAgPSByaWdodFsxMF07XHJcblx0XHRjb25zdCByaWdodDEyID0gcmlnaHRbMTJdO1xyXG5cdFx0Y29uc3QgcmlnaHQxMyA9IHJpZ2h0WzEzXTtcclxuXHRcdGNvbnN0IHJpZ2h0MTQgPSByaWdodFsxNF07XHJcblxyXG5cdFx0Y29uc3QgY29sdW1uMFJvdzAgPSBsZWZ0MCAqIHJpZ2h0MCArIGxlZnQ0ICogcmlnaHQxICsgbGVmdDggKiByaWdodDI7XHJcblx0XHRjb25zdCBjb2x1bW4wUm93MSA9IGxlZnQxICogcmlnaHQwICsgbGVmdDUgKiByaWdodDEgKyBsZWZ0OSAqIHJpZ2h0MjtcclxuXHRcdGNvbnN0IGNvbHVtbjBSb3cyID0gbGVmdDIgKiByaWdodDAgKyBsZWZ0NiAqIHJpZ2h0MSArIGxlZnQxMCAqIHJpZ2h0MjtcclxuXHJcblx0XHRjb25zdCBjb2x1bW4xUm93MCA9IGxlZnQwICogcmlnaHQ0ICsgbGVmdDQgKiByaWdodDUgKyBsZWZ0OCAqIHJpZ2h0NjtcclxuXHRcdGNvbnN0IGNvbHVtbjFSb3cxID0gbGVmdDEgKiByaWdodDQgKyBsZWZ0NSAqIHJpZ2h0NSArIGxlZnQ5ICogcmlnaHQ2O1xyXG5cdFx0Y29uc3QgY29sdW1uMVJvdzIgPSBsZWZ0MiAqIHJpZ2h0NCArIGxlZnQ2ICogcmlnaHQ1ICsgbGVmdDEwICogcmlnaHQ2O1xyXG5cclxuXHRcdGNvbnN0IGNvbHVtbjJSb3cwID0gbGVmdDAgKiByaWdodDggKyBsZWZ0NCAqIHJpZ2h0OSArIGxlZnQ4ICogcmlnaHQxMDtcclxuXHRcdGNvbnN0IGNvbHVtbjJSb3cxID0gbGVmdDEgKiByaWdodDggKyBsZWZ0NSAqIHJpZ2h0OSArIGxlZnQ5ICogcmlnaHQxMDtcclxuXHRcdGNvbnN0IGNvbHVtbjJSb3cyID0gbGVmdDIgKiByaWdodDggKyBsZWZ0NiAqIHJpZ2h0OSArIGxlZnQxMCAqIHJpZ2h0MTA7XHJcblxyXG5cdFx0Y29uc3QgY29sdW1uM1JvdzAgPSBsZWZ0MCAqIHJpZ2h0MTIgKyBsZWZ0NCAqIHJpZ2h0MTMgKyBsZWZ0OCAqIHJpZ2h0MTQgKyBsZWZ0MTI7XHJcblx0XHRjb25zdCBjb2x1bW4zUm93MSA9IGxlZnQxICogcmlnaHQxMiArIGxlZnQ1ICogcmlnaHQxMyArIGxlZnQ5ICogcmlnaHQxNCArIGxlZnQxMztcclxuXHRcdGNvbnN0IGNvbHVtbjNSb3cyID0gbGVmdDIgKiByaWdodDEyICsgbGVmdDYgKiByaWdodDEzICsgbGVmdDEwICogcmlnaHQxNCArIGxlZnQxNDtcclxuXHJcblx0XHRyZXN1bHRbMF0gPSBjb2x1bW4wUm93MDtcclxuXHRcdHJlc3VsdFsxXSA9IGNvbHVtbjBSb3cxO1xyXG5cdFx0cmVzdWx0WzJdID0gY29sdW1uMFJvdzI7XHJcblx0XHRyZXN1bHRbM10gPSAwLjA7XHJcblx0XHRyZXN1bHRbNF0gPSBjb2x1bW4xUm93MDtcclxuXHRcdHJlc3VsdFs1XSA9IGNvbHVtbjFSb3cxO1xyXG5cdFx0cmVzdWx0WzZdID0gY29sdW1uMVJvdzI7XHJcblx0XHRyZXN1bHRbN10gPSAwLjA7XHJcblx0XHRyZXN1bHRbOF0gPSBjb2x1bW4yUm93MDtcclxuXHRcdHJlc3VsdFs5XSA9IGNvbHVtbjJSb3cxO1xyXG5cdFx0cmVzdWx0WzEwXSA9IGNvbHVtbjJSb3cyO1xyXG5cdFx0cmVzdWx0WzExXSA9IDAuMDtcclxuXHRcdHJlc3VsdFsxMl0gPSBjb2x1bW4zUm93MDtcclxuXHRcdHJlc3VsdFsxM10gPSBjb2x1bW4zUm93MTtcclxuXHRcdHJlc3VsdFsxNF0gPSBjb2x1bW4zUm93MjtcclxuXHRcdHJlc3VsdFsxNV0gPSAxLjA7XHJcblx0XHRyZXR1cm4gcmVzdWx0O1xyXG5cdH1cclxuXHJcblx0c3RhdGljIG11bHRpcGx5QnlNYXRyaXgzKG1hdHJpeDogTWF0cml4NCwgcm90YXRpb246IE1hdHJpeDMsIHJlc3VsdDogTWF0cml4NCk6IE1hdHJpeDQge1xyXG5cdFx0Y29uc3QgbGVmdDAgPSBtYXRyaXhbMF07XHJcblx0XHRjb25zdCBsZWZ0MSA9IG1hdHJpeFsxXTtcclxuXHRcdGNvbnN0IGxlZnQyID0gbWF0cml4WzJdO1xyXG5cdFx0Y29uc3QgbGVmdDQgPSBtYXRyaXhbNF07XHJcblx0XHRjb25zdCBsZWZ0NSA9IG1hdHJpeFs1XTtcclxuXHRcdGNvbnN0IGxlZnQ2ID0gbWF0cml4WzZdO1xyXG5cdFx0Y29uc3QgbGVmdDggPSBtYXRyaXhbOF07XHJcblx0XHRjb25zdCBsZWZ0OSA9IG1hdHJpeFs5XTtcclxuXHRcdGNvbnN0IGxlZnQxMCA9IG1hdHJpeFsxMF07XHJcblxyXG5cdFx0Y29uc3QgcmlnaHQwID0gcm90YXRpb25bMF07XHJcblx0XHRjb25zdCByaWdodDEgPSByb3RhdGlvblsxXTtcclxuXHRcdGNvbnN0IHJpZ2h0MiA9IHJvdGF0aW9uWzJdO1xyXG5cdFx0Y29uc3QgcmlnaHQ0ID0gcm90YXRpb25bM107XHJcblx0XHRjb25zdCByaWdodDUgPSByb3RhdGlvbls0XTtcclxuXHRcdGNvbnN0IHJpZ2h0NiA9IHJvdGF0aW9uWzVdO1xyXG5cdFx0Y29uc3QgcmlnaHQ4ID0gcm90YXRpb25bNl07XHJcblx0XHRjb25zdCByaWdodDkgPSByb3RhdGlvbls3XTtcclxuXHRcdGNvbnN0IHJpZ2h0MTAgPSByb3RhdGlvbls4XTtcclxuXHJcblx0XHRjb25zdCBjb2x1bW4wUm93MCA9IGxlZnQwICogcmlnaHQwICsgbGVmdDQgKiByaWdodDEgKyBsZWZ0OCAqIHJpZ2h0MjtcclxuXHRcdGNvbnN0IGNvbHVtbjBSb3cxID0gbGVmdDEgKiByaWdodDAgKyBsZWZ0NSAqIHJpZ2h0MSArIGxlZnQ5ICogcmlnaHQyO1xyXG5cdFx0Y29uc3QgY29sdW1uMFJvdzIgPSBsZWZ0MiAqIHJpZ2h0MCArIGxlZnQ2ICogcmlnaHQxICsgbGVmdDEwICogcmlnaHQyO1xyXG5cclxuXHRcdGNvbnN0IGNvbHVtbjFSb3cwID0gbGVmdDAgKiByaWdodDQgKyBsZWZ0NCAqIHJpZ2h0NSArIGxlZnQ4ICogcmlnaHQ2O1xyXG5cdFx0Y29uc3QgY29sdW1uMVJvdzEgPSBsZWZ0MSAqIHJpZ2h0NCArIGxlZnQ1ICogcmlnaHQ1ICsgbGVmdDkgKiByaWdodDY7XHJcblx0XHRjb25zdCBjb2x1bW4xUm93MiA9IGxlZnQyICogcmlnaHQ0ICsgbGVmdDYgKiByaWdodDUgKyBsZWZ0MTAgKiByaWdodDY7XHJcblxyXG5cdFx0Y29uc3QgY29sdW1uMlJvdzAgPSBsZWZ0MCAqIHJpZ2h0OCArIGxlZnQ0ICogcmlnaHQ5ICsgbGVmdDggKiByaWdodDEwO1xyXG5cdFx0Y29uc3QgY29sdW1uMlJvdzEgPSBsZWZ0MSAqIHJpZ2h0OCArIGxlZnQ1ICogcmlnaHQ5ICsgbGVmdDkgKiByaWdodDEwO1xyXG5cdFx0Y29uc3QgY29sdW1uMlJvdzIgPSBsZWZ0MiAqIHJpZ2h0OCArIGxlZnQ2ICogcmlnaHQ5ICsgbGVmdDEwICogcmlnaHQxMDtcclxuXHJcblx0XHRyZXN1bHRbMF0gPSBjb2x1bW4wUm93MDtcclxuXHRcdHJlc3VsdFsxXSA9IGNvbHVtbjBSb3cxO1xyXG5cdFx0cmVzdWx0WzJdID0gY29sdW1uMFJvdzI7XHJcblx0XHRyZXN1bHRbM10gPSAwLjA7XHJcblx0XHRyZXN1bHRbNF0gPSBjb2x1bW4xUm93MDtcclxuXHRcdHJlc3VsdFs1XSA9IGNvbHVtbjFSb3cxO1xyXG5cdFx0cmVzdWx0WzZdID0gY29sdW1uMVJvdzI7XHJcblx0XHRyZXN1bHRbN10gPSAwLjA7XHJcblx0XHRyZXN1bHRbOF0gPSBjb2x1bW4yUm93MDtcclxuXHRcdHJlc3VsdFs5XSA9IGNvbHVtbjJSb3cxO1xyXG5cdFx0cmVzdWx0WzEwXSA9IGNvbHVtbjJSb3cyO1xyXG5cdFx0cmVzdWx0WzExXSA9IDAuMDtcclxuXHRcdHJlc3VsdFsxMl0gPSBtYXRyaXhbMTJdO1xyXG5cdFx0cmVzdWx0WzEzXSA9IG1hdHJpeFsxM107XHJcblx0XHRyZXN1bHRbMTRdID0gbWF0cml4WzE0XTtcclxuXHRcdHJlc3VsdFsxNV0gPSBtYXRyaXhbMTVdO1xyXG5cdFx0cmV0dXJuIHJlc3VsdDtcclxuXHR9XHJcblxyXG5cdHN0YXRpYyBtdWx0aXBseUJ5VHJhbnNsYXRpb24obWF0cml4OiBNYXRyaXg0LCB0cmFuc2xhdGlvbjogVmVjdG9yMywgcmVzdWx0OiBNYXRyaXg0KTogTWF0cml4NCB7XHJcblx0XHRjb25zdCB4ID0gdHJhbnNsYXRpb24ueDtcclxuXHRcdGNvbnN0IHkgPSB0cmFuc2xhdGlvbi55O1xyXG5cdFx0Y29uc3QgeiA9IHRyYW5zbGF0aW9uLno7XHJcblxyXG5cdFx0Y29uc3QgdHggPSB4ICogbWF0cml4WzBdICsgeSAqIG1hdHJpeFs0XSArIHogKiBtYXRyaXhbOF0gKyBtYXRyaXhbMTJdO1xyXG5cdFx0Y29uc3QgdHkgPSB4ICogbWF0cml4WzFdICsgeSAqIG1hdHJpeFs1XSArIHogKiBtYXRyaXhbOV0gKyBtYXRyaXhbMTNdO1xyXG5cdFx0Y29uc3QgdHogPSB4ICogbWF0cml4WzJdICsgeSAqIG1hdHJpeFs2XSArIHogKiBtYXRyaXhbMTBdICsgbWF0cml4WzE0XTtcclxuXHJcblx0XHRyZXN1bHRbMF0gPSBtYXRyaXhbMF07XHJcblx0XHRyZXN1bHRbMV0gPSBtYXRyaXhbMV07XHJcblx0XHRyZXN1bHRbMl0gPSBtYXRyaXhbMl07XHJcblx0XHRyZXN1bHRbM10gPSBtYXRyaXhbM107XHJcblx0XHRyZXN1bHRbNF0gPSBtYXRyaXhbNF07XHJcblx0XHRyZXN1bHRbNV0gPSBtYXRyaXhbNV07XHJcblx0XHRyZXN1bHRbNl0gPSBtYXRyaXhbNl07XHJcblx0XHRyZXN1bHRbN10gPSBtYXRyaXhbN107XHJcblx0XHRyZXN1bHRbOF0gPSBtYXRyaXhbOF07XHJcblx0XHRyZXN1bHRbOV0gPSBtYXRyaXhbOV07XHJcblx0XHRyZXN1bHRbMTBdID0gbWF0cml4WzEwXTtcclxuXHRcdHJlc3VsdFsxMV0gPSBtYXRyaXhbMTFdO1xyXG5cdFx0cmVzdWx0WzEyXSA9IHR4O1xyXG5cdFx0cmVzdWx0WzEzXSA9IHR5O1xyXG5cdFx0cmVzdWx0WzE0XSA9IHR6O1xyXG5cdFx0cmVzdWx0WzE1XSA9IG1hdHJpeFsxNV07XHJcblx0XHRyZXR1cm4gcmVzdWx0O1xyXG5cdH1cclxuXHJcblx0c3RhdGljIG11bHRpcGx5QnlTY2FsZShtYXRyaXg6IE1hdHJpeDQsIHNjYWxlOiBWZWN0b3IzLCByZXN1bHQ6IE1hdHJpeDQpOiBNYXRyaXg0IHtcclxuXHRcdGNvbnN0IHNjYWxlWCA9IHNjYWxlLng7XHJcblx0XHRjb25zdCBzY2FsZVkgPSBzY2FsZS55O1xyXG5cdFx0Y29uc3Qgc2NhbGVaID0gc2NhbGUuejtcclxuXHJcblx0XHQvLyBGYXN0ZXIgdGhhbiBWZWN0b3IzLmVxdWFsc1xyXG5cdFx0aWYgKHNjYWxlWCA9PT0gMS4wICYmIHNjYWxlWSA9PT0gMS4wICYmIHNjYWxlWiA9PT0gMS4wKSB7XHJcblx0XHRcdHJldHVybiBNYXRyaXg0LmNsb25lKG1hdHJpeCwgcmVzdWx0KTtcclxuXHRcdH1cclxuXHJcblx0XHRyZXN1bHRbMF0gPSBzY2FsZVggKiBtYXRyaXhbMF07XHJcblx0XHRyZXN1bHRbMV0gPSBzY2FsZVggKiBtYXRyaXhbMV07XHJcblx0XHRyZXN1bHRbMl0gPSBzY2FsZVggKiBtYXRyaXhbMl07XHJcblx0XHRyZXN1bHRbM10gPSBtYXRyaXhbM107XHJcblxyXG5cdFx0cmVzdWx0WzRdID0gc2NhbGVZICogbWF0cml4WzRdO1xyXG5cdFx0cmVzdWx0WzVdID0gc2NhbGVZICogbWF0cml4WzVdO1xyXG5cdFx0cmVzdWx0WzZdID0gc2NhbGVZICogbWF0cml4WzZdO1xyXG5cdFx0cmVzdWx0WzddID0gbWF0cml4WzddO1xyXG5cclxuXHRcdHJlc3VsdFs4XSA9IHNjYWxlWiAqIG1hdHJpeFs4XTtcclxuXHRcdHJlc3VsdFs5XSA9IHNjYWxlWiAqIG1hdHJpeFs5XTtcclxuXHRcdHJlc3VsdFsxMF0gPSBzY2FsZVogKiBtYXRyaXhbMTBdO1xyXG5cdFx0cmVzdWx0WzExXSA9IG1hdHJpeFsxMV07XHJcblxyXG5cdFx0cmVzdWx0WzEyXSA9IG1hdHJpeFsxMl07XHJcblx0XHRyZXN1bHRbMTNdID0gbWF0cml4WzEzXTtcclxuXHRcdHJlc3VsdFsxNF0gPSBtYXRyaXhbMTRdO1xyXG5cdFx0cmVzdWx0WzE1XSA9IG1hdHJpeFsxNV07XHJcblxyXG5cdFx0cmV0dXJuIHJlc3VsdDtcclxuXHR9XHJcblxyXG5cdHN0YXRpYyBtdWx0aXBseUJ5VW5pZm9ybVNjYWxlKG1hdHJpeDogTWF0cml4NCwgc2NhbGU6IG51bWJlciwgcmVzdWx0OiBNYXRyaXg0KTogTWF0cml4NCB7XHJcblx0XHRyZXN1bHRbMF0gPSBtYXRyaXhbMF0gKiBzY2FsZTtcclxuXHRcdHJlc3VsdFsxXSA9IG1hdHJpeFsxXSAqIHNjYWxlO1xyXG5cdFx0cmVzdWx0WzJdID0gbWF0cml4WzJdICogc2NhbGU7XHJcblx0XHRyZXN1bHRbM10gPSBtYXRyaXhbM107XHJcblxyXG5cdFx0cmVzdWx0WzRdID0gbWF0cml4WzRdICogc2NhbGU7XHJcblx0XHRyZXN1bHRbNV0gPSBtYXRyaXhbNV0gKiBzY2FsZTtcclxuXHRcdHJlc3VsdFs2XSA9IG1hdHJpeFs2XSAqIHNjYWxlO1xyXG5cdFx0cmVzdWx0WzddID0gbWF0cml4WzddO1xyXG5cclxuXHRcdHJlc3VsdFs4XSA9IG1hdHJpeFs4XSAqIHNjYWxlO1xyXG5cdFx0cmVzdWx0WzldID0gbWF0cml4WzldICogc2NhbGU7XHJcblx0XHRyZXN1bHRbMTBdID0gbWF0cml4WzEwXSAqIHNjYWxlO1xyXG5cdFx0cmVzdWx0WzExXSA9IG1hdHJpeFsxMV07XHJcblxyXG5cdFx0cmVzdWx0WzEyXSA9IG1hdHJpeFsxMl07XHJcblx0XHRyZXN1bHRbMTNdID0gbWF0cml4WzEzXTtcclxuXHRcdHJlc3VsdFsxNF0gPSBtYXRyaXhbMTRdO1xyXG5cdFx0cmVzdWx0WzE1XSA9IG1hdHJpeFsxNV07XHJcblxyXG5cdFx0cmV0dXJuIHJlc3VsdDtcclxuXHR9XHJcblxyXG5cdHN0YXRpYyBtdWx0aXBseUJ5VmVjdG9yKG1hdHJpeDogTWF0cml4NCwgY2FydGVzaWFuOiBWZWN0b3I0LCByZXN1bHQ6IFZlY3RvcjQpOiBWZWN0b3I0IHtcclxuXHRcdGNvbnN0IHZYID0gY2FydGVzaWFuLng7XHJcblx0XHRjb25zdCB2WSA9IGNhcnRlc2lhbi55O1xyXG5cdFx0Y29uc3QgdlogPSBjYXJ0ZXNpYW4uejtcclxuXHRcdGNvbnN0IHZXID0gY2FydGVzaWFuLnc7XHJcblxyXG5cdFx0Y29uc3QgeCA9IG1hdHJpeFswXSAqIHZYICsgbWF0cml4WzRdICogdlkgKyBtYXRyaXhbOF0gKiB2WiArIG1hdHJpeFsxMl0gKiB2VztcclxuXHRcdGNvbnN0IHkgPSBtYXRyaXhbMV0gKiB2WCArIG1hdHJpeFs1XSAqIHZZICsgbWF0cml4WzldICogdlogKyBtYXRyaXhbMTNdICogdlc7XHJcblx0XHRjb25zdCB6ID0gbWF0cml4WzJdICogdlggKyBtYXRyaXhbNl0gKiB2WSArIG1hdHJpeFsxMF0gKiB2WiArIG1hdHJpeFsxNF0gKiB2VztcclxuXHRcdGNvbnN0IHcgPSBtYXRyaXhbM10gKiB2WCArIG1hdHJpeFs3XSAqIHZZICsgbWF0cml4WzExXSAqIHZaICsgbWF0cml4WzE1XSAqIHZXO1xyXG5cclxuXHRcdHJlc3VsdC54ID0geDtcclxuXHRcdHJlc3VsdC55ID0geTtcclxuXHRcdHJlc3VsdC56ID0gejtcclxuXHRcdHJlc3VsdC53ID0gdztcclxuXHRcdHJldHVybiByZXN1bHQ7XHJcblx0fVxyXG5cclxuXHRzdGF0aWMgbXVsdGlwbHlCeVBvaW50QXNWZWN0b3IobWF0cml4OiBNYXRyaXg0LCBjYXJ0ZXNpYW46IFZlY3RvcjMsIHJlc3VsdDogVmVjdG9yMyk6IFZlY3RvcjMge1xyXG5cdFx0Y29uc3QgdlggPSBjYXJ0ZXNpYW4ueDtcclxuXHRcdGNvbnN0IHZZID0gY2FydGVzaWFuLnk7XHJcblx0XHRjb25zdCB2WiA9IGNhcnRlc2lhbi56O1xyXG5cclxuXHRcdGNvbnN0IHggPSBtYXRyaXhbMF0gKiB2WCArIG1hdHJpeFs0XSAqIHZZICsgbWF0cml4WzhdICogdlo7XHJcblx0XHRjb25zdCB5ID0gbWF0cml4WzFdICogdlggKyBtYXRyaXhbNV0gKiB2WSArIG1hdHJpeFs5XSAqIHZaO1xyXG5cdFx0Y29uc3QgeiA9IG1hdHJpeFsyXSAqIHZYICsgbWF0cml4WzZdICogdlkgKyBtYXRyaXhbMTBdICogdlo7XHJcblxyXG5cdFx0cmVzdWx0LnggPSB4O1xyXG5cdFx0cmVzdWx0LnkgPSB5O1xyXG5cdFx0cmVzdWx0LnogPSB6O1xyXG5cdFx0cmV0dXJuIHJlc3VsdDtcclxuXHR9XHJcblxyXG5cdHN0YXRpYyBtdWx0aXBseUJ5UG9pbnQobWF0cml4OiBNYXRyaXg0LCBjYXJ0ZXNpYW46IFZlY3RvcjMsIHJlc3VsdDogVmVjdG9yMyk6IFZlY3RvcjMge1xyXG5cdFx0Y29uc3QgdlggPSBjYXJ0ZXNpYW4ueDtcclxuXHRcdGNvbnN0IHZZID0gY2FydGVzaWFuLnk7XHJcblx0XHRjb25zdCB2WiA9IGNhcnRlc2lhbi56O1xyXG5cclxuXHRcdGNvbnN0IHggPSBtYXRyaXhbMF0gKiB2WCArIG1hdHJpeFs0XSAqIHZZICsgbWF0cml4WzhdICogdlogKyBtYXRyaXhbMTJdO1xyXG5cdFx0Y29uc3QgeSA9IG1hdHJpeFsxXSAqIHZYICsgbWF0cml4WzVdICogdlkgKyBtYXRyaXhbOV0gKiB2WiArIG1hdHJpeFsxM107XHJcblx0XHRjb25zdCB6ID0gbWF0cml4WzJdICogdlggKyBtYXRyaXhbNl0gKiB2WSArIG1hdHJpeFsxMF0gKiB2WiArIG1hdHJpeFsxNF07XHJcblxyXG5cdFx0cmVzdWx0LnggPSB4O1xyXG5cdFx0cmVzdWx0LnkgPSB5O1xyXG5cdFx0cmVzdWx0LnogPSB6O1xyXG5cdFx0cmV0dXJuIHJlc3VsdDtcclxuXHR9XHJcblxyXG5cdHN0YXRpYyBtdWx0aXBseUJ5U2NhbGFyKG1hdHJpeDogTWF0cml4NCwgc2NhbGFyOiBudW1iZXIsIHJlc3VsdDogTWF0cml4NCk6IE1hdHJpeDQge1xyXG5cdFx0cmVzdWx0WzBdID0gbWF0cml4WzBdICogc2NhbGFyO1xyXG5cdFx0cmVzdWx0WzFdID0gbWF0cml4WzFdICogc2NhbGFyO1xyXG5cdFx0cmVzdWx0WzJdID0gbWF0cml4WzJdICogc2NhbGFyO1xyXG5cdFx0cmVzdWx0WzNdID0gbWF0cml4WzNdICogc2NhbGFyO1xyXG5cdFx0cmVzdWx0WzRdID0gbWF0cml4WzRdICogc2NhbGFyO1xyXG5cdFx0cmVzdWx0WzVdID0gbWF0cml4WzVdICogc2NhbGFyO1xyXG5cdFx0cmVzdWx0WzZdID0gbWF0cml4WzZdICogc2NhbGFyO1xyXG5cdFx0cmVzdWx0WzddID0gbWF0cml4WzddICogc2NhbGFyO1xyXG5cdFx0cmVzdWx0WzhdID0gbWF0cml4WzhdICogc2NhbGFyO1xyXG5cdFx0cmVzdWx0WzldID0gbWF0cml4WzldICogc2NhbGFyO1xyXG5cdFx0cmVzdWx0WzEwXSA9IG1hdHJpeFsxMF0gKiBzY2FsYXI7XHJcblx0XHRyZXN1bHRbMTFdID0gbWF0cml4WzExXSAqIHNjYWxhcjtcclxuXHRcdHJlc3VsdFsxMl0gPSBtYXRyaXhbMTJdICogc2NhbGFyO1xyXG5cdFx0cmVzdWx0WzEzXSA9IG1hdHJpeFsxM10gKiBzY2FsYXI7XHJcblx0XHRyZXN1bHRbMTRdID0gbWF0cml4WzE0XSAqIHNjYWxhcjtcclxuXHRcdHJlc3VsdFsxNV0gPSBtYXRyaXhbMTVdICogc2NhbGFyO1xyXG5cdFx0cmV0dXJuIHJlc3VsdDtcclxuXHR9XHJcblxyXG5cdHN0YXRpYyBuZWdhdGUobWF0cml4OiBNYXRyaXg0LCByZXN1bHQ6IE1hdHJpeDQpOiBNYXRyaXg0IHtcclxuXHRcdHJlc3VsdFswXSA9IC1tYXRyaXhbMF07XHJcblx0XHRyZXN1bHRbMV0gPSAtbWF0cml4WzFdO1xyXG5cdFx0cmVzdWx0WzJdID0gLW1hdHJpeFsyXTtcclxuXHRcdHJlc3VsdFszXSA9IC1tYXRyaXhbM107XHJcblx0XHRyZXN1bHRbNF0gPSAtbWF0cml4WzRdO1xyXG5cdFx0cmVzdWx0WzVdID0gLW1hdHJpeFs1XTtcclxuXHRcdHJlc3VsdFs2XSA9IC1tYXRyaXhbNl07XHJcblx0XHRyZXN1bHRbN10gPSAtbWF0cml4WzddO1xyXG5cdFx0cmVzdWx0WzhdID0gLW1hdHJpeFs4XTtcclxuXHRcdHJlc3VsdFs5XSA9IC1tYXRyaXhbOV07XHJcblx0XHRyZXN1bHRbMTBdID0gLW1hdHJpeFsxMF07XHJcblx0XHRyZXN1bHRbMTFdID0gLW1hdHJpeFsxMV07XHJcblx0XHRyZXN1bHRbMTJdID0gLW1hdHJpeFsxMl07XHJcblx0XHRyZXN1bHRbMTNdID0gLW1hdHJpeFsxM107XHJcblx0XHRyZXN1bHRbMTRdID0gLW1hdHJpeFsxNF07XHJcblx0XHRyZXN1bHRbMTVdID0gLW1hdHJpeFsxNV07XHJcblx0XHRyZXR1cm4gcmVzdWx0O1xyXG5cdH1cclxuXHJcblx0c3RhdGljIHRyYW5zcG9zZShtYXRyaXg6IE1hdHJpeDQsIHJlc3VsdDogTWF0cml4NCk6IE1hdHJpeDQge1xyXG5cdFx0Y29uc3QgbWF0cml4MSA9IG1hdHJpeFsxXTtcclxuXHRcdGNvbnN0IG1hdHJpeDIgPSBtYXRyaXhbMl07XHJcblx0XHRjb25zdCBtYXRyaXgzID0gbWF0cml4WzNdO1xyXG5cdFx0Y29uc3QgbWF0cml4NiA9IG1hdHJpeFs2XTtcclxuXHRcdGNvbnN0IG1hdHJpeDcgPSBtYXRyaXhbN107XHJcblx0XHRjb25zdCBtYXRyaXgxMSA9IG1hdHJpeFsxMV07XHJcblxyXG5cdFx0cmVzdWx0WzBdID0gbWF0cml4WzBdO1xyXG5cdFx0cmVzdWx0WzFdID0gbWF0cml4WzRdO1xyXG5cdFx0cmVzdWx0WzJdID0gbWF0cml4WzhdO1xyXG5cdFx0cmVzdWx0WzNdID0gbWF0cml4WzEyXTtcclxuXHRcdHJlc3VsdFs0XSA9IG1hdHJpeDE7XHJcblx0XHRyZXN1bHRbNV0gPSBtYXRyaXhbNV07XHJcblx0XHRyZXN1bHRbNl0gPSBtYXRyaXhbOV07XHJcblx0XHRyZXN1bHRbN10gPSBtYXRyaXhbMTNdO1xyXG5cdFx0cmVzdWx0WzhdID0gbWF0cml4MjtcclxuXHRcdHJlc3VsdFs5XSA9IG1hdHJpeDY7XHJcblx0XHRyZXN1bHRbMTBdID0gbWF0cml4WzEwXTtcclxuXHRcdHJlc3VsdFsxMV0gPSBtYXRyaXhbMTRdO1xyXG5cdFx0cmVzdWx0WzEyXSA9IG1hdHJpeDM7XHJcblx0XHRyZXN1bHRbMTNdID0gbWF0cml4NztcclxuXHRcdHJlc3VsdFsxNF0gPSBtYXRyaXgxMTtcclxuXHRcdHJlc3VsdFsxNV0gPSBtYXRyaXhbMTVdO1xyXG5cdFx0cmV0dXJuIHJlc3VsdDtcclxuXHR9XHJcblxyXG5cdHN0YXRpYyBhYnMobWF0cml4OiBNYXRyaXg0LCByZXN1bHQ6IE1hdHJpeDQpIHtcclxuXHRcdHJlc3VsdFswXSA9IE1hdGguYWJzKG1hdHJpeFswXSk7XHJcblx0XHRyZXN1bHRbMV0gPSBNYXRoLmFicyhtYXRyaXhbMV0pO1xyXG5cdFx0cmVzdWx0WzJdID0gTWF0aC5hYnMobWF0cml4WzJdKTtcclxuXHRcdHJlc3VsdFszXSA9IE1hdGguYWJzKG1hdHJpeFszXSk7XHJcblx0XHRyZXN1bHRbNF0gPSBNYXRoLmFicyhtYXRyaXhbNF0pO1xyXG5cdFx0cmVzdWx0WzVdID0gTWF0aC5hYnMobWF0cml4WzVdKTtcclxuXHRcdHJlc3VsdFs2XSA9IE1hdGguYWJzKG1hdHJpeFs2XSk7XHJcblx0XHRyZXN1bHRbN10gPSBNYXRoLmFicyhtYXRyaXhbN10pO1xyXG5cdFx0cmVzdWx0WzhdID0gTWF0aC5hYnMobWF0cml4WzhdKTtcclxuXHRcdHJlc3VsdFs5XSA9IE1hdGguYWJzKG1hdHJpeFs5XSk7XHJcblx0XHRyZXN1bHRbMTBdID0gTWF0aC5hYnMobWF0cml4WzEwXSk7XHJcblx0XHRyZXN1bHRbMTFdID0gTWF0aC5hYnMobWF0cml4WzExXSk7XHJcblx0XHRyZXN1bHRbMTJdID0gTWF0aC5hYnMobWF0cml4WzEyXSk7XHJcblx0XHRyZXN1bHRbMTNdID0gTWF0aC5hYnMobWF0cml4WzEzXSk7XHJcblx0XHRyZXN1bHRbMTRdID0gTWF0aC5hYnMobWF0cml4WzE0XSk7XHJcblx0XHRyZXN1bHRbMTVdID0gTWF0aC5hYnMobWF0cml4WzE1XSk7XHJcblxyXG5cdFx0cmV0dXJuIHJlc3VsdDtcclxuXHR9XHJcblxyXG5cdHN0YXRpYyBlcXVhbHMobGVmdDogTWF0cml4NCwgcmlnaHQ6IE1hdHJpeDQpOiBib29sZWFuIHtcclxuXHRcdC8vIEdpdmVuIHRoYXQgbW9zdCBtYXRyaWNlcyB3aWxsIGJlIHRyYW5zZm9ybWF0aW9uIG1hdHJpY2VzLCB0aGUgZWxlbWVudHNcclxuXHRcdC8vIGFyZSB0ZXN0ZWQgaW4gb3JkZXIgc3VjaCB0aGF0IHRoZSB0ZXN0IGlzIGxpa2VseSB0byBmYWlsIGFzIGVhcmx5XHJcblx0XHQvLyBhcyBwb3NzaWJsZS4gIEkgX3RoaW5rXyB0aGlzIGlzIGp1c3QgYXMgZnJpZW5kbHkgdG8gdGhlIEwxIGNhY2hlXHJcblx0XHQvLyBhcyB0ZXN0aW5nIGluIGluZGV4IG9yZGVyLiAgSXQgaXMgY2VydGFpbnR5IGZhc3RlciBpbiBwcmFjdGljZS5cclxuXHRcdHJldHVybiAoXHJcblx0XHRcdGxlZnQgPT09IHJpZ2h0IHx8XHJcblx0XHRcdChkZWZpbmVkKGxlZnQpICYmXHJcblx0XHRcdFx0ZGVmaW5lZChyaWdodCkgJiZcclxuXHRcdFx0XHQvLyBUcmFuc2xhdGlvblxyXG5cdFx0XHRcdGxlZnRbMTJdID09PSByaWdodFsxMl0gJiZcclxuXHRcdFx0XHRsZWZ0WzEzXSA9PT0gcmlnaHRbMTNdICYmXHJcblx0XHRcdFx0bGVmdFsxNF0gPT09IHJpZ2h0WzE0XSAmJlxyXG5cdFx0XHRcdC8vIFJvdGF0aW9uL3NjYWxlXHJcblx0XHRcdFx0bGVmdFswXSA9PT0gcmlnaHRbMF0gJiZcclxuXHRcdFx0XHRsZWZ0WzFdID09PSByaWdodFsxXSAmJlxyXG5cdFx0XHRcdGxlZnRbMl0gPT09IHJpZ2h0WzJdICYmXHJcblx0XHRcdFx0bGVmdFs0XSA9PT0gcmlnaHRbNF0gJiZcclxuXHRcdFx0XHRsZWZ0WzVdID09PSByaWdodFs1XSAmJlxyXG5cdFx0XHRcdGxlZnRbNl0gPT09IHJpZ2h0WzZdICYmXHJcblx0XHRcdFx0bGVmdFs4XSA9PT0gcmlnaHRbOF0gJiZcclxuXHRcdFx0XHRsZWZ0WzldID09PSByaWdodFs5XSAmJlxyXG5cdFx0XHRcdGxlZnRbMTBdID09PSByaWdodFsxMF0gJiZcclxuXHRcdFx0XHQvLyBCb3R0b20gcm93XHJcblx0XHRcdFx0bGVmdFszXSA9PT0gcmlnaHRbM10gJiZcclxuXHRcdFx0XHRsZWZ0WzddID09PSByaWdodFs3XSAmJlxyXG5cdFx0XHRcdGxlZnRbMTFdID09PSByaWdodFsxMV0gJiZcclxuXHRcdFx0XHRsZWZ0WzE1XSA9PT0gcmlnaHRbMTVdKVxyXG5cdFx0KTtcclxuXHR9XHJcblxyXG5cdHN0YXRpYyBlcXVhbHNFcHNpbG9uKGxlZnQ6IE1hdHJpeDQsIHJpZ2h0OiBNYXRyaXg0LCBlcHNpbG9uOiBudW1iZXIpOiBib29sZWFuIHtcclxuXHRcdGVwc2lsb24gPSBkZWZhdWx0VmFsdWUoZXBzaWxvbiwgMCk7XHJcblxyXG5cdFx0cmV0dXJuIChcclxuXHRcdFx0bGVmdCA9PT0gcmlnaHQgfHxcclxuXHRcdFx0KGRlZmluZWQobGVmdCkgJiZcclxuXHRcdFx0XHRkZWZpbmVkKHJpZ2h0KSAmJlxyXG5cdFx0XHRcdE1hdGguYWJzKGxlZnRbMF0gLSByaWdodFswXSkgPD0gZXBzaWxvbiAmJlxyXG5cdFx0XHRcdE1hdGguYWJzKGxlZnRbMV0gLSByaWdodFsxXSkgPD0gZXBzaWxvbiAmJlxyXG5cdFx0XHRcdE1hdGguYWJzKGxlZnRbMl0gLSByaWdodFsyXSkgPD0gZXBzaWxvbiAmJlxyXG5cdFx0XHRcdE1hdGguYWJzKGxlZnRbM10gLSByaWdodFszXSkgPD0gZXBzaWxvbiAmJlxyXG5cdFx0XHRcdE1hdGguYWJzKGxlZnRbNF0gLSByaWdodFs0XSkgPD0gZXBzaWxvbiAmJlxyXG5cdFx0XHRcdE1hdGguYWJzKGxlZnRbNV0gLSByaWdodFs1XSkgPD0gZXBzaWxvbiAmJlxyXG5cdFx0XHRcdE1hdGguYWJzKGxlZnRbNl0gLSByaWdodFs2XSkgPD0gZXBzaWxvbiAmJlxyXG5cdFx0XHRcdE1hdGguYWJzKGxlZnRbN10gLSByaWdodFs3XSkgPD0gZXBzaWxvbiAmJlxyXG5cdFx0XHRcdE1hdGguYWJzKGxlZnRbOF0gLSByaWdodFs4XSkgPD0gZXBzaWxvbiAmJlxyXG5cdFx0XHRcdE1hdGguYWJzKGxlZnRbOV0gLSByaWdodFs5XSkgPD0gZXBzaWxvbiAmJlxyXG5cdFx0XHRcdE1hdGguYWJzKGxlZnRbMTBdIC0gcmlnaHRbMTBdKSA8PSBlcHNpbG9uICYmXHJcblx0XHRcdFx0TWF0aC5hYnMobGVmdFsxMV0gLSByaWdodFsxMV0pIDw9IGVwc2lsb24gJiZcclxuXHRcdFx0XHRNYXRoLmFicyhsZWZ0WzEyXSAtIHJpZ2h0WzEyXSkgPD0gZXBzaWxvbiAmJlxyXG5cdFx0XHRcdE1hdGguYWJzKGxlZnRbMTNdIC0gcmlnaHRbMTNdKSA8PSBlcHNpbG9uICYmXHJcblx0XHRcdFx0TWF0aC5hYnMobGVmdFsxNF0gLSByaWdodFsxNF0pIDw9IGVwc2lsb24gJiZcclxuXHRcdFx0XHRNYXRoLmFicyhsZWZ0WzE1XSAtIHJpZ2h0WzE1XSkgPD0gZXBzaWxvbilcclxuXHRcdCk7XHJcblx0fVxyXG5cclxuXHRzdGF0aWMgZ2V0VHJhbnNsYXRpb24obWF0cml4OiBNYXRyaXg0LCByZXN1bHQ6IFZlY3RvcjMpOiBWZWN0b3IzIHtcclxuXHRcdHJlc3VsdC54ID0gbWF0cml4WzEyXTtcclxuXHRcdHJlc3VsdC55ID0gbWF0cml4WzEzXTtcclxuXHRcdHJlc3VsdC56ID0gbWF0cml4WzE0XTtcclxuXHRcdHJldHVybiByZXN1bHQ7XHJcblx0fVxyXG5cclxuXHRzdGF0aWMgZ2V0TWF0cml4MyhtYXRyaXg6IE1hdHJpeDQsIHJlc3VsdDogTWF0cml4Myk6IE1hdHJpeDMge1xyXG5cdFx0cmVzdWx0WzBdID0gbWF0cml4WzBdO1xyXG5cdFx0cmVzdWx0WzFdID0gbWF0cml4WzFdO1xyXG5cdFx0cmVzdWx0WzJdID0gbWF0cml4WzJdO1xyXG5cdFx0cmVzdWx0WzNdID0gbWF0cml4WzRdO1xyXG5cdFx0cmVzdWx0WzRdID0gbWF0cml4WzVdO1xyXG5cdFx0cmVzdWx0WzVdID0gbWF0cml4WzZdO1xyXG5cdFx0cmVzdWx0WzZdID0gbWF0cml4WzhdO1xyXG5cdFx0cmVzdWx0WzddID0gbWF0cml4WzldO1xyXG5cdFx0cmVzdWx0WzhdID0gbWF0cml4WzEwXTtcclxuXHRcdHJldHVybiByZXN1bHQ7XHJcblx0fVxyXG5cclxuXHRzdGF0aWMgaW52ZXJzZShtYXRyaXg6IE1hdHJpeDQsIHJlc3VsdDogTWF0cml4NCkge1xyXG5cdFx0Ly9cclxuXHRcdC8vIFBvcnRlZCBmcm9tOlxyXG5cdFx0Ly8gICBmdHA6Ly9kb3dubG9hZC5pbnRlbC5jb20vZGVzaWduL1BlbnRpdW1JSUkvc21sLzI0NTA0MzAxLnBkZlxyXG5cdFx0Ly9cclxuXHRcdGNvbnN0IHNyYzAgPSBtYXRyaXhbMF07XHJcblx0XHRjb25zdCBzcmMxID0gbWF0cml4WzRdO1xyXG5cdFx0Y29uc3Qgc3JjMiA9IG1hdHJpeFs4XTtcclxuXHRcdGNvbnN0IHNyYzMgPSBtYXRyaXhbMTJdO1xyXG5cdFx0Y29uc3Qgc3JjNCA9IG1hdHJpeFsxXTtcclxuXHRcdGNvbnN0IHNyYzUgPSBtYXRyaXhbNV07XHJcblx0XHRjb25zdCBzcmM2ID0gbWF0cml4WzldO1xyXG5cdFx0Y29uc3Qgc3JjNyA9IG1hdHJpeFsxM107XHJcblx0XHRjb25zdCBzcmM4ID0gbWF0cml4WzJdO1xyXG5cdFx0Y29uc3Qgc3JjOSA9IG1hdHJpeFs2XTtcclxuXHRcdGNvbnN0IHNyYzEwID0gbWF0cml4WzEwXTtcclxuXHRcdGNvbnN0IHNyYzExID0gbWF0cml4WzE0XTtcclxuXHRcdGNvbnN0IHNyYzEyID0gbWF0cml4WzNdO1xyXG5cdFx0Y29uc3Qgc3JjMTMgPSBtYXRyaXhbN107XHJcblx0XHRjb25zdCBzcmMxNCA9IG1hdHJpeFsxMV07XHJcblx0XHRjb25zdCBzcmMxNSA9IG1hdHJpeFsxNV07XHJcblxyXG5cdFx0Ly8gY2FsY3VsYXRlIHBhaXJzIGZvciBmaXJzdCA4IGVsZW1lbnRzIChjb2ZhY3RvcnMpXHJcblx0XHRsZXQgdG1wMCA9IHNyYzEwICogc3JjMTU7XHJcblx0XHRsZXQgdG1wMSA9IHNyYzExICogc3JjMTQ7XHJcblx0XHRsZXQgdG1wMiA9IHNyYzkgKiBzcmMxNTtcclxuXHRcdGxldCB0bXAzID0gc3JjMTEgKiBzcmMxMztcclxuXHRcdGxldCB0bXA0ID0gc3JjOSAqIHNyYzE0O1xyXG5cdFx0bGV0IHRtcDUgPSBzcmMxMCAqIHNyYzEzO1xyXG5cdFx0bGV0IHRtcDYgPSBzcmM4ICogc3JjMTU7XHJcblx0XHRsZXQgdG1wNyA9IHNyYzExICogc3JjMTI7XHJcblx0XHRsZXQgdG1wOCA9IHNyYzggKiBzcmMxNDtcclxuXHRcdGxldCB0bXA5ID0gc3JjMTAgKiBzcmMxMjtcclxuXHRcdGxldCB0bXAxMCA9IHNyYzggKiBzcmMxMztcclxuXHRcdGxldCB0bXAxMSA9IHNyYzkgKiBzcmMxMjtcclxuXHJcblx0XHQvLyBjYWxjdWxhdGUgZmlyc3QgOCBlbGVtZW50cyAoY29mYWN0b3JzKVxyXG5cdFx0Y29uc3QgZHN0MCA9IHRtcDAgKiBzcmM1ICsgdG1wMyAqIHNyYzYgKyB0bXA0ICogc3JjNyAtICh0bXAxICogc3JjNSArIHRtcDIgKiBzcmM2ICsgdG1wNSAqIHNyYzcpO1xyXG5cdFx0Y29uc3QgZHN0MSA9IHRtcDEgKiBzcmM0ICsgdG1wNiAqIHNyYzYgKyB0bXA5ICogc3JjNyAtICh0bXAwICogc3JjNCArIHRtcDcgKiBzcmM2ICsgdG1wOCAqIHNyYzcpO1xyXG5cdFx0Y29uc3QgZHN0MiA9IHRtcDIgKiBzcmM0ICsgdG1wNyAqIHNyYzUgKyB0bXAxMCAqIHNyYzcgLSAodG1wMyAqIHNyYzQgKyB0bXA2ICogc3JjNSArIHRtcDExICogc3JjNyk7XHJcblx0XHRjb25zdCBkc3QzID0gdG1wNSAqIHNyYzQgKyB0bXA4ICogc3JjNSArIHRtcDExICogc3JjNiAtICh0bXA0ICogc3JjNCArIHRtcDkgKiBzcmM1ICsgdG1wMTAgKiBzcmM2KTtcclxuXHRcdGNvbnN0IGRzdDQgPSB0bXAxICogc3JjMSArIHRtcDIgKiBzcmMyICsgdG1wNSAqIHNyYzMgLSAodG1wMCAqIHNyYzEgKyB0bXAzICogc3JjMiArIHRtcDQgKiBzcmMzKTtcclxuXHRcdGNvbnN0IGRzdDUgPSB0bXAwICogc3JjMCArIHRtcDcgKiBzcmMyICsgdG1wOCAqIHNyYzMgLSAodG1wMSAqIHNyYzAgKyB0bXA2ICogc3JjMiArIHRtcDkgKiBzcmMzKTtcclxuXHRcdGNvbnN0IGRzdDYgPSB0bXAzICogc3JjMCArIHRtcDYgKiBzcmMxICsgdG1wMTEgKiBzcmMzIC0gKHRtcDIgKiBzcmMwICsgdG1wNyAqIHNyYzEgKyB0bXAxMCAqIHNyYzMpO1xyXG5cdFx0Y29uc3QgZHN0NyA9IHRtcDQgKiBzcmMwICsgdG1wOSAqIHNyYzEgKyB0bXAxMCAqIHNyYzIgLSAodG1wNSAqIHNyYzAgKyB0bXA4ICogc3JjMSArIHRtcDExICogc3JjMik7XHJcblxyXG5cdFx0Ly8gY2FsY3VsYXRlIHBhaXJzIGZvciBzZWNvbmQgOCBlbGVtZW50cyAoY29mYWN0b3JzKVxyXG5cdFx0dG1wMCA9IHNyYzIgKiBzcmM3O1xyXG5cdFx0dG1wMSA9IHNyYzMgKiBzcmM2O1xyXG5cdFx0dG1wMiA9IHNyYzEgKiBzcmM3O1xyXG5cdFx0dG1wMyA9IHNyYzMgKiBzcmM1O1xyXG5cdFx0dG1wNCA9IHNyYzEgKiBzcmM2O1xyXG5cdFx0dG1wNSA9IHNyYzIgKiBzcmM1O1xyXG5cdFx0dG1wNiA9IHNyYzAgKiBzcmM3O1xyXG5cdFx0dG1wNyA9IHNyYzMgKiBzcmM0O1xyXG5cdFx0dG1wOCA9IHNyYzAgKiBzcmM2O1xyXG5cdFx0dG1wOSA9IHNyYzIgKiBzcmM0O1xyXG5cdFx0dG1wMTAgPSBzcmMwICogc3JjNTtcclxuXHRcdHRtcDExID0gc3JjMSAqIHNyYzQ7XHJcblxyXG5cdFx0Ly8gY2FsY3VsYXRlIHNlY29uZCA4IGVsZW1lbnRzIChjb2ZhY3RvcnMpXHJcblx0XHRjb25zdCBkc3Q4ID0gdG1wMCAqIHNyYzEzICsgdG1wMyAqIHNyYzE0ICsgdG1wNCAqIHNyYzE1IC0gKHRtcDEgKiBzcmMxMyArIHRtcDIgKiBzcmMxNCArIHRtcDUgKiBzcmMxNSk7XHJcblx0XHRjb25zdCBkc3Q5ID0gdG1wMSAqIHNyYzEyICsgdG1wNiAqIHNyYzE0ICsgdG1wOSAqIHNyYzE1IC0gKHRtcDAgKiBzcmMxMiArIHRtcDcgKiBzcmMxNCArIHRtcDggKiBzcmMxNSk7XHJcblx0XHRjb25zdCBkc3QxMCA9IHRtcDIgKiBzcmMxMiArIHRtcDcgKiBzcmMxMyArIHRtcDEwICogc3JjMTUgLSAodG1wMyAqIHNyYzEyICsgdG1wNiAqIHNyYzEzICsgdG1wMTEgKiBzcmMxNSk7XHJcblx0XHRjb25zdCBkc3QxMSA9IHRtcDUgKiBzcmMxMiArIHRtcDggKiBzcmMxMyArIHRtcDExICogc3JjMTQgLSAodG1wNCAqIHNyYzEyICsgdG1wOSAqIHNyYzEzICsgdG1wMTAgKiBzcmMxNCk7XHJcblx0XHRjb25zdCBkc3QxMiA9IHRtcDIgKiBzcmMxMCArIHRtcDUgKiBzcmMxMSArIHRtcDEgKiBzcmM5IC0gKHRtcDQgKiBzcmMxMSArIHRtcDAgKiBzcmM5ICsgdG1wMyAqIHNyYzEwKTtcclxuXHRcdGNvbnN0IGRzdDEzID0gdG1wOCAqIHNyYzExICsgdG1wMCAqIHNyYzggKyB0bXA3ICogc3JjMTAgLSAodG1wNiAqIHNyYzEwICsgdG1wOSAqIHNyYzExICsgdG1wMSAqIHNyYzgpO1xyXG5cdFx0Y29uc3QgZHN0MTQgPSB0bXA2ICogc3JjOSArIHRtcDExICogc3JjMTEgKyB0bXAzICogc3JjOCAtICh0bXAxMCAqIHNyYzExICsgdG1wMiAqIHNyYzggKyB0bXA3ICogc3JjOSk7XHJcblx0XHRjb25zdCBkc3QxNSA9IHRtcDEwICogc3JjMTAgKyB0bXA0ICogc3JjOCArIHRtcDkgKiBzcmM5IC0gKHRtcDggKiBzcmM5ICsgdG1wMTEgKiBzcmMxMCArIHRtcDUgKiBzcmM4KTtcclxuXHJcblx0XHQvLyBjYWxjdWxhdGUgZGV0ZXJtaW5hbnRcclxuXHRcdGxldCBkZXQgPSBzcmMwICogZHN0MCArIHNyYzEgKiBkc3QxICsgc3JjMiAqIGRzdDIgKyBzcmMzICogZHN0MztcclxuXHJcblx0XHRpZiAoTWF0aC5hYnMoZGV0KSA8IEdNYXRoLkVQU0lMT04yMSkge1xyXG5cdFx0XHQvLyBTcGVjaWFsIGNhc2UgZm9yIGEgemVybyBzY2FsZSBtYXRyaXggdGhhdCBjYW4gb2NjdXIsIGZvciBleGFtcGxlLFxyXG5cdFx0XHQvLyB3aGVuIGEgbW9kZWwncyBub2RlIGhhcyBhIFswLCAwLCAwXSBzY2FsZS5cclxuXHRcdFx0aWYgKFxyXG5cdFx0XHRcdE1hdHJpeDMuZXF1YWxzRXBzaWxvbihcclxuXHRcdFx0XHRcdE1hdHJpeDQuZ2V0TWF0cml4MyhtYXRyaXgsIHNjcmF0Y2hJbnZlcnNlUm90YXRpb24pLFxyXG5cdFx0XHRcdFx0c2NyYXRjaE1hdHJpeDNaZXJvLFxyXG5cdFx0XHRcdFx0R01hdGguRVBTSUxPTjdcclxuXHRcdFx0XHQpICYmXHJcblx0XHRcdFx0VmVjdG9yNC5lcXVhbHMoTWF0cml4NC5nZXRSb3cobWF0cml4LCAzLCBzY3JhdGNoQm90dG9tUm93KSwgc2NyYXRjaEV4cGVjdGVkQm90dG9tUm93KVxyXG5cdFx0XHQpIHtcclxuXHRcdFx0XHRyZXN1bHRbMF0gPSAwLjA7XHJcblx0XHRcdFx0cmVzdWx0WzFdID0gMC4wO1xyXG5cdFx0XHRcdHJlc3VsdFsyXSA9IDAuMDtcclxuXHRcdFx0XHRyZXN1bHRbM10gPSAwLjA7XHJcblx0XHRcdFx0cmVzdWx0WzRdID0gMC4wO1xyXG5cdFx0XHRcdHJlc3VsdFs1XSA9IDAuMDtcclxuXHRcdFx0XHRyZXN1bHRbNl0gPSAwLjA7XHJcblx0XHRcdFx0cmVzdWx0WzddID0gMC4wO1xyXG5cdFx0XHRcdHJlc3VsdFs4XSA9IDAuMDtcclxuXHRcdFx0XHRyZXN1bHRbOV0gPSAwLjA7XHJcblx0XHRcdFx0cmVzdWx0WzEwXSA9IDAuMDtcclxuXHRcdFx0XHRyZXN1bHRbMTFdID0gMC4wO1xyXG5cdFx0XHRcdHJlc3VsdFsxMl0gPSAtbWF0cml4WzEyXTtcclxuXHRcdFx0XHRyZXN1bHRbMTNdID0gLW1hdHJpeFsxM107XHJcblx0XHRcdFx0cmVzdWx0WzE0XSA9IC1tYXRyaXhbMTRdO1xyXG5cdFx0XHRcdHJlc3VsdFsxNV0gPSAxLjA7XHJcblx0XHRcdFx0cmV0dXJuIHJlc3VsdDtcclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0dGhyb3cgbmV3IEVycm9yKFwibWF0cml4IGlzIG5vdCBpbnZlcnRpYmxlIGJlY2F1c2UgaXRzIGRldGVybWluYXRlIGlzIHplcm8uXCIpO1xyXG5cdFx0fVxyXG5cclxuXHRcdC8vIGNhbGN1bGF0ZSBtYXRyaXggaW52ZXJzZVxyXG5cdFx0ZGV0ID0gMS4wIC8gZGV0O1xyXG5cclxuXHRcdHJlc3VsdFswXSA9IGRzdDAgKiBkZXQ7XHJcblx0XHRyZXN1bHRbMV0gPSBkc3QxICogZGV0O1xyXG5cdFx0cmVzdWx0WzJdID0gZHN0MiAqIGRldDtcclxuXHRcdHJlc3VsdFszXSA9IGRzdDMgKiBkZXQ7XHJcblx0XHRyZXN1bHRbNF0gPSBkc3Q0ICogZGV0O1xyXG5cdFx0cmVzdWx0WzVdID0gZHN0NSAqIGRldDtcclxuXHRcdHJlc3VsdFs2XSA9IGRzdDYgKiBkZXQ7XHJcblx0XHRyZXN1bHRbN10gPSBkc3Q3ICogZGV0O1xyXG5cdFx0cmVzdWx0WzhdID0gZHN0OCAqIGRldDtcclxuXHRcdHJlc3VsdFs5XSA9IGRzdDkgKiBkZXQ7XHJcblx0XHRyZXN1bHRbMTBdID0gZHN0MTAgKiBkZXQ7XHJcblx0XHRyZXN1bHRbMTFdID0gZHN0MTEgKiBkZXQ7XHJcblx0XHRyZXN1bHRbMTJdID0gZHN0MTIgKiBkZXQ7XHJcblx0XHRyZXN1bHRbMTNdID0gZHN0MTMgKiBkZXQ7XHJcblx0XHRyZXN1bHRbMTRdID0gZHN0MTQgKiBkZXQ7XHJcblx0XHRyZXN1bHRbMTVdID0gZHN0MTUgKiBkZXQ7XHJcblx0XHRyZXR1cm4gcmVzdWx0O1xyXG5cdH1cclxuXHJcblx0c3RhdGljIGludmVyc2VUcmFuc2Zvcm1hdGlvbihtYXRyaXg6IE1hdHJpeDQsIHJlc3VsdDogTWF0cml4NCk6IE1hdHJpeDQge1xyXG5cdFx0Ly8gVGhpcyBmdW5jdGlvbiBpcyBhbiBvcHRpbWl6ZWQgdmVyc2lvbiBvZiB0aGUgYmVsb3cgNCBsaW5lcy5cclxuXHRcdC8vIGNvbnN0IHJUID0gTWF0cml4My50cmFuc3Bvc2UoTWF0cml4NC5nZXRNYXRyaXgzKG1hdHJpeCkpO1xyXG5cdFx0Ly8gY29uc3QgclROID0gTWF0cml4My5uZWdhdGUoclQpO1xyXG5cdFx0Ly8gY29uc3QgclRUID0gTWF0cml4My5tdWx0aXBseUJ5VmVjdG9yKHJUTiwgTWF0cml4NC5nZXRUcmFuc2xhdGlvbihtYXRyaXgpKTtcclxuXHRcdC8vIHJldHVybiBNYXRyaXg0LmZyb21Sb3RhdGlvblRyYW5zbGF0aW9uKHJULCByVFQsIHJlc3VsdCk7XHJcblxyXG5cdFx0Y29uc3QgbWF0cml4MCA9IG1hdHJpeFswXTtcclxuXHRcdGNvbnN0IG1hdHJpeDEgPSBtYXRyaXhbMV07XHJcblx0XHRjb25zdCBtYXRyaXgyID0gbWF0cml4WzJdO1xyXG5cdFx0Y29uc3QgbWF0cml4NCA9IG1hdHJpeFs0XTtcclxuXHRcdGNvbnN0IG1hdHJpeDUgPSBtYXRyaXhbNV07XHJcblx0XHRjb25zdCBtYXRyaXg2ID0gbWF0cml4WzZdO1xyXG5cdFx0Y29uc3QgbWF0cml4OCA9IG1hdHJpeFs4XTtcclxuXHRcdGNvbnN0IG1hdHJpeDkgPSBtYXRyaXhbOV07XHJcblx0XHRjb25zdCBtYXRyaXgxMCA9IG1hdHJpeFsxMF07XHJcblxyXG5cdFx0Y29uc3QgdlggPSBtYXRyaXhbMTJdO1xyXG5cdFx0Y29uc3QgdlkgPSBtYXRyaXhbMTNdO1xyXG5cdFx0Y29uc3QgdlogPSBtYXRyaXhbMTRdO1xyXG5cclxuXHRcdGNvbnN0IHggPSAtbWF0cml4MCAqIHZYIC0gbWF0cml4MSAqIHZZIC0gbWF0cml4MiAqIHZaO1xyXG5cdFx0Y29uc3QgeSA9IC1tYXRyaXg0ICogdlggLSBtYXRyaXg1ICogdlkgLSBtYXRyaXg2ICogdlo7XHJcblx0XHRjb25zdCB6ID0gLW1hdHJpeDggKiB2WCAtIG1hdHJpeDkgKiB2WSAtIG1hdHJpeDEwICogdlo7XHJcblxyXG5cdFx0cmVzdWx0WzBdID0gbWF0cml4MDtcclxuXHRcdHJlc3VsdFsxXSA9IG1hdHJpeDQ7XHJcblx0XHRyZXN1bHRbMl0gPSBtYXRyaXg4O1xyXG5cdFx0cmVzdWx0WzNdID0gMC4wO1xyXG5cdFx0cmVzdWx0WzRdID0gbWF0cml4MTtcclxuXHRcdHJlc3VsdFs1XSA9IG1hdHJpeDU7XHJcblx0XHRyZXN1bHRbNl0gPSBtYXRyaXg5O1xyXG5cdFx0cmVzdWx0WzddID0gMC4wO1xyXG5cdFx0cmVzdWx0WzhdID0gbWF0cml4MjtcclxuXHRcdHJlc3VsdFs5XSA9IG1hdHJpeDY7XHJcblx0XHRyZXN1bHRbMTBdID0gbWF0cml4MTA7XHJcblx0XHRyZXN1bHRbMTFdID0gMC4wO1xyXG5cdFx0cmVzdWx0WzEyXSA9IHg7XHJcblx0XHRyZXN1bHRbMTNdID0geTtcclxuXHRcdHJlc3VsdFsxNF0gPSB6O1xyXG5cdFx0cmVzdWx0WzE1XSA9IDEuMDtcclxuXHRcdHJldHVybiByZXN1bHQ7XHJcblx0fVxyXG5cclxuXHRzdGF0aWMgaW52ZXJzZVRyYW5zcG9zZShtYXRyaXg6IE1hdHJpeDQsIHJlc3VsdDogTWF0cml4NCk6IE1hdHJpeDQge1xyXG5cdFx0cmV0dXJuIE1hdHJpeDQuaW52ZXJzZShNYXRyaXg0LnRyYW5zcG9zZShtYXRyaXgsIHNjcmF0Y2hUcmFuc3Bvc2VNYXRyaXgpLCByZXN1bHQpO1xyXG5cdH1cclxuXHQvKipcclxuXHQgKiBAcHJpdmF0ZVxyXG5cdCAqL1xyXG5cdHN0YXRpYyBlcXVhbHNBcnJheShtYXRyaXg6IE1hdHJpeDQsIGFycmF5OiBBcnJheTxudW1iZXI+LCBvZmZzZXQ6IG51bWJlcik6IGJvb2xlYW4ge1xyXG5cdFx0cmV0dXJuIChcclxuXHRcdFx0bWF0cml4WzBdID09PSBhcnJheVtvZmZzZXRdICYmXHJcblx0XHRcdG1hdHJpeFsxXSA9PT0gYXJyYXlbb2Zmc2V0ICsgMV0gJiZcclxuXHRcdFx0bWF0cml4WzJdID09PSBhcnJheVtvZmZzZXQgKyAyXSAmJlxyXG5cdFx0XHRtYXRyaXhbM10gPT09IGFycmF5W29mZnNldCArIDNdICYmXHJcblx0XHRcdG1hdHJpeFs0XSA9PT0gYXJyYXlbb2Zmc2V0ICsgNF0gJiZcclxuXHRcdFx0bWF0cml4WzVdID09PSBhcnJheVtvZmZzZXQgKyA1XSAmJlxyXG5cdFx0XHRtYXRyaXhbNl0gPT09IGFycmF5W29mZnNldCArIDZdICYmXHJcblx0XHRcdG1hdHJpeFs3XSA9PT0gYXJyYXlbb2Zmc2V0ICsgN10gJiZcclxuXHRcdFx0bWF0cml4WzhdID09PSBhcnJheVtvZmZzZXQgKyA4XSAmJlxyXG5cdFx0XHRtYXRyaXhbOV0gPT09IGFycmF5W29mZnNldCArIDldICYmXHJcblx0XHRcdG1hdHJpeFsxMF0gPT09IGFycmF5W29mZnNldCArIDEwXSAmJlxyXG5cdFx0XHRtYXRyaXhbMTFdID09PSBhcnJheVtvZmZzZXQgKyAxMV0gJiZcclxuXHRcdFx0bWF0cml4WzEyXSA9PT0gYXJyYXlbb2Zmc2V0ICsgMTJdICYmXHJcblx0XHRcdG1hdHJpeFsxM10gPT09IGFycmF5W29mZnNldCArIDEzXSAmJlxyXG5cdFx0XHRtYXRyaXhbMTRdID09PSBhcnJheVtvZmZzZXQgKyAxNF0gJiZcclxuXHRcdFx0bWF0cml4WzE1XSA9PT0gYXJyYXlbb2Zmc2V0ICsgMTVdXHJcblx0XHQpO1xyXG5cdH1cclxufVxyXG5cclxuY29uc3Qgc2NyYXRjaFRyYW5zcG9zZU1hdHJpeCA9IG5ldyBNYXRyaXg0KCk7XHJcblxyXG5jb25zdCBmcm9tQ2FtZXJhRiA9IG5ldyBWZWN0b3IzKCk7XHJcbmNvbnN0IGZyb21DYW1lcmFSID0gbmV3IFZlY3RvcjMoKTtcclxuY29uc3QgZnJvbUNhbWVyYVUgPSBuZXcgVmVjdG9yMygpO1xyXG5cclxuY29uc3Qgc2NhbGVTY3JhdGNoMSA9IG5ldyBWZWN0b3IzKCk7XHJcbmNvbnN0IHNjYWxlU2NyYXRjaDIgPSBuZXcgVmVjdG9yMygpO1xyXG5jb25zdCBzY3JhdGNoQ29sdW1uID0gbmV3IFZlY3RvcjMoKTtcclxuY29uc3Qgc2NhbGVTY3JhdGNoMyA9IG5ldyBWZWN0b3IzKCk7XHJcbmNvbnN0IHNjYWxlU2NyYXRjaDQgPSBuZXcgVmVjdG9yMygpO1xyXG5jb25zdCBzY2FsZVNjcmF0Y2g1ID0gbmV3IFZlY3RvcjMoKTtcclxuY29uc3Qgc2NyYXRjaEludmVyc2VSb3RhdGlvbiA9IG5ldyBNYXRyaXgzKCk7XHJcbmNvbnN0IHNjcmF0Y2hNYXRyaXgzWmVybyA9IG5ldyBNYXRyaXgzKCk7XHJcbmNvbnN0IHNjcmF0Y2hCb3R0b21Sb3cgPSBuZXcgVmVjdG9yNCgpO1xyXG5jb25zdCBzY3JhdGNoRXhwZWN0ZWRCb3R0b21Sb3cgPSBuZXcgVmVjdG9yNCgwLjAsIDAuMCwgMC4wLCAxLjApO1xyXG5jb25zdCB4ID0gbmV3IFZlY3RvcjMoKTtcclxuY29uc3QgeSA9IG5ldyBWZWN0b3IzKCk7XHJcbmNvbnN0IHogPSBuZXcgVmVjdG9yMygpO1xyXG5leHBvcnQgZGVmYXVsdCBNYXRyaXg0O1xyXG4iLCJpbXBvcnQgQ2FtZXJhIGZyb20gXCIuLi9jYW1lcmEvQ2FtZXJhXCI7XHJcbmltcG9ydCBNYXRyaXg0IGZyb20gXCIuLi9tYXRoL01hdHJpeDRcIjtcclxuaW1wb3J0IFBsYW5lIGZyb20gXCIuLi9tYXRoL1BsYW5lXCI7XHJcbmltcG9ydCBWZWN0b3IzIGZyb20gXCIuLi9tYXRoL1ZlY3RvcjNcIjtcclxuaW1wb3J0IGRlZmF1bHRWYWx1ZSBmcm9tIFwiLi4vdXRpbHMvZGVmYXVsdFZhbHVlXCI7XHJcbmltcG9ydCBkZWZpbmVkIGZyb20gXCIuLi91dGlscy9kZWZpbmVkXCI7XHJcbmltcG9ydCB7IEludGVyc2VjdCB9IGZyb20gXCIuL1dlYkdQVUNvbnN0YW50XCI7XHJcblxyXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBCb3VuZGluZ1NwaGVyZSB7XHJcblx0cmFkaXVzOiBudW1iZXI7XHJcblx0Y2VudGVyOiBWZWN0b3IzO1xyXG5cdG9yaWdpblJhZGl1czogbnVtYmVyO1xyXG5cdG9yaWdpbkNlbnRlcjogVmVjdG9yMztcclxuXHRjb25zdHJ1Y3RvcihjZW50ZXI6IFZlY3RvcjMgPSBuZXcgVmVjdG9yMygwLCAwLCAwKSwgcmFkaXVzID0gMCkge1xyXG5cdFx0dGhpcy5jZW50ZXIgPSBjZW50ZXI7XHJcblx0XHR0aGlzLnJhZGl1cyA9IHJhZGl1cztcclxuXHRcdHRoaXMub3JpZ2luQ2VudGVyID0gdGhpcy5jZW50ZXIuY2xvbmUoKTtcclxuXHRcdHRoaXMub3JpZ2luUmFkaXVzID0gcmFkaXVzO1xyXG5cdH1cclxuXHQvKipcclxuXHQgKiBAcGFyYW0ge1ZlY3RvcjNbXX0gW3Bvc2l0aW9uc10gQW4gYXJyYXkgb2YgcG9pbnRzIHRoYXQgdGhlIGJvdW5kaW5nIHNwaGVyZSB3aWxsIGVuY2xvc2UuICBFYWNoIHBvaW50IG11c3QgaGF2ZSA8Y29kZT54PC9jb2RlPiwgPGNvZGU+eTwvY29kZT4sIGFuZCA8Y29kZT56PC9jb2RlPiBwcm9wZXJ0aWVzLlxyXG5cdCAqIEByZXR1cm5zIHtCb3VuZGluZ1NwaGVyZX0gVGhlIG1vZGlmaWVkIHJlc3VsdCBwYXJhbWV0ZXIgb3IgYSBuZXcgQm91bmRpbmdTcGhlcmUgaW5zdGFuY2UgaWYgb25lIHdhcyBub3QgcHJvdmlkZWQuXHJcblx0ICovXHJcblx0c3RhdGljIGZyb21Qb2ludHMocG9zaXRpb25zOiBWZWN0b3IzW10pIHtcclxuXHRcdGNvbnN0IHJlc3VsdCA9IG5ldyBCb3VuZGluZ1NwaGVyZSgpO1xyXG5cclxuXHRcdGlmICghZGVmaW5lZChwb3NpdGlvbnMpIHx8IHBvc2l0aW9ucy5sZW5ndGggPT09IDApIHtcclxuXHRcdFx0cmVzdWx0LmNlbnRlciA9IFZlY3RvcjMuY2xvbmUoVmVjdG9yMy5aRVJPLCByZXN1bHQuY2VudGVyKTtcclxuXHRcdFx0cmVzdWx0LnJhZGl1cyA9IDAuMDtcclxuXHRcdFx0cmV0dXJuIHJlc3VsdDtcclxuXHRcdH1cclxuXHJcblx0XHRjb25zdCBjdXJyZW50UG9zID0gVmVjdG9yMy5jbG9uZShwb3NpdGlvbnNbMF0sIGZyb21Qb2ludHNDdXJyZW50UG9zKTtcclxuXHJcblx0XHRjb25zdCB4TWluID0gVmVjdG9yMy5jbG9uZShjdXJyZW50UG9zLCBmcm9tUG9pbnRzWE1pbik7XHJcblx0XHRjb25zdCB5TWluID0gVmVjdG9yMy5jbG9uZShjdXJyZW50UG9zLCBmcm9tUG9pbnRzWU1pbik7XHJcblx0XHRjb25zdCB6TWluID0gVmVjdG9yMy5jbG9uZShjdXJyZW50UG9zLCBmcm9tUG9pbnRzWk1pbik7XHJcblxyXG5cdFx0Y29uc3QgeE1heCA9IFZlY3RvcjMuY2xvbmUoY3VycmVudFBvcywgZnJvbVBvaW50c1hNYXgpO1xyXG5cdFx0Y29uc3QgeU1heCA9IFZlY3RvcjMuY2xvbmUoY3VycmVudFBvcywgZnJvbVBvaW50c1lNYXgpO1xyXG5cdFx0Y29uc3Qgek1heCA9IFZlY3RvcjMuY2xvbmUoY3VycmVudFBvcywgZnJvbVBvaW50c1pNYXgpO1xyXG5cclxuXHRcdGNvbnN0IG51bVBvc2l0aW9ucyA9IHBvc2l0aW9ucy5sZW5ndGg7XHJcblx0XHRsZXQgaTtcclxuXHRcdGZvciAoaSA9IDE7IGkgPCBudW1Qb3NpdGlvbnM7IGkrKykge1xyXG5cdFx0XHRWZWN0b3IzLmNsb25lKHBvc2l0aW9uc1tpXSwgY3VycmVudFBvcyk7XHJcblxyXG5cdFx0XHRjb25zdCB4ID0gY3VycmVudFBvcy54O1xyXG5cdFx0XHRjb25zdCB5ID0gY3VycmVudFBvcy55O1xyXG5cdFx0XHRjb25zdCB6ID0gY3VycmVudFBvcy56O1xyXG5cclxuXHRcdFx0Ly8gU3RvcmUgcG9pbnRzIGNvbnRhaW5pbmcgdGhlIHRoZSBzbWFsbGVzdCBhbmQgbGFyZ2VzdCBjb21wb25lbnRzXHJcblx0XHRcdGlmICh4IDwgeE1pbi54KSB7XHJcblx0XHRcdFx0VmVjdG9yMy5jbG9uZShjdXJyZW50UG9zLCB4TWluKTtcclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0aWYgKHggPiB4TWF4LngpIHtcclxuXHRcdFx0XHRWZWN0b3IzLmNsb25lKGN1cnJlbnRQb3MsIHhNYXgpO1xyXG5cdFx0XHR9XHJcblxyXG5cdFx0XHRpZiAoeSA8IHlNaW4ueSkge1xyXG5cdFx0XHRcdFZlY3RvcjMuY2xvbmUoY3VycmVudFBvcywgeU1pbik7XHJcblx0XHRcdH1cclxuXHJcblx0XHRcdGlmICh5ID4geU1heC55KSB7XHJcblx0XHRcdFx0VmVjdG9yMy5jbG9uZShjdXJyZW50UG9zLCB5TWF4KTtcclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0aWYgKHogPCB6TWluLnopIHtcclxuXHRcdFx0XHRWZWN0b3IzLmNsb25lKGN1cnJlbnRQb3MsIHpNaW4pO1xyXG5cdFx0XHR9XHJcblxyXG5cdFx0XHRpZiAoeiA+IHpNYXgueikge1xyXG5cdFx0XHRcdFZlY3RvcjMuY2xvbmUoY3VycmVudFBvcywgek1heCk7XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHJcblx0XHQvLyBDb21wdXRlIHgtLCB5LSwgYW5kIHotc3BhbnMgKFNxdWFyZWQgZGlzdGFuY2VzIGIvbiBlYWNoIGNvbXBvbmVudCdzIG1pbi4gYW5kIG1heC4pLlxyXG5cdFx0Y29uc3QgeFNwYW4gPSBWZWN0b3IzLm1hZ25pdHVkZVNxdWFyZWQoVmVjdG9yMy5zdWJ0cmFjdCh4TWF4LCB4TWluLCBmcm9tUG9pbnRzU2NyYXRjaCkpO1xyXG5cdFx0Y29uc3QgeVNwYW4gPSBWZWN0b3IzLm1hZ25pdHVkZVNxdWFyZWQoVmVjdG9yMy5zdWJ0cmFjdCh5TWF4LCB5TWluLCBmcm9tUG9pbnRzU2NyYXRjaCkpO1xyXG5cdFx0Y29uc3QgelNwYW4gPSBWZWN0b3IzLm1hZ25pdHVkZVNxdWFyZWQoVmVjdG9yMy5zdWJ0cmFjdCh6TWF4LCB6TWluLCBmcm9tUG9pbnRzU2NyYXRjaCkpO1xyXG5cclxuXHRcdC8vIFNldCB0aGUgZGlhbWV0ZXIgZW5kcG9pbnRzIHRvIHRoZSBsYXJnZXN0IHNwYW4uXHJcblx0XHRsZXQgZGlhbWV0ZXIxID0geE1pbjtcclxuXHRcdGxldCBkaWFtZXRlcjIgPSB4TWF4O1xyXG5cdFx0bGV0IG1heFNwYW4gPSB4U3BhbjtcclxuXHRcdGlmICh5U3BhbiA+IG1heFNwYW4pIHtcclxuXHRcdFx0bWF4U3BhbiA9IHlTcGFuO1xyXG5cdFx0XHRkaWFtZXRlcjEgPSB5TWluO1xyXG5cdFx0XHRkaWFtZXRlcjIgPSB5TWF4O1xyXG5cdFx0fVxyXG5cdFx0aWYgKHpTcGFuID4gbWF4U3Bhbikge1xyXG5cdFx0XHRtYXhTcGFuID0gelNwYW47XHJcblx0XHRcdGRpYW1ldGVyMSA9IHpNaW47XHJcblx0XHRcdGRpYW1ldGVyMiA9IHpNYXg7XHJcblx0XHR9XHJcblxyXG5cdFx0Ly8gQ2FsY3VsYXRlIHRoZSBjZW50ZXIgb2YgdGhlIGluaXRpYWwgc3BoZXJlIGZvdW5kIGJ5IFJpdHRlcidzIGFsZ29yaXRobVxyXG5cdFx0Y29uc3Qgcml0dGVyQ2VudGVyID0gZnJvbVBvaW50c1JpdHRlckNlbnRlcjtcclxuXHRcdHJpdHRlckNlbnRlci54ID0gKGRpYW1ldGVyMS54ICsgZGlhbWV0ZXIyLngpICogMC41O1xyXG5cdFx0cml0dGVyQ2VudGVyLnkgPSAoZGlhbWV0ZXIxLnkgKyBkaWFtZXRlcjIueSkgKiAwLjU7XHJcblx0XHRyaXR0ZXJDZW50ZXIueiA9IChkaWFtZXRlcjEueiArIGRpYW1ldGVyMi56KSAqIDAuNTtcclxuXHJcblx0XHQvLyBDYWxjdWxhdGUgdGhlIHJhZGl1cyBvZiB0aGUgaW5pdGlhbCBzcGhlcmUgZm91bmQgYnkgUml0dGVyJ3MgYWxnb3JpdGhtXHJcblx0XHRsZXQgcmFkaXVzU3F1YXJlZCA9IFZlY3RvcjMubWFnbml0dWRlU3F1YXJlZChWZWN0b3IzLnN1YnRyYWN0KGRpYW1ldGVyMiwgcml0dGVyQ2VudGVyLCBmcm9tUG9pbnRzU2NyYXRjaCkpO1xyXG5cdFx0bGV0IHJpdHRlclJhZGl1cyA9IE1hdGguc3FydChyYWRpdXNTcXVhcmVkKTtcclxuXHJcblx0XHQvLyBGaW5kIHRoZSBjZW50ZXIgb2YgdGhlIHNwaGVyZSBmb3VuZCB1c2luZyB0aGUgTmFpdmUgbWV0aG9kLlxyXG5cdFx0Y29uc3QgbWluQm94UHQgPSBmcm9tUG9pbnRzTWluQm94UHQ7XHJcblx0XHRtaW5Cb3hQdC54ID0geE1pbi54O1xyXG5cdFx0bWluQm94UHQueSA9IHlNaW4ueTtcclxuXHRcdG1pbkJveFB0LnogPSB6TWluLno7XHJcblxyXG5cdFx0Y29uc3QgbWF4Qm94UHQgPSBmcm9tUG9pbnRzTWF4Qm94UHQ7XHJcblx0XHRtYXhCb3hQdC54ID0geE1heC54O1xyXG5cdFx0bWF4Qm94UHQueSA9IHlNYXgueTtcclxuXHRcdG1heEJveFB0LnogPSB6TWF4Lno7XHJcblxyXG5cdFx0Y29uc3QgbmFpdmVDZW50ZXIgPSBWZWN0b3IzLm1pZHBvaW50KG1pbkJveFB0LCBtYXhCb3hQdCwgZnJvbVBvaW50c05haXZlQ2VudGVyU2NyYXRjaCk7XHJcblxyXG5cdFx0Ly8gQmVnaW4gMm5kIHBhc3MgdG8gZmluZCBuYWl2ZSByYWRpdXMgYW5kIG1vZGlmeSB0aGUgcml0dGVyIHNwaGVyZS5cclxuXHRcdGxldCBuYWl2ZVJhZGl1cyA9IDA7XHJcblx0XHRmb3IgKGkgPSAwOyBpIDwgbnVtUG9zaXRpb25zOyBpKyspIHtcclxuXHRcdFx0VmVjdG9yMy5jbG9uZShwb3NpdGlvbnNbaV0sIGN1cnJlbnRQb3MpO1xyXG5cclxuXHRcdFx0Ly8gRmluZCB0aGUgZnVydGhlc3QgcG9pbnQgZnJvbSB0aGUgbmFpdmUgY2VudGVyIHRvIGNhbGN1bGF0ZSB0aGUgbmFpdmUgcmFkaXVzLlxyXG5cdFx0XHRjb25zdCByID0gVmVjdG9yMy5tYWduaXR1ZGUoVmVjdG9yMy5zdWJ0cmFjdChjdXJyZW50UG9zLCBuYWl2ZUNlbnRlciwgZnJvbVBvaW50c1NjcmF0Y2gpKTtcclxuXHRcdFx0aWYgKHIgPiBuYWl2ZVJhZGl1cykge1xyXG5cdFx0XHRcdG5haXZlUmFkaXVzID0gcjtcclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0Ly8gTWFrZSBhZGp1c3RtZW50cyB0byB0aGUgUml0dGVyIFNwaGVyZSB0byBpbmNsdWRlIGFsbCBwb2ludHMuXHJcblx0XHRcdGNvbnN0IG9sZENlbnRlclRvUG9pbnRTcXVhcmVkID0gVmVjdG9yMy5tYWduaXR1ZGVTcXVhcmVkKFxyXG5cdFx0XHRcdFZlY3RvcjMuc3VidHJhY3QoY3VycmVudFBvcywgcml0dGVyQ2VudGVyLCBmcm9tUG9pbnRzU2NyYXRjaClcclxuXHRcdFx0KTtcclxuXHRcdFx0aWYgKG9sZENlbnRlclRvUG9pbnRTcXVhcmVkID4gcmFkaXVzU3F1YXJlZCkge1xyXG5cdFx0XHRcdGNvbnN0IG9sZENlbnRlclRvUG9pbnQgPSBNYXRoLnNxcnQob2xkQ2VudGVyVG9Qb2ludFNxdWFyZWQpO1xyXG5cdFx0XHRcdC8vIENhbGN1bGF0ZSBuZXcgcmFkaXVzIHRvIGluY2x1ZGUgdGhlIHBvaW50IHRoYXQgbGllcyBvdXRzaWRlXHJcblx0XHRcdFx0cml0dGVyUmFkaXVzID0gKHJpdHRlclJhZGl1cyArIG9sZENlbnRlclRvUG9pbnQpICogMC41O1xyXG5cdFx0XHRcdHJhZGl1c1NxdWFyZWQgPSByaXR0ZXJSYWRpdXMgKiByaXR0ZXJSYWRpdXM7XHJcblx0XHRcdFx0Ly8gQ2FsY3VsYXRlIGNlbnRlciBvZiBuZXcgUml0dGVyIHNwaGVyZVxyXG5cdFx0XHRcdGNvbnN0IG9sZFRvTmV3ID0gb2xkQ2VudGVyVG9Qb2ludCAtIHJpdHRlclJhZGl1cztcclxuXHRcdFx0XHRyaXR0ZXJDZW50ZXIueCA9IChyaXR0ZXJSYWRpdXMgKiByaXR0ZXJDZW50ZXIueCArIG9sZFRvTmV3ICogY3VycmVudFBvcy54KSAvIG9sZENlbnRlclRvUG9pbnQ7XHJcblx0XHRcdFx0cml0dGVyQ2VudGVyLnkgPSAocml0dGVyUmFkaXVzICogcml0dGVyQ2VudGVyLnkgKyBvbGRUb05ldyAqIGN1cnJlbnRQb3MueSkgLyBvbGRDZW50ZXJUb1BvaW50O1xyXG5cdFx0XHRcdHJpdHRlckNlbnRlci56ID0gKHJpdHRlclJhZGl1cyAqIHJpdHRlckNlbnRlci56ICsgb2xkVG9OZXcgKiBjdXJyZW50UG9zLnopIC8gb2xkQ2VudGVyVG9Qb2ludDtcclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cclxuXHRcdGlmIChyaXR0ZXJSYWRpdXMgPCBuYWl2ZVJhZGl1cykge1xyXG5cdFx0XHRWZWN0b3IzLmNsb25lKHJpdHRlckNlbnRlciwgcmVzdWx0LmNlbnRlcik7XHJcblx0XHRcdHJlc3VsdC5yYWRpdXMgPSByaXR0ZXJSYWRpdXM7XHJcblx0XHR9IGVsc2Uge1xyXG5cdFx0XHRWZWN0b3IzLmNsb25lKG5haXZlQ2VudGVyLCByZXN1bHQuY2VudGVyKTtcclxuXHRcdFx0cmVzdWx0LnJhZGl1cyA9IG5haXZlUmFkaXVzO1xyXG5cdFx0fVxyXG5cclxuXHRcdHJldHVybiByZXN1bHQ7XHJcblx0fVxyXG5cdC8qKlxyXG5cdCAqIENvbXB1dGVzIGEgdGlnaHQtZml0dGluZyBib3VuZGluZyBzcGhlcmUgZW5jbG9zaW5nIGEgbGlzdCBvZiAzRCBwb2ludHMsIHdoZXJlIHRoZSBwb2ludHMgYXJlXHJcblx0ICogc3RvcmVkIGluIGEgZmxhdCBhcnJheSBpbiBYLCBZLCBaLCBvcmRlci4gIFRoZSBib3VuZGluZyBzcGhlcmUgaXMgY29tcHV0ZWQgYnkgcnVubmluZyB0d29cclxuXHQgKiBhbGdvcml0aG1zLCBhIG5haXZlIGFsZ29yaXRobSBhbmQgUml0dGVyJ3MgYWxnb3JpdGhtLiBUaGUgc21hbGxlciBvZiB0aGUgdHdvIHNwaGVyZXMgaXMgdXNlZCB0b1xyXG5cdCAqIGVuc3VyZSBhIHRpZ2h0IGZpdC5cclxuXHQgKlxyXG5cdCAqIEBwYXJhbSB7TnVtYmVyW119IFtwb3NpdGlvbnNdIEFuIGFycmF5IG9mIHBvaW50cyB0aGF0IHRoZSBib3VuZGluZyBzcGhlcmUgd2lsbCBlbmNsb3NlLiAgRWFjaCBwb2ludFxyXG5cdCAqICAgICAgICBpcyBmb3JtZWQgZnJvbSB0aHJlZSBlbGVtZW50cyBpbiB0aGUgYXJyYXkgaW4gdGhlIG9yZGVyIFgsIFksIFouXHJcblx0ICogQHBhcmFtIHtWZWN0b3IzfSBbY2VudGVyPVZlY3RvcjMuWkVST10gVGhlIHBvc2l0aW9uIHRvIHdoaWNoIHRoZSBwb3NpdGlvbnMgYXJlIHJlbGF0aXZlLCB3aGljaCBuZWVkIG5vdCBiZSB0aGVcclxuXHQgKiAgICAgICAgb3JpZ2luIG9mIHRoZSBjb29yZGluYXRlIHN5c3RlbS4gIFRoaXMgaXMgdXNlZnVsIHdoZW4gdGhlIHBvc2l0aW9ucyBhcmUgdG8gYmUgdXNlZCBmb3JcclxuXHQgKiAgICAgICAgcmVsYXRpdmUtdG8tY2VudGVyIChSVEMpIHJlbmRlcmluZy5cclxuXHQgKiBAcGFyYW0ge051bWJlcn0gW3N0cmlkZT0zXSBUaGUgbnVtYmVyIG9mIGFycmF5IGVsZW1lbnRzIHBlciB2ZXJ0ZXguICBJdCBtdXN0IGJlIGF0IGxlYXN0IDMsIGJ1dCBpdCBtYXlcclxuXHQgKiAgICAgICAgYmUgaGlnaGVyLiAgUmVnYXJkbGVzcyBvZiB0aGUgdmFsdWUgb2YgdGhpcyBwYXJhbWV0ZXIsIHRoZSBYIGNvb3JkaW5hdGUgb2YgdGhlIGZpcnN0IHBvc2l0aW9uXHJcblx0ICogICAgICAgIGlzIGF0IGFycmF5IGluZGV4IDAsIHRoZSBZIGNvb3JkaW5hdGUgaXMgYXQgYXJyYXkgaW5kZXggMSwgYW5kIHRoZSBaIGNvb3JkaW5hdGUgaXMgYXQgYXJyYXkgaW5kZXhcclxuXHQgKiAgICAgICAgMi4gIFdoZW4gc3RyaWRlIGlzIDMsIHRoZSBYIGNvb3JkaW5hdGUgb2YgdGhlIG5leHQgcG9zaXRpb24gdGhlbiBiZWdpbnMgYXQgYXJyYXkgaW5kZXggMy4gIElmXHJcblx0ICogICAgICAgIHRoZSBzdHJpZGUgaXMgNSwgaG93ZXZlciwgdHdvIGFycmF5IGVsZW1lbnRzIGFyZSBza2lwcGVkIGFuZCB0aGUgbmV4dCBwb3NpdGlvbiBiZWdpbnMgYXQgYXJyYXlcclxuXHQgKiAgICAgICAgaW5kZXggNS5cclxuXHQgKiBAcGFyYW0ge0JvdW5kaW5nU3BoZXJlfSBbcmVzdWx0XSBUaGUgb2JqZWN0IG9udG8gd2hpY2ggdG8gc3RvcmUgdGhlIHJlc3VsdC5cclxuXHQgKiBAcmV0dXJucyB7Qm91bmRpbmdTcGhlcmV9IFRoZSBtb2RpZmllZCByZXN1bHQgcGFyYW1ldGVyIG9yIGEgbmV3IEJvdW5kaW5nU3BoZXJlIGluc3RhbmNlIGlmIG9uZSB3YXMgbm90IHByb3ZpZGVkLlxyXG5cdCAqXHJcblx0ICogQGV4YW1wbGVcclxuXHQgKiAvLyBDb21wdXRlIHRoZSBib3VuZGluZyBzcGhlcmUgZnJvbSAzIHBvc2l0aW9ucywgZWFjaCBzcGVjaWZpZWQgcmVsYXRpdmUgdG8gYSBjZW50ZXIuXHJcblx0ICogLy8gSW4gYWRkaXRpb24gdG8gdGhlIFgsIFksIGFuZCBaIGNvb3JkaW5hdGVzLCB0aGUgcG9pbnRzIGFycmF5IGNvbnRhaW5zIHR3byBhZGRpdGlvbmFsXHJcblx0ICogLy8gZWxlbWVudHMgcGVyIHBvaW50IHdoaWNoIGFyZSBpZ25vcmVkIGZvciB0aGUgcHVycG9zZSBvZiBjb21wdXRpbmcgdGhlIGJvdW5kaW5nIHNwaGVyZS5cclxuXHQgKiBjb25zdCBjZW50ZXIgPSBuZXcgVmVjdG9yMygxLjAsIDIuMCwgMy4wKTtcclxuXHQgKiBjb25zdCBwb2ludHMgPSBbMS4wLCAyLjAsIDMuMCwgMC4xLCAwLjIsXHJcblx0ICogICAgICAgICAgICAgICA0LjAsIDUuMCwgNi4wLCAwLjEsIDAuMixcclxuXHQgKiAgICAgICAgICAgICAgIDcuMCwgOC4wLCA5LjAsIDAuMSwgMC4yXTtcclxuXHQgKiBjb25zdCBzcGhlcmUgPSBCb3VuZGluZ1NwaGVyZS5mcm9tVmVydGljZXMocG9pbnRzLCBjZW50ZXIsIDUpO1xyXG5cdCAqXHJcblx0ICovXHJcblx0c3RhdGljIGZyb21WZXJ0aWNlcyhwb3NpdGlvbnM6IG51bWJlcltdLCBjZW50ZXI6IFZlY3RvcjMgPSBWZWN0b3IzLlpFUk8sIHN0cmlkZSA9IDMpIHtcclxuXHRcdGNvbnN0IHJlc3VsdCA9IG5ldyBCb3VuZGluZ1NwaGVyZSgpO1xyXG5cclxuXHRcdGlmICghZGVmaW5lZChwb3NpdGlvbnMpIHx8IHBvc2l0aW9ucy5sZW5ndGggPT09IDApIHtcclxuXHRcdFx0cmVzdWx0LmNlbnRlciA9IFZlY3RvcjMuY2xvbmUoVmVjdG9yMy5aRVJPLCByZXN1bHQuY2VudGVyKTtcclxuXHRcdFx0cmVzdWx0LnJhZGl1cyA9IDAuMDtcclxuXHRcdFx0cmV0dXJuIHJlc3VsdDtcclxuXHRcdH1cclxuXHJcblx0XHRjZW50ZXIgPSBkZWZhdWx0VmFsdWUoY2VudGVyLCBWZWN0b3IzLlpFUk8pO1xyXG5cclxuXHRcdHN0cmlkZSA9IGRlZmF1bHRWYWx1ZShzdHJpZGUsIDMpO1xyXG5cclxuXHRcdGNvbnN0IGN1cnJlbnRQb3MgPSBmcm9tUG9pbnRzQ3VycmVudFBvcztcclxuXHRcdGN1cnJlbnRQb3MueCA9IHBvc2l0aW9uc1swXSArIGNlbnRlci54O1xyXG5cdFx0Y3VycmVudFBvcy55ID0gcG9zaXRpb25zWzFdICsgY2VudGVyLnk7XHJcblx0XHRjdXJyZW50UG9zLnogPSBwb3NpdGlvbnNbMl0gKyBjZW50ZXIuejtcclxuXHJcblx0XHRjb25zdCB4TWluID0gVmVjdG9yMy5jbG9uZShjdXJyZW50UG9zLCBmcm9tUG9pbnRzWE1pbik7XHJcblx0XHRjb25zdCB5TWluID0gVmVjdG9yMy5jbG9uZShjdXJyZW50UG9zLCBmcm9tUG9pbnRzWU1pbik7XHJcblx0XHRjb25zdCB6TWluID0gVmVjdG9yMy5jbG9uZShjdXJyZW50UG9zLCBmcm9tUG9pbnRzWk1pbik7XHJcblxyXG5cdFx0Y29uc3QgeE1heCA9IFZlY3RvcjMuY2xvbmUoY3VycmVudFBvcywgZnJvbVBvaW50c1hNYXgpO1xyXG5cdFx0Y29uc3QgeU1heCA9IFZlY3RvcjMuY2xvbmUoY3VycmVudFBvcywgZnJvbVBvaW50c1lNYXgpO1xyXG5cdFx0Y29uc3Qgek1heCA9IFZlY3RvcjMuY2xvbmUoY3VycmVudFBvcywgZnJvbVBvaW50c1pNYXgpO1xyXG5cclxuXHRcdGNvbnN0IG51bUVsZW1lbnRzID0gcG9zaXRpb25zLmxlbmd0aDtcclxuXHRcdGxldCBpO1xyXG5cdFx0Zm9yIChpID0gMDsgaSA8IG51bUVsZW1lbnRzOyBpICs9IHN0cmlkZSkge1xyXG5cdFx0XHRjb25zdCB4ID0gcG9zaXRpb25zW2ldICsgY2VudGVyLng7XHJcblx0XHRcdGNvbnN0IHkgPSBwb3NpdGlvbnNbaSArIDFdICsgY2VudGVyLnk7XHJcblx0XHRcdGNvbnN0IHogPSBwb3NpdGlvbnNbaSArIDJdICsgY2VudGVyLno7XHJcblxyXG5cdFx0XHRjdXJyZW50UG9zLnggPSB4O1xyXG5cdFx0XHRjdXJyZW50UG9zLnkgPSB5O1xyXG5cdFx0XHRjdXJyZW50UG9zLnogPSB6O1xyXG5cclxuXHRcdFx0Ly8gU3RvcmUgcG9pbnRzIGNvbnRhaW5pbmcgdGhlIHRoZSBzbWFsbGVzdCBhbmQgbGFyZ2VzdCBjb21wb25lbnRzXHJcblx0XHRcdGlmICh4IDwgeE1pbi54KSB7XHJcblx0XHRcdFx0VmVjdG9yMy5jbG9uZShjdXJyZW50UG9zLCB4TWluKTtcclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0aWYgKHggPiB4TWF4LngpIHtcclxuXHRcdFx0XHRWZWN0b3IzLmNsb25lKGN1cnJlbnRQb3MsIHhNYXgpO1xyXG5cdFx0XHR9XHJcblxyXG5cdFx0XHRpZiAoeSA8IHlNaW4ueSkge1xyXG5cdFx0XHRcdFZlY3RvcjMuY2xvbmUoY3VycmVudFBvcywgeU1pbik7XHJcblx0XHRcdH1cclxuXHJcblx0XHRcdGlmICh5ID4geU1heC55KSB7XHJcblx0XHRcdFx0VmVjdG9yMy5jbG9uZShjdXJyZW50UG9zLCB5TWF4KTtcclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0aWYgKHogPCB6TWluLnopIHtcclxuXHRcdFx0XHRWZWN0b3IzLmNsb25lKGN1cnJlbnRQb3MsIHpNaW4pO1xyXG5cdFx0XHR9XHJcblxyXG5cdFx0XHRpZiAoeiA+IHpNYXgueikge1xyXG5cdFx0XHRcdFZlY3RvcjMuY2xvbmUoY3VycmVudFBvcywgek1heCk7XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHJcblx0XHQvLyBDb21wdXRlIHgtLCB5LSwgYW5kIHotc3BhbnMgKFNxdWFyZWQgZGlzdGFuY2VzIGIvbiBlYWNoIGNvbXBvbmVudCdzIG1pbi4gYW5kIG1heC4pLlxyXG5cdFx0Y29uc3QgeFNwYW4gPSBWZWN0b3IzLm1hZ25pdHVkZVNxdWFyZWQoVmVjdG9yMy5zdWJ0cmFjdCh4TWF4LCB4TWluLCBmcm9tUG9pbnRzU2NyYXRjaCkpO1xyXG5cdFx0Y29uc3QgeVNwYW4gPSBWZWN0b3IzLm1hZ25pdHVkZVNxdWFyZWQoVmVjdG9yMy5zdWJ0cmFjdCh5TWF4LCB5TWluLCBmcm9tUG9pbnRzU2NyYXRjaCkpO1xyXG5cdFx0Y29uc3QgelNwYW4gPSBWZWN0b3IzLm1hZ25pdHVkZVNxdWFyZWQoVmVjdG9yMy5zdWJ0cmFjdCh6TWF4LCB6TWluLCBmcm9tUG9pbnRzU2NyYXRjaCkpO1xyXG5cclxuXHRcdC8vIFNldCB0aGUgZGlhbWV0ZXIgZW5kcG9pbnRzIHRvIHRoZSBsYXJnZXN0IHNwYW4uXHJcblx0XHRsZXQgZGlhbWV0ZXIxID0geE1pbjtcclxuXHRcdGxldCBkaWFtZXRlcjIgPSB4TWF4O1xyXG5cdFx0bGV0IG1heFNwYW4gPSB4U3BhbjtcclxuXHRcdGlmICh5U3BhbiA+IG1heFNwYW4pIHtcclxuXHRcdFx0bWF4U3BhbiA9IHlTcGFuO1xyXG5cdFx0XHRkaWFtZXRlcjEgPSB5TWluO1xyXG5cdFx0XHRkaWFtZXRlcjIgPSB5TWF4O1xyXG5cdFx0fVxyXG5cdFx0aWYgKHpTcGFuID4gbWF4U3Bhbikge1xyXG5cdFx0XHRtYXhTcGFuID0gelNwYW47XHJcblx0XHRcdGRpYW1ldGVyMSA9IHpNaW47XHJcblx0XHRcdGRpYW1ldGVyMiA9IHpNYXg7XHJcblx0XHR9XHJcblxyXG5cdFx0Ly8gQ2FsY3VsYXRlIHRoZSBjZW50ZXIgb2YgdGhlIGluaXRpYWwgc3BoZXJlIGZvdW5kIGJ5IFJpdHRlcidzIGFsZ29yaXRobVxyXG5cdFx0Y29uc3Qgcml0dGVyQ2VudGVyID0gZnJvbVBvaW50c1JpdHRlckNlbnRlcjtcclxuXHRcdHJpdHRlckNlbnRlci54ID0gKGRpYW1ldGVyMS54ICsgZGlhbWV0ZXIyLngpICogMC41O1xyXG5cdFx0cml0dGVyQ2VudGVyLnkgPSAoZGlhbWV0ZXIxLnkgKyBkaWFtZXRlcjIueSkgKiAwLjU7XHJcblx0XHRyaXR0ZXJDZW50ZXIueiA9IChkaWFtZXRlcjEueiArIGRpYW1ldGVyMi56KSAqIDAuNTtcclxuXHJcblx0XHQvLyBDYWxjdWxhdGUgdGhlIHJhZGl1cyBvZiB0aGUgaW5pdGlhbCBzcGhlcmUgZm91bmQgYnkgUml0dGVyJ3MgYWxnb3JpdGhtXHJcblx0XHRsZXQgcmFkaXVzU3F1YXJlZCA9IFZlY3RvcjMubWFnbml0dWRlU3F1YXJlZChWZWN0b3IzLnN1YnRyYWN0KGRpYW1ldGVyMiwgcml0dGVyQ2VudGVyLCBmcm9tUG9pbnRzU2NyYXRjaCkpO1xyXG5cdFx0bGV0IHJpdHRlclJhZGl1cyA9IE1hdGguc3FydChyYWRpdXNTcXVhcmVkKTtcclxuXHJcblx0XHQvLyBGaW5kIHRoZSBjZW50ZXIgb2YgdGhlIHNwaGVyZSBmb3VuZCB1c2luZyB0aGUgTmFpdmUgbWV0aG9kLlxyXG5cdFx0Y29uc3QgbWluQm94UHQgPSBmcm9tUG9pbnRzTWluQm94UHQ7XHJcblx0XHRtaW5Cb3hQdC54ID0geE1pbi54O1xyXG5cdFx0bWluQm94UHQueSA9IHlNaW4ueTtcclxuXHRcdG1pbkJveFB0LnogPSB6TWluLno7XHJcblxyXG5cdFx0Y29uc3QgbWF4Qm94UHQgPSBmcm9tUG9pbnRzTWF4Qm94UHQ7XHJcblx0XHRtYXhCb3hQdC54ID0geE1heC54O1xyXG5cdFx0bWF4Qm94UHQueSA9IHlNYXgueTtcclxuXHRcdG1heEJveFB0LnogPSB6TWF4Lno7XHJcblxyXG5cdFx0Y29uc3QgbmFpdmVDZW50ZXIgPSBWZWN0b3IzLm1pZHBvaW50KG1pbkJveFB0LCBtYXhCb3hQdCwgZnJvbVBvaW50c05haXZlQ2VudGVyU2NyYXRjaCk7XHJcblxyXG5cdFx0Ly8gQmVnaW4gMm5kIHBhc3MgdG8gZmluZCBuYWl2ZSByYWRpdXMgYW5kIG1vZGlmeSB0aGUgcml0dGVyIHNwaGVyZS5cclxuXHRcdGxldCBuYWl2ZVJhZGl1cyA9IDA7XHJcblx0XHRmb3IgKGkgPSAwOyBpIDwgbnVtRWxlbWVudHM7IGkgKz0gc3RyaWRlKSB7XHJcblx0XHRcdGN1cnJlbnRQb3MueCA9IHBvc2l0aW9uc1tpXSArIGNlbnRlci54O1xyXG5cdFx0XHRjdXJyZW50UG9zLnkgPSBwb3NpdGlvbnNbaSArIDFdICsgY2VudGVyLnk7XHJcblx0XHRcdGN1cnJlbnRQb3MueiA9IHBvc2l0aW9uc1tpICsgMl0gKyBjZW50ZXIuejtcclxuXHJcblx0XHRcdC8vIEZpbmQgdGhlIGZ1cnRoZXN0IHBvaW50IGZyb20gdGhlIG5haXZlIGNlbnRlciB0byBjYWxjdWxhdGUgdGhlIG5haXZlIHJhZGl1cy5cclxuXHRcdFx0Y29uc3QgciA9IFZlY3RvcjMubWFnbml0dWRlKFZlY3RvcjMuc3VidHJhY3QoY3VycmVudFBvcywgbmFpdmVDZW50ZXIsIGZyb21Qb2ludHNTY3JhdGNoKSk7XHJcblx0XHRcdGlmIChyID4gbmFpdmVSYWRpdXMpIHtcclxuXHRcdFx0XHRuYWl2ZVJhZGl1cyA9IHI7XHJcblx0XHRcdH1cclxuXHJcblx0XHRcdC8vIE1ha2UgYWRqdXN0bWVudHMgdG8gdGhlIFJpdHRlciBTcGhlcmUgdG8gaW5jbHVkZSBhbGwgcG9pbnRzLlxyXG5cdFx0XHRjb25zdCBvbGRDZW50ZXJUb1BvaW50U3F1YXJlZCA9IFZlY3RvcjMubWFnbml0dWRlU3F1YXJlZChcclxuXHRcdFx0XHRWZWN0b3IzLnN1YnRyYWN0KGN1cnJlbnRQb3MsIHJpdHRlckNlbnRlciwgZnJvbVBvaW50c1NjcmF0Y2gpXHJcblx0XHRcdCk7XHJcblx0XHRcdGlmIChvbGRDZW50ZXJUb1BvaW50U3F1YXJlZCA+IHJhZGl1c1NxdWFyZWQpIHtcclxuXHRcdFx0XHRjb25zdCBvbGRDZW50ZXJUb1BvaW50ID0gTWF0aC5zcXJ0KG9sZENlbnRlclRvUG9pbnRTcXVhcmVkKTtcclxuXHRcdFx0XHQvLyBDYWxjdWxhdGUgbmV3IHJhZGl1cyB0byBpbmNsdWRlIHRoZSBwb2ludCB0aGF0IGxpZXMgb3V0c2lkZVxyXG5cdFx0XHRcdHJpdHRlclJhZGl1cyA9IChyaXR0ZXJSYWRpdXMgKyBvbGRDZW50ZXJUb1BvaW50KSAqIDAuNTtcclxuXHRcdFx0XHRyYWRpdXNTcXVhcmVkID0gcml0dGVyUmFkaXVzICogcml0dGVyUmFkaXVzO1xyXG5cdFx0XHRcdC8vIENhbGN1bGF0ZSBjZW50ZXIgb2YgbmV3IFJpdHRlciBzcGhlcmVcclxuXHRcdFx0XHRjb25zdCBvbGRUb05ldyA9IG9sZENlbnRlclRvUG9pbnQgLSByaXR0ZXJSYWRpdXM7XHJcblx0XHRcdFx0cml0dGVyQ2VudGVyLnggPSAocml0dGVyUmFkaXVzICogcml0dGVyQ2VudGVyLnggKyBvbGRUb05ldyAqIGN1cnJlbnRQb3MueCkgLyBvbGRDZW50ZXJUb1BvaW50O1xyXG5cdFx0XHRcdHJpdHRlckNlbnRlci55ID0gKHJpdHRlclJhZGl1cyAqIHJpdHRlckNlbnRlci55ICsgb2xkVG9OZXcgKiBjdXJyZW50UG9zLnkpIC8gb2xkQ2VudGVyVG9Qb2ludDtcclxuXHRcdFx0XHRyaXR0ZXJDZW50ZXIueiA9IChyaXR0ZXJSYWRpdXMgKiByaXR0ZXJDZW50ZXIueiArIG9sZFRvTmV3ICogY3VycmVudFBvcy56KSAvIG9sZENlbnRlclRvUG9pbnQ7XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHJcblx0XHRpZiAocml0dGVyUmFkaXVzIDwgbmFpdmVSYWRpdXMpIHtcclxuXHRcdFx0VmVjdG9yMy5jbG9uZShyaXR0ZXJDZW50ZXIsIHJlc3VsdC5jZW50ZXIpO1xyXG5cdFx0XHRyZXN1bHQucmFkaXVzID0gcml0dGVyUmFkaXVzO1xyXG5cdFx0fSBlbHNlIHtcclxuXHRcdFx0VmVjdG9yMy5jbG9uZShuYWl2ZUNlbnRlciwgcmVzdWx0LmNlbnRlcik7XHJcblx0XHRcdHJlc3VsdC5yYWRpdXMgPSBuYWl2ZVJhZGl1cztcclxuXHRcdH1cclxuXHJcblx0XHRyZXR1cm4gcmVzdWx0O1xyXG5cdH1cclxuXHJcblx0aW50ZXJzZWN0UGxhbmUocGxhbmU6IFBsYW5lKSB7XHJcblx0XHRjb25zdCBjZW50ZXIgPSB0aGlzLmNlbnRlcjtcclxuXHRcdGNvbnN0IHJhZGl1cyA9IHRoaXMucmFkaXVzO1xyXG5cdFx0Y29uc3Qgbm9ybWFsID0gcGxhbmUubm9ybWFsO1xyXG5cdFx0Y29uc3QgZGlzdGFuY2VUb1BsYW5lID0gVmVjdG9yMy5kb3Qobm9ybWFsLCBjZW50ZXIpICsgcGxhbmUuZGlzdGFuY2U7XHJcblxyXG5cdFx0aWYgKGRpc3RhbmNlVG9QbGFuZSA8IC1yYWRpdXMpIHtcclxuXHRcdFx0Ly8gVGhlIGNlbnRlciBwb2ludCBpcyBuZWdhdGl2ZSBzaWRlIG9mIHRoZSBwbGFuZSBub3JtYWxcclxuXHRcdFx0cmV0dXJuIEludGVyc2VjdC5PVVRTSURFO1xyXG5cdFx0fSBlbHNlIGlmIChkaXN0YW5jZVRvUGxhbmUgPCByYWRpdXMpIHtcclxuXHRcdFx0Ly8gVGhlIGNlbnRlciBwb2ludCBpcyBwb3NpdGl2ZSBzaWRlIG9mIHRoZSBwbGFuZSwgYnV0IHJhZGl1cyBleHRlbmRzIGJleW9uZCBpdDsgcGFydGlhbCBvdmVybGFwXHJcblx0XHRcdHJldHVybiBJbnRlcnNlY3QuSU5URVJTRUNUSU5HO1xyXG5cdFx0fVxyXG5cdFx0cmV0dXJuIEludGVyc2VjdC5JTlNJREU7XHJcblx0fVxyXG5cdHVwZGF0ZSh0cmFuc2Zvcm06IE1hdHJpeDQpIHtcclxuXHRcdE1hdHJpeDQubXVsdGlwbHlCeVBvaW50KHRyYW5zZm9ybSwgdGhpcy5vcmlnaW5DZW50ZXIsIHRoaXMuY2VudGVyKTtcclxuXHRcdHRoaXMucmFkaXVzID0gTWF0cml4NC5nZXRNYXhpbXVtU2NhbGUodHJhbnNmb3JtKSAqIHRoaXMub3JpZ2luUmFkaXVzO1xyXG5cdH1cclxuXHRkaXN0YW5jZVRvQ2FtZXJhKGNhbWVyYTogQ2FtZXJhKSB7XHJcblx0XHRyZXR1cm4gTWF0aC5tYXgoMC4wLCBWZWN0b3IzLmRpc3RhbmNlKHRoaXMuY2VudGVyLCBjYW1lcmEucG9zaXRpb24pIC0gdGhpcy5yYWRpdXMpO1xyXG5cdH1cclxufVxyXG5jb25zdCBmcm9tUG9pbnRzWE1pbiA9IG5ldyBWZWN0b3IzKCk7XHJcbmNvbnN0IGZyb21Qb2ludHNZTWluID0gbmV3IFZlY3RvcjMoKTtcclxuY29uc3QgZnJvbVBvaW50c1pNaW4gPSBuZXcgVmVjdG9yMygpO1xyXG5jb25zdCBmcm9tUG9pbnRzWE1heCA9IG5ldyBWZWN0b3IzKCk7XHJcbmNvbnN0IGZyb21Qb2ludHNZTWF4ID0gbmV3IFZlY3RvcjMoKTtcclxuY29uc3QgZnJvbVBvaW50c1pNYXggPSBuZXcgVmVjdG9yMygpO1xyXG5jb25zdCBmcm9tUG9pbnRzQ3VycmVudFBvcyA9IG5ldyBWZWN0b3IzKCk7XHJcbmNvbnN0IGZyb21Qb2ludHNTY3JhdGNoID0gbmV3IFZlY3RvcjMoKTtcclxuY29uc3QgZnJvbVBvaW50c1JpdHRlckNlbnRlciA9IG5ldyBWZWN0b3IzKCk7XHJcbmNvbnN0IGZyb21Qb2ludHNNaW5Cb3hQdCA9IG5ldyBWZWN0b3IzKCk7XHJcbmNvbnN0IGZyb21Qb2ludHNNYXhCb3hQdCA9IG5ldyBWZWN0b3IzKCk7XHJcbmNvbnN0IGZyb21Qb2ludHNOYWl2ZUNlbnRlclNjcmF0Y2ggPSBuZXcgVmVjdG9yMygpO1xyXG4iLCJpbXBvcnQgeyBJbmRleEZvcm1hdCB9IGZyb20gXCIuLi9jb3JlL1dlYkdQVUNvbnN0YW50XCI7XHJcbmltcG9ydCBCdWZmZXIgZnJvbSBcIi4vQnVmZmVyXCI7XHJcbmltcG9ydCB7VHlwZWRBcnJheX0gZnJvbSBcIi4uL3V0aWxzL2dsdGZVdGlsc1wiO1xyXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBJbmRleEJ1ZmZlciB7XHJcblx0YnVmZmVyOiBCdWZmZXI7XHJcblx0aW5kaWNlczogVHlwZWRBcnJheTtcclxuXHRpbmRleEZvcm1hdDogR1BVSW5kZXhGb3JtYXQ7XHJcblx0ZGlydHk6IGJvb2xlYW47XHJcblx0cHJpdmF0ZSBsYWJlbDogc3RyaW5nO1xyXG5cdGNvbnN0cnVjdG9yKGxhYmVsOiBzdHJpbmcsIGluZGljZXM/OiBUeXBlZEFycmF5KSB7XHJcblx0XHR0aGlzLmxhYmVsID0gbGFiZWw7XHJcblx0XHR0aGlzLmluZGljZXMgPSBpbmRpY2VzO1xyXG5cdFx0dGhpcy5pbmRleEZvcm1hdCA9IGluZGljZXMgaW5zdGFuY2VvZiBVaW50MzJBcnJheSA/IEluZGV4Rm9ybWF0LlVpbnQzMiA6IEluZGV4Rm9ybWF0LlVpbnQxNjtcclxuXHRcdHRoaXMuZGlydHkgPSB0cnVlO1xyXG5cdH1cclxuXHRzZXRJbmRpY2VzKGluZGljZXMpIHtcclxuXHRcdHRoaXMuaW5kaWNlcyA9IGluZGljZXM7XHJcblx0XHR0aGlzLmluZGV4Rm9ybWF0ID0gaW5kaWNlcyBpbnN0YW5jZW9mIFVpbnQzMkFycmF5ID8gSW5kZXhGb3JtYXQuVWludDMyIDogSW5kZXhGb3JtYXQuVWludDE2O1xyXG5cdFx0dGhpcy5kaXJ0eSA9IHRydWU7XHJcblx0fVxyXG5cdGJpbmQoZGV2aWNlOiBHUFVEZXZpY2UsIHBhc3NFbmNvZGVyOiBHUFVSZW5kZXJQYXNzRW5jb2Rlcikge1xyXG5cdFx0aWYgKHRoaXMuZGlydHkpIHtcclxuXHRcdFx0dGhpcy5kaXJ0eSA9IGZhbHNlO1xyXG5cdFx0XHR0aGlzLmJ1ZmZlciA9IEJ1ZmZlci5jcmVhdGVJbmRleEJ1ZmZlcihcclxuXHRcdFx0XHR0aGlzLmxhYmVsLFxyXG5cdFx0XHRcdGRldmljZSxcclxuXHRcdFx0XHR0aGlzLmluZGljZXMgaW5zdGFuY2VvZiBBcnJheSA/XHJcblx0XHRcdFx0XHQoSW5kZXhGb3JtYXQuVWludDE2ID8gbmV3IFVpbnQxNkFycmF5KHRoaXMuaW5kaWNlcykgOiBuZXcgVWludDMyQXJyYXkodGhpcy5pbmRpY2VzKSk6XHJcblx0XHRcdFx0XHR0aGlzLmluZGljZXMpO1xyXG5cdFx0fVxyXG5cdFx0cGFzc0VuY29kZXIuc2V0SW5kZXhCdWZmZXIodGhpcy5idWZmZXIuZ3B1QnVmZmVyLCB0aGlzLmluZGV4Rm9ybWF0KTtcclxuXHR9XHJcblx0ZGVzdHJveSgpIHtcclxuXHRcdHRoaXMuYnVmZmVyLmRlc3Ryb3koKTtcclxuXHR9XHJcbn1cclxuIiwiaW1wb3J0IHsgQXR0cmlidXRlLCBBdHRyaWJ1dGVUeXBlLCBCdWZmZXJGbG9hdDMyQXR0cmlidXRlLCBJbnRlcmxlYXZlZEF0dHJpYnV0ZSB9IGZyb20gXCIuL0F0dHJpYnV0ZVwiO1xyXG5pbXBvcnQgQnVmZmVyIGZyb20gXCIuL0J1ZmZlclwiO1xyXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBBdHRyaWJ1dGVzIHtcclxuXHRwdWJsaWMgaW50ZXJsZWF2ZTogYm9vbGVhbjtcclxuXHRwcml2YXRlIF9hdHRyaWJ1dGVzOiBNYXA8c3RyaW5nLCBBdHRyaWJ1dGUgfCBJbnRlcmxlYXZlZEF0dHJpYnV0ZT47XHJcblx0cHJpdmF0ZSBzaGFkZXJMb2NhdGlvbjogbnVtYmVyO1xyXG5cdHByaXZhdGUgb2Zmc2V0OiBudW1iZXI7XHJcblx0Y29uc3RydWN0b3Ioc2hhZGVyTG9jYXRpb24gPSAwKSB7XHJcblx0XHR0aGlzLl9hdHRyaWJ1dGVzID0gbmV3IE1hcCgpO1xyXG5cdFx0dGhpcy5zaGFkZXJMb2NhdGlvbiA9IHNoYWRlckxvY2F0aW9uO1xyXG5cdFx0dGhpcy5vZmZzZXQgPSAwO1xyXG5cdFx0dGhpcy5pbnRlcmxlYXZlID0gZmFsc2U7XHJcblx0fVxyXG5cdGdldCBkaXJ0eSgpOiBib29sZWFuIHtcclxuXHRcdGxldCByZXN1bHQgPSBmYWxzZTtcclxuXHRcdHRoaXMuX2F0dHJpYnV0ZXMuZm9yRWFjaCgoYXR0cmlidXRlKSA9PiAoIXJlc3VsdCA/IChyZXN1bHQgPSBhdHRyaWJ1dGUuZGlydHkpIDogZmFsc2UpKTtcclxuXHRcdHJldHVybiByZXN1bHQ7XHJcblx0fVxyXG5cdHNldCBkaXJ0eSh2YWx1ZTogYm9vbGVhbikge1xyXG5cdFx0dGhpcy5fYXR0cmlidXRlcy5mb3JFYWNoKChhdHRyaWJ1dGUpID0+IChhdHRyaWJ1dGUuZGlydHkgPSB2YWx1ZSkpO1xyXG5cdH1cclxuXHRnZXQgdmFsdWVzKCk6IE1hcDxzdHJpbmcsIEF0dHJpYnV0ZSB8IEludGVybGVhdmVkQXR0cmlidXRlPiB7XHJcblx0XHRyZXR1cm4gdGhpcy5fYXR0cmlidXRlcztcclxuXHR9XHJcblx0Z2V0QXR0cmlidXRlKG5hbWUpOiBBdHRyaWJ1dGUgfCBJbnRlcmxlYXZlZEF0dHJpYnV0ZSB7XHJcblx0XHRyZXR1cm4gdGhpcy5fYXR0cmlidXRlcy5nZXQobmFtZSk7XHJcblx0fVxyXG5cdHNldEF0dHJpYnV0ZShhdHRyaWJ1dGU6IEF0dHJpYnV0ZSB8IEludGVybGVhdmVkQXR0cmlidXRlKSB7XHJcblx0XHRpZiAoYXR0cmlidXRlLmF0dHJpYnV0ZVR5cGUgPT09IEF0dHJpYnV0ZVR5cGUuYXR0cmlidXRlKSB7XHJcblx0XHRcdHRoaXMuc2V0Tm90SW50ZXJsZWF2ZWRBdHRyaWJ1dGUoYXR0cmlidXRlIGFzIEF0dHJpYnV0ZSk7XHJcblx0XHR9IGVsc2Uge1xyXG5cdFx0XHR0aGlzLnNldEludGVybGVhdmVkQXR0cmlidXRlKGF0dHJpYnV0ZSBhcyBJbnRlcmxlYXZlZEF0dHJpYnV0ZSk7XHJcblx0XHR9XHJcblx0fVxyXG5cdHByaXZhdGUgc2V0Tm90SW50ZXJsZWF2ZWRBdHRyaWJ1dGUoYXR0cmlidXRlOiBBdHRyaWJ1dGUpIHtcclxuXHRcdGlmICh0aGlzLl9hdHRyaWJ1dGVzLmhhcyhhdHRyaWJ1dGUubmFtZSkpIHJldHVybjtcclxuXHRcdGF0dHJpYnV0ZS5zaGFkZXJMb2NhdGlvbiA9IHRoaXMuc2hhZGVyTG9jYXRpb247XHJcblx0XHR0aGlzLnNoYWRlckxvY2F0aW9uICs9IDE7XHJcblx0XHRhdHRyaWJ1dGUub2Zmc2V0ID0gdGhpcy5vZmZzZXQ7XHJcblx0XHR0aGlzLm9mZnNldCArPSBhdHRyaWJ1dGUuYXR0cmlidXRlQnl0ZVNpemU7XHJcblx0XHR0aGlzLl9hdHRyaWJ1dGVzLnNldChhdHRyaWJ1dGUubmFtZSwgYXR0cmlidXRlKTtcclxuXHR9XHJcblx0cHJpdmF0ZSBzZXRJbnRlcmxlYXZlZEF0dHJpYnV0ZShhdHRyaWJ1dGU6IEludGVybGVhdmVkQXR0cmlidXRlKSB7XHJcblx0XHRpZiAodGhpcy5fYXR0cmlidXRlcy5oYXMoYXR0cmlidXRlLm5hbWVzLnRvU3RyaW5nKCkpKSByZXR1cm47XHJcblx0XHR0aGlzLl9hdHRyaWJ1dGVzLnNldChhdHRyaWJ1dGUubmFtZXMudG9TdHJpbmcoKSwgYXR0cmlidXRlKTtcclxuXHR9XHJcblx0Z2V0R1BVQXR0cmlidXRlc0RlcygpIHtcclxuXHRcdGNvbnN0IHJlc3VsdCA9IFtdO1xyXG5cdFx0dGhpcy5fYXR0cmlidXRlcy5mb3JFYWNoKChhdHRyaWJ1dGUpID0+IHtcclxuXHRcdFx0cmVzdWx0LnB1c2goLi4uYXR0cmlidXRlLmdldEdQVUF0dHJpYnV0ZSgpKTtcclxuXHRcdH0pO1xyXG5cdFx0cmV0dXJuIHJlc3VsdDtcclxuXHR9XHJcblx0Z2V0QXRycmlidXRlVmFsdWVzKCk6IHtcclxuXHRcdGFycmF5U3RyaWRlOiBudW1iZXI7XHJcblx0XHR0eXBlQXJyYXk6IEZsb2F0MzJBcnJheTtcclxuXHRcdGJ1ZmZlcj86IEJ1ZmZlcjtcclxuXHR9IHtcclxuXHRcdGNvbnN0IGFycmF5U3RyaWRlcyA9IFtdO1xyXG5cdFx0bGV0IGFycmF5U3RyaWRlID0gMDtcclxuXHRcdGxldCBidWZmZXIgPSB1bmRlZmluZWQ7XHJcblx0XHRsZXQgdmFsdWVzID0gbnVsbDtcclxuXHRcdGNvbnN0IGFycmF5cyA9IFtdO1xyXG5cdFx0dGhpcy5fYXR0cmlidXRlcy5mb3JFYWNoKChhdHRyaWJ1dGU6IEF0dHJpYnV0ZSB8IEludGVybGVhdmVkQXR0cmlidXRlKSA9PiB7XHJcblx0XHRcdGlmIChhdHRyaWJ1dGUuYXR0cmlidXRlVHlwZSA9PT0gQXR0cmlidXRlVHlwZS5hdHRyaWJ1dGUpIHtcclxuXHRcdFx0XHRhcnJheVN0cmlkZXMucHVzaCgoYXR0cmlidXRlIGFzIEF0dHJpYnV0ZSkuaXRlbVNpemUpO1xyXG5cdFx0XHRcdGFycmF5cy5wdXNoKGF0dHJpYnV0ZS52YWx1ZSk7XHJcblx0XHRcdFx0YXJyYXlTdHJpZGUgKz0gKGF0dHJpYnV0ZSBhcyBBdHRyaWJ1dGUpLml0ZW1TaXplO1xyXG5cdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdGlmICghdGhpcy5pbnRlcmxlYXZlKSB0aGlzLmludGVybGVhdmUgPSB0cnVlO1xyXG5cdFx0XHRcdHZhbHVlcyA9IHZhbHVlcyA/PyBhdHRyaWJ1dGUudmFsdWU7XHJcblx0XHRcdFx0YnVmZmVyID0gKGF0dHJpYnV0ZSBhcyBCdWZmZXJGbG9hdDMyQXR0cmlidXRlKT8uYnVmZmVyO1xyXG5cdFx0XHRcdGFycmF5U3RyaWRlID0gKGF0dHJpYnV0ZSBhcyBJbnRlcmxlYXZlZEF0dHJpYnV0ZSkuaXRlbVNpemVzLnJlZHVjZShcclxuXHRcdFx0XHRcdCh0b3RhbCwgY3VycmVudCkgPT4gKHRvdGFsICs9IGN1cnJlbnQpLFxyXG5cdFx0XHRcdFx0MFxyXG5cdFx0XHRcdCk7XHJcblx0XHRcdH1cclxuXHRcdH0pO1xyXG5cclxuXHRcdGNvbnN0IHR5cGVBcnJheSA9IHRoaXMuaW50ZXJsZWF2ZVxyXG5cdFx0XHQ/IG5ldyBGbG9hdDMyQXJyYXkodmFsdWVzKVxyXG5cdFx0XHQ6IHRoaXMuaW50ZXJsZWF2ZVR5cGVkQXJyYXkoRmxvYXQzMkFycmF5LCBhcnJheVN0cmlkZXMsIC4uLmFycmF5cyk7XHJcblx0XHRyZXR1cm4ge1xyXG5cdFx0XHRhcnJheVN0cmlkZTogYXJyYXlTdHJpZGUgKiB0eXBlQXJyYXkuQllURVNfUEVSX0VMRU1FTlQsXHJcblx0XHRcdHR5cGVBcnJheSxcclxuXHRcdFx0YnVmZmVyXHJcblx0XHR9O1xyXG5cdH1cclxuXHRkZXN0cm95KCkge1xyXG5cdFx0dGhpcy5fYXR0cmlidXRlcy5mb3JFYWNoKChhdHRyaWJ1dGUpID0+IHtcclxuXHRcdFx0YXR0cmlidXRlLmRlc3Ryb3koKTtcclxuXHRcdH0pO1xyXG5cdH1cclxuXHQvKipcclxuXHQgKiBJbnRlcmxlYXZlIG4gdHlwZWQgYXJyYXlzXHJcblx0ICogQGFsaWFzIG1vZHVsZTppbnRlcmxlYXZlVHlwZWRBcnJheVxyXG5cdCAqIEBwYXJhbSB7VHlwZWRBcnJheX0gUmVzdWx0Q29uc3RydWN0b3IgUmV0dXJuZWQgdHlwZWQgYXJyYXkgY29uc3RydWN0b3JcclxuXHQgKiBAcGFyYW0ge0FycmF5fSBlbGVtZW50cyBOdW1iZXIgb2YgZWxlbWVudHMgdG8gZ3JvdXAgZm9yIGVhY2ggdHlwZWQgYXJyYXlcclxuXHQgKiBAcGFyYW0gey4uLlR5cGVkQXJyYXl9IGFycmF5cyBBcnJheXMgdG8gaW50ZXJsZWF2ZVxyXG5cdCAqIEByZXR1cm5zIHtUeXBlZEFycmF5fVxyXG5cdCAqL1xyXG5cdGludGVybGVhdmVUeXBlZEFycmF5KFJlc3VsdENvbnN0cnVjdG9yLCBlbGVtZW50cywgLi4uYXJyYXlzKSB7XHJcblx0XHRjb25zdCB0b3RhbExlbmd0aCA9IGFycmF5cy5yZWR1Y2UoKHRvdGFsLCBhcnIpID0+IHRvdGFsICsgYXJyLmxlbmd0aCwgMCk7XHJcblx0XHRjb25zdCByZXN1bHQgPSBuZXcgUmVzdWx0Q29uc3RydWN0b3IodG90YWxMZW5ndGgpO1xyXG5cdFx0Y29uc3Qgc3RyaWRlID0gZWxlbWVudHMucmVkdWNlKChhLCBiKSA9PiBhICsgYik7XHJcblxyXG5cdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCB0b3RhbExlbmd0aDsgaSsrKSB7XHJcblx0XHRcdGxldCBvZmZzZXQgPSAwO1xyXG5cdFx0XHRmb3IgKGxldCBqID0gMDsgaiA8IGVsZW1lbnRzLmxlbmd0aDsgaisrKSB7XHJcblx0XHRcdFx0Zm9yIChsZXQgayA9IDA7IGsgPCBlbGVtZW50c1tqXTsgaysrKSB7XHJcblx0XHRcdFx0XHRyZXN1bHRbaSAqIHN0cmlkZSArIG9mZnNldF0gPSBhcnJheXNbal1bZWxlbWVudHNbal0gKiBpICsga107XHJcblx0XHRcdFx0XHRvZmZzZXQrKztcclxuXHRcdFx0XHR9XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHRcdHJldHVybiByZXN1bHQ7XHJcblx0fVxyXG59XHJcbiIsImltcG9ydCB7IElucHV0U3RlcE1vZGUgfSBmcm9tIFwiLi4vY29yZS9XZWJHUFVDb25zdGFudFwiO1xyXG5pbXBvcnQgeyBWZXJ0ZXhCdWZmZXJQYXJhbXMgfSBmcm9tIFwiLi4vY29yZS9XZWJHUFVUeXBlc1wiO1xyXG5pbXBvcnQgeyBBdHRyaWJ1dGUsIEF0dHJpYnV0ZVR5cGUsIEludGVybGVhdmVkQXR0cmlidXRlLCBJbnRlcmxlYXZlZEZsb2F0MzJBdHRyaWJ1dGUgfSBmcm9tIFwiLi9BdHRyaWJ1dGVcIjtcclxuaW1wb3J0IEF0dHJpYnV0ZXMgZnJvbSBcIi4vQXR0cmlidXRlc1wiO1xyXG5pbXBvcnQgQnVmZmVyIGZyb20gXCIuL0J1ZmZlclwiO1xyXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBWZXJ0ZXhCdWZmZXIge1xyXG5cdHB1YmxpYyBpbmRleDogbnVtYmVyO1xyXG5cdHB1YmxpYyBhcnJheVN0cmlkZTogbnVtYmVyO1xyXG5cdHB1YmxpYyBzdGVwTW9kZTogc3RyaW5nO1xyXG5cdHB1YmxpYyBidWZmZXI6IEJ1ZmZlcjtcclxuXHRwdWJsaWMgYXR0cmlidXRlczogQXR0cmlidXRlcztcclxuXHRwdWJsaWMgZGlydHk6IGJvb2xlYW47XHJcblx0cHVibGljIGRlZmluZXM6IHsgW3Byb3A6IHN0cmluZ106IGJvb2xlYW4gfCBudW1iZXIgfTtcclxuXHRwdWJsaWMgbG9jYXRpb25JbmRleDogbnVtYmVyO1xyXG5cdHByaXZhdGUgbGFiZWw6IHN0cmluZztcclxuXHQvL1xyXG5cdGNvbnN0cnVjdG9yKHBhcmFtczogVmVydGV4QnVmZmVyUGFyYW1zKSB7XHJcblx0XHRjb25zdCB7IGxhYmVsLCBpbmRleCwgbG9jYXRpb25JbmRleCA9IDAsIHN0ZXBNb2RlID0gSW5wdXRTdGVwTW9kZS5WZXJ0ZXgsIGFycmF5U3RyaWRlIH0gPSBwYXJhbXM7XHJcblx0XHR0aGlzLmluZGV4ID0gaW5kZXggfHwgMDtcclxuXHRcdHRoaXMuYXR0cmlidXRlcyA9IG5ldyBBdHRyaWJ1dGVzKGxvY2F0aW9uSW5kZXgpO1xyXG5cdFx0dGhpcy5zdGVwTW9kZSA9IHN0ZXBNb2RlO1xyXG5cdFx0dGhpcy5kaXJ0eSA9IHRydWU7XHJcblx0XHR0aGlzLmxhYmVsID0gbGFiZWw/LmNvbmNhdChgXyR7aW5kZXh9X1ZlcnRleEJ1ZmZlcmApO1xyXG5cdFx0dGhpcy5hcnJheVN0cmlkZSA9IGFycmF5U3RyaWRlO1xyXG5cdFx0dGhpcy5kZWZpbmVzID0ge307XHJcblx0XHR0aGlzLmxvY2F0aW9uSW5kZXggPSBsb2NhdGlvbkluZGV4O1xyXG5cdH1cclxuXHRwdWJsaWMgZ2V0QnVmZmVyRGVzKCkge1xyXG5cdFx0Y29uc3QgcmVzdWx0ID0ge1xyXG5cdFx0XHRhcnJheVN0cmlkZTogdGhpcy5hcnJheVN0cmlkZSxcclxuXHRcdFx0c3RlcE1vZGU6IHRoaXMuc3RlcE1vZGUsXHJcblx0XHRcdGF0dHJpYnV0ZXM6IHRoaXMuYXR0cmlidXRlcy5nZXRHUFVBdHRyaWJ1dGVzRGVzKClcclxuXHRcdH07XHJcblx0XHRyZXR1cm4gcmVzdWx0O1xyXG5cdH1cclxuXHRwdWJsaWMgc2V0QXR0cmlidXRlKGF0dHJpYnV0ZTogQXR0cmlidXRlIHwgSW50ZXJsZWF2ZWRBdHRyaWJ1dGUpIHtcclxuXHRcdGlmIChhdHRyaWJ1dGUuYXR0cmlidXRlVHlwZSA9PT0gQXR0cmlidXRlVHlwZS5hdHRyaWJ1dGUpIHtcclxuXHRcdFx0dGhpcy5zZXRMb2NhdGlvbkluZGV4KChhdHRyaWJ1dGUgYXMgQXR0cmlidXRlKS5uYW1lKTtcclxuXHRcdH0gZWxzZSB7XHJcblx0XHRcdChhdHRyaWJ1dGUgYXMgSW50ZXJsZWF2ZWRGbG9hdDMyQXR0cmlidXRlKT8ubmFtZXMuZm9yRWFjaCgobmFtZTogc3RyaW5nKSA9PiB0aGlzLnNldExvY2F0aW9uSW5kZXgobmFtZSkpO1xyXG5cdFx0fVxyXG5cdFx0dGhpcy5hdHRyaWJ1dGVzLnNldEF0dHJpYnV0ZShhdHRyaWJ1dGUpO1xyXG5cdFx0dGhpcy5kaXJ0eSA9IHRydWU7XHJcblx0fVxyXG5cdHB1YmxpYyBnZXRBdHRyaWJ1dGUobmFtZTogc3RyaW5nKTogQXR0cmlidXRlIHwgSW50ZXJsZWF2ZWRBdHRyaWJ1dGUge1xyXG5cdFx0cmV0dXJuIHRoaXMuYXR0cmlidXRlcy5nZXRBdHRyaWJ1dGUobmFtZSk7XHJcblx0fVxyXG5cdHB1YmxpYyBjb250YWluQXR0cmlidXRlKG5hbWU6IHN0cmluZyk6IGJvb2xlYW4ge1xyXG5cdFx0cmV0dXJuIHRoaXMuZGVmaW5lc1tuYW1lPy5jb25jYXQoXCJMb2NhdGlvblwiKV0gIT0gdW5kZWZpbmVkID8gdHJ1ZSA6IGZhbHNlO1xyXG5cdH1cclxuXHRwdWJsaWMgYmluZChkZXZpY2U6IEdQVURldmljZSwgcGFzc0VuY29kZXI6IEdQVVJlbmRlclBhc3NFbmNvZGVyKSB7XHJcblx0XHRpZiAodGhpcy5hdHRyaWJ1dGVzLmRpcnR5KSB7XHJcblx0XHRcdHRoaXMuYXR0cmlidXRlcy5kaXJ0eSA9IGZhbHNlO1xyXG5cdFx0XHRjb25zdCB7IGFycmF5U3RyaWRlLCB0eXBlQXJyYXksIGJ1ZmZlciB9ID0gdGhpcy5hdHRyaWJ1dGVzLmdldEF0cnJpYnV0ZVZhbHVlcygpO1xyXG5cdFx0XHRpZiAodGhpcy5hcnJheVN0cmlkZSA9PT0gdW5kZWZpbmVkKSB0aGlzLmFycmF5U3RyaWRlID0gYXJyYXlTdHJpZGU7XHJcblx0XHRcdGlmICghdGhpcy5idWZmZXIpIHtcclxuXHRcdFx0XHR0aGlzLmJ1ZmZlciA9IGJ1ZmZlciA/PyBCdWZmZXIuY3JlYXRlVmVydGV4QnVmZmVyKHRoaXMubGFiZWwsIGRldmljZSwgdHlwZUFycmF5KTtcclxuXHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHQvLyB1cGRhdGUgQnVmZmVyXHJcblx0XHRcdFx0aWYgKHR5cGVBcnJheSkgdGhpcy5idWZmZXIuc2V0U3ViRGF0YSgwLCB0eXBlQXJyYXkpO1xyXG5cdFx0XHR9XHJcblx0XHR9XHJcblx0XHRwYXNzRW5jb2Rlci5zZXRWZXJ0ZXhCdWZmZXIodGhpcy5pbmRleCwgdGhpcy5idWZmZXIuZ3B1QnVmZmVyKTtcclxuXHR9XHJcblx0cHJpdmF0ZSBzZXRMb2NhdGlvbkluZGV4KG5hbWU6IHN0cmluZykge1xyXG5cdFx0aWYgKHRoaXMuZGVmaW5lc1tuYW1lPy5jb25jYXQoXCJMb2NhdGlvblwiKV0gfHwgIW5hbWUpIHJldHVybjtcclxuXHRcdHRoaXMuZGVmaW5lc1tuYW1lPy5jb25jYXQoXCJMb2NhdGlvblwiKV0gPSB0aGlzLmxvY2F0aW9uSW5kZXg7XHJcblx0XHR0aGlzLmxvY2F0aW9uSW5kZXggKz0gMTtcclxuXHR9XHJcblx0ZGVzdHJveSgpIHtcclxuXHRcdHRoaXMuYnVmZmVyLmRlc3Ryb3koKTtcclxuXHRcdHRoaXMuYXR0cmlidXRlcy5kZXN0cm95KCk7XHJcblx0fVxyXG59XHJcbiIsImltcG9ydCBkZWZhdWx0VmFsdWUgZnJvbSBcIi4vZGVmYXVsdFZhbHVlXCI7XHJcbmltcG9ydCBkZWZpbmVkIGZyb20gXCIuL2RlZmluZWRcIjtcclxuXHJcbi8qKlxyXG4gKiBNZXJnZXMgdHdvIG9iamVjdHMsIGNvcHlpbmcgdGhlaXIgcHJvcGVydGllcyBvbnRvIGEgbmV3IGNvbWJpbmVkIG9iamVjdC4gV2hlbiB0d28gb2JqZWN0cyBoYXZlIHRoZSBzYW1lXHJcbiAqIHByb3BlcnR5LCB0aGUgdmFsdWUgb2YgdGhlIHByb3BlcnR5IG9uIHRoZSBmaXJzdCBvYmplY3QgaXMgdXNlZC4gIElmIGVpdGhlciBvYmplY3QgaXMgdW5kZWZpbmVkLFxyXG4gKiBpdCB3aWxsIGJlIHRyZWF0ZWQgYXMgYW4gZW1wdHkgb2JqZWN0LlxyXG4gKlxyXG4gKiBAZXhhbXBsZVxyXG4gKiBjb25zdCBvYmplY3QxID0ge1xyXG4gKiAgICAgcHJvcE9uZSA6IDEsXHJcbiAqICAgICBwcm9wVHdvIDoge1xyXG4gKiAgICAgICAgIHZhbHVlMSA6IDEwXHJcbiAqICAgICB9XHJcbiAqIH1cclxuICogY29uc3Qgb2JqZWN0MiA9IHtcclxuICogICAgIHByb3BUd28gOiAyXHJcbiAqIH1cclxuICogY29uc3QgZmluYWwgPSBjb21iaW5lKG9iamVjdDEsIG9iamVjdDIpO1xyXG4gKlxyXG4gKiAvLyBmaW5hbCA9PT0ge1xyXG4gKiAvLyAgICAgcHJvcE9uZSA6IDEsXHJcbiAqIC8vICAgICBwcm9wVHdvIDoge1xyXG4gKiAvLyAgICAgICAgIHZhbHVlMSA6IDEwXHJcbiAqIC8vICAgICB9XHJcbiAqIC8vIH1cclxuICpcclxuICogQHBhcmFtIHtPYmplY3R9IFtvYmplY3QxXSBUaGUgZmlyc3Qgb2JqZWN0IHRvIG1lcmdlLlxyXG4gKiBAcGFyYW0ge09iamVjdH0gW29iamVjdDJdIFRoZSBzZWNvbmQgb2JqZWN0IHRvIG1lcmdlLlxyXG4gKiBAcGFyYW0ge0Jvb2xlYW59IFtkZWVwPWZhbHNlXSBQZXJmb3JtIGEgcmVjdXJzaXZlIG1lcmdlLlxyXG4gKiBAcmV0dXJucyB7T2JqZWN0fSBUaGUgY29tYmluZWQgb2JqZWN0IGNvbnRhaW5pbmcgYWxsIHByb3BlcnRpZXMgZnJvbSBib3RoIG9iamVjdHMuXHJcbiAqXHJcbiAqIEBmdW5jdGlvblxyXG4gKi9cclxuZnVuY3Rpb24gY29tYmluZShvYmplY3QxLCBvYmplY3QyLCBkZWVwKSB7XHJcblx0ZGVlcCA9IGRlZmF1bHRWYWx1ZShkZWVwLCBmYWxzZSk7XHJcblxyXG5cdGNvbnN0IHJlc3VsdCA9IHt9O1xyXG5cclxuXHRjb25zdCBvYmplY3QxRGVmaW5lZCA9IGRlZmluZWQob2JqZWN0MSk7XHJcblx0Y29uc3Qgb2JqZWN0MkRlZmluZWQgPSBkZWZpbmVkKG9iamVjdDIpO1xyXG5cdGxldCBwcm9wZXJ0eTtcclxuXHRsZXQgb2JqZWN0MVZhbHVlO1xyXG5cdGxldCBvYmplY3QyVmFsdWU7XHJcblx0aWYgKG9iamVjdDFEZWZpbmVkKSB7XHJcblx0XHRmb3IgKHByb3BlcnR5IGluIG9iamVjdDEpIHtcclxuXHRcdFx0aWYgKG9iamVjdDEuaGFzT3duUHJvcGVydHkocHJvcGVydHkpKSB7XHJcblx0XHRcdFx0b2JqZWN0MVZhbHVlID0gb2JqZWN0MVtwcm9wZXJ0eV07XHJcblx0XHRcdFx0aWYgKG9iamVjdDJEZWZpbmVkICYmIGRlZXAgJiYgdHlwZW9mIG9iamVjdDFWYWx1ZSA9PT0gXCJvYmplY3RcIiAmJiBvYmplY3QyLmhhc093blByb3BlcnR5KHByb3BlcnR5KSkge1xyXG5cdFx0XHRcdFx0b2JqZWN0MlZhbHVlID0gb2JqZWN0Mltwcm9wZXJ0eV07XHJcblx0XHRcdFx0XHRpZiAodHlwZW9mIG9iamVjdDJWYWx1ZSA9PT0gXCJvYmplY3RcIikge1xyXG5cdFx0XHRcdFx0XHRyZXN1bHRbcHJvcGVydHldID0gY29tYmluZShvYmplY3QxVmFsdWUsIG9iamVjdDJWYWx1ZSwgZGVlcCk7XHJcblx0XHRcdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdFx0XHRyZXN1bHRbcHJvcGVydHldID0gb2JqZWN0MVZhbHVlO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0XHRyZXN1bHRbcHJvcGVydHldID0gb2JqZWN0MVZhbHVlO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cdH1cclxuXHRpZiAob2JqZWN0MkRlZmluZWQpIHtcclxuXHRcdGZvciAocHJvcGVydHkgaW4gb2JqZWN0Mikge1xyXG5cdFx0XHRpZiAob2JqZWN0Mi5oYXNPd25Qcm9wZXJ0eShwcm9wZXJ0eSkgJiYgIXJlc3VsdC5oYXNPd25Qcm9wZXJ0eShwcm9wZXJ0eSkpIHtcclxuXHRcdFx0XHRvYmplY3QyVmFsdWUgPSBvYmplY3QyW3Byb3BlcnR5XTtcclxuXHRcdFx0XHRyZXN1bHRbcHJvcGVydHldID0gb2JqZWN0MlZhbHVlO1xyXG5cdFx0XHR9XHJcblx0XHR9XHJcblx0fVxyXG5cdHJldHVybiByZXN1bHQ7XHJcbn1cclxuZXhwb3J0IGRlZmF1bHQgY29tYmluZTtcclxuIiwiaW1wb3J0IEJvdW5kaW5nQm94IGZyb20gXCIuLi9jb3JlL0JvdW5kaW5nQm94XCI7XHJcbmltcG9ydCBCb3VuZGluZ1NwaGVyZSBmcm9tIFwiLi4vY29yZS9Cb3VuZGluZ1NwaGVyZVwiO1xyXG5pbXBvcnQgeyBGcmFtZVN0YXRlIH0gZnJvbSBcIi4uL2NvcmUvRnJhbWVTdGF0ZVwiO1xyXG5pbXBvcnQgVmVjdG9yMiBmcm9tIFwiLi4vbWF0aC9WZWN0b3IyXCI7XHJcbmltcG9ydCBWZWN0b3IzIGZyb20gXCIuLi9tYXRoL1ZlY3RvcjNcIjtcclxuaW1wb3J0IFZlY3RvcjQgZnJvbSBcIi4uL21hdGgvVmVjdG9yNFwiO1xyXG5pbXBvcnQgeyBBdHRyaWJ1dGUsIEludGVybGVhdmVkRmxvYXQzMkF0dHJpYnV0ZSB9IGZyb20gXCIuLi9yZW5kZXIvQXR0cmlidXRlXCI7XHJcbmltcG9ydCBJbmRleEJ1ZmZlciBmcm9tIFwiLi4vcmVuZGVyL0luZGV4QnVmZmVyXCI7XHJcbmltcG9ydCBWZXJ0ZXhCdWZmZXIgZnJvbSBcIi4uL3JlbmRlci9WZXJ0ZXhCdWZmZXJcIjtcclxuaW1wb3J0IGNvbWJpbmUgZnJvbSBcIi4uL3V0aWxzL2NvbWJpbmVcIjtcclxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgR2VvbWV0cnkge1xyXG5cdG5vcm1hbHM6IG51bWJlcltdO1xyXG5cdHV2czogbnVtYmVyW107XHJcblx0cG9zaXRpb25zOiBudW1iZXJbXTtcclxuXHRpbmRpY2VzOiBudW1iZXJbXTtcclxuXHR0YW5nZW50czogbnVtYmVyW107XHJcblx0dHlwZTogc3RyaW5nO1xyXG5cdGRpcnR5OiBib29sZWFuO1xyXG5cdGluZGV4QnVmZmVyPzogSW5kZXhCdWZmZXI7XHJcblx0ZGVmYXVsdFZlcnRleEJ1ZmZlcjogVmVydGV4QnVmZmVyO1xyXG5cdGNvdW50OiBudW1iZXI7XHJcblx0Ym91bmRpbmdTcGhlcmU/OiBCb3VuZGluZ1NwaGVyZTtcclxuXHRib3VuZGluZ0JveD86IEJvdW5kaW5nQm94O1xyXG5cdHByaXZhdGUgX2RlZmluZXM6IHsgW3Byb3A6IHN0cmluZ106IGJvb2xlYW4gfCBudW1iZXIgfTtcclxuXHRwdWJsaWMgdmVydGV4QnVmZmVyczogQXJyYXk8VmVydGV4QnVmZmVyPjtcclxuXHRkZWZpbmVzRGlydHk6IGJvb2xlYW47XHJcblx0Z2V0IGRlZmluZXMoKSB7XHJcblx0XHRyZXR1cm4gT2JqZWN0LmFzc2lnbih7fSwgdGhpcy5fZGVmaW5lcywgLi4udGhpcy52ZXJ0ZXhCdWZmZXJzLm1hcCgodmVydGV4QnVmZmVyKSA9PiB2ZXJ0ZXhCdWZmZXIuZGVmaW5lcykpO1xyXG5cdH1cclxuXHRzZXQgZGVmaW5lcyh2YWx1ZSkge1xyXG5cdFx0dGhpcy5kZWZpbmVzRGlydHkgPSB0cnVlO1xyXG5cdFx0dGhpcy5fZGVmaW5lcyA9IGNvbWJpbmUodmFsdWUsIHRoaXMuX2RlZmluZXMsIGZhbHNlKTtcclxuXHR9XHJcblx0Z2V0IGN1cnJlbnRMb2NhdGlvbkluZGV4KCk6IG51bWJlciB7XHJcblx0XHRyZXR1cm4gdGhpcz8udmVydGV4QnVmZmVycz8ucmVkdWNlKFxyXG5cdFx0XHQobWF4LCBjdXJyZW50KSA9PiAoY3VycmVudC5sb2NhdGlvbkluZGV4ID4gbWF4ID8gKG1heCA9IGN1cnJlbnQubG9jYXRpb25JbmRleCkgOiBtYXgpLFxyXG5cdFx0XHQwXHJcblx0XHQpO1xyXG5cdH1cclxuXHRnZXQgdmVydGV4QnVmZmVyQ291bnQoKTogbnVtYmVyIHtcclxuXHRcdHJldHVybiB0aGlzLnZlcnRleEJ1ZmZlcnMubGVuZ3RoO1xyXG5cdH1cclxuXHRjb25zdHJ1Y3RvcihvcHRpb25zPzogeyB0eXBlPzogc3RyaW5nIH0pIHtcclxuXHRcdHRoaXMudHlwZSA9IG9wdGlvbnMudHlwZSB8fCB1bmRlZmluZWQ7XHJcblx0XHR0aGlzLmJvdW5kaW5nU3BoZXJlID0gdW5kZWZpbmVkO1xyXG5cdFx0dGhpcy5kaXJ0eSA9IGZhbHNlO1xyXG5cdFx0dGhpcy5kZWZpbmVzRGlydHkgPSB0cnVlO1xyXG5cdFx0dGhpcy5kZWZhdWx0VmVydGV4QnVmZmVyID0gbmV3IFZlcnRleEJ1ZmZlcih7XHJcblx0XHRcdGxhYmVsOiB0aGlzLnR5cGUsXHJcblx0XHRcdGluZGV4OiAwXHJcblx0XHR9KTtcclxuXHRcdHRoaXMudmVydGV4QnVmZmVycyA9IFt0aGlzLmRlZmF1bHRWZXJ0ZXhCdWZmZXJdO1xyXG5cdFx0dGhpcy5fZGVmaW5lcyA9IHt9O1xyXG5cdFx0dGhpcy5ub3JtYWxzID0gW107XHJcblx0XHR0aGlzLnV2cyA9IFtdO1xyXG5cdFx0dGhpcy5wb3NpdGlvbnMgPSBbXTtcclxuXHRcdHRoaXMuaW5kaWNlcyA9IFtdO1xyXG5cdFx0dGhpcy50YW5nZW50cyA9IFtdO1xyXG5cdH1cclxuXHRnZXRBdHRyaWJ1dGUobmFtZTogc3RyaW5nKSB7XHJcblx0XHRyZXR1cm4gdGhpcy5kZWZhdWx0VmVydGV4QnVmZmVyLmdldEF0dHJpYnV0ZShuYW1lKTtcclxuXHR9XHJcblx0c2V0QXR0cmlidXRlKGF0dHJpYnV0ZTogQXR0cmlidXRlIHwgSW50ZXJsZWF2ZWRGbG9hdDMyQXR0cmlidXRlKSB7XHJcblx0XHR0aGlzLmRlZmF1bHRWZXJ0ZXhCdWZmZXIuc2V0QXR0cmlidXRlKGF0dHJpYnV0ZSk7XHJcblx0fVxyXG5cdHNldEluZGljZShpbmRpY2VzOiBBcnJheTxudW1iZXI+KSB7XHJcblx0XHR0aGlzLmluZGljZXMgPSBpbmRpY2VzO1xyXG5cdFx0aWYgKCF0aGlzLmluZGV4QnVmZmVyKSB0aGlzLmluZGV4QnVmZmVyID0gbmV3IEluZGV4QnVmZmVyKHRoaXMudHlwZSArIFwiSW5kZXhCdWZmZXJcIik7XHJcblx0XHR0aGlzLmluZGV4QnVmZmVyLnNldEluZGljZXMoaW5kaWNlcyk7XHJcblx0fVxyXG5cdHVwZGF0ZShmcmFtZVN0YXRlOiBGcmFtZVN0YXRlKSB7XHJcblx0XHQvLyB0b2RvXHJcblx0fVxyXG5cdGNvbXB1dGVCb3VuZGluZ1NwaGVyZShwb3NpdGlvbnM6IG51bWJlcltdLCBzdHJpZGUgPSAzKSB7XHJcblx0XHR0aGlzLmJvdW5kaW5nU3BoZXJlID0gQm91bmRpbmdTcGhlcmUuZnJvbVZlcnRpY2VzKHBvc2l0aW9ucywgbmV3IFZlY3RvcjMoMCwgMCwgMCksIHN0cmlkZSk7XHJcblx0fVxyXG5cdC8qKlxyXG5cdCAqIENhbGN1bGF0ZSBtZXNoIHRhbmdlbnQuXHJcblx0ICogQHJlbWFyayBuZWVkIHRvIHNldCBwb3NpdGlvbnMod2l0aCBvciBub3Qgd2l0aCBpbmRpY2VzKSwgbm9ybWFscywgdXYgYmVmb3JlIGNhbGN1bGF0aW9uLlxyXG5cdCAqIEByZW1hcmsgYmFzZWQgb24gaHR0cDovL2ZvdW5kYXRpb25zb2ZnYW1lZW5naW5lZGV2LmNvbS9GR0VEMi1zYW1wbGUucGRmXHJcblx0ICovXHJcblx0Y2FsY3VsYXRlVGFuZ2VudHMoKTogdm9pZCB7XHJcblx0XHRpZiAoIXRoaXMubm9ybWFscyB8fCAhdGhpcy51dnMpIHtcclxuXHRcdFx0dGhyb3cgXCJTZXQgbm9ybWFsIGFuZCB1diBiZWZvcmUgY2FsY3VsYXRpb24uXCI7XHJcblx0XHR9XHJcblx0XHRjb25zdCB7IGluZGljZXMsIHBvc2l0aW9ucywgbm9ybWFscywgdXZzIH0gPSB0aGlzO1xyXG5cdFx0Y29uc3QgdGVtcFBvczAgPSBuZXcgVmVjdG9yMygpLFxyXG5cdFx0XHR0ZW1wUG9zMSA9IG5ldyBWZWN0b3IzKCksXHJcblx0XHRcdHRlbXBQb3MyID0gbmV3IFZlY3RvcjMoKSxcclxuXHRcdFx0dGVtcFVWMCA9IG5ldyBWZWN0b3IyKCksXHJcblx0XHRcdHRlbXBVVjEgPSBuZXcgVmVjdG9yMigpLFxyXG5cdFx0XHR0ZW1wVVYyID0gbmV3IFZlY3RvcjIoKTtcclxuXHRcdGNvbnN0IGUxID0gbmV3IFZlY3RvcjMoKSxcclxuXHRcdFx0ZTIgPSBuZXcgVmVjdG9yMygpLFxyXG5cdFx0XHR0ID0gbmV3IFZlY3RvcjMoKSxcclxuXHRcdFx0YiA9IG5ldyBWZWN0b3IzKCksXHJcblx0XHRcdHRlbXAgPSBuZXcgVmVjdG9yMygpO1xyXG5cdFx0Y29uc3QgdmVydGV4Q291bnQgPSB0aGlzLmluZGljZXMubGVuZ3RoO1xyXG5cdFx0Y29uc3QgdHJpYW5nbGVDb3VudCA9IGluZGljZXMgPyBpbmRpY2VzLmxlbmd0aCAvIDMgOiBwb3NpdGlvbnMubGVuZ3RoIC8gMztcclxuXHRcdGNvbnN0IHRhbmdlbnRzID0gbmV3IEFycmF5PFZlY3RvcjQ+KHZlcnRleENvdW50KTtcclxuXHRcdGNvbnN0IGJpVGFuZ2VudHMgPSBuZXcgQXJyYXk8VmVjdG9yMz4odmVydGV4Q291bnQpO1xyXG5cdFx0dGhpcy50YW5nZW50cyA9IFtdO1xyXG5cdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCB2ZXJ0ZXhDb3VudDsgaSsrKSB7XHJcblx0XHRcdHRhbmdlbnRzW2ldID0gbmV3IFZlY3RvcjQoKTtcclxuXHRcdFx0YmlUYW5nZW50c1tpXSA9IG5ldyBWZWN0b3IzKCk7XHJcblx0XHR9XHJcblxyXG5cdFx0Ly8gQ2FsY3VsYXRlIHRhbmdlbnQgYW5kIGJpLXRhbmdlbnQgZm9yIGVhY2ggdHJpYW5nbGUgYW5kIGFkZCB0byBhbGwgdGhyZWUgdmVydGljZXMuXHJcblx0XHRmb3IgKGxldCBrID0gMDsgayA8IHRyaWFuZ2xlQ291bnQ7IGsrKykge1xyXG5cdFx0XHRsZXQgaTAgPSAzICogaztcclxuXHRcdFx0bGV0IGkxID0gMyAqIGsgKyAxO1xyXG5cdFx0XHRsZXQgaTIgPSAzICogayArIDI7XHJcblx0XHRcdGlmIChpbmRpY2VzKSB7XHJcblx0XHRcdFx0aTAgPSBpbmRpY2VzW2kwXTtcclxuXHRcdFx0XHRpMSA9IGluZGljZXNbaTFdO1xyXG5cdFx0XHRcdGkyID0gaW5kaWNlc1tpMl07XHJcblx0XHRcdH1cclxuXHJcblx0XHRcdGNvbnN0IHAwID0gdGVtcFBvczAuc2V0KHBvc2l0aW9uc1tpMF0sIHBvc2l0aW9uc1tpMCArIDFdLCBwb3NpdGlvbnNbaTAgKyAyXSk7XHJcblx0XHRcdGNvbnN0IHAxID0gdGVtcFBvczEuc2V0KHBvc2l0aW9uc1tpMV0sIHBvc2l0aW9uc1tpMSArIDFdLCBwb3NpdGlvbnNbaTEgKyAyXSk7XHJcblx0XHRcdGNvbnN0IHAyID0gdGVtcFBvczIuc2V0KHBvc2l0aW9uc1tpMl0sIHBvc2l0aW9uc1tpMiArIDFdLCBwb3NpdGlvbnNbaTIgKyAyXSk7XHJcblx0XHRcdGNvbnN0IHcwID0gdGVtcFVWMC5zZXQodXZzW2kwXSwgdXZzW2kwICsgMV0pO1xyXG5cdFx0XHRjb25zdCB3MSA9IHRlbXBVVjEuc2V0KHV2c1tpMV0sIHV2c1tpMSArIDFdKTtcclxuXHRcdFx0Y29uc3QgdzIgPSB0ZW1wVVYyLnNldCh1dnNbaTJdLCB1dnNbaTIgKyAxXSk7XHJcblxyXG5cdFx0XHRWZWN0b3IzLnN1YnRyYWN0KHAxLCBwMCwgZTEpO1xyXG5cdFx0XHRWZWN0b3IzLnN1YnRyYWN0KHAyLCBwMCwgZTIpO1xyXG5cdFx0XHRjb25zdCB4MSA9IHcxLnggLSB3MC54O1xyXG5cdFx0XHRjb25zdCB4MiA9IHcyLnggLSB3MC54O1xyXG5cdFx0XHRjb25zdCB5MSA9IHcxLnkgLSB3MC55O1xyXG5cdFx0XHRjb25zdCB5MiA9IHcyLnkgLSB3MC55O1xyXG5cdFx0XHRjb25zdCByID0gMS4wIC8gKHgxICogeTIgLSB4MiAqIHkxKTtcclxuXHJcblx0XHRcdFZlY3RvcjMubXVsdGlwbHlCeVNjYWxhcihlMSwgeTIgKiByLCB0KTtcclxuXHRcdFx0VmVjdG9yMy5tdWx0aXBseUJ5U2NhbGFyKGUyLCB5MSAqIHIsIHRlbXApO1xyXG5cdFx0XHRWZWN0b3IzLnN1YnRyYWN0KHQsIHRlbXAsIHQpO1xyXG5cdFx0XHRWZWN0b3IzLm11bHRpcGx5QnlTY2FsYXIoZTIsIHgxICogciwgYik7XHJcblx0XHRcdFZlY3RvcjMubXVsdGlwbHlCeVNjYWxhcihlMSwgeDIgKiByLCB0ZW1wKTtcclxuXHRcdFx0VmVjdG9yMy5zdWJ0cmFjdChiLCB0ZW1wLCBiKTtcclxuXHJcblx0XHRcdGxldCB0YW5nZW50ID0gdGFuZ2VudHNbaTBdO1xyXG5cdFx0XHR0YW5nZW50LnNldCh0YW5nZW50LnggKyB0LngsIHRhbmdlbnQueSArIHQueSwgdGFuZ2VudC56ICsgdC56LCAxLjApO1xyXG5cclxuXHRcdFx0dGFuZ2VudCA9IHRhbmdlbnRzW2kxXTtcclxuXHRcdFx0dGFuZ2VudC5zZXQodGFuZ2VudC54ICsgdC54LCB0YW5nZW50LnkgKyB0LnksIHRhbmdlbnQueiArIHQueiwgMS4wKTtcclxuXHJcblx0XHRcdHRhbmdlbnQgPSB0YW5nZW50c1tpMl07XHJcblx0XHRcdHRhbmdlbnQuc2V0KHRhbmdlbnQueCArIHQueCwgdGFuZ2VudC55ICsgdC55LCB0YW5nZW50LnogKyB0LnosIDEuMCk7XHJcblx0XHRcdGJpVGFuZ2VudHNbaTBdLmFkZChiKTtcclxuXHRcdFx0YmlUYW5nZW50c1tpMV0uYWRkKGIpO1xyXG5cdFx0XHRiaVRhbmdlbnRzW2kyXS5hZGQoYik7XHJcblx0XHR9XHJcblxyXG5cdFx0Ly8gT3J0aG9ub3JtYWxpemUgZWFjaCB0YW5nZW50IGFuZCBjYWxjdWxhdGUgdGhlIGhhbmRlZG5lc3MuXHJcblx0XHRmb3IgKGxldCBpID0gMDsgaSA8IHZlcnRleENvdW50OyBpKyspIHtcclxuXHRcdFx0Y29uc3QgbiA9IG5ldyBWZWN0b3IzKG5vcm1hbHNbMyAqIGldLCBub3JtYWxzWzMgKiBpICsgMV0sIG5vcm1hbHNbMyAqIGkgKyAyXSk7XHJcblx0XHRcdGNvbnN0IGIgPSBiaVRhbmdlbnRzW2ldO1xyXG5cdFx0XHRjb25zdCB0YW5nZW50ID0gdGFuZ2VudHNbaV07XHJcblx0XHRcdHQuc2V0KHRhbmdlbnQueCwgdGFuZ2VudC55LCB0YW5nZW50LnopO1xyXG5cclxuXHRcdFx0VmVjdG9yMy5jcm9zcyh0LCBiLCB0ZW1wKTtcclxuXHRcdFx0Y29uc3QgdyA9IFZlY3RvcjMuZG90KHRlbXAsIG4pID4gMC4wID8gMSA6IC0xO1xyXG5cdFx0XHRWZWN0b3IzLm11bHRpcGx5QnlTY2FsYXIobiwgVmVjdG9yMy5kb3QodCwgbiksIHRlbXApO1xyXG5cdFx0XHRWZWN0b3IzLnN1YnRyYWN0KHQsIHRlbXAsIHQpO1xyXG5cdFx0XHRWZWN0b3IzLm5vcm1hbGl6ZSh0LCB0KTtcclxuXHRcdFx0Ly8gdC5ub3JtYWxpemUoKTtcclxuXHRcdFx0dGFuZ2VudC5zZXQodC54LCB0LnksIHQueiwgdyk7XHJcblx0XHRcdHRoaXMudGFuZ2VudHMucHVzaCh0LngsIHQueSwgdC56LCB3KTtcclxuXHRcdH1cclxuXHRcdC8vIHRoaXMuc2V0VGFuZ2VudHModGFuZ2VudHMpO1xyXG5cdH1cclxuXHRkZXN0cm95KCkge1xyXG5cdFx0dGhpcz8uaW5kZXhCdWZmZXIuZGVzdHJveSgpO1xyXG5cdFx0dGhpcy5kZWZhdWx0VmVydGV4QnVmZmVyLmRlc3Ryb3koKTtcclxuXHRcdHRoaXMubm9ybWFscyA9IG51bGw7XHJcblx0XHR0aGlzLnV2cyA9IG51bGw7XHJcblx0XHR0aGlzLnBvc2l0aW9ucyA9IG51bGw7XHJcblx0XHR0aGlzLmluZGljZXMgPSBudWxsO1xyXG5cdFx0dGhpcy50YW5nZW50cyA9IG51bGw7XHJcblx0XHR0aGlzLmJvdW5kaW5nU3BoZXJlID0gdW5kZWZpbmVkO1xyXG5cdH1cclxufVxyXG4iLCJpbXBvcnQgeyBGbG9hdDMyQXR0cmlidXRlIH0gZnJvbSBcIi4uL3JlbmRlci9BdHRyaWJ1dGVcIjtcclxuaW1wb3J0IEdlb21ldHJ5IGZyb20gXCIuL0dlb21ldHJ5XCI7XHJcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFBsYW5lR2VvbWV0cnkgZXh0ZW5kcyBHZW9tZXRyeSB7XHJcblx0Y29uc3RydWN0b3IocHVibGljIHdpZHRoOiBudW1iZXIgPSAxMCwgcHVibGljIGhlaWdodDogbnVtYmVyID0gMTApIHtcclxuXHRcdHN1cGVyKHtcclxuXHRcdFx0dHlwZTogXCJwbGFuZUdlb21ldHJ5XCJcclxuXHRcdH0pO1xyXG5cdFx0dGhpcy5kZWZpbmVzID0ge1xyXG5cdFx0XHRIQVNfTk9STUFMOiB0cnVlXHJcblx0XHR9O1xyXG5cdFx0dGhpcy5pbml0KCk7XHJcblx0fVxyXG5cdHByaXZhdGUgaW5pdCgpIHtcclxuXHRcdC8vIGdlbmVyYXRlIHBvcyB1diBub3JtYWwgc28gb25cclxuXHRcdGNvbnN0IHsgaW5kaWNlcywgbm9ybWFscywgdXZzLCB2ZXJ0aWNlcyB9ID0gdGhpcy5jcmVhdGVHcmlkKHRoaXMud2lkdGgsIHRoaXMuaGVpZ2h0KTtcclxuXHRcdHRoaXMuY29tcHV0ZUJvdW5kaW5nU3BoZXJlKHZlcnRpY2VzKTtcclxuXHRcdHRoaXMuc2V0QXR0cmlidXRlKG5ldyBGbG9hdDMyQXR0cmlidXRlKFwicG9zaXRpb25cIiwgdmVydGljZXMsIDMpKTtcclxuXHRcdHRoaXMuc2V0QXR0cmlidXRlKG5ldyBGbG9hdDMyQXR0cmlidXRlKFwibm9ybWFsXCIsIG5vcm1hbHMsIDMpKTtcclxuXHRcdHRoaXMuc2V0QXR0cmlidXRlKG5ldyBGbG9hdDMyQXR0cmlidXRlKFwidXZcIiwgdXZzLCAyKSk7XHJcblx0XHR0aGlzLnNldEluZGljZShpbmRpY2VzKTtcclxuXHRcdHRoaXMuY291bnQgPSBpbmRpY2VzLmxlbmd0aDtcclxuXHR9XHJcblx0cHJpdmF0ZSBjcmVhdGVHcmlkKHdpZHRoID0gMSwgaGVpZ2h0ID0gMSwgd2lkdGhTZWdtZW50cyA9IDEsIGhlaWdodFNlZ21lbnRzID0gMSkge1xyXG5cdFx0Y29uc3Qgd2lkdGhfaGFsZiA9IHdpZHRoIC8gMjtcclxuXHRcdGNvbnN0IGhlaWdodF9oYWxmID0gaGVpZ2h0IC8gMjtcclxuXHJcblx0XHRjb25zdCBncmlkWCA9IE1hdGguZmxvb3Iod2lkdGhTZWdtZW50cyk7XHJcblx0XHRjb25zdCBncmlkWSA9IE1hdGguZmxvb3IoaGVpZ2h0U2VnbWVudHMpO1xyXG5cclxuXHRcdGNvbnN0IGdyaWRYMSA9IGdyaWRYICsgMTtcclxuXHRcdGNvbnN0IGdyaWRZMSA9IGdyaWRZICsgMTtcclxuXHJcblx0XHRjb25zdCBzZWdtZW50X3dpZHRoID0gd2lkdGggLyBncmlkWDtcclxuXHRcdGNvbnN0IHNlZ21lbnRfaGVpZ2h0ID0gaGVpZ2h0IC8gZ3JpZFk7XHJcblxyXG5cdFx0Ly9cclxuXHJcblx0XHRjb25zdCBpbmRpY2VzID0gW107XHJcblx0XHRjb25zdCB2ZXJ0aWNlcyA9IFtdO1xyXG5cdFx0Y29uc3Qgbm9ybWFscyA9IFtdO1xyXG5cdFx0Y29uc3QgdXZzID0gW107XHJcblxyXG5cdFx0Zm9yIChsZXQgaXkgPSAwOyBpeSA8IGdyaWRZMTsgaXkrKykge1xyXG5cdFx0XHRjb25zdCB5ID0gaXkgKiBzZWdtZW50X2hlaWdodCAtIGhlaWdodF9oYWxmO1xyXG5cclxuXHRcdFx0Zm9yIChsZXQgaXggPSAwOyBpeCA8IGdyaWRYMTsgaXgrKykge1xyXG5cdFx0XHRcdGNvbnN0IHggPSBpeCAqIHNlZ21lbnRfd2lkdGggLSB3aWR0aF9oYWxmO1xyXG5cclxuXHRcdFx0XHR2ZXJ0aWNlcy5wdXNoKHgsIC15LCAwKTtcclxuXHJcblx0XHRcdFx0bm9ybWFscy5wdXNoKDAsIDAsIDEpO1xyXG5cclxuXHRcdFx0XHR1dnMucHVzaChpeCAvIGdyaWRYKTtcclxuXHRcdFx0XHR1dnMucHVzaCgxIC0gaXkgLyBncmlkWSk7XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHJcblx0XHRmb3IgKGxldCBpeSA9IDA7IGl5IDwgZ3JpZFk7IGl5KyspIHtcclxuXHRcdFx0Zm9yIChsZXQgaXggPSAwOyBpeCA8IGdyaWRYOyBpeCsrKSB7XHJcblx0XHRcdFx0Y29uc3QgYSA9IGl4ICsgZ3JpZFgxICogaXk7XHJcblx0XHRcdFx0Y29uc3QgYiA9IGl4ICsgZ3JpZFgxICogKGl5ICsgMSk7XHJcblx0XHRcdFx0Y29uc3QgYyA9IGl4ICsgMSArIGdyaWRYMSAqIChpeSArIDEpO1xyXG5cdFx0XHRcdGNvbnN0IGQgPSBpeCArIDEgKyBncmlkWDEgKiBpeTtcclxuXHJcblx0XHRcdFx0aW5kaWNlcy5wdXNoKGEsIGIsIGQpO1xyXG5cdFx0XHRcdGluZGljZXMucHVzaChiLCBjLCBkKTtcclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cdFx0cmV0dXJuIHsgaW5kaWNlcywgbm9ybWFscywgdXZzLCB2ZXJ0aWNlcyB9O1xyXG5cdH1cclxufVxyXG4iLCJpbXBvcnQgZGVmYXVsdFZhbHVlIGZyb20gXCIuLi91dGlscy9kZWZhdWx0VmFsdWVcIjtcclxuaW1wb3J0IGRlZmluZWQgZnJvbSBcIi4uL3V0aWxzL2RlZmluZWRcIjtcclxuaW1wb3J0IEdNYXRoIGZyb20gXCIuL01hdGhcIjtcclxuaW1wb3J0IE1hdHJpeDQgZnJvbSBcIi4vTWF0cml4NFwiO1xyXG5pbXBvcnQgVmVjdG9yMyBmcm9tIFwiLi9WZWN0b3IzXCI7XHJcbi8qKlxyXG4gKiBBIHNldCBvZiA0LWRpbWVuc2lvbmFsIGNvb3JkaW5hdGVzIHVzZWQgdG8gcmVwcmVzZW50IHJvdGF0aW9uIGluIDMtZGltZW5zaW9uYWwgc3BhY2UuXHJcbiAqIEBhbGlhcyBRdWF0ZXJuaW9uXHJcbiAqIEBjb25zdHJ1Y3RvclxyXG4gKlxyXG4gKiBAcGFyYW0ge051bWJlcn0gW3g9MC4wXSBUaGUgWCBjb21wb25lbnQuXHJcbiAqIEBwYXJhbSB7TnVtYmVyfSBbeT0wLjBdIFRoZSBZIGNvbXBvbmVudC5cclxuICogQHBhcmFtIHtOdW1iZXJ9IFt6PTAuMF0gVGhlIFogY29tcG9uZW50LlxyXG4gKiBAcGFyYW0ge051bWJlcn0gW3c9MC4wXSBUaGUgVyBjb21wb25lbnQuXHJcbiAqXHJcbiAqIEBzZWUgUGFja2FibGVGb3JJbnRlcnBvbGF0aW9uXHJcbiAqL1xyXG5leHBvcnQgY2xhc3MgUXVhdGVybmlvbiB7XHJcblx0cHVibGljIHN0YXRpYyBaRVJPID0gT2JqZWN0LmZyZWV6ZShuZXcgUXVhdGVybmlvbigwLjAsIDAuMCwgMC4wLCAwLjApKTtcclxuXHJcblx0cHVibGljIHN0YXRpYyBJREVOVElUWSA9IE9iamVjdC5mcmVlemUobmV3IFF1YXRlcm5pb24oMC4wLCAwLjAsIDAuMCwgMS4wKSk7XHJcblxyXG5cdGNvbnN0cnVjdG9yKHB1YmxpYyB4OiBudW1iZXIgPSAwLCBwdWJsaWMgeTogbnVtYmVyID0gMCwgcHVibGljIHo6IG51bWJlciA9IDAsIHB1YmxpYyB3OiBudW1iZXIgPSAxKSB7fVxyXG5cdHNldCh4LCB5LCB6LCB3KSB7XHJcblx0XHR0aGlzLnggPSB4O1xyXG5cdFx0dGhpcy55ID0geTtcclxuXHRcdHRoaXMueiA9IHo7XHJcblx0XHR0aGlzLncgPSB3O1xyXG5cdH1cclxuXHRub3JtYWxpemUoKSB7XHJcblx0XHRjb25zdCBpbnZlcnNlTWFnbml0dWRlID0gMS4wIC8gUXVhdGVybmlvbi5tYWduaXR1ZGUodGhpcyk7XHJcblx0XHRjb25zdCB4ID0gdGhpcy54ICogaW52ZXJzZU1hZ25pdHVkZTtcclxuXHRcdGNvbnN0IHkgPSB0aGlzLnkgKiBpbnZlcnNlTWFnbml0dWRlO1xyXG5cdFx0Y29uc3QgeiA9IHRoaXMueiAqIGludmVyc2VNYWduaXR1ZGU7XHJcblx0XHRjb25zdCB3ID0gdGhpcy53ICogaW52ZXJzZU1hZ25pdHVkZTtcclxuXHJcblx0XHR0aGlzLnggPSB4O1xyXG5cdFx0dGhpcy55ID0geTtcclxuXHRcdHRoaXMueiA9IHo7XHJcblx0XHR0aGlzLncgPSB3O1xyXG5cdFx0cmV0dXJuIHRoaXM7XHJcblx0fVxyXG5cdGludmVydCgpIHtcclxuXHRcdHRoaXMueCAqPSAtMTtcclxuXHRcdHRoaXMueSAqPSAtMTtcclxuXHRcdHRoaXMueiAqPSAtMTtcclxuXHJcblx0XHRyZXR1cm4gdGhpcztcclxuXHR9XHJcblx0ZG90KHY6IFF1YXRlcm5pb24pOiBudW1iZXIge1xyXG5cdFx0cmV0dXJuIHRoaXMueCAqIHYueCArIHRoaXMueSAqIHYueSArIHRoaXMueiAqIHYueiArIHRoaXMudyAqIHYudztcclxuXHR9XHJcblx0c2V0RnJvbVVuaXRWZWN0b3JzKHZGcm9tOiBWZWN0b3IzLCB2VG86IFZlY3RvcjMpOiBRdWF0ZXJuaW9uIHtcclxuXHRcdC8vIGFzc3VtZXMgZGlyZWN0aW9uIHZlY3RvcnMgdkZyb20gYW5kIHZUbyBhcmUgbm9ybWFsaXplZFxyXG5cdFx0bGV0IHIgPSBWZWN0b3IzLmRvdCh2RnJvbSwgdlRvKSArIDE7XHJcblx0XHRpZiAociA8IE51bWJlci5FUFNJTE9OKSB7XHJcblx0XHRcdC8vIHZGcm9tIGFuZCB2VG8gcG9pbnQgaW4gb3Bwb3NpdGUgZGlyZWN0aW9uc1xyXG5cclxuXHRcdFx0ciA9IDA7XHJcblxyXG5cdFx0XHRpZiAoTWF0aC5hYnModkZyb20ueCkgPiBNYXRoLmFicyh2RnJvbS56KSkge1xyXG5cdFx0XHRcdHRoaXMueCA9IC12RnJvbS55O1xyXG5cdFx0XHRcdHRoaXMueSA9IHZGcm9tLng7XHJcblx0XHRcdFx0dGhpcy56ID0gMDtcclxuXHRcdFx0XHR0aGlzLncgPSByO1xyXG5cdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdHRoaXMueCA9IDA7XHJcblx0XHRcdFx0dGhpcy55ID0gLXZGcm9tLno7XHJcblx0XHRcdFx0dGhpcy56ID0gdkZyb20ueTtcclxuXHRcdFx0XHR0aGlzLncgPSByO1xyXG5cdFx0XHR9XHJcblx0XHR9IGVsc2Uge1xyXG5cdFx0XHQvLyBjcm9zc1ZlY3RvcnMoIHZGcm9tLCB2VG8gKTsgLy8gaW5saW5lZCB0byBhdm9pZCBjeWNsaWMgZGVwZW5kZW5jeSBvbiBWZWN0b3IzXHJcblxyXG5cdFx0XHR0aGlzLnggPSB2RnJvbS55ICogdlRvLnogLSB2RnJvbS56ICogdlRvLnk7XHJcblx0XHRcdHRoaXMueSA9IHZGcm9tLnogKiB2VG8ueCAtIHZGcm9tLnggKiB2VG8uejtcclxuXHRcdFx0dGhpcy56ID0gdkZyb20ueCAqIHZUby55IC0gdkZyb20ueSAqIHZUby54O1xyXG5cdFx0XHR0aGlzLncgPSByO1xyXG5cdFx0fVxyXG5cclxuXHRcdHJldHVybiB0aGlzLm5vcm1hbGl6ZSgpO1xyXG5cdH1cclxuXHRzZXRGcm9tUm90YXRpb25NYXRyaXgobWF0cml4OiBNYXRyaXg0KTogUXVhdGVybmlvbiB7XHJcblx0XHRjb25zdCB0ZSA9IG1hdHJpeCxcclxuXHRcdFx0bTExID0gdGVbMF0sXHJcblx0XHRcdG0xMiA9IHRlWzRdLFxyXG5cdFx0XHRtMTMgPSB0ZVs4XSxcclxuXHRcdFx0bTIxID0gdGVbMV0sXHJcblx0XHRcdG0yMiA9IHRlWzVdLFxyXG5cdFx0XHRtMjMgPSB0ZVs5XSxcclxuXHRcdFx0bTMxID0gdGVbMl0sXHJcblx0XHRcdG0zMiA9IHRlWzZdLFxyXG5cdFx0XHRtMzMgPSB0ZVsxMF0sXHJcblx0XHRcdHRyYWNlID0gbTExICsgbTIyICsgbTMzO1xyXG5cclxuXHRcdGlmICh0cmFjZSA+IDApIHtcclxuXHRcdFx0Y29uc3QgcyA9IDAuNSAvIE1hdGguc3FydCh0cmFjZSArIDEuMCk7XHJcblxyXG5cdFx0XHR0aGlzLncgPSAwLjI1IC8gcztcclxuXHRcdFx0dGhpcy54ID0gKG0zMiAtIG0yMykgKiBzO1xyXG5cdFx0XHR0aGlzLnkgPSAobTEzIC0gbTMxKSAqIHM7XHJcblx0XHRcdHRoaXMueiA9IChtMjEgLSBtMTIpICogcztcclxuXHRcdH0gZWxzZSBpZiAobTExID4gbTIyICYmIG0xMSA+IG0zMykge1xyXG5cdFx0XHRjb25zdCBzID0gMi4wICogTWF0aC5zcXJ0KDEuMCArIG0xMSAtIG0yMiAtIG0zMyk7XHJcblxyXG5cdFx0XHR0aGlzLncgPSAobTMyIC0gbTIzKSAvIHM7XHJcblx0XHRcdHRoaXMueCA9IDAuMjUgKiBzO1xyXG5cdFx0XHR0aGlzLnkgPSAobTEyICsgbTIxKSAvIHM7XHJcblx0XHRcdHRoaXMueiA9IChtMTMgKyBtMzEpIC8gcztcclxuXHRcdH0gZWxzZSBpZiAobTIyID4gbTMzKSB7XHJcblx0XHRcdGNvbnN0IHMgPSAyLjAgKiBNYXRoLnNxcnQoMS4wICsgbTIyIC0gbTExIC0gbTMzKTtcclxuXHJcblx0XHRcdHRoaXMudyA9IChtMTMgLSBtMzEpIC8gcztcclxuXHRcdFx0dGhpcy54ID0gKG0xMiArIG0yMSkgLyBzO1xyXG5cdFx0XHR0aGlzLnkgPSAwLjI1ICogcztcclxuXHRcdFx0dGhpcy56ID0gKG0yMyArIG0zMikgLyBzO1xyXG5cdFx0fSBlbHNlIHtcclxuXHRcdFx0Y29uc3QgcyA9IDIuMCAqIE1hdGguc3FydCgxLjAgKyBtMzMgLSBtMTEgLSBtMjIpO1xyXG5cclxuXHRcdFx0dGhpcy53ID0gKG0yMSAtIG0xMikgLyBzO1xyXG5cdFx0XHR0aGlzLnggPSAobTEzICsgbTMxKSAvIHM7XHJcblx0XHRcdHRoaXMueSA9IChtMjMgKyBtMzIpIC8gcztcclxuXHRcdFx0dGhpcy56ID0gMC4yNSAqIHM7XHJcblx0XHR9XHJcblx0XHRyZXR1cm4gdGhpcztcclxuXHR9XHJcblx0Y2xvbmUoKSB7XHJcblx0XHRyZXR1cm4gUXVhdGVybmlvbi5jbG9uZSh0aGlzLCB0aGlzKTtcclxuXHR9XHJcblxyXG5cdGVxdWFscyhyaWdodDogUXVhdGVybmlvbik6IGJvb2xlYW4ge1xyXG5cdFx0cmV0dXJuIFF1YXRlcm5pb24uZXF1YWxzKHRoaXMsIHJpZ2h0KTtcclxuXHR9XHJcblxyXG5cdGVxdWFsc0Vwc2lsb24ocmlnaHQ6IFF1YXRlcm5pb24sIGVwc2lsb24gPSAwKTogYm9vbGVhbiB7XHJcblx0XHRyZXR1cm4gUXVhdGVybmlvbi5lcXVhbHNFcHNpbG9uKHRoaXMsIHJpZ2h0LCBlcHNpbG9uKTtcclxuXHR9XHJcblx0dG9BcnJheSgpOiBudW1iZXJbXSB7XHJcblx0XHRjb25zdCB7IHgsIHksIHosIHcgfSA9IHRoaXM7XHJcblx0XHRyZXR1cm4gW3gsIHksIHosIHddO1xyXG5cdH1cclxuXHRzdGF0aWMgZnJvbUF4aXNBbmdsZShheGlzOiBWZWN0b3IzLCBhbmdsZTogbnVtYmVyKTogUXVhdGVybmlvbiB7XHJcblx0XHRjb25zdCBoYWxmQW5nbGUgPSBhbmdsZSAvIDIuMDtcclxuXHRcdGNvbnN0IHMgPSBNYXRoLnNpbihoYWxmQW5nbGUpO1xyXG5cdFx0ZnJvbUF4aXNBbmdsZVNjcmF0Y2ggPSBWZWN0b3IzLm5vcm1hbGl6ZShheGlzLCBmcm9tQXhpc0FuZ2xlU2NyYXRjaCk7XHJcblxyXG5cdFx0Y29uc3QgeCA9IGZyb21BeGlzQW5nbGVTY3JhdGNoLnggKiBzO1xyXG5cdFx0Y29uc3QgeSA9IGZyb21BeGlzQW5nbGVTY3JhdGNoLnkgKiBzO1xyXG5cdFx0Y29uc3QgeiA9IGZyb21BeGlzQW5nbGVTY3JhdGNoLnogKiBzO1xyXG5cdFx0Y29uc3QgdyA9IE1hdGguY29zKGhhbGZBbmdsZSk7XHJcblx0XHQvLyBpZiAoIWRlZmluZWQocmVzdWx0KSkge1xyXG5cdFx0Ly8gICByZXR1cm5cclxuXHRcdC8vIH1cclxuXHRcdGNvbnN0IHJlc3VsdCA9IG5ldyBRdWF0ZXJuaW9uKHgsIHksIHosIHcpO1xyXG5cdFx0cmVzdWx0LnggPSB4O1xyXG5cdFx0cmVzdWx0LnkgPSB5O1xyXG5cdFx0cmVzdWx0LnogPSB6O1xyXG5cdFx0cmVzdWx0LncgPSB3O1xyXG5cdFx0cmV0dXJuIHJlc3VsdDtcclxuXHR9XHJcblxyXG5cdC8vIHN0YXRpYyBmcm9tUm90YXRpb25NYXRyaXgobWF0cml4OiBNYXRyaXgzLCByZXN1bHQ6IFF1YXRlcm5pb24pOiBRdWF0ZXJuaW9uIHtcclxuXHQvLyBcdGxldCByb290O1xyXG5cdC8vIFx0bGV0IHg7XHJcblx0Ly8gXHRsZXQgeTtcclxuXHQvLyBcdGxldCB6O1xyXG5cdC8vIFx0bGV0IHc7XHJcblxyXG5cdC8vIFx0Y29uc3QgbTAwID0gbWF0cml4W01hdHJpeDMuQ09MVU1OMFJPVzBdO1xyXG5cdC8vIFx0Y29uc3QgbTExID0gbWF0cml4W01hdHJpeDMuQ09MVU1OMVJPVzFdO1xyXG5cdC8vIFx0Y29uc3QgbTIyID0gbWF0cml4W01hdHJpeDMuQ09MVU1OMlJPVzJdO1xyXG5cdC8vIFx0Y29uc3QgdHJhY2UgPSBtMDAgKyBtMTEgKyBtMjI7XHJcblxyXG5cdC8vIFx0aWYgKHRyYWNlID4gMC4wKSB7XHJcblx0Ly8gXHRcdC8vIHx3fCA+IDEvMiwgbWF5IGFzIHdlbGwgY2hvb3NlIHcgPiAxLzJcclxuXHQvLyBcdFx0cm9vdCA9IE1hdGguc3FydCh0cmFjZSArIDEuMCk7IC8vIDJ3XHJcblx0Ly8gXHRcdHcgPSAwLjUgKiByb290O1xyXG5cdC8vIFx0XHRyb290ID0gMC41IC8gcm9vdDsgLy8gMS8oNHcpXHJcblxyXG5cdC8vIFx0XHR4ID0gKG1hdHJpeFtNYXRyaXgzLkNPTFVNTjFST1cyXSAtIG1hdHJpeFtNYXRyaXgzLkNPTFVNTjJST1cxXSkgKiByb290O1xyXG5cdC8vIFx0XHR5ID0gKG1hdHJpeFtNYXRyaXgzLkNPTFVNTjJST1cwXSAtIG1hdHJpeFtNYXRyaXgzLkNPTFVNTjBST1cyXSkgKiByb290O1xyXG5cdC8vIFx0XHR6ID0gKG1hdHJpeFtNYXRyaXgzLkNPTFVNTjBST1cxXSAtIG1hdHJpeFtNYXRyaXgzLkNPTFVNTjFST1cwXSkgKiByb290O1xyXG5cdC8vIFx0fSBlbHNlIHtcclxuXHQvLyBcdFx0Ly8gfHd8IDw9IDEvMlxyXG5cdC8vIFx0XHRjb25zdCBuZXh0ID0gZnJvbVJvdGF0aW9uTWF0cml4TmV4dDtcclxuXHJcblx0Ly8gXHRcdGxldCBpID0gMDtcclxuXHQvLyBcdFx0aWYgKG0xMSA+IG0wMCkge1xyXG5cdC8vIFx0XHRcdGkgPSAxO1xyXG5cdC8vIFx0XHR9XHJcblx0Ly8gXHRcdGlmIChtMjIgPiBtMDAgJiYgbTIyID4gbTExKSB7XHJcblx0Ly8gXHRcdFx0aSA9IDI7XHJcblx0Ly8gXHRcdH1cclxuXHQvLyBcdFx0Y29uc3QgaiA9IG5leHRbaV07XHJcblx0Ly8gXHRcdGNvbnN0IGsgPSBuZXh0W2pdO1xyXG5cclxuXHQvLyBcdFx0cm9vdCA9IE1hdGguc3FydChcclxuXHQvLyBcdFx0XHRtYXRyaXhbTWF0cml4My5nZXRFbGVtZW50SW5kZXgoaSwgaSldIC1cclxuXHQvLyBcdFx0XHRcdG1hdHJpeFtNYXRyaXgzLmdldEVsZW1lbnRJbmRleChqLCBqKV0gLVxyXG5cdC8vIFx0XHRcdFx0bWF0cml4W01hdHJpeDMuZ2V0RWxlbWVudEluZGV4KGssIGspXSArXHJcblx0Ly8gXHRcdFx0XHQxLjBcclxuXHQvLyBcdFx0KTtcclxuXHJcblx0Ly8gXHRcdGNvbnN0IHF1YXQgPSBmcm9tUm90YXRpb25NYXRyaXhRdWF0O1xyXG5cdC8vIFx0XHRxdWF0W2ldID0gMC41ICogcm9vdDtcclxuXHQvLyBcdFx0cm9vdCA9IDAuNSAvIHJvb3Q7XHJcblx0Ly8gXHRcdHcgPSAobWF0cml4W01hdHJpeDMuZ2V0RWxlbWVudEluZGV4KGssIGopXSAtIG1hdHJpeFtNYXRyaXgzLmdldEVsZW1lbnRJbmRleChqLCBrKV0pICogcm9vdDtcclxuXHQvLyBcdFx0cXVhdFtqXSA9IChtYXRyaXhbTWF0cml4My5nZXRFbGVtZW50SW5kZXgoaiwgaSldICsgbWF0cml4W01hdHJpeDMuZ2V0RWxlbWVudEluZGV4KGksIGopXSkgKiByb290O1xyXG5cdC8vIFx0XHRxdWF0W2tdID0gKG1hdHJpeFtNYXRyaXgzLmdldEVsZW1lbnRJbmRleChrLCBpKV0gKyBtYXRyaXhbTWF0cml4My5nZXRFbGVtZW50SW5kZXgoaSwgayldKSAqIHJvb3Q7XHJcblxyXG5cdC8vIFx0XHR4ID0gLXF1YXRbMF07XHJcblx0Ly8gXHRcdHkgPSAtcXVhdFsxXTtcclxuXHQvLyBcdFx0eiA9IC1xdWF0WzJdO1xyXG5cdC8vIFx0fVxyXG5cclxuXHQvLyBcdGlmICghZGVmaW5lZChyZXN1bHQpKSB7XHJcblx0Ly8gXHRcdHJldHVybiBuZXcgUXVhdGVybmlvbih4LCB5LCB6LCB3KTtcclxuXHQvLyBcdH1cclxuXHQvLyBcdHJlc3VsdC54ID0geDtcclxuXHQvLyBcdHJlc3VsdC55ID0geTtcclxuXHQvLyBcdHJlc3VsdC56ID0gejtcclxuXHQvLyBcdHJlc3VsdC53ID0gdztcclxuXHQvLyBcdHJldHVybiByZXN1bHQ7XHJcblx0Ly8gfVxyXG5cclxuXHRzdGF0aWMgY2xvbmUocXVhdGVybmlvbjogUXVhdGVybmlvbiwgcmVzdWx0OiBRdWF0ZXJuaW9uKTogUXVhdGVybmlvbiB7XHJcblx0XHRpZiAoIWRlZmluZWQocXVhdGVybmlvbikpIHtcclxuXHRcdFx0cmV0dXJuIHVuZGVmaW5lZDtcclxuXHRcdH1cclxuXHJcblx0XHRpZiAoIWRlZmluZWQocmVzdWx0KSkge1xyXG5cdFx0XHRyZXR1cm4gbmV3IFF1YXRlcm5pb24ocXVhdGVybmlvbi54LCBxdWF0ZXJuaW9uLnksIHF1YXRlcm5pb24ueiwgcXVhdGVybmlvbi53KTtcclxuXHRcdH1cclxuXHJcblx0XHRyZXN1bHQueCA9IHF1YXRlcm5pb24ueDtcclxuXHRcdHJlc3VsdC55ID0gcXVhdGVybmlvbi55O1xyXG5cdFx0cmVzdWx0LnogPSBxdWF0ZXJuaW9uLno7XHJcblx0XHRyZXN1bHQudyA9IHF1YXRlcm5pb24udztcclxuXHRcdHJldHVybiByZXN1bHQ7XHJcblx0fVxyXG5cclxuXHRzdGF0aWMgY29uanVnYXRlKHF1YXRlcm5pb246IFF1YXRlcm5pb24sIHJlc3VsdDogUXVhdGVybmlvbik6IFF1YXRlcm5pb24ge1xyXG5cdFx0cmVzdWx0LnggPSAtcXVhdGVybmlvbi54O1xyXG5cdFx0cmVzdWx0LnkgPSAtcXVhdGVybmlvbi55O1xyXG5cdFx0cmVzdWx0LnogPSAtcXVhdGVybmlvbi56O1xyXG5cdFx0cmVzdWx0LncgPSBxdWF0ZXJuaW9uLnc7XHJcblx0XHRyZXR1cm4gcmVzdWx0O1xyXG5cdH1cclxuXHJcblx0c3RhdGljIG1hZ25pdHVkZVNxdWFyZWQocXVhdGVybmlvbjogUXVhdGVybmlvbik6IG51bWJlciB7XHJcblx0XHRyZXR1cm4gKFxyXG5cdFx0XHRxdWF0ZXJuaW9uLnggKiBxdWF0ZXJuaW9uLnggK1xyXG5cdFx0XHRxdWF0ZXJuaW9uLnkgKiBxdWF0ZXJuaW9uLnkgK1xyXG5cdFx0XHRxdWF0ZXJuaW9uLnogKiBxdWF0ZXJuaW9uLnogK1xyXG5cdFx0XHRxdWF0ZXJuaW9uLncgKiBxdWF0ZXJuaW9uLndcclxuXHRcdCk7XHJcblx0fVxyXG5cclxuXHRzdGF0aWMgbWFnbml0dWRlKHF1YXRlcm5pb246IFF1YXRlcm5pb24pOiBudW1iZXIge1xyXG5cdFx0cmV0dXJuIE1hdGguc3FydChRdWF0ZXJuaW9uLm1hZ25pdHVkZVNxdWFyZWQocXVhdGVybmlvbikpO1xyXG5cdH1cclxuXHJcblx0c3RhdGljIG5vcm1hbGl6ZShxdWF0ZXJuaW9uOiBRdWF0ZXJuaW9uLCByZXN1bHQ6IFF1YXRlcm5pb24pOiBRdWF0ZXJuaW9uIHtcclxuXHRcdGNvbnN0IGludmVyc2VNYWduaXR1ZGUgPSAxLjAgLyBRdWF0ZXJuaW9uLm1hZ25pdHVkZShxdWF0ZXJuaW9uKTtcclxuXHRcdGNvbnN0IHggPSBxdWF0ZXJuaW9uLnggKiBpbnZlcnNlTWFnbml0dWRlO1xyXG5cdFx0Y29uc3QgeSA9IHF1YXRlcm5pb24ueSAqIGludmVyc2VNYWduaXR1ZGU7XHJcblx0XHRjb25zdCB6ID0gcXVhdGVybmlvbi56ICogaW52ZXJzZU1hZ25pdHVkZTtcclxuXHRcdGNvbnN0IHcgPSBxdWF0ZXJuaW9uLncgKiBpbnZlcnNlTWFnbml0dWRlO1xyXG5cclxuXHRcdHJlc3VsdC54ID0geDtcclxuXHRcdHJlc3VsdC55ID0geTtcclxuXHRcdHJlc3VsdC56ID0gejtcclxuXHRcdHJlc3VsdC53ID0gdztcclxuXHRcdHJldHVybiByZXN1bHQ7XHJcblx0fVxyXG5cclxuXHRzdGF0aWMgaW52ZXJzZShxdWF0ZXJuaW9uOiBRdWF0ZXJuaW9uLCByZXN1bHQ6IFF1YXRlcm5pb24pOiBRdWF0ZXJuaW9uIHtcclxuXHRcdGNvbnN0IG1hZ25pdHVkZVNxdWFyZWQgPSBRdWF0ZXJuaW9uLm1hZ25pdHVkZVNxdWFyZWQocXVhdGVybmlvbik7XHJcblx0XHRyZXN1bHQgPSBRdWF0ZXJuaW9uLmNvbmp1Z2F0ZShxdWF0ZXJuaW9uLCByZXN1bHQpO1xyXG5cdFx0cmV0dXJuIFF1YXRlcm5pb24ubXVsdGlwbHlCeVNjYWxhcihyZXN1bHQsIDEuMCAvIG1hZ25pdHVkZVNxdWFyZWQsIHJlc3VsdCk7XHJcblx0fVxyXG5cclxuXHRzdGF0aWMgYWRkKGxlZnQ6IFF1YXRlcm5pb24sIHJpZ2h0OiBRdWF0ZXJuaW9uLCByZXN1bHQ6IFF1YXRlcm5pb24pOiBRdWF0ZXJuaW9uIHtcclxuXHRcdHJlc3VsdC54ID0gbGVmdC54ICsgcmlnaHQueDtcclxuXHRcdHJlc3VsdC55ID0gbGVmdC55ICsgcmlnaHQueTtcclxuXHRcdHJlc3VsdC56ID0gbGVmdC56ICsgcmlnaHQuejtcclxuXHRcdHJlc3VsdC53ID0gbGVmdC53ICsgcmlnaHQudztcclxuXHRcdHJldHVybiByZXN1bHQ7XHJcblx0fVxyXG5cclxuXHRzdGF0aWMgc3VidHJhY3QobGVmdDogUXVhdGVybmlvbiwgcmlnaHQ6IFF1YXRlcm5pb24sIHJlc3VsdDogUXVhdGVybmlvbik6IFF1YXRlcm5pb24ge1xyXG5cdFx0cmVzdWx0LnggPSBsZWZ0LnggLSByaWdodC54O1xyXG5cdFx0cmVzdWx0LnkgPSBsZWZ0LnkgLSByaWdodC55O1xyXG5cdFx0cmVzdWx0LnogPSBsZWZ0LnogLSByaWdodC56O1xyXG5cdFx0cmVzdWx0LncgPSBsZWZ0LncgLSByaWdodC53O1xyXG5cdFx0cmV0dXJuIHJlc3VsdDtcclxuXHR9XHJcblxyXG5cdHN0YXRpYyBuZWdhdGUocXVhdGVybmlvbjogUXVhdGVybmlvbiwgcmVzdWx0OiBRdWF0ZXJuaW9uKTogUXVhdGVybmlvbiB7XHJcblx0XHRyZXN1bHQueCA9IC1xdWF0ZXJuaW9uLng7XHJcblx0XHRyZXN1bHQueSA9IC1xdWF0ZXJuaW9uLnk7XHJcblx0XHRyZXN1bHQueiA9IC1xdWF0ZXJuaW9uLno7XHJcblx0XHRyZXN1bHQudyA9IC1xdWF0ZXJuaW9uLnc7XHJcblx0XHRyZXR1cm4gcmVzdWx0O1xyXG5cdH1cclxuXHJcblx0c3RhdGljIGRvdChsZWZ0OiBRdWF0ZXJuaW9uLCByaWdodDogUXVhdGVybmlvbik6IG51bWJlciB7XHJcblx0XHRyZXR1cm4gbGVmdC54ICogcmlnaHQueCArIGxlZnQueSAqIHJpZ2h0LnkgKyBsZWZ0LnogKiByaWdodC56ICsgbGVmdC53ICogcmlnaHQudztcclxuXHR9XHJcblxyXG5cdHN0YXRpYyBtdWx0aXBseShsZWZ0OiBRdWF0ZXJuaW9uLCByaWdodDogUXVhdGVybmlvbiwgcmVzdWx0OiBRdWF0ZXJuaW9uKTogUXVhdGVybmlvbiB7XHJcblx0XHRjb25zdCBsZWZ0WCA9IGxlZnQueDtcclxuXHRcdGNvbnN0IGxlZnRZID0gbGVmdC55O1xyXG5cdFx0Y29uc3QgbGVmdFogPSBsZWZ0Lno7XHJcblx0XHRjb25zdCBsZWZ0VyA9IGxlZnQudztcclxuXHJcblx0XHRjb25zdCByaWdodFggPSByaWdodC54O1xyXG5cdFx0Y29uc3QgcmlnaHRZID0gcmlnaHQueTtcclxuXHRcdGNvbnN0IHJpZ2h0WiA9IHJpZ2h0Lno7XHJcblx0XHRjb25zdCByaWdodFcgPSByaWdodC53O1xyXG5cclxuXHRcdGNvbnN0IHggPSBsZWZ0VyAqIHJpZ2h0WCArIGxlZnRYICogcmlnaHRXICsgbGVmdFkgKiByaWdodFogLSBsZWZ0WiAqIHJpZ2h0WTtcclxuXHRcdGNvbnN0IHkgPSBsZWZ0VyAqIHJpZ2h0WSAtIGxlZnRYICogcmlnaHRaICsgbGVmdFkgKiByaWdodFcgKyBsZWZ0WiAqIHJpZ2h0WDtcclxuXHRcdGNvbnN0IHogPSBsZWZ0VyAqIHJpZ2h0WiArIGxlZnRYICogcmlnaHRZIC0gbGVmdFkgKiByaWdodFggKyBsZWZ0WiAqIHJpZ2h0VztcclxuXHRcdGNvbnN0IHcgPSBsZWZ0VyAqIHJpZ2h0VyAtIGxlZnRYICogcmlnaHRYIC0gbGVmdFkgKiByaWdodFkgLSBsZWZ0WiAqIHJpZ2h0WjtcclxuXHJcblx0XHRyZXN1bHQueCA9IHg7XHJcblx0XHRyZXN1bHQueSA9IHk7XHJcblx0XHRyZXN1bHQueiA9IHo7XHJcblx0XHRyZXN1bHQudyA9IHc7XHJcblx0XHRyZXR1cm4gcmVzdWx0O1xyXG5cdH1cclxuXHJcblx0c3RhdGljIG11bHRpcGx5QnlTY2FsYXIocXVhdGVybmlvbjogUXVhdGVybmlvbiwgc2NhbGFyOiBudW1iZXIsIHJlc3VsdDogUXVhdGVybmlvbik6IFF1YXRlcm5pb24ge1xyXG5cdFx0cmVzdWx0LnggPSBxdWF0ZXJuaW9uLnggKiBzY2FsYXI7XHJcblx0XHRyZXN1bHQueSA9IHF1YXRlcm5pb24ueSAqIHNjYWxhcjtcclxuXHRcdHJlc3VsdC56ID0gcXVhdGVybmlvbi56ICogc2NhbGFyO1xyXG5cdFx0cmVzdWx0LncgPSBxdWF0ZXJuaW9uLncgKiBzY2FsYXI7XHJcblx0XHRyZXR1cm4gcmVzdWx0O1xyXG5cdH1cclxuXHJcblx0c3RhdGljIGRpdmlkZUJ5U2NhbGFyKHF1YXRlcm5pb246IFF1YXRlcm5pb24sIHNjYWxhcjogbnVtYmVyLCByZXN1bHQ6IFF1YXRlcm5pb24pOiBRdWF0ZXJuaW9uIHtcclxuXHRcdHJlc3VsdC54ID0gcXVhdGVybmlvbi54IC8gc2NhbGFyO1xyXG5cdFx0cmVzdWx0LnkgPSBxdWF0ZXJuaW9uLnkgLyBzY2FsYXI7XHJcblx0XHRyZXN1bHQueiA9IHF1YXRlcm5pb24ueiAvIHNjYWxhcjtcclxuXHRcdHJlc3VsdC53ID0gcXVhdGVybmlvbi53IC8gc2NhbGFyO1xyXG5cdFx0cmV0dXJuIHJlc3VsdDtcclxuXHR9XHJcblxyXG5cdHN0YXRpYyBjb21wdXRlQXhpcyhxdWF0ZXJuaW9uOiBRdWF0ZXJuaW9uLCByZXN1bHQ6IFZlY3RvcjMpOiBWZWN0b3IzIHtcclxuXHRcdGNvbnN0IHcgPSBxdWF0ZXJuaW9uLnc7XHJcblx0XHRpZiAoTWF0aC5hYnModyAtIDEuMCkgPCBHTWF0aC5FUFNJTE9ONikge1xyXG5cdFx0XHRyZXN1bHQueCA9IHJlc3VsdC55ID0gcmVzdWx0LnogPSAwO1xyXG5cdFx0XHRyZXR1cm4gcmVzdWx0O1xyXG5cdFx0fVxyXG5cclxuXHRcdGNvbnN0IHNjYWxhciA9IDEuMCAvIE1hdGguc3FydCgxLjAgLSB3ICogdyk7XHJcblxyXG5cdFx0cmVzdWx0LnggPSBxdWF0ZXJuaW9uLnggKiBzY2FsYXI7XHJcblx0XHRyZXN1bHQueSA9IHF1YXRlcm5pb24ueSAqIHNjYWxhcjtcclxuXHRcdHJlc3VsdC56ID0gcXVhdGVybmlvbi56ICogc2NhbGFyO1xyXG5cdFx0cmV0dXJuIHJlc3VsdDtcclxuXHR9XHJcblxyXG5cdHN0YXRpYyBjb21wdXRlQW5nbGUocXVhdGVybmlvbjogUXVhdGVybmlvbik6IG51bWJlciB7XHJcblx0XHRpZiAoTWF0aC5hYnMocXVhdGVybmlvbi53IC0gMS4wKSA8IEdNYXRoLkVQU0lMT042KSB7XHJcblx0XHRcdHJldHVybiAwLjA7XHJcblx0XHR9XHJcblx0XHRyZXR1cm4gMi4wICogTWF0aC5hY29zKHF1YXRlcm5pb24udyk7XHJcblx0fVxyXG5cclxuXHRzdGF0aWMgbGVycChzdGFydDogUXVhdGVybmlvbiwgZW5kOiBRdWF0ZXJuaW9uLCB0OiBudW1iZXIsIHJlc3VsdDogUXVhdGVybmlvbik6IFF1YXRlcm5pb24ge1xyXG5cdFx0bGVycFNjcmF0Y2ggPSBRdWF0ZXJuaW9uLm11bHRpcGx5QnlTY2FsYXIoZW5kLCB0LCBsZXJwU2NyYXRjaCk7XHJcblx0XHRyZXN1bHQgPSBRdWF0ZXJuaW9uLm11bHRpcGx5QnlTY2FsYXIoc3RhcnQsIDEuMCAtIHQsIHJlc3VsdCk7XHJcblx0XHRyZXR1cm4gUXVhdGVybmlvbi5hZGQobGVycFNjcmF0Y2gsIHJlc3VsdCwgcmVzdWx0KTtcclxuXHR9XHJcblxyXG5cdHN0YXRpYyBzbGVycChzdGFydDogUXVhdGVybmlvbiwgZW5kOiBRdWF0ZXJuaW9uLCB0OiBudW1iZXIsIHJlc3VsdDogUXVhdGVybmlvbik6IFF1YXRlcm5pb24ge1xyXG5cdFx0bGV0IGRvdCA9IFF1YXRlcm5pb24uZG90KHN0YXJ0LCBlbmQpO1xyXG5cclxuXHRcdC8vIFRoZSBhbmdsZSBiZXR3ZWVuIHN0YXJ0IG11c3QgYmUgYWN1dGUuIFNpbmNlIHEgYW5kIC1xIHJlcHJlc2VudFxyXG5cdFx0Ly8gdGhlIHNhbWUgcm90YXRpb24sIG5lZ2F0ZSBxIHRvIGdldCB0aGUgYWN1dGUgYW5nbGUuXHJcblx0XHRsZXQgciA9IGVuZDtcclxuXHRcdGlmIChkb3QgPCAwLjApIHtcclxuXHRcdFx0ZG90ID0gLWRvdDtcclxuXHRcdFx0ciA9IHNsZXJwRW5kTmVnYXRlZCA9IFF1YXRlcm5pb24ubmVnYXRlKGVuZCwgc2xlcnBFbmROZWdhdGVkKTtcclxuXHRcdH1cclxuXHJcblx0XHQvLyBkb3QgPiAwLCBhcyB0aGUgZG90IHByb2R1Y3QgYXBwcm9hY2hlcyAxLCB0aGUgYW5nbGUgYmV0d2VlbiB0aGVcclxuXHRcdC8vIHF1YXRlcm5pb25zIHZhbmlzaGVzLiB1c2UgbGluZWFyIGludGVycG9sYXRpb24uXHJcblx0XHRpZiAoMS4wIC0gZG90IDwgR01hdGguRVBTSUxPTjYpIHtcclxuXHRcdFx0cmV0dXJuIFF1YXRlcm5pb24ubGVycChzdGFydCwgciwgdCwgcmVzdWx0KTtcclxuXHRcdH1cclxuXHJcblx0XHRjb25zdCB0aGV0YSA9IE1hdGguYWNvcyhkb3QpO1xyXG5cdFx0c2xlcnBTY2FsZWRQID0gUXVhdGVybmlvbi5tdWx0aXBseUJ5U2NhbGFyKHN0YXJ0LCBNYXRoLnNpbigoMSAtIHQpICogdGhldGEpLCBzbGVycFNjYWxlZFApO1xyXG5cdFx0c2xlcnBTY2FsZWRSID0gUXVhdGVybmlvbi5tdWx0aXBseUJ5U2NhbGFyKHIsIE1hdGguc2luKHQgKiB0aGV0YSksIHNsZXJwU2NhbGVkUik7XHJcblx0XHRyZXN1bHQgPSBRdWF0ZXJuaW9uLmFkZChzbGVycFNjYWxlZFAsIHNsZXJwU2NhbGVkUiwgcmVzdWx0KTtcclxuXHRcdHJldHVybiBRdWF0ZXJuaW9uLm11bHRpcGx5QnlTY2FsYXIocmVzdWx0LCAxLjAgLyBNYXRoLnNpbih0aGV0YSksIHJlc3VsdCk7XHJcblx0fVxyXG5cclxuXHRzdGF0aWMgc3F1YWQoXHJcblx0XHRxMDogUXVhdGVybmlvbixcclxuXHRcdHExOiBRdWF0ZXJuaW9uLFxyXG5cdFx0czA6IFF1YXRlcm5pb24sXHJcblx0XHRzMTogUXVhdGVybmlvbixcclxuXHRcdHQ6IG51bWJlcixcclxuXHRcdHJlc3VsdDogUXVhdGVybmlvblxyXG5cdCk6IFF1YXRlcm5pb24ge1xyXG5cdFx0Y29uc3Qgc2xlcnAwID0gUXVhdGVybmlvbi5zbGVycChxMCwgcTEsIHQsIHNxdWFkU2NyYXRjaFF1YXRlcm5pb24wKTtcclxuXHRcdGNvbnN0IHNsZXJwMSA9IFF1YXRlcm5pb24uc2xlcnAoczAsIHMxLCB0LCBzcXVhZFNjcmF0Y2hRdWF0ZXJuaW9uMSk7XHJcblx0XHRyZXR1cm4gUXVhdGVybmlvbi5zbGVycChzbGVycDAsIHNsZXJwMSwgMi4wICogdCAqICgxLjAgLSB0KSwgcmVzdWx0KTtcclxuXHR9XHJcblx0c3RhdGljIGVxdWFscyhsZWZ0OiBRdWF0ZXJuaW9uLCByaWdodDogUXVhdGVybmlvbik6IGJvb2xlYW4ge1xyXG5cdFx0cmV0dXJuIChcclxuXHRcdFx0bGVmdCA9PT0gcmlnaHQgfHxcclxuXHRcdFx0KGRlZmluZWQobGVmdCkgJiZcclxuXHRcdFx0XHRkZWZpbmVkKHJpZ2h0KSAmJlxyXG5cdFx0XHRcdGxlZnQueCA9PT0gcmlnaHQueCAmJlxyXG5cdFx0XHRcdGxlZnQueSA9PT0gcmlnaHQueSAmJlxyXG5cdFx0XHRcdGxlZnQueiA9PT0gcmlnaHQueiAmJlxyXG5cdFx0XHRcdGxlZnQudyA9PT0gcmlnaHQudylcclxuXHRcdCk7XHJcblx0fVxyXG5cclxuXHRzdGF0aWMgZXF1YWxzRXBzaWxvbihsZWZ0OiBRdWF0ZXJuaW9uLCByaWdodDogUXVhdGVybmlvbiwgZXBzaWxvbiA9IDApOiBib29sZWFuIHtcclxuXHRcdGVwc2lsb24gPSBkZWZhdWx0VmFsdWUoZXBzaWxvbiwgMCk7XHJcblxyXG5cdFx0cmV0dXJuIChcclxuXHRcdFx0bGVmdCA9PT0gcmlnaHQgfHxcclxuXHRcdFx0KGRlZmluZWQobGVmdCkgJiZcclxuXHRcdFx0XHRkZWZpbmVkKHJpZ2h0KSAmJlxyXG5cdFx0XHRcdE1hdGguYWJzKGxlZnQueCAtIHJpZ2h0LngpIDw9IGVwc2lsb24gJiZcclxuXHRcdFx0XHRNYXRoLmFicyhsZWZ0LnkgLSByaWdodC55KSA8PSBlcHNpbG9uICYmXHJcblx0XHRcdFx0TWF0aC5hYnMobGVmdC56IC0gcmlnaHQueikgPD0gZXBzaWxvbiAmJlxyXG5cdFx0XHRcdE1hdGguYWJzKGxlZnQudyAtIHJpZ2h0LncpIDw9IGVwc2lsb24pXHJcblx0XHQpO1xyXG5cdH1cclxuXHJcblx0c3RhdGljIGV4cChjYXJ0ZXNpYW46IFZlY3RvcjMsIHJlc3VsdDogUXVhdGVybmlvbik6IFF1YXRlcm5pb24ge1xyXG5cdFx0Y29uc3QgdGhldGEgPSBWZWN0b3IzLm1hZ25pdHVkZShjYXJ0ZXNpYW4pO1xyXG5cdFx0bGV0IHNpblRoZXRhT3ZlclRoZXRhID0gMC4wO1xyXG5cclxuXHRcdGlmICh0aGV0YSAhPT0gMC4wKSB7XHJcblx0XHRcdHNpblRoZXRhT3ZlclRoZXRhID0gTWF0aC5zaW4odGhldGEpIC8gdGhldGE7XHJcblx0XHR9XHJcblxyXG5cdFx0cmVzdWx0LnggPSBjYXJ0ZXNpYW4ueCAqIHNpblRoZXRhT3ZlclRoZXRhO1xyXG5cdFx0cmVzdWx0LnkgPSBjYXJ0ZXNpYW4ueSAqIHNpblRoZXRhT3ZlclRoZXRhO1xyXG5cdFx0cmVzdWx0LnogPSBjYXJ0ZXNpYW4ueiAqIHNpblRoZXRhT3ZlclRoZXRhO1xyXG5cdFx0cmVzdWx0LncgPSBNYXRoLmNvcyh0aGV0YSk7XHJcblxyXG5cdFx0cmV0dXJuIHJlc3VsdDtcclxuXHR9XHJcbn1cclxuXHJcbmxldCBmcm9tQXhpc0FuZ2xlU2NyYXRjaCA9IG5ldyBWZWN0b3IzKCk7XHJcblxyXG5jb25zdCBmcm9tUm90YXRpb25NYXRyaXhOZXh0ID0gWzEsIDIsIDBdO1xyXG5jb25zdCBmcm9tUm90YXRpb25NYXRyaXhRdWF0ID0gbmV3IEFycmF5KDMpO1xyXG5cclxubGV0IGxlcnBTY3JhdGNoID0gbmV3IFF1YXRlcm5pb24oKTtcclxuXHJcbmxldCBzbGVycEVuZE5lZ2F0ZWQgPSBuZXcgUXVhdGVybmlvbigpO1xyXG5sZXQgc2xlcnBTY2FsZWRQID0gbmV3IFF1YXRlcm5pb24oKTtcclxubGV0IHNsZXJwU2NhbGVkUiA9IG5ldyBRdWF0ZXJuaW9uKCk7XHJcblxyXG5jb25zdCBzcXVhZFNjcmF0Y2hDYXJ0ZXNpYW4wID0gbmV3IFZlY3RvcjMoKTtcclxuY29uc3Qgc3F1YWRTY3JhdGNoQ2FydGVzaWFuMSA9IG5ldyBWZWN0b3IzKCk7XHJcbmNvbnN0IHNxdWFkU2NyYXRjaFF1YXRlcm5pb24wID0gbmV3IFF1YXRlcm5pb24oKTtcclxuY29uc3Qgc3F1YWRTY3JhdGNoUXVhdGVybmlvbjEgPSBuZXcgUXVhdGVybmlvbigpO1xyXG4iLCJpbXBvcnQgTWF0cml4NCBmcm9tIFwiLi4vbWF0aC9NYXRyaXg0XCI7XHJcbmltcG9ydCB7IFF1YXRlcm5pb24gfSBmcm9tIFwiLi4vbWF0aC9RdWF0ZXJuaW9uXCI7XHJcbmltcG9ydCBWZWN0b3IzIGZyb20gXCIuLi9tYXRoL1ZlY3RvcjNcIjtcclxuaW1wb3J0IElDbG9uZSBmcm9tIFwiLi9JQ2xvbmVcIjtcclxuaW1wb3J0IHsgUmVuZGVyT2JqZWN0VHlwZSB9IGZyb20gXCIuL1dlYkdQVVR5cGVzXCI7XHJcblxyXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBSZW5kZXJPYmplY3QgaW1wbGVtZW50cyBJQ2xvbmUge1xyXG5cdHB1YmxpYyB1cDogVmVjdG9yMztcclxuXHRwcm90ZWN0ZWQgX3Bvc2l0aW9uOiBWZWN0b3IzO1xyXG5cdHByb3RlY3RlZCBfc2NhbGU6IFZlY3RvcjM7XHJcblx0cHJvdGVjdGVkIF9xdWF0ZXJuaW9uOiBRdWF0ZXJuaW9uO1xyXG5cdHByb3RlY3RlZCBfdGFyZ2V0OiBWZWN0b3IzO1xyXG5cdHByaXZhdGUgX25vcm1hbE1hdHJpeDogTWF0cml4NDtcclxuXHRtb2RlbE1hdHJpeDogTWF0cml4NDtcclxuXHRwYXJlbnQ6IFJlbmRlck9iamVjdDtcclxuXHR0eXBlOiBSZW5kZXJPYmplY3RUeXBlO1xyXG5cdG5hbWU6IHN0cmluZztcclxuXHRjb25zdHJ1Y3RvcigpIHtcclxuXHRcdHRoaXMuX3Bvc2l0aW9uID0gbmV3IFZlY3RvcjMoKTtcclxuXHRcdHRoaXMuX3NjYWxlID0gbmV3IFZlY3RvcjMoMSwgMSwgMSk7XHJcblx0XHR0aGlzLl9xdWF0ZXJuaW9uID0gbmV3IFF1YXRlcm5pb24oKTtcclxuXHRcdHRoaXMubW9kZWxNYXRyaXggPSBNYXRyaXg0LmNsb25lKE1hdHJpeDQuSURFTlRJVFksIG5ldyBNYXRyaXg0KCkpO1xyXG5cdFx0dGhpcy5fbm9ybWFsTWF0cml4ID0gTWF0cml4NC5jbG9uZShNYXRyaXg0LklERU5USVRZLCBuZXcgTWF0cml4NCgpKTtcclxuXHRcdHRoaXMudXAgPSBuZXcgVmVjdG9yMygwLCAxLCAwKTtcclxuXHRcdHRoaXMuX3RhcmdldCA9IG5ldyBWZWN0b3IzKDAsIDAsIDApO1xyXG5cdH1cclxuXHRwdWJsaWMgZ2V0IG5vcm1hbE1hdHJpeCgpOiBNYXRyaXg0IHtcclxuXHRcdHJldHVybiB0aGlzLl9ub3JtYWxNYXRyaXg7XHJcblx0fVxyXG5cclxuXHRwdWJsaWMgZ2V0IHBvc2l0aW9uKCk6IFZlY3RvcjMge1xyXG5cdFx0cmV0dXJuIHRoaXMuX3Bvc2l0aW9uO1xyXG5cdH1cclxuXHRwdWJsaWMgZ2V0IHNjYWxlKCk6IFZlY3RvcjMge1xyXG5cdFx0cmV0dXJuIHRoaXMuX3NjYWxlO1xyXG5cdH1cclxuXHRwdWJsaWMgZ2V0IHF1YXRlcm5pb24oKTogUXVhdGVybmlvbiB7XHJcblx0XHRyZXR1cm4gdGhpcy5fcXVhdGVybmlvbjtcclxuXHR9XHJcblx0cHJpdmF0ZSB1cGRhdGVOb3JtYWxNYXRyaXgoKSB7XHJcblx0XHRNYXRyaXg0LmludmVyc2UodGhpcy5tb2RlbE1hdHJpeCwgdGhpcy5fbm9ybWFsTWF0cml4KTtcclxuXHRcdE1hdHJpeDQudHJhbnNwb3NlKHRoaXMuX25vcm1hbE1hdHJpeCwgdGhpcy5fbm9ybWFsTWF0cml4KTtcclxuXHR9XHJcblx0dXBkYXRlTWF0cml4KG1hdHJpeD86IE1hdHJpeDQpIHtcclxuXHRcdHRoaXMubW9kZWxNYXRyaXguY29tcG9zZSh0aGlzLnBvc2l0aW9uLCB0aGlzLnF1YXRlcm5pb24sIHRoaXMuc2NhbGUpO1xyXG5cdFx0aWYgKG1hdHJpeCkgTWF0cml4NC5tdWx0aXBseShtYXRyaXgsIHRoaXMubW9kZWxNYXRyaXgsIHRoaXMubW9kZWxNYXRyaXgpO1xyXG5cdFx0dGhpcy51cGRhdGVOb3JtYWxNYXRyaXgoKTtcclxuXHR9XHJcblx0bG9va0F0KHgsIHksIHopIHtcclxuXHRcdHRoaXMuX3RhcmdldC5zZXQoeCwgeSwgeik7XHJcblx0XHRpZiAodGhpcy50eXBlID09IFJlbmRlck9iamVjdFR5cGUuQ2FtZXJhIHx8IHRoaXMudHlwZSA9PSBSZW5kZXJPYmplY3RUeXBlLkxpZ2h0KSB7XHJcblx0XHRcdF9tMS5sb29rQXQodGhpcy5wb3NpdGlvbiwgdGhpcy5fdGFyZ2V0LCB0aGlzLnVwKTtcclxuXHRcdH0gZWxzZSB7XHJcblx0XHRcdF9tMS5sb29rQXQodGhpcy5fdGFyZ2V0LCB0aGlzLnBvc2l0aW9uLCB0aGlzLnVwKTtcclxuXHRcdH1cclxuXHRcdHRoaXMucXVhdGVybmlvbi5zZXRGcm9tUm90YXRpb25NYXRyaXgoX20xKTtcclxuXHR9XHJcblx0cm90YXRlT25BeGlzKGF4aXMsIGFuZ2xlKSB7XHJcblx0XHRjb25zdCBxdWF0ID0gUXVhdGVybmlvbi5mcm9tQXhpc0FuZ2xlKGF4aXMsIGFuZ2xlKTtcclxuXHRcdFF1YXRlcm5pb24ubXVsdGlwbHkodGhpcy5xdWF0ZXJuaW9uLCBxdWF0LCB0aGlzLnF1YXRlcm5pb24pO1xyXG5cdH1cclxuXHRyb3RhdGVYKGFuZ2xlKSB7XHJcblx0XHRyZXR1cm4gdGhpcy5yb3RhdGVPbkF4aXMoX3hBeGlzLCBhbmdsZSk7XHJcblx0fVxyXG5cdHJvdGF0ZVkoYW5nbGUpIHtcclxuXHRcdHJldHVybiB0aGlzLnJvdGF0ZU9uQXhpcyhfeUF4aXMsIGFuZ2xlKTtcclxuXHR9XHJcblx0cm90YXRlWihhbmdsZSkge1xyXG5cdFx0cmV0dXJuIHRoaXMucm90YXRlT25BeGlzKF96QXhpcywgYW5nbGUpO1xyXG5cdH1cclxufVxyXG5jb25zdCBfeEF4aXMgPSBuZXcgVmVjdG9yMygxLCAwLCAwKTtcclxuY29uc3QgX3lBeGlzID0gbmV3IFZlY3RvcjMoMCwgMSwgMCk7XHJcbmNvbnN0IF96QXhpcyA9IG5ldyBWZWN0b3IzKDAsIDAsIDEpO1xyXG5jb25zdCBfbTEgPSBuZXcgTWF0cml4NCgpO1xyXG4iLCJpbXBvcnQgUmVuZGVyT2JqZWN0IGZyb20gXCIuLi9jb3JlL1JlbmRlck9iamVjdFwiO1xyXG5pbXBvcnQgeyBMaWdodFR5cGUsIFJlbmRlck9iamVjdFR5cGUgfSBmcm9tIFwiLi4vY29yZS9XZWJHUFVUeXBlc1wiO1xyXG5pbXBvcnQgVmVjdG9yMyBmcm9tIFwiLi4vbWF0aC9WZWN0b3IzXCI7XHJcbmltcG9ydCB7IEJhc2VTaGFkb3cgfSBmcm9tIFwiLi9zaGFkb3dzL0Jhc2VTaGFkb3dcIjtcclxuXHJcbmV4cG9ydCBjbGFzcyBMaWdodCBleHRlbmRzIFJlbmRlck9iamVjdCB7XHJcblx0cHJpdmF0ZSBfY29sb3I6IFZlY3RvcjM7XHJcblx0dHlwZTogUmVuZGVyT2JqZWN0VHlwZTtcclxuXHRwcml2YXRlIF9pbnRlbnNpdHk6IG51bWJlcjtcclxuXHRkaXJ0eTogYm9vbGVhbjtcclxuXHRjb2xvckRpcnR5OiBib29sZWFuO1xyXG5cdHNoYWRvd0RpcnR5OiBib29sZWFuO1xyXG5cdGludGVuc2l0eURpcnR5OiBib29sZWFuO1xyXG5cdHBvc2l0aW9uRGlydHk6IGJvb2xlYW47XHJcblx0cHVibGljIF9zaGFkb3c6IEJhc2VTaGFkb3c7XHJcblx0cHVibGljIHRhcmdldERpcnR5OiBib29sZWFuO1xyXG5cdHB1YmxpYyBsaWdodFR5cGU6IExpZ2h0VHlwZTtcclxuXHJcblx0Y29uc3RydWN0b3IoY29sb3I6IFZlY3RvcjMsIGludGVuc2l0eTogbnVtYmVyKSB7XHJcblx0XHRzdXBlcigpO1xyXG5cdFx0dGhpcy50eXBlID0gUmVuZGVyT2JqZWN0VHlwZS5MaWdodDtcclxuXHRcdHRoaXMuX2NvbG9yID0gVmVjdG9yMy5tdWx0aXBseUJ5U2NhbGFyKGNvbG9yLCBpbnRlbnNpdHksIG5ldyBWZWN0b3IzKCkpO1xyXG5cdFx0dGhpcy5faW50ZW5zaXR5ID0gaW50ZW5zaXR5O1xyXG5cdFx0dGhpcy5fcG9zaXRpb24gPSBuZXcgVmVjdG9yMygwLCAxLCAwKTtcclxuXHRcdHRoaXMuX3RhcmdldCA9IG5ldyBWZWN0b3IzKCk7XHJcblx0XHR0aGlzLnBvc2l0aW9uRGlydHkgPSB0cnVlO1xyXG5cdFx0dGhpcy50YXJnZXREaXJ0eSA9IHRydWU7XHJcblx0XHR0aGlzLmNvbG9yRGlydHkgPSB0cnVlO1xyXG5cdFx0dGhpcy5zaGFkb3dEaXJ0eSA9IHRydWU7XHJcblx0XHR0aGlzLmludGVuc2l0eURpcnR5ID0gdHJ1ZTtcclxuXHRcdHRoaXMuX3NoYWRvdyA9IG51bGw7XHJcblx0fVxyXG5cclxuXHRnZXQgcG9zaXRpb24oKSB7XHJcblx0XHRyZXR1cm4gdGhpcy5fcG9zaXRpb247XHJcblx0fVxyXG5cclxuXHRzZXQgcG9zaXRpb24odmFsdWUpIHtcclxuXHRcdHRoaXMucG9zaXRpb25EaXJ0eSA9IHRydWU7XHJcblx0XHR0aGlzLl9wb3NpdGlvbiA9IHZhbHVlO1xyXG5cdH1cclxuXHJcblx0Z2V0IHRhcmdldCgpIHtcclxuXHRcdHJldHVybiB0aGlzLl90YXJnZXQ7XHJcblx0fVxyXG5cclxuXHRzZXQgdGFyZ2V0KHZhbHVlKSB7XHJcblx0XHR0aGlzLnRhcmdldERpcnR5ID0gdHJ1ZTtcclxuXHRcdHRoaXMuX3RhcmdldCA9IHZhbHVlO1xyXG5cdH1cclxuXHJcblx0Z2V0IGNvbG9yKCkge1xyXG5cdFx0cmV0dXJuIHRoaXMuX2NvbG9yO1xyXG5cdH1cclxuXHJcblx0c2V0IGNvbG9yKHZhbHVlKSB7XHJcblx0XHR0aGlzLmNvbG9yRGlydHkgPSB0cnVlO1xyXG5cdFx0dGhpcy5fY29sb3IgPSB2YWx1ZTtcclxuXHR9XHJcblxyXG5cdHNldCBpbnRlbnNpdHkodmFsdWUpIHtcclxuXHRcdHRoaXMuY29sb3IgPSBWZWN0b3IzLm11bHRpcGx5QnlTY2FsYXIodGhpcy5jb2xvciwgdmFsdWUsIG5ldyBWZWN0b3IzKCkpO1xyXG5cdFx0dGhpcy5pbnRlbnNpdHlEaXJ0eSA9IHRydWU7XHJcblx0XHR0aGlzLl9pbnRlbnNpdHkgPSB2YWx1ZTtcclxuXHR9XHJcblxyXG5cdGdldCBpbnRlbnNpdHkoKSB7XHJcblx0XHRyZXR1cm4gdGhpcy5faW50ZW5zaXR5O1xyXG5cdH1cclxuXHJcblx0Z2V0IHNoYWRvdygpIHtcclxuXHRcdHJldHVybiB0aGlzLl9zaGFkb3c7XHJcblx0fVxyXG5cclxuXHRzZXQgc2hhZG93KHZhbHVlKSB7XHJcblx0XHR0aGlzLnNoYWRvd0RpcnR5ID0gdHJ1ZTtcclxuXHRcdHRoaXMuX3NoYWRvdyA9IHZhbHVlO1xyXG5cdH1cclxufVxyXG4iLCJpbXBvcnQgZGVmYXVsdFZhbHVlIGZyb20gXCIuLi91dGlscy9kZWZhdWx0VmFsdWVcIjtcclxuaW1wb3J0IGRlZmluZWQgZnJvbSBcIi4uL3V0aWxzL2RlZmluZWRcIjtcclxuaW1wb3J0IEdNYXRoIGZyb20gXCIuL01hdGhcIjtcclxuLy8gI3JnYmFcclxuY29uc3QgcmdiYU1hdGNoZXIgPSAvXiMoWzAtOWEtZl0pKFswLTlhLWZdKShbMC05YS1mXSkoWzAtOWEtZl0pPyQvaTtcclxuLy8gI3JyZ2diYmFhXHJcbmNvbnN0IHJyZ2diYmFhTWF0Y2hlciA9IC9eIyhbMC05YS1mXXsyfSkoWzAtOWEtZl17Mn0pKFswLTlhLWZdezJ9KShbMC05YS1mXXsyfSk/JC9pO1xyXG4vLyByZ2IoKSwgcmdiYSgpLCBvciByZ2IlKClcclxuY29uc3QgcmdiUGFyZW50aGVzZXNNYXRjaGVyID0gL15yZ2JhP1xcKFxccyooWzAtOS5dKyU/KVxccyosXFxzKihbMC05Ll0rJT8pXFxzKixcXHMqKFswLTkuXSslPykoPzpcXHMqLFxccyooWzAtOS5dKykpP1xccypcXCkkL2k7XHJcbi8vIGhzbCgpIG9yIGhzbGEoKVxyXG5jb25zdCBoc2xQYXJlbnRoZXNlc01hdGNoZXIgPSAvXmhzbGE/XFwoXFxzKihbMC05Ll0rKVxccyosXFxzKihbMC05Ll0rJSlcXHMqLFxccyooWzAtOS5dKyUpKD86XFxzKixcXHMqKFswLTkuXSspKT9cXHMqXFwpJC9pO1xyXG5mdW5jdGlvbiBodWUycmdiKG0xLCBtMiwgaCkge1xyXG5cdGlmIChoIDwgMCkge1xyXG5cdFx0aCArPSAxO1xyXG5cdH1cclxuXHRpZiAoaCA+IDEpIHtcclxuXHRcdGggLT0gMTtcclxuXHR9XHJcblx0aWYgKGggKiA2IDwgMSkge1xyXG5cdFx0cmV0dXJuIG0xICsgKG0yIC0gbTEpICogNiAqIGg7XHJcblx0fVxyXG5cdGlmIChoICogMiA8IDEpIHtcclxuXHRcdHJldHVybiBtMjtcclxuXHR9XHJcblx0aWYgKGggKiAzIDwgMikge1xyXG5cdFx0cmV0dXJuIG0xICsgKG0yIC0gbTEpICogKDIgLyAzIC0gaCkgKiA2O1xyXG5cdH1cclxuXHRyZXR1cm4gbTE7XHJcbn1cclxuXHJcbmNsYXNzIENvbG9yIHtcclxuXHRncmVlbjogbnVtYmVyO1xyXG5cdHJlZDogbnVtYmVyO1xyXG5cdGJsdWU6IG51bWJlcjtcclxuXHRjb25zdHJ1Y3RvcihyZWQgPSAxLjAsIGdyZWVuID0gMS4wLCBibHVlID0gMS4wKSB7XHJcblx0XHQvKipcclxuXHRcdCAqIFRoZSByZWQgY29tcG9uZW50LlxyXG5cdFx0ICogQHR5cGUge051bWJlcn1cclxuXHRcdCAqIEBkZWZhdWx0IDEuMFxyXG5cdFx0ICovXHJcblx0XHR0aGlzLnJlZCA9IHJlZDtcclxuXHRcdC8qKlxyXG5cdFx0ICogVGhlIGdyZWVuIGNvbXBvbmVudC5cclxuXHRcdCAqIEB0eXBlIHtOdW1iZXJ9XHJcblx0XHQgKiBAZGVmYXVsdCAxLjBcclxuXHRcdCAqL1xyXG5cdFx0dGhpcy5ncmVlbiA9IGdyZWVuO1xyXG5cdFx0LyoqXHJcblx0XHQgKiBUaGUgYmx1ZSBjb21wb25lbnQuXHJcblx0XHQgKiBAdHlwZSB7TnVtYmVyfVxyXG5cdFx0ICogQGRlZmF1bHQgMS4wXHJcblx0XHQgKi9cclxuXHRcdHRoaXMuYmx1ZSA9IGJsdWU7XHJcblx0fVxyXG5cdHNldCh2YWx1ZTogc3RyaW5nKTogQ29sb3Ige1xyXG5cdFx0aWYgKHR5cGVvZiB2YWx1ZSA9PT0gXCJzdHJpbmdcIikge1xyXG5cdFx0XHRDb2xvci5mcm9tQ3NzQ29sb3JTdHJpbmcodmFsdWUsIHRoaXMpO1xyXG5cdFx0fVxyXG5cdFx0cmV0dXJuIHRoaXM7XHJcblx0fVxyXG5cdHRvQXJyYXkoKTogbnVtYmVyW10ge1xyXG5cdFx0cmV0dXJuIFt0aGlzLnJlZCwgdGhpcy5ncmVlbiwgdGhpcy5ibHVlXTtcclxuXHR9XHJcblxyXG5cdGNsb25lKHJlc3VsdDogQ29sb3IpOiBDb2xvciB7XHJcblx0XHRyZXR1cm4gQ29sb3IuY2xvbmUodGhpcywgcmVzdWx0KTtcclxuXHR9XHJcblxyXG5cdGVxdWFscyhvdGhlcjogQ29sb3IpOiBib29sZWFuIHtcclxuXHRcdHJldHVybiBDb2xvci5lcXVhbHModGhpcywgb3RoZXIpO1xyXG5cdH1cclxuXHJcblx0dG9Dc3NIZXhTdHJpbmcoKTogc3RyaW5nIHtcclxuXHRcdGxldCByID0gQ29sb3IuZmxvYXRUb0J5dGUodGhpcy5yZWQpLnRvU3RyaW5nKDE2KTtcclxuXHRcdGlmIChyLmxlbmd0aCA8IDIpIHtcclxuXHRcdFx0ciA9IGAwJHtyfWA7XHJcblx0XHR9XHJcblx0XHRsZXQgZyA9IENvbG9yLmZsb2F0VG9CeXRlKHRoaXMuZ3JlZW4pLnRvU3RyaW5nKDE2KTtcclxuXHRcdGlmIChnLmxlbmd0aCA8IDIpIHtcclxuXHRcdFx0ZyA9IGAwJHtnfWA7XHJcblx0XHR9XHJcblx0XHRsZXQgYiA9IENvbG9yLmZsb2F0VG9CeXRlKHRoaXMuYmx1ZSkudG9TdHJpbmcoMTYpO1xyXG5cdFx0aWYgKGIubGVuZ3RoIDwgMikge1xyXG5cdFx0XHRiID0gYDAke2J9YDtcclxuXHRcdH1cclxuXHRcdHJldHVybiBgIyR7cn0ke2d9JHtifWA7XHJcblx0fVxyXG5cclxuXHR0b0J5dGVzKHJlc3VsdDogbnVtYmVyW10pOiBudW1iZXJbXSB7XHJcblx0XHRjb25zdCByZWQgPSBDb2xvci5mbG9hdFRvQnl0ZSh0aGlzLnJlZCk7XHJcblx0XHRjb25zdCBncmVlbiA9IENvbG9yLmZsb2F0VG9CeXRlKHRoaXMuZ3JlZW4pO1xyXG5cdFx0Y29uc3QgYmx1ZSA9IENvbG9yLmZsb2F0VG9CeXRlKHRoaXMuYmx1ZSk7XHJcblxyXG5cdFx0aWYgKCFkZWZpbmVkKHJlc3VsdCkpIHtcclxuXHRcdFx0cmV0dXJuIFtyZWQsIGdyZWVuLCBibHVlXTtcclxuXHRcdH1cclxuXHRcdHJlc3VsdFswXSA9IHJlZDtcclxuXHRcdHJlc3VsdFsxXSA9IGdyZWVuO1xyXG5cdFx0cmVzdWx0WzJdID0gYmx1ZTtcclxuXHRcdHJldHVybiByZXN1bHQ7XHJcblx0fVxyXG5cclxuXHRzdGF0aWMgZnJvbUJ5dGVzKHJlZDogbnVtYmVyLCBncmVlbjogbnVtYmVyLCBibHVlOiBudW1iZXIsIHJlc3VsdDogQ29sb3IpOiBDb2xvciB7XHJcblx0XHRyZWQgPSBDb2xvci5ieXRlVG9GbG9hdChkZWZhdWx0VmFsdWUocmVkLCAyNTUuMCkpO1xyXG5cdFx0Z3JlZW4gPSBDb2xvci5ieXRlVG9GbG9hdChkZWZhdWx0VmFsdWUoZ3JlZW4sIDI1NS4wKSk7XHJcblx0XHRibHVlID0gQ29sb3IuYnl0ZVRvRmxvYXQoZGVmYXVsdFZhbHVlKGJsdWUsIDI1NS4wKSk7XHJcblxyXG5cdFx0aWYgKCFkZWZpbmVkKHJlc3VsdCkpIHtcclxuXHRcdFx0cmV0dXJuIG5ldyBDb2xvcihyZWQsIGdyZWVuLCBibHVlKTtcclxuXHRcdH1cclxuXHJcblx0XHRyZXN1bHQucmVkID0gcmVkO1xyXG5cdFx0cmVzdWx0LmdyZWVuID0gZ3JlZW47XHJcblx0XHRyZXN1bHQuYmx1ZSA9IGJsdWU7XHJcblx0XHRyZXR1cm4gcmVzdWx0O1xyXG5cdH1cclxuXHJcblx0c3RhdGljIGZyb21Ic2woaHVlOiBudW1iZXIsIHNhdHVyYXRpb246IG51bWJlciwgbGlnaHRuZXNzOiBudW1iZXIsIHJlc3VsdDogQ29sb3IpOiBDb2xvciB7XHJcblx0XHRodWUgPSBkZWZhdWx0VmFsdWUoaHVlLCAwLjApICUgMS4wO1xyXG5cdFx0c2F0dXJhdGlvbiA9IGRlZmF1bHRWYWx1ZShzYXR1cmF0aW9uLCAwLjApO1xyXG5cdFx0bGlnaHRuZXNzID0gZGVmYXVsdFZhbHVlKGxpZ2h0bmVzcywgMC4wKTtcclxuXHRcdGxldCByZWQgPSBsaWdodG5lc3M7XHJcblx0XHRsZXQgZ3JlZW4gPSBsaWdodG5lc3M7XHJcblx0XHRsZXQgYmx1ZSA9IGxpZ2h0bmVzcztcclxuXHJcblx0XHRpZiAoc2F0dXJhdGlvbiAhPT0gMCkge1xyXG5cdFx0XHRsZXQgbTI7XHJcblx0XHRcdGlmIChsaWdodG5lc3MgPCAwLjUpIHtcclxuXHRcdFx0XHRtMiA9IGxpZ2h0bmVzcyAqICgxICsgc2F0dXJhdGlvbik7XHJcblx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0bTIgPSBsaWdodG5lc3MgKyBzYXR1cmF0aW9uIC0gbGlnaHRuZXNzICogc2F0dXJhdGlvbjtcclxuXHRcdFx0fVxyXG5cclxuXHRcdFx0Y29uc3QgbTEgPSAyLjAgKiBsaWdodG5lc3MgLSBtMjtcclxuXHRcdFx0cmVkID0gaHVlMnJnYihtMSwgbTIsIGh1ZSArIDEgLyAzKTtcclxuXHRcdFx0Z3JlZW4gPSBodWUycmdiKG0xLCBtMiwgaHVlKTtcclxuXHRcdFx0Ymx1ZSA9IGh1ZTJyZ2IobTEsIG0yLCBodWUgLSAxIC8gMyk7XHJcblx0XHR9XHJcblxyXG5cdFx0aWYgKCFkZWZpbmVkKHJlc3VsdCkpIHtcclxuXHRcdFx0cmV0dXJuIG5ldyBDb2xvcihyZWQsIGdyZWVuLCBibHVlKTtcclxuXHRcdH1cclxuXHJcblx0XHRyZXN1bHQucmVkID0gcmVkO1xyXG5cdFx0cmVzdWx0LmdyZWVuID0gZ3JlZW47XHJcblx0XHRyZXN1bHQuYmx1ZSA9IGJsdWU7XHJcblx0XHRyZXR1cm4gcmVzdWx0O1xyXG5cdH1cclxuXHJcblx0LyoqXHJcblx0ICogQ3JlYXRlcyBhIHJhbmRvbSBjb2xvciB1c2luZyB0aGUgcHJvdmlkZWQgb3B0aW9ucy4gRm9yIHJlcHJvZHVjaWJsZSByYW5kb20gY29sb3JzLCB5b3Ugc2hvdWxkXHJcblx0ICogY2FsbCB7QGxpbmsgR01hdGgjc2V0UmFuZG9tTnVtYmVyU2VlZH0gb25jZSBhdCB0aGUgYmVnaW5uaW5nIG9mIHlvdXIgYXBwbGljYXRpb24uXHJcblx0ICpcclxuXHQgKiBAcGFyYW0ge09iamVjdH0gW29wdGlvbnNdIE9iamVjdCB3aXRoIHRoZSBmb2xsb3dpbmcgcHJvcGVydGllczpcclxuXHQgKiBAcGFyYW0ge051bWJlcn0gW29wdGlvbnMucmVkXSBJZiBzcGVjaWZpZWQsIHRoZSByZWQgY29tcG9uZW50IHRvIHVzZSBpbnN0ZWFkIG9mIGEgcmFuZG9taXplZCB2YWx1ZS5cclxuXHQgKiBAcGFyYW0ge051bWJlcn0gW29wdGlvbnMubWluaW11bVJlZD0wLjBdIFRoZSBtYXhpbXVtIHJlZCB2YWx1ZSB0byBnZW5lcmF0ZSBpZiBub25lIHdhcyBzcGVjaWZpZWQuXHJcblx0ICogQHBhcmFtIHtOdW1iZXJ9IFtvcHRpb25zLm1heGltdW1SZWQ9MS4wXSBUaGUgbWluaW11bSByZWQgdmFsdWUgdG8gZ2VuZXJhdGUgaWYgbm9uZSB3YXMgc3BlY2lmaWVkLlxyXG5cdCAqIEBwYXJhbSB7TnVtYmVyfSBbb3B0aW9ucy5ncmVlbl0gSWYgc3BlY2lmaWVkLCB0aGUgZ3JlZW4gY29tcG9uZW50IHRvIHVzZSBpbnN0ZWFkIG9mIGEgcmFuZG9taXplZCB2YWx1ZS5cclxuXHQgKiBAcGFyYW0ge051bWJlcn0gW29wdGlvbnMubWluaW11bUdyZWVuPTAuMF0gVGhlIG1heGltdW0gZ3JlZW4gdmFsdWUgdG8gZ2VuZXJhdGUgaWYgbm9uZSB3YXMgc3BlY2lmaWVkLlxyXG5cdCAqIEBwYXJhbSB7TnVtYmVyfSBbb3B0aW9ucy5tYXhpbXVtR3JlZW49MS4wXSBUaGUgbWluaW11bSBncmVlbiB2YWx1ZSB0byBnZW5lcmF0ZSBpZiBub25lIHdhcyBzcGVjaWZpZWQuXHJcblx0ICogQHBhcmFtIHtOdW1iZXJ9IFtvcHRpb25zLmJsdWVdIElmIHNwZWNpZmllZCwgdGhlIGJsdWUgY29tcG9uZW50IHRvIHVzZSBpbnN0ZWFkIG9mIGEgcmFuZG9taXplZCB2YWx1ZS5cclxuXHQgKiBAcGFyYW0ge051bWJlcn0gW29wdGlvbnMubWluaW11bUJsdWU9MC4wXSBUaGUgbWF4aW11bSBibHVlIHZhbHVlIHRvIGdlbmVyYXRlIGlmIG5vbmUgd2FzIHNwZWNpZmllZC5cclxuXHQgKiBAcGFyYW0ge051bWJlcn0gW29wdGlvbnMubWF4aW11bUJsdWU9MS4wXSBUaGUgbWluaW11bSBibHVlIHZhbHVlIHRvIGdlbmVyYXRlIGlmIG5vbmUgd2FzIHNwZWNpZmllZC5cclxuXHQgKiBAcGFyYW0ge0NvbG9yfSBbcmVzdWx0XSBUaGUgb2JqZWN0IHRvIHN0b3JlIHRoZSByZXN1bHQgaW4sIGlmIHVuZGVmaW5lZCBhIG5ldyBpbnN0YW5jZSB3aWxsIGJlIGNyZWF0ZWQuXHJcblx0ICogQHJldHVybnMge0NvbG9yfSBUaGUgbW9kaWZpZWQgcmVzdWx0IHBhcmFtZXRlciBvciBhIG5ldyBpbnN0YW5jZSBpZiByZXN1bHQgd2FzIHVuZGVmaW5lZC5cclxuXHQgKlxyXG5cdCAqIEBleGFtcGxlXHJcblx0ICogLy9DcmVhdGUgYSBjb21wbGV0ZWx5IHJhbmRvbSBjb2xvclxyXG5cdCAqIGNvbnN0IGNvbG9yID0gQ29sb3IuZnJvbVJhbmRvbSgpO1xyXG5cdCAqXHJcblx0ICogLy9DcmVhdGUgYSByYW5kb20gc2hhZGUgb2YgeWVsbG93LlxyXG5cdCAqIGNvbnN0IGNvbG9yMSA9IENvbG9yLmZyb21SYW5kb20oe1xyXG5cdCAqICAgICByZWQgOiAxLjAsXHJcblx0ICogICAgIGdyZWVuIDogMS4wLFxyXG5cdCAqIH0pO1xyXG5cdCAqXHJcblx0ICogLy9DcmVhdGUgYSByYW5kb20gYnJpZ2h0IGNvbG9yLlxyXG5cdCAqIGNvbnN0IGNvbG9yMiA9IENvbG9yLmZyb21SYW5kb20oe1xyXG5cdCAqICAgICBtaW5pbXVtUmVkIDogMC43NSxcclxuXHQgKiAgICAgbWluaW11bUdyZWVuIDogMC43NSxcclxuXHQgKiAgICAgbWluaW11bUJsdWUgOiAwLjc1LFxyXG5cdCAqIH0pO1xyXG5cdCAqL1xyXG5cdHN0YXRpYyBmcm9tUmFuZG9tKG9wdGlvbnMsIHJlc3VsdDogQ29sb3IpOiBDb2xvciB7XHJcblx0XHRvcHRpb25zID0gZGVmYXVsdFZhbHVlKG9wdGlvbnMsIGRlZmF1bHRWYWx1ZS5FTVBUWV9PQkpFQ1QpO1xyXG5cclxuXHRcdGxldCByZWQgPSBvcHRpb25zLnJlZDtcclxuXHRcdGlmICghZGVmaW5lZChyZWQpKSB7XHJcblx0XHRcdGNvbnN0IG1pbmltdW1SZWQgPSBkZWZhdWx0VmFsdWUob3B0aW9ucy5taW5pbXVtUmVkLCAwKTtcclxuXHRcdFx0Y29uc3QgbWF4aW11bVJlZCA9IGRlZmF1bHRWYWx1ZShvcHRpb25zLm1heGltdW1SZWQsIDEuMCk7XHJcblxyXG5cdFx0XHRyZWQgPSBtaW5pbXVtUmVkICsgR01hdGgubmV4dFJhbmRvbU51bWJlcigpICogKG1heGltdW1SZWQgLSBtaW5pbXVtUmVkKTtcclxuXHRcdH1cclxuXHJcblx0XHRsZXQgZ3JlZW4gPSBvcHRpb25zLmdyZWVuO1xyXG5cdFx0aWYgKCFkZWZpbmVkKGdyZWVuKSkge1xyXG5cdFx0XHRjb25zdCBtaW5pbXVtR3JlZW4gPSBkZWZhdWx0VmFsdWUob3B0aW9ucy5taW5pbXVtR3JlZW4sIDApO1xyXG5cdFx0XHRjb25zdCBtYXhpbXVtR3JlZW4gPSBkZWZhdWx0VmFsdWUob3B0aW9ucy5tYXhpbXVtR3JlZW4sIDEuMCk7XHJcblxyXG5cdFx0XHRncmVlbiA9IG1pbmltdW1HcmVlbiArIEdNYXRoLm5leHRSYW5kb21OdW1iZXIoKSAqIChtYXhpbXVtR3JlZW4gLSBtaW5pbXVtR3JlZW4pO1xyXG5cdFx0fVxyXG5cclxuXHRcdGxldCBibHVlID0gb3B0aW9ucy5ibHVlO1xyXG5cdFx0aWYgKCFkZWZpbmVkKGJsdWUpKSB7XHJcblx0XHRcdGNvbnN0IG1pbmltdW1CbHVlID0gZGVmYXVsdFZhbHVlKG9wdGlvbnMubWluaW11bUJsdWUsIDApO1xyXG5cdFx0XHRjb25zdCBtYXhpbXVtQmx1ZSA9IGRlZmF1bHRWYWx1ZShvcHRpb25zLm1heGltdW1CbHVlLCAxLjApO1xyXG5cclxuXHRcdFx0Ymx1ZSA9IG1pbmltdW1CbHVlICsgR01hdGgubmV4dFJhbmRvbU51bWJlcigpICogKG1heGltdW1CbHVlIC0gbWluaW11bUJsdWUpO1xyXG5cdFx0fVxyXG5cdFx0aWYgKCFkZWZpbmVkKHJlc3VsdCkpIHtcclxuXHRcdFx0cmV0dXJuIG5ldyBDb2xvcihyZWQsIGdyZWVuLCBibHVlKTtcclxuXHRcdH1cclxuXHJcblx0XHRyZXN1bHQucmVkID0gcmVkO1xyXG5cdFx0cmVzdWx0LmdyZWVuID0gZ3JlZW47XHJcblx0XHRyZXN1bHQuYmx1ZSA9IGJsdWU7XHJcblx0XHRyZXR1cm4gcmVzdWx0O1xyXG5cdH1cclxuXHJcblx0c3RhdGljIGZyb21Dc3NDb2xvclN0cmluZyhjb2xvcjogc3RyaW5nLCByZXN1bHQ6IENvbG9yID0gbmV3IENvbG9yKCkpOiBDb2xvciB7XHJcblx0XHQvLyBSZW1vdmUgYWxsIHdoaXRlc3BhY2VzIGZyb20gdGhlIGNvbG9yIHN0cmluZ1xyXG5cdFx0Y29sb3IgPSBjb2xvci5yZXBsYWNlKC9cXHMvZywgXCJcIik7XHJcblxyXG5cdFx0Y29uc3QgbmFtZWRDb2xvciA9IENvbG9yW2NvbG9yLnRvVXBwZXJDYXNlKCldO1xyXG5cdFx0aWYgKGRlZmluZWQobmFtZWRDb2xvcikpIHtcclxuXHRcdFx0Q29sb3IuY2xvbmUobmFtZWRDb2xvciwgcmVzdWx0KTtcclxuXHRcdFx0cmV0dXJuIHJlc3VsdDtcclxuXHRcdH1cclxuXHJcblx0XHRsZXQgbWF0Y2hlcyA9IHJnYmFNYXRjaGVyLmV4ZWMoY29sb3IpO1xyXG5cdFx0aWYgKG1hdGNoZXMgIT09IG51bGwpIHtcclxuXHRcdFx0cmVzdWx0LnJlZCA9IHBhcnNlSW50KG1hdGNoZXNbMV0sIDE2KSAvIDE1O1xyXG5cdFx0XHRyZXN1bHQuZ3JlZW4gPSBwYXJzZUludChtYXRjaGVzWzJdLCAxNikgLyAxNS4wO1xyXG5cdFx0XHRyZXN1bHQuYmx1ZSA9IHBhcnNlSW50KG1hdGNoZXNbM10sIDE2KSAvIDE1LjA7XHJcblx0XHRcdHJldHVybiByZXN1bHQ7XHJcblx0XHR9XHJcblxyXG5cdFx0bWF0Y2hlcyA9IHJyZ2diYmFhTWF0Y2hlci5leGVjKGNvbG9yKTtcclxuXHRcdGlmIChtYXRjaGVzICE9PSBudWxsKSB7XHJcblx0XHRcdHJlc3VsdC5yZWQgPSBwYXJzZUludChtYXRjaGVzWzFdLCAxNikgLyAyNTUuMDtcclxuXHRcdFx0cmVzdWx0LmdyZWVuID0gcGFyc2VJbnQobWF0Y2hlc1syXSwgMTYpIC8gMjU1LjA7XHJcblx0XHRcdHJlc3VsdC5ibHVlID0gcGFyc2VJbnQobWF0Y2hlc1szXSwgMTYpIC8gMjU1LjA7XHJcblx0XHRcdHJldHVybiByZXN1bHQ7XHJcblx0XHR9XHJcblxyXG5cdFx0bWF0Y2hlcyA9IHJnYlBhcmVudGhlc2VzTWF0Y2hlci5leGVjKGNvbG9yKTtcclxuXHRcdGlmIChtYXRjaGVzICE9PSBudWxsKSB7XHJcblx0XHRcdHJlc3VsdC5yZWQgPSBwYXJzZUZsb2F0KG1hdGNoZXNbMV0pIC8gKFwiJVwiID09PSBtYXRjaGVzWzFdLnN1YnN0cigtMSkgPyAxMDAuMCA6IDI1NS4wKTtcclxuXHRcdFx0cmVzdWx0LmdyZWVuID0gcGFyc2VGbG9hdChtYXRjaGVzWzJdKSAvIChcIiVcIiA9PT0gbWF0Y2hlc1syXS5zdWJzdHIoLTEpID8gMTAwLjAgOiAyNTUuMCk7XHJcblx0XHRcdHJlc3VsdC5ibHVlID0gcGFyc2VGbG9hdChtYXRjaGVzWzNdKSAvIChcIiVcIiA9PT0gbWF0Y2hlc1szXS5zdWJzdHIoLTEpID8gMTAwLjAgOiAyNTUuMCk7XHJcblx0XHRcdHJldHVybiByZXN1bHQ7XHJcblx0XHR9XHJcblxyXG5cdFx0bWF0Y2hlcyA9IGhzbFBhcmVudGhlc2VzTWF0Y2hlci5leGVjKGNvbG9yKTtcclxuXHRcdGlmIChtYXRjaGVzICE9PSBudWxsKSB7XHJcblx0XHRcdHJldHVybiBDb2xvci5mcm9tSHNsKFxyXG5cdFx0XHRcdHBhcnNlRmxvYXQobWF0Y2hlc1sxXSkgLyAzNjAuMCxcclxuXHRcdFx0XHRwYXJzZUZsb2F0KG1hdGNoZXNbMl0pIC8gMTAwLjAsXHJcblx0XHRcdFx0cGFyc2VGbG9hdChtYXRjaGVzWzNdKSAvIDEwMC4wLFxyXG5cdFx0XHRcdHJlc3VsdFxyXG5cdFx0XHQpO1xyXG5cdFx0fVxyXG5cclxuXHRcdHJlc3VsdCA9IHVuZGVmaW5lZDtcclxuXHRcdHJldHVybiByZXN1bHQ7XHJcblx0fVxyXG5cclxuXHRzdGF0aWMgYnl0ZVRvRmxvYXQodmFsdWU6IG51bWJlcik6IG51bWJlciB7XHJcblx0XHRyZXR1cm4gdmFsdWUgLyAyNTUuMDtcclxuXHR9XHJcblxyXG5cdHN0YXRpYyBmbG9hdFRvQnl0ZSh2YWx1ZTogbnVtYmVyKTogbnVtYmVyIHtcclxuXHRcdHJldHVybiB2YWx1ZSA9PT0gMS4wID8gMjU1LjAgOiAodmFsdWUgKiAyNTYuMCkgfCAwO1xyXG5cdH1cclxuXHJcblx0c3RhdGljIGNsb25lKGNvbG9yOiBDb2xvciwgcmVzdWx0OiBDb2xvcik6IENvbG9yIHtcclxuXHRcdGlmICghZGVmaW5lZChjb2xvcikpIHtcclxuXHRcdFx0cmV0dXJuIHVuZGVmaW5lZDtcclxuXHRcdH1cclxuXHRcdGlmICghZGVmaW5lZChyZXN1bHQpKSB7XHJcblx0XHRcdHJldHVybiBuZXcgQ29sb3IoY29sb3IucmVkLCBjb2xvci5ncmVlbiwgY29sb3IuYmx1ZSk7XHJcblx0XHR9XHJcblx0XHRyZXN1bHQucmVkID0gY29sb3IucmVkO1xyXG5cdFx0cmVzdWx0LmdyZWVuID0gY29sb3IuZ3JlZW47XHJcblx0XHRyZXN1bHQuYmx1ZSA9IGNvbG9yLmJsdWU7XHJcblx0XHRyZXR1cm4gcmVzdWx0O1xyXG5cdH1cclxuXHJcblx0c3RhdGljIGVxdWFscyhsZWZ0OiBDb2xvciwgcmlnaHQ6IENvbG9yKTogYm9vbGVhbiB7XHJcblx0XHRyZXR1cm4gKFxyXG5cdFx0XHRsZWZ0ID09PSByaWdodCB8fCAvL1xyXG5cdFx0XHQoZGVmaW5lZChsZWZ0KSAmJiAvL1xyXG5cdFx0XHRcdGRlZmluZWQocmlnaHQpICYmIC8vXHJcblx0XHRcdFx0bGVmdC5yZWQgPT09IHJpZ2h0LnJlZCAmJiAvL1xyXG5cdFx0XHRcdGxlZnQuZ3JlZW4gPT09IHJpZ2h0LmdyZWVuICYmIC8vXHJcblx0XHRcdFx0bGVmdC5ibHVlID09PSByaWdodC5ibHVlKVxyXG5cdFx0KTtcclxuXHR9XHJcblxyXG5cdC8qKlxyXG5cdCAqIEBwcml2YXRlXHJcblx0ICovXHJcblx0c3RhdGljIGVxdWFsc0FycmF5KGNvbG9yOiBDb2xvciwgYXJyYXk6IG51bWJlcltdLCBvZmZzZXQ6IG51bWJlcik6IGJvb2xlYW4ge1xyXG5cdFx0cmV0dXJuIGNvbG9yLnJlZCA9PT0gYXJyYXlbb2Zmc2V0XSAmJiBjb2xvci5ncmVlbiA9PT0gYXJyYXlbb2Zmc2V0ICsgMV0gJiYgY29sb3IuYmx1ZSA9PT0gYXJyYXlbb2Zmc2V0ICsgMl07XHJcblx0fVxyXG59XHJcbmV4cG9ydCBkZWZhdWx0IENvbG9yO1xyXG4iLCJpbXBvcnQgZGVmYXVsdFZhbHVlIGZyb20gXCIuLi91dGlscy9kZWZhdWx0VmFsdWVcIjtcclxuaW1wb3J0IGRlZmluZWQgZnJvbSBcIi4uL3V0aWxzL2RlZmluZWRcIjtcclxuaW1wb3J0IFZlY3RvcjIgZnJvbSBcIi4vVmVjdG9yMlwiO1xyXG5cclxuLyoqXHJcbiAqIEEgMngyIG1hdHJpeCwgaW5kZXhhYmxlIGFzIGEgY29sdW1uLW1ham9yIG9yZGVyIGFycmF5LlxyXG4gKiBAcGFyYW0ge051bWJlcn0gW2NvbHVtbjBSb3cwPTAuMF0gVGhlIHZhbHVlIGZvciBjb2x1bW4gMCwgcm93IDAuXHJcbiAqIEBwYXJhbSB7TnVtYmVyfSBbY29sdW1uMVJvdzA9MC4wXSBUaGUgdmFsdWUgZm9yIGNvbHVtbiAxLCByb3cgMC5cclxuICogQHBhcmFtIHtOdW1iZXJ9IFtjb2x1bW4wUm93MT0wLjBdIFRoZSB2YWx1ZSBmb3IgY29sdW1uIDAsIHJvdyAxLlxyXG4gKiBAcGFyYW0ge051bWJlcn0gW2NvbHVtbjFSb3cxPTAuMF0gVGhlIHZhbHVlIGZvciBjb2x1bW4gMSwgcm93IDEuXHJcbiAqL1xyXG5jbGFzcyBNYXRyaXgyIHtcclxuXHRjb25zdHJ1Y3Rvcihjb2x1bW4wUm93MCA9IDAsIGNvbHVtbjFSb3cwID0gMCwgY29sdW1uMFJvdzEgPSAwLCBjb2x1bW4xUm93MSA9IDApIHtcclxuXHRcdHRoaXNbMF0gPSBjb2x1bW4wUm93MDtcclxuXHRcdHRoaXNbMV0gPSBjb2x1bW4wUm93MTtcclxuXHRcdHRoaXNbMl0gPSBjb2x1bW4xUm93MDtcclxuXHRcdHRoaXNbM10gPSBjb2x1bW4xUm93MTtcclxuXHR9XHJcblxyXG5cdHN0YXRpYyBjbG9uZShtYXRyaXg6IE1hdHJpeDIgfCBudW1iZXJbXSwgcmVzdWx0OiBNYXRyaXgyKTogTWF0cml4MiB7XHJcblx0XHRpZiAoIWRlZmluZWQobWF0cml4KSkge1xyXG5cdFx0XHRyZXR1cm4gdW5kZWZpbmVkO1xyXG5cdFx0fVxyXG5cdFx0aWYgKCFkZWZpbmVkKHJlc3VsdCkpIHtcclxuXHRcdFx0cmV0dXJuIG5ldyBNYXRyaXgyKG1hdHJpeFswXSwgbWF0cml4WzJdLCBtYXRyaXhbMV0sIG1hdHJpeFszXSk7XHJcblx0XHR9XHJcblx0XHRyZXN1bHRbMF0gPSBtYXRyaXhbMF07XHJcblx0XHRyZXN1bHRbMV0gPSBtYXRyaXhbMV07XHJcblx0XHRyZXN1bHRbMl0gPSBtYXRyaXhbMl07XHJcblx0XHRyZXN1bHRbM10gPSBtYXRyaXhbM107XHJcblx0XHRyZXR1cm4gcmVzdWx0O1xyXG5cdH1cclxuXHJcblx0c3RhdGljIGZyb21Db2x1bW5NYWpvckFycmF5KHZhbHVlczogbnVtYmVyW10sIHJlc3VsdDogTWF0cml4Mik6IE1hdHJpeDIge1xyXG5cdFx0cmV0dXJuIE1hdHJpeDIuY2xvbmUodmFsdWVzLCByZXN1bHQpO1xyXG5cdH1cclxuXHJcblx0c3RhdGljIGZyb21Sb3dNYWpvckFycmF5KHZhbHVlczogbnVtYmVyLCByZXN1bHQ6IE1hdHJpeDIpOiBNYXRyaXgyIHtcclxuXHRcdGlmICghZGVmaW5lZChyZXN1bHQpKSB7XHJcblx0XHRcdHJldHVybiBuZXcgTWF0cml4Mih2YWx1ZXNbMF0sIHZhbHVlc1sxXSwgdmFsdWVzWzJdLCB2YWx1ZXNbM10pO1xyXG5cdFx0fVxyXG5cdFx0cmVzdWx0WzBdID0gdmFsdWVzWzBdO1xyXG5cdFx0cmVzdWx0WzFdID0gdmFsdWVzWzJdO1xyXG5cdFx0cmVzdWx0WzJdID0gdmFsdWVzWzFdO1xyXG5cdFx0cmVzdWx0WzNdID0gdmFsdWVzWzNdO1xyXG5cdFx0cmV0dXJuIHJlc3VsdDtcclxuXHR9XHJcblxyXG5cdHN0YXRpYyBmcm9tU2NhbGUoc2NhbGU6IFZlY3RvcjIsIHJlc3VsdDogTWF0cml4Mik6IE1hdHJpeDIge1xyXG5cdFx0aWYgKCFkZWZpbmVkKHJlc3VsdCkpIHtcclxuXHRcdFx0cmV0dXJuIG5ldyBNYXRyaXgyKHNjYWxlLngsIDAuMCwgMC4wLCBzY2FsZS55KTtcclxuXHRcdH1cclxuXHJcblx0XHRyZXN1bHRbMF0gPSBzY2FsZS54O1xyXG5cdFx0cmVzdWx0WzFdID0gMC4wO1xyXG5cdFx0cmVzdWx0WzJdID0gMC4wO1xyXG5cdFx0cmVzdWx0WzNdID0gc2NhbGUueTtcclxuXHRcdHJldHVybiByZXN1bHQ7XHJcblx0fVxyXG5cclxuXHRzdGF0aWMgZnJvbVJvdGF0aW9uKGFuZ2xlOiBudW1iZXIsIHJlc3VsdDogTWF0cml4Mik6IE1hdHJpeDIge1xyXG5cdFx0Y29uc3QgY29zQW5nbGUgPSBNYXRoLmNvcyhhbmdsZSk7XHJcblx0XHRjb25zdCBzaW5BbmdsZSA9IE1hdGguc2luKGFuZ2xlKTtcclxuXHJcblx0XHRpZiAoIWRlZmluZWQocmVzdWx0KSkge1xyXG5cdFx0XHRyZXR1cm4gbmV3IE1hdHJpeDIoY29zQW5nbGUsIC1zaW5BbmdsZSwgc2luQW5nbGUsIGNvc0FuZ2xlKTtcclxuXHRcdH1cclxuXHRcdHJlc3VsdFswXSA9IGNvc0FuZ2xlO1xyXG5cdFx0cmVzdWx0WzFdID0gc2luQW5nbGU7XHJcblx0XHRyZXN1bHRbMl0gPSAtc2luQW5nbGU7XHJcblx0XHRyZXN1bHRbM10gPSBjb3NBbmdsZTtcclxuXHRcdHJldHVybiByZXN1bHQ7XHJcblx0fVxyXG5cdHRvQXJyYXkoKSB7XHJcblx0XHRjb25zdCByZXN1bHQgPSBbXTtcclxuXHRcdE1hdHJpeDIudG9BcnJheSh0aGlzLCByZXN1bHQpO1xyXG5cdFx0cmV0dXJuIHJlc3VsdDtcclxuXHR9XHJcblxyXG5cdHN0YXRpYyB0b0FycmF5KG1hdHJpeDogTWF0cml4MiwgcmVzdWx0OiBudW1iZXJbXSk6IG51bWJlcltdIHtcclxuXHRcdGlmICghZGVmaW5lZChyZXN1bHQpKSB7XHJcblx0XHRcdHJldHVybiBbbWF0cml4WzBdLCBtYXRyaXhbMV0sIG1hdHJpeFsyXSwgbWF0cml4WzNdXTtcclxuXHRcdH1cclxuXHRcdHJlc3VsdFswXSA9IG1hdHJpeFswXTtcclxuXHRcdHJlc3VsdFsxXSA9IG1hdHJpeFsxXTtcclxuXHRcdHJlc3VsdFsyXSA9IG1hdHJpeFsyXTtcclxuXHRcdHJlc3VsdFszXSA9IG1hdHJpeFszXTtcclxuXHRcdHJldHVybiByZXN1bHQ7XHJcblx0fVxyXG5cclxuXHRzdGF0aWMgZ2V0RWxlbWVudEluZGV4KGNvbHVtbjogbnVtYmVyLCByb3c6IG51bWJlcik6IG51bWJlciB7XHJcblx0XHRyZXR1cm4gY29sdW1uICogMiArIHJvdztcclxuXHR9XHJcblxyXG5cdHN0YXRpYyBnZXRDb2x1bW4obWF0cml4OiBNYXRyaXgyLCBpbmRleDogbnVtYmVyLCByZXN1bHQ6IFZlY3RvcjIpOiBWZWN0b3IyIHtcclxuXHRcdGNvbnN0IHN0YXJ0SW5kZXggPSBpbmRleCAqIDI7XHJcblx0XHRjb25zdCB4ID0gbWF0cml4W3N0YXJ0SW5kZXhdO1xyXG5cdFx0Y29uc3QgeSA9IG1hdHJpeFtzdGFydEluZGV4ICsgMV07XHJcblxyXG5cdFx0cmVzdWx0LnggPSB4O1xyXG5cdFx0cmVzdWx0LnkgPSB5O1xyXG5cdFx0cmV0dXJuIHJlc3VsdDtcclxuXHR9XHJcblxyXG5cdHN0YXRpYyBzZXRDb2x1bW4obWF0cml4OiBNYXRyaXgyLCBpbmRleDogbnVtYmVyLCBjYXJ0ZXNpYW46IFZlY3RvcjIsIHJlc3VsdDogTWF0cml4Mik6IE1hdHJpeDIge1xyXG5cdFx0cmVzdWx0ID0gTWF0cml4Mi5jbG9uZShtYXRyaXgsIHJlc3VsdCk7XHJcblx0XHRjb25zdCBzdGFydEluZGV4ID0gaW5kZXggKiAyO1xyXG5cdFx0cmVzdWx0W3N0YXJ0SW5kZXhdID0gY2FydGVzaWFuLng7XHJcblx0XHRyZXN1bHRbc3RhcnRJbmRleCArIDFdID0gY2FydGVzaWFuLnk7XHJcblx0XHRyZXR1cm4gcmVzdWx0O1xyXG5cdH1cclxuXHJcblx0c3RhdGljIGdldFJvdyhtYXRyaXg6IE1hdHJpeDIsIGluZGV4OiBudW1iZXIsIHJlc3VsdDogVmVjdG9yMik6IFZlY3RvcjIge1xyXG5cdFx0Y29uc3QgeCA9IG1hdHJpeFtpbmRleF07XHJcblx0XHRjb25zdCB5ID0gbWF0cml4W2luZGV4ICsgMl07XHJcblxyXG5cdFx0cmVzdWx0LnggPSB4O1xyXG5cdFx0cmVzdWx0LnkgPSB5O1xyXG5cdFx0cmV0dXJuIHJlc3VsdDtcclxuXHR9XHJcblxyXG5cdHN0YXRpYyBzZXRSb3cobWF0cml4OiBNYXRyaXgyLCBpbmRleDogbnVtYmVyLCBjYXJ0ZXNpYW46IFZlY3RvcjIsIHJlc3VsdDogTWF0cml4Mik6IE1hdHJpeDIge1xyXG5cdFx0cmVzdWx0ID0gTWF0cml4Mi5jbG9uZShtYXRyaXgsIHJlc3VsdCk7XHJcblx0XHRyZXN1bHRbaW5kZXhdID0gY2FydGVzaWFuLng7XHJcblx0XHRyZXN1bHRbaW5kZXggKyAyXSA9IGNhcnRlc2lhbi55O1xyXG5cdFx0cmV0dXJuIHJlc3VsdDtcclxuXHR9XHJcblxyXG5cdHN0YXRpYyBzZXRTY2FsZShtYXRyaXg6IE1hdHJpeDIsIHNjYWxlOiBWZWN0b3IyLCByZXN1bHQ6IE1hdHJpeDIpOiBNYXRyaXgyIHtcclxuXHRcdGNvbnN0IGV4aXN0aW5nU2NhbGUgPSBNYXRyaXgyLmdldFNjYWxlKG1hdHJpeCwgc2NhbGVTY3JhdGNoMSk7XHJcblx0XHRjb25zdCBzY2FsZVJhdGlvWCA9IHNjYWxlLnggLyBleGlzdGluZ1NjYWxlLng7XHJcblx0XHRjb25zdCBzY2FsZVJhdGlvWSA9IHNjYWxlLnkgLyBleGlzdGluZ1NjYWxlLnk7XHJcblxyXG5cdFx0cmVzdWx0WzBdID0gbWF0cml4WzBdICogc2NhbGVSYXRpb1g7XHJcblx0XHRyZXN1bHRbMV0gPSBtYXRyaXhbMV0gKiBzY2FsZVJhdGlvWDtcclxuXHRcdHJlc3VsdFsyXSA9IG1hdHJpeFsyXSAqIHNjYWxlUmF0aW9ZO1xyXG5cdFx0cmVzdWx0WzNdID0gbWF0cml4WzNdICogc2NhbGVSYXRpb1k7XHJcblxyXG5cdFx0cmV0dXJuIHJlc3VsdDtcclxuXHR9XHJcblxyXG5cdHN0YXRpYyBnZXRTY2FsZShtYXRyaXg6IE1hdHJpeDIsIHJlc3VsdDogVmVjdG9yMik6IFZlY3RvcjIge1xyXG5cdFx0cmVzdWx0LnggPSBWZWN0b3IyLm1hZ25pdHVkZShWZWN0b3IyLmZyb21FbGVtZW50cyhtYXRyaXhbMF0sIG1hdHJpeFsxXSwgc2NyYXRjaENvbHVtbikpO1xyXG5cdFx0cmVzdWx0LnkgPSBWZWN0b3IyLm1hZ25pdHVkZShWZWN0b3IyLmZyb21FbGVtZW50cyhtYXRyaXhbMl0sIG1hdHJpeFszXSwgc2NyYXRjaENvbHVtbikpO1xyXG5cdFx0cmV0dXJuIHJlc3VsdDtcclxuXHR9XHJcblxyXG5cdHN0YXRpYyBnZXRNYXhpbXVtU2NhbGUobWF0cml4OiBNYXRyaXgyKTogbnVtYmVyIHtcclxuXHRcdE1hdHJpeDIuZ2V0U2NhbGUobWF0cml4LCBzY2FsZVNjcmF0Y2gzKTtcclxuXHRcdHJldHVybiBWZWN0b3IyLm1heGltdW1Db21wb25lbnQoc2NhbGVTY3JhdGNoMyk7XHJcblx0fVxyXG5cclxuXHRzdGF0aWMgc2V0Um90YXRpb24obWF0cml4OiBNYXRyaXgyLCByb3RhdGlvbjogTWF0cml4MiwgcmVzdWx0OiBNYXRyaXgyKTogTWF0cml4MiB7XHJcblx0XHRjb25zdCBzY2FsZSA9IE1hdHJpeDIuZ2V0U2NhbGUobWF0cml4LCBzY2FsZVNjcmF0Y2g0KTtcclxuXHJcblx0XHRyZXN1bHRbMF0gPSByb3RhdGlvblswXSAqIHNjYWxlLng7XHJcblx0XHRyZXN1bHRbMV0gPSByb3RhdGlvblsxXSAqIHNjYWxlLng7XHJcblx0XHRyZXN1bHRbMl0gPSByb3RhdGlvblsyXSAqIHNjYWxlLnk7XHJcblx0XHRyZXN1bHRbM10gPSByb3RhdGlvblszXSAqIHNjYWxlLnk7XHJcblxyXG5cdFx0cmV0dXJuIHJlc3VsdDtcclxuXHR9XHJcblxyXG5cdHN0YXRpYyBnZXRSb3RhdGlvbihtYXRyaXg6IE1hdHJpeDIsIHJlc3VsdDogTWF0cml4Mik6IE1hdHJpeDIge1xyXG5cdFx0Y29uc3Qgc2NhbGUgPSBNYXRyaXgyLmdldFNjYWxlKG1hdHJpeCwgc2NhbGVTY3JhdGNoNSk7XHJcblxyXG5cdFx0cmVzdWx0WzBdID0gbWF0cml4WzBdIC8gc2NhbGUueDtcclxuXHRcdHJlc3VsdFsxXSA9IG1hdHJpeFsxXSAvIHNjYWxlLng7XHJcblx0XHRyZXN1bHRbMl0gPSBtYXRyaXhbMl0gLyBzY2FsZS55O1xyXG5cdFx0cmVzdWx0WzNdID0gbWF0cml4WzNdIC8gc2NhbGUueTtcclxuXHJcblx0XHRyZXR1cm4gcmVzdWx0O1xyXG5cdH1cclxuXHJcblx0c3RhdGljIG11bHRpcGx5KGxlZnQ6IE1hdHJpeDIsIHJpZ2h0OiBNYXRyaXgyLCByZXN1bHQ6IE1hdHJpeDIpOiBNYXRyaXgyIHtcclxuXHRcdGNvbnN0IGNvbHVtbjBSb3cwID0gbGVmdFswXSAqIHJpZ2h0WzBdICsgbGVmdFsyXSAqIHJpZ2h0WzFdO1xyXG5cdFx0Y29uc3QgY29sdW1uMVJvdzAgPSBsZWZ0WzBdICogcmlnaHRbMl0gKyBsZWZ0WzJdICogcmlnaHRbM107XHJcblx0XHRjb25zdCBjb2x1bW4wUm93MSA9IGxlZnRbMV0gKiByaWdodFswXSArIGxlZnRbM10gKiByaWdodFsxXTtcclxuXHRcdGNvbnN0IGNvbHVtbjFSb3cxID0gbGVmdFsxXSAqIHJpZ2h0WzJdICsgbGVmdFszXSAqIHJpZ2h0WzNdO1xyXG5cclxuXHRcdHJlc3VsdFswXSA9IGNvbHVtbjBSb3cwO1xyXG5cdFx0cmVzdWx0WzFdID0gY29sdW1uMFJvdzE7XHJcblx0XHRyZXN1bHRbMl0gPSBjb2x1bW4xUm93MDtcclxuXHRcdHJlc3VsdFszXSA9IGNvbHVtbjFSb3cxO1xyXG5cdFx0cmV0dXJuIHJlc3VsdDtcclxuXHR9XHJcblxyXG5cdHN0YXRpYyBhZGQobGVmdDogTWF0cml4MiwgcmlnaHQ6IE1hdHJpeDIsIHJlc3VsdDogTWF0cml4Mikge1xyXG5cdFx0cmVzdWx0WzBdID0gbGVmdFswXSArIHJpZ2h0WzBdO1xyXG5cdFx0cmVzdWx0WzFdID0gbGVmdFsxXSArIHJpZ2h0WzFdO1xyXG5cdFx0cmVzdWx0WzJdID0gbGVmdFsyXSArIHJpZ2h0WzJdO1xyXG5cdFx0cmVzdWx0WzNdID0gbGVmdFszXSArIHJpZ2h0WzNdO1xyXG5cdFx0cmV0dXJuIHJlc3VsdDtcclxuXHR9XHJcblxyXG5cdHN0YXRpYyBzdWJ0cmFjdChsZWZ0OiBNYXRyaXgyLCByaWdodDogTWF0cml4MiwgcmVzdWx0OiBNYXRyaXgyKTogTWF0cml4MiB7XHJcblx0XHRyZXN1bHRbMF0gPSBsZWZ0WzBdIC0gcmlnaHRbMF07XHJcblx0XHRyZXN1bHRbMV0gPSBsZWZ0WzFdIC0gcmlnaHRbMV07XHJcblx0XHRyZXN1bHRbMl0gPSBsZWZ0WzJdIC0gcmlnaHRbMl07XHJcblx0XHRyZXN1bHRbM10gPSBsZWZ0WzNdIC0gcmlnaHRbM107XHJcblx0XHRyZXR1cm4gcmVzdWx0O1xyXG5cdH1cclxuXHJcblx0c3RhdGljIG11bHRpcGx5QnlWZWN0b3IobWF0cml4OiBNYXRyaXgyLCBjYXJ0ZXNpYW46IFZlY3RvcjIsIHJlc3VsdDogVmVjdG9yMik6IFZlY3RvcjIge1xyXG5cdFx0Y29uc3QgeCA9IG1hdHJpeFswXSAqIGNhcnRlc2lhbi54ICsgbWF0cml4WzJdICogY2FydGVzaWFuLnk7XHJcblx0XHRjb25zdCB5ID0gbWF0cml4WzFdICogY2FydGVzaWFuLnggKyBtYXRyaXhbM10gKiBjYXJ0ZXNpYW4ueTtcclxuXHJcblx0XHRyZXN1bHQueCA9IHg7XHJcblx0XHRyZXN1bHQueSA9IHk7XHJcblx0XHRyZXR1cm4gcmVzdWx0O1xyXG5cdH1cclxuXHJcblx0c3RhdGljIG11bHRpcGx5QnlTY2FsYXIobWF0cml4OiBNYXRyaXgyLCBzY2FsYXI6IG51bWJlciwgcmVzdWx0OiBNYXRyaXgyKTogTWF0cml4MiB7XHJcblx0XHRyZXN1bHRbMF0gPSBtYXRyaXhbMF0gKiBzY2FsYXI7XHJcblx0XHRyZXN1bHRbMV0gPSBtYXRyaXhbMV0gKiBzY2FsYXI7XHJcblx0XHRyZXN1bHRbMl0gPSBtYXRyaXhbMl0gKiBzY2FsYXI7XHJcblx0XHRyZXN1bHRbM10gPSBtYXRyaXhbM10gKiBzY2FsYXI7XHJcblx0XHRyZXR1cm4gcmVzdWx0O1xyXG5cdH1cclxuXHJcblx0c3RhdGljIG11bHRpcGx5QnlTY2FsZShtYXRyaXg6IE1hdHJpeDIsIHNjYWxlOiBWZWN0b3IyLCByZXN1bHQ6IE1hdHJpeDIpOiBNYXRyaXgyIHtcclxuXHRcdHJlc3VsdFswXSA9IG1hdHJpeFswXSAqIHNjYWxlLng7XHJcblx0XHRyZXN1bHRbMV0gPSBtYXRyaXhbMV0gKiBzY2FsZS54O1xyXG5cdFx0cmVzdWx0WzJdID0gbWF0cml4WzJdICogc2NhbGUueTtcclxuXHRcdHJlc3VsdFszXSA9IG1hdHJpeFszXSAqIHNjYWxlLnk7XHJcblxyXG5cdFx0cmV0dXJuIHJlc3VsdDtcclxuXHR9XHJcblxyXG5cdHN0YXRpYyBuZWdhdGUobWF0cml4OiBNYXRyaXgyLCByZXN1bHQ6IE1hdHJpeDIpOiBNYXRyaXgyIHtcclxuXHRcdHJlc3VsdFswXSA9IC1tYXRyaXhbMF07XHJcblx0XHRyZXN1bHRbMV0gPSAtbWF0cml4WzFdO1xyXG5cdFx0cmVzdWx0WzJdID0gLW1hdHJpeFsyXTtcclxuXHRcdHJlc3VsdFszXSA9IC1tYXRyaXhbM107XHJcblx0XHRyZXR1cm4gcmVzdWx0O1xyXG5cdH1cclxuXHJcblx0c3RhdGljIHRyYW5zcG9zZShtYXRyaXg6IE1hdHJpeDIsIHJlc3VsdDogTWF0cml4Mik6IE1hdHJpeDIge1xyXG5cdFx0Y29uc3QgY29sdW1uMFJvdzAgPSBtYXRyaXhbMF07XHJcblx0XHRjb25zdCBjb2x1bW4wUm93MSA9IG1hdHJpeFsyXTtcclxuXHRcdGNvbnN0IGNvbHVtbjFSb3cwID0gbWF0cml4WzFdO1xyXG5cdFx0Y29uc3QgY29sdW1uMVJvdzEgPSBtYXRyaXhbM107XHJcblxyXG5cdFx0cmVzdWx0WzBdID0gY29sdW1uMFJvdzA7XHJcblx0XHRyZXN1bHRbMV0gPSBjb2x1bW4wUm93MTtcclxuXHRcdHJlc3VsdFsyXSA9IGNvbHVtbjFSb3cwO1xyXG5cdFx0cmVzdWx0WzNdID0gY29sdW1uMVJvdzE7XHJcblx0XHRyZXR1cm4gcmVzdWx0O1xyXG5cdH1cclxuXHJcblx0c3RhdGljIGFicyhtYXRyaXg6IE1hdHJpeDIsIHJlc3VsdDogTWF0cml4Mik6IE1hdHJpeDIge1xyXG5cdFx0cmVzdWx0WzBdID0gTWF0aC5hYnMobWF0cml4WzBdKTtcclxuXHRcdHJlc3VsdFsxXSA9IE1hdGguYWJzKG1hdHJpeFsxXSk7XHJcblx0XHRyZXN1bHRbMl0gPSBNYXRoLmFicyhtYXRyaXhbMl0pO1xyXG5cdFx0cmVzdWx0WzNdID0gTWF0aC5hYnMobWF0cml4WzNdKTtcclxuXHJcblx0XHRyZXR1cm4gcmVzdWx0O1xyXG5cdH1cclxuXHJcblx0c3RhdGljIGVxdWFscyhsZWZ0OiBNYXRyaXgyLCByaWdodDogTWF0cml4Mik6IGJvb2xlYW4ge1xyXG5cdFx0cmV0dXJuIChcclxuXHRcdFx0bGVmdCA9PT0gcmlnaHQgfHxcclxuXHRcdFx0KGRlZmluZWQobGVmdCkgJiZcclxuXHRcdFx0XHRkZWZpbmVkKHJpZ2h0KSAmJlxyXG5cdFx0XHRcdGxlZnRbMF0gPT09IHJpZ2h0WzBdICYmXHJcblx0XHRcdFx0bGVmdFsxXSA9PT0gcmlnaHRbMV0gJiZcclxuXHRcdFx0XHRsZWZ0WzJdID09PSByaWdodFsyXSAmJlxyXG5cdFx0XHRcdGxlZnRbM10gPT09IHJpZ2h0WzNdKVxyXG5cdFx0KTtcclxuXHR9XHJcblxyXG5cdC8qKlxyXG5cdCAqIEBwcml2YXRlXHJcblx0ICovXHJcblx0c3RhdGljIGVxdWFsc0FycmF5KG1hdHJpeDogTWF0cml4MiwgYXJyYXk6IG51bWJlcltdLCBvZmZzZXQ6IG51bWJlcik6IGJvb2xlYW4ge1xyXG5cdFx0cmV0dXJuIChcclxuXHRcdFx0bWF0cml4WzBdID09PSBhcnJheVtvZmZzZXRdICYmXHJcblx0XHRcdG1hdHJpeFsxXSA9PT0gYXJyYXlbb2Zmc2V0ICsgMV0gJiZcclxuXHRcdFx0bWF0cml4WzJdID09PSBhcnJheVtvZmZzZXQgKyAyXSAmJlxyXG5cdFx0XHRtYXRyaXhbM10gPT09IGFycmF5W29mZnNldCArIDNdXHJcblx0XHQpO1xyXG5cdH1cclxuXHJcblx0c3RhdGljIGVxdWFsc0Vwc2lsb24obGVmdDogTWF0cml4MiwgcmlnaHQ6IE1hdHJpeDIsIGVwc2lsb24gPSAwKTogYm9vbGVhbiB7XHJcblx0XHRlcHNpbG9uID0gZGVmYXVsdFZhbHVlKGVwc2lsb24sIDApO1xyXG5cdFx0cmV0dXJuIChcclxuXHRcdFx0bGVmdCA9PT0gcmlnaHQgfHxcclxuXHRcdFx0KGRlZmluZWQobGVmdCkgJiZcclxuXHRcdFx0XHRkZWZpbmVkKHJpZ2h0KSAmJlxyXG5cdFx0XHRcdE1hdGguYWJzKGxlZnRbMF0gLSByaWdodFswXSkgPD0gZXBzaWxvbiAmJlxyXG5cdFx0XHRcdE1hdGguYWJzKGxlZnRbMV0gLSByaWdodFsxXSkgPD0gZXBzaWxvbiAmJlxyXG5cdFx0XHRcdE1hdGguYWJzKGxlZnRbMl0gLSByaWdodFsyXSkgPD0gZXBzaWxvbiAmJlxyXG5cdFx0XHRcdE1hdGguYWJzKGxlZnRbM10gLSByaWdodFszXSkgPD0gZXBzaWxvbilcclxuXHRcdCk7XHJcblx0fVxyXG5cclxuXHRwdWJsaWMgc3RhdGljIElERU5USVRZID0gT2JqZWN0LmZyZWV6ZShuZXcgTWF0cml4MigxLjAsIDAuMCwgMC4wLCAxLjApKTtcclxuXHJcblx0cHVibGljIHN0YXRpYyBaRVJPID0gT2JqZWN0LmZyZWV6ZShuZXcgTWF0cml4MigwLjAsIDAuMCwgMC4wLCAwLjApKTtcclxuXHJcblx0Y2xvbmUocmVzdWx0OiBNYXRyaXgyKTogTWF0cml4MiB7XHJcblx0XHRyZXR1cm4gTWF0cml4Mi5jbG9uZSh0aGlzLCByZXN1bHQpO1xyXG5cdH1cclxuXHJcblx0ZXF1YWxzKHJpZ2h0OiBNYXRyaXgyKTogYm9vbGVhbiB7XHJcblx0XHRyZXR1cm4gTWF0cml4Mi5lcXVhbHModGhpcywgcmlnaHQpO1xyXG5cdH1cclxuXHJcblx0ZXF1YWxzRXBzaWxvbihyaWdodDogTWF0cml4MiwgZXBzaWxvbiA9IDApOiBib29sZWFuIHtcclxuXHRcdHJldHVybiBNYXRyaXgyLmVxdWFsc0Vwc2lsb24odGhpcywgcmlnaHQsIGVwc2lsb24pO1xyXG5cdH1cclxuXHJcblx0dG9TdHJpbmcoKSB7XHJcblx0XHRyZXR1cm4gYCgke3RoaXNbMF19LCAke3RoaXNbMl19KVxcbmAgKyBgKCR7dGhpc1sxXX0sICR7dGhpc1szXX0pYDtcclxuXHR9XHJcbn1cclxuY29uc3Qgc2NhbGVTY3JhdGNoMSA9IG5ldyBWZWN0b3IyKCk7XHJcbmNvbnN0IHNjYWxlU2NyYXRjaDIgPSBuZXcgVmVjdG9yMigpO1xyXG5jb25zdCBzY2FsZVNjcmF0Y2gzID0gbmV3IFZlY3RvcjIoKTtcclxuY29uc3Qgc2NhbGVTY3JhdGNoNCA9IG5ldyBWZWN0b3IyKCk7XHJcbmNvbnN0IHNjcmF0Y2hDb2x1bW4gPSBuZXcgVmVjdG9yMigpO1xyXG5jb25zdCBzY2FsZVNjcmF0Y2g1ID0gbmV3IFZlY3RvcjIoKTtcclxuZXhwb3J0IGRlZmF1bHQgTWF0cml4MjtcclxuIiwiaW1wb3J0IHsgU2hhZGVyU3RhZ2UgfSBmcm9tIFwiLi4vY29yZS9XZWJHUFVDb25zdGFudFwiO1xyXG5pbXBvcnQgeyBVbmlmb3JtRnVuYywgVW5pZm9ybUVudW0sIFVuaWZvcm1TdHJ1Y3QgfSBmcm9tIFwiLi4vY29yZS9XZWJHUFVUeXBlc1wiO1xyXG5pbXBvcnQgeyBEaXJlY3Rpb25hbExpZ2h0IH0gZnJvbSBcIi4uL2xpZ2h0L0RpcmVjdGlvbmFsTGlnaHRcIjtcclxuaW1wb3J0IHsgUG9pbnRMaWdodCB9IGZyb20gXCIuLi9saWdodC9Qb2ludExpZ2h0XCI7XHJcbmltcG9ydCB7IFNwb3RMaWdodCB9IGZyb20gXCIuLi9saWdodC9TcG90TGlnaHRcIjtcclxuaW1wb3J0IENvbG9yIGZyb20gXCIuLi9tYXRoL0NvbG9yXCI7XHJcbmltcG9ydCBNYXRyaXgyIGZyb20gXCIuLi9tYXRoL01hdHJpeDJcIjtcclxuaW1wb3J0IE1hdHJpeDMgZnJvbSBcIi4uL21hdGgvTWF0cml4M1wiO1xyXG5pbXBvcnQgTWF0cml4NCBmcm9tIFwiLi4vbWF0aC9NYXRyaXg0XCI7XHJcbmltcG9ydCBWZWN0b3IyIGZyb20gXCIuLi9tYXRoL1ZlY3RvcjJcIjtcclxuaW1wb3J0IFZlY3RvcjMgZnJvbSBcIi4uL21hdGgvVmVjdG9yM1wiO1xyXG5pbXBvcnQgVmVjdG9yNCBmcm9tIFwiLi4vbWF0aC9WZWN0b3I0XCI7XHJcbmltcG9ydCBkZWZhdWx0VmFsdWUgZnJvbSBcIi4uL3V0aWxzL2RlZmF1bHRWYWx1ZVwiO1xyXG5pbXBvcnQgU2FtcGxlciBmcm9tIFwiLi9TYW1wbGVyXCI7XHJcbmltcG9ydCBUZXh0dXJlIGZyb20gXCIuL1RleHR1cmVcIjtcclxuaW1wb3J0IFVuaWZvcm1CdWZmZXIgZnJvbSBcIi4vVW5pZm9ybUJ1ZmZlclwiO1xyXG5leHBvcnQgY2xhc3MgVW5pZm9ybTxUPiB7XHJcblx0X3ZhbHVlOiBUO1xyXG5cdG5hbWU6IHN0cmluZztcclxuXHR2YWx1ZTogVDtcclxuXHRvZmZzZXQ6IG51bWJlcjtcclxuXHRidWZmZXI6IEZsb2F0MzJBcnJheSB8IFVpbnQxNkFycmF5IHwgVWludDMyQXJyYXkgfCBVaW50OEFycmF5IHwgRmxvYXQ2NEFycmF5O1xyXG5cdGNiOiBVbmlmb3JtRnVuYyB8IG51bWJlciB8IG9iamVjdDtcclxuXHRieXRlU2l6ZTogbnVtYmVyO1xyXG5cdHR5cGU/OiBzdHJpbmc7XHJcblx0ZGlydHk/OiBib29sZWFuO1xyXG5cclxuXHRjb25zdHJ1Y3Rvcih1bmlmb3JtTmFtZTogc3RyaW5nLCBjYj86IFVuaWZvcm1GdW5jIHwgbnVtYmVyIHwgb2JqZWN0LCBvZmZzZXQ/OiBudW1iZXIpIHtcclxuXHRcdHRoaXMubmFtZSA9IHVuaWZvcm1OYW1lO1xyXG5cdFx0dGhpcy5jYiA9IGNiO1xyXG5cdFx0dGhpcy5vZmZzZXQgPSBkZWZhdWx0VmFsdWUob2Zmc2V0LCAwKTtcclxuXHRcdHRoaXMudHlwZSA9IFwibnVtYmVyXCI7XHJcblx0fVxyXG5cdHNldEJ1ZmZlcihhcnJheTogQXJyYXk8bnVtYmVyPiwgb2Zmc2V0ID0gMCkge1xyXG5cdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCBhcnJheS5sZW5ndGg7IGkrKykge1xyXG5cdFx0XHR0aGlzLmJ1ZmZlcltpICsgb2Zmc2V0XSA9IGFycmF5W2ldO1xyXG5cdFx0fVxyXG5cdH1cclxuXHRzZXQoKSB7XHJcblx0XHRyZXR1cm4gdW5kZWZpbmVkO1xyXG5cdH1cclxuXHRnZXRWYWx1ZSgpIHtcclxuXHRcdGxldCByZXN1bHQ7XHJcblx0XHRjb25zdCBjYlR5cGUgPSB0eXBlb2YgdGhpcy5jYjtcclxuXHRcdHN3aXRjaCAoY2JUeXBlKSB7XHJcblx0XHRcdGNhc2UgXCJvYmplY3RcIjpcclxuXHRcdFx0XHRyZXN1bHQgPSB0aGlzLmNiW3RoaXMubmFtZV0gfHwgdGhpcy5jYjtcclxuXHRcdFx0XHRicmVhaztcclxuXHRcdFx0Y2FzZSBcImZ1bmN0aW9uXCI6XHJcblx0XHRcdFx0Ly8gQHRzLWlnbm9yZVxyXG5cdFx0XHRcdHJlc3VsdCA9IHRoaXMuY2IoKTtcclxuXHRcdFx0XHRicmVhaztcclxuXHRcdFx0Y2FzZSBcIm51bWJlclwiOlxyXG5cdFx0XHRcdHJlc3VsdCA9IHRoaXMuY2I7XHJcblx0XHRcdFx0YnJlYWs7XHJcblx0XHRcdGRlZmF1bHQ6XHJcblx0XHRcdFx0dGhyb3cgbmV3IEVycm9yKFwidHlwZSBpcyBlcnJvclwiKTtcclxuXHRcdH1cclxuXHRcdHJldHVybiByZXN1bHQ7XHJcblx0fVxyXG5cdC8vIGNvbXBhcmUgYXJyYXlcclxuXHRlcXVhbHModikge1xyXG5cdFx0aWYgKCh0aGlzLl92YWx1ZSBhcyBBcnJheTxudW1iZXI+KS5sZW5ndGggIT09IHYubGVuZ3RoKSByZXR1cm4gZmFsc2U7XHJcblx0XHRmb3IgKGxldCBpID0gMDsgaSA8IHYubGVuZ3RoOyBpKyspIHtcclxuXHRcdFx0aWYgKHZbaV0gIT09IHRoaXMuX3ZhbHVlW2ldKSB7XHJcblx0XHRcdFx0cmV0dXJuIGZhbHNlO1xyXG5cdFx0XHR9XHJcblx0XHR9XHJcblx0XHRyZXR1cm4gdHJ1ZTtcclxuXHR9XHJcbn1cclxuXHJcbmV4cG9ydCBjbGFzcyBVbmlmb3JtVWludCBleHRlbmRzIFVuaWZvcm08bnVtYmVyPiB7XHJcblx0c3RhdGljIGFsaWduID0gNDtcclxuXHRjb25zdHJ1Y3RvcihcclxuXHRcdHVuaWZvcm1OYW1lOiBzdHJpbmcsXHJcblx0XHRidWZmZXI6IEZsb2F0MzJBcnJheSxcclxuXHRcdGJ5dGVPZmZzZXQ6IG51bWJlcixcclxuXHRcdGNiOiBVbmlmb3JtRnVuYyB8IG51bWJlciB8IG9iamVjdCxcclxuXHRcdG9mZnNldD86IG51bWJlclxyXG5cdCkge1xyXG5cdFx0c3VwZXIodW5pZm9ybU5hbWUsIGNiLCBvZmZzZXQpO1xyXG5cdFx0dGhpcy52YWx1ZSA9IHVuZGVmaW5lZDtcclxuXHRcdHRoaXMuX3ZhbHVlID0gMDtcclxuXHRcdHRoaXMuYnl0ZVNpemUgPSA0O1xyXG5cdFx0dGhpcy5idWZmZXIgPSBuZXcgVWludDMyQXJyYXkoYnVmZmVyLmJ1ZmZlciwgYnl0ZU9mZnNldCwgMSk7XHJcblx0XHR0aGlzLnR5cGUgPSBcInVpbnRcIjtcclxuXHR9XHJcblx0c2V0KCkge1xyXG5cdFx0aWYgKHRoaXMuY2IgIT0gdW5kZWZpbmVkKSB0aGlzLnZhbHVlID0gdGhpcy5nZXRWYWx1ZSgpO1xyXG5cdFx0aWYgKHRoaXMudmFsdWUgIT09IHRoaXMuX3ZhbHVlKSB7XHJcblx0XHRcdHRoaXMuX3ZhbHVlID0gdGhpcy52YWx1ZTtcclxuXHRcdFx0dGhpcy5idWZmZXJbMF0gPSB0aGlzLnZhbHVlO1xyXG5cdFx0XHRyZXR1cm4gdHJ1ZTtcclxuXHRcdH1cclxuXHRcdHJldHVybiBmYWxzZTtcclxuXHR9XHJcbn1cclxuXHJcbmV4cG9ydCBjbGFzcyBVbmlmb3JtRmxvYXQgZXh0ZW5kcyBVbmlmb3JtPG51bWJlcj4ge1xyXG5cdHN0YXRpYyBhbGlnbiA9IDQ7XHJcblx0Y29uc3RydWN0b3IoXHJcblx0XHR1bmlmb3JtTmFtZTogc3RyaW5nLFxyXG5cdFx0YnVmZmVyOiBGbG9hdDMyQXJyYXksXHJcblx0XHRieXRlT2Zmc2V0OiBudW1iZXIsXHJcblx0XHRjYjogVW5pZm9ybUZ1bmMgfCBudW1iZXIgfCBvYmplY3QsXHJcblx0XHRvZmZzZXQ/OiBudW1iZXJcclxuXHQpIHtcclxuXHRcdHN1cGVyKHVuaWZvcm1OYW1lLCBjYiwgb2Zmc2V0KTtcclxuXHRcdHRoaXMudmFsdWUgPSB1bmRlZmluZWQ7XHJcblx0XHR0aGlzLl92YWx1ZSA9IDA7XHJcblx0XHR0aGlzLmJ5dGVTaXplID0gNDtcclxuXHRcdHRoaXMuYnVmZmVyID0gbmV3IEZsb2F0MzJBcnJheShidWZmZXIuYnVmZmVyLCBieXRlT2Zmc2V0LCAxKTtcclxuXHRcdHRoaXMudHlwZSA9IFwidmVjMVwiO1xyXG5cdH1cclxuXHRzZXQoKSB7XHJcblx0XHRpZiAodGhpcy5jYiAhPSB1bmRlZmluZWQpIHRoaXMudmFsdWUgPSB0aGlzLmdldFZhbHVlKCk7XHJcblx0XHRpZiAodGhpcy52YWx1ZSAhPT0gdGhpcy5fdmFsdWUpIHtcclxuXHRcdFx0dGhpcy5fdmFsdWUgPSB0aGlzLnZhbHVlO1xyXG5cdFx0XHR0aGlzLmJ1ZmZlclswXSA9IHRoaXMudmFsdWU7XHJcblx0XHRcdHJldHVybiB0cnVlO1xyXG5cdFx0fVxyXG5cdFx0cmV0dXJuIGZhbHNlO1xyXG5cdH1cclxufVxyXG5leHBvcnQgY2xhc3MgVW5pZm9ybUZsb2F0VmVjMiBleHRlbmRzIFVuaWZvcm08VmVjdG9yMj4ge1xyXG5cdHN0YXRpYyBhbGlnbiA9IDg7XHJcblx0Y29uc3RydWN0b3IoXHJcblx0XHR1bmlmb3JtTmFtZTogc3RyaW5nLFxyXG5cdFx0YnVmZmVyOiBGbG9hdDMyQXJyYXksXHJcblx0XHRieXRlT2Zmc2V0OiBudW1iZXIsXHJcblx0XHRjYjogVW5pZm9ybUZ1bmMgfCBudW1iZXIgfCBvYmplY3QsXHJcblx0XHRvZmZzZXQ/OiBudW1iZXJcclxuXHQpIHtcclxuXHRcdHN1cGVyKHVuaWZvcm1OYW1lLCBjYiwgb2Zmc2V0KTtcclxuXHRcdHRoaXMudmFsdWUgPSB1bmRlZmluZWQ7XHJcblx0XHR0aGlzLl92YWx1ZSA9IG5ldyBWZWN0b3IyKCk7XHJcblx0XHR0aGlzLmJ1ZmZlciA9IG5ldyBGbG9hdDMyQXJyYXkoYnVmZmVyLmJ1ZmZlciwgYnl0ZU9mZnNldCwgMik7XHJcblx0XHR0aGlzLmJ5dGVTaXplID0gODtcclxuXHRcdHRoaXMudHlwZSA9IFwidmVjMlwiO1xyXG5cdH1cclxuXHRzZXQoKTogYm9vbGVhbiB7XHJcblx0XHRpZiAodGhpcy5jYiAhPSB1bmRlZmluZWQpIHRoaXMudmFsdWUgPSB0aGlzLmdldFZhbHVlKCk7XHJcblx0XHRjb25zdCB2ID0gdGhpcy52YWx1ZTtcclxuXHRcdGlmICh2IGluc3RhbmNlb2YgVmVjdG9yMikge1xyXG5cdFx0XHRpZiAoVmVjdG9yMi5lcXVhbHModiwgdGhpcy5fdmFsdWUpKSByZXR1cm4gZmFsc2U7XHJcblx0XHRcdFZlY3RvcjIuY2xvbmUodiwgdGhpcy5fdmFsdWUpO1xyXG5cdFx0XHR0aGlzLnNldEJ1ZmZlcih0aGlzLl92YWx1ZS50b0FycmF5KCkpO1xyXG5cdFx0XHRyZXR1cm4gdHJ1ZTtcclxuXHRcdH0gZWxzZSB7XHJcblx0XHRcdGlmICh0aGlzLmVxdWFscyh2KSkgcmV0dXJuIGZhbHNlO1xyXG5cdFx0XHR0aGlzLl92YWx1ZSA9IHY7XHJcblx0XHRcdHRoaXMuc2V0QnVmZmVyKHYpO1xyXG5cdFx0XHRyZXR1cm4gdHJ1ZTtcclxuXHRcdH1cclxuXHR9XHJcbn1cclxuZXhwb3J0IGNsYXNzIFVuaWZvcm1GbG9hdFZlYzMgZXh0ZW5kcyBVbmlmb3JtPFZlY3RvcjM+IHtcclxuXHRzdGF0aWMgYWxpZ24gPSAxNjtcclxuXHRjb25zdHJ1Y3RvcihcclxuXHRcdHVuaWZvcm1OYW1lOiBzdHJpbmcsXHJcblx0XHRidWZmZXI6IEZsb2F0MzJBcnJheSxcclxuXHRcdGJ5dGVPZmZzZXQ6IG51bWJlcixcclxuXHRcdGNiOiBVbmlmb3JtRnVuYyB8IG51bWJlciB8IG9iamVjdCxcclxuXHRcdG9mZnNldD86IG51bWJlclxyXG5cdCkge1xyXG5cdFx0c3VwZXIodW5pZm9ybU5hbWUsIGNiLCBvZmZzZXQpO1xyXG5cdFx0dGhpcy52YWx1ZSA9IHVuZGVmaW5lZDtcclxuXHRcdHRoaXMuX3ZhbHVlID0gbmV3IFZlY3RvcjMoKTtcclxuXHRcdHRoaXMuYnVmZmVyID0gbmV3IEZsb2F0MzJBcnJheShidWZmZXIuYnVmZmVyLCBieXRlT2Zmc2V0LCAzKTtcclxuXHRcdHRoaXMuYnl0ZVNpemUgPSAxMjtcclxuXHRcdHRoaXMudHlwZSA9IFwidmVjM1wiO1xyXG5cdH1cclxuXHRzZXQoKTogYm9vbGVhbiB7XHJcblx0XHRpZiAodGhpcy5jYiAhPSB1bmRlZmluZWQpIHRoaXMudmFsdWUgPSB0aGlzLmdldFZhbHVlKCk7XHJcblx0XHRjb25zdCB2ID0gdGhpcy52YWx1ZTtcclxuXHRcdGlmICh2IGluc3RhbmNlb2YgVmVjdG9yMykge1xyXG5cdFx0XHRpZiAoVmVjdG9yMy5lcXVhbHModiwgdGhpcy5fdmFsdWUpKSByZXR1cm4gZmFsc2U7XHJcblx0XHRcdFZlY3RvcjMuY2xvbmUodiwgdGhpcy5fdmFsdWUpO1xyXG5cdFx0XHR0aGlzLnNldEJ1ZmZlcih0aGlzLl92YWx1ZS50b0FycmF5KCkpO1xyXG5cdFx0XHRyZXR1cm4gdHJ1ZTtcclxuXHRcdH0gZWxzZSB7XHJcblx0XHRcdGlmICh0aGlzLmVxdWFscyh2KSkgcmV0dXJuIGZhbHNlO1xyXG5cdFx0XHR0aGlzLl92YWx1ZSA9IHY7XHJcblx0XHRcdHRoaXMuc2V0QnVmZmVyKHYpO1xyXG5cdFx0XHRyZXR1cm4gdHJ1ZTtcclxuXHRcdH1cclxuXHR9XHJcbn1cclxuZXhwb3J0IGNsYXNzIFVuaWZvcm1GbG9hdFZlYzQgZXh0ZW5kcyBVbmlmb3JtPFZlY3RvcjQ+IHtcclxuXHRzdGF0aWMgYWxpZ24gPSAxNjtcclxuXHRjb25zdHJ1Y3RvcihcclxuXHRcdHVuaWZvcm1OYW1lOiBzdHJpbmcsXHJcblx0XHRidWZmZXI6IEZsb2F0MzJBcnJheSxcclxuXHRcdGJ5dGVPZmZzZXQ6IG51bWJlcixcclxuXHRcdGNiOiBVbmlmb3JtRnVuYyB8IG51bWJlciB8IG9iamVjdCxcclxuXHRcdG9mZnNldD86IG51bWJlclxyXG5cdCkge1xyXG5cdFx0c3VwZXIodW5pZm9ybU5hbWUsIGNiLCBvZmZzZXQpO1xyXG5cdFx0dGhpcy52YWx1ZSA9IHVuZGVmaW5lZDtcclxuXHRcdHRoaXMuX3ZhbHVlID0gbmV3IFZlY3RvcjQoKTtcclxuXHRcdHRoaXMuYnVmZmVyID0gbmV3IEZsb2F0MzJBcnJheShidWZmZXIuYnVmZmVyLCBieXRlT2Zmc2V0LCA0KTtcclxuXHRcdHRoaXMuYnl0ZVNpemUgPSAxNjtcclxuXHRcdHRoaXMudHlwZSA9IFwidmVjNFwiO1xyXG5cdH1cclxuXHRzZXQoKTogYm9vbGVhbiB7XHJcblx0XHRpZiAodGhpcy5jYiAhPSB1bmRlZmluZWQpIHRoaXMudmFsdWUgPSB0aGlzLmdldFZhbHVlKCk7XHJcblx0XHRjb25zdCB2ID0gdGhpcy52YWx1ZTtcclxuXHRcdGlmICh2IGluc3RhbmNlb2YgVmVjdG9yNCkge1xyXG5cdFx0XHRpZiAoVmVjdG9yNC5lcXVhbHModiwgdGhpcy5fdmFsdWUpKSByZXR1cm4gZmFsc2U7XHJcblx0XHRcdFZlY3RvcjQuY2xvbmUodiwgdGhpcy5fdmFsdWUpO1xyXG5cdFx0XHR0aGlzLnNldEJ1ZmZlcih0aGlzLl92YWx1ZS50b0FycmF5KCkpO1xyXG5cdFx0XHRyZXR1cm4gdHJ1ZTtcclxuXHRcdH0gZWxzZSB7XHJcblx0XHRcdGlmICh0aGlzLmVxdWFscyh2KSkgcmV0dXJuIGZhbHNlO1xyXG5cdFx0XHR0aGlzLl92YWx1ZSA9IHY7XHJcblx0XHRcdHRoaXMuc2V0QnVmZmVyKHYpO1xyXG5cdFx0XHRyZXR1cm4gdHJ1ZTtcclxuXHRcdH1cclxuXHR9XHJcbn1cclxuZXhwb3J0IGNsYXNzIFVuaWZvcm1Db2xvciBleHRlbmRzIFVuaWZvcm08Q29sb3I+IHtcclxuXHRzdGF0aWMgYWxpZ24gPSAxNjtcclxuXHRjb25zdHJ1Y3RvcihcclxuXHRcdHVuaWZvcm1OYW1lOiBzdHJpbmcsXHJcblx0XHRidWZmZXI6IEZsb2F0MzJBcnJheSxcclxuXHRcdGJ5dGVPZmZzZXQ6IG51bWJlcixcclxuXHRcdGNiOiBVbmlmb3JtRnVuYyB8IG51bWJlciB8IG9iamVjdCxcclxuXHRcdG9mZnNldD86IG51bWJlclxyXG5cdCkge1xyXG5cdFx0c3VwZXIodW5pZm9ybU5hbWUsIGNiLCBvZmZzZXQpO1xyXG5cdFx0dGhpcy52YWx1ZSA9IHVuZGVmaW5lZDtcclxuXHRcdHRoaXMuX3ZhbHVlID0gbmV3IENvbG9yKCk7XHJcblx0XHR0aGlzLmJ1ZmZlciA9IG5ldyBGbG9hdDMyQXJyYXkoYnVmZmVyLmJ1ZmZlciwgYnl0ZU9mZnNldCwgMyk7XHJcblx0XHR0aGlzLmJ5dGVTaXplID0gMTI7XHJcblx0XHR0aGlzLnR5cGUgPSBcInZlYzNcIjtcclxuXHR9XHJcblx0c2V0KCk6IGJvb2xlYW4ge1xyXG5cdFx0aWYgKHRoaXMuY2IgIT0gdW5kZWZpbmVkKSB0aGlzLnZhbHVlID0gdGhpcy5nZXRWYWx1ZSgpO1xyXG5cdFx0Y29uc3QgdiA9IHRoaXMudmFsdWU7XHJcblx0XHRpZiAodiBpbnN0YW5jZW9mIENvbG9yKSB7XHJcblx0XHRcdGlmIChDb2xvci5lcXVhbHModiwgdGhpcy5fdmFsdWUpKSByZXR1cm4gZmFsc2U7XHJcblx0XHRcdENvbG9yLmNsb25lKHYsIHRoaXMuX3ZhbHVlKTtcclxuXHRcdFx0dGhpcy5zZXRCdWZmZXIodGhpcy5fdmFsdWUudG9BcnJheSgpKTtcclxuXHRcdFx0cmV0dXJuIHRydWU7XHJcblx0XHR9IGVsc2Uge1xyXG5cdFx0XHRpZiAodGhpcy5lcXVhbHModikpIHJldHVybiBmYWxzZTtcclxuXHRcdFx0dGhpcy5fdmFsdWUgPSB2O1xyXG5cdFx0XHR0aGlzLnNldEJ1ZmZlcih2KTtcclxuXHRcdFx0cmV0dXJuIHRydWU7XHJcblx0XHR9XHJcblx0fVxyXG59XHJcblxyXG5leHBvcnQgY2xhc3MgVW5pZm9ybU1hdDIgZXh0ZW5kcyBVbmlmb3JtPE1hdHJpeDI+IHtcclxuXHRzdGF0aWMgYWxpZ24gPSA4O1xyXG5cdGNvbnN0cnVjdG9yKFxyXG5cdFx0dW5pZm9ybU5hbWU6IHN0cmluZyxcclxuXHRcdGJ1ZmZlcjogRmxvYXQzMkFycmF5LFxyXG5cdFx0Ynl0ZU9mZnNldDogbnVtYmVyLFxyXG5cdFx0Y2I6IFVuaWZvcm1GdW5jIHwgbnVtYmVyIHwgb2JqZWN0LFxyXG5cdFx0b2Zmc2V0PzogbnVtYmVyXHJcblx0KSB7XHJcblx0XHRzdXBlcih1bmlmb3JtTmFtZSwgY2IsIG9mZnNldCk7XHJcblx0XHR0aGlzLnZhbHVlID0gdW5kZWZpbmVkO1xyXG5cdFx0dGhpcy5fdmFsdWUgPSBuZXcgTWF0cml4MigpO1xyXG5cdFx0dGhpcy5idWZmZXIgPSBuZXcgRmxvYXQzMkFycmF5KGJ1ZmZlci5idWZmZXIsIGJ5dGVPZmZzZXQsIDQpO1xyXG5cdFx0dGhpcy5ieXRlU2l6ZSA9IDE2O1xyXG5cdFx0dGhpcy50eXBlID0gXCJtYXQyXCI7XHJcblx0fVxyXG5cdHNldCgpOiBib29sZWFuIHtcclxuXHRcdGlmICh0aGlzLmNiICE9IHVuZGVmaW5lZCkgdGhpcy52YWx1ZSA9IHRoaXMuZ2V0VmFsdWUoKTtcclxuXHRcdGNvbnN0IHYgPSB0aGlzLnZhbHVlO1xyXG5cdFx0aWYgKHYgaW5zdGFuY2VvZiBNYXRyaXgyKSB7XHJcblx0XHRcdGlmIChNYXRyaXgyLmVxdWFscyh2LCB0aGlzLl92YWx1ZSkpIHJldHVybiBmYWxzZTtcclxuXHRcdFx0TWF0cml4Mi5jbG9uZSh2LCB0aGlzLl92YWx1ZSk7XHJcblx0XHRcdHRoaXMuc2V0QnVmZmVyKHRoaXMuX3ZhbHVlLnRvQXJyYXkoKSk7XHJcblx0XHRcdHJldHVybiB0cnVlO1xyXG5cdFx0fSBlbHNlIHtcclxuXHRcdFx0aWYgKHRoaXMuZXF1YWxzKHYpKSByZXR1cm4gZmFsc2U7XHJcblx0XHRcdHRoaXMuX3ZhbHVlID0gdjtcclxuXHRcdFx0dGhpcy5zZXRCdWZmZXIodik7XHJcblx0XHRcdHJldHVybiB0cnVlO1xyXG5cdFx0fVxyXG5cdH1cclxufVxyXG5leHBvcnQgY2xhc3MgVW5pZm9ybU1hdDMgZXh0ZW5kcyBVbmlmb3JtPE1hdHJpeDM+IHtcclxuXHRzdGF0aWMgYWxpZ24gPSAxNjtcclxuXHRjb25zdHJ1Y3RvcihcclxuXHRcdHVuaWZvcm1OYW1lOiBzdHJpbmcsXHJcblx0XHRidWZmZXI6IEZsb2F0MzJBcnJheSxcclxuXHRcdGJ5dGVPZmZzZXQ6IG51bWJlcixcclxuXHRcdGNiOiBVbmlmb3JtRnVuYyB8IG51bWJlciB8IG9iamVjdCxcclxuXHRcdG9mZnNldD86IG51bWJlclxyXG5cdCkge1xyXG5cdFx0c3VwZXIodW5pZm9ybU5hbWUsIGNiLCBvZmZzZXQpO1xyXG5cdFx0dGhpcy52YWx1ZSA9IHVuZGVmaW5lZDtcclxuXHRcdHRoaXMuX3ZhbHVlID0gbmV3IE1hdHJpeDMoKTtcclxuXHRcdHRoaXMuYnVmZmVyID0gbmV3IEZsb2F0MzJBcnJheShidWZmZXIuYnVmZmVyLCBieXRlT2Zmc2V0LCA5KTtcclxuXHRcdHRoaXMuYnl0ZVNpemUgPSA0ODtcclxuXHRcdHRoaXMudHlwZSA9IFwibWF0M1wiO1xyXG5cdH1cclxuXHRzZXQoKTogYm9vbGVhbiB7XHJcblx0XHRpZiAodGhpcy5jYiAhPSB1bmRlZmluZWQpIHRoaXMudmFsdWUgPSB0aGlzLmdldFZhbHVlKCk7XHJcblx0XHRjb25zdCB2ID0gdGhpcy52YWx1ZTtcclxuXHRcdGlmICh2IGluc3RhbmNlb2YgTWF0cml4Mykge1xyXG5cdFx0XHRpZiAoTWF0cml4My5lcXVhbHModiwgdGhpcy5fdmFsdWUpKSByZXR1cm4gZmFsc2U7XHJcblx0XHRcdE1hdHJpeDMuY2xvbmUodiwgdGhpcy5fdmFsdWUpO1xyXG5cdFx0XHR0aGlzLnNldEJ1ZmZlcih0aGlzLl92YWx1ZS50b0FycmF5KCkpO1xyXG5cdFx0XHRyZXR1cm4gdHJ1ZTtcclxuXHRcdH0gZWxzZSB7XHJcblx0XHRcdGlmICh0aGlzLmVxdWFscyh2KSkgcmV0dXJuIGZhbHNlO1xyXG5cdFx0XHR0aGlzLl92YWx1ZSA9IHY7XHJcblx0XHRcdHRoaXMuc2V0QnVmZmVyKHYpO1xyXG5cdFx0XHRyZXR1cm4gdHJ1ZTtcclxuXHRcdH1cclxuXHR9XHJcbn1cclxuZXhwb3J0IGNsYXNzIFVuaWZvcm1NYXQ0IGV4dGVuZHMgVW5pZm9ybTxNYXRyaXg0PiB7XHJcblx0c3RhdGljIGFsaWduID0gMTY7XHJcblx0Y29uc3RydWN0b3IoXHJcblx0XHR1bmlmb3JtTmFtZTogc3RyaW5nLFxyXG5cdFx0YnVmZmVyOiBGbG9hdDMyQXJyYXksXHJcblx0XHRieXRlT2Zmc2V0OiBudW1iZXIsXHJcblx0XHRjYjogVW5pZm9ybUZ1bmMgfCBudW1iZXIgfCBvYmplY3QsXHJcblx0XHRvZmZzZXQ/OiBudW1iZXJcclxuXHQpIHtcclxuXHRcdHN1cGVyKHVuaWZvcm1OYW1lLCBjYiwgb2Zmc2V0KTtcclxuXHRcdHRoaXMudmFsdWUgPSB1bmRlZmluZWQ7XHJcblx0XHR0aGlzLl92YWx1ZSA9IG5ldyBNYXRyaXg0KCk7XHJcblx0XHR0aGlzLmJ1ZmZlciA9IG5ldyBGbG9hdDMyQXJyYXkoYnVmZmVyLmJ1ZmZlciwgYnl0ZU9mZnNldCwgMTYpO1xyXG5cdFx0dGhpcy5ieXRlU2l6ZSA9IDY0O1xyXG5cdFx0dGhpcy50eXBlID0gXCJtYXQ0XCI7XHJcblx0fVxyXG5cdHNldCgpOiBib29sZWFuIHtcclxuXHRcdGlmICh0aGlzLmNiICE9IHVuZGVmaW5lZCkgdGhpcy52YWx1ZSA9IHRoaXMuZ2V0VmFsdWUoKTtcclxuXHRcdGNvbnN0IHYgPSB0aGlzLnZhbHVlO1xyXG5cdFx0aWYgKHYgaW5zdGFuY2VvZiBNYXRyaXg0KSB7XHJcblx0XHRcdGlmIChNYXRyaXg0LmVxdWFscyh2LCB0aGlzLl92YWx1ZSkpIHJldHVybiBmYWxzZTtcclxuXHRcdFx0TWF0cml4NC5jbG9uZSh2LCB0aGlzLl92YWx1ZSk7XHJcblx0XHRcdHRoaXMuc2V0QnVmZmVyKHRoaXMuX3ZhbHVlLnRvQXJyYXkoKSk7XHJcblx0XHRcdHJldHVybiB0cnVlO1xyXG5cdFx0fSBlbHNlIHtcclxuXHRcdFx0Ly8gaWYodGhpcy5lcXVhbHModikpIHJldHVybiBmYWxzZTtcclxuXHRcdFx0dGhpcy5fdmFsdWUgPSB2O1xyXG5cdFx0XHR0aGlzLnNldEJ1ZmZlcih2KTtcclxuXHRcdFx0cmV0dXJuIHRydWU7XHJcblx0XHR9XHJcblx0fVxyXG59XHJcbmV4cG9ydCBjbGFzcyBVbmlmb3JtTWF0cml4NEFycmF5IGV4dGVuZHMgVW5pZm9ybTxBcnJheTxNYXRyaXg0Pj4ge1xyXG5cdHN0YXRpYyBhbGlnbiA9IDE2O1xyXG5cdGNvbnN0cnVjdG9yKFxyXG5cdFx0dW5pZm9ybU5hbWU6IHN0cmluZyxcclxuXHRcdGJ1ZmZlcjogRmxvYXQzMkFycmF5LFxyXG5cdFx0Ynl0ZU9mZnNldDogbnVtYmVyLFxyXG5cdFx0Y2I6IFVuaWZvcm1GdW5jIHwgbnVtYmVyIHwgb2JqZWN0LFxyXG5cdFx0Y291bnQ/OiBudW1iZXJcclxuXHQpIHtcclxuXHRcdHN1cGVyKHVuaWZvcm1OYW1lLCBjYiwgMCk7XHJcblx0XHR0aGlzLmJ5dGVTaXplID0gY291bnQgKiA2NDtcclxuXHRcdHRoaXMuYnVmZmVyID0gbmV3IEZsb2F0MzJBcnJheShidWZmZXIuYnVmZmVyLCBieXRlT2Zmc2V0LCB0aGlzLmJ5dGVTaXplIC8gNCk7XHJcblx0XHR0aGlzLnR5cGUgPSBcIm1hdDQtYXJyYXlcIjtcclxuXHR9XHJcblx0c2V0KCk6IGJvb2xlYW4ge1xyXG5cdFx0dGhpcy52YWx1ZSA9IHRoaXMuZ2V0VmFsdWUoKTtcclxuXHRcdGlmICghdGhpcy52YWx1ZSkgcmV0dXJuIGZhbHNlO1xyXG5cdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLnZhbHVlLmxlbmd0aDsgaSsrKSB7XHJcblx0XHRcdHRoaXMuc2V0QnVmZmVyKHRoaXMudmFsdWVbaV0udG9BcnJheSgpLCBpICogMTYpO1xyXG5cdFx0fVxyXG5cdFx0cmV0dXJuIHRydWU7XHJcblx0fVxyXG59XHJcbmV4cG9ydCBjbGFzcyBVbmlmb3JtRmxvYXRBcnJheSBleHRlbmRzIFVuaWZvcm08QXJyYXk8bnVtYmVyPj4ge1xyXG5cdHN0YXRpYyBhbGlnbiA9IDQ7XHJcblx0Ly8gY2I6IEZ1bmN0aW9uO1xyXG5cdGNvbnN0cnVjdG9yKFxyXG5cdFx0dW5pZm9ybU5hbWU6IHN0cmluZyxcclxuXHRcdGJ1ZmZlcjogRmxvYXQzMkFycmF5LFxyXG5cdFx0Ynl0ZU9mZnNldDogbnVtYmVyLFxyXG5cdFx0Y2I6IFVuaWZvcm1GdW5jIHwgbnVtYmVyIHwgb2JqZWN0LFxyXG5cdFx0Y291bnQ/OiBudW1iZXJcclxuXHQpIHtcclxuXHRcdHN1cGVyKHVuaWZvcm1OYW1lLCBjYiwgMCk7XHJcblx0XHR0aGlzLmJ1ZmZlciA9IG5ldyBGbG9hdDMyQXJyYXkoYnVmZmVyLmJ1ZmZlciwgYnl0ZU9mZnNldCwgY291bnQpO1xyXG5cdFx0dGhpcy5ieXRlU2l6ZSA9IDQgKiBjb3VudDtcclxuXHRcdHRoaXMudHlwZSA9IFwiZmxvYXQtYXJyYXlcIjtcclxuXHR9XHJcblx0c2V0KCk6IGJvb2xlYW4ge1xyXG5cdFx0dGhpcy52YWx1ZSA9IHRoaXMuZ2V0VmFsdWUoKTtcclxuXHRcdGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy52YWx1ZS5sZW5ndGg7IGkrKykge1xyXG5cdFx0XHR0aGlzLmJ1ZmZlcltpXSA9IHRoaXMudmFsdWVbaV07XHJcblx0XHR9XHJcblx0XHRyZXR1cm4gdHJ1ZTtcclxuXHR9XHJcbn1cclxuZXhwb3J0IGNsYXNzIFVuaWZvcm1WZWMyQXJyYXkgZXh0ZW5kcyBVbmlmb3JtPEFycmF5PFZlY3RvcjI+PiB7XHJcblx0c3RhdGljIGFsaWduID0gODtcclxuXHRjb25zdHJ1Y3RvcihcclxuXHRcdHVuaWZvcm1OYW1lOiBzdHJpbmcsXHJcblx0XHRidWZmZXI6IEZsb2F0MzJBcnJheSxcclxuXHRcdGJ5dGVPZmZzZXQ6IG51bWJlcixcclxuXHRcdGNiOiBVbmlmb3JtRnVuYyB8IG51bWJlciB8IG9iamVjdCxcclxuXHRcdGNvdW50PzogbnVtYmVyXHJcblx0KSB7XHJcblx0XHRzdXBlcih1bmlmb3JtTmFtZSwgY2IsIDApO1xyXG5cdFx0dGhpcy5ieXRlU2l6ZSA9IGNvdW50ICogODtcclxuXHRcdHRoaXMuYnVmZmVyID0gbmV3IEZsb2F0MzJBcnJheShidWZmZXIuYnVmZmVyLCBieXRlT2Zmc2V0LCB0aGlzLmJ5dGVTaXplIC8gNCk7XHJcblx0XHR0aGlzLnR5cGUgPSBcInZlYzItYXJyYXlcIjtcclxuXHR9XHJcblx0c2V0KCk6IGJvb2xlYW4ge1xyXG5cdFx0Ly8gdGhpcy52YWx1ZSA9IHRoaXMuY2IoKTtcclxuXHRcdHRoaXMudmFsdWUgPSB0aGlzLmdldFZhbHVlKCk7XHJcblx0XHRsZXQgaiA9IDA7XHJcblx0XHRmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMudmFsdWUubGVuZ3RoOyBpKyspIHtcclxuXHRcdFx0dGhpcy5idWZmZXJbal0gPSB0aGlzLnZhbHVlW2ldLng7XHJcblx0XHRcdHRoaXMuYnVmZmVyW2ogKyAxXSA9IHRoaXMudmFsdWVbaV0ueTtcclxuXHRcdFx0aiArPSAyO1xyXG5cdFx0fVxyXG5cdFx0cmV0dXJuIHRydWU7XHJcblx0fVxyXG59XHJcbmV4cG9ydCBjbGFzcyBVbmlmb3JtVmVjM0FycmF5IGV4dGVuZHMgVW5pZm9ybTxBcnJheTxWZWN0b3IzPj4ge1xyXG5cdHN0YXRpYyBhbGlnbiA9IDE2O1xyXG5cdC8vIGNiOiBGdW5jdGlvbjtcclxuXHRjb25zdHJ1Y3RvcihcclxuXHRcdHVuaWZvcm1OYW1lOiBzdHJpbmcsXHJcblx0XHRidWZmZXI6IEZsb2F0MzJBcnJheSxcclxuXHRcdGJ5dGVPZmZzZXQ6IG51bWJlcixcclxuXHRcdGNiOiBVbmlmb3JtRnVuYyB8IG51bWJlciB8IG9iamVjdCxcclxuXHRcdGNvdW50PzogbnVtYmVyXHJcblx0KSB7XHJcblx0XHRzdXBlcih1bmlmb3JtTmFtZSwgY2IsIDApO1xyXG5cdFx0dGhpcy5ieXRlU2l6ZSA9IGNvdW50ICogMTY7XHJcblx0XHR0aGlzLmJ1ZmZlciA9IG5ldyBGbG9hdDMyQXJyYXkoYnVmZmVyLmJ1ZmZlciwgYnl0ZU9mZnNldCwgdGhpcy5ieXRlU2l6ZSAvIDQpO1xyXG5cdFx0dGhpcy50eXBlID0gXCJ2ZWMzLWFycmF5XCI7XHJcblx0fVxyXG5cdHNldCgpOiBib29sZWFuIHtcclxuXHRcdC8vIHRoaXMudmFsdWUgPSB0aGlzLmNiKCk7XHJcblx0XHR0aGlzLnZhbHVlID0gdGhpcy5nZXRWYWx1ZSgpO1xyXG5cdFx0bGV0IGogPSAwO1xyXG5cdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLnZhbHVlLmxlbmd0aDsgaSsrKSB7XHJcblx0XHRcdHRoaXMuYnVmZmVyW2pdID0gdGhpcy52YWx1ZVtpXS54O1xyXG5cdFx0XHR0aGlzLmJ1ZmZlcltqICsgMV0gPSB0aGlzLnZhbHVlW2ldLnk7XHJcblx0XHRcdHRoaXMuYnVmZmVyW2ogKyAyXSA9IHRoaXMudmFsdWVbaV0uejtcclxuXHRcdFx0dGhpcy5idWZmZXJbaiArIDNdID0gMDtcclxuXHRcdFx0aiArPSA0O1xyXG5cdFx0fVxyXG5cdFx0cmV0dXJuIHRydWU7XHJcblx0fVxyXG59XHJcbmV4cG9ydCBjbGFzcyBVbmlmb3JtVmVjNEFycmF5IGV4dGVuZHMgVW5pZm9ybTxBcnJheTxWZWN0b3I0Pj4ge1xyXG5cdHN0YXRpYyBhbGlnbiA9IDE2O1xyXG5cdC8vIGNiOiBGdW5jdGlvbjtcclxuXHRjb25zdHJ1Y3RvcihcclxuXHRcdHVuaWZvcm1OYW1lOiBzdHJpbmcsXHJcblx0XHRidWZmZXI6IEZsb2F0MzJBcnJheSxcclxuXHRcdGJ5dGVPZmZzZXQ6IG51bWJlcixcclxuXHRcdGNiOiBVbmlmb3JtRnVuYyB8IG51bWJlciB8IG9iamVjdCxcclxuXHRcdGNvdW50PzogbnVtYmVyXHJcblx0KSB7XHJcblx0XHRzdXBlcih1bmlmb3JtTmFtZSwgY2IsIDApO1xyXG5cdFx0dGhpcy5ieXRlU2l6ZSA9IGNvdW50ICogMTY7XHJcblx0XHR0aGlzLmJ1ZmZlciA9IG5ldyBGbG9hdDMyQXJyYXkoYnVmZmVyLmJ1ZmZlciwgYnl0ZU9mZnNldCwgdGhpcy5ieXRlU2l6ZSAvIDQpO1xyXG5cdFx0dGhpcy50eXBlID0gXCJ2ZWM0LWFycmF5XCI7XHJcblx0fVxyXG5cdHNldCgpOiBib29sZWFuIHtcclxuXHRcdHRoaXMudmFsdWUgPSB0aGlzLmdldFZhbHVlKCk7XHJcblx0XHRsZXQgaiA9IDA7XHJcblx0XHRmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMudmFsdWUubGVuZ3RoOyBpKyspIHtcclxuXHRcdFx0dGhpcy5idWZmZXJbal0gPSB0aGlzLnZhbHVlW2ldLng7XHJcblx0XHRcdHRoaXMuYnVmZmVyW2ogKyAxXSA9IHRoaXMudmFsdWVbaV0ueTtcclxuXHRcdFx0dGhpcy5idWZmZXJbaiArIDJdID0gdGhpcy52YWx1ZVtpXS56O1xyXG5cdFx0XHR0aGlzLmJ1ZmZlcltqICsgM10gPSB0aGlzLnZhbHVlW2ldLnc7XHJcblx0XHRcdGogKz0gNDtcclxuXHRcdH1cclxuXHRcdHJldHVybiB0cnVlO1xyXG5cdH1cclxufVxyXG5leHBvcnQgY2xhc3MgVW5pZm9ybVRleHR1cmUgZXh0ZW5kcyBVbmlmb3JtPFRleHR1cmU+IHtcclxuXHRwdWJsaWMgYmluZGluZzogbnVtYmVyO1xyXG5cdHB1YmxpYyB0eXBlOiBzdHJpbmc7XHJcblx0cHVibGljIHZpc2liaWxpdHk6IFNoYWRlclN0YWdlO1xyXG5cdHB1YmxpYyBuYW1lOiBzdHJpbmc7XHJcblx0cHVibGljIHRleHR1cmU6IFRleHR1cmU7XHJcblx0cHVibGljIGlzVGV4dHVyZTogYm9vbGVhbjtcclxuXHRwdWJsaWMgdGV4dHVyZVZpZXc/OiBHUFVUZXh0dXJlVmlldztcclxuXHRwcml2YXRlIF90ZXh0dXJlOiBVbmlmb3JtRnVuYyB8IFRleHR1cmU7XHJcblx0Y29uc3RydWN0b3IoXHJcblx0XHR1bmlmb3JtTmFtZTogc3RyaW5nLFxyXG5cdFx0YmluZGluZzogbnVtYmVyLFxyXG5cdFx0dGV4dHVyZTogVW5pZm9ybUZ1bmMgfCBUZXh0dXJlLFxyXG5cdFx0dHlwZT86IHN0cmluZyxcclxuXHRcdHZpc2liaWxpdHk/OiBTaGFkZXJTdGFnZSxcclxuXHRcdHRleHR1cmVWaWV3PzogR1BVVGV4dHVyZVZpZXdcclxuXHQpIHtcclxuXHRcdHN1cGVyKHVuaWZvcm1OYW1lLCB1bmRlZmluZWQsIDApO1xyXG5cdFx0dGhpcy5iaW5kaW5nID0gYmluZGluZztcclxuXHRcdHRoaXMudmlzaWJpbGl0eSA9IGRlZmF1bHRWYWx1ZSh2aXNpYmlsaXR5LCBTaGFkZXJTdGFnZS5WZXJ0ZXggfCBTaGFkZXJTdGFnZS5GcmFnbWVudCk7XHJcblx0XHR0aGlzLnRleHR1cmVWaWV3ID0gdGV4dHVyZVZpZXc7XHJcblx0XHR0aGlzLnR5cGUgPSB0eXBlID8/IFwidGV4dHVyZVwiO1xyXG5cdFx0dGhpcy5pc1RleHR1cmUgPSB0cnVlO1xyXG5cdFx0dGhpcy5fdGV4dHVyZSA9IHRleHR1cmU7XHJcblx0fVxyXG5cdGdldCBsYXlvdXRUeXBlKCkge1xyXG5cdFx0cmV0dXJuIHRoaXMudGV4dHVyZT8ubGF5b3V0VHlwZSB8fCBcIm5vdCB5ZXQgYmluZFwiO1xyXG5cdH1cclxuXHRnZXQgc3RvcmFnZVRleHR1cmVMYXlvdXRUeXBlKCkge1xyXG5cdFx0cmV0dXJuIHRoaXMudGV4dHVyZT8uc3RvcmFnZVRleHR1cmVMYXlvdXRUeXBlIHx8IFwibm90IHlldCBiaW5kXCI7XHJcblx0fVxyXG5cdGJpbmQoZGV2aWNlOiBHUFVEZXZpY2UpIHtcclxuXHRcdGlmICghdGhpcy5fdGV4dHVyZSkgcmV0dXJuO1xyXG5cdFx0dGhpcy50ZXh0dXJlID0gdGhpcy5fdGV4dHVyZSBpbnN0YW5jZW9mIEZ1bmN0aW9uID8gdGhpcy5fdGV4dHVyZSgpIDogdGhpcy5fdGV4dHVyZTtcclxuXHRcdHRoaXMudGV4dHVyZS51cGRhdGUoZGV2aWNlKTtcclxuXHR9XHJcbn1cclxuZXhwb3J0IGNsYXNzIFVuaWZvcm1TYW1wbGVyIGV4dGVuZHMgVW5pZm9ybTxTYW1wbGVyPiB7XHJcblx0cHVibGljIGJpbmRpbmc6IG51bWJlcjtcclxuXHRwdWJsaWMgdHlwZTogc3RyaW5nO1xyXG5cdHB1YmxpYyB2aXNpYmlsaXR5OiBTaGFkZXJTdGFnZTtcclxuXHRwdWJsaWMgbmFtZTogc3RyaW5nO1xyXG5cdHB1YmxpYyBzYW1wbGVyOiBTYW1wbGVyO1xyXG5cdHB1YmxpYyBpc1NhbXBsZXI6IGJvb2xlYW47XHJcblx0cHJpdmF0ZSBfc2FtcGxlcjogVW5pZm9ybUZ1bmMgfCBTYW1wbGVyO1xyXG5cdGNvbnN0cnVjdG9yKHVuaWZvcm1OYW1lOiBzdHJpbmcsIGJpbmRpbmc6IG51bWJlciwgc2FtcGxlcjogVW5pZm9ybUZ1bmMgfCBTYW1wbGVyLCB2aXNpYmlsaXR5PzogU2hhZGVyU3RhZ2UpIHtcclxuXHRcdHN1cGVyKHVuaWZvcm1OYW1lLCB1bmRlZmluZWQsIDApO1xyXG5cdFx0dGhpcy52aXNpYmlsaXR5ID0gZGVmYXVsdFZhbHVlKHZpc2liaWxpdHksIFNoYWRlclN0YWdlLlZlcnRleCB8IFNoYWRlclN0YWdlLkZyYWdtZW50KTtcclxuXHRcdHRoaXMubmFtZSA9IHVuaWZvcm1OYW1lO1xyXG5cdFx0dGhpcy5iaW5kaW5nID0gYmluZGluZztcclxuXHRcdHRoaXMudHlwZSA9IFwic2FtcGxlclwiO1xyXG5cdFx0dGhpcy5pc1NhbXBsZXIgPSB0cnVlO1xyXG5cdFx0dGhpcy5fc2FtcGxlciA9IHNhbXBsZXI7XHJcblx0fVxyXG5cdGdldCBsYXlvdXRUeXBlKCkge1xyXG5cdFx0cmV0dXJuIHRoaXMuc2FtcGxlcj8ubGF5b3V0VHlwZSB8fCBcIm5vdCB5ZXQgYmluZFwiO1xyXG5cdH1cclxuXHRiaW5kKGRldmljZTogR1BVRGV2aWNlKSB7XHJcblx0XHR0aGlzLnNhbXBsZXIgPSB0aGlzLl9zYW1wbGVyIGluc3RhbmNlb2YgRnVuY3Rpb24gPyB0aGlzLl9zYW1wbGVyKCkgOiB0aGlzLl9zYW1wbGVyO1xyXG5cdFx0dGhpcy5zYW1wbGVyLnVwZGF0ZShkZXZpY2UpO1xyXG5cdH1cclxufVxyXG5leHBvcnQgY2xhc3MgVW5pZm9ybVN0cnVjdEFycmF5IGV4dGVuZHMgVW5pZm9ybTxVbmlmb3JtU3RydWN0PiB7XHJcblx0c3RhdGljIGFsaWduID0gMTY7XHJcblx0c3RhdGljIGFsaWducyA9IHtcclxuXHRcdFtVbmlmb3JtRW51bS5Vbmlmb3JtVWludF06IDQsXHJcblx0XHRbVW5pZm9ybUVudW0uRmxvYXRdOiA0LFxyXG5cdFx0W1VuaWZvcm1FbnVtLkZsb2F0VmVjMl06IDgsXHJcblx0XHRbVW5pZm9ybUVudW0uRmxvYXRWZWMzXTogMTYsXHJcblx0XHRbVW5pZm9ybUVudW0uRmxvYXRWZWM0XTogMTYsXHJcblx0XHRbVW5pZm9ybUVudW0uTWF0Ml06IDgsXHJcblx0XHRbVW5pZm9ybUVudW0uTWF0M106IDE2LFxyXG5cdFx0W1VuaWZvcm1FbnVtLk1hdDRdOiAxNixcclxuXHRcdFtVbmlmb3JtRW51bS5Db2xvcl06IDE2XHJcblx0fTtcclxuXHRzdGF0aWMgYnl0ZVNpemVzID0ge1xyXG5cdFx0W1VuaWZvcm1FbnVtLlVuaWZvcm1VaW50XTogNCxcclxuXHRcdFtVbmlmb3JtRW51bS5GbG9hdF06IDQsXHJcblx0XHRbVW5pZm9ybUVudW0uRmxvYXRWZWMyXTogOCxcclxuXHRcdFtVbmlmb3JtRW51bS5GbG9hdFZlYzNdOiAxMixcclxuXHRcdFtVbmlmb3JtRW51bS5GbG9hdFZlYzRdOiAxNixcclxuXHRcdFtVbmlmb3JtRW51bS5NYXQyXTogMTYsXHJcblx0XHRbVW5pZm9ybUVudW0uTWF0M106IDQ4LFxyXG5cdFx0W1VuaWZvcm1FbnVtLk1hdDRdOiA2NCxcclxuXHRcdFtVbmlmb3JtRW51bS5Db2xvcl06IDEyXHJcblx0fTtcclxuXHRieXRlT2Zmc2V0PzogbnVtYmVyO1xyXG5cdHNvdXJjZUJ1ZmZlcj86IEZsb2F0MzJBcnJheTtcclxuXHRzdHJ1Y3RBcnJheT86IEFycmF5PFVuaWZvcm1TdHJ1Y3Q+O1xyXG5cdGNvbnN0cnVjdG9yKFxyXG5cdFx0dW5pZm9ybU5hbWU6IHN0cmluZyxcclxuXHRcdGJ1ZmZlcjogRmxvYXQzMkFycmF5LFxyXG5cdFx0Ynl0ZU9mZnNldDogbnVtYmVyLFxyXG5cdFx0Y2I6IFVuaWZvcm1GdW5jIHwgbnVtYmVyIHwgb2JqZWN0LFxyXG5cdFx0b2Zmc2V0PzogbnVtYmVyXHJcblx0KSB7XHJcblx0XHRzdXBlcih1bmlmb3JtTmFtZSwgY2IsIG9mZnNldCk7XHJcblx0XHR0aGlzLmNiID0gY2I7XHJcblx0XHR0aGlzLnR5cGUgPSBcInN0cnVjdC1hcnJheVwiO1xyXG5cdFx0dGhpcy5kaXJ0eSA9IGZhbHNlO1xyXG5cdFx0dGhpcy5ieXRlT2Zmc2V0ID0gYnl0ZU9mZnNldDtcclxuXHRcdHRoaXMuc291cmNlQnVmZmVyID0gYnVmZmVyO1xyXG5cdH1cclxuXHRzZXQoKSB7XHJcblx0XHQvL1xyXG5cdFx0dGhpcy5zdHJ1Y3RBcnJheSA9IHRoaXMuZ2V0VmFsdWUoKTtcclxuXHRcdHRoaXMuYnl0ZVNpemUgPSB0aGlzLmdldFN0cnVjdFNpemUoKTtcclxuXHRcdHRoaXMuYnVmZmVyID0gbmV3IEZsb2F0MzJBcnJheSh0aGlzLnNvdXJjZUJ1ZmZlci5idWZmZXIsIHRoaXMuYnl0ZU9mZnNldCwgdGhpcy5ieXRlU2l6ZSAvIDQpO1xyXG5cdFx0dGhpcy5zZXRTdWJEYXRhKCk7XHJcblx0XHRyZXR1cm4gdHJ1ZTtcclxuXHR9XHJcblx0cHJpdmF0ZSBzZXRTdWJEYXRhKCkge1xyXG5cdFx0dGhpcy5zdHJ1Y3RBcnJheS5mb3JFYWNoKChzdHJ1Y3QpID0+IHtcclxuXHRcdFx0Y29uc3Qga2V5cyA9IE9iamVjdC5rZXlzKHN0cnVjdCk7XHJcblx0XHRcdGtleXMuZm9yRWFjaCgoa2V5KSA9PiB7XHJcblx0XHRcdFx0Y29uc3QgZGF0YSA9IEFycmF5LmlzQXJyYXkoc3RydWN0W2tleV0/LnZhbHVlKVxyXG5cdFx0XHRcdFx0PyBzdHJ1Y3Rba2V5XT8udmFsdWVcclxuXHRcdFx0XHRcdDogKHN0cnVjdFtrZXldPy52YWx1ZSBhcyBhbnkpLnRvQXJyYXkoKTtcclxuXHRcdFx0XHRzZXREYXRhVG9UeXBlQXJyYXkodGhpcy5idWZmZXIsIGRhdGEsIHN0cnVjdFtrZXldLm9mZnNldCk7XHJcblx0XHRcdH0pO1xyXG5cdFx0fSk7XHJcblx0fVxyXG5cdHByaXZhdGUgZ2V0U3RydWN0U2l6ZSgpIHtcclxuXHRcdGxldCBieXRlT2Zmc2V0ID0gMDtcclxuXHRcdHRoaXMuc3RydWN0QXJyYXkuZm9yRWFjaCgoc3RydWN0KSA9PiB7XHJcblx0XHRcdGNvbnN0IGtleXMgPSBPYmplY3Qua2V5cyhzdHJ1Y3QpO1xyXG5cdFx0XHRrZXlzLmZvckVhY2goKGtleSkgPT4ge1xyXG5cdFx0XHRcdGJ5dGVPZmZzZXQgKz0gVW5pZm9ybUJ1ZmZlci5jaGVja1VuaWZvcm1PZmZzZXQoYnl0ZU9mZnNldCwgVW5pZm9ybVN0cnVjdEFycmF5LmFsaWduc1tzdHJ1Y3Rba2V5XS50eXBlXSk7XHJcblx0XHRcdFx0c3RydWN0W2tleV0ub2Zmc2V0ID0gYnl0ZU9mZnNldDtcclxuXHRcdFx0XHR0aGlzLmJ5dGVPZmZzZXQgKz0gVW5pZm9ybVN0cnVjdEFycmF5LmJ5dGVTaXplc1tzdHJ1Y3Rba2V5XS50eXBlXTtcclxuXHRcdFx0fSk7XHJcblx0XHR9KTtcclxuXHRcdHJldHVybiBieXRlT2Zmc2V0O1xyXG5cdH1cclxufVxyXG5leHBvcnQgY2xhc3MgVW5pZm9ybVNwb3RMaWdodHMgZXh0ZW5kcyBVbmlmb3JtPFNwb3RMaWdodD4ge1xyXG5cdHN0YXRpYyBhbGlnbiA9IDE2O1xyXG5cdGxpZ2h0czogQXJyYXk8U3BvdExpZ2h0PjtcclxuXHQvLyBjYjogRnVuY3Rpb247XHJcblx0Y29uc3RydWN0b3IoXHJcblx0XHR1bmlmb3JtTmFtZTogc3RyaW5nLFxyXG5cdFx0YnVmZmVyOiBGbG9hdDMyQXJyYXksXHJcblx0XHRieXRlT2Zmc2V0OiBudW1iZXIsXHJcblx0XHRjYjogVW5pZm9ybUZ1bmMgfCBudW1iZXIgfCBvYmplY3QsXHJcblx0XHRjb3VudD86IG51bWJlclxyXG5cdCkge1xyXG5cdFx0c3VwZXIodW5pZm9ybU5hbWUsIGNiLCAwKTtcclxuXHRcdHRoaXMuY2IgPSBjYjtcclxuXHRcdHRoaXMuYnl0ZVNpemUgPSBjb3VudCAqIDY0O1xyXG5cdFx0dGhpcy5idWZmZXIgPSBuZXcgRmxvYXQzMkFycmF5KGJ1ZmZlci5idWZmZXIsIGJ5dGVPZmZzZXQsIHRoaXMuYnl0ZVNpemUgLyA0KTtcclxuXHRcdHRoaXMudHlwZSA9IFwic3BvdHNMaWdodFwiO1xyXG5cdFx0dGhpcy5kaXJ0eSA9IGZhbHNlO1xyXG5cdH1cclxuXHRzZXQoKSB7XHJcblx0XHR0aGlzLmxpZ2h0cyA9IHRoaXMuZ2V0VmFsdWUoKTtcclxuXHRcdHRoaXMubGlnaHRzLmZvckVhY2goKHNwb3RMaWdodCwgaW5kZXgpID0+IHtcclxuXHRcdFx0dGhpcy5zZXRTdWJEYXRhKHNwb3RMaWdodCwgaW5kZXgpO1xyXG5cdFx0fSk7XHJcblx0XHRyZXR1cm4gdGhpcy5kaXJ0eTtcclxuXHR9XHJcblx0cHJpdmF0ZSBzZXRTdWJEYXRhKHNwb3RMaWdodDogU3BvdExpZ2h0LCBpbmRleDogbnVtYmVyKSB7XHJcblx0XHRjb25zdCBvZmZzZXQgPSBpbmRleCAqIDE2O1xyXG5cdFx0aWYgKHNwb3RMaWdodC5wb3NpdGlvbkRpcnR5KSB7XHJcblx0XHRcdHRoaXMuZGlydHkgPSBzZXREYXRhVG9UeXBlQXJyYXkodGhpcy5idWZmZXIsIHNwb3RMaWdodC5wb3NpdGlvbi50b0FycmF5KCksIG9mZnNldCArIDApOyAvLyBieXRlT2Zmc2V0PTA7XHJcblx0XHR9XHJcblx0XHRpZiAoc3BvdExpZ2h0LmRpc3RhbmNlRGlydHkpIHtcclxuXHRcdFx0dGhpcy5kaXJ0eSA9IHNldERhdGFUb1R5cGVBcnJheSh0aGlzLmJ1ZmZlciwgc3BvdExpZ2h0LmRpc3RhbmNlLCBvZmZzZXQgKyAzKTsgLy8gYnl0ZU9mZnNldD0xMjtcclxuXHRcdH1cclxuXHRcdGlmIChzcG90TGlnaHQuZGlydGVjdERpcnR5KSB7XHJcblx0XHRcdHRoaXMuZGlydHkgPSBzZXREYXRhVG9UeXBlQXJyYXkodGhpcy5idWZmZXIsIHNwb3RMaWdodC5kaXJlY3Rpb25hbC50b0FycmF5KCksIG9mZnNldCArIDQpOyAvLyBieXRlT2Zmc2V0PTE2O1xyXG5cdFx0fVxyXG5cdFx0aWYgKHNwb3RMaWdodC5jb25lQ29zRGlydHkpIHtcclxuXHRcdFx0dGhpcy5kaXJ0eSA9IHNldERhdGFUb1R5cGVBcnJheSh0aGlzLmJ1ZmZlciwgc3BvdExpZ2h0LmNvbmVDb3MsIG9mZnNldCArIDcpOyAvLyBieXRlT2Zmc2V0PTI4O1xyXG5cdFx0fVxyXG5cdFx0aWYgKHNwb3RMaWdodC5jb2xvckRpcnR5KSB7XHJcblx0XHRcdHRoaXMuZGlydHkgPSBzZXREYXRhVG9UeXBlQXJyYXkodGhpcy5idWZmZXIsIHNwb3RMaWdodC5jb2xvci50b0FycmF5KCksIG9mZnNldCArIDgpOyAvLyBieXRlT2Zmc2V0PTMyO1xyXG5cdFx0fVxyXG5cdFx0aWYgKHNwb3RMaWdodC5wZW51bWJyYUNvc0RpcnR5KSB7XHJcblx0XHRcdHRoaXMuZGlydHkgPSBzZXREYXRhVG9UeXBlQXJyYXkodGhpcy5idWZmZXIsIHNwb3RMaWdodC5wZW51bWJyYUNvcywgb2Zmc2V0ICsgMTEpOyAvLyBieXRlT2Zmc2V0PTQ0O1xyXG5cdFx0fVxyXG5cdFx0aWYgKHNwb3RMaWdodC5kZWNheURpcnR5KSB7XHJcblx0XHRcdHRoaXMuZGlydHkgPSBzZXREYXRhVG9UeXBlQXJyYXkodGhpcy5idWZmZXIsIHNwb3RMaWdodC5kZWNheSwgb2Zmc2V0ICsgMTIpOyAvLyBieXRlT2Zmc2V0PTQ4O1xyXG5cdFx0fVxyXG5cclxuXHRcdHNwb3RMaWdodC5wb3NpdGlvbkRpcnR5ID0gZmFsc2U7XHJcblx0XHRzcG90TGlnaHQuZGlzdGFuY2VEaXJ0eSA9IGZhbHNlO1xyXG5cdFx0c3BvdExpZ2h0LmRpcnRlY3REaXJ0eSA9IGZhbHNlO1xyXG5cdFx0c3BvdExpZ2h0LmNvbmVDb3NEaXJ0eSA9IGZhbHNlO1xyXG5cdFx0c3BvdExpZ2h0LmNvbG9yRGlydHkgPSBmYWxzZTtcclxuXHRcdHNwb3RMaWdodC5wZW51bWJyYUNvc0RpcnR5ID0gZmFsc2U7XHJcblx0XHRzcG90TGlnaHQuZGVjYXlEaXJ0eSA9IGZhbHNlO1xyXG5cdH1cclxufVxyXG5cclxuZXhwb3J0IGNsYXNzIFVuaWZvcm1TcG90TGlnaHRTaGFkb3dzIGV4dGVuZHMgVW5pZm9ybTxTcG90TGlnaHQ+IHtcclxuXHRzdGF0aWMgYWxpZ24gPSAxNjtcclxuXHRzdGF0aWMgdW5pZm9ybVNpemUgPSAxODtcclxuXHRsaWdodHM6IEFycmF5PFNwb3RMaWdodD47XHJcblx0Ly8gY2I6IEZ1bmN0aW9uO1xyXG5cdHByaXZhdGUgX25lYXJWYWx1ZTogbnVtYmVyO1xyXG5cdHByaXZhdGUgX2ZhclZhbHVlOiBudW1iZXI7XHJcblx0cHJpdmF0ZSBfc3ViRGF0YVNpemU6IG51bWJlcjtcclxuXHJcblx0Y29uc3RydWN0b3IoXHJcblx0XHR1bmlmb3JtTmFtZTogc3RyaW5nLFxyXG5cdFx0YnVmZmVyOiBGbG9hdDMyQXJyYXksXHJcblx0XHRieXRlT2Zmc2V0OiBudW1iZXIsXHJcblx0XHRjYjogVW5pZm9ybUZ1bmMgfCBudW1iZXIgfCBvYmplY3QsXHJcblx0XHRjb3VudD86IG51bWJlclxyXG5cdCkge1xyXG5cdFx0c3VwZXIodW5pZm9ybU5hbWUsIGNiLCAwKTtcclxuXHRcdGNvbnN0IGJ5dGVzUGVyRWxlbWVudCA9IEZsb2F0MzJBcnJheS5CWVRFU19QRVJfRUxFTUVOVDtcclxuXHRcdHRoaXMuX3N1YkRhdGFTaXplID0gVW5pZm9ybVNwb3RMaWdodFNoYWRvd3MudW5pZm9ybVNpemU7XHJcblx0XHR0aGlzLmJ5dGVTaXplID0gY291bnQgKiB0aGlzLl9zdWJEYXRhU2l6ZSAqIGJ5dGVzUGVyRWxlbWVudDtcclxuXHRcdHRoaXMuYnVmZmVyID0gbmV3IEZsb2F0MzJBcnJheShidWZmZXIuYnVmZmVyLCBieXRlT2Zmc2V0LCB0aGlzLmJ5dGVTaXplIC8gNCk7XHJcblx0XHR0aGlzLnR5cGUgPSBcInNwb3RMaWdodFNoYWRvd3NcIjtcclxuXHRcdHRoaXMuX25lYXJWYWx1ZSA9IG51bGw7XHJcblx0XHR0aGlzLl9mYXJWYWx1ZSA9IG51bGw7XHJcblx0fVxyXG5cdHNldCgpIHtcclxuXHRcdHRoaXMubGlnaHRzID0gdGhpcy5nZXRWYWx1ZSgpO1xyXG5cdFx0dGhpcy5saWdodHMuZm9yRWFjaCgoc3BvdExpZ2h0LCBpbmRleCkgPT4ge1xyXG5cdFx0XHR0aGlzLnNldFN1YkRhdGEoc3BvdExpZ2h0LCBpbmRleCk7XHJcblx0XHR9KTtcclxuXHRcdHJldHVybiB0aGlzLmRpcnR5O1xyXG5cdH1cclxuXHRwcml2YXRlIHNldFN1YkRhdGEoc3BvdExpZ2h0OiBTcG90TGlnaHQsIGluZGV4OiBudW1iZXIpIHtcclxuXHRcdGNvbnN0IG9mZnNldCA9IGluZGV4ICogdGhpcy5fc3ViRGF0YVNpemU7XHJcblx0XHRpZiAoc3BvdExpZ2h0LnNoYWRvdy52cE1hdHJpeERpcnR5KSB7XHJcblx0XHRcdHNwb3RMaWdodC5zaGFkb3cudnBNYXRyaXhEaXJ0eSA9IGZhbHNlO1xyXG5cdFx0XHR0aGlzLmRpcnR5ID0gc2V0RGF0YVRvVHlwZUFycmF5KHRoaXMuYnVmZmVyLCBzcG90TGlnaHQuc2hhZG93LmNhbWVyYS52cE1hdHJpeC50b0FycmF5KCksIG9mZnNldCArIDApOyAvLyBieXRlT2Zmc2V0PTA7XHJcblx0XHR9XHJcblx0XHRjb25zdCBuZWFyVmFsdWUgPSBzcG90TGlnaHQuc2hhZG93LmNhbWVyYS5uZWFyO1xyXG5cdFx0aWYgKG5lYXJWYWx1ZSAhPSB0aGlzLl9uZWFyVmFsdWUpIHtcclxuXHRcdFx0dGhpcy5fbmVhclZhbHVlID0gbmVhclZhbHVlO1xyXG5cdFx0XHR0aGlzLmRpcnR5ID0gc2V0RGF0YVRvVHlwZUFycmF5KHRoaXMuYnVmZmVyLCB0aGlzLl9uZWFyVmFsdWUsIG9mZnNldCArIDE2KTsgLy8gYnl0ZU9mZnNldD0wO1xyXG5cdFx0fVxyXG5cdFx0Y29uc3QgZmFyVmFsdWUgPSBzcG90TGlnaHQuc2hhZG93LmNhbWVyYS5mYXI7XHJcblx0XHRpZiAoZmFyVmFsdWUgIT0gdGhpcy5fZmFyVmFsdWUpIHtcclxuXHRcdFx0dGhpcy5fZmFyVmFsdWUgPSBmYXJWYWx1ZTtcclxuXHRcdFx0dGhpcy5kaXJ0eSA9IHNldERhdGFUb1R5cGVBcnJheSh0aGlzLmJ1ZmZlciwgdGhpcy5fZmFyVmFsdWUsIG9mZnNldCArIDE3KTsgLy8gYnl0ZU9mZnNldD0wO1xyXG5cdFx0fVxyXG5cdH1cclxufVxyXG5leHBvcnQgY2xhc3MgVW5pZm9ybVBvaW50TGlnaHRzIGV4dGVuZHMgVW5pZm9ybTxQb2ludExpZ2h0PiB7XHJcblx0c3RhdGljIGFsaWduID0gMTY7XHJcblx0bGlnaHRzOiBBcnJheTxQb2ludExpZ2h0PjtcclxuXHQvLyBjYjogRnVuY3Rpb247XHJcblx0Y29uc3RydWN0b3IoXHJcblx0XHR1bmlmb3JtTmFtZTogc3RyaW5nLFxyXG5cdFx0YnVmZmVyOiBGbG9hdDMyQXJyYXksXHJcblx0XHRieXRlT2Zmc2V0OiBudW1iZXIsXHJcblx0XHRjYjogVW5pZm9ybUZ1bmMgfCBudW1iZXIgfCBvYmplY3QsXHJcblx0XHRjb3VudD86IG51bWJlclxyXG5cdCkge1xyXG5cdFx0c3VwZXIodW5pZm9ybU5hbWUsIGNiLCAwKTtcclxuXHRcdHRoaXMuYnl0ZVNpemUgPSBjb3VudCAqIDMyO1xyXG5cdFx0dGhpcy5idWZmZXIgPSBuZXcgRmxvYXQzMkFycmF5KGJ1ZmZlci5idWZmZXIsIGJ5dGVPZmZzZXQsIHRoaXMuYnl0ZVNpemUgLyA0KTtcclxuXHRcdHRoaXMudHlwZSA9IFwicG9pbnRzTGlnaHRcIjtcclxuXHR9XHJcblx0c2V0KCkge1xyXG5cdFx0dGhpcy5saWdodHMgPSB0aGlzLmdldFZhbHVlKCk7XHJcblx0XHR0aGlzLmxpZ2h0cy5mb3JFYWNoKChwb2ludExpZ2h0LCBpbmRleCkgPT4ge1xyXG5cdFx0XHR0aGlzLnNldFN1YkRhdGEocG9pbnRMaWdodCwgaW5kZXgpO1xyXG5cdFx0fSk7XHJcblx0XHRyZXR1cm4gdGhpcy5kaXJ0eTtcclxuXHR9XHJcblx0cHJpdmF0ZSBzZXRTdWJEYXRhKHBvaW50TGlnaHQ6IFBvaW50TGlnaHQsIGluZGV4OiBudW1iZXIpIHtcclxuXHRcdGNvbnN0IG9mZnNldCA9IGluZGV4ICogODtcclxuXHRcdGlmIChwb2ludExpZ2h0LnBvc2l0aW9uRGlydHkpIHtcclxuXHRcdFx0cG9pbnRMaWdodC5wb3NpdGlvbkRpcnR5ID0gZmFsc2U7XHJcblx0XHRcdHRoaXMuZGlydHkgPSBzZXREYXRhVG9UeXBlQXJyYXkodGhpcy5idWZmZXIsIHBvaW50TGlnaHQucG9zaXRpb24udG9BcnJheSgpLCBvZmZzZXQgKyAwKTsgLy8gYnl0ZU9mZnNldD0wO1xyXG5cdFx0fVxyXG5cdFx0aWYgKHBvaW50TGlnaHQuZGlzdGFuY2VEaXJ0eSkge1xyXG5cdFx0XHRwb2ludExpZ2h0LmRpc3RhbmNlRGlydHkgPSBmYWxzZTtcclxuXHRcdFx0dGhpcy5kaXJ0eSA9IHNldERhdGFUb1R5cGVBcnJheSh0aGlzLmJ1ZmZlciwgcG9pbnRMaWdodC5kaXN0YW5jZSwgb2Zmc2V0ICsgMyk7IC8vIGJ5dGVPZmZzZXQ9MTI7XHJcblx0XHR9XHJcblx0XHRpZiAocG9pbnRMaWdodC5jb2xvckRpcnR5KSB7XHJcblx0XHRcdHBvaW50TGlnaHQuY29sb3JEaXJ0eSA9IGZhbHNlO1xyXG5cdFx0XHR0aGlzLmRpcnR5ID0gc2V0RGF0YVRvVHlwZUFycmF5KHRoaXMuYnVmZmVyLCBwb2ludExpZ2h0LmNvbG9yLnRvQXJyYXkoKSwgb2Zmc2V0ICsgNCk7IC8vIGJ5dGVPZmZzZXQ9MzI7XHJcblx0XHR9XHJcblx0XHRpZiAocG9pbnRMaWdodC5kZWNheURpcnR5KSB7XHJcblx0XHRcdHBvaW50TGlnaHQuZGVjYXlEaXJ0eSA9IGZhbHNlO1xyXG5cdFx0XHR0aGlzLmRpcnR5ID0gc2V0RGF0YVRvVHlwZUFycmF5KHRoaXMuYnVmZmVyLCBwb2ludExpZ2h0LmRlY2F5LCBvZmZzZXQgKyA3KTsgLy8gYnl0ZU9mZnNldD0xMjtcclxuXHRcdH1cclxuXHR9XHJcbn1cclxuXHJcbmV4cG9ydCBjbGFzcyBVbmlmb3JtUG9pbnRMaWdodFNoYWRvd3MgZXh0ZW5kcyBVbmlmb3JtPFBvaW50TGlnaHQ+IHtcclxuXHRzdGF0aWMgYWxpZ24gPSAxNjtcclxuXHRzdGF0aWMgdW5pZm9ybVNpemUgPSAxMjI7XHJcblx0bGlnaHRzOiBBcnJheTxQb2ludExpZ2h0PjtcclxuXHQvLyBjYjogRnVuY3Rpb247XHJcblx0cHJpdmF0ZSBfbmVhclZhbHVlOiBudW1iZXI7XHJcblx0cHJpdmF0ZSBfZmFyVmFsdWU6IG51bWJlcjtcclxuXHRwcml2YXRlIF9zdWJEYXRhU2l6ZTogbnVtYmVyO1xyXG5cclxuXHRjb25zdHJ1Y3RvcihcclxuXHRcdHVuaWZvcm1OYW1lOiBzdHJpbmcsXHJcblx0XHRidWZmZXI6IEZsb2F0MzJBcnJheSxcclxuXHRcdGJ5dGVPZmZzZXQ6IG51bWJlcixcclxuXHRcdGNiOiBVbmlmb3JtRnVuYyB8IG51bWJlciB8IG9iamVjdCxcclxuXHRcdGNvdW50PzogbnVtYmVyXHJcblx0KSB7XHJcblx0XHRzdXBlcih1bmlmb3JtTmFtZSwgY2IsIDApO1xyXG5cdFx0Y29uc3QgYnl0ZXNQZXJFbGVtZW50ID0gRmxvYXQzMkFycmF5LkJZVEVTX1BFUl9FTEVNRU5UO1xyXG5cdFx0dGhpcy5fc3ViRGF0YVNpemUgPSBVbmlmb3JtUG9pbnRMaWdodFNoYWRvd3MudW5pZm9ybVNpemU7XHJcblx0XHR0aGlzLmJ5dGVTaXplID0gY291bnQgKiBieXRlc1BlckVsZW1lbnQgKiB0aGlzLl9zdWJEYXRhU2l6ZTtcclxuXHRcdHRoaXMuYnVmZmVyID0gbmV3IEZsb2F0MzJBcnJheShidWZmZXIuYnVmZmVyLCBieXRlT2Zmc2V0LCB0aGlzLmJ5dGVTaXplIC8gNCk7XHJcblx0XHR0aGlzLnR5cGUgPSBcInBvaW50TGlnaHRTaGFkb3dzXCI7XHJcblx0XHR0aGlzLl9uZWFyVmFsdWUgPSBudWxsO1xyXG5cdFx0dGhpcy5fZmFyVmFsdWUgPSBudWxsO1xyXG5cdH1cclxuXHRzZXQoKSB7XHJcblx0XHR0aGlzLmxpZ2h0cyA9IHRoaXMuZ2V0VmFsdWUoKTtcclxuXHRcdHRoaXMubGlnaHRzLmZvckVhY2goKHBvaW50TGlnaHQsIGluZGV4KSA9PiB7XHJcblx0XHRcdHRoaXMuc2V0U3ViRGF0YShwb2ludExpZ2h0LCBpbmRleCk7XHJcblx0XHR9KTtcclxuXHRcdHJldHVybiB0aGlzLmRpcnR5O1xyXG5cdH1cclxuXHRwcml2YXRlIHNldFN1YkRhdGEocG9pbnRMaWdodDogUG9pbnRMaWdodCwgaW5kZXg6IG51bWJlcikge1xyXG5cdFx0Y29uc3Qgb2Zmc2V0ID0gaW5kZXggKiB0aGlzLl9zdWJEYXRhU2l6ZTtcclxuXHJcblx0XHRpZiAocG9pbnRMaWdodC5zaGFkb3cudnBNYXRyaXhBcnJheURpcnR5KSB7XHJcblx0XHRcdHBvaW50TGlnaHQuc2hhZG93LnZwTWF0cml4QXJyYXlEaXJ0eSA9IGZhbHNlO1xyXG5cdFx0XHRjb25zdCB2cE1hdHJpeEFycmF5ID0gcG9pbnRMaWdodC5zaGFkb3cuY2FtZXJhLnZwTWF0cml4QXJyYXk7XHJcblx0XHRcdGZvciAobGV0IGkgPSAwOyBpIDwgdnBNYXRyaXhBcnJheS5sZW5ndGg7IGkrKykge1xyXG5cdFx0XHRcdGNvbnN0IHZwTWF0cml4ID0gdnBNYXRyaXhBcnJheVtpXTtcclxuXHRcdFx0XHR0aGlzLmRpcnR5ID0gc2V0RGF0YVRvVHlwZUFycmF5KHRoaXMuYnVmZmVyLCB2cE1hdHJpeC50b0FycmF5KCksIG9mZnNldCArIDAgKyAxNiAqIGkpOyAvLyBieXRlT2Zmc2V0PTk4ICogNDtcclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cclxuXHRcdGlmIChwb2ludExpZ2h0LnNoYWRvdy52aWV3UG9ydERpcnR5KSB7XHJcblx0XHRcdHBvaW50TGlnaHQuc2hhZG93LnZpZXdQb3J0RGlydHkgPSBmYWxzZTtcclxuXHRcdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCA2OyBpKyspIHtcclxuXHRcdFx0XHR0aGlzLmRpcnR5ID0gc2V0RGF0YVRvVHlwZUFycmF5KFxyXG5cdFx0XHRcdFx0dGhpcy5idWZmZXIsXHJcblx0XHRcdFx0XHRwb2ludExpZ2h0LnNoYWRvdy52aWV3cG9ydHNbaV0udG9BcnJheSgpLFxyXG5cdFx0XHRcdFx0b2Zmc2V0ICsgOTYgKyA0ICogaVxyXG5cdFx0XHRcdCk7IC8vIGJ5dGVPZmZzZXQ9MDtcclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cclxuXHRcdGNvbnN0IG5lYXJWYWx1ZSA9IHBvaW50TGlnaHQuc2hhZG93LmNhbWVyYS5uZWFyO1xyXG5cdFx0aWYgKG5lYXJWYWx1ZSAhPSB0aGlzLl9uZWFyVmFsdWUpIHtcclxuXHRcdFx0dGhpcy5fbmVhclZhbHVlID0gbmVhclZhbHVlO1xyXG5cdFx0XHR0aGlzLmRpcnR5ID0gc2V0RGF0YVRvVHlwZUFycmF5KHRoaXMuYnVmZmVyLCB0aGlzLl9uZWFyVmFsdWUsIG9mZnNldCArIDEyMCk7IC8vIGJ5dGVPZmZzZXQ9MDtcclxuXHRcdH1cclxuXHRcdGNvbnN0IGZhclZhbHVlID0gcG9pbnRMaWdodC5zaGFkb3cuY2FtZXJhLmZhcjtcclxuXHRcdGlmIChmYXJWYWx1ZSAhPSB0aGlzLl9mYXJWYWx1ZSkge1xyXG5cdFx0XHR0aGlzLl9mYXJWYWx1ZSA9IGZhclZhbHVlO1xyXG5cdFx0XHR0aGlzLmRpcnR5ID0gc2V0RGF0YVRvVHlwZUFycmF5KHRoaXMuYnVmZmVyLCB0aGlzLl9mYXJWYWx1ZSwgb2Zmc2V0ICsgMTIxKTsgLy8gYnl0ZU9mZnNldD0xO1xyXG5cdFx0fVxyXG5cdH1cclxufVxyXG5leHBvcnQgY2xhc3MgVW5pZm9ybURpcnRlY3RMaWdodHMgZXh0ZW5kcyBVbmlmb3JtPERpcmVjdGlvbmFsTGlnaHQ+IHtcclxuXHRzdGF0aWMgYWxpZ24gPSAxNjtcclxuXHRsaWdodHM6IEFycmF5PERpcmVjdGlvbmFsTGlnaHQ+O1xyXG5cdGNvbnN0cnVjdG9yKFxyXG5cdFx0dW5pZm9ybU5hbWU6IHN0cmluZyxcclxuXHRcdGJ1ZmZlcjogRmxvYXQzMkFycmF5LFxyXG5cdFx0Ynl0ZU9mZnNldDogbnVtYmVyLFxyXG5cdFx0Y2I6IFVuaWZvcm1GdW5jIHwgbnVtYmVyIHwgb2JqZWN0LFxyXG5cdFx0Y291bnQ/OiBudW1iZXJcclxuXHQpIHtcclxuXHRcdHN1cGVyKHVuaWZvcm1OYW1lLCBjYiwgMCk7XHJcblx0XHR0aGlzLmNiID0gY2I7XHJcblx0XHR0aGlzLmJ5dGVTaXplID0gY291bnQgKiAzMjtcclxuXHRcdHRoaXMuYnVmZmVyID0gbmV3IEZsb2F0MzJBcnJheShidWZmZXIuYnVmZmVyLCBieXRlT2Zmc2V0LCB0aGlzLmJ5dGVTaXplIC8gNCk7XHJcblx0XHR0aGlzLnR5cGUgPSBcImRpcnRlY3RMaWdodHNcIjtcclxuXHR9XHJcblx0c2V0KCkge1xyXG5cdFx0dGhpcy5saWdodHMgPSB0aGlzLmdldFZhbHVlKCk7XHJcblx0XHR0aGlzLmxpZ2h0cy5mb3JFYWNoKChkaXJlY3Rpb25hbExpZ2h0LCBpbmRleCkgPT4ge1xyXG5cdFx0XHR0aGlzLnNldFN1YkRhdGEoZGlyZWN0aW9uYWxMaWdodCwgaW5kZXgpO1xyXG5cdFx0fSk7XHJcblx0XHRyZXR1cm4gdGhpcy5kaXJ0eTtcclxuXHR9XHJcblx0cHJpdmF0ZSBzZXRTdWJEYXRhKGRpcmVjdGlvbmFsTGlnaHQ6IERpcmVjdGlvbmFsTGlnaHQsIGluZGV4OiBudW1iZXIpIHtcclxuXHRcdGNvbnN0IG9mZnNldCA9IGluZGV4ICogODtcclxuXHRcdGlmIChkaXJlY3Rpb25hbExpZ2h0LmRpcnRlY3REaXJ0eSkge1xyXG5cdFx0XHRkaXJlY3Rpb25hbExpZ2h0LmRpcnRlY3REaXJ0eSA9IGZhbHNlO1xyXG5cdFx0XHR0aGlzLmRpcnR5ID0gc2V0RGF0YVRvVHlwZUFycmF5KHRoaXMuYnVmZmVyLCBkaXJlY3Rpb25hbExpZ2h0LmRpcmVjdGlvbmFsLnRvQXJyYXkoKSwgb2Zmc2V0ICsgMCk7IC8vIGJ5dGVPZmZzZXQ9MTY7XHJcblx0XHR9XHJcblx0XHRpZiAoZGlyZWN0aW9uYWxMaWdodC5jb2xvckRpcnR5KSB7XHJcblx0XHRcdGRpcmVjdGlvbmFsTGlnaHQuY29sb3JEaXJ0eSA9IGZhbHNlO1xyXG5cdFx0XHR0aGlzLmRpcnR5ID0gc2V0RGF0YVRvVHlwZUFycmF5KHRoaXMuYnVmZmVyLCBkaXJlY3Rpb25hbExpZ2h0LmNvbG9yLnRvQXJyYXkoKSwgb2Zmc2V0ICsgNCk7IC8vIGJ5dGVPZmZzZXQ9MzI7XHJcblx0XHR9XHJcblx0fVxyXG59XHJcblxyXG5leHBvcnQgY2xhc3MgVW5pZm9ybURpcnRlY3RMaWdodFNoYWRvd3MgZXh0ZW5kcyBVbmlmb3JtPERpcmVjdGlvbmFsTGlnaHQ+IHtcclxuXHRzdGF0aWMgYWxpZ24gPSAxNjtcclxuXHRzdGF0aWMgdW5pZm9ybVNpemUgPSAxNjtcclxuXHRsaWdodHM6IEFycmF5PERpcmVjdGlvbmFsTGlnaHQ+O1xyXG5cdHByaXZhdGUgX3N1YkRhdGFTaXplOiBudW1iZXI7XHJcblxyXG5cdGNvbnN0cnVjdG9yKFxyXG5cdFx0dW5pZm9ybU5hbWU6IHN0cmluZyxcclxuXHRcdGJ1ZmZlcjogRmxvYXQzMkFycmF5LFxyXG5cdFx0Ynl0ZU9mZnNldDogbnVtYmVyLFxyXG5cdFx0Y2I6IFVuaWZvcm1GdW5jIHwgbnVtYmVyIHwgb2JqZWN0LFxyXG5cdFx0Y291bnQ/OiBudW1iZXJcclxuXHQpIHtcclxuXHRcdHN1cGVyKHVuaWZvcm1OYW1lLCBjYiwgMCk7XHJcblx0XHRjb25zdCBieXRlc1BlckVsZW1lbnQgPSBGbG9hdDMyQXJyYXkuQllURVNfUEVSX0VMRU1FTlQ7XHJcblx0XHR0aGlzLl9zdWJEYXRhU2l6ZSA9IFVuaWZvcm1EaXJ0ZWN0TGlnaHRTaGFkb3dzLnVuaWZvcm1TaXplO1xyXG5cdFx0dGhpcy5ieXRlU2l6ZSA9IGNvdW50ICogYnl0ZXNQZXJFbGVtZW50ICogdGhpcy5fc3ViRGF0YVNpemU7XHJcblx0XHR0aGlzLmJ1ZmZlciA9IG5ldyBGbG9hdDMyQXJyYXkoYnVmZmVyLmJ1ZmZlciwgYnl0ZU9mZnNldCwgdGhpcy5ieXRlU2l6ZSAvIDQpO1xyXG5cdFx0dGhpcy50eXBlID0gXCJkaXJ0ZWN0TGlnaHRTaGFkb3dzXCI7XHJcblx0fVxyXG5cdHNldCgpIHtcclxuXHRcdHRoaXMubGlnaHRzID0gdGhpcy5nZXRWYWx1ZSgpO1xyXG5cdFx0dGhpcy5saWdodHMuZm9yRWFjaCgoZGlyZWN0aW9uYWxMaWdodCwgaW5kZXgpID0+IHtcclxuXHRcdFx0dGhpcy5zZXRTdWJEYXRhKGRpcmVjdGlvbmFsTGlnaHQsIGluZGV4KTtcclxuXHRcdH0pO1xyXG5cdFx0cmV0dXJuIHRoaXMuZGlydHk7XHJcblx0fVxyXG5cdHByaXZhdGUgc2V0U3ViRGF0YShkaXJlY3Rpb25hbExpZ2h0OiBEaXJlY3Rpb25hbExpZ2h0LCBpbmRleDogbnVtYmVyKSB7XHJcblx0XHRjb25zdCBvZmZzZXQgPSBpbmRleCAqIHRoaXMuX3N1YkRhdGFTaXplO1xyXG5cdFx0aWYgKGRpcmVjdGlvbmFsTGlnaHQuc2hhZG93LnZwTWF0cml4RGlydHkpIHtcclxuXHRcdFx0ZGlyZWN0aW9uYWxMaWdodC5zaGFkb3cudnBNYXRyaXhEaXJ0eSA9IGZhbHNlO1xyXG5cdFx0XHR0aGlzLmRpcnR5ID0gc2V0RGF0YVRvVHlwZUFycmF5KHRoaXMuYnVmZmVyLCBkaXJlY3Rpb25hbExpZ2h0LnNoYWRvdy5jYW1lcmEudnBNYXRyaXgudG9BcnJheSgpLCBvZmZzZXQgKyAwKTsgLy8gYnl0ZU9mZnNldD0xNjtcclxuXHRcdH1cclxuXHR9XHJcbn1cclxuZnVuY3Rpb24gc2V0RGF0YVRvVHlwZUFycmF5KGJ1ZmZlciwgZGF0YSwgb2Zmc2V0KSB7XHJcblx0aWYgKEFycmF5LmlzQXJyYXkoZGF0YSkpIHtcclxuXHRcdGRhdGEuZm9yRWFjaCgodmFsdWUsIGluZGV4KSA9PiB7XHJcblx0XHRcdGJ1ZmZlcltpbmRleCArIG9mZnNldF0gPSB2YWx1ZTtcclxuXHRcdH0pO1xyXG5cdH0gZWxzZSB7XHJcblx0XHRidWZmZXJbb2Zmc2V0XSA9IGRhdGE7XHJcblx0fVxyXG5cdHJldHVybiB0cnVlO1xyXG59XHJcbiIsImltcG9ydCB7IEJ1ZmZlckJpbmRpbmdUeXBlLCBCdWZmZXJVc2FnZSwgU2hhZGVyU3RhZ2UgfSBmcm9tIFwiLi4vY29yZS9XZWJHUFVDb25zdGFudFwiO1xyXG5pbXBvcnQgeyBVbmlmb3JtRnVuYywgVW5pZm9ybUVudW0gfSBmcm9tIFwiLi4vY29yZS9XZWJHUFVUeXBlc1wiO1xyXG5pbXBvcnQgZGVmYXVsdFZhbHVlIGZyb20gXCIuLi91dGlscy9kZWZhdWx0VmFsdWVcIjtcclxuaW1wb3J0IEJ1ZmZlciBmcm9tIFwiLi9CdWZmZXJcIjtcclxuXHJcbmltcG9ydCB7XHJcblx0VW5pZm9ybSxcclxuXHRVbmlmb3JtQ29sb3IsXHJcblx0VW5pZm9ybURpcnRlY3RMaWdodHMsXHJcblx0VW5pZm9ybURpcnRlY3RMaWdodFNoYWRvd3MsXHJcblx0VW5pZm9ybUZsb2F0LFxyXG5cdFVuaWZvcm1GbG9hdEFycmF5LFxyXG5cdFVuaWZvcm1GbG9hdFZlYzIsXHJcblx0VW5pZm9ybUZsb2F0VmVjMyxcclxuXHRVbmlmb3JtRmxvYXRWZWM0LFxyXG5cdFVuaWZvcm1NYXQyLFxyXG5cdFVuaWZvcm1NYXQzLFxyXG5cdFVuaWZvcm1NYXQ0LFxyXG5cdFVuaWZvcm1NYXRyaXg0QXJyYXksXHJcblx0VW5pZm9ybVBvaW50TGlnaHRzLFxyXG5cdFVuaWZvcm1Qb2ludExpZ2h0U2hhZG93cyxcclxuXHRVbmlmb3JtU3BvdExpZ2h0cyxcclxuXHRVbmlmb3JtU3BvdExpZ2h0U2hhZG93cyxcclxuXHRVbmlmb3JtVWludCxcclxuXHRVbmlmb3JtVmVjMkFycmF5LFxyXG5cdFVuaWZvcm1WZWMzQXJyYXksXHJcblx0VW5pZm9ybVZlYzRBcnJheSxcclxuXHRVbmlmb3JtU3RydWN0QXJyYXlcclxufSBmcm9tIFwiLi9Vbmlmb3Jtc1wiO1xyXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBVbmlmb3JtQnVmZmVyIHtcclxuXHRwdWJsaWMgdHlwZTogc3RyaW5nO1xyXG5cdHB1YmxpYyBoYXNEeW5hbWljT2Zmc2V0OiBib29sZWFuO1xyXG5cdHB1YmxpYyBtaW5CaW5kaW5nU2l6ZTogbnVtYmVyO1xyXG5cdHByaXZhdGUgX3VuaWZvcm1TdHJ1Y3Q6IE1hcDxzdHJpbmcsIFVuaWZvcm08YW55Pj47XHJcblx0cHJpdmF0ZSBfYnVmZmVyU2l6ZTogbnVtYmVyO1xyXG5cdHByaXZhdGUgbGFiZWw6IHN0cmluZztcclxuXHRwdWJsaWMgYnl0ZU9mZnNldDogbnVtYmVyO1xyXG5cdHB1YmxpYyB1bmlmb3JtRGlydHk6IGJvb2xlYW47XHJcblx0cHVibGljIGJpbmRpbmc6IG51bWJlcjtcclxuXHRwdWJsaWMgdmlzaWJpbGl0eTogU2hhZGVyU3RhZ2U7XHJcblx0cHVibGljIHVzYWdlOiBCdWZmZXJVc2FnZTtcclxuXHRwdWJsaWMgYnVmZmVyOiBCdWZmZXI7XHJcblx0cHVibGljIGRhdGFCdWZmZXI6IEZsb2F0MzJBcnJheTtcclxuXHRwdWJsaWMgb2Zmc2V0OiBudW1iZXI7XHJcblx0cHVibGljIG1heE9mZnNldDogbnVtYmVyO1xyXG5cdHB1YmxpYyBpc1VuaWZvcm1CdWZmZXI6IGJvb2xlYW47XHJcblx0cHVibGljIG5hbWU6IHN0cmluZztcclxuXHRwcml2YXRlIHN0YXRpYyBVbmlmb3JtVHlwZSA9IHtcclxuXHRcdFtVbmlmb3JtRW51bS5Vbmlmb3JtVWludF06IFVuaWZvcm1VaW50LFxyXG5cdFx0W1VuaWZvcm1FbnVtLkZsb2F0XTogVW5pZm9ybUZsb2F0LFxyXG5cdFx0W1VuaWZvcm1FbnVtLkZsb2F0VmVjMl06IFVuaWZvcm1GbG9hdFZlYzIsXHJcblx0XHRbVW5pZm9ybUVudW0uRmxvYXRWZWMzXTogVW5pZm9ybUZsb2F0VmVjMyxcclxuXHRcdFtVbmlmb3JtRW51bS5GbG9hdFZlYzRdOiBVbmlmb3JtRmxvYXRWZWM0LFxyXG5cdFx0W1VuaWZvcm1FbnVtLk1hdDJdOiBVbmlmb3JtTWF0MixcclxuXHRcdFtVbmlmb3JtRW51bS5NYXQzXTogVW5pZm9ybU1hdDMsXHJcblx0XHRbVW5pZm9ybUVudW0uTWF0NF06IFVuaWZvcm1NYXQ0LFxyXG5cdFx0W1VuaWZvcm1FbnVtLkNvbG9yXTogVW5pZm9ybUNvbG9yLFxyXG5cdFx0W1VuaWZvcm1FbnVtLkZsb2F0QXJyYXldOiBVbmlmb3JtRmxvYXRBcnJheSxcclxuXHRcdFtVbmlmb3JtRW51bS5WZWMyQXJyYXldOiBVbmlmb3JtVmVjMkFycmF5LFxyXG5cdFx0W1VuaWZvcm1FbnVtLlZlYzNBcnJheV06IFVuaWZvcm1WZWMzQXJyYXksXHJcblx0XHRbVW5pZm9ybUVudW0uVmVjNEFycmF5XTogVW5pZm9ybVZlYzRBcnJheSxcclxuXHRcdFtVbmlmb3JtRW51bS5NYXQ0QXJyYXldOiBVbmlmb3JtTWF0cml4NEFycmF5LFxyXG5cdFx0W1VuaWZvcm1FbnVtLlBvaW50TGlnaHRzXTogVW5pZm9ybVBvaW50TGlnaHRzLFxyXG5cdFx0W1VuaWZvcm1FbnVtLlNwb3RMaWdodHNdOiBVbmlmb3JtU3BvdExpZ2h0cyxcclxuXHRcdFtVbmlmb3JtRW51bS5EaXJ0ZWN0TGlnaHRzXTogVW5pZm9ybURpcnRlY3RMaWdodHMsXHJcblx0XHRbVW5pZm9ybUVudW0uUG9pbnRMaWdodFNoYWRvd3NdOiBVbmlmb3JtUG9pbnRMaWdodFNoYWRvd3MsXHJcblx0XHRbVW5pZm9ybUVudW0uU3BvdExpZ2h0U2hhZG93c106IFVuaWZvcm1TcG90TGlnaHRTaGFkb3dzLFxyXG5cdFx0W1VuaWZvcm1FbnVtLkRpcnRlY3RMaWdodFNoYWRvd3NdOiBVbmlmb3JtRGlydGVjdExpZ2h0U2hhZG93cyxcclxuXHRcdFtVbmlmb3JtRW51bS5Vbmlmb3JtU3RydWN0QXJyYXldOiBVbmlmb3JtU3RydWN0QXJyYXlcclxuXHR9O1xyXG5cdGNvbnN0cnVjdG9yKG9wdGlvbnM6IFVuaWZvcm1CdWZmZXJQYXJhbXMpIHtcclxuXHRcdHRoaXMudHlwZSA9IGRlZmF1bHRWYWx1ZShvcHRpb25zLnR5cGUsIFwidW5pZm9ybVwiKTtcclxuXHRcdHRoaXMubGFiZWwgPSBkZWZhdWx0VmFsdWUob3B0aW9ucy5sYWJlbCwgXCJcIik7XHJcblx0XHR0aGlzLm5hbWUgPSBkZWZhdWx0VmFsdWUob3B0aW9ucy5sYWJlbCwgXCJcIik7XHJcblx0XHR0aGlzLmhhc0R5bmFtaWNPZmZzZXQgPSBvcHRpb25zLmhhc0R5bmFtaWNPZmZzZXQgPz8gZmFsc2U7XHJcblx0XHR0aGlzLm1pbkJpbmRpbmdTaXplID0gb3B0aW9ucy5taW5CaW5kaW5nU2l6ZSA/PyAwO1xyXG5cdFx0dGhpcy5iaW5kaW5nID0gb3B0aW9ucy5iaW5kaW5nID8/IDA7XHJcblx0XHR0aGlzLnZpc2liaWxpdHkgPSBkZWZhdWx0VmFsdWUob3B0aW9ucy52aXNpYmlsaXR5LCBTaGFkZXJTdGFnZS5GcmFnbWVudCB8IFNoYWRlclN0YWdlLlZlcnRleCk7XHJcblx0XHR0aGlzLnVzYWdlID0gZGVmYXVsdFZhbHVlKG9wdGlvbnMudXNhZ2UsIEJ1ZmZlclVzYWdlLlVuaWZvcm0gfCBCdWZmZXJVc2FnZS5Db3B5RHN0KTtcclxuXHRcdHRoaXMuX3VuaWZvcm1TdHJ1Y3QgPSBuZXcgTWFwKCk7XHJcblx0XHR0aGlzLnVuaWZvcm1EaXJ0eSA9IHRydWU7XHJcblx0XHR0aGlzLl9idWZmZXJTaXplID0gb3B0aW9ucy5zaXplO1xyXG5cdFx0dGhpcy5idWZmZXIgPSBvcHRpb25zLmJ1ZmZlcjtcclxuXHRcdHRoaXMub2Zmc2V0ID0gMDtcclxuXHRcdHRoaXMuZGF0YUJ1ZmZlciA9IGRlZmF1bHRWYWx1ZShvcHRpb25zLmRhdGFCdWZmZXIsIG5ldyBGbG9hdDMyQXJyYXkoZGVmYXVsdFZhbHVlKHRoaXMuX2J1ZmZlclNpemUsIDQwMCkpKTtcclxuXHRcdHRoaXMuYnl0ZU9mZnNldCA9IDA7XHJcblx0XHR0aGlzLmlzVW5pZm9ybUJ1ZmZlciA9IHRydWU7XHJcblx0XHR0aGlzLm1heE9mZnNldCA9IG9wdGlvbnMubWF4T2Zmc2V0ID8/IDA7XHJcblx0fVxyXG5cdGdldCBsYXlvdXRUeXBlKCkge1xyXG5cdFx0cmV0dXJuIHtcclxuXHRcdFx0dHlwZTogdGhpcy50eXBlLFxyXG5cdFx0XHRoYXNEeW5hbWljT2Zmc2V0OiB0aGlzLmhhc0R5bmFtaWNPZmZzZXQsXHJcblx0XHRcdG1pbkJpbmRpbmdTaXplOiB0aGlzLm1pbkJpbmRpbmdTaXplXHJcblx0XHR9O1xyXG5cdH1cclxuXHRnZXQgYnVmZmVyU2l6ZSgpIHtcclxuXHRcdHJldHVybiB0aGlzLl9idWZmZXJTaXplID8/IHRoaXMudW5pZm9ybXNTaXplICogNDtcclxuXHR9XHJcblx0Z2V0IHVuaWZvcm1zU2l6ZSgpIHtcclxuXHRcdC8vIGh0dHBzOi8vZ3B1d2ViLmdpdGh1Yi5pby9ncHV3ZWIvd2dzbC8jYWRkcmVzcy1zcGFjZS1sYXlvdXQtY29uc3RyYWludHNcclxuXHRcdHJldHVybiB0aGlzLl9idWZmZXJTaXplICE9IHVuZGVmaW5lZCA/IHRoaXMuX2J1ZmZlclNpemUgLyA0IDogTWF0aC5jZWlsKHRoaXMuYnl0ZU9mZnNldCAvIDE2KSAqIDE2O1xyXG5cdH1cclxuXHRiaW5kKGRldmljZTogR1BVRGV2aWNlKSB7XHJcblx0XHR0aGlzLl91bmlmb3JtU3RydWN0LmZvckVhY2goKHVuaWZvcm0pID0+IHtcclxuXHRcdFx0Y29uc3QgcmVzdWx0ID0gdW5pZm9ybS5zZXQoKTtcclxuXHRcdFx0aWYgKHVuaWZvcm0/LmRpcnR5ICE9IHVuZGVmaW5lZCkgdW5pZm9ybS5kaXJ0eSA9IGZhbHNlO1xyXG5cdFx0XHRpZiAocmVzdWx0ICE9IHVuZGVmaW5lZCAmJiB0aGlzLnVuaWZvcm1EaXJ0eSA9PSBmYWxzZSkgdGhpcy51bmlmb3JtRGlydHkgPSByZXN1bHQ7XHJcblx0XHR9KTtcclxuXHRcdGlmICh0aGlzLnVuaWZvcm1EaXJ0eSkge1xyXG5cdFx0XHR0aGlzLnVuaWZvcm1EaXJ0eSA9IGZhbHNlO1xyXG5cdFx0XHRpZiAoIXRoaXMuYnVmZmVyKSB0aGlzLmJ1ZmZlciA9IEJ1ZmZlci5jcmVhdGVVbmlmb3JtQnVmZmVyKHRoaXMubGFiZWwsIGRldmljZSwgdGhpcy5idWZmZXJTaXplLCB0aGlzLnVzYWdlKTtcclxuXHRcdFx0aWYgKHRoaXMudHlwZSAhPSBCdWZmZXJCaW5kaW5nVHlwZS5TdG9yYWdlKVxyXG5cdFx0XHRcdHRoaXMuYnVmZmVyLnNldFN1YkRhdGEoXHJcblx0XHRcdFx0XHQwLFxyXG5cdFx0XHRcdFx0dGhpcy5kYXRhQnVmZmVyLnNsaWNlKDAsIGRlZmF1bHRWYWx1ZSh0aGlzPy5idWZmZXJTaXplIC8gNCwgdGhpcy51bmlmb3Jtc1NpemUpKVxyXG5cdFx0XHRcdCk7XHJcblx0XHR9XHJcblx0fVxyXG5cdHB1YmxpYyBnZXRVbmlmb3JtQnVmZmVyU3RydWN0KCkge1xyXG5cdFx0bGV0IHVuaWZvcm1TdHJ1Y3QgPSBgc3RydWN0IE1hdGVyaWFsVW5pZm9ybSB7XFxuIGA7XHJcblx0XHR0aGlzLl91bmlmb3JtU3RydWN0LmZvckVhY2goKHVuaWZvcm0pID0+IHtcclxuXHRcdFx0dW5pZm9ybVN0cnVjdCArPSB0aGlzLmNyZWF0ZVVuaWZvcm1TdHJpbmcodW5pZm9ybSk7XHJcblx0XHR9KTtcclxuXHRcdHVuaWZvcm1TdHJ1Y3QgKz0gYH1cXG5gO1xyXG5cdFx0cmV0dXJuIHVuaWZvcm1TdHJ1Y3Q7XHJcblx0fVxyXG5cdHByaXZhdGUgY3JlYXRlVW5pZm9ybVN0cmluZyh1bmlmb3JtKSB7XHJcblx0XHRsZXQgcmVzdWx0ID0gYGA7XHJcblx0XHRzd2l0Y2ggKHVuaWZvcm0udHlwZSkge1xyXG5cdFx0XHRjYXNlIFwidmVjMVwiOlxyXG5cdFx0XHRcdHJlc3VsdCA9IGAke3VuaWZvcm0ubmFtZX0gOmYzMixcXG5gO1xyXG5cdFx0XHRcdGJyZWFrO1xyXG5cdFx0XHRjYXNlIFwidmVjMlwiOlxyXG5cdFx0XHRcdHJlc3VsdCA9IGAke3VuaWZvcm0ubmFtZX0gOnZlYzI8ZjMyPixcXG5gO1xyXG5cdFx0XHRcdGJyZWFrO1xyXG5cdFx0XHRjYXNlIFwidmVjM1wiOlxyXG5cdFx0XHRcdHJlc3VsdCA9IGAke3VuaWZvcm0ubmFtZX0gOnZlYzM8ZjMyPixcXG5gO1xyXG5cdFx0XHRcdGJyZWFrO1xyXG5cdFx0XHRjYXNlIFwidmVjNFwiOlxyXG5cdFx0XHRcdHJlc3VsdCA9IGAke3VuaWZvcm0ubmFtZX0gOnZlYzQ8ZjMyPixcXG5gO1xyXG5cdFx0XHRcdGJyZWFrO1xyXG5cdFx0XHRjYXNlIFwibWF0MlwiOlxyXG5cdFx0XHRcdHJlc3VsdCA9IGAke3VuaWZvcm0ubmFtZX0gOm1hdDJ4MjxmMzI+LFxcbmA7XHJcblx0XHRcdFx0YnJlYWs7XHJcblx0XHRcdGNhc2UgXCJtYXQzXCI6XHJcblx0XHRcdFx0cmVzdWx0ID0gYCR7dW5pZm9ybS5uYW1lfSA6bWF0M3gzPGYzMj4sXFxuYDtcclxuXHRcdFx0XHRicmVhaztcclxuXHRcdFx0Y2FzZSBcIm1hdDRcIjpcclxuXHRcdFx0XHRyZXN1bHQgPSBgJHt1bmlmb3JtLm5hbWV9IDptYXQ0eDQ8ZjMyPixcXG5gO1xyXG5cdFx0XHRcdGJyZWFrO1xyXG5cdFx0fVxyXG5cdFx0cmV0dXJuIHJlc3VsdDtcclxuXHR9XHJcblx0Y29udGFpbnMobmFtZTogc3RyaW5nKTogVW5pZm9ybTxhbnk+IHtcclxuXHRcdHJldHVybiB0aGlzLl91bmlmb3JtU3RydWN0LmdldChuYW1lKTtcclxuXHR9XHJcblx0cmVwbGFjZVVuaWZvcm1WYWx1ZShuYW1lOiBzdHJpbmcsIHZhbHVlOiBVbmlmb3JtRnVuYyB8IG51bWJlciB8IG9iamVjdCkge1xyXG5cdFx0Y29uc3QgdW5pZm9ybSA9IHRoaXMuX3VuaWZvcm1TdHJ1Y3QuZ2V0KG5hbWUpO1xyXG5cdFx0aWYgKCF1bmlmb3JtKSByZXR1cm47XHJcblx0XHR1bmlmb3JtLmNiID0gdmFsdWU7XHJcblx0fVxyXG5cdGdldFVuaWZvcm1CeU5hbWUobmFtZTpzdHJpbmcpe1xyXG4gICAgcmV0dXJuIHRoaXMuX3VuaWZvcm1TdHJ1Y3QuZ2V0KG5hbWUpXHJcblx0fVxyXG5cdC8vIHVuaWZvcm1CdWZmZXIuc2V0VmVjM0FycmF5KCd0ZXN0JywoKT0+e3JldHVybiBbbmV3IFZlY3RvcjMoMSwwLDApLG5ldyBWZWN0b3IzKDEsMC44LDAuNSldfSwyKTtcclxuXHQvLyB1bmlmb3JtQnVmZmVyLnNldEZsb2F0QXJyYXkoJ3Rlc3QxJywoKT0+e3JldHVybiBbMC41LDAuNSwxLjBdfSwzKTtcclxuXHQvLyB1bmlmb3JtQnVmZmVyLnNldFZlYzRBcnJheSgndGVzdDQnLCgpPT57cmV0dXJuIFtuZXcgVmVjdG9yNCgwLjUsMC42LDAuMiwxLjApLG5ldyBWZWN0b3I0KDAuNSwwLjgsMC44LDEuMCldfSwyKTtcclxuXHQvLyB1bmlmb3JtQnVmZmVyLnNldFZlYzJBcnJheSgndGVzdDInLCgpPT57cmV0dXJuIFtuZXcgVmVjdG9yMigwLjUsMC42KSxuZXcgVmVjdG9yMigwLjUsMC44LCldfSwyKTtcclxuXHRzZXRVbmlmb3JtKG5hbWU6IHN0cmluZywgdmFsdWU6IFVuaWZvcm1GdW5jIHwgbnVtYmVyIHwgb2JqZWN0LCB1bmlmb3JtVHlwZTogVW5pZm9ybUVudW0sIGNvdW50PzogbnVtYmVyKSB7XHJcblx0XHRpZiAodGhpcy5fdW5pZm9ybVN0cnVjdC5nZXQobmFtZSkpIHJldHVybjtcclxuXHRcdGNvbnN0IFR5cGVVbmlmb3JtID0gVW5pZm9ybUJ1ZmZlci5Vbmlmb3JtVHlwZVt1bmlmb3JtVHlwZV07XHJcblx0XHR0aGlzLmJ5dGVPZmZzZXQgKz0gVW5pZm9ybUJ1ZmZlci5jaGVja1VuaWZvcm1PZmZzZXQodGhpcy5ieXRlT2Zmc2V0LCBUeXBlVW5pZm9ybS5hbGlnbik7XHJcblx0XHRjb25zdCB1bmlmb3JtID1cclxuXHRcdFx0Y291bnQgIT0gdW5kZWZpbmVkXHJcblx0XHRcdFx0PyBuZXcgVHlwZVVuaWZvcm0obmFtZSwgdGhpcy5kYXRhQnVmZmVyLCB0aGlzLmJ5dGVPZmZzZXQsIHZhbHVlLCBjb3VudClcclxuXHRcdFx0XHQ6IG5ldyBUeXBlVW5pZm9ybShuYW1lLCB0aGlzLmRhdGFCdWZmZXIsIHRoaXMuYnl0ZU9mZnNldCwgdmFsdWUpO1xyXG5cdFx0dGhpcy5fdW5pZm9ybVN0cnVjdC5zZXQobmFtZSwgdW5pZm9ybSk7XHJcblx0XHR0aGlzLmJ5dGVPZmZzZXQgKz0gdW5pZm9ybS5ieXRlU2l6ZTtcclxuXHR9XHJcblx0c2V0VW5pZm9ybXNGcm9tVW5pZm9ybUJ1ZmZlcih1bmlmb3JtQnVmZmVyOlVuaWZvcm1CdWZmZXIpe1xyXG4gICAgdGhpcy5fdW5pZm9ybVN0cnVjdC5mb3JFYWNoKCh2YWx1ZSxrZXkpPT57XHJcbiAgICAgICBjb25zdCB1bmlmb3JtID11bmlmb3JtQnVmZmVyLmdldFVuaWZvcm1CeU5hbWUoa2V5KTtcclxuXHRcdFx0aWYodW5pZm9ybSl0aGlzLl91bmlmb3JtU3RydWN0LnNldChrZXksdW5pZm9ybSlcclxuXHRcdH0pXHJcblx0fVxyXG5cdHN0YXRpYyBjaGVja1VuaWZvcm1PZmZzZXQoYnl0ZVNpemU6IG51bWJlciwgQWxpZ246IG51bWJlcik6IG51bWJlciB7XHJcblx0XHQvLyBmcm9tIGh0dHBzOi8vZ3B1d2ViLmdpdGh1Yi5pby9ncHV3ZWIvd2dzbC8jYWRkcmVzcy1zcGFjZS1sYXlvdXQtY29uc3RyYWludHNcclxuXHRcdC8vIHJldHVybiB0aGlzLmhhc0R5bmFtaWNPZmZzZXRcclxuXHRcdC8vIFx0PyBNYXRoLmNlaWwoYnl0ZVNpemUgLyAyNTYpICogMjU2IC0gYnl0ZVNpemVcclxuXHRcdC8vIFx0OiBNYXRoLmNlaWwoYnl0ZVNpemUgLyBBbGlnbikgKiBBbGlnbiAtIGJ5dGVTaXplO1xyXG5cdFx0cmV0dXJuIE1hdGguY2VpbChieXRlU2l6ZSAvIEFsaWduKSAqIEFsaWduIC0gYnl0ZVNpemU7XHJcblx0fVxyXG5cdGRlc3Ryb3koKSB7XHJcblx0XHR0aGlzPy5idWZmZXI/LmRlc3Ryb3koKTtcclxuXHR9XHJcbn1cclxudHlwZSBVbmlmb3JtQnVmZmVyUGFyYW1zID0ge1xyXG5cdGxhYmVsOiBzdHJpbmc7XHJcblx0dHlwZT86IHN0cmluZztcclxuXHR1c2FnZT86IEJ1ZmZlclVzYWdlO1xyXG5cdHNpemU/OiBudW1iZXI7XHJcblx0ZGF0YUJ1ZmZlcj86IEZsb2F0MzJBcnJheTtcclxuXHRiaW5kaW5nPzogbnVtYmVyO1xyXG5cdGhhc0R5bmFtaWNPZmZzZXQ/OiBib29sZWFuO1xyXG5cdG1pbkJpbmRpbmdTaXplPzogbnVtYmVyO1xyXG5cdG1heE9mZnNldD86IG51bWJlcjtcclxuXHRidWZmZXI/OiBCdWZmZXI7XHJcblx0dmlzaWJpbGl0eT86IFNoYWRlclN0YWdlO1xyXG59O1xyXG4iLCJpbXBvcnQgeyBJVW5pZm9ybSwgVW5pZm9ybUVudW0gfSBmcm9tIFwiLi4vY29yZS9XZWJHUFVUeXBlc1wiO1xyXG5pbXBvcnQgeyBNZXNoIH0gZnJvbSBcIi4uL21lc2gvTWVzaFwiO1xyXG5pbXBvcnQgU2hhZGVyRGF0YSBmcm9tIFwiLi4vcmVuZGVyL1NoYWRlckRhdGFcIjtcclxuaW1wb3J0IFVuaWZvcm1CdWZmZXIgZnJvbSBcIi4uL3JlbmRlci9Vbmlmb3JtQnVmZmVyXCI7XHJcbmNvbnN0IHVuaWZvcm1BcnJheU5hbWVzID0gW1wiYXJyYXk8ZjMyPlwiLCBcImFycmF5PHZlYzI8ZjMyPj5cIiwgXCJhcnJheTx2ZWMzPGYzMj4+XCIsIFwiYXJyYXk8dmVjNDxmMzI+PlwiXTtcclxuZXhwb3J0IGZ1bmN0aW9uIGNoZWNrQ29udGFpbkZsb2F0VHlwZSh1bmlmb3Jtcykge1xyXG5cdGxldCByZXN1bHQgPSAwO1xyXG5cdGxldCBoYXNBcnJheXR5cGUgPSBmYWxzZTtcclxuXHRjb25zdCB1bmlmb3Jtc05hbWVzID0gT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXModW5pZm9ybXMpO1xyXG5cdHVuaWZvcm1zTmFtZXMubWFwKCh1bmlmb3Jtc05hbWUpID0+IHtcclxuXHRcdGlmICh1bmlmb3Jtc1t1bmlmb3Jtc05hbWVdLnR5cGUgPT0gXCJ0ZXh0dXJlXCIgfHwgdW5pZm9ybXNbdW5pZm9ybXNOYW1lXS50eXBlID09IFwic2FtcGxlclwiKSB7XHJcblx0XHRcdHJlc3VsdCArPSAwO1xyXG5cdFx0fSBlbHNlIHtcclxuXHRcdFx0aWYgKFxyXG5cdFx0XHRcdHVuaWZvcm1BcnJheU5hbWVzLmZpbmQoKG5hbWUpID0+IHtcclxuXHRcdFx0XHRcdHJldHVybiBuYW1lID09PSB1bmlmb3Jtc1t1bmlmb3Jtc05hbWVdLnR5cGU7XHJcblx0XHRcdFx0fSlcclxuXHRcdFx0KSB7XHJcblx0XHRcdFx0aGFzQXJyYXl0eXBlID0gdHJ1ZTtcclxuXHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHRyZXN1bHQgKz0gMTtcclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cdH0pO1xyXG5cdHJldHVybiB7XHJcblx0XHRoYXNGbG9hdDogcmVzdWx0LFxyXG5cdFx0aGFzQXJyYXl0eXBlXHJcblx0fTtcclxufVxyXG5leHBvcnQgZnVuY3Rpb24gYWRkVW5pZm9ybVRvU2hhZGVyRGF0YShcclxuXHRuYW1lOiBzdHJpbmcsXHJcblx0dW5pZm9ybTogSVVuaWZvcm0sXHJcblx0c2hhZGVyRGF0YTogU2hhZGVyRGF0YSxcclxuXHRtZXNoPzogTWVzaCxcclxuXHR1bmlmb3JtQnVmZmVyPzogVW5pZm9ybUJ1ZmZlclxyXG4pIHtcclxuXHRjb25zdCB2YWx1ZUlzRnVuYyA9IHVuaWZvcm0/LnZhbHVlIGluc3RhbmNlb2YgRnVuY3Rpb247XHJcblx0c3dpdGNoICh1bmlmb3JtLnR5cGUpIHtcclxuXHRcdGNhc2UgXCJmMzJcIjpcclxuXHRcdFx0dW5pZm9ybUJ1ZmZlci5zZXRVbmlmb3JtKFxyXG5cdFx0XHRcdG5hbWUsXHJcblx0XHRcdFx0dmFsdWVJc0Z1bmNcclxuXHRcdFx0XHRcdD8gdW5pZm9ybS52YWx1ZVxyXG5cdFx0XHRcdFx0OiAoKSA9PiB7XHJcblx0XHRcdFx0XHRcdFx0cmV0dXJuIHVuaWZvcm0udmFsdWU7XHJcblx0XHRcdFx0XHQgIH0sXHJcblx0XHRcdFx0VW5pZm9ybUVudW0uRmxvYXRcclxuXHRcdFx0KTtcclxuXHRcdFx0YnJlYWs7XHJcblx0XHRjYXNlIFwidmVjMjxmMzI+XCI6XHJcblx0XHRcdHVuaWZvcm1CdWZmZXIuc2V0VW5pZm9ybShcclxuXHRcdFx0XHRuYW1lLFxyXG5cdFx0XHRcdHZhbHVlSXNGdW5jXHJcblx0XHRcdFx0XHQ/IHVuaWZvcm0udmFsdWVcclxuXHRcdFx0XHRcdDogKCkgPT4ge1xyXG5cdFx0XHRcdFx0XHRcdHJldHVybiB1bmlmb3JtLnZhbHVlO1xyXG5cdFx0XHRcdFx0ICB9LFxyXG5cdFx0XHRcdFVuaWZvcm1FbnVtLkZsb2F0VmVjMlxyXG5cdFx0XHQpO1xyXG5cdFx0XHRicmVhaztcclxuXHRcdGNhc2UgXCJ2ZWMzPGYzMj5cIjpcclxuXHRcdFx0dW5pZm9ybUJ1ZmZlci5zZXRVbmlmb3JtKFxyXG5cdFx0XHRcdG5hbWUsXHJcblx0XHRcdFx0dmFsdWVJc0Z1bmNcclxuXHRcdFx0XHRcdD8gdW5pZm9ybS52YWx1ZVxyXG5cdFx0XHRcdFx0OiAoKSA9PiB7XHJcblx0XHRcdFx0XHRcdFx0cmV0dXJuIHVuaWZvcm0udmFsdWU7XHJcblx0XHRcdFx0XHQgIH0sXHJcblx0XHRcdFx0VW5pZm9ybUVudW0uRmxvYXRWZWMzXHJcblx0XHRcdCk7XHJcblx0XHRcdGJyZWFrO1xyXG5cdFx0Y2FzZSBcImNvbG9yXCI6XHJcblx0XHRcdHVuaWZvcm1CdWZmZXIuc2V0VW5pZm9ybShcclxuXHRcdFx0XHRuYW1lLFxyXG5cdFx0XHRcdHZhbHVlSXNGdW5jXHJcblx0XHRcdFx0XHQ/IHVuaWZvcm0udmFsdWVcclxuXHRcdFx0XHRcdDogKCkgPT4ge1xyXG5cdFx0XHRcdFx0XHRcdHJldHVybiB1bmlmb3JtLnZhbHVlO1xyXG5cdFx0XHRcdFx0ICB9LFxyXG5cdFx0XHRcdFVuaWZvcm1FbnVtLkNvbG9yXHJcblx0XHRcdCk7XHJcblx0XHRcdGJyZWFrO1xyXG5cdFx0Y2FzZSBcInZlYzQ8ZjMyPlwiOlxyXG5cdFx0XHR1bmlmb3JtQnVmZmVyLnNldFVuaWZvcm0oXHJcblx0XHRcdFx0bmFtZSxcclxuXHRcdFx0XHR2YWx1ZUlzRnVuY1xyXG5cdFx0XHRcdFx0PyB1bmlmb3JtLnZhbHVlXHJcblx0XHRcdFx0XHQ6ICgpID0+IHtcclxuXHRcdFx0XHRcdFx0XHRyZXR1cm4gdW5pZm9ybS52YWx1ZTtcclxuXHRcdFx0XHRcdCAgfSxcclxuXHRcdFx0XHRVbmlmb3JtRW51bS5GbG9hdFZlYzRcclxuXHRcdFx0KTtcclxuXHRcdFx0YnJlYWs7XHJcblx0XHRjYXNlIFwibWF0MngyPGYzMj5cIjpcclxuXHRcdFx0dW5pZm9ybUJ1ZmZlci5zZXRVbmlmb3JtKFxyXG5cdFx0XHRcdG5hbWUsXHJcblx0XHRcdFx0dmFsdWVJc0Z1bmNcclxuXHRcdFx0XHRcdD8gdW5pZm9ybS52YWx1ZVxyXG5cdFx0XHRcdFx0OiAoKSA9PiB7XHJcblx0XHRcdFx0XHRcdFx0cmV0dXJuIHVuaWZvcm0udmFsdWU7XHJcblx0XHRcdFx0XHQgIH0sXHJcblx0XHRcdFx0VW5pZm9ybUVudW0uTWF0MlxyXG5cdFx0XHQpO1xyXG5cdFx0XHRicmVhaztcclxuXHRcdGNhc2UgXCJtYXQzeDM8ZjMyPlwiOlxyXG5cdFx0XHR1bmlmb3JtQnVmZmVyLnNldFVuaWZvcm0oXHJcblx0XHRcdFx0bmFtZSxcclxuXHRcdFx0XHR2YWx1ZUlzRnVuY1xyXG5cdFx0XHRcdFx0PyB1bmlmb3JtLnZhbHVlXHJcblx0XHRcdFx0XHQ6ICgpID0+IHtcclxuXHRcdFx0XHRcdFx0XHRyZXR1cm4gdW5pZm9ybS52YWx1ZTtcclxuXHRcdFx0XHRcdCAgfSxcclxuXHRcdFx0XHRVbmlmb3JtRW51bS5NYXQzXHJcblx0XHRcdCk7XHJcblx0XHRcdGJyZWFrO1xyXG5cdFx0Y2FzZSBcIm1hdDR4NDxmMzI+XCI6XHJcblx0XHRcdHVuaWZvcm1CdWZmZXIuc2V0VW5pZm9ybShcclxuXHRcdFx0XHRuYW1lLFxyXG5cdFx0XHRcdHZhbHVlSXNGdW5jXHJcblx0XHRcdFx0XHQ/IHVuaWZvcm0udmFsdWVcclxuXHRcdFx0XHRcdDogKCkgPT5cclxuXHRcdFx0XHRcdFx0XHRuYW1lID09IFwibW9kZWxNYXRyaXhcIlxyXG5cdFx0XHRcdFx0XHRcdFx0PyBtZXNoPy5tb2RlbE1hdHJpeFxyXG5cdFx0XHRcdFx0XHRcdFx0OiBuYW1lID09PSBcIm5vcm1hbE1hdHJpeFwiXHJcblx0XHRcdFx0XHRcdFx0XHQ/IG1lc2g/Lm5vcm1hbE1hdHJpeFxyXG5cdFx0XHRcdFx0XHRcdFx0OiB1bmlmb3JtLnZhbHVlLFxyXG5cdFx0XHRcdFVuaWZvcm1FbnVtLk1hdDRcclxuXHRcdFx0KTtcclxuXHRcdFx0YnJlYWs7XHJcblx0XHRjYXNlIFwiYXJyYXk8ZjMyPlwiOlxyXG5cdFx0XHR1bmlmb3JtQnVmZmVyLnNldFVuaWZvcm0oXHJcblx0XHRcdFx0bmFtZSxcclxuXHRcdFx0XHR2YWx1ZUlzRnVuY1xyXG5cdFx0XHRcdFx0PyB1bmlmb3JtLnZhbHVlXHJcblx0XHRcdFx0XHQ6ICgpID0+IHtcclxuXHRcdFx0XHRcdFx0XHRyZXR1cm4gdW5pZm9ybS52YWx1ZTtcclxuXHRcdFx0XHRcdCAgfSxcclxuXHRcdFx0XHRVbmlmb3JtRW51bS5GbG9hdEFycmF5LFxyXG5cdFx0XHRcdHVuaWZvcm0udmFsdWUubGVuZ3RoXHJcblx0XHRcdCk7XHJcblx0XHRcdGJyZWFrO1xyXG5cdFx0Y2FzZSBcImFycmF5PHZlYzI8ZjMyPj5cIjpcclxuXHRcdFx0dW5pZm9ybUJ1ZmZlci5zZXRVbmlmb3JtKFxyXG5cdFx0XHRcdG5hbWUsXHJcblx0XHRcdFx0dmFsdWVJc0Z1bmNcclxuXHRcdFx0XHRcdD8gdW5pZm9ybS52YWx1ZVxyXG5cdFx0XHRcdFx0OiAoKSA9PiB7XHJcblx0XHRcdFx0XHRcdFx0cmV0dXJuIHVuaWZvcm0udmFsdWU7XHJcblx0XHRcdFx0XHQgIH0sXHJcblx0XHRcdFx0VW5pZm9ybUVudW0uVmVjMkFycmF5LFxyXG5cdFx0XHRcdHVuaWZvcm0udmFsdWUubGVuZ3RoXHJcblx0XHRcdCk7XHJcblx0XHRcdGJyZWFrO1xyXG5cdFx0Y2FzZSBcImFycmF5PHZlYzM8ZjMyPj5cIjpcclxuXHRcdFx0dW5pZm9ybUJ1ZmZlci5zZXRVbmlmb3JtKFxyXG5cdFx0XHRcdG5hbWUsXHJcblx0XHRcdFx0dmFsdWVJc0Z1bmNcclxuXHRcdFx0XHRcdD8gdW5pZm9ybS52YWx1ZVxyXG5cdFx0XHRcdFx0OiAoKSA9PiB7XHJcblx0XHRcdFx0XHRcdFx0cmV0dXJuIHVuaWZvcm0udmFsdWU7XHJcblx0XHRcdFx0XHQgIH0sXHJcblx0XHRcdFx0VW5pZm9ybUVudW0uVmVjM0FycmF5LFxyXG5cdFx0XHRcdHVuaWZvcm0udmFsdWUubGVuZ3RoXHJcblx0XHRcdCk7XHJcblx0XHRcdGJyZWFrO1xyXG5cdFx0Y2FzZSBcImFycmF5PHZlYzQ8ZjMyPj5cIjpcclxuXHRcdFx0dW5pZm9ybUJ1ZmZlci5zZXRVbmlmb3JtKFxyXG5cdFx0XHRcdG5hbWUsXHJcblx0XHRcdFx0dmFsdWVJc0Z1bmNcclxuXHRcdFx0XHRcdD8gdW5pZm9ybS52YWx1ZVxyXG5cdFx0XHRcdFx0OiAoKSA9PiB7XHJcblx0XHRcdFx0XHRcdFx0cmV0dXJuIHVuaWZvcm0udmFsdWU7XHJcblx0XHRcdFx0XHQgIH0sXHJcblx0XHRcdFx0VW5pZm9ybUVudW0uVmVjNEFycmF5LFxyXG5cdFx0XHRcdHVuaWZvcm0udmFsdWUubGVuZ3RoXHJcblx0XHRcdCk7XHJcblx0XHRcdGJyZWFrO1xyXG5cdFx0Y2FzZSBcInRleHR1cmVcIjpcclxuXHRcdGNhc2UgXCJzdG9yYWdlVGV4dHVyZVwiOlxyXG5cdFx0XHRzaGFkZXJEYXRhLnNldFRleHR1cmUoXHJcblx0XHRcdFx0bmFtZSxcclxuXHRcdFx0XHR2YWx1ZUlzRnVuY1xyXG5cdFx0XHRcdFx0PyB1bmlmb3JtLnZhbHVlXHJcblx0XHRcdFx0XHQ6ICgpID0+IHtcclxuXHRcdFx0XHRcdFx0XHRyZXR1cm4gdW5pZm9ybS52YWx1ZTtcclxuXHRcdFx0XHRcdCAgfSxcclxuXHRcdFx0XHR1bmlmb3JtPy5iaW5kaW5nLFxyXG5cdFx0XHRcdHVuaWZvcm0/LnR5cGUsXHJcblx0XHRcdFx0dW5pZm9ybT8udmlzaWJpbGl0eSxcclxuXHRcdFx0XHR1bmlmb3JtPy50ZXh0dXJlVmlld1xyXG5cdFx0XHQpO1xyXG5cdFx0XHRicmVhaztcclxuXHRcdGNhc2UgXCJzYW1wbGVyXCI6XHJcblx0XHRcdHNoYWRlckRhdGEuc2V0U2FtcGxlcihcclxuXHRcdFx0XHRuYW1lLFxyXG5cdFx0XHRcdHZhbHVlSXNGdW5jXHJcblx0XHRcdFx0XHQ/IHVuaWZvcm0udmFsdWVcclxuXHRcdFx0XHRcdDogKCkgPT4ge1xyXG5cdFx0XHRcdFx0XHRcdHJldHVybiB1bmlmb3JtLnZhbHVlO1xyXG5cdFx0XHRcdFx0ICB9LFxyXG5cdFx0XHRcdHVuaWZvcm0/LmJpbmRpbmcsXHJcblx0XHRcdFx0dW5pZm9ybT8udmlzaWJpbGl0eVxyXG5cdFx0XHQpO1xyXG5cdFx0XHRicmVhaztcclxuXHRcdGRlZmF1bHQ6XHJcblx0XHRcdHRocm93IG5ldyBFcnJvcihcIm5vdCBtYXRjaCB1bmlmcm9tIHR5cGVcIik7XHJcblx0fVxyXG59XHJcbiIsImltcG9ydCBCaW5kR3JvdXBMYXlvdXRFbnRyeSBmcm9tIFwiLi9CaW5kR3JvdXBMYXlvdXRFbnRyeVwiO1xyXG5jb25zdCBsYXlvdXRDYWNoZSA9IG5ldyBNYXAoKTtcclxuY2xhc3MgQmluZEdyb3VwTGF5b3V0IHtcclxuXHRwdWJsaWMgZ3B1QmluZEdyb3VwTGF5b3V0OiBHUFVCaW5kR3JvdXBMYXlvdXQ7XHJcblx0aW5kZXg6IG51bWJlcjtcclxuXHRwcml2YXRlIGNvbnN0cnVjdG9yKGRldmljZTogR1BVRGV2aWNlLCBsYWJlbDogc3RyaW5nLCBwdWJsaWMgZW50cmllczogQmluZEdyb3VwTGF5b3V0RW50cnlbXSA9IFtdLCBpbmRleCA9IDApIHtcclxuXHRcdHRoaXMuaW5kZXggPSBpbmRleCB8fCAwO1xyXG5cdFx0dGhpcy5ncHVCaW5kR3JvdXBMYXlvdXQgPSBkZXZpY2UuY3JlYXRlQmluZEdyb3VwTGF5b3V0KHtcclxuXHRcdFx0bGFiZWw6IGxhYmVsLFxyXG5cdFx0XHRlbnRyaWVzOiBlbnRyaWVzLm1hcCgoeyB2aXNpYmlsaXR5LCBidWZmZXIsIHNhbXBsZXIsIHRleHR1cmUsIHN0b3JhZ2VUZXh0dXJlLCBiaW5kaW5nIH0pID0+ICh7XHJcblx0XHRcdFx0YmluZGluZyxcclxuXHRcdFx0XHR2aXNpYmlsaXR5LFxyXG5cdFx0XHRcdGJ1ZmZlcixcclxuXHRcdFx0XHRzYW1wbGVyLFxyXG5cdFx0XHRcdHRleHR1cmUsXHJcblx0XHRcdFx0c3RvcmFnZVRleHR1cmVcclxuXHRcdFx0fSkpXHJcblx0XHR9KTtcclxuXHR9XHJcblx0c3RhdGljIGdldEJpbmRHcm91cExheW91dEZyb21DYWNoZShcclxuXHRcdGRldmljZTogR1BVRGV2aWNlLFxyXG5cdFx0bGFiZWw6IHN0cmluZyxcclxuXHRcdGVudGlyZXM6IEJpbmRHcm91cExheW91dEVudHJ5W10sXHJcblx0XHRpbmRleFxyXG5cdCk6IEJpbmRHcm91cExheW91dCB7XHJcblx0XHRpZiAobGF5b3V0Q2FjaGUuaGFzKGxhYmVsKSkge1xyXG5cdFx0XHRyZXR1cm4gbGF5b3V0Q2FjaGUuZ2V0KGxhYmVsKTtcclxuXHRcdH0gZWxzZSB7XHJcblx0XHRcdGNvbnN0IGJpbmRHcm91cExheW91dCA9IG5ldyBCaW5kR3JvdXBMYXlvdXQoZGV2aWNlLCBsYWJlbCwgZW50aXJlcywgaW5kZXgpO1xyXG5cdFx0XHRsYXlvdXRDYWNoZS5zZXQobGFiZWwsIGJpbmRHcm91cExheW91dCk7XHJcblx0XHRcdHJldHVybiBiaW5kR3JvdXBMYXlvdXQ7XHJcblx0XHR9XHJcblx0fVxyXG5cdHN0YXRpYyByZW1vdmVCaW5kR3JvdXBMYXlvdXRGcm9tQ2FjaGUoYmluZEdyb3VwTGF5b3V0OiBCaW5kR3JvdXBMYXlvdXQpIHtcclxuXHRcdGxheW91dENhY2hlLmRlbGV0ZShiaW5kR3JvdXBMYXlvdXQpO1xyXG5cdH1cclxufVxyXG5cclxuZXhwb3J0IGRlZmF1bHQgQmluZEdyb3VwTGF5b3V0O1xyXG4iLCJpbXBvcnQgeyBCaW5kR3JvdXBMYXlvdXRFbnRyeVR5cGUgfSBmcm9tIFwiLi4vY29yZS9XZWJHUFVUeXBlc1wiO1xyXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBCaW5kR3JvdXBMYXlvdXRFbnRyeSB7XHJcblx0YmluZGluZzogbnVtYmVyO1xyXG5cdHZpc2liaWxpdHk6IEdQVVNoYWRlclN0YWdlRmxhZ3M7XHJcblx0dW5pZm9ybXM/OiBhbnlbXTtcclxuXHRidWZmZXI/OiBHUFVCdWZmZXJCaW5kaW5nTGF5b3V0O1xyXG5cdHNhbXBsZXI/OiBHUFVTYW1wbGVyQmluZGluZ0xheW91dDtcclxuXHR0ZXh0dXJlPzogR1BVVGV4dHVyZUJpbmRpbmdMYXlvdXQ7XHJcblx0c3RvcmFnZVRleHR1cmU/OiBHUFVTdG9yYWdlVGV4dHVyZUJpbmRpbmdMYXlvdXQ7XHJcblx0ZXh0ZXJuYWxUZXh0dXJlPzogR1BVRXh0ZXJuYWxUZXh0dXJlQmluZGluZ0xheW91dDtcclxuXHRjb25zdHJ1Y3RvcihvcHRpb25zOiBCaW5kR3JvdXBMYXlvdXRFbnRyeVR5cGUpIHtcclxuXHRcdHRoaXMuYmluZGluZyA9IG9wdGlvbnMuYmluZGluZztcclxuXHRcdHRoaXMudmlzaWJpbGl0eSA9IG9wdGlvbnMudmlzaWJpbGl0eTtcclxuXHRcdHRoaXMuYnVmZmVyID0gb3B0aW9ucy5idWZmZXI7XHJcblx0XHR0aGlzLnNhbXBsZXIgPSBvcHRpb25zLnNhbXBsZXI7XHJcblx0XHR0aGlzLnRleHR1cmUgPSBvcHRpb25zLnRleHR1cmU7XHJcblx0XHR0aGlzLnN0b3JhZ2VUZXh0dXJlID0gb3B0aW9ucy5zdG9yYWdlVGV4dHVyZTtcclxuXHRcdHRoaXMuZXh0ZXJuYWxUZXh0dXJlID0gb3B0aW9ucy5leHRlcm5hbFRleHR1cmU7XHJcblx0fVxyXG5cdGdldEdQVUxheW91dEVudGl0eSgpIHtcclxuXHRcdHJldHVybiB7XHJcblx0XHRcdGJpbmRpbmc6IHRoaXMuYmluZGluZyxcclxuXHRcdFx0dmlzaWJpbGl0eTogdGhpcy52aXNpYmlsaXR5LFxyXG5cdFx0XHRidWZmZXI6IHRoaXMuYnVmZmVyLFxyXG5cdFx0XHRzYW1wbGVyOiB0aGlzLnNhbXBsZXIsXHJcblx0XHRcdHRleHR1cmU6IHRoaXMudGV4dHVyZSxcclxuXHRcdFx0ZXh0ZXJuYWxUZXh0dXJlOiB0aGlzLmV4dGVybmFsVGV4dHVyZSxcclxuXHRcdFx0c3RvcmFnZVRleHR1cmU6IHRoaXMuc3RvcmFnZVRleHR1cmVcclxuXHRcdH07XHJcblx0fVxyXG59XHJcbiIsImltcG9ydCB7IFNoYWRlclN0YWdlIH0gZnJvbSBcIi4uL2NvcmUvV2ViR1BVQ29uc3RhbnRcIjtcclxuaW1wb3J0IHsgVW5pZm9ybUZ1bmMsIFNoYWRlckRlZmluZSB9IGZyb20gXCIuLi9jb3JlL1dlYkdQVVR5cGVzXCI7XHJcbmltcG9ydCBkZWZhdWx0VmFsdWUgZnJvbSBcIi4uL3V0aWxzL2RlZmF1bHRWYWx1ZVwiO1xyXG5pbXBvcnQgQmluZEdyb3VwIGZyb20gXCIuL0JpbmRHcm91cFwiO1xyXG5pbXBvcnQgQmluZEdyb3VwRW50aXR5IGZyb20gXCIuL0JpbmRHcm91cEVudGl0eVwiO1xyXG5pbXBvcnQgQmluZEdyb3VwTGF5b3V0IGZyb20gXCIuL0JpbmRHcm91cExheW91dFwiO1xyXG5pbXBvcnQgQmluZEdyb3VwTGF5b3V0RW50cnkgZnJvbSBcIi4vQmluZEdyb3VwTGF5b3V0RW50cnlcIjtcclxuaW1wb3J0IFNhbXBsZXIgZnJvbSBcIi4vU2FtcGxlclwiO1xyXG5pbXBvcnQgVGV4dHVyZSBmcm9tIFwiLi9UZXh0dXJlXCI7XHJcbmltcG9ydCBVbmlmb3JtQnVmZmVyIGZyb20gXCIuL1VuaWZvcm1CdWZmZXJcIjtcclxuaW1wb3J0IHsgVW5pZm9ybVNhbXBsZXIsIFVuaWZvcm1UZXh0dXJlIH0gZnJvbSBcIi4vVW5pZm9ybXNcIjtcclxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgU2hhZGVyRGF0YSB7XHJcblx0Y3VycmVudEJpbmRpbmc6IG51bWJlcjtcclxuXHJcblx0ZGVmaW5lczogU2hhZGVyRGVmaW5lO1xyXG5cclxuXHRkZWZpbmVEaXJ0eTogYm9vbGVhbjtcclxuXHJcblx0bGFiZWw6IHN0cmluZztcclxuXHJcblx0YmluZEdyb3VwOiBCaW5kR3JvdXA7XHJcblxyXG5cdGdyb3VwTGF5b3V0OiBCaW5kR3JvdXBMYXlvdXQ7XHJcblxyXG5cdGxheW91dEluZGV4OiBudW1iZXI7XHJcblxyXG5cdGdyb3VwSW5kZXg6IG51bWJlcjtcclxuXHJcblx0cHJvdGVjdGVkIF91bmlmb3JtczogTWFwPHN0cmluZywgYW55PjtcclxuXHJcblx0Y29uc3RydWN0b3IobGFiZWw6IHN0cmluZywgc2l6ZT86IG51bWJlciwgbGF5b3V0SW5kZXg/OiBudW1iZXIsIGdyb3VwSW5kZXg/KSB7XHJcblx0XHR0aGlzLmxhYmVsID0gbGFiZWw7XHJcblx0XHR0aGlzLmN1cnJlbnRCaW5kaW5nID0gMDtcclxuXHRcdHRoaXMuZGVmaW5lRGlydHkgPSB0cnVlO1xyXG5cdFx0dGhpcy5kZWZpbmVzID0ge307XHJcblx0XHR0aGlzLl91bmlmb3JtcyA9IG5ldyBNYXAoKTtcclxuXHRcdHRoaXMuZ3JvdXBJbmRleCA9IGRlZmF1bHRWYWx1ZShncm91cEluZGV4LCAwKTtcclxuXHRcdHRoaXMubGF5b3V0SW5kZXggPSBkZWZhdWx0VmFsdWUobGF5b3V0SW5kZXgsIDApO1xyXG5cdH1cclxuXHRnZXRVbmlmb3JtQnVmZmVyKG5hbWU6IHN0cmluZyk6IFVuaWZvcm1CdWZmZXIge1xyXG5cdFx0cmV0dXJuIHRoaXMuX3VuaWZvcm1zLmdldChuYW1lKTtcclxuXHR9XHJcblx0Z2V0VGV4dHVyZShuYW1lOiBzdHJpbmcpOiBUZXh0dXJlIHtcclxuXHRcdHJldHVybiB0aGlzLl91bmlmb3Jtcy5nZXQobmFtZSk7XHJcblx0fVxyXG5cdGdldFNhbXBsZXIobmFtZTogc3RyaW5nKTogU2FtcGxlciB7XHJcblx0XHRyZXR1cm4gdGhpcy5fdW5pZm9ybXMuZ2V0KG5hbWUpO1xyXG5cdH1cclxuXHRzZXRVbmlmb3JtQnVmZmVyKG5hbWU6IHN0cmluZywgdW5pZm9ybUJ1ZmZlcjogVW5pZm9ybUJ1ZmZlciwgYmluZGluZz86IG51bWJlcikge1xyXG5cdFx0aWYgKHRoaXMuX3VuaWZvcm1zLmdldChuYW1lKSkgcmV0dXJuO1xyXG5cdFx0dW5pZm9ybUJ1ZmZlci5iaW5kaW5nID0gdGhpcy5jdXJyZW50QmluZGluZztcclxuXHRcdHRoaXMuc2V0RGVmaW5lKG5hbWUuY29uY2F0KFwiQmluZGluZ1wiKSwgYmluZGluZyA/PyB0aGlzLmN1cnJlbnRCaW5kaW5nKTtcclxuXHRcdHRoaXMuY3VycmVudEJpbmRpbmcgKz0gMTtcclxuXHRcdHRoaXMuX3VuaWZvcm1zLnNldChuYW1lLCB1bmlmb3JtQnVmZmVyKTtcclxuXHR9XHJcblx0c2V0VGV4dHVyZShcclxuXHRcdG5hbWU6IHN0cmluZyxcclxuXHRcdHZhbHVlOiBVbmlmb3JtRnVuYyB8IFRleHR1cmUsXHJcblx0XHRiaW5kaW5nPzogbnVtYmVyLFxyXG5cdFx0dHlwZT86IHN0cmluZyxcclxuXHRcdHZpc2liaWxpdHk/OiBTaGFkZXJTdGFnZSxcclxuXHRcdHRleHR1cmVWaWV3PzogR1BVVGV4dHVyZVZpZXdcclxuXHQpIHtcclxuXHRcdGlmICh0aGlzLl91bmlmb3Jtcy5nZXQobmFtZSkpIHJldHVybjtcclxuXHRcdGNvbnN0IHVuaWZvcm0gPSBuZXcgVW5pZm9ybVRleHR1cmUobmFtZSwgYmluZGluZyA/PyB0aGlzLmN1cnJlbnRCaW5kaW5nLCB2YWx1ZSwgdHlwZSwgdmlzaWJpbGl0eSwgdGV4dHVyZVZpZXcpO1xyXG5cdFx0dGhpcy5zZXREZWZpbmUobmFtZS5jb25jYXQoXCJCaW5kaW5nXCIpLCBiaW5kaW5nID8/IHRoaXMuY3VycmVudEJpbmRpbmcpO1xyXG5cdFx0dGhpcy5jdXJyZW50QmluZGluZyArPSAxO1xyXG5cdFx0dGhpcy5fdW5pZm9ybXMuc2V0KG5hbWUsIHVuaWZvcm0pO1xyXG5cdH1cclxuXHRzZXRTYW1wbGVyKG5hbWU6IHN0cmluZywgdmFsdWU6IFVuaWZvcm1GdW5jIHwgU2FtcGxlciwgYmluZGluZz86IG51bWJlciwgdmlzaWJpbGl0eT86IFNoYWRlclN0YWdlKSB7XHJcblx0XHRpZiAodGhpcy5fdW5pZm9ybXMuZ2V0KG5hbWUpKSByZXR1cm47XHJcblx0XHRjb25zdCB1bmlmb3JtID0gbmV3IFVuaWZvcm1TYW1wbGVyKG5hbWUsIGJpbmRpbmcgPz8gdGhpcy5jdXJyZW50QmluZGluZywgdmFsdWUsIHZpc2liaWxpdHkpO1xyXG5cdFx0dGhpcy5zZXREZWZpbmUobmFtZS5jb25jYXQoXCJCaW5kaW5nXCIpLCBiaW5kaW5nID8/IHRoaXMuY3VycmVudEJpbmRpbmcpO1xyXG5cdFx0dGhpcy5jdXJyZW50QmluZGluZyArPSAxO1xyXG5cdFx0dGhpcy5fdW5pZm9ybXMuc2V0KG5hbWUsIHVuaWZvcm0pO1xyXG5cdH1cclxuXHRzZXREZWZpbmUobmFtZTogc3RyaW5nLCB2YWx1ZTogYm9vbGVhbiB8IG51bWJlcikge1xyXG5cdFx0aWYgKHRoaXMuZGVmaW5lc1tuYW1lXSA9PT0gdW5kZWZpbmVkKSB7XHJcblx0XHRcdHRoaXMuZGVmaW5lRGlydHkgPSB0cnVlO1xyXG5cdFx0XHR0aGlzLmRlZmluZXNbbmFtZV0gPSB2YWx1ZTtcclxuXHRcdH0gZWxzZSB7XHJcblx0XHRcdGlmICh0aGlzLmRlZmluZXNbbmFtZV0gPT09IHZhbHVlKSB7XHJcblx0XHRcdFx0cmV0dXJuO1xyXG5cdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdHRoaXMuZGVmaW5lRGlydHkgPSB0cnVlO1xyXG5cdFx0XHRcdHRoaXMuZGVmaW5lc1tuYW1lXSA9IHZhbHVlO1xyXG5cdFx0XHR9XHJcblx0XHR9XHJcblx0fVxyXG5cdHJlcGxhY2VVbmlmb3JtQnVmZmVyVmFsdWUobmFtZTogc3RyaW5nLCB2YWx1ZTogVW5pZm9ybUZ1bmMgfCBudW1iZXIgfCBvYmplY3QpIHtcclxuXHRcdHRoaXMuX3VuaWZvcm1zLmZvckVhY2goKHVuaWZvcm0pID0+IHtcclxuXHRcdFx0aWYgKHVuaWZvcm0/LmlzVW5pZm9ybUJ1ZmZlcikge1xyXG5cdFx0XHRcdHVuaWZvcm0ucmVwbGFjZVVuaWZvcm1WYWx1ZShuYW1lLCB2YWx1ZSk7XHJcblx0XHRcdH1cclxuXHRcdH0pO1xyXG5cdH1cclxuXHRiaW5kKGRldmljZTogR1BVRGV2aWNlLCBwYXNzRW5jb2RlcjogR1BVUmVuZGVyUGFzc0VuY29kZXIgfCBHUFVDb21wdXRlUGFzc0VuY29kZXIpIHtcclxuXHRcdHRoaXMudXBsb2FkVW5pZm9ybShkZXZpY2UpO1xyXG5cdFx0aWYgKCF0aGlzLmdyb3VwTGF5b3V0KSB0aGlzLmdyb3VwTGF5b3V0ID0gdGhpcy5jcmVhdGVCaW5kR3JvdXBMYXlvdXQoZGV2aWNlLCB0aGlzLmxhYmVsLCB0aGlzLmxheW91dEluZGV4KTtcclxuXHRcdGlmICghdGhpcy5iaW5kR3JvdXApIHRoaXMuYmluZEdyb3VwID0gdGhpcy5jcmVhdGVCaW5kR3JvdXAoZGV2aWNlLCB0aGlzLmxhYmVsLCB0aGlzLmdyb3VwSW5kZXgpO1xyXG5cdFx0dGhpcy5iaW5kR3JvdXAuYmluZChwYXNzRW5jb2Rlcik7XHJcblx0fVxyXG5cdGRlc3Ryb3koKSB7XHJcblx0XHR0aGlzLl91bmlmb3Jtcy5mb3JFYWNoKCh1bmlmb3JtKSA9PiB7XHJcblx0XHRcdGlmICh1bmlmb3JtLmRlc3Ryb3kpIHVuaWZvcm0/LmRlc3Ryb3koKTtcclxuXHRcdH0pO1xyXG5cdFx0dGhpcy5sYWJlbCA9IHVuZGVmaW5lZDtcclxuXHRcdHRoaXMuY3VycmVudEJpbmRpbmcgPSAxO1xyXG5cdFx0dGhpcy5kZWZpbmVEaXJ0eSA9IHRydWU7XHJcblx0XHR0aGlzLmRlZmluZXMgPSB1bmRlZmluZWQ7XHJcblx0XHR0aGlzLl91bmlmb3Jtcy5jbGVhcigpO1xyXG5cdFx0QmluZEdyb3VwTGF5b3V0LnJlbW92ZUJpbmRHcm91cExheW91dEZyb21DYWNoZSh0aGlzLmdyb3VwTGF5b3V0KTtcclxuXHRcdHRoaXMuYmluZEdyb3VwID0gdW5kZWZpbmVkO1xyXG5cdH1cclxuXHRwcml2YXRlIGNyZWF0ZUJpbmRHcm91cChkZXZpY2U6IEdQVURldmljZSwgbGFiZWw6IHN0cmluZywgZ3JvdXBJbmRleD86IG51bWJlcikge1xyXG5cdFx0Y29uc3QgeyBlbnRpdGllcywgZHluYW1pYywgYWxpZ25lZFNpemUsIG1heE9mZnNldCB9ID0gdGhpcy5jcmVhdGVCaW5kR3JvdXBFbnRpdHkoKTtcclxuXHRcdGNvbnN0IGJpbmRHcm91cCA9IG5ldyBCaW5kR3JvdXAoe1xyXG5cdFx0XHRsYWJlbDogbGFiZWwsXHJcblx0XHRcdGVudGlyZXM6IGVudGl0aWVzLFxyXG5cdFx0XHRkZXZpY2U6IGRldmljZSxcclxuXHRcdFx0bGF5b3V0OiB0aGlzLmdyb3VwTGF5b3V0LFxyXG5cdFx0XHRpbmRleDogZ3JvdXBJbmRleCB8fCAwLCAvLyDlkI7nu63mlLnmiJBncm91cEluZGV4XHJcblx0XHRcdGR5bmFtaWMsXHJcblx0XHRcdGFsaWduZWRTaXplLFxyXG5cdFx0XHRtYXhPZmZzZXRcclxuXHRcdH0pO1xyXG5cdFx0cmV0dXJuIGJpbmRHcm91cDtcclxuXHR9XHJcblx0cHJpdmF0ZSBjcmVhdGVCaW5kR3JvdXBMYXlvdXQoZGV2aWNlOiBHUFVEZXZpY2UsIGxhYmVsOiBzdHJpbmcsIGxheW91dEluZGV4PzogbnVtYmVyKSB7XHJcblx0XHRjb25zdCByZXN1bHQgPSB0aGlzLmNyZWF0ZUJpbmRHcm91cExheW91dEVudHJ5KCk7XHJcblx0XHRjb25zdCBncm91cExheW91dCA9IEJpbmRHcm91cExheW91dC5nZXRCaW5kR3JvdXBMYXlvdXRGcm9tQ2FjaGUoXHJcblx0XHRcdGRldmljZSxcclxuXHRcdFx0bGFiZWwgKyBcIi1cIiArIHJlc3VsdC51aWQsXHJcblx0XHRcdHJlc3VsdC5sYXlvdXRzLFxyXG5cdFx0XHRsYXlvdXRJbmRleCB8fCAwXHJcblx0XHQpO1xyXG5cdFx0cmV0dXJuIGdyb3VwTGF5b3V0O1xyXG5cdH1cclxuXHRwcm90ZWN0ZWQgdXBsb2FkVW5pZm9ybShkZXZpY2U6IEdQVURldmljZSkge1xyXG5cdFx0dGhpcy5fdW5pZm9ybXMuZm9yRWFjaCgodW5pZm9ybSkgPT4ge1xyXG5cdFx0XHR1bmlmb3JtLmJpbmQoZGV2aWNlKTtcclxuXHRcdH0pO1xyXG5cdH1cclxuXHRwcml2YXRlIGNyZWF0ZUJpbmRHcm91cExheW91dEVudHJ5KCkge1xyXG5cdFx0bGV0IHVpZCA9IFwiXCI7XHJcblx0XHRjb25zdCByZXN1bHQgPSBuZXcgTWFwKCk7XHJcblx0XHR0aGlzLl91bmlmb3Jtcy5mb3JFYWNoKCh1bmlmb3JtKSA9PiB7XHJcblx0XHRcdGlmICghcmVzdWx0Lmhhcyh1bmlmb3JtLm5hbWUpKSB7XHJcblx0XHRcdFx0dWlkID0gdWlkID09PSBcIlwiID8gdWlkLmNvbmNhdCh1bmlmb3JtLm5hbWUpIDogdWlkLmNvbmNhdChcIiwgXCIpLmNvbmNhdCh1bmlmb3JtLm5hbWUpO1xyXG5cdFx0XHRcdHJlc3VsdC5zZXQodW5pZm9ybS5uYW1lLCB0aGlzLmNyZWF0ZU9uZUxheW91dEVudHJ5KHVuaWZvcm0pKTtcclxuXHRcdFx0fVxyXG5cdFx0fSk7XHJcblx0XHR1aWQgPSBgdW5pZm9ybXNbJHt1aWR9XWA7XHJcblx0XHRyZXR1cm4geyB1aWQsIGxheW91dHM6IFsuLi5yZXN1bHQudmFsdWVzKCldIH07XHJcblx0fVxyXG5cdHByaXZhdGUgY3JlYXRlQmluZEdyb3VwRW50aXR5KCkge1xyXG5cdFx0Y29uc3QgcmVzdWx0ID0gbmV3IE1hcCgpO1xyXG5cdFx0bGV0IGR5bmFtaWMgPSBmYWxzZSxcclxuXHRcdFx0YWxpZ25lZFNpemUgPSAwLFxyXG5cdFx0XHRtYXhPZmZzZXQgPSAwO1xyXG5cdFx0dGhpcy5fdW5pZm9ybXMuZm9yRWFjaCgodW5pZm9ybSkgPT4ge1xyXG5cdFx0XHRpZiAoIXJlc3VsdC5oYXModW5pZm9ybS5uYW1lKSkge1xyXG5cdFx0XHRcdGlmICh1bmlmb3JtPy5oYXNEeW5hbWljT2Zmc2V0KSB7XHJcblx0XHRcdFx0XHRkeW5hbWljID0gdHJ1ZTtcclxuXHRcdFx0XHRcdG1heE9mZnNldCA9IHVuaWZvcm0ubWF4T2Zmc2V0O1xyXG5cdFx0XHRcdFx0YWxpZ25lZFNpemUgPSBNYXRoLmNlaWwodW5pZm9ybS51bmlmb3Jtc1NpemUgLyAoNCAqIDI1NikpICogMjU2O1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0XHRyZXN1bHQuc2V0KHVuaWZvcm0ubmFtZSwgdGhpcy5jcmVheWVPbmVHcm91cEVudGl0eSh1bmlmb3JtKSk7XHJcblx0XHRcdH1cclxuXHRcdH0pO1xyXG5cdFx0cmV0dXJuIHtcclxuXHRcdFx0ZW50aXRpZXM6IFsuLi5yZXN1bHQudmFsdWVzKCldLFxyXG5cdFx0XHRkeW5hbWljLFxyXG5cdFx0XHRhbGlnbmVkU2l6ZSxcclxuXHRcdFx0bWF4T2Zmc2V0XHJcblx0XHR9O1xyXG5cdH1cclxuXHRwcml2YXRlIGNyZWF0ZU9uZUxheW91dEVudHJ5KHVuaWZvcm0pIHtcclxuXHRcdGxldCBsYXlvdXRFbnRpdHk7XHJcblx0XHRpZiAodW5pZm9ybS5pc1VuaWZvcm1CdWZmZXIpIHtcclxuXHRcdFx0bGF5b3V0RW50aXR5ID0gbmV3IEJpbmRHcm91cExheW91dEVudHJ5KHtcclxuXHRcdFx0XHRiaW5kaW5nOiB1bmlmb3JtLmJpbmRpbmcsXHJcblx0XHRcdFx0YnVmZmVyOiB1bmlmb3JtLmxheW91dFR5cGUsXHJcblx0XHRcdFx0dmlzaWJpbGl0eTogdW5pZm9ybS52aXNpYmlsaXR5XHJcblx0XHRcdH0pO1xyXG5cdFx0fSBlbHNlIGlmICh1bmlmb3JtLmlzVGV4dHVyZSkge1xyXG5cdFx0XHRsYXlvdXRFbnRpdHkgPSBuZXcgQmluZEdyb3VwTGF5b3V0RW50cnkoe1xyXG5cdFx0XHRcdGJpbmRpbmc6IHVuaWZvcm0uYmluZGluZyxcclxuXHRcdFx0XHR2aXNpYmlsaXR5OiB1bmlmb3JtLnZpc2liaWxpdHksXHJcblx0XHRcdFx0dGV4dHVyZTogdW5pZm9ybS50eXBlID09IFwidGV4dHVyZVwiID8gdW5pZm9ybS5sYXlvdXRUeXBlIDogdW5kZWZpbmVkLFxyXG5cdFx0XHRcdHN0b3JhZ2VUZXh0dXJlOiB1bmlmb3JtLnR5cGUgPT0gXCJzdG9yYWdlVGV4dHVyZVwiID8gdW5pZm9ybS5zdG9yYWdlVGV4dHVyZUxheW91dFR5cGUgOiB1bmRlZmluZWRcclxuXHRcdFx0fSk7XHJcblx0XHR9IGVsc2UgaWYgKHVuaWZvcm0uaXNTYW1wbGVyKSB7XHJcblx0XHRcdGxheW91dEVudGl0eSA9IG5ldyBCaW5kR3JvdXBMYXlvdXRFbnRyeSh7XHJcblx0XHRcdFx0YmluZGluZzogdW5pZm9ybS5iaW5kaW5nLFxyXG5cdFx0XHRcdHZpc2liaWxpdHk6IHVuaWZvcm0udmlzaWJpbGl0eSxcclxuXHRcdFx0XHRzYW1wbGVyOiB1bmlmb3JtLmxheW91dFR5cGVcclxuXHRcdFx0fSk7XHJcblx0XHR9XHJcblx0XHRyZXR1cm4gbGF5b3V0RW50aXR5O1xyXG5cdH1cclxuXHRwcml2YXRlIGNyZWF5ZU9uZUdyb3VwRW50aXR5KHVuaWZvcm0pIHtcclxuXHRcdGxldCBncm91cEVudGl0eTtcclxuXHRcdGlmICh1bmlmb3JtLmlzVW5pZm9ybUJ1ZmZlcikge1xyXG5cdFx0XHRncm91cEVudGl0eSA9IG5ldyBCaW5kR3JvdXBFbnRpdHkoe1xyXG5cdFx0XHRcdGJpbmRpbmc6IHVuaWZvcm0uYmluZGluZyxcclxuXHRcdFx0XHRyZXNvdXJjZToge1xyXG5cdFx0XHRcdFx0YnVmZmVyOiB1bmlmb3JtLmJ1ZmZlci5ncHVCdWZmZXIsXHJcblx0XHRcdFx0XHRvZmZzZXQ6IHVuaWZvcm0ub2Zmc2V0LFxyXG5cdFx0XHRcdFx0c2l6ZTogdW5pZm9ybS5idWZmZXJTaXplXHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9KTtcclxuXHRcdH0gZWxzZSBpZiAodW5pZm9ybS5pc1RleHR1cmUpIHtcclxuXHRcdFx0Z3JvdXBFbnRpdHkgPSBuZXcgQmluZEdyb3VwRW50aXR5KHtcclxuXHRcdFx0XHRiaW5kaW5nOiB1bmlmb3JtLmJpbmRpbmcsXHJcblx0XHRcdFx0cmVzb3VyY2U6IHVuaWZvcm0/LnRleHR1cmVWaWV3ID8/IHVuaWZvcm0udGV4dHVyZS50ZXh0dXJlVmlld1xyXG5cdFx0XHR9KTtcclxuXHRcdH0gZWxzZSBpZiAodW5pZm9ybS5pc1NhbXBsZXIpIHtcclxuXHRcdFx0Z3JvdXBFbnRpdHkgPSBuZXcgQmluZEdyb3VwRW50aXR5KHtcclxuXHRcdFx0XHRiaW5kaW5nOiB1bmlmb3JtLmJpbmRpbmcsXHJcblx0XHRcdFx0cmVzb3VyY2U6IHVuaWZvcm0uc2FtcGxlci5ncHVTYW1wbGVyXHJcblx0XHRcdH0pO1xyXG5cdFx0fVxyXG5cdFx0cmV0dXJuIGdyb3VwRW50aXR5O1xyXG5cdH1cclxufVxyXG4iLCJpbXBvcnQgeyBGcmFtZVN0YXRlIH0gZnJvbSBcIi4uL2NvcmUvRnJhbWVTdGF0ZVwiO1xyXG5pbXBvcnQgeyBDdWxsTW9kZSwgUHJpbWl0aXZlVG9wb2xvZ3kgfSBmcm9tIFwiLi4vY29yZS9XZWJHUFVDb25zdGFudFwiO1xyXG5pbXBvcnQgQ29sb3IgZnJvbSBcIi4uL21hdGgvQ29sb3JcIjtcclxuaW1wb3J0IHsgTWVzaCB9IGZyb20gXCIuLi9tZXNoL01lc2hcIjtcclxuaW1wb3J0IHsgRGVwdGhTdGVuY2lsLCBSZW5kZXJTdGF0ZSwgVGFyZ2V0LCBQcmltaXRpdmUgfSBmcm9tIFwiLi4vcmVuZGVyL1JlbmRlclN0YXRlXCI7XHJcbmltcG9ydCBTYW1wbGVyIGZyb20gXCIuLi9yZW5kZXIvU2FtcGxlclwiO1xyXG5pbXBvcnQgU2hhZGVyRGF0YSBmcm9tIFwiLi4vcmVuZGVyL1NoYWRlckRhdGFcIjtcclxuaW1wb3J0IFRleHR1cmUgZnJvbSBcIi4uL3JlbmRlci9UZXh0dXJlXCI7XHJcbmltcG9ydCB7IFNoYWRlclNvdXJjZSB9IGZyb20gXCIuLi9zaGFkZXIvU2hhZGVyU291cmNlXCI7XHJcbmV4cG9ydCBjbGFzcyBNYXRlcmlhbCB7XHJcblx0cHVibGljIHNoYWRlckRhdGE6IFNoYWRlckRhdGE7XHJcblxyXG5cdGNvbG9yPzogQ29sb3I7XHJcblxyXG5cdGJhc2VTYW1wbGVyPzogU2FtcGxlcjtcclxuXHJcblx0YmFzZVRleHR1cmU/OiBUZXh0dXJlO1xyXG5cclxuXHR0eXBlOiBzdHJpbmc7XHJcblxyXG5cdGxhYmVsOiBzdHJpbmc7XHJcblxyXG5cdHNoYWRlclNvdXJjZTogU2hhZGVyU291cmNlO1xyXG5cclxuXHR0cmFuc3BhcmVudDogYm9vbGVhbjtcclxuXHJcblx0ZGlydHk6IGJvb2xlYW47XHJcblxyXG5cdGxpZ2h0OiBib29sZWFuO1xyXG5cclxuXHRyZWFkeTogYm9vbGVhbjtcclxuXHJcblx0cHJpdmF0ZSBfZW1pc3NpdmU6IENvbG9yO1xyXG5cclxuXHRwcml2YXRlIF9vcGFjaXR5OiBudW1iZXI7XHJcblxyXG5cdHByaXZhdGUgX2VtaXNzaXZlSW50ZW5zaXR5OiBudW1iZXI7XHJcblxyXG5cdHByaXZhdGUgX2RpZmZ1c2U6IENvbG9yO1xyXG5cclxuXHRwcml2YXRlIF9yZW5kZXJTdGF0ZTogUmVuZGVyU3RhdGU7XHJcblxyXG5cdHByaXZhdGUgX2RvdWJsZVNpZGVkOiBib29sZWFuO1xyXG5cclxuXHRjb25zdHJ1Y3RvcigpIHtcclxuXHRcdHRoaXMubGFiZWwgPSB1bmRlZmluZWQ7XHJcblx0XHR0aGlzLnR5cGUgPSB1bmRlZmluZWQ7XHJcblx0XHR0aGlzLmJhc2VUZXh0dXJlID0gdW5kZWZpbmVkO1xyXG5cdFx0dGhpcy5iYXNlU2FtcGxlciA9IHVuZGVmaW5lZDtcclxuXHRcdHRoaXMuX2RpZmZ1c2UgPSBuZXcgQ29sb3IoMC4wLCAwLjAsIDAuMCk7XHJcblx0XHR0aGlzLl9vcGFjaXR5ID0gMS4wO1xyXG5cdFx0Ly8gQnVmZmVyXHJcblx0XHR0aGlzLnNoYWRlckRhdGEgPSB1bmRlZmluZWQ7XHJcblx0XHR0aGlzLnNoYWRlclNvdXJjZSA9IHVuZGVmaW5lZDtcclxuXHRcdHRoaXMuZGlydHkgPSB0cnVlO1xyXG5cdFx0dGhpcy5fZW1pc3NpdmUgPSBuZXcgQ29sb3IoMC4wLCAwLjAsIDApO1xyXG5cdFx0dGhpcy5fZW1pc3NpdmVJbnRlbnNpdHkgPSAxLjA7XHJcblx0XHR0aGlzLl9kb3VibGVTaWRlZCA9IHRydWU7XHJcblx0XHR0aGlzLmxpZ2h0ID0gZmFsc2U7XHJcblx0XHR0aGlzLnJlYWR5ID0gZmFsc2U7XHJcblx0XHR0aGlzLmluaXQoKTtcclxuXHR9XHJcblx0cHVibGljIHNldCB3aXJlZnJhbWUodmFsdWU6IGJvb2xlYW4pIHtcclxuXHRcdHRoaXMucmVuZGVyU3RhdGUucHJpbWl0aXZlLnRvcG9sb2d5ID0gdmFsdWUgPyBQcmltaXRpdmVUb3BvbG9neS5MaW5lTGlzdCA6IFByaW1pdGl2ZVRvcG9sb2d5LlRyaWFuZ2xlTGlzdDtcclxuXHR9XHJcblx0cHVibGljIHNldCB0b3BvbG9neSh2YWx1ZTogUHJpbWl0aXZlVG9wb2xvZ3kpIHtcclxuXHRcdHRoaXMucmVuZGVyU3RhdGUucHJpbWl0aXZlLnRvcG9sb2d5ID0gdmFsdWU7XHJcblx0fVxyXG5cdHB1YmxpYyBnZXQgZG91YmxlU2lkZWQoKSB7XHJcblx0XHRyZXR1cm4gdGhpcy5fZG91YmxlU2lkZWQ7XHJcblx0fVxyXG5cdHB1YmxpYyBzZXQgZG91YmxlU2lkZWQodmFsdWU6IGJvb2xlYW4pIHtcclxuXHRcdHRoaXMuX3JlbmRlclN0YXRlLnByaW1pdGl2ZS5jdWxsTW9kZSA9IHZhbHVlID8gQ3VsbE1vZGUuTm9uZSA6IEN1bGxNb2RlLkJhY2s7XHJcblx0XHR0aGlzLl9kb3VibGVTaWRlZCA9IHZhbHVlO1xyXG5cdH1cclxuXHRwdWJsaWMgZ2V0IHJlbmRlclN0YXRlKCkge1xyXG5cdFx0cmV0dXJuIHRoaXMuX3JlbmRlclN0YXRlO1xyXG5cdH1cclxuXHRwdWJsaWMgc2V0IHJlbmRlclN0YXRlKHZhbHVlOiBSZW5kZXJTdGF0ZSkge1xyXG5cdFx0dGhpcy5fcmVuZGVyU3RhdGUgPSB2YWx1ZTtcclxuXHR9XHJcblx0cHVibGljIGdldCBkaWZmdXNlKCk6IENvbG9yIHtcclxuXHRcdHJldHVybiB0aGlzLl9kaWZmdXNlO1xyXG5cdH1cclxuXHRwdWJsaWMgc2V0IGRpZmZ1c2UodjogQ29sb3IpIHtcclxuXHRcdHRoaXMuX2RpZmZ1c2UgPSB2O1xyXG5cdH1cclxuXHRwdWJsaWMgZ2V0IGVtaXNzaXZlKCk6IENvbG9yIHtcclxuXHRcdHJldHVybiB0aGlzLl9lbWlzc2l2ZTtcclxuXHR9XHJcblx0cHVibGljIHNldCBlbWlzc2l2ZSh2OiBDb2xvcikge1xyXG5cdFx0dGhpcy5fZW1pc3NpdmUgPSB2O1xyXG5cdH1cclxuXHRwdWJsaWMgZ2V0IGVtaXNzaXZlSW50ZW5zaXR5KCk6IG51bWJlciB7XHJcblx0XHRyZXR1cm4gdGhpcy5fZW1pc3NpdmVJbnRlbnNpdHk7XHJcblx0fVxyXG5cdHB1YmxpYyBzZXQgZW1pc3NpdmVJbnRlbnNpdHkodjogbnVtYmVyKSB7XHJcblx0XHR0aGlzLl9lbWlzc2l2ZUludGVuc2l0eSA9IHY7XHJcblx0fVxyXG5cdHB1YmxpYyBnZXQgb3BhY2l0eSgpOiBudW1iZXIge1xyXG5cdFx0cmV0dXJuIHRoaXMuX29wYWNpdHk7XHJcblx0fVxyXG5cdHB1YmxpYyBzZXQgb3BhY2l0eSh2OiBudW1iZXIpIHtcclxuXHRcdHRoaXMuX29wYWNpdHkgPSB2O1xyXG5cdH1cclxuXHRvbkJlZm9yZVJlbmRlcigpIHtcclxuXHRcdC8vIGNhbGxiYWNrXHJcblx0fVxyXG5cclxuXHRvbkJlZm9yZUNvbXBpbGUoKSB7XHJcblx0XHQvLyBjYWxsYmFja1xyXG5cdH1cclxuXHRjbG9uZSgpOiBNYXRlcmlhbCB7XHJcblx0XHRyZXR1cm4gbnVsbDtcclxuXHR9XHJcblx0dXBkYXRlKGZyYW1lU3RhdGU/OiBGcmFtZVN0YXRlLCBtZXNoPzogTWVzaCkge1xyXG5cdFx0Ly8gdXBkYXRlIG1hdGVyaWFsXHJcblx0fVxyXG5cdHByb3RlY3RlZCBjcmVhdGVTaGFkZXJEYXRhKCkge1xyXG5cdFx0aWYgKHRoaXMuc2hhZGVyRGF0YSkgdGhpcy5zaGFkZXJEYXRhLmRlc3Ryb3koKTtcclxuXHRcdHRoaXMuc2hhZGVyRGF0YSA9IG5ldyBTaGFkZXJEYXRhKHRoaXMudHlwZSwgMCk7XHJcblx0XHR0aGlzLnJlYWR5ID0gdHJ1ZTtcclxuXHR9XHJcblx0cHJpdmF0ZSBpbml0KCkge1xyXG5cdFx0Ly8g6buY6K6k5riy5p+T54q25oCBXHJcblx0XHRjb25zdCBwcmltaXRpdmUgPSBuZXcgUHJpbWl0aXZlKCk7XHJcblx0XHRjb25zdCB0YXJnZXQgPSBuZXcgVGFyZ2V0KCk7XHJcblx0XHRjb25zdCBkZXB0aFN0ZW5jaWwgPSBuZXcgRGVwdGhTdGVuY2lsKCk7XHJcblx0XHR0aGlzLl9yZW5kZXJTdGF0ZSA9IG5ldyBSZW5kZXJTdGF0ZSgpO1xyXG5cdFx0dGhpcy5fcmVuZGVyU3RhdGUucHJpbWl0aXZlID0gcHJpbWl0aXZlO1xyXG5cdFx0dGhpcy5fcmVuZGVyU3RhdGUudGFyZ2V0cyA9IFt0YXJnZXRdO1xyXG5cdFx0dGhpcy5fcmVuZGVyU3RhdGUuZGVwdGhTdGVuY2lsID0gZGVwdGhTdGVuY2lsO1xyXG5cdH1cclxuXHRwdWJsaWMgZGVzdHJveSgpIHtcclxuXHRcdHRoaXMubGFiZWwgPSB1bmRlZmluZWQ7XHJcblx0XHR0aGlzLnR5cGUgPSB1bmRlZmluZWQ7XHJcblx0XHR0aGlzLmJhc2VUZXh0dXJlID0gdW5kZWZpbmVkO1xyXG5cdFx0dGhpcy5iYXNlU2FtcGxlciA9IHVuZGVmaW5lZDtcclxuXHRcdHRoaXMuY29sb3IgPSB1bmRlZmluZWQ7XHJcblx0fVxyXG59XHJcbiIsImltcG9ydCB7IEZyYW1lU3RhdGUgfSBmcm9tIFwiLi4vY29yZS9GcmFtZVN0YXRlXCI7XHJcbmltcG9ydCB7IEJ1ZmZlckJpbmRpbmdUeXBlLCBCdWZmZXJVc2FnZSB9IGZyb20gXCIuLi9jb3JlL1dlYkdQVUNvbnN0YW50XCI7XHJcbmltcG9ydCB7IFNoYWRlck1hdGVyaWFsUGFybXMsIFVuaWZvcm1zIH0gZnJvbSBcIi4uL2NvcmUvV2ViR1BVVHlwZXNcIjtcclxuaW1wb3J0IHsgTWVzaCB9IGZyb20gXCIuLi9tZXNoL01lc2hcIjtcclxuaW1wb3J0IFVuaWZvcm1CdWZmZXIgZnJvbSBcIi4uL3JlbmRlci9Vbmlmb3JtQnVmZmVyXCI7XHJcbmltcG9ydCB7IFNoYWRlclNvdXJjZSB9IGZyb20gXCIuLi9zaGFkZXIvU2hhZGVyU291cmNlXCI7XHJcbmltcG9ydCBkZWZhdWx0VmFsdWUgZnJvbSBcIi4uL3V0aWxzL2RlZmF1bHRWYWx1ZVwiO1xyXG5pbXBvcnQgeyBhZGRVbmlmb3JtVG9TaGFkZXJEYXRhLCBjaGVja0NvbnRhaW5GbG9hdFR5cGUgfSBmcm9tIFwiLi4vdXRpbHMvdW5pZm9ybVV0aWxzXCI7XHJcbmltcG9ydCB7IE1hdGVyaWFsIH0gZnJvbSBcIi4vTWF0ZXJpYWxcIjtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFNoYWRlck1hdGVyaWFsIGV4dGVuZHMgTWF0ZXJpYWwge1xyXG5cdHVuaWZvcm1zOiBVbmlmb3JtcztcclxuXHR1bmlmb3JtQnVmZmVyOiBVbmlmb3JtQnVmZmVyO1xyXG5cdHByaXZhdGUgc2hhZGVyTWF0ZXJpYWxQYXJtczogU2hhZGVyTWF0ZXJpYWxQYXJtcztcclxuXHRjb25zdHJ1Y3RvcihvcHRpb25zOiBTaGFkZXJNYXRlcmlhbFBhcm1zKSB7XHJcblx0XHRzdXBlcigpO1xyXG5cdFx0Y29uc3QgeyB0eXBlLCBmcmFnLCB2ZXJ0LCBkZWZpbmVzLCBsaWdodCB9ID0gb3B0aW9ucztcclxuXHRcdHRoaXMudHlwZSA9IHR5cGU7XHJcblx0XHR0aGlzLnNoYWRlck1hdGVyaWFsUGFybXMgPSBvcHRpb25zO1xyXG5cdFx0dGhpcy5zaGFkZXJTb3VyY2UgPSBuZXcgU2hhZGVyU291cmNlKHtcclxuXHRcdFx0c2hhZGVySWQ6IHR5cGUsXHJcblx0XHRcdHJlbmRlcjoge1xyXG5cdFx0XHRcdGZyYWdTaGFkZXI6IGZyYWcsXHJcblx0XHRcdFx0dmVydFNoYWRlcjogdmVydFxyXG5cdFx0XHR9LFxyXG5cdFx0XHRkZWZpbmVzOiBkZWZhdWx0VmFsdWUoZGVmaW5lcywge30pXHJcblx0XHR9KTtcclxuXHRcdHRoaXMudW5pZm9ybXMgPSBvcHRpb25zLnVuaWZvcm1zO1xyXG5cdFx0dGhpcy51bmlmb3JtQnVmZmVyID0gdW5kZWZpbmVkO1xyXG5cdFx0dGhpcy5saWdodCA9IGxpZ2h0IHx8IGZhbHNlO1xyXG5cdH1cclxuXHR1cGRhdGUoZnJhbWVTdGF0ZT86IEZyYW1lU3RhdGUsIG1lc2g/OiBNZXNoKSB7XHJcblx0XHRpZiAoIXRoaXMuc2hhZGVyRGF0YSB8fCB0aGlzLmRpcnR5KSB0aGlzLmNyZWF0ZVNoYWRlckRhdGEobWVzaCk7XHJcblx0fVxyXG5cdGNsb25lKCkge1xyXG5cdFx0cmV0dXJuIG5ldyBTaGFkZXJNYXRlcmlhbCh0aGlzLnNoYWRlck1hdGVyaWFsUGFybXMpO1xyXG5cdH1cclxuXHRwcm90ZWN0ZWQgY3JlYXRlU2hhZGVyRGF0YShtZXNoPzogTWVzaCkge1xyXG5cdFx0c3VwZXIuY3JlYXRlU2hhZGVyRGF0YSgpO1xyXG5cdFx0Y29uc3QgcmVzdWx0ID0gY2hlY2tDb250YWluRmxvYXRUeXBlKHRoaXMudW5pZm9ybXMpO1xyXG5cdFx0aWYgKHJlc3VsdC5oYXNGbG9hdCkge1xyXG5cdFx0XHR0aGlzLnVuaWZvcm1CdWZmZXIgPSByZXN1bHQuaGFzQXJyYXl0eXBlXHJcblx0XHRcdFx0PyBuZXcgVW5pZm9ybUJ1ZmZlcih7XHJcblx0XHRcdFx0XHRcdGxhYmVsOiB0aGlzLnR5cGUgKyBcIlVuaWZvcm1CdWZmZXJcIixcclxuXHRcdFx0XHRcdFx0dHlwZTogQnVmZmVyQmluZGluZ1R5cGUuUmVhZE9ubHlTdG9yYWdlLFxyXG5cdFx0XHRcdFx0XHR1c2FnZTogQnVmZmVyVXNhZ2UuU3RvcmFnZSB8IEJ1ZmZlclVzYWdlLkNvcHlEc3RcclxuXHRcdFx0XHQgIH0pXHJcblx0XHRcdFx0OiBuZXcgVW5pZm9ybUJ1ZmZlcih7IGxhYmVsOiB0aGlzLnR5cGUgKyBcIlVuaWZvcm1CdWZmZXJcIiB9KTtcclxuXHRcdFx0dGhpcy5zaGFkZXJEYXRhLnNldFVuaWZvcm1CdWZmZXIodGhpcy50eXBlLCB0aGlzLnVuaWZvcm1CdWZmZXIpO1xyXG5cdFx0fVxyXG5cdFx0Y29uc3QgdW5pZm9ybXNOYW1lcyA9IE9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKHRoaXMudW5pZm9ybXMpO1xyXG5cdFx0dW5pZm9ybXNOYW1lcy5tYXAoKHVuaWZvcm1zTmFtZSkgPT4ge1xyXG5cdFx0XHRhZGRVbmlmb3JtVG9TaGFkZXJEYXRhKFxyXG5cdFx0XHRcdHVuaWZvcm1zTmFtZSxcclxuXHRcdFx0XHR0aGlzLnVuaWZvcm1zW3VuaWZvcm1zTmFtZV0sXHJcblx0XHRcdFx0dGhpcy5zaGFkZXJEYXRhLFxyXG5cdFx0XHRcdG1lc2gsXHJcblx0XHRcdFx0dGhpcy51bmlmb3JtQnVmZmVyXHJcblx0XHRcdCk7XHJcblx0XHR9KTtcclxuXHR9XHJcbn1cclxuIiwiZnVuY3Rpb24gY3JlYXRlR3VpZCgpIHtcclxuICAvLyBodHRwOi8vc3RhY2tvdmVyZmxvdy5jb20vcXVlc3Rpb25zLzEwNTAzNC9ob3ctdG8tY3JlYXRlLWEtZ3VpZC11dWlkLWluLWphdmFzY3JpcHRcclxuICByZXR1cm4gXCJ4eHh4eHh4eC14eHh4LTR4eHgteXh4eC14eHh4eHh4eHh4eHhcIi5yZXBsYWNlKC9beHldL2csIGZ1bmN0aW9uIChjKSB7XHJcbiAgICBjb25zdCByID0gKE1hdGgucmFuZG9tKCkgKiAxNikgfCAwO1xyXG4gICAgY29uc3QgdiA9IGMgPT09IFwieFwiID8gciA6IChyICYgMHgzKSB8IDB4ODtcclxuICAgIHJldHVybiB2LnRvU3RyaW5nKDE2KTtcclxuICB9KTtcclxufVxyXG5leHBvcnQgZGVmYXVsdCBjcmVhdGVHdWlkO1xyXG4iLCJpbXBvcnQgQ2FtZXJhIGZyb20gXCIuLi9jYW1lcmEvQ2FtZXJhXCI7XHJcbmltcG9ydCB7IEZyYW1lU3RhdGUgfSBmcm9tIFwiLi4vY29yZS9GcmFtZVN0YXRlXCI7XHJcbmltcG9ydCBMaWdodE1hbmdlciBmcm9tIFwiLi4vY29yZS9MaWdodE1hbmdlclwiO1xyXG5pbXBvcnQgUmVuZGVyT2JqZWN0IGZyb20gXCIuLi9jb3JlL1JlbmRlck9iamVjdFwiO1xyXG5pbXBvcnQgeyBDb21tYW5kU3ViVHlwZSwgSW50ZXJzZWN0IH0gZnJvbSBcIi4uL2NvcmUvV2ViR1BVQ29uc3RhbnRcIjtcclxuaW1wb3J0IHsgUmVuZGVyT2JqZWN0VHlwZSB9IGZyb20gXCIuLi9jb3JlL1dlYkdQVVR5cGVzXCI7XHJcbmltcG9ydCBHZW9tZXRyeSBmcm9tIFwiLi4vZ2VvbWV0cnkvR2VvbWV0cnlcIjtcclxuaW1wb3J0IHsgTWF0ZXJpYWwgfSBmcm9tIFwiLi4vbWF0ZXJpYWwvTWF0ZXJpYWxcIjtcclxuaW1wb3J0IERyYXdDb21tYW5kIGZyb20gXCIuLi9yZW5kZXIvRHJhd0NvbW1hbmRcIjtcclxuaW1wb3J0IGNyZWF0ZUd1aWQgZnJvbSBcIi4uL3V0aWxzL2NyZWF0ZUd1aWRcIjtcclxuZXhwb3J0IGNsYXNzIE1lc2ggZXh0ZW5kcyBSZW5kZXJPYmplY3Qge1xyXG5cdFt4OiBzdHJpbmddOiBhbnk7XHJcblx0dWlkOiBzdHJpbmc7XHJcblx0ZnJ1c3R1bUN1bGw6IGJvb2xlYW47XHJcblx0c3ViQ29tbWFuZHM6IHsgW3Byb3A6IHN0cmluZ106IERyYXdDb21tYW5kIH07XHJcblx0Z2VvbWV0cnk/OiBHZW9tZXRyeTtcclxuXHRtYXRlcmlhbD86IE1hdGVyaWFsO1xyXG5cdGluc3RhbmNlQ291bnQ/OiBudW1iZXI7XHJcblx0cHJpb3JpdHk/OiBudW1iZXI7XHJcblx0ZHJhd0NvbW1hbmQ/OiBEcmF3Q29tbWFuZDtcclxuXHRkaXN0YW5jZVRvQ2FtZXJhPzogbnVtYmVyO1xyXG5cdGNvbnN0cnVjdG9yKGdlb21ldHJ5PzogR2VvbWV0cnksIG1hdGVyaWFsPzogTWF0ZXJpYWwpIHtcclxuXHRcdHN1cGVyKCk7XHJcblx0XHR0aGlzLmdlb21ldHJ5ID0gZ2VvbWV0cnk7XHJcblx0XHR0aGlzLm1hdGVyaWFsID0gbWF0ZXJpYWw7XHJcblx0XHR0aGlzLnR5cGUgPSBSZW5kZXJPYmplY3RUeXBlLk1lc2g7XHJcblx0XHR0aGlzLmZydXN0dW1DdWxsID0gdHJ1ZTtcclxuXHRcdHRoaXMudWlkID0gY3JlYXRlR3VpZCgpO1xyXG5cdFx0dGhpcy5zdWJDb21tYW5kcyA9IHt9O1xyXG5cdH1cclxuXHRnZXQgcmVhZHkoKSB7XHJcblx0XHRyZXR1cm4gdGhpcy5tYXRlcmlhbC5yZWFkeTtcclxuXHR9XHJcblx0dXBkYXRlKGZyYW1lU3RhdGU6IEZyYW1lU3RhdGUsIGNhbWVyYT86IENhbWVyYSkge1xyXG5cdFx0Ly8gdXBkYXRlIG1hdHJpeFxyXG5cdFx0dGhpcy51cGRhdGVNYXRyaXgodGhpcz8ucGFyZW50Py5tb2RlbE1hdHJpeCk7XHJcblx0XHQvLyBjcmVhdGVcclxuXHRcdHRoaXMuZ2VvbWV0cnkudXBkYXRlKGZyYW1lU3RhdGUpO1xyXG5cdFx0dGhpcy5tYXRlcmlhbC51cGRhdGUoZnJhbWVTdGF0ZSwgdGhpcyk7XHJcblx0XHQvLyB1cGRhdGUgYm91bmRpbmdTcGhlcmVcclxuXHRcdHRoaXMuZ2VvbWV0cnkuYm91bmRpbmdTcGhlcmUudXBkYXRlKHRoaXMubW9kZWxNYXRyaXgpO1xyXG5cdFx0dGhpcy5tYXRlcmlhbC5zaGFkZXJTb3VyY2Uuc2V0RGVmaW5lcyhmcmFtZVN0YXRlLmRlZmluZXMpO1xyXG5cdFx0aWYgKHRoaXMudHlwZSA9PSBSZW5kZXJPYmplY3RUeXBlLkRlYnVnKSB7XHJcblx0XHRcdGZyYW1lU3RhdGUucmVuZGVyUXVldWUuZGVidWdRdWV1ZS5wdXNoKHRoaXMpO1xyXG5cdFx0XHRyZXR1cm47XHJcblx0XHR9XHJcblx0XHR0aGlzLmRpc3RhbmNlVG9DYW1lcmEgPSB0aGlzLmdlb21ldHJ5LmJvdW5kaW5nU3BoZXJlLmRpc3RhbmNlVG9DYW1lcmEoY2FtZXJhKTtcclxuXHJcblx0XHRjb25zdCB2aXNpYmlsaXR5ID0gZnJhbWVTdGF0ZS5jdWxsaW5nVm9sdW1lLmNvbXB1dGVWaXNpYmlsaXR5KHRoaXMuZ2VvbWV0cnkuYm91bmRpbmdTcGhlcmUpO1xyXG5cdFx0Ly8g6KeG6ZSl5YmU6ZmkXHJcblx0XHRpZiAodmlzaWJpbGl0eSA9PT0gSW50ZXJzZWN0Lk9VVFNJREUgfHwgIXRoaXMuZnJ1c3R1bUN1bGwpIHJldHVybjtcclxuXHRcdGlmICh0aGlzLm1hdGVyaWFsLnRyYW5zcGFyZW50KSB7XHJcblx0XHRcdGZyYW1lU3RhdGUucmVuZGVyUXVldWUudHJhbnNwYXJlbnQucHVzaCh0aGlzKTtcclxuXHRcdH0gZWxzZSB7XHJcblx0XHRcdGZyYW1lU3RhdGUucmVuZGVyUXVldWUub3BhcXVlLnB1c2godGhpcyk7XHJcblx0XHR9XHJcblx0fVxyXG5cdGJlZm9yZVJlbmRlcigpIHtcclxuXHRcdC8vIGJlZm9yZSByZW5kZXJcclxuXHR9XHJcblx0YWZ0ZXJSZW5kZXIoKSB7XHJcblx0XHQvLyBhZnRlciByZW5kZXJcclxuXHR9XHJcblx0cHVibGljIGdldERyYXdDb21tYW5kKG92ZXJyaWRlTWF0ZXJpYWw/OiBNYXRlcmlhbCwgY29tbWFuZFN1YlR5cGU/OiBDb21tYW5kU3ViVHlwZSwgbGlnaHRNYW5nZXI/OiBMaWdodE1hbmdlcikge1xyXG5cdFx0aWYgKCF0aGlzLmRyYXdDb21tYW5kIHx8IHRoaXMubWF0ZXJpYWwuZGlydHkpIHtcclxuXHRcdFx0dGhpcy5tYXRlcmlhbC5zaGFkZXJTb3VyY2Uuc2V0RGVmaW5lcyhcclxuXHRcdFx0XHRPYmplY3QuYXNzaWduKHt9LCB0aGlzLm1hdGVyaWFsLnNoYWRlckRhdGEuZGVmaW5lcywgdGhpcy5nZW9tZXRyeS5kZWZpbmVzKVxyXG5cdFx0XHQpO1xyXG5cdFx0XHRpZiAodGhpcy5tYXRlcmlhbC5kaXJ0eSkgdGhpcy5tYXRlcmlhbC5kaXJ0eSA9IGZhbHNlO1xyXG5cdFx0XHR0aGlzLmRyYXdDb21tYW5kID0gbmV3IERyYXdDb21tYW5kKHtcclxuXHRcdFx0XHR2ZXJ0ZXhCdWZmZXJzOiB0aGlzLmdlb21ldHJ5LnZlcnRleEJ1ZmZlcnMsXHJcblx0XHRcdFx0aW5kZXhCdWZmZXI6IHRoaXMuZ2VvbWV0cnkuaW5kZXhCdWZmZXIsXHJcblx0XHRcdFx0c2hhZGVyRGF0YTogdGhpcy5tYXRlcmlhbC5zaGFkZXJEYXRhLFxyXG5cdFx0XHRcdGluc3RhbmNlczogdGhpcy5pbnN0YW5jZUNvdW50LFxyXG5cdFx0XHRcdGNvdW50OiB0aGlzLmdlb21ldHJ5LmNvdW50LFxyXG5cdFx0XHRcdHJlbmRlclN0YXRlOiB0aGlzLm1hdGVyaWFsLnJlbmRlclN0YXRlLFxyXG5cdFx0XHRcdHNoYWRlclNvdXJjZTogdGhpcy5tYXRlcmlhbC5zaGFkZXJTb3VyY2UsXHJcblx0XHRcdFx0bGlnaHRTaGFkZXJEYXRhOiB0aGlzLm1hdGVyaWFsLmxpZ2h0ID8gbGlnaHRNYW5nZXI/LmxpZ2h0U2hhZGVyRGF0YSA6IHVuZGVmaW5lZCxcclxuXHRcdFx0XHR1c2VMaWdodDogdGhpcy5tYXRlcmlhbC5saWdodFxyXG5cdFx0XHR9KTtcclxuXHRcdH1cclxuXHRcdGlmIChvdmVycmlkZU1hdGVyaWFsKSB7XHJcblx0XHRcdGlmICghdGhpcy5zdWJDb21tYW5kc1tjb21tYW5kU3ViVHlwZV0pIHtcclxuXHRcdFx0XHRjb25zdCBjb3B5TWF0ID0gb3ZlcnJpZGVNYXRlcmlhbC5jbG9uZSgpO1xyXG5cdFx0XHRcdGNvcHlNYXQudXBkYXRlKHVuZGVmaW5lZCwgdGhpcyk7XHJcblx0XHRcdFx0aWYgKGNvcHlNYXQuZGlydHkpIGNvcHlNYXQuZGlydHkgPSBmYWxzZTtcclxuXHRcdFx0XHR0aGlzLnN1YkNvbW1hbmRzW2NvbW1hbmRTdWJUeXBlXSA9IHRoaXMuZHJhd0NvbW1hbmQuc2hhbGxvd0Nsb25lKGNvcHlNYXQpO1xyXG5cdFx0XHR9XHJcblx0XHRcdHJldHVybiB0aGlzLnN1YkNvbW1hbmRzW2NvbW1hbmRTdWJUeXBlXTtcclxuXHRcdH1cclxuXHRcdHJldHVybiB0aGlzLmRyYXdDb21tYW5kO1xyXG5cdH1cclxuXHRkZXN0cm95KCkge1xyXG5cdFx0dGhpcy5nZW9tZXRyeS5kZXN0cm95KCk7XHJcblx0XHR0aGlzLm1hdGVyaWFsLmRlc3Ryb3koKTtcclxuXHR9XHJcbn1cclxuIiwiaW1wb3J0IHsgUmVuZGVyT2JqZWN0VHlwZSB9IGZyb20gXCIuLi9jb3JlL1dlYkdQVVR5cGVzXCI7XHJcbmltcG9ydCBHZW9tZXRyeSBmcm9tIFwiLi4vZ2VvbWV0cnkvR2VvbWV0cnlcIjtcclxuaW1wb3J0IFBsYW5lR2VvbWV0cnkgZnJvbSBcIi4uL2dlb21ldHJ5L1BsYW5lR2VvbWV0cnlcIjtcclxuaW1wb3J0IHsgTGlnaHQgfSBmcm9tIFwiLi4vbGlnaHQvTGlnaHRcIjtcclxuaW1wb3J0IFNoYWRlck1hdGVyaWFsIGZyb20gXCIuLi9tYXRlcmlhbC9TaGFkZXJNYXRlcmlhbFwiO1xyXG5pbXBvcnQgeyBNZXNoIH0gZnJvbSBcIi4uL21lc2gvTWVzaFwiO1xyXG5pbXBvcnQgeyBWaWV3UG9ydCB9IGZyb20gXCIuLi9yZW5kZXIvUmVuZGVyU3RhdGVcIjtcclxuaW1wb3J0IFNhbXBsZXIgZnJvbSBcIi4uL3JlbmRlci9TYW1wbGVyXCI7XHJcbmltcG9ydCB7IFNjZW5lIH0gZnJvbSBcIi4uL1NjZW5lXCI7XHJcbmltcG9ydCBnZXRWZXJ0RnJhZyBmcm9tIFwiLi4vc2hhZGVyL1NoYWRlcnNcIjtcclxuXHJcbmV4cG9ydCBjbGFzcyBTaGFkb3dNYXBEZWJ1Z2dlciB7XHJcblx0cHJpdmF0ZSBtZXNoOiBNZXNoO1xyXG5cdHByaXZhdGUgZGVidWdnZXJTaXplOiB7IHdpZHRoOiBudW1iZXI7IGhlaWdodDogbnVtYmVyIH07XHJcblx0cHVibGljIGxpZ2h0OiBMaWdodDtcclxuXHRwcml2YXRlIGdlb21ldHJ5OiBHZW9tZXRyeTtcclxuXHRwcml2YXRlIG1hdGVyaWFsOiBTaGFkZXJNYXRlcmlhbDtcclxuXHRwcml2YXRlIHNjZW5lOiBTY2VuZTtcclxuXHJcblx0Y29uc3RydWN0b3IobGlnaHQ6IExpZ2h0LCBzY2VuZTogU2NlbmUpIHtcclxuXHRcdGlmICghbGlnaHQgfHwgIShsaWdodCBpbnN0YW5jZW9mIExpZ2h0KSkgdGhyb3cgbmV3IEVycm9yKFwiVGhlIHBhcmFtZXRlciBtdXN0IGJlIExpZ2h0IGluc3RhbmNlXCIpO1xyXG5cclxuXHRcdHRoaXMubGlnaHQgPSBsaWdodDtcclxuXHRcdHRoaXMuc2NlbmUgPSBzY2VuZTtcclxuXHRcdHRoaXMuZGVidWdnZXJTaXplID0ge1xyXG5cdFx0XHR3aWR0aDogMjU2LFxyXG5cdFx0XHRoZWlnaHQ6IDI1NlxyXG5cdFx0fTtcclxuXHJcblx0XHR0aGlzLm1lc2ggPSB0aGlzLl9jcmVhdGVTaGFkb3dNYXBNZXNoKCk7XHJcblx0XHRjb25zdCBzaGFkb3dNYXAgPSB0aGlzLmxpZ2h0LnNoYWRvdy5nZXRTaGFkb3dNYXBUZXh0dXJlKCk7XHJcblx0XHR0aGlzLm1hdGVyaWFsLnVuaWZvcm1zLnRleHR1cmUudmFsdWUgPSBzaGFkb3dNYXA7XHJcblx0XHR0aGlzLm1lc2gudHlwZSA9IFJlbmRlck9iamVjdFR5cGUuRGVidWc7XHJcblx0XHR0aGlzLnNjZW5lLmFkZCh0aGlzLm1lc2gpO1xyXG5cdH1cclxuXHJcblx0X2NyZWF0ZVNoYWRvd01hcE1lc2goKSB7XHJcblx0XHRjb25zdCBzaGFkZXIgPSBnZXRWZXJ0RnJhZyhcInNoYWRvd01hcERlYnVnZ2VyXCIsIHtcclxuXHRcdFx0cG9zaXRpb25Mb2NhdGlvbjogMFxyXG5cdFx0fSk7XHJcblx0XHR0aGlzLmdlb21ldHJ5ID0gbmV3IFBsYW5lR2VvbWV0cnkoMiwgMik7XHJcblx0XHR0aGlzLm1hdGVyaWFsID0gbmV3IFNoYWRlck1hdGVyaWFsKHtcclxuXHRcdFx0dHlwZTogXCJzaGFkb3dNYXBEZWJ1Z2dlclwiLFxyXG5cdFx0XHRmcmFnOiBzaGFkZXIuZnJhZyxcclxuXHRcdFx0dmVydDogc2hhZGVyLnZlcnQsXHJcblx0XHRcdHVuaWZvcm1zOiB7XHJcblx0XHRcdFx0dGV4dHVyZToge1xyXG5cdFx0XHRcdFx0dHlwZTogXCJ0ZXh0dXJlXCIsXHJcblx0XHRcdFx0XHR2YWx1ZTogdW5kZWZpbmVkXHJcblx0XHRcdFx0fSxcclxuXHRcdFx0XHRzYW1wbGVyOiB7XHJcblx0XHRcdFx0XHR0eXBlOiBcInNhbXBsZXJcIixcclxuXHRcdFx0XHRcdHZhbHVlOiBuZXcgU2FtcGxlcih7XHJcblx0XHRcdFx0XHRcdG1hZ0ZpbHRlcjogXCJsaW5lYXJcIixcclxuXHRcdFx0XHRcdFx0bWluRmlsdGVyOiBcImxpbmVhclwiXHJcblx0XHRcdFx0XHR9KVxyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cdFx0fSk7XHJcblx0XHR0aGlzLm1hdGVyaWFsLnJlbmRlclN0YXRlLnZpZXdwb3J0ID0gbmV3IFZpZXdQb3J0KDAsIDAsIHRoaXMuZGVidWdnZXJTaXplLndpZHRoLCB0aGlzLmRlYnVnZ2VyU2l6ZS5oZWlnaHQpO1xyXG5cdFx0cmV0dXJuIG5ldyBNZXNoKHRoaXMuZ2VvbWV0cnksIHRoaXMubWF0ZXJpYWwpO1xyXG5cdH1cclxuXHJcblx0c2V0U2l6ZSh3aWR0aDogbnVtYmVyLCBoZWlnaHQ6IG51bWJlcikge1xyXG5cdFx0aWYgKCF3aWR0aCB8fCAhaGVpZ2h0KSByZXR1cm47XHJcblx0XHR0aGlzLmRlYnVnZ2VyU2l6ZS53aWR0aCA9IHdpZHRoO1xyXG5cdFx0dGhpcy5kZWJ1Z2dlclNpemUuaGVpZ2h0ID0gaGVpZ2h0O1xyXG5cdFx0dGhpcy51cGRhdGUoKTtcclxuXHR9XHJcblxyXG5cdHVwZGF0ZSgpIHtcclxuXHRcdHRoaXMubWF0ZXJpYWwucmVuZGVyU3RhdGUudmlld3BvcnQgPSBuZXcgVmlld1BvcnQoMCwgMCwgdGhpcy5kZWJ1Z2dlclNpemUud2lkdGgsIHRoaXMuZGVidWdnZXJTaXplLmhlaWdodCk7XHJcblx0fVxyXG59XHJcbiIsImltcG9ydCB7IEZyYW1lU3RhdGUgfSBmcm9tIFwiLi4vY29yZS9GcmFtZVN0YXRlXCI7XHJcbmltcG9ydCB7IFVuaWZvcm1FbnVtIH0gZnJvbSBcIi4uL2NvcmUvV2ViR1BVVHlwZXNcIjtcclxuaW1wb3J0IHsgTWVzaCB9IGZyb20gXCIuLi9tZXNoL01lc2hcIjtcclxuaW1wb3J0IFVuaWZvcm1CdWZmZXIgZnJvbSBcIi4uL3JlbmRlci9Vbmlmb3JtQnVmZmVyXCI7XHJcbmltcG9ydCB7IFNoYWRlclNvdXJjZSB9IGZyb20gXCIuLi9zaGFkZXIvU2hhZGVyU291cmNlXCI7XHJcbmltcG9ydCB7IE1hdGVyaWFsIH0gZnJvbSBcIi4vTWF0ZXJpYWxcIjtcclxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQ29sb3JNYXRlcmlhbCBleHRlbmRzIE1hdGVyaWFsIHtcclxuXHRjb25zdHJ1Y3RvcigpIHtcclxuXHRcdHN1cGVyKCk7XHJcblx0XHR0aGlzLnR5cGUgPSBcImNvbG9yXCI7XHJcblx0XHR0aGlzLnNoYWRlclNvdXJjZSA9IG5ldyBTaGFkZXJTb3VyY2Uoe1xyXG5cdFx0XHRzaGFkZXJJZDogdGhpcy50eXBlLFxyXG5cdFx0XHRkZWZpbmVzOiB7fVxyXG5cdFx0fSk7XHJcblx0fVxyXG5cdHVwZGF0ZShmcmFtZVN0YXRlPzogRnJhbWVTdGF0ZSwgbWVzaD86IE1lc2gpIHtcclxuXHRcdGlmICghdGhpcy5zaGFkZXJEYXRhIHx8IHRoaXMuZGlydHkpIHRoaXMuY3JlYXRlU2hhZGVyRGF0YSgpO1xyXG5cdFx0Y29uc3QgdW5pZm9ybUJ1ZmZlciA9IG5ldyBVbmlmb3JtQnVmZmVyKHsgbGFiZWw6IFwiY29sb3JcIiB9KTtcclxuXHRcdHVuaWZvcm1CdWZmZXIuc2V0VW5pZm9ybShcclxuXHRcdFx0XCJtb2RlbE1hdHJpeFwiLFxyXG5cdFx0XHQoKSA9PiB7XHJcblx0XHRcdFx0cmV0dXJuIG1lc2gubW9kZWxNYXRyaXg7XHJcblx0XHRcdH0sXHJcblx0XHRcdFVuaWZvcm1FbnVtLk1hdDRcclxuXHRcdCk7XHJcblx0XHR0aGlzLnNoYWRlckRhdGEuc2V0VW5pZm9ybUJ1ZmZlcihcImNvbG9yXCIsIHVuaWZvcm1CdWZmZXIpO1xyXG5cdH1cclxufVxyXG4iLCJpbXBvcnQgeyBGcmFtZVN0YXRlIH0gZnJvbSBcIi4uL2NvcmUvRnJhbWVTdGF0ZVwiO1xyXG5pbXBvcnQgeyBSZW5kZXJPYmplY3RUeXBlIH0gZnJvbSBcIi4uL2NvcmUvV2ViR1BVVHlwZXNcIjtcclxuaW1wb3J0IEdlb21ldHJ5IGZyb20gXCIuLi9nZW9tZXRyeS9HZW9tZXRyeVwiO1xyXG5pbXBvcnQgQ29sb3JNYXRlcmlhbCBmcm9tIFwiLi4vbWF0ZXJpYWwvQ29sb3JNYXRlcmlhbFwiO1xyXG5pbXBvcnQgeyBGbG9hdDMyQXR0cmlidXRlIH0gZnJvbSBcIi4uL3JlbmRlci9BdHRyaWJ1dGVcIjtcclxuaW1wb3J0IHsgTWVzaCB9IGZyb20gXCIuL01lc2hcIjtcclxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQXhlcyBleHRlbmRzIE1lc2gge1xyXG5cdG1hdGVyaWFsOiBDb2xvck1hdGVyaWFsO1xyXG5cdGNvbnN0cnVjdG9yKCkge1xyXG5cdFx0c3VwZXIoKTtcclxuXHRcdHRoaXMudHlwZSA9IFJlbmRlck9iamVjdFR5cGUuQXhlcztcclxuXHRcdHRoaXMuZGlzdGFuY2VUb0NhbWVyYSA9IDEwO1xyXG5cdFx0dGhpcy5tYXRlcmlhbCA9IG5ldyBDb2xvck1hdGVyaWFsKCk7XHJcblx0XHR0aGlzLm1hdGVyaWFsLndpcmVmcmFtZSA9IHRydWU7XHJcblx0XHR0aGlzLmluaXQoKTtcclxuXHR9XHJcblx0dXBkYXRlKGZyYW1lU3RhdGU6IEZyYW1lU3RhdGUpIHtcclxuXHRcdHRoaXMudXBkYXRlTWF0cml4KCk7XHJcblx0XHR0aGlzLm1hdGVyaWFsLnVwZGF0ZShmcmFtZVN0YXRlLCB0aGlzKTtcclxuXHRcdGZyYW1lU3RhdGUucmVuZGVyUXVldWUub3BhcXVlLnB1c2godGhpcyk7XHJcblx0fVxyXG5cdHByaXZhdGUgaW5pdCgpIHtcclxuXHRcdGNvbnN0IHBvc2l0aW9uID0gWzAsIDAsIDAsIDEsIDAsIDAsIDAsIDAsIDAsIDAsIDEsIDAsIDAsIDAsIDAsIDAsIDAsIDFdO1xyXG5cdFx0Y29uc3QgY29sb3JzID0gWzEsIDAsIDAsIDEsIDEsIDAuNSwgMC41LCAxLCAwLCAxLCAwLCAxLCAwLjUsIDEsIDAuNSwgMSwgMCwgMCwgMSwgMSwgMC41LCAwLjUsIDEsIDFdO1xyXG5cdFx0Y29uc3QgaW5kaWNlcyA9IFswLCAxLCAyLCAzLCA0LCA1XTtcclxuXHRcdHRoaXMuZ2VvbWV0cnkgPSBuZXcgR2VvbWV0cnkoe30pO1xyXG5cdFx0dGhpcy5nZW9tZXRyeS5zZXRBdHRyaWJ1dGUobmV3IEZsb2F0MzJBdHRyaWJ1dGUoXCJwb3NpdGlvblwiLCBwb3NpdGlvbiwgMykpO1xyXG5cdFx0dGhpcy5nZW9tZXRyeS5zZXRBdHRyaWJ1dGUobmV3IEZsb2F0MzJBdHRyaWJ1dGUoXCJjb2xvclwiLCBjb2xvcnMsIDQpKTtcclxuXHRcdHRoaXMuZ2VvbWV0cnkuc2V0SW5kaWNlKGluZGljZXMpO1xyXG5cdFx0dGhpcy5nZW9tZXRyeS5jb3VudCA9IGluZGljZXMubGVuZ3RoO1xyXG5cdH1cclxufVxyXG4iLCJpbXBvcnQgeyBGbG9hdDMyQXR0cmlidXRlIH0gZnJvbSBcIi4uL3JlbmRlci9BdHRyaWJ1dGVcIjtcclxuaW1wb3J0IEdlb21ldHJ5IGZyb20gXCIuL0dlb21ldHJ5XCI7XHJcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFNreUJveEdlb21ldHJ5IGV4dGVuZHMgR2VvbWV0cnkge1xyXG5cdGNvbnN0cnVjdG9yKCkge1xyXG5cdFx0c3VwZXIoe1xyXG5cdFx0XHR0eXBlOiBcInNreUJveEdlb21ldHJ5XCJcclxuXHRcdH0pO1xyXG5cdFx0dGhpcy5pbml0KCk7XHJcblx0fVxyXG5cdHB1YmxpYyBpbml0KCkge1xyXG5cdFx0Y29uc3QgcG9zaXRpb25zID0gW1xyXG5cdFx0XHQxLjAsXHJcblx0XHRcdDEuMCxcclxuXHRcdFx0MS4wLCAvLyAwXHJcblx0XHRcdC0xLjAsXHJcblx0XHRcdDEuMCxcclxuXHRcdFx0MS4wLCAvLyAxXHJcblx0XHRcdDEuMCxcclxuXHRcdFx0LTEuMCxcclxuXHRcdFx0MS4wLCAvLyAyXHJcblx0XHRcdC0xLjAsXHJcblx0XHRcdC0xLjAsXHJcblx0XHRcdDEuMCwgLy8gM1xyXG5cdFx0XHQxLjAsXHJcblx0XHRcdDEuMCxcclxuXHRcdFx0LTEuMCwgLy8gNFxyXG5cdFx0XHQtMS4wLFxyXG5cdFx0XHQxLjAsXHJcblx0XHRcdC0xLjAsIC8vIDVcclxuXHRcdFx0MS4wLFxyXG5cdFx0XHQtMS4wLFxyXG5cdFx0XHQtMS4wLCAvLyA2XHJcblx0XHRcdC0xLjAsXHJcblx0XHRcdC0xLjAsXHJcblx0XHRcdC0xLjAgLy8gN1xyXG5cdFx0XTtcclxuXHRcdGNvbnN0IGluZGljZXMgPSBbXHJcblx0XHRcdC8vIFBvc1ggKFJpZ2h0KVxyXG5cdFx0XHQwLCAyLCA0LCA2LCA0LCAyLFxyXG5cclxuXHRcdFx0Ly8gTmVnWCAoTGVmdClcclxuXHRcdFx0NSwgMywgMSwgMywgNSwgNyxcclxuXHJcblx0XHRcdC8vIFBvc1kgKFRvcClcclxuXHRcdFx0NCwgMSwgMCwgMSwgNCwgNSxcclxuXHJcblx0XHRcdC8vIE5lZ1kgKEJvdHRvbSlcclxuXHRcdFx0MiwgMywgNiwgNywgNiwgMyxcclxuXHJcblx0XHRcdC8vIFBvc1ogKEZyb250KVxyXG5cdFx0XHQwLCAxLCAyLCAzLCAyLCAxLFxyXG5cclxuXHRcdFx0Ly8gTmVnWiAoQmFjaylcclxuXHRcdFx0NiwgNSwgNCwgNSwgNiwgN1xyXG5cdFx0XTtcclxuXHRcdHRoaXMuc2V0QXR0cmlidXRlKG5ldyBGbG9hdDMyQXR0cmlidXRlKFwicG9zaXRpb25cIiwgcG9zaXRpb25zLCAzKSk7XHJcblx0XHR0aGlzLnNldEluZGljZShpbmRpY2VzKTtcclxuXHRcdHRoaXMuY291bnQgPSBpbmRpY2VzLmxlbmd0aDtcclxuXHR9XHJcbn1cclxuIiwiZnVuY3Rpb24gcmV0dXJuVHJ1ZSgpIHtcclxuXHRyZXR1cm4gdHJ1ZTtcclxufVxyXG5leHBvcnQgZnVuY3Rpb24gZGVzdHJveU9iamVjdChvYmplY3QpIHtcclxuXHQvLyBtZXNzYWdlID1tZXNzYWdlfHxcIlRoaXMgb2JqZWN0IHdhcyBkZXN0cm95ZWQsIGkuZS4sIGRlc3Ryb3koKSB3YXMgY2FsbGVkLlwiO1xyXG5cclxuXHRmdW5jdGlvbiB0aHJvd09uRGVzdHJveWVkKCkge1xyXG5cdFx0dGhyb3cgbmV3IEVycm9yKFwiVGhpcyBvYmplY3Qgd2FzIGRlc3Ryb3llZCwgaS5lLiwgZGVzdHJveSgpIHdhcyBjYWxsZWQuXCIpO1xyXG5cdH1cclxuXHJcblx0Zm9yIChjb25zdCBrZXkgaW4gb2JqZWN0KSB7XHJcblx0XHRpZiAodHlwZW9mIG9iamVjdFtrZXldID09PSBcImZ1bmN0aW9uXCIpIHtcclxuXHRcdFx0b2JqZWN0W2tleV0gPSB0aHJvd09uRGVzdHJveWVkO1xyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0b2JqZWN0LmlzRGVzdHJveWVkID0gcmV0dXJuVHJ1ZTtcclxuXHJcblx0cmV0dXJuIHVuZGVmaW5lZDtcclxufVxyXG4iLCJpbXBvcnQgU2FtcGxlciBmcm9tIFwiLi4vcmVuZGVyL1NhbXBsZXJcIjtcbmltcG9ydCBUZXh0dXJlIGZyb20gXCIuLi9yZW5kZXIvVGV4dHVyZVwiO1xuaW1wb3J0IGRlZmluZWQgZnJvbSBcIi4uL3V0aWxzL2RlZmluZWRcIjtcbmltcG9ydCB7IGRlc3Ryb3lPYmplY3QgfSBmcm9tIFwiLi4vdXRpbHMvZGVzdHJveU9iamVjdFwiO1xudHlwZSBUZXh0dXJlQ2FjaGVQcm9wID0ge1xuXHR0ZXh0dXJlOiBUZXh0dXJlO1xuXHRjb3VudDogbnVtYmVyO1xufTtcbmNsYXNzIFRleHR1cmVDYWNoZSB7XG5cdHB1YmxpYyBkZWZhdWx0U2FtcGxlcjogU2FtcGxlcjtcblx0cHJpdmF0ZSBfbnVtYmVyT2ZUZXh0dXJlczogbnVtYmVyO1xuXHRwcml2YXRlIF90ZXh0dXJlczogTWFwPHN0cmluZywgVGV4dHVyZUNhY2hlUHJvcD47XG5cdHByaXZhdGUgX3RleHR1cmVzVG9SZWxlYXNlOiBNYXA8c3RyaW5nLCBUZXh0dXJlQ2FjaGVQcm9wPjtcblx0Y29uc3RydWN0b3IoKSB7XG5cdFx0dGhpcy5fbnVtYmVyT2ZUZXh0dXJlcyA9IDA7XG5cdFx0dGhpcy5fdGV4dHVyZXMgPSBuZXcgTWFwKCk7XG5cdFx0dGhpcy5fbnVtYmVyT2ZUZXh0dXJlcyA9IDA7XG5cdFx0dGhpcy5fdGV4dHVyZXNUb1JlbGVhc2UgPSBuZXcgTWFwKCk7XG5cdFx0dGhpcy5kZWZhdWx0U2FtcGxlciA9IG5ldyBTYW1wbGVyKHtcblx0XHRcdG1hZ0ZpbHRlcjogXCJsaW5lYXJcIixcblx0XHRcdG1pbkZpbHRlcjogXCJsaW5lYXJcIixcblx0XHRcdGFkZHJlc3NNb2RlVTogXCJyZXBlYXRcIixcblx0XHRcdGFkZHJlc3NNb2RlVjogXCJyZXBlYXRcIlxuXHRcdH0pO1xuXHR9XG5cdGdldCBudW1iZXJPZlRleHR1cmVzKCk6IG51bWJlciB7XG5cdFx0cmV0dXJuIHRoaXMuX251bWJlck9mVGV4dHVyZXM7XG5cdH1cblx0Z2V0VGV4dHVyZShrZXl3b3JkKSB7XG5cdFx0Y29uc3QgY2FjaGVkVGV4dHVyZSA9IHRoaXMuX3RleHR1cmVzLmdldChrZXl3b3JkKTtcblx0XHRpZiAoIWRlZmluZWQoY2FjaGVkVGV4dHVyZSkpIHtcblx0XHRcdHJldHVybiB1bmRlZmluZWQ7XG5cdFx0fVxuXHRcdC8vIE5vIGxvbmdlciB3YW50IHRvIHJlbGVhc2UgdGhpcyBpZiBpdCB3YXMgcHJldmlvdXNseSByZWxlYXNlZC5cblx0XHRkZWxldGUgdGhpcy5fdGV4dHVyZXNUb1JlbGVhc2Vba2V5d29yZF07XG5cblx0XHQrK2NhY2hlZFRleHR1cmUuY291bnQ7XG5cdFx0cmV0dXJuIGNhY2hlZFRleHR1cmUudGV4dHVyZTtcblx0fVxuXHRhZGRUZXh0dXJlKGtleXdvcmQsIHRleHR1cmUpIHtcblx0XHRjb25zdCBjYWNoZWRUZXh0dXJlID0ge1xuXHRcdFx0dGV4dHVyZTogdGV4dHVyZSxcblx0XHRcdGNvdW50OiAxXG5cdFx0fTtcblxuXHRcdHRleHR1cmUuZmluYWxEZXN0cm95ID0gdGV4dHVyZS5kZXN0cm95O1xuXG5cdFx0Ly8gY29uc3QgdGhhdCA9IHRoaXM7XG5cdFx0dGV4dHVyZS5kZXN0cm95ID0gKCkgPT4ge1xuXHRcdFx0aWYgKC0tY2FjaGVkVGV4dHVyZS5jb3VudCA9PT0gMCkge1xuXHRcdFx0XHR0aGlzLl90ZXh0dXJlc1RvUmVsZWFzZS5zZXQoa2V5d29yZCwgY2FjaGVkVGV4dHVyZSk7XG5cdFx0XHR9XG5cdFx0fTtcblxuXHRcdHRoaXMuX3RleHR1cmVzLnNldChrZXl3b3JkLCBjYWNoZWRUZXh0dXJlKTtcblx0XHQrK3RoaXMuX251bWJlck9mVGV4dHVyZXM7XG5cdH1cblx0cmVsZWFzZWRUZXh0dXJlcygpIHtcblx0XHR0aGlzLl90ZXh0dXJlc1RvUmVsZWFzZS5mb3JFYWNoKChjYWNoZVRleHR1cmUpID0+IHtcblx0XHRcdGNhY2hlVGV4dHVyZS50ZXh0dXJlPy5maW5hbERlc3Ryb3koKTtcblx0XHRcdC0tdGhpcy5fbnVtYmVyT2ZUZXh0dXJlcztcblx0XHR9KTtcblxuXHRcdHRoaXMuX3RleHR1cmVzVG9SZWxlYXNlLmNsZWFyKCk7XG5cdH1cblx0ZGVzdHJveSgpIHtcblx0XHR0aGlzLl90ZXh0dXJlcy5mb3JFYWNoKChjYWNoZWRUZXh0dXJlKSA9PiB7XG5cdFx0XHRjYWNoZWRUZXh0dXJlLnRleHR1cmU/LmZpbmFsRGVzdHJveSgpO1xuXHRcdH0pO1xuXHRcdHJldHVybiBkZXN0cm95T2JqZWN0KHRoaXMpO1xuXHR9XG59XG5jb25zdCB0ZXh0dXJlQ2FjaGUgPSBuZXcgVGV4dHVyZUNhY2hlKCk7XG5leHBvcnQgZGVmYXVsdCB0ZXh0dXJlQ2FjaGU7XG4iLCJpbXBvcnQgU2FtcGxlciBmcm9tIFwiLi4vcmVuZGVyL1NhbXBsZXJcIjtcclxuaW1wb3J0IFRleHR1cmUgZnJvbSBcIi4uL3JlbmRlci9UZXh0dXJlXCI7XHJcblxyXG5leHBvcnQgZGVmYXVsdCBhc3luYyBmdW5jdGlvbiBDdWJlVGV4dHVyZUxvYWRlcih1cmxzKSB7XHJcblx0Y29uc3QgcHJvbWlzZXMgPSB1cmxzLm1hcCgoc3JjKSA9PiB7XHJcblx0XHRjb25zdCBpbWcgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KFwiaW1nXCIpO1xyXG5cdFx0aW1nLnNyYyA9IHNyYztcclxuXHRcdHJldHVybiBpbWcuZGVjb2RlKCkudGhlbigoKSA9PiBjcmVhdGVJbWFnZUJpdG1hcChpbWcpKTtcclxuXHR9KTtcclxuXHRjb25zdCBpbWFnZXMgPSBhd2FpdCBQcm9taXNlLmFsbChwcm9taXNlcyk7XHJcblx0YXdhaXQgUHJvbWlzZS5hbGwoaW1hZ2VzKTtcclxuXHRjb25zdCBiYXNlU2FtcGxlciA9IG5ldyBTYW1wbGVyKHtcclxuXHRcdG1hZ0ZpbHRlcjogXCJsaW5lYXJcIixcclxuXHRcdG1pbkZpbHRlcjogXCJsaW5lYXJcIlxyXG5cdH0pO1xyXG5cdGNvbnN0IGRhdGEgPSBpbWFnZXMubWFwKChpbWFnZSwgaSkgPT4ge1xyXG5cdFx0cmV0dXJuIHtcclxuXHRcdFx0c291cmNlOiBpbWFnZSxcclxuXHRcdFx0d2lkdGg6IGltYWdlLndpZHRoLFxyXG5cdFx0XHRoZWlnaHQ6IGltYWdlLmhlaWdodCxcclxuXHRcdFx0ZGVwdGg6IDEsXHJcblx0XHRcdHg6IDAsXHJcblx0XHRcdHk6IDAsXHJcblx0XHRcdHo6IGlcclxuXHRcdH07XHJcblx0fSk7XHJcblx0Y29uc3QgYmFzZVRleHR1cmUgPSBuZXcgVGV4dHVyZSh7XHJcblx0XHRzaXplOiB7XHJcblx0XHRcdHdpZHRoOiBpbWFnZXNbMF0ud2lkdGgsXHJcblx0XHRcdGhlaWdodDogaW1hZ2VzWzBdLmhlaWdodCxcclxuXHRcdFx0ZGVwdGg6IDZcclxuXHRcdH0sXHJcblx0XHRmb3JtYXQ6IFwicmdiYTh1bm9ybVwiLFxyXG5cdFx0dXNhZ2U6IEdQVVRleHR1cmVVc2FnZS5URVhUVVJFX0JJTkRJTkcgfCBHUFVUZXh0dXJlVXNhZ2UuQ09QWV9EU1QgfCBHUFVUZXh0dXJlVXNhZ2UuUkVOREVSX0FUVEFDSE1FTlQsXHJcblx0XHRkYXRhLFxyXG5cdFx0dmlld0Zvcm1hdHM6IFwiY3ViZVwiLFxyXG5cdFx0bWlwTGV2ZWxDb3VudDogNixcclxuXHRcdG5lZWRNaXBNYXA6IHRydWVcclxuXHR9KTtcclxuXHRyZXR1cm4ge1xyXG5cdFx0dGV4dHVyZTogYmFzZVRleHR1cmUsXHJcblx0XHRzYW1wbGVyOiBiYXNlU2FtcGxlclxyXG5cdH07XHJcbn1cclxuIiwiaW1wb3J0IHsgRnJhbWVTdGF0ZSB9IGZyb20gXCIuLi9jb3JlL0ZyYW1lU3RhdGVcIjtcclxuaW1wb3J0IHRleHR1cmVDYWNoZSBmcm9tIFwiLi4vY29yZS9UZXh0dXJlQ2FjaGVcIjtcclxuaW1wb3J0IHsgQ29tcGFyZUZ1bmN0aW9uIH0gZnJvbSBcIi4uL2NvcmUvV2ViR1BVQ29uc3RhbnRcIjtcclxuaW1wb3J0IHsgVW5pZm9ybUVudW0gfSBmcm9tIFwiLi4vY29yZS9XZWJHUFVUeXBlc1wiO1xyXG5pbXBvcnQgQ3ViZVRleHR1cmVMb2FkZXIgZnJvbSBcIi4uL2xvYWRlci9DdWJlVGV4dHVyZUxvYWRlclwiO1xyXG5pbXBvcnQgeyBNZXNoIH0gZnJvbSBcIi4uL21lc2gvTWVzaFwiO1xyXG5pbXBvcnQgVW5pZm9ybUJ1ZmZlciBmcm9tIFwiLi4vcmVuZGVyL1VuaWZvcm1CdWZmZXJcIjtcclxuaW1wb3J0IHsgU2hhZGVyU291cmNlIH0gZnJvbSBcIi4uL3NoYWRlci9TaGFkZXJTb3VyY2VcIjtcclxuaW1wb3J0IHsgTWF0ZXJpYWwgfSBmcm9tIFwiLi9NYXRlcmlhbFwiO1xyXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBTa3lCb3hNYXRlcmlhbCBleHRlbmRzIE1hdGVyaWFsIHtcclxuXHRsb2FkRmlzaDogYm9vbGVhbjtcclxuXHRjb25zdHJ1Y3RvcigpIHtcclxuXHRcdHN1cGVyKCk7XHJcblx0XHR0aGlzLnR5cGUgPSBcInNreWJveFwiO1xyXG5cdFx0dGhpcy5zaGFkZXJTb3VyY2UgPSBuZXcgU2hhZGVyU291cmNlKHtcclxuXHRcdFx0c2hhZGVySWQ6IHRoaXMudHlwZSxcclxuXHRcdFx0ZGVmaW5lczoge31cclxuXHRcdH0pO1xyXG5cdFx0dGhpcy5sb2FkRmlzaCA9IGZhbHNlO1xyXG5cdFx0dGhpcy5yZW5kZXJTdGF0ZS5kZXB0aFN0ZW5jaWwuZGVwdGhXcml0ZUVuYWJsZWQgPSBmYWxzZTtcclxuXHRcdHRoaXMucmVuZGVyU3RhdGUuZGVwdGhTdGVuY2lsLmRlcHRoQ29tcGFyZSA9IENvbXBhcmVGdW5jdGlvbi5MZXNzRXF1YWw7XHJcblx0fVxyXG5cdGFzeW5jIGxvYWRUZXh0dXJlKHVybHMpIHtcclxuXHRcdGNvbnN0IHJlc3VsdCA9IGF3YWl0IEN1YmVUZXh0dXJlTG9hZGVyKHVybHMpO1xyXG5cdFx0dGhpcy5sb2FkRmlzaCA9IHRydWU7XHJcblx0XHR0ZXh0dXJlQ2FjaGUuYWRkVGV4dHVyZShcInNwZWN1bGFyXCIsIHJlc3VsdC50ZXh0dXJlKTtcclxuXHRcdHRoaXMuYmFzZVRleHR1cmUgPSByZXN1bHQudGV4dHVyZTtcclxuXHRcdHRoaXMuYmFzZVNhbXBsZXIgPSByZXN1bHQuc2FtcGxlcjtcclxuXHR9XHJcblx0dXBkYXRlKGZyYW1lU3RhdGU/OiBGcmFtZVN0YXRlLCBtZXNoPzogTWVzaCkge1xyXG5cdFx0aWYgKCF0aGlzLmxvYWRGaXNoKSByZXR1cm47XHJcblx0XHRpZiAoIXRoaXMuc2hhZGVyRGF0YSkge1xyXG5cdFx0XHR0aGlzLmNyZWF0ZVNoYWRlckRhdGEobWVzaCk7XHJcblx0XHR9XHJcblx0fVxyXG5cdHByb3RlY3RlZCBjcmVhdGVTaGFkZXJEYXRhKG1lc2g/OiBNZXNoKSB7XHJcblx0XHRzdXBlci5jcmVhdGVTaGFkZXJEYXRhKCk7XHJcblx0XHRjb25zdCB1bmlmb3JtQnVmZmVyID0gbmV3IFVuaWZvcm1CdWZmZXIoeyBsYWJlbDogXCJza3lib3hcIiB9KTtcclxuXHRcdHVuaWZvcm1CdWZmZXIuc2V0VW5pZm9ybShcclxuXHRcdFx0XCJtb2RlbE1hdHJpeFwiLFxyXG5cdFx0XHQoKSA9PiB7XHJcblx0XHRcdFx0cmV0dXJuIG1lc2gubW9kZWxNYXRyaXg7XHJcblx0XHRcdH0sXHJcblx0XHRcdFVuaWZvcm1FbnVtLk1hdDRcclxuXHRcdCk7XHJcblx0XHR0aGlzLnNoYWRlckRhdGEuc2V0VW5pZm9ybUJ1ZmZlcihcInNreWJveFwiLCB1bmlmb3JtQnVmZmVyKTtcclxuXHRcdHRoaXMuc2hhZGVyRGF0YS5zZXRUZXh0dXJlKFwiYmFzZVRleHR1cmVcIiwgdGhpcy5iYXNlVGV4dHVyZSk7XHJcblx0XHR0aGlzLnNoYWRlckRhdGEuc2V0U2FtcGxlcihcImJhc2VTYW1wbGVyXCIsIHRoaXMuYmFzZVNhbXBsZXIpO1xyXG5cdH1cclxufVxyXG4iLCJpbXBvcnQgeyBGcmFtZVN0YXRlIH0gZnJvbSBcIi4uL2NvcmUvRnJhbWVTdGF0ZVwiO1xyXG5pbXBvcnQgeyBSZW5kZXJPYmplY3RUeXBlIH0gZnJvbSBcIi4uL2NvcmUvV2ViR1BVVHlwZXNcIjtcclxuaW1wb3J0IFNreUJveEdlb21ldHJ5IGZyb20gXCIuLi9nZW9tZXRyeS9Ta3lCb3hHZW9tZXRyeVwiO1xyXG5pbXBvcnQgU2t5Qm94TWF0ZXJpYWwgZnJvbSBcIi4uL21hdGVyaWFsL1NreUJveE1hdGVyaWFsXCI7XHJcbmltcG9ydCB7IE1lc2ggfSBmcm9tIFwiLi9NZXNoXCI7XHJcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFNreUJveCBleHRlbmRzIE1lc2gge1xyXG5cdG1hdGVyaWFsOiBTa3lCb3hNYXRlcmlhbDtcclxuXHRwdWJsaWMgdmlzaWJpbGl0eTogYm9vbGVhbjtcclxuXHRjb25zdHJ1Y3Rvcih1cmxzPzogQXJyYXk8c3RyaW5nPikge1xyXG5cdFx0c3VwZXIoKTtcclxuXHRcdHRoaXMudHlwZSA9IFJlbmRlck9iamVjdFR5cGUuU2t5Ym94O1xyXG5cdFx0dGhpcy52aXNpYmlsaXR5ID0gdHJ1ZTtcclxuXHRcdHRoaXMubWF0ZXJpYWwgPSBuZXcgU2t5Qm94TWF0ZXJpYWwoKTtcclxuXHRcdGlmICh1cmxzKSB0aGlzLm1hdGVyaWFsLmxvYWRUZXh0dXJlKHVybHMpO1xyXG5cdFx0dGhpcy5nZW9tZXRyeSA9IG5ldyBTa3lCb3hHZW9tZXRyeSgpO1xyXG5cdFx0dGhpcy5pc1NreUJveCA9IHRydWU7XHJcblx0fVxyXG5cdHVwZGF0ZShmcmFtZVN0YXRlOiBGcmFtZVN0YXRlKSB7XHJcblx0XHR0aGlzLnVwZGF0ZU1hdHJpeCgpO1xyXG5cdFx0dGhpcy5nZW9tZXRyeS51cGRhdGUoZnJhbWVTdGF0ZSk7XHJcblx0XHR0aGlzLm1hdGVyaWFsLnVwZGF0ZShmcmFtZVN0YXRlLCB0aGlzKTtcclxuXHRcdGlmICh0aGlzLnZpc2liaWxpdHkpIGZyYW1lU3RhdGUucmVuZGVyUXVldWUucHJlLnB1c2godGhpcyk7XHJcblx0fVxyXG59XHJcbiIsImltcG9ydCBSZW5kZXJPYmplY3QgZnJvbSBcIi4uL2NvcmUvUmVuZGVyT2JqZWN0XCI7XHJcbmltcG9ydCBNYXRyaXg0IGZyb20gXCIuLi9tYXRoL01hdHJpeDRcIjtcclxuaW1wb3J0IGNyZWF0ZUd1aWQgZnJvbSBcIi4uL3V0aWxzL2NyZWF0ZUd1aWRcIjtcclxuXHJcbmV4cG9ydCBjbGFzcyBJbnN0YW5jZSBleHRlbmRzIFJlbmRlck9iamVjdCB7XHJcblx0cHVibGljIGlkOiBzdHJpbmcgfCBudW1iZXI7XHJcblx0cHVibGljIHZpc2libGl0eTogYm9vbGVhbjtcclxuXHRwcml2YXRlIF9ub3RVcGRhdGVNYXRyaXg6IGJvb2xlYW47XHJcblx0Y29uc3RydWN0b3IoKSB7XHJcblx0XHRzdXBlcigpO1xyXG5cdFx0dGhpcy5fbm90VXBkYXRlTWF0cml4ID0gZmFsc2U7XHJcblx0XHR0aGlzLnZpc2libGl0eSA9IGZhbHNlO1xyXG5cdFx0dGhpcy5pZCA9IGNyZWF0ZUd1aWQoKTtcclxuXHR9XHJcblx0c2V0TWF0cml4NChtYXQ0OiBNYXRyaXg0KSB7XHJcblx0XHR0aGlzLm1vZGVsTWF0cml4LnNldChtYXQ0KTtcclxuXHRcdHRoaXMuX25vdFVwZGF0ZU1hdHJpeCA9IHRydWU7XHJcblx0fVxyXG5cdHVwZGF0ZU1hdHJpeChtYXRyaXg/OiBNYXRyaXg0KSB7XHJcblx0XHRpZiAodGhpcy5fbm90VXBkYXRlTWF0cml4KSByZXR1cm47XHJcblx0XHRzdXBlci51cGRhdGVNYXRyaXgobWF0cml4KTtcclxuXHR9XHJcbn1cclxuIiwiaW1wb3J0IENhbWVyYSBmcm9tIFwiLi4vY2FtZXJhL0NhbWVyYVwiO1xyXG5pbXBvcnQgeyBGcmFtZVN0YXRlIH0gZnJvbSBcIi4uL2NvcmUvRnJhbWVTdGF0ZVwiO1xyXG5pbXBvcnQgeyBCdWZmZXJCaW5kaW5nVHlwZSwgQnVmZmVyVXNhZ2UsIEludGVyc2VjdCB9IGZyb20gXCIuLi9jb3JlL1dlYkdQVUNvbnN0YW50XCI7XHJcbmltcG9ydCB7IFVuaWZvcm1FbnVtIH0gZnJvbSBcIi4uL2NvcmUvV2ViR1BVVHlwZXNcIjtcclxuaW1wb3J0IEdlb21ldHJ5IGZyb20gXCIuLi9nZW9tZXRyeS9HZW9tZXRyeVwiO1xyXG5pbXBvcnQgeyBNYXRlcmlhbCB9IGZyb20gXCIuLi9tYXRlcmlhbC9NYXRlcmlhbFwiO1xyXG5pbXBvcnQgVW5pZm9ybUJ1ZmZlciBmcm9tIFwiLi4vcmVuZGVyL1VuaWZvcm1CdWZmZXJcIjtcclxuaW1wb3J0IHsgSW5zdGFuY2UgfSBmcm9tIFwiLi9JbnN0YW5jZVwiO1xyXG5pbXBvcnQgeyBNZXNoIH0gZnJvbSBcIi4vTWVzaFwiO1xyXG5cclxuZXhwb3J0IGNsYXNzIEluc3RhbmNlTWVzaCBleHRlbmRzIE1lc2gge1xyXG5cdHByaXZhdGUgaW5zdGFuY2VzOiBNYXA8c3RyaW5nIHwgbnVtYmVyLCBJbnN0YW5jZT47XHJcblx0cHJpdmF0ZSByZW5kZXJJbnN0YW5jZXM6IEFycmF5PEluc3RhbmNlPjtcclxuXHRwcml2YXRlIGhhc0FkZEluc3RhbmNlczogYm9vbGVhbjtcclxuXHRjb25zdHJ1Y3RvcihnZW86IEdlb21ldHJ5LCBtYXQ6IE1hdGVyaWFsKSB7XHJcblx0XHRzdXBlcihnZW8sIG1hdCk7XHJcblx0XHR0aGlzLmluc3RhbmNlcyA9IG5ldyBNYXAoKTtcclxuXHRcdHRoaXMucmVuZGVySW5zdGFuY2VzID0gW107XHJcblx0XHR0aGlzLmhhc0FkZEluc3RhbmNlcyA9IGZhbHNlO1xyXG5cdH1cclxuXHR1cGRhdGUoZnJhbWVTdGF0ZTogRnJhbWVTdGF0ZSwgY2FtZXJhPzogQ2FtZXJhKSB7XHJcblx0XHQvLyB1cGRhdGUgaW5zdGFuY2VzIHZpc2libGl0eVxyXG5cdFx0dGhpcy5jaGVja0luc3RhbmNlc1Zpc2libGl0eSh7IGZyYW1lU3RhdGUsIGNhbWVyYSB9KTtcclxuXHRcdHRoaXMuZ2VvbWV0cnkudXBkYXRlKGZyYW1lU3RhdGUpO1xyXG5cdFx0dGhpcy5tYXRlcmlhbC51cGRhdGUoZnJhbWVTdGF0ZSwgdGhpcyk7XHJcblx0XHRpZiAoIXRoaXMuaGFzQWRkSW5zdGFuY2VzKSB0aGlzLmFkZFVuaWZvcm1zVG9NYXRlcmlhbCgpO1xyXG5cdFx0dGhpcy5pbnN0YW5jZUNvdW50ID0gdGhpcy5yZW5kZXJJbnN0YW5jZXMubGVuZ3RoO1xyXG5cdFx0aWYgKHRoaXMucmVuZGVySW5zdGFuY2VzLmxlbmd0aCA8IDEpIHJldHVybjtcclxuXHRcdGlmICh0aGlzLm1hdGVyaWFsLnRyYW5zcGFyZW50KSB7XHJcblx0XHRcdGZyYW1lU3RhdGUucmVuZGVyUXVldWUudHJhbnNwYXJlbnQucHVzaCh0aGlzKTtcclxuXHRcdH0gZWxzZSB7XHJcblx0XHRcdGZyYW1lU3RhdGUucmVuZGVyUXVldWUub3BhcXVlLnB1c2godGhpcyk7XHJcblx0XHR9XHJcblx0fVxyXG5cdGFkZEluc3RhbmNlKGluc3RhbmNlOiBJbnN0YW5jZSkge1xyXG5cdFx0aWYgKHRoaXMuaW5zdGFuY2VzLmdldChpbnN0YW5jZS5pZCkpIHJldHVybjtcclxuXHRcdHRoaXMuaW5zdGFuY2VzLnNldChpbnN0YW5jZS5pZCwgaW5zdGFuY2UpO1xyXG5cdH1cclxuXHRyZW1vdmVJbnN0YW5jZShrZXk6IG51bWJlciB8IHN0cmluZykge1xyXG5cdFx0cmV0dXJuIHRoaXMuaW5zdGFuY2VzLmRlbGV0ZShrZXkpO1xyXG5cdH1cclxuXHRnZXRJbnN0YW5jZShrZXk6IG51bWJlciB8IHN0cmluZykge1xyXG5cdFx0cmV0dXJuIHRoaXMuaW5zdGFuY2VzLmdldChrZXkpO1xyXG5cdH1cclxuXHRwcml2YXRlIGNoZWNrSW5zdGFuY2VzVmlzaWJsaXR5KG9wdGlvbnM6IHsgZnJhbWVTdGF0ZTogRnJhbWVTdGF0ZTsgY2FtZXJhOiBDYW1lcmEgfSkge1xyXG5cdFx0Y29uc3QgeyBmcmFtZVN0YXRlLCBjYW1lcmEgfSA9IG9wdGlvbnM7XHJcblx0XHRjb25zdCBwcmVGcmFtZUluc3RhbmNlQ291bnQgPSB0aGlzLnJlbmRlckluc3RhbmNlcy5sZW5ndGg7XHJcblx0XHR0aGlzLnJlbmRlckluc3RhbmNlcyA9IFtdO1xyXG5cdFx0dGhpcy5pbnN0YW5jZXMuZm9yRWFjaCgoaW5zdGFuY2U6IEluc3RhbmNlKSA9PiB7XHJcblx0XHRcdGluc3RhbmNlLnVwZGF0ZU1hdHJpeCh0aGlzPy5wYXJlbnQ/Lm1vZGVsTWF0cml4KTtcclxuXHRcdFx0aW5zdGFuY2UudmlzaWJsaXR5ID0gdGhpcy5nZXRJbnN0YW5jZVZpc2libGl0eSh7IGluc3RhbmNlLCBmcmFtZVN0YXRlLCBjYW1lcmEgfSk7XHJcblx0XHRcdGlmIChpbnN0YW5jZS52aXNpYmxpdHkpIHRoaXMucmVuZGVySW5zdGFuY2VzLnB1c2goaW5zdGFuY2UpO1xyXG5cdFx0fSk7XHJcblx0XHR0aGlzLm1hdGVyaWFsLmRpcnR5ID0gdGhpcy5yZW5kZXJJbnN0YW5jZXMubGVuZ3RoID09PSBwcmVGcmFtZUluc3RhbmNlQ291bnQ7XHJcblx0XHQvLyByZWJ1aWxkIGluc3RhbmNlTWF0cml4c0J1ZmZlclxyXG5cdFx0aWYgKHRoaXMubWF0ZXJpYWwuZGlydHkpIHRoaXMuaGFzQWRkSW5zdGFuY2VzID0gZmFsc2U7XHJcblx0fVxyXG5cdHByaXZhdGUgZ2V0SW5zdGFuY2VWaXNpYmxpdHkob3B0aW9uczogeyBpbnN0YW5jZTogSW5zdGFuY2U7IGZyYW1lU3RhdGU6IEZyYW1lU3RhdGU7IGNhbWVyYTogQ2FtZXJhIH0pOiBib29sZWFuIHtcclxuXHRcdGNvbnN0IHsgaW5zdGFuY2UsIGZyYW1lU3RhdGUsIGNhbWVyYSB9ID0gb3B0aW9ucztcclxuXHRcdHRoaXMuZ2VvbWV0cnkuYm91bmRpbmdTcGhlcmUudXBkYXRlKGluc3RhbmNlLm1vZGVsTWF0cml4KTtcclxuXHRcdHRoaXMuZGlzdGFuY2VUb0NhbWVyYSA9IHRoaXMuZ2VvbWV0cnkuYm91bmRpbmdTcGhlcmUuZGlzdGFuY2VUb0NhbWVyYShjYW1lcmEpO1xyXG5cdFx0Y29uc3QgdmlzaWJpbGl0eSA9IGZyYW1lU3RhdGUuY3VsbGluZ1ZvbHVtZS5jb21wdXRlVmlzaWJpbGl0eSh0aGlzLmdlb21ldHJ5LmJvdW5kaW5nU3BoZXJlKTtcclxuXHRcdHJldHVybiB2aXNpYmlsaXR5ID09PSBJbnRlcnNlY3QuSU5URVJTRUNUSU5HIHx8IHZpc2liaWxpdHkgPT09IEludGVyc2VjdC5JTlNJREU7XHJcblx0fVxyXG5cdHByaXZhdGUgYWRkVW5pZm9ybXNUb01hdGVyaWFsKCkge1xyXG5cdFx0aWYgKCF0aGlzLm1hdGVyaWFsLnNoYWRlckRhdGEpIHJldHVybjtcclxuXHRcdHRoaXMuaGFzQWRkSW5zdGFuY2VzID0gdHJ1ZTtcclxuXHRcdGNvbnN0IGluc3RhbmNlTWF0cml4c0J1ZmZlciA9IG5ldyBVbmlmb3JtQnVmZmVyKHtcclxuXHRcdFx0bGFiZWw6IFwiaW5zdGFuY2VNYXRyaXhzQnVmZmVyXCIsXHJcblx0XHRcdHR5cGU6IEJ1ZmZlckJpbmRpbmdUeXBlLlJlYWRPbmx5U3RvcmFnZSxcclxuXHRcdFx0dXNhZ2U6IEJ1ZmZlclVzYWdlLlN0b3JhZ2UgfCBCdWZmZXJVc2FnZS5Db3B5RHN0LFxyXG5cdFx0XHRzaXplOiB0aGlzLmluc3RhbmNlcy5zaXplICogNjRcclxuXHRcdH0pO1xyXG5cdFx0aW5zdGFuY2VNYXRyaXhzQnVmZmVyLnNldFVuaWZvcm0oXHJcblx0XHRcdFwiaW5zdGFuY2VNYXRyaXhzXCIsXHJcblx0XHRcdCgpID0+IHtcclxuXHRcdFx0XHRyZXR1cm4gdGhpcz8ucmVuZGVySW5zdGFuY2VzPy5tYXAoKHJlbmRlckluc3RhbmNlOiBJbnN0YW5jZSkgPT4gcmVuZGVySW5zdGFuY2UubW9kZWxNYXRyaXgpO1xyXG5cdFx0XHR9LFxyXG5cdFx0XHRVbmlmb3JtRW51bS5NYXQ0QXJyYXksXHJcblx0XHRcdHRoaXM/LnJlbmRlckluc3RhbmNlcz8ubGVuZ3RoXHJcblx0XHQpO1xyXG5cdFx0dGhpcy5tYXRlcmlhbC5zaGFkZXJEYXRhLnNldFVuaWZvcm1CdWZmZXIoXCJpbnN0YW5jZU1hdHJpeHNCdWZmZXJcIiwgaW5zdGFuY2VNYXRyaXhzQnVmZmVyKTtcclxuXHRcdHRoaXMubWF0ZXJpYWwuc2hhZGVyRGF0YS5zZXREZWZpbmUoXCJVU0VfSU5TVEFOQ0VcIiwgdHJ1ZSk7XHJcblx0XHR0aGlzLm1hdGVyaWFsLnNoYWRlckRhdGEuc2V0RGVmaW5lKFwiaW5zdGFuY2VDb3VudFwiLCB0aGlzPy5yZW5kZXJJbnN0YW5jZXM/Lmxlbmd0aCk7XHJcblx0fVxyXG59XHJcbiIsImltcG9ydCB7IFNoYWRlclNvdXJjZSB9IGZyb20gXCIuLi9zaGFkZXIvU2hhZGVyU291cmNlXCI7XHJcbmltcG9ydCB7IENvbW1hbmQgfSBmcm9tIFwiLi9Db21tYW5kXCI7XHJcbmltcG9ydCBQaXBlbGluZSBmcm9tIFwiLi9QaXBlbGluZVwiO1xyXG5pbXBvcnQgU2hhZGVyRGF0YSBmcm9tIFwiLi9TaGFkZXJEYXRhXCI7XHJcblxyXG5leHBvcnQgY2xhc3MgQ29tcHV0ZUNvbW1hbmQgaW1wbGVtZW50cyBDb21tYW5kIHtcclxuXHRwdWJsaWMgZGlzcGF0Y2g/OiB7IHg/OiBudW1iZXI7IHk/OiBudW1iZXI7IHo/OiBudW1iZXIgfTtcclxuXHRwdWJsaWMgc2hhZGVyU291cmNlPzogU2hhZGVyU291cmNlO1xyXG5cdHB1YmxpYyBzaGFkZXJEYXRhPzogU2hhZGVyRGF0YTtcclxuXHRjb25zdHJ1Y3RvcihvcHRpb25zOiBDb21wdXRlQ29tbWFuZFR5cGUpIHtcclxuXHRcdHRoaXMuZGlzcGF0Y2ggPSBvcHRpb25zLmRpc3BhdGNoO1xyXG5cdFx0dGhpcy5zaGFkZXJEYXRhID0gb3B0aW9ucy5zaGFkZXJEYXRhO1xyXG5cdFx0dGhpcy5zaGFkZXJTb3VyY2UgPSBvcHRpb25zLnNoYWRlclNvdXJjZTtcclxuXHR9XHJcblx0cmVuZGVyKHBhcmFtcz86IENvbXB1dGVQYXJhbXMpOiB2b2lkIHtcclxuXHRcdGNvbnN0IHsgZGV2aWNlLCBwYXNzRW5jb2RlciB9ID0gcGFyYW1zO1xyXG5cdFx0dGhpcy5zaGFkZXJEYXRhPy5iaW5kPy4oZGV2aWNlLCBwYXNzRW5jb2Rlcik7XHJcblx0XHRjb25zdCBwaXBlbGluZSA9IFBpcGVsaW5lLmdldENvbXB1dGVQaXBlbGluZUZyb21DYWNoZShkZXZpY2UsIHRoaXMsIFt0aGlzLnNoYWRlckRhdGEuZ3JvdXBMYXlvdXRdKTtcclxuXHRcdHBpcGVsaW5lLmJpbmQocGFzc0VuY29kZXIpO1xyXG5cdFx0Y29uc3QgeyB4LCB5LCB6IH0gPSB0aGlzLmRpc3BhdGNoO1xyXG5cdFx0cGFzc0VuY29kZXIuZGlzcGF0Y2hXb3JrZ3JvdXBzKHgsIHksIHopO1xyXG5cdH1cclxufVxyXG50eXBlIENvbXB1dGVDb21tYW5kVHlwZSA9IHtcclxuXHRkaXNwYXRjaD86IHsgeD86IG51bWJlcjsgeT86IG51bWJlcjsgej86IG51bWJlciB9O1xyXG5cclxuXHRzaGFkZXJTb3VyY2U/OiBTaGFkZXJTb3VyY2U7XHJcblxyXG5cdHNoYWRlckRhdGE/OiBTaGFkZXJEYXRhO1xyXG59O1xyXG50eXBlIENvbXB1dGVQYXJhbXMgPSB7XHJcblx0ZGV2aWNlPzogR1BVRGV2aWNlO1xyXG5cdHBhc3NFbmNvZGVyPzogR1BVQ29tcHV0ZVBhc3NFbmNvZGVyO1xyXG59O1xyXG4iLCJpbXBvcnQge1xyXG5cdEJ1ZmZlckJpbmRpbmdUeXBlLFxyXG5cdEJ1ZmZlclVzYWdlLFxyXG5cdEN1bGxNb2RlLFxyXG5cdEZyb250RmFjZSxcclxuXHRJbnB1dFN0ZXBNb2RlLFxyXG5cdFByaW1pdGl2ZVRvcG9sb2d5XHJcbn0gZnJvbSBcIi4uL2NvcmUvV2ViR1BVQ29uc3RhbnRcIjtcclxuaW1wb3J0IHsgTW9kZWxQYXJhbXMgfSBmcm9tIFwiLi4vY29yZS9XZWJHUFVUeXBlc1wiO1xyXG5pbXBvcnQgeyBCdWZmZXJGbG9hdDMyQXR0cmlidXRlLCBGbG9hdDMyQXR0cmlidXRlLCBJbnRlcmxlYXZlZEZsb2F0MzJBdHRyaWJ1dGUgfSBmcm9tIFwiLi4vcmVuZGVyL0F0dHJpYnV0ZVwiO1xyXG5pbXBvcnQgeyBDb21wdXRlQ29tbWFuZCB9IGZyb20gXCIuLi9yZW5kZXIvQ29tcHV0ZUNvbW1hbmRcIjtcclxuaW1wb3J0IERyYXdDb21tYW5kIGZyb20gXCIuLi9yZW5kZXIvRHJhd0NvbW1hbmRcIjtcclxuaW1wb3J0IEluZGV4QnVmZmVyIGZyb20gXCIuLi9yZW5kZXIvSW5kZXhCdWZmZXJcIjtcclxuaW1wb3J0IHtcclxuXHRCbGVuZENvbnN0YW50LFxyXG5cdERlcHRoU3RlbmNpbCxcclxuXHREZXB0aFN0ZW5jaWxQcm9wcyxcclxuXHRNdWx0aVNhbXBsZSxcclxuXHRQcmltaXRpdmUsXHJcblx0UmVuZGVyU3RhdGUsXHJcblx0U2Npc3NvclRlc3QsXHJcblx0VGFyZ2V0LFxyXG5cdFZpZXdQb3J0XHJcbn0gZnJvbSBcIi4uL3JlbmRlci9SZW5kZXJTdGF0ZVwiO1xyXG5pbXBvcnQgU2hhZGVyRGF0YSBmcm9tIFwiLi4vcmVuZGVyL1NoYWRlckRhdGFcIjtcclxuaW1wb3J0IFRleHR1cmUgZnJvbSBcIi4uL3JlbmRlci9UZXh0dXJlXCI7XHJcbmltcG9ydCBVbmlmb3JtQnVmZmVyIGZyb20gXCIuLi9yZW5kZXIvVW5pZm9ybUJ1ZmZlclwiO1xyXG5pbXBvcnQgVmVydGV4QnVmZmVyIGZyb20gXCIuLi9yZW5kZXIvVmVydGV4QnVmZmVyXCI7XHJcbmltcG9ydCB7IFNoYWRlclNvdXJjZSB9IGZyb20gXCIuLi9zaGFkZXIvU2hhZGVyU291cmNlXCI7XHJcbmltcG9ydCB7IGFkZFVuaWZvcm1Ub1NoYWRlckRhdGEgfSBmcm9tIFwiLi4vdXRpbHMvdW5pZm9ybVV0aWxzXCI7XHJcblxyXG5leHBvcnQgY2xhc3MgTW9kZWwge1xyXG5cdHB1YmxpYyBtb2RlbFBhcmFtczogTW9kZWxQYXJhbXM7XHJcblx0cHVibGljIGNvbW1hbmQ6IERyYXdDb21tYW5kIHwgQ29tcHV0ZUNvbW1hbmQ7XHJcblx0cHVibGljIHJlbmRlclR5cGU6IHN0cmluZztcclxuXHRwcml2YXRlIHZlcnRleEJ1ZmZlcnM6IE1hcDxzdHJpbmcsIFZlcnRleEJ1ZmZlcj47XHJcblx0cHJpdmF0ZSBzaGFkZXJEYXRhOiBTaGFkZXJEYXRhO1xyXG5cdGNvbnN0cnVjdG9yKHBhcmFtczogTW9kZWxQYXJhbXMpIHtcclxuXHRcdHRoaXMubW9kZWxQYXJhbXMgPSBwYXJhbXM7XHJcblx0XHR0aGlzLnJlbmRlclR5cGUgPSB0aGlzLm1vZGVsUGFyYW1zLmNvbXB1dGUgIT0gdW5kZWZpbmVkID8gXCJjb21wdXRlXCIgOiBcInJlbmRlclwiO1xyXG5cdFx0dGhpcy52ZXJ0ZXhCdWZmZXJzID0gbmV3IE1hcCgpO1xyXG5cdH1cclxuXHRyZW5kZXIocGFyYW1zOiByZW5kZXJNb2RlbFBhcmFtcykge1xyXG5cdFx0Y29uc3QgeyBkZXZpY2UsIHBhc3NFbmNvZGVyIH0gPSBwYXJhbXM7XHJcblx0XHRpZiAoIXRoaXMuY29tbWFuZClcclxuXHRcdFx0dGhpcy5jb21tYW5kID0gdGhpcy5yZW5kZXJUeXBlID09PSBcInJlbmRlclwiID8gdGhpcy5jcmVhdGVEcmF3Q29tbWFuZCgpIDogdGhpcy5jcmVhdGVDb21wdXRlQ29tbWFuZCgpO1xyXG5cdFx0aWYgKHRoaXMucmVuZGVyVHlwZSA9PT0gXCJyZW5kZXJcIikge1xyXG5cdFx0XHQodGhpcy5jb21tYW5kIGFzIERyYXdDb21tYW5kKS5yZW5kZXIoe1xyXG5cdFx0XHRcdGRldmljZSxcclxuXHRcdFx0XHRwYXNzRW5jb2RlcjogPEdQVVJlbmRlclBhc3NFbmNvZGVyPnBhc3NFbmNvZGVyXHJcblx0XHRcdH0pO1xyXG5cdFx0fSBlbHNlIHtcclxuXHRcdFx0KHRoaXMuY29tbWFuZCBhcyBDb21wdXRlQ29tbWFuZCkucmVuZGVyKHtcclxuXHRcdFx0XHRkZXZpY2UsXHJcblx0XHRcdFx0cGFzc0VuY29kZXI6IDxHUFVDb21wdXRlUGFzc0VuY29kZXI+cGFzc0VuY29kZXJcclxuXHRcdFx0fSk7XHJcblx0XHR9XHJcblx0fVxyXG5cdGNvbXB1dGUocGFyYW1zOiByZW5kZXJNb2RlbFBhcmFtcykge1xyXG5cdFx0Y29uc3QgeyBkZXZpY2UsIHBhc3NFbmNvZGVyIH0gPSBwYXJhbXM7XHJcblx0XHRpZiAoIXRoaXMuY29tbWFuZCkgdGhpcy5jb21tYW5kID0gdGhpcy5jcmVhdGVDb21wdXRlQ29tbWFuZCgpO1xyXG5cdFx0KHRoaXMuY29tbWFuZCBhcyBDb21wdXRlQ29tbWFuZCkucmVuZGVyKHtcclxuXHRcdFx0ZGV2aWNlLFxyXG5cdFx0XHRwYXNzRW5jb2RlcjogPEdQVUNvbXB1dGVQYXNzRW5jb2Rlcj5wYXNzRW5jb2RlclxyXG5cdFx0fSk7XHJcblx0fVxyXG5cdHB1YmxpYyBnZXRWZXJ0ZXhCdWZmZXJCeVVpZCh1aWQ6IHN0cmluZyk6IFZlcnRleEJ1ZmZlciB7XHJcblx0XHRyZXR1cm4gdGhpcy52ZXJ0ZXhCdWZmZXJzLmdldCh1aWQpO1xyXG5cdH1cclxuXHRwdWJsaWMgZ2V0VW5pZm9ybUJ1ZmZlckJ5VWlkKHVpZDogc3RyaW5nKTogVW5pZm9ybUJ1ZmZlciB7XHJcblx0XHRyZXR1cm4gdGhpcy5zaGFkZXJEYXRhLmdldFVuaWZvcm1CdWZmZXIodWlkKTtcclxuXHR9XHJcblx0cHVibGljIGdldFRleHR1cmVCeU5hbWUobmFtZTogc3RyaW5nKTogVGV4dHVyZSB7XHJcblx0XHRyZXR1cm4gdGhpcy5zaGFkZXJEYXRhLmdldFRleHR1cmUobmFtZSk7XHJcblx0fVxyXG5cdHB1YmxpYyBnZXRTYW1wbGVyQnlOYW1lKG5hbWU6IHN0cmluZykge1xyXG5cdFx0cmV0dXJuIHRoaXMuc2hhZGVyRGF0YS5nZXRTYW1wbGVyKG5hbWUpO1xyXG5cdH1cclxuXHRwdWJsaWMgZGVzdHJveSgpIHtcclxuXHRcdHRoaXM/LnZlcnRleEJ1ZmZlcnMuY2xlYXIoKTtcclxuXHRcdHRoaXM/LnNoYWRlckRhdGEuZGVzdHJveSgpO1xyXG5cdFx0dGhpcy5jb21tYW5kID0gbnVsbDtcclxuXHRcdHRoaXMubW9kZWxQYXJhbXMgPSBudWxsO1xyXG5cdH1cclxuXHRwcml2YXRlIGNyZWF0ZURyYXdDb21tYW5kKCkge1xyXG5cdFx0Y29uc3QgeyBjb3VudCwgaW5zdGFuY2VzIH0gPSB0aGlzLm1vZGVsUGFyYW1zO1xyXG5cdFx0Y29uc3QgdmVydGV4QnVmZmVycyA9IHRoaXMuY3JlYXRlVmVydGV4QnVmZmVyKCk7XHJcblx0XHR0aGlzLnNoYWRlckRhdGEgPSB0aGlzLmNyZWF0ZVNoYWRlckRhdGEoKTtcclxuXHRcdGNvbnN0IGluZGV4QnVmZmVyID0gdGhpcy5jcmVhdGVJbmRleEJ1ZmZlcigpO1xyXG5cdFx0Y29uc3Qgc2hhZGVyU291cmNlID0gdGhpcy5jcmVhdGVTaGFkZXJTb3VyY2UoKTtcclxuXHRcdGNvbnN0IHJlbmRlclN0YXRlID0gdGhpcy5jcmVhdGVSZW5kZXJTdGF0ZSgpO1xyXG5cdFx0cmV0dXJuIG5ldyBEcmF3Q29tbWFuZCh7XHJcblx0XHRcdHZlcnRleEJ1ZmZlcnMsXHJcblx0XHRcdHNoYWRlckRhdGE6IHRoaXMuc2hhZGVyRGF0YSxcclxuXHRcdFx0aW5kZXhCdWZmZXIsXHJcblx0XHRcdHNoYWRlclNvdXJjZSxcclxuXHRcdFx0cmVuZGVyU3RhdGUsXHJcblx0XHRcdGNvdW50LFxyXG5cdFx0XHRpbnN0YW5jZXNcclxuXHRcdH0pO1xyXG5cdH1cclxuXHRwcml2YXRlIGNyZWF0ZUNvbXB1dGVDb21tYW5kKCkge1xyXG5cdFx0Y29uc3QgeyBkaXNwYXRjaCB9ID0gdGhpcy5tb2RlbFBhcmFtcztcclxuXHRcdGNvbnN0IHNoYWRlckRhdGEgPSB0aGlzLmNyZWF0ZVNoYWRlckRhdGEoKTtcclxuXHRcdGNvbnN0IHNoYWRlclNvdXJjZSA9IHRoaXMuY3JlYXRlU2hhZGVyU291cmNlKCk7XHJcblx0XHRyZXR1cm4gbmV3IENvbXB1dGVDb21tYW5kKHtcclxuXHRcdFx0ZGlzcGF0Y2gsXHJcblx0XHRcdHNoYWRlckRhdGEsXHJcblx0XHRcdHNoYWRlclNvdXJjZVxyXG5cdFx0fSk7XHJcblx0fVxyXG5cdHByaXZhdGUgY3JlYXRlVmVydGV4QnVmZmVyKCkge1xyXG5cdFx0Y29uc3QgeyB2ZXJ0ZXhCdWZmZXJzLCBzaGFkZXJJZCB9ID0gdGhpcy5tb2RlbFBhcmFtcztcclxuXHRcdGxldCBsb2NhdGlvbkluZGV4ID0gMDtcclxuXHRcdHJldHVybiAoXHJcblx0XHRcdHZlcnRleEJ1ZmZlcnM/Lm1hcCgodmVydGV4QnVmZmVyT2JqZWN0LCBpbmRleCkgPT4ge1xyXG5cdFx0XHRcdGNvbnN0IHsgYXR0cmlidXRlcywgc3RlcE1vZGUsIHVpZCwgYXJyYXlTdHJpZGUgfSA9IHZlcnRleEJ1ZmZlck9iamVjdDtcclxuXHRcdFx0XHRjb25zdCB2ZXJ0ZXhCdWZmZXIgPSBuZXcgVmVydGV4QnVmZmVyKHtcclxuXHRcdFx0XHRcdGxhYmVsOiBzaGFkZXJJZCxcclxuXHRcdFx0XHRcdGluZGV4LFxyXG5cdFx0XHRcdFx0bG9jYXRpb25JbmRleCxcclxuXHRcdFx0XHRcdHN0ZXBNb2RlOiA8SW5wdXRTdGVwTW9kZT5zdGVwTW9kZSxcclxuXHRcdFx0XHRcdGFycmF5U3RyaWRlXHJcblx0XHRcdFx0fSk7XHJcblx0XHRcdFx0Y29uc3QgYXR0cmlidXRlS2V5cyA9IE9iamVjdC5rZXlzKGF0dHJpYnV0ZXMpO1xyXG5cdFx0XHRcdGF0dHJpYnV0ZUtleXMuZm9yRWFjaCgoa2V5OiBzdHJpbmcpID0+IHtcclxuXHRcdFx0XHRcdGNvbnN0IHsgc2l6ZSwgdmFsdWUsIG5hbWVzLCBpdGVtU2l6ZXMsIGJ1ZmZlciB9ID0gYXR0cmlidXRlc1trZXldO1xyXG5cdFx0XHRcdFx0dmVydGV4QnVmZmVyLnNldEF0dHJpYnV0ZShcclxuXHRcdFx0XHRcdFx0bmFtZXM/Lmxlbmd0aCA+IDBcclxuXHRcdFx0XHRcdFx0XHQ/IGJ1ZmZlclxyXG5cdFx0XHRcdFx0XHRcdFx0PyBuZXcgQnVmZmVyRmxvYXQzMkF0dHJpYnV0ZShuYW1lcywgYnVmZmVyLCBpdGVtU2l6ZXMpXHJcblx0XHRcdFx0XHRcdFx0XHQ6IG5ldyBJbnRlcmxlYXZlZEZsb2F0MzJBdHRyaWJ1dGUobmFtZXMsIHZhbHVlLCBpdGVtU2l6ZXMpXHJcblx0XHRcdFx0XHRcdFx0OiBuZXcgRmxvYXQzMkF0dHJpYnV0ZShrZXksIHZhbHVlLCBzaXplKVxyXG5cdFx0XHRcdFx0KTtcclxuXHRcdFx0XHRcdGNvbnN0IGNvdW50ID0gbmFtZXM/Lmxlbmd0aCA+IDAgPyBuYW1lcz8ubGVuZ3RoIDogMTtcclxuXHRcdFx0XHRcdGxvY2F0aW9uSW5kZXggKz0gY291bnQ7XHJcblx0XHRcdFx0fSk7XHJcblx0XHRcdFx0dGhpcy52ZXJ0ZXhCdWZmZXJzLnNldCh1aWQsIHZlcnRleEJ1ZmZlcik7XHJcblx0XHRcdFx0cmV0dXJuIHZlcnRleEJ1ZmZlcjtcclxuXHRcdFx0fSkgfHwgW11cclxuXHRcdCk7XHJcblx0fVxyXG5cdHByaXZhdGUgY3JlYXRlU2hhZGVyU291cmNlKCkge1xyXG5cdFx0Y29uc3QgeyB2ZXJ0LCBmcmFnLCBjb21wdXRlLCBzaGFkZXJJZCB9ID0gdGhpcy5tb2RlbFBhcmFtcztcclxuXHRcdHJldHVybiBuZXcgU2hhZGVyU291cmNlKHtcclxuXHRcdFx0c2hhZGVySWQsXHJcblx0XHRcdHJlbmRlcjoge1xyXG5cdFx0XHRcdHZlcnRTaGFkZXI6IHZlcnQsXHJcblx0XHRcdFx0ZnJhZ1NoYWRlcjogZnJhZ1xyXG5cdFx0XHR9LFxyXG5cdFx0XHRjb21wdXRlOiB7XHJcblx0XHRcdFx0Y29tcHV0ZVNoYWRlcjogY29tcHV0ZVxyXG5cdFx0XHR9XHJcblx0XHR9KTtcclxuXHR9XHJcblx0cHJpdmF0ZSBjcmVhdGVTaGFkZXJEYXRhKCkge1xyXG5cdFx0Y29uc3QgeyBzaGFkZXJJZCwgdW5pZm9ybUJ1ZmZlcnMsIHVuaWZvcm1UZXh0dXJlQW5kU2FtcGxlciB9ID0gdGhpcy5tb2RlbFBhcmFtcztcclxuXHRcdGNvbnN0IHNoYWRlckRhdGEgPSBuZXcgU2hhZGVyRGF0YShzaGFkZXJJZCk7XHJcblx0XHQvLyBmaWxsIHVuaWZvcm1CdWZmZXJcclxuXHRcdHVuaWZvcm1CdWZmZXJzLmZvckVhY2goKHVuaWZvcm1CdWZmZXIpID0+IHRoaXMuY3JlYXRlVW5pZm9ybUJ1ZmZlcih1bmlmb3JtQnVmZmVyLCBzaGFkZXJEYXRhLCBzaGFkZXJJZCkpO1xyXG5cdFx0Ly8gZmlsbCB0ZXh0dXJlIGFuZCBzYW1wbGVyXHJcblx0XHR0aGlzLmFkZFVuaWZvcm1Ub1NoYWRlckRhdGEodW5pZm9ybVRleHR1cmVBbmRTYW1wbGVyLCBzaGFkZXJEYXRhLCB1bmRlZmluZWQpO1xyXG5cdFx0cmV0dXJuIHNoYWRlckRhdGE7XHJcblx0fVxyXG5cdHByaXZhdGUgY3JlYXRlUmVuZGVyU3RhdGUoKSB7XHJcblx0XHRjb25zdCB7XHJcblx0XHRcdGJsZW5kQ29uc3RhbnQsXHJcblx0XHRcdGRlcHRoU3RlbmNpbCxcclxuXHRcdFx0dmlld1BvcnQsXHJcblx0XHRcdHNjaXNzb3JUZXN0LFxyXG5cdFx0XHR0YXJnZXRzLFxyXG5cdFx0XHRtdWx0aVNhbXBsZSxcclxuXHRcdFx0cHJpbWl0aXZlLFxyXG5cdFx0XHRzdGVuY2lsUmVmZXJlbmNlXHJcblx0XHR9ID0gdGhpcy5tb2RlbFBhcmFtcy5yZW5kZXJTdGF0ZTtcclxuXHRcdHJldHVybiBuZXcgUmVuZGVyU3RhdGUoe1xyXG5cdFx0XHRzY2lzc29yVGVzdDogc2Npc3NvclRlc3RcclxuXHRcdFx0XHQ/IG5ldyBTY2lzc29yVGVzdChzY2lzc29yVGVzdC54LCBzY2lzc29yVGVzdC55LCBzY2lzc29yVGVzdC53aWR0aCwgc2Npc3NvclRlc3QuaGVpZ2h0KVxyXG5cdFx0XHRcdDogdW5kZWZpbmVkLFxyXG5cdFx0XHR2aWV3cG9ydDogdmlld1BvcnQgPyBuZXcgVmlld1BvcnQodmlld1BvcnQueCwgdmlld1BvcnQueSwgdmlld1BvcnQud2lkdGgsIHZpZXdQb3J0LmhlaWdodCkgOiB1bmRlZmluZWQsXHJcblx0XHRcdHRhcmdldHM6IHRhcmdldHM/Lm1hcCgodGFyZ2V0KSA9PiB7XHJcblx0XHRcdFx0cmV0dXJuIG5ldyBUYXJnZXQodGFyZ2V0IGFzIGFueSk7XHJcblx0XHRcdH0pLFxyXG5cdFx0XHRkZXB0aFN0ZW5jaWw6IGRlcHRoU3RlbmNpbCA/IG5ldyBEZXB0aFN0ZW5jaWwoPERlcHRoU3RlbmNpbFByb3BzPmRlcHRoU3RlbmNpbCkgOiB1bmRlZmluZWQsXHJcblx0XHRcdGJsZW5kQ29uc3RhbnQ6IGJsZW5kQ29uc3RhbnRcclxuXHRcdFx0XHQ/IG5ldyBCbGVuZENvbnN0YW50KGJsZW5kQ29uc3RhbnQuciwgYmxlbmRDb25zdGFudC5nLCBibGVuZENvbnN0YW50LmIsIGJsZW5kQ29uc3RhbnQuYSlcclxuXHRcdFx0XHQ6IHVuZGVmaW5lZCxcclxuXHRcdFx0c3RlbmNpbFJlZmVyZW5jZTogc3RlbmNpbFJlZmVyZW5jZSB8fCAwLFxyXG5cdFx0XHRtdWx0aXNhbXBsZTogbXVsdGlTYW1wbGVcclxuXHRcdFx0XHQ/IG5ldyBNdWx0aVNhbXBsZShtdWx0aVNhbXBsZS5jb3VudCwgbXVsdGlTYW1wbGUubWFzaywgbXVsdGlTYW1wbGUuYWxwaGFUb0NvdmVyYWdlRW5hYmxlZClcclxuXHRcdFx0XHQ6IHVuZGVmaW5lZCxcclxuXHRcdFx0cHJpbWl0aXZlOiBwcmltaXRpdmVcclxuXHRcdFx0XHQ/IG5ldyBQcmltaXRpdmUoXHJcblx0XHRcdFx0XHRcdDxQcmltaXRpdmVUb3BvbG9neT5wcmltaXRpdmUudG9wb2xvZ3ksXHJcblx0XHRcdFx0XHRcdDxDdWxsTW9kZT5wcmltaXRpdmUuY3VsbE1vZGUsXHJcblx0XHRcdFx0XHRcdDxGcm9udEZhY2U+cHJpbWl0aXZlLmZyb250RmFjZSxcclxuXHRcdFx0XHRcdFx0cHJpbWl0aXZlLnVuY2xpcHBlZERlcHRoXHJcblx0XHRcdFx0ICApXHJcblx0XHRcdFx0OiB1bmRlZmluZWQsXHJcblx0XHRcdHN0ZW5jaWxFbmFibGVkOiBmYWxzZSxcclxuXHRcdFx0c2Npc3NvclRlc3RFbmFibGVkOiBmYWxzZVxyXG5cdFx0fSk7XHJcblx0fVxyXG5cdHByaXZhdGUgY3JlYXRlSW5kZXhCdWZmZXIoKSB7XHJcblx0XHRjb25zdCB7IGluZGljZXMsIHNoYWRlcklkIH0gPSB0aGlzLm1vZGVsUGFyYW1zO1xyXG5cdFx0bGV0IGluZGV4QnVmZmVyID0gdW5kZWZpbmVkO1xyXG5cdFx0aWYgKGluZGljZXMpIHtcclxuXHRcdFx0aW5kZXhCdWZmZXIgPSBuZXcgSW5kZXhCdWZmZXIoc2hhZGVySWQgKyBcIkluZGV4QnVmZmVyXCIpO1xyXG5cdFx0XHRpbmRleEJ1ZmZlci5zZXRJbmRpY2VzKGluZGljZXMpO1xyXG5cdFx0fVxyXG5cclxuXHRcdHJldHVybiBpbmRleEJ1ZmZlcjtcclxuXHR9XHJcblx0cHJpdmF0ZSBjcmVhdGVVbmlmb3JtQnVmZmVyKHVuaWZvcm1CdWZmZXJQYXJhbXMsIHNoYWRlckRhdGE6IFNoYWRlckRhdGEsIHNoYWRlcklkOiBzdHJpbmcpIHtcclxuXHRcdGNvbnN0IHtcclxuXHRcdFx0dHlwZSA9IFwidW5pZm9ybVwiLFxyXG5cdFx0XHR1c2FnZSA9IEJ1ZmZlclVzYWdlLlVuaWZvcm0gfCBCdWZmZXJVc2FnZS5Db3B5RHN0LFxyXG5cdFx0XHR1bmlmb3JtcyxcclxuXHRcdFx0dWlkLFxyXG5cdFx0XHRiaW5kaW5nLFxyXG5cdFx0XHRidWZmZXIsXHJcblx0XHRcdGJ1ZmZlclNpemUsXHJcblx0XHRcdHZpc2liaWxpdHlcclxuXHRcdH0gPSB1bmlmb3JtQnVmZmVyUGFyYW1zO1xyXG5cdFx0Y29uc3QgdW5pZm9ybUJ1ZmZlciA9IG5ldyBVbmlmb3JtQnVmZmVyKHtcclxuXHRcdFx0bGFiZWw6IHVpZCArIFwiX1VuaWZvcm1CdWZmZXJcIixcclxuXHRcdFx0dHlwZTogPEJ1ZmZlckJpbmRpbmdUeXBlPnR5cGUsXHJcblx0XHRcdHVzYWdlOiA8QnVmZmVyVXNhZ2U+dXNhZ2UsXHJcblx0XHRcdGJpbmRpbmcsXHJcblx0XHRcdGJ1ZmZlcixcclxuXHRcdFx0dmlzaWJpbGl0eSxcclxuXHRcdFx0c2l6ZTogYnVmZmVyPy5zaXplID8/IGJ1ZmZlclNpemVcclxuXHRcdH0pO1xyXG5cdFx0c2hhZGVyRGF0YS5zZXRVbmlmb3JtQnVmZmVyKHVpZCwgdW5pZm9ybUJ1ZmZlcik7XHJcblx0XHRpZiAoIWJ1ZmZlcikgdGhpcy5hZGRVbmlmb3JtVG9TaGFkZXJEYXRhKHVuaWZvcm1zLCBzaGFkZXJEYXRhLCB1bmlmb3JtQnVmZmVyKTtcclxuXHR9XHJcblx0cHJpdmF0ZSBhZGRVbmlmb3JtVG9TaGFkZXJEYXRhKHVuaWZvcm1zLCBzaGFkZXJEYXRhOiBTaGFkZXJEYXRhLCB1bmlmb3JtQnVmZmVyOiBVbmlmb3JtQnVmZmVyKSB7XHJcblx0XHRpZiAoIXVuaWZvcm1zKSByZXR1cm47XHJcblx0XHRjb25zdCB1bmlmb3Jtc05hbWVzID0gT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXModW5pZm9ybXMpO1xyXG5cdFx0dW5pZm9ybXNOYW1lcy5tYXAoKHVuaWZvcm1zTmFtZSkgPT4ge1xyXG5cdFx0XHRhZGRVbmlmb3JtVG9TaGFkZXJEYXRhKHVuaWZvcm1zTmFtZSwgdW5pZm9ybXNbdW5pZm9ybXNOYW1lXSwgc2hhZGVyRGF0YSwgdW5kZWZpbmVkLCB1bmlmb3JtQnVmZmVyKTtcclxuXHRcdH0pO1xyXG5cdH1cclxufVxyXG5cclxuZXhwb3J0IHR5cGUgcmVuZGVyTW9kZWxQYXJhbXMgPSB7XHJcblx0ZGV2aWNlOiBHUFVEZXZpY2U7XHJcblx0cGFzc0VuY29kZXI6IEdQVVJlbmRlclBhc3NFbmNvZGVyIHwgR1BVQ29tcHV0ZVBhc3NFbmNvZGVyO1xyXG59O1xyXG4iLCJpbXBvcnQgeyBJbnRlcmxlYXZlZEZsb2F0MzJBdHRyaWJ1dGUgfSBmcm9tIFwiLi4vcmVuZGVyL0F0dHJpYnV0ZVwiO1xyXG5pbXBvcnQgR2VvbWV0cnkgZnJvbSBcIi4vR2VvbWV0cnlcIjtcclxuZXhwb3J0IGNsYXNzIFNwcml0ZUdlb21ldHJ5IGV4dGVuZHMgR2VvbWV0cnkge1xyXG5cdGNvbnN0cnVjdG9yKCkge1xyXG5cdFx0c3VwZXIoe1xyXG5cdFx0XHR0eXBlOiBcInNwcml0ZUdlb21ldHJ5XCJcclxuXHRcdH0pO1xyXG5cdFx0dGhpcy5pbml0KCk7XHJcblx0fVxyXG5cdHByaXZhdGUgaW5pdCgpIHtcclxuXHRcdC8vIHh5euOAgXV2XHJcblx0XHRjb25zdCB2ZXJ0aWNlcyA9IFstMC41LCAtMC41LCAwLCAwLCAwLCAwLjUsIC0wLjUsIDAsIDEsIDAsIDAuNSwgMC41LCAwLCAxLCAxLCAtMC41LCAwLjUsIDAsIDAsIDFdO1xyXG5cdFx0Y29uc3QgaW5kaWNlcyA9IFswLCAxLCAyLCAwLCAyLCAzXTtcclxuXHRcdHRoaXMuY29tcHV0ZUJvdW5kaW5nU3BoZXJlKHZlcnRpY2VzLCA1KTtcclxuXHRcdHRoaXMuc2V0QXR0cmlidXRlKG5ldyBJbnRlcmxlYXZlZEZsb2F0MzJBdHRyaWJ1dGUoW1wicG9zaXRpb25cIiwgXCJ1dlwiXSwgdmVydGljZXMsIFszLCAyXSkpO1xyXG5cdFx0dGhpcy5zZXRJbmRpY2UoaW5kaWNlcyk7XHJcblx0XHR0aGlzLmNvdW50ID0gaW5kaWNlcy5sZW5ndGg7XHJcblx0fVxyXG59XHJcbiIsImltcG9ydCB7IEZyYW1lU3RhdGUgfSBmcm9tIFwiLi4vY29yZS9GcmFtZVN0YXRlXCI7XHJcbmltcG9ydCB0ZXh0dXJlQ2FjaGUgZnJvbSBcIi4uL2NvcmUvVGV4dHVyZUNhY2hlXCI7XHJcbmltcG9ydCB7IFVuaWZvcm1FbnVtIH0gZnJvbSBcIi4uL2NvcmUvV2ViR1BVVHlwZXNcIjtcclxuaW1wb3J0IHsgTWVzaCB9IGZyb20gXCIuLi9tZXNoL01lc2hcIjtcclxuaW1wb3J0IFVuaWZvcm1CdWZmZXIgZnJvbSBcIi4uL3JlbmRlci9Vbmlmb3JtQnVmZmVyXCI7XHJcbmltcG9ydCB7IFNoYWRlclNvdXJjZSB9IGZyb20gXCIuLi9zaGFkZXIvU2hhZGVyU291cmNlXCI7XHJcbmltcG9ydCB7IE1hdGVyaWFsIH0gZnJvbSBcIi4vTWF0ZXJpYWxcIjtcclxuXHJcbmV4cG9ydCBjbGFzcyBTcHJpdGVNYXRlcmlhbCBleHRlbmRzIE1hdGVyaWFsIHtcclxuXHRjb25zdHJ1Y3RvcigpIHtcclxuXHRcdHN1cGVyKCk7XHJcblx0XHR0aGlzLnR5cGUgPSBcInNwcml0ZVwiO1xyXG5cdFx0dGhpcy5zaGFkZXJTb3VyY2UgPSBuZXcgU2hhZGVyU291cmNlKHtcclxuXHRcdFx0c2hhZGVySWQ6IHRoaXMudHlwZSxcclxuXHRcdFx0ZGVmaW5lczoge1xyXG5cdFx0XHRcdEhBU19VVjogdHJ1ZVxyXG5cdFx0XHR9XHJcblx0XHR9KTtcclxuXHR9XHJcblx0dXBkYXRlKGZyYW1lU3RhdGU/OiBGcmFtZVN0YXRlLCBtZXNoPzogTWVzaCkge1xyXG5cdFx0aWYgKCF0aGlzLnNoYWRlckRhdGEgfHwgdGhpcy5kaXJ0eSkgdGhpcy5jcmVhdGVTaGFkZXJEYXRhKG1lc2gpO1xyXG5cdH1cclxuXHRwcm90ZWN0ZWQgY3JlYXRlU2hhZGVyRGF0YShtZXNoPzogTWVzaCkge1xyXG5cdFx0c3VwZXIuY3JlYXRlU2hhZGVyRGF0YSgpO1xyXG5cdFx0Y29uc3QgdW5pZm9ybUJ1ZmZlciA9IG5ldyBVbmlmb3JtQnVmZmVyKHsgbGFiZWw6IFwic3ByaXRlXCIgfSk7XHJcblx0XHR1bmlmb3JtQnVmZmVyLnNldFVuaWZvcm0oXHJcblx0XHRcdFwibW9kZWxNYXRyaXhcIixcclxuXHRcdFx0KCkgPT4ge1xyXG5cdFx0XHRcdHJldHVybiBtZXNoLm1vZGVsTWF0cml4O1xyXG5cdFx0XHR9LFxyXG5cdFx0XHRVbmlmb3JtRW51bS5NYXQ0XHJcblx0XHQpO1xyXG5cdFx0dW5pZm9ybUJ1ZmZlci5zZXRVbmlmb3JtKFwiY29sb3JcIiwgbWVzaCwgVW5pZm9ybUVudW0uQ29sb3IpO1xyXG5cdFx0dW5pZm9ybUJ1ZmZlci5zZXRVbmlmb3JtKFwicm90YXRpb25cIiwgbWVzaCwgVW5pZm9ybUVudW0uRmxvYXQpO1xyXG5cdFx0dW5pZm9ybUJ1ZmZlci5zZXRVbmlmb3JtKFwiY2VudGVyXCIsIG1lc2gsIFVuaWZvcm1FbnVtLkZsb2F0VmVjMik7XHJcblx0XHR1bmlmb3JtQnVmZmVyLnNldFVuaWZvcm0oXCJvcGFjaXR5XCIsIG1lc2gsIFVuaWZvcm1FbnVtLkZsb2F0KTtcclxuXHRcdHRoaXMuc2hhZGVyRGF0YS5zZXRVbmlmb3JtQnVmZmVyKFwic3ByaXRlXCIsIHVuaWZvcm1CdWZmZXIpO1xyXG5cdFx0aWYgKHRoaXMuYmFzZVRleHR1cmUpIHtcclxuXHRcdFx0dGhpcy5zaGFkZXJEYXRhLnNldERlZmluZShcIlVTRV9DT0xPUlRFWFRVUkVcIiwgdHJ1ZSk7XHJcblx0XHRcdHRoaXMuc2hhZGVyRGF0YS5zZXRUZXh0dXJlKFwiYmFzZUNvbG9yVGV4dHVyZVwiLCB0aGlzLmJhc2VUZXh0dXJlKTtcclxuXHRcdFx0dGhpcy5zaGFkZXJEYXRhLnNldFNhbXBsZXIoXCJiYXNlQ29sb3JTYW1wbGVyXCIsIHRoaXMuYmFzZVNhbXBsZXIgfHwgdGV4dHVyZUNhY2hlLmRlZmF1bHRTYW1wbGVyKTtcclxuXHRcdH1cclxuXHR9XHJcblx0ZGVzdHJveSgpIHtcclxuXHRcdHRoaXM/LmJhc2VUZXh0dXJlPy5kZXN0cm95KCk7XHJcblx0XHRzdXBlci5kZXN0cm95KCk7XHJcblx0fVxyXG59XHJcbiIsImltcG9ydCB7IFNwcml0ZUdlb21ldHJ5IH0gZnJvbSBcIi4uL2dlb21ldHJ5L1Nwcml0ZUdlb21ldHJ5XCI7XHJcbmltcG9ydCB7IFNwcml0ZU1hdGVyaWFsIH0gZnJvbSBcIi4uL21hdGVyaWFsL1Nwcml0ZU1hdGVyaWFsXCI7XHJcbmltcG9ydCBDb2xvciBmcm9tIFwiLi4vbWF0aC9Db2xvclwiO1xyXG5pbXBvcnQgVmVjdG9yMiBmcm9tIFwiLi4vbWF0aC9WZWN0b3IyXCI7XHJcbmltcG9ydCBTYW1wbGVyIGZyb20gXCIuLi9yZW5kZXIvU2FtcGxlclwiO1xyXG5pbXBvcnQgVGV4dHVyZSBmcm9tIFwiLi4vcmVuZGVyL1RleHR1cmVcIjtcclxuaW1wb3J0IHsgTWVzaCB9IGZyb20gXCIuL01lc2hcIjtcclxuXHJcbmV4cG9ydCBjbGFzcyBTcHJpdGUgZXh0ZW5kcyBNZXNoIHtcclxuXHRwdWJsaWMgcm90YXRpb246IG51bWJlcjtcclxuXHRwdWJsaWMgY2VudGVyOiBWZWN0b3IyO1xyXG5cdHB1YmxpYyBjb2xvcjpDb2xvcjtcclxuXHRwdWJsaWMgb3BhY2l0eTpudW1iZXI7XHJcblx0Y29uc3RydWN0b3IoKSB7XHJcblx0XHRzdXBlcigpO1xyXG5cdFx0dGhpcy5tYXRlcmlhbCA9IG5ldyBTcHJpdGVNYXRlcmlhbCgpO1xyXG5cdFx0dGhpcy5nZW9tZXRyeSA9IG5ldyBTcHJpdGVHZW9tZXRyeSgpO1xyXG5cdFx0dGhpcy5yb3RhdGlvbiA9IE1hdGguUEk7XHJcblx0XHR0aGlzLm9wYWNpdHkgPSAxO1xyXG5cdFx0dGhpcy5jZW50ZXIgPSBuZXcgVmVjdG9yMigwLCAwKTtcclxuXHRcdHRoaXMuY29sb3IgPSBuZXcgQ29sb3IoMSwgMCwgMCk7XHJcblx0fVxyXG5cdHNldFRleHR1cmUodGV4dHVyZTogVGV4dHVyZSkge1xyXG5cdFx0dGhpcy5tYXRlcmlhbC5iYXNlVGV4dHVyZSA9IHRleHR1cmU7XHJcblx0fVxyXG5cdHNldFNhbXBsZXIoc2FtcGxlcjogU2FtcGxlcikge1xyXG5cdFx0dGhpcy5tYXRlcmlhbC5iYXNlU2FtcGxlciA9IHNhbXBsZXI7XHJcblx0fVxyXG59XHJcbiIsIi8qKlxyXG4gKiBFbnN1cmUgZmlyc3QgYXJndW1lbnQgcGFzc2VkIHRvIHRoZSBwcmltaXRpdmUgZnVuY3Rpb25zIGlzIGFuIG9iamVjdFxyXG4gKiBAcGFyYW0gey4uLip9IGFyZ3NcclxuICovXHJcbmZ1bmN0aW9uIGNoZWNrQXJndW1lbnRzKGFyZ3MpIHtcclxuXHRjb25zdCBhcmd1bWVudFR5cGUgPSB0eXBlb2YgYXJnc1swXTtcclxuXHRpZiAoYXJndW1lbnRUeXBlICE9PSBcIm9iamVjdFwiICYmIGFyZ3VtZW50VHlwZSAhPT0gXCJ1bmRlZmluZWRcIikge1xyXG5cdFx0Y29uc29sZS5lcnJvcihcIkZpcnN0IGFyZ3VtZW50IG11c3QgYmUgYW4gb2JqZWN0LlwiKTtcclxuXHR9XHJcbn1cclxuXHJcbi8qKlxyXG4gKiBAcHJpdmF0ZVxyXG4gKi9cclxubGV0IFRZUEVEX0FSUkFZX1RZUEU7XHJcblxyXG4vKipcclxuICogU2VsZWN0IGNlbGxzIHR5cGVkIGFycmF5IGZyb20gYSBzaXplIGRldGVybWluZWQgYnkgYW1vdW50IG9mIHZlcnRpY2VzLlxyXG4gKlxyXG4gKiBAcGFyYW0ge251bWJlcn0gc2l6ZSBUaGUgbWF4IHZhbHVlIGV4cGVjdGVkXHJcbiAqIEByZXR1cm5zIHsoVWludDhBcnJheXxVaW50MTZBcnJheXxVaW50MzJBcnJheSl9XHJcbiAqIEBzZWUgW01ETiBUeXBlZEFycmF5IG9iamVjdHNde0BsaW5rIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0phdmFTY3JpcHQvUmVmZXJlbmNlL0dsb2JhbF9PYmplY3RzL1R5cGVkQXJyYXkjdHlwZWRhcnJheV9vYmplY3RzfVxyXG4gKi9cclxuY29uc3QgZ2V0Q2VsbHNUeXBlZEFycmF5ID0gKHNpemUpID0+XHJcblx0VFlQRURfQVJSQVlfVFlQRSB8fCAoc2l6ZSA8PSAyNTUgPyBVaW50OEFycmF5IDogc2l6ZSA8PSA2NTUzNSA/IFVpbnQxNkFycmF5IDogVWludDMyQXJyYXkpO1xyXG5cclxuLyoqXHJcbiAqIEBwcml2YXRlXHJcbiAqL1xyXG5jb25zdCBQTEFORV9ESVJFQ1RJT05TID0ge1xyXG5cdHo6IFswLCAxLCAyLCAxLCAtMSwgMV0sXHJcblx0XCItelwiOiBbMCwgMSwgMiwgLTEsIC0xLCAtMV0sXHJcblx0XCIteFwiOiBbMiwgMSwgMCwgMSwgLTEsIC0xXSxcclxuXHR4OiBbMiwgMSwgMCwgLTEsIC0xLCAxXSxcclxuXHR5OiBbMCwgMiwgMSwgMSwgMSwgMV0sXHJcblx0XCIteVwiOiBbMCwgMiwgMSwgMSwgLTEsIC0xXVxyXG59O1xyXG5cclxuLyoqXHJcbiAqIEBwcml2YXRlXHJcbiAqL1xyXG5mdW5jdGlvbiBjb21wdXRlUGxhbmUoXHJcblx0Z2VvbWV0cnksXHJcblx0aW5kaWNlcyxcclxuXHRzdSxcclxuXHRzdixcclxuXHRudSxcclxuXHRudixcclxuXHRkaXJlY3Rpb24gPSBcInpcIixcclxuXHRwdyA9IDAsXHJcblx0cXVhZHMgPSBmYWxzZSxcclxuXHR1dlNjYWxlID0gWzEsIDFdLFxyXG5cdHV2T2Zmc2V0ID0gWzAsIDBdLFxyXG5cdGNlbnRlciA9IFswLCAwLCAwXSxcclxuXHRjY3cgPSB0cnVlXHJcbikge1xyXG5cdGNvbnN0IHsgcG9zaXRpb25zLCBub3JtYWxzLCB1dnMsIGNlbGxzIH0gPSBnZW9tZXRyeTtcclxuXHRjb25zdCBbdSwgdiwgdywgZmxpcFUsIGZsaXBWLCBub3JtYWxdID0gUExBTkVfRElSRUNUSU9OU1tkaXJlY3Rpb25dO1xyXG5cclxuXHRjb25zdCB2ZXJ0ZXhPZmZzZXQgPSBpbmRpY2VzLnZlcnRleDtcclxuXHJcblx0Zm9yIChsZXQgaiA9IDA7IGogPD0gbnY7IGorKykge1xyXG5cdFx0Zm9yIChsZXQgaSA9IDA7IGkgPD0gbnU7IGkrKykge1xyXG5cdFx0XHRwb3NpdGlvbnNbaW5kaWNlcy52ZXJ0ZXggKiAzICsgdV0gPSAoLXN1IC8gMiArIChpICogc3UpIC8gbnUpICogZmxpcFUgKyBjZW50ZXJbdV07XHJcblx0XHRcdHBvc2l0aW9uc1tpbmRpY2VzLnZlcnRleCAqIDMgKyB2XSA9ICgtc3YgLyAyICsgKGogKiBzdikgLyBudikgKiBmbGlwViArIGNlbnRlclt2XTtcclxuXHRcdFx0cG9zaXRpb25zW2luZGljZXMudmVydGV4ICogMyArIHddID0gcHcgKyBjZW50ZXJbd107XHJcblxyXG5cdFx0XHRub3JtYWxzW2luZGljZXMudmVydGV4ICogMyArIHddID0gbm9ybWFsO1xyXG5cclxuXHRcdFx0dXZzW2luZGljZXMudmVydGV4ICogMl0gPSAoaSAvIG51KSAqIHV2U2NhbGVbMF0gKyB1dk9mZnNldFswXTtcclxuXHRcdFx0dXZzW2luZGljZXMudmVydGV4ICogMiArIDFdID0gKDEgLSBqIC8gbnYpICogdXZTY2FsZVsxXSArIHV2T2Zmc2V0WzFdO1xyXG5cclxuXHRcdFx0aW5kaWNlcy52ZXJ0ZXgrKztcclxuXHJcblx0XHRcdGlmIChqIDwgbnYgJiYgaSA8IG51KSB7XHJcblx0XHRcdFx0Y29uc3QgbiA9IHZlcnRleE9mZnNldCArIGogKiAobnUgKyAxKSArIGk7XHJcblx0XHRcdFx0aWYgKHF1YWRzKSB7XHJcblx0XHRcdFx0XHRjb25zdCBvID0gdmVydGV4T2Zmc2V0ICsgKGogKyAxKSAqIChudSArIDEpICsgaTtcclxuXHRcdFx0XHRcdGNlbGxzW2luZGljZXMuY2VsbF0gPSBuO1xyXG5cdFx0XHRcdFx0Y2VsbHNbaW5kaWNlcy5jZWxsICsgMV0gPSBvO1xyXG5cdFx0XHRcdFx0Y2VsbHNbaW5kaWNlcy5jZWxsICsgMl0gPSBvICsgMTtcclxuXHRcdFx0XHRcdGNlbGxzW2luZGljZXMuY2VsbCArIDNdID0gbiArIDE7XHJcblx0XHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHRcdGNlbGxzW2luZGljZXMuY2VsbF0gPSBuO1xyXG5cdFx0XHRcdFx0Y2VsbHNbaW5kaWNlcy5jZWxsICsgKGNjdyA/IDEgOiAyKV0gPSBuICsgbnUgKyAxO1xyXG5cdFx0XHRcdFx0Y2VsbHNbaW5kaWNlcy5jZWxsICsgKGNjdyA/IDIgOiAxKV0gPSBuICsgbnUgKyAyO1xyXG5cclxuXHRcdFx0XHRcdGNlbGxzW2luZGljZXMuY2VsbCArIDNdID0gbjtcclxuXHRcdFx0XHRcdGNlbGxzW2luZGljZXMuY2VsbCArIChjY3cgPyA0IDogNSldID0gbiArIG51ICsgMjtcclxuXHRcdFx0XHRcdGNlbGxzW2luZGljZXMuY2VsbCArIChjY3cgPyA1IDogNCldID0gbiArIDE7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHRcdGluZGljZXMuY2VsbCArPSBxdWFkcyA/IDQgOiA2O1xyXG5cdFx0XHR9XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHRyZXR1cm4gZ2VvbWV0cnk7XHJcbn1cclxuLyoqXHJcbiAqIEB0eXBlZGVmIHtPYmplY3R9IEN1YmVPcHRpb25zXHJcbiAqIEBwcm9wZXJ0eSB7bnVtYmVyfSBbc3g9MV1cclxuICogQHByb3BlcnR5IHtudW1iZXJ9IFtzeT1zeF1cclxuICogQHByb3BlcnR5IHtudW1iZXJ9IFtzej1zeF1cclxuICogQHByb3BlcnR5IHtudW1iZXJ9IFtueD0xXVxyXG4gKiBAcHJvcGVydHkge251bWJlcn0gW255PW54XVxyXG4gKiBAcHJvcGVydHkge251bWJlcn0gW256PW54XVxyXG4gKi9cclxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUN1YmUoeyBzeCA9IDEsIHN5ID0gMSwgc3ogPSAxLCBueCA9IDEsIG55ID0gMSwgbnogPSAxIH0gPSB7fSkge1xyXG5cdGNoZWNrQXJndW1lbnRzKGFyZ3VtZW50cyk7XHJcblxyXG5cdGNvbnN0IHNpemUgPSAobnggKyAxKSAqIChueSArIDEpICogMiArIChueCArIDEpICogKG56ICsgMSkgKiAyICsgKG56ICsgMSkgKiAobnkgKyAxKSAqIDI7XHJcblxyXG5cdGNvbnN0IGdlb21ldHJ5ID0ge1xyXG5cdFx0cG9zaXRpb25zOiBuZXcgRmxvYXQzMkFycmF5KHNpemUgKiAzKSxcclxuXHRcdG5vcm1hbHM6IG5ldyBGbG9hdDMyQXJyYXkoc2l6ZSAqIDMpLFxyXG5cdFx0dXZzOiBuZXcgRmxvYXQzMkFycmF5KHNpemUgKiAyKSxcclxuXHRcdGNlbGxzOiBuZXcgKGdldENlbGxzVHlwZWRBcnJheShzaXplKSkoKG54ICogbnkgKiAyICsgbnggKiBueiAqIDIgKyBueiAqIG55ICogMikgKiA2KVxyXG5cdH07XHJcblxyXG5cdGNvbnN0IGhhbGZTWCA9IHN4ICogMC41O1xyXG5cdGNvbnN0IGhhbGZTWSA9IHN5ICogMC41O1xyXG5cdGNvbnN0IGhhbGZTWiA9IHN6ICogMC41O1xyXG5cclxuXHRjb25zdCBpbmRpY2VzID0geyB2ZXJ0ZXg6IDAsIGNlbGw6IDAgfTtcclxuXHJcblx0Y29tcHV0ZVBsYW5lKGdlb21ldHJ5LCBpbmRpY2VzLCBzeCwgc3ksIG54LCBueSwgXCJ6XCIsIGhhbGZTWik7XHJcblx0Y29tcHV0ZVBsYW5lKGdlb21ldHJ5LCBpbmRpY2VzLCBzeCwgc3ksIG54LCBueSwgXCItelwiLCAtaGFsZlNaKTtcclxuXHRjb21wdXRlUGxhbmUoZ2VvbWV0cnksIGluZGljZXMsIHN6LCBzeSwgbnosIG55LCBcIi14XCIsIC1oYWxmU1gpO1xyXG5cdGNvbXB1dGVQbGFuZShnZW9tZXRyeSwgaW5kaWNlcywgc3osIHN5LCBueiwgbnksIFwieFwiLCBoYWxmU1gpO1xyXG5cdGNvbXB1dGVQbGFuZShnZW9tZXRyeSwgaW5kaWNlcywgc3gsIHN6LCBueCwgbnosIFwieVwiLCBoYWxmU1kpO1xyXG5cdGNvbXB1dGVQbGFuZShnZW9tZXRyeSwgaW5kaWNlcywgc3gsIHN6LCBueCwgbnosIFwiLXlcIiwgLWhhbGZTWSk7XHJcblxyXG5cdHJldHVybiBnZW9tZXRyeTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIGNyZWF0ZUJveChvcHRpb25zKSB7XHJcblx0b3B0aW9ucyA9IG9wdGlvbnMgfHwge307XHJcblxyXG5cdGNvbnN0IGRpbWVuc2lvbnMgPSBvcHRpb25zLmRpbWVuc2lvbnMgfHwgWzEsIDEsIDFdO1xyXG5cdGNvbnN0IHBvc2l0aW9uID0gb3B0aW9ucy5wb3NpdGlvbiB8fCBbLWRpbWVuc2lvbnNbMF0gLyAyLCAtZGltZW5zaW9uc1sxXSAvIDIsIC1kaW1lbnNpb25zWzJdIC8gMl07XHJcblx0Y29uc3QgeCA9IHBvc2l0aW9uWzBdO1xyXG5cdGNvbnN0IHkgPSBwb3NpdGlvblsxXTtcclxuXHRjb25zdCB6ID0gcG9zaXRpb25bMl07XHJcblx0Y29uc3Qgd2lkdGggPSBkaW1lbnNpb25zWzBdO1xyXG5cdGNvbnN0IGhlaWdodCA9IGRpbWVuc2lvbnNbMV07XHJcblx0Y29uc3QgZGVwdGggPSBkaW1lbnNpb25zWzJdO1xyXG5cclxuXHRjb25zdCBmYmwgPSB7IHg6IHgsIHk6IHksIHo6IHogKyBkZXB0aCB9O1xyXG5cdGNvbnN0IGZiciA9IHsgeDogeCArIHdpZHRoLCB5OiB5LCB6OiB6ICsgZGVwdGggfTtcclxuXHRjb25zdCBmdGwgPSB7IHg6IHgsIHk6IHkgKyBoZWlnaHQsIHo6IHogKyBkZXB0aCB9O1xyXG5cdGNvbnN0IGZ0ciA9IHsgeDogeCArIHdpZHRoLCB5OiB5ICsgaGVpZ2h0LCB6OiB6ICsgZGVwdGggfTtcclxuXHRjb25zdCBiYmwgPSB7IHg6IHgsIHk6IHksIHo6IHogfTtcclxuXHRjb25zdCBiYnIgPSB7IHg6IHggKyB3aWR0aCwgeTogeSwgejogeiB9O1xyXG5cdGNvbnN0IGJ0bCA9IHsgeDogeCwgeTogeSArIGhlaWdodCwgejogeiB9O1xyXG5cdGNvbnN0IGJ0ciA9IHsgeDogeCArIHdpZHRoLCB5OiB5ICsgaGVpZ2h0LCB6OiB6IH07XHJcblxyXG5cdGNvbnN0IHBvc2l0aW9ucyA9IFtcclxuXHRcdC8vIGZyb250XHJcblx0XHRmYmwueCxcclxuXHRcdGZibC55LFxyXG5cdFx0ZmJsLnosXHJcblx0XHRmYnIueCxcclxuXHRcdGZici55LFxyXG5cdFx0ZmJyLnosXHJcblx0XHRmdGwueCxcclxuXHRcdGZ0bC55LFxyXG5cdFx0ZnRsLnosXHJcblx0XHRmdGwueCxcclxuXHRcdGZ0bC55LFxyXG5cdFx0ZnRsLnosXHJcblx0XHRmYnIueCxcclxuXHRcdGZici55LFxyXG5cdFx0ZmJyLnosXHJcblx0XHRmdHIueCxcclxuXHRcdGZ0ci55LFxyXG5cdFx0ZnRyLnosXHJcblxyXG5cdFx0Ly8gcmlnaHRcclxuXHRcdGZici54LFxyXG5cdFx0ZmJyLnksXHJcblx0XHRmYnIueixcclxuXHRcdGJici54LFxyXG5cdFx0YmJyLnksXHJcblx0XHRiYnIueixcclxuXHRcdGZ0ci54LFxyXG5cdFx0ZnRyLnksXHJcblx0XHRmdHIueixcclxuXHRcdGZ0ci54LFxyXG5cdFx0ZnRyLnksXHJcblx0XHRmdHIueixcclxuXHRcdGJici54LFxyXG5cdFx0YmJyLnksXHJcblx0XHRiYnIueixcclxuXHRcdGJ0ci54LFxyXG5cdFx0YnRyLnksXHJcblx0XHRidHIueixcclxuXHJcblx0XHQvLyBiYWNrXHJcblx0XHRmYnIueCxcclxuXHRcdGJici55LFxyXG5cdFx0YmJyLnosXHJcblx0XHRiYmwueCxcclxuXHRcdGJibC55LFxyXG5cdFx0YmJsLnosXHJcblx0XHRidHIueCxcclxuXHRcdGJ0ci55LFxyXG5cdFx0YnRyLnosXHJcblx0XHRidHIueCxcclxuXHRcdGJ0ci55LFxyXG5cdFx0YnRyLnosXHJcblx0XHRiYmwueCxcclxuXHRcdGJibC55LFxyXG5cdFx0YmJsLnosXHJcblx0XHRidGwueCxcclxuXHRcdGJ0bC55LFxyXG5cdFx0YnRsLnosXHJcblxyXG5cdFx0Ly8gbGVmdFxyXG5cdFx0YmJsLngsXHJcblx0XHRiYmwueSxcclxuXHRcdGJibC56LFxyXG5cdFx0ZmJsLngsXHJcblx0XHRmYmwueSxcclxuXHRcdGZibC56LFxyXG5cdFx0YnRsLngsXHJcblx0XHRidGwueSxcclxuXHRcdGJ0bC56LFxyXG5cdFx0YnRsLngsXHJcblx0XHRidGwueSxcclxuXHRcdGJ0bC56LFxyXG5cdFx0ZmJsLngsXHJcblx0XHRmYmwueSxcclxuXHRcdGZibC56LFxyXG5cdFx0ZnRsLngsXHJcblx0XHRmdGwueSxcclxuXHRcdGZ0bC56LFxyXG5cclxuXHRcdC8vIHRvcFxyXG5cdFx0ZnRsLngsXHJcblx0XHRmdGwueSxcclxuXHRcdGZ0bC56LFxyXG5cdFx0ZnRyLngsXHJcblx0XHRmdHIueSxcclxuXHRcdGZ0ci56LFxyXG5cdFx0YnRsLngsXHJcblx0XHRidGwueSxcclxuXHRcdGJ0bC56LFxyXG5cdFx0YnRsLngsXHJcblx0XHRidGwueSxcclxuXHRcdGJ0bC56LFxyXG5cdFx0ZnRyLngsXHJcblx0XHRmdHIueSxcclxuXHRcdGZ0ci56LFxyXG5cdFx0YnRyLngsXHJcblx0XHRidHIueSxcclxuXHRcdGJ0ci56LFxyXG5cclxuXHRcdC8vIGJvdHRvbVxyXG5cdFx0YmJsLngsXHJcblx0XHRiYmwueSxcclxuXHRcdGJibC56LFxyXG5cdFx0YmJyLngsXHJcblx0XHRiYnIueSxcclxuXHRcdGJici56LFxyXG5cdFx0ZmJsLngsXHJcblx0XHRmYmwueSxcclxuXHRcdGZibC56LFxyXG5cdFx0ZmJsLngsXHJcblx0XHRmYmwueSxcclxuXHRcdGZibC56LFxyXG5cdFx0YmJyLngsXHJcblx0XHRiYnIueSxcclxuXHRcdGJici56LFxyXG5cdFx0ZmJyLngsXHJcblx0XHRmYnIueSxcclxuXHRcdGZici56XHJcblx0XTtcclxuXHJcblx0Y29uc3QgdXZzID0gW1xyXG5cdFx0Ly8gZnJvbnRcclxuXHRcdDAsIDAsIDEsIDAsIDAsIDEsIDAsIDEsIDEsIDAsIDEsIDEsXHJcblxyXG5cdFx0Ly8gcmlnaHRcclxuXHRcdDAsIDAsIDEsIDAsIDAsIDEsIDAsIDEsIDEsIDAsIDEsIDEsXHJcblxyXG5cdFx0Ly8gYmFja1xyXG5cdFx0MCwgMCwgMSwgMCwgMCwgMSwgMCwgMSwgMSwgMCwgMSwgMSxcclxuXHJcblx0XHQvLyBsZWZ0XHJcblx0XHQwLCAwLCAxLCAwLCAwLCAxLCAwLCAxLCAxLCAwLCAxLCAxLFxyXG5cclxuXHRcdC8vIHRvcFxyXG5cdFx0MCwgMCwgMSwgMCwgMCwgMSwgMCwgMSwgMSwgMCwgMSwgMSxcclxuXHJcblx0XHQvLyBib3R0b21cclxuXHRcdDAsIDAsIDEsIDAsIDAsIDEsIDAsIDEsIDEsIDAsIDEsIDFcclxuXHRdO1xyXG5cclxuXHRjb25zdCBub3JtYWxzID0gW1xyXG5cdFx0Ly8gZnJvbnRcclxuXHRcdDAsIDAsIDEsIDAsIDAsIDEsIDAsIDAsIDEsIDAsIDAsIDEsIDAsIDAsIDEsIDAsIDAsIDEsXHJcblxyXG5cdFx0Ly8gcmlnaHRcclxuXHRcdDEsIDAsIDAsIDEsIDAsIDAsIDEsIDAsIDAsIDEsIDAsIDAsIDEsIDAsIDAsIDEsIDAsIDAsXHJcblxyXG5cdFx0Ly8gYmFja1xyXG5cdFx0MCwgMCwgLTEsIDAsIDAsIC0xLCAwLCAwLCAtMSwgMCwgMCwgLTEsIDAsIDAsIC0xLCAwLCAwLCAtMSxcclxuXHJcblx0XHQvLyBsZWZ0XHJcblx0XHQtMSwgMCwgMCwgLTEsIDAsIDAsIC0xLCAwLCAwLCAtMSwgMCwgMCwgLTEsIDAsIDAsIC0xLCAwLCAwLFxyXG5cclxuXHRcdC8vIHRvcFxyXG5cdFx0MCwgMSwgMCwgMCwgMSwgMCwgMCwgMSwgMCwgMCwgMSwgMCwgMCwgMSwgMCwgMCwgMSwgMCxcclxuXHJcblx0XHQvLyBib3R0b21cclxuXHRcdDAsIC0xLCAwLCAwLCAtMSwgMCwgMCwgLTEsIDAsIDAsIC0xLCAwLCAwLCAtMSwgMCwgMCwgLTEsIDBcclxuXHRdO1xyXG5cdHJldHVybiB7XHJcblx0XHRwb3NpdGlvbnM6IHBvc2l0aW9ucyxcclxuXHRcdG5vcm1hbHM6IG5vcm1hbHMsXHJcblx0XHR1dnM6IHV2c1xyXG5cdH07XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVTcGhlcmUob3B0aW9ucykge1xyXG5cdG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xyXG5cclxuXHRjb25zdCBsb25nQmFuZHMgPSBvcHRpb25zLmxvbmdCYW5kcyB8fCAzMjtcclxuXHRjb25zdCBsYXRCYW5kcyA9IG9wdGlvbnMubGF0QmFuZHMgfHwgMzI7XHJcblx0Y29uc3QgcmFkaXVzID0gb3B0aW9ucy5yYWRpdXMgfHwgMTtcclxuXHRjb25zdCBsYXRfc3RlcCA9IE1hdGguUEkgLyBsYXRCYW5kcztcclxuXHRjb25zdCBsb25nX3N0ZXAgPSAoMiAqIE1hdGguUEkpIC8gbG9uZ0JhbmRzO1xyXG5cdGNvbnN0IG51bV9wb3NpdGlvbnMgPSBsb25nQmFuZHMgKiBsYXRCYW5kcyAqIDQ7XHJcblx0Y29uc3QgbnVtX2luZGljZXMgPSBsb25nQmFuZHMgKiBsYXRCYW5kcyAqIDY7XHJcblx0bGV0IGxhdF9hbmdsZSwgbG9uZ19hbmdsZTtcclxuXHRjb25zdCBwb3NpdGlvbnMgPSBuZXcgQXJyYXkobnVtX3Bvc2l0aW9ucyAqIDMpO1xyXG5cdGNvbnN0IG5vcm1hbHMgPSBuZXcgQXJyYXkobnVtX3Bvc2l0aW9ucyAqIDMpO1xyXG5cdGNvbnN0IHV2cyA9IG5ldyBBcnJheShudW1fcG9zaXRpb25zICogMik7XHJcblx0Y29uc3QgaW5kaWNlcyA9IG5ldyBBcnJheShudW1faW5kaWNlcyk7XHJcblx0bGV0IHgxLCB4MiwgeDMsIHg0LCB5MSwgeTIsIHoxLCB6MiwgejMsIHo0LCB1MSwgdTIsIHYxLCB2MjtcclxuXHRsZXQgaSwgajtcclxuXHRsZXQgayA9IDAsXHJcblx0XHRsID0gMDtcclxuXHRsZXQgdmksIHRpO1xyXG5cclxuXHRmb3IgKGkgPSAwOyBpIDwgbGF0QmFuZHM7IGkrKykge1xyXG5cdFx0bGF0X2FuZ2xlID0gaSAqIGxhdF9zdGVwO1xyXG5cdFx0eTEgPSBNYXRoLmNvcyhsYXRfYW5nbGUpO1xyXG5cdFx0eTIgPSBNYXRoLmNvcyhsYXRfYW5nbGUgKyBsYXRfc3RlcCk7XHJcblx0XHRmb3IgKGogPSAwOyBqIDwgbG9uZ0JhbmRzOyBqKyspIHtcclxuXHRcdFx0bG9uZ19hbmdsZSA9IGogKiBsb25nX3N0ZXA7XHJcblx0XHRcdHgxID0gTWF0aC5zaW4obGF0X2FuZ2xlKSAqIE1hdGguY29zKGxvbmdfYW5nbGUpO1xyXG5cdFx0XHR4MiA9IE1hdGguc2luKGxhdF9hbmdsZSkgKiBNYXRoLmNvcyhsb25nX2FuZ2xlICsgbG9uZ19zdGVwKTtcclxuXHRcdFx0eDMgPSBNYXRoLnNpbihsYXRfYW5nbGUgKyBsYXRfc3RlcCkgKiBNYXRoLmNvcyhsb25nX2FuZ2xlKTtcclxuXHRcdFx0eDQgPSBNYXRoLnNpbihsYXRfYW5nbGUgKyBsYXRfc3RlcCkgKiBNYXRoLmNvcyhsb25nX2FuZ2xlICsgbG9uZ19zdGVwKTtcclxuXHRcdFx0ejEgPSBNYXRoLnNpbihsYXRfYW5nbGUpICogTWF0aC5zaW4obG9uZ19hbmdsZSk7XHJcblx0XHRcdHoyID0gTWF0aC5zaW4obGF0X2FuZ2xlKSAqIE1hdGguc2luKGxvbmdfYW5nbGUgKyBsb25nX3N0ZXApO1xyXG5cdFx0XHR6MyA9IE1hdGguc2luKGxhdF9hbmdsZSArIGxhdF9zdGVwKSAqIE1hdGguc2luKGxvbmdfYW5nbGUpO1xyXG5cdFx0XHR6NCA9IE1hdGguc2luKGxhdF9hbmdsZSArIGxhdF9zdGVwKSAqIE1hdGguc2luKGxvbmdfYW5nbGUgKyBsb25nX3N0ZXApO1xyXG5cdFx0XHR1MSA9IDEgLSBqIC8gbG9uZ0JhbmRzO1xyXG5cdFx0XHR1MiA9IDEgLSAoaiArIDEpIC8gbG9uZ0JhbmRzO1xyXG5cdFx0XHR2MSA9IDEgLSBpIC8gbGF0QmFuZHM7XHJcblx0XHRcdHYyID0gMSAtIChpICsgMSkgLyBsYXRCYW5kcztcclxuXHRcdFx0dmkgPSBrICogMztcclxuXHRcdFx0dGkgPSBrICogMjtcclxuXHJcblx0XHRcdHBvc2l0aW9uc1t2aV0gPSB4MSAqIHJhZGl1cztcclxuXHRcdFx0cG9zaXRpb25zW3ZpICsgMV0gPSB5MSAqIHJhZGl1cztcclxuXHRcdFx0cG9zaXRpb25zW3ZpICsgMl0gPSB6MSAqIHJhZGl1czsgLy8gdjBcclxuXHJcblx0XHRcdHBvc2l0aW9uc1t2aSArIDNdID0geDIgKiByYWRpdXM7XHJcblx0XHRcdHBvc2l0aW9uc1t2aSArIDRdID0geTEgKiByYWRpdXM7XHJcblx0XHRcdHBvc2l0aW9uc1t2aSArIDVdID0gejIgKiByYWRpdXM7IC8vIHYxXHJcblxyXG5cdFx0XHRwb3NpdGlvbnNbdmkgKyA2XSA9IHgzICogcmFkaXVzO1xyXG5cdFx0XHRwb3NpdGlvbnNbdmkgKyA3XSA9IHkyICogcmFkaXVzO1xyXG5cdFx0XHRwb3NpdGlvbnNbdmkgKyA4XSA9IHozICogcmFkaXVzOyAvLyB2MlxyXG5cclxuXHRcdFx0cG9zaXRpb25zW3ZpICsgOV0gPSB4NCAqIHJhZGl1cztcclxuXHRcdFx0cG9zaXRpb25zW3ZpICsgMTBdID0geTIgKiByYWRpdXM7XHJcblx0XHRcdHBvc2l0aW9uc1t2aSArIDExXSA9IHo0ICogcmFkaXVzOyAvLyB2M1xyXG5cclxuXHRcdFx0bm9ybWFsc1t2aV0gPSB4MTtcclxuXHRcdFx0bm9ybWFsc1t2aSArIDFdID0geTE7XHJcblx0XHRcdG5vcm1hbHNbdmkgKyAyXSA9IHoxO1xyXG5cclxuXHRcdFx0bm9ybWFsc1t2aSArIDNdID0geDI7XHJcblx0XHRcdG5vcm1hbHNbdmkgKyA0XSA9IHkxO1xyXG5cdFx0XHRub3JtYWxzW3ZpICsgNV0gPSB6MjtcclxuXHJcblx0XHRcdG5vcm1hbHNbdmkgKyA2XSA9IHgzO1xyXG5cdFx0XHRub3JtYWxzW3ZpICsgN10gPSB5MjtcclxuXHRcdFx0bm9ybWFsc1t2aSArIDhdID0gejM7XHJcblxyXG5cdFx0XHRub3JtYWxzW3ZpICsgOV0gPSB4NDtcclxuXHRcdFx0bm9ybWFsc1t2aSArIDEwXSA9IHkyO1xyXG5cdFx0XHRub3JtYWxzW3ZpICsgMTFdID0gejQ7XHJcblxyXG5cdFx0XHR1dnNbdGldID0gdTE7XHJcblx0XHRcdHV2c1t0aSArIDFdID0gdjE7XHJcblxyXG5cdFx0XHR1dnNbdGkgKyAyXSA9IHUyO1xyXG5cdFx0XHR1dnNbdGkgKyAzXSA9IHYxO1xyXG5cclxuXHRcdFx0dXZzW3RpICsgNF0gPSB1MTtcclxuXHRcdFx0dXZzW3RpICsgNV0gPSB2MjtcclxuXHJcblx0XHRcdHV2c1t0aSArIDZdID0gdTI7XHJcblx0XHRcdHV2c1t0aSArIDddID0gdjI7XHJcblxyXG5cdFx0XHRpbmRpY2VzW2xdID0gaztcclxuXHRcdFx0aW5kaWNlc1tsICsgMV0gPSBrICsgMTtcclxuXHRcdFx0aW5kaWNlc1tsICsgMl0gPSBrICsgMjtcclxuXHRcdFx0aW5kaWNlc1tsICsgM10gPSBrICsgMjtcclxuXHRcdFx0aW5kaWNlc1tsICsgNF0gPSBrICsgMTtcclxuXHRcdFx0aW5kaWNlc1tsICsgNV0gPSBrICsgMztcclxuXHJcblx0XHRcdGsgKz0gNDtcclxuXHRcdFx0bCArPSA2O1xyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0cmV0dXJuIHtcclxuXHRcdHBvc2l0aW9uczogcG9zaXRpb25zLFxyXG5cdFx0bm9ybWFsczogbm9ybWFscyxcclxuXHRcdHV2czogdXZzLFxyXG5cdFx0aW5kaWNlczogaW5kaWNlc1xyXG5cdH07XHJcbn1cclxuIiwiaW1wb3J0IHsgRmxvYXQzMkF0dHJpYnV0ZSB9IGZyb20gXCIuLi9yZW5kZXIvQXR0cmlidXRlXCI7XHJcbmltcG9ydCB7IGNyZWF0ZVNwaGVyZSB9IGZyb20gXCIuLi91dGlscy9HZW9tZXRyeVV0aWxzXCI7XHJcbmltcG9ydCBHZW9tZXRyeSBmcm9tIFwiLi9HZW9tZXRyeVwiO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgU3BoZXJlR2VvbWV0cnkgZXh0ZW5kcyBHZW9tZXRyeSB7XHJcblx0cmFkaXVzOiBudW1iZXI7XHJcblx0Y29uc3RydWN0b3IocmFkaXVzOiBudW1iZXIpIHtcclxuXHRcdHN1cGVyKHtcclxuXHRcdFx0dHlwZTogXCJzcGhlcmVHZW9tZXRyeVwiXHJcblx0XHR9KTtcclxuXHRcdHRoaXMuZGVmaW5lcyA9IHtcclxuXHRcdFx0SEFTX05PUk1BTDogdHJ1ZVxyXG5cdFx0fTtcclxuXHRcdHRoaXMucmFkaXVzID0gcmFkaXVzO1xyXG5cdFx0dGhpcy5pbml0KCk7XHJcblx0fVxyXG5cdHByaXZhdGUgaW5pdCgpIHtcclxuXHRcdGNvbnN0IHsgcG9zaXRpb25zLCBub3JtYWxzLCB1dnMsIGluZGljZXMgfSA9IGNyZWF0ZVNwaGVyZSh7IHJhZGl1czogdGhpcy5yYWRpdXMgfSk7XHJcblx0XHQvLyB0aGlzLnBvc2l0aW9ucyA9IHBvc2l0aW9ucztcclxuXHRcdC8vIHRoaXMubm9ybWFscyA9IG5vcm1hbHM7XHJcblx0XHQvLyB0aGlzLnV2cyA9IHV2cztcclxuXHRcdC8vIHRoaXMuaW5kaWNlcyA9IGluZGljZXM7XHJcblx0XHR0aGlzLmNvbXB1dGVCb3VuZGluZ1NwaGVyZShwb3NpdGlvbnMpO1xyXG5cdFx0dGhpcy5zZXRBdHRyaWJ1dGUobmV3IEZsb2F0MzJBdHRyaWJ1dGUoXCJwb3NpdGlvblwiLCBwb3NpdGlvbnMsIDMpKTtcclxuXHRcdHRoaXMuc2V0QXR0cmlidXRlKG5ldyBGbG9hdDMyQXR0cmlidXRlKFwibm9ybWFsXCIsIG5vcm1hbHMsIDMpKTtcclxuXHRcdHRoaXMuc2V0QXR0cmlidXRlKG5ldyBGbG9hdDMyQXR0cmlidXRlKFwidXZcIiwgdXZzLCAyKSk7XHJcblxyXG5cdFx0dGhpcy5zZXRJbmRpY2UoaW5kaWNlcyk7XHJcblx0XHR0aGlzLmNvdW50ID0gaW5kaWNlcy5sZW5ndGg7XHJcblx0fVxyXG59XHJcbiIsImltcG9ydCB7IEZsb2F0MzJBdHRyaWJ1dGUgfSBmcm9tIFwiLi4vcmVuZGVyL0F0dHJpYnV0ZVwiO1xyXG5pbXBvcnQgeyBjcmVhdGVCb3ggfSBmcm9tIFwiLi4vdXRpbHMvR2VvbWV0cnlVdGlsc1wiO1xyXG5pbXBvcnQgR2VvbWV0cnkgZnJvbSBcIi4vR2VvbWV0cnlcIjtcclxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQm94R2VvbWV0cnkgZXh0ZW5kcyBHZW9tZXRyeSB7XHJcblx0Y29uc3RydWN0b3IocHVibGljIHdpZHRoOiBudW1iZXIgPSAxMCwgcHVibGljIGhlaWdodDogbnVtYmVyID0gMTAsIHB1YmxpYyBkZXB0aDogbnVtYmVyID0gMTApIHtcclxuXHRcdHN1cGVyKHtcclxuXHRcdFx0dHlwZTogXCJib3hHZW9tZXRyeVwiXHJcblx0XHR9KTtcclxuXHRcdHRoaXMuZGVmaW5lcyA9IHtcclxuXHRcdFx0SEFTX05PUk1BTDogdHJ1ZVxyXG5cdFx0fTtcclxuXHRcdHRoaXMuaW5pdCgpO1xyXG5cdH1cclxuXHRwcml2YXRlIGluaXQoKSB7XHJcblx0XHQvLyBnZW5lcmF0ZSBwb3MgdXYgbm9ybWFsIHNvIG9uXHJcblx0XHRjb25zdCB7IHBvc2l0aW9ucywgbm9ybWFscywgdXZzIH0gPSBjcmVhdGVCb3goe1xyXG5cdFx0XHRkaW1lbnNpb25zOiBbdGhpcy5kZXB0aCwgdGhpcy53aWR0aCwgdGhpcy5oZWlnaHRdXHJcblx0XHR9KTtcclxuXHRcdHRoaXMuY29tcHV0ZUJvdW5kaW5nU3BoZXJlKHBvc2l0aW9ucyk7XHJcblx0XHR0aGlzLnNldEF0dHJpYnV0ZShuZXcgRmxvYXQzMkF0dHJpYnV0ZShcInBvc2l0aW9uXCIsIHBvc2l0aW9ucywgMykpO1xyXG5cdFx0dGhpcy5zZXRBdHRyaWJ1dGUobmV3IEZsb2F0MzJBdHRyaWJ1dGUoXCJub3JtYWxcIiwgbm9ybWFscywgMykpO1xyXG5cdFx0dGhpcy5zZXRBdHRyaWJ1dGUobmV3IEZsb2F0MzJBdHRyaWJ1dGUoXCJ1dlwiLCB1dnMsIDIpKTtcclxuXHRcdHRoaXMuY291bnQgPSAzNjtcclxuXHR9XHJcbn1cclxuIiwiaW1wb3J0IFZlY3RvcjMgZnJvbSBcIi4uL21hdGgvVmVjdG9yM1wiO1xyXG5pbXBvcnQgeyBGbG9hdDMyQXR0cmlidXRlIH0gZnJvbSBcIi4uL3JlbmRlci9BdHRyaWJ1dGVcIjtcclxuaW1wb3J0IEdlb21ldHJ5IGZyb20gXCIuL0dlb21ldHJ5XCI7XHJcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIFRvcnVzS25vdEdlb21ldHJ5IGV4dGVuZHMgR2VvbWV0cnkge1xyXG5cdHJhZGl1czogbnVtYmVyO1xyXG5cdHR1YmU6IG51bWJlcjtcclxuXHR0dWJ1bGFyU2VnbWVudHM6IG51bWJlcjtcclxuXHRyYWRpYWxTZWdtZW50czogbnVtYmVyO1xyXG5cdHA6IG51bWJlcjtcclxuXHRxOiBudW1iZXI7XHJcblx0Y29uc3RydWN0b3IocmFkaXVzID0gMSwgdHViZSA9IDAuNCwgdHVidWxhclNlZ21lbnRzID0gNjQsIHJhZGlhbFNlZ21lbnRzID0gOCwgcCA9IDIsIHEgPSAzKSB7XHJcblx0XHRzdXBlcih7XHJcblx0XHRcdHR5cGU6IFwidG9ydXNLbm90R2VvbWV0cnlcIlxyXG5cdFx0fSk7XHJcblx0XHR0aGlzLmRlZmluZXMgPSB7XHJcblx0XHRcdEhBU19OT1JNQUw6IHRydWVcclxuXHRcdH07XHJcblx0XHR0aGlzLnJhZGl1cyA9IHJhZGl1cztcclxuXHRcdHRoaXMudHViZSA9IHR1YmU7XHJcblx0XHR0aGlzLnR1YnVsYXJTZWdtZW50cyA9IHR1YnVsYXJTZWdtZW50cztcclxuXHRcdHRoaXMucmFkaWFsU2VnbWVudHMgPSByYWRpYWxTZWdtZW50cztcclxuXHRcdHRoaXMucCA9IHA7XHJcblx0XHR0aGlzLnEgPSBxO1xyXG5cdFx0dGhpcy5pbml0KCk7XHJcblx0fVxyXG5cdHByaXZhdGUgaW5pdCgpIHtcclxuXHRcdGNvbnN0IHsgbm9ybWFscywgdXZzLCBwb3NpdGlvbnMsIGluZGljZXMgfSA9IHRoaXMuY3JlYXRlR2VvbWV0cnkoKTtcclxuXHRcdHRoaXMuY29tcHV0ZUJvdW5kaW5nU3BoZXJlKHBvc2l0aW9ucyk7XHJcblx0XHR0aGlzLnNldEF0dHJpYnV0ZShuZXcgRmxvYXQzMkF0dHJpYnV0ZShcInBvc2l0aW9uXCIsIHBvc2l0aW9ucywgMykpO1xyXG5cdFx0dGhpcy5zZXRBdHRyaWJ1dGUobmV3IEZsb2F0MzJBdHRyaWJ1dGUoXCJub3JtYWxcIiwgbm9ybWFscywgMykpO1xyXG5cdFx0dGhpcy5zZXRBdHRyaWJ1dGUobmV3IEZsb2F0MzJBdHRyaWJ1dGUoXCJ1dlwiLCB1dnMsIDIpKTtcclxuXHRcdHRoaXMuc2V0SW5kaWNlKGluZGljZXMpO1xyXG5cdFx0dGhpcy5jb3VudCA9IGluZGljZXMubGVuZ3RoO1xyXG5cdH1cclxuXHRwcml2YXRlIGNyZWF0ZUdlb21ldHJ5KCkge1xyXG5cdFx0Y29uc3QgcG9zaXRpb25zID0gW10sXHJcblx0XHRcdG5vcm1hbHMgPSBbXSxcclxuXHRcdFx0dXZzID0gW10sXHJcblx0XHRcdGluZGljZXMgPSBbXTtcclxuXHRcdGNvbnN0IHR1YnVsYXJTZWdtZW50cyA9IE1hdGguZmxvb3IodGhpcy50dWJ1bGFyU2VnbWVudHMpO1xyXG5cdFx0Y29uc3QgcmFkaWFsU2VnbWVudHMgPSBNYXRoLmZsb29yKHRoaXMucmFkaWFsU2VnbWVudHMpO1xyXG5cdFx0Ly8gaGVscGVyIHZhcmlhYmxlc1xyXG5cclxuXHRcdGNvbnN0IHZlcnRleCA9IG5ldyBWZWN0b3IzKCk7XHJcblx0XHRjb25zdCBub3JtYWwgPSBuZXcgVmVjdG9yMygpO1xyXG5cclxuXHRcdGNvbnN0IFAxID0gbmV3IFZlY3RvcjMoKTtcclxuXHRcdGNvbnN0IFAyID0gbmV3IFZlY3RvcjMoKTtcclxuXHJcblx0XHRjb25zdCBCID0gbmV3IFZlY3RvcjMoKTtcclxuXHRcdGNvbnN0IFQgPSBuZXcgVmVjdG9yMygpO1xyXG5cdFx0Y29uc3QgTiA9IG5ldyBWZWN0b3IzKCk7XHJcblxyXG5cdFx0Ly8gZ2VuZXJhdGUgdmVydGljZXMsIG5vcm1hbHMgYW5kIHV2c1xyXG5cclxuXHRcdGZvciAobGV0IGkgPSAwOyBpIDw9IHR1YnVsYXJTZWdtZW50czsgKytpKSB7XHJcblx0XHRcdC8vIHRoZSByYWRpYW4gXCJ1XCIgaXMgdXNlZCB0byBjYWxjdWxhdGUgdGhlIHBvc2l0aW9uIG9uIHRoZSB0b3J1cyBjdXJ2ZSBvZiB0aGUgY3VycmVudCB0dWJ1bGFyIHNlZ21lbnRcclxuXHJcblx0XHRcdGNvbnN0IHUgPSAoaSAvIHR1YnVsYXJTZWdtZW50cykgKiB0aGlzLnAgKiBNYXRoLlBJICogMjtcclxuXHJcblx0XHRcdC8vIG5vdyB3ZSBjYWxjdWxhdGUgdHdvIHBvaW50cy4gUDEgaXMgb3VyIGN1cnJlbnQgcG9zaXRpb24gb24gdGhlIGN1cnZlLCBQMiBpcyBhIGxpdHRsZSBmYXJ0aGVyIGFoZWFkLlxyXG5cdFx0XHQvLyB0aGVzZSBwb2ludHMgYXJlIHVzZWQgdG8gY3JlYXRlIGEgc3BlY2lhbCBcImNvb3JkaW5hdGUgc3BhY2VcIiwgd2hpY2ggaXMgbmVjZXNzYXJ5IHRvIGNhbGN1bGF0ZSB0aGUgY29ycmVjdCB2ZXJ0ZXggcG9zaXRpb25zXHJcblxyXG5cdFx0XHRjYWxjdWxhdGVQb3NpdGlvbk9uQ3VydmUodSwgdGhpcy5wLCB0aGlzLnEsIHRoaXMucmFkaXVzLCBQMSk7XHJcblx0XHRcdGNhbGN1bGF0ZVBvc2l0aW9uT25DdXJ2ZSh1ICsgMC4wMSwgdGhpcy5wLCB0aGlzLnEsIHRoaXMucmFkaXVzLCBQMik7XHJcblxyXG5cdFx0XHQvLyBjYWxjdWxhdGUgb3J0aG9ub3JtYWwgYmFzaXNcclxuXHJcblx0XHRcdFZlY3RvcjMuc3VidHJhY3QoUDIsIFAxLCBUKTtcclxuXHRcdFx0Ly8gVC5zdWJWZWN0b3JzKCBQMiwgUDEgKTtcclxuXHRcdFx0VmVjdG9yMy5hZGQoUDIsIFAxLCBOKTtcclxuXHRcdFx0Ly8gTi5hZGRWZWN0b3JzKCBQMiwgUDEgKTtcclxuXHRcdFx0VmVjdG9yMy5jcm9zcyhULCBOLCBCKTtcclxuXHRcdFx0Ly8gQi5jcm9zc1ZlY3RvcnMoIFQsIE4gKTtcclxuXHRcdFx0VmVjdG9yMy5jcm9zcyhCLCBULCBOKTtcclxuXHRcdFx0Ly8gTi5jcm9zc1ZlY3RvcnMoIEIsIFQgKTtcclxuXHJcblx0XHRcdC8vIG5vcm1hbGl6ZSBCLCBOLiBUIGNhbiBiZSBpZ25vcmVkLCB3ZSBkb24ndCB1c2UgaXRcclxuXHJcblx0XHRcdEIubm9ybWFsaXplKCk7XHJcblx0XHRcdE4ubm9ybWFsaXplKCk7XHJcblxyXG5cdFx0XHRmb3IgKGxldCBqID0gMDsgaiA8PSByYWRpYWxTZWdtZW50czsgKytqKSB7XHJcblx0XHRcdFx0Ly8gbm93IGNhbGN1bGF0ZSB0aGUgdmVydGljZXMuIHRoZXkgYXJlIG5vdGhpbmcgbW9yZSB0aGFuIGFuIGV4dHJ1c2lvbiBvZiB0aGUgdG9ydXMgY3VydmUuXHJcblx0XHRcdFx0Ly8gYmVjYXVzZSB3ZSBleHRydWRlIGEgc2hhcGUgaW4gdGhlIHh5LXBsYW5lLCB0aGVyZSBpcyBubyBuZWVkIHRvIGNhbGN1bGF0ZSBhIHotdmFsdWUuXHJcblxyXG5cdFx0XHRcdGNvbnN0IHYgPSAoaiAvIHJhZGlhbFNlZ21lbnRzKSAqIE1hdGguUEkgKiAyO1xyXG5cdFx0XHRcdGNvbnN0IGN4ID0gLXRoaXMudHViZSAqIE1hdGguY29zKHYpO1xyXG5cdFx0XHRcdGNvbnN0IGN5ID0gdGhpcy50dWJlICogTWF0aC5zaW4odik7XHJcblxyXG5cdFx0XHRcdC8vIG5vdyBjYWxjdWxhdGUgdGhlIGZpbmFsIHZlcnRleCBwb3NpdGlvbi5cclxuXHRcdFx0XHQvLyBmaXJzdCB3ZSBvcmllbnQgdGhlIGV4dHJ1c2lvbiB3aXRoIG91ciBiYXNpcyB2ZWN0b3JzLCB0aGVuIHdlIGFkZCBpdCB0byB0aGUgY3VycmVudCBwb3NpdGlvbiBvbiB0aGUgY3VydmVcclxuXHJcblx0XHRcdFx0dmVydGV4LnggPSBQMS54ICsgKGN4ICogTi54ICsgY3kgKiBCLngpO1xyXG5cdFx0XHRcdHZlcnRleC55ID0gUDEueSArIChjeCAqIE4ueSArIGN5ICogQi55KTtcclxuXHRcdFx0XHR2ZXJ0ZXgueiA9IFAxLnogKyAoY3ggKiBOLnogKyBjeSAqIEIueik7XHJcblxyXG5cdFx0XHRcdHBvc2l0aW9ucy5wdXNoKHZlcnRleC54LCB2ZXJ0ZXgueSwgdmVydGV4LnopO1xyXG5cclxuXHRcdFx0XHQvLyBub3JtYWwgKFAxIGlzIGFsd2F5cyB0aGUgY2VudGVyL29yaWdpbiBvZiB0aGUgZXh0cnVzaW9uLCB0aHVzIHdlIGNhbiB1c2UgaXQgdG8gY2FsY3VsYXRlIHRoZSBub3JtYWwpXHJcblx0XHRcdFx0VmVjdG9yMy5zdWJ0cmFjdCh2ZXJ0ZXgsIFAxLCBub3JtYWwpO1xyXG5cdFx0XHRcdG5vcm1hbC5ub3JtYWxpemUoKTtcclxuXHJcblx0XHRcdFx0bm9ybWFscy5wdXNoKG5vcm1hbC54LCBub3JtYWwueSwgbm9ybWFsLnopO1xyXG5cclxuXHRcdFx0XHQvLyB1dlxyXG5cclxuXHRcdFx0XHR1dnMucHVzaChpIC8gdHVidWxhclNlZ21lbnRzKTtcclxuXHRcdFx0XHR1dnMucHVzaChqIC8gcmFkaWFsU2VnbWVudHMpO1xyXG5cdFx0XHR9XHJcblx0XHR9XHJcblxyXG5cdFx0Ly8gZ2VuZXJhdGUgaW5kaWNlc1xyXG5cclxuXHRcdGZvciAobGV0IGogPSAxOyBqIDw9IHR1YnVsYXJTZWdtZW50czsgaisrKSB7XHJcblx0XHRcdGZvciAobGV0IGkgPSAxOyBpIDw9IHJhZGlhbFNlZ21lbnRzOyBpKyspIHtcclxuXHRcdFx0XHQvLyBpbmRpY2VzXHJcblxyXG5cdFx0XHRcdGNvbnN0IGEgPSAocmFkaWFsU2VnbWVudHMgKyAxKSAqIChqIC0gMSkgKyAoaSAtIDEpO1xyXG5cdFx0XHRcdGNvbnN0IGIgPSAocmFkaWFsU2VnbWVudHMgKyAxKSAqIGogKyAoaSAtIDEpO1xyXG5cdFx0XHRcdGNvbnN0IGMgPSAocmFkaWFsU2VnbWVudHMgKyAxKSAqIGogKyBpO1xyXG5cdFx0XHRcdGNvbnN0IGQgPSAocmFkaWFsU2VnbWVudHMgKyAxKSAqIChqIC0gMSkgKyBpO1xyXG5cclxuXHRcdFx0XHQvLyBmYWNlc1xyXG5cclxuXHRcdFx0XHRpbmRpY2VzLnB1c2goYSwgYiwgZCk7XHJcblx0XHRcdFx0aW5kaWNlcy5wdXNoKGIsIGMsIGQpO1xyXG5cdFx0XHR9XHJcblx0XHR9XHJcblx0XHRyZXR1cm4ge1xyXG5cdFx0XHRub3JtYWxzLFxyXG5cdFx0XHR1dnMsXHJcblx0XHRcdHBvc2l0aW9ucyxcclxuXHRcdFx0aW5kaWNlc1xyXG5cdFx0fTtcclxuXHR9XHJcbn1cclxuZnVuY3Rpb24gY2FsY3VsYXRlUG9zaXRpb25PbkN1cnZlKHUsIHAsIHEsIHJhZGl1cywgcG9zaXRpb24pIHtcclxuXHRjb25zdCBjdSA9IE1hdGguY29zKHUpO1xyXG5cdGNvbnN0IHN1ID0gTWF0aC5zaW4odSk7XHJcblx0Y29uc3QgcXVPdmVyUCA9IChxIC8gcCkgKiB1O1xyXG5cdGNvbnN0IGNzID0gTWF0aC5jb3MocXVPdmVyUCk7XHJcblxyXG5cdHBvc2l0aW9uLnggPSByYWRpdXMgKiAoMiArIGNzKSAqIDAuNSAqIGN1O1xyXG5cdHBvc2l0aW9uLnkgPSByYWRpdXMgKiAoMiArIGNzKSAqIHN1ICogMC41O1xyXG5cdHBvc2l0aW9uLnogPSByYWRpdXMgKiBNYXRoLnNpbihxdU92ZXJQKSAqIDAuNTtcclxufVxyXG4iLCJpbXBvcnQgeyBGcmFtZVN0YXRlIH0gZnJvbSBcIi4uL2NvcmUvRnJhbWVTdGF0ZVwiO1xyXG5pbXBvcnQgdGV4dHVyZUNhY2hlIGZyb20gXCIuLi9jb3JlL1RleHR1cmVDYWNoZVwiO1xyXG5pbXBvcnQgeyBVbmlmb3JtRW51bSB9IGZyb20gXCIuLi9jb3JlL1dlYkdQVVR5cGVzXCI7XHJcbmltcG9ydCBDb2xvciBmcm9tIFwiLi4vbWF0aC9Db2xvclwiO1xyXG5pbXBvcnQgeyBNZXNoIH0gZnJvbSBcIi4uL21lc2gvTWVzaFwiO1xyXG5pbXBvcnQgU2FtcGxlciBmcm9tIFwiLi4vcmVuZGVyL1NhbXBsZXJcIjtcclxuaW1wb3J0IFRleHR1cmUgZnJvbSBcIi4uL3JlbmRlci9UZXh0dXJlXCI7XHJcbmltcG9ydCBVbmlmb3JtQnVmZmVyIGZyb20gXCIuLi9yZW5kZXIvVW5pZm9ybUJ1ZmZlclwiO1xyXG5pbXBvcnQgeyBTaGFkZXJTb3VyY2UgfSBmcm9tIFwiLi4vc2hhZGVyL1NoYWRlclNvdXJjZVwiO1xyXG5pbXBvcnQgeyBNYXRlcmlhbCB9IGZyb20gXCIuL01hdGVyaWFsXCI7XHJcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEJsaW5uUGhvbmdNYXRlcmlhbCBleHRlbmRzIE1hdGVyaWFsIHtcclxuXHRwdWJsaWMgc3BlY3VsYXI6IENvbG9yO1xyXG5cdHB1YmxpYyBzaGluaW5lc3M6IG51bWJlcjtcclxuXHRwdWJsaWMgbm9ybWFsVGV4dHVyZTogVGV4dHVyZTtcclxuXHRwdWJsaWMgbm9ybWFsU2FtcGxlcjogU2FtcGxlcjtcclxuXHRjb25zdHJ1Y3RvcigpIHtcclxuXHRcdHN1cGVyKCk7XHJcblx0XHR0aGlzLnR5cGUgPSBcInBob25nXCI7XHJcblx0XHR0aGlzLmNvbG9yID0gbmV3IENvbG9yKDEuMCwgMC4wLCAwLjApO1xyXG5cdFx0dGhpcy5zaGFkZXJTb3VyY2UgPSBuZXcgU2hhZGVyU291cmNlKHtcclxuXHRcdFx0c2hhZGVySWQ6IHRoaXMudHlwZSxcclxuXHRcdFx0ZGVmaW5lczoge1xyXG5cdFx0XHRcdG1hdGVyaWFsUGhvbmc6IHRydWVcclxuXHRcdFx0fVxyXG5cdFx0fSk7XHJcblx0XHR0aGlzLmxpZ2h0ID0gdHJ1ZTtcclxuXHRcdHRoaXMuc3BlY3VsYXIgPSBuZXcgQ29sb3IoMS4wLCAxLjAsIDEuMCk7XHJcblx0XHR0aGlzLnNoaW5pbmVzcyA9IDMwLjA7XHJcblx0XHR0aGlzLmJhc2VUZXh0dXJlID0gdW5kZWZpbmVkO1xyXG5cdFx0dGhpcy5iYXNlU2FtcGxlciA9IHVuZGVmaW5lZDtcclxuXHR9XHJcblx0dXBkYXRlKGZyYW1lU3RhdGU/OiBGcmFtZVN0YXRlLCBtZXNoPzogTWVzaCkge1xyXG5cdFx0aWYgKCF0aGlzLnNoYWRlckRhdGEgfHwgdGhpcy5kaXJ0eSkgdGhpcy5jcmVhdGVTaGFkZXJEYXRhKG1lc2gpO1xyXG5cdH1cclxuXHRwcm90ZWN0ZWQgY3JlYXRlU2hhZGVyRGF0YShtZXNoPzogTWVzaCkge1xyXG5cdFx0c3VwZXIuY3JlYXRlU2hhZGVyRGF0YSgpO1xyXG5cdFx0Y29uc3QgdW5pZm9ybUJ1ZmZlciA9IG5ldyBVbmlmb3JtQnVmZmVyKHsgbGFiZWw6IFwicGhvbmdcIiB9KTtcclxuXHRcdHVuaWZvcm1CdWZmZXIuc2V0VW5pZm9ybShcclxuXHRcdFx0XCJtb2RlbE1hdHJpeFwiLFxyXG5cdFx0XHQoKSA9PiB7XHJcblx0XHRcdFx0cmV0dXJuIG1lc2gubW9kZWxNYXRyaXg7XHJcblx0XHRcdH0sXHJcblx0XHRcdFVuaWZvcm1FbnVtLk1hdDRcclxuXHRcdCk7XHJcblx0XHR1bmlmb3JtQnVmZmVyLnNldFVuaWZvcm0oXCJjb2xvclwiLCB0aGlzLCBVbmlmb3JtRW51bS5Db2xvcik7XHJcblx0XHR1bmlmb3JtQnVmZmVyLnNldFVuaWZvcm0oXCJvcGFjaXR5XCIsIHRoaXMsIFVuaWZvcm1FbnVtLkZsb2F0KTtcclxuXHRcdHVuaWZvcm1CdWZmZXIuc2V0VW5pZm9ybShcclxuXHRcdFx0XCJub3JtYWxNdHJpeFwiLFxyXG5cdFx0XHQoKSA9PiB7XHJcblx0XHRcdFx0cmV0dXJuIG1lc2gubm9ybWFsTWF0cml4O1xyXG5cdFx0XHR9LFxyXG5cdFx0XHRVbmlmb3JtRW51bS5NYXQ0XHJcblx0XHQpO1xyXG5cdFx0dW5pZm9ybUJ1ZmZlci5zZXRVbmlmb3JtKFwiZW1pc3NpdmVcIiwgdGhpcywgVW5pZm9ybUVudW0uQ29sb3IpO1xyXG5cdFx0dW5pZm9ybUJ1ZmZlci5zZXRVbmlmb3JtKFwic2hpbmluZXNzXCIsIHRoaXMsIFVuaWZvcm1FbnVtLkZsb2F0KTtcclxuXHRcdHVuaWZvcm1CdWZmZXIuc2V0VW5pZm9ybShcInNwZWN1bGFyXCIsIHRoaXMsIFVuaWZvcm1FbnVtLkNvbG9yKTtcclxuXHRcdHRoaXMuc2hhZGVyRGF0YS5zZXRVbmlmb3JtQnVmZmVyKFwicGhvbmdcIiwgdW5pZm9ybUJ1ZmZlcik7XHJcblx0XHRpZiAodGhpcy5iYXNlVGV4dHVyZSkge1xyXG5cdFx0XHR0aGlzLnNoYWRlckRhdGEuc2V0RGVmaW5lKFwiVVNFX0NPTE9SVEVYVFVSRVwiLCB0cnVlKTtcclxuXHRcdFx0dGhpcy5zaGFkZXJEYXRhLnNldFRleHR1cmUoXCJiYXNlQ29sb3JUZXh0dXJlXCIsIHRoaXMuYmFzZVRleHR1cmUpO1xyXG5cdFx0XHR0aGlzLnNoYWRlckRhdGEuc2V0U2FtcGxlcihcImJhc2VDb2xvclNhbXBsZXJcIiwgdGhpcy5iYXNlU2FtcGxlciB8fCB0ZXh0dXJlQ2FjaGUuZGVmYXVsdFNhbXBsZXIpO1xyXG5cdFx0fVxyXG5cdFx0aWYgKHRoaXMubm9ybWFsVGV4dHVyZSkge1xyXG5cdFx0XHR0aGlzLnNoYWRlckRhdGEuc2V0RGVmaW5lKFwiVVNFX05PUk1BTFRFWFRVUkVcIiwgdHJ1ZSk7XHJcblx0XHRcdHRoaXMuc2hhZGVyRGF0YS5zZXRUZXh0dXJlKFwibm9ybWFsVGV4dHVyZVwiLCB0aGlzLm5vcm1hbFRleHR1cmUpO1xyXG5cdFx0XHR0aGlzLnNoYWRlckRhdGEuc2V0U2FtcGxlcihcIm5vcm1hbFNhbXBsZXJcIiwgdGhpcy5ub3JtYWxTYW1wbGVyIHx8IHRleHR1cmVDYWNoZS5kZWZhdWx0U2FtcGxlcik7XHJcblx0XHR9XHJcblx0fVxyXG5cdGRlc3Ryb3koKSB7XHJcblx0XHR0aGlzPy5iYXNlVGV4dHVyZT8uZGVzdHJveSgpO1xyXG5cdFx0c3VwZXIuZGVzdHJveSgpO1xyXG5cdH1cclxufVxyXG4iLCJpbXBvcnQgeyBGcmFtZVN0YXRlIH0gZnJvbSBcIi4uL2NvcmUvRnJhbWVTdGF0ZVwiO1xyXG5pbXBvcnQgdGV4dHVyZUNhY2hlIGZyb20gXCIuLi9jb3JlL1RleHR1cmVDYWNoZVwiO1xyXG5pbXBvcnQgeyBDdWxsTW9kZSB9IGZyb20gXCIuLi9jb3JlL1dlYkdQVUNvbnN0YW50XCI7XHJcbmltcG9ydCB7IFVuaWZvcm1FbnVtIH0gZnJvbSBcIi4uL2NvcmUvV2ViR1BVVHlwZXNcIjtcclxuaW1wb3J0IFZlY3RvcjIgZnJvbSBcIi4uL21hdGgvVmVjdG9yMlwiO1xyXG5pbXBvcnQgeyBNZXNoIH0gZnJvbSBcIi4uL21lc2gvTWVzaFwiO1xyXG5pbXBvcnQgU2FtcGxlciBmcm9tIFwiLi4vcmVuZGVyL1NhbXBsZXJcIjtcclxuaW1wb3J0IFRleHR1cmUgZnJvbSBcIi4uL3JlbmRlci9UZXh0dXJlXCI7XHJcbmltcG9ydCBVbmlmb3JtQnVmZmVyIGZyb20gXCIuLi9yZW5kZXIvVW5pZm9ybUJ1ZmZlclwiO1xyXG5pbXBvcnQgeyBTaGFkZXJTb3VyY2UgfSBmcm9tIFwiLi4vc2hhZGVyL1NoYWRlclNvdXJjZVwiO1xyXG5pbXBvcnQgeyBNYXRlcmlhbCB9IGZyb20gXCIuL01hdGVyaWFsXCI7XHJcblxyXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBQYnJNYXRlcmlhbCBleHRlbmRzIE1hdGVyaWFsIHtcclxuXHRwdWJsaWMgc3BlY3VsYXJFbnZUZXh0dXJlOiBUZXh0dXJlO1xyXG5cclxuXHRwdWJsaWMgc3BlY3VsYXJFbnZTYW1wbGVyOiBTYW1wbGVyO1xyXG5cclxuXHRwdWJsaWMgZW1pc3NpdmVUZXh0dXJlOiBUZXh0dXJlO1xyXG5cclxuXHRwdWJsaWMgZW1pc3NpdmVTYW1wbGVyOiBTYW1wbGVyO1xyXG5cclxuXHRwdWJsaWMgbm9ybWFsVGV4dHVyZTogVGV4dHVyZTtcclxuXHJcblx0cHVibGljIG5vcm1hbFNhbXBsZXI6IFNhbXBsZXI7XHJcblxyXG5cdHB1YmxpYyBhb1RleHR1cmU6IFRleHR1cmU7XHJcblxyXG5cdHB1YmxpYyBhb1NhbXBsZXI6IFNhbXBsZXI7XHJcblxyXG5cdHB1YmxpYyBtZXRhbG5lc3NSb3VnaG5lc3NUZXh0dXJlOiBUZXh0dXJlO1xyXG5cclxuXHRwdWJsaWMgbWV0YWxuZXNzUm91Z2huZXNzU2FtcGxlcjogU2FtcGxlcjtcclxuXHJcblx0cHJpdmF0ZSBfcm91Z2huZXNzOiBudW1iZXI7XHJcblxyXG5cdHByaXZhdGUgX21ldGFsbmVzczogbnVtYmVyO1xyXG5cclxuXHRwcml2YXRlIF9hb1RleHR1cmVJbnRlbnNpdHk6IG51bWJlcjtcclxuXHJcblx0cHJpdmF0ZSBfbm9ybWFsU2NhbGU6IFZlY3RvcjI7XHJcblxyXG5cdHByaXZhdGUgX0lCTFJlbmRlcjogYm9vbGVhbjtcclxuXHJcblx0cHVibGljIGdldCByb3VnaG5lc3MoKTogbnVtYmVyIHtcclxuXHRcdHJldHVybiB0aGlzLl9yb3VnaG5lc3M7XHJcblx0fVxyXG5cdHB1YmxpYyBzZXQgcm91Z2huZXNzKHZhbHVlKSB7XHJcblx0XHR0aGlzLl9yb3VnaG5lc3MgPSB2YWx1ZTtcclxuXHR9XHJcblx0cHVibGljIGdldCBtZXRhbG5lc3MoKTogbnVtYmVyIHtcclxuXHRcdHJldHVybiB0aGlzLl9tZXRhbG5lc3M7XHJcblx0fVxyXG5cdHB1YmxpYyBzZXQgbWV0YWxuZXNzKHY6IG51bWJlcikge1xyXG5cdFx0dGhpcy5fbWV0YWxuZXNzID0gdjtcclxuXHR9XHJcblx0cHVibGljIGdldCBhb1RleHR1cmVJbnRlbnNpdHkoKTogbnVtYmVyIHtcclxuXHRcdHJldHVybiB0aGlzLl9hb1RleHR1cmVJbnRlbnNpdHk7XHJcblx0fVxyXG5cdHB1YmxpYyBzZXQgYW9UZXh0dXJlSW50ZW5zaXR5KHY6IG51bWJlcikge1xyXG5cdFx0dGhpcy5fYW9UZXh0dXJlSW50ZW5zaXR5ID0gdjtcclxuXHR9XHJcblx0cHVibGljIGdldCBub3JtYWxTY2FsZSgpOiBWZWN0b3IyIHtcclxuXHRcdGlmICh0aGlzLnJlbmRlclN0YXRlICYmIHRoaXMucmVuZGVyU3RhdGUucHJpbWl0aXZlKSB7XHJcblx0XHRcdGlmICh0aGlzLnJlbmRlclN0YXRlLnByaW1pdGl2ZS5jdWxsTW9kZSA9PSBDdWxsTW9kZS5CYWNrKSB7XHJcblx0XHRcdFx0cmV0dXJuIFZlY3RvcjIubmVnYXRlKHRoaXMuX25vcm1hbFNjYWxlLCBuZXcgVmVjdG9yMigpKTtcclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cdFx0cmV0dXJuIHRoaXMuX25vcm1hbFNjYWxlO1xyXG5cdH1cclxuXHRwdWJsaWMgc2V0IG5vcm1hbFNjYWxlKHY6IFZlY3RvcjIpIHtcclxuXHRcdHRoaXMuX25vcm1hbFNjYWxlID0gdjtcclxuXHR9XHJcblx0cHVibGljIHNldCBJQkxSZW5kZXIodmFsdWUpIHtcclxuXHRcdHRoaXMuX0lCTFJlbmRlciA9IHZhbHVlO1xyXG5cdFx0dGhpcy5zaGFkZXJTb3VyY2Uuc2V0RGVmaW5lcyh7XHJcblx0XHRcdFVTRV9JQkw6IHRoaXMuX0lCTFJlbmRlclxyXG5cdFx0fSk7XHJcblx0XHR0aGlzLmRpcnR5ID0gdHJ1ZTtcclxuXHR9XHJcblx0Y29uc3RydWN0b3IoKSB7XHJcblx0XHRzdXBlcigpO1xyXG5cdFx0dGhpcy50eXBlID0gXCJwYnJfbWF0XCI7XHJcblxyXG5cdFx0dGhpcy5fcm91Z2huZXNzID0gMC4xO1xyXG5cclxuXHRcdHRoaXMuX21ldGFsbmVzcyA9IDAuMTtcclxuXHJcblx0XHR0aGlzLl9hb1RleHR1cmVJbnRlbnNpdHkgPSAxLjA7XHJcblx0XHR0aGlzLmxpZ2h0ID0gdHJ1ZTtcclxuXHRcdHRoaXMuX25vcm1hbFNjYWxlID0gbmV3IFZlY3RvcjIoMSwgMSk7XHJcblx0XHR0aGlzLl9JQkxSZW5kZXIgPSB0cnVlO1xyXG5cdFx0dGhpcy5zaGFkZXJTb3VyY2UgPSBuZXcgU2hhZGVyU291cmNlKHtcclxuXHRcdFx0c2hhZGVySWQ6IHRoaXMudHlwZSxcclxuXHRcdFx0ZGVmaW5lczoge1xyXG5cdFx0XHRcdG1hdGVyaWFsUGJyOiB0cnVlLFxyXG5cdFx0XHRcdFVTRV9JQkw6IHRoaXMuX0lCTFJlbmRlclxyXG5cdFx0XHR9XHJcblx0XHR9KTtcclxuXHR9XHJcblx0dXBkYXRlKGZyYW1lU3RhdGU/OiBGcmFtZVN0YXRlLCBtZXNoPzogTWVzaCkge1xyXG5cdFx0aWYgKCF0ZXh0dXJlQ2FjaGUuZ2V0VGV4dHVyZShcInNwZWN1bGFyXCIpKSByZXR1cm47XHJcblx0XHRpZiAoIXRoaXMuc2hhZGVyRGF0YSB8fCB0aGlzLmRpcnR5KSB7XHJcblx0XHRcdHRoaXMuY3JlYXRlU2hhZGVyRGF0YShtZXNoKTtcclxuXHRcdH1cclxuXHR9XHJcblx0cHJvdGVjdGVkIGNyZWF0ZVNoYWRlckRhdGEobWVzaD86IE1lc2gpIHtcclxuXHRcdHN1cGVyLmNyZWF0ZVNoYWRlckRhdGEoKTtcclxuXHRcdGNvbnN0IHVuaWZvcm1CdWZmZXIgPSBuZXcgVW5pZm9ybUJ1ZmZlcih7IGxhYmVsOiBcInBiclwiIH0pO1xyXG5cdFx0dW5pZm9ybUJ1ZmZlci5zZXRVbmlmb3JtKFxyXG5cdFx0XHRcIm1vZGVsTWF0cml4XCIsXHJcblx0XHRcdCgpID0+IHtcclxuXHRcdFx0XHRyZXR1cm4gbWVzaC5tb2RlbE1hdHJpeDtcclxuXHRcdFx0fSxcclxuXHRcdFx0VW5pZm9ybUVudW0uTWF0NFxyXG5cdFx0KTtcclxuXHRcdHVuaWZvcm1CdWZmZXIuc2V0VW5pZm9ybShcImNvbG9yXCIsIHRoaXMsIFVuaWZvcm1FbnVtLkNvbG9yKTtcclxuXHRcdHVuaWZvcm1CdWZmZXIuc2V0VW5pZm9ybShcIm9wYWNpdHlcIiwgdGhpcywgVW5pZm9ybUVudW0uRmxvYXQpO1xyXG5cdFx0dW5pZm9ybUJ1ZmZlci5zZXRVbmlmb3JtKFxyXG5cdFx0XHRcIm5vcm1hbE10cml4XCIsXHJcblx0XHRcdCgpID0+IHtcclxuXHRcdFx0XHRyZXR1cm4gbWVzaC5ub3JtYWxNYXRyaXg7XHJcblx0XHRcdH0sXHJcblx0XHRcdFVuaWZvcm1FbnVtLk1hdDRcclxuXHRcdCk7XHJcblx0XHR1bmlmb3JtQnVmZmVyLnNldFVuaWZvcm0oXCJlbWlzc2l2ZVwiLCB0aGlzLCBVbmlmb3JtRW51bS5Db2xvcik7XHJcblx0XHR1bmlmb3JtQnVmZmVyLnNldFVuaWZvcm0oXCJtZXRhbG5lc3NcIiwgdGhpcywgVW5pZm9ybUVudW0uRmxvYXQpO1xyXG5cdFx0dW5pZm9ybUJ1ZmZlci5zZXRVbmlmb3JtKFwicm91Z2huZXNzXCIsIHRoaXMsIFVuaWZvcm1FbnVtLkZsb2F0KTtcclxuXHRcdHRoaXMuc2hhZGVyRGF0YS5zZXRVbmlmb3JtQnVmZmVyKFwicGJyXCIsIHVuaWZvcm1CdWZmZXIpO1xyXG5cdFx0dGhpcy5zcGVjdWxhckVudlRleHR1cmUgPSB0ZXh0dXJlQ2FjaGUuZ2V0VGV4dHVyZShcInNwZWN1bGFyXCIpO1xyXG5cdFx0aWYgKHRoaXMuYmFzZVRleHR1cmUpIHtcclxuXHRcdFx0dGhpcy5zaGFkZXJEYXRhLnNldERlZmluZShcIlVTRV9URVhUVVJFXCIsIHRydWUpO1xyXG5cdFx0XHR0aGlzLnNoYWRlckRhdGEuc2V0VGV4dHVyZShcImJhc2VDb2xvclRleHR1cmVcIiwgdGhpcy5iYXNlVGV4dHVyZSk7XHJcblx0XHRcdHRoaXMuc2hhZGVyRGF0YS5zZXRTYW1wbGVyKFwiYmFzZUNvbG9yU2FtcGxlclwiLCB0aGlzLmJhc2VTYW1wbGVyIHx8IHRleHR1cmVDYWNoZS5kZWZhdWx0U2FtcGxlcik7XHJcblx0XHR9XHJcblx0XHRpZiAodGhpcy5tZXRhbG5lc3NSb3VnaG5lc3NUZXh0dXJlKSB7XHJcblx0XHRcdHRoaXMuc2hhZGVyRGF0YS5zZXREZWZpbmUoXCJVU0VfTUVUQUxORVNTVEVYVFVSRVwiLCB0cnVlKTtcclxuXHRcdFx0dGhpcy5zaGFkZXJEYXRhLnNldFRleHR1cmUoXCJtZXRhbG5lc3NSb3VnaG5lc3NUZXh0dXJlXCIsIHRoaXMubWV0YWxuZXNzUm91Z2huZXNzVGV4dHVyZSk7XHJcblx0XHRcdHRoaXMuc2hhZGVyRGF0YS5zZXRTYW1wbGVyKFxyXG5cdFx0XHRcdFwibWV0YWxuZXNzUm91Z2huZXNzU2FtcGxlclwiLFxyXG5cdFx0XHRcdHRoaXMubWV0YWxuZXNzUm91Z2huZXNzU2FtcGxlciB8fCB0ZXh0dXJlQ2FjaGUuZGVmYXVsdFNhbXBsZXJcclxuXHRcdFx0KTtcclxuXHRcdH1cclxuXHRcdGlmICh0aGlzLm5vcm1hbFRleHR1cmUpIHtcclxuXHRcdFx0dW5pZm9ybUJ1ZmZlci5zZXRVbmlmb3JtKFwibm9ybWFsU2NhbGVcIiwgdGhpcywgVW5pZm9ybUVudW0uRmxvYXRWZWMyKTtcclxuXHRcdFx0dGhpcy5zaGFkZXJEYXRhLnNldERlZmluZShcIlVTRV9OT1JNQUxURVhUVVJFXCIsIHRydWUpO1xyXG5cdFx0XHR0aGlzLnNoYWRlckRhdGEuc2V0VGV4dHVyZShcIm5vcm1hbFRleHR1cmVcIiwgdGhpcy5ub3JtYWxUZXh0dXJlKTtcclxuXHRcdFx0dGhpcy5zaGFkZXJEYXRhLnNldFNhbXBsZXIoXCJub3JtYWxTYW1wbGVyXCIsIHRoaXMubm9ybWFsU2FtcGxlciB8fCB0ZXh0dXJlQ2FjaGUuZGVmYXVsdFNhbXBsZXIpO1xyXG5cdFx0fVxyXG5cdFx0aWYgKHRoaXMuYW9UZXh0dXJlKSB7XHJcblx0XHRcdHRoaXMuc2hhZGVyRGF0YS5zZXREZWZpbmUoXCJVU0VfQU9URVhUVVJFXCIsIHRydWUpO1xyXG5cdFx0XHR0aGlzLnNoYWRlckRhdGEuc2V0VGV4dHVyZShcImFvVGV4dHVyZVwiLCB0aGlzLmFvVGV4dHVyZSk7XHJcblx0XHRcdHRoaXMuc2hhZGVyRGF0YS5zZXRTYW1wbGVyKFwiYW9TYW1wbGVyXCIsIHRoaXMuYW9TYW1wbGVyIHx8IHRleHR1cmVDYWNoZS5kZWZhdWx0U2FtcGxlcik7XHJcblx0XHRcdHVuaWZvcm1CdWZmZXIuc2V0VW5pZm9ybShcImFvVGV4dHVyZUludGVuc2l0eVwiLCB0aGlzLCBVbmlmb3JtRW51bS5GbG9hdCk7XHJcblx0XHR9XHJcblx0XHRpZiAodGhpcy5lbWlzc2l2ZVRleHR1cmUpIHtcclxuXHRcdFx0dGhpcy5zaGFkZXJEYXRhLnNldERlZmluZShcIlVTRV9FTUlTU0lWRVRFWFRVUkVcIiwgdHJ1ZSk7XHJcblx0XHRcdHRoaXMuc2hhZGVyRGF0YS5zZXRUZXh0dXJlKFwiZW1pc3NpdmVUZXh0dXJlXCIsIHRoaXMuZW1pc3NpdmVUZXh0dXJlKTtcclxuXHRcdFx0dGhpcy5zaGFkZXJEYXRhLnNldFNhbXBsZXIoXCJlbWlzc2l2ZVNhbXBsZXJcIiwgdGhpcy5lbWlzc2l2ZVNhbXBsZXIgfHwgdGV4dHVyZUNhY2hlLmRlZmF1bHRTYW1wbGVyKTtcclxuXHRcdH1cclxuXHRcdGlmICh0aGlzLnNwZWN1bGFyRW52VGV4dHVyZSAmJiB0aGlzLl9JQkxSZW5kZXIpIHtcclxuXHRcdFx0dGhpcy5zaGFkZXJEYXRhLnNldFRleHR1cmUoXCJzcGVjdWxhckVudlRleHR1cmVcIiwgdGhpcy5zcGVjdWxhckVudlRleHR1cmUpO1xyXG5cdFx0XHR0aGlzLnNoYWRlckRhdGEuc2V0U2FtcGxlcihcInNwZWN1bGFyRW52U2FtcGxlclwiLCB0aGlzLnNwZWN1bGFyRW52U2FtcGxlciB8fCB0ZXh0dXJlQ2FjaGUuZGVmYXVsdFNhbXBsZXIpO1xyXG5cdFx0fVxyXG5cdH1cclxuXHRkZXN0cm95KCkge1xyXG5cdFx0dGhpcz8uYW9UZXh0dXJlPy5kZXN0cm95KCk7XHJcblx0XHR0aGlzPy5iYXNlVGV4dHVyZT8uZGVzdHJveSgpO1xyXG5cdFx0dGhpcz8uZW1pc3NpdmVUZXh0dXJlPy5kZXN0cm95KCk7XHJcblx0XHR0aGlzPy5ub3JtYWxUZXh0dXJlPy5kZXN0cm95KCk7XHJcblx0XHR0aGlzLnNwZWN1bGFyRW52VGV4dHVyZSA9IHVuZGVmaW5lZDtcclxuXHR9XHJcbn1cclxuIiwiZXhwb3J0IGNsYXNzIEV2ZW50RGlzcGF0Y2hlciB7XHJcblx0cHJpdmF0ZSBfbGlzdGVuZXJzOiBvYmplY3Q7XHJcblx0Y29uc3RydWN0b3IoKSB7XHJcblx0XHR0aGlzLl9saXN0ZW5lcnMgPSB7fTtcclxuXHR9XHJcblxyXG5cdGFkZEV2ZW50TGlzdGVuZXIodHlwZSwgbGlzdGVuZXIpIHtcclxuXHRcdGlmICh0aGlzLl9saXN0ZW5lcnMgPT09IHVuZGVmaW5lZCkgdGhpcy5fbGlzdGVuZXJzID0ge307XHJcblxyXG5cdFx0Y29uc3QgbGlzdGVuZXJzID0gdGhpcy5fbGlzdGVuZXJzO1xyXG5cclxuXHRcdGlmIChsaXN0ZW5lcnNbdHlwZV0gPT09IHVuZGVmaW5lZCkge1xyXG5cdFx0XHRsaXN0ZW5lcnNbdHlwZV0gPSBbXTtcclxuXHRcdH1cclxuXHJcblx0XHRpZiAobGlzdGVuZXJzW3R5cGVdLmluZGV4T2YobGlzdGVuZXIpID09PSAtMSkge1xyXG5cdFx0XHRsaXN0ZW5lcnNbdHlwZV0ucHVzaChsaXN0ZW5lcik7XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHRoYXNFdmVudExpc3RlbmVyKHR5cGUsIGxpc3RlbmVyKSB7XHJcblx0XHRpZiAodGhpcy5fbGlzdGVuZXJzID09PSB1bmRlZmluZWQpIHJldHVybiBmYWxzZTtcclxuXHJcblx0XHRjb25zdCBsaXN0ZW5lcnMgPSB0aGlzLl9saXN0ZW5lcnM7XHJcblxyXG5cdFx0cmV0dXJuIGxpc3RlbmVyc1t0eXBlXSAhPT0gdW5kZWZpbmVkICYmIGxpc3RlbmVyc1t0eXBlXS5pbmRleE9mKGxpc3RlbmVyKSAhPT0gLTE7XHJcblx0fVxyXG5cclxuXHRyZW1vdmVFdmVudExpc3RlbmVyKHR5cGUsIGxpc3RlbmVyKSB7XHJcblx0XHRpZiAodGhpcy5fbGlzdGVuZXJzID09PSB1bmRlZmluZWQpIHJldHVybjtcclxuXHJcblx0XHRjb25zdCBsaXN0ZW5lcnMgPSB0aGlzLl9saXN0ZW5lcnM7XHJcblx0XHRjb25zdCBsaXN0ZW5lckFycmF5ID0gbGlzdGVuZXJzW3R5cGVdO1xyXG5cclxuXHRcdGlmIChsaXN0ZW5lckFycmF5ICE9PSB1bmRlZmluZWQpIHtcclxuXHRcdFx0Y29uc3QgaW5kZXggPSBsaXN0ZW5lckFycmF5LmluZGV4T2YobGlzdGVuZXIpO1xyXG5cclxuXHRcdFx0aWYgKGluZGV4ICE9PSAtMSkge1xyXG5cdFx0XHRcdGxpc3RlbmVyQXJyYXkuc3BsaWNlKGluZGV4LCAxKTtcclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cdH1cclxuXHJcblx0ZGlzcGF0Y2hFdmVudChldmVudCkge1xyXG5cdFx0aWYgKHRoaXMuX2xpc3RlbmVycyA9PT0gdW5kZWZpbmVkKSByZXR1cm47XHJcblxyXG5cdFx0Y29uc3QgbGlzdGVuZXJzID0gdGhpcy5fbGlzdGVuZXJzO1xyXG5cdFx0Y29uc3QgbGlzdGVuZXJBcnJheSA9IGxpc3RlbmVyc1tldmVudC50eXBlXTtcclxuXHJcblx0XHRpZiAobGlzdGVuZXJBcnJheSAhPT0gdW5kZWZpbmVkKSB7XHJcblx0XHRcdGV2ZW50LnRhcmdldCA9IHRoaXM7XHJcblxyXG5cdFx0XHRjb25zdCBhcnJheSA9IGxpc3RlbmVyQXJyYXkuc2xpY2UoMCk7XHJcblxyXG5cdFx0XHRmb3IgKGxldCBpID0gMCwgbCA9IGFycmF5Lmxlbmd0aDsgaSA8IGw7IGkrKykge1xyXG5cdFx0XHRcdGFycmF5W2ldLmNhbGwodGhpcywgZXZlbnQpO1xyXG5cdFx0XHR9XHJcblx0XHRcdGV2ZW50LnRhcmdldCA9IG51bGw7XHJcblx0XHR9XHJcblx0fVxyXG59XHJcbiIsImltcG9ydCBDYW1lcmEgZnJvbSBcIi4uL2NhbWVyYS9DYW1lcmFcIjtcclxuaW1wb3J0IHsgQ29tcHV0ZSB9IGZyb20gXCIuLi9jb21wdXRlL0NvbXB1dGVcIjtcclxuaW1wb3J0IHsgTWF0ZXJpYWwgfSBmcm9tIFwiLi4vbWF0ZXJpYWwvTWF0ZXJpYWxcIjtcclxuaW1wb3J0IHsgTWVzaCB9IGZyb20gXCIuLi9tZXNoL01lc2hcIjtcclxuaW1wb3J0IHsgQ29tcHV0ZUNvbW1hbmQgfSBmcm9tIFwiLi4vcmVuZGVyL0NvbXB1dGVDb21tYW5kXCI7XHJcbmltcG9ydCBDb250ZXh0IGZyb20gXCIuLi9yZW5kZXIvQ29udGV4dFwiO1xyXG5pbXBvcnQgRHJhd0NvbW1hbmQgZnJvbSBcIi4uL3JlbmRlci9EcmF3Q29tbWFuZFwiO1xyXG5pbXBvcnQgTGlnaHRNYW5nZXIgZnJvbSBcIi4vTGlnaHRNYW5nZXJcIjtcclxuaW1wb3J0IHsgQ29tbWFuZFN1YlR5cGUgfSBmcm9tIFwiLi9XZWJHUFVDb25zdGFudFwiO1xyXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBSZW5kZXJRdWV1ZSB7XHJcblx0cHVibGljIHByZTogQXJyYXk8TWVzaD47XHJcblx0cHVibGljIG9wYXF1ZTogQXJyYXk8TWVzaD47XHJcblx0cHVibGljIHRyYW5zcGFyZW50OiBBcnJheTxNZXNoPjtcclxuXHRwdWJsaWMgZGVidWdRdWV1ZTogQXJyYXk8TWVzaD47XHJcblx0cHVibGljIGNvbXB1dGVzOiBBcnJheTxDb21wdXRlPjtcclxuXHRjb25zdHJ1Y3RvcigpIHtcclxuXHRcdHRoaXMucHJlID0gW107XHJcblx0XHR0aGlzLm9wYXF1ZSA9IFtdO1xyXG5cdFx0dGhpcy50cmFuc3BhcmVudCA9IFtdO1xyXG5cdFx0dGhpcy5jb21wdXRlcyA9IFtdO1xyXG5cdFx0dGhpcy5kZWJ1Z1F1ZXVlID0gW107XHJcblx0fVxyXG5cdHNvcnQoKSB7XHJcblx0XHRSZW5kZXJRdWV1ZS5zb3J0KHRoaXMub3BhcXVlLCAwLCB0aGlzLm9wYXF1ZS5sZW5ndGgsIFJlbmRlclF1ZXVlLl9jb21wYXJlRnJvbU5lYXJUb0Zhcik7XHJcblx0XHRSZW5kZXJRdWV1ZS5zb3J0KHRoaXMudHJhbnNwYXJlbnQsIDAsIHRoaXMudHJhbnNwYXJlbnQubGVuZ3RoLCBSZW5kZXJRdWV1ZS5fY29tcGFyZUZyb21GYXJUb05lYXIpO1xyXG5cdH1cclxuXHRvcGFxdWVSZW5kZXIoXHJcblx0XHRjYW1lcmE6IENhbWVyYSxcclxuXHRcdGNvbnRleHQ6IENvbnRleHQsXHJcblx0XHRwYXNzRW5jb2Rlcj86IEdQVVJlbmRlclBhc3NFbmNvZGVyLFxyXG5cdFx0cmVwbGFjZU1hdGVyaWFsPzogTWF0ZXJpYWwsXHJcblx0XHRjb21tYW5kU3ViVHlwZT86IENvbW1hbmRTdWJUeXBlLFxyXG5cdFx0bGlnaHRNYW5nZXI/OiBMaWdodE1hbmdlclxyXG5cdCkge1xyXG5cdFx0dGhpcy5vcGFxdWUubWFwKChtZXNoKSA9PiB7XHJcblx0XHRcdGlmICghbWVzaC5yZWFkeSkgcmV0dXJuO1xyXG5cdFx0XHRtZXNoLmJlZm9yZVJlbmRlcigpO1xyXG5cdFx0XHRSZW5kZXJRdWV1ZS5leGN1dGVDb21tYW5kKFxyXG5cdFx0XHRcdG1lc2guZ2V0RHJhd0NvbW1hbmQocmVwbGFjZU1hdGVyaWFsLCBjb21tYW5kU3ViVHlwZSwgbGlnaHRNYW5nZXIpLFxyXG5cdFx0XHRcdGNvbnRleHQsXHJcblx0XHRcdFx0cGFzc0VuY29kZXIsXHJcblx0XHRcdFx0Y2FtZXJhXHJcblx0XHRcdCk7XHJcblx0XHRcdG1lc2guYWZ0ZXJSZW5kZXIoKTtcclxuXHRcdH0pO1xyXG5cdH1cclxuXHR0cmFuc3BhcmVudFJlbmRlcihcclxuXHRcdGNhbWVyYTogQ2FtZXJhLFxyXG5cdFx0Y29udGV4dDogQ29udGV4dCxcclxuXHRcdHBhc3NFbmNvZGVyPzogR1BVUmVuZGVyUGFzc0VuY29kZXIsXHJcblx0XHRyZXBsYWNlTWF0ZXJpYWw/OiBNYXRlcmlhbCxcclxuXHRcdGNvbW1hbmRTdWJUeXBlPzogQ29tbWFuZFN1YlR5cGUsXHJcblx0XHRsaWdodE1hbmdlcj86IExpZ2h0TWFuZ2VyXHJcblx0KSB7XHJcblx0XHR0aGlzLnRyYW5zcGFyZW50Lm1hcCgobWVzaCkgPT4ge1xyXG5cdFx0XHRpZiAoIW1lc2gucmVhZHkpIHJldHVybjtcclxuXHRcdFx0bWVzaC5iZWZvcmVSZW5kZXIoKTtcclxuXHRcdFx0UmVuZGVyUXVldWUuZXhjdXRlQ29tbWFuZChcclxuXHRcdFx0XHRtZXNoLmdldERyYXdDb21tYW5kKHJlcGxhY2VNYXRlcmlhbCwgY29tbWFuZFN1YlR5cGUsIGxpZ2h0TWFuZ2VyKSxcclxuXHRcdFx0XHRjb250ZXh0LFxyXG5cdFx0XHRcdHBhc3NFbmNvZGVyLFxyXG5cdFx0XHRcdGNhbWVyYVxyXG5cdFx0XHQpO1xyXG5cdFx0XHRtZXNoLmFmdGVyUmVuZGVyKCk7XHJcblx0XHR9KTtcclxuXHR9XHJcblx0Y29tcHV0ZVJlbmRlcihjb250ZXh0OiBDb250ZXh0LCBwYXNzRW5jb2Rlcj86IEdQVUNvbXB1dGVQYXNzRW5jb2Rlcikge1xyXG5cdFx0dGhpcy5jb21wdXRlcy5tYXAoKGNvbXB1dGUpID0+IHtcclxuXHRcdFx0UmVuZGVyUXVldWUuZXhjdXRlQ29tcHV0ZShjb21wdXRlLmdldENvbW1hbmQoKSwgY29udGV4dCwgcGFzc0VuY29kZXIpO1xyXG5cdFx0fSk7XHJcblx0fVxyXG5cdGRlYnVnUXVldWVSZW5kZXIoXHJcblx0XHRjYW1lcmE6IENhbWVyYSxcclxuXHRcdGNvbnRleHQ6IENvbnRleHQsXHJcblx0XHRwYXNzRW5jb2Rlcj86IEdQVVJlbmRlclBhc3NFbmNvZGVyLFxyXG5cdFx0cmVwbGFjZU1hdGVyaWFsPzogTWF0ZXJpYWwsXHJcblx0XHRjb21tYW5kU3ViVHlwZT86IENvbW1hbmRTdWJUeXBlXHJcblx0KSB7XHJcblx0XHR0aGlzLmRlYnVnUXVldWUubWFwKChtZXNoKSA9PiB7XHJcblx0XHRcdGlmICghbWVzaC5yZWFkeSkgcmV0dXJuO1xyXG5cdFx0XHRtZXNoLmJlZm9yZVJlbmRlcigpO1xyXG5cdFx0XHRSZW5kZXJRdWV1ZS5leGN1dGVDb21tYW5kKFxyXG5cdFx0XHRcdG1lc2guZ2V0RHJhd0NvbW1hbmQocmVwbGFjZU1hdGVyaWFsLCBjb21tYW5kU3ViVHlwZSksXHJcblx0XHRcdFx0Y29udGV4dCxcclxuXHRcdFx0XHRwYXNzRW5jb2RlcixcclxuXHRcdFx0XHRjYW1lcmFcclxuXHRcdFx0KTtcclxuXHRcdFx0bWVzaC5hZnRlclJlbmRlcigpO1xyXG5cdFx0fSk7XHJcblx0fVxyXG5cdHByZVJlbmRlcihjYW1lcmE6IENhbWVyYSwgY29udGV4dDogQ29udGV4dCwgcGFzc0VuY29kZXI/OiBHUFVSZW5kZXJQYXNzRW5jb2RlciwgcmVwbGFjZU1hdGVyaWFsPzogTWF0ZXJpYWwpIHtcclxuXHRcdHRoaXMucHJlLm1hcCgobWVzaCkgPT4ge1xyXG5cdFx0XHRpZiAoIW1lc2gucmVhZHkpIHJldHVybjtcclxuXHRcdFx0bWVzaC5iZWZvcmVSZW5kZXIoKTtcclxuXHRcdFx0UmVuZGVyUXVldWUuZXhjdXRlQ29tbWFuZChtZXNoLmdldERyYXdDb21tYW5kKCksIGNvbnRleHQsIHBhc3NFbmNvZGVyLCBjYW1lcmEpO1xyXG5cdFx0XHRtZXNoLmFmdGVyUmVuZGVyKCk7XHJcblx0XHR9KTtcclxuXHR9XHJcblx0c3RhdGljIGV4Y3V0ZUNvbW1hbmQoY29tbWFuZDogRHJhd0NvbW1hbmQsIGNvbnRleHQ/OiBDb250ZXh0LCBwYXNzRW5jb2Rlcj86IEdQVVJlbmRlclBhc3NFbmNvZGVyLCBjYW1lcmE/OiBDYW1lcmEpIHtcclxuXHRcdGNvbW1hbmQucmVuZGVyKHtcclxuXHRcdFx0ZGV2aWNlOiBjb250ZXh0LmRldmljZSxcclxuXHRcdFx0cGFzc0VuY29kZXIsXHJcblx0XHRcdGNhbWVyYSxcclxuXHRcdFx0dmlld1BvcnQ6IGNvbnRleHQ/LnZpZXdQb3J0LFxyXG5cdFx0XHRzY2lzc29yVGVzdDogY29udGV4dD8uc2Npc3NvclRlc3RcclxuXHRcdH0pO1xyXG5cdH1cclxuXHRzdGF0aWMgZXhjdXRlQ29tcHV0ZShjb21tYW5kOiBDb21wdXRlQ29tbWFuZCwgY29udGV4dD86IENvbnRleHQsIHBhc3NFbmNvZGVyPzogR1BVQ29tcHV0ZVBhc3NFbmNvZGVyKSB7XHJcblx0XHRjb21tYW5kLnJlbmRlcih7IGRldmljZTogY29udGV4dC5kZXZpY2UsIHBhc3NFbmNvZGVyIH0pO1xyXG5cdH1cclxuXHRyZXNldCgpIHtcclxuXHRcdHRoaXMucHJlID0gW107XHJcblx0XHR0aGlzLm9wYXF1ZSA9IFtdO1xyXG5cdFx0dGhpcy50cmFuc3BhcmVudCA9IFtdO1xyXG5cdFx0dGhpcy5jb21wdXRlcyA9IFtdO1xyXG5cdFx0dGhpcy5kZWJ1Z1F1ZXVlID0gW107XHJcblx0fVxyXG5cdHN0YXRpYyBfY29tcGFyZUZyb21OZWFyVG9GYXIoYTogTWVzaCwgYjogTWVzaCk6IG51bWJlciB7XHJcblx0XHRyZXR1cm4gYS5wcmlvcml0eSAtIGIucHJpb3JpdHkgfHwgYS5kaXN0YW5jZVRvQ2FtZXJhIC0gYi5kaXN0YW5jZVRvQ2FtZXJhO1xyXG5cdH1cclxuXHJcblx0c3RhdGljIF9jb21wYXJlRnJvbUZhclRvTmVhcihhOiBNZXNoLCBiOiBNZXNoKTogbnVtYmVyIHtcclxuXHRcdHJldHVybiBhLnByaW9yaXR5IC0gYi5wcmlvcml0eSB8fCBiLmRpc3RhbmNlVG9DYW1lcmEgLSBhLmRpc3RhbmNlVG9DYW1lcmE7XHJcblx0fVxyXG5cdC8vIGFjY29yZGluZyB0byBjYW1lcmEgZGlzdGFuY2VcclxuXHRzdGF0aWMgc29ydDxUPihpbnNhdG5jZTogVFtdLCBmcm9tOiBudW1iZXIsIHRvOiBudW1iZXIsIGNvbXBhcmVGdW5jOiBGdW5jdGlvbik6IHZvaWQge1xyXG5cdFx0UmVuZGVyUXVldWUuX3F1aWNrU29ydChpbnNhdG5jZSwgZnJvbSwgdG8sIGNvbXBhcmVGdW5jKTtcclxuXHR9XHJcblx0Ly8gZnJvbSBodHRwczovL2dpdGh1Yi5jb20vb2FzaXMtZW5naW5lL2VuZ2luZS9ibG9iL21haW4vcGFja2FnZXMvY29yZS9zcmMvUmVuZGVyUGlwZWxpbmUvUmVuZGVyUXVldWUudHNcclxuXHRwcml2YXRlIHN0YXRpYyBfcXVpY2tTb3J0PFQ+KGE6IFRbXSwgZnJvbTogbnVtYmVyLCB0bzogbnVtYmVyLCBjb21wYXJlRnVuYzogRnVuY3Rpb24pOiB2b2lkIHtcclxuXHRcdHdoaWxlICh0cnVlKSB7XHJcblx0XHRcdC8vIEluc2VydGlvbiBzb3J0IGlzIGZhc3RlciBmb3Igc2hvcnQgYXJyYXlzLlxyXG5cdFx0XHRpZiAodG8gLSBmcm9tIDw9IDEwKSB7XHJcblx0XHRcdFx0UmVuZGVyUXVldWUuX2luc2VydGlvblNvcnQoYSwgZnJvbSwgdG8sIGNvbXBhcmVGdW5jKTtcclxuXHRcdFx0XHRyZXR1cm47XHJcblx0XHRcdH1cclxuXHRcdFx0Y29uc3QgdGhpcmRfaW5kZXggPSAoZnJvbSArIHRvKSA+PiAxO1xyXG5cdFx0XHQvLyBGaW5kIGEgcGl2b3QgYXMgdGhlIG1lZGlhbiBvZiBmaXJzdCwgbGFzdCBhbmQgbWlkZGxlIGVsZW1lbnQuXHJcblx0XHRcdGxldCB2MCA9IGFbZnJvbV07XHJcblx0XHRcdGxldCB2MSA9IGFbdG8gLSAxXTtcclxuXHRcdFx0bGV0IHYyID0gYVt0aGlyZF9pbmRleF07XHJcblx0XHRcdGNvbnN0IGMwMSA9IGNvbXBhcmVGdW5jKHYwLCB2MSk7XHJcblx0XHRcdGlmIChjMDEgPiAwKSB7XHJcblx0XHRcdFx0Ly8gdjEgPCB2MCwgc28gc3dhcCB0aGVtLlxyXG5cdFx0XHRcdGNvbnN0IHRtcCA9IHYwO1xyXG5cdFx0XHRcdHYwID0gdjE7XHJcblx0XHRcdFx0djEgPSB0bXA7XHJcblx0XHRcdH0gLy8gdjAgPD0gdjEuXHJcblx0XHRcdGNvbnN0IGMwMiA9IGNvbXBhcmVGdW5jKHYwLCB2Mik7XHJcblx0XHRcdGlmIChjMDIgPj0gMCkge1xyXG5cdFx0XHRcdC8vIHYyIDw9IHYwIDw9IHYxLlxyXG5cdFx0XHRcdGNvbnN0IHRtcCA9IHYwO1xyXG5cdFx0XHRcdHYwID0gdjI7XHJcblx0XHRcdFx0djIgPSB2MTtcclxuXHRcdFx0XHR2MSA9IHRtcDtcclxuXHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHQvLyB2MCA8PSB2MSAmJiB2MCA8IHYyXHJcblx0XHRcdFx0Y29uc3QgYzEyID0gY29tcGFyZUZ1bmModjEsIHYyKTtcclxuXHRcdFx0XHRpZiAoYzEyID4gMCkge1xyXG5cdFx0XHRcdFx0Ly8gdjAgPD0gdjIgPCB2MVxyXG5cdFx0XHRcdFx0Y29uc3QgdG1wID0gdjE7XHJcblx0XHRcdFx0XHR2MSA9IHYyO1xyXG5cdFx0XHRcdFx0djIgPSB0bXA7XHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9XHJcblx0XHRcdC8vIHYwIDw9IHYxIDw9IHYyXHJcblx0XHRcdGFbZnJvbV0gPSB2MDtcclxuXHRcdFx0YVt0byAtIDFdID0gdjI7XHJcblx0XHRcdGNvbnN0IHBpdm90ID0gdjE7XHJcblx0XHRcdGxldCBsb3dfZW5kID0gZnJvbSArIDE7IC8vIFVwcGVyIGJvdW5kIG9mIGVsZW1lbnRzIGxvd2VyIHRoYW4gcGl2b3QuXHJcblx0XHRcdGxldCBoaWdoX3N0YXJ0ID0gdG8gLSAxOyAvLyBMb3dlciBib3VuZCBvZiBlbGVtZW50cyBncmVhdGVyIHRoYW4gcGl2b3QuXHJcblx0XHRcdGFbdGhpcmRfaW5kZXhdID0gYVtsb3dfZW5kXTtcclxuXHRcdFx0YVtsb3dfZW5kXSA9IHBpdm90O1xyXG5cclxuXHRcdFx0Ly8gRnJvbSBsb3dfZW5kIHRvIGkgYXJlIGVsZW1lbnRzIGVxdWFsIHRvIHBpdm90LlxyXG5cdFx0XHQvLyBGcm9tIGkgdG8gaGlnaF9zdGFydCBhcmUgZWxlbWVudHMgdGhhdCBoYXZlbid0IGJlZW4gY29tcGFyZWQgeWV0LlxyXG5cdFx0XHRwYXJ0aXRpb246IGZvciAobGV0IGkgPSBsb3dfZW5kICsgMTsgaSA8IGhpZ2hfc3RhcnQ7IGkrKykge1xyXG5cdFx0XHRcdGxldCBlbGVtZW50ID0gYVtpXTtcclxuXHRcdFx0XHRsZXQgb3JkZXIgPSBjb21wYXJlRnVuYyhlbGVtZW50LCBwaXZvdCk7XHJcblx0XHRcdFx0aWYgKG9yZGVyIDwgMCkge1xyXG5cdFx0XHRcdFx0YVtpXSA9IGFbbG93X2VuZF07XHJcblx0XHRcdFx0XHRhW2xvd19lbmRdID0gZWxlbWVudDtcclxuXHRcdFx0XHRcdGxvd19lbmQrKztcclxuXHRcdFx0XHR9IGVsc2UgaWYgKG9yZGVyID4gMCkge1xyXG5cdFx0XHRcdFx0ZG8ge1xyXG5cdFx0XHRcdFx0XHRoaWdoX3N0YXJ0LS07XHJcblx0XHRcdFx0XHRcdGlmIChoaWdoX3N0YXJ0ID09IGkpIGJyZWFrIHBhcnRpdGlvbjtcclxuXHRcdFx0XHRcdFx0Y29uc3QgdG9wX2VsZW0gPSBhW2hpZ2hfc3RhcnRdO1xyXG5cdFx0XHRcdFx0XHRvcmRlciA9IGNvbXBhcmVGdW5jKHRvcF9lbGVtLCBwaXZvdCk7XHJcblx0XHRcdFx0XHR9IHdoaWxlIChvcmRlciA+IDApO1xyXG5cdFx0XHRcdFx0YVtpXSA9IGFbaGlnaF9zdGFydF07XHJcblx0XHRcdFx0XHRhW2hpZ2hfc3RhcnRdID0gZWxlbWVudDtcclxuXHRcdFx0XHRcdGlmIChvcmRlciA8IDApIHtcclxuXHRcdFx0XHRcdFx0ZWxlbWVudCA9IGFbaV07XHJcblx0XHRcdFx0XHRcdGFbaV0gPSBhW2xvd19lbmRdO1xyXG5cdFx0XHRcdFx0XHRhW2xvd19lbmRdID0gZWxlbWVudDtcclxuXHRcdFx0XHRcdFx0bG93X2VuZCsrO1xyXG5cdFx0XHRcdFx0fVxyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cdFx0XHRpZiAodG8gLSBoaWdoX3N0YXJ0IDwgbG93X2VuZCAtIGZyb20pIHtcclxuXHRcdFx0XHR0aGlzLl9xdWlja1NvcnQoYSwgaGlnaF9zdGFydCwgdG8sIGNvbXBhcmVGdW5jKTtcclxuXHRcdFx0XHR0byA9IGxvd19lbmQ7XHJcblx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0dGhpcy5fcXVpY2tTb3J0KGEsIGZyb20sIGxvd19lbmQsIGNvbXBhcmVGdW5jKTtcclxuXHRcdFx0XHRmcm9tID0gaGlnaF9zdGFydDtcclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cdH1cclxuXHRwcml2YXRlIHN0YXRpYyBfaW5zZXJ0aW9uU29ydDxUPihhOiBUW10sIGZyb206IG51bWJlciwgdG86IG51bWJlciwgY29tcGFyZUZ1bmM6IEZ1bmN0aW9uKTogdm9pZCB7XHJcblx0XHRmb3IgKGxldCBpID0gZnJvbSArIDE7IGkgPCB0bzsgaSsrKSB7XHJcblx0XHRcdGxldCBqO1xyXG5cdFx0XHRjb25zdCBlbGVtZW50ID0gYVtpXTtcclxuXHRcdFx0Zm9yIChqID0gaSAtIDE7IGogPj0gZnJvbTsgai0tKSB7XHJcblx0XHRcdFx0Y29uc3QgdG1wID0gYVtqXTtcclxuXHRcdFx0XHRjb25zdCBvcmRlciA9IGNvbXBhcmVGdW5jKHRtcCwgZWxlbWVudCk7XHJcblx0XHRcdFx0aWYgKG9yZGVyID4gMCkge1xyXG5cdFx0XHRcdFx0YVtqICsgMV0gPSB0bXA7XHJcblx0XHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHRcdGJyZWFrO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fVxyXG5cdFx0XHRhW2ogKyAxXSA9IGVsZW1lbnQ7XHJcblx0XHR9XHJcblx0fVxyXG59XHJcbiIsImltcG9ydCB7IFNjZW5lIH0gZnJvbSBcIi4uL1NjZW5lXCI7XHJcbmltcG9ydCBDYW1lcmEgZnJvbSBcIi4uL2NhbWVyYS9DYW1lcmFcIjtcclxuaW1wb3J0IENvbG9yIGZyb20gXCIuLi9tYXRoL0NvbG9yXCI7XHJcbmltcG9ydCBQYXNzIGZyb20gXCIuLi9wYXNzL1Bhc3NcIjtcclxuaW1wb3J0IENvbnRleHQgZnJvbSBcIi4uL3JlbmRlci9Db250ZXh0XCI7XHJcbmltcG9ydCBUZXh0dXJlIGZyb20gXCIuLi9yZW5kZXIvVGV4dHVyZVwiO1xyXG5pbXBvcnQgY29tYmluZSBmcm9tIFwiLi4vdXRpbHMvY29tYmluZVwiO1xyXG5pbXBvcnQgQ3VsbGluZ1ZvbHVtZSBmcm9tIFwiLi9DdWxsaW5nVm9sdW1lXCI7XHJcbmltcG9ydCBMaWdodE1hbmdlciBmcm9tIFwiLi9MaWdodE1hbmdlclwiO1xyXG5pbXBvcnQgUmVuZGVyUXVldWUgZnJvbSBcIi4vUmVuZGVyUXVldWVcIjtcclxuXHJcbmludGVyZmFjZSBGcmFtZVN0YXRlT3B0aW9ucyB7XHJcblx0YmFja2dyb3VuZD86IEJhY2tncm91bmQ7XHJcbn1cclxuXHJcbmV4cG9ydCBpbnRlcmZhY2UgQmFja2dyb3VuZCB7XHJcblx0dmFsdWU6IENvbG9yIHwgVGV4dHVyZTtcclxuXHRvcGFjaXR5OiBudW1iZXI7XHJcbn1cclxuXHJcbmV4cG9ydCBjbGFzcyBGcmFtZVN0YXRlIHtcclxuXHRwdWJsaWMgYmFja2dyb3VuZDogQmFja2dyb3VuZDtcclxuXHRwdWJsaWMgcGFzczogUGFzcztcclxuXHRwdWJsaWMgcmVuZGVyUXVldWU6IFJlbmRlclF1ZXVlO1xyXG5cdHB1YmxpYyBkcmF3Q2FsbG51bXM6IG51bWJlcjtcclxuXHRwdWJsaWMgZ2VvbWV0cnlNZW1vcnk6IG51bWJlcjtcclxuXHRwdWJsaWMgdGV4dHVyZU1lbW9yeTogbnVtYmVyO1xyXG5cdHB1YmxpYyBmcmFtZU51bWJlcjogbnVtYmVyO1xyXG5cdHB1YmxpYyBjdWxsaW5nVm9sdW1lOiBDdWxsaW5nVm9sdW1lO1xyXG5cdHB1YmxpYyBkZWZpbmVzRGlydHk6IGJvb2xlYW47XHJcblx0cHJpdmF0ZSBfZGVmaW5lczogb2JqZWN0O1xyXG5cdGNvbnN0cnVjdG9yKHB1YmxpYyBjb250ZXh0OiBDb250ZXh0LCBwdWJsaWMgbGlnaHRNYW5nZXI/OiBMaWdodE1hbmdlciwgb3B0aW9uczogRnJhbWVTdGF0ZU9wdGlvbnMgPSB7fSkge1xyXG5cdFx0dGhpcy5iYWNrZ3JvdW5kID0gb3B0aW9ucy5iYWNrZ3JvdW5kO1xyXG5cdFx0dGhpcy5yZW5kZXJRdWV1ZSA9IG5ldyBSZW5kZXJRdWV1ZSgpO1xyXG5cdFx0dGhpcy5nZW9tZXRyeU1lbW9yeSA9IDA7XHJcblx0XHR0aGlzLnRleHR1cmVNZW1vcnkgPSAwO1xyXG5cdFx0dGhpcy5mcmFtZU51bWJlciA9IDA7XHJcblx0XHR0aGlzLl9kZWZpbmVzID0ge307XHJcblx0XHR0aGlzLmRlZmluZXNEaXJ0eSA9IHRydWU7XHJcblx0fVxyXG5cdGdldCBkZWZpbmVzKCkge1xyXG5cdFx0cmV0dXJuIHRoaXMuX2RlZmluZXM7XHJcblx0fVxyXG5cdHNldCBkZWZpbmVzKHZhbHVlKSB7XHJcblx0XHR0aGlzLmRlZmluZXNEaXJ0eSA9IHRydWU7XHJcblx0XHR0aGlzLl9kZWZpbmVzID0gY29tYmluZSh2YWx1ZSwgdGhpcy5fZGVmaW5lcywgZmFsc2UpO1xyXG5cdH1cclxuXHR1cGRhdGUoY2FtZXJhOiBDYW1lcmEsIG9wdGlvbnM6IEZyYW1lU3RhdGVPcHRpb25zID0ge30pIHtcclxuXHRcdHRoaXMuYmFja2dyb3VuZCA9IG9wdGlvbnMuYmFja2dyb3VuZDtcclxuXHJcblx0XHR0aGlzLnJlbmRlclF1ZXVlLnJlc2V0KCk7XHJcblx0XHR0aGlzPy5saWdodE1hbmdlcj8udXBkYXRlPy4odGhpcywgY2FtZXJhKTtcclxuXHRcdHRoaXMuY3VsbGluZ1ZvbHVtZSA9IGNhbWVyYS5nZXRDdWxsaW5nVm9sdW1lKCk7XHJcblx0XHR0aGlzLmZyYW1lTnVtYmVyICs9IDE7XHJcblx0fVxyXG5cclxuXHRyZXNldEN1bGxpbmdWb2x1bWUoY2FtZXJhOiBDYW1lcmEpIHtcclxuXHRcdHRoaXMuY3VsbGluZ1ZvbHVtZSA9IGNhbWVyYS5nZXRDdWxsaW5nVm9sdW1lKCk7XHJcblx0fVxyXG5cclxuXHRzdGF0aWMgZ2V0RnJhbWVTdGF0ZU9wdGlvbnNCeVNjZW5lKHNjZW5lSW5zdGFuY2U6IFNjZW5lKSB7XHJcblx0XHRyZXR1cm4ge1xyXG5cdFx0XHRiYWNrZ3JvdW5kOiBzY2VuZUluc3RhbmNlLmJhY2tncm91bmRcclxuXHRcdH07XHJcblx0fVxyXG59XHJcbiIsImltcG9ydCB7IExpZ2h0VHlwZSB9IGZyb20gXCIuLi9jb3JlL1dlYkdQVVR5cGVzXCI7XHJcbmltcG9ydCBWZWN0b3IzIGZyb20gXCIuLi9tYXRoL1ZlY3RvcjNcIjtcclxuaW1wb3J0IFZlY3RvcjQgZnJvbSBcIi4uL21hdGgvVmVjdG9yNFwiO1xyXG5pbXBvcnQgeyBMaWdodCB9IGZyb20gXCIuL0xpZ2h0XCI7XHJcblxyXG5leHBvcnQgY2xhc3MgQW1iaWVudExpZ2h0IGV4dGVuZHMgTGlnaHQge1xyXG5cdHByaXZhdGUgX2NvbG9yQW5kSW50ZW5zaXR5OiBWZWN0b3I0O1xyXG5cdGNvbnN0cnVjdG9yKGNvbG9yOiBWZWN0b3IzLCBpbnRlbnNpdHk6IG51bWJlcikge1xyXG5cdFx0c3VwZXIoY29sb3IsIGludGVuc2l0eSk7XHJcblx0XHR0aGlzLmxpZ2h0VHlwZSA9IExpZ2h0VHlwZS5BbWJpZW50TGlnaHQ7XHJcblx0XHR0aGlzLl9jb2xvckFuZEludGVuc2l0eSA9IG5ldyBWZWN0b3I0KGNvbG9yLngsIGNvbG9yLnksIGNvbG9yLnosIGludGVuc2l0eSk7XHJcblx0fVxyXG5cdGdldCBDb2xvckFuZEludGVuc2l0eSgpIHtcclxuXHRcdHRoaXMuX2NvbG9yQW5kSW50ZW5zaXR5LnNldCh0aGlzLmNvbG9yLngsIHRoaXMuY29sb3IueSwgdGhpcy5jb2xvci56LCB0aGlzLmludGVuc2l0eSk7XHJcblx0XHRyZXR1cm4gdGhpcy5fY29sb3JBbmRJbnRlbnNpdHk7XHJcblx0fVxyXG59XHJcbi8vIGxpZ2h0LmNvbG9yICkubXVsdGlwbHlTY2FsYXIoIGxpZ2h0LmludGVuc2l0eSAqIHNjYWxlRmFjdG9yICk7XHJcbiIsImltcG9ydCBDYW1lcmEgZnJvbSBcIi4uL2NhbWVyYS9DYW1lcmFcIjtcclxuaW1wb3J0IHsgTGlnaHRNYW5nZXJPcHRpb25zLCBMaWdodFR5cGUsIFVuaWZvcm1FbnVtIH0gZnJvbSBcIi4uL2NvcmUvV2ViR1BVVHlwZXNcIjtcclxuaW1wb3J0IHsgQW1iaWVudExpZ2h0IH0gZnJvbSBcIi4uL2xpZ2h0L0FtYmllbnRMaWdodFwiO1xyXG5pbXBvcnQgeyBEaXJlY3Rpb25hbExpZ2h0IH0gZnJvbSBcIi4uL2xpZ2h0L0RpcmVjdGlvbmFsTGlnaHRcIjtcclxuaW1wb3J0IHsgTGlnaHQgfSBmcm9tIFwiLi4vbGlnaHQvTGlnaHRcIjtcclxuaW1wb3J0IHsgUG9pbnRMaWdodCB9IGZyb20gXCIuLi9saWdodC9Qb2ludExpZ2h0XCI7XHJcbmltcG9ydCB7IFNwb3RMaWdodCB9IGZyb20gXCIuLi9saWdodC9TcG90TGlnaHRcIjtcclxuaW1wb3J0IFZlY3RvcjMgZnJvbSBcIi4uL21hdGgvVmVjdG9yM1wiO1xyXG5pbXBvcnQgU2FtcGxlciBmcm9tIFwiLi4vcmVuZGVyL1NhbXBsZXJcIjtcclxuaW1wb3J0IFNoYWRlckRhdGEgZnJvbSBcIi4uL3JlbmRlci9TaGFkZXJEYXRhXCI7XHJcbmltcG9ydCBUZXh0dXJlIGZyb20gXCIuLi9yZW5kZXIvVGV4dHVyZVwiO1xyXG5pbXBvcnQgVW5pZm9ybUJ1ZmZlciBmcm9tIFwiLi4vcmVuZGVyL1VuaWZvcm1CdWZmZXJcIjtcclxuaW1wb3J0IHsgRnJhbWVTdGF0ZSB9IGZyb20gXCIuL0ZyYW1lU3RhdGVcIjtcclxuaW1wb3J0IHtcclxuXHRUZXh0dXJlVXNhZ2UsXHJcblx0QnVmZmVyVXNhZ2UsXHJcblx0VGV4dHVyZUZvcm1hdCxcclxuXHRDb21wYXJlRnVuY3Rpb24sXHJcblx0U2FtcGxlckJpbmRpbmdUeXBlLFxyXG5cdFRleHR1cmVTYW1wbGVUeXBlLFxyXG5cdFRleHR1cmVWaWV3RGltZW5zaW9uLFxyXG5cdEJ1ZmZlckJpbmRpbmdUeXBlXHJcbn0gZnJvbSBcIi4vV2ViR1BVQ29uc3RhbnRcIjtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIExpZ2h0TWFuZ2VyIHtcclxuXHRsaWdodFVuaWZvcm1CdWZmZXI6IFVuaWZvcm1CdWZmZXI7XHJcblx0c2hhZG93VW5pZm9ybUJ1ZmZlcjogVW5pZm9ybUJ1ZmZlcjtcclxuXHRwb2ludExpZ2h0czogUG9pbnRMaWdodFtdO1xyXG5cclxuXHRzcG90TGlnaHRzOiBTcG90TGlnaHRbXTtcclxuXHJcblx0ZGlyZWN0TGlnaHRzOiBEaXJlY3Rpb25hbExpZ2h0W107XHJcblxyXG5cdGFtYmllbnRMaWdodDogQW1iaWVudExpZ2h0O1xyXG5cclxuXHRsaWdodFNoYWRlckRhdGE6IFNoYWRlckRhdGE7XHJcblxyXG5cdGxpZ2h0Q291bnREaXJ0eTogYm9vbGVhbjtcclxuXHJcblx0cHJpdmF0ZSBvcGVuU2hhZG93OiBib29sZWFuO1xyXG5cdHNwb3RMaWdodFNoYWRvd01hcFRleHR1cmVBcnJheTogVGV4dHVyZTtcclxuXHRwb2ludExpZ2h0U2hhZG93TWFwVGV4dHVyZUFycmF5OiBUZXh0dXJlO1xyXG5cdGRpcmVjdExpZ2h0U2hhZG93TWFwVGV4dHVyZUFycmF5OiBUZXh0dXJlO1xyXG5cdF90ZXN0VGV4dHVyZTogVGV4dHVyZTtcclxuXHJcblx0Y29uc3RydWN0b3Iob3B0aW9uczogTGlnaHRNYW5nZXJPcHRpb25zKSB7XHJcblx0XHR0aGlzLnNwb3RMaWdodHMgPSBbXTtcclxuXHRcdHRoaXMucG9pbnRMaWdodHMgPSBbXTtcclxuXHRcdHRoaXMuZGlyZWN0TGlnaHRzID0gW107XHJcblx0XHR0aGlzLmFtYmllbnRMaWdodCA9IG5ldyBBbWJpZW50TGlnaHQobmV3IFZlY3RvcjMoMS4wLCAxLjAsIDEuMCksIDAuMik7XHJcblx0XHR0aGlzLmxpZ2h0Q291bnREaXJ0eSA9IHRydWU7XHJcblx0XHR0aGlzLm9wZW5TaGFkb3cgPSBvcHRpb25zLm9wZW5TaGFkb3c7XHJcblx0fVxyXG5cdHVwZGF0ZShmcmFtZVN0YXRlOiBGcmFtZVN0YXRlLCBjYW1lcmE6IENhbWVyYSkge1xyXG5cdFx0dGhpcy5jaGVja0xpZ2h0U2hhZG93U3RhdGUoKTtcclxuXHRcdHRoaXMudXBkYXRlTGlnaHQoY2FtZXJhKTtcclxuXHR9XHJcblx0YWRkKGxpZ2h0OiBMaWdodCkge1xyXG5cdFx0dGhpcy5saWdodENvdW50RGlydHkgPSB0cnVlO1xyXG5cdFx0aWYgKGxpZ2h0LmxpZ2h0VHlwZSA9PSBMaWdodFR5cGUuQW1iaWVudExpZ2h0KSB7XHJcblx0XHRcdHRoaXMuYW1iaWVudExpZ2h0ID0gPEFtYmllbnRMaWdodD5saWdodDtcclxuXHRcdH0gZWxzZSBpZiAobGlnaHQubGlnaHRUeXBlID09IExpZ2h0VHlwZS5EaXJlY3Rpb25hbExpZ2h0KSB7XHJcblx0XHRcdHRoaXMuZGlyZWN0TGlnaHRzLnB1c2goPERpcmVjdGlvbmFsTGlnaHQ+bGlnaHQpO1xyXG5cdFx0fSBlbHNlIGlmIChsaWdodC5saWdodFR5cGUgPT0gTGlnaHRUeXBlLlBvaW50TGlnaHQpIHtcclxuXHRcdFx0dGhpcy5wb2ludExpZ2h0cy5wdXNoKDxQb2ludExpZ2h0PmxpZ2h0KTtcclxuXHRcdH0gZWxzZSBpZiAobGlnaHQubGlnaHRUeXBlID09IExpZ2h0VHlwZS5TcG90TGlnaHQpIHtcclxuXHRcdFx0dGhpcy5zcG90TGlnaHRzLnB1c2goPFNwb3RMaWdodD5saWdodCk7XHJcblx0XHR9XHJcblx0fVxyXG5cdHJlbW92ZShsaWdodDogTGlnaHQpIHtcclxuXHRcdHRoaXMubGlnaHRDb3VudERpcnR5ID0gdHJ1ZTtcclxuXHRcdGlmIChsaWdodC5saWdodFR5cGUgPT0gTGlnaHRUeXBlLkFtYmllbnRMaWdodCkge1xyXG5cdFx0XHR0aGlzLmFtYmllbnRMaWdodCA9IG5ldyBBbWJpZW50TGlnaHQobmV3IFZlY3RvcjMoMS4wLCAxLjAsIDEuMCksIDEuMCk7XHJcblx0XHR9IGVsc2UgaWYgKGxpZ2h0LmxpZ2h0VHlwZSA9PSBMaWdodFR5cGUuRGlyZWN0aW9uYWxMaWdodCkge1xyXG5cdFx0XHR0aGlzLmRpcmVjdExpZ2h0cy5zcGxpY2UodGhpcy5kaXJlY3RMaWdodHMuaW5kZXhPZig8RGlyZWN0aW9uYWxMaWdodD5saWdodCksIDEpO1xyXG5cdFx0fSBlbHNlIGlmIChsaWdodC5saWdodFR5cGUgPT0gTGlnaHRUeXBlLlBvaW50TGlnaHQpIHtcclxuXHRcdFx0dGhpcy5wb2ludExpZ2h0cy5zcGxpY2UodGhpcy5wb2ludExpZ2h0cy5pbmRleE9mKDxQb2ludExpZ2h0PmxpZ2h0KSwgMSk7XHJcblx0XHR9IGVsc2UgaWYgKGxpZ2h0LmxpZ2h0VHlwZSA9PSBMaWdodFR5cGUuU3BvdExpZ2h0KSB7XHJcblx0XHRcdHRoaXMuc3BvdExpZ2h0cy5zcGxpY2UodGhpcy5zcG90TGlnaHRzLmluZGV4T2YoPFNwb3RMaWdodD5saWdodCksIDEpO1xyXG5cdFx0fVxyXG5cdH1cclxuXHRjaGVja0xpZ2h0U2hhZG93U3RhdGUoKSB7XHJcblx0XHRjb25zdCBsaWdodHMgPSB0aGlzLmdldEFsbExpZ2h0cygpO1xyXG5cdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCBsaWdodHMubGVuZ3RoOyBpKyspIHtcclxuXHRcdFx0Y29uc3QgbGlnaHQgPSBsaWdodHNbaV07XHJcblx0XHRcdGlmIChsaWdodC5zaGFkb3dEaXJ0eSkge1xyXG5cdFx0XHRcdGxpZ2h0LnNoYWRvd0RpcnR5ID0gZmFsc2U7XHJcblx0XHRcdFx0dGhpcy5saWdodENvdW50RGlydHkgPSB0cnVlO1xyXG5cdFx0XHR9XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHR1cGRhdGVMaWdodFNoYWRvdygpIHtcclxuXHRcdGlmICh0aGlzLnNwb3RMaWdodFNoYWRvd01hcFRleHR1cmVBcnJheSkgdGhpcy5zcG90TGlnaHRTaGFkb3dNYXBUZXh0dXJlQXJyYXkuZGlydHkgPSB0cnVlO1xyXG5cclxuXHRcdGlmICh0aGlzLnBvaW50TGlnaHRTaGFkb3dNYXBUZXh0dXJlQXJyYXkpIHRoaXMucG9pbnRMaWdodFNoYWRvd01hcFRleHR1cmVBcnJheS5kaXJ0eSA9IHRydWU7XHJcblxyXG5cdFx0aWYgKHRoaXMuZGlyZWN0TGlnaHRTaGFkb3dNYXBUZXh0dXJlQXJyYXkpIHRoaXMuZGlyZWN0TGlnaHRTaGFkb3dNYXBUZXh0dXJlQXJyYXkuZGlydHkgPSB0cnVlO1xyXG5cdH1cclxuXHJcblx0cHJpdmF0ZSB1cGRhdGVMaWdodChjYW1lcmE6IENhbWVyYSkge1xyXG5cdFx0aWYgKHRoaXMubGlnaHRDb3VudERpcnR5KSB7XHJcblx0XHRcdHRoaXMubGlnaHRDb3VudERpcnR5ID0gZmFsc2U7XHJcblx0XHRcdGlmICh0aGlzLmxpZ2h0U2hhZGVyRGF0YSkgdGhpcy5saWdodFNoYWRlckRhdGEuZGVzdHJveSgpO1xyXG5cdFx0XHR0aGlzLmNyZWF0ZUxpZ2h0U2hhZGVyRGF0YSgpO1xyXG5cdFx0fVxyXG5cdH1cclxuXHRwcml2YXRlIGNyZWF0ZUxpZ2h0U2hhZGVyRGF0YSgpIHtcclxuXHRcdHRoaXMubGlnaHRTaGFkZXJEYXRhID0gbmV3IFNoYWRlckRhdGEoXCJsaWdodFwiLCAwLCAyLCAyKTtcclxuXHRcdHRoaXMubGlnaHRVbmlmb3JtQnVmZmVyID0gbmV3IFVuaWZvcm1CdWZmZXIoe1xyXG5cdFx0XHRsYWJlbDogXCJsaWdodFwiLFxyXG5cdFx0XHR0eXBlOiBCdWZmZXJCaW5kaW5nVHlwZS5SZWFkT25seVN0b3JhZ2UsXHJcblx0XHRcdHVzYWdlOiBCdWZmZXJVc2FnZS5TdG9yYWdlIHwgQnVmZmVyVXNhZ2UuQ29weURzdFxyXG5cdFx0fSk7XHJcblxyXG5cdFx0dGhpcy5saWdodFNoYWRlckRhdGEuc2V0RGVmaW5lKFwic3BvdExpZ2h0c0NvdW50XCIsIHRoaXMuc3BvdExpZ2h0cy5sZW5ndGgpO1xyXG5cdFx0dGhpcy5saWdodFNoYWRlckRhdGEuc2V0RGVmaW5lKFwicG9pbnRMaWdodHNDb3VudFwiLCB0aGlzLnBvaW50TGlnaHRzLmxlbmd0aCk7XHJcblx0XHR0aGlzLmxpZ2h0U2hhZGVyRGF0YS5zZXREZWZpbmUoXCJkaXJ0ZWN0TGlnaHRzQ291bnRcIiwgdGhpcy5kaXJlY3RMaWdodHMubGVuZ3RoKTtcclxuXHRcdHRoaXMubGlnaHRTaGFkZXJEYXRhLnNldERlZmluZShcImFtYmllbnRMaWdodENvdW50XCIsIDEpO1xyXG5cdFx0aWYgKHRoaXMuYW1iaWVudExpZ2h0KVxyXG5cdFx0XHR0aGlzLmxpZ2h0VW5pZm9ybUJ1ZmZlci5zZXRVbmlmb3JtKFxyXG5cdFx0XHRcdFwiYW1iaWVudExpZ2h0XCIsXHJcblx0XHRcdFx0KCkgPT4ge1xyXG5cdFx0XHRcdFx0cmV0dXJuIHRoaXMuYW1iaWVudExpZ2h0LkNvbG9yQW5kSW50ZW5zaXR5O1xyXG5cdFx0XHRcdH0sXHJcblx0XHRcdFx0VW5pZm9ybUVudW0uRmxvYXRWZWM0XHJcblx0XHRcdCk7XHJcblx0XHRpZiAodGhpcy5zcG90TGlnaHRzLmxlbmd0aCkge1xyXG5cdFx0XHQvLyDliJ3lp4vljJbogZrlhYnnga9cclxuXHRcdFx0dGhpcy5saWdodFVuaWZvcm1CdWZmZXIuc2V0VW5pZm9ybShcclxuXHRcdFx0XHRcInNwb3RMaWdodHNcIixcclxuXHRcdFx0XHQoKSA9PiB7XHJcblx0XHRcdFx0XHRyZXR1cm4gdGhpcy5zcG90TGlnaHRzO1xyXG5cdFx0XHRcdH0sXHJcblx0XHRcdFx0VW5pZm9ybUVudW0uU3BvdExpZ2h0cyxcclxuXHRcdFx0XHR0aGlzLnNwb3RMaWdodHMubGVuZ3RoXHJcblx0XHRcdCk7XHJcblx0XHR9XHJcblx0XHRpZiAodGhpcy5wb2ludExpZ2h0cy5sZW5ndGgpIHtcclxuXHRcdFx0Ly8g54K55YWJ5rqQXHJcblx0XHRcdHRoaXMubGlnaHRVbmlmb3JtQnVmZmVyLnNldFVuaWZvcm0oXHJcblx0XHRcdFx0XCJwb2ludExpZ2h0c1wiLFxyXG5cdFx0XHRcdCgpID0+IHtcclxuXHRcdFx0XHRcdHJldHVybiB0aGlzLnBvaW50TGlnaHRzO1xyXG5cdFx0XHRcdH0sXHJcblx0XHRcdFx0VW5pZm9ybUVudW0uUG9pbnRMaWdodHMsXHJcblx0XHRcdFx0dGhpcy5wb2ludExpZ2h0cy5sZW5ndGhcclxuXHRcdFx0KTtcclxuXHRcdH1cclxuXHRcdGlmICh0aGlzLmRpcmVjdExpZ2h0cy5sZW5ndGgpIHtcclxuXHRcdFx0Ly8g5pa55ZCR5YWJXHJcblx0XHRcdHRoaXMubGlnaHRVbmlmb3JtQnVmZmVyLnNldFVuaWZvcm0oXHJcblx0XHRcdFx0XCJkaXJlY3RMaWdodHNcIixcclxuXHRcdFx0XHQoKSA9PiB7XHJcblx0XHRcdFx0XHRyZXR1cm4gdGhpcy5kaXJlY3RMaWdodHM7XHJcblx0XHRcdFx0fSxcclxuXHRcdFx0XHRVbmlmb3JtRW51bS5EaXJ0ZWN0TGlnaHRzLFxyXG5cdFx0XHRcdHRoaXMuZGlyZWN0TGlnaHRzLmxlbmd0aFxyXG5cdFx0XHQpO1xyXG5cdFx0fVxyXG5cclxuXHRcdHNoYWRvd1NoYWRlckRhdGE6IHtcclxuXHRcdFx0aWYgKHRoaXMub3BlblNoYWRvdykge1xyXG5cdFx0XHRcdGNvbnN0IHNwb3RMaWdodFNoYWRvd01hcFRleHR1cmVBcnJheSA9ICh0aGlzLnNwb3RMaWdodFNoYWRvd01hcFRleHR1cmVBcnJheSA9XHJcblx0XHRcdFx0XHR0aGlzLmNyZWF0ZVNoYWRvd01hcFRleHR1cmVBcnJheSh0aGlzLnNwb3RMaWdodHMpKTtcclxuXHRcdFx0XHRjb25zdCBwb2ludExpZ2h0U2hhZG93TWFwVGV4dHVyZUFycmF5ID0gKHRoaXMucG9pbnRMaWdodFNoYWRvd01hcFRleHR1cmVBcnJheSA9XHJcblx0XHRcdFx0XHR0aGlzLmNyZWF0ZVNoYWRvd01hcFRleHR1cmVBcnJheSh0aGlzLnBvaW50TGlnaHRzKSk7XHJcblx0XHRcdFx0Y29uc3QgZGlyZWN0TGlnaHRTaGFkb3dNYXBUZXh0dXJlQXJyYXkgPSAodGhpcy5kaXJlY3RMaWdodFNoYWRvd01hcFRleHR1cmVBcnJheSA9XHJcblx0XHRcdFx0XHR0aGlzLmNyZWF0ZVNoYWRvd01hcFRleHR1cmVBcnJheSh0aGlzLmRpcmVjdExpZ2h0cykpO1xyXG5cdFx0XHRcdGlmIChcclxuXHRcdFx0XHRcdCFzcG90TGlnaHRTaGFkb3dNYXBUZXh0dXJlQXJyYXkgJiZcclxuXHRcdFx0XHRcdCFwb2ludExpZ2h0U2hhZG93TWFwVGV4dHVyZUFycmF5ICYmXHJcblx0XHRcdFx0XHQhZGlyZWN0TGlnaHRTaGFkb3dNYXBUZXh0dXJlQXJyYXlcclxuXHRcdFx0XHQpXHJcblx0XHRcdFx0XHRicmVhayBzaGFkb3dTaGFkZXJEYXRhO1xyXG5cclxuXHRcdFx0XHQvLyBkZWZpbmVcclxuXHRcdFx0XHR0aGlzLmxpZ2h0U2hhZGVyRGF0YS5zZXREZWZpbmUoXCJvcGVuU2hhZG93XCIsIHRoaXMub3BlblNoYWRvdyk7XHJcblxyXG5cdFx0XHRcdC8vIHNoYWRvd1VuaWZvcm1CdWZmZXJcclxuXHRcdFx0XHR0aGlzLnNoYWRvd1VuaWZvcm1CdWZmZXIgPSBuZXcgVW5pZm9ybUJ1ZmZlcih7XHJcblx0XHRcdFx0XHRsYWJlbDogXCJzaGFkb3dcIixcclxuXHRcdFx0XHRcdHR5cGU6IEJ1ZmZlckJpbmRpbmdUeXBlLlJlYWRPbmx5U3RvcmFnZSxcclxuXHRcdFx0XHRcdHVzYWdlOiBCdWZmZXJVc2FnZS5TdG9yYWdlIHwgQnVmZmVyVXNhZ2UuQ29weURzdFxyXG5cdFx0XHRcdH0pO1xyXG5cclxuXHRcdFx0XHQvLyBtYXRyaXgsbmVhcixmYXIuLi5cclxuXHRcdFx0XHRjb25zdCBzcG90TGlnaHRXaXRoU2hhZG93Q291bnQgPSB0aGlzLnNldFNoYWRvd1VuaWZvcm0oXHJcblx0XHRcdFx0XHRcInNwb3RMaWdodFNoYWRvd3NcIixcclxuXHRcdFx0XHRcdHRoaXMuc3BvdExpZ2h0cyxcclxuXHRcdFx0XHRcdFVuaWZvcm1FbnVtLlNwb3RMaWdodFNoYWRvd3NcclxuXHRcdFx0XHQpO1xyXG5cdFx0XHRcdGNvbnN0IHBvaW50TGlnaHRXaXRoU2hhZG93Q291bnQgPSB0aGlzLnNldFNoYWRvd1VuaWZvcm0oXHJcblx0XHRcdFx0XHRcInBvaW50TGlnaHRTaGFkb3dzXCIsXHJcblx0XHRcdFx0XHR0aGlzLnBvaW50TGlnaHRzLFxyXG5cdFx0XHRcdFx0VW5pZm9ybUVudW0uUG9pbnRMaWdodFNoYWRvd3NcclxuXHRcdFx0XHQpO1xyXG5cdFx0XHRcdGNvbnN0IGRpcmVjdExpZ2h0V2l0aFNoYWRvd0NvdW50ID0gdGhpcy5zZXRTaGFkb3dVbmlmb3JtKFxyXG5cdFx0XHRcdFx0XCJkaXJlY3RMaWdodFNoYWRvd3NcIixcclxuXHRcdFx0XHRcdHRoaXMuZGlyZWN0TGlnaHRzLFxyXG5cdFx0XHRcdFx0VW5pZm9ybUVudW0uRGlydGVjdExpZ2h0U2hhZG93c1xyXG5cdFx0XHRcdCk7XHJcblx0XHRcdFx0dGhpcy5saWdodFNoYWRlckRhdGEuc2V0VW5pZm9ybUJ1ZmZlcihcInNoYWRvd1wiLCB0aGlzLnNoYWRvd1VuaWZvcm1CdWZmZXIpO1xyXG5cclxuXHRcdFx0XHR0aGlzLmxpZ2h0U2hhZGVyRGF0YS5zZXREZWZpbmUoXCJzcG90TGlnaHRTaGFkb3dNYXBzQ291bnRcIiwgc3BvdExpZ2h0V2l0aFNoYWRvd0NvdW50KTtcclxuXHRcdFx0XHR0aGlzLmxpZ2h0U2hhZGVyRGF0YS5zZXREZWZpbmUoXCJwb2ludExpZ2h0U2hhZG93TWFwc0NvdW50XCIsIHBvaW50TGlnaHRXaXRoU2hhZG93Q291bnQpO1xyXG5cdFx0XHRcdHRoaXMubGlnaHRTaGFkZXJEYXRhLnNldERlZmluZShcImRpcmVjdExpZ2h0U2hhZG93TWFwc0NvdW50XCIsIGRpcmVjdExpZ2h0V2l0aFNoYWRvd0NvdW50KTtcclxuXHJcblx0XHRcdFx0Ly8gdGV4dHVyZSxzYW1wbGVcclxuXHRcdFx0XHRpZiAoc3BvdExpZ2h0U2hhZG93TWFwVGV4dHVyZUFycmF5ICE9PSB1bmRlZmluZWQpIHtcclxuXHRcdFx0XHRcdGlmIChzcG90TGlnaHRTaGFkb3dNYXBUZXh0dXJlQXJyYXkudGV4dHVyZVByb3Auc2l6ZS5kZXB0aCAhPSBzcG90TGlnaHRXaXRoU2hhZG93Q291bnQpXHJcblx0XHRcdFx0XHRcdGNvbnNvbGUud2FybihcInNwb3RMaWdodFNoYWRvd01hcCBhbGlnbiBoYXMgcHJvYmxlbVwiKTtcclxuXHRcdFx0XHRcdHRoaXMubGlnaHRTaGFkZXJEYXRhLnNldFRleHR1cmUoXCJzcG90TGlnaHRTaGFkb3dNYXBUZXh0dXJlQXJyYXlcIiwgc3BvdExpZ2h0U2hhZG93TWFwVGV4dHVyZUFycmF5KTtcclxuXHRcdFx0XHRcdC8vIHRoaXMuX3Rlc3RUZXh0dXJlID0gc3BvdExpZ2h0U2hhZG93TWFwVGV4dHVyZUFycmF5XHJcblx0XHRcdFx0fVxyXG5cdFx0XHRcdGlmIChwb2ludExpZ2h0U2hhZG93TWFwVGV4dHVyZUFycmF5ICE9PSB1bmRlZmluZWQpIHtcclxuXHRcdFx0XHRcdGlmIChwb2ludExpZ2h0U2hhZG93TWFwVGV4dHVyZUFycmF5LnRleHR1cmVQcm9wLnNpemUuZGVwdGggIT0gcG9pbnRMaWdodFdpdGhTaGFkb3dDb3VudClcclxuXHRcdFx0XHRcdFx0Y29uc29sZS53YXJuKFwicG9pbnRMaWdodFNoYWRvd01hcCBhbGlnbiBoYXMgcHJvYmxlbVwiKTtcclxuXHRcdFx0XHRcdHRoaXMubGlnaHRTaGFkZXJEYXRhLnNldFRleHR1cmUoXCJwb2ludExpZ2h0U2hhZG93TWFwVGV4dHVyZUFycmF5XCIsIHBvaW50TGlnaHRTaGFkb3dNYXBUZXh0dXJlQXJyYXkpO1xyXG5cdFx0XHRcdFx0Ly8gdGhpcy5fdGVzdFRleHR1cmUgPSBwb2ludExpZ2h0U2hhZG93TWFwVGV4dHVyZUFycmF5O1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0XHRpZiAoZGlyZWN0TGlnaHRTaGFkb3dNYXBUZXh0dXJlQXJyYXkgIT09IHVuZGVmaW5lZCkge1xyXG5cdFx0XHRcdFx0aWYgKGRpcmVjdExpZ2h0U2hhZG93TWFwVGV4dHVyZUFycmF5LnRleHR1cmVQcm9wLnNpemUuZGVwdGggIT0gZGlyZWN0TGlnaHRXaXRoU2hhZG93Q291bnQpXHJcblx0XHRcdFx0XHRcdGNvbnNvbGUud2FybihcImRpcmVjdExpZ2h0U2hhZG93TWFwIGFsaWduIGhhcyBwcm9ibGVtXCIpO1xyXG5cdFx0XHRcdFx0dGhpcy5saWdodFNoYWRlckRhdGEuc2V0VGV4dHVyZShcclxuXHRcdFx0XHRcdFx0XCJkaXJlY3RMaWdodFNoYWRvd01hcFRleHR1cmVBcnJheVwiLFxyXG5cdFx0XHRcdFx0XHRkaXJlY3RMaWdodFNoYWRvd01hcFRleHR1cmVBcnJheVxyXG5cdFx0XHRcdFx0KTtcclxuXHRcdFx0XHRcdC8vIHRoaXMuX3Rlc3RUZXh0dXJlID0gZGlyZWN0TGlnaHRTaGFkb3dNYXBUZXh0dXJlQXJyYXlcclxuXHRcdFx0XHR9XHJcblx0XHRcdFx0dGhpcy5saWdodFNoYWRlckRhdGEuc2V0U2FtcGxlcihcclxuXHRcdFx0XHRcdFwic2hhZG93U2FtcGxlclwiLFxyXG5cdFx0XHRcdFx0bmV3IFNhbXBsZXIoeyBjb21wYXJlOiBDb21wYXJlRnVuY3Rpb24uTGVzcyB9LCB7IHR5cGU6IFNhbXBsZXJCaW5kaW5nVHlwZS5Db21wYXJpc29uIH0pXHJcblx0XHRcdFx0KTtcclxuXHRcdFx0XHQvLyB0aGlzLmxpZ2h0U2hhZGVyRGF0YS5zZXRTYW1wbGVyKFwic2hhZG93U2FtcGxlclwiLCBuZXcgU2FtcGxlcigpKTtcclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cclxuXHRcdHRoaXMubGlnaHRTaGFkZXJEYXRhLnNldFVuaWZvcm1CdWZmZXIoXCJsaWdodFwiLCB0aGlzLmxpZ2h0VW5pZm9ybUJ1ZmZlcik7XHJcblx0fVxyXG5cclxuXHRwdWJsaWMgZ2V0QWxsTGlnaHRzKCk6IEFycmF5PExpZ2h0PiB7XHJcblx0XHRjb25zdCByZXN1bHQgPSBbXTtcclxuXHRcdHJldHVybiByZXN1bHQuY29uY2F0KHRoaXMuc3BvdExpZ2h0cywgdGhpcy5wb2ludExpZ2h0cywgdGhpcy5kaXJlY3RMaWdodHMpO1xyXG5cdH1cclxuXHJcblx0ZGVzdHJveSgpIHtcclxuXHRcdHRoaXMubGlnaHRTaGFkZXJEYXRhLmRlc3Ryb3koKTtcclxuXHRcdHRoaXMubGlnaHRVbmlmb3JtQnVmZmVyLmRlc3Ryb3koKTtcclxuXHR9XHJcblxyXG5cdGNyZWF0ZVNoYWRvd01hcFRleHR1cmVBcnJheShsaWdodHM6IEFycmF5PExpZ2h0Pikge1xyXG5cdFx0aWYgKGxpZ2h0cy5sZW5ndGggPD0gMCkgcmV0dXJuIHVuZGVmaW5lZDtcclxuXHRcdGNvbnN0IHNoYWRvd01hcFNvdXJjZXMgPSBbXTtcclxuXHRcdGZvciAobGV0IGkgPSAwOyBpIDwgbGlnaHRzLmxlbmd0aDsgaSsrKSB7XHJcblx0XHRcdGNvbnN0IGxpZ2h0ID0gbGlnaHRzW2ldO1xyXG5cdFx0XHRpZiAobGlnaHQuc2hhZG93KSB7XHJcblx0XHRcdFx0Y29uc3Qgc2hhZG93TWFwVGV4dHVyZSA9IGxpZ2h0LnNoYWRvdy5nZXRTaGFkb3dNYXBUZXh0dXJlKCk7XHJcblx0XHRcdFx0Y29uc3Qgc2hhZG93TWFwU291cmNlID0ge1xyXG5cdFx0XHRcdFx0c291cmNlOiBzaGFkb3dNYXBUZXh0dXJlLFxyXG5cdFx0XHRcdFx0d2lkdGg6IHNoYWRvd01hcFRleHR1cmUudGV4dHVyZVByb3Auc2l6ZS53aWR0aCxcclxuXHRcdFx0XHRcdGhlaWdodDogc2hhZG93TWFwVGV4dHVyZS50ZXh0dXJlUHJvcC5zaXplLmhlaWdodCxcclxuXHRcdFx0XHRcdGRlcHRoOiAxLFxyXG5cdFx0XHRcdFx0eDogMCxcclxuXHRcdFx0XHRcdHk6IDAsXHJcblx0XHRcdFx0XHR6OiBpXHJcblx0XHRcdFx0fTtcclxuXHRcdFx0XHRzaGFkb3dNYXBTb3VyY2VzLnB1c2goc2hhZG93TWFwU291cmNlKTtcclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cclxuXHRcdGlmIChzaGFkb3dNYXBTb3VyY2VzLmxlbmd0aCA8PSAwKSByZXR1cm4gdW5kZWZpbmVkO1xyXG5cclxuXHRcdGNvbnN0IHNoYWRvd01hcFRleHR1cmVBcnJheSA9IG5ldyBUZXh0dXJlKHtcclxuXHRcdFx0c2l6ZToge1xyXG5cdFx0XHRcdHdpZHRoOiBzaGFkb3dNYXBTb3VyY2VzWzBdLndpZHRoLFxyXG5cdFx0XHRcdGhlaWdodDogc2hhZG93TWFwU291cmNlc1swXS5oZWlnaHQsXHJcblx0XHRcdFx0ZGVwdGg6IHNoYWRvd01hcFNvdXJjZXMubGVuZ3RoXHJcblx0XHRcdH0sXHJcblx0XHRcdGZpeGVkU2l6ZTogdHJ1ZSxcclxuXHRcdFx0c2FtcGxlVHlwZTogVGV4dHVyZVNhbXBsZVR5cGUuRGVwdGgsXHJcblx0XHRcdGZvcm1hdDogVGV4dHVyZUZvcm1hdC5EZXB0aDI0UGx1cyxcclxuXHRcdFx0dXNhZ2U6IFRleHR1cmVVc2FnZS5UZXh0dXJlQmluZGluZyB8IFRleHR1cmVVc2FnZS5Db3B5RHN0LFxyXG5cdFx0XHRkYXRhOiBzaGFkb3dNYXBTb3VyY2VzLFxyXG5cdFx0XHR2aWV3Rm9ybWF0czogVGV4dHVyZVZpZXdEaW1lbnNpb24uRTJkQXJyYXlcclxuXHRcdH0pO1xyXG5cclxuXHRcdHJldHVybiBzaGFkb3dNYXBUZXh0dXJlQXJyYXk7XHJcblx0fVxyXG5cclxuXHRzZXRTaGFkb3dVbmlmb3JtKHVuaWZvcm1OYW1lOiBzdHJpbmcsIGxpZ2h0czogQXJyYXk8TGlnaHQ+LCB1bmlmb3JtVHlwZTogVW5pZm9ybUVudW0pIHtcclxuXHRcdGlmIChsaWdodHMubGVuZ3RoKSB7XHJcblx0XHRcdGNvbnN0IGxpZ2h0V2l0aFNoYWRvd0FycmF5ID0gW107XHJcblx0XHRcdGZvciAobGV0IGkgPSAwOyBpIDwgbGlnaHRzLmxlbmd0aDsgaSsrKSB7XHJcblx0XHRcdFx0Y29uc3QgbGlnaHQgPSBsaWdodHNbaV07XHJcblx0XHRcdFx0aWYgKCFsaWdodC5zaGFkb3cpIGNvbnRpbnVlO1xyXG5cdFx0XHRcdGxpZ2h0V2l0aFNoYWRvd0FycmF5LnB1c2gobGlnaHQpO1xyXG5cdFx0XHR9XHJcblxyXG5cdFx0XHR0aGlzLnNoYWRvd1VuaWZvcm1CdWZmZXIuc2V0VW5pZm9ybShcclxuXHRcdFx0XHR1bmlmb3JtTmFtZSxcclxuXHRcdFx0XHQoKSA9PiB7XHJcblx0XHRcdFx0XHRyZXR1cm4gbGlnaHRXaXRoU2hhZG93QXJyYXk7XHJcblx0XHRcdFx0fSxcclxuXHRcdFx0XHR1bmlmb3JtVHlwZSxcclxuXHRcdFx0XHRsaWdodFdpdGhTaGFkb3dBcnJheS5sZW5ndGhcclxuXHRcdFx0KTtcclxuXHJcblx0XHRcdHJldHVybiBsaWdodFdpdGhTaGFkb3dBcnJheS5sZW5ndGg7XHJcblx0XHR9XHJcblx0fVxyXG59XHJcbiIsImltcG9ydCBDYW1lcmEgZnJvbSBcIi4uL2NhbWVyYS9DYW1lcmFcIjtcclxuaW1wb3J0IHsgTWVzaCB9IGZyb20gXCIuLi9tZXNoL01lc2hcIjtcclxuaW1wb3J0IHsgRnJhbWVTdGF0ZSB9IGZyb20gXCIuL0ZyYW1lU3RhdGVcIjtcclxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgTWVzaE1hbmdlciB7XHJcblx0cHJpdmF0ZSBfbGlzdDogTWFwPHN0cmluZyB8IG51bWJlciwgTWVzaD47XHJcblx0Y29uc3RydWN0b3IoKSB7XHJcblx0XHR0aGlzLl9saXN0ID0gbmV3IE1hcCgpO1xyXG5cdH1cclxuXHRnZXQgbGVuZ3RoKCkge1xyXG5cdFx0cmV0dXJuIHRoaXMuX2xpc3Quc2l6ZTtcclxuXHR9XHJcblx0dXBkYXRlKGZyYW1lU3RhdGU6IEZyYW1lU3RhdGUsIGNhbWVyYTogQ2FtZXJhKTogdm9pZCB7XHJcblx0XHR0aGlzLl9saXN0LmZvckVhY2goKGluc3RhbmNlKSA9PiB7XHJcblx0XHRcdGluc3RhbmNlLnVwZGF0ZShmcmFtZVN0YXRlLCBjYW1lcmEpO1xyXG5cdFx0fSk7XHJcblx0fVxyXG5cdGFkZChpbnN0YW5jZTogTWVzaCk6IE1lc2gge1xyXG5cdFx0aWYgKHRoaXMuX2xpc3QuZ2V0KGluc3RhbmNlLnVpZCkpIHJldHVybiB0aGlzLl9saXN0LmdldChpbnN0YW5jZS51aWQpO1xyXG5cdFx0dGhpcy5fbGlzdC5zZXQoaW5zdGFuY2UudWlkLCBpbnN0YW5jZSk7XHJcblx0XHRyZXR1cm4gaW5zdGFuY2U7XHJcblx0fVxyXG5cdHJlbW92ZShpbnN0YW5jZTogTWVzaCk6IGJvb2xlYW4ge1xyXG5cdFx0aWYgKHRoaXMuX2xpc3QuZ2V0KGluc3RhbmNlLnVpZCkpIHtcclxuXHRcdFx0aW5zdGFuY2UuZGVzdHJveSgpO1xyXG5cdFx0XHR0aGlzLl9saXN0LmRlbGV0ZShpbnN0YW5jZS51aWQpO1xyXG5cdFx0XHRyZXR1cm4gdHJ1ZTtcclxuXHRcdH1cclxuXHRcdHJldHVybiBmYWxzZTtcclxuXHR9XHJcblx0Y29udGFpbnMoaW5zdGFuY2U6IE1lc2gpIHtcclxuXHRcdHJldHVybiAhIXRoaXMuX2xpc3QuZ2V0KGluc3RhbmNlLnVpZCk7XHJcblx0fVxyXG59XHJcbiIsImltcG9ydCB7IFRleHR1cmVGb3JtYXQsIFRleHR1cmVVc2FnZSB9IGZyb20gXCIuLi9jb3JlL1dlYkdQVUNvbnN0YW50XCI7XHJcbmltcG9ydCBHZW9tZXRyeSBmcm9tIFwiLi4vZ2VvbWV0cnkvR2VvbWV0cnlcIjtcclxuaW1wb3J0IFNoYWRlck1hdGVyaWFsIGZyb20gXCIuLi9tYXRlcmlhbC9TaGFkZXJNYXRlcmlhbFwiO1xyXG5pbXBvcnQgeyBNZXNoIH0gZnJvbSBcIi4uL21lc2gvTWVzaFwiO1xyXG5pbXBvcnQgQXR0YWNobWVudCBmcm9tIFwiLi4vcmVuZGVyL0F0dGFjaG1lbnRcIjtcclxuaW1wb3J0IHsgRmxvYXQzMkF0dHJpYnV0ZSB9IGZyb20gXCIuLi9yZW5kZXIvQXR0cmlidXRlXCI7XHJcbmltcG9ydCBDb250ZXh0IGZyb20gXCIuLi9yZW5kZXIvQ29udGV4dFwiO1xyXG5pbXBvcnQgUmVuZGVyVGFyZ2V0IGZyb20gXCIuLi9yZW5kZXIvUmVuZGVyVGFyZ2V0XCI7XHJcbmltcG9ydCBTYW1wbGVyIGZyb20gXCIuLi9yZW5kZXIvU2FtcGxlclwiO1xyXG5pbXBvcnQgVGV4dHVyZSBmcm9tIFwiLi4vcmVuZGVyL1RleHR1cmVcIjtcclxuaW1wb3J0IGdldFZlcnRGcmFnIGZyb20gXCIuLi9zaGFkZXIvU2hhZGVyc1wiO1xyXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBSZXNvbHZlRnJhbWUge1xyXG5cdGNhbnZhc1JlbmRlclRhcmdldDogUmVuZGVyVGFyZ2V0O1xyXG5cdG1hdGVyaWFsOiBTaGFkZXJNYXRlcmlhbDtcclxuXHRnZW9tZXRyeTogR2VvbWV0cnk7XHJcblx0cXVhZE1lc2g6IE1lc2g7XHJcblx0Y29uc3RydWN0b3IoKSB7XHJcblx0XHR0aGlzLmdlb21ldHJ5ID0gbmV3IEdlb21ldHJ5KHt9KTtcclxuXHRcdHRoaXMuZ2VvbWV0cnkuc2V0QXR0cmlidXRlKFxyXG5cdFx0XHRuZXcgRmxvYXQzMkF0dHJpYnV0ZShcInBvc2l0aW9uXCIsIFstMS4wLCAxLjAsIC0xLjAsIC0xLjAsIDEuMCwgLTEuMCwgMS4wLCAtMS4wLCAxLjAsIDEuMCwgLTEuMCwgMS4wXSwgMilcclxuXHRcdCk7XHJcblx0XHR0aGlzLmdlb21ldHJ5LmNvdW50ID0gNjtcclxuXHRcdGNvbnN0IHNoYWRlciA9IGdldFZlcnRGcmFnKFwicmVzb2x2ZVwiLCB7IHBvc2l0aW9uTG9jYXRpb246IDAgfSk7XHJcblx0XHR0aGlzLm1hdGVyaWFsID0gbmV3IFNoYWRlck1hdGVyaWFsKHtcclxuXHRcdFx0dHlwZTogXCJyZXNvbHZlXCIsXHJcblx0XHRcdGZyYWc6IHNoYWRlci5mcmFnLFxyXG5cdFx0XHR2ZXJ0OiBzaGFkZXIudmVydCxcclxuXHRcdFx0dW5pZm9ybXM6IHtcclxuXHRcdFx0XHR0ZXh0dXJlOiB7XHJcblx0XHRcdFx0XHR0eXBlOiBcInRleHR1cmVcIixcclxuXHRcdFx0XHRcdHZhbHVlOiB1bmRlZmluZWRcclxuXHRcdFx0XHR9LFxyXG5cdFx0XHRcdHNhbXBsZXI6IHtcclxuXHRcdFx0XHRcdHR5cGU6IFwic2FtcGxlclwiLFxyXG5cdFx0XHRcdFx0dmFsdWU6IG5ldyBTYW1wbGVyKHtcclxuXHRcdFx0XHRcdFx0bWFnRmlsdGVyOiBcImxpbmVhclwiLFxyXG5cdFx0XHRcdFx0XHRtaW5GaWx0ZXI6IFwibGluZWFyXCJcclxuXHRcdFx0XHRcdH0pXHJcblx0XHRcdFx0fVxyXG5cdFx0XHR9XHJcblx0XHR9KTtcclxuXHRcdHRoaXMucXVhZE1lc2ggPSBuZXcgTWVzaCh0aGlzLmdlb21ldHJ5LCB0aGlzLm1hdGVyaWFsKTtcclxuXHR9XHJcblx0c2V0U2l6ZSh3aWR0aDogbnVtYmVyLCBoZWlnaHQ6IG51bWJlcikge1xyXG5cdFx0dGhpcy5jYW52YXNSZW5kZXJUYXJnZXQuc2V0U2l6ZSh3aWR0aCwgaGVpZ2h0KTtcclxuXHRcdHRoaXMubWF0ZXJpYWwuZGlydHkgPSB0cnVlO1xyXG5cdH1cclxuXHRyZW5kZXIoY29udGV4dDogQ29udGV4dCwgY29sb3JUZXh0dXJlPzogVGV4dHVyZSkge1xyXG5cdFx0aWYgKCF0aGlzLmNhbnZhc1JlbmRlclRhcmdldCkgdGhpcy5pbml0UmVuZGVyVGFyZ2V0KGNvbnRleHQpO1xyXG5cdFx0Ly8gdGhpcy5tYXRlcmlhbFxyXG5cdFx0dGhpcy5tYXRlcmlhbC51bmlmb3Jtcy50ZXh0dXJlLnZhbHVlID0gY29sb3JUZXh0dXJlO1xyXG5cclxuXHRcdHRoaXMubWF0ZXJpYWwudXBkYXRlKHVuZGVmaW5lZCwgdGhpcy5xdWFkTWVzaCk7XHJcblxyXG5cdFx0Y29uc3QgZHJhd0NvbWFuZCA9IHRoaXMucXVhZE1lc2guZ2V0RHJhd0NvbW1hbmQoKTtcclxuXHJcblx0XHRjb25zdCBjdXJyZW50UmVuZGVyUGFzc0VuY29kZXIgPSB0aGlzLmNhbnZhc1JlbmRlclRhcmdldC5iZWdpblJlbmRlclBhc3MoY29udGV4dC5kZXZpY2UpO1xyXG5cclxuXHRcdGRyYXdDb21hbmQucmVuZGVyKHsgZGV2aWNlOiBjb250ZXh0LmRldmljZSwgcGFzc0VuY29kZXI6IGN1cnJlbnRSZW5kZXJQYXNzRW5jb2RlciB9KTtcclxuXHJcblx0XHR0aGlzLmNhbnZhc1JlbmRlclRhcmdldC5lbmRSZW5kZXJQYXNzKCk7XHJcblx0fVxyXG5cdHByaXZhdGUgaW5pdFJlbmRlclRhcmdldChjb250ZXh0OiBDb250ZXh0KSB7XHJcblx0XHRjb25zdCB7IHdpZHRoLCBoZWlnaHQsIGRlcHRoIH0gPSBjb250ZXh0LnByZXNlbnRhdGlvblNpemU7XHJcblx0XHRjb25zdCBjb2xvckF0dGFjaG1lbnQgPSBuZXcgQXR0YWNobWVudChcclxuXHRcdFx0eyByOiAwLjAsIGc6IDAuMCwgYjogMC4wLCBhOiAwIH0sXHJcblx0XHRcdHtcclxuXHRcdFx0XHR0ZXh0dXJlVmlldzogKCkgPT4ge1xyXG5cdFx0XHRcdFx0cmV0dXJuIGNvbnRleHQuY29udGV4dC5nZXRDdXJyZW50VGV4dHVyZSgpLmNyZWF0ZVZpZXcoKTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdH1cclxuXHRcdCk7XHJcblx0XHRjb25zdCBkZXB0aFRleHR1cmUgPSBuZXcgVGV4dHVyZSh7XHJcblx0XHRcdGxhYmVsOiBcInJlc29sdmVEZXB0aFwiLFxyXG5cdFx0XHRzaXplOiB7IHdpZHRoLCBoZWlnaHQsIGRlcHRoIH0sXHJcblx0XHRcdGZvcm1hdDogVGV4dHVyZUZvcm1hdC5EZXB0aDI0UGx1cyxcclxuXHRcdFx0dXNhZ2U6IFRleHR1cmVVc2FnZS5SZW5kZXJBdHRhY2htZW50XHJcblx0XHR9KTtcclxuXHRcdGNvbnN0IGRlcHRoQXR0YWNobWVudCA9IG5ldyBBdHRhY2htZW50KDEuMCwgeyB0ZXh0dXJlOiBkZXB0aFRleHR1cmUgfSk7XHJcblx0XHR0aGlzLmNhbnZhc1JlbmRlclRhcmdldCA9IG5ldyBSZW5kZXJUYXJnZXQoXCJyZW5kZXJcIiwgW2NvbG9yQXR0YWNobWVudF0sIGRlcHRoQXR0YWNobWVudCk7XHJcblx0fVxyXG59XHJcbiIsImltcG9ydCBDb250ZXh0IGZyb20gXCIuLi9yZW5kZXIvQ29udGV4dFwiO1xyXG5pbXBvcnQgVGV4dHVyZSBmcm9tIFwiLi4vcmVuZGVyL1RleHR1cmVcIjtcclxuaW1wb3J0IFBvc3RFZmZlY3QgZnJvbSBcIi4vUG9zdEVmZmVjdFwiO1xyXG5pbXBvcnQgUmVzb2x2ZUZyYW1lIGZyb20gXCIuL1Jlc29sdmVGcmFtZVwiO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgUG9zdEVmZmVjdENvbGxlY3Rpb24ge1xyXG5cdHByaXZhdGUgX3Bvc3RFZmZlY3RzOiBNYXA8c3RyaW5nLCBQb3N0RWZmZWN0PjtcclxuXHRwdWJsaWMgY3VycmVudENvbG9yVGV4dHVyZTogVGV4dHVyZTtcclxuXHRwcml2YXRlIHJlc29sdmVGcmFtZTogUmVzb2x2ZUZyYW1lO1xyXG5cdGNvbnN0cnVjdG9yKCkge1xyXG5cdFx0dGhpcy5fcG9zdEVmZmVjdHMgPSBuZXcgTWFwKCk7XHJcblx0XHR0aGlzLmN1cnJlbnRDb2xvclRleHR1cmUgPSB1bmRlZmluZWQ7XHJcblx0XHR0aGlzLnJlc29sdmVGcmFtZSA9IG5ldyBSZXNvbHZlRnJhbWUoKTtcclxuXHR9XHJcblx0YWRkKHBvc3RFZmZlY3Q6IFBvc3RFZmZlY3QpIHtcclxuXHRcdHRoaXMuX3Bvc3RFZmZlY3RzLnNldChwb3N0RWZmZWN0LmlkLCBwb3N0RWZmZWN0KTtcclxuXHR9XHJcblx0cmVtb3ZlKHBvc3RFZmZlY3Q6IFBvc3RFZmZlY3QpIHtcclxuXHRcdHRoaXMuX3Bvc3RFZmZlY3RzLmRlbGV0ZShwb3N0RWZmZWN0LmlkKTtcclxuXHRcdHBvc3RFZmZlY3QuZGVzdHJveSgpO1xyXG5cdH1cclxuXHRyZW5kZXIoY29udGV4dDogQ29udGV4dCwgY29sb3JUZXh0dXJlOiBUZXh0dXJlKTogdm9pZCB7XHJcblx0XHR0aGlzLmN1cnJlbnRDb2xvclRleHR1cmUgPSBjb2xvclRleHR1cmU7XHJcblx0XHR0aGlzLl9wb3N0RWZmZWN0cy5mb3JFYWNoKChwb3N0RWZmZWN0KSA9PiB7XHJcblx0XHRcdHRoaXMuY3VycmVudENvbG9yVGV4dHVyZSA9IHBvc3RFZmZlY3QucmVuZGVyKGNvbnRleHQsIHRoaXMuY3VycmVudENvbG9yVGV4dHVyZSk7XHJcblx0XHR9KTtcclxuXHRcdHRoaXMucmVzb2x2ZUZyYW1lLnJlbmRlcihjb250ZXh0LCB0aGlzLmN1cnJlbnRDb2xvclRleHR1cmUpO1xyXG5cdH1cclxuXHRzZXRTaXplKHdpZHRoOiBudW1iZXIsIGhlaWdodDogbnVtYmVyKSB7XHJcblx0XHR0aGlzLl9wb3N0RWZmZWN0cy5mb3JFYWNoKChwb3N0RWZmZWN0KSA9PiBwb3N0RWZmZWN0LnNldFNpemUod2lkdGgsIGhlaWdodCkpO1xyXG5cdFx0dGhpcy5yZXNvbHZlRnJhbWUuc2V0U2l6ZSh3aWR0aCwgaGVpZ2h0KTtcclxuXHR9XHJcblx0cHJpdmF0ZSBwb3N0RWZmZWN0c1NvcnQoKSB7XHJcblx0XHQvLyB0aGlzLl9wb3N0RWZmZWN0cy5zb3J0KClcclxuXHR9XHJcbn1cclxuIiwiaW1wb3J0IHsgRnJhbWVTdGF0ZSB9IGZyb20gXCIuLi9jb3JlL0ZyYW1lU3RhdGUuanNcIjtcclxuaW1wb3J0IHsgTWF0ZXJpYWwgfSBmcm9tIFwiLi4vbWF0ZXJpYWwvTWF0ZXJpYWwuanNcIjtcclxuaW1wb3J0IENvbnRleHQgZnJvbSBcIi4uL3JlbmRlci9Db250ZXh0LmpzXCI7XHJcbmltcG9ydCB7IFRhcmdldCB9IGZyb20gXCIuLi9yZW5kZXIvUmVuZGVyU3RhdGVcIjtcclxuaW1wb3J0IFJlbmRlclRhcmdldCBmcm9tIFwiLi4vcmVuZGVyL1JlbmRlclRhcmdldC5qc1wiO1xyXG5pbXBvcnQgVGV4dHVyZSBmcm9tIFwiLi4vcmVuZGVyL1RleHR1cmUuanNcIjtcclxuXHJcbmNsYXNzIFBhc3Mge1xyXG5cdHB1YmxpYyByZW5kZXJUYXJnZXQ6IFJlbmRlclRhcmdldDtcclxuXHRwdWJsaWMgY29tcHV0ZVRhcmdldDogUmVuZGVyVGFyZ2V0O1xyXG5cdHB1YmxpYyBjb250ZXh0OiBDb250ZXh0O1xyXG5cdHB1YmxpYyBvdmVycmlkZU1hdGVyaWFsPzogTWF0ZXJpYWw7XHJcblx0cHVibGljIGNvbG9yVGFyZ2V0cz86IEFycmF5PFRhcmdldD47XHJcblx0cHVibGljIHBhc3NSZW5kZXJFbmNvZGVyOiBHUFVSZW5kZXJQYXNzRW5jb2RlciB8IG51bGw7XHJcblx0cHVibGljIHBhc3NDb21wdXRlRW5jb2RlcjogR1BVQ29tcHV0ZVBhc3NFbmNvZGVyO1xyXG5cdGNvbnN0cnVjdG9yKGNvbnRleHQ6IENvbnRleHQpIHtcclxuXHRcdHRoaXMuY29udGV4dCA9IGNvbnRleHQ7XHJcblx0fVxyXG5cdHVwZGF0ZShmcmFtZVN0YXRlOiBGcmFtZVN0YXRlKTogdm9pZCB7XHJcblx0XHQvLyB0b2RvO1xyXG5cdH1cclxuXHRzZXRTaXplKHdpZHRoOiBudW1iZXIsIGhlaWdodDogbnVtYmVyKTogdm9pZCB7XHJcblx0XHQvLyB0b2RvIDtcclxuXHR9XHJcblx0YmVmb3JlUmVuZGVyKG9wdGlvbnM/OiBhbnkpIHtcclxuXHRcdHRoaXMucGFzc1JlbmRlckVuY29kZXIgPSB0aGlzLnJlbmRlclRhcmdldC5iZWdpblJlbmRlclBhc3ModGhpcy5jb250ZXh0LmRldmljZSk7XHJcblx0XHRpZiAodGhpcy5jb21wdXRlVGFyZ2V0KVxyXG5cdFx0XHR0aGlzLnBhc3NDb21wdXRlRW5jb2RlciA9IHRoaXMuY29tcHV0ZVRhcmdldC5iZWdpbkNvbXB1dGVQYXNzRW5jb2Rlcih0aGlzLmNvbnRleHQuZGV2aWNlKTtcclxuXHR9XHJcblx0Z2V0Q29sb3JUZXh0dXJlKGluZGV4ID0gMCk6IFRleHR1cmUge1xyXG5cdFx0cmV0dXJuIHRoaXMucmVuZGVyVGFyZ2V0LmdldENvbG9yVGV4dHVyZShpbmRleCkgYXMgVGV4dHVyZTtcclxuXHR9XHJcblx0Z2V0RGVwdGhUZXh0dXJlKCk6IFRleHR1cmUgfCB7IGdwdVRleHR1cmU6IEdQVVRleHR1cmUgfSB7XHJcblx0XHRyZXR1cm4gdGhpcy5yZW5kZXJUYXJnZXQuZ2V0RGVwdGhUZXh0dXJlKCk7XHJcblx0fVxyXG5cdGFmdGVyUmVuZGVyKCkge1xyXG5cdFx0dGhpcy5yZW5kZXJUYXJnZXQuZW5kUmVuZGVyUGFzcygpO1xyXG5cdFx0aWYgKHRoaXMuY29tcHV0ZVRhcmdldCkgdGhpcy5jb21wdXRlVGFyZ2V0LmVuZENvbXB1dGVQYXNzRW5jb2RlcigpO1xyXG5cdH1cclxufVxyXG5cclxuZXhwb3J0IGRlZmF1bHQgUGFzcztcclxuIiwiaW1wb3J0IENhbWVyYSBmcm9tIFwiLi4vY2FtZXJhL0NhbWVyYVwiO1xyXG5pbXBvcnQgeyBGcmFtZVN0YXRlIH0gZnJvbSBcIi4uL2NvcmUvRnJhbWVTdGF0ZVwiO1xyXG5pbXBvcnQgeyBUZXh0dXJlRm9ybWF0LCBUZXh0dXJlVXNhZ2UgfSBmcm9tIFwiLi4vY29yZS9XZWJHUFVDb25zdGFudFwiO1xyXG5pbXBvcnQgQ29sb3IgZnJvbSBcIi4uL21hdGgvQ29sb3JcIjtcclxuaW1wb3J0IEF0dGFjaG1lbnQgZnJvbSBcIi4uL3JlbmRlci9BdHRhY2htZW50XCI7XHJcbmltcG9ydCBDb250ZXh0IGZyb20gXCIuLi9yZW5kZXIvQ29udGV4dFwiO1xyXG5pbXBvcnQgRHJhd0NvbW1hbmQgZnJvbSBcIi4uL3JlbmRlci9EcmF3Q29tbWFuZFwiO1xyXG5pbXBvcnQgUmVuZGVyVGFyZ2V0IGZyb20gXCIuLi9yZW5kZXIvUmVuZGVyVGFyZ2V0XCI7XHJcbmltcG9ydCBUZXh0dXJlIGZyb20gXCIuLi9yZW5kZXIvVGV4dHVyZVwiO1xyXG5pbXBvcnQgUGFzcyBmcm9tIFwiLi9QYXNzXCI7XHJcblxyXG5leHBvcnQgY2xhc3MgQmFzaWNQYXNzIGV4dGVuZHMgUGFzcyB7XHJcblx0c2t5Ym94RHJhd0NvbWFuZDogRHJhd0NvbW1hbmQ7XHJcblx0Y29uc3RydWN0b3IoY29udGV4dDogQ29udGV4dCkge1xyXG5cdFx0c3VwZXIoY29udGV4dCk7XHJcblx0XHR0aGlzLmluaXQoY29udGV4dCk7XHJcblx0fVxyXG5cclxuXHRiZWZvcmVSZW5kZXIoZnJhbWVTdGF0ZTogRnJhbWVTdGF0ZSkge1xyXG5cdFx0dGhpcy51cGRhdGVSZW5kZXJUYXJnZXQoZnJhbWVTdGF0ZSk7XHJcblxyXG5cdFx0c3VwZXIuYmVmb3JlUmVuZGVyKCk7XHJcblx0fVxyXG5cclxuXHRyZW5kZXIoZnJhbWVTdGF0ZTogRnJhbWVTdGF0ZSwgY2FtZXJhPzogQ2FtZXJhKSB7XHJcblx0XHRjb25zdCB7IHJlbmRlclF1ZXVlLCBsaWdodE1hbmdlciB9ID0gZnJhbWVTdGF0ZTtcclxuXHJcblx0XHRyZW5kZXJRdWV1ZS5zb3J0KCk7XHJcblx0XHRyZW5kZXJRdWV1ZS5wcmVSZW5kZXIoY2FtZXJhLCB0aGlzLmNvbnRleHQsIHRoaXMucGFzc1JlbmRlckVuY29kZXIpO1xyXG5cdFx0cmVuZGVyUXVldWUudHJhbnNwYXJlbnRSZW5kZXIoY2FtZXJhLCB0aGlzLmNvbnRleHQsIHRoaXMucGFzc1JlbmRlckVuY29kZXIsIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCBsaWdodE1hbmdlcik7XHJcblx0XHRyZW5kZXJRdWV1ZS5vcGFxdWVSZW5kZXIoY2FtZXJhLCB0aGlzLmNvbnRleHQsIHRoaXMucGFzc1JlbmRlckVuY29kZXIsIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCBsaWdodE1hbmdlcik7XHJcblx0XHRyZW5kZXJRdWV1ZS5kZWJ1Z1F1ZXVlUmVuZGVyKGNhbWVyYSwgdGhpcy5jb250ZXh0LCB0aGlzLnBhc3NSZW5kZXJFbmNvZGVyKTtcclxuXHR9XHJcblx0cHJpdmF0ZSBpbml0KGNvbnRleHQ6IENvbnRleHQpIHtcclxuXHRcdHRoaXMuY3JlYXRlUmVuZGVyVGFyZ2V0KGNvbnRleHQpO1xyXG5cdH1cclxuXHRwcml2YXRlIGNyZWF0ZVJlbmRlclRhcmdldChjb250ZXh0OiBDb250ZXh0KSB7XHJcblx0XHRjb25zdCB7IHdpZHRoLCBoZWlnaHQsIGRlcHRoIH0gPSBjb250ZXh0LnByZXNlbnRhdGlvblNpemU7XHJcblx0XHRjb25zdCBjb2xvclRleHR1cmUgPSBuZXcgVGV4dHVyZSh7XHJcblx0XHRcdGxhYmVsOiBcImJhc2ljUGFzc0NvbG9yXCIsXHJcblx0XHRcdHNpemU6IHsgd2lkdGgsIGhlaWdodCwgZGVwdGggfSxcclxuXHRcdFx0Zm9ybWF0OiB0aGlzLmNvbnRleHQucHJlc2VudGF0aW9uRm9ybWF0LFxyXG5cdFx0XHR1c2FnZTogVGV4dHVyZVVzYWdlLlJlbmRlckF0dGFjaG1lbnQgfCBUZXh0dXJlVXNhZ2UuVGV4dHVyZUJpbmRpbmdcclxuXHRcdH0pO1xyXG5cdFx0Y29uc3QgZGVwdGhUZXh0dXJlID0gbmV3IFRleHR1cmUoe1xyXG5cdFx0XHRsYWJlbDogXCJiYXNpY1Bhc3NEZXB0aFwiLFxyXG5cdFx0XHRzaXplOiB7IHdpZHRoLCBoZWlnaHQsIGRlcHRoIH0sXHJcblx0XHRcdGZvcm1hdDogVGV4dHVyZUZvcm1hdC5EZXB0aDI0UGx1cyxcclxuXHRcdFx0dXNhZ2U6IFRleHR1cmVVc2FnZS5SZW5kZXJBdHRhY2htZW50XHJcblx0XHR9KTtcclxuXHRcdGNvbnN0IGNvbG9yQXR0YWNobWVudCA9IG5ldyBBdHRhY2htZW50KHsgcjogMC4wLCBnOiAwLjAsIGI6IDAuMCwgYTogMC4wIH0sIHsgdGV4dHVyZTogY29sb3JUZXh0dXJlIH0pO1xyXG5cdFx0Y29uc3QgZGVwdGhBdHRhY2htZW50ID0gbmV3IEF0dGFjaG1lbnQoMS4wLCB7IHRleHR1cmU6IGRlcHRoVGV4dHVyZSB9KTtcclxuXHRcdHRoaXMucmVuZGVyVGFyZ2V0ID0gbmV3IFJlbmRlclRhcmdldChcInJlbmRlclwiLCBbY29sb3JBdHRhY2htZW50XSwgZGVwdGhBdHRhY2htZW50KTtcclxuXHR9XHJcblx0cHVibGljIHNldFNpemUod2lkdGg6IG51bWJlciwgaGVpZ2h0OiBudW1iZXIpOiB2b2lkIHtcclxuXHRcdHRoaXMucmVuZGVyVGFyZ2V0LnNldFNpemUod2lkdGgsIGhlaWdodCwgMSk7XHJcblx0fVxyXG5cdHByaXZhdGUgdXBkYXRlUmVuZGVyVGFyZ2V0KGZyYW1lU3RhdGU6IEZyYW1lU3RhdGUpIHtcclxuXHRcdGlmIChmcmFtZVN0YXRlPy5iYWNrZ3JvdW5kPy52YWx1ZSBpbnN0YW5jZW9mIENvbG9yKSB7XHJcblx0XHRcdGNvbnN0IHsgcmVkLCBncmVlbiwgYmx1ZSB9ID0gZnJhbWVTdGF0ZS5iYWNrZ3JvdW5kLnZhbHVlO1xyXG5cdFx0XHRjb25zdCBvcGFjaXR5ID0gZnJhbWVTdGF0ZS5iYWNrZ3JvdW5kPy5vcGFjaXR5O1xyXG5cdFx0XHRjb25zdCBjbGVhclZhbHVlID0ge1xyXG5cdFx0XHRcdHI6IHJlZCxcclxuXHRcdFx0XHRnOiBncmVlbixcclxuXHRcdFx0XHRiOiBibHVlLFxyXG5cdFx0XHRcdGE6IG9wYWNpdHkgPz8gMS4wXHJcblx0XHRcdH07XHJcblx0XHRcdHRoaXMucmVuZGVyVGFyZ2V0LmNvbG9yQXR0YWNobWVudHNbMF0udmFsdWUgPSBjbGVhclZhbHVlO1xyXG5cdFx0fVxyXG5cdH1cclxufVxyXG4iLCJpbXBvcnQgZGVmaW5lZCBmcm9tIFwiLi4vdXRpbHMvZGVmaW5lZFwiO1xyXG5pbXBvcnQgR01hdGggZnJvbSBcIi4vTWF0aFwiO1xyXG5pbXBvcnQgTWF0cml4NCBmcm9tIFwiLi9NYXRyaXg0XCI7XHJcbmltcG9ydCBWZWN0b3IzIGZyb20gXCIuL1ZlY3RvcjNcIjtcclxuaW1wb3J0IFZlY3RvcjQgZnJvbSBcIi4vVmVjdG9yNFwiO1xyXG5cclxuLyoqXHJcbiAqIEEgcGxhbmUgaW4gSGVzc2lhbiBOb3JtYWwgRm9ybSBkZWZpbmVkIGJ5XHJcbiAqIDxwcmU+XHJcbiAqIGF4ICsgYnkgKyBjeiArIGQgPSAwXHJcbiAqIDwvcHJlPlxyXG4gKiB3aGVyZSAoYSwgYiwgYykgaXMgdGhlIHBsYW5lJ3MgPGNvZGU+bm9ybWFsPC9jb2RlPiwgZCBpcyB0aGUgc2lnbmVkXHJcbiAqIDxjb2RlPmRpc3RhbmNlPC9jb2RlPiB0byB0aGUgcGxhbmUsIGFuZCAoeCwgeSwgeikgaXMgYW55IHBvaW50IG9uXHJcbiAqIHRoZSBwbGFuZS5cclxuICpcclxuICogQGFsaWFzIFBsYW5lXHJcbiAqIEBjb25zdHJ1Y3RvclxyXG4gKlxyXG4gKiBAcGFyYW0ge1ZlY3RvcjN9IG5vcm1hbCBUaGUgcGxhbmUncyBub3JtYWwgKG5vcm1hbGl6ZWQpLlxyXG4gKiBAcGFyYW0ge051bWJlcn0gZGlzdGFuY2UgVGhlIHNob3J0ZXN0IGRpc3RhbmNlIGZyb20gdGhlIG9yaWdpbiB0byB0aGUgcGxhbmUuICBUaGUgc2lnbiBvZlxyXG4gKiBAZXhhbXBsZVxyXG4gKiAvLyBUaGUgcGxhbmUgeD0wXHJcbiAqIGNvbnN0IHBsYW5lID0gbmV3IFBsYW5lKFZlY3RvcjMuVU5JVF9YLCAwLjApO1xyXG4gKlxyXG4gKiBAZXhjZXB0aW9uIHtEZXZlbG9wZXJFcnJvcn0gTm9ybWFsIG11c3QgYmUgbm9ybWFsaXplZFxyXG4gKi9cclxuY2xhc3MgUGxhbmUge1xyXG5cdG5vcm1hbDogVmVjdG9yMztcclxuXHRkaXN0YW5jZTogbnVtYmVyO1xyXG5cdHB1YmxpYyBzdGF0aWMgT1JJR0lOX1hZX1BMQU5FID0gT2JqZWN0LmZyZWV6ZShuZXcgUGxhbmUoVmVjdG9yMy5VTklUX1osIDAuMCkpO1xyXG5cclxuXHRwdWJsaWMgc3RhdGljIE9SSUdJTl9ZWl9QTEFORSA9IE9iamVjdC5mcmVlemUobmV3IFBsYW5lKFZlY3RvcjMuVU5JVF9YLCAwLjApKTtcclxuXHJcblx0cHVibGljIHN0YXRpYyBPUklHSU5fWlhfUExBTkUgPSBPYmplY3QuZnJlZXplKG5ldyBQbGFuZShWZWN0b3IzLlVOSVRfWSwgMC4wKSk7XHJcblx0Y29uc3RydWN0b3Iobm9ybWFsOiBWZWN0b3IzLCBkaXN0YW5jZTogbnVtYmVyKSB7XHJcblx0XHR0aGlzLm5vcm1hbCA9IFZlY3RvcjMuY2xvbmUobm9ybWFsKTtcclxuXHJcblx0XHR0aGlzLmRpc3RhbmNlID0gZGlzdGFuY2U7XHJcblx0fVxyXG5cdG5vcm1hbGl6ZSgpIHtcclxuXHRcdGNvbnN0IGludmVyc2VOb3JtYWxMZW5ndGggPSAxLjAgLyB0aGlzLm5vcm1hbC5sZW5ndGgoKTtcclxuXHRcdHRoaXMubm9ybWFsID0gVmVjdG9yMy5tdWx0aXBseUJ5U2NhbGFyKHRoaXMubm9ybWFsLCBpbnZlcnNlTm9ybWFsTGVuZ3RoLCB0aGlzLm5vcm1hbCk7XHJcblx0XHR0aGlzLmRpc3RhbmNlICo9IGludmVyc2VOb3JtYWxMZW5ndGg7XHJcblx0XHRyZXR1cm4gdGhpcztcclxuXHR9XHJcblxyXG5cdHN0YXRpYyBmcm9tUG9pbnROb3JtYWwocG9pbnQ6IFZlY3RvcjMsIG5vcm1hbDogVmVjdG9yMywgcmVzdWx0OiBQbGFuZSk6IFBsYW5lIHtcclxuXHRcdGlmICghR01hdGguZXF1YWxzRXBzaWxvbihWZWN0b3IzLm1hZ25pdHVkZShub3JtYWwpLCAxLjAsIEdNYXRoLkVQU0lMT042KSkge1xyXG5cdFx0XHR0aHJvdyBuZXcgRXJyb3IoXCJub3JtYWwgbXVzdCBiZSBub3JtYWxpemVkLlwiKTtcclxuXHRcdH1cclxuXHRcdC8vID4+aW5jbHVkZUVuZCgnZGVidWcnKTtcclxuXHJcblx0XHRjb25zdCBkaXN0YW5jZSA9IC1WZWN0b3IzLmRvdChub3JtYWwsIHBvaW50KTtcclxuXHJcblx0XHRpZiAoIWRlZmluZWQocmVzdWx0KSkge1xyXG5cdFx0XHRyZXR1cm4gbmV3IFBsYW5lKG5vcm1hbCwgZGlzdGFuY2UpO1xyXG5cdFx0fVxyXG5cclxuXHRcdFZlY3RvcjMuY2xvbmUobm9ybWFsLCByZXN1bHQubm9ybWFsKTtcclxuXHRcdHJlc3VsdC5kaXN0YW5jZSA9IGRpc3RhbmNlO1xyXG5cdFx0cmV0dXJuIHJlc3VsdDtcclxuXHR9XHJcblxyXG5cdHN0YXRpYyBmcm9tVmVjdG9yNChjb2VmZmljaWVudHM6IFZlY3RvcjQsIHJlc3VsdDogUGxhbmUpOiBQbGFuZSB7XHJcblx0XHRjb25zdCBub3JtYWwgPSBWZWN0b3IzLmZyb21WZWN0b3I0KGNvZWZmaWNpZW50cywgc2NyYXRjaE5vcm1hbCk7XHJcblx0XHRjb25zdCBkaXN0YW5jZSA9IGNvZWZmaWNpZW50cy53O1xyXG5cclxuXHRcdC8vID4+aW5jbHVkZVN0YXJ0KCdkZWJ1ZycsIHByYWdtYXMuZGVidWcpO1xyXG5cdFx0aWYgKCFHTWF0aC5lcXVhbHNFcHNpbG9uKFZlY3RvcjMubWFnbml0dWRlKG5vcm1hbCksIDEuMCwgR01hdGguRVBTSUxPTjYpKSB7XHJcblx0XHRcdHRocm93IG5ldyBFcnJvcihcIm5vcm1hbCBtdXN0IGJlIG5vcm1hbGl6ZWQuXCIpO1xyXG5cdFx0fVxyXG5cdFx0Ly8gPj5pbmNsdWRlRW5kKCdkZWJ1ZycpO1xyXG5cclxuXHRcdGlmICghZGVmaW5lZChyZXN1bHQpKSB7XHJcblx0XHRcdHJldHVybiBuZXcgUGxhbmUobm9ybWFsLCBkaXN0YW5jZSk7XHJcblx0XHR9XHJcblx0XHRWZWN0b3IzLmNsb25lKG5vcm1hbCwgcmVzdWx0Lm5vcm1hbCk7XHJcblx0XHRyZXN1bHQuZGlzdGFuY2UgPSBkaXN0YW5jZTtcclxuXHRcdHJldHVybiByZXN1bHQ7XHJcblx0fVxyXG5cclxuXHRzdGF0aWMgZ2V0UG9pbnREaXN0YW5jZShwbGFuZTogUGxhbmUsIHBvaW50OiBWZWN0b3IzKTogbnVtYmVyIHtcclxuXHRcdHJldHVybiBWZWN0b3IzLmRvdChwbGFuZS5ub3JtYWwsIHBvaW50KSArIHBsYW5lLmRpc3RhbmNlO1xyXG5cdH1cclxuXHJcblx0c3RhdGljIHByb2plY3RQb2ludE9udG9QbGFuZShwbGFuZTogUGxhbmUsIHBvaW50OiBWZWN0b3IzLCByZXN1bHQ6IFZlY3RvcjMpOiBWZWN0b3IzIHtcclxuXHRcdGlmICghZGVmaW5lZChyZXN1bHQpKSB7XHJcblx0XHRcdHJlc3VsdCA9IG5ldyBWZWN0b3IzKCk7XHJcblx0XHR9XHJcblxyXG5cdFx0Ly8gcHJvamVjdGVkUG9pbnQgPSBwb2ludCAtIChub3JtYWwucG9pbnQgKyBzY2FsZSkgKiBub3JtYWxcclxuXHRcdGNvbnN0IHBvaW50RGlzdGFuY2UgPSBQbGFuZS5nZXRQb2ludERpc3RhbmNlKHBsYW5lLCBwb2ludCk7XHJcblx0XHRjb25zdCBzY2FsZWROb3JtYWwgPSBWZWN0b3IzLm11bHRpcGx5QnlTY2FsYXIocGxhbmUubm9ybWFsLCBwb2ludERpc3RhbmNlLCBzY3JhdGNoQ2FydGVzaWFuKTtcclxuXHJcblx0XHRyZXR1cm4gVmVjdG9yMy5zdWJ0cmFjdChwb2ludCwgc2NhbGVkTm9ybWFsLCByZXN1bHQpO1xyXG5cdH1cclxuXHJcblx0c3RhdGljIHRyYW5zZm9ybShwbGFuZTogUGxhbmUsIHRyYW5zZm9ybTogTWF0cml4NCwgcmVzdWx0OiBQbGFuZSk6IFBsYW5lIHtcclxuXHRcdGNvbnN0IG5vcm1hbCA9IHBsYW5lLm5vcm1hbDtcclxuXHRcdGNvbnN0IGRpc3RhbmNlID0gcGxhbmUuZGlzdGFuY2U7XHJcblx0XHRjb25zdCBpbnZlcnNlVHJhbnNwb3NlID0gTWF0cml4NC5pbnZlcnNlVHJhbnNwb3NlKHRyYW5zZm9ybSwgc2NyYXRjaEludmVyc2VUcmFuc3Bvc2UpO1xyXG5cdFx0bGV0IHBsYW5lQXNDYXJ0ZXNpYW40ID0gVmVjdG9yNC5mcm9tRWxlbWVudHMobm9ybWFsLngsIG5vcm1hbC55LCBub3JtYWwueiwgZGlzdGFuY2UsIHNjcmF0Y2hQbGFuZUNhcnRlc2lhbjQpO1xyXG5cdFx0cGxhbmVBc0NhcnRlc2lhbjQgPSBNYXRyaXg0Lm11bHRpcGx5QnlWZWN0b3IoaW52ZXJzZVRyYW5zcG9zZSwgcGxhbmVBc0NhcnRlc2lhbjQsIHBsYW5lQXNDYXJ0ZXNpYW40KTtcclxuXHJcblx0XHQvLyBDb252ZXJ0IHRoZSB0cmFuc2Zvcm1lZCBwbGFuZSB0byBIZXNzaWFuIE5vcm1hbCBGb3JtXHJcblx0XHRjb25zdCB0cmFuc2Zvcm1lZE5vcm1hbCA9IFZlY3RvcjMuZnJvbVZlY3RvcjQocGxhbmVBc0NhcnRlc2lhbjQsIHNjcmF0Y2hUcmFuc2Zvcm1Ob3JtYWwpO1xyXG5cclxuXHRcdHBsYW5lQXNDYXJ0ZXNpYW40ID0gVmVjdG9yNC5kaXZpZGVCeVNjYWxhcihcclxuXHRcdFx0cGxhbmVBc0NhcnRlc2lhbjQsXHJcblx0XHRcdFZlY3RvcjMubWFnbml0dWRlKHRyYW5zZm9ybWVkTm9ybWFsKSxcclxuXHRcdFx0cGxhbmVBc0NhcnRlc2lhbjRcclxuXHRcdCk7XHJcblxyXG5cdFx0cmV0dXJuIFBsYW5lLmZyb21WZWN0b3I0KHBsYW5lQXNDYXJ0ZXNpYW40LCByZXN1bHQpO1xyXG5cdH1cclxuXHJcblx0c3RhdGljIGNsb25lKHBsYW5lOiBQbGFuZSwgcmVzdWx0OiBQbGFuZSk6IFBsYW5lIHtcclxuXHRcdGlmICghZGVmaW5lZChyZXN1bHQpKSB7XHJcblx0XHRcdHJldHVybiBuZXcgUGxhbmUocGxhbmUubm9ybWFsLCBwbGFuZS5kaXN0YW5jZSk7XHJcblx0XHR9XHJcblxyXG5cdFx0VmVjdG9yMy5jbG9uZShwbGFuZS5ub3JtYWwsIHJlc3VsdC5ub3JtYWwpO1xyXG5cdFx0cmVzdWx0LmRpc3RhbmNlID0gcGxhbmUuZGlzdGFuY2U7XHJcblxyXG5cdFx0cmV0dXJuIHJlc3VsdDtcclxuXHR9XHJcblxyXG5cdHN0YXRpYyBlcXVhbHMobGVmdDogUGxhbmUsIHJpZ2h0OiBQbGFuZSk6IGJvb2xlYW4ge1xyXG5cdFx0cmV0dXJuIGxlZnQuZGlzdGFuY2UgPT09IHJpZ2h0LmRpc3RhbmNlICYmIFZlY3RvcjMuZXF1YWxzKGxlZnQubm9ybWFsLCByaWdodC5ub3JtYWwpO1xyXG5cdH1cclxufVxyXG5jb25zdCBzY3JhdGNoTm9ybWFsID0gbmV3IFZlY3RvcjMoKTtcclxuY29uc3Qgc2NyYXRjaENhcnRlc2lhbiA9IG5ldyBWZWN0b3IzKCk7XHJcbmNvbnN0IHNjcmF0Y2hJbnZlcnNlVHJhbnNwb3NlID0gbmV3IE1hdHJpeDQoKTtcclxuY29uc3Qgc2NyYXRjaFBsYW5lQ2FydGVzaWFuNCA9IG5ldyBWZWN0b3I0KCk7XHJcbmNvbnN0IHNjcmF0Y2hUcmFuc2Zvcm1Ob3JtYWwgPSBuZXcgVmVjdG9yMygpO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgUGxhbmU7XHJcbiIsImltcG9ydCBWZWN0b3IzIGZyb20gXCIuLi9tYXRoL1ZlY3RvcjNcIjtcclxuaW1wb3J0IFZlY3RvcjQgZnJvbSBcIi4uL21hdGgvVmVjdG9yNFwiO1xyXG5pbXBvcnQgZGVmYXVsdFZhbHVlIGZyb20gXCIuLi91dGlscy9kZWZhdWx0VmFsdWVcIjtcclxuaW1wb3J0IGRlZmluZWQgZnJvbSBcIi4uL3V0aWxzL2RlZmluZWRcIjtcclxuaW1wb3J0IHsgSW50ZXJzZWN0IH0gZnJvbSBcIi4vV2ViR1BVQ29uc3RhbnRcIjtcclxuaW1wb3J0IFBsYW5lIGZyb20gXCIuLi9tYXRoL1BsYW5lXCI7XHJcblxyXG4vKipcclxuICogVGhlIGN1bGxpbmcgdm9sdW1lIGRlZmluZWQgYnkgcGxhbmVzLlxyXG4gKlxyXG4gKiBAYWxpYXMgQ3VsbGluZ1ZvbHVtZVxyXG4gKiBAY29uc3RydWN0b3JcclxuICpcclxuICogQHBhcmFtIHtWZWN0b3I0W119IFtwbGFuZXNdIEFuIGFycmF5IG9mIGNsaXBwaW5nIHBsYW5lcy5cclxuICovXHJcbmNsYXNzIEN1bGxpbmdWb2x1bWUge1xyXG5cdHBsYW5lczogUGxhbmVbXTtcclxuXHJcblx0cHVibGljIHN0YXRpYyBNQVNLX09VVFNJREUgPSAweGZmZmZmZmZmO1xyXG5cclxuXHRwdWJsaWMgc3RhdGljIE1BU0tfSU5TSURFID0gMHgwMDAwMDAwMDtcclxuXHJcblx0cHVibGljIHN0YXRpYyBNQVNLX0lOREVURVJNSU5BVEUgPSAweDdmZmZmZmZmO1xyXG5cclxuXHRjb25zdHJ1Y3RvcihwbGFuZXM/OiBQbGFuZVtdKSB7XHJcblx0XHR0aGlzLnBsYW5lcyA9IGRlZmF1bHRWYWx1ZShwbGFuZXMsIFtcclxuXHRcdFx0bmV3IFBsYW5lKFZlY3RvcjMuVU5JVF9aLCAwLjApLFxyXG5cdFx0XHRuZXcgUGxhbmUoVmVjdG9yMy5VTklUX1osIDAuMCksXHJcblx0XHRcdG5ldyBQbGFuZShWZWN0b3IzLlVOSVRfWiwgMC4wKSxcclxuXHRcdFx0bmV3IFBsYW5lKFZlY3RvcjMuVU5JVF9aLCAwLjApLFxyXG5cdFx0XHRuZXcgUGxhbmUoVmVjdG9yMy5VTklUX1osIDAuMCksXHJcblx0XHRcdG5ldyBQbGFuZShWZWN0b3IzLlVOSVRfWiwgMC4wKVxyXG5cdFx0XSk7XHJcblx0fVxyXG5cdC8qKlxyXG5cdCAqIENvbnN0cnVjdHMgYSBjdWxsaW5nIHZvbHVtZSBmcm9tIGEgYm91bmRpbmcgc3BoZXJlLiBDcmVhdGVzIHNpeCBwbGFuZXMgdGhhdCBjcmVhdGUgYSBib3ggY29udGFpbmluZyB0aGUgc3BoZXJlLlxyXG5cdCAqIFRoZSBwbGFuZXMgYXJlIGFsaWduZWQgdG8gdGhlIHgsIHksIGFuZCB6IGF4ZXMgaW4gd29ybGQgY29vcmRpbmF0ZXMuXHJcblx0ICpcclxuXHQgKiBAcGFyYW0ge0JvdW5kaW5nU3BoZXJlfSBib3VuZGluZ1NwaGVyZSBUaGUgYm91bmRpbmcgc3BoZXJlIHVzZWQgdG8gY3JlYXRlIHRoZSBjdWxsaW5nIHZvbHVtZS5cclxuXHQgKiBAcGFyYW0ge0N1bGxpbmdWb2x1bWV9IFtyZXN1bHRdIFRoZSBvYmplY3Qgb250byB3aGljaCB0byBzdG9yZSB0aGUgcmVzdWx0LlxyXG5cdCAqIEByZXR1cm5zIHtDdWxsaW5nVm9sdW1lfSBUaGUgY3VsbGluZyB2b2x1bWUgY3JlYXRlZCBmcm9tIHRoZSBib3VuZGluZyBzcGhlcmUuXHJcblx0ICovXHJcblx0c3RhdGljIGZyb21Cb3VuZGluZ1NwaGVyZShib3VuZGluZ1NwaGVyZSwgcmVzdWx0KSB7XHJcblx0XHRpZiAoIWRlZmluZWQoYm91bmRpbmdTcGhlcmUpKSB7XHJcblx0XHRcdHRocm93IG5ldyBFcnJvcihcImJvdW5kaW5nU3BoZXJlIGlzIHJlcXVpcmVkLlwiKTtcclxuXHRcdH1cclxuXHRcdGlmICghZGVmaW5lZChyZXN1bHQpKSB7XHJcblx0XHRcdHJlc3VsdCA9IG5ldyBDdWxsaW5nVm9sdW1lKCk7XHJcblx0XHR9XHJcblxyXG5cdFx0Y29uc3QgbGVuZ3RoID0gZmFjZXMubGVuZ3RoO1xyXG5cdFx0Y29uc3QgcGxhbmVzID0gcmVzdWx0LnBsYW5lcztcclxuXHRcdHBsYW5lcy5sZW5ndGggPSAyICogbGVuZ3RoO1xyXG5cclxuXHRcdGNvbnN0IGNlbnRlciA9IGJvdW5kaW5nU3BoZXJlLmNlbnRlcjtcclxuXHRcdGNvbnN0IHJhZGl1cyA9IGJvdW5kaW5nU3BoZXJlLnJhZGl1cztcclxuXHJcblx0XHRsZXQgcGxhbmVJbmRleCA9IDA7XHJcblxyXG5cdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCBsZW5ndGg7ICsraSkge1xyXG5cdFx0XHRjb25zdCBmYWNlTm9ybWFsID0gZmFjZXNbaV07XHJcblxyXG5cdFx0XHRsZXQgcGxhbmUwID0gcGxhbmVzW3BsYW5lSW5kZXhdO1xyXG5cdFx0XHRsZXQgcGxhbmUxID0gcGxhbmVzW3BsYW5lSW5kZXggKyAxXTtcclxuXHJcblx0XHRcdGlmICghZGVmaW5lZChwbGFuZTApKSB7XHJcblx0XHRcdFx0cGxhbmUwID0gcGxhbmVzW3BsYW5lSW5kZXhdID0gbmV3IFZlY3RvcjQoKTtcclxuXHRcdFx0fVxyXG5cdFx0XHRpZiAoIWRlZmluZWQocGxhbmUxKSkge1xyXG5cdFx0XHRcdHBsYW5lMSA9IHBsYW5lc1twbGFuZUluZGV4ICsgMV0gPSBuZXcgVmVjdG9yNCgpO1xyXG5cdFx0XHR9XHJcblxyXG5cdFx0XHRWZWN0b3IzLm11bHRpcGx5QnlTY2FsYXIoZmFjZU5vcm1hbCwgLXJhZGl1cywgc2NyYXRjaFBsYW5lQ2VudGVyKTtcclxuXHRcdFx0VmVjdG9yMy5hZGQoY2VudGVyLCBzY3JhdGNoUGxhbmVDZW50ZXIsIHNjcmF0Y2hQbGFuZUNlbnRlcik7XHJcblxyXG5cdFx0XHRwbGFuZTAueCA9IGZhY2VOb3JtYWwueDtcclxuXHRcdFx0cGxhbmUwLnkgPSBmYWNlTm9ybWFsLnk7XHJcblx0XHRcdHBsYW5lMC56ID0gZmFjZU5vcm1hbC56O1xyXG5cdFx0XHRwbGFuZTAudyA9IC1WZWN0b3IzLmRvdChmYWNlTm9ybWFsLCBzY3JhdGNoUGxhbmVDZW50ZXIpO1xyXG5cclxuXHRcdFx0VmVjdG9yMy5tdWx0aXBseUJ5U2NhbGFyKGZhY2VOb3JtYWwsIHJhZGl1cywgc2NyYXRjaFBsYW5lQ2VudGVyKTtcclxuXHRcdFx0VmVjdG9yMy5hZGQoY2VudGVyLCBzY3JhdGNoUGxhbmVDZW50ZXIsIHNjcmF0Y2hQbGFuZUNlbnRlcik7XHJcblxyXG5cdFx0XHRwbGFuZTEueCA9IC1mYWNlTm9ybWFsLng7XHJcblx0XHRcdHBsYW5lMS55ID0gLWZhY2VOb3JtYWwueTtcclxuXHRcdFx0cGxhbmUxLnogPSAtZmFjZU5vcm1hbC56O1xyXG5cdFx0XHRwbGFuZTEudyA9IC1WZWN0b3IzLmRvdChWZWN0b3IzLm5lZ2F0ZShmYWNlTm9ybWFsLCBzY3JhdGNoUGxhbmVOb3JtYWwpLCBzY3JhdGNoUGxhbmVDZW50ZXIpO1xyXG5cclxuXHRcdFx0cGxhbmVJbmRleCArPSAyO1xyXG5cdFx0fVxyXG5cclxuXHRcdHJldHVybiByZXN1bHQ7XHJcblx0fVxyXG5cdC8qKlxyXG5cdCAqIERldGVybWluZXMgd2hldGhlciBhIGJvdW5kaW5nIHZvbHVtZSBpbnRlcnNlY3RzIHRoZSBjdWxsaW5nIHZvbHVtZS5cclxuXHQgKlxyXG5cdCAqIEBwYXJhbSB7T2JqZWN0fSBib3VuZGluZ1ZvbHVtZSBUaGUgYm91bmRpbmcgdm9sdW1lIHdob3NlIGludGVyc2VjdGlvbiB3aXRoIHRoZSBjdWxsaW5nIHZvbHVtZSBpcyB0byBiZSB0ZXN0ZWQuXHJcblx0ICogQHJldHVybnMge0ludGVyc2VjdH0gIEludGVyc2VjdC5PVVRTSURFLCBJbnRlcnNlY3QuSU5URVJTRUNUSU5HLCBvciBJbnRlcnNlY3QuSU5TSURFLlxyXG5cdCAqL1xyXG5cdGNvbXB1dGVWaXNpYmlsaXR5KGJvdW5kaW5nVm9sdW1lKSB7XHJcblx0XHRpZiAoIWRlZmluZWQoYm91bmRpbmdWb2x1bWUpKSB7XHJcblx0XHRcdHRocm93IG5ldyBFcnJvcihcImJvdW5kaW5nVm9sdW1lIGlzIHJlcXVpcmVkLlwiKTtcclxuXHRcdH1cclxuXHRcdGNvbnN0IHBsYW5lcyA9IHRoaXMucGxhbmVzO1xyXG5cdFx0bGV0IGludGVyc2VjdGluZyA9IGZhbHNlO1xyXG5cdFx0Zm9yIChsZXQgayA9IDAsIGxlbiA9IHBsYW5lcy5sZW5ndGg7IGsgPCBsZW47ICsraykge1xyXG5cdFx0XHRjb25zdCByZXN1bHQgPSBib3VuZGluZ1ZvbHVtZS5pbnRlcnNlY3RQbGFuZShwbGFuZXNba10pO1xyXG5cdFx0XHRpZiAocmVzdWx0ID09PSBJbnRlcnNlY3QuT1VUU0lERSkge1xyXG5cdFx0XHRcdHJldHVybiBJbnRlcnNlY3QuT1VUU0lERTtcclxuXHRcdFx0fSBlbHNlIGlmIChyZXN1bHQgPT09IEludGVyc2VjdC5JTlRFUlNFQ1RJTkcpIHtcclxuXHRcdFx0XHRpbnRlcnNlY3RpbmcgPSB0cnVlO1xyXG5cdFx0XHR9XHJcblx0XHR9XHJcblxyXG5cdFx0cmV0dXJuIGludGVyc2VjdGluZyA/IEludGVyc2VjdC5JTlRFUlNFQ1RJTkcgOiBJbnRlcnNlY3QuSU5TSURFO1xyXG5cdH1cclxufVxyXG5cclxuY29uc3QgZmFjZXMgPSBbbmV3IFZlY3RvcjMoKSwgbmV3IFZlY3RvcjMoKSwgbmV3IFZlY3RvcjMoKV07XHJcblZlY3RvcjMuY2xvbmUoVmVjdG9yMy5VTklUX1gsIGZhY2VzWzBdKTtcclxuVmVjdG9yMy5jbG9uZShWZWN0b3IzLlVOSVRfWSwgZmFjZXNbMV0pO1xyXG5WZWN0b3IzLmNsb25lKFZlY3RvcjMuVU5JVF9aLCBmYWNlc1syXSk7XHJcblxyXG5jb25zdCBzY3JhdGNoUGxhbmVDZW50ZXIgPSBuZXcgVmVjdG9yMygpO1xyXG5jb25zdCBzY3JhdGNoUGxhbmVOb3JtYWwgPSBuZXcgVmVjdG9yMygpO1xyXG5jb25zdCBzY3JhdGNoUGxhbmVzID0gbmV3IFZlY3RvcjQoKTtcclxuY29uc3Qgc2NyYXRjaFBsYW5lID0gbmV3IFBsYW5lKG5ldyBWZWN0b3IzKDEuMCwgMC4wLCAwLjApLCAwLjApO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgQ3VsbGluZ1ZvbHVtZTtcclxuIiwiaW1wb3J0IEN1bGxpbmdWb2x1bWUgZnJvbSBcIi4uL2NvcmUvQ3VsbGluZ1ZvbHVtZVwiO1xyXG5pbXBvcnQgUmVuZGVyT2JqZWN0IGZyb20gXCIuLi9jb3JlL1JlbmRlck9iamVjdFwiO1xyXG5pbXBvcnQgeyBSZW5kZXJPYmplY3RUeXBlLCBVbmlmb3JtRW51bSB9IGZyb20gXCIuLi9jb3JlL1dlYkdQVVR5cGVzXCI7XHJcbmltcG9ydCBNYXRyaXg0IGZyb20gXCIuLi9tYXRoL01hdHJpeDRcIjtcclxuaW1wb3J0IFBsYW5lIGZyb20gXCIuLi9tYXRoL1BsYW5lXCI7XHJcbmltcG9ydCBWZWN0b3IzIGZyb20gXCIuLi9tYXRoL1ZlY3RvcjNcIjtcclxuaW1wb3J0IFNoYWRlckRhdGEgZnJvbSBcIi4uL3JlbmRlci9TaGFkZXJEYXRhXCI7XHJcbmltcG9ydCBVbmlmb3JtQnVmZmVyIGZyb20gXCIuLi9yZW5kZXIvVW5pZm9ybUJ1ZmZlclwiO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgQ2FtZXJhIGV4dGVuZHMgUmVuZGVyT2JqZWN0IHtcclxuXHRwcml2YXRlIF92aWV3TWF0cml4OiBNYXRyaXg0O1xyXG5cdHByb3RlY3RlZCBfcHJvamVjdGlvbk1hdHJpeDogTWF0cml4NDtcclxuXHRwcml2YXRlIF92cE1hdHJpeDogTWF0cml4NDtcclxuXHRjdWxsaW5nVm9sdW1lOiBDdWxsaW5nVm9sdW1lO1xyXG5cdHByb2plY3RNYXRyaXhEaXJ0eTogYm9vbGVhbjtcclxuXHRzaGFkZXJEYXRhOiBTaGFkZXJEYXRhO1xyXG5cdG5lYXI6IG51bWJlcjtcclxuXHRmYXI6IG51bWJlcjtcclxuXHRjb25zdHJ1Y3RvcigpIHtcclxuXHRcdHN1cGVyKCk7XHJcblx0XHR0aGlzLl92aWV3TWF0cml4ID0gdW5kZWZpbmVkO1xyXG5cdFx0dGhpcy50eXBlID0gUmVuZGVyT2JqZWN0VHlwZS5DYW1lcmE7XHJcblx0XHR0aGlzLmN1bGxpbmdWb2x1bWUgPSBuZXcgQ3VsbGluZ1ZvbHVtZSgpO1xyXG5cdFx0dGhpcy5fdmlld01hdHJpeCA9IG5ldyBNYXRyaXg0KCk7XHJcblx0XHR0aGlzLl92cE1hdHJpeCA9IG5ldyBNYXRyaXg0KCk7XHJcblx0XHR0aGlzLnByb2plY3RNYXRyaXhEaXJ0eSA9IHRydWU7XHJcblx0XHR0aGlzLmNyZWF0ZVNoYWRlckRhdGEoKTtcclxuXHR9XHJcblx0Z2V0IHZpZXdNYXRyaXgoKSB7XHJcblx0XHR0aGlzLnVwZGF0ZU1hdHJpeCgpO1xyXG5cdFx0TWF0cml4NC5pbnZlcnNlKHRoaXMubW9kZWxNYXRyaXgsIHRoaXMuX3ZpZXdNYXRyaXgpO1xyXG5cdFx0cmV0dXJuIHRoaXMuX3ZpZXdNYXRyaXg7XHJcblx0fVxyXG5cdGdldCBwcm9qZWN0aW9uTWF0cml4KCkge1xyXG5cdFx0dGhpcy51cGRhdGVQcm9qZWN0aW9uTWF0cml4KCk7XHJcblx0XHRyZXR1cm4gdGhpcy5fcHJvamVjdGlvbk1hdHJpeDtcclxuXHR9XHJcblxyXG5cdGdldCB2cE1hdHJpeCgpIHtcclxuXHRcdE1hdHJpeDQubXVsdGlwbHkodGhpcy5wcm9qZWN0aW9uTWF0cml4LCB0aGlzLnZpZXdNYXRyaXgsIHRoaXMuX3ZwTWF0cml4KTtcclxuXHRcdHJldHVybiB0aGlzLl92cE1hdHJpeDtcclxuXHR9XHJcblxyXG5cdGdldCBpbnZlcnNlVmlld01hdHJpeCgpIHtcclxuXHRcdHRoaXMudXBkYXRlTWF0cml4KCk7XHJcblx0XHRyZXR1cm4gdGhpcy5tb2RlbE1hdHJpeDtcclxuXHR9XHJcblx0cHVibGljIHVwZGF0ZVByb2plY3Rpb25NYXRyaXgoKSB7fVxyXG5cdC8qKlxyXG5cdCAqIGdldCBhIGN1bGxpbmcgdm9sdW1lIGZvciB0aGlzIGZydXN0dW0uXHJcblx0ICovXHJcblx0Z2V0Q3VsbGluZ1ZvbHVtZSgpIHtcclxuXHRcdGNvbnN0IGNsb25lVmlld01hdHJpeCA9IHRoaXMudmlld01hdHJpeC5jbG9uZShuZXcgTWF0cml4NCgpKTtcclxuXHRcdGNvbnN0IHZwTWF0cml4ID0gTWF0cml4NC5tdWx0aXBseSh0aGlzLnByb2plY3Rpb25NYXRyaXgsIGNsb25lVmlld01hdHJpeCwgbmV3IE1hdHJpeDQoKSk7XHJcblx0XHRjb25zdCBwbGFuZXMgPSB0aGlzLmN1bGxpbmdWb2x1bWUucGxhbmVzO1xyXG5cdFx0Y29uc3QgbWUgPSB2cE1hdHJpeDtcclxuXHRcdGNvbnN0IG1lMCA9IG1lWzBdLFxyXG5cdFx0XHRtZTEgPSBtZVsxXSxcclxuXHRcdFx0bWUyID0gbWVbMl0sXHJcblx0XHRcdG1lMyA9IG1lWzNdO1xyXG5cdFx0Y29uc3QgbWU0ID0gbWVbNF0sXHJcblx0XHRcdG1lNSA9IG1lWzVdLFxyXG5cdFx0XHRtZTYgPSBtZVs2XSxcclxuXHRcdFx0bWU3ID0gbWVbN107XHJcblx0XHRjb25zdCBtZTggPSBtZVs4XSxcclxuXHRcdFx0bWU5ID0gbWVbOV0sXHJcblx0XHRcdG1lMTAgPSBtZVsxMF0sXHJcblx0XHRcdG1lMTEgPSBtZVsxMV07XHJcblx0XHRjb25zdCBtZTEyID0gbWVbMTJdLFxyXG5cdFx0XHRtZTEzID0gbWVbMTNdLFxyXG5cdFx0XHRtZTE0ID0gbWVbMTRdLFxyXG5cdFx0XHRtZTE1ID0gbWVbMTVdO1xyXG5cdFx0cGxhbmVzWzBdID0gbmV3IFBsYW5lKG5ldyBWZWN0b3IzKG1lMyAtIG1lMCwgbWU3IC0gbWU0LCBtZTExIC0gbWU4KSwgbWUxNSAtIG1lMTIpO1xyXG5cdFx0cGxhbmVzWzBdLm5vcm1hbGl6ZSgpO1xyXG5cdFx0cGxhbmVzWzFdID0gbmV3IFBsYW5lKG5ldyBWZWN0b3IzKG1lMyArIG1lMCwgbWU3ICsgbWU0LCBtZTExICsgbWU4KSwgbWUxNSArIG1lMTIpO1xyXG5cdFx0cGxhbmVzWzFdLm5vcm1hbGl6ZSgpO1xyXG5cclxuXHRcdHBsYW5lc1syXSA9IG5ldyBQbGFuZShuZXcgVmVjdG9yMyhtZTMgKyBtZTEsIG1lNyArIG1lNSwgbWUxMSArIG1lOSksIG1lMTUgKyBtZTEzKTtcclxuXHRcdHBsYW5lc1syXS5ub3JtYWxpemUoKTtcclxuXHJcblx0XHRwbGFuZXNbM10gPSBuZXcgUGxhbmUobmV3IFZlY3RvcjMobWUzIC0gbWUxLCBtZTcgLSBtZTUsIG1lMTEgLSBtZTkpLCBtZTE1IC0gbWUxMyk7XHJcblx0XHRwbGFuZXNbM10ubm9ybWFsaXplKCk7XHJcblxyXG5cdFx0cGxhbmVzWzRdID0gbmV3IFBsYW5lKG5ldyBWZWN0b3IzKG1lMyAtIG1lMiwgbWU3IC0gbWU2LCBtZTExIC0gbWUxMCksIG1lMTUgLSBtZTE0KTtcclxuXHRcdHBsYW5lc1s0XS5ub3JtYWxpemUoKTtcclxuXHJcblx0XHRwbGFuZXNbNV0gPSBuZXcgUGxhbmUobmV3IFZlY3RvcjMobWUzICsgbWUyLCBtZTcgKyBtZTYsIG1lMTEgKyBtZTEwKSwgbWUxNSArIG1lMTQpO1xyXG5cdFx0cGxhbmVzWzVdLm5vcm1hbGl6ZSgpO1xyXG5cclxuXHRcdHJldHVybiB0aGlzLmN1bGxpbmdWb2x1bWU7XHJcblx0fVxyXG5cclxuXHRjcmVhdGVTaGFkZXJEYXRhKCkge1xyXG5cdFx0dGhpcy5zaGFkZXJEYXRhID0gbmV3IFNoYWRlckRhdGEoXCJjYW1lcmFcIiwgMCwgMSwgMSk7XHJcblx0XHRjb25zdCB1bmlmb3JtQnVmZmVyID0gbmV3IFVuaWZvcm1CdWZmZXIoeyBsYWJlbDogXCJjYW1lcmFcIiB9KTtcclxuXHRcdHVuaWZvcm1CdWZmZXIuc2V0VW5pZm9ybShcclxuXHRcdFx0XCJwcm9qZWN0aW9uTWF0cml4XCIsXHJcblx0XHRcdCgpID0+IHtcclxuXHRcdFx0XHRyZXR1cm4gdGhpcy5wcm9qZWN0aW9uTWF0cml4O1xyXG5cdFx0XHR9LFxyXG5cdFx0XHRVbmlmb3JtRW51bS5NYXQ0XHJcblx0XHQpO1xyXG5cdFx0dW5pZm9ybUJ1ZmZlci5zZXRVbmlmb3JtKFxyXG5cdFx0XHRcInZpZXdNYXRyaXhcIixcclxuXHRcdFx0KCkgPT4ge1xyXG5cdFx0XHRcdHJldHVybiB0aGlzLnZpZXdNYXRyaXg7XHJcblx0XHRcdH0sXHJcblx0XHRcdFVuaWZvcm1FbnVtLk1hdDRcclxuXHRcdCk7XHJcblx0XHR1bmlmb3JtQnVmZmVyLnNldFVuaWZvcm0oXHJcblx0XHRcdFwiaW52ZXJzZVZpZXdNYXRyaXhcIixcclxuXHRcdFx0KCkgPT4ge1xyXG5cdFx0XHRcdHJldHVybiB0aGlzLmludmVyc2VWaWV3TWF0cml4O1xyXG5cdFx0XHR9LFxyXG5cdFx0XHRVbmlmb3JtRW51bS5NYXQ0XHJcblx0XHQpO1xyXG5cdFx0dW5pZm9ybUJ1ZmZlci5zZXRVbmlmb3JtKFxyXG5cdFx0XHRcInBvc2l0aW9uXCIsXHJcblx0XHRcdCgpID0+IHtcclxuXHRcdFx0XHRyZXR1cm4gdGhpcy5wb3NpdGlvbjtcclxuXHRcdFx0fSxcclxuXHRcdFx0VW5pZm9ybUVudW0uRmxvYXRWZWMzXHJcblx0XHQpO1xyXG5cdFx0dGhpcy5zaGFkZXJEYXRhLnNldFVuaWZvcm1CdWZmZXIoXCJjYW1lcmFcIiwgdW5pZm9ybUJ1ZmZlcik7XHJcblx0fVxyXG59XHJcbiIsImltcG9ydCBDdWxsaW5nVm9sdW1lIGZyb20gXCIuLi9jb3JlL0N1bGxpbmdWb2x1bWVcIjtcclxuaW1wb3J0IEdNYXRoIGZyb20gXCIuLi9tYXRoL01hdGhcIjtcclxuaW1wb3J0IE1hdHJpeDQgZnJvbSBcIi4uL21hdGgvTWF0cml4NFwiO1xyXG5pbXBvcnQgQ2FtZXJhIGZyb20gXCIuL0NhbWVyYVwiO1xyXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBQZXJzcGVjdGl2ZUNhbWVyYSBleHRlbmRzIENhbWVyYSB7XHJcblx0eE9mZnNldDogbnVtYmVyO1xyXG5cdHlPZmZzZXQ6IG51bWJlcjtcclxuXHRjdWxsaW5nVm9sdW1lOiBDdWxsaW5nVm9sdW1lO1xyXG5cdHByaXZhdGUgX2FzcGVjdDogbnVtYmVyO1xyXG5cdHByaXZhdGUgX2ZvdjogbnVtYmVyO1xyXG5cdGhlaWdodDogbnVtYmVyO1xyXG5cdHdpZHRoOiBudW1iZXI7XHJcblx0aXNQZXJzcGVjdGl2ZUNhbWVyYTogYm9vbGVhbjtcclxuXHRuZWFyOiBudW1iZXI7XHJcblx0ZmFyOiBudW1iZXI7XHJcblx0dG9wOiBudW1iZXI7XHJcblx0bGVmdDogbnVtYmVyO1xyXG5cdGNvbnN0cnVjdG9yKGZvdiA9IDUwLCBhc3BlY3QgPSAxLCBuZWFyID0gMC4xLCBmYXIgPSAyMDAwKSB7XHJcblx0XHRzdXBlcigpO1xyXG5cdFx0dGhpcy5fYXNwZWN0ID0gYXNwZWN0O1xyXG5cdFx0dGhpcy5mb3YgPSBmb3Y7XHJcblx0XHR0aGlzLm5lYXIgPSBuZWFyO1xyXG5cdFx0dGhpcy5mYXIgPSBmYXI7XHJcblx0XHR0aGlzLnhPZmZzZXQgPSAwO1xyXG5cdFx0dGhpcy55T2Zmc2V0ID0gMDtcclxuXHRcdHRoaXMucHJvamVjdE1hdHJpeERpcnR5ID0gdHJ1ZTtcclxuXHRcdHRoaXMudXBkYXRlQ2FtZXJhUGFybXMoKTtcclxuXHRcdHRoaXMuY3VsbGluZ1ZvbHVtZSA9IG5ldyBDdWxsaW5nVm9sdW1lKCk7XHJcblx0XHR0aGlzLmlzUGVyc3BlY3RpdmVDYW1lcmEgPSB0cnVlO1xyXG5cdH1cclxuXHRnZXQgYXNwZWN0KCk6IG51bWJlciB7XHJcblx0XHRyZXR1cm4gdGhpcy5fYXNwZWN0O1xyXG5cdH1cclxuXHJcblx0c2V0IGFzcGVjdCh2OiBudW1iZXIpIHtcclxuXHRcdHRoaXMucHJvamVjdE1hdHJpeERpcnR5ID0gdHJ1ZTtcclxuXHRcdHRoaXMuX2FzcGVjdCA9IHY7XHJcblx0fVxyXG5cdGdldCBmb3YoKTogbnVtYmVyIHtcclxuXHRcdHJldHVybiB0aGlzLl9mb3Y7XHJcblx0fVxyXG5cclxuXHRzZXQgZm92KHY6IG51bWJlcikge1xyXG5cdFx0dGhpcy5wcm9qZWN0TWF0cml4RGlydHkgPSB0cnVlO1xyXG5cdFx0dGhpcy5fZm92ID0gdjtcclxuXHR9XHJcblx0cHJpdmF0ZSB1cGRhdGVDYW1lcmFQYXJtcygpIHtcclxuXHRcdHRoaXMudG9wID0gdGhpcy5uZWFyICogTWF0aC50YW4oMC41ICogR01hdGguUkFESUFOU19QRVJfREVHUkVFICogdGhpcy5mb3YpO1xyXG5cdFx0dGhpcy5oZWlnaHQgPSAyICogdGhpcy50b3A7XHJcblx0XHR0aGlzLndpZHRoID0gdGhpcy5hc3BlY3QgKiB0aGlzLmhlaWdodDtcclxuXHRcdHRoaXMubGVmdCA9IC0wLjUgKiB0aGlzLndpZHRoO1xyXG5cdH1cclxuXHRwdWJsaWMgdXBkYXRlUHJvamVjdGlvbk1hdHJpeCgpIHtcclxuXHRcdGlmICh0aGlzLnByb2plY3RNYXRyaXhEaXJ0eSkge1xyXG5cdFx0XHR0aGlzLnVwZGF0ZUNhbWVyYVBhcm1zKCk7XHJcblx0XHRcdHRoaXMuX3Byb2plY3Rpb25NYXRyaXggPSBNYXRyaXg0Lm1ha2VQZXJzcGVjdGl2ZShcclxuXHRcdFx0XHR0aGlzLmxlZnQsXHJcblx0XHRcdFx0dGhpcy5sZWZ0ICsgdGhpcy53aWR0aCxcclxuXHRcdFx0XHR0aGlzLnRvcCxcclxuXHRcdFx0XHR0aGlzLnRvcCAtIHRoaXMuaGVpZ2h0LFxyXG5cdFx0XHRcdHRoaXMubmVhcixcclxuXHRcdFx0XHR0aGlzLmZhclxyXG5cdFx0XHQpO1xyXG5cdFx0XHR0aGlzLnByb2plY3RNYXRyaXhEaXJ0eSA9IGZhbHNlO1xyXG5cdFx0fVxyXG5cdH1cclxufVxyXG4iLCJpbXBvcnQgeyBCdWZmZXJVc2FnZSB9IGZyb20gXCIuLi9jb3JlL1dlYkdQVUNvbnN0YW50XCI7XHJcbmltcG9ydCB7IFVuaWZvcm1FbnVtIH0gZnJvbSBcIi4uL2NvcmUvV2ViR1BVVHlwZXNcIjtcclxuaW1wb3J0IE1hdHJpeDQgZnJvbSBcIi4uL21hdGgvTWF0cml4NFwiO1xyXG5pbXBvcnQgU2hhZGVyRGF0YSBmcm9tIFwiLi4vcmVuZGVyL1NoYWRlckRhdGFcIjtcclxuaW1wb3J0IFVuaWZvcm1CdWZmZXIgZnJvbSBcIi4uL3JlbmRlci9Vbmlmb3JtQnVmZmVyXCI7XHJcbmltcG9ydCBQZXJzcGVjdGl2ZUNhbWVyYSBmcm9tIFwiLi9QZXJzcGVjdGl2ZUNhbWVyYVwiO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgUG9pbnRMaWdodFNoYWRvd0NhbWVyYSBleHRlbmRzIFBlcnNwZWN0aXZlQ2FtZXJhIHtcclxuXHRwdWJsaWMgdnBNYXRyaXhBcnJheTogQXJyYXk8TWF0cml4ND47XHJcblx0cHVibGljIHZwTWF0cml4SW5kZXhBcnJheTogQXJyYXk8bnVtYmVyPjtcclxuXHJcblx0Y29uc3RydWN0b3IoZm92ID0gNTAsIGFzcGVjdCA9IDEsIG5lYXIgPSAwLjEsIGZhciA9IDIwMDApIHtcclxuXHRcdHN1cGVyKGZvdiwgYXNwZWN0LCBuZWFyLCBmYXIpO1xyXG5cdFx0dGhpcy52cE1hdHJpeEFycmF5ID0gW25ldyBNYXRyaXg0KCksIG5ldyBNYXRyaXg0KCksIG5ldyBNYXRyaXg0KCksIG5ldyBNYXRyaXg0KCksIG5ldyBNYXRyaXg0KCksIG5ldyBNYXRyaXg0KCldO1xyXG5cdH1cclxuXHJcblx0Ly8gY3JlYXRlU2hhZGVyRGF0YSgpIHtcclxuXHQvLyBcdHRoaXMuc2hhZGVyRGF0YSA9IG5ldyBTaGFkZXJEYXRhKFwiY2FtZXJhXCIsIDAsIDEsIDEpO1xyXG5cclxuXHQvLyBcdGNvbnN0IHVuaWZvcm1CdWZmZXIgPSBuZXcgVW5pZm9ybUJ1ZmZlcih7XHJcblx0Ly8gXHRcdGxhYmVsOiBcInBvaW50TGlnaHRTaGFkb3dDYW1lcmFcIixcclxuXHQvLyBcdFx0dHlwZTogXCJyZWFkLW9ubHktc3RvcmFnZVwiLFxyXG5cdC8vIFx0XHR1c2FnZTogQnVmZmVyVXNhZ2UuU3RvcmFnZSB8IEJ1ZmZlclVzYWdlLkNvcHlEc3QsXHJcblx0Ly8gXHRcdGhhc0R5bmFtaWNPZmZzZXQ6IHRydWUsXHJcblx0Ly8gXHRcdG1pbkJpbmRpbmdTaXplOiA2NCxcclxuXHQvLyBcdFx0bWF4T2Zmc2V0OiA2LFxyXG5cdC8vIFx0XHRzaXplOiAyNTYgKiA2XHJcblx0Ly8gXHR9KTtcclxuXHQvLyBcdHVuaWZvcm1CdWZmZXIuc2V0TWF0cml4NEFycmF5KFxyXG5cdC8vIFx0XHRcInZwTWF0cml4QXJyYXlcIixcclxuXHQvLyBcdFx0KCkgPT4ge1xyXG5cdC8vIFx0XHRcdGlmICh0aGlzLnZwTWF0cml4QXJyYXkubGVuZ3RoICE9IDYpIHRocm93IG5ldyBFcnJvcihcInBvaW50TGlnaHRTaGFkb3dDYW1lcmEgdW5pZm9ybUJ1ZmZlciBoYXMgRXJyb3JcIik7XHJcblxyXG5cdC8vIFx0XHRcdHJldHVybiB0aGlzLnZwTWF0cml4QXJyYXk7XHJcblx0Ly8gXHRcdH0sXHJcblx0Ly8gXHRcdDYsXHJcblx0Ly8gXHRcdDI1NlxyXG5cdC8vIFx0KTtcclxuXHJcblx0Ly8gXHR0aGlzLnNoYWRlckRhdGEuc2V0VW5pZm9ybUJ1ZmZlcihcInBvaW50TGlnaHRTaGFkb3dDYW1lcmFcIiwgdW5pZm9ybUJ1ZmZlcik7XHJcblx0Ly8gXHR0aGlzLnNoYWRlckRhdGEuc2V0RGVmaW5lKFwiaXNQb2ludExpZ2h0U2hhZG93TWFwXCIsIHRydWUpO1xyXG5cdC8vIH1cclxuXHJcblx0Y3JlYXRlU2hhZGVyRGF0YSgpIHtcclxuXHRcdHRoaXMuc2hhZGVyRGF0YSA9IG5ldyBTaGFkZXJEYXRhKFwiY2FtZXJhXCIsIDAsIDEsIDEpO1xyXG5cclxuXHRcdGNvbnN0IHVuaWZvcm1CdWZmZXIgPSBuZXcgVW5pZm9ybUJ1ZmZlcih7XHJcblx0XHRcdGxhYmVsOiBcInBvaW50TGlnaHRTaGFkb3dDYW1lcmFcIixcclxuXHRcdFx0dHlwZTogXCJyZWFkLW9ubHktc3RvcmFnZVwiLFxyXG5cdFx0XHR1c2FnZTogQnVmZmVyVXNhZ2UuU3RvcmFnZSB8IEJ1ZmZlclVzYWdlLkNvcHlEc3RcclxuXHRcdH0pO1xyXG5cdFx0dW5pZm9ybUJ1ZmZlci5zZXRVbmlmb3JtKFxyXG5cdFx0XHRcInZwTWF0cml4XCIsXHJcblx0XHRcdCgpID0+IHtcclxuXHRcdFx0XHRyZXR1cm4gdGhpcy52cE1hdHJpeDtcclxuXHRcdFx0fSxcclxuXHRcdFx0VW5pZm9ybUVudW0uTWF0NFxyXG5cdFx0KTtcclxuXHJcblx0XHR0aGlzLnNoYWRlckRhdGEuc2V0VW5pZm9ybUJ1ZmZlcihcInBvaW50TGlnaHRTaGFkb3dDYW1lcmFcIiwgdW5pZm9ybUJ1ZmZlcik7XHJcblx0XHR0aGlzLnNoYWRlckRhdGEuc2V0RGVmaW5lKFwiaXNQb2ludExpZ2h0U2hhZG93TWFwXCIsIHRydWUpO1xyXG5cdH1cclxuXHJcblx0dXBkYXRlVnBNYXRyaXhBcnJheUFuZEluZGV4KGluZGV4OiBudW1iZXIpIHtcclxuXHRcdE1hdHJpeDQuY2xvbmUodGhpcy52cE1hdHJpeCwgdGhpcy52cE1hdHJpeEFycmF5W2luZGV4XSk7XHJcblx0fVxyXG59XHJcbiIsImltcG9ydCBDYW1lcmEgZnJvbSBcIi4uLy4uL2NhbWVyYS9DYW1lcmFcIjtcclxuaW1wb3J0IHsgVGV4dHVyZUZvcm1hdCwgVGV4dHVyZVNhbXBsZVR5cGUsIFRleHR1cmVVc2FnZSB9IGZyb20gXCIuLi8uLi9jb3JlL1dlYkdQVUNvbnN0YW50XCI7XHJcbmltcG9ydCBWZWN0b3IyIGZyb20gXCIuLi8uLi9tYXRoL1ZlY3RvcjJcIjtcclxuaW1wb3J0IFZlY3RvcjQgZnJvbSBcIi4uLy4uL21hdGgvVmVjdG9yNFwiO1xyXG5pbXBvcnQgVGV4dHVyZSBmcm9tIFwiLi4vLi4vcmVuZGVyL1RleHR1cmVcIjtcclxuaW1wb3J0IHsgTGlnaHQgfSBmcm9tIFwiLi4vTGlnaHRcIjtcclxuZXhwb3J0IGNsYXNzIEJhc2VTaGFkb3cge1xyXG5cdHByb3RlY3RlZCBfc2hhZG93TWFwU2l6ZTogVmVjdG9yMjtcclxuXHRwcm90ZWN0ZWQgX2NhbWVyYTogQ2FtZXJhO1xyXG5cdHByb3RlY3RlZCBfc2hhZG93TWFwOiBUZXh0dXJlO1xyXG5cdHB1YmxpYyB0eXBlOiBzdHJpbmc7XHJcblx0cHVibGljIF92aWV3cG9ydHM6IEFycmF5PFZlY3RvcjQ+O1xyXG5cdHB1YmxpYyB2aWV3cG9ydFNpemU6IFZlY3RvcjI7XHJcblx0cHVibGljIGN1cnJlbnRWaWV3cG9ydEluZGV4OiBudW1iZXI7XHJcblx0cHVibGljIHZpZXdQb3J0RGlydHk6IGJvb2xlYW47XHJcblx0cHVibGljIHZwTWF0cml4RGlydHk6IGJvb2xlYW47XHJcblxyXG5cdGNvbnN0cnVjdG9yKHNoYWRvd01hcFNpemU6IFZlY3RvcjIsIGNhbWVyYTogQ2FtZXJhKSB7XHJcblx0XHR0aGlzLl9zaGFkb3dNYXBTaXplID0gc2hhZG93TWFwU2l6ZTtcclxuXHRcdHRoaXMuX2NhbWVyYSA9IGNhbWVyYTtcclxuXHRcdHRoaXMudmlld1BvcnREaXJ0eSA9IHRydWU7XHJcblx0XHR0aGlzLnZwTWF0cml4RGlydHkgPSB0cnVlO1xyXG5cclxuXHRcdHRoaXMuX2luaXQoKTtcclxuXHR9XHJcblxyXG5cdGdldCBjYW1lcmEoKSB7XHJcblx0XHRyZXR1cm4gdGhpcy5fY2FtZXJhO1xyXG5cdH1cclxuXHJcblx0Z2V0IHNoYWRvd01hcFNpemUoKSB7XHJcblx0XHRyZXR1cm4gdGhpcy5fc2hhZG93TWFwU2l6ZTtcclxuXHR9XHJcblxyXG5cdGdldCB2aWV3cG9ydHMoKSB7XHJcblx0XHRyZXR1cm4gdGhpcy5fdmlld3BvcnRzO1xyXG5cdH1cclxuXHJcblx0cHVibGljIGdldFNoYWRvd01hcFRleHR1cmUoKSB7XHJcblx0XHRyZXR1cm4gdGhpcy5fc2hhZG93TWFwO1xyXG5cdH1cclxuXHJcblx0cHJvdGVjdGVkIF9pbml0KCkge1xyXG5cdFx0dGhpcy5faW5pdFNoYWRvd01hcFRleHR1cmUoKTtcclxuXHR9XHJcblxyXG5cdHByb3RlY3RlZCBfaW5pdFNoYWRvd01hcFRleHR1cmUoKSB7XHJcblx0XHR0aGlzLl9jcmVhdGVTaGFkb3dNYXBUZXh0dXJlKCk7XHJcblx0fVxyXG5cclxuXHRwcm90ZWN0ZWQgX2NyZWF0ZVNoYWRvd01hcFRleHR1cmUoKSB7XHJcblx0XHR0aGlzLl9zaGFkb3dNYXAgPSBuZXcgVGV4dHVyZSh7XHJcblx0XHRcdHNpemU6IHtcclxuXHRcdFx0XHR3aWR0aDogdGhpcy5fc2hhZG93TWFwU2l6ZS54LFxyXG5cdFx0XHRcdGhlaWdodDogdGhpcy5fc2hhZG93TWFwU2l6ZS55LFxyXG5cdFx0XHRcdGRlcHRoOiAxXHJcblx0XHRcdH0sXHJcblx0XHRcdGZpeGVkU2l6ZTogdHJ1ZSxcclxuXHRcdFx0c2FtcGxlVHlwZTogVGV4dHVyZVNhbXBsZVR5cGUuRGVwdGgsXHJcblx0XHRcdGZvcm1hdDogVGV4dHVyZUZvcm1hdC5EZXB0aDI0UGx1cyxcclxuXHRcdFx0dXNhZ2U6IFRleHR1cmVVc2FnZS5SZW5kZXJBdHRhY2htZW50IHwgVGV4dHVyZVVzYWdlLlRleHR1cmVCaW5kaW5nIHwgVGV4dHVyZVVzYWdlLkNvcHlTcmNcclxuXHRcdH0pO1xyXG5cdH1cclxuXHJcblx0cHVibGljIHVwZGF0ZShsaWdodDogTGlnaHQpIHt9XHJcbn1cclxuIiwiaW1wb3J0IFBvaW50TGlnaHRTaGFkb3dDYW1lcmEgZnJvbSBcIi4uLy4uL2NhbWVyYS9Qb2ludExpZ2h0U2hhZG93Q2FtZXJhXCI7XHJcbmltcG9ydCBWZWN0b3IyIGZyb20gXCIuLi8uLi9tYXRoL1ZlY3RvcjJcIjtcclxuaW1wb3J0IFZlY3RvcjMgZnJvbSBcIi4uLy4uL21hdGgvVmVjdG9yM1wiO1xyXG5pbXBvcnQgVmVjdG9yNCBmcm9tIFwiLi4vLi4vbWF0aC9WZWN0b3I0XCI7XHJcbmltcG9ydCB7IFBvaW50TGlnaHQgfSBmcm9tIFwiLi4vUG9pbnRMaWdodFwiO1xyXG5pbXBvcnQgeyBCYXNlU2hhZG93IH0gZnJvbSBcIi4vQmFzZVNoYWRvd1wiO1xyXG5cclxuZXhwb3J0IGNsYXNzIFBvaW50TGlnaHRTaGFkb3cgZXh0ZW5kcyBCYXNlU2hhZG93IHtcclxuXHRwdWJsaWMgdHlwZTogc3RyaW5nO1xyXG5cdHByaXZhdGUgX3BvaW50TGlnaHRTaGFkb3dMb29rRGlyZWN0aW9uczogQXJyYXk8VmVjdG9yMz47XHJcblx0cHJpdmF0ZSBfcG9pbnRMaWdodFNoYWRvd1VwczogQXJyYXk8VmVjdG9yMz47XHJcblx0dnBNYXRyaXhBcnJheURpcnR5OiBib29sZWFuO1xyXG5cclxuXHRnZXQgY2FtZXJhKCk6IFBvaW50TGlnaHRTaGFkb3dDYW1lcmEge1xyXG5cdFx0cmV0dXJuIHRoaXMuX2NhbWVyYSBhcyBQb2ludExpZ2h0U2hhZG93Q2FtZXJhO1xyXG5cdH1cclxuXHJcblx0Y29uc3RydWN0b3IoKSB7XHJcblx0XHRjb25zdCBjYW1lcmEgPSBuZXcgUG9pbnRMaWdodFNoYWRvd0NhbWVyYSg5MCwgMSwgMC4xLCA1MDApO1xyXG5cdFx0c3VwZXIobmV3IFZlY3RvcjIoMTUzNiwgMTAyNCksIGNhbWVyYSk7XHJcblx0XHR0aGlzLnZpZXdwb3J0U2l6ZSA9IG5ldyBWZWN0b3IyKDUxMiwgNTEyKTtcclxuXHRcdHRoaXMuY3VycmVudFZpZXdwb3J0SW5kZXggPSAwO1xyXG5cdFx0dGhpcy50eXBlID0gXCJwb2ludExpZ2h0U2hhZG93XCI7XHJcblx0XHR0aGlzLnZwTWF0cml4QXJyYXlEaXJ0eSA9IHRydWU7XHJcblxyXG5cdFx0dGhpcy5fdmlld3BvcnRzID0gW1xyXG5cdFx0XHQvLyBwb3NpdGl2ZSBYIDBcclxuXHRcdFx0bmV3IFZlY3RvcjQoMCwgMCwgMSAvIDMsIDEgLyAyKSxcclxuXHRcdFx0Ly8gbmVnYXRpdmUgWCAxXHJcblx0XHRcdG5ldyBWZWN0b3I0KDEsIDAsIDEgLyAzLCAxIC8gMiksXHJcblx0XHRcdC8vIHBvc2l0aXZlIFogMlxyXG5cdFx0XHRuZXcgVmVjdG9yNCgyLCAwLCAxIC8gMywgMSAvIDIpLFxyXG5cdFx0XHQvLyBuZWdhdGl2ZSBaIDNcclxuXHRcdFx0bmV3IFZlY3RvcjQoMCwgMSwgMSAvIDMsIDEgLyAyKSxcclxuXHRcdFx0Ly8gcG9zaXRpdmUgWSA0XHJcblx0XHRcdG5ldyBWZWN0b3I0KDEsIDEsIDEgLyAzLCAxIC8gMiksXHJcblx0XHRcdC8vIG5lZ2F0aXZlIFkgNVxyXG5cdFx0XHRuZXcgVmVjdG9yNCgyLCAxLCAxIC8gMywgMSAvIDIpXHJcblx0XHRdO1xyXG5cclxuXHRcdHRoaXMuX3BvaW50TGlnaHRTaGFkb3dMb29rRGlyZWN0aW9ucyA9IFtcclxuXHRcdFx0bmV3IFZlY3RvcjMoMSwgMCwgMCksXHJcblx0XHRcdG5ldyBWZWN0b3IzKC0xLCAwLCAwKSxcclxuXHRcdFx0bmV3IFZlY3RvcjMoMCwgMCwgMSksXHJcblx0XHRcdG5ldyBWZWN0b3IzKDAsIDAsIC0xKSxcclxuXHRcdFx0bmV3IFZlY3RvcjMoMCwgMSwgMCksXHJcblx0XHRcdG5ldyBWZWN0b3IzKDAsIC0xLCAwKVxyXG5cdFx0XTtcclxuXHJcblx0XHR0aGlzLl9wb2ludExpZ2h0U2hhZG93VXBzID0gW1xyXG5cdFx0XHRuZXcgVmVjdG9yMygwLCAxLCAwKSxcclxuXHRcdFx0bmV3IFZlY3RvcjMoMCwgMSwgMCksXHJcblx0XHRcdG5ldyBWZWN0b3IzKDAsIDEsIDApLFxyXG5cdFx0XHRuZXcgVmVjdG9yMygwLCAxLCAwKSxcclxuXHRcdFx0bmV3IFZlY3RvcjMoMCwgMCwgMSksXHJcblx0XHRcdG5ldyBWZWN0b3IzKDAsIDAsIC0xKVxyXG5cdFx0XTtcclxuXHR9XHJcblxyXG5cdHB1YmxpYyB1cGRhdGUobGlnaHQ6IFBvaW50TGlnaHQpIHtcclxuXHRcdHRoaXMudXBkYXRlTWF0cmljZXMobGlnaHQpO1xyXG5cdH1cclxuXHJcblx0dXBkYXRlTWF0cmljZXMobGlnaHQ6IFBvaW50TGlnaHQpIHtcclxuXHRcdGlmICh0aGlzLmNhbWVyYSBpbnN0YW5jZW9mIFBvaW50TGlnaHRTaGFkb3dDYW1lcmEpIHtcclxuXHRcdFx0dGhpcy5jYW1lcmEucG9zaXRpb24uY29weShsaWdodC5wb3NpdGlvbik7XHJcblx0XHRcdGNvbnN0IHRhcmdldCA9IFZlY3RvcjMuY2xvbmUobGlnaHQucG9zaXRpb24pO1xyXG5cdFx0XHR0YXJnZXQuYWRkKHRoaXMuX3BvaW50TGlnaHRTaGFkb3dMb29rRGlyZWN0aW9uc1t0aGlzLmN1cnJlbnRWaWV3cG9ydEluZGV4XSk7XHJcblx0XHRcdHRoaXMuY2FtZXJhLnVwLmNvcHkodGhpcy5fcG9pbnRMaWdodFNoYWRvd1Vwc1t0aGlzLmN1cnJlbnRWaWV3cG9ydEluZGV4XSk7XHJcblx0XHRcdGNvbnN0IHsgeCwgeSwgeiB9ID0gdGFyZ2V0O1xyXG5cdFx0XHR0aGlzLmNhbWVyYS5sb29rQXQoeCwgeSwgeik7XHJcblx0XHRcdHRoaXMuY2FtZXJhLnVwZGF0ZU1hdHJpeCgpO1xyXG5cdFx0XHR0aGlzLmNhbWVyYS51cGRhdGVWcE1hdHJpeEFycmF5QW5kSW5kZXgodGhpcy5jdXJyZW50Vmlld3BvcnRJbmRleCk7XHJcblx0XHRcdGlmICh0aGlzLmN1cnJlbnRWaWV3cG9ydEluZGV4ID09IDUpIHRoaXMudnBNYXRyaXhBcnJheURpcnR5ID0gdHJ1ZTtcclxuXHRcdH1cclxuXHR9XHJcbn1cclxuIiwiaW1wb3J0IHsgTGlnaHRUeXBlIH0gZnJvbSBcIi4uL2NvcmUvV2ViR1BVVHlwZXNcIjtcclxuaW1wb3J0IFZlY3RvcjMgZnJvbSBcIi4uL21hdGgvVmVjdG9yM1wiO1xyXG5pbXBvcnQgeyBMaWdodCB9IGZyb20gXCIuL0xpZ2h0XCI7XHJcbmltcG9ydCB7IFBvaW50TGlnaHRTaGFkb3cgfSBmcm9tIFwiLi9zaGFkb3dzL1BvaW50TGlnaHRTaGFkb3dcIjtcclxuXHJcbmV4cG9ydCBjbGFzcyBQb2ludExpZ2h0IGV4dGVuZHMgTGlnaHQge1xyXG5cdHByaXZhdGUgX2Rpc3RhbmNlOiBudW1iZXI7XHJcblx0cHJpdmF0ZSBfZGVjYXk6IG51bWJlcjtcclxuXHRkaXN0YW5jZURpcnR5OiBib29sZWFuO1xyXG5cdGRlY2F5RGlydHk6IGJvb2xlYW47XHJcblxyXG5cdGdldCBzaGFkb3coKTogUG9pbnRMaWdodFNoYWRvdyB7XHJcblx0XHRyZXR1cm4gdGhpcy5fc2hhZG93IGFzIFBvaW50TGlnaHRTaGFkb3c7XHJcblx0fVxyXG5cclxuXHRzZXQgc2hhZG93KHZhbHVlOiBQb2ludExpZ2h0U2hhZG93KSB7XHJcblx0XHR0aGlzLnNoYWRvd0RpcnR5ID0gdHJ1ZTtcclxuXHRcdHRoaXMuX3NoYWRvdyA9IHZhbHVlO1xyXG5cdH1cclxuXHJcblx0Y29uc3RydWN0b3IoY29sb3I6IFZlY3RvcjMsIGludGVuc2l0eTogbnVtYmVyLCBkaXN0YW5jZSA9IDAsIGRlY2F5ID0gNCwgb3BlblNoYWRvdyA9IHRydWUpIHtcclxuXHRcdHN1cGVyKGNvbG9yLCBpbnRlbnNpdHkpO1xyXG5cdFx0dGhpcy5fZGlzdGFuY2UgPSBkaXN0YW5jZTtcclxuXHRcdHRoaXMuX2RlY2F5ID0gZGVjYXk7XHJcblx0XHR0aGlzLmRpc3RhbmNlRGlydHkgPSB0cnVlO1xyXG5cdFx0dGhpcy5kZWNheURpcnR5ID0gdHJ1ZTtcclxuXHRcdHRoaXMubGlnaHRUeXBlID0gTGlnaHRUeXBlLlBvaW50TGlnaHQ7XHJcblx0XHRpZiAob3BlblNoYWRvdykgdGhpcy5zaGFkb3cgPSBuZXcgUG9pbnRMaWdodFNoYWRvdygpO1xyXG5cdH1cclxuXHRzZXQgZGlzdGFuY2UodmFsdWUpIHtcclxuXHRcdHRoaXMuZGlzdGFuY2VEaXJ0eSA9IHRydWU7XHJcblx0XHR0aGlzLl9kaXN0YW5jZSA9IHZhbHVlO1xyXG5cdH1cclxuXHRnZXQgZGlzdGFuY2UoKSB7XHJcblx0XHRyZXR1cm4gdGhpcy5fZGlzdGFuY2U7XHJcblx0fVxyXG5cdHNldCBkZWNheSh2YWx1ZSkge1xyXG5cdFx0dGhpcy5kZWNheURpcnR5ID0gdHJ1ZTtcclxuXHRcdHRoaXMuX2RlY2F5ID0gdmFsdWU7XHJcblx0fVxyXG5cdGdldCBkZWNheSgpIHtcclxuXHRcdHJldHVybiB0aGlzLl9kZWNheTtcclxuXHR9XHJcbn1cclxuLy8gdW5pZm9ybVxyXG4vLyBjb2xvcjoge30sXHJcbi8vIHBvc2l0aW9uOiB7fSxcclxuLy8gZGVjYXk6IHt9LFxyXG4vLyBkaXN0YW5jZToge31cclxuIiwiaW1wb3J0IENhbWVyYSBmcm9tIFwiLi4vY2FtZXJhL0NhbWVyYVwiO1xyXG5pbXBvcnQgeyBGcmFtZVN0YXRlIH0gZnJvbSBcIi4uL2NvcmUvRnJhbWVTdGF0ZVwiO1xyXG5pbXBvcnQgTGlnaHRNYW5nZXIgZnJvbSBcIi4uL2NvcmUvTGlnaHRNYW5nZXJcIjtcclxuaW1wb3J0IFJlbmRlclF1ZXVlIGZyb20gXCIuLi9jb3JlL1JlbmRlclF1ZXVlXCI7XHJcbmltcG9ydCB7IENvbW1hbmRTdWJUeXBlIH0gZnJvbSBcIi4uL2NvcmUvV2ViR1BVQ29uc3RhbnRcIjtcclxuaW1wb3J0IHsgTGlnaHQgfSBmcm9tIFwiLi4vbGlnaHQvTGlnaHRcIjtcclxuaW1wb3J0IHsgUG9pbnRMaWdodCB9IGZyb20gXCIuLi9saWdodC9Qb2ludExpZ2h0XCI7XHJcbmltcG9ydCB7IEJhc2VTaGFkb3cgfSBmcm9tIFwiLi4vbGlnaHQvc2hhZG93cy9CYXNlU2hhZG93XCI7XHJcbmltcG9ydCB7IFBvaW50TGlnaHRTaGFkb3cgfSBmcm9tIFwiLi4vbGlnaHQvc2hhZG93cy9Qb2ludExpZ2h0U2hhZG93XCI7XHJcbmltcG9ydCBTaGFkZXJNYXRlcmlhbCBmcm9tIFwiLi4vbWF0ZXJpYWwvU2hhZGVyTWF0ZXJpYWxcIjtcclxuaW1wb3J0IEF0dGFjaG1lbnQgZnJvbSBcIi4uL3JlbmRlci9BdHRhY2htZW50XCI7XHJcbmltcG9ydCBDb250ZXh0IGZyb20gXCIuLi9yZW5kZXIvQ29udGV4dFwiO1xyXG5pbXBvcnQgUmVuZGVyVGFyZ2V0IGZyb20gXCIuLi9yZW5kZXIvUmVuZGVyVGFyZ2V0XCI7XHJcbmltcG9ydCBUZXh0dXJlIGZyb20gXCIuLi9yZW5kZXIvVGV4dHVyZVwiO1xyXG5pbXBvcnQgZ2V0VmVydEZyYWcgZnJvbSBcIi4uL3NoYWRlci9TaGFkZXJzXCI7XHJcbmltcG9ydCBQYXNzIGZyb20gXCIuL1Bhc3NcIjtcclxuZXhwb3J0IGNsYXNzIFNoYWRvd1Bhc3MgZXh0ZW5kcyBQYXNzIHtcclxuXHRwdWJsaWMgc2hhZG93TWF0ZXJpYWw6IFNoYWRlck1hdGVyaWFsO1xyXG5cdF90ZXN0VGV4dHVyZTogVGV4dHVyZTtcclxuXHRjb25zdHJ1Y3Rvcihjb250ZXh0OiBDb250ZXh0KSB7XHJcblx0XHRzdXBlcihjb250ZXh0KTtcclxuXHRcdHRoaXMuaW5pdChjb250ZXh0KTtcclxuXHR9XHJcblx0cmVuZGVyKGZyYW1lU3RhdGU6IEZyYW1lU3RhdGUsIGNhbWVyYT86IENhbWVyYSkge1xyXG5cdFx0Y29uc3QgeyByZW5kZXJRdWV1ZSwgY29udGV4dCwgbGlnaHRNYW5nZXIgfSA9IGZyYW1lU3RhdGU7XHJcblx0XHRjb25zdCBsaWdodHMgPSBsaWdodE1hbmdlci5nZXRBbGxMaWdodHMoKTtcclxuXHRcdGlmIChsaWdodHMubGVuZ3RoID09PSAwKSByZXR1cm47XHJcblxyXG5cdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCBsaWdodHMubGVuZ3RoOyBpKyspIHtcclxuXHRcdFx0Y29uc3QgbGlnaHQ6IFBvaW50TGlnaHQgfCBMaWdodCA9IGxpZ2h0c1tpXTtcclxuXHRcdFx0Y29uc3Qgc2hhZG93ID0gbGlnaHQuc2hhZG93O1xyXG5cdFx0XHRpZiAoIXNoYWRvdykgY29udGludWU7XHJcblx0XHRcdC8vIHRoaXMuX3Rlc3RUZXh0dXJlID0gY29udGV4dC5saWdodE1hbmdlci5fdGVzdFRleHR1cmVcclxuXHRcdFx0Ly8gdGhpcy5iZWZvcmVSZW5kZXIoeyBzaGFkb3cgfSk7XHJcblx0XHRcdGlmIChzaGFkb3cgaW5zdGFuY2VvZiBQb2ludExpZ2h0U2hhZG93ICYmIGxpZ2h0IGluc3RhbmNlb2YgUG9pbnRMaWdodCkge1xyXG5cdFx0XHRcdGZvciAobGV0IGkgPSAwOyBpIDwgc2hhZG93LnZpZXdwb3J0cy5sZW5ndGg7IGkrKykge1xyXG5cdFx0XHRcdFx0Ly8g5Yqo5oCBYnVmZmVy5pqC5pyq6LCD6YCa77yM5YWI5Lul5q2k56eN5pa55byP6Kej5YazXHJcblx0XHRcdFx0XHRzd2l0Y2ggKGkpIHtcclxuXHRcdFx0XHRcdFx0Y2FzZSAwOlxyXG5cdFx0XHRcdFx0XHRcdHRoaXMucmVuZGVyVGFyZ2V0LmRlcHRoQXR0YWNobWVudC5vcCA9IFwiY2xlYXJcIjtcclxuXHRcdFx0XHRcdFx0XHRicmVhaztcclxuXHJcblx0XHRcdFx0XHRcdGRlZmF1bHQ6XHJcblx0XHRcdFx0XHRcdFx0dGhpcy5yZW5kZXJUYXJnZXQuZGVwdGhBdHRhY2htZW50Lm9wID0gXCJsb2FkXCI7XHJcblx0XHRcdFx0XHRcdFx0YnJlYWs7XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHR0aGlzLmJlZm9yZVJlbmRlcih7IHNoYWRvdyB9KTtcclxuXHJcblx0XHRcdFx0XHRjb25zdCB2aWV3cG9ydCA9IHNoYWRvdy52aWV3cG9ydHNbaV07XHJcblx0XHRcdFx0XHRjb25zdCB2aWV3cG9ydFNpemUgPSBzaGFkb3cudmlld3BvcnRTaXplO1xyXG5cdFx0XHRcdFx0c2hhZG93LmN1cnJlbnRWaWV3cG9ydEluZGV4ID0gaTtcclxuXHRcdFx0XHRcdHNoYWRvdy51cGRhdGUobGlnaHQpO1xyXG5cdFx0XHRcdFx0Ly8gbGlnaHQuZm9yY2VVcGRhdGUgPSB0cnVlO1xyXG5cdFx0XHRcdFx0Y29udGV4dC5zZXRWaWV3UG9ydChcclxuXHRcdFx0XHRcdFx0dmlld3BvcnQueCAqIHZpZXdwb3J0U2l6ZS54LFxyXG5cdFx0XHRcdFx0XHR2aWV3cG9ydC55ICogdmlld3BvcnRTaXplLnksXHJcblx0XHRcdFx0XHRcdHZpZXdwb3J0U2l6ZS54LFxyXG5cdFx0XHRcdFx0XHR2aWV3cG9ydFNpemUueVxyXG5cdFx0XHRcdFx0KTtcclxuXHRcdFx0XHRcdGNvbnRleHQuc2V0U2Npc3NvclRlc3QoXHJcblx0XHRcdFx0XHRcdHZpZXdwb3J0LnggKiB2aWV3cG9ydFNpemUueCxcclxuXHRcdFx0XHRcdFx0dmlld3BvcnQueSAqIHZpZXdwb3J0U2l6ZS55LFxyXG5cdFx0XHRcdFx0XHR2aWV3cG9ydFNpemUueCxcclxuXHRcdFx0XHRcdFx0dmlld3BvcnRTaXplLnlcclxuXHRcdFx0XHRcdCk7XHJcblx0XHRcdFx0XHR0aGlzLnN1YlJlbmRlcihyZW5kZXJRdWV1ZSwgc2hhZG93LCBsaWdodE1hbmdlcik7XHJcblx0XHRcdFx0XHRzdXBlci5hZnRlclJlbmRlcigpO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHR0aGlzLnJlbmRlclRhcmdldC5kZXB0aEF0dGFjaG1lbnQub3AgPSBcImNsZWFyXCI7XHJcblx0XHRcdFx0dGhpcy5iZWZvcmVSZW5kZXIoeyBzaGFkb3cgfSk7XHJcblx0XHRcdFx0c2hhZG93LnVwZGF0ZShsaWdodCk7XHJcblx0XHRcdFx0Y29udGV4dC5zZXRWaWV3UG9ydCgwLCAwLCBzaGFkb3cuc2hhZG93TWFwU2l6ZS54LCBzaGFkb3cuc2hhZG93TWFwU2l6ZS55KTtcclxuXHRcdFx0XHRjb250ZXh0LnNldFNjaXNzb3JUZXN0KDAsIDAsIHNoYWRvdy5zaGFkb3dNYXBTaXplLngsIHNoYWRvdy5zaGFkb3dNYXBTaXplLnkpO1xyXG5cdFx0XHRcdHRoaXMuc3ViUmVuZGVyKHJlbmRlclF1ZXVlLCBzaGFkb3csIGxpZ2h0TWFuZ2VyKTtcclxuXHRcdFx0XHRzdXBlci5hZnRlclJlbmRlcigpO1xyXG5cdFx0XHR9XHJcblx0XHR9XHJcblx0XHQvLyBzdXBlci5hZnRlclJlbmRlcigpO1xyXG5cdFx0bGlnaHRNYW5nZXIudXBkYXRlTGlnaHRTaGFkb3coKTtcclxuXHRcdGNvbnRleHQucmVzZXRWaWV3UG9ydFRvRnVsbENhbnZhcygpO1xyXG5cdH1cclxuXHJcblx0c3ViUmVuZGVyKHJlbmRlclF1ZXVlOiBSZW5kZXJRdWV1ZSwgc2hhZG93OiBCYXNlU2hhZG93LCBsaWdodE1hbmdlcjogTGlnaHRNYW5nZXIpIHtcclxuXHRcdHJlbmRlclF1ZXVlLnNvcnQoKTtcclxuXHRcdC8vIHJlbmRlclF1ZXVlLnByZVJlbmRlcihzaGFkb3cuY2FtZXJhLCB0aGlzLmNvbnRleHQsIHRoaXMucGFzc1JlbmRlckVuY29kZXIpO1xyXG5cdFx0cmVuZGVyUXVldWUudHJhbnNwYXJlbnRSZW5kZXIoXHJcblx0XHRcdHNoYWRvdy5jYW1lcmEsXHJcblx0XHRcdHRoaXMuY29udGV4dCxcclxuXHRcdFx0dGhpcy5wYXNzUmVuZGVyRW5jb2RlcixcclxuXHRcdFx0dGhpcy5zaGFkb3dNYXRlcmlhbCxcclxuXHRcdFx0Q29tbWFuZFN1YlR5cGUuU2hhZG93LFxyXG5cdFx0XHRsaWdodE1hbmdlclxyXG5cdFx0KTtcclxuXHRcdHJlbmRlclF1ZXVlLm9wYXF1ZVJlbmRlcihcclxuXHRcdFx0c2hhZG93LmNhbWVyYSxcclxuXHRcdFx0dGhpcy5jb250ZXh0LFxyXG5cdFx0XHR0aGlzLnBhc3NSZW5kZXJFbmNvZGVyLFxyXG5cdFx0XHR0aGlzLnNoYWRvd01hdGVyaWFsLFxyXG5cdFx0XHRDb21tYW5kU3ViVHlwZS5TaGFkb3csXHJcblx0XHRcdGxpZ2h0TWFuZ2VyXHJcblx0XHQpO1xyXG5cdH1cclxuXHJcblx0Ly8gZ2V0RGVwdGhUZXh0dXJlKCk6IFRleHR1cmUge1xyXG5cdC8vIFx0cmV0dXJuIHRoaXMuX3Rlc3RUZXh0dXJlO1xyXG5cdC8vIH1cclxuXHRiZWZvcmVSZW5kZXIob3B0aW9uczogeyBzaGFkb3c6IEJhc2VTaGFkb3cgfSkge1xyXG5cdFx0Y29uc3QgeyBzaGFkb3cgfSA9IG9wdGlvbnM7XHJcblx0XHR0aGlzLnNldFJlbmRlclRhcmdldChzaGFkb3cpO1xyXG5cdFx0c3VwZXIuYmVmb3JlUmVuZGVyKCk7XHJcblx0fVxyXG5cdHB1YmxpYyBzZXRTaXplKHdpZHRoOiBudW1iZXIsIGhlaWdodDogbnVtYmVyKTogdm9pZCB7XHJcblx0XHR0aGlzLnJlbmRlclRhcmdldC5zZXRTaXplKHdpZHRoLCBoZWlnaHQsIDEpO1xyXG5cdH1cclxuXHRwcml2YXRlIHNldFJlbmRlclRhcmdldChzaGFkb3c6IEJhc2VTaGFkb3cpIHtcclxuXHRcdHRoaXMucmVuZGVyVGFyZ2V0LmRlcHRoQXR0YWNobWVudC50ZXh0dXJlID0gc2hhZG93LmdldFNoYWRvd01hcFRleHR1cmUoKTtcclxuXHR9XHJcblxyXG5cdHByaXZhdGUgaW5pdChjb250ZXh0OiBDb250ZXh0KSB7XHJcblx0XHR0aGlzLmNyZWF0ZVJlbmRlclRhcmdldChjb250ZXh0KTtcclxuXHRcdHRoaXMuY3JlYXRlU2hhZG93TWF0ZXJpYWwoKTtcclxuXHR9XHJcblx0cHJpdmF0ZSBjcmVhdGVSZW5kZXJUYXJnZXQoY29udGV4dDogQ29udGV4dCkge1xyXG5cdFx0Y29uc3QgZGVwdGhBdHRhY2htZW50ID0gbmV3IEF0dGFjaG1lbnQoMS4wLCB7IHRleHR1cmU6IHVuZGVmaW5lZCB9KTtcclxuXHRcdHRoaXMucmVuZGVyVGFyZ2V0ID0gbmV3IFJlbmRlclRhcmdldChcInJlbmRlclwiLCBbXSwgZGVwdGhBdHRhY2htZW50KTtcclxuXHR9XHJcblxyXG5cdHByaXZhdGUgY3JlYXRlU2hhZG93TWF0ZXJpYWwoKSB7XHJcblx0XHRjb25zdCBzaGFkb3dNYXBTaGFkZXJGdW5jdGlvbiA9IChkZWZpbmVzID0ge30pID0+IHtcclxuXHRcdFx0Y29uc3QgZmluYWxEZWZpbmVzID0gT2JqZWN0LmFzc2lnbihcclxuXHRcdFx0XHR7XHJcblx0XHRcdFx0XHRzZWxmQmluZGluZzogMCxcclxuXHRcdFx0XHRcdGNhbWVyYUJpbmRpbmc6IDAsXHJcblx0XHRcdFx0XHRwb3NpdGlvbkxvY2F0aW9uOiAwXHJcblx0XHRcdFx0fSxcclxuXHRcdFx0XHRkZWZpbmVzXHJcblx0XHRcdCk7XHJcblx0XHRcdHJldHVybiBnZXRWZXJ0RnJhZyhcInNoYWRvd01hcFwiLCBmaW5hbERlZmluZXMpLnZlcnQ7XHJcblx0XHR9O1xyXG5cclxuXHRcdHRoaXMuc2hhZG93TWF0ZXJpYWwgPSBuZXcgU2hhZGVyTWF0ZXJpYWwoe1xyXG5cdFx0XHR0eXBlOiBcInNoYWRvd01hdGVyaWFsXCIsXHJcblx0XHRcdHVuaWZvcm1zOiB7XHJcblx0XHRcdFx0bW9kZWxNYXRyaXg6IHsgdHlwZTogXCJtYXQ0eDQ8ZjMyPlwiLCB2YWx1ZTogbnVsbCB9XHJcblx0XHRcdH0sXHJcblx0XHRcdHZlcnQ6IHNoYWRvd01hcFNoYWRlckZ1bmN0aW9uLFxyXG5cdFx0XHRmcmFnOiB1bmRlZmluZWQsXHJcblx0XHRcdGxpZ2h0OiBmYWxzZSAvLyBUT0RPOuWFiHRydWXvvIxmYWxzZeacieaYvuekumJ1Z1xyXG5cdFx0fSk7XHJcblx0fVxyXG59XHJcbiIsImltcG9ydCBDYW1lcmEgZnJvbSBcIi4uL2NhbWVyYS9DYW1lcmFcIjtcclxuaW1wb3J0IHsgRnJhbWVTdGF0ZSB9IGZyb20gXCIuLi9jb3JlL0ZyYW1lU3RhdGVcIjtcclxuaW1wb3J0IHsgQmFzaWNQYXNzIH0gZnJvbSBcIi4uL3Bhc3MvQmFzaWNQYXNzXCI7XHJcbmltcG9ydCB7IFNoYWRvd1Bhc3MgfSBmcm9tIFwiLi4vcGFzcy9TaGFkb3dQYXNzXCI7XHJcbmltcG9ydCBDb250ZXh0IGZyb20gXCIuLi9yZW5kZXIvQ29udGV4dFwiO1xyXG5pbXBvcnQgVGV4dHVyZSBmcm9tIFwiLi4vcmVuZGVyL1RleHR1cmVcIjtcclxuaW1wb3J0IElCYXNlUmVuZGVyTGluZSBmcm9tIFwiLi9JQmFzZVJlbmRlckxpbmVcIjtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEZvcndhcmRSZW5kZXJMaW5lIGltcGxlbWVudHMgSUJhc2VSZW5kZXJMaW5lIHtcclxuXHRwcml2YXRlIGJhc2ljUGFzczogQmFzaWNQYXNzO1xyXG5cdHByb3RlY3RlZCBzaGFkb3dQYXNzOiBTaGFkb3dQYXNzO1xyXG5cdGNvbnN0cnVjdG9yKHB1YmxpYyBjb250ZXh0OiBDb250ZXh0KSB7XHJcblx0XHR0aGlzLmJhc2ljUGFzcyA9IG5ldyBCYXNpY1Bhc3MoY29udGV4dCk7XHJcblx0XHR0aGlzLnNoYWRvd1Bhc3MgPSBuZXcgU2hhZG93UGFzcyhjb250ZXh0KTtcclxuXHR9XHJcblx0Z2V0T3V0cHV0VGV4dHVyZSgpOiBUZXh0dXJlIHtcclxuXHRcdHJldHVybiB0aGlzLmJhc2ljUGFzcy5nZXRDb2xvclRleHR1cmUoMCk7XHJcblx0XHQvLyByZXR1cm4gdGhpcy5zaGFkb3dQYXNzLmdldERlcHRoVGV4dHVyZSgpXHJcblx0fVxyXG5cdHJlbmRlcihmcmFtZVN0YXRlOiBGcmFtZVN0YXRlLCBjYW1lcmE/OiBDYW1lcmEpIHtcclxuXHRcdHRoaXMuc2hhZG93UGFzcy5yZW5kZXIoZnJhbWVTdGF0ZSwgY2FtZXJhKTtcclxuXHJcblx0XHR0aGlzLmJhc2ljUGFzcy5iZWZvcmVSZW5kZXIoZnJhbWVTdGF0ZSk7XHJcblx0XHR0aGlzLmJhc2ljUGFzcy5yZW5kZXIoZnJhbWVTdGF0ZSwgY2FtZXJhKTtcclxuXHRcdHRoaXMuYmFzaWNQYXNzLmFmdGVyUmVuZGVyKCk7XHJcblx0fVxyXG5cdHNldFNpemUod2lkdGg6IG51bWJlciwgaGVpZ2h0OiBudW1iZXIpIHtcclxuXHRcdHRoaXMuYmFzaWNQYXNzLnNldFNpemUod2lkdGgsIGhlaWdodCk7XHJcblx0XHR0aGlzLnNoYWRvd1Bhc3Muc2V0U2l6ZSh3aWR0aCwgaGVpZ2h0KTtcclxuXHR9XHJcblx0ZGVzdHJveSgpIHtcclxuXHRcdHRoaXMuYmFzaWNQYXNzID0gdW5kZWZpbmVkO1xyXG5cdH1cclxufVxyXG4iLCJpbXBvcnQgQ2FtZXJhIGZyb20gXCIuL2NhbWVyYS9DYW1lcmFcIjtcclxuaW1wb3J0IFBlcnNwZWN0aXZlQ2FtZXJhIGZyb20gXCIuL2NhbWVyYS9QZXJzcGVjdGl2ZUNhbWVyYVwiO1xyXG5pbXBvcnQgeyBFdmVudERpc3BhdGNoZXIgfSBmcm9tIFwiLi9jb3JlL0V2ZW50RGlzcGF0Y2hlclwiO1xyXG5pbXBvcnQgeyBGcmFtZVN0YXRlLCBCYWNrZ3JvdW5kIH0gZnJvbSBcIi4vY29yZS9GcmFtZVN0YXRlXCI7XHJcbmltcG9ydCBMaWdodE1hbmdlciBmcm9tIFwiLi9jb3JlL0xpZ2h0TWFuZ2VyXCI7XHJcbmltcG9ydCBNZXNoTWFuZ2VyIGZyb20gXCIuL2NvcmUvTWVzaE1hbmdlclwiO1xyXG5pbXBvcnQgdGV4dHVyZUNhY2hlIGZyb20gXCIuL2NvcmUvVGV4dHVyZUNhY2hlXCI7XHJcbmltcG9ydCB7IEluc3RhbmNlLCBSZW5kZXJPYmplY3RUeXBlIH0gZnJvbSBcIi4vY29yZS9XZWJHUFVUeXBlc1wiO1xyXG5pbXBvcnQgeyBMaWdodCB9IGZyb20gXCIuL2xpZ2h0L0xpZ2h0XCI7XHJcbmltcG9ydCB7IE1lc2ggfSBmcm9tIFwiLi9tZXNoL01lc2hcIjtcclxuaW1wb3J0IE5vZGUgZnJvbSBcIi4vbWVzaC9Ob2RlXCI7XHJcbmltcG9ydCBQb3N0RWZmZWN0IGZyb20gXCIuL3Bvc3QtcHJvY2Vzcy9Qb3N0RWZmZWN0XCI7XHJcbmltcG9ydCBQb3N0RWZmZWN0Q29sbGVjdGlvbiBmcm9tIFwiLi9wb3N0LXByb2Nlc3MvUG9zdEVmZmVjdENvbGxlY3Rpb25cIjtcclxuaW1wb3J0IENvbnRleHQgZnJvbSBcIi4vcmVuZGVyL0NvbnRleHRcIjtcclxuaW1wb3J0IHsgVmlld1BvcnQgfSBmcm9tIFwiLi9yZW5kZXIvUmVuZGVyU3RhdGVcIjtcclxuaW1wb3J0IEZvcndhcmRSZW5kZXJMaW5lIGZyb20gXCIuL3JlbmRlcnBpcGVsaW5lL0ZvcndhcmRSZW5kZXJMaW5lXCI7XHJcbmltcG9ydCBJQmFzZVJlbmRlckxpbmUgZnJvbSBcIi4vcmVuZGVycGlwZWxpbmUvSUJhc2VSZW5kZXJMaW5lXCI7XHJcblxyXG5leHBvcnQgY2xhc3MgU2NlbmUgZXh0ZW5kcyBFdmVudERpc3BhdGNoZXIge1xyXG5cdGNhbWVyYTogUGVyc3BlY3RpdmVDYW1lcmE7XHJcblx0Y29udGV4dDogQ29udGV4dDtcclxuXHRyZXF1ZXN0QWRhcHRlcjogb2JqZWN0O1xyXG5cdGRldmljZURlc2NyaXB0b3I6IG9iamVjdDtcclxuXHRwcmVzZW50YXRpb25Db250ZXh0RGVzY3JpcHRvcjogb2JqZWN0O1xyXG5cdGNvbnRhaW5lcjogSFRNTERpdkVsZW1lbnQ7XHJcblx0ZnJhbWVTdGF0ZTogRnJhbWVTdGF0ZTtcclxuXHRjdXJyZW50UmVuZGVyUGlwZWxpbmU6IElCYXNlUmVuZGVyTGluZTtcclxuXHR2aWV3cG9ydDogVmlld1BvcnQ7XHJcblx0YmFja2dyb3VuZDogQmFja2dyb3VuZDtcclxuXHRwcml2YXRlIHJlYWR5OiBib29sZWFuO1xyXG5cdHByaXZhdGUgaW5pdGVkOiBib29sZWFuO1xyXG5cdHByaXZhdGUgbWVzaE1hbmdlcjogTWVzaE1hbmdlcjtcclxuXHRwcml2YXRlIHBvc3RFZmZlY3RDb2xsZWN0aW9uOiBQb3N0RWZmZWN0Q29sbGVjdGlvbjtcclxuXHRwcml2YXRlIGxpZ2h0TWFuZ2VyOiBMaWdodE1hbmdlcjtcclxuXHRjb25zdHJ1Y3RvcihvcHRpb25zKSB7XHJcblx0XHRzdXBlcigpO1xyXG5cdFx0dGhpcy5jb250YWluZXIgPVxyXG5cdFx0XHRvcHRpb25zLmNvbnRhaW5lciBpbnN0YW5jZW9mIEhUTUxEaXZFbGVtZW50XHJcblx0XHRcdFx0PyBvcHRpb25zLmNvbnRhaW5lclxyXG5cdFx0XHRcdDogZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQob3B0aW9ucy5jb250YWluZXIpO1xyXG5cdFx0dGhpcy5tZXNoTWFuZ2VyID0gbmV3IE1lc2hNYW5nZXIoKTtcclxuXHRcdHRoaXMucG9zdEVmZmVjdENvbGxlY3Rpb24gPSBuZXcgUG9zdEVmZmVjdENvbGxlY3Rpb24oKTtcclxuXHRcdHRoaXMuY29udGV4dCA9IG5ldyBDb250ZXh0KHtcclxuXHRcdFx0Y2FudmFzOiBudWxsLFxyXG5cdFx0XHRjb250YWluZXI6IHRoaXMuY29udGFpbmVyLFxyXG5cdFx0XHRwaXhlbFJhdGlvOiAxXHJcblx0XHR9KTtcclxuXHRcdHRoaXMucmVxdWVzdEFkYXB0ZXIgPSBvcHRpb25zLnJlcXVlc3RBZGFwdGVyIHx8IHt9O1xyXG5cdFx0dGhpcy5kZXZpY2VEZXNjcmlwdG9yID0gb3B0aW9ucy5kZXZpY2VEZXNjcmlwdG9yIHx8IHt9O1xyXG5cdFx0dGhpcy5wcmVzZW50YXRpb25Db250ZXh0RGVzY3JpcHRvciA9IG9wdGlvbnMucHJlc2VudGF0aW9uQ29udGV4dERlc2NyaXB0b3I7XHJcblx0XHR0aGlzLnJlYWR5ID0gZmFsc2U7XHJcblx0XHR0aGlzLmluaXRlZCA9IGZhbHNlO1xyXG5cdFx0dGhpcy5saWdodE1hbmdlciA9IG5ldyBMaWdodE1hbmdlcih7IG9wZW5TaGFkb3c6IHRydWUgfSk7XHJcblx0XHR0aGlzLmJhY2tncm91bmQgPSBvcHRpb25zLmJhY2tncm91bmQ7XHJcblx0fVxyXG5cdHByaXZhdGUgYXN5bmMgaW5pdCgpIHtcclxuXHRcdGF3YWl0IHRoaXMuY29udGV4dC5pbml0KHRoaXMucmVxdWVzdEFkYXB0ZXIsIHRoaXMuZGV2aWNlRGVzY3JpcHRvciwgdGhpcy5wcmVzZW50YXRpb25Db250ZXh0RGVzY3JpcHRvcik7XHJcblx0XHR0aGlzLmN1cnJlbnRSZW5kZXJQaXBlbGluZSA9IG5ldyBGb3J3YXJkUmVuZGVyTGluZSh0aGlzLmNvbnRleHQpO1xyXG5cdFx0dGhpcy5mcmFtZVN0YXRlID0gbmV3IEZyYW1lU3RhdGUodGhpcy5jb250ZXh0LCB0aGlzLmxpZ2h0TWFuZ2VyLCBGcmFtZVN0YXRlLmdldEZyYW1lU3RhdGVPcHRpb25zQnlTY2VuZSh0aGlzKSk7XHJcblx0XHR0aGlzLnZpZXdwb3J0ID0gbmV3IFZpZXdQb3J0KDAsIDAsIHRoaXMuY29udGV4dC5wcmVzZW50YXRpb25TaXplLndpZHRoLCB0aGlzLmNvbnRleHQucHJlc2VudGF0aW9uU2l6ZS5oZWlnaHQpO1xyXG5cdFx0dGhpcy5yZWFkeSA9IHRydWU7XHJcblx0fVxyXG5cdGFkZChpbnN0YW5jZTogSW5zdGFuY2UpIHtcclxuXHRcdGlmIChcclxuXHRcdFx0W1JlbmRlck9iamVjdFR5cGUuTm9kZSwgUmVuZGVyT2JqZWN0VHlwZS5Ta3lib3gsIFJlbmRlck9iamVjdFR5cGUuTWVzaCwgUmVuZGVyT2JqZWN0VHlwZS5EZWJ1Z10uaW5jbHVkZXMoXHJcblx0XHRcdFx0aW5zdGFuY2UudHlwZVxyXG5cdFx0XHQpXHJcblx0XHQpIHtcclxuXHRcdFx0dGhpcy5tZXNoTWFuZ2VyLmFkZCg8TWVzaD5pbnN0YW5jZSk7XHJcblx0XHR9IGVsc2UgaWYgKGluc3RhbmNlLnR5cGUgPT0gUmVuZGVyT2JqZWN0VHlwZS5MaWdodCkge1xyXG5cdFx0XHR0aGlzLmxpZ2h0TWFuZ2VyLmFkZCg8TGlnaHQ+aW5zdGFuY2UpO1xyXG5cdFx0fSBlbHNlIGlmIChpbnN0YW5jZS50eXBlID09IFJlbmRlck9iamVjdFR5cGUuUG9zdEVmZmVjdCkge1xyXG5cdFx0XHR0aGlzLnBvc3RFZmZlY3RDb2xsZWN0aW9uLmFkZCg8UG9zdEVmZmVjdD5pbnN0YW5jZSk7XHJcblx0XHR9XHJcblx0fVxyXG5cdHJlbW92ZShpbnN0YW5jZTogSW5zdGFuY2UpIHtcclxuXHRcdGlmIChbUmVuZGVyT2JqZWN0VHlwZS5Ob2RlLCBSZW5kZXJPYmplY3RUeXBlLlNreWJveCwgUmVuZGVyT2JqZWN0VHlwZS5NZXNoXS5pbmNsdWRlcyhpbnN0YW5jZS50eXBlKSkge1xyXG5cdFx0XHR0aGlzLm1lc2hNYW5nZXIucmVtb3ZlKDxNZXNoPmluc3RhbmNlKTtcclxuXHRcdH0gZWxzZSBpZiAoaW5zdGFuY2UudHlwZSA9PSBSZW5kZXJPYmplY3RUeXBlLkxpZ2h0KSB7XHJcblx0XHRcdHRoaXMubGlnaHRNYW5nZXIucmVtb3ZlKDxMaWdodD5pbnN0YW5jZSk7XHJcblx0XHR9IGVsc2UgaWYgKGluc3RhbmNlLnR5cGUgPT0gUmVuZGVyT2JqZWN0VHlwZS5Qb3N0RWZmZWN0KSB7XHJcblx0XHRcdHRoaXMucG9zdEVmZmVjdENvbGxlY3Rpb24ucmVtb3ZlKDxQb3N0RWZmZWN0Pmluc3RhbmNlKTtcclxuXHRcdH1cclxuXHR9XHJcblx0c2V0Q2FtZXJhKGNhbWVyYSkge1xyXG5cdFx0dGhpcy5jYW1lcmEgPSBjYW1lcmE7XHJcblx0fVxyXG5cdHJlc2l6ZSh3aWR0aDogbnVtYmVyLCBoZWlnaHQ6IG51bWJlcikge1xyXG5cdFx0dGhpcy5jb250ZXh0LnJlc2l6ZSh3aWR0aCwgaGVpZ2h0KTtcclxuXHRcdHRoaXM/LmN1cnJlbnRSZW5kZXJQaXBlbGluZT8uc2V0U2l6ZSh3aWR0aCwgaGVpZ2h0KTtcclxuXHRcdHRoaXM/LnBvc3RFZmZlY3RDb2xsZWN0aW9uPy5zZXRTaXplKHdpZHRoLCBoZWlnaHQpO1xyXG5cdH1cclxuXHRhc3luYyByZW5kZXIobm9kZT86IE5vZGUsIGNhbWVyYT86IENhbWVyYSkge1xyXG5cdFx0aWYgKCF0aGlzLmluaXRlZCkge1xyXG5cdFx0XHR0aGlzLmluaXRlZCA9IHRydWU7XHJcblx0XHRcdGF3YWl0IHRoaXMuaW5pdCgpO1xyXG5cdFx0XHR0aGlzLnVwZGF0ZShub2RlLCBjYW1lcmEpO1xyXG5cdFx0XHR0aGlzLmFmdGVyUmVuZGVyKCk7XHJcblx0XHR9IGVsc2Uge1xyXG5cdFx0XHR0aGlzLnVwZGF0ZShub2RlLCBjYW1lcmEpO1xyXG5cdFx0XHR0aGlzLmFmdGVyUmVuZGVyKCk7XHJcblx0XHR9XHJcblx0fVxyXG5cclxuXHRhZnRlclJlbmRlcigpIHtcclxuXHRcdC8vIFRPRE9cclxuXHR9XHJcblxyXG5cdHB1YmxpYyBzZXRWaWV3UG9ydCh4OiBudW1iZXIsIHk6IG51bWJlciwgd2lkdGg6IG51bWJlciwgaGVpZ2h0OiBudW1iZXIpOiBib29sZWFuIHtcclxuXHRcdGlmICghdGhpcy5yZWFkeSkgcmV0dXJuIGZhbHNlO1xyXG5cdFx0dGhpcy5jb250ZXh0LnNldFZpZXdQb3J0KHgsIHksIHdpZHRoLCBoZWlnaHQpO1xyXG5cdFx0cmV0dXJuIHRydWU7XHJcblx0fVxyXG5cdHB1YmxpYyBzZXRTY2lzc29yVGVzdCh4OiBudW1iZXIsIHk6IG51bWJlciwgd2lkdGg6IG51bWJlciwgaGVpZ2h0OiBudW1iZXIpOiBib29sZWFuIHtcclxuXHRcdGlmICghdGhpcy5yZWFkeSkgcmV0dXJuIGZhbHNlO1xyXG5cdFx0dGhpcy5jb250ZXh0LnNldFNjaXNzb3JUZXN0KHgsIHksIHdpZHRoLCBoZWlnaHQpO1xyXG5cdFx0cmV0dXJuIHRydWU7XHJcblx0fVxyXG5cdHByaXZhdGUgdXBkYXRlKG5vZGU/OiBOb2RlLCBjYW1lcmE/OiBDYW1lcmEpIHtcclxuXHRcdGlmICghdGhpcy5yZWFkeSkgcmV0dXJuO1xyXG5cdFx0Ly8g6YeK5pS+57q555CGXHJcblx0XHR0ZXh0dXJlQ2FjaGUucmVsZWFzZWRUZXh0dXJlcygpO1xyXG5cdFx0Ly8g5pu05pawRnJhbWVTdGF0ZVxyXG5cdFx0dGhpcy5mcmFtZVN0YXRlLnVwZGF0ZShjYW1lcmEgPz8gdGhpcy5jYW1lcmEsIEZyYW1lU3RhdGUuZ2V0RnJhbWVTdGF0ZU9wdGlvbnNCeVNjZW5lKHRoaXMpKTtcclxuXHRcdC8vIHVwZGF0ZSBwcmltaXRpdmUgYW5kIHNlbGVjdFxyXG5cdFx0KG5vZGUgPz8gdGhpcy5tZXNoTWFuZ2VyKS51cGRhdGUodGhpcy5mcmFtZVN0YXRlLCBjYW1lcmEgPz8gdGhpcy5jYW1lcmEpO1xyXG5cdFx0Ly8gc2VsY3QgcmVuZGVyUGlwZWxpbmVcclxuXHRcdHRoaXMuY3VycmVudFJlbmRlclBpcGVsaW5lLnJlbmRlcih0aGlzLmZyYW1lU3RhdGUsIGNhbWVyYSA/PyB0aGlzLmNhbWVyYSk7XHJcblx0XHQvLyDlkI7lpITnkIZcclxuXHRcdHRoaXMucG9zdEVmZmVjdENvbGxlY3Rpb24ucmVuZGVyKHRoaXMuY29udGV4dCwgdGhpcy5jdXJyZW50UmVuZGVyUGlwZWxpbmUuZ2V0T3V0cHV0VGV4dHVyZSgpKTtcclxuXHR9XHJcbn1cclxuIiwiaW1wb3J0IElDbG9uZSBmcm9tIFwiLi4vY29yZS9JQ2xvbmVcIjtcclxuaW1wb3J0IHsgUmVuZGVyT2JqZWN0VHlwZSB9IGZyb20gXCIuLi9jb3JlL1dlYkdQVVR5cGVzXCI7XHJcbmltcG9ydCBHZW9tZXRyeSBmcm9tIFwiLi4vZ2VvbWV0cnkvR2VvbWV0cnlcIjtcclxuaW1wb3J0IHsgTWVzaCB9IGZyb20gXCIuLi9tZXNoL01lc2hcIjtcclxuaW1wb3J0IHsgRmxvYXQzMkF0dHJpYnV0ZSB9IGZyb20gXCIuLi9yZW5kZXIvQXR0cmlidXRlXCI7XHJcbmltcG9ydCBDb250ZXh0IGZyb20gXCIuLi9yZW5kZXIvQ29udGV4dFwiO1xyXG5pbXBvcnQgeyBQcmltaXRpdmUsIFJlbmRlclN0YXRlLCBUYXJnZXQgfSBmcm9tIFwiLi4vcmVuZGVyL1JlbmRlclN0YXRlXCI7XHJcbmltcG9ydCBSZW5kZXJUYXJnZXQgZnJvbSBcIi4uL3JlbmRlci9SZW5kZXJUYXJnZXRcIjtcclxuaW1wb3J0IFNhbXBsZXIgZnJvbSBcIi4uL3JlbmRlci9TYW1wbGVyXCI7XHJcbmltcG9ydCBUZXh0dXJlIGZyb20gXCIuLi9yZW5kZXIvVGV4dHVyZVwiO1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgUG9zdEVmZmVjdCBpbXBsZW1lbnRzIElDbG9uZSB7XHJcblx0d2lkdGg6IG51bWJlcjtcclxuXHJcblx0aGVpZ2h0OiBudW1iZXI7XHJcblxyXG5cdGRlZmF1bHRTYW1wbGVyOiBTYW1wbGVyO1xyXG5cclxuXHRyZXNvbHZlVG9DYW52YXM6IGJvb2xlYW47XHJcblxyXG5cdGN1cnJlbnRSZW5kZXJUYXJnZXQ6IFJlbmRlclRhcmdldDtcclxuXHJcblx0ZnVsbFNjcmVlblF1YWQ6IE1lc2g7XHJcblxyXG5cdHJlbmRlclN0YXRlOiBSZW5kZXJTdGF0ZTtcclxuXHJcblx0aWQ6IHN0cmluZztcclxuXHJcblx0cHJpb3JpdHk6IG51bWJlcjtcclxuXHJcblx0aXNQb3N0RWZmZWN0OiBib29sZWFuO1xyXG5cclxuXHR0eXBlOiBSZW5kZXJPYmplY3RUeXBlO1xyXG5cclxuXHRjb25zdHJ1Y3Rvcih3aWR0aDogbnVtYmVyLCBoZWlnaHQ6IG51bWJlciwgaWQ6IHN0cmluZykge1xyXG5cdFx0dGhpcy53aWR0aCA9IHdpZHRoO1xyXG5cdFx0dGhpcy5oZWlnaHQgPSBoZWlnaHQ7XHJcblx0XHR0aGlzLmluaXREZWZhdWx0UGFybXMoKTtcclxuXHRcdHRoaXMuaWQgPSBpZDtcclxuXHRcdHRoaXMucHJpb3JpdHkgPSAwO1xyXG5cdFx0dGhpcy5pc1Bvc3RFZmZlY3QgPSB0cnVlO1xyXG5cdFx0dGhpcy50eXBlID0gUmVuZGVyT2JqZWN0VHlwZS5Qb3N0RWZmZWN0O1xyXG5cdH1cclxuXHRyZW5kZXIoY29udGV4dDogQ29udGV4dCwgY29sb3JUZXh0dXJlOiBUZXh0dXJlKTogVGV4dHVyZSB7XHJcblx0XHRyZXR1cm4gbnVsbDtcclxuXHR9XHJcblx0c2V0U2l6ZSh3aWR0aDogbnVtYmVyLCBoZWlnaHQ6IG51bWJlcik6IHZvaWQge1xyXG5cdFx0Ly8gdG9kbyA7XHJcblx0fVxyXG5cdGRlc3Ryb3koKSB7XHJcblx0XHR0aGlzPy5jdXJyZW50UmVuZGVyVGFyZ2V0Py5kZXN0cm95KCk7XHJcblx0fVxyXG5cdHByb3RlY3RlZCByZW5kZXJNZXNoKGNvbnRleHQ6IENvbnRleHQpIHtcclxuXHRcdHRoaXMuZnVsbFNjcmVlblF1YWQubWF0ZXJpYWwuZGlydHkgPSB0cnVlO1xyXG5cdFx0dGhpcy5mdWxsU2NyZWVuUXVhZC5tYXRlcmlhbC51cGRhdGUoKTtcclxuXHRcdGNvbnN0IGRyYXdDb21hbmQgPSB0aGlzLmZ1bGxTY3JlZW5RdWFkLmdldERyYXdDb21tYW5kKCk7XHJcblx0XHRjb25zdCBjdXJyZW50UmVuZGVyUGFzc0VuY29kZXIgPSB0aGlzLmN1cnJlbnRSZW5kZXJUYXJnZXQuYmVnaW5SZW5kZXJQYXNzKGNvbnRleHQuZGV2aWNlKTtcclxuXHRcdGRyYXdDb21hbmQucmVuZGVyKHsgZGV2aWNlOiBjb250ZXh0LmRldmljZSwgcGFzc0VuY29kZXI6IGN1cnJlbnRSZW5kZXJQYXNzRW5jb2RlciB9KTtcclxuXHRcdHRoaXMuY3VycmVudFJlbmRlclRhcmdldC5lbmRSZW5kZXJQYXNzKCk7XHJcblx0fVxyXG5cdHByaXZhdGUgaW5pdERlZmF1bHRQYXJtcygpIHtcclxuXHRcdGNvbnN0IGdlb21ldHJ5ID0gbmV3IEdlb21ldHJ5KHt9KTtcclxuXHRcdGdlb21ldHJ5LnNldEF0dHJpYnV0ZShcclxuXHRcdFx0bmV3IEZsb2F0MzJBdHRyaWJ1dGUoXCJwb3NpdGlvblwiLCBbLTEuMCwgMS4wLCAtMS4wLCAtMS4wLCAxLjAsIC0xLjAsIDEuMCwgLTEuMCwgMS4wLCAxLjAsIC0xLjAsIDEuMF0sIDIpXHJcblx0XHQpO1xyXG5cdFx0Z2VvbWV0cnkuY291bnQgPSA2O1xyXG5cdFx0Ly8gcnNcclxuXHRcdGNvbnN0IHByaW1pdGl2ZSA9IG5ldyBQcmltaXRpdmUoKTtcclxuXHRcdGNvbnN0IHRhcmdldCA9IG5ldyBUYXJnZXQoKTtcclxuXHRcdC8vIHRhcmdldC5mb3JtYXQ9VGV4dHVyZUZvcm1hdC5SR0JBOFVub3JtXHJcblx0XHRjb25zdCByZW5kZXJTdGF0ZSA9IG5ldyBSZW5kZXJTdGF0ZSgpO1xyXG5cdFx0cmVuZGVyU3RhdGUucHJpbWl0aXZlID0gcHJpbWl0aXZlO1xyXG5cdFx0cmVuZGVyU3RhdGUudGFyZ2V0cyA9IFt0YXJnZXRdO1xyXG5cdFx0dGhpcy5yZW5kZXJTdGF0ZSA9IHJlbmRlclN0YXRlO1xyXG5cdFx0dGhpcy5mdWxsU2NyZWVuUXVhZCA9IG5ldyBNZXNoKGdlb21ldHJ5KTtcclxuXHJcblx0XHR0aGlzLmRlZmF1bHRTYW1wbGVyID0gbmV3IFNhbXBsZXIoKTtcclxuXHR9XHJcbn1cclxuIiwiaW1wb3J0IHsgVGV4dHVyZUZvcm1hdCwgVGV4dHVyZVVzYWdlIH0gZnJvbSBcIi4uL2NvcmUvV2ViR1BVQ29uc3RhbnRcIjtcclxuaW1wb3J0IHsgVW5pZm9ybXMgfSBmcm9tIFwiLi4vY29yZS9XZWJHUFVUeXBlc1wiO1xyXG5pbXBvcnQgU2hhZGVyTWF0ZXJpYWwgZnJvbSBcIi4uL21hdGVyaWFsL1NoYWRlck1hdGVyaWFsXCI7XHJcbmltcG9ydCBDb2xvciBmcm9tIFwiLi4vbWF0aC9Db2xvclwiO1xyXG5pbXBvcnQgVmVjdG9yMiBmcm9tIFwiLi4vbWF0aC9WZWN0b3IyXCI7XHJcbmltcG9ydCBWZWN0b3IzIGZyb20gXCIuLi9tYXRoL1ZlY3RvcjNcIjtcclxuaW1wb3J0IEF0dGFjaG1lbnQgZnJvbSBcIi4uL3JlbmRlci9BdHRhY2htZW50XCI7XHJcbmltcG9ydCBDb250ZXh0IGZyb20gXCIuLi9yZW5kZXIvQ29udGV4dFwiO1xyXG5pbXBvcnQgUmVuZGVyVGFyZ2V0IGZyb20gXCIuLi9yZW5kZXIvUmVuZGVyVGFyZ2V0XCI7XHJcbmltcG9ydCBUZXh0dXJlIGZyb20gXCIuLi9yZW5kZXIvVGV4dHVyZVwiO1xyXG5pbXBvcnQgZ2V0VmVydEZyYWcgZnJvbSBcIi4uL3NoYWRlci9TaGFkZXJzXCI7XHJcbmltcG9ydCBQb3N0RWZmZWN0IGZyb20gXCIuL1Bvc3RFZmZlY3RcIjtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIEJsb29tUG9zdEVmZmVjdCBleHRlbmRzIFBvc3RFZmZlY3Qge1xyXG5cdHN0YXRpYyBCbHVyRGlyZWN0aW9uWCA9IG5ldyBWZWN0b3IyKDEuMCwgMC4wKTtcclxuXHRzdGF0aWMgQmx1ckRpcmVjdGlvblkgPSBuZXcgVmVjdG9yMigwLjAsIDEuMCk7XHJcblx0c3RyZW5ndGg6IG51bWJlcjtcclxuXHRyYWRpdXM6IG51bWJlcjtcclxuXHR0aHJlc2hvbGQ6IG51bWJlcjtcclxuXHRyZW5kZXJUYXJnZXRzSG9yaXpvbnRhbDogUmVuZGVyVGFyZ2V0W107XHJcblx0cmVuZGVyVGFyZ2V0c1ZlcnRpY2FsOiBSZW5kZXJUYXJnZXRbXTtcclxuXHRuTWlwczogbnVtYmVyO1xyXG5cdHJlbmRlclRhcmdldEJyaWdodDogUmVuZGVyVGFyZ2V0O1xyXG5cdG1hdGVyaWFsSGlnaFBhc3NGaWx0ZXI6IFNoYWRlck1hdGVyaWFsO1xyXG5cdGhpZ2hQYXNzVW5pZm9ybXM6IFVuaWZvcm1zO1xyXG5cdGNvbXBvc2l0ZU1hdGVyaWFsOiBTaGFkZXJNYXRlcmlhbDtcclxuXHRzZXBhcmFibGVCbHVyTWF0ZXJpYWxzOiBTaGFkZXJNYXRlcmlhbFtdO1xyXG5cdHNlcGFyYWJsZUJsdXJZTWF0ZXJpYWxzOiBTaGFkZXJNYXRlcmlhbFtdO1xyXG5cdGJsZW5kVW5pZm9ybXM6IFVuaWZvcm1zO1xyXG5cdGJsZW5kTWF0ZXJpYWw6IFNoYWRlck1hdGVyaWFsO1xyXG5cdGJsZW5kVGFyZ2V0OiBSZW5kZXJUYXJnZXQ7XHJcblxyXG5cdGNvbnN0cnVjdG9yKG9wdGlvbnM6IEJsb29tUG9zdEVmZmVjdFByb3BzKSB7XHJcblx0XHRzdXBlcihvcHRpb25zLndpZHRoLCBvcHRpb25zLmhlaWdodCwgXCJibG9vbVwiKTtcclxuXHRcdHRoaXMuc3RyZW5ndGggPSBvcHRpb25zLnN0cmVuZ3RoO1xyXG5cdFx0dGhpcy5yYWRpdXMgPSBvcHRpb25zLnJhZGl1cztcclxuXHRcdHRoaXMudGhyZXNob2xkID0gb3B0aW9ucy50aHJlc2hvbGQ7XHJcblx0XHR0aGlzLmluaXQoKTtcclxuXHR9XHJcblx0ZGVzdHJveSgpIHtcclxuXHRcdHRoaXMucmVuZGVyVGFyZ2V0QnJpZ2h0LmRlc3Ryb3koKTtcclxuXHR9XHJcblx0cmVuZGVyKGNvbnRleHQ6IENvbnRleHQsIGNvbG9yVGV4dHVyZTogVGV4dHVyZSk6IFRleHR1cmUge1xyXG5cdFx0Ly8gMS4gRXh0cmFjdCBCcmlnaHQgQXJlYXNcclxuXHRcdHRoaXMuY3VycmVudFJlbmRlclRhcmdldCA9IHRoaXMucmVuZGVyVGFyZ2V0QnJpZ2h0O1xyXG5cdFx0dGhpcy5oaWdoUGFzc1VuaWZvcm1zLnREaWZmdXNlLnZhbHVlID0gY29sb3JUZXh0dXJlO1xyXG5cdFx0dGhpcy5mdWxsU2NyZWVuUXVhZC5tYXRlcmlhbCA9IHRoaXMubWF0ZXJpYWxIaWdoUGFzc0ZpbHRlcjtcclxuXHRcdHRoaXMucmVuZGVyTWVzaChjb250ZXh0KTtcclxuXHRcdC8vIDIuIEJsdXIgQWxsIHRoZSBtaXBzIHByb2dyZXNzaXZlbHlcclxuXHRcdGxldCBpbnB1dFJlbmRlclRhcmdldCA9IHRoaXMucmVuZGVyVGFyZ2V0QnJpZ2h0O1xyXG5cdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLm5NaXBzOyBpKyspIHtcclxuXHRcdFx0dGhpcy5mdWxsU2NyZWVuUXVhZC5tYXRlcmlhbCA9IHRoaXMuc2VwYXJhYmxlQmx1ck1hdGVyaWFsc1tpXTtcclxuXHJcblx0XHRcdHRoaXMuc2VwYXJhYmxlQmx1ck1hdGVyaWFsc1tpXS51bmlmb3Jtcy50RGlmZnVzZS52YWx1ZSA9IGlucHV0UmVuZGVyVGFyZ2V0LmdldENvbG9yVGV4dHVyZSgpO1xyXG5cdFx0XHR0aGlzLnNlcGFyYWJsZUJsdXJNYXRlcmlhbHNbaV0udW5pZm9ybXMuZGlyZWN0aW9uLnZhbHVlID0gQmxvb21Qb3N0RWZmZWN0LkJsdXJEaXJlY3Rpb25YO1xyXG5cdFx0XHR0aGlzLmN1cnJlbnRSZW5kZXJUYXJnZXQgPSB0aGlzLnJlbmRlclRhcmdldHNIb3Jpem9udGFsW2ldO1xyXG5cclxuXHRcdFx0dGhpcy5yZW5kZXJNZXNoKGNvbnRleHQpO1xyXG5cdFx0XHR0aGlzLmZ1bGxTY3JlZW5RdWFkLm1hdGVyaWFsID0gdGhpcy5zZXBhcmFibGVCbHVyWU1hdGVyaWFsc1tpXTtcclxuXHRcdFx0dGhpcy5zZXBhcmFibGVCbHVyWU1hdGVyaWFsc1tpXS51bmlmb3Jtcy50RGlmZnVzZS52YWx1ZSA9IHRoaXMucmVuZGVyVGFyZ2V0c0hvcml6b250YWxbaV0uZ2V0Q29sb3JUZXh0dXJlKCk7XHJcblx0XHRcdHRoaXMuc2VwYXJhYmxlQmx1cllNYXRlcmlhbHNbaV0udW5pZm9ybXMuZGlyZWN0aW9uLnZhbHVlID0gQmxvb21Qb3N0RWZmZWN0LkJsdXJEaXJlY3Rpb25ZO1xyXG5cdFx0XHR0aGlzLmN1cnJlbnRSZW5kZXJUYXJnZXQgPSB0aGlzLnJlbmRlclRhcmdldHNWZXJ0aWNhbFtpXTtcclxuXHJcblx0XHRcdHRoaXMucmVuZGVyTWVzaChjb250ZXh0KTtcclxuXHJcblx0XHRcdGlucHV0UmVuZGVyVGFyZ2V0ID0gdGhpcy5yZW5kZXJUYXJnZXRzVmVydGljYWxbaV07XHJcblx0XHR9XHJcblx0XHQvLyBDb21wb3NpdGUgQWxsIHRoZSBtaXBzXHJcblx0XHR0aGlzLmZ1bGxTY3JlZW5RdWFkLm1hdGVyaWFsID0gdGhpcy5jb21wb3NpdGVNYXRlcmlhbDtcclxuXHRcdHRoaXMuY3VycmVudFJlbmRlclRhcmdldCA9IHRoaXMucmVuZGVyVGFyZ2V0c0hvcml6b250YWxbMF07XHJcblx0XHR0aGlzLnJlbmRlck1lc2goY29udGV4dCk7XHJcblx0XHQvLyBibGVuZFxyXG5cdFx0dGhpcy5ibGVuZFVuaWZvcm1zLmJhc2VDb2xvclRleHR1cmUudmFsdWUgPSBjb2xvclRleHR1cmU7XHJcblx0XHR0aGlzLmZ1bGxTY3JlZW5RdWFkLm1hdGVyaWFsID0gdGhpcy5ibGVuZE1hdGVyaWFsO1xyXG5cdFx0dGhpcy5jdXJyZW50UmVuZGVyVGFyZ2V0ID0gdGhpcy5ibGVuZFRhcmdldDtcclxuXHRcdHRoaXMucmVuZGVyTWVzaChjb250ZXh0KTtcclxuXHRcdHJldHVybiB0aGlzLmN1cnJlbnRSZW5kZXJUYXJnZXQuZ2V0Q29sb3JUZXh0dXJlKCk7XHJcblx0fVxyXG5cdHNldFNpemUod2lkdGg6IG51bWJlciwgaGVpZ2h0OiBudW1iZXIpOiB2b2lkIHtcclxuXHRcdHRoaXM/LnJlbmRlclRhcmdldHNIb3Jpem9udGFsPy5mb3JFYWNoKChyZW5kZXJUYXJnZXQpID0+IHJlbmRlclRhcmdldC5zZXRTaXplKHdpZHRoLCBoZWlnaHQsIDEpKTtcclxuXHRcdHRoaXM/LnJlbmRlclRhcmdldHNWZXJ0aWNhbD8uZm9yRWFjaCgocmVuZGVyVGFyZ2V0KSA9PiByZW5kZXJUYXJnZXQuc2V0U2l6ZSh3aWR0aCwgaGVpZ2h0LCAxKSk7XHJcblx0XHR0aGlzPy5yZW5kZXJUYXJnZXRCcmlnaHQ/LnNldFNpemU/Lih3aWR0aCwgaGVpZ2h0LCAxKTtcclxuXHRcdHRoaXM/LmJsZW5kVGFyZ2V0Py5zZXRTaXplPy4od2lkdGgsIGhlaWdodCwgMSk7XHJcblx0fVxyXG5cdHByaXZhdGUgaW5pdCgpIHtcclxuXHRcdHRoaXMucmVuZGVyVGFyZ2V0c0hvcml6b250YWwgPSBbXTtcclxuXHRcdHRoaXMucmVuZGVyVGFyZ2V0c1ZlcnRpY2FsID0gW107XHJcblx0XHR0aGlzLm5NaXBzID0gNTtcclxuXHRcdGxldCByZXN4ID0gTWF0aC5yb3VuZCh0aGlzLndpZHRoIC8gMik7XHJcblx0XHRsZXQgcmVzeSA9IE1hdGgucm91bmQodGhpcy5oZWlnaHQgLyAyKTtcclxuXHJcblx0XHR0aGlzLnJlbmRlclRhcmdldEJyaWdodCA9IG5ldyBSZW5kZXJUYXJnZXQoXCJyZW5kZXJcIiwgW3RoaXMuY3JlYXRlQ29sb3JBdHRhY2htZW50KHJlc3gsIHJlc3kpXSk7XHJcblxyXG5cdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLm5NaXBzOyBpKyspIHtcclxuXHRcdFx0Y29uc3QgcmVuZGVyVGFyZ2V0SG9yaXpvbmFsID0gbmV3IFJlbmRlclRhcmdldChcInJlbmRlclwiLCBbdGhpcy5jcmVhdGVDb2xvckF0dGFjaG1lbnQocmVzeCwgcmVzeSldKTtcclxuXHRcdFx0dGhpcy5yZW5kZXJUYXJnZXRzSG9yaXpvbnRhbC5wdXNoKHJlbmRlclRhcmdldEhvcml6b25hbCk7XHJcblx0XHRcdGNvbnN0IHJlbmRlclRhcmdldFZlcnRpY2FsID0gbmV3IFJlbmRlclRhcmdldChcInJlbmRlclwiLCBbdGhpcy5jcmVhdGVDb2xvckF0dGFjaG1lbnQocmVzeCwgcmVzeSldKTtcclxuXHRcdFx0dGhpcy5yZW5kZXJUYXJnZXRzVmVydGljYWwucHVzaChyZW5kZXJUYXJnZXRWZXJ0aWNhbCk7XHJcblx0XHRcdHJlc3ggPSBNYXRoLnJvdW5kKHJlc3ggLyAyKTtcclxuXHRcdFx0cmVzeSA9IE1hdGgucm91bmQocmVzeSAvIDIpO1xyXG5cdFx0fVxyXG5cdFx0Ly8gbHVtaW5vc2l0eSBoaWdoIHBhc3MgbWF0ZXJpYWxcclxuXHRcdHRoaXMuaGlnaFBhc3NVbmlmb3JtcyA9IHtcclxuXHRcdFx0dERpZmZ1c2U6IHsgdHlwZTogXCJ0ZXh0dXJlXCIsIHZhbHVlOiBudWxsIH0sXHJcblx0XHRcdHRTYW1wbGVyOiB7XHJcblx0XHRcdFx0dHlwZTogXCJzYW1wbGVyXCIsXHJcblx0XHRcdFx0dmFsdWU6IHRoaXMuZGVmYXVsdFNhbXBsZXJcclxuXHRcdFx0fSxcclxuXHRcdFx0bHVtaW5vc2l0eVRocmVzaG9sOiB7IHR5cGU6IFwiZmxvYXRcIiwgdmFsdWU6IHRoaXMudGhyZXNob2xkIH0sXHJcblx0XHRcdHNtb290aFdpZHRoOiB7IHR5cGU6IFwiZmxvYXRcIiwgdmFsdWU6IDAuMDEgfSxcclxuXHRcdFx0ZGVmYXVsdENvbG9yOiB7IHR5cGU6IFwiY29sb3JcIiwgdmFsdWU6IG5ldyBDb2xvcigwLjAsIDAsIDApIH0sXHJcblx0XHRcdGRlZmF1bHRPcGFjaXR5OiB7IHR5cGU6IFwiZmxvYXRcIiwgdmFsdWU6IDEuMCB9XHJcblx0XHR9O1xyXG5cdFx0Y29uc3Qgc2hhZGVyID0gZ2V0VmVydEZyYWcoXCJsdW1pbm9zaXR5SGlnaFwiLCB7IHBvc2l0aW9uTG9jYXRpb246IDAgfSk7XHJcblx0XHR0aGlzLm1hdGVyaWFsSGlnaFBhc3NGaWx0ZXIgPSBuZXcgU2hhZGVyTWF0ZXJpYWwoe1xyXG5cdFx0XHR0eXBlOiBcImJsb29tXCIsXHJcblx0XHRcdHVuaWZvcm1zOiB0aGlzLmhpZ2hQYXNzVW5pZm9ybXMsXHJcblx0XHRcdHZlcnQ6IHNoYWRlci52ZXJ0LFxyXG5cdFx0XHRmcmFnOiBzaGFkZXIuZnJhZ1xyXG5cdFx0fSk7XHJcblx0XHQvLyBHYXVzc2lhbiBCbHVyIE1hdGVyaWFsc1xyXG5cdFx0dGhpcy5tYXRlcmlhbEhpZ2hQYXNzRmlsdGVyLnJlbmRlclN0YXRlID0gdGhpcy5yZW5kZXJTdGF0ZTtcclxuXHRcdHRoaXMuc2VwYXJhYmxlQmx1ck1hdGVyaWFscyA9IFtdO1xyXG5cdFx0dGhpcy5zZXBhcmFibGVCbHVyWU1hdGVyaWFscyA9IFtdO1xyXG5cdFx0Y29uc3Qga2VybmVsU2l6ZUFycmF5ID0gWzMsIDUsIDcsIDksIDExXTtcclxuXHRcdHJlc3ggPSBNYXRoLnJvdW5kKHRoaXMud2lkdGggLyAyKTtcclxuXHRcdHJlc3kgPSBNYXRoLnJvdW5kKHRoaXMuaGVpZ2h0IC8gMik7XHJcblxyXG5cdFx0Zm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLm5NaXBzOyBpKyspIHtcclxuXHRcdFx0dGhpcy5zZXBhcmFibGVCbHVyTWF0ZXJpYWxzLnB1c2godGhpcy5nZXRTZXBlcmFibGVCbHVyTWF0ZXJpYWwoa2VybmVsU2l6ZUFycmF5W2ldLCBcIkJsdXJNYXRlcmlhbFwiICsgaSkpO1xyXG5cdFx0XHR0aGlzLnNlcGFyYWJsZUJsdXJZTWF0ZXJpYWxzLnB1c2godGhpcy5nZXRTZXBlcmFibGVCbHVyTWF0ZXJpYWwoa2VybmVsU2l6ZUFycmF5W2ldLCBcIkJsdXJNYXRlcmlhbFlcIiArIGkpKTtcclxuXHRcdFx0cmVzeCA9IE1hdGgucm91bmQocmVzeCAvIDIpO1xyXG5cclxuXHRcdFx0cmVzeSA9IE1hdGgucm91bmQocmVzeSAvIDIpO1xyXG5cdFx0fVxyXG5cdFx0Ly8gQ29tcG9zaXRlIG1hdGVyaWFsXHJcblx0XHR0aGlzLmNvbXBvc2l0ZU1hdGVyaWFsID0gdGhpcy5nZXRDb21wb3NpdGVNYXRlcmlhbCh0aGlzLm5NaXBzLCBcImNvbXBvc2l0ZU1hdGVyaWFsXCIpO1xyXG5cdFx0dGhpcy5jb21wb3NpdGVNYXRlcmlhbC5yZW5kZXJTdGF0ZSA9IHRoaXMucmVuZGVyU3RhdGU7XHJcblx0XHR0aGlzLmJsZW5kVW5pZm9ybXMgPSB7XHJcblx0XHRcdHREaWZmdXNlOiB7IHR5cGU6IFwidGV4dHVyZVwiLCB2YWx1ZTogdGhpcy5yZW5kZXJUYXJnZXRzSG9yaXpvbnRhbFswXS5nZXRDb2xvclRleHR1cmUoKSB9LFxyXG5cdFx0XHRiYXNlQ29sb3JUZXh0dXJlOiB7IHR5cGU6IFwidGV4dHVyZVwiLCB2YWx1ZTogbnVsbCB9LFxyXG5cdFx0XHR0U2FtcGxlcjoge1xyXG5cdFx0XHRcdHR5cGU6IFwic2FtcGxlclwiLFxyXG5cdFx0XHRcdHZhbHVlOiB0aGlzLmRlZmF1bHRTYW1wbGVyXHJcblx0XHRcdH1cclxuXHRcdH07XHJcblx0XHRjb25zdCBibGVuZFNoYWRlciA9IGdldFZlcnRGcmFnKFwiYmxlbmRcIiwgeyBwb3NpdGlvbkxvY2F0aW9uOiAwIH0pO1xyXG5cdFx0dGhpcy5ibGVuZE1hdGVyaWFsID0gbmV3IFNoYWRlck1hdGVyaWFsKHtcclxuXHRcdFx0dHlwZTogXCJwb3N0QmxlbmRcIixcclxuXHRcdFx0dW5pZm9ybXM6IHRoaXMuYmxlbmRVbmlmb3JtcyxcclxuXHRcdFx0dmVydDogYmxlbmRTaGFkZXIudmVydCxcclxuXHRcdFx0ZnJhZzogYmxlbmRTaGFkZXIuZnJhZ1xyXG5cdFx0fSk7XHJcblx0XHR0aGlzLmJsZW5kTWF0ZXJpYWwucmVuZGVyU3RhdGUgPSB0aGlzLnJlbmRlclN0YXRlO1xyXG5cdFx0dGhpcy5ibGVuZFRhcmdldCA9IG5ldyBSZW5kZXJUYXJnZXQoXCJyZW5kZXJcIiwgW3RoaXMuY3JlYXRlQ29sb3JBdHRhY2htZW50KHRoaXMud2lkdGgsIHRoaXMuaGVpZ2h0KV0pO1xyXG5cdH1cclxuXHRwcml2YXRlIGNyZWF0ZUNvbG9yQXR0YWNobWVudCh3aWR0aDogbnVtYmVyLCBoZWlnaHQ6IG51bWJlcik6IEF0dGFjaG1lbnQge1xyXG5cdFx0Y29uc3QgY29sb3JUZXh0dXJlID0gbmV3IFRleHR1cmUoe1xyXG5cdFx0XHRzaXplOiB7IHdpZHRoLCBoZWlnaHQsIGRlcHRoOiAxIH0sXHJcblx0XHRcdGZvcm1hdDogVGV4dHVyZUZvcm1hdC5CR1JBOFVub3JtLFxyXG5cdFx0XHR1c2FnZTogVGV4dHVyZVVzYWdlLlJlbmRlckF0dGFjaG1lbnQgfCBUZXh0dXJlVXNhZ2UuVGV4dHVyZUJpbmRpbmdcclxuXHRcdH0pO1xyXG5cdFx0Y29uc3QgY29sb3JBdHRhY2htZW50ID0gbmV3IEF0dGFjaG1lbnQoeyByOiAwLjAsIGc6IDAuMCwgYjogMC4wLCBhOiAwLjAgfSwgeyB0ZXh0dXJlOiBjb2xvclRleHR1cmUgfSk7XHJcblx0XHRyZXR1cm4gY29sb3JBdHRhY2htZW50O1xyXG5cdH1cclxuXHRwcml2YXRlIGdldENvbXBvc2l0ZU1hdGVyaWFsKG5NaXBzOiBudW1iZXIsIHR5cGUpOiBTaGFkZXJNYXRlcmlhbCB7XHJcblx0XHRyZXR1cm4gbmV3IFNoYWRlck1hdGVyaWFsKHtcclxuXHRcdFx0dHlwZSxcclxuXHRcdFx0dW5pZm9ybXM6IHtcclxuXHRcdFx0XHRibHVyVGV4dHVyZTE6IHsgdHlwZTogXCJ0ZXh0dXJlXCIsIHZhbHVlOiB0aGlzLnJlbmRlclRhcmdldHNWZXJ0aWNhbFswXS5nZXRDb2xvclRleHR1cmUoKSB9LFxyXG5cdFx0XHRcdGJsdXJUZXh0dXJlMjogeyB0eXBlOiBcInRleHR1cmVcIiwgdmFsdWU6IHRoaXMucmVuZGVyVGFyZ2V0c1ZlcnRpY2FsWzFdLmdldENvbG9yVGV4dHVyZSgpIH0sXHJcblx0XHRcdFx0Ymx1clRleHR1cmUzOiB7IHR5cGU6IFwidGV4dHVyZVwiLCB2YWx1ZTogdGhpcy5yZW5kZXJUYXJnZXRzVmVydGljYWxbMl0uZ2V0Q29sb3JUZXh0dXJlKCkgfSxcclxuXHRcdFx0XHRibHVyVGV4dHVyZTQ6IHsgdHlwZTogXCJ0ZXh0dXJlXCIsIHZhbHVlOiB0aGlzLnJlbmRlclRhcmdldHNWZXJ0aWNhbFszXS5nZXRDb2xvclRleHR1cmUoKSB9LFxyXG5cdFx0XHRcdGJsdXJUZXh0dXJlNTogeyB0eXBlOiBcInRleHR1cmVcIiwgdmFsdWU6IHRoaXMucmVuZGVyVGFyZ2V0c1ZlcnRpY2FsWzRdLmdldENvbG9yVGV4dHVyZSgpIH0sXHJcblx0XHRcdFx0dFNhbXBsZXI6IHtcclxuXHRcdFx0XHRcdHR5cGU6IFwic2FtcGxlclwiLFxyXG5cdFx0XHRcdFx0dmFsdWU6IHRoaXMuZGVmYXVsdFNhbXBsZXJcclxuXHRcdFx0XHR9LFxyXG5cdFx0XHRcdGJsb29tU3RyZW5ndGg6IHsgdHlwZTogXCJmMzJcIiwgdmFsdWU6IHRoaXMuc3RyZW5ndGggfSxcclxuXHRcdFx0XHRibG9vbVJhZGl1czogeyB0eXBlOiBcImYzMlwiLCB2YWx1ZTogdGhpcy5yYWRpdXMgfSxcclxuXHRcdFx0XHRibG9vbUZhY3RvcnM6IHsgdHlwZTogXCJhcnJheTxmMzI+XCIsIHZhbHVlOiBbMS4wLCAwLjgsIDAuNiwgMC40LCAwLjJdIH0sXHJcblx0XHRcdFx0Ymxvb21UaW50Q29sb3JzOiB7XHJcblx0XHRcdFx0XHR0eXBlOiBcImFycmF5PGYzMj5cIixcclxuXHRcdFx0XHRcdHZhbHVlOiBbXHJcblx0XHRcdFx0XHRcdG5ldyBWZWN0b3IzKDEsIDEsIDEpLFxyXG5cdFx0XHRcdFx0XHRuZXcgVmVjdG9yMygxLCAxLCAxKSxcclxuXHRcdFx0XHRcdFx0bmV3IFZlY3RvcjMoMSwgMSwgMSksXHJcblx0XHRcdFx0XHRcdG5ldyBWZWN0b3IzKDEsIDEsIDEpLFxyXG5cdFx0XHRcdFx0XHRuZXcgVmVjdG9yMygxLCAxLCAxKVxyXG5cdFx0XHRcdFx0XVxyXG5cdFx0XHRcdH1cclxuXHRcdFx0fSxcclxuXHJcblx0XHRcdHZlcnQ6ICgpID0+IHtcclxuXHRcdFx0XHRyZXR1cm4gYFxyXG4gICAgICAgICAgICAgIHN0cnVjdCBWZXJ0ZXhJbnB1dCB7XHJcbiAgICAgICAgICAgICAgICAgICAgQGxvY2F0aW9uKDApIHBvc2l0aW9uOiB2ZWMyPGYzMj4sICAgICAgIFxyXG4gICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgIHN0cnVjdCBWZXJ0ZXhPdXRwdXQge1xyXG4gICAgICAgICAgICAgICAgICAgIEBidWlsdGluKHBvc2l0aW9uKSBwb3NpdGlvbjogdmVjNDxmMzI+LFxyXG4gICAgICAgICAgICAgICAgICAgIEBsb2NhdGlvbigwKSB1djogdmVjMjxmMzI+LFxyXG4gICAgICAgICAgICAgICAgfTtcclxuICAgICAgICAgICAgICAgQHZlcnRleFxyXG4gICAgICAgICAgICAgICBmbiBtYWluKGlucHV0OiBWZXJ0ZXhJbnB1dCkgLT4gVmVydGV4T3V0cHV0IHtcclxuICAgICAgICAgICAgICAgIHZhciBvdXRwdXQ6VmVydGV4T3V0cHV0O1xyXG4gICAgICAgICAgICAgICAgb3V0cHV0LnV2ID0gaW5wdXQucG9zaXRpb24gKiAwLjUgKyAwLjU7XHJcbiAgICAgICAgICAgICAgICBvdXRwdXQucG9zaXRpb24gPSB2ZWM0PGYzMj4oaW5wdXQucG9zaXRpb24sIDAuMCwgMS4wKTs7XHJcbiAgICAgICAgICAgICAgICByZXR1cm4gb3V0cHV0O1xyXG4gICAgICAgICAgICAgICB9XHJcbiAgICAgICAgICAgICAgICBgO1xyXG5cdFx0XHR9LFxyXG5cclxuXHRcdFx0ZnJhZzogKGRlZmluZXMpID0+IHtcclxuXHRcdFx0XHRyZXR1cm4gYFxyXG4gICAgICAgICAgICAgICAgc3RydWN0IEZyYWdJbnB1dCB7XHJcbiAgICAgICAgICAgICAgICAgICAgQGxvY2F0aW9uKDApIHV2OiB2ZWMyPGYzMj4sXHJcbiAgICAgICAgICAgICAgICB9O1xyXG4gICAgICAgICAgICAgICAgc3RydWN0IEJsb29tVW5pZm9ybXN7XHJcbiAgICAgICAgICAgICAgICAgICAgYmxvb21TdHJlbmd0aDpmMzIsXHJcbiAgICAgICAgICAgICAgICAgICAgYmxvb21SYWRpdXM6ZjMyLFxyXG4gICAgICAgICAgICAgICAgICAgIGJsb29tRmFjdG9ycyA6IGFycmF5PGYzMiw1PixcclxuICAgICAgICAgICAgICAgICAgICBibG9vbVRpbnRDb2xvcnMgOiBhcnJheTx2ZWMzPGYzMj4sNT5cclxuICAgICAgICAgICAgICAgIH0gIFxyXG4gICAgICAgICAgICAgICAgQGdyb3VwKDApIEBiaW5kaW5nKDApICB2YXI8c3RvcmFnZSwgcmVhZD4gYmxvb21Vbmlmb3JtcyA6IEJsb29tVW5pZm9ybXM7XHJcblxyXG4gICAgICAgICAgICAgICAgQGdyb3VwKDApIEBiaW5kaW5nKCR7ZGVmaW5lcy5ibHVyVGV4dHVyZTFCaW5kaW5nfSkgdmFyIGJsdXJUZXh0dXJlMTogdGV4dHVyZV8yZDxmMzI+O1xyXG4gICAgICAgICAgICAgICAgQGdyb3VwKDApIEBiaW5kaW5nKCR7ZGVmaW5lcy5ibHVyVGV4dHVyZTJCaW5kaW5nfSkgdmFyIGJsdXJUZXh0dXJlMjogdGV4dHVyZV8yZDxmMzI+O1xyXG4gICAgICAgICAgICAgICAgQGdyb3VwKDApIEBiaW5kaW5nKCR7ZGVmaW5lcy5ibHVyVGV4dHVyZTNCaW5kaW5nfSkgdmFyIGJsdXJUZXh0dXJlMzogdGV4dHVyZV8yZDxmMzI+O1xyXG4gICAgICAgICAgICAgICAgQGdyb3VwKDApIEBiaW5kaW5nKCR7ZGVmaW5lcy5ibHVyVGV4dHVyZTRCaW5kaW5nfSkgdmFyIGJsdXJUZXh0dXJlNDogdGV4dHVyZV8yZDxmMzI+O1xyXG4gICAgICAgICAgICAgICAgQGdyb3VwKDApIEBiaW5kaW5nKCR7ZGVmaW5lcy5ibHVyVGV4dHVyZTVCaW5kaW5nfSkgdmFyIGJsdXJUZXh0dXJlNTogdGV4dHVyZV8yZDxmMzI+O1xyXG4gICAgICAgICAgICAgICAgQGdyb3VwKDApIEBiaW5kaW5nKCR7ZGVmaW5lcy50U2FtcGxlckJpbmRpbmd9fSkgdmFyIHRTYW1wbGVyOiBzYW1wbGVyO1xyXG5cclxuXHRcdFx0XHRmbiBsZXJwQmxvb21GYWN0b3IoZmFjdG9yOmYzMiktPmYzMiB7XHJcblx0XHRcdFx0XHRsZXQgbWlycm9yRmFjdG9yOmYzMiA9IDEuMiAtIGZhY3RvcjtcclxuXHRcdFx0XHRcdHJldHVybiBtaXgoZmFjdG9yLCBtaXJyb3JGYWN0b3IsIGJsb29tVW5pZm9ybXMuYmxvb21SYWRpdXMpO1xyXG5cdFx0XHRcdH1cclxuICAgICAgICAgICAgICAgIEBmcmFnbWVudFxyXG5cdFx0XHRcdGZuIG1haW4oaW5wdXQ6RnJhZ0lucHV0KS0+IEBsb2NhdGlvbigwKSB2ZWM0PGYzMj4gIHtcclxuXHRcdFx0XHRcdHJldHVybiBibG9vbVVuaWZvcm1zLmJsb29tU3RyZW5ndGggKiAoIGxlcnBCbG9vbUZhY3RvcihibG9vbVVuaWZvcm1zLmJsb29tRmFjdG9yc1swXSkgKiB2ZWM0KGJsb29tVW5pZm9ybXMuYmxvb21UaW50Q29sb3JzWzBdLCAxLjApICogdGV4dHVyZVNhbXBsZShibHVyVGV4dHVyZTEsIHRTYW1wbGVyLCBpbnB1dC51dikgK1xyXG5cdFx0XHRcdFx0XHRsZXJwQmxvb21GYWN0b3IoYmxvb21Vbmlmb3Jtcy5ibG9vbUZhY3RvcnNbMV0pICogdmVjNDxmMzI+KGJsb29tVW5pZm9ybXMuYmxvb21UaW50Q29sb3JzWzFdLCAxLjApICogdGV4dHVyZVNhbXBsZShibHVyVGV4dHVyZTIsIHRTYW1wbGVyLCBpbnB1dC51dikgK1xyXG5cdFx0XHRcdFx0XHRsZXJwQmxvb21GYWN0b3IoYmxvb21Vbmlmb3Jtcy5ibG9vbUZhY3RvcnNbMl0pICogdmVjNDxmMzI+KGJsb29tVW5pZm9ybXMuYmxvb21UaW50Q29sb3JzWzJdLCAxLjApICogdGV4dHVyZVNhbXBsZShibHVyVGV4dHVyZTMsIHRTYW1wbGVyLCBpbnB1dC51dikgK1xyXG5cdFx0XHRcdFx0XHRsZXJwQmxvb21GYWN0b3IoYmxvb21Vbmlmb3Jtcy5ibG9vbUZhY3RvcnNbM10pICogdmVjNDxmMzI+KGJsb29tVW5pZm9ybXMuYmxvb21UaW50Q29sb3JzWzNdLCAxLjApICogdGV4dHVyZVNhbXBsZShibHVyVGV4dHVyZTQsIHRTYW1wbGVyLCBpbnB1dC51dikgK1xyXG5cdFx0XHRcdFx0XHRsZXJwQmxvb21GYWN0b3IoYmxvb21Vbmlmb3Jtcy5ibG9vbUZhY3RvcnNbNF0pICogdmVjNDxmMzI+KGJsb29tVW5pZm9ybXMuYmxvb21UaW50Q29sb3JzWzRdLCAxLjApICogdGV4dHVyZVNhbXBsZShibHVyVGV4dHVyZTUsIHRTYW1wbGVyLCBpbnB1dC51dikgKTtcclxuXHRcdFx0XHR9YDtcclxuXHRcdFx0fVxyXG5cdFx0fSk7XHJcblx0fVxyXG5cdHByaXZhdGUgZ2V0U2VwZXJhYmxlQmx1ck1hdGVyaWFsKGtlcm5lbFJhZGl1cywgdHlwZSkge1xyXG5cdFx0Y29uc3Qgc2hhZGVyID0gZ2V0VmVydEZyYWcoXCJibHVyXCIsIHtcclxuXHRcdFx0S0VSTkVMX1JBRElVUzoga2VybmVsUmFkaXVzLFxyXG5cdFx0XHRTSUdNQToga2VybmVsUmFkaXVzLFxyXG5cdFx0XHRwb3NpdGlvbkxvY2F0aW9uOiAwXHJcblx0XHR9KTtcclxuXHRcdGNvbnN0IG1hdCA9IG5ldyBTaGFkZXJNYXRlcmlhbCh7XHJcblx0XHRcdHR5cGUsXHJcblx0XHRcdHVuaWZvcm1zOiB7XHJcblx0XHRcdFx0dERpZmZ1c2U6IHsgdHlwZTogXCJ0ZXh0dXJlXCIsIHZhbHVlOiBudWxsIH0sXHJcblx0XHRcdFx0ZGlyZWN0aW9uOiB7IHR5cGU6IFwidmVjMjxmMzI+XCIsIHZhbHVlOiBuZXcgVmVjdG9yMigwLjAsIDAuMCkgfSxcclxuXHRcdFx0XHR0U2FtcGxlcjoge1xyXG5cdFx0XHRcdFx0dHlwZTogXCJzYW1wbGVyXCIsXHJcblx0XHRcdFx0XHR2YWx1ZTogdGhpcy5kZWZhdWx0U2FtcGxlclxyXG5cdFx0XHRcdH1cclxuXHRcdFx0fSxcclxuXHJcblx0XHRcdHZlcnQ6IHNoYWRlci52ZXJ0LFxyXG5cclxuXHRcdFx0ZnJhZzogc2hhZGVyLmZyYWdcclxuXHRcdH0pO1xyXG5cdFx0bWF0LnJlbmRlclN0YXRlID0gdGhpcy5yZW5kZXJTdGF0ZTtcclxuXHRcdHJldHVybiBtYXQ7XHJcblx0fVxyXG59XHJcblxyXG50eXBlIEJsb29tUG9zdEVmZmVjdFByb3BzID0ge1xyXG5cdHdpZHRoOiBudW1iZXI7XHJcblx0aGVpZ2h0OiBudW1iZXI7XHJcblx0c3RyZW5ndGg6IG51bWJlcjtcclxuXHRyYWRpdXM6IG51bWJlcjtcclxuXHR0aHJlc2hvbGQ6IG51bWJlcjtcclxufTtcclxuIiwiaW1wb3J0IE1hdHJpeDQgZnJvbSBcIi4uL21hdGgvTWF0cml4NFwiO1xyXG5pbXBvcnQgQ2FtZXJhIGZyb20gXCIuL0NhbWVyYVwiO1xyXG5leHBvcnQgZGVmYXVsdCBjbGFzcyBPcnRob2dyYXBoaWNDYW1lcmEgZXh0ZW5kcyBDYW1lcmEge1xyXG5cdHJpZ2h0OiBudW1iZXI7XHJcblx0aXNPcnRob2dyYXBoaWNDYW1lcmE6IGJvb2xlYW47XHJcblx0Ym90dG9tOiBudW1iZXI7XHJcblx0bGVmdDogbnVtYmVyO1xyXG5cdG5lYXI6IG51bWJlcjtcclxuXHRmYXI6IG51bWJlcjtcclxuXHR0b3A6IG51bWJlcjtcclxuXHRjb25zdHJ1Y3RvcihsZWZ0ID0gLTEsIHJpZ2h0ID0gMSwgdG9wID0gMSwgYm90dG9tID0gLTEsIG5lYXIgPSAwLjEsIGZhciA9IDIwMDApIHtcclxuXHRcdHN1cGVyKCk7XHJcblx0XHR0aGlzLm5lYXIgPSBuZWFyO1xyXG5cdFx0dGhpcy5mYXIgPSBmYXI7XHJcblx0XHR0aGlzLmxlZnQgPSBsZWZ0O1xyXG5cdFx0dGhpcy50b3AgPSB0b3A7XHJcblx0XHR0aGlzLmJvdHRvbSA9IGJvdHRvbTtcclxuXHRcdHRoaXMucmlnaHQgPSByaWdodDtcclxuXHRcdHRoaXMuaXNPcnRob2dyYXBoaWNDYW1lcmEgPSB0cnVlO1xyXG5cdH1cclxuXHRwcml2YXRlIHVwZGF0ZUNhbWVyYVBhcm1zKCkge1xyXG5cdFx0Y29uc3QgZHggPSAodGhpcy5yaWdodCAtIHRoaXMubGVmdCkgLyAyO1xyXG5cdFx0Y29uc3QgZHkgPSAodGhpcy50b3AgLSB0aGlzLmJvdHRvbSkgLyAyO1xyXG5cdFx0Y29uc3QgY3ggPSAodGhpcy5yaWdodCArIHRoaXMubGVmdCkgLyAyO1xyXG5cdFx0Y29uc3QgY3kgPSAodGhpcy50b3AgKyB0aGlzLmJvdHRvbSkgLyAyO1xyXG5cdFx0cmV0dXJuIHtcclxuXHRcdFx0bGVmdDogY3ggLSBkeCxcclxuXHRcdFx0cmlnaHQ6IGN4ICsgZHgsXHJcblx0XHRcdHRvcDogY3kgKyBkeSxcclxuXHRcdFx0Ym90dG9tOiBjeSAtIGR5XHJcblx0XHR9O1xyXG5cdH1cclxuXHRwdWJsaWMgdXBkYXRlUHJvamVjdGlvbk1hdHJpeCgpIHtcclxuXHRcdGlmICh0aGlzLnByb2plY3RNYXRyaXhEaXJ0eSkge1xyXG5cdFx0XHRjb25zdCB7IGxlZnQsIHJpZ2h0LCB0b3AsIGJvdHRvbSB9ID0gdGhpcy51cGRhdGVDYW1lcmFQYXJtcygpO1xyXG5cdFx0XHR0aGlzLl9wcm9qZWN0aW9uTWF0cml4ID0gTWF0cml4NC5tYWtlT3J0aG9ncmFwaGljKGxlZnQsIHJpZ2h0LCB0b3AsIGJvdHRvbSwgdGhpcy5uZWFyLCB0aGlzLmZhcik7XHJcblx0XHRcdHRoaXMucHJvamVjdE1hdHJpeERpcnR5ID0gZmFsc2U7XHJcblx0XHR9XHJcblx0fVxyXG59XHJcbiIsImltcG9ydCBQZXJzcGVjdGl2ZUNhbWVyYSBmcm9tIFwiLi4vLi4vY2FtZXJhL1BlcnNwZWN0aXZlQ2FtZXJhXCI7XG5pbXBvcnQgVmVjdG9yMiBmcm9tIFwiLi4vLi4vbWF0aC9WZWN0b3IyXCI7XG5pbXBvcnQgeyBTcG90TGlnaHQgfSBmcm9tIFwiLi4vU3BvdExpZ2h0XCI7XG5pbXBvcnQgeyBCYXNlU2hhZG93IH0gZnJvbSBcIi4vQmFzZVNoYWRvd1wiO1xuXG5leHBvcnQgY2xhc3MgU3BvdExpZ2h0U2hhZG93IGV4dGVuZHMgQmFzZVNoYWRvdyB7XG5cdHB1YmxpYyB0eXBlOiBzdHJpbmc7XG5cdGNvbnN0cnVjdG9yKCkge1xuXHRcdGNvbnN0IGNhbWVyYSA9IG5ldyBQZXJzcGVjdGl2ZUNhbWVyYSg2MCwgMSwgMC4xLCA1MDApO1xuXHRcdHN1cGVyKG5ldyBWZWN0b3IyKDEwMjQsIDEwMjQpLCBjYW1lcmEpO1xuXHRcdHRoaXMudHlwZSA9IFwic3BvdExpZ2h0U2hhZG93XCI7XG5cdH1cblxuXHRwdWJsaWMgdXBkYXRlKGxpZ2h0OiBTcG90TGlnaHQpIHtcblx0XHR0aGlzLnVwZGF0ZU1hdHJpY2VzKGxpZ2h0KTtcblx0fVxuXG5cdHVwZGF0ZU1hdHJpY2VzKGxpZ2h0OiBTcG90TGlnaHQpIHtcblx0XHR0aGlzLmNhbWVyYS5wb3NpdGlvbi5jb3B5KGxpZ2h0LnBvc2l0aW9uKTtcblx0XHRjb25zdCB7IHgsIHksIHogfSA9IGxpZ2h0LnRhcmdldDtcblx0XHR0aGlzLmNhbWVyYS5sb29rQXQoeCwgeSwgeik7XG5cdFx0dGhpcy5jYW1lcmEudXBkYXRlTWF0cml4KCk7XG5cdFx0dGhpcy52cE1hdHJpeERpcnR5ID0gdHJ1ZTtcblx0fVxufVxuIiwiaW1wb3J0IHsgTGlnaHRUeXBlIH0gZnJvbSBcIi4uL2NvcmUvV2ViR1BVVHlwZXNcIjtcclxuaW1wb3J0IFZlY3RvcjMgZnJvbSBcIi4uL21hdGgvVmVjdG9yM1wiO1xyXG5pbXBvcnQgeyBMaWdodCB9IGZyb20gXCIuL0xpZ2h0XCI7XHJcbmltcG9ydCB7IFNwb3RMaWdodFNoYWRvdyB9IGZyb20gXCIuL3NoYWRvd3MvU3BvdExpZ2h0U2hhZG93XCI7XHJcblxyXG5leHBvcnQgY2xhc3MgU3BvdExpZ2h0IGV4dGVuZHMgTGlnaHQge1xyXG5cdHByaXZhdGUgX2Rpc3RhbmNlOiBudW1iZXI7XHJcblx0cHJpdmF0ZSBfYW5nbGU6IG51bWJlcjtcclxuXHRwcml2YXRlIF9wZW51bWJyYTogbnVtYmVyO1xyXG5cdHByaXZhdGUgX2RlY2F5OiBudW1iZXI7XHJcblx0ZGVjYXlEaXJ0eTogYm9vbGVhbjtcclxuXHRkaXN0YW5jZURpcnR5OiBib29sZWFuO1xyXG5cdHByaXZhdGUgX2NvbmVDb3M6IG51bWJlcjtcclxuXHRwcml2YXRlIF9wZW51bWJyYUNvczogbnVtYmVyO1xyXG5cdGNvbmVDb3NEaXJ0eTogYm9vbGVhbjtcclxuXHRwZW51bWJyYURpcnR5OiBib29sZWFuO1xyXG5cdGFuZ2xlRGlydHk6IGJvb2xlYW47XHJcblx0cGVudW1icmFDb3NEaXJ0eTogYm9vbGVhbjtcclxuXHRjb25zdHJ1Y3Rvcihjb2xvciwgaW50ZW5zaXR5LCBkaXN0YW5jZSA9IDAsIGFuZ2xlID0gNjAsIHBlbnVtYnJhID0gNjAsIGRlY2F5ID0gNCwgb3BlblNoYWRvdyA9IHRydWUpIHtcclxuXHRcdHN1cGVyKGNvbG9yLCBpbnRlbnNpdHkpO1xyXG5cdFx0dGhpcy5fZGlzdGFuY2UgPSBkaXN0YW5jZTtcclxuXHRcdHRoaXMuX2FuZ2xlID0gKGFuZ2xlIC8gMTgwKSAqIE1hdGguUEk7XHJcblx0XHR0aGlzLl9wZW51bWJyYSA9IChwZW51bWJyYSAvIDE4MCkgKiBNYXRoLlBJO1xyXG5cdFx0dGhpcy5fZGVjYXkgPSBkZWNheTtcclxuXHRcdHRoaXMubGlnaHRUeXBlID0gTGlnaHRUeXBlLlNwb3RMaWdodDtcclxuXHRcdHRoaXMuYW5nbGVEaXJ0eSA9IHRydWU7XHJcblx0XHR0aGlzLnBlbnVtYnJhRGlydHkgPSB0cnVlO1xyXG5cdFx0dGhpcy5kaXN0YW5jZURpcnR5ID0gdHJ1ZTtcclxuXHRcdHRoaXMuZGVjYXlEaXJ0eSA9IHRydWU7XHJcblx0XHR0aGlzLmNvbmVDb3NEaXJ0eSA9IHRydWU7XHJcblx0XHR0aGlzLnBlbnVtYnJhQ29zRGlydHkgPSB0cnVlO1xyXG5cdFx0aWYgKG9wZW5TaGFkb3cpIHRoaXMuc2hhZG93ID0gbmV3IFNwb3RMaWdodFNoYWRvdygpO1xyXG5cdFx0dGhpcy51cGRhdGVDb25lQ29zT3JQZW51bWJyYUNvcygpO1xyXG5cdH1cclxuXHJcblx0Z2V0IGRpcnRlY3REaXJ0eSgpIHtcclxuXHRcdHJldHVybiB0aGlzLnBvc2l0aW9uRGlydHkgfHwgdGhpcy50YXJnZXREaXJ0eTtcclxuXHR9XHJcblxyXG5cdHNldCBkaXJ0ZWN0RGlydHkodmFsdWUpIHtcclxuXHRcdHRoaXMucG9zaXRpb25EaXJ0eSA9IHZhbHVlO1xyXG5cdFx0dGhpcy50YXJnZXREaXJ0eSA9IHZhbHVlO1xyXG5cdH1cclxuXHJcblx0Z2V0IGRpcmVjdGlvbmFsKCkge1xyXG5cdFx0Y29uc3QgcmVzdWx0ID0gbmV3IFZlY3RvcjMoKTtcclxuXHRcdFZlY3RvcjMuc3VidHJhY3QodGhpcy5wb3NpdGlvbiwgdGhpcy50YXJnZXQsIHJlc3VsdCk7XHJcblx0XHRyZXR1cm4gVmVjdG9yMy5ub3JtYWxpemUocmVzdWx0LCBuZXcgVmVjdG9yMygpKTtcclxuXHR9XHJcblx0Z2V0IGFuZ2xlKCkge1xyXG5cdFx0cmV0dXJuIHRoaXMuX2FuZ2xlO1xyXG5cdH1cclxuXHRzZXQgYW5nbGUodmFsdWUpIHtcclxuXHRcdHRoaXMuYW5nbGVEaXJ0eSA9IHRydWU7XHJcblx0XHR0aGlzLl9hbmdsZSA9ICh2YWx1ZSAvIDE4MCkgKiBNYXRoLlBJO1xyXG5cdFx0dGhpcy51cGRhdGVDb25lQ29zT3JQZW51bWJyYUNvcygpO1xyXG5cdH1cclxuXHRnZXQgcGVudW1icmEoKSB7XHJcblx0XHRyZXR1cm4gdGhpcy5fcGVudW1icmE7XHJcblx0fVxyXG5cdHNldCBwZW51bWJyYSh2YWx1ZSkge1xyXG5cdFx0dGhpcy5wZW51bWJyYURpcnR5ID0gdHJ1ZTtcclxuXHRcdHRoaXMuX3BlbnVtYnJhID0gKHZhbHVlIC8gMTgwKSAqIE1hdGguUEk7XHJcblx0XHR0aGlzLnVwZGF0ZUNvbmVDb3NPclBlbnVtYnJhQ29zKCk7XHJcblx0fVxyXG5cdHNldCBkaXN0YW5jZSh2YWx1ZSkge1xyXG5cdFx0dGhpcy5kaXN0YW5jZURpcnR5ID0gdHJ1ZTtcclxuXHRcdHRoaXMuX2Rpc3RhbmNlID0gdmFsdWU7XHJcblx0fVxyXG5cdGdldCBkaXN0YW5jZSgpIHtcclxuXHRcdHJldHVybiB0aGlzLl9kaXN0YW5jZTtcclxuXHR9XHJcblx0c2V0IGRlY2F5KHZhbHVlKSB7XHJcblx0XHR0aGlzLmRlY2F5RGlydHkgPSB0cnVlO1xyXG5cdFx0dGhpcy5fZGVjYXkgPSB2YWx1ZTtcclxuXHR9XHJcblx0Z2V0IGRlY2F5KCkge1xyXG5cdFx0cmV0dXJuIHRoaXMuX2RlY2F5O1xyXG5cdH1cclxuXHRzZXQgY29uZUNvcyh2YWx1ZSkge1xyXG5cdFx0dGhpcy5jb25lQ29zRGlydHkgPSB0cnVlO1xyXG5cdFx0dGhpcy5fY29uZUNvcyA9IHZhbHVlO1xyXG5cdH1cclxuXHRnZXQgY29uZUNvcygpIHtcclxuXHRcdHJldHVybiB0aGlzLl9jb25lQ29zO1xyXG5cdH1cclxuXHRzZXQgcGVudW1icmFDb3ModmFsdWUpIHtcclxuXHRcdHRoaXMucGVudW1icmFDb3NEaXJ0eSA9IHRydWU7XHJcblx0XHR0aGlzLl9wZW51bWJyYUNvcyA9IHZhbHVlO1xyXG5cdH1cclxuXHRnZXQgcGVudW1icmFDb3MoKSB7XHJcblx0XHRyZXR1cm4gdGhpcy5fcGVudW1icmFDb3M7XHJcblx0fVxyXG5cdHByaXZhdGUgdXBkYXRlQ29uZUNvc09yUGVudW1icmFDb3MoKSB7XHJcblx0XHR0aGlzLl9jb25lQ29zID0gTWF0aC5jb3ModGhpcy5hbmdsZSk7XHJcblx0XHR0aGlzLl9wZW51bWJyYUNvcyA9IE1hdGguY29zKHRoaXMuYW5nbGUgKyB0aGlzLnBlbnVtYnJhKTtcclxuXHR9XHJcbn1cclxuLy8gdW5pZm9ybVxyXG4vLyBjb2xvcjoge30sXHJcbi8vIHBvc2l0aW9uOiB7fSxcclxuLy8gZGlyZWN0aW9uOiB7fSxcclxuLy8gZGlzdGFuY2U6IHt9LFxyXG4vLyBjb25lQ29zOiB7fSxcclxuLy8gcGVudW1icmFDb3M6IHt9LFxyXG4vLyBkZWNheToge31cclxuIiwiaW1wb3J0IE9ydGhvZ3JhcGhpY0NhbWVyYSBmcm9tIFwiLi4vLi4vY2FtZXJhL09ydGhvZ3JhcGhpY0NhbWVyYVwiO1xuaW1wb3J0IFZlY3RvcjIgZnJvbSBcIi4uLy4uL21hdGgvVmVjdG9yMlwiO1xuaW1wb3J0IHsgRGlyZWN0aW9uYWxMaWdodCB9IGZyb20gXCIuLi9EaXJlY3Rpb25hbExpZ2h0XCI7XG5pbXBvcnQgeyBCYXNlU2hhZG93IH0gZnJvbSBcIi4vQmFzZVNoYWRvd1wiO1xuXG5leHBvcnQgY2xhc3MgRGlyZWN0aW9uYWxMaWdodFNoYWRvdyBleHRlbmRzIEJhc2VTaGFkb3cge1xuXHRwdWJsaWMgdHlwZTogc3RyaW5nO1xuXHRjb25zdHJ1Y3RvcigpIHtcblx0XHRjb25zdCBjYW1lcmEgPSBuZXcgT3J0aG9ncmFwaGljQ2FtZXJhKC01MCwgNTAsIDUwLCAtNTAsIDAsIDEwMCk7XG5cdFx0c3VwZXIobmV3IFZlY3RvcjIoMTAyNCwgMTAyNCksIGNhbWVyYSk7XG5cdFx0dGhpcy50eXBlID0gXCJkaXJlY3Rpb25hbExpZ2h0U2hhZG93XCI7XG5cdH1cblxuXHRwdWJsaWMgdXBkYXRlKGxpZ2h0OiBEaXJlY3Rpb25hbExpZ2h0KSB7XG5cdFx0dGhpcy51cGRhdGVNYXRyaWNlcyhsaWdodCk7XG5cdH1cblxuXHR1cGRhdGVNYXRyaWNlcyhsaWdodDogRGlyZWN0aW9uYWxMaWdodCkge1xuXHRcdHRoaXMuY2FtZXJhLnBvc2l0aW9uLmNvcHkobGlnaHQucG9zaXRpb24pO1xuXHRcdGNvbnN0IHsgeCwgeSwgeiB9ID0gbGlnaHQudGFyZ2V0O1xuXHRcdHRoaXMuY2FtZXJhLmxvb2tBdCh4LCB5LCB6KTtcblx0XHR0aGlzLmNhbWVyYS51cGRhdGVNYXRyaXgoKTtcblx0XHR0aGlzLnZwTWF0cml4RGlydHkgPSB0cnVlO1xuXHR9XG59XG4iLCJpbXBvcnQgeyBMaWdodFR5cGUgfSBmcm9tIFwiLi4vY29yZS9XZWJHUFVUeXBlc1wiO1xuaW1wb3J0IFZlY3RvcjMgZnJvbSBcIi4uL21hdGgvVmVjdG9yM1wiO1xuaW1wb3J0IHsgTGlnaHQgfSBmcm9tIFwiLi9MaWdodFwiO1xuaW1wb3J0IHsgRGlyZWN0aW9uYWxMaWdodFNoYWRvdyB9IGZyb20gXCIuL3NoYWRvd3MvRGlyZWN0aW9uYWxMaWdodFNoYWRvd1wiO1xuXG5leHBvcnQgY2xhc3MgRGlyZWN0aW9uYWxMaWdodCBleHRlbmRzIExpZ2h0IHtcblx0Y29uc3RydWN0b3IoY29sb3I6IFZlY3RvcjMsIGludGVuc2l0eTogbnVtYmVyLCBvcGVuU2hhZG93ID0gdHJ1ZSkge1xuXHRcdHN1cGVyKGNvbG9yLCBpbnRlbnNpdHkpO1xuXHRcdHRoaXMubGlnaHRUeXBlID0gTGlnaHRUeXBlLkRpcmVjdGlvbmFsTGlnaHQ7XG5cdFx0aWYgKG9wZW5TaGFkb3cpIHRoaXMuc2hhZG93ID0gbmV3IERpcmVjdGlvbmFsTGlnaHRTaGFkb3coKTtcblx0fVxuXG5cdGdldCBkaXJ0ZWN0RGlydHkoKSB7XG5cdFx0cmV0dXJuIHRoaXMucG9zaXRpb25EaXJ0eSB8fCB0aGlzLnRhcmdldERpcnR5O1xuXHR9XG5cblx0c2V0IGRpcnRlY3REaXJ0eSh2YWx1ZSkge1xuXHRcdHRoaXMucG9zaXRpb25EaXJ0eSA9IHZhbHVlO1xuXHRcdHRoaXMudGFyZ2V0RGlydHkgPSB2YWx1ZTtcblx0fVxuXG5cdGdldCBkaXJlY3Rpb25hbCgpIHtcblx0XHRjb25zdCByZXN1bHQgPSBuZXcgVmVjdG9yMygpO1xuXHRcdFZlY3RvcjMuc3VidHJhY3QodGhpcy50YXJnZXQsIHRoaXMucG9zaXRpb24sIHJlc3VsdCk7XG5cdFx0cmV0dXJuIHJlc3VsdC5ub3JtYWxpemUoKTtcblx0fVxufVxuLy8gdW5pZm9ybVxuLy8gZGlyZWN0aW9uOiB7fSxcbi8vIGNvbG9yOiB7fVxuIiwiaW1wb3J0IENhbWVyYSBmcm9tIFwiLi4vY2FtZXJhL0NhbWVyYVwiO1xyXG5pbXBvcnQgeyBGcmFtZVN0YXRlIH0gZnJvbSBcIi4uL2NvcmUvRnJhbWVTdGF0ZVwiO1xyXG5pbXBvcnQgUmVuZGVyT2JqZWN0IGZyb20gXCIuLi9jb3JlL1JlbmRlck9iamVjdFwiO1xyXG5pbXBvcnQgeyBSZW5kZXJPYmplY3RUeXBlIH0gZnJvbSBcIi4uL2NvcmUvV2ViR1BVVHlwZXNcIjtcclxuaW1wb3J0IGNyZWF0ZUd1aWQgZnJvbSBcIi4uL3V0aWxzL2NyZWF0ZUd1aWRcIjtcclxuaW1wb3J0IHsgTWVzaCB9IGZyb20gXCIuL01lc2hcIjtcclxuXHJcbmV4cG9ydCBkZWZhdWx0IGNsYXNzIE5vZGUgZXh0ZW5kcyBSZW5kZXJPYmplY3Qge1xyXG5cdHVpZDogc3RyaW5nO1xyXG5cdGNoaWxkcmVuOiBNYXA8c3RyaW5nLCBOb2RlIHwgTWVzaD47XHJcblx0bmFtZTogc3RyaW5nO1xyXG5cdGNvbnN0cnVjdG9yKCkge1xyXG5cdFx0c3VwZXIoKTtcclxuXHRcdHRoaXMudHlwZSA9IFJlbmRlck9iamVjdFR5cGUuTm9kZTtcclxuXHRcdHRoaXMuY2hpbGRyZW4gPSBuZXcgTWFwKCk7XHJcblx0XHR0aGlzLnBhcmVudCA9IG51bGw7XHJcblx0XHR0aGlzLnVpZCA9IGNyZWF0ZUd1aWQoKTtcclxuXHR9XHJcblx0YWRkKG5vZGU6IE5vZGUgfCBNZXNoKSB7XHJcblx0XHRub2RlLnBhcmVudCA9IHRoaXM7XHJcblx0XHR0aGlzLmNoaWxkcmVuLnNldChub2RlLnVpZCwgbm9kZSk7XHJcblx0fVxyXG5cdHJlbW92ZShub2RlOiBOb2RlIHwgTWVzaCkge1xyXG5cdFx0dGhpcy5jaGlsZHJlbi5kZWxldGUobm9kZS51aWQpO1xyXG5cdH1cclxuXHR1cGRhdGUoZnJhbWVTdGF0ZTogRnJhbWVTdGF0ZSwgY2FtZXJhPzogQ2FtZXJhKSB7XHJcblx0XHR0aGlzLnVwZGF0ZU1hdHJpeCh0aGlzPy5wYXJlbnQ/Lm1vZGVsTWF0cml4Py5jbG9uZSgpKTtcclxuXHRcdHRoaXM/LmNoaWxkcmVuPy5mb3JFYWNoPy4oKG5vZGUpID0+IHtcclxuXHRcdFx0bm9kZS51cGRhdGUoZnJhbWVTdGF0ZSwgY2FtZXJhKTtcclxuXHRcdH0pO1xyXG5cdH1cclxuXHRkZXN0cm95KCkge1xyXG5cdFx0dGhpcy5jaGlsZHJlbi5mb3JFYWNoKChub2RlKSA9PiB7XHJcblx0XHRcdG5vZGUuZGVzdHJveSgpO1xyXG5cdFx0fSk7XHJcblx0XHR0aGlzPy5jaGlsZHJlbj8uY2xlYXIoKTtcclxuXHR9XHJcblx0dHJhdmVyc2UodHJhdmVyc2VGdW5jdGlvbjogRnVuY3Rpb24sIHBhcmFtOiB7IFtwcm9wOiBzdHJpbmddOiBhbnkgfSk6IHZvaWQge1xyXG5cdFx0Zm9yIChsZXQgaSA9IDAsIGxlbiA9IHRoaXMuY2hpbGRyZW4uc2l6ZTsgaSA8IGxlbjsgaSsrKSB7XHJcblx0XHRcdHRoaXMuY2hpbGRyZW4uZm9yRWFjaCgoY2hpbGQpID0+IHtcclxuXHRcdFx0XHRjaGlsZC50cmF2ZXJzZSh0cmF2ZXJzZUZ1bmN0aW9uLCBwYXJhbSk7XHJcblx0XHRcdH0pO1xyXG5cdFx0fVxyXG5cdH1cclxufVxyXG4iLCJpbXBvcnQgQ2FtZXJhIGZyb20gXCIuLi9jYW1lcmEvQ2FtZXJhXCI7XHJcbmltcG9ydCB7IEZyYW1lU3RhdGUgfSBmcm9tIFwiLi4vY29yZS9GcmFtZVN0YXRlXCI7XHJcbmltcG9ydCB7IEJ1ZmZlckJpbmRpbmdUeXBlLCBCdWZmZXJVc2FnZSB9IGZyb20gXCIuLi9jb3JlL1dlYkdQVUNvbnN0YW50XCI7XHJcbmltcG9ydCB7IFJlbmRlck9iamVjdFR5cGUsIFVuaWZvcm1FbnVtIH0gZnJvbSBcIi4uL2NvcmUvV2ViR1BVVHlwZXNcIjtcclxuaW1wb3J0IEdlb21ldHJ5IGZyb20gXCIuLi9nZW9tZXRyeS9HZW9tZXRyeVwiO1xyXG5pbXBvcnQgeyBNYXRlcmlhbCB9IGZyb20gXCIuLi9tYXRlcmlhbC9NYXRlcmlhbFwiO1xyXG5pbXBvcnQgTWF0cml4NCBmcm9tIFwiLi4vbWF0aC9NYXRyaXg0XCI7XHJcbmltcG9ydCBVbmlmb3JtQnVmZmVyIGZyb20gXCIuLi9yZW5kZXIvVW5pZm9ybUJ1ZmZlclwiO1xyXG5pbXBvcnQgeyBNZXNoIH0gZnJvbSBcIi4vTWVzaFwiO1xyXG5pbXBvcnQgTm9kZSBmcm9tIFwiLi9Ob2RlXCI7XHJcblxyXG5leHBvcnQgY2xhc3MgU0tpbk1lc2ggZXh0ZW5kcyBNZXNoIHtcclxuXHRpbnZlcnNlQmluZE1hdHJpY2VzOiBBcnJheTxNYXRyaXg0PjtcclxuXHR1bmlmb3JtTWF0cml4czogQXJyYXk8TWF0cml4ND47XHJcblx0am9pbnRzOiBBcnJheTxOb2RlPjtcclxuXHRwcml2YXRlIGhhc0FkZEpvaW50czogYm9vbGVhbjtcclxuXHRjb25zdHJ1Y3RvcihnZW9tZXRyeT86IEdlb21ldHJ5LCBtYXRlcmlhbD86IE1hdGVyaWFsKSB7XHJcblx0XHRzdXBlcihnZW9tZXRyeSwgbWF0ZXJpYWwpO1xyXG5cdFx0dGhpcy50eXBlID0gUmVuZGVyT2JqZWN0VHlwZS5Ta2luTWVzaDtcclxuXHRcdHRoaXMudW5pZm9ybU1hdHJpeHMgPSBbXTtcclxuXHRcdHRoaXMuaGFzQWRkSm9pbnRzID0gZmFsc2U7XHJcblx0fVxyXG5cdHNldFNraW5EYXRhKGRhdGE6IFNraW5EYXRhVHlwZSkge1xyXG5cdFx0dGhpcy5pbnZlcnNlQmluZE1hdHJpY2VzID0gZGF0YS5pbnZlcnNlQmluZE1hdHJpY2VzO1xyXG5cdFx0dGhpcy5qb2ludHMgPSBkYXRhLmpvaW50cztcclxuXHR9XHJcblx0dXBkYXRlKGZyYW1lU3RhdGU6IEZyYW1lU3RhdGUsIGNhbWVyYT86IENhbWVyYSkge1xyXG5cdFx0dGhpcy51bmlmb3JtTWF0cml4cyA9IHRoaXMuam9pbnRzLm1hcCgoam9pbnQpID0+IChqb2ludCBhcyBOb2RlKS5tb2RlbE1hdHJpeCk7XHJcblx0XHRzdXBlci51cGRhdGUoZnJhbWVTdGF0ZSwgY2FtZXJhKTtcclxuXHRcdGlmICghdGhpcy5oYXNBZGRKb2ludHMpIHRoaXMuYWRkVW5pZm9ybXNUb01hdGVyaWFsKCk7XHJcblx0fVxyXG5cdHByaXZhdGUgYWRkVW5pZm9ybXNUb01hdGVyaWFsKCkge1xyXG5cdFx0aWYgKCF0aGlzLm1hdGVyaWFsLnNoYWRlckRhdGEpIHJldHVybjtcclxuXHRcdHRoaXMuaGFzQWRkSm9pbnRzID0gdHJ1ZTtcclxuXHRcdGlmICh0aGlzLmpvaW50cykge1xyXG5cdFx0XHRjb25zdCBza2luSm9pbnRzQnVmZmVyID0gbmV3IFVuaWZvcm1CdWZmZXIoe1xyXG5cdFx0XHRcdGxhYmVsOiBcInNraW5Kb2ludHNCdWZmZXJcIixcclxuXHRcdFx0XHR0eXBlOiBCdWZmZXJCaW5kaW5nVHlwZS5SZWFkT25seVN0b3JhZ2UsXHJcblx0XHRcdFx0dXNhZ2U6IEJ1ZmZlclVzYWdlLlN0b3JhZ2UgfCBCdWZmZXJVc2FnZS5Db3B5RHN0LFxyXG5cdFx0XHRcdHNpemU6IDMwMDBcclxuXHRcdFx0fSk7XHJcblx0XHRcdGNvbnN0IGludnNCdWZmZXIgPSBuZXcgVW5pZm9ybUJ1ZmZlcih7XHJcblx0XHRcdFx0bGFiZWw6IFwiaW52c0J1ZmZlclwiLFxyXG5cdFx0XHRcdHR5cGU6IEJ1ZmZlckJpbmRpbmdUeXBlLlJlYWRPbmx5U3RvcmFnZSxcclxuXHRcdFx0XHR1c2FnZTogQnVmZmVyVXNhZ2UuU3RvcmFnZSB8IEJ1ZmZlclVzYWdlLkNvcHlEc3QsXHJcblx0XHRcdFx0c2l6ZTogMzAwMFxyXG5cdFx0XHR9KTtcclxuXHRcdFx0c2tpbkpvaW50c0J1ZmZlci5zZXRVbmlmb3JtKFxyXG5cdFx0XHRcdFwiam9pbnRzXCIsXHJcblx0XHRcdFx0KCkgPT4ge1xyXG5cdFx0XHRcdFx0cmV0dXJuIHRoaXMudW5pZm9ybU1hdHJpeHM7XHJcblx0XHRcdFx0fSxcclxuXHRcdFx0XHRVbmlmb3JtRW51bS5NYXQ0QXJyYXksXHJcblx0XHRcdFx0dGhpcy51bmlmb3JtTWF0cml4cy5sZW5ndGhcclxuXHRcdFx0KTtcclxuXHRcdFx0aW52c0J1ZmZlci5zZXRVbmlmb3JtKFxyXG5cdFx0XHRcdFwiam9pbnRzSW52XCIsXHJcblx0XHRcdFx0KCkgPT4ge1xyXG5cdFx0XHRcdFx0cmV0dXJuIHRoaXMuaW52ZXJzZUJpbmRNYXRyaWNlcztcclxuXHRcdFx0XHR9LFxyXG5cdFx0XHRcdFVuaWZvcm1FbnVtLk1hdDRBcnJheSxcclxuXHRcdFx0XHR0aGlzLmludmVyc2VCaW5kTWF0cmljZXMubGVuZ3RoXHJcblx0XHRcdCk7XHJcblx0XHRcdHRoaXMubWF0ZXJpYWwuc2hhZGVyRGF0YS5zZXRVbmlmb3JtQnVmZmVyKFwic2tpbkpvaW50c0J1ZmZlclwiLCBza2luSm9pbnRzQnVmZmVyKTtcclxuXHRcdFx0dGhpcy5tYXRlcmlhbC5zaGFkZXJEYXRhLnNldFVuaWZvcm1CdWZmZXIoXCJpbnZzQnVmZmVyXCIsIGludnNCdWZmZXIpO1xyXG5cdFx0fVxyXG5cdH1cclxufVxyXG5leHBvcnQgdHlwZSBTa2luRGF0YVR5cGUgPSB7XHJcblx0aW52ZXJzZUJpbmRNYXRyaWNlcz86IEFycmF5PE1hdHJpeDQ+O1xyXG5cdGpvaW50cz86IEFycmF5PE5vZGU+O1xyXG59O1xyXG4iLCJpbXBvcnQgeyBRdWF0ZXJuaW9uIH0gZnJvbSBcIi4uL21hdGgvUXVhdGVybmlvblwiO1xyXG5pbXBvcnQgVmVjdG9yMiBmcm9tIFwiLi4vbWF0aC9WZWN0b3IyXCI7XHJcbmltcG9ydCBWZWN0b3IzIGZyb20gXCIuLi9tYXRoL1ZlY3RvcjNcIjtcclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBjbGFtcChudW06IG51bWJlciwgbWluOiBudW1iZXIsIG1heDogbnVtYmVyKSB7XHJcblx0cmV0dXJuIE1hdGgubWluKE1hdGgubWF4KG51bSwgbWluKSwgbWF4KTtcclxufVxyXG5cclxuZXhwb3J0IGZ1bmN0aW9uIHRvRmxvYXQobnVtOiBudW1iZXIgfCB1bmRlZmluZWQsIGRlZmF1bHRWYWx1ZSA9IDEpIHtcclxuXHRjb25zdCBuID0gbnVtICE9PSB1bmRlZmluZWQgPyBudW0gOiBkZWZhdWx0VmFsdWU7XHJcblx0aWYgKE51bWJlci5pc0ludGVnZXIobikpIHtcclxuXHRcdHJldHVybiBgJHtufS4wYDtcclxuXHR9XHJcblx0cmV0dXJuIG47XHJcbn1cclxuXHJcbmV4cG9ydCB0eXBlIFR5cGVkQXJyYXkgPSBJbnQ4QXJyYXkgfCBVaW50OEFycmF5IHwgSW50MTZBcnJheSB8IFVpbnQxNkFycmF5IHwgVWludDMyQXJyYXkgfCBGbG9hdDMyQXJyYXk7XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gbmV3VHlwZWRBcnJheSh0eXBlOiBudW1iZXIsIGJ1ZmZlcjogQXJyYXlCdWZmZXIsIGJ5dGVPZmZzZXQ6IG51bWJlciwgbGVuZ3RoOiBudW1iZXIpIHtcclxuXHRzd2l0Y2ggKHR5cGUpIHtcclxuXHRcdGNhc2UgNTEyMDpcclxuXHRcdFx0cmV0dXJuIG5ldyBJbnQ4QXJyYXkoYnVmZmVyLCBieXRlT2Zmc2V0LCBsZW5ndGgpO1xyXG5cdFx0Y2FzZSA1MTIxOlxyXG5cdFx0XHRyZXR1cm4gbmV3IFVpbnQ4QXJyYXkoYnVmZmVyLCBieXRlT2Zmc2V0LCBsZW5ndGgpO1xyXG5cdFx0Y2FzZSA1MTIyOlxyXG5cdFx0XHRyZXR1cm4gbmV3IEludDE2QXJyYXkoYnVmZmVyLCBieXRlT2Zmc2V0LCBsZW5ndGgpO1xyXG5cdFx0Y2FzZSA1MTIzOlxyXG5cdFx0XHRyZXR1cm4gbmV3IFVpbnQxNkFycmF5KGJ1ZmZlciwgYnl0ZU9mZnNldCwgbGVuZ3RoKTtcclxuXHRcdGNhc2UgNTEyNDpcclxuXHRcdFx0cmV0dXJuIG5ldyBJbnQzMkFycmF5KGJ1ZmZlciwgYnl0ZU9mZnNldCwgbGVuZ3RoKTtcclxuXHRcdGNhc2UgNTEyNTpcclxuXHRcdFx0cmV0dXJuIG5ldyBVaW50MzJBcnJheShidWZmZXIsIGJ5dGVPZmZzZXQsIGxlbmd0aCk7XHJcblx0XHRjYXNlIDUxMjY6XHJcblx0XHRcdHJldHVybiBuZXcgRmxvYXQzMkFycmF5KGJ1ZmZlciwgYnl0ZU9mZnNldCwgbGVuZ3RoKTtcclxuXHRcdGRlZmF1bHQ6XHJcblx0XHRcdHRocm93IG5ldyBFcnJvcihcImludmFsaWQgY29tcG9uZW50IHR5cGVcIik7XHJcblx0fVxyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gdG9JbmRpY2VzKGFycmF5OiBUeXBlZEFycmF5KTogVWludDE2QXJyYXkgfCBVaW50MzJBcnJheSB7XHJcblx0aWYgKGFycmF5IGluc3RhbmNlb2YgVWludDE2QXJyYXkgfHwgYXJyYXkgaW5zdGFuY2VvZiBVaW50MzJBcnJheSkge1xyXG5cdFx0cmV0dXJuIGFycmF5O1xyXG5cdH1cclxuXHRsZXQgdG9BcnJheTtcclxuXHRpZiAoYXJyYXkgaW5zdGFuY2VvZiBGbG9hdDMyQXJyYXkpIHtcclxuXHRcdHRvQXJyYXkgPSBuZXcgVWludDMyQXJyYXkoYXJyYXkubGVuZ3RoKTtcclxuXHR9IGVsc2Uge1xyXG5cdFx0bGV0IG1heCA9IDA7XHJcblx0XHRmb3IgKGxldCBpID0gMDsgaSA8IGFycmF5Lmxlbmd0aDsgaSsrKSB7XHJcblx0XHRcdG1heCA9IG1heCA8IGFycmF5W2ldID8gYXJyYXlbaV0gOiBtYXg7XHJcblx0XHR9XHJcblx0XHRpZiAobWF4IDwgNjU1MzYpIHtcclxuXHRcdFx0dG9BcnJheSA9IG5ldyBVaW50MTZBcnJheShhcnJheS5sZW5ndGgpO1xyXG5cdFx0fSBlbHNlIHtcclxuXHRcdFx0dG9BcnJheSA9IG5ldyBVaW50MzJBcnJheShhcnJheS5sZW5ndGgpO1xyXG5cdFx0fVxyXG5cdH1cclxuXHRhcnJheS5mb3JFYWNoKChlbGVtZW50LCBpbmRleCkgPT4ge1xyXG5cdFx0dG9BcnJheVtpbmRleF0gPSBlbGVtZW50O1xyXG5cdH0pO1xyXG5cdHJldHVybiB0b0FycmF5O1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gam9pbkFycmF5KGFycmF5czogQXJyYXk8RmxvYXQzMkFycmF5Pikge1xyXG5cdGxldCBsZW5ndGggPSAwO1xyXG5cdGFycmF5cy5mb3JFYWNoKChhcnJheSkgPT4ge1xyXG5cdFx0bGVuZ3RoICs9IGFycmF5Lmxlbmd0aDtcclxuXHR9KTtcclxuXHRjb25zdCBqb2luZWQgPSBuZXcgRmxvYXQzMkFycmF5KGxlbmd0aCk7XHJcblx0bGVuZ3RoID0gMDtcclxuXHRhcnJheXMuZm9yRWFjaCgoYXJyYXkpID0+IHtcclxuXHRcdGpvaW5lZC5zZXQoYXJyYXksIGxlbmd0aCk7XHJcblx0XHRsZW5ndGggKz0gYXJyYXkubGVuZ3RoO1xyXG5cdH0pO1xyXG5cdHJldHVybiBqb2luZWQ7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBjcmVhdGVHUFVCdWZmZXIoYXJyYXk6IFR5cGVkQXJyYXksIHVzYWdlOiBudW1iZXIsIGRldmljZTogR1BVRGV2aWNlKSB7XHJcblx0Y29uc3QgYnVmZmVyID0gZGV2aWNlLmNyZWF0ZUJ1ZmZlcih7XHJcblx0XHRzaXplOiAoYXJyYXkuYnl0ZUxlbmd0aCArIDMpICYgfjMsIC8vIGVzbGludC1kaXNhYmxlLWxpbmUgbm8tYml0d2lzZVxyXG5cdFx0dXNhZ2UsXHJcblx0XHRtYXBwZWRBdENyZWF0aW9uOiB0cnVlXHJcblx0fSk7XHJcblx0bGV0IHdyaXRlQXJhcnk7XHJcblx0aWYgKGFycmF5IGluc3RhbmNlb2YgSW50OEFycmF5KSB7XHJcblx0XHR3cml0ZUFyYXJ5ID0gbmV3IEludDhBcnJheShidWZmZXIuZ2V0TWFwcGVkUmFuZ2UoKSk7XHJcblx0fSBlbHNlIGlmIChhcnJheSBpbnN0YW5jZW9mIFVpbnQ4QXJyYXkpIHtcclxuXHRcdHdyaXRlQXJhcnkgPSBuZXcgVWludDhBcnJheShidWZmZXIuZ2V0TWFwcGVkUmFuZ2UoKSk7XHJcblx0fSBlbHNlIGlmIChhcnJheSBpbnN0YW5jZW9mIEludDE2QXJyYXkpIHtcclxuXHRcdHdyaXRlQXJhcnkgPSBuZXcgSW50MTZBcnJheShidWZmZXIuZ2V0TWFwcGVkUmFuZ2UoKSk7XHJcblx0fSBlbHNlIGlmIChhcnJheSBpbnN0YW5jZW9mIFVpbnQxNkFycmF5KSB7XHJcblx0XHR3cml0ZUFyYXJ5ID0gbmV3IFVpbnQxNkFycmF5KGJ1ZmZlci5nZXRNYXBwZWRSYW5nZSgpKTtcclxuXHR9IGVsc2UgaWYgKGFycmF5IGluc3RhbmNlb2YgVWludDMyQXJyYXkpIHtcclxuXHRcdHdyaXRlQXJhcnkgPSBuZXcgVWludDMyQXJyYXkoYnVmZmVyLmdldE1hcHBlZFJhbmdlKCkpO1xyXG5cdH0gZWxzZSB7XHJcblx0XHR3cml0ZUFyYXJ5ID0gbmV3IEZsb2F0MzJBcnJheShidWZmZXIuZ2V0TWFwcGVkUmFuZ2UoKSk7XHJcblx0fVxyXG5cdHdyaXRlQXJhcnkuc2V0KGFycmF5KTtcclxuXHRidWZmZXIudW5tYXAoKTtcclxuXHRyZXR1cm4gYnVmZmVyO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gZ2VuZXJhdGVOb3JtYWxzKGluZGljZXM6IFR5cGVkQXJyYXkgfCBudWxsLCBwb3NpdGlvbnM6IFR5cGVkQXJyYXkpIHtcclxuXHRjb25zdCBub3JtYWxzID0gbmV3IEZsb2F0MzJBcnJheShwb3NpdGlvbnMubGVuZ3RoKTtcclxuXHRjb25zdCB2ZXJ0ZXhDb3VudCA9IGluZGljZXMgPyBpbmRpY2VzLmxlbmd0aCA6IHBvc2l0aW9ucy5sZW5ndGg7XHJcblx0Zm9yIChsZXQgaSA9IDA7IGkgPCB2ZXJ0ZXhDb3VudDsgaSArPSAzKSB7XHJcblx0XHRjb25zdCB0cmlJbmRpY2VzID0gW107XHJcblx0XHRmb3IgKGxldCBuID0gMDsgbiA8IDM7IG4gKz0gMSkge1xyXG5cdFx0XHRpZiAoaW5kaWNlcykge1xyXG5cdFx0XHRcdHRyaUluZGljZXMucHVzaChpbmRpY2VzW2kgKyBuXSk7XHJcblx0XHRcdH0gZWxzZSB7XHJcblx0XHRcdFx0dHJpSW5kaWNlcy5wdXNoKGkgKyBuKTtcclxuXHRcdFx0fVxyXG5cdFx0fVxyXG5cdFx0Y29uc3QgdHJpYW5nbGUgPSB0cmlJbmRpY2VzLm1hcCgodmVydGV4SW5kZXgpID0+IHtcclxuXHRcdFx0Y29uc3QgaW5kZXggPSB2ZXJ0ZXhJbmRleCAqIDM7XHJcblx0XHRcdHJldHVybiBuZXcgVmVjdG9yMyhwb3NpdGlvbnNbaW5kZXhdLCBwb3NpdGlvbnNbaW5kZXggKyAxXSwgcG9zaXRpb25zW2luZGV4ICsgMl0pO1xyXG5cdFx0fSk7XHJcblx0XHRjb25zdCBkdjEgPSBuZXcgVmVjdG9yMygpO1xyXG5cdFx0VmVjdG9yMy5zdWJ0cmFjdCh0cmlhbmdsZVsxXSwgdHJpYW5nbGVbMF0sIGR2MSk7XHJcblx0XHRjb25zdCBkdjIgPSBuZXcgVmVjdG9yMygpO1xyXG5cdFx0VmVjdG9yMy5zdWJ0cmFjdCh0cmlhbmdsZVsyXSwgdHJpYW5nbGVbMF0sIGR2Mik7XHJcblx0XHRjb25zdCBub3JtYWwgPSBuZXcgVmVjdG9yMygpO1xyXG5cdFx0VmVjdG9yMy5jcm9zcyhkdjEubm9ybWFsaXplKCksIGR2Mi5ub3JtYWxpemUoKSwgbm9ybWFsKTtcclxuXHRcdGZvciAobGV0IG4gPSAwOyBuIDwgMzsgbiArPSAxKSB7XHJcblx0XHRcdGNvbnN0IGluZGV4ID0gKGkgKyBuKSAqIDM7XHJcblx0XHRcdG5vcm1hbHNbaW5kZXggKyAwXSArPSBub3JtYWwueDtcclxuXHRcdFx0bm9ybWFsc1tpbmRleCArIDFdICs9IG5vcm1hbC55O1xyXG5cdFx0XHRub3JtYWxzW2luZGV4ICsgMl0gKz0gbm9ybWFsLno7XHJcblx0XHR9XHJcblx0fVxyXG5cdHJldHVybiBub3JtYWxzO1xyXG59XHJcblxyXG5leHBvcnQgZnVuY3Rpb24gZ2VuZXJhdGVUYW5nZW50cyhcclxuXHRpbmRpY2VzOiBUeXBlZEFycmF5IHwgbnVsbCxcclxuXHRwb3NpdGlvbnM6IFR5cGVkQXJyYXksXHJcblx0bm9ybWFsczogVHlwZWRBcnJheSxcclxuXHR1dnM6IFR5cGVkQXJyYXlcclxuKSB7XHJcblx0Y29uc3QgdGFuZ2VudHMgPSBuZXcgRmxvYXQzMkFycmF5KChub3JtYWxzLmxlbmd0aCAvIDMpICogNCk7XHJcblx0Y29uc3QgdmVydGV4Q291bnQgPSBpbmRpY2VzID8gaW5kaWNlcy5sZW5ndGggOiBwb3NpdGlvbnMubGVuZ3RoO1xyXG5cdGZvciAobGV0IGkgPSAwOyBpIDwgdmVydGV4Q291bnQ7IGkgKz0gMykge1xyXG5cdFx0Y29uc3QgdHJpSW5kaWNlcyA9IFtdO1xyXG5cdFx0Zm9yIChsZXQgbiA9IDA7IG4gPCAzOyBuICs9IDEpIHtcclxuXHRcdFx0aWYgKGluZGljZXMpIHtcclxuXHRcdFx0XHR0cmlJbmRpY2VzLnB1c2goaW5kaWNlc1tpICsgbl0pO1xyXG5cdFx0XHR9IGVsc2Uge1xyXG5cdFx0XHRcdHRyaUluZGljZXMucHVzaChpICsgbik7XHJcblx0XHRcdH1cclxuXHRcdH1cclxuXHRcdGNvbnN0IHBvcyA9IHRyaUluZGljZXMubWFwKCh2ZXJ0ZXhJbmRleCkgPT4ge1xyXG5cdFx0XHRjb25zdCBpbmRleCA9IHZlcnRleEluZGV4ICogMztcclxuXHRcdFx0cmV0dXJuIG5ldyBWZWN0b3IzKHBvc2l0aW9uc1tpbmRleF0sIHBvc2l0aW9uc1tpbmRleCArIDFdLCBwb3NpdGlvbnNbaW5kZXggKyAyXSk7XHJcblx0XHR9KTtcclxuXHRcdGNvbnN0IHV2ID0gdHJpSW5kaWNlcy5tYXAoKHZlcnRleEluZGV4KSA9PiB7XHJcblx0XHRcdGNvbnN0IGluZGV4ID0gdmVydGV4SW5kZXggKiAyO1xyXG5cdFx0XHRyZXR1cm4gbmV3IFZlY3RvcjIodXZzPy5baW5kZXhdLCB1dnM/LltpbmRleCArIDFdKTtcclxuXHRcdH0pO1xyXG5cclxuXHRcdGNvbnN0IGR2MSA9IG5ldyBWZWN0b3IzKCk7XHJcblx0XHRWZWN0b3IzLnN1YnRyYWN0KHBvc1sxXSwgcG9zWzBdLCBkdjEpO1xyXG5cdFx0Y29uc3QgZHYyID0gbmV3IFZlY3RvcjMoKTtcclxuXHRcdFZlY3RvcjMuc3VidHJhY3QocG9zWzJdLCBwb3NbMF0sIGR2Mik7XHJcblx0XHRjb25zdCBkdXYxID0gbmV3IFZlY3RvcjIoKTtcclxuXHRcdFZlY3RvcjIuc3VidHJhY3QodXZbMV0sIHV2WzBdLCBkdXYxKTtcclxuXHRcdGNvbnN0IGR1djIgPSBuZXcgVmVjdG9yMigpO1xyXG5cdFx0VmVjdG9yMi5zdWJ0cmFjdCh1dlsyXSwgdXZbMF0sIGR1djIpO1xyXG5cclxuXHRcdGNvbnN0IHRhbmdlbnQgPSBuZXcgVmVjdG9yMygpO1xyXG5cdFx0VmVjdG9yMy5tdWx0aXBseUJ5U2NhbGFyKGR2MSwgZHV2MS55LCBkdjEpO1xyXG5cdFx0VmVjdG9yMy5tdWx0aXBseUJ5U2NhbGFyKGR2MiwgZHV2Mi55LCBkdjIpO1xyXG5cdFx0VmVjdG9yMy5zdWJ0cmFjdChkdjEsIGR2MiwgdGFuZ2VudCk7XHJcblxyXG5cdFx0VmVjdG9yMy5tdWx0aXBseUJ5U2NhbGFyKHRhbmdlbnQsIGR1djIueSAqIGR1djEueCAtIGR1djEueSAqIGR1djIueCwgdGFuZ2VudCk7XHJcblxyXG5cdFx0dGFuZ2VudC5ub3JtYWxpemUoKTtcclxuXHRcdGZvciAobGV0IG4gPSAwOyBuIDwgMzsgbiArPSAxKSB7XHJcblx0XHRcdGNvbnN0IGluZGV4ID0gKGkgKyBuKSAqIDQ7XHJcblxyXG5cdFx0XHR0YW5nZW50c1tpbmRleCArIDBdICs9IHRhbmdlbnQueDtcclxuXHRcdFx0dGFuZ2VudHNbaW5kZXggKyAxXSArPSB0YW5nZW50Lnk7XHJcblx0XHRcdHRhbmdlbnRzW2luZGV4ICsgMl0gKz0gdGFuZ2VudC56O1xyXG5cdFx0XHR0YW5nZW50c1tpbmRleCArIDNdID0gMTtcclxuXHRcdH1cclxuXHR9XHJcblx0cmV0dXJuIHRhbmdlbnRzO1xyXG59XHJcblxyXG5mdW5jdGlvbiBsZXJwKGE6IG51bWJlciwgYjogbnVtYmVyLCB4OiBudW1iZXIpIHtcclxuXHRpZiAoeCA8IGEpIHtcclxuXHRcdHJldHVybiAwO1xyXG5cdH1cclxuXHRpZiAoeCA+IGIpIHtcclxuXHRcdHJldHVybiAxO1xyXG5cdH1cclxuXHRyZXR1cm4gKHggLSBhKSAvIChiIC0gYSk7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBpbnRlcnBRdWF0KGlucHV0OiBUeXBlZEFycmF5LCBvOiBUeXBlZEFycmF5LCB0aW1lOiBudW1iZXIsIG1ldGhvZDogc3RyaW5nKSB7XHJcblx0bGV0IGluZGV4ID0gMTtcclxuXHR3aGlsZSAoaW5kZXggPCBpbnB1dC5sZW5ndGggLSAxICYmIHRpbWUgPj0gaW5wdXRbaW5kZXhdKSB7XHJcblx0XHRpbmRleCArPSAxO1xyXG5cdH1cclxuXHRjb25zdCB0ID0gbGVycChpbnB1dFtpbmRleCAtIDFdLCBpbnB1dFtpbmRleF0sIHRpbWUpO1xyXG5cclxuXHRpZiAobWV0aG9kID09PSBcIkNVQklDU1BMSU5FXCIpIHtcclxuXHRcdGNvbnN0IHRkID0gaW5wdXRbaW5kZXhdIC0gaW5wdXRbaW5kZXggLSAxXTtcclxuXHRcdGNvbnN0IHQyID0gdCAqIHQ7XHJcblx0XHRjb25zdCB0MyA9IHQyICogdDtcclxuXHRcdGNvbnN0IGkgPSAxMiAqIGluZGV4O1xyXG5cclxuXHRcdGNvbnN0IHYwID0gbmV3IFF1YXRlcm5pb24ob1tpIC0gOF0sIG9baSAtIDddLCBvW2kgLSA2XSwgb1tpIC0gNV0pO1xyXG5cdFx0Y29uc3QgYjAgPSBuZXcgUXVhdGVybmlvbihvW2kgLSA0XSwgb1tpIC0gM10sIG9baSAtIDJdLCBvW2kgLSAxXSk7XHJcblx0XHRjb25zdCB2MSA9IG5ldyBRdWF0ZXJuaW9uKG9baSArIDRdLCBvW2kgKyA1XSwgb1tpICsgNl0sIG9baSArIDddKTtcclxuXHRcdGNvbnN0IGExID0gbmV3IFF1YXRlcm5pb24ob1tpXSwgb1tpICsgMV0sIG9baSArIDJdLCBvW2kgKyAzXSk7XHJcblx0XHRRdWF0ZXJuaW9uLm11bHRpcGx5QnlTY2FsYXIodjAsIDIgKiB0MyAtIDMgKiB0MiArIDEsIHYwKTtcclxuXHRcdFF1YXRlcm5pb24ubXVsdGlwbHlCeVNjYWxhcihiMCwgdGQgKiAodDMgLSAyICogdDIgKyB0KSwgYjApO1xyXG5cdFx0UXVhdGVybmlvbi5tdWx0aXBseUJ5U2NhbGFyKHYxLCAtMiAqIHQzICsgMyAqIHQyLCB2MSk7XHJcblx0XHRRdWF0ZXJuaW9uLm11bHRpcGx5QnlTY2FsYXIoYTEsIHRkICogKHQzIC0gdDIpLCBhMSk7XHJcblxyXG5cdFx0Y29uc3QgcmVzdWx0ID0gbmV3IFF1YXRlcm5pb24oKTtcclxuXHRcdFF1YXRlcm5pb24uYWRkKHJlc3VsdCwgdjAsIHJlc3VsdCk7XHJcblx0XHRRdWF0ZXJuaW9uLmFkZChyZXN1bHQsIGIwLCByZXN1bHQpO1xyXG5cdFx0UXVhdGVybmlvbi5hZGQocmVzdWx0LCB2MSwgcmVzdWx0KTtcclxuXHRcdFF1YXRlcm5pb24uYWRkKHJlc3VsdCwgYTEsIHJlc3VsdCk7XHJcblx0XHRRdWF0ZXJuaW9uLm5vcm1hbGl6ZShyZXN1bHQsIHJlc3VsdCk7XHJcblx0XHRyZXR1cm4gcmVzdWx0O1xyXG5cdH1cclxuXHJcblx0Y29uc3QgcSA9IFtdO1xyXG5cdGZvciAobGV0IG4gPSAtMTsgbiA8IDE7IG4gKz0gMSkge1xyXG5cdFx0Y29uc3QgaSA9IDQgKiAoaW5kZXggKyBuKTtcclxuXHRcdHEucHVzaChuZXcgUXVhdGVybmlvbihvW2ldLCBvW2kgKyAxXSwgb1tpICsgMl0sIG9baSArIDNdKSk7XHJcblx0fVxyXG5cclxuXHRpZiAobWV0aG9kID09PSBcIlNURVBcIikge1xyXG5cdFx0cmV0dXJuIHQgPCAxID8gcVswXSA6IHFbMV07XHJcblx0fVxyXG5cdGNvbnN0IHJlc3VsdCA9IG5ldyBRdWF0ZXJuaW9uKCk7XHJcblx0UXVhdGVybmlvbi5zbGVycChxWzBdLCBxWzFdLCB0LCByZXN1bHQpO1xyXG5cdHJldHVybiByZXN1bHQ7XHJcbn1cclxuXHJcbmV4cG9ydCBmdW5jdGlvbiBpbnRlcnBWZWMzKGlucHV0OiBUeXBlZEFycmF5LCBvdXRwdXQ6IFR5cGVkQXJyYXksIHRpbWU6IG51bWJlciwgbWV0aG9kOiBzdHJpbmcpIHtcclxuXHRsZXQgaW5kZXggPSAxO1xyXG5cdHdoaWxlIChpbmRleCA8IGlucHV0Lmxlbmd0aCAtIDEgJiYgdGltZSA+PSBpbnB1dFtpbmRleF0pIHtcclxuXHRcdGluZGV4ICs9IDE7XHJcblx0fVxyXG5cdGNvbnN0IHQgPSBsZXJwKGlucHV0W2luZGV4IC0gMV0sIGlucHV0W2luZGV4XSwgdGltZSk7XHJcblxyXG5cdGlmIChtZXRob2QgPT09IFwiQ1VCSUNTUExJTkVcIikge1xyXG5cdFx0Y29uc3QgdGQgPSBpbnB1dFtpbmRleF0gLSBpbnB1dFtpbmRleCAtIDFdO1xyXG5cdFx0Y29uc3QgdDIgPSB0ICogdDtcclxuXHRcdGNvbnN0IHQzID0gdDIgKiB0O1xyXG5cdFx0Y29uc3QgaSA9IDkgKiBpbmRleDtcclxuXHRcdGNvbnN0IHYwID0gbmV3IFZlY3RvcjMob3V0cHV0W2kgLSA2XSwgb3V0cHV0W2kgLSA1XSwgb3V0cHV0W2kgLSA0XSk7XHJcblx0XHRjb25zdCBiMCA9IG5ldyBWZWN0b3IzKG91dHB1dFtpIC0gM10sIG91dHB1dFtpIC0gMl0sIG91dHB1dFtpIC0gMV0pO1xyXG5cdFx0Y29uc3QgdjEgPSBuZXcgVmVjdG9yMyhvdXRwdXRbaSArIDNdLCBvdXRwdXRbaSArIDRdLCBvdXRwdXRbaSArIDVdKTtcclxuXHRcdGNvbnN0IGExID0gbmV3IFZlY3RvcjMob3V0cHV0W2ldLCBvdXRwdXRbaSArIDFdLCBvdXRwdXRbaSArIDJdKTtcclxuXHRcdFZlY3RvcjMubXVsdGlwbHlCeVNjYWxhcih2MCwgMiAqIHQzIC0gMyAqIHQyICsgMSwgdjApO1xyXG5cdFx0VmVjdG9yMy5tdWx0aXBseUJ5U2NhbGFyKGIwLCB0ZCAqICh0MyAtIDIgKiB0MiArIHQpLCBiMCk7XHJcblx0XHRWZWN0b3IzLm11bHRpcGx5QnlTY2FsYXIodjEsIC0yICogdDMgKyAzICogdDIsIHYxKTtcclxuXHRcdFZlY3RvcjMubXVsdGlwbHlCeVNjYWxhcihhMSwgdGQgKiAodDMgLSB0MiksIGExKTtcclxuXHRcdGNvbnN0IHJlc3VsdCA9IG5ldyBWZWN0b3IzKCk7XHJcblx0XHRWZWN0b3IzLmFkZChyZXN1bHQsIHYwLCByZXN1bHQpO1xyXG5cdFx0VmVjdG9yMy5hZGQocmVzdWx0LCBiMCwgcmVzdWx0KTtcclxuXHRcdFZlY3RvcjMuYWRkKHJlc3VsdCwgdjEsIHJlc3VsdCk7XHJcblx0XHRWZWN0b3IzLmFkZChyZXN1bHQsIGExLCByZXN1bHQpO1xyXG5cdFx0cmV0dXJuIHJlc3VsdDtcclxuXHR9XHJcblxyXG5cdGNvbnN0IHYgPSBbXTtcclxuXHRmb3IgKGxldCBuID0gLTE7IG4gPCAxOyBuICs9IDEpIHtcclxuXHRcdGNvbnN0IGkgPSAzICogKGluZGV4ICsgbik7XHJcblx0XHR2LnB1c2gobmV3IFZlY3RvcjMob3V0cHV0W2ldLCBvdXRwdXRbaSArIDFdLCBvdXRwdXRbaSArIDJdKSk7XHJcblx0fVxyXG5cclxuXHRpZiAobWV0aG9kID09PSBcIlNURVBcIikge1xyXG5cdFx0cmV0dXJuIHQgPCAxID8gdlswXSA6IHZbMV07XHJcblx0fVxyXG5cdGNvbnN0IHJlc3VsdCA9IG5ldyBWZWN0b3IzKCk7XHJcblx0cmV0dXJuIFZlY3RvcjMubGVycCh2WzBdLCB2WzFdLCB0LCByZXN1bHQpO1xyXG59XHJcblxyXG5leHBvcnQgY29uc3QgZ2x0ZkVudW06IHsgW2tleTogc3RyaW5nXTogc3RyaW5nIHwgbnVtYmVyIH0gPSB7XHJcblx0U0NBTEFSOiAxLFxyXG5cdFZFQzI6IDIsXHJcblx0VkVDMzogMyxcclxuXHRWRUM0OiA0LFxyXG5cdE1BVDI6IDQsXHJcblx0TUFUMzogOSxcclxuXHRNQVQ0OiAxNixcclxuXHQ1MTIwOiAxLFxyXG5cdDUxMjE6IDEsXHJcblx0NTEyMjogMixcclxuXHQ1MTIzOiAyLFxyXG5cdDUxMjU6IDQsXHJcblx0NTEyNjogNCxcclxuXHQ5NzI4OiBcIm5lYXJlc3RcIixcclxuXHQ5NzI5OiBcImxpbmVhclwiLFxyXG5cdDk5ODQ6IFwibGluZWFyXCIsXHJcblx0OTk4NTogXCJsaW5lYXJcIixcclxuXHQ5OTg2OiBcImxpbmVhclwiLFxyXG5cdDk5ODc6IFwibGluZWFyXCIsXHJcblx0MzMwNzE6IFwiY2xhbXAtdG8tZWRnZVwiLFxyXG5cdDMzNjQ4OiBcIm1pcnJvci1yZXBlYXRcIixcclxuXHQxMDQ5NzogXCJyZXBlYXRcIlxyXG59O1xyXG4iLCJpbXBvcnQgTWF0cml4NCBmcm9tIFwiLi4vLi4vLi4vbWF0aC9NYXRyaXg0XCI7XHJcbmltcG9ydCBWZWN0b3I0IGZyb20gXCIuLi8uLi8uLi9tYXRoL1ZlY3RvcjRcIjtcclxuXHJcbmV4cG9ydCBjbGFzcyBBY2Nlc3NvciB7XHJcblx0dmFsdWVzOiBhbnk7XHJcblx0aWQ6IG51bWJlcjtcclxuXHRjb3VudDogbnVtYmVyO1xyXG5cdGNvbXBvbmVudFR5cGU6IG51bWJlcjtcclxuXHR0eXBlOiBudW1iZXI7XHJcblx0bWluOiBudW1iZXJbXTtcclxuXHRtYXg6IG51bWJlcltdO1xyXG5cdGNvbnN0cnVjdG9yKG9wdGlvbnM6IEFjY2Vzc29yUGFybXMpIHtcclxuXHRcdHRoaXMudmFsdWVzID0gb3B0aW9ucy52YWx1ZXMgPz8gW107XHJcblx0XHR0aGlzLmlkID0gb3B0aW9ucy5pZDtcclxuXHRcdHRoaXMuY291bnQgPSBvcHRpb25zLmNvdW50O1xyXG5cdFx0dGhpcy5jb21wb25lbnRUeXBlID0gb3B0aW9ucy5jb21wb25lbnRUeXBlO1xyXG5cdFx0dGhpcy50eXBlID0gb3B0aW9ucy50eXBlO1xyXG5cdFx0dGhpcy5taW4gPSBvcHRpb25zLm1pbjtcclxuXHRcdHRoaXMubWF4ID0gb3B0aW9ucy5tYXg7XHJcblx0fVxyXG5cdGdldEFycmF5KCk6IG51bWJlcltdIHtcclxuXHRcdHJldHVybiBBcnJheS5mcm9tKHRoaXMudmFsdWVzKTtcclxuXHR9XHJcblx0Z2V0VmVjNEFycmF5KCk6IFZlY3RvcjRbXSB7XHJcblx0XHRjb25zdCByZXN1bHQgPSBbXTtcclxuXHRcdGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy52YWx1ZXMubGVuZ3RoOyBpICs9IDQpIHtcclxuXHRcdFx0cmVzdWx0LnB1c2gobmV3IFZlY3RvcjQodGhpcy52YWx1ZXNbaV0sIHRoaXMudmFsdWVzW2kgKyAxXSwgdGhpcy52YWx1ZXNbaSArIDJdLCB0aGlzLnZhbHVlc1tpICsgM10pKTtcclxuXHRcdH1cclxuXHRcdHJldHVybiByZXN1bHQ7XHJcblx0fVxyXG5cdGdldE1hdDRBcnJheSgpOiBNYXRyaXg0W10ge1xyXG5cdFx0Y29uc3QgcmVzdWx0ID0gW107XHJcblx0XHRmb3IgKGxldCBpID0gMDsgaSA8IHRoaXMudmFsdWVzLmxlbmd0aDsgaSArPSAxNikge1xyXG5cdFx0XHRjb25zdCBtYXQ0ID0gbmV3IE1hdHJpeDQoKTtcclxuXHRcdFx0TWF0cml4NC5mcm9tQ29sdW1uTWFqb3JBcnJheSh0aGlzLnZhbHVlcy5zbGljZShpLCBpICsgMTYpLCBtYXQ0KTtcclxuXHRcdFx0cmVzdWx0LnB1c2gobWF0NCk7XHJcblx0XHR9XHJcblx0XHRyZXR1cm4gcmVzdWx0O1xyXG5cdH1cclxufVxyXG5leHBvcnQgdHlwZSBBY2Nlc3NvclBhcm1zID0gUGFydGlhbDxBY2Nlc3Nvcj47XHJcbiIsImltcG9ydCB7IFF1YXRlcm5pb24gfSBmcm9tIFwiLi4vLi4vLi4vbWF0aC9RdWF0ZXJuaW9uXCI7XG5pbXBvcnQgVmVjdG9yNCBmcm9tIFwiLi4vLi4vLi4vbWF0aC9WZWN0b3I0XCI7XG5pbXBvcnQgeyBBbmltYXRpb25DaGFubmVsIH0gZnJvbSBcIi4vQW5pbWF0aW9uQ2hhbm5lbFwiO1xuaW1wb3J0IHsgQW5pbWF0aW9uU2FtcGxlciB9IGZyb20gXCIuL0FuaW1hdGlvblNhbXBsZXJcIjtcblxuZXhwb3J0IGNsYXNzIEFuaW1hdGlvbiB7XG5cdGNvbnN0cnVjdG9yKHB1YmxpYyBuYW1lOiBzdHJpbmcsIHB1YmxpYyBzYW1wbGVyczogQW5pbWF0aW9uU2FtcGxlcltdLCBwdWJsaWMgY2hhbm5lbHM6IEFuaW1hdGlvbkNoYW5uZWxbXSkge31cblx0cGxheSh0aW1lOiBudW1iZXIpIHtcblx0XHRsZXQgbm9kZSwgYW5pbWF0aW9uU2FtcGxlciwgdGFyZ2V0O1xuXHRcdHRoaXM/LmNoYW5uZWxzPy5tYXAoKGNoYW5uZWwpID0+IHtcblx0XHRcdGFuaW1hdGlvblNhbXBsZXIgPSBjaGFubmVsLnNhbXBsZXI7XG5cdFx0XHRhbmltYXRpb25TYW1wbGVyLmdldFZhbHVlKHRpbWUpO1xuXHRcdFx0dGFyZ2V0ID0gY2hhbm5lbC50YXJnZXQ7XG5cdFx0XHRub2RlID0gdGFyZ2V0Lm5vZGU7XG5cdFx0XHRzd2l0Y2ggKHRhcmdldC5wYXRoKSB7XG5cdFx0XHRcdGNhc2UgXCJyb3RhdGlvblwiOlxuXHRcdFx0XHRcdFF1YXRlcm5pb24uY2xvbmUoYW5pbWF0aW9uU2FtcGxlci5jdXJyZW50VmFsdWUsIG5vZGUucXVhdGVybmlvbik7XG5cdFx0XHRcdFx0YnJlYWs7XG5cdFx0XHRcdGNhc2UgXCJ0cmFuc2xhdGlvblwiOlxuXHRcdFx0XHRcdFZlY3RvcjQuY2xvbmUoYW5pbWF0aW9uU2FtcGxlci5jdXJyZW50VmFsdWUsIG5vZGUucG9zaXRpb24pO1xuXHRcdFx0XHRcdGJyZWFrO1xuXHRcdFx0XHRjYXNlIFwic2NhbGVcIjpcblx0XHRcdFx0XHRWZWN0b3I0LmNsb25lKGFuaW1hdGlvblNhbXBsZXIuY3VycmVudFZhbHVlLCBub2RlLnNjYWxlKTtcblx0XHRcdFx0XHRicmVhaztcblx0XHRcdH1cblx0XHR9KTtcblx0fVxufVxuIiwiaW1wb3J0IHsgQW5pbWF0aW9uQ2hhbm5lbFRhcmdldCB9IGZyb20gXCIuL0FuaW1hdGlvbkNoYW5uZWxUYXJnZXRcIjtcbmltcG9ydCB7IEFuaW1hdGlvblNhbXBsZXIgfSBmcm9tIFwiLi9BbmltYXRpb25TYW1wbGVyXCI7XG5cbmV4cG9ydCBjbGFzcyBBbmltYXRpb25DaGFubmVsIHtcblx0c2FtcGxlcjogQW5pbWF0aW9uU2FtcGxlcjtcblx0dGFyZ2V0OiBBbmltYXRpb25DaGFubmVsVGFyZ2V0O1xuXHRjb25zdHJ1Y3RvcigpIHt9XG59XG4iLCJpbXBvcnQgTm9kZSBmcm9tIFwiLi4vLi4vLi4vbWVzaC9Ob2RlXCI7XG5cbmV4cG9ydCBjbGFzcyBBbmltYXRpb25DaGFubmVsVGFyZ2V0IHtcblx0bm9kZTogTm9kZTtcblx0cGF0aDogXCJ0cmFuc2xhdGlvblwiIHwgXCJyb3RhdGlvblwiIHwgXCJzY2FsZVwiIHwgXCJ3ZWlnaHRzXCI7XG5cdGNvbnN0cnVjdG9yKG5vZGUsIHBhdGgpIHtcblx0XHR0aGlzLm5vZGUgPSBub2RlO1xuXHRcdHRoaXMucGF0aCA9IHBhdGg7XG5cdH1cbn1cbiIsImV4cG9ydCBlbnVtIFR5cGUyTnVtT2ZDb21wb25lbnQge1xyXG5cdFwiU0NBTEFSXCIgPSAxLFxyXG5cdFwiVkVDMlwiID0gMixcclxuXHRcIlZFQzNcIiA9IDMsXHJcblx0XCJWRUM0XCIgPSA0LFxyXG5cdFwiTUFUMlwiID0gNCxcclxuXHRcIk1BVDNcIiA9IDksXHJcblx0XCJNQVQ0XCIgPSAxNlxyXG59XHJcbiIsImltcG9ydCB7IFF1YXRlcm5pb24gfSBmcm9tIFwiLi4vLi4vLi4vbWF0aC9RdWF0ZXJuaW9uXCI7XHJcbmltcG9ydCBWZWN0b3I0IGZyb20gXCIuLi8uLi8uLi9tYXRoL1ZlY3RvcjRcIjtcclxuaW1wb3J0IHsgVHlwZTJOdW1PZkNvbXBvbmVudCB9IGZyb20gXCIuLi90eXBlcy9nbHRmVHlwZVwiO1xyXG5leHBvcnQgY2xhc3MgQW5pbWF0aW9uU2FtcGxlciB7XHJcblx0aW5wdXQ6IGFueTtcclxuXHRpbnRlcnBvbGF0aW9uOiBcIkxJTkVBUlwiIHwgXCJTVEVQXCIgfCBcIkNVQklDU1BMSU5FXCI7XHJcblx0b3V0cHV0OiBhbnk7XHJcblx0Y3VycmVudEluZGV4OiBudW1iZXI7XHJcblx0c3RhcnRUaW1lOiBudW1iZXI7XHJcblx0ZW5kVGltZTogbnVtYmVyO1xyXG5cdGN1cnJlbnRWYWx1ZTogVmVjdG9yNCB8IFF1YXRlcm5pb247XHJcblx0ZHVyYXRpb246IG51bWJlcjtcclxuXHRpbnB1dE1heDogbnVtYmVyO1xyXG5cdHByaXZhdGUgaW5wdXRUeXBlOiBzdHJpbmc7XHJcblx0cHJpdmF0ZSBvdXRwdXRUeXBlOiBzdHJpbmc7XHJcblx0Y29uc3RydWN0b3IoKSB7fVxyXG5cdGZvcm1HbHRmKGdsdGYsIHNhbXBsZXIpIHtcclxuXHRcdHRoaXMuaW5wdXQgPSBnbHRmLmFjY2Vzc29yc1tzYW1wbGVyLmlucHV0XS52YWx1ZXM7IC8vcmVxdWlyZWQsIGFjY2Vzc29yIG9iamVjdFxyXG5cdFx0dGhpcy5vdXRwdXQgPSBnbHRmLmFjY2Vzc29yc1tzYW1wbGVyLm91dHB1dF0udmFsdWVzOyAvL3JlcXVpcmVkLCBhY2Nlc3NvciBvYmplY3RcclxuXHRcdHRoaXMuaW50ZXJwb2xhdGlvbiA9IHNhbXBsZXIuaW50ZXJwb2xhdGlvbiAhPT0gdW5kZWZpbmVkID8gc2FtcGxlci5pbnRlcnBvbGF0aW9uIDogXCJMSU5FQVJcIjtcclxuXHRcdHRoaXMuY3VycmVudEluZGV4ID0gMDtcclxuXHRcdC8vIHRoaXMuY3VycmVudFZhbHVlPW5ldyBWZWN0b3I0KCk7XHJcblx0XHR0aGlzLmVuZFRpbWUgPSB0aGlzLmlucHV0W3RoaXMuaW5wdXQubGVuZ3RoIC0gMV07XHJcblx0XHR0aGlzLmlucHV0TWF4ID0gdGhpcy5lbmRUaW1lIC0gdGhpcy5pbnB1dFswXTtcclxuXHRcdHRoaXMuaW5wdXRUeXBlID0gZ2x0Zj8uanNvbj8uYWNjZXNzb3JzW3NhbXBsZXIuaW5wdXRdPy50eXBlO1xyXG5cdFx0dGhpcy5vdXRwdXRUeXBlID0gZ2x0Zj8uanNvbj8uYWNjZXNzb3JzW3NhbXBsZXIub3V0cHV0XT8udHlwZTtcclxuXHR9XHJcblx0Z2V0VmFsdWUodGltZTogbnVtYmVyKTogdm9pZCB7XHJcblx0XHRpZiAodGltZSA+IHRoaXMuZW5kVGltZSkge1xyXG5cdFx0XHR0aW1lIC09IHRoaXMuaW5wdXRNYXggKiBNYXRoLmNlaWwoKHRpbWUgLSB0aGlzLmVuZFRpbWUpIC8gdGhpcy5pbnB1dE1heCk7XHJcblx0XHRcdHRoaXMuY3VycmVudEluZGV4ID0gMDtcclxuXHRcdH1cclxuXHJcblx0XHRjb25zdCBsZW4gPSB0aGlzLmlucHV0Lmxlbmd0aDtcclxuXHRcdHdoaWxlICh0aGlzLmN1cnJlbnRJbmRleCA8PSBsZW4gLSAyICYmIHRpbWUgPj0gdGhpcy5pbnB1dFt0aGlzLmN1cnJlbnRJbmRleCArIDFdKSB7XHJcblx0XHRcdHRoaXMuY3VycmVudEluZGV4Kys7XHJcblx0XHR9XHJcblxyXG5cdFx0aWYgKHRoaXMuY3VycmVudEluZGV4ID49IGxlbiAtIDEpIHtcclxuXHRcdFx0Ly8gbG9vcFxyXG5cdFx0XHR0aW1lIC09IHRoaXMuaW5wdXRNYXg7XHJcblx0XHRcdHRoaXMuY3VycmVudEluZGV4ID0gMDtcclxuXHRcdH1cclxuXHJcblx0XHQvLyBAdG1wOiBhc3N1bWUgbm8gc3RyaWRlXHJcblx0XHRjb25zdCBjb3VudCA9IFR5cGUyTnVtT2ZDb21wb25lbnRbdGhpcy5vdXRwdXRUeXBlXTtcclxuXHJcblx0XHRjb25zdCBhbmltYXRpb25PdXRwdXRWYWx1ZVZlYzRhID0gY291bnQgPT09IDQgPyBuZXcgUXVhdGVybmlvbigpIDogbmV3IFZlY3RvcjQoKTtcclxuXHRcdGNvbnN0IGFuaW1hdGlvbk91dHB1dFZhbHVlVmVjNGIgPSBjb3VudCA9PT0gNCA/IG5ldyBRdWF0ZXJuaW9uKCkgOiBuZXcgVmVjdG9yNCgpO1xyXG5cdFx0aWYgKCF0aGlzLmN1cnJlbnRWYWx1ZSkgdGhpcy5jdXJyZW50VmFsdWUgPSBjb3VudCA9PT0gNCA/IG5ldyBRdWF0ZXJuaW9uKCkgOiBuZXcgVmVjdG9yNCgpO1xyXG5cdFx0Y29uc3QgaSA9IHRoaXMuY3VycmVudEluZGV4O1xyXG5cdFx0Y29uc3QgbyA9IGkgKiBjb3VudDtcclxuXHRcdGNvbnN0IG9uID0gbyArIGNvdW50O1xyXG5cclxuXHRcdGNvbnN0IHUgPSBNYXRoLm1heCgwLCB0aW1lIC0gdGhpcy5pbnB1dFtpXSkgLyAodGhpcy5pbnB1dFtpICsgMV0gLSB0aGlzLmlucHV0W2ldKTtcclxuXHRcdGFuaW1hdGlvbk91dHB1dFZhbHVlVmVjNGEuc2V0KHRoaXMub3V0cHV0W28gKyAwXSwgdGhpcy5vdXRwdXRbbyArIDFdLCB0aGlzLm91dHB1dFtvICsgMl0sIHRoaXMub3V0cHV0W28gKyAzXSk7XHJcblx0XHRhbmltYXRpb25PdXRwdXRWYWx1ZVZlYzRiLnNldChcclxuXHRcdFx0dGhpcy5vdXRwdXRbb24gKyAwXSxcclxuXHRcdFx0dGhpcy5vdXRwdXRbb24gKyAxXSxcclxuXHRcdFx0dGhpcy5vdXRwdXRbb24gKyAyXSxcclxuXHRcdFx0dGhpcy5vdXRwdXRbb24gKyAzXVxyXG5cdFx0KTtcclxuXHRcdHN3aXRjaCAodGhpcy5pbnRlcnBvbGF0aW9uKSB7XHJcblx0XHRcdGNhc2UgXCJMSU5FQVJcIjpcclxuXHRcdFx0XHRjb3VudCA9PT0gNFxyXG5cdFx0XHRcdFx0PyBRdWF0ZXJuaW9uLnNsZXJwKFxyXG5cdFx0XHRcdFx0XHRcdDxRdWF0ZXJuaW9uPmFuaW1hdGlvbk91dHB1dFZhbHVlVmVjNGEsXHJcblx0XHRcdFx0XHRcdFx0PFF1YXRlcm5pb24+YW5pbWF0aW9uT3V0cHV0VmFsdWVWZWM0YixcclxuXHRcdFx0XHRcdFx0XHR1LFxyXG5cdFx0XHRcdFx0XHRcdDxRdWF0ZXJuaW9uPnRoaXMuY3VycmVudFZhbHVlXHJcblx0XHRcdFx0XHQgIClcclxuXHRcdFx0XHRcdDogVmVjdG9yNC5sZXJwKFxyXG5cdFx0XHRcdFx0XHRcdDxWZWN0b3I0PmFuaW1hdGlvbk91dHB1dFZhbHVlVmVjNGEsXHJcblx0XHRcdFx0XHRcdFx0PFZlY3RvcjQ+YW5pbWF0aW9uT3V0cHV0VmFsdWVWZWM0YixcclxuXHRcdFx0XHRcdFx0XHR1LFxyXG5cdFx0XHRcdFx0XHRcdDxWZWN0b3I0PnRoaXMuY3VycmVudFZhbHVlXHJcblx0XHRcdFx0XHQgICk7XHJcblx0XHRcdFx0YnJlYWs7XHJcblx0XHRcdGRlZmF1bHQ6XHJcblx0XHRcdFx0YnJlYWs7XHJcblx0XHR9XHJcblx0fVxyXG59XHJcbiIsImltcG9ydCB7IFJlbmRlck9iamVjdFR5cGUgfSBmcm9tIFwiLi4vY29yZS9XZWJHUFVUeXBlc1wiO1xyXG5pbXBvcnQgR2VvbWV0cnkgZnJvbSBcIi4uL2dlb21ldHJ5L0dlb21ldHJ5XCI7XHJcbmltcG9ydCBQYnJNYXRlcmlhbCBmcm9tIFwiLi4vbWF0ZXJpYWwvUGJyTWF0ZXJpYWxcIjtcclxuaW1wb3J0IENvbG9yIGZyb20gXCIuLi9tYXRoL0NvbG9yXCI7XHJcbmltcG9ydCBNYXRyaXg0IGZyb20gXCIuLi9tYXRoL01hdHJpeDRcIjtcclxuaW1wb3J0IHsgUXVhdGVybmlvbiB9IGZyb20gXCIuLi9tYXRoL1F1YXRlcm5pb25cIjtcclxuaW1wb3J0IFZlY3RvcjMgZnJvbSBcIi4uL21hdGgvVmVjdG9yM1wiO1xyXG5pbXBvcnQgeyBNZXNoIH0gZnJvbSBcIi4uL21lc2gvTWVzaFwiO1xyXG5pbXBvcnQgTm9kZSBmcm9tIFwiLi4vbWVzaC9Ob2RlXCI7XHJcbmltcG9ydCB7IFNLaW5NZXNoIH0gZnJvbSBcIi4uL21lc2gvU0tpbk1lc2hcIjtcclxuaW1wb3J0IHsgRmxvYXQzMkF0dHJpYnV0ZSB9IGZyb20gXCIuLi9yZW5kZXIvQXR0cmlidXRlXCI7XHJcbmltcG9ydCBTYW1wbGVyIGZyb20gXCIuLi9yZW5kZXIvU2FtcGxlclwiO1xyXG5pbXBvcnQgVGV4dHVyZSBmcm9tIFwiLi4vcmVuZGVyL1RleHR1cmVcIjtcclxuaW1wb3J0IHsgZ2VuZXJhdGVOb3JtYWxzLCBnbHRmRW51bSwgbmV3VHlwZWRBcnJheSwgdG9JbmRpY2VzLCBUeXBlZEFycmF5IH0gZnJvbSBcIi4uL3V0aWxzL2dsdGZVdGlsc1wiO1xyXG5pbXBvcnQgeyBBY2Nlc3NvciB9IGZyb20gXCIuL2dsdGYvbGlicy9BY2Nlc3NvclwiO1xyXG5pbXBvcnQgeyBBbmltYXRpb24gfSBmcm9tIFwiLi9nbHRmL2xpYnMvQW5pbWF0aW9uXCI7XHJcbmltcG9ydCB7IEFuaW1hdGlvbkNoYW5uZWwgfSBmcm9tIFwiLi9nbHRmL2xpYnMvQW5pbWF0aW9uQ2hhbm5lbFwiO1xyXG5pbXBvcnQgeyBBbmltYXRpb25DaGFubmVsVGFyZ2V0IH0gZnJvbSBcIi4vZ2x0Zi9saWJzL0FuaW1hdGlvbkNoYW5uZWxUYXJnZXRcIjtcclxuaW1wb3J0IHsgQW5pbWF0aW9uU2FtcGxlciB9IGZyb20gXCIuL2dsdGYvbGlicy9BbmltYXRpb25TYW1wbGVyXCI7XHJcblxyXG5leHBvcnQgdHlwZSBHTFRGUHJpbWl0aXZlID0ge1xyXG5cdHZlcnRleENvdW50OiBudW1iZXI7XHJcblx0aW5kaWNlczogVWludDE2QXJyYXkgfCBVaW50MzJBcnJheSB8IG51bGw7XHJcblx0cG9zaXRpb25zOiBUeXBlZEFycmF5O1xyXG5cdG5vcm1hbHM6IFR5cGVkQXJyYXk7XHJcblx0dXZzOiBUeXBlZEFycmF5IHwgbnVsbDtcclxuXHR1djFzOiBUeXBlZEFycmF5IHwgbnVsbDtcclxuXHR0YW5nZW50czogVHlwZWRBcnJheSB8IG51bGw7XHJcblx0Y29sb3JzOiBUeXBlZEFycmF5IHwgbnVsbDtcclxuXHRtYXRlcmlhbDogYW55O1xyXG5cdGJvdW5kaW5nQm94OiB7XHJcblx0XHRtYXg6IFtudW1iZXIsIG51bWJlciwgbnVtYmVyXTtcclxuXHRcdG1pbjogW251bWJlciwgbnVtYmVyLCBudW1iZXJdO1xyXG5cdH07XHJcbn07XHJcblxyXG5leHBvcnQgdHlwZSBHTFRGTWVzaCA9IEFycmF5PEdMVEZQcmltaXRpdmU+O1xyXG5cclxuZXhwb3J0IHR5cGUgR0xURkFuaW1hdGlvbiA9IHtcclxuXHRjaGFubmVsczogQXJyYXk8e1xyXG5cdFx0aW5wdXQ6IFR5cGVkQXJyYXk7XHJcblx0XHRvdXRwdXQ6IFR5cGVkQXJyYXk7XHJcblx0XHRpbnRlcnBvbGF0aW9uOiBzdHJpbmc7XHJcblx0XHRub2RlOiBudW1iZXI7XHJcblx0XHRwYXRoOiBzdHJpbmc7XHJcblx0fT47XHJcblx0bGVuZ3RoOiBudW1iZXI7XHJcbn07XHJcblxyXG5leHBvcnQgY2xhc3MgR0xURiB7XHJcblx0c2NlbmVzOiBBcnJheTxOb2RlPjtcclxuXHJcblx0bm9kZXM6IEFycmF5PGFueT47XHJcblxyXG5cdGNhbWVyYXM6IEFycmF5PGFueT47XHJcblxyXG5cdG1lc2hlczogQXJyYXk8YW55PjtcclxuXHJcblx0aW1hZ2VzOiBBcnJheTxJbWFnZUJpdG1hcD47XHJcblxyXG5cdGFuaW1hdGlvbnM6IEFycmF5PEdMVEZBbmltYXRpb24+O1xyXG5cclxuXHRwcml2YXRlIGdsYk9mZnNldDogbnVtYmVyO1xyXG5cclxuXHRwcml2YXRlIGJ1ZmZlcnM6IEFycmF5QnVmZmVyW107XHJcblxyXG5cdHByaXZhdGUgYnVmZmVyVmlld3M6IGFueTtcclxuXHJcblx0YWNjZXNzb3JzOiBhbnk7XHJcblxyXG5cdGpzb246IGFueTtcclxuXHJcblx0cHJpdmF0ZSBtYXRlcmlhbHM6IGFueTtcclxuXHJcblx0cHJpdmF0ZSBnbGJCaW4/OiBBcnJheUJ1ZmZlcjtcclxuXHJcblx0cHJpdmF0ZSByb290VXJsOiBzdHJpbmc7XHJcblxyXG5cdHRleHR1cmVzOiBhbnlbXTtcclxuXHJcblx0c2FtcGxlcnM6IFNhbXBsZXJbXTtcclxuXHJcblx0Y29uc3RydWN0b3IoanNvbjogYW55LCByb290VXJsOiBzdHJpbmcsIGdsYk9mZnNldCA9IDAsIGdsYkJpbj86IEFycmF5QnVmZmVyKSB7XHJcblx0XHR0aGlzLmpzb24gPSBqc29uO1xyXG5cdFx0dGhpcy5idWZmZXJWaWV3cyA9IGpzb24uYnVmZmVyVmlld3M7XHJcblx0XHR0aGlzLmdsYk9mZnNldCA9IGdsYk9mZnNldDtcclxuXHRcdHRoaXMucm9vdFVybCA9IHJvb3RVcmw7XHJcblx0XHR0aGlzLnNjZW5lcyA9IGpzb24uc2NlbmVzO1xyXG5cdFx0dGhpcy5jYW1lcmFzID0ganNvbi5jYW1lcmFzIHx8IFtdO1xyXG5cdFx0dGhpcy5nbGJCaW4gPSBnbGJCaW47XHJcblx0XHR0aGlzLm1lc2hlcyA9IFtdO1xyXG5cdH1cclxuXHRhc3luYyBwYXJzZURhdGEoKSB7XHJcblx0XHR0aGlzLmJ1ZmZlcnMgPSBhd2FpdCB0aGlzLmxvYWRCdWZmZXMoKTtcclxuXHRcdHRoaXMuaW1hZ2VzID0gYXdhaXQgdGhpcy5sb2FkSW1hZ2VzKCk7XHJcblx0XHR0aGlzLnBhcnNlU2FtcGxlcnMoKTtcclxuXHRcdHRoaXMucGFyc2VUZXh0dXJlcygpO1xyXG5cdFx0dGhpcy5wYXJzZU1hdGVyaWFscygpO1xyXG5cdFx0dGhpcy5wYXJzZUFjY2Vzc29ycygpO1xyXG5cdFx0dGhpcy5wYXJzZU1lc2hzKCk7XHJcblx0XHR0aGlzLnBhcnNlTm9kZXMoKTtcclxuXHRcdHRoaXMubm9ybWFsaXplRGF0YSgpO1xyXG5cdFx0dGhpcy5wYXJzZVNjZW5lcygpO1xyXG5cdFx0dGhpcy5wYXJzZUFuaW1hdGlvbnMoKTtcclxuXHR9XHJcblx0cHJpdmF0ZSBnZXRBY2Nlc3NvcihpbmRleDogbnVtYmVyKSB7XHJcblx0XHRyZXR1cm4gdGhpcy5hY2Nlc3NvcnNbaW5kZXhdO1xyXG5cdH1cclxuXHRwcml2YXRlIHBhcnNlU2FtcGxlcnMoKSB7XHJcblx0XHR0aGlzLnNhbXBsZXJzID0gdGhpcy5qc29uLnNhbXBsZXJzXHJcblx0XHRcdD8gKHRoaXMuanNvbi5zYW1wbGVycyBhcyBBcnJheTxhbnk+KS5tYXAoKHNhbXBsZXIpID0+IHRoaXMuZ2V0U2FtcGxlcihzYW1wbGVyKSlcclxuXHRcdFx0OiBbXTtcclxuXHR9XHJcblx0cHJpdmF0ZSBwYXJzZVNjZW5lcygpIHtcclxuXHRcdHRoaXMuc2NlbmVzID0gdGhpcy5qc29uLnNjZW5lcy5tYXAoKHNjZW5lKSA9PiB7XHJcblx0XHRcdGNvbnN0IG5vZGVzID0gc2NlbmU/Lm5vZGVzPy5tYXAoKG5vZGVJZCkgPT4ge1xyXG5cdFx0XHRcdHJldHVybiB0aGlzLm5vZGVzW25vZGVJZF07XHJcblx0XHRcdH0pO1xyXG5cdFx0XHRyZXR1cm4gbm9kZXM7XHJcblx0XHR9KTtcclxuXHR9XHJcblx0cHJpdmF0ZSBwYXJzZVRleHR1cmVzKCkge1xyXG5cdFx0dGhpcy50ZXh0dXJlcyA9IHRoaXMuanNvbi50ZXh0dXJlc1xyXG5cdFx0XHQ/ICh0aGlzLmpzb24udGV4dHVyZXMgYXMgQXJyYXk8YW55PikubWFwKCh0ZXh0dXJlKSA9PiB7XHJcblx0XHRcdFx0XHRyZXR1cm4ge1xyXG5cdFx0XHRcdFx0XHRzYW1wbGVyOiB0ZXh0dXJlLnNhbXBsZXIgIT09IHVuZGVmaW5lZCA/IHRoaXMuc2FtcGxlcnNbdGV4dHVyZS5zYW1wbGVyXSA6IHRoaXMuZ2V0U2FtcGxlcih7fSksXHJcblx0XHRcdFx0XHRcdHRleHR1cmU6IHRoaXMuY3JlYXRlVGV4dHVyZSh0ZXh0dXJlLnNvdXJjZSlcclxuXHRcdFx0XHRcdH07XHJcblx0XHRcdCAgfSlcclxuXHRcdFx0OiBbXTtcclxuXHR9XHJcblx0cHJpdmF0ZSBwYXJzZU1hdGVyaWFscygpIHtcclxuXHRcdHRoaXMubWF0ZXJpYWxzID0gdGhpcy5qc29uLm1hdGVyaWFsc1xyXG5cdFx0XHQ/ICh0aGlzLmpzb24ubWF0ZXJpYWxzIGFzIEFycmF5PGFueT4pLm1hcCgobWF0ZXJpYWwpID0+IHtcclxuXHRcdFx0XHRcdGNvbnN0IG1hdCA9IG5ldyBQYnJNYXRlcmlhbCgpO1xyXG5cdFx0XHRcdFx0Y29uc3Qge1xyXG5cdFx0XHRcdFx0XHRiYXNlQ29sb3JGYWN0b3IsXHJcblx0XHRcdFx0XHRcdG1ldGFsbGljRmFjdG9yLFxyXG5cdFx0XHRcdFx0XHRtZXRhbGxpY1JvdWdobmVzc1RleHR1cmUsXHJcblx0XHRcdFx0XHRcdGJhc2VDb2xvclRleHR1cmUsXHJcblx0XHRcdFx0XHRcdHJvdWdobmVzc0ZhY3RvclxyXG5cdFx0XHRcdFx0fSA9IG1hdGVyaWFsLnBick1ldGFsbGljUm91Z2huZXNzO1xyXG5cdFx0XHRcdFx0aWYgKG1hdGVyaWFsLm5vcm1hbFRleHR1cmUpIG1hdC5ub3JtYWxUZXh0dXJlID0gdGhpcy50ZXh0dXJlc1ttYXRlcmlhbC5ub3JtYWxUZXh0dXJlLmluZGV4XS50ZXh0dXJlO1xyXG5cdFx0XHRcdFx0aWYgKG1hdGVyaWFsLm9jY2x1c2lvblRleHR1cmUpXHJcblx0XHRcdFx0XHRcdG1hdC5hb1RleHR1cmUgPSB0aGlzLnRleHR1cmVzW21hdGVyaWFsLm9jY2x1c2lvblRleHR1cmUuaW5kZXhdLnRleHR1cmU7XHJcblx0XHRcdFx0XHRpZiAobWF0ZXJpYWwuZW1pc3NpdmVUZXh0dXJlKVxyXG5cdFx0XHRcdFx0XHRtYXQuZW1pc3NpdmVUZXh0dXJlID0gdGhpcy50ZXh0dXJlc1ttYXRlcmlhbC5lbWlzc2l2ZVRleHR1cmUuaW5kZXhdLnRleHR1cmU7XHJcblx0XHRcdFx0XHRpZiAoYmFzZUNvbG9yVGV4dHVyZSkgbWF0LmJhc2VUZXh0dXJlID0gdGhpcy50ZXh0dXJlc1tiYXNlQ29sb3JUZXh0dXJlLmluZGV4XS50ZXh0dXJlO1xyXG5cdFx0XHRcdFx0aWYgKG1ldGFsbGljUm91Z2huZXNzVGV4dHVyZSlcclxuXHRcdFx0XHRcdFx0bWF0Lm1ldGFsbmVzc1JvdWdobmVzc1RleHR1cmUgPSB0aGlzLnRleHR1cmVzW21ldGFsbGljUm91Z2huZXNzVGV4dHVyZS5pbmRleF0udGV4dHVyZTtcclxuXHRcdFx0XHRcdGlmIChiYXNlQ29sb3JGYWN0b3IpXHJcblx0XHRcdFx0XHRcdG1hdC5jb2xvciA9IG5ldyBDb2xvcihiYXNlQ29sb3JGYWN0b3JbMF0sIGJhc2VDb2xvckZhY3RvclsxXSwgYmFzZUNvbG9yRmFjdG9yWzJdKTtcclxuXHRcdFx0XHRcdG1hdC5tZXRhbG5lc3MgPSBtZXRhbGxpY0ZhY3RvciA/PyAxLjA7XHJcblx0XHRcdFx0XHRtYXQucm91Z2huZXNzID0gcm91Z2huZXNzRmFjdG9yID8/IDAuMDtcclxuXHRcdFx0XHRcdG1hdC5iYXNlU2FtcGxlciA9IG5ldyBTYW1wbGVyKHtcclxuXHRcdFx0XHRcdFx0bWFnRmlsdGVyOiBcImxpbmVhclwiLFxyXG5cdFx0XHRcdFx0XHRtaW5GaWx0ZXI6IFwibGluZWFyXCIsXHJcblx0XHRcdFx0XHRcdGFkZHJlc3NNb2RlVTogXCJyZXBlYXRcIixcclxuXHRcdFx0XHRcdFx0YWRkcmVzc01vZGVWOiBcInJlcGVhdFwiXHJcblx0XHRcdFx0XHR9KTtcclxuXHRcdFx0XHRcdHJldHVybiBtYXQ7XHJcblx0XHRcdCAgfSlcclxuXHRcdFx0OiBbXTtcclxuXHR9XHJcblx0cHJpdmF0ZSBwYXJzZUFjY2Vzc29ycygpIHtcclxuXHRcdHRoaXMuYWNjZXNzb3JzID0gKHRoaXMuanNvbi5hY2Nlc3NvcnMgYXMgQXJyYXk8YW55PikubWFwKChhY2Nlc3NvciwgaW5kZXgpID0+IHtcclxuXHRcdFx0Y29uc3QgbiA9IGdsdGZFbnVtW2FjY2Vzc29yLnR5cGVdIGFzIG51bWJlcjtcclxuXHRcdFx0bGV0IGFycmF5O1xyXG5cdFx0XHRpZiAoYWNjZXNzb3IuYnVmZmVyVmlldyA9PT0gdW5kZWZpbmVkKSB7XHJcblx0XHRcdFx0YXJyYXkgPSBuZXdUeXBlZEFycmF5KFxyXG5cdFx0XHRcdFx0YWNjZXNzb3IuY29tcG9uZW50VHlwZSxcclxuXHRcdFx0XHRcdG5ldyBBcnJheUJ1ZmZlcihuICogYWNjZXNzb3IuY291bnQgKiAoZ2x0ZkVudW1bYWNjZXNzb3IuY29tcG9uZW50VHlwZV0gYXMgbnVtYmVyKSksXHJcblx0XHRcdFx0XHQwLFxyXG5cdFx0XHRcdFx0YWNjZXNzb3IuY291bnQgKiBuXHJcblx0XHRcdFx0KTtcclxuXHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHRhcnJheSA9IHRoaXMuZ2V0QnVmZmVyVmlldyhhY2Nlc3Nvciwgbik7XHJcblx0XHRcdH1cclxuXHJcblx0XHRcdGlmIChhY2Nlc3Nvci5zcGFyc2UpIHtcclxuXHRcdFx0XHRhY2Nlc3Nvci5zcGFyc2UuaW5kaWNlcy5jb3VudCA9IGFjY2Vzc29yLnNwYXJzZS5jb3VudDtcclxuXHRcdFx0XHRhY2Nlc3Nvci5zcGFyc2UudmFsdWVzLmNvdW50ID0gYWNjZXNzb3Iuc3BhcnNlLmNvdW50O1xyXG5cdFx0XHRcdGFjY2Vzc29yLnNwYXJzZS52YWx1ZXMuY29tcG9uZW50VHlwZSA9IGFjY2Vzc29yLmNvbXBvbmVudFR5cGU7XHJcblx0XHRcdFx0Y29uc3QgaW5kaWNlcyA9IHRoaXMuZ2V0QnVmZmVyVmlldyhhY2Nlc3Nvci5zcGFyc2UuaW5kaWNlcywgMSk7XHJcblx0XHRcdFx0Y29uc3QgdmFsdWVzID0gdGhpcy5nZXRCdWZmZXJWaWV3KGFjY2Vzc29yLnNwYXJzZS52YWx1ZXMsIG4pO1xyXG5cdFx0XHRcdGZvciAobGV0IGkgPSAwOyBpIDwgYWNjZXNzb3Iuc3BhcnNlLmNvdW50OyBpICs9IDEpIHtcclxuXHRcdFx0XHRcdGZvciAobGV0IGogPSAwOyBqIDwgbjsgaiArPSAxKSB7XHJcblx0XHRcdFx0XHRcdGFycmF5W2luZGljZXNbaV0gKiBuICsgal0gPSB2YWx1ZXNbaSAqIG4gKyBqXTtcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHR9XHJcblx0XHRcdH1cclxuXHRcdFx0cmV0dXJuIG5ldyBBY2Nlc3Nvcih7XHJcblx0XHRcdFx0Y29tcG9uZW50VHlwZTogPG51bWJlcj5nbHRmRW51bVthY2Nlc3Nvci5jb21wb25lbnRUeXBlXSxcclxuXHRcdFx0XHRjb3VudDogYWNjZXNzb3IuY291bnQsXHJcblx0XHRcdFx0dHlwZTogbixcclxuXHRcdFx0XHR2YWx1ZXM6IGFycmF5LFxyXG5cdFx0XHRcdGlkOiBpbmRleCxcclxuXHRcdFx0XHRtaW46IGFjY2Vzc29yPy5taW4sXHJcblx0XHRcdFx0bWF4OiBhY2Nlc3Nvcj8ubWF4XHJcblx0XHRcdH0pO1xyXG5cdFx0fSk7XHJcblx0fVxyXG5cdHByaXZhdGUgcGFyc2VBbmltYXRpb25zKCkge1xyXG5cdFx0dGhpcy5hbmltYXRpb25zID0gdGhpcz8uanNvbj8uYW5pbWF0aW9ucz8ubWFwKChnbHRmQW5pbWF0aW9uLCBpbmRleCkgPT4ge1xyXG5cdFx0XHRjb25zdCBzYW1wbGVycyA9IGdsdGZBbmltYXRpb24/LnNhbXBsZXJzPy5tYXAoKGdsdGZTYW1wbGVyKSA9PiB7XHJcblx0XHRcdFx0Y29uc3Qgc2FtcGxlciA9IG5ldyBBbmltYXRpb25TYW1wbGVyKCk7XHJcblx0XHRcdFx0c2FtcGxlci5mb3JtR2x0Zih0aGlzLCBnbHRmU2FtcGxlcik7XHJcblx0XHRcdFx0cmV0dXJuIHNhbXBsZXI7XHJcblx0XHRcdH0pO1xyXG5cdFx0XHRjb25zdCBjaGFubmVscyA9IGdsdGZBbmltYXRpb24/LmNoYW5uZWxzPy5tYXAoKGdsdGZDaGFubmVsKSA9PiB7XHJcblx0XHRcdFx0Y29uc3QgYW5pbWF0aW9uQ2hhbm5lbCA9IG5ldyBBbmltYXRpb25DaGFubmVsKCk7XHJcblx0XHRcdFx0YW5pbWF0aW9uQ2hhbm5lbC5zYW1wbGVyID0gc2FtcGxlcnNbZ2x0ZkNoYW5uZWwuc2FtcGxlcl07XHJcblx0XHRcdFx0YW5pbWF0aW9uQ2hhbm5lbC50YXJnZXQgPSBuZXcgQW5pbWF0aW9uQ2hhbm5lbFRhcmdldChcclxuXHRcdFx0XHRcdHRoaXMubm9kZXNbZ2x0ZkNoYW5uZWwudGFyZ2V0Lm5vZGVdLFxyXG5cdFx0XHRcdFx0Z2x0ZkNoYW5uZWwudGFyZ2V0LnBhdGhcclxuXHRcdFx0XHQpO1xyXG5cdFx0XHRcdHJldHVybiBhbmltYXRpb25DaGFubmVsO1xyXG5cdFx0XHR9KTtcclxuXHRcdFx0Y29uc3QgYW5pbWF0aW9uID0gbmV3IEFuaW1hdGlvbihpbmRleC50b1N0cmluZygpLCBzYW1wbGVycywgY2hhbm5lbHMpO1xyXG5cdFx0XHRyZXR1cm4gYW5pbWF0aW9uO1xyXG5cdFx0fSk7XHJcblx0fVxyXG5cdHByaXZhdGUgcGFyc2VNZXNocygpIHtcclxuXHRcdHRoaXMubWVzaGVzID0gdGhpcz8uanNvbj8ubWVzaGVzPy5tYXA/LigoZ2x0Zm1lc2gpID0+IHtcclxuXHRcdFx0cmV0dXJuIHtcclxuXHRcdFx0XHRuYW1lOiBnbHRmbWVzaC5uYW1lLFxyXG5cdFx0XHRcdHByaW1pdGl2ZXM6IGdsdGZtZXNoPy5wcmltaXRpdmVzPy5tYXA/LigocHJpbWl0aXZlKSA9PiB7XHJcblx0XHRcdFx0XHRjb25zdCBtYXRlcmlhbCA9XHJcblx0XHRcdFx0XHRcdHByaW1pdGl2ZS5tYXRlcmlhbCAhPT0gdW5kZWZpbmVkXHJcblx0XHRcdFx0XHRcdFx0PyB0aGlzLm1hdGVyaWFsc1twcmltaXRpdmUubWF0ZXJpYWxdXHJcblx0XHRcdFx0XHRcdFx0OiB7IHBick1ldGFsbGljUm91Z2huZXNzOiB7fSB9O1xyXG5cdFx0XHRcdFx0Y29uc3QgZ2VvID0gdGhpcy5jcmVhdGVHZW9tZXRyeShwcmltaXRpdmUsIG1hdGVyaWFsKTtcclxuXHRcdFx0XHRcdGNvbnN0IG1lc2ggPSBuZXcgTWVzaChnZW8sIG1hdGVyaWFsKTtcclxuXHRcdFx0XHRcdG1lc2gubmFtZSA9IGdsdGZtZXNoLm5hbWU7XHJcblx0XHRcdFx0XHRyZXR1cm4gbWVzaDtcclxuXHRcdFx0XHR9KVxyXG5cdFx0XHR9O1xyXG5cdFx0fSk7XHJcblx0fVxyXG5cdHByaXZhdGUgZ2V0U2FtcGxlcihzYW1wbGVySnNvbjogYW55KSB7XHJcblx0XHRyZXR1cm4gbmV3IFNhbXBsZXIoe1xyXG5cdFx0XHRtYWdGaWx0ZXI6IGdsdGZFbnVtW3NhbXBsZXJKc29uLm1hZ0ZpbHRlciB8fCA5NzI5XSBhcyBHUFVGaWx0ZXJNb2RlLFxyXG5cdFx0XHRtaW5GaWx0ZXI6IGdsdGZFbnVtW3NhbXBsZXJKc29uLm1pbkZpbHRlciB8fCA5NzI5XSBhcyBHUFVGaWx0ZXJNb2RlLFxyXG5cdFx0XHRhZGRyZXNzTW9kZVU6IGdsdGZFbnVtW3NhbXBsZXJKc29uLndyYXBTIHx8IDEwNDk3XSBhcyBHUFVBZGRyZXNzTW9kZSxcclxuXHRcdFx0YWRkcmVzc01vZGVWOiBnbHRmRW51bVtzYW1wbGVySnNvbi53cmFwVCB8fCAxMDQ5N10gYXMgR1BVQWRkcmVzc01vZGVcclxuXHRcdH0pO1xyXG5cdH1cclxuXHRwcml2YXRlIGdldEJ1ZmZlclZpZXcoYWNjZXNzb3I6IGFueSwgbjogbnVtYmVyKSB7XHJcblx0XHRjb25zdCBidWZmZXJWaWV3ID0gdGhpcy5idWZmZXJWaWV3c1thY2Nlc3Nvci5idWZmZXJWaWV3XTtcclxuXHRcdGNvbnN0IG9mZnNldCA9IChidWZmZXJWaWV3LmJ5dGVPZmZzZXQgfHwgMCkgKyAoYWNjZXNzb3IuYnl0ZU9mZnNldCB8fCAwKTtcclxuXHRcdGNvbnN0IHN0cmlkZSA9IE1hdGgubWF4KGJ1ZmZlclZpZXcuYnl0ZVN0cmlkZSAvIDQgfHwgMCwgbik7XHJcblx0XHRsZXQgYXJyYXkgPSBuZXdUeXBlZEFycmF5KFxyXG5cdFx0XHRhY2Nlc3Nvci5jb21wb25lbnRUeXBlLFxyXG5cdFx0XHR0aGlzLmJ1ZmZlcnNbYnVmZmVyVmlldy5idWZmZXJdLFxyXG5cdFx0XHRidWZmZXJWaWV3LmJ1ZmZlciA9PT0gMCA/IG9mZnNldCArIHRoaXMuZ2xiT2Zmc2V0IDogb2Zmc2V0LFxyXG5cdFx0XHQoYWNjZXNzb3IuY291bnQgLSAxKSAqIHN0cmlkZSArIG5cclxuXHRcdCk7XHJcblx0XHRpZiAoc3RyaWRlID4gbikge1xyXG5cdFx0XHRjb25zdCBUeXBlZEFycmF5Q29uc3RydWN0b3IgPSBhcnJheS5jb25zdHJ1Y3RvciBhcyB7XHJcblx0XHRcdFx0bmV3ICguLi5hcmdzOiBhbnkpOiBUeXBlZEFycmF5O1xyXG5cdFx0XHR9O1xyXG5cdFx0XHRjb25zdCBzdHJpZGVkID0gbmV3IFR5cGVkQXJyYXlDb25zdHJ1Y3RvcihhY2Nlc3Nvci5jb3VudCAqIG4pO1xyXG5cdFx0XHRmb3IgKGxldCBpID0gMCwgaiA9IDA7IGkgPCBzdHJpZGVkLmxlbmd0aDsgaSArPSBuLCBqICs9IHN0cmlkZSkge1xyXG5cdFx0XHRcdGZvciAobGV0IGsgPSAwOyBrIDwgbjsgayArPSAxKSB7XHJcblx0XHRcdFx0XHRzdHJpZGVkW2kgKyBrXSA9IGFycmF5W2ogKyBrXTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdH1cclxuXHRcdFx0YXJyYXkgPSBzdHJpZGVkO1xyXG5cdFx0fVxyXG5cdFx0cmV0dXJuIGFycmF5O1xyXG5cdH1cclxuXHRwcml2YXRlIGNyZWF0ZUdlb21ldHJ5KHByaW1pdGl2ZSwgbWF0ZXJpYWwpIHtcclxuXHRcdGxldCBpbmRpY2VzID0gbnVsbDtcclxuXHRcdGxldCBhY2Nlc3NvciA9IG51bGw7XHJcblx0XHRjb25zdCBkZWZpbmVzOiB7IFtwcm9wOiBzdHJpbmddOiBib29sZWFuIHwgbnVtYmVyIH0gPSB7IEhBU19OT1JNQUw6IHRydWUgfTtcclxuXHRcdGxldCB2ZXJ0ZXhDb3VudDtcclxuXHRcdGFjY2Vzc29yID0gdGhpcy5nZXRBY2Nlc3NvcihwcmltaXRpdmUuYXR0cmlidXRlcy5QT1NJVElPTik7XHJcblx0XHRjb25zdCBwb3NpdGlvbnMgPSBhY2Nlc3Nvci5nZXRBcnJheSgpO1xyXG5cdFx0dmVydGV4Q291bnQgPSBhY2Nlc3Nvci5jb3VudDtcclxuXHRcdC8vIGNvbnN0IHsgbWF4LCBtaW4gfSA9IGFjY2Vzc29yO1xyXG5cdFx0Ly8gY29uc3QgYm91bmRpbmdCb3ggPSB7IG1heCwgbWluIH07XHJcblx0XHRpZiAocHJpbWl0aXZlLmluZGljZXMgIT09IHVuZGVmaW5lZCkge1xyXG5cdFx0XHRhY2Nlc3NvciA9IHRoaXMuZ2V0QWNjZXNzb3IocHJpbWl0aXZlLmluZGljZXMpO1xyXG5cdFx0XHRpbmRpY2VzID0gdG9JbmRpY2VzKGFjY2Vzc29yLmdldEFycmF5KCkpO1xyXG5cdFx0XHR2ZXJ0ZXhDb3VudCA9IGFjY2Vzc29yLmNvdW50O1xyXG5cdFx0fVxyXG5cdFx0bGV0IG5vcm1hbHM7XHJcblxyXG5cdFx0aWYgKHByaW1pdGl2ZS5hdHRyaWJ1dGVzLk5PUk1BTCAhPT0gdW5kZWZpbmVkKSB7XHJcblx0XHRcdGFjY2Vzc29yID0gdGhpcy5nZXRBY2Nlc3NvcihwcmltaXRpdmUuYXR0cmlidXRlcy5OT1JNQUwpO1xyXG5cdFx0XHRub3JtYWxzID0gYWNjZXNzb3IuZ2V0QXJyYXkoKTtcclxuXHRcdH0gZWxzZSB7XHJcblx0XHRcdG5vcm1hbHMgPSBnZW5lcmF0ZU5vcm1hbHMoaW5kaWNlcywgcG9zaXRpb25zKTtcclxuXHRcdH1cclxuXHJcblx0XHRsZXQgdXZzID0gbnVsbDtcclxuXHRcdGlmIChwcmltaXRpdmUuYXR0cmlidXRlcy5URVhDT09SRF8wICE9PSB1bmRlZmluZWQpIHtcclxuXHRcdFx0YWNjZXNzb3IgPSB0aGlzLmdldEFjY2Vzc29yKHByaW1pdGl2ZS5hdHRyaWJ1dGVzLlRFWENPT1JEXzApO1xyXG5cdFx0XHR1dnMgPSBhY2Nlc3Nvci5nZXRBcnJheSgpO1xyXG5cdFx0XHRkZWZpbmVzLkhBU19VViA9IHRydWU7XHJcblx0XHR9XHJcblx0XHRsZXQgdXYxcyA9IG51bGw7XHJcblx0XHRpZiAocHJpbWl0aXZlLmF0dHJpYnV0ZXMuVEVYQ09PUkRfMSAhPT0gdW5kZWZpbmVkKSB7XHJcblx0XHRcdGFjY2Vzc29yID0gdGhpcy5nZXRBY2Nlc3NvcihwcmltaXRpdmUuYXR0cmlidXRlcy5URVhDT09SRF8xKTtcclxuXHRcdFx0dXYxcyA9IGFjY2Vzc29yLmdldEFycmF5KCk7XHJcblx0XHRcdGRlZmluZXMuSEFTX1VWMSA9IHRydWU7XHJcblx0XHR9XHJcblxyXG5cdFx0bGV0IHRhbmdlbnRzID0gbnVsbDtcclxuXHRcdGlmIChwcmltaXRpdmUuYXR0cmlidXRlcy5UQU5HRU5UICE9PSB1bmRlZmluZWQgJiYgcHJpbWl0aXZlLmF0dHJpYnV0ZXMuTk9STUFMICE9PSB1bmRlZmluZWQpIHtcclxuXHRcdFx0YWNjZXNzb3IgPSB0aGlzLmdldEFjY2Vzc29yKHByaW1pdGl2ZS5hdHRyaWJ1dGVzLlRBTkdFTlQpO1xyXG5cdFx0XHR0YW5nZW50cyA9IGFjY2Vzc29yLmdldEFycmF5KCk7XHJcblx0XHRcdC8vIGRlZmluZXMuSEFTX1RBTkdFTlQgPSB0cnVlO1xyXG5cdFx0fSBlbHNlIGlmIChtYXRlcmlhbC5ub3JtYWxUZXh0dXJlKSB7XHJcblx0XHRcdC8vIHRhbmdlbnRzID0gZ2VuZXJhdGVUYW5nZW50cyhpbmRpY2VzLCBwb3NpdGlvbnMsIG5vcm1hbHMsIHV2cyEpO1xyXG5cdFx0fVxyXG5cdFx0bGV0IGNvbG9ycyA9IG51bGwsXHJcblx0XHRcdGNvbG9yU2l6ZSA9IDM7XHJcblx0XHRpZiAocHJpbWl0aXZlLmF0dHJpYnV0ZXMuQ09MT1JfMCAhPT0gdW5kZWZpbmVkKSB7XHJcblx0XHRcdGFjY2Vzc29yID0gdGhpcy5hY2Nlc3NvcnNbcHJpbWl0aXZlLmF0dHJpYnV0ZXMuQ09MT1JfMF07XHJcblx0XHRcdGNvbG9ycyA9IGFjY2Vzc29yLmdldEFycmF5KCk7XHJcblx0XHRcdGNvbG9yU2l6ZSA9IGFjY2Vzc29yLnR5cGU7XHJcblx0XHRcdGRlZmluZXMuSEFTX0NPTE9SID0gdHJ1ZTtcclxuXHRcdH1cclxuXHRcdGxldCBqb2ludHMgPSBudWxsO1xyXG5cdFx0aWYgKHByaW1pdGl2ZS5hdHRyaWJ1dGVzLkpPSU5UU18wICE9PSB1bmRlZmluZWQpIHtcclxuXHRcdFx0YWNjZXNzb3IgPSB0aGlzLmdldEFjY2Vzc29yKHByaW1pdGl2ZS5hdHRyaWJ1dGVzLkpPSU5UU18wKTtcclxuXHRcdFx0am9pbnRzID0gYWNjZXNzb3IuZ2V0QXJyYXkoKTtcclxuXHRcdFx0ZGVmaW5lcy5IQVNfU0tJTiA9IHRydWU7XHJcblx0XHR9XHJcblx0XHRsZXQgd2VpZ2h0cyA9IG51bGw7XHJcblx0XHRpZiAocHJpbWl0aXZlLmF0dHJpYnV0ZXMuV0VJR0hUU18wICE9PSB1bmRlZmluZWQpIHtcclxuXHRcdFx0YWNjZXNzb3IgPSB0aGlzLmdldEFjY2Vzc29yKHByaW1pdGl2ZS5hdHRyaWJ1dGVzLldFSUdIVFNfMCk7XHJcblx0XHRcdHdlaWdodHMgPSBhY2Nlc3Nvci5nZXRBcnJheSgpO1xyXG5cdFx0fVxyXG5cdFx0Y29uc3QgZ2VvID0gbmV3IEdlb21ldHJ5KHsgdHlwZTogXCJwYnJHZW9tdHJ5XCIgfSk7XHJcblx0XHRpZiAoaW5kaWNlcykgZ2VvLnNldEluZGljZShpbmRpY2VzKTtcclxuXHRcdGlmIChwb3NpdGlvbnMpIGdlby5zZXRBdHRyaWJ1dGUobmV3IEZsb2F0MzJBdHRyaWJ1dGUoXCJwb3NpdGlvblwiLCBBcnJheS5mcm9tKHBvc2l0aW9ucyksIDMpKTtcclxuXHRcdGlmIChub3JtYWxzKSBnZW8uc2V0QXR0cmlidXRlKG5ldyBGbG9hdDMyQXR0cmlidXRlKFwibm9ybWFsXCIsIEFycmF5LmZyb20obm9ybWFscyksIDMpKTtcclxuXHRcdGlmIChjb2xvcnMpIGdlby5zZXRBdHRyaWJ1dGUobmV3IEZsb2F0MzJBdHRyaWJ1dGUoXCJjb2xvclwiLCBBcnJheS5mcm9tKGNvbG9ycyksIGNvbG9yU2l6ZSkpO1xyXG5cdFx0aWYgKHV2cykgZ2VvLnNldEF0dHJpYnV0ZShuZXcgRmxvYXQzMkF0dHJpYnV0ZShcInV2XCIsIEFycmF5LmZyb20odXZzKSwgMikpO1xyXG5cdFx0aWYgKGpvaW50cykgZ2VvLnNldEF0dHJpYnV0ZShuZXcgRmxvYXQzMkF0dHJpYnV0ZShcImpvaW50MFwiLCBBcnJheS5mcm9tKGpvaW50cyksIDQpKTtcclxuXHRcdGlmICh3ZWlnaHRzKSBnZW8uc2V0QXR0cmlidXRlKG5ldyBGbG9hdDMyQXR0cmlidXRlKFwid2VpZ2h0MFwiLCBBcnJheS5mcm9tKHdlaWdodHMpLCA0KSk7XHJcblx0XHRnZW8uZGVmaW5lcyA9IGRlZmluZXM7XHJcblx0XHRnZW8uY29tcHV0ZUJvdW5kaW5nU3BoZXJlKEFycmF5LmZyb20ocG9zaXRpb25zKSk7XHJcblx0XHRnZW8uY291bnQgPSB2ZXJ0ZXhDb3VudDtcclxuXHRcdHJldHVybiBnZW87XHJcblx0fVxyXG5cdHByaXZhdGUgY3JlYXRlVGV4dHVyZShzb3VyY2U6IG51bWJlcikge1xyXG5cdFx0cmV0dXJuIG5ldyBUZXh0dXJlKHtcclxuXHRcdFx0c2l6ZToge1xyXG5cdFx0XHRcdHdpZHRoOiB0aGlzLmltYWdlc1tzb3VyY2VdLndpZHRoLFxyXG5cdFx0XHRcdGhlaWdodDogdGhpcy5pbWFnZXNbc291cmNlXS5oZWlnaHQsXHJcblx0XHRcdFx0ZGVwdGg6IDFcclxuXHRcdFx0fSxcclxuXHRcdFx0ZGF0YToge1xyXG5cdFx0XHRcdHNvdXJjZTogdGhpcy5pbWFnZXNbc291cmNlXVxyXG5cdFx0XHR9LFxyXG5cdFx0XHRmb3JtYXQ6IFwicmdiYTh1bm9ybVwiLFxyXG5cdFx0XHR1c2FnZTogR1BVVGV4dHVyZVVzYWdlLlRFWFRVUkVfQklORElORyB8IEdQVVRleHR1cmVVc2FnZS5DT1BZX0RTVCB8IEdQVVRleHR1cmVVc2FnZS5SRU5ERVJfQVRUQUNITUVOVFxyXG5cdFx0fSk7XHJcblx0fVxyXG5cdHByaXZhdGUgYXN5bmMgbG9hZEltYWdlcygpIHtcclxuXHRcdGNvbnN0IGltYWdlczogQXJyYXk8SW1hZ2VCaXRtYXA+ID0gW107XHJcblx0XHRsZXQgbG9hZEV4dGVybmFsSW1hZ2VzOiBQcm9taXNlPGFueT4gPSBQcm9taXNlLnJlc29sdmUoKTtcclxuXHRcdGlmICh0aGlzLmpzb24uaW1hZ2VzKSB7XHJcblx0XHRcdGxvYWRFeHRlcm5hbEltYWdlcyA9IFByb21pc2UuYWxsKFxyXG5cdFx0XHRcdHRoaXMuanNvbi5pbWFnZXMubWFwKGFzeW5jIChpbWFnZTogYW55LCBpbmRleDogbnVtYmVyKSA9PiB7XHJcblx0XHRcdFx0XHRpZiAoaW1hZ2UudXJpKSB7XHJcblx0XHRcdFx0XHRcdGNvbnN0IGltYWdlVXJsID0gaW1hZ2UudXJpLnNsaWNlKDAsIDUpID09PSBcImRhdGE6XCIgPyBpbWFnZS51cmkgOiBgJHt0aGlzLnJvb3RVcmx9LyR7aW1hZ2UudXJpfWA7XHJcblx0XHRcdFx0XHRcdGltYWdlc1tpbmRleF0gPSBhd2FpdCBmZXRjaChpbWFnZVVybClcclxuXHRcdFx0XHRcdFx0XHQudGhlbigocmVzcG9uc2UpID0+IHJlc3BvbnNlLmJsb2IoKSlcclxuXHRcdFx0XHRcdFx0XHQudGhlbigoYmxvYikgPT5cclxuXHRcdFx0XHRcdFx0XHRcdGNyZWF0ZUltYWdlQml0bWFwKGJsb2IsIHtcclxuXHRcdFx0XHRcdFx0XHRcdFx0Y29sb3JTcGFjZUNvbnZlcnNpb246IFwibm9uZVwiXHJcblx0XHRcdFx0XHRcdFx0XHR9KVxyXG5cdFx0XHRcdFx0XHRcdCk7XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0fSlcclxuXHRcdFx0KTtcclxuXHRcdH1cclxuXHRcdGxldCBsb2FkSW50ZXJuYWxJbWFnZXM6IFByb21pc2U8YW55PiA9IFByb21pc2UucmVzb2x2ZSgpO1xyXG5cdFx0aWYgKHRoaXMuanNvbi5pbWFnZXMpIHtcclxuXHRcdFx0bG9hZEludGVybmFsSW1hZ2VzID0gUHJvbWlzZS5hbGwoXHJcblx0XHRcdFx0dGhpcy5qc29uLmltYWdlcy5tYXAoYXN5bmMgKGltYWdlOiBhbnksIGluZGV4OiBudW1iZXIpID0+IHtcclxuXHRcdFx0XHRcdGlmIChpbWFnZS5idWZmZXJWaWV3ICE9PSB1bmRlZmluZWQpIHtcclxuXHRcdFx0XHRcdFx0Y29uc3QgeyBidWZmZXIsIGJ5dGVPZmZzZXQsIGJ5dGVMZW5ndGggfSA9IHRoaXMuanNvbi5idWZmZXJWaWV3c1tpbWFnZS5idWZmZXJWaWV3XTtcclxuXHRcdFx0XHRcdFx0Y29uc3QgYXJyYXkgPSBuZXcgVWludDhBcnJheShcclxuXHRcdFx0XHRcdFx0XHR0aGlzLmJ1ZmZlcnNbYnVmZmVyXSxcclxuXHRcdFx0XHRcdFx0XHRidWZmZXIgPT09IDAgPyBieXRlT2Zmc2V0ICsgdGhpcy5nbGJPZmZzZXQgOiBieXRlT2Zmc2V0LFxyXG5cdFx0XHRcdFx0XHRcdGJ5dGVMZW5ndGhcclxuXHRcdFx0XHRcdFx0KTtcclxuXHRcdFx0XHRcdFx0bGV0IHR5cGU7XHJcblx0XHRcdFx0XHRcdGlmIChpbWFnZS5taW1lVHlwZSkge1xyXG5cdFx0XHRcdFx0XHRcdHR5cGUgPSBpbWFnZS5taW1lVHlwZTtcclxuXHRcdFx0XHRcdFx0fSBlbHNlIHtcclxuXHRcdFx0XHRcdFx0XHR0eXBlID0gYXJyYXlbMF0gPT09IDB4ZmYgPyBcImltYWdlL2pwZWdcIiA6IFwiaW1hZ2UvcG5nXCI7XHJcblx0XHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdFx0Y29uc3QgYmxvYiA9IG5ldyBCbG9iKFthcnJheV0sIHsgdHlwZSB9KTtcclxuXHRcdFx0XHRcdFx0aW1hZ2VzW2luZGV4XSA9IGF3YWl0IGNyZWF0ZUltYWdlQml0bWFwKGJsb2IsIHtcclxuXHRcdFx0XHRcdFx0XHRjb2xvclNwYWNlQ29udmVyc2lvbjogXCJub25lXCJcclxuXHRcdFx0XHRcdFx0fSk7XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0fSlcclxuXHRcdFx0KTtcclxuXHRcdH1cclxuXHJcblx0XHRhd2FpdCBQcm9taXNlLmFsbChbbG9hZEV4dGVybmFsSW1hZ2VzLCBsb2FkSW50ZXJuYWxJbWFnZXNdKTtcclxuXHRcdHJldHVybiBpbWFnZXM7XHJcblx0fVxyXG5cdHByaXZhdGUgYXN5bmMgbG9hZEJ1ZmZlcygpIHtcclxuXHRcdGNvbnN0IGJ1ZmZlcnM6IEFycmF5PEFycmF5QnVmZmVyPiA9IFtdO1xyXG5cdFx0YXdhaXQgUHJvbWlzZS5hbGwoXHJcblx0XHRcdHRoaXMuanNvbi5idWZmZXJzLm1hcCgoYnVmZmVyOiBhbnksIGluZGV4OiBudW1iZXIpID0+IHtcclxuXHRcdFx0XHRpZiAoIWJ1ZmZlci51cmkpIHtcclxuXHRcdFx0XHRcdGlmIChpbmRleCAhPT0gMCkge1xyXG5cdFx0XHRcdFx0XHR0aHJvdyBuZXcgRXJyb3IoXCJidWZmZXIgdXJpIHVuZGVmaW5lZFwiKTtcclxuXHRcdFx0XHRcdH1cclxuXHRcdFx0XHRcdGJ1ZmZlcnNbaW5kZXhdID0gdGhpcy5nbGJCaW4hO1xyXG5cdFx0XHRcdFx0cmV0dXJuIFByb21pc2UucmVzb2x2ZSgpO1xyXG5cdFx0XHRcdH1cclxuXHRcdFx0XHRjb25zdCBidWZmZXJVcmwgPSBidWZmZXIudXJpLnNsaWNlKDAsIDUpID09PSBcImRhdGE6XCIgPyBidWZmZXIudXJpIDogYCR7dGhpcy5yb290VXJsfS8ke2J1ZmZlci51cml9YDtcclxuXHRcdFx0XHRyZXR1cm4gZmV0Y2goYnVmZmVyVXJsKVxyXG5cdFx0XHRcdFx0LnRoZW4oKHJlc3BvbnNlKSA9PiByZXNwb25zZS5hcnJheUJ1ZmZlcigpKVxyXG5cdFx0XHRcdFx0LnRoZW4oKGFycmF5QnVmZmVyOiBBcnJheUJ1ZmZlcikgPT4ge1xyXG5cdFx0XHRcdFx0XHRidWZmZXJzW2luZGV4XSA9IGFycmF5QnVmZmVyO1xyXG5cdFx0XHRcdFx0fSk7XHJcblx0XHRcdH0pXHJcblx0XHQpO1xyXG5cdFx0cmV0dXJuIGJ1ZmZlcnM7XHJcblx0fVxyXG5cdHByaXZhdGUgcGFyc2VOb2RlcygpIHtcclxuXHRcdHRoaXMubm9kZXMgPSB0aGlzPy5qc29uPy5ub2Rlcz8ubWFwKChnbHRmTm9kZSkgPT4ge1xyXG5cdFx0XHRjb25zdCBub2RlID0gbmV3IE5vZGUoKTtcclxuXHRcdFx0dGhpcy5wYXJzZU5vZGVUUlMobm9kZSwgZ2x0Zk5vZGUpO1xyXG5cdFx0XHRpZiAoZ2x0Zk5vZGUubmFtZSkgbm9kZS5uYW1lID0gZ2x0Zk5vZGUubmFtZTtcclxuXHRcdFx0aWYgKGdsdGZOb2RlLm1lc2ggIT0gdW5kZWZpbmVkKSB7XHJcblx0XHRcdFx0bGV0IGdsdGZTa2luID0gdW5kZWZpbmVkLFxyXG5cdFx0XHRcdFx0aXNTa2luTWVzaCA9IGZhbHNlO1xyXG5cdFx0XHRcdGlmIChnbHRmTm9kZS5za2luICE9IHVuZGVmaW5lZCkge1xyXG5cdFx0XHRcdFx0Z2x0ZlNraW4gPSB0aGlzLmpzb24uc2tpbnNbZ2x0Zk5vZGUuc2tpbl07XHJcblx0XHRcdFx0XHRpc1NraW5NZXNoID0gdHJ1ZTtcclxuXHRcdFx0XHR9XHJcblx0XHRcdFx0dGhpcy5tZXNoZXNbZ2x0Zk5vZGUubWVzaF0ucHJpbWl0aXZlcy5mb3JFYWNoKChwcmltaXRpdmU6IE1lc2gsIGluZGV4OiBudW1iZXIsIHNvdXJjZTogQXJyYXk8TWVzaD4pID0+IHtcclxuXHRcdFx0XHRcdGNvbnN0IHRlbXBQcmltaXRpdmUgPVxyXG5cdFx0XHRcdFx0XHRpc1NraW5NZXNoICYmIHByaW1pdGl2ZS50eXBlID09IFJlbmRlck9iamVjdFR5cGUuTWVzaFxyXG5cdFx0XHRcdFx0XHRcdD8gbmV3IFNLaW5NZXNoKHByaW1pdGl2ZS5nZW9tZXRyeSwgcHJpbWl0aXZlLm1hdGVyaWFsKVxyXG5cdFx0XHRcdFx0XHRcdDogcHJpbWl0aXZlO1xyXG5cdFx0XHRcdFx0aWYgKGlzU2tpbk1lc2ggJiYgcHJpbWl0aXZlLnR5cGUgPT0gUmVuZGVyT2JqZWN0VHlwZS5NZXNoKSB7XHJcblx0XHRcdFx0XHRcdHNvdXJjZVtpbmRleF0gPSB0ZW1wUHJpbWl0aXZlO1xyXG5cdFx0XHRcdFx0XHR0ZW1wUHJpbWl0aXZlLnNldFNraW5EYXRhKHtcclxuXHRcdFx0XHRcdFx0XHRpbnZlcnNlQmluZE1hdHJpY2VzOiB0aGlzLmdldEFjY2Vzc29yKGdsdGZTa2luLmludmVyc2VCaW5kTWF0cmljZXMpLmdldE1hdDRBcnJheSgpLFxyXG5cdFx0XHRcdFx0XHRcdGpvaW50czogZ2x0ZlNraW4uam9pbnRzXHJcblx0XHRcdFx0XHRcdFx0Ly8gbmFtZTogZ2x0ZlNraW4ubmFtZSxcclxuXHRcdFx0XHRcdFx0XHQvLyBza2VsZXRvbjogZ2x0ZlNraW4uc2tlbGV0b25cclxuXHRcdFx0XHRcdFx0fSk7XHJcblx0XHRcdFx0XHR9XHJcblx0XHRcdFx0XHRub2RlLmFkZCh0ZW1wUHJpbWl0aXZlKTtcclxuXHRcdFx0XHR9KTtcclxuXHRcdFx0fVxyXG5cdFx0XHRyZXR1cm4gbm9kZTtcclxuXHRcdH0pO1xyXG5cdH1cclxuXHRwcml2YXRlIHBhcnNlTm9kZVRSUyhub2RlOiBOb2RlLCBnbHRmTm9kZTogR0xURk5vZGVQYXJtcyk6IE5vZGUge1xyXG5cdFx0bGV0IHsgbWF0cml4LCByb3RhdGlvbiwgdHJhbnNsYXRpb24sIHNjYWxlIH0gPSBnbHRmTm9kZTtcclxuXHRcdGlmIChtYXRyaXgpIHtcclxuXHRcdFx0Y29uc3QgdGVtcE1hdHJpeDQgPSBuZXcgTWF0cml4NCgpLFxyXG5cdFx0XHRcdHRlbXBTY2FsZSA9IG5ldyBWZWN0b3IzKCksXHJcblx0XHRcdFx0dGVtcFRyYW5zbGF0aW9uID0gbmV3IFZlY3RvcjMoKSxcclxuXHRcdFx0XHR0ZW1wUm90YXRpb24gPSBuZXcgUXVhdGVybmlvbigpO1xyXG5cdFx0XHRNYXRyaXg0LmZyb21Db2x1bW5NYWpvckFycmF5KG1hdHJpeCwgdGVtcE1hdHJpeDQpO1xyXG5cdFx0XHRNYXRyaXg0LmdldFNjYWxlKHRlbXBNYXRyaXg0LCB0ZW1wU2NhbGUpO1xyXG5cdFx0XHRNYXRyaXg0LmdldFRyYW5zbGF0aW9uKHRlbXBNYXRyaXg0LCB0ZW1wVHJhbnNsYXRpb24pO1xyXG5cdFx0XHRNYXRyaXg0LmdldFJvdGF0aW9uKHRlbXBNYXRyaXg0LCB0ZW1wUm90YXRpb24pO1xyXG5cdFx0XHRyb3RhdGlvbiA9IHRlbXBSb3RhdGlvbi50b0FycmF5KCk7XHJcblx0XHRcdHRyYW5zbGF0aW9uID0gdGVtcFRyYW5zbGF0aW9uLnRvQXJyYXkoKTtcclxuXHRcdFx0c2NhbGUgPSB0ZW1wU2NhbGUudG9BcnJheSgpO1xyXG5cdFx0fVxyXG5cdFx0aWYgKHJvdGF0aW9uKSBub2RlLnF1YXRlcm5pb24uc2V0KHJvdGF0aW9uWzBdLCByb3RhdGlvblsxXSwgcm90YXRpb25bMl0sIHJvdGF0aW9uWzNdKTtcclxuXHRcdGlmICh0cmFuc2xhdGlvbikgbm9kZS5wb3NpdGlvbi5zZXQodHJhbnNsYXRpb25bMF0sIHRyYW5zbGF0aW9uWzFdLCB0cmFuc2xhdGlvblsyXSk7XHJcblx0XHRpZiAoc2NhbGUpIG5vZGUuc2NhbGUuc2V0KHNjYWxlWzBdLCBzY2FsZVsxXSwgc2NhbGVbMl0pO1xyXG5cdFx0cmV0dXJuIG5vZGU7XHJcblx0fVxyXG5cdHByaXZhdGUgbm9ybWFsaXplRGF0YSgpIHtcclxuXHRcdHRoaXM/Lm5vZGVzPy5tYXA/Ligobm9kZTogTm9kZSwgaW5kZXgpID0+IHtcclxuXHRcdFx0dGhpcy5qc29uPy5ub2Rlc1tpbmRleF0/LmNoaWxkcmVuPy5tYXAoKG5vZGVJZDogbnVtYmVyKSA9PiB7XHJcblx0XHRcdFx0Y29uc3QgY2hpbGROb2RlID0gdGhpcy5ub2Rlc1tub2RlSWRdO1xyXG5cdFx0XHRcdG5vZGUuYWRkKGNoaWxkTm9kZSk7XHJcblx0XHRcdH0pO1xyXG5cdFx0fSk7XHJcblx0XHR0aGlzLm1lc2hlcy5tYXAoKG1lc2gpID0+IHtcclxuXHRcdFx0bWVzaC5wcmltaXRpdmVzLm1hcCgocHJpbWl0aXZlKSA9PiB7XHJcblx0XHRcdFx0aWYgKHByaW1pdGl2ZS50eXBlID09IFJlbmRlck9iamVjdFR5cGUuU2tpbk1lc2gpXHJcblx0XHRcdFx0XHRwcmltaXRpdmUuam9pbnRzID0gcHJpbWl0aXZlLmpvaW50cy5tYXAoKGpvaW50KSA9PiB7XHJcblx0XHRcdFx0XHRcdHJldHVybiB0aGlzLm5vZGVzWzxudW1iZXI+am9pbnRdO1xyXG5cdFx0XHRcdFx0fSk7XHJcblx0XHRcdH0pO1xyXG5cdFx0fSk7XHJcblx0fVxyXG59XHJcbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBsb2FkR0xURih1cmw6IHN0cmluZykge1xyXG5cdGxldCBnbHRmO1xyXG5cdGNvbnN0IGV4dCA9IHVybC5zcGxpdChcIi5cIikucG9wKCk7XHJcblx0Y29uc3Qgcm9vdFVybCA9IHVybC5zdWJzdHJpbmcoMCwgdXJsLmxhc3RJbmRleE9mKFwiL1wiKSk7XHJcblx0aWYgKGV4dCA9PT0gXCJnbHRmXCIpIHtcclxuXHRcdGNvbnN0IGpzb24gPSBhd2FpdCBmZXRjaCh1cmwpLnRoZW4oKHJlc3BvbnNlKSA9PiByZXNwb25zZS5qc29uKCkpO1xyXG5cdFx0Z2x0ZiA9IG5ldyBHTFRGKGpzb24sIHJvb3RVcmwsIDApO1xyXG5cdH0gZWxzZSB7XHJcblx0XHRjb25zdCBnbGIgPSBhd2FpdCBmZXRjaCh1cmwpLnRoZW4oKHJlc3BvbnNlKSA9PiByZXNwb25zZS5hcnJheUJ1ZmZlcigpKTtcclxuXHRcdGNvbnN0IGpzb25MZW5ndGggPSBuZXcgVWludDMyQXJyYXkoZ2xiLCAxMiwgMSlbMF07XHJcblx0XHRjb25zdCBqc29uQ2h1bmsgPSBuZXcgVWludDhBcnJheShnbGIsIDIwLCBqc29uTGVuZ3RoKTtcclxuXHRcdGNvbnN0IGpzb24gPSBKU09OLnBhcnNlKG5ldyBUZXh0RGVjb2RlcihcInV0Zi04XCIpLmRlY29kZShqc29uQ2h1bmspKTtcclxuXHRcdGdsdGYgPSBuZXcgR0xURihqc29uLCByb290VXJsLCAyOCArIGpzb25MZW5ndGgsIGdsYik7XHJcblx0fVxyXG5cdGF3YWl0IGdsdGYucGFyc2VEYXRhKCk7XHJcblx0cmV0dXJuIGdsdGY7XHJcbn1cclxudHlwZSBHTFRGTm9kZVBhcm1zID0ge1xyXG5cdGNoaWxkcmVuPzogbnVtYmVyW107XHJcblx0bWF0cml4PzogbnVtYmVyW107XHJcblx0c2NhbGU/OiBudW1iZXJbXTtcclxuXHRyb3RhdGlvbj86IG51bWJlcltdO1xyXG5cdHRyYW5zbGF0aW9uPzogbnVtYmVyW107XHJcbn07XHJcbiIsImltcG9ydCBUZXh0dXJlIGZyb20gXCIuLi9yZW5kZXIvVGV4dHVyZVwiO1xyXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gbG9hZFBiclRleHR1cmUoYnJkZiwgZGlmZnVzZSwgc3BlY3VsYXIpIHtcclxuXHRpZiAoIWJyZGYpIHJldHVybjtcclxuXHRjb25zdCBicmRmVGV4dHVyZSA9IGF3YWl0IGxvYWRUZXh0dXJlKGJyZGYpO1xyXG5cdGNvbnN0IGRpZmZ1c2VUZXh0dXJlID0gYXdhaXQgbG9hZEN1YmVUZXh0dXJlKGRpZmZ1c2UpO1xyXG5cdGNvbnN0IHNwZWN1bGFyVGV4dHVyZSA9IGF3YWl0IGxvYWRDdWJlVGV4dHVyZShzcGVjdWxhcik7XHJcblx0cmV0dXJuIHtcclxuXHRcdGJyZGZUZXh0dXJlLFxyXG5cdFx0ZGlmZnVzZVRleHR1cmUsXHJcblx0XHRzcGVjdWxhclRleHR1cmVcclxuXHR9O1xyXG59XHJcbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBsb2FkQ3ViZVRleHR1cmUodXJscykge1xyXG5cdGNvbnN0IHByb21pc2VzID0gdXJscy5tYXAoKHNyYykgPT4ge1xyXG5cdFx0Y29uc3QgaW1nID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudChcImltZ1wiKTtcclxuXHRcdGltZy5zcmMgPSBzcmM7XHJcblx0XHRyZXR1cm4gaW1nLmRlY29kZSgpLnRoZW4oKCkgPT4gY3JlYXRlSW1hZ2VCaXRtYXAoaW1nKSk7XHJcblx0fSk7XHJcblx0Y29uc3QgaW1hZ2VzID0gYXdhaXQgUHJvbWlzZS5hbGwocHJvbWlzZXMpO1xyXG5cdGF3YWl0IFByb21pc2UuYWxsKGltYWdlcyk7XHJcblx0Y29uc3QgZGF0YSA9IGltYWdlcy5tYXAoKGltYWdlLCBpKSA9PiB7XHJcblx0XHRyZXR1cm4ge1xyXG5cdFx0XHRzb3VyY2U6IGltYWdlLFxyXG5cdFx0XHR3aWR0aDogaW1hZ2Uud2lkdGgsXHJcblx0XHRcdGhlaWdodDogaW1hZ2UuaGVpZ2h0LFxyXG5cdFx0XHRkZXB0aDogMSxcclxuXHRcdFx0eDogMCxcclxuXHRcdFx0eTogMCxcclxuXHRcdFx0ejogaVxyXG5cdFx0fTtcclxuXHR9KTtcclxuXHRyZXR1cm4gbmV3IFRleHR1cmUoe1xyXG5cdFx0c2l6ZToge1xyXG5cdFx0XHR3aWR0aDogaW1hZ2VzWzBdLndpZHRoLFxyXG5cdFx0XHRoZWlnaHQ6IGltYWdlc1swXS5oZWlnaHQsXHJcblx0XHRcdGRlcHRoOiA2XHJcblx0XHR9LFxyXG5cdFx0Zm9ybWF0OiBcInJnYmE4dW5vcm1cIixcclxuXHRcdHVzYWdlOiBHUFVUZXh0dXJlVXNhZ2UuVEVYVFVSRV9CSU5ESU5HIHwgR1BVVGV4dHVyZVVzYWdlLkNPUFlfRFNUIHwgR1BVVGV4dHVyZVVzYWdlLlJFTkRFUl9BVFRBQ0hNRU5ULFxyXG5cdFx0ZGF0YSxcclxuXHRcdHZpZXdGb3JtYXRzOiBcImN1YmVcIixcclxuXHRcdG1pcExldmVsQ291bnQ6IDYsXHJcblx0XHRuZWVkTWlwTWFwOiB0cnVlXHJcblx0fSk7XHJcbn1cclxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIGxvYWRUZXh0dXJlKHVybCkge1xyXG5cdGNvbnN0IGltZyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJpbWdcIik7XHJcblx0aW1nLnNyYyA9IHVybDtcclxuXHRhd2FpdCBpbWcuZGVjb2RlKCk7XHJcblx0Y29uc3QgaW1hZ2VCaXRtYXAgPSBhd2FpdCBjcmVhdGVJbWFnZUJpdG1hcChpbWcpO1xyXG5cdGNvbnN0IGJhc2VUZXh0dXJlID0gbmV3IFRleHR1cmUoe1xyXG5cdFx0c2l6ZTogeyB3aWR0aDogaW1hZ2VCaXRtYXAud2lkdGgsIGhlaWdodDogaW1hZ2VCaXRtYXAuaGVpZ2h0LCBkZXB0aDogMSB9LFxyXG5cdFx0ZGF0YToge1xyXG5cdFx0XHRzb3VyY2U6IGltYWdlQml0bWFwXHJcblx0XHR9LFxyXG5cdFx0Zm9ybWF0OiBcInJnYmE4dW5vcm1cIlxyXG5cdH0pO1xyXG5cdHJldHVybiBiYXNlVGV4dHVyZTtcclxufVxyXG4iLCJpbXBvcnQgR01hdGggZnJvbSBcIi4vTWF0aC5qc1wiO1xuaW1wb3J0IFZlY3RvcjMgZnJvbSBcIi4vVmVjdG9yMy5qc1wiO1xuLy8gZnJvbSB0aHJlZS5qc1xuY2xhc3MgU3BoZXJpY2FsIHtcblx0cmFkaXVzOiBudW1iZXI7XG5cdHBoaTogbnVtYmVyO1xuXHR0aGV0YTogbnVtYmVyO1xuXG5cdGNvbnN0cnVjdG9yKHJhZGl1cyA9IDEsIHBoaSA9IDAsIHRoZXRhID0gMCkge1xuXHRcdHRoaXMucmFkaXVzID0gcmFkaXVzO1xuXHRcdHRoaXMucGhpID0gcGhpOyAvLyBwb2xhciBhbmdsZVxuXHRcdHRoaXMudGhldGEgPSB0aGV0YTsgLy8gYXppbXV0aGFsIGFuZ2xlXG5cblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXHRzZXQocmFkaXVzOiBudW1iZXIsIHBoaTogbnVtYmVyLCB0aGV0YTogbnVtYmVyKTogU3BoZXJpY2FsIHtcblx0XHR0aGlzLnJhZGl1cyA9IHJhZGl1cztcblx0XHR0aGlzLnBoaSA9IHBoaTtcblx0XHR0aGlzLnRoZXRhID0gdGhldGE7XG5cblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXHRjb3B5KG90aGVyOiBTcGhlcmljYWwpOiBTcGhlcmljYWwge1xuXHRcdHRoaXMucmFkaXVzID0gb3RoZXIucmFkaXVzO1xuXHRcdHRoaXMucGhpID0gb3RoZXIucGhpO1xuXHRcdHRoaXMudGhldGEgPSBvdGhlci50aGV0YTtcblxuXHRcdHJldHVybiB0aGlzO1xuXHR9XG5cdC8vIHJlc3RyaWN0IHBoaSB0byBiZSBiZXR3ZWVuIEVQUyBhbmQgUEktRVBTXG5cdG1ha2VTYWZlKCk6IFNwaGVyaWNhbCB7XG5cdFx0Y29uc3QgRVBTID0gMC4wMDAwMDE7XG5cdFx0dGhpcy5waGkgPSBNYXRoLm1heChFUFMsIE1hdGgubWluKE1hdGguUEkgLSBFUFMsIHRoaXMucGhpKSk7XG5cblx0XHRyZXR1cm4gdGhpcztcblx0fVxuXG5cdHNldEZyb21WZWN0b3IzKHY6IFZlY3RvcjMpOiBTcGhlcmljYWwge1xuXHRcdHJldHVybiB0aGlzLnNldEZyb21DYXJ0ZXNpYW5Db29yZHModi54LCB2LnksIHYueik7XG5cdH1cblx0c2V0RnJvbUNhcnRlc2lhbkNvb3Jkcyh4OiBudW1iZXIsIHk6IG51bWJlciwgejogbnVtYmVyKTogU3BoZXJpY2FsIHtcblx0XHR0aGlzLnJhZGl1cyA9IE1hdGguc3FydCh4ICogeCArIHkgKiB5ICsgeiAqIHopO1xuXG5cdFx0aWYgKHRoaXMucmFkaXVzID09PSAwKSB7XG5cdFx0XHR0aGlzLnRoZXRhID0gMDtcblx0XHRcdHRoaXMucGhpID0gMDtcblx0XHR9IGVsc2Uge1xuXHRcdFx0dGhpcy50aGV0YSA9IE1hdGguYXRhbjIoeCwgeik7XG5cdFx0XHR0aGlzLnBoaSA9IE1hdGguYWNvcyhHTWF0aC5jbGFtcCh5IC8gdGhpcy5yYWRpdXMsIC0xLCAxKSk7XG5cdFx0fVxuXG5cdFx0cmV0dXJuIHRoaXM7XG5cdH1cblxuXHRjbG9uZSgpOiBTcGhlcmljYWwge1xuXHRcdHJldHVybiBuZXcgU3BoZXJpY2FsKHRoaXMucmFkaXVzLCB0aGlzLnBoaSwgdGhpcy50aGV0YSk7XG5cdH1cbn1cblxuZXhwb3J0IHsgU3BoZXJpY2FsIH07XG4iLCJpbXBvcnQgeyBFdmVudERpc3BhdGNoZXIgfSBmcm9tIFwiLi4vY29yZS9FdmVudERpc3BhdGNoZXJcIjtcclxuaW1wb3J0IHsgUXVhdGVybmlvbiB9IGZyb20gXCIuLi9tYXRoL1F1YXRlcm5pb25cIjtcclxuaW1wb3J0IHsgU3BoZXJpY2FsIH0gZnJvbSBcIi4uL21hdGgvU3BoZXJpY2FsXCI7XHJcbmltcG9ydCBWZWN0b3IyIGZyb20gXCIuLi9tYXRoL1ZlY3RvcjJcIjtcclxuaW1wb3J0IFZlY3RvcjMgZnJvbSBcIi4uL21hdGgvVmVjdG9yM1wiO1xyXG4vL2Zyb20gdGhyZWUuanNcclxuXHJcbmNvbnN0IF9jaGFuZ2VFdmVudCA9IHsgdHlwZTogXCJjaGFuZ2VcIiB9O1xyXG5jb25zdCBfc3RhcnRFdmVudCA9IHsgdHlwZTogXCJzdGFydFwiIH07XHJcbmNvbnN0IF9lbmRFdmVudCA9IHsgdHlwZTogXCJlbmRcIiB9O1xyXG5cclxuZXhwb3J0IGRlZmF1bHQgY2xhc3MgT3JiaXRDb250cm9sIGV4dGVuZHMgRXZlbnREaXNwYXRjaGVyIHtcclxuICBkb21FbGVtZW50OiBhbnk7XHJcbiAgb2JqZWN0OiBhbnk7XHJcbiAgZW5hYmxlZDogYm9vbGVhbjtcclxuICB0YXJnZXQ6IGFueTtcclxuICBtaW5EaXN0YW5jZTogbnVtYmVyO1xyXG4gIG1heERpc3RhbmNlOiBudW1iZXI7XHJcbiAgbWluWm9vbTogbnVtYmVyO1xyXG4gIG1heFpvb206IG51bWJlcjtcclxuICBtaW5Qb2xhckFuZ2xlOiBudW1iZXI7XHJcbiAgbWF4UG9sYXJBbmdsZTogbnVtYmVyO1xyXG4gIG1pbkF6aW11dGhBbmdsZTogbnVtYmVyO1xyXG4gIG1heEF6aW11dGhBbmdsZTogbnVtYmVyO1xyXG4gIGVuYWJsZURhbXBpbmc6IGJvb2xlYW47XHJcbiAgZGFtcGluZ0ZhY3RvcjogbnVtYmVyO1xyXG4gIGVuYWJsZVpvb206IGJvb2xlYW47XHJcbiAgem9vbVNwZWVkOiBudW1iZXI7XHJcbiAgZW5hYmxlUm90YXRlOiBib29sZWFuO1xyXG4gIHJvdGF0ZVNwZWVkOiBudW1iZXI7XHJcbiAgZW5hYmxlUGFuOiBib29sZWFuO1xyXG4gIHBhblNwZWVkOiBudW1iZXI7XHJcbiAgc2NyZWVuU3BhY2VQYW5uaW5nOiBib29sZWFuO1xyXG4gIGtleVBhblNwZWVkOiBudW1iZXI7XHJcbiAgYXV0b1JvdGF0ZTogYm9vbGVhbjtcclxuICBhdXRvUm90YXRlU3BlZWQ6IG51bWJlcjtcclxuICBrZXlzOiB7IExFRlQ6IHN0cmluZzsgVVA6IHN0cmluZzsgUklHSFQ6IHN0cmluZzsgQk9UVE9NOiBzdHJpbmcgfTtcclxuICBtb3VzZUJ1dHRvbnM6IHsgTEVGVDogYW55OyBNSURETEU6IGFueTsgUklHSFQ6IGFueSB9O1xyXG4gIHRvdWNoZXM6IHsgT05FOiBhbnk7IFRXTzogYW55IH07XHJcbiAgdGFyZ2V0MDogYW55O1xyXG4gIHBvc2l0aW9uMDogYW55O1xyXG4gIHpvb20wOiBhbnk7XHJcbiAgcHJpdmF0ZSBfZG9tRWxlbWVudEtleUV2ZW50czogYW55O1xyXG4gIHNwaGVyaWNhbDogYW55O1xyXG4gIG9uUG9pbnRlck1vdmU6IChldmVudDogYW55KSA9PiB2b2lkO1xyXG4gIG9uUG9pbnRlclVwOiAoZXZlbnQ6IGFueSkgPT4gdm9pZDtcclxuICBvbkNvbnRleHRNZW51OiAoZXZlbnQ6IGFueSkgPT4gdm9pZDtcclxuICBvblBvaW50ZXJEb3duOiAoZXZlbnQ6IGFueSkgPT4gdm9pZDtcclxuICBvbk1vdXNlV2hlZWw6IChldmVudDogYW55KSA9PiB2b2lkO1xyXG4gIG9uS2V5RG93bjogKGV2ZW50OiBhbnkpID0+IHZvaWQ7XHJcbiAgZ2V0QXV0b1JvdGF0aW9uQW5nbGU6ICgpID0+IG51bWJlcjtcclxuICB1cGRhdGU6ICgpID0+IGJvb2xlYW47XHJcbiAgY29uc3RydWN0b3Iob2JqZWN0LCBkb21FbGVtZW50KSB7XHJcbiAgICBzdXBlcigpO1xyXG5cclxuICAgIGlmIChkb21FbGVtZW50ID09PSB1bmRlZmluZWQpXHJcbiAgICAgIGNvbnNvbGUud2FybihcclxuICAgICAgICAnT3JiaXRDb250cm9sczogVGhlIHNlY29uZCBwYXJhbWV0ZXIgXCJkb21FbGVtZW50XCIgaXMgbm93IG1hbmRhdG9yeS4nXHJcbiAgICAgICk7XHJcbiAgICBpZiAoZG9tRWxlbWVudCA9PT0gZG9jdW1lbnQpXHJcbiAgICAgIGNvbnNvbGUuZXJyb3IoXHJcbiAgICAgICAgJ09yYml0Q29udHJvbHM6IFwiZG9jdW1lbnRcIiBzaG91bGQgbm90IGJlIHVzZWQgYXMgdGhlIHRhcmdldCBcImRvbUVsZW1lbnRcIi4gUGxlYXNlIHVzZSBcInJlbmRlcmVyLmRvbUVsZW1lbnRcIiBpbnN0ZWFkLidcclxuICAgICAgKTtcclxuXHJcbiAgICB0aGlzLm9iamVjdCA9IG9iamVjdDtcclxuICAgIHRoaXMuZG9tRWxlbWVudCA9IGRvbUVsZW1lbnQ7XHJcbiAgICB0aGlzLmRvbUVsZW1lbnQuc3R5bGUudG91Y2hBY3Rpb24gPSBcIm5vbmVcIjsgLy8gZGlzYWJsZSB0b3VjaCBzY3JvbGxcclxuXHJcbiAgICAvLyBTZXQgdG8gZmFsc2UgdG8gZGlzYWJsZSB0aGlzIGNvbnRyb2xcclxuICAgIHRoaXMuZW5hYmxlZCA9IHRydWU7XHJcblxyXG4gICAgLy8gXCJ0YXJnZXRcIiBzZXRzIHRoZSBsb2NhdGlvbiBvZiBmb2N1cywgd2hlcmUgdGhlIG9iamVjdCBvcmJpdHMgYXJvdW5kXHJcbiAgICB0aGlzLnRhcmdldCA9IG5ldyBWZWN0b3IzKCk7XHJcblxyXG4gICAgLy8gSG93IGZhciB5b3UgY2FuIGRvbGx5IGluIGFuZCBvdXQgKCBQZXJzcGVjdGl2ZUNhbWVyYSBvbmx5IClcclxuICAgIHRoaXMubWluRGlzdGFuY2UgPSAwO1xyXG4gICAgdGhpcy5tYXhEaXN0YW5jZSA9IEluZmluaXR5O1xyXG5cclxuICAgIC8vIEhvdyBmYXIgeW91IGNhbiB6b29tIGluIGFuZCBvdXQgKCBPcnRob2dyYXBoaWNDYW1lcmEgb25seSApXHJcbiAgICB0aGlzLm1pblpvb20gPSAwO1xyXG4gICAgdGhpcy5tYXhab29tID0gSW5maW5pdHk7XHJcblxyXG4gICAgLy8gSG93IGZhciB5b3UgY2FuIG9yYml0IHZlcnRpY2FsbHksIHVwcGVyIGFuZCBsb3dlciBsaW1pdHMuXHJcbiAgICAvLyBSYW5nZSBpcyAwIHRvIE1hdGguUEkgcmFkaWFucy5cclxuICAgIHRoaXMubWluUG9sYXJBbmdsZSA9IDA7IC8vIHJhZGlhbnNcclxuICAgIHRoaXMubWF4UG9sYXJBbmdsZSA9IE1hdGguUEk7IC8vIHJhZGlhbnNcclxuXHJcbiAgICAvLyBIb3cgZmFyIHlvdSBjYW4gb3JiaXQgaG9yaXpvbnRhbGx5LCB1cHBlciBhbmQgbG93ZXIgbGltaXRzLlxyXG4gICAgLy8gSWYgc2V0LCB0aGUgaW50ZXJ2YWwgWyBtaW4sIG1heCBdIG11c3QgYmUgYSBzdWItaW50ZXJ2YWwgb2YgWyAtIDIgUEksIDIgUEkgXSwgd2l0aCAoIG1heCAtIG1pbiA8IDIgUEkgKVxyXG4gICAgdGhpcy5taW5BemltdXRoQW5nbGUgPSAtSW5maW5pdHk7IC8vIHJhZGlhbnNcclxuICAgIHRoaXMubWF4QXppbXV0aEFuZ2xlID0gSW5maW5pdHk7IC8vIHJhZGlhbnNcclxuXHJcbiAgICAvLyBTZXQgdG8gdHJ1ZSB0byBlbmFibGUgZGFtcGluZyAoaW5lcnRpYSlcclxuICAgIC8vIElmIGRhbXBpbmcgaXMgZW5hYmxlZCwgeW91IG11c3QgY2FsbCBjb250cm9scy51cGRhdGUoKSBpbiB5b3VyIGFuaW1hdGlvbiBsb29wXHJcbiAgICB0aGlzLmVuYWJsZURhbXBpbmcgPSBmYWxzZTtcclxuICAgIHRoaXMuZGFtcGluZ0ZhY3RvciA9IDAuMDU7XHJcblxyXG4gICAgLy8gVGhpcyBvcHRpb24gYWN0dWFsbHkgZW5hYmxlcyBkb2xseWluZyBpbiBhbmQgb3V0OyBsZWZ0IGFzIFwiem9vbVwiIGZvciBiYWNrd2FyZHMgY29tcGF0aWJpbGl0eS5cclxuICAgIC8vIFNldCB0byBmYWxzZSB0byBkaXNhYmxlIHpvb21pbmdcclxuICAgIHRoaXMuZW5hYmxlWm9vbSA9IHRydWU7XHJcbiAgICB0aGlzLnpvb21TcGVlZCA9IDEuMDtcclxuXHJcbiAgICAvLyBTZXQgdG8gZmFsc2UgdG8gZGlzYWJsZSByb3RhdGluZ1xyXG4gICAgdGhpcy5lbmFibGVSb3RhdGUgPSB0cnVlO1xyXG4gICAgdGhpcy5yb3RhdGVTcGVlZCA9IDEuMDtcclxuXHJcbiAgICAvLyBTZXQgdG8gZmFsc2UgdG8gZGlzYWJsZSBwYW5uaW5nXHJcbiAgICB0aGlzLmVuYWJsZVBhbiA9IHRydWU7XHJcbiAgICB0aGlzLnBhblNwZWVkID0gMS4wO1xyXG4gICAgdGhpcy5zY3JlZW5TcGFjZVBhbm5pbmcgPSBmYWxzZTsgLy8gaWYgZmFsc2UsIHBhbiBvcnRob2dvbmFsIHRvIHdvcmxkLXNwYWNlIGRpcmVjdGlvbiBjYW1lcmEudXBcclxuICAgIHRoaXMua2V5UGFuU3BlZWQgPSA3LjA7IC8vIHBpeGVscyBtb3ZlZCBwZXIgYXJyb3cga2V5IHB1c2hcclxuXHJcbiAgICAvLyBTZXQgdG8gdHJ1ZSB0byBhdXRvbWF0aWNhbGx5IHJvdGF0ZSBhcm91bmQgdGhlIHRhcmdldFxyXG4gICAgLy8gSWYgYXV0by1yb3RhdGUgaXMgZW5hYmxlZCwgeW91IG11c3QgY2FsbCBjb250cm9scy51cGRhdGUoKSBpbiB5b3VyIGFuaW1hdGlvbiBsb29wXHJcbiAgICB0aGlzLmF1dG9Sb3RhdGUgPSBmYWxzZTtcclxuICAgIHRoaXMuYXV0b1JvdGF0ZVNwZWVkID0gMi4wOyAvLyAzMCBzZWNvbmRzIHBlciBvcmJpdCB3aGVuIGZwcyBpcyA2MFxyXG5cclxuICAgIC8vIFRoZSBmb3VyIGFycm93IGtleXNcclxuICAgIHRoaXMua2V5cyA9IHtcclxuICAgICAgTEVGVDogXCJBcnJvd0xlZnRcIixcclxuICAgICAgVVA6IFwiQXJyb3dVcFwiLFxyXG4gICAgICBSSUdIVDogXCJBcnJvd1JpZ2h0XCIsXHJcbiAgICAgIEJPVFRPTTogXCJBcnJvd0Rvd25cIixcclxuICAgIH07XHJcblxyXG4gICAgLy8gTW91c2UgYnV0dG9uc1xyXG4gICAgdGhpcy5tb3VzZUJ1dHRvbnMgPSB7XHJcbiAgICAgIExFRlQ6IE1PVVNFLlJPVEFURSxcclxuICAgICAgTUlERExFOiBNT1VTRS5ET0xMWSxcclxuICAgICAgUklHSFQ6IE1PVVNFLlBBTixcclxuICAgIH07XHJcblxyXG4gICAgLy8gVG91Y2ggZmluZ2Vyc1xyXG4gICAgdGhpcy50b3VjaGVzID0geyBPTkU6IFRPVUNILlJPVEFURSwgVFdPOiBUT1VDSC5ET0xMWV9QQU4gfTtcclxuXHJcbiAgICAvLyBmb3IgcmVzZXRcclxuICAgIHRoaXMudGFyZ2V0MCA9IHRoaXMudGFyZ2V0LmNsb25lKCk7XHJcbiAgICB0aGlzLnBvc2l0aW9uMCA9IHRoaXMub2JqZWN0LnBvc2l0aW9uLmNsb25lKCk7XHJcbiAgICB0aGlzLnpvb20wID0gdGhpcy5vYmplY3Quem9vbTtcclxuXHJcbiAgICAvLyB0aGUgdGFyZ2V0IERPTSBlbGVtZW50IGZvciBrZXkgZXZlbnRzXHJcbiAgICB0aGlzLl9kb21FbGVtZW50S2V5RXZlbnRzID0gbnVsbDtcclxuXHJcbiAgICAvL1xyXG4gICAgLy8gcHVibGljIG1ldGhvZHNcclxuICAgIC8vXHJcbiAgICAvLyB0aGlzIG1ldGhvZCBpcyBleHBvc2VkLCBidXQgcGVyaGFwcyBpdCB3b3VsZCBiZSBiZXR0ZXIgaWYgd2UgY2FuIG1ha2UgaXQgcHJpdmF0ZS4uLlxyXG4gICAgY29uc3QgdGhhdCA9IHRoaXM7XHJcbiAgICB0aGlzLnVwZGF0ZSA9IChmdW5jdGlvbiAoKSB7XHJcbiAgICAgIGNvbnN0IG9mZnNldCA9IG5ldyBWZWN0b3IzKCk7XHJcbiAgICAgIC8vIHNvIGNhbWVyYS51cCBpcyB0aGUgb3JiaXQgYXhpc1xyXG4gICAgICBjb25zdCBxdWF0ID0gbmV3IFF1YXRlcm5pb24oKS5zZXRGcm9tVW5pdFZlY3RvcnMoXHJcbiAgICAgICAgdGhhdC5vYmplY3QudXAsXHJcbiAgICAgICAgbmV3IFZlY3RvcjMoMCwgMSwgMClcclxuICAgICAgKTtcclxuICAgICAgY29uc3QgcXVhdEludmVyc2UgPSBxdWF0LmNsb25lKCkuaW52ZXJ0KCk7XHJcblxyXG4gICAgICBjb25zdCBsYXN0UG9zaXRpb24gPSBuZXcgVmVjdG9yMygpO1xyXG4gICAgICBjb25zdCBsYXN0UXVhdGVybmlvbiA9IG5ldyBRdWF0ZXJuaW9uKCk7XHJcblxyXG4gICAgICBjb25zdCB0d29QSSA9IDIgKiBNYXRoLlBJO1xyXG4gICAgICByZXR1cm4gZnVuY3Rpb24gdXBkYXRlKCkge1xyXG4gICAgICAgIGNvbnN0IHBvc2l0aW9uID0gdGhhdC5vYmplY3QucG9zaXRpb247XHJcblxyXG4gICAgICAgIG9mZnNldC5jb3B5KHBvc2l0aW9uKS5zdWJ0cmFjdCh0aGF0LnRhcmdldCk7XHJcblxyXG4gICAgICAgIC8vIHJvdGF0ZSBvZmZzZXQgdG8gXCJ5LWF4aXMtaXMtdXBcIiBzcGFjZVxyXG4gICAgICAgIG9mZnNldC5hcHBseVF1YXRlcm5pb24ocXVhdCk7XHJcblxyXG4gICAgICAgIC8vIGFuZ2xlIGZyb20gei1heGlzIGFyb3VuZCB5LWF4aXNcclxuICAgICAgICBzcGhlcmljYWwuc2V0RnJvbVZlY3RvcjMob2Zmc2V0KTtcclxuXHJcbiAgICAgICAgaWYgKHRoYXQuYXV0b1JvdGF0ZSAmJiBzdGF0ZSA9PT0gU1RBVEUuTk9ORSkge1xyXG4gICAgICAgICAgcm90YXRlTGVmdCh0aGF0LmdldEF1dG9Sb3RhdGlvbkFuZ2xlKCkpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgaWYgKHRoYXQuZW5hYmxlRGFtcGluZykge1xyXG4gICAgICAgICAgc3BoZXJpY2FsLnRoZXRhICs9IHNwaGVyaWNhbERlbHRhLnRoZXRhICogdGhhdC5kYW1waW5nRmFjdG9yO1xyXG4gICAgICAgICAgc3BoZXJpY2FsLnBoaSArPSBzcGhlcmljYWxEZWx0YS5waGkgKiB0aGF0LmRhbXBpbmdGYWN0b3I7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHNwaGVyaWNhbC50aGV0YSArPSBzcGhlcmljYWxEZWx0YS50aGV0YTtcclxuICAgICAgICAgIHNwaGVyaWNhbC5waGkgKz0gc3BoZXJpY2FsRGVsdGEucGhpO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gcmVzdHJpY3QgdGhldGEgdG8gYmUgYmV0d2VlbiBkZXNpcmVkIGxpbWl0c1xyXG5cclxuICAgICAgICBsZXQgbWluID0gdGhhdC5taW5BemltdXRoQW5nbGU7XHJcbiAgICAgICAgbGV0IG1heCA9IHRoYXQubWF4QXppbXV0aEFuZ2xlO1xyXG5cclxuICAgICAgICBpZiAoaXNGaW5pdGUobWluKSAmJiBpc0Zpbml0ZShtYXgpKSB7XHJcbiAgICAgICAgICBpZiAobWluIDwgLU1hdGguUEkpIG1pbiArPSB0d29QSTtcclxuICAgICAgICAgIGVsc2UgaWYgKG1pbiA+IE1hdGguUEkpIG1pbiAtPSB0d29QSTtcclxuXHJcbiAgICAgICAgICBpZiAobWF4IDwgLU1hdGguUEkpIG1heCArPSB0d29QSTtcclxuICAgICAgICAgIGVsc2UgaWYgKG1heCA+IE1hdGguUEkpIG1heCAtPSB0d29QSTtcclxuXHJcbiAgICAgICAgICBpZiAobWluIDw9IG1heCkge1xyXG4gICAgICAgICAgICBzcGhlcmljYWwudGhldGEgPSBNYXRoLm1heChtaW4sIE1hdGgubWluKG1heCwgc3BoZXJpY2FsLnRoZXRhKSk7XHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBzcGhlcmljYWwudGhldGEgPVxyXG4gICAgICAgICAgICAgIHNwaGVyaWNhbC50aGV0YSA+IChtaW4gKyBtYXgpIC8gMlxyXG4gICAgICAgICAgICAgICAgPyBNYXRoLm1heChtaW4sIHNwaGVyaWNhbC50aGV0YSlcclxuICAgICAgICAgICAgICAgIDogTWF0aC5taW4obWF4LCBzcGhlcmljYWwudGhldGEpO1xyXG4gICAgICAgICAgfVxyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgLy8gcmVzdHJpY3QgcGhpIHRvIGJlIGJldHdlZW4gZGVzaXJlZCBsaW1pdHNcclxuICAgICAgICBzcGhlcmljYWwucGhpID0gTWF0aC5tYXgoXHJcbiAgICAgICAgICB0aGF0Lm1pblBvbGFyQW5nbGUsXHJcbiAgICAgICAgICBNYXRoLm1pbih0aGF0Lm1heFBvbGFyQW5nbGUsIHNwaGVyaWNhbC5waGkpXHJcbiAgICAgICAgKTtcclxuXHJcbiAgICAgICAgc3BoZXJpY2FsLm1ha2VTYWZlKCk7XHJcblxyXG4gICAgICAgIHNwaGVyaWNhbC5yYWRpdXMgKj0gc2NhbGU7XHJcblxyXG4gICAgICAgIC8vIHJlc3RyaWN0IHJhZGl1cyB0byBiZSBiZXR3ZWVuIGRlc2lyZWQgbGltaXRzXHJcbiAgICAgICAgc3BoZXJpY2FsLnJhZGl1cyA9IE1hdGgubWF4KFxyXG4gICAgICAgICAgdGhhdC5taW5EaXN0YW5jZSxcclxuICAgICAgICAgIE1hdGgubWluKHRoYXQubWF4RGlzdGFuY2UsIHNwaGVyaWNhbC5yYWRpdXMpXHJcbiAgICAgICAgKTtcclxuXHJcbiAgICAgICAgLy8gbW92ZSB0YXJnZXQgdG8gcGFubmVkIGxvY2F0aW9uXHJcblxyXG4gICAgICAgIGlmICh0aGF0LmVuYWJsZURhbXBpbmcgPT09IHRydWUpIHtcclxuICAgICAgICAgIHRoYXQudGFyZ2V0LmFkZFNjYWxlZFZlY3RvcihwYW5PZmZzZXQsIHRoYXQuZGFtcGluZ0ZhY3Rvcik7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHRoYXQudGFyZ2V0LmFkZChwYW5PZmZzZXQpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBWZWN0b3IzLmZyb21TcGhlcmljYWwoc3BoZXJpY2FsLCBvZmZzZXQpO1xyXG4gICAgICAgIC8vIHJvdGF0ZSBvZmZzZXQgYmFjayB0byBcImNhbWVyYS11cC12ZWN0b3ItaXMtdXBcIiBzcGFjZVxyXG4gICAgICAgIG9mZnNldC5hcHBseVF1YXRlcm5pb24ocXVhdEludmVyc2UpO1xyXG5cclxuICAgICAgICBwb3NpdGlvbi5jb3B5KHRoYXQudGFyZ2V0KS5hZGQob2Zmc2V0KTtcclxuXHJcbiAgICAgICAgdGhhdC5vYmplY3QubG9va0F0KHRoYXQudGFyZ2V0LngsIHRoYXQudGFyZ2V0LnksIHRoYXQudGFyZ2V0LnopO1xyXG5cclxuICAgICAgICBpZiAodGhhdC5lbmFibGVEYW1waW5nID09PSB0cnVlKSB7XHJcbiAgICAgICAgICBzcGhlcmljYWxEZWx0YS50aGV0YSAqPSAxIC0gdGhhdC5kYW1waW5nRmFjdG9yO1xyXG4gICAgICAgICAgc3BoZXJpY2FsRGVsdGEucGhpICo9IDEgLSB0aGF0LmRhbXBpbmdGYWN0b3I7XHJcblxyXG4gICAgICAgICAgVmVjdG9yMy5tdWx0aXBseUJ5U2NhbGFyKFxyXG4gICAgICAgICAgICBwYW5PZmZzZXQsXHJcbiAgICAgICAgICAgIDEgLSB0aGF0LmRhbXBpbmdGYWN0b3IsXHJcbiAgICAgICAgICAgIHBhbk9mZnNldFxyXG4gICAgICAgICAgKTtcclxuICAgICAgICAgIC8vIHBhbk9mZnNldC5tdWx0aXBseVNjYWxhciggMSAtIHRoaXMuZGFtcGluZ0ZhY3RvciApO1xyXG4gICAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgICBzcGhlcmljYWxEZWx0YS5zZXQoMCwgMCwgMCk7XHJcblxyXG4gICAgICAgICAgcGFuT2Zmc2V0LnNldCgwLCAwLCAwKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHNjYWxlID0gMTtcclxuXHJcbiAgICAgICAgLy8gdXBkYXRlIGNvbmRpdGlvbiBpczpcclxuICAgICAgICAvLyBtaW4oY2FtZXJhIGRpc3BsYWNlbWVudCwgY2FtZXJhIHJvdGF0aW9uIGluIHJhZGlhbnMpXjIgPiBFUFNcclxuICAgICAgICAvLyB1c2luZyBzbWFsbC1hbmdsZSBhcHByb3hpbWF0aW9uIGNvcyh4LzIpID0gMSAtIHheMiAvIDhcclxuXHJcbiAgICAgICAgaWYgKFxyXG4gICAgICAgICAgem9vbUNoYW5nZWQgfHxcclxuICAgICAgICAgIFZlY3RvcjMuZGlzdGFuY2VTcXVhcmVkKGxhc3RQb3NpdGlvbiwgdGhhdC5vYmplY3QucG9zaXRpb24pID4gRVBTIHx8XHJcbiAgICAgICAgICA4ICogKDEgLSBsYXN0UXVhdGVybmlvbi5kb3QodGhhdC5vYmplY3QucXVhdGVybmlvbikpID4gRVBTXHJcbiAgICAgICAgKSB7XHJcbiAgICAgICAgICB0aGF0LmRpc3BhdGNoRXZlbnQoX2NoYW5nZUV2ZW50KTtcclxuXHJcbiAgICAgICAgICAvL2xhc3RQb3NpdGlvbi5jb3B5KCB0aGlzLm9iamVjdC5wb3NpdGlvbiApO1xyXG4gICAgICAgICAgVmVjdG9yMy5jbG9uZSh0aGF0Lm9iamVjdC5wb3NpdGlvbiwgbGFzdFBvc2l0aW9uKTtcclxuICAgICAgICAgIFF1YXRlcm5pb24uY2xvbmUodGhhdC5vYmplY3QucXVhdGVybmlvbiwgbGFzdFF1YXRlcm5pb24pO1xyXG4gICAgICAgICAgLy9sYXN0UXVhdGVybmlvbi5jb3B5KCB0aGlzLm9iamVjdC5xdWF0ZXJuaW9uICk7XHJcbiAgICAgICAgICB6b29tQ2hhbmdlZCA9IGZhbHNlO1xyXG5cclxuICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICAgIH1cclxuXHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICB9O1xyXG4gICAgfSkoKTtcclxuICAgIHRoaXMuaW5pdCgpO1xyXG4gIH1cclxuICBnZXRQb2xhckFuZ2xlKCkge1xyXG4gICAgcmV0dXJuIHRoaXMuc3BoZXJpY2FsLnBoaTtcclxuICB9XHJcbiAgZ2V0QXppbXV0aGFsQW5nbGUoKSB7XHJcbiAgICByZXR1cm4gdGhpcy5zcGhlcmljYWwudGhldGE7XHJcbiAgfVxyXG5cclxuICBnZXREaXN0YW5jZSgpIHtcclxuICAgIHJldHVybiBWZWN0b3IzLmRpc3RhbmNlKHRoaXMub2JqZWN0LnBvc2l0aW9uLCB0aGlzLnRhcmdldCk7XHJcbiAgfVxyXG5cclxuICBsaXN0ZW5Ub0tleUV2ZW50cyhkb21FbGVtZW50KSB7XHJcbiAgICBkb21FbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoXCJrZXlkb3duXCIsIHRoaXMub25LZXlEb3duKTtcclxuICAgIHRoaXMuX2RvbUVsZW1lbnRLZXlFdmVudHMgPSBkb21FbGVtZW50O1xyXG4gIH1cclxuXHJcbiAgc2F2ZVN0YXRlKCkge1xyXG4gICAgVmVjdG9yMy5jbG9uZSh0aGlzLnRhcmdldCwgdGhpcy50YXJnZXQwKTtcclxuICAgIC8vdGhpcy50YXJnZXQwLmNvcHkoIHRoaXMudGFyZ2V0ICk7XHJcbiAgICBWZWN0b3IzLmNsb25lKHRoaXMub2JqZWN0LnBvc2l0aW9uLCB0aGlzLnBvc2l0aW9uMCk7XHJcbiAgICAvL3RoaXMucG9zaXRpb24wLmNvcHkoIHRoaXMub2JqZWN0LnBvc2l0aW9uICk7XHJcbiAgICB0aGlzLnpvb20wID0gdGhpcy5vYmplY3Quem9vbTtcclxuICB9XHJcblxyXG4gIHJlc2V0KCkge1xyXG4gICAgVmVjdG9yMy5jbG9uZSh0aGlzLnRhcmdldDAsIHRoaXMudGFyZ2V0KTtcclxuICAgIC8vdGhpcy50YXJnZXQuY29weSggdGhpcy50YXJnZXQwICk7XHJcbiAgICBWZWN0b3IzLmNsb25lKHRoaXMucG9zaXRpb24wLCB0aGlzLm9iamVjdC5wb3NpdGlvbik7XHJcbiAgICAvL3RoaXMub2JqZWN0LnBvc2l0aW9uLmNvcHkoIHRoaXMucG9zaXRpb24wICk7XHJcbiAgICB0aGlzLm9iamVjdC56b29tID0gdGhpcy56b29tMDtcclxuXHJcbiAgICB0aGlzLm9iamVjdC51cGRhdGVQcm9qZWN0aW9uTWF0cml4KCk7XHJcbiAgICB0aGlzLmRpc3BhdGNoRXZlbnQoX2NoYW5nZUV2ZW50KTtcclxuXHJcbiAgICB0aGlzLnVwZGF0ZSgpO1xyXG5cclxuICAgIHN0YXRlID0gU1RBVEUuTk9ORTtcclxuICB9XHJcblxyXG4gIHByaXZhdGUgaW5pdCgpIHtcclxuICAgIGNvbnN0IHRoYXQgPSB0aGlzO1xyXG4gICAgY29uc3QgcGFuTGVmdCA9IChmdW5jdGlvbiAoKSB7XHJcbiAgICAgIGNvbnN0IHYgPSBuZXcgVmVjdG9yMygpO1xyXG4gICAgICByZXR1cm4gZnVuY3Rpb24gcGFuTGVmdChkaXN0YW5jZSwgb2JqZWN0TWF0cml4KSB7XHJcbiAgICAgICAgdi5zZXRGcm9tTWF0cml4Q29sdW1uKG9iamVjdE1hdHJpeCwgMCk7IC8vIGdldCBYIGNvbHVtbiBvZiBvYmplY3RNYXRyaXhcclxuICAgICAgICB2Lm11bHRpcGx5QnlTY2FsYXIoLWRpc3RhbmNlKTtcclxuICAgICAgICBwYW5PZmZzZXQuYWRkKHYpO1xyXG4gICAgICB9O1xyXG4gICAgfSkoKTtcclxuICAgIGNvbnN0IHBhblVwID0gKGZ1bmN0aW9uICgpIHtcclxuICAgICAgY29uc3QgcGFuVXBWID0gbmV3IFZlY3RvcjMoKTtcclxuICAgICAgcmV0dXJuIGZ1bmN0aW9uIHBhblVwKGRpc3RhbmNlLCBvYmplY3RNYXRyaXgpIHtcclxuICAgICAgICBpZiAodGhhdC5zY3JlZW5TcGFjZVBhbm5pbmcgPT09IHRydWUpIHtcclxuICAgICAgICAgIHBhblVwVi5zZXRGcm9tTWF0cml4Q29sdW1uKG9iamVjdE1hdHJpeCwgMSk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHBhblVwVi5zZXRGcm9tTWF0cml4Q29sdW1uKG9iamVjdE1hdHJpeCwgMCk7XHJcbiAgICAgICAgICAvL3BhblVwVi5jcm9zc1ZlY3RvcnMoIHRoaXMub2JqZWN0LnVwLCBwYW5VcFYgKTtcclxuICAgICAgICAgIFZlY3RvcjMuY3Jvc3ModGhhdC5vYmplY3QudXAsIHBhblVwViwgcGFuVXBWKTtcclxuICAgICAgICB9XHJcblxyXG4gICAgICAgIHBhblVwVi5tdWx0aXBseUJ5U2NhbGFyKGRpc3RhbmNlKTtcclxuXHJcbiAgICAgICAgcGFuT2Zmc2V0LmFkZChwYW5VcFYpO1xyXG4gICAgICB9O1xyXG4gICAgfSkoKTtcclxuICAgIC8vIGRlbHRhWCBhbmQgZGVsdGFZIGFyZSBpbiBwaXhlbHM7IHJpZ2h0IGFuZCBkb3duIGFyZSBwb3NpdGl2ZVxyXG4gICAgY29uc3QgcGFuID0gKGZ1bmN0aW9uICgpIHtcclxuICAgICAgY29uc3Qgb2Zmc2V0ID0gbmV3IFZlY3RvcjMoKTtcclxuICAgICAgcmV0dXJuIGZ1bmN0aW9uIHBhbihkZWx0YVgsIGRlbHRhWSkge1xyXG4gICAgICAgIGNvbnN0IGVsZW1lbnQgPSB0aGF0LmRvbUVsZW1lbnQ7XHJcbiAgICAgICAgaWYgKHRoYXQub2JqZWN0LmlzUGVyc3BlY3RpdmVDYW1lcmEpIHtcclxuICAgICAgICAgIC8vIHBlcnNwZWN0aXZlXHJcbiAgICAgICAgICBjb25zdCBwb3NpdGlvbiA9IHRoYXQub2JqZWN0LnBvc2l0aW9uO1xyXG4gICAgICAgICAgb2Zmc2V0LmNvcHkocG9zaXRpb24pLnN1YnRyYWN0KHRoYXQudGFyZ2V0KTtcclxuICAgICAgICAgIGxldCB0YXJnZXREaXN0YW5jZSA9IG9mZnNldC5sZW5ndGgoKTtcclxuXHJcbiAgICAgICAgICAvLyBoYWxmIG9mIHRoZSBmb3YgaXMgY2VudGVyIHRvIHRvcCBvZiBzY3JlZW5cclxuICAgICAgICAgIHRhcmdldERpc3RhbmNlICo9IE1hdGgudGFuKCgodGhhdC5vYmplY3QuZm92IC8gMikgKiBNYXRoLlBJKSAvIDE4MC4wKTtcclxuXHJcbiAgICAgICAgICAvLyB3ZSB1c2Ugb25seSBjbGllbnRIZWlnaHQgaGVyZSBzbyBhc3BlY3QgcmF0aW8gZG9lcyBub3QgZGlzdG9ydCBzcGVlZFxyXG4gICAgICAgICAgcGFuTGVmdChcclxuICAgICAgICAgICAgKDIgKiBkZWx0YVggKiB0YXJnZXREaXN0YW5jZSkgLyBlbGVtZW50LmNsaWVudEhlaWdodCxcclxuICAgICAgICAgICAgdGhhdC5vYmplY3QubW9kZWxNYXRyaXhcclxuICAgICAgICAgICk7XHJcbiAgICAgICAgICBwYW5VcChcclxuICAgICAgICAgICAgKDIgKiBkZWx0YVkgKiB0YXJnZXREaXN0YW5jZSkgLyBlbGVtZW50LmNsaWVudEhlaWdodCxcclxuICAgICAgICAgICAgdGhhdC5vYmplY3QubW9kZWxNYXRyaXhcclxuICAgICAgICAgICk7XHJcbiAgICAgICAgfSBlbHNlIGlmICh0aGF0Lm9iamVjdC5pc09ydGhvZ3JhcGhpY0NhbWVyYSkge1xyXG4gICAgICAgICAgLy8gb3J0aG9ncmFwaGljXHJcbiAgICAgICAgICBwYW5MZWZ0KFxyXG4gICAgICAgICAgICAoZGVsdGFYICogKHRoYXQub2JqZWN0LnJpZ2h0IC0gdGhhdC5vYmplY3QubGVmdCkpIC9cclxuICAgICAgICAgICAgICB0aGF0Lm9iamVjdC56b29tIC9cclxuICAgICAgICAgICAgICBlbGVtZW50LmNsaWVudFdpZHRoLFxyXG4gICAgICAgICAgICB0aGF0Lm9iamVjdC5tb2RlbE1hdHJpeFxyXG4gICAgICAgICAgKTtcclxuICAgICAgICAgIHBhblVwKFxyXG4gICAgICAgICAgICAoZGVsdGFZICogKHRoYXQub2JqZWN0LnRvcCAtIHRoYXQub2JqZWN0LmJvdHRvbSkpIC9cclxuICAgICAgICAgICAgICB0aGF0Lm9iamVjdC56b29tIC9cclxuICAgICAgICAgICAgICBlbGVtZW50LmNsaWVudEhlaWdodCxcclxuICAgICAgICAgICAgdGhhdC5vYmplY3QubW9kZWxNYXRyaXhcclxuICAgICAgICAgICk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIC8vIGNhbWVyYSBuZWl0aGVyIG9ydGhvZ3JhcGhpYyBub3IgcGVyc3BlY3RpdmVcclxuICAgICAgICAgIGNvbnNvbGUud2FybihcclxuICAgICAgICAgICAgXCJXQVJOSU5HOiBPcmJpdENvbnRyb2xzLmpzIGVuY291bnRlcmVkIGFuIHVua25vd24gY2FtZXJhIHR5cGUgLSBwYW4gZGlzYWJsZWQuXCJcclxuICAgICAgICAgICk7XHJcbiAgICAgICAgICB0aGF0LmVuYWJsZVBhbiA9IGZhbHNlO1xyXG4gICAgICAgIH1cclxuICAgICAgfTtcclxuICAgIH0pKCk7XHJcbiAgICBjb25zdCBkb2xseU91dCA9IChkb2xseVNjYWxlKSA9PiB7XHJcbiAgICAgIGlmICh0aGlzLm9iamVjdC5pc1BlcnNwZWN0aXZlQ2FtZXJhKSB7XHJcbiAgICAgICAgc2NhbGUgLz0gZG9sbHlTY2FsZTtcclxuICAgICAgfSBlbHNlIGlmICh0aGlzLm9iamVjdC5pc09ydGhvZ3JhcGhpY0NhbWVyYSkge1xyXG4gICAgICAgIHRoaXMub2JqZWN0Lnpvb20gPSBNYXRoLm1heChcclxuICAgICAgICAgIHRoaXMubWluWm9vbSxcclxuICAgICAgICAgIE1hdGgubWluKHRoaXMubWF4Wm9vbSwgdGhpcy5vYmplY3Quem9vbSAqIGRvbGx5U2NhbGUpXHJcbiAgICAgICAgKTtcclxuICAgICAgICB0aGlzLm9iamVjdC51cGRhdGVQcm9qZWN0aW9uTWF0cml4KCk7XHJcbiAgICAgICAgem9vbUNoYW5nZWQgPSB0cnVlO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGNvbnNvbGUud2FybihcclxuICAgICAgICAgIFwiV0FSTklORzogT3JiaXRDb250cm9scy5qcyBlbmNvdW50ZXJlZCBhbiB1bmtub3duIGNhbWVyYSB0eXBlIC0gZG9sbHkvem9vbSBkaXNhYmxlZC5cIlxyXG4gICAgICAgICk7XHJcbiAgICAgICAgdGhpcy5lbmFibGVab29tID0gZmFsc2U7XHJcbiAgICAgIH1cclxuICAgIH07XHJcblxyXG4gICAgY29uc3QgZG9sbHlJbiA9IChkb2xseVNjYWxlKSA9PiB7XHJcbiAgICAgIGlmICh0aGlzLm9iamVjdC5pc1BlcnNwZWN0aXZlQ2FtZXJhKSB7XHJcbiAgICAgICAgc2NhbGUgKj0gZG9sbHlTY2FsZTtcclxuICAgICAgfSBlbHNlIGlmICh0aGlzLm9iamVjdC5pc09ydGhvZ3JhcGhpY0NhbWVyYSkge1xyXG4gICAgICAgIHRoaXMub2JqZWN0Lnpvb20gPSBNYXRoLm1heChcclxuICAgICAgICAgIHRoaXMubWluWm9vbSxcclxuICAgICAgICAgIE1hdGgubWluKHRoaXMubWF4Wm9vbSwgdGhpcy5vYmplY3Quem9vbSAvIGRvbGx5U2NhbGUpXHJcbiAgICAgICAgKTtcclxuICAgICAgICB0aGlzLm9iamVjdC51cGRhdGVQcm9qZWN0aW9uTWF0cml4KCk7XHJcbiAgICAgICAgem9vbUNoYW5nZWQgPSB0cnVlO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGNvbnNvbGUud2FybihcclxuICAgICAgICAgIFwiV0FSTklORzogT3JiaXRDb250cm9scy5qcyBlbmNvdW50ZXJlZCBhbiB1bmtub3duIGNhbWVyYSB0eXBlIC0gZG9sbHkvem9vbSBkaXNhYmxlZC5cIlxyXG4gICAgICAgICk7XHJcbiAgICAgICAgdGhpcy5lbmFibGVab29tID0gZmFsc2U7XHJcbiAgICAgIH1cclxuICAgIH07XHJcbiAgICBjb25zdCBoYW5kbGVNb3VzZU1vdmVSb3RhdGUgPSAoZXZlbnQpID0+IHtcclxuICAgICAgcm90YXRlRW5kLnNldChldmVudC5jbGllbnRYLCBldmVudC5jbGllbnRZKTtcclxuXHJcbiAgICAgIFZlY3RvcjIuc3VidHJhY3Qocm90YXRlRW5kLCByb3RhdGVTdGFydCwgcm90YXRlRGVsdGEpO1xyXG4gICAgICBWZWN0b3IyLm11bHRpcGx5QnlTY2FsYXIocm90YXRlRGVsdGEsIHRoaXMucm90YXRlU3BlZWQsIHJvdGF0ZURlbHRhKTtcclxuICAgICAgLy9yb3RhdGVEZWx0YS5zdWJWZWN0b3JzKCByb3RhdGVFbmQsIHJvdGF0ZVN0YXJ0ICkubXVsdGlwbHlTY2FsYXIoIHRoaXMucm90YXRlU3BlZWQgKTtcclxuXHJcbiAgICAgIGNvbnN0IGVsZW1lbnQgPSB0aGlzLmRvbUVsZW1lbnQ7XHJcblxyXG4gICAgICByb3RhdGVMZWZ0KCgyICogTWF0aC5QSSAqIHJvdGF0ZURlbHRhLngpIC8gZWxlbWVudC5jbGllbnRIZWlnaHQpOyAvLyB5ZXMsIGhlaWdodFxyXG5cclxuICAgICAgcm90YXRlVXAoKDIgKiBNYXRoLlBJICogcm90YXRlRGVsdGEueSkgLyBlbGVtZW50LmNsaWVudEhlaWdodCk7XHJcblxyXG4gICAgICBWZWN0b3IyLmNsb25lKHJvdGF0ZUVuZCwgcm90YXRlU3RhcnQpO1xyXG4gICAgICAvL3JvdGF0ZVN0YXJ0LmNvcHkoIHJvdGF0ZUVuZCApO1xyXG5cclxuICAgICAgdGhpcy51cGRhdGUoKTtcclxuICAgIH07XHJcblxyXG4gICAgY29uc3QgaGFuZGxlTW91c2VNb3ZlRG9sbHkgPSAoZXZlbnQpID0+IHtcclxuICAgICAgZG9sbHlFbmQuc2V0KGV2ZW50LmNsaWVudFgsIGV2ZW50LmNsaWVudFkpO1xyXG5cclxuICAgICAgVmVjdG9yMi5zdWJ0cmFjdChkb2xseUVuZCwgZG9sbHlTdGFydCwgZG9sbHlEZWx0YSk7XHJcbiAgICAgIC8vIGRvbGx5RGVsdGEuc3ViVmVjdG9ycyggZG9sbHlFbmQsIGRvbGx5U3RhcnQgKTtcclxuXHJcbiAgICAgIGlmIChkb2xseURlbHRhLnkgPiAwKSB7XHJcbiAgICAgICAgZG9sbHlPdXQoZ2V0Wm9vbVNjYWxlKCkpO1xyXG4gICAgICB9IGVsc2UgaWYgKGRvbGx5RGVsdGEueSA8IDApIHtcclxuICAgICAgICBkb2xseUluKGdldFpvb21TY2FsZSgpKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgVmVjdG9yMi5jbG9uZShkb2xseUVuZCwgZG9sbHlTdGFydCk7XHJcbiAgICAgIC8vIGRvbGx5U3RhcnQuY29weSggZG9sbHlFbmQgKTtcclxuXHJcbiAgICAgIHRoaXMudXBkYXRlKCk7XHJcbiAgICB9O1xyXG5cclxuICAgIGNvbnN0IGhhbmRsZU1vdXNlTW92ZVBhbiA9IChldmVudCkgPT4ge1xyXG4gICAgICBwYW5FbmQuc2V0KGV2ZW50LmNsaWVudFgsIGV2ZW50LmNsaWVudFkpO1xyXG5cclxuICAgICAgVmVjdG9yMi5zdWJ0cmFjdChwYW5FbmQsIHBhblN0YXJ0LCBwYW5EZWx0YSk7XHJcbiAgICAgIFZlY3RvcjIubXVsdGlwbHlCeVNjYWxhcihwYW5EZWx0YSwgdGhpcy5wYW5TcGVlZCwgcGFuRGVsdGEpO1xyXG4gICAgICAvL3BhbkRlbHRhLnN1YlZlY3RvcnMoIHBhbkVuZCwgcGFuU3RhcnQgKS5tdWx0aXBseVNjYWxhciggdGhpcy5wYW5TcGVlZCApO1xyXG5cclxuICAgICAgcGFuKHBhbkRlbHRhLngsIHBhbkRlbHRhLnkpO1xyXG5cclxuICAgICAgVmVjdG9yMi5jbG9uZShwYW5FbmQsIHBhblN0YXJ0KTtcclxuICAgICAgLy9wYW5TdGFydC5jb3B5KCBwYW5FbmQgKTtcclxuXHJcbiAgICAgIHRoaXMudXBkYXRlKCk7XHJcbiAgICB9O1xyXG5cclxuICAgIGNvbnN0IGhhbmRsZU1vdXNlV2hlZWwgPSAoZXZlbnQpID0+IHtcclxuICAgICAgaWYgKGV2ZW50LmRlbHRhWSA8IDApIHtcclxuICAgICAgICBkb2xseUluKGdldFpvb21TY2FsZSgpKTtcclxuICAgICAgfSBlbHNlIGlmIChldmVudC5kZWx0YVkgPiAwKSB7XHJcbiAgICAgICAgZG9sbHlPdXQoZ2V0Wm9vbVNjYWxlKCkpO1xyXG4gICAgICB9XHJcblxyXG4gICAgICB0aGlzLnVwZGF0ZSgpO1xyXG4gICAgfTtcclxuXHJcbiAgICBjb25zdCBoYW5kbGVLZXlEb3duID0gKGV2ZW50KSA9PiB7XHJcbiAgICAgIGxldCBuZWVkc1VwZGF0ZSA9IGZhbHNlO1xyXG5cclxuICAgICAgc3dpdGNoIChldmVudC5jb2RlKSB7XHJcbiAgICAgICAgY2FzZSB0aGlzLmtleXMuVVA6XHJcbiAgICAgICAgICBwYW4oMCwgdGhpcy5rZXlQYW5TcGVlZCk7XHJcbiAgICAgICAgICBuZWVkc1VwZGF0ZSA9IHRydWU7XHJcbiAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgY2FzZSB0aGlzLmtleXMuQk9UVE9NOlxyXG4gICAgICAgICAgcGFuKDAsIC10aGlzLmtleVBhblNwZWVkKTtcclxuICAgICAgICAgIG5lZWRzVXBkYXRlID0gdHJ1ZTtcclxuICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICBjYXNlIHRoaXMua2V5cy5MRUZUOlxyXG4gICAgICAgICAgcGFuKHRoaXMua2V5UGFuU3BlZWQsIDApO1xyXG4gICAgICAgICAgbmVlZHNVcGRhdGUgPSB0cnVlO1xyXG4gICAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICAgIGNhc2UgdGhpcy5rZXlzLlJJR0hUOlxyXG4gICAgICAgICAgcGFuKC10aGlzLmtleVBhblNwZWVkLCAwKTtcclxuICAgICAgICAgIG5lZWRzVXBkYXRlID0gdHJ1ZTtcclxuICAgICAgICAgIGJyZWFrO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAobmVlZHNVcGRhdGUpIHtcclxuICAgICAgICAvLyBwcmV2ZW50IHRoZSBicm93c2VyIGZyb20gc2Nyb2xsaW5nIG9uIGN1cnNvciBrZXlzXHJcbiAgICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcclxuXHJcbiAgICAgICAgdGhpcy51cGRhdGUoKTtcclxuICAgICAgfVxyXG4gICAgfTtcclxuXHJcbiAgICBjb25zdCBoYW5kbGVUb3VjaFN0YXJ0RG9sbHlQYW4gPSAoKSA9PiB7XHJcbiAgICAgIGlmICh0aGlzLmVuYWJsZVpvb20pIGhhbmRsZVRvdWNoU3RhcnREb2xseSgpO1xyXG5cclxuICAgICAgaWYgKHRoaXMuZW5hYmxlUGFuKSBoYW5kbGVUb3VjaFN0YXJ0UGFuKCk7XHJcbiAgICB9O1xyXG4gICAgY29uc3QgaGFuZGxlVG91Y2hTdGFydERvbGx5Um90YXRlID0gKCkgPT4ge1xyXG4gICAgICBpZiAodGhpcy5lbmFibGVab29tKSBoYW5kbGVUb3VjaFN0YXJ0RG9sbHkoKTtcclxuXHJcbiAgICAgIGlmICh0aGlzLmVuYWJsZVJvdGF0ZSkgaGFuZGxlVG91Y2hTdGFydFJvdGF0ZSgpO1xyXG4gICAgfTtcclxuXHJcbiAgICBjb25zdCBoYW5kbGVUb3VjaE1vdmVSb3RhdGUgPSAoZXZlbnQpID0+IHtcclxuICAgICAgaWYgKHBvaW50ZXJzLmxlbmd0aCA9PSAxKSB7XHJcbiAgICAgICAgcm90YXRlRW5kLnNldChldmVudC5wYWdlWCwgZXZlbnQucGFnZVkpO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIGNvbnN0IHBvc2l0aW9uID0gZ2V0U2Vjb25kUG9pbnRlclBvc2l0aW9uKGV2ZW50KTtcclxuXHJcbiAgICAgICAgY29uc3QgeCA9IDAuNSAqIChldmVudC5wYWdlWCArIHBvc2l0aW9uLngpO1xyXG4gICAgICAgIGNvbnN0IHkgPSAwLjUgKiAoZXZlbnQucGFnZVkgKyBwb3NpdGlvbi55KTtcclxuXHJcbiAgICAgICAgcm90YXRlRW5kLnNldCh4LCB5KTtcclxuICAgICAgfVxyXG5cclxuICAgICAgVmVjdG9yMi5zdWJ0cmFjdChyb3RhdGVFbmQsIHJvdGF0ZVN0YXJ0LCByb3RhdGVEZWx0YSk7XHJcbiAgICAgIFZlY3RvcjIubXVsdGlwbHlCeVNjYWxhcihyb3RhdGVEZWx0YSwgdGhpcy5yb3RhdGVTcGVlZCwgcm90YXRlRGVsdGEpO1xyXG4gICAgICAvL3JvdGF0ZURlbHRhLnN1YlZlY3RvcnMoIHJvdGF0ZUVuZCwgcm90YXRlU3RhcnQgKS5tdWx0aXBseVNjYWxhciggdGhpcy5yb3RhdGVTcGVlZCApO1xyXG5cclxuICAgICAgY29uc3QgZWxlbWVudCA9IHRoaXMuZG9tRWxlbWVudDtcclxuXHJcbiAgICAgIHJvdGF0ZUxlZnQoKDIgKiBNYXRoLlBJICogcm90YXRlRGVsdGEueCkgLyBlbGVtZW50LmNsaWVudEhlaWdodCk7IC8vIHllcywgaGVpZ2h0XHJcblxyXG4gICAgICByb3RhdGVVcCgoMiAqIE1hdGguUEkgKiByb3RhdGVEZWx0YS55KSAvIGVsZW1lbnQuY2xpZW50SGVpZ2h0KTtcclxuICAgICAgVmVjdG9yMi5jbG9uZShyb3RhdGVFbmQsIHJvdGF0ZVN0YXJ0KTtcclxuICAgICAgLy9yb3RhdGVTdGFydC5jb3B5KCByb3RhdGVFbmQgKTtcclxuICAgIH07XHJcblxyXG4gICAgY29uc3QgaGFuZGxlVG91Y2hNb3ZlUGFuID0gKGV2ZW50KSA9PiB7XHJcbiAgICAgIGlmIChwb2ludGVycy5sZW5ndGggPT09IDEpIHtcclxuICAgICAgICBwYW5FbmQuc2V0KGV2ZW50LnBhZ2VYLCBldmVudC5wYWdlWSk7XHJcbiAgICAgIH0gZWxzZSB7XHJcbiAgICAgICAgY29uc3QgcG9zaXRpb24gPSBnZXRTZWNvbmRQb2ludGVyUG9zaXRpb24oZXZlbnQpO1xyXG5cclxuICAgICAgICBjb25zdCB4ID0gMC41ICogKGV2ZW50LnBhZ2VYICsgcG9zaXRpb24ueCk7XHJcbiAgICAgICAgY29uc3QgeSA9IDAuNSAqIChldmVudC5wYWdlWSArIHBvc2l0aW9uLnkpO1xyXG5cclxuICAgICAgICBwYW5FbmQuc2V0KHgsIHkpO1xyXG4gICAgICB9XHJcbiAgICAgIFZlY3RvcjIuc3VidHJhY3QocGFuRW5kLCBwYW5TdGFydCwgcGFuRGVsdGEpO1xyXG4gICAgICBWZWN0b3IyLm11bHRpcGx5QnlTY2FsYXIocGFuRGVsdGEsIHRoaXMucGFuU3BlZWQsIHBhbkRlbHRhKTtcclxuXHJcbiAgICAgIC8vcGFuRGVsdGEuc3ViVmVjdG9ycyggcGFuRW5kLCBwYW5TdGFydCApLm11bHRpcGx5U2NhbGFyKCB0aGlzLnBhblNwZWVkICk7XHJcblxyXG4gICAgICBwYW4ocGFuRGVsdGEueCwgcGFuRGVsdGEueSk7XHJcblxyXG4gICAgICBWZWN0b3IyLmNsb25lKHBhbkVuZCwgcGFuU3RhcnQpO1xyXG4gICAgICAvLyBwYW5TdGFydC5jb3B5KCBwYW5FbmQgKTtcclxuICAgIH07XHJcblxyXG4gICAgY29uc3QgaGFuZGxlVG91Y2hNb3ZlRG9sbHkgPSAoZXZlbnQpID0+IHtcclxuICAgICAgY29uc3QgcG9zaXRpb24gPSBnZXRTZWNvbmRQb2ludGVyUG9zaXRpb24oZXZlbnQpO1xyXG5cclxuICAgICAgY29uc3QgZHggPSBldmVudC5wYWdlWCAtIHBvc2l0aW9uLng7XHJcbiAgICAgIGNvbnN0IGR5ID0gZXZlbnQucGFnZVkgLSBwb3NpdGlvbi55O1xyXG5cclxuICAgICAgY29uc3QgZGlzdGFuY2UgPSBNYXRoLnNxcnQoZHggKiBkeCArIGR5ICogZHkpO1xyXG5cclxuICAgICAgZG9sbHlFbmQuc2V0KDAsIGRpc3RhbmNlKTtcclxuXHJcbiAgICAgIGRvbGx5RGVsdGEuc2V0KDAsIE1hdGgucG93KGRvbGx5RW5kLnkgLyBkb2xseVN0YXJ0LnksIHRoaXMuem9vbVNwZWVkKSk7XHJcblxyXG4gICAgICBkb2xseU91dChkb2xseURlbHRhLnkpO1xyXG5cclxuICAgICAgVmVjdG9yMi5jbG9uZShkb2xseUVuZCwgZG9sbHlTdGFydCk7XHJcbiAgICAgIC8vZG9sbHlTdGFydC5jb3B5KCBkb2xseUVuZCApO1xyXG4gICAgfTtcclxuXHJcbiAgICBjb25zdCBoYW5kbGVUb3VjaE1vdmVEb2xseVBhbiA9IChldmVudCkgPT4ge1xyXG4gICAgICBpZiAodGhpcy5lbmFibGVab29tKSBoYW5kbGVUb3VjaE1vdmVEb2xseShldmVudCk7XHJcblxyXG4gICAgICBpZiAodGhpcy5lbmFibGVQYW4pIGhhbmRsZVRvdWNoTW92ZVBhbihldmVudCk7XHJcbiAgICB9O1xyXG5cclxuICAgIGNvbnN0IGhhbmRsZVRvdWNoTW92ZURvbGx5Um90YXRlID0gKGV2ZW50KSA9PiB7XHJcbiAgICAgIGlmICh0aGlzLmVuYWJsZVpvb20pIGhhbmRsZVRvdWNoTW92ZURvbGx5KGV2ZW50KTtcclxuXHJcbiAgICAgIGlmICh0aGlzLmVuYWJsZVJvdGF0ZSkgaGFuZGxlVG91Y2hNb3ZlUm90YXRlKGV2ZW50KTtcclxuICAgIH07XHJcblxyXG4gICAgLy9cclxuICAgIC8vIGV2ZW50IGhhbmRsZXJzIC0gRlNNOiBsaXN0ZW4gZm9yIGV2ZW50cyBhbmQgcmVzZXQgc3RhdGVcclxuICAgIC8vXHJcblxyXG4gICAgdGhpcy5vblBvaW50ZXJEb3duID0gKGV2ZW50KSA9PiB7XHJcbiAgICAgIGlmICh0aGlzLmVuYWJsZWQgPT09IGZhbHNlKSByZXR1cm47XHJcblxyXG4gICAgICBpZiAocG9pbnRlcnMubGVuZ3RoID09PSAwKSB7XHJcbiAgICAgICAgdGhpcy5kb21FbGVtZW50LnNldFBvaW50ZXJDYXB0dXJlKGV2ZW50LnBvaW50ZXJJZCk7XHJcblxyXG4gICAgICAgIHRoaXMuZG9tRWxlbWVudC5hZGRFdmVudExpc3RlbmVyKFwicG9pbnRlcm1vdmVcIiwgdGhpcy5vblBvaW50ZXJNb3ZlKTtcclxuICAgICAgICB0aGlzLmRvbUVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcihcInBvaW50ZXJ1cFwiLCB0aGlzLm9uUG9pbnRlclVwKTtcclxuICAgICAgfVxyXG5cclxuICAgICAgLy9cclxuXHJcbiAgICAgIGFkZFBvaW50ZXIoZXZlbnQpO1xyXG5cclxuICAgICAgaWYgKGV2ZW50LnBvaW50ZXJUeXBlID09PSBcInRvdWNoXCIpIHtcclxuICAgICAgICBvblRvdWNoU3RhcnQoZXZlbnQpO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIG9uTW91c2VEb3duKGV2ZW50KTtcclxuICAgICAgfVxyXG4gICAgfTtcclxuXHJcbiAgICB0aGlzLm9uUG9pbnRlck1vdmUgPSAoZXZlbnQpID0+IHtcclxuICAgICAgaWYgKHRoaXMuZW5hYmxlZCA9PT0gZmFsc2UpIHJldHVybjtcclxuXHJcbiAgICAgIGlmIChldmVudC5wb2ludGVyVHlwZSA9PT0gXCJ0b3VjaFwiKSB7XHJcbiAgICAgICAgb25Ub3VjaE1vdmUoZXZlbnQpO1xyXG4gICAgICB9IGVsc2Uge1xyXG4gICAgICAgIG9uTW91c2VNb3ZlKGV2ZW50KTtcclxuICAgICAgfVxyXG4gICAgfTtcclxuXHJcbiAgICB0aGlzLm9uUG9pbnRlclVwID0gKGV2ZW50KSA9PiB7XHJcbiAgICAgIHJlbW92ZVBvaW50ZXIoZXZlbnQpO1xyXG5cclxuICAgICAgaWYgKHBvaW50ZXJzLmxlbmd0aCA9PT0gMCkge1xyXG4gICAgICAgIHRoaXMuZG9tRWxlbWVudC5yZWxlYXNlUG9pbnRlckNhcHR1cmUoZXZlbnQucG9pbnRlcklkKTtcclxuXHJcbiAgICAgICAgdGhpcy5kb21FbGVtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJwb2ludGVybW92ZVwiLCB0aGlzLm9uUG9pbnRlck1vdmUpO1xyXG4gICAgICAgIHRoaXMuZG9tRWxlbWVudC5yZW1vdmVFdmVudExpc3RlbmVyKFwicG9pbnRlcnVwXCIsIHRoaXMub25Qb2ludGVyVXApO1xyXG4gICAgICB9XHJcblxyXG4gICAgICB0aGlzLmRpc3BhdGNoRXZlbnQoX2VuZEV2ZW50KTtcclxuXHJcbiAgICAgIHN0YXRlID0gU1RBVEUuTk9ORTtcclxuICAgIH07XHJcblxyXG4gICAgY29uc3Qgb25Nb3VzZURvd24gPSAoZXZlbnQpID0+IHtcclxuICAgICAgbGV0IG1vdXNlQWN0aW9uO1xyXG5cclxuICAgICAgc3dpdGNoIChldmVudC5idXR0b24pIHtcclxuICAgICAgICBjYXNlIDA6XHJcbiAgICAgICAgICBtb3VzZUFjdGlvbiA9IHRoaXMubW91c2VCdXR0b25zLkxFRlQ7XHJcbiAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgY2FzZSAxOlxyXG4gICAgICAgICAgbW91c2VBY3Rpb24gPSB0aGlzLm1vdXNlQnV0dG9ucy5NSURETEU7XHJcbiAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgY2FzZSAyOlxyXG4gICAgICAgICAgbW91c2VBY3Rpb24gPSB0aGlzLm1vdXNlQnV0dG9ucy5SSUdIVDtcclxuICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICBkZWZhdWx0OlxyXG4gICAgICAgICAgbW91c2VBY3Rpb24gPSAtMTtcclxuICAgICAgfVxyXG5cclxuICAgICAgc3dpdGNoIChtb3VzZUFjdGlvbikge1xyXG4gICAgICAgIGNhc2UgTU9VU0UuRE9MTFk6XHJcbiAgICAgICAgICBpZiAodGhpcy5lbmFibGVab29tID09PSBmYWxzZSkgcmV0dXJuO1xyXG5cclxuICAgICAgICAgIGhhbmRsZU1vdXNlRG93bkRvbGx5KGV2ZW50KTtcclxuXHJcbiAgICAgICAgICBzdGF0ZSA9IFNUQVRFLkRPTExZO1xyXG5cclxuICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICBjYXNlIE1PVVNFLlJPVEFURTpcclxuICAgICAgICAgIGlmIChldmVudC5jdHJsS2V5IHx8IGV2ZW50Lm1ldGFLZXkgfHwgZXZlbnQuc2hpZnRLZXkpIHtcclxuICAgICAgICAgICAgaWYgKHRoaXMuZW5hYmxlUGFuID09PSBmYWxzZSkgcmV0dXJuO1xyXG5cclxuICAgICAgICAgICAgaGFuZGxlTW91c2VEb3duUGFuKGV2ZW50KTtcclxuXHJcbiAgICAgICAgICAgIHN0YXRlID0gU1RBVEUuUEFOO1xyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgaWYgKHRoaXMuZW5hYmxlUm90YXRlID09PSBmYWxzZSkgcmV0dXJuO1xyXG5cclxuICAgICAgICAgICAgaGFuZGxlTW91c2VEb3duUm90YXRlKGV2ZW50KTtcclxuXHJcbiAgICAgICAgICAgIHN0YXRlID0gU1RBVEUuUk9UQVRFO1xyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICBjYXNlIE1PVVNFLlBBTjpcclxuICAgICAgICAgIGlmIChldmVudC5jdHJsS2V5IHx8IGV2ZW50Lm1ldGFLZXkgfHwgZXZlbnQuc2hpZnRLZXkpIHtcclxuICAgICAgICAgICAgaWYgKHRoaXMuZW5hYmxlUm90YXRlID09PSBmYWxzZSkgcmV0dXJuO1xyXG5cclxuICAgICAgICAgICAgaGFuZGxlTW91c2VEb3duUm90YXRlKGV2ZW50KTtcclxuXHJcbiAgICAgICAgICAgIHN0YXRlID0gU1RBVEUuUk9UQVRFO1xyXG4gICAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgICAgaWYgKHRoaXMuZW5hYmxlUGFuID09PSBmYWxzZSkgcmV0dXJuO1xyXG5cclxuICAgICAgICAgICAgaGFuZGxlTW91c2VEb3duUGFuKGV2ZW50KTtcclxuXHJcbiAgICAgICAgICAgIHN0YXRlID0gU1RBVEUuUEFOO1xyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICBkZWZhdWx0OlxyXG4gICAgICAgICAgc3RhdGUgPSBTVEFURS5OT05FO1xyXG4gICAgICB9XHJcblxyXG4gICAgICBpZiAoc3RhdGUgIT09IFNUQVRFLk5PTkUpIHtcclxuICAgICAgICB0aGlzLmRpc3BhdGNoRXZlbnQoX3N0YXJ0RXZlbnQpO1xyXG4gICAgICB9XHJcbiAgICB9O1xyXG5cclxuICAgIGNvbnN0IG9uTW91c2VNb3ZlID0gKGV2ZW50KSA9PiB7XHJcbiAgICAgIHN3aXRjaCAoc3RhdGUpIHtcclxuICAgICAgICBjYXNlIFNUQVRFLlJPVEFURTpcclxuICAgICAgICAgIGlmICh0aGlzLmVuYWJsZVJvdGF0ZSA9PT0gZmFsc2UpIHJldHVybjtcclxuXHJcbiAgICAgICAgICBoYW5kbGVNb3VzZU1vdmVSb3RhdGUoZXZlbnQpO1xyXG5cclxuICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICBjYXNlIFNUQVRFLkRPTExZOlxyXG4gICAgICAgICAgaWYgKHRoaXMuZW5hYmxlWm9vbSA9PT0gZmFsc2UpIHJldHVybjtcclxuXHJcbiAgICAgICAgICBoYW5kbGVNb3VzZU1vdmVEb2xseShldmVudCk7XHJcblxyXG4gICAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICAgIGNhc2UgU1RBVEUuUEFOOlxyXG4gICAgICAgICAgaWYgKHRoaXMuZW5hYmxlUGFuID09PSBmYWxzZSkgcmV0dXJuO1xyXG5cclxuICAgICAgICAgIGhhbmRsZU1vdXNlTW92ZVBhbihldmVudCk7XHJcblxyXG4gICAgICAgICAgYnJlYWs7XHJcbiAgICAgIH1cclxuICAgIH07XHJcblxyXG4gICAgdGhpcy5vbk1vdXNlV2hlZWwgPSAoZXZlbnQpID0+IHtcclxuICAgICAgaWYgKFxyXG4gICAgICAgIHRoaXMuZW5hYmxlZCA9PT0gZmFsc2UgfHxcclxuICAgICAgICB0aGlzLmVuYWJsZVpvb20gPT09IGZhbHNlIHx8XHJcbiAgICAgICAgc3RhdGUgIT09IFNUQVRFLk5PTkVcclxuICAgICAgKVxyXG4gICAgICAgIHJldHVybjtcclxuXHJcbiAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7XHJcblxyXG4gICAgICB0aGlzLmRpc3BhdGNoRXZlbnQoX3N0YXJ0RXZlbnQpO1xyXG5cclxuICAgICAgaGFuZGxlTW91c2VXaGVlbChldmVudCk7XHJcblxyXG4gICAgICB0aGlzLmRpc3BhdGNoRXZlbnQoX2VuZEV2ZW50KTtcclxuICAgIH07XHJcblxyXG4gICAgdGhpcy5vbktleURvd24gPSAoZXZlbnQpID0+IHtcclxuICAgICAgaWYgKHRoaXMuZW5hYmxlZCA9PT0gZmFsc2UgfHwgdGhpcy5lbmFibGVQYW4gPT09IGZhbHNlKSByZXR1cm47XHJcblxyXG4gICAgICBoYW5kbGVLZXlEb3duKGV2ZW50KTtcclxuICAgIH07XHJcblxyXG4gICAgY29uc3Qgb25Ub3VjaFN0YXJ0ID0gKGV2ZW50KSA9PiB7XHJcbiAgICAgIHRyYWNrUG9pbnRlcihldmVudCk7XHJcblxyXG4gICAgICBzd2l0Y2ggKHBvaW50ZXJzLmxlbmd0aCkge1xyXG4gICAgICAgIGNhc2UgMTpcclxuICAgICAgICAgIHN3aXRjaCAodGhpcy50b3VjaGVzLk9ORSkge1xyXG4gICAgICAgICAgICBjYXNlIFRPVUNILlJPVEFURTpcclxuICAgICAgICAgICAgICBpZiAodGhpcy5lbmFibGVSb3RhdGUgPT09IGZhbHNlKSByZXR1cm47XHJcblxyXG4gICAgICAgICAgICAgIGhhbmRsZVRvdWNoU3RhcnRSb3RhdGUoKTtcclxuXHJcbiAgICAgICAgICAgICAgc3RhdGUgPSBTVEFURS5UT1VDSF9ST1RBVEU7XHJcblxyXG4gICAgICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICAgICAgY2FzZSBUT1VDSC5QQU46XHJcbiAgICAgICAgICAgICAgaWYgKHRoaXMuZW5hYmxlUGFuID09PSBmYWxzZSkgcmV0dXJuO1xyXG5cclxuICAgICAgICAgICAgICBoYW5kbGVUb3VjaFN0YXJ0UGFuKCk7XHJcblxyXG4gICAgICAgICAgICAgIHN0YXRlID0gU1RBVEUuVE9VQ0hfUEFOO1xyXG5cclxuICAgICAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgICAgIGRlZmF1bHQ6XHJcbiAgICAgICAgICAgICAgc3RhdGUgPSBTVEFURS5OT05FO1xyXG4gICAgICAgICAgfVxyXG5cclxuICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICBjYXNlIDI6XHJcbiAgICAgICAgICBzd2l0Y2ggKHRoaXMudG91Y2hlcy5UV08pIHtcclxuICAgICAgICAgICAgY2FzZSBUT1VDSC5ET0xMWV9QQU46XHJcbiAgICAgICAgICAgICAgaWYgKHRoaXMuZW5hYmxlWm9vbSA9PT0gZmFsc2UgJiYgdGhpcy5lbmFibGVQYW4gPT09IGZhbHNlKSByZXR1cm47XHJcblxyXG4gICAgICAgICAgICAgIGhhbmRsZVRvdWNoU3RhcnREb2xseVBhbigpO1xyXG5cclxuICAgICAgICAgICAgICBzdGF0ZSA9IFNUQVRFLlRPVUNIX0RPTExZX1BBTjtcclxuXHJcbiAgICAgICAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICAgICAgICBjYXNlIFRPVUNILkRPTExZX1JPVEFURTpcclxuICAgICAgICAgICAgICBpZiAodGhpcy5lbmFibGVab29tID09PSBmYWxzZSAmJiB0aGlzLmVuYWJsZVJvdGF0ZSA9PT0gZmFsc2UpXHJcbiAgICAgICAgICAgICAgICByZXR1cm47XHJcblxyXG4gICAgICAgICAgICAgIGhhbmRsZVRvdWNoU3RhcnREb2xseVJvdGF0ZSgpO1xyXG5cclxuICAgICAgICAgICAgICBzdGF0ZSA9IFNUQVRFLlRPVUNIX0RPTExZX1JPVEFURTtcclxuXHJcbiAgICAgICAgICAgICAgYnJlYWs7XHJcblxyXG4gICAgICAgICAgICBkZWZhdWx0OlxyXG4gICAgICAgICAgICAgIHN0YXRlID0gU1RBVEUuTk9ORTtcclxuICAgICAgICAgIH1cclxuXHJcbiAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgZGVmYXVsdDpcclxuICAgICAgICAgIHN0YXRlID0gU1RBVEUuTk9ORTtcclxuICAgICAgfVxyXG5cclxuICAgICAgaWYgKHN0YXRlICE9PSBTVEFURS5OT05FKSB7XHJcbiAgICAgICAgdGhpcy5kaXNwYXRjaEV2ZW50KF9zdGFydEV2ZW50KTtcclxuICAgICAgfVxyXG4gICAgfTtcclxuXHJcbiAgICBjb25zdCBvblRvdWNoTW92ZSA9IChldmVudCkgPT4ge1xyXG4gICAgICB0cmFja1BvaW50ZXIoZXZlbnQpO1xyXG5cclxuICAgICAgc3dpdGNoIChzdGF0ZSkge1xyXG4gICAgICAgIGNhc2UgU1RBVEUuVE9VQ0hfUk9UQVRFOlxyXG4gICAgICAgICAgaWYgKHRoaXMuZW5hYmxlUm90YXRlID09PSBmYWxzZSkgcmV0dXJuO1xyXG5cclxuICAgICAgICAgIGhhbmRsZVRvdWNoTW92ZVJvdGF0ZShldmVudCk7XHJcblxyXG4gICAgICAgICAgdGhpcy51cGRhdGUoKTtcclxuXHJcbiAgICAgICAgICBicmVhaztcclxuXHJcbiAgICAgICAgY2FzZSBTVEFURS5UT1VDSF9QQU46XHJcbiAgICAgICAgICBpZiAodGhpcy5lbmFibGVQYW4gPT09IGZhbHNlKSByZXR1cm47XHJcblxyXG4gICAgICAgICAgaGFuZGxlVG91Y2hNb3ZlUGFuKGV2ZW50KTtcclxuXHJcbiAgICAgICAgICB0aGlzLnVwZGF0ZSgpO1xyXG5cclxuICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICBjYXNlIFNUQVRFLlRPVUNIX0RPTExZX1BBTjpcclxuICAgICAgICAgIGlmICh0aGlzLmVuYWJsZVpvb20gPT09IGZhbHNlICYmIHRoaXMuZW5hYmxlUGFuID09PSBmYWxzZSkgcmV0dXJuO1xyXG5cclxuICAgICAgICAgIGhhbmRsZVRvdWNoTW92ZURvbGx5UGFuKGV2ZW50KTtcclxuXHJcbiAgICAgICAgICB0aGlzLnVwZGF0ZSgpO1xyXG5cclxuICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICBjYXNlIFNUQVRFLlRPVUNIX0RPTExZX1JPVEFURTpcclxuICAgICAgICAgIGlmICh0aGlzLmVuYWJsZVpvb20gPT09IGZhbHNlICYmIHRoaXMuZW5hYmxlUm90YXRlID09PSBmYWxzZSkgcmV0dXJuO1xyXG5cclxuICAgICAgICAgIGhhbmRsZVRvdWNoTW92ZURvbGx5Um90YXRlKGV2ZW50KTtcclxuXHJcbiAgICAgICAgICB0aGlzLnVwZGF0ZSgpO1xyXG5cclxuICAgICAgICAgIGJyZWFrO1xyXG5cclxuICAgICAgICBkZWZhdWx0OlxyXG4gICAgICAgICAgc3RhdGUgPSBTVEFURS5OT05FO1xyXG4gICAgICB9XHJcbiAgICB9O1xyXG5cclxuICAgIHRoaXMub25Db250ZXh0TWVudSA9IChldmVudCkgPT4ge1xyXG4gICAgICBpZiAodGhpcy5lbmFibGVkID09PSBmYWxzZSkgcmV0dXJuO1xyXG5cclxuICAgICAgZXZlbnQucHJldmVudERlZmF1bHQoKTtcclxuICAgIH07XHJcbiAgICB0aGlzLmdldEF1dG9Sb3RhdGlvbkFuZ2xlID0gKCkgPT4ge1xyXG4gICAgICByZXR1cm4gKCgyICogTWF0aC5QSSkgLyA2MCAvIDYwKSAqIHRoaXMuYXV0b1JvdGF0ZVNwZWVkO1xyXG4gICAgfTtcclxuXHJcbiAgICBjb25zdCBnZXRab29tU2NhbGUgPSAoKSA9PiB7XHJcbiAgICAgIHJldHVybiBNYXRoLnBvdygwLjk1LCB0aGlzLnpvb21TcGVlZCk7XHJcbiAgICB9O1xyXG4gICAgdGhpcy5kb21FbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoXCJjb250ZXh0bWVudVwiLCB0aGlzLm9uQ29udGV4dE1lbnUpO1xyXG5cclxuICAgIHRoaXMuZG9tRWxlbWVudC5hZGRFdmVudExpc3RlbmVyKFwicG9pbnRlcmRvd25cIiwgdGhpcy5vblBvaW50ZXJEb3duKTtcclxuICAgIHRoaXMuZG9tRWxlbWVudC5hZGRFdmVudExpc3RlbmVyKFwicG9pbnRlcmNhbmNlbFwiLCBvblBvaW50ZXJDYW5jZWwpO1xyXG4gICAgdGhpcy5kb21FbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoXCJ3aGVlbFwiLCB0aGlzLm9uTW91c2VXaGVlbCwge1xyXG4gICAgICBwYXNzaXZlOiBmYWxzZSxcclxuICAgIH0pO1xyXG4gIH1cclxuICBkaXNwb3NlKCkge1xyXG4gICAgdGhpcy5kb21FbGVtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJjb250ZXh0bWVudVwiLCB0aGlzLm9uQ29udGV4dE1lbnUpO1xyXG5cclxuICAgIHRoaXMuZG9tRWxlbWVudC5yZW1vdmVFdmVudExpc3RlbmVyKFwicG9pbnRlcmRvd25cIiwgdGhpcy5vblBvaW50ZXJEb3duKTtcclxuICAgIHRoaXMuZG9tRWxlbWVudC5yZW1vdmVFdmVudExpc3RlbmVyKFwicG9pbnRlcmNhbmNlbFwiLCBvblBvaW50ZXJDYW5jZWwpO1xyXG4gICAgdGhpcy5kb21FbGVtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJ3aGVlbFwiLCB0aGlzLm9uTW91c2VXaGVlbCk7XHJcblxyXG4gICAgdGhpcy5kb21FbGVtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJwb2ludGVybW92ZVwiLCB0aGlzLm9uUG9pbnRlck1vdmUpO1xyXG4gICAgdGhpcy5kb21FbGVtZW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoXCJwb2ludGVydXBcIiwgdGhpcy5vblBvaW50ZXJVcCk7XHJcblxyXG4gICAgaWYgKHRoaXMuX2RvbUVsZW1lbnRLZXlFdmVudHMgIT09IG51bGwpIHtcclxuICAgICAgdGhpcy5fZG9tRWxlbWVudEtleUV2ZW50cy5yZW1vdmVFdmVudExpc3RlbmVyKFwia2V5ZG93blwiLCB0aGlzLm9uS2V5RG93bik7XHJcbiAgICB9XHJcblxyXG4gICAgLy90aGlzLmRpc3BhdGNoRXZlbnQoIHsgdHlwZTogJ2Rpc3Bvc2UnIH0gKTsgLy8gc2hvdWxkIHRoaXMgYmUgYWRkZWQgaGVyZT9cclxuICB9XHJcbn1cclxuY29uc3QgU1RBVEUgPSB7XHJcbiAgTk9ORTogLTEsXHJcbiAgUk9UQVRFOiAwLFxyXG4gIERPTExZOiAxLFxyXG4gIFBBTjogMixcclxuICBUT1VDSF9ST1RBVEU6IDMsXHJcbiAgVE9VQ0hfUEFOOiA0LFxyXG4gIFRPVUNIX0RPTExZX1BBTjogNSxcclxuICBUT1VDSF9ET0xMWV9ST1RBVEU6IDYsXHJcbn07XHJcblxyXG5sZXQgc3RhdGUgPSBTVEFURS5OT05FO1xyXG5cclxuY29uc3QgRVBTID0gMC4wMDAwMDE7XHJcblxyXG4vLyBjdXJyZW50IHBvc2l0aW9uIGluIHNwaGVyaWNhbCBjb29yZGluYXRlc1xyXG5jb25zdCBzcGhlcmljYWwgPSBuZXcgU3BoZXJpY2FsKCk7XHJcbmNvbnN0IHNwaGVyaWNhbERlbHRhID0gbmV3IFNwaGVyaWNhbCgpO1xyXG5cclxubGV0IHNjYWxlID0gMTtcclxuY29uc3QgcGFuT2Zmc2V0ID0gbmV3IFZlY3RvcjMoKTtcclxubGV0IHpvb21DaGFuZ2VkID0gZmFsc2U7XHJcblxyXG5jb25zdCByb3RhdGVTdGFydCA9IG5ldyBWZWN0b3IyKCk7XHJcbmNvbnN0IHJvdGF0ZUVuZCA9IG5ldyBWZWN0b3IyKCk7XHJcbmNvbnN0IHJvdGF0ZURlbHRhID0gbmV3IFZlY3RvcjIoKTtcclxuXHJcbmNvbnN0IHBhblN0YXJ0ID0gbmV3IFZlY3RvcjIoKTtcclxuY29uc3QgcGFuRW5kID0gbmV3IFZlY3RvcjIoKTtcclxuY29uc3QgcGFuRGVsdGEgPSBuZXcgVmVjdG9yMigpO1xyXG5cclxuY29uc3QgZG9sbHlTdGFydCA9IG5ldyBWZWN0b3IyKCk7XHJcbmNvbnN0IGRvbGx5RW5kID0gbmV3IFZlY3RvcjIoKTtcclxuY29uc3QgZG9sbHlEZWx0YSA9IG5ldyBWZWN0b3IyKCk7XHJcblxyXG5jb25zdCBwb2ludGVycyA9IFtdO1xyXG5jb25zdCBwb2ludGVyUG9zaXRpb25zID0ge307XHJcbmV4cG9ydCBlbnVtIE1PVVNFIHtcclxuICBMRUZUID0gMCxcclxuICBNSURETEUgPSAxLFxyXG4gIFJJR0hUID0gMixcclxuICBST1RBVEUgPSAwLFxyXG4gIERPTExZID0gMSxcclxuICBQQU4gPSAyLFxyXG59XHJcblxyXG5leHBvcnQgZW51bSBUT1VDSCB7XHJcbiAgUk9UQVRFLFxyXG4gIFBBTixcclxuICBET0xMWV9QQU4sXHJcbiAgRE9MTFlfUk9UQVRFLFxyXG59XHJcbmZ1bmN0aW9uIHJvdGF0ZUxlZnQoYW5nbGUpIHtcclxuICBzcGhlcmljYWxEZWx0YS50aGV0YSAtPSBhbmdsZTtcclxufVxyXG5cclxuZnVuY3Rpb24gcm90YXRlVXAoYW5nbGUpIHtcclxuICBzcGhlcmljYWxEZWx0YS5waGkgLT0gYW5nbGU7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGFkZFBvaW50ZXIoZXZlbnQpIHtcclxuICBwb2ludGVycy5wdXNoKGV2ZW50KTtcclxufVxyXG5cclxuZnVuY3Rpb24gcmVtb3ZlUG9pbnRlcihldmVudCkge1xyXG4gIGRlbGV0ZSBwb2ludGVyUG9zaXRpb25zW2V2ZW50LnBvaW50ZXJJZF07XHJcblxyXG4gIGZvciAobGV0IGkgPSAwOyBpIDwgcG9pbnRlcnMubGVuZ3RoOyBpKyspIHtcclxuICAgIGlmIChwb2ludGVyc1tpXS5wb2ludGVySWQgPT0gZXZlbnQucG9pbnRlcklkKSB7XHJcbiAgICAgIHBvaW50ZXJzLnNwbGljZShpLCAxKTtcclxuICAgICAgcmV0dXJuO1xyXG4gICAgfVxyXG4gIH1cclxufVxyXG5cclxuZnVuY3Rpb24gdHJhY2tQb2ludGVyKGV2ZW50KSB7XHJcbiAgbGV0IHBvc2l0aW9uID0gcG9pbnRlclBvc2l0aW9uc1tldmVudC5wb2ludGVySWRdO1xyXG5cclxuICBpZiAocG9zaXRpb24gPT09IHVuZGVmaW5lZCkge1xyXG4gICAgcG9zaXRpb24gPSBuZXcgVmVjdG9yMigpO1xyXG4gICAgcG9pbnRlclBvc2l0aW9uc1tldmVudC5wb2ludGVySWRdID0gcG9zaXRpb247XHJcbiAgfVxyXG5cclxuICBwb3NpdGlvbi5zZXQoZXZlbnQucGFnZVgsIGV2ZW50LnBhZ2VZKTtcclxufVxyXG5cclxuZnVuY3Rpb24gZ2V0U2Vjb25kUG9pbnRlclBvc2l0aW9uKGV2ZW50KSB7XHJcbiAgY29uc3QgcG9pbnRlciA9XHJcbiAgICBldmVudC5wb2ludGVySWQgPT09IHBvaW50ZXJzWzBdLnBvaW50ZXJJZCA/IHBvaW50ZXJzWzFdIDogcG9pbnRlcnNbMF07XHJcblxyXG4gIHJldHVybiBwb2ludGVyUG9zaXRpb25zW3BvaW50ZXIucG9pbnRlcklkXTtcclxufVxyXG5cclxuZnVuY3Rpb24gaGFuZGxlTW91c2VEb3duUm90YXRlKGV2ZW50KSB7XHJcbiAgcm90YXRlU3RhcnQuc2V0KGV2ZW50LmNsaWVudFgsIGV2ZW50LmNsaWVudFkpO1xyXG59XHJcblxyXG5mdW5jdGlvbiBoYW5kbGVNb3VzZURvd25Eb2xseShldmVudCkge1xyXG4gIGRvbGx5U3RhcnQuc2V0KGV2ZW50LmNsaWVudFgsIGV2ZW50LmNsaWVudFkpO1xyXG59XHJcblxyXG5mdW5jdGlvbiBoYW5kbGVNb3VzZURvd25QYW4oZXZlbnQpIHtcclxuICBwYW5TdGFydC5zZXQoZXZlbnQuY2xpZW50WCwgZXZlbnQuY2xpZW50WSk7XHJcbn1cclxuZnVuY3Rpb24gb25Qb2ludGVyQ2FuY2VsKGV2ZW50KSB7XHJcbiAgcmVtb3ZlUG9pbnRlcihldmVudCk7XHJcbn1cclxuZnVuY3Rpb24gaGFuZGxlVG91Y2hTdGFydFJvdGF0ZSgpIHtcclxuICBpZiAocG9pbnRlcnMubGVuZ3RoID09PSAxKSB7XHJcbiAgICByb3RhdGVTdGFydC5zZXQocG9pbnRlcnNbMF0ucGFnZVgsIHBvaW50ZXJzWzBdLnBhZ2VZKTtcclxuICB9IGVsc2Uge1xyXG4gICAgY29uc3QgeCA9IDAuNSAqIChwb2ludGVyc1swXS5wYWdlWCArIHBvaW50ZXJzWzFdLnBhZ2VYKTtcclxuICAgIGNvbnN0IHkgPSAwLjUgKiAocG9pbnRlcnNbMF0ucGFnZVkgKyBwb2ludGVyc1sxXS5wYWdlWSk7XHJcblxyXG4gICAgcm90YXRlU3RhcnQuc2V0KHgsIHkpO1xyXG4gIH1cclxufVxyXG5cclxuZnVuY3Rpb24gaGFuZGxlVG91Y2hTdGFydFBhbigpIHtcclxuICBpZiAocG9pbnRlcnMubGVuZ3RoID09PSAxKSB7XHJcbiAgICBwYW5TdGFydC5zZXQocG9pbnRlcnNbMF0ucGFnZVgsIHBvaW50ZXJzWzBdLnBhZ2VZKTtcclxuICB9IGVsc2Uge1xyXG4gICAgY29uc3QgeCA9IDAuNSAqIChwb2ludGVyc1swXS5wYWdlWCArIHBvaW50ZXJzWzFdLnBhZ2VYKTtcclxuICAgIGNvbnN0IHkgPSAwLjUgKiAocG9pbnRlcnNbMF0ucGFnZVkgKyBwb2ludGVyc1sxXS5wYWdlWSk7XHJcblxyXG4gICAgcGFuU3RhcnQuc2V0KHgsIHkpO1xyXG4gIH1cclxufVxyXG5cclxuZnVuY3Rpb24gaGFuZGxlVG91Y2hTdGFydERvbGx5KCkge1xyXG4gIGNvbnN0IGR4ID0gcG9pbnRlcnNbMF0ucGFnZVggLSBwb2ludGVyc1sxXS5wYWdlWDtcclxuICBjb25zdCBkeSA9IHBvaW50ZXJzWzBdLnBhZ2VZIC0gcG9pbnRlcnNbMV0ucGFnZVk7XHJcblxyXG4gIGNvbnN0IGRpc3RhbmNlID0gTWF0aC5zcXJ0KGR4ICogZHggKyBkeSAqIGR5KTtcclxuXHJcbiAgZG9sbHlTdGFydC5zZXQoMCwgZGlzdGFuY2UpO1xyXG59XHJcbiJdLCJuYW1lcyI6WyJNZXJzZW5uZVR3aXN0ZXIiLCJkaXN0YW5jZVNjcmF0Y2giLCJsZXJwU2NyYXRjaCIsImFuZ2xlQmV0d2VlblNjcmF0Y2giLCJhbmdsZUJldHdlZW5TY3JhdGNoMiIsIm1vc3RPcnRob2dvbmFsQXhpc1NjcmF0Y2giLCJzY2FsZVNjcmF0Y2gxIiwic2NyYXRjaENvbHVtbiIsInNjYWxlU2NyYXRjaDMiLCJzY2FsZVNjcmF0Y2g0Iiwic2NhbGVTY3JhdGNoNSIsInNjcmF0Y2hUcmFuc3Bvc2VNYXRyaXgiXSwibWFwcGluZ3MiOiJBQUFBO0FBQ0EsSUFBWSxvQkFFWCxDQUFBO0FBRkQsQ0FBQSxVQUFZLG9CQUFvQixFQUFBO0FBQy9CLElBQUEsb0JBQUEsQ0FBQSxNQUFBLENBQUEsR0FBQSxNQUFhLENBQUE7QUFDZCxDQUFDLEVBRlcsb0JBQW9CLEtBQXBCLG9CQUFvQixHQUUvQixFQUFBLENBQUEsQ0FBQSxDQUFBO0FBRUQ7QUFDQSxJQUFZLGVBR1gsQ0FBQTtBQUhELENBQUEsVUFBWSxlQUFlLEVBQUE7QUFDMUIsSUFBQSxlQUFBLENBQUEsVUFBQSxDQUFBLEdBQUEsV0FBc0IsQ0FBQTtBQUN0QixJQUFBLGVBQUEsQ0FBQSxpQkFBQSxDQUFBLEdBQUEsa0JBQW9DLENBQUE7QUFDckMsQ0FBQyxFQUhXLGVBQWUsS0FBZixlQUFlLEdBRzFCLEVBQUEsQ0FBQSxDQUFBLENBQUE7QUFF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QixDQUFBO0FBQ3JCLElBQUEsWUFBQSxDQUFBLFVBQUEsQ0FBQSxHQUFBLFVBQXFCLENBQUE7QUFDckIsSUFBQSxZQUFBLENBQUEsVUFBQSxDQUFBLEdBQUEsVUFBcUIsQ0FBQTtBQUNyQixJQUFBLFlBQUEsQ0FBQSxVQUFBLENBQUEsR0FBQSxVQUFxQixDQUFBO0FBQ3JCLElBQUEsWUFBQSxDQUFBLFVBQUEsQ0FBQSxHQUFBLFVBQXFCLENBQUE7QUFDckIsSUFBQSxZQUFBLENBQUEsVUFBQSxDQUFBLEdBQUEsVUFBcUIsQ0FBQTtBQUNyQixJQUFBLFlBQUEsQ0FBQSxVQUFBLENBQUEsR0FBQSxVQUFxQixDQUFBO0FBQ3JCLElBQUEsWUFBQSxDQUFBLFdBQUEsQ0FBQSxHQUFBLFdBQXVCLENBQUE7QUFDdkIsSUFBQSxZQUFBLENBQUEsV0FBQSxDQUFBLEdBQUEsV0FBdUIsQ0FBQTtBQUN2QixJQUFBLFlBQUEsQ0FBQSxXQUFBLENBQUEsR0FBQSxXQUF1QixDQUFBO0FBQ3ZCLElBQUEsWUFBQSxDQUFBLFdBQUEsQ0FBQSxHQUFBLFdBQXVCLENBQUE7QUFDdkIsSUFBQSxZQUFBLENBQUEsV0FBQSxDQUFBLEdBQUEsV0FBdUIsQ0FBQTtBQUN2QixJQUFBLFlBQUEsQ0FBQSxXQUFBLENBQUEsR0FBQSxXQUF1QixDQUFBO0FBQ3ZCLElBQUEsWUFBQSxDQUFBLFNBQUEsQ0FBQSxHQUFBLFNBQW1CLENBQUE7QUFDbkIsSUFBQSxZQUFBLENBQUEsV0FBQSxDQUFBLEdBQUEsV0FBdUIsQ0FBQTtBQUN2QixJQUFBLFlBQUEsQ0FBQSxXQUFBLENBQUEsR0FBQSxXQUF1QixDQUFBO0FBQ3ZCLElBQUEsWUFBQSxDQUFBLFdBQUEsQ0FBQSxHQUFBLFdBQXVCLENBQUE7QUFDdkIsSUFBQSxZQUFBLENBQUEsUUFBQSxDQUFBLEdBQUEsUUFBaUIsQ0FBQTtBQUNqQixJQUFBLFlBQUEsQ0FBQSxVQUFBLENBQUEsR0FBQSxVQUFxQixDQUFBO0FBQ3JCLElBQUEsWUFBQSxDQUFBLFVBQUEsQ0FBQSxHQUFBLFVBQXFCLENBQUE7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LElBQUksQ0FBQyxDQUFDLEVBQUUsSUFBSSxDQUFDLEdBQUcsRUFBRSxFQUFFO0FBQy9DLEVBQUUsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQyxJQUFJLElBQUksQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUMsS0FBSyxFQUFFLENBQUMsQ0FBQztBQUM3RCxFQUFFLElBQUksQ0FBQyxFQUFFLENBQUMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEdBQUcsVUFBVSxNQUFNLEVBQUUsSUFBSSxVQUFVLEtBQUssRUFBRSxJQUFJLENBQUMsQ0FBQyxHQUFHLFVBQVUsSUFBSSxVQUFVO0FBQ3ZHLElBQUksSUFBSSxDQUFDLEdBQUcsQ0FBQztBQUNiO0FBQ0E7QUFDQTtBQUNBO0FBQ0EsRUFBRSxJQUFJLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUM7QUFDM0I7QUFDQSxFQUFFO0FBQ0YsRUFBQztBQUNEO0FBQ0E7QUFDQTtBQUNBO0FBQ0E7QUFDQSxlQUFlLENBQUMsU0FBUyxDQUFDLGFBQWEsR0FBRyxTQUFTLFFBQVEsRUFBRSxVQUFVLEVBQUU7QUFDekUsQ0FBQyxJQUFJLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ2IsQ0FBQyxJQUFJLENBQUMsU0FBUyxDQUFDLFFBQVEsQ0FBQyxDQUFDO0FBQzFCLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDVixDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUMsQ0FBQyxHQUFHLFVBQVUsQ0FBQyxDQUFDO0FBQy9DLENBQUMsT0FBTyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEVBQUU7QUFDaEIsRUFBRSxJQUFJLENBQUMsR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsSUFBSSxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsS0FBSyxFQUFFLEVBQUM7QUFDOUMsRUFBRSxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxVQUFVLE1BQU0sRUFBRSxJQUFJLE9BQU8sS0FBSyxFQUFFLEtBQUssQ0FBQyxDQUFDLEdBQUcsVUFBVSxJQUFJLE9BQU8sQ0FBQyxDQUFDO0FBQzNHLElBQUksUUFBUSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNwQixFQUFFLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLE1BQU0sQ0FBQyxDQUFDO0FBQ3BCLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQztBQUNYLEVBQUUsSUFBSSxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUMsRUFBRSxFQUFFLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFO0FBQ3pELEVBQUUsSUFBSSxDQUFDLEVBQUUsVUFBVSxFQUFFLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDekIsRUFBRTtBQUNGLENBQUMsS0FBSyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFO0FBQzFCLEVBQUUsSUFBSSxDQUFDLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLEtBQUssRUFBRSxDQUFDLENBQUM7QUFDL0MsRUFBRSxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsR0FBRyxVQUFVLE1BQU0sRUFBRSxJQUFJLFVBQVUsS0FBSyxFQUFFLElBQUksQ0FBQyxDQUFDLEdBQUcsVUFBVSxJQUFJLFVBQVUsQ0FBQztBQUMvRyxJQUFJLENBQUMsQ0FBQztBQUNOLEVBQUUsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsTUFBTSxDQUFDLENBQUM7QUFDcEIsRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUNOLEVBQUUsSUFBSSxDQUFDLEVBQUUsSUFBSSxDQUFDLENBQUMsRUFBRSxFQUFFLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFO0FBQ3pELEVBQUU7QUFDRjtBQUNBLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxVQUFVLENBQUM7QUFDekIsRUFBQztBQUNEO0FBQ0E7QUFDQTtBQUNBLGVBQWUsQ0FBQyxTQUFTLENBQUMsVUFBVSxHQUFHLFdBQVc7QUFDbEQsQ0FBQyxJQUFJLENBQUMsQ0FBQztBQUNQLENBQUMsSUFBSSxLQUFLLEdBQUcsSUFBSSxLQUFLLENBQUMsR0FBRyxFQUFFLElBQUksQ0FBQyxRQUFRLENBQUMsQ0FBQztBQUMzQztBQUNBO0FBQ0EsQ0FBQyxJQUFJLElBQUksQ0FBQyxHQUFHLElBQUksSUFBSSxDQUFDLENBQUMsRUFBRTtBQUN6QixFQUFFLElBQUksRUFBRSxDQUFDO0FBQ1Q7QUFDQSxFQUFFLElBQUksSUFBSSxDQUFDLEdBQUcsSUFBSSxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDMUIsR0FBRyxJQUFJLENBQUMsU0FBUyxDQUFDLElBQUksQ0FBQyxDQUFDO0FBQ3hCO0FBQ0EsRUFBRSxLQUFLLEVBQUUsQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBRTtBQUNuQyxHQUFHLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUM7QUFDckUsR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUMsQ0FBQztBQUNqRSxHQUFHO0FBQ0gsRUFBRSxNQUFNLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxFQUFFLEVBQUUsRUFBRTtBQUMxQixHQUFHLENBQUMsR0FBRyxDQUFDLElBQUksQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsSUFBSSxDQUFDLFVBQVUsR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLENBQUM7QUFDckUsR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUMsRUFBRSxFQUFFLElBQUksQ0FBQyxDQUFDLENBQUMsSUFBSSxDQUFDLENBQUMsQ0FBQyxDQUFDLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDLENBQUM7QUFDMUUsR0FBRztBQUNILEVBQUUsQ0FBQyxHQUFHLENBQUMsSUFBSSxDQUFDLEVBQUUsQ0FBQyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FB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QUcsSUFBSSxDQUFDLENBQUMsRUFDVixDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQztRQUNaLE1BQU0sRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQ2IsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQ1IsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLEVBQ1IsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7O0FBSVYsUUFBQSxNQUFNLEVBQUUsR0FBRyxFQUFFLEdBQUcsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsQ0FBQztBQUNwQyxRQUFBLE1BQU0sRUFBRSxHQUFHLEVBQUUsR0FBRyxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDO0FBQ3BDLFFBQUEsTUFBTSxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFDcEMsUUFBQSxNQUFNLEVBQUUsR0FBRyxDQUFDLEVBQUUsR0FBRyxDQUFDLEdBQUcsRUFBRSxHQUFHLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQyxDQUFDOztRQUlyQyxJQUFJLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUMsRUFBRSxHQUFHLEVBQUUsR0FBRyxDQUFDLEVBQUUsR0FBRyxFQUFFLEdBQUcsQ0FBQyxFQUFFLENBQUM7UUFDbEQsSUFBSSxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxDQUFDLEVBQUUsR0FBRyxFQUFFLEdBQUcsQ0FBQyxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUMsRUFBRSxDQUFDO1FBQ2xELElBQUksQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsQ0FBQyxFQUFFLEdBQUcsRUFBRSxHQUFHLENBQUMsRUFBRSxHQUFHLEVBQUUsR0FBRyxDQUFDLEVBQUUsQ0FBQztBQUVs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QUMsQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3RCLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDdEIsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUN0QixNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3RCLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDdEIsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN0QixRQUFBLE9BQU8sTUFBTSxDQUFDO0tBQ2Q7QUFFRCxJQUFBLE9BQU8sY0FBYyxDQUFDLFVBQXNCLEVBQUUsTUFBZ0IsRUFBQTtRQUM3RCxNQUFNLEVBQUUsR0FBRyxVQUFVLENBQUMsQ0FBQyxHQUFHLFVBQVUsQ0FBQyxDQUFDLENBQUM7UUFDdkMsTUFBTSxFQUFFLEdBQUcsVUFBVSxDQUFDLENBQUMsR0FBRyxVQUFVLENBQUMsQ0FBQyxDQUFDO1FBQ3ZDLE1BQU0sRUFBRSxHQUFHLFVBQVUsQ0FBQyxDQUFDLEdBQUcsVUFBVSxDQUFDLENBQUMsQ0FBQztRQUN2QyxNQUFNLEVBQUUsR0FBRyxVQUFVLENBQUMsQ0FBQyxHQUFHLFVBQVUsQ0FBQyxDQUFDLENBQUM7UUFDdkMsTUFBTSxFQUFFLEdBQUcsVUFBVSxDQUFDLENBQUMsR0FBRyxVQUFVLENBQUMsQ0FBQyxDQUFDO1FBQ3ZDLE1BQU0sRUFBRSxHQUFHLFVBQVUsQ0FBQyxDQUFDLEdBQUcsVUFBVSxDQUFDLENBQUMsQ0FBQztRQUN2QyxNQUFNLEVBQUUsR0FBRyxVQUFVLENBQUMsQ0FBQyxHQUFHLFVBQVUsQ0FBQyxDQUFDLENBQUM7UUFDdkMsTUFBTSxFQUFFLEdBQUcsVUFBVSxDQUFDLENBQUMsR0FBRyxVQUFVLENBQUMsQ0FBQyxDQUFDO1FBQ3ZDLE1BQU0sRUFBRSxHQUFHLFVBQVUsQ0FBQyxDQUFDLEdBQUcsVUFBVSxDQUFDLENBQUMsQ0FBQztRQUN2QyxNQUFNLEVBQUUsR0FBRyxVQUFVLENBQUMsQ0FBQyxHQUFHLFVBQVUsQ0FBQyxDQUFDLENBQUM7UUFFdkMsTUFBTSxHQUFHLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO1FBQzlCLE1BQU0sR0FBRyxHQUFHLEdBQUcsSUFBSSxFQUFFLEdBQUcsRUFBRSxDQUFDLENBQUM7UUFDNUIsTUFBTSxHQUFHLEdBQUcsR0FBRyxJQUFJLEVBQUUsR0FBRyxFQUFFLENBQUMsQ0FBQztRQUU1QixNQUFNLEdBQUcsR0FBRyxHQUFHLElBQUksRUFBRSxHQUFHLEVBQUUsQ0FBQyxDQUFDO1FBQzVCLE1BQU0sR0FBRyxHQUFHLENBQUMsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO1FBQy9CLE1BQU0sR0FBRyxHQUFHLEdBQUcsSUFBSSxFQUFFLEdBQUcsRUFBRSxDQUFDLENBQUM7UUFFNUIsTUFBTSxHQUFHLEdBQUcsR0FBRyxJQUFJLEVBQUUsR0FBRyxFQUFFLENBQUMsQ0FBQztRQUM1QixNQUFNLEdBQUcsR0FBRyxHQUFHLElBQUksRUFBRSxHQUFHLEVBQUUsQ0FBQyxDQUFDO1FBQzVCLE1BQU0sR0FBRyxHQUFHLENBQUMsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxDQUFDO0FBRS9CLFFBQUEsSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsRUFBRTtZQUNyQixPQUFPLElBQUksT0FBTyxDQUFDLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxDQUFDLENBQUM7QUFDaEUsU0FBQTtBQUNELFFBQUEsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNoQixRQUFBLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxH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T0FBTyxPQUFPLENBQUMsTUFBZSxFQUFFLE1BQWdCLEVBQUE7QUFDL0MsUUFBQSxJQUFJLENBQUMsT0FBTyxDQUFDLE1BQU0sQ0FBQyxFQUFFO1lBQ3JCLE9BQU8sQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzNHLFNBQUE7UUFDRCxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3RCLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDdEIsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUN0QixNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3RCLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDdEIsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUN0QixNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3RCLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDdEIsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN0QixRQUFBLE9BQU8sTUFBTSxDQUFDO0tBQ2Q7QUFFRCxJQUFBLE9BQU8sZUFBZSxDQUFDLE1BQWMsRUFBRSxHQUFXLEVBQUE7QUFDakQsUUFBQSxPQUFPLE1BQU0sR0FBRyxDQUFDLEdBQUcsR0FBRyxDQUFDO0tBQ3hCO0FBRUQsSUFBQSxPQUFPLFNBQVMsQ0FBQyxNQUFlLEVBQUUsS0FBYSxFQUFFLE1BQWUsRUFBQTtBQUMvRCxRQUFBLE1BQU0sVUFBVSxHQUFHLEtBQUssR0FBRyxDQUFDLENBQUM7QUFDN0IsUUFBQSxNQUFNLENBQUMsR0FBRyxNQUFNLENBQUMsVUFBVSxDQUFDLENBQUM7UUFDN0IsTUFBTSxDQUFDLEdBQUcsTUFBTSxDQUFDLFVBQVUsR0FBRyxDQUFDLENBQUMsQ0FBQztRQUNqQyxNQUFNLENBQUMsR0FBRyxNQUFNLENBQUMsVUFBVSxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBRWpDLFFBQUEsTUFBTSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDYixRQUFBLE1BQU0sQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ2IsUUFBQSxNQUFNLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNiLFFBQUEsT0FBTyxNQUFNLENBQUM7S0FDZDtJQUVELE9BQU8sU0FBUyxDQUFDLE1BQWUsRUFBRSxLQUFhLEVBQUUsU0FBa0IsRUFBRSxNQUFlLEVBQUE7UUFDbkYsTUFBTSxHQUFHLE9BQU8sQ0FBQyxLQUFLLENBQUMsTUFBTSxFQUFFLE1BQU0sQ0FBQyxDQUFDO0FBQ3ZDLFFBQUEsTUFBTSxVQUFVLEdBQUcsS0FBSyxHQUFHLENBQUMsQ0FBQztBQUM3QixRQUFBLE1BQU0sQ0FBQyxVQUFVLENBQUMsR0FBRyxTQUFTLENBQUMsQ0FBQyxDQUFDO1FBQ2pDLE1BQU0sQ0FBQyxVQUFVLEdBQUcsQ0FBQyxDQUFDLEdBQUcsU0FBUyxDQUFDLENBQUMsQ0FBQztRQUNyQyxNQUFNLENBQUMsVUFBVSxHQUFHLENBQUMsQ0FBQyxHQUFHLFNBQVMsQ0FBQyxDQUFDLENBQUM7QUFDckMsUUFBQSxPQUFPLE1BQU0sQ0FBQztLQUNkO0FBRUQsSUFBQSxPQUFPLE1BQU0sQ0FBQyxNQUFlLEVBQUUsS0FBYSxFQUFFLE1BQWUsRUFBQTtBQUM1RCxRQUFBLE1BQU0sQ0FBQyxHQUFHLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUN4QixNQUFNLENBQUMsR0FBRyxNQUFNLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQyxDQUFDO1FBQzVCLE1BQU0sQ0FBQyxHQUFHLE1BQU0sQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFFNUIsUUFBQSxNQUFNLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNiLFFBQUEsTUFBTSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDYixRQUFBLE1BQU0sQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ2IsUUFBQSxPQUFPLE1BQU0sQ0FBQztLQUNkO0lBRUQsT0FBTyxNQUFNLENBQUMsTUFBZSxFQUFFLEtBQWEsRUFBRSxTQUFrQixFQUFFLE1BQWUsRUFBQTtRQUNoRixNQUFNLEdBQUcsT0FBTyxDQUFDLEtBQUssQ0FBQyxNQUFNLEVBQUUsTUFBTSxDQUFDLENBQUM7QUFDdkMsUUFBQSxNQUFNLENBQUMsS0FBSyxDQUFDLEdBQUcsU0FBUyxDQUFDLENBQUMsQ0FBQztRQUM1QixNQUFNLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQyxHQUFHLFNBQVMsQ0FBQyxDQUFDLENBQUM7UUFDaEMsTUFBTSxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsR0FBRyxTQUFTLENBQUMsQ0FBQyxDQUFDO0FBQ2hDLFFBQUEsT0FBTyxNQUFNLENBQUM7S0FDZDtBQUVELElBQUEsT0FBTyxRQUFRLENBQUMsTUFBZSxFQUFFLEtBQWMsRUFBRSxNQUFlLEVBQUE7UUFDL0QsTUFBTSxhQUFhLEdBQUcsT0FBTyxDQUFDLFFBQVEsQ0FBQyxNQUFNLEVBQUVJLGVBQWEsQ0FBQyxDQUFDO1FBQzlELE1BQU0sV0FBVyxHQUFHLEtBQUssQ0FBQyxDQUFDLEdBQUcsYUFBYSxDQUFDLENBQUMsQ0FBQztRQUM5QyxNQUFNLFdBQVcsR0FBRyxLQUFLLENBQUMsQ0FBQyxHQUFHLGFBQWEsQ0FBQyxDQUFDLENBQUM7UUFDOUMsTUFBTSxXQUFXLEdBQUcsS0FBSyxDQUFDLENBQUMsR0FBRyxhQUFhLENBQUMsQ0FBQyxDQUFDO1FBRTlDLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsV0FBVyxDQUFDO1FBQ3BDLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsV0FBVyxDQUFDO1FBQ3BDLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsV0FBVyxDQUFDO1FBQ3BDLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsV0FBVyxDQUFDO1FBQ3BDLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsV0FBVyxDQUFDO1FBQ3BDLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsV0FBVyxDQUFDO1FBQ3BDLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsV0FBVyxDQUFDO1FBQ3BDLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsV0FBVyxDQUFDO1FBQ3BDLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsV0FBVyxDQUFDO0FBRXBDLFFBQUEsT0FBTyxNQUFNLENBQUM7S0FDZDtBQUVELElBQUEsT0FBTyxRQUFRLENBQUMsTUFBZSxFQUFFLE1BQWUsRUFBQTtBQUMvQyxRQUFBLE1BQU0sQ0FBQyxDQUFDLEdBQUcsT0FBTyxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsWUFBWSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFQyxlQUFhLENBQUMsQ0FBQyxDQUFDO0FBQ25HLFFBQUEsTUFBTSxDQUFDLENBQUMsR0FBRyxPQUFPLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxZQUFZLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUVBLGVBQWEsQ0FBQyxDQUFDLENBQUM7QUFDbkcsUUFBQSxNQUFNLENBQUMsQ0FBQyxHQUFHLE9BQU8sQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLFlBQVksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRUEsZUFBYSxDQUFDLENBQUMsQ0FBQztBQUNuRyxRQUFBLE9BQU8sTUFBTSxDQUFDO0tBQ2Q7SUFFRCxPQUFPLGVBQWUsQ0FBQyxNQUFlLEVBQUE7QUFDckMsUUFBQSxPQUFPLENBQUMsUUFBUSxDQUFDLE1BQU0sRUFBRUMsZUFBYSxDQUFDLENBQUM7QUFDeEMsUUFBQSxPQUFPLE9BQU8sQ0FBQyxnQkFBZ0IsQ0FBQ0EsZUFBYSxDQUFDLENBQUM7S0FDL0M7QUFFRCxJQUFBLE9BQU8sV0FBVyxDQUFDLE1BQWUsRUFBRSxRQUFpQixFQUFFLE1BQWUsRUFBQTtRQUNyRSxNQUFNLEtBQUssR0FBRyxPQUFPLENBQUMsUUFBUSxDQUFDLE1BQU0sRUFBRUMsZUFBYSxDQUFDLENBQUM7QUFFdEQsUUFBQSxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsUUFBUSxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUM7QUFDbEMsUUFBQSxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsUUFBUSxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUM7QUFDbEMsUUFBQSxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsUUFBUSxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUM7QUFDbEMsUUFBQSxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsUUFBUSxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUM7QUFDbEMsUUFBQSxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsUUFBUSxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUM7QUFDbEMsUUFBQSxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsUUFBUSxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUM7QUFDbEMsUUFBQSxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsUUFBUSxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUM7QUFDbEMsUUFBQSxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsUUFBUSxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUM7QUFDbEMsUUFBQSxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsUUFBUSxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUM7QUFFbEMsUUFBQSxPQUFPLE1BQU0sQ0FBQztLQUNkO0FBRUQsSUFBQSxPQUFPLFdBQVcsQ0FBQyxNQUFlLEVBQUUsTUFBZSxFQUFBO1FBQ2xELE1BQU0sS0FBSyxHQUFHLE9BQU8sQ0FBQyxRQUFRLENBQUMsTUFBTSxFQUFFQyxlQUFhLENBQUMsQ0FBQztBQUV0RCxRQUFBLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQztBQUNoQyxRQUFBLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQztBQUNoQyxRQUFBLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQztBQUNoQyxRQUFBLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQztBQUNoQyxRQUFBLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQztBQUNoQyxRQUFBLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQztBQUNoQyxRQUFBLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQztBQUNoQyxRQUFBLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQztBQUNoQyxRQUFBLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQztBQUVoQyxRQUFBLE9BQU8sTUFBTSxDQUFDO0tBQ2Q7QUFFRCxJQUFBLE9BQU8sUUFBUSxDQUFDLElBQWEsRUFBRSxLQUFjLEVBQUUsTUFBZSxFQUFBO0FBQzdELFFBQUEsTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDakYsUUFBQSxNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNqRixRQUFBLE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBRWpGLFFBQUEsTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDakYsUUFBQSxNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNqRixRQUFBLE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBRWpGLFFBQUEsTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDakYsUUFBQSxNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNqRixRQUFBLE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBRWpGLFFBQUEsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLFdBQVcsQ0FBQztBQUN4QixRQUFBLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxXQUFXLENBQUM7QUFDeEIsUUFBQSxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsV0FBVyxDQUFDO0FBQ3hCLFFBQUEsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLFdBQVcsQ0FBQztBQUN4QixRQUFBLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxXQUFXLENBQUM7QUFDeEIsUUFBQSxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsV0FBVyxDQUFDO0FBQ3hCLFFBQUEsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLFdBQVcsQ0FBQztBQUN4QixRQUFBLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxXQUFXLENBQUM7QUFDeEIsUUFBQSxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsV0FBVyxDQUFDO0FBQ3hCLFFBQUEsT0FBTyxNQUFNLENBQUM7S0FDZDtBQUVELElBQUEsT0FBTyxHQUFHLENBQUMsSUFBYSxFQUFFLEtBQWMsRUFBRSxNQUFlLEVBQUE7QUFDeEQsUUFBQSxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUMvQixRQUFBLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQy9CLFFBQUEsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDL0IsUUFBQSxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUMvQixRQUFBLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQy9CLFFBQUEsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDL0IsUUFBQSxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUMvQixRQUFBLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQy9CLFFBQUEsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDL0IsUUFBQSxPQUFPLE1BQU0sQ0FBQztLQUNkO0FBRUQsSUFBQSxPQUFPLFFBQVEsQ0FBQyxJQUFhLEVBQUUsS0FBYyxFQUFFLE1BQWUsRUFBQTtBQUM3RCxRQUFBLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQy9CLFFBQUEsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDL0IsUUFBQSxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUMvQixRQUFBLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQy9CLFFBQUEsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDL0IsUUFBQSxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUMvQixRQUFBLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQy9CLFFBQUEsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDL0IsUUFBQSxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUMvQixRQUFBLE9BQU8sTUFBTSxDQUFDO0tBQ2Q7QUFFRCxJQUFBLE9BQU8sZ0JBQWdCLENBQUMsTUFBZSxFQUFFLFNBQWtCLEVBQUUsTUFBZSxFQUFBO0FBQzNFLFFBQUEsTUFBTSxFQUFFLEdBQUcsU0FBUyxDQUFDLENBQUMsQ0FBQztBQUN2QixRQUFBLE1BQU0sRUFBRSxHQUFHLFNBQVMsQ0FBQyxDQUFDLENBQUM7QUFDdkIsUUFBQSxNQUFNLEVBQUUsR0FBRyxTQUFTLENBQUMsQ0FBQyxDQUFDO1FBRXZCLE1BQU0sQ0FBQyxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDO1FBQzNELE1BQU0sQ0FBQyxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDO1FBQzNELE1BQU0sQ0FBQyxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDO0FBRTNELFFBQUEsTUFBTSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDYixRQUFBLE1BQU0sQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ2IsUUFBQSxNQUFNLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNiLFFBQUEsT0FBTyxNQUFNLENBQUM7S0FDZDtBQUVELElBQUEsT0FBTyxnQkFBZ0IsQ0FBQyxNQUFlLEVBQUUsTUFBYyxFQUFFLE1BQWUsRUFBQTtRQUN2RSxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQztRQUMvQixNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQztRQUMvQixNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQztRQUMvQixNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQztRQUMvQixNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQztRQUMvQixNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQztRQUMvQixNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQztRQUMvQixNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQztRQUMvQixNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQztBQUMvQixRQUFBLE9BQU8sTUFBTSxDQUFDO0tBQ2Q7QUFFRCxJQUFBLE9BQU8sZUFBZSxDQUFDLE1BQWUsRUFBRSxLQUFjLEVBQUUsTUFBZSxFQUFBO0FBQ3RFLFFBQUEsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDO0FBQ2hDLFFBQUEsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDO0FBQ2hDLFFBQUEsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDO0FBQ2hDLFFBQUEsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDO0FBQ2hDLFFBQUEsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDO0FBQ2hDLFFBQUEsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDO0FBQ2hDLFFBQUEsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDO0FBQ2hDLFFBQUEsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDO0FBQ2hDLFFBQUEsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDO0FBRWhDLFFBQUEsT0FBTyxNQUFNLENBQUM7S0FDZDtBQUVELElBQUEsT0FBTyxNQUFNLENBQUMsTUFBZSxFQUFFLE1BQWUsRUFBQTtRQUM3QyxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDdkIsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3ZCLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUN2QixNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDdkIsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3ZCLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUN2QixNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDdkIsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3ZCLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN2QixRQUFBLE9BQU8sTUFBTSxDQUFDO0tBQ2Q7QUFFRCxJQUFBLE9BQU8sU0FBUyxDQUFDLE1BQWUsRUFBRSxNQUFlLEVBQUE7QUFDaEQsUUFBQSxNQUFNLFdBQVcsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDOUIsUUFBQSxNQUFNLFdBQVcsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDOUIsUUFBQSxNQUFNLFdBQVcsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDOUIsUUFBQSxNQUFNLFdBQVcsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDOUIsUUFBQSxNQUFNLFdBQVcsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDOUIsUUFBQSxNQUFNLFdBQVcsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDOUIsUUFBQSxNQUFNLFdBQVcsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDOUIsUUFBQSxNQUFNLFdBQVcsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDOUIsUUFBQSxNQUFNLFdBQVcsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFFOUIsUUFBQSxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsV0FBVyxDQUFDO0FBQ3hCLFFBQUEsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLFdBQVcsQ0FBQztBQUN4QixRQUFBLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxXQUFXLENBQUM7QUFDeEIsUUFBQSxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsV0FBVyxDQUFDO0FBQ3hCLFFBQUEsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLFdBQVcsQ0FBQztBQUN4QixRQUFBLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxXQUFXLENBQUM7QUFDeEIsUUFBQSxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsV0FBVyxDQUFDO0FBQ3hCLFFBQUEsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLFdBQVcsQ0FBQztBQUN4QixRQUFBLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxXQUFXLENBQUM7QUFDeEIsUUFBQSxPQUFPLE1BQU0sQ0FBQztLQUNkO0FBRUQsSUFBQSxPQUFPLEdBQUcsQ0FBQyxNQUFlLEVBQUUsTUFBZSxFQUFBO0FBQzFDLFFBQUEsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDaEMsUUFBQSxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNoQyxRQUFBLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2hDLFFBQUEsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDaEMsUUFBQSxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNoQyxRQUFBLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2hDLFFBQUEsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDaEMsUUFBQSxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNoQyxRQUFBLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBRWhDLFFBQUEsT0FBTyxNQUFNLENBQUM7S0FDZDtJQUVELE9BQU8sV0FBVyxDQUFDLE1BQWUsRUFBQTtBQUNqQyxRQUFBLE1BQU0sR0FBRyxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN0QixRQUFBLE1BQU0sR0FBRyxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN0QixRQUFBLE1BQU0sR0FBRyxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN0QixRQUFBLE1BQU0sR0FBRyxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN0QixRQUFBLE1BQU0sR0FBRyxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN0QixRQUFBLE1BQU0sR0FBRyxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN0QixRQUFBLE1BQU0sR0FBRyxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN0QixRQUFBLE1BQU0sR0FBRyxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN0QixRQUFBLE1BQU0sR0FBRyxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUV0QixRQUFBLE9BQU8sR0FBRyxJQUFJLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQyxHQUFHLEdBQUcsSUFBSSxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUMsR0FBRyxHQUFHLElBQUksR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDLENBQUM7S0FDckc7QUFFRCxJQUFBLE9BQU8sT0FBTyxDQUFDLE1BQWUsRUFBRSxNQUFlLEVBQUE7QUFDOUMsUUFBQSxNQUFNLEdBQUcsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDdEIsUUFBQSxNQUFNLEdBQUcsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDdEIsUUFBQSxNQUFNLEdBQUcsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDdEIsUUFBQSxNQUFNLEdBQUcsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDdEIsUUFBQSxNQUFNLEdBQUcsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDdEIsUUFBQSxNQUFNLEdBQUcsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDdEIsUUFBQSxNQUFNLEdBQUcsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDdEIsUUFBQSxNQUFNLEdBQUcsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDdEIsUUFBQSxNQUFNLEdBQUcsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFFdEIsTUFBTSxXQUFXLEdBQUcsT0FBTyxDQUFDLFdBQVcsQ0FBQyxNQUFNLENBQUMsQ0FBQzs7UUFHaEQsSUFBSSxJQUFJLENBQUMsR0FBRyxDQUFDLFdBQVcsQ0FBQyxJQUFJLEtBQUssQ0FBQyxTQUFTLEVBQUU7QUFDN0MsWUFBQSxNQUFNLElBQUksS0FBSyxDQUFDLDBCQUEwQixDQUFDLENBQUM7QUFDNUMsU0FBQTs7UUFHRCxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDO1FBQ2xDLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUM7UUFDbEMsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQztRQUNsQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDO1FBQ2xDLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUM7UUFDbEMsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsQ0FBQztRQUNsQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLEdBQUcsR0FBRyxDQUFDO1FBQ2xDLE1BQU0sQ0FBQyxDQUFD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ZSxFQUFFLE1BQWUsRUFBQTtBQUN6RSxRQUFBLE1BQU0sQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN2QyxRQUFBLE1BQU0sQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN2QyxRQUFBLE1BQU0sQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN2QyxRQUFBLE1BQU0sQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUV2QyxRQUFBLE9BQU8sTUFBTSxDQUFDO0tBQ2Q7SUFFRCxPQUFPLEtBQUssQ0FBQyxLQUFjLEVBQUUsR0FBWSxFQUFFLEdBQVksRUFBRSxNQUFlLEVBQUE7QUFDdkUsUUFBQSxNQUFNLENBQUMsR0FBRyxLQUFLLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDN0MsUUFBQSxNQUFNLENBQUMsR0FBRyxLQUFLLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDN0MsUUFBQSxNQUFNLENBQUMsR0FBRyxLQUFLLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDN0MsUUFBQSxNQUFNLENBQUMsR0FBRyxLQUFLLENBQUMsS0FBSyxDQUFDLEtBQUssQ0FBQyxDQUFDLEVBQUUsR0FBRyxDQUFD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QyxDQUFDLEVBQ1osRUFBRSxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUM7QUFFZCxRQUFBLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsSUFBSSxFQUFFLEdBQUcsRUFBRSxDQUFDLElBQUksRUFBRSxDQUFDO1FBQzdCLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEVBQUUsR0FBRyxFQUFFLElBQUksRUFBRSxDQUFDO1FBQ3ZCLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEVBQUUsR0FBRyxFQUFFLElBQUksRUFBRSxDQUFDO0FBQ3ZCLFFBQUEsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztRQUVWLEVBQUUsQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEVBQUUsR0FBRyxFQUFFLElBQUksRUFBRSxDQUFDO0FBQ3ZCLFFBQUEsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxJQUFJLEVBQUUsR0FBRyxFQUFFLENBQUMsSUFBSSxFQUFFLENBQUM7UUFDN0IsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsRUFBRSxHQUFHLEVBQUUsSUFBSSxFQUFFLENBQUM7QUFDdkIsUUFBQSxFQUFFLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBRVYsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsRUFBRSxHQUFHLEVBQUUsSUFBSSxFQUFFLENBQUM7UUFDdkIsRUFBRSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsRUFBRSxHQUFHLEVBQUUsSUFBSSxFQUFFLENBQUM7QUFDdkIsUUFBQSxFQUFFLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLElBQUksRUFBRSxHQUFHLEVBQUUsQ0FBQyxJQUFJLEVBQUUsQ0FBQztBQUM5QixRQUFBLEVBQUUsQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUM7QUFFWCxRQUFBLEVBQUUsQ0FBQyxFQUFFLENBQUMsR0FBRyxRQUFRLENBQUMsQ0FBQyxDQUFDO0FBQ3BCLFFBQUEsRUFB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QUNWLE1BQU0sQ0FBQyxFQUFFLENBQUMsRUFDVixNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQ1QsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUNULE1BQU0sQ0FBQyxFQUFFLENBQUMsRUFDVixNQUFNLENBQUMsRUFBRSxDQUFDLENBQ1YsQ0FBQztBQUNGLFNBQUE7UUFDRCxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3RCLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDdEIsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUN0QixNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3RCLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDdEIsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUN0QixNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3RCLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDdEIsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUN0QixNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3RCLE1BQU0sQ0FBQyxFQUFFLENBQUMsR0FBRyxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDeEIsTUFBTSxDQUFDLEVBQUUsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUN4QixNQUFNLENBQUMsRUFBRSxDQUFDLEdBQUcsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ3hCLE1BQU0sQ0FBQyxFQUFFLENBQUMsR0FBRyxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDeEIsTUFBTSxDQUFDLEVBQUUsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUN4QixNQUFNLENBQUMsRUFBRSxDQUFDLEdBQUcsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ3hCLFFBQUEsT0FBTyxNQUFNLENBQUM7S0FDZDtBQUVELElBQUEsT0FBTyxvQkFBb0IsQ0FBQyxNQUFnQixFQUFFLE1BQWUsRUFBQTtRQUM1RCxPQUFPLE9BQU8sQ0FBQyxLQUFLLENBQUMsTUFBTSxFQUFFLE1BQU0sQ0FBQyxDQUFDO0tBQ3JDO0FBRUQsSUFBQSxPQUFPLGlCQUFpQixDQUFDLE1BQWdCLEVBQUUsTUFBZSxFQUFBO0FBQ3pELFFBQUEsSUFBSSxDQUFDLE9BQU8sQ0FBQyxNQUFNLENBQUMsRUFBRTtBQUNyQixZQUFBLE9BQU8sSUFBSSxPQUFPLENBQ2pCLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFDVCxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQ1QsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUNULE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFDVCxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQ1QsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUNULE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFDVCxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQ1QsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUNULE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFDVCxNQUFNLENBQUMsRUFBRSxDQUFDLEVBQ1YsTUFBTSxDQUFDLEVBQUUsQ0FBQyxFQUNWLE1BQU0sQ0FBQyxFQUFFLENBQUMsRUFDVixNQUFNLENBQUMsRUFBRSxDQUFDLEVBQ1YsTUFBTSxDQUFDLEVBQUUsQ0FBQyxFQUNWLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FDVixDQUFDO0FBQ0YsU0FBQTtRQUNELE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDdEIsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUN0QixNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3RCLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDdkIsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUN0QixNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3RCLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDdEIsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUN2QixNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3RCLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDdEIsTUFBTSxDQUFDLEVBQUUsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUN4QixNQUFNLENBQUMsRUFBRSxDQUFDLEdBQUcsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ3hCLE1BQU0sQ0FBQyxFQUFFLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDdkIsTUFBTSxDQUFDLEVBQUUsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUN2QixNQUFNLENBQUMsRUFBRSxDQUFDLEdBQUcsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ3hCLE1BQU0sQ0FBQyxFQUFFLENBQUMsR0FBRyxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDeEIsUUFBQSxPQUFPLE1BQU0sQ0FBQztLQUNkO0FBRUQsSUFBQSxPQUFPLHVCQUF1QixDQUFDLFFBQWlCLEVBQUUsV0FBb0IsRUFBRSxNQUFl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TUFBTSxFQUFFLEdBQUcsUUFBUSxDQUFDLENBQUMsR0FBRyxRQUFRLENBQUMsQ0FBQyxDQUFDO1FBQ25DLE1BQU0sRUFBRSxHQUFHLFFBQVEsQ0FBQyxDQUFDLEdBQUcsUUFBUSxDQUFDLENBQUMsQ0FBQztRQUNuQyxNQUFNLEVBQUUsR0FBRyxRQUFRLENBQUMsQ0FBQyxHQUFHLFFBQVEsQ0FBQyxDQUFDLENBQUM7UUFDbkMsTUFBTSxFQUFFLEdBQUcsUUFBUSxDQUFDLENBQUMsR0FBRyxRQUFRLENBQUMsQ0FBQyxDQUFDO1FBQ25DLE1BQU0sRUFBRSxHQUFHLFFBQVEsQ0FBQyxDQUFDLEdBQUcsUUFBUSxDQUFDLENBQUMsQ0FBQztRQUNuQyxNQUFNLEVBQUUsR0FBRyxRQUFRLENBQUMsQ0FBQyxHQUFHLFFBQVEsQ0FBQyxDQUFDLENBQUM7UUFDbkMsTUFBTSxFQUFFLEdBQUcsUUFBUSxDQUFDLENBQUMsR0FBRyxRQUFRLENBQUMsQ0FBQyxDQUFDO1FBQ25DLE1BQU0sRUFBRSxHQUFHLFFBQVEsQ0FBQyxDQUFDLEdBQUcsUUFBUSxDQUFDLENBQUMsQ0FBQztRQUVuQyxNQUFNLEdBQUcsR0FBRyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUM7UUFDOUIsTUFBTSxHQUFHLEdBQUcsR0FBRyxJQUFJLEVBQUUsR0FBRyxFQUFFLENBQUMsQ0FBQztRQUM1QixNQUFNLEdBQUcsR0FBRyxHQUFHLElBQUksRUFBRSxHQUFHLEVBQUUsQ0FBQyxDQUFDO1FBRTVCLE1BQU0sR0FBRyxHQUFHLEdBQUcsSUFBSSxFQUFFLEdBQUcsRUFBRSxDQUFDLENBQUM7UUFDNUIsTUFBTSxHQUFHLEdBQUcsQ0FBQyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUM7UUFDL0IsTUFBTSxHQUFHLEdBQUcsR0FBRyxJQUFJLEVBQUUsR0FBRyxFQUFFLENBQUMsQ0FBQztRQUU1QixNQUFNLEdBQUcsR0FBRyxHQUFHLElBQUksRUFBRSxHQUFHLEVBQUUsQ0FBQyxDQUFDO1FBQzVCLE1BQU0sR0FBRyxHQUFHLEdBQUcsSUFBSSxFQUFFLEdBQUcsRUFBRSxDQUFDLENBQUM7UUFDNUIsTUFBTSxHQUFHLEdBQUcsQ0FBQyxFQUFFLEdBQUcsRUFBRSxHQUFHLEVBQUUsR0FBRyxFQUFFLENBQUM7QUFFL0IsUUFBQSxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLE1BQU0sQ0FBQztBQUN6QixRQUFBLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsTUFBTSxDQUFDO0FBQ3pCLFFBQUEsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxNQUFNLENBQUM7QUFDekIsUUFBQSxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2hCLFFBQUEsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxNQUFNLENBQUM7QUFDekIsUUFBQSxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxHQUFHLE1BQU0sQ0FBQztBQUN6QixRQUFBLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsTUFBTSxDQUFDO0FBQ3pCLFFBQUEsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNoQixRQUFBLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLEdBQUcsTUFBTSxDQUFDO0FBQ3pCLFFBQUEsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsR0FBRyxNQUFNLENBQUM7QUFDekIsUUFBQSxNQUFNLENBQUMsRUFBRSxDQUFDLEdBQUcsR0FBRyxHQUFHLE1BQU0sQ0FBQztBQUMxQixRQUFBLE1BQU0sQ0FBQyxFQUFFLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDakIsUUFBQSxNQUFNLENBQUMsRUFBRSxDQUFDLEdBQUcsV0FBVyxDQUFDLENBQUMsQ0FBQztBQUMzQixRQUFBLE1BQU0sQ0FBQyxFQUFFLENBQUMsR0FBRyxXQUFXLENBQUMsQ0FBQyxDQUFDO0FBQzNCLFFBQUEsTUFBTSxDQUFDLEVBQUUsQ0FBQyxHQUFH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LEdBQUcsSUFBSSxLQUFLLEtBQUssR0FBRyxJQUFJLENBQUMsQ0FBQztBQUN0QyxRQUFBLE1BQU0sQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLElBQUksS0FBSyxHQUFHLEdBQUcsTUFBTSxDQUFDLENBQUM7QUFFdEMsUUFBQSxNQUFNLENBQUMsR0FBRyxDQUFDLEtBQUssR0FBRyxJQUFJLEtBQUssS0FBSyxHQUFHLElBQUksQ0FBQyxDQUFDO0FBQzFDLFFBQUEsTUFBTSxDQUFDLEdBQUcsQ0FBQyxHQUFHLEdBQUcsTUFBTSxLQUFLLEdBQUcsR0FBRyxNQUFNLENBQUMsQ0FBQztRQUMxQyxNQUFNLENBQUMsR0FBRyxDQUFDLEdBQUcsSUFBSSxHQUFHLEdBQUcsSUFBSSxDQUFDLENBQUM7QUFDOUIsUUFBQSxNQUFNLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxHQUFHLElBQUksS0FBSyxHQUFHLEdBQUcsSUFBSSxDQUFDLENBQUM7QUFFdkMsUUFBQSxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ2QsUUFBQSxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ2QsUUFBQSxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ2QsUUFBQSxNQUFNLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ2YsUUFBQSxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ2QsUUFBQSxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ2QsUUFBQSxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ2QsUUFBQSxNQUFNLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ2YsUUFBQSxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ2QsUUFBQSxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ2QsUUFBQSxNQUFNLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ2YsUUFBQSxNQUFNLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ2YsUUFBQSxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ2QsUUFBQSxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ2QsUUFBQSxNQUFNLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDaEIsUUFBQSxNQUFNLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ2YsUUFBQSxPQUFPLE1BQU0sQ0FBQztLQUNkO0FBQ0QsSUFBQSxPQUFPLGdCQUFnQixDQUN0QixJQUFZLEVBQ1osS0FBYSxFQUNiLEdBQVcsRUFDWCxNQUFjLEVBQ2QsSUFBWSxFQUNaLEdBQVcsRUFBQTtBQUVYLFFBQUEsTUFBTSxNQUFNLEdBQUcsSUFBSSxPQUFPLEVBQUUsQ0FBQztRQUM3QixNQUFNLENBQUMsR0FBRyxHQUFHLElBQUksS0FBSyxHQUFHLElBQUksQ0FBQyxDQUFDO1FBQy9CLE1BQU0sQ0FBQyxHQUFHLEdBQUcsSUFBSSxHQUFHLEdBQUcsTUFBTSxDQUFDLENBQUM7UUFDL0IsTUFBTSxDQUFDLEdBQUcsR0FBRyxJQUFJLEdBQUcsR0FBRyxJQUFJLENBQUMsQ0FBQztRQUU3QixNQUFNLENBQUMsR0FBRyxDQUFDLEtBQUssR0FBRyxJQUFJLElBQUksQ0FBQyxDQUFDO1FBQzdCLE1BQU0sQ0FBQyxHQUFHLENBQUMsR0FBRyxHQUFHLE1BQU0sSUFBSSxDQUFDLENBQUM7QUFDN0IsUUFBQSxNQUFNLENBQUMsR0FBRyxJQUFJLEdBQUcsQ0FBQyxDQUFDO0FBRW5CLFFBQUEsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDbEIsUUFBQSxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ2QsUUFBQSxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ2QsUUFBQSxNQUFNLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLENBQUM7QUFDaEIsUUFBQSxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ2QsUUFBQSxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNsQixRQUFBLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDZCxRQUFBLE1BQU0sQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLENBQUMsQ0FBQztBQUNoQixRQUFBLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDZCxRQUFBLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7UUFDZCxNQUFNLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ3BCLFFBQUEsTUFBTSxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQyxDQUFDO0FBQ2hCLFFBQUEsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNkLFFBQUEsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNkLFFBQUEsTUFBTSxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNmLFFBQUEsTUFBTSxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNmLFFBQUEsT0FBTyxNQUFNLENBQUM7S0FDZDtJQUNELE9BQU8sR0FBQTtRQUNOLE1BQU0sTUFBTSxHQUFHLEVBQUUsQ0FBQztBQUNsQixRQUFBLE9BQU8sQ0FBQyxPQUFPLENBQUMsSUFBSSxFQUFFLE1BQU0sQ0FBQyxDQUFDO0FBQzlCLFFBQUEsT0FBTyxNQUFNLENBQUM7S0FDZDtBQUNEOzs7Ozs7Ozs7Ozs7O0FBYUc7QUFDSCxJQUFBLE9BQU8sT0FBTyxDQUFDLE1BQStCLEVBQUUsTUFBcUIsRUFBQTtBQUNwRSxRQUFBLElBQUksQ0FBQyxPQUFPLENBQUMsTUFBTSxDQUFDLEVBQUU7WUFDckIsT0FBTztnQkFDTixNQUFNLENBQUMsQ0FBQyxDQUFDO2dCQUNULE1BQU0sQ0FBQyxDQUFDLENBQUM7Z0JBQ1QsTUFBTSxDQUFDLENBQUMsQ0FBQztnQkFDVCxNQUFNLENBQUMsQ0FBQyxDQUFDO2dCQUNULE1BQU0sQ0FBQyxDQUFDLENBQUM7Z0JBQ1QsTUFBTSxDQUFDLENBQUMsQ0FBQztnQkFDVCxNQUFNLENBQUMsQ0FBQyxDQUFDO2dCQUNULE1BQU0sQ0FBQyxDQUFDLENBQUM7Z0JBQ1QsTUFBTSxDQUFDLENBQUMsQ0FBQztnQkFDVCxNQUFNLENBQUMsQ0FBQyxDQUFDO2dCQUNULE1BQU0sQ0FBQyxFQUFFLENBQUM7Z0JBQ1YsTUFBTSxDQUFDLEVBQUUsQ0FBQztnQkFDVixNQUFNLENBQUMsRUFBRSxDQUFDO2dCQUNWLE1BQU0sQ0FBQyxFQUFFLENBQUM7Z0JBQ1YsTUFBTSxDQUFDLEVBQUUsQ0FBQztnQkFDVixNQUFNLENBQUMsRUFBRSxDQUFDO2FBQ1YsQ0FBQztBQUNGLFNBQUE7UUFDRCxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3RCLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDdEIsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUN0QixNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3RCLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDdEIsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUN0QixNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3RCLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDdEIsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUN0QixNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3RCLE1BQU0sQ0FBQyxFQUFFLENBQUMsR0FBRyxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDeEIsTUFBTSxDQUFDLEVBQUUsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUN4QixNQUFNLENBQUMsRUFBRSxDQUFDLEdBQUcsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ3hCLE1BQU0sQ0FBQyxFQUFFLENBQUMsR0FBRyxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDeEIsTUFBTSxDQUFDLEVBQUUsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUN4QixNQUFNLENBQUMsRUFBRSxDQUFDLEdBQUcsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ3hCLFFBQUEsT0FBTyxNQUFNLENBQUM7S0FDZDtBQUVELElBQUEsT0FBTyxlQUFlLENBQUMsTUFBYyxFQUFFLEdBQVcsRUFBQTtBQUNqRCxRQUFBLE9BQU8sTUFBTSxHQUFHLENBQUMsR0FBRyxHQUFHLENBQUM7S0FDeEI7QUFFRCxJQUFBLE9BQU8sU0FBUyxDQUFDLE1BQWUsRUFBRSxLQUFhLEVBQUUsTUFBZSxFQUFBO0FBQy9ELFFBQUEsTUFBTSxVQUFVLEdBQUcsS0FBSyxHQUFHLENBQUMsQ0FBQztBQUM3QixRQUFBLE1BQU0sQ0FBQyxHQUFHLE1BQU0sQ0FBQyxVQUFVLENBQUMsQ0FBQztRQUM3QixNQUFNLENBQUMsR0FBRyxNQUFNLENBQUMsVUFBVSxHQUFHLENBQUMsQ0FBQyxDQUFDO1FBQ2pDLE1BQU0sQ0FBQyxHQUFHLE1BQU0sQ0FBQyxVQUFVLEdBQUcsQ0FBQyxDQUFDLENBQUM7UUFDakMsTUFBTSxDQUFDLEdBQUcsTUFBTSxDQUFDLFVBQVUsR0FBRyxDQUFDLENBQUMsQ0FBQztBQUVqQyxRQUFBLE1BQU0sQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ2IsUUFBQSxNQUFNLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNiLFFBQUEsTUFBTSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDYixRQUFBLE1BQU0sQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ2IsUUFBQSxPQUFPLE1BQU0sQ0FBQztLQUNkO0lBRUQsT0FBTyxTQUFTLENBQUMsTUFBZSxFQUFFLEtBQWEsRUFBRSxTQUFrQixFQUFFLE1BQWUsRUFBQTtRQUNuRixNQUFNLEdBQUcsT0FBTyxDQUFDLEtBQUssQ0FBQyxNQUFNLEVBQUUsTUFBTSxDQUFDLENBQUM7QUFDdkMsUUFBQSxNQUFNLFVBQVUsR0FBRyxLQUFLLEdBQUcsQ0FBQyxDQUFDO0FBQzdCLFFBQUEsTUFBTSxDQUFDLFVBQVUsQ0FBQyxHQUFHLFNBQVMsQ0FBQyxDQUFDLENBQUM7UUFDakMsTUFBTSxDQUFDLFVBQVUsR0FBRyxDQUFDLENBQUMsR0FBRyxTQUFTLENBQUMsQ0FBQyxDQUFDO1FBQ3JDLE1BQU0sQ0FBQyxVQUFVLEdBQUcsQ0FBQyxDQUFDLEdBQUcsU0FBUyxDQUFDLENBQUMsQ0FBQztRQUNyQyxNQUFNLENBQUMsVUFBVSxHQUFHLENBQUMsQ0FBQyxHQUFHLFNBQVMsQ0FBQyxDQUFDLENBQUM7QUFDckMsUUFBQSxPQUFPLE1BQU0sQ0FBQztLQUNkO0FBRUQsSUFBQSxPQUFPLE1BQU0sQ0FBQyxNQUFlLEVBQUUsS0FBYSxFQUFFLE1BQWUsRUFBQTtBQUM1RCxRQUFBLE1BQU0sQ0FBQyxHQUFHLE1BQU0sQ0FBQyxLQUFLLENBQUMsQ0FBQztRQUN4QixNQUFNLENBQUMsR0FBRyxNQUFNLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQyxDQUFDO1FBQzVCLE1BQU0sQ0FBQyxHQUFHLE1BQU0sQ0FBQyxLQUFLLEdBQUcsQ0FBQyxDQUFDLENBQUM7UUFDNUIsTUFBTSxDQUFDLEdBQUcsTUFBTSxDQUFDLEtBQUssR0FBRyxFQUFFLENBQUMsQ0FBQztBQUU3QixRQUFBLE1BQU0sQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ2IsUUFBQSxNQUFNLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNiLFFBQUEsTUFBTSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDYixRQUFBLE1BQU0sQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ2IsUUFBQSxPQUFPLE1BQU0sQ0FBQztLQUNkO0lBRUQsT0FBTyxNQUFNLENBQUMsTUFBZSxFQUFFLEtBQWEsRUFBRSxTQUFrQixFQUFFLE1BQWUsRUFBQTtRQUNoRixNQUFNLEdBQUcsT0FBTyxDQUFDLEtBQUssQ0FBQyxNQUFNLEVBQUUsTUFBTSxDQUFDLENBQUM7QUFDdkMsUUFBQSxNQUFNLENBQUMsS0FBSyxDQUFDLEdBQUcsU0FBUyxDQUFDLENBQUMsQ0FBQztRQUM1QixNQUFNLENBQUMsS0FBSyxHQUFHLENBQUMsQ0FBQyxHQUFHLFNBQVMsQ0FBQyxDQUFDLENBQUM7UUFDaEMsTUFBTSxDQUFDLEtBQUssR0FBRyxDQUFDLENBQUMsR0FBRyxTQUFTLENBQUMsQ0FBQyxDQUFDO1FBQ2hDLE1BQU0sQ0FBQyxLQUFLLEdBQUcsRUFBRSxDQUFDLEdBQUcsU0FBUyxDQUFDLENBQUMsQ0FBQztBQUNqQyxRQUFBLE9BQU8sTUFBTSxDQUFDO0tBQ2Q7QUFFRCxJQUFBLE9BQU8sY0FBYyxDQUFDLE1BQWUsRUFBRSxXQUFvQixFQUFFLE1BQWUsRUFBQTtRQUMzRSxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3RCLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDdEIsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUN0QixNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBRXRCLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDdEIsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUN0QixNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3RCLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFFdEIsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUN0QixNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3RCLE1BQU0sQ0FBQyxFQUFFLENBQUMsR0FBRyxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDeEIsTUFBTSxDQUFDLEVBQUUsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUV4QixRQUFBLE1BQU0sQ0FBQyxFQUFFLENBQUMsR0FBRyxXQUFXLENBQUMsQ0FBQyxDQUFDO0FBQzNCLFFBQUEsTUFBTSxDQUFDLEVBQUUsQ0FBQyxHQUFHLFdBQVcsQ0FBQyxDQUFDLENBQUM7QUFDM0IsUUFBQSxNQUFNLENBQUMsRUFBRSxDQUFDLEdBQUcsV0FBVyxDQUFDLENBQUMsQ0FBQztRQUMzQixNQUFNLENBQUMsRUFBRSxDQUFDLEdBQUcsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBRXhCLFFBQUEsT0FBTyxNQUFNLENBQUM7S0FDZDtBQUVELElBQUEsT0FBTyxRQUFRLENBQUMsTUFBZSxFQUFFLEtBQWMsRUFBRSxNQUFlLEVBQUE7UUFDL0QsTUFBTSxhQUFhLEdBQUcsT0FBTyxDQUFDLFFBQVEsQ0FBQyxNQUFNLEVBQUVJLGVBQWEsQ0FBQyxDQUFDO1FBQzlELE1BQU0sV0FBVyxHQUFHLEtBQUssQ0FBQyxDQUFDLEdBQUcsYUFBYSxDQUFDLENBQUMsQ0FBQztRQUM5QyxNQUFNLFdBQVcsR0FBRyxLQUFLLENBQUMsQ0FBQyxHQUFHLGFBQWEsQ0FBQyxDQUFDLENBQUM7UUFDOUMsTUFBTSxXQUFXLEdBQUcsS0FBSyxDQUFDLENBQUMsR0FBRyxhQUFhLENBQUMsQ0FBQyxDQUFDO1FBRTlDLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsV0FBVyxDQUFDO1FBQ3BDLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsV0FBVyxDQUFDO1FBQ3BDLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsV0FBVyxDQUFDO1FBQ3BDLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFFdEIsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxXQUFXLENBQUM7UUFDcEMsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxXQUFXLENBQUM7UUFDcEMsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxXQUFXLENBQUM7UUFDcEMsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUV0QixNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLFdBQVcsQ0FBQztRQUNwQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLFdBQVcsQ0FBQztRQUNwQyxNQUFNLENBQUMsRUFBRSxDQUFDLEdBQUcsTUFBTSxDQUFDLEVBQUUsQ0FBQyxHQUFHLFdBQVcsQ0FBQztRQUN0QyxNQUFNLENBQUMsRUFBRSxDQUFDLEdBQUcsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBRXhCLE1BQU0sQ0FBQyxFQUFFLENBQUMsR0FBRyxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDeEIsTUFBTSxDQUFDLEVBQUUsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUN4QixNQUFNLENBQUMsRUFBRSxDQUFDLEdBQUcsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ3hCLE1BQU0sQ0FBQyxFQUFFLENBQUMsR0FBRyxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUM7QUFFeEIsUUFBQSxPQUFPLE1BQU0sQ0FBQztLQUNkO0FBRUQsSUFBQSxPQUFPLFFBQVEsQ0FBQyxNQUFlLEVBQUUsTUFBZSxFQUFBO0FBQy9DLFFBQUEsTUFBTSxDQUFDLENBQUMsR0FBRyxPQUFPLENBQUMsU0FBUyxDQUFDLE9BQU8sQ0FBQyxZQUFZLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUVDLGVBQWEsQ0FBQyxDQUFDLENBQUM7QUFDbkcsUUFBQSxNQUFNLENBQUMsQ0FBQyxHQUFHLE9BQU8sQ0FBQyxTQUFTLENBQUMsT0FBTyxDQUFDLFlBQVksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsTUFBTSxDQUFDLENBQUMsQ0FBQyxFQUFFLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRUEsZUFBYSxDQUFDLENBQUMsQ0FBQztBQUNuRyxRQUFBLE1BQU0sQ0FBQyxDQUFDLEdBQUcsT0FBTyxDQUFDLFNBQVMsQ0FBQyxPQUFPLENBQUMsWUFBWSxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsRUFBRSxNQUFNLENBQUMsQ0FBQyxDQUFDLEVBQUUsTUFBTSxDQUFDLEVBQUUsQ0FBQyxFQUFFQSxlQUFhLENBQUMsQ0FBQyxDQUFDO0FBQ3BHLFFBQUEsT0FBTyxNQUFNLENBQUM7S0FDZDtJQUVELE9BQU8sZUFBZSxDQUFDLE1BQWUsRUFBQTtBQUNyQyxRQUFBLE9BQU8sQ0FBQyxRQUFRLENBQUMsTUFBTSxFQUFFQyxlQUFhLENBQUMsQ0FBQztBQUN4QyxRQUFBLE9BQU8sT0FBTyxDQUFDLGdCQUFnQixDQUFDQSxlQUFhLENBQUMsQ0FBQztLQUMvQztBQUVELElBQUEsT0FBTyxXQUFXLENBQUMsTUFBZSxFQUFFLFFBQWlCLEVBQUUsTUFBZSxFQUFBO1FBQ3JFLE1BQU0sS0FBSyxHQUFHLE9BQU8sQ0FBQyxRQUFRLENBQUMsTUFBTSxFQUFFQyxlQUFhLENBQUMsQ0FBQztBQUV0RCxRQUFBLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxRQUFRLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQztBQUNsQyxRQUFBLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxRQUFRLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQztBQUNsQyxRQUFBLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxRQUFRLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQztRQUNsQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBRXRCLFFBQUEsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLFFBQVEsQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDO0FBQ2xDLFFBQUEsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLFFBQVEsQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDO0FBQ2xDLFFBQUEsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLFFBQVEsQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDO1FBQ2xDLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFFdEIsUUFBQSxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsUUFBUSxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUM7QUFDbEMsUUFBQSxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsUUFBUSxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUM7QUFDbEMsUUFBQSxNQUFNLENBQUMsRUFBRSxDQUFDLEdBQUcsUUFBUSxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUM7UUFDbkMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUV4QixNQUFNLENBQUMsRUFBRSxDQUFDLEdBQUcsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ3hCLE1BQU0sQ0FBQyxFQUFFLENBQUMsR0FBRyxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDeEIsTUFBTSxDQUFDLEVBQUUsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUN4QixNQUFNLENBQUMsRUFBRSxDQUFDLEdBQUcsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBRXhCLFFBQUEsT0FBTyxNQUFNLENBQUM7S0FDZDtBQUVELElBQUEsT0FBTyxXQUFXLENBQUMsTUFBZSxFQUFFLE1BQWtCLEVBQUE7UUFDckQsTUFBTSxLQUFLLEdBQUcsT0FBTyxDQUFDLFFBQVEsQ0FBQyxNQUFNLEVBQUVDLGVBQWEsQ0FBQyxDQUFDO0FBRXRELFFBQUEsTUFBTSxHQUFHLEdBQUcsQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUM7QUFDeEIsUUFBQSxNQUFNLEdBQUcsR0FBRyxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQztBQUN4QixRQUFBLE1BQU0sR0FBRyxHQUFHLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDO1FBRXhCLE1BQU0sSUFBSSxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7UUFDN0IsTUFBTSxJQUFJLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztRQUM3QixNQUFNLElBQUksR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO1FBQzdCLE1BQU0sSUFBSSxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7UUFDN0IsTUFBTSxJQUFJLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztRQUM3QixNQUFNLElBQUksR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO1FBQzdCLE1BQU0sSUFBSSxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7UUFDN0IsTUFBTSxJQUFJLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLEdBQUcsQ0FBQztRQUM3QixNQUFNLElBQUksR0FBRyxNQUFNLENBQUMsRUFBRSxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBRTlCLFFBQUEsTUFBTSxLQUFLLEdBQUcsSUFBSSxHQUFHLElBQUksR0FBRyxJQUFJLENBQUM7UUFDakMsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1FBRVYsSUFBSSxLQUFLLEdBQUcsQ0FBQyxFQUFFO1lBQ2QsQ0FBQyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsS0FBSyxHQUFHLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUMvQixZQUFBLE1BQU0sQ0FBQyxDQUFDLEdBQUcsSUFBSSxHQUFHLENBQUMsQ0FBQztZQUNwQixNQUFNLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxHQUFHLElBQUksSUFBSSxDQUFDLENBQUM7WUFDN0IsTUFBTSxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksR0FBRyxJQUFJLElBQUksQ0FBQyxDQUFDO1lBQzdCLE1BQU0sQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLEdBQUcsSUFBSSxJQUFJLENBQUMsQ0FBQztBQUM3QixTQUFBO0FBQU0sYUFBQSxJQUFJLElBQUksR0FBRyxJQUFJLElBQUksSUFBSSxHQUFHLElBQUksRUFBRTtBQUN0QyxZQUFBLENBQUMsR0FBRyxJQUFJLENBQUMsSUFBSSxDQUFDLEdBQUcsR0FBRyxJQUFJLEdBQUcsSUFBSSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsQ0FBQztZQUM1QyxNQUFNLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxHQUFHLElBQUksSUFBSSxDQUFDLENBQUM7QUFDN0IsWUFBQSxNQUFNLENBQUMsQ0FBQyxHQUFHLElBQUksR0FBRyxDQUFDLENBQUM7WUFDcEIsTUFBTSxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksR0FBRyxJQUFJLElBQUksQ0FBQyxDQUFDO1lBQzdCLE1BQU0sQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLEdBQUcsSUFBSSxJQUFJLENBQUMsQ0FBQztBQUM3QixTQUFBO2FBQU0sSUFBSSxJQUFJLEdBQUcsSUFBSSxFQUFFO0FBQ3ZCLFlBQUEsQ0FBQyxHQUFHLElBQUksQ0FBQyxJQUFJLENBQUMsR0FBRyxHQUFHLElBQUksR0FBRyxJQUFJLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxDQUFDO1lBQzVDLE1BQU0sQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLEdBQUcsSUFBSSxJQUFJLENBQUMsQ0FBQztZQUM3QixNQUFNLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxHQUFHLElBQUksSUFBSSxDQUFDLENBQUM7QUFDN0IsWUFBQSxNQUFNLENBQUMsQ0FBQyxHQUFHLElBQUksR0FBRyxDQUFDLENBQUM7WUFDcEIsTUFBTSxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksR0FBRyxJQUFJLElBQUksQ0FBQyxDQUFDO0FBQzdCLFNBQUE7QUFBTSxhQUFBO0FBQ04sWUFBQSxDQUFDLEdBQUcsSUFBSSxDQUFDLElBQUksQ0FBQyxHQUFHLEdBQUcsSUFBSSxHQUFHLElBQUksR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7WUFDNUMsTUFBTSxDQUFDLENBQUMsR0FBRyxDQUFDLElBQUksR0FBRyxJQUFJLElBQUksQ0FBQyxDQUFDO1lBQzdCLE1BQU0sQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLEdBQUcsSUFBSSxJQUFJLENBQUMsQ0FBQztZQUM3QixNQUFNLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxHQUFHLElBQUksSUFBSSxDQUFDLENBQUM7QUFDN0IsWUFBQSxNQUFNLENBQUMsQ0FBQyxHQUFHLElBQUksR0FBRyxDQUFDLENBQUM7QUFDcEIsU0FBQTtBQUNELFFBQUEsT0FBTyxNQUFNLENBQUM7S0FDZDtBQUVELElBQUEsT0FBTyxRQUFRLENBQUMsSUFBYSxFQUFFLEtBQWMsRUFBRSxNQUFlLEVBQUE7QUFDN0QsUUFBQSxNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDdEIsUUFBQSxNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDdEIsUUFBQSxNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDdEIsUUFBQSxNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDdEIsUUFBQSxNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDdEIsUUFBQSxNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDdEIsUUFBQSxNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDdEIsUUFBQSxNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDdEIsUUFBQSxNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDdEIsUUFBQSxNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDdEIsUUFBQSxNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDeEIsUUFBQSxNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDeEIsUUFBQSxNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDeEIsUUFBQSxNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDeEIsUUFBQSxNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDeEIsUUFBQSxNQUFNLE1BQU0sR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDLENBQUM7QUFFeEIsUUFBQSxNQUFNLE1BQU0sR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDeEIsUUFBQSxNQUFNLE1BQU0sR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDeEIsUUFBQSxNQUFNLE1BQU0sR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDeEIsUUFBQSxNQUFNLE1BQU0sR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDeEIsUUFBQSxNQUFNLE1BQU0sR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDeEIsUUFBQSxNQUFNLE1BQU0sR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDeEIsUUFBQSxNQUFNLE1BQU0sR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDeEIsUUFBQSxNQUFNLE1BQU0sR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDeEIsUUFBQSxNQUFNLE1BQU0sR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDeEIsUUFBQSxNQUFNLE1BQU0sR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDeEIsUUFBQSxNQUFNLE9BQU8sR0FBRyxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDMUIsUUFBQSxNQUFNLE9BQU8sR0FBRyxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDMUIsUUFBQSxNQUFNLE9BQU8sR0FBRyxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDMUIsUUFBQSxNQUFNLE9BQU8sR0FBRyxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDMUIsUUFBQSxNQUFNLE9BQU8sR0FBRyxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDMUIsUUFBQSxNQUFNLE9BQU8sR0FBRyxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUM7QUFFMUIsUUFBQSxNQUFNLFdBQVcsR0FBRyxLQUFLLEdBQUcsTUFBTSxHQUFHLEtBQUssR0FBRyxNQUFNLEdBQUcsS0FBSyxHQUFHLE1BQU0sR0FBRyxNQUFNLEdBQUcsTUFBTSxDQUFDO0FBQ3ZGLFFBQUEsTUFBTSxXQUFXLEdBQUcsS0FBSyxHQUFHLE1BQU0sR0FBRyxLQUFLLEdBQUcsTUFBTSxHQUFHLEtBQUssR0FBRyxNQUFNLEdBQUcsTUFBTSxHQUFHLE1BQU0sQ0FBQztBQUN2RixRQUFBLE1BQU0sV0FBVyxHQUFHLEtBQUssR0FBRyxNQUFNLEdBQUcsS0FBSyxHQUFHLE1BQU0sR0FBRyxNQUFNLEdBQUcsTUFBTSxHQUFHLE1BQU0sR0FBRyxNQUFNLENBQUM7QUFDeEYsUUFBQSxNQUFNLFdBQVcsR0FBRyxLQUFLLEdBQUcsTUFBTSxHQUFHLEtBQUssR0FBRyxNQUFNLEdBQUcsTUFBTSxHQUFHLE1BQU0sR0FBRyxNQUFNLEdBQUcsTUFBTSxDQUFDO0FBRXhGLFFBQUEsTUFBTSxXQUFXLEdBQUcsS0FBSyxHQUFHLE1BQU0sR0FBRyxLQUFLLEdBQUcsTUFBTSxHQUFHLEtBQUssR0FBRyxNQUFNLEdBQUcsTUFBTSxHQUFHLE1BQU0sQ0FBQztBQUN2RixRQUFBLE1BQU0sV0FBVyxHQUFHLEtBQUssR0FBRyxNQUFNLEdBQUcsS0FBSyxHQUFHLE1BQU0sR0FBRyxLQUFLLEdBQUcsTUFBTSxHQUFHLE1BQU0sR0FBRyxNQUFNLENBQUM7QUFDdkYsUUFBQSxNQUFNLFdBQVcsR0FBRyxLQUFLLEdBQUcsTUFBTSxHQUFHLEtBQUssR0FBRyxNQUFNLEdBQUcsTUFBTSxHQUFHLE1BQU0sR0FBRyxNQUFNLEdBQUcsTUFBTSxDQUFDO0FBQ3hGLFFBQUEsTUFBTSxXQUFXLEdBQUcsS0FBSyxHQUFHLE1BQU0sR0FBRyxLQUFLLEdBQUcsTUFBTSxHQUFHLE1BQU0sR0FBRyxNQUFNLEdBQUcsTUFBTSxHQUFHLE1BQU0sQ0FBQztBQUV4RixRQUFBLE1BQU0sV0FBVyxHQUFHLEtBQUssR0FBRyxNQUFNLEdBQUcsS0FBSyxHQUFHLE1BQU0sR0FBRyxLQUFLLEdBQUcsT0FBTyxHQUFHLE1BQU0sR0FBRyxPQUFPLENBQUM7QUFDekYsUUFBQSxNQUFNLFdBQVcsR0FBRyxLQUFLLEdBQUcsTUFBTSxHQUFHLEtBQUssR0FBRyxNQUFNLEdBQUcsS0FBSyxHQUFHLE9BQU8sR0FBRyxNQUFNLEdBQUcsT0FBTyxDQUFDO0FBQ3pGLFFBQUEsTUFBTSxXQUFXLEdBQUcsS0FBSyxHQUFHLE1BQU0sR0FBRyxLQUFLLEdBQUcsTUFBTSxHQUFHLE1BQU0sR0FBRyxPQUFPLEdBQUcsTUFBTSxHQUFHLE9BQU8sQ0FBQztBQUMxRixRQUFBLE1BQU0sV0FBVyxHQUFHLEtBQUssR0FBRyxNQUFNLEdBQUcsS0FBSyxHQUFHLE1BQU0sR0FBRyxNQUFNLEdBQUcsT0FBTyxHQUFHLE1BQU0sR0FBRyxPQUFPLENBQUM7QUFFMUYsUUFBQSxNQUFNLFdBQVcsR0FBRyxLQUFLLEdBQUcsT0FBTyxHQUFHLEtBQUssR0FBRyxPQUFPLEdBQUcsS0FBSyxHQUFHLE9BQU8sR0FBRyxNQUFNLEdBQUcsT0FBTyxDQUFDO0FBQzNGLFFBQUEsTUFBTSxXQUFXLEdBQUcsS0FBSyxHQUFHLE9BQU8sR0FBRyxLQUFLLEdBQUcsT0FBTyxHQUFHLEtBQUssR0FBRyxPQUFPLEdBQUcsTUFBTSxHQUFHLE9BQU8sQ0FBQztBQUMzRixRQUFBLE1BQU0sV0FBVyxHQUFHLEtBQUssR0FBRyxPQUFPLEdBQUcsS0FBSyxHQUFHLE9BQU8sR0FBRyxNQUFNLEdBQUcsT0FBTyxHQUFHLE1BQU0sR0FBRyxPQUFPLENBQUM7QUFDNUYsUUFBQSxNQUFNLFdBQVcsR0FBRyxLQUFLLEdBQUcsT0FBTyxHQUFHLEtBQUssR0FBRyxPQUFPLEdBQUcsTUFBTSxHQUFHLE9BQU8sR0FBRyxNQUFNLEdBQUcsT0FBTyxDQUFDO0FBRTVGLFFBQUEsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLFdBQVcsQ0FBQztBQUN4QixRQUFBLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxXQUFXLENBQUM7QUFDeEIsUUFBQSxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsV0FBVyxDQUFDO0FBQ3hCLFFBQUEsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLFdBQVcsQ0FBQztBQUN4QixRQUFBLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxXQUFXLENBQUM7QUFDeEIsUUFBQSxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsV0FBVyxDQUFDO0FBQ3hCLFFBQUEsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLFdBQVcsQ0FBQztBQUN4QixRQUFBLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxXQUFXLENBQUM7QUFDeEIsUUFBQSxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsV0FBVyxDQUFDO0FBQ3hCLFFBQUEsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLFdBQVcsQ0FBQztBQUN4QixRQUFBLE1BQU0sQ0FBQyxFQUFFLENBQUMsR0FBRyxXQUFXLENBQUM7QUFDekIsUUFBQSxNQUFNLENBQUMsRUFBRSxDQUFDLEdBQUcsV0FBVyxDQUFDO0FBQ3pCLFFBQUEsTUFBTSxDQUFDLEVBQUUsQ0FBQyxHQUFHLFdBQVcsQ0FBQztBQUN6QixRQUFBLE1BQU0sQ0FBQyxFQUFFLENBQUMsR0FBRyxXQUFXLENBQUM7QUFDekIsUUFBQSxNQUFNLENBQUMsRUFBRSxDQUFDLEdBQUcsV0FBVyxDQUFDO0FBQ3pCLFFBQUEsTUFBTSxDQUFDLEVBQUUsQ0FBQyxHQUFHLFdBQVcsQ0FBQztBQUN6QixRQUFBLE9BQU8sTUFBTSxDQUFDO0tBQ2Q7QUFFRCxJQUFBLE9BQU8sR0FBRyxDQUFDLElBQWEsRUFBRSxLQUFjLEVBQUUsTUFBZSxFQUFBO0FBQ3hELFFBQUEsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDL0IsUUFBQSxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUMvQixRQUFBLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQy9CLFFBQUEsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDL0IsUUFBQSxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUMvQixRQUFBLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQy9CLFFBQUEsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDL0IsUUFBQSxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUMvQixRQUFBLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQy9CLFFBQUEsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDL0IsUUFBQSxNQUFNLENBQUMsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQyxHQUFHLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUNsQyxRQUFBLE1BQU0sQ0FBQyxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDLEdBQUcsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ2xDLFFBQUEsTUFBTSxDQUFDLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUMsR0FBRyxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDbEMsUUFBQSxNQUFNLENBQUMsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQyxHQUFHLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUNsQyxRQUFBLE1BQU0sQ0FBQyxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDLEdBQUcsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ2xDLFFBQUEsTUFBTSxDQUFDLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUMsR0FBRyxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDbEMsUUFBQSxPQUFPLE1BQU0sQ0FBQztLQUNkO0FBRUQsSUFBQSxPQUFPLFFBQVEsQ0FBQyxJQUFhLEVBQUUsS0FBYyxFQUFFLE1BQWUsRUFBQTtBQUM3RCxRQUFBLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQy9CLFFBQUEsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDL0IsUUFBQSxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUMvQixRQUFBLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQy9CLFFBQUEsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDL0IsUUFBQSxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUMvQixRQUFBLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQy9CLFFBQUEsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDL0IsUUFBQSxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUMvQixRQUFBLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQy9CLFFBQUEsTUFBTSxDQUFDLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUMsR0FBRyxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDbEMsUUFBQSxNQUFNLENBQUMsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQyxHQUFHLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUNsQyxRQUFBLE1BQU0sQ0FBQyxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDLEdBQUcsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ2xDLFFBQUEsTUFBTSxDQUFDLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUMsR0FBRyxLQUFLLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDbEMsUUFBQSxNQUFNLENBQUMsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLEVBQUUsQ0FBQyxHQUFHLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUNsQyxRQUFBLE1BQU0sQ0FBQyxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUMsRUFBRSxDQUFDLEdBQUcsS0FBSyxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ2xDLFFBQUEsT0FBTyxNQUFNLENBQUM7S0FDZDtBQUVELElBQUEsT0FBTyxzQkFBc0IsQ0FBQyxJQUFhLEVBQUUsS0FBYyxFQUFFLE1BQWUsRUFBQTtBQUMzRSxRQUFBLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN0QixRQUFBLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN0QixRQUFBLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN0QixRQUFBLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN0QixRQUFBLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN0QixRQUFBLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN0QixRQUFBLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN0QixRQUFBLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN0QixRQUFBLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUN4QixRQUFBLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUN4QixRQUFBLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUN4QixRQUFBLE1BQU0sTUFBTSxHQUFHLElBQUksQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUV4QixRQUFBLE1BQU0sTUFBTSxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN4QixRQUFBLE1BQU0sTUFBTSxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN4QixRQUFBLE1BQU0sTUFBTSxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN4QixRQUFBLE1BQU0sTUFBTSxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN4QixRQUFBLE1BQU0sTUFBTSxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN4QixRQUFBLE1BQU0sTUFBTSxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN4QixRQUFBLE1BQU0sTUFBTSxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN4QixRQUFBLE1BQU0sTUFBTSxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN4QixRQUFBLE1BQU0sT0FBTyxHQUFHLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUMxQixRQUFBLE1BQU0sT0FBTyxHQUFHLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUMxQixRQUFBLE1BQU0sT0FBTyxHQUFHLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUMxQixRQUFBLE1BQU0sT0FBTyxHQUFHLEtBQUssQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUUxQixRQUFBLE1BQU0sV0FBVyxHQUFHLEtBQUssR0FBRyxNQUFNLEdBQUcsS0FBSyxHQUFHLE1BQU0sR0FBRyxLQUFLLEdBQUcsTUFBTSxDQUFDO0FBQ3JFLFFBQUEsTUFBTSxXQUFXLEdBQUcsS0FBSyxHQUFHLE1BQU0sR0FBRyxLQUFLLEdBQUcsTUFBTSxHQUFHLEtBQUssR0FBRyxNQUFNLENBQUM7QUFDckUsUUFBQSxNQUFNLFdBQVcsR0FBRyxLQUFLLEdBQUcsTUFBTSxHQUFHLEtBQUssR0FBRyxNQUFNLEdBQUcsTUFBTSxHQUFHLE1BQU0sQ0FBQztBQUV0RSxRQUFBLE1BQU0sV0FBVyxHQUFHLEtBQUssR0FBRyxNQUFNLEdBQUcsS0FBSyxHQUFHLE1BQU0sR0FBRyxLQUFLLEdBQUcsTUFBTSxDQUFDO0FBQ3JFLFFBQUEsTUFBTSxXQUFXLEdBQUcsS0FBSyxHQUFHLE1BQU0sR0FBRyxLQUFLLEdBQUcsTUFBTSxHQUFHLEtBQUssR0FBRyxNQUFNLENBQUM7QUFDckUsUUFBQSxNQUFNLFdBQVcsR0FBRyxLQUFLLEdBQUcsTUFBTSxHQUFHLEtBQUssR0FBRyxNQUFNLEdBQUcsTUFBTSxHQUFHLE1BQU0sQ0FBQztBQUV0RSxRQUFBLE1BQU0sV0FBVyxHQUFHLEtBQUssR0FBRyxNQUFNLEdBQUcsS0FBSyxHQUFHLE1BQU0sR0FBRyxLQUFLLEdBQUcsT0FBTyxDQUFDO0FBQ3RFLFFBQUEsTUFBTSxXQUFXLEdBQUcsS0FBSyxHQUFHLE1BQU0sR0FBRyxLQUFLLEdBQUcsTUFBTSxHQUFHLEtBQUssR0FBRyxPQUFPLENBQUM7QUFDdEUsUUFBQSxNQUFNLFdBQVcsR0FBRyxLQUFLLEdBQUcsTUFBTSxHQUFHLEtBQUssR0FBRyxNQUFNLEdBQUcsTUFBTSxHQUFHLE9BQU8sQ0FBQztBQUV2RSxRQUFBLE1BQU0sV0FBVyxHQUFHLEtBQUssR0FBRyxPQUFPLEdBQUcsS0FBSyxHQUFHLE9BQU8sR0FBRyxLQUFLLEdBQUcsT0FBTyxHQUFHLE1BQU0sQ0FBQztBQUNqRixRQUFBLE1BQU0sV0FBVyxHQUFHLEtBQUssR0FBRyxPQUFPLEdBQUcsS0FBSyxHQUFHLE9BQU8sR0FBRyxLQUFLLEdBQUcsT0FBTyxHQUFHLE1BQU0sQ0FBQztBQUNqRixRQUFBLE1BQU0sV0FBVyxHQUFHLEtBQUssR0FBRyxPQUFPLEdBQUcsS0FBSyxHQUFHLE9BQU8sR0FBRyxNQUFNLEdBQUcsT0FBTyxHQUFHLE1BQU0sQ0FBQztBQUVsRixRQUFBLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxXQUFXLENBQUM7QUFDeEIsUUFBQSxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsV0FBVyxDQUFDO0FBQ3hCLFFBQUEsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLFdBQVcsQ0FBQztBQUN4QixRQUFBLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDaEIsUUFBQSxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsV0FBVyxDQUFDO0FBQ3hCLFFBQUEsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLFdBQVcsQ0FBQztBQUN4QixRQUFBLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxXQUFXLENBQUM7QUFDeEIsUUFBQSxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2hCLFFBQUEsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLFdBQVcsQ0FBQztBQUN4QixRQUFBLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxXQUFXLENBQUM7QUFDeEIsUUFBQSxNQUFNLENBQUMsRUFBRSxDQUFDLEdBQUcsV0FBVyxDQUFDO0FBQ3pCLFFBQUEsTUFBTSxDQUFDLEVBQUUsQ0FBQyxHQUFHLEdBQUcsQ0FBQztBQUNqQixRQUFBLE1BQU0sQ0FBQyxFQUFFLENBQUMsR0FBRyxXQUFXLENBQUM7QUFDekIsUUFBQSxNQUFNLENBQUMsRUFBRSxDQUFDLEdBQUcsV0FBVyxDQUFDO0FBQ3pCLFFBQUEsTUFBTSxDQUFDLEVBQUUsQ0FBQyxHQUFHLFdBQVcsQ0FBQztBQUN6QixRQUFBLE1BQU0sQ0FBQyxFQUFFLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDakIsUUFBQSxPQUFPLE1BQU0sQ0FBQztLQUNkO0FBRUQsSUFBQSxPQUFPLGlCQUFpQixDQUFDLE1BQWUsRUFBRSxRQUFpQixFQUFFLE1BQWUsRUFBQTtBQUMzRSxRQUFBLE1BQU0sS0FBSyxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN4QixRQUFBLE1BQU0sS0FBSyxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN4QixRQUFBLE1BQU0sS0FBSyxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN4QixRQUFBLE1BQU0sS0FBSyxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN4QixRQUFBLE1BQU0sS0FBSyxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN4QixRQUFBLE1BQU0sS0FBSyxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN4QixRQUFBLE1BQU0sS0FBSyxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN4QixRQUFBLE1BQU0sS0FBSyxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUN4QixRQUFBLE1BQU0sTUFBTSxHQUFHLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUUxQixRQUFBLE1BQU0sTUFBTSxHQUFHLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUMzQixRQUFBLE1BQU0sTUFBTSxHQUFHLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUMzQixRQUFBLE1BQU0sTUFBTSxHQUFHLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUMzQixRQUFBLE1BQU0sTUFBTSxHQUFHLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUMzQixRQUFBLE1BQU0sTUFBTSxHQUFHLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUMzQixRQUFBLE1BQU0sTUFBTSxHQUFHLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUMzQixRQUFBLE1BQU0sTUFBTSxHQUFHLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUMzQixRQUFBLE1BQU0sTUFBTSxHQUFHLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUMzQixRQUFBLE1BQU0sT0FBTyxHQUFHLFFBQVEsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUU1QixRQUFBLE1BQU0sV0FBVyxHQUFHLEtBQUssR0FBRyxNQUFNLEdBQUcsS0FBSyxHQUFHLE1BQU0sR0FBRyxLQUFLLEdBQUcsTUFBTSxDQUFDO0FBQ3JFLFFBQUEsTUFBTSxXQUFXLEdBQUcsS0FBSyxHQUFHLE1BQU0sR0FBRyxLQUFLLEdBQUcsTUFBTSxHQUFHLEtBQUssR0FBRyxNQUFNLENBQUM7QUFDckUsUUFBQSxNQUFNLFdBQVcsR0FBRyxLQUFLLEdBQUcsTUFBTSxHQUFHLEtBQUssR0FBRyxNQUFNLEdBQUcsTUFBTSxHQUFHLE1BQU0sQ0FBQztBQUV0RSxRQUFBLE1BQU0sV0FBVyxHQUFHLEtBQUssR0FBRyxNQUFNLEdBQUcsS0FBSyxHQUFHLE1BQU0sR0FBRyxLQUFLLEdBQUcsTUFBTSxDQUFDO0FBQ3JFLFFBQUEsTUFBTSxXQUFXLEdBQUcsS0FBSyxHQUFHLE1BQU0sR0FBRyxLQUFLLEdBQUcsTUFBTSxHQUFHLEtBQUssR0FBRyxNQUFNLENBQUM7QUFDckUsUUFBQSxNQUFNLFdBQVcsR0FBRyxLQUFLLEdBQUcsTUFBTSxHQUFHLEtBQUssR0FBRyxNQUFNLEdBQUcsTUFBTSxHQUFHLE1BQU0sQ0FBQztBQUV0RSxRQUFBLE1BQU0sV0FBVyxHQUFHLEtBQUssR0FBRyxNQUFNLEdBQUcsS0FBSyxHQUFHLE1BQU0sR0FBRyxLQUFLLEdBQUcsT0FBTyxDQUFDO0FBQ3RFLFFBQUEsTUFBTSxXQUFXLEdBQUcsS0FBSyxHQUFHLE1BQU0sR0FBRyxLQUFLLEdBQUcsTUFBTSxHQUFHLEtBQUssR0FBRyxPQUFPLENBQUM7QUFDdEUsUUFBQSxNQUFNLFdBQVcsR0FBRyxLQUFLLEdBQUcsTUFBTSxHQUFHLEtBQUssR0FBRyxNQUFNLEdBQUcsTUFBTSxHQUFHLE9BQU8sQ0FBQztBQUV2RSxRQUFBLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxXQUFXLENBQUM7QUFDeEIsUUFBQSxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsV0FBVyxDQUFDO0FBQ3hCLFFBQUEsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLFdBQVcsQ0FBQztBQUN4QixRQUFBLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxHQUFHLENBQUM7QUFDaEIsUUFBQSxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsV0FBVyxDQUFDO0FBQ3hCLFFBQUEsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLFdBQVcsQ0FBQztBQUN4QixRQUFBLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxXQUFXLENBQUM7QUFDeEIsUUFBQSxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsR0FBRyxDQUFDO0FBQ2hCLFFBQUEsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLFdBQVcsQ0FBQztBQUN4QixRQUFBLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxXQUFXLENBQUM7QUFDeEIsUUFBQSxNQUFNLENBQUMsRUFBRSxDQUFDLEdBQUcsV0FBVyxDQUFDO0FBQ3pCLFFBQUEsTUFBTSxDQUFDLEVBQUUsQ0FBQyxHQUFHLEdBQUcsQ0FBQztRQUNqQixNQUFNLENBQUMsRUFBRSxDQUFDLEdBQUcsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ3hCLE1BQU0sQ0FBQyxFQUFFLENBQUMsR0FBRyxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDeEIsTUFBTSxDQUFDLEVBQUUsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUN4QixNQUFNLENBQUMsRUFBRSxDQUFDLEdBQUcsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ3hCLFFBQUEsT0FBTyxNQUFNLENBQUM7S0FDZDtBQUVELElBQUEsT0FBTyxxQkFBcUIsQ0FBQyxNQUFlLEVBQUUsV0FBb0IsRUFBRSxNQUFlLEVBQUE7QUFDbEYsUUFBQSxNQUFNLENBQUMsR0FBRyxXQUFXLENBQUMsQ0FBQyxDQUFDO0FBQ3hCLFFBQUEsTUFBTSxDQUFDLEdBQUcsV0FBVyxDQUFDLENBQUMsQ0FBQztBQUN4QixRQUFBLE1BQU0sQ0FBQyxHQUFHLFdBQVcsQ0FBQyxDQUFDLENBQUM7UUFFeEIsTUFBTSxFQUFFLEdBQUcsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ3RFLE1BQU0sRUFBRSxHQUFHLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUN0RSxNQUFNLEVBQUUsR0FBRyxDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxFQUFFLENBQUMsR0FBRyxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUM7UUFFdkUsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUN0QixNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3RCLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDdEIsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUN0QixNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3RCLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDdEIsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUN0QixNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3RCLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDdEIsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUN0QixNQUFNLENBQUMsRUFBRSxDQUFDLEdBQUcsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ3hCLE1BQU0sQ0FBQyxFQUFFLENBQUMsR0FBRyxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDeEIsUUFBQSxNQUFNLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxDQUFDO0FBQ2hCLFFBQUEsTUFBTSxDQUFDLEVBQUUsQ0FBQyxHQUFHLEVBQUUsQ0FBQztBQUNoQixRQUFBLE1BQU0sQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLENBQUM7UUFDaEIsTUFBTSxDQUFDLEVBQUUsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUN4QixRQUFBLE9BQU8sTUFBTSxDQUFDO0tBQ2Q7QUFFRCxJQUFBLE9BQU8sZUFBZSxDQUFDLE1BQWUsRUFBRSxLQUFjLEVBQUUsTUFBZSxFQUFBO0FBQ3RFLFFBQUEsTUFBTSxNQUFNLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQztBQUN2QixRQUFBLE1BQU0sTUFBTSxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUM7QUFDdkIsUUFBQSxNQUFNLE1BQU0sR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDOztRQUd2QixJQUFJLE1BQU0sS0FBSyxHQUFHLElBQUksTUFBTSxLQUFLLEdBQUcsSUFBSSxNQUFNLEtBQUssR0FBRyxFQUFFO1lBQ3ZELE9BQU8sT0FBTyxDQUFDLEtBQUssQ0FBQyxNQUFNLEVBQUUsTUFBTSxDQUFDLENBQUM7QUFDckMsU0FBQTtRQUVELE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxNQUFNLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQy9CLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxNQUFNLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQy9CLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxNQUFNLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQy9CLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFFdEIsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLE1BQU0sR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDL0IsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLE1BQU0sR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDL0IsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLE1BQU0sR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDL0IsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUV0QixNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsTUFBTSxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUMvQixNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsTUFBTSxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUMvQixNQUFNLENBQUMsRUFBRSxDQUFDLEdBQUcsTUFBTSxHQUFHLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUNqQyxNQUFNLENBQUMsRUFBRSxDQUFDLEdBQUcsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBRXhCLE1BQU0sQ0FBQyxFQUFFLENBQUMsR0FBRyxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDeEIsTUFBTSxDQUFDLEVBQUUsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUN4QixNQUFNLENBQUMsRUFBRSxDQUFDLEdBQUcsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ3hCLE1BQU0sQ0FBQyxFQUFFLENBQUMsR0FBRyxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUM7QUFFeEIsUUFBQSxPQUFPLE1BQU0sQ0FBQztLQUNkO0FBRUQsSUFBQSxPQUFPLHNCQUFzQixDQUFDLE1BQWUsRUFBRSxLQUFhLEVBQUUsTUFBZSxFQUFBO1FBQzVFLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDO1FBQzlCLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDO1FBQzlCLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDO1FBQzlCLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFFdEIsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUM7UUFDOUIsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUM7UUFDOUIsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUM7UUFDOUIsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLE1BQU0s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RyxTQUFTLENBQUMsQ0FBQyxDQUFDO1FBRXZCLE1BQU0sQ0FBQyxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDO1FBQzNELE1BQU0sQ0FBQyxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDO1FBQzNELE1BQU0sQ0FBQyxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxNQUFNLENBQUMsRUFBRSxDQUFDLEdBQUcsRUFBRSxDQUFDO0FBRTVELFFBQUEsTUFBTSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDYixRQUFBLE1BQU0sQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ2IsUUFBQSxNQUFNLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNiLFFBQUEsT0FBTyxNQUFNLENBQUM7S0FDZDtBQUVELElBQUEsT0FBTyxlQUFlLENBQUMsTUFBZSxFQUFFLFNBQWtCLEVBQUUsTUFBZSxFQUFBO0FBQzFFLFFBQUEsTUFBTSxFQUFFLEdBQUcsU0FBUyxDQUFDLENBQUMsQ0FBQztBQUN2QixRQUFBLE1BQU0sRUFBRSxHQUFHLFNBQVMsQ0FBQyxDQUFDLENBQUM7QUFDdkIsUUFBQSxNQUFNLEVBQUUsR0FBRyxTQUFTLENBQUMsQ0FBQyxDQUFDO1FBRXZCLE1BQU0sQ0FBQyxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUN4RSxNQUFNLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDeEUsTUFBTSxDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLE1BQU0sQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUcsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBRXpFLFFBQUEsTUFBTSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDYixRQUFBLE1BQU0sQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDO0FBQ2IsUUFBQSxNQUFNLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNiLFFBQUEsT0FBTyxNQUFNLENBQUM7S0FDZDtBQUVELElBQUEsT0FBTyxnQkFBZ0IsQ0FBQyxNQUFlLEVBQUUsTUFBYyxFQUFFLE1BQWUsRUFBQTtRQUN2RSxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQztRQUMvQixNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQztRQUMvQixNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQztRQUMvQixNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQztRQUMvQixNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQztRQUMvQixNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQztRQUMvQixNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQztRQUMvQixNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQztRQUMvQixNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQztRQUMvQixNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQztRQUMvQixNQUFNLENBQUMsRUFBRSxDQUFDLEdBQUcsTUFBTSxDQUFDLEVBQUUsQ0FBQyxHQUFHLE1BQU0sQ0FBQztRQUNqQyxNQUFNLENBQUMsRUFBRSxDQUFDLEdBQUcsTUFBTSxDQUFDLEVBQUUsQ0FBQyxHQUFHLE1BQU0sQ0FBQztRQUNqQyxNQUFNLENBQUMsRUFBRSxDQUFDLEdBQUcsTUFBTSxDQUFDLEVBQUUsQ0FBQyxHQUFHLE1BQU0sQ0FBQztRQUNqQyxNQUFNLENBQUMsRUFBRSxDQUFDLEdBQUcsTUFBTSxDQUFDLEVBQUUsQ0FBQyxHQUFHLE1BQU0sQ0FBQztRQUNqQyxNQUFNLENBQUMsRUFBRSxDQUFDLEdBQUcsTUFBTSxDQUFDLEVBQUUsQ0FBQyxHQUFHLE1BQU0sQ0FBQztRQUNqQyxNQUFNLENBQUMsRUFBRSxDQUFDLEdBQUcsTUFBTSxDQUFDLEVBQUUsQ0FBQyxHQUFHLE1BQU0sQ0FBQztBQUNqQyxRQUFBLE9BQU8sTUFBTSxDQUFDO0tBQ2Q7QUFFRCxJQUFBLE9BQU8sTUFBTSxDQUFDLE1BQWUsRUFBRSxNQUFlLEVBQUE7UUFDN0MsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3ZCLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUN2QixNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDdkIsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3ZCLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUN2QixNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDdkIsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3ZCLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUN2QixNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDdkIsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3ZCLE1BQU0sQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUN6QixNQUFNLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDekIsTUFBTSxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDO1FBQ3pCLE1BQU0sQ0FBQyxFQUFFLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUN6QixNQUFNLENBQUMsRUFBRSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDekIsTUFBTSxDQUFDLEVBQUUsQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ3pCLFFBQUEsT0FBTyxNQUFNLENBQUM7S0FDZDtBQUVELElBQUEsT0FBTyxTQUFTLENBQUMsTUFBZSxFQUFFLE1BQWUsRUFBQTtBQUNoRCxRQUFBLE1BQU0sT0FBTyxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUMxQixRQUFBLE1BQU0sT0FBTyxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUMxQixRQUFBLE1BQU0sT0FBTyxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUMxQixRQUFBLE1BQU0sT0FBTyxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUMxQixRQUFBLE1BQU0sT0FBTyxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUMxQixRQUFBLE1BQU0sUUFBUSxHQUFHLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQztRQUU1QixNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3RCLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDdEIsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUN0QixNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ3ZCLFFBQUEsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLE9BQU8sQ0FBQztRQUNwQixNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3RCLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDdEIsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUN2QixRQUFBLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxPQUFPLENBQUM7QUFDcEIsUUFBQSxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsT0FBTyxDQUFDO1FBQ3BCLE1BQU0sQ0FBQyxFQUFFLENBQUMsR0FBRyxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUM7UUFDeEIsTUFBTSxDQUFDLEVBQUUsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUN4QixRQUFBLE1BQU0sQ0FBQyxFQUFFLENBQUMsR0FBRyxPQUFPLENBQUM7QUFDckIsUUFBQSxNQUFNLENBQUMsRUFBRSxDQUFDLEdBQUcsT0FBTyxDQUFDO0FBQ3JCLFFBQUEsTUFBTSxDQUFDLEVBQUUsQ0FBQyxHQUFHLFFBQVEsQ0FBQztRQUN0QixNQUFNLENBQUMsRUFBRSxDQUFDLEdBQUcsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ3hCLFFBQUEsT0FBTyxNQUFNLENBQUM7S0FDZDtBQUVELElBQUEsT0FBTyxHQUFHLENBQUMsTUFBZSxFQUFFLE1BQWUsRUFBQTtBQUMxQyxRQUFBLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2hDLFFBQUEsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDaEMsUUFBQSxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNoQyxRQUFBLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2hDLFFBQUEsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDaEMsUUFBQSxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNoQyxRQUFBLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2hDLFFBQUEsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDaEMsUUFBQSxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNoQyxRQUFBLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ2hDLFFBQUEsTUFBTSxDQUFDLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDbEMsUUFBQSxNQUFNLENBQUMsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUNsQyxRQUFBLE1BQU0sQ0FBQyxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBQ2xDLFFBQUEsTUFBTSxDQUFDLEVBQUUsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDLENBQUM7QUFDbEMsUUFBQSxNQUFNLENBQUMsRUFBRSxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUNsQyxRQUFBLE1BQU0sQ0FBQyxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0FBRWxDLFFBQUEsT0FBTyxNQUFNLENBQUM7S0FDZDtBQUVELElBQUEsT0FBTyxNQUFNLENBQUMsSUFBYSxFQUFFLEtBQWMsRUFBQTs7Ozs7UUFLMUMsUUFDQyxJQUFJLEtBQUssS0FBSzthQUNiLE9BQU8sQ0FBQyxJQUFJLENBQUM7Z0JBQ2IsT0FBTyxDQUFDLEtBQUssQ0FBQzs7QUFFZCxnQkFBQSxJQUFJLENBQUMsRUFBRSxDQUFDLEtBQUssS0FBSyxDQUFDLEVBQUUsQ0FBQztBQUN0QixnQkFBQSxJQUFJLENBQUMsRUFBRSxDQUFDLEtBQUssS0FBSyxDQUFDLEVBQUUsQ0FBQztBQUN0QixnQkFBQSxJQUFJLENBQUMsRUFBRSxDQUFDLEtBQUssS0FBSyxDQUFDLEVBQUUsQ0FBQzs7QUFFdEIsZ0JBQUEsSUFBSSxDQUFDLENBQUMsQ0FBQyxLQUFLLEtBQUssQ0FBQyxDQUFDLENBQUM7QUFDcEIsZ0JBQUEsSUFBSSxDQUFDLENBQUMsQ0FBQyxLQUFLLEtBQUssQ0FBQyxDQUFDLENBQUM7QUFDcEIsZ0JBQUEsSUFBSSxDQUFDLENBQUMsQ0FBQyxLQUFLLEtBQUssQ0FBQyxDQUFDLENBQUM7QUFDcEIsZ0JBQUEsSUFBSSxDQUFDLENBQUMsQ0FBQyxLQUFLLEtBQUssQ0FBQyxDQUFDLENBQUM7QUFDcEIsZ0JBQUEsSUFBSSxDQUFDLENBQUMsQ0FBQyxLQUFLLEtBQUssQ0FBQyxDQUFDLENBQUM7QUFDcEIsZ0JBQUEsSUFBSSxDQUFDLENBQUMsQ0FBQyxLQUFLLEtBQUssQ0FBQyxDQUFDLENBQUM7QUFDcEIsZ0JBQUEsSUFBSSxDQUFDLENBQUMsQ0FBQyxLQUFLLEtBQUssQ0FBQyxDQUFDLENBQUM7QUFDcEIsZ0JBQUEsSUFBSSxDQUFDLENBQUMsQ0FBQyxLQUFLLEtBQUssQ0FBQyxDQUFDLENBQUM7QUFDcEIsZ0JBQUEsSUFBSSxDQUFDLEVBQUUsQ0FBQyxLQUFLLEtBQUssQ0FBQyxFQUFFLENBQUM7O0FBRXRCLGdCQUFBLElBQUksQ0FBQyxDQUFDLENBQUMsS0FBSyxLQUFLLENBQUMsQ0FBQyxDQUFDO0FBQ3BCLGdCQUFBLElBQUksQ0FBQyxDQUFDLENBQUMsS0FBSyxLQUFLLENBQUMsQ0FBQyxDQUFDO0FBQ3BCLGdCQUFBLElBQUksQ0FBQyxFQUFFLENBQUMsS0FBSyxLQUFLLENBQUMsRUFBRSxDQUFDO2dC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TSxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsRUFBRSxDQUFDLENBQUM7QUFDdEIsUUFBQSxNQUFNLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUN0QixRQUFBLE1BQU0sQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ3RCLFFBQUEsT0FBTyxNQUFNLENBQUM7S0FDZDtBQUVELElBQUEsT0FBTyxVQUFVLENBQUMsTUFBZSxFQUFFLE1BQWUsRUFBQTtRQUNqRCxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3RCLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDdEIsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUN0QixNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3RCLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDdEIsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUN0QixNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQ3RCLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxNQUFNLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDdEIsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxFQUFFLENBQUMsQ0FBQztBQUN2QixRQUFBLE9BQU8sTUFBTSxDQUFDO0tBQ2Q7QUFFRCxJQUFBLE9BQU8sT0FBTyxDQUFDLE1BQWUsRUFBRSxNQUFlLEVBQUE7Ozs7O0FBSzlDLFFBQUEsTUFBTSxJQUFJLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3ZCLFFBQUEsTUFBTSxJQUFJLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3ZCLFFBQUEsTUFBTSxJQUFJLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3ZCLFFBQUEsTUFBTSxJQUFJLEdBQUcsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ3hCLFFBQUEsTUFBTSxJQUFJLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3ZCLFFBQUEsTUFBTSxJQUFJLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3ZCLFFBQUEsTUFBTSxJQUFJLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3ZCLFFBQUEsTUFBTSxJQUFJLEdBQUcsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ3hCLFFBQUEsTUFBTSxJQUFJLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3ZCLFFBQUEsTUFBTSxJQUFJLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3ZCLFFBQUEsTUFBTSxLQUFLLEdBQUcsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ3pCLFFBQUEsTUFBTSxLQUFLLEdBQUcsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ3pCLFFBQUEsTUFBTSxLQUFLLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3hCLFFBQUEsTUFBTSxLQUFLLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3hCLFFBQUEsTUFBTSxLQUFLLEdBQUcsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ3pCLFFBQUEsTUFBTSxLQUFLLEdBQUcsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDOztBQUd6QixRQUFBLElBQUksSUFBSSxHQUFHLEtBQUssR0FBRyxLQUFLLENBQUM7QUFDekIsUUFBQSxJQUFJLElBQUksR0FBRyxLQUFLLEdBQUcsS0FBSyxDQUFDO0FBQ3pCLFFBQUEsSUFBSSxJQUFJLEdBQUcsSUFBSSxHQUFHLEtBQUssQ0FBQztBQUN4QixRQUFBLElBQUksSUFBSSxHQUFHLEtBQUssR0FBRyxLQUFLLENBQUM7QUFDekIsUUFBQSxJQUFJLElBQUksR0FBRyxJQUFJLEdBQUcsS0FBSyxDQUFDO0FBQ3hCLFFBQUEsSUFBSSxJQUFJLEdBQUcsS0FBSyxHQUFHLEtBQUssQ0FBQztBQUN6QixRQUFBLElBQUksSUFBSSxHQUFHLElBQUksR0FBRyxLQUFLLENBQUM7QUFDeEIsUUFBQSxJQUFJLElBQUksR0FBRyxLQUFLLEdBQUcsS0FBSyxDQUFDO0FBQ3pCLFFBQUEsSUFBSSxJQUFJLEdBQUcsSUFBSSxHQUFHLEtBQUssQ0FBQztBQUN4QixRQUFBLElBQUksSUFBSSxHQUFHLEtBQUssR0FBRyxLQUFLLENBQUM7QUFDekIsUUFBQSxJQUFJLEtBQUssR0FBRyxJQUFJLEdBQUcsS0FBSyxDQUFDO0FBQ3pCLFFBQUEsSUFBSSxLQUFLLEdBQUcsSUFBSSxHQUFHLEtBQUssQ0FBQzs7UUFHekIsTUFBTSxJQUFJLEdBQUcsSUFBSSxHQUFHLElBQUksR0FBRyxJQUFJLEdBQUcsSUFBSSxHQUFHLElBQUksR0FBRyxJQUFJLElBQUksSUFBSSxHQUFHLElBQUksR0FBRyxJQUFJLEdBQUcsSUFBSSxHQUFHLElBQUksR0FBRyxJQUFJLENBQUMsQ0FBQztRQUNqRyxNQUFNLElBQUksR0FBRyxJQUFJLEdBQUcsSUFBSSxHQUFHLElBQUksR0FBRyxJQUFJLEdBQUcsSUFBSSxHQUFHLElBQUksSUFBSSxJQUFJLEdBQUcsSUFBSSxHQUFHLElBQUksR0FBRyxJQUFJLEdBQUcsSUFBSSxHQUFHLElBQUksQ0FBQyxDQUFDO1FBQ2pHLE1BQU0sSUFBSSxHQUFHLElBQUksR0FBRyxJQUFJLEdBQUcsSUFBSSxHQUFHLElBQUksR0FBRyxLQUFLLEdBQUcsSUFBSSxJQUFJLElBQUksR0FBRyxJQUFJLEdBQUcsSUFBSSxHQUFHLElBQUksR0FBRyxLQUFLLEdBQUcsSUFBSSxDQUFDLENBQUM7UUFDbkcsTUFBTSxJQUFJLEdBQUcsSUFBSSxHQUFHLElBQUksR0FBRyxJQUFJLEdBQUcsSUFBSSxHQUFHLEtBQUssR0FBRyxJQUFJLElBQUksSUFBSSxHQUFHLElBQUksR0FBRyxJQUFJLEdBQUcsSUFBSSxHQUFHLEtBQUssR0FBRyxJQUFJLENBQUMsQ0FBQztRQUNuRyxNQUFNLElBQUksR0FBRyxJQUFJLEdBQUcsSUFBSSxHQUFHLElBQUksR0FBRyxJQUFJLEdBQUcsSUFBSSxHQUFHLElBQUksSUFBSSxJQUFJLEdBQUcsSUFBSSxHQUFHLElBQUksR0FBRyxJQUFJLEdBQUcsSUFBSSxHQUFHLElBQUksQ0FBQyxDQUFDO1FBQ2pHLE1BQU0sSUFBSSxHQUFHLElBQUksR0FBRyxJQUFJLEdBQUcsSUFBSSxHQUFHLElBQUksR0FBRyxJQUFJLEdBQUcsSUFBSSxJQUFJLElBQUksR0FBRyxJQUFJLEdBQUcsSUFBSSxHQUFHLElBQUksR0FBRyxJQUFJLEdBQUcsSUFBSSxDQUFDLENBQUM7UUFDakcsTUFBTSxJQUFJLEdBQUcsSUFBSSxHQUFHLElBQUksR0FBRyxJQUFJLEdBQUcsSUFBSSxHQUFHLEtBQUssR0FBRyxJQUFJLElBQUksSUFBSSxHQUFHLElBQUksR0FBRyxJQUFJLEdBQUcsSUFBSSxHQUFHLEtBQUssR0FBRyxJQUFJLENBQUMsQ0FBQztRQUNuRyxNQUFNLElBQUksR0FBRyxJQUFJLEdBQUcsSUFBSSxHQUFHLElBQUksR0FBRyxJQUFJLEdBQUcsS0FBSyxHQUFHLElBQUksSUFBSSxJQUFJLEdBQUcsSUFBSSxHQUFHLElBQUksR0FBRyxJQUFJLEdBQUcsS0FBSyxHQUFHLElBQUksQ0FBQyxDQUFDOztBQUduRyxRQUFBLElBQUksR0FBRyxJQUFJLEdBQUcsSUFBSSxDQUFDO0FBQ25CLFFBQUEsSUFBSSxHQUFHLElBQUksR0FBRyxJQUFJLENBQUM7QUFDbkIsUUFBQSxJQUFJLEdBQUcsSUFBSSxHQUFHLElBQUksQ0FBQztBQUNuQixRQUFBLElBQUksR0FBRyxJQUFJLEdBQUcsSUFBSSxDQUFDO0FBQ25CLFFBQUEsSUFBSSxHQUFHLElBQUksR0FBRyxJQUFJLENBQUM7QUFDbkIsUUFBQSxJQUFJLEdBQUcsSUFBSSxHQUFHLElBQUksQ0FBQztBQUNuQixRQUFBLElBQUksR0FBRyxJQUFJLEdBQUcsSUFBSSxDQUFDO0FBQ25CLFFBQUEsSUFBSSxHQUFHLElBQUksR0FBRyxJQUFJLENBQUM7QUFDbkIsUUFBQSxJQUFJLEdBQUcsSUFBSSxHQUFHLElBQUksQ0FBQztBQUNuQixRQUFBLElBQUksR0FBRyxJQUFJLEdBQUcsSUFBSSxDQUFDO0FBQ25CLFFBQUEsS0FBSyxHQUFHLElBQUksR0FBRyxJQUFJLENBQUM7QUFDcEIsUUFBQSxLQUFLLEdBQUcsSUFBSSxHQUFHLElBQUksQ0FBQzs7UUFHcEIsTUFBTSxJQUFJLEdBQUcsSUFBSSxHQUFHLEtBQUssR0FBRyxJQUFJLEdBQUcsS0FBSyxHQUFHLElBQUksR0FBRyxLQUFLLElBQUksSUFBSSxHQUFHLEtBQUssR0FBRyxJQUFJLEdBQUcsS0FBSyxHQUFHLElBQUksR0FBRyxLQUFLLENBQUMsQ0FBQztRQUN2RyxNQUFNLElBQUksR0FBRyxJQUFJLEdBQUcsS0FBSyxHQUFHLElBQUksR0FBRyxLQUFLLEdBQUcsSUFBSSxHQUFHLEtBQUssSUFBSSxJQUFJLEdBQUcsS0FBSyxHQUFHLElBQUksR0FBRyxLQUFLLEdBQUcsSUFBSSxHQUFHLEtBQUssQ0FBQyxDQUFDO1FBQ3ZHLE1BQU0sS0FBSyxHQUFHLElBQUksR0FBRyxLQUFLLEdBQUcsSUFBSSxHQUFHLEtBQUssR0FBRyxLQUFLLEdBQUcsS0FBSyxJQUFJLElBQUksR0FBRyxLQUFLLEdBQUcsSUFBSSxHQUFHLEtBQUssR0FBRyxLQUFLLEdBQUcsS0FBSyxDQUFDLENBQUM7UUFDMUcsTUFBTSxLQUFLLEdBQUcsSUFBSSxHQUFHLEtBQUssR0FBRyxJQUFJLEdBQUcsS0FBSyxHQUFHLEtBQUssR0FBRyxLQUFLLElBQUksSUFBSSxHQUFHLEtBQUssR0FBRyxJQUFJLEdBQUcsS0FBSyxHQUFHLEtBQUssR0FBRyxLQUFLLENBQUMsQ0FBQztRQUMxRyxNQUFNLEtBQUssR0FBRyxJQUFJLEdBQUcsS0FBSyxHQUFHLElBQUksR0FBRyxLQUFLLEdBQUcsSUFBSSxHQUFH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QUFBOztBQUdELFFBQUEsR0FBRyxHQUFHLEdBQUcsR0FBRyxHQUFHLENBQUM7QUFFaEIsUUFBQSxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxHQUFHLEdBQUcsQ0FBQztBQUN2QixRQUFBLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLEdBQUcsR0FBRyxDQUFDO0FBQ3ZCLFFBQUEsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksR0FBRyxHQUFHLENBQUM7QUFDdkIsUUFBQSxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxHQUFHLEdBQUcsQ0FBQztBQUN2QixRQUFBLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLEdBQUcsR0FBRyxDQUFDO0FBQ3ZCLFFBQUEsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksR0FBRyxHQUFHLENBQUM7QUFDdkIsUUFBQSxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxHQUFHLEdBQUcsQ0FBQztBQUN2QixRQUFBLE1BQU0sQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLEdBQUcsR0FBRyxDQUFDO0FBQ3ZCLFFBQUEsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksR0FBRyxHQUFHLENBQUM7QUFDdkIsUUFBQSxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxHQUFHLEdBQUcsQ0FBQztBQUN2QixRQUFBLE1BQU0sQ0FBQyxFQUFFLENBQUMsR0FBRyxLQUFLLEdBQUcsR0FBRyxDQUFDO0FBQ3pCLFFBQUEsTUFBTSxDQUFDLEVBQUUsQ0FBQyxHQUFHLEtBQUssR0FBRyxHQUFHLENBQUM7QUFDekIsUUFBQSxNQUFNLENBQUMsRUFBRSxDQUFDLEdBQUcsS0FBSyxHQUFHLEdBQUcsQ0FBQztBQUN6QixRQUFBLE1BQU0sQ0FBQyxFQUFFLENBQUMsR0FBRyxLQUFLLEdBQUcsR0FBRyxDQUFDO0FBQ3pCLFFBQUEsTUFBTSxDQUFDLEVBQUUsQ0FBQyxHQUFHLEtBQUssR0FBRyxHQUFHLENBQUM7QUFDekIsUUFBQSxNQUFNLENBQUMsRUFBRSxDQUFDLEdBQUcsS0FBSyxHQUFHLEdBQUcsQ0FBQztBQUN6QixRQUFBLE9BQU8sTUFBTSxDQUFDO0tBQ2Q7QUFFRCxJQUFBLE9BQU8scUJBQXFCLENBQUMsTUFBZSxFQUFFLE1BQWUsRUFBQTs7Ozs7O0FBTzVELFFBQUEsTUFBTSxPQUFPLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzFCLFFBQUEsTUFBTSxPQUFPLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzFCLFFBQUEsTUFBTSxPQUFPLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzFCLFFBQUEsTUFBTSxPQUFPLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzFCLFFBQUEsTUFBTSxPQUFPLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzFCLFFBQUEsTUFBTSxPQUFPLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzFCLFFBQUEsTUFBTSxPQUFPLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzFCLFFBQUEsTUFBTSxPQUFPLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQzFCLFFBQUEsTUFBTSxRQUFRLEdBQUcsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBRTVCLFFBQUEsTUFBTSxFQUFFLEdBQUcsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ3RCLFFBQUEsTUFBTSxFQUFFLEdBQUcsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBQ3RCLFFBQUEsTUFBTSxFQUFFLEdBQUcsTUFBTSxDQUFDLEVBQUUsQ0FBQyxDQUFDO0FBRXRCLFFBQUEsTUFBTSxDQUFDLEdBQUcsQ0FBQyxPQUFPLEdBQUcsRUFBRSxHQUFHLE9BQU8sR0FBRyxFQUFFLEdBQUcsT0FBTyxHQUFHLEVBQUUsQ0FBQztBQUN0RCxRQUFBLE1BQU0sQ0FBQyxHQUFHLENBQUMsT0FBTyxHQUFHLEVBQUUsR0FBRyxPQUFPLEdBQUcsRUFBRSxHQUFHLE9B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LENBQUMsR0FBRyxTQUFTLENBQUMsQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQztRQUV2QyxNQUFNLElBQUksR0FBRyxPQUFPLENBQUMsS0FBSyxDQUFDLFVBQVUsRUFBRSxjQUFjLENBQUMsQ0FBQztRQUN2RCxNQUFNLElBQUksR0FBRyxPQUFPLENBQUMsS0FBSyxDQUFDLFVBQVUsRUFBRSxjQUFjLENBQUMsQ0FBQztRQUN2RCxNQUFNLElBQUksR0FBRyxPQUFPLENBQUMsS0FBSyxDQUFDLFVBQVUsRUFBRSxjQUFjLENBQUMsQ0FBQztRQUV2RCxNQUFNLElBQUksR0FBRyxPQUFPLENBQUMsS0FBSyxDQUFDLFVBQVUsRUFBRSxjQUFjLENBQUMsQ0FBQztRQUN2RCxNQUFNLElBQUksR0FBRyxPQUFPLENBQUMsS0FBSyxDQUFDLFVBQVUsRUFBRSxjQUFjLENBQUMsQ0FBQztRQUN2RCxNQUFNLElBQUksR0FBRyxPQUFPLENBQUMsS0FBSyxDQUFDLFVBQVUsRUFBRSxjQUFjLENBQUMsQ0FBQztBQUV2RCxRQUFBLE1BQU0sV0FBVyxHQUFHLFNBQVMsQ0FBQyxNQUFNLENBQUM7QUFDckMsUUFBQSxJQUFJLENBQUMsQ0FBQztRQUNOLEtBQUssQ0FBQyxHQUFHLENBQUMsRUFBRSxDQUFDLEdBQUcsV0FBVyxFQUFFLENBQUMsSUFBSSxNQUFNLEVBQUU7WUFDekMsTUFBTSxDQUFDLEdBQUcsU0FBUyxDQUFDLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUM7QUFDbEMsWUFBQSxNQUFNLENBQUMsR0FBRyxTQUFTLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUM7QUFDdEMsWUFBQSxNQUFNLENBQUMsR0FBRyxTQUFTLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLE1BQU0sQ0FBQyxDQUFDLENBQUM7QUFFdEMsWUFBQSxVQUFVLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNqQixZQUFBLFVBQVUsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxD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QUFTLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxFQUFFLFNBQVMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUM3RSxNQUFNLEVBQUUsR0FBRyxRQUFRLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUMsRUFBRSxTQUFTLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxFQUFFLFNBQVMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUM3RSxNQUFNLEVBQUUsR0FBRyxRQUFRLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxFQUFFLENBQUMsRUFBRSxTQUFTLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxFQUFFLFNBQVMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUM3RSxZQUFBLE1BQU0sRUFBRSxHQUFHLE9BQU8sQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUM3QyxZQUFBLE1BQU0sRUFBRSxHQUFHLE9BQU8sQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUM3QyxZQUFBLE1BQU0sRUFBRSxHQUFHLE9BQU8sQ0FBQyxHQUFHLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLENBQUMsQ0FBQztZQUU3QyxPQUFPLENBQUMsUUFBUSxDQUFDLEVBQUUsRUFBRSxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUM7WUFDN0IsT0FBTyxDQUFDLFFBQVEsQ0FBQyxFQUFFLEVBQUUsRUFBRSxFQUFFLEVBQUUsQ0FBQyxDQUFDO1lBQzdCLE1BQU0sRUFBRSxHQUFHLEVBQUUsQ0FBQyxDQUFDLEdBQUcsRUFBRSxDQUFDLENBQUMsQ0FBQztZQUN2QixNQUFNLEVBQUUsR0FBRyxFQUFFLENB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SSxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQztLQUNqRjtBQUVELElBQUEsT0FBTyxRQUFRLENBQUMsSUFBZ0IsRUFBRSxLQUFpQixFQUFFLE1BQWtCLEVBQUE7QUFDdEUsUUFBQSxNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDO0FBQ3JCLFFBQUEsTUFBTSxLQUFLLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQztBQUNyQixRQUFBLE1BQU0sS0FBSyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUM7QUFDckIsUUFBQSxNQUFNLEtBQUssR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDO0FBRXJCLFFBQUEsTUFBTSxNQUFNLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQztBQUN2QixRQUFBLE1BQU0sTUFBTSxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUM7QUFDdkIsUUFBQSxNQUFNLE1BQU0sR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDO0FBQ3ZCLFFBQUEsTUFBTSxNQUFNLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQztBQUV2QixRQUFBLE1BQU0sQ0FBQyxHQUFHLEtBQUssR0FBRyxNQUFNLEdBQUcsS0FBSyxHQUFHLE1BQU0sR0FBRyxLQUFLLEdBQUcsTUFBTSxHQUFHLEtBQUssR0FBRyxNQUFNLENBQUM7QUFDNUUsUUFBQSxNQUFNLENBQUMsR0FBRyxLQUFLLEdBQUcsTUFBTSxHQUFHLEtBQUssR0FBRyxNQUFNLEdBQUcsS0FBSyxHQUFHLE1BQU0sR0FBRyxLQUFLLEdBQUcsTUFBTSxDQUFDO0FBQzVFLFFBQUEsTUFBTSxDQUFDLEdBQUcsS0FBSyxHQUFHLE1BQU0sR0FBRyxLQUFLLEdBQUcsTUFBTSxHQUFHLEtBQUssR0FBRyxNQUFNLEdBQUcsS0FBSyxHQUFHLE1BQU0sQ0FBQztBQUM1RSxRQUFBLE1BQU0sQ0FBQyxHQUFHLEtBQUssR0FBRyxNQUFNLEdBQUcsS0FBSyxHQUFHLE1BQU0sR0FBRyxLQUFLLEdB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TyxDQUFDLFFBQVEsQ0FBQyxNQUFNLEVBQUUsYUFBYSxDQUFDLENBQUM7QUFFdEQsUUFBQSxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUM7QUFDaEMsUUFBQSxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUM7QUFDaEMsUUFBQSxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUM7QUFDaEMsUUFBQSxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsTUFBTSxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUM7QUFFaEMsUUFBQSxPQUFPLE1BQU0sQ0FBQztLQUNkO0FBRUQsSUFBQSxPQUFPLFFBQVEsQ0FBQyxJQUFhLEVBQUUsS0FBYyxFQUFFLE1BQWUsRUFBQTtRQUM3RCxNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUM7UUFDNUQsTUFBTSxXQUFXLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDO1FBQzVELE1BQU0sV0FBVyxHQUFHLElBQUksQ0FBQyxDQUFDLENBQUMsR0FBRyxLQUFLLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLENBQUMsQ0FBQyxHQUFHLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQztRQUM1RCxNQUFNLFdBQVcsR0FBRyxJQUFJLENBQUMsQ0FBQyxDQUFDLEdBQUcsS0FBSyxDQUFDLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxDQUFD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RCxXQUNDLENBQUEsV0FBbUIsRUFDbkIsTUFBb0IsRUFDcEIsVUFBa0IsRUFDbEIsRUFBaUMsRUFDakMsS0FBYyxFQUFBO0FBRWQsUUFBQSxLQUFLLENBQUMsV0FBVyxFQUFFLEVBQUUsRUFBRSxDQUFDLENBQUMsQ0FBQztBQUMxQixRQUFBLElBQUksQ0FBQyxRQUFRLEdBQUcsS0FBSyxHQUFHLEVBQUUsQ0FBQztBQUMzQixRQUFBLElBQUksQ0FBQyxNQUFNLEdBQUcsSUFBSSxZQUFZLENBQUMsTUFBTSxDQUFDLE1BQU0sRUFBRSxVQUFVLEVBQUUsSUFBSSxDQUFDLFFBQVEsR0FBRyxDQUFDLENBQUMsQ0FBQztBQUM3RSxRQUFBLElBQUksQ0FBQyxJQUFJLEdBQUcsWUFBWSxDQUFDO0tBQ3pCO0lBQ0QsR0FBRyxHQUFBO0FBQ0YsUUFBQSxJQUFJLENBQUMsS0FBSyxHQUFHLElBQUksQ0FBQyxRQUFRLEVBQUUsQ0FBQztRQUM3QixJQUFJLENBQUMsR0FBRyxDQUFDLENBQUM7QUFDVixRQUFBLEtBQUssSUFBSSxDQUFDLEdBQUcsQ0FBQyxFQUFFLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLE1BQU0sRUFBRSxDQUFDLEVBQUUsRUFBRTtBQUMzQyxZQUFBLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUM7QUFDakMsWUFBQSxJQUFJLENBQUMsTUFBTSxDQUFDLENBQUMsR0FBRyxDQUFDLENBQUMsR0FBRyxJQUFJLENBQUMsS0FBSyxDQUFDLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUNyQyxZQUFBLElBQUksQ0FBQyxNQUFNLENBQUMsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLElBQUksQ0FBQyxLQUFLLENBQUMsQ0FBQyxDQUFDLENBQUMsQ0FBQyxDQUFDO0FBQ3JDLFlBQUEsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsSUFBSSxDQUFDLEtBQUssQ0FBQyxD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QztBQUN0QixJQUFBLE1BQU0sS0FBSyxHQUFHLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUM1QixJQUFBLE1BQU0sTUFBTSxHQUFHLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUM3QixJQUFBLE1BQU0sS0FBSyxHQUFHLFVBQVUsQ0FBQyxDQUFDLENBQUMsQ0FBQztBQUU1QixJQUFBLE1BQU0sR0FBRyxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEdBQUcsS0FBSyxFQUFFLENBQUM7QUFDekMsSUFBQSxNQUFNLEdBQUcsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLEdBQUcsS0FBSyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsR0FBRyxLQUFLLEVBQUUsQ0FBQztBQUNqRCxJQUFBLE1BQU0sR0FBRyxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxHQUFHLE1BQU0sRUFBRSxDQUFDLEVBQUUsQ0FBQyxHQUFHLEtBQUssRUFBRSxDQUFDO0lBQ2xELE1BQU0sR0FBRyxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsR0FBRyxLQUFLLEVBQUUsQ0FBQyxFQUFFLENBQUMsR0FBRyxNQUFNLEVBQUUsQ0FBQyxFQUFFLENBQUMsR0FBRyxLQUFLLEVBQUUsQ0FBQztBQUMxRCxJQUFBLE1BQU0sR0FBRyxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQztBQUNqQyxJQUFBLE1BQU0sR0FBRyxHQUFHLEVBQUUsQ0FBQyxFQUFFLENBQUMsR0FBRyxLQUFLLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUM7QUFDekMsSUFBQSxNQUFNLEdBQUcsR0FBRyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsR0FBRyxNQUFNLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDO0FBQzFDLElBQUEsTUFBTSxHQUFHLEdBQUcsRUFBRSxDQUFDLEVBQUUsQ0FBQyxHQUFHLEtBQUssRUFBRSxDQUFDLEVBQUUsQ0FBQyxHQUFHLE1BQU0sRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUM7QUFFbEQsSUFBQSxNQUFNLFNBQVMsR0FBRzs7QUFFakIsUUFBQSxHQUFHLENBQUMsQ0FBQztBQUNMLFFBQUEsR0FBRyxDQUFDLENBQUM7QUFDTCxRQUFBLEdBQUcsQ0FBQyxDQUFDO0FBQ0wsUUFBQSxHQUFHLENBQUMsQ0FBQztBQUNMLFFBQUEsR0FBRyxDQUFDLENBQUM7QUFDTCxRQUFBLEdBQUcsQ0FBQyxDQUFDO0FBQ0wsUUFBQSxHQUFHLENBQUMsQ0FBQztBQUNMLFFBQUEsR0FBRyxDQUFDLENBQUM7QUFDTCxRQUFBLEdBQUcsQ0FBQyxDQUFDO0FBQ0wsUUFBQSxHQUFHLENBQUMsQ0FBQztBQUNMLFFBQUEsR0FBRyxDQUFDLENBQUM7QUFDTCxRQUFBLEdBQUcsQ0FBQyxDQUFDO0FBQ0wsUUFBQSxHQUFHLENBQUMsQ0FBQztBQUNMLFFBQUEsR0FBRyxDQUFDLENBQUM7QUFDTCxRQUFBLEdBQUcsQ0FBQyxDQUFDO0FBQ0wsUUFBQSxHQUFHLENBQUMsQ0FBQztBQUNMLFFBQUEsR0FBRyxDQUFDLENBQUM7QUFDTCxRQUFBLEdBQUcsQ0FBQyxDQUFDOztBQUdMLFFBQUEsR0FBRyxDQUFDLENBQUM7QUFDTCxRQUFBLEdBQUcsQ0FBQyxDQUFDO0FBQ0wsUUFBQSxHQUFHLENBQUMsQ0FBQztBQUNMLFFBQUEsR0FBRyxDQUFDLENBQUM7QUFDTCxRQUFBLEdBQUcsQ0FBQyxDQUFDO0FBQ0wsUUFBQSxHQUFHLENBQUMsQ0FBQztBQUNMLFFBQUEsR0FBRyxDQUFDLENBQUM7QUFDTCxRQUFBLEdBQUcsQ0FBQyxDQUFDO0FBQ0wsUUFBQSxHQUFHLENBQUMsQ0FBQztBQUNMLFFBQUEsR0FBRyxDQUFDLENBQUM7QUFDTCxRQUFBLEdBQUcsQ0FBQyxDQUFDO0FBQ0wsUUFBQSxHQUFHLENBQUMsQ0FBQztBQUNMLFFBQUEsR0FBRyxDQUFDLENBQUM7QUFDTCxRQUFBLEdBQUcsQ0FBQyxDQUFDO0FBQ0wsUUFBQSxHQUFHLENBQUMsQ0FBQztBQUNMLFFBQUEsR0FBRyxDQUFDLENBQUM7QUFDTCxRQUFBLEdBQUcsQ0FBQyxDQUFDO0FBQ0wsUUFBQSxHQUFHLENBQUMsQ0FBQzs7QUFHTCxRQUFBLEdBQUcsQ0FBQyxDQUFDO0FBQ0wsUUFBQSxHQUFHLENBQUMsQ0FBQztBQUNMLFFBQUEsR0FBRyxDQUFDLENBQUM7QUFDTCxRQUFBLEdBQUcsQ0FBQyxDQUFDO0FBQ0wsUUFBQSxHQUFHLENBQUMsQ0FBQztBQUNMLFFBQUEsR0FBRyxDQUFDLENBQUM7QUFDTCxRQUFBLEdBQUcsQ0FBQyxDQUFDO0FBQ0wsUUFBQSxHQUFHLENBQUMsQ0FBQztBQUNMLFFBQUEsR0FBRyxDQUFDLENBQUM7QUFDTCxRQUFBLEdBQUcsQ0FBQyxDQUFDO0FBQ0wsUUFBQSxHQUFHLENBQUMsQ0FBQztBQUNMLFFBQUEsR0FBRyxDQUFDLENBQUM7QUFDTCxRQUFBLEdBQUcsQ0FBQyxDQUFDO0FBQ0wsUUFBQSxHQUFHLENBQUMsQ0FBQztBQUNMLFFBQUEsR0FBRyxDQUFDLENBQUM7QUFDTCxRQUFBLEdBQUcsQ0FBQyxDQUFDO0FBQ0wsUUFBQSxHQUFHLENBQUMsQ0FBQztBQUNMLFFBQUEsR0FBRyxDQUFDLENBQUM7O0FBR0wsUUFBQSxHQUFHLENBQUMsQ0FBQztBQUNMLFFBQUEsR0FBRyxDQUFDLENBQUM7QUFDTCxRQUFBLEdBQUcsQ0FBQyxDQUFDO0FBQ0wsUUFBQSxHQUFHLENBQUMsQ0FBQztBQUNMLFFBQUEsR0FBRyxDQUFDLENBQUM7QUFDTCxRQUFBLEdBQUcsQ0FBQyxDQUFDO0FBQ0wsUUFBQSxHQUFHLENBQUMsQ0FBQztBQUNMLFFBQUEsR0FBRyxDQUFDLENBQUM7QUFDTCxRQUFBLEdBQUcsQ0FBQyxDQUFDO0FBQ0wsUUFBQSxHQUFHLENBQUMsQ0FBQztBQUNMLFFBQUEsR0FBRyxDQUFDLENBQUM7QUFDTCxRQUFBLEdBQUcsQ0FBQyxDQUFDO0FBQ0wsUUFBQSxHQUFHLENBQUMsQ0FBQztBQUNMLFFBQUEsR0FBRyxDQUFDLENBQUM7QUFDTCxRQUFBLEdBQUcsQ0FBQyxDQUFDO0FBQ0wsUUFBQSxHQUFHLENBQUMsQ0FBQztBQUNMLFFBQUEsR0FBRyxDQUFDLENBQUM7QUFDTCxRQUFBLEdBQUcsQ0FBQyxDQUFDOztBQUdMLFFBQUEsR0FBRyxDQUFDLENBQUM7QUFDTCxRQUFBLEdBQUcsQ0FBQyxDQUFDO0FBQ0wsUUFBQSxHQUFHLENBQUMsQ0FBQztBQUNMLFFBQUEsR0FBRyxDQUFDLENBQUM7QUFDTCxRQUFBLEdBQUcsQ0FBQyxDQUFDO0FBQ0wsUUFBQSxHQUFHLENBQUMsQ0FBQztBQUNMLFFBQUEsR0FBRyxDQUFDLENBQUM7QUFDTCxRQUFBLEdBQUcsQ0FBQyxDQUFDO0FBQ0wsUUFBQSxHQUFHLENBQUMsQ0FBQztBQUNMLFFBQUEsR0FBRyxDQUFDLENBQUM7QUFDTCxRQUFBLEdBQUcsQ0FBQyxDQUFDO0FBQ0wsUUFBQSxHQUFHLENBQUMsQ0FBQztBQUNMLFFBQUEsR0FBRyxDQUFDLENBQUM7QUFDTCxRQUFBLEdBQUcsQ0FBQyxDQUFDO0FBQ0wsUUFBQSxHQUFHLENBQUMsQ0FBQztBQUNMLFFBQUEsR0FBRyxDQUFDLENBQUM7QUFDTCxRQUFBLEdBQUcsQ0FBQyxDQUFDO0FBQ0wsUUFBQSxHQUFHLENBQUMsQ0FBQzs7QUFHTCxRQUFBLEdBQUcsQ0FBQyxDQUFDO0FBQ0wsUUFBQSxHQUFHLENBQUMsQ0FBQztBQUNMLFFBQUEsR0FBRyxDQUFDLENBQUM7QUFDTCxRQUFBLEdBQUcsQ0FBQyxDQUFDO0FBQ0wsUUFBQSxHQUFHLENBQUMsQ0FBQztBQUNMLFFBQUEsR0FBRyxDQUFDLENBQUM7QUFDTCxRQUFBLEdBQUcsQ0FBQyxDQUFDO0FBQ0wsUUFBQSxHQUFHLENBQUMsQ0FBQztBQUNMLFFBQUEsR0FBRyxDQUFDLENBQUM7QUFDTCxRQUFBLEdBQUcsQ0FBQyxDQUFDO0FBQ0wsUUFBQSxHQUFHLENBQUMsQ0FBQztBQUNMLFFBQUEsR0FBRyxDQUFDLENBQUM7QUFDTCxRQUFBLEdBQUcsQ0FBQyxDQUFDO0FBQ0wsUUFBQSxHQUFHLENBQUMsQ0FBQztBQUNMLFFBQUEsR0FBRyxDQUFDLENBQUM7QUFDTCxRQUFBLEdBQUcsQ0FBQyxDQUFDO0FBQ0wsUUFBQSxHQUFHLENBQUMsQ0FBQztBQUNMLFFBQUEsR0FBRyxDQUFDLENBQUM7S0FDTCxDQUFDO0FBRUYsSUFBQSxNQUFNLEdBQUcsR0FBRzs7UUFFWCxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUM7O1FBR2xDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQzs7UUFHbEMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDOztRQUdsQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUM7O1FBR2xDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQzs7UUFHbEMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDO0tBQ2xDLENBQUM7QUFFRixJQUFBLE1BQU0sT0FBTyxHQUFHOztBQUVmLFFBQUEsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDOztBQUdwRCxRQUFBLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQzs7QUFHcEQsUUFBQSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUM7O0FBRzFELFFBQUEsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsRUFBRSxDQUFDLEVBQUUsQ0FBQyxFQUFFLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDOztBQUcxRCxRQUFBLENBQUMsRUFB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O0FBQy9CLFlBQUEsVUFBVSxHQUFHLENBQUMsR0FBRyxTQUFTLENBQUM7QUFDM0IsWUFBQSxFQUFFLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBQyxDQUFDO0FBQ2hELFlBQUEsRUFBRSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsU0FBUyxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxVQUFVLEdBQUcsU0FBUyxDQUFDLENBQUM7QUFDNUQsWUFBQSxFQUFFLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxTQUFTLEdBQUcsUUFBUSxDQUFDLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxVQUFVLENBQUMsQ0FBQztBQUMzRCxZQUFBLEVBQUUsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLFNBQVMsR0FBRyxRQUFRLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLFVBQVUsR0FBRyxTQUFTLENBQUMsQ0FBQztBQUN2RSxZQUFBLEVBQUUsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLFNBQVMsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsVUFBVSxDQUFDLENBQUM7QUFDaEQsWUFBQSxFQUFFLEdBQUcsSUFBSSxDQUFDLEdBQUcsQ0FBQyxTQUFTLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLFVBQVUsR0FBRyxTQUFTLENBQUMsQ0FBQztBQUM1RCxZQUFBLEVBQUUsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLFNBQVMsR0FBRyxRQUFRLENBQUMsR0FBRyxJQUFJLENBQUMsR0FBRyxDQUFDLFVBQVUsQ0FBQyxDQUFDO0FBQzNELFlBQUEsRUFBRSxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsU0FBUyxHQUFHLFFBQVEsQ0FBQyxHQUFHLElBQUksQ0FBQyxHQUFHLENBQUMsVUFBVSxHQUFHLFNBQVMsQ0FBQyxDQUFDO0FBQ3ZFLFlBQUEsRUFBRSxHQUFHLENBQUMsR0FBRyxDQUFDLEdBQUcsU0FBUyxDQUFDO1lBQ3ZCLEVBQUUsR0FBRyxDQUFDLEdBQUcsQ0FBQyxDQUFDLEdBQUcsQ0FBQyxJQUFJLFNBQVMsQ0FBQztBQUM3QixZQUFBLEVBQUUsR0FBRyxDQUFDLEdBQUcsQ0FBQyxHQUFHLFFBQVEsQ0FBQztZQUN0QixFQUFFLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQyxHQUFHLENBQUMsSUFBSSxRQUFRLENBQUM7QUFDNUIsWUFBQSxFQUFFLEdBQUcsQ0FBQyxHQUFHLENBQUMsQ0FBQztBQUNYLFlBQUEsRUFBRSxHQUFHLENBQUMsR0FBRyxDQUFDLENBQUM7QUFFWCxZQUFBLFNBQVMsQ0FBQyxFQUFFLENBQUMsR0FBRyxFQUFFLEdBQUcsTUFBTSxDQUFDO1lBQzVCLFNBQVMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLE1BQU0sQ0FBQztZQUNoQyxTQUFTLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxNQUFNLENBQUM7WUFFaEMsU0FBUyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsTUFBTSxDQUFDO1lBQ2hDLFNBQVMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLE1BQU0sQ0FBQztZQUNoQyxTQUFTLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxNQUFNLENBQUM7WUFFaEMsU0FBUyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsTUFBTSxDQUFDO1lBQ2hDLFNBQVMsQ0FBQyxFQUFFLEdBQUcsQ0FBQyxDQUFDLEdBQUcsRUFBRSxHQUFHLE1BQU0sQ0FBQztZQUNoQyxTQUFTLENBQUMsRUFBRSxHQUFHLENBQUMsQ0FBQyxHQUFHLEVBQUUsR0FBRyxNQUFNLENBQUM7WUFFaEMsU0FBUyxDQUFDLEVBQUUsR0FBRyxDQUFDLENBQUMsR0FBRyxFQUFFLEdBQUcsTUFBTSxDQUFDO1lBQ2hDLFNBQVMsQ0FBQyxFQUFFLEdBQUcsRUFBRSxDQUFDLEdBQUcs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 diff --git a/src/material/SpriteMaterial.ts b/src/material/SpriteMaterial.ts index 09b2d8d..923b0d9 100644 --- a/src/material/SpriteMaterial.ts +++ b/src/material/SpriteMaterial.ts @@ -1,16 +1,12 @@ import { FrameState } from "../core/FrameState"; import textureCache from "../core/TextureCache"; import { UniformEnum } from "../core/WebGPUTypes"; -import Color from "../math/Color"; -import Vector2 from "../math/Vector2"; import { Mesh } from "../mesh/Mesh"; import UniformBuffer from "../render/UniformBuffer"; import { ShaderSource } from "../shader/ShaderSource"; import { Material } from "./Material"; export class SpriteMaterial extends Material { - public rotation: number; - public center: Vector2; constructor() { super(); this.type = "sprite"; @@ -20,10 +16,6 @@ export class SpriteMaterial extends Material { HAS_UV: true } }); - this.rotation = Math.PI; - this.opacity = 1; - this.center = new Vector2(0, 0); - this.color = new Color(1, 0, 0); } update(frameState?: FrameState, mesh?: Mesh) { if (!this.shaderData || this.dirty) this.createShaderData(mesh); @@ -38,10 +30,10 @@ export class SpriteMaterial extends Material { }, UniformEnum.Mat4 ); - uniformBuffer.setUniform("color", this, UniformEnum.Color); - uniformBuffer.setUniform("rotation", this, UniformEnum.Float); - uniformBuffer.setUniform("center", this, UniformEnum.FloatVec2); - uniformBuffer.setUniform("opacity", this, UniformEnum.Float); + uniformBuffer.setUniform("color", mesh, UniformEnum.Color); + uniformBuffer.setUniform("rotation", mesh, UniformEnum.Float); + uniformBuffer.setUniform("center", mesh, UniformEnum.FloatVec2); + uniformBuffer.setUniform("opacity", mesh, UniformEnum.Float); this.shaderData.setUniformBuffer("sprite", uniformBuffer); if (this.baseTexture) { this.shaderData.setDefine("USE_COLORTEXTURE", true); diff --git a/src/mesh/Sprite.ts b/src/mesh/Sprite.ts index f107032..ee0de71 100644 --- a/src/mesh/Sprite.ts +++ b/src/mesh/Sprite.ts @@ -1,14 +1,24 @@ import { SpriteGeometry } from "../geometry/SpriteGeometry"; import { SpriteMaterial } from "../material/SpriteMaterial"; +import Color from "../math/Color"; +import Vector2 from "../math/Vector2"; import Sampler from "../render/Sampler"; import Texture from "../render/Texture"; import { Mesh } from "./Mesh"; export class Sprite extends Mesh { + public rotation: number; + public center: Vector2; + public color: Color; + public opacity: number; constructor() { super(); this.material = new SpriteMaterial(); this.geometry = new SpriteGeometry(); + this.rotation = Math.PI; + this.opacity = 1; + this.center = new Vector2(0, 0); + this.color = new Color(1, 0, 0); } setTexture(texture: Texture) { this.material.baseTexture = texture; diff --git a/src/render/UniformBuffer.ts b/src/render/UniformBuffer.ts index c97e86e..2eea228 100644 --- a/src/render/UniformBuffer.ts +++ b/src/render/UniformBuffer.ts @@ -160,6 +160,9 @@ export default class UniformBuffer { if (!uniform) return; uniform.cb = value; } + getUniformByName(name: string) { + return this._uniformStruct.get(name); + } // uniformBuffer.setVec3Array('test',()=>{return [new Vector3(1,0,0),new Vector3(1,0.8,0.5)]},2); // uniformBuffer.setFloatArray('test1',()=>{return [0.5,0.5,1.0]},3); // uniformBuffer.setVec4Array('test4',()=>{return [new Vector4(0.5,0.6,0.2,1.0),new Vector4(0.5,0.8,0.8,1.0)]},2); @@ -175,6 +178,12 @@ export default class UniformBuffer { this._uniformStruct.set(name, uniform); this.byteOffset += uniform.byteSize; } + setUniformsFromUniformBuffer(uniformBuffer: UniformBuffer) { + this._uniformStruct.forEach((value, key) => { + const uniform = uniformBuffer.getUniformByName(key); + if (uniform) this._uniformStruct.set(key, uniform); + }); + } static checkUniformOffset(byteSize: number, Align: number): number { // from https://gpuweb.github.io/gpuweb/wgsl/#address-space-layout-constraints // return this.hasDynamicOffset