@datagrok/eda 1.1.25 → 1.1.28

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (111) hide show
  1. package/.vscode/settings.json +5 -0
  2. package/CHANGELOG.md +12 -0
  3. package/README.md +1 -0
  4. package/dist/05e5e0770f54f07e9474.wasm +0 -0
  5. package/dist/111.js +2 -0
  6. package/dist/111.js.map +1 -0
  7. package/dist/153.js +2 -0
  8. package/dist/153.js.map +1 -0
  9. package/dist/23.js +2 -2
  10. package/dist/23.js.map +1 -0
  11. package/dist/234.js +2 -0
  12. package/dist/234.js.map +1 -0
  13. package/dist/242.js +2 -0
  14. package/dist/242.js.map +1 -0
  15. package/dist/260.js +2 -0
  16. package/dist/260.js.map +1 -0
  17. package/dist/317.js +2 -0
  18. package/dist/317.js.map +1 -0
  19. package/dist/33.js +2 -0
  20. package/dist/33.js.map +1 -0
  21. package/dist/348.js +2 -0
  22. package/dist/348.js.map +1 -0
  23. package/dist/377.js +2 -0
  24. package/dist/377.js.map +1 -0
  25. package/dist/412.js +2 -0
  26. package/dist/412.js.map +1 -0
  27. package/dist/415.js +2 -0
  28. package/dist/415.js.map +1 -0
  29. package/dist/531.js +2 -0
  30. package/dist/531.js.map +1 -0
  31. package/dist/583.js +2 -0
  32. package/dist/583.js.map +1 -0
  33. package/dist/589.js +2 -0
  34. package/dist/589.js.map +1 -0
  35. package/dist/603.js +2 -0
  36. package/dist/603.js.map +1 -0
  37. package/dist/656.js +2 -0
  38. package/dist/656.js.map +1 -0
  39. package/dist/682.js +2 -0
  40. package/dist/682.js.map +1 -0
  41. package/dist/705.js +2 -0
  42. package/dist/705.js.map +1 -0
  43. package/dist/731.js +2 -0
  44. package/dist/731.js.map +1 -0
  45. package/dist/738.js +3 -0
  46. package/dist/738.js.map +1 -0
  47. package/dist/763.js +2 -0
  48. package/dist/763.js.map +1 -0
  49. package/dist/778.js +2 -0
  50. package/dist/778.js.map +1 -0
  51. package/dist/783.js +2 -0
  52. package/dist/783.js.map +1 -0
  53. package/dist/793.js +2 -0
  54. package/dist/793.js.map +1 -0
  55. package/dist/907.js +2 -0
  56. package/dist/907.js.map +1 -0
  57. package/dist/91.js +2 -0
  58. package/dist/91.js.map +1 -0
  59. package/dist/950.js +2 -0
  60. package/dist/950.js.map +1 -0
  61. package/dist/package-test.js +2 -2
  62. package/dist/package-test.js.map +1 -0
  63. package/dist/package.js +2 -2
  64. package/dist/package.js.map +1 -0
  65. package/package.json +92 -92
  66. package/scripts/command.txt +1 -1
  67. package/scripts/func.json +1 -1
  68. package/scripts/module.json +1 -1
  69. package/src/missing-values-imputation/ui.ts +80 -66
  70. package/src/package.ts +288 -38
  71. package/src/pls/pls-tools.ts +16 -15
  72. package/src/regression.ts +232 -0
  73. package/src/svm.ts +78 -38
  74. package/tsconfig.json +4 -4
  75. package/wasm/EDA.js +65 -1
  76. package/wasm/EDA.wasm +0 -0
  77. package/wasm/EDAAPI.js +30 -0
  78. package/wasm/EDAForWebWorker.js +1 -1
  79. package/wasm/callWasm.js +384 -393
  80. package/wasm/regression-api.cpp +66 -0
  81. package/wasm/regression.h +128 -0
  82. package/wasm/workers/fitLinearRegressionParamsWithDataNormalizingWorker.js +13 -0
  83. package/wasm/workers/fitLinearRegressionParamsWorker.js +13 -0
  84. package/webpack.config.js +1 -1
  85. package/dist/208.js +0 -2
  86. package/dist/221.js +0 -2
  87. package/dist/231.js +0 -2
  88. package/dist/261.js +0 -2
  89. package/dist/282.js +0 -2
  90. package/dist/334.js +0 -2
  91. package/dist/356.js +0 -2
  92. package/dist/36.js +0 -2
  93. package/dist/367.js +0 -2
  94. package/dist/374.js +0 -2
  95. package/dist/40.js +0 -2
  96. package/dist/413.js +0 -2
  97. package/dist/42.js +0 -2
  98. package/dist/427.js +0 -2
  99. package/dist/467.js +0 -2
  100. package/dist/523.js +0 -3
  101. package/dist/533.js +0 -2
  102. package/dist/590.js +0 -2
  103. package/dist/65.js +0 -2
  104. package/dist/694.js +0 -2
  105. package/dist/729.js +0 -2
  106. package/dist/796.js +0 -2
  107. package/dist/902.js +0 -2
  108. package/dist/910.js +0 -2
  109. package/dist/972.js +0 -2
  110. package/dist/f5343e2c2e15952ce916.wasm +0 -0
  111. /package/dist/{523.js.LICENSE.txt → 738.js.LICENSE.txt} +0 -0
package/dist/package.js CHANGED
@@ -1,2 +1,2 @@
1
- var eda;(()=>{var t={7905:(t,n,e)=>{"use strict";t=e.hmd(t);var r,o=(r="undefined"!=typeof document&&document.currentScript?document.currentScript.src:void 0,function(t={}){var n,e,o=void 0!==t?t:{};o.ready=new Promise((function(t,r){n=t,e=r}));var i,s=Object.assign({},o),a="object"==typeof window,u="function"==typeof importScripts,l=("object"==typeof process&&"object"==typeof process.versions&&process.versions.node,"");(a||u)&&(u?l=self.location.href:"undefined"!=typeof document&&document.currentScript&&(l=document.currentScript.src),r&&(l=r),l=0!==l.indexOf("blob:")?l.substr(0,l.replace(/[?#].*/,"").lastIndexOf("/")+1):"",u&&(i=t=>{var n=new XMLHttpRequest;return n.open("GET",t,!1),n.responseType="arraybuffer",n.send(null),new Uint8Array(n.response)})),o.print||console.log.bind(console);var c,f,h=o.printErr||console.warn.bind(console);Object.assign(o,s),s=null,o.arguments&&o.arguments,o.thisProgram&&o.thisProgram,o.quit&&o.quit,o.wasmBinary&&(c=o.wasmBinary),o.noExitRuntime,"object"!=typeof WebAssembly&&C("no native wasm support detected");var m,d,p,g=!1;function v(){var t=f.buffer;o.HEAP8=m=new Int8Array(t),o.HEAP16=new Int16Array(t),o.HEAP32=new Int32Array(t),o.HEAPU8=d=new Uint8Array(t),o.HEAPU16=new Uint16Array(t),o.HEAPU32=p=new Uint32Array(t),o.HEAPF32=new Float32Array(t),o.HEAPF64=new Float64Array(t)}var y=[],w=[],E=[],A=0,_=null,I=null;function C(t){o.onAbort&&o.onAbort(t),h(t="Aborted("+t+")"),g=!0,t+=". Build with -sASSERTIONS for more info.";var n=new WebAssembly.RuntimeError(t);throw e(n),n}var N,b;function S(t){return t.startsWith("data:application/octet-stream;base64,")}function M(t){try{if(t==N&&c)return new Uint8Array(c);if(i)return i(t);throw"both async and sync fetching of the wasm failed"}catch(t){C(t)}}function T(t,n,e){return function(t){return c||!a&&!u||"function"!=typeof fetch?Promise.resolve().then((function(){return M(t)})):fetch(t,{credentials:"same-origin"}).then((function(n){if(!n.ok)throw"failed to load wasm binary file at '"+t+"'";return n.arrayBuffer()})).catch((function(){return M(t)}))}(t).then((function(t){return WebAssembly.instantiate(t,n)})).then((function(t){return t})).then(e,(function(t){h("failed to asynchronously prepare wasm: "+t),C(t)}))}function P(t){for(;t.length>0;)t.shift()(o)}function O(t){this.excPtr=t,this.ptr=t-24,this.set_type=function(t){p[this.ptr+4>>2]=t},this.get_type=function(){return p[this.ptr+4>>2]},this.set_destructor=function(t){p[this.ptr+8>>2]=t},this.get_destructor=function(){return p[this.ptr+8>>2]},this.set_caught=function(t){t=t?1:0,m[this.ptr+12>>0]=t},this.get_caught=function(){return 0!=m[this.ptr+12>>0]},this.set_rethrown=function(t){t=t?1:0,m[this.ptr+13>>0]=t},this.get_rethrown=function(){return 0!=m[this.ptr+13>>0]},this.init=function(t,n){this.set_adjusted_ptr(0),this.set_type(t),this.set_destructor(n)},this.set_adjusted_ptr=function(t){p[this.ptr+16>>2]=t},this.get_adjusted_ptr=function(){return p[this.ptr+16>>2]},this.get_exception_ptr=function(){if(G(this.get_type()))return p[this.excPtr>>2];var t=this.get_adjusted_ptr();return 0!==t?t:this.excPtr}}function x(t){var n=f.buffer;try{return f.grow(t-n.byteLength+65535>>>16),v(),1}catch(t){}}function L(t){return o["_"+t]}S(N="wasmDbscan.wasm")||(b=N,N=o.locateFile?o.locateFile(b,l):l+b);var R="undefined"!=typeof TextDecoder?new TextDecoder("utf8"):void 0;function F(t,n,e,r,o){var i={string:t=>{var n=0;return null!=t&&0!==t&&(n=function(t){var n=function(t){for(var n=0,e=0;e<t.length;++e){var r=t.charCodeAt(e);r<=127?n++:r<=2047?n+=2:r>=55296&&r<=57343?(n+=4,++e):n+=3}return n}(t)+1,e=V(n);return function(t,n,e){!function(t,n,e,r){if(!(r>0))return 0;for(var o=e+r-1,i=0;i<t.length;++i){var s=t.charCodeAt(i);if(s>=55296&&s<=57343&&(s=65536+((1023&s)<<10)|1023&t.charCodeAt(++i)),s<=127){if(e>=o)break;n[e++]=s}else if(s<=2047){if(e+1>=o)break;n[e++]=192|s>>6,n[e++]=128|63&s}else if(s<=65535){if(e+2>=o)break;n[e++]=224|s>>12,n[e++]=128|s>>6&63,n[e++]=128|63&s}else{if(e+3>=o)break;n[e++]=240|s>>18,n[e++]=128|s>>12&63,n[e++]=128|s>>6&63,n[e++]=128|63&s}}n[e]=0}(t,d,n,e)}(t,e,n),e}(t)),n},array:t=>{var n,e,r=V(t.length);return n=t,e=r,m.set(n,e),r}},s=L(t),a=[],u=0;if(r)for(var l=0;l<r.length;l++){var c=i[e[l]];c?(0===u&&(u=k()),a[l]=c(r[l])):a[l]=r[l]}var f=s.apply(null,a);return function(t){return 0!==u&&B(u),function(t){return"string"===n?(e=t)?function(t,n,e){for(var r=n+e,o=n;t[o]&&!(o>=r);)++o;if(o-n>16&&t.buffer&&R)return R.decode(t.subarray(n,o));for(var i="";n<o;){var s=t[n++];if(128&s){var a=63&t[n++];if(192!=(224&s)){var u=63&t[n++];if((s=224==(240&s)?(15&s)<<12|a<<6|u:(7&s)<<18|a<<12|u<<6|63&t[n++])<65536)i+=String.fromCharCode(s);else{var l=s-65536;i+=String.fromCharCode(55296|l>>10,56320|1023&l)}}else i+=String.fromCharCode((31&s)<<6|a)}else i+=String.fromCharCode(s)}return i}(d,e,r):"":"boolean"===n?Boolean(t):t;var e,r}(t)}(f)}var U,D={__cxa_throw:function(t,n,e){throw new O(t).init(n,e),t},abort:function(){C("")},emscripten_memcpy_big:function(t,n,e){d.copyWithin(t,n,n+e)},emscripten_resize_heap:function(t){var n,e=d.length,r=2147483648;if((t>>>=0)>r)return!1;for(var o=1;o<=4;o*=2){var i=e*(1+.2/o);if(i=Math.min(i,t+100663296),x(Math.min(r,(n=Math.max(t,i))+(65536-n%65536)%65536)))return!0}return!1}},k=(function(){var t,n,r,i,s={env:D,wasi_snapshot_preview1:D};function a(t,n){var e,r=t.exports;return o.asm=r,f=o.asm.memory,v(),o.asm.__indirect_function_table,e=o.asm.__wasm_call_ctors,w.unshift(e),function(t){if(A--,o.monitorRunDependencies&&o.monitorRunDependencies(A),0==A&&(null!==_&&(clearInterval(_),_=null),I)){var n=I;I=null,n()}}(),r}if(A++,o.monitorRunDependencies&&o.monitorRunDependencies(A),o.instantiateWasm)try{return o.instantiateWasm(s,a)}catch(t){h("Module.instantiateWasm callback failed with error: "+t),e(t)}(t=c,n=N,r=s,i=function(t){a(t.instance)},t||"function"!=typeof WebAssembly.instantiateStreaming||S(n)||"function"!=typeof fetch?T(n,r,i):fetch(n,{credentials:"same-origin"}).then((function(t){return WebAssembly.instantiateStreaming(t,r).then(i,(function(t){return h("wasm streaming compile failed: "+t),h("falling back to ArrayBuffer instantiation"),T(n,r,i)}))}))).catch(e)}(),o._dbscan=function(){return(o._dbscan=o.asm.dbscan).apply(null,arguments)},o._malloc=function(){return(o._malloc=o.asm.malloc).apply(null,arguments)},o._free=function(){return(o._free=o.asm.free).apply(null,arguments)},function(){return(k=o.asm.stackSave).apply(null,arguments)}),B=function(){return(B=o.asm.stackRestore).apply(null,arguments)},V=function(){return(V=o.asm.stackAlloc).apply(null,arguments)},G=function(){return(G=o.asm.__cxa_is_pointer_type).apply(null,arguments)};function q(){function t(){U||(U=!0,o.calledRun=!0,g||(P(w),n(o),o.onRuntimeInitialized&&o.onRuntimeInitialized(),function(){if(o.postRun)for("function"==typeof o.postRun&&(o.postRun=[o.postRun]);o.postRun.length;)t=o.postRun.shift(),E.unshift(t);var t;P(E)}()))}A>0||(function(){if(o.preRun)for("function"==typeof o.preRun&&(o.preRun=[o.preRun]);o.preRun.length;)t=o.preRun.shift(),y.unshift(t);var t;P(y)}(),A>0||(o.setStatus?(o.setStatus("Running..."),setTimeout((function(){setTimeout((function(){o.setStatus("")}),1),t()}),1)):t()))}if(o.ccall=F,o.cwrap=function(t,n,e,r){var o=!e||e.every((t=>"number"===t||"boolean"===t));return"string"!==n&&o&&!r?L(t):function(){return F(t,n,e,arguments)}},I=function t(){U||q(),U||(I=t)},o.preInit)for("function"==typeof o.preInit&&(o.preInit=[o.preInit]);o.preInit.length>0;)o.preInit.pop()();return q(),t.ready});"object"==typeof exports?t.exports=o:"function"==typeof define&&e.amdO?define([],(function(){return o})):"object"==typeof exports&&(exports.exportCppDbscanLib=o)},9414:(t,n,e)=>{"use strict";e.d(n,{Z:()=>a});var r=e(7537),o=e.n(r),i=e(3645),s=e.n(i)()(o());s.push([t.id,".scatter_plot_link {\n position: absolute!important;\n right: 10px;\n}\n\n.cliffs_grid {\n top: 10px;\n}\n\n.show_only_cliffs {\n top: 30px;\n}\n\n.ml-dim-reduction-settings-input i.grok-icon.grok-font-icon-settings {\n font-size: 18px;\n position: absolute;\n height: 28px;\n}\n\n.ml-dim-reduction-column-editor-input-root label {\n display: none !important;\n}\n\n.ml-dim-reduction-column-editor-input-root input, .ml-dim-reduction-column-editor-input-root select {\n margin-left: 20px !important;\n}\n\nh3.ml-dim-reduction-column-editor-input-root {\n margin: 0 !important;\n}\n\n.ml-dim-reduction-column-editor-root, .ml-dim-reduction-column-editor-header-root {\n display: flex;\n flex-direction: row;\n align-items: center;\n margin-bottom: 10px !important;\n width: 600px !important;\n}\n\n.ml-dim-reduction-column-editor-column-title {\n text-overflow: ellipsis;\n overflow: hidden;\n}\n\n.ml-dim-reduction-column-editor-header-root > h1:not(:first-child) {\n margin-left: 20px !important;\n}","",{version:3,sources:["webpack://./node_modules/@datagrok-libraries/ml/css/styles.css"],names:[],mappings:"AAAA;IACI,4BAA4B;IAC5B,WAAW;AACf;;AAEA;IACI,SAAS;AACb;;AAEA;IACI,SAAS;AACb;;AAEA;IACI,eAAe;IACf,kBAAkB;IAClB,YAAY;AAChB;;AAEA;IACI,wBAAwB;AAC5B;;AAEA;IACI,4BAA4B;AAChC;;AAEA;IACI,oBAAoB;AACxB;;AAEA;IACI,aAAa;IACb,mBAAmB;IACnB,mBAAmB;IACnB,8BAA8B;IAC9B,uBAAuB;AAC3B;;AAEA;IACI,uBAAuB;IACvB,gBAAgB;AACpB;;AAEA;IACI,4BAA4B;AAChC",sourcesContent:[".scatter_plot_link {\n position: absolute!important;\n right: 10px;\n}\n\n.cliffs_grid {\n top: 10px;\n}\n\n.show_only_cliffs {\n top: 30px;\n}\n\n.ml-dim-reduction-settings-input i.grok-icon.grok-font-icon-settings {\n font-size: 18px;\n position: absolute;\n height: 28px;\n}\n\n.ml-dim-reduction-column-editor-input-root label {\n display: none !important;\n}\n\n.ml-dim-reduction-column-editor-input-root input, .ml-dim-reduction-column-editor-input-root select {\n margin-left: 20px !important;\n}\n\nh3.ml-dim-reduction-column-editor-input-root {\n margin: 0 !important;\n}\n\n.ml-dim-reduction-column-editor-root, .ml-dim-reduction-column-editor-header-root {\n display: flex;\n flex-direction: row;\n align-items: center;\n margin-bottom: 10px !important;\n width: 600px !important;\n}\n\n.ml-dim-reduction-column-editor-column-title {\n text-overflow: ellipsis;\n overflow: hidden;\n}\n\n.ml-dim-reduction-column-editor-header-root > h1:not(:first-child) {\n margin-left: 20px !important;\n}"],sourceRoot:""}]);const a=s},3645:t=>{"use strict";t.exports=function(t){var n=[];return n.toString=function(){return this.map((function(n){var e="",r=void 0!==n[5];return n[4]&&(e+="@supports (".concat(n[4],") {")),n[2]&&(e+="@media ".concat(n[2]," {")),r&&(e+="@layer".concat(n[5].length>0?" ".concat(n[5]):""," {")),e+=t(n),r&&(e+="}"),n[2]&&(e+="}"),n[4]&&(e+="}"),e})).join("")},n.i=function(t,e,r,o,i){"string"==typeof t&&(t=[[null,t,void 0]]);var s={};if(r)for(var a=0;a<this.length;a++){var u=this[a][0];null!=u&&(s[u]=!0)}for(var l=0;l<t.length;l++){var c=[].concat(t[l]);r&&s[c[0]]||(void 0!==i&&(void 0===c[5]||(c[1]="@layer".concat(c[5].length>0?" ".concat(c[5]):""," {").concat(c[1],"}")),c[5]=i),e&&(c[2]?(c[1]="@media ".concat(c[2]," {").concat(c[1],"}"),c[2]=e):c[2]=e),o&&(c[4]?(c[1]="@supports (".concat(c[4],") {").concat(c[1],"}"),c[4]=o):c[4]="".concat(o)),n.push(c))}},n}},7537:t=>{"use strict";t.exports=function(t){var n=t[1],e=t[3];if(!e)return n;if("function"==typeof btoa){var r=btoa(unescape(encodeURIComponent(JSON.stringify(e)))),o="sourceMappingURL=data:application/json;charset=utf-8;base64,".concat(r),i="/*# ".concat(o," */");return[n].concat([i]).join("\n")}return[n].join("\n")}},2162:function(t){var n;t.exports=(n=function(t,n){var e=Array.prototype.concat,r=Array.prototype.slice,o=Object.prototype.toString;function i(n,e){var r=n>e?n:e;return t.pow(10,17-~~(t.log(r>0?r:-r)*t.LOG10E))}var s=Array.isArray||function(t){return"[object Array]"===o.call(t)};function a(t){return"[object Function]"===o.call(t)}function u(t){return"number"==typeof t&&t-t==0}function l(){return new l._init(arguments)}function c(){return 0}function f(){return 1}function h(t,n){return t===n?1:0}l.fn=l.prototype,l._init=function(t){if(s(t[0]))if(s(t[0][0])){a(t[1])&&(t[0]=l.map(t[0],t[1]));for(var n=0;n<t[0].length;n++)this[n]=t[0][n];this.length=t[0].length}else this[0]=a(t[1])?l.map(t[0],t[1]):t[0],this.length=1;else if(u(t[0]))this[0]=l.seq.apply(null,t),this.length=1;else{if(t[0]instanceof l)return l(t[0].toArray());this[0]=[],this.length=1}return this},l._init.prototype=l.prototype,l._init.constructor=l,l.utils={calcRdx:i,isArray:s,isFunction:a,isNumber:u,toVector:function(t){return e.apply([],t)}},l._random_fn=t.random,l.setRandom=function(t){if("function"!=typeof t)throw new TypeError("fn is not a function");l._random_fn=t},l.extend=function(t){var n,e;if(1===arguments.length){for(e in t)l[e]=t[e];return this}for(n=1;n<arguments.length;n++)for(e in arguments[n])t[e]=arguments[n][e];return t},l.rows=function(t){return t.length||1},l.cols=function(t){return t[0].length||1},l.dimensions=function(t){return{rows:l.rows(t),cols:l.cols(t)}},l.row=function(t,n){return s(n)?n.map((function(n){return l.row(t,n)})):t[n]},l.rowa=function(t,n){return l.row(t,n)},l.col=function(t,n){if(s(n)){var e=l.arange(t.length).map((function(){return new Array(n.length)}));return n.forEach((function(n,r){l.arange(t.length).forEach((function(o){e[o][r]=t[o][n]}))})),e}for(var r=new Array(t.length),o=0;o<t.length;o++)r[o]=[t[o][n]];return r},l.cola=function(t,n){return l.col(t,n).map((function(t){return t[0]}))},l.diag=function(t){for(var n=l.rows(t),e=new Array(n),r=0;r<n;r++)e[r]=[t[r][r]];return e},l.antidiag=function(t){for(var n=l.rows(t)-1,e=new Array(n),r=0;n>=0;n--,r++)e[r]=[t[r][n]];return e},l.transpose=function(t){var n,e,r,o,i,a=[];for(s(t[0])||(t=[t]),e=t.length,r=t[0].length,i=0;i<r;i++){for(n=new Array(e),o=0;o<e;o++)n[o]=t[o][i];a.push(n)}return 1===a.length?a[0]:a},l.map=function(t,n,e){var r,o,i,a,u;for(s(t[0])||(t=[t]),o=t.length,i=t[0].length,a=e?t:new Array(o),r=0;r<o;r++)for(a[r]||(a[r]=new Array(i)),u=0;u<i;u++)a[r][u]=n(t[r][u],r,u);return 1===a.length?a[0]:a},l.cumreduce=function(t,n,e){var r,o,i,a,u;for(s(t[0])||(t=[t]),o=t.length,i=t[0].length,a=e?t:new Array(o),r=0;r<o;r++)for(a[r]||(a[r]=new Array(i)),i>0&&(a[r][0]=t[r][0]),u=1;u<i;u++)a[r][u]=n(a[r][u-1],t[r][u]);return 1===a.length?a[0]:a},l.alter=function(t,n){return l.map(t,n,!0)},l.create=function(t,n,e){var r,o,i=new Array(t);for(a(n)&&(e=n,n=t),r=0;r<t;r++)for(i[r]=new Array(n),o=0;o<n;o++)i[r][o]=e(r,o);return i},l.zeros=function(t,n){return u(n)||(n=t),l.create(t,n,c)},l.ones=function(t,n){return u(n)||(n=t),l.create(t,n,f)},l.rand=function(t,n){return u(n)||(n=t),l.create(t,n,l._random_fn)},l.identity=function(t,n){return u(n)||(n=t),l.create(t,n,h)},l.symmetric=function(t){var n,e,r=t.length;if(t.length!==t[0].length)return!1;for(n=0;n<r;n++)for(e=0;e<r;e++)if(t[e][n]!==t[n][e])return!1;return!0},l.clear=function(t){return l.alter(t,c)},l.seq=function(t,n,e,r){a(r)||(r=!1);var o,s=[],u=i(t,n),l=(n*u-t*u)/((e-1)*u),c=t;for(o=0;c<=n&&o<e;c=(t*u+l*u*++o)/u)s.push(r?r(c,o):c);return s},l.arange=function(t,e,r){var o,i=[];if(r=r||1,e===n&&(e=t,t=0),t===e||0===r)return[];if(t<e&&r<0)return[];if(t>e&&r>0)return[];if(r>0)for(o=t;o<e;o+=r)i.push(o);else for(o=t;o>e;o+=r)i.push(o);return i},l.slice=function(){function t(t,e,r,o){var i,s=[],a=t.length;if(e===n&&r===n&&o===n)return l.copy(t);if(o=o||1,(e=(e=e||0)>=0?e:a+e)===(r=(r=r||t.length)>=0?r:a+r)||0===o)return[];if(e<r&&o<0)return[];if(e>r&&o>0)return[];if(o>0)for(i=e;i<r;i+=o)s.push(t[i]);else for(i=e;i>r;i+=o)s.push(t[i]);return s}return function(n,e){var r,o;return u((e=e||{}).row)?u(e.col)?n[e.row][e.col]:t(l.rowa(n,e.row),(r=e.col||{}).start,r.end,r.step):u(e.col)?t(l.cola(n,e.col),(o=e.row||{}).start,o.end,o.step):(o=e.row||{},r=e.col||{},t(n,o.start,o.end,o.step).map((function(n){return t(n,r.start,r.end,r.step)})))}}(),l.sliceAssign=function(e,r,o){var i,s;if(u(r.row)){if(u(r.col))return e[r.row][r.col]=o;r.col=r.col||{},r.col.start=r.col.start||0,r.col.end=r.col.end||e[0].length,r.col.step=r.col.step||1,i=l.arange(r.col.start,t.min(e.length,r.col.end),r.col.step);var a=r.row;return i.forEach((function(t,n){e[a][t]=o[n]})),e}if(u(r.col)){r.row=r.row||{},r.row.start=r.row.start||0,r.row.end=r.row.end||e.length,r.row.step=r.row.step||1,s=l.arange(r.row.start,t.min(e[0].length,r.row.end),r.row.step);var c=r.col;return s.forEach((function(t,n){e[t][c]=o[n]})),e}return o[0].length===n&&(o=[o]),r.row.start=r.row.start||0,r.row.end=r.row.end||e.length,r.row.step=r.row.step||1,r.col.start=r.col.start||0,r.col.end=r.col.end||e[0].length,r.col.step=r.col.step||1,s=l.arange(r.row.start,t.min(e.length,r.row.end),r.row.step),i=l.arange(r.col.start,t.min(e[0].length,r.col.end),r.col.step),s.forEach((function(t,n){i.forEach((function(r,i){e[t][r]=o[n][i]}))})),e},l.diagonal=function(t){var n=l.zeros(t.length,t.length);return t.forEach((function(t,e){n[e][e]=t})),n},l.copy=function(t){return t.map((function(t){return u(t)?t:t.map((function(t){return t}))}))};var m=l.prototype;return m.length=0,m.push=Array.prototype.push,m.sort=Array.prototype.sort,m.splice=Array.prototype.splice,m.slice=Array.prototype.slice,m.toArray=function(){return this.length>1?r.call(this):r.call(this)[0]},m.map=function(t,n){return l(l.map(this,t,n))},m.cumreduce=function(t,n){return l(l.cumreduce(this,t,n))},m.alter=function(t){return l.alter(this,t),this},function(t){for(var n=0;n<t.length;n++)!function(t){m[t]=function(n){var e,r=this;return n?(setTimeout((function(){n.call(r,m[t].call(r))})),this):(e=l[t](this),s(e)?l(e):e)}}(t[n])}("transpose clear symmetric rows cols dimensions diag antidiag".split(" ")),function(t){for(var n=0;n<t.length;n++)!function(t){m[t]=function(n,e){var r=this;return e?(setTimeout((function(){e.call(r,m[t].call(r,n))})),this):l(l[t](this,n))}}(t[n])}("row col".split(" ")),function(t){for(var n=0;n<t.length;n++)!function(t){m[t]=function(){return l(l[t].apply(null,arguments))}}(t[n])}("create zeros ones rand identity".split(" ")),l}(Math),function(t,n){var e=t.utils.isFunction;function r(t,n){return t-n}function o(t,e,r){return n.max(e,n.min(t,r))}t.sum=function(t){for(var n=0,e=t.length;--e>=0;)n+=t[e];return n},t.sumsqrd=function(t){for(var n=0,e=t.length;--e>=0;)n+=t[e]*t[e];return n},t.sumsqerr=function(n){for(var e,r=t.mean(n),o=0,i=n.length;--i>=0;)o+=(e=n[i]-r)*e;return o},t.sumrow=function(t){for(var n=0,e=t.length;--e>=0;)n+=t[e];return n},t.product=function(t){for(var n=1,e=t.length;--e>=0;)n*=t[e];return n},t.min=function(t){for(var n=t[0],e=0;++e<t.length;)t[e]<n&&(n=t[e]);return n},t.max=function(t){for(var n=t[0],e=0;++e<t.length;)t[e]>n&&(n=t[e]);return n},t.unique=function(t){for(var n={},e=[],r=0;r<t.length;r++)n[t[r]]||(n[t[r]]=!0,e.push(t[r]));return e},t.mean=function(n){return t.sum(n)/n.length},t.meansqerr=function(n){return t.sumsqerr(n)/n.length},t.geomean=function(e){var r=e.map(n.log),o=t.mean(r);return n.exp(o)},t.median=function(t){var n=t.length,e=t.slice().sort(r);return 1&n?e[n/2|0]:(e[n/2-1]+e[n/2])/2},t.cumsum=function(n){return t.cumreduce(n,(function(t,n){return t+n}))},t.cumprod=function(n){return t.cumreduce(n,(function(t,n){return t*n}))},t.diff=function(t){var n,e=[],r=t.length;for(n=1;n<r;n++)e.push(t[n]-t[n-1]);return e},t.rank=function(t){var n,e=[],o={};for(n=0;n<t.length;n++)o[u=t[n]]?o[u]++:(o[u]=1,e.push(u));var i=e.sort(r),s={},a=1;for(n=0;n<i.length;n++){var u,l=o[u=i[n]],c=(a+(a+l-1))/2;s[u]=c,a+=l}return t.map((function(t){return s[t]}))},t.mode=function(t){var n,e=t.length,o=t.slice().sort(r),i=1,s=0,a=0,u=[];for(n=0;n<e;n++)o[n]===o[n+1]?i++:(i>s?(u=[o[n]],s=i,a=0):i===s&&(u.push(o[n]),a++),i=1);return 0===a?u[0]:u},t.range=function(n){return t.max(n)-t.min(n)},t.variance=function(n,e){return t.sumsqerr(n)/(n.length-(e?1:0))},t.pooledvariance=function(n){return n.reduce((function(n,e){return n+t.sumsqerr(e)}),0)/(n.reduce((function(t,n){return t+n.length}),0)-n.length)},t.deviation=function(n){for(var e=t.mean(n),r=n.length,o=new Array(r),i=0;i<r;i++)o[i]=n[i]-e;return o},t.stdev=function(e,r){return n.sqrt(t.variance(e,r))},t.pooledstdev=function(e){return n.sqrt(t.pooledvariance(e))},t.meandev=function(e){for(var r=t.mean(e),o=[],i=e.length-1;i>=0;i--)o.push(n.abs(e[i]-r));return t.mean(o)},t.meddev=function(e){for(var r=t.median(e),o=[],i=e.length-1;i>=0;i--)o.push(n.abs(e[i]-r));return t.median(o)},t.coeffvar=function(n){return t.stdev(n)/t.mean(n)},t.quartiles=function(t){var e=t.length,o=t.slice().sort(r);return[o[n.round(e/4)-1],o[n.round(e/2)-1],o[n.round(3*e/4)-1]]},t.quantiles=function(t,e,i,s){var a,u,l,c,f,h=t.slice().sort(r),m=[e.length],d=t.length;for(void 0===i&&(i=3/8),void 0===s&&(s=3/8),a=0;a<e.length;a++)l=d*(u=e[a])+(i+u*(1-i-s)),c=n.floor(o(l,1,d-1)),f=o(l-c,0,1),m[a]=(1-f)*h[c-1]+f*h[c];return m},t.percentile=function(t,n,e){var o=t.slice().sort(r),i=n*(o.length+(e?1:-1))+(e?0:1),s=parseInt(i),a=i-s;return s+1<o.length?o[s-1]+a*(o[s]-o[s-1]):o[s-1]},t.percentileOfScore=function(t,n,e){var r,o,i=0,s=t.length,a=!1;for("strict"===e&&(a=!0),o=0;o<s;o++)r=t[o],(a&&r<n||!a&&r<=n)&&i++;return i/s},t.histogram=function(e,r){r=r||4;var o,i=t.min(e),s=(t.max(e)-i)/r,a=e.length,u=[];for(o=0;o<r;o++)u[o]=0;for(o=0;o<a;o++)u[n.min(n.floor((e[o]-i)/s),r-1)]+=1;return u},t.covariance=function(n,e){var r,o=t.mean(n),i=t.mean(e),s=n.length,a=new Array(s);for(r=0;r<s;r++)a[r]=(n[r]-o)*(e[r]-i);return t.sum(a)/(s-1)},t.corrcoeff=function(n,e){return t.covariance(n,e)/t.stdev(n,1)/t.stdev(e,1)},t.spearmancoeff=function(n,e){return n=t.rank(n),e=t.rank(e),t.corrcoeff(n,e)},t.stanMoment=function(e,r){for(var o=t.mean(e),i=t.stdev(e),s=e.length,a=0,u=0;u<s;u++)a+=n.pow((e[u]-o)/i,r);return a/e.length},t.skewness=function(n){return t.stanMoment(n,3)},t.kurtosis=function(n){return t.stanMoment(n,4)-3};var i=t.prototype;!function(n){for(var r=0;r<n.length;r++)!function(n){i[n]=function(r,o){var s=[],a=0,u=this;if(e(r)&&(o=r,r=!1),o)return setTimeout((function(){o.call(u,i[n].call(u,r))})),this;if(this.length>1){for(u=!0===r?this:this.transpose();a<u.length;a++)s[a]=t[n](u[a]);return s}return t[n](this[0],r)}}(n[r])}("cumsum cumprod".split(" ")),function(n){for(var r=0;r<n.length;r++)!function(n){i[n]=function(r,o){var s=[],a=0,u=this;if(e(r)&&(o=r,r=!1),o)return setTimeout((function(){o.call(u,i[n].call(u,r))})),this;if(this.length>1){for("sumrow"!==n&&(u=!0===r?this:this.transpose());a<u.length;a++)s[a]=t[n](u[a]);return!0===r?t[n](t.utils.toVector(s)):s}return t[n](this[0],r)}}(n[r])}("sum sumsqrd sumsqerr sumrow product min max unique mean meansqerr geomean median diff rank mode range variance deviation stdev meandev meddev coeffvar quartiles histogram skewness kurtosis".split(" ")),function(n){for(var r=0;r<n.length;r++)!function(n){i[n]=function(){var r,o=[],s=0,a=this,u=Array.prototype.slice.call(arguments);if(e(u[u.length-1])){r=u[u.length-1];var l=u.slice(0,u.length-1);return setTimeout((function(){r.call(a,i[n].apply(a,l))})),this}r=void 0;var c=function(e){return t[n].apply(a,[e].concat(u))};if(this.length>1){for(a=a.transpose();s<a.length;s++)o[s]=c(a[s]);return o}return c(this[0])}}(n[r])}("quantiles percentileOfScore".split(" "))}(n,Math),function(t,n){t.gammaln=function(t){var e,r,o,i=0,s=[76.18009172947146,-86.50532032941678,24.01409824083091,-1.231739572450155,.001208650973866179,-5395239384953e-18],a=1.000000000190015;for(o=(r=e=t)+5.5,o-=(e+.5)*n.log(o);i<6;i++)a+=s[i]/++r;return n.log(2.5066282746310007*a/e)-o},t.loggam=function(t){var e,r,o,i,s,a,u,l=[.08333333333333333,-.002777777777777778,.0007936507936507937,-.0005952380952380952,.0008417508417508418,-.001917526917526918,.00641025641025641,-.02955065359477124,.1796443723688307,-1.3924322169059];if(e=t,u=0,1==t||2==t)return 0;for(t<=7&&(e=t+(u=n.floor(7-t))),r=1/(e*e),o=2*n.PI,s=l[9],a=8;a>=0;a--)s*=r,s+=l[a];if(i=s/e+.5*n.log(o)+(e-.5)*n.log(e)-e,t<=7)for(a=1;a<=u;a++)i-=n.log(e-1),e-=1;return i},t.gammafn=function(t){var e,r,o,i,s=[-1.716185138865495,24.76565080557592,-379.80425647094563,629.3311553128184,866.9662027904133,-31451.272968848367,-36144.413418691176,66456.14382024054],a=[-30.8402300119739,315.35062697960416,-1015.1563674902192,-3107.771671572311,22538.11842098015,4755.846277527881,-134659.9598649693,-115132.2596755535],u=!1,l=0,c=0,f=0,h=t;if(t>171.6243769536076)return 1/0;if(h<=0){if(!(i=h%1+36e-17))return 1/0;u=(1&h?-1:1)*n.PI/n.sin(n.PI*i),h=1-h}for(o=h,r=h<1?h++:(h-=l=(0|h)-1)-1,e=0;e<8;++e)f=(f+s[e])*r,c=c*r+a[e];if(i=f/c+1,o<h)i/=o;else if(o>h)for(e=0;e<l;++e)i*=h,h++;return u&&(i=u/i),i},t.gammap=function(n,e){return t.lowRegGamma(n,e)*t.gammafn(n)},t.lowRegGamma=function(e,r){var o,i=t.gammaln(e),s=e,a=1/e,u=a,l=r+1-e,c=1/1e-30,f=1/l,h=f,m=1,d=-~(8.5*n.log(e>=1?e:1/e)+.4*e+17);if(r<0||e<=0)return NaN;if(r<e+1){for(;m<=d;m++)a+=u*=r/++s;return a*n.exp(-r+e*n.log(r)-i)}for(;m<=d;m++)h*=(f=1/(f=(o=-m*(m-e))*f+(l+=2)))*(c=l+o/c);return 1-h*n.exp(-r+e*n.log(r)-i)},t.factorialln=function(n){return n<0?NaN:t.gammaln(n+1)},t.factorial=function(n){return n<0?NaN:t.gammafn(n+1)},t.combination=function(e,r){return e>170||r>170?n.exp(t.combinationln(e,r)):t.factorial(e)/t.factorial(r)/t.factorial(e-r)},t.combinationln=function(n,e){return t.factorialln(n)-t.factorialln(e)-t.factorialln(n-e)},t.permutation=function(n,e){return t.factorial(n)/t.factorial(n-e)},t.betafn=function(e,r){if(!(e<=0||r<=0))return e+r>170?n.exp(t.betaln(e,r)):t.gammafn(e)*t.gammafn(r)/t.gammafn(e+r)},t.betaln=function(n,e){return t.gammaln(n)+t.gammaln(e)-t.gammaln(n+e)},t.betacf=function(t,e,r){var o,i,s,a,u=1e-30,l=1,c=e+r,f=e+1,h=e-1,m=1,d=1-c*t/f;for(n.abs(d)<u&&(d=u),a=d=1/d;l<=100&&(d=1+(i=l*(r-l)*t/((h+(o=2*l))*(e+o)))*d,n.abs(d)<u&&(d=u),m=1+i/m,n.abs(m)<u&&(m=u),a*=(d=1/d)*m,d=1+(i=-(e+l)*(c+l)*t/((e+o)*(f+o)))*d,n.abs(d)<u&&(d=u),m=1+i/m,n.abs(m)<u&&(m=u),a*=s=(d=1/d)*m,!(n.abs(s-1)<3e-7));l++);return a},t.gammapinv=function(e,r){var o,i,s,a,u,l,c=0,f=r-1,h=t.gammaln(r);if(e>=1)return n.max(100,r+100*n.sqrt(r));if(e<=0)return 0;for(r>1?(u=n.log(f),l=n.exp(f*(u-1)-h),a=e<.5?e:1-e,o=(2.30753+.27061*(i=n.sqrt(-2*n.log(a))))/(1+i*(.99229+.04481*i))-i,e<.5&&(o=-o),o=n.max(.001,r*n.pow(1-1/(9*r)-o/(3*n.sqrt(r)),3))):o=e<(i=1-r*(.253+.12*r))?n.pow(e/i,1/r):1-n.log(1-(e-i)/(1-i));c<12;c++){if(o<=0)return 0;if((o-=i=(s=(t.lowRegGamma(r,o)-e)/(i=r>1?l*n.exp(-(o-f)+f*(n.log(o)-u)):n.exp(-o+f*n.log(o)-h)))/(1-.5*n.min(1,s*((r-1)/o-1))))<=0&&(o=.5*(o+i)),n.abs(i)<1e-8*o)break}return o},t.erf=function(t){var e,r,o,i,s=[-1.3026537197817094,.6419697923564902,.019476473204185836,-.00956151478680863,-.000946595344482036,.000366839497852761,42523324806907e-18,-20278578112534e-18,-1624290004647e-18,130365583558e-17,1.5626441722e-8,-8.5238095915e-8,6.529054439e-9,5.059343495e-9,-9.91364156e-10,-2.27365122e-10,96467911e-18,2394038e-18,-6886027e-18,894487e-18,313092e-18,-112708e-18,381e-18,7106e-18,-1523e-18,-94e-18,121e-18,-28e-18],a=s.length-1,u=!1,l=0,c=0;for(t<0&&(t=-t,u=!0),r=4*(e=2/(2+t))-2;a>0;a--)o=l,l=r*l-c+s[a],c=o;return i=e*n.exp(-t*t+.5*(s[0]+r*l)-c),u?i-1:1-i},t.erfc=function(n){return 1-t.erf(n)},t.erfcinv=function(e){var r,o,i,s,a=0;if(e>=2)return-100;if(e<=0)return 100;for(s=e<1?e:2-e,r=-.70711*((2.30753+.27061*(i=n.sqrt(-2*n.log(s/2))))/(1+i*(.99229+.04481*i))-i);a<2;a++)r+=(o=t.erfc(r)-s)/(1.1283791670955126*n.exp(-r*r)-r*o);return e<1?r:-r},t.ibetainv=function(e,r,o){var i,s,a,u,l,c,f,h,m,d,p=r-1,g=o-1,v=0;if(e<=0)return 0;if(e>=1)return 1;for(r>=1&&o>=1?(a=e<.5?e:1-e,c=(2.30753+.27061*(u=n.sqrt(-2*n.log(a))))/(1+u*(.99229+.04481*u))-u,e<.5&&(c=-c),f=(c*c-3)/6,h=2/(1/(2*r-1)+1/(2*o-1)),m=c*n.sqrt(f+h)/h-(1/(2*o-1)-1/(2*r-1))*(f+5/6-2/(3*h)),c=r/(r+o*n.exp(2*m))):(i=n.log(r/(r+o)),s=n.log(o/(r+o)),c=e<(u=n.exp(r*i)/r)/(m=u+(l=n.exp(o*s)/o))?n.pow(r*m*e,1/r):1-n.pow(o*m*(1-e),1/o)),d=-t.gammaln(r)-t.gammaln(o)+t.gammaln(r+o);v<10;v++){if(0===c||1===c)return c;if((c-=u=(l=(t.ibeta(c,r,o)-e)/(u=n.exp(p*n.log(c)+g*n.log(1-c)+d)))/(1-.5*n.min(1,l*(p/c-g/(1-c)))))<=0&&(c=.5*(c+u)),c>=1&&(c=.5*(c+u+1)),n.abs(u)<1e-8*c&&v>0)break}return c},t.ibeta=function(e,r,o){var i=0===e||1===e?0:n.exp(t.gammaln(r+o)-t.gammaln(r)-t.gammaln(o)+r*n.log(e)+o*n.log(1-e));return!(e<0||e>1)&&(e<(r+1)/(r+o+2)?i*t.betacf(e,r,o)/r:1-i*t.betacf(1-e,o,r)/o)},t.randn=function(e,r){var o,i,s,a,u;if(r||(r=e),e)return t.create(e,r,(function(){return t.randn()}));do{o=t._random_fn(),i=1.7156*(t._random_fn()-.5),u=(s=o-.449871)*s+(a=n.abs(i)+.386595)*(.196*a-.25472*s)}while(u>.27597&&(u>.27846||i*i>-4*n.log(o)*o*o));return i/o},t.randg=function(e,r,o){var i,s,a,u,l,c,f=e;if(o||(o=r),e||(e=1),r)return(c=t.zeros(r,o)).alter((function(){return t.randg(e)})),c;e<1&&(e+=1),i=e-1/3,s=1/n.sqrt(9*i);do{do{u=1+s*(l=t.randn())}while(u<=0);u*=u*u,a=t._random_fn()}while(a>1-.331*n.pow(l,4)&&n.log(a)>.5*l*l+i*(1-u+n.log(u)));if(e==f)return i*u;do{a=t._random_fn()}while(0===a);return n.pow(a,1/f)*i*u},function(n){for(var e=0;e<n.length;e++)!function(n){t.fn[n]=function(){return t(t.map(this,(function(e){return t[n](e)})))}}(n[e])}("gammaln gammafn factorial factorialln".split(" ")),function(n){for(var e=0;e<n.length;e++)!function(n){t.fn[n]=function(){return t(t[n].apply(null,arguments))}}(n[e])}("randn".split(" "))}(n,Math),function(t,n){function e(t,e,r,o){for(var i,s=0,a=1,u=1,l=1,c=0,f=0;n.abs((u-f)/u)>o;)f=u,a=l+(i=-(e+c)*(e+r+c)*t/(e+2*c)/(e+2*c+1))*a,u=(s=u+i*s)+(i=(c+=1)*(r-c)*t/(e+2*c-1)/(e+2*c))*u,s/=l=a+i*l,a/=l,u/=l,l=1;return u/e}function r(e,r,o){var i=[.9815606342467192,.9041172563704749,.7699026741943047,.5873179542866175,.3678314989981802,.1252334085114689],s=[.04717533638651183,.10693932599531843,.16007832854334622,.20316742672306592,.2334925365383548,.24914704581340277],a=.5*e;if(a>=8)return 1;var u,l=2*t.normal.cdf(a,0,1,1,0)-1;l=l>=n.exp(-50/o)?n.pow(l,o):0;for(var c=a,f=(8-a)/(u=e>3?2:3),h=c+f,m=0,d=o-1,p=1;p<=u;p++){for(var g=0,v=.5*(h+c),y=.5*(h-c),w=1;w<=12;w++){var E,A=v+y*(6<w?i[(E=12-w+1)-1]:-i[(E=w)-1]),_=A*A;if(_>60)break;var I=2*t.normal.cdf(A,0,1,1,0)*.5-2*t.normal.cdf(A,e,1,1,0)*.5;I>=n.exp(-30/d)&&(g+=I=s[E-1]*n.exp(-.5*_)*n.pow(I,d))}m+=g*=2*y*o/n.sqrt(2*n.PI),c=h,h+=f}return(l+=m)<=n.exp(-30/r)?0:(l=n.pow(l,r))>=1?1:l}!function(n){for(var e=0;e<n.length;e++)!function(n){t[n]=function t(n,e,r){return this instanceof t?(this._a=n,this._b=e,this._c=r,this):new t(n,e,r)},t.fn[n]=function(e,r,o){var i=t[n](e,r,o);return i.data=this,i},t[n].prototype.sample=function(e){var r=this._a,o=this._b,i=this._c;return e?t.alter(e,(function(){return t[n].sample(r,o,i)})):t[n].sample(r,o,i)},function(e){for(var r=0;r<e.length;r++)!function(e){t[n].prototype[e]=function(r){var o=this._a,i=this._b,s=this._c;return r||0===r||(r=this.data),"number"!=typeof r?t.fn.map.call(r,(function(r){return t[n][e](r,o,i,s)})):t[n][e](r,o,i,s)}}(e[r])}("pdf cdf inv".split(" ")),function(e){for(var r=0;r<e.length;r++)!function(e){t[n].prototype[e]=function(){return t[n][e](this._a,this._b,this._c)}}(e[r])}("mean median mode variance".split(" "))}(n[e])}("beta centralF cauchy chisquare exponential gamma invgamma kumaraswamy laplace lognormal noncentralt normal pareto studentt weibull uniform binomial negbin hypgeom poisson triangular tukey arcsine".split(" ")),t.extend(t.beta,{pdf:function(e,r,o){return e>1||e<0?0:1==r&&1==o?1:r<512&&o<512?n.pow(e,r-1)*n.pow(1-e,o-1)/t.betafn(r,o):n.exp((r-1)*n.log(e)+(o-1)*n.log(1-e)-t.betaln(r,o))},cdf:function(n,e,r){return n>1||n<0?1*(n>1):t.ibeta(n,e,r)},inv:function(n,e,r){return t.ibetainv(n,e,r)},mean:function(t,n){return t/(t+n)},median:function(n,e){return t.ibetainv(.5,n,e)},mode:function(t,n){return(t-1)/(t+n-2)},sample:function(n,e){var r=t.randg(n);return r/(r+t.randg(e))},variance:function(t,e){return t*e/(n.pow(t+e,2)*(t+e+1))}}),t.extend(t.centralF,{pdf:function(e,r,o){var i;return e<0?0:r<=2?0===e&&r<2?1/0:0===e&&2===r?1:1/t.betafn(r/2,o/2)*n.pow(r/o,r/2)*n.pow(e,r/2-1)*n.pow(1+r/o*e,-(r+o)/2):(i=r*e/(o+e*r),r*(o/(o+e*r))/2*t.binomial.pdf((r-2)/2,(r+o-2)/2,i))},cdf:function(n,e,r){return n<0?0:t.ibeta(e*n/(e*n+r),e/2,r/2)},inv:function(n,e,r){return r/(e*(1/t.ibetainv(n,e/2,r/2)-1))},mean:function(t,n){return n>2?n/(n-2):void 0},mode:function(t,n){return t>2?n*(t-2)/(t*(n+2)):void 0},sample:function(n,e){return 2*t.randg(n/2)/n/(2*t.randg(e/2)/e)},variance:function(t,n){if(!(n<=4))return 2*n*n*(t+n-2)/(t*(n-2)*(n-2)*(n-4))}}),t.extend(t.cauchy,{pdf:function(t,e,r){return r<0?0:r/(n.pow(t-e,2)+n.pow(r,2))/n.PI},cdf:function(t,e,r){return n.atan((t-e)/r)/n.PI+.5},inv:function(t,e,r){return e+r*n.tan(n.PI*(t-.5))},median:function(t){return t},mode:function(t){return t},sample:function(e,r){return t.randn()*n.sqrt(1/(2*t.randg(.5)))*r+e}}),t.extend(t.chisquare,{pdf:function(e,r){return e<0?0:0===e&&2===r?.5:n.exp((r/2-1)*n.log(e)-e/2-r/2*n.log(2)-t.gammaln(r/2))},cdf:function(n,e){return n<0?0:t.lowRegGamma(e/2,n/2)},inv:function(n,e){return 2*t.gammapinv(n,.5*e)},mean:function(t){return t},median:function(t){return t*n.pow(1-2/(9*t),3)},mode:function(t){return t-2>0?t-2:0},sample:function(n){return 2*t.randg(n/2)},variance:function(t){return 2*t}}),t.extend(t.exponential,{pdf:function(t,e){return t<0?0:e*n.exp(-e*t)},cdf:function(t,e){return t<0?0:1-n.exp(-e*t)},inv:function(t,e){return-n.log(1-t)/e},mean:function(t){return 1/t},median:function(t){return 1/t*n.log(2)},mode:function(){return 0},sample:function(e){return-1/e*n.log(t._random_fn())},variance:function(t){return n.pow(t,-2)}}),t.extend(t.gamma,{pdf:function(e,r,o){return e<0?0:0===e&&1===r?1/o:n.exp((r-1)*n.log(e)-e/o-t.gammaln(r)-r*n.log(o))},cdf:function(n,e,r){return n<0?0:t.lowRegGamma(e,n/r)},inv:function(n,e,r){return t.gammapinv(n,e)*r},mean:function(t,n){return t*n},mode:function(t,n){if(t>1)return(t-1)*n},sample:function(n,e){return t.randg(n)*e},variance:function(t,n){return t*n*n}}),t.extend(t.invgamma,{pdf:function(e,r,o){return e<=0?0:n.exp(-(r+1)*n.log(e)-o/e-t.gammaln(r)+r*n.log(o))},cdf:function(n,e,r){return n<=0?0:1-t.lowRegGamma(e,r/n)},inv:function(n,e,r){return r/t.gammapinv(1-n,e)},mean:function(t,n){return t>1?n/(t-1):void 0},mode:function(t,n){return n/(t+1)},sample:function(n,e){return e/t.randg(n)},variance:function(t,n){if(!(t<=2))return n*n/((t-1)*(t-1)*(t-2))}}),t.extend(t.kumaraswamy,{pdf:function(t,e,r){return 0===t&&1===e?r:1===t&&1===r?e:n.exp(n.log(e)+n.log(r)+(e-1)*n.log(t)+(r-1)*n.log(1-n.pow(t,e)))},cdf:function(t,e,r){return t<0?0:t>1?1:1-n.pow(1-n.pow(t,e),r)},inv:function(t,e,r){return n.pow(1-n.pow(1-t,1/r),1/e)},mean:function(n,e){return e*t.gammafn(1+1/n)*t.gammafn(e)/t.gammafn(1+1/n+e)},median:function(t,e){return n.pow(1-n.pow(2,-1/e),1/t)},mode:function(t,e){if(t>=1&&e>=1&&1!==t&&1!==e)return n.pow((t-1)/(t*e-1),1/t)},variance:function(){throw new Error("variance not yet implemented")}}),t.extend(t.lognormal,{pdf:function(t,e,r){return t<=0?0:n.exp(-n.log(t)-.5*n.log(2*n.PI)-n.log(r)-n.pow(n.log(t)-e,2)/(2*r*r))},cdf:function(e,r,o){return e<0?0:.5+.5*t.erf((n.log(e)-r)/n.sqrt(2*o*o))},inv:function(e,r,o){return n.exp(-1.4142135623730951*o*t.erfcinv(2*e)+r)},mean:function(t,e){return n.exp(t+e*e/2)},median:function(t){return n.exp(t)},mode:function(t,e){return n.exp(t-e*e)},sample:function(e,r){return n.exp(t.randn()*r+e)},variance:function(t,e){return(n.exp(e*e)-1)*n.exp(2*t+e*e)}}),t.extend(t.noncentralt,{pdf:function(e,r,o){return n.abs(o)<1e-14?t.studentt.pdf(e,r):n.abs(e)<1e-14?n.exp(t.gammaln((r+1)/2)-o*o/2-.5*n.log(n.PI*r)-t.gammaln(r/2)):r/e*(t.noncentralt.cdf(e*n.sqrt(1+2/r),r+2,o)-t.noncentralt.cdf(e,r,o))},cdf:function(e,r,o){var i=1e-14;if(n.abs(o)<i)return t.studentt.cdf(e,r);var s=!1;e<0&&(s=!0,o=-o);for(var a=t.normal.cdf(-o,0,1),u=i+1,l=u,c=e*e/(e*e+r),f=0,h=n.exp(-o*o/2),m=n.exp(-o*o/2-.5*n.log(2)-t.gammaln(1.5))*o;f<200||l>i||u>i;)l=u,f>0&&(h*=o*o/(2*f),m*=o*o/(2*(f+.5))),a+=.5*(u=h*t.beta.cdf(c,f+.5,r/2)+m*t.beta.cdf(c,f+1,r/2)),f++;return s?1-a:a}}),t.extend(t.normal,{pdf:function(t,e,r){return n.exp(-.5*n.log(2*n.PI)-n.log(r)-n.pow(t-e,2)/(2*r*r))},cdf:function(e,r,o){return.5*(1+t.erf((e-r)/n.sqrt(2*o*o)))},inv:function(n,e,r){return-1.4142135623730951*r*t.erfcinv(2*n)+e},mean:function(t){return t},median:function(t){return t},mode:function(t){return t},sample:function(n,e){return t.randn()*e+n},variance:function(t,n){return n*n}}),t.extend(t.pareto,{pdf:function(t,e,r){return t<e?0:r*n.pow(e,r)/n.pow(t,r+1)},cdf:function(t,e,r){return t<e?0:1-n.pow(e/t,r)},inv:function(t,e,r){return e/n.pow(1-t,1/r)},mean:function(t,e){if(!(e<=1))return e*n.pow(t,e)/(e-1)},median:function(t,e){return t*(e*n.SQRT2)},mode:function(t){return t},variance:function(t,e){if(!(e<=2))return t*t*e/(n.pow(e-1,2)*(e-2))}}),t.extend(t.studentt,{pdf:function(e,r){return r=r>1e100?1e100:r,1/(n.sqrt(r)*t.betafn(.5,r/2))*n.pow(1+e*e/r,-(r+1)/2)},cdf:function(e,r){var o=r/2;return t.ibeta((e+n.sqrt(e*e+r))/(2*n.sqrt(e*e+r)),o,o)},inv:function(e,r){var o=t.ibetainv(2*n.min(e,1-e),.5*r,.5);return o=n.sqrt(r*(1-o)/o),e>.5?o:-o},mean:function(t){return t>1?0:void 0},median:function(){return 0},mode:function(){return 0},sample:function(e){return t.randn()*n.sqrt(e/(2*t.randg(e/2)))},variance:function(t){return t>2?t/(t-2):t>1?1/0:void 0}}),t.extend(t.weibull,{pdf:function(t,e,r){return t<0||e<0||r<0?0:r/e*n.pow(t/e,r-1)*n.exp(-n.pow(t/e,r))},cdf:function(t,e,r){return t<0?0:1-n.exp(-n.pow(t/e,r))},inv:function(t,e,r){return e*n.pow(-n.log(1-t),1/r)},mean:function(n,e){return n*t.gammafn(1+1/e)},median:function(t,e){return t*n.pow(n.log(2),1/e)},mode:function(t,e){return e<=1?0:t*n.pow((e-1)/e,1/e)},sample:function(e,r){return e*n.pow(-n.log(t._random_fn()),1/r)},variance:function(e,r){return e*e*t.gammafn(1+2/r)-n.pow(t.weibull.mean(e,r),2)}}),t.extend(t.uniform,{pdf:function(t,n,e){return t<n||t>e?0:1/(e-n)},cdf:function(t,n,e){return t<n?0:t<e?(t-n)/(e-n):1},inv:function(t,n,e){return n+t*(e-n)},mean:function(t,n){return.5*(t+n)},median:function(n,e){return t.mean(n,e)},mode:function(){throw new Error("mode is not yet implemented")},sample:function(n,e){return n/2+e/2+(e/2-n/2)*(2*t._random_fn()-1)},variance:function(t,e){return n.pow(e-t,2)/12}}),t.extend(t.binomial,{pdf:function(e,r,o){return 0===o||1===o?r*o===e?1:0:t.combination(r,e)*n.pow(o,e)*n.pow(1-o,r-e)},cdf:function(r,o,i){var s,a=1e-10;if(r<0)return 0;if(r>=o)return 1;if(i<0||i>1||o<=0)return NaN;var u=i,l=(r=n.floor(r))+1,c=o-r,f=l+c,h=n.exp(t.gammaln(f)-t.gammaln(c)-t.gammaln(l)+l*n.log(u)+c*n.log(1-u));return s=u<(l+1)/(f+2)?h*e(u,l,c,a):1-h*e(1-u,c,l,a),n.round(1/a*(1-s))/(1/a)}}),t.extend(t.negbin,{pdf:function(e,r,o){return e===e>>>0&&(e<0?0:t.combination(e+r-1,r-1)*n.pow(1-o,e)*n.pow(o,r))},cdf:function(n,e,r){var o=0,i=0;if(n<0)return 0;for(;i<=n;i++)o+=t.negbin.pdf(i,e,r);return o}}),t.extend(t.hypgeom,{pdf:function(e,r,o,i){if(e!=e|0)return!1;if(e<0||e<o-(r-i))return 0;if(e>i||e>o)return 0;if(2*o>r)return 2*i>r?t.hypgeom.pdf(r-o-i+e,r,r-o,r-i):t.hypgeom.pdf(i-e,r,r-o,i);if(2*i>r)return t.hypgeom.pdf(o-e,r,o,r-i);if(o<i)return t.hypgeom.pdf(e,r,i,o);for(var s=1,a=0,u=0;u<e;u++){for(;s>1&&a<i;)s*=1-o/(r-a),a++;s*=(i-u)*(o-u)/((u+1)*(r-o-i+u+1))}for(;a<i;a++)s*=1-o/(r-a);return n.min(1,n.max(0,s))},cdf:function(e,r,o,i){if(e<0||e<o-(r-i))return 0;if(e>=i||e>=o)return 1;if(2*o>r)return 2*i>r?t.hypgeom.cdf(r-o-i+e,r,r-o,r-i):1-t.hypgeom.cdf(i-e-1,r,r-o,i);if(2*i>r)return 1-t.hypgeom.cdf(o-e-1,r,o,r-i);if(o<i)return t.hypgeom.cdf(e,r,i,o);for(var s=1,a=1,u=0,l=0;l<e;l++){for(;s>1&&u<i;){var c=1-o/(r-u);a*=c,s*=c,u++}s+=a*=(i-l)*(o-l)/((l+1)*(r-o-i+l+1))}for(;u<i;u++)s*=1-o/(r-u);return n.min(1,n.max(0,s))}}),t.extend(t.poisson,{pdf:function(e,r){return r<0||e%1!=0||e<0?0:n.pow(r,e)*n.exp(-r)/t.factorial(e)},cdf:function(n,e){var r=[],o=0;if(n<0)return 0;for(;o<=n;o++)r.push(t.poisson.pdf(o,e));return t.sum(r)},mean:function(t){return t},variance:function(t){return t},sampleSmall:function(e){var r=1,o=0,i=n.exp(-e);do{o++,r*=t._random_fn()}while(r>i);return o-1},sampleLarge:function(e){var r,o,i,s,a,u,l,c,f,h,m=e;for(s=n.sqrt(m),a=n.log(m),u=.02483*(l=.931+2.53*s)-.059,c=1.1239+1.1328/(l-3.4),f=.9277-3.6224/(l-2);;){if(o=n.random()-.5,i=n.random(),h=.5-n.abs(o),r=n.floor((2*u/h+l)*o+m+.43),h>=.07&&i<=f)return r;if(!(r<0||h<.013&&i>h)&&n.log(i)+n.log(c)-n.log(u/(h*h)+l)<=r*a-m-t.loggam(r+1))return r}},sample:function(t){return t<10?this.sampleSmall(t):this.sampleLarge(t)}}),t.extend(t.triangular,{pdf:function(t,n,e,r){return e<=n||r<n||r>e?NaN:t<n||t>e?0:t<r?2*(t-n)/((e-n)*(r-n)):t===r?2/(e-n):2*(e-t)/((e-n)*(e-r))},cdf:function(t,e,r,o){return r<=e||o<e||o>r?NaN:t<=e?0:t>=r?1:t<=o?n.pow(t-e,2)/((r-e)*(o-e)):1-n.pow(r-t,2)/((r-e)*(r-o))},inv:function(t,e,r,o){return r<=e||o<e||o>r?NaN:t<=(o-e)/(r-e)?e+(r-e)*n.sqrt(t*((o-e)/(r-e))):e+(r-e)*(1-n.sqrt((1-t)*(1-(o-e)/(r-e))))},mean:function(t,n,e){return(t+n+e)/3},median:function(t,e,r){return r<=(t+e)/2?e-n.sqrt((e-t)*(e-r))/n.sqrt(2):r>(t+e)/2?t+n.sqrt((e-t)*(r-t))/n.sqrt(2):void 0},mode:function(t,n,e){return e},sample:function(e,r,o){var i=t._random_fn();return i<(o-e)/(r-e)?e+n.sqrt(i*(r-e)*(o-e)):r-n.sqrt((1-i)*(r-e)*(r-o))},variance:function(t,n,e){return(t*t+n*n+e*e-t*n-t*e-n*e)/18}}),t.extend(t.arcsine,{pdf:function(t,e,r){return r<=e?NaN:t<=e||t>=r?0:2/n.PI*n.pow(n.pow(r-e,2)-n.pow(2*t-e-r,2),-.5)},cdf:function(t,e,r){return t<e?0:t<r?2/n.PI*n.asin(n.sqrt((t-e)/(r-e))):1},inv:function(t,e,r){return e+(.5-.5*n.cos(n.PI*t))*(r-e)},mean:function(t,n){return n<=t?NaN:(t+n)/2},median:function(t,n){return n<=t?NaN:(t+n)/2},mode:function(){throw new Error("mode is not yet implemented")},sample:function(e,r){return(e+r)/2+(r-e)/2*n.sin(2*n.PI*t.uniform.sample(0,1))},variance:function(t,e){return e<=t?NaN:n.pow(e-t,2)/8}}),t.extend(t.laplace,{pdf:function(t,e,r){return r<=0?0:n.exp(-n.abs(t-e)/r)/(2*r)},cdf:function(t,e,r){return r<=0?0:t<e?.5*n.exp((t-e)/r):1-.5*n.exp(-(t-e)/r)},mean:function(t){return t},median:function(t){return t},mode:function(t){return t},variance:function(t,n){return 2*n*n},sample:function(e,r){var o,i=t._random_fn()-.5;return e-r*((o=i)/n.abs(o))*n.log(1-2*n.abs(i))}}),t.extend(t.tukey,{cdf:function(e,o,i){var s=o,a=[.9894009349916499,.9445750230732326,.8656312023878318,.755404408355003,.6178762444026438,.45801677765722737,.2816035507792589,.09501250983763744],u=[.027152459411754096,.062253523938647894,.09515851168249279,.12462897125553388,.14959598881657674,.16915651939500254,.18260341504492358,.1894506104550685];if(e<=0)return 0;if(i<2||s<2)return NaN;if(!Number.isFinite(e))return 1;if(i>25e3)return r(e,1,s);var l,c=.5*i,f=c*n.log(i)-i*n.log(2)-t.gammaln(c),h=c-1,m=.25*i;l=i<=100?1:i<=800?.5:i<=5e3?.25:.125,f+=n.log(l);for(var d=0,p=1;p<=50;p++){for(var g=0,v=(2*p-1)*l,y=1;y<=16;y++){var w,E;8<y?(w=y-8-1,E=f+h*n.log(v+a[w]*l)-(a[w]*l+v)*m):(w=y-1,E=f+h*n.log(v-a[w]*l)+(a[w]*l-v)*m),E>=-30&&(g+=r(8<y?e*n.sqrt(.5*(a[w]*l+v)):e*n.sqrt(.5*(-a[w]*l+v)),1,s)*u[w]*n.exp(E))}if(p*l>=1&&g<=1e-14)break;d+=g}if(g>1e-14)throw new Error("tukey.cdf failed to converge");return d>1&&(d=1),d},inv:function(e,r,o){if(o<2||r<2)return NaN;if(e<0||e>1)return NaN;if(0===e)return 0;if(1===e)return 1/0;var i,s=function(t,e,r){var o=.5-.5*t,i=n.sqrt(n.log(1/(o*o))),s=i+((((-453642210148e-16*i-.204231210125)*i-.342242088547)*i-1)*i+.322232421088)/((((.0038560700634*i+.10353775285)*i+.531103462366)*i+.588581570495)*i+.099348462606);r<120&&(s+=(s*s*s+s)/r/4);var a=.8832-.2368*s;return r<120&&(a+=-1.214/r+1.208*s/r),s*(a*n.log(e-1)+1.4142)}(e,r,o),a=t.tukey.cdf(s,r,o)-e;i=a>0?n.max(0,s-1):s+1;for(var u,l=t.tukey.cdf(i,r,o)-e,c=1;c<50;c++)if(u=i-l*(i-s)/(l-a),a=l,s=i,u<0&&(u=0,l=-e),l=t.tukey.cdf(u,r,o)-e,i=u,n.abs(i-s)<1e-4)return u;throw new Error("tukey.inv failed to converge")}})}(n,Math),function(t,n){var e,r,o=Array.prototype.push,i=t.utils.isArray;function s(n){return i(n)||n instanceof t}t.extend({add:function(n,e){return s(e)?(s(e[0])||(e=[e]),t.map(n,(function(t,n,r){return t+e[n][r]}))):t.map(n,(function(t){return t+e}))},subtract:function(n,e){return s(e)?(s(e[0])||(e=[e]),t.map(n,(function(t,n,r){return t-e[n][r]||0}))):t.map(n,(function(t){return t-e}))},divide:function(n,e){return s(e)?(s(e[0])||(e=[e]),t.multiply(n,t.inv(e))):t.map(n,(function(t){return t/e}))},multiply:function(n,e){var r,o,i,a,u,l,c,f;if(void 0===n.length&&void 0===e.length)return n*e;if(u=n.length,l=n[0].length,c=t.zeros(u,i=s(e)?e[0].length:l),f=0,s(e)){for(;f<i;f++)for(r=0;r<u;r++){for(a=0,o=0;o<l;o++)a+=n[r][o]*e[o][f];c[r][f]=a}return 1===u&&1===f?c[0][0]:c}return t.map(n,(function(t){return t*e}))},outer:function(n,e){return t.multiply(n.map((function(t){return[t]})),[e])},dot:function(n,e){s(n[0])||(n=[n]),s(e[0])||(e=[e]);for(var r,o,i=1===n[0].length&&1!==n.length?t.transpose(n):n,a=1===e[0].length&&1!==e.length?t.transpose(e):e,u=[],l=0,c=i.length,f=i[0].length;l<c;l++){for(u[l]=[],r=0,o=0;o<f;o++)r+=i[l][o]*a[l][o];u[l]=r}return 1===u.length?u[0]:u},pow:function(e,r){return t.map(e,(function(t){return n.pow(t,r)}))},exp:function(e){return t.map(e,(function(t){return n.exp(t)}))},log:function(e){return t.map(e,(function(t){return n.log(t)}))},abs:function(e){return t.map(e,(function(t){return n.abs(t)}))},norm:function(t,e){var r=0,o=0;for(isNaN(e)&&(e=2),s(t[0])&&(t=t[0]);o<t.length;o++)r+=n.pow(n.abs(t[o]),e);return n.pow(r,1/e)},angle:function(e,r){return n.acos(t.dot(e,r)/(t.norm(e)*t.norm(r)))},aug:function(t,n){var e,r=[];for(e=0;e<t.length;e++)r.push(t[e].slice());for(e=0;e<r.length;e++)o.apply(r[e],n[e]);return r},inv:function(n){for(var e,r=n.length,o=n[0].length,i=t.identity(r,o),s=t.gauss_jordan(n,i),a=[],u=0;u<r;u++)for(a[u]=[],e=o;e<s[0].length;e++)a[u][e-o]=s[u][e];return a},det:function t(n){if(2===n.length)return n[0][0]*n[1][1]-n[0][1]*n[1][0];for(var e=0,r=0;r<n.length;r++){for(var o=[],i=1;i<n.length;i++){o[i-1]=[];for(var s=0;s<n.length;s++)s<r?o[i-1][s]=n[i][s]:s>r&&(o[i-1][s-1]=n[i][s])}var a=r%2?-1:1;e+=t(o)*n[0][r]*a}return e},gauss_elimination:function(e,r){var o,i,s,a,u=0,l=0,c=e.length,f=e[0].length,h=1,m=0,d=[];for(o=(e=t.aug(e,r))[0].length,u=0;u<c;u++){for(i=e[u][u],l=u,a=u+1;a<f;a++)i<n.abs(e[a][u])&&(i=e[a][u],l=a);if(l!=u)for(a=0;a<o;a++)s=e[u][a],e[u][a]=e[l][a],e[l][a]=s;for(l=u+1;l<c;l++)for(h=e[l][u]/e[u][u],a=u;a<o;a++)e[l][a]=e[l][a]-h*e[u][a]}for(u=c-1;u>=0;u--){for(m=0,l=u+1;l<=c-1;l++)m+=d[l]*e[u][l];d[u]=(e[u][o-1]-m)/e[u][u]}return d},gauss_jordan:function(e,r){var o,i,s,a=t.aug(e,r),u=a.length,l=a[0].length,c=0;for(i=0;i<u;i++){var f=i;for(s=i+1;s<u;s++)n.abs(a[s][i])>n.abs(a[f][i])&&(f=s);var h=a[i];for(a[i]=a[f],a[f]=h,s=i+1;s<u;s++)for(c=a[s][i]/a[i][i],o=i;o<l;o++)a[s][o]-=a[i][o]*c}for(i=u-1;i>=0;i--){for(c=a[i][i],s=0;s<i;s++)for(o=l-1;o>i-1;o--)a[s][o]-=a[i][o]*a[s][i]/c;for(a[i][i]/=c,o=u;o<l;o++)a[i][o]/=c}return a},triaUpSolve:function(n,e){var r,o=n[0].length,i=t.zeros(1,o)[0],s=!1;return null!=e[0].length&&(e=e.map((function(t){return t[0]})),s=!0),t.arange(o-1,-1,-1).forEach((function(s){r=t.arange(s+1,o).map((function(t){return i[t]*n[s][t]})),i[s]=(e[s]-t.sum(r))/n[s][s]})),s?i.map((function(t){return[t]})):i},triaLowSolve:function(n,e){var r,o=n[0].length,i=t.zeros(1,o)[0],s=!1;return null!=e[0].length&&(e=e.map((function(t){return t[0]})),s=!0),t.arange(o).forEach((function(o){r=t.arange(o).map((function(t){return n[o][t]*i[t]})),i[o]=(e[o]-t.sum(r))/n[o][o]})),s?i.map((function(t){return[t]})):i},lu:function(n){var e,r=n.length,o=t.identity(r),i=t.zeros(n.length,n[0].length);return t.arange(r).forEach((function(t){i[0][t]=n[0][t]})),t.arange(1,r).forEach((function(s){t.arange(s).forEach((function(r){e=t.arange(r).map((function(t){return o[s][t]*i[t][r]})),o[s][r]=(n[s][r]-t.sum(e))/i[r][r]})),t.arange(s,r).forEach((function(r){e=t.arange(s).map((function(t){return o[s][t]*i[t][r]})),i[s][r]=n[e.length][r]-t.sum(e)}))})),[o,i]},cholesky:function(e){var r,o=e.length,i=t.zeros(e.length,e[0].length);return t.arange(o).forEach((function(s){r=t.arange(s).map((function(t){return n.pow(i[s][t],2)})),i[s][s]=n.sqrt(e[s][s]-t.sum(r)),t.arange(s+1,o).forEach((function(n){r=t.arange(s).map((function(t){return i[s][t]*i[n][t]})),i[n][s]=(e[s][n]-t.sum(r))/i[s][s]}))})),i},gauss_jacobi:function(e,r,o,i){for(var s,a,u,l,c=0,f=0,h=e.length,m=[],d=[],p=[];c<h;c++)for(m[c]=[],d[c]=[],p[c]=[],f=0;f<h;f++)c>f?(m[c][f]=e[c][f],d[c][f]=p[c][f]=0):c<f?(d[c][f]=e[c][f],m[c][f]=p[c][f]=0):(p[c][f]=e[c][f],m[c][f]=d[c][f]=0);for(u=t.multiply(t.multiply(t.inv(p),t.add(m,d)),-1),a=t.multiply(t.inv(p),r),s=o,l=t.add(t.multiply(u,o),a),c=2;n.abs(t.norm(t.subtract(l,s)))>i;)s=l,l=t.add(t.multiply(u,s),a),c++;return l},gauss_seidel:function(e,r,o,i){for(var s,a,u,l,c,f=0,h=e.length,m=[],d=[],p=[];f<h;f++)for(m[f]=[],d[f]=[],p[f]=[],s=0;s<h;s++)f>s?(m[f][s]=e[f][s],d[f][s]=p[f][s]=0):f<s?(d[f][s]=e[f][s],m[f][s]=p[f][s]=0):(p[f][s]=e[f][s],m[f][s]=d[f][s]=0);for(l=t.multiply(t.multiply(t.inv(t.add(p,m)),d),-1),u=t.multiply(t.inv(t.add(p,m)),r),a=o,c=t.add(t.multiply(l,o),u),f=2;n.abs(t.norm(t.subtract(c,a)))>i;)a=c,c=t.add(t.multiply(l,a),u),f+=1;return c},SOR:function(e,r,o,i,s){for(var a,u,l,c,f,h=0,m=e.length,d=[],p=[],g=[];h<m;h++)for(d[h]=[],p[h]=[],g[h]=[],a=0;a<m;a++)h>a?(d[h][a]=e[h][a],p[h][a]=g[h][a]=0):h<a?(p[h][a]=e[h][a],d[h][a]=g[h][a]=0):(g[h][a]=e[h][a],d[h][a]=p[h][a]=0);for(c=t.multiply(t.inv(t.add(g,t.multiply(d,s))),t.subtract(t.multiply(g,1-s),t.multiply(p,s))),l=t.multiply(t.multiply(t.inv(t.add(g,t.multiply(d,s))),r),s),u=o,f=t.add(t.multiply(c,o),l),h=2;n.abs(t.norm(t.subtract(f,u)))>i;)u=f,f=t.add(t.multiply(c,u),l),h++;return f},householder:function(e){for(var r,o,i,s,a=e.length,u=e[0].length,l=0,c=[],f=[];l<a-1;l++){for(r=0,s=l+1;s<u;s++)r+=e[s][l]*e[s][l];for(r=(e[l+1][l]>0?-1:1)*n.sqrt(r),o=n.sqrt((r*r-e[l+1][l]*r)/2),(c=t.zeros(a,1))[l+1][0]=(e[l+1][l]-r)/(2*o),i=l+2;i<a;i++)c[i][0]=e[i][l]/(2*o);f=t.subtract(t.identity(a,u),t.multiply(t.multiply(c,t.transpose(c)),2)),e=t.multiply(f,t.multiply(e,f))}return e},QR:(e=t.sum,r=t.arange,function(o){var i,s,a,u=o.length,l=o[0].length,c=t.zeros(l,l);for(o=t.copy(o),s=0;s<l;s++){for(c[s][s]=n.sqrt(e(r(u).map((function(t){return o[t][s]*o[t][s]})))),i=0;i<u;i++)o[i][s]=o[i][s]/c[s][s];for(a=s+1;a<l;a++)for(c[s][a]=e(r(u).map((function(t){return o[t][s]*o[t][a]}))),i=0;i<u;i++)o[i][a]=o[i][a]-o[i][s]*c[s][a]}return[o,c]}),lstsq:function(n,e){var r=!1;void 0===e[0].length&&(e=e.map((function(t){return[t]})),r=!0);var o=t.QR(n),i=o[0],s=o[1],a=n[0].length,u=t.slice(i,{col:{end:a}}),l=function(n){var e=(n=t.copy(n)).length,r=t.identity(e);return t.arange(e-1,-1,-1).forEach((function(e){t.sliceAssign(r,{row:e},t.divide(t.slice(r,{row:e}),n[e][e])),t.sliceAssign(n,{row:e},t.divide(t.slice(n,{row:e}),n[e][e])),t.arange(e).forEach((function(o){var i=t.multiply(n[o][e],-1),s=t.slice(n,{row:o}),a=t.multiply(t.slice(n,{row:e}),i);t.sliceAssign(n,{row:o},t.add(s,a));var u=t.slice(r,{row:o}),l=t.multiply(t.slice(r,{row:e}),i);t.sliceAssign(r,{row:o},t.add(u,l))}))})),r}(t.slice(s,{row:{end:a}})),c=t.transpose(u);void 0===c[0].length&&(c=[c]);var f=t.multiply(t.multiply(l,c),e);return void 0===f.length&&(f=[[f]]),r?f.map((function(t){return t[0]})):f},jacobi:function(e){for(var r,o,i,s,a,u,l,c=1,f=e.length,h=t.identity(f,f),m=[];1===c;){for(a=e[0][1],i=0,s=1,r=0;r<f;r++)for(o=0;o<f;o++)r!=o&&a<n.abs(e[r][o])&&(a=n.abs(e[r][o]),i=r,s=o);for(u=e[i][i]===e[s][s]?e[i][s]>0?n.PI/4:-n.PI/4:n.atan(2*e[i][s]/(e[i][i]-e[s][s]))/2,(l=t.identity(f,f))[i][i]=n.cos(u),l[i][s]=-n.sin(u),l[s][i]=n.sin(u),l[s][s]=n.cos(u),h=t.multiply(h,l),e=t.multiply(t.multiply(t.inv(l),e),l),c=0,r=1;r<f;r++)for(o=1;o<f;o++)r!=o&&n.abs(e[r][o])>.001&&(c=1)}for(r=0;r<f;r++)m.push(e[r][r]);return[h,m]},rungekutta:function(t,n,e,r,o,i){var s,a,u;if(2===i)for(;r<=e;)o+=((s=n*t(r,o))+(a=n*t(r+n,o+s)))/2,r+=n;if(4===i)for(;r<=e;)o+=((s=n*t(r,o))+2*(a=n*t(r+n/2,o+s/2))+2*(u=n*t(r+n/2,o+a/2))+n*t(r+n,o+u))/6,r+=n;return o},romberg:function(t,e,r,o){for(var i,s,a,u,l,c=0,f=(r-e)/2,h=[],m=[],d=[];c<o/2;){for(l=t(e),a=e,u=0;a<=r;a+=f,u++)h[u]=a;for(i=h.length,a=1;a<i-1;a++)l+=(a%2!=0?4:2)*t(h[a]);l=f/3*(l+t(r)),d[c]=l,f/=2,c++}for(s=d.length,i=1;1!==s;){for(a=0;a<s-1;a++)m[a]=(n.pow(4,i)*d[a+1]-d[a])/(n.pow(4,i)-1);s=m.length,d=m,m=[],i++}return d},richardson:function(t,e,r,o){function i(t,n){for(var e,r=0,o=t.length;r<o;r++)t[r]===n&&(e=r);return e}for(var s,a,u,l,c,f=n.abs(r-t[i(t,r)+1]),h=0,m=[],d=[];o>=f;)s=i(t,r+o),a=i(t,r),m[h]=(e[s]-2*e[a]+e[2*a-s])/(o*o),o/=2,h++;for(l=m.length,u=1;1!=l;){for(c=0;c<l-1;c++)d[c]=(n.pow(4,u)*m[c+1]-m[c])/(n.pow(4,u)-1);l=d.length,m=d,d=[],u++}return m},simpson:function(t,n,e,r){for(var o,i=(e-n)/r,s=t(n),a=[],u=n,l=0,c=1;u<=e;u+=i,l++)a[l]=u;for(o=a.length;c<o-1;c++)s+=(c%2!=0?4:2)*t(a[c]);return i/3*(s+t(e))},hermite:function(t,n,e,r){for(var o,i=t.length,s=0,a=0,u=[],l=[],c=[],f=[];a<i;a++){for(u[a]=1,o=0;o<i;o++)a!=o&&(u[a]*=(r-t[o])/(t[a]-t[o]));for(l[a]=0,o=0;o<i;o++)a!=o&&(l[a]+=1/(t[a]-t[o]));c[a]=(1-2*(r-t[a])*l[a])*(u[a]*u[a]),f[a]=(r-t[a])*(u[a]*u[a]),s+=c[a]*n[a]+f[a]*e[a]}return s},lagrange:function(t,n,e){for(var r,o,i=0,s=0,a=t.length;s<a;s++){for(o=n[s],r=0;r<a;r++)s!=r&&(o*=(e-t[r])/(t[s]-t[r]));i+=o}return i},cubic_spline:function(n,e,r){for(var o,i,s=n.length,a=0,u=[],l=[],c=[],f=[],h=[],m=[];a<s-1;a++)f[a]=n[a+1]-n[a];for(c[0]=0,a=1;a<s-1;a++)c[a]=3/f[a]*(e[a+1]-e[a])-3/f[a-1]*(e[a]-e[a-1]);for(a=1;a<s-1;a++)u[a]=[],l[a]=[],u[a][a-1]=f[a-1],u[a][a]=2*(f[a-1]+f[a]),u[a][a+1]=f[a],l[a][0]=c[a];for(i=t.multiply(t.inv(u),l),o=0;o<s-1;o++)h[o]=(e[o+1]-e[o])/f[o]-f[o]*(i[o+1][0]+2*i[o][0])/3,m[o]=(i[o+1][0]-i[o][0])/(3*f[o]);for(o=0;o<s&&!(n[o]>r);o++);return e[o-=1]+(r-n[o])*h[o]+t.sq(r-n[o])*i[o]+(r-n[o])*t.sq(r-n[o])*m[o]},gauss_quadrature:function(){throw new Error("gauss_quadrature not yet implemented")},PCA:function(n){var e,r,o,i,s,a=n.length,u=n[0].length,l=0,c=[],f=[],h=[],m=[],d=[],p=[],g=[];for(l=0;l<a;l++)c[l]=t.sum(n[l])/u;for(l=0;l<u;l++)for(d[l]=[],e=0;e<a;e++)d[l][e]=n[e][l]-c[e];for(d=t.transpose(d),l=0;l<a;l++)for(p[l]=[],e=0;e<a;e++)p[l][e]=t.dot([d[l]],[d[e]])/(u-1);for(s=(o=t.jacobi(p))[0],f=o[1],g=t.transpose(s),l=0;l<f.length;l++)for(e=l;e<f.length;e++)f[l]<f[e]&&(r=f[l],f[l]=f[e],f[e]=r,h=g[l],g[l]=g[e],g[e]=h);for(i=t.transpose(d),l=0;l<a;l++)for(m[l]=[],e=0;e<i.length;e++)m[l][e]=t.dot([g[l]],[i[e]]);return[n,f,g,m]}}),function(n){for(var e=0;e<n.length;e++)!function(n){t.fn[n]=function(e,r){var o=this;return r?(setTimeout((function(){r.call(o,t.fn[n].call(o,e))}),15),this):"number"==typeof t[n](this,e)?t[n](this,e):t(t[n](this,e))}}(n[e])}("add divide multiply subtract dot pow exp log abs norm angle".split(" "))}(n,Math),function(t,n){var e=[].slice,r=t.utils.isNumber,o=t.utils.isArray;function i(t,e,r,o){if(t>1||r>1||t<=0||r<=0)throw new Error("Proportions should be greater than 0 and less than 1");var i=(t*e+r*o)/(e+o);return(t-r)/n.sqrt(i*(1-i)*(1/e+1/o))}t.extend({zscore:function(){var n=e.call(arguments);return r(n[1])?(n[0]-n[1])/n[2]:(n[0]-t.mean(n[1]))/t.stdev(n[1],n[2])},ztest:function(){var r,i=e.call(arguments);return o(i[1])?(r=t.zscore(i[0],i[1],i[3]),1===i[2]?t.normal.cdf(-n.abs(r),0,1):2*t.normal.cdf(-n.abs(r),0,1)):i.length>2?(r=t.zscore(i[0],i[1],i[2]),1===i[3]?t.normal.cdf(-n.abs(r),0,1):2*t.normal.cdf(-n.abs(r),0,1)):(r=i[0],1===i[1]?t.normal.cdf(-n.abs(r),0,1):2*t.normal.cdf(-n.abs(r),0,1))}}),t.extend(t.fn,{zscore:function(t,n){return(t-this.mean())/this.stdev(n)},ztest:function(e,r,o){var i=n.abs(this.zscore(e,o));return 1===r?t.normal.cdf(-i,0,1):2*t.normal.cdf(-i,0,1)}}),t.extend({tscore:function(){var r=e.call(arguments);return 4===r.length?(r[0]-r[1])/(r[2]/n.sqrt(r[3])):(r[0]-t.mean(r[1]))/(t.stdev(r[1],!0)/n.sqrt(r[1].length))},ttest:function(){var o,i=e.call(arguments);return 5===i.length?(o=n.abs(t.tscore(i[0],i[1],i[2],i[3])),1===i[4]?t.studentt.cdf(-o,i[3]-1):2*t.studentt.cdf(-o,i[3]-1)):r(i[1])?(o=n.abs(i[0]),1==i[2]?t.studentt.cdf(-o,i[1]-1):2*t.studentt.cdf(-o,i[1]-1)):(o=n.abs(t.tscore(i[0],i[1])),1==i[2]?t.studentt.cdf(-o,i[1].length-1):2*t.studentt.cdf(-o,i[1].length-1))}}),t.extend(t.fn,{tscore:function(t){return(t-this.mean())/(this.stdev(!0)/n.sqrt(this.cols()))},ttest:function(e,r){return 1===r?1-t.studentt.cdf(n.abs(this.tscore(e)),this.cols()-1):2*t.studentt.cdf(-n.abs(this.tscore(e)),this.cols()-1)}}),t.extend({anovafscore:function(){var r,o,i,s,a,u,l,c,f=e.call(arguments);if(1===f.length){for(a=new Array(f[0].length),l=0;l<f[0].length;l++)a[l]=f[0][l];f=a}for(o=new Array,l=0;l<f.length;l++)o=o.concat(f[l]);for(i=t.mean(o),r=0,l=0;l<f.length;l++)r+=f[l].length*n.pow(t.mean(f[l])-i,2);for(r/=f.length-1,u=0,l=0;l<f.length;l++)for(s=t.mean(f[l]),c=0;c<f[l].length;c++)u+=n.pow(f[l][c]-s,2);return r/(u/(o.length-f.length))},anovaftest:function(){var n,o,i,s,a=e.call(arguments);if(r(a[0]))return 1-t.centralF.cdf(a[0],a[1],a[2]);var u=t.anovafscore(a);for(n=a.length-1,i=0,s=0;s<a.length;s++)i+=a[s].length;return o=i-n-1,1-t.centralF.cdf(u,n,o)},ftest:function(n,e,r){return 1-t.centralF.cdf(n,e,r)}}),t.extend(t.fn,{anovafscore:function(){return t.anovafscore(this.toArray())},anovaftes:function(){var n,e=0;for(n=0;n<this.length;n++)e+=this[n].length;return t.ftest(this.anovafscore(),this.length-1,e-this.length)}}),t.extend({qscore:function(){var o,i,s,a,u,l=e.call(arguments);return r(l[0])?(o=l[0],i=l[1],s=l[2],a=l[3],u=l[4]):(o=t.mean(l[0]),i=t.mean(l[1]),s=l[0].length,a=l[1].length,u=l[2]),n.abs(o-i)/(u*n.sqrt((1/s+1/a)/2))},qtest:function(){var n,r=e.call(arguments);3===r.length?(n=r[0],r=r.slice(1)):7===r.length?(n=t.qscore(r[0],r[1],r[2],r[3],r[4]),r=r.slice(5)):(n=t.qscore(r[0],r[1],r[2]),r=r.slice(3));var o=r[0],i=r[1];return 1-t.tukey.cdf(n,i,o-i)},tukeyhsd:function(n){for(var e=t.pooledstdev(n),r=n.map((function(n){return t.mean(n)})),o=n.reduce((function(t,n){return t+n.length}),0),i=[],s=0;s<n.length;++s)for(var a=s+1;a<n.length;++a){var u=t.qtest(r[s],r[a],n[s].length,n[a].length,e,o,n.length);i.push([[s,a],u])}return i}}),t.extend({normalci:function(){var r,o=e.call(arguments),i=new Array(2);return r=4===o.length?n.abs(t.normal.inv(o[1]/2,0,1)*o[2]/n.sqrt(o[3])):n.abs(t.normal.inv(o[1]/2,0,1)*t.stdev(o[2])/n.sqrt(o[2].length)),i[0]=o[0]-r,i[1]=o[0]+r,i},tci:function(){var r,o=e.call(arguments),i=new Array(2);return r=4===o.length?n.abs(t.studentt.inv(o[1]/2,o[3]-1)*o[2]/n.sqrt(o[3])):n.abs(t.studentt.inv(o[1]/2,o[2].length-1)*t.stdev(o[2],!0)/n.sqrt(o[2].length)),i[0]=o[0]-r,i[1]=o[0]+r,i},significant:function(t,n){return t<n}}),t.extend(t.fn,{normalci:function(n,e){return t.normalci(n,e,this.toArray())},tci:function(n,e){return t.tci(n,e,this.toArray())}}),t.extend(t.fn,{oneSidedDifferenceOfProportions:function(n,e,r,o){var s=i(n,e,r,o);return t.ztest(s,1)},twoSidedDifferenceOfProportions:function(n,e,r,o){var s=i(n,e,r,o);return t.ztest(s,2)}})}(n,Math),n.models=function(){function t(t,e){var r=t.length,o=e[0].length-1,i=r-o-1,s=n.lstsq(e,t),a=n.multiply(e,s.map((function(t){return[t]}))).map((function(t){return t[0]})),u=n.subtract(t,a),l=n.mean(t),c=n.sum(a.map((function(t){return Math.pow(t-l,2)}))),f=n.sum(t.map((function(t,n){return Math.pow(t-a[n],2)}))),h=c+f;return{exog:e,endog:t,nobs:r,df_model:o,df_resid:i,coef:s,predict:a,resid:u,ybar:l,SST:h,SSE:c,SSR:f,R2:c/h}}function e(e){var r,o,i=(r=e.exog,o=r[0].length,n.arange(o).map((function(e){var i=n.arange(o).filter((function(t){return t!==e}));return t(n.col(r,e).map((function(t){return t[0]})),n.col(r,i))}))),s=Math.sqrt(e.SSR/e.df_resid),a=i.map((function(t){var n=t.SST,e=t.R2;return s/Math.sqrt(n*(1-e))})),u=e.coef.map((function(t,n){return(t-0)/a[n]})),l=u.map((function(t){var r=n.studentt.cdf(t,e.df_resid);return 2*(r>.5?1-r:r)})),c=n.studentt.inv(.975,e.df_resid),f=e.coef.map((function(t,n){var e=c*a[n];return[t-e,t+e]}));return{se:a,t:u,p:l,sigmaHat:s,interval95:f}}return{ols:function(r,o){var i=t(r,o),s=e(i),a=function(t){var e,r,o,i=t.R2/t.df_model/((1-t.R2)/t.df_resid);return{F_statistic:i,pvalue:1-(e=i,r=t.df_model,o=t.df_resid,n.beta.cdf(e/(o/r+e),r/2,o/2))}}(i),u=1-(1-i.R2)*((i.nobs-1)/i.df_resid);return i.t=s,i.f=a,i.adjust_R2=u,i}}}(),n.extend({buildxmatrix:function(){for(var t=new Array(arguments.length),e=0;e<arguments.length;e++){t[e]=[1].concat(arguments[e])}return n(t)},builddxmatrix:function(){for(var t=new Array(arguments[0].length),e=0;e<arguments[0].length;e++){t[e]=[1].concat(arguments[0][e])}return n(t)},buildjxmatrix:function(t){for(var e=new Array(t.length),r=0;r<t.length;r++)e[r]=t[r];return n.builddxmatrix(e)},buildymatrix:function(t){return n(t).transpose()},buildjymatrix:function(t){return t.transpose()},matrixmult:function(t,e){var r,o,i,s,a;if(t.cols()==e.rows()){if(e.rows()>1){for(s=[],r=0;r<t.rows();r++)for(s[r]=[],o=0;o<e.cols();o++){for(a=0,i=0;i<t.cols();i++)a+=t.toArray()[r][i]*e.toArray()[i][o];s[r][o]=a}return n(s)}for(s=[],r=0;r<t.rows();r++)for(s[r]=[],o=0;o<e.cols();o++){for(a=0,i=0;i<t.cols();i++)a+=t.toArray()[r][i]*e.toArray()[o];s[r][o]=a}return n(s)}},regress:function(t,e){var r=n.xtranspxinv(t),o=t.transpose(),i=n.matrixmult(n(r),o);return n.matrixmult(i,e)},regresst:function(t,e,r){var o=n.regress(t,e),i={anova:{}},s=n.jMatYBar(t,o);i.yBar=s;var a=e.mean();i.anova.residuals=n.residuals(e,s),i.anova.ssr=n.ssr(s,a),i.anova.msr=i.anova.ssr/(t[0].length-1),i.anova.sse=n.sse(e,s),i.anova.mse=i.anova.sse/(e.length-(t[0].length-1)-1),i.anova.sst=n.sst(e,a),i.anova.mst=i.anova.sst/(e.length-1),i.anova.r2=1-i.anova.sse/i.anova.sst,i.anova.r2<0&&(i.anova.r2=0),i.anova.fratio=i.anova.msr/i.anova.mse,i.anova.pvalue=n.anovaftest(i.anova.fratio,t[0].length-1,e.length-(t[0].length-1)-1),i.anova.rmse=Math.sqrt(i.anova.mse),i.anova.r2adj=1-i.anova.mse/i.anova.mst,i.anova.r2adj<0&&(i.anova.r2adj=0),i.stats=new Array(t[0].length);for(var u,l,c,f=n.xtranspxinv(t),h=0;h<o.length;h++)u=Math.sqrt(i.anova.mse*Math.abs(f[h][h])),l=Math.abs(o[h]/u),c=n.ttest(l,e.length-t[0].length-1,r),i.stats[h]=[o[h],u,l,c];return i.regress=o,i},xtranspx:function(t){return n.matrixmult(t.transpose(),t)},xtranspxinv:function(t){var e=n.matrixmult(t.transpose(),t);return n.inv(e)},jMatYBar:function(t,e){var r=n.matrixmult(t,e);return new n(r)},residuals:function(t,e){return n.matrixsubtract(t,e)},ssr:function(t,n){for(var e=0,r=0;r<t.length;r++)e+=Math.pow(t[r]-n,2);return e},sse:function(t,n){for(var e=0,r=0;r<t.length;r++)e+=Math.pow(t[r]-n[r],2);return e},sst:function(t,n){for(var e=0,r=0;r<t.length;r++)e+=Math.pow(t[r]-n,2);return e},matrixsubtract:function(t,e){for(var r=new Array(t.length),o=0;o<t.length;o++){r[o]=new Array(t[o].length);for(var i=0;i<t[o].length;i++)r[o][i]=t[o][i]-e[o][i]}return n(r)}}),n.jStat=n,n)},3379:t=>{"use strict";var n=[];function e(t){for(var e=-1,r=0;r<n.length;r++)if(n[r].identifier===t){e=r;break}return e}function r(t,r){for(var i={},s=[],a=0;a<t.length;a++){var u=t[a],l=r.base?u[0]+r.base:u[0],c=i[l]||0,f="".concat(l," ").concat(c);i[l]=c+1;var h=e(f),m={css:u[1],media:u[2],sourceMap:u[3],supports:u[4],layer:u[5]};if(-1!==h)n[h].references++,n[h].updater(m);else{var d=o(m,r);r.byIndex=a,n.splice(a,0,{identifier:f,updater:d,references:1})}s.push(f)}return s}function o(t,n){var e=n.domAPI(n);return e.update(t),function(n){if(n){if(n.css===t.css&&n.media===t.media&&n.sourceMap===t.sourceMap&&n.supports===t.supports&&n.layer===t.layer)return;e.update(t=n)}else e.remove()}}t.exports=function(t,o){var i=r(t=t||[],o=o||{});return function(t){t=t||[];for(var s=0;s<i.length;s++){var a=e(i[s]);n[a].references--}for(var u=r(t,o),l=0;l<i.length;l++){var c=e(i[l]);0===n[c].references&&(n[c].updater(),n.splice(c,1))}i=u}}},569:t=>{"use strict";var n={};t.exports=function(t,e){var r=function(t){if(void 0===n[t]){var e=document.querySelector(t);if(window.HTMLIFrameElement&&e instanceof window.HTMLIFrameElement)try{e=e.contentDocument.head}catch(t){e=null}n[t]=e}return n[t]}(t);if(!r)throw new Error("Couldn't find a style target. This probably means that the value for the 'insert' parameter is invalid.");r.appendChild(e)}},9216:t=>{"use strict";t.exports=function(t){var n=document.createElement("style");return t.setAttributes(n,t.attributes),t.insert(n,t.options),n}},3565:(t,n,e)=>{"use strict";t.exports=function(t){var n=e.nc;n&&t.setAttribute("nonce",n)}},7795:t=>{"use strict";t.exports=function(t){if("undefined"==typeof document)return{update:function(){},remove:function(){}};var n=t.insertStyleElement(t);return{update:function(e){!function(t,n,e){var r="";e.supports&&(r+="@supports (".concat(e.supports,") {")),e.media&&(r+="@media ".concat(e.media," {"));var o=void 0!==e.layer;o&&(r+="@layer".concat(e.layer.length>0?" ".concat(e.layer):""," {")),r+=e.css,o&&(r+="}"),e.media&&(r+="}"),e.supports&&(r+="}");var i=e.sourceMap;i&&"undefined"!=typeof btoa&&(r+="\n/*# sourceMappingURL=data:application/json;base64,".concat(btoa(unescape(encodeURIComponent(JSON.stringify(i))))," */")),n.styleTagTransform(r,t,n.options)}(n,t,e)},remove:function(){!function(t){if(null===t.parentNode)return!1;t.parentNode.removeChild(t)}(n)}}}},4589:t=>{"use strict";t.exports=function(t,n){if(n.styleSheet)n.styleSheet.cssText=t;else{for(;n.firstChild;)n.removeChild(n.firstChild);n.appendChild(document.createTextNode(t))}}}},n={};function e(r){var o=n[r];if(void 0!==o)return o.exports;var i=n[r]={id:r,loaded:!1,exports:{}};return t[r].call(i.exports,i,i.exports,e),i.loaded=!0,i.exports}e.m=t,e.amdO={},e.n=t=>{var n=t&&t.__esModule?()=>t.default:()=>t;return e.d(n,{a:n}),n},e.d=(t,n)=>{for(var r in n)e.o(n,r)&&!e.o(t,r)&&Object.defineProperty(t,r,{enumerable:!0,get:n[r]})},e.u=t=>t+".js",e.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(t){if("object"==typeof window)return window}}(),e.hmd=t=>((t=Object.create(t)).children||(t.children=[]),Object.defineProperty(t,"exports",{enumerable:!0,set:()=>{throw new Error("ES Modules may not assign module.exports or exports.*, Use ESM export syntax, instead: "+t.id)}}),t),e.o=(t,n)=>Object.prototype.hasOwnProperty.call(t,n),e.r=t=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})},(()=>{var t;e.g.importScripts&&(t=e.g.location+"");var n=e.g.document;if(!t&&n&&(n.currentScript&&(t=n.currentScript.src),!t)){var r=n.getElementsByTagName("script");if(r.length)for(var o=r.length-1;o>-1&&!t;)t=r[o--].src}if(!t)throw new Error("Automatic publicPath is not supported in this browser");t=t.replace(/#.*$/,"").replace(/\?.*$/,"").replace(/\/[^\/]+$/,"/"),e.p=t})(),e.b=document.baseURI||self.location.href,e.nc=void 0;var r={};(()=>{"use strict";e.r(r),e.d(r,{GetMCLEditor:()=>fr,MCL:()=>hr,MVA:()=>pr,PCA:()=>sr,PLS:()=>mr,_package:()=>er,anova:()=>Sr,applyLinearKernelSVM:()=>Er,applyPolynomialKernelSVM:()=>Cr,applyRBFkernelSVM:()=>_r,applySigmoidKernelSVM:()=>br,dbScan:()=>ir,dbscanPostProcessingFunction:()=>ar,demoMultivariateAnalysis:()=>gr,info:()=>rr,init:()=>or,kNNImputation:()=>Mr,numberPreprocessingFunction:()=>ur,reduceDimensionality:()=>cr,stringPreprocessingFunction:()=>lr,testDataLinearNonSeparable:()=>yr,testDataLinearSeparable:()=>vr,topMenuPLS:()=>dr,trainLinearKernelSVM:()=>wr,trainPolynomialKernelSVM:()=>Ir,trainRBFkernelSVM:()=>Ar,trainSigmoidKernelSVM:()=>Nr});const t=grok,n=ui,o=DG;Int32Array,Float32Array,DG.Column.fromInt32Array,DG.Column.fromFloat32Array;const i="num",s="floatColumn",a="intColumn",u="floatColumns",l="newFloatColumns",c="intColumns",f="newIntColumns",h="newFloatColumn",m="newIntColumn",d="column",p="_callResult",g="numOfRows",v="numOfColumns",y="ref",w="value",E="tableFromColumns",A="objects",_="int",I="double",C={intColumn:Int32Array,floatColumn:Float32Array,floatColumns:Float32Array,newFloatColumns:Float32Array,intColumns:Int32Array,newIntColumns:Int32Array,newFloatColumn:Float32Array,newIntColumn:Int32Array};function N(t,n){let e,r=[],o=0;for(const d in t){const E=t[d],A=E.type;if(d!==p){switch(A){case i:case _:case I:E.data=n[o],o++;break;case a:case s:let r,d=n[o];r=d.type===_&&A===a||d.type===I&&A===s?d.getRawData():new C[A](d.getRawData()),E.data={array:r,numOfRows:r.length},o++;break;case m:case h:let p=0;e=E[g][y],p=t[e].type===i?t[e].data:t[e].data[E[g][w]],E.data={numOfRows:p},o++;break;case c:case u:let N=[];for(let t of n[o].toList())t.type===_&&A===a||t.type===I&&A===s?N.push(t.getRawData()):N.push(new C[A](t.getRawData()));E.data={arrays:N,numOfRows:N[0].length,numOfColumns:N.length},o++;break;case f:case l:let b=0,S=0;e=E[g][y],b=t[e].type===i?t[e].data:t[e].data[E[g][w]],e=E[v][y],S=t[e].type===i?t[e].data:t[e].data[E[v][w]],E.data={numOfRows:b,numOfColumns:S},o++;break;default:return}r.push(E)}}return r}function b(t,n){t.arguments._callResult=n.callResult,function(t,n){const e={newFloatColumns:DG.Column.fromFloat32Array,newIntColumns:DG.Column.fromInt32Array,newFloatColumn:DG.Column.fromFloat32Array,newIntColumn:DG.Column.fromInt32Array};let r=0;for(const o in t){const d=t[o];switch(d.type){case i:case _:case I:case a:case s:case u:case c:break;case h:case m:let t;null==d.name?t=(0).toString():g=d.name,d.column=e[d.type](t,n[r].array);break;case f:case l:let o=[],p=n[r].arrays.length,g=[];if(null==d.names)for(let t=1;t<=p;t++)g.push(t.toString());else g=d.names;for(let t=0;t<p;t++)o.push(e[d.type](g[t],n[r].arrays[t]));d.columns=o}r++}}(t.arguments,n.args);let e=function(t){let n=t.output;const e={newFloatColumns:"columns",newIntColumns:"columns",newFloatColumn:"column",newIntColumn:"column"};switch(n.type){case i:case _:case I:return t.arguments[n.source];case d:return t.arguments[n.source].column;case E:return DG.DataFrame.fromColumns(t.arguments[n.source].columns);case A:let r=[];for(let o of n.source){let n=t.arguments[o];r.push(n[e[n.type]])}return r}}(t);return function(t){for(const n in t){const e=t[n];switch(e.type){case i:case _:case I:case a:case s:case c:case u:break;case m:case h:e.column=null;break;case f:case l:e.columns=null}}}(t.arguments),e}const S=1,M=1,T=1,P=0,O=100,x=1e8,L="components must be positive.",R="components must not be greater than features count.",F="min must be less than max.",U="features must be positive.",D="samples must be positive.",k="violators percentage must be from the range from 0 to 100.",B="dataframe is too big.",V="unsupported column type: ";function G(t){if(t.type!=o.COLUMN_TYPE.FLOAT&&t.type!=o.COLUMN_TYPE.INT)throw new Error(V+t.type)}function q(t){if(t.stats.missingValueCount>0)throw new Error(`The column '${t.name}' has missing values.`)}function W(t,n){if(function(t,n){if(n<S)throw new Error(L);if(n>t.length)throw new Error(R);for(const n of t)G(n),q(n)}(t,n),t.length*t.byIndex(0).length>x)throw new Error(B)}var Y=function(t,n,e,r){return new(e||(e=Promise))((function(o,i){function s(t){try{u(r.next(t))}catch(t){i(t)}}function a(t){try{u(r.throw(t))}catch(t){i(t)}}function u(t){var n;t.done?o(t.value):(n=t.value,n instanceof e?n:new e((function(t){t(n)}))).then(s,a)}u((r=r.apply(t,n||[])).next())}))};var H=function(t,n,e,r){return new(e||(e=Promise))((function(o,i){function s(t){try{u(r.next(t))}catch(t){i(t)}}function a(t){try{u(r.throw(t))}catch(t){i(t)}}function u(t){var n;t.done?o(t.value):(n=t.value,n instanceof e?n:new e((function(t){t(n)}))).then(s,a)}u((r=r.apply(t,n||[])).next())}))};const $=0,z=1,j="Feature #",K="Label";function X(t,n,r,i,s,a,u,l){return H(this,void 0,void 0,(function*(){!function(t,n,e,r,o){if(e>=r)throw new Error(F);if(n<T)throw new Error(U);if(t<M)throw new Error(D);if(o<P||o>O)throw new Error(k)}(i,s,a,u,l);const c=o.Column.fromList("double","kernelParams",n);let f;const h=async function(t,n,r,o,i,s,a){return new Promise(((u,l)=>{const c=new Worker(new URL(e.p+e.u(374),e.b));c.postMessage(N(EDA.generateDataset.arguments,[t,n,r,o,i,s,a])),c.onmessage=function(t){c.terminate(),u(b(EDA.generateDataset,t.data))}}))}(t,c,i,s,a,u,l);yield h.then((t=>{f=t}),(t=>{throw new Error(`Error: ${t}`)})),f[z].name=K;for(const t of f[$])t.name=j+t.name;const m=o.DataFrame.fromColumns(f[$]);return m.name=r,m.columns.add(f[z]),m}))}var Q=function(t,n,e,r){return new(e||(e=Promise))((function(o,i){function s(t){try{u(r.next(t))}catch(t){i(t)}}function a(t){try{u(r.throw(t))}catch(t){i(t)}}function u(t){var n;t.done?o(t.value):(n=t.value,n instanceof e?n:new e((function(t){t(n)}))).then(s,a)}u((r=r.apply(t,n||[])).next())}))};const Z=0,J=1,tt=2,nt=3,et=4,rt=0,ot=1,it=2,st=3,at=4,ut=5,lt=6,ct=7,ft=0,ht=1,mt=2,dt=3,pt=0,gt=0,vt=1,yt=0,wt=1,Et=0,At=0,_t=0,It=0,Ct="gamma must be strictly positive.",Nt="sigma must be strictly positive.",bt="c must be strictly positive.",St="d must be strictly positive.",Mt="incorrect kernel.",Tt="Labels",Pt="predicted",Ot="correctness",xt="Confusion matrix",Lt="mean",Rt="std dev",Ft="alpha",Ut="weight",Dt="gamma",kt="kernel",Bt="kernel params",Vt="kernel param 1",Gt="kernel param 2",qt="features count",Wt="train samples count",Yt="Train error,%",Ht=["linear","polynomial","RBF","sigmoid"],$t="positive (P)",zt="negative (N)",jt="predicted positive (PP)",Kt="predicted negative (PN)",Xt="Sensitivity",Qt="Specificity",Zt="Balanced accuracy",Jt="Positive predicitve value",tn="Negative predicitve value",nn="Model report",en="Predicted labels",rn="Train labels",on="Prediction correctness",sn="prediction",an=4,un=3,ln=2,cn=0,fn=1,hn=2,mn=0,dn=1;function pn(t,n,r){return Q(this,void 0,void 0,(function*(){const i=n.columns,s=i.byName(r);return i.remove(r),yield function(t,n,r){return Q(this,void 0,void 0,(function*(){!function(t){if(t.gamma<=Et)throw new Error(Ct);switch(t.kernel){case Z:return;case tt:if(t.sigma<=At)throw new Error(Nt);return;case J:if(t.cParam<=_t)throw new Error(bt);if(t.dParam<=It)throw new Error(St);return;case nt:return;default:throw new Error(Mt)}}(t);const i=[mn,mn];switch(t.kernel){case Z:break;case tt:i[pt]=t.sigma;break;case J:i[gt]=t.cParam,i[vt]=t.dParam;break;case nt:i[yt]=t.kappa,i[wt]=t.theta;break;default:throw new Error(Mt)}const s=o.Column.fromList("double",Bt,i),a=n.toList(),u=a[0].length+dn,l=a.length+dn,c=et;let f;const h=async function(t,n,r,o,i,s,a,u){return new Promise(((l,c)=>{const f=new Worker(new URL(e.p+e.u(467),e.b));f.postMessage(N(EDA.trainAndAnalyzeLSSVM.arguments,[t,n,r,o,i,s,a,u])),f.onmessage=function(t){f.terminate(),l(b(EDA.trainAndAnalyzeLSSVM,t.data))}}))}(t.gamma,t.kernel,s,u,l,c,n,r);yield h.then((t=>{f=t}),(t=>{throw new Error(`Error: ${t}`)})),f[ot].name=Lt,f[it].name=Rt,f[st].name=Ft,f[at].name=Ut,f[ut].name=Pt,f[lt].name=Ot,f[ct].name=xt;const m={trainGamma:t.gamma,kernelType:t.kernel,kernelParams:s,trainLabels:r,normalizedTrainData:o.DataFrame.fromColumns(f[rt]),means:f[ot],stdDevs:f[it],modelParams:f[st],modelWeights:f[at],predictedLabels:f[ut],correctness:f[lt],confusionMatrix:f[ct],trainError:void 0,featuresCount:a.length,trainSamplesCount:a[0].length};return function(t){const n=t.confusionMatrix.getRawData(),e=n[ft],r=n[dt],o=n[mt],i=n[ht],s=e+i,a=o+r,u=e/s,l=r/a,c=e/(e+o),f=r/(r+i),h=(e+r)/(s+a),m=(u+l)/2;t.sensitivity=u,t.specificity=l,t.balancedAccuracy=m,t.positivePredicitveValue=c,t.negativePredicitveValue=f,t.trainError=100*(1-h)}(m),m}))}(t,i,s)}))}function gn(n,e){n.name=nn,n.columns.add(e.trainLabels),n.columns.add(e.predictedLabels),n.columns.add(e.correctness);const r=t.shell.addTableView(n);r.addViewer(o.Viewer.form(function(t){const n=t.kernelParams.getRawData();return o.DataFrame.fromColumns([o.Column.fromList("double",Dt,[t.trainGamma]),o.Column.fromStrings(kt,[Ht[t.kernelType]]),o.Column.fromList("double",Vt,[n[0]]),o.Column.fromList("double",Gt,[n[1]]),o.Column.fromList("double",qt,[t.featuresCount]),o.Column.fromList("double",Wt,[t.trainSamplesCount]),o.Column.fromList("double",Yt,[t.trainError]),o.Column.fromList("double",Zt,[t.balancedAccuracy]),o.Column.fromList("double",Xt,[t.sensitivity]),o.Column.fromList("double",Qt,[t.specificity]),o.Column.fromList("double",Jt,[t.positivePredicitveValue]),o.Column.fromList("double",tn,[t.negativePredicitveValue])])}(e))),r.addViewer(o.Viewer.scatterPlot(n,{title:en,color:e.predictedLabels.name})),r.addViewer(o.Viewer.scatterPlot(n,{title:rn,color:e.trainLabels.name})),r.addViewer(o.Viewer.grid(function(t){const n=t.confusionMatrix.getRawData();return o.DataFrame.fromColumns([o.Column.fromStrings("",[$t,zt]),o.Column.fromList("int",jt,[n[ft],n[mt]]),o.Column.fromList("int",Kt,[n[ht],n[dt]])])}(e))),r.addViewer(o.Viewer.scatterPlot(n,{title:on,color:e.correctness.name}))}function vn(t){const n=t.normalizedTrainData.columns,e=t.trainSamplesCount,r=t.featuresCount,o=new Uint8Array(an*(un+ln+e+r+r+e+dn+r+dn+r*e)),i=o.buffer;let s=0;const a=new Int32Array(i,s,un);a[cn]=t.kernelType,a[fn]=e,a[hn]=r,s+=un*an;let u=new Float32Array(i,s,ln);u.set(t.kernelParams.getRawData()),s+=ln*an,u=new Float32Array(i,s,e),u.set(t.trainLabels.getRawData()),s+=e*an,u=new Float32Array(i,s,r),u.set(t.means.getRawData()),s+=r*an,u=new Float32Array(i,s,r),u.set(t.stdDevs.getRawData()),s+=r*an,u=new Float32Array(i,s,e+dn),u.set(t.modelParams.getRawData()),s+=(e+dn)*an,u=new Float32Array(i,s,r+dn),u.set(t.modelWeights.getRawData()),s+=(r+dn)*an;for(const t of n)u=new Float32Array(i,s,r),u.set(t.getRawData()),s+=r*an;return o}function yn(t,n){return Q(this,void 0,void 0,(function*(){const r=function(t){const n=t.buffer;let e=0;const r=new Int32Array(n,e,un);e+=un*an;const i=r[fn],s=r[hn],a=o.Column.fromFloat32Array(Bt,new Float32Array(n,e,ln));e+=ln*an;const u=o.Column.fromFloat32Array(Tt,new Float32Array(n,e,i));e+=i*an;const l=o.Column.fromFloat32Array(Lt,new Float32Array(n,e,s));e+=s*an;const c=o.Column.fromFloat32Array(Rt,new Float32Array(n,e,s));e+=s*an;const f=o.Column.fromFloat32Array(Ft,new Float32Array(n,e,i+dn));e+=(i+dn)*an;const h=o.Column.fromFloat32Array(Ut,new Float32Array(n,e,s+dn));e+=(s+dn)*an;const m=[];for(let t=0;t<i;t++)m.push(o.Column.fromFloat32Array(t.toString(),new Float32Array(n,e,s))),e+=s*an;const d=o.DataFrame.fromColumns(m);return{kernelType:r[cn],kernelParams:a,trainLabels:u,means:l,stdDevs:c,modelParams:f,modelWeights:h,normalizedTrainData:d}}(new Uint8Array(n)),i=yield function(t,n){return Q(this,void 0,void 0,(function*(){let r;const o=async function(t,n,r,o,i,s,a,u,l){return new Promise(((c,f)=>{const h=new Worker(new URL(e.p+e.u(367),e.b));h.postMessage(N(EDA.predictByLSSVM.arguments,[t,n,r,o,i,s,a,u,l])),h.onmessage=function(t){h.terminate(),c(b(EDA.predictByLSSVM,t.data))}}))}(t.kernelType,t.kernelParams,t.normalizedTrainData.columns,t.trainLabels,t.means,t.stdDevs,t.modelParams,t.modelWeights,n);return yield o.then((t=>{r=t}),(t=>{throw new Error(`Error: ${t}`)})),r}))}(r,t.columns);return i.name=sn,o.DataFrame.fromColumns([i])}))}var wn,En,An,_n,In,Cn,Nn,bn;!function(t){t[t.COMPUTE_COMPONENTS=0]="COMPUTE_COMPONENTS",t[t.PERFORM_MVA=1]="PERFORM_MVA",t[t.DEMO=2]="DEMO"}(wn||(wn={})),function(t){t.NO_DF="No dataframe is opened",t.NO_COLS="No numeric columns without missing values",t.ONE_COL="No columns to be used as features (just one numeric columns without missing values)",t.EMPTY_DF="Dataframe is empty"}(En||(En={})),function(t){t.PREDICT="Predict",t.USING="Using",t.COMPONENTS="Components",t.PLS="PLS",t.MVA="Multivariate Analysis (PLS)",t.RUN="RUN",t.NAMES="Names",t.MODEL="Observed vs. Predicted",t.FEATURE="Feature",t.REGR_COEFS="Regression Coefficients",t.XLOADING="x.loading.p",t.LOADINGS="Loadings",t.XSCORE="x.score.t",t.YSCORE="y.score.u",t.SCORES="Scores",t.EXPL_VAR="Explained Variance",t.EXPLORE="Explore"}(An||(An={})),function(t){t.PREDICT="Column with the response variable",t.FEATURES="Predictors (features)",t.COMPONENTS="Number of PLS components",t.PLS="Compute PLS components",t.MVA="Perform multivariate analysis",t.NAMES="Names of data samples"}(_n||(_n={})),function(t){t.PLS="https://datagrok.ai/help/explore/multivariate-analysis/pls#pls-components",t.MVA="https://datagrok.ai/help/explore/multivariate-analysis/pls",t.MODEL="https://datagrok.ai/help/explore/multivariate-analysis/plots/predicted-vs-reference",t.COEFFS="https://datagrok.ai/help/explore/multivariate-analysis/plots/regression-coefficients",t.LOADINGS="https://datagrok.ai/help/explore/multivariate-analysis/plots/loadings",t.EXPL_VARS="https://datagrok.ai/help/explore/multivariate-analysis/plots/explained-variance",t.SCORES="https://datagrok.ai/help/explore/multivariate-analysis/plots/scores"}(In||(In={})),function(t){t[t.DEFAULT=3]="DEFAULT",t[t.MIN=1]="MIN"}(Cn||(Cn={})),function(t){t.PREFIX="PLS",t.SUFFIX="(predicted)",t.COMP="component",t.COMPS="components"}(Nn||(Nn={})),function(t){t[t.PREDICTION=0]="PREDICTION",t[t.REGR_COEFFS=1]="REGR_COEFFS",t[t.T_SCORES=2]="T_SCORES",t[t.U_SCORES=3]="U_SCORES",t[t.X_LOADINGS=4]="X_LOADINGS",t[t.Y_LOADINGS=5]="Y_LOADINGS"}(bn||(bn={}));const Sn="Int",Mn=6,Tn=[.49,.79,.99],Pn=1,On=200,xn=200;var Ln;!function(t){t.AXIS="#838383",t.CIRCLE="#0000FF"}(Ln||(Ln={}));const Rn="# Data\nEach car has many features - patterns extraction is complicated.\n\n# Model\nPredict car price by its other features.\n\n# Try\nPress 'RUN' to perform multivariate analysis using partial least squares\n([PLS](https://en.wikipedia.org/wiki/Partial_least_squares_regression)) regression.\n\n# Essence\nThe method finds the latent factors that\n\n* capture the maximum variance in the features\n* maximize correlation with the response variable",Fn=[{caption:An.MODEL,text:"Closer to the line means better price prediction."},{caption:An.SCORES,text:"The latent factor values for each data sample reflect the similarities and dissimilarities among observations."},{caption:An.LOADINGS,text:"The impact of each feature on the latent factors: higher loading means stronger influence."},{caption:An.REGR_COEFS,text:"Parameters of the obtained linear model: features make different contribution to the prediction."},{caption:An.EXPL_VAR,text:"How well the latent components fit source data: closer to one means better fit."}],Un=Fn.map((t=>`# ${t.caption}\n\n${t.text}`)).join("\n\n")+`\n\n# Learn more\n \n * [Multivariate analysis](${In.MVA}),\n * [ANOVA](https://datagrok.ai/help/explore/anova)`;var Dn=function(t,n,e,r){return new(e||(e=Promise))((function(o,i){function s(t){try{u(r.next(t))}catch(t){i(t)}}function a(t){try{u(r.throw(t))}catch(t){i(t)}}function u(t){var n;t.done?o(t.value):(n=t.value,n instanceof e?n:new e((function(t){t(n)}))).then(s,a)}u((r=r.apply(t,n||[])).next())}))};const kn=Math.min,Bn=Math.max;function Vn(t){return Dn(this,void 0,void 0,(function*(){W(t.features,t.components),G(t.predict),q(t.predict);const n=yield async function(t,n,r,o){return new Promise(((t,i)=>{const s=new Worker(new URL(e.p+e.u(334),e.b));s.postMessage(N(EDA.partialLeastSquareRegression.arguments,[n,r,o])),s.onmessage=function(n){s.terminate(),t(b(EDA.partialLeastSquareRegression,n.data))}}))}(t.table,t.features,t.predict,t.components);return{prediction:n[bn.PREDICTION],regressionCoefficients:n[bn.REGR_COEFFS],tScores:n[bn.T_SCORES],uScores:n[bn.U_SCORES],xLoadings:n[bn.X_LOADINGS],yLoadings:n[bn.Y_LOADINGS]}}))}function Gn(e){return Dn(this,void 0,void 0,(function*(){const r=t.shell.t;if(null===r)return void t.shell.warning(En.NO_DF);if(0===r.rowCount)return void t.shell.warning(En.EMPTY_DF);const i=[],s=[],a=[],u=t=>(t.type===o.COLUMN_TYPE.INT||t.type===o.COLUMN_TYPE.FLOAT)&&0===t.stats.missingValueCount;if(r.columns.toList().forEach((t=>{u(t)?(i.push(t.name),s.push(t)):t.type===o.COLUMN_TYPE.STRING&&a.push(t)})),0===i.length)return void t.shell.warning(En.NO_COLS);if(1===i.length)return void t.shell.warning(En.ONE_COL);let l=s[s.length-1];const c=n.columnInput(An.PREDICT,r,l,(()=>{l=c.value,y()}),{filter:t=>u(t)});let f;c.setTooltip(_n.PREDICT);const h=n.columnsInput(An.USING,r,(()=>{}),{available:i});h.onInput((()=>y())),h.setTooltip(_n.FEATURES);let m=kn(i.length-1,Cn.DEFAULT);const d=n.input.forProperty(o.Property.fromOptions({name:An.COMPONENTS,inputType:Sn,defaultValue:m,showPlusMinus:!0,min:Cn.MIN}));let p,g,v;d.onInput((()=>y())),d.setTooltip(_n.COMPONENTS),e===wn.COMPUTE_COMPONENTS?(p=An.PLS,g=In.PLS,v=_n.PLS):(p=An.MVA,g=In.MVA,v=_n.MVA);const y=()=>{var t;h.value=h.value.filter((t=>t!==l)),f=h.value,d.value=kn(Bn(null!==(t=d.value)&&void 0!==t?t:m,Cn.MIN),f.length),m=d.value,A.getButton(An.RUN).disabled=0===f.length||m<=0};let w=a.length>0?a[0]:null;const E=n.columnInput(An.NAMES,r,w,(()=>w=c.value),{filter:t=>t.type===o.COLUMN_TYPE.STRING});E.setTooltip(_n.NAMES),E.root.hidden=0===a.length||e===wn.COMPUTE_COMPONENTS;const A=n.dialog({title:p,helpUrl:g}).add(n.form([c,h,d,E])).addButton(An.RUN,(()=>Dn(this,void 0,void 0,(function*(){A.close(),yield function(e,r){var i,s;return Dn(this,void 0,void 0,(function*(){const a=yield Vn(e),u=a.tScores,l=e.table.columns,c=e.features.names(),f=r===wn.COMPUTE_COMPONENTS?Nn.PREFIX:An.XSCORE;if(u.forEach(((t,n)=>{t.name=l.getUnusedName(`${f}${n+1}`),l.add(t)})),r===wn.COMPUTE_COMPONENTS)return;const h=t.shell.tableView(e.table.name),m=o.DataFrame.fromColumns([o.Column.fromStrings(An.FEATURE,c),a.regressionCoefficients]);a.xLoadings.forEach(((t,n)=>{t.name=m.columns.getUnusedName(`${An.XLOADING}${n+1}`),m.columns.add(t)}));const d=a.prediction;d.name=l.getUnusedName(`${e.predict.name} ${Nn.SUFFIX}`),l.add(d);const p=h.addViewer(o.Viewer.scatterPlot(e.table,{title:An.MODEL,xColumnName:e.predict.name,yColumnName:d.name,showRegressionLine:!0,markerType:o.MARKER_TYPE.CIRCLE,labels:null===(i=e.names)||void 0===i?void 0:i.name,help:In.MODEL}));a.regressionCoefficients.name=An.REGR_COEFS;const g=h.addViewer(o.Viewer.barChart(m,{title:An.REGR_COEFS,splitColumnName:An.FEATURE,valueColumnName:a.regressionCoefficients.name,valueAggrType:o.AGG.AVG,help:In.COEFFS,showValueSelector:!1,showStackSelector:!1}));a.xLoadings.forEach(((t,n)=>t.name=`${An.XLOADING}${n+1}`));const v=h.addViewer(o.Viewer.scatterPlot(m,{title:An.LOADINGS,xColumnName:`${An.XLOADING}1`,yColumnName:`${An.XLOADING}${a.xLoadings.length>1?"2":"1"}`,markerType:o.MARKER_TYPE.CIRCLE,labels:An.FEATURE,help:In.LOADINGS})),y=u.map((t=>t.name));a.uScores.forEach(((t,n)=>{t.name=l.getUnusedName(`${An.YSCORE}${n+1}`),l.add(t),y.push(t.name)}));const w=o.Viewer.scatterPlot(e.table,{title:An.SCORES,xColumnName:u[0].name,yColumnName:u.length>1?u[1].name:a.uScores[0],markerType:o.MARKER_TYPE.CIRCLE,labels:null===(s=e.names)||void 0===s?void 0:s.name,help:In.SCORES,showViewerFormulaLines:!0}),E=[],A=(t,n)=>{E.push({type:"line",formula:t,width:Pn,visible:!0,title:" ",min:-n,max:n,color:Ln.CIRCLE})};y.forEach((t=>{const n="${"+t+"}";E.push({type:"line",formula:`${n} = 0`,width:Pn,visible:!0,title:" ",color:Ln.AXIS}),y.forEach((t=>{const e="${"+t+"}";Tn.forEach((t=>{A(e+` = sqrt(${t*t} - ${n} * ${n})`,t),A(e+` = -sqrt(${t*t} - ${n} * ${n})`,t)}))}))})),w.meta.formulaLines.addAll(E),h.addViewer(w);const _=a.yLoadings.getRawData(),I=a.xLoadings.map((t=>t.getRawData())),C=e.table.rowCount,N=c.length,b=e.components,S=new Float32Array(b),M=[],T=[];for(let t=0;t<N;++t)T.push(new Float32Array(b));S[0]=Math.pow(_[0],2)/C,M.push(`1 ${Nn.COMP}`),T.forEach(((t,n)=>{t[0]=Math.pow(I[0][n],2)/C}));for(let t=1;t<b;++t)S[t]=S[t-1]+Math.pow(_[t],2)/C,T.forEach(((n,e)=>n[t]=n[t-1]+Math.pow(I[t][e],2)/C)),M.push(`${t+1} ${Nn.COMPS}`);const P=o.DataFrame.fromColumns([o.Column.fromStrings(An.COMPONENTS,M),o.Column.fromFloat32Array(e.predict.name,S)]);T.forEach(((t,n)=>P.columns.add(o.Column.fromFloat32Array(c[n],t))));const O=h.addViewer(o.Viewer.barChart(P,{title:An.EXPL_VAR,splitColumnName:An.COMPONENTS,valueColumnName:e.predict.name,valueAggrType:o.AGG.AVG,help:In.EXPL_VARS,showCategorySelector:!1,showStackSelector:!1}));if(r===wn.DEMO){const e=[p,w,v,g,O].map(((t,n)=>({text:Fn[n].text,showNextTo:t.root})));n.hints.addTextHint({title:An.EXPLORE,pages:e}).helpUrl=In.MVA,t.shell.windows.help.showHelp(n.markdown(Un))}}))}({table:r,features:o.DataFrame.fromColumns(f).columns,predict:l,components:m,names:w},e)}))),void 0,v).show({x:On,y:xn});setTimeout((()=>{h.value=s.filter((t=>t!==l)),f=h.value}),Mn),t.shell.v.append(A.root)}))}var qn,Wn=e(2162);function Yn(t){if(t<=0||t>=1)throw new Error(qn.INCORRECT_SIGNIFICANCE_LEVEL)}function Hn(t){const n=t.size;if(n<=0)throw new Error(qn.INCORRECT_SAMPLE_SIZE);return 1===n?0:(t.sumOfSquares-Math.pow(t.sum,2)/n)/(n-1)}function $n(t,n,e=.05){Yn(e);const r=Hn(t),o=Hn(n);return 0===o?r===o:r/o<Wn.centralF.inv(1-e,t.size-1,n.size-1)}!function(t){t.NON_EQUAL_FACTORS_VALUES_SIZE="non-equal sizes of factor and values arrays. INPUT ERROR.",t.INCORRECT_SIGNIFICANCE_LEVEL="incorrect significance level. It must be from the interval (0, 1). INPUT ERROR.",t.INCORRECT_SAMPLE_SIZE="incorrect size of sample. DATA FACTORIZAING ERROR.",t.NON_EQUAL_VARIANCES="variances are not equal.",t.NON_NORMAL_DISTRIB="non-normal distribution.",t.UNSUPPORTED_COLUMN_TYPE="unsupported column type.",t.INCORRECT_CATEGORIES_COL_TYPE="incorrect categories column type.",t.ANOVA_FAILED_JUST_ONE_CAT="ANOVA filed: there should be at least 2 categories."}(qn||(qn={}));class zn{constructor(t,n,e=!1,r=.05){if(this.isNormDistrib=void 0,this.categories=[],t.type!==o.COLUMN_TYPE.STRING)throw new Error;if(t.length!==n.length)throw new Error(qn.NON_EQUAL_FACTORS_VALUES_SIZE);this.setStats(t,n,e,r)}isNormal(){return!0}areVarsEqual(t=.05){const n=this.catCount;if(1===n)return!0;const e={sum:this.sums[0],sumOfSquares:this.sumsOfSquares[0],size:this.subSampleSizes[0]};for(let r=1;r<n;++r)if(!$n(e,{sum:this.sums[r],sumOfSquares:this.sumsOfSquares[r],size:this.subSampleSizes[r]},t))return!1;return!0}getOneWayAnova(){const t=this.catCount;if(1===t)throw new Error(qn.ANOVA_FAILED_JUST_ONE_CAT);let n=0,e=0;const r=this.size;let o=0;for(let r=0;r<t;++r)n+=this.sums[r],e+=this.sumsOfSquares[r],o+=Math.pow(this.sums[r],2)/this.subSampleSizes[r];const i=e-Math.pow(n,2)/r,s=o-Math.pow(n,2)/r,a=i-s,u=t-1,l=r-t,c=s/u,f=a/l,h=c/f;return{ssBn:s,ssWn:a,ssTot:i,dfBn:u,dfWn:l,dfTot:r-1,msBn:c,msWn:f,fStat:h,pValue:1-Wn.centralF.cdf(h,u,l)}}setStats(t,n,e=!1,r=.05){const i=n.type,s=n.length;switch(i){case o.COLUMN_TYPE.INT:case o.COLUMN_TYPE.FLOAT:this.categories=t.categories;const e=this.categories.length;this.catCount=e,this.size=s;const r=n.getRawData(),i=t.getRawData(),a=new Float64Array(e).fill(0),u=new Float64Array(e).fill(0),l=new Int32Array(e).fill(0);for(let t=0;t<s;++t){const n=i[t];a[n]+=r[t],u[n]+=Math.pow(r[t],2),++l[n]}this.sums=a,this.sumsOfSquares=u,this.subSampleSizes=l;break;default:throw new Error(qn.UNSUPPORTED_COLUMN_TYPE)}}}var jn=function(t,n,e,r){return new(e||(e=Promise))((function(o,i){function s(t){try{u(r.next(t))}catch(t){i(t)}}function a(t){try{u(r.throw(t))}catch(t){i(t)}}function u(t){var n;t.done?o(t.value):(n=t.value,n instanceof e?n:new e((function(t){t(n)}))).then(s,a)}u((r=r.apply(t,n||[])).next())}))};function Kn(t,n,r,o){return jn(this,void 0,void 0,(function*(){return new Promise((function(i,s){const a=new Worker(new URL(e.p+e.u(796),e.b));a.postMessage({embedX:t,embedY:n,minPts:o,epsilon:r}),a.onmessage=({data:{error:t,clusters:n}})=>{a.terminate(),t?s(t):i(n)}}))}))}e(7905);let Xn=null;function Qn(){return t=this,n=void 0,r=function*(){if(!Xn&&(Xn=yield navigator.gpu.requestAdapter(),null==Xn))return null;const t=yield Xn.requestAdapterInfo();return t?Zn(t.description,Zn(t.vendor,"No GPU description available")):null},new((e=void 0)||(e=Promise))((function(o,i){function s(t){try{u(r.next(t))}catch(t){i(t)}}function a(t){try{u(r.throw(t))}catch(t){i(t)}}function u(t){var n;t.done?o(t.value):(n=t.value,n instanceof e?n:new e((function(t){t(n)}))).then(s,a)}u((r=r.apply(t,n||[])).next())}));var t,n,e,r}function Zn(t,n){return t&&""!=t?t:n}var Jn,te,ne,ee,re,oe,ie,se,ae;(te=Jn||(Jn={})).EUCLIDEAN="EUCLIDEAN",te.MANHATTAN="MANHATTAN",Jn.EUCLIDEAN,Jn.MANHATTAN,(ee=ne||(ne={})).HAMMING="Hamming",ee.EUCLIDEAN="Euclidean",ee.MANHATTAN="Manhattan",ee.TANIMOTO="Tanimoto",ee.LEVENSTEIN="Levenshtein",ee.NEEDLEMAN_WUNSCH="Needlemann-Wunsch",ee.MONOMER_CHEMICAL_DISTANCE="Monomer chemical distance",ee.SOKAL="Sokal",ee.COSINE="Cosine",ee.ASYMMETRIC="Asymmetric",ee.Difference="Difference",ee.OneHot="One-Hot",ne.HAMMING,ne.EUCLIDEAN,ne.MANHATTAN,ne.TANIMOTO,ne.LEVENSTEIN,ne.NEEDLEMAN_WUNSCH,ne.MONOMER_CHEMICAL_DISTANCE,ne.SOKAL,ne.COSINE,ne.ASYMMETRIC,ne.Difference,ne.OneHot,ne.HAMMING,ne.EUCLIDEAN,ne.MANHATTAN,ne.TANIMOTO,ne.SOKAL,ne.COSINE,ne.ASYMMETRIC,ne.LEVENSTEIN,ne.NEEDLEMAN_WUNSCH,ne.MONOMER_CHEMICAL_DISTANCE,ne.Difference,ne.OneHot,new Set([ne.HAMMING,ne.LEVENSTEIN,ne.NEEDLEMAN_WUNSCH,ne.MONOMER_CHEMICAL_DISTANCE,ne.OneHot]),new Set([ne.HAMMING,ne.EUCLIDEAN,ne.MANHATTAN,ne.MONOMER_CHEMICAL_DISTANCE,ne.LEVENSTEIN,ne.NEEDLEMAN_WUNSCH,ne.TANIMOTO,ne.COSINE,ne.SOKAL,ne.ASYMMETRIC,ne.OneHot,ne.Difference]),new Set([ne.EUCLIDEAN,ne.MANHATTAN,ne.OneHot,ne.Difference]),new Set([ne.EUCLIDEAN,ne.MANHATTAN,ne.Difference]),new Set([ne.EUCLIDEAN,ne.MANHATTAN,ne.Difference]),new Set([ne.TANIMOTO,ne.COSINE,ne.SOKAL,ne.ASYMMETRIC]),function(t){t.ADD="ADD",t.SUB="SUB",t.MULT="MULT"}(re||(re={})),function(t){t.SQUARE="SQUARE",t.INVERSE="INVERSE",t.TRANSPOSE="TRANSPOSE",t.NORM="NORM",t.COLUMN_NORM="COLUMN_NORM"}(oe||(oe={})),function(t){t.SCALARMULT="SCALARMULT",t.SCALARADD="SCALARADD",t.SCALARPOW="SCALARPOW"}(ie||(ie={})),Object.prototype.toString,(ae=se||(se={})).UMAP="UMAP",ae.T_SNE="t-SNE",o.SEMTYPE.MOLECULE,o.SEMTYPE.MACROMOLECULE;class ue{constructor(){this.epsilon={uiName:"Epsilon",value:.01,tooltip:"Minimum distance between cluster points",min:0,max:2,step:.005},this.minPts={uiName:"Minimum points",value:4,tooltip:"Minimum number of points in cluster",min:1,max:1e3,step:1}}}const le="bypassLargeDataWarning",ce="show-scatterplot-progress";var fe,he;(he=fe||(fe={})).EUCLIDEAN="EUCLIDEAN",he.MANHATTAN="MANHATTAN";const me=rxjs;var de=e(3379),pe=e.n(de),ge=e(7795),ve=e.n(ge),ye=e(569),we=e.n(ye),Ee=e(3565),Ae=e.n(Ee),_e=e(9216),Ie=e.n(_e),Ce=e(4589),Ne=e.n(Ce),be=e(9414),Se={};Se.styleTagTransform=Ne(),Se.setAttributes=Ae(),Se.insert=we().bind(null,"head"),Se.domAPI=ve(),Se.insertStyleElement=Ie(),pe()(be.Z,Se),be.Z&&be.Z.locals&&be.Z.locals;class Me{constructor(){this.learningRate={uiName:"Learninig rate",value:1,tooltip:"The initial learning rate for the embedding optimization"},this.nEpochs={uiName:"Epochs",value:0,tooltip:"The number of epochs to optimize embeddings via SGD. Computed automatically if set to 0"},this.nNeighbors={uiName:"Neighbors",value:15,tooltip:"The number of nearest neighbors to construct the fuzzy manifold"},this.spread={uiName:"Spread",value:1,tooltip:"The effective scale of embedded points, used with min distance to control \n the clumped/dispersed nature of the embedding"},this.minDist={uiName:"Min distance",value:.1,tooltip:"The effective minimum distance between embedded points, \n used with spread to control the clumped/dispersed nature of the embedding"},this.randomSeed={uiName:"Random seed",value:null,tooltip:"Random seed",type:"string"},this.useWebGPU={uiName:"Use WebGPU",value:!1,tooltip:"Use WebGPU for KNN computations",type:"boolean",disableTooltip:"WebGPU is not available"},Qn().then((t=>{t?this.useWebGPU.tooltip+=` (${t})`:(this.useWebGPU.value=!1,this.useWebGPU.disable=!0)}))}}class Te{constructor(){this.epsilon={uiName:"Epsilon",value:10,tooltip:"Epsilon is learning rate"},this.perplexity={uiName:"Perplexity",value:30,tooltip:"Roughly how many neighbors each point influences"}}}class Pe{constructor(e={}){this.editorSettings={},this.columnOptEditors=[],this.columnOptEditorsRoot=n.div(),this.columnParamsEditorRoot=n.div(),this.weightsEditorRoot=n.div(),this.columnFunctionsMap={},this.methodsParams={[se.UMAP]:new Me,[se.T_SNE]:new Te},this.dbScanParams=new ue,this.methodSettingsDiv=n.inputs([]),this.dbScanSettingsDiv=n.inputs([]),this.supportedFunctions={},this.plotEmbeddingsInput=n.boolInput("Plot embeddings",!0),this.clusterEmbeddingsInput=n.boolInput("Cluster embeddings",!1),this.aggregationMethodInput=n.choiceInput("Aggregation",fe.EUCLIDEAN,[fe.EUCLIDEAN,fe.MANHATTAN]),this.aggregationMethodInput.setTooltip("Aggregation method for combining distances between columns"),this.onColumnsChanged=new me.Subject,this.editorSettings=e,this.columnParamsEditorAccordion=n.accordion(),o.Func.find({tags:["dim-red-preprocessing-function"]}).forEach((t=>{const n=t.options.get("supportedSemTypes")??"",e=t.friendlyName??t.name,r=t.options.get("supportedTypes")??"",o=t.options.get("supportedUnits")??"",i=t.options.get("supportedDistanceFunctions")??"";this.editorSettings.semtype&&!n.includes(this.editorSettings.semtype)||this.editorSettings.type&&!r.includes(this.editorSettings.type)||this.editorSettings.units&&!o.includes(this.editorSettings.units)||(this.supportedFunctions[e]={func:t,semTypes:n?n.split(","):[],types:r?r.split(","):[],units:o?o.split(","):[],distanceFunctions:i?i.split(","):[]})})),this.postProcessingEditor=new Le,this.tableInput=n.tableInput("Table",t.shell.tv.dataFrame,t.shell.tables,(()=>{this.onTableInputChanged()})),this.onTableInputChanged();let r=!1,i=!1;this.methodInput=n.choiceInput("Method",se.UMAP,[se.UMAP,se.T_SNE],(()=>{r&&this.createAlgorithmSettingsDiv(this.methodSettingsDiv,this.methodsParams[this.methodInput.value])})),this.methodSettingsIcon=n.icons.settings((()=>{r=!r,r?this.createAlgorithmSettingsDiv(this.methodSettingsDiv,this.methodsParams[this.methodInput.value]):n.empty(this.methodSettingsDiv)}),"Modify methods parameters"),this.dbScanSettingsIcon=n.icons.settings((()=>{i=!i,i?this.createAlgorithmSettingsDiv(this.dbScanSettingsDiv,this.dbScanParams):n.empty(this.dbScanSettingsDiv)}),"Modify clustering parameters"),this.clusterEmbeddingsInput.classList.add("ml-dim-reduction-settings-input"),this.clusterEmbeddingsInput.root.prepend(this.dbScanSettingsIcon),this.methodInput.root.classList.add("ml-dim-reduction-settings-input"),this.methodInput.root.prepend(this.methodSettingsIcon),this.columnParamsEditorAccordion.addPane("Column options",(()=>this.columnOptEditorsRoot),!0,null,!1),this.columnParamsEditorAccordion.root.style.display="none",this.columnParamsEditorRoot.appendChild(this.columnParamsEditorAccordion.root),this.columnParamsEditorRoot.appendChild(this.weightsEditorRoot)}onTableInputChanged(){const t=this.tableInput.value;if(!t)return;n.empty(this.columnOptEditorsRoot),n.empty(this.weightsEditorRoot),this.columnFunctionsMap={},t.columns.toList().forEach((t=>{Object.keys(this.supportedFunctions).forEach((n=>{const e=this.supportedFunctions[n].semTypes,r=this.supportedFunctions[n].types,i=this.supportedFunctions[n].units,s=!e.length||t.semType&&e.includes(t.semType),a=!r.length||r.includes(t.type),u=!i.length||t.getTag(o.TAGS.UNITS)&&i.includes(t.getTag(o.TAGS.UNITS));s&&a&&u&&(this.columnFunctionsMap[t.name]||(this.columnFunctionsMap[t.name]=[]),this.columnFunctionsMap[t.name].push(n))}))}));const e=Object.keys(this.columnFunctionsMap),r=n.columnsInput("Columns",t,(()=>{this.onColumnsChanged.next(),n.empty(this.columnOptEditorsRoot),n.empty(this.weightsEditorRoot);const t=r.value;if(this.aggregationMethodInput.root.style.display=!t||t?.length<2?"none":"flex",!t||0===t.length)return void(this.columnParamsEditorAccordion.root.style.display="none");const e=[20,30,30,20];this.columnOptEditors=t.map((t=>new Oe(t,this.columnFunctionsMap[t.name].map((t=>this.supportedFunctions[t])),e)));const o=["Column","Encoding function","Similarity metric","Weight"].map(((t,r)=>n.h1(t,{style:{width:`${e[r]}%`,margin:0}})));n.tooltip.bind(o[1],"Encoding function for the column values"),n.tooltip.bind(o[2],"Distance/Similarity metric for the encoded column values"),n.tooltip.bind(o[3],"Weight of the column for combining distances between values");const i=n.divH(o,{classes:"ml-dim-reduction-column-editor-header-root"});this.columnOptEditorsRoot.appendChild(i);const s=n.divV([],{style:{maxHeight:"400px",overflow:"auto"}});this.columnOptEditors.forEach((t=>{s.appendChild(t.accordionDiv)})),this.columnOptEditorsRoot.appendChild(s),this.columnOptEditors.length>0&&(this.columnParamsEditorAccordion.root.style.display="flex")}),{available:e});r.fireChanged(),this.columnsInputRoot?(n.empty(this.columnsInputRoot),this.columnsInput=r,Array.from(this.columnsInput.root.children).forEach((t=>this.columnsInputRoot.appendChild(t)))):(this.columnsInputRoot=r.root,this.columnsInput=r)}createAlgorithmSettingsDiv(t,e){return n.empty(t),Object.keys(e).forEach((r=>{const o=e[r],i="string"===o.type?n.stringInput(o.uiName,o.value??"",(()=>{o.value=i.value})):"boolean"===o.type?n.boolInput(o.uiName,o.value??!1,(()=>{o.value=i.value})):n.floatInput(o.uiName,o.value,(()=>{o.value=i.value}));o.disable?(i.enabled=!1,n.tooltip.bind(i.input??i.root,o.disableTooltip??"")):n.tooltip.bind(i.input??i.root,o.tooltip),t.append(i.root)})),t}get algorithmOptions(){const t=this.methodsParams[this.methodInput.value],n={};return Object.keys(t).forEach((e=>{null!=t[e].value&&(n[e]=t[e].value)})),n}get dbScanOptions(){return{dbScanEpsilon:this.dbScanParams.epsilon.value??.01,dbScanMinPts:this.dbScanParams.minPts.value??4}}getEditor(){return n.div([this.tableInput.root,this.columnsInputRoot,this.columnParamsEditorRoot,this.aggregationMethodInput.root,this.methodInput.root,this.methodSettingsDiv,this.plotEmbeddingsInput,this.postProcessingEditor.root],{style:{minWidth:"420px"},classes:"ui-form"})}getParams(){return{table:this.tableInput.value,columns:this.columnsInput.value,methodName:this.methodInput.value,preprocessingFunctions:this.columnOptEditors.map((t=>t.preProcessingFunction)),distanceMetrics:this.columnOptEditors.map((t=>t.similarityMetricInput.value)),weights:this.columnOptEditors.map((t=>t.weight??1)),options:{...this.algorithmOptions,...this.dbScanOptions,preprocessingFuncArgs:this.columnOptEditors.map((t=>t.preprocessingFunctionSettings))},plotEmbeddings:this.plotEmbeddingsInput.value,clusterEmbeddings:!1,postProcessingFunction:this.postProcessingEditor.postProcessingFunction,postProcessingFunctionArgs:this.postProcessingEditor.args,aggreaggregationMethod:this.aggregationMethodInput.value}}}class Oe{constructor(t,e,r){this.preprocessingFuncSettingsDiv=n.div([]),this.preprocessingFunctionSettings={},this.editorDiv=n.div([]),this.hasExtraSettings=!0,this.functionsMap={},this.needsConfiguration=!1,this.weight=1,this.weightInput=n.floatInput("Weight",1,(()=>{this.weight=this.weightInput.value??1})),this.column=t,this.supportedFunctions=e.sort(((t,n)=>0!==t.units.length&&0!==n.units.length||t.units.length===n.units.length?t.units.length!==n.units.length?t.units.length-n.units.length:0===t.semTypes.length||0===n.semTypes.length?n.semTypes.length-t.semTypes.length:t.semTypes.length!==n.semTypes.length?t.semTypes.length-n.semTypes.length:t.types.length-n.types.length:n.units.length-t.units.length)),this.supportedFunctions.forEach((t=>{this.functionsMap[xe(t.func)]=t.func})),this.preprocessingFunctionInput=n.choiceInput("Encoding function",xe(this.supportedFunctions[0].func),this.supportedFunctions.map((t=>xe(t.func))),(()=>{const t=this.preprocessingFunctionInput.value,e=this.functionsMap[t];this.preprocessingFunctionSettings={},this.hasExtraSettings=e.inputs.length>2;const r=this.supportedFunctions.find((n=>xe(n.func)===t));this.getSimilarityMetricInput(r),n.empty(this.preprocessingFuncSettingsDiv),o=!1,this.hasExtraSettings?this.preprocessingFuncSettingsIcon.style.display="flex":this.preprocessingFuncSettingsIcon.style.display="none"})),this.preprocessingFunctionInput.root.style.display="flex",this.createSettingsDiv(this.preprocessingFuncSettingsDiv,this.supportedFunctions[0].func).then((()=>{n.empty(this.preprocessingFuncSettingsDiv)})),this.getSimilarityMetricInput(this.supportedFunctions[0]),this.hasExtraSettings=this.supportedFunctions[0].func.inputs.length>2;let o=!1;this.preprocessingFuncSettingsIcon=n.icons.settings((async()=>{o=!o,o?await this.createSettingsDiv(this.preprocessingFuncSettingsDiv,this.functionsMap[this.preprocessingFunctionInput.value]):n.empty(this.preprocessingFuncSettingsDiv)}),"Modify encoding function parameters"),this.preprocessingFunctionInput.root.classList.add("ml-dim-reduction-settings-input"),this.preprocessingFunctionInput.root.prepend(this.preprocessingFuncSettingsIcon),this.hasExtraSettings?this.preprocessingFuncSettingsIcon.style.display="flex":this.preprocessingFuncSettingsIcon.style.display="none",this.needsConfiguration=!(e.length<2&&!this.hasExtraSettings&&e[0].distanceFunctions.length<2);const i=n.h3(this.column.name,{classes:"ml-dim-reduction-column-editor-column-title"}),s=[i,this.preprocessingFunctionInput.root,this.similarityMetricInputRoot,this.weightInput.root];n.tooltip.bind(i,this.column.name),s.forEach(((t,n)=>{t.style.width=`${r[n]}%`})),s.forEach((t=>t.classList.add("ml-dim-reduction-column-editor-input-root")));const a=n.divH(s,{classes:"ml-dim-reduction-column-editor-root"});this.accordionDiv=n.divV([]),this.editorDiv.appendChild(a),this.editorDiv.appendChild(this.preprocessingFuncSettingsDiv),this.accordionDiv.appendChild(this.editorDiv)}getSimilarityMetricInput(t){const e=n.choiceInput("Similarity metric",t.distanceFunctions[0],t.distanceFunctions);this.similarityMetricInputRoot?(n.empty(this.similarityMetricInputRoot),this.similarityMetricInput=e,Array.from(this.similarityMetricInput.root.children).forEach((t=>this.similarityMetricInputRoot.appendChild(t)))):(this.similarityMetricInputRoot=e.root,this.similarityMetricInput=e)}get preProcessingFunction(){return this.functionsMap[this.preprocessingFunctionInput.value]}async createSettingsDiv(t,e){if(n.empty(t),e.inputs.length<3)return n.div();const r=e.prepare(),o=await r.buildEditor(n.div());for(let n=2;n<e.inputs.length;n++){const i=e.inputs[n],s=this.preprocessingFunctionSettings[i.name]||r.inputParams[e.inputs[n].name].value||i.defaultValue;s&&(this.preprocessingFunctionSettings[i.name]=s);const a=o.find((t=>t.property.name===i.name));a&&(null!==this.preprocessingFunctionSettings[i.name]&&void 0!==this.preprocessingFunctionSettings[i.name]&&(a.value=this.preprocessingFunctionSettings[i.name]),a.onChanged((()=>{this.preprocessingFunctionSettings[i.name]=a.value})),t.append(a.root))}return t.style.marginBottom="10px",t}}function xe(t){return t.friendlyName??t.name}class Le{constructor(){this.postProcessingFunctionsMap={},this._root=n.div([]),this._postProcessingArgs={},this._argsElement=n.div([]),this._settingsOpened=!1,this._settingsIcon=n.icons.settings((async()=>{this._settingsOpened=!this._settingsOpened,this._settingsOpened?this._argsElement.style.display="block":this._argsElement.style.display="none"})),this._argsElement.style.display="none",o.Func.find({tags:["dim-red-postprocessing-function"]}).filter((t=>t.inputs.length>=2)).forEach((t=>{const n=t.friendlyName??t.name;this.postProcessingFunctionsMap[n]=t})),this.postProcessingFunctionsMap.None=null;const t=Object.keys(this.postProcessingFunctionsMap).find((t=>!!this.postProcessingFunctionsMap[t]?.options?.defaultPostProcessingFunction))??"None";this.postProcessingFunctionInput=n.choiceInput("Postprocessing",t,Object.keys(this.postProcessingFunctionsMap),(async()=>{await this.onFunctionChanged()}),{nullable:!1}),this.onFunctionChanged(),this.postProcessingFunctionInput.nullable=!1,this.postProcessingFunctionInput.classList.add("ml-dim-reduction-settings-input"),this.postProcessingFunctionInput.root.prepend(this._settingsIcon),this._root.appendChild(this.postProcessingFunctionInput.root),this._root.appendChild(this._argsElement)}get postProcessingFunction(){return this.postProcessingFunctionInput.value?this.postProcessingFunctionsMap[this.postProcessingFunctionInput.value]:null}async onFunctionChanged(){const t=this.postProcessingFunction;if(n.empty(this._argsElement),this._postProcessingArgs={},!t||t.inputs.length<3)return void(this._settingsIcon.style.display="none");this._settingsIcon.style.display="flex";const e=t.prepare(),r=await e.buildEditor(n.div());for(let n=2;n<t.inputs.length;n++){const o=t.inputs[n],i=this._postProcessingArgs[o.name]||e.inputParams[t.inputs[n].name].value||o.defaultValue;i&&(this._postProcessingArgs[o.name]=i);const s=r.find((t=>t.property.name===o.name));s&&(s.onChanged((()=>{this._postProcessingArgs[o.name]=s.value})),this._argsElement.append(s.root))}}get root(){return this._root}get args(){return this._postProcessingArgs}}const Re="dimensionality-reducer-terminate-event",Fe=t=>null==t;class Ue extends Float32Array{}function De(t,n){return`${n} (${t.length>4?`${t.length} columns`:t.map((t=>t.name)).join(", ")})`}var ke;!function(t){t.NO_DATAFRAME="No dataframe is opened",t.NO_MISSING_VALUES="No missing values",t.ONE_AVAILABLE_FEATURE="Not enough of feature columns to apply imputation using the KNN method",t.ONE_FEATURE_SELECTED="Imputation cannot be applied to",t.UNSUPPORTED_COLUMN_TYPE="Unsupported column type",t.UNSUPPORTED_IMPUTATION_STRATEGY="Unsupported imputation strategy",t.KNN_CANNOT_BE_APPLIED="KNN imputer cannot be applied: no columns to be used as features",t.KNN_NO_TARGET_COLUMNS="KNN imputer cannot be applied: no columns with missing values",t.KNN_NO_FEATURE_COLUMNS="KNN imputer cannot be applied: no feature columns",t.KNN_NOT_ENOUGH_OF_ROWS="KNN imputer cannot be applied: not enough of rows",t.KNN_IMPOSSIBLE_IMPUTATION="Imputation is impossible, no features can be used",t.INCORRECT_NEIGHBORS="Incorrect number of neighbors",t.KNN_FAILS="KNN IMPUTATION FAILS",t.CORE_ISSUE="Core issue",t.FAILED_TO_IMPUTE="Failed to impute",t.UNSUPPORTED_FILL_VALUE_TYPE="Unsupported fill value type",t.EMPTY_COLUMN="Column contains just null values",t.FAILS_TO_PREDICT_IMPUTATION_FAILS="Failed to predict imputation fails",t.WRONG_PREDICTIONS="wrong evaluation of KNN imputation fails"}(ke||(ke={}));const Be="copy";var Ve;!function(t){t.KNN_IMPUTER="Impute",t.TABLE="Table",t.IN_PLACE="In-place",t.COLUMNS="Impute",t.FEATURES="Using",t.CANCEL="CANCEL",t.RUN="RUN",t.OK="OK",t.NEIGHBORS="Neighbors",t.DISTANCE="Distance",t.FILL="Fill",t.MARK="Mark",t.SIMPLE_IMPUTER="Simple impute",t.SETTINGS="Settings",t.KEEP_EMPTY="Keep empty"}(Ve||(Ve={}));const Ge="/help/transform/missing-values-imputation";var qe;!function(t){t.TARGET="Columns with missing values that must be filled",t.FEATURES="Columns with features to be used for determining the 'nearest' elements in the KNN method",t.IN_PLACE="Defines whether to use in-place imputation or add a new column without missing values",t.METRIC="Type of metric between the feature values",t.WEIGHT="Weight",t.NEIGHBORS="Neighbors count used in the KNN method",t.DISTANCE="Type of distance between elements with the specified features",t.METRIC_SETTINGS="Show additional options",t.FILL_FAILED_ITEMS="Impute missing values using a simple approach: mean, median or most frequent",t.MARK_FAILED_ITEMS="Mark missing values cells with a color",t.FILL_VALUE="Fill value",t.IMPUTATION_SETTINGS="Simple imputation settings",t.KEEP_EMPTY="Defines whether to keep empty missing values failed to be imputed OR fill them using simple imputation"}(qe||(qe={}));const We=[o.COLUMN_TYPE.INT,o.COLUMN_TYPE.FLOAT,o.COLUMN_TYPE.STRING,o.COLUMN_TYPE.DATE_TIME,o.COLUMN_TYPE.QNUM];function Ye(t){switch(t.type){case o.COLUMN_TYPE.INT:return o.INT_NULL;case o.COLUMN_TYPE.FLOAT:case o.COLUMN_TYPE.QNUM:case o.COLUMN_TYPE.DATE_TIME:return o.FLOAT_NULL;case o.COLUMN_TYPE.STRING:return t.max;default:throw new Error(ke.UNSUPPORTED_COLUMN_TYPE)}}var He,$e,ze;!function(t){t.ONE_HOT="One-hot",t.DIFFERENCE="Difference"}(He||(He={})),function(t){t.EUCLIDEAN="Euclidean",t.MANHATTAN="Manhattan"}($e||($e={})),function(t){t[t.WEIGHT=1]="WEIGHT",t[t.NEIGHBORS=4]="NEIGHBORS",t[t.IN_PLACE=1]="IN_PLACE",t[t.SELECTED=1]="SELECTED",t[t.KEEP_EMPTY=0]="KEEP_EMPTY"}(ze||(ze={}));const je=1;function Ke(t,n,e){for(const t of n)if(!e.has(t))return!1;for(const r of t){const t=e.get(r);if(void 0===t)throw new Error(ke.FAILS_TO_PREDICT_IMPUTATION_FAILS);for(const r of t){let t=!0;for(const o of n){const n=e.get(o);if(void 0===n)throw new Error(ke.FAILS_TO_PREDICT_IMPUTATION_FAILS);if(!n.includes(r)){t=!1;break}}if(t)return!0}}return!1}function Xe(){let e=t.shell.t;if(null===e)return void t.shell.warning(ke.NO_DATAFRAME);const r=[],i=[],s=[];e.columns.toList().filter((t=>We.includes(t.type))).forEach((t=>{s.push(t.name),t.stats.missingValueCount>0&&(r.push(t),i.push(t.name))}));const a=function(t){const n=new Map;for(const e of t){if(!We.includes(e.type))throw new Error(ke.UNSUPPORTED_COLUMN_TYPE);if(0===e.stats.missingValueCount)continue;const t=[],r=Ye(e);e.getRawData().forEach(((n,e)=>{n===r&&t.push(e)})),n.set(e.name,t)}return n}(r);if(0===r.length)return void t.shell.info(ke.NO_MISSING_VALUES);if(1===s.length)return void t.shell.error(ke.ONE_AVAILABLE_FEATURE);let u=ze.IN_PLACE>0;const l=n.boolInput(Ve.IN_PLACE,u,(()=>{var t;u=null!==(t=l.value)&&void 0!==t&&t}));l.setTooltip(qe.IN_PLACE);let c=ze.KEEP_EMPTY>0;const f=n.boolInput(Ve.KEEP_EMPTY,c,(()=>{var t;c=null!==(t=f.value)&&void 0!==t&&t}));f.setTooltip(qe.KEEP_EMPTY);let h=ze.NEIGHBORS;const m=n.intInput(Ve.NEIGHBORS,h,(()=>{const t=m.value;null===t?m.value=h:t>=je?h=t:m.value=h}));m.setTooltip(qe.NEIGHBORS);let d=$e.EUCLIDEAN;const p=n.choiceInput(Ve.DISTANCE,d,[$e.EUCLIDEAN,$e.MANHATTAN],(()=>{var t;return d=null!==(t=p.value)&&void 0!==t?t:$e.EUCLIDEAN}));p.setTooltip(qe.DISTANCE);let g=r.map((t=>t.name));const v=n.columnsInput(Ve.COLUMNS,e,(()=>{g=v.value.map((t=>t.name)),A()}),{available:i,checked:i});v.setTooltip(qe.TARGET);let y=s;const w=n.columnsInput(Ve.FEATURES,e,(()=>{y=w.value.map((t=>t.name)),y.length>0?(A(),I.forEach(((t,n)=>t.hidden=!y.includes(n)))):E()}),{available:s,checked:s});w.setTooltip(qe.FEATURES);const E=()=>{N.getButton(Ve.RUN).disabled=!0,l.root.hidden=!0,f.root.hidden=!0,m.root.hidden=!0,S.hidden=!0,C.hidden=!0},A=()=>{N.getButton(Ve.RUN).disabled=!1,S.hidden=!1,l.root.hidden=!1,m.root.hidden=!1,p.root.hidden=!1,f.root.hidden=!Ke(g,y,a),1===y.length&&g.forEach((n=>{y[0]===n&&(E(),t.shell.warning(`${ke.ONE_FEATURE_SELECTED} the column '${n}'`))}))},_=new Map,I=new Map,C=n.divV([]);C.style.overflow="auto",s.forEach((t=>{const r=function(t){switch(t){case o.COLUMN_TYPE.STRING:case o.COLUMN_TYPE.DATE_TIME:return{defaultWeight:ze.WEIGHT,defaultMetric:He.ONE_HOT,availableMetrics:[He.ONE_HOT]};case o.COLUMN_TYPE.INT:case o.COLUMN_TYPE.FLOAT:case o.COLUMN_TYPE.QNUM:return{defaultWeight:ze.WEIGHT,defaultMetric:He.DIFFERENCE,availableMetrics:[He.DIFFERENCE,He.ONE_HOT]};default:throw new Error(ke.UNSUPPORTED_COLUMN_TYPE)}}(e.col(t).type);_.set(t,{weight:r.defaultWeight,type:r.defaultMetric});const i=n.choiceInput(t,r.defaultMetric,r.availableMetrics,(()=>{var n,e;const o=null!==(n=_.get(t))&&void 0!==n?n:{weight:r.defaultWeight,type:r.defaultMetric};o.type=null!==(e=i.value)&&void 0!==e?e:r.defaultMetric,_.set(t,o)}));i.root.style.width="50%",i.setTooltip(qe.METRIC),i.root.hidden=!0;const s=o.Property.fromOptions({name:t,inputType:"Float",min:0,max:10,showSlider:!0,step:1}),a=n.input.forProperty(s);a.value=r.defaultWeight,a.onChanged((()=>{var n,e;const o=null!==(n=_.get(t))&&void 0!==n?n:{weight:r.defaultWeight,type:r.defaultMetric};o.weight=null!==(e=a.value)&&void 0!==e?e:r.defaultWeight,_.set(t,o)})),a.setTooltip(qe.WEIGHT);const u=n.divH([i.root,a.root]);I.set(t,u),C.append(u)}));const N=n.dialog({title:Ve.KNN_IMPUTER,helpUrl:Ge});t.shell.v.root.appendChild(N.root),C.hidden=!0,f.root.hidden=!Ke(g,y,a);const b=n.icons.settings((()=>{C.hidden=!C.hidden}),qe.METRIC_SETTINGS),S=n.divH([p.root,b]);N.addButton(Ve.RUN,(()=>{N.close(),s.filter((t=>!y.includes(t))).forEach((t=>_.delete(t)));try{const n=function(n,e,r,i,s,a,u){if(a<je)throw new Error(ke.INCORRECT_NEIGHBORS);if(n.rowCount<2)throw new Error(ke.KNN_NOT_ENOUGH_OF_ROWS);if(0===e.length)throw new Error(ke.KNN_NO_TARGET_COLUMNS);if(0===r.size)throw new Error(ke.KNN_NO_FEATURE_COLUMNS);1===r.size&&e.forEach((t=>{if(r.has(t))throw new Error(`${ke.KNN_NO_FEATURE_COLUMNS} can be used for the column '${t}'`)})),e.forEach((t=>{if(!i.has(t))throw new Error(`${ke.KNN_FAILS}: ${ke.WRONG_PREDICTIONS}`)}));const l=n.columns;e.forEach((t=>{if(!We.includes(l.byName(t).type))throw new Error(ke.UNSUPPORTED_COLUMN_TYPE)})),r.forEach(((t,e)=>{if(!We.includes(n.getCol(e).type))throw new Error(ke.UNSUPPORTED_COLUMN_TYPE)}));const c=new Map;return e.forEach((e=>{const f=l.byName(e),h=Ye(f),m=f.length,d=f.getRawData(),p=new Uint16Array(f.categories.length),g=[],v=[],y=[],w=[];r.forEach(((t,n)=>{if(n!==f.name){const e=l.byName(n);switch(g.push(e.getRawData()),v.push(Ye(e)),t.type){case He.DIFFERENCE:y.push(((n,e)=>t.weight*Math.abs(n-e)));break;case He.ONE_HOT:y.push(((n,e)=>t.weight*(n===e?0:1)))}}}));const E=g.length,A=new Uint32Array(g.length),_=new Float32Array(g.length);let I=0;const C=new Array(a);let N=0,b=0,S=0,M=0,T=0;const P=(t,n)=>{A.forEach(((e,r)=>{_[r]=y[e](g[e][t],g[e][n])}))},O=s===$e.EUCLIDEAN?()=>{let t=0;for(let n=0;n<I;++n)t+=_[n]*_[n];return Math.sqrt(t)}:()=>{let t=0;for(let n=0;n<I;++n)t+=Math.abs(_[n]);return Math.sqrt(t)},x=t=>{if(d[t]===h)return!1;for(let n=0;n<I;++n)if(g[A[n]][t]===v[A[n]])return!1;return!0},L=t=>{if((t=>{I=0;for(let n=0;n<E;++n)g[n][t]!==v[n]&&(A[I]=n,++I)})(t),0===I)throw new Error(`${ke.KNN_IMPOSSIBLE_IMPUTATION}: the column "${f.name}", row ${t+1}`);N=0;for(let n=0;n<m;++n)if(x(n)&&n!==t){P(t,n);const e=O();if(N<a)C[N]={index:n,dist:e},++N;else{b=0,S=C[0].dist;for(let t=1;t<N;++t)S<C[t].dist&&(S=C[t].dist,b=t);e<S&&(C[b]={index:n,dist:e})}}if(0===N)throw new Error(`${ke.KNN_IMPOSSIBLE_IMPUTATION}: the column "${f.name}", row ${t+1}`);if(f.type===o.COLUMN_TYPE.STRING)return(()=>{p.forEach(((t,n,e)=>e[n]=0));let t=0;for(t=0;t<N;++t)++p[d[C[t].index]];let n=p[0],e=0;return p.forEach(((t,r)=>{t>n&&(n=t,e=r)})),e})();M=0;for(let t=0;t<N;++t)M+=d[C[t].index];return T=M/N,f.type===o.COLUMN_TYPE.INT?Math.round(T):T};if(u){for(const n of i.get(e))try{d[n]=L(n)}catch(e){w.push(n),e instanceof Error||t.shell.error(ke.CORE_ISSUE)}w.length>0&&c.set(e,w),f.set(0,f.get(0))}else{const r=f.clone();let o=1,s=`${e}(${Be})`;for(;n.columns.contains(s);)s=`${e}(${Be} ${o})`,++o;r.name=s;const a=r.getRawData();for(const n of i.get(e))try{a[n]=L(n)}catch(e){w.push(n),e instanceof Error||t.shell.error(ke.CORE_ISSUE)}w.length>0&&c.set(s,w),r.set(0,r.get(0)),n.columns.add(r)}})),c}(e,g,_,a,d,h,u);c||function(t,n){n.forEach(((n,e)=>{const r=t.col(e);if(null!==r){if(!We.includes(r.type))throw new Error(ke.UNSUPPORTED_COLUMN_TYPE);const t=function(t){switch(t.type){case o.COLUMN_TYPE.STRING:case o.COLUMN_TYPE.DATE_TIME:return function(t){const n=Ye(t),e=t.getRawData(),r=e.length;for(let o=0;o<r;++o)if(e[o]!==n)return t.get(o);throw new Error(ke.EMPTY_COLUMN)}(t);case o.COLUMN_TYPE.INT:case o.COLUMN_TYPE.FLOAT:case o.COLUMN_TYPE.QNUM:return t.stats.avg;default:throw new Error(ke.UNSUPPORTED_COLUMN_TYPE)}}(r);n.forEach((n=>r.set(n,t)))}}))}(e,n)}catch(n){n instanceof Error?t.shell.error(`${ke.KNN_FAILS}: ${n.message}`):t.shell.error(`${ke.KNN_FAILS}: ${ke.CORE_ISSUE}`)}})).add(v).add(w).add(S).add(C).add(m).add(l).add(f).show()}class Qe extends Pe{constructor(t={}){super(t),this.similarityThresholdInput=n.intInput("Similarity threshold",80),this.maxIterationsInput=n.intInput("Max iterations",5),this.useWebGPUInput=n.boolInput("Use WebGPU",!1),Qn().then((t=>{t?this.useWebGPUInput.setTooltip(`Use webGPU for MCL calculation (${t})`):(this.useWebGPUInput.value=!1,this.useWebGPUInput.setTooltip("WebGPU is not available"),this.useWebGPUInput.enabled=!1)}))}getEditor(){return n.div([this.tableInput.root,this.columnsInputRoot,this.columnParamsEditorRoot,this.aggregationMethodInput.root,this.similarityThresholdInput.root,this.maxIterationsInput.root,this.useWebGPUInput.root],{style:{minWidth:"420px"},classes:"ui-form"})}get params(){return{table:this.tableInput.value,columns:this.columnsInput.value,methodName:this.methodInput.value,preprocessingFunctions:this.columnOptEditors.map((t=>t.preProcessingFunction)),distanceMetrics:this.columnOptEditors.map((t=>t.similarityMetricInput.value)),weights:this.columnOptEditors.map((t=>t.weight)),preprocessingFuncArgs:this.columnOptEditors.map((t=>t.preprocessingFunctionSettings)),aggreaggregationMethod:this.aggregationMethodInput.value,threshold:this.similarityThresholdInput.value,maxIterations:this.maxIterationsInput.value??5,useWebGPU:this.useWebGPUInput.value??!1}}}class Ze{constructor(t,n=!1){if(this._length=0,this._version=0,this._updateLevel=0,this._selectedCount=0,this._selectedCountVersion=-1,this._selectedIndexesVersion=-1,this._versionedName="",this._versionedNameVersion=-1,this.SHRINK_THRESHOLD=256,"number"==typeof t){const e=t,r=Ze._createBuffer(e);if(n)for(let t=0;t<r.length;t++)r[t]=-1;this._data=r,this._length=e}else{if(!(t instanceof Uint32Array))throw new Error("Invalid constructor");this._data=t,this._length=n}}getRawData(){return this._data}assureGoez(t,n){if(t<0)throw new Error(`${n} should be greater than zero`)}assureInRange(t,n,e,r){if(t<n||t>e)throw new Error(`Argument ${r} (${t}) out of range (${n}, ${e})`)}copy(t,n,e){for(let r=0;r<e;r++)n[r]=t[r]}copyFrom(t){if(this._length!=t._length)throw new Error(`Lengths differ (${this._length} != ${t._length})`);this.copy(t._data,this._data,this.lengthInInts),this._version++}get length(){return this._length}get buffer(){return this._data}set buffer(t){this._data=t,this._version++}get version(){return this._version}set version(t){this._version=t}incrementVersion(t=!0){this._version++}get lengthInInts(){return Math.floor((this._length+31)/32)}get versionedName(){return this._version==this._versionedNameVersion?this._versionedName:""}set versionedName(t){this._versionedName=t,this._versionedNameVersion=this._version}get self(){return this}setLength(t){if(t<0)throw new Error("should be >= 0");if(t==this._length)return;const n=Math.floor((t+31)/32);if(n>this._data.length||n+this.SHRINK_THRESHOLD<this._data.length){const t=new Uint32Array(n);this.copy(this._data,t,n>this._data.length?this._data.length:n),this._data=t}t>this._length&&(this._length%32>0&&(this._data[this.lengthInInts-1]&=(1<<(this._length%32&31))-1),this._data.fill(0,this.lengthInInts,n)),this._length=t,this._version++}static fromAnd(t,n){if(t._length!=n._length)throw new Error(`Lengths differ (${t._length} != ${n._length})`);const e=new Ze(t._length);e._length=t._length,e._data=Ze._createBuffer(e._length),e._version=0;const r=t.lengthInInts;for(let o=0;o<r;o++)e._data[o]=t._data[o]&n._data[o];return e}static _createBuffer(t){return new Uint32Array(Math.floor((t+31)/32))}static fromValues(t){const n=new Ze(t.length);n._version=0;for(let e=0;e<n._length;e++)t[e]&&(n._data[Math.floor(e/32)]|=1<<(e%32&31));return n}static fromSeq(t,n){const e=new Ze(t);for(let r=0;r<t;++r)e.setBit(r,n(r));return e._version=0,e}static fromString(t){return Ze.fromSeq(t.length,(n=>"1"==t.charAt(n)))}static fromUint32Array(t,n){const e=new Ze(t);return e._data=n,e}static fromBytes(t){const n=t.length,e=new Ze(8*n);e._data=new Uint32Array(Math.floor((n+3)/4)),e._length=8*n;let r=0,o=0;for(;n-o>=4;)e._data[r++]=255&t[o]|(255&t[o+1])<<8|(255&t[o+2])<<16|(255&t[o+3])<<24,o+=4;return n-o==3&&(e._data[r]=(255&t[o+2])<<16),n-o==2&&(e._data[r]|=(255&t[o+1])<<8),n-o==1&&(e._data[r]|=255&t[o]),e._version=0,e}toString(){return`${this._length} bits, ${this.countBits(!0)} set`}equals(t){if(this==t)return!0;if(null==t)return!1;if(this._length!=t._length)return!1;if(0==this._length)return!0;for(let n=0;n<this._data.length-1;n++)if(this._data[n]!=t._data[n])return!1;for(let n=8*(this._data.length-1);n<this._length;n++)if(this.getBit(n)!=t.getBit(n))return!1;return!0}clone(){const t=new Ze(0,!1);return t._data=Uint32Array.from(this._data),t._length=this._length,t._version=this._version,t}init(t,n){this.setAll(!1,!1);for(let n=0;n<this._length;n++)t(n)&&(this._data[Math.floor(n/32)]|=1<<(n%32&31));return this.incrementVersion(n),this}invert(t=!0){for(let t=0;t<this._data.length;t++)this._data[t]^=-1;this.incrementVersion(t)}setAll(t,n=!1){const e=t?-1:0,r=this.lengthInInts;for(let t=0;t<r;t++)this._data[t]=e;this.incrementVersion(n)}setIndexes(t,n=!0,e=!0,r=!0){e&&this.setAll(!n,!1);for(const e of t)this.setFast(e,n);this.incrementVersion(r)}everyIndex(t,n=!0){for(const e of t)if(this.getBit(e)!=n)return!1;return!0}anyIndex(t,n=!0){for(const e of t)if(this.getBit(e)==n)return!0;return!1}setWhere(t,n=!0,e=!0,r=!0,o=!0){if(e&&o&&this.setAll(!n,!1),o)for(let e=0;e<this._length;e++)t(e)&&this.setFast(e,n);else for(let e=0;e<this._length;e++)this.setFast(e,t(e)?n:!n);this.incrementVersion(r)}getRange(t,n){this.assureInRange(t,0,this._length-1,"from"),this.assureInRange(n,0,this._length,"to");const e=[];for(let r=t;r<n;++r)e.push(this.getBit(r));return Ze.fromValues(e)}getRangeAsList(t,n){this.assureInRange(t,0,this._length-1,"from"),this.assureInRange(n,0,this._length,"to");const e=[];for(let r=t;r<n;++r)e.push(this.getBit(r));return e}setRange(t,n,e,r=!0){this.assureInRange(t,0,this._length-1,"from"),this.assureInRange(n,0,this._length-1,"to");const o=Math.min(t,n),i=Math.max(t,n);if(e)for(let t=o;t<=i;t++)this.setTrue(t);else for(let t=o;t<=i;t++)this.setFalse(t);return this.incrementVersion(r),this}setRandom(t,n,e=!0){if(t<0||t>this._length)throw new Error("n must be >= 0 && <= Count");t>this._length/2&&this.setRandom(this._length-t,!n),this.setAll(!n);for(let e=0;e<t;){const t=Math.floor(Math.random()*this._length);this.getBit(t)!=n&&(this.setFast(t,n),e++)}this.incrementVersion(e)}and(t,n=!0){if(this._length!=t._length)throw new Error("Array lengths differ.");for(let n=0,e=this.lengthInInts;n<e;n++)this._data[n]&=t._data[n];return this.incrementVersion(n),this}andNot(t,n=!0){if(this._length!=t._length)throw new Error("Array lengths differ.");const e=this.lengthInInts;for(let n=0;n<e;n++)this._data[n]&=~t._data[n];return this.incrementVersion(n),this}notAnd(t,n=!0){if(this._length!=t._length)throw new Error("Array lengths differ.");for(let n=0,e=this.lengthInInts;n<e;n++)this._data[n]=~this._data[n]&t._data[n];return this.incrementVersion(n),this}not(t=!0){for(let t=0,n=this.lengthInInts;t<n;t++)this._data[t]=~this._data[t];return this.incrementVersion(t),this}or(t,n=!0){if(this._length!=t._length)throw new Error("Array lengths differ.");for(let n=0,e=this.lengthInInts;n<e;n++)this._data[n]|=t._data[n];return this.incrementVersion(n),this}xor(t,n=!0){if(this._length!=t._length)throw new Error("Array lengths differ.");for(let n=0,e=this.lengthInInts;n<e;n++)this._data[n]^=t._data[n];return this.incrementVersion(n),this}insertAt(t,n,e=!1){if(this.assureInRange(t,0,this._length,"pos"),0==n)return;const r=this._length;this.setLength(this._length+n);for(let e=r-1;e>=t;e--)this.setBit(e+n,this.getBit(e));for(let r=t;r<t+n;r++)this.setBit(r,e)}removeAt(t,n=1){if(n<0)throw new Error("n cannot be negative");if(this.assureInRange(t,0,this._length-n,"pos"),this.contains(!0))for(let e=t;e<this._length-n;e++)this.setBit(e,this.getBit(e+n));this.setLength(this._length-n)}removeByMask(t,n=!0){if(this._length!=t.length)throw new Error("length != mask.length");if(t==this)this.setLength(t.countBits(!n)),this.setAll(!n);else{let e=0;for(let r=-1;-1!=(r=t.findNext(r,!n));)this.setFast(e++,this.getBit(r));this._length=e,this._version++}return this}getBit(t){return 0!=(this._data[Math.floor(t/32)]&1<<(31&t))}setBit(t,n,e=!0){this.setFast(t,n),this._version++}setFast(t,n){n?this._data[Math.floor(t/32)]|=1<<(31&t):this._data[Math.floor(t/32)]&=~(1<<(31&t))}setTrue(t){this._data[Math.floor(t/32)]|=1<<(31&t)}setFalse(t){this._data[Math.floor(t/32)]&=~(1<<(31&t))}trueCount(){return this.countBits(!0)}falseCount(){return this.countBits(!1)}countBits(t){if(0==this._length)return 0;if(this._selectedCountVersion!=this._version){this._selectedCount=0;const t=this.lengthInInts;let n=0;for(;n<t-1;n++)for(let t=this._data[n];0!=t;t>>>=8)this._selectedCount+=Ze._onBitCount[255&t];let e=this._data[n];const r=31&this._length;for(0!=r&&(e&=~(4294967295<<r));0!=e;e>>>=8)this._selectedCount+=Ze._onBitCount[255&e];this._selectedCountVersion=this._version}return t?this._selectedCount:this._length-this._selectedCount}countWhere(t){let n=0;if(this.trueCount()==this._length)for(let e=0;e<this._length;e++)n+=t(e)?1:0;else for(let e=-1;-1!=(e=this.findNext(e,!0));)n+=t(e)?1:0;return n}andWithCountBits(t,n){if(0==this._length)return 0;let e=0;const r=this.lengthInInts;let o=0;for(;o<r-1;o++)for(let n=this._data[o]&t._data[o];0!=n;n>>>=8)e+=Ze._onBitCount[255&n];let i=this._data[o]&t._data[o];const s=31&this._length;for(0!=s&&(i&=~(4294967295<<s));0!=i;i>>>=8)e+=Ze._onBitCount[255&i];return n?e:this._length-e}clear(){this.setLength(0)}contains(t){return this.findNext(-1,t)>=0}get allTrue(){return this.countBits(!0)==this._length}get allFalse(){return this.countBits(!1)==this._length}get anyTrue(){return this.countBits(!0)>0}get anyFalse(){return this.countBits(!1)>0}findNext(t,n=!0){if(this.assureInRange(t,-1,this._length,"index"),t>=this._length-1)return-1;let e=31&(t=t<0?0:t+1);const r=this.lengthInInts;for(let o=Math.floor(t/32);o<r;o++){let r=n?this._data[o]:~this._data[o];if(0!=e)r&=4294967295<<e&4294967295,e=0;else if(!n&&-4294967296==r)continue;for(let n=0;0!=r;n+=8,r>>>=8){const e=Ze._firstOnBit[255&r];if(e>=0)return(t=e+32*o+n)>=this._length?-1:t}}return-1}findPrev(t,n=!0){if(0==t)return-1;this.assureInRange(t,-1,this._length,"index");let e=1+(t=t<0?this._length-1:t-1)&31;for(let r=Math.floor(t/32);r>=0;r--){let t=n?this._data[r]:~this._data[r];0!=e&&(t&=~(4294967295<<e),e=0);for(let n=24;0!=t;n-=8,t<<=8){const e=Ze._lastOnBit[t>>>24];if(e>=0)return e+32*r+n}}return-1}}var Je;Ze._onBitCount=Int8Array.from([0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4,1,2,2,3,2,3,3,4,2,3,3,4,3,4,4,5,1,2,2,3,2,3,3,4,2,3,3,4,3,4,4,5,2,3,3,4,3,4,4,5,3,4,4,5,4,5,5,6,1,2,2,3,2,3,3,4,2,3,3,4,3,4,4,5,2,3,3,4,3,4,4,5,3,4,4,5,4,5,5,6,2,3,3,4,3,4,4,5,3,4,4,5,4,5,5,6,3,4,4,5,4,5,5,6,4,5,5,6,5,6,6,7,1,2,2,3,2,3,3,4,2,3,3,4,3,4,4,5,2,3,3,4,3,4,4,5,3,4,4,5,4,5,5,6,2,3,3,4,3,4,4,5,3,4,4,5,4,5,5,6,3,4,4,5,4,5,5,6,4,5,5,6,5,6,6,7,2,3,3,4,3,4,4,5,3,4,4,5,4,5,5,6,3,4,4,5,4,5,5,6,4,5,5,6,5,6,6,7,3,4,4,5,4,5,5,6,4,5,5,6,5,6,6,7,4,5,5,6,5,6,6,7,5,6,6,7,6,7,7,8]),Ze._firstOnBit=Int8Array.from([-1,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,5,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,6,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,5,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,7,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,5,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,6,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,5,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0]),Ze._lastOnBit=Int8Array.from([-1,0,1,1,2,2,2,2,3,3,3,3,3,3,3,3,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7]),function(t){t.none="none",t.bold="bold",t.dashed="dashed"}(Je||(Je={}));class tr{get currentLineId(){return this._currentLineIdx}set currentLineId(t){t!==this._currentLineIdx&&(this._currentLineIdx=t,this.sp.render(this.ctx))}set linesToRender(t){this.updateLines(t),this.sp.render(this.ctx)}set linesVisibility(t){this.visibility=t,this.sp.render(this.ctx)}constructor(t,n,e,r,o=Je.none){var i;this._currentLineIdx=-1,this.lineClicked=new me.Subject,this.lineHover=new me.Subject,this.mouseOverLineId=-1,this.arrowWidth=15,this.sp=t,this.xAxisCol=this.sp.dataFrame.columns.byName(n),this.yAxisCol=this.sp.dataFrame.columns.byName(e),this.canvas=this.sp.getInfo().canvas,this.ctx=this.canvas.getContext("2d"),this.currentLineStyle=o,this.updateLines(r),this.visibility=null!==(i=r.visibility)&&void 0!==i?i:new Ze(this.lines.from.length),r.visibility||this.visibility.setAll(!0,!1),r.arrowSize&&(this.arrowWidth=r.arrowSize),this.canvas.onmousedown=t=>{-1!==this.mouseOverLineId&&this.lineClicked.next({x:t.clientX,y:t.clientY,id:this.mouseOverLineId,event:t})},this.canvas.onmousemove=t=>{this.mouseOverLineId=this.checkCoordsOnLine(t.offsetX,t.offsetY),-1!==this.mouseOverLineId&&this.lineHover.next({x:t.clientX,y:t.clientY,id:this.mouseOverLineId,event:t})},t.onEvent("d4-before-draw-scene").subscribe((t=>{this.renderLines()}))}updateLines(t){this.lines=t,this.multipleLinesCounts=new Uint8Array(this.lines.from.length),t.skipMultiLineCalculation?this.multipleLinesCounts.fill(0):this.createMultiLinesIndices()}renderLines(){var t,n,e,r,o,i,s,a,u,l,c,f,h;const m=this.sp.getOptions().look,d=this.lines.colors||this.lines.width||this.lines.opacities||this.lines.drawArrowsArr;d||(this.ctx.lineWidth=null!==(t=this.lines.width)&&void 0!==t?t:1,this.ctx.strokeStyle=`rgba(${null!==(n=this.lines.color)&&void 0!==n?n:"0,128,0"},${null!==(e=this.lines.opacity)&&void 0!==e?e:1})`);const p=m.sizeColumnName?this.sp.dataFrame.col(m.sizeColumnName):null,g=this.sp.dataFrame.filter;for(let t=0;t<this.lines.from.length;t++)if(g.get(this.lines.from[t])&&g.get(this.lines.to[t])&&this.visibility.getBit(t)){let n=0;const{sizeFrom:e,sizeTo:g}=this.getMarkersSizes(m,p,t),v=this.sp.worldToScreen(this.xAxisCol.get(this.lines.from[t]),this.yAxisCol.get(this.lines.from[t]));let y=null==v?void 0:v.x,w=null==v?void 0:v.y;const E=this.sp.worldToScreen(this.xAxisCol.get(this.lines.to[t]),this.yAxisCol.get(this.lines.to[t]));let A=null==E?void 0:E.x,_=null==E?void 0:E.y;const I=Math.min(this.sp.viewBox.width,this.sp.viewBox.height);if(this.ctx.beginPath(),y&&w&&A&&_&&Math.hypot(A-y,_-w)/I>.01){if(d){const n=(null===(r=this.lines.colors)||void 0===r?void 0:r[t])?null===(o=this.lines.colors)||void 0===o?void 0:o[t]:"0,128,0",e=(null===(i=this.lines.opacities)||void 0===i?void 0:i[t])?null===(s=this.lines.opacities)||void 0===s?void 0:s[t]:1;this.ctx.strokeStyle=`rgba(${n},${e})`,this.ctx.lineWidth=(null===(a=this.lines.widths)||void 0===a?void 0:a[t])?null===(u=this.lines.widths)||void 0===u?void 0:u[t]:1}t===this._currentLineIdx&&this.toggleCurrentLineStyle(!0);const m=this.multipleLinesCounts[t];let p=null;if(m){n=this.getLineLength(y,w,A,_);const r=this.getPointOnDistance(y,w,A,_,g,n),o=this.getPointOnDistance(A,_,y,w,e,n);y=r.x,w=r.y,A=o.x,_=o.y,p=this.lines.from[t]>this.lines.to[t]?this.findControlPoint(m,y,w,A,_,t):this.findControlPoint(m,A,_,y,w,t),this.ctx.moveTo(y,w),this.ctx.quadraticCurveTo(p.x,p.y,A,_)}else this.ctx.moveTo(y,w),this.ctx.lineTo(A,_);if((null!==(l=this.lines.drawArrows)&&void 0!==l?l:null===(c=this.lines.drawArrowsArr)||void 0===c?void 0:c.getBit(t))&&(n||(n=this.getLineLength(y,w,A,_)),n>this.arrowWidth)){const t=m?null:this.getPointOnDistance(y,w,A,_,g,n),e=m?p.x:y,r=m?p.y:w;this.canvasArrow(this.ctx,null!==(f=null==t?void 0:t.x)&&void 0!==f?f:y,null!==(h=null==t?void 0:t.y)&&void 0!==h?h:w,e,r)}this.ctx.stroke(),this.ctx.closePath(),t===this._currentLineIdx&&this.toggleCurrentLineStyle(!1)}}this.fillLeftBottomRect()}toggleCurrentLineStyle(t){switch(this.currentLineStyle){case Je.bold:t?this.ctx.lineWidth+=2:this.ctx.lineWidth-=2;break;case Je.dashed:t?this.ctx.setLineDash([5,5]):this.ctx.setLineDash([]);break;default:return}}getMarkersSizes(t,n,e){let r=3,o=3;return n?(r=(t.markerMinSize+(t.markerMaxSize-t.markerMinSize)*n.scale(this.lines.from[e]))/2,o=(t.markerMinSize+(t.markerMaxSize-t.markerMinSize)*n.scale(this.lines.to[e]))/2):t.markerDefaultSize&&(r=t.markerDefaultSize/2,o=t.markerDefaultSize/2),{sizeFrom:r,sizeTo:o}}fillLeftBottomRect(){const t=new Path2D;t.rect(this.sp.yAxisBox.minX,this.sp.yAxisBox.maxY,this.sp.yAxisBox.width,this.sp.xAxisBox.height),this.ctx.fillStyle="white",this.ctx.beginPath(),this.ctx.fill(t),this.ctx.closePath()}createMultiLinesIndices(){const t=new Ze(this.lines.from.length);t.setAll(!0);for(let n=-1;-1!==(n=t.findNext(n));){const e=n,r=this.lines.from[e],o=this.lines.to[e];let i=1;for(let e=n;-1!==(e=t.findNext(e));){const n=this.lines.from[e],s=this.lines.to[e];(n===r&&s===o||s===r&&n===o)&&(this.multipleLinesCounts[e]=++i,t.setBit(e,!1,!1))}i>1&&(this.multipleLinesCounts[e]=1),t.setBit(n,!1,!1)}}checkCoordsOnLine(t,n){let e=-1,r=null,o=null;const i=this.sp.getOptions().look,s=i.sizeColumnName?this.sp.dataFrame.col(i.sizeColumnName):null,a=this.sp.dataFrame.filter;for(let u=0;u<this.lines.from.length;u++)if(a.get(this.lines.from[u])&&a.get(this.lines.to[u])&&this.visibility.getBit(u)){const{sizeFrom:a,sizeTo:l}=this.getMarkersSizes(i,s,u),c=this.sp.worldToScreen(this.xAxisCol.get(this.lines.from[u]),this.yAxisCol.get(this.lines.from[u])),f=this.sp.worldToScreen(this.xAxisCol.get(this.lines.to[u]),this.yAxisCol.get(this.lines.to[u]));if(this.multipleLinesCounts[u]){const e=this.getLineLength(c.x,c.y,f.x,f.y),r=this.getPointOnDistance(c.x,c.y,f.x,f.y,l,e),i=this.getPointOnDistance(f.x,f.y,null==c?void 0:c.x,null==c?void 0:c.y,a,e),s=this.lines.from[u]>this.lines.to[u]?this.findControlPoint(this.multipleLinesCounts[u],r.x,r.y,i.x,i.y,u):this.findControlPoint(this.multipleLinesCounts[u],i.x,i.y,r.x,r.y,u);o=this.calculateDistToCurveLine(u,t,n,r,i,s)}else o=this.calculateDistToStraightLine(t,n,c,f);(!r&&null!==o&&o<5||r&&null!==o&&o<r)&&(r=o,e=u)}return e}calculateDistToStraightLine(t,n,e,r){const o=Math.min(e.x,r.x),i=Math.max(e.x,r.x),s=Math.min(e.y,r.y),a=Math.max(e.y,r.y);return t>=o-2&&t<=i+2&&n>=s-2&&n<=a+2?this.distToStraightLineSegment(t,n,e,r):null}distToStraightLineSegment(t,n,e,r){const o=(t,n,e,r)=>Math.pow(t-e,2)+Math.pow(n-r,2),i=o(e.x,e.y,r.x,r.y);if(0==i)return o(t,n,e.x,e.y);let s=((t-e.x)*(r.x-e.x)+(n-e.y)*(r.y-e.y))/i;return s=Math.max(0,Math.min(1,s)),o(t,n,e.x+s*(r.x-e.x),e.y+s*(r.y-e.y))}calculateDistToCurveLine(t,n,e,r,o,i){const s=Math.min(r.x,o.x,i.x),a=Math.max(r.x,o.x,i.x),u=Math.min(r.y,o.y,i.y),l=Math.max(r.y,o.y,i.y);if(n>=s-2&&n<=a+2&&e>=u-2&&e<=l+2){const t=a-s,c=l-u;return this.calculateDistToCurveInRect(n,e,r,i,o,t,c)}return null}calculateDistToCurveInRect(t,n,e,r,o,i,s){const a=Math.floor((i+s)/3),u=1/a,l=new Uint32Array(a),c=new Uint32Array(a),f=new Uint32Array(a);let h=null;const m=new Ze(a);for(let i=0;i<l.length;i++){const s=i*u,a=Math.pow(1-s,2)*e.x+2*s*(1-s)*r.x+Math.pow(s,2)*o.x,m=Math.pow(1-s,2)*e.y+2*s*(1-s)*r.y+Math.pow(s,2)*o.y,d=Math.abs(t-a),p=Math.abs(n-m),g=d+p;(!h||h>g)&&(h=g),f[i]=Math.max(d,p),l[i]=a,c[i]=m}for(let t=0;t<l.length;t++)f[t]<h&&m.setBit(t,!0,!1);let d=null;for(let e=-1;-1!==(e=m.findNext(e));){const r=Math.hypot(l[e]-t,c[e]-n);(!d||d>r)&&(d=r)}return d}getLineLength(t,n,e,r){return Math.sqrt(Math.pow(e-t,2)+Math.pow(r-n,2))}getPointOnDistance(t,n,e,r,i,s){const a=e-i*((e-t)/s),u=r-i*((r-n)/s);return new o.Point(a,u)}findControlPoint(t,n,e,r,i,s){const a=n+(r-n)/2,u=e+(i-e)/2;let l=a-n,c=u-e;const f=Math.sqrt(l*l+c*c);l/=f,c/=f;const h=50*Math.ceil(t/2);return t%2==0?new o.Point(a+h/2*c,u-h/2*l):new o.Point(a-h/2*c,u+h/2*l)}canvasArrow(t,n,e,r,o){const i=Math.atan2(r-n,o-e)+Math.PI;t.moveTo(n-this.arrowWidth*Math.sin(i-Math.PI/10),e-this.arrowWidth*Math.cos(i-Math.PI/10)),t.lineTo(n,e),t.lineTo(n-this.arrowWidth*Math.sin(i+Math.PI/10),e-this.arrowWidth*Math.cos(i+Math.PI/10))}}var nr=function(t,n,e,r){return new(e||(e=Promise))((function(o,i){function s(t){try{u(r.next(t))}catch(t){i(t)}}function a(t){try{u(r.throw(t))}catch(t){i(t)}}function u(t){var n;t.done?o(t.value):(n=t.value,n instanceof e?n:new e((function(t){t(n)}))).then(s,a)}u((r=r.apply(t,n||[])).next())}))};const er=new o.Package;function rr(){t.shell.info(er.webRoot)}function or(){return nr(this,void 0,void 0,(function*(){yield async function(){await initEDA()}()}))}function ir(t,n,e,r,i){return nr(this,void 0,void 0,(function*(){const s=n.getRawData(),a=e.getRawData(),u=yield Kn(s,a,r,i),l=t.columns.getUnusedName("Cluster (DBSCAN)"),c=o.Column.fromInt32Array(l,u);return t.columns.add(c),c}))}function sr(n,r,o,i,s){return nr(this,void 0,void 0,(function*(){const a=yield function(t,n,r,o,i){return Y(this,void 0,void 0,(function*(){W(n,r);const t=o?1:0,s=i?1:0;return yield async function(t,n,r,o,i){return new Promise(((t,s)=>{const a=new Worker(new URL(e.p+e.u(261),e.b));a.postMessage(N(EDA.principalComponentAnalysis.arguments,[n,r,o,i])),a.onmessage=function(n){a.terminate(),t(b(EDA.principalComponentAnalysis,n.data))}}))}(0,n,r,t,s)}))}(0,r,o,i,s);if(function(t,n){for(const t of n.toList())t.name="PC"+t.name}(0,a.columns),null===n.id)t.shell.addTableView(a);else{const t=n.columns;for(const n of a.columns)n.name=t.getUnusedName(n.name),t.add(n)}}))}function ar(n,e,r,i){return nr(this,void 0,void 0,(function*(){const s=n.dataFrame;if(null===s)return;const a=yield ir(s,n,e,r,i);s.changeColumnType(a,"string");const u=[n.name,e.name],l=t.shell.tableView(s.name);if(l)for(const t of l.viewers)if(t instanceof o.ScatterPlotViewer&&u.includes(t.props.xColumnName)&&u.includes(t.props.yColumnName))return void(t.props.colorColumnName=a.name)}))}function ur(t,n){const e=t.stats.max-t.stats.min;return{entries:t.toList(),options:{range:e}}}function lr(t,n){return{entries:t.toList(),options:{}}}function cr(){return nr(this,void 0,void 0,(function*(){const r=new Pe,i=n.dialog("Dimensionality reduction").add(r.getEditor()).onOK((()=>nr(this,void 0,void 0,(function*(){const i=r.getParams();0!==i.columns.length&&(yield async function(r,i,s,a,u,l,c,f=!0,h=!1,m={preprocessingFuncArgs:[]},d={},p=null,g={}){const v={showXAxis:!1,showYAxis:!1,showXSelector:!1,showYSelector:!1};if(i.length!==a.length||i.length!==l.length||i.length!==u.length||i.length!==m.preprocessingFuncArgs.length)throw new Error("columns, metrics and preprocessing functions, weights and function argumentsmust have the same length");const y=f?t.shell.tableView(r.name)??t.shell.addTableView(r):null,w=async()=>{const w=o.TaskBarProgressIndicator.create(`Initializing ${d.scatterPlotName??"dimensionality reduction"} ...`);let E;try{const A=function(t){const n=["Embed_X","Embed_Y"],e=t.columns.names().filter((t=>t.includes(n[0]))).length+1;return n.map((t=>`${t}_${e}`))}(r);function _(t,e,a){let u=null,l=null;r.columns.names().includes(A[0])?(u=r.columns.byName(A[0]),l=r.columns.byName(A[1])):(u=r.columns.add(o.Column.float(A[0],r.rowCount)),l=r.columns.add(o.Column.float(A[1],r.rowCount)),f&&!E&&(E=y.scatterPlot({...v,x:A[0],y:A[1],title:d.scatterPlotName??De(i,s)}))),d[ce]&&(E?.root&&n.setUpdateIndicator(E.root,!1),u.init((t=>a[0]?a[0][t]:void 0)),l.init((t=>a[1]?a[1][t]:void 0)));const c=t/e*100;w.update(c,`Running ${d.scatterPlotName??"dimensionality reduction"}... ${c.toFixed(0)}%`)}async function I(){r.columns.add(o.Column.float(A[0],r.rowCount)),r.columns.add(o.Column.float(A[1],r.rowCount));let h=null;f&&(E=y.scatterPlot({...v,x:A[0],y:A[1],title:d.scatterPlotName??De(i,s)}),n.setUpdateIndicator(E.root,!0));const p=t.events.onViewerClosed.subscribe((n=>{const e=n.args.viewer;e?.getOptions()?.look?.title&&E?.getOptions()?.look?.title&&e?.getOptions()?.look?.title===E?.getOptions()?.look?.title&&(t.events.fireCustomEvent(Re,{}),p.unsubscribe(),h?.(),w.close())})),g=new Promise((async(n,r)=>{try{h=n;const r=[];for(let t=0;t<l.length;++t){const n=l[t];if(m.distanceFnArgs||(m.distanceFnArgs=[]),n){const e=n.inputs[0].name,o=n.inputs[1].name,{entries:s,options:u}=await n.apply({[e]:i[t],[o]:a[t],...m.preprocessingFuncArgs[t]??{}});r.push({entries:s,options:u}),m.distanceFnArgs.push(u)}else{const n=i[t].toList(),e={};r.push({entries:n,options:e}),m.distanceFnArgs.push(e)}}n(await async function(n,r,o,i,s,a,u){let l=await async function(n,r,o,i,s,a,u){if(!a.distanceFnArgs)throw new Error("options.distanceFnArgs must be defined");if(n.length!==r.length||n.length!==a.distanceFnArgs.length||n.length!==i.length)throw new Error("data, metrics and options and weights must have the same length");return new Promise((function(l,c){const f=new Worker(new URL(e.p+e.u(42),e.b));f.postMessage({columnsData:n,distanceMetrics:r,method:o,options:a,weights:i,aggregationMethod:s});const h=t.events.onCustomEvent(Re).subscribe((()=>{try{f?.terminate()}finally{h.unsubscribe()}}));f.onmessage=({data:{error:t,embedding:n,epochNum:e,epochsLength:r}})=>{Fe(e)||Fe(r)?(h.unsubscribe(),t?c(t):l(n),setTimeout((()=>f.terminate()),100)):u&&u(e,r,n)}}))}(n,o,r,i,s,a,u);return l=l.map((t=>function(t){const n=t.length;let e=0,r=0;for(let o=0;o<n;++o)e+=t[o],r+=Math.pow(t[o],2);const o=e/n,i=1/Math.sqrt(r/n-Math.pow(o,2));for(let e=0;e<n;++e)t[e]=(t[e]-o)*i;return t}(t))),l}(r.map((t=>t.entries)),s,a,u,c,m,d[le]?void 0:_))}catch(t){r(t)}})),I=await g;return w.close(),p.unsubscribe(),I}const C=await I();if(h&&C){const N=o.TaskBarProgressIndicator.create("Clustering embeddings ...");try{const b=await Kn(C[0],C[1],m.dbScanEpsilon??.01,m.dbScanMinPts??4),S=r.columns.getUnusedName("Cluster (DBSCAN)");r.columns.addNewString(S).init((t=>b[t].toString())),E&&(E.props.colorColumnName=S)}catch(M){t.shell.error("Clustering embeddings failed"),console.error(M)}finally{N.close()}}if(C){const T=r.columns.byName(A[0]),P=r.columns.byName(A[1]);if(T.init((t=>C[0][t])),P.init((t=>C[1][t])),p)try{const O=p.inputs[0].name,x=p.inputs[1].name;await p.prepare({[O]:T,[x]:P,...g}).call(!0)}catch(L){t.shell.error("Post-processing failed"),console.error(L)}if(E)return n.setUpdateIndicator(E.root,!1),E.helpUrl="/help/compute/sequence-space",E}}catch(R){t.shell.error("Dimensionality reduction failed"),console.error(R),w.close(),E&&n.setUpdateIndicator(E.root,!1)}};return new Promise((async(t,e)=>{try{if(d.fastRowCount&&r.rowCount>d.fastRowCount&&!d[le])n.dialog().add(n.divText("Analysis might take several minutes. Do you want to continue?")).onOK((async()=>{try{const n=await w();t(n)}catch(t){e(t)}})).onCancel((()=>t(void 0))).show();else{const n=await w();t(n)}}catch(t){e(t)}}))}(i.table,i.columns,i.methodName,i.distanceMetrics,i.weights,i.preprocessingFunctions,i.aggreaggregationMethod,!!i.plotEmbeddings,!!i.clusterEmbeddings,i.options,{fastRowCount:1e4},i.postProcessingFunction,i.postProcessingFunctionArgs))})))).show();i.helpUrl="https://datagrok.ai/help/explore/dim-reduction.md";const s=()=>{const t=r.columnsInput.value,n=i.getButton("OK");n&&(t&&0!==t.length?n.classList.remove("disabled"):n.classList.add("disabled"))};r.onColumnsChanged.subscribe((()=>{try{s()}catch(t){console.error(t)}})),s()}))}function fr(e){try{const t=new Qe;n.dialog("Markov clustering").add(t.getEditor()).onOK((()=>nr(this,void 0,void 0,(function*(){const n=t.params;return e.func.prepare({df:n.table,cols:n.columns,metrics:n.distanceMetrics,weights:n.weights,aggregationMethod:n.aggreaggregationMethod,preprocessingFuncs:n.preprocessingFunctions,preprocessingFuncArgs:n.preprocessingFuncArgs,threshold:n.threshold,maxIterations:n.maxIterations,useWebGPU:n.useWebGPU}).call(!0)})))).show()}catch(n){const e=n instanceof Error?n.message:n.toString(),r=n instanceof Error?n.stack:void 0;t.shell.error(`Get region editor error: ${e}`),er.logger.error(e,void 0,r)}}function hr(r,o,i,s,a,u,l,c=80,f=10,h=!1){return nr(this,void 0,void 0,(function*(){const m=yield async function(r,o,i,s,a,u,l,c=80,f=10,h=!1){const m=(t.shell.tableView(r.name)??t.shell.addTableView(r)).scatterPlot({showXAxis:!1,showYAxis:!1,showXSelector:!1,showYSelector:!1,title:"MCL"});n.setUpdateIndicator(m.root,!0);const d=[],p=[];for(let t=0;t<u.length;++t){const n=u[t];if(n){const e=n.inputs[0].name,r=n.inputs[1].name,{entries:s,options:a}=await n.apply({[e]:o[t],[r]:i[t],...l[t]??{}});p.push({entries:s,options:a}),d.push(a??{})}else{const n=o[t].toList(),e={};p.push({entries:n,options:e}),d.push(e)}}const g=function(t,n,r,o,i,s,a=10,u=!1){const l=new Worker(new URL(e.p+e.u(231),e.b));let c;return l.postMessage({data:t,threshold:n,weights:r,aggregationMethod:o,distanceFns:i,distanceFnArgs:s,maxIterations:a,useWebGPU:u}),{promise:new Promise(((t,n)=>{c=t,l.onmessage=n=>{setTimeout((()=>l.terminate()),100),t(n.data.res)},l.onerror=t=>{setTimeout((()=>l.terminate()),100),n(t)}})),terminate:()=>{try{c(null),l.terminate()}catch(t){console.error(t)}}}}(p.map((t=>t.entries)),c,s,a,i,d,f,h),v=t.events.onViewerClosed.subscribe((t=>{t.args.viewer?.props?.title===m.props.title&&m.type===t.args?.viewer?.type&&(v.unsubscribe(),g.terminate())})),y=await g.promise;if(!y)return;const w=r.columns.getUnusedName("Cluster (MCL)"),E=r.columns.getUnusedName("EmbedX (MCL)"),A=r.columns.getUnusedName("EmbedY (MCL)"),_={};y.clusters.forEach((t=>{_[t]||(_[t]=0),_[t]++}));const I=new Uint32Array(y.embedX.length);for(let t=0;t<y.is.length;t++)I[y.is[t]]++,I[y.js[t]]++;const C=r.columns.getUnusedName("Cluster size (MCL)"),N=r.columns.getUnusedName("Connectivity (MCL)"),b=r.columns.addNewFloat(E);b.init((t=>y.embedX[t]));const S=r.columns.addNewFloat(A);S.init((t=>y.embedY[t]));const M=r.columns.addNewString(w);M.init((t=>y.clusters[t].toString()));const T=r.columns.addNewInt(C);T.init((t=>_[y.clusters[t]]));const P=r.columns.addNewInt(N);return P.init((t=>I[t])),m.props.xColumnName=E,m.props.yColumnName=A,m.props.colorColumnName=w,m.props.markerDefaultSize=5,v.unsubscribe(),new tr(m,E,A,{from:y.is,to:y.js,drawArrows:!1,opacity:.3,skipMultiLineCalculation:!0},Je.none),n.setUpdateIndicator(m.root,!1),{sc:m,embedXCol:b,embedYCol:S,clusterCol:M,clusterCounterCol:T,connectivityCol:P}}(r,o,i,s,a,u,l,c,f,h);return null==m?void 0:m.sc}))}function mr(t,n,e,r,o){return nr(this,void 0,void 0,(function*(){return yield Vn({table:t,features:n,predict:e,components:r,names:o})}))}function dr(){return nr(this,void 0,void 0,(function*(){yield Gn(wn.COMPUTE_COMPONENTS)}))}function pr(){return nr(this,void 0,void 0,(function*(){yield Gn(wn.PERFORM_MVA)}))}function gr(){return nr(this,void 0,void 0,(function*(){!function(){Dn(this,void 0,void 0,(function*(){t.shell.addTableView(o.DataFrame.fromColumns([o.Column.fromStrings("model",["alfaromeo","audi","bmw","chevrolet","dodge1","dodge2","honda1","honda2","isuzu","jaguar","mazda","mercedes","mercury","mitsubishi","nissan1","nissan2","peugot","plymouth","porsche","saab","subaru","toyota1","toyota2","toyota3","toyota4","volkswagen1","volkswagen2","volvo1","volvo2","volvo3"]),o.Column.fromInt32Array("diesel",new Int32Array([0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,1,0,0,0,0,1,0,1,1,0,0,0,1])),o.Column.fromInt32Array("turbo",new Int32Array([0,0,0,0,1,0,0,0,0,0,0,1,1,0,0,0,0,1,0,0,0,0,0,0,1,0,0,0,1,1])),o.Column.fromInt32Array("two.doors",new Int32Array([1,0,1,0,1,0,1,0,0,0,0,0,1,1,0,1,0,0,1,0,0,1,0,1,0,1,0,0,0,0])),o.Column.fromInt32Array("hatchback",new Int32Array([1,0,0,0,1,1,1,0,0,0,0,0,1,1,0,0,1,0,0,0,0,1,0,1,0,0,0,0,0,0])),o.Column.fromFloat32Array("wheel.base",new Float32Array([94.5,105.80000305175781,101.19999694824219,94.5,93.69999694824219,93.69999694824219,93.69999694824219,96.5,94.30000305175781,113,93.0999984741211,115.5999984741211,102.69999694824219,93.69999694824219,94.5,94.5,93.69999694824219,114.19999694824219,89.5,99.0999984741211,97.19999694824219,95.69999694824219,95.69999694824219,98.4000015258789,102.4000015258789,97.30000305175781,100.4000015258789,104.30000305175781,109.0999984741211,109.0999984741211])),o.Column.fromFloat32Array("length",new Float32Array([171.1999969482422,192.6999969482422,176.8000030517578,158.8000030517578,157.3000030517578,157.3000030517578,150,175.39999389648438,170.6999969482422,199.60000610351562,166.8000030517578,202.60000610351562,178.39999389648438,157.3000030517578,170.1999969482422,165.3000030517578,157.3000030517578,198.89999389648438,168.89999389648438,186.60000610351562,172,158.6999969482422,166.3000030517578,176.1999969482422,175.60000610351562,171.6999969482422,180.1999969482422,188.8000030517578,188.8000030517578,188.8000030517578])),o.Column.fromFloat32Array("width",new Float32Array([65.5,71.4000015258789,64.80000305175781,63.599998474121094,63.79999923706055,63.79999923706055,64,65.19999694824219,61.79999923706055,69.5999984741211,64.19999694824219,71.69999694824219,68,64.4000015258789,63.79999923706055,63.79999923706055,63.79999923706055,68.4000015258789,65,66.5,65.4000015258789,63.599998474121094,64.4000015258789,65.5999984741211,66.5,65.5,66.9000015258789,67.19999694824219,68.80000305175781,68.9000015258789])),o.Column.fromFloat32Array("height",new Float32Array([52.400001525878906,55.70000076293945,54.29999923706055,52,50.79999923706055,50.599998474121094,52.599998474121094,54.099998474121094,53.5,52.79999923706055,54.099998474121094,56.29999923706055,54.79999923706055,50.79999923706055,53.5,54.5,50.599998474121094,58.70000076293945,51.599998474121094,56.099998474121094,52.5,54.5,53,52,54.900001525878906,55.70000076293945,55.099998474121094,56.20000076293945,55.5,55.5])),o.Column.fromInt32Array("curb.weight",new Int32Array([2823,2844,2395,1909,2128,1967,1956,2304,2337,4066,1950,3770,2910,1918,2024,1951,1967,3430,2800,2695,2190,1985,2275,2551,2480,2261,2661,2912,3049,3217])),o.Column.fromInt32Array("eng.size",new Int32Array([152,136,108,90,98,90,92,110,111,258,91,183,140,92,97,97,90,152,194,121,108,92,110,146,110,97,136,141,141,145])),o.Column.fromInt32Array("horsepower",new Int32Array([154,110,101,70,102,68,76,86,78,176,68,123,175,68,69,69,68,95,207,110,82,62,56,116,73,52,110,114,160,106])),o.Column.fromInt32Array("peak.rpm",new Int32Array([5e3,5500,5800,5400,5500,5500,6e3,5800,4800,4750,5e3,4350,5e3,5500,5200,5200,5500,4150,5900,5250,4400,4800,4500,4800,4500,4800,5500,5400,5300,4800])),o.Column.fromInt32Array("symbol",new Int32Array([1,1,2,0,1,1,1,0,0,0,1,-1,1,2,1,1,1,0,3,2,0,1,0,2,-1,2,0,-2,-1,-1])),o.Column.fromInt32Array("city.mpg",new Int32Array([19,19,23,38,24,31,30,27,24,15,31,22,19,37,31,31,31,25,17,21,28,35,34,24,30,37,19,23,19,26])),o.Column.fromInt32Array("highway.mpg",new Int32Array([26,25,29,43,30,38,34,33,29,19,38,25,24,41,37,37,38,25,25,28,33,39,36,30,33,46,24,28,25,27])),o.Column.fromInt32Array("price",new Int32Array([16500,17710,16430,6575,7957,6229,7129,8845,6785,35550,7395,31600,16503,5389,7349,7299,6229,13860,37028,12170,7775,5348,7898,9989,10698,7775,13295,12940,19045,22470]))])),t.shell.windows.help.visible=!0,t.shell.windows.help.showHelp(n.markdown(Rn)),t.shell.windows.showContextPanel=!1,t.shell.windows.showProperties=!1,yield Gn(wn.DEMO)}))}()}))}function vr(t,n,e,r,o,i){return nr(this,void 0,void 0,(function*(){return yield X(Z,[0,0],t,n,e,r,o,i)}))}function yr(t,n,e,r,o,i,s){return nr(this,void 0,void 0,(function*(){return yield X(tt,[n,0],t,e,r,o,i,s)}))}function wr(t,n,e,r){return nr(this,void 0,void 0,(function*(){const o=yield pn({gamma:e,kernel:Z},t,n);return r&&gn(t,o),vn(o)}))}function Er(t,n){return nr(this,void 0,void 0,(function*(){return yield yn(t,n)}))}function Ar(t,n,e,r,o){return nr(this,void 0,void 0,(function*(){const i=yield pn({gamma:e,kernel:tt,sigma:r},t,n);return o&&gn(t,i),vn(i)}))}function _r(t,n){return nr(this,void 0,void 0,(function*(){return yield yn(t,n)}))}function Ir(t,n,e,r,o,i){return nr(this,void 0,void 0,(function*(){const s=yield pn({gamma:e,kernel:J,cParam:r,dParam:o},t,n);return i&&gn(t,s),vn(s)}))}function Cr(t,n){return nr(this,void 0,void 0,(function*(){return yield yn(t,n)}))}function Nr(t,n,e,r,o,i){return nr(this,void 0,void 0,(function*(){const s=yield pn({gamma:e,kernel:nt,kappa:r,theta:o},t,n);return i&&gn(t,s),vn(s)}))}function br(t,n){return nr(this,void 0,void 0,(function*(){return yield yn(t,n)}))}function Sr(n,e,r,i,s){!function(n,e,r,i){const s=t.shell.getTableView(n.name);s.addViewer(o.Viewer.boxPlot(o.DataFrame.fromColumns([e,r]))),s.addViewer(o.Viewer.grid(i))}(n,e,r,function(t,n,e=.05,r=!1){Yn(e);const i=new zn(t,n,r,e);if(r){if(!i.areVarsEqual(e))throw new Error(qn.NON_EQUAL_VARIANCES);if(!i.isNormal())throw new Error(qn.NON_NORMAL_DISTRIB)}const s=i.getOneWayAnova(),a=Wn.centralF.inv(1-e,s.dfBn,s.dfWn);return function(t,n,e,r,i){return o.DataFrame.fromColumns([o.Column.fromStrings("Source of variance",["Between groups","Within groups","Total","",r,"",i]),o.Column.fromList(o.COLUMN_TYPE.FLOAT,"Sum of squares",[t.ssBn,t.ssWn,t.ssTot,null,null,null,null]),o.Column.fromList(o.COLUMN_TYPE.INT,"Degrees of freedom",[t.dfBn,t.dfWn,t.dfTot,null,null,null,null]),o.Column.fromList(o.COLUMN_TYPE.FLOAT,"Mean square",[t.msBn,t.msWn,null,null,null,null,null]),o.Column.fromList(o.COLUMN_TYPE.FLOAT,"F-statistics",[t.fStat,null,null,null,null,null,null]),o.Column.fromList(o.COLUMN_TYPE.FLOAT,"p-value",[t.pValue,null,null,null,null,null,null]),o.Column.fromList(o.COLUMN_TYPE.FLOAT,`${n}-critical value`,[e,null,null,null,null,null,null])])}(s,e,a,`THE NULL HYPOTHESIS: the "${t.name}" \n factor does not produce a significant difference in the "${n.name}" feature.`,"Test result: "+(s.fStat>a?"REJECTED.":"FAILED TO REJECT."))}(e,r,i,s))}function Mr(){Xe()}})(),eda=r})();
2
- //# sourceMappingURL=data:application/json;charset=utf-8;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFja2FnZS5qcyIsIm1hcHBpbmdzIjoiNERBQ08sSUFDREEsRUFES0MsR0FDTEQsRUFBaUMsb0JBQWJFLFVBQTRCQSxTQUFTQyxjQUFnQkQsU0FBU0MsY0FBY0MsU0FBTUMsRUFFbkcsU0FDQUosRUFBcUIsQ0FBQyxHQWdCL0IsSUFHSUssRUFBcUJDLEVBSHJCQyxPQUFzQyxJQUF0QlAsRUFBb0NBLEVBQXFCLENBQUMsRUFJOUVPLEVBQWMsTUFBSSxJQUFJQyxTQUFRLFNBQVNDLEVBQVNDLEdBQzlDTCxFQUFzQkksRUFDdEJILEVBQXFCSSxDQUN2QixJQVdBLElBK0JJQyxFQS9CQUMsRUFBa0JDLE9BQU9DLE9BQU8sQ0FBQyxFQUFHUCxHQVlwQ1EsRUFBc0MsaUJBQVZDLE9BQzVCQyxFQUFnRCxtQkFBakJDLGNBTy9CQyxHQUp3QyxpQkFBWEMsU0FBa0QsaUJBQXBCQSxRQUFRQyxVQUErQkQsUUFBUUMsU0FBU0MsS0FJakcsS0FpQmxCUCxHQUFzQkUsS0FDcEJBLEVBQ0ZFLEVBQWtCSSxLQUFLQyxTQUFTQyxLQUNKLG9CQUFaeEIsVUFBMkJBLFNBQVNDLGdCQUNwRGlCLEVBQWtCbEIsU0FBU0MsY0FBY0MsS0FJdkNKLElBQ0ZvQixFQUFrQnBCLEdBU2xCb0IsRUFEdUMsSUFBckNBLEVBQWdCTyxRQUFRLFNBQ1JQLEVBQWdCUSxPQUFPLEVBQUdSLEVBQWdCUyxRQUFRLFNBQVUsSUFBSUMsWUFBWSxLQUFLLEdBRWpGLEdBY2hCWixJQUNGTixFQUFjbUIsSUFDVixJQUFJQyxFQUFNLElBQUlDLGVBSWQsT0FIQUQsRUFBSUUsS0FBSyxNQUFPSCxHQUFLLEdBQ3JCQyxFQUFJRyxhQUFlLGNBQ25CSCxFQUFJSSxLQUFLLE1BQ0YsSUFBSUMsV0FBc0NMLEVBQVksU0FBRSxJQTJCN0R4QixFQUFjLE9BQUs4QixRQUFRQyxJQUFJQyxLQUFLRixTQUE5QyxJQW1DSUcsRUFVQUMsRUE1Q0FDLEVBQU1uQyxFQUFpQixVQUFLOEIsUUFBUU0sS0FBS0osS0FBS0YsU0FHbER4QixPQUFPQyxPQUFPUCxFQUFRSyxHQUd0QkEsRUFBa0IsS0FPZEwsRUFBa0IsV0FBZ0JBLEVBQWtCLFVBRXBEQSxFQUFvQixhQUFpQkEsRUFBb0IsWUFFekRBLEVBQWEsTUFBV0EsRUFBYSxLQWtCckNBLEVBQW1CLGFBQUdpQyxFQUFhakMsRUFBbUIsWUFDdENBLEVBQXNCLGNBRWhCLGlCQUFmcUMsYUFDVEMsRUFBTSxtQ0FhUixJQXFCRUMsRUFFQUMsRUFRQUMsRUEvQkVDLEdBQVEsRUFxQ1osU0FBU0MsSUFDUCxJQUFJQyxFQUFJVixFQUFXVyxPQUNuQjdDLEVBQWMsTUFBSXVDLEVBQVEsSUFBSU8sVUFBVUYsR0FDeEM1QyxFQUFlLE9BQWEsSUFBSStDLFdBQVdILEdBQzNDNUMsRUFBZSxPQUFhLElBQUlnRCxXQUFXSixHQUMzQzVDLEVBQWUsT0FBSXdDLEVBQVMsSUFBSVgsV0FBV2UsR0FDM0M1QyxFQUFnQixRQUFjLElBQUlpRCxZQUFZTCxHQUM5QzVDLEVBQWdCLFFBQUl5QyxFQUFVLElBQUlTLFlBQVlOLEdBQzlDNUMsRUFBZ0IsUUFBYyxJQUFJbUQsYUFBYVAsR0FDL0M1QyxFQUFnQixRQUFjLElBQUlvRCxhQUFhUixFQUNqRCxDQWFBLElBQUlTLEVBQWdCLEdBQ2hCQyxFQUFnQixHQUVoQkMsRUFBZ0IsR0F1RWhCQyxFQUFrQixFQUNsQkMsRUFBdUIsS0FDdkJDLEVBQXdCLEtBb0M1QixTQUFTcEIsRUFBTXFCLEdBQ1QzRCxFQUFnQixTQUNsQkEsRUFBZ0IsUUFBRTJELEdBTXBCeEIsRUFIQXdCLEVBQU8sV0FBYUEsRUFBTyxLQUszQmpCLEdBQVEsRUFHUmlCLEdBQVEsMkNBZ0JSLElBQUlDLEVBQUksSUFBSXZCLFlBQVl3QixhQUFhRixHQU1yQyxNQUpBNUQsRUFBbUI2RCxHQUliQSxDQUNSLENBTUEsSUFnQklFLEVBOVdnQkMsRUFpV3BCLFNBQVNDLEVBQVVDLEdBRWpCLE9BQU9BLEVBQVNDLFdBTEUsd0NBTXBCLENBZ0JBLFNBQVNDLEVBQVVDLEdBQ2pCLElBQ0UsR0FBSUEsR0FBUU4sR0FBa0I3QixFQUM1QixPQUFPLElBQUlKLFdBQVdJLEdBRXhCLEdBQUk3QixFQUNGLE9BQU9BLEVBQVdnRSxHQUVwQixLQUFNLGlEQUNSLENBQ0EsTUFBT2pDLEdBQ0xHLEVBQU1ILEVBQ1IsQ0FDRixDQTBCQSxTQUFTa0MsRUFBdUJDLEVBQVlDLEVBQVNDLEdBQ25ELE9BekJGLFNBQTBCRixHQU14QixPQUFLckMsSUFBZXpCLElBQXNCRSxHQUNwQixtQkFBVCtELE1BY054RSxRQUFRQyxVQUFVd0UsTUFBSyxXQUFhLE9BQU9QLEVBQVVHLEVBQWEsSUFaOURHLE1BQU1ILEVBQVksQ0FBRUssWUFBYSxnQkFBaUJELE1BQUssU0FBU0UsR0FDckUsSUFBS0EsRUFBYSxHQUNoQixLQUFNLHVDQUF5Q04sRUFBYSxJQUU5RCxPQUFPTSxFQUFzQixhQUMvQixJQUFHQyxPQUFNLFdBQ0wsT0FBT1YsRUFBVUcsRUFDckIsR0FNTixDQUdTUSxDQUFpQlIsR0FBWUksTUFBSyxTQUFTSyxHQUNoRCxPQUFPMUMsWUFBWTJDLFlBQVlELEVBQVFSLEVBQ3pDLElBQUdHLE1BQUssU0FBVU8sR0FDaEIsT0FBT0EsQ0FDVCxJQUFHUCxLQUFLRixHQUFVLFNBQVNVLEdBQ3pCL0MsRUFBSSwwQ0FBNEMrQyxHQUVoRDVDLEVBQU00QyxFQUNSLEdBQ0YsQ0E4R0UsU0FBU0MsRUFBcUJDLEdBQzFCLEtBQU9BLEVBQVVDLE9BQVMsR0FFeEJELEVBQVVFLE9BQVZGLENBQWtCcEYsRUFFdEIsQ0E0Q0YsU0FBU3VGLEVBQWNDLEdBQ25CQyxLQUFLRCxPQUFTQSxFQUNkQyxLQUFLQyxJQUFNRixFQUFTLEdBRXBCQyxLQUFLRSxTQUFXLFNBQVNDLEdBQ3ZCbkQsRUFBV2dELEtBQVEsSUFBRSxHQUFNLEdBQU1HLENBQ25DLEVBRUFILEtBQUtJLFNBQVcsV0FDZCxPQUFPcEQsRUFBV2dELEtBQVEsSUFBRSxHQUFNLEVBQ3BDLEVBRUFBLEtBQUtLLGVBQWlCLFNBQVNDLEdBQzdCdEQsRUFBV2dELEtBQVEsSUFBRSxHQUFNLEdBQU1NLENBQ25DLEVBRUFOLEtBQUtPLGVBQWlCLFdBQ3BCLE9BQU92RCxFQUFXZ0QsS0FBUSxJQUFFLEdBQU0sRUFDcEMsRUFFQUEsS0FBS1EsV0FBYSxTQUFVQyxHQUMxQkEsRUFBU0EsRUFBUyxFQUFJLEVBQ3RCM0QsRUFBU2tELEtBQVEsSUFBRSxJQUFPLEdBQU1TLENBQ2xDLEVBRUFULEtBQUtVLFdBQWEsV0FDaEIsT0FBd0MsR0FBakM1RCxFQUFTa0QsS0FBUSxJQUFFLElBQU8sRUFDbkMsRUFFQUEsS0FBS1csYUFBZSxTQUFVQyxHQUM1QkEsRUFBV0EsRUFBVyxFQUFJLEVBQzFCOUQsRUFBU2tELEtBQVEsSUFBRSxJQUFPLEdBQU1ZLENBQ2xDLEVBRUFaLEtBQUthLGFBQWUsV0FDbEIsT0FBd0MsR0FBakMvRCxFQUFTa0QsS0FBUSxJQUFFLElBQU8sRUFDbkMsRUFHQUEsS0FBS2MsS0FBTyxTQUFTWCxFQUFNRyxHQUN6Qk4sS0FBS2UsaUJBQWlCLEdBQ3RCZixLQUFLRSxTQUFTQyxHQUNkSCxLQUFLSyxlQUFlQyxFQUN0QixFQUVBTixLQUFLZSxpQkFBbUIsU0FBU0MsR0FDL0JoRSxFQUFXZ0QsS0FBUSxJQUFFLElBQU8sR0FBTWdCLENBQ3BDLEVBRUFoQixLQUFLaUIsaUJBQW1CLFdBQ3RCLE9BQU9qRSxFQUFXZ0QsS0FBUSxJQUFFLElBQU8sRUFDckMsRUFNQUEsS0FBS2tCLGtCQUFvQixXQUl2QixHQURnQkMsRUFBdUJuQixLQUFLSSxZQUUxQyxPQUFPcEQsRUFBVWdELEtBQVcsUUFBRyxHQUVqQyxJQUFJb0IsRUFBV3BCLEtBQUtpQixtQkFDcEIsT0FBaUIsSUFBYkcsRUFBdUJBLEVBQ3BCcEIsS0FBS0QsTUFDZCxDQUNGLENBOEJGLFNBQVNzQixFQUEwQkMsR0FDL0IsSUFBSW5FLEVBQUlWLEVBQVdXLE9BQ25CLElBSUUsT0FGQVgsRUFBVzhFLEtBQU1ELEVBQU9uRSxFQUFFcUUsV0FBYSxRQUFXLElBQ2xEdEUsSUFDTyxDQUNULENBQUUsTUFBTWlCLEdBQ1IsQ0FHRixDQW9ERixTQUFTc0QsRUFBU0MsR0FFZCxPQURXbkgsRUFBTyxJQUFNbUgsRUFFMUIsQ0F4WEduRCxFQURMRixFQUFpQixxQkEvV0NDLEVBaVhZRCxFQUE1QkEsRUFoWEU5RCxFQUFtQixXQUNkQSxFQUFtQixXQUFFK0QsRUFBTW5ELEdBRTdCQSxFQUFrQm1ELEdBdXpCekIsSUFBSXFELEVBQW9DLG9CQUFmQyxZQUE2QixJQUFJQSxZQUFZLGFBQVV4SCxFQStFaEYsU0FBU3lILEVBQU1ILEVBQU9JLEVBQVlDLEVBQVVDLEVBQU1DLEdBRTlDLElBQUlDLEVBQU0sQ0FDUixPQUFXQyxJQUNULElBQUlDLEVBQU0sRUFLVixPQUpJRCxTQUE2QyxJQUFSQSxJQUV2Q0MsRUE3RlYsU0FBNkJELEdBQ3pCLElBQUliLEVBdEVSLFNBQXlCYSxHQUVyQixJQURBLElBQUlFLEVBQU0sRUFDREMsRUFBSSxFQUFHQSxFQUFJSCxFQUFJdkMsU0FBVTBDLEVBQUcsQ0FLbkMsSUFBSUMsRUFBSUosRUFBSUssV0FBV0YsR0FDbkJDLEdBQUssSUFDUEYsSUFDU0UsR0FBSyxLQUNkRixHQUFPLEVBQ0VFLEdBQUssT0FBVUEsR0FBSyxPQUM3QkYsR0FBTyxJQUFLQyxHQUVaRCxHQUFPLENBRVgsQ0FDQSxPQUFPQSxDQUNULENBbURhSSxDQUFnQk4sR0FBTyxFQUM5QkMsRUFBTU0sRUFBV3BCLEdBRXJCLE9BUEosU0FBc0JhLEVBQUtRLEVBQVFDLElBN0NuQyxTQUEyQlQsRUFBS1UsRUFBTUMsRUFBUUYsR0FHMUMsS0FBTUEsRUFBa0IsR0FDdEIsT0FBTyxFQUlULElBRkEsSUFDSUcsRUFBU0QsRUFBU0YsRUFBa0IsRUFDL0JOLEVBQUksRUFBR0EsRUFBSUgsRUFBSXZDLFNBQVUwQyxFQUFHLENBUW5DLElBQUlVLEVBQUliLEVBQUlLLFdBQVdGLEdBS3ZCLEdBSklVLEdBQUssT0FBVUEsR0FBSyxRQUV0QkEsRUFBSSxRQUFnQixLQUFKQSxJQUFjLElBQVksS0FEakNiLEVBQUlLLGFBQWFGLElBR3hCVSxHQUFLLElBQU0sQ0FDYixHQUFJRixHQUFVQyxFQUFRLE1BQ3RCRixFQUFLQyxLQUFZRSxDQUNuQixNQUFPLEdBQUlBLEdBQUssS0FBTyxDQUNyQixHQUFJRixFQUFTLEdBQUtDLEVBQVEsTUFDMUJGLEVBQUtDLEtBQVksSUFBUUUsR0FBSyxFQUM5QkgsRUFBS0MsS0FBWSxJQUFZLEdBQUpFLENBQzNCLE1BQU8sR0FBSUEsR0FBSyxNQUFRLENBQ3RCLEdBQUlGLEVBQVMsR0FBS0MsRUFBUSxNQUMxQkYsRUFBS0MsS0FBWSxJQUFRRSxHQUFLLEdBQzlCSCxFQUFLQyxLQUFZLElBQVNFLEdBQUssRUFBSyxHQUNwQ0gsRUFBS0MsS0FBWSxJQUFZLEdBQUpFLENBQzNCLEtBQU8sQ0FDTCxHQUFJRixFQUFTLEdBQUtDLEVBQVEsTUFDMUJGLEVBQUtDLEtBQVksSUFBUUUsR0FBSyxHQUM5QkgsRUFBS0MsS0FBWSxJQUFTRSxHQUFLLEdBQU0sR0FDckNILEVBQUtDLEtBQVksSUFBU0UsR0FBSyxFQUFLLEdBQ3BDSCxFQUFLQyxLQUFZLElBQVksR0FBSkUsQ0FDM0IsQ0FDRixDQUVBSCxFQUFLQyxHQUFVLENBRWpCLENBRVNHLENBQWtCZCxFQUFLcEYsRUFBTzRGLEVBQVFDLEVBQy9DLENBSUVNLENBQWFmLEVBQUtDLEVBQUtkLEdBQ2hCYyxDQUNULENBd0ZjZSxDQUFvQmhCLElBRXJCQyxDQUFHLEVBRVosTUFBVWdCLElBQ1IsSUEzS29CQyxFQUFPakcsRUEyS3ZCZ0YsRUFBTU0sRUFBV1UsRUFBSXhELFFBRXpCLE9BN0tvQnlELEVBNEtERCxFQTVLUWhHLEVBNEtIZ0YsRUEzSzVCdEYsRUFBTXdHLElBQUlELEVBQU9qRyxHQTRLTmdGLENBQUcsR0FhVm1CLEVBQU85QixFQUFTQyxHQUNoQjhCLEVBQVEsR0FDUkMsRUFBUSxFQUNaLEdBQUl6QixFQUNGLElBQUssSUFBSU0sRUFBSSxFQUFHQSxFQUFJTixFQUFLcEMsT0FBUTBDLElBQUssQ0FDcEMsSUFBSW9CLEVBQVl4QixFQUFJSCxFQUFTTyxJQUN6Qm9CLEdBQ1ksSUFBVkQsSUFBYUEsRUFBUUUsS0FDekJILEVBQU1sQixHQUFLb0IsRUFBVTFCLEVBQUtNLEtBRTFCa0IsRUFBTWxCLEdBQUtOLEVBQUtNLEVBRXBCLENBRUYsSUFBSUYsRUFBTW1CLEVBQUtLLE1BQU0sS0FBTUosR0FPM0IsT0FOQSxTQUFnQnBCLEdBRWQsT0FEYyxJQUFWcUIsR0FBYUksRUFBYUosR0F6QmhDLFNBQTRCckIsR0FDMUIsTUFBbUIsV0FBZk4sR0E3Qlk3QixFQStCTW1DLEdBekY1QixTQUEyQjBCLEVBQWFDLEVBQUtDLEdBUXpDLElBUEEsSUFBSWpCLEVBQVNnQixFQUFNQyxFQUNmQyxFQUFTRixFQU1ORCxFQUFZRyxNQUFhQSxHQUFVbEIsTUFBV2tCLEVBRXJELEdBQUlBLEVBQVNGLEVBQU0sSUFBTUQsRUFBWTFHLFFBQVV1RSxFQUM3QyxPQUFPQSxFQUFZdUMsT0FBT0osRUFBWUssU0FBU0osRUFBS0UsSUFLdEQsSUFIQSxJQUFJOUIsRUFBTSxHQUdINEIsRUFBTUUsR0FBUSxDQUtuQixJQUFJRyxFQUFLTixFQUFZQyxLQUNyQixHQUFXLElBQUxLLEVBQU4sQ0FDQSxJQUFJQyxFQUEwQixHQUFyQlAsRUFBWUMsS0FDckIsR0FBbUIsTUFBVCxJQUFMSyxHQUFMLENBQ0EsSUFBSUUsRUFBMEIsR0FBckJSLEVBQVlDLEtBT3JCLElBTEVLLEVBRGlCLE1BQVQsSUFBTEEsSUFDUyxHQUFMQSxJQUFZLEdBQU9DLEdBQU0sRUFBS0MsR0FFekIsRUFBTEYsSUFBVyxHQUFPQyxHQUFNLEdBQU9DLEdBQU0sRUFBMkIsR0FBckJSLEVBQVlDLE1BR3ZELE1BQ1A1QixHQUFPb0MsT0FBT0MsYUFBYUosT0FDdEIsQ0FDTCxJQUFJSyxFQUFLTCxFQUFLLE1BQ2RqQyxHQUFPb0MsT0FBT0MsYUFBYSxNQUFVQyxHQUFNLEdBQUssTUFBZSxLQUFMQSxFQUM1RCxDQWJ3RixNQUE3RHRDLEdBQU9vQyxPQUFPQyxjQUFvQixHQUFMSixJQUFZLEVBQUtDLEVBRlgsTUFBMUNsQyxHQUFPb0MsT0FBT0MsYUFBYUosRUFnQmpELENBQ0EsT0FBT2pDLENBQ1QsQ0FtQmV1QyxDQUFrQjNILEVBQVFrRCxFQUFLK0QsR0FBa0IsR0FnQ3pDLFlBQWZsQyxFQUFpQzZDLFFBQVF2QyxHQUN0Q0EsRUFsQ2IsSUFBc0JuQyxFQUFLK0QsQ0FtQ3ZCLENBbUJTWSxDQUFtQnhDLEVBQzVCLENBRU15QyxDQUFPekMsRUFFZixDQW9CSixJQTZESTBDLEVBN0RBQyxFQUFjLENBQ2hCLFlBblVBLFNBQXNCOUUsRUFBS0UsRUFBTUcsR0FNN0IsTUFMVyxJQUFJUixFQUFjRyxHQUV4QmEsS0FBS1gsRUFBTUcsR0FDQUwsQ0FHbEIsRUE2VEYsTUEzVEEsV0FDSXBELEVBQU0sR0FDUixFQTBURixzQkF4VEEsU0FBZ0NtSSxFQUFNN0ssRUFBSzhLLEdBQ3ZDbEksRUFBT21JLFdBQVdGLEVBQU03SyxFQUFLQSxFQUFNOEssRUFDckMsRUF1VEYsdUJBalNBLFNBQWlDRSxHQUM3QixJQTZCZUMsRUE3QlhDLEVBQVV0SSxFQUFPNkMsT0F3QmpCMEYsRUF4Q0csV0F5Q1AsSUF4QkFILEtBQWtDLEdBd0JkRyxFQUNsQixPQUFPLEVBUVQsSUFBSyxJQUFJQyxFQUFVLEVBQUdBLEdBQVcsRUFBR0EsR0FBVyxFQUFHLENBQ2hELElBQUlDLEVBQW9CSCxHQUFXLEVBQUksR0FBTUUsR0FPN0MsR0FMQUMsRUFBb0JDLEtBQUtDLElBQUlGLEVBQW1CTCxFQUFnQixXQUk5QzlELEVBRkpvRSxLQUFLQyxJQUFJSixHQVZWRixFQVUrQkssS0FBS0UsSUFBSVIsRUFBZUssS0FBb0IsTUFWM0NKLEVBVTJDLGVBS3RGLE9BQU8sQ0FFWCxDQUNBLE9BQU8sQ0FDVCxHQTZRQXpCLEdBM2lCSixXQUVFLElBaEN3QnJFLEVBQVFULEVBQVlDLEVBQVM4RyxFQWdDakRDLEVBQU8sQ0FDVCxJQUFPZCxFQUNQLHVCQUEwQkEsR0FNNUIsU0FBU2UsRUFBZ0J0RyxFQUFVdUcsR0FDakMsSUE5TmVDLEVBOE5YQyxFQUFVekcsRUFBU3lHLFFBYXZCLE9BWEExTCxFQUFZLElBQUkwTCxFQUVoQnhKLEVBQWFsQyxFQUFZLElBQVUsT0FDbkMyQyxJQUVZM0MsRUFBWSxJQUE2QiwwQkFyT3RDeUwsRUF1T0x6TCxFQUFZLElBQXFCLGtCQXRPN0NzRCxFQUFXcUksUUFBUUYsR0E0Q3JCLFNBQTZCRyxHQU8zQixHQU5BcEksSUFFSXhELEVBQStCLHdCQUNqQ0EsRUFBK0IsdUJBQUV3RCxHQUdaLEdBQW5CQSxJQUMyQixPQUF6QkMsSUFDRm9JLGNBQWNwSSxHQUNkQSxFQUF1QixNQUVyQkMsR0FBdUIsQ0FDekIsSUFBSTJILEVBQVczSCxFQUNmQSxFQUF3QixLQUN4QjJILEdBQ0YsQ0FFSixDQTBLSVMsR0FFT0osQ0FDVCxDQW1CQSxHQTFOQWxJLElBRUl4RCxFQUErQix3QkFDakNBLEVBQStCLHVCQUFFd0QsR0F1Ti9CeEQsRUFBd0IsZ0JBRTFCLElBQ0UsT0FBT0EsRUFBd0IsZ0JBQUVzTCxFQUFNQyxFQUN6QyxDQUFFLE1BQU0zSCxHQUNOekIsRUFBSSxzREFBd0R5QixHQUUxRDdELEVBQW1CNkQsRUFDdkIsRUFsRnNCbUIsRUFzRlA5QyxFQXRGZXFDLEVBc0ZIUixFQXRGZVMsRUFzRkMrRyxFQXRGUUQsRUE0RHJELFNBQW9DVSxHQUtsQ1IsRUFBZ0JRLEVBQWlCLFNBQ25DLEVBakVLaEgsR0FDMEMsbUJBQXBDMUMsWUFBWTJKLHNCQUNsQmhJLEVBQVVNLElBQ0ssbUJBQVRHLE1Bb0JGSixFQUF1QkMsRUFBWUMsRUFBUzhHLEdBbkI1QzVHLE1BQU1ILEVBQVksQ0FBRUssWUFBYSxnQkFBaUJELE1BQUssU0FBU0UsR0FRckUsT0FGYXZDLFlBQVkySixxQkFBcUJwSCxFQUFVTCxHQUUxQ0csS0FDWjJHLEdBQ0EsU0FBU25HLEdBS1AsT0FGQS9DLEVBQUksa0NBQW9DK0MsR0FDeEMvQyxFQUFJLDZDQUNHa0MsRUFBdUJDLEVBQVlDLEVBQVM4RyxFQUNyRCxHQUNKLEtBZ0U2RXhHLE1BQU05RSxFQUV2RixDQXNkVWtNLEdBT0lqTSxFQUFnQixRQUFJLFdBQ2hDLE9BQWtCQSxFQUFnQixRQUFJQSxFQUFZLElBQVUsUUFBR3FKLE1BQU0sS0FBTTZDLFVBQzdFLEVBUWNsTSxFQUFnQixRQUFJLFdBQ2hDLE9BQWtCQSxFQUFnQixRQUFJQSxFQUFZLElBQVUsUUFBR3FKLE1BQU0sS0FBTTZDLFVBQzdFLEVBR1lsTSxFQUFjLE1BQUksV0FDNUIsT0FBZ0JBLEVBQWMsTUFBSUEsRUFBWSxJQUFRLE1BQUdxSixNQUFNLEtBQU02QyxVQUN2RSxFQUdnQixXQUNkLE9BQVE5QyxFQUFZcEosRUFBWSxJQUFhLFdBQUdxSixNQUFNLEtBQU02QyxVQUM5RCxHQUdJNUMsRUFBZSxXQUNqQixPQUFRQSxFQUFldEosRUFBWSxJQUFnQixjQUFHcUosTUFBTSxLQUFNNkMsVUFDcEUsRUFHSS9ELEVBQWEsV0FDZixPQUFRQSxFQUFhbkksRUFBWSxJQUFjLFlBQUdxSixNQUFNLEtBQU02QyxVQUNoRSxFQUdJdEYsRUFBeUIsV0FDM0IsT0FBUUEsRUFBeUI1RyxFQUFZLElBQXlCLHVCQUFHcUosTUFBTSxLQUFNNkMsVUFDdkYsRUFtQkEsU0FBU0MsSUFhUCxTQUFTQyxJQUdIN0IsSUFDSkEsR0FBWSxFQUNadkssRUFBa0IsV0FBSSxFQUVsQjBDLElBejBCTnlDLEVBQXFCN0IsR0E2MEJuQnhELEVBQW9CRSxHQUNoQkEsRUFBNkIsc0JBQUdBLEVBQTZCLHVCQTMwQnJFLFdBRUUsR0FBSUEsRUFBZ0IsUUFFbEIsSUFEZ0MsbUJBQXJCQSxFQUFnQixVQUFpQkEsRUFBZ0IsUUFBSSxDQUFDQSxFQUFnQixVQUMxRUEsRUFBZ0IsUUFBRXFGLFFBbUJQb0csRUFsQkh6TCxFQUFnQixRQUFFc0YsUUFtQm5DL0IsRUFBY29JLFFBQVFGLEdBRHhCLElBQXNCQSxFQWRwQnRHLEVBQXFCNUIsRUFDdkIsQ0FtMEJJOEksSUFDRixDQTFCSTdJLEVBQWtCLElBcjBCeEIsV0FDRSxHQUFJeEQsRUFBZSxPQUVqQixJQUQrQixtQkFBcEJBLEVBQWUsU0FBaUJBLEVBQWUsT0FBSSxDQUFDQSxFQUFlLFNBQ3ZFQSxFQUFlLE9BQUVxRixRQTBCUG9HLEVBekJIekwsRUFBZSxPQUFFc0YsUUEwQmpDakMsRUFBYXNJLFFBQVFGLEdBRHZCLElBQXFCQSxFQXRCbkJ0RyxFQUFxQjlCLEVBQ3ZCLENBaTBCRWlKLEdBR0k5SSxFQUFrQixJQXFCbEJ4RCxFQUFrQixXQUNwQkEsRUFBa0IsVUFBRSxjQUNwQnVNLFlBQVcsV0FDVEEsWUFBVyxXQUNUdk0sRUFBa0IsVUFBRSxHQUN0QixHQUFHLEdBQ0hvTSxHQUNGLEdBQUcsSUFHSEEsS0FFSixDQUVBLEdBeERBcE0sRUFBYyxNQUFJc0gsRUFDbEJ0SCxFQUFjLE1BdkVaLFNBQWVtSCxFQUFPSSxFQUFZQyxFQUFVRSxHQUd4QyxJQUFJOEUsR0FBZWhGLEdBQVlBLEVBQVNpRixPQUFPN0csR0FBa0IsV0FBVEEsR0FBOEIsWUFBVEEsSUFFN0UsTUFEZ0MsV0FBZjJCLEdBQ0NpRixJQUFnQjlFLEVBQ3pCUixFQUFTQyxHQUVYLFdBQ0wsT0FBT0csRUFBTUgsRUFBT0ksRUFBWUMsRUFBVTBFLFVBQzVDLENBQ0YsRUFpRUp4SSxFQUF3QixTQUFTZ0osSUFFMUJuQyxHQUFXNEIsSUFDWDVCLElBQVc3RyxFQUF3QmdKLEVBQzFDLEVBOENJMU0sRUFBZ0IsUUFFbEIsSUFEZ0MsbUJBQXJCQSxFQUFnQixVQUFpQkEsRUFBZ0IsUUFBSSxDQUFDQSxFQUFnQixVQUMxRUEsRUFBZ0IsUUFBRXFGLE9BQVMsR0FDaENyRixFQUFnQixRQUFFMk0sS0FBbEIzTSxHQVVGLE9BTkZtTSxJQU1TMU0sRUFBbUJtTixLQUc1QixHQUV1QixpQkFBWmxCLFFBQ1RGLEVBQU9FLFFBQVVqTSxFQUNRLG1CQUFYb04sUUFBeUIsT0FDdkNBLE9BQU8sSUFBSSxXQUFhLE9BQU9wTixDQUFvQixJQUN6QixpQkFBWmlNLFVBQ2RBLFFBQTRCLG1CQUFJak0sRSxnRkNocEM5QnFOLEUsTUFBMEIsR0FBNEIsS0FFMURBLEVBQXdCQyxLQUFLLENBQUN2QixFQUFPSSxHQUFJLGlpQ0FBa2lDLEdBQUcsQ0FBQyxRQUFVLEVBQUUsUUFBVSxDQUFDLGtFQUFrRSxNQUFRLEdBQUcsU0FBVyx3VUFBd1UsZUFBaUIsQ0FBQyxraUNBQWtpQyxXQUFhLE1BRXZrRixTLHdCQ0RBSixFQUFPRSxRQUFVLFNBQVVzQixHQUN6QixJQUFJQyxFQUFPLEdBNEVYLE9BekVBQSxFQUFLQyxTQUFXLFdBQ2QsT0FBT3pILEtBQUswSCxLQUFJLFNBQVVDLEdBQ3hCLElBQUlDLEVBQVUsR0FDVkMsT0FBK0IsSUFBWkYsRUFBSyxHQW9CNUIsT0FuQklBLEVBQUssS0FDUEMsR0FBVyxjQUFjRSxPQUFPSCxFQUFLLEdBQUksUUFFdkNBLEVBQUssS0FDUEMsR0FBVyxVQUFVRSxPQUFPSCxFQUFLLEdBQUksT0FFbkNFLElBQ0ZELEdBQVcsU0FBU0UsT0FBT0gsRUFBSyxHQUFHL0gsT0FBUyxFQUFJLElBQUlrSSxPQUFPSCxFQUFLLElBQU0sR0FBSSxPQUU1RUMsR0FBV0wsRUFBdUJJLEdBQzlCRSxJQUNGRCxHQUFXLEtBRVRELEVBQUssS0FDUEMsR0FBVyxLQUVURCxFQUFLLEtBQ1BDLEdBQVcsS0FFTkEsQ0FDVCxJQUFHRyxLQUFLLEdBQ1YsRUFHQVAsRUFBS2xGLEVBQUksU0FBVzBGLEVBQVNDLEVBQU9DLEVBQVFDLEVBQVVDLEdBQzdCLGlCQUFaSixJQUNUQSxFQUFVLENBQUMsQ0FBQyxLQUFNQSxPQUFTNU4sS0FFN0IsSUFBSWlPLEVBQXlCLENBQUMsRUFDOUIsR0FBSUgsRUFDRixJQUFLLElBQUlJLEVBQUksRUFBR0EsRUFBSXRJLEtBQUtKLE9BQVEwSSxJQUFLLENBQ3BDLElBQUluQyxFQUFLbkcsS0FBS3NJLEdBQUcsR0FDUCxNQUFObkMsSUFDRmtDLEVBQXVCbEMsSUFBTSxFQUVqQyxDQUVGLElBQUssSUFBSW9DLEVBQUssRUFBR0EsRUFBS1AsRUFBUXBJLE9BQVEySSxJQUFNLENBQzFDLElBQUlaLEVBQU8sR0FBR0csT0FBT0UsRUFBUU8sSUFDekJMLEdBQVVHLEVBQXVCVixFQUFLLFdBR3JCLElBQVZTLFNBQ2MsSUFBWlQsRUFBSyxLQUdkQSxFQUFLLEdBQUssU0FBU0csT0FBT0gsRUFBSyxHQUFHL0gsT0FBUyxFQUFJLElBQUlrSSxPQUFPSCxFQUFLLElBQU0sR0FBSSxNQUFNRyxPQUFPSCxFQUFLLEdBQUksTUFGL0ZBLEVBQUssR0FBS1MsR0FNVkgsSUFDR04sRUFBSyxJQUdSQSxFQUFLLEdBQUssVUFBVUcsT0FBT0gsRUFBSyxHQUFJLE1BQU1HLE9BQU9ILEVBQUssR0FBSSxLQUMxREEsRUFBSyxHQUFLTSxHQUhWTixFQUFLLEdBQUtNLEdBTVZFLElBQ0dSLEVBQUssSUFHUkEsRUFBSyxHQUFLLGNBQWNHLE9BQU9ILEVBQUssR0FBSSxPQUFPRyxPQUFPSCxFQUFLLEdBQUksS0FDL0RBLEVBQUssR0FBS1EsR0FIVlIsRUFBSyxHQUFLLEdBQUdHLE9BQU9LLElBTXhCWCxFQUFLRixLQUFLSyxHQUNaLENBQ0YsRUFDT0gsQ0FDVCxDLHdCQ2xGQXpCLEVBQU9FLFFBQVUsU0FBVTBCLEdBQ3pCLElBQUlDLEVBQVVELEVBQUssR0FDZmEsRUFBYWIsRUFBSyxHQUN0QixJQUFLYSxFQUNILE9BQU9aLEVBRVQsR0FBb0IsbUJBQVRhLEtBQXFCLENBQzlCLElBQUlDLEVBQVNELEtBQUtFLFNBQVNDLG1CQUFtQkMsS0FBS0MsVUFBVU4sTUFDekRPLEVBQU8sK0RBQStEakIsT0FBT1ksR0FDN0VNLEVBQWdCLE9BQU9sQixPQUFPaUIsRUFBTSxPQUN4QyxNQUFPLENBQUNuQixHQUFTRSxPQUFPLENBQUNrQixJQUFnQmpCLEtBQUssS0FDaEQsQ0FDQSxNQUFPLENBQUNILEdBQVNHLEtBQUssS0FDeEIsQyxtQkNmQSxJQVNJa0IsRUFQSWxELEVBQU9FLFNBT1hnRCxFQUFTLFNBQVN4RCxFQUFNckwsR0FHNUIsSUFBSTBOLEVBQVNvQixNQUFNQyxVQUFVckIsT0FDekJzQixFQUFRRixNQUFNQyxVQUFVQyxNQUN4QjNCLEVBQVc1TSxPQUFPc08sVUFBVTFCLFNBSWhDLFNBQVM0QixFQUFRQyxFQUFHQyxHQUNsQixJQUFJQyxFQUFNRixFQUFJQyxFQUFJRCxFQUFJQyxFQUN0QixPQUFPOUQsRUFBS2dFLElBQUksR0FDQSxNQUFRaEUsRUFBS25KLElBQU1rTixFQUFNLEVBQUtBLEdBQU9BLEdBQVEvRCxFQUFLaUUsUUFDcEUsQ0FHQSxJQUFJQyxFQUFVVCxNQUFNUyxTQUFXLFNBQWlCQyxHQUM5QyxNQUE4QixtQkFBdkJuQyxFQUFTb0MsS0FBS0QsRUFDdkIsRUFHQSxTQUFTRSxFQUFXRixHQUNsQixNQUE4QixzQkFBdkJuQyxFQUFTb0MsS0FBS0QsRUFDdkIsQ0FHQSxTQUFTRyxFQUFTOUUsR0FDaEIsTUFBdUIsaUJBQVJBLEdBQW9CQSxFQUFNQSxHQUFRLENBQ25ELENBVUEsU0FBU2dFLElBQ1AsT0FBTyxJQUFJQSxFQUFNZSxNQUFNdkQsVUFDekIsQ0FtUkEsU0FBU3dELElBQVksT0FBTyxDQUFHLENBVy9CLFNBQVNDLElBQVcsT0FBTyxDQUFHLENBbUI5QixTQUFTQyxFQUFTN0gsRUFBRzhILEdBQUssT0FBTzlILElBQU04SCxFQUFJLEVBQUksQ0FBRyxDQTdTbERuQixFQUFNb0IsR0FBS3BCLEVBQU1FLFVBS2pCRixFQUFNZSxNQUFRLFNBQWVoSSxHQUUzQixHQUFJMkgsRUFBUTNILEVBQUssSUFFZixHQUFJMkgsRUFBUTNILEVBQUssR0FBRyxJQUFLLENBRW5COEgsRUFBVzlILEVBQUssTUFDbEJBLEVBQUssR0FBS2lILEVBQU12QixJQUFJMUYsRUFBSyxHQUFJQSxFQUFLLEtBRXBDLElBQUssSUFBSU0sRUFBSSxFQUFHQSxFQUFJTixFQUFLLEdBQUdwQyxPQUFRMEMsSUFDbEN0QyxLQUFLc0MsR0FBS04sRUFBSyxHQUFHTSxHQUNwQnRDLEtBQUtKLE9BQVNvQyxFQUFLLEdBQUdwQyxNQUd4QixNQUNFSSxLQUFLLEdBQUs4SixFQUFXOUgsRUFBSyxJQUFNaUgsRUFBTXZCLElBQUkxRixFQUFLLEdBQUlBLEVBQUssSUFBTUEsRUFBSyxHQUNuRWhDLEtBQUtKLE9BQVMsT0FJWCxHQUFJbUssRUFBUy9ILEVBQUssSUFDdkJoQyxLQUFLLEdBQUtpSixFQUFNcUIsSUFBSTFHLE1BQU0sS0FBTTVCLEdBQ2hDaEMsS0FBS0osT0FBUyxNQUdULElBQUlvQyxFQUFLLGFBQWNpSCxFQUU1QixPQUFPQSxFQUFNakgsRUFBSyxHQUFHdUksV0FNckJ2SyxLQUFLLEdBQUssR0FDVkEsS0FBS0osT0FBUyxDQUNoQixDQUVBLE9BQU9JLElBQ1QsRUFDQWlKLEVBQU1lLE1BQU1iLFVBQVlGLEVBQU1FLFVBQzlCRixFQUFNZSxNQUFNUSxZQUFjdkIsRUFLMUJBLEVBQU13QixNQUFRLENBQ1pwQixRQUFTQSxFQUNUTSxRQUFTQSxFQUNURyxXQUFZQSxFQUNaQyxTQUFVQSxFQUNWVyxTQW5FRixTQUFrQnRILEdBQ2hCLE9BQU8wRSxFQUFPbEUsTUFBTSxHQUFJUixFQUMxQixHQXFFQTZGLEVBQU0wQixXQUFhbEYsRUFBS21GLE9BQ3hCM0IsRUFBTTRCLFVBQVksU0FBbUJSLEdBQ25DLEdBQWtCLG1CQUFQQSxFQUNULE1BQU0sSUFBSVMsVUFBVSx3QkFDdEI3QixFQUFNMEIsV0FBYU4sQ0FDckIsRUFLQXBCLEVBQU04QixPQUFTLFNBQWdCQyxHQUM3QixJQUFJMUksRUFBRzhILEVBRVAsR0FBeUIsSUFBckIzRCxVQUFVN0csT0FBYyxDQUMxQixJQUFLd0ssS0FBS1ksRUFDUi9CLEVBQU1tQixHQUFLWSxFQUFJWixHQUNqQixPQUFPcEssSUFDVCxDQUVBLElBQUtzQyxFQUFJLEVBQUdBLEVBQUltRSxVQUFVN0csT0FBUTBDLElBQ2hDLElBQUs4SCxLQUFLM0QsVUFBVW5FLEdBQ2xCMEksRUFBSVosR0FBSzNELFVBQVVuRSxHQUFHOEgsR0FHMUIsT0FBT1ksQ0FDVCxFQUlBL0IsRUFBTWdDLEtBQU8sU0FBYzdILEdBQ3pCLE9BQU9BLEVBQUl4RCxRQUFVLENBQ3ZCLEVBSUFxSixFQUFNaUMsS0FBTyxTQUFjOUgsR0FDekIsT0FBT0EsRUFBSSxHQUFHeEQsUUFBVSxDQUMxQixFQUlBcUosRUFBTWtDLFdBQWEsU0FBb0IvSCxHQUNyQyxNQUFPLENBQ0w2SCxLQUFNaEMsRUFBTWdDLEtBQUs3SCxHQUNqQjhILEtBQU1qQyxFQUFNaUMsS0FBSzlILEdBRXJCLEVBSUE2RixFQUFNbUMsSUFBTSxTQUFhaEksRUFBS2lJLEdBQzVCLE9BQUkxQixFQUFRMEIsR0FDSEEsRUFBTTNELEtBQUksU0FBU3BGLEdBQ3hCLE9BQU8yRyxFQUFNbUMsSUFBSWhJLEVBQUtkLEVBQ3hCLElBRUtjLEVBQUlpSSxFQUNiLEVBS0FwQyxFQUFNcUMsS0FBTyxTQUFjbEksRUFBS2QsR0FDOUIsT0FBTzJHLEVBQU1tQyxJQUFJaEksRUFBS2QsRUFDeEIsRUFLQTJHLEVBQU1zQyxJQUFNLFNBQWFuSSxFQUFLaUksR0FDNUIsR0FBSTFCLEVBQVEwQixHQUFRLENBQ2xCLElBQUlHLEVBQVN2QyxFQUFNd0MsT0FBT3JJLEVBQUl4RCxRQUFROEgsS0FBSSxXQUN4QyxPQUFPLElBQUl3QixNQUFNbUMsRUFBTXpMLE9BQ3pCLElBTUEsT0FMQXlMLEVBQU1LLFNBQVEsU0FBU0MsRUFBS3JKLEdBQzFCMkcsRUFBTXdDLE9BQU9ySSxFQUFJeEQsUUFBUThMLFNBQVEsU0FBU3RCLEdBQ3hDb0IsRUFBT3BCLEdBQUc5SCxHQUFLYyxFQUFJZ0gsR0FBR3VCLEVBQ3hCLEdBQ0YsSUFDT0gsQ0FDVCxDQUVBLElBREEsSUFBSUksRUFBUyxJQUFJMUMsTUFBTTlGLEVBQUl4RCxRQUNsQjBDLEVBQUksRUFBR0EsRUFBSWMsRUFBSXhELE9BQVEwQyxJQUM5QnNKLEVBQU90SixHQUFLLENBQUNjLEVBQUlkLEdBQUcrSSxJQUN0QixPQUFPTyxDQUNULEVBS0EzQyxFQUFNNEMsS0FBTyxTQUFjekksRUFBS2QsR0FDOUIsT0FBTzJHLEVBQU1zQyxJQUFJbkksRUFBS2QsR0FBR29GLEtBQUksU0FBU29FLEdBQUksT0FBT0EsRUFBRSxFQUFHLEdBQ3hELEVBSUE3QyxFQUFNOEMsS0FBTyxTQUFjM0ksR0FHekIsSUFGQSxJQUFJNEksRUFBTy9DLEVBQU1nQyxLQUFLN0gsR0FDbEI2SSxFQUFNLElBQUkvQyxNQUFNOEMsR0FDWFosRUFBTSxFQUFHQSxFQUFNWSxFQUFNWixJQUM1QmEsRUFBSWIsR0FBTyxDQUFDaEksRUFBSWdJLEdBQUtBLElBQ3ZCLE9BQU9hLENBQ1QsRUFJQWhELEVBQU1pRCxTQUFXLFNBQWtCOUksR0FHakMsSUFGQSxJQUFJNEksRUFBTy9DLEVBQU1nQyxLQUFLN0gsR0FBTyxFQUN6QjZJLEVBQU0sSUFBSS9DLE1BQU04QyxHQUNYMUosRUFBSSxFQUFHMEosR0FBUSxFQUFHQSxJQUFRMUosSUFDakMySixFQUFJM0osR0FBSyxDQUFDYyxFQUFJZCxHQUFHMEosSUFDbkIsT0FBT0MsQ0FDVCxFQUdBaEQsRUFBTWtELFVBQVksU0FBbUIvSSxHQUNuQyxJQUNJZ0osRUFBUW5CLEVBQU1DLEVBQU1kLEVBQUc5SCxFQUR2QjBJLEVBQU0sR0FVVixJQU5LckIsRUFBUXZHLEVBQUksTUFDZkEsRUFBTSxDQUFDQSxJQUVUNkgsRUFBTzdILEVBQUl4RCxPQUNYc0wsRUFBTzlILEVBQUksR0FBR3hELE9BRVQwQyxFQUFJLEVBQUdBLEVBQUk0SSxFQUFNNUksSUFBSyxDQUV6QixJQURBOEosRUFBUyxJQUFJbEQsTUFBTStCLEdBQ2RiLEVBQUksRUFBR0EsRUFBSWEsRUFBTWIsSUFDcEJnQyxFQUFPaEMsR0FBS2hILEVBQUlnSCxHQUFHOUgsR0FDckIwSSxFQUFJMUQsS0FBSzhFLEVBQ1gsQ0FHQSxPQUFzQixJQUFmcEIsRUFBSXBMLE9BQWVvTCxFQUFJLEdBQUtBLENBQ3JDLEVBS0EvQixFQUFNdkIsSUFBTSxTQUFhdEUsRUFBS0csRUFBTThJLEdBQ2xDLElBQUlqQixFQUFLWSxFQUFNTSxFQUFNTCxFQUFLVixFQVMxQixJQVBLNUIsRUFBUXZHLEVBQUksTUFDZkEsRUFBTSxDQUFDQSxJQUVUNEksRUFBTzVJLEVBQUl4RCxPQUNYME0sRUFBT2xKLEVBQUksR0FBR3hELE9BQ2RxTSxFQUFNSSxFQUFVakosRUFBTSxJQUFJOEYsTUFBTThDLEdBRTNCWixFQUFNLEVBQUdBLEVBQU1ZLEVBQU1aLElBSXhCLElBRkthLEVBQUliLEtBQ1BhLEVBQUliLEdBQU8sSUFBSWxDLE1BQU1vRCxJQUNsQmYsRUFBTSxFQUFHQSxFQUFNZSxFQUFNZixJQUN4QlUsRUFBSWIsR0FBS0csR0FBT2hJLEVBQUtILEVBQUlnSSxHQUFLRyxHQUFNSCxFQUFLRyxHQUc3QyxPQUFzQixJQUFmVSxFQUFJck0sT0FBZXFNLEVBQUksR0FBS0EsQ0FDckMsRUFJQWhELEVBQU1zRCxVQUFZLFNBQW1CbkosRUFBS0csRUFBTThJLEdBQzlDLElBQUlqQixFQUFLWSxFQUFNTSxFQUFNTCxFQUFLVixFQVMxQixJQVBLNUIsRUFBUXZHLEVBQUksTUFDZkEsRUFBTSxDQUFDQSxJQUVUNEksRUFBTzVJLEVBQUl4RCxPQUNYME0sRUFBT2xKLEVBQUksR0FBR3hELE9BQ2RxTSxFQUFNSSxFQUFVakosRUFBTSxJQUFJOEYsTUFBTThDLEdBRTNCWixFQUFNLEVBQUdBLEVBQU1ZLEVBQU1aLElBTXhCLElBSkthLEVBQUliLEtBQ1BhLEVBQUliLEdBQU8sSUFBSWxDLE1BQU1vRCxJQUNuQkEsRUFBTyxJQUNUTCxFQUFJYixHQUFLLEdBQUtoSSxFQUFJZ0ksR0FBSyxJQUNwQkcsRUFBTSxFQUFHQSxFQUFNZSxFQUFNZixJQUN4QlUsRUFBSWIsR0FBS0csR0FBT2hJLEVBQUswSSxFQUFJYixHQUFLRyxFQUFJLEdBQUluSSxFQUFJZ0ksR0FBS0csSUFFbkQsT0FBc0IsSUFBZlUsRUFBSXJNLE9BQWVxTSxFQUFJLEdBQUtBLENBQ3JDLEVBSUFoRCxFQUFNdUQsTUFBUSxTQUFlcEosRUFBS0csR0FDaEMsT0FBTzBGLEVBQU12QixJQUFJdEUsRUFBS0csR0FBTSxFQUM5QixFQUlBMEYsRUFBTXdELE9BQVMsU0FBaUJ4QixFQUFNQyxFQUFNM0gsR0FDMUMsSUFDSWpCLEVBQUc4SCxFQURINkIsRUFBTSxJQUFJL0MsTUFBTStCLEdBUXBCLElBTEluQixFQUFXb0IsS0FDYjNILEVBQU8ySCxFQUNQQSxFQUFPRCxHQUdKM0ksRUFBSSxFQUFHQSxFQUFJMkksRUFBTTNJLElBRXBCLElBREEySixFQUFJM0osR0FBSyxJQUFJNEcsTUFBTWdDLEdBQ2RkLEVBQUksRUFBR0EsRUFBSWMsRUFBTWQsSUFDcEI2QixFQUFJM0osR0FBRzhILEdBQUs3RyxFQUFLakIsRUFBRzhILEdBR3hCLE9BQU82QixDQUNULEVBT0FoRCxFQUFNeUQsTUFBUSxTQUFlekIsRUFBTUMsR0FHakMsT0FGS25CLEVBQVNtQixLQUNaQSxFQUFPRCxHQUNGaEMsRUFBTXdELE9BQU94QixFQUFNQyxFQUFNakIsRUFDbEMsRUFPQWhCLEVBQU0wRCxLQUFPLFNBQWMxQixFQUFNQyxHQUcvQixPQUZLbkIsRUFBU21CLEtBQ1pBLEVBQU9ELEdBQ0ZoQyxFQUFNd0QsT0FBT3hCLEVBQU1DLEVBQU1oQixFQUNsQyxFQUlBakIsRUFBTTJELEtBQU8sU0FBYzNCLEVBQU1DLEdBRy9CLE9BRktuQixFQUFTbUIsS0FDWkEsRUFBT0QsR0FDRmhDLEVBQU13RCxPQUFPeEIsRUFBTUMsRUFBTWpDLEVBQU0wQixXQUN4QyxFQU9BMUIsRUFBTTRELFNBQVcsU0FBa0I1QixFQUFNQyxHQUd2QyxPQUZLbkIsRUFBU21CLEtBQ1pBLEVBQU9ELEdBQ0ZoQyxFQUFNd0QsT0FBT3hCLEVBQU1DLEVBQU1mLEVBQ2xDLEVBSUFsQixFQUFNNkQsVUFBWSxTQUFtQjFKLEdBQ25DLElBQ0lnSSxFQUFLRyxFQURMakssRUFBTzhCLEVBQUl4RCxPQUdmLEdBQUl3RCxFQUFJeEQsU0FBV3dELEVBQUksR0FBR3hELE9BQ3hCLE9BQU8sRUFFVCxJQUFLd0wsRUFBTSxFQUFHQSxFQUFNOUosRUFBTThKLElBQ3hCLElBQUtHLEVBQU0sRUFBR0EsRUFBTWpLLEVBQU1pSyxJQUN4QixHQUFJbkksRUFBSW1JLEdBQUtILEtBQVNoSSxFQUFJZ0ksR0FBS0csR0FDN0IsT0FBTyxFQUdiLE9BQU8sQ0FDVCxFQUlBdEMsRUFBTThELE1BQVEsU0FBZTNKLEdBQzNCLE9BQU82RixFQUFNdUQsTUFBTXBKLEVBQUs2RyxFQUMxQixFQUlBaEIsRUFBTXFCLElBQU0sU0FBYTVFLEVBQUtDLEVBQUsvRixFQUFRMkQsR0FDcEN1RyxFQUFXdkcsS0FDZEEsR0FBTyxHQUVULElBSUl5SixFQUpBNUosRUFBTSxHQUNONkosRUFBUTVELEVBQVEzRCxFQUFLQyxHQUNyQnVILEdBQVF2SCxFQUFNc0gsRUFBUXZILEVBQU11SCxLQUFXck4sRUFBUyxHQUFLcU4sR0FDckRFLEVBQVV6SCxFQUtkLElBQUtzSCxFQUFNLEVBQ05HLEdBQVd4SCxHQUFPcUgsRUFBTXBOLEVBQ2pCdU4sR0FBV3pILEVBQU11SCxFQUFRQyxFQUFPRCxJQUF2Q0QsR0FBc0RDLEVBQ3pEN0osRUFBSWtFLEtBQU0vRCxFQUFPQSxFQUFLNEosRUFBU0gsR0FBT0csR0FHeEMsT0FBTy9KLENBQ1QsRUFNQTZGLEVBQU13QyxPQUFTLFNBQWdCMkIsRUFBT0MsRUFBS0gsR0FDekMsSUFDSTVLLEVBREFnTCxFQUFLLEdBT1QsR0FMQUosRUFBT0EsR0FBUSxFQUNYRyxJQUFRalQsSUFDVmlULEVBQU1ELEVBQ05BLEVBQVEsR0FFTkEsSUFBVUMsR0FBZ0IsSUFBVEgsRUFDbkIsTUFBTyxHQUVULEdBQUlFLEVBQVFDLEdBQU9ILEVBQU8sRUFDeEIsTUFBTyxHQUVULEdBQUlFLEVBQVFDLEdBQU9ILEVBQU8sRUFDeEIsTUFBTyxHQUVULEdBQUlBLEVBQU8sRUFDVCxJQUFLNUssRUFBSThLLEVBQU85SyxFQUFJK0ssRUFBSy9LLEdBQUs0SyxFQUM1QkksRUFBR2hHLEtBQUtoRixRQUdWLElBQUtBLEVBQUk4SyxFQUFPOUssRUFBSStLLEVBQUsvSyxHQUFLNEssRUFDNUJJLEVBQUdoRyxLQUFLaEYsR0FHWixPQUFPZ0wsQ0FDVCxFQU9BckUsRUFBTUcsTUFBUyxXQUNiLFNBQVNtRSxFQUFPL0YsRUFBTTRGLEVBQU9DLEVBQUtILEdBRWhDLElBQUk1SyxFQUNBZ0wsRUFBSyxHQUNMMU4sRUFBUzRILEVBQUs1SCxPQUNsQixHQUFJd04sSUFBVWhULEdBQWFpVCxJQUFRalQsR0FBYThTLElBQVM5UyxFQUN2RCxPQUFPNk8sRUFBTXVFLEtBQUtoRyxHQVFwQixHQURBMEYsRUFBT0EsR0FBUSxHQUZmRSxHQUZBQSxFQUFRQSxHQUFTLElBRUEsRUFBSUEsRUFBUXhOLEVBQVN3TixNQUN0Q0MsR0FGQUEsRUFBTUEsR0FBTzdGLEVBQUs1SCxTQUVMLEVBQUl5TixFQUFNek4sRUFBU3lOLElBRUYsSUFBVEgsRUFDbkIsTUFBTyxHQUVULEdBQUlFLEVBQVFDLEdBQU9ILEVBQU8sRUFDeEIsTUFBTyxHQUVULEdBQUlFLEVBQVFDLEdBQU9ILEVBQU8sRUFDeEIsTUFBTyxHQUVULEdBQUlBLEVBQU8sRUFDVCxJQUFLNUssRUFBSThLLEVBQU85SyxFQUFJK0ssRUFBSy9LLEdBQUs0SyxFQUM1QkksRUFBR2hHLEtBQUtFLEVBQUtsRixTQUdmLElBQUtBLEVBQUk4SyxFQUFPOUssRUFBSStLLEVBQUkvSyxHQUFLNEssRUFDM0JJLEVBQUdoRyxLQUFLRSxFQUFLbEYsSUFHakIsT0FBT2dMLENBQ1QsQ0EyQkEsT0F6QkEsU0FBZTlGLEVBQU1pRyxHQUNuQixJQUFJQyxFQUFVQyxFQUVkLE9BQUk1RCxHQURKMEQsRUFBVUEsR0FBVyxDQUFDLEdBQ0RyQyxLQUNmckIsRUFBUzBELEVBQVFsQyxLQUNaL0QsRUFBS2lHLEVBQVFyQyxLQUFLcUMsRUFBUWxDLEtBRzVCZ0MsRUFGR3RFLEVBQU1xQyxLQUFLOUQsRUFBTWlHLEVBQVFyQyxNQUNuQ3NDLEVBQVdELEVBQVFsQyxLQUFPLENBQUMsR0FDQzZCLE1BQU9NLEVBQVNMLElBQUtLLEVBQVNSLE1BR3hEbkQsRUFBUzBELEVBQVFsQyxLQUdaZ0MsRUFGR3RFLEVBQU00QyxLQUFLckUsRUFBTWlHLEVBQVFsQyxNQUNuQ29DLEVBQVdGLEVBQVFyQyxLQUFPLENBQUMsR0FDQ2dDLE1BQU9PLEVBQVNOLElBQUtNLEVBQVNULE9BRzVEUyxFQUFXRixFQUFRckMsS0FBTyxDQUFDLEVBQzNCc0MsRUFBV0QsRUFBUWxDLEtBQU8sQ0FBQyxFQUNoQmdDLEVBQU8vRixFQUFNbUcsRUFBU1AsTUFBT08sRUFBU04sSUFBS00sRUFBU1QsTUFDbkR4RixLQUFJLFNBQVMwRCxHQUN2QixPQUFPbUMsRUFBT25DLEVBQUtzQyxFQUFTTixNQUFPTSxFQUFTTCxJQUFLSyxFQUFTUixLQUM1RCxJQUNGLENBR0YsQ0E5RGMsR0FvRWRqRSxFQUFNMkUsWUFBYyxTQUFxQkMsRUFBR0osRUFBU0ssR0FDbkQsSUFBSUMsRUFBSUMsRUFDUixHQUFJakUsRUFBUzBELEVBQVFyQyxLQUFNLENBQ3pCLEdBQUlyQixFQUFTMEQsRUFBUWxDLEtBQ25CLE9BQU9zQyxFQUFFSixFQUFRckMsS0FBS3FDLEVBQVFsQyxLQUFPdUMsRUFDdkNMLEVBQVFsQyxJQUFNa0MsRUFBUWxDLEtBQU8sQ0FBQyxFQUM5QmtDLEVBQVFsQyxJQUFJNkIsTUFBUUssRUFBUWxDLElBQUk2QixPQUFTLEVBQ3pDSyxFQUFRbEMsSUFBSThCLElBQU1JLEVBQVFsQyxJQUFJOEIsS0FBT1EsRUFBRSxHQUFHak8sT0FDMUM2TixFQUFRbEMsSUFBSTJCLEtBQU9PLEVBQVFsQyxJQUFJMkIsTUFBUSxFQUN2Q2EsRUFBSzlFLEVBQU13QyxPQUFPZ0MsRUFBUWxDLElBQUk2QixNQUNSM0gsRUFBS0MsSUFBSW1JLEVBQUVqTyxPQUFRNk4sRUFBUWxDLElBQUk4QixLQUMvQkksRUFBUWxDLElBQUkyQixNQUNsQyxJQUFJM0QsRUFBSWtFLEVBQVFyQyxJQUloQixPQUhBMkMsRUFBR3JDLFNBQVEsU0FBU3BDLEVBQUdoSCxHQUNyQnVMLEVBQUV0RSxHQUFHRCxHQUFLd0UsRUFBRXhMLEVBQ2QsSUFDT3VMLENBQ1QsQ0FFQSxHQUFJOUQsRUFBUzBELEVBQVFsQyxLQUFNLENBQ3pCa0MsRUFBUXJDLElBQU1xQyxFQUFRckMsS0FBTyxDQUFDLEVBQzlCcUMsRUFBUXJDLElBQUlnQyxNQUFRSyxFQUFRckMsSUFBSWdDLE9BQVMsRUFDekNLLEVBQVFyQyxJQUFJaUMsSUFBTUksRUFBUXJDLElBQUlpQyxLQUFPUSxFQUFFak8sT0FDdkM2TixFQUFRckMsSUFBSThCLEtBQU9PLEVBQVFyQyxJQUFJOEIsTUFBUSxFQUN2Q2MsRUFBSy9FLEVBQU13QyxPQUFPZ0MsRUFBUXJDLElBQUlnQyxNQUNSM0gsRUFBS0MsSUFBSW1JLEVBQUUsR0FBR2pPLE9BQVE2TixFQUFRckMsSUFBSWlDLEtBQ2xDSSxFQUFRckMsSUFBSThCLE1BQ2xDLElBQUk1RCxFQUFJbUUsRUFBUWxDLElBSWhCLE9BSEF5QyxFQUFHdEMsU0FBUSxTQUFTbkMsRUFBR2EsR0FDckJ5RCxFQUFFdEUsR0FBR0QsR0FBS3dFLEVBQUUxRCxFQUNkLElBQ095RCxDQUNULENBc0JBLE9BcEJJQyxFQUFFLEdBQUdsTyxTQUFXeEYsSUFDbEIwVCxFQUFJLENBQUNBLElBRVBMLEVBQVFyQyxJQUFJZ0MsTUFBUUssRUFBUXJDLElBQUlnQyxPQUFTLEVBQ3pDSyxFQUFRckMsSUFBSWlDLElBQU1JLEVBQVFyQyxJQUFJaUMsS0FBT1EsRUFBRWpPLE9BQ3ZDNk4sRUFBUXJDLElBQUk4QixLQUFPTyxFQUFRckMsSUFBSThCLE1BQVEsRUFDdkNPLEVBQVFsQyxJQUFJNkIsTUFBUUssRUFBUWxDLElBQUk2QixPQUFTLEVBQ3pDSyxFQUFRbEMsSUFBSThCLElBQU1JLEVBQVFsQyxJQUFJOEIsS0FBT1EsRUFBRSxHQUFHak8sT0FDMUM2TixFQUFRbEMsSUFBSTJCLEtBQU9PLEVBQVFsQyxJQUFJMkIsTUFBUSxFQUN2Q2MsRUFBSy9FLEVBQU13QyxPQUFPZ0MsRUFBUXJDLElBQUlnQyxNQUNSM0gsRUFBS0MsSUFBSW1JLEVBQUVqTyxPQUFRNk4sRUFBUXJDLElBQUlpQyxLQUMvQkksRUFBUXJDLElBQUk4QixNQUNsQ2EsRUFBSzlFLEVBQU13QyxPQUFPZ0MsRUFBUWxDLElBQUk2QixNQUNSM0gsRUFBS0MsSUFBSW1JLEVBQUUsR0FBR2pPLE9BQVE2TixFQUFRbEMsSUFBSThCLEtBQ2xDSSxFQUFRbEMsSUFBSTJCLE1BQ2xDYyxFQUFHdEMsU0FBUSxTQUFTbkMsRUFBR2pILEdBQ3JCeUwsRUFBR3JDLFNBQVEsU0FBU3BDLEVBQUdjLEdBQ3JCeUQsRUFBRXRFLEdBQUdELEdBQUt3RSxFQUFFeEwsR0FBRzhILEVBQ2pCLEdBQ0YsSUFDT3lELENBQ1QsRUFLQTVFLEVBQU1nRixTQUFXLFNBQWtCQyxHQUNqQyxJQUFJQyxFQUFNbEYsRUFBTXlELE1BQU13QixFQUFVdE8sT0FBUXNPLEVBQVV0TyxRQUlsRCxPQUhBc08sRUFBVXhDLFNBQVEsU0FBUzBDLEVBQUc5TCxHQUM1QjZMLEVBQUk3TCxHQUFHQSxHQUFLOEwsQ0FDZCxJQUNPRCxDQUNULEVBSUFsRixFQUFNdUUsS0FBTyxTQUFjSyxHQUN6QixPQUFPQSxFQUFFbkcsS0FBSSxTQUFTMEQsR0FDcEIsT0FBSXJCLEVBQVNxQixHQUNKQSxFQUNGQSxFQUFJMUQsS0FBSSxTQUFTMEcsR0FDdEIsT0FBT0EsQ0FDVCxHQUNGLEdBQ0YsRUFRQSxJQUFJQyxFQUFTcEYsRUFBTUUsVUF3Rm5CLE9BckZBa0YsRUFBT3pPLE9BQVMsRUFLaEJ5TyxFQUFPL0csS0FBTzRCLE1BQU1DLFVBQVU3QixLQUM5QitHLEVBQU9DLEtBQU9wRixNQUFNQyxVQUFVbUYsS0FDOUJELEVBQU9FLE9BQVNyRixNQUFNQyxVQUFVb0YsT0FDaENGLEVBQU9qRixNQUFRRixNQUFNQyxVQUFVQyxNQUkvQmlGLEVBQU85RCxRQUFVLFdBQ2YsT0FBT3ZLLEtBQUtKLE9BQVMsRUFBSXdKLEVBQU1TLEtBQUs3SixNQUFRb0osRUFBTVMsS0FBSzdKLE1BQU0sRUFDL0QsRUFJQXFPLEVBQU8zRyxJQUFNLFNBQWFuRSxFQUFNOEksR0FDOUIsT0FBT3BELEVBQU1BLEVBQU12QixJQUFJMUgsS0FBTXVELEVBQU04SSxHQUNyQyxFQUlBZ0MsRUFBTzlCLFVBQVksU0FBbUJoSixFQUFNOEksR0FDMUMsT0FBT3BELEVBQU1BLEVBQU1zRCxVQUFVdk0sS0FBTXVELEVBQU04SSxHQUMzQyxFQUlBZ0MsRUFBTzdCLE1BQVEsU0FBZWpKLEdBRTVCLE9BREEwRixFQUFNdUQsTUFBTXhNLEtBQU11RCxHQUNYdkQsSUFDVCxFQUlBLFNBQVV3TyxHQUNSLElBQUssSUFBSWxNLEVBQUksRUFBR0EsRUFBSWtNLEVBQU01TyxPQUFRMEMsS0FBSyxTQUFVbU0sR0FDL0NKLEVBQU9JLEdBQVksU0FBU2xMLEdBQzFCLElBQ0FtTCxFQURJblQsRUFBT3lFLEtBR1gsT0FBSXVELEdBQ0Z1RCxZQUFXLFdBQ1R2RCxFQUFLc0csS0FBS3RPLEVBQU04UyxFQUFPSSxHQUFVNUUsS0FBS3RPLEdBQ3hDLElBQ095RSxPQUVUME8sRUFBVXpGLEVBQU13RixHQUFVek8sTUFDbkIySixFQUFRK0UsR0FBV3pGLEVBQU15RixHQUFXQSxFQUM3QyxDQUNELENBZHNDLENBY3BDRixFQUFNbE0sR0FDVixDQWhCRCxDQWdCRywrREFBK0RxTSxNQUFNLE1BSXhFLFNBQVVILEdBQ1IsSUFBSyxJQUFJbE0sRUFBSSxFQUFHQSxFQUFJa00sRUFBTTVPLE9BQVEwQyxLQUFLLFNBQVVtTSxHQUMvQ0osRUFBT0ksR0FBWSxTQUFTcEQsRUFBTzlILEdBQ2pDLElBQUloSSxFQUFPeUUsS0FFWCxPQUFJdUQsR0FDRnVELFlBQVcsV0FDVHZELEVBQUtzRyxLQUFLdE8sRUFBTThTLEVBQU9JLEdBQVU1RSxLQUFLdE8sRUFBTThQLEdBQzlDLElBQ09yTCxNQUVGaUosRUFBTUEsRUFBTXdGLEdBQVV6TyxLQUFNcUwsR0FDckMsQ0FDRCxDQVpzQyxDQVlwQ21ELEVBQU1sTSxHQUNWLENBZEQsQ0FjRyxVQUFVcU0sTUFBTSxNQUluQixTQUFVSCxHQUNSLElBQUssSUFBSWxNLEVBQUksRUFBR0EsRUFBSWtNLEVBQU01TyxPQUFRMEMsS0FBSyxTQUFVbU0sR0FDL0NKLEVBQU9JLEdBQVksV0FDakIsT0FBT3hGLEVBQU1BLEVBQU13RixHQUFVN0ssTUFBTSxLQUFNNkMsV0FDM0MsQ0FDRCxDQUpzQyxDQUlwQytILEVBQU1sTSxHQUNWLENBTkQsQ0FNRyxrQ0FBa0NxTSxNQUFNLE1BSXBDMUYsQ0FFUCxDQTVxQlksQ0E0cUJWeEQsTUFDRCxTQUFTd0QsRUFBT3hELEdBRWpCLElBQUlxRSxFQUFhYixFQUFNd0IsTUFBTVgsV0FHN0IsU0FBUzhFLEVBQU85QyxFQUFHM08sR0FBSyxPQUFPMk8sRUFBSTNPLENBQUcsQ0FFdEMsU0FBUzBSLEVBQUtqRixFQUFLbEUsRUFBS0MsR0FDdEIsT0FBT0YsRUFBS0UsSUFBSUQsRUFBS0QsRUFBS0MsSUFBSWtFLEVBQUtqRSxHQUNyQyxDQUlBc0QsRUFBTTZGLElBQU0sU0FBYTFMLEdBR3ZCLElBRkEsSUFBSTBMLEVBQU0sRUFDTnhNLEVBQUljLEVBQUl4RCxTQUNIMEMsR0FBSyxHQUNad00sR0FBTzFMLEVBQUlkLEdBQ2IsT0FBT3dNLENBQ1QsRUFJQTdGLEVBQU04RixRQUFVLFNBQWlCM0wsR0FHL0IsSUFGQSxJQUFJMEwsRUFBTSxFQUNOeE0sRUFBSWMsRUFBSXhELFNBQ0gwQyxHQUFLLEdBQ1p3TSxHQUFPMUwsRUFBSWQsR0FBS2MsRUFBSWQsR0FDdEIsT0FBT3dNLENBQ1QsRUFJQTdGLEVBQU0rRixTQUFXLFNBQWtCNUwsR0FLakMsSUFKQSxJQUdJNkwsRUFIQUMsRUFBT2pHLEVBQU1pRyxLQUFLOUwsR0FDbEIwTCxFQUFNLEVBQ054TSxFQUFJYyxFQUFJeEQsU0FFSDBDLEdBQUssR0FFWndNLElBREFHLEVBQU03TCxFQUFJZCxHQUFLNE0sR0FDRkQsRUFFZixPQUFPSCxDQUNULEVBR0E3RixFQUFNa0csT0FBUyxTQUFnQi9MLEdBRzdCLElBRkEsSUFBSTBMLEVBQU0sRUFDTnhNLEVBQUljLEVBQUl4RCxTQUNIMEMsR0FBSyxHQUNad00sR0FBTzFMLEVBQUlkLEdBQ2IsT0FBT3dNLENBQ1QsRUFHQTdGLEVBQU1tRyxRQUFVLFNBQWlCaE0sR0FHL0IsSUFGQSxJQUFJaU0sRUFBTyxFQUNQL00sRUFBSWMsRUFBSXhELFNBQ0gwQyxHQUFLLEdBQ1orTSxHQUFRak0sRUFBSWQsR0FDZCxPQUFPK00sQ0FDVCxFQUlBcEcsRUFBTXZELElBQU0sU0FBYXRDLEdBR3ZCLElBRkEsSUFBSWtNLEVBQU1sTSxFQUFJLEdBQ1ZkLEVBQUksSUFDQ0EsRUFBSWMsRUFBSXhELFFBQ1h3RCxFQUFJZCxHQUFLZ04sSUFDWEEsRUFBTWxNLEVBQUlkLElBQ2QsT0FBT2dOLENBQ1QsRUFJQXJHLEVBQU10RCxJQUFNLFNBQWF2QyxHQUd2QixJQUZBLElBQUltTSxFQUFPbk0sRUFBSSxHQUNYZCxFQUFJLElBQ0NBLEVBQUljLEVBQUl4RCxRQUNYd0QsRUFBSWQsR0FBS2lOLElBQ1hBLEVBQU9uTSxFQUFJZCxJQUNmLE9BQU9pTixDQUNULEVBSUF0RyxFQUFNdUcsT0FBUyxTQUFnQnBNLEdBRTdCLElBREEsSUFBSXFNLEVBQU8sQ0FBQyxFQUFHQyxFQUFPLEdBQ2RwTixFQUFJLEVBQUdBLEVBQUljLEVBQUl4RCxPQUFRMEMsSUFDeEJtTixFQUFLck0sRUFBSWQsTUFDWm1OLEVBQUtyTSxFQUFJZCxLQUFNLEVBQ2ZvTixFQUFLcEksS0FBS2xFLEVBQUlkLEtBR2xCLE9BQU9vTixDQUNULEVBSUF6RyxFQUFNaUcsS0FBTyxTQUFjOUwsR0FDekIsT0FBTzZGLEVBQU02RixJQUFJMUwsR0FBT0EsRUFBSXhELE1BQzlCLEVBSUFxSixFQUFNMEcsVUFBWSxTQUFtQnZNLEdBQ25DLE9BQU82RixFQUFNK0YsU0FBUzVMLEdBQU9BLEVBQUl4RCxNQUNuQyxFQUlBcUosRUFBTTJHLFFBQVUsU0FBaUJ4TSxHQUMvQixJQUFJeU0sRUFBT3pNLEVBQUlzRSxJQUFJakMsRUFBS25KLEtBQ3BCd1QsRUFBYTdHLEVBQU1pRyxLQUFLVyxHQUM1QixPQUFPcEssRUFBS3NLLElBQUlELEVBQ2xCLEVBSUE3RyxFQUFNK0csT0FBUyxTQUFnQjVNLEdBQzdCLElBQUk2TSxFQUFTN00sRUFBSXhELE9BQ2I4UCxFQUFPdE0sRUFBSWdHLFFBQVFrRixLQUFLTSxHQUU1QixPQUFrQixFQUFUcUIsRUFFTFAsRUFBTU8sRUFBUyxFQUFLLElBRG5CUCxFQUFNTyxFQUFTLEVBQUssR0FBTVAsRUFBTU8sRUFBUyxJQUFPLENBRXZELEVBSUFoSCxFQUFNaUgsT0FBUyxTQUFnQjlNLEdBQzdCLE9BQU82RixFQUFNc0QsVUFBVW5KLEdBQUssU0FBVTBJLEVBQUczTyxHQUFLLE9BQU8yTyxFQUFJM08sQ0FBRyxHQUM5RCxFQUlBOEwsRUFBTWtILFFBQVUsU0FBaUIvTSxHQUMvQixPQUFPNkYsRUFBTXNELFVBQVVuSixHQUFLLFNBQVUwSSxFQUFHM08sR0FBSyxPQUFPMk8sRUFBSTNPLENBQUcsR0FDOUQsRUFJQThMLEVBQU1tSCxLQUFPLFNBQWNoTixHQUN6QixJQUVJZCxFQUZBK04sRUFBUSxHQUNSQyxFQUFTbE4sRUFBSXhELE9BRWpCLElBQUswQyxFQUFJLEVBQUdBLEVBQUlnTyxFQUFRaE8sSUFDdEIrTixFQUFNL0ksS0FBS2xFLEVBQUlkLEdBQUtjLEVBQUlkLEVBQUksSUFDOUIsT0FBTytOLENBQ1QsRUFJQXBILEVBQU1zSCxLQUFPLFNBQVVuTixHQUNyQixJQUFJZCxFQUNBa08sRUFBa0IsR0FDbEJDLEVBQWUsQ0FBQyxFQUNwQixJQUFLbk8sRUFBSSxFQUFHQSxFQUFJYyxFQUFJeEQsT0FBUTBDLElBRXRCbU8sRUFEQUMsRUFBU3ROLEVBQUlkLElBRWZtTyxFQUFhQyxNQUViRCxFQUFhQyxHQUFVLEVBQ3ZCRixFQUFnQmxKLEtBQUtvSixJQUl6QixJQUFJQyxFQUF3QkgsRUFBZ0JsQyxLQUFLTSxHQUM3Q2dDLEVBQWMsQ0FBQyxFQUNmQyxFQUFjLEVBQ2xCLElBQUt2TyxFQUFJLEVBQUdBLEVBQUlxTyxFQUFzQi9RLE9BQVEwQyxJQUFLLENBQ2pELElBQUlvTyxFQUNBSSxFQUFRTCxFQURSQyxFQUFTQyxFQUFzQnJPLElBSS9CaU8sR0FGUU0sR0FDREEsRUFBY0MsRUFBUSxJQUNMLEVBQzVCRixFQUFZRixHQUFVSCxFQUN0Qk0sR0FBZUMsQ0FDakIsQ0FFQSxPQUFPMU4sRUFBSXNFLEtBQUksU0FBVWdKLEdBQ3ZCLE9BQU9FLEVBQVlGLEVBQ3JCLEdBQ0YsRUFNQXpILEVBQU04SCxLQUFPLFNBQWMzTixHQUN6QixJQU1JZCxFQU5BZ08sRUFBU2xOLEVBQUl4RCxPQUNiOFAsRUFBT3RNLEVBQUlnRyxRQUFRa0YsS0FBS00sR0FDeEJrQyxFQUFRLEVBQ1JFLEVBQVcsRUFDWEMsRUFBYyxFQUNkQyxFQUFXLEdBR2YsSUFBSzVPLEVBQUksRUFBR0EsRUFBSWdPLEVBQVFoTyxJQUNsQm9OLEVBQUtwTixLQUFPb04sRUFBS3BOLEVBQUksR0FDdkJ3TyxLQUVJQSxFQUFRRSxHQUNWRSxFQUFXLENBQUN4QixFQUFLcE4sSUFDakIwTyxFQUFXRixFQUNYRyxFQUFjLEdBR1BILElBQVVFLElBQ2pCRSxFQUFTNUosS0FBS29JLEVBQUtwTixJQUNuQjJPLEtBR0ZILEVBQVEsR0FJWixPQUF1QixJQUFoQkcsRUFBb0JDLEVBQVMsR0FBS0EsQ0FDM0MsRUFJQWpJLEVBQU1rSSxNQUFRLFNBQWUvTixHQUMzQixPQUFPNkYsRUFBTXRELElBQUl2QyxHQUFPNkYsRUFBTXZELElBQUl0QyxFQUNwQyxFQUlBNkYsRUFBTW1JLFNBQVcsU0FBa0JoTyxFQUFLaU8sR0FDdEMsT0FBT3BJLEVBQU0rRixTQUFTNUwsSUFBUUEsRUFBSXhELFFBQVV5UixFQUFPLEVBQUksR0FDekQsRUFHQXBJLEVBQU1xSSxlQUFpQixTQUF3QmxPLEdBRzdDLE9BRmVBLEVBQUltTyxRQUFPLFNBQVV6RixFQUFHMEYsR0FBVSxPQUFPMUYsRUFBSTdDLEVBQU0rRixTQUFTd0MsRUFBUyxHQUFHLElBQzNFcE8sRUFBSW1PLFFBQU8sU0FBVXpGLEVBQUcwRixHQUFVLE9BQU8xRixFQUFJMEYsRUFBUTVSLE1BQU8sR0FBRyxHQUNoRHdELEVBQUl4RCxPQUNqQyxFQUdBcUosRUFBTXdJLFVBQVksU0FBVXJPLEdBSTFCLElBSEEsSUFBSThMLEVBQU9qRyxFQUFNaUcsS0FBSzlMLEdBQ2xCNk0sRUFBUzdNLEVBQUl4RCxPQUNiOFIsRUFBTSxJQUFJeEksTUFBTStHLEdBQ1gzTixFQUFJLEVBQUdBLEVBQUkyTixFQUFRM04sSUFDMUJvUCxFQUFJcFAsR0FBS2MsRUFBSWQsR0FBSzRNLEVBRXBCLE9BQU93QyxDQUNULEVBSUF6SSxFQUFNMEksTUFBUSxTQUFldk8sRUFBS2lPLEdBQ2hDLE9BQU81TCxFQUFLbU0sS0FBSzNJLEVBQU1tSSxTQUFTaE8sRUFBS2lPLEdBQ3ZDLEVBR0FwSSxFQUFNNEksWUFBYyxTQUFxQnpPLEdBQ3ZDLE9BQU9xQyxFQUFLbU0sS0FBSzNJLEVBQU1xSSxlQUFlbE8sR0FDeEMsRUFHQTZGLEVBQU02SSxRQUFVLFNBQWlCMU8sR0FHL0IsSUFGQSxJQUFJOEwsRUFBT2pHLEVBQU1pRyxLQUFLOUwsR0FDbEIwSSxFQUFJLEdBQ0N4SixFQUFJYyxFQUFJeEQsT0FBUyxFQUFHMEMsR0FBSyxFQUFHQSxJQUNuQ3dKLEVBQUV4RSxLQUFLN0IsRUFBS3NNLElBQUkzTyxFQUFJZCxHQUFLNE0sSUFFM0IsT0FBT2pHLEVBQU1pRyxLQUFLcEQsRUFDcEIsRUFJQTdDLEVBQU0rSSxPQUFTLFNBQWdCNU8sR0FHN0IsSUFGQSxJQUFJNE0sRUFBUy9HLEVBQU0rRyxPQUFPNU0sR0FDdEIwSSxFQUFJLEdBQ0N4SixFQUFJYyxFQUFJeEQsT0FBUyxFQUFHMEMsR0FBSyxFQUFHQSxJQUNuQ3dKLEVBQUV4RSxLQUFLN0IsRUFBS3NNLElBQUkzTyxFQUFJZCxHQUFLME4sSUFFM0IsT0FBTy9HLEVBQU0rRyxPQUFPbEUsRUFDdEIsRUFJQTdDLEVBQU1nSixTQUFXLFNBQWtCN08sR0FDakMsT0FBTzZGLEVBQU0wSSxNQUFNdk8sR0FBTzZGLEVBQU1pRyxLQUFLOUwsRUFDdkMsRUFJQTZGLEVBQU1pSixVQUFZLFNBQW1COU8sR0FDbkMsSUFBSTZNLEVBQVM3TSxFQUFJeEQsT0FDYjhQLEVBQU90TSxFQUFJZ0csUUFBUWtGLEtBQUtNLEdBQzVCLE1BQU8sQ0FDTGMsRUFBTWpLLEVBQUswTSxNQUFNLEVBQVcsR0FBSyxHQUNqQ3pDLEVBQU1qSyxFQUFLME0sTUFBTSxFQUFXLEdBQUssR0FDakN6QyxFQUFNakssRUFBSzBNLE1BQWlCLEVBQVgsRUFBZSxHQUFLLEdBRXpDLEVBS0FsSixFQUFNbUosVUFBWSxTQUFtQmhQLEVBQUtpUCxFQUFnQkMsRUFBUUMsR0FDaEUsSUFHSWpRLEVBQUdrUSxFQUFNQyxFQUFPbkssRUFBR29LLEVBSG5CQyxFQUFjdlAsRUFBSWdHLFFBQVFrRixLQUFLTSxHQUMvQmdFLEVBQWUsQ0FBQ1AsRUFBZXpTLFFBQy9CMEosRUFBSWxHLEVBQUl4RCxPQVFaLFNBTHNCLElBQVgwUyxJQUNUQSxFQUFTLEVBQUksUUFDTSxJQUFWQyxJQUNUQSxFQUFRLEVBQUksR0FFVGpRLEVBQUksRUFBR0EsRUFBSStQLEVBQWV6UyxPQUFRMEMsSUFHckNtUSxFQUFRbkosR0FGUmtKLEVBQUlILEVBQWUvUCxLQUNmZ1EsRUFBU0UsR0FBSyxFQUFJRixFQUFTQyxJQUUvQmpLLEVBQUk3QyxFQUFLb04sTUFBTWhFLEVBQUs0RCxFQUFPLEVBQUduSixFQUFJLElBQ2xDb0osRUFBUTdELEVBQUs0RCxFQUFRbkssRUFBRyxFQUFHLEdBQzNCc0ssRUFBYXRRLElBQU0sRUFBSW9RLEdBQVNDLEVBQVlySyxFQUFJLEdBQUtvSyxFQUFRQyxFQUFZckssR0FHM0UsT0FBT3NLLENBQ1QsRUFJQTNKLEVBQU02SixXQUFhLFNBQW9CMVAsRUFBS2tGLEVBQUd5SyxHQUM3QyxJQUFJckQsRUFBT3RNLEVBQUlnRyxRQUFRa0YsS0FBS00sR0FDeEJvRSxFQUFZMUssR0FBS29ILEVBQUs5UCxRQUFVbVQsRUFBWSxHQUFLLEtBQU9BLEVBQVksRUFBSSxHQUN4RTFILEVBQVE0SCxTQUFTRCxHQUNqQkUsRUFBT0YsRUFBWTNILEVBQ3ZCLE9BQUlBLEVBQVEsRUFBSXFFLEVBQUs5UCxPQUNaOFAsRUFBS3JFLEVBQVEsR0FBSzZILEdBQVF4RCxFQUFLckUsR0FBU3FFLEVBQUtyRSxFQUFRLElBRXJEcUUsRUFBS3JFLEVBQVEsRUFFeEIsRUFLQXBDLEVBQU1rSyxrQkFBb0IsU0FBMkIvUCxFQUFLZ1EsRUFBT0MsR0FDL0QsSUFHSUMsRUFBT2hSLEVBSFBpUixFQUFVLEVBQ1ZsUixFQUFNZSxFQUFJeEQsT0FDVjRULEdBQVMsRUFNYixJQUhhLFdBQVRILElBQ0ZHLEdBQVMsR0FFTmxSLEVBQUksRUFBR0EsRUFBSUQsRUFBS0MsSUFDbkJnUixFQUFRbFEsRUFBSWQsSUFDUGtSLEdBQVVGLEVBQVFGLElBQ2pCSSxHQUFVRixHQUFTRixJQUN2QkcsSUFJSixPQUFPQSxFQUFVbFIsQ0FDbkIsRUFJQTRHLEVBQU13SyxVQUFZLFNBQW1CclEsRUFBS3NRLEdBQ3hDQSxFQUFTQSxHQUFVLEVBQ25CLElBSUlwUixFQUpBcVIsRUFBUTFLLEVBQU12RCxJQUFJdEMsR0FDbEJ3USxHQUFZM0ssRUFBTXRELElBQUl2QyxHQUFPdVEsR0FBU0QsRUFDdENyUixFQUFNZSxFQUFJeEQsT0FDVmlVLEVBQU8sR0FHWCxJQUFLdlIsRUFBSSxFQUFHQSxFQUFJb1IsRUFBUXBSLElBQ3RCdVIsRUFBS3ZSLEdBQUssRUFDWixJQUFLQSxFQUFJLEVBQUdBLEVBQUlELEVBQUtDLElBQ25CdVIsRUFBS3BPLEVBQUtDLElBQUlELEVBQUtvTixPQUFRelAsRUFBSWQsR0FBS3FSLEdBQVNDLEdBQVlGLEVBQVMsS0FBTyxFQUUzRSxPQUFPRyxDQUNULEVBSUE1SyxFQUFNNkssV0FBYSxTQUFvQkMsRUFBTUMsR0FDM0MsSUFJSTFSLEVBSkFVLEVBQUlpRyxFQUFNaUcsS0FBSzZFLEdBQ2ZFLEVBQUloTCxFQUFNaUcsS0FBSzhFLEdBQ2ZFLEVBQVVILEVBQUtuVSxPQUNmdVUsRUFBUyxJQUFJakwsTUFBTWdMLEdBR3ZCLElBQUs1UixFQUFJLEVBQUdBLEVBQUk0UixFQUFTNVIsSUFDdkI2UixFQUFPN1IsSUFBTXlSLEVBQUt6UixHQUFLVSxJQUFNZ1IsRUFBSzFSLEdBQUsyUixHQUV6QyxPQUFPaEwsRUFBTTZGLElBQUlxRixJQUFXRCxFQUFVLEVBQ3hDLEVBSUFqTCxFQUFNbUwsVUFBWSxTQUFtQkwsRUFBTUMsR0FDekMsT0FBTy9LLEVBQU02SyxXQUFXQyxFQUFNQyxHQUMxQi9LLEVBQU0wSSxNQUFNb0MsRUFBTSxHQUNsQjlLLEVBQU0wSSxNQUFNcUMsRUFBTSxFQUN4QixFQUdBL0ssRUFBTW9MLGNBQWlCLFNBQVVOLEVBQU1DLEdBSXJDLE9BSEFELEVBQU85SyxFQUFNc0gsS0FBS3dELEdBQ2xCQyxFQUFPL0ssRUFBTXNILEtBQUt5RCxHQUVYL0ssRUFBTW1MLFVBQVVMLEVBQU1DLEVBQy9CLEVBSUEvSyxFQUFNcUwsV0FBYSxTQUFvQmxSLEVBQUtrRyxHQU0xQyxJQUxBLElBQUlpTCxFQUFLdEwsRUFBTWlHLEtBQUs5TCxHQUNoQm9SLEVBQVF2TCxFQUFNMEksTUFBTXZPLEdBQ3BCZixFQUFNZSxFQUFJeEQsT0FDVjZVLEVBQVUsRUFFTG5TLEVBQUksRUFBR0EsRUFBSUQsRUFBS0MsSUFDdkJtUyxHQUFXaFAsRUFBS2dFLEtBQUtyRyxFQUFJZCxHQUFLaVMsR0FBTUMsRUFBT2xMLEdBRTdDLE9BQU9tTCxFQUFVclIsRUFBSXhELE1BQ3ZCLEVBR0FxSixFQUFNeUwsU0FBVyxTQUFrQnRSLEdBQ2pDLE9BQU82RixFQUFNcUwsV0FBV2xSLEVBQUssRUFDL0IsRUFHQTZGLEVBQU0wTCxTQUFXLFNBQWtCdlIsR0FDakMsT0FBTzZGLEVBQU1xTCxXQUFXbFIsRUFBSyxHQUFLLENBQ3BDLEVBR0EsSUFBSWlMLEVBQVNwRixFQUFNRSxXQVFuQixTQUFVcUYsR0FDUixJQUFLLElBQUlsTSxFQUFJLEVBQUdBLEVBQUlrTSxFQUFNNU8sT0FBUTBDLEtBQUssU0FBVW1NLEdBRy9DSixFQUFPSSxHQUFZLFNBQVNtRyxFQUFVclIsR0FDcEMsSUFBSUgsRUFBTSxHQUNOZCxFQUFJLEVBQ0p1UyxFQUFVN1UsS0FPZCxHQUxJOEosRUFBVzhLLEtBQ2JyUixFQUFPcVIsRUFDUEEsR0FBVyxHQUdUclIsRUFJRixPQUhBdUQsWUFBVyxXQUNUdkQsRUFBS3NHLEtBQUtnTCxFQUFTeEcsRUFBT0ksR0FBVTVFLEtBQUtnTCxFQUFTRCxHQUNwRCxJQUNPNVUsS0FHVCxHQUFJQSxLQUFLSixPQUFTLEVBQUcsQ0FFbkIsSUFEQWlWLEdBQXVCLElBQWJELEVBQW9CNVUsS0FBT0EsS0FBS21NLFlBQ25DN0osRUFBSXVTLEVBQVFqVixPQUFRMEMsSUFDekJjLEVBQUlkLEdBQUsyRyxFQUFNd0YsR0FBVW9HLEVBQVF2UyxJQUNuQyxPQUFPYyxDQUNULENBRUEsT0FBTzZGLEVBQU13RixHQUFVek8sS0FBSyxHQUFJNFUsRUFDbEMsQ0FDRCxDQTdCc0MsQ0E2QnBDcEcsRUFBTWxNLEdBQ1YsQ0EvQkQsQ0ErQkcsaUJBQW1CcU0sTUFBTSxNQUk1QixTQUFVSCxHQUNSLElBQUssSUFBSWxNLEVBQUksRUFBR0EsRUFBSWtNLEVBQU01TyxPQUFRMEMsS0FBSyxTQUFVbU0sR0FHL0NKLEVBQU9JLEdBQVksU0FBU21HLEVBQVVyUixHQUNwQyxJQUFJSCxFQUFNLEdBQ05kLEVBQUksRUFDSnVTLEVBQVU3VSxLQU9kLEdBTEk4SixFQUFXOEssS0FDYnJSLEVBQU9xUixFQUNQQSxHQUFXLEdBR1RyUixFQUlGLE9BSEF1RCxZQUFXLFdBQ1R2RCxFQUFLc0csS0FBS2dMLEVBQVN4RyxFQUFPSSxHQUFVNUUsS0FBS2dMLEVBQVNELEdBQ3BELElBQ081VSxLQUdULEdBQUlBLEtBQUtKLE9BQVMsRUFBRyxDQUduQixJQUZpQixXQUFiNk8sSUFDRm9HLEdBQXVCLElBQWJELEVBQW9CNVUsS0FBT0EsS0FBS21NLGFBQ3JDN0osRUFBSXVTLEVBQVFqVixPQUFRMEMsSUFDekJjLEVBQUlkLEdBQUsyRyxFQUFNd0YsR0FBVW9HLEVBQVF2UyxJQUNuQyxPQUFvQixJQUFic1MsRUFDRDNMLEVBQU13RixHQUFVeEYsRUFBTXdCLE1BQU1DLFNBQVN0SCxJQUNyQ0EsQ0FDUixDQUVBLE9BQU82RixFQUFNd0YsR0FBVXpPLEtBQUssR0FBSTRVLEVBQ2xDLENBQ0QsQ0FoQ3NDLENBZ0NwQ3BHLEVBQU1sTSxHQUNWLENBbENELENBa0NHLCtMQUUwRHFNLE1BQU0sTUFLbkUsU0FBVUgsR0FDUixJQUFLLElBQUlsTSxFQUFJLEVBQUdBLEVBQUlrTSxFQUFNNU8sT0FBUTBDLEtBQUssU0FBVW1NLEdBQy9DSixFQUFPSSxHQUFZLFdBQ2pCLElBSUlxRyxFQUpBMVIsRUFBTSxHQUNOZCxFQUFJLEVBQ0p1UyxFQUFVN1UsS0FDVmdDLEVBQU9rSCxNQUFNQyxVQUFVQyxNQUFNUyxLQUFLcEQsV0FLdEMsR0FBSXFELEVBQVc5SCxFQUFLQSxFQUFLcEMsT0FBUyxJQUFLLENBQ3JDa1YsRUFBbUI5UyxFQUFLQSxFQUFLcEMsT0FBUyxHQUN0QyxJQUFJbVYsRUFBYS9TLEVBQUtvSCxNQUFNLEVBQUdwSCxFQUFLcEMsT0FBUyxHQU03QyxPQUpBa0gsWUFBVyxXQUNUZ08sRUFBaUJqTCxLQUFLZ0wsRUFDQXhHLEVBQU9JLEdBQVU3SyxNQUFNaVIsRUFBU0UsR0FDeEQsSUFDTy9VLElBR1QsQ0FDRThVLE9BQW1CMWEsRUFDbkIsSUFBSTRhLEVBQWtCLFNBQXlCQyxHQUM3QyxPQUFPaE0sRUFBTXdGLEdBQVU3SyxNQUFNaVIsRUFBUyxDQUFDSSxHQUFRbk4sT0FBTzlGLEdBQ3hELEVBSUYsR0FBSWhDLEtBQUtKLE9BQVMsRUFBRyxDQUVuQixJQURBaVYsRUFBVUEsRUFBUTFJLFlBQ1g3SixFQUFJdVMsRUFBUWpWLE9BQVEwQyxJQUN6QmMsRUFBSWQsR0FBSzBTLEVBQWdCSCxFQUFRdlMsSUFDbkMsT0FBT2MsQ0FDVCxDQUdBLE9BQU80UixFQUFnQmhWLEtBQUssR0FDOUIsQ0FDRCxDQXZDc0MsQ0F1Q3BDd08sRUFBTWxNLEdBQ1YsQ0F6Q0QsQ0F5Q0csOEJBQThCcU0sTUFBTSxLQUV2QyxDQXJqQkEsQ0FxakJFMUYsRUFBT3hELE1BRVIsU0FBU3dELEVBQU94RCxHQUdqQndELEVBQU1pTSxRQUFVLFNBQWlCOVAsR0FDL0IsSUFNSStQLEVBQUlDLEVBQUduRyxFQU5QN0UsRUFBSSxFQUNKaUwsRUFBTSxDQUNSLG1CQUFvQixrQkFBbUIsbUJBQ3RDLGtCQUFtQixxQkFBd0IsbUJBRTFDQyxFQUFNLGtCQUlWLElBRkFyRyxHQUFPbUcsRUFBSUQsRUFBSy9QLEdBQUssSUFDckI2SixJQUFRa0csRUFBSyxJQUFPMVAsRUFBS25KLElBQUkyUyxHQUN0QjdFLEVBQUksRUFBR0EsSUFDWmtMLEdBQU9ELEVBQUlqTCxLQUFPZ0wsRUFDcEIsT0FBTzNQLEVBQUtuSixJQUFJLG1CQUFxQmdaLEVBQU1ILEdBQU1sRyxDQUNuRCxFQU9BaEcsRUFBTXNNLE9BQVMsU0FBZ0JuUSxHQUM3QixJQUFJb1EsRUFBSUMsRUFBSUMsRUFBSUMsRUFBSUMsRUFDaEJ0TixFQUFHZ0IsRUFFSHdDLEVBQUksQ0FBQyxvQkFBd0Isb0JBQ3pCLHNCQUF3QixxQkFDeEIsc0JBQXdCLG9CQUN4QixvQkFBd0IsbUJBQ3hCLG1CQUF3QixpQkFHaEMsR0FGQTBKLEVBQUtwUSxFQUNMa0UsRUFBSSxFQUNNLEdBQUxsRSxHQUFtQixHQUFMQSxFQUNmLE9BQU8sRUFTWCxJQVBJQSxHQUFLLElBRUxvUSxFQUFLcFEsR0FETGtFLEVBQUk3RCxFQUFLb04sTUFBTSxFQUFJek4sS0FHdkJxUSxFQUFLLEdBQU9ELEVBQUtBLEdBQ2pCRSxFQUFLLEVBQUlqUSxFQUFLb1EsR0FDZEQsRUFBTTlKLEVBQUUsR0FDSHhELEVBQUksRUFBR0EsR0FBSyxFQUFHQSxJQUNoQnNOLEdBQU9ILEVBQ1BHLEdBQU85SixFQUFFeEQsR0FHYixHQURBcU4sRUFBS0MsRUFBTUosRUFBSyxHQUFNL1AsRUFBS25KLElBQUlvWixJQUFPRixFQUFLLElBQU8vUCxFQUFLbkosSUFBSWtaLEdBQU1BLEVBQzdEcFEsR0FBSyxFQUNMLElBQUtrRCxFQUFJLEVBQUdBLEdBQUtnQixFQUFHaEIsSUFDaEJxTixHQUFNbFEsRUFBS25KLElBQUlrWixFQUFLLEdBQ3BCQSxHQUFNLEVBR2QsT0FBT0csQ0FDVCxFQUdBMU0sRUFBTTZNLFFBQVUsU0FBaUIxUSxHQUMvQixJQVlJOUMsRUFBR3lULEVBQUdDLEVBQUkvSixFQVpWdUcsRUFBSSxFQUFFLGtCQUFtQixtQkFBb0IsbUJBQ3hDLGtCQUFtQixtQkFBb0Isb0JBQ3RDLG1CQUFvQixtQkFFMUJ5RCxFQUFJLEVBQUUsaUJBQWtCLG9CQUFxQixvQkFDdkMsa0JBQW1CLGtCQUFvQixtQkFDdkMsbUJBQW9CLG1CQUMxQkMsR0FBTyxFQUNQNU0sRUFBSSxFQUNKNk0sRUFBTyxFQUNQQyxFQUFPLEVBQ1BoQixFQUFJaFEsRUFFUixHQUFJQSxFQUFJLGtCQUNOLE9BQU9pUixJQUVULEdBQUlqQixHQUFLLEVBQUcsQ0FFVixLQURBbkosRUFBTW1KLEVBQUksRUFBSSxRQUtaLE9BQU9pQixJQUhQSCxHQUFjLEVBQUpkLEdBQWMsRUFBTCxHQUFVM1AsRUFBS29RLEdBQUtwUSxFQUFLNlEsSUFBSTdRLEVBQUtvUSxHQUFLNUosR0FDMURtSixFQUFJLEVBQUlBLENBSVosQ0FPQSxJQU5BWSxFQUFLWixFQUVIVyxFQURFWCxFQUFJLEVBQ0ZBLEtBRUNBLEdBQUs5TCxHQUFTLEVBQUo4TCxHQUFTLEdBQUssRUFFMUI5UyxFQUFJLEVBQUdBLEVBQUksSUFBS0EsRUFDbkI4VCxHQUFRQSxFQUFPNUQsRUFBRWxRLElBQU15VCxFQUN2QkksRUFBT0EsRUFBT0osRUFBSUUsRUFBRTNULEdBR3RCLEdBREEySixFQUFNbUssRUFBT0QsRUFBTyxFQUNoQkgsRUFBS1osRUFDUG5KLEdBQU8rSixPQUNGLEdBQUlBLEVBQUtaLEVBQ2QsSUFBSzlTLEVBQUksRUFBR0EsRUFBSWdILElBQUtoSCxFQUNuQjJKLEdBQU9tSixFQUNQQSxJQU1KLE9BSEljLElBQ0ZqSyxFQUFNaUssRUFBT2pLLEdBRVJBLENBQ1QsRUFLQWhELEVBQU1zTixPQUFTLFNBQWdCekssRUFBRzFHLEdBQ2hDLE9BQU82RCxFQUFNdU4sWUFBWTFLLEVBQUcxRyxHQUFLNkQsRUFBTTZNLFFBQVFoSyxFQUNqRCxFQUlBN0MsRUFBTXVOLFlBQWMsU0FBcUIxSyxFQUFHMUcsR0FDMUMsSUFXSXFSLEVBWEFDLEVBQU16TixFQUFNaU0sUUFBUXBKLEdBQ3BCNkssRUFBSzdLLEVBQ0xnRCxFQUFNLEVBQUloRCxFQUNWOEssRUFBTTlILEVBQ04zUixFQUFJaUksRUFBSSxFQUFJMEcsRUFDWnZKLEVBQUksRUFBSSxNQUNSc1UsRUFBSSxFQUFJMVosRUFDUjJaLEVBQUlELEVBQ0p2VSxFQUFJLEVBRUp5VSxLQUE0QyxJQUFqQ3RSLEVBQUtuSixJQUFLd1AsR0FBSyxFQUFLQSxFQUFJLEVBQUlBLEdBQWUsR0FBSkEsRUFBVSxJQUdoRSxHQUFJMUcsRUFBSSxHQUFLMEcsR0FBSyxFQUNoQixPQUFPa0wsSUFDRixHQUFJNVIsRUFBSTBHLEVBQUksRUFBRyxDQUNwQixLQUFPeEosR0FBS3lVLEVBQU96VSxJQUNqQndNLEdBQU84SCxHQUFPeFIsSUFBTXVSLEVBRXRCLE9BQVE3SCxFQUFNckosRUFBS3NLLEtBQUszSyxFQUFJMEcsRUFBSXJHLEVBQUtuSixJQUFJOEksR0FBSyxFQUNoRCxDQUVBLEtBQU85QyxHQUFLeVUsRUFBT3pVLElBTWpCd1UsSUFEQUQsRUFBSSxHQUZKQSxHQUZBSixHQUFNblUsR0FBS0EsRUFBSXdKLElBRU4rSyxHQURUMVosR0FBSyxNQUVMb0YsRUFBSXBGLEVBQUlzWixFQUFLbFUsR0FLZixPQUFRLEVBQUl1VSxFQUFJclIsRUFBS3NLLEtBQUszSyxFQUFJMEcsRUFBSXJHLEVBQUtuSixJQUFJOEksR0FBSyxFQUNsRCxFQUdBNkQsRUFBTWdPLFlBQWMsU0FBcUIzTixHQUN2QyxPQUFPQSxFQUFJLEVBQUkwTixJQUFNL04sRUFBTWlNLFFBQVE1TCxFQUFJLEVBQ3pDLEVBR0FMLEVBQU1pTyxVQUFZLFNBQW1CNU4sR0FDbkMsT0FBT0EsRUFBSSxFQUFJME4sSUFBTS9OLEVBQU02TSxRQUFReE0sRUFBSSxFQUN6QyxFQUdBTCxFQUFNa08sWUFBYyxTQUFxQjdOLEVBQUdDLEdBRTFDLE9BQVFELEVBQUksS0FBT0MsRUFBSSxJQUNqQjlELEVBQUtzSyxJQUFJOUcsRUFBTW1PLGNBQWM5TixFQUFHQyxJQUMvQk4sRUFBTWlPLFVBQVU1TixHQUFLTCxFQUFNaU8sVUFBVTNOLEdBQU1OLEVBQU1pTyxVQUFVNU4sRUFBSUMsRUFDeEUsRUFHQU4sRUFBTW1PLGNBQWdCLFNBQXVCOU4sRUFBR0MsR0FDOUMsT0FBT04sRUFBTWdPLFlBQVkzTixHQUFLTCxFQUFNZ08sWUFBWTFOLEdBQUtOLEVBQU1nTyxZQUFZM04sRUFBSUMsRUFDN0UsRUFJQU4sRUFBTW9PLFlBQWMsU0FBcUIvTixFQUFHQyxHQUMxQyxPQUFPTixFQUFNaU8sVUFBVTVOLEdBQUtMLEVBQU1pTyxVQUFVNU4sRUFBSUMsRUFDbEQsRUFJQU4sRUFBTXFPLE9BQVMsU0FBZ0JsUyxFQUFHZ1EsR0FFaEMsS0FBSWhRLEdBQUssR0FBS2dRLEdBQUssR0FHbkIsT0FBUWhRLEVBQUlnUSxFQUFJLElBQ1YzUCxFQUFLc0ssSUFBSTlHLEVBQU1zTyxPQUFPblMsRUFBR2dRLElBQ3pCbk0sRUFBTTZNLFFBQVExUSxHQUFLNkQsRUFBTTZNLFFBQVFWLEdBQUtuTSxFQUFNNk0sUUFBUTFRLEVBQUlnUSxFQUNoRSxFQUlBbk0sRUFBTXNPLE9BQVMsU0FBZ0JuUyxFQUFHZ1EsR0FDaEMsT0FBT25NLEVBQU1pTSxRQUFROVAsR0FBSzZELEVBQU1pTSxRQUFRRSxHQUFLbk0sRUFBTWlNLFFBQVE5UCxFQUFJZ1EsRUFDakUsRUFLQW5NLEVBQU11TyxPQUFTLFNBQWdCcFMsRUFBRzBHLEVBQUczTyxHQUNuQyxJQU9Jc2EsRUFBSUMsRUFBSWQsRUFBS0UsRUFQYmEsRUFBUSxNQUNScE8sRUFBSSxFQUNKcU8sRUFBTTlMLEVBQUkzTyxFQUNWMGEsRUFBTS9MLEVBQUksRUFDVmdNLEVBQU1oTSxFQUFJLEVBQ1Z2SixFQUFJLEVBQ0pzVSxFQUFJLEVBQUllLEVBQU14UyxFQUFJeVMsRUFTdEIsSUFMSXBTLEVBQUtzTSxJQUFJOEUsR0FBS2MsSUFDaEJkLEVBQUljLEdBRU5iLEVBREFELEVBQUksRUFBSUEsRUFHRHROLEdBQUssTUFJVnNOLEVBQUksR0FGSmEsRUFBS25PLEdBQUtwTSxFQUFJb00sR0FBS25FLElBQU0wUyxHQUR6QkwsRUFBSyxFQUFJbE8sS0FDNkJ1QyxFQUFJMkwsS0FFN0JaLEVBQ1RwUixFQUFLc00sSUFBSThFLEdBQUtjLElBQ2hCZCxFQUFJYyxHQUNOcFYsRUFBSSxFQUFJbVYsRUFBS25WLEVBQ1RrRCxFQUFLc00sSUFBSXhQLEdBQUtvVixJQUNoQnBWLEVBQUlvVixHQUVOYixJQURBRCxFQUFJLEVBQUlBLEdBQ0N0VSxFQUdUc1UsRUFBSSxHQUZKYSxJQUFPNUwsRUFBSXZDLElBQU1xTyxFQUFNck8sR0FBS25FLElBQU0wRyxFQUFJMkwsSUFBT0ksRUFBTUosS0FFdENaLEVBQ1RwUixFQUFLc00sSUFBSThFLEdBQUtjLElBQ2hCZCxFQUFJYyxHQUNOcFYsRUFBSSxFQUFJbVYsRUFBS25WLEVBQ1RrRCxFQUFLc00sSUFBSXhQLEdBQUtvVixJQUNoQnBWLEVBQUlvVixHQUdOYixHQURBRixHQURBQyxFQUFJLEVBQUlBLEdBQ0V0VSxJQUVOa0QsRUFBS3NNLElBQUk2RSxFQUFNLEdBQU8sT0F2QlhyTixLQTJCakIsT0FBT3VOLENBQ1QsRUFJQTdOLEVBQU04TyxVQUFZLFNBQW1CdkYsRUFBRzFHLEdBQ3RDLElBSUkxRyxFQUFRZ0osRUFBR3BMLEVBQUdnVixFQUFJQyxFQUFNQyxFQUp4QjlOLEVBQUksRUFDSitOLEVBQUtyTSxFQUFJLEVBRVRzTSxFQUFNblAsRUFBTWlNLFFBQVFwSixHQUd4QixHQUFJMEcsR0FBSyxFQUNQLE9BQU8vTSxFQUFLRSxJQUFJLElBQUttRyxFQUFJLElBQU1yRyxFQUFLbU0sS0FBSzlGLElBQzNDLEdBQUkwRyxHQUFLLEVBQ1AsT0FBTyxFQW1CVCxJQWxCSTFHLEVBQUksR0FDTm1NLEVBQU94UyxFQUFLbkosSUFBSTZiLEdBQ2hCRCxFQUFPelMsRUFBS3NLLElBQUlvSSxHQUFNRixFQUFPLEdBQUtHLEdBQ2xDSixFQUFNeEYsRUFBSSxHQUFPQSxFQUFJLEVBQUlBLEVBRXpCcE4sR0FBSyxRQUFjLFFBRG5CZ0osRUFBSTNJLEVBQUttTSxNQUFNLEVBQUluTSxFQUFLbkosSUFBSTBiLE9BQ0csRUFBSTVKLEdBQUssT0FBYyxPQUFKQSxJQUFnQkEsRUFDOURvRSxFQUFJLEtBQ05wTixHQUFLQSxHQUNQQSxFQUFJSyxFQUFLRSxJQUFJLEtBQ0FtRyxFQUFJckcsRUFBS2dFLElBQUksRUFBSSxHQUFLLEVBQUlxQyxHQUFLMUcsR0FBSyxFQUFJSyxFQUFLbU0sS0FBSzlGLElBQUssS0FJbEUxRyxFQURFb04sR0FESnBFLEVBQUksRUFBSXRDLEdBQUssS0FBWSxJQUFKQSxJQUVmckcsRUFBS2dFLElBQUkrSSxFQUFJcEUsRUFBRyxFQUFJdEMsR0FFcEIsRUFBSXJHLEVBQUtuSixJQUFJLEdBQUtrVyxFQUFJcEUsSUFBTSxFQUFJQSxJQUdsQ2hFLEVBQUksR0FBSUEsSUFBSyxDQUNqQixHQUFJaEYsR0FBSyxFQUNQLE9BQU8sRUFVVCxJQUhBQSxHQUFNZ0osR0FETnBMLEdBTE1pRyxFQUFNdU4sWUFBWTFLLEVBQUcxRyxHQUFLb04sSUFFOUJwRSxFQURFdEMsRUFBSSxFQUNGb00sRUFBT3pTLEVBQUtzSyxNQUFNM0ssRUFBSStTLEdBQU1BLEdBQU0xUyxFQUFLbkosSUFBSThJLEdBQUs2UyxJQUVoRHhTLEVBQUtzSyxLQUFLM0ssRUFBSStTLEVBQUsxUyxFQUFLbkosSUFBSThJLEdBQUtnVCxNQUV4QixFQUFJLEdBQU0zUyxFQUFLQyxJQUFJLEVBQUcxQyxJQUFNOEksRUFBSSxHQUFLMUcsRUFBSSxPQUMvQyxJQUNQQSxFQUFJLElBQU9BLEVBQUlnSixJQUNiM0ksRUFBS3NNLElBQUkzRCxHQXRDTCxLQXNDZ0JoSixFQUN0QixLQUNKLENBRUEsT0FBT0EsQ0FDVCxFQUlBNkQsRUFBTW9QLElBQU0sU0FBYWpULEdBQ3ZCLElBY0lnSixFQUFHa0ssRUFBSXJKLEVBQUtoRCxFQWRab0osRUFBTSxFQUFFLG1CQUFvQixrQkFBdUIscUJBQzNDLG9CQUF1QixvQkFBcUIsb0JBQzdDLG9CQUFxQixvQkFBcUIsa0JBQzFDLGlCQUFtQixpQkFBa0IsZ0JBQ3JDLGVBQWdCLGdCQUFpQixnQkFDaEMsZUFBZ0IsYUFBZSxhQUMvQixZQUFjLFdBQWEsWUFDM0IsV0FBYSxRQUFVLFVBQ3ZCLFVBQVksT0FBUyxTQUNyQixRQUNSakwsRUFBSWlMLEVBQUl6VixPQUFTLEVBQ2pCMlksR0FBUSxFQUNSMUIsRUFBSSxFQUNKMkIsRUFBSyxFQVdULElBUklwVCxFQUFJLElBQ05BLEdBQUtBLEVBQ0xtVCxHQUFRLEdBSVZELEVBQUssR0FETGxLLEVBQUksR0FBSyxFQUFJaEosSUFDQSxFQUVQZ0YsRUFBSSxFQUFHQSxJQUNYNkUsRUFBTTRILEVBQ05BLEVBQUl5QixFQUFLekIsRUFBSTJCLEVBQUtuRCxFQUFJakwsR0FDdEJvTyxFQUFLdkosRUFJUCxPQURBaEQsRUFBTW1DLEVBQUkzSSxFQUFLc0ssS0FBSzNLLEVBQUlBLEVBQUksSUFBT2lRLEVBQUksR0FBS2lELEVBQUt6QixHQUFLMkIsR0FDL0NELEVBQVF0TSxFQUFNLEVBQUksRUFBSUEsQ0FDL0IsRUFJQWhELEVBQU13UCxLQUFPLFNBQWNyVCxHQUN6QixPQUFPLEVBQUk2RCxFQUFNb1AsSUFBSWpULEVBQ3ZCLEVBSUE2RCxFQUFNeVAsUUFBVSxTQUFpQmxHLEdBQy9CLElBQ0lwTixFQUFHMUksRUFBSzBSLEVBQUc0SixFQURYNU4sRUFBSSxFQUVSLEdBQUlvSSxHQUFLLEVBQ1AsT0FBUSxJQUNWLEdBQUlBLEdBQUssRUFDUCxPQUFPLElBS1QsSUFKQXdGLEVBQU14RixFQUFJLEVBQUtBLEVBQUksRUFBSUEsRUFFdkJwTixHQUFLLFNBQVksUUFBYyxRQUQvQmdKLEVBQUkzSSxFQUFLbU0sTUFBTSxFQUFJbk0sRUFBS25KLElBQUkwYixFQUFLLE9BRWhCLEVBQUk1SixHQUFLLE9BQWMsT0FBSkEsSUFBZ0JBLEdBQzdDaEUsRUFBSSxFQUFHQSxJQUVaaEYsSUFEQTFJLEVBQU11TSxFQUFNd1AsS0FBS3JULEdBQUs0UyxJQUNWLG1CQUFzQnZTLEVBQUtzSyxLQUFLM0ssRUFBSUEsR0FBS0EsRUFBSTFJLEdBRTNELE9BQVE4VixFQUFJLEVBQUtwTixHQUFLQSxDQUN4QixFQUlBNkQsRUFBTTBQLFNBQVcsU0FBa0JuRyxFQUFHMUcsRUFBRzNPLEdBQ3ZDLElBSUl5YixFQUFLQyxFQUFLYixFQUFJNUosRUFBR3BMLEVBQVFvQyxFQUFHMFQsRUFBSWhDLEVBQUdpQyxFQUFHYixFQUh0Q0MsRUFBS3JNLEVBQUksRUFDVGtOLEVBQUs3YixFQUFJLEVBQ1RpTixFQUFJLEVBRVIsR0FBSW9JLEdBQUssRUFDUCxPQUFPLEVBQ1QsR0FBSUEsR0FBSyxFQUNQLE9BQU8sRUF3QlQsSUF2QkkxRyxHQUFLLEdBQUszTyxHQUFLLEdBQ2pCNmEsRUFBTXhGLEVBQUksR0FBT0EsRUFBSSxFQUFJQSxFQUV6QnBOLEdBQUssUUFBYyxRQURuQmdKLEVBQUkzSSxFQUFLbU0sTUFBTSxFQUFJbk0sRUFBS25KLElBQUkwYixPQUNHLEVBQUk1SixHQUFJLE9BQWMsT0FBSkEsSUFBZ0JBLEVBQzdEb0UsRUFBSSxLQUNOcE4sR0FBS0EsR0FDUDBULEdBQU0xVCxFQUFJQSxFQUFJLEdBQUssRUFDbkIwUixFQUFJLEdBQUssR0FBSyxFQUFJaEwsRUFBSSxHQUFNLEdBQUssRUFBSTNPLEVBQUksSUFDekM0YixFQUFLM1QsRUFBSUssRUFBS21NLEtBQUtrSCxFQUFLaEMsR0FBS0EsR0FBTSxHQUFLLEVBQUkzWixFQUFJLEdBQUssR0FBSyxFQUFJMk8sRUFBSSxLQUM3RGdOLEVBQUssRUFBSSxFQUFJLEdBQUssRUFBSWhDLElBQzNCMVIsRUFBSTBHLEdBQUtBLEVBQUkzTyxFQUFJc0ksRUFBS3NLLElBQUksRUFBSWdKLE1BRTlCSCxFQUFNblQsRUFBS25KLElBQUl3UCxHQUFLQSxFQUFJM08sSUFDeEIwYixFQUFNcFQsRUFBS25KLElBQUlhLEdBQUsyTyxFQUFJM08sSUFLdEJpSSxFQURFb04sR0FISnBFLEVBQUkzSSxFQUFLc0ssSUFBSWpFLEVBQUk4TSxHQUFPOU0sSUFFeEJpTixFQUFJM0ssR0FESnBMLEVBQUl5QyxFQUFLc0ssSUFBSTVTLEVBQUkwYixHQUFPMWIsSUFHbEJzSSxFQUFLZ0UsSUFBSXFDLEVBQUlpTixFQUFJdkcsRUFBRyxFQUFJMUcsR0FFeEIsRUFBSXJHLEVBQUtnRSxJQUFJdE0sRUFBSTRiLEdBQUssRUFBSXZHLEdBQUksRUFBSXJWLElBRTFDK2EsR0FBUWpQLEVBQU1pTSxRQUFRcEosR0FBSzdDLEVBQU1pTSxRQUFRL1gsR0FBSzhMLEVBQU1pTSxRQUFRcEosRUFBSTNPLEdBQzFEaU4sRUFBSSxHQUFJQSxJQUFLLENBQ2pCLEdBQVUsSUFBTmhGLEdBQWlCLElBQU5BLEVBQ2IsT0FBT0EsRUFTVCxJQUxBQSxHQUFNZ0osR0FETnBMLEdBRk1pRyxFQUFNZ1EsTUFBTTdULEVBQUcwRyxFQUFHM08sR0FBS3FWLElBQzdCcEUsRUFBSTNJLEVBQUtzSyxJQUFJb0ksRUFBSzFTLEVBQUtuSixJQUFJOEksR0FBSzRULEVBQUt2VCxFQUFLbkosSUFBSSxFQUFJOEksR0FBSzhTLE1BRXhDLEVBQUksR0FBTXpTLEVBQUtDLElBQUksRUFBRzFDLEdBQUttVixFQUFLL1MsRUFBSTRULEdBQU0sRUFBSTVULFFBQ3BELElBQ1BBLEVBQUksSUFBT0EsRUFBSWdKLElBQ2JoSixHQUFLLElBQ1BBLEVBQUksSUFBT0EsRUFBSWdKLEVBQUksSUFDakIzSSxFQUFLc00sSUFBSTNELEdBM0NMLEtBMkNnQmhKLEdBQUtnRixFQUFJLEVBQy9CLEtBQ0osQ0FDQSxPQUFPaEYsQ0FDVCxFQUlBNkQsRUFBTWdRLE1BQVEsU0FBZTdULEVBQUcwRyxFQUFHM08sR0FFakMsSUFBSStiLEVBQVksSUFBTjlULEdBQWlCLElBQU5BLEVBQVksRUFDL0JLLEVBQUtzSyxJQUFJOUcsRUFBTWlNLFFBQVFwSixFQUFJM08sR0FBSzhMLEVBQU1pTSxRQUFRcEosR0FDckM3QyxFQUFNaU0sUUFBUS9YLEdBQUsyTyxFQUFJckcsRUFBS25KLElBQUk4SSxHQUFLakksRUFDckNzSSxFQUFLbkosSUFBSSxFQUFJOEksSUFDeEIsUUFBSUEsRUFBSSxHQUFLQSxFQUFJLEtBRWJBLEdBQUswRyxFQUFJLElBQU1BLEVBQUkzTyxFQUFJLEdBRWxCK2IsRUFBS2pRLEVBQU11TyxPQUFPcFMsRUFBRzBHLEVBQUczTyxHQUFLMk8sRUFFL0IsRUFBSW9OLEVBQUtqUSxFQUFNdU8sT0FBTyxFQUFJcFMsRUFBR2pJLEVBQUcyTyxHQUFLM08sRUFDOUMsRUFLQThMLEVBQU1rUSxNQUFRLFNBQWU3UCxFQUFHQyxHQUM5QixJQUFJdkcsRUFBR2lSLEVBQUc3TyxFQUFHZ1EsRUFBR2EsRUFHaEIsR0FGSzFNLElBQ0hBLEVBQUlELEdBQ0ZBLEVBQ0YsT0FBT0wsRUFBTXdELE9BQU9uRCxFQUFHQyxHQUFHLFdBQWEsT0FBT04sRUFBTWtRLE9BQVMsSUFDL0QsR0FDRW5XLEVBQUlpRyxFQUFNMEIsYUFDVnNKLEVBQUksUUFBVWhMLEVBQU0wQixhQUFlLElBR25Dc0wsR0FGQTdRLEVBQUlwQyxFQUFJLFNBRUFvQyxHQURSZ1EsRUFBSTNQLEVBQUtzTSxJQUFJa0MsR0FBSyxVQUNELEtBQVVtQixFQUFJLE9BQVVoUSxTQUNsQzZRLEVBQUksU0FBWUEsRUFBSSxRQUFXaEMsRUFBSUEsR0FBSyxFQUFJeE8sRUFBS25KLElBQUkwRyxHQUFLQSxFQUFJQSxJQUN2RSxPQUFPaVIsRUFBSWpSLENBQ2IsRUFJQWlHLEVBQU1tUSxNQUFRLFNBQWVDLEVBQU8vUCxFQUFHQyxHQUNyQyxJQUNJNE8sRUFBSW1CLEVBQUl0VyxFQUFHaVIsRUFBRzdPLEVBQUcrSSxFQURqQm9MLEVBQVFGLEVBTVosR0FKSzlQLElBQ0hBLEVBQUlELEdBQ0QrUCxJQUNIQSxFQUFRLEdBQ04vUCxFQUdGLE9BRkE2RSxFQUFNbEYsRUFBTXlELE1BQU1wRCxFQUFFQyxJQUNoQmlELE9BQU0sV0FBYSxPQUFPdkQsRUFBTW1RLE1BQU1DLEVBQVEsSUFDM0NsTCxFQUVMa0wsRUFBUSxJQUNWQSxHQUFTLEdBQ1hsQixFQUFLa0IsRUFBUSxFQUFJLEVBQ2pCQyxFQUFLLEVBQUk3VCxFQUFLbU0sS0FBSyxFQUFJdUcsR0FDdkIsRUFBRyxDQUNELEdBRUVsRSxFQUFJLEVBQUlxRixHQURSbFUsRUFBSTZELEVBQU1rUSxlQUVKbEYsR0FBSyxHQUNiQSxHQUFJQSxFQUFJQSxFQUNSalIsRUFBSWlHLEVBQU0wQixZQUNaLE9BQVEzSCxFQUFJLEVBQUksS0FBUXlDLEVBQUtnRSxJQUFJckUsRUFBRyxJQUM1QkssRUFBS25KLElBQUkwRyxHQUFLLEdBQU1vQyxFQUFFQSxFQUFJK1MsR0FBTSxFQUFJbEUsRUFBSXhPLEVBQUtuSixJQUFJMlgsS0FFekQsR0FBSW9GLEdBQVNFLEVBQ1gsT0FBT3BCLEVBQUtsRSxFQUVkLEdBQ0VqUixFQUFJaUcsRUFBTTBCLG1CQUNFLElBQU4zSCxHQUNSLE9BQU95QyxFQUFLZ0UsSUFBSXpHLEVBQUcsRUFBSXVXLEdBQVNwQixFQUFLbEUsQ0FDdkMsRUFJQSxTQUFVekYsR0FDUixJQUFLLElBQUlsTSxFQUFJLEVBQUdBLEVBQUlrTSxFQUFNNU8sT0FBUTBDLEtBQUssU0FBVW1NLEdBQy9DeEYsRUFBTW9CLEdBQUdvRSxHQUFZLFdBQ25CLE9BQU94RixFQUNIQSxFQUFNdkIsSUFBSTFILE1BQU0sU0FBU3NULEdBQVMsT0FBT3JLLEVBQU13RixHQUFVNkUsRUFBUSxJQUN2RSxDQUNELENBTHNDLENBS3BDOUUsRUFBTWxNLEdBQ1YsQ0FQRCxDQU9HLHdDQUF3Q3FNLE1BQU0sTUFHakQsU0FBVUgsR0FDUixJQUFLLElBQUlsTSxFQUFJLEVBQUdBLEVBQUlrTSxFQUFNNU8sT0FBUTBDLEtBQUssU0FBVW1NLEdBQy9DeEYsRUFBTW9CLEdBQUdvRSxHQUFZLFdBQ25CLE9BQU94RixFQUFNQSxFQUFNd0YsR0FBVTdLLE1BQU0sS0FBTTZDLFdBQzNDLENBQ0QsQ0FKc0MsQ0FJcEMrSCxFQUFNbE0sR0FDVixDQU5ELENBTUcsUUFBUXFNLE1BQU0sS0FFakIsQ0E1ZkEsQ0E0ZkUxRixFQUFPeEQsTUFDUixTQUFTd0QsRUFBT3hELEdBdXRCakIsU0FBUytULEVBQU9wVSxFQUFHMEcsRUFBRzNPLEVBQUdzYyxHQVN2QixJQVJBLElBTUlDLEVBTkFDLEVBQUssRUFDTEMsRUFBSyxFQUNMekIsRUFBSyxFQUNMYSxFQUFLLEVBQ0xhLEVBQUssRUFDTFAsRUFBSyxFQUdGN1QsRUFBS3NNLEtBQUtvRyxFQUFLbUIsR0FBTW5CLEdBQU1zQixHQUNoQ0gsRUFBS25CLEVBR0x5QixFQUFLWixHQUZMVSxJQUFPNU4sRUFBSStOLElBQU8vTixFQUFJM08sRUFBSTBjLEdBQU16VSxHQUFLMEcsRUFBSSxFQUFJK04sSUFBTy9OLEVBQUksRUFBSStOLEVBQUssSUFFbERELEVBR2Z6QixHQUpBd0IsRUFBS3hCLEVBQUt1QixFQUFLQyxJQUdmRCxHQURBRyxHQUFVLElBQ0MxYyxFQUFJMGMsR0FBTXpVLEdBQUswRyxFQUFJLEVBQUkrTixFQUFLLElBQU0vTixFQUFJLEVBQUkrTixJQUN0QzFCLEVBRWZ3QixHQURBWCxFQUFLWSxFQUFLRixFQUFLVixFQUVmWSxHQUFVWixFQUNWYixHQUFVYSxFQUNWQSxFQUFLLEVBR1AsT0FBT2IsRUFBS3JNLENBQ2QsQ0FzZUEsU0FBU2dPLEVBQVdmLEVBQUdnQixFQUFJQyxHQUN6QixJQVVJQyxFQUFPLENBQ1Qsa0JBQ0Esa0JBQ0Esa0JBQ0Esa0JBQ0Esa0JBQ0EsbUJBRUVDLEVBQU8sQ0FDVCxtQkFDQSxtQkFDQSxtQkFDQSxtQkFDQSxrQkFDQSxvQkFHRUMsRUFBVyxHQUFKcEIsRUFLWCxHQUFJb0IsR0ExQk8sRUEyQlQsT0FBTyxFQUtULElBVUlDLEVBVkFDLEVBQU8sRUFBSXBSLEVBQU1xUixPQUFPQyxJQUFJSixFQUFNLEVBQUcsRUFBRyxFQUFHLEdBQUssRUFHbERFLEVBREVBLEdBQVE1VSxFQUFLc0ssS0FwQ1AsR0FvQ2dCaUssR0FDakJ2VSxFQUFLZ0UsSUFBSTRRLEVBQU1MLEdBRWYsRUEyQlQsSUFSQSxJQUFJUSxFQUFNTCxFQUNOTSxHQXpETyxFQXlETU4sSUFiZkMsRUFERXJCLEVBMUNPLEVBQ0UsRUFDQSxHQXVEVDJCLEVBQU1GLEVBQU1DLEVBQ1pFLEVBQVMsRUFJVEMsRUFBTVosRUFBSyxFQUNOYSxFQUFLLEVBQUdBLEdBQU1ULEVBQU9TLElBQU0sQ0FRbEMsSUFQQSxJQUFJQyxFQUFRLEVBQ1JoUCxFQUFJLElBQU80TyxFQUFNRixHQUlqQnJkLEVBQUksSUFBT3VkLEVBQU1GLEdBRVpPLEVBQUssRUFBR0EsR0E5RVIsR0E4RW9CQSxJQUFNLENBQ2pDLElBQUkzUSxFQVNBNFEsRUFBS2xQLEVBREQzTyxHQXRGQSxFQStFSTRkLEVBRUxkLEdBREw3UCxFQWpGSyxHQWlGTzJRLEVBQU0sR0FDTixJQUdOZCxHQURON1AsRUFBSTJRLEdBQ1MsSUFRWEUsRUFBUUQsRUFBS0EsRUFDakIsR0FBSUMsRUF6RkMsR0EwRkgsTUFFRixJQU1JQyxFQU5RLEVBQUlqUyxFQUFNcVIsT0FBT0MsSUFBSVMsRUFBSSxFQUFHLEVBQUcsRUFBRyxHQU14QixHQUxWLEVBQUkvUixFQUFNcVIsT0FBT0MsSUFBSVMsRUFBSWpDLEVBQUcsRUFBRyxFQUFHLEdBS1AsR0FDbkNtQyxHQUFVelYsRUFBS3NLLEtBckdkLEdBcUd1QjZLLEtBRTFCRSxHQURBSSxFQUFVaEIsRUFBSzlQLEVBQUUsR0FBSzNFLEVBQUtzSyxLQUFNLEdBQU1rTCxHQUFXeFYsRUFBS2dFLElBQUl5UixFQUFRTixHQUd2RSxDQUVBRCxHQURBRyxHQUFZLEVBQU0zZCxFQUFLNmMsRUFBTXZVLEVBQUttTSxLQUFLLEVBQUluTSxFQUFLb1EsSUFFaEQyRSxFQUFNRSxFQUNOQSxHQUFPRCxDQUNULENBSUEsT0FEQUosR0FBUU0sSUFDSWxWLEVBQUtzSyxLQWxIUixHQWtIaUJnSyxHQUNqQixHQUVUTSxFQUFPNVUsRUFBS2dFLElBQUk0USxFQUFNTixLQUNWLEVBQ0gsRUFDRk0sQ0FDVCxFQWgxQ0EsU0FBVTdTLEdBQ1IsSUFBSyxJQUFJbEYsRUFBSSxFQUFHQSxFQUFJa0YsRUFBSzVILE9BQVEwQyxLQUFLLFNBQVVpQixHQUU5QzBGLEVBQU0xRixHQUFRLFNBQVM0WCxFQUFFclAsRUFBRzNPLEVBQUdvRixHQUM3QixPQUFNdkMsZ0JBQWdCbWIsR0FFdEJuYixLQUFLb2IsR0FBS3RQLEVBQ1Y5TCxLQUFLcWIsR0FBS2xlLEVBQ1Y2QyxLQUFLc2IsR0FBSy9ZLEVBQ0h2QyxNQUpFLElBQUltYixFQUFFclAsRUFBRzNPLEVBQUdvRixFQUt2QixFQUVBMEcsRUFBTW9CLEdBQUc5RyxHQUFRLFNBQVN1SSxFQUFHM08sRUFBR29GLEdBQzlCLElBQUlnWixFQUFVdFMsRUFBTTFGLEdBQU11SSxFQUFHM08sRUFBR29GLEdBRWhDLE9BREFnWixFQUFReFMsS0FBTy9JLEtBQ1J1YixDQUNULEVBRUF0UyxFQUFNMUYsR0FBTTRGLFVBQVVxUyxPQUFTLFNBQVNwWSxHQUN0QyxJQUFJMEksRUFBSTlMLEtBQUtvYixHQUNUamUsRUFBSTZDLEtBQUtxYixHQUNUOVksRUFBSXZDLEtBQUtzYixHQUNiLE9BQUlsWSxFQUNLNkYsRUFBTXVELE1BQU1wSixHQUFLLFdBQ3RCLE9BQU82RixFQUFNMUYsR0FBTWlZLE9BQU8xUCxFQUFHM08sRUFBR29GLEVBQ2xDLElBRU8wRyxFQUFNMUYsR0FBTWlZLE9BQU8xUCxFQUFHM08sRUFBR29GLEVBQ3BDLEVBRUEsU0FBVWtaLEdBQ1IsSUFBSyxJQUFJblosRUFBSSxFQUFHQSxFQUFJbVosRUFBSzdiLE9BQVEwQyxLQUFLLFNBQVVvWixHQUM5Q3pTLEVBQU0xRixHQUFNNEYsVUFBVXVTLEdBQVUsU0FBU3RXLEdBQ3ZDLElBQUkwRyxFQUFJOUwsS0FBS29iLEdBQ1RqZSxFQUFJNkMsS0FBS3FiLEdBQ1Q5WSxFQUFJdkMsS0FBS3NiLEdBR2IsT0FGS2xXLEdBQVcsSUFBTkEsSUFDUkEsRUFBSXBGLEtBQUsrSSxNQUNNLGlCQUFOM0QsRUFDRjZELEVBQU1vQixHQUFHM0MsSUFBSW1DLEtBQUt6RSxHQUFHLFNBQVNBLEdBQ25DLE9BQU82RCxFQUFNMUYsR0FBTW1ZLEdBQVF0VyxFQUFHMEcsRUFBRzNPLEVBQUdvRixFQUN0QyxJQUVLMEcsRUFBTTFGLEdBQU1tWSxHQUFRdFcsRUFBRzBHLEVBQUczTyxFQUFHb0YsRUFDdEMsQ0FDRCxDQWRxQyxDQWNuQ2taLEVBQUtuWixHQUNULENBaEJELENBZ0JHLGNBQWNxTSxNQUFNLE1BRXZCLFNBQVU4TSxHQUNSLElBQUssSUFBSW5aLEVBQUksRUFBR0EsRUFBSW1aLEVBQUs3YixPQUFRMEMsS0FBSyxTQUFVb1osR0FDOUN6UyxFQUFNMUYsR0FBTTRGLFVBQVV1UyxHQUFVLFdBQzlCLE9BQU96UyxFQUFNMUYsR0FBTW1ZLEdBQVExYixLQUFLb2IsR0FBSXBiLEtBQUtxYixHQUFJcmIsS0FBS3NiLEdBQ3BELENBQ0QsQ0FKcUMsQ0FJbkNHLEVBQUtuWixHQUNULENBTkQsQ0FNRyw0QkFBNEJxTSxNQUFNLEtBQ3RDLENBdERxQyxDQXNEbkNuSCxFQUFLbEYsR0FDVCxDQXhERCxDQXdERyxzTUFJRHFNLE1BQU0sTUFLUjFGLEVBQU04QixPQUFPOUIsRUFBTTBTLEtBQU0sQ0FDdkJDLElBQUssU0FBYXhXLEVBQUd5VyxFQUFPRixHQUUxQixPQUFJdlcsRUFBSSxHQUFLQSxFQUFJLEVBQ1IsRUFFSSxHQUFUeVcsR0FBc0IsR0FBUkYsRUFDVCxFQUVMRSxFQUFRLEtBQU9GLEVBQU8sSUFDaEJsVyxFQUFLZ0UsSUFBSXJFLEVBQUd5VyxFQUFRLEdBQUtwVyxFQUFLZ0UsSUFBSSxFQUFJckUsRUFBR3VXLEVBQU8sR0FDcEQxUyxFQUFNcU8sT0FBT3VFLEVBQU9GLEdBRWpCbFcsRUFBS3NLLEtBQUs4TCxFQUFRLEdBQUtwVyxFQUFLbkosSUFBSThJLElBQ3RCdVcsRUFBTyxHQUFLbFcsRUFBS25KLElBQUksRUFBSThJLEdBQzFCNkQsRUFBTXNPLE9BQU9zRSxFQUFPRixHQUV4QyxFQUVBcEIsSUFBSyxTQUFhblYsRUFBR3lXLEVBQU9GLEdBQzFCLE9BQVF2VyxFQUFJLEdBQUtBLEVBQUksRUFBZSxHQUFUQSxFQUFJLEdBQVM2RCxFQUFNZ1EsTUFBTTdULEVBQUd5VyxFQUFPRixFQUNoRSxFQUVBRyxJQUFLLFNBQWExVyxFQUFHeVcsRUFBT0YsR0FDMUIsT0FBTzFTLEVBQU0wUCxTQUFTdlQsRUFBR3lXLEVBQU9GLEVBQ2xDLEVBRUF6TSxLQUFNLFNBQWMyTSxFQUFPRixHQUN6QixPQUFPRSxHQUFTQSxFQUFRRixFQUMxQixFQUVBM0wsT0FBUSxTQUFnQjZMLEVBQU9GLEdBQzdCLE9BQU8xUyxFQUFNMFAsU0FBUyxHQUFLa0QsRUFBT0YsRUFDcEMsRUFFQTVLLEtBQU0sU0FBYzhLLEVBQU9GLEdBQ3pCLE9BQVFFLEVBQVEsSUFBUUEsRUFBUUYsRUFBTyxFQUN6QyxFQUdBSCxPQUFRLFNBQWdCSyxFQUFPRixHQUM3QixJQUFJM1ksRUFBSWlHLEVBQU1tUSxNQUFNeUMsR0FDcEIsT0FBTzdZLEdBQUtBLEVBQUlpRyxFQUFNbVEsTUFBTXVDLEdBQzlCLEVBRUF2SyxTQUFVLFNBQWtCeUssRUFBT0YsR0FDakMsT0FBUUUsRUFBUUYsR0FBU2xXLEVBQUtnRSxJQUFJb1MsRUFBUUYsRUFBTSxJQUFNRSxFQUFRRixFQUFPLEdBQ3ZFLElBSUYxUyxFQUFNOEIsT0FBTzlCLEVBQU04UyxTQUFVLENBSTNCSCxJQUFLLFNBQWF4VyxFQUFHNFcsRUFBS0MsR0FDeEIsSUFBSXpKLEVBRUosT0FBSXBOLEVBQUksRUFDQyxFQUVMNFcsR0FBTyxFQUNDLElBQU41VyxHQUFXNFcsRUFBTSxFQUNaM0YsSUFFQyxJQUFOalIsR0FBbUIsSUFBUjRXLEVBQ04sRUFFRCxFQUFJL1MsRUFBTXFPLE9BQU8wRSxFQUFNLEVBQUdDLEVBQU0sR0FDaEN4VyxFQUFLZ0UsSUFBSXVTLEVBQU1DLEVBQUtELEVBQU0sR0FDMUJ2VyxFQUFLZ0UsSUFBSXJFLEVBQUk0VyxFQUFJLEVBQUssR0FDdEJ2VyxFQUFLZ0UsSUFBSyxFQUFLdVMsRUFBTUMsRUFBTzdXLElBQU00VyxFQUFNQyxHQUFPLElBR3pEekosRUFBS3dKLEVBQU01VyxHQUFNNlcsRUFBTTdXLEVBQUk0VyxHQUV2QkEsR0FEQUMsR0FBT0EsRUFBTTdXLEVBQUk0VyxJQUNQLEVBQ0gvUyxFQUFNaVQsU0FBU04sS0FBS0ksRUFBTSxHQUFLLEdBQUlBLEVBQU1DLEVBQU0sR0FBSyxFQUFHekosR0FDcEUsRUFFQStILElBQUssU0FBYW5WLEVBQUc0VyxFQUFLQyxHQUN4QixPQUFJN1csRUFBSSxFQUNDLEVBQ0Y2RCxFQUFNZ1EsTUFBTytDLEVBQU01VyxHQUFNNFcsRUFBTTVXLEVBQUk2VyxHQUFNRCxFQUFNLEVBQUdDLEVBQU0sRUFDakUsRUFFQUgsSUFBSyxTQUFhMVcsRUFBRzRXLEVBQUtDLEdBQ3hCLE9BQU9BLEdBQU9ELEdBQU8sRUFBSS9TLEVBQU0wUCxTQUFTdlQsRUFBRzRXLEVBQU0sRUFBR0MsRUFBTSxHQUFLLEdBQ2pFLEVBRUEvTSxLQUFNLFNBQWM4TSxFQUFLQyxHQUN2QixPQUFRQSxFQUFNLEVBQUtBLEdBQU9BLEVBQU0sUUFBSzdoQixDQUN2QyxFQUVBMlcsS0FBTSxTQUFjaUwsRUFBS0MsR0FDdkIsT0FBUUQsRUFBTSxFQUFNQyxHQUFPRCxFQUFNLElBQU9BLEdBQU9DLEVBQU0sU0FBTTdoQixDQUM3RCxFQUdBb2hCLE9BQVEsU0FBZ0JRLEVBQUtDLEdBRzNCLE9BRmdDLEVBQXZCaFQsRUFBTW1RLE1BQU00QyxFQUFNLEdBRWRBLEdBRG1CLEVBQXZCL1MsRUFBTW1RLE1BQU02QyxFQUFNLEdBQ0RBLEVBQzVCLEVBRUE3SyxTQUFVLFNBQWtCNEssRUFBS0MsR0FDL0IsS0FBSUEsR0FBTyxHQUVYLE9BQU8sRUFBSUEsRUFBTUEsR0FBT0QsRUFBTUMsRUFBTSxJQUMvQkQsR0FBT0MsRUFBTSxJQUFNQSxFQUFNLElBQU1BLEVBQU0sR0FDNUMsSUFLRmhULEVBQU04QixPQUFPOUIsRUFBTWtULE9BQVEsQ0FDekJQLElBQUssU0FBYXhXLEVBQUdnWCxFQUFPQyxHQUMxQixPQUFJQSxFQUFRLEVBQVksRUFFaEJBLEdBQVM1VyxFQUFLZ0UsSUFBSXJFLEVBQUlnWCxFQUFPLEdBQUszVyxFQUFLZ0UsSUFBSTRTLEVBQU8sSUFBTzVXLEVBQUtvUSxFQUN4RSxFQUVBMEUsSUFBSyxTQUFhblYsRUFBR2dYLEVBQU9DLEdBQzFCLE9BQU81VyxFQUFLNlcsTUFBTWxYLEVBQUlnWCxHQUFTQyxHQUFTNVcsRUFBS29RLEdBQUssRUFDcEQsRUFFQWlHLElBQUssU0FBU3RKLEVBQUc0SixFQUFPQyxHQUN0QixPQUFPRCxFQUFRQyxFQUFRNVcsRUFBSzhXLElBQUk5VyxFQUFLb1EsSUFBTXJELEVBQUksSUFDakQsRUFFQXhDLE9BQVEsU0FBZ0JvTSxHQUN0QixPQUFPQSxDQUNULEVBRUFyTCxLQUFNLFNBQWNxTCxHQUNsQixPQUFPQSxDQUNULEVBRUFaLE9BQVEsU0FBZ0JZLEVBQU9DLEdBQzdCLE9BQU9wVCxFQUFNa1EsUUFDVDFULEVBQUttTSxLQUFLLEdBQUssRUFBSTNJLEVBQU1tUSxNQUFNLE1BQVNpRCxFQUFRRCxDQUN0RCxJQU1GblQsRUFBTThCLE9BQU85QixFQUFNdVQsVUFBVyxDQUM1QlosSUFBSyxTQUFheFcsRUFBR3FYLEdBQ25CLE9BQUlyWCxFQUFJLEVBQ0MsRUFDSyxJQUFOQSxHQUFtQixJQUFScVgsRUFBYSxHQUM1QmhYLEVBQUtzSyxLQUFLME0sRUFBTSxFQUFJLEdBQUtoWCxFQUFLbkosSUFBSThJLEdBQUtBLEVBQUksRUFBS3FYLEVBQU0sRUFDN0NoWCxFQUFLbkosSUFBSSxHQUFLMk0sRUFBTWlNLFFBQVF1SCxFQUFNLEdBQ2pELEVBRUFsQyxJQUFLLFNBQWFuVixFQUFHcVgsR0FDbkIsT0FBSXJYLEVBQUksRUFDQyxFQUNGNkQsRUFBTXVOLFlBQVlpRyxFQUFNLEVBQUdyWCxFQUFJLEVBQ3hDLEVBRUEwVyxJQUFLLFNBQVN0SixFQUFHaUssR0FDZixPQUFPLEVBQUl4VCxFQUFNOE8sVUFBVXZGLEVBQUcsR0FBTWlLLEVBQ3RDLEVBRUF2TixLQUFPLFNBQVN1TixHQUNkLE9BQU9BLENBQ1QsRUFHQXpNLE9BQVEsU0FBZ0J5TSxHQUN0QixPQUFPQSxFQUFNaFgsRUFBS2dFLElBQUksRUFBSyxHQUFLLEVBQUlnVCxHQUFPLEVBQzdDLEVBRUExTCxLQUFNLFNBQWMwTCxHQUNsQixPQUFRQSxFQUFNLEVBQUksRUFBS0EsRUFBTSxFQUFJLENBQ25DLEVBRUFqQixPQUFRLFNBQWdCaUIsR0FDdEIsT0FBOEIsRUFBdkJ4VCxFQUFNbVEsTUFBTXFELEVBQU0sRUFDM0IsRUFFQXJMLFNBQVUsU0FBa0JxTCxHQUMxQixPQUFPLEVBQUlBLENBQ2IsSUFNRnhULEVBQU04QixPQUFPOUIsRUFBTXlULFlBQWEsQ0FDOUJkLElBQUssU0FBYXhXLEVBQUd1WCxHQUNuQixPQUFPdlgsRUFBSSxFQUFJLEVBQUl1WCxFQUFPbFgsRUFBS3NLLEtBQUs0TSxFQUFPdlgsRUFDN0MsRUFFQW1WLElBQUssU0FBYW5WLEVBQUd1WCxHQUNuQixPQUFPdlgsRUFBSSxFQUFJLEVBQUksRUFBSUssRUFBS3NLLEtBQUs0TSxFQUFPdlgsRUFDMUMsRUFFQTBXLElBQUssU0FBU3RKLEVBQUdtSyxHQUNmLE9BQVFsWCxFQUFLbkosSUFBSSxFQUFJa1csR0FBS21LLENBQzVCLEVBRUF6TixLQUFPLFNBQVN5TixHQUNkLE9BQU8sRUFBSUEsQ0FDYixFQUVBM00sT0FBUSxTQUFVMk0sR0FDaEIsT0FBUSxFQUFJQSxFQUFRbFgsRUFBS25KLElBQUksRUFDL0IsRUFFQXlVLEtBQU0sV0FDSixPQUFPLENBQ1QsRUFFQXlLLE9BQVEsU0FBZ0JtQixHQUN0QixPQUFRLEVBQUlBLEVBQU9sWCxFQUFLbkosSUFBSTJNLEVBQU0wQixhQUNwQyxFQUVBeUcsU0FBVyxTQUFTdUwsR0FDbEIsT0FBT2xYLEVBQUtnRSxJQUFJa1QsR0FBTyxFQUN6QixJQU1GMVQsRUFBTThCLE9BQU85QixFQUFNeUosTUFBTyxDQUN4QmtKLElBQUssU0FBYXhXLEVBQUdpVSxFQUFPZ0QsR0FDMUIsT0FBSWpYLEVBQUksRUFDQyxFQUNLLElBQU5BLEdBQXFCLElBQVZpVSxFQUFlLEVBQUlnRCxFQUM5QjVXLEVBQUtzSyxLQUFLc0osRUFBUSxHQUFLNVQsRUFBS25KLElBQUk4SSxHQUFLQSxFQUFJaVgsRUFDakNwVCxFQUFNaU0sUUFBUW1FLEdBQVNBLEVBQVE1VCxFQUFLbkosSUFBSStmLEdBQzFELEVBRUE5QixJQUFLLFNBQWFuVixFQUFHaVUsRUFBT2dELEdBQzFCLE9BQUlqWCxFQUFJLEVBQ0MsRUFDRjZELEVBQU11TixZQUFZNkMsRUFBT2pVLEVBQUlpWCxFQUN0QyxFQUVBUCxJQUFLLFNBQVN0SixFQUFHNkcsRUFBT2dELEdBQ3RCLE9BQU9wVCxFQUFNOE8sVUFBVXZGLEVBQUc2RyxHQUFTZ0QsQ0FDckMsRUFFQW5OLEtBQU8sU0FBU21LLEVBQU9nRCxHQUNyQixPQUFPaEQsRUFBUWdELENBQ2pCLEVBRUF0TCxLQUFNLFNBQWNzSSxFQUFPZ0QsR0FDekIsR0FBR2hELEVBQVEsRUFBRyxPQUFRQSxFQUFRLEdBQUtnRCxDQUVyQyxFQUVBYixPQUFRLFNBQWdCbkMsRUFBT2dELEdBQzdCLE9BQU9wVCxFQUFNbVEsTUFBTUMsR0FBU2dELENBQzlCLEVBRUFqTCxTQUFVLFNBQWtCaUksRUFBT2dELEdBQ2pDLE9BQU9oRCxFQUFRZ0QsRUFBUUEsQ0FDekIsSUFJRnBULEVBQU04QixPQUFPOUIsRUFBTTJULFNBQVUsQ0FDM0JoQixJQUFLLFNBQWF4VyxFQUFHaVUsRUFBT2dELEdBQzFCLE9BQUlqWCxHQUFLLEVBQ0EsRUFDRkssRUFBS3NLLE1BQU1zSixFQUFRLEdBQUs1VCxFQUFLbkosSUFBSThJLEdBQUtpWCxFQUFRalgsRUFDckM2RCxFQUFNaU0sUUFBUW1FLEdBQVNBLEVBQVE1VCxFQUFLbkosSUFBSStmLEdBQzFELEVBRUE5QixJQUFLLFNBQWFuVixFQUFHaVUsRUFBT2dELEdBQzFCLE9BQUlqWCxHQUFLLEVBQ0EsRUFDRixFQUFJNkQsRUFBTXVOLFlBQVk2QyxFQUFPZ0QsRUFBUWpYLEVBQzlDLEVBRUEwVyxJQUFLLFNBQVN0SixFQUFHNkcsRUFBT2dELEdBQ3RCLE9BQU9BLEVBQVFwVCxFQUFNOE8sVUFBVSxFQUFJdkYsRUFBRzZHLEVBQ3hDLEVBRUFuSyxLQUFPLFNBQVNtSyxFQUFPZ0QsR0FDckIsT0FBUWhELEVBQVEsRUFBS2dELEdBQVNoRCxFQUFRLFFBQUtqZixDQUM3QyxFQUVBMlcsS0FBTSxTQUFjc0ksRUFBT2dELEdBQ3pCLE9BQU9BLEdBQVNoRCxFQUFRLEVBQzFCLEVBRUFtQyxPQUFRLFNBQWdCbkMsRUFBT2dELEdBQzdCLE9BQU9BLEVBQVFwVCxFQUFNbVEsTUFBTUMsRUFDN0IsRUFFQWpJLFNBQVUsU0FBa0JpSSxFQUFPZ0QsR0FDakMsS0FBSWhELEdBQVMsR0FFYixPQUFPZ0QsRUFBUUEsSUFBVWhELEVBQVEsSUFBTUEsRUFBUSxJQUFNQSxFQUFRLEdBQy9ELElBS0ZwUSxFQUFNOEIsT0FBTzlCLEVBQU00VCxZQUFhLENBQzlCakIsSUFBSyxTQUFheFcsRUFBR3lXLEVBQU9GLEdBQzFCLE9BQVUsSUFBTnZXLEdBQXFCLElBQVZ5VyxFQUNORixFQUNNLElBQU52VyxHQUFvQixJQUFUdVcsRUFDWEUsRUFDRnBXLEVBQUtzSyxJQUFJdEssRUFBS25KLElBQUl1ZixHQUFTcFcsRUFBS25KLElBQUlxZixJQUFTRSxFQUFRLEdBQzVDcFcsRUFBS25KLElBQUk4SSxJQUFNdVcsRUFBTyxHQUN0QmxXLEVBQUtuSixJQUFJLEVBQUltSixFQUFLZ0UsSUFBSXJFLEVBQUd5VyxJQUMzQyxFQUVBdEIsSUFBSyxTQUFhblYsRUFBR3lXLEVBQU9GLEdBQzFCLE9BQUl2VyxFQUFJLEVBQ0MsRUFDQUEsRUFBSSxFQUNKLEVBQ0QsRUFBSUssRUFBS2dFLElBQUksRUFBSWhFLEVBQUtnRSxJQUFJckUsRUFBR3lXLEdBQVFGLEVBQy9DLEVBRUFHLElBQUssU0FBYXRKLEVBQUdxSixFQUFPRixHQUMxQixPQUFPbFcsRUFBS2dFLElBQUksRUFBSWhFLEVBQUtnRSxJQUFJLEVBQUkrSSxFQUFHLEVBQUltSixHQUFPLEVBQUlFLEVBQ3JELEVBRUEzTSxLQUFPLFNBQVMyTSxFQUFPRixHQUNyQixPQUFRQSxFQUFPMVMsRUFBTTZNLFFBQVEsRUFBSSxFQUFJK0YsR0FDN0I1UyxFQUFNNk0sUUFBUTZGLEdBQVUxUyxFQUFNNk0sUUFBUSxFQUFJLEVBQUkrRixFQUFRRixFQUNoRSxFQUVBM0wsT0FBUSxTQUFnQjZMLEVBQU9GLEdBQzdCLE9BQU9sVyxFQUFLZ0UsSUFBSSxFQUFJaEUsRUFBS2dFLElBQUksR0FBSSxFQUFJa1MsR0FBTyxFQUFJRSxFQUNsRCxFQUVBOUssS0FBTSxTQUFjOEssRUFBT0YsR0FDekIsR0FBTUUsR0FBUyxHQUFLRixHQUFRLEdBQWdCLElBQVZFLEdBQXdCLElBQVRGLEVBRWpELE9BQU9sVyxFQUFLZ0UsS0FBS29TLEVBQVEsSUFBTUEsRUFBUUYsRUFBTyxHQUFJLEVBQUlFLEVBQ3hELEVBRUF6SyxTQUFVLFdBQ1IsTUFBTSxJQUFJMEwsTUFBTSwrQkFFbEIsSUFNRjdULEVBQU04QixPQUFPOUIsRUFBTThULFVBQVcsQ0FDNUJuQixJQUFLLFNBQWF4VyxFQUFHbVAsRUFBSUMsR0FDdkIsT0FBSXBQLEdBQUssRUFDQSxFQUNGSyxFQUFLc0ssS0FBS3RLLEVBQUtuSixJQUFJOEksR0FBSyxHQUFNSyxFQUFLbkosSUFBSSxFQUFJbUosRUFBS29RLElBQ3ZDcFEsRUFBS25KLElBQUlrWSxHQUFTL08sRUFBS2dFLElBQUloRSxFQUFLbkosSUFBSThJLEdBQUttUCxFQUFJLElBQzVDLEVBQUlDLEVBQVFBLEdBQy9CLEVBRUErRixJQUFLLFNBQWFuVixFQUFHbVAsRUFBSUMsR0FDdkIsT0FBSXBQLEVBQUksRUFDQyxFQUNGLEdBQ0YsR0FBTTZELEVBQU1vUCxLQUFLNVMsRUFBS25KLElBQUk4SSxHQUFLbVAsR0FBTTlPLEVBQUttTSxLQUFLLEVBQUk0QyxFQUFRQSxHQUNsRSxFQUVBc0gsSUFBSyxTQUFTdEosRUFBRytCLEVBQUlDLEdBQ25CLE9BQU8vTyxFQUFLc0ssS0FBSyxtQkFBc0J5RSxFQUFRdkwsRUFBTXlQLFFBQVEsRUFBSWxHLEdBQUsrQixFQUN4RSxFQUVBckYsS0FBTSxTQUFjcUYsRUFBSUMsR0FDdEIsT0FBTy9PLEVBQUtzSyxJQUFJd0UsRUFBS0MsRUFBUUEsRUFBUSxFQUN2QyxFQUVBeEUsT0FBUSxTQUFnQnVFLEdBQ3RCLE9BQU85TyxFQUFLc0ssSUFBSXdFLEVBQ2xCLEVBRUF4RCxLQUFNLFNBQWN3RCxFQUFJQyxHQUN0QixPQUFPL08sRUFBS3NLLElBQUl3RSxFQUFLQyxFQUFRQSxFQUMvQixFQUVBZ0gsT0FBUSxTQUFnQmpILEVBQUlDLEdBQzFCLE9BQU8vTyxFQUFLc0ssSUFBSTlHLEVBQU1rUSxRQUFVM0UsRUFBUUQsRUFDMUMsRUFFQW5ELFNBQVUsU0FBa0JtRCxFQUFJQyxHQUM5QixPQUFRL08sRUFBS3NLLElBQUl5RSxFQUFRQSxHQUFTLEdBQUsvTyxFQUFLc0ssSUFBSSxFQUFJd0UsRUFBS0MsRUFBUUEsRUFDbkUsSUFNRnZMLEVBQU04QixPQUFPOUIsRUFBTStULFlBQWEsQ0FDOUJwQixJQUFLLFNBQWF4VyxFQUFHcVgsRUFBS1EsR0FFeEIsT0FBSXhYLEVBQUtzTSxJQUFJa0wsR0FESCxNQUVEaFUsRUFBTWlVLFNBQVN0QixJQUFJeFcsRUFBR3FYLEdBRTNCaFgsRUFBS3NNLElBQUkzTSxHQUpILE1BS0RLLEVBQUtzSyxJQUFJOUcsRUFBTWlNLFNBQVN1SCxFQUFNLEdBQUssR0FBS1EsRUFBTUEsRUFBTSxFQUMzQyxHQUFNeFgsRUFBS25KLElBQUltSixFQUFLb1EsR0FBSzRHLEdBQU94VCxFQUFNaU0sUUFBUXVILEVBQU0sSUFJL0RBLEVBQU1yWCxHQUNSNkQsRUFBTStULFlBQVl6QyxJQUFJblYsRUFBSUssRUFBS21NLEtBQUssRUFBSSxFQUFJNkssR0FBTUEsRUFBSSxFQUFHUSxHQUN6RGhVLEVBQU0rVCxZQUFZekMsSUFBSW5WLEVBQUdxWCxFQUFLUSxHQUNyQyxFQUVBMUMsSUFBSyxTQUFhblYsRUFBR3FYLEVBQUtRLEdBQ3hCLElBQUlFLEVBQU0sTUFHVixHQUFJMVgsRUFBS3NNLElBQUlrTCxHQUFPRSxFQUNsQixPQUFPbFUsRUFBTWlVLFNBQVMzQyxJQUFJblYsRUFBR3FYLEdBRy9CLElBQUlXLEdBQU8sRUFDUGhZLEVBQUksSUFDTmdZLEdBQU8sRUFDUEgsR0FBT0EsR0FZVCxJQVRBLElBQUlJLEVBQU9wVSxFQUFNcVIsT0FBT0MsS0FBSzBDLEVBQUssRUFBRyxHQUNqQzNKLEVBQVE2SixFQUFNLEVBRWRHLEVBQVloSyxFQUNaOEIsRUFBSWhRLEVBQUlBLEdBQUtBLEVBQUlBLEVBQUlxWCxHQUNyQnJTLEVBQUksRUFDSm9JLEVBQUkvTSxFQUFLc0ssS0FBS2tOLEVBQU1BLEVBQU0sR0FDMUJoSCxFQUFJeFEsRUFBS3NLLEtBQUtrTixFQUFNQSxFQUFNLEVBQUksR0FBTXhYLEVBQUtuSixJQUFJLEdBQ2hDMk0sRUFBTWlNLFFBQVEsTUFBVStILEVBQ2xDN1MsRUFyQmMsS0FxQlFrVCxFQUFZSCxHQUFPN0osRUFBUTZKLEdBQ3RERyxFQUFZaEssRUFDUmxKLEVBQUksSUFDTm9JLEdBQU15SyxFQUFNQSxHQUFRLEVBQUk3UyxHQUN4QjZMLEdBQU1nSCxFQUFNQSxHQUFRLEdBQUs3UyxFQUFJLE1BSS9CaVQsR0FBUSxJQUZSL0osRUFBUWQsRUFBSXZKLEVBQU0wUyxLQUFLcEIsSUFBSW5GLEVBQUdoTCxFQUFJLEdBQUtxUyxFQUFNLEdBQ3pDeEcsRUFBSWhOLEVBQU0wUyxLQUFLcEIsSUFBSW5GLEVBQUdoTCxFQUFFLEVBQUdxUyxFQUFJLElBRW5DclMsSUFHRixPQUFPZ1QsRUFBUSxFQUFJQyxFQUFRQSxDQUM3QixJQUtGcFUsRUFBTThCLE9BQU85QixFQUFNcVIsT0FBUSxDQUN6QnNCLElBQUssU0FBYXhXLEVBQUc4SixFQUFNcU8sR0FDekIsT0FBTzlYLEVBQUtzSyxLQUFLLEdBQU10SyxFQUFLbkosSUFBSSxFQUFJbUosRUFBS29RLElBQ3pCcFEsRUFBS25KLElBQUlpaEIsR0FBTzlYLEVBQUtnRSxJQUFJckUsRUFBSThKLEVBQU0sSUFBTSxFQUFJcU8sRUFBTUEsR0FDckUsRUFFQWhELElBQUssU0FBYW5WLEVBQUc4SixFQUFNcU8sR0FDekIsTUFBTyxJQUFPLEVBQUl0VSxFQUFNb1AsS0FBS2pULEVBQUk4SixHQUFRekosRUFBS21NLEtBQUssRUFBSTJMLEVBQU1BLElBQy9ELEVBRUF6QixJQUFLLFNBQVN0SixFQUFHdEQsRUFBTXFPLEdBQ3JCLE9BQVEsbUJBQXNCQSxFQUFNdFUsRUFBTXlQLFFBQVEsRUFBSWxHLEdBQUt0RCxDQUM3RCxFQUVBQSxLQUFPLFNBQVNBLEdBQ2QsT0FBT0EsQ0FDVCxFQUVBYyxPQUFRLFNBQWdCZCxHQUN0QixPQUFPQSxDQUNULEVBRUE2QixLQUFNLFNBQVU3QixHQUNkLE9BQU9BLENBQ1QsRUFFQXNNLE9BQVEsU0FBZ0J0TSxFQUFNcU8sR0FDNUIsT0FBT3RVLEVBQU1rUSxRQUFVb0UsRUFBTXJPLENBQy9CLEVBRUFrQyxTQUFXLFNBQVNsQyxFQUFNcU8sR0FDeEIsT0FBT0EsRUFBTUEsQ0FDZixJQU1GdFUsRUFBTThCLE9BQU85QixFQUFNdVUsT0FBUSxDQUN6QjVCLElBQUssU0FBYXhXLEVBQUdpWCxFQUFPaEQsR0FDMUIsT0FBSWpVLEVBQUlpWCxFQUNDLEVBQ0RoRCxFQUFRNVQsRUFBS2dFLElBQUk0UyxFQUFPaEQsR0FBVTVULEVBQUtnRSxJQUFJckUsRUFBR2lVLEVBQVEsRUFDaEUsRUFFQWtCLElBQUssU0FBYW5WLEVBQUdpWCxFQUFPaEQsR0FDMUIsT0FBSWpVLEVBQUlpWCxFQUNDLEVBQ0YsRUFBSTVXLEVBQUtnRSxJQUFJNFMsRUFBUWpYLEVBQUdpVSxFQUNqQyxFQUVBeUMsSUFBSyxTQUFhdEosRUFBRzZKLEVBQU9oRCxHQUMxQixPQUFPZ0QsRUFBUTVXLEVBQUtnRSxJQUFJLEVBQUkrSSxFQUFHLEVBQUk2RyxFQUNyQyxFQUVBbkssS0FBTSxTQUFjbU4sRUFBT2hELEdBQ3pCLEtBQUlBLEdBQVMsR0FFYixPQUFRQSxFQUFRNVQsRUFBS2dFLElBQUk0UyxFQUFPaEQsSUFBV0EsRUFBUSxFQUNyRCxFQUVBckosT0FBUSxTQUFnQnFNLEVBQU9oRCxHQUM3QixPQUFPZ0QsR0FBU2hELEVBQVE1VCxFQUFLZ1ksTUFDL0IsRUFFQTFNLEtBQU0sU0FBY3NMLEdBQ2xCLE9BQU9BLENBQ1QsRUFFQWpMLFNBQVcsU0FBU2lMLEVBQU9oRCxHQUN6QixLQUFJQSxHQUFTLEdBRWIsT0FBUWdELEVBQU1BLEVBQVFoRCxHQUFVNVQsRUFBS2dFLElBQUk0UCxFQUFRLEVBQUcsSUFBTUEsRUFBUSxHQUNwRSxJQU1GcFEsRUFBTThCLE9BQU85QixFQUFNaVUsU0FBVSxDQUMzQnRCLElBQUssU0FBYXhXLEVBQUdxWCxHQUVuQixPQURBQSxFQUFNQSxFQUFNLE1BQVEsTUFBUUEsRUFDcEIsR0FBR2hYLEVBQUttTSxLQUFLNkssR0FBT3hULEVBQU1xTyxPQUFPLEdBQUttRixFQUFJLElBQzlDaFgsRUFBS2dFLElBQUksRUFBTXJFLEVBQUlBLEVBQUtxWCxJQUFTQSxFQUFNLEdBQUssRUFDbEQsRUFFQWxDLElBQUssU0FBYW5WLEVBQUdxWCxHQUNuQixJQUFJaUIsRUFBT2pCLEVBQU0sRUFDakIsT0FBT3hULEVBQU1nUSxPQUFPN1QsRUFBSUssRUFBS21NLEtBQUt4TSxFQUFJQSxFQUFJcVgsS0FDdEIsRUFBSWhYLEVBQUttTSxLQUFLeE0sRUFBSUEsRUFBSXFYLElBQU9pQixFQUFNQSxFQUN6RCxFQUVBNUIsSUFBSyxTQUFTdEosRUFBR2lLLEdBQ2YsSUFBSXJYLEVBQUk2RCxFQUFNMFAsU0FBUyxFQUFJbFQsRUFBS0MsSUFBSThNLEVBQUcsRUFBSUEsR0FBSSxHQUFNaUssRUFBSyxJQUUxRCxPQURBclgsRUFBSUssRUFBS21NLEtBQUs2SyxHQUFPLEVBQUlyWCxHQUFLQSxHQUN0Qm9OLEVBQUksR0FBT3BOLEdBQUtBLENBQzFCLEVBRUE4SixLQUFNLFNBQWN1TixHQUNsQixPQUFRQSxFQUFNLEVBQUssT0FBSXJpQixDQUN6QixFQUVBNFYsT0FBUSxXQUNOLE9BQU8sQ0FDVCxFQUVBZSxLQUFNLFdBQ0osT0FBTyxDQUNULEVBRUF5SyxPQUFRLFNBQWdCaUIsR0FDdEIsT0FBT3hULEVBQU1rUSxRQUFVMVQsRUFBS21NLEtBQUs2SyxHQUFPLEVBQUl4VCxFQUFNbVEsTUFBTXFELEVBQU0sSUFDaEUsRUFFQXJMLFNBQVUsU0FBa0JxTCxHQUMxQixPQUFRQSxFQUFPLEVBQUtBLEdBQU9BLEVBQU0sR0FBTUEsRUFBTSxFQUFLcEcsU0FBV2pjLENBQy9ELElBTUY2TyxFQUFNOEIsT0FBTzlCLEVBQU0wVSxRQUFTLENBQzFCL0IsSUFBSyxTQUFheFcsRUFBR2lYLEVBQU9oRCxHQUMxQixPQUFJalUsRUFBSSxHQUFLaVgsRUFBUSxHQUFLaEQsRUFBUSxFQUN6QixFQUNEQSxFQUFRZ0QsRUFBUzVXLEVBQUtnRSxJQUFLckUsRUFBSWlYLEVBQVNoRCxFQUFRLEdBQ3BENVQsRUFBS3NLLEtBQU10SyxFQUFLZ0UsSUFBS3JFLEVBQUlpWCxFQUFRaEQsR0FDdkMsRUFFQWtCLElBQUssU0FBYW5WLEVBQUdpWCxFQUFPaEQsR0FDMUIsT0FBT2pVLEVBQUksRUFBSSxFQUFJLEVBQUlLLEVBQUtzSyxLQUFLdEssRUFBS2dFLElBQUtyRSxFQUFJaVgsRUFBUWhELEdBQ3pELEVBRUF5QyxJQUFLLFNBQVN0SixFQUFHNkosRUFBT2hELEdBQ3RCLE9BQU9nRCxFQUFRNVcsRUFBS2dFLEtBQUtoRSxFQUFLbkosSUFBSSxFQUFJa1csR0FBSSxFQUFJNkcsRUFDaEQsRUFFQW5LLEtBQU8sU0FBU21OLEVBQU9oRCxHQUNyQixPQUFPZ0QsRUFBUXBULEVBQU02TSxRQUFRLEVBQUksRUFBSXVELEVBQ3ZDLEVBRUFySixPQUFRLFNBQWdCcU0sRUFBT2hELEdBQzdCLE9BQU9nRCxFQUFRNVcsRUFBS2dFLElBQUloRSxFQUFLbkosSUFBSSxHQUFJLEVBQUkrYyxFQUMzQyxFQUVBdEksS0FBTSxTQUFjc0wsRUFBT2hELEdBQ3pCLE9BQUlBLEdBQVMsRUFDSixFQUNGZ0QsRUFBUTVXLEVBQUtnRSxLQUFLNFAsRUFBUSxHQUFLQSxFQUFPLEVBQUlBLEVBQ25ELEVBRUFtQyxPQUFRLFNBQWdCYSxFQUFPaEQsR0FDN0IsT0FBT2dELEVBQVE1VyxFQUFLZ0UsS0FBS2hFLEVBQUtuSixJQUFJMk0sRUFBTTBCLGNBQWUsRUFBSTBPLEVBQzdELEVBRUFqSSxTQUFVLFNBQWtCaUwsRUFBT2hELEdBQ2pDLE9BQU9nRCxFQUFRQSxFQUFRcFQsRUFBTTZNLFFBQVEsRUFBSSxFQUFJdUQsR0FDekM1VCxFQUFLZ0UsSUFBSVIsRUFBTTBVLFFBQVF6TyxLQUFLbU4sRUFBT2hELEdBQVEsRUFDakQsSUFNRnBRLEVBQU04QixPQUFPOUIsRUFBTTJVLFFBQVMsQ0FDMUJoQyxJQUFLLFNBQWF4VyxFQUFHMEcsRUFBRzNPLEdBQ3RCLE9BQVFpSSxFQUFJMEcsR0FBSzFHLEVBQUlqSSxFQUFLLEVBQUksR0FBS0EsRUFBSTJPLEVBQ3pDLEVBRUF5TyxJQUFLLFNBQWFuVixFQUFHMEcsRUFBRzNPLEdBQ3RCLE9BQUlpSSxFQUFJMEcsRUFDQyxFQUNBMUcsRUFBSWpJLEdBQ0hpSSxFQUFJMEcsSUFBTTNPLEVBQUkyTyxHQUNqQixDQUNULEVBRUFnUSxJQUFLLFNBQVN0SixFQUFHMUcsRUFBRzNPLEdBQ2xCLE9BQU8yTyxFQUFLMEcsR0FBS3JWLEVBQUkyTyxFQUN2QixFQUVBb0QsS0FBTSxTQUFjcEQsRUFBRzNPLEdBQ3JCLE1BQU8sSUFBTzJPLEVBQUkzTyxFQUNwQixFQUVBNlMsT0FBUSxTQUFnQmxFLEVBQUczTyxHQUN6QixPQUFPOEwsRUFBTWlHLEtBQUtwRCxFQUFHM08sRUFDdkIsRUFFQTRULEtBQU0sV0FDSixNQUFNLElBQUkrTCxNQUFNLDhCQUNsQixFQUVBdEIsT0FBUSxTQUFnQjFQLEVBQUczTyxHQUN6QixPQUFRMk8sRUFBSSxFQUFJM08sRUFBSSxHQUFNQSxFQUFJLEVBQUkyTyxFQUFJLElBQU0sRUFBSTdDLEVBQU0wQixhQUFlLEVBQ3ZFLEVBRUF5RyxTQUFVLFNBQWtCdEYsRUFBRzNPLEdBQzdCLE9BQU9zSSxFQUFLZ0UsSUFBSXRNLEVBQUkyTyxFQUFHLEdBQUssRUFDOUIsSUFrQ0Y3QyxFQUFNOEIsT0FBTzlCLEVBQU1pVCxTQUFVLENBQzNCTixJQUFLLFNBQWF0VCxFQUFHZ0IsRUFBR2tKLEdBQ3RCLE9BQWMsSUFBTkEsR0FBaUIsSUFBTkEsRUFDZmxKLEVBQUlrSixJQUFPbEssRUFBSSxFQUFJLEVBQ3JCVyxFQUFNa08sWUFBWTdOLEVBQUdoQixHQUFLN0MsRUFBS2dFLElBQUkrSSxFQUFHbEssR0FBSzdDLEVBQUtnRSxJQUFJLEVBQUkrSSxFQUFHbEosRUFBSWhCLEVBQ25FLEVBRUFpUyxJQUFLLFNBQWFuVixFQUFHa0UsRUFBR2tKLEdBQ3RCLElBQUlxTCxFQUNBcEUsRUFBTSxNQUVWLEdBQUlyVSxFQUFJLEVBQ04sT0FBTyxFQUNULEdBQUlBLEdBQUtrRSxFQUNQLE9BQU8sRUFDVCxHQUFJa0osRUFBSSxHQUFLQSxFQUFJLEdBQUtsSixHQUFLLEVBQ3pCLE9BQU8wTixJQUdULElBQUlqQixFQUFJdkQsRUFDSjFHLEdBRkoxRyxFQUFJSyxFQUFLb04sTUFBTXpOLElBRUgsRUFDUmpJLEVBQUltTSxFQUFJbEUsRUFDUjBZLEVBQUloUyxFQUFJM08sRUFDUitiLEVBQUt6VCxFQUFLc0ssSUFBSTlHLEVBQU1pTSxRQUFRNEksR0FBSzdVLEVBQU1pTSxRQUFRL1gsR0FDakM4TCxFQUFNaU0sUUFBUXBKLEdBQUtBLEVBQUlyRyxFQUFLbkosSUFBSXlaLEdBQUs1WSxFQUFJc0ksRUFBS25KLElBQUksRUFBSXlaLElBT3hFLE9BSkU4SCxFQURFOUgsR0FBS2pLLEVBQUksSUFBTWdTLEVBQUksR0FDWDVFLEVBQUtNLEVBQU96RCxFQUFHakssRUFBRzNPLEVBQUdzYyxHQUVyQixFQUFJUCxFQUFLTSxFQUFPLEVBQUl6RCxFQUFHNVksRUFBRzJPLEVBQUcyTixHQUVsQ2hVLEVBQUswTSxNQUF1QixFQUFJc0gsR0FBcEIsRUFBSW9FLEtBQXlCLEVBQUlwRSxFQUN0RCxJQU1GeFEsRUFBTThCLE9BQU85QixFQUFNOFUsT0FBUSxDQUN6Qm5DLElBQUssU0FBYXRULEVBQUcwVixFQUFHeEwsR0FDdEIsT0FBSWxLLElBQU1BLElBQU0sSUFFWkEsRUFBSSxFQUNDLEVBQ0ZXLEVBQU1rTyxZQUFZN08sRUFBSTBWLEVBQUksRUFBR0EsRUFBSSxHQUNwQ3ZZLEVBQUtnRSxJQUFJLEVBQUkrSSxFQUFHbEssR0FBSzdDLEVBQUtnRSxJQUFJK0ksRUFBR3dMLEdBQ3ZDLEVBRUF6RCxJQUFLLFNBQWFuVixFQUFHNFksRUFBR3hMLEdBQ3RCLElBQUkxRCxFQUFNLEVBQ1Z4RyxFQUFJLEVBQ0osR0FBSWxELEVBQUksRUFBRyxPQUFPLEVBQ2xCLEtBQU9rRCxHQUFLbEQsRUFBR2tELElBQ2J3RyxHQUFPN0YsRUFBTThVLE9BQU9uQyxJQUFJdFQsRUFBRzBWLEVBQUd4TCxHQUVoQyxPQUFPMUQsQ0FDVCxJQU1GN0YsRUFBTThCLE9BQU85QixFQUFNZ1YsUUFBUyxDQUMxQnJDLElBQUssU0FBYXRULEVBQUc0VixFQUFHM1UsRUFBR0QsR0FVekIsR0FBR2hCLEdBQU1BLEVBQUksRUFDWCxPQUFPLEVBQ0YsR0FBR0EsRUFBSSxHQUFLQSxFQUFJaUIsR0FBSzJVLEVBQUk1VSxHQUU5QixPQUFPLEVBQ0YsR0FBR2hCLEVBQUlnQixHQUFLaEIsRUFBSWlCLEVBRXJCLE9BQU8sRUFDRixHQUFRLEVBQUpBLEVBQVEyVSxFQUdqQixPQUFPLEVBQUo1VSxFQUFRNFUsRUFHRmpWLEVBQU1nVixRQUFRckMsSUFBSXNDLEVBQUkzVSxFQUFJRCxFQUFJaEIsRUFBRzRWLEVBQUdBLEVBQUkzVSxFQUFHMlUsRUFBSTVVLEdBSS9DTCxFQUFNZ1YsUUFBUXJDLElBQUl0UyxFQUFJaEIsRUFBRzRWLEVBQUdBLEVBQUkzVSxFQUFHRCxHQUd2QyxHQUFPLEVBQUpBLEVBQVE0VSxFQUdoQixPQUFPalYsRUFBTWdWLFFBQVFyQyxJQUFJclMsRUFBSWpCLEVBQUc0VixFQUFHM1UsRUFBRzJVLEVBQUk1VSxHQUVyQyxHQUFHQyxFQUFJRCxFQUdaLE9BQU9MLEVBQU1nVixRQUFRckMsSUFBSXRULEVBQUc0VixFQUFHNVUsRUFBR0MsR0FrQmxDLElBTEEsSUFBSTRVLEVBQVksRUFHWkMsRUFBYyxFQUVWOWIsRUFBSSxFQUFHQSxFQUFJZ0csRUFBR2hHLElBQUssQ0FHekIsS0FBTTZiLEVBQVksR0FBS0MsRUFBYzlVLEdBSW5DNlUsR0FBYSxFQUFLNVUsR0FBSzJVLEVBQUlFLEdBRzNCQSxJQUtGRCxJQUFjN1UsRUFBSWhILElBQU1pSCxFQUFJakgsS0FBT0EsRUFBSSxJQUFNNGIsRUFBSTNVLEVBQUlELEVBQUloSCxFQUFJLEdBQy9ELENBRUEsS0FBTThiLEVBQWM5VSxFQUFHOFUsSUFFckJELEdBQWEsRUFBSzVVLEdBQUsyVSxFQUFJRSxHQUk3QixPQUFPM1ksRUFBS0MsSUFBSSxFQUFHRCxFQUFLRSxJQUFJLEVBQUd3WSxHQUVuQyxFQUVBNUQsSUFBSyxTQUFhblYsRUFBRzhZLEVBQUczVSxFQUFHRCxHQVl6QixHQUFHbEUsRUFBSSxHQUFLQSxFQUFJbUUsR0FBSzJVLEVBQUk1VSxHQUV2QixPQUFPLEVBQ0YsR0FBR2xFLEdBQUtrRSxHQUFLbEUsR0FBS21FLEVBRXZCLE9BQU8sRUFDRixHQUFRLEVBQUpBLEVBQVEyVSxFQUdqQixPQUFPLEVBQUo1VSxFQUFRNFUsRUFHRmpWLEVBQU1nVixRQUFRMUQsSUFBSTJELEVBQUkzVSxFQUFJRCxFQUFJbEUsRUFBRzhZLEVBQUdBLEVBQUkzVSxFQUFHMlUsRUFBSTVVLEdBSS9DLEVBQUlMLEVBQU1nVixRQUFRMUQsSUFBSWpSLEVBQUlsRSxFQUFJLEVBQUc4WSxFQUFHQSxFQUFJM1UsRUFBR0QsR0FHL0MsR0FBTyxFQUFKQSxFQUFRNFUsRUFHaEIsT0FBTyxFQUFJalYsRUFBTWdWLFFBQVExRCxJQUFJaFIsRUFBSW5FLEVBQUksRUFBRzhZLEVBQUczVSxFQUFHMlUsRUFBSTVVLEdBRTdDLEdBQUdDLEVBQUlELEVBR1osT0FBT0wsRUFBTWdWLFFBQVExRCxJQUFJblYsRUFBRzhZLEVBQUc1VSxFQUFHQyxHQXFCbEMsSUFUQSxJQUFJOFUsRUFBWSxFQUlaRixFQUFZLEVBR1pDLEVBQWMsRUFFVjliLEVBQUksRUFBR0EsRUFBSThDLEVBQUc5QyxJQUFLLENBR3pCLEtBQU0rYixFQUFZLEdBQUtELEVBQWM5VSxHQUFHLENBSXRDLElBQUlnVixFQUFTLEVBQUsvVSxHQUFLMlUsRUFBSUUsR0FFM0JELEdBQWFHLEVBQ2JELEdBQWFDLEVBR2JGLEdBQ0YsQ0FPQUMsR0FIQUYsSUFBYzdVLEVBQUloSCxJQUFNaUgsRUFBSWpILEtBQU9BLEVBQUksSUFBTTRiLEVBQUkzVSxFQUFJRCxFQUFJaEgsRUFBSSxHQUkvRCxDQUVBLEtBQU04YixFQUFjOVUsRUFBRzhVLElBRXJCQyxHQUFhLEVBQUs5VSxHQUFLMlUsRUFBSUUsR0FJN0IsT0FBTzNZLEVBQUtDLElBQUksRUFBR0QsRUFBS0UsSUFBSSxFQUFHMFksR0FFbkMsSUFNRnBWLEVBQU04QixPQUFPOUIsRUFBTXNWLFFBQVMsQ0FDMUIzQyxJQUFLLFNBQWF0VCxFQUFHa1csR0FDbkIsT0FBSUEsRUFBSSxHQUFNbFcsRUFBSSxHQUFPLEdBQUtBLEVBQUksRUFDekIsRUFHRjdDLEVBQUtnRSxJQUFJK1UsRUFBR2xXLEdBQUs3QyxFQUFLc0ssS0FBS3lPLEdBQUt2VixFQUFNaU8sVUFBVTVPLEVBQ3pELEVBRUFpUyxJQUFLLFNBQWFuVixFQUFHb1osR0FDbkIsSUFBSUMsRUFBUyxHQUNiblcsRUFBSSxFQUNKLEdBQUlsRCxFQUFJLEVBQUcsT0FBTyxFQUNsQixLQUFPa0QsR0FBS2xELEVBQUdrRCxJQUNibVcsRUFBT25YLEtBQUsyQixFQUFNc1YsUUFBUTNDLElBQUl0VCxFQUFHa1csSUFFbkMsT0FBT3ZWLEVBQU02RixJQUFJMlAsRUFDbkIsRUFFQXZQLEtBQU8sU0FBU3NQLEdBQ2QsT0FBT0EsQ0FDVCxFQUVBcE4sU0FBVyxTQUFTb04sR0FDbEIsT0FBT0EsQ0FDVCxFQUVBRSxZQUFhLFNBQXFCRixHQUNoQyxJQUFJaE0sRUFBSSxFQUFHbEssRUFBSSxFQUFHcVcsRUFBSWxaLEVBQUtzSyxLQUFLeU8sR0FDaEMsR0FDRWxXLElBQ0FrSyxHQUFLdkosRUFBTTBCLG1CQUNKNkgsRUFBSW1NLEdBQ2IsT0FBT3JXLEVBQUksQ0FDYixFQUVBc1csWUFBYSxTQUFxQkosR0FDaEMsSUFDSWxXLEVBQ0F1VyxFQUFHQyxFQUFHQyxFQUFNQyxFQUFRbFQsRUFBRzNPLEVBQUc4aEIsRUFBVUMsRUFBSUMsRUFGeENDLEVBQU1aLEVBV1YsSUFQQU8sRUFBT3RaLEVBQUttTSxLQUFLd04sR0FDakJKLEVBQVN2WixFQUFLbkosSUFBSThpQixHQUVsQnRULEVBQWEsUUFEYjNPLEVBQUksS0FBUSxLQUFPNGhCLEdBQ2QsS0FDTEUsRUFBVyxPQUFTLFFBQVU5aEIsRUFBSSxLQUNsQytoQixFQUFLLE1BQVMsUUFBVS9oQixFQUFJLEtBRWxCLENBS1IsR0FKQTBoQixFQUFJcFosRUFBS21GLFNBQVcsR0FDcEJrVSxFQUFJclosRUFBS21GLFNBQ1R1VSxFQUFLLEdBQU0xWixFQUFLc00sSUFBSThNLEdBQ3BCdlcsRUFBSTdDLEVBQUtvTixPQUFPLEVBQUkvRyxFQUFJcVQsRUFBS2hpQixHQUFLMGhCLEVBQUlPLEVBQU0sS0FDdkNELEdBQU0sS0FBVUwsR0FBS0ksRUFDdEIsT0FBTzVXLEVBRVgsS0FBS0EsRUFBSSxHQUFRNlcsRUFBSyxNQUFXTCxFQUFJSyxJQUtoQzFaLEVBQUtuSixJQUFJd2lCLEdBQUtyWixFQUFLbkosSUFBSTJpQixHQUFZeFosRUFBS25KLElBQUl3UCxHQUFLcVQsRUFBS0EsR0FBTWhpQixJQUFlbUwsRUFBSTBXLEVBQVZJLEVBQW1CblcsRUFBTXNNLE9BQU9qTixFQUFJLEdBQzFHLE9BQU9BLENBRWIsQ0FDRixFQUVBa1QsT0FBUSxTQUFnQmdELEdBQ3RCLE9BQUlBLEVBQUksR0FDQ3hlLEtBQUswZSxZQUFZRixHQUVqQnhlLEtBQUs0ZSxZQUFZSixFQUM1QixJQUlGdlYsRUFBTThCLE9BQU85QixFQUFNb1csV0FBWSxDQUM3QnpELElBQUssU0FBYXhXLEVBQUcwRyxFQUFHM08sRUFBR29GLEdBQ3pCLE9BQUlwRixHQUFLMk8sR0FBS3ZKLEVBQUl1SixHQUFLdkosRUFBSXBGLEVBQ2xCNlosSUFFSDVSLEVBQUkwRyxHQUFLMUcsRUFBSWpJLEVBQ1IsRUFDRWlJLEVBQUk3QyxFQUNILEdBQUs2QyxFQUFJMEcsS0FBUTNPLEVBQUkyTyxJQUFNdkosRUFBSXVKLElBQ2hDMUcsSUFBTTdDLEVBQ0wsR0FBS3BGLEVBQUkyTyxHQUVULEdBQUszTyxFQUFJaUksS0FBUWpJLEVBQUkyTyxJQUFNM08sRUFBSW9GLEdBRy9DLEVBRUFnWSxJQUFLLFNBQWFuVixFQUFHMEcsRUFBRzNPLEVBQUdvRixHQUN6QixPQUFJcEYsR0FBSzJPLEdBQUt2SixFQUFJdUosR0FBS3ZKLEVBQUlwRixFQUNsQjZaLElBQ0w1UixHQUFLMEcsRUFDQSxFQUNBMUcsR0FBS2pJLEVBQ0wsRUFDTGlJLEdBQUs3QyxFQUNBa0QsRUFBS2dFLElBQUlyRSxFQUFJMEcsRUFBRyxLQUFPM08sRUFBSTJPLElBQU12SixFQUFJdUosSUFFckMsRUFBSXJHLEVBQUtnRSxJQUFJdE0sRUFBSWlJLEVBQUcsS0FBT2pJLEVBQUkyTyxJQUFNM08sRUFBSW9GLEdBQ3BELEVBRUF1WixJQUFLLFNBQWF0SixFQUFHMUcsRUFBRzNPLEVBQUdvRixHQUN6QixPQUFJcEYsR0FBSzJPLEdBQUt2SixFQUFJdUosR0FBS3ZKLEVBQUlwRixFQUNsQjZaLElBRUh4RSxJQUFPalEsRUFBSXVKLElBQU0zTyxFQUFJMk8sR0FDaEJBLEdBQUszTyxFQUFJMk8sR0FBS3JHLEVBQUttTSxLQUFLWSxJQUFNalEsRUFBSXVKLElBQU0zTyxFQUFJMk8sS0FFNUNBLEdBQUszTyxFQUFJMk8sSUFBTSxFQUFJckcsRUFBS21NLE1BQU0sRUFBSVksSUFBTSxHQUFNalEsRUFBSXVKLElBQU0zTyxFQUFJMk8sS0FHekUsRUFFQW9ELEtBQU0sU0FBY3BELEVBQUczTyxFQUFHb0YsR0FDeEIsT0FBUXVKLEVBQUkzTyxFQUFJb0YsR0FBSyxDQUN2QixFQUVBeU4sT0FBUSxTQUFnQmxFLEVBQUczTyxFQUFHb0YsR0FDNUIsT0FBSUEsSUFBTXVKLEVBQUkzTyxHQUFLLEVBQ1ZBLEVBQUlzSSxFQUFLbU0sTUFBTXpVLEVBQUkyTyxJQUFNM08sRUFBSW9GLElBQU1rRCxFQUFLbU0sS0FBSyxHQUMzQ3JQLEdBQUt1SixFQUFJM08sR0FBSyxFQUNoQjJPLEVBQUlyRyxFQUFLbU0sTUFBTXpVLEVBQUkyTyxJQUFNdkosRUFBSXVKLElBQU1yRyxFQUFLbU0sS0FBSyxRQUQvQyxDQUdULEVBRUFiLEtBQU0sU0FBY2pGLEVBQUczTyxFQUFHb0YsR0FDeEIsT0FBT0EsQ0FDVCxFQUVBaVosT0FBUSxTQUFnQjFQLEVBQUczTyxFQUFHb0YsR0FDNUIsSUFBSVMsRUFBSWlHLEVBQU0wQixhQUNkLE9BQUkzSCxHQUFNVCxFQUFJdUosSUFBTTNPLEVBQUkyTyxHQUNmQSxFQUFJckcsRUFBS21NLEtBQUs1TyxHQUFLN0YsRUFBSTJPLElBQU12SixFQUFJdUosSUFDbkMzTyxFQUFJc0ksRUFBS21NLE1BQU0sRUFBSTVPLElBQU03RixFQUFJMk8sSUFBTTNPLEVBQUlvRixHQUNoRCxFQUVBNk8sU0FBVSxTQUFrQnRGLEVBQUczTyxFQUFHb0YsR0FDaEMsT0FBUXVKLEVBQUlBLEVBQUkzTyxFQUFJQSxFQUFJb0YsRUFBSUEsRUFBSXVKLEVBQUkzTyxFQUFJMk8sRUFBSXZKLEVBQUlwRixFQUFJb0YsR0FBSyxFQUMzRCxJQUtGMEcsRUFBTThCLE9BQU85QixFQUFNcVcsUUFBUyxDQUMxQjFELElBQUssU0FBYXhXLEVBQUcwRyxFQUFHM08sR0FDdEIsT0FBSUEsR0FBSzJPLEVBQVVrTCxJQUVYNVIsR0FBSzBHLEdBQUsxRyxHQUFLakksRUFBSyxFQUN6QixFQUFJc0ksRUFBS29RLEdBQ1JwUSxFQUFLZ0UsSUFBSWhFLEVBQUtnRSxJQUFJdE0sRUFBSTJPLEVBQUcsR0FDZnJHLEVBQUtnRSxJQUFJLEVBQUlyRSxFQUFJMEcsRUFBSTNPLEVBQUcsSUFBSyxHQUM3QyxFQUVBb2QsSUFBSyxTQUFhblYsRUFBRzBHLEVBQUczTyxHQUN0QixPQUFJaUksRUFBSTBHLEVBQ0MsRUFDQTFHLEVBQUlqSSxFQUNILEVBQUlzSSxFQUFLb1EsR0FBTXBRLEVBQUs4WixLQUFLOVosRUFBS21NLE1BQU14TSxFQUFJMEcsSUFBSTNPLEVBQUkyTyxLQUNuRCxDQUNULEVBRUFnUSxJQUFLLFNBQVN0SixFQUFHMUcsRUFBRzNPLEdBQ2xCLE9BQU8yTyxHQUFLLEdBQU0sR0FBTXJHLEVBQUsrWixJQUFJL1osRUFBS29RLEdBQUtyRCxLQUFPclYsRUFBSTJPLEVBQ3hELEVBRUFvRCxLQUFNLFNBQWNwRCxFQUFHM08sR0FDckIsT0FBSUEsR0FBSzJPLEVBQVVrTCxLQUNYbEwsRUFBSTNPLEdBQUssQ0FDbkIsRUFFQTZTLE9BQVEsU0FBZ0JsRSxFQUFHM08sR0FDekIsT0FBSUEsR0FBSzJPLEVBQVVrTCxLQUNYbEwsRUFBSTNPLEdBQUssQ0FDbkIsRUFFQTRULEtBQU0sV0FDSixNQUFNLElBQUkrTCxNQUFNLDhCQUNsQixFQUVBdEIsT0FBUSxTQUFnQjFQLEVBQUczTyxHQUN6QixPQUFTMk8sRUFBSTNPLEdBQUssR0FBT0EsRUFBSTJPLEdBQUssRUFDaENyRyxFQUFLNlEsSUFBSSxFQUFJN1EsRUFBS29RLEdBQUs1TSxFQUFNMlUsUUFBUXBDLE9BQU8sRUFBRyxHQUNuRCxFQUVBcEssU0FBVSxTQUFrQnRGLEVBQUczTyxHQUM3QixPQUFJQSxHQUFLMk8sRUFBVWtMLElBQ1p2UixFQUFLZ0UsSUFBSXRNLEVBQUkyTyxFQUFHLEdBQUssQ0FDOUIsSUFNRjdDLEVBQU04QixPQUFPOUIsRUFBTXdXLFFBQVMsQ0FDMUI3RCxJQUFLLFNBQWF4VyxFQUFHbVAsRUFBSXBYLEdBQ3ZCLE9BQVFBLEdBQUssRUFBSyxFQUFLc0ksRUFBS3NLLEtBQUt0SyxFQUFLc00sSUFBSTNNLEVBQUltUCxHQUFNcFgsSUFBTyxFQUFJQSxFQUNqRSxFQUVBb2QsSUFBSyxTQUFhblYsRUFBR21QLEVBQUlwWCxHQUN2QixPQUFJQSxHQUFLLEVBQVksRUFFbEJpSSxFQUFJbVAsRUFDRSxHQUFNOU8sRUFBS3NLLEtBQUszSyxFQUFJbVAsR0FBTXBYLEdBRTFCLEVBQUksR0FBTXNJLEVBQUtzSyxNQUFPM0ssRUFBSW1QLEdBQU1wWCxFQUUzQyxFQUVBK1IsS0FBTSxTQUFTcUYsR0FDYixPQUFPQSxDQUNULEVBRUF2RSxPQUFRLFNBQVN1RSxHQUNmLE9BQU9BLENBQ1QsRUFFQXhELEtBQU0sU0FBU3dELEdBQ2IsT0FBT0EsQ0FDVCxFQUVBbkQsU0FBVSxTQUFTbUQsRUFBSXBYLEdBQ3JCLE9BQU8sRUFBSUEsRUFBSUEsQ0FDakIsRUFFQXFlLE9BQVEsU0FBZ0JqSCxFQUFJcFgsR0FDMUIsSUFsQ2lCaUksRUFrQ2JwQyxFQUFJaUcsRUFBTTBCLGFBQWUsR0FFN0IsT0FBTzRKLEVBQU1wWCxJQXBDSWlJLEVBb0NZcEMsR0FwQ0l5QyxFQUFLc00sSUFBSTNNLElBb0NSSyxFQUFLbkosSUFBSSxFQUFLLEVBQUltSixFQUFLc00sSUFBSS9PLEdBQy9ELElBOEpGaUcsRUFBTThCLE9BQU85QixFQUFNeVcsTUFBTyxDQUN4Qm5GLElBQUssU0FBYXRFLEVBQUcwSixFQUFRQyxHQUUzQixJQUNJNUYsRUFBSzJGLEVBZUxFLEVBQVEsQ0FDVixrQkFDQSxrQkFDQSxrQkFDQSxpQkFDQSxrQkFDQSxtQkFDQSxrQkFDQSxvQkFFRUMsRUFBUSxDQUNWLG9CQUNBLG9CQUNBLG1CQUNBLG1CQUNBLG1CQUNBLG1CQUNBLG1CQUNBLG1CQUdGLEdBQUk3SixHQUFLLEVBQ1AsT0FBTyxFQUtULEdBQUkySixFQUFLLEdBQWU1RixFQUFLLEVBQUcsT0FBT2hELElBRXZDLElBQUsrSSxPQUFPQyxTQUFTL0osR0FDbkIsT0FBTyxFQUVULEdBQUkySixFQXJDUSxLQXNDVixPQUFPOUYsRUFBVzdELEVBakRYLEVBaURrQitELEdBSTNCLElBU0lpRyxFQVRBQyxFQUFVLEdBQUxOLEVBQ0xPLEVBQVNELEVBQUt6YSxFQUFLbkosSUFBSXNqQixHQUFRQSxFQUFLbmEsRUFBS25KLElBQUksR0FBTzJNLEVBQU1pTSxRQUFRZ0wsR0FDbEVFLEVBQU1GLEVBQUssRUFNWEcsRUFBVyxJQUFMVCxFQUVZSyxFQUFiTCxHQXZERyxJQUlBLEVBb0RIQSxHQXZERyxJQUlBLEdBb0RIQSxHQXZERyxJQUlBLElBQ0EsS0FxRFpPLEdBQVExYSxFQUFLbkosSUFBSTJqQixHQU1qQixJQUZBLElBQUlLLEVBQU0sRUFFRGhlLEVBQUksRUFBR0EsR0FBSyxHQUFJQSxJQUFLLENBUTVCLElBUEEsSUFBSWllLEVBQVEsRUFLUkMsR0FBUSxFQUFJbGUsRUFBSSxHQUFLMmQsRUFFaEJsRixFQUFLLEVBQUdBLEdBL0VQLEdBK0VvQkEsSUFBTSxDQUNsQyxJQUFJM1EsRUFBR3FXLEVBL0VFLEVBZ0ZJMUYsR0FDWDNRLEVBQUkyUSxFQWpGRyxFQWlGVyxFQUNsQjBGLEVBQU1OLEVBQVFDLEVBQU0zYSxFQUFLbkosSUFBSWtrQixFQUFRWCxFQUFNelYsR0FBSzZWLElBQ3ZDSixFQUFNelYsR0FBSzZWLEVBQVFPLEdBQVFILElBRXBDalcsRUFBSTJRLEVBQUssRUFDVDBGLEVBQU1OLEVBQVFDLEVBQU0zYSxFQUFLbkosSUFBSWtrQixFQUFRWCxFQUFNelYsR0FBSzZWLElBQ3ZDSixFQUFNelYsR0FBSzZWLEVBQVFPLEdBQVFILEdBS2xDSSxJQTFGRyxLQXFHTEYsR0FGV3pHLEVBckdKLEVBNkZNaUIsRUFDSjlFLEVBQUl4USxFQUFLbU0sS0FBa0MsSUFBM0JpTyxFQUFNelYsR0FBSzZWLEVBQVFPLElBRW5DdkssRUFBSXhRLEVBQUttTSxLQUFxQyxLQUE1QmlPLEVBQU16VixHQUFLNlYsRUFBU08sSUFwRzVDLEVBeUc2QnhHLEdBQ1g4RixFQUFNMVYsR0FBTTNFLEVBQUtzSyxJQUFJMFEsR0FLOUMsQ0FLQSxHQUFJbmUsRUFBSTJkLEdBQVEsR0FBT00sR0E3R2QsTUE4R1AsTUFLRkQsR0FBT0MsQ0FDVCxDQUVBLEdBQUlBLEVBdEhPLE1BdUhULE1BQU0sSUFBSXpELE1BQU0sZ0NBSWxCLE9BRkl3RCxFQUFNLElBQ1JBLEVBQU0sR0FDREEsQ0FDVCxFQUVBeEUsSUFBSyxTQUFTdEosRUFBR21OLEVBQVFDLEdBU3ZCLEdBQUlBLEVBQUssR0FOQUQsRUFNb0IsRUFBRyxPQUFPM0ksSUFFdkMsR0FBSXhFLEVBQUksR0FBS0EsRUFBSSxFQUFHLE9BQU93RSxJQUMzQixHQUFVLElBQU54RSxFQUFTLE9BQU8sRUFDcEIsR0FBVSxJQUFOQSxFQUFTLE9BQU82RCxJQUlwQixJQVdJcUssRUFYQWxMLEVBckxSLFNBQW1CaEQsRUFBR2pRLEVBQUcwUixHQUN2QixJQWlCSTBNLEVBQUssR0FBTSxHQUFNbk8sRUFDakJ3RCxFQUFLdlEsRUFBS21NLEtBQUtuTSxFQUFLbkosSUFBSSxHQUFPcWtCLEVBQUtBLEtBQ3BDdlMsRUFBSTRILE9BWEUsaUJBV1FBLEVBYlIsZUFhd0JBLEVBZnhCLGVBZW1DQSxFQWpCbkMsR0FpQjhDQSxFQW5CL0MsbUJBU0EsZUFXQ0EsRUFiRCxjQWFpQkEsRUFmakIsZUFlNEJBLEVBakI1QixlQWlCdUNBLEVBbkJ2QyxlQW9CTC9CLEVBTk8sTUFNRzdGLElBQU1BLEVBQUlBLEVBQUlBLEVBQUlBLEdBQUs2RixFQUFJLEdBQ3pDLElBQUlnQyxFQVpLLE1BQ0EsTUFXUzdILEVBRWxCLE9BREk2RixFQVJPLE1BUUdnQyxJQVhMLE1BV2dCaEMsRUFWaEIsTUFVeUI3RixFQUFJNkYsR0FDL0I3RixHQUFLNkgsRUFBSXhRLEVBQUtuSixJQUFJaUcsRUFBSSxHQVZwQixPQVdYLENBMkphcWUsQ0FBVXBPLEVBZFZtTixFQWNpQkMsR0FJdEJpQixFQUFRNVgsRUFBTXlXLE1BQU1uRixJQUFJL0UsRUFBSW1LLEVBQVFDLEdBQU1wTixFQVM1Q2tPLEVBREVHLEVBQVEsRUFDTHBiLEVBQUtFLElBQUksRUFBSzZQLEVBQUssR0FFbkJBLEVBQUssRUFNWixJQUxBLElBSUk4SyxFQUpBUSxFQUFRN1gsRUFBTXlXLE1BQU1uRixJQUFJbUcsRUFBSWYsRUFBUUMsR0FBTXBOLEVBS3RDdU8sRUFBTyxFQUFHQSxFQWhDSixHQWdDb0JBLElBb0JoQyxHQW5CQVQsRUFBTUksRUFBT0ksR0FBU0osRUFBS2xMLElBQVFzTCxFQUFRRCxHQUMzQ0EsRUFBUUMsRUFJUnRMLEVBQUtrTCxFQUNESixFQUFNLElBQ1JBLEVBQU0sRUFDTlEsR0FBU3RPLEdBSVhzTyxFQUFRN1gsRUFBTXlXLE1BQU1uRixJQUFJK0YsRUFBS1gsRUFBUUMsR0FBTXBOLEVBQzNDa08sRUFBS0osRUFLTTdhLEVBQUtzTSxJQUFJMk8sRUFBS2xMLEdBcERqQixLQXNETixPQUFPOEssRUFHWCxNQUFNLElBQUl4RCxNQUFNLCtCQUNsQixHQUdGLENBM2pEQSxDQTJqREU3VCxFQUFPeEQsTUFJUixTQUFTd0QsRUFBT3hELEdBRWpCLElBb2lCUXFKLEVBQ0FxQyxFQXJpQko3SixFQUFPNEIsTUFBTUMsVUFBVTdCLEtBQ3ZCcUMsRUFBVVYsRUFBTXdCLE1BQU1kLFFBRTFCLFNBQVNxWCxFQUFTcFgsR0FDaEIsT0FBT0QsRUFBUUMsSUFBUUEsYUFBZVgsQ0FDeEMsQ0FFQUEsRUFBTThCLE9BQU8sQ0FHWGtXLElBQUssU0FBYTdkLEVBQUt3RyxHQUVyQixPQUFJb1gsRUFBU3BYLElBQ05vWCxFQUFTcFgsRUFBSSxNQUFLQSxFQUFNLENBQUVBLElBQ3hCWCxFQUFNdkIsSUFBSXRFLEdBQUssU0FBU2tRLEVBQU9sSSxFQUFLRyxHQUN6QyxPQUFPK0gsRUFBUTFKLEVBQUl3QixHQUFLRyxFQUMxQixLQUVLdEMsRUFBTXZCLElBQUl0RSxHQUFLLFNBQVNrUSxHQUFTLE9BQU9BLEVBQVExSixDQUFLLEdBQzlELEVBR0FzWCxTQUFVLFNBQWtCOWQsRUFBS3dHLEdBRS9CLE9BQUlvWCxFQUFTcFgsSUFDTm9YLEVBQVNwWCxFQUFJLE1BQUtBLEVBQU0sQ0FBRUEsSUFDeEJYLEVBQU12QixJQUFJdEUsR0FBSyxTQUFTa1EsRUFBT2xJLEVBQUtHLEdBQ3pDLE9BQU8rSCxFQUFRMUosRUFBSXdCLEdBQUtHLElBQVEsQ0FDbEMsS0FFS3RDLEVBQU12QixJQUFJdEUsR0FBSyxTQUFTa1EsR0FBUyxPQUFPQSxFQUFRMUosQ0FBSyxHQUM5RCxFQUdBdVgsT0FBUSxTQUFnQi9kLEVBQUt3RyxHQUMzQixPQUFJb1gsRUFBU3BYLElBQ05vWCxFQUFTcFgsRUFBSSxNQUFLQSxFQUFNLENBQUVBLElBQ3hCWCxFQUFNbVksU0FBU2hlLEVBQUs2RixFQUFNNlMsSUFBSWxTLEtBRWhDWCxFQUFNdkIsSUFBSXRFLEdBQUssU0FBU2tRLEdBQVMsT0FBT0EsRUFBUTFKLENBQUssR0FDOUQsRUFHQXdYLFNBQVUsU0FBa0JoZSxFQUFLd0csR0FDL0IsSUFBSXdCLEVBQUtHLEVBQUs4VixFQUFVdlMsRUFBSzlDLEVBQU1NLEVBQU1MLEVBQUtxVixFQUU5QyxRQUFtQmxuQixJQUFmZ0osRUFBSXhELGFBQXVDeEYsSUFBZndQLEVBQUloSyxPQUNsQyxPQUFPd0QsRUFBTXdHLEVBTWYsR0FKQW9DLEVBQU81SSxFQUFJeEQsT0FDWDBNLEVBQU9sSixFQUFJLEdBQUd4RCxPQUNkcU0sRUFBTWhELEVBQU15RCxNQUFNVixFQUFNcVYsRUFBWUwsRUFBU3BYLEdBQVFBLEVBQUksR0FBR2hLLE9BQVMwTSxHQUNyRWdWLEVBQVUsRUFDTk4sRUFBU3BYLEdBQU0sQ0FDakIsS0FBTzBYLEVBQVVELEVBQVVDLElBQ3pCLElBQUtsVyxFQUFNLEVBQUdBLEVBQU1ZLEVBQU1aLElBQU8sQ0FFL0IsSUFEQTBELEVBQU0sRUFDRHZELEVBQU0sRUFBR0EsRUFBTWUsRUFBTWYsSUFDMUJ1RCxHQUFPMUwsRUFBSWdJLEdBQUtHLEdBQU8zQixFQUFJMkIsR0FBSytWLEdBQ2hDclYsRUFBSWIsR0FBS2tXLEdBQVd4UyxDQUN0QixDQUVGLE9BQWlCLElBQVQ5QyxHQUEwQixJQUFac1YsRUFBaUJyVixFQUFJLEdBQUcsR0FBS0EsQ0FDckQsQ0FDQSxPQUFPaEQsRUFBTXZCLElBQUl0RSxHQUFLLFNBQVNrUSxHQUFTLE9BQU9BLEVBQVExSixDQUFLLEdBQzlELEVBT0EyWCxNQUFNLFNBQWUxVCxFQUFHQyxHQUN0QixPQUFPN0UsRUFBTW1ZLFNBQVN2VCxFQUFFbkcsS0FBSSxTQUFTMEcsR0FBSSxNQUFPLENBQUNBLEVBQUcsSUFBSSxDQUFDTixHQUMzRCxFQUlBMFQsSUFBSyxTQUFhcGUsRUFBS3dHLEdBQ2hCb1gsRUFBUzVkLEVBQUksTUFBS0EsRUFBTSxDQUFFQSxJQUMxQjRkLEVBQVNwWCxFQUFJLE1BQUtBLEVBQU0sQ0FBRUEsSUFTL0IsSUFQQSxJQU1Ba0YsRUFBS3ZELEVBTkRrVyxFQUEwQixJQUFsQnJlLEVBQUksR0FBR3hELFFBQStCLElBQWZ3RCxFQUFJeEQsT0FBZ0JxSixFQUFNa0QsVUFBVS9JLEdBQU9BLEVBQzlFc2UsRUFBMkIsSUFBbEI5WCxFQUFJLEdBQUdoSyxRQUErQixJQUFmZ0ssRUFBSWhLLE9BQWdCcUosRUFBTWtELFVBQVV2QyxHQUFPQSxFQUMzRXFDLEVBQU0sR0FDTmIsRUFBTSxFQUNOWSxFQUFPeVYsRUFBSzdoQixPQUNaME0sRUFBT21WLEVBQUssR0FBRzdoQixPQUVSd0wsRUFBTVksRUFBTVosSUFBTyxDQUd4QixJQUZBYSxFQUFJYixHQUFPLEdBQ1gwRCxFQUFNLEVBQ0R2RCxFQUFNLEVBQUdBLEVBQU1lLEVBQU1mLElBQzFCdUQsR0FBTzJTLEVBQUtyVyxHQUFLRyxHQUFPbVcsRUFBTXRXLEdBQUtHLEdBQ25DVSxFQUFJYixHQUFPMEQsQ0FDYixDQUNBLE9BQXVCLElBQWY3QyxFQUFJck0sT0FBZ0JxTSxFQUFJLEdBQUtBLENBQ3ZDLEVBR0F4QyxJQUFLLFNBQWFyRyxFQUFLd0csR0FDckIsT0FBT1gsRUFBTXZCLElBQUl0RSxHQUFLLFNBQVNrUSxHQUFTLE9BQU83TixFQUFLZ0UsSUFBSTZKLEVBQU8xSixFQUFNLEdBQ3ZFLEVBR0FtRyxJQUFLLFNBQWEzTSxHQUNoQixPQUFPNkYsRUFBTXZCLElBQUl0RSxHQUFLLFNBQVNrUSxHQUFTLE9BQU83TixFQUFLc0ssSUFBSXVELEVBQVEsR0FDbEUsRUFHQWhYLElBQUssU0FBYThHLEdBQ2hCLE9BQU82RixFQUFNdkIsSUFBSXRFLEdBQUssU0FBU2tRLEdBQVMsT0FBTzdOLEVBQUtuSixJQUFJZ1gsRUFBUSxHQUNsRSxFQUdBdkIsSUFBSyxTQUFhM08sR0FDaEIsT0FBTzZGLEVBQU12QixJQUFJdEUsR0FBSyxTQUFTa1EsR0FBUyxPQUFPN04sRUFBS3NNLElBQUl1QixFQUFRLEdBQ2xFLEVBSUFxTyxLQUFNLFNBQWN2ZSxFQUFLb1AsR0FDdkIsSUFBSW9QLEVBQVEsRUFDWnRmLEVBQUksRUFNSixJQUpJdWYsTUFBTXJQLEtBQUlBLEVBQUksR0FFZHdPLEVBQVM1ZCxFQUFJLE1BQUtBLEVBQU1BLEVBQUksSUFFekJkLEVBQUljLEVBQUl4RCxPQUFRMEMsSUFDckJzZixHQUFTbmMsRUFBS2dFLElBQUloRSxFQUFLc00sSUFBSTNPLEVBQUlkLElBQUtrUSxHQUV0QyxPQUFPL00sRUFBS2dFLElBQUltWSxFQUFPLEVBQUlwUCxFQUM3QixFQUlBc1AsTUFBTyxTQUFlMWUsRUFBS3dHLEdBQ3pCLE9BQU9uRSxFQUFLc2MsS0FBSzlZLEVBQU11WSxJQUFJcGUsRUFBS3dHLElBQVFYLEVBQU0wWSxLQUFLdmUsR0FBTzZGLEVBQU0wWSxLQUFLL1gsSUFDdkUsRUFJQW9ZLElBQUssU0FBYWxXLEVBQUczTyxHQUNuQixJQUNJbUYsRUFEQTJmLEVBQVMsR0FFYixJQUFLM2YsRUFBSSxFQUFHQSxFQUFJd0osRUFBRWxNLE9BQVEwQyxJQUN4QjJmLEVBQU8zYSxLQUFLd0UsRUFBRXhKLEdBQUc4RyxTQUVuQixJQUFLOUcsRUFBSSxFQUFHQSxFQUFJMmYsRUFBT3JpQixPQUFRMEMsSUFDN0JnRixFQUFLMUQsTUFBTXFlLEVBQU8zZixHQUFJbkYsRUFBRW1GLElBRTFCLE9BQU8yZixDQUNULEVBS0FuRyxJQUFLLFNBQWFoUSxHQVVoQixJQVRBLElBTUkxQixFQU5BYSxFQUFPYSxFQUFFbE0sT0FDVHNMLEVBQU9ZLEVBQUUsR0FBR2xNLE9BQ1p6QyxFQUFJOEwsRUFBTTRELFNBQVM1QixFQUFNQyxHQUN6QjNJLEVBQUkwRyxFQUFNaVosYUFBYXBXLEVBQUczTyxHQUMxQm1KLEVBQVMsR0FDVGhFLEVBQUksRUFJREEsRUFBSTJJLEVBQU0zSSxJQUVmLElBREFnRSxFQUFPaEUsR0FBSyxHQUNQOEgsRUFBSWMsRUFBTWQsRUFBSTdILEVBQUUsR0FBRzNDLE9BQVF3SyxJQUM5QjlELEVBQU9oRSxHQUFHOEgsRUFBSWMsR0FBUTNJLEVBQUVELEdBQUc4SCxHQUUvQixPQUFPOUQsQ0FDVCxFQUdBNmIsSUFBSyxTQUFTQSxFQUFJclcsR0FDaEIsR0FBaUIsSUFBYkEsRUFBRWxNLE9BQ0osT0FBT2tNLEVBQUUsR0FBRyxHQUFLQSxFQUFFLEdBQUcsR0FBS0EsRUFBRSxHQUFHLEdBQUtBLEVBQUUsR0FBRyxHQUk1QyxJQURBLElBQUlzVyxFQUFjLEVBQ1Q5ZixFQUFJLEVBQUdBLEVBQUl3SixFQUFFbE0sT0FBUTBDLElBQUssQ0FHakMsSUFEQSxJQUFJK2YsRUFBWSxHQUNQalgsRUFBTSxFQUFHQSxFQUFNVSxFQUFFbE0sT0FBUXdMLElBQU8sQ0FDdkNpWCxFQUFValgsRUFBTSxHQUFLLEdBQ3JCLElBQUssSUFBSUcsRUFBTSxFQUFHQSxFQUFNTyxFQUFFbE0sT0FBUTJMLElBQzVCQSxFQUFNakosRUFDUitmLEVBQVVqWCxFQUFNLEdBQUdHLEdBQU9PLEVBQUVWLEdBQUtHLEdBQ3hCQSxFQUFNakosSUFDZitmLEVBQVVqWCxFQUFNLEdBQUdHLEVBQU0sR0FBS08sRUFBRVYsR0FBS0csR0FHM0MsQ0FHQSxJQUFJK1csRUFBT2hnQixFQUFJLEdBQUssRUFBSSxFQUN4QjhmLEdBQWVELEVBQUlFLEdBQWF2VyxFQUFFLEdBQUd4SixHQUFLZ2dCLENBQzVDLENBRUEsT0FBT0YsQ0FDVCxFQUVBRyxrQkFBbUIsU0FBMkJ6VyxFQUFHM08sR0FDL0MsSUFPQXFsQixFQUFNQyxFQUFPQyxFQUFNcGEsRUFQZmhHLEVBQUksRUFDUjhILEVBQUksRUFDSmQsRUFBSXdDLEVBQUVsTSxPQUNOMkosRUFBSXVDLEVBQUUsR0FBR2xNLE9BQ1QwZSxFQUFTLEVBQ1R4UCxFQUFNLEVBQ04xSixFQUFJLEdBSUosSUFEQW9kLEdBREExVyxFQUFJN0MsRUFBTStZLElBQUlsVyxFQUFHM08sSUFDUixHQUFHeUMsT0FDUjBDLEVBQUksRUFBR0EsRUFBSWdILEVBQUdoSCxJQUFLLENBR3JCLElBRkFtZ0IsRUFBUTNXLEVBQUV4SixHQUFHQSxHQUNiOEgsRUFBSTlILEVBQ0NnRyxFQUFJaEcsRUFBSSxFQUFHZ0csRUFBSWlCLEVBQUdqQixJQUNqQm1hLEVBQVFoZCxFQUFLc00sSUFBSWpHLEVBQUV4RCxHQUFHaEcsTUFDeEJtZ0IsRUFBUTNXLEVBQUV4RCxHQUFHaEcsR0FDYjhILEVBQUk5QixHQUdSLEdBQUk4QixHQUFLOUgsRUFDUCxJQUFJZ0csRUFBSSxFQUFHQSxFQUFJa2EsRUFBTWxhLElBQ25Cb2EsRUFBTzVXLEVBQUV4SixHQUFHZ0csR0FDWndELEVBQUV4SixHQUFHZ0csR0FBS3dELEVBQUUxQixHQUFHOUIsR0FDZndELEVBQUUxQixHQUFHOUIsR0FBS29hLEVBR2QsSUFBS3RZLEVBQUk5SCxFQUFJLEVBQUc4SCxFQUFJZCxFQUFHYyxJQUVyQixJQURBa1UsRUFBU3hTLEVBQUUxQixHQUFHOUgsR0FBS3dKLEVBQUV4SixHQUFHQSxHQUNwQmdHLEVBQUloRyxFQUFHZ0csRUFBSWthLEVBQU1sYSxJQUNuQndELEVBQUUxQixHQUFHOUIsR0FBS3dELEVBQUUxQixHQUFHOUIsR0FBS2dXLEVBQVN4UyxFQUFFeEosR0FBR2dHLEVBR3hDLENBQ0EsSUFBS2hHLEVBQUlnSCxFQUFJLEVBQUdoSCxHQUFLLEVBQUdBLElBQUssQ0FFM0IsSUFEQXdNLEVBQU0sRUFDRDFFLEVBQUk5SCxFQUFJLEVBQUc4SCxHQUFJZCxFQUFJLEVBQUdjLElBQ3pCMEUsR0FBWTFKLEVBQUVnRixHQUFLMEIsRUFBRXhKLEdBQUc4SCxHQUUxQmhGLEVBQUU5QyxJQUFLd0osRUFBRXhKLEdBQUdrZ0IsRUFBTyxHQUFLMVQsR0FBT2hELEVBQUV4SixHQUFHQSxFQUN0QyxDQUNBLE9BQU84QyxDQUNULEVBRUE4YyxhQUFjLFNBQXNCcFcsRUFBRzNPLEdBQ3JDLElBSUlpSSxFQUFHZ1EsRUFBR3VOLEVBSk5wWixFQUFJTixFQUFNK1ksSUFBSWxXLEVBQUczTyxHQUNqQjJaLEVBQUl2TixFQUFFM0osT0FDTm1aLEVBQUl4UCxFQUFFLEdBQUczSixPQUNUMkMsRUFBSSxFQUdSLElBQUs2UyxFQUFJLEVBQUdBLEVBQUkwQixFQUFHMUIsSUFBSyxDQUN0QixJQUFJd04sRUFBU3hOLEVBQ2IsSUFBS3VOLEVBQUt2TixFQUFFLEVBQUd1TixFQUFLN0wsRUFBRzZMLElBQ2pCbGQsRUFBS3NNLElBQUl4SSxFQUFFb1osR0FBSXZOLElBQU0zUCxFQUFLc00sSUFBSXhJLEVBQUVxWixHQUFReE4sTUFDMUN3TixFQUFTRCxHQUViLElBQUkxVCxFQUFNMUYsRUFBRTZMLEdBR1osSUFGQTdMLEVBQUU2TCxHQUFLN0wsRUFBRXFaLEdBQ1RyWixFQUFFcVosR0FBVTNULEVBQ1AwVCxFQUFLdk4sRUFBRSxFQUFHdU4sRUFBSzdMLEVBQUc2TCxJQUVyQixJQURBcGdCLEVBQUlnSCxFQUFFb1osR0FBSXZOLEdBQUs3TCxFQUFFNkwsR0FBR0EsR0FDZmhRLEVBQUlnUSxFQUFHaFEsRUFBSTJULEVBQUczVCxJQUNqQm1FLEVBQUVvWixHQUFJdmQsSUFBTW1FLEVBQUU2TCxHQUFHaFEsR0FBSzdDLENBRzVCLENBRUEsSUFBSzZTLEVBQUkwQixFQUFFLEVBQUcxQixHQUFLLEVBQUdBLElBQUssQ0FFekIsSUFEQTdTLEVBQUlnSCxFQUFFNkwsR0FBR0EsR0FDSnVOLEVBQUssRUFBR0EsRUFBS3ZOLEVBQUd1TixJQUNuQixJQUFLdmQsRUFBSTJULEVBQUUsRUFBRzNULEVBQUlnUSxFQUFFLEVBQUdoUSxJQUNyQm1FLEVBQUVvWixHQUFJdmQsSUFBTW1FLEVBQUU2TCxHQUFHaFEsR0FBS21FLEVBQUVvWixHQUFJdk4sR0FBSzdTLEVBSXJDLElBREFnSCxFQUFFNkwsR0FBR0EsSUFBTTdTLEVBQ042QyxFQUFJMFIsRUFBRzFSLEVBQUkyVCxFQUFHM1QsSUFDakJtRSxFQUFFNkwsR0FBR2hRLElBQU03QyxDQUVmLENBQ0EsT0FBT2dILENBQ1QsRUFZQXNaLFlBQWEsU0FBcUJoVixFQUFHMVEsR0FDbkMsSUFFSTJsQixFQUZBeGhCLEVBQU91TSxFQUFFLEdBQUdqTyxPQUNad0YsRUFBSTZELEVBQU15RCxNQUFNLEVBQUdwTCxHQUFNLEdBRXpCeWhCLEdBQWMsRUFjbEIsT0FabUIzb0IsTUFBZitDLEVBQUUsR0FBR3lDLFNBQ1B6QyxFQUFJQSxFQUFFdUssS0FBSSxTQUFTcEYsR0FBSSxPQUFPQSxFQUFFLEVBQUcsSUFDbkN5Z0IsR0FBYyxHQUdoQjlaLEVBQU13QyxPQUFPbkssRUFBTyxHQUFJLEdBQUksR0FBR29LLFNBQVEsU0FBU3BKLEdBQzlDd2dCLEVBQVE3WixFQUFNd0MsT0FBT25KLEVBQUksRUFBR2hCLEdBQU1vRyxLQUFJLFNBQVMwQyxHQUM3QyxPQUFPaEYsRUFBRWdGLEdBQUt5RCxFQUFFdkwsR0FBRzhILEVBQ3JCLElBQ0FoRixFQUFFOUMsSUFBTW5GLEVBQUVtRixHQUFLMkcsRUFBTTZGLElBQUlnVSxJQUFValYsRUFBRXZMLEdBQUdBLEVBQzFDLElBRUl5Z0IsRUFDSzNkLEVBQUVzQyxLQUFJLFNBQVNwRixHQUFJLE1BQU8sQ0FBQ0EsRUFBRyxJQUNoQzhDLENBQ1QsRUFFQTRkLGFBQWMsU0FBc0JuVixFQUFHMVEsR0FFckMsSUFFSTJsQixFQUZBeGhCLEVBQU91TSxFQUFFLEdBQUdqTyxPQUNad0YsRUFBSTZELEVBQU15RCxNQUFNLEVBQUdwTCxHQUFNLEdBR3pCeWhCLEdBQVksRUFhaEIsT0FabUIzb0IsTUFBZitDLEVBQUUsR0FBR3lDLFNBQ1B6QyxFQUFJQSxFQUFFdUssS0FBSSxTQUFTcEYsR0FBSSxPQUFPQSxFQUFFLEVBQUcsSUFDbkN5Z0IsR0FBYyxHQUdoQjlaLEVBQU13QyxPQUFPbkssR0FBTW9LLFNBQVEsU0FBU3BKLEdBQ2xDd2dCLEVBQVE3WixFQUFNd0MsT0FBT25KLEdBQUdvRixLQUFJLFNBQVMwQyxHQUNuQyxPQUFPeUQsRUFBRXZMLEdBQUc4SCxHQUFLaEYsRUFBRWdGLEVBQ3JCLElBQ0FoRixFQUFFOUMsSUFBTW5GLEVBQUVtRixHQUFLMkcsRUFBTTZGLElBQUlnVSxJQUFValYsRUFBRXZMLEdBQUdBLEVBQzFDLElBRUl5Z0IsRUFDSzNkLEVBQUVzQyxLQUFJLFNBQVNwRixHQUFJLE1BQU8sQ0FBQ0EsRUFBRyxJQUNoQzhDLENBQ1QsRUFPQTZkLEdBQUksU0FBWXBWLEdBQ2QsSUFJSWlWLEVBSkF4aEIsRUFBT3VNLEVBQUVqTyxPQUVUK2UsRUFBSTFWLEVBQU00RCxTQUFTdkwsR0FDbkI0aEIsRUFBSWphLEVBQU15RCxNQUFNbUIsRUFBRWpPLE9BQVFpTyxFQUFFLEdBQUdqTyxRQW1CbkMsT0FqQkFxSixFQUFNd0MsT0FBT25LLEdBQU1vSyxTQUFRLFNBQVMwQyxHQUNsQzhVLEVBQUUsR0FBRzlVLEdBQUtQLEVBQUUsR0FBR08sRUFDakIsSUFDQW5GLEVBQU13QyxPQUFPLEVBQUduSyxHQUFNb0ssU0FBUSxTQUFTOFMsR0FDckN2VixFQUFNd0MsT0FBTytTLEdBQUc5UyxTQUFRLFNBQVNwSixHQUMvQndnQixFQUFRN1osRUFBTXdDLE9BQU9uSixHQUFHb0YsS0FBSSxTQUFTcVQsR0FDbkMsT0FBTzRELEVBQUVILEdBQUd6RCxHQUFNbUksRUFBRW5JLEdBQUl6WSxFQUMxQixJQUNBcWMsRUFBRUgsR0FBR2xjLElBQU11TCxFQUFFMlEsR0FBR2xjLEdBQUsyRyxFQUFNNkYsSUFBSWdVLElBQVVJLEVBQUU1Z0IsR0FBR0EsRUFDaEQsSUFDQTJHLEVBQU13QyxPQUFPK1MsRUFBR2xkLEdBQU1vSyxTQUFRLFNBQVN0QixHQUNyQzBZLEVBQVE3WixFQUFNd0MsT0FBTytTLEdBQUc5VyxLQUFJLFNBQVNxVCxHQUNuQyxPQUFPNEQsRUFBRUgsR0FBR3pELEdBQU1tSSxFQUFFbkksR0FBSTNRLEVBQzFCLElBQ0E4WSxFQUFFMUUsR0FBR3BVLEdBQUt5RCxFQUFFaVYsRUFBTWxqQixRQUFRd0ssR0FBS25CLEVBQU02RixJQUFJZ1UsRUFDM0MsR0FDRixJQUNPLENBQUNuRSxFQUFHdUUsRUFDYixFQUtBQyxTQUFVLFNBQWtCdFYsR0FDMUIsSUFFSWlWLEVBRkF4aEIsRUFBT3VNLEVBQUVqTyxPQUNUd2pCLEVBQUluYSxFQUFNeUQsTUFBTW1CLEVBQUVqTyxPQUFRaU8sRUFBRSxHQUFHak8sUUFjbkMsT0FaQXFKLEVBQU13QyxPQUFPbkssR0FBTW9LLFNBQVEsU0FBU3BKLEdBQ2xDd2dCLEVBQVE3WixFQUFNd0MsT0FBT25KLEdBQUdvRixLQUFJLFNBQVMwRyxHQUNuQyxPQUFPM0ksRUFBS2dFLElBQUkyWixFQUFFOWdCLEdBQUc4TCxHQUFHLEVBQzFCLElBQ0FnVixFQUFFOWdCLEdBQUdBLEdBQUttRCxFQUFLbU0sS0FBSy9ELEVBQUV2TCxHQUFHQSxHQUFLMkcsRUFBTTZGLElBQUlnVSxJQUN4QzdaLEVBQU13QyxPQUFPbkosRUFBSSxFQUFHaEIsR0FBTW9LLFNBQVEsU0FBU3RCLEdBQ3pDMFksRUFBUTdaLEVBQU13QyxPQUFPbkosR0FBR29GLEtBQUksU0FBUzBHLEdBQ25DLE9BQU9nVixFQUFFOWdCLEdBQUc4TCxHQUFLZ1YsRUFBRWhaLEdBQUdnRSxFQUN4QixJQUNBZ1YsRUFBRWhaLEdBQUc5SCxJQUFNdUwsRUFBRXZMLEdBQUc4SCxHQUFLbkIsRUFBTTZGLElBQUlnVSxJQUFVTSxFQUFFOWdCLEdBQUdBLEVBQ2hELEdBQ0YsSUFDTzhnQixDQUNULEVBR0FDLGFBQWMsU0FBc0J2WCxFQUFHM08sRUFBR2lJLEVBQUc0WSxHQVEzQyxJQVBBLElBTUlzRixFQUFJL2dCLEVBQUd1VSxFQUFHeU0sRUFOVmpoQixFQUFJLEVBQ0o4SCxFQUFJLEVBQ0pkLEVBQUl3QyxFQUFFbE0sT0FDTjRlLEVBQUksR0FDSnhiLEVBQUksR0FDSjZULEVBQUksR0FFRHZVLEVBQUlnSCxFQUFHaEgsSUFJWixJQUhBa2MsRUFBRWxjLEdBQUssR0FDUFUsRUFBRVYsR0FBSyxHQUNQdVUsRUFBRXZVLEdBQUssR0FDRjhILEVBQUksRUFBR0EsRUFBSWQsRUFBR2MsSUFDYjlILEVBQUk4SCxHQUNOb1UsRUFBRWxjLEdBQUc4SCxHQUFLMEIsRUFBRXhKLEdBQUc4SCxHQUNmcEgsRUFBRVYsR0FBRzhILEdBQUt5TSxFQUFFdlUsR0FBRzhILEdBQUssR0FDWDlILEVBQUk4SCxHQUNicEgsRUFBRVYsR0FBRzhILEdBQUswQixFQUFFeEosR0FBRzhILEdBQ2ZvVSxFQUFFbGMsR0FBRzhILEdBQUt5TSxFQUFFdlUsR0FBRzhILEdBQUssSUFFcEJ5TSxFQUFFdlUsR0FBRzhILEdBQUswQixFQUFFeEosR0FBRzhILEdBQ2ZvVSxFQUFFbGMsR0FBRzhILEdBQUtwSCxFQUFFVixHQUFHOEgsR0FBSyxHQVMxQixJQUxBME0sRUFBSTdOLEVBQU1tWSxTQUFTblksRUFBTW1ZLFNBQVNuWSxFQUFNNlMsSUFBSWpGLEdBQUk1TixFQUFNZ1ksSUFBSXpDLEVBQUd4YixLQUFNLEdBQ25FVCxFQUFJMEcsRUFBTW1ZLFNBQVNuWSxFQUFNNlMsSUFBSWpGLEdBQUkxWixHQUNqQ21tQixFQUFLbGUsRUFDTG1lLEVBQUt0YSxFQUFNZ1ksSUFBSWhZLEVBQU1tWSxTQUFTdEssRUFBRzFSLEdBQUk3QyxHQUNyQ0QsRUFBSSxFQUNHbUQsRUFBS3NNLElBQUk5SSxFQUFNMFksS0FBSzFZLEVBQU1pWSxTQUFTcUMsRUFBR0QsS0FBUXRGLEdBQ25Ec0YsRUFBS0MsRUFDTEEsRUFBS3RhLEVBQU1nWSxJQUFJaFksRUFBTW1ZLFNBQVN0SyxFQUFHd00sR0FBSy9nQixHQUN0Q0QsSUFFRixPQUFPaWhCLENBQ1QsRUFFQUMsYUFBYyxTQUFzQjFYLEVBQUczTyxFQUFHaUksRUFBRzRZLEdBTzNDLElBTkEsSUFLSTVULEVBQUdrWixFQUFJL2dCLEVBQUd1VSxFQUFHeU0sRUFMYmpoQixFQUFJLEVBQ0pnSCxFQUFJd0MsRUFBRWxNLE9BQ040ZSxFQUFJLEdBQ0p4YixFQUFJLEdBQ0o2VCxFQUFJLEdBRUR2VSxFQUFJZ0gsRUFBR2hILElBSVosSUFIQWtjLEVBQUVsYyxHQUFLLEdBQ1BVLEVBQUVWLEdBQUssR0FDUHVVLEVBQUV2VSxHQUFLLEdBQ0Y4SCxFQUFJLEVBQUdBLEVBQUlkLEVBQUdjLElBQ2I5SCxFQUFJOEgsR0FDTm9VLEVBQUVsYyxHQUFHOEgsR0FBSzBCLEVBQUV4SixHQUFHOEgsR0FDZnBILEVBQUVWLEdBQUc4SCxHQUFLeU0sRUFBRXZVLEdBQUc4SCxHQUFLLEdBQ1g5SCxFQUFJOEgsR0FDYnBILEVBQUVWLEdBQUc4SCxHQUFLMEIsRUFBRXhKLEdBQUc4SCxHQUNmb1UsRUFBRWxjLEdBQUc4SCxHQUFLeU0sRUFBRXZVLEdBQUc4SCxHQUFLLElBRXBCeU0sRUFBRXZVLEdBQUc4SCxHQUFLMEIsRUFBRXhKLEdBQUc4SCxHQUNmb1UsRUFBRWxjLEdBQUc4SCxHQUFLcEgsRUFBRVYsR0FBRzhILEdBQUssR0FTMUIsSUFMQTBNLEVBQUk3TixFQUFNbVksU0FBU25ZLEVBQU1tWSxTQUFTblksRUFBTTZTLElBQUk3UyxFQUFNZ1ksSUFBSXBLLEVBQUcySCxJQUFLeGIsSUFBSyxHQUNuRVQsRUFBSTBHLEVBQU1tWSxTQUFTblksRUFBTTZTLElBQUk3UyxFQUFNZ1ksSUFBSXBLLEVBQUcySCxJQUFLcmhCLEdBQy9DbW1CLEVBQUtsZSxFQUNMbWUsRUFBS3RhLEVBQU1nWSxJQUFJaFksRUFBTW1ZLFNBQVN0SyxFQUFHMVIsR0FBSTdDLEdBQ3JDRCxFQUFJLEVBQ0dtRCxFQUFLc00sSUFBSTlJLEVBQU0wWSxLQUFLMVksRUFBTWlZLFNBQVNxQyxFQUFJRCxLQUFRdEYsR0FDcERzRixFQUFLQyxFQUNMQSxFQUFLdGEsRUFBTWdZLElBQUloWSxFQUFNbVksU0FBU3RLLEVBQUd3TSxHQUFLL2dCLEdBQ3RDRCxHQUFRLEVBRVYsT0FBT2loQixDQUNULEVBRUFFLElBQUssU0FBYTNYLEVBQUczTyxFQUFHaUksRUFBRzRZLEVBQUdqRixHQU81QixJQU5BLElBS0kzTyxFQUFHa1osRUFBSS9nQixFQUFHdVUsRUFBR3lNLEVBTGJqaEIsRUFBSSxFQUNKZ0gsRUFBSXdDLEVBQUVsTSxPQUNONGUsRUFBSSxHQUNKeGIsRUFBSSxHQUNKNlQsRUFBSSxHQUVEdlUsRUFBSWdILEVBQUdoSCxJQUlaLElBSEFrYyxFQUFFbGMsR0FBSyxHQUNQVSxFQUFFVixHQUFLLEdBQ1B1VSxFQUFFdlUsR0FBSyxHQUNGOEgsRUFBSSxFQUFHQSxFQUFJZCxFQUFHYyxJQUNiOUgsRUFBSThILEdBQ05vVSxFQUFFbGMsR0FBRzhILEdBQUswQixFQUFFeEosR0FBRzhILEdBQ2ZwSCxFQUFFVixHQUFHOEgsR0FBS3lNLEVBQUV2VSxHQUFHOEgsR0FBSyxHQUNYOUgsRUFBSThILEdBQ2JwSCxFQUFFVixHQUFHOEgsR0FBSzBCLEVBQUV4SixHQUFHOEgsR0FDZm9VLEVBQUVsYyxHQUFHOEgsR0FBS3lNLEVBQUV2VSxHQUFHOEgsR0FBSyxJQUVwQnlNLEVBQUV2VSxHQUFHOEgsR0FBSzBCLEVBQUV4SixHQUFHOEgsR0FDZm9VLEVBQUVsYyxHQUFHOEgsR0FBS3BILEVBQUVWLEdBQUc4SCxHQUFLLEdBWTFCLElBUkEwTSxFQUFJN04sRUFBTW1ZLFNBQVNuWSxFQUFNNlMsSUFBSTdTLEVBQU1nWSxJQUFJcEssRUFBRzVOLEVBQU1tWSxTQUFTNUMsRUFBR3pGLEtBQ3pDOVAsRUFBTWlZLFNBQVNqWSxFQUFNbVksU0FBU3ZLLEVBQUcsRUFBSWtDLEdBQ3RCOVAsRUFBTW1ZLFNBQVNwZSxFQUFHK1YsS0FDcER4VyxFQUFJMEcsRUFBTW1ZLFNBQVNuWSxFQUFNbVksU0FBU25ZLEVBQU02UyxJQUFJN1MsRUFBTWdZLElBQUlwSyxFQUNsRDVOLEVBQU1tWSxTQUFTNUMsRUFBR3pGLEtBQU01YixHQUFJNGIsR0FDaEN1SyxFQUFLbGUsRUFDTG1lLEVBQUt0YSxFQUFNZ1ksSUFBSWhZLEVBQU1tWSxTQUFTdEssRUFBRzFSLEdBQUk3QyxHQUNyQ0QsRUFBSSxFQUNHbUQsRUFBS3NNLElBQUk5SSxFQUFNMFksS0FBSzFZLEVBQU1pWSxTQUFTcUMsRUFBSUQsS0FBUXRGLEdBQ3BEc0YsRUFBS0MsRUFDTEEsRUFBS3RhLEVBQU1nWSxJQUFJaFksRUFBTW1ZLFNBQVN0SyxFQUFHd00sR0FBSy9nQixHQUN0Q0QsSUFFRixPQUFPaWhCLENBQ1QsRUFFQUcsWUFBYSxTQUFxQjVYLEdBT2hDLElBTkEsSUFLSStQLEVBQU9tQyxFQUFHMVYsRUFBRzhCLEVBTGJiLEVBQUl1QyxFQUFFbE0sT0FDTjBKLEVBQUl3QyxFQUFFLEdBQUdsTSxPQUNUMEMsRUFBSSxFQUNKeVcsRUFBSSxHQUNKdkcsRUFBSSxHQUVEbFEsRUFBSWlILEVBQUksRUFBR2pILElBQUssQ0FFckIsSUFEQXVaLEVBQVEsRUFDSHpSLEVBQUk5SCxFQUFJLEVBQUc4SCxFQUFJZCxFQUFHYyxJQUN2QnlSLEdBQVUvUCxFQUFFMUIsR0FBRzlILEdBQUt3SixFQUFFMUIsR0FBRzlILEdBTXpCLElBSkF1WixHQURVL1AsRUFBRXhKLEVBQUksR0FBR0EsR0FBSyxHQUFNLEVBQUksR0FDakJtRCxFQUFLbU0sS0FBS2lLLEdBQzNCbUMsRUFBSXZZLEVBQUttTSxNQUFRaUssRUFBUUEsRUFBUy9QLEVBQUV4SixFQUFJLEdBQUdBLEdBQUt1WixHQUFTLElBQ3pEOUMsRUFBSTlQLEVBQU15RCxNQUFNbkQsRUFBRyxJQUNqQmpILEVBQUksR0FBRyxJQUFNd0osRUFBRXhKLEVBQUksR0FBR0EsR0FBS3VaLElBQVUsRUFBSW1DLEdBQ3RDMVYsRUFBSWhHLEVBQUksRUFBR2dHLEVBQUlpQixFQUFHakIsSUFBS3lRLEVBQUV6USxHQUFHLEdBQUt3RCxFQUFFeEQsR0FBR2hHLElBQU0sRUFBSTBiLEdBQ3JEeEwsRUFBSXZKLEVBQU1pWSxTQUFTalksRUFBTTRELFNBQVN0RCxFQUFHRCxHQUNqQ0wsRUFBTW1ZLFNBQVNuWSxFQUFNbVksU0FBU3JJLEVBQUc5UCxFQUFNa0QsVUFBVTRNLElBQUssSUFDMURqTixFQUFJN0MsRUFBTW1ZLFNBQVM1TyxFQUFHdkosRUFBTW1ZLFNBQVN0VixFQUFHMEcsR0FDMUMsQ0FDQSxPQUFPMUcsQ0FDVCxFQUtBNlgsSUFPTTdVLEVBQVE3RixFQUFNNkYsSUFDZHFDLEVBQVFsSSxFQUFNd0MsT0FFbEIsU0FBYXJHLEdBSVgsSUFNSTlDLEVBQUU4SCxFQUFFOUIsRUFOSmdCLEVBQUlsRSxFQUFFeEYsT0FDTjRTLEVBQUlwTixFQUFFLEdBQUd4RixPQUVUb2UsRUFBSS9VLEVBQU15RCxNQUFNOEYsRUFBR0EsR0FJdkIsSUFIQXBOLEVBQUk2RCxFQUFNdUUsS0FBS3BJLEdBR1hnRixFQUFJLEVBQUdBLEVBQUlvSSxFQUFHcEksSUFBSSxDQUlwQixJQUhBNFQsRUFBRTVULEdBQUdBLEdBQUszRSxFQUFLbU0sS0FBSzlDLEVBQUlxQyxFQUFNN0gsR0FBRzVCLEtBQUksU0FBU3BGLEdBQzVDLE9BQU84QyxFQUFFOUMsR0FBRzhILEdBQUtoRixFQUFFOUMsR0FBRzhILEVBQ3hCLE1BQ0k5SCxFQUFJLEVBQUdBLEVBQUlnSCxFQUFHaEgsSUFDaEI4QyxFQUFFOUMsR0FBRzhILEdBQUtoRixFQUFFOUMsR0FBRzhILEdBQUs0VCxFQUFFNVQsR0FBR0EsR0FFM0IsSUFBSTlCLEVBQUk4QixFQUFFLEVBQUc5QixFQUFJa0ssRUFBR2xLLElBSWxCLElBSEEwVixFQUFFNVQsR0FBRzlCLEdBQUt3RyxFQUFJcUMsRUFBTTdILEdBQUc1QixLQUFJLFNBQVNwRixHQUNsQyxPQUFPOEMsRUFBRTlDLEdBQUc4SCxHQUFLaEYsRUFBRTlDLEdBQUdnRyxFQUN4QixLQUNJaEcsRUFBSSxFQUFHQSxFQUFJZ0gsRUFBR2hILElBQ2hCOEMsRUFBRTlDLEdBQUdnRyxHQUFLbEQsRUFBRTlDLEdBQUdnRyxHQUFLbEQsRUFBRTlDLEdBQUc4SCxHQUFHNFQsRUFBRTVULEdBQUc5QixFQUd2QyxDQUNBLE1BQU8sQ0FBQ2xELEVBQUc0WSxFQUNiLEdBS0Y0RixNQTBCRSxTQUFrQi9WLEVBQUcxUSxHQUNuQixJQUFJMG1CLEdBQWEsT0FDR3pwQixJQUFoQitDLEVBQUUsR0FBR3lDLFNBRVB6QyxFQUFJQSxFQUFFdUssS0FBSSxTQUFTdEMsR0FBSSxNQUFPLENBQUNBLEVBQUcsSUFDbEN5ZSxHQUFhLEdBRWYsSUFBSUYsRUFBSzFhLEVBQU0wYSxHQUFHOVYsR0FDZGlXLEVBQUlILEVBQUcsR0FDUFQsRUFBSVMsRUFBRyxHQUNQSSxFQUFRbFcsRUFBRSxHQUFHak8sT0FDYm9rQixFQUFLL2EsRUFBTUcsTUFBTTBhLEVBQUUsQ0FBQ3ZZLElBQUksQ0FBQzhCLElBQUkwVyxLQUU3QkUsRUFuQ04sU0FBYXBXLEdBRVgsSUFBSXZNLEdBREp1TSxFQUFJNUUsRUFBTXVFLEtBQUtLLElBQ0ZqTyxPQUNUc2tCLEVBQUlqYixFQUFNNEQsU0FBU3ZMLEdBZ0J2QixPQWZBMkgsRUFBTXdDLE9BQU9uSyxFQUFPLEdBQUksR0FBSSxHQUFHb0ssU0FBUSxTQUFTcEosR0FDOUMyRyxFQUFNMkUsWUFDRnNXLEVBQUcsQ0FBRTlZLElBQUs5SSxHQUFLMkcsRUFBTWtZLE9BQU9sWSxFQUFNRyxNQUFNOGEsRUFBRyxDQUFFOVksSUFBSzlJLElBQU11TCxFQUFFdkwsR0FBR0EsS0FDakUyRyxFQUFNMkUsWUFDRkMsRUFBRyxDQUFFekMsSUFBSzlJLEdBQUsyRyxFQUFNa1ksT0FBT2xZLEVBQU1HLE1BQU15RSxFQUFHLENBQUV6QyxJQUFLOUksSUFBTXVMLEVBQUV2TCxHQUFHQSxLQUNqRTJHLEVBQU13QyxPQUFPbkosR0FBR29KLFNBQVEsU0FBU3RCLEdBQy9CLElBQUk3SCxFQUFJMEcsRUFBTW1ZLFNBQVN2VCxFQUFFekQsR0FBRzlILElBQUssR0FDN0I2aEIsRUFBS2xiLEVBQU1HLE1BQU15RSxFQUFHLENBQUV6QyxJQUFLaEIsSUFDM0JnYSxFQUFNbmIsRUFBTW1ZLFNBQVNuWSxFQUFNRyxNQUFNeUUsRUFBRyxDQUFFekMsSUFBSzlJLElBQU1DLEdBQ3JEMEcsRUFBTTJFLFlBQVlDLEVBQUcsQ0FBRXpDLElBQUtoQixHQUFLbkIsRUFBTWdZLElBQUlrRCxFQUFJQyxJQUMvQyxJQUFJQyxFQUFLcGIsRUFBTUcsTUFBTThhLEVBQUcsQ0FBRTlZLElBQUtoQixJQUMzQmthLEVBQU1yYixFQUFNbVksU0FBU25ZLEVBQU1HLE1BQU04YSxFQUFHLENBQUU5WSxJQUFLOUksSUFBTUMsR0FDckQwRyxFQUFNMkUsWUFBWXNXLEVBQUcsQ0FBRTlZLElBQUtoQixHQUFLbkIsRUFBTWdZLElBQUlvRCxFQUFJQyxHQUNqRCxHQUNGLElBQ09KLENBQ1QsQ0FlV0ssQ0FEQXRiLEVBQU1HLE1BQU04WixFQUFFLENBQUM5WCxJQUFJLENBQUNpQyxJQUFJMFcsTUFFN0JTLEVBQUt2YixFQUFNa0QsVUFBVTZYLFFBRUw1cEIsSUFBakJvcUIsRUFBRyxHQUFHNWtCLFNBQ1A0a0IsRUFBSyxDQUFDQSxJQUdSLElBQUlwZixFQUFJNkQsRUFBTW1ZLFNBQVNuWSxFQUFNbVksU0FBUzZDLEVBQUlPLEdBQUtybkIsR0FPL0MsWUFMZ0IvQyxJQUFiZ0wsRUFBRXhGLFNBQ0h3RixFQUFJLENBQUMsQ0FBQ0EsS0FJSnllLEVBQ0t6ZSxFQUFFc0MsS0FBSSxTQUFTcEYsR0FBSSxPQUFPQSxFQUFFLEVBQUcsSUFDakM4QyxDQUNULEVBS0ZxZixPQUFRLFNBQWdCM1ksR0FPdEIsSUFOQSxJQUlPeEosRUFBRzhILEVBQUdvSSxFQUFHeUQsRUFBR3lPLEVBQU9DLEVBQU83RyxFQUo3QjhHLEVBQVksRUFDWnRiLEVBQUl3QyxFQUFFbE0sT0FDTnpCLEVBQUk4SyxFQUFNNEQsU0FBU3ZELEVBQUdBLEdBQ3RCdWIsRUFBSyxHQUdZLElBQWRELEdBQWlCLENBSXRCLElBSEFGLEVBQVE1WSxFQUFFLEdBQUcsR0FDYjBHLEVBQUksRUFDSnlELEVBQUksRUFDQzNULEVBQUksRUFBR0EsRUFBSWdILEVBQUdoSCxJQUNqQixJQUFLOEgsRUFBSSxFQUFHQSxFQUFJZCxFQUFHYyxJQUNiOUgsR0FBSzhILEdBQ0hzYSxFQUFRamYsRUFBS3NNLElBQUlqRyxFQUFFeEosR0FBRzhILE1BQ3hCc2EsRUFBUWpmLEVBQUtzTSxJQUFJakcsRUFBRXhKLEdBQUc4SCxJQUN0Qm9JLEVBQUlsUSxFQUNKMlQsRUFBSTdMLEdBbUJaLElBYkV1YSxFQURFN1ksRUFBRTBHLEdBQUdBLEtBQU8xRyxFQUFFbUssR0FBR0EsR0FDVm5LLEVBQUUwRyxHQUFHeUQsR0FBSyxFQUFLeFEsRUFBS29RLEdBQUssR0FBS3BRLEVBQUtvUSxHQUFLLEVBRXpDcFEsRUFBSzZXLEtBQUssRUFBSXhRLEVBQUUwRyxHQUFHeUQsSUFBTW5LLEVBQUUwRyxHQUFHQSxHQUFLMUcsRUFBRW1LLEdBQUdBLEtBQU8sR0FDekQ2SCxFQUFJN1UsRUFBTTRELFNBQVN2RCxFQUFHQSxJQUNwQmtKLEdBQUdBLEdBQUsvTSxFQUFLK1osSUFBSW1GLEdBQ25CN0csRUFBRXRMLEdBQUd5RCxJQUFNeFEsRUFBSzZRLElBQUlxTyxHQUNwQjdHLEVBQUU3SCxHQUFHekQsR0FBSy9NLEVBQUs2USxJQUFJcU8sR0FDbkI3RyxFQUFFN0gsR0FBR0EsR0FBS3hRLEVBQUsrWixJQUFJbUYsR0FFbkJ4bUIsRUFBSThLLEVBQU1tWSxTQUFTampCLEVBQUcyZixHQUV0QmhTLEVBREk3QyxFQUFNbVksU0FBU25ZLEVBQU1tWSxTQUFTblksRUFBTTZTLElBQUlnQyxHQUFJaFMsR0FBSWdTLEdBRXBEOEcsRUFBWSxFQUNQdGlCLEVBQUksRUFBR0EsRUFBSWdILEVBQUdoSCxJQUNqQixJQUFLOEgsRUFBSSxFQUFHQSxFQUFJZCxFQUFHYyxJQUNiOUgsR0FBSzhILEdBQUszRSxFQUFLc00sSUFBSWpHLEVBQUV4SixHQUFHOEgsSUFBTSxPQUNoQ3dhLEVBQVksRUFJcEIsQ0FDQSxJQUFLdGlCLEVBQUksRUFBR0EsRUFBSWdILEVBQUdoSCxJQUFLdWlCLEVBQUd2ZCxLQUFLd0UsRUFBRXhKLEdBQUdBLElBRXJDLE1BQU8sQ0FBQ25FLEVBQUcwbUIsRUFDYixFQUVBQyxXQUFZLFNBQW9CM0osRUFBR3JFLEVBQUd0RSxFQUFHdVMsRUFBS0MsRUFBS0MsR0FDakQsSUFBSUMsRUFBSUMsRUFBVUMsRUFDbEIsR0FBYyxJQUFWSCxFQUNGLEtBQU9GLEdBQU92UyxHQUlad1MsS0FIQUUsRUFBS3BPLEVBQUlxRSxFQUFFNEosRUFBS0MsS0FDaEJHLEVBQUtyTyxFQUFJcUUsRUFBRTRKLEVBQU1qTyxFQUFHa08sRUFBTUUsS0FDRCxFQUV6QkgsR0FBWWpPLEVBR2hCLEdBQWMsSUFBVm1PLEVBQ0YsS0FBT0YsR0FBT3ZTLEdBTVp3UyxLQUxBRSxFQUFLcE8sRUFBSXFFLEVBQUU0SixFQUFLQyxJQUlHLEdBSG5CRyxFQUFLck8sRUFBSXFFLEVBQUU0SixFQUFNak8sRUFBSSxFQUFHa08sRUFBTUUsRUFBSyxJQUdQLEdBRjVCRSxFQUFLdE8sRUFBSXFFLEVBQUU0SixFQUFNak8sRUFBSSxFQUFHa08sRUFBTUcsRUFBSyxJQUM5QnJPLEVBQUlxRSxFQUFFNEosRUFBS2pPLEVBQUdrTyxFQUFNSSxJQUNrQixFQUUzQ0wsR0FBWWpPLEVBR2hCLE9BQU9rTyxDQUNULEVBRUFLLFFBQVMsU0FBaUJsSyxFQUFHclAsRUFBRzNPLEVBQUc4bkIsR0FPakMsSUFOQSxJQUtJMWIsRUFBRzRPLEVBQUkvTixFQUFHOUIsRUFBRzRiLEVBTGI1aEIsRUFBSSxFQUNKd1UsR0FBSzNaLEVBQUkyTyxHQUFLLEVBQ2QxRyxFQUFJLEdBQ0prZ0IsRUFBSyxHQUNMQyxFQUFJLEdBRURqakIsRUFBSTJpQixFQUFRLEdBQUcsQ0FFcEIsSUFEQWYsRUFBSS9JLEVBQUVyUCxHQUNEMUIsRUFBSTBCLEVBQUd4RCxFQUFJLEVBQUc4QixHQUFLak4sRUFBR2lOLEdBQVEwTSxFQUFHeE8sSUFBS2xELEVBQUVrRCxHQUFLOEIsRUFFbEQsSUFEQWIsRUFBSW5FLEVBQUV4RixPQUNEd0ssRUFBSSxFQUFHQSxFQUFJYixFQUFJLEVBQUdhLElBQ3JCOFosSUFBUTlaLEVBQUksR0FBTyxFQUFLLEVBQUksR0FBSytRLEVBQUUvVixFQUFFZ0YsSUFFdkM4WixFQUFLcE4sRUFBSSxHQUFNb04sRUFBSS9JLEVBQUVoZSxJQUNyQm9vQixFQUFFampCLEdBQUs0aEIsRUFDUHBOLEdBQUssRUFDTHhVLEdBQ0YsQ0FHQSxJQUZBNlYsRUFBS29OLEVBQUUzbEIsT0FDUDJKLEVBQUksRUFDVSxJQUFQNE8sR0FBVSxDQUNmLElBQUsvTixFQUFJLEVBQUdBLEVBQUkrTixFQUFLLEVBQUcvTixJQUN4QmtiLEVBQUdsYixJQUFPM0UsRUFBS2dFLElBQUksRUFBR0YsR0FBTWdjLEVBQUVuYixFQUFJLEdBQUttYixFQUFFbmIsS0FBTzNFLEVBQUtnRSxJQUFJLEVBQUdGLEdBQUssR0FDakU0TyxFQUFLbU4sRUFBRzFsQixPQUNSMmxCLEVBQUlELEVBQ0pBLEVBQUssR0FDTC9iLEdBQ0YsQ0FDQSxPQUFPZ2MsQ0FDVCxFQUVBQyxXQUFZLFNBQW9CQyxFQUFHdEssRUFBRy9WLEVBQUcwUixHQUN2QyxTQUFTNE8sRUFBSUQsRUFBR3JnQixHQUlkLElBSEEsSUFFSW9OLEVBRkFsUSxFQUFJLEVBQ0pnSCxFQUFJbWMsRUFBRTdsQixPQUVIMEMsRUFBSWdILEVBQUdoSCxJQUNSbWpCLEVBQUVuakIsS0FBTzhDLElBQUdvTixFQUFJbFEsR0FDdEIsT0FBT2tRLENBQ1QsQ0FNQSxJQUxBLElBSUltVCxFQUFJaEQsRUFBSXBaLEVBQUd1QyxFQUFHMUIsRUFKZHdiLEVBQVFuZ0IsRUFBS3NNLElBQUkzTSxFQUFJcWdCLEVBQUVDLEVBQUlELEVBQUdyZ0IsR0FBSyxJQUNuQzlDLEVBQUksRUFDSmlqQixFQUFJLEdBQ0pELEVBQUssR0FFRnhPLEdBQUs4TyxHQUNWRCxFQUFLRCxFQUFJRCxFQUFHcmdCLEVBQUkwUixHQUNoQjZMLEVBQUsrQyxFQUFJRCxFQUFHcmdCLEdBQ1ptZ0IsRUFBRWpqQixJQUFNNlksRUFBRXdLLEdBQU0sRUFBSXhLLEVBQUV3SCxHQUFNeEgsRUFBRSxFQUFJd0gsRUFBS2dELEtBQVE3TyxFQUFJQSxHQUNuREEsR0FBSyxFQUNMeFUsSUFJRixJQUZBd0osRUFBSXlaLEVBQUUzbEIsT0FDTjJKLEVBQUksRUFDUSxHQUFMdUMsR0FBUSxDQUNiLElBQUsxQixFQUFJLEVBQUdBLEVBQUkwQixFQUFJLEVBQUcxQixJQUNyQmtiLEVBQUdsYixJQUFPM0UsRUFBS2dFLElBQUksRUFBR0YsR0FBTWdjLEVBQUVuYixFQUFJLEdBQUttYixFQUFFbmIsS0FBTzNFLEVBQUtnRSxJQUFJLEVBQUdGLEdBQUssR0FDbkV1QyxFQUFJd1osRUFBRzFsQixPQUNQMmxCLEVBQUlELEVBQ0pBLEVBQUssR0FDTC9iLEdBQ0YsQ0FDQSxPQUFPZ2MsQ0FDVCxFQUVBTSxRQUFTLFNBQWlCMUssRUFBR3JQLEVBQUczTyxFQUFHbU0sR0FRakMsSUFQQSxJQU1JQyxFQU5BdU4sR0FBSzNaLEVBQUkyTyxHQUFLeEMsRUFDZDRhLEVBQUkvSSxFQUFFclAsR0FDTjFHLEVBQUksR0FDSmdGLEVBQUkwQixFQUNKeEQsRUFBSSxFQUNKaEcsRUFBSSxFQUVEOEgsR0FBS2pOLEVBQUdpTixHQUFRME0sRUFBR3hPLElBQ3hCbEQsRUFBRWtELEdBQUs4QixFQUVULElBREFiLEVBQUluRSxFQUFFeEYsT0FDQzBDLEVBQUlpSCxFQUFJLEVBQUdqSCxJQUNoQjRoQixJQUFPNWhCLEVBQUksR0FBTSxFQUFLLEVBQUksR0FBSzZZLEVBQUUvVixFQUFFOUMsSUFFckMsT0FBUXdVLEVBQUksR0FBTW9OLEVBQUkvSSxFQUFFaGUsR0FDMUIsRUFFQTJvQixRQUFTLFNBQWlCTCxFQUFHTSxFQUFHQyxFQUFJMVMsR0FTbEMsSUFSQSxJQU9JbEosRUFQQWQsRUFBSW1jLEVBQUU3bEIsT0FDTjRTLEVBQUksRUFDSmxRLEVBQUksRUFDSmtjLEVBQUksR0FDSnlILEVBQUssR0FDTHBZLEVBQUksR0FDSkMsRUFBSSxHQUVEeEwsRUFBSWdILEVBQUdoSCxJQUFLLENBRWpCLElBREFrYyxFQUFFbGMsR0FBSyxFQUNGOEgsRUFBSSxFQUFHQSxFQUFJZCxFQUFHYyxJQUNiOUgsR0FBSzhILElBQUdvVSxFQUFFbGMsS0FBT2dSLEVBQVFtUyxFQUFFcmIsS0FBT3FiLEVBQUVuakIsR0FBS21qQixFQUFFcmIsS0FHakQsSUFEQTZiLEVBQUczakIsR0FBSyxFQUNIOEgsRUFBSSxFQUFHQSxFQUFJZCxFQUFHYyxJQUNiOUgsR0FBSzhILElBQUc2YixFQUFHM2pCLElBQU0sR0FBS21qQixFQUFHbmpCLEdBQUttakIsRUFBRXJiLEtBRXRDeUQsRUFBRXZMLElBQU0sRUFBSSxHQUFLZ1IsRUFBUW1TLEVBQUVuakIsSUFBTTJqQixFQUFHM2pCLEtBQU9rYyxFQUFFbGMsR0FBS2tjLEVBQUVsYyxJQUNwRHdMLEVBQUV4TCxJQUFNZ1IsRUFBUW1TLEVBQUVuakIsS0FBT2tjLEVBQUVsYyxHQUFLa2MsRUFBRWxjLElBQ2xDa1EsR0FBTTNFLEVBQUV2TCxHQUFLeWpCLEVBQUV6akIsR0FBS3dMLEVBQUV4TCxHQUFLMGpCLEVBQUcxakIsRUFDaEMsQ0FDQSxPQUFPa1EsQ0FDVCxFQUVBMFQsU0FBVSxTQUFrQlQsRUFBR00sRUFBR3pTLEdBS2hDLElBSkEsSUFFSWxKLEVBQUdvVSxFQUZIaE0sRUFBSSxFQUNKbFEsRUFBSSxFQUVKZ0gsRUFBSW1jLEVBQUU3bEIsT0FDSDBDLEVBQUlnSCxFQUFHaEgsSUFBSyxDQUVqQixJQURBa2MsRUFBSXVILEVBQUV6akIsR0FDRDhILEVBQUksRUFBR0EsRUFBSWQsRUFBR2MsSUFFYjlILEdBQUs4SCxJQUFHb1UsSUFBTWxMLEVBQVFtUyxFQUFFcmIsS0FBT3FiLEVBQUVuakIsR0FBS21qQixFQUFFcmIsS0FHOUNvSSxHQUFLZ00sQ0FDUCxDQUNBLE9BQU9oTSxDQUNULEVBRUEyVCxhQUFjLFNBQXNCVixFQUFHTSxFQUFHelMsR0FVeEMsSUFUQSxJQUNXbEosRUFJUDdILEVBTEErRyxFQUFJbWMsRUFBRTdsQixPQUNOMEMsRUFBSSxFQUNKdUwsRUFBSSxHQUNKQyxFQUFJLEdBQ0orTixFQUFRLEdBRVIvRSxFQUFJLEdBQ0ozWixFQUFJLEdBQ0owWixFQUFJLEdBQ0R2VSxFQUFJZ0gsRUFBSSxFQUFHaEgsSUFDaEJ3VSxFQUFFeFUsR0FBS21qQixFQUFFbmpCLEVBQUksR0FBS21qQixFQUFFbmpCLEdBRXRCLElBREF1WixFQUFNLEdBQUssRUFDTnZaLEVBQUksRUFBR0EsRUFBSWdILEVBQUksRUFBR2hILElBQ3JCdVosRUFBTXZaLEdBQU0sRUFBSXdVLEVBQUV4VSxJQUFPeWpCLEVBQUV6akIsRUFBSSxHQUFLeWpCLEVBQUV6akIsSUFDakMsRUFBSXdVLEVBQUV4VSxFQUFFLElBQU95akIsRUFBRXpqQixHQUFLeWpCLEVBQUV6akIsRUFBRSxJQUVqQyxJQUFLQSxFQUFJLEVBQUdBLEVBQUlnSCxFQUFJLEVBQUdoSCxJQUNyQnVMLEVBQUV2TCxHQUFLLEdBQ1B3TCxFQUFFeEwsR0FBSyxHQUNQdUwsRUFBRXZMLEdBQUdBLEVBQUUsR0FBS3dVLEVBQUV4VSxFQUFFLEdBQ2hCdUwsRUFBRXZMLEdBQUdBLEdBQUssR0FBS3dVLEVBQUV4VSxFQUFJLEdBQUt3VSxFQUFFeFUsSUFDNUJ1TCxFQUFFdkwsR0FBR0EsRUFBRSxHQUFLd1UsRUFBRXhVLEdBQ2R3TCxFQUFFeEwsR0FBRyxHQUFLdVosRUFBTXZaLEdBR2xCLElBREFDLEVBQUkwRyxFQUFNbVksU0FBU25ZLEVBQU02UyxJQUFJak8sR0FBSUMsR0FDNUIxRCxFQUFJLEVBQUdBLEVBQUlkLEVBQUksRUFBR2MsSUFDckJqTixFQUFFaU4sSUFBTTJiLEVBQUUzYixFQUFJLEdBQUsyYixFQUFFM2IsSUFBTTBNLEVBQUUxTSxHQUFLME0sRUFBRTFNLElBQU03SCxFQUFFNkgsRUFBSSxHQUFHLEdBQUssRUFBSTdILEVBQUU2SCxHQUFHLElBQU0sRUFDdkV5TSxFQUFFek0sSUFBTTdILEVBQUU2SCxFQUFJLEdBQUcsR0FBSzdILEVBQUU2SCxHQUFHLEtBQU8sRUFBSTBNLEVBQUUxTSxJQUUxQyxJQUFLQSxFQUFJLEVBQUdBLEVBQUlkLEtBQ1ZtYyxFQUFFcmIsR0FBS2tKLEdBRE1sSixLQUluQixPQUFPMmIsRUFEUDNiLEdBQUssSUFDVWtKLEVBQVFtUyxFQUFFcmIsSUFBTWpOLEVBQUVpTixHQUFLbkIsRUFBTW1kLEdBQUc5UyxFQUFNbVMsRUFBRXJiLElBQ25EN0gsRUFBRTZILElBQU1rSixFQUFRbVMsRUFBRXJiLElBQU1uQixFQUFNbWQsR0FBRzlTLEVBQVFtUyxFQUFFcmIsSUFBTXlNLEVBQUV6TSxFQUN6RCxFQUVBaWMsaUJBQWtCLFdBQ2hCLE1BQU0sSUFBSXZKLE1BQU0sdUNBQ2xCLEVBRUF3SixJQUFLLFNBQWFiLEdBQ2hCLElBR0lyYixFQUFHbWMsRUFHSGpnQixFQUdBa2dCLEVBR0ExSCxFQVpBdlYsRUFBSWtjLEVBQUU3bEIsT0FDTjBKLEVBQUltYyxFQUFFLEdBQUc3bEIsT0FDVDBDLEVBQUksRUFFSlUsRUFBSSxHQUNKeWpCLEVBQUksR0FFSkMsRUFBUSxHQUNSQyxFQUFJLEdBRUo3WSxFQUFJLEdBQ0o4WSxFQUFJLEdBRUpDLEVBQUssR0FDVCxJQUFLdmtCLEVBQUksRUFBR0EsRUFBSWlILEVBQUdqSCxJQUNqQlUsRUFBRVYsR0FBSzJHLEVBQU02RixJQUFJMlcsRUFBRW5qQixJQUFNZ0gsRUFFM0IsSUFBS2hILEVBQUksRUFBR0EsRUFBSWdILEVBQUdoSCxJQUVqQixJQURBd0wsRUFBRXhMLEdBQUssR0FDSDhILEVBQUksRUFBR0EsRUFBSWIsRUFBR2EsSUFDaEIwRCxFQUFFeEwsR0FBRzhILEdBQUtxYixFQUFFcmIsR0FBRzlILEdBQUtVLEVBQUVvSCxHQUkxQixJQURBMEQsRUFBSTdFLEVBQU1rRCxVQUFVMkIsR0FDZnhMLEVBQUksRUFBR0EsRUFBSWlILEVBQUdqSCxJQUVqQixJQURBc2tCLEVBQUV0a0IsR0FBSyxHQUNGOEgsRUFBSSxFQUFHQSxFQUFJYixFQUFHYSxJQUNqQndjLEVBQUV0a0IsR0FBRzhILEdBQU1uQixFQUFNdVksSUFBSSxDQUFDMVQsRUFBRXhMLElBQUssQ0FBQ3dMLEVBQUUxRCxNQUFTZCxFQUFJLEdBT2pELElBSEF3VixHQURBeFksRUFBUzJDLEVBQU13YixPQUFPbUMsSUFDWCxHQUNYSCxFQUFJbmdCLEVBQU8sR0FDWHVnQixFQUFLNWQsRUFBTWtELFVBQVUyUyxHQUNoQnhjLEVBQUksRUFBR0EsRUFBSW1rQixFQUFFN21CLE9BQVEwQyxJQUN4QixJQUFLOEgsRUFBSTlILEVBQUc4SCxFQUFJcWMsRUFBRTdtQixPQUFRd0ssSUFDckJxYyxFQUFFbmtCLEdBQUtta0IsRUFBRXJjLEtBQ1ZtYyxFQUFRRSxFQUFFbmtCLEdBQ1Zta0IsRUFBRW5rQixHQUFLbWtCLEVBQUVyYyxHQUNUcWMsRUFBRXJjLEdBQUttYyxFQUNQRyxFQUFRRyxFQUFHdmtCLEdBQ1h1a0IsRUFBR3ZrQixHQUFLdWtCLEVBQUd6YyxHQUNYeWMsRUFBR3pjLEdBQUtzYyxHQUtkLElBREFGLEVBQUt2ZCxFQUFNa0QsVUFBVTJCLEdBQ2hCeEwsRUFBSSxFQUFHQSxFQUFJaUgsRUFBR2pILElBRWpCLElBREFxa0IsRUFBRXJrQixHQUFLLEdBQ0Y4SCxFQUFJLEVBQUdBLEVBQUlvYyxFQUFHNW1CLE9BQVF3SyxJQUN6QnVjLEVBQUVya0IsR0FBRzhILEdBQUtuQixFQUFNdVksSUFBSSxDQUFDcUYsRUFBR3ZrQixJQUFLLENBQUNra0IsRUFBR3BjLEtBR3JDLE1BQU8sQ0FBQ3FiLEVBQUdnQixFQUFHSSxFQUFJRixFQUNwQixJQUlELFNBQVNuWSxHQUNSLElBQUssSUFBSWxNLEVBQUksRUFBR0EsRUFBSWtNLEVBQU01TyxPQUFRMEMsS0FBTSxTQUFTbU0sR0FDL0N4RixFQUFNb0IsR0FBR29FLEdBQVksU0FBUzdFLEVBQUtyRyxHQUNqQyxJQUFJc1IsRUFBVTdVLEtBRWQsT0FBSXVELEdBQ0Z1RCxZQUFXLFdBQ1R2RCxFQUFLc0csS0FBS2dMLEVBQVM1TCxFQUFNb0IsR0FBR29FLEdBQVU1RSxLQUFLZ0wsRUFBU2pMLEdBQ3RELEdBQUcsSUFDSTVKLE1BRWlDLGlCQUEvQmlKLEVBQU13RixHQUFVek8sS0FBTTRKLEdBQ3hCWCxFQUFNd0YsR0FBVXpPLEtBQU00SixHQUV0QlgsRUFBTUEsRUFBTXdGLEdBQVV6TyxLQUFNNEosR0FDdkMsQ0FDRixDQWZ1QyxDQWVyQzRFLEVBQU1sTSxHQUNWLENBakJBLENBaUJFLDhEQUE4RHFNLE1BQU0sS0FFdEUsQ0F0OEJBLENBczhCRTFGLEVBQU94RCxNQUNSLFNBQVN3RCxFQUFPeEQsR0FFakIsSUFBSTJELEVBQVEsR0FBR0EsTUFDWFcsRUFBV2QsRUFBTXdCLE1BQU1WLFNBQ3ZCSixFQUFVVixFQUFNd0IsTUFBTWQsUUF3VDFCLFNBQVNtZCxFQUF3QkMsRUFBSUMsRUFBSUMsRUFBSUMsR0FDM0MsR0FBSUgsRUFBSyxHQUFLRSxFQUFLLEdBQUtGLEdBQU0sR0FBS0UsR0FBTSxFQUN2QyxNQUFNLElBQUluSyxNQUFNLHdEQUVsQixJQUFJcUssR0FBVUosRUFBS0MsRUFBS0MsRUFBS0MsSUFBT0YsRUFBS0UsR0FFekMsT0FBUUgsRUFBS0UsR0FESnhoQixFQUFLbU0sS0FBS3VWLEdBQVUsRUFBSUEsSUFBWSxFQUFFSCxFQUFPLEVBQUVFLEdBRTFELENBM1RBamUsRUFBTThCLE9BQU8sQ0FJWHFjLE9BQVEsV0FDTixJQUFJcGxCLEVBQU9vSCxFQUFNUyxLQUFLcEQsV0FDdEIsT0FBSXNELEVBQVMvSCxFQUFLLEtBQ1JBLEVBQUssR0FBS0EsRUFBSyxJQUFNQSxFQUFLLElBRTVCQSxFQUFLLEdBQUtpSCxFQUFNaUcsS0FBS2xOLEVBQUssS0FBT2lILEVBQU0wSSxNQUFNM1AsRUFBSyxHQUFJQSxFQUFLLEdBQ3JFLEVBTUFxbEIsTUFBTyxXQUNMLElBQ0l0UixFQURBL1QsRUFBT29ILEVBQU1TLEtBQUtwRCxXQUV0QixPQUFJa0QsRUFBUTNILEVBQUssS0FFZitULEVBQUk5TSxFQUFNbWUsT0FBT3BsQixFQUFLLEdBQUdBLEVBQUssR0FBR0EsRUFBSyxJQUNsQixJQUFaQSxFQUFLLEdBQ1ZpSCxFQUFNcVIsT0FBT0MsS0FBSzlVLEVBQUtzTSxJQUFJZ0UsR0FBSSxFQUFHLEdBQ0csRUFBckM5TSxFQUFNcVIsT0FBT0MsS0FBSzlVLEVBQUtzTSxJQUFJZ0UsR0FBSSxFQUFHLElBRWpDL1QsRUFBS3BDLE9BQVMsR0FFaEJtVyxFQUFJOU0sRUFBTW1lLE9BQU9wbEIsRUFBSyxHQUFHQSxFQUFLLEdBQUdBLEVBQUssSUFDbEIsSUFBWkEsRUFBSyxHQUNWaUgsRUFBTXFSLE9BQU9DLEtBQUs5VSxFQUFLc00sSUFBSWdFLEdBQUcsRUFBRSxHQUNJLEVBQXBDOU0sRUFBTXFSLE9BQU9DLEtBQUs5VSxFQUFLc00sSUFBSWdFLEdBQUcsRUFBRSxLQUduQ0EsRUFBSS9ULEVBQUssR0FDVyxJQUFaQSxFQUFLLEdBQ1ZpSCxFQUFNcVIsT0FBT0MsS0FBSzlVLEVBQUtzTSxJQUFJZ0UsR0FBRyxFQUFFLEdBQ0csRUFBbkM5TSxFQUFNcVIsT0FBT0MsS0FBSzlVLEVBQUtzTSxJQUFJZ0UsR0FBRyxFQUFFLEdBR3pDLElBR0Y5TSxFQUFNOEIsT0FBTzlCLEVBQU1vQixHQUFJLENBQ3JCK2MsT0FBUSxTQUFnQjlULEVBQU9qQyxHQUM3QixPQUFRaUMsRUFBUXRULEtBQUtrUCxRQUFVbFAsS0FBSzJSLE1BQU1OLEVBQzVDLEVBRUFnVyxNQUFPLFNBQWUvVCxFQUFPZ1UsRUFBT2pXLEdBQ2xDLElBQUkrVixFQUFTM2hCLEVBQUtzTSxJQUFJL1IsS0FBS29uQixPQUFPOVQsRUFBT2pDLElBQ3pDLE9BQWtCLElBQVZpVyxFQUNMcmUsRUFBTXFSLE9BQU9DLEtBQUs2TSxFQUFRLEVBQUcsR0FDSyxFQUFsQ25lLEVBQU1xUixPQUFPQyxLQUFLNk0sRUFBUSxFQUFHLEVBQ2xDLElBSUZuZSxFQUFNOEIsT0FBTyxDQUlYd2MsT0FBUSxXQUNOLElBQUl2bEIsRUFBT29ILEVBQU1TLEtBQUtwRCxXQUN0QixPQUF3QixJQUFoQnpFLEVBQUtwQyxRQUNUb0MsRUFBSyxHQUFLQSxFQUFLLEtBQU9BLEVBQUssR0FBS3lELEVBQUttTSxLQUFLNVAsRUFBSyxNQUMvQ0EsRUFBSyxHQUFLaUgsRUFBTWlHLEtBQUtsTixFQUFLLE1BQzFCaUgsRUFBTTBJLE1BQU0zUCxFQUFLLElBQUksR0FBUXlELEVBQUttTSxLQUFLNVAsRUFBSyxHQUFHcEMsUUFDckQsRUFNQTRuQixNQUFPLFdBQ0wsSUFDSUQsRUFEQXZsQixFQUFPb0gsRUFBTVMsS0FBS3BELFdBRXRCLE9BQW9CLElBQWhCekUsRUFBS3BDLFFBQ1AybkIsRUFBUzloQixFQUFLc00sSUFBSTlJLEVBQU1zZSxPQUFPdmxCLEVBQUssR0FBSUEsRUFBSyxHQUFJQSxFQUFLLEdBQUlBLEVBQUssS0FDM0MsSUFBWkEsRUFBSyxHQUNWaUgsRUFBTWlVLFNBQVMzQyxLQUFLZ04sRUFBUXZsQixFQUFLLEdBQUcsR0FDRyxFQUF2Q2lILEVBQU1pVSxTQUFTM0MsS0FBS2dOLEVBQVF2bEIsRUFBSyxHQUFHLElBRXJDK0gsRUFBUy9ILEVBQUssS0FDaEJ1bEIsRUFBUzloQixFQUFLc00sSUFBSS9QLEVBQUssSUFDSixHQUFYQSxFQUFLLEdBQ1ZpSCxFQUFNaVUsU0FBUzNDLEtBQUtnTixFQUFRdmxCLEVBQUssR0FBRyxHQUNLLEVBQXpDaUgsRUFBTWlVLFNBQVMzQyxLQUFLZ04sRUFBUXZsQixFQUFLLEdBQUcsS0FFekN1bEIsRUFBUzloQixFQUFLc00sSUFBSTlJLEVBQU1zZSxPQUFPdmxCLEVBQUssR0FBSUEsRUFBSyxLQUMxQixHQUFYQSxFQUFLLEdBQ1ZpSCxFQUFNaVUsU0FBUzNDLEtBQUtnTixFQUFRdmxCLEVBQUssR0FBR3BDLE9BQU8sR0FDSyxFQUFoRHFKLEVBQU1pVSxTQUFTM0MsS0FBS2dOLEVBQVF2bEIsRUFBSyxHQUFHcEMsT0FBTyxHQUNoRCxJQUdGcUosRUFBTThCLE9BQU85QixFQUFNb0IsR0FBSSxDQUNyQmtkLE9BQVEsU0FBZ0JqVSxHQUN0QixPQUFRQSxFQUFRdFQsS0FBS2tQLFNBQVdsUCxLQUFLMlIsT0FBTSxHQUFRbE0sRUFBS21NLEtBQUs1UixLQUFLa0wsUUFDcEUsRUFFQXNjLE1BQU8sU0FBZWxVLEVBQU9nVSxHQUMzQixPQUFrQixJQUFWQSxFQUNMLEVBQUlyZSxFQUFNaVUsU0FBUzNDLElBQUk5VSxFQUFLc00sSUFBSS9SLEtBQUt1bkIsT0FBT2pVLElBQVN0VCxLQUFLa0wsT0FBTyxHQUNBLEVBQWpFakMsRUFBTWlVLFNBQVMzQyxLQUFLOVUsRUFBS3NNLElBQUkvUixLQUFLdW5CLE9BQU9qVSxJQUFTdFQsS0FBS2tMLE9BQU8sRUFDbkUsSUFJRmpDLEVBQU04QixPQUFPLENBS1gwYyxZQUFhLFdBQ1gsSUFDQUMsRUFBUWxNLEVBQVFtTSxFQUFVQyxFQUFjQyxFQUFTQyxFQUFVeGxCLEVBQUc4SCxFQUQxRHBJLEVBQU9vSCxFQUFNUyxLQUFLcEQsV0FFdEIsR0FBb0IsSUFBaEJ6RSxFQUFLcEMsT0FBYyxDQUVyQixJQURBaW9CLEVBQVUsSUFBSTNlLE1BQU1sSCxFQUFLLEdBQUdwQyxRQUN2QjBDLEVBQUksRUFBR0EsRUFBSU4sRUFBSyxHQUFHcEMsT0FBUTBDLElBQzlCdWxCLEVBQVF2bEIsR0FBS04sRUFBSyxHQUFHTSxHQUV2Qk4sRUFBTzZsQixDQUNULENBR0EsSUFEQXJNLEVBQVMsSUFBSXRTLE1BQ1I1RyxFQUFJLEVBQUdBLEVBQUlOLEVBQUtwQyxPQUFRMEMsSUFDM0JrWixFQUFTQSxFQUFPMVQsT0FBTzlGLEVBQUtNLElBSzlCLElBSEFxbEIsRUFBVzFlLEVBQU1pRyxLQUFLc00sR0FFdEJrTSxFQUFTLEVBQ0pwbEIsRUFBSSxFQUFHQSxFQUFJTixFQUFLcEMsT0FBUTBDLElBQzNCb2xCLEdBQWtCMWxCLEVBQUtNLEdBQUcxQyxPQUFTNkYsRUFBS2dFLElBQUlSLEVBQU1pRyxLQUFLbE4sRUFBS00sSUFBTXFsQixFQUFVLEdBSzlFLElBSEFELEdBQVcxbEIsRUFBS3BDLE9BQVMsRUFFekJrb0IsRUFBVyxFQUNOeGxCLEVBQUksRUFBR0EsRUFBSU4sRUFBS3BDLE9BQVEwQyxJQUUzQixJQURBc2xCLEVBQWUzZSxFQUFNaUcsS0FBS2xOLEVBQUtNLElBQzFCOEgsRUFBSSxFQUFHQSxFQUFJcEksRUFBS00sR0FBRzFDLE9BQVF3SyxJQUM5QjBkLEdBQVlyaUIsRUFBS2dFLElBQUl6SCxFQUFLTSxHQUFHOEgsR0FBS3dkLEVBQWMsR0FJcEQsT0FBT0YsR0FEUEksR0FBYXRNLEVBQU81YixPQUFTb0MsRUFBS3BDLFFBRXBDLEVBS0Ftb0IsV0FBWSxXQUNWLElBQ0EvTCxFQUFLQyxFQUFLM1MsRUFBR2hILEVBRFROLEVBQU9vSCxFQUFNUyxLQUFLcEQsV0FFdEIsR0FBSXNELEVBQVMvSCxFQUFLLElBQ2hCLE9BQU8sRUFBSWlILEVBQU04UyxTQUFTeEIsSUFBSXZZLEVBQUssR0FBSUEsRUFBSyxHQUFJQSxFQUFLLElBRXZELElBQUl5bEIsRUFBY3hlLEVBQU13ZSxZQUFZemxCLEdBR3BDLElBRkFnYSxFQUFNaGEsRUFBS3BDLE9BQVMsRUFDcEIwSixFQUFJLEVBQ0NoSCxFQUFJLEVBQUdBLEVBQUlOLEVBQUtwQyxPQUFRMEMsSUFDM0JnSCxHQUFRdEgsRUFBS00sR0FBRzFDLE9BR2xCLE9BREFxYyxFQUFNM1MsRUFBSTBTLEVBQU0sRUFDVCxFQUFJL1MsRUFBTThTLFNBQVN4QixJQUFJa04sRUFBYXpMLEVBQUtDLEVBQ2xELEVBRUErTCxNQUFPLFNBQWVDLEVBQVFqTSxFQUFLQyxHQUNqQyxPQUFPLEVBQUloVCxFQUFNOFMsU0FBU3hCLElBQUkwTixFQUFRak0sRUFBS0MsRUFDN0MsSUFHRmhULEVBQU04QixPQUFPOUIsRUFBTW9CLEdBQUksQ0FDckJvZCxZQUFhLFdBQ1gsT0FBT3hlLEVBQU13ZSxZQUFZem5CLEtBQUt1SyxVQUNoQyxFQUVBMmQsVUFBVyxXQUNULElBQ0k1bEIsRUFEQWdILEVBQUksRUFFUixJQUFLaEgsRUFBSSxFQUFHQSxFQUFJdEMsS0FBS0osT0FBUTBDLElBQzNCZ0gsR0FBUXRKLEtBQUtzQyxHQUFHMUMsT0FFbEIsT0FBT3FKLEVBQU0rZSxNQUFNaG9CLEtBQUt5bkIsY0FBZXpuQixLQUFLSixPQUFTLEVBQUcwSixFQUFJdEosS0FBS0osT0FDbkUsSUFJRnFKLEVBQU04QixPQUFPLENBSVhvZCxPQUFRLFdBQ04sSUFDSUMsRUFBT0MsRUFBT3JCLEVBQUlFLEVBQUlvQixFQUR0QnRtQixFQUFPb0gsRUFBTVMsS0FBS3BELFdBZXRCLE9BYklzRCxFQUFTL0gsRUFBSyxLQUNkb21CLEVBQVFwbUIsRUFBSyxHQUNicW1CLEVBQVFybUIsRUFBSyxHQUNiZ2xCLEVBQUtobEIsRUFBSyxHQUNWa2xCLEVBQUtsbEIsRUFBSyxHQUNWc21CLEVBQUt0bUIsRUFBSyxLQUVWb21CLEVBQVFuZixFQUFNaUcsS0FBS2xOLEVBQUssSUFDeEJxbUIsRUFBUXBmLEVBQU1pRyxLQUFLbE4sRUFBSyxJQUN4QmdsQixFQUFLaGxCLEVBQUssR0FBR3BDLE9BQ2JzbkIsRUFBS2xsQixFQUFLLEdBQUdwQyxPQUNiMG9CLEVBQUt0bUIsRUFBSyxJQUVQeUQsRUFBS3NNLElBQUlxVyxFQUFRQyxJQUFVQyxFQUFLN2lCLEVBQUttTSxNQUFNLEVBQUlvVixFQUFLLEVBQUlFLEdBQU0sR0FDdkUsRUFNQXFCLE1BQU8sV0FDTCxJQUVJSixFQUZBbm1CLEVBQU9vSCxFQUFNUyxLQUFLcEQsV0FHRixJQUFoQnpFLEVBQUtwQyxRQUNQdW9CLEVBQVNubUIsRUFBSyxHQUNkQSxFQUFPQSxFQUFLb0gsTUFBTSxJQUNPLElBQWhCcEgsRUFBS3BDLFFBQ2R1b0IsRUFBU2xmLEVBQU1rZixPQUFPbm1CLEVBQUssR0FBSUEsRUFBSyxHQUFJQSxFQUFLLEdBQUlBLEVBQUssR0FBSUEsRUFBSyxJQUMvREEsRUFBT0EsRUFBS29ILE1BQU0sS0FFbEIrZSxFQUFTbGYsRUFBTWtmLE9BQU9ubUIsRUFBSyxHQUFJQSxFQUFLLEdBQUlBLEVBQUssSUFDN0NBLEVBQU9BLEVBQUtvSCxNQUFNLElBR3BCLElBQUlFLEVBQUl0SCxFQUFLLEdBQ1RzRyxFQUFJdEcsRUFBSyxHQUViLE9BQU8sRUFBSWlILEVBQU15VyxNQUFNbkYsSUFBSTROLEVBQVE3ZixFQUFHZ0IsRUFBSWhCLEVBQzVDLEVBRUFrZ0IsU0FBVSxTQUFrQkMsR0FNMUIsSUFMQSxJQUFJSCxFQUFLcmYsRUFBTTRJLFlBQVk0VyxHQUN2QkMsRUFBUUQsRUFBTy9nQixLQUFJLFNBQVV0RSxHQUFNLE9BQU82RixFQUFNaUcsS0FBSzlMLEVBQUssSUFDMURrRyxFQUFJbWYsRUFBT2xYLFFBQU8sU0FBVWpJLEVBQUdsRyxHQUFNLE9BQU9rRyxFQUFJbEcsRUFBSXhELE1BQU8sR0FBRyxHQUU5RDhPLEVBQVUsR0FDTHBNLEVBQUksRUFBR0EsRUFBSW1tQixFQUFPN29CLFNBQVUwQyxFQUNqQyxJQUFLLElBQUk4SCxFQUFJOUgsRUFBSSxFQUFHOEgsRUFBSXFlLEVBQU83b0IsU0FBVXdLLEVBQUcsQ0FDeEMsSUFBSW9JLEVBQUl2SixFQUFNc2YsTUFBTUcsRUFBTXBtQixHQUFJb21CLEVBQU10ZSxHQUFJcWUsRUFBT25tQixHQUFHMUMsT0FBUTZvQixFQUFPcmUsR0FBR3hLLE9BQVEwb0IsRUFBSWhmLEVBQUdtZixFQUFPN29CLFFBQzFGOE8sRUFBUXBILEtBQUssQ0FBQyxDQUFDaEYsRUFBRzhILEdBQUlvSSxHQUMxQixDQUdKLE9BQU85RCxDQUNULElBSUZ6RixFQUFNOEIsT0FBTyxDQUlYNGQsU0FBVSxXQUNSLElBRUFDLEVBRkk1bUIsRUFBT29ILEVBQU1TLEtBQUtwRCxXQUN0QjZaLEVBQU0sSUFBSXBYLE1BQU0sR0FXaEIsT0FSRTBmLEVBRGtCLElBQWhCNW1CLEVBQUtwQyxPQUNFNkYsRUFBS3NNLElBQUk5SSxFQUFNcVIsT0FBT3dCLElBQUk5WixFQUFLLEdBQUssRUFBRyxFQUFHLEdBQ2pDQSxFQUFLLEdBQUt5RCxFQUFLbU0sS0FBSzVQLEVBQUssS0FFbEN5RCxFQUFLc00sSUFBSTlJLEVBQU1xUixPQUFPd0IsSUFBSTlaLEVBQUssR0FBSyxFQUFHLEVBQUcsR0FDakNpSCxFQUFNMEksTUFBTTNQLEVBQUssSUFBTXlELEVBQUttTSxLQUFLNVAsRUFBSyxHQUFHcEMsU0FFN0QwZ0IsRUFBSSxHQUFLdGUsRUFBSyxHQUFLNG1CLEVBQ25CdEksRUFBSSxHQUFLdGUsRUFBSyxHQUFLNG1CLEVBQ1p0SSxDQUNULEVBS0F1SSxJQUFLLFdBQ0gsSUFFQUQsRUFGSTVtQixFQUFPb0gsRUFBTVMsS0FBS3BELFdBQ3RCNlosRUFBTSxJQUFJcFgsTUFBTSxHQVdoQixPQVJFMGYsRUFEa0IsSUFBaEI1bUIsRUFBS3BDLE9BQ0U2RixFQUFLc00sSUFBSTlJLEVBQU1pVSxTQUFTcEIsSUFBSTlaLEVBQUssR0FBSyxFQUFHQSxFQUFLLEdBQUssR0FDMUNBLEVBQUssR0FBS3lELEVBQUttTSxLQUFLNVAsRUFBSyxLQUVsQ3lELEVBQUtzTSxJQUFJOUksRUFBTWlVLFNBQVNwQixJQUFJOVosRUFBSyxHQUFLLEVBQUdBLEVBQUssR0FBR3BDLE9BQVMsR0FDakRxSixFQUFNMEksTUFBTTNQLEVBQUssSUFBSSxHQUFReUQsRUFBS21NLEtBQUs1UCxFQUFLLEdBQUdwQyxTQUVuRTBnQixFQUFJLEdBQUt0ZSxFQUFLLEdBQUs0bUIsRUFDbkJ0SSxFQUFJLEdBQUt0ZSxFQUFLLEdBQUs0bUIsRUFDWnRJLENBQ1QsRUFFQXdJLFlBQWEsU0FBcUJDLEVBQVFsTixHQUN4QyxPQUFPa04sRUFBU2xOLENBQ2xCLElBR0Y1UyxFQUFNOEIsT0FBTzlCLEVBQU1vQixHQUFJLENBQ3JCc2UsU0FBVSxTQUFrQnJWLEVBQU91SSxHQUNqQyxPQUFPNVMsRUFBTTBmLFNBQVNyVixFQUFPdUksRUFBTzdiLEtBQUt1SyxVQUMzQyxFQUVBc2UsSUFBSyxTQUFhdlYsRUFBT3VJLEdBQ3ZCLE9BQU81UyxFQUFNNGYsSUFBSXZWLEVBQU91SSxFQUFPN2IsS0FBS3VLLFVBQ3RDLElBY0Z0QixFQUFNOEIsT0FBTzlCLEVBQU1vQixHQUFJLENBQ3JCMmUsZ0NBQWlDLFNBQXlDakMsRUFBSUMsRUFBSUMsRUFBSUMsR0FDcEYsSUFBSW5SLEVBQUkrUSxFQUF3QkMsRUFBSUMsRUFBSUMsRUFBSUMsR0FDNUMsT0FBT2plLEVBQU1vZSxNQUFNdFIsRUFBRyxFQUN4QixFQUVBa1QsZ0NBQWlDLFNBQXlDbEMsRUFBSUMsRUFBSUMsRUFBSUMsR0FDcEYsSUFBSW5SLEVBQUkrUSxFQUF3QkMsRUFBSUMsRUFBSUMsRUFBSUMsR0FDNUMsT0FBT2plLEVBQU1vZSxNQUFNdFIsRUFBRyxFQUN4QixHQUdGLENBbFZBLENBa1ZFOU0sRUFBT3hELE1BQ1R3RCxFQUFNaWdCLE9BQVMsV0FnQmIsU0FBU0MsRUFBSUMsRUFBT0MsR0FDbEIsSUFBSUMsRUFBT0YsRUFBTXhwQixPQUNiMnBCLEVBQVdGLEVBQUssR0FBR3pwQixPQUFTLEVBQzVCNHBCLEVBQVdGLEVBQUtDLEVBQVcsRUFDM0JFLEVBQU94Z0IsRUFBTTJhLE1BQU15RixFQUFNRCxHQUN6Qk0sRUFDQXpnQixFQUFNbVksU0FBU2lJLEVBQU1JLEVBQUsvaEIsS0FBSSxTQUFTdEMsR0FBSyxNQUFPLENBQUNBLEVBQUcsS0FDbERzQyxLQUFJLFNBQVM4SyxHQUFLLE9BQU9BLEVBQUUsRUFBRyxJQUNuQ21YLEVBQVExZ0IsRUFBTWlZLFNBQVNrSSxFQUFPTSxHQUM5QkUsRUFBTzNnQixFQUFNaUcsS0FBS2thLEdBS2xCUyxFQUFNNWdCLEVBQU02RixJQUFJNGEsRUFBUWhpQixLQUFJLFNBQVN5VCxHQUN2QyxPQUFPMVYsS0FBS2dFLElBQUkwUixFQUFJeU8sRUFBTSxFQUM1QixLQUNJRSxFQUFNN2dCLEVBQU02RixJQUFJc2EsRUFBTTFoQixLQUFJLFNBQVMwTixFQUFHOVMsR0FDeEMsT0FBT21ELEtBQUtnRSxJQUFJMkwsRUFBSXNVLEVBQVFwbkIsR0FBSSxFQUNsQyxLQUNJeW5CLEVBQU1GLEVBQU1DLEVBRWhCLE1BQU8sQ0FDSFQsS0FBS0EsRUFDTEQsTUFBTUEsRUFDTkUsS0FBS0EsRUFDTEMsU0FBU0EsRUFDVEMsU0FBU0EsRUFDVEMsS0FBS0EsRUFDTEMsUUFBUUEsRUFDUkMsTUFBTUEsRUFDTkMsS0FBS0EsRUFDTEcsSUFBSUEsRUFDSkYsSUFBSUEsRUFDSkMsSUFBSUEsRUFDSkUsR0FkTUgsRUFBTUUsRUFnQmxCLENBSUEsU0FBU0UsRUFBT0MsR0FDZCxJQXpEbUJiLEVBQ2ZjLEVBd0RBQyxHQXpEZWYsRUF5RFlhLEVBQU1iLEtBeERqQ2MsRUFBWWQsRUFBSyxHQUFHenBCLE9BQ1JxSixFQUFNd0MsT0FBTzBlLEdBQVd6aUIsS0FBSSxTQUFTMmlCLEdBQ25ELElBQUlDLEVBQ0FyaEIsRUFBTXdDLE9BQU8wZSxHQUFXSSxRQUFPLFNBQVNqb0IsR0FBRyxPQUFPQSxJQUFJK25CLENBQVcsSUFDckUsT0FBT2xCLEVBQUlsZ0IsRUFBTXNDLElBQUk4ZCxFQUFNZ0IsR0FBYTNpQixLQUFJLFNBQVN0QyxHQUFJLE9BQU9BLEVBQUUsRUFBRyxJQUMxRDZELEVBQU1zQyxJQUFJOGQsRUFBTWlCLEdBQzdCLEtBb0RJRSxFQUFXL2tCLEtBQUttTSxLQUFLc1ksRUFBTUosSUFBT0ksRUFBYyxVQUNoRE8sRUFBWUwsRUFBYTFpQixLQUFJLFNBQVNnakIsR0FDeEMsSUFBSVgsRUFBTVcsRUFBSVgsSUFDVkMsRUFBS1UsRUFBSVYsR0FDYixPQUFPUSxFQUFXL2tCLEtBQUttTSxLQUFLbVksR0FBTyxFQUFJQyxHQUN6QyxJQUNJVyxFQUFhVCxFQUFNVCxLQUFLL2hCLEtBQUksU0FBUytoQixFQUFNbm5CLEdBQzdDLE9BQVFtbkIsRUFBTyxHQUFLZ0IsRUFBVW5vQixFQUNoQyxJQUNJc29CLEVBQVNELEVBQVdqakIsS0FBSSxTQUFTMEcsR0FDbkMsSUFBSXljLEVBQVU1aEIsRUFBTWlVLFNBQVMzQyxJQUFJbk0sRUFBRzhiLEVBQU1WLFVBQzFDLE9BQWlELEdBQXpDcUIsRUFBVSxHQUFNLEVBQUlBLEVBQVVBLEVBQ3hDLElBQ0l0b0IsRUFBSTBHLEVBQU1pVSxTQUFTcEIsSUFBSSxLQUFPb08sRUFBTVYsVUFDcENzQixFQUFhWixFQUFNVCxLQUFLL2hCLEtBQUksU0FBUytoQixFQUFNbm5CLEdBQzdDLElBQUl1VSxFQUFJdFUsRUFBSWtvQixFQUFVbm9CLEdBQ3RCLE1BQU8sQ0FBQ21uQixFQUFPNVMsRUFBRzRTLEVBQU81UyxFQUMzQixJQUNBLE1BQU8sQ0FDSGtVLEdBQUlOLEVBQ0pyYyxFQUFHdWMsRUFDSG5ZLEVBQUdvWSxFQUNISixTQUFVQSxFQUNWTSxXQUFZQSxFQUVsQixDQTBCQSxNQUFPLENBQUUzQixJQWRULFNBQWtCQyxFQUFPQyxHQUN2QixJQUFJYSxFQUFRZixFQUFJQyxFQUFNQyxHQUNsQjdCLEVBQVF5QyxFQUFPQyxHQUNmbEMsRUFiTixTQUFnQmtDLEdBQ2QsSUFFb0I5a0IsRUFBRzRoQixFQUFJRSxFQUZ2QjhELEVBQ0NkLEVBQU1GLEdBQUtFLEVBQU1YLFdBQWMsRUFBSVcsRUFBTUYsSUFBTUUsRUFBTVYsVUFLMUQsTUFBTyxDQUFFd0IsWUFBYUEsRUFBYWpDLE9BRHRCLEdBSE8zakIsRUFHRTRsQixFQUhDaEUsRUFHWWtELEVBQU1YLFNBSGRyQyxFQUd3QmdELEVBQU1WLFNBRmhEdmdCLEVBQU0wUyxLQUFLcEIsSUFBSW5WLEdBQUs4aEIsRUFBS0YsRUFBSzVoQixHQUFJNGhCLEVBQUssRUFBR0UsRUFBSyxJQUkxRCxDQUtjK0QsQ0FBT2YsR0FHZmdCLEVBQ0EsR0FBSyxFQUFJaEIsRUFBTUYsTUFBUUUsRUFBTVosS0FBTyxHQUFNWSxFQUFjLFVBSTVELE9BSEFBLEVBQU05YixFQUFJb1osRUFDVjBDLEVBQU0vTyxFQUFJNk0sRUFDVmtDLEVBQU1nQixVQUFZQSxFQUNYaEIsQ0FDVCxFQUdELENBaEhjLEdBNEhmamhCLEVBQU04QixPQUFPLENBQ1hvZ0IsYUFBYyxXQU1aLElBREEsSUFBSUMsRUFBYSxJQUFJbGlCLE1BQU16QyxVQUFVN0csUUFDN0IwQyxFQUFFLEVBQUVBLEVBQUVtRSxVQUFVN0csT0FBTzBDLElBQUksQ0FFakM4b0IsRUFBVzlvQixHQURDLENBQUMsR0FDUXdGLE9BQU9yQixVQUFVbkUsR0FDeEMsQ0FDQSxPQUFPMkcsRUFBTW1pQixFQUVmLEVBRUFDLGNBQWUsV0FJYixJQURBLElBQUlELEVBQWEsSUFBSWxpQixNQUFNekMsVUFBVSxHQUFHN0csUUFDaEMwQyxFQUFFLEVBQUVBLEVBQUVtRSxVQUFVLEdBQUc3RyxPQUFPMEMsSUFBSSxDQUVwQzhvQixFQUFXOW9CLEdBREMsQ0FBQyxHQUNRd0YsT0FBT3JCLFVBQVUsR0FBR25FLEdBQzNDLENBQ0EsT0FBTzJHLEVBQU1taUIsRUFFZixFQUVBRSxjQUFlLFNBQXVCQyxHQUdwQyxJQURBLElBQUlDLEVBQU8sSUFBSXRpQixNQUFNcWlCLEVBQUszckIsUUFDbEIwQyxFQUFFLEVBQUVBLEVBQUVpcEIsRUFBSzNyQixPQUFPMEMsSUFDeEJrcEIsRUFBS2xwQixHQUFLaXBCLEVBQUtqcEIsR0FFakIsT0FBTzJHLEVBQU1vaUIsY0FBY0csRUFFN0IsRUFFQUMsYUFBYyxTQUFzQnBvQixHQUNsQyxPQUFPNEYsRUFBTTVGLEdBQU84SSxXQUN0QixFQUVBdWYsY0FBZSxTQUF1QkgsR0FDcEMsT0FBT0EsRUFBS3BmLFdBQ2QsRUFFQXdmLFdBQVksU0FBb0I5ZCxFQUFFQyxHQUNoQyxJQUFJeEwsRUFBRzhILEVBQUc5QixFQUFHaEMsRUFBUXdJLEVBQ3JCLEdBQUlqQixFQUFFM0MsUUFBVTRDLEVBQUU3QyxPQUFRLENBQ3hCLEdBQUc2QyxFQUFFN0MsT0FBTyxFQUFFLENBRVosSUFEQTNFLEVBQVMsR0FDSmhFLEVBQUksRUFBR0EsRUFBSXVMLEVBQUU1QyxPQUFRM0ksSUFFeEIsSUFEQWdFLEVBQU9oRSxHQUFLLEdBQ1A4SCxFQUFJLEVBQUdBLEVBQUkwRCxFQUFFNUMsT0FBUWQsSUFBSyxDQUU3QixJQURBMEUsRUFBTSxFQUNEeEcsRUFBSSxFQUFHQSxFQUFJdUYsRUFBRTNDLE9BQVE1QyxJQUN4QndHLEdBQU9qQixFQUFFdEQsVUFBVWpJLEdBQUdnRyxHQUFLd0YsRUFBRXZELFVBQVVqQyxHQUFHOEIsR0FFNUM5RCxFQUFPaEUsR0FBRzhILEdBQUswRSxDQUNqQixDQUVGLE9BQU83RixFQUFNM0MsRUFDZixDQUVBLElBREFBLEVBQVMsR0FDSmhFLEVBQUksRUFBR0EsRUFBSXVMLEVBQUU1QyxPQUFRM0ksSUFFeEIsSUFEQWdFLEVBQU9oRSxHQUFLLEdBQ1A4SCxFQUFJLEVBQUdBLEVBQUkwRCxFQUFFNUMsT0FBUWQsSUFBSyxDQUU3QixJQURBMEUsRUFBTSxFQUNEeEcsRUFBSSxFQUFHQSxFQUFJdUYsRUFBRTNDLE9BQVE1QyxJQUN4QndHLEdBQU9qQixFQUFFdEQsVUFBVWpJLEdBQUdnRyxHQUFLd0YsRUFBRXZELFVBQVVILEdBRXpDOUQsRUFBT2hFLEdBQUc4SCxHQUFLMEUsQ0FDakIsQ0FFRixPQUFPN0YsRUFBTTNDLEVBQ2YsQ0FDRixFQUlBc2xCLFFBQVMsU0FBaUJDLEVBQU1DLEdBRzlCLElBQUlDLEVBQVc5aUIsRUFBTStpQixZQUFZSCxHQUU3QkksRUFBVUosRUFBTTFmLFlBQ2hCK2YsRUFBT2pqQixFQUFNMGlCLFdBQVcxaUIsRUFBTThpQixHQUFVRSxHQUM1QyxPQUFPaGpCLEVBQU0waUIsV0FBV08sRUFBS0osRUFFL0IsRUFFQUssU0FBVSxTQUFrQk4sRUFBTUMsRUFBTXhFLEdBQ3RDLElBQUkzTCxFQUFPMVMsRUFBTTJpQixRQUFRQyxFQUFNQyxHQUUzQk0sRUFBVSxDQUNkQSxNQUFnQixDQUFDLEdBQ2JDLEVBQVdwakIsRUFBTW9qQixTQUFTUixFQUFPbFEsR0FDckN5USxFQUFRRSxLQUFPRCxFQUNmLElBQUlFLEVBQVdULEVBQU01YyxPQUNyQmtkLEVBQVFJLE1BQU1DLFVBQVl4akIsRUFBTXdqQixVQUFVWCxFQUFPTyxHQUVqREQsRUFBUUksTUFBTUUsSUFBTXpqQixFQUFNeWpCLElBQUlMLEVBQVVFLEdBQ3hDSCxFQUFRSSxNQUFNRyxJQUFNUCxFQUFRSSxNQUFNRSxLQUFPYixFQUFNLEdBQUdqc0IsT0FBUyxHQUUzRHdzQixFQUFRSSxNQUFNSSxJQUFNM2pCLEVBQU0yakIsSUFBSWQsRUFBT08sR0FDckNELEVBQVFJLE1BQU1LLElBQ1ZULEVBQVFJLE1BQU1JLEtBQU9kLEVBQU1sc0IsUUFBVWlzQixFQUFNLEdBQUdqc0IsT0FBUyxHQUFLLEdBRWhFd3NCLEVBQVFJLE1BQU1NLElBQU03akIsRUFBTTZqQixJQUFJaEIsRUFBT1MsR0FDckNILEVBQVFJLE1BQU1PLElBQU1YLEVBQVFJLE1BQU1NLEtBQU9oQixFQUFNbHNCLE9BQVMsR0FFeER3c0IsRUFBUUksTUFBTVEsR0FBSyxFQUFLWixFQUFRSSxNQUFNSSxJQUFNUixFQUFRSSxNQUFNTSxJQUN0RFYsRUFBUUksTUFBTVEsR0FBSyxJQUFHWixFQUFRSSxNQUFNUSxHQUFLLEdBRTdDWixFQUFRSSxNQUFNUyxPQUFTYixFQUFRSSxNQUFNRyxJQUFNUCxFQUFRSSxNQUFNSyxJQUN6RFQsRUFBUUksTUFBTXpELE9BQ1Y5ZixFQUFNOGUsV0FBV3FFLEVBQVFJLE1BQU1TLE9BQ2RwQixFQUFNLEdBQUdqc0IsT0FBUyxFQUNsQmtzQixFQUFNbHNCLFFBQVVpc0IsRUFBTSxHQUFHanNCLE9BQVMsR0FBSyxHQUU1RHdzQixFQUFRSSxNQUFNVSxLQUFPem5CLEtBQUttTSxLQUFLd2EsRUFBUUksTUFBTUssS0FFN0NULEVBQVFJLE1BQU1XLE1BQVEsRUFBS2YsRUFBUUksTUFBTUssSUFBTVQsRUFBUUksTUFBTU8sSUFDekRYLEVBQVFJLE1BQU1XLE1BQVEsSUFBR2YsRUFBUUksTUFBTVcsTUFBUSxHQUVuRGYsRUFBUWdCLE1BQVEsSUFBSWxrQixNQUFNMmlCLEVBQU0sR0FBR2pzQixRQUluQyxJQUhBLElBQ0l5dEIsRUFBS0MsRUFBSTNNLEVBRFQ0TSxFQUFRdGtCLEVBQU0raUIsWUFBWUgsR0FHdEJ2cEIsRUFBRSxFQUFHQSxFQUFFcVosRUFBSy9iLE9BQU8wQyxJQUN6QitxQixFQUFJNW5CLEtBQUttTSxLQUFLd2EsRUFBUUksTUFBTUssSUFBTXBuQixLQUFLc00sSUFBSXdiLEVBQU1qckIsR0FBR0EsS0FDcERnckIsRUFBSTduQixLQUFLc00sSUFBSTRKLEVBQUtyWixHQUFLK3FCLEdBQ3ZCMU0sRUFBSTFYLEVBQU11ZSxNQUFNOEYsRUFBSXhCLEVBQU1sc0IsT0FBU2lzQixFQUFNLEdBQUdqc0IsT0FBUyxFQUFHMG5CLEdBRXhEOEUsRUFBUWdCLE1BQU05cUIsR0FBRyxDQUFDcVosRUFBS3JaLEdBQUkrcUIsRUFBS0MsRUFBSTNNLEdBSXRDLE9BREF5TCxFQUFRUixRQUFValEsRUFDWHlRLENBQ1QsRUFFQW9CLFNBQVUsU0FBa0IzQixHQUMxQixPQUFPNWlCLEVBQU0waUIsV0FBV0UsRUFBTTFmLFlBQVkwZixFQUM1QyxFQUdBRyxZQUFhLFNBQXFCSCxHQUNoQyxJQUFJNEIsRUFBUXhrQixFQUFNMGlCLFdBQVdFLEVBQU0xZixZQUFZMGYsR0FFL0MsT0FEZTVpQixFQUFNNlMsSUFBSTJSLEVBRTNCLEVBRUFwQixTQUFVLFNBQWtCUixFQUFPbFEsR0FDakMsSUFBSTJRLEVBQU9yakIsRUFBTTBpQixXQUFXRSxFQUFPbFEsR0FDbkMsT0FBTyxJQUFJMVMsRUFBTXFqQixFQUNuQixFQUVBRyxVQUFXLFNBQW1CWCxFQUFPTyxHQUNuQyxPQUFPcGpCLEVBQU15a0IsZUFBZTVCLEVBQU9PLEVBQ3JDLEVBRUFLLElBQUssU0FBYUwsRUFBVUUsR0FFMUIsSUFEQSxJQUFJRyxFQUFNLEVBQ0ZwcUIsRUFBSSxFQUFHQSxFQUFJK3BCLEVBQVN6c0IsT0FBUTBDLElBQ2xDb3FCLEdBQU9qbkIsS0FBS2dFLElBQUk0aUIsRUFBUy9wQixHQUFLaXFCLEVBQVUsR0FFMUMsT0FBT0csQ0FDVCxFQUVBRSxJQUFLLFNBQWFkLEVBQU9PLEdBRXZCLElBREEsSUFBSU8sRUFBTSxFQUNGdHFCLEVBQUksRUFBR0EsRUFBSXdwQixFQUFNbHNCLE9BQVEwQyxJQUMvQnNxQixHQUFPbm5CLEtBQUtnRSxJQUFJcWlCLEVBQU14cEIsR0FBSytwQixFQUFTL3BCLEdBQUksR0FFMUMsT0FBT3NxQixDQUNULEVBRUFFLElBQUssU0FBYWhCLEVBQU9TLEdBRXZCLElBREEsSUFBSU8sRUFBTSxFQUNGeHFCLEVBQUksRUFBR0EsRUFBSXdwQixFQUFNbHNCLE9BQVEwQyxJQUMvQndxQixHQUFPcm5CLEtBQUtnRSxJQUFJcWlCLEVBQU14cEIsR0FBS2lxQixFQUFVLEdBRXZDLE9BQU9PLENBQ1QsRUFFQVksZUFBZ0IsU0FBd0I3ZixFQUFFQyxHQUV4QyxJQURBLElBQUl3UyxFQUFNLElBQUlwWCxNQUFNMkUsRUFBRWpPLFFBQ2QwQyxFQUFFLEVBQUVBLEVBQUV1TCxFQUFFak8sT0FBTzBDLElBQUksQ0FDekJnZSxFQUFJaGUsR0FBSyxJQUFJNEcsTUFBTTJFLEVBQUV2TCxHQUFHMUMsUUFDeEIsSUFBSSxJQUFJd0ssRUFBRSxFQUFFQSxFQUFFeUQsRUFBRXZMLEdBQUcxQyxPQUFPd0ssSUFDeEJrVyxFQUFJaGUsR0FBRzhILEdBQUd5RCxFQUFFdkwsR0FBRzhILEdBQUcwRCxFQUFFeEwsR0FBRzhILEVBRTNCLENBQ0EsT0FBT25CLEVBQU1xWCxFQUNmLElBR0FyWCxFQUFNQSxNQUFRQSxFQUVQQSxFLHdCQ240SlQsSUFBSTBrQixFQUFjLEdBQ2xCLFNBQVNDLEVBQXFCQyxHQUU1QixJQURBLElBQUl2bkIsR0FBVSxFQUNMaEUsRUFBSSxFQUFHQSxFQUFJcXJCLEVBQVkvdEIsT0FBUTBDLElBQ3RDLEdBQUlxckIsRUFBWXJyQixHQUFHdXJCLGFBQWVBLEVBQVksQ0FDNUN2bkIsRUFBU2hFLEVBQ1QsS0FDRixDQUVGLE9BQU9nRSxDQUNULENBQ0EsU0FBU3duQixFQUFhdG1CLEVBQU11bUIsR0FHMUIsSUFGQSxJQUFJQyxFQUFhLENBQUMsRUFDZEMsRUFBYyxHQUNUM3JCLEVBQUksRUFBR0EsRUFBSWtGLEVBQUs1SCxPQUFRMEMsSUFBSyxDQUNwQyxJQUFJcUYsRUFBT0gsRUFBS2xGLEdBQ1o2RCxFQUFLNG5CLEVBQVFHLEtBQU92bUIsRUFBSyxHQUFLb21CLEVBQVFHLEtBQU92bUIsRUFBSyxHQUNsRG1KLEVBQVFrZCxFQUFXN25CLElBQU8sRUFDMUIwbkIsRUFBYSxHQUFHL2xCLE9BQU8zQixFQUFJLEtBQUsyQixPQUFPZ0osR0FDM0NrZCxFQUFXN25CLEdBQU0ySyxFQUFRLEVBQ3pCLElBQUlxZCxFQUFvQlAsRUFBcUJDLEdBQ3pDN2lCLEVBQU0sQ0FDUm9qQixJQUFLem1CLEVBQUssR0FDVk0sTUFBT04sRUFBSyxHQUNaMG1CLFVBQVcxbUIsRUFBSyxHQUNoQlEsU0FBVVIsRUFBSyxHQUNmUyxNQUFPVCxFQUFLLElBRWQsSUFBMkIsSUFBdkJ3bUIsRUFDRlIsRUFBWVEsR0FBbUJHLGFBQy9CWCxFQUFZUSxHQUFtQkksUUFBUXZqQixPQUNsQyxDQUNMLElBQUl1akIsRUFBVUMsRUFBZ0J4akIsRUFBSytpQixHQUNuQ0EsRUFBUVUsUUFBVW5zQixFQUNsQnFyQixFQUFZcGYsT0FBT2pNLEVBQUcsRUFBRyxDQUN2QnVyQixXQUFZQSxFQUNaVSxRQUFTQSxFQUNURCxXQUFZLEdBRWhCLENBQ0FMLEVBQVkzbUIsS0FBS3VtQixFQUNuQixDQUNBLE9BQU9JLENBQ1QsQ0FDQSxTQUFTTyxFQUFnQnhqQixFQUFLK2lCLEdBQzVCLElBQUlXLEVBQU1YLEVBQVFZLE9BQU9aLEdBWXpCLE9BWEFXLEVBQUlFLE9BQU81akIsR0FDRyxTQUFpQjZqQixHQUM3QixHQUFJQSxFQUFRLENBQ1YsR0FBSUEsRUFBT1QsTUFBUXBqQixFQUFJb2pCLEtBQU9TLEVBQU81bUIsUUFBVStDLEVBQUkvQyxPQUFTNG1CLEVBQU9SLFlBQWNyakIsRUFBSXFqQixXQUFhUSxFQUFPMW1CLFdBQWE2QyxFQUFJN0MsVUFBWTBtQixFQUFPem1CLFFBQVU0QyxFQUFJNUMsTUFDekosT0FFRnNtQixFQUFJRSxPQUFPNWpCLEVBQU02akIsRUFDbkIsTUFDRUgsRUFBSUksUUFFUixDQUVGLENBQ0Evb0IsRUFBT0UsUUFBVSxTQUFVdUIsRUFBTXVtQixHQUcvQixJQUFJZ0IsRUFBa0JqQixFQUR0QnRtQixFQUFPQSxHQUFRLEdBRGZ1bUIsRUFBVUEsR0FBVyxDQUFDLEdBR3RCLE9BQU8sU0FBZ0JpQixHQUNyQkEsRUFBVUEsR0FBVyxHQUNyQixJQUFLLElBQUkxc0IsRUFBSSxFQUFHQSxFQUFJeXNCLEVBQWdCbnZCLE9BQVEwQyxJQUFLLENBQy9DLElBQ0krSSxFQUFRdWlCLEVBREttQixFQUFnQnpzQixJQUVqQ3FyQixFQUFZdGlCLEdBQU9pakIsWUFDckIsQ0FFQSxJQURBLElBQUlXLEVBQXFCbkIsRUFBYWtCLEVBQVNqQixHQUN0Q21CLEVBQUssRUFBR0EsRUFBS0gsRUFBZ0JudkIsT0FBUXN2QixJQUFNLENBQ2xELElBQ0lDLEVBQVN2QixFQURLbUIsRUFBZ0JHLElBRUssSUFBbkN2QixFQUFZd0IsR0FBUWIsYUFDdEJYLEVBQVl3QixHQUFRWixVQUNwQlosRUFBWXBmLE9BQU80Z0IsRUFBUSxHQUUvQixDQUNBSixFQUFrQkUsQ0FDcEIsQ0FDRixDLHVCQ2pGQSxJQUFJRyxFQUFPLENBQUMsRUErQlpycEIsRUFBT0UsUUFQUCxTQUEwQm9wQixFQUFRQyxHQUNoQyxJQUFJQyxFQXRCTixTQUFtQkEsR0FDakIsUUFBNEIsSUFBakJILEVBQUtHLEdBQXlCLENBQ3ZDLElBQUlDLEVBQWN2MUIsU0FBU3cxQixjQUFjRixHQUd6QyxHQUFJdjBCLE9BQU8wMEIsbUJBQXFCRixhQUF1QngwQixPQUFPMDBCLGtCQUM1RCxJQUdFRixFQUFjQSxFQUFZRyxnQkFBZ0JDLElBQzVDLENBQUUsTUFBT3p4QixHQUVQcXhCLEVBQWMsSUFDaEIsQ0FFRkosRUFBS0csR0FBVUMsQ0FDakIsQ0FDQSxPQUFPSixFQUFLRyxFQUNkLENBSWVNLENBQVVSLEdBQ3ZCLElBQUtFLEVBQ0gsTUFBTSxJQUFJelMsTUFBTSwyR0FFbEJ5UyxFQUFPTyxZQUFZUixFQUNyQixDLHdCQ3ZCQXZwQixFQUFPRSxRQU5QLFNBQTRCOG5CLEdBQzFCLElBQUlnQyxFQUFVOTFCLFNBQVMrMUIsY0FBYyxTQUdyQyxPQUZBakMsRUFBUWtDLGNBQWNGLEVBQVNoQyxFQUFRbUMsWUFDdkNuQyxFQUFRc0IsT0FBT1UsRUFBU2hDLEVBQVFBLFNBQ3pCZ0MsQ0FDVCxDLDhCQ0NBaHFCLEVBQU9FLFFBTlAsU0FBd0NrcUIsR0FDdEMsSUFBSUMsRUFBbUQsS0FDbkRBLEdBQ0ZELEVBQWFFLGFBQWEsUUFBU0QsRUFFdkMsQyx3QkNvREFycUIsRUFBT0UsUUFqQlAsU0FBZ0I4bkIsR0FDZCxHQUF3QixvQkFBYjl6QixTQUNULE1BQU8sQ0FDTDIwQixPQUFRLFdBQW1CLEVBQzNCRSxPQUFRLFdBQW1CLEdBRy9CLElBQUlxQixFQUFlcEMsRUFBUXVDLG1CQUFtQnZDLEdBQzlDLE1BQU8sQ0FDTGEsT0FBUSxTQUFnQjVqQixJQWpENUIsU0FBZW1sQixFQUFjcEMsRUFBUy9pQixHQUNwQyxJQUFJb2pCLEVBQU0sR0FDTnBqQixFQUFJN0MsV0FDTmltQixHQUFPLGNBQWN0bUIsT0FBT2tELEVBQUk3QyxTQUFVLFFBRXhDNkMsRUFBSS9DLFFBQ05tbUIsR0FBTyxVQUFVdG1CLE9BQU9rRCxFQUFJL0MsTUFBTyxPQUVyQyxJQUFJSixPQUFpQyxJQUFkbUQsRUFBSTVDLE1BQ3ZCUCxJQUNGdW1CLEdBQU8sU0FBU3RtQixPQUFPa0QsRUFBSTVDLE1BQU14SSxPQUFTLEVBQUksSUFBSWtJLE9BQU9rRCxFQUFJNUMsT0FBUyxHQUFJLE9BRTVFZ21CLEdBQU9wakIsRUFBSW9qQixJQUNQdm1CLElBQ0Z1bUIsR0FBTyxLQUVMcGpCLEVBQUkvQyxRQUNObW1CLEdBQU8sS0FFTHBqQixFQUFJN0MsV0FDTmltQixHQUFPLEtBRVQsSUFBSUMsRUFBWXJqQixFQUFJcWpCLFVBQ2hCQSxHQUE2QixvQkFBVDVsQixPQUN0QjJsQixHQUFPLHVEQUF1RHRtQixPQUFPVyxLQUFLRSxTQUFTQyxtQkFBbUJDLEtBQUtDLFVBQVV1bEIsTUFBZSxRQUt0SU4sRUFBUXdDLGtCQUFrQm5DLEVBQUsrQixFQUFjcEMsRUFBUUEsUUFDdkQsQ0FvQk1ucUIsQ0FBTXVzQixFQUFjcEMsRUFBUy9pQixFQUMvQixFQUNBOGpCLE9BQVEsWUFyQlosU0FBNEJxQixHQUUxQixHQUFnQyxPQUE1QkEsRUFBYUssV0FDZixPQUFPLEVBRVRMLEVBQWFLLFdBQVdDLFlBQVlOLEVBQ3RDLENBZ0JNTyxDQUFtQlAsRUFDckIsRUFFSixDLHdCQzlDQXBxQixFQUFPRSxRQVZQLFNBQTJCbW9CLEVBQUsrQixHQUM5QixHQUFJQSxFQUFhUSxXQUNmUixFQUFhUSxXQUFXQyxRQUFVeEMsTUFDN0IsQ0FDTCxLQUFPK0IsRUFBYVUsWUFDbEJWLEVBQWFNLFlBQVlOLEVBQWFVLFlBRXhDVixFQUFhTCxZQUFZNzFCLFNBQVM2MkIsZUFBZTFDLEdBQ25ELENBQ0YsQyxHQ1hJMkMsRUFBMkIsQ0FBQyxFQUdoQyxTQUFTQyxFQUFvQkMsR0FFNUIsSUFBSUMsRUFBZUgsRUFBeUJFLEdBQzVDLFFBQXFCNzJCLElBQWpCODJCLEVBQ0gsT0FBT0EsRUFBYWpyQixRQUdyQixJQUFJRixFQUFTZ3JCLEVBQXlCRSxHQUFZLENBQ2pEOXFCLEdBQUk4cUIsRUFDSkUsUUFBUSxFQUNSbHJCLFFBQVMsQ0FBQyxHQVVYLE9BTkFtckIsRUFBb0JILEdBQVVwbkIsS0FBSzlELEVBQU9FLFFBQVNGLEVBQVFBLEVBQU9FLFFBQVMrcUIsR0FHM0VqckIsRUFBT29yQixRQUFTLEVBR1RwckIsRUFBT0UsT0FDZixDQUdBK3FCLEVBQW9Cem5CLEVBQUk2bkIsRUM1QnhCSixFQUFvQkssS0FBTyxDQUFDLEVDQzVCTCxFQUFvQjFuQixFQUFLdkQsSUFDeEIsSUFBSXVyQixFQUFTdnJCLEdBQVVBLEVBQU93ckIsV0FDN0IsSUFBT3hyQixFQUFpQixRQUN4QixJQUFNLEVBRVAsT0FEQWlyQixFQUFvQm5hLEVBQUV5YSxFQUFRLENBQUV4bEIsRUFBR3dsQixJQUM1QkEsQ0FBTSxFQ0xkTixFQUFvQm5hLEVBQUksQ0FBQzVRLEVBQVN1ckIsS0FDakMsSUFBSSxJQUFJQyxLQUFPRCxFQUNYUixFQUFvQlUsRUFBRUYsRUFBWUMsS0FBU1QsRUFBb0JVLEVBQUV6ckIsRUFBU3dyQixJQUM1RTUyQixPQUFPODJCLGVBQWUxckIsRUFBU3dyQixFQUFLLENBQUVHLFlBQVksRUFBTUMsSUFBS0wsRUFBV0MsSUFFMUUsRUNMRFQsRUFBb0JodUIsRUFBSzh1QixHQUVaQSxFQUFVLE1DSHZCZCxFQUFvQnpMLEVBQUksV0FDdkIsR0FBMEIsaUJBQWZ3TSxXQUF5QixPQUFPQSxXQUMzQyxJQUNDLE9BQU8veEIsTUFBUSxJQUFJZ3lCLFNBQVMsY0FBYixFQUNoQixDQUFFLE1BQU83ekIsR0FDUixHQUFzQixpQkFBWG5ELE9BQXFCLE9BQU9BLE1BQ3hDLENBQ0EsQ0FQdUIsR0NBeEJnMkIsRUFBb0JpQixJQUFPbHNCLEtBQzFCQSxFQUFTbEwsT0FBTzRSLE9BQU8xRyxJQUNYbXNCLFdBQVVuc0IsRUFBT21zQixTQUFXLElBQ3hDcjNCLE9BQU84MkIsZUFBZTVyQixFQUFRLFVBQVcsQ0FDeEM2ckIsWUFBWSxFQUNadHVCLElBQUssS0FDSixNQUFNLElBQUl3WixNQUFNLDBGQUE0Ri9XLEVBQU9JLEdBQUcsSUFHakhKLEdDVFJpckIsRUFBb0JVLEVBQUksQ0FBQzFtQixFQUFLbW5CLElBQVV0M0IsT0FBT3NPLFVBQVVpcEIsZUFBZXZvQixLQUFLbUIsRUFBS21uQixHQ0NsRm5CLEVBQW9CaFQsRUFBSy9YLElBQ0gsb0JBQVhvc0IsUUFBMEJBLE9BQU9DLGFBQzFDejNCLE9BQU84MkIsZUFBZTFyQixFQUFTb3NCLE9BQU9DLFlBQWEsQ0FBRWhmLE1BQU8sV0FFN0R6WSxPQUFPODJCLGVBQWUxckIsRUFBUyxhQUFjLENBQUVxTixPQUFPLEdBQU8sRSxNQ0w5RCxJQUFJaWYsRUFDQXZCLEVBQW9CekwsRUFBRXJxQixnQkFBZXEzQixFQUFZdkIsRUFBb0J6TCxFQUFFL3BCLFNBQVcsSUFDdEYsSUFBSXZCLEVBQVcrMkIsRUFBb0J6TCxFQUFFdHJCLFNBQ3JDLElBQUtzNEIsR0FBYXQ0QixJQUNiQSxFQUFTQyxnQkFDWnE0QixFQUFZdDRCLEVBQVNDLGNBQWNDLE1BQy9CbzRCLEdBQVcsQ0FDZixJQUFJQyxFQUFVdjRCLEVBQVN3NEIscUJBQXFCLFVBQzVDLEdBQUdELEVBQVE1eUIsT0FFVixJQURBLElBQUkwQyxFQUFJa3dCLEVBQVE1eUIsT0FBUyxFQUNsQjBDLEdBQUssSUFBTWl3QixHQUFXQSxFQUFZQyxFQUFRbHdCLEtBQUtuSSxHQUV4RCxDQUlELElBQUtvNEIsRUFBVyxNQUFNLElBQUl6VixNQUFNLHlEQUNoQ3lWLEVBQVlBLEVBQVUzMkIsUUFBUSxPQUFRLElBQUlBLFFBQVEsUUFBUyxJQUFJQSxRQUFRLFlBQWEsS0FDcEZvMUIsRUFBb0J4ZSxFQUFJK2YsQyxLQ2xCeEJ2QixFQUFvQjd6QixFQUFJbEQsU0FBU3k0QixTQUFXbjNCLEtBQUtDLFNBQVNDLEtDQTFEdTFCLEVBQW9CMkIsUUFBS3Y0QixFLGlxQkNBekIsTUFBTSxFQUErQnc0QixLQ0EvQixFQUErQkMsR0NBL0IsRUFBK0JDLEdDU2J2MUIsV0FDQUcsYUFTZW8xQixHQUFHQyxPQUFPQyxlQUNWRixHQUFHQyxPQUFPRSxpQkNiakQsTUFDTUMsRUFBVyxNQUNYQyxFQUFvQixjQUNwQkMsRUFBa0IsWUFDbEJDLEVBQXFCLGVBQ3JCQyxFQUF5QixrQkFDekJDLEVBQW1CLGFBQ25CQyxFQUF1QixnQkFDdkJDLEVBQXdCLGlCQUN4QkMsRUFBc0IsZUFDdEJDLEVBQVMsU0FDVEMsRUFBYyxjQUNkQyxFQUFjLFlBQ2RDLEVBQWlCLGVBQ2pCQyxFQUFNLE1BQ05DLEVBQVEsUUFDUkMsRUFBbUIsbUJBQ25CQyxFQUFVLFVBQ1ZDLEVBQVcsTUFDWEMsRUFBYyxTQXFCZCxFQUFVLENBQ0MsVUFBYTcyQixXQUNiLFlBQWVHLGFBQ2YsYUFBZ0JBLGFBQ2hCLGdCQUFtQkEsYUFDbkIsV0FBY0gsV0FDZCxjQUFpQkEsV0FDakIsZUFBa0JHLGFBQ2xCLGFBQWdCSCxZQW9CMUIsU0FBUyxFQUFZODJCLEVBQW1CQyxHQUMzQyxJQUNJQyxFQURBQyxFQUFlLEdBSWZseUIsRUFBSSxFQUNSLElBQUksTUFBTW12QixLQUFPNEMsRUFBbUIsQ0FDaEMsTUFBTXpxQixFQUFNeXFCLEVBQWtCNUMsR0FDeEJ0eEIsRUFBT3lKLEVBQUl6SixLQUdqQixHQUFHc3hCLElBQVFtQyxFQUFYLENBSUEsT0FBT3p6QixHQUdILEtBQUsreUIsRUFDTCxLQUFLaUIsRUFDTCxLQUFLQyxFQUNEeHFCLEVBQUliLEtBQU91ckIsRUFBVWh5QixHQUNyQkEsSUFDQSxNQUdKLEtBQUs4d0IsRUFDTCxLQUFLRCxFQUVELElBQUk5dkIsRUFLQWtJLEVBQU0rb0IsRUFBVWh5QixHQUtmZSxFQUZFa0ksRUFBSXBMLE9BQVNnMEIsR0FBY2gwQixJQUFTaXpCLEdBQ2xDN25CLEVBQUlwTCxPQUFTaTBCLEdBQWlCajBCLElBQVNnekIsRUFDbkM1bkIsRUFBSWtwQixhQUVKLElBQUksRUFBUXQwQixHQUFNb0wsRUFBSWtwQixjQVNuQzdxQixFQUFJYixLQUFPLENBQUUsTUFBUzFGLEVBQ1QsVUFBYUEsRUFBTXpELFFBRWhDMEMsSUFDQSxNQUdKLEtBQUtveEIsRUFDTCxLQUFLRCxFQUNELElBQUlqcUIsRUFBTSxFQUVWK3FCLEVBQU0zcUIsRUFBSWlxQixHQUFhRSxHQUduQnZxQixFQURBNnFCLEVBQWtCRSxHQUFLcDBCLE9BQVMreUIsRUFDMUJtQixFQUFrQkUsR0FBS3hyQixLQUV2QnNyQixFQUFrQkUsR0FBS3hyQixLQUFLYSxFQUFJaXFCLEdBQWFHLElBRXZEcHFCLEVBQUliLEtBQU8sQ0FBQyxVQUFhUyxHQUV6QmxILElBQ0EsTUFHSixLQUFLaXhCLEVBQ0wsS0FBS0YsRUFDRCxJQUFJNUssRUFBUyxHQU9iLElBQUksSUFBSWxkLEtBQU8rb0IsRUFBVWh5QixHQUFHb3lCLFNBQ25CbnBCLEVBQUlwTCxPQUFTZzBCLEdBQWNoMEIsSUFBU2l6QixHQUNuQzduQixFQUFJcEwsT0FBU2kwQixHQUFpQmowQixJQUFTZ3pCLEVBQzdDMUssRUFBT25oQixLQUFLaUUsRUFBSWtwQixjQUVoQmhNLEVBQU9uaEIsS0FBSyxJQUFJLEVBQVFuSCxHQUFNb0wsRUFBSWtwQixlQVN0QzdxQixFQUFJYixLQUFPLENBQUUsT0FBVTBmLEVBQ25CLFVBQWFBLEVBQU8sR0FBRzdvQixPQUN2QixhQUFnQjZvQixFQUFPN29CLFFBRTNCMEMsSUFDQSxNQUdKLEtBQUtreEIsRUFDTCxLQUFLRixFQUNELElBQUlxQixFQUFPLEVBQ1BDLEVBQU8sRUFFWEwsRUFBTTNxQixFQUFJaXFCLEdBQWFFLEdBR25CWSxFQURBTixFQUFrQkUsR0FBS3AwQixPQUFTK3lCLEVBQ3pCbUIsRUFBa0JFLEdBQUt4ckIsS0FFdkJzckIsRUFBa0JFLEdBQUt4ckIsS0FBS2EsRUFBSWlxQixHQUFhRyxJQUV4RE8sRUFBTTNxQixFQUFJa3FCLEdBQWdCQyxHQU90QmEsRUFEQVAsRUFBa0JFLEdBQUtwMEIsT0FBUyt5QixFQUN6Qm1CLEVBQWtCRSxHQUFLeHJCLEtBRXZCc3JCLEVBQWtCRSxHQUFLeHJCLEtBQUthLEVBQUlrcUIsR0FBZ0JFLElBRTNEcHFCLEVBQUliLEtBQU8sQ0FBQyxVQUFhNHJCLEVBQ3ZCLGFBQWdCQyxHQUVsQnR5QixJQUNBLE1BRUosUUFDSSxPQUdSa3lCLEVBQWFsdEIsS0FBS3NDLEVBOUhOLENBK0hoQixDQUtBLE9BQU80cUIsQ0FDWCxDQXlkTyxTQUFTLEVBQVVLLEVBQW1CQyxHQUN6Q0QsRUFBa0JwdUIsVUFBVXN1QixZQUFjRCxFQUFrQkUsV0E5TGhFLFNBQWlDQyxFQUF1QkMsR0FFcEQsTUFBTUMsRUFBeUIsQ0FBQyxnQkFBbUJyQyxHQUFHQyxPQUFPRSxpQkFDN0IsY0FBaUJILEdBQUdDLE9BQU9DLGVBQzNCLGVBQWtCRixHQUFHQyxPQUFPRSxpQkFDNUIsYUFBZ0JILEdBQUdDLE9BQU9DLGdCQUUxRCxJQUFJMXdCLEVBQUksRUFFUixJQUFJLE1BQU1tdkIsS0FBT3dELEVBQ2pCLENBQ0ksTUFBTXJyQixFQUFNcXJCLEVBQXNCeEQsR0FFbEMsT0FBTzduQixFQUFJekosTUFHUCxLQUFLK3lCLEVBQ0wsS0FBS2lCLEVBQ0wsS0FBS0MsRUFJTCxLQUFLaEIsRUFDTCxLQUFLRCxFQUNMLEtBQUtFLEVBQ0wsS0FBS0UsRUFDRCxNQUdKLEtBQUtFLEVBQ0wsS0FBS0MsRUFDRCxJQUFJMEIsRUFHV2g3QixNQUFad1AsRUFBSXdyQixLQUNIQSxHQUFPLEdBQUkzdEIsV0FFWDR0QixFQUFRenJCLEVBQUl3ckIsS0FFaEJ4ckIsRUFBSWdDLE9BQVN1cEIsRUFBdUJ2ckIsRUFBSXpKLE1BQU1pMUIsRUFDMUNGLEVBQWtCNXlCLEdBQUdlLE9BQ3pCLE1BR0osS0FBS213QixFQUNMLEtBQUtGLEVBQ0QsSUFBSWdDLEVBQVUsR0FDVjExQixFQUFTczFCLEVBQWtCNXlCLEdBQUdtbUIsT0FBTzdvQixPQUVyQ3kxQixFQUFRLEdBR1osR0FBZ0JqN0IsTUFBYndQLEVBQUl5ckIsTUFDSCxJQUFJLElBQUkvc0IsRUFBSSxFQUFHQSxHQUFLMUksRUFBUTBJLElBQ3hCK3NCLEVBQU0vdEIsS0FBSyxFQUFJRyxpQkFDbEI0dEIsRUFBUXpyQixFQUFJeXJCLE1BRWpCLElBQUksSUFBSWpyQixFQUFJLEVBQUdBLEVBQUl4SyxFQUFRd0ssSUFDdkJrckIsRUFBUWh1QixLQUFLNnRCLEVBQXVCdnJCLEVBQUl6SixNQUFNazFCLEVBQU1qckIsR0FDaEQ4cUIsRUFBa0I1eUIsR0FBR21tQixPQUFPcmUsS0FFcENSLEVBQUkwckIsUUFBVUEsRUFTdEJoekIsR0FDSixDQUNKLENBd0hJaXpCLENBQXdCVixFQUFrQnB1QixVQUFXcXVCLEVBQWtCOXlCLE1BRXZFLElBQUl3ekIsRUF2SFIsU0FBbUJYLEdBQ2YsSUFBSVksRUFBU1osRUFBa0JZLE9BRS9CLE1BQU1DLEVBQXFCLENBQUMsZ0JBQW1CLFVBQ25CLGNBQWlCLFVBQ2pCLGVBQWtCLFNBQ2xCLGFBQWdCLFVBRTVDLE9BQU9ELEVBQU90MUIsTUFFVixLQUFLK3lCLEVBQ0wsS0FBS2lCLEVBQ0wsS0FBS0MsRUFDRCxPQUFPUyxFQUFrQnB1QixVQUFVZ3ZCLEVBQU9FLFFBRzlDLEtBQUtoQyxFQUNELE9BQU9rQixFQUFrQnB1QixVQUFVZ3ZCLEVBQU9FLFFBQVEvcEIsT0FHdEQsS0FBS3FvQixFQUNELE9BQU9uQixHQUFHOEMsVUFBVUMsWUFBWWhCLEVBQWtCcHVCLFVBQVVndkIsRUFBT0UsUUFBUUwsU0FHL0UsS0FBS3BCLEVBQ0QsSUFBSTRCLEVBQWdCLEdBR3BCLElBQUksSUFBSVYsS0FBUUssRUFBT0UsT0FBUSxDQUMzQixJQUFJL3JCLEVBQU1pckIsRUFBa0JwdUIsVUFBVTJ1QixHQUN0Q1UsRUFBY3h1QixLQUFLc0MsRUFBSThyQixFQUFtQjlyQixFQUFJekosT0FDbEQsQ0FFQSxPQUFPMjFCLEVBUW5CLENBOEVpQkMsQ0FBVWxCLEdBTXZCLE9BakZKLFNBQStCSSxHQUMzQixJQUFJLE1BQU14RCxLQUFPd0QsRUFBdUIsQ0FDcEMsTUFBTXJyQixFQUFNcXJCLEVBQXNCeEQsR0FFbEMsT0FBUTduQixFQUFJekosTUFDUixLQUFLK3lCLEVBQ0wsS0FBS2lCLEVBQ0wsS0FBS0MsRUFDTCxLQUFLaEIsRUFDTCxLQUFLRCxFQUNMLEtBQUtJLEVBQ0wsS0FBS0YsRUFDRCxNQUVKLEtBQUtLLEVBQ0wsS0FBS0QsRUFDRDdwQixFQUFJZ0MsT0FBUyxLQUNiLE1BRUosS0FBSzRuQixFQUNMLEtBQUtGLEVBQ0QxcEIsRUFBSTByQixRQUFVLEtBTzFCLENBQ0osQ0FrRElVLENBQXNCbkIsRUFBa0JwdUIsV0FFakMrdUIsQ0FDWCxDQzlyQkEsTUFBTVMsRUFBVyxFQUNYQyxFQUFvQixFQUNwQkMsRUFBcUIsRUFDckJDLEVBQWlCLEVBQ2pCQyxFQUFpQixJQUNqQkMsRUFBcUIsSUFFckJDLEVBQW1CLCtCQUNuQkMsRUFBYyxzREFDZEMsRUFBMEIsNkJBQzFCQyxFQUEyQiw2QkFDM0JDLEVBQTBCLDRCQUMxQkMsRUFBNkIsNkRBQzdCQyxFQUEyQix3QkFDM0JDLEVBQThCLDRCQVk3QixTQUFTQyxFQUFnQnhyQixHQUM1QixHQUFLQSxFQUFJcEwsTUFBUSxxQkFBMEJvTCxFQUFJcEwsTUFBUSxrQkFDbkQsTUFBTSxJQUFJMmMsTUFBTWdhLEVBQThCdnJCLEVBQUlwTCxLQUMxRCxDQUVPLFNBQVM2MkIsRUFBaUJ6ckIsR0FDN0IsR0FBSUEsRUFBSTZoQixNQUFNNkosa0JBQW9CLEVBQzlCLE1BQU0sSUFBSW5hLE1BQU0sZUFBZXZSLEVBQUk2cEIsNEJBQzNDLENBOERPLFNBQVMsRUFBZ0M4QixFQUFVQyxHQUl0RCxHQWhFRyxTQUFxQ0QsRUFBVUMsR0FDbEQsR0FBSUEsRUFBYWxCLEVBQ2IsTUFBTSxJQUFJblosTUFBTXlaLEdBQ3BCLEdBQUlZLEVBQWFELEVBQVN0M0IsT0FDdEIsTUFBTSxJQUFJa2QsTUFBTTBaLEdBQ3BCLElBQUssTUFBTWpyQixLQUFPMnJCLEVBQ2RILEVBQWdCeHJCLEdBQ2hCeXJCLEVBQWlCenJCLEVBRXpCLENBcURJNnJCLENBQTRCRixFQUFVQyxHQUVsQ0QsRUFBU3QzQixPQUFTczNCLEVBQVN6SSxRQUFRLEdBQUc3dUIsT0FBUzAyQixFQUMvQyxNQUFNLElBQUl4WixNQUFNK1osRUFDeEIsQ0N4R0EsSUFBSVEsRUFBd0MsU0FBVUMsRUFBU0MsRUFBWUMsRUFBR0MsR0FFMUUsT0FBTyxJQUFLRCxJQUFNQSxFQUFJaDlCLFdBQVUsU0FBVUMsRUFBU0MsR0FDL0MsU0FBU2c5QixFQUFVcGtCLEdBQVMsSUFBTXBHLEVBQUt1cUIsRUFBVXZMLEtBQUs1WSxHQUFTLENBQUUsTUFBT25WLEdBQUt6RCxFQUFPeUQsRUFBSSxDQUFFLENBQzFGLFNBQVN3NUIsRUFBU3JrQixHQUFTLElBQU1wRyxFQUFLdXFCLEVBQWlCLE1BQUVua0IsR0FBUyxDQUFFLE1BQU9uVixHQUFLekQsRUFBT3lELEVBQUksQ0FBRSxDQUM3RixTQUFTK08sRUFBSzVHLEdBSmxCLElBQWVnTixFQUlhaE4sRUFBT3N4QixLQUFPbjlCLEVBQVE2TCxFQUFPZ04sUUFKMUNBLEVBSXlEaE4sRUFBT2dOLE1BSmhEQSxhQUFpQmtrQixFQUFJbGtCLEVBQVEsSUFBSWtrQixHQUFFLFNBQVUvOEIsR0FBV0EsRUFBUTZZLEVBQVEsS0FJakJyVSxLQUFLeTRCLEVBQVdDLEVBQVcsQ0FDN0d6cUIsR0FBTXVxQixFQUFZQSxFQUFVN3pCLE1BQU0wekIsRUFBU0MsR0FBYyxLQUFLckwsT0FDbEUsR0FDSixFQ1BBLElBQUksRUFBd0MsU0FBVW9MLEVBQVNDLEVBQVlDLEVBQUdDLEdBRTFFLE9BQU8sSUFBS0QsSUFBTUEsRUFBSWg5QixXQUFVLFNBQVVDLEVBQVNDLEdBQy9DLFNBQVNnOUIsRUFBVXBrQixHQUFTLElBQU1wRyxFQUFLdXFCLEVBQVV2TCxLQUFLNVksR0FBUyxDQUFFLE1BQU9uVixHQUFLekQsRUFBT3lELEVBQUksQ0FBRSxDQUMxRixTQUFTdzVCLEVBQVNya0IsR0FBUyxJQUFNcEcsRUFBS3VxQixFQUFpQixNQUFFbmtCLEdBQVMsQ0FBRSxNQUFPblYsR0FBS3pELEVBQU95RCxFQUFJLENBQUUsQ0FDN0YsU0FBUytPLEVBQUs1RyxHQUpsQixJQUFlZ04sRUFJYWhOLEVBQU9zeEIsS0FBT245QixFQUFRNkwsRUFBT2dOLFFBSjFDQSxFQUl5RGhOLEVBQU9nTixNQUpoREEsYUFBaUJra0IsRUFBSWxrQixFQUFRLElBQUlra0IsR0FBRSxTQUFVLzhCLEdBQVdBLEVBQVE2WSxFQUFRLEtBSWpCclUsS0FBS3k0QixFQUFXQyxFQUFXLENBQzdHenFCLEdBQU11cUIsRUFBWUEsRUFBVTd6QixNQUFNMHpCLEVBQVNDLEdBQWMsS0FBS3JMLE9BQ2xFLEdBQ0osRUFJQSxNQUFNMkwsRUFBeUIsRUFDekJDLEVBQXVCLEVBQ3ZCQyxFQUFtQixZQUNuQkMsRUFBaUIsUUF3QmhCLFNBQVNDLEVBQWdDQyxFQUFRQyxFQUFjL0MsRUFBTWdELEVBQWNDLEVBQWUzeUIsRUFBS0MsRUFBSzJ5QixHQUMvRyxPQUFPLEVBQVV0NEIsVUFBTSxPQUFRLEdBQVEsYUZpRXBDLFNBQWlDbzRCLEVBQWNDLEVBQWUzeUIsRUFBS0MsRUFBSzJ5QixHQUMzRSxHQUFJNXlCLEdBQU9DLEVBQ1AsTUFBTSxJQUFJbVgsTUFBTTJaLEdBQ3BCLEdBQUk0QixFQUFnQmxDLEVBQ2hCLE1BQU0sSUFBSXJaLE1BQU00WixHQUNwQixHQUFJMEIsRUFBZWxDLEVBQ2YsTUFBTSxJQUFJcFosTUFBTTZaLEdBQ3BCLEdBQUsyQixFQUFzQmxDLEdBQW9Ca0MsRUFBc0JqQyxFQUNqRSxNQUFNLElBQUl2WixNQUFNOFosRUFDeEIsQ0V4RVEyQixDQUF3QkgsRUFBY0MsRUFBZTN5QixFQUFLQyxFQUFLMnlCLEdBRS9ELE1BQU1FLEVBQWtCLGtCQUFtQixTQUFVLGVBQWdCTCxHQUVyRSxJQUFJTSxFQUNKLE1BQU1DLEVDV1BDLGVBQTJDVCxFQUFRQyxFQUFjQyxFQUFjQyxFQUFlM3lCLEVBQUtDLEVBQUsyeUIsR0FDN0csT0FBTyxJQUFJOTlCLFNBQVEsQ0FBQ0MsRUFBU0MsS0FDM0IsTUFBTWsrQixFQUFTLElBQUlDLE9BQU8sSUFBSUMsSUFBSSxtQkFDbENGLEVBQU9HLFlBQVksRUFBWUMsSUFBcUIsZ0JBQUV2eUIsVUFBVSxDQUFDeXhCLEVBQVFDLEVBQWNDLEVBQWNDLEVBQWUzeUIsRUFBS0MsRUFBSzJ5QixLQUM5SE0sRUFBT0ssVUFBWSxTQUFTOTZCLEdBQzFCeTZCLEVBQU9NLFlBQ1B6K0IsRUFBUSxFQUFVdStCLElBQXFCLGdCQUFHNzZCLEVBQUU0SyxNQUM5QyxJQUVKLENEcEJ5Qm93QixDQUE0QmpCLEVBQVFNLEVBQWlCSixFQUFjQyxFQUFlM3lCLEVBQUtDLEVBQUsyeUIsU0FDdkdJLEVBQVN6NUIsTUFBTW02QixJQUFjWCxFQUFVVyxDQUFPLElBQU1DLElBQWEsTUFBTSxJQUFJdmMsTUFBTSxVQUFVdWMsSUFBUyxJQUUxR1osRUFBUVgsR0FBc0IxQyxLQUFPNEMsRUFFckMsSUFBSyxNQUFNenNCLEtBQU9rdEIsRUFBUVosR0FDdEJ0c0IsRUFBSTZwQixLQUFPMkMsRUFBbUJ4c0IsRUFBSTZwQixLQUV0QyxNQUFNeFYsRUFBSyx3QkFBeUI2WSxFQUFRWixJQUc1QyxPQUZBalksRUFBR3dWLEtBQU9BLEVBQ1Z4VixFQUFHMFYsUUFBUXJVLElBQUl3WCxFQUFRWCxJQUNoQmxZLENBQ1gsR0FDSixDRTlEQSxJQUFJLEVBQXdDLFNBQVUwWCxFQUFTQyxFQUFZQyxFQUFHQyxHQUUxRSxPQUFPLElBQUtELElBQU1BLEVBQUloOUIsV0FBVSxTQUFVQyxFQUFTQyxHQUMvQyxTQUFTZzlCLEVBQVVwa0IsR0FBUyxJQUFNcEcsRUFBS3VxQixFQUFVdkwsS0FBSzVZLEdBQVMsQ0FBRSxNQUFPblYsR0FBS3pELEVBQU95RCxFQUFJLENBQUUsQ0FDMUYsU0FBU3c1QixFQUFTcmtCLEdBQVMsSUFBTXBHLEVBQUt1cUIsRUFBaUIsTUFBRW5rQixHQUFTLENBQUUsTUFBT25WLEdBQUt6RCxFQUFPeUQsRUFBSSxDQUFFLENBQzdGLFNBQVMrTyxFQUFLNUcsR0FKbEIsSUFBZWdOLEVBSWFoTixFQUFPc3hCLEtBQU9uOUIsRUFBUTZMLEVBQU9nTixRQUoxQ0EsRUFJeURoTixFQUFPZ04sTUFKaERBLGFBQWlCa2tCLEVBQUlsa0IsRUFBUSxJQUFJa2tCLEdBQUUsU0FBVS84QixHQUFXQSxFQUFRNlksRUFBUSxLQUlqQnJVLEtBQUt5NEIsRUFBV0MsRUFBVyxDQUM3R3pxQixHQUFNdXFCLEVBQVlBLEVBQVU3ekIsTUFBTTB6QixFQUFTQyxHQUFjLEtBQUtyTCxPQUNsRSxHQUNKLEVBZU8sTUFBTW9OLEVBQVMsRUFDVEMsRUFBYSxFQUNiQyxHQUFNLEVBQ05DLEdBQVUsRUFFakJDLEdBQXNCLEVBQ3RCQyxHQUF3QixFQUN4QkMsR0FBYyxFQUNkQyxHQUFpQixFQUNqQkMsR0FBcUIsRUFDckJDLEdBQXNCLEVBQ3RCQyxHQUF5QixFQUN6QkMsR0FBb0IsRUFDcEJDLEdBQXlCLEVBQ3pCQyxHQUFzQixFQUN0QkMsR0FBdUIsRUFDdkJDLEdBQXVCLEVBQ3ZCQyxHQUFzQixFQUV0QkMsR0FBa0IsRUFDbEJDLEdBQXFCLEVBQ3JCQyxHQUFxQixFQUNyQkMsR0FBc0IsRUFDdEJDLEdBQXNCLEVBRXRCQyxHQUFzQixFQUN0QkMsR0FBMEIsRUFDMUJDLEdBQTZCLEVBQzdCQyxHQUE2QixFQUU3QkMsR0FBc0IsbUNBQ3RCQyxHQUEwQixtQ0FDMUJDLEdBQTZCLCtCQUM3QkMsR0FBNkIsK0JBQzdCQyxHQUF1QixvQkFFdkJDLEdBQVMsU0FDVEMsR0FBWSxZQUNaQyxHQUFjLGNBQ2RDLEdBQXdCLG1CQUN4QkMsR0FBTyxPQUNQQyxHQUFVLFVBQ1ZDLEdBQW9CLFFBQ3BCQyxHQUFxQixTQUNyQkMsR0FBUSxRQUNSQyxHQUFTLFNBQ1RDLEdBQWdCLGdCQUNoQkMsR0FBaUIsaUJBQ2pCQyxHQUFpQixpQkFDakJDLEdBQXNCLGlCQUN0QkMsR0FBMkIsc0JBQzNCQyxHQUFjLGdCQUNkQyxHQUEwQixDQUFDLFNBQVUsYUFBYyxNQUFPLFdBQzFEQyxHQUFnQixlQUNoQkMsR0FBZ0IsZUFDaEJDLEdBQTBCLDBCQUMxQkMsR0FBMEIsMEJBQzFCQyxHQUFjLGNBQ2RDLEdBQWMsY0FDZEMsR0FBb0Isb0JBQ3BCQyxHQUE0Qiw0QkFDNUJDLEdBQTRCLDRCQUM1QkMsR0FBWSxlQUNaQyxHQUE2QixtQkFDN0JDLEdBQXlCLGVBQ3pCQyxHQUF3Qix5QkFDeEJDLEdBQWEsYUFFYkMsR0FBUSxFQUNSQyxHQUFhLEVBQ2JDLEdBQW1CLEVBQ25CQyxHQUFxQixFQUNyQkMsR0FBc0IsRUFDdEJDLEdBQXVCLEVBRXZCQyxHQUFhLEVBQ2JDLEdBQW1CLEVBaUlsQixTQUFTQyxHQUFnQkMsRUFBaUJqZSxFQUFJa2UsR0FDakQsT0FBTyxFQUFVOTlCLFVBQU0sT0FBUSxHQUFRLFlBQ25DLE1BQU1zMUIsRUFBVTFWLEVBQUcwVixRQUNieUksRUFBU3pJLEVBQVEwSSxPQUFPRixHQUU5QixPQURBeEksRUFBUXhHLE9BQU9nUCxTQXZFdkIsU0FBOEJELEVBQWlCSSxFQUFTRixHQUNwRCxPQUFPLEVBQVUvOUIsVUFBTSxPQUFRLEdBQVEsYUE1RDNDLFNBQThCNjlCLEdBRTFCLEdBQUlBLEVBQWdCbnJCLE9BQVNrb0IsR0FDekIsTUFBTSxJQUFJOWQsTUFBTWtlLElBRXBCLE9BQVE2QyxFQUFnQjNGLFFBQ3BCLEtBQUtvQixFQUNELE9BQ0osS0FBS0UsR0FDRCxHQUFJcUUsRUFBZ0JycEIsT0FBU3FtQixHQUN6QixNQUFNLElBQUkvZCxNQUFNbWUsSUFDcEIsT0FDSixLQUFLMUIsRUFFRCxHQUFJc0UsRUFBZ0JLLFFBQVVwRCxHQUMxQixNQUFNLElBQUloZSxNQUFNb2UsSUFFcEIsR0FBSTJDLEVBQWdCTSxRQUFVcEQsR0FDMUIsTUFBTSxJQUFJamUsTUFBTXFlLElBQ3BCLE9BQ0osS0FBSzFCLEdBQ0QsT0FDSixRQUNJLE1BQU0sSUFBSTNjLE1BQU1zZSxJQUU1QixDQXFDUWdELENBQXFCUCxHQUVyQixNQUFNUSxFQUFvQixDQUFDWCxHQUFZQSxJQUV2QyxPQUFRRyxFQUFnQjNGLFFBQ3BCLEtBQUtvQixFQUNELE1BQ0osS0FBS0UsR0FDRDZFLEVBQWtCOUQsSUFBbUJzRCxFQUFnQnJwQixNQUNyRCxNQUNKLEtBQUsra0IsRUFDRDhFLEVBQWtCN0QsSUFBc0JxRCxFQUFnQkssT0FDeERHLEVBQWtCNUQsSUFBc0JvRCxFQUFnQk0sT0FDeEQsTUFDSixLQUFLMUUsR0FDRDRFLEVBQWtCM0QsSUFBdUJtRCxFQUFnQlMsTUFDekRELEVBQWtCMUQsSUFBdUJrRCxFQUFnQmxaLE1BQ3pELE1BQ0osUUFDSSxNQUFNLElBQUk3SCxNQUFNc2UsSUFJeEIsTUFBTWpELEVBQWUsa0JBQW1CLFNBQVU0RCxHQUFlc0MsR0FFM0RFLEVBQVlOLEVBQVF2SixTQUNwQjhKLEVBQW1CRCxFQUFVLEdBQUczK0IsT0FBUys5QixHQUN6Q2MsRUFBMEJGLEVBQVUzK0IsT0FBUys5QixHQUM3Q2UsRUFBK0JoRixHQUVyQyxJQUFJakUsRUFDSixNQUFNaUQsRUQzRVBDLGVBQWdEam1CLEVBQU93bEIsRUFBUUMsRUFBY3FHLEVBQWtCQyxFQUF5QkMsRUFBOEJULEVBQVNGLEdBQ3BLLE9BQU8sSUFBSXZqQyxTQUFRLENBQUNDLEVBQVNDLEtBQzNCLE1BQU1rK0IsRUFBUyxJQUFJQyxPQUFPLElBQUlDLElBQUksbUJBQ2xDRixFQUFPRyxZQUFZLEVBQVlDLElBQTBCLHFCQUFFdnlCLFVBQVUsQ0FBQ2lNLEVBQU93bEIsRUFBUUMsRUFBY3FHLEVBQWtCQyxFQUF5QkMsRUFBOEJULEVBQVNGLEtBQ3JMbkYsRUFBT0ssVUFBWSxTQUFTOTZCLEdBQzFCeTZCLEVBQU9NLFlBQ1B6K0IsRUFBUSxFQUFVdStCLElBQTBCLHFCQUFHNzZCLEVBQUU0SyxNQUNuRCxJQUVKLENDa0V5QjQxQixDQUFpQ2QsRUFBZ0JuckIsTUFBT21yQixFQUFnQjNGLE9BQVFDLEVBQWNxRyxFQUFrQkMsRUFBeUJDLEVBQThCVCxFQUFTRixTQUMzTHJGLEVBQVN6NUIsTUFBTW02QixJQUFjM0QsRUFBUzJELENBQU8sSUFBTUMsSUFBYSxNQUFNLElBQUl2YyxNQUFNLFVBQVV1YyxJQUFTLElBRXpHNUQsRUFBT21FLElBQWF4RSxLQUFPcUcsR0FDM0JoRyxFQUFPb0UsSUFBZ0J6RSxLQUFPc0csR0FDOUJqRyxFQUFPcUUsSUFBb0IxRSxLQUFPdUcsR0FDbENsRyxFQUFPc0UsSUFBcUIzRSxLQUFPd0csR0FDbkNuRyxFQUFPdUUsSUFBd0I1RSxLQUFPa0csR0FDdEM3RixFQUFPd0UsSUFBbUI3RSxLQUFPbUcsR0FDakM5RixFQUFPeUUsSUFBd0I5RSxLQUFPb0csR0FFdEMsTUFBTXRSLEVBQVEsQ0FDVjBVLFdBQVlmLEVBQWdCbnJCLE1BQzVCbXNCLFdBQVloQixFQUFnQjNGLE9BQzVCQyxhQUFjQSxFQUNkMkcsWUFBYWYsRUFDYmdCLG9CQUFxQix3QkFBeUJ0SixFQUFPa0UsS0FDckRqUixNQUFPK00sRUFBT21FLElBQ2RvRixRQUFTdkosRUFBT29FLElBQ2hCb0YsWUFBYXhKLEVBQU9xRSxJQUNwQm9GLGFBQWN6SixFQUFPc0UsSUFDckJvRixnQkFBaUIxSixFQUFPdUUsSUFDeEJvRixZQUFhM0osRUFBT3dFLElBQ3BCb0YsZ0JBQWlCNUosRUFBT3lFLElBQ3hCb0YsZ0JBQVlsbEMsRUFDWmkrQixjQUFla0csRUFBVTMrQixPQUN6QjIvQixrQkFBbUJoQixFQUFVLEdBQUczK0IsUUFHcEMsT0F0RlIsU0FBMEJzcUIsR0FDdEIsTUFBTW5oQixFQUFPbWhCLEVBQU1tVixnQkFBZ0I1SyxhQUU3QitLLEVBQUt6MkIsRUFBS294QixJQUNWc0YsRUFBSzEyQixFQUFLdXhCLElBQ1ZvRixFQUFLMzJCLEVBQUtzeEIsSUFDVnNGLEVBQUs1MkIsRUFBS3F4QixJQUNWNUMsRUFBSWdJLEVBQUtHLEVBQ1R6aEIsRUFBSXdoQixFQUFLRCxFQUNURyxFQUFNSixFQUFLaEksRUFDWHFJLEVBQU1KLEVBQUt2aEIsRUFDWDRoQixFQUFNTixHQUFNQSxFQUFLRSxHQUNqQkssRUFBTU4sR0FBTUEsRUFBS0UsR0FDakJLLEdBQU9SLEVBQUtDLElBQU9qSSxFQUFJdFosR0FDdkIraEIsR0FBTUwsRUFBTUMsR0FBTyxFQUN6QjNWLEVBQU1nVyxZQUFjTixFQUNwQjFWLEVBQU1pVyxZQUFjTixFQUNwQjNWLEVBQU1rVyxpQkFBbUJILEVBQ3pCL1YsRUFBTW1XLHdCQUEwQlAsRUFDaEM1VixFQUFNb1csd0JBQTBCUCxFQUNoQzdWLEVBQU1vVixXQUF5QixLQUFYLEVBQUlVLEVBQzVCLENBZ0VRTyxDQUFpQnJXLEdBQ1ZBLENBQ1gsR0FDSixDQU9xQnNXLENBQXFCM0MsRUFBaUJ2SSxFQUFTeUksRUFDaEUsR0FDSixDQTZCTyxTQUFTMEMsR0FBZ0I3Z0IsRUFBSXNLLEdBQ2hDdEssRUFBR3dWLEtBQU8ySCxHQUNWbmQsRUFBRzBWLFFBQVFyVSxJQUFJaUosRUFBTTRVLGFBQ3JCbGYsRUFBRzBWLFFBQVFyVSxJQUFJaUosRUFBTWlWLGlCQUNyQnZmLEVBQUcwVixRQUFRclUsSUFBSWlKLEVBQU1rVixhQUNyQixNQUFNc0IsRUFBUyxxQkFBd0I5Z0IsR0FDdkM4Z0IsRUFBT0MsVUFBVSxjQWpDckIsU0FBc0J6VyxHQUNsQixNQUFNaU8sRUFBZWpPLEVBQU1pTyxhQUFhMUQsYUFDeEMsT0FBTyx3QkFBeUIsQ0FDNUIsa0JBQW1CLFNBQVVvSCxHQUFPLENBQUMzUixFQUFNMFUsYUFDM0MscUJBQXNCOUMsR0FBUSxDQUFDTyxHQUF3Qm5TLEVBQU0yVSxjQUM3RCxrQkFBbUIsU0FBVTdDLEdBQWdCLENBQUM3RCxFQUFhLEtBQzNELGtCQUFtQixTQUFVOEQsR0FBZ0IsQ0FBQzlELEVBQWEsS0FDM0Qsa0JBQW1CLFNBQVUrRCxHQUFxQixDQUFDaFMsRUFBTW1PLGdCQUN6RCxrQkFBbUIsU0FBVThELEdBQTBCLENBQUNqUyxFQUFNcVYsb0JBQzlELGtCQUFtQixTQUFVbkQsR0FBYSxDQUFDbFMsRUFBTW9WLGFBQ2pELGtCQUFtQixTQUFVMUMsR0FBbUIsQ0FBQzFTLEVBQU1rVyxtQkFDdkQsa0JBQW1CLFNBQVUxRCxHQUFhLENBQUN4UyxFQUFNZ1csY0FDakQsa0JBQW1CLFNBQVV2RCxHQUFhLENBQUN6UyxFQUFNaVcsY0FDakQsa0JBQW1CLFNBQVV0RCxHQUEyQixDQUFDM1MsRUFBTW1XLDBCQUMvRCxrQkFBbUIsU0FBVXZELEdBQTJCLENBQUM1UyxFQUFNb1csMkJBRXZFLENBaUJvQ00sQ0FBYTFXLEtBQzdDd1csRUFBT0MsVUFBVSxxQkFBc0IvZ0IsRUFBSSxDQUFFaWhCLE1BQU83RCxHQUNoRDhELE1BQU81VyxFQUFNaVYsZ0JBQWdCL0osUUFFakNzTCxFQUFPQyxVQUFVLHFCQUFzQi9nQixFQUFJLENBQUVpaEIsTUFBTzVELEdBQ2hENkQsTUFBTzVXLEVBQU00VSxZQUFZMUosUUFFN0JzTCxFQUFPQyxVQUFVLGNBdEJyQixTQUE4QnpXLEdBQzFCLE1BQU1uaEIsRUFBT21oQixFQUFNbVYsZ0JBQWdCNUssYUFDbkMsT0FBTyx3QkFBeUIsQ0FDNUIscUJBQXNCLEdBQUksQ0FBQzZILEdBQWVDLEtBQzFDLGtCQUFtQixNQUFPQyxHQUF5QixDQUFDenpCLEVBQUtveEIsSUFBc0JweEIsRUFBS3N4QixNQUNwRixrQkFBbUIsTUFBT29DLEdBQXlCLENBQUMxekIsRUFBS3F4QixJQUF1QnJ4QixFQUFLdXhCLE9BRTdGLENBZW9DeUcsQ0FBcUI3VyxLQUNyRHdXLEVBQU9DLFVBQVUscUJBQXNCL2dCLEVBQUksQ0FBRWloQixNQUFPM0QsR0FDaEQ0RCxNQUFPNVcsRUFBTWtWLFlBQVloSyxPQUVqQyxDQUVPLFNBQVM0TCxHQUFlOVcsR0FFM0IsTUFBTStXLEVBQVcvVyxFQUFNNlUsb0JBQW9CekosUUFDckM4QyxFQUFlbE8sRUFBTXFWLGtCQUNyQmxILEVBQWdCbk8sRUFBTW1PLGNBUXRCL3hCLEVBQVMsSUFBSWxLLFdBSkFnaEMsSUFBU0MsR0FBYUMsR0FDckNsRixFQUFlQyxFQUFnQkEsRUFBZ0JELEVBQWV1RixHQUM5RHRGLEVBQWdCc0YsR0FBbUJ0RixFQUFnQkQsSUFHakRoN0IsRUFBU2tKLEVBQU9sSixPQUN0QixJQUFJOGpDLEVBQVMsRUFFYixNQUFNQyxFQUFPLElBQUk1akMsV0FBV0gsRUFBUThqQyxFQUFRN0QsSUFDNUM4RCxFQUFLNUQsSUFBc0JyVCxFQUFNMlUsV0FDakNzQyxFQUFLM0QsSUFBdUJwRixFQUM1QitJLEVBQUsxRCxJQUF3QnBGLEVBQzdCNkksR0FBVTdELEdBQWFELEdBRXZCLElBQUlnRSxFQUFTLElBQUkxakMsYUFBYU4sRUFBUThqQyxFQUFRNUQsSUFDOUM4RCxFQUFPOTlCLElBQUk0bUIsRUFBTWlPLGFBQWExRCxjQUM5QnlNLEdBQVU1RCxHQUFtQkYsR0FFN0JnRSxFQUFTLElBQUkxakMsYUFBYU4sRUFBUThqQyxFQUFROUksR0FDMUNnSixFQUFPOTlCLElBQUk0bUIsRUFBTTRVLFlBQVlySyxjQUM3QnlNLEdBQVU5SSxFQUFlZ0YsR0FFekJnRSxFQUFTLElBQUkxakMsYUFBYU4sRUFBUThqQyxFQUFRN0ksR0FDMUMrSSxFQUFPOTlCLElBQUk0bUIsRUFBTXhCLE1BQU0rTCxjQUN2QnlNLEdBQVU3SSxFQUFnQitFLEdBRTFCZ0UsRUFBUyxJQUFJMWpDLGFBQWFOLEVBQVE4akMsRUFBUTdJLEdBQzFDK0ksRUFBTzk5QixJQUFJNG1CLEVBQU04VSxRQUFRdkssY0FDekJ5TSxHQUFVN0ksRUFBZ0IrRSxHQUUxQmdFLEVBQVMsSUFBSTFqQyxhQUFhTixFQUFROGpDLEVBQVE5SSxFQUFldUYsSUFDekR5RCxFQUFPOTlCLElBQUk0bUIsRUFBTStVLFlBQVl4SyxjQUM3QnlNLElBQVc5SSxFQUFldUYsSUFBb0JQLEdBRTlDZ0UsRUFBUyxJQUFJMWpDLGFBQWFOLEVBQVE4akMsRUFBUTdJLEVBQWdCc0YsSUFDMUR5RCxFQUFPOTlCLElBQUk0bUIsRUFBTWdWLGFBQWF6SyxjQUM5QnlNLElBQVc3SSxFQUFnQnNGLElBQW9CUCxHQUUvQyxJQUFLLE1BQU03eEIsS0FBTzAxQixFQUNkRyxFQUFTLElBQUkxakMsYUFBYU4sRUFBUThqQyxFQUFRN0ksR0FDMUMrSSxFQUFPOTlCLElBQUlpSSxFQUFJa3BCLGNBQ2Z5TSxHQUFVN0ksRUFBZ0IrRSxHQUU5QixPQUFPOTJCLENBQ1gsQ0ErQ08sU0FBUys2QixHQUFjemhCLEVBQUkwaEIsR0FDOUIsT0FBTyxFQUFVdGhDLFVBQU0sT0FBUSxHQUFRLFlBQ25DLE1BQU1rcUIsRUEvQ2QsU0FBMEJvWCxHQUN0QixNQUFNQyxFQUFhRCxFQUFZbGtDLE9BQy9CLElBQUk4akMsRUFBUyxFQUViLE1BQU1NLEVBQVMsSUFBSWprQyxXQUFXZ2tDLEVBQVlMLEVBQVE3RCxJQUNsRDZELEdBQVU3RCxHQUFhRCxHQUN2QixNQUFNaEYsRUFBZW9KLEVBQU9oRSxJQUN0Qm5GLEVBQWdCbUosRUFBTy9ELElBRXZCdEYsRUFBZSwwQkFBMkI0RCxHQUFlLElBQUlyK0IsYUFBYTZqQyxFQUFZTCxFQUFRNUQsS0FDcEc0RCxHQUFVNUQsR0FBbUJGLEdBRTdCLE1BQU0wQixFQUFjLDBCQUEyQnpELEdBQVEsSUFBSTM5QixhQUFhNmpDLEVBQVlMLEVBQVE5SSxJQUM1RjhJLEdBQVU5SSxFQUFlZ0YsR0FFekIsTUFBTTFVLEVBQVEsMEJBQTJCK1MsR0FBTSxJQUFJLzlCLGFBQWE2akMsRUFBWUwsRUFBUTdJLElBQ3BGNkksR0FBVTdJLEVBQWdCK0UsR0FFMUIsTUFBTTRCLEVBQVUsMEJBQTJCdEQsR0FBUyxJQUFJaCtCLGFBQWE2akMsRUFBWUwsRUFBUTdJLElBQ3pGNkksR0FBVTdJLEVBQWdCK0UsR0FFMUIsTUFBTTZCLEVBQWMsMEJBQTJCdEQsR0FBbUIsSUFBSWorQixhQUFhNmpDLEVBQVlMLEVBQVE5SSxFQUFldUYsS0FDdEh1RCxJQUFXOUksRUFBZXVGLElBQW9CUCxHQUU5QyxNQUFNOEIsRUFBZSwwQkFBMkJ0RCxHQUFvQixJQUFJbCtCLGFBQWE2akMsRUFBWUwsRUFBUTdJLEVBQWdCc0YsS0FDekh1RCxJQUFXN0ksRUFBZ0JzRixJQUFvQlAsR0FFL0MsTUFBTTZELEVBQVcsR0FDakIsSUFBSyxJQUFJMytCLEVBQUksRUFBR0EsRUFBSTgxQixFQUFjOTFCLElBQzlCMitCLEVBQVMzNUIsS0FBSywwQkFBMkJoRixFQUFFbUYsV0FBWSxJQUFJL0osYUFBYTZqQyxFQUFZTCxFQUFRN0ksS0FDNUY2SSxHQUFVN0ksRUFBZ0IrRSxHQUU5QixNQUFNMkIsRUFBc0Isd0JBQXlCa0MsR0FVckQsTUFUYyxDQUFFcEMsV0FBWTJDLEVBQU9qRSxJQUMvQnBGLGFBQWNBLEVBQ2QyRyxZQUFhQSxFQUNicFcsTUFBT0EsRUFDUHNXLFFBQVNBLEVBQ1RDLFlBQWFBLEVBQ2JDLGFBQWNBLEVBQ2RILG9CQUFxQkEsRUFHN0IsQ0FJc0IwQyxDQUFpQixJQUFJcmxDLFdBQVdrbEMsSUFDeENyMUIsUUFoUWQsU0FBaUJpZSxFQUFPK1QsR0FDcEIsT0FBTyxFQUFVaitCLFVBQU0sT0FBUSxHQUFRLFlBQ25DLElBQUl5NEIsRUFDSixNQUFNQyxFRDNCUEMsZUFBMENULEVBQVFDLEVBQWN1SixFQUFnQjNELEVBQVFyVixFQUFPc1csRUFBU0MsRUFBYTBDLEVBQW9CQyxHQUM5SSxPQUFPLElBQUlwbkMsU0FBUSxDQUFDQyxFQUFTQyxLQUMzQixNQUFNaytCLEVBQVMsSUFBSUMsT0FBTyxJQUFJQyxJQUFJLG1CQUNsQ0YsRUFBT0csWUFBWSxFQUFZQyxJQUFvQixlQUFFdnlCLFVBQVUsQ0FBQ3l4QixFQUFRQyxFQUFjdUosRUFBZ0IzRCxFQUFRclYsRUFBT3NXLEVBQVNDLEVBQWEwQyxFQUFvQkMsS0FDL0poSixFQUFPSyxVQUFZLFNBQVM5NkIsR0FDMUJ5NkIsRUFBT00sWUFDUHorQixFQUFRLEVBQVV1K0IsSUFBb0IsZUFBRzc2QixFQUFFNEssTUFDN0MsSUFFSixDQ2tCeUI4NEIsQ0FBMkIzWCxFQUFNMlUsV0FBWTNVLEVBQU1pTyxhQUFjak8sRUFBTTZVLG9CQUFvQnpKLFFBQVNwTCxFQUFNNFUsWUFBYTVVLEVBQU14QixNQUFPd0IsRUFBTThVLFFBQVM5VSxFQUFNK1UsWUFBYS9VLEVBQU1nVixhQUFjakIsR0FFM00sYUFETXZGLEVBQVN6NUIsTUFBTW02QixJQUFjWCxFQUFVVyxDQUFPLElBQU1DLElBQWEsTUFBTSxJQUFJdmMsTUFBTSxVQUFVdWMsSUFBUyxJQUNuR1osQ0FDWCxHQUNKLENBeVAwQi9PLENBQVFRLEVBQU90SyxFQUFHMFYsU0FFcEMsT0FEQXJwQixFQUFJbXBCLEtBQU8rSCxHQUNKLHdCQUF5QixDQUFDbHhCLEdBQ3JDLEdBQ0osQ0NuWU8sSUFBSTYxQixHQU9BQyxHQVFBQyxHQXFCQUMsR0FVQUMsR0FXQUMsR0FNQUMsR0FRQUMsSUF0RVgsU0FBV1AsR0FDUEEsRUFBYUEsRUFBaUMsbUJBQUksR0FBSyxxQkFDdkRBLEVBQWFBLEVBQTBCLFlBQUksR0FBSyxjQUNoREEsRUFBYUEsRUFBbUIsS0FBSSxHQUFLLE1BQzVDLENBSkQsQ0FJR0EsS0FBaUJBLEdBQWUsQ0FBQyxJQUdwQyxTQUFXQyxHQUNQQSxFQUFpQixNQUFJLHlCQUNyQkEsRUFBbUIsUUFBSSw0Q0FDdkJBLEVBQW1CLFFBQUksc0ZBQ3ZCQSxFQUFvQixTQUFJLG9CQUMzQixDQUxELENBS0dBLEtBQWNBLEdBQVksQ0FBQyxJQUc5QixTQUFXQyxHQUNQQSxFQUFlLFFBQUksVUFDbkJBLEVBQWEsTUFBSSxRQUNqQkEsRUFBa0IsV0FBSSxhQUN0QkEsRUFBVyxJQUFJLE1BQ2ZBLEVBQVcsSUFBSSw4QkFDZkEsRUFBVyxJQUFJLE1BQ2ZBLEVBQWEsTUFBSSxRQUNqQkEsRUFBYSxNQUFJLHlCQUNqQkEsRUFBZSxRQUFJLFVBQ25CQSxFQUFrQixXQUFJLDBCQUN0QkEsRUFBZ0IsU0FBSSxjQUNwQkEsRUFBZ0IsU0FBSSxXQUNwQkEsRUFBYyxPQUFJLFlBQ2xCQSxFQUFjLE9BQUksWUFDbEJBLEVBQWMsT0FBSSxTQUNsQkEsRUFBZ0IsU0FBSSxxQkFDcEJBLEVBQWUsUUFBSSxTQUN0QixDQWxCRCxDQWtCR0EsS0FBVUEsR0FBUSxDQUFDLElBR3RCLFNBQVdDLEdBQ1BBLEVBQWMsUUFBSSxvQ0FDbEJBLEVBQWUsU0FBSSx3QkFDbkJBLEVBQWlCLFdBQUksMkJBQ3JCQSxFQUFVLElBQUkseUJBQ2RBLEVBQVUsSUFBSSxnQ0FDZEEsRUFBWSxNQUFJLHVCQUNuQixDQVBELENBT0dBLEtBQVNBLEdBQU8sQ0FBQyxJQUdwQixTQUFXQyxHQUNQQSxFQUFVLElBQUksNEVBQ2RBLEVBQVUsSUFBSSw2REFDZEEsRUFBWSxNQUFJLHNGQUNoQkEsRUFBYSxPQUFJLHVGQUNqQkEsRUFBZSxTQUFJLHdFQUNuQkEsRUFBZ0IsVUFBSSxrRkFDcEJBLEVBQWEsT0FBSSxxRUFDcEIsQ0FSRCxDQVFHQSxLQUFTQSxHQUFPLENBQUMsSUFHcEIsU0FBV0MsR0FDUEEsRUFBV0EsRUFBb0IsUUFBSSxHQUFLLFVBQ3hDQSxFQUFXQSxFQUFnQixJQUFJLEdBQUssS0FDdkMsQ0FIRCxDQUdHQSxLQUFlQSxHQUFhLENBQUMsSUFHaEMsU0FBV0MsR0FDUEEsRUFBcUIsT0FBSSxNQUN6QkEsRUFBcUIsT0FBSSxjQUN6QkEsRUFBbUIsS0FBSSxZQUN2QkEsRUFBb0IsTUFBSSxZQUMzQixDQUxELENBS0dBLEtBQWlCQSxHQUFlLENBQUMsSUFHcEMsU0FBV0MsR0FDUEEsRUFBZ0JBLEVBQTRCLFdBQUksR0FBSyxhQUNyREEsRUFBZ0JBLEVBQTZCLFlBQUksR0FBSyxjQUN0REEsRUFBZ0JBLEVBQTBCLFNBQUksR0FBSyxXQUNuREEsRUFBZ0JBLEVBQTBCLFNBQUksR0FBSyxXQUNuREEsRUFBZ0JBLEVBQTRCLFdBQUksR0FBSyxhQUNyREEsRUFBZ0JBLEVBQTRCLFdBQUksR0FBSyxZQUN4RCxDQVBELENBT0dBLEtBQW9CQSxHQUFrQixDQUFDLElBQ25DLE1BQU1DLEdBQU0sTUFDTkMsR0FBVSxFQUNWQyxHQUFTLENBQUMsSUFBTSxJQUFNLEtBQ3RCQyxHQUFhLEVBQ2JDLEdBQVUsSUFDVkMsR0FBVSxJQUdoQixJQUFJQyxJQUNYLFNBQVdBLEdBQ1BBLEVBQVksS0FBSSxVQUNoQkEsRUFBYyxPQUFJLFNBQ3JCLENBSEQsQ0FHR0EsS0FBVUEsR0FBUSxDQUFDLElBR2YsTUFBTUMsR0FBZ0Isb2NBZ0JoQkMsR0FBZSxDQUN4QixDQUFFQyxRQUFTZixHQUFNZ0IsTUFBT0MsS0FBTSxxREFDOUIsQ0FBRUYsUUFBU2YsR0FBTWtCLE9BQVFELEtBQU0sa0hBQy9CLENBQUVGLFFBQVNmLEdBQU1tQixTQUFVRixLQUFNLDhGQUNqQyxDQUFFRixRQUFTZixHQUFNb0IsV0FBWUgsS0FBTSxvR0FDbkMsQ0FBRUYsUUFBU2YsR0FBTXFCLFNBQVVKLEtBQU0sb0ZBR3hCSyxHQUFrQlIsR0FBYXA3QixLQUFLQyxHQUFTLEtBQUtBLEVBQUtvN0IsY0FBY3A3QixFQUFLczdCLFNBQ2xGbDdCLEtBQUssUUFBVSxxREFFVW02QixHQUFLcUIsNkRDM0huQyxJQUFJLEdBQXdDLFNBQVVqTSxFQUFTQyxFQUFZQyxFQUFHQyxHQUUxRSxPQUFPLElBQUtELElBQU1BLEVBQUloOUIsV0FBVSxTQUFVQyxFQUFTQyxHQUMvQyxTQUFTZzlCLEVBQVVwa0IsR0FBUyxJQUFNcEcsRUFBS3VxQixFQUFVdkwsS0FBSzVZLEdBQVMsQ0FBRSxNQUFPblYsR0FBS3pELEVBQU95RCxFQUFJLENBQUUsQ0FDMUYsU0FBU3c1QixFQUFTcmtCLEdBQVMsSUFBTXBHLEVBQUt1cUIsRUFBaUIsTUFBRW5rQixHQUFTLENBQUUsTUFBT25WLEdBQUt6RCxFQUFPeUQsRUFBSSxDQUFFLENBQzdGLFNBQVMrTyxFQUFLNUcsR0FKbEIsSUFBZWdOLEVBSWFoTixFQUFPc3hCLEtBQU9uOUIsRUFBUTZMLEVBQU9nTixRQUoxQ0EsRUFJeURoTixFQUFPZ04sTUFKaERBLGFBQWlCa2tCLEVBQUlsa0IsRUFBUSxJQUFJa2tCLEdBQUUsU0FBVS84QixHQUFXQSxFQUFRNlksRUFBUSxLQUlqQnJVLEtBQUt5NEIsRUFBV0MsRUFBVyxDQUM3R3pxQixHQUFNdXFCLEVBQVlBLEVBQVU3ekIsTUFBTTB6QixFQUFTQyxHQUFjLEtBQUtyTCxPQUNsRSxHQUNKLEVBUUEsTUFBTXhtQixHQUFNRCxLQUFLQyxJQUNYQyxHQUFNRixLQUFLRSxJQUVWLFNBQVM2OUIsR0FBZUMsR0FDM0IsT0FBTyxHQUFVempDLFVBQU0sT0FBUSxHQUFRLFlBQ25DLEVBQWdDeWpDLEVBQU12TSxTQUFVdU0sRUFBTXRNLFlBRXRESixFQUFnQjBNLEVBQU0vWixTQUN0QnNOLEVBQWlCeU0sRUFBTS9aLFNBQ3ZCLE1BQU1wakIsUUhtQlBxeUIsZUFBd0QrSyxFQUFPeE0sRUFBVXhOLEVBQVNpYSxHQUN2RixPQUFPLElBQUlucEMsU0FBUSxDQUFDQyxFQUFTQyxLQUMzQixNQUFNaytCLEVBQVMsSUFBSUMsT0FBTyxJQUFJQyxJQUFJLG1CQUNsQ0YsRUFBT0csWUFBWSxFQUFZQyxJQUFrQyw2QkFBRXZ5QixVQUFVLENBQUN5d0IsRUFBVXhOLEVBQVNpYSxLQUNqRy9LLEVBQU9LLFVBQVksU0FBUzk2QixHQUMxQnk2QixFQUFPTSxZQUNQeitCLEVBQVEsRUFBVXUrQixJQUFrQyw2QkFBRzc2QixFQUFFNEssTUFDM0QsSUFFSixDRzVCNkIsQ0FBeUMwNkIsRUFBTUMsTUFBT0QsRUFBTXZNLFNBQVV1TSxFQUFNL1osUUFBUytaLEVBQU10TSxZQUNoSCxNQUFPLENBQ0h5TSxXQUFZdDlCLEVBQU8rN0IsR0FBZ0JsRixZQUNuQzBHLHVCQUF3QnY5QixFQUFPKzdCLEdBQWdCeUIsYUFDL0NDLFFBQVN6OUIsRUFBTys3QixHQUFnQjJCLFVBQ2hDQyxRQUFTMzlCLEVBQU8rN0IsR0FBZ0I2QixVQUNoQ0MsVUFBVzc5QixFQUFPKzdCLEdBQWdCK0IsWUFDbENDLFVBQVcvOUIsRUFBTys3QixHQUFnQmlDLFlBRTFDLEdBQ0osQ0ErSk8sU0FBU0MsR0FBT0MsR0FDbkIsT0FBTyxHQUFVeGtDLFVBQU0sT0FBUSxHQUFRLFlBQ25DLE1BQU0wakMsRUFBUSxVQUNkLEdBQWMsT0FBVkEsRUFFQSxZQURBLGdCQUFtQjNCLEdBQVUwQyxPQUdqQyxHQUF1QixJQUFuQmYsRUFBTWdCLFNBRU4sWUFEQSxnQkFBbUIzQyxHQUFVNEMsVUFHakMsTUFBTUMsRUFBYyxHQUNkQyxFQUFVLEdBQ1ZDLEVBQVUsR0FDVkMsRUFBa0J4NUIsSUFBVUEsRUFBSXBMLE9BQVMsbUJBQXdCb0wsRUFBSXBMLE9BQVMsc0JBQy9DLElBQWhDb0wsRUFBSTZoQixNQUFNNkosa0JBU2YsR0FSQXlNLEVBQU1wTyxRQUFRWixTQUFTaHBCLFNBQVNILElBQ3hCdzVCLEVBQWV4NUIsSUFDZnE1QixFQUFZdDlCLEtBQUtpRSxFQUFJNnBCLE1BQ3JCeVAsRUFBUXY5QixLQUFLaUUsSUFFUkEsRUFBSXBMLE9BQVMsc0JBQ2xCMmtDLEVBQVF4OUIsS0FBS2lFLEVBQUksSUFFRSxJQUF2QnE1QixFQUFZaGxDLE9BRVosWUFEQSxnQkFBbUJtaUMsR0FBVWlELFNBR2pDLEdBQTJCLElBQXZCSixFQUFZaGxDLE9BRVosWUFEQSxnQkFBbUJtaUMsR0FBVWtELFNBSWpDLElBQUl2YixFQUFVbWIsRUFBUUEsRUFBUWpsQyxPQUFTLEdBQ3ZDLE1BQU1zbEMsRUFBZSxjQUFlbEQsR0FBTW1ELFFBQVN6QixFQUFPaGEsR0FBUyxLQUMvREEsRUFBVXdiLEVBQWE1eEIsTUFDdkI4eEIsR0FBYSxHQUNkLENBQUU3YSxPQUFTaGYsR0FBUXc1QixFQUFleDVCLEtBR3JDLElBQUkyckIsRUFGSmdPLEVBQWFHLFdBQVdwRCxHQUFLa0QsU0FHN0IsTUFBTUcsRUFBZ0IsZUFBZ0J0RCxHQUFNdUQsTUFBTzdCLEdBQU8sUUFBVyxDQUFFOEIsVUFBV1osSUFDbEZVLEVBQWNHLFNBQVEsSUFBTUwsTUFDNUJFLEVBQWNELFdBQVdwRCxHQUFLeUQsVUFFOUIsSUFBSXZPLEVBQWF6eEIsR0FBSWsvQixFQUFZaGxDLE9BQVMsRUFBR3VpQyxHQUFXd0QsU0FDeEQsTUFBTUMsRUFBa0Isb0JBQXFCLHVCQUF3QixDQUNqRXhRLEtBQU00TSxHQUFNRyxXQUNaMEQsVUFBV3ZELEdBQ1h3RCxhQUFjM08sRUFFZDRPLGVBQWUsRUFDZnJnQyxJQUFLeThCLEdBQVc2RCxPQUlwQixJQUFJQyxFQUNBQyxFQUNBQyxFQUpKUCxFQUFnQkgsU0FBUSxJQUFNTCxNQUM5QlEsRUFBZ0JQLFdBQVdwRCxHQUFLRSxZQUk1QnFDLElBQWlCMUMsR0FBYXNFLG9CQUM5QkgsRUFBV2pFLEdBQU1xRSxJQUNqQkgsRUFBYWhFLEdBQUttRSxJQUNsQkYsRUFBbUJsRSxHQUFLb0UsTUFHeEJKLEVBQVdqRSxHQUFNdUIsSUFDakIyQyxFQUFhaEUsR0FBS3FCLElBQ2xCNEMsRUFBbUJsRSxHQUFLc0IsS0FFNUIsTUFBTTZCLEVBQWMsS0FDaEIsSUFBSWhxQixFQUNKa3FCLEVBQWNoeUIsTUFBUWd5QixFQUFjaHlCLE1BQU1pWCxRQUFRaGYsR0FBUUEsSUFBUW1lLElBQ2xFd04sRUFBV29PLEVBQWNoeUIsTUFDekJzeUIsRUFBZ0J0eUIsTUFBUTVOLEdBQUlDLEdBQXFDLFFBQWhDeVYsRUFBS3dxQixFQUFnQnR5QixhQUEwQixJQUFQOEgsRUFBZ0JBLEVBQUsrYixFQUFZZ0wsR0FBVzZELEtBQU05TyxFQUFTdDNCLFFBQ3BJdTNCLEVBQWF5TyxFQUFnQnR5QixNQUM3Qmd6QixFQUFJQyxVQUFVdkUsR0FBTXdFLEtBQUtDLFNBQWdDLElBQXBCdlAsRUFBU3QzQixRQUFrQnUzQixHQUFjLENBQUUsRUFHcEYsSUFBSTlCLEVBQVN5UCxFQUFRbGxDLE9BQVMsRUFBS2tsQyxFQUFRLEdBQUssS0FDaEQsTUFBTTRCLEVBQWMsY0FBZTFFLEdBQU0yRSxNQUFPakQsRUFBT3JPLEdBQU8sSUFBTUEsRUFBUTZQLEVBQWE1eEIsT0FBTyxDQUFFaVgsT0FBU2hmLEdBQVFBLEVBQUlwTCxPQUFTLHVCQUNoSXVtQyxFQUFZckIsV0FBV3BELEdBQUswRSxPQUM1QkQsRUFBWUUsS0FBS0MsT0FBNkIsSUFBbkIvQixFQUFRbGxDLFFBQWtCNGtDLElBQWlCMUMsR0FBYXNFLG1CQUNuRixNQUFNRSxFQUFNLFNBQVUsQ0FBRXpGLE1BQU9vRixFQUFVYSxRQUFTWixJQUM3Q2psQixJQUFJLE9BQVEsQ0FBQ2lrQixFQUFjSSxFQUFlTSxFQUFpQmMsS0FDM0RLLFVBQVUvRSxHQUFNd0UsS0FBSyxJQUFNLEdBQVV4bUMsVUFBTSxPQUFRLEdBQVEsWUFDNURzbUMsRUFBSVUsY0FsUGhCLFNBQW9CdkQsRUFBT2UsR0FDdkIsSUFBSXBwQixFQUFJQyxFQUNSLE9BQU8sR0FBVXJiLFVBQU0sT0FBUSxHQUFRLFlBQ25DLE1BQU1zRyxRQUFlazlCLEdBQWVDLEdBQzlCd0QsRUFBVTNnQyxFQUFPeTlCLFFBQ2pCNzRCLEVBQU91NEIsRUFBTUMsTUFBTXBPLFFBQ25CNFIsRUFBZ0J6RCxFQUFNdk0sU0FBUzdCLFFBQy9COFIsRUFBVTNDLElBQWlCMUMsR0FBYXNFLG1CQUFzQmhFLEdBQWFnRixPQUFTcEYsR0FBTXFGLE9BTWhHLEdBSkFKLEVBQVF2N0IsU0FBUSxDQUFDSCxFQUFLeEgsS0FDbEJ3SCxFQUFJNnBCLEtBQU9scUIsRUFBS284QixjQUFjLEdBQUdILElBQVNwakMsRUFBTSxLQUNoRG1ILEVBQUsrVixJQUFJMVYsRUFBSSxJQUViaTVCLElBQWlCMUMsR0FBYXNFLG1CQUM5QixPQUNKLE1BQU1tQixFQUFPLGtCQUFxQjlELEVBQU1DLE1BQU10TyxNQUV4Q2g0QixFQUFTLHdCQUF5QixDQUNwQyxxQkFBc0I0a0MsR0FBTXdGLFFBQVNOLEdBQ3JDNWdDLEVBQU91OUIseUJBR1h2OUIsRUFBTzY5QixVQUFVejRCLFNBQVEsQ0FBQ0gsRUFBS3hILEtBQzNCd0gsRUFBSTZwQixLQUFPaDRCLEVBQU9rNEIsUUFBUWdTLGNBQWMsR0FBR3RGLEdBQU15RixXQUFXMWpDLEVBQU0sS0FDbEUzRyxFQUFPazRCLFFBQVFyVSxJQUFJMVYsRUFBSSxJQUczQixNQUFNbThCLEVBQU9waEMsRUFBT3M5QixXQUNwQjhELEVBQUt0UyxLQUFPbHFCLEVBQUtvOEIsY0FBYyxHQUFHN0QsRUFBTS9aLFFBQVEwTCxRQUFRZ04sR0FBYXVGLFVBQ3JFejhCLEVBQUsrVixJQUFJeW1CLEdBQ1QsTUFBTUUsRUFBd0JMLEVBQUs1RyxVQUFVLHFCQUFzQjhDLEVBQU1DLE1BQU8sQ0FDNUU3QyxNQUFPbUIsR0FBTWdCLE1BQ2I2RSxZQUFhcEUsRUFBTS9aLFFBQVEwTCxLQUMzQjBTLFlBQWFKLEVBQUt0UyxLQUNsQjJTLG9CQUFvQixFQUNwQkMsV0FBWSxxQkFDWmpLLE9BQStCLFFBQXRCM2lCLEVBQUtxb0IsRUFBTXBPLGFBQTBCLElBQVBqYSxPQUFnQixFQUFTQSxFQUFHZ2EsS0FDbkU2UyxLQUFNL0YsR0FBS2MsU0FHZjE4QixFQUFPdTlCLHVCQUF1QnpPLEtBQU80TSxHQUFNb0IsV0FDM0MsTUFBTThFLEVBQWdCWCxFQUFLNUcsVUFBVSxrQkFBbUJ2akMsRUFBUSxDQUM1RHlqQyxNQUFPbUIsR0FBTW9CLFdBQ2IrRSxnQkFBaUJuRyxHQUFNd0YsUUFDdkJZLGdCQUFpQjloQyxFQUFPdTlCLHVCQUF1QnpPLEtBQy9DaVQsY0FBZSxVQUNmSixLQUFNL0YsR0FBS29HLE9BQ1hDLG1CQUFtQixFQUNuQkMsbUJBQW1CLEtBR3ZCbGlDLEVBQU82OUIsVUFBVXo0QixTQUFRLENBQUNILEVBQUt4SCxJQUFRd0gsRUFBSTZwQixLQUFPLEdBQUc0TSxHQUFNeUYsV0FBVzFqQyxFQUFNLE1BQzVFLE1BQU0wa0MsRUFBa0JsQixFQUFLNUcsVUFBVSxxQkFBc0J2akMsRUFBUSxDQUNqRXlqQyxNQUFPbUIsR0FBTW1CLFNBQ2IwRSxZQUFhLEdBQUc3RixHQUFNeUYsWUFDdEJLLFlBQWEsR0FBRzlGLEdBQU15RixXQUFXbmhDLEVBQU82OUIsVUFBVXZrQyxPQUFTLEVBQUksSUFBTSxNQUNyRW9vQyxXQUFZLHFCQUNaakssT0FBUWlFLEdBQU13RixRQUNkUyxLQUFNL0YsR0FBS2lCLFlBSVR1RixFQUFhekIsRUFBUXYvQixLQUFLNkQsR0FBUUEsRUFBSTZwQixPQUM1Qzl1QixFQUFPMjlCLFFBQVF2NEIsU0FBUSxDQUFDSCxFQUFLeEgsS0FDekJ3SCxFQUFJNnBCLEtBQU9scUIsRUFBS284QixjQUFjLEdBQUd0RixHQUFNMkcsU0FBUzVrQyxFQUFNLEtBQ3REbUgsRUFBSytWLElBQUkxVixHQUNUbTlCLEVBQVdwaEMsS0FBS2lFLEVBQUk2cEIsS0FBSyxJQUc3QixNQUFNd1QsRUFBZ0IscUJBQXNCbkYsRUFBTUMsTUFBTyxDQUNyRDdDLE1BQU9tQixHQUFNa0IsT0FDYjJFLFlBQWFaLEVBQVEsR0FBRzdSLEtBQ3hCMFMsWUFBY2IsRUFBUXJuQyxPQUFTLEVBQUtxbkMsRUFBUSxHQUFHN1IsS0FBTzl1QixFQUFPMjlCLFFBQVEsR0FDckUrRCxXQUFZLHFCQUNaakssT0FBK0IsUUFBdEIxaUIsRUFBS29vQixFQUFNcE8sYUFBMEIsSUFBUGhhLE9BQWdCLEVBQVNBLEVBQUcrWixLQUNuRTZTLEtBQU0vRixHQUFLZ0IsT0FDWDJGLHdCQUF3QixJQUd0QkMsRUFBUSxHQUNSQyxFQUFVLENBQUNDLEVBQVNDLEtBQ3RCSCxFQUFNeGhDLEtBQUssQ0FDUG5ILEtBQU0sT0FDTjZvQyxRQUFTQSxFQUNURSxNQUFPekcsR0FDUDBHLFNBQVMsRUFDVHRJLE1BQU8sSUFDUG43QixLQUFNdWpDLEVBQ050akMsSUFBS3NqQyxFQUNMbkksTUFBTzhCLEdBQU13RyxRQUNmLEVBRU5WLEVBQVdoOUIsU0FBUzI5QixJQUNoQixNQUFNamtDLEVBQUksS0FBT2lrQyxFQUFRLElBQ3pCUCxFQUFNeGhDLEtBQUssQ0FBRW5ILEtBQU0sT0FBUTZvQyxRQUFTLEdBQUc1akMsUUFBUzhqQyxNQUFPekcsR0FBWTBHLFNBQVMsRUFBTXRJLE1BQU8sSUFBS0MsTUFBTzhCLEdBQU0wRyxPQUMzR1osRUFBV2g5QixTQUFTNjlCLElBQ2hCLE1BQU1uMEIsRUFBSSxLQUFPbTBCLEVBQVEsSUFDekIvRyxHQUFPOTJCLFNBQVNzUyxJQUNaK3FCLEVBQVEzekIsRUFBSSxXQUFXNEksRUFBSUEsT0FBTzVZLE9BQU9BLEtBQU00WSxHQUMvQytxQixFQUFRM3pCLEVBQUksWUFBWTRJLEVBQUlBLE9BQU81WSxPQUFPQSxLQUFNNFksRUFBRSxHQUNwRCxHQUNKLElBRU40cUIsRUFBY1ksS0FBS0MsYUFBYUMsT0FBT1osR0FDdkN2QixFQUFLNUcsVUFBVWlJLEdBSWYsTUFBTTN5QixFQUFJM1AsRUFBTys5QixVQUFVNVAsYUFDckJqaUIsRUFBSWxNLEVBQU82OUIsVUFBVXo4QixLQUFLNkQsR0FBUUEsRUFBSWtwQixlQUN0Q25yQixFQUFJbTZCLEVBQU1DLE1BQU1nQixTQUNoQm43QixFQUFJMjlCLEVBQWN0bkMsT0FDbEJpTyxFQUFJNDFCLEVBQU10TSxXQUNWd1MsRUFBWSxJQUFJanNDLGFBQWFtUSxHQUM3Qis3QixFQUFZLEdBQ1pDLEVBQVksR0FDbEIsSUFBSyxJQUFJdm5DLEVBQUksRUFBR0EsRUFBSWlILElBQUtqSCxFQUNyQnVuQyxFQUFVdmlDLEtBQUssSUFBSTVKLGFBQWFtUSxJQUNwQzg3QixFQUFVLEdBQUtsa0MsS0FBS2dFLElBQUl3TSxFQUFFLEdBQUksR0FBSzNNLEVBQ25Dc2dDLEVBQVV0aUMsS0FBSyxLQUFLODZCLEdBQWEwSCxRQUNqQ0QsRUFBVW4rQixTQUFRLENBQUN0SSxFQUFLVyxLQUFVWCxFQUFJLEdBQUtxQyxLQUFLZ0UsSUFBSStJLEVBQUUsR0FBR3pPLEdBQU0sR0FBS3VGLENBQUMsSUFDckUsSUFBSyxJQUFJeWdDLEVBQU8sRUFBR0EsRUFBT2w4QixJQUFLazhCLEVBQzNCSixFQUFVSSxHQUFRSixFQUFVSSxFQUFPLEdBQUt0a0MsS0FBS2dFLElBQUl3TSxFQUFFOHpCLEdBQU8sR0FBS3pnQyxFQUMvRHVnQyxFQUFVbitCLFNBQVEsQ0FBQ3RJLEVBQUtXLElBQVFYLEVBQUkybUMsR0FBUTNtQyxFQUFJMm1DLEVBQU8sR0FBS3RrQyxLQUFLZ0UsSUFBSStJLEVBQUV1M0IsR0FBTWhtQyxHQUFNLEdBQUt1RixJQUN4RnNnQyxFQUFVdGlDLEtBQUssR0FBR3lpQyxFQUFPLEtBQUszSCxHQUFhNEgsU0FHL0MsTUFBTUMsRUFBYSx3QkFBeUIsQ0FDeEMscUJBQXNCakksR0FBTUcsV0FBWXlILEdBQ3hDLDBCQUEyQm5HLEVBQU0vWixRQUFRMEwsS0FBTXVVLEtBRW5ERSxFQUFVbitCLFNBQVEsQ0FBQ3RJLEVBQUtXLElBQVFrbUMsRUFBVzNVLFFBQVFyVSxJQUFJLDBCQUEyQmltQixFQUFjbmpDLEdBQU1YLE1BRXRHLE1BQU04bUMsRUFBYzNDLEVBQUs1RyxVQUFVLGtCQUFtQnNKLEVBQVksQ0FDOURwSixNQUFPbUIsR0FBTXFCLFNBQ2I4RSxnQkFBaUJuRyxHQUFNRyxXQUN2QmlHLGdCQUFpQjNFLEVBQU0vWixRQUFRMEwsS0FDL0JpVCxjQUFlLFVBQ2ZKLEtBQU0vRixHQUFLaUksVUFDWEMsc0JBQXNCLEVBQ3RCNUIsbUJBQW1CLEtBR3ZCLEdBQUloRSxJQUFpQjFDLEdBQWF1SSxLQUFNLENBQ3BDLE1BQU1DLEVBQVEsQ0FBQzFDLEVBQXVCZ0IsRUFBZUgsRUFBaUJQLEVBQWVnQyxHQUFheGlDLEtBQUksQ0FBQzZpQyxFQUFReG1DLEtBQ3BHLENBQ0hrL0IsS0FBTUgsR0FBYS8rQixHQUFLay9CLEtBQ3hCdUgsV0FBWUQsRUFBTzNELFNBR1osb0JBQXFCLENBQUUvRixNQUFPbUIsR0FBTXlJLFFBQVNILE1BQU9BLElBQzVEeEQsUUFBVTVFLEdBQUtxQixJQUN0Qiw4QkFBaUMsV0FBWUQsSUFDakQsQ0FDSixHQUNKLENBd0ZrQm9ILENBQVcsQ0FDYmhILE1BQU9BLEVBQ1B4TSxTQUFVLHdCQUF5QkEsR0FBVTVCLFFBQzdDNUwsUUFBU0EsRUFDVHlOLFdBQVlBLEVBQ1o5QixNQUFPQSxHQUNSbVAsRUFDUCxVQUFJcHFDLEVBQVcrckMsR0FDVndFLEtBQUssQ0FBRXZsQyxFQUFHczlCLEdBQVN0dEIsRUFBR3V0QixLQUUzQjc3QixZQUFXLEtBQ1B3K0IsRUFBY2h5QixNQUFRdXhCLEVBQVF0YSxRQUFRaGYsR0FBUUEsSUFBUW1lLElBQ3REd04sRUFBV29PLEVBQWNoeUIsS0FBSyxHQUMvQml2QixJQUNILGlCQUFvQitELEVBQUlNLEtBQzVCLEdBQ0osQyxJQ3JTSSxHLFdBeUJHLFNBQVNnRSxHQUF1Qi91QixHQUNuQyxHQUFLQSxHQUFTLEdBQU9BLEdBQVMsRUFDMUIsTUFBTSxJQUFJaUIsTUFBTSxHQUFVK3RCLDZCQUNsQyxDQUVPLFNBQVNDLEdBQVkvaEMsR0FFeEIsTUFBTXpILEVBQU95SCxFQUFLekgsS0FDbEIsR0FBSUEsR0FBUSxFQUNSLE1BQU0sSUFBSXdiLE1BQU0sR0FBVWl1Qix1QkFDOUIsT0FBYSxJQUFUenBDLEVBQ08sR0FDSHlILEVBQUtpaUMsYUFBZXZsQyxLQUFLZ0UsSUFBS1YsRUFBUSxJQUFHLEdBQUt6SCxJQUFTQSxFQUFPLEVBQzFFLENBRUEsU0FBUzJwQyxHQUFhQyxFQUFPQyxFQUFPdHZCLEVBQVEsS0FFeEMrdUIsR0FBdUIvdUIsR0FDdkIsTUFBTXV2QixFQUFPTixHQUFZSSxHQUNuQkcsRUFBT1AsR0FBWUssR0FDekIsT0FBYSxJQUFURSxFQUNRRCxJQUFTQyxFQUNQRCxFQUFPQyxFQUNQLGdCQUFtQixFQUFJeHZCLEVBQU9xdkIsRUFBTTVwQyxLQUFPLEVBQUc2cEMsRUFBTTdwQyxLQUFPLEVBRTdFLEVBakRBLFNBQVd5Z0MsR0FDUEEsRUFBeUMsOEJBQUksNERBQzdDQSxFQUF3Qyw2QkFBSSxrRkFDNUNBLEVBQWlDLHNCQUFJLHFEQUNyQ0EsRUFBK0Isb0JBQUksMkJBQ25DQSxFQUE4QixtQkFBSSwyQkFDbENBLEVBQW1DLHdCQUFJLDJCQUN2Q0EsRUFBeUMsOEJBQUksb0NBQzdDQSxFQUFxQywwQkFBSSxxREFDNUMsQ0FURCxDQVNHLEtBQWMsR0FBWSxDQUFDLElBeUN2QixNQUFNdUosR0FDVDlnQyxZQUFZK2dDLEVBQVlDLEVBQVFDLEdBQWlCLEVBQU81dkIsRUFBUSxLQUc1RCxHQUZBN2IsS0FBSzByQyxtQkFBZ0J0eEMsRUFDckI0RixLQUFLdXJDLFdBQWEsR0FDZEEsRUFBV3ByQyxPQUFTLHFCQUNwQixNQUFNLElBQUkyYyxNQUNkLEdBQUl5dUIsRUFBVzNyQyxTQUFXNHJDLEVBQU81ckMsT0FDN0IsTUFBTSxJQUFJa2QsTUFBTSxHQUFVNnVCLCtCQUM5QjNyQyxLQUFLNHJDLFNBQVNMLEVBQVlDLEVBQVFDLEVBQWdCNXZCLEVBQ3RELENBQ0Fnd0IsV0FDSSxPQUFPLENBQ1gsQ0FFQVosYUFBYXB2QixFQUFRLEtBQ2pCLE1BQU1pd0IsRUFBSTlyQyxLQUFLK3JDLFNBQ2YsR0FBVSxJQUFORCxFQUNBLE9BQU8sRUFDWCxNQUFNbjRCLEVBQVEsQ0FBRTdFLElBQUs5TyxLQUFLZ3NDLEtBQUssR0FBSWhCLGFBQWNockMsS0FBS2lzQyxjQUFjLEdBQUkzcUMsS0FBTXRCLEtBQUtrc0MsZUFBZSxJQUNsRyxJQUFLLElBQUk1cEMsRUFBSSxFQUFHQSxFQUFJd3BDLElBQUt4cEMsRUFDckIsSUFBSzJvQyxHQUFhdDNCLEVBQU8sQ0FBRTdFLElBQUs5TyxLQUFLZ3NDLEtBQUsxcEMsR0FBSTBvQyxhQUFjaHJDLEtBQUtpc0MsY0FBYzNwQyxHQUMzRWhCLEtBQU10QixLQUFLa3NDLGVBQWU1cEMsSUFBTXVaLEdBQ2hDLE9BQU8sRUFFZixPQUFPLENBQ1gsQ0FFQXN3QixpQkFFSSxNQUFNTCxFQUFJOXJDLEtBQUsrckMsU0FDZixHQUFVLElBQU5ELEVBQ0EsTUFBTSxJQUFJaHZCLE1BQU0sR0FBVXN2QiwyQkFDOUIsSUFBSXQ5QixFQUFNLEVBQ05rOEIsRUFBZSxFQUNuQixNQUFNOXNCLEVBQUlsZSxLQUFLc0IsS0FDZixJQUFJK3FDLEVBQU0sRUFDVixJQUFLLElBQUkvcEMsRUFBSSxFQUFHQSxFQUFJd3BDLElBQUt4cEMsRUFDckJ3TSxHQUFPOU8sS0FBS2dzQyxLQUFLMXBDLEdBQ2pCMG9DLEdBQWdCaHJDLEtBQUtpc0MsY0FBYzNwQyxHQUNuQytwQyxHQUFPNW1DLEtBQUtnRSxJQUFJekosS0FBS2dzQyxLQUFLMXBDLEdBQUksR0FBS3RDLEtBQUtrc0MsZUFBZTVwQyxHQUUzRCxNQUFNZ3FDLEVBQVF0QixFQUFldmxDLEtBQUtnRSxJQUFJcUYsRUFBSyxHQUFLb1AsRUFDMUNxdUIsRUFBT0YsRUFBTTVtQyxLQUFLZ0UsSUFBSXFGLEVBQUssR0FBS29QLEVBQ2hDc3VCLEVBQU9GLEVBQVFDLEVBQ2ZFLEVBQU9YLEVBQUksRUFDWFksRUFBT3h1QixFQUFJNHRCLEVBRVhhLEVBQU9KLEVBQU9FLEVBQ2RHLEVBQU9KLEVBQU9FLEVBQ2RHLEVBQVFGLEVBQU9DLEVBQ3JCLE1BQU8sQ0FDSEwsS0FBTUEsRUFDTkMsS0FBTUEsRUFDTkYsTUFBT0EsRUFDUEcsS0FBTUEsRUFDTkMsS0FBTUEsRUFDTkksTUFWVTV1QixFQUFJLEVBV2R5dUIsS0FBTUEsRUFDTkMsS0FBTUEsRUFDTkMsTUFBT0EsRUFDUGppQixPQUFRLEVBQUksZ0JBQW1CaWlCLEVBQU9KLEVBQU1DLEdBRXBELENBRUFkLFNBQVNMLEVBQVlDLEVBQVF1QixHQUFrQixFQUFPQyxFQUFTLEtBRTNELE1BQU03c0MsRUFBT3FyQyxFQUFPcnJDLEtBQ2RtQixFQUFPa3FDLEVBQU81ckMsT0FDcEIsT0FBUU8sR0FDSixLQUFLLGtCQUNMLEtBQUssb0JBQ0RILEtBQUt1ckMsV0FBYUEsRUFBV0EsV0FDN0IsTUFBTVEsRUFBVy9yQyxLQUFLdXJDLFdBQVczckMsT0FDakNJLEtBQUsrckMsU0FBV0EsRUFDaEIvckMsS0FBS3NCLEtBQU9BLEVBQ1osTUFBTW1hLEVBQU8rdkIsRUFBTy9XLGFBQ2R3WSxFQUFPMUIsRUFBVzlXLGFBQ2xCdVgsRUFBTyxJQUFJcnVDLGFBQWFvdUMsR0FBVW1CLEtBQUssR0FDdkNqQixFQUFnQixJQUFJdHVDLGFBQWFvdUMsR0FBVW1CLEtBQUssR0FDaERoQixFQUFpQixJQUFJM3VDLFdBQVd3dUMsR0FBVW1CLEtBQUssR0FDckQsSUFBSyxJQUFJNXFDLEVBQUksRUFBR0EsRUFBSWhCLElBQVFnQixFQUFHLENBQzNCLE1BQU1DLEVBQUkwcUMsRUFBSzNxQyxHQUNmMHBDLEVBQUt6cEMsSUFBTWtaLEVBQUtuWixHQUNoQjJwQyxFQUFjMXBDLElBQU1rRCxLQUFLZ0UsSUFBSWdTLEVBQUtuWixHQUFJLEtBQ3BDNHBDLEVBQWUzcEMsRUFDckIsQ0FDQXZDLEtBQUtnc0MsS0FBT0EsRUFDWmhzQyxLQUFLaXNDLGNBQWdCQSxFQUNyQmpzQyxLQUFLa3NDLGVBQWlCQSxFQUN0QixNQUNKLFFBQ0ksTUFBTSxJQUFJcHZCLE1BQU0sR0FBVXF3Qix5QkFFdEMsRUNwSkosSUFBSSxHQUF3QyxTQUFVN1YsRUFBU0MsRUFBWUMsRUFBR0MsR0FFMUUsT0FBTyxJQUFLRCxJQUFNQSxFQUFJaDlCLFdBQVUsU0FBVUMsRUFBU0MsR0FDL0MsU0FBU2c5QixFQUFVcGtCLEdBQVMsSUFBTXBHLEVBQUt1cUIsRUFBVXZMLEtBQUs1WSxHQUFTLENBQUUsTUFBT25WLEdBQUt6RCxFQUFPeUQsRUFBSSxDQUFFLENBQzFGLFNBQVN3NUIsRUFBU3JrQixHQUFTLElBQU1wRyxFQUFLdXFCLEVBQWlCLE1BQUVua0IsR0FBUyxDQUFFLE1BQU9uVixHQUFLekQsRUFBT3lELEVBQUksQ0FBRSxDQUM3RixTQUFTK08sRUFBSzVHLEdBSmxCLElBQWVnTixFQUlhaE4sRUFBT3N4QixLQUFPbjlCLEVBQVE2TCxFQUFPZ04sUUFKMUNBLEVBSXlEaE4sRUFBT2dOLE1BSmhEQSxhQUFpQmtrQixFQUFJbGtCLEVBQVEsSUFBSWtrQixHQUFFLFNBQVUvOEIsR0FBV0EsRUFBUTZZLEVBQVEsS0FJakJyVSxLQUFLeTRCLEVBQVdDLEVBQVcsQ0FDN0d6cUIsR0FBTXVxQixFQUFZQSxFQUFVN3pCLE1BQU0wekIsRUFBU0MsR0FBYyxLQUFLckwsT0FDbEUsR0FDSixFQVFPLFNBQVNraEIsR0FBZ0JDLEVBQVFDLEVBQVFDLEVBQVNDLEdBQ3JELE9BQU8sR0FBVXh0QyxVQUFNLE9BQVEsR0FBUSxZQUNuQyxPQUFPLElBQUl4RixTQUFRLFNBQVVDLEVBQVNDLEdBQ2xDLE1BQU1rK0IsRUFBUyxJQUFJQyxPQUFPLElBQUlDLElBQUksbUJBQ2xDRixFQUFPRyxZQUFZLENBQUVzVSxTQUFRQyxTQUFRRSxTQUFRRCxZQUM3QzNVLEVBQU9LLFVBQVksRUFBR2x3QixNQUFRMGtDLFFBQU9DLGdCQUNqQzlVLEVBQU9NLFlBQ1B1VSxFQUFRL3lDLEVBQU8reUMsR0FBU2h6QyxFQUFRaXpDLEVBQVMsQ0FFakQsR0FDSixHQUNKLEMsUUNsQkEsSUFBSUMsR0FBYSxLQXVDVixTQUFTQyxLQUNaLE9BakRrRHRXLEVBaURqQ3QzQixLQWpEMEN1M0IsT0FpRHBDLEVBakRtREUsRUFpRG5DLFlBQ25DLElBQUtrVyxLQUdEQSxTQUFtQkUsVUFBVUMsSUFBSUMsaUJBQ2YsTUFBZEosSUFDQSxPQUFPLEtBRWYsTUFBTTluQyxRQUFhOG5DLEdBQVdLLHFCQUM5QixPQUFLbm9DLEVBRWFvb0MsR0FBbUJwb0MsRUFBS3FvQyxZQUFhRCxHQUFtQnBvQyxFQUFLc29DLE9BQVEsaUNBRDVFLElBR2YsRUE1RE8sS0FGZ0UzVyxPQWlEeEMsS0EvQ2JBLEVBQUloOUIsV0FBVSxTQUFVQyxFQUFTQyxHQUMvQyxTQUFTZzlCLEVBQVVwa0IsR0FBUyxJQUFNcEcsRUFBS3VxQixFQUFVdkwsS0FBSzVZLEdBQVMsQ0FBRSxNQUFPblYsR0FBS3pELEVBQU95RCxFQUFJLENBQUUsQ0FDMUYsU0FBU3c1QixFQUFTcmtCLEdBQVMsSUFBTXBHLEVBQUt1cUIsRUFBaUIsTUFBRW5rQixHQUFTLENBQUUsTUFBT25WLEdBQUt6RCxFQUFPeUQsRUFBSSxDQUFFLENBQzdGLFNBQVMrTyxFQUFLNUcsR0FKbEIsSUFBZWdOLEVBSWFoTixFQUFPc3hCLEtBQU9uOUIsRUFBUTZMLEVBQU9nTixRQUoxQ0EsRUFJeURoTixFQUFPZ04sTUFKaERBLGFBQWlCa2tCLEVBQUlsa0IsRUFBUSxJQUFJa2tCLEdBQUUsU0FBVS84QixHQUFXQSxFQUFRNlksRUFBUSxLQUlqQnJVLEtBQUt5NEIsRUFBV0MsRUFBVyxDQUM3R3pxQixHQUFNdXFCLEVBQVlBLEVBQVU3ekIsTUFBTTB6QixFQUFTQyxHQUFjLEtBQUtyTCxPQUNsRSxJQVB3QyxJQUFVb0wsRUFBU0MsRUFBWUMsRUFBR0MsQ0ErRDlFLENBQ0EsU0FBU3dXLEdBQW1COXJDLEVBQUtpc0MsR0FDN0IsT0FBUWpzQyxHQUFjLElBQVBBLEVBQTBCQSxFQUFkaXNDLENBQy9CLENDL0NPLElBQUksR0FDQUMsR0NvVEEsR0FDQUMsR0N6VUFDLEdBTUFDLEdBUUFDLEdDZEEsR0FDQUMsSUhtQkFMLEdBR1IsS0FBc0IsR0FBb0IsQ0FBQyxJQUZiLFVBQUksWUFDakNBLEdBQTZCLFVBQUksWUFHaEMsR0FBa0JNLFVBQ2xCLEdBQWtCQyxXQytTWk4sR0FhUixLQUFtQixHQUFpQixDQUFDLElBWlosUUFBSSxVQUM1QkEsR0FBMEIsVUFBSSxZQUM5QkEsR0FBMEIsVUFBSSxZQUM5QkEsR0FBeUIsU0FBSSxXQUM3QkEsR0FBMkIsV0FBSSxjQUMvQkEsR0FBaUMsaUJBQUksb0JBQ3JDQSxHQUEwQywwQkFBSSw0QkFDOUNBLEdBQXNCLE1BQUksUUFDMUJBLEdBQXVCLE9BQUksU0FDM0JBLEdBQTJCLFdBQUksYUFDL0JBLEdBQTJCLFdBQUksYUFDL0JBLEdBQXVCLE9BQUksVUFHMUIsR0FBZU8sUUFDZixHQUFlRixVQUNmLEdBQWVDLFVBQ2YsR0FBZUUsU0FDZixHQUFlQyxXQUNmLEdBQWVDLGlCQUNmLEdBQWVDLDBCQUNmLEdBQWVDLE1BQ2YsR0FBZUMsT0FDZixHQUFlQyxXQUNmLEdBQWVDLFdBQ2YsR0FBZUMsT0FHZixHQUFlVCxRQUNmLEdBQWVGLFVBQ2YsR0FBZUMsVUFDZixHQUFlRSxTQUNmLEdBQWVJLE1BQ2YsR0FBZUMsT0FDZixHQUFlQyxXQUNmLEdBQWVMLFdBQ2YsR0FBZUMsaUJBQ2YsR0FBZUMsMEJBQ2YsR0FBZUksV0FDZixHQUFlQyxPQUd1QixJQUFJQyxJQUFJLENBQUMsR0FBZVYsUUFBUyxHQUFlRSxXQUFZLEdBQWVDLGlCQUFrQixHQUFlQywwQkFBMkIsR0FBZUssU0FDNUksSUFBSUMsSUFBSSxDQUFDLEdBQWVWLFFBQVMsR0FBZUYsVUFBVyxHQUFlQyxVQUFXLEdBQWVLLDBCQUEyQixHQUFlRixXQUFZLEdBQWVDLGlCQUFrQixHQUFlRixTQUFVLEdBQWVLLE9BQVEsR0FBZUQsTUFBTyxHQUFlRSxXQUFZLEdBQWVFLE9BQVEsR0FBZUQsYUFDcFUsSUFBSUUsSUFBSSxDQUFDLEdBQWVaLFVBQVcsR0FBZUMsVUFBVyxHQUFlVSxPQUFRLEdBQWVELGFBQy9GLElBQUlFLElBQUksQ0FBQyxHQUFlWixVQUFXLEdBQWVDLFVBQVcsR0FBZVMsYUFDeEYsSUFBSUUsSUFBSSxDQUFDLEdBQWVaLFVBQVcsR0FBZUMsVUFBVyxHQUFlUyxhQUN4RSxJQUFJRSxJQUFJLENBQUMsR0FBZVQsU0FBVSxHQUFlSyxPQUFRLEdBQWVELE1BQU8sR0FBZUUsYUN4WDdJLFNBQVdiLEdBQ1BBLEVBQXdCLElBQUksTUFDNUJBLEVBQXdCLElBQUksTUFDNUJBLEVBQXlCLEtBQUksTUFDaEMsQ0FKRCxDQUlHQSxLQUF1QkEsR0FBcUIsQ0FBQyxJQUVoRCxTQUFXQyxHQUNQQSxFQUFxQixPQUFJLFNBQ3pCQSxFQUFzQixRQUFJLFVBQzFCQSxFQUF3QixVQUFJLFlBQzVCQSxFQUFtQixLQUFJLE9BQ3ZCQSxFQUEwQixZQUFJLGFBQ2pDLENBTkQsQ0FNR0EsS0FBaUJBLEdBQWUsQ0FBQyxJQUVwQyxTQUFXQyxHQUNQQSxFQUErQixXQUFJLGFBQ25DQSxFQUE4QixVQUFJLFlBQ2xDQSxFQUE4QixVQUFJLFdBQ3JDLENBSkQsQ0FJR0EsS0FBdUJBLEdBQXFCLENBQUMsSUVsQi9CNXpDLE9BQU9zTyxVQUFVMUIsVURBdkJpbkMsR0FHUixLQUF3QixHQUFzQixDQUFDLElBRnBCLEtBQUksT0FDOUJBLEdBQTJCLE1BQUksUUVLOUIsbUJBQ0Esd0JBRUUsTUFBTWMsR0FDVGhsQyxjQUNJeEssS0FBS3V0QyxRQUFVLENBQ1hrQyxPQUFRLFVBQVduOEIsTUFBTyxJQUFNbzhCLFFBQVMsMENBQTJDaHFDLElBQUssRUFBR0MsSUFBSyxFQUFHdUgsS0FBTSxNQUU5R2xOLEtBQUt3dEMsT0FBUyxDQUNWaUMsT0FBUSxpQkFBa0JuOEIsTUFBTyxFQUFHbzhCLFFBQVMsc0NBQXVDaHFDLElBQUssRUFBR0MsSUFBSyxJQUFNdUgsS0FBTSxFQUVySCxFQ25CRyxNQU9NeWlDLEdBQTRCLHlCQUM1QkMsR0FBNEIsNEJDUmxDLElBQUksR0FDQUMsT0FHUixLQUErQixHQUE2QixDQUFDLElBRnRCLFVBQUksWUFDMUNBLEdBQXNDLFVBQUksWUNIOUMsTUFBTSxHQUErQkMsSyxrSkNXakMvaEIsR0FBVSxDQUFDLEVBRWZBLEdBQVF3QyxrQkFBb0IsS0FDNUJ4QyxHQUFRa0MsY0FBZ0IsS0FDeEJsQyxHQUFRc0IsT0FBUyxVQUFjLEtBQU0sUUFDckN0QixHQUFRWSxPQUFTLEtBQ2pCWixHQUFRdUMsbUJBQXFCLEtBRWhCLEtBQUksS0FBU3ZDLElBS0osTUFBVyxhQUFpQixZQ2QzQyxNQUFNLEdBQ1R2akIsY0FDSXhLLEtBQUsrdkMsYUFBZSxDQUFFTixPQUFRLGlCQUFrQm44QixNQUFPLEVBQUdvOEIsUUFBUyw0REFHbkUxdkMsS0FBS2d3QyxRQUFVLENBQUVQLE9BQVEsU0FBVW44QixNQUFPLEVBQ3RDbzhCLFFBQVMsMkZBQ2IxdkMsS0FBS2l3QyxXQUFhLENBQUVSLE9BQVEsWUFBYW44QixNQUFPLEdBQUlvOEIsUUFBUyxtRUFDN0QxdkMsS0FBS2t3QyxPQUFTLENBQUVULE9BQVEsU0FBVW44QixNQUFPLEVBQ3JDbzhCLFFBQVMsaUlBRWIxdkMsS0FBS213QyxRQUFVLENBQUVWLE9BQVEsZUFBZ0JuOEIsTUFBTyxHQUM1Q284QixRQUFTLHlJQUViMXZDLEtBQUtvd0MsV0FBYSxDQUFFWCxPQUFRLGNBQWVuOEIsTUFBTyxLQUFNbzhCLFFBQVMsY0FBZXZ2QyxLQUFNLFVBQ3RGSCxLQUFLcXdDLFVBQVksQ0FBRVosT0FBUSxhQUFjbjhCLE9BQU8sRUFBT284QixRQUFTLGtDQUFtQ3Z2QyxLQUFNLFVBQ3JHbXdDLGVBQWdCLDJCQUNwQjFDLEtBQTJCM3VDLE1BQU1zeEMsSUFDekJBLEVBQ0F2d0MsS0FBS3F3QyxVQUFVWCxTQUFXLEtBQUthLE1BRy9CdndDLEtBQUtxd0MsVUFBVS84QixPQUFRLEVBQ3ZCdFQsS0FBS3F3QyxVQUFVRyxTQUFVLEVBQzdCLEdBRVIsRUFHRyxNQUFNLEdBRVRobUMsY0FDSXhLLEtBQUt1dEMsUUFBVSxDQUFFa0MsT0FBUSxVQUFXbjhCLE1BQU8sR0FBSW84QixRQUFTLDRCQUN4RDF2QyxLQUFLeXdDLFdBQWEsQ0FBRWhCLE9BQVEsYUFBY244QixNQUFPLEdBQUlvOEIsUUFBUyxtREFDbEUsRUFHRyxNQUFNZ0IsR0FDVGxtQyxZQUFZbW1DLEVBQWlCLENBQUMsR0FDMUIzd0MsS0FBSzJ3QyxlQUFpQixDQUFDLEVBQ3ZCM3dDLEtBQUs0d0MsaUJBQW1CLEdBQ3hCNXdDLEtBQUs2d0MscUJBQXVCLFFBQzVCN3dDLEtBQUs4d0MsdUJBQXlCLFFBQzlCOXdDLEtBQUsrd0Msa0JBQW9CLFFBQ3pCL3dDLEtBQUtneEMsbUJBQXFCLENBQUMsRUFDM0JoeEMsS0FBS2l4QyxjQUFnQixDQUNqQixDQUFDLFNBQTJCLElBQUksR0FDaEMsQ0FBQyxVQUE0QixJQUFJLElBRXJDanhDLEtBQUtreEMsYUFBZSxJQUFJMUIsR0FDeEJ4dkMsS0FBS214QyxrQkFBb0IsU0FBVSxJQUNuQ254QyxLQUFLb3hDLGtCQUFvQixTQUFVLElBQ25DcHhDLEtBQUtxeEMsbUJBQXFCLENBQUMsRUFDM0JyeEMsS0FBS3N4QyxvQkFBc0IsWUFBYSxtQkFBbUIsR0FDM0R0eEMsS0FBS3V4Qyx1QkFBeUIsWUFBYSxzQkFBc0IsR0FDakV2eEMsS0FBS3d4Qyx1QkFBeUIsY0FBZSxjQUFlLGFBQXNDLENBQUMsYUFBc0MsZUFDekl4eEMsS0FBS3d4Qyx1QkFBdUJuTSxXQUFXLDhEQUN2Q3JsQyxLQUFLeXhDLGlCQUFtQixJQUFJLEdBQUFDLFFBQzVCMXhDLEtBQUsyd0MsZUFBaUJBLEVBQ3RCM3dDLEtBQUsyeEMsNEJBQThCLGNBQ1IsWUFBYSxDQUFFQyxLQUFNLENKdEVOLG9DSXVFdkJsbUMsU0FBU3lQLElBQ3hCLE1BQU0wMkIsRUFBVzEyQixFQUFFNFMsUUFBUThELElKckVELHNCSXFFZ0MsR0FDcER1RCxFQUFPamEsRUFBRTIyQixjQUFnQjMyQixFQUFFaWEsS0FDM0IyYyxFQUFRNTJCLEVBQUU0UyxRQUFROEQsSUp0RUQsbUJJc0U2QixHQUM5Q21nQixFQUFRNzJCLEVBQUU0UyxRQUFROEQsSUp0RUQsbUJJc0U2QixHQUM5Q29nQixFQUFvQjkyQixFQUFFNFMsUUFBUThELElKdEVBLCtCSXNFeUMsR0FDekU3eEIsS0FBSzJ3QyxlQUFldUIsVUFBWUwsRUFBU00sU0FBU255QyxLQUFLMndDLGVBQWV1QixVQUV0RWx5QyxLQUFLMndDLGVBQWV4d0MsT0FBUzR4QyxFQUFNSSxTQUFTbnlDLEtBQUsyd0MsZUFBZXh3QyxPQUVoRUgsS0FBSzJ3QyxlQUFlcUIsUUFBVUEsRUFBTUcsU0FBU255QyxLQUFLMndDLGVBQWVxQixTQUVyRWh5QyxLQUFLcXhDLG1CQUFtQmpjLEdBQVEsQ0FDNUI3eEIsS0FBTTRYLEVBQ04wMkIsU0FBVUEsRUFBV0EsRUFBU2xqQyxNQUFNLEtBQU8sR0FDM0NvakMsTUFBT0EsRUFBUUEsRUFBTXBqQyxNQUFNLEtBQU8sR0FDbENxakMsTUFBT0EsRUFBUUEsRUFBTXJqQyxNQUFNLEtBQU8sR0FDbENzakMsa0JBQW1CQSxFQUFvQkEsRUFBa0J0akMsTUFBTSxLQUFPLElBQ3pFLElBRUwzTyxLQUFLb3lDLHFCQUF1QixJQUFJQyxHQUNoQ3J5QyxLQUFLc3lDLFdBQWEsYUFBYyxRQUFTLHFCQUF5QixnQkFBbUIsS0FDakZ0eUMsS0FBS3V5QyxxQkFBcUIsSUFFOUJ2eUMsS0FBS3V5QyxzQkFDTCxJQUFJQyxHQUFpQixFQUNqQkMsR0FBdUIsRUFDM0J6eUMsS0FBSzB5QyxZQUFjLGNBQWUsU0FBVSxRQUEwQixDQUFDLFFBQTBCLFdBQTRCLEtBQ3JIRixHQUNBeHlDLEtBQUsyeUMsMkJBQTJCM3lDLEtBQUtteEMsa0JBQW1CbnhDLEtBQUtpeEMsY0FBY2p4QyxLQUFLMHlDLFlBQVlwL0IsT0FBTyxJQUUzR3RULEtBQUs0eUMsbUJBQXFCLGtCQUFrQixLQUN4Q0osR0FBa0JBLEVBQ2JBLEVBR0R4eUMsS0FBSzJ5QywyQkFBMkIzeUMsS0FBS214QyxrQkFBbUJueEMsS0FBS2l4QyxjQUFjanhDLEtBQUsweUMsWUFBWXAvQixRQUY1RixRQUFTdFQsS0FBS214QyxrQkFFcUYsR0FDeEcsNkJBQ0hueEMsS0FBSzZ5QyxtQkFBcUIsa0JBQWtCLEtBQ3hDSixHQUF3QkEsRUFDbkJBLEVBR0R6eUMsS0FBSzJ5QywyQkFBMkIzeUMsS0FBS294QyxrQkFBbUJweEMsS0FBS2t4QyxjQUY3RCxRQUFTbHhDLEtBQUtveEMsa0JBRTRELEdBQy9FLGdDQUNIcHhDLEtBQUt1eEMsdUJBQXVCdUIsVUFBVTd4QixJQUFJLG1DQUMxQ2poQixLQUFLdXhDLHVCQUF1QjNLLEtBQUttTSxRQUFRL3lDLEtBQUs2eUMsb0JBQzlDN3lDLEtBQUsweUMsWUFBWTlMLEtBQUtrTSxVQUFVN3hCLElBQUksbUNBQ3BDamhCLEtBQUsweUMsWUFBWTlMLEtBQUttTSxRQUFRL3lDLEtBQUs0eUMsb0JBQ25DNXlDLEtBQUsyeEMsNEJBQTRCcUIsUUFBUSxrQkFBa0IsSUFBTWh6QyxLQUFLNndDLHVCQUFzQixFQUFNLE1BQU0sR0FDeEc3d0MsS0FBSzJ4Qyw0QkFBNEIvSyxLQUFLdFgsTUFBTTJqQixRQUFVLE9BQ3REanpDLEtBQUs4d0MsdUJBQXVCaGhCLFlBQVk5dkIsS0FBSzJ4Qyw0QkFBNEIvSyxNQUN6RTVtQyxLQUFLOHdDLHVCQUF1QmhoQixZQUFZOXZCLEtBQUsrd0Msa0JBQ2pELENBQ0F3QixzQkFDSSxNQUFNN08sRUFBUTFqQyxLQUFLc3lDLFdBQVdoL0IsTUFDOUIsSUFBS293QixFQUNELE9BQ0osUUFBUzFqQyxLQUFLNndDLHNCQUNkLFFBQVM3d0MsS0FBSyt3QyxtQkFDZC93QyxLQUFLZ3hDLG1CQUFxQixDQUFDLEVBQ1h0TixFQUFNcE8sUUFBUVosU0FDdEJocEIsU0FBU0gsSUFDYjFRLE9BQU9xNEMsS0FBS2x6QyxLQUFLcXhDLG9CQUFvQjNsQyxTQUFTeW5DLElBQzFDLE1BQU10QixFQUFXN3hDLEtBQUtxeEMsbUJBQW1COEIsR0FBVXRCLFNBQzdDRSxFQUFRL3hDLEtBQUtxeEMsbUJBQW1COEIsR0FBVXBCLE1BQzFDQyxFQUFRaHlDLEtBQUtxeEMsbUJBQW1COEIsR0FBVW5CLE1BQzFDb0IsR0FBb0J2QixFQUFTanlDLFFBQVcyTCxFQUFJOG5DLFNBQVd4QixFQUFTTSxTQUFTNW1DLEVBQUk4bkMsU0FDN0VDLEdBQWdCdkIsRUFBTW55QyxRQUFVbXlDLEVBQU1JLFNBQVM1bUMsRUFBSXBMLE1BQ25Eb3pDLEdBQWtCdkIsRUFBTXB5QyxRQUN6QjJMLEVBQUlpb0MsT0FBTyxlQUFrQnhCLEVBQU1HLFNBQVM1bUMsRUFBSWlvQyxPQUFPLGVBQ3hESixHQUFvQkUsR0FBZ0JDLElBQy9CdnpDLEtBQUtneEMsbUJBQW1CemxDLEVBQUk2cEIsUUFDN0JwMUIsS0FBS2d4QyxtQkFBbUJ6bEMsRUFBSTZwQixNQUFRLElBQ3hDcDFCLEtBQUtneEMsbUJBQW1CemxDLEVBQUk2cEIsTUFBTTl0QixLQUFLNnJDLEdBQzNDLEdBQ0YsSUFFTixNQUFNTSxFQUFvQjU0QyxPQUFPcTRDLEtBQUtsekMsS0FBS2d4QyxvQkFDckMwQyxFQUFlLGVBQWdCLFVBQVdoUSxHQUFPLEtBQ25EMWpDLEtBQUt5eEMsaUJBQWlCdmxCLE9BQ3RCLFFBQVNsc0IsS0FBSzZ3QyxzQkFDZCxRQUFTN3dDLEtBQUsrd0MsbUJBQ2QsTUFBTTdsQyxFQUFPd29DLEVBQWFwZ0MsTUFLMUIsR0FISXRULEtBQUt3eEMsdUJBQXVCNUssS0FBS3RYLE1BQU0yakIsU0FEdEMvbkMsR0FBUUEsR0FBTXRMLE9BQVMsRUFDeUIsT0FFQSxRQUNoRHNMLEdBQXdCLElBQWhCQSxFQUFLdEwsT0FFZCxZQURBSSxLQUFLMnhDLDRCQUE0Qi9LLEtBQUt0WCxNQUFNMmpCLFFBQVUsUUFHMUQsTUFBTVUsRUFBZSxDQUFDLEdBQUksR0FBSSxHQUFJLElBQ2xDM3pDLEtBQUs0d0MsaUJBQW1CMWxDLEVBQUt4RCxLQUFLNkQsR0FDVixJQUFJcW9DLEdBQXlCcm9DLEVBQUt2TCxLQUFLZ3hDLG1CQUFtQnpsQyxFQUFJNnBCLE1BQU0xdEIsS0FBS21zQyxHQUFPN3pDLEtBQUtxeEMsbUJBQW1Cd0MsS0FBTUYsS0FHdEksTUFBTUcsRUFBZSxDQUFDLFNBQVUsb0JBQXFCLG9CQUFxQixVQUFVcHNDLEtBQUksQ0FBQ21zQyxFQUFJdnhDLElBQU0sS0FBTXV4QyxFQUFJLENBQUV2a0IsTUFBTyxDQUFFNFosTUFBTyxHQUFHeUssRUFBYXJ4QyxNQUFPeXhDLE9BQVEsT0FDOUosZUFBZ0JELEVBQWEsR0FBSSwyQ0FDakMsZUFBZ0JBLEVBQWEsR0FBSSw0REFDakMsZUFBZ0JBLEVBQWEsR0FBSSwrREFDakMsTUFBTUUsRUFBa0IsT0FBUUYsRUFBYyxDQUFFRyxRQUFTLCtDQUN6RGowQyxLQUFLNndDLHFCQUFxQi9nQixZQUFZa2tCLEdBQ3RDLE1BQU1FLEVBQWMsT0FBUSxHQUFJLENBQUU1a0IsTUFBTyxDQUFFNmtCLFVBQVcsUUFBU0MsU0FBVSxVQUN6RXAwQyxLQUFLNHdDLGlCQUFpQmxsQyxTQUFTMm9DLElBQzNCSCxFQUFZcGtCLFlBQVl1a0IsRUFBT0MsYUFBYSxJQUVoRHQwQyxLQUFLNndDLHFCQUFxQi9nQixZQUFZb2tCLEdBQ2xDbDBDLEtBQUs0d0MsaUJBQWlCaHhDLE9BQVMsSUFDL0JJLEtBQUsyeEMsNEJBQTRCL0ssS0FBS3RYLE1BQU0yakIsUUFBVSxPQUFNLEdBQ2pFLENBQUV6TixVQUFXaU8sSUFDaEJDLEVBQWFhLGNBQ1J2MEMsS0FBS3cwQyxrQkFLTixRQUFTeDBDLEtBQUt3MEMsa0JBQ2R4MEMsS0FBSzB6QyxhQUFlQSxFQUNwQnhxQyxNQUFNdXJDLEtBQUt6MEMsS0FBSzB6QyxhQUFhOU0sS0FBSzFVLFVBQzdCeG1CLFNBQVNtb0MsR0FBTzd6QyxLQUFLdzBDLGlCQUFpQjFrQixZQUFZK2pCLE9BUHZEN3pDLEtBQUt3MEMsaUJBQW1CZCxFQUFhOU0sS0FDckM1bUMsS0FBSzB6QyxhQUFlQSxFQVE1QixDQUNBZiwyQkFBMkIrQixFQUFZQyxHQXVCbkMsT0F0QkEsUUFBU0QsR0FDVDc1QyxPQUFPcTRDLEtBQUt5QixHQUFRanBDLFNBQVNtb0MsSUFDekIsTUFBTWUsRUFBUUQsRUFBT2QsR0FDZnBRLEVBQXVCLFdBQWZtUixFQUFNejBDLEtBQ2hCLGNBQWV5MEMsRUFBTW5GLE9BQVFtRixFQUFNdGhDLE9BQVMsSUFBSSxLQUM1Q3NoQyxFQUFNdGhDLE1BQVFtd0IsRUFBTW53QixLQUFLLElBQ1QsWUFBZnNoQyxFQUFNejBDLEtBQ1gsWUFBYXkwQyxFQUFNbkYsT0FBUW1GLEVBQU10aEMsUUFBUyxHQUFPLEtBQzdDc2hDLEVBQU10aEMsTUFBUW13QixFQUFNbndCLEtBQUssSUFFN0IsYUFBY3NoQyxFQUFNbkYsT0FBUW1GLEVBQU10aEMsT0FBTyxLQUNyQ3NoQyxFQUFNdGhDLE1BQVFtd0IsRUFBTW53QixLQUFLLElBRTdCc2hDLEVBQU1wRSxTQUNOL00sRUFBTW9SLFNBQVUsRUFDaEIsZUFBZ0JwUixFQUFNQSxPQUFTQSxFQUFNbUQsS0FBTWdPLEVBQU10RSxnQkFBa0IsS0FHbkUsZUFBZ0I3TSxFQUFNQSxPQUFTQSxFQUFNbUQsS0FBTWdPLEVBQU1sRixTQUVyRGdGLEVBQVdJLE9BQU9yUixFQUFNbUQsS0FBSyxJQUUxQjhOLENBQ1gsQ0FDSUssdUJBQ0EsTUFBTUMsRUFBa0JoMUMsS0FBS2l4QyxjQUFjanhDLEtBQUsweUMsWUFBWXAvQixPQUN0RHlhLEVBQVUsQ0FBQyxFQUtqQixPQUpBbHpCLE9BQU9xNEMsS0FBSzhCLEdBQWlCdHBDLFNBQVMrbEIsSUFDQSxNQUE5QnVqQixFQUFnQnZqQixHQUFLbmUsUUFDckJ5YSxFQUFRMEQsR0FBT3VqQixFQUFnQnZqQixHQUFLbmUsTUFBSyxJQUUxQ3lhLENBQ1gsQ0FDSWtuQixvQkFDQSxNQUFPLENBQ0hDLGNBQWVsMUMsS0FBS2t4QyxhQUFhM0QsUUFBUWo2QixPQUFTLElBQ2xENmhDLGFBQWNuMUMsS0FBS2t4QyxhQUFhMUQsT0FBT2w2QixPQUFTLEVBRXhELENBQ0E4aEMsWUFXSSxPQVZZLE1BQU8sQ0FDZnAxQyxLQUFLc3lDLFdBQVcxTCxLQUNoQjVtQyxLQUFLdzBDLGlCQUNMeDBDLEtBQUs4d0MsdUJBQ0w5d0MsS0FBS3d4Qyx1QkFBdUI1SyxLQUM1QjVtQyxLQUFLMHlDLFlBQVk5TCxLQUNqQjVtQyxLQUFLbXhDLGtCQUNMbnhDLEtBQUtzeEMsb0JBQ0x0eEMsS0FBS295QyxxQkFBcUJ4TCxNQUMzQixDQUFFdFgsTUFBTyxDQUFFK2xCLFNBQVUsU0FBV3BCLFFBQVMsV0FFaEQsQ0FDQXFCLFlBQ0ksTUFBTyxDQUNINVIsTUFBTzFqQyxLQUFLc3lDLFdBQVdoL0IsTUFDdkJnaUIsUUFBU3QxQixLQUFLMHpDLGFBQWFwZ0MsTUFDM0JpaUMsV0FBWXYxQyxLQUFLMHlDLFlBQVlwL0IsTUFDN0JraUMsdUJBQXdCeDFDLEtBQUs0d0MsaUJBQWlCbHBDLEtBQUttc0MsR0FBT0EsRUFBRzRCLHdCQUM3REMsZ0JBQWlCMTFDLEtBQUs0d0MsaUJBQWlCbHBDLEtBQUttc0MsR0FBT0EsRUFBRzhCLHNCQUFzQnJpQyxRQUM1RXNpQyxRQUFTNTFDLEtBQUs0d0MsaUJBQWlCbHBDLEtBQUttc0MsR0FBT0EsRUFBR2dDLFFBQVUsSUFDeEQ5bkIsUUFBUyxJQUFLL3RCLEtBQUsrMEMsb0JBQXFCLzBDLEtBQUtpMUMsY0FDekNhLHNCQUF1QjkxQyxLQUFLNHdDLGlCQUFpQmxwQyxLQUFLbXNDLEdBQU9BLEVBQUdrQyxpQ0FDaEVDLGVBQWdCaDJDLEtBQUtzeEMsb0JBQW9CaCtCLE1BQ3pDMmlDLG1CQUFtQixFQUNuQkMsdUJBQXdCbDJDLEtBQUtveUMscUJBQXFCOEQsdUJBQ2xEQywyQkFBNEJuMkMsS0FBS295QyxxQkFBcUJwd0MsS0FDdERvMEMsdUJBQXdCcDJDLEtBQUt3eEMsdUJBQXVCbCtCLE1BRTVELEVBRUosTUFBTXNnQyxHQUNGcHBDLFlBQVlvQixFQUFReWxDLEVBQW9Cc0MsR0FDcEMzekMsS0FBS3EyQyw2QkFBK0IsTUFBTyxJQUMzQ3IyQyxLQUFLKzFDLDhCQUFnQyxDQUFDLEVBQ3RDLzFDLEtBQUtzMkMsVUFBWSxNQUFPLElBQ3hCdDJDLEtBQUt1MkMsa0JBQW1CLEVBQ3hCdjJDLEtBQUt3MkMsYUFBZSxDQUFDLEVBQ3JCeDJDLEtBQUt5MkMsb0JBQXFCLEVBQzFCejJDLEtBQUs2MUMsT0FBUyxFQUNkNzFDLEtBQUswMkMsWUFBYyxhQUFjLFNBQVUsR0FBRyxLQUFRMTJDLEtBQUs2MUMsT0FBUzcxQyxLQUFLMDJDLFlBQVlwakMsT0FBUyxDQUFDLElBQy9GdFQsS0FBSzRMLE9BQVNBLEVBRWQ1TCxLQUFLcXhDLG1CQUFxQkEsRUFBbUIvaUMsTUFBSyxDQUFDeEMsRUFBRzNPLElBQzFCLElBQW5CMk8sRUFBRWttQyxNQUFNcHlDLFFBQW1DLElBQW5CekMsRUFBRTYwQyxNQUFNcHlDLFFBQWlCa00sRUFBRWttQyxNQUFNcHlDLFNBQVd6QyxFQUFFNjBDLE1BQU1weUMsT0FFN0VrTSxFQUFFa21DLE1BQU1weUMsU0FBV3pDLEVBQUU2MEMsTUFBTXB5QyxPQUNwQmtNLEVBQUVrbUMsTUFBTXB5QyxPQUFTekMsRUFBRTYwQyxNQUFNcHlDLE9BQ1YsSUFBdEJrTSxFQUFFK2xDLFNBQVNqeUMsUUFBc0MsSUFBdEJ6QyxFQUFFMDBDLFNBQVNqeUMsT0FDL0J6QyxFQUFFMDBDLFNBQVNqeUMsT0FBU2tNLEVBQUUrbEMsU0FBU2p5QyxPQUN0Q2tNLEVBQUUrbEMsU0FBU2p5QyxTQUFXekMsRUFBRTAwQyxTQUFTanlDLE9BQzFCa00sRUFBRStsQyxTQUFTanlDLE9BQVN6QyxFQUFFMDBDLFNBQVNqeUMsT0FDbkNrTSxFQUFFaW1DLE1BQU1ueUMsT0FBU3pDLEVBQUU0MEMsTUFBTW55QyxPQVByQnpDLEVBQUU2MEMsTUFBTXB5QyxPQUFTa00sRUFBRWttQyxNQUFNcHlDLFNBU3hDSSxLQUFLcXhDLG1CQUFtQjNsQyxTQUFTeVAsSUFDN0JuYixLQUFLdzJDLGFBQWFHLEdBQVl4N0IsRUFBRTVYLE9BQVM0WCxFQUFFNVgsSUFBSSxJQUVuRHZELEtBQUs0MkMsMkJBQTZCLGNBQWUsb0JBQXFCRCxHQUFZMzJDLEtBQUtxeEMsbUJBQW1CLEdBQUc5dEMsTUFBT3ZELEtBQUtxeEMsbUJBQW1CM3BDLEtBQUttc0MsR0FBTzhDLEdBQVk5QyxFQUFHdHdDLFNBQVEsS0FDM0ssTUFBTWlHLEVBQU14SixLQUFLNDJDLDJCQUEyQnRqQyxNQUN0Qy9QLEVBQU92RCxLQUFLdzJDLGFBQWFodEMsR0FDL0J4SixLQUFLKzFDLDhCQUFnQyxDQUFDLEVBQ3RDLzFDLEtBQUt1MkMsaUJBQW1CaHpDLEVBQUtzekMsT0FBT2ozQyxPQUFTLEVBQzdDLE1BQU1rM0MsRUFBTzkyQyxLQUFLcXhDLG1CQUFtQjBGLE1BQU1sRCxHQUFPOEMsR0FBWTlDLEVBQUd0d0MsUUFBVWlHLElBQzNFeEosS0FBS2czQyx5QkFBeUJGLEdBQzlCLFFBQVM5MkMsS0FBS3EyQyw4QkFDZDdELEdBQWlCLEVBQ1p4eUMsS0FBS3UyQyxpQkFHTnYyQyxLQUFLaTNDLDhCQUE4QjNuQixNQUFNMmpCLFFBQVUsT0FGbkRqekMsS0FBS2kzQyw4QkFBOEIzbkIsTUFBTTJqQixRQUFVLE1BRU0sSUFFakVqekMsS0FBSzQyQywyQkFBMkJoUSxLQUFLdFgsTUFBTTJqQixRQUFVLE9BQ3JEanpDLEtBQUtrM0Msa0JBQWtCbDNDLEtBQUtxMkMsNkJBQThCcjJDLEtBQUtxeEMsbUJBQW1CLEdBQUc5dEMsTUFDaEZ0RSxNQUFLLEtBQVEsUUFBU2UsS0FBS3EyQyw2QkFBNkIsSUFDN0RyMkMsS0FBS2czQyx5QkFBeUJoM0MsS0FBS3F4QyxtQkFBbUIsSUFDdERyeEMsS0FBS3UyQyxpQkFBbUJ2MkMsS0FBS3F4QyxtQkFBbUIsR0FBRzl0QyxLQUFLc3pDLE9BQU9qM0MsT0FBUyxFQUN4RSxJQUFJNHlDLEdBQWlCLEVBQ3JCeHlDLEtBQUtpM0MsOEJBQWdDLGtCQUFrQnRlLFVBQ25ENlosR0FBa0JBLEVBQ2RBLFFBQ014eUMsS0FBS2szQyxrQkFBa0JsM0MsS0FBS3EyQyw2QkFBOEJyMkMsS0FBS3cyQyxhQUFheDJDLEtBQUs0MkMsMkJBQTJCdGpDLFFBR2xILFFBQVN0VCxLQUFLcTJDLDZCQUNsQixHQUNELHVDQUNIcjJDLEtBQUs0MkMsMkJBQTJCaFEsS0FBS2tNLFVBQVU3eEIsSUFBSSxtQ0FDbkRqaEIsS0FBSzQyQywyQkFBMkJoUSxLQUFLbU0sUUFBUS95QyxLQUFLaTNDLCtCQUM3Q2ozQyxLQUFLdTJDLGlCQUdOdjJDLEtBQUtpM0MsOEJBQThCM25CLE1BQU0yakIsUUFBVSxPQUZuRGp6QyxLQUFLaTNDLDhCQUE4QjNuQixNQUFNMmpCLFFBQVUsT0FHdkRqekMsS0FBS3kyQyxxQkFBdUJwRixFQUFtQnp4QyxPQUFTLElBQU1JLEtBQUt1MkMsa0JBQy9EbEYsRUFBbUIsR0FBR1ksa0JBQWtCcnlDLE9BQVMsR0FDckQsTUFBTXUzQyxFQUFjLEtBQU1uM0MsS0FBSzRMLE9BQU93cEIsS0FBTSxDQUFFNmUsUUFBUyxnREFDakRtRCxFQUFnQixDQUNsQkQsRUFBYW4zQyxLQUFLNDJDLDJCQUEyQmhRLEtBQzdDNW1DLEtBQUtxM0MsMEJBQTJCcjNDLEtBQUswMkMsWUFBWTlQLE1BR3JELGVBQWdCdVEsRUFBYW4zQyxLQUFLNEwsT0FBT3dwQixNQUN6Q2dpQixFQUFjMXJDLFNBQVEsQ0FBQ21vQyxFQUFJdnhDLEtBQ3ZCdXhDLEVBQUd2a0IsTUFBTTRaLE1BQVEsR0FBR3lLLEVBQWFyeEMsS0FBSyxJQUcxQzgwQyxFQUFjMXJDLFNBQVNtb0MsR0FBT0EsRUFBR2YsVUFBVTd4QixJQUFJLCtDQUMvQyxNQUFNcTJCLEVBQXFCLE9BQVFGLEVBQWUsQ0FBRW5ELFFBQVMsd0NBQzdEajBDLEtBQUtzMEMsYUFBZSxPQUFRLElBQzVCdDBDLEtBQUtzMkMsVUFBVXhtQixZQUFZd25CLEdBQzNCdDNDLEtBQUtzMkMsVUFBVXhtQixZQUFZOXZCLEtBQUtxMkMsOEJBQ2hDcjJDLEtBQUtzMEMsYUFBYXhrQixZQUFZOXZCLEtBQUtzMkMsVUFDdkMsQ0FDQVUseUJBQXlCTyxHQUNyQixNQUFNOVQsRUFBUSxjQUFlLG9CQUFxQjhULEVBQVF0RixrQkFBa0IsR0FBSXNGLEVBQVF0RixtQkFDbkZqeUMsS0FBS3EzQywyQkFLTixRQUFTcjNDLEtBQUtxM0MsMkJBQ2RyM0MsS0FBSzIxQyxzQkFBd0JsUyxFQUM3QnY2QixNQUFNdXJDLEtBQUt6MEMsS0FBSzIxQyxzQkFBc0IvTyxLQUFLMVUsVUFDdEN4bUIsU0FBU21vQyxHQUFPN3pDLEtBQUtxM0MsMEJBQTBCdm5CLFlBQVkrakIsT0FQaEU3ekMsS0FBS3EzQywwQkFBNEI1VCxFQUFNbUQsS0FDdkM1bUMsS0FBSzIxQyxzQkFBd0JsUyxFQVFyQyxDQUNJZ1MsNEJBQ0EsT0FBT3oxQyxLQUFLdzJDLGFBQWF4MkMsS0FBSzQyQywyQkFBMkJ0akMsTUFDN0QsQ0FDQXFsQix3QkFBd0IrYixFQUFZbnhDLEdBRWhDLEdBREEsUUFBU214QyxHQUNMbnhDLEVBQUtzekMsT0FBT2ozQyxPQUFTLEVBQ3JCLE9BQU8sUUFDWCxNQUFNNDNDLEVBQUtqMEMsRUFBS2swQyxVQUNWWixRQUFlVyxFQUFHRSxZQUFZLFNBQ3BDLElBQUssSUFBSXAxQyxFQUFJLEVBQUdBLEVBQUlpQixFQUFLc3pDLE9BQU9qM0MsT0FBUTBDLElBQUssQ0FDekMsTUFBTXExQyxFQUFTcDBDLEVBQUtzekMsT0FBT3YwQyxHQUNyQmtILEVBQU14SixLQUFLKzFDLDhCQUE4QjRCLEVBQU92aUIsT0FDbERvaUIsRUFBR0ksWUFBWXIwQyxFQUFLc3pDLE9BQU92MEMsR0FBRzh5QixNQUFNOWhCLE9BQVNxa0MsRUFBTzdSLGFBQ3BEdDhCLElBQ0F4SixLQUFLKzFDLDhCQUE4QjRCLEVBQU92aUIsTUFBUTVyQixHQUN0RCxNQUFNaTZCLEVBQVFvVCxFQUFPRSxNQUFNYyxHQUFRQSxFQUFJQyxTQUFTMWlCLE9BQVN1aUIsRUFBT3ZpQixPQUMzRHFPLElBRW1ELE9BQXBEempDLEtBQUsrMUMsOEJBQThCNEIsRUFBT3ZpQixZQUNVaDdCLElBQXBENEYsS0FBSysxQyw4QkFBOEI0QixFQUFPdmlCLFFBQzFDcU8sRUFBTW53QixNQUFRdFQsS0FBSysxQyw4QkFBOEI0QixFQUFPdmlCLE9BQzVEcU8sRUFBTXNVLFdBQVUsS0FBUS8zQyxLQUFLKzFDLDhCQUE4QjRCLEVBQU92aUIsTUFBUXFPLEVBQU1ud0IsS0FBSyxJQUNyRm9oQyxFQUFXSSxPQUFPclIsRUFBTW1ELE1BQzVCLENBRUEsT0FEQThOLEVBQVdwbEIsTUFBTTBvQixhQUFlLE9BQ3pCdEQsQ0FDWCxFQUVKLFNBQVNpQyxHQUFZcHpDLEdBQ2pCLE9BQU9BLEVBQUt1dUMsY0FBZ0J2dUMsRUFBSzZ4QixJQUNyQyxDQUNBLE1BQU1pZCxHQUNGN25DLGNBQ0l4SyxLQUFLaTRDLDJCQUE2QixDQUFDLEVBQ25DajRDLEtBQUtrNEMsTUFBUSxNQUFPLElBQ3BCbDRDLEtBQUttNEMsb0JBQXNCLENBQUMsRUFDNUJuNEMsS0FBS280QyxhQUFlLE1BQU8sSUFDM0JwNEMsS0FBS3E0QyxpQkFBa0IsRUFDdkJyNEMsS0FBS3M0QyxjQUFnQixrQkFBa0IzZixVQUNuQzM0QixLQUFLcTRDLGlCQUFtQnI0QyxLQUFLcTRDLGdCQUN6QnI0QyxLQUFLcTRDLGdCQUNMcjRDLEtBQUtvNEMsYUFBYTlvQixNQUFNMmpCLFFBQVUsUUFFbENqekMsS0FBS280QyxhQUFhOW9CLE1BQU0yakIsUUFBVSxNQUFNLElBRWhEanpDLEtBQUtvNEMsYUFBYTlvQixNQUFNMmpCLFFBQVUsT0FDTixZQUFhLENBQUVyQixLQUFNLENKcFpOLHFDSXFadENybkIsUUFBUXBQLEdBQU1BLEVBQUUwN0IsT0FBT2ozQyxRQUFVLElBQ2xCOEwsU0FBU3lQLElBQ3pCLE1BQU1pYSxFQUFPamEsRUFBRTIyQixjQUFnQjMyQixFQUFFaWEsS0FDakNwMUIsS0FBS2k0QywyQkFBMkI3aUIsR0FBUWphLENBQUMsSUFFN0NuYixLQUFLaTRDLDJCQUFpQyxLQUFJLEtBQzFDLE1BQU1NLEVBQTRCMTlDLE9BQU9xNEMsS0FBS2x6QyxLQUFLaTRDLDRCQUE0QmxCLE1BQU1sRCxLQUFTN3pDLEtBQUtpNEMsMkJBQTJCcEUsSUFBSzlsQixTQUFzRCxpQ0FBTSxPQUMvTC90QixLQUFLdzRDLDRCQUNELGNBQWUsaUJBQWtCRCxFQUEyQjE5QyxPQUFPcTRDLEtBQUtsekMsS0FBS2k0Qyw2QkFBNkJ0ZixnQkFBb0IzNEIsS0FBS3k0QyxtQkFBbUIsR0FBSyxDQUFFQyxVQUFVLElBQzNLMTRDLEtBQUt5NEMsb0JBQ0x6NEMsS0FBS3c0Qyw0QkFBNEJFLFVBQVcsRUFDNUMxNEMsS0FBS3c0Qyw0QkFBNEIxRixVQUFVN3hCLElBQUksbUNBQy9DamhCLEtBQUt3NEMsNEJBQTRCNVIsS0FBS21NLFFBQVEveUMsS0FBS3M0QyxlQUNuRHQ0QyxLQUFLazRDLE1BQU1wb0IsWUFBWTl2QixLQUFLdzRDLDRCQUE0QjVSLE1BQ3hENW1DLEtBQUtrNEMsTUFBTXBvQixZQUFZOXZCLEtBQUtvNEMsYUFDaEMsQ0FDSWxDLDZCQUNBLE9BQU9sMkMsS0FBS3c0Qyw0QkFBNEJsbEMsTUFDcEN0VCxLQUFLaTRDLDJCQUEyQmo0QyxLQUFLdzRDLDRCQUE0QmxsQyxPQUFTLElBQ2xGLENBQ0FxbEIsMEJBQ0ksTUFBTXAxQixFQUFPdkQsS0FBS2syQyx1QkFHbEIsR0FGQSxRQUFTbDJDLEtBQUtvNEMsY0FDZHA0QyxLQUFLbTRDLG9CQUFzQixDQUFDLEdBQ3ZCNTBDLEdBQVFBLEVBQUtzekMsT0FBT2ozQyxPQUFTLEVBRTlCLFlBREFJLEtBQUtzNEMsY0FBY2hwQixNQUFNMmpCLFFBQVUsUUFJdkNqekMsS0FBS3M0QyxjQUFjaHBCLE1BQU0yakIsUUFBVSxPQUNuQyxNQUFNdUUsRUFBS2owQyxFQUFLazBDLFVBQ1ZaLFFBQWVXLEVBQUdFLFlBQVksU0FDcEMsSUFBSyxJQUFJcDFDLEVBQUksRUFBR0EsRUFBSWlCLEVBQUtzekMsT0FBT2ozQyxPQUFRMEMsSUFBSyxDQUN6QyxNQUFNcTFDLEVBQVNwMEMsRUFBS3N6QyxPQUFPdjBDLEdBQ3JCa0gsRUFBTXhKLEtBQUttNEMsb0JBQW9CUixFQUFPdmlCLE9BQ3hDb2lCLEVBQUdJLFlBQVlyMEMsRUFBS3N6QyxPQUFPdjBDLEdBQUc4eUIsTUFBTTloQixPQUFTcWtDLEVBQU83UixhQUNwRHQ4QixJQUNBeEosS0FBS200QyxvQkFBb0JSLEVBQU92aUIsTUFBUTVyQixHQUM1QyxNQUFNaTZCLEVBQVFvVCxFQUFPRSxNQUFNYyxHQUFRQSxFQUFJQyxTQUFTMWlCLE9BQVN1aUIsRUFBT3ZpQixPQUMzRHFPLElBRUxBLEVBQU1zVSxXQUFVLEtBQVEvM0MsS0FBS200QyxvQkFBb0JSLEVBQU92aUIsTUFBUXFPLEVBQU1ud0IsS0FBSyxJQUMzRXRULEtBQUtvNEMsYUFBYXRELE9BQU9yUixFQUFNbUQsTUFDbkMsQ0FDSixDQUNJQSxXQUNBLE9BQU81bUMsS0FBS2s0QyxLQUNoQixDQUNJbDJDLFdBQ0EsT0FBT2hDLEtBQUttNEMsbUJBQ2hCLEVDeGNHLE1BQU1RLEdBQXlDLHlDQ0N6Q0MsR0FBU3h6QyxHQUFNQSxRQ01yQixNQUFNLFdBQWUxSCxjQ0tyQixTQUFTbTdDLEdBQXVCdmpCLEVBQVN3akIsR0FFNUMsTUFBTyxHQUFHQSxNQURPeGpCLEVBQVExMUIsT0FBUyxFQUFJLEdBQUcwMUIsRUFBUTExQixpQkFBbUIwMUIsRUFBUTV0QixLQUFLbXNDLEdBQU9BLEVBQUd6ZSxPQUFNcnRCLEtBQUssUUFFMUcsQ0NkTyxJQUFJLElBQ1gsU0FBV2c2QixHQUNQQSxFQUF3QixhQUFJLHlCQUM1QkEsRUFBNkIsa0JBQUksb0JBQ2pDQSxFQUFpQyxzQkFBSSx5RUFDckNBLEVBQWdDLHFCQUFJLGtDQUNwQ0EsRUFBbUMsd0JBQUksMEJBQ3ZDQSxFQUEyQyxnQ0FBSSxrQ0FDL0NBLEVBQWlDLHNCQUFJLG1FQUNyQ0EsRUFBaUMsc0JBQUksZ0VBQ3JDQSxFQUFrQyx1QkFBSSxvREFDdENBLEVBQWtDLHVCQUFJLG9EQUN0Q0EsRUFBcUMsMEJBQUksb0RBQ3pDQSxFQUErQixvQkFBSSxnQ0FDbkNBLEVBQXFCLFVBQUksdUJBQ3pCQSxFQUFzQixXQUFJLGFBQzFCQSxFQUE0QixpQkFBSSxtQkFDaENBLEVBQXVDLDRCQUFJLDhCQUMzQ0EsRUFBd0IsYUFBSSxtQ0FDNUJBLEVBQTZDLGtDQUFJLHFDQUNqREEsRUFBNkIsa0JBQUksMENBQ3BDLENBcEJELENBb0JHLEtBQWMsR0FBWSxDQUFDLElBR3ZCLE1BQU1nWCxHQUFjLE9BRXBCLElBQUksSUFDWCxTQUFXL1csR0FDUEEsRUFBbUIsWUFBSSxTQUN2QkEsRUFBYSxNQUFJLFFBQ2pCQSxFQUFnQixTQUFJLFdBQ3BCQSxFQUFlLFFBQUksU0FDbkJBLEVBQWdCLFNBQUksUUFDcEJBLEVBQWMsT0FBSSxTQUNsQkEsRUFBVyxJQUFJLE1BQ2ZBLEVBQVUsR0FBSSxLQUNkQSxFQUFpQixVQUFJLFlBQ3JCQSxFQUFnQixTQUFJLFdBQ3BCQSxFQUFZLEtBQUksT0FDaEJBLEVBQVksS0FBSSxPQUNoQkEsRUFBc0IsZUFBSSxnQkFDMUJBLEVBQWdCLFNBQUksV0FDcEJBLEVBQWtCLFdBQUksWUFDekIsQ0FoQkQsQ0FnQkcsS0FBVSxHQUFRLENBQUMsSUFHZixNQUFNZ1gsR0FBYyw0Q0FFcEIsSUFBSSxJQUNYLFNBQVcvVyxHQUNQQSxFQUFhLE9BQUksa0RBQ2pCQSxFQUFlLFNBQUksNEZBQ25CQSxFQUFlLFNBQUksd0ZBQ25CQSxFQUFhLE9BQUksNENBQ2pCQSxFQUFhLE9BQUksU0FDakJBLEVBQWdCLFVBQUkseUNBQ3BCQSxFQUFlLFNBQUksZ0VBQ25CQSxFQUFzQixnQkFBSSwwQkFDMUJBLEVBQXdCLGtCQUFJLCtFQUM1QkEsRUFBd0Isa0JBQUkseUNBQzVCQSxFQUFpQixXQUFJLGFBQ3JCQSxFQUEwQixvQkFBSSw2QkFDOUJBLEVBQWlCLFdBQUksd0dBQ3hCLENBZEQsQ0FjRyxLQUFTLEdBQU8sQ0FBQyxJQzNEYixNQUFNZ1gsR0FBeUIsQ0FDbEMsa0JBQ0Esb0JBQ0EscUJBQ0Esd0JBQ0Esb0JBR0csU0FBU0MsR0FBYTN0QyxHQUN6QixPQUFRQSxFQUFJcEwsTUFDUixLQUFLLGtCQUNELE9BQU8sV0FDWCxLQUFLLG9CQUVMLEtBQUssbUJBRUwsS0FBSyx3QkFDRCxPQUFPLGFBQ1gsS0FBSyxxQkFDRCxPQUFPb0wsRUFBSTVGLElBQ2YsUUFDSSxNQUFNLElBQUltWCxNQUFNLDRCQUU1QixDQUVPLElBQUlxOEIsR0FPQUMsR0FPQXpULElBYlgsU0FBV3dULEdBQ1BBLEVBQXFCLFFBQUksVUFDekJBLEVBQXdCLFdBQUksWUFDL0IsQ0FIRCxDQUdHQSxLQUFnQkEsR0FBYyxDQUFDLElBSWxDLFNBQVdDLEdBQ1BBLEVBQXlCLFVBQUksWUFDN0JBLEVBQXlCLFVBQUksV0FDaEMsQ0FIRCxDQUdHQSxLQUFrQkEsR0FBZ0IsQ0FBQyxJQUl0QyxTQUFXelQsR0FDUEEsRUFBUUEsRUFBZ0IsT0FBSSxHQUFLLFNBQ2pDQSxFQUFRQSxFQUFtQixVQUFJLEdBQUssWUFDcENBLEVBQVFBLEVBQWtCLFNBQUksR0FBSyxXQUNuQ0EsRUFBUUEsRUFBa0IsU0FBSSxHQUFLLFdBQ25DQSxFQUFRQSxFQUFvQixXQUFJLEdBQUssWUFDeEMsQ0FORCxDQU1HQSxLQUFZQSxHQUFVLENBQUMsSUFHbkIsTUFBTTBULEdBQWdCLEVBaVB0QixTQUFTQyxHQUFjQyxFQUFnQkMsRUFBaUJDLEdBRTNELElBQUssTUFBTXJrQixLQUFRb2tCLEVBQ2YsSUFBS0MsRUFBWUMsSUFBSXRrQixHQUNqQixPQUFPLEVBRWYsSUFBSyxNQUFNN0YsS0FBVWdxQixFQUFnQixDQUNqQyxNQUFNSSxFQUFVRixFQUFZNW5CLElBQUl0QyxHQUNoQyxRQUFnQm4xQixJQUFadS9DLEVBQ0EsTUFBTSxJQUFJNzhCLE1BQU0sc0NBQ3BCLElBQUssTUFBTS9ZLEtBQU80MUMsRUFBUyxDQUN2QixJQUFJQyxHQUFlLEVBQ25CLElBQUssTUFBTUMsS0FBV0wsRUFBaUIsQ0FDbkMsTUFBTU0sRUFBY0wsRUFBWTVuQixJQUFJZ29CLEdBQ3BDLFFBQW9Cei9DLElBQWhCMC9DLEVBQ0EsTUFBTSxJQUFJaDlCLE1BQU0sc0NBQ3BCLElBQUtnOUIsRUFBWTNILFNBQVNwdUMsR0FBTSxDQUM1QjYxQyxHQUFlLEVBQ2YsS0FDSixDQUNKLENBQ0EsR0FBSUEsRUFDQSxPQUFPLENBQ2YsQ0FDSixDQUNBLE9BQU8sQ0FDWCxDQ3JTTyxTQUFTRyxLQUVaLElBQUluNkIsRUFBSyxVQUNULEdBQVcsT0FBUEEsRUFFQSxZQURBLGdCQUFtQixpQkFJdkIsTUFBTW82QixFQUFzQixHQUV0QkMsRUFBMkIsR0FFM0JDLEVBQTRCLEdBRWxDdDZCLEVBQUcwVixRQUFRWixTQUNObkssUUFBUWhmLEdBQVEwdEMsR0FBdUI5RyxTQUFTNW1DLEVBQUlwTCxRQUNwRHVMLFNBQVNILElBQ1YydUMsRUFBMEI1eUMsS0FBS2lFLEVBQUk2cEIsTUFDL0I3cEIsRUFBSTZoQixNQUFNNkosa0JBQW9CLElBQzlCK2lCLEVBQW9CMXlDLEtBQUtpRSxHQUN6QjB1QyxFQUF5QjN5QyxLQUFLaUUsRUFBSTZwQixNQUN0QyxJQUdKLE1BQU1xa0IsRURpT0gsU0FBK0Jua0IsR0FDbEMsTUFBTW1rQixFQUFjLElBQUlVLElBQ3hCLElBQUssTUFBTTV1QyxLQUFPK3BCLEVBQVMsQ0FDdkIsSUFBSzJqQixHQUF1QjlHLFNBQVM1bUMsRUFBSXBMLE1BQ3JDLE1BQU0sSUFBSTJjLE1BQU0sNEJBQ3BCLEdBQW9DLElBQWhDdlIsRUFBSTZoQixNQUFNNkosa0JBQ1YsU0FDSixNQUFNMGlCLEVBQVUsR0FDVlMsRUFBWWxCLEdBQWEzdEMsR0FDL0JBLEVBQUlrcEIsYUFBYS9vQixTQUFRLENBQUNsQyxFQUFLekYsS0FDdkJ5RixJQUFRNHdDLEdBQ1JULEVBQVFyeUMsS0FBS3ZELEVBQUksSUFFekIwMUMsRUFBWW4yQyxJQUFJaUksRUFBSTZwQixLQUFNdWtCLEVBQzlCLENBQ0EsT0FBT0YsQ0FDWCxDQ2pQd0JZLENBQXNCTCxHQUMxQyxHQUFtQyxJQUEvQkEsRUFBb0JwNkMsT0FFcEIsWUFEQSxhQUFnQixzQkFHcEIsR0FBeUMsSUFBckNzNkMsRUFBMEJ0NkMsT0FFMUIsWUFEQSxjQUFpQiwwQkFJckIsSUFBSTA2QyxFQUFVM1UsR0FBUTRVLFNBQVcsRUFDakMsTUFBTUMsRUFBZSxZQUFhLFlBQWdCRixHQUFTLEtBQVEsSUFBSWwvQixFQUFJay9CLEVBQXdDLFFBQTdCbC9CLEVBQUtvL0IsRUFBYWxuQyxhQUEwQixJQUFQOEgsR0FBZ0JBLENBQVUsSUFDckpvL0IsRUFBYW5WLFdBQVcsYUFFeEIsSUFBSW9WLEVBQVk5VSxHQUFRK1UsV0FBYSxFQUNyQyxNQUFNQyxFQUFpQixZQUFhLGNBQWtCRixHQUFXLEtBQVEsSUFBSXIvQixFQUFJcS9CLEVBQTRDLFFBQS9Cci9CLEVBQUt1L0IsRUFBZXJuQyxhQUEwQixJQUFQOEgsR0FBZ0JBLENBQVUsSUFDL0p1L0IsRUFBZXRWLFdBQVcsZUFFMUIsSUFBSXVWLEVBQVlqVixHQUFRa1YsVUFDeEIsTUFBTUMsRUFBaUIsV0FBWSxhQUFpQkYsR0FBVyxLQUMzRCxNQUFNcHhDLEVBQU1zeEMsRUFBZXhuQyxNQUNmLE9BQVI5SixFQUNBc3hDLEVBQWV4bkMsTUFBUXNuQyxFQUNsQnB4QyxHQUFPNnZDLEdBQ1p1QixFQUFZcHhDLEVBRVpzeEMsRUFBZXhuQyxNQUFRc25DLENBQVMsSUFFeENFLEVBQWV6VixXQUFXLGNBRTFCLElBQUkwVixFQUFXM0IsR0FBY3pLLFVBQzdCLE1BQU1xTSxFQUFnQixjQUFlLFlBQWdCRCxFQUFVLENBQUMzQixHQUFjekssVUFBV3lLLEdBQWN4SyxZQUFZLEtBQVEsSUFBSXh6QixFQUFJLE9BQU8yL0IsRUFBMEMsUUFBOUIzL0IsRUFBSzQvQixFQUFjMW5DLGFBQTBCLElBQVA4SCxFQUFnQkEsRUFBS2crQixHQUFjekssU0FBUyxJQUN4T3FNLEVBQWMzVixXQUFXLGFBRXpCLElBQUlrVSxFQUFpQlMsRUFBb0J0eUMsS0FBSzZELEdBQVFBLEVBQUk2cEIsT0FDMUQsTUFBTTZsQixFQUFpQixlQUFnQixXQUFlcjdCLEdBQUksS0FDdEQyNUIsRUFBaUIwQixFQUFlM25DLE1BQU01TCxLQUFLNkQsR0FBUUEsRUFBSTZwQixPQUN2RDhsQixHQUFvQixHQUNyQixDQUFFMVYsVUFBV3lVLEVBQTBCa0IsUUFBU2xCLElBQ25EZ0IsRUFBZTVWLFdBQVcsV0FFMUIsSUFBSStWLEVBQTBCbEIsRUFDOUIsTUFBTTVVLEVBQWdCLGVBQWdCLFlBQWdCMWxCLEdBQUksS0FDdER3N0IsRUFBMEI5VixFQUFjaHlCLE1BQU01TCxLQUFLNkQsR0FBUUEsRUFBSTZwQixPQUMzRGdtQixFQUF3Qng3QyxPQUFTLEdBQ2pDczdDLElBQ0FHLEVBQWlCM3ZDLFNBQVEsQ0FBQzR2QyxFQUFLbG1CLElBQVNrbUIsRUFBSXpVLFFBQVV1VSxFQUF3QmpKLFNBQVMvYyxNQUd2Rm1tQixHQUFhLEdBQ2xCLENBQUUvVixVQUFXMFUsRUFBMkJpQixRQUFTakIsSUFDcEQ1VSxFQUFjRCxXQUFXLGFBRXpCLE1BQU1rVyxFQUFjLEtBQ2hCalYsRUFBSUMsVUFBVSxRQUFXRSxVQUFXLEVBQ3BDK1QsRUFBYTVULEtBQUtDLFFBQVMsRUFDM0I4VCxFQUFlL1QsS0FBS0MsUUFBUyxFQUM3QmlVLEVBQWVsVSxLQUFLQyxRQUFTLEVBQzdCMlUsRUFBUTNVLFFBQVMsRUFDakI0VSxFQUFXNVUsUUFBUyxDQUFJLEVBWXRCcVUsRUFBcUIsS0FSdkI1VSxFQUFJQyxVQUFVLFFBQVdFLFVBQVcsRUFDcEMrVSxFQUFRM1UsUUFBUyxFQUNqQjJULEVBQWE1VCxLQUFLQyxRQUFTLEVBQzNCaVUsRUFBZWxVLEtBQUtDLFFBQVMsRUFDN0JtVSxFQUFjcFUsS0FBS0MsUUFBUyxFQUM1QjhULEVBQWUvVCxLQUFLQyxRQUFVeVMsR0FBY0MsRUFBZ0I2QixFQUF5QjNCLEdBSzlDLElBQW5DMkIsRUFBd0J4N0MsUUFDeEIyNUMsRUFBZTd0QyxTQUFTMHBCLElBQ2hCZ21CLEVBQXdCLEtBQU9obUIsSUFDL0JtbUIsSUFDQSxnQkFBbUIsR0FBRyx1Q0FBOENubUIsTUFDeEUsR0FFUixFQUdFc21CLEVBQWtCLElBQUl2QixJQUN0QmtCLEVBQW1CLElBQUlsQixJQUN2QnNCLEVBQWEsT0FBUSxJQUMzQkEsRUFBV25zQixNQUFNOGtCLFNBQVcsT0FFNUI4RixFQUEwQnh1QyxTQUFTMHBCLElBRS9CLE1BQ011bUIsRUF6SWQsU0FBaUN4N0MsR0FDN0IsT0FBUUEsR0FDSixLQUFLLHFCQUNMLEtBQUssd0JBQ0QsTUFBTyxDQUNIeTdDLGNBQWVqVyxHQUFRa1csT0FDdkJDLGNBQWUzQyxHQUFZNEMsUUFDM0JDLGlCQUFrQixDQUFDN0MsR0FBWTRDLFVBRXZDLEtBQUssa0JBQ0wsS0FBSyxvQkFDTCxLQUFLLG1CQUNELE1BQU8sQ0FDSEgsY0FBZWpXLEdBQVFrVyxPQUN2QkMsY0FBZTNDLEdBQVk4QyxXQUMzQkQsaUJBQWtCLENBQUM3QyxHQUFZOEMsV0FBWTlDLEdBQVk0QyxVQUUvRCxRQUNJLE1BQU0sSUFBSWovQixNQUFNLDRCQUU1QixDQXFIeUJvL0IsQ0FESnQ4QixFQUFHclUsSUFBSTZwQixHQUFNajFCLE1BRTFCdTdDLEVBQWdCcDRDLElBQUk4eEIsRUFBTSxDQUFFeWdCLE9BQVE4RixFQUFTQyxjQUFlejdDLEtBQU13N0MsRUFBU0csZ0JBRTNFLE1BQU1kLEVBQWdCLGNBQWU1bEIsRUFBTXVtQixFQUFTRyxjQUFlSCxFQUFTSyxrQkFBa0IsS0FDMUYsSUFBSTVnQyxFQUFJQyxFQUNSLE1BQU04Z0MsRUFBZ0QsUUFBcEMvZ0MsRUFBS3NnQyxFQUFnQjdwQixJQUFJdUQsVUFBMEIsSUFBUGhhLEVBQWdCQSxFQUFLLENBQUV5NkIsT0FBUThGLEVBQVNDLGNBQWV6N0MsS0FBTXc3QyxFQUFTRyxlQUNwSUssRUFBU2g4QyxLQUFzQyxRQUE5QmtiLEVBQUsyL0IsRUFBYzFuQyxhQUEwQixJQUFQK0gsRUFBZ0JBLEVBQUtzZ0MsRUFBU0csY0FDckZKLEVBQWdCcDRDLElBQUk4eEIsRUFBTSttQixFQUFTLElBRXZDbkIsRUFBY3BVLEtBQUt0WCxNQUFNNFosTUFBUSxNQUNqQzhSLEVBQWMzVixXQUFXLFdBQ3pCMlYsRUFBY3BVLEtBQUtDLFFBQVMsRUFHNUIsTUFBTTFVLEVBQU8sdUJBQXdCLENBQUUsS0FBUWlELEVBQU0sVUFBYSxRQUFTMXZCLElBQUssRUFBR0MsSUFBSyxHQUFJLFlBQWMsRUFBTSxLQUFRLElBQ2xIK3dDLEVBQWMsb0JBQXFCdmtCLEdBQ3pDdWtCLEVBQVlwakMsTUFBUXFvQyxFQUFTQyxjQUM3QmxGLEVBQVlxQixXQUFVLEtBQ2xCLElBQUkzOEIsRUFBSUMsRUFDUixNQUFNOGdDLEVBQWdELFFBQXBDL2dDLEVBQUtzZ0MsRUFBZ0I3cEIsSUFBSXVELFVBQTBCLElBQVBoYSxFQUFnQkEsRUFBSyxDQUFFeTZCLE9BQVE4RixFQUFTQyxjQUFlejdDLEtBQU13N0MsRUFBU0csZUFDcElLLEVBQVN0RyxPQUFzQyxRQUE1Qng2QixFQUFLcTdCLEVBQVlwakMsYUFBMEIsSUFBUCtILEVBQWdCQSxFQUFLc2dDLEVBQVNDLGNBQ3JGRixFQUFnQnA0QyxJQUFJOHhCLEVBQU0rbUIsRUFBUyxJQUV2Q3pGLEVBQVlyUixXQUFXLFdBQ3ZCLE1BQU1pVyxFQUFNLE9BQVEsQ0FBQ04sRUFBY3BVLEtBQU04UCxFQUFZOVAsT0FDckR5VSxFQUFpQi8zQyxJQUFJOHhCLEVBQU1rbUIsR0FDM0JHLEVBQVczRyxPQUFPd0csRUFBSSxJQUcxQixNQUFNaFYsRUFBTSxTQUFVLENBQUV6RixNQUFPLGVBQW1CaUcsUUFBU2tTLEtBQzNELDJCQUE4QjFTLEVBQUlNLE1BQ2xDNlUsRUFBVzVVLFFBQVMsRUFDcEI4VCxFQUFlL1QsS0FBS0MsUUFBVXlTLEdBQWNDLEVBQWdCNkIsRUFBeUIzQixHQUVyRixNQUFNMkMsRUFBZSxrQkFBa0IsS0FBUVgsRUFBVzVVLFFBQVU0VSxFQUFXNVUsTUFBTSxHQUFLLG9CQUNwRjJVLEVBQVUsT0FBUSxDQUFDUixFQUFjcFUsS0FBTXdWLElBQzdDOVYsRUFBSVMsVUFBVSxRQUFXLEtBQ3JCVCxFQUFJVSxRQUNKa1QsRUFBMEIzdkIsUUFBUTZLLElBQVVnbUIsRUFBd0JqSixTQUFTL2MsS0FBTzFwQixTQUFTMHBCLEdBQVNzbUIsRUFBZ0JXLE9BQU9qbkIsS0FDN0gsSUFDSSxNQUFNa25CLEVEL0hYLFNBQWdCMThCLEVBQUkyNUIsRUFBZ0JtQyxFQUFpQmEsRUFBb0JDLEVBQVU1QixFQUFXTixHQUVqRyxHQUFJTSxFQUFZdkIsR0FDWixNQUFNLElBQUl2OEIsTUFBTSx3QkFDcEIsR0FBSThDLEVBQUc4a0IsU0FBVyxFQUNkLE1BQU0sSUFBSTVuQixNQUFNLDJCQUNwQixHQUE4QixJQUExQnk4QixFQUFlMzVDLE9BQ2YsTUFBTSxJQUFJa2QsTUFBTSwwQkFDcEIsR0FBNkIsSUFBekI0K0IsRUFBZ0JwNkMsS0FDaEIsTUFBTSxJQUFJd2IsTUFBTSwyQkFDUyxJQUF6QjQrQixFQUFnQnA2QyxNQUNoQmk0QyxFQUFlN3RDLFNBQVMwcEIsSUFDcEIsR0FBSXNtQixFQUFnQmhDLElBQUl0a0IsR0FDcEIsTUFBTSxJQUFJdFksTUFBTSxHQUFHLHlEQUFnRXNZLEtBQVEsSUFFdkdta0IsRUFBZTd0QyxTQUFTMHBCLElBQ3BCLElBQUttbkIsRUFBbUI3QyxJQUFJdGtCLEdBQ3hCLE1BQU0sSUFBSXRZLE1BQU0sR0FBRyxpQkFBd0IsdUJBQThCLElBRWpGLE1BQU13WSxFQUFVMVYsRUFBRzBWLFFBRW5CaWtCLEVBQWU3dEMsU0FBUzBwQixJQUNwQixJQUFLNmpCLEdBQXVCOUcsU0FBUzdjLEVBQVEwSSxPQUFPNUksR0FBTWoxQixNQUN0RCxNQUFNLElBQUkyYyxNQUFNLDJCQUFrQyxJQUUxRDQrQixFQUFnQmh3QyxTQUFRLENBQUNsQyxFQUFLNHJCLEtBQzFCLElBQUs2akIsR0FBdUI5RyxTQUFTdnlCLEVBQUc2OEIsT0FBT3JuQixHQUFNajFCLE1BQ2pELE1BQU0sSUFBSTJjLE1BQU0sMkJBQWtDLElBRzFELE1BQU13L0IsRUFBaUIsSUFBSW5DLElBNEwzQixPQTFMQVosRUFBZTd0QyxTQUFTMHBCLElBQ3BCLE1BQU03cEIsRUFBTStwQixFQUFRMEksT0FBTzVJLEdBQ3JCZ2xCLEVBQVlsQixHQUFhM3RDLEdBQ3pCbEosRUFBTWtKLEVBQUkzTCxPQUNWKzFCLEVBQVNwcUIsRUFBSWtwQixhQUNiaW9CLEVBQWMsSUFBSWwvQyxZQUFZK04sRUFBSWdnQyxXQUFXM3JDLFFBQzdDKzhDLEVBQWdCLEdBQ2hCQyxFQUFpQixHQUNqQkMsRUFBYSxHQUNiQyxFQUF3QixHQUU5QnBCLEVBQWdCaHdDLFNBQVEsQ0FBQ3F4QyxFQUFZM25CLEtBQ2pDLEdBQUlBLElBQVM3cEIsRUFBSTZwQixLQUFNLENBQ25CLE1BQU15a0IsRUFBVXZrQixFQUFRMEksT0FBTzVJLEdBRy9CLE9BRkF1bkIsRUFBY3IxQyxLQUFLdXlDLEVBQVFwbEIsY0FDM0Jtb0IsRUFBZXQxQyxLQUFLNHhDLEdBQWFXLElBQ3pCa0QsRUFBVzU4QyxNQUNmLEtBQUtnNUMsR0FBWThDLFdBQ2JZLEVBQVd2MUMsTUFBSyxDQUFDd0UsRUFBRzNPLElBQU00L0MsRUFBV2xILE9BQVNwd0MsS0FBS3NNLElBQUlqRyxFQUFJM08sS0FDM0QsTUFDSixLQUFLZzhDLEdBQVk0QyxRQUNiYyxFQUFXdjFDLE1BQUssQ0FBQ3dFLEVBQUczTyxJQUFNNC9DLEVBQVdsSCxRQUFXL3BDLElBQU0zTyxFQUFLLEVBQUksS0FLM0UsS0FFSixNQUFNazdCLEVBQWdCc2tCLEVBQWMvOEMsT0FDOUJvOUMsRUFBZ0IsSUFBSXYvQyxZQUFZay9DLEVBQWMvOEMsUUFDOUNxOUMsRUFBZSxJQUFJdi9DLGFBQWFpL0MsRUFBYy84QyxRQUNwRCxJQUFJczlDLEVBQXFCLEVBRXpCLE1BQU1DLEVBQWUsSUFBSWowQyxNQUFNMHhDLEdBQy9CLElBQUl3QyxFQUFvQixFQUVwQkMsRUFBUyxFQUNUQyxFQUFVLEVBQ1Z4dUMsRUFBTSxFQUNOeXVDLEVBQVksRUFFaEIsTUFTTUMsRUFBc0IsQ0FBQ3o1QyxFQUFLMDVDLEtBQzlCVCxFQUFjdHhDLFNBQVEsQ0FBQ2d5QyxFQUFhcDFDLEtBQ2hDMjBDLEVBQWEzMEMsR0FBS3UwQyxFQUFXYSxHQUFhZixFQUFjZSxHQUFhMzVDLEdBQU00NEMsRUFBY2UsR0FBYUQsR0FBSyxHQUM3RyxFQWlCQUUsRUFBUW5CLElBQWFwRCxHQUFjekssVUFkZixLQUN0QixJQUFJNy9CLEVBQU0sRUFDVixJQUFLLElBQUl4TSxFQUFJLEVBQUdBLEVBQUk0NkMsSUFBc0I1NkMsRUFDdEN3TSxHQUFPbXVDLEVBQWEzNkMsR0FBSzI2QyxFQUFhMzZDLEdBQzFDLE9BQU9tRCxLQUFLbU0sS0FBSzlDLEVBQUksRUFHQyxLQUN0QixJQUFJQSxFQUFNLEVBQ1YsSUFBSyxJQUFJeE0sRUFBSSxFQUFHQSxFQUFJNDZDLElBQXNCNTZDLEVBQ3RDd00sR0FBT3JKLEtBQUtzTSxJQUFJa3JDLEVBQWEzNkMsSUFDakMsT0FBT21ELEtBQUttTSxLQUFLOUMsRUFBSSxFQUtuQjh1QyxFQUFpQkgsSUFDbkIsR0FBSTluQixFQUFPOG5CLEtBQVNyRCxFQUNoQixPQUFPLEVBQ1gsSUFBSyxJQUFJOTNDLEVBQUksRUFBR0EsRUFBSTQ2QyxJQUFzQjU2QyxFQUN0QyxHQUFJcTZDLEVBQWNLLEVBQWMxNkMsSUFBSW03QyxLQUFTYixFQUFlSSxFQUFjMTZDLElBQ3RFLE9BQU8sRUFDZixPQUFPLENBQUksRUFtQlR1N0MsRUFBZ0I5NUMsSUFHbEIsR0EzRHFCLENBQUNBLElBQ3RCbTVDLEVBQXFCLEVBQ3JCLElBQUssSUFBSTU2QyxFQUFJLEVBQUdBLEVBQUkrMUIsSUFBaUIvMUIsRUFDN0JxNkMsRUFBY3I2QyxHQUFHeUIsS0FBUzY0QyxFQUFldDZDLEtBQ3pDMDZDLEVBQWNFLEdBQXNCNTZDLElBQ2xDNDZDLEVBQ04sRUFtREpZLENBQWlCLzVDLEdBRVUsSUFBdkJtNUMsRUFDQSxNQUFNLElBQUlwZ0MsTUFBTSxHQUFHLDZDQUFvRHZSLEVBQUk2cEIsY0FBY3J4QixFQUFNLEtBQ25HcTVDLEVBQW9CLEVBRXBCLElBQUssSUFBSUssRUFBTSxFQUFHQSxFQUFNcDdDLElBQU9vN0MsRUFDM0IsR0FBSUcsRUFBY0gsSUFBU0EsSUFBUTE1QyxFQUFNLENBRXJDeTVDLEVBQW9CejVDLEVBQUswNUMsR0FDekIsTUFBTU0sRUFBVUosSUFFaEIsR0FBSVAsRUFBb0J4QyxFQUNwQnVDLEVBQWFDLEdBQXFCLENBQUUveEMsTUFBT295QyxFQUFLRSxLQUFNSSxLQUNwRFgsTUFFRCxDQUVEQyxFQUFTLEVBQ1RDLEVBQVVILEVBQWEsR0FBR1EsS0FDMUIsSUFBSyxJQUFJcjdDLEVBQUksRUFBR0EsRUFBSTg2QyxJQUFxQjk2QyxFQUNqQ2c3QyxFQUFVSCxFQUFhNzZDLEdBQUdxN0MsT0FDMUJMLEVBQVVILEVBQWE3NkMsR0FBR3E3QyxLQUMxQk4sRUFBUy82QyxHQUdieTdDLEVBQVVULElBQ1ZILEVBQWFFLEdBQVUsQ0FBRWh5QyxNQUFPb3lDLEVBQUtFLEtBQU1JLEdBQ25ELENBQ0osQ0FFSixHQUEwQixJQUF0QlgsRUFDQSxNQUFNLElBQUl0Z0MsTUFBTSxHQUFHLDZDQUFvRHZSLEVBQUk2cEIsY0FBY3J4QixFQUFNLEtBQ25HLEdBQUl3SCxFQUFJcEwsT0FBUyxxQkFDYixNQW5EOEIsTUFDbEN1OEMsRUFBWWh4QyxTQUFRLENBQUN1SSxFQUFHM1IsRUFBR2MsSUFBUUEsRUFBSWQsR0FBSyxJQUM1QyxJQUFJQSxFQUFJLEVBQ1IsSUFBS0EsRUFBSSxFQUFHQSxFQUFJODZDLElBQXFCOTZDLElBQy9CbzZDLEVBQVkvbUIsRUFBT3duQixFQUFhNzZDLEdBQUcrSSxRQUN6QyxJQUFJMnlDLEVBQVV0QixFQUFZLEdBQ3RCdUIsRUFBYSxFQU9qQixPQU5BdkIsRUFBWWh4QyxTQUFRLENBQUN1SSxFQUFHM1IsS0FDaEIyUixFQUFJK3BDLElBQ0pBLEVBQVUvcEMsRUFDVmdxQyxFQUFhMzdDLEVBQ2pCLElBRUcyN0MsQ0FBVSxFQXNDTkMsR0FFWHB2QyxFQUFNLEVBQ04sSUFBSyxJQUFJeE0sRUFBSSxFQUFHQSxFQUFJODZDLElBQXFCOTZDLEVBQ3JDd00sR0FBTzZtQixFQUFPd25CLEVBQWE3NkMsR0FBRytJLE9BRWxDLE9BREFreUMsRUFBWXp1QyxFQUFNc3VDLEVBQ2Q3eEMsRUFBSXBMLE9BQVMsa0JBQ05zRixLQUFLME0sTUFBTW9yQyxHQUNmQSxDQUFTLEVBRXBCLEdBQUlqRCxFQUFTLENBRVQsSUFBSyxNQUFNaDRDLEtBQUtpNkMsRUFBbUIxcUIsSUFBSXVELEdBQ25DLElBQ0lPLEVBQU9yekIsR0FBS3U3QyxFQUFhdjdDLEVBQzdCLENBQ0EsTUFBTzVGLEdBQ0hvZ0QsRUFBc0J4MUMsS0FBS2hGLEdBQ3JCNUYsYUFBZW9nQixPQUNqQixjQUFpQixjQUN6QixDQUNBZ2dDLEVBQXNCbDlDLE9BQVMsR0FDL0IwOEMsRUFBZWg1QyxJQUFJOHhCLEVBQU0wbkIsR0FFN0J2eEMsRUFBSWpJLElBQUksRUFBR2lJLEVBQUlzbUIsSUFBSSxHQUN2QixLQUNLLENBRUQsTUFBTXJrQixFQUFPakMsRUFBSTR5QyxRQUNqQixJQUFJNzdDLEVBQUksRUFDSjg3QyxFQUFXLEdBQUdocEIsS0FBUTJqQixNQUUxQixLQUFPbjVCLEVBQUcwVixRQUFRK29CLFNBQVNELElBQ3ZCQSxFQUFXLEdBQUdocEIsS0FBUTJqQixNQUFlejJDLE9BQ25DQSxFQUVOa0wsRUFBSzRuQixLQUFPZ3BCLEVBQ1osTUFBTUUsRUFBYTl3QyxFQUFLaW5CLGFBRXhCLElBQUssTUFBTW55QixLQUFLaTZDLEVBQW1CMXFCLElBQUl1RCxHQUNuQyxJQUNJa3BCLEVBQVdoOEMsR0FBS3U3QyxFQUFhdjdDLEVBQ2pDLENBQ0EsTUFBTzVGLEdBQ0hvZ0QsRUFBc0J4MUMsS0FBS2hGLEdBQ3JCNUYsYUFBZW9nQixPQUNqQixjQUFpQixjQUN6QixDQUNBZ2dDLEVBQXNCbDlDLE9BQVMsR0FDL0IwOEMsRUFBZWg1QyxJQUFJODZDLEVBQVV0QixHQUNqQ3R2QyxFQUFLbEssSUFBSSxFQUFHa0ssRUFBS3FrQixJQUFJLElBQ3JCalMsRUFBRzBWLFFBQVFyVSxJQUFJelQsRUFDbkIsS0FFRzh1QyxDQUNYLENDNUZtQ2lDLENBQU8zK0IsRUFBSTI1QixFQUFnQm1DLEVBQWlCakMsRUFBYXNCLEVBQVVILEVBQVdOLEdBQ2hHRyxHRG1LVixTQUFzQjc2QixFQUFJMDhCLEdBQzdCQSxFQUFlNXdDLFNBQVEsQ0FBQ2l1QyxFQUFTNkUsS0FDN0IsTUFBTWp6QyxFQUFNcVUsRUFBR3JVLElBQUlpekMsR0FDbkIsR0FBWSxPQUFSanpDLEVBQWMsQ0FDZCxJQUFLMHRDLEdBQXVCOUcsU0FBUzVtQyxFQUFJcEwsTUFDckMsTUFBTSxJQUFJMmMsTUFBTSw0QkFDcEIsTUFBTTJoQyxFQXBCbEIsU0FBNkJsekMsR0FDekIsT0FBUUEsRUFBSXBMLE1BQ1IsS0FBSyxxQkFDTCxLQUFLLHdCQUNELE9BZFosU0FBeUJvTCxHQUNyQixNQUFNNnVDLEVBQVlsQixHQUFhM3RDLEdBQ3pCbXpDLEVBQU1uekMsRUFBSWtwQixhQUNWcHlCLEVBQU1xOEMsRUFBSTkrQyxPQUNoQixJQUFLLElBQUkwQyxFQUFJLEVBQUdBLEVBQUlELElBQU9DLEVBQ3ZCLEdBQUlvOEMsRUFBSXA4QyxLQUFPODNDLEVBQ1gsT0FBTzd1QyxFQUFJc21CLElBQUl2dkIsR0FDdkIsTUFBTSxJQUFJd2EsTUFBTSxnQkFDcEIsQ0FNbUI2aEMsQ0FBZ0JwekMsR0FDM0IsS0FBSyxrQkFDTCxLQUFLLG9CQUNMLEtBQUssbUJBQ0QsT0FBT0EsRUFBSTZoQixNQUFNd3hCLElBQ3JCLFFBQ0ksTUFBTSxJQUFJOWhDLE1BQU0sNEJBRTVCLENBUTRCK2hDLENBQW9CdHpDLEdBQ3BDb3VDLEVBQVFqdUMsU0FBUzNILEdBQVF3SCxFQUFJakksSUFBSVMsRUFBSzA2QyxJQUMxQyxJQUVSLENDNUtnQkssQ0FBYWwvQixFQUFJMDhCLEVBQ3pCLENBQ0EsTUFBTzUvQyxHQUNDQSxhQUFlb2dCLE1BQ2YsY0FBaUIsR0FBRyxpQkFBd0JwZ0IsRUFBSXFpRCxXQUVoRCxjQUFpQixHQUFHLGlCQUF3QixnQkFDcEQsS0FFQzk5QixJQUFJZzZCLEdBQ0poNkIsSUFBSXFrQixHQUNKcmtCLElBQUl1NkIsR0FDSnY2QixJQUFJdzZCLEdBQ0p4NkIsSUFBSTY1QixHQUNKNzVCLElBQUl1NUIsR0FDSnY1QixJQUFJMDVCLEdBQ0poUSxNQUNULENDdk1PLE1BQU1xVSxXQUFrQnRPLEdBQzNCbG1DLFlBQVltbUMsRUFBaUIsQ0FBQyxHQUMxQnNPLE1BQU10TyxHQUNOM3dDLEtBQUtrL0MseUJBQTJCLFdBQVksdUJBQXdCLElBQ3BFbC9DLEtBQUttL0MsbUJBQXFCLFdBQVksaUJBQWtCLEdBQ3hEbi9DLEtBQUtvL0MsZUFBaUIsWUFBYSxjQUFjLEdBQ2pEeFIsS0FBMkIzdUMsTUFBTXN4QyxJQUN6QkEsRUFDQXZ3QyxLQUFLby9DLGVBQWUvWixXQUFXLG1DQUFtQ2tMLE9BR2xFdndDLEtBQUtvL0MsZUFBZTlyQyxPQUFRLEVBQzVCdFQsS0FBS28vQyxlQUFlL1osV0FBVywyQkFDL0JybEMsS0FBS28vQyxlQUFldkssU0FBVSxFQUNsQyxHQUVSLENBQ0FPLFlBVUksT0FUWSxNQUFPLENBQ2ZwMUMsS0FBS3N5QyxXQUFXMUwsS0FDaEI1bUMsS0FBS3cwQyxpQkFDTHgwQyxLQUFLOHdDLHVCQUNMOXdDLEtBQUt3eEMsdUJBQXVCNUssS0FDNUI1bUMsS0FBS2svQyx5QkFBeUJ0WSxLQUM5QjVtQyxLQUFLbS9DLG1CQUFtQnZZLEtBQ3hCNW1DLEtBQUtvL0MsZUFBZXhZLE1BQ3JCLENBQUV0WCxNQUFPLENBQUUrbEIsU0FBVSxTQUFXcEIsUUFBUyxXQUVoRCxDQUNJVSxhQUNBLE1BQU8sQ0FDSGpSLE1BQU8xakMsS0FBS3N5QyxXQUFXaC9CLE1BQ3ZCZ2lCLFFBQVN0MUIsS0FBSzB6QyxhQUFhcGdDLE1BQzNCaWlDLFdBQVl2MUMsS0FBSzB5QyxZQUFZcC9CLE1BQzdCa2lDLHVCQUF3QngxQyxLQUFLNHdDLGlCQUFpQmxwQyxLQUFLbXNDLEdBQU9BLEVBQUc0Qix3QkFDN0RDLGdCQUFpQjExQyxLQUFLNHdDLGlCQUFpQmxwQyxLQUFLbXNDLEdBQU9BLEVBQUc4QixzQkFBc0JyaUMsUUFDNUVzaUMsUUFBUzUxQyxLQUFLNHdDLGlCQUFpQmxwQyxLQUFLbXNDLEdBQU9BLEVBQUdnQyxTQUM5Q0Msc0JBQXVCOTFDLEtBQUs0d0MsaUJBQWlCbHBDLEtBQUttc0MsR0FBT0EsRUFBR2tDLGdDQUM1REssdUJBQXdCcDJDLEtBQUt3eEMsdUJBQXVCbCtCLE1BQ3BEK3JDLFVBQVdyL0MsS0FBS2svQyx5QkFBeUI1ckMsTUFDekNnc0MsY0FBZXQvQyxLQUFLbS9DLG1CQUFtQjdyQyxPQUFTLEVBQ2hEKzhCLFVBQVdyd0MsS0FBS28vQyxlQUFlOXJDLFFBQVMsRUFFaEQsRUM5Q1csTUFBTWlzQyxHQUNqQi8wQyxZQUFZWixFQUFLazhCLEdBQWUsR0FVNUIsR0FUQTlsQyxLQUFLdy9DLFFBQVUsRUFDZngvQyxLQUFLeS9DLFNBQVcsRUFDaEJ6L0MsS0FBSzAvQyxhQUFlLEVBQ3BCMS9DLEtBQUsyL0MsZUFBaUIsRUFDdEIzL0MsS0FBSzQvQyx1QkFBeUIsRUFDOUI1L0MsS0FBSzYvQyx5QkFBMkIsRUFDaEM3L0MsS0FBSzgvQyxlQUFpQixHQUN0QjkvQyxLQUFLKy9DLHVCQUF5QixFQUM5Qi8vQyxLQUFLZ2dELGlCQUFtQixJQUNMLGlCQUFScDJDLEVBQWtCLENBQ3pCLE1BQU1oSyxFQUFTZ0ssRUFDVHEyQyxFQUFPVixHQUFTVyxjQUFjdGdELEdBQ3BDLEdBQUlrbUMsRUFDQSxJQUFLLElBQUl4akMsRUFBSSxFQUFHQSxFQUFJMjlDLEVBQUtyZ0QsT0FBUTBDLElBQzdCMjlDLEVBQUszOUMsSUFBTSxFQUVuQnRDLEtBQUttZ0QsTUFBUUYsRUFDYmpnRCxLQUFLdy9DLFFBQVU1L0MsQ0FDbkIsS0FDSyxNQUFJZ0ssYUFBZW5NLGFBS3BCLE1BQU0sSUFBSXFmLE1BQU0sdUJBSmhCOWMsS0FBS21nRCxNQUFRdjJDLEVBQ2I1SixLQUFLdy9DLFFBQVUxWixDQUluQixDQUNKLENBQ0FyUixhQUFlLE9BQU96MEIsS0FBS21nRCxLQUFPLENBQ2xDQyxXQUFXbjdDLEVBQUtvN0MsR0FDWixHQUFJcDdDLEVBQU0sRUFDTixNQUFNLElBQUk2WCxNQUFNLEdBQUd1akMsZ0NBQzNCLENBQ0FDLGNBQWNodEMsRUFBTzVOLEVBQUtDLEVBQUswNkMsR0FDM0IsR0FBSy9zQyxFQUFRNU4sR0FBUzROLEVBQVEzTixFQUMxQixNQUFNLElBQUltWCxNQUFNLFlBQVl1akMsTUFBWS9zQyxvQkFBd0I1TixNQUFRQyxLQUNoRixDQUNBNkgsS0FBS3JULEVBQUtvbUQsRUFBS3p2QyxHQUNYLElBQUssSUFBSXhPLEVBQUksRUFBR0EsRUFBSXdPLEVBQU94TyxJQUN2QmkrQyxFQUFJaitDLEdBQUtuSSxFQUFJbUksRUFDckIsQ0FDQWsrQyxTQUFTQyxHQUNMLEdBQUl6Z0QsS0FBS3cvQyxTQUFXaUIsRUFBTWpCLFFBQ3RCLE1BQU0sSUFBSTFpQyxNQUFNLG1CQUFtQjljLEtBQUt3L0MsY0FBY2lCLEVBQU1qQixZQUNoRXgvQyxLQUFLd04sS0FBS2l6QyxFQUFNTixNQUFPbmdELEtBQUttZ0QsTUFBT25nRCxLQUFLMGdELGNBQ3hDMWdELEtBQUt5L0MsVUFDVCxDQUNJNy9DLGFBQ0EsT0FBT0ksS0FBS3cvQyxPQUNoQixDQUNJcGlELGFBQ0EsT0FBTzRDLEtBQUttZ0QsS0FDaEIsQ0FDSS9pRCxXQUFPMkwsR0FDUC9JLEtBQUttZ0QsTUFBUXAzQyxFQUNiL0ksS0FBS3kvQyxVQUNULENBQ0lrQixjQUNBLE9BQU8zZ0QsS0FBS3kvQyxRQUNoQixDQUNJa0IsWUFBUXJ0QyxHQUNSdFQsS0FBS3kvQyxTQUFXbnNDLENBQ3BCLENBQ0FzdEMsaUJBQWlCQyxHQUFTLEdBQ3RCN2dELEtBQUt5L0MsVUFDVCxDQUNJaUIsbUJBQ0EsT0FBT2o3QyxLQUFLb04sT0FBTzdTLEtBQUt3L0MsUUFBVSxJQUFRLEdBQzlDLENBQ0lzQixvQkFDQSxPQUFPOWdELEtBQUt5L0MsVUFBWXovQyxLQUFLKy9DLHNCQUF3Qi8vQyxLQUFLOC9DLGVBQWlCLEVBQy9FLENBQ0lnQixrQkFBYzFyQixHQUNkcDFCLEtBQUs4L0MsZUFBaUIxcUIsRUFDdEJwMUIsS0FBSysvQyxzQkFBd0IvL0MsS0FBS3kvQyxRQUN0QyxDQUNJbGtELFdBQ0EsT0FBT3lFLElBQ1gsQ0FDQStnRCxVQUFVenRDLEdBQ04sR0FBSUEsRUFBUSxFQUNSLE1BQU0sSUFBSXdKLE1BQU0sa0JBQ3BCLEdBQUl4SixHQUFTdFQsS0FBS3cvQyxRQUNkLE9BQ0osTUFBTXdCLEVBQWN2N0MsS0FBS29OLE9BQU9TLEVBQVEsSUFBUSxJQUNoRCxHQUFLMHRDLEVBQWNoaEQsS0FBS21nRCxNQUFNdmdELFFBQWFvaEQsRUFBY2hoRCxLQUFLZ2dELGlCQUFvQmhnRCxLQUFLbWdELE1BQU12Z0QsT0FBUyxDQUNsRyxNQUFNcWhELEVBQVUsSUFBSXhqRCxZQUFZdWpELEdBQ2hDaGhELEtBQUt3TixLQUFLeE4sS0FBS21nRCxNQUFPYyxFQUFVRCxFQUFjaGhELEtBQUttZ0QsTUFBTXZnRCxPQUFVSSxLQUFLbWdELE1BQU12Z0QsT0FBU29oRCxHQUN2RmhoRCxLQUFLbWdELE1BQVFjLENBQ2pCLENBQ0kzdEMsRUFBUXRULEtBQUt3L0MsVUFDVHgvQyxLQUFLdy9DLFFBQVUsR0FBTyxJQUN0QngvQyxLQUFLbWdELE1BQU1uZ0QsS0FBSzBnRCxhQUFlLEtBQU8sSUFBTzFnRCxLQUFLdy9DLFFBQVUsR0FBUSxLQUFTLEdBQ2pGeC9DLEtBQUttZ0QsTUFBTWpULEtBQUssRUFBR2x0QyxLQUFLMGdELGFBQWNNLElBRTFDaGhELEtBQUt3L0MsUUFBVWxzQyxFQUNmdFQsS0FBS3kvQyxVQUNULENBQ0F5QixlQUFlQyxFQUFNQyxHQUNqQixHQUFJRCxFQUFLM0IsU0FBVzRCLEVBQUs1QixRQUNyQixNQUFNLElBQUkxaUMsTUFBTSxtQkFBbUJxa0MsRUFBSzNCLGNBQWM0QixFQUFLNUIsWUFDL0QsTUFBTTk4QixFQUFPLElBQUk2OEIsR0FBUzRCLEVBQUszQixTQUMvQjk4QixFQUFLODhCLFFBQVUyQixFQUFLM0IsUUFDcEI5OEIsRUFBS3k5QixNQUFRWixHQUFTVyxjQUFjeDlCLEVBQUs4OEIsU0FDekM5OEIsRUFBSys4QixTQUFXLEVBQ2hCLE1BQU1wOUMsRUFBTTgrQyxFQUFLVCxhQUNqQixJQUFLLElBQUlwK0MsRUFBSSxFQUFHQSxFQUFJRCxFQUFLQyxJQUNyQm9nQixFQUFLeTlCLE1BQU03OUMsR0FBSzYrQyxFQUFLaEIsTUFBTTc5QyxHQUFLOCtDLEVBQUtqQixNQUFNNzlDLEdBQy9DLE9BQU9vZ0IsQ0FDWCxDQUNBdytCLHFCQUFxQnRoRCxHQUNqQixPQUFPLElBQUluQyxZQUFZZ0ksS0FBS29OLE9BQU9qVCxFQUFTLElBQVEsSUFDeEQsQ0FDQXNoRCxrQkFBa0IxVixHQUNkLE1BQU05b0IsRUFBTyxJQUFJNjhCLEdBQVMvVCxFQUFPNXJDLFFBQ2pDOGlCLEVBQUsrOEIsU0FBVyxFQUNoQixJQUFLLElBQUluOUMsRUFBSSxFQUFHQSxFQUFJb2dCLEVBQUs4OEIsUUFBU2w5QyxJQUMxQmtwQyxFQUFPbHBDLEtBQ1BvZ0IsRUFBS3k5QixNQUFNMTZDLEtBQUtvTixNQUFNdlEsRUFBSSxNQUFVLElBQU9BLEVBQUksR0FBUSxLQUUvRCxPQUFPb2dCLENBQ1gsQ0FFQXcrQixlQUFlcHdDLEVBQU9PLEdBQ2xCLE1BQU1xUixFQUFPLElBQUk2OEIsR0FBU3p1QyxHQUMxQixJQUFLLElBQUl4TyxFQUFJLEVBQUdBLEVBQUl3TyxJQUFTeE8sRUFDekJvZ0IsRUFBSzIrQixPQUFPLytDLEVBQUcrTyxFQUFLL08sSUFFeEIsT0FEQW9nQixFQUFLKzhCLFNBQVcsRUFDVC84QixDQUNYLENBRUF3K0Isa0JBQWtCcGpDLEdBQ2QsT0FBT3loQyxHQUFTK0IsUUFBUXhqQyxFQUFFbGUsUUFBUzBDLEdBQXFCLEtBQWZ3YixFQUFFeWpDLE9BQU9qL0MsSUFDdEQsQ0FFQTQrQyx1QkFBdUIxQixFQUFTVyxHQUM1QixNQUFNejlCLEVBQU8sSUFBSTY4QixHQUFTQyxHQUUxQixPQURBOThCLEVBQUt5OUIsTUFBUUEsRUFDTno5QixDQUNYLENBRUF3K0IsaUJBQWlCTSxHQUNiLE1BQU1uL0MsRUFBTW0vQyxFQUFNNWhELE9BQ1o4aUIsRUFBTyxJQUFJNjhCLEdBQWUsRUFBTmw5QyxHQUMxQnFnQixFQUFLeTlCLE1BQVEsSUFBSTFpRCxZQUFZZ0ksS0FBS29OLE9BQU94USxFQUFNLEdBQUssSUFDcERxZ0IsRUFBSzg4QixRQUFnQixFQUFObjlDLEVBQ2YsSUFBSW8vQyxFQUFPLEVBQ1BDLEVBQU8sRUFDWCxLQUFRci9DLEVBQU1xL0MsR0FBUyxHQUNuQmgvQixFQUFLeTlCLE1BQU1zQixLQUEyQixJQUFkRCxFQUFNRSxJQUFvQyxJQUFsQkYsRUFBTUUsRUFBTyxLQUFjLEdBQ25ELElBQWxCRixFQUFNRSxFQUFPLEtBQWMsSUFBNkIsSUFBbEJGLEVBQU1FLEVBQU8sS0FBYyxHQUN2RUEsR0FBUSxFQVNaLE9BUElyL0MsRUFBTXEvQyxHQUFRLElBQ2RoL0IsRUFBS3k5QixNQUFNc0IsSUFBMkIsSUFBbEJELEVBQU1FLEVBQU8sS0FBYyxJQUMvQ3IvQyxFQUFNcS9DLEdBQVEsSUFDZGgvQixFQUFLeTlCLE1BQU1zQixLQUE0QixJQUFsQkQsRUFBTUUsRUFBTyxLQUFjLEdBQ2hEci9DLEVBQU1xL0MsR0FBUSxJQUNkaC9CLEVBQUt5OUIsTUFBTXNCLElBQXVCLElBQWRELEVBQU1FLElBQzlCaC9CLEVBQUsrOEIsU0FBVyxFQUNULzhCLENBQ1gsQ0FDQWpiLFdBQ0ksTUFBTyxHQUFHekgsS0FBS3cvQyxpQkFBaUJ4L0MsS0FBSzJoRCxXQUFVLFFBQ25ELENBRUFDLE9BQU9uQixHQUNILEdBQUl6Z0QsTUFBUXlnRCxFQUNSLE9BQU8sRUFDWCxHQUFhLE1BQVRBLEVBQ0EsT0FBTyxFQUNYLEdBQUl6Z0QsS0FBS3cvQyxTQUFXaUIsRUFBTWpCLFFBQ3RCLE9BQU8sRUFDWCxHQUFvQixHQUFoQngvQyxLQUFLdy9DLFFBQ0wsT0FBTyxFQUNYLElBQUssSUFBSWw5QyxFQUFJLEVBQUdBLEVBQUl0QyxLQUFLbWdELE1BQU12Z0QsT0FBUyxFQUFHMEMsSUFDdkMsR0FBSXRDLEtBQUttZ0QsTUFBTTc5QyxJQUFNbStDLEVBQU1OLE1BQU03OUMsR0FDN0IsT0FBTyxFQUNmLElBQUssSUFBSUEsRUFBOEIsR0FBekJ0QyxLQUFLbWdELE1BQU12Z0QsT0FBUyxHQUFRMEMsRUFBSXRDLEtBQUt3L0MsUUFBU2w5QyxJQUN4RCxHQUFJdEMsS0FBSzZoRCxPQUFPdi9DLElBQU1tK0MsRUFBTW9CLE9BQU92L0MsR0FDL0IsT0FBTyxFQUVmLE9BQU8sQ0FDWCxDQUVBNjdDLFFBQ0ksTUFBTTJELEVBQVcsSUFBSXZDLEdBQVMsR0FBRyxHQUlqQyxPQUhBdUMsRUFBUzNCLE1BQVExaUQsWUFBWWczQyxLQUFLejBDLEtBQUttZ0QsT0FDdkMyQixFQUFTdEMsUUFBVXgvQyxLQUFLdy9DLFFBQ3hCc0MsRUFBU3JDLFNBQVd6L0MsS0FBS3kvQyxTQUNsQnFDLENBQ1gsQ0FFQWhoRCxLQUFLdVEsRUFBTXd2QyxHQUNQN2dELEtBQUsraEQsUUFBTyxHQUFPLEdBQ25CLElBQUssSUFBSXovQyxFQUFJLEVBQUdBLEVBQUl0QyxLQUFLdy9DLFFBQVNsOUMsSUFDMUIrTyxFQUFLL08sS0FDTHRDLEtBQUttZ0QsTUFBTTE2QyxLQUFLb04sTUFBTXZRLEVBQUksTUFBVSxJQUFPQSxFQUFJLEdBQVEsS0FHL0QsT0FEQXRDLEtBQUs0Z0QsaUJBQWlCQyxHQUNmN2dELElBQ1gsQ0FFQWdpRCxPQUFPbkIsR0FBUyxHQUNaLElBQUssSUFBSXYrQyxFQUFJLEVBQUdBLEVBQUl0QyxLQUFLbWdELE1BQU12Z0QsT0FBUTBDLElBQ25DdEMsS0FBS21nRCxNQUFNNzlDLEtBQU8sRUFDdEJ0QyxLQUFLNGdELGlCQUFpQkMsRUFDMUIsQ0FFQWtCLE9BQU96dUMsRUFBT3V0QyxHQUFTLEdBQ25CLE1BQU1vQixFQUFRM3VDLEdBQVMsRUFBSSxFQUNyQmpSLEVBQU1yQyxLQUFLMGdELGFBQ2pCLElBQUssSUFBSXArQyxFQUFJLEVBQUdBLEVBQUlELEVBQUtDLElBQ3JCdEMsS0FBS21nRCxNQUFNNzlDLEdBQUsyL0MsRUFDcEJqaUQsS0FBSzRnRCxpQkFBaUJDLEVBQzFCLENBSUFxQixXQUFXQyxFQUFTN3VDLEdBQVEsRUFBTXZHLEdBQVEsRUFBTTh6QyxHQUFTLEdBQ2pEOXpDLEdBQ0EvTSxLQUFLK2hELFFBQVF6dUMsR0FBTyxHQUN4QixJQUFLLE1BQU1oUixLQUFLNi9DLEVBQ1puaUQsS0FBS29pRCxRQUFROS9DLEVBQUdnUixHQUNwQnRULEtBQUs0Z0QsaUJBQWlCQyxFQUMxQixDQUNBd0IsV0FBV0YsRUFBUzd1QyxHQUFRLEdBQ3hCLElBQUssTUFBTWpJLEtBQVM4MkMsRUFDaEIsR0FBSW5pRCxLQUFLNmhELE9BQU94MkMsSUFBVWlJLEVBQ3RCLE9BQU8sRUFFZixPQUFPLENBQ1gsQ0FDQWd2QyxTQUFTSCxFQUFTN3VDLEdBQVEsR0FDdEIsSUFBSyxNQUFNakksS0FBUzgyQyxFQUNoQixHQUFJbmlELEtBQUs2aEQsT0FBT3gyQyxJQUFVaUksRUFDdEIsT0FBTyxFQUVmLE9BQU8sQ0FDWCxDQUNBaXZDLFNBQVNDLEVBQU9sdkMsR0FBUSxFQUFNdkcsR0FBUSxFQUFNOHpDLEdBQVMsRUFBTTRCLEdBQWEsR0FHcEUsR0FGSTExQyxHQUFTMDFDLEdBQ1R6aUQsS0FBSytoRCxRQUFRenVDLEdBQU8sR0FDcEJtdkMsRUFDQSxJQUFLLElBQUluZ0QsRUFBSSxFQUFHQSxFQUFJdEMsS0FBS3cvQyxRQUFTbDlDLElBQzFCa2dELEVBQU1sZ0QsSUFDTnRDLEtBQUtvaUQsUUFBUTkvQyxFQUFHZ1IsUUFJeEIsSUFBSyxJQUFJaFIsRUFBSSxFQUFHQSxFQUFJdEMsS0FBS3cvQyxRQUFTbDlDLElBQzlCdEMsS0FBS29pRCxRQUFROS9DLEVBQUdrZ0QsRUFBTWxnRCxHQUFLZ1IsR0FBU0EsR0FFNUN0VCxLQUFLNGdELGlCQUFpQkMsRUFDMUIsQ0FDQTZCLFNBQVNqTyxFQUFNa08sR0FDWDNpRCxLQUFLc2dELGNBQWM3TCxFQUFNLEVBQUd6MEMsS0FBS3cvQyxRQUFVLEVBQUcsUUFDOUN4L0MsS0FBS3NnRCxjQUFjcUMsRUFBSSxFQUFHM2lELEtBQUt3L0MsUUFBUyxNQUN4QyxNQUFNcDhDLEVBQU0sR0FDWixJQUFLLElBQUlkLEVBQUlteUMsRUFBTW55QyxFQUFJcWdELElBQU1yZ0QsRUFDekJjLEVBQUlrRSxLQUFLdEgsS0FBSzZoRCxPQUFPdi9DLElBQ3pCLE9BQU9pOUMsR0FBU3FELFdBQVd4L0MsRUFDL0IsQ0FDQXkvQyxlQUFlcE8sRUFBTWtPLEdBQ2pCM2lELEtBQUtzZ0QsY0FBYzdMLEVBQU0sRUFBR3owQyxLQUFLdy9DLFFBQVUsRUFBRyxRQUM5Q3gvQyxLQUFLc2dELGNBQWNxQyxFQUFJLEVBQUczaUQsS0FBS3cvQyxRQUFTLE1BQ3hDLE1BQU1wOEMsRUFBTSxHQUNaLElBQUssSUFBSWQsRUFBSW15QyxFQUFNbnlDLEVBQUlxZ0QsSUFBTXJnRCxFQUN6QmMsRUFBSWtFLEtBQUt0SCxLQUFLNmhELE9BQU92L0MsSUFDekIsT0FBT2MsQ0FDWCxDQUNBMC9DLFNBQVNyTyxFQUFNa08sRUFBSXJ2QyxFQUFPdXRDLEdBQVMsR0FDL0I3Z0QsS0FBS3NnRCxjQUFjN0wsRUFBTSxFQUFHejBDLEtBQUt3L0MsUUFBVSxFQUFHLFFBQzlDeC9DLEtBQUtzZ0QsY0FBY3FDLEVBQUksRUFBRzNpRCxLQUFLdy9DLFFBQVUsRUFBRyxNQUM1QyxNQUFNcHlDLEVBQVEzSCxLQUFLQyxJQUFJK3VDLEVBQU1rTyxHQUN2QnQxQyxFQUFNNUgsS0FBS0UsSUFBSTh1QyxFQUFNa08sR0FFM0IsR0FBSXJ2QyxFQUNBLElBQUssSUFBSWhSLEVBQUk4SyxFQUFPOUssR0FBSytLLEVBQUsvSyxJQUMxQnRDLEtBQUsraUQsUUFBUXpnRCxRQUdqQixJQUFLLElBQUlBLEVBQUk4SyxFQUFPOUssR0FBSytLLEVBQUsvSyxJQUMxQnRDLEtBQUtnakQsU0FBUzFnRCxHQUd0QixPQURBdEMsS0FBSzRnRCxpQkFBaUJDLEdBQ2Y3Z0QsSUFDWCxDQUVBNkssVUFBVXZCLEVBQUdnSyxFQUFPdXRDLEdBQVMsR0FDekIsR0FBSXYzQyxFQUFJLEdBQUtBLEVBQUl0SixLQUFLdy9DLFFBQ2xCLE1BQU0sSUFBSTFpQyxNQUFNLDhCQUNoQnhULEVBQUl0SixLQUFLdy9DLFFBQVUsR0FDbkJ4L0MsS0FBSzZLLFVBQVU3SyxLQUFLdy9DLFFBQVVsMkMsR0FBSWdLLEdBQ3RDdFQsS0FBSytoRCxRQUFRenVDLEdBQ2IsSUFBSyxJQUFJaEwsRUFBSSxFQUFHQSxFQUFJZ0IsR0FBSSxDQUNwQixNQUFNaEgsRUFBSW1ELEtBQUtvTixNQUFNcE4sS0FBS21GLFNBQVc1SyxLQUFLdy9DLFNBQ3RDeC9DLEtBQUs2aEQsT0FBT3YvQyxJQUFNZ1IsSUFFdEJ0VCxLQUFLb2lELFFBQVE5L0MsRUFBR2dSLEdBQ2hCaEwsSUFDSixDQUNBdEksS0FBSzRnRCxpQkFBaUJDLEVBQzFCLENBR0FvQyxJQUFJM3ZDLEVBQU91dEMsR0FBUyxHQUNoQixHQUFJN2dELEtBQUt3L0MsU0FBV2xzQyxFQUFNa3NDLFFBQ3RCLE1BQU0sSUFBSTFpQyxNQUFNLHlCQUNwQixJQUFLLElBQUl4YSxFQUFJLEVBQUdELEVBQU1yQyxLQUFLMGdELGFBQWNwK0MsRUFBSUQsRUFBS0MsSUFDOUN0QyxLQUFLbWdELE1BQU03OUMsSUFBTWdSLEVBQU02c0MsTUFBTTc5QyxHQUVqQyxPQURBdEMsS0FBSzRnRCxpQkFBaUJDLEdBQ2Y3Z0QsSUFDWCxDQUdBa2pELE9BQU81dkMsRUFBT3V0QyxHQUFTLEdBQ25CLEdBQUk3Z0QsS0FBS3cvQyxTQUFXbHNDLEVBQU1rc0MsUUFDdEIsTUFBTSxJQUFJMWlDLE1BQU0seUJBQ3BCLE1BQU16YSxFQUFNckMsS0FBSzBnRCxhQUNqQixJQUFLLElBQUlnQixFQUFPLEVBQUdBLEVBQU9yL0MsRUFBS3EvQyxJQUMzQjFoRCxLQUFLbWdELE1BQU11QixLQUFVcHVDLEVBQU02c0MsTUFBTXVCLEdBRXJDLE9BREExaEQsS0FBSzRnRCxpQkFBaUJDLEdBQ2Y3Z0QsSUFDWCxDQUdBbWpELE9BQU83dkMsRUFBT3V0QyxHQUFTLEdBQ25CLEdBQUk3Z0QsS0FBS3cvQyxTQUFXbHNDLEVBQU1rc0MsUUFDdEIsTUFBTSxJQUFJMWlDLE1BQU0seUJBQ3BCLElBQUssSUFBSXhhLEVBQUksRUFBR0QsRUFBTXJDLEtBQUswZ0QsYUFBY3ArQyxFQUFJRCxFQUFLQyxJQUM5Q3RDLEtBQUttZ0QsTUFBTTc5QyxJQUFPdEMsS0FBS21nRCxNQUFNNzlDLEdBQU1nUixFQUFNNnNDLE1BQU03OUMsR0FFbkQsT0FEQXRDLEtBQUs0Z0QsaUJBQWlCQyxHQUNmN2dELElBQ1gsQ0FFQW9qRCxJQUFJdkMsR0FBUyxHQUNULElBQUssSUFBSXYrQyxFQUFJLEVBQUdELEVBQU1yQyxLQUFLMGdELGFBQWNwK0MsRUFBSUQsRUFBS0MsSUFDOUN0QyxLQUFLbWdELE1BQU03OUMsSUFBTXRDLEtBQUttZ0QsTUFBTTc5QyxHQUVoQyxPQURBdEMsS0FBSzRnRCxpQkFBaUJDLEdBQ2Y3Z0QsSUFDWCxDQUdBcWpELEdBQUcvdkMsRUFBT3V0QyxHQUFTLEdBQ2YsR0FBSTdnRCxLQUFLdy9DLFNBQVdsc0MsRUFBTWtzQyxRQUN0QixNQUFNLElBQUkxaUMsTUFBTSx5QkFDcEIsSUFBSyxJQUFJeGEsRUFBSSxFQUFHRCxFQUFNckMsS0FBSzBnRCxhQUFjcCtDLEVBQUlELEVBQUtDLElBQzlDdEMsS0FBS21nRCxNQUFNNzlDLElBQU1nUixFQUFNNnNDLE1BQU03OUMsR0FFakMsT0FEQXRDLEtBQUs0Z0QsaUJBQWlCQyxHQUNmN2dELElBQ1gsQ0FHQXNqRCxJQUFJaHdDLEVBQU91dEMsR0FBUyxHQUNoQixHQUFJN2dELEtBQUt3L0MsU0FBV2xzQyxFQUFNa3NDLFFBQ3RCLE1BQU0sSUFBSTFpQyxNQUFNLHlCQUNwQixJQUFLLElBQUl4YSxFQUFJLEVBQUdELEVBQU1yQyxLQUFLMGdELGFBQWNwK0MsRUFBSUQsRUFBS0MsSUFDOUN0QyxLQUFLbWdELE1BQU03OUMsSUFBTWdSLEVBQU02c0MsTUFBTTc5QyxHQUVqQyxPQURBdEMsS0FBSzRnRCxpQkFBaUJDLEdBQ2Y3Z0QsSUFDWCxDQUVBdWpELFNBQVM3OUIsRUFBS3BjLEVBQUcrSCxHQUFPLEdBRXBCLEdBREFyUixLQUFLc2dELGNBQWM1NkIsRUFBSyxFQUFHMWxCLEtBQUt3L0MsUUFBUyxPQUNoQyxHQUFMbDJDLEVBQ0EsT0FJSixNQUFNazZDLEVBQVl4akQsS0FBS3cvQyxRQUN2QngvQyxLQUFLK2dELFVBQVUvZ0QsS0FBS3cvQyxRQUFVbDJDLEdBRTlCLElBQUssSUFBSWhILEVBQUlraEQsRUFBWSxFQUFHbGhELEdBQUtvakIsRUFBS3BqQixJQUNsQ3RDLEtBQUtxaEQsT0FBTy8rQyxFQUFJZ0gsRUFBR3RKLEtBQUs2aEQsT0FBT3YvQyxJQUNuQyxJQUFLLElBQUlBLEVBQUlvakIsRUFBS3BqQixFQUFJb2pCLEVBQU1wYyxFQUFHaEgsSUFDM0J0QyxLQUFLcWhELE9BQU8vK0MsRUFBRytPLEVBRXZCLENBR0FveUMsU0FBUy85QixFQUFLcGMsRUFBSSxHQUVkLEdBQUlBLEVBQUksRUFDSixNQUFNLElBQUl3VCxNQUFNLHdCQUVwQixHQURBOWMsS0FBS3NnRCxjQUFjNTZCLEVBQUssRUFBRzFsQixLQUFLdy9DLFFBQVVsMkMsRUFBRyxPQUN6Q3RKLEtBQUtxK0MsVUFBUyxHQUNkLElBQUssSUFBSS83QyxFQUFJb2pCLEVBQUtwakIsRUFBSXRDLEtBQUt3L0MsUUFBVWwyQyxFQUFHaEgsSUFDcEN0QyxLQUFLcWhELE9BQU8vK0MsRUFBR3RDLEtBQUs2aEQsT0FBT3YvQyxFQUFJZ0gsSUFFdkN0SixLQUFLK2dELFVBQVUvZ0QsS0FBS3cvQyxRQUFVbDJDLEVBQ2xDLENBQ0FvNkMsYUFBYUMsRUFBTXR5QyxHQUFPLEdBQ3RCLEdBQUlyUixLQUFLdy9DLFNBQVdtRSxFQUFLL2pELE9BQ3JCLE1BQU0sSUFBSWtkLE1BQU0seUJBQ3BCLEdBQUk2bUMsR0FBUTNqRCxLQUNSQSxLQUFLK2dELFVBQVU0QyxFQUFLaEMsV0FBV3R3QyxJQUMvQnJSLEtBQUsraEQsUUFBUTF3QyxPQUVaLENBQ0QsSUFBSXV5QyxFQUFTLEVBQ2IsSUFBSyxJQUFJQyxHQUFVLEdBQStDLElBQTNDQSxFQUFTRixFQUFLRyxTQUFTRCxHQUFTeHlDLEtBQ25EclIsS0FBS29pRCxRQUFRd0IsSUFBVTVqRCxLQUFLNmhELE9BQU9nQyxJQUN2QzdqRCxLQUFLdy9DLFFBQVVvRSxFQUNmNWpELEtBQUt5L0MsVUFDVCxDQUNBLE9BQU96L0MsSUFDWCxDQUVBNmhELE9BQU9uOEIsR0FDSCxPQUFxRSxJQUE3RDFsQixLQUFLbWdELE1BQU0xNkMsS0FBS29OLE1BQU02UyxFQUFNLEtBQVUsSUFBWSxHQUFOQSxHQUN4RCxDQUVBMjdCLE9BQU8zN0IsRUFBS3ErQixFQUFLbEQsR0FBUyxHQUN0QjdnRCxLQUFLb2lELFFBQVExOEIsRUFBS3ErQixHQUVkL2pELEtBQUt5L0MsVUFHYixDQUVBMkMsUUFBUTkvQyxFQUFHZ1IsR0FDSEEsRUFDQXRULEtBQUttZ0QsTUFBTTE2QyxLQUFLb04sTUFBTXZRLEVBQUksTUFBVSxJQUFVLEdBQUpBLEdBRTFDdEMsS0FBS21nRCxNQUFNMTZDLEtBQUtvTixNQUFNdlEsRUFBSSxRQUFZLElBQVUsR0FBSkEsR0FDcEQsQ0FDQXlnRCxRQUFRcjlCLEdBQ0oxbEIsS0FBS21nRCxNQUFNMTZDLEtBQUtvTixNQUFNNlMsRUFBTSxNQUFVLElBQVksR0FBTkEsRUFDaEQsQ0FDQXM5QixTQUFTdDlCLEdBQ0wxbEIsS0FBS21nRCxNQUFNMTZDLEtBQUtvTixNQUFNNlMsRUFBTSxRQUFZLElBQVksR0FBTkEsR0FDbEQsQ0FDQXMrQixZQUNJLE9BQU9oa0QsS0FBSzJoRCxXQUFVLEVBQzFCLENBQ0FzQyxhQUNJLE9BQU9qa0QsS0FBSzJoRCxXQUFVLEVBQzFCLENBRUFBLFVBQVVydUMsR0FDTixHQUFvQixHQUFoQnRULEtBQUt3L0MsUUFDTCxPQUFPLEVBQ1gsR0FBSXgvQyxLQUFLNC9DLHVCQUF5QjUvQyxLQUFLeS9DLFNBQVUsQ0FDN0N6L0MsS0FBSzIvQyxlQUFpQixFQUN0QixNQUFNdDlDLEVBQU1yQyxLQUFLMGdELGFBQ2pCLElBQUlwK0MsRUFBSSxFQUNSLEtBQU9BLEVBQUlELEVBQU0sRUFBR0MsSUFDaEIsSUFBSyxJQUFJZ0csRUFBSXRJLEtBQUttZ0QsTUFBTTc5QyxHQUFTLEdBQUxnRyxFQUFRQSxLQUFPLEVBQ3ZDdEksS0FBSzIvQyxnQkFBa0JKLEdBQVMyRSxZQUFnQixJQUFKNTdDLEdBSXBELElBQUlBLEVBQUl0SSxLQUFLbWdELE1BQU03OUMsR0FDbkIsTUFBTTZoRCxFQUErQixHQUFmbmtELEtBQUt3L0MsUUFHM0IsSUFGcUIsR0FBakIyRSxJQUNBNzdDLEtBQU8sWUFBZ0I2N0MsSUFDZixHQUFMNzdDLEVBQVFBLEtBQU8sRUFDbEJ0SSxLQUFLMi9DLGdCQUFrQkosR0FBUzJFLFlBQWdCLElBQUo1N0MsR0FDaER0SSxLQUFLNC9DLHNCQUF3QjUvQyxLQUFLeS9DLFFBQ3RDLENBQ0EsT0FBUW5zQyxFQUFRdFQsS0FBSzIvQyxlQUFpQjMvQyxLQUFLdy9DLFFBQVV4L0MsS0FBSzIvQyxjQUM5RCxDQUVBeUUsV0FBVzVCLEdBQ1AsSUFBSWw4QyxFQUFTLEVBQ2IsR0FBSXRHLEtBQUtna0QsYUFBZWhrRCxLQUFLdy9DLFFBQ3pCLElBQUssSUFBSWw5QyxFQUFJLEVBQUdBLEVBQUl0QyxLQUFLdy9DLFFBQVNsOUMsSUFDOUJnRSxHQUFVazhDLEVBQU1sZ0QsR0FBSyxFQUFJLE9BRzdCLElBQUssSUFBSUEsR0FBSyxHQUFvQyxJQUFoQ0EsRUFBSXRDLEtBQUs4akQsU0FBU3hoRCxHQUFHLEtBQ25DZ0UsR0FBVWs4QyxFQUFNbGdELEdBQUssRUFBSSxFQUVqQyxPQUFPZ0UsQ0FDWCxDQUVBKzlDLGlCQUFpQkMsRUFBUWh4QyxHQUNyQixHQUFvQixHQUFoQnRULEtBQUt3L0MsUUFDTCxPQUFPLEVBQ1gsSUFBSTF1QyxFQUFRLEVBQ1osTUFBTXpPLEVBQU1yQyxLQUFLMGdELGFBQ2pCLElBQUlwK0MsRUFBSSxFQUNSLEtBQU9BLEVBQUlELEVBQU0sRUFBR0MsSUFDaEIsSUFBSyxJQUFJZ0csRUFBSXRJLEtBQUttZ0QsTUFBTTc5QyxHQUFLZ2lELEVBQU9uRSxNQUFNNzlDLEdBQVMsR0FBTGdHLEVBQVFBLEtBQU8sRUFDekR3SSxHQUFTeXVDLEdBQVMyRSxZQUFnQixJQUFKNTdDLEdBR3RDLElBQUlBLEVBQUl0SSxLQUFLbWdELE1BQU03OUMsR0FBS2dpRCxFQUFPbkUsTUFBTTc5QyxHQUNyQyxNQUFNNmhELEVBQStCLEdBQWZua0QsS0FBS3cvQyxRQUczQixJQUZxQixHQUFqQjJFLElBQ0E3N0MsS0FBTyxZQUFnQjY3QyxJQUNmLEdBQUw3N0MsRUFBUUEsS0FBTyxFQUNsQndJLEdBQVN5dUMsR0FBUzJFLFlBQWdCLElBQUo1N0MsR0FDbEMsT0FBUWdMLEVBQVF4QyxFQUFROVEsS0FBS3cvQyxRQUFVMXVDLENBQzNDLENBQ0EvRCxRQUNJL00sS0FBSytnRCxVQUFVLEVBQ25CLENBQ0ExQyxTQUFTL3FDLEdBQ0wsT0FBT3RULEtBQUs4akQsVUFBVSxFQUFHeHdDLElBQVUsQ0FDdkMsQ0FDSWl4QyxjQUNBLE9BQU92a0QsS0FBSzJoRCxXQUFVLElBQVMzaEQsS0FBS3cvQyxPQUN4QyxDQUNJZ0YsZUFDQSxPQUFPeGtELEtBQUsyaEQsV0FBVSxJQUFVM2hELEtBQUt3L0MsT0FDekMsQ0FDSWlGLGNBQ0EsT0FBT3prRCxLQUFLMmhELFdBQVUsR0FBUSxDQUNsQyxDQUNJK0MsZUFDQSxPQUFPMWtELEtBQUsyaEQsV0FBVSxHQUFTLENBQ25DLENBR0FtQyxTQUFTejRDLEVBQU9pSSxHQUFRLEdBRXBCLEdBREF0VCxLQUFLc2dELGNBQWNqMUMsR0FBUSxFQUFHckwsS0FBS3cvQyxRQUFTLFNBQ3hDbjBDLEdBQVNyTCxLQUFLdy9DLFFBQVUsRUFDeEIsT0FBUSxFQUVaLElBQUltRixFQUFxQixJQUR6QnQ1QyxFQUFRQSxFQUFRLEVBQUksRUFBSUEsRUFBUSxHQUVoQyxNQUFNdTVDLEVBQVU1a0QsS0FBSzBnRCxhQUNyQixJQUFLLElBQUlwK0MsRUFBSW1ELEtBQUtvTixNQUFNeEgsRUFBUSxJQUFLL0ksRUFBSXNpRCxFQUFTdGlELElBQUssQ0FDbkQsSUFBSWdHLEVBQUtnTCxFQUFRdFQsS0FBS21nRCxNQUFNNzlDLElBQU10QyxLQUFLbWdELE1BQU03OUMsR0FDN0MsR0FBa0IsR0FBZHFpRCxFQUNBcjhDLEdBQU8sWUFBY3E4QyxFQUFjLFdBQ25DQSxFQUFhLE9BRVosSUFBS3J4QyxJQUFlLFlBQU5oTCxFQUNmLFNBRUosSUFBSyxJQUFJOEIsRUFBSSxFQUFRLEdBQUw5QixFQUFROEIsR0FBSyxFQUFHOUIsS0FBTyxFQUFHLENBQ3RDLE1BQU1rSyxFQUFJK3NDLEdBQVNzRixZQUFnQixJQUFKdjhDLEdBQy9CLEdBQUlrSyxHQUFLLEVBRUwsT0FEQW5ILEVBQVFtSCxFQUFTLEdBQUpsUSxFQUFVOEgsSUFDVnBLLEtBQUt3L0MsU0FDTixFQUNMbjBDLENBRWYsQ0FDSixDQUNBLE9BQVEsQ0FDWixDQUVBeTVDLFNBQVN6NUMsRUFBT2lJLEdBQVEsR0FDcEIsR0FBYSxHQUFUakksRUFDQSxPQUFRLEVBQ1pyTCxLQUFLc2dELGNBQWNqMUMsR0FBUSxFQUFHckwsS0FBS3cvQyxRQUFTLFNBRzVDLElBQUkyRSxFQUF5QixHQUY3Qjk0QyxFQUFRQSxFQUFRLEVBQUlyTCxLQUFLdy9DLFFBQVUsRUFBSW4wQyxFQUFRLEdBRWIsR0FDbEMsSUFBSyxJQUFJL0ksRUFGVW1ELEtBQUtvTixNQUFNeEgsRUFBUSxJQUViL0ksR0FBSyxFQUFHQSxJQUFLLENBQ2xDLElBQUlnRyxFQUFLZ0wsRUFBUXRULEtBQUttZ0QsTUFBTTc5QyxJQUFNdEMsS0FBS21nRCxNQUFNNzlDLEdBQ3hCLEdBQWpCNmhELElBQ0E3N0MsS0FBTyxZQUFnQjY3QyxHQUN2QkEsRUFBZ0IsR0FFcEIsSUFBSyxJQUFJLzVDLEVBQUksR0FBUyxHQUFMOUIsRUFBUThCLEdBQUssRUFBRzlCLElBQU0sRUFBRyxDQUN0QyxNQUFNa0ssRUFBSStzQyxHQUFTd0YsV0FBV3o4QyxJQUFNLElBQ3BDLEdBQUlrSyxHQUFLLEVBQ0wsT0FBT0EsRUFBUyxHQUFKbFEsRUFBVThILENBQzlCLENBQ0osQ0FDQSxPQUFRLENBQ1osRUNsakJHLElBQUk0NkMsR0RvakJYekYsR0FBUzJFLFlBQWM3bUQsVUFBVW8zQyxLQUFLLENBQ2xDLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQzdDLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQzdDLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQzdDLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQzdDLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQzdDLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQzdDLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQzdDLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQzdDLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQzdDLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQzdDLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQzdDLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQzdDLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQzdDLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQzdDLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQzdDLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLElBRWpEOEssR0FBU3NGLFlBQWN4bkQsVUFBVW8zQyxLQUFLLEVBQ2pDLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQzlDLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQzdDLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQzdDLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQzdDLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQzdDLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQzdDLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQzdDLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQzdDLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQzdDLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQzdDLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQzdDLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQzdDLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQzdDLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQzdDLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQzdDLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLElBRWpEOEssR0FBU3dGLFdBQWExbkQsVUFBVW8zQyxLQUFLLEVBQ2hDLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQzlDLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQzdDLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQzdDLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQzdDLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQzdDLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQzdDLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQzdDLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQzdDLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQzdDLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFHLEVBQUcsRUFBRyxFQUFH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ZSxDQUFDdGdCLEVBQU1tZ0IsS0FBTW5nQixFQUFNb2dCLEtBQU0sS0FBTSxLQUFNLEtBQU0sS0FBTSxPQUN6RyxrQkFBbUIsb0JBQXNCLGVBQWdCLENBQUNwZ0IsRUFBTXFnQixNQUFPLEtBQU0sS0FBTSxLQUFNLEtBQU0sS0FBTSxPQUNyRyxrQkFBbUIsb0JBQXNCLFVBQVcsQ0FBQ3JnQixFQUFNNUIsT0FBUSxLQUFNLEtBQU0sS0FBTSxLQUFNLEtBQU0sT0FDakcsa0JBQW1CLG9CQUFzQixHQUFHL08sbUJBQXdCLENBQUNrOEMsRUFBVyxLQUFNLEtBQU0sS0FBTSxLQUFNLEtBQU0sUUFFdEgsQ0EwSVdHLENBQWlCMXJDLEVBQU8zUSxFQUFPaThDLEVBSG5CLDZCQUE2QkosRUFBVXRpQyx3RUFDQ29XLEVBQU9wVyxpQkFDL0MsaUJBQWlCNUksRUFBTXFnQixNQUFRaXJCLEVBQVMsWUFBYyxxQkFFN0UsQ3dCb1BnQkssQ0FBWTc1QyxFQUFRdTdCLEVBQVMwZCxFQUFjOUMsR0FFM0QsQ0FJTyxTQUFTMkQsS0FDWnJlLElBQ0osQyIsInNvdXJjZXMiOlsid2VicGFjazovL2VkYS8uL25vZGVfbW9kdWxlcy9AZGF0YWdyb2stbGlicmFyaWVzL21hdGgvc3JjL2Ric2Nhbi93YXNtL3dhc21EYnNjYW4uanMiLCJ3ZWJwYWNrOi8vZWRhLy4vbm9kZV9tb2R1bGVzL0BkYXRhZ3Jvay1saWJyYXJpZXMvbWwvY3NzL3N0eWxlcy5jc3MiLCJ3ZWJwYWNrOi8vZWRhLy4vbm9kZV9tb2R1bGVzL2Nzcy1sb2FkZXIvZGlzdC9ydW50aW1lL2FwaS5qcyIsIndlYnBhY2s6Ly9lZGEvLi9ub2RlX21vZHVsZXMvY3NzLWxvYWRlci9kaXN0L3J1bnRpbWUvc291cmNlTWFwcy5qcyIsIndlYnBhY2s6Ly9lZGEvLi9ub2RlX21vZHVsZXMvanN0YXQvZGlzdC9qc3RhdC5qcyIsIndlYnBhY2s6Ly9lZGEvLi9ub2RlX21vZHVsZXMvc3R5bGUtbG9hZGVyL2Rpc3QvcnVudGltZS9pbmplY3RTdHlsZXNJbnRvU3R5bGVUYWcuanMiLCJ3ZWJwYWNrOi8vZWRhLy4vbm9kZV9tb2R1bGVzL3N0eWxlLWxvYWRlci9kaXN0L3J1bnRpbWUvaW5zZXJ0QnlTZWxlY3Rvci5qcyIsIndlYnBhY2s6Ly9lZGEvLi9ub2RlX21vZHVsZXMvc3R5bGUtbG9hZGVyL2Rpc3QvcnVudGltZS9pbnNlcnRTdHlsZUVsZW1lbnQuanMiLCJ3ZWJwYWNrOi8vZWRhLy4vbm9kZV9tb2R1bGVzL3N0eWxlLWxvYWRlci9kaXN0L3J1bnRpbWUvc2V0QXR0cmlidXRlc1dpdGhvdXRBdHRyaWJ1dGVzLmpzIiwid2VicGFjazovL2VkYS8uL25vZGVfbW9kdWxlcy9zdHlsZS1sb2FkZXIvZGlzdC9ydW50aW1lL3N0eWxlRG9tQVBJLmpzIiwid2VicGFjazovL2VkYS8uL25vZGVfbW9kdWxlcy9zdHlsZS1sb2FkZXIvZGlzdC9ydW50aW1lL3N0eWxlVGFnVHJhbnNmb3JtLmpzIiwid2VicGFjazovL2VkYS93ZWJwYWNrL2Jvb3RzdHJhcCIsIndlYnBhY2s6Ly9lZGEvd2VicGFjay9ydW50aW1lL2FtZCBvcHRpb25zIiwid2VicGFjazovL2VkYS93ZWJwYWNrL3J1bnRpbWUvY29tcGF0IGdldCBkZWZhdWx0IGV4cG9ydCIsIndlYnBhY2s6Ly9lZGEvd2VicGFjay9ydW50aW1lL2RlZmluZSBwcm9wZXJ0eSBnZXR0ZXJzIiwid2VicGFjazovL2VkYS93ZWJwYWNrL3J1bnRpbWUvZ2V0IGphdmFzY3JpcHQgY2h1bmsgZmlsZW5hbWUiLCJ3ZWJwYWNrOi8vZWRhL3dlYnBhY2svcnVudGltZS9nbG9iYWwiLCJ3ZWJwYWNrOi8vZWRhL3dlYnBhY2svcnVudGltZS9oYXJtb255IG1vZHVsZSBkZWNvcmF0b3IiLCJ3ZWJwYWNrOi8vZWRhL3dlYnBhY2svcnVudGltZS9oYXNPd25Qcm9wZXJ0eSBzaG9ydGhhbmQiLCJ3ZWJwYWNrOi8vZWRhL3dlYnBhY2svcnVudGltZS9tYWtlIG5hbWVzcGFjZSBvYmplY3QiLCJ3ZWJwYWNrOi8vZWRhL3dlYnBhY2svcnVudGltZS9wdWJsaWNQYXRoIiwid2VicGFjazovL2VkYS93ZWJwYWNrL3J1bnRpbWUvanNvbnAgY2h1bmsgbG9hZGluZyIsIndlYnBhY2s6Ly9lZGEvd2VicGFjay9ydW50aW1lL25vbmNlIiwid2VicGFjazovL2VkYS9leHRlcm5hbCB2YXIgXCJncm9rXCIiLCJ3ZWJwYWNrOi8vZWRhL2V4dGVybmFsIHZhciBcInVpXCIiLCJ3ZWJwYWNrOi8vZWRhL2V4dGVybmFsIHZhciBcIkRHXCIiLCJ3ZWJwYWNrOi8vZWRhLy4vd2FzbS9jYWxsV2FzbS5qcyIsIndlYnBhY2s6Ly9lZGEvLi93YXNtL2NhbGxXYXNtRm9yV2ViV29ya2VyLmpzIiwid2VicGFjazovL2VkYS8uL3NyYy91dGlscy50cyIsIndlYnBhY2s6Ly9lZGEvLi9zcmMvZWRhLXRvb2xzLnRzIiwid2VicGFjazovL2VkYS8uL3NyYy9kYXRhLWdlbmVyYXRvcnMudHMiLCJ3ZWJwYWNrOi8vZWRhLy4vd2FzbS9FREFBUEkuanMiLCJ3ZWJwYWNrOi8vZWRhLy4vc3JjL3N2bS50cyIsIndlYnBhY2s6Ly9lZGEvLi9zcmMvcGxzL3Bscy1jb25zdGFudHMudHMiLCJ3ZWJwYWNrOi8vZWRhLy4vc3JjL3Bscy9wbHMtdG9vbHMudHMiLCJ3ZWJwYWNrOi8vZWRhLy4vc3JjL3N0YXQtdG9vbHMudHMiLCJ3ZWJwYWNrOi8vZWRhLy4vbm9kZV9tb2R1bGVzL0BkYXRhZ3Jvay1saWJyYXJpZXMvbWF0aC9zcmMvZGJzY2FuL3dhc20vZGJzY2FuLXdvcmtlci1jcmVhdG9yLmpzIiwid2VicGFjazovL2VkYS8uL25vZGVfbW9kdWxlcy9AZGF0YWdyb2stbGlicmFyaWVzL21hdGgvc3JjL3dlYkdQVS9nZXRHUFVEZXZpY2UuanMiLCJ3ZWJwYWNrOi8vZWRhLy4vbm9kZV9tb2R1bGVzL0BkYXRhZ3Jvay1saWJyYXJpZXMvbWF0aC9zcmMvd2ViR1BVL211bHRpLWNvbC1kaXN0YW5jZXMvd2ViR1BVLWFnZ3JlZ2F0aW9uLmpzIiwid2VicGFjazovL2VkYS8uL25vZGVfbW9kdWxlcy9AZGF0YWdyb2stbGlicmFyaWVzL21hdGgvc3JjL3dlYkdQVS9tdWx0aS1jb2wtZGlzdGFuY2VzL3dlYkdQVS1tdWx0aWNvbC1kaXN0YW5jZXMuanMiLCJ3ZWJwYWNrOi8vZWRhLy4vbm9kZV9tb2R1bGVzL0BkYXRhZ3Jvay1saWJyYXJpZXMvbWF0aC9zcmMvd2ViR1BVL3R5cGVzLmpzIiwid2VicGFjazovL2VkYS8uL25vZGVfbW9kdWxlcy9AZGF0YWdyb2stbGlicmFyaWVzL21sL3NyYy9tdWx0aS1jb2x1bW4tZGltZW5zaW9uYWxpdHktcmVkdWN0aW9uL3R5cGVzLmpzIiwid2VicGFjazovL2VkYS8uL25vZGVfbW9kdWxlcy9AZGF0YWdyb2stbGlicmFyaWVzL21hdGgvbm9kZV9tb2R1bGVzL2lzLWFueS1hcnJheS9saWItZXNtL2luZGV4LmpzIiwid2VicGFjazovL2VkYS8uL25vZGVfbW9kdWxlcy9AZGF0YWdyb2stbGlicmFyaWVzL21sL3NyYy9mdW5jdGlvbkVkaXRvcnMvZGltZW5zaW9uYWxpdHktcmVkdWN0aW9uLWVkaXRvci5qcyIsIndlYnBhY2s6Ly9lZGEvLi9ub2RlX21vZHVsZXMvQGRhdGFncm9rLWxpYnJhcmllcy9tbC9zcmMvZnVuY3Rpb25FZGl0b3JzL2NvbnN0cy5qcyIsIndlYnBhY2s6Ly9lZGEvLi9ub2RlX21vZHVsZXMvQGRhdGFncm9rLWxpYnJhcmllcy9tbC9zcmMvZGlzdGFuY2UtbWF0cml4L3R5cGVzLmpzIiwid2VicGFjazovL2VkYS9leHRlcm5hbCB2YXIgXCJyeGpzXCIiLCJ3ZWJwYWNrOi8vZWRhLy4vbm9kZV9tb2R1bGVzL0BkYXRhZ3Jvay1saWJyYXJpZXMvbWwvY3NzL3N0eWxlcy5jc3M/OGMwMyIsIndlYnBhY2s6Ly9lZGEvLi9ub2RlX21vZHVsZXMvQGRhdGFncm9rLWxpYnJhcmllcy9tbC9zcmMvbXVsdGktY29sdW1uLWRpbWVuc2lvbmFsaXR5LXJlZHVjdGlvbi9tdWx0aS1jb2x1bW4tZGltLXJlZHVjdGlvbi1lZGl0b3IuanMiLCJ3ZWJwYWNrOi8vZWRhLy4vbm9kZV9tb2R1bGVzL0BkYXRhZ3Jvay1saWJyYXJpZXMvbWwvc3JjL211bHRpLWNvbHVtbi1kaW1lbnNpb25hbGl0eS1yZWR1Y3Rpb24vY29uc3RzLmpzIiwid2VicGFjazovL2VkYS8uL25vZGVfbW9kdWxlcy9AZGF0YWdyb2stbGlicmFyaWVzL21sL3NyYy9kaXN0YW5jZS1tYXRyaXgvdXRpbHMuanMiLCJ3ZWJwYWNrOi8vZWRhLy4vbm9kZV9tb2R1bGVzL0BkYXRhZ3Jvay1saWJyYXJpZXMvdXRpbHMvc3JjL3R5cGUtZGVjbGFyYXRpb25zLmpzIiwid2VicGFjazovL2VkYS8uL25vZGVfbW9kdWxlcy9AZGF0YWdyb2stbGlicmFyaWVzL21sL3NyYy9tdWx0aS1jb2x1bW4tZGltZW5zaW9uYWxpdHktcmVkdWN0aW9uL3JlZHVjZS1kaW1lbnNpb25hbGl0eS5qcyIsIndlYnBhY2s6Ly9lZGEvLi9zcmMvbWlzc2luZy12YWx1ZXMtaW1wdXRhdGlvbi91aS1jb25zdGFudHMudHMiLCJ3ZWJwYWNrOi8vZWRhLy4vc3JjL21pc3NpbmctdmFsdWVzLWltcHV0YXRpb24va25uLWltcHV0ZXIudHMiLCJ3ZWJwYWNrOi8vZWRhLy4vc3JjL21pc3NpbmctdmFsdWVzLWltcHV0YXRpb24vdWkudHMiLCJ3ZWJwYWNrOi8vZWRhLy4vbm9kZV9tb2R1bGVzL0BkYXRhZ3Jvay1saWJyYXJpZXMvbWwvc3JjL01DTC9tY2wtZWRpdG9yLmpzIiwid2VicGFjazovL2VkYS8uL25vZGVfbW9kdWxlcy9AZGF0YWdyb2stbGlicmFyaWVzL3V0aWxzL3NyYy9iaXQtYXJyYXkuanMiLCJ3ZWJwYWNrOi8vZWRhLy4vbm9kZV9tb2R1bGVzL0BkYXRhZ3Jvay1saWJyYXJpZXMvdXRpbHMvc3JjL3JlbmRlci1saW5lcy1vbi1zcC5qcyIsIndlYnBhY2s6Ly9lZGEvLi9zcmMvcGFja2FnZS50cyIsIndlYnBhY2s6Ly9lZGEvLi9zcmMvZWRhLXVpLnRzIiwid2VicGFjazovL2VkYS8uL25vZGVfbW9kdWxlcy9AZGF0YWdyb2stbGlicmFyaWVzL21sL3NyYy9tdWx0aS1jb2x1bW4tZGltZW5zaW9uYWxpdHktcmVkdWN0aW9uL2VtYmVkZGluZ3Mtc3BhY2UuanMiLCJ3ZWJwYWNrOi8vZWRhLy4vbm9kZV9tb2R1bGVzL0BkYXRhZ3Jvay1saWJyYXJpZXMvbWwvc3JjL211bHRpLWNvbHVtbi1kaW1lbnNpb25hbGl0eS1yZWR1Y3Rpb24vbXVsdGktZGltLXJlZC13b3JrZXItY3JlYXRvci5qcyIsIndlYnBhY2s6Ly9lZGEvLi9ub2RlX21vZHVsZXMvQGRhdGFncm9rLWxpYnJhcmllcy91dGlscy9zcmMvdmVjdG9yLW9wZXJhdGlvbnMuanMiLCJ3ZWJwYWNrOi8vZWRhLy4vbm9kZV9tb2R1bGVzL0BkYXRhZ3Jvay1saWJyYXJpZXMvbWwvc3JjL01DTC9jbHVzdGVyaW5nLXZpZXcuanMiLCJ3ZWJwYWNrOi8vZWRhLy4vbm9kZV9tb2R1bGVzL0BkYXRhZ3Jvay1saWJyYXJpZXMvbWwvc3JjL01DTC9pbmRleC5qcyJdLCJzb3VyY2VzQ29udGVudCI6WyJcclxuZXhwb3J0IHZhciBleHBvcnRDcHBEYnNjYW5MaWIgPSAoKCkgPT4ge1xyXG4gIHZhciBfc2NyaXB0RGlyID0gdHlwZW9mIGRvY3VtZW50ICE9PSAndW5kZWZpbmVkJyAmJiBkb2N1bWVudC5jdXJyZW50U2NyaXB0ID8gZG9jdW1lbnQuY3VycmVudFNjcmlwdC5zcmMgOiB1bmRlZmluZWQ7XHJcbiAgXHJcbiAgcmV0dXJuIChcclxuZnVuY3Rpb24oZXhwb3J0Q3BwRGJzY2FuTGliID0ge30pICB7XHJcblxyXG4vLyBpbmNsdWRlOiBzaGVsbC5qc1xyXG4vLyBUaGUgTW9kdWxlIG9iamVjdDogT3VyIGludGVyZmFjZSB0byB0aGUgb3V0c2lkZSB3b3JsZC4gV2UgaW1wb3J0XHJcbi8vIGFuZCBleHBvcnQgdmFsdWVzIG9uIGl0LiBUaGVyZSBhcmUgdmFyaW91cyB3YXlzIE1vZHVsZSBjYW4gYmUgdXNlZDpcclxuLy8gMS4gTm90IGRlZmluZWQuIFdlIGNyZWF0ZSBpdCBoZXJlXHJcbi8vIDIuIEEgZnVuY3Rpb24gcGFyYW1ldGVyLCBmdW5jdGlvbihNb2R1bGUpIHsgLi5nZW5lcmF0ZWQgY29kZS4uIH1cclxuLy8gMy4gcHJlLXJ1biBhcHBlbmRlZCBpdCwgdmFyIE1vZHVsZSA9IHt9OyAuLmdlbmVyYXRlZCBjb2RlLi5cclxuLy8gNC4gRXh0ZXJuYWwgc2NyaXB0IHRhZyBkZWZpbmVzIHZhciBNb2R1bGUuXHJcbi8vIFdlIG5lZWQgdG8gY2hlY2sgaWYgTW9kdWxlIGFscmVhZHkgZXhpc3RzIChlLmcuIGNhc2UgMyBhYm92ZSkuXHJcbi8vIFN1YnN0aXR1dGlvbiB3aWxsIGJlIHJlcGxhY2VkIHdpdGggYWN0dWFsIGNvZGUgb24gbGF0ZXIgc3RhZ2Ugb2YgdGhlIGJ1aWxkLFxyXG4vLyB0aGlzIHdheSBDbG9zdXJlIENvbXBpbGVyIHdpbGwgbm90IG1hbmdsZSBpdCAoZS5nLiBjYXNlIDQuIGFib3ZlKS5cclxuLy8gTm90ZSB0aGF0IGlmIHlvdSB3YW50IHRvIHJ1biBjbG9zdXJlLCBhbmQgYWxzbyB0byB1c2UgTW9kdWxlXHJcbi8vIGFmdGVyIHRoZSBnZW5lcmF0ZWQgY29kZSwgeW91IHdpbGwgbmVlZCB0byBkZWZpbmUgICB2YXIgTW9kdWxlID0ge307XHJcbi8vIGJlZm9yZSB0aGUgY29kZS4gVGhlbiB0aGF0IG9iamVjdCB3aWxsIGJlIHVzZWQgaW4gdGhlIGNvZGUsIGFuZCB5b3VcclxuLy8gY2FuIGNvbnRpbnVlIHRvIHVzZSBNb2R1bGUgYWZ0ZXJ3YXJkcyBhcyB3ZWxsLlxyXG52YXIgTW9kdWxlID0gdHlwZW9mIGV4cG9ydENwcERic2NhbkxpYiAhPSAndW5kZWZpbmVkJyA/IGV4cG9ydENwcERic2NhbkxpYiA6IHt9O1xyXG5cclxuLy8gU2V0IHVwIHRoZSBwcm9taXNlIHRoYXQgaW5kaWNhdGVzIHRoZSBNb2R1bGUgaXMgaW5pdGlhbGl6ZWRcclxudmFyIHJlYWR5UHJvbWlzZVJlc29sdmUsIHJlYWR5UHJvbWlzZVJlamVjdDtcclxuTW9kdWxlWydyZWFkeSddID0gbmV3IFByb21pc2UoZnVuY3Rpb24ocmVzb2x2ZSwgcmVqZWN0KSB7XHJcbiAgcmVhZHlQcm9taXNlUmVzb2x2ZSA9IHJlc29sdmU7XHJcbiAgcmVhZHlQcm9taXNlUmVqZWN0ID0gcmVqZWN0O1xyXG59KTtcclxuXHJcbi8vIC0tcHJlLWpzZXMgYXJlIGVtaXR0ZWQgYWZ0ZXIgdGhlIE1vZHVsZSBpbnRlZ3JhdGlvbiBjb2RlLCBzbyB0aGF0IHRoZXkgY2FuXHJcbi8vIHJlZmVyIHRvIE1vZHVsZSAoaWYgdGhleSBjaG9vc2U7IHRoZXkgY2FuIGFsc28gZGVmaW5lIE1vZHVsZSlcclxuXHJcblxyXG4vLyBTb21ldGltZXMgYW4gZXhpc3RpbmcgTW9kdWxlIG9iamVjdCBleGlzdHMgd2l0aCBwcm9wZXJ0aWVzXHJcbi8vIG1lYW50IHRvIG92ZXJ3cml0ZSB0aGUgZGVmYXVsdCBtb2R1bGUgZnVuY3Rpb25hbGl0eS4gSGVyZVxyXG4vLyB3ZSBjb2xsZWN0IHRob3NlIHByb3BlcnRpZXMgYW5kIHJlYXBwbHkgX2FmdGVyXyB3ZSBjb25maWd1cmVcclxuLy8gdGhlIGN1cnJlbnQgZW52aXJvbm1lbnQncyBkZWZhdWx0cyB0byBhdm9pZCBoYXZpbmcgdG8gYmUgc29cclxuLy8gZGVmZW5zaXZlIGR1cmluZyBpbml0aWFsaXphdGlvbi5cclxudmFyIG1vZHVsZU92ZXJyaWRlcyA9IE9iamVjdC5hc3NpZ24oe30sIE1vZHVsZSk7XHJcblxyXG52YXIgYXJndW1lbnRzXyA9IFtdO1xyXG52YXIgdGhpc1Byb2dyYW0gPSAnLi90aGlzLnByb2dyYW0nO1xyXG52YXIgcXVpdF8gPSAoc3RhdHVzLCB0b1Rocm93KSA9PiB7XHJcbiAgdGhyb3cgdG9UaHJvdztcclxufTtcclxuXHJcbi8vIERldGVybWluZSB0aGUgcnVudGltZSBlbnZpcm9ubWVudCB3ZSBhcmUgaW4uIFlvdSBjYW4gY3VzdG9taXplIHRoaXMgYnlcclxuLy8gc2V0dGluZyB0aGUgRU5WSVJPTk1FTlQgc2V0dGluZyBhdCBjb21waWxlIHRpbWUgKHNlZSBzZXR0aW5ncy5qcykuXHJcblxyXG4vLyBBdHRlbXB0IHRvIGF1dG8tZGV0ZWN0IHRoZSBlbnZpcm9ubWVudFxyXG52YXIgRU5WSVJPTk1FTlRfSVNfV0VCID0gdHlwZW9mIHdpbmRvdyA9PSAnb2JqZWN0JztcclxudmFyIEVOVklST05NRU5UX0lTX1dPUktFUiA9IHR5cGVvZiBpbXBvcnRTY3JpcHRzID09ICdmdW5jdGlvbic7XHJcbi8vIE4uYi4gRWxlY3Ryb24uanMgZW52aXJvbm1lbnQgaXMgc2ltdWx0YW5lb3VzbHkgYSBOT0RFLWVudmlyb25tZW50LCBidXRcclxuLy8gYWxzbyBhIHdlYiBlbnZpcm9ubWVudC5cclxudmFyIEVOVklST05NRU5UX0lTX05PREUgPSB0eXBlb2YgcHJvY2VzcyA9PSAnb2JqZWN0JyAmJiB0eXBlb2YgcHJvY2Vzcy52ZXJzaW9ucyA9PSAnb2JqZWN0JyAmJiB0eXBlb2YgcHJvY2Vzcy52ZXJzaW9ucy5ub2RlID09ICdzdHJpbmcnO1xyXG52YXIgRU5WSVJPTk1FTlRfSVNfU0hFTEwgPSAhRU5WSVJPTk1FTlRfSVNfV0VCICYmICFFTlZJUk9OTUVOVF9JU19OT0RFICYmICFFTlZJUk9OTUVOVF9JU19XT1JLRVI7XHJcblxyXG4vLyBgL2Agc2hvdWxkIGJlIHByZXNlbnQgYXQgdGhlIGVuZCBpZiBgc2NyaXB0RGlyZWN0b3J5YCBpcyBub3QgZW1wdHlcclxudmFyIHNjcmlwdERpcmVjdG9yeSA9ICcnO1xyXG5mdW5jdGlvbiBsb2NhdGVGaWxlKHBhdGgpIHtcclxuICBpZiAoTW9kdWxlWydsb2NhdGVGaWxlJ10pIHtcclxuICAgIHJldHVybiBNb2R1bGVbJ2xvY2F0ZUZpbGUnXShwYXRoLCBzY3JpcHREaXJlY3RvcnkpO1xyXG4gIH1cclxuICByZXR1cm4gc2NyaXB0RGlyZWN0b3J5ICsgcGF0aDtcclxufVxyXG5cclxuLy8gSG9va3MgdGhhdCBhcmUgaW1wbGVtZW50ZWQgZGlmZmVyZW50bHkgaW4gZGlmZmVyZW50IHJ1bnRpbWUgZW52aXJvbm1lbnRzLlxyXG52YXIgcmVhZF8sXHJcbiAgICByZWFkQXN5bmMsXHJcbiAgICByZWFkQmluYXJ5LFxyXG4gICAgc2V0V2luZG93VGl0bGU7XHJcblxyXG4vLyBOb3RlIHRoYXQgdGhpcyBpbmNsdWRlcyBOb2RlLmpzIHdvcmtlcnMgd2hlbiByZWxldmFudCAocHRocmVhZHMgaXMgZW5hYmxlZCkuXHJcbi8vIE5vZGUuanMgd29ya2VycyBhcmUgZGV0ZWN0ZWQgYXMgYSBjb21iaW5hdGlvbiBvZiBFTlZJUk9OTUVOVF9JU19XT1JLRVIgYW5kXHJcbi8vIEVOVklST05NRU5UX0lTX05PREUuXHJcbmlmIChFTlZJUk9OTUVOVF9JU19XRUIgfHwgRU5WSVJPTk1FTlRfSVNfV09SS0VSKSB7XHJcbiAgaWYgKEVOVklST05NRU5UX0lTX1dPUktFUikgeyAvLyBDaGVjayB3b3JrZXIsIG5vdCB3ZWIsIHNpbmNlIHdpbmRvdyBjb3VsZCBiZSBwb2x5ZmlsbGVkXHJcbiAgICBzY3JpcHREaXJlY3RvcnkgPSBzZWxmLmxvY2F0aW9uLmhyZWY7XHJcbiAgfSBlbHNlIGlmICh0eXBlb2YgZG9jdW1lbnQgIT0gJ3VuZGVmaW5lZCcgJiYgZG9jdW1lbnQuY3VycmVudFNjcmlwdCkgeyAvLyB3ZWJcclxuICAgIHNjcmlwdERpcmVjdG9yeSA9IGRvY3VtZW50LmN1cnJlbnRTY3JpcHQuc3JjO1xyXG4gIH1cclxuICAvLyBXaGVuIE1PRFVMQVJJWkUsIHRoaXMgSlMgbWF5IGJlIGV4ZWN1dGVkIGxhdGVyLCBhZnRlciBkb2N1bWVudC5jdXJyZW50U2NyaXB0XHJcbiAgLy8gaXMgZ29uZSwgc28gd2Ugc2F2ZWQgaXQsIGFuZCB3ZSB1c2UgaXQgaGVyZSBpbnN0ZWFkIG9mIGFueSBvdGhlciBpbmZvLlxyXG4gIGlmIChfc2NyaXB0RGlyKSB7XHJcbiAgICBzY3JpcHREaXJlY3RvcnkgPSBfc2NyaXB0RGlyO1xyXG4gIH1cclxuICAvLyBibG9iIHVybHMgbG9vayBsaWtlIGJsb2I6aHR0cDovL3NpdGUuY29tL2V0Yy9ldGMgYW5kIHdlIGNhbm5vdCBpbmZlciBhbnl0aGluZyBmcm9tIHRoZW0uXHJcbiAgLy8gb3RoZXJ3aXNlLCBzbGljZSBvZmYgdGhlIGZpbmFsIHBhcnQgb2YgdGhlIHVybCB0byBmaW5kIHRoZSBzY3JpcHQgZGlyZWN0b3J5LlxyXG4gIC8vIGlmIHNjcmlwdERpcmVjdG9yeSBkb2VzIG5vdCBjb250YWluIGEgc2xhc2gsIGxhc3RJbmRleE9mIHdpbGwgcmV0dXJuIC0xLFxyXG4gIC8vIGFuZCBzY3JpcHREaXJlY3Rvcnkgd2lsbCBjb3JyZWN0bHkgYmUgcmVwbGFjZWQgd2l0aCBhbiBlbXB0eSBzdHJpbmcuXHJcbiAgLy8gSWYgc2NyaXB0RGlyZWN0b3J5IGNvbnRhaW5zIGEgcXVlcnkgKHN0YXJ0aW5nIHdpdGggPykgb3IgYSBmcmFnbWVudCAoc3RhcnRpbmcgd2l0aCAjKSxcclxuICAvLyB0aGV5IGFyZSByZW1vdmVkIGJlY2F1c2UgdGhleSBjb3VsZCBjb250YWluIGEgc2xhc2guXHJcbiAgaWYgKHNjcmlwdERpcmVjdG9yeS5pbmRleE9mKCdibG9iOicpICE9PSAwKSB7XHJcbiAgICBzY3JpcHREaXJlY3RvcnkgPSBzY3JpcHREaXJlY3Rvcnkuc3Vic3RyKDAsIHNjcmlwdERpcmVjdG9yeS5yZXBsYWNlKC9bPyNdLiovLCBcIlwiKS5sYXN0SW5kZXhPZignLycpKzEpO1xyXG4gIH0gZWxzZSB7XHJcbiAgICBzY3JpcHREaXJlY3RvcnkgPSAnJztcclxuICB9XHJcblxyXG4gIC8vIERpZmZlcmVudGlhdGUgdGhlIFdlYiBXb3JrZXIgZnJvbSB0aGUgTm9kZSBXb3JrZXIgY2FzZSwgYXMgcmVhZGluZyBtdXN0XHJcbiAgLy8gYmUgZG9uZSBkaWZmZXJlbnRseS5cclxuICB7XHJcbi8vIGluY2x1ZGU6IHdlYl9vcl93b3JrZXJfc2hlbGxfcmVhZC5qc1xyXG5yZWFkXyA9ICh1cmwpID0+IHtcclxuICAgICAgdmFyIHhociA9IG5ldyBYTUxIdHRwUmVxdWVzdCgpO1xyXG4gICAgICB4aHIub3BlbignR0VUJywgdXJsLCBmYWxzZSk7XHJcbiAgICAgIHhoci5zZW5kKG51bGwpO1xyXG4gICAgICByZXR1cm4geGhyLnJlc3BvbnNlVGV4dDtcclxuICB9XHJcblxyXG4gIGlmIChFTlZJUk9OTUVOVF9JU19XT1JLRVIpIHtcclxuICAgIHJlYWRCaW5hcnkgPSAodXJsKSA9PiB7XHJcbiAgICAgICAgdmFyIHhociA9IG5ldyBYTUxIdHRwUmVxdWVzdCgpO1xyXG4gICAgICAgIHhoci5vcGVuKCdHRVQnLCB1cmwsIGZhbHNlKTtcclxuICAgICAgICB4aHIucmVzcG9uc2VUeXBlID0gJ2FycmF5YnVmZmVyJztcclxuICAgICAgICB4aHIuc2VuZChudWxsKTtcclxuICAgICAgICByZXR1cm4gbmV3IFVpbnQ4QXJyYXkoLyoqIEB0eXBleyFBcnJheUJ1ZmZlcn0gKi8oeGhyLnJlc3BvbnNlKSk7XHJcbiAgICB9O1xyXG4gIH1cclxuXHJcbiAgcmVhZEFzeW5jID0gKHVybCwgb25sb2FkLCBvbmVycm9yKSA9PiB7XHJcbiAgICB2YXIgeGhyID0gbmV3IFhNTEh0dHBSZXF1ZXN0KCk7XHJcbiAgICB4aHIub3BlbignR0VUJywgdXJsLCB0cnVlKTtcclxuICAgIHhoci5yZXNwb25zZVR5cGUgPSAnYXJyYXlidWZmZXInO1xyXG4gICAgeGhyLm9ubG9hZCA9ICgpID0+IHtcclxuICAgICAgaWYgKHhoci5zdGF0dXMgPT0gMjAwIHx8ICh4aHIuc3RhdHVzID09IDAgJiYgeGhyLnJlc3BvbnNlKSkgeyAvLyBmaWxlIFVSTHMgY2FuIHJldHVybiAwXHJcbiAgICAgICAgb25sb2FkKHhoci5yZXNwb25zZSk7XHJcbiAgICAgICAgcmV0dXJuO1xyXG4gICAgICB9XHJcbiAgICAgIG9uZXJyb3IoKTtcclxuICAgIH07XHJcbiAgICB4aHIub25lcnJvciA9IG9uZXJyb3I7XHJcbiAgICB4aHIuc2VuZChudWxsKTtcclxuICB9XHJcblxyXG4vLyBlbmQgaW5jbHVkZTogd2ViX29yX3dvcmtlcl9zaGVsbF9yZWFkLmpzXHJcbiAgfVxyXG5cclxuICBzZXRXaW5kb3dUaXRsZSA9ICh0aXRsZSkgPT4gZG9jdW1lbnQudGl0bGUgPSB0aXRsZTtcclxufSBlbHNlXHJcbntcclxufVxyXG5cclxudmFyIG91dCA9IE1vZHVsZVsncHJpbnQnXSB8fCBjb25zb2xlLmxvZy5iaW5kKGNvbnNvbGUpO1xyXG52YXIgZXJyID0gTW9kdWxlWydwcmludEVyciddIHx8IGNvbnNvbGUud2Fybi5iaW5kKGNvbnNvbGUpO1xyXG5cclxuLy8gTWVyZ2UgYmFjayBpbiB0aGUgb3ZlcnJpZGVzXHJcbk9iamVjdC5hc3NpZ24oTW9kdWxlLCBtb2R1bGVPdmVycmlkZXMpO1xyXG4vLyBGcmVlIHRoZSBvYmplY3QgaGllcmFyY2h5IGNvbnRhaW5lZCBpbiB0aGUgb3ZlcnJpZGVzLCB0aGlzIGxldHMgdGhlIEdDXHJcbi8vIHJlY2xhaW0gZGF0YSB1c2VkIGUuZy4gaW4gbWVtb3J5SW5pdGlhbGl6ZXJSZXF1ZXN0LCB3aGljaCBpcyBhIGxhcmdlIHR5cGVkIGFycmF5LlxyXG5tb2R1bGVPdmVycmlkZXMgPSBudWxsO1xyXG5cclxuLy8gRW1pdCBjb2RlIHRvIGhhbmRsZSBleHBlY3RlZCB2YWx1ZXMgb24gdGhlIE1vZHVsZSBvYmplY3QuIFRoaXMgYXBwbGllcyBNb2R1bGUueFxyXG4vLyB0byB0aGUgcHJvcGVyIGxvY2FsIHguIFRoaXMgaGFzIHR3byBiZW5lZml0czogZmlyc3QsIHdlIG9ubHkgZW1pdCBpdCBpZiBpdCBpc1xyXG4vLyBleHBlY3RlZCB0byBhcnJpdmUsIGFuZCBzZWNvbmQsIGJ5IHVzaW5nIGEgbG9jYWwgZXZlcnl3aGVyZSBlbHNlIHRoYXQgY2FuIGJlXHJcbi8vIG1pbmlmaWVkLlxyXG5cclxuaWYgKE1vZHVsZVsnYXJndW1lbnRzJ10pIGFyZ3VtZW50c18gPSBNb2R1bGVbJ2FyZ3VtZW50cyddO1xyXG5cclxuaWYgKE1vZHVsZVsndGhpc1Byb2dyYW0nXSkgdGhpc1Byb2dyYW0gPSBNb2R1bGVbJ3RoaXNQcm9ncmFtJ107XHJcblxyXG5pZiAoTW9kdWxlWydxdWl0J10pIHF1aXRfID0gTW9kdWxlWydxdWl0J107XHJcblxyXG4vLyBwZXJmb3JtIGFzc2VydGlvbnMgaW4gc2hlbGwuanMgYWZ0ZXIgd2Ugc2V0IHVwIG91dCgpIGFuZCBlcnIoKSwgYXMgb3RoZXJ3aXNlIGlmIGFuIGFzc2VydGlvbiBmYWlscyBpdCBjYW5ub3QgcHJpbnQgdGhlIG1lc3NhZ2VcclxuXHJcblxyXG4vLyBlbmQgaW5jbHVkZTogc2hlbGwuanNcclxuLy8gaW5jbHVkZTogcHJlYW1ibGUuanNcclxuLy8gPT09IFByZWFtYmxlIGxpYnJhcnkgc3R1ZmYgPT09XHJcblxyXG4vLyBEb2N1bWVudGF0aW9uIGZvciB0aGUgcHVibGljIEFQSXMgZGVmaW5lZCBpbiB0aGlzIGZpbGUgbXVzdCBiZSB1cGRhdGVkIGluOlxyXG4vLyAgICBzaXRlL3NvdXJjZS9kb2NzL2FwaV9yZWZlcmVuY2UvcHJlYW1ibGUuanMucnN0XHJcbi8vIEEgcHJlYnVpbHQgbG9jYWwgdmVyc2lvbiBvZiB0aGUgZG9jdW1lbnRhdGlvbiBpcyBhdmFpbGFibGUgYXQ6XHJcbi8vICAgIHNpdGUvYnVpbGQvdGV4dC9kb2NzL2FwaV9yZWZlcmVuY2UvcHJlYW1ibGUuanMudHh0XHJcbi8vIFlvdSBjYW4gYWxzbyBidWlsZCBkb2NzIGxvY2FsbHkgYXMgSFRNTCBvciBvdGhlciBmb3JtYXRzIGluIHNpdGUvXHJcbi8vIEFuIG9ubGluZSBIVE1MIHZlcnNpb24gKHdoaWNoIG1heSBiZSBvZiBhIGRpZmZlcmVudCB2ZXJzaW9uIG9mIEVtc2NyaXB0ZW4pXHJcbi8vICAgIGlzIHVwIGF0IGh0dHA6Ly9rcmlwa2VuLmdpdGh1Yi5pby9lbXNjcmlwdGVuLXNpdGUvZG9jcy9hcGlfcmVmZXJlbmNlL3ByZWFtYmxlLmpzLmh0bWxcclxuXHJcbnZhciB3YXNtQmluYXJ5O1xyXG5pZiAoTW9kdWxlWyd3YXNtQmluYXJ5J10pIHdhc21CaW5hcnkgPSBNb2R1bGVbJ3dhc21CaW5hcnknXTtcclxudmFyIG5vRXhpdFJ1bnRpbWUgPSBNb2R1bGVbJ25vRXhpdFJ1bnRpbWUnXSB8fCB0cnVlO1xyXG5cclxuaWYgKHR5cGVvZiBXZWJBc3NlbWJseSAhPSAnb2JqZWN0Jykge1xyXG4gIGFib3J0KCdubyBuYXRpdmUgd2FzbSBzdXBwb3J0IGRldGVjdGVkJyk7XHJcbn1cclxuXHJcbi8vIFdhc20gZ2xvYmFsc1xyXG5cclxudmFyIHdhc21NZW1vcnk7XHJcblxyXG4vLz09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT1cclxuLy8gUnVudGltZSBlc3NlbnRpYWxzXHJcbi8vPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PVxyXG5cclxuLy8gd2hldGhlciB3ZSBhcmUgcXVpdHRpbmcgdGhlIGFwcGxpY2F0aW9uLiBubyBjb2RlIHNob3VsZCBydW4gYWZ0ZXIgdGhpcy5cclxuLy8gc2V0IGluIGV4aXQoKSBhbmQgYWJvcnQoKVxyXG52YXIgQUJPUlQgPSBmYWxzZTtcclxuXHJcbi8vIHNldCBieSBleGl0KCkgYW5kIGFib3J0KCkuICBQYXNzZWQgdG8gJ29uRXhpdCcgaGFuZGxlci5cclxuLy8gTk9URTogVGhpcyBpcyBhbHNvIHVzZWQgYXMgdGhlIHByb2Nlc3MgcmV0dXJuIGNvZGUgY29kZSBpbiBzaGVsbCBlbnZpcm9ubWVudHNcclxuLy8gYnV0IG9ubHkgd2hlbiBub0V4aXRSdW50aW1lIGlzIGZhbHNlLlxyXG52YXIgRVhJVFNUQVRVUztcclxuXHJcbi8qKiBAdHlwZSB7ZnVuY3Rpb24oKiwgc3RyaW5nPSl9ICovXHJcbmZ1bmN0aW9uIGFzc2VydChjb25kaXRpb24sIHRleHQpIHtcclxuICBpZiAoIWNvbmRpdGlvbikge1xyXG4gICAgLy8gVGhpcyBidWlsZCB3YXMgY3JlYXRlZCB3aXRob3V0IEFTU0VSVElPTlMgZGVmaW5lZC4gIGBhc3NlcnQoKWAgc2hvdWxkIG5vdFxyXG4gICAgLy8gZXZlciBiZSBjYWxsZWQgaW4gdGhpcyBjb25maWd1cmF0aW9uIGJ1dCBpbiBjYXNlIHRoZXJlIGFyZSBjYWxsZXJzIGluXHJcbiAgICAvLyB0aGUgd2lsZCBsZWF2ZSB0aGlzIHNpbXBsZSBhYm9ydCgpIGltcGxlbWVuYXRpb24gaGVyZSBmb3Igbm93LlxyXG4gICAgYWJvcnQodGV4dCk7XHJcbiAgfVxyXG59XHJcblxyXG4vLyBNZW1vcnkgbWFuYWdlbWVudFxyXG5cclxudmFyIEhFQVAsXHJcbi8qKiBAdHlwZSB7IUludDhBcnJheX0gKi9cclxuICBIRUFQOCxcclxuLyoqIEB0eXBlIHshVWludDhBcnJheX0gKi9cclxuICBIRUFQVTgsXHJcbi8qKiBAdHlwZSB7IUludDE2QXJyYXl9ICovXHJcbiAgSEVBUDE2LFxyXG4vKiogQHR5cGUgeyFVaW50MTZBcnJheX0gKi9cclxuICBIRUFQVTE2LFxyXG4vKiogQHR5cGUgeyFJbnQzMkFycmF5fSAqL1xyXG4gIEhFQVAzMixcclxuLyoqIEB0eXBlIHshVWludDMyQXJyYXl9ICovXHJcbiAgSEVBUFUzMixcclxuLyoqIEB0eXBlIHshRmxvYXQzMkFycmF5fSAqL1xyXG4gIEhFQVBGMzIsXHJcbi8qKiBAdHlwZSB7IUZsb2F0NjRBcnJheX0gKi9cclxuICBIRUFQRjY0O1xyXG5cclxuZnVuY3Rpb24gdXBkYXRlTWVtb3J5Vmlld3MoKSB7XHJcbiAgdmFyIGIgPSB3YXNtTWVtb3J5LmJ1ZmZlcjtcclxuICBNb2R1bGVbJ0hFQVA4J10gPSBIRUFQOCA9IG5ldyBJbnQ4QXJyYXkoYik7XHJcbiAgTW9kdWxlWydIRUFQMTYnXSA9IEhFQVAxNiA9IG5ldyBJbnQxNkFycmF5KGIpO1xyXG4gIE1vZHVsZVsnSEVBUDMyJ10gPSBIRUFQMzIgPSBuZXcgSW50MzJBcnJheShiKTtcclxuICBNb2R1bGVbJ0hFQVBVOCddID0gSEVBUFU4ID0gbmV3IFVpbnQ4QXJyYXkoYik7XHJcbiAgTW9kdWxlWydIRUFQVTE2J10gPSBIRUFQVTE2ID0gbmV3IFVpbnQxNkFycmF5KGIpO1xyXG4gIE1vZHVsZVsnSEVBUFUzMiddID0gSEVBUFUzMiA9IG5ldyBVaW50MzJBcnJheShiKTtcclxuICBNb2R1bGVbJ0hFQVBGMzInXSA9IEhFQVBGMzIgPSBuZXcgRmxvYXQzMkFycmF5KGIpO1xyXG4gIE1vZHVsZVsnSEVBUEY2NCddID0gSEVBUEY2NCA9IG5ldyBGbG9hdDY0QXJyYXkoYik7XHJcbn1cclxuXHJcbi8vIGluY2x1ZGU6IHJ1bnRpbWVfaW5pdF90YWJsZS5qc1xyXG4vLyBJbiByZWd1bGFyIG5vbi1SRUxPQ0FUQUJMRSBtb2RlIHRoZSB0YWJsZSBpcyBleHBvcnRlZFxyXG4vLyBmcm9tIHRoZSB3YXNtIG1vZHVsZSBhbmQgdGhpcyB3aWxsIGJlIGFzc2lnbmVkIG9uY2VcclxuLy8gdGhlIGV4cG9ydHMgYXJlIGF2YWlsYWJsZS5cclxudmFyIHdhc21UYWJsZTtcclxuXHJcbi8vIGVuZCBpbmNsdWRlOiBydW50aW1lX2luaXRfdGFibGUuanNcclxuLy8gaW5jbHVkZTogcnVudGltZV9zdGFja19jaGVjay5qc1xyXG4vLyBlbmQgaW5jbHVkZTogcnVudGltZV9zdGFja19jaGVjay5qc1xyXG4vLyBpbmNsdWRlOiBydW50aW1lX2Fzc2VydGlvbnMuanNcclxuLy8gZW5kIGluY2x1ZGU6IHJ1bnRpbWVfYXNzZXJ0aW9ucy5qc1xyXG52YXIgX19BVFBSRVJVTl9fICA9IFtdOyAvLyBmdW5jdGlvbnMgY2FsbGVkIGJlZm9yZSB0aGUgcnVudGltZSBpcyBpbml0aWFsaXplZFxyXG52YXIgX19BVElOSVRfXyAgICA9IFtdOyAvLyBmdW5jdGlvbnMgY2FsbGVkIGR1cmluZyBzdGFydHVwXHJcbnZhciBfX0FURVhJVF9fICAgID0gW107IC8vIGZ1bmN0aW9ucyBjYWxsZWQgZHVyaW5nIHNodXRkb3duXHJcbnZhciBfX0FUUE9TVFJVTl9fID0gW107IC8vIGZ1bmN0aW9ucyBjYWxsZWQgYWZ0ZXIgdGhlIG1haW4oKSBpcyBjYWxsZWRcclxuXHJcbnZhciBydW50aW1lSW5pdGlhbGl6ZWQgPSBmYWxzZTtcclxuXHJcbnZhciBydW50aW1lS2VlcGFsaXZlQ291bnRlciA9IDA7XHJcblxyXG5mdW5jdGlvbiBrZWVwUnVudGltZUFsaXZlKCkge1xyXG4gIHJldHVybiBub0V4aXRSdW50aW1lIHx8IHJ1bnRpbWVLZWVwYWxpdmVDb3VudGVyID4gMDtcclxufVxyXG5cclxuZnVuY3Rpb24gcHJlUnVuKCkge1xyXG4gIGlmIChNb2R1bGVbJ3ByZVJ1biddKSB7XHJcbiAgICBpZiAodHlwZW9mIE1vZHVsZVsncHJlUnVuJ10gPT0gJ2Z1bmN0aW9uJykgTW9kdWxlWydwcmVSdW4nXSA9IFtNb2R1bGVbJ3ByZVJ1biddXTtcclxuICAgIHdoaWxlIChNb2R1bGVbJ3ByZVJ1biddLmxlbmd0aCkge1xyXG4gICAgICBhZGRPblByZVJ1bihNb2R1bGVbJ3ByZVJ1biddLnNoaWZ0KCkpO1xyXG4gICAgfVxyXG4gIH1cclxuICBjYWxsUnVudGltZUNhbGxiYWNrcyhfX0FUUFJFUlVOX18pO1xyXG59XHJcblxyXG5mdW5jdGlvbiBpbml0UnVudGltZSgpIHtcclxuICBydW50aW1lSW5pdGlhbGl6ZWQgPSB0cnVlO1xyXG5cclxuICBcclxuICBjYWxsUnVudGltZUNhbGxiYWNrcyhfX0FUSU5JVF9fKTtcclxufVxyXG5cclxuZnVuY3Rpb24gcG9zdFJ1bigpIHtcclxuXHJcbiAgaWYgKE1vZHVsZVsncG9zdFJ1biddKSB7XHJcbiAgICBpZiAodHlwZW9mIE1vZHVsZVsncG9zdFJ1biddID09ICdmdW5jdGlvbicpIE1vZHVsZVsncG9zdFJ1biddID0gW01vZHVsZVsncG9zdFJ1biddXTtcclxuICAgIHdoaWxlIChNb2R1bGVbJ3Bvc3RSdW4nXS5sZW5ndGgpIHtcclxuICAgICAgYWRkT25Qb3N0UnVuKE1vZHVsZVsncG9zdFJ1biddLnNoaWZ0KCkpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgY2FsbFJ1bnRpbWVDYWxsYmFja3MoX19BVFBPU1RSVU5fXyk7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGFkZE9uUHJlUnVuKGNiKSB7XHJcbiAgX19BVFBSRVJVTl9fLnVuc2hpZnQoY2IpO1xyXG59XHJcblxyXG5mdW5jdGlvbiBhZGRPbkluaXQoY2IpIHtcclxuICBfX0FUSU5JVF9fLnVuc2hpZnQoY2IpO1xyXG59XHJcblxyXG5mdW5jdGlvbiBhZGRPbkV4aXQoY2IpIHtcclxufVxyXG5cclxuZnVuY3Rpb24gYWRkT25Qb3N0UnVuKGNiKSB7XHJcbiAgX19BVFBPU1RSVU5fXy51bnNoaWZ0KGNiKTtcclxufVxyXG5cclxuLy8gaW5jbHVkZTogcnVudGltZV9tYXRoLmpzXHJcbi8vIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0phdmFTY3JpcHQvUmVmZXJlbmNlL0dsb2JhbF9PYmplY3RzL01hdGgvaW11bFxyXG5cclxuLy8gaHR0cHM6Ly9kZXZlbG9wZXIubW96aWxsYS5vcmcvZW4tVVMvZG9jcy9XZWIvSmF2YVNjcmlwdC9SZWZlcmVuY2UvR2xvYmFsX09iamVjdHMvTWF0aC9mcm91bmRcclxuXHJcbi8vIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0phdmFTY3JpcHQvUmVmZXJlbmNlL0dsb2JhbF9PYmplY3RzL01hdGgvY2x6MzJcclxuXHJcbi8vIGh0dHBzOi8vZGV2ZWxvcGVyLm1vemlsbGEub3JnL2VuLVVTL2RvY3MvV2ViL0phdmFTY3JpcHQvUmVmZXJlbmNlL0dsb2JhbF9PYmplY3RzL01hdGgvdHJ1bmNcclxuXHJcbi8vIGVuZCBpbmNsdWRlOiBydW50aW1lX21hdGguanNcclxuLy8gQSBjb3VudGVyIG9mIGRlcGVuZGVuY2llcyBmb3IgY2FsbGluZyBydW4oKS4gSWYgd2UgbmVlZCB0b1xyXG4vLyBkbyBhc3luY2hyb25vdXMgd29yayBiZWZvcmUgcnVubmluZywgaW5jcmVtZW50IHRoaXMgYW5kXHJcbi8vIGRlY3JlbWVudCBpdC4gSW5jcmVtZW50aW5nIG11c3QgaGFwcGVuIGluIGEgcGxhY2UgbGlrZVxyXG4vLyBNb2R1bGUucHJlUnVuICh1c2VkIGJ5IGVtY2MgdG8gYWRkIGZpbGUgcHJlbG9hZGluZykuXHJcbi8vIE5vdGUgdGhhdCB5b3UgY2FuIGFkZCBkZXBlbmRlbmNpZXMgaW4gcHJlUnVuLCBldmVuIHRob3VnaFxyXG4vLyBpdCBoYXBwZW5zIHJpZ2h0IGJlZm9yZSBydW4gLSBydW4gd2lsbCBiZSBwb3N0cG9uZWQgdW50aWxcclxuLy8gdGhlIGRlcGVuZGVuY2llcyBhcmUgbWV0LlxyXG52YXIgcnVuRGVwZW5kZW5jaWVzID0gMDtcclxudmFyIHJ1bkRlcGVuZGVuY3lXYXRjaGVyID0gbnVsbDtcclxudmFyIGRlcGVuZGVuY2llc0Z1bGZpbGxlZCA9IG51bGw7IC8vIG92ZXJyaWRkZW4gdG8gdGFrZSBkaWZmZXJlbnQgYWN0aW9ucyB3aGVuIGFsbCBydW4gZGVwZW5kZW5jaWVzIGFyZSBmdWxmaWxsZWRcclxuXHJcbmZ1bmN0aW9uIGdldFVuaXF1ZVJ1bkRlcGVuZGVuY3koaWQpIHtcclxuICByZXR1cm4gaWQ7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGFkZFJ1bkRlcGVuZGVuY3koaWQpIHtcclxuICBydW5EZXBlbmRlbmNpZXMrKztcclxuXHJcbiAgaWYgKE1vZHVsZVsnbW9uaXRvclJ1bkRlcGVuZGVuY2llcyddKSB7XHJcbiAgICBNb2R1bGVbJ21vbml0b3JSdW5EZXBlbmRlbmNpZXMnXShydW5EZXBlbmRlbmNpZXMpO1xyXG4gIH1cclxuXHJcbn1cclxuXHJcbmZ1bmN0aW9uIHJlbW92ZVJ1bkRlcGVuZGVuY3koaWQpIHtcclxuICBydW5EZXBlbmRlbmNpZXMtLTtcclxuXHJcbiAgaWYgKE1vZHVsZVsnbW9uaXRvclJ1bkRlcGVuZGVuY2llcyddKSB7XHJcbiAgICBNb2R1bGVbJ21vbml0b3JSdW5EZXBlbmRlbmNpZXMnXShydW5EZXBlbmRlbmNpZXMpO1xyXG4gIH1cclxuXHJcbiAgaWYgKHJ1bkRlcGVuZGVuY2llcyA9PSAwKSB7XHJcbiAgICBpZiAocnVuRGVwZW5kZW5jeVdhdGNoZXIgIT09IG51bGwpIHtcclxuICAgICAgY2xlYXJJbnRlcnZhbChydW5EZXBlbmRlbmN5V2F0Y2hlcik7XHJcbiAgICAgIHJ1bkRlcGVuZGVuY3lXYXRjaGVyID0gbnVsbDtcclxuICAgIH1cclxuICAgIGlmIChkZXBlbmRlbmNpZXNGdWxmaWxsZWQpIHtcclxuICAgICAgdmFyIGNhbGxiYWNrID0gZGVwZW5kZW5jaWVzRnVsZmlsbGVkO1xyXG4gICAgICBkZXBlbmRlbmNpZXNGdWxmaWxsZWQgPSBudWxsO1xyXG4gICAgICBjYWxsYmFjaygpOyAvLyBjYW4gYWRkIGFub3RoZXIgZGVwZW5kZW5jaWVzRnVsZmlsbGVkXHJcbiAgICB9XHJcbiAgfVxyXG59XHJcblxyXG4vKiogQHBhcmFtIHtzdHJpbmd8bnVtYmVyPX0gd2hhdCAqL1xyXG5mdW5jdGlvbiBhYm9ydCh3aGF0KSB7XHJcbiAgaWYgKE1vZHVsZVsnb25BYm9ydCddKSB7XHJcbiAgICBNb2R1bGVbJ29uQWJvcnQnXSh3aGF0KTtcclxuICB9XHJcblxyXG4gIHdoYXQgPSAnQWJvcnRlZCgnICsgd2hhdCArICcpJztcclxuICAvLyBUT0RPKHNiYyk6IFNob3VsZCB3ZSByZW1vdmUgcHJpbnRpbmcgYW5kIGxlYXZlIGl0IHVwIHRvIHdob2V2ZXJcclxuICAvLyBjYXRjaGVzIHRoZSBleGNlcHRpb24/XHJcbiAgZXJyKHdoYXQpO1xyXG5cclxuICBBQk9SVCA9IHRydWU7XHJcbiAgRVhJVFNUQVRVUyA9IDE7XHJcblxyXG4gIHdoYXQgKz0gJy4gQnVpbGQgd2l0aCAtc0FTU0VSVElPTlMgZm9yIG1vcmUgaW5mby4nO1xyXG5cclxuICAvLyBVc2UgYSB3YXNtIHJ1bnRpbWUgZXJyb3IsIGJlY2F1c2UgYSBKUyBlcnJvciBtaWdodCBiZSBzZWVuIGFzIGEgZm9yZWlnblxyXG4gIC8vIGV4Y2VwdGlvbiwgd2hpY2ggbWVhbnMgd2UnZCBydW4gZGVzdHJ1Y3RvcnMgb24gaXQuIFdlIG5lZWQgdGhlIGVycm9yIHRvXHJcbiAgLy8gc2ltcGx5IG1ha2UgdGhlIHByb2dyYW0gc3RvcC5cclxuICAvLyBGSVhNRSBUaGlzIGFwcHJvYWNoIGRvZXMgbm90IHdvcmsgaW4gV2FzbSBFSCBiZWNhdXNlIGl0IGN1cnJlbnRseSBkb2VzIG5vdCBhc3N1bWVcclxuICAvLyBhbGwgUnVudGltZUVycm9ycyBhcmUgZnJvbSB0cmFwczsgaXQgZGVjaWRlcyB3aGV0aGVyIGEgUnVudGltZUVycm9yIGlzIGZyb21cclxuICAvLyBhIHRyYXAgb3Igbm90IGJhc2VkIG9uIGEgaGlkZGVuIGZpZWxkIHdpdGhpbiB0aGUgb2JqZWN0LiBTbyBhdCB0aGUgbW9tZW50XHJcbiAgLy8gd2UgZG9uJ3QgaGF2ZSBhIHdheSBvZiB0aHJvd2luZyBhIHdhc20gdHJhcCBmcm9tIEpTLiBUT0RPIE1ha2UgYSBKUyBBUEkgdGhhdFxyXG4gIC8vIGFsbG93cyB0aGlzIGluIHRoZSB3YXNtIHNwZWMuXHJcblxyXG4gIC8vIFN1cHByZXNzIGNsb3N1cmUgY29tcGlsZXIgd2FybmluZyBoZXJlLiBDbG9zdXJlIGNvbXBpbGVyJ3MgYnVpbHRpbiBleHRlcm5cclxuICAvLyBkZWZpbnRpb24gZm9yIFdlYkFzc2VtYmx5LlJ1bnRpbWVFcnJvciBjbGFpbXMgaXQgdGFrZXMgbm8gYXJndW1lbnRzIGV2ZW5cclxuICAvLyB0aG91Z2ggaXQgY2FuLlxyXG4gIC8vIFRPRE8oaHR0cHM6Ly9naXRodWIuY29tL2dvb2dsZS9jbG9zdXJlLWNvbXBpbGVyL3B1bGwvMzkxMyk6IFJlbW92ZSBpZi93aGVuIHVwc3RyZWFtIGNsb3N1cmUgZ2V0cyBmaXhlZC5cclxuICAvKiogQHN1cHByZXNzIHtjaGVja1R5cGVzfSAqL1xyXG4gIHZhciBlID0gbmV3IFdlYkFzc2VtYmx5LlJ1bnRpbWVFcnJvcih3aGF0KTtcclxuXHJcbiAgcmVhZHlQcm9taXNlUmVqZWN0KGUpO1xyXG4gIC8vIFRocm93IHRoZSBlcnJvciB3aGV0aGVyIG9yIG5vdCBNT0RVTEFSSVpFIGlzIHNldCBiZWNhdXNlIGFib3J0IGlzIHVzZWRcclxuICAvLyBpbiBjb2RlIHBhdGhzIGFwYXJ0IGZyb20gaW5zdGFudGlhdGlvbiB3aGVyZSBhbiBleGNlcHRpb24gaXMgZXhwZWN0ZWRcclxuICAvLyB0byBiZSB0aHJvd24gd2hlbiBhYm9ydCBpcyBjYWxsZWQuXHJcbiAgdGhyb3cgZTtcclxufVxyXG5cclxuLy8gaW5jbHVkZTogbWVtb3J5cHJvZmlsZXIuanNcclxuLy8gZW5kIGluY2x1ZGU6IG1lbW9yeXByb2ZpbGVyLmpzXHJcbi8vIGluY2x1ZGU6IFVSSVV0aWxzLmpzXHJcbi8vIFByZWZpeCBvZiBkYXRhIFVSSXMgZW1pdHRlZCBieSBTSU5HTEVfRklMRSBhbmQgcmVsYXRlZCBvcHRpb25zLlxyXG52YXIgZGF0YVVSSVByZWZpeCA9ICdkYXRhOmFwcGxpY2F0aW9uL29jdGV0LXN0cmVhbTtiYXNlNjQsJztcclxuXHJcbi8vIEluZGljYXRlcyB3aGV0aGVyIGZpbGVuYW1lIGlzIGEgYmFzZTY0IGRhdGEgVVJJLlxyXG5mdW5jdGlvbiBpc0RhdGFVUkkoZmlsZW5hbWUpIHtcclxuICAvLyBQcmVmaXggb2YgZGF0YSBVUklzIGVtaXR0ZWQgYnkgU0lOR0xFX0ZJTEUgYW5kIHJlbGF0ZWQgb3B0aW9ucy5cclxuICByZXR1cm4gZmlsZW5hbWUuc3RhcnRzV2l0aChkYXRhVVJJUHJlZml4KTtcclxufVxyXG5cclxuLy8gSW5kaWNhdGVzIHdoZXRoZXIgZmlsZW5hbWUgaXMgZGVsaXZlcmVkIHZpYSBmaWxlIHByb3RvY29sIChhcyBvcHBvc2VkIHRvIGh0dHAvaHR0cHMpXHJcbmZ1bmN0aW9uIGlzRmlsZVVSSShmaWxlbmFtZSkge1xyXG4gIHJldHVybiBmaWxlbmFtZS5zdGFydHNXaXRoKCdmaWxlOi8vJyk7XHJcbn1cclxuXHJcbi8vIGVuZCBpbmNsdWRlOiBVUklVdGlscy5qc1xyXG4vLyBpbmNsdWRlOiBydW50aW1lX2V4Y2VwdGlvbnMuanNcclxuLy8gZW5kIGluY2x1ZGU6IHJ1bnRpbWVfZXhjZXB0aW9ucy5qc1xyXG52YXIgd2FzbUJpbmFyeUZpbGU7XHJcbiAgd2FzbUJpbmFyeUZpbGUgPSAnd2FzbURic2Nhbi53YXNtJztcclxuICBpZiAoIWlzRGF0YVVSSSh3YXNtQmluYXJ5RmlsZSkpIHtcclxuICAgIHdhc21CaW5hcnlGaWxlID0gbG9jYXRlRmlsZSh3YXNtQmluYXJ5RmlsZSk7XHJcbiAgfVxyXG5cclxuZnVuY3Rpb24gZ2V0QmluYXJ5KGZpbGUpIHtcclxuICB0cnkge1xyXG4gICAgaWYgKGZpbGUgPT0gd2FzbUJpbmFyeUZpbGUgJiYgd2FzbUJpbmFyeSkge1xyXG4gICAgICByZXR1cm4gbmV3IFVpbnQ4QXJyYXkod2FzbUJpbmFyeSk7XHJcbiAgICB9XHJcbiAgICBpZiAocmVhZEJpbmFyeSkge1xyXG4gICAgICByZXR1cm4gcmVhZEJpbmFyeShmaWxlKTtcclxuICAgIH1cclxuICAgIHRocm93IFwiYm90aCBhc3luYyBhbmQgc3luYyBmZXRjaGluZyBvZiB0aGUgd2FzbSBmYWlsZWRcIjtcclxuICB9XHJcbiAgY2F0Y2ggKGVycikge1xyXG4gICAgYWJvcnQoZXJyKTtcclxuICB9XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGdldEJpbmFyeVByb21pc2UoYmluYXJ5RmlsZSkge1xyXG4gIC8vIElmIHdlIGRvbid0IGhhdmUgdGhlIGJpbmFyeSB5ZXQsIHRyeSB0byBsb2FkIGl0IGFzeW5jaHJvbm91c2x5LlxyXG4gIC8vIEZldGNoIGhhcyBzb21lIGFkZGl0aW9uYWwgcmVzdHJpY3Rpb25zIG92ZXIgWEhSLCBsaWtlIGl0IGNhbid0IGJlIHVzZWQgb24gYSBmaWxlOi8vIHVybC5cclxuICAvLyBTZWUgaHR0cHM6Ly9naXRodWIuY29tL2dpdGh1Yi9mZXRjaC9wdWxsLzkyI2lzc3VlY29tbWVudC0xNDA2NjU5MzJcclxuICAvLyBDb3Jkb3ZhIG9yIEVsZWN0cm9uIGFwcHMgYXJlIHR5cGljYWxseSBsb2FkZWQgZnJvbSBhIGZpbGU6Ly8gdXJsLlxyXG4gIC8vIFNvIHVzZSBmZXRjaCBpZiBpdCBpcyBhdmFpbGFibGUgYW5kIHRoZSB1cmwgaXMgbm90IGEgZmlsZSwgb3RoZXJ3aXNlIGZhbGwgYmFjayB0byBYSFIuXHJcbiAgaWYgKCF3YXNtQmluYXJ5ICYmIChFTlZJUk9OTUVOVF9JU19XRUIgfHwgRU5WSVJPTk1FTlRfSVNfV09SS0VSKSkge1xyXG4gICAgaWYgKHR5cGVvZiBmZXRjaCA9PSAnZnVuY3Rpb24nXHJcbiAgICApIHtcclxuICAgICAgcmV0dXJuIGZldGNoKGJpbmFyeUZpbGUsIHsgY3JlZGVudGlhbHM6ICdzYW1lLW9yaWdpbicgfSkudGhlbihmdW5jdGlvbihyZXNwb25zZSkge1xyXG4gICAgICAgIGlmICghcmVzcG9uc2VbJ29rJ10pIHtcclxuICAgICAgICAgIHRocm93IFwiZmFpbGVkIHRvIGxvYWQgd2FzbSBiaW5hcnkgZmlsZSBhdCAnXCIgKyBiaW5hcnlGaWxlICsgXCInXCI7XHJcbiAgICAgICAgfVxyXG4gICAgICAgIHJldHVybiByZXNwb25zZVsnYXJyYXlCdWZmZXInXSgpO1xyXG4gICAgICB9KS5jYXRjaChmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgICByZXR1cm4gZ2V0QmluYXJ5KGJpbmFyeUZpbGUpO1xyXG4gICAgICB9KTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8vIE90aGVyd2lzZSwgZ2V0QmluYXJ5IHNob3VsZCBiZSBhYmxlIHRvIGdldCBpdCBzeW5jaHJvbm91c2x5XHJcbiAgcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpLnRoZW4oZnVuY3Rpb24oKSB7IHJldHVybiBnZXRCaW5hcnkoYmluYXJ5RmlsZSk7IH0pO1xyXG59XHJcblxyXG5mdW5jdGlvbiBpbnN0YW50aWF0ZUFycmF5QnVmZmVyKGJpbmFyeUZpbGUsIGltcG9ydHMsIHJlY2VpdmVyKSB7XHJcbiAgcmV0dXJuIGdldEJpbmFyeVByb21pc2UoYmluYXJ5RmlsZSkudGhlbihmdW5jdGlvbihiaW5hcnkpIHtcclxuICAgIHJldHVybiBXZWJBc3NlbWJseS5pbnN0YW50aWF0ZShiaW5hcnksIGltcG9ydHMpO1xyXG4gIH0pLnRoZW4oZnVuY3Rpb24gKGluc3RhbmNlKSB7XHJcbiAgICByZXR1cm4gaW5zdGFuY2U7XHJcbiAgfSkudGhlbihyZWNlaXZlciwgZnVuY3Rpb24ocmVhc29uKSB7XHJcbiAgICBlcnIoJ2ZhaWxlZCB0byBhc3luY2hyb25vdXNseSBwcmVwYXJlIHdhc206ICcgKyByZWFzb24pO1xyXG5cclxuICAgIGFib3J0KHJlYXNvbik7XHJcbiAgfSk7XHJcbn1cclxuXHJcbmZ1bmN0aW9uIGluc3RhbnRpYXRlQXN5bmMoYmluYXJ5LCBiaW5hcnlGaWxlLCBpbXBvcnRzLCBjYWxsYmFjaykge1xyXG4gIGlmICghYmluYXJ5ICYmXHJcbiAgICAgIHR5cGVvZiBXZWJBc3NlbWJseS5pbnN0YW50aWF0ZVN0cmVhbWluZyA9PSAnZnVuY3Rpb24nICYmXHJcbiAgICAgICFpc0RhdGFVUkkoYmluYXJ5RmlsZSkgJiZcclxuICAgICAgdHlwZW9mIGZldGNoID09ICdmdW5jdGlvbicpIHtcclxuICAgIHJldHVybiBmZXRjaChiaW5hcnlGaWxlLCB7IGNyZWRlbnRpYWxzOiAnc2FtZS1vcmlnaW4nIH0pLnRoZW4oZnVuY3Rpb24ocmVzcG9uc2UpIHtcclxuICAgICAgLy8gU3VwcHJlc3MgY2xvc3VyZSB3YXJuaW5nIGhlcmUgc2luY2UgdGhlIHVwc3RyZWFtIGRlZmluaXRpb24gZm9yXHJcbiAgICAgIC8vIGluc3RhbnRpYXRlU3RyZWFtaW5nIG9ubHkgYWxsb3dzIFByb21pc2U8UmVwc3BvbnNlPiByYXRoZXIgdGhhblxyXG4gICAgICAvLyBhbiBhY3R1YWwgUmVzcG9uc2UuXHJcbiAgICAgIC8vIFRPRE8oaHR0cHM6Ly9naXRodWIuY29tL2dvb2dsZS9jbG9zdXJlLWNvbXBpbGVyL3B1bGwvMzkxMyk6IFJlbW92ZSBpZi93aGVuIHVwc3RyZWFtIGNsb3N1cmUgaXMgZml4ZWQuXHJcbiAgICAgIC8qKiBAc3VwcHJlc3Mge2NoZWNrVHlwZXN9ICovXHJcbiAgICAgIHZhciByZXN1bHQgPSBXZWJBc3NlbWJseS5pbnN0YW50aWF0ZVN0cmVhbWluZyhyZXNwb25zZSwgaW1wb3J0cyk7XHJcblxyXG4gICAgICByZXR1cm4gcmVzdWx0LnRoZW4oXHJcbiAgICAgICAgY2FsbGJhY2ssXHJcbiAgICAgICAgZnVuY3Rpb24ocmVhc29uKSB7XHJcbiAgICAgICAgICAvLyBXZSBleHBlY3QgdGhlIG1vc3QgY29tbW9uIGZhaWx1cmUgY2F1c2UgdG8gYmUgYSBiYWQgTUlNRSB0eXBlIGZvciB0aGUgYmluYXJ5LFxyXG4gICAgICAgICAgLy8gaW4gd2hpY2ggY2FzZSBmYWxsaW5nIGJhY2sgdG8gQXJyYXlCdWZmZXIgaW5zdGFudGlhdGlvbiBzaG91bGQgd29yay5cclxuICAgICAgICAgIGVycignd2FzbSBzdHJlYW1pbmcgY29tcGlsZSBmYWlsZWQ6ICcgKyByZWFzb24pO1xyXG4gICAgICAgICAgZXJyKCdmYWxsaW5nIGJhY2sgdG8gQXJyYXlCdWZmZXIgaW5zdGFudGlhdGlvbicpO1xyXG4gICAgICAgICAgcmV0dXJuIGluc3RhbnRpYXRlQXJyYXlCdWZmZXIoYmluYXJ5RmlsZSwgaW1wb3J0cywgY2FsbGJhY2spO1xyXG4gICAgICAgIH0pO1xyXG4gICAgfSk7XHJcbiAgfSBlbHNlIHtcclxuICAgIHJldHVybiBpbnN0YW50aWF0ZUFycmF5QnVmZmVyKGJpbmFyeUZpbGUsIGltcG9ydHMsIGNhbGxiYWNrKTtcclxuICB9XHJcbn1cclxuXHJcbi8vIENyZWF0ZSB0aGUgd2FzbSBpbnN0YW5jZS5cclxuLy8gUmVjZWl2ZXMgdGhlIHdhc20gaW1wb3J0cywgcmV0dXJucyB0aGUgZXhwb3J0cy5cclxuZnVuY3Rpb24gY3JlYXRlV2FzbSgpIHtcclxuICAvLyBwcmVwYXJlIGltcG9ydHNcclxuICB2YXIgaW5mbyA9IHtcclxuICAgICdlbnYnOiB3YXNtSW1wb3J0cyxcclxuICAgICd3YXNpX3NuYXBzaG90X3ByZXZpZXcxJzogd2FzbUltcG9ydHMsXHJcbiAgfTtcclxuICAvLyBMb2FkIHRoZSB3YXNtIG1vZHVsZSBhbmQgY3JlYXRlIGFuIGluc3RhbmNlIG9mIHVzaW5nIG5hdGl2ZSBzdXBwb3J0IGluIHRoZSBKUyBlbmdpbmUuXHJcbiAgLy8gaGFuZGxlIGEgZ2VuZXJhdGVkIHdhc20gaW5zdGFuY2UsIHJlY2VpdmluZyBpdHMgZXhwb3J0cyBhbmRcclxuICAvLyBwZXJmb3JtaW5nIG90aGVyIG5lY2Vzc2FyeSBzZXR1cFxyXG4gIC8qKiBAcGFyYW0ge1dlYkFzc2VtYmx5Lk1vZHVsZT19IG1vZHVsZSovXHJcbiAgZnVuY3Rpb24gcmVjZWl2ZUluc3RhbmNlKGluc3RhbmNlLCBtb2R1bGUpIHtcclxuICAgIHZhciBleHBvcnRzID0gaW5zdGFuY2UuZXhwb3J0cztcclxuXHJcbiAgICBNb2R1bGVbJ2FzbSddID0gZXhwb3J0cztcclxuXHJcbiAgICB3YXNtTWVtb3J5ID0gTW9kdWxlWydhc20nXVsnbWVtb3J5J107XHJcbiAgICB1cGRhdGVNZW1vcnlWaWV3cygpO1xyXG5cclxuICAgIHdhc21UYWJsZSA9IE1vZHVsZVsnYXNtJ11bJ19faW5kaXJlY3RfZnVuY3Rpb25fdGFibGUnXTtcclxuXHJcbiAgICBhZGRPbkluaXQoTW9kdWxlWydhc20nXVsnX193YXNtX2NhbGxfY3RvcnMnXSk7XHJcblxyXG4gICAgcmVtb3ZlUnVuRGVwZW5kZW5jeSgnd2FzbS1pbnN0YW50aWF0ZScpO1xyXG5cclxuICAgIHJldHVybiBleHBvcnRzO1xyXG4gIH1cclxuICAvLyB3YWl0IGZvciB0aGUgcHRocmVhZCBwb29sIChpZiBhbnkpXHJcbiAgYWRkUnVuRGVwZW5kZW5jeSgnd2FzbS1pbnN0YW50aWF0ZScpO1xyXG5cclxuICAvLyBQcmVmZXIgc3RyZWFtaW5nIGluc3RhbnRpYXRpb24gaWYgYXZhaWxhYmxlLlxyXG4gIGZ1bmN0aW9uIHJlY2VpdmVJbnN0YW50aWF0aW9uUmVzdWx0KHJlc3VsdCkge1xyXG4gICAgLy8gJ3Jlc3VsdCcgaXMgYSBSZXN1bHRPYmplY3Qgb2JqZWN0IHdoaWNoIGhhcyBib3RoIHRoZSBtb2R1bGUgYW5kIGluc3RhbmNlLlxyXG4gICAgLy8gcmVjZWl2ZUluc3RhbmNlKCkgd2lsbCBzd2FwIGluIHRoZSBleHBvcnRzICh0byBNb2R1bGUuYXNtKSBzbyB0aGV5IGNhbiBiZSBjYWxsZWRcclxuICAgIC8vIFRPRE86IER1ZSB0byBDbG9zdXJlIHJlZ3Jlc3Npb24gaHR0cHM6Ly9naXRodWIuY29tL2dvb2dsZS9jbG9zdXJlLWNvbXBpbGVyL2lzc3Vlcy8zMTkzLCB0aGUgYWJvdmUgbGluZSBubyBsb25nZXIgb3B0aW1pemVzIG91dCBkb3duIHRvIHRoZSBmb2xsb3dpbmcgbGluZS5cclxuICAgIC8vIFdoZW4gdGhlIHJlZ3Jlc3Npb24gaXMgZml4ZWQsIGNhbiByZXN0b3JlIHRoZSBhYm92ZSBQVEhSRUFEUy1lbmFibGVkIHBhdGguXHJcbiAgICByZWNlaXZlSW5zdGFuY2UocmVzdWx0WydpbnN0YW5jZSddKTtcclxuICB9XHJcblxyXG4gIC8vIFVzZXIgc2hlbGwgcGFnZXMgY2FuIHdyaXRlIHRoZWlyIG93biBNb2R1bGUuaW5zdGFudGlhdGVXYXNtID0gZnVuY3Rpb24oaW1wb3J0cywgc3VjY2Vzc0NhbGxiYWNrKSBjYWxsYmFja1xyXG4gIC8vIHRvIG1hbnVhbGx5IGluc3RhbnRpYXRlIHRoZSBXYXNtIG1vZHVsZSB0aGVtc2VsdmVzLiBUaGlzIGFsbG93cyBwYWdlcyB0b1xyXG4gIC8vIHJ1biB0aGUgaW5zdGFudGlhdGlvbiBwYXJhbGxlbCB0byBhbnkgb3RoZXIgYXN5bmMgc3RhcnR1cCBhY3Rpb25zIHRoZXkgYXJlXHJcbiAgLy8gcGVyZm9ybWluZy5cclxuICAvLyBBbHNvIHB0aHJlYWRzIGFuZCB3YXNtIHdvcmtlcnMgaW5pdGlhbGl6ZSB0aGUgd2FzbSBpbnN0YW5jZSB0aHJvdWdoIHRoaXNcclxuICAvLyBwYXRoLlxyXG4gIGlmIChNb2R1bGVbJ2luc3RhbnRpYXRlV2FzbSddKSB7XHJcblxyXG4gICAgdHJ5IHtcclxuICAgICAgcmV0dXJuIE1vZHVsZVsnaW5zdGFudGlhdGVXYXNtJ10oaW5mbywgcmVjZWl2ZUluc3RhbmNlKTtcclxuICAgIH0gY2F0Y2goZSkge1xyXG4gICAgICBlcnIoJ01vZHVsZS5pbnN0YW50aWF0ZVdhc20gY2FsbGJhY2sgZmFpbGVkIHdpdGggZXJyb3I6ICcgKyBlKTtcclxuICAgICAgICAvLyBJZiBpbnN0YW50aWF0aW9uIGZhaWxzLCByZWplY3QgdGhlIG1vZHVsZSByZWFkeSBwcm9taXNlLlxyXG4gICAgICAgIHJlYWR5UHJvbWlzZVJlamVjdChlKTtcclxuICAgIH1cclxuICB9XHJcblxyXG4gIC8vIElmIGluc3RhbnRpYXRpb24gZmFpbHMsIHJlamVjdCB0aGUgbW9kdWxlIHJlYWR5IHByb21pc2UuXHJcbiAgaW5zdGFudGlhdGVBc3luYyh3YXNtQmluYXJ5LCB3YXNtQmluYXJ5RmlsZSwgaW5mbywgcmVjZWl2ZUluc3RhbnRpYXRpb25SZXN1bHQpLmNhdGNoKHJlYWR5UHJvbWlzZVJlamVjdCk7XHJcbiAgcmV0dXJuIHt9OyAvLyBubyBleHBvcnRzIHlldDsgd2UnbGwgZmlsbCB0aGVtIGluIGxhdGVyXHJcbn1cclxuXHJcbi8vIEdsb2JhbHMgdXNlZCBieSBKUyBpNjQgY29udmVyc2lvbnMgKHNlZSBtYWtlU2V0VmFsdWUpXHJcbnZhciB0ZW1wRG91YmxlO1xyXG52YXIgdGVtcEk2NDtcclxuXHJcbi8vIGluY2x1ZGU6IHJ1bnRpbWVfZGVidWcuanNcclxuLy8gZW5kIGluY2x1ZGU6IHJ1bnRpbWVfZGVidWcuanNcclxuLy8gPT09IEJvZHkgPT09XHJcblxyXG5cclxuLy8gZW5kIGluY2x1ZGU6IHByZWFtYmxlLmpzXHJcblxyXG4gIC8qKiBAY29uc3RydWN0b3IgKi9cclxuICBmdW5jdGlvbiBFeGl0U3RhdHVzKHN0YXR1cykge1xyXG4gICAgICB0aGlzLm5hbWUgPSAnRXhpdFN0YXR1cyc7XHJcbiAgICAgIHRoaXMubWVzc2FnZSA9ICdQcm9ncmFtIHRlcm1pbmF0ZWQgd2l0aCBleGl0KCcgKyBzdGF0dXMgKyAnKSc7XHJcbiAgICAgIHRoaXMuc3RhdHVzID0gc3RhdHVzO1xyXG4gICAgfVxyXG5cclxuICBmdW5jdGlvbiBjYWxsUnVudGltZUNhbGxiYWNrcyhjYWxsYmFja3MpIHtcclxuICAgICAgd2hpbGUgKGNhbGxiYWNrcy5sZW5ndGggPiAwKSB7XHJcbiAgICAgICAgLy8gUGFzcyB0aGUgbW9kdWxlIGFzIHRoZSBmaXJzdCBhcmd1bWVudC5cclxuICAgICAgICBjYWxsYmFja3Muc2hpZnQoKShNb2R1bGUpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG4gIFxyXG4gICAgLyoqXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gcHRyXHJcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gdHlwZVxyXG4gICAgICovXHJcbiAgZnVuY3Rpb24gZ2V0VmFsdWUocHRyLCB0eXBlID0gJ2k4Jykge1xyXG4gICAgaWYgKHR5cGUuZW5kc1dpdGgoJyonKSkgdHlwZSA9ICcqJztcclxuICAgIHN3aXRjaCAodHlwZSkge1xyXG4gICAgICBjYXNlICdpMSc6IHJldHVybiBIRUFQOFsoKHB0cik+PjApXTtcclxuICAgICAgY2FzZSAnaTgnOiByZXR1cm4gSEVBUDhbKChwdHIpPj4wKV07XHJcbiAgICAgIGNhc2UgJ2kxNic6IHJldHVybiBIRUFQMTZbKChwdHIpPj4xKV07XHJcbiAgICAgIGNhc2UgJ2kzMic6IHJldHVybiBIRUFQMzJbKChwdHIpPj4yKV07XHJcbiAgICAgIGNhc2UgJ2k2NCc6IHJldHVybiBIRUFQMzJbKChwdHIpPj4yKV07XHJcbiAgICAgIGNhc2UgJ2Zsb2F0JzogcmV0dXJuIEhFQVBGMzJbKChwdHIpPj4yKV07XHJcbiAgICAgIGNhc2UgJ2RvdWJsZSc6IHJldHVybiBIRUFQRjY0WygocHRyKT4+MyldO1xyXG4gICAgICBjYXNlICcqJzogcmV0dXJuIEhFQVBVMzJbKChwdHIpPj4yKV07XHJcbiAgICAgIGRlZmF1bHQ6IGFib3J0KCdpbnZhbGlkIHR5cGUgZm9yIGdldFZhbHVlOiAnICsgdHlwZSk7XHJcbiAgICB9XHJcbiAgfVxyXG5cclxuICBcclxuICAgIC8qKlxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IHB0clxyXG4gICAgICogQHBhcmFtIHtudW1iZXJ9IHZhbHVlXHJcbiAgICAgKiBAcGFyYW0ge3N0cmluZ30gdHlwZVxyXG4gICAgICovXHJcbiAgZnVuY3Rpb24gc2V0VmFsdWUocHRyLCB2YWx1ZSwgdHlwZSA9ICdpOCcpIHtcclxuICAgIGlmICh0eXBlLmVuZHNXaXRoKCcqJykpIHR5cGUgPSAnKic7XHJcbiAgICBzd2l0Y2ggKHR5cGUpIHtcclxuICAgICAgY2FzZSAnaTEnOiBIRUFQOFsoKHB0cik+PjApXSA9IHZhbHVlOyBicmVhaztcclxuICAgICAgY2FzZSAnaTgnOiBIRUFQOFsoKHB0cik+PjApXSA9IHZhbHVlOyBicmVhaztcclxuICAgICAgY2FzZSAnaTE2JzogSEVBUDE2WygocHRyKT4+MSldID0gdmFsdWU7IGJyZWFrO1xyXG4gICAgICBjYXNlICdpMzInOiBIRUFQMzJbKChwdHIpPj4yKV0gPSB2YWx1ZTsgYnJlYWs7XHJcbiAgICAgIGNhc2UgJ2k2NCc6ICh0ZW1wSTY0ID0gW3ZhbHVlPj4+MCwodGVtcERvdWJsZT12YWx1ZSwoKyhNYXRoLmFicyh0ZW1wRG91YmxlKSkpID49IDEuMCA/ICh0ZW1wRG91YmxlID4gMC4wID8gKChNYXRoLm1pbigoKyhNYXRoLmZsb29yKCh0ZW1wRG91YmxlKS80Mjk0OTY3Mjk2LjApKSksIDQyOTQ5NjcyOTUuMCkpfDApPj4+MCA6ICh+figoKyhNYXRoLmNlaWwoKHRlbXBEb3VibGUgLSArKCgofn4odGVtcERvdWJsZSkpKT4+PjApKS80Mjk0OTY3Mjk2LjApKSkpKT4+PjApIDogMCldLEhFQVAzMlsoKHB0cik+PjIpXSA9IHRlbXBJNjRbMF0sSEVBUDMyWygoKHB0cikrKDQpKT4+MildID0gdGVtcEk2NFsxXSk7IGJyZWFrO1xyXG4gICAgICBjYXNlICdmbG9hdCc6IEhFQVBGMzJbKChwdHIpPj4yKV0gPSB2YWx1ZTsgYnJlYWs7XHJcbiAgICAgIGNhc2UgJ2RvdWJsZSc6IEhFQVBGNjRbKChwdHIpPj4zKV0gPSB2YWx1ZTsgYnJlYWs7XHJcbiAgICAgIGNhc2UgJyonOiBIRUFQVTMyWygocHRyKT4+MildID0gdmFsdWU7IGJyZWFrO1xyXG4gICAgICBkZWZhdWx0OiBhYm9ydCgnaW52YWxpZCB0eXBlIGZvciBzZXRWYWx1ZTogJyArIHR5cGUpO1xyXG4gICAgfVxyXG4gIH1cclxuXHJcbiAgLyoqIEBjb25zdHJ1Y3RvciAqL1xyXG4gIGZ1bmN0aW9uIEV4Y2VwdGlvbkluZm8oZXhjUHRyKSB7XHJcbiAgICAgIHRoaXMuZXhjUHRyID0gZXhjUHRyO1xyXG4gICAgICB0aGlzLnB0ciA9IGV4Y1B0ciAtIDI0O1xyXG4gIFxyXG4gICAgICB0aGlzLnNldF90eXBlID0gZnVuY3Rpb24odHlwZSkge1xyXG4gICAgICAgIEhFQVBVMzJbKCgodGhpcy5wdHIpKyg0KSk+PjIpXSA9IHR5cGU7XHJcbiAgICAgIH07XHJcbiAgXHJcbiAgICAgIHRoaXMuZ2V0X3R5cGUgPSBmdW5jdGlvbigpIHtcclxuICAgICAgICByZXR1cm4gSEVBUFUzMlsoKCh0aGlzLnB0cikrKDQpKT4+MildO1xyXG4gICAgICB9O1xyXG4gIFxyXG4gICAgICB0aGlzLnNldF9kZXN0cnVjdG9yID0gZnVuY3Rpb24oZGVzdHJ1Y3Rvcikge1xyXG4gICAgICAgIEhFQVBVMzJbKCgodGhpcy5wdHIpKyg4KSk+PjIpXSA9IGRlc3RydWN0b3I7XHJcbiAgICAgIH07XHJcbiAgXHJcbiAgICAgIHRoaXMuZ2V0X2Rlc3RydWN0b3IgPSBmdW5jdGlvbigpIHtcclxuICAgICAgICByZXR1cm4gSEVBUFUzMlsoKCh0aGlzLnB0cikrKDgpKT4+MildO1xyXG4gICAgICB9O1xyXG4gIFxyXG4gICAgICB0aGlzLnNldF9jYXVnaHQgPSBmdW5jdGlvbiAoY2F1Z2h0KSB7XHJcbiAgICAgICAgY2F1Z2h0ID0gY2F1Z2h0ID8gMSA6IDA7XHJcbiAgICAgICAgSEVBUDhbKCgodGhpcy5wdHIpKygxMikpPj4wKV0gPSBjYXVnaHQ7XHJcbiAgICAgIH07XHJcbiAgXHJcbiAgICAgIHRoaXMuZ2V0X2NhdWdodCA9IGZ1bmN0aW9uICgpIHtcclxuICAgICAgICByZXR1cm4gSEVBUDhbKCgodGhpcy5wdHIpKygxMikpPj4wKV0gIT0gMDtcclxuICAgICAgfTtcclxuICBcclxuICAgICAgdGhpcy5zZXRfcmV0aHJvd24gPSBmdW5jdGlvbiAocmV0aHJvd24pIHtcclxuICAgICAgICByZXRocm93biA9IHJldGhyb3duID8gMSA6IDA7XHJcbiAgICAgICAgSEVBUDhbKCgodGhpcy5wdHIpKygxMykpPj4wKV0gPSByZXRocm93bjtcclxuICAgICAgfTtcclxuICBcclxuICAgICAgdGhpcy5nZXRfcmV0aHJvd24gPSBmdW5jdGlvbiAoKSB7XHJcbiAgICAgICAgcmV0dXJuIEhFQVA4WygoKHRoaXMucHRyKSsoMTMpKT4+MCldICE9IDA7XHJcbiAgICAgIH07XHJcbiAgXHJcbiAgICAgIC8vIEluaXRpYWxpemUgbmF0aXZlIHN0cnVjdHVyZSBmaWVsZHMuIFNob3VsZCBiZSBjYWxsZWQgb25jZSBhZnRlciBhbGxvY2F0ZWQuXHJcbiAgICAgIHRoaXMuaW5pdCA9IGZ1bmN0aW9uKHR5cGUsIGRlc3RydWN0b3IpIHtcclxuICAgICAgICB0aGlzLnNldF9hZGp1c3RlZF9wdHIoMCk7XHJcbiAgICAgICAgdGhpcy5zZXRfdHlwZSh0eXBlKTtcclxuICAgICAgICB0aGlzLnNldF9kZXN0cnVjdG9yKGRlc3RydWN0b3IpO1xyXG4gICAgICB9XHJcbiAgXHJcbiAgICAgIHRoaXMuc2V0X2FkanVzdGVkX3B0ciA9IGZ1bmN0aW9uKGFkanVzdGVkUHRyKSB7XHJcbiAgICAgICAgSEVBUFUzMlsoKCh0aGlzLnB0cikrKDE2KSk+PjIpXSA9IGFkanVzdGVkUHRyO1xyXG4gICAgICB9O1xyXG4gIFxyXG4gICAgICB0aGlzLmdldF9hZGp1c3RlZF9wdHIgPSBmdW5jdGlvbigpIHtcclxuICAgICAgICByZXR1cm4gSEVBUFUzMlsoKCh0aGlzLnB0cikrKDE2KSk+PjIpXTtcclxuICAgICAgfTtcclxuICBcclxuICAgICAgLy8gR2V0IHBvaW50ZXIgd2hpY2ggaXMgZXhwZWN0ZWQgdG8gYmUgcmVjZWl2ZWQgYnkgY2F0Y2ggY2xhdXNlIGluIEMrKyBjb2RlLiBJdCBtYXkgYmUgYWRqdXN0ZWRcclxuICAgICAgLy8gd2hlbiB0aGUgcG9pbnRlciBpcyBjYXN0ZWQgdG8gc29tZSBvZiB0aGUgZXhjZXB0aW9uIG9iamVjdCBiYXNlIGNsYXNzZXMgKGUuZy4gd2hlbiB2aXJ0dWFsXHJcbiAgICAgIC8vIGluaGVyaXRhbmNlIGlzIHVzZWQpLiBXaGVuIGEgcG9pbnRlciBpcyB0aHJvd24gdGhpcyBtZXRob2Qgc2hvdWxkIHJldHVybiB0aGUgdGhyb3duIHBvaW50ZXJcclxuICAgICAgLy8gaXRzZWxmLlxyXG4gICAgICB0aGlzLmdldF9leGNlcHRpb25fcHRyID0gZnVuY3Rpb24oKSB7XHJcbiAgICAgICAgLy8gV29yayBhcm91bmQgYSBmYXN0Y29tcCBidWcsIHRoaXMgY29kZSBpcyBzdGlsbCBpbmNsdWRlZCBmb3Igc29tZSByZWFzb24gaW4gYSBidWlsZCB3aXRob3V0XHJcbiAgICAgICAgLy8gZXhjZXB0aW9ucyBzdXBwb3J0LlxyXG4gICAgICAgIHZhciBpc1BvaW50ZXIgPSBfX19jeGFfaXNfcG9pbnRlcl90eXBlKHRoaXMuZ2V0X3R5cGUoKSk7XHJcbiAgICAgICAgaWYgKGlzUG9pbnRlcikge1xyXG4gICAgICAgICAgcmV0dXJuIEhFQVBVMzJbKCh0aGlzLmV4Y1B0cik+PjIpXTtcclxuICAgICAgICB9XHJcbiAgICAgICAgdmFyIGFkanVzdGVkID0gdGhpcy5nZXRfYWRqdXN0ZWRfcHRyKCk7XHJcbiAgICAgICAgaWYgKGFkanVzdGVkICE9PSAwKSByZXR1cm4gYWRqdXN0ZWQ7XHJcbiAgICAgICAgcmV0dXJuIHRoaXMuZXhjUHRyO1xyXG4gICAgICB9O1xyXG4gICAgfVxyXG4gIFxyXG4gIHZhciBleGNlcHRpb25MYXN0ID0gMDtcclxuICBcclxuICB2YXIgdW5jYXVnaHRFeGNlcHRpb25Db3VudCA9IDA7XHJcbiAgZnVuY3Rpb24gX19fY3hhX3Rocm93KHB0ciwgdHlwZSwgZGVzdHJ1Y3Rvcikge1xyXG4gICAgICB2YXIgaW5mbyA9IG5ldyBFeGNlcHRpb25JbmZvKHB0cik7XHJcbiAgICAgIC8vIEluaXRpYWxpemUgRXhjZXB0aW9uSW5mbyBjb250ZW50IGFmdGVyIGl0IHdhcyBhbGxvY2F0ZWQgaW4gX19jeGFfYWxsb2NhdGVfZXhjZXB0aW9uLlxyXG4gICAgICBpbmZvLmluaXQodHlwZSwgZGVzdHJ1Y3Rvcik7XHJcbiAgICAgIGV4Y2VwdGlvbkxhc3QgPSBwdHI7XHJcbiAgICAgIHVuY2F1Z2h0RXhjZXB0aW9uQ291bnQrKztcclxuICAgICAgdGhyb3cgZXhjZXB0aW9uTGFzdDtcclxuICAgIH1cclxuXHJcbiAgZnVuY3Rpb24gX2Fib3J0KCkge1xyXG4gICAgICBhYm9ydCgnJyk7XHJcbiAgICB9XHJcblxyXG4gIGZ1bmN0aW9uIF9lbXNjcmlwdGVuX21lbWNweV9iaWcoZGVzdCwgc3JjLCBudW0pIHtcclxuICAgICAgSEVBUFU4LmNvcHlXaXRoaW4oZGVzdCwgc3JjLCBzcmMgKyBudW0pO1xyXG4gICAgfVxyXG5cclxuICBmdW5jdGlvbiBnZXRIZWFwTWF4KCkge1xyXG4gICAgICAvLyBTdGF5IG9uZSBXYXNtIHBhZ2Ugc2hvcnQgb2YgNEdCOiB3aGlsZSBlLmcuIENocm9tZSBpcyBhYmxlIHRvIGFsbG9jYXRlXHJcbiAgICAgIC8vIGZ1bGwgNEdCIFdhc20gbWVtb3JpZXMsIHRoZSBzaXplIHdpbGwgd3JhcCBiYWNrIHRvIDAgYnl0ZXMgaW4gV2FzbSBzaWRlXHJcbiAgICAgIC8vIGZvciBhbnkgY29kZSB0aGF0IGRlYWxzIHdpdGggaGVhcCBzaXplcywgd2hpY2ggd291bGQgcmVxdWlyZSBzcGVjaWFsXHJcbiAgICAgIC8vIGNhc2luZyBhbGwgaGVhcCBzaXplIHJlbGF0ZWQgY29kZSB0byB0cmVhdCAwIHNwZWNpYWxseS5cclxuICAgICAgcmV0dXJuIDIxNDc0ODM2NDg7XHJcbiAgICB9XHJcbiAgXHJcbiAgZnVuY3Rpb24gZW1zY3JpcHRlbl9yZWFsbG9jX2J1ZmZlcihzaXplKSB7XHJcbiAgICAgIHZhciBiID0gd2FzbU1lbW9yeS5idWZmZXI7XHJcbiAgICAgIHRyeSB7XHJcbiAgICAgICAgLy8gcm91bmQgc2l6ZSBncm93IHJlcXVlc3QgdXAgdG8gd2FzbSBwYWdlIHNpemUgKGZpeGVkIDY0S0IgcGVyIHNwZWMpXHJcbiAgICAgICAgd2FzbU1lbW9yeS5ncm93KChzaXplIC0gYi5ieXRlTGVuZ3RoICsgNjU1MzUpID4+PiAxNik7IC8vIC5ncm93KCkgdGFrZXMgYSBkZWx0YSBjb21wYXJlZCB0byB0aGUgcHJldmlvdXMgc2l6ZVxyXG4gICAgICAgIHVwZGF0ZU1lbW9yeVZpZXdzKCk7XHJcbiAgICAgICAgcmV0dXJuIDEgLypzdWNjZXNzKi87XHJcbiAgICAgIH0gY2F0Y2goZSkge1xyXG4gICAgICB9XHJcbiAgICAgIC8vIGltcGxpY2l0IDAgcmV0dXJuIHRvIHNhdmUgY29kZSBzaXplIChjYWxsZXIgd2lsbCBjYXN0IFwidW5kZWZpbmVkXCIgaW50byAwXHJcbiAgICAgIC8vIGFueWhvdylcclxuICAgIH1cclxuICBmdW5jdGlvbiBfZW1zY3JpcHRlbl9yZXNpemVfaGVhcChyZXF1ZXN0ZWRTaXplKSB7XHJcbiAgICAgIHZhciBvbGRTaXplID0gSEVBUFU4Lmxlbmd0aDtcclxuICAgICAgcmVxdWVzdGVkU2l6ZSA9IHJlcXVlc3RlZFNpemUgPj4+IDA7XHJcbiAgICAgIC8vIFdpdGggbXVsdGl0aHJlYWRlZCBidWlsZHMsIHJhY2VzIGNhbiBoYXBwZW4gKGFub3RoZXIgdGhyZWFkIG1pZ2h0IGluY3JlYXNlIHRoZSBzaXplXHJcbiAgICAgIC8vIGluIGJldHdlZW4pLCBzbyByZXR1cm4gYSBmYWlsdXJlLCBhbmQgbGV0IHRoZSBjYWxsZXIgcmV0cnkuXHJcbiAgXHJcbiAgICAgIC8vIE1lbW9yeSByZXNpemUgcnVsZXM6XHJcbiAgICAgIC8vIDEuICBBbHdheXMgaW5jcmVhc2UgaGVhcCBzaXplIHRvIGF0IGxlYXN0IHRoZSByZXF1ZXN0ZWQgc2l6ZSwgcm91bmRlZCB1cFxyXG4gICAgICAvLyAgICAgdG8gbmV4dCBwYWdlIG11bHRpcGxlLlxyXG4gICAgICAvLyAyYS4gSWYgTUVNT1JZX0dST1dUSF9MSU5FQVJfU1RFUCA9PSAtMSwgZXhjZXNzaXZlbHkgcmVzaXplIHRoZSBoZWFwXHJcbiAgICAgIC8vICAgICBnZW9tZXRyaWNhbGx5OiBpbmNyZWFzZSB0aGUgaGVhcCBzaXplIGFjY29yZGluZyB0b1xyXG4gICAgICAvLyAgICAgTUVNT1JZX0dST1dUSF9HRU9NRVRSSUNfU1RFUCBmYWN0b3IgKGRlZmF1bHQgKzIwJSksIEF0IG1vc3RcclxuICAgICAgLy8gICAgIG92ZXJyZXNlcnZlIGJ5IE1FTU9SWV9HUk9XVEhfR0VPTUVUUklDX0NBUCBieXRlcyAoZGVmYXVsdCA5Nk1CKS5cclxuICAgICAgLy8gMmIuIElmIE1FTU9SWV9HUk9XVEhfTElORUFSX1NURVAgIT0gLTEsIGV4Y2Vzc2l2ZWx5IHJlc2l6ZSB0aGUgaGVhcFxyXG4gICAgICAvLyAgICAgbGluZWFybHk6IGluY3JlYXNlIHRoZSBoZWFwIHNpemUgYnkgYXQgbGVhc3RcclxuICAgICAgLy8gICAgIE1FTU9SWV9HUk9XVEhfTElORUFSX1NURVAgYnl0ZXMuXHJcbiAgICAgIC8vIDMuICBNYXggc2l6ZSBmb3IgdGhlIGhlYXAgaXMgY2FwcGVkIGF0IDIwNDhNQi1XQVNNX1BBR0VfU0laRSwgb3IgYnlcclxuICAgICAgLy8gICAgIE1BWElNVU1fTUVNT1JZLCBvciBieSBBU0FOIGxpbWl0LCBkZXBlbmRpbmcgb24gd2hpY2ggaXMgc21hbGxlc3RcclxuICAgICAgLy8gNC4gIElmIHdlIHdlcmUgdW5hYmxlIHRvIGFsbG9jYXRlIGFzIG11Y2ggbWVtb3J5LCBpdCBtYXkgYmUgZHVlIHRvXHJcbiAgICAgIC8vICAgICBvdmVyLWVhZ2VyIGRlY2lzaW9uIHRvIGV4Y2Vzc2l2ZWx5IHJlc2VydmUgZHVlIHRvICgzKSBhYm92ZS5cclxuICAgICAgLy8gICAgIEhlbmNlIGlmIGFuIGFsbG9jYXRpb24gZmFpbHMsIGN1dCBkb3duIG9uIHRoZSBhbW91bnQgb2YgZXhjZXNzXHJcbiAgICAgIC8vICAgICBncm93dGgsIGluIGFuIGF0dGVtcHQgdG8gc3VjY2VlZCB0byBwZXJmb3JtIGEgc21hbGxlciBhbGxvY2F0aW9uLlxyXG4gIFxyXG4gICAgICAvLyBBIGxpbWl0IGlzIHNldCBmb3IgaG93IG11Y2ggd2UgY2FuIGdyb3cuIFdlIHNob3VsZCBub3QgZXhjZWVkIHRoYXRcclxuICAgICAgLy8gKHRoZSB3YXNtIGJpbmFyeSBzcGVjaWZpZXMgaXQsIHNvIGlmIHdlIHRyaWVkLCB3ZSdkIGZhaWwgYW55aG93KS5cclxuICAgICAgdmFyIG1heEhlYXBTaXplID0gZ2V0SGVhcE1heCgpO1xyXG4gICAgICBpZiAocmVxdWVzdGVkU2l6ZSA+IG1heEhlYXBTaXplKSB7XHJcbiAgICAgICAgcmV0dXJuIGZhbHNlO1xyXG4gICAgICB9XHJcbiAgXHJcbiAgICAgIGxldCBhbGlnblVwID0gKHgsIG11bHRpcGxlKSA9PiB4ICsgKG11bHRpcGxlIC0geCAlIG11bHRpcGxlKSAlIG11bHRpcGxlO1xyXG4gIFxyXG4gICAgICAvLyBMb29wIHRocm91Z2ggcG90ZW50aWFsIGhlYXAgc2l6ZSBpbmNyZWFzZXMuIElmIHdlIGF0dGVtcHQgYSB0b28gZWFnZXJcclxuICAgICAgLy8gcmVzZXJ2YXRpb24gdGhhdCBmYWlscywgY3V0IGRvd24gb24gdGhlIGF0dGVtcHRlZCBzaXplIGFuZCByZXNlcnZlIGFcclxuICAgICAgLy8gc21hbGxlciBidW1wIGluc3RlYWQuIChtYXggMyB0aW1lcywgY2hvc2VuIHNvbWV3aGF0IGFyYml0cmFyaWx5KVxyXG4gICAgICBmb3IgKHZhciBjdXREb3duID0gMTsgY3V0RG93biA8PSA0OyBjdXREb3duICo9IDIpIHtcclxuICAgICAgICB2YXIgb3Zlckdyb3duSGVhcFNpemUgPSBvbGRTaXplICogKDEgKyAwLjIgLyBjdXREb3duKTsgLy8gZW5zdXJlIGdlb21ldHJpYyBncm93dGhcclxuICAgICAgICAvLyBidXQgbGltaXQgb3ZlcnJlc2VydmluZyAoZGVmYXVsdCB0byBjYXBwaW5nIGF0ICs5Nk1CIG92ZXJncm93dGggYXQgbW9zdClcclxuICAgICAgICBvdmVyR3Jvd25IZWFwU2l6ZSA9IE1hdGgubWluKG92ZXJHcm93bkhlYXBTaXplLCByZXF1ZXN0ZWRTaXplICsgMTAwNjYzMjk2ICk7XHJcbiAgXHJcbiAgICAgICAgdmFyIG5ld1NpemUgPSBNYXRoLm1pbihtYXhIZWFwU2l6ZSwgYWxpZ25VcChNYXRoLm1heChyZXF1ZXN0ZWRTaXplLCBvdmVyR3Jvd25IZWFwU2l6ZSksIDY1NTM2KSk7XHJcbiAgXHJcbiAgICAgICAgdmFyIHJlcGxhY2VtZW50ID0gZW1zY3JpcHRlbl9yZWFsbG9jX2J1ZmZlcihuZXdTaXplKTtcclxuICAgICAgICBpZiAocmVwbGFjZW1lbnQpIHtcclxuICBcclxuICAgICAgICAgIHJldHVybiB0cnVlO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICByZXR1cm4gZmFsc2U7XHJcbiAgICB9XHJcblxyXG4gIGZ1bmN0aW9uIGdldENGdW5jKGlkZW50KSB7XHJcbiAgICAgIHZhciBmdW5jID0gTW9kdWxlWydfJyArIGlkZW50XTsgLy8gY2xvc3VyZSBleHBvcnRlZCBmdW5jdGlvblxyXG4gICAgICByZXR1cm4gZnVuYztcclxuICAgIH1cclxuICBcclxuICBcclxuICBmdW5jdGlvbiB3cml0ZUFycmF5VG9NZW1vcnkoYXJyYXksIGJ1ZmZlcikge1xyXG4gICAgICBIRUFQOC5zZXQoYXJyYXksIGJ1ZmZlcik7XHJcbiAgICB9XHJcbiAgXHJcbiAgZnVuY3Rpb24gbGVuZ3RoQnl0ZXNVVEY4KHN0cikge1xyXG4gICAgICB2YXIgbGVuID0gMDtcclxuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBzdHIubGVuZ3RoOyArK2kpIHtcclxuICAgICAgICAvLyBHb3RjaGE6IGNoYXJDb2RlQXQgcmV0dXJucyBhIDE2LWJpdCB3b3JkIHRoYXQgaXMgYSBVVEYtMTYgZW5jb2RlZCBjb2RlXHJcbiAgICAgICAgLy8gdW5pdCwgbm90IGEgVW5pY29kZSBjb2RlIHBvaW50IG9mIHRoZSBjaGFyYWN0ZXIhIFNvIGRlY29kZVxyXG4gICAgICAgIC8vIFVURjE2LT5VVEYzMi0+VVRGOC5cclxuICAgICAgICAvLyBTZWUgaHR0cDovL3VuaWNvZGUub3JnL2ZhcS91dGZfYm9tLmh0bWwjdXRmMTYtM1xyXG4gICAgICAgIHZhciBjID0gc3RyLmNoYXJDb2RlQXQoaSk7IC8vIHBvc3NpYmx5IGEgbGVhZCBzdXJyb2dhdGVcclxuICAgICAgICBpZiAoYyA8PSAweDdGKSB7XHJcbiAgICAgICAgICBsZW4rKztcclxuICAgICAgICB9IGVsc2UgaWYgKGMgPD0gMHg3RkYpIHtcclxuICAgICAgICAgIGxlbiArPSAyO1xyXG4gICAgICAgIH0gZWxzZSBpZiAoYyA+PSAweEQ4MDAgJiYgYyA8PSAweERGRkYpIHtcclxuICAgICAgICAgIGxlbiArPSA0OyArK2k7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIGxlbiArPSAzO1xyXG4gICAgICAgIH1cclxuICAgICAgfVxyXG4gICAgICByZXR1cm4gbGVuO1xyXG4gICAgfVxyXG4gIFxyXG4gIGZ1bmN0aW9uIHN0cmluZ1RvVVRGOEFycmF5KHN0ciwgaGVhcCwgb3V0SWR4LCBtYXhCeXRlc1RvV3JpdGUpIHtcclxuICAgICAgLy8gUGFyYW1ldGVyIG1heEJ5dGVzVG9Xcml0ZSBpcyBub3Qgb3B0aW9uYWwuIE5lZ2F0aXZlIHZhbHVlcywgMCwgbnVsbCxcclxuICAgICAgLy8gdW5kZWZpbmVkIGFuZCBmYWxzZSBlYWNoIGRvbid0IHdyaXRlIG91dCBhbnkgYnl0ZXMuXHJcbiAgICAgIGlmICghKG1heEJ5dGVzVG9Xcml0ZSA+IDApKVxyXG4gICAgICAgIHJldHVybiAwO1xyXG4gIFxyXG4gICAgICB2YXIgc3RhcnRJZHggPSBvdXRJZHg7XHJcbiAgICAgIHZhciBlbmRJZHggPSBvdXRJZHggKyBtYXhCeXRlc1RvV3JpdGUgLSAxOyAvLyAtMSBmb3Igc3RyaW5nIG51bGwgdGVybWluYXRvci5cclxuICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBzdHIubGVuZ3RoOyArK2kpIHtcclxuICAgICAgICAvLyBHb3RjaGE6IGNoYXJDb2RlQXQgcmV0dXJucyBhIDE2LWJpdCB3b3JkIHRoYXQgaXMgYSBVVEYtMTYgZW5jb2RlZCBjb2RlXHJcbiAgICAgICAgLy8gdW5pdCwgbm90IGEgVW5pY29kZSBjb2RlIHBvaW50IG9mIHRoZSBjaGFyYWN0ZXIhIFNvIGRlY29kZVxyXG4gICAgICAgIC8vIFVURjE2LT5VVEYzMi0+VVRGOC5cclxuICAgICAgICAvLyBTZWUgaHR0cDovL3VuaWNvZGUub3JnL2ZhcS91dGZfYm9tLmh0bWwjdXRmMTYtM1xyXG4gICAgICAgIC8vIEZvciBVVEY4IGJ5dGUgc3RydWN0dXJlLCBzZWUgaHR0cDovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9VVEYtOCNEZXNjcmlwdGlvblxyXG4gICAgICAgIC8vIGFuZCBodHRwczovL3d3dy5pZXRmLm9yZy9yZmMvcmZjMjI3OS50eHRcclxuICAgICAgICAvLyBhbmQgaHR0cHM6Ly90b29scy5pZXRmLm9yZy9odG1sL3JmYzM2MjlcclxuICAgICAgICB2YXIgdSA9IHN0ci5jaGFyQ29kZUF0KGkpOyAvLyBwb3NzaWJseSBhIGxlYWQgc3Vycm9nYXRlXHJcbiAgICAgICAgaWYgKHUgPj0gMHhEODAwICYmIHUgPD0gMHhERkZGKSB7XHJcbiAgICAgICAgICB2YXIgdTEgPSBzdHIuY2hhckNvZGVBdCgrK2kpO1xyXG4gICAgICAgICAgdSA9IDB4MTAwMDAgKyAoKHUgJiAweDNGRikgPDwgMTApIHwgKHUxICYgMHgzRkYpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAodSA8PSAweDdGKSB7XHJcbiAgICAgICAgICBpZiAob3V0SWR4ID49IGVuZElkeCkgYnJlYWs7XHJcbiAgICAgICAgICBoZWFwW291dElkeCsrXSA9IHU7XHJcbiAgICAgICAgfSBlbHNlIGlmICh1IDw9IDB4N0ZGKSB7XHJcbiAgICAgICAgICBpZiAob3V0SWR4ICsgMSA+PSBlbmRJZHgpIGJyZWFrO1xyXG4gICAgICAgICAgaGVhcFtvdXRJZHgrK10gPSAweEMwIHwgKHUgPj4gNik7XHJcbiAgICAgICAgICBoZWFwW291dElkeCsrXSA9IDB4ODAgfCAodSAmIDYzKTtcclxuICAgICAgICB9IGVsc2UgaWYgKHUgPD0gMHhGRkZGKSB7XHJcbiAgICAgICAgICBpZiAob3V0SWR4ICsgMiA+PSBlbmRJZHgpIGJyZWFrO1xyXG4gICAgICAgICAgaGVhcFtvdXRJZHgrK10gPSAweEUwIHwgKHUgPj4gMTIpO1xyXG4gICAgICAgICAgaGVhcFtvdXRJZHgrK10gPSAweDgwIHwgKCh1ID4+IDYpICYgNjMpO1xyXG4gICAgICAgICAgaGVhcFtvdXRJZHgrK10gPSAweDgwIHwgKHUgJiA2Myk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIGlmIChvdXRJZHggKyAzID49IGVuZElkeCkgYnJlYWs7XHJcbiAgICAgICAgICBoZWFwW291dElkeCsrXSA9IDB4RjAgfCAodSA+PiAxOCk7XHJcbiAgICAgICAgICBoZWFwW291dElkeCsrXSA9IDB4ODAgfCAoKHUgPj4gMTIpICYgNjMpO1xyXG4gICAgICAgICAgaGVhcFtvdXRJZHgrK10gPSAweDgwIHwgKCh1ID4+IDYpICYgNjMpO1xyXG4gICAgICAgICAgaGVhcFtvdXRJZHgrK10gPSAweDgwIHwgKHUgJiA2Myk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIC8vIE51bGwtdGVybWluYXRlIHRoZSBwb2ludGVyIHRvIHRoZSBidWZmZXIuXHJcbiAgICAgIGhlYXBbb3V0SWR4XSA9IDA7XHJcbiAgICAgIHJldHVybiBvdXRJZHggLSBzdGFydElkeDtcclxuICAgIH1cclxuICBmdW5jdGlvbiBzdHJpbmdUb1VURjgoc3RyLCBvdXRQdHIsIG1heEJ5dGVzVG9Xcml0ZSkge1xyXG4gICAgICByZXR1cm4gc3RyaW5nVG9VVEY4QXJyYXkoc3RyLCBIRUFQVTgsb3V0UHRyLCBtYXhCeXRlc1RvV3JpdGUpO1xyXG4gICAgfVxyXG4gIGZ1bmN0aW9uIHN0cmluZ1RvVVRGOE9uU3RhY2soc3RyKSB7XHJcbiAgICAgIHZhciBzaXplID0gbGVuZ3RoQnl0ZXNVVEY4KHN0cikgKyAxO1xyXG4gICAgICB2YXIgcmV0ID0gc3RhY2tBbGxvYyhzaXplKTtcclxuICAgICAgc3RyaW5nVG9VVEY4KHN0ciwgcmV0LCBzaXplKTtcclxuICAgICAgcmV0dXJuIHJldDtcclxuICAgIH1cclxuICBcclxuICB2YXIgVVRGOERlY29kZXIgPSB0eXBlb2YgVGV4dERlY29kZXIgIT0gJ3VuZGVmaW5lZCcgPyBuZXcgVGV4dERlY29kZXIoJ3V0ZjgnKSA6IHVuZGVmaW5lZDtcclxuICBcclxuICAgIC8qKlxyXG4gICAgICogR2l2ZW4gYSBwb2ludGVyICdpZHgnIHRvIGEgbnVsbC10ZXJtaW5hdGVkIFVURjgtZW5jb2RlZCBzdHJpbmcgaW4gdGhlIGdpdmVuXHJcbiAgICAgKiBhcnJheSB0aGF0IGNvbnRhaW5zIHVpbnQ4IHZhbHVlcywgcmV0dXJucyBhIGNvcHkgb2YgdGhhdCBzdHJpbmcgYXMgYVxyXG4gICAgICogSmF2YXNjcmlwdCBTdHJpbmcgb2JqZWN0LlxyXG4gICAgICogaGVhcE9yQXJyYXkgaXMgZWl0aGVyIGEgcmVndWxhciBhcnJheSwgb3IgYSBKYXZhU2NyaXB0IHR5cGVkIGFycmF5IHZpZXcuXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gaWR4XHJcbiAgICAgKiBAcGFyYW0ge251bWJlcj19IG1heEJ5dGVzVG9SZWFkXHJcbiAgICAgKiBAcmV0dXJuIHtzdHJpbmd9XHJcbiAgICAgKi9cclxuICBmdW5jdGlvbiBVVEY4QXJyYXlUb1N0cmluZyhoZWFwT3JBcnJheSwgaWR4LCBtYXhCeXRlc1RvUmVhZCkge1xyXG4gICAgICB2YXIgZW5kSWR4ID0gaWR4ICsgbWF4Qnl0ZXNUb1JlYWQ7XHJcbiAgICAgIHZhciBlbmRQdHIgPSBpZHg7XHJcbiAgICAgIC8vIFRleHREZWNvZGVyIG5lZWRzIHRvIGtub3cgdGhlIGJ5dGUgbGVuZ3RoIGluIGFkdmFuY2UsIGl0IGRvZXNuJ3Qgc3RvcCBvblxyXG4gICAgICAvLyBudWxsIHRlcm1pbmF0b3IgYnkgaXRzZWxmLiAgQWxzbywgdXNlIHRoZSBsZW5ndGggaW5mbyB0byBhdm9pZCBydW5uaW5nIHRpbnlcclxuICAgICAgLy8gc3RyaW5ncyB0aHJvdWdoIFRleHREZWNvZGVyLCBzaW5jZSAuc3ViYXJyYXkoKSBhbGxvY2F0ZXMgZ2FyYmFnZS5cclxuICAgICAgLy8gKEFzIGEgdGlueSBjb2RlIHNhdmUgdHJpY2ssIGNvbXBhcmUgZW5kUHRyIGFnYWluc3QgZW5kSWR4IHVzaW5nIGEgbmVnYXRpb24sXHJcbiAgICAgIC8vIHNvIHRoYXQgdW5kZWZpbmVkIG1lYW5zIEluZmluaXR5KVxyXG4gICAgICB3aGlsZSAoaGVhcE9yQXJyYXlbZW5kUHRyXSAmJiAhKGVuZFB0ciA+PSBlbmRJZHgpKSArK2VuZFB0cjtcclxuICBcclxuICAgICAgaWYgKGVuZFB0ciAtIGlkeCA+IDE2ICYmIGhlYXBPckFycmF5LmJ1ZmZlciAmJiBVVEY4RGVjb2Rlcikge1xyXG4gICAgICAgIHJldHVybiBVVEY4RGVjb2Rlci5kZWNvZGUoaGVhcE9yQXJyYXkuc3ViYXJyYXkoaWR4LCBlbmRQdHIpKTtcclxuICAgICAgfVxyXG4gICAgICB2YXIgc3RyID0gJyc7XHJcbiAgICAgIC8vIElmIGJ1aWxkaW5nIHdpdGggVGV4dERlY29kZXIsIHdlIGhhdmUgYWxyZWFkeSBjb21wdXRlZCB0aGUgc3RyaW5nIGxlbmd0aFxyXG4gICAgICAvLyBhYm92ZSwgc28gdGVzdCBsb29wIGVuZCBjb25kaXRpb24gYWdhaW5zdCB0aGF0XHJcbiAgICAgIHdoaWxlIChpZHggPCBlbmRQdHIpIHtcclxuICAgICAgICAvLyBGb3IgVVRGOCBieXRlIHN0cnVjdHVyZSwgc2VlOlxyXG4gICAgICAgIC8vIGh0dHA6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvVVRGLTgjRGVzY3JpcHRpb25cclxuICAgICAgICAvLyBodHRwczovL3d3dy5pZXRmLm9yZy9yZmMvcmZjMjI3OS50eHRcclxuICAgICAgICAvLyBodHRwczovL3Rvb2xzLmlldGYub3JnL2h0bWwvcmZjMzYyOVxyXG4gICAgICAgIHZhciB1MCA9IGhlYXBPckFycmF5W2lkeCsrXTtcclxuICAgICAgICBpZiAoISh1MCAmIDB4ODApKSB7IHN0ciArPSBTdHJpbmcuZnJvbUNoYXJDb2RlKHUwKTsgY29udGludWU7IH1cclxuICAgICAgICB2YXIgdTEgPSBoZWFwT3JBcnJheVtpZHgrK10gJiA2MztcclxuICAgICAgICBpZiAoKHUwICYgMHhFMCkgPT0gMHhDMCkgeyBzdHIgKz0gU3RyaW5nLmZyb21DaGFyQ29kZSgoKHUwICYgMzEpIDw8IDYpIHwgdTEpOyBjb250aW51ZTsgfVxyXG4gICAgICAgIHZhciB1MiA9IGhlYXBPckFycmF5W2lkeCsrXSAmIDYzO1xyXG4gICAgICAgIGlmICgodTAgJiAweEYwKSA9PSAweEUwKSB7XHJcbiAgICAgICAgICB1MCA9ICgodTAgJiAxNSkgPDwgMTIpIHwgKHUxIDw8IDYpIHwgdTI7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHUwID0gKCh1MCAmIDcpIDw8IDE4KSB8ICh1MSA8PCAxMikgfCAodTIgPDwgNikgfCAoaGVhcE9yQXJyYXlbaWR4KytdICYgNjMpO1xyXG4gICAgICAgIH1cclxuICBcclxuICAgICAgICBpZiAodTAgPCAweDEwMDAwKSB7XHJcbiAgICAgICAgICBzdHIgKz0gU3RyaW5nLmZyb21DaGFyQ29kZSh1MCk7XHJcbiAgICAgICAgfSBlbHNlIHtcclxuICAgICAgICAgIHZhciBjaCA9IHUwIC0gMHgxMDAwMDtcclxuICAgICAgICAgIHN0ciArPSBTdHJpbmcuZnJvbUNoYXJDb2RlKDB4RDgwMCB8IChjaCA+PiAxMCksIDB4REMwMCB8IChjaCAmIDB4M0ZGKSk7XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIHJldHVybiBzdHI7XHJcbiAgICB9XHJcbiAgXHJcbiAgXHJcbiAgICAvKipcclxuICAgICAqIEdpdmVuIGEgcG9pbnRlciAncHRyJyB0byBhIG51bGwtdGVybWluYXRlZCBVVEY4LWVuY29kZWQgc3RyaW5nIGluIHRoZVxyXG4gICAgICogZW1zY3JpcHRlbiBIRUFQLCByZXR1cm5zIGEgY29weSBvZiB0aGF0IHN0cmluZyBhcyBhIEphdmFzY3JpcHQgU3RyaW5nIG9iamVjdC5cclxuICAgICAqXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcn0gcHRyXHJcbiAgICAgKiBAcGFyYW0ge251bWJlcj19IG1heEJ5dGVzVG9SZWFkIC0gQW4gb3B0aW9uYWwgbGVuZ3RoIHRoYXQgc3BlY2lmaWVzIHRoZVxyXG4gICAgICogICBtYXhpbXVtIG51bWJlciBvZiBieXRlcyB0byByZWFkLiBZb3UgY2FuIG9taXQgdGhpcyBwYXJhbWV0ZXIgdG8gc2NhbiB0aGVcclxuICAgICAqICAgc3RyaW5nIHVudGlsIHRoZSBmaXJzdCBcdTAwMDAgYnl0ZS4gSWYgbWF4Qnl0ZXNUb1JlYWQgaXMgcGFzc2VkLCBhbmQgdGhlIHN0cmluZ1xyXG4gICAgICogICBhdCBbcHRyLCBwdHIrbWF4Qnl0ZXNUb1JlYWRyWyBjb250YWlucyBhIG51bGwgYnl0ZSBpbiB0aGUgbWlkZGxlLCB0aGVuIHRoZVxyXG4gICAgICogICBzdHJpbmcgd2lsbCBjdXQgc2hvcnQgYXQgdGhhdCBieXRlIGluZGV4IChpLmUuIG1heEJ5dGVzVG9SZWFkIHdpbGwgbm90XHJcbiAgICAgKiAgIHByb2R1Y2UgYSBzdHJpbmcgb2YgZXhhY3QgbGVuZ3RoIFtwdHIsIHB0cittYXhCeXRlc1RvUmVhZFspIE4uQi4gbWl4aW5nXHJcbiAgICAgKiAgIGZyZXF1ZW50IHVzZXMgb2YgVVRGOFRvU3RyaW5nKCkgd2l0aCBhbmQgd2l0aG91dCBtYXhCeXRlc1RvUmVhZCBtYXkgdGhyb3dcclxuICAgICAqICAgSlMgSklUIG9wdGltaXphdGlvbnMgb2ZmLCBzbyBpdCBpcyB3b3J0aCB0byBjb25zaWRlciBjb25zaXN0ZW50bHkgdXNpbmcgb25lXHJcbiAgICAgKiBAcmV0dXJuIHtzdHJpbmd9XHJcbiAgICAgKi9cclxuICBmdW5jdGlvbiBVVEY4VG9TdHJpbmcocHRyLCBtYXhCeXRlc1RvUmVhZCkge1xyXG4gICAgICByZXR1cm4gcHRyID8gVVRGOEFycmF5VG9TdHJpbmcoSEVBUFU4LCBwdHIsIG1heEJ5dGVzVG9SZWFkKSA6ICcnO1xyXG4gICAgfVxyXG4gIFxyXG4gICAgLyoqXHJcbiAgICAgKiBAcGFyYW0ge3N0cmluZ3xudWxsPX0gcmV0dXJuVHlwZVxyXG4gICAgICogQHBhcmFtIHtBcnJheT19IGFyZ1R5cGVzXHJcbiAgICAgKiBAcGFyYW0ge0FyZ3VtZW50c3xBcnJheT19IGFyZ3NcclxuICAgICAqIEBwYXJhbSB7T2JqZWN0PX0gb3B0c1xyXG4gICAgICovXHJcbiAgZnVuY3Rpb24gY2NhbGwoaWRlbnQsIHJldHVyblR5cGUsIGFyZ1R5cGVzLCBhcmdzLCBvcHRzKSB7XHJcbiAgICAgIC8vIEZvciBmYXN0IGxvb2t1cCBvZiBjb252ZXJzaW9uIGZ1bmN0aW9uc1xyXG4gICAgICB2YXIgdG9DID0ge1xyXG4gICAgICAgICdzdHJpbmcnOiAoc3RyKSA9PiB7XHJcbiAgICAgICAgICB2YXIgcmV0ID0gMDtcclxuICAgICAgICAgIGlmIChzdHIgIT09IG51bGwgJiYgc3RyICE9PSB1bmRlZmluZWQgJiYgc3RyICE9PSAwKSB7IC8vIG51bGwgc3RyaW5nXHJcbiAgICAgICAgICAgIC8vIGF0IG1vc3QgNCBieXRlcyBwZXIgVVRGLTggY29kZSBwb2ludCwgKzEgZm9yIHRoZSB0cmFpbGluZyAnXFwwJ1xyXG4gICAgICAgICAgICByZXQgPSBzdHJpbmdUb1VURjhPblN0YWNrKHN0cik7XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgICByZXR1cm4gcmV0O1xyXG4gICAgICAgIH0sXHJcbiAgICAgICAgJ2FycmF5JzogKGFycikgPT4ge1xyXG4gICAgICAgICAgdmFyIHJldCA9IHN0YWNrQWxsb2MoYXJyLmxlbmd0aCk7XHJcbiAgICAgICAgICB3cml0ZUFycmF5VG9NZW1vcnkoYXJyLCByZXQpO1xyXG4gICAgICAgICAgcmV0dXJuIHJldDtcclxuICAgICAgICB9XHJcbiAgICAgIH07XHJcbiAgXHJcbiAgICAgIGZ1bmN0aW9uIGNvbnZlcnRSZXR1cm5WYWx1ZShyZXQpIHtcclxuICAgICAgICBpZiAocmV0dXJuVHlwZSA9PT0gJ3N0cmluZycpIHtcclxuICAgICAgICAgIFxyXG4gICAgICAgICAgcmV0dXJuIFVURjhUb1N0cmluZyhyZXQpO1xyXG4gICAgICAgIH1cclxuICAgICAgICBpZiAocmV0dXJuVHlwZSA9PT0gJ2Jvb2xlYW4nKSByZXR1cm4gQm9vbGVhbihyZXQpO1xyXG4gICAgICAgIHJldHVybiByZXQ7XHJcbiAgICAgIH1cclxuICBcclxuICAgICAgdmFyIGZ1bmMgPSBnZXRDRnVuYyhpZGVudCk7XHJcbiAgICAgIHZhciBjQXJncyA9IFtdO1xyXG4gICAgICB2YXIgc3RhY2sgPSAwO1xyXG4gICAgICBpZiAoYXJncykge1xyXG4gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYXJncy5sZW5ndGg7IGkrKykge1xyXG4gICAgICAgICAgdmFyIGNvbnZlcnRlciA9IHRvQ1thcmdUeXBlc1tpXV07XHJcbiAgICAgICAgICBpZiAoY29udmVydGVyKSB7XHJcbiAgICAgICAgICAgIGlmIChzdGFjayA9PT0gMCkgc3RhY2sgPSBzdGFja1NhdmUoKTtcclxuICAgICAgICAgICAgY0FyZ3NbaV0gPSBjb252ZXJ0ZXIoYXJnc1tpXSk7XHJcbiAgICAgICAgICB9IGVsc2Uge1xyXG4gICAgICAgICAgICBjQXJnc1tpXSA9IGFyZ3NbaV07XHJcbiAgICAgICAgICB9XHJcbiAgICAgICAgfVxyXG4gICAgICB9XHJcbiAgICAgIHZhciByZXQgPSBmdW5jLmFwcGx5KG51bGwsIGNBcmdzKTtcclxuICAgICAgZnVuY3Rpb24gb25Eb25lKHJldCkge1xyXG4gICAgICAgIGlmIChzdGFjayAhPT0gMCkgc3RhY2tSZXN0b3JlKHN0YWNrKTtcclxuICAgICAgICByZXR1cm4gY29udmVydFJldHVyblZhbHVlKHJldCk7XHJcbiAgICAgIH1cclxuICBcclxuICAgICAgcmV0ID0gb25Eb25lKHJldCk7XHJcbiAgICAgIHJldHVybiByZXQ7XHJcbiAgICB9XHJcbiAgXHJcbiAgICAvKipcclxuICAgICAqIEBwYXJhbSB7c3RyaW5nPX0gcmV0dXJuVHlwZVxyXG4gICAgICogQHBhcmFtIHtBcnJheT19IGFyZ1R5cGVzXHJcbiAgICAgKiBAcGFyYW0ge09iamVjdD19IG9wdHNcclxuICAgICAqL1xyXG4gIGZ1bmN0aW9uIGN3cmFwKGlkZW50LCByZXR1cm5UeXBlLCBhcmdUeXBlcywgb3B0cykge1xyXG4gICAgICAvLyBXaGVuIHRoZSBmdW5jdGlvbiB0YWtlcyBudW1iZXJzIGFuZCByZXR1cm5zIGEgbnVtYmVyLCB3ZSBjYW4ganVzdCByZXR1cm5cclxuICAgICAgLy8gdGhlIG9yaWdpbmFsIGZ1bmN0aW9uXHJcbiAgICAgIHZhciBudW1lcmljQXJncyA9ICFhcmdUeXBlcyB8fCBhcmdUeXBlcy5ldmVyeSgodHlwZSkgPT4gdHlwZSA9PT0gJ251bWJlcicgfHwgdHlwZSA9PT0gJ2Jvb2xlYW4nKTtcclxuICAgICAgdmFyIG51bWVyaWNSZXQgPSByZXR1cm5UeXBlICE9PSAnc3RyaW5nJztcclxuICAgICAgaWYgKG51bWVyaWNSZXQgJiYgbnVtZXJpY0FyZ3MgJiYgIW9wdHMpIHtcclxuICAgICAgICByZXR1cm4gZ2V0Q0Z1bmMoaWRlbnQpO1xyXG4gICAgICB9XHJcbiAgICAgIHJldHVybiBmdW5jdGlvbigpIHtcclxuICAgICAgICByZXR1cm4gY2NhbGwoaWRlbnQsIHJldHVyblR5cGUsIGFyZ1R5cGVzLCBhcmd1bWVudHMsIG9wdHMpO1xyXG4gICAgICB9XHJcbiAgICB9XHJcblxyXG52YXIgd2FzbUltcG9ydHMgPSB7XHJcbiAgXCJfX2N4YV90aHJvd1wiOiBfX19jeGFfdGhyb3csXHJcbiAgXCJhYm9ydFwiOiBfYWJvcnQsXHJcbiAgXCJlbXNjcmlwdGVuX21lbWNweV9iaWdcIjogX2Vtc2NyaXB0ZW5fbWVtY3B5X2JpZyxcclxuICBcImVtc2NyaXB0ZW5fcmVzaXplX2hlYXBcIjogX2Vtc2NyaXB0ZW5fcmVzaXplX2hlYXBcclxufTtcclxudmFyIGFzbSA9IGNyZWF0ZVdhc20oKTtcclxuLyoqIEB0eXBlIHtmdW5jdGlvbiguLi4qKTo/fSAqL1xyXG52YXIgX19fd2FzbV9jYWxsX2N0b3JzID0gZnVuY3Rpb24oKSB7XHJcbiAgcmV0dXJuIChfX193YXNtX2NhbGxfY3RvcnMgPSBNb2R1bGVbXCJhc21cIl1bXCJfX3dhc21fY2FsbF9jdG9yc1wiXSkuYXBwbHkobnVsbCwgYXJndW1lbnRzKTtcclxufTtcclxuXHJcbi8qKiBAdHlwZSB7ZnVuY3Rpb24oLi4uKik6P30gKi9cclxudmFyIF9kYnNjYW4gPSBNb2R1bGVbXCJfZGJzY2FuXCJdID0gZnVuY3Rpb24oKSB7XHJcbiAgcmV0dXJuIChfZGJzY2FuID0gTW9kdWxlW1wiX2Ric2NhblwiXSA9IE1vZHVsZVtcImFzbVwiXVtcImRic2NhblwiXSkuYXBwbHkobnVsbCwgYXJndW1lbnRzKTtcclxufTtcclxuXHJcbi8qKiBAdHlwZSB7ZnVuY3Rpb24oLi4uKik6P30gKi9cclxudmFyIF9fX2Vycm5vX2xvY2F0aW9uID0gZnVuY3Rpb24oKSB7XHJcbiAgcmV0dXJuIChfX19lcnJub19sb2NhdGlvbiA9IE1vZHVsZVtcImFzbVwiXVtcIl9fZXJybm9fbG9jYXRpb25cIl0pLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7XHJcbn07XHJcblxyXG4vKiogQHR5cGUge2Z1bmN0aW9uKC4uLiopOj99ICovXHJcbnZhciBfbWFsbG9jID0gTW9kdWxlW1wiX21hbGxvY1wiXSA9IGZ1bmN0aW9uKCkge1xyXG4gIHJldHVybiAoX21hbGxvYyA9IE1vZHVsZVtcIl9tYWxsb2NcIl0gPSBNb2R1bGVbXCJhc21cIl1bXCJtYWxsb2NcIl0pLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7XHJcbn07XHJcblxyXG4vKiogQHR5cGUge2Z1bmN0aW9uKC4uLiopOj99ICovXHJcbnZhciBfZnJlZSA9IE1vZHVsZVtcIl9mcmVlXCJdID0gZnVuY3Rpb24oKSB7XHJcbiAgcmV0dXJuIChfZnJlZSA9IE1vZHVsZVtcIl9mcmVlXCJdID0gTW9kdWxlW1wiYXNtXCJdW1wiZnJlZVwiXSkuYXBwbHkobnVsbCwgYXJndW1lbnRzKTtcclxufTtcclxuXHJcbi8qKiBAdHlwZSB7ZnVuY3Rpb24oLi4uKik6P30gKi9cclxudmFyIHN0YWNrU2F2ZSA9IGZ1bmN0aW9uKCkge1xyXG4gIHJldHVybiAoc3RhY2tTYXZlID0gTW9kdWxlW1wiYXNtXCJdW1wic3RhY2tTYXZlXCJdKS5hcHBseShudWxsLCBhcmd1bWVudHMpO1xyXG59O1xyXG5cclxuLyoqIEB0eXBlIHtmdW5jdGlvbiguLi4qKTo/fSAqL1xyXG52YXIgc3RhY2tSZXN0b3JlID0gZnVuY3Rpb24oKSB7XHJcbiAgcmV0dXJuIChzdGFja1Jlc3RvcmUgPSBNb2R1bGVbXCJhc21cIl1bXCJzdGFja1Jlc3RvcmVcIl0pLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7XHJcbn07XHJcblxyXG4vKiogQHR5cGUge2Z1bmN0aW9uKC4uLiopOj99ICovXHJcbnZhciBzdGFja0FsbG9jID0gZnVuY3Rpb24oKSB7XHJcbiAgcmV0dXJuIChzdGFja0FsbG9jID0gTW9kdWxlW1wiYXNtXCJdW1wic3RhY2tBbGxvY1wiXSkuYXBwbHkobnVsbCwgYXJndW1lbnRzKTtcclxufTtcclxuXHJcbi8qKiBAdHlwZSB7ZnVuY3Rpb24oLi4uKik6P30gKi9cclxudmFyIF9fX2N4YV9pc19wb2ludGVyX3R5cGUgPSBmdW5jdGlvbigpIHtcclxuICByZXR1cm4gKF9fX2N4YV9pc19wb2ludGVyX3R5cGUgPSBNb2R1bGVbXCJhc21cIl1bXCJfX2N4YV9pc19wb2ludGVyX3R5cGVcIl0pLmFwcGx5KG51bGwsIGFyZ3VtZW50cyk7XHJcbn07XHJcblxyXG5cclxuXHJcbi8vIGluY2x1ZGU6IHBvc3RhbWJsZS5qc1xyXG4vLyA9PT0gQXV0by1nZW5lcmF0ZWQgcG9zdGFtYmxlIHNldHVwIGVudHJ5IHN0dWZmID09PVxyXG5cclxuTW9kdWxlW1wiY2NhbGxcIl0gPSBjY2FsbDtcclxuTW9kdWxlW1wiY3dyYXBcIl0gPSBjd3JhcDtcclxuXHJcblxyXG52YXIgY2FsbGVkUnVuO1xyXG5cclxuZGVwZW5kZW5jaWVzRnVsZmlsbGVkID0gZnVuY3Rpb24gcnVuQ2FsbGVyKCkge1xyXG4gIC8vIElmIHJ1biBoYXMgbmV2ZXIgYmVlbiBjYWxsZWQsIGFuZCB3ZSBzaG91bGQgY2FsbCBydW4gKElOVk9LRV9SVU4gaXMgdHJ1ZSwgYW5kIE1vZHVsZS5ub0luaXRpYWxSdW4gaXMgbm90IGZhbHNlKVxyXG4gIGlmICghY2FsbGVkUnVuKSBydW4oKTtcclxuICBpZiAoIWNhbGxlZFJ1bikgZGVwZW5kZW5jaWVzRnVsZmlsbGVkID0gcnVuQ2FsbGVyOyAvLyB0cnkgdGhpcyBhZ2FpbiBsYXRlciwgYWZ0ZXIgbmV3IGRlcHMgYXJlIGZ1bGZpbGxlZFxyXG59O1xyXG5cclxuZnVuY3Rpb24gcnVuKCkge1xyXG5cclxuICBpZiAocnVuRGVwZW5kZW5jaWVzID4gMCkge1xyXG4gICAgcmV0dXJuO1xyXG4gIH1cclxuXHJcbiAgcHJlUnVuKCk7XHJcblxyXG4gIC8vIGEgcHJlUnVuIGFkZGVkIGEgZGVwZW5kZW5jeSwgcnVuIHdpbGwgYmUgY2FsbGVkIGxhdGVyXHJcbiAgaWYgKHJ1bkRlcGVuZGVuY2llcyA+IDApIHtcclxuICAgIHJldHVybjtcclxuICB9XHJcblxyXG4gIGZ1bmN0aW9uIGRvUnVuKCkge1xyXG4gICAgLy8gcnVuIG1heSBoYXZlIGp1c3QgYmVlbiBjYWxsZWQgdGhyb3VnaCBkZXBlbmRlbmNpZXMgYmVpbmcgZnVsZmlsbGVkIGp1c3QgaW4gdGhpcyB2ZXJ5IGZyYW1lLFxyXG4gICAgLy8gb3Igd2hpbGUgdGhlIGFzeW5jIHNldFN0YXR1cyB0aW1lIGJlbG93IHdhcyBoYXBwZW5pbmdcclxuICAgIGlmIChjYWxsZWRSdW4pIHJldHVybjtcclxuICAgIGNhbGxlZFJ1biA9IHRydWU7XHJcbiAgICBNb2R1bGVbJ2NhbGxlZFJ1biddID0gdHJ1ZTtcclxuXHJcbiAgICBpZiAoQUJPUlQpIHJldHVybjtcclxuXHJcbiAgICBpbml0UnVudGltZSgpO1xyXG5cclxuICAgIHJlYWR5UHJvbWlzZVJlc29sdmUoTW9kdWxlKTtcclxuICAgIGlmIChNb2R1bGVbJ29uUnVudGltZUluaXRpYWxpemVkJ10pIE1vZHVsZVsnb25SdW50aW1lSW5pdGlhbGl6ZWQnXSgpO1xyXG5cclxuICAgIHBvc3RSdW4oKTtcclxuICB9XHJcblxyXG4gIGlmIChNb2R1bGVbJ3NldFN0YXR1cyddKSB7XHJcbiAgICBNb2R1bGVbJ3NldFN0YXR1cyddKCdSdW5uaW5nLi4uJyk7XHJcbiAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkge1xyXG4gICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkge1xyXG4gICAgICAgIE1vZHVsZVsnc2V0U3RhdHVzJ10oJycpO1xyXG4gICAgICB9LCAxKTtcclxuICAgICAgZG9SdW4oKTtcclxuICAgIH0sIDEpO1xyXG4gIH0gZWxzZVxyXG4gIHtcclxuICAgIGRvUnVuKCk7XHJcbiAgfVxyXG59XHJcblxyXG5pZiAoTW9kdWxlWydwcmVJbml0J10pIHtcclxuICBpZiAodHlwZW9mIE1vZHVsZVsncHJlSW5pdCddID09ICdmdW5jdGlvbicpIE1vZHVsZVsncHJlSW5pdCddID0gW01vZHVsZVsncHJlSW5pdCddXTtcclxuICB3aGlsZSAoTW9kdWxlWydwcmVJbml0J10ubGVuZ3RoID4gMCkge1xyXG4gICAgTW9kdWxlWydwcmVJbml0J10ucG9wKCkoKTtcclxuICB9XHJcbn1cclxuXHJcbnJ1bigpO1xyXG5cclxuXHJcbi8vIGVuZCBpbmNsdWRlOiBwb3N0YW1ibGUuanNcclxuXHJcblxyXG4gIHJldHVybiBleHBvcnRDcHBEYnNjYW5MaWIucmVhZHlcclxufVxyXG5cclxuKTtcclxufSkoKTtcclxuaWYgKHR5cGVvZiBleHBvcnRzID09PSAnb2JqZWN0JyAmJiB0eXBlb2YgbW9kdWxlID09PSAnb2JqZWN0JylcclxuICBtb2R1bGUuZXhwb3J0cyA9IGV4cG9ydENwcERic2NhbkxpYjtcclxuZWxzZSBpZiAodHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmVbJ2FtZCddKVxyXG4gIGRlZmluZShbXSwgZnVuY3Rpb24oKSB7IHJldHVybiBleHBvcnRDcHBEYnNjYW5MaWI7IH0pO1xyXG5lbHNlIGlmICh0eXBlb2YgZXhwb3J0cyA9PT0gJ29iamVjdCcpXHJcbiAgZXhwb3J0c1tcImV4cG9ydENwcERic2NhbkxpYlwiXSA9IGV4cG9ydENwcERic2NhbkxpYjtcclxuIiwiLy8gSW1wb3J0c1xuaW1wb3J0IF9fX0NTU19MT0FERVJfQVBJX1NPVVJDRU1BUF9JTVBPUlRfX18gZnJvbSBcIi4uLy4uLy4uL2Nzcy1sb2FkZXIvZGlzdC9ydW50aW1lL3NvdXJjZU1hcHMuanNcIjtcbmltcG9ydCBfX19DU1NfTE9BREVSX0FQSV9JTVBPUlRfX18gZnJvbSBcIi4uLy4uLy4uL2Nzcy1sb2FkZXIvZGlzdC9ydW50aW1lL2FwaS5qc1wiO1xudmFyIF9fX0NTU19MT0FERVJfRVhQT1JUX19fID0gX19fQ1NTX0xPQURFUl9BUElfSU1QT1JUX19fKF9fX0NTU19MT0FERVJfQVBJX1NPVVJDRU1BUF9JTVBPUlRfX18pO1xuLy8gTW9kdWxlXG5fX19DU1NfTE9BREVSX0VYUE9SVF9fXy5wdXNoKFttb2R1bGUuaWQsIFwiLnNjYXR0ZXJfcGxvdF9saW5rIHtcXG4gICAgcG9zaXRpb246IGFic29sdXRlIWltcG9ydGFudDtcXG4gICAgcmlnaHQ6IDEwcHg7XFxufVxcblxcbi5jbGlmZnNfZ3JpZCB7XFxuICAgIHRvcDogMTBweDtcXG59XFxuXFxuLnNob3dfb25seV9jbGlmZnMge1xcbiAgICB0b3A6IDMwcHg7XFxufVxcblxcbi5tbC1kaW0tcmVkdWN0aW9uLXNldHRpbmdzLWlucHV0IGkuZ3Jvay1pY29uLmdyb2stZm9udC1pY29uLXNldHRpbmdzIHtcXG4gICAgZm9udC1zaXplOiAxOHB4O1xcbiAgICBwb3NpdGlvbjogYWJzb2x1dGU7XFxuICAgIGhlaWdodDogMjhweDtcXG59XFxuXFxuLm1sLWRpbS1yZWR1Y3Rpb24tY29sdW1uLWVkaXRvci1pbnB1dC1yb290IGxhYmVsIHtcXG4gICAgZGlzcGxheTogbm9uZSAhaW1wb3J0YW50O1xcbn1cXG5cXG4ubWwtZGltLXJlZHVjdGlvbi1jb2x1bW4tZWRpdG9yLWlucHV0LXJvb3QgaW5wdXQsIC5tbC1kaW0tcmVkdWN0aW9uLWNvbHVtbi1lZGl0b3ItaW5wdXQtcm9vdCBzZWxlY3Qge1xcbiAgICBtYXJnaW4tbGVmdDogMjBweCAhaW1wb3J0YW50O1xcbn1cXG5cXG5oMy5tbC1kaW0tcmVkdWN0aW9uLWNvbHVtbi1lZGl0b3ItaW5wdXQtcm9vdCB7XFxuICAgIG1hcmdpbjogMCAhaW1wb3J0YW50O1xcbn1cXG5cXG4ubWwtZGltLXJlZHVjdGlvbi1jb2x1bW4tZWRpdG9yLXJvb3QsIC5tbC1kaW0tcmVkdWN0aW9uLWNvbHVtbi1lZGl0b3ItaGVhZGVyLXJvb3Qge1xcbiAgICBkaXNwbGF5OiBmbGV4O1xcbiAgICBmbGV4LWRpcmVjdGlvbjogcm93O1xcbiAgICBhbGlnbi1pdGVtczogY2VudGVyO1xcbiAgICBtYXJnaW4tYm90dG9tOiAxMHB4ICFpbXBvcnRhbnQ7XFxuICAgIHdpZHRoOiA2MDBweCAhaW1wb3J0YW50O1xcbn1cXG5cXG4ubWwtZGltLXJlZHVjdGlvbi1jb2x1bW4tZWRpdG9yLWNvbHVtbi10aXRsZSB7XFxuICAgIHRleHQtb3ZlcmZsb3c6IGVsbGlwc2lzO1xcbiAgICBvdmVyZmxvdzogaGlkZGVuO1xcbn1cXG5cXG4ubWwtZGltLXJlZHVjdGlvbi1jb2x1bW4tZWRpdG9yLWhlYWRlci1yb290ID4gaDE6bm90KDpmaXJzdC1jaGlsZCkge1xcbiAgICBtYXJnaW4tbGVmdDogMjBweCAhaW1wb3J0YW50O1xcbn1cIiwgXCJcIix7XCJ2ZXJzaW9uXCI6MyxcInNvdXJjZXNcIjpbXCJ3ZWJwYWNrOi8vLi9ub2RlX21vZHVsZXMvQGRhdGFncm9rLWxpYnJhcmllcy9tbC9jc3Mvc3R5bGVzLmNzc1wiXSxcIm5hbWVzXCI6W10sXCJtYXBwaW5nc1wiOlwiQUFBQTtJQUNJLDRCQUE0QjtJQUM1QixXQUFXO0FBQ2Y7O0FBRUE7SUFDSSxTQUFTO0FBQ2I7O0FBRUE7SUFDSSxTQUFTO0FBQ2I7O0FBRUE7SUFDSSxlQUFlO0lBQ2Ysa0JBQWtCO0lBQ2xCLFlBQVk7QUFDaEI7O0FBRUE7SUFDSSx3QkFBd0I7QUFDNUI7O0FBRUE7SUFDSSw0QkFBNEI7QUFDaEM7O0FBRUE7SUFDSSxvQkFBb0I7QUFDeEI7O0FBRUE7SUFDSSxhQUFhO0lBQ2IsbUJBQW1CO0lBQ25CLG1CQUFtQjtJQUNuQiw4QkFBOEI7SUFDOUIsdUJBQXVCO0FBQzNCOztBQUVBO0lBQ0ksdUJBQXVCO0lBQ3ZCLGdCQUFnQjtBQUNwQjs7QUFFQTtJQUNJLDRCQUE0QjtBQUNoQ1wiLFwic291cmNlc0NvbnRlbnRcIjpbXCIuc2NhdHRlcl9wbG90X2xpbmsge1xcbiAgICBwb3NpdGlvbjogYWJzb2x1dGUhaW1wb3J0YW50O1xcbiAgICByaWdodDogMTBweDtcXG59XFxuXFxuLmNsaWZmc19ncmlkIHtcXG4gICAgdG9wOiAxMHB4O1xcbn1cXG5cXG4uc2hvd19vbmx5X2NsaWZmcyB7XFxuICAgIHRvcDogMzBweDtcXG59XFxuXFxuLm1sLWRpbS1yZWR1Y3Rpb24tc2V0dGluZ3MtaW5wdXQgaS5ncm9rLWljb24uZ3Jvay1mb250LWljb24tc2V0dGluZ3Mge1xcbiAgICBmb250LXNpemU6IDE4cHg7XFxuICAgIHBvc2l0aW9uOiBhYnNvbHV0ZTtcXG4gICAgaGVpZ2h0OiAyOHB4O1xcbn1cXG5cXG4ubWwtZGltLXJlZHVjdGlvbi1jb2x1bW4tZWRpdG9yLWlucHV0LXJvb3QgbGFiZWwge1xcbiAgICBkaXNwbGF5OiBub25lICFpbXBvcnRhbnQ7XFxufVxcblxcbi5tbC1kaW0tcmVkdWN0aW9uLWNvbHVtbi1lZGl0b3ItaW5wdXQtcm9vdCBpbnB1dCwgLm1sLWRpbS1yZWR1Y3Rpb24tY29sdW1uLWVkaXRvci1pbnB1dC1yb290IHNlbGVjdCB7XFxuICAgIG1hcmdpbi1sZWZ0OiAyMHB4ICFpbXBvcnRhbnQ7XFxufVxcblxcbmgzLm1sLWRpbS1yZWR1Y3Rpb24tY29sdW1uLWVkaXRvci1pbnB1dC1yb290IHtcXG4gICAgbWFyZ2luOiAwICFpbXBvcnRhbnQ7XFxufVxcblxcbi5tbC1kaW0tcmVkdWN0aW9uLWNvbHVtbi1lZGl0b3Itcm9vdCwgLm1sLWRpbS1yZWR1Y3Rpb24tY29sdW1uLWVkaXRvci1oZWFkZXItcm9vdCB7XFxuICAgIGRpc3BsYXk6IGZsZXg7XFxuICAgIGZsZXgtZGlyZWN0aW9uOiByb3c7XFxuICAgIGFsaWduLWl0ZW1zOiBjZW50ZXI7XFxuICAgIG1hcmdpbi1ib3R0b206IDEwcHggIWltcG9ydGFudDtcXG4gICAgd2lkdGg6IDYwMHB4ICFpbXBvcnRhbnQ7XFxufVxcblxcbi5tbC1kaW0tcmVkdWN0aW9uLWNvbHVtbi1lZGl0b3ItY29sdW1uLXRpdGxlIHtcXG4gICAgdGV4dC1vdmVyZmxvdzogZWxsaXBzaXM7XFxuICAgIG92ZXJmbG93OiBoaWRkZW47XFxufVxcblxcbi5tbC1kaW0tcmVkdWN0aW9uLWNvbHVtbi1lZGl0b3ItaGVhZGVyLXJvb3QgPiBoMTpub3QoOmZpcnN0LWNoaWxkKSB7XFxuICAgIG1hcmdpbi1sZWZ0OiAyMHB4ICFpbXBvcnRhbnQ7XFxufVwiXSxcInNvdXJjZVJvb3RcIjpcIlwifV0pO1xuLy8gRXhwb3J0c1xuZXhwb3J0IGRlZmF1bHQgX19fQ1NTX0xPQURFUl9FWFBPUlRfX187XG4iLCJcInVzZSBzdHJpY3RcIjtcblxuLypcbiAgTUlUIExpY2Vuc2UgaHR0cDovL3d3dy5vcGVuc291cmNlLm9yZy9saWNlbnNlcy9taXQtbGljZW5zZS5waHBcbiAgQXV0aG9yIFRvYmlhcyBLb3BwZXJzIEBzb2tyYVxuKi9cbm1vZHVsZS5leHBvcnRzID0gZnVuY3Rpb24gKGNzc1dpdGhNYXBwaW5nVG9TdHJpbmcpIHtcbiAgdmFyIGxpc3QgPSBbXTtcblxuICAvLyByZXR1cm4gdGhlIGxpc3Qgb2YgbW9kdWxlcyBhcyBjc3Mgc3RyaW5nXG4gIGxpc3QudG9TdHJpbmcgPSBmdW5jdGlvbiB0b1N0cmluZygpIHtcbiAgICByZXR1cm4gdGhpcy5tYXAoZnVuY3Rpb24gKGl0ZW0pIHtcbiAgICAgIHZhciBjb250ZW50ID0gXCJcIjtcbiAgICAgIHZhciBuZWVkTGF5ZXIgPSB0eXBlb2YgaXRlbVs1XSAhPT0gXCJ1bmRlZmluZWRcIjtcbiAgICAgIGlmIChpdGVtWzRdKSB7XG4gICAgICAgIGNvbnRlbnQgKz0gXCJAc3VwcG9ydHMgKFwiLmNvbmNhdChpdGVtWzRdLCBcIikge1wiKTtcbiAgICAgIH1cbiAgICAgIGlmIChpdGVtWzJdKSB7XG4gICAgICAgIGNvbnRlbnQgKz0gXCJAbWVkaWEgXCIuY29uY2F0KGl0ZW1bMl0sIFwiIHtcIik7XG4gICAgICB9XG4gICAgICBpZiAobmVlZExheWVyKSB7XG4gICAgICAgIGNvbnRlbnQgKz0gXCJAbGF5ZXJcIi5jb25jYXQoaXRlbVs1XS5sZW5ndGggPiAwID8gXCIgXCIuY29uY2F0KGl0ZW1bNV0pIDogXCJcIiwgXCIge1wiKTtcbiAgICAgIH1cbiAgICAgIGNvbnRlbnQgKz0gY3NzV2l0aE1hcHBpbmdUb1N0cmluZyhpdGVtKTtcbiAgICAgIGlmIChuZWVkTGF5ZXIpIHtcbiAgICAgICAgY29udGVudCArPSBcIn1cIjtcbiAgICAgIH1cbiAgICAgIGlmIChpdGVtWzJdKSB7XG4gICAgICAgIGNvbnRlbnQgKz0gXCJ9XCI7XG4gICAgICB9XG4gICAgICBpZiAoaXRlbVs0XSkge1xuICAgICAgICBjb250ZW50ICs9IFwifVwiO1xuICAgICAgfVxuICAgICAgcmV0dXJuIGNvbnRlbnQ7XG4gICAgfSkuam9pbihcIlwiKTtcbiAgfTtcblxuICAvLyBpbXBvcnQgYSBsaXN0IG9mIG1vZHVsZXMgaW50byB0aGUgbGlzdFxuICBsaXN0LmkgPSBmdW5jdGlvbiBpKG1vZHVsZXMsIG1lZGlhLCBkZWR1cGUsIHN1cHBvcnRzLCBsYXllcikge1xuICAgIGlmICh0eXBlb2YgbW9kdWxlcyA9PT0gXCJzdHJpbmdcIikge1xuICAgICAgbW9kdWxlcyA9IFtbbnVsbCwgbW9kdWxlcywgdW5kZWZpbmVkXV07XG4gICAgfVxuICAgIHZhciBhbHJlYWR5SW1wb3J0ZWRNb2R1bGVzID0ge307XG4gICAgaWYgKGRlZHVwZSkge1xuICAgICAgZm9yICh2YXIgayA9IDA7IGsgPCB0aGlzLmxlbmd0aDsgaysrKSB7XG4gICAgICAgIHZhciBpZCA9IHRoaXNba11bMF07XG4gICAgICAgIGlmIChpZCAhPSBudWxsKSB7XG4gICAgICAgICAgYWxyZWFkeUltcG9ydGVkTW9kdWxlc1tpZF0gPSB0cnVlO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIGZvciAodmFyIF9rID0gMDsgX2sgPCBtb2R1bGVzLmxlbmd0aDsgX2srKykge1xuICAgICAgdmFyIGl0ZW0gPSBbXS5jb25jYXQobW9kdWxlc1tfa10pO1xuICAgICAgaWYgKGRlZHVwZSAmJiBhbHJlYWR5SW1wb3J0ZWRNb2R1bGVzW2l0ZW1bMF1dKSB7XG4gICAgICAgIGNvbnRpbnVlO1xuICAgICAgfVxuICAgICAgaWYgKHR5cGVvZiBsYXllciAhPT0gXCJ1bmRlZmluZWRcIikge1xuICAgICAgICBpZiAodHlwZW9mIGl0ZW1bNV0gPT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICAgICAgICBpdGVtWzVdID0gbGF5ZXI7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgaXRlbVsxXSA9IFwiQGxheWVyXCIuY29uY2F0KGl0ZW1bNV0ubGVuZ3RoID4gMCA/IFwiIFwiLmNvbmNhdChpdGVtWzVdKSA6IFwiXCIsIFwiIHtcIikuY29uY2F0KGl0ZW1bMV0sIFwifVwiKTtcbiAgICAgICAgICBpdGVtWzVdID0gbGF5ZXI7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIGlmIChtZWRpYSkge1xuICAgICAgICBpZiAoIWl0ZW1bMl0pIHtcbiAgICAgICAgICBpdGVtWzJdID0gbWVkaWE7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgaXRlbVsxXSA9IFwiQG1lZGlhIFwiLmNvbmNhdChpdGVtWzJdLCBcIiB7XCIpLmNvbmNhdChpdGVtWzFdLCBcIn1cIik7XG4gICAgICAgICAgaXRlbVsyXSA9IG1lZGlhO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBpZiAoc3VwcG9ydHMpIHtcbiAgICAgICAgaWYgKCFpdGVtWzRdKSB7XG4gICAgICAgICAgaXRlbVs0XSA9IFwiXCIuY29uY2F0KHN1cHBvcnRzKTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBpdGVtWzFdID0gXCJAc3VwcG9ydHMgKFwiLmNvbmNhdChpdGVtWzRdLCBcIikge1wiKS5jb25jYXQoaXRlbVsxXSwgXCJ9XCIpO1xuICAgICAgICAgIGl0ZW1bNF0gPSBzdXBwb3J0cztcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgbGlzdC5wdXNoKGl0ZW0pO1xuICAgIH1cbiAgfTtcbiAgcmV0dXJuIGxpc3Q7XG59OyIsIlwidXNlIHN0cmljdFwiO1xuXG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChpdGVtKSB7XG4gIHZhciBjb250ZW50ID0gaXRlbVsxXTtcbiAgdmFyIGNzc01hcHBpbmcgPSBpdGVtWzNdO1xuICBpZiAoIWNzc01hcHBpbmcpIHtcbiAgICByZXR1cm4gY29udGVudDtcbiAgfVxuICBpZiAodHlwZW9mIGJ0b2EgPT09IFwiZnVuY3Rpb25cIikge1xuICAgIHZhciBiYXNlNjQgPSBidG9hKHVuZXNjYXBlKGVuY29kZVVSSUNvbXBvbmVudChKU09OLnN0cmluZ2lmeShjc3NNYXBwaW5nKSkpKTtcbiAgICB2YXIgZGF0YSA9IFwic291cmNlTWFwcGluZ1VSTD1kYXRhOmFwcGxpY2F0aW9uL2pzb247Y2hhcnNldD11dGYtODtiYXNlNjQsXCIuY29uY2F0KGJhc2U2NCk7XG4gICAgdmFyIHNvdXJjZU1hcHBpbmcgPSBcIi8qIyBcIi5jb25jYXQoZGF0YSwgXCIgKi9cIik7XG4gICAgcmV0dXJuIFtjb250ZW50XS5jb25jYXQoW3NvdXJjZU1hcHBpbmddKS5qb2luKFwiXFxuXCIpO1xuICB9XG4gIHJldHVybiBbY29udGVudF0uam9pbihcIlxcblwiKTtcbn07IiwiKGZ1bmN0aW9uICh3aW5kb3csIGZhY3RvcnkpIHtcbiAgICBpZiAodHlwZW9mIGV4cG9ydHMgPT09ICdvYmplY3QnKSB7XG4gICAgICAgIG1vZHVsZS5leHBvcnRzID0gZmFjdG9yeSgpO1xuICAgIH0gZWxzZSBpZiAodHlwZW9mIGRlZmluZSA9PT0gJ2Z1bmN0aW9uJyAmJiBkZWZpbmUuYW1kKSB7XG4gICAgICAgIGRlZmluZShmYWN0b3J5KTtcbiAgICB9IGVsc2Uge1xuICAgICAgICB3aW5kb3cualN0YXQgPSBmYWN0b3J5KCk7XG4gICAgfVxufSkodGhpcywgZnVuY3Rpb24gKCkge1xudmFyIGpTdGF0ID0gKGZ1bmN0aW9uKE1hdGgsIHVuZGVmaW5lZCkge1xuXG4vLyBGb3IgcXVpY2sgcmVmZXJlbmNlLlxudmFyIGNvbmNhdCA9IEFycmF5LnByb3RvdHlwZS5jb25jYXQ7XG52YXIgc2xpY2UgPSBBcnJheS5wcm90b3R5cGUuc2xpY2U7XG52YXIgdG9TdHJpbmcgPSBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nO1xuXG4vLyBDYWxjdWxhdGUgY29ycmVjdGlvbiBmb3IgSUVFRSBlcnJvclxuLy8gVE9ETzogVGhpcyBjYWxjdWxhdGlvbiBjYW4gYmUgaW1wcm92ZWQuXG5mdW5jdGlvbiBjYWxjUmR4KG4sIG0pIHtcbiAgdmFyIHZhbCA9IG4gPiBtID8gbiA6IG07XG4gIHJldHVybiBNYXRoLnBvdygxMCxcbiAgICAgICAgICAgICAgICAgIDE3IC0gfn4oTWF0aC5sb2coKCh2YWwgPiAwKSA/IHZhbCA6IC12YWwpKSAqIE1hdGguTE9HMTBFKSk7XG59XG5cblxudmFyIGlzQXJyYXkgPSBBcnJheS5pc0FycmF5IHx8IGZ1bmN0aW9uIGlzQXJyYXkoYXJnKSB7XG4gIHJldHVybiB0b1N0cmluZy5jYWxsKGFyZykgPT09ICdbb2JqZWN0IEFycmF5XSc7XG59O1xuXG5cbmZ1bmN0aW9uIGlzRnVuY3Rpb24oYXJnKSB7XG4gIHJldHVybiB0b1N0cmluZy5jYWxsKGFyZykgPT09ICdbb2JqZWN0IEZ1bmN0aW9uXSc7XG59XG5cblxuZnVuY3Rpb24gaXNOdW1iZXIobnVtKSB7XG4gIHJldHVybiAodHlwZW9mIG51bSA9PT0gJ251bWJlcicpID8gbnVtIC0gbnVtID09PSAwIDogZmFsc2U7XG59XG5cblxuLy8gQ29udmVydHMgdGhlIGpTdGF0IG1hdHJpeCB0byB2ZWN0b3IuXG5mdW5jdGlvbiB0b1ZlY3RvcihhcnIpIHtcbiAgcmV0dXJuIGNvbmNhdC5hcHBseShbXSwgYXJyKTtcbn1cblxuXG4vLyBUaGUgb25lIGFuZCBvbmx5IGpTdGF0IGNvbnN0cnVjdG9yLlxuZnVuY3Rpb24galN0YXQoKSB7XG4gIHJldHVybiBuZXcgalN0YXQuX2luaXQoYXJndW1lbnRzKTtcbn1cblxuXG4vLyBUT0RPOiBSZW1vdmUgYWZ0ZXIgYWxsIHJlZmVyZW5jZXMgaW4gc3JjIGZpbGVzIGhhdmUgYmVlbiByZW1vdmVkLlxualN0YXQuZm4gPSBqU3RhdC5wcm90b3R5cGU7XG5cblxuLy8gQnkgc2VwYXJhdGluZyB0aGUgaW5pdGlhbGl6ZXIgZnJvbSB0aGUgY29uc3RydWN0b3IgaXQncyBlYXNpZXIgdG8gaGFuZGxlXG4vLyBhbHdheXMgcmV0dXJuaW5nIGEgbmV3IGluc3RhbmNlIHdoZXRoZXIgXCJuZXdcIiB3YXMgdXNlZCBvciBub3QuXG5qU3RhdC5faW5pdCA9IGZ1bmN0aW9uIF9pbml0KGFyZ3MpIHtcbiAgLy8gSWYgZmlyc3QgYXJndW1lbnQgaXMgYW4gYXJyYXksIG11c3QgYmUgdmVjdG9yIG9yIG1hdHJpeC5cbiAgaWYgKGlzQXJyYXkoYXJnc1swXSkpIHtcbiAgICAvLyBDaGVjayBpZiBtYXRyaXguXG4gICAgaWYgKGlzQXJyYXkoYXJnc1swXVswXSkpIHtcbiAgICAgIC8vIFNlZSBpZiBhIG1hcHBpbmcgZnVuY3Rpb24gd2FzIGFsc28gcGFzc2VkLlxuICAgICAgaWYgKGlzRnVuY3Rpb24oYXJnc1sxXSkpXG4gICAgICAgIGFyZ3NbMF0gPSBqU3RhdC5tYXAoYXJnc1swXSwgYXJnc1sxXSk7XG4gICAgICAvLyBJdGVyYXRlIG92ZXIgZWFjaCBpcyBmYXN0ZXIgdGhhbiB0aGlzLnB1c2guYXBwbHkodGhpcywgYXJnc1swXS5cbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYXJnc1swXS5sZW5ndGg7IGkrKylcbiAgICAgICAgdGhpc1tpXSA9IGFyZ3NbMF1baV07XG4gICAgICB0aGlzLmxlbmd0aCA9IGFyZ3NbMF0ubGVuZ3RoO1xuXG4gICAgLy8gT3RoZXJ3aXNlIG11c3QgYmUgYSB2ZWN0b3IuXG4gICAgfSBlbHNlIHtcbiAgICAgIHRoaXNbMF0gPSBpc0Z1bmN0aW9uKGFyZ3NbMV0pID8galN0YXQubWFwKGFyZ3NbMF0sIGFyZ3NbMV0pIDogYXJnc1swXTtcbiAgICAgIHRoaXMubGVuZ3RoID0gMTtcbiAgICB9XG5cbiAgLy8gSWYgZmlyc3QgYXJndW1lbnQgaXMgbnVtYmVyLCBhc3N1bWUgY3JlYXRpb24gb2Ygc2VxdWVuY2UuXG4gIH0gZWxzZSBpZiAoaXNOdW1iZXIoYXJnc1swXSkpIHtcbiAgICB0aGlzWzBdID0galN0YXQuc2VxLmFwcGx5KG51bGwsIGFyZ3MpO1xuICAgIHRoaXMubGVuZ3RoID0gMTtcblxuICAvLyBIYW5kbGUgY2FzZSB3aGVuIGpTdGF0IG9iamVjdCBpcyBwYXNzZWQgdG8galN0YXQuXG4gIH0gZWxzZSBpZiAoYXJnc1swXSBpbnN0YW5jZW9mIGpTdGF0KSB7XG4gICAgLy8gRHVwbGljYXRlIHRoZSBvYmplY3QgYW5kIHBhc3MgaXQgYmFjay5cbiAgICByZXR1cm4galN0YXQoYXJnc1swXS50b0FycmF5KCkpO1xuXG4gIC8vIFVuZXhwZWN0ZWQgYXJndW1lbnQgdmFsdWUsIHJldHVybiBlbXB0eSBqU3RhdCBvYmplY3QuXG4gIC8vIFRPRE86IFRoaXMgaXMgc3RyYW5nZSBiZWhhdmlvci4gU2hvdWxkbid0IHRoaXMgdGhyb3cgb3Igc29tZSBzdWNoIHRvIGxldFxuICAvLyB0aGUgdXNlciBrbm93IHRoZXkgaGFkIGJhZCBhcmd1bWVudHM/XG4gIH0gZWxzZSB7XG4gICAgdGhpc1swXSA9IFtdO1xuICAgIHRoaXMubGVuZ3RoID0gMTtcbiAgfVxuXG4gIHJldHVybiB0aGlzO1xufTtcbmpTdGF0Ll9pbml0LnByb3RvdHlwZSA9IGpTdGF0LnByb3RvdHlwZTtcbmpTdGF0Ll9pbml0LmNvbnN0cnVjdG9yID0galN0YXQ7XG5cblxuLy8gVXRpbGl0eSBmdW5jdGlvbnMuXG4vLyBUT0RPOiBmb3IgaW50ZXJuYWwgdXNlIG9ubHk/XG5qU3RhdC51dGlscyA9IHtcbiAgY2FsY1JkeDogY2FsY1JkeCxcbiAgaXNBcnJheTogaXNBcnJheSxcbiAgaXNGdW5jdGlvbjogaXNGdW5jdGlvbixcbiAgaXNOdW1iZXI6IGlzTnVtYmVyLFxuICB0b1ZlY3RvcjogdG9WZWN0b3Jcbn07XG5cblxualN0YXQuX3JhbmRvbV9mbiA9IE1hdGgucmFuZG9tO1xualN0YXQuc2V0UmFuZG9tID0gZnVuY3Rpb24gc2V0UmFuZG9tKGZuKSB7XG4gIGlmICh0eXBlb2YgZm4gIT09ICdmdW5jdGlvbicpXG4gICAgdGhyb3cgbmV3IFR5cGVFcnJvcignZm4gaXMgbm90IGEgZnVuY3Rpb24nKTtcbiAgalN0YXQuX3JhbmRvbV9mbiA9IGZuO1xufTtcblxuXG4vLyBFYXNpbHkgZXh0ZW5kIHRoZSBqU3RhdCBvYmplY3QuXG4vLyBUT0RPOiBpcyB0aGlzIHNlcmlvdXNseSBuZWNlc3Nhcnk/XG5qU3RhdC5leHRlbmQgPSBmdW5jdGlvbiBleHRlbmQob2JqKSB7XG4gIHZhciBpLCBqO1xuXG4gIGlmIChhcmd1bWVudHMubGVuZ3RoID09PSAxKSB7XG4gICAgZm9yIChqIGluIG9iailcbiAgICAgIGpTdGF0W2pdID0gb2JqW2pdO1xuICAgIHJldHVybiB0aGlzO1xuICB9XG5cbiAgZm9yIChpID0gMTsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykge1xuICAgIGZvciAoaiBpbiBhcmd1bWVudHNbaV0pXG4gICAgICBvYmpbal0gPSBhcmd1bWVudHNbaV1bal07XG4gIH1cblxuICByZXR1cm4gb2JqO1xufTtcblxuXG4vLyBSZXR1cm5zIHRoZSBudW1iZXIgb2Ygcm93cyBpbiB0aGUgbWF0cml4LlxualN0YXQucm93cyA9IGZ1bmN0aW9uIHJvd3MoYXJyKSB7XG4gIHJldHVybiBhcnIubGVuZ3RoIHx8IDE7XG59O1xuXG5cbi8vIFJldHVybnMgdGhlIG51bWJlciBvZiBjb2x1bW5zIGluIHRoZSBtYXRyaXguXG5qU3RhdC5jb2xzID0gZnVuY3Rpb24gY29scyhhcnIpIHtcbiAgcmV0dXJuIGFyclswXS5sZW5ndGggfHwgMTtcbn07XG5cblxuLy8gUmV0dXJucyB0aGUgZGltZW5zaW9ucyBvZiB0aGUgb2JqZWN0IHsgcm93czogaSwgY29sczogaiB9XG5qU3RhdC5kaW1lbnNpb25zID0gZnVuY3Rpb24gZGltZW5zaW9ucyhhcnIpIHtcbiAgcmV0dXJuIHtcbiAgICByb3dzOiBqU3RhdC5yb3dzKGFyciksXG4gICAgY29sczogalN0YXQuY29scyhhcnIpXG4gIH07XG59O1xuXG5cbi8vIFJldHVybnMgYSBzcGVjaWZpZWQgcm93IGFzIGEgdmVjdG9yIG9yIHJldHVybiBhIHN1YiBtYXRyaXggYnkgcGljayBzb21lIHJvd3NcbmpTdGF0LnJvdyA9IGZ1bmN0aW9uIHJvdyhhcnIsIGluZGV4KSB7XG4gIGlmIChpc0FycmF5KGluZGV4KSkge1xuICAgIHJldHVybiBpbmRleC5tYXAoZnVuY3Rpb24oaSkge1xuICAgICAgcmV0dXJuIGpTdGF0LnJvdyhhcnIsIGkpO1xuICAgIH0pXG4gIH1cbiAgcmV0dXJuIGFycltpbmRleF07XG59O1xuXG5cbi8vIHJldHVybiByb3cgYXMgYXJyYXlcbi8vIHJvd2EoW1sxLDJdLFszLDRdXSwwKSAtPiBbMSwyXVxualN0YXQucm93YSA9IGZ1bmN0aW9uIHJvd2EoYXJyLCBpKSB7XG4gIHJldHVybiBqU3RhdC5yb3coYXJyLCBpKTtcbn07XG5cblxuLy8gUmV0dXJucyB0aGUgc3BlY2lmaWVkIGNvbHVtbiBhcyBhIHZlY3RvciBvciByZXR1cm4gYSBzdWIgbWF0cml4IGJ5IHBpY2sgc29tZVxuLy8gY29sdW1uc1xualN0YXQuY29sID0gZnVuY3Rpb24gY29sKGFyciwgaW5kZXgpIHtcbiAgaWYgKGlzQXJyYXkoaW5kZXgpKSB7XG4gICAgdmFyIHN1Ym1hdCA9IGpTdGF0LmFyYW5nZShhcnIubGVuZ3RoKS5tYXAoZnVuY3Rpb24oKSB7XG4gICAgICByZXR1cm4gbmV3IEFycmF5KGluZGV4Lmxlbmd0aCk7XG4gICAgfSk7XG4gICAgaW5kZXguZm9yRWFjaChmdW5jdGlvbihpbmQsIGkpe1xuICAgICAgalN0YXQuYXJhbmdlKGFyci5sZW5ndGgpLmZvckVhY2goZnVuY3Rpb24oaikge1xuICAgICAgICBzdWJtYXRbal1baV0gPSBhcnJbal1baW5kXTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICAgIHJldHVybiBzdWJtYXQ7XG4gIH1cbiAgdmFyIGNvbHVtbiA9IG5ldyBBcnJheShhcnIubGVuZ3RoKTtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBhcnIubGVuZ3RoOyBpKyspXG4gICAgY29sdW1uW2ldID0gW2FycltpXVtpbmRleF1dO1xuICByZXR1cm4gY29sdW1uO1xufTtcblxuXG4vLyByZXR1cm4gY29sdW1uIGFzIGFycmF5XG4vLyBjb2xhKFtbMSwyXSxbMyw0XV0sMCkgLT4gWzEsM11cbmpTdGF0LmNvbGEgPSBmdW5jdGlvbiBjb2xhKGFyciwgaSkge1xuICByZXR1cm4galN0YXQuY29sKGFyciwgaSkubWFwKGZ1bmN0aW9uKGEpeyByZXR1cm4gYVswXSB9KTtcbn07XG5cblxuLy8gUmV0dXJucyB0aGUgZGlhZ29uYWwgb2YgdGhlIG1hdHJpeFxualN0YXQuZGlhZyA9IGZ1bmN0aW9uIGRpYWcoYXJyKSB7XG4gIHZhciBucm93ID0galN0YXQucm93cyhhcnIpO1xuICB2YXIgcmVzID0gbmV3IEFycmF5KG5yb3cpO1xuICBmb3IgKHZhciByb3cgPSAwOyByb3cgPCBucm93OyByb3crKylcbiAgICByZXNbcm93XSA9IFthcnJbcm93XVtyb3ddXTtcbiAgcmV0dXJuIHJlcztcbn07XG5cblxuLy8gUmV0dXJucyB0aGUgYW50aS1kaWFnb25hbCBvZiB0aGUgbWF0cml4XG5qU3RhdC5hbnRpZGlhZyA9IGZ1bmN0aW9uIGFudGlkaWFnKGFycikge1xuICB2YXIgbnJvdyA9IGpTdGF0LnJvd3MoYXJyKSAtIDE7XG4gIHZhciByZXMgPSBuZXcgQXJyYXkobnJvdyk7XG4gIGZvciAodmFyIGkgPSAwOyBucm93ID49IDA7IG5yb3ctLSwgaSsrKVxuICAgIHJlc1tpXSA9IFthcnJbaV1bbnJvd11dO1xuICByZXR1cm4gcmVzO1xufTtcblxuLy8gVHJhbnNwb3NlIGEgbWF0cml4IG9yIGFycmF5LlxualN0YXQudHJhbnNwb3NlID0gZnVuY3Rpb24gdHJhbnNwb3NlKGFycikge1xuICB2YXIgb2JqID0gW107XG4gIHZhciBvYmpBcnIsIHJvd3MsIGNvbHMsIGosIGk7XG5cbiAgLy8gTWFrZSBzdXJlIGFyciBpcyBpbiBtYXRyaXggZm9ybWF0LlxuICBpZiAoIWlzQXJyYXkoYXJyWzBdKSlcbiAgICBhcnIgPSBbYXJyXTtcblxuICByb3dzID0gYXJyLmxlbmd0aDtcbiAgY29scyA9IGFyclswXS5sZW5ndGg7XG5cbiAgZm9yIChpID0gMDsgaSA8IGNvbHM7IGkrKykge1xuICAgIG9iakFyciA9IG5ldyBBcnJheShyb3dzKTtcbiAgICBmb3IgKGogPSAwOyBqIDwgcm93czsgaisrKVxuICAgICAgb2JqQXJyW2pdID0gYXJyW2pdW2ldO1xuICAgIG9iai5wdXNoKG9iakFycik7XG4gIH1cblxuICAvLyBJZiBvYmogaXMgdmVjdG9yLCByZXR1cm4gb25seSBzaW5nbGUgYXJyYXkuXG4gIHJldHVybiBvYmoubGVuZ3RoID09PSAxID8gb2JqWzBdIDogb2JqO1xufTtcblxuXG4vLyBNYXAgYSBmdW5jdGlvbiB0byBhbiBhcnJheSBvciBhcnJheSBvZiBhcnJheXMuXG4vLyBcInRvQWx0ZXJcIiBpcyBhbiBpbnRlcm5hbCB2YXJpYWJsZS5cbmpTdGF0Lm1hcCA9IGZ1bmN0aW9uIG1hcChhcnIsIGZ1bmMsIHRvQWx0ZXIpIHtcbiAgdmFyIHJvdywgbnJvdywgbmNvbCwgcmVzLCBjb2w7XG5cbiAgaWYgKCFpc0FycmF5KGFyclswXSkpXG4gICAgYXJyID0gW2Fycl07XG5cbiAgbnJvdyA9IGFyci5sZW5ndGg7XG4gIG5jb2wgPSBhcnJbMF0ubGVuZ3RoO1xuICByZXMgPSB0b0FsdGVyID8gYXJyIDogbmV3IEFycmF5KG5yb3cpO1xuXG4gIGZvciAocm93ID0gMDsgcm93IDwgbnJvdzsgcm93KyspIHtcbiAgICAvLyBpZiB0aGUgcm93IGRvZXNuJ3QgZXhpc3QsIGNyZWF0ZSBpdFxuICAgIGlmICghcmVzW3Jvd10pXG4gICAgICByZXNbcm93XSA9IG5ldyBBcnJheShuY29sKTtcbiAgICBmb3IgKGNvbCA9IDA7IGNvbCA8IG5jb2w7IGNvbCsrKVxuICAgICAgcmVzW3Jvd11bY29sXSA9IGZ1bmMoYXJyW3Jvd11bY29sXSwgcm93LCBjb2wpO1xuICB9XG5cbiAgcmV0dXJuIHJlcy5sZW5ndGggPT09IDEgPyByZXNbMF0gOiByZXM7XG59O1xuXG5cbi8vIEN1bXVsYXRpdmVseSBjb21iaW5lIHRoZSBlbGVtZW50cyBvZiBhbiBhcnJheSBvciBhcnJheSBvZiBhcnJheXMgdXNpbmcgYSBmdW5jdGlvbi5cbmpTdGF0LmN1bXJlZHVjZSA9IGZ1bmN0aW9uIGN1bXJlZHVjZShhcnIsIGZ1bmMsIHRvQWx0ZXIpIHtcbiAgdmFyIHJvdywgbnJvdywgbmNvbCwgcmVzLCBjb2w7XG5cbiAgaWYgKCFpc0FycmF5KGFyclswXSkpXG4gICAgYXJyID0gW2Fycl07XG5cbiAgbnJvdyA9IGFyci5sZW5ndGg7XG4gIG5jb2wgPSBhcnJbMF0ubGVuZ3RoO1xuICByZXMgPSB0b0FsdGVyID8gYXJyIDogbmV3IEFycmF5KG5yb3cpO1xuXG4gIGZvciAocm93ID0gMDsgcm93IDwgbnJvdzsgcm93KyspIHtcbiAgICAvLyBpZiB0aGUgcm93IGRvZXNuJ3QgZXhpc3QsIGNyZWF0ZSBpdFxuICAgIGlmICghcmVzW3Jvd10pXG4gICAgICByZXNbcm93XSA9IG5ldyBBcnJheShuY29sKTtcbiAgICBpZiAobmNvbCA+IDApXG4gICAgICByZXNbcm93XVswXSA9IGFycltyb3ddWzBdO1xuICAgIGZvciAoY29sID0gMTsgY29sIDwgbmNvbDsgY29sKyspXG4gICAgICByZXNbcm93XVtjb2xdID0gZnVuYyhyZXNbcm93XVtjb2wtMV0sIGFycltyb3ddW2NvbF0pO1xuICB9XG4gIHJldHVybiByZXMubGVuZ3RoID09PSAxID8gcmVzWzBdIDogcmVzO1xufTtcblxuXG4vLyBEZXN0cnVjdGl2ZWx5IGFsdGVyIGFuIGFycmF5LlxualN0YXQuYWx0ZXIgPSBmdW5jdGlvbiBhbHRlcihhcnIsIGZ1bmMpIHtcbiAgcmV0dXJuIGpTdGF0Lm1hcChhcnIsIGZ1bmMsIHRydWUpO1xufTtcblxuXG4vLyBHZW5lcmF0ZSBhIHJvd3MgeCBjb2xzIG1hdHJpeCBhY2NvcmRpbmcgdG8gdGhlIHN1cHBsaWVkIGZ1bmN0aW9uLlxualN0YXQuY3JlYXRlID0gZnVuY3Rpb24gIGNyZWF0ZShyb3dzLCBjb2xzLCBmdW5jKSB7XG4gIHZhciByZXMgPSBuZXcgQXJyYXkocm93cyk7XG4gIHZhciBpLCBqO1xuXG4gIGlmIChpc0Z1bmN0aW9uKGNvbHMpKSB7XG4gICAgZnVuYyA9IGNvbHM7XG4gICAgY29scyA9IHJvd3M7XG4gIH1cblxuICBmb3IgKGkgPSAwOyBpIDwgcm93czsgaSsrKSB7XG4gICAgcmVzW2ldID0gbmV3IEFycmF5KGNvbHMpO1xuICAgIGZvciAoaiA9IDA7IGogPCBjb2xzOyBqKyspXG4gICAgICByZXNbaV1bal0gPSBmdW5jKGksIGopO1xuICB9XG5cbiAgcmV0dXJuIHJlcztcbn07XG5cblxuZnVuY3Rpb24gcmV0WmVybygpIHsgcmV0dXJuIDA7IH1cblxuXG4vLyBHZW5lcmF0ZSBhIHJvd3MgeCBjb2xzIG1hdHJpeCBvZiB6ZXJvcy5cbmpTdGF0Lnplcm9zID0gZnVuY3Rpb24gemVyb3Mocm93cywgY29scykge1xuICBpZiAoIWlzTnVtYmVyKGNvbHMpKVxuICAgIGNvbHMgPSByb3dzO1xuICByZXR1cm4galN0YXQuY3JlYXRlKHJvd3MsIGNvbHMsIHJldFplcm8pO1xufTtcblxuXG5mdW5jdGlvbiByZXRPbmUoKSB7IHJldHVybiAxOyB9XG5cblxuLy8gR2VuZXJhdGUgYSByb3dzIHggY29scyBtYXRyaXggb2Ygb25lcy5cbmpTdGF0Lm9uZXMgPSBmdW5jdGlvbiBvbmVzKHJvd3MsIGNvbHMpIHtcbiAgaWYgKCFpc051bWJlcihjb2xzKSlcbiAgICBjb2xzID0gcm93cztcbiAgcmV0dXJuIGpTdGF0LmNyZWF0ZShyb3dzLCBjb2xzLCByZXRPbmUpO1xufTtcblxuXG4vLyBHZW5lcmF0ZSBhIHJvd3MgeCBjb2xzIG1hdHJpeCBvZiB1bmlmb3JtbHkgcmFuZG9tIG51bWJlcnMuXG5qU3RhdC5yYW5kID0gZnVuY3Rpb24gcmFuZChyb3dzLCBjb2xzKSB7XG4gIGlmICghaXNOdW1iZXIoY29scykpXG4gICAgY29scyA9IHJvd3M7XG4gIHJldHVybiBqU3RhdC5jcmVhdGUocm93cywgY29scywgalN0YXQuX3JhbmRvbV9mbik7XG59O1xuXG5cbmZ1bmN0aW9uIHJldElkZW50KGksIGopIHsgcmV0dXJuIGkgPT09IGogPyAxIDogMDsgfVxuXG5cbi8vIEdlbmVyYXRlIGFuIGlkZW50aXR5IG1hdHJpeCBvZiBzaXplIHJvdyB4IGNvbHMuXG5qU3RhdC5pZGVudGl0eSA9IGZ1bmN0aW9uIGlkZW50aXR5KHJvd3MsIGNvbHMpIHtcbiAgaWYgKCFpc051bWJlcihjb2xzKSlcbiAgICBjb2xzID0gcm93cztcbiAgcmV0dXJuIGpTdGF0LmNyZWF0ZShyb3dzLCBjb2xzLCByZXRJZGVudCk7XG59O1xuXG5cbi8vIFRlc3RzIHdoZXRoZXIgYSBtYXRyaXggaXMgc3ltbWV0cmljXG5qU3RhdC5zeW1tZXRyaWMgPSBmdW5jdGlvbiBzeW1tZXRyaWMoYXJyKSB7XG4gIHZhciBzaXplID0gYXJyLmxlbmd0aDtcbiAgdmFyIHJvdywgY29sO1xuXG4gIGlmIChhcnIubGVuZ3RoICE9PSBhcnJbMF0ubGVuZ3RoKVxuICAgIHJldHVybiBmYWxzZTtcblxuICBmb3IgKHJvdyA9IDA7IHJvdyA8IHNpemU7IHJvdysrKSB7XG4gICAgZm9yIChjb2wgPSAwOyBjb2wgPCBzaXplOyBjb2wrKylcbiAgICAgIGlmIChhcnJbY29sXVtyb3ddICE9PSBhcnJbcm93XVtjb2xdKVxuICAgICAgICByZXR1cm4gZmFsc2U7XG4gIH1cblxuICByZXR1cm4gdHJ1ZTtcbn07XG5cblxuLy8gU2V0IGFsbCB2YWx1ZXMgdG8gemVyby5cbmpTdGF0LmNsZWFyID0gZnVuY3Rpb24gY2xlYXIoYXJyKSB7XG4gIHJldHVybiBqU3RhdC5hbHRlcihhcnIsIHJldFplcm8pO1xufTtcblxuXG4vLyBHZW5lcmF0ZSBzZXF1ZW5jZS5cbmpTdGF0LnNlcSA9IGZ1bmN0aW9uIHNlcShtaW4sIG1heCwgbGVuZ3RoLCBmdW5jKSB7XG4gIGlmICghaXNGdW5jdGlvbihmdW5jKSlcbiAgICBmdW5jID0gZmFsc2U7XG5cbiAgdmFyIGFyciA9IFtdO1xuICB2YXIgaGl2YWwgPSBjYWxjUmR4KG1pbiwgbWF4KTtcbiAgdmFyIHN0ZXAgPSAobWF4ICogaGl2YWwgLSBtaW4gKiBoaXZhbCkgLyAoKGxlbmd0aCAtIDEpICogaGl2YWwpO1xuICB2YXIgY3VycmVudCA9IG1pbjtcbiAgdmFyIGNudDtcblxuICAvLyBDdXJyZW50IGlzIGFzc2lnbmVkIHVzaW5nIGEgdGVjaG5pcXVlIHRvIGNvbXBlbnNhdGUgZm9yIElFRUUgZXJyb3IuXG4gIC8vIFRPRE86IE5lZWRzIGJldHRlciBpbXBsZW1lbnRhdGlvbi5cbiAgZm9yIChjbnQgPSAwO1xuICAgICAgIGN1cnJlbnQgPD0gbWF4ICYmIGNudCA8IGxlbmd0aDtcbiAgICAgICBjbnQrKywgY3VycmVudCA9IChtaW4gKiBoaXZhbCArIHN0ZXAgKiBoaXZhbCAqIGNudCkgLyBoaXZhbCkge1xuICAgIGFyci5wdXNoKChmdW5jID8gZnVuYyhjdXJyZW50LCBjbnQpIDogY3VycmVudCkpO1xuICB9XG5cbiAgcmV0dXJuIGFycjtcbn07XG5cblxuLy8gYXJhbmdlKDUpIC0+IFswLDEsMiwzLDRdXG4vLyBhcmFuZ2UoMSw1KSAtPiBbMSwyLDMsNF1cbi8vIGFyYW5nZSg1LDEsLTEpIC0+IFs1LDQsMywyXVxualN0YXQuYXJhbmdlID0gZnVuY3Rpb24gYXJhbmdlKHN0YXJ0LCBlbmQsIHN0ZXApIHtcbiAgdmFyIHJsID0gW107XG4gIHZhciBpO1xuICBzdGVwID0gc3RlcCB8fCAxO1xuICBpZiAoZW5kID09PSB1bmRlZmluZWQpIHtcbiAgICBlbmQgPSBzdGFydDtcbiAgICBzdGFydCA9IDA7XG4gIH1cbiAgaWYgKHN0YXJ0ID09PSBlbmQgfHwgc3RlcCA9PT0gMCkge1xuICAgIHJldHVybiBbXTtcbiAgfVxuICBpZiAoc3RhcnQgPCBlbmQgJiYgc3RlcCA8IDApIHtcbiAgICByZXR1cm4gW107XG4gIH1cbiAgaWYgKHN0YXJ0ID4gZW5kICYmIHN0ZXAgPiAwKSB7XG4gICAgcmV0dXJuIFtdO1xuICB9XG4gIGlmIChzdGVwID4gMCkge1xuICAgIGZvciAoaSA9IHN0YXJ0OyBpIDwgZW5kOyBpICs9IHN0ZXApIHtcbiAgICAgIHJsLnB1c2goaSk7XG4gICAgfVxuICB9IGVsc2Uge1xuICAgIGZvciAoaSA9IHN0YXJ0OyBpID4gZW5kOyBpICs9IHN0ZXApIHtcbiAgICAgIHJsLnB1c2goaSk7XG4gICAgfVxuICB9XG4gIHJldHVybiBybDtcbn07XG5cblxuLy8gQT1bWzEsMiwzXSxbNCw1LDZdLFs3LDgsOV1dXG4vLyBzbGljZShBLHtyb3c6e2VuZDoyfSxjb2w6e3N0YXJ0OjF9fSkgLT4gW1syLDNdLFs1LDZdXVxuLy8gc2xpY2UoQSwxLHtzdGFydDoxfSkgLT4gWzUsNl1cbi8vIGFzIG51bXB5IGNvZGUgQVs6MiwxOl1cbmpTdGF0LnNsaWNlID0gKGZ1bmN0aW9uKCl7XG4gIGZ1bmN0aW9uIF9zbGljZShsaXN0LCBzdGFydCwgZW5kLCBzdGVwKSB7XG4gICAgLy8gbm90ZSBpdCdzIG5vdCBlcXVhbCB0byByYW5nZS5tYXAgbW9kZSBpdCdzIGEgYnVnXG4gICAgdmFyIGk7XG4gICAgdmFyIHJsID0gW107XG4gICAgdmFyIGxlbmd0aCA9IGxpc3QubGVuZ3RoO1xuICAgIGlmIChzdGFydCA9PT0gdW5kZWZpbmVkICYmIGVuZCA9PT0gdW5kZWZpbmVkICYmIHN0ZXAgPT09IHVuZGVmaW5lZCkge1xuICAgICAgcmV0dXJuIGpTdGF0LmNvcHkobGlzdCk7XG4gICAgfVxuXG4gICAgc3RhcnQgPSBzdGFydCB8fCAwO1xuICAgIGVuZCA9IGVuZCB8fCBsaXN0Lmxlbmd0aDtcbiAgICBzdGFydCA9IHN0YXJ0ID49IDAgPyBzdGFydCA6IGxlbmd0aCArIHN0YXJ0O1xuICAgIGVuZCA9IGVuZCA+PSAwID8gZW5kIDogbGVuZ3RoICsgZW5kO1xuICAgIHN0ZXAgPSBzdGVwIHx8IDE7XG4gICAgaWYgKHN0YXJ0ID09PSBlbmQgfHwgc3RlcCA9PT0gMCkge1xuICAgICAgcmV0dXJuIFtdO1xuICAgIH1cbiAgICBpZiAoc3RhcnQgPCBlbmQgJiYgc3RlcCA8IDApIHtcbiAgICAgIHJldHVybiBbXTtcbiAgICB9XG4gICAgaWYgKHN0YXJ0ID4gZW5kICYmIHN0ZXAgPiAwKSB7XG4gICAgICByZXR1cm4gW107XG4gICAgfVxuICAgIGlmIChzdGVwID4gMCkge1xuICAgICAgZm9yIChpID0gc3RhcnQ7IGkgPCBlbmQ7IGkgKz0gc3RlcCkge1xuICAgICAgICBybC5wdXNoKGxpc3RbaV0pO1xuICAgICAgfVxuICAgIH0gZWxzZSB7XG4gICAgICBmb3IgKGkgPSBzdGFydDsgaSA+IGVuZDtpICs9IHN0ZXApIHtcbiAgICAgICAgcmwucHVzaChsaXN0W2ldKTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHJsO1xuICB9XG5cbiAgZnVuY3Rpb24gc2xpY2UobGlzdCwgcmNTbGljZSkge1xuICAgIHZhciBjb2xTbGljZSwgcm93U2xpY2U7XG4gICAgcmNTbGljZSA9IHJjU2xpY2UgfHwge307XG4gICAgaWYgKGlzTnVtYmVyKHJjU2xpY2Uucm93KSkge1xuICAgICAgaWYgKGlzTnVtYmVyKHJjU2xpY2UuY29sKSlcbiAgICAgICAgcmV0dXJuIGxpc3RbcmNTbGljZS5yb3ddW3JjU2xpY2UuY29sXTtcbiAgICAgIHZhciByb3cgPSBqU3RhdC5yb3dhKGxpc3QsIHJjU2xpY2Uucm93KTtcbiAgICAgIGNvbFNsaWNlID0gcmNTbGljZS5jb2wgfHwge307XG4gICAgICByZXR1cm4gX3NsaWNlKHJvdywgY29sU2xpY2Uuc3RhcnQsIGNvbFNsaWNlLmVuZCwgY29sU2xpY2Uuc3RlcCk7XG4gICAgfVxuXG4gICAgaWYgKGlzTnVtYmVyKHJjU2xpY2UuY29sKSkge1xuICAgICAgdmFyIGNvbCA9IGpTdGF0LmNvbGEobGlzdCwgcmNTbGljZS5jb2wpO1xuICAgICAgcm93U2xpY2UgPSByY1NsaWNlLnJvdyB8fCB7fTtcbiAgICAgIHJldHVybiBfc2xpY2UoY29sLCByb3dTbGljZS5zdGFydCwgcm93U2xpY2UuZW5kLCByb3dTbGljZS5zdGVwKTtcbiAgICB9XG5cbiAgICByb3dTbGljZSA9IHJjU2xpY2Uucm93IHx8IHt9O1xuICAgIGNvbFNsaWNlID0gcmNTbGljZS5jb2wgfHwge307XG4gICAgdmFyIHJvd3MgPSBfc2xpY2UobGlzdCwgcm93U2xpY2Uuc3RhcnQsIHJvd1NsaWNlLmVuZCwgcm93U2xpY2Uuc3RlcCk7XG4gICAgcmV0dXJuIHJvd3MubWFwKGZ1bmN0aW9uKHJvdykge1xuICAgICAgcmV0dXJuIF9zbGljZShyb3csIGNvbFNsaWNlLnN0YXJ0LCBjb2xTbGljZS5lbmQsIGNvbFNsaWNlLnN0ZXApO1xuICAgIH0pO1xuICB9XG5cbiAgcmV0dXJuIHNsaWNlO1xufSgpKTtcblxuXG4vLyBBPVtbMSwyLDNdLFs0LDUsNl0sWzcsOCw5XV1cbi8vIHNsaWNlQXNzaWduKEEse3Jvdzp7c3RhcnQ6MX0sY29sOntzdGFydDoxfX0sW1swLDBdLFswLDBdXSlcbi8vIEE9W1sxLDIsM10sWzQsMCwwXSxbNywwLDBdXVxualN0YXQuc2xpY2VBc3NpZ24gPSBmdW5jdGlvbiBzbGljZUFzc2lnbihBLCByY1NsaWNlLCBCKSB7XG4gIHZhciBubCwgbWw7XG4gIGlmIChpc051bWJlcihyY1NsaWNlLnJvdykpIHtcbiAgICBpZiAoaXNOdW1iZXIocmNTbGljZS5jb2wpKVxuICAgICAgcmV0dXJuIEFbcmNTbGljZS5yb3ddW3JjU2xpY2UuY29sXSA9IEI7XG4gICAgcmNTbGljZS5jb2wgPSByY1NsaWNlLmNvbCB8fCB7fTtcbiAgICByY1NsaWNlLmNvbC5zdGFydCA9IHJjU2xpY2UuY29sLnN0YXJ0IHx8IDA7XG4gICAgcmNTbGljZS5jb2wuZW5kID0gcmNTbGljZS5jb2wuZW5kIHx8IEFbMF0ubGVuZ3RoO1xuICAgIHJjU2xpY2UuY29sLnN0ZXAgPSByY1NsaWNlLmNvbC5zdGVwIHx8IDE7XG4gICAgbmwgPSBqU3RhdC5hcmFuZ2UocmNTbGljZS5jb2wuc3RhcnQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgIE1hdGgubWluKEEubGVuZ3RoLCByY1NsaWNlLmNvbC5lbmQpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICByY1NsaWNlLmNvbC5zdGVwKTtcbiAgICB2YXIgbSA9IHJjU2xpY2Uucm93O1xuICAgIG5sLmZvckVhY2goZnVuY3Rpb24obiwgaSkge1xuICAgICAgQVttXVtuXSA9IEJbaV07XG4gICAgfSk7XG4gICAgcmV0dXJuIEE7XG4gIH1cblxuICBpZiAoaXNOdW1iZXIocmNTbGljZS5jb2wpKSB7XG4gICAgcmNTbGljZS5yb3cgPSByY1NsaWNlLnJvdyB8fCB7fTtcbiAgICByY1NsaWNlLnJvdy5zdGFydCA9IHJjU2xpY2Uucm93LnN0YXJ0IHx8IDA7XG4gICAgcmNTbGljZS5yb3cuZW5kID0gcmNTbGljZS5yb3cuZW5kIHx8IEEubGVuZ3RoO1xuICAgIHJjU2xpY2Uucm93LnN0ZXAgPSByY1NsaWNlLnJvdy5zdGVwIHx8IDE7XG4gICAgbWwgPSBqU3RhdC5hcmFuZ2UocmNTbGljZS5yb3cuc3RhcnQsXG4gICAgICAgICAgICAgICAgICAgICAgICAgIE1hdGgubWluKEFbMF0ubGVuZ3RoLCByY1NsaWNlLnJvdy5lbmQpLFxuICAgICAgICAgICAgICAgICAgICAgICAgICByY1NsaWNlLnJvdy5zdGVwKTtcbiAgICB2YXIgbiA9IHJjU2xpY2UuY29sO1xuICAgIG1sLmZvckVhY2goZnVuY3Rpb24obSwgaikge1xuICAgICAgQVttXVtuXSA9IEJbal07XG4gICAgfSk7XG4gICAgcmV0dXJuIEE7XG4gIH1cblxuICBpZiAoQlswXS5sZW5ndGggPT09IHVuZGVmaW5lZCkge1xuICAgIEIgPSBbQl07XG4gIH1cbiAgcmNTbGljZS5yb3cuc3RhcnQgPSByY1NsaWNlLnJvdy5zdGFydCB8fCAwO1xuICByY1NsaWNlLnJvdy5lbmQgPSByY1NsaWNlLnJvdy5lbmQgfHwgQS5sZW5ndGg7XG4gIHJjU2xpY2Uucm93LnN0ZXAgPSByY1NsaWNlLnJvdy5zdGVwIHx8IDE7XG4gIHJjU2xpY2UuY29sLnN0YXJ0ID0gcmNTbGljZS5jb2wuc3RhcnQgfHwgMDtcbiAgcmNTbGljZS5jb2wuZW5kID0gcmNTbGljZS5jb2wuZW5kIHx8IEFbMF0ubGVuZ3RoO1xuICByY1NsaWNlLmNvbC5zdGVwID0gcmNTbGljZS5jb2wuc3RlcCB8fCAxO1xuICBtbCA9IGpTdGF0LmFyYW5nZShyY1NsaWNlLnJvdy5zdGFydCxcbiAgICAgICAgICAgICAgICAgICAgICAgIE1hdGgubWluKEEubGVuZ3RoLCByY1NsaWNlLnJvdy5lbmQpLFxuICAgICAgICAgICAgICAgICAgICAgICAgcmNTbGljZS5yb3cuc3RlcCk7XG4gIG5sID0galN0YXQuYXJhbmdlKHJjU2xpY2UuY29sLnN0YXJ0LFxuICAgICAgICAgICAgICAgICAgICAgICAgTWF0aC5taW4oQVswXS5sZW5ndGgsIHJjU2xpY2UuY29sLmVuZCksXG4gICAgICAgICAgICAgICAgICAgICAgICByY1NsaWNlLmNvbC5zdGVwKTtcbiAgbWwuZm9yRWFjaChmdW5jdGlvbihtLCBpKSB7XG4gICAgbmwuZm9yRWFjaChmdW5jdGlvbihuLCBqKSB7XG4gICAgICBBW21dW25dID0gQltpXVtqXTtcbiAgICB9KTtcbiAgfSk7XG4gIHJldHVybiBBO1xufTtcblxuXG4vLyBbMSwyLDNdIC0+XG4vLyBbWzEsMCwwXSxbMCwyLDBdLFswLDAsM11dXG5qU3RhdC5kaWFnb25hbCA9IGZ1bmN0aW9uIGRpYWdvbmFsKGRpYWdBcnJheSkge1xuICB2YXIgbWF0ID0galN0YXQuemVyb3MoZGlhZ0FycmF5Lmxlbmd0aCwgZGlhZ0FycmF5Lmxlbmd0aCk7XG4gIGRpYWdBcnJheS5mb3JFYWNoKGZ1bmN0aW9uKHQsIGkpIHtcbiAgICBtYXRbaV1baV0gPSB0O1xuICB9KTtcbiAgcmV0dXJuIG1hdDtcbn07XG5cblxuLy8gcmV0dXJuIGNvcHkgb2YgQVxualN0YXQuY29weSA9IGZ1bmN0aW9uIGNvcHkoQSkge1xuICByZXR1cm4gQS5tYXAoZnVuY3Rpb24ocm93KSB7XG4gICAgaWYgKGlzTnVtYmVyKHJvdykpXG4gICAgICByZXR1cm4gcm93O1xuICAgIHJldHVybiByb3cubWFwKGZ1bmN0aW9uKHQpIHtcbiAgICAgIHJldHVybiB0O1xuICAgIH0pO1xuICB9KTtcbn07XG5cblxuLy8gVE9ETzogR28gb3ZlciB0aGlzIGVudGlyZSBpbXBsZW1lbnRhdGlvbi4gU2VlbXMgYSB0cmFnaWMgd2FzdGUgb2YgcmVzb3VyY2VzXG4vLyBkb2luZyBhbGwgdGhpcyB3b3JrLiBJbnN0ZWFkLCBhbmQgd2hpbGUgdWdseSwgdXNlIG5ldyBGdW5jdGlvbigpIHRvIGdlbmVyYXRlXG4vLyBhIGN1c3RvbSBmdW5jdGlvbiBmb3IgZWFjaCBzdGF0aWMgbWV0aG9kLlxuXG4vLyBRdWljayByZWZlcmVuY2UuXG52YXIgalByb3RvID0galN0YXQucHJvdG90eXBlO1xuXG4vLyBEZWZhdWx0IGxlbmd0aC5cbmpQcm90by5sZW5ndGggPSAwO1xuXG4vLyBGb3IgaW50ZXJuYWwgdXNlIG9ubHkuXG4vLyBUT0RPOiBDaGVjayBpZiB0aGV5J3JlIGFjdHVhbGx5IHVzZWQsIGFuZCBpZiB0aGV5IGFyZSB0aGVuIHJlbmFtZSB0aGVtXG4vLyB0byBfKlxualByb3RvLnB1c2ggPSBBcnJheS5wcm90b3R5cGUucHVzaDtcbmpQcm90by5zb3J0ID0gQXJyYXkucHJvdG90eXBlLnNvcnQ7XG5qUHJvdG8uc3BsaWNlID0gQXJyYXkucHJvdG90eXBlLnNwbGljZTtcbmpQcm90by5zbGljZSA9IEFycmF5LnByb3RvdHlwZS5zbGljZTtcblxuXG4vLyBSZXR1cm4gYSBjbGVhbiBhcnJheS5cbmpQcm90by50b0FycmF5ID0gZnVuY3Rpb24gdG9BcnJheSgpIHtcbiAgcmV0dXJuIHRoaXMubGVuZ3RoID4gMSA/IHNsaWNlLmNhbGwodGhpcykgOiBzbGljZS5jYWxsKHRoaXMpWzBdO1xufTtcblxuXG4vLyBNYXAgYSBmdW5jdGlvbiB0byBhIG1hdHJpeCBvciB2ZWN0b3IuXG5qUHJvdG8ubWFwID0gZnVuY3Rpb24gbWFwKGZ1bmMsIHRvQWx0ZXIpIHtcbiAgcmV0dXJuIGpTdGF0KGpTdGF0Lm1hcCh0aGlzLCBmdW5jLCB0b0FsdGVyKSk7XG59O1xuXG5cbi8vIEN1bXVsYXRpdmVseSBjb21iaW5lIHRoZSBlbGVtZW50cyBvZiBhIG1hdHJpeCBvciB2ZWN0b3IgdXNpbmcgYSBmdW5jdGlvbi5cbmpQcm90by5jdW1yZWR1Y2UgPSBmdW5jdGlvbiBjdW1yZWR1Y2UoZnVuYywgdG9BbHRlcikge1xuICByZXR1cm4galN0YXQoalN0YXQuY3VtcmVkdWNlKHRoaXMsIGZ1bmMsIHRvQWx0ZXIpKTtcbn07XG5cblxuLy8gRGVzdHJ1Y3RpdmVseSBhbHRlciBhbiBhcnJheS5cbmpQcm90by5hbHRlciA9IGZ1bmN0aW9uIGFsdGVyKGZ1bmMpIHtcbiAgalN0YXQuYWx0ZXIodGhpcywgZnVuYyk7XG4gIHJldHVybiB0aGlzO1xufTtcblxuXG4vLyBFeHRlbmQgcHJvdG90eXBlIHdpdGggbWV0aG9kcyB0aGF0IGhhdmUgbm8gYXJndW1lbnQuXG4oZnVuY3Rpb24oZnVuY3MpIHtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBmdW5jcy5sZW5ndGg7IGkrKykgKGZ1bmN0aW9uKHBhc3NmdW5jKSB7XG4gICAgalByb3RvW3Bhc3NmdW5jXSA9IGZ1bmN0aW9uKGZ1bmMpIHtcbiAgICAgIHZhciBzZWxmID0gdGhpcyxcbiAgICAgIHJlc3VsdHM7XG4gICAgICAvLyBDaGVjayBmb3IgY2FsbGJhY2suXG4gICAgICBpZiAoZnVuYykge1xuICAgICAgICBzZXRUaW1lb3V0KGZ1bmN0aW9uKCkge1xuICAgICAgICAgIGZ1bmMuY2FsbChzZWxmLCBqUHJvdG9bcGFzc2Z1bmNdLmNhbGwoc2VsZikpO1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICB9XG4gICAgICByZXN1bHRzID0galN0YXRbcGFzc2Z1bmNdKHRoaXMpO1xuICAgICAgcmV0dXJuIGlzQXJyYXkocmVzdWx0cykgPyBqU3RhdChyZXN1bHRzKSA6IHJlc3VsdHM7XG4gICAgfTtcbiAgfSkoZnVuY3NbaV0pO1xufSkoJ3RyYW5zcG9zZSBjbGVhciBzeW1tZXRyaWMgcm93cyBjb2xzIGRpbWVuc2lvbnMgZGlhZyBhbnRpZGlhZycuc3BsaXQoJyAnKSk7XG5cblxuLy8gRXh0ZW5kIHByb3RvdHlwZSB3aXRoIG1ldGhvZHMgdGhhdCBoYXZlIG9uZSBhcmd1bWVudC5cbihmdW5jdGlvbihmdW5jcykge1xuICBmb3IgKHZhciBpID0gMDsgaSA8IGZ1bmNzLmxlbmd0aDsgaSsrKSAoZnVuY3Rpb24ocGFzc2Z1bmMpIHtcbiAgICBqUHJvdG9bcGFzc2Z1bmNdID0gZnVuY3Rpb24oaW5kZXgsIGZ1bmMpIHtcbiAgICAgIHZhciBzZWxmID0gdGhpcztcbiAgICAgIC8vIGNoZWNrIGZvciBjYWxsYmFja1xuICAgICAgaWYgKGZ1bmMpIHtcbiAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbigpIHtcbiAgICAgICAgICBmdW5jLmNhbGwoc2VsZiwgalByb3RvW3Bhc3NmdW5jXS5jYWxsKHNlbGYsIGluZGV4KSk7XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgIH1cbiAgICAgIHJldHVybiBqU3RhdChqU3RhdFtwYXNzZnVuY10odGhpcywgaW5kZXgpKTtcbiAgICB9O1xuICB9KShmdW5jc1tpXSk7XG59KSgncm93IGNvbCcuc3BsaXQoJyAnKSk7XG5cblxuLy8gRXh0ZW5kIHByb3RvdHlwZSB3aXRoIHNpbXBsZSBzaG9ydGN1dCBtZXRob2RzLlxuKGZ1bmN0aW9uKGZ1bmNzKSB7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgZnVuY3MubGVuZ3RoOyBpKyspIChmdW5jdGlvbihwYXNzZnVuYykge1xuICAgIGpQcm90b1twYXNzZnVuY10gPSBmdW5jdGlvbigpIHtcbiAgICAgIHJldHVybiBqU3RhdChqU3RhdFtwYXNzZnVuY10uYXBwbHkobnVsbCwgYXJndW1lbnRzKSk7XG4gICAgfTtcbiAgfSkoZnVuY3NbaV0pO1xufSkoJ2NyZWF0ZSB6ZXJvcyBvbmVzIHJhbmQgaWRlbnRpdHknLnNwbGl0KCcgJykpO1xuXG5cbi8vIEV4cG9zaW5nIGpTdGF0LlxucmV0dXJuIGpTdGF0O1xuXG59KE1hdGgpKTtcbihmdW5jdGlvbihqU3RhdCwgTWF0aCkge1xuXG52YXIgaXNGdW5jdGlvbiA9IGpTdGF0LnV0aWxzLmlzRnVuY3Rpb247XG5cbi8vIEFzY2VuZGluZyBmdW5jdGlvbnMgZm9yIHNvcnRcbmZ1bmN0aW9uIGFzY051bShhLCBiKSB7IHJldHVybiBhIC0gYjsgfVxuXG5mdW5jdGlvbiBjbGlwKGFyZywgbWluLCBtYXgpIHtcbiAgcmV0dXJuIE1hdGgubWF4KG1pbiwgTWF0aC5taW4oYXJnLCBtYXgpKTtcbn1cblxuXG4vLyBzdW0gb2YgYW4gYXJyYXlcbmpTdGF0LnN1bSA9IGZ1bmN0aW9uIHN1bShhcnIpIHtcbiAgdmFyIHN1bSA9IDA7XG4gIHZhciBpID0gYXJyLmxlbmd0aDtcbiAgd2hpbGUgKC0taSA+PSAwKVxuICAgIHN1bSArPSBhcnJbaV07XG4gIHJldHVybiBzdW07XG59O1xuXG5cbi8vIHN1bSBzcXVhcmVkXG5qU3RhdC5zdW1zcXJkID0gZnVuY3Rpb24gc3Vtc3FyZChhcnIpIHtcbiAgdmFyIHN1bSA9IDA7XG4gIHZhciBpID0gYXJyLmxlbmd0aDtcbiAgd2hpbGUgKC0taSA+PSAwKVxuICAgIHN1bSArPSBhcnJbaV0gKiBhcnJbaV07XG4gIHJldHVybiBzdW07XG59O1xuXG5cbi8vIHN1bSBvZiBzcXVhcmVkIGVycm9ycyBvZiBwcmVkaWN0aW9uIChTU0UpXG5qU3RhdC5zdW1zcWVyciA9IGZ1bmN0aW9uIHN1bXNxZXJyKGFycikge1xuICB2YXIgbWVhbiA9IGpTdGF0Lm1lYW4oYXJyKTtcbiAgdmFyIHN1bSA9IDA7XG4gIHZhciBpID0gYXJyLmxlbmd0aDtcbiAgdmFyIHRtcDtcbiAgd2hpbGUgKC0taSA+PSAwKSB7XG4gICAgdG1wID0gYXJyW2ldIC0gbWVhbjtcbiAgICBzdW0gKz0gdG1wICogdG1wO1xuICB9XG4gIHJldHVybiBzdW07XG59O1xuXG4vLyBzdW0gb2YgYW4gYXJyYXkgaW4gZWFjaCByb3dcbmpTdGF0LnN1bXJvdyA9IGZ1bmN0aW9uIHN1bXJvdyhhcnIpIHtcbiAgdmFyIHN1bSA9IDA7XG4gIHZhciBpID0gYXJyLmxlbmd0aDtcbiAgd2hpbGUgKC0taSA+PSAwKVxuICAgIHN1bSArPSBhcnJbaV07XG4gIHJldHVybiBzdW07XG59O1xuXG4vLyBwcm9kdWN0IG9mIGFuIGFycmF5XG5qU3RhdC5wcm9kdWN0ID0gZnVuY3Rpb24gcHJvZHVjdChhcnIpIHtcbiAgdmFyIHByb2QgPSAxO1xuICB2YXIgaSA9IGFyci5sZW5ndGg7XG4gIHdoaWxlICgtLWkgPj0gMClcbiAgICBwcm9kICo9IGFycltpXTtcbiAgcmV0dXJuIHByb2Q7XG59O1xuXG5cbi8vIG1pbmltdW0gdmFsdWUgb2YgYW4gYXJyYXlcbmpTdGF0Lm1pbiA9IGZ1bmN0aW9uIG1pbihhcnIpIHtcbiAgdmFyIGxvdyA9IGFyclswXTtcbiAgdmFyIGkgPSAwO1xuICB3aGlsZSAoKytpIDwgYXJyLmxlbmd0aClcbiAgICBpZiAoYXJyW2ldIDwgbG93KVxuICAgICAgbG93ID0gYXJyW2ldO1xuICByZXR1cm4gbG93O1xufTtcblxuXG4vLyBtYXhpbXVtIHZhbHVlIG9mIGFuIGFycmF5XG5qU3RhdC5tYXggPSBmdW5jdGlvbiBtYXgoYXJyKSB7XG4gIHZhciBoaWdoID0gYXJyWzBdO1xuICB2YXIgaSA9IDA7XG4gIHdoaWxlICgrK2kgPCBhcnIubGVuZ3RoKVxuICAgIGlmIChhcnJbaV0gPiBoaWdoKVxuICAgICAgaGlnaCA9IGFycltpXTtcbiAgcmV0dXJuIGhpZ2g7XG59O1xuXG5cbi8vIHVuaXF1ZSB2YWx1ZXMgb2YgYW4gYXJyYXlcbmpTdGF0LnVuaXF1ZSA9IGZ1bmN0aW9uIHVuaXF1ZShhcnIpIHtcbiAgdmFyIGhhc2ggPSB7fSwgX2FyciA9IFtdO1xuICBmb3IodmFyIGkgPSAwOyBpIDwgYXJyLmxlbmd0aDsgaSsrKSB7XG4gICAgaWYgKCFoYXNoW2FycltpXV0pIHtcbiAgICAgIGhhc2hbYXJyW2ldXSA9IHRydWU7XG4gICAgICBfYXJyLnB1c2goYXJyW2ldKTtcbiAgICB9XG4gIH1cbiAgcmV0dXJuIF9hcnI7XG59O1xuXG5cbi8vIG1lYW4gdmFsdWUgb2YgYW4gYXJyYXlcbmpTdGF0Lm1lYW4gPSBmdW5jdGlvbiBtZWFuKGFycikge1xuICByZXR1cm4galN0YXQuc3VtKGFycikgLyBhcnIubGVuZ3RoO1xufTtcblxuXG4vLyBtZWFuIHNxdWFyZWQgZXJyb3IgKE1TRSlcbmpTdGF0Lm1lYW5zcWVyciA9IGZ1bmN0aW9uIG1lYW5zcWVycihhcnIpIHtcbiAgcmV0dXJuIGpTdGF0LnN1bXNxZXJyKGFycikgLyBhcnIubGVuZ3RoO1xufTtcblxuXG4vLyBnZW9tZXRyaWMgbWVhbiBvZiBhbiBhcnJheVxualN0YXQuZ2VvbWVhbiA9IGZ1bmN0aW9uIGdlb21lYW4oYXJyKSB7XG4gIHZhciBsb2dzID0gYXJyLm1hcChNYXRoLmxvZylcbiAgdmFyIG1lYW5PZkxvZ3MgPSBqU3RhdC5tZWFuKGxvZ3MpXG4gIHJldHVybiBNYXRoLmV4cChtZWFuT2ZMb2dzKVxufTtcblxuXG4vLyBtZWRpYW4gb2YgYW4gYXJyYXlcbmpTdGF0Lm1lZGlhbiA9IGZ1bmN0aW9uIG1lZGlhbihhcnIpIHtcbiAgdmFyIGFycmxlbiA9IGFyci5sZW5ndGg7XG4gIHZhciBfYXJyID0gYXJyLnNsaWNlKCkuc29ydChhc2NOdW0pO1xuICAvLyBjaGVjayBpZiBhcnJheSBpcyBldmVuIG9yIG9kZCwgdGhlbiByZXR1cm4gdGhlIGFwcHJvcHJpYXRlXG4gIHJldHVybiAhKGFycmxlbiAmIDEpXG4gICAgPyAoX2FyclsoYXJybGVuIC8gMikgLSAxIF0gKyBfYXJyWyhhcnJsZW4gLyAyKV0pIC8gMlxuICAgIDogX2FyclsoYXJybGVuIC8gMikgfCAwIF07XG59O1xuXG5cbi8vIGN1bXVsYXRpdmUgc3VtIG9mIGFuIGFycmF5XG5qU3RhdC5jdW1zdW0gPSBmdW5jdGlvbiBjdW1zdW0oYXJyKSB7XG4gIHJldHVybiBqU3RhdC5jdW1yZWR1Y2UoYXJyLCBmdW5jdGlvbiAoYSwgYikgeyByZXR1cm4gYSArIGI7IH0pO1xufTtcblxuXG4vLyBjdW11bGF0aXZlIHByb2R1Y3Qgb2YgYW4gYXJyYXlcbmpTdGF0LmN1bXByb2QgPSBmdW5jdGlvbiBjdW1wcm9kKGFycikge1xuICByZXR1cm4galN0YXQuY3VtcmVkdWNlKGFyciwgZnVuY3Rpb24gKGEsIGIpIHsgcmV0dXJuIGEgKiBiOyB9KTtcbn07XG5cblxuLy8gc3VjY2Vzc2l2ZSBkaWZmZXJlbmNlcyBvZiBhIHNlcXVlbmNlXG5qU3RhdC5kaWZmID0gZnVuY3Rpb24gZGlmZihhcnIpIHtcbiAgdmFyIGRpZmZzID0gW107XG4gIHZhciBhcnJMZW4gPSBhcnIubGVuZ3RoO1xuICB2YXIgaTtcbiAgZm9yIChpID0gMTsgaSA8IGFyckxlbjsgaSsrKVxuICAgIGRpZmZzLnB1c2goYXJyW2ldIC0gYXJyW2kgLSAxXSk7XG4gIHJldHVybiBkaWZmcztcbn07XG5cblxuLy8gcmFua3Mgb2YgYW4gYXJyYXlcbmpTdGF0LnJhbmsgPSBmdW5jdGlvbiAoYXJyKSB7XG4gIHZhciBpO1xuICB2YXIgZGlzdGluY3ROdW1iZXJzID0gW107XG4gIHZhciBudW1iZXJDb3VudHMgPSB7fTtcbiAgZm9yIChpID0gMDsgaSA8IGFyci5sZW5ndGg7IGkrKykge1xuICAgIHZhciBudW1iZXIgPSBhcnJbaV07XG4gICAgaWYgKG51bWJlckNvdW50c1tudW1iZXJdKSB7XG4gICAgICBudW1iZXJDb3VudHNbbnVtYmVyXSsrO1xuICAgIH0gZWxzZSB7XG4gICAgICBudW1iZXJDb3VudHNbbnVtYmVyXSA9IDE7XG4gICAgICBkaXN0aW5jdE51bWJlcnMucHVzaChudW1iZXIpO1xuICAgIH1cbiAgfVxuXG4gIHZhciBzb3J0ZWREaXN0aW5jdE51bWJlcnMgPSBkaXN0aW5jdE51bWJlcnMuc29ydChhc2NOdW0pO1xuICB2YXIgbnVtYmVyUmFua3MgPSB7fTtcbiAgdmFyIGN1cnJlbnRSYW5rID0gMTtcbiAgZm9yIChpID0gMDsgaSA8IHNvcnRlZERpc3RpbmN0TnVtYmVycy5sZW5ndGg7IGkrKykge1xuICAgIHZhciBudW1iZXIgPSBzb3J0ZWREaXN0aW5jdE51bWJlcnNbaV07XG4gICAgdmFyIGNvdW50ID0gbnVtYmVyQ291bnRzW251bWJlcl07XG4gICAgdmFyIGZpcnN0ID0gY3VycmVudFJhbms7XG4gICAgdmFyIGxhc3QgPSBjdXJyZW50UmFuayArIGNvdW50IC0gMTtcbiAgICB2YXIgcmFuayA9IChmaXJzdCArIGxhc3QpIC8gMjtcbiAgICBudW1iZXJSYW5rc1tudW1iZXJdID0gcmFuaztcbiAgICBjdXJyZW50UmFuayArPSBjb3VudDtcbiAgfVxuXG4gIHJldHVybiBhcnIubWFwKGZ1bmN0aW9uIChudW1iZXIpIHtcbiAgICByZXR1cm4gbnVtYmVyUmFua3NbbnVtYmVyXTtcbiAgfSk7XG59O1xuXG5cbi8vIG1vZGUgb2YgYW4gYXJyYXlcbi8vIGlmIHRoZXJlIGFyZSBtdWx0aXBsZSBtb2RlcyBvZiBhbiBhcnJheSwgcmV0dXJuIGFsbCBvZiB0aGVtXG4vLyBpcyB0aGlzIHRoZSBhcHByb3ByaWF0ZSB3YXkgb2YgaGFuZGxpbmcgaXQ/XG5qU3RhdC5tb2RlID0gZnVuY3Rpb24gbW9kZShhcnIpIHtcbiAgdmFyIGFyckxlbiA9IGFyci5sZW5ndGg7XG4gIHZhciBfYXJyID0gYXJyLnNsaWNlKCkuc29ydChhc2NOdW0pO1xuICB2YXIgY291bnQgPSAxO1xuICB2YXIgbWF4Q291bnQgPSAwO1xuICB2YXIgbnVtTWF4Q291bnQgPSAwO1xuICB2YXIgbW9kZV9hcnIgPSBbXTtcbiAgdmFyIGk7XG5cbiAgZm9yIChpID0gMDsgaSA8IGFyckxlbjsgaSsrKSB7XG4gICAgaWYgKF9hcnJbaV0gPT09IF9hcnJbaSArIDFdKSB7XG4gICAgICBjb3VudCsrO1xuICAgIH0gZWxzZSB7XG4gICAgICBpZiAoY291bnQgPiBtYXhDb3VudCkge1xuICAgICAgICBtb2RlX2FyciA9IFtfYXJyW2ldXTtcbiAgICAgICAgbWF4Q291bnQgPSBjb3VudDtcbiAgICAgICAgbnVtTWF4Q291bnQgPSAwO1xuICAgICAgfVxuICAgICAgLy8gYXJlIHRoZXJlIG11bHRpcGxlIG1heCBjb3VudHNcbiAgICAgIGVsc2UgaWYgKGNvdW50ID09PSBtYXhDb3VudCkge1xuICAgICAgICBtb2RlX2Fyci5wdXNoKF9hcnJbaV0pO1xuICAgICAgICBudW1NYXhDb3VudCsrO1xuICAgICAgfVxuICAgICAgLy8gcmVzZXR0aW5nIGNvdW50IGZvciBuZXcgdmFsdWUgaW4gYXJyYXlcbiAgICAgIGNvdW50ID0gMTtcbiAgICB9XG4gIH1cblxuICByZXR1cm4gbnVtTWF4Q291bnQgPT09IDAgPyBtb2RlX2FyclswXSA6IG1vZGVfYXJyO1xufTtcblxuXG4vLyByYW5nZSBvZiBhbiBhcnJheVxualN0YXQucmFuZ2UgPSBmdW5jdGlvbiByYW5nZShhcnIpIHtcbiAgcmV0dXJuIGpTdGF0Lm1heChhcnIpIC0galN0YXQubWluKGFycik7XG59O1xuXG4vLyB2YXJpYW5jZSBvZiBhbiBhcnJheVxuLy8gZmxhZyA9IHRydWUgaW5kaWNhdGVzIHNhbXBsZSBpbnN0ZWFkIG9mIHBvcHVsYXRpb25cbmpTdGF0LnZhcmlhbmNlID0gZnVuY3Rpb24gdmFyaWFuY2UoYXJyLCBmbGFnKSB7XG4gIHJldHVybiBqU3RhdC5zdW1zcWVycihhcnIpIC8gKGFyci5sZW5ndGggLSAoZmxhZyA/IDEgOiAwKSk7XG59O1xuXG4vLyBwb29sZWQgdmFyaWFuY2Ugb2YgYW4gYXJyYXkgb2YgYXJyYXlzXG5qU3RhdC5wb29sZWR2YXJpYW5jZSA9IGZ1bmN0aW9uIHBvb2xlZHZhcmlhbmNlKGFycikge1xuICB2YXIgc3Vtc3FlcnIgPSBhcnIucmVkdWNlKGZ1bmN0aW9uIChhLCBzYW1wbGVzKSB7cmV0dXJuIGEgKyBqU3RhdC5zdW1zcWVycihzYW1wbGVzKTt9LCAwKTtcbiAgdmFyIGNvdW50ID0gYXJyLnJlZHVjZShmdW5jdGlvbiAoYSwgc2FtcGxlcykge3JldHVybiBhICsgc2FtcGxlcy5sZW5ndGg7fSwgMCk7XG4gIHJldHVybiBzdW1zcWVyciAvIChjb3VudCAtIGFyci5sZW5ndGgpO1xufTtcblxuLy8gZGV2aWF0aW9uIG9mIGFuIGFycmF5XG5qU3RhdC5kZXZpYXRpb24gPSBmdW5jdGlvbiAoYXJyKSB7XG4gIHZhciBtZWFuID0galN0YXQubWVhbihhcnIpO1xuICB2YXIgYXJybGVuID0gYXJyLmxlbmd0aDtcbiAgdmFyIGRldiA9IG5ldyBBcnJheShhcnJsZW4pO1xuICBmb3IgKHZhciBpID0gMDsgaSA8IGFycmxlbjsgaSsrKSB7XG4gICAgZGV2W2ldID0gYXJyW2ldIC0gbWVhbjtcbiAgfVxuICByZXR1cm4gZGV2O1xufTtcblxuLy8gc3RhbmRhcmQgZGV2aWF0aW9uIG9mIGFuIGFycmF5XG4vLyBmbGFnID0gdHJ1ZSBpbmRpY2F0ZXMgc2FtcGxlIGluc3RlYWQgb2YgcG9wdWxhdGlvblxualN0YXQuc3RkZXYgPSBmdW5jdGlvbiBzdGRldihhcnIsIGZsYWcpIHtcbiAgcmV0dXJuIE1hdGguc3FydChqU3RhdC52YXJpYW5jZShhcnIsIGZsYWcpKTtcbn07XG5cbi8vIHBvb2xlZCBzdGFuZGFyZCBkZXZpYXRpb24gb2YgYW4gYXJyYXkgb2YgYXJyYXlzXG5qU3RhdC5wb29sZWRzdGRldiA9IGZ1bmN0aW9uIHBvb2xlZHN0ZGV2KGFycikge1xuICByZXR1cm4gTWF0aC5zcXJ0KGpTdGF0LnBvb2xlZHZhcmlhbmNlKGFycikpO1xufTtcblxuLy8gbWVhbiBkZXZpYXRpb24gKG1lYW4gYWJzb2x1dGUgZGV2aWF0aW9uKSBvZiBhbiBhcnJheVxualN0YXQubWVhbmRldiA9IGZ1bmN0aW9uIG1lYW5kZXYoYXJyKSB7XG4gIHZhciBtZWFuID0galN0YXQubWVhbihhcnIpO1xuICB2YXIgYSA9IFtdO1xuICBmb3IgKHZhciBpID0gYXJyLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XG4gICAgYS5wdXNoKE1hdGguYWJzKGFycltpXSAtIG1lYW4pKTtcbiAgfVxuICByZXR1cm4galN0YXQubWVhbihhKTtcbn07XG5cblxuLy8gbWVkaWFuIGRldmlhdGlvbiAobWVkaWFuIGFic29sdXRlIGRldmlhdGlvbikgb2YgYW4gYXJyYXlcbmpTdGF0Lm1lZGRldiA9IGZ1bmN0aW9uIG1lZGRldihhcnIpIHtcbiAgdmFyIG1lZGlhbiA9IGpTdGF0Lm1lZGlhbihhcnIpO1xuICB2YXIgYSA9IFtdO1xuICBmb3IgKHZhciBpID0gYXJyLmxlbmd0aCAtIDE7IGkgPj0gMDsgaS0tKSB7XG4gICAgYS5wdXNoKE1hdGguYWJzKGFycltpXSAtIG1lZGlhbikpO1xuICB9XG4gIHJldHVybiBqU3RhdC5tZWRpYW4oYSk7XG59O1xuXG5cbi8vIGNvZWZmaWNpZW50IG9mIHZhcmlhdGlvblxualN0YXQuY29lZmZ2YXIgPSBmdW5jdGlvbiBjb2VmZnZhcihhcnIpIHtcbiAgcmV0dXJuIGpTdGF0LnN0ZGV2KGFycikgLyBqU3RhdC5tZWFuKGFycik7XG59O1xuXG5cbi8vIHF1YXJ0aWxlcyBvZiBhbiBhcnJheVxualN0YXQucXVhcnRpbGVzID0gZnVuY3Rpb24gcXVhcnRpbGVzKGFycikge1xuICB2YXIgYXJybGVuID0gYXJyLmxlbmd0aDtcbiAgdmFyIF9hcnIgPSBhcnIuc2xpY2UoKS5zb3J0KGFzY051bSk7XG4gIHJldHVybiBbXG4gICAgX2FyclsgTWF0aC5yb3VuZCgoYXJybGVuKSAvIDQpIC0gMSBdLFxuICAgIF9hcnJbIE1hdGgucm91bmQoKGFycmxlbikgLyAyKSAtIDEgXSxcbiAgICBfYXJyWyBNYXRoLnJvdW5kKChhcnJsZW4pICogMyAvIDQpIC0gMSBdXG4gIF07XG59O1xuXG5cbi8vIEFyYml0YXJ5IHF1YW50aWxlcyBvZiBhbiBhcnJheS4gRGlyZWN0IHBvcnQgb2YgdGhlIHNjaXB5LnN0YXRzXG4vLyBpbXBsZW1lbnRhdGlvbiBieSBQaWVycmUgR0YgR2VyYXJkLU1hcmNoYW50LlxualN0YXQucXVhbnRpbGVzID0gZnVuY3Rpb24gcXVhbnRpbGVzKGFyciwgcXVhbnRpbGVzQXJyYXksIGFscGhhcCwgYmV0YXApIHtcbiAgdmFyIHNvcnRlZEFycmF5ID0gYXJyLnNsaWNlKCkuc29ydChhc2NOdW0pO1xuICB2YXIgcXVhbnRpbGVWYWxzID0gW3F1YW50aWxlc0FycmF5Lmxlbmd0aF07XG4gIHZhciBuID0gYXJyLmxlbmd0aDtcbiAgdmFyIGksIHAsIG0sIGFsZXBoLCBrLCBnYW1tYTtcblxuICBpZiAodHlwZW9mIGFscGhhcCA9PT0gJ3VuZGVmaW5lZCcpXG4gICAgYWxwaGFwID0gMyAvIDg7XG4gIGlmICh0eXBlb2YgYmV0YXAgPT09ICd1bmRlZmluZWQnKVxuICAgIGJldGFwID0gMyAvIDg7XG5cbiAgZm9yIChpID0gMDsgaSA8IHF1YW50aWxlc0FycmF5Lmxlbmd0aDsgaSsrKSB7XG4gICAgcCA9IHF1YW50aWxlc0FycmF5W2ldO1xuICAgIG0gPSBhbHBoYXAgKyBwICogKDEgLSBhbHBoYXAgLSBiZXRhcCk7XG4gICAgYWxlcGggPSBuICogcCArIG07XG4gICAgayA9IE1hdGguZmxvb3IoY2xpcChhbGVwaCwgMSwgbiAtIDEpKTtcbiAgICBnYW1tYSA9IGNsaXAoYWxlcGggLSBrLCAwLCAxKTtcbiAgICBxdWFudGlsZVZhbHNbaV0gPSAoMSAtIGdhbW1hKSAqIHNvcnRlZEFycmF5W2sgLSAxXSArIGdhbW1hICogc29ydGVkQXJyYXlba107XG4gIH1cblxuICByZXR1cm4gcXVhbnRpbGVWYWxzO1xufTtcblxuLy8gUmV0dXJuIHRoZSBrLXRoIHBlcmNlbnRpbGUgb2YgdmFsdWVzIGluIGEgcmFuZ2UsIHdoZXJlIGsgaXMgaW4gdGhlIHJhbmdlIDAuLjEsIGluY2x1c2l2ZS5cbi8vIFBhc3NpbmcgdHJ1ZSBmb3IgdGhlIGV4Y2x1c2l2ZSBwYXJhbWV0ZXIgZXhjbHVkZXMgYm90aCBlbmRwb2ludHMgb2YgdGhlIHJhbmdlLlxualN0YXQucGVyY2VudGlsZSA9IGZ1bmN0aW9uIHBlcmNlbnRpbGUoYXJyLCBrLCBleGNsdXNpdmUpIHtcbiAgdmFyIF9hcnIgPSBhcnIuc2xpY2UoKS5zb3J0KGFzY051bSk7XG4gIHZhciByZWFsSW5kZXggPSBrICogKF9hcnIubGVuZ3RoICsgKGV4Y2x1c2l2ZSA/IDEgOiAtMSkpICsgKGV4Y2x1c2l2ZSA/IDAgOiAxKTtcbiAgdmFyIGluZGV4ID0gcGFyc2VJbnQocmVhbEluZGV4KTtcbiAgdmFyIGZyYWMgPSByZWFsSW5kZXggLSBpbmRleDtcbiAgaWYgKGluZGV4ICsgMSA8IF9hcnIubGVuZ3RoKSB7XG4gICAgcmV0dXJuIF9hcnJbaW5kZXggLSAxXSArIGZyYWMgKiAoX2FycltpbmRleF0gLSBfYXJyW2luZGV4IC0gMV0pO1xuICB9IGVsc2Uge1xuICAgIHJldHVybiBfYXJyW2luZGV4IC0gMV07XG4gIH1cbn1cblxuLy8gVGhlIHBlcmNlbnRpbGUgcmFuayBvZiBzY29yZSBpbiBhIGdpdmVuIGFycmF5LiBSZXR1cm5zIHRoZSBwZXJjZW50YWdlXG4vLyBvZiBhbGwgdmFsdWVzIGluIHRoZSBpbnB1dCBhcnJheSB0aGF0IGFyZSBsZXNzIHRoYW4gKGtpbmQ9J3N0cmljdCcpIG9yXG4vLyBsZXNzIG9yIGVxdWFsIHRoYW4gKGtpbmQ9J3dlYWsnKSBzY29yZS4gRGVmYXVsdCBpcyB3ZWFrLlxualN0YXQucGVyY2VudGlsZU9mU2NvcmUgPSBmdW5jdGlvbiBwZXJjZW50aWxlT2ZTY29yZShhcnIsIHNjb3JlLCBraW5kKSB7XG4gIHZhciBjb3VudGVyID0gMDtcbiAgdmFyIGxlbiA9IGFyci5sZW5ndGg7XG4gIHZhciBzdHJpY3QgPSBmYWxzZTtcbiAgdmFyIHZhbHVlLCBpO1xuXG4gIGlmIChraW5kID09PSAnc3RyaWN0JylcbiAgICBzdHJpY3QgPSB0cnVlO1xuXG4gIGZvciAoaSA9IDA7IGkgPCBsZW47IGkrKykge1xuICAgIHZhbHVlID0gYXJyW2ldO1xuICAgIGlmICgoc3RyaWN0ICYmIHZhbHVlIDwgc2NvcmUpIHx8XG4gICAgICAgICghc3RyaWN0ICYmIHZhbHVlIDw9IHNjb3JlKSkge1xuICAgICAgY291bnRlcisrO1xuICAgIH1cbiAgfVxuXG4gIHJldHVybiBjb3VudGVyIC8gbGVuO1xufTtcblxuXG4vLyBIaXN0b2dyYW0gKGJpbiBjb3VudCkgZGF0YVxualN0YXQuaGlzdG9ncmFtID0gZnVuY3Rpb24gaGlzdG9ncmFtKGFyciwgYmluQ250KSB7XG4gIGJpbkNudCA9IGJpbkNudCB8fCA0O1xuICB2YXIgZmlyc3QgPSBqU3RhdC5taW4oYXJyKTtcbiAgdmFyIGJpbldpZHRoID0gKGpTdGF0Lm1heChhcnIpIC0gZmlyc3QpIC8gYmluQ250O1xuICB2YXIgbGVuID0gYXJyLmxlbmd0aDtcbiAgdmFyIGJpbnMgPSBbXTtcbiAgdmFyIGk7XG5cbiAgZm9yIChpID0gMDsgaSA8IGJpbkNudDsgaSsrKVxuICAgIGJpbnNbaV0gPSAwO1xuICBmb3IgKGkgPSAwOyBpIDwgbGVuOyBpKyspXG4gICAgYmluc1tNYXRoLm1pbihNYXRoLmZsb29yKCgoYXJyW2ldIC0gZmlyc3QpIC8gYmluV2lkdGgpKSwgYmluQ250IC0gMSldICs9IDE7XG5cbiAgcmV0dXJuIGJpbnM7XG59O1xuXG5cbi8vIGNvdmFyaWFuY2Ugb2YgdHdvIGFycmF5c1xualN0YXQuY292YXJpYW5jZSA9IGZ1bmN0aW9uIGNvdmFyaWFuY2UoYXJyMSwgYXJyMikge1xuICB2YXIgdSA9IGpTdGF0Lm1lYW4oYXJyMSk7XG4gIHZhciB2ID0galN0YXQubWVhbihhcnIyKTtcbiAgdmFyIGFycjFMZW4gPSBhcnIxLmxlbmd0aDtcbiAgdmFyIHNxX2RldiA9IG5ldyBBcnJheShhcnIxTGVuKTtcbiAgdmFyIGk7XG5cbiAgZm9yIChpID0gMDsgaSA8IGFycjFMZW47IGkrKylcbiAgICBzcV9kZXZbaV0gPSAoYXJyMVtpXSAtIHUpICogKGFycjJbaV0gLSB2KTtcblxuICByZXR1cm4galN0YXQuc3VtKHNxX2RldikgLyAoYXJyMUxlbiAtIDEpO1xufTtcblxuXG4vLyAocGVhcnNvbidzKSBwb3B1bGF0aW9uIGNvcnJlbGF0aW9uIGNvZWZmaWNpZW50LCByaG9cbmpTdGF0LmNvcnJjb2VmZiA9IGZ1bmN0aW9uIGNvcnJjb2VmZihhcnIxLCBhcnIyKSB7XG4gIHJldHVybiBqU3RhdC5jb3ZhcmlhbmNlKGFycjEsIGFycjIpIC9cbiAgICAgIGpTdGF0LnN0ZGV2KGFycjEsIDEpIC9cbiAgICAgIGpTdGF0LnN0ZGV2KGFycjIsIDEpO1xufTtcblxuICAvLyAoc3BlYXJtYW4ncykgcmFuayBjb3JyZWxhdGlvbiBjb2VmZmljaWVudCwgc3BcbmpTdGF0LnNwZWFybWFuY29lZmYgPSAgZnVuY3Rpb24gKGFycjEsIGFycjIpIHtcbiAgYXJyMSA9IGpTdGF0LnJhbmsoYXJyMSk7XG4gIGFycjIgPSBqU3RhdC5yYW5rKGFycjIpO1xuICAvL3JldHVybiBwZWFyc29uJ3MgY29ycmVsYXRpb24gb2YgdGhlIHJhbmtzOlxuICByZXR1cm4galN0YXQuY29ycmNvZWZmKGFycjEsIGFycjIpO1xufVxuXG5cbi8vIHN0YXRpc3RpY2FsIHN0YW5kYXJkaXplZCBtb21lbnRzIChnZW5lcmFsIGZvcm0gb2Ygc2tldy9rdXJ0KVxualN0YXQuc3Rhbk1vbWVudCA9IGZ1bmN0aW9uIHN0YW5Nb21lbnQoYXJyLCBuKSB7XG4gIHZhciBtdSA9IGpTdGF0Lm1lYW4oYXJyKTtcbiAgdmFyIHNpZ21hID0galN0YXQuc3RkZXYoYXJyKTtcbiAgdmFyIGxlbiA9IGFyci5sZW5ndGg7XG4gIHZhciBza2V3U3VtID0gMDtcblxuICBmb3IgKHZhciBpID0gMDsgaSA8IGxlbjsgaSsrKVxuICAgIHNrZXdTdW0gKz0gTWF0aC5wb3coKGFycltpXSAtIG11KSAvIHNpZ21hLCBuKTtcblxuICByZXR1cm4gc2tld1N1bSAvIGFyci5sZW5ndGg7XG59O1xuXG4vLyAocGVhcnNvbidzKSBtb21lbnQgY29lZmZpY2llbnQgb2Ygc2tld25lc3NcbmpTdGF0LnNrZXduZXNzID0gZnVuY3Rpb24gc2tld25lc3MoYXJyKSB7XG4gIHJldHVybiBqU3RhdC5zdGFuTW9tZW50KGFyciwgMyk7XG59O1xuXG4vLyAocGVhcnNvbidzKSAoZXhjZXNzKSBrdXJ0b3Npc1xualN0YXQua3VydG9zaXMgPSBmdW5jdGlvbiBrdXJ0b3NpcyhhcnIpIHtcbiAgcmV0dXJuIGpTdGF0LnN0YW5Nb21lbnQoYXJyLCA0KSAtIDM7XG59O1xuXG5cbnZhciBqUHJvdG8gPSBqU3RhdC5wcm90b3R5cGU7XG5cblxuLy8gRXh0ZW5kIGpQcm90byB3aXRoIG1ldGhvZCBmb3IgY2FsY3VsYXRpbmcgY3VtdWxhdGl2ZSBzdW1zIGFuZCBwcm9kdWN0cy5cbi8vIFRoaXMgZGlmZmVycyBmcm9tIHRoZSBzaW1pbGFyIGV4dGVuc2lvbiBiZWxvdyBhcyBjdW1zdW0gYW5kIGN1bXByb2Qgc2hvdWxkXG4vLyBub3QgYmUgcnVuIGFnYWluIGluIHRoZSBjYXNlIGZ1bGxib29sID09PSB0cnVlLlxuLy8gSWYgYSBtYXRyaXggaXMgcGFzc2VkLCBhdXRvbWF0aWNhbGx5IGFzc3VtZSBvcGVyYXRpb24gc2hvdWxkIGJlIGRvbmUgb24gdGhlXG4vLyBjb2x1bW5zLlxuKGZ1bmN0aW9uKGZ1bmNzKSB7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgZnVuY3MubGVuZ3RoOyBpKyspIChmdW5jdGlvbihwYXNzZnVuYykge1xuICAgIC8vIElmIGEgbWF0cml4IGlzIHBhc3NlZCwgYXV0b21hdGljYWxseSBhc3N1bWUgb3BlcmF0aW9uIHNob3VsZCBiZSBkb25lIG9uXG4gICAgLy8gdGhlIGNvbHVtbnMuXG4gICAgalByb3RvW3Bhc3NmdW5jXSA9IGZ1bmN0aW9uKGZ1bGxib29sLCBmdW5jKSB7XG4gICAgICB2YXIgYXJyID0gW107XG4gICAgICB2YXIgaSA9IDA7XG4gICAgICB2YXIgdG1wdGhpcyA9IHRoaXM7XG4gICAgICAvLyBBc3NpZ25tZW50IHJlYXNzaWduYXRpb24gZGVwZW5kaW5nIG9uIGhvdyBwYXJhbWV0ZXJzIHdlcmUgcGFzc2VkIGluLlxuICAgICAgaWYgKGlzRnVuY3Rpb24oZnVsbGJvb2wpKSB7XG4gICAgICAgIGZ1bmMgPSBmdWxsYm9vbDtcbiAgICAgICAgZnVsbGJvb2wgPSBmYWxzZTtcbiAgICAgIH1cbiAgICAgIC8vIENoZWNrIGlmIGEgY2FsbGJhY2sgd2FzIHBhc3NlZCB3aXRoIHRoZSBmdW5jdGlvbi5cbiAgICAgIGlmIChmdW5jKSB7XG4gICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7XG4gICAgICAgICAgZnVuYy5jYWxsKHRtcHRoaXMsIGpQcm90b1twYXNzZnVuY10uY2FsbCh0bXB0aGlzLCBmdWxsYm9vbCkpO1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgICB9XG4gICAgICAvLyBDaGVjayBpZiBtYXRyaXggYW5kIHJ1biBjYWxjdWxhdGlvbnMuXG4gICAgICBpZiAodGhpcy5sZW5ndGggPiAxKSB7XG4gICAgICAgIHRtcHRoaXMgPSBmdWxsYm9vbCA9PT0gdHJ1ZSA/IHRoaXMgOiB0aGlzLnRyYW5zcG9zZSgpO1xuICAgICAgICBmb3IgKDsgaSA8IHRtcHRoaXMubGVuZ3RoOyBpKyspXG4gICAgICAgICAgYXJyW2ldID0galN0YXRbcGFzc2Z1bmNdKHRtcHRoaXNbaV0pO1xuICAgICAgICByZXR1cm4gYXJyO1xuICAgICAgfVxuICAgICAgLy8gUGFzcyBmdWxsYm9vbCBpZiBvbmx5IHZlY3Rvciwgbm90IGEgbWF0cml4LiBmb3IgdmFyaWFuY2UgYW5kIHN0ZGV2LlxuICAgICAgcmV0dXJuIGpTdGF0W3Bhc3NmdW5jXSh0aGlzWzBdLCBmdWxsYm9vbCk7XG4gICAgfTtcbiAgfSkoZnVuY3NbaV0pO1xufSkoKCdjdW1zdW0gY3VtcHJvZCcpLnNwbGl0KCcgJykpO1xuXG5cbi8vIEV4dGVuZCBqUHJvdG8gd2l0aCBtZXRob2RzIHdoaWNoIGRvbid0IHJlcXVpcmUgYXJndW1lbnRzIGFuZCB3b3JrIG9uIGNvbHVtbnMuXG4oZnVuY3Rpb24oZnVuY3MpIHtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBmdW5jcy5sZW5ndGg7IGkrKykgKGZ1bmN0aW9uKHBhc3NmdW5jKSB7XG4gICAgLy8gSWYgYSBtYXRyaXggaXMgcGFzc2VkLCBhdXRvbWF0aWNhbGx5IGFzc3VtZSBvcGVyYXRpb24gc2hvdWxkIGJlIGRvbmUgb25cbiAgICAvLyB0aGUgY29sdW1ucy5cbiAgICBqUHJvdG9bcGFzc2Z1bmNdID0gZnVuY3Rpb24oZnVsbGJvb2wsIGZ1bmMpIHtcbiAgICAgIHZhciBhcnIgPSBbXTtcbiAgICAgIHZhciBpID0gMDtcbiAgICAgIHZhciB0bXB0aGlzID0gdGhpcztcbiAgICAgIC8vIEFzc2lnbm1lbnQgcmVhc3NpZ25hdGlvbiBkZXBlbmRpbmcgb24gaG93IHBhcmFtZXRlcnMgd2VyZSBwYXNzZWQgaW4uXG4gICAgICBpZiAoaXNGdW5jdGlvbihmdWxsYm9vbCkpIHtcbiAgICAgICAgZnVuYyA9IGZ1bGxib29sO1xuICAgICAgICBmdWxsYm9vbCA9IGZhbHNlO1xuICAgICAgfVxuICAgICAgLy8gQ2hlY2sgaWYgYSBjYWxsYmFjayB3YXMgcGFzc2VkIHdpdGggdGhlIGZ1bmN0aW9uLlxuICAgICAgaWYgKGZ1bmMpIHtcbiAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbigpIHtcbiAgICAgICAgICBmdW5jLmNhbGwodG1wdGhpcywgalByb3RvW3Bhc3NmdW5jXS5jYWxsKHRtcHRoaXMsIGZ1bGxib29sKSk7XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICAgIH1cbiAgICAgIC8vIENoZWNrIGlmIG1hdHJpeCBhbmQgcnVuIGNhbGN1bGF0aW9ucy5cbiAgICAgIGlmICh0aGlzLmxlbmd0aCA+IDEpIHtcbiAgICAgICAgaWYgKHBhc3NmdW5jICE9PSAnc3Vtcm93JylcbiAgICAgICAgICB0bXB0aGlzID0gZnVsbGJvb2wgPT09IHRydWUgPyB0aGlzIDogdGhpcy50cmFuc3Bvc2UoKTtcbiAgICAgICAgZm9yICg7IGkgPCB0bXB0aGlzLmxlbmd0aDsgaSsrKVxuICAgICAgICAgIGFycltpXSA9IGpTdGF0W3Bhc3NmdW5jXSh0bXB0aGlzW2ldKTtcbiAgICAgICAgcmV0dXJuIGZ1bGxib29sID09PSB0cnVlXG4gICAgICAgICAgICA/IGpTdGF0W3Bhc3NmdW5jXShqU3RhdC51dGlscy50b1ZlY3RvcihhcnIpKVxuICAgICAgICAgICAgOiBhcnI7XG4gICAgICB9XG4gICAgICAvLyBQYXNzIGZ1bGxib29sIGlmIG9ubHkgdmVjdG9yLCBub3QgYSBtYXRyaXguIGZvciB2YXJpYW5jZSBhbmQgc3RkZXYuXG4gICAgICByZXR1cm4galN0YXRbcGFzc2Z1bmNdKHRoaXNbMF0sIGZ1bGxib29sKTtcbiAgICB9O1xuICB9KShmdW5jc1tpXSk7XG59KSgoJ3N1bSBzdW1zcXJkIHN1bXNxZXJyIHN1bXJvdyBwcm9kdWN0IG1pbiBtYXggdW5pcXVlIG1lYW4gbWVhbnNxZXJyICcgK1xuICAgICdnZW9tZWFuIG1lZGlhbiBkaWZmIHJhbmsgbW9kZSByYW5nZSB2YXJpYW5jZSBkZXZpYXRpb24gc3RkZXYgbWVhbmRldiAnICtcbiAgICAnbWVkZGV2IGNvZWZmdmFyIHF1YXJ0aWxlcyBoaXN0b2dyYW0gc2tld25lc3Mga3VydG9zaXMnKS5zcGxpdCgnICcpKTtcblxuXG4vLyBFeHRlbmQgalByb3RvIHdpdGggZnVuY3Rpb25zIHRoYXQgdGFrZSBhcmd1bWVudHMuIE9wZXJhdGlvbnMgb24gbWF0cmljZXMgYXJlXG4vLyBkb25lIG9uIGNvbHVtbnMuXG4oZnVuY3Rpb24oZnVuY3MpIHtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBmdW5jcy5sZW5ndGg7IGkrKykgKGZ1bmN0aW9uKHBhc3NmdW5jKSB7XG4gICAgalByb3RvW3Bhc3NmdW5jXSA9IGZ1bmN0aW9uKCkge1xuICAgICAgdmFyIGFyciA9IFtdO1xuICAgICAgdmFyIGkgPSAwO1xuICAgICAgdmFyIHRtcHRoaXMgPSB0aGlzO1xuICAgICAgdmFyIGFyZ3MgPSBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMpO1xuICAgICAgdmFyIGNhbGxiYWNrRnVuY3Rpb247XG5cbiAgICAgIC8vIElmIHRoZSBsYXN0IGFyZ3VtZW50IGlzIGEgZnVuY3Rpb24sIHdlIGFzc3VtZSBpdCdzIGEgY2FsbGJhY2s7IHdlXG4gICAgICAvLyBzdHJpcCB0aGUgY2FsbGJhY2sgb3V0IGFuZCBjYWxsIHRoZSBmdW5jdGlvbiBhZ2Fpbi5cbiAgICAgIGlmIChpc0Z1bmN0aW9uKGFyZ3NbYXJncy5sZW5ndGggLSAxXSkpIHtcbiAgICAgICAgY2FsbGJhY2tGdW5jdGlvbiA9IGFyZ3NbYXJncy5sZW5ndGggLSAxXTtcbiAgICAgICAgdmFyIGFyZ3NUb1Bhc3MgPSBhcmdzLnNsaWNlKDAsIGFyZ3MubGVuZ3RoIC0gMSk7XG5cbiAgICAgICAgc2V0VGltZW91dChmdW5jdGlvbigpIHtcbiAgICAgICAgICBjYWxsYmFja0Z1bmN0aW9uLmNhbGwodG1wdGhpcyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgalByb3RvW3Bhc3NmdW5jXS5hcHBseSh0bXB0aGlzLCBhcmdzVG9QYXNzKSk7XG4gICAgICAgIH0pO1xuICAgICAgICByZXR1cm4gdGhpcztcblxuICAgICAgLy8gT3RoZXJ3aXNlIHdlIGN1cnJ5IHRoZSBmdW5jdGlvbiBhcmdzIGFuZCBjYWxsIG5vcm1hbGx5LlxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgY2FsbGJhY2tGdW5jdGlvbiA9IHVuZGVmaW5lZDtcbiAgICAgICAgdmFyIGN1cnJpZWRGdW5jdGlvbiA9IGZ1bmN0aW9uIGN1cnJpZWRGdW5jdGlvbih2ZWN0b3IpIHtcbiAgICAgICAgICByZXR1cm4galN0YXRbcGFzc2Z1bmNdLmFwcGx5KHRtcHRoaXMsIFt2ZWN0b3JdLmNvbmNhdChhcmdzKSk7XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8gSWYgdGhpcyBpcyBhIG1hdHJpeCwgcnVuIGNvbHVtbi1ieS1jb2x1bW4uXG4gICAgICBpZiAodGhpcy5sZW5ndGggPiAxKSB7XG4gICAgICAgIHRtcHRoaXMgPSB0bXB0aGlzLnRyYW5zcG9zZSgpO1xuICAgICAgICBmb3IgKDsgaSA8IHRtcHRoaXMubGVuZ3RoOyBpKyspXG4gICAgICAgICAgYXJyW2ldID0gY3VycmllZEZ1bmN0aW9uKHRtcHRoaXNbaV0pO1xuICAgICAgICByZXR1cm4gYXJyO1xuICAgICAgfVxuXG4gICAgICAvLyBPdGhlcndpc2UgcnVuIG9uIHRoZSB2ZWN0b3IuXG4gICAgICByZXR1cm4gY3VycmllZEZ1bmN0aW9uKHRoaXNbMF0pO1xuICAgIH07XG4gIH0pKGZ1bmNzW2ldKTtcbn0pKCdxdWFudGlsZXMgcGVyY2VudGlsZU9mU2NvcmUnLnNwbGl0KCcgJykpO1xuXG59KGpTdGF0LCBNYXRoKSk7XG4vLyBTcGVjaWFsIGZ1bmN0aW9ucyAvL1xuKGZ1bmN0aW9uKGpTdGF0LCBNYXRoKSB7XG5cbi8vIExvZy1nYW1tYSBmdW5jdGlvblxualN0YXQuZ2FtbWFsbiA9IGZ1bmN0aW9uIGdhbW1hbG4oeCkge1xuICB2YXIgaiA9IDA7XG4gIHZhciBjb2YgPSBbXG4gICAgNzYuMTgwMDkxNzI5NDcxNDYsIC04Ni41MDUzMjAzMjk0MTY3NywgMjQuMDE0MDk4MjQwODMwOTEsXG4gICAgLTEuMjMxNzM5NTcyNDUwMTU1LCAwLjEyMDg2NTA5NzM4NjYxNzllLTIsIC0wLjUzOTUyMzkzODQ5NTNlLTVcbiAgXTtcbiAgdmFyIHNlciA9IDEuMDAwMDAwMDAwMTkwMDE1O1xuICB2YXIgeHgsIHksIHRtcDtcbiAgdG1wID0gKHkgPSB4eCA9IHgpICsgNS41O1xuICB0bXAgLT0gKHh4ICsgMC41KSAqIE1hdGgubG9nKHRtcCk7XG4gIGZvciAoOyBqIDwgNjsgaisrKVxuICAgIHNlciArPSBjb2Zbal0gLyArK3k7XG4gIHJldHVybiBNYXRoLmxvZygyLjUwNjYyODI3NDYzMTAwMDUgKiBzZXIgLyB4eCkgLSB0bXA7XG59O1xuXG4vKlxuICogbG9nLWdhbW1hIGZ1bmN0aW9uIHRvIHN1cHBvcnQgcG9pc3NvbiBkaXN0cmlidXRpb24gc2FtcGxpbmcuIFRoZVxuICogYWxnb3JpdGhtIGNvbWVzIGZyb20gU1BFQ0ZVTiBieSBTaGFuamllIFpoYW5nIGFuZCBKaWFubWluZyBKaW4gYW5kIHRoZWlyXG4gKiBib29rIFwiQ29tcHV0YXRpb24gb2YgU3BlY2lhbCBGdW5jdGlvbnNcIiwgMTk5NiwgSm9obiBXaWxleSAmIFNvbnMsIEluYy5cbiAqL1xualN0YXQubG9nZ2FtID0gZnVuY3Rpb24gbG9nZ2FtKHgpIHtcbiAgdmFyIHgwLCB4MiwgeHAsIGdsLCBnbDA7XG4gIHZhciBrLCBuO1xuXG4gIHZhciBhID0gWzguMzMzMzMzMzMzMzMzMzMzZS0wMiwgLTIuNzc3Nzc3Nzc3Nzc3Nzc4ZS0wMyxcbiAgICAgICAgICA3LjkzNjUwNzkzNjUwNzkzN2UtMDQsIC01Ljk1MjM4MDk1MjM4MDk1MmUtMDQsXG4gICAgICAgICAgOC40MTc1MDg0MTc1MDg0MThlLTA0LCAtMS45MTc1MjY5MTc1MjY5MThlLTAzLFxuICAgICAgICAgIDYuNDEwMjU2NDEwMjU2NDEwZS0wMywgLTIuOTU1MDY1MzU5NDc3MTI0ZS0wMixcbiAgICAgICAgICAxLjc5NjQ0MzcyMzY4ODMwN2UtMDEsIC0xLjM5MjQzMjIxNjkwNTkwZSswMF07XG4gIHgwID0geDtcbiAgbiA9IDA7XG4gIGlmICgoeCA9PSAxLjApIHx8ICh4ID09IDIuMCkpIHtcbiAgICAgIHJldHVybiAwLjA7XG4gIH1cbiAgaWYgKHggPD0gNy4wKSB7XG4gICAgICBuID0gTWF0aC5mbG9vcig3IC0geCk7XG4gICAgICB4MCA9IHggKyBuO1xuICB9XG4gIHgyID0gMS4wIC8gKHgwICogeDApO1xuICB4cCA9IDIgKiBNYXRoLlBJO1xuICBnbDAgPSBhWzldO1xuICBmb3IgKGsgPSA4OyBrID49IDA7IGstLSkge1xuICAgICAgZ2wwICo9IHgyO1xuICAgICAgZ2wwICs9IGFba107XG4gIH1cbiAgZ2wgPSBnbDAgLyB4MCArIDAuNSAqIE1hdGgubG9nKHhwKSArICh4MCAtIDAuNSkgKiBNYXRoLmxvZyh4MCkgLSB4MDtcbiAgaWYgKHggPD0gNy4wKSB7XG4gICAgICBmb3IgKGsgPSAxOyBrIDw9IG47IGsrKykge1xuICAgICAgICAgIGdsIC09IE1hdGgubG9nKHgwIC0gMS4wKTtcbiAgICAgICAgICB4MCAtPSAxLjA7XG4gICAgICB9XG4gIH1cbiAgcmV0dXJuIGdsO1xufVxuXG4vLyBnYW1tYSBvZiB4XG5qU3RhdC5nYW1tYWZuID0gZnVuY3Rpb24gZ2FtbWFmbih4KSB7XG4gIHZhciBwID0gWy0xLjcxNjE4NTEzODg2NTQ5NSwgMjQuNzY1NjUwODA1NTc1OTIsIC0zNzkuODA0MjU2NDcwOTQ1NjMsXG4gICAgICAgICAgIDYyOS4zMzExNTUzMTI4MTg0LCA4NjYuOTY2MjAyNzkwNDEzMywgLTMxNDUxLjI3Mjk2ODg0ODM2NyxcbiAgICAgICAgICAgLTM2MTQ0LjQxMzQxODY5MTE3NiwgNjY0NTYuMTQzODIwMjQwNTRcbiAgXTtcbiAgdmFyIHEgPSBbLTMwLjg0MDIzMDAxMTk3MzksIDMxNS4zNTA2MjY5Nzk2MDQxNiwgLTEwMTUuMTU2MzY3NDkwMjE5MixcbiAgICAgICAgICAgLTMxMDcuNzcxNjcxNTcyMzExLCAyMjUzOC4xMTg0MjA5ODAxNTEsIDQ3NTUuODQ2Mjc3NTI3ODgxMSxcbiAgICAgICAgICAgLTEzNDY1OS45NTk4NjQ5NjkzLCAtMTE1MTMyLjI1OTY3NTU1MzVdO1xuICB2YXIgZmFjdCA9IGZhbHNlO1xuICB2YXIgbiA9IDA7XG4gIHZhciB4ZGVuID0gMDtcbiAgdmFyIHhudW0gPSAwO1xuICB2YXIgeSA9IHg7XG4gIHZhciBpLCB6LCB5aSwgcmVzO1xuICBpZiAoeCA+IDE3MS42MjQzNzY5NTM2MDc2KSB7XG4gICAgcmV0dXJuIEluZmluaXR5O1xuICB9XG4gIGlmICh5IDw9IDApIHtcbiAgICByZXMgPSB5ICUgMSArIDMuNmUtMTY7XG4gICAgaWYgKHJlcykge1xuICAgICAgZmFjdCA9ICghKHkgJiAxKSA/IDEgOiAtMSkgKiBNYXRoLlBJIC8gTWF0aC5zaW4oTWF0aC5QSSAqIHJlcyk7XG4gICAgICB5ID0gMSAtIHk7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiBJbmZpbml0eTtcbiAgICB9XG4gIH1cbiAgeWkgPSB5O1xuICBpZiAoeSA8IDEpIHtcbiAgICB6ID0geSsrO1xuICB9IGVsc2Uge1xuICAgIHogPSAoeSAtPSBuID0gKHkgfCAwKSAtIDEpIC0gMTtcbiAgfVxuICBmb3IgKGkgPSAwOyBpIDwgODsgKytpKSB7XG4gICAgeG51bSA9ICh4bnVtICsgcFtpXSkgKiB6O1xuICAgIHhkZW4gPSB4ZGVuICogeiArIHFbaV07XG4gIH1cbiAgcmVzID0geG51bSAvIHhkZW4gKyAxO1xuICBpZiAoeWkgPCB5KSB7XG4gICAgcmVzIC89IHlpO1xuICB9IGVsc2UgaWYgKHlpID4geSkge1xuICAgIGZvciAoaSA9IDA7IGkgPCBuOyArK2kpIHtcbiAgICAgIHJlcyAqPSB5O1xuICAgICAgeSsrO1xuICAgIH1cbiAgfVxuICBpZiAoZmFjdCkge1xuICAgIHJlcyA9IGZhY3QgLyByZXM7XG4gIH1cbiAgcmV0dXJuIHJlcztcbn07XG5cblxuLy8gbG93ZXIgaW5jb21wbGV0ZSBnYW1tYSBmdW5jdGlvbiwgd2hpY2ggaXMgdXN1YWxseSB0eXBlc2V0IHdpdGggYVxuLy8gbG93ZXItY2FzZSBncmVlayBnYW1tYSBhcyB0aGUgZnVuY3Rpb24gc3ltYm9sXG5qU3RhdC5nYW1tYXAgPSBmdW5jdGlvbiBnYW1tYXAoYSwgeCkge1xuICByZXR1cm4galN0YXQubG93UmVnR2FtbWEoYSwgeCkgKiBqU3RhdC5nYW1tYWZuKGEpO1xufTtcblxuXG4vLyBUaGUgbG93ZXIgcmVndWxhcml6ZWQgaW5jb21wbGV0ZSBnYW1tYSBmdW5jdGlvbiwgdXN1YWxseSB3cml0dGVuIFAoYSx4KVxualN0YXQubG93UmVnR2FtbWEgPSBmdW5jdGlvbiBsb3dSZWdHYW1tYShhLCB4KSB7XG4gIHZhciBhbG4gPSBqU3RhdC5nYW1tYWxuKGEpO1xuICB2YXIgYXAgPSBhO1xuICB2YXIgc3VtID0gMSAvIGE7XG4gIHZhciBkZWwgPSBzdW07XG4gIHZhciBiID0geCArIDEgLSBhO1xuICB2YXIgYyA9IDEgLyAxLjBlLTMwO1xuICB2YXIgZCA9IDEgLyBiO1xuICB2YXIgaCA9IGQ7XG4gIHZhciBpID0gMTtcbiAgLy8gY2FsY3VsYXRlIG1heGltdW0gbnVtYmVyIG9mIGl0dGVyYXRpb25zIHJlcXVpcmVkIGZvciBhXG4gIHZhciBJVE1BWCA9IC1+KE1hdGgubG9nKChhID49IDEpID8gYSA6IDEgLyBhKSAqIDguNSArIGEgKiAwLjQgKyAxNyk7XG4gIHZhciBhbjtcblxuICBpZiAoeCA8IDAgfHwgYSA8PSAwKSB7XG4gICAgcmV0dXJuIE5hTjtcbiAgfSBlbHNlIGlmICh4IDwgYSArIDEpIHtcbiAgICBmb3IgKDsgaSA8PSBJVE1BWDsgaSsrKSB7XG4gICAgICBzdW0gKz0gZGVsICo9IHggLyArK2FwO1xuICAgIH1cbiAgICByZXR1cm4gKHN1bSAqIE1hdGguZXhwKC14ICsgYSAqIE1hdGgubG9nKHgpIC0gKGFsbikpKTtcbiAgfVxuXG4gIGZvciAoOyBpIDw9IElUTUFYOyBpKyspIHtcbiAgICBhbiA9IC1pICogKGkgLSBhKTtcbiAgICBiICs9IDI7XG4gICAgZCA9IGFuICogZCArIGI7XG4gICAgYyA9IGIgKyBhbiAvIGM7XG4gICAgZCA9IDEgLyBkO1xuICAgIGggKj0gZCAqIGM7XG4gIH1cblxuICByZXR1cm4gKDEgLSBoICogTWF0aC5leHAoLXggKyBhICogTWF0aC5sb2coeCkgLSAoYWxuKSkpO1xufTtcblxuLy8gbmF0dXJhbCBsb2cgZmFjdG9yaWFsIG9mIG5cbmpTdGF0LmZhY3RvcmlhbGxuID0gZnVuY3Rpb24gZmFjdG9yaWFsbG4obikge1xuICByZXR1cm4gbiA8IDAgPyBOYU4gOiBqU3RhdC5nYW1tYWxuKG4gKyAxKTtcbn07XG5cbi8vIGZhY3RvcmlhbCBvZiBuXG5qU3RhdC5mYWN0b3JpYWwgPSBmdW5jdGlvbiBmYWN0b3JpYWwobikge1xuICByZXR1cm4gbiA8IDAgPyBOYU4gOiBqU3RhdC5nYW1tYWZuKG4gKyAxKTtcbn07XG5cbi8vIGNvbWJpbmF0aW9ucyBvZiBuLCBtXG5qU3RhdC5jb21iaW5hdGlvbiA9IGZ1bmN0aW9uIGNvbWJpbmF0aW9uKG4sIG0pIHtcbiAgLy8gbWFrZSBzdXJlIG4gb3IgbSBkb24ndCBleGNlZWQgdGhlIHVwcGVyIGxpbWl0IG9mIHVzYWJsZSB2YWx1ZXNcbiAgcmV0dXJuIChuID4gMTcwIHx8IG0gPiAxNzApXG4gICAgICA/IE1hdGguZXhwKGpTdGF0LmNvbWJpbmF0aW9ubG4obiwgbSkpXG4gICAgICA6IChqU3RhdC5mYWN0b3JpYWwobikgLyBqU3RhdC5mYWN0b3JpYWwobSkpIC8galN0YXQuZmFjdG9yaWFsKG4gLSBtKTtcbn07XG5cblxualN0YXQuY29tYmluYXRpb25sbiA9IGZ1bmN0aW9uIGNvbWJpbmF0aW9ubG4obiwgbSl7XG4gIHJldHVybiBqU3RhdC5mYWN0b3JpYWxsbihuKSAtIGpTdGF0LmZhY3RvcmlhbGxuKG0pIC0galN0YXQuZmFjdG9yaWFsbG4obiAtIG0pO1xufTtcblxuXG4vLyBwZXJtdXRhdGlvbnMgb2YgbiwgbVxualN0YXQucGVybXV0YXRpb24gPSBmdW5jdGlvbiBwZXJtdXRhdGlvbihuLCBtKSB7XG4gIHJldHVybiBqU3RhdC5mYWN0b3JpYWwobikgLyBqU3RhdC5mYWN0b3JpYWwobiAtIG0pO1xufTtcblxuXG4vLyBiZXRhIGZ1bmN0aW9uXG5qU3RhdC5iZXRhZm4gPSBmdW5jdGlvbiBiZXRhZm4oeCwgeSkge1xuICAvLyBlbnN1cmUgYXJndW1lbnRzIGFyZSBwb3NpdGl2ZVxuICBpZiAoeCA8PSAwIHx8IHkgPD0gMClcbiAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAvLyBtYWtlIHN1cmUgeCArIHkgZG9lc24ndCBleGNlZWQgdGhlIHVwcGVyIGxpbWl0IG9mIHVzYWJsZSB2YWx1ZXNcbiAgcmV0dXJuICh4ICsgeSA+IDE3MClcbiAgICAgID8gTWF0aC5leHAoalN0YXQuYmV0YWxuKHgsIHkpKVxuICAgICAgOiBqU3RhdC5nYW1tYWZuKHgpICogalN0YXQuZ2FtbWFmbih5KSAvIGpTdGF0LmdhbW1hZm4oeCArIHkpO1xufTtcblxuXG4vLyBuYXR1cmFsIGxvZ2FyaXRobSBvZiBiZXRhIGZ1bmN0aW9uXG5qU3RhdC5iZXRhbG4gPSBmdW5jdGlvbiBiZXRhbG4oeCwgeSkge1xuICByZXR1cm4galN0YXQuZ2FtbWFsbih4KSArIGpTdGF0LmdhbW1hbG4oeSkgLSBqU3RhdC5nYW1tYWxuKHggKyB5KTtcbn07XG5cblxuLy8gRXZhbHVhdGVzIHRoZSBjb250aW51ZWQgZnJhY3Rpb24gZm9yIGluY29tcGxldGUgYmV0YSBmdW5jdGlvbiBieSBtb2RpZmllZFxuLy8gTGVudHoncyBtZXRob2QuXG5qU3RhdC5iZXRhY2YgPSBmdW5jdGlvbiBiZXRhY2YoeCwgYSwgYikge1xuICB2YXIgZnBtaW4gPSAxZS0zMDtcbiAgdmFyIG0gPSAxO1xuICB2YXIgcWFiID0gYSArIGI7XG4gIHZhciBxYXAgPSBhICsgMTtcbiAgdmFyIHFhbSA9IGEgLSAxO1xuICB2YXIgYyA9IDE7XG4gIHZhciBkID0gMSAtIHFhYiAqIHggLyBxYXA7XG4gIHZhciBtMiwgYWEsIGRlbCwgaDtcblxuICAvLyBUaGVzZSBxJ3Mgd2lsbCBiZSB1c2VkIGluIGZhY3RvcnMgdGhhdCBvY2N1ciBpbiB0aGUgY29lZmZpY2llbnRzXG4gIGlmIChNYXRoLmFicyhkKSA8IGZwbWluKVxuICAgIGQgPSBmcG1pbjtcbiAgZCA9IDEgLyBkO1xuICBoID0gZDtcblxuICBmb3IgKDsgbSA8PSAxMDA7IG0rKykge1xuICAgIG0yID0gMiAqIG07XG4gICAgYWEgPSBtICogKGIgLSBtKSAqIHggLyAoKHFhbSArIG0yKSAqIChhICsgbTIpKTtcbiAgICAvLyBPbmUgc3RlcCAodGhlIGV2ZW4gb25lKSBvZiB0aGUgcmVjdXJyZW5jZVxuICAgIGQgPSAxICsgYWEgKiBkO1xuICAgIGlmIChNYXRoLmFicyhkKSA8IGZwbWluKVxuICAgICAgZCA9IGZwbWluO1xuICAgIGMgPSAxICsgYWEgLyBjO1xuICAgIGlmIChNYXRoLmFicyhjKSA8IGZwbWluKVxuICAgICAgYyA9IGZwbWluO1xuICAgIGQgPSAxIC8gZDtcbiAgICBoICo9IGQgKiBjO1xuICAgIGFhID0gLShhICsgbSkgKiAocWFiICsgbSkgKiB4IC8gKChhICsgbTIpICogKHFhcCArIG0yKSk7XG4gICAgLy8gTmV4dCBzdGVwIG9mIHRoZSByZWN1cnJlbmNlICh0aGUgb2RkIG9uZSlcbiAgICBkID0gMSArIGFhICogZDtcbiAgICBpZiAoTWF0aC5hYnMoZCkgPCBmcG1pbilcbiAgICAgIGQgPSBmcG1pbjtcbiAgICBjID0gMSArIGFhIC8gYztcbiAgICBpZiAoTWF0aC5hYnMoYykgPCBmcG1pbilcbiAgICAgIGMgPSBmcG1pbjtcbiAgICBkID0gMSAvIGQ7XG4gICAgZGVsID0gZCAqIGM7XG4gICAgaCAqPSBkZWw7XG4gICAgaWYgKE1hdGguYWJzKGRlbCAtIDEuMCkgPCAzZS03KVxuICAgICAgYnJlYWs7XG4gIH1cblxuICByZXR1cm4gaDtcbn07XG5cblxuLy8gUmV0dXJucyB0aGUgaW52ZXJzZSBvZiB0aGUgbG93ZXIgcmVndWxhcml6ZWQgaW5vbXBsZXRlIGdhbW1hIGZ1bmN0aW9uXG5qU3RhdC5nYW1tYXBpbnYgPSBmdW5jdGlvbiBnYW1tYXBpbnYocCwgYSkge1xuICB2YXIgaiA9IDA7XG4gIHZhciBhMSA9IGEgLSAxO1xuICB2YXIgRVBTID0gMWUtODtcbiAgdmFyIGdsbiA9IGpTdGF0LmdhbW1hbG4oYSk7XG4gIHZhciB4LCBlcnIsIHQsIHUsIHBwLCBsbmExLCBhZmFjO1xuXG4gIGlmIChwID49IDEpXG4gICAgcmV0dXJuIE1hdGgubWF4KDEwMCwgYSArIDEwMCAqIE1hdGguc3FydChhKSk7XG4gIGlmIChwIDw9IDApXG4gICAgcmV0dXJuIDA7XG4gIGlmIChhID4gMSkge1xuICAgIGxuYTEgPSBNYXRoLmxvZyhhMSk7XG4gICAgYWZhYyA9IE1hdGguZXhwKGExICogKGxuYTEgLSAxKSAtIGdsbik7XG4gICAgcHAgPSAocCA8IDAuNSkgPyBwIDogMSAtIHA7XG4gICAgdCA9IE1hdGguc3FydCgtMiAqIE1hdGgubG9nKHBwKSk7XG4gICAgeCA9ICgyLjMwNzUzICsgdCAqIDAuMjcwNjEpIC8gKDEgKyB0ICogKDAuOTkyMjkgKyB0ICogMC4wNDQ4MSkpIC0gdDtcbiAgICBpZiAocCA8IDAuNSlcbiAgICAgIHggPSAteDtcbiAgICB4ID0gTWF0aC5tYXgoMWUtMyxcbiAgICAgICAgICAgICAgICAgYSAqIE1hdGgucG93KDEgLSAxIC8gKDkgKiBhKSAtIHggLyAoMyAqIE1hdGguc3FydChhKSksIDMpKTtcbiAgfSBlbHNlIHtcbiAgICB0ID0gMSAtIGEgKiAoMC4yNTMgKyBhICogMC4xMik7XG4gICAgaWYgKHAgPCB0KVxuICAgICAgeCA9IE1hdGgucG93KHAgLyB0LCAxIC8gYSk7XG4gICAgZWxzZVxuICAgICAgeCA9IDEgLSBNYXRoLmxvZygxIC0gKHAgLSB0KSAvICgxIC0gdCkpO1xuICB9XG5cbiAgZm9yKDsgaiA8IDEyOyBqKyspIHtcbiAgICBpZiAoeCA8PSAwKVxuICAgICAgcmV0dXJuIDA7XG4gICAgZXJyID0galN0YXQubG93UmVnR2FtbWEoYSwgeCkgLSBwO1xuICAgIGlmIChhID4gMSlcbiAgICAgIHQgPSBhZmFjICogTWF0aC5leHAoLSh4IC0gYTEpICsgYTEgKiAoTWF0aC5sb2coeCkgLSBsbmExKSk7XG4gICAgZWxzZVxuICAgICAgdCA9IE1hdGguZXhwKC14ICsgYTEgKiBNYXRoLmxvZyh4KSAtIGdsbik7XG4gICAgdSA9IGVyciAvIHQ7XG4gICAgeCAtPSAodCA9IHUgLyAoMSAtIDAuNSAqIE1hdGgubWluKDEsIHUgKiAoKGEgLSAxKSAvIHggLSAxKSkpKTtcbiAgICBpZiAoeCA8PSAwKVxuICAgICAgeCA9IDAuNSAqICh4ICsgdCk7XG4gICAgaWYgKE1hdGguYWJzKHQpIDwgRVBTICogeClcbiAgICAgIGJyZWFrO1xuICB9XG5cbiAgcmV0dXJuIHg7XG59O1xuXG5cbi8vIFJldHVybnMgdGhlIGVycm9yIGZ1bmN0aW9uIGVyZih4KVxualN0YXQuZXJmID0gZnVuY3Rpb24gZXJmKHgpIHtcbiAgdmFyIGNvZiA9IFstMS4zMDI2NTM3MTk3ODE3MDk0LCA2LjQxOTY5NzkyMzU2NDkwMjZlLTEsIDEuOTQ3NjQ3MzIwNDE4NTgzNmUtMixcbiAgICAgICAgICAgICAtOS41NjE1MTQ3ODY4MDg2MzFlLTMsIC05LjQ2NTk1MzQ0NDgyMDM2ZS00LCAzLjY2ODM5NDk3ODUyNzYxZS00LFxuICAgICAgICAgICAgIDQuMjUyMzMyNDgwNjkwN2UtNSwgLTIuMDI3ODU3ODExMjUzNGUtNSwgLTEuNjI0MjkwMDA0NjQ3ZS02LFxuICAgICAgICAgICAgIDEuMzAzNjU1ODM1NTgwZS02LCAxLjU2MjY0NDE3MjJlLTgsIC04LjUyMzgwOTU5MTVlLTgsXG4gICAgICAgICAgICAgNi41MjkwNTQ0MzllLTksIDUuMDU5MzQzNDk1ZS05LCAtOS45MTM2NDE1NmUtMTAsXG4gICAgICAgICAgICAgLTIuMjczNjUxMjJlLTEwLCA5LjY0Njc5MTFlLTExLCAyLjM5NDAzOGUtMTIsXG4gICAgICAgICAgICAgLTYuODg2MDI3ZS0xMiwgOC45NDQ4N2UtMTMsIDMuMTMwOTJlLTEzLFxuICAgICAgICAgICAgIC0xLjEyNzA4ZS0xMywgMy44MWUtMTYsIDcuMTA2ZS0xNSxcbiAgICAgICAgICAgICAtMS41MjNlLTE1LCAtOS40ZS0xNywgMS4yMWUtMTYsXG4gICAgICAgICAgICAgLTIuOGUtMTddO1xuICB2YXIgaiA9IGNvZi5sZW5ndGggLSAxO1xuICB2YXIgaXNuZWcgPSBmYWxzZTtcbiAgdmFyIGQgPSAwO1xuICB2YXIgZGQgPSAwO1xuICB2YXIgdCwgdHksIHRtcCwgcmVzO1xuXG4gIGlmICh4IDwgMCkge1xuICAgIHggPSAteDtcbiAgICBpc25lZyA9IHRydWU7XG4gIH1cblxuICB0ID0gMiAvICgyICsgeCk7XG4gIHR5ID0gNCAqIHQgLSAyO1xuXG4gIGZvcig7IGogPiAwOyBqLS0pIHtcbiAgICB0bXAgPSBkO1xuICAgIGQgPSB0eSAqIGQgLSBkZCArIGNvZltqXTtcbiAgICBkZCA9IHRtcDtcbiAgfVxuXG4gIHJlcyA9IHQgKiBNYXRoLmV4cCgteCAqIHggKyAwLjUgKiAoY29mWzBdICsgdHkgKiBkKSAtIGRkKTtcbiAgcmV0dXJuIGlzbmVnID8gcmVzIC0gMSA6IDEgLSByZXM7XG59O1xuXG5cbi8vIFJldHVybnMgdGhlIGNvbXBsbWVudGFyeSBlcnJvciBmdW5jdGlvbiBlcmZjKHgpXG5qU3RhdC5lcmZjID0gZnVuY3Rpb24gZXJmYyh4KSB7XG4gIHJldHVybiAxIC0galN0YXQuZXJmKHgpO1xufTtcblxuXG4vLyBSZXR1cm5zIHRoZSBpbnZlcnNlIG9mIHRoZSBjb21wbGVtZW50YXJ5IGVycm9yIGZ1bmN0aW9uXG5qU3RhdC5lcmZjaW52ID0gZnVuY3Rpb24gZXJmY2ludihwKSB7XG4gIHZhciBqID0gMDtcbiAgdmFyIHgsIGVyciwgdCwgcHA7XG4gIGlmIChwID49IDIpXG4gICAgcmV0dXJuIC0xMDA7XG4gIGlmIChwIDw9IDApXG4gICAgcmV0dXJuIDEwMDtcbiAgcHAgPSAocCA8IDEpID8gcCA6IDIgLSBwO1xuICB0ID0gTWF0aC5zcXJ0KC0yICogTWF0aC5sb2cocHAgLyAyKSk7XG4gIHggPSAtMC43MDcxMSAqICgoMi4zMDc1MyArIHQgKiAwLjI3MDYxKSAvXG4gICAgICAgICAgICAgICAgICAoMSArIHQgKiAoMC45OTIyOSArIHQgKiAwLjA0NDgxKSkgLSB0KTtcbiAgZm9yICg7IGogPCAyOyBqKyspIHtcbiAgICBlcnIgPSBqU3RhdC5lcmZjKHgpIC0gcHA7XG4gICAgeCArPSBlcnIgLyAoMS4xMjgzNzkxNjcwOTU1MTI1NyAqIE1hdGguZXhwKC14ICogeCkgLSB4ICogZXJyKTtcbiAgfVxuICByZXR1cm4gKHAgPCAxKSA/IHggOiAteDtcbn07XG5cblxuLy8gUmV0dXJucyB0aGUgaW52ZXJzZSBvZiB0aGUgaW5jb21wbGV0ZSBiZXRhIGZ1bmN0aW9uXG5qU3RhdC5pYmV0YWludiA9IGZ1bmN0aW9uIGliZXRhaW52KHAsIGEsIGIpIHtcbiAgdmFyIEVQUyA9IDFlLTg7XG4gIHZhciBhMSA9IGEgLSAxO1xuICB2YXIgYjEgPSBiIC0gMTtcbiAgdmFyIGogPSAwO1xuICB2YXIgbG5hLCBsbmIsIHBwLCB0LCB1LCBlcnIsIHgsIGFsLCBoLCB3LCBhZmFjO1xuICBpZiAocCA8PSAwKVxuICAgIHJldHVybiAwO1xuICBpZiAocCA+PSAxKVxuICAgIHJldHVybiAxO1xuICBpZiAoYSA+PSAxICYmIGIgPj0gMSkge1xuICAgIHBwID0gKHAgPCAwLjUpID8gcCA6IDEgLSBwO1xuICAgIHQgPSBNYXRoLnNxcnQoLTIgKiBNYXRoLmxvZyhwcCkpO1xuICAgIHggPSAoMi4zMDc1MyArIHQgKiAwLjI3MDYxKSAvICgxICsgdCogKDAuOTkyMjkgKyB0ICogMC4wNDQ4MSkpIC0gdDtcbiAgICBpZiAocCA8IDAuNSlcbiAgICAgIHggPSAteDtcbiAgICBhbCA9ICh4ICogeCAtIDMpIC8gNjtcbiAgICBoID0gMiAvICgxIC8gKDIgKiBhIC0gMSkgICsgMSAvICgyICogYiAtIDEpKTtcbiAgICB3ID0gKHggKiBNYXRoLnNxcnQoYWwgKyBoKSAvIGgpIC0gKDEgLyAoMiAqIGIgLSAxKSAtIDEgLyAoMiAqIGEgLSAxKSkgKlxuICAgICAgICAoYWwgKyA1IC8gNiAtIDIgLyAoMyAqIGgpKTtcbiAgICB4ID0gYSAvIChhICsgYiAqIE1hdGguZXhwKDIgKiB3KSk7XG4gIH0gZWxzZSB7XG4gICAgbG5hID0gTWF0aC5sb2coYSAvIChhICsgYikpO1xuICAgIGxuYiA9IE1hdGgubG9nKGIgLyAoYSArIGIpKTtcbiAgICB0ID0gTWF0aC5leHAoYSAqIGxuYSkgLyBhO1xuICAgIHUgPSBNYXRoLmV4cChiICogbG5iKSAvIGI7XG4gICAgdyA9IHQgKyB1O1xuICAgIGlmIChwIDwgdCAvIHcpXG4gICAgICB4ID0gTWF0aC5wb3coYSAqIHcgKiBwLCAxIC8gYSk7XG4gICAgZWxzZVxuICAgICAgeCA9IDEgLSBNYXRoLnBvdyhiICogdyAqICgxIC0gcCksIDEgLyBiKTtcbiAgfVxuICBhZmFjID0gLWpTdGF0LmdhbW1hbG4oYSkgLSBqU3RhdC5nYW1tYWxuKGIpICsgalN0YXQuZ2FtbWFsbihhICsgYik7XG4gIGZvcig7IGogPCAxMDsgaisrKSB7XG4gICAgaWYgKHggPT09IDAgfHwgeCA9PT0gMSlcbiAgICAgIHJldHVybiB4O1xuICAgIGVyciA9IGpTdGF0LmliZXRhKHgsIGEsIGIpIC0gcDtcbiAgICB0ID0gTWF0aC5leHAoYTEgKiBNYXRoLmxvZyh4KSArIGIxICogTWF0aC5sb2coMSAtIHgpICsgYWZhYyk7XG4gICAgdSA9IGVyciAvIHQ7XG4gICAgeCAtPSAodCA9IHUgLyAoMSAtIDAuNSAqIE1hdGgubWluKDEsIHUgKiAoYTEgLyB4IC0gYjEgLyAoMSAtIHgpKSkpKTtcbiAgICBpZiAoeCA8PSAwKVxuICAgICAgeCA9IDAuNSAqICh4ICsgdCk7XG4gICAgaWYgKHggPj0gMSlcbiAgICAgIHggPSAwLjUgKiAoeCArIHQgKyAxKTtcbiAgICBpZiAoTWF0aC5hYnModCkgPCBFUFMgKiB4ICYmIGogPiAwKVxuICAgICAgYnJlYWs7XG4gIH1cbiAgcmV0dXJuIHg7XG59O1xuXG5cbi8vIFJldHVybnMgdGhlIGluY29tcGxldGUgYmV0YSBmdW5jdGlvbiBJX3goYSxiKVxualN0YXQuaWJldGEgPSBmdW5jdGlvbiBpYmV0YSh4LCBhLCBiKSB7XG4gIC8vIEZhY3RvcnMgaW4gZnJvbnQgb2YgdGhlIGNvbnRpbnVlZCBmcmFjdGlvbi5cbiAgdmFyIGJ0ID0gKHggPT09IDAgfHwgeCA9PT0gMSkgPyAgMCA6XG4gICAgTWF0aC5leHAoalN0YXQuZ2FtbWFsbihhICsgYikgLSBqU3RhdC5nYW1tYWxuKGEpIC1cbiAgICAgICAgICAgICBqU3RhdC5nYW1tYWxuKGIpICsgYSAqIE1hdGgubG9nKHgpICsgYiAqXG4gICAgICAgICAgICAgTWF0aC5sb2coMSAtIHgpKTtcbiAgaWYgKHggPCAwIHx8IHggPiAxKVxuICAgIHJldHVybiBmYWxzZTtcbiAgaWYgKHggPCAoYSArIDEpIC8gKGEgKyBiICsgMikpXG4gICAgLy8gVXNlIGNvbnRpbnVlZCBmcmFjdGlvbiBkaXJlY3RseS5cbiAgICByZXR1cm4gYnQgKiBqU3RhdC5iZXRhY2YoeCwgYSwgYikgLyBhO1xuICAvLyBlbHNlIHVzZSBjb250aW51ZWQgZnJhY3Rpb24gYWZ0ZXIgbWFraW5nIHRoZSBzeW1tZXRyeSB0cmFuc2Zvcm1hdGlvbi5cbiAgcmV0dXJuIDEgLSBidCAqIGpTdGF0LmJldGFjZigxIC0geCwgYiwgYSkgLyBiO1xufTtcblxuXG4vLyBSZXR1cm5zIGEgbm9ybWFsIGRldmlhdGUgKG11PTAsIHNpZ21hPTEpLlxuLy8gSWYgbiBhbmQgbSBhcmUgc3BlY2lmaWVkIGl0IHJldHVybnMgYSBvYmplY3Qgb2Ygbm9ybWFsIGRldmlhdGVzLlxualN0YXQucmFuZG4gPSBmdW5jdGlvbiByYW5kbihuLCBtKSB7XG4gIHZhciB1LCB2LCB4LCB5LCBxO1xuICBpZiAoIW0pXG4gICAgbSA9IG47XG4gIGlmIChuKVxuICAgIHJldHVybiBqU3RhdC5jcmVhdGUobiwgbSwgZnVuY3Rpb24oKSB7IHJldHVybiBqU3RhdC5yYW5kbigpOyB9KTtcbiAgZG8ge1xuICAgIHUgPSBqU3RhdC5fcmFuZG9tX2ZuKCk7XG4gICAgdiA9IDEuNzE1NiAqIChqU3RhdC5fcmFuZG9tX2ZuKCkgLSAwLjUpO1xuICAgIHggPSB1IC0gMC40NDk4NzE7XG4gICAgeSA9IE1hdGguYWJzKHYpICsgMC4zODY1OTU7XG4gICAgcSA9IHggKiB4ICsgeSAqICgwLjE5NjAwICogeSAtIDAuMjU0NzIgKiB4KTtcbiAgfSB3aGlsZSAocSA+IDAuMjc1OTcgJiYgKHEgPiAwLjI3ODQ2IHx8IHYgKiB2ID4gLTQgKiBNYXRoLmxvZyh1KSAqIHUgKiB1KSk7XG4gIHJldHVybiB2IC8gdTtcbn07XG5cblxuLy8gUmV0dXJucyBhIGdhbW1hIGRldmlhdGUgYnkgdGhlIG1ldGhvZCBvZiBNYXJzYWdsaWEgYW5kIFRzYW5nLlxualN0YXQucmFuZGcgPSBmdW5jdGlvbiByYW5kZyhzaGFwZSwgbiwgbSkge1xuICB2YXIgb2FscGggPSBzaGFwZTtcbiAgdmFyIGExLCBhMiwgdSwgdiwgeCwgbWF0O1xuICBpZiAoIW0pXG4gICAgbSA9IG47XG4gIGlmICghc2hhcGUpXG4gICAgc2hhcGUgPSAxO1xuICBpZiAobikge1xuICAgIG1hdCA9IGpTdGF0Lnplcm9zKG4sbSk7XG4gICAgbWF0LmFsdGVyKGZ1bmN0aW9uKCkgeyByZXR1cm4galN0YXQucmFuZGcoc2hhcGUpOyB9KTtcbiAgICByZXR1cm4gbWF0O1xuICB9XG4gIGlmIChzaGFwZSA8IDEpXG4gICAgc2hhcGUgKz0gMTtcbiAgYTEgPSBzaGFwZSAtIDEgLyAzO1xuICBhMiA9IDEgLyBNYXRoLnNxcnQoOSAqIGExKTtcbiAgZG8ge1xuICAgIGRvIHtcbiAgICAgIHggPSBqU3RhdC5yYW5kbigpO1xuICAgICAgdiA9IDEgKyBhMiAqIHg7XG4gICAgfSB3aGlsZSh2IDw9IDApO1xuICAgIHYgPSB2ICogdiAqIHY7XG4gICAgdSA9IGpTdGF0Ll9yYW5kb21fZm4oKTtcbiAgfSB3aGlsZSh1ID4gMSAtIDAuMzMxICogTWF0aC5wb3coeCwgNCkgJiZcbiAgICAgICAgICBNYXRoLmxvZyh1KSA+IDAuNSAqIHgqeCArIGExICogKDEgLSB2ICsgTWF0aC5sb2codikpKTtcbiAgLy8gYWxwaGEgPiAxXG4gIGlmIChzaGFwZSA9PSBvYWxwaClcbiAgICByZXR1cm4gYTEgKiB2O1xuICAvLyBhbHBoYSA8IDFcbiAgZG8ge1xuICAgIHUgPSBqU3RhdC5fcmFuZG9tX2ZuKCk7XG4gIH0gd2hpbGUodSA9PT0gMCk7XG4gIHJldHVybiBNYXRoLnBvdyh1LCAxIC8gb2FscGgpICogYTEgKiB2O1xufTtcblxuXG4vLyBtYWtpbmcgdXNlIG9mIHN0YXRpYyBtZXRob2RzIG9uIHRoZSBpbnN0YW5jZVxuKGZ1bmN0aW9uKGZ1bmNzKSB7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgZnVuY3MubGVuZ3RoOyBpKyspIChmdW5jdGlvbihwYXNzZnVuYykge1xuICAgIGpTdGF0LmZuW3Bhc3NmdW5jXSA9IGZ1bmN0aW9uKCkge1xuICAgICAgcmV0dXJuIGpTdGF0KFxuICAgICAgICAgIGpTdGF0Lm1hcCh0aGlzLCBmdW5jdGlvbih2YWx1ZSkgeyByZXR1cm4galN0YXRbcGFzc2Z1bmNdKHZhbHVlKTsgfSkpO1xuICAgIH1cbiAgfSkoZnVuY3NbaV0pO1xufSkoJ2dhbW1hbG4gZ2FtbWFmbiBmYWN0b3JpYWwgZmFjdG9yaWFsbG4nLnNwbGl0KCcgJykpO1xuXG5cbihmdW5jdGlvbihmdW5jcykge1xuICBmb3IgKHZhciBpID0gMDsgaSA8IGZ1bmNzLmxlbmd0aDsgaSsrKSAoZnVuY3Rpb24ocGFzc2Z1bmMpIHtcbiAgICBqU3RhdC5mbltwYXNzZnVuY10gPSBmdW5jdGlvbigpIHtcbiAgICAgIHJldHVybiBqU3RhdChqU3RhdFtwYXNzZnVuY10uYXBwbHkobnVsbCwgYXJndW1lbnRzKSk7XG4gICAgfTtcbiAgfSkoZnVuY3NbaV0pO1xufSkoJ3JhbmRuJy5zcGxpdCgnICcpKTtcblxufShqU3RhdCwgTWF0aCkpO1xuKGZ1bmN0aW9uKGpTdGF0LCBNYXRoKSB7XG5cbi8vIGdlbmVyYXRlIGFsbCBkaXN0cmlidXRpb24gaW5zdGFuY2UgbWV0aG9kc1xuKGZ1bmN0aW9uKGxpc3QpIHtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBsaXN0Lmxlbmd0aDsgaSsrKSAoZnVuY3Rpb24oZnVuYykge1xuICAgIC8vIGRpc3RyaWJ1dGlvbiBpbnN0YW5jZSBtZXRob2RcbiAgICBqU3RhdFtmdW5jXSA9IGZ1bmN0aW9uIGYoYSwgYiwgYykge1xuICAgICAgaWYgKCEodGhpcyBpbnN0YW5jZW9mIGYpKVxuICAgICAgICByZXR1cm4gbmV3IGYoYSwgYiwgYyk7XG4gICAgICB0aGlzLl9hID0gYTtcbiAgICAgIHRoaXMuX2IgPSBiO1xuICAgICAgdGhpcy5fYyA9IGM7XG4gICAgICByZXR1cm4gdGhpcztcbiAgICB9O1xuICAgIC8vIGRpc3RyaWJ1dGlvbiBtZXRob2QgdG8gYmUgdXNlZCBvbiBhIGpTdGF0IGluc3RhbmNlXG4gICAgalN0YXQuZm5bZnVuY10gPSBmdW5jdGlvbihhLCBiLCBjKSB7XG4gICAgICB2YXIgbmV3dGhpcyA9IGpTdGF0W2Z1bmNdKGEsIGIsIGMpO1xuICAgICAgbmV3dGhpcy5kYXRhID0gdGhpcztcbiAgICAgIHJldHVybiBuZXd0aGlzO1xuICAgIH07XG4gICAgLy8gc2FtcGxlIGluc3RhbmNlIG1ldGhvZFxuICAgIGpTdGF0W2Z1bmNdLnByb3RvdHlwZS5zYW1wbGUgPSBmdW5jdGlvbihhcnIpIHtcbiAgICAgIHZhciBhID0gdGhpcy5fYTtcbiAgICAgIHZhciBiID0gdGhpcy5fYjtcbiAgICAgIHZhciBjID0gdGhpcy5fYztcbiAgICAgIGlmIChhcnIpXG4gICAgICAgIHJldHVybiBqU3RhdC5hbHRlcihhcnIsIGZ1bmN0aW9uKCkge1xuICAgICAgICAgIHJldHVybiBqU3RhdFtmdW5jXS5zYW1wbGUoYSwgYiwgYyk7XG4gICAgICAgIH0pO1xuICAgICAgZWxzZVxuICAgICAgICByZXR1cm4galN0YXRbZnVuY10uc2FtcGxlKGEsIGIsIGMpO1xuICAgIH07XG4gICAgLy8gZ2VuZXJhdGUgdGhlIHBkZiwgY2RmIGFuZCBpbnYgaW5zdGFuY2UgbWV0aG9kc1xuICAgIChmdW5jdGlvbih2YWxzKSB7XG4gICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHZhbHMubGVuZ3RoOyBpKyspIChmdW5jdGlvbihmbmZ1bmMpIHtcbiAgICAgICAgalN0YXRbZnVuY10ucHJvdG90eXBlW2ZuZnVuY10gPSBmdW5jdGlvbih4KSB7XG4gICAgICAgICAgdmFyIGEgPSB0aGlzLl9hO1xuICAgICAgICAgIHZhciBiID0gdGhpcy5fYjtcbiAgICAgICAgICB2YXIgYyA9IHRoaXMuX2M7XG4gICAgICAgICAgaWYgKCF4ICYmIHggIT09IDApXG4gICAgICAgICAgICB4ID0gdGhpcy5kYXRhO1xuICAgICAgICAgIGlmICh0eXBlb2YgeCAhPT0gJ251bWJlcicpIHtcbiAgICAgICAgICAgIHJldHVybiBqU3RhdC5mbi5tYXAuY2FsbCh4LCBmdW5jdGlvbih4KSB7XG4gICAgICAgICAgICAgIHJldHVybiBqU3RhdFtmdW5jXVtmbmZ1bmNdKHgsIGEsIGIsIGMpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgfVxuICAgICAgICAgIHJldHVybiBqU3RhdFtmdW5jXVtmbmZ1bmNdKHgsIGEsIGIsIGMpO1xuICAgICAgICB9O1xuICAgICAgfSkodmFsc1tpXSk7XG4gICAgfSkoJ3BkZiBjZGYgaW52Jy5zcGxpdCgnICcpKTtcbiAgICAvLyBnZW5lcmF0ZSB0aGUgbWVhbiwgbWVkaWFuLCBtb2RlIGFuZCB2YXJpYW5jZSBpbnN0YW5jZSBtZXRob2RzXG4gICAgKGZ1bmN0aW9uKHZhbHMpIHtcbiAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgdmFscy5sZW5ndGg7IGkrKykgKGZ1bmN0aW9uKGZuZnVuYykge1xuICAgICAgICBqU3RhdFtmdW5jXS5wcm90b3R5cGVbZm5mdW5jXSA9IGZ1bmN0aW9uKCkge1xuICAgICAgICAgIHJldHVybiBqU3RhdFtmdW5jXVtmbmZ1bmNdKHRoaXMuX2EsIHRoaXMuX2IsIHRoaXMuX2MpO1xuICAgICAgICB9O1xuICAgICAgfSkodmFsc1tpXSk7XG4gICAgfSkoJ21lYW4gbWVkaWFuIG1vZGUgdmFyaWFuY2UnLnNwbGl0KCcgJykpO1xuICB9KShsaXN0W2ldKTtcbn0pKChcbiAgJ2JldGEgY2VudHJhbEYgY2F1Y2h5IGNoaXNxdWFyZSBleHBvbmVudGlhbCBnYW1tYSBpbnZnYW1tYSBrdW1hcmFzd2FteSAnICtcbiAgJ2xhcGxhY2UgbG9nbm9ybWFsIG5vbmNlbnRyYWx0IG5vcm1hbCBwYXJldG8gc3R1ZGVudHQgd2VpYnVsbCB1bmlmb3JtICcgK1xuICAnYmlub21pYWwgbmVnYmluIGh5cGdlb20gcG9pc3NvbiB0cmlhbmd1bGFyIHR1a2V5IGFyY3NpbmUnXG4pLnNwbGl0KCcgJykpO1xuXG5cblxuLy8gZXh0ZW5kIGJldGEgZnVuY3Rpb24gd2l0aCBzdGF0aWMgbWV0aG9kc1xualN0YXQuZXh0ZW5kKGpTdGF0LmJldGEsIHtcbiAgcGRmOiBmdW5jdGlvbiBwZGYoeCwgYWxwaGEsIGJldGEpIHtcbiAgICAvLyBQREYgaXMgemVybyBvdXRzaWRlIHRoZSBzdXBwb3J0XG4gICAgaWYgKHggPiAxIHx8IHggPCAwKVxuICAgICAgcmV0dXJuIDA7XG4gICAgLy8gUERGIGlzIG9uZSBmb3IgdGhlIHVuaWZvcm0gY2FzZVxuICAgIGlmIChhbHBoYSA9PSAxICYmIGJldGEgPT0gMSlcbiAgICAgIHJldHVybiAxO1xuXG4gICAgaWYgKGFscGhhIDwgNTEyICYmIGJldGEgPCA1MTIpIHtcbiAgICAgIHJldHVybiAoTWF0aC5wb3coeCwgYWxwaGEgLSAxKSAqIE1hdGgucG93KDEgLSB4LCBiZXRhIC0gMSkpIC9cbiAgICAgICAgICBqU3RhdC5iZXRhZm4oYWxwaGEsIGJldGEpO1xuICAgIH0gZWxzZSB7XG4gICAgICByZXR1cm4gTWF0aC5leHAoKGFscGhhIC0gMSkgKiBNYXRoLmxvZyh4KSArXG4gICAgICAgICAgICAgICAgICAgICAgKGJldGEgLSAxKSAqIE1hdGgubG9nKDEgLSB4KSAtXG4gICAgICAgICAgICAgICAgICAgICAgalN0YXQuYmV0YWxuKGFscGhhLCBiZXRhKSk7XG4gICAgfVxuICB9LFxuXG4gIGNkZjogZnVuY3Rpb24gY2RmKHgsIGFscGhhLCBiZXRhKSB7XG4gICAgcmV0dXJuICh4ID4gMSB8fCB4IDwgMCkgPyAoeCA+IDEpICogMSA6IGpTdGF0LmliZXRhKHgsIGFscGhhLCBiZXRhKTtcbiAgfSxcblxuICBpbnY6IGZ1bmN0aW9uIGludih4LCBhbHBoYSwgYmV0YSkge1xuICAgIHJldHVybiBqU3RhdC5pYmV0YWludih4LCBhbHBoYSwgYmV0YSk7XG4gIH0sXG5cbiAgbWVhbjogZnVuY3Rpb24gbWVhbihhbHBoYSwgYmV0YSkge1xuICAgIHJldHVybiBhbHBoYSAvIChhbHBoYSArIGJldGEpO1xuICB9LFxuXG4gIG1lZGlhbjogZnVuY3Rpb24gbWVkaWFuKGFscGhhLCBiZXRhKSB7XG4gICAgcmV0dXJuIGpTdGF0LmliZXRhaW52KDAuNSwgYWxwaGEsIGJldGEpO1xuICB9LFxuXG4gIG1vZGU6IGZ1bmN0aW9uIG1vZGUoYWxwaGEsIGJldGEpIHtcbiAgICByZXR1cm4gKGFscGhhIC0gMSApIC8gKCBhbHBoYSArIGJldGEgLSAyKTtcbiAgfSxcblxuICAvLyByZXR1cm4gYSByYW5kb20gc2FtcGxlXG4gIHNhbXBsZTogZnVuY3Rpb24gc2FtcGxlKGFscGhhLCBiZXRhKSB7XG4gICAgdmFyIHUgPSBqU3RhdC5yYW5kZyhhbHBoYSk7XG4gICAgcmV0dXJuIHUgLyAodSArIGpTdGF0LnJhbmRnKGJldGEpKTtcbiAgfSxcblxuICB2YXJpYW5jZTogZnVuY3Rpb24gdmFyaWFuY2UoYWxwaGEsIGJldGEpIHtcbiAgICByZXR1cm4gKGFscGhhICogYmV0YSkgLyAoTWF0aC5wb3coYWxwaGEgKyBiZXRhLCAyKSAqIChhbHBoYSArIGJldGEgKyAxKSk7XG4gIH1cbn0pO1xuXG4vLyBleHRlbmQgRiBmdW5jdGlvbiB3aXRoIHN0YXRpYyBtZXRob2RzXG5qU3RhdC5leHRlbmQoalN0YXQuY2VudHJhbEYsIHtcbiAgLy8gVGhpcyBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgcGRmIGZ1bmN0aW9uIGF2b2lkcyBmbG9hdCBvdmVyZmxvd1xuICAvLyBTZWUgdGhlIHdheSB0aGF0IFIgY2FsY3VsYXRlcyB0aGlzIHZhbHVlOlxuICAvLyBodHRwczovL3N2bi5yLXByb2plY3Qub3JnL1IvdHJ1bmsvc3JjL25tYXRoL2RmLmNcbiAgcGRmOiBmdW5jdGlvbiBwZGYoeCwgZGYxLCBkZjIpIHtcbiAgICB2YXIgcCwgcSwgZjtcblxuICAgIGlmICh4IDwgMClcbiAgICAgIHJldHVybiAwO1xuXG4gICAgaWYgKGRmMSA8PSAyKSB7XG4gICAgICBpZiAoeCA9PT0gMCAmJiBkZjEgPCAyKSB7XG4gICAgICAgIHJldHVybiBJbmZpbml0eTtcbiAgICAgIH1cbiAgICAgIGlmICh4ID09PSAwICYmIGRmMSA9PT0gMikge1xuICAgICAgICByZXR1cm4gMTtcbiAgICAgIH1cbiAgICAgIHJldHVybiAoMSAvIGpTdGF0LmJldGFmbihkZjEgLyAyLCBkZjIgLyAyKSkgKlxuICAgICAgICAgICAgICBNYXRoLnBvdyhkZjEgLyBkZjIsIGRmMSAvIDIpICpcbiAgICAgICAgICAgICAgTWF0aC5wb3coeCwgKGRmMS8yKSAtIDEpICpcbiAgICAgICAgICAgICAgTWF0aC5wb3coKDEgKyAoZGYxIC8gZGYyKSAqIHgpLCAtKGRmMSArIGRmMikgLyAyKTtcbiAgICB9XG5cbiAgICBwID0gKGRmMSAqIHgpIC8gKGRmMiArIHggKiBkZjEpO1xuICAgIHEgPSBkZjIgLyAoZGYyICsgeCAqIGRmMSk7XG4gICAgZiA9IGRmMSAqIHEgLyAyLjA7XG4gICAgcmV0dXJuIGYgKiBqU3RhdC5iaW5vbWlhbC5wZGYoKGRmMSAtIDIpIC8gMiwgKGRmMSArIGRmMiAtIDIpIC8gMiwgcCk7XG4gIH0sXG5cbiAgY2RmOiBmdW5jdGlvbiBjZGYoeCwgZGYxLCBkZjIpIHtcbiAgICBpZiAoeCA8IDApXG4gICAgICByZXR1cm4gMDtcbiAgICByZXR1cm4galN0YXQuaWJldGEoKGRmMSAqIHgpIC8gKGRmMSAqIHggKyBkZjIpLCBkZjEgLyAyLCBkZjIgLyAyKTtcbiAgfSxcblxuICBpbnY6IGZ1bmN0aW9uIGludih4LCBkZjEsIGRmMikge1xuICAgIHJldHVybiBkZjIgLyAoZGYxICogKDEgLyBqU3RhdC5pYmV0YWludih4LCBkZjEgLyAyLCBkZjIgLyAyKSAtIDEpKTtcbiAgfSxcblxuICBtZWFuOiBmdW5jdGlvbiBtZWFuKGRmMSwgZGYyKSB7XG4gICAgcmV0dXJuIChkZjIgPiAyKSA/IGRmMiAvIChkZjIgLSAyKSA6IHVuZGVmaW5lZDtcbiAgfSxcblxuICBtb2RlOiBmdW5jdGlvbiBtb2RlKGRmMSwgZGYyKSB7XG4gICAgcmV0dXJuIChkZjEgPiAyKSA/IChkZjIgKiAoZGYxIC0gMikpIC8gKGRmMSAqIChkZjIgKyAyKSkgOiB1bmRlZmluZWQ7XG4gIH0sXG5cbiAgLy8gcmV0dXJuIGEgcmFuZG9tIHNhbXBsZVxuICBzYW1wbGU6IGZ1bmN0aW9uIHNhbXBsZShkZjEsIGRmMikge1xuICAgIHZhciB4MSA9IGpTdGF0LnJhbmRnKGRmMSAvIDIpICogMjtcbiAgICB2YXIgeDIgPSBqU3RhdC5yYW5kZyhkZjIgLyAyKSAqIDI7XG4gICAgcmV0dXJuICh4MSAvIGRmMSkgLyAoeDIgLyBkZjIpO1xuICB9LFxuXG4gIHZhcmlhbmNlOiBmdW5jdGlvbiB2YXJpYW5jZShkZjEsIGRmMikge1xuICAgIGlmIChkZjIgPD0gNClcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgcmV0dXJuIDIgKiBkZjIgKiBkZjIgKiAoZGYxICsgZGYyIC0gMikgL1xuICAgICAgICAoZGYxICogKGRmMiAtIDIpICogKGRmMiAtIDIpICogKGRmMiAtIDQpKTtcbiAgfVxufSk7XG5cblxuLy8gZXh0ZW5kIGNhdWNoeSBmdW5jdGlvbiB3aXRoIHN0YXRpYyBtZXRob2RzXG5qU3RhdC5leHRlbmQoalN0YXQuY2F1Y2h5LCB7XG4gIHBkZjogZnVuY3Rpb24gcGRmKHgsIGxvY2FsLCBzY2FsZSkge1xuICAgIGlmIChzY2FsZSA8IDApIHsgcmV0dXJuIDA7IH1cblxuICAgIHJldHVybiAoc2NhbGUgLyAoTWF0aC5wb3coeCAtIGxvY2FsLCAyKSArIE1hdGgucG93KHNjYWxlLCAyKSkpIC8gTWF0aC5QSTtcbiAgfSxcblxuICBjZGY6IGZ1bmN0aW9uIGNkZih4LCBsb2NhbCwgc2NhbGUpIHtcbiAgICByZXR1cm4gTWF0aC5hdGFuKCh4IC0gbG9jYWwpIC8gc2NhbGUpIC8gTWF0aC5QSSArIDAuNTtcbiAgfSxcblxuICBpbnY6IGZ1bmN0aW9uKHAsIGxvY2FsLCBzY2FsZSkge1xuICAgIHJldHVybiBsb2NhbCArIHNjYWxlICogTWF0aC50YW4oTWF0aC5QSSAqIChwIC0gMC41KSk7XG4gIH0sXG5cbiAgbWVkaWFuOiBmdW5jdGlvbiBtZWRpYW4obG9jYWwvKiwgc2NhbGUqLykge1xuICAgIHJldHVybiBsb2NhbDtcbiAgfSxcblxuICBtb2RlOiBmdW5jdGlvbiBtb2RlKGxvY2FsLyosIHNjYWxlKi8pIHtcbiAgICByZXR1cm4gbG9jYWw7XG4gIH0sXG5cbiAgc2FtcGxlOiBmdW5jdGlvbiBzYW1wbGUobG9jYWwsIHNjYWxlKSB7XG4gICAgcmV0dXJuIGpTdGF0LnJhbmRuKCkgKlxuICAgICAgICBNYXRoLnNxcnQoMSAvICgyICogalN0YXQucmFuZGcoMC41KSkpICogc2NhbGUgKyBsb2NhbDtcbiAgfVxufSk7XG5cblxuXG4vLyBleHRlbmQgY2hpc3F1YXJlIGZ1bmN0aW9uIHdpdGggc3RhdGljIG1ldGhvZHNcbmpTdGF0LmV4dGVuZChqU3RhdC5jaGlzcXVhcmUsIHtcbiAgcGRmOiBmdW5jdGlvbiBwZGYoeCwgZG9mKSB7XG4gICAgaWYgKHggPCAwKVxuICAgICAgcmV0dXJuIDA7XG4gICAgcmV0dXJuICh4ID09PSAwICYmIGRvZiA9PT0gMikgPyAwLjUgOlxuICAgICAgICBNYXRoLmV4cCgoZG9mIC8gMiAtIDEpICogTWF0aC5sb2coeCkgLSB4IC8gMiAtIChkb2YgLyAyKSAqXG4gICAgICAgICAgICAgICAgIE1hdGgubG9nKDIpIC0galN0YXQuZ2FtbWFsbihkb2YgLyAyKSk7XG4gIH0sXG5cbiAgY2RmOiBmdW5jdGlvbiBjZGYoeCwgZG9mKSB7XG4gICAgaWYgKHggPCAwKVxuICAgICAgcmV0dXJuIDA7XG4gICAgcmV0dXJuIGpTdGF0Lmxvd1JlZ0dhbW1hKGRvZiAvIDIsIHggLyAyKTtcbiAgfSxcblxuICBpbnY6IGZ1bmN0aW9uKHAsIGRvZikge1xuICAgIHJldHVybiAyICogalN0YXQuZ2FtbWFwaW52KHAsIDAuNSAqIGRvZik7XG4gIH0sXG5cbiAgbWVhbiA6IGZ1bmN0aW9uKGRvZikge1xuICAgIHJldHVybiBkb2Y7XG4gIH0sXG5cbiAgLy8gVE9ETzogdGhpcyBpcyBhbiBhcHByb3hpbWF0aW9uIChpcyB0aGVyZSBhIGJldHRlciB3YXk/KVxuICBtZWRpYW46IGZ1bmN0aW9uIG1lZGlhbihkb2YpIHtcbiAgICByZXR1cm4gZG9mICogTWF0aC5wb3coMSAtICgyIC8gKDkgKiBkb2YpKSwgMyk7XG4gIH0sXG5cbiAgbW9kZTogZnVuY3Rpb24gbW9kZShkb2YpIHtcbiAgICByZXR1cm4gKGRvZiAtIDIgPiAwKSA/IGRvZiAtIDIgOiAwO1xuICB9LFxuXG4gIHNhbXBsZTogZnVuY3Rpb24gc2FtcGxlKGRvZikge1xuICAgIHJldHVybiBqU3RhdC5yYW5kZyhkb2YgLyAyKSAqIDI7XG4gIH0sXG5cbiAgdmFyaWFuY2U6IGZ1bmN0aW9uIHZhcmlhbmNlKGRvZikge1xuICAgIHJldHVybiAyICogZG9mO1xuICB9XG59KTtcblxuXG5cbi8vIGV4dGVuZCBleHBvbmVudGlhbCBmdW5jdGlvbiB3aXRoIHN0YXRpYyBtZXRob2RzXG5qU3RhdC5leHRlbmQoalN0YXQuZXhwb25lbnRpYWwsIHtcbiAgcGRmOiBmdW5jdGlvbiBwZGYoeCwgcmF0ZSkge1xuICAgIHJldHVybiB4IDwgMCA/IDAgOiByYXRlICogTWF0aC5leHAoLXJhdGUgKiB4KTtcbiAgfSxcblxuICBjZGY6IGZ1bmN0aW9uIGNkZih4LCByYXRlKSB7XG4gICAgcmV0dXJuIHggPCAwID8gMCA6IDEgLSBNYXRoLmV4cCgtcmF0ZSAqIHgpO1xuICB9LFxuXG4gIGludjogZnVuY3Rpb24ocCwgcmF0ZSkge1xuICAgIHJldHVybiAtTWF0aC5sb2coMSAtIHApIC8gcmF0ZTtcbiAgfSxcblxuICBtZWFuIDogZnVuY3Rpb24ocmF0ZSkge1xuICAgIHJldHVybiAxIC8gcmF0ZTtcbiAgfSxcblxuICBtZWRpYW46IGZ1bmN0aW9uIChyYXRlKSB7XG4gICAgcmV0dXJuICgxIC8gcmF0ZSkgKiBNYXRoLmxvZygyKTtcbiAgfSxcblxuICBtb2RlOiBmdW5jdGlvbiBtb2RlKC8qcmF0ZSovKSB7XG4gICAgcmV0dXJuIDA7XG4gIH0sXG5cbiAgc2FtcGxlOiBmdW5jdGlvbiBzYW1wbGUocmF0ZSkge1xuICAgIHJldHVybiAtMSAvIHJhdGUgKiBNYXRoLmxvZyhqU3RhdC5fcmFuZG9tX2ZuKCkpO1xuICB9LFxuXG4gIHZhcmlhbmNlIDogZnVuY3Rpb24ocmF0ZSkge1xuICAgIHJldHVybiBNYXRoLnBvdyhyYXRlLCAtMik7XG4gIH1cbn0pO1xuXG5cblxuLy8gZXh0ZW5kIGdhbW1hIGZ1bmN0aW9uIHdpdGggc3RhdGljIG1ldGhvZHNcbmpTdGF0LmV4dGVuZChqU3RhdC5nYW1tYSwge1xuICBwZGY6IGZ1bmN0aW9uIHBkZih4LCBzaGFwZSwgc2NhbGUpIHtcbiAgICBpZiAoeCA8IDApXG4gICAgICByZXR1cm4gMDtcbiAgICByZXR1cm4gKHggPT09IDAgJiYgc2hhcGUgPT09IDEpID8gMSAvIHNjYWxlIDpcbiAgICAgICAgICAgIE1hdGguZXhwKChzaGFwZSAtIDEpICogTWF0aC5sb2coeCkgLSB4IC8gc2NhbGUgLVxuICAgICAgICAgICAgICAgICAgICBqU3RhdC5nYW1tYWxuKHNoYXBlKSAtIHNoYXBlICogTWF0aC5sb2coc2NhbGUpKTtcbiAgfSxcblxuICBjZGY6IGZ1bmN0aW9uIGNkZih4LCBzaGFwZSwgc2NhbGUpIHtcbiAgICBpZiAoeCA8IDApXG4gICAgICByZXR1cm4gMDtcbiAgICByZXR1cm4galN0YXQubG93UmVnR2FtbWEoc2hhcGUsIHggLyBzY2FsZSk7XG4gIH0sXG5cbiAgaW52OiBmdW5jdGlvbihwLCBzaGFwZSwgc2NhbGUpIHtcbiAgICByZXR1cm4galN0YXQuZ2FtbWFwaW52KHAsIHNoYXBlKSAqIHNjYWxlO1xuICB9LFxuXG4gIG1lYW4gOiBmdW5jdGlvbihzaGFwZSwgc2NhbGUpIHtcbiAgICByZXR1cm4gc2hhcGUgKiBzY2FsZTtcbiAgfSxcblxuICBtb2RlOiBmdW5jdGlvbiBtb2RlKHNoYXBlLCBzY2FsZSkge1xuICAgIGlmKHNoYXBlID4gMSkgcmV0dXJuIChzaGFwZSAtIDEpICogc2NhbGU7XG4gICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgfSxcblxuICBzYW1wbGU6IGZ1bmN0aW9uIHNhbXBsZShzaGFwZSwgc2NhbGUpIHtcbiAgICByZXR1cm4galN0YXQucmFuZGcoc2hhcGUpICogc2NhbGU7XG4gIH0sXG5cbiAgdmFyaWFuY2U6IGZ1bmN0aW9uIHZhcmlhbmNlKHNoYXBlLCBzY2FsZSkge1xuICAgIHJldHVybiBzaGFwZSAqIHNjYWxlICogc2NhbGU7XG4gIH1cbn0pO1xuXG4vLyBleHRlbmQgaW52ZXJzZSBnYW1tYSBmdW5jdGlvbiB3aXRoIHN0YXRpYyBtZXRob2RzXG5qU3RhdC5leHRlbmQoalN0YXQuaW52Z2FtbWEsIHtcbiAgcGRmOiBmdW5jdGlvbiBwZGYoeCwgc2hhcGUsIHNjYWxlKSB7XG4gICAgaWYgKHggPD0gMClcbiAgICAgIHJldHVybiAwO1xuICAgIHJldHVybiBNYXRoLmV4cCgtKHNoYXBlICsgMSkgKiBNYXRoLmxvZyh4KSAtIHNjYWxlIC8geCAtXG4gICAgICAgICAgICAgICAgICAgIGpTdGF0LmdhbW1hbG4oc2hhcGUpICsgc2hhcGUgKiBNYXRoLmxvZyhzY2FsZSkpO1xuICB9LFxuXG4gIGNkZjogZnVuY3Rpb24gY2RmKHgsIHNoYXBlLCBzY2FsZSkge1xuICAgIGlmICh4IDw9IDApXG4gICAgICByZXR1cm4gMDtcbiAgICByZXR1cm4gMSAtIGpTdGF0Lmxvd1JlZ0dhbW1hKHNoYXBlLCBzY2FsZSAvIHgpO1xuICB9LFxuXG4gIGludjogZnVuY3Rpb24ocCwgc2hhcGUsIHNjYWxlKSB7XG4gICAgcmV0dXJuIHNjYWxlIC8galN0YXQuZ2FtbWFwaW52KDEgLSBwLCBzaGFwZSk7XG4gIH0sXG5cbiAgbWVhbiA6IGZ1bmN0aW9uKHNoYXBlLCBzY2FsZSkge1xuICAgIHJldHVybiAoc2hhcGUgPiAxKSA/IHNjYWxlIC8gKHNoYXBlIC0gMSkgOiB1bmRlZmluZWQ7XG4gIH0sXG5cbiAgbW9kZTogZnVuY3Rpb24gbW9kZShzaGFwZSwgc2NhbGUpIHtcbiAgICByZXR1cm4gc2NhbGUgLyAoc2hhcGUgKyAxKTtcbiAgfSxcblxuICBzYW1wbGU6IGZ1bmN0aW9uIHNhbXBsZShzaGFwZSwgc2NhbGUpIHtcbiAgICByZXR1cm4gc2NhbGUgLyBqU3RhdC5yYW5kZyhzaGFwZSk7XG4gIH0sXG5cbiAgdmFyaWFuY2U6IGZ1bmN0aW9uIHZhcmlhbmNlKHNoYXBlLCBzY2FsZSkge1xuICAgIGlmIChzaGFwZSA8PSAyKVxuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICByZXR1cm4gc2NhbGUgKiBzY2FsZSAvICgoc2hhcGUgLSAxKSAqIChzaGFwZSAtIDEpICogKHNoYXBlIC0gMikpO1xuICB9XG59KTtcblxuXG4vLyBleHRlbmQga3VtYXJhc3dhbXkgZnVuY3Rpb24gd2l0aCBzdGF0aWMgbWV0aG9kc1xualN0YXQuZXh0ZW5kKGpTdGF0Lmt1bWFyYXN3YW15LCB7XG4gIHBkZjogZnVuY3Rpb24gcGRmKHgsIGFscGhhLCBiZXRhKSB7XG4gICAgaWYgKHggPT09IDAgJiYgYWxwaGEgPT09IDEpXG4gICAgICByZXR1cm4gYmV0YTtcbiAgICBlbHNlIGlmICh4ID09PSAxICYmIGJldGEgPT09IDEpXG4gICAgICByZXR1cm4gYWxwaGE7XG4gICAgcmV0dXJuIE1hdGguZXhwKE1hdGgubG9nKGFscGhhKSArIE1hdGgubG9nKGJldGEpICsgKGFscGhhIC0gMSkgKlxuICAgICAgICAgICAgICAgICAgICBNYXRoLmxvZyh4KSArIChiZXRhIC0gMSkgKlxuICAgICAgICAgICAgICAgICAgICBNYXRoLmxvZygxIC0gTWF0aC5wb3coeCwgYWxwaGEpKSk7XG4gIH0sXG5cbiAgY2RmOiBmdW5jdGlvbiBjZGYoeCwgYWxwaGEsIGJldGEpIHtcbiAgICBpZiAoeCA8IDApXG4gICAgICByZXR1cm4gMDtcbiAgICBlbHNlIGlmICh4ID4gMSlcbiAgICAgIHJldHVybiAxO1xuICAgIHJldHVybiAoMSAtIE1hdGgucG93KDEgLSBNYXRoLnBvdyh4LCBhbHBoYSksIGJldGEpKTtcbiAgfSxcblxuICBpbnY6IGZ1bmN0aW9uIGludihwLCBhbHBoYSwgYmV0YSkge1xuICAgIHJldHVybiBNYXRoLnBvdygxIC0gTWF0aC5wb3coMSAtIHAsIDEgLyBiZXRhKSwgMSAvIGFscGhhKTtcbiAgfSxcblxuICBtZWFuIDogZnVuY3Rpb24oYWxwaGEsIGJldGEpIHtcbiAgICByZXR1cm4gKGJldGEgKiBqU3RhdC5nYW1tYWZuKDEgKyAxIC8gYWxwaGEpICpcbiAgICAgICAgICAgIGpTdGF0LmdhbW1hZm4oYmV0YSkpIC8gKGpTdGF0LmdhbW1hZm4oMSArIDEgLyBhbHBoYSArIGJldGEpKTtcbiAgfSxcblxuICBtZWRpYW46IGZ1bmN0aW9uIG1lZGlhbihhbHBoYSwgYmV0YSkge1xuICAgIHJldHVybiBNYXRoLnBvdygxIC0gTWF0aC5wb3coMiwgLTEgLyBiZXRhKSwgMSAvIGFscGhhKTtcbiAgfSxcblxuICBtb2RlOiBmdW5jdGlvbiBtb2RlKGFscGhhLCBiZXRhKSB7XG4gICAgaWYgKCEoYWxwaGEgPj0gMSAmJiBiZXRhID49IDEgJiYgKGFscGhhICE9PSAxICYmIGJldGEgIT09IDEpKSlcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgcmV0dXJuIE1hdGgucG93KChhbHBoYSAtIDEpIC8gKGFscGhhICogYmV0YSAtIDEpLCAxIC8gYWxwaGEpO1xuICB9LFxuXG4gIHZhcmlhbmNlOiBmdW5jdGlvbiB2YXJpYW5jZSgvKmFscGhhLCBiZXRhKi8pIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ3ZhcmlhbmNlIG5vdCB5ZXQgaW1wbGVtZW50ZWQnKTtcbiAgICAvLyBUT0RPOiBjb21wbGV0ZSB0aGlzXG4gIH1cbn0pO1xuXG5cblxuLy8gZXh0ZW5kIGxvZ25vcm1hbCBmdW5jdGlvbiB3aXRoIHN0YXRpYyBtZXRob2RzXG5qU3RhdC5leHRlbmQoalN0YXQubG9nbm9ybWFsLCB7XG4gIHBkZjogZnVuY3Rpb24gcGRmKHgsIG11LCBzaWdtYSkge1xuICAgIGlmICh4IDw9IDApXG4gICAgICByZXR1cm4gMDtcbiAgICByZXR1cm4gTWF0aC5leHAoLU1hdGgubG9nKHgpIC0gMC41ICogTWF0aC5sb2coMiAqIE1hdGguUEkpIC1cbiAgICAgICAgICAgICAgICAgICAgTWF0aC5sb2coc2lnbWEpIC0gTWF0aC5wb3coTWF0aC5sb2coeCkgLSBtdSwgMikgL1xuICAgICAgICAgICAgICAgICAgICAoMiAqIHNpZ21hICogc2lnbWEpKTtcbiAgfSxcblxuICBjZGY6IGZ1bmN0aW9uIGNkZih4LCBtdSwgc2lnbWEpIHtcbiAgICBpZiAoeCA8IDApXG4gICAgICByZXR1cm4gMDtcbiAgICByZXR1cm4gMC41ICtcbiAgICAgICAgKDAuNSAqIGpTdGF0LmVyZigoTWF0aC5sb2coeCkgLSBtdSkgLyBNYXRoLnNxcnQoMiAqIHNpZ21hICogc2lnbWEpKSk7XG4gIH0sXG5cbiAgaW52OiBmdW5jdGlvbihwLCBtdSwgc2lnbWEpIHtcbiAgICByZXR1cm4gTWF0aC5leHAoLTEuNDE0MjEzNTYyMzczMDk1MDUgKiBzaWdtYSAqIGpTdGF0LmVyZmNpbnYoMiAqIHApICsgbXUpO1xuICB9LFxuXG4gIG1lYW46IGZ1bmN0aW9uIG1lYW4obXUsIHNpZ21hKSB7XG4gICAgcmV0dXJuIE1hdGguZXhwKG11ICsgc2lnbWEgKiBzaWdtYSAvIDIpO1xuICB9LFxuXG4gIG1lZGlhbjogZnVuY3Rpb24gbWVkaWFuKG11LyosIHNpZ21hKi8pIHtcbiAgICByZXR1cm4gTWF0aC5leHAobXUpO1xuICB9LFxuXG4gIG1vZGU6IGZ1bmN0aW9uIG1vZGUobXUsIHNpZ21hKSB7XG4gICAgcmV0dXJuIE1hdGguZXhwKG11IC0gc2lnbWEgKiBzaWdtYSk7XG4gIH0sXG5cbiAgc2FtcGxlOiBmdW5jdGlvbiBzYW1wbGUobXUsIHNpZ21hKSB7XG4gICAgcmV0dXJuIE1hdGguZXhwKGpTdGF0LnJhbmRuKCkgKiBzaWdtYSArIG11KTtcbiAgfSxcblxuICB2YXJpYW5jZTogZnVuY3Rpb24gdmFyaWFuY2UobXUsIHNpZ21hKSB7XG4gICAgcmV0dXJuIChNYXRoLmV4cChzaWdtYSAqIHNpZ21hKSAtIDEpICogTWF0aC5leHAoMiAqIG11ICsgc2lnbWEgKiBzaWdtYSk7XG4gIH1cbn0pO1xuXG5cblxuLy8gZXh0ZW5kIG5vbmNlbnRyYWx0IGZ1bmN0aW9uIHdpdGggc3RhdGljIG1ldGhvZHNcbmpTdGF0LmV4dGVuZChqU3RhdC5ub25jZW50cmFsdCwge1xuICBwZGY6IGZ1bmN0aW9uIHBkZih4LCBkb2YsIG5jcCkge1xuICAgIHZhciB0b2wgPSAxZS0xNDtcbiAgICBpZiAoTWF0aC5hYnMobmNwKSA8IHRvbCkgIC8vIG5jcCBhcHByb3ggMDsgdXNlIHN0dWRlbnQtdFxuICAgICAgcmV0dXJuIGpTdGF0LnN0dWRlbnR0LnBkZih4LCBkb2YpXG5cbiAgICBpZiAoTWF0aC5hYnMoeCkgPCB0b2wpIHsgIC8vIGRpZmZlcmVudCBmb3JtdWxhIGZvciB4ID09IDBcbiAgICAgIHJldHVybiBNYXRoLmV4cChqU3RhdC5nYW1tYWxuKChkb2YgKyAxKSAvIDIpIC0gbmNwICogbmNwIC8gMiAtXG4gICAgICAgICAgICAgICAgICAgICAgMC41ICogTWF0aC5sb2coTWF0aC5QSSAqIGRvZikgLSBqU3RhdC5nYW1tYWxuKGRvZiAvIDIpKTtcbiAgICB9XG5cbiAgICAvLyBmb3JtdWxhIGZvciB4ICE9IDBcbiAgICByZXR1cm4gZG9mIC8geCAqXG4gICAgICAgIChqU3RhdC5ub25jZW50cmFsdC5jZGYoeCAqIE1hdGguc3FydCgxICsgMiAvIGRvZiksIGRvZisyLCBuY3ApIC1cbiAgICAgICAgIGpTdGF0Lm5vbmNlbnRyYWx0LmNkZih4LCBkb2YsIG5jcCkpO1xuICB9LFxuXG4gIGNkZjogZnVuY3Rpb24gY2RmKHgsIGRvZiwgbmNwKSB7XG4gICAgdmFyIHRvbCA9IDFlLTE0O1xuICAgIHZhciBtaW5faXRlcmF0aW9ucyA9IDIwMDtcblxuICAgIGlmIChNYXRoLmFicyhuY3ApIDwgdG9sKSAgLy8gbmNwIGFwcHJveCAwOyB1c2Ugc3R1ZGVudC10XG4gICAgICByZXR1cm4galN0YXQuc3R1ZGVudHQuY2RmKHgsIGRvZik7XG5cbiAgICAvLyB0dXJuIG5lZ2F0aXZlIHggaW50byBwb3NpdGl2ZSBhbmQgZmxpcCByZXN1bHQgYWZ0ZXJ3YXJkc1xuICAgIHZhciBmbGlwID0gZmFsc2U7XG4gICAgaWYgKHggPCAwKSB7XG4gICAgICBmbGlwID0gdHJ1ZTtcbiAgICAgIG5jcCA9IC1uY3A7XG4gICAgfVxuXG4gICAgdmFyIHByb2IgPSBqU3RhdC5ub3JtYWwuY2RmKC1uY3AsIDAsIDEpO1xuICAgIHZhciB2YWx1ZSA9IHRvbCArIDE7XG4gICAgLy8gdXNlIHZhbHVlIGF0IGxhc3QgdHdvIHN0ZXBzIHRvIGRldGVybWluZSBjb252ZXJnZW5jZVxuICAgIHZhciBsYXN0dmFsdWUgPSB2YWx1ZTtcbiAgICB2YXIgeSA9IHggKiB4IC8gKHggKiB4ICsgZG9mKTtcbiAgICB2YXIgaiA9IDA7XG4gICAgdmFyIHAgPSBNYXRoLmV4cCgtbmNwICogbmNwIC8gMik7XG4gICAgdmFyIHEgPSBNYXRoLmV4cCgtbmNwICogbmNwIC8gMiAtIDAuNSAqIE1hdGgubG9nKDIpIC1cbiAgICAgICAgICAgICAgICAgICAgIGpTdGF0LmdhbW1hbG4oMyAvIDIpKSAqIG5jcDtcbiAgICB3aGlsZSAoaiA8IG1pbl9pdGVyYXRpb25zIHx8IGxhc3R2YWx1ZSA+IHRvbCB8fCB2YWx1ZSA+IHRvbCkge1xuICAgICAgbGFzdHZhbHVlID0gdmFsdWU7XG4gICAgICBpZiAoaiA+IDApIHtcbiAgICAgICAgcCAqPSAobmNwICogbmNwKSAvICgyICogaik7XG4gICAgICAgIHEgKj0gKG5jcCAqIG5jcCkgLyAoMiAqIChqICsgMSAvIDIpKTtcbiAgICAgIH1cbiAgICAgIHZhbHVlID0gcCAqIGpTdGF0LmJldGEuY2RmKHksIGogKyAwLjUsIGRvZiAvIDIpICtcbiAgICAgICAgICBxICogalN0YXQuYmV0YS5jZGYoeSwgaisxLCBkb2YvMik7XG4gICAgICBwcm9iICs9IDAuNSAqIHZhbHVlO1xuICAgICAgaisrO1xuICAgIH1cblxuICAgIHJldHVybiBmbGlwID8gKDEgLSBwcm9iKSA6IHByb2I7XG4gIH1cbn0pO1xuXG5cbi8vIGV4dGVuZCBub3JtYWwgZnVuY3Rpb24gd2l0aCBzdGF0aWMgbWV0aG9kc1xualN0YXQuZXh0ZW5kKGpTdGF0Lm5vcm1hbCwge1xuICBwZGY6IGZ1bmN0aW9uIHBkZih4LCBtZWFuLCBzdGQpIHtcbiAgICByZXR1cm4gTWF0aC5leHAoLTAuNSAqIE1hdGgubG9nKDIgKiBNYXRoLlBJKSAtXG4gICAgICAgICAgICAgICAgICAgIE1hdGgubG9nKHN0ZCkgLSBNYXRoLnBvdyh4IC0gbWVhbiwgMikgLyAoMiAqIHN0ZCAqIHN0ZCkpO1xuICB9LFxuXG4gIGNkZjogZnVuY3Rpb24gY2RmKHgsIG1lYW4sIHN0ZCkge1xuICAgIHJldHVybiAwLjUgKiAoMSArIGpTdGF0LmVyZigoeCAtIG1lYW4pIC8gTWF0aC5zcXJ0KDIgKiBzdGQgKiBzdGQpKSk7XG4gIH0sXG5cbiAgaW52OiBmdW5jdGlvbihwLCBtZWFuLCBzdGQpIHtcbiAgICByZXR1cm4gLTEuNDE0MjEzNTYyMzczMDk1MDUgKiBzdGQgKiBqU3RhdC5lcmZjaW52KDIgKiBwKSArIG1lYW47XG4gIH0sXG5cbiAgbWVhbiA6IGZ1bmN0aW9uKG1lYW4vKiwgc3RkKi8pIHtcbiAgICByZXR1cm4gbWVhbjtcbiAgfSxcblxuICBtZWRpYW46IGZ1bmN0aW9uIG1lZGlhbihtZWFuLyosIHN0ZCovKSB7XG4gICAgcmV0dXJuIG1lYW47XG4gIH0sXG5cbiAgbW9kZTogZnVuY3Rpb24gKG1lYW4vKiwgc3RkKi8pIHtcbiAgICByZXR1cm4gbWVhbjtcbiAgfSxcblxuICBzYW1wbGU6IGZ1bmN0aW9uIHNhbXBsZShtZWFuLCBzdGQpIHtcbiAgICByZXR1cm4galN0YXQucmFuZG4oKSAqIHN0ZCArIG1lYW47XG4gIH0sXG5cbiAgdmFyaWFuY2UgOiBmdW5jdGlvbihtZWFuLCBzdGQpIHtcbiAgICByZXR1cm4gc3RkICogc3RkO1xuICB9XG59KTtcblxuXG5cbi8vIGV4dGVuZCBwYXJldG8gZnVuY3Rpb24gd2l0aCBzdGF0aWMgbWV0aG9kc1xualN0YXQuZXh0ZW5kKGpTdGF0LnBhcmV0bywge1xuICBwZGY6IGZ1bmN0aW9uIHBkZih4LCBzY2FsZSwgc2hhcGUpIHtcbiAgICBpZiAoeCA8IHNjYWxlKVxuICAgICAgcmV0dXJuIDA7XG4gICAgcmV0dXJuIChzaGFwZSAqIE1hdGgucG93KHNjYWxlLCBzaGFwZSkpIC8gTWF0aC5wb3coeCwgc2hhcGUgKyAxKTtcbiAgfSxcblxuICBjZGY6IGZ1bmN0aW9uIGNkZih4LCBzY2FsZSwgc2hhcGUpIHtcbiAgICBpZiAoeCA8IHNjYWxlKVxuICAgICAgcmV0dXJuIDA7XG4gICAgcmV0dXJuIDEgLSBNYXRoLnBvdyhzY2FsZSAvIHgsIHNoYXBlKTtcbiAgfSxcblxuICBpbnY6IGZ1bmN0aW9uIGludihwLCBzY2FsZSwgc2hhcGUpIHtcbiAgICByZXR1cm4gc2NhbGUgLyBNYXRoLnBvdygxIC0gcCwgMSAvIHNoYXBlKTtcbiAgfSxcblxuICBtZWFuOiBmdW5jdGlvbiBtZWFuKHNjYWxlLCBzaGFwZSkge1xuICAgIGlmIChzaGFwZSA8PSAxKVxuICAgICAgcmV0dXJuIHVuZGVmaW5lZDtcbiAgICByZXR1cm4gKHNoYXBlICogTWF0aC5wb3coc2NhbGUsIHNoYXBlKSkgLyAoc2hhcGUgLSAxKTtcbiAgfSxcblxuICBtZWRpYW46IGZ1bmN0aW9uIG1lZGlhbihzY2FsZSwgc2hhcGUpIHtcbiAgICByZXR1cm4gc2NhbGUgKiAoc2hhcGUgKiBNYXRoLlNRUlQyKTtcbiAgfSxcblxuICBtb2RlOiBmdW5jdGlvbiBtb2RlKHNjYWxlLyosIHNoYXBlKi8pIHtcbiAgICByZXR1cm4gc2NhbGU7XG4gIH0sXG5cbiAgdmFyaWFuY2UgOiBmdW5jdGlvbihzY2FsZSwgc2hhcGUpIHtcbiAgICBpZiAoc2hhcGUgPD0gMilcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgcmV0dXJuIChzY2FsZSpzY2FsZSAqIHNoYXBlKSAvIChNYXRoLnBvdyhzaGFwZSAtIDEsIDIpICogKHNoYXBlIC0gMikpO1xuICB9XG59KTtcblxuXG5cbi8vIGV4dGVuZCBzdHVkZW50dCBmdW5jdGlvbiB3aXRoIHN0YXRpYyBtZXRob2RzXG5qU3RhdC5leHRlbmQoalN0YXQuc3R1ZGVudHQsIHtcbiAgcGRmOiBmdW5jdGlvbiBwZGYoeCwgZG9mKSB7XG4gICAgZG9mID0gZG9mID4gMWUxMDAgPyAxZTEwMCA6IGRvZjtcbiAgICByZXR1cm4gKDEvKE1hdGguc3FydChkb2YpICogalN0YXQuYmV0YWZuKDAuNSwgZG9mLzIpKSkgKlxuICAgICAgICBNYXRoLnBvdygxICsgKCh4ICogeCkgLyBkb2YpLCAtKChkb2YgKyAxKSAvIDIpKTtcbiAgfSxcblxuICBjZGY6IGZ1bmN0aW9uIGNkZih4LCBkb2YpIHtcbiAgICB2YXIgZG9mMiA9IGRvZiAvIDI7XG4gICAgcmV0dXJuIGpTdGF0LmliZXRhKCh4ICsgTWF0aC5zcXJ0KHggKiB4ICsgZG9mKSkgL1xuICAgICAgICAgICAgICAgICAgICAgICAoMiAqIE1hdGguc3FydCh4ICogeCArIGRvZikpLCBkb2YyLCBkb2YyKTtcbiAgfSxcblxuICBpbnY6IGZ1bmN0aW9uKHAsIGRvZikge1xuICAgIHZhciB4ID0galN0YXQuaWJldGFpbnYoMiAqIE1hdGgubWluKHAsIDEgLSBwKSwgMC41ICogZG9mLCAwLjUpO1xuICAgIHggPSBNYXRoLnNxcnQoZG9mICogKDEgLSB4KSAvIHgpO1xuICAgIHJldHVybiAocCA+IDAuNSkgPyB4IDogLXg7XG4gIH0sXG5cbiAgbWVhbjogZnVuY3Rpb24gbWVhbihkb2YpIHtcbiAgICByZXR1cm4gKGRvZiA+IDEpID8gMCA6IHVuZGVmaW5lZDtcbiAgfSxcblxuICBtZWRpYW46IGZ1bmN0aW9uIG1lZGlhbigvKmRvZiovKSB7XG4gICAgcmV0dXJuIDA7XG4gIH0sXG5cbiAgbW9kZTogZnVuY3Rpb24gbW9kZSgvKmRvZiovKSB7XG4gICAgcmV0dXJuIDA7XG4gIH0sXG5cbiAgc2FtcGxlOiBmdW5jdGlvbiBzYW1wbGUoZG9mKSB7XG4gICAgcmV0dXJuIGpTdGF0LnJhbmRuKCkgKiBNYXRoLnNxcnQoZG9mIC8gKDIgKiBqU3RhdC5yYW5kZyhkb2YgLyAyKSkpO1xuICB9LFxuXG4gIHZhcmlhbmNlOiBmdW5jdGlvbiB2YXJpYW5jZShkb2YpIHtcbiAgICByZXR1cm4gKGRvZiAgPiAyKSA/IGRvZiAvIChkb2YgLSAyKSA6IChkb2YgPiAxKSA/IEluZmluaXR5IDogdW5kZWZpbmVkO1xuICB9XG59KTtcblxuXG5cbi8vIGV4dGVuZCB3ZWlidWxsIGZ1bmN0aW9uIHdpdGggc3RhdGljIG1ldGhvZHNcbmpTdGF0LmV4dGVuZChqU3RhdC53ZWlidWxsLCB7XG4gIHBkZjogZnVuY3Rpb24gcGRmKHgsIHNjYWxlLCBzaGFwZSkge1xuICAgIGlmICh4IDwgMCB8fCBzY2FsZSA8IDAgfHwgc2hhcGUgPCAwKVxuICAgICAgcmV0dXJuIDA7XG4gICAgcmV0dXJuIChzaGFwZSAvIHNjYWxlKSAqIE1hdGgucG93KCh4IC8gc2NhbGUpLCAoc2hhcGUgLSAxKSkgKlxuICAgICAgICBNYXRoLmV4cCgtKE1hdGgucG93KCh4IC8gc2NhbGUpLCBzaGFwZSkpKTtcbiAgfSxcblxuICBjZGY6IGZ1bmN0aW9uIGNkZih4LCBzY2FsZSwgc2hhcGUpIHtcbiAgICByZXR1cm4geCA8IDAgPyAwIDogMSAtIE1hdGguZXhwKC1NYXRoLnBvdygoeCAvIHNjYWxlKSwgc2hhcGUpKTtcbiAgfSxcblxuICBpbnY6IGZ1bmN0aW9uKHAsIHNjYWxlLCBzaGFwZSkge1xuICAgIHJldHVybiBzY2FsZSAqIE1hdGgucG93KC1NYXRoLmxvZygxIC0gcCksIDEgLyBzaGFwZSk7XG4gIH0sXG5cbiAgbWVhbiA6IGZ1bmN0aW9uKHNjYWxlLCBzaGFwZSkge1xuICAgIHJldHVybiBzY2FsZSAqIGpTdGF0LmdhbW1hZm4oMSArIDEgLyBzaGFwZSk7XG4gIH0sXG5cbiAgbWVkaWFuOiBmdW5jdGlvbiBtZWRpYW4oc2NhbGUsIHNoYXBlKSB7XG4gICAgcmV0dXJuIHNjYWxlICogTWF0aC5wb3coTWF0aC5sb2coMiksIDEgLyBzaGFwZSk7XG4gIH0sXG5cbiAgbW9kZTogZnVuY3Rpb24gbW9kZShzY2FsZSwgc2hhcGUpIHtcbiAgICBpZiAoc2hhcGUgPD0gMSlcbiAgICAgIHJldHVybiAwO1xuICAgIHJldHVybiBzY2FsZSAqIE1hdGgucG93KChzaGFwZSAtIDEpIC8gc2hhcGUsIDEgLyBzaGFwZSk7XG4gIH0sXG5cbiAgc2FtcGxlOiBmdW5jdGlvbiBzYW1wbGUoc2NhbGUsIHNoYXBlKSB7XG4gICAgcmV0dXJuIHNjYWxlICogTWF0aC5wb3coLU1hdGgubG9nKGpTdGF0Ll9yYW5kb21fZm4oKSksIDEgLyBzaGFwZSk7XG4gIH0sXG5cbiAgdmFyaWFuY2U6IGZ1bmN0aW9uIHZhcmlhbmNlKHNjYWxlLCBzaGFwZSkge1xuICAgIHJldHVybiBzY2FsZSAqIHNjYWxlICogalN0YXQuZ2FtbWFmbigxICsgMiAvIHNoYXBlKSAtXG4gICAgICAgIE1hdGgucG93KGpTdGF0LndlaWJ1bGwubWVhbihzY2FsZSwgc2hhcGUpLCAyKTtcbiAgfVxufSk7XG5cblxuXG4vLyBleHRlbmQgdW5pZm9ybSBmdW5jdGlvbiB3aXRoIHN0YXRpYyBtZXRob2RzXG5qU3RhdC5leHRlbmQoalN0YXQudW5pZm9ybSwge1xuICBwZGY6IGZ1bmN0aW9uIHBkZih4LCBhLCBiKSB7XG4gICAgcmV0dXJuICh4IDwgYSB8fCB4ID4gYikgPyAwIDogMSAvIChiIC0gYSk7XG4gIH0sXG5cbiAgY2RmOiBmdW5jdGlvbiBjZGYoeCwgYSwgYikge1xuICAgIGlmICh4IDwgYSlcbiAgICAgIHJldHVybiAwO1xuICAgIGVsc2UgaWYgKHggPCBiKVxuICAgICAgcmV0dXJuICh4IC0gYSkgLyAoYiAtIGEpO1xuICAgIHJldHVybiAxO1xuICB9LFxuXG4gIGludjogZnVuY3Rpb24ocCwgYSwgYikge1xuICAgIHJldHVybiBhICsgKHAgKiAoYiAtIGEpKTtcbiAgfSxcblxuICBtZWFuOiBmdW5jdGlvbiBtZWFuKGEsIGIpIHtcbiAgICByZXR1cm4gMC41ICogKGEgKyBiKTtcbiAgfSxcblxuICBtZWRpYW46IGZ1bmN0aW9uIG1lZGlhbihhLCBiKSB7XG4gICAgcmV0dXJuIGpTdGF0Lm1lYW4oYSwgYik7XG4gIH0sXG5cbiAgbW9kZTogZnVuY3Rpb24gbW9kZSgvKmEsIGIqLykge1xuICAgIHRocm93IG5ldyBFcnJvcignbW9kZSBpcyBub3QgeWV0IGltcGxlbWVudGVkJyk7XG4gIH0sXG5cbiAgc2FtcGxlOiBmdW5jdGlvbiBzYW1wbGUoYSwgYikge1xuICAgIHJldHVybiAoYSAvIDIgKyBiIC8gMikgKyAoYiAvIDIgLSBhIC8gMikgKiAoMiAqIGpTdGF0Ll9yYW5kb21fZm4oKSAtIDEpO1xuICB9LFxuXG4gIHZhcmlhbmNlOiBmdW5jdGlvbiB2YXJpYW5jZShhLCBiKSB7XG4gICAgcmV0dXJuIE1hdGgucG93KGIgLSBhLCAyKSAvIDEyO1xuICB9XG59KTtcblxuXG4vLyBHb3QgdGhpcyBmcm9tIGh0dHA6Ly93d3cubWF0aC51Y2xhLmVkdS9+dG9tL2Rpc3RyaWJ1dGlvbnMvYmlub21pYWwuaHRtbFxuZnVuY3Rpb24gYmV0aW5jKHgsIGEsIGIsIGVwcykge1xuICB2YXIgYTAgPSAwO1xuICB2YXIgYjAgPSAxO1xuICB2YXIgYTEgPSAxO1xuICB2YXIgYjEgPSAxO1xuICB2YXIgbTkgPSAwO1xuICB2YXIgYTIgPSAwO1xuICB2YXIgYzk7XG5cbiAgd2hpbGUgKE1hdGguYWJzKChhMSAtIGEyKSAvIGExKSA+IGVwcykge1xuICAgIGEyID0gYTE7XG4gICAgYzkgPSAtKGEgKyBtOSkgKiAoYSArIGIgKyBtOSkgKiB4IC8gKGEgKyAyICogbTkpIC8gKGEgKyAyICogbTkgKyAxKTtcbiAgICBhMCA9IGExICsgYzkgKiBhMDtcbiAgICBiMCA9IGIxICsgYzkgKiBiMDtcbiAgICBtOSA9IG05ICsgMTtcbiAgICBjOSA9IG05ICogKGIgLSBtOSkgKiB4IC8gKGEgKyAyICogbTkgLSAxKSAvIChhICsgMiAqIG05KTtcbiAgICBhMSA9IGEwICsgYzkgKiBhMTtcbiAgICBiMSA9IGIwICsgYzkgKiBiMTtcbiAgICBhMCA9IGEwIC8gYjE7XG4gICAgYjAgPSBiMCAvIGIxO1xuICAgIGExID0gYTEgLyBiMTtcbiAgICBiMSA9IDE7XG4gIH1cblxuICByZXR1cm4gYTEgLyBhO1xufVxuXG5cbi8vIGV4dGVuZCB1bmlmb3JtIGZ1bmN0aW9uIHdpdGggc3RhdGljIG1ldGhvZHNcbmpTdGF0LmV4dGVuZChqU3RhdC5iaW5vbWlhbCwge1xuICBwZGY6IGZ1bmN0aW9uIHBkZihrLCBuLCBwKSB7XG4gICAgcmV0dXJuIChwID09PSAwIHx8IHAgPT09IDEpID9cbiAgICAgICgobiAqIHApID09PSBrID8gMSA6IDApIDpcbiAgICAgIGpTdGF0LmNvbWJpbmF0aW9uKG4sIGspICogTWF0aC5wb3cocCwgaykgKiBNYXRoLnBvdygxIC0gcCwgbiAtIGspO1xuICB9LFxuXG4gIGNkZjogZnVuY3Rpb24gY2RmKHgsIG4sIHApIHtcbiAgICB2YXIgYmV0YWNkZjtcbiAgICB2YXIgZXBzID0gMWUtMTA7XG5cbiAgICBpZiAoeCA8IDApXG4gICAgICByZXR1cm4gMDtcbiAgICBpZiAoeCA+PSBuKVxuICAgICAgcmV0dXJuIDE7XG4gICAgaWYgKHAgPCAwIHx8IHAgPiAxIHx8IG4gPD0gMClcbiAgICAgIHJldHVybiBOYU47XG5cbiAgICB4ID0gTWF0aC5mbG9vcih4KTtcbiAgICB2YXIgeiA9IHA7XG4gICAgdmFyIGEgPSB4ICsgMTtcbiAgICB2YXIgYiA9IG4gLSB4O1xuICAgIHZhciBzID0gYSArIGI7XG4gICAgdmFyIGJ0ID0gTWF0aC5leHAoalN0YXQuZ2FtbWFsbihzKSAtIGpTdGF0LmdhbW1hbG4oYikgLVxuICAgICAgICAgICAgICAgICAgICAgIGpTdGF0LmdhbW1hbG4oYSkgKyBhICogTWF0aC5sb2coeikgKyBiICogTWF0aC5sb2coMSAtIHopKTtcblxuICAgIGlmICh6IDwgKGEgKyAxKSAvIChzICsgMikpXG4gICAgICBiZXRhY2RmID0gYnQgKiBiZXRpbmMoeiwgYSwgYiwgZXBzKTtcbiAgICBlbHNlXG4gICAgICBiZXRhY2RmID0gMSAtIGJ0ICogYmV0aW5jKDEgLSB6LCBiLCBhLCBlcHMpO1xuXG4gICAgcmV0dXJuIE1hdGgucm91bmQoKDEgLSBiZXRhY2RmKSAqICgxIC8gZXBzKSkgLyAoMSAvIGVwcyk7XG4gIH1cbn0pO1xuXG5cblxuLy8gZXh0ZW5kIHVuaWZvcm0gZnVuY3Rpb24gd2l0aCBzdGF0aWMgbWV0aG9kc1xualN0YXQuZXh0ZW5kKGpTdGF0Lm5lZ2Jpbiwge1xuICBwZGY6IGZ1bmN0aW9uIHBkZihrLCByLCBwKSB7XG4gICAgaWYgKGsgIT09IGsgPj4+IDApXG4gICAgICByZXR1cm4gZmFsc2U7XG4gICAgaWYgKGsgPCAwKVxuICAgICAgcmV0dXJuIDA7XG4gICAgcmV0dXJuIGpTdGF0LmNvbWJpbmF0aW9uKGsgKyByIC0gMSwgciAtIDEpICpcbiAgICAgICAgTWF0aC5wb3coMSAtIHAsIGspICogTWF0aC5wb3cocCwgcik7XG4gIH0sXG5cbiAgY2RmOiBmdW5jdGlvbiBjZGYoeCwgciwgcCkge1xuICAgIHZhciBzdW0gPSAwLFxuICAgIGsgPSAwO1xuICAgIGlmICh4IDwgMCkgcmV0dXJuIDA7XG4gICAgZm9yICg7IGsgPD0geDsgaysrKSB7XG4gICAgICBzdW0gKz0galN0YXQubmVnYmluLnBkZihrLCByLCBwKTtcbiAgICB9XG4gICAgcmV0dXJuIHN1bTtcbiAgfVxufSk7XG5cblxuXG4vLyBleHRlbmQgdW5pZm9ybSBmdW5jdGlvbiB3aXRoIHN0YXRpYyBtZXRob2RzXG5qU3RhdC5leHRlbmQoalN0YXQuaHlwZ2VvbSwge1xuICBwZGY6IGZ1bmN0aW9uIHBkZihrLCBOLCBtLCBuKSB7XG4gICAgLy8gSHlwZXJnZW9tZXRyaWMgUERGLlxuXG4gICAgLy8gQSBzaW1wbGlmaWNhdGlvbiBvZiB0aGUgQ0RGIGFsZ29yaXRobSBiZWxvdy5cblxuICAgIC8vIGsgPSBudW1iZXIgb2Ygc3VjY2Vzc2VzIGRyYXduXG4gICAgLy8gTiA9IHBvcHVsYXRpb24gc2l6ZVxuICAgIC8vIG0gPSBudW1iZXIgb2Ygc3VjY2Vzc2VzIGluIHBvcHVsYXRpb25cbiAgICAvLyBuID0gbnVtYmVyIG9mIGl0ZW1zIGRyYXduIGZyb20gcG9wdWxhdGlvblxuXG4gICAgaWYoayAhPT0gayB8IDApIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9IGVsc2UgaWYoayA8IDAgfHwgayA8IG0gLSAoTiAtIG4pKSB7XG4gICAgICAvLyBJdCdzIGltcG9zc2libGUgdG8gaGF2ZSB0aGlzIGZldyBzdWNjZXNzZXMgZHJhd24uXG4gICAgICByZXR1cm4gMDtcbiAgICB9IGVsc2UgaWYoayA+IG4gfHwgayA+IG0pIHtcbiAgICAgIC8vIEl0J3MgaW1wb3NzaWJsZSB0byBoYXZlIHRoaXMgbWFueSBzdWNjZXNzZXMgZHJhd24uXG4gICAgICByZXR1cm4gMDtcbiAgICB9IGVsc2UgaWYgKG0gKiAyID4gTikge1xuICAgICAgLy8gTW9yZSB0aGFuIGhhbGYgdGhlIHBvcHVsYXRpb24gaXMgc3VjY2Vzc2VzLlxuXG4gICAgICBpZihuICogMiA+IE4pIHtcbiAgICAgICAgLy8gTW9yZSB0aGFuIGhhbGYgdGhlIHBvcHVsYXRpb24gaXMgc2FtcGxlZC5cblxuICAgICAgICByZXR1cm4galN0YXQuaHlwZ2VvbS5wZGYoTiAtIG0gLSBuICsgaywgTiwgTiAtIG0sIE4gLSBuKVxuICAgICAgfSBlbHNlIHtcbiAgICAgICAgLy8gSGFsZiBvciBsZXNzIG9mIHRoZSBwb3B1bGF0aW9uIGlzIHNhbXBsZWQuXG5cbiAgICAgICAgcmV0dXJuIGpTdGF0Lmh5cGdlb20ucGRmKG4gLSBrLCBOLCBOIC0gbSwgbik7XG4gICAgICB9XG5cbiAgICB9IGVsc2UgaWYobiAqIDIgPiBOKSB7XG4gICAgICAvLyBIYWxmIG9yIGxlc3MgaXMgc3VjY2Vzc2VzLlxuXG4gICAgICByZXR1cm4galN0YXQuaHlwZ2VvbS5wZGYobSAtIGssIE4sIG0sIE4gLSBuKTtcblxuICAgIH0gZWxzZSBpZihtIDwgbikge1xuICAgICAgLy8gV2Ugd2FudCB0byBoYXZlIHRoZSBudW1iZXIgb2YgdGhpbmdzIHNhbXBsZWQgdG8gYmUgbGVzcyB0aGFuIHRoZVxuICAgICAgLy8gc3VjY2Vzc2VzIGF2YWlsYWJsZS4gU28gc3dhcCB0aGUgZGVmaW5pdGlvbnMgb2Ygc3VjY2Vzc2Z1bCBhbmQgc2FtcGxlZC5cbiAgICAgIHJldHVybiBqU3RhdC5oeXBnZW9tLnBkZihrLCBOLCBuLCBtKTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gSWYgd2UgZ2V0IGhlcmUsIGhhbGYgb3IgbGVzcyBvZiB0aGUgcG9wdWxhdGlvbiB3YXMgc2FtcGxlZCwgaGFsZiBvclxuICAgICAgLy8gbGVzcyBvZiBpdCB3YXMgc3VjY2Vzc2VzLCBhbmQgd2UgaGFkIGZld2VyIHNhbXBsZWQgdGhpbmdzIHRoYW5cbiAgICAgIC8vIHN1Y2Nlc3Nlcy4gTm93IHdlIGNhbiBkbyB0aGlzIGNvbXBsaWNhdGVkIGl0ZXJhdGl2ZSBhbGdvcml0aG0gaW4gYW5cbiAgICAgIC8vIGVmZmljaWVudCB3YXkuXG5cbiAgICAgIC8vIFRoZSBiYXNpYyBwcmVtaXNlIG9mIHRoZSBhbGdvcml0aG0gaXMgdGhhdCB3ZSBwYXJ0aWFsbHkgbm9ybWFsaXplIG91clxuICAgICAgLy8gaW50ZXJtZWRpYXRlIHByb2R1Y3QgdG8ga2VlcCBpdCBpbiBhIG51bWVyaWNhbGx5IGdvb2QgcmVnaW9uLCBhbmQgdGhlblxuICAgICAgLy8gZmluaXNoIHRoZSBub3JtYWxpemF0aW9uIGF0IHRoZSBlbmQuXG5cbiAgICAgIC8vIFRoaXMgdmFyaWFibGUgaG9sZHMgdGhlIHNjYWxlZCBwcm9iYWJpbGl0eSBvZiB0aGUgY3VycmVudCBudW1iZXIgb2ZcbiAgICAgIC8vIHN1Y2Nlc3Nlcy5cbiAgICAgIHZhciBzY2FsZWRQREYgPSAxO1xuXG4gICAgICAvLyBUaGlzIGtlZXBzIHRyYWNrIG9mIGhvdyBtdWNoIHdlIGhhdmUgbm9ybWFsaXplZC5cbiAgICAgIHZhciBzYW1wbGVzRG9uZSA9IDA7XG5cbiAgICAgIGZvcih2YXIgaSA9IDA7IGkgPCBrOyBpKyspIHtcbiAgICAgICAgLy8gRm9yIGV2ZXJ5IHBvc3NpYmxlIG51bWJlciBvZiBzdWNjZXNzZXMgdXAgdG8gdGhhdCBvYnNlcnZlZC4uLlxuXG4gICAgICAgIHdoaWxlKHNjYWxlZFBERiA+IDEgJiYgc2FtcGxlc0RvbmUgPCBuKSB7XG4gICAgICAgICAgLy8gSW50ZXJtZWRpYXRlIHJlc3VsdCBpcyBncm93aW5nIHRvbyBiaWcuIEFwcGx5IHNvbWUgb2YgdGhlXG4gICAgICAgICAgLy8gbm9ybWFsaXphdGlvbiB0byBzaHJpbmsgZXZlcnl0aGluZy5cblxuICAgICAgICAgIHNjYWxlZFBERiAqPSAxIC0gKG0gLyAoTiAtIHNhbXBsZXNEb25lKSk7XG5cbiAgICAgICAgICAvLyBTYXkgd2UndmUgbm9ybWFsaXplZCBieSB0aGlzIHNhbXBsZSBhbHJlYWR5LlxuICAgICAgICAgIHNhbXBsZXNEb25lKys7XG4gICAgICAgIH1cblxuICAgICAgICAvLyBXb3JrIG91dCB0aGUgcGFydGlhbGx5LW5vcm1hbGl6ZWQgaHlwZXJnZW9tZXRyaWMgUERGIGZvciB0aGUgbmV4dFxuICAgICAgICAvLyBudW1iZXIgb2Ygc3VjY2Vzc2VzXG4gICAgICAgIHNjYWxlZFBERiAqPSAobiAtIGkpICogKG0gLSBpKSAvICgoaSArIDEpICogKE4gLSBtIC0gbiArIGkgKyAxKSk7XG4gICAgICB9XG5cbiAgICAgIGZvcig7IHNhbXBsZXNEb25lIDwgbjsgc2FtcGxlc0RvbmUrKykge1xuICAgICAgICAvLyBBcHBseSBhbGwgdGhlIHJlc3Qgb2YgdGhlIG5vcm1hbGl6YXRpb25cbiAgICAgICAgc2NhbGVkUERGICo9IDEgLSAobSAvIChOIC0gc2FtcGxlc0RvbmUpKTtcbiAgICAgIH1cblxuICAgICAgLy8gQm91bmQgYW5zd2VyIHNhbmVseSBiZWZvcmUgcmV0dXJuaW5nLlxuICAgICAgcmV0dXJuIE1hdGgubWluKDEsIE1hdGgubWF4KDAsIHNjYWxlZFBERikpO1xuICAgIH1cbiAgfSxcblxuICBjZGY6IGZ1bmN0aW9uIGNkZih4LCBOLCBtLCBuKSB7XG4gICAgLy8gSHlwZXJnZW9tZXRyaWMgQ0RGLlxuXG4gICAgLy8gVGhpcyBhbGdvcml0aG0gaXMgZHVlIHRvIFByb2YuIFRob21hcyBTLiBGZXJndXNvbiwgPHRvbUBtYXRoLnVjbGEuZWR1PixcbiAgICAvLyBhbmQgY29tZXMgZnJvbSBoaXMgaHlwZXJnZW9tZXRyaWMgdGVzdCBjYWxjdWxhdG9yIGF0XG4gICAgLy8gPGh0dHA6Ly93d3cubWF0aC51Y2xhLmVkdS9+dG9tL2Rpc3RyaWJ1dGlvbnMvSHlwZXJnZW9tZXRyaWMuaHRtbD4uXG5cbiAgICAvLyB4ID0gbnVtYmVyIG9mIHN1Y2Nlc3NlcyBkcmF3blxuICAgIC8vIE4gPSBwb3B1bGF0aW9uIHNpemVcbiAgICAvLyBtID0gbnVtYmVyIG9mIHN1Y2Nlc3NlcyBpbiBwb3B1bGF0aW9uXG4gICAgLy8gbiA9IG51bWJlciBvZiBpdGVtcyBkcmF3biBmcm9tIHBvcHVsYXRpb25cblxuICAgIGlmKHggPCAwIHx8IHggPCBtIC0gKE4gLSBuKSkge1xuICAgICAgLy8gSXQncyBpbXBvc3NpYmxlIHRvIGhhdmUgdGhpcyBmZXcgc3VjY2Vzc2VzIGRyYXduIG9yIGZld2VyLlxuICAgICAgcmV0dXJuIDA7XG4gICAgfSBlbHNlIGlmKHggPj0gbiB8fCB4ID49IG0pIHtcbiAgICAgIC8vIFdlIHdpbGwgYWx3YXlzIGhhdmUgdGhpcyBtYW55IHN1Y2Nlc3NlcyBvciBmZXdlci5cbiAgICAgIHJldHVybiAxO1xuICAgIH0gZWxzZSBpZiAobSAqIDIgPiBOKSB7XG4gICAgICAvLyBNb3JlIHRoYW4gaGFsZiB0aGUgcG9wdWxhdGlvbiBpcyBzdWNjZXNzZXMuXG5cbiAgICAgIGlmKG4gKiAyID4gTikge1xuICAgICAgICAvLyBNb3JlIHRoYW4gaGFsZiB0aGUgcG9wdWxhdGlvbiBpcyBzYW1wbGVkLlxuXG4gICAgICAgIHJldHVybiBqU3RhdC5oeXBnZW9tLmNkZihOIC0gbSAtIG4gKyB4LCBOLCBOIC0gbSwgTiAtIG4pXG4gICAgICB9IGVsc2Uge1xuICAgICAgICAvLyBIYWxmIG9yIGxlc3Mgb2YgdGhlIHBvcHVsYXRpb24gaXMgc2FtcGxlZC5cblxuICAgICAgICByZXR1cm4gMSAtIGpTdGF0Lmh5cGdlb20uY2RmKG4gLSB4IC0gMSwgTiwgTiAtIG0sIG4pO1xuICAgICAgfVxuXG4gICAgfSBlbHNlIGlmKG4gKiAyID4gTikge1xuICAgICAgLy8gSGFsZiBvciBsZXNzIGlzIHN1Y2Nlc3Nlcy5cblxuICAgICAgcmV0dXJuIDEgLSBqU3RhdC5oeXBnZW9tLmNkZihtIC0geCAtIDEsIE4sIG0sIE4gLSBuKTtcblxuICAgIH0gZWxzZSBpZihtIDwgbikge1xuICAgICAgLy8gV2Ugd2FudCB0byBoYXZlIHRoZSBudW1iZXIgb2YgdGhpbmdzIHNhbXBsZWQgdG8gYmUgbGVzcyB0aGFuIHRoZVxuICAgICAgLy8gc3VjY2Vzc2VzIGF2YWlsYWJsZS4gU28gc3dhcCB0aGUgZGVmaW5pdGlvbnMgb2Ygc3VjY2Vzc2Z1bCBhbmQgc2FtcGxlZC5cbiAgICAgIHJldHVybiBqU3RhdC5oeXBnZW9tLmNkZih4LCBOLCBuLCBtKTtcbiAgICB9IGVsc2Uge1xuICAgICAgLy8gSWYgd2UgZ2V0IGhlcmUsIGhhbGYgb3IgbGVzcyBvZiB0aGUgcG9wdWxhdGlvbiB3YXMgc2FtcGxlZCwgaGFsZiBvclxuICAgICAgLy8gbGVzcyBvZiBpdCB3YXMgc3VjY2Vzc2VzLCBhbmQgd2UgaGFkIGZld2VyIHNhbXBsZWQgdGhpbmdzIHRoYW5cbiAgICAgIC8vIHN1Y2Nlc3Nlcy4gTm93IHdlIGNhbiBkbyB0aGlzIGNvbXBsaWNhdGVkIGl0ZXJhdGl2ZSBhbGdvcml0aG0gaW4gYW5cbiAgICAgIC8vIGVmZmljaWVudCB3YXkuXG5cbiAgICAgIC8vIFRoZSBiYXNpYyBwcmVtaXNlIG9mIHRoZSBhbGdvcml0aG0gaXMgdGhhdCB3ZSBwYXJ0aWFsbHkgbm9ybWFsaXplIG91clxuICAgICAgLy8gaW50ZXJtZWRpYXRlIHN1bSB0byBrZWVwIGl0IGluIGEgbnVtZXJpY2FsbHkgZ29vZCByZWdpb24sIGFuZCB0aGVuXG4gICAgICAvLyBmaW5pc2ggdGhlIG5vcm1hbGl6YXRpb24gYXQgdGhlIGVuZC5cblxuICAgICAgLy8gSG9sZHMgdGhlIGludGVybWVkaWF0ZSwgc2NhbGVkIHRvdGFsIENERi5cbiAgICAgIHZhciBzY2FsZWRDREYgPSAxO1xuXG4gICAgICAvLyBUaGlzIHZhcmlhYmxlIGhvbGRzIHRoZSBzY2FsZWQgcHJvYmFiaWxpdHkgb2YgdGhlIGN1cnJlbnQgbnVtYmVyIG9mXG4gICAgICAvLyBzdWNjZXNzZXMuXG4gICAgICB2YXIgc2NhbGVkUERGID0gMTtcblxuICAgICAgLy8gVGhpcyBrZWVwcyB0cmFjayBvZiBob3cgbXVjaCB3ZSBoYXZlIG5vcm1hbGl6ZWQuXG4gICAgICB2YXIgc2FtcGxlc0RvbmUgPSAwO1xuXG4gICAgICBmb3IodmFyIGkgPSAwOyBpIDwgeDsgaSsrKSB7XG4gICAgICAgIC8vIEZvciBldmVyeSBwb3NzaWJsZSBudW1iZXIgb2Ygc3VjY2Vzc2VzIHVwIHRvIHRoYXQgb2JzZXJ2ZWQuLi5cblxuICAgICAgICB3aGlsZShzY2FsZWRDREYgPiAxICYmIHNhbXBsZXNEb25lIDwgbikge1xuICAgICAgICAgIC8vIEludGVybWVkaWF0ZSByZXN1bHQgaXMgZ3Jvd2luZyB0b28gYmlnLiBBcHBseSBzb21lIG9mIHRoZVxuICAgICAgICAgIC8vIG5vcm1hbGl6YXRpb24gdG8gc2hyaW5rIGV2ZXJ5dGhpbmcuXG5cbiAgICAgICAgICB2YXIgZmFjdG9yID0gMSAtIChtIC8gKE4gLSBzYW1wbGVzRG9uZSkpO1xuXG4gICAgICAgICAgc2NhbGVkUERGICo9IGZhY3RvcjtcbiAgICAgICAgICBzY2FsZWRDREYgKj0gZmFjdG9yO1xuXG4gICAgICAgICAgLy8gU2F5IHdlJ3ZlIG5vcm1hbGl6ZWQgYnkgdGhpcyBzYW1wbGUgYWxyZWFkeS5cbiAgICAgICAgICBzYW1wbGVzRG9uZSsrO1xuICAgICAgICB9XG5cbiAgICAgICAgLy8gV29yayBvdXQgdGhlIHBhcnRpYWxseS1ub3JtYWxpemVkIGh5cGVyZ2VvbWV0cmljIFBERiBmb3IgdGhlIG5leHRcbiAgICAgICAgLy8gbnVtYmVyIG9mIHN1Y2Nlc3Nlc1xuICAgICAgICBzY2FsZWRQREYgKj0gKG4gLSBpKSAqIChtIC0gaSkgLyAoKGkgKyAxKSAqIChOIC0gbSAtIG4gKyBpICsgMSkpO1xuXG4gICAgICAgIC8vIEFkZCB0byB0aGUgQ0RGIGFuc3dlci5cbiAgICAgICAgc2NhbGVkQ0RGICs9IHNjYWxlZFBERjtcbiAgICAgIH1cblxuICAgICAgZm9yKDsgc2FtcGxlc0RvbmUgPCBuOyBzYW1wbGVzRG9uZSsrKSB7XG4gICAgICAgIC8vIEFwcGx5IGFsbCB0aGUgcmVzdCBvZiB0aGUgbm9ybWFsaXphdGlvblxuICAgICAgICBzY2FsZWRDREYgKj0gMSAtIChtIC8gKE4gLSBzYW1wbGVzRG9uZSkpO1xuICAgICAgfVxuXG4gICAgICAvLyBCb3VuZCBhbnN3ZXIgc2FuZWx5IGJlZm9yZSByZXR1cm5pbmcuXG4gICAgICByZXR1cm4gTWF0aC5taW4oMSwgTWF0aC5tYXgoMCwgc2NhbGVkQ0RGKSk7XG4gICAgfVxuICB9XG59KTtcblxuXG5cbi8vIGV4dGVuZCB1bmlmb3JtIGZ1bmN0aW9uIHdpdGggc3RhdGljIG1ldGhvZHNcbmpTdGF0LmV4dGVuZChqU3RhdC5wb2lzc29uLCB7XG4gIHBkZjogZnVuY3Rpb24gcGRmKGssIGwpIHtcbiAgICBpZiAobCA8IDAgfHwgKGsgJSAxKSAhPT0gMCB8fCBrIDwgMCkge1xuICAgICAgcmV0dXJuIDA7XG4gICAgfVxuXG4gICAgcmV0dXJuIE1hdGgucG93KGwsIGspICogTWF0aC5leHAoLWwpIC8galN0YXQuZmFjdG9yaWFsKGspO1xuICB9LFxuXG4gIGNkZjogZnVuY3Rpb24gY2RmKHgsIGwpIHtcbiAgICB2YXIgc3VtYXJyID0gW10sXG4gICAgayA9IDA7XG4gICAgaWYgKHggPCAwKSByZXR1cm4gMDtcbiAgICBmb3IgKDsgayA8PSB4OyBrKyspIHtcbiAgICAgIHN1bWFyci5wdXNoKGpTdGF0LnBvaXNzb24ucGRmKGssIGwpKTtcbiAgICB9XG4gICAgcmV0dXJuIGpTdGF0LnN1bShzdW1hcnIpO1xuICB9LFxuXG4gIG1lYW4gOiBmdW5jdGlvbihsKSB7XG4gICAgcmV0dXJuIGw7XG4gIH0sXG5cbiAgdmFyaWFuY2UgOiBmdW5jdGlvbihsKSB7XG4gICAgcmV0dXJuIGw7XG4gIH0sXG5cbiAgc2FtcGxlU21hbGw6IGZ1bmN0aW9uIHNhbXBsZVNtYWxsKGwpIHtcbiAgICB2YXIgcCA9IDEsIGsgPSAwLCBMID0gTWF0aC5leHAoLWwpO1xuICAgIGRvIHtcbiAgICAgIGsrKztcbiAgICAgIHAgKj0galN0YXQuX3JhbmRvbV9mbigpO1xuICAgIH0gd2hpbGUgKHAgPiBMKTtcbiAgICByZXR1cm4gayAtIDE7XG4gIH0sXG5cbiAgc2FtcGxlTGFyZ2U6IGZ1bmN0aW9uIHNhbXBsZUxhcmdlKGwpIHtcbiAgICB2YXIgbGFtID0gbDtcbiAgICB2YXIgaztcbiAgICB2YXIgVSwgViwgc2xhbSwgbG9nbGFtLCBhLCBiLCBpbnZhbHBoYSwgdnIsIHVzO1xuXG4gICAgc2xhbSA9IE1hdGguc3FydChsYW0pO1xuICAgIGxvZ2xhbSA9IE1hdGgubG9nKGxhbSk7XG4gICAgYiA9IDAuOTMxICsgMi41MyAqIHNsYW07XG4gICAgYSA9IC0wLjA1OSArIDAuMDI0ODMgKiBiO1xuICAgIGludmFscGhhID0gMS4xMjM5ICsgMS4xMzI4IC8gKGIgLSAzLjQpO1xuICAgIHZyID0gMC45Mjc3IC0gMy42MjI0IC8gKGIgLSAyKTtcblxuICAgIHdoaWxlICgxKSB7XG4gICAgICBVID0gTWF0aC5yYW5kb20oKSAtIDAuNTtcbiAgICAgIFYgPSBNYXRoLnJhbmRvbSgpO1xuICAgICAgdXMgPSAwLjUgLSBNYXRoLmFicyhVKTtcbiAgICAgIGsgPSBNYXRoLmZsb29yKCgyICogYSAvIHVzICsgYikgKiBVICsgbGFtICsgMC40Myk7XG4gICAgICBpZiAoKHVzID49IDAuMDcpICYmIChWIDw9IHZyKSkge1xuICAgICAgICAgIHJldHVybiBrO1xuICAgICAgfVxuICAgICAgaWYgKChrIDwgMCkgfHwgKCh1cyA8IDAuMDEzKSAmJiAoViA+IHVzKSkpIHtcbiAgICAgICAgICBjb250aW51ZTtcbiAgICAgIH1cbiAgICAgIC8qIGxvZyhWKSA9PSBsb2coMC4wKSBvayBoZXJlICovXG4gICAgICAvKiBpZiBVPT0wLjAgc28gdGhhdCB1cz09MC4wLCBsb2cgaXMgb2sgc2luY2UgYWx3YXlzIHJldHVybnMgKi9cbiAgICAgIGlmICgoTWF0aC5sb2coVikgKyBNYXRoLmxvZyhpbnZhbHBoYSkgLSBNYXRoLmxvZyhhIC8gKHVzICogdXMpICsgYikpIDw9ICgtbGFtICsgayAqIGxvZ2xhbSAtIGpTdGF0LmxvZ2dhbShrICsgMSkpKSB7XG4gICAgICAgICAgcmV0dXJuIGs7XG4gICAgICB9XG4gICAgfVxuICB9LFxuXG4gIHNhbXBsZTogZnVuY3Rpb24gc2FtcGxlKGwpIHtcbiAgICBpZiAobCA8IDEwKVxuICAgICAgcmV0dXJuIHRoaXMuc2FtcGxlU21hbGwobCk7XG4gICAgZWxzZVxuICAgICAgcmV0dXJuIHRoaXMuc2FtcGxlTGFyZ2UobCk7XG4gIH1cbn0pO1xuXG4vLyBleHRlbmQgdHJpYW5ndWxhciBmdW5jdGlvbiB3aXRoIHN0YXRpYyBtZXRob2RzXG5qU3RhdC5leHRlbmQoalN0YXQudHJpYW5ndWxhciwge1xuICBwZGY6IGZ1bmN0aW9uIHBkZih4LCBhLCBiLCBjKSB7XG4gICAgaWYgKGIgPD0gYSB8fCBjIDwgYSB8fCBjID4gYikge1xuICAgICAgcmV0dXJuIE5hTjtcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKHggPCBhIHx8IHggPiBiKSB7XG4gICAgICAgIHJldHVybiAwO1xuICAgICAgfSBlbHNlIGlmICh4IDwgYykge1xuICAgICAgICAgIHJldHVybiAoMiAqICh4IC0gYSkpIC8gKChiIC0gYSkgKiAoYyAtIGEpKTtcbiAgICAgIH0gZWxzZSBpZiAoeCA9PT0gYykge1xuICAgICAgICAgIHJldHVybiAoMiAvIChiIC0gYSkpO1xuICAgICAgfSBlbHNlIHsgLy8geCA+IGNcbiAgICAgICAgICByZXR1cm4gKDIgKiAoYiAtIHgpKSAvICgoYiAtIGEpICogKGIgLSBjKSk7XG4gICAgICB9XG4gICAgfVxuICB9LFxuXG4gIGNkZjogZnVuY3Rpb24gY2RmKHgsIGEsIGIsIGMpIHtcbiAgICBpZiAoYiA8PSBhIHx8IGMgPCBhIHx8IGMgPiBiKVxuICAgICAgcmV0dXJuIE5hTjtcbiAgICBpZiAoeCA8PSBhKVxuICAgICAgcmV0dXJuIDA7XG4gICAgZWxzZSBpZiAoeCA+PSBiKVxuICAgICAgcmV0dXJuIDE7XG4gICAgaWYgKHggPD0gYylcbiAgICAgIHJldHVybiBNYXRoLnBvdyh4IC0gYSwgMikgLyAoKGIgLSBhKSAqIChjIC0gYSkpO1xuICAgIGVsc2UgLy8geCA+IGNcbiAgICAgIHJldHVybiAxIC0gTWF0aC5wb3coYiAtIHgsIDIpIC8gKChiIC0gYSkgKiAoYiAtIGMpKTtcbiAgfSxcblxuICBpbnY6IGZ1bmN0aW9uIGludihwLCBhLCBiLCBjKSB7XG4gICAgaWYgKGIgPD0gYSB8fCBjIDwgYSB8fCBjID4gYikge1xuICAgICAgcmV0dXJuIE5hTjtcbiAgICB9IGVsc2Uge1xuICAgICAgaWYgKHAgPD0gKChjIC0gYSkgLyAoYiAtIGEpKSkge1xuICAgICAgICByZXR1cm4gYSArIChiIC0gYSkgKiBNYXRoLnNxcnQocCAqICgoYyAtIGEpIC8gKGIgLSBhKSkpO1xuICAgICAgfSBlbHNlIHsgLy8gcCA+ICgoYyAtIGEpIC8gKGIgLSBhKSlcbiAgICAgICAgcmV0dXJuIGEgKyAoYiAtIGEpICogKDEgLSBNYXRoLnNxcnQoKDEgLSBwKSAqICgxIC0gKChjIC0gYSkgLyAoYiAtIGEpKSkpKTtcbiAgICAgIH1cbiAgICB9XG4gIH0sXG5cbiAgbWVhbjogZnVuY3Rpb24gbWVhbihhLCBiLCBjKSB7XG4gICAgcmV0dXJuIChhICsgYiArIGMpIC8gMztcbiAgfSxcblxuICBtZWRpYW46IGZ1bmN0aW9uIG1lZGlhbihhLCBiLCBjKSB7XG4gICAgaWYgKGMgPD0gKGEgKyBiKSAvIDIpIHtcbiAgICAgIHJldHVybiBiIC0gTWF0aC5zcXJ0KChiIC0gYSkgKiAoYiAtIGMpKSAvIE1hdGguc3FydCgyKTtcbiAgICB9IGVsc2UgaWYgKGMgPiAoYSArIGIpIC8gMikge1xuICAgICAgcmV0dXJuIGEgKyBNYXRoLnNxcnQoKGIgLSBhKSAqIChjIC0gYSkpIC8gTWF0aC5zcXJ0KDIpO1xuICAgIH1cbiAgfSxcblxuICBtb2RlOiBmdW5jdGlvbiBtb2RlKGEsIGIsIGMpIHtcbiAgICByZXR1cm4gYztcbiAgfSxcblxuICBzYW1wbGU6IGZ1bmN0aW9uIHNhbXBsZShhLCBiLCBjKSB7XG4gICAgdmFyIHUgPSBqU3RhdC5fcmFuZG9tX2ZuKCk7XG4gICAgaWYgKHUgPCAoKGMgLSBhKSAvIChiIC0gYSkpKVxuICAgICAgcmV0dXJuIGEgKyBNYXRoLnNxcnQodSAqIChiIC0gYSkgKiAoYyAtIGEpKVxuICAgIHJldHVybiBiIC0gTWF0aC5zcXJ0KCgxIC0gdSkgKiAoYiAtIGEpICogKGIgLSBjKSk7XG4gIH0sXG5cbiAgdmFyaWFuY2U6IGZ1bmN0aW9uIHZhcmlhbmNlKGEsIGIsIGMpIHtcbiAgICByZXR1cm4gKGEgKiBhICsgYiAqIGIgKyBjICogYyAtIGEgKiBiIC0gYSAqIGMgLSBiICogYykgLyAxODtcbiAgfVxufSk7XG5cblxuLy8gZXh0ZW5kIGFyY3NpbmUgZnVuY3Rpb24gd2l0aCBzdGF0aWMgbWV0aG9kc1xualN0YXQuZXh0ZW5kKGpTdGF0LmFyY3NpbmUsIHtcbiAgcGRmOiBmdW5jdGlvbiBwZGYoeCwgYSwgYikge1xuICAgIGlmIChiIDw9IGEpIHJldHVybiBOYU47XG5cbiAgICByZXR1cm4gKHggPD0gYSB8fCB4ID49IGIpID8gMCA6XG4gICAgICAoMiAvIE1hdGguUEkpICpcbiAgICAgICAgTWF0aC5wb3coTWF0aC5wb3coYiAtIGEsIDIpIC1cbiAgICAgICAgICAgICAgICAgIE1hdGgucG93KDIgKiB4IC0gYSAtIGIsIDIpLCAtMC41KTtcbiAgfSxcblxuICBjZGY6IGZ1bmN0aW9uIGNkZih4LCBhLCBiKSB7XG4gICAgaWYgKHggPCBhKVxuICAgICAgcmV0dXJuIDA7XG4gICAgZWxzZSBpZiAoeCA8IGIpXG4gICAgICByZXR1cm4gKDIgLyBNYXRoLlBJKSAqIE1hdGguYXNpbihNYXRoLnNxcnQoKHggLSBhKS8oYiAtIGEpKSk7XG4gICAgcmV0dXJuIDE7XG4gIH0sXG5cbiAgaW52OiBmdW5jdGlvbihwLCBhLCBiKSB7XG4gICAgcmV0dXJuIGEgKyAoMC41IC0gMC41ICogTWF0aC5jb3MoTWF0aC5QSSAqIHApKSAqIChiIC0gYSk7XG4gIH0sXG5cbiAgbWVhbjogZnVuY3Rpb24gbWVhbihhLCBiKSB7XG4gICAgaWYgKGIgPD0gYSkgcmV0dXJuIE5hTjtcbiAgICByZXR1cm4gKGEgKyBiKSAvIDI7XG4gIH0sXG5cbiAgbWVkaWFuOiBmdW5jdGlvbiBtZWRpYW4oYSwgYikge1xuICAgIGlmIChiIDw9IGEpIHJldHVybiBOYU47XG4gICAgcmV0dXJuIChhICsgYikgLyAyO1xuICB9LFxuXG4gIG1vZGU6IGZ1bmN0aW9uIG1vZGUoLyphLCBiKi8pIHtcbiAgICB0aHJvdyBuZXcgRXJyb3IoJ21vZGUgaXMgbm90IHlldCBpbXBsZW1lbnRlZCcpO1xuICB9LFxuXG4gIHNhbXBsZTogZnVuY3Rpb24gc2FtcGxlKGEsIGIpIHtcbiAgICByZXR1cm4gKChhICsgYikgLyAyKSArICgoYiAtIGEpIC8gMikgKlxuICAgICAgTWF0aC5zaW4oMiAqIE1hdGguUEkgKiBqU3RhdC51bmlmb3JtLnNhbXBsZSgwLCAxKSk7XG4gIH0sXG5cbiAgdmFyaWFuY2U6IGZ1bmN0aW9uIHZhcmlhbmNlKGEsIGIpIHtcbiAgICBpZiAoYiA8PSBhKSByZXR1cm4gTmFOO1xuICAgIHJldHVybiBNYXRoLnBvdyhiIC0gYSwgMikgLyA4O1xuICB9XG59KTtcblxuXG5mdW5jdGlvbiBsYXBsYWNlU2lnbih4KSB7IHJldHVybiB4IC8gTWF0aC5hYnMoeCk7IH1cblxualN0YXQuZXh0ZW5kKGpTdGF0LmxhcGxhY2UsIHtcbiAgcGRmOiBmdW5jdGlvbiBwZGYoeCwgbXUsIGIpIHtcbiAgICByZXR1cm4gKGIgPD0gMCkgPyAwIDogKE1hdGguZXhwKC1NYXRoLmFicyh4IC0gbXUpIC8gYikpIC8gKDIgKiBiKTtcbiAgfSxcblxuICBjZGY6IGZ1bmN0aW9uIGNkZih4LCBtdSwgYikge1xuICAgIGlmIChiIDw9IDApIHsgcmV0dXJuIDA7IH1cblxuICAgIGlmKHggPCBtdSkge1xuICAgICAgcmV0dXJuIDAuNSAqIE1hdGguZXhwKCh4IC0gbXUpIC8gYik7XG4gICAgfSBlbHNlIHtcbiAgICAgIHJldHVybiAxIC0gMC41ICogTWF0aC5leHAoLSAoeCAtIG11KSAvIGIpO1xuICAgIH1cbiAgfSxcblxuICBtZWFuOiBmdW5jdGlvbihtdS8qLCBiKi8pIHtcbiAgICByZXR1cm4gbXU7XG4gIH0sXG5cbiAgbWVkaWFuOiBmdW5jdGlvbihtdS8qLCBiKi8pIHtcbiAgICByZXR1cm4gbXU7XG4gIH0sXG5cbiAgbW9kZTogZnVuY3Rpb24obXUvKiwgYiovKSB7XG4gICAgcmV0dXJuIG11O1xuICB9LFxuXG4gIHZhcmlhbmNlOiBmdW5jdGlvbihtdSwgYikge1xuICAgIHJldHVybiAyICogYiAqIGI7XG4gIH0sXG5cbiAgc2FtcGxlOiBmdW5jdGlvbiBzYW1wbGUobXUsIGIpIHtcbiAgICB2YXIgdSA9IGpTdGF0Ll9yYW5kb21fZm4oKSAtIDAuNTtcblxuICAgIHJldHVybiBtdSAtIChiICogbGFwbGFjZVNpZ24odSkgKiBNYXRoLmxvZygxIC0gKDIgKiBNYXRoLmFicyh1KSkpKTtcbiAgfVxufSk7XG5cbmZ1bmN0aW9uIHR1a2V5V3Byb2IodywgcnIsIGNjKSB7XG4gIHZhciBubGVnID0gMTI7XG4gIHZhciBpaGFsZiA9IDY7XG5cbiAgdmFyIEMxID0gLTMwO1xuICB2YXIgQzIgPSAtNTA7XG4gIHZhciBDMyA9IDYwO1xuICB2YXIgYmIgICA9IDg7XG4gIHZhciB3bGFyID0gMztcbiAgdmFyIHdpbmNyMSA9IDI7XG4gIHZhciB3aW5jcjIgPSAzO1xuICB2YXIgeGxlZyA9IFtcbiAgICAwLjk4MTU2MDYzNDI0NjcxOTI1MDY5MDU0OTA5MDE0OSxcbiAgICAwLjkwNDExNzI1NjM3MDQ3NDg1NjY3ODQ2NTg2NjExOSxcbiAgICAwLjc2OTkwMjY3NDE5NDMwNDY4NzAzNjg5MzgzMzIxMyxcbiAgICAwLjU4NzMxNzk1NDI4NjYxNzQ0NzI5NjcwMjQxODk0MSxcbiAgICAwLjM2NzgzMTQ5ODk5ODE4MDE5Mzc1MjY5MTUzNjY0NCxcbiAgICAwLjEyNTIzMzQwODUxMTQ2ODkxNTQ3MjQ0MTM2OTQ2NFxuICBdO1xuICB2YXIgYWxlZyA9IFtcbiAgICAwLjA0NzE3NTMzNjM4NjUxMTgyNzE5NDYxNTk2MTQ4NSxcbiAgICAwLjEwNjkzOTMyNTk5NTMxODQzMDk2MDI1NDcxODE5NCxcbiAgICAwLjE2MDA3ODMyODU0MzM0NjIyNjMzNDY1MjUyOTU0MyxcbiAgICAwLjIwMzE2NzQyNjcyMzA2NTkyMTc0OTA2NDQ1NTgxMCxcbiAgICAwLjIzMzQ5MjUzNjUzODM1NDgwODc2MDg0OTg5ODkyNSxcbiAgICAwLjI0OTE0NzA0NTgxMzQwMjc4NTAwMDU2MjQzNjA0M1xuICBdO1xuXG4gIHZhciBxc3F6ID0gdyAqIDAuNTtcblxuICAvLyBpZiB3ID49IDE2IHRoZW4gdGhlIGludGVncmFsIGxvd2VyIGJvdW5kIChvY2N1cnMgZm9yIGM9MjApXG4gIC8vIGlzIDAuOTk5OTk5OTk5OTk5OTUgc28gcmV0dXJuIGEgdmFsdWUgb2YgMS5cblxuICBpZiAocXNxeiA+PSBiYilcbiAgICByZXR1cm4gMS4wO1xuXG4gIC8vIGZpbmQgKGYody8yKSAtIDEpIF4gY2NcbiAgLy8gKGZpcnN0IHRlcm0gaW4gaW50ZWdyYWwgb2YgaGFydGxleSdzIGZvcm0pLlxuXG4gIHZhciBwcl93ID0gMiAqIGpTdGF0Lm5vcm1hbC5jZGYocXNxeiwgMCwgMSwgMSwgMCkgLSAxOyAvLyBlcmYocXNxeiAvIE1fU1FSVDIpXG4gIC8vIGlmIHByX3cgXiBjYyA8IDJlLTIyIHRoZW4gc2V0IHByX3cgPSAwXG4gIGlmIChwcl93ID49IE1hdGguZXhwKEMyIC8gY2MpKVxuICAgIHByX3cgPSBNYXRoLnBvdyhwcl93LCBjYyk7XG4gIGVsc2VcbiAgICBwcl93ID0gMC4wO1xuXG4gIC8vIGlmIHcgaXMgbGFyZ2UgdGhlbiB0aGUgc2Vjb25kIGNvbXBvbmVudCBvZiB0aGVcbiAgLy8gaW50ZWdyYWwgaXMgc21hbGwsIHNvIGZld2VyIGludGVydmFscyBhcmUgbmVlZGVkLlxuXG4gIHZhciB3aW5jcjtcbiAgaWYgKHcgPiB3bGFyKVxuICAgIHdpbmNyID0gd2luY3IxO1xuICBlbHNlXG4gICAgd2luY3IgPSB3aW5jcjI7XG5cbiAgLy8gZmluZCB0aGUgaW50ZWdyYWwgb2Ygc2Vjb25kIHRlcm0gb2YgaGFydGxleSdzIGZvcm1cbiAgLy8gZm9yIHRoZSBpbnRlZ3JhbCBvZiB0aGUgcmFuZ2UgZm9yIGVxdWFsLWxlbmd0aFxuICAvLyBpbnRlcnZhbHMgdXNpbmcgbGVnZW5kcmUgcXVhZHJhdHVyZS4gIGxpbWl0cyBvZlxuICAvLyBpbnRlZ3JhdGlvbiBhcmUgZnJvbSAody8yLCA4KS4gIHR3byBvciB0aHJlZVxuICAvLyBlcXVhbC1sZW5ndGggaW50ZXJ2YWxzIGFyZSB1c2VkLlxuXG4gIC8vIGJsYiBhbmQgYnViIGFyZSBsb3dlciBhbmQgdXBwZXIgbGltaXRzIG9mIGludGVncmF0aW9uLlxuXG4gIHZhciBibGIgPSBxc3F6O1xuICB2YXIgYmluYyA9IChiYiAtIHFzcXopIC8gd2luY3I7XG4gIHZhciBidWIgPSBibGIgKyBiaW5jO1xuICB2YXIgZWluc3VtID0gMC4wO1xuXG4gIC8vIGludGVncmF0ZSBvdmVyIGVhY2ggaW50ZXJ2YWxcblxuICB2YXIgY2MxID0gY2MgLSAxLjA7XG4gIGZvciAodmFyIHdpID0gMTsgd2kgPD0gd2luY3I7IHdpKyspIHtcbiAgICB2YXIgZWxzdW0gPSAwLjA7XG4gICAgdmFyIGEgPSAwLjUgKiAoYnViICsgYmxiKTtcblxuICAgIC8vIGxlZ2VuZHJlIHF1YWRyYXR1cmUgd2l0aCBvcmRlciA9IG5sZWdcblxuICAgIHZhciBiID0gMC41ICogKGJ1YiAtIGJsYik7XG5cbiAgICBmb3IgKHZhciBqaiA9IDE7IGpqIDw9IG5sZWc7IGpqKyspIHtcbiAgICAgIHZhciBqLCB4eDtcbiAgICAgIGlmIChpaGFsZiA8IGpqKSB7XG4gICAgICAgIGogPSAobmxlZyAtIGpqKSArIDE7XG4gICAgICAgIHh4ID0geGxlZ1tqLTFdO1xuICAgICAgfSBlbHNlIHtcbiAgICAgICAgaiA9IGpqO1xuICAgICAgICB4eCA9IC14bGVnW2otMV07XG4gICAgICB9XG4gICAgICB2YXIgYyA9IGIgKiB4eDtcbiAgICAgIHZhciBhYyA9IGEgKyBjO1xuXG4gICAgICAvLyBpZiBleHAoLXFleHBvLzIpIDwgOWUtMTQsXG4gICAgICAvLyB0aGVuIGRvZXNuJ3QgY29udHJpYnV0ZSB0byBpbnRlZ3JhbFxuXG4gICAgICB2YXIgcWV4cG8gPSBhYyAqIGFjO1xuICAgICAgaWYgKHFleHBvID4gQzMpXG4gICAgICAgIGJyZWFrO1xuXG4gICAgICB2YXIgcHBsdXMgPSAyICogalN0YXQubm9ybWFsLmNkZihhYywgMCwgMSwgMSwgMCk7XG4gICAgICB2YXIgcG1pbnVzPSAyICogalN0YXQubm9ybWFsLmNkZihhYywgdywgMSwgMSwgMCk7XG5cbiAgICAgIC8vIGlmIHJpbnN1bSBeIChjYy0xKSA8IDllLTE0LFxuICAgICAgLy8gdGhlbiBkb2Vzbid0IGNvbnRyaWJ1dGUgdG8gaW50ZWdyYWxcblxuICAgICAgdmFyIHJpbnN1bSA9IChwcGx1cyAqIDAuNSkgLSAocG1pbnVzICogMC41KTtcbiAgICAgIGlmIChyaW5zdW0gPj0gTWF0aC5leHAoQzEgLyBjYzEpKSB7XG4gICAgICAgIHJpbnN1bSA9IChhbGVnW2otMV0gKiBNYXRoLmV4cCgtKDAuNSAqIHFleHBvKSkpICogTWF0aC5wb3cocmluc3VtLCBjYzEpO1xuICAgICAgICBlbHN1bSArPSByaW5zdW07XG4gICAgICB9XG4gICAgfVxuICAgIGVsc3VtICo9ICgoKDIuMCAqIGIpICogY2MpIC8gTWF0aC5zcXJ0KDIgKiBNYXRoLlBJKSk7XG4gICAgZWluc3VtICs9IGVsc3VtO1xuICAgIGJsYiA9IGJ1YjtcbiAgICBidWIgKz0gYmluYztcbiAgfVxuXG4gIC8vIGlmIHByX3cgXiByciA8IDllLTE0LCB0aGVuIHJldHVybiAwXG4gIHByX3cgKz0gZWluc3VtO1xuICBpZiAocHJfdyA8PSBNYXRoLmV4cChDMSAvIHJyKSlcbiAgICByZXR1cm4gMDtcblxuICBwcl93ID0gTWF0aC5wb3cocHJfdywgcnIpO1xuICBpZiAocHJfdyA+PSAxKSAvLyAxIHdhcyBpTWF4IHdhcyBlcHNcbiAgICByZXR1cm4gMTtcbiAgcmV0dXJuIHByX3c7XG59XG5cbmZ1bmN0aW9uIHR1a2V5UWludihwLCBjLCB2KSB7XG4gIHZhciBwMCA9IDAuMzIyMjMyNDIxMDg4O1xuICB2YXIgcTAgPSAwLjk5MzQ4NDYyNjA2MGUtMDE7XG4gIHZhciBwMSA9IC0xLjA7XG4gIHZhciBxMSA9IDAuNTg4NTgxNTcwNDk1O1xuICB2YXIgcDIgPSAtMC4zNDIyNDIwODg1NDc7XG4gIHZhciBxMiA9IDAuNTMxMTAzNDYyMzY2O1xuICB2YXIgcDMgPSAtMC4yMDQyMzEyMTAxMjU7XG4gIHZhciBxMyA9IDAuMTAzNTM3NzUyODUwO1xuICB2YXIgcDQgPSAtMC40NTM2NDIyMTAxNDhlLTA0O1xuICB2YXIgcTQgPSAwLjM4NTYwNzAwNjM0ZS0wMjtcbiAgdmFyIGMxID0gMC44ODMyO1xuICB2YXIgYzIgPSAwLjIzNjg7XG4gIHZhciBjMyA9IDEuMjE0O1xuICB2YXIgYzQgPSAxLjIwODtcbiAgdmFyIGM1ID0gMS40MTQyO1xuICB2YXIgdm1heCA9IDEyMC4wO1xuXG4gIHZhciBwcyA9IDAuNSAtIDAuNSAqIHA7XG4gIHZhciB5aSA9IE1hdGguc3FydChNYXRoLmxvZygxLjAgLyAocHMgKiBwcykpKTtcbiAgdmFyIHQgPSB5aSArICgoKCggeWkgKiBwNCArIHAzKSAqIHlpICsgcDIpICogeWkgKyBwMSkgKiB5aSArIHAwKVxuICAgICAvICgoKCggeWkgKiBxNCArIHEzKSAqIHlpICsgcTIpICogeWkgKyBxMSkgKiB5aSArIHEwKTtcbiAgaWYgKHYgPCB2bWF4KSB0ICs9ICh0ICogdCAqIHQgKyB0KSAvIHYgLyA0LjA7XG4gIHZhciBxID0gYzEgLSBjMiAqIHQ7XG4gIGlmICh2IDwgdm1heCkgcSArPSAtYzMgLyB2ICsgYzQgKiB0IC8gdjtcbiAgcmV0dXJuIHQgKiAocSAqIE1hdGgubG9nKGMgLSAxLjApICsgYzUpO1xufVxuXG5qU3RhdC5leHRlbmQoalN0YXQudHVrZXksIHtcbiAgY2RmOiBmdW5jdGlvbiBjZGYocSwgbm1lYW5zLCBkZikge1xuICAgIC8vIElkZW50aWNhbCBpbXBsZW1lbnRhdGlvbiBhcyB0aGUgUiBwdHVrZXkoKSBmdW5jdGlvbiBhcyBvZiBjb21taXQgNjg5NDdcbiAgICB2YXIgcnIgPSAxO1xuICAgIHZhciBjYyA9IG5tZWFucztcblxuICAgIHZhciBubGVncSA9IDE2O1xuICAgIHZhciBpaGFsZnEgPSA4O1xuXG4gICAgdmFyIGVwczEgPSAtMzAuMDtcbiAgICB2YXIgZXBzMiA9IDEuMGUtMTQ7XG4gICAgdmFyIGRoYWYgID0gMTAwLjA7XG4gICAgdmFyIGRxdWFyID0gODAwLjA7XG4gICAgdmFyIGRlaWdoID0gNTAwMC4wO1xuICAgIHZhciBkbGFyZyA9IDI1MDAwLjA7XG4gICAgdmFyIHVsZW4xID0gMS4wO1xuICAgIHZhciB1bGVuMiA9IDAuNTtcbiAgICB2YXIgdWxlbjMgPSAwLjI1O1xuICAgIHZhciB1bGVuNCA9IDAuMTI1O1xuICAgIHZhciB4bGVncSA9IFtcbiAgICAgIDAuOTg5NDAwOTM0OTkxNjQ5OTMyNTk2MTU0MTczNDUwLFxuICAgICAgMC45NDQ1NzUwMjMwNzMyMzI1NzYwNzc5ODg0MTU1MzUsXG4gICAgICAwLjg2NTYzMTIwMjM4NzgzMTc0Mzg4MDQ2Nzg5NzcxMixcbiAgICAgIDAuNzU1NDA0NDA4MzU1MDAzMDMzODk1MTAxMTk0ODQ3LFxuICAgICAgMC42MTc4NzYyNDQ0MDI2NDM3NDg0NDY2NzE3NjQwNDksXG4gICAgICAwLjQ1ODAxNjc3NzY1NzIyNzM4NjM0MjQxOTQ0Mjk4NCxcbiAgICAgIDAuMjgxNjAzNTUwNzc5MjU4OTEzMjMwNDYwNTAxNDYwLFxuICAgICAgMC45NTAxMjUwOTgzNzYzNzQ0MDE4NTMxOTMzNTQyNTBlLTFcbiAgICBdO1xuICAgIHZhciBhbGVncSA9IFtcbiAgICAgIDAuMjcxNTI0NTk0MTE3NTQwOTQ4NTE3ODA1NzI0NTYwZS0xLFxuICAgICAgMC42MjI1MzUyMzkzODY0Nzg5Mjg2Mjg0MzgzNjk5NDRlLTEsXG4gICAgICAwLjk1MTU4NTExNjgyNDkyNzg0ODA5OTI1MTA3NjAyMmUtMSxcbiAgICAgIDAuMTI0NjI4OTcxMjU1NTMzODcyMDUyNDc2MjgyMTkyLFxuICAgICAgMC4xNDk1OTU5ODg4MTY1NzY3MzIwODE1MDE3MzA1NDcsXG4gICAgICAwLjE2OTE1NjUxOTM5NTAwMjUzODE4OTMxMjA3OTAzMCxcbiAgICAgIDAuMTgyNjAzNDE1MDQ0OTIzNTg4ODY2NzYzNjY3OTY5LFxuICAgICAgMC4xODk0NTA2MTA0NTUwNjg0OTYyODUzOTY3MjMyMDhcbiAgICBdO1xuXG4gICAgaWYgKHEgPD0gMClcbiAgICAgIHJldHVybiAwO1xuXG4gICAgLy8gZGYgbXVzdCBiZSA+IDFcbiAgICAvLyB0aGVyZSBtdXN0IGJlIGF0IGxlYXN0IHR3byB2YWx1ZXNcblxuICAgIGlmIChkZiA8IDIgfHwgcnIgPCAxIHx8IGNjIDwgMikgcmV0dXJuIE5hTjtcblxuICAgIGlmICghTnVtYmVyLmlzRmluaXRlKHEpKVxuICAgICAgcmV0dXJuIDE7XG5cbiAgICBpZiAoZGYgPiBkbGFyZylcbiAgICAgIHJldHVybiB0dWtleVdwcm9iKHEsIHJyLCBjYyk7XG5cbiAgICAvLyBjYWxjdWxhdGUgbGVhZGluZyBjb25zdGFudFxuXG4gICAgdmFyIGYyID0gZGYgKiAwLjU7XG4gICAgdmFyIGYybGYgPSAoKGYyICogTWF0aC5sb2coZGYpKSAtIChkZiAqIE1hdGgubG9nKDIpKSkgLSBqU3RhdC5nYW1tYWxuKGYyKTtcbiAgICB2YXIgZjIxID0gZjIgLSAxLjA7XG5cbiAgICAvLyBpbnRlZ3JhbCBpcyBkaXZpZGVkIGludG8gdW5pdCwgaGFsZi11bml0LCBxdWFydGVyLXVuaXQsIG9yXG4gICAgLy8gZWlnaHRoLXVuaXQgbGVuZ3RoIGludGVydmFscyBkZXBlbmRpbmcgb24gdGhlIHZhbHVlIG9mIHRoZVxuICAgIC8vIGRlZ3JlZXMgb2YgZnJlZWRvbS5cblxuICAgIHZhciBmZjQgPSBkZiAqIDAuMjU7XG4gICAgdmFyIHVsZW47XG4gICAgaWYgICAgICAoZGYgPD0gZGhhZikgIHVsZW4gPSB1bGVuMTtcbiAgICBlbHNlIGlmIChkZiA8PSBkcXVhcikgdWxlbiA9IHVsZW4yO1xuICAgIGVsc2UgaWYgKGRmIDw9IGRlaWdoKSB1bGVuID0gdWxlbjM7XG4gICAgZWxzZSAgICAgICAgICAgICAgICAgIHVsZW4gPSB1bGVuNDtcblxuICAgIGYybGYgKz0gTWF0aC5sb2codWxlbik7XG5cbiAgICAvLyBpbnRlZ3JhdGUgb3ZlciBlYWNoIHN1YmludGVydmFsXG5cbiAgICB2YXIgYW5zID0gMC4wO1xuXG4gICAgZm9yICh2YXIgaSA9IDE7IGkgPD0gNTA7IGkrKykge1xuICAgICAgdmFyIG90c3VtID0gMC4wO1xuXG4gICAgICAvLyBsZWdlbmRyZSBxdWFkcmF0dXJlIHdpdGggb3JkZXIgPSBubGVncVxuICAgICAgLy8gbm9kZXMgKHN0b3JlZCBpbiB4bGVncSkgYXJlIHN5bW1ldHJpYyBhcm91bmQgemVyby5cblxuICAgICAgdmFyIHR3YTEgPSAoMiAqIGkgLSAxKSAqIHVsZW47XG5cbiAgICAgIGZvciAodmFyIGpqID0gMTsgamogPD0gbmxlZ3E7IGpqKyspIHtcbiAgICAgICAgdmFyIGosIHQxO1xuICAgICAgICBpZiAoaWhhbGZxIDwgamopIHtcbiAgICAgICAgICBqID0gamogLSBpaGFsZnEgLSAxO1xuICAgICAgICAgIHQxID0gKGYybGYgKyAoZjIxICogTWF0aC5sb2codHdhMSArICh4bGVncVtqXSAqIHVsZW4pKSkpXG4gICAgICAgICAgICAgIC0gKCgoeGxlZ3Fbal0gKiB1bGVuKSArIHR3YTEpICogZmY0KTtcbiAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICBqID0gamogLSAxO1xuICAgICAgICAgIHQxID0gKGYybGYgKyAoZjIxICogTWF0aC5sb2codHdhMSAtICh4bGVncVtqXSAqIHVsZW4pKSkpXG4gICAgICAgICAgICAgICsgKCgoeGxlZ3Fbal0gKiB1bGVuKSAtIHR3YTEpICogZmY0KTtcbiAgICAgICAgfVxuXG4gICAgICAgIC8vIGlmIGV4cCh0MSkgPCA5ZS0xNCwgdGhlbiBkb2Vzbid0IGNvbnRyaWJ1dGUgdG8gaW50ZWdyYWxcbiAgICAgICAgdmFyIHFzcXo7XG4gICAgICAgIGlmICh0MSA+PSBlcHMxKSB7XG4gICAgICAgICAgaWYgKGloYWxmcSA8IGpqKSB7XG4gICAgICAgICAgICBxc3F6ID0gcSAqIE1hdGguc3FydCgoKHhsZWdxW2pdICogdWxlbikgKyB0d2ExKSAqIDAuNSk7XG4gICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgIHFzcXogPSBxICogTWF0aC5zcXJ0KCgoLSh4bGVncVtqXSAqIHVsZW4pKSArIHR3YTEpICogMC41KTtcbiAgICAgICAgICB9XG5cbiAgICAgICAgICAvLyBjYWxsIHdwcm9iIHRvIGZpbmQgaW50ZWdyYWwgb2YgcmFuZ2UgcG9ydGlvblxuXG4gICAgICAgICAgdmFyIHdwcmIgPSB0dWtleVdwcm9iKHFzcXosIHJyLCBjYyk7XG4gICAgICAgICAgdmFyIHJvdHN1bSA9ICh3cHJiICogYWxlZ3Fbal0pICogTWF0aC5leHAodDEpO1xuICAgICAgICAgIG90c3VtICs9IHJvdHN1bTtcbiAgICAgICAgfVxuICAgICAgICAvLyBlbmQgbGVnZW5kcmUgaW50ZWdyYWwgZm9yIGludGVydmFsIGlcbiAgICAgICAgLy8gTDIwMDpcbiAgICAgIH1cblxuICAgICAgLy8gaWYgaW50ZWdyYWwgZm9yIGludGVydmFsIGkgPCAxZS0xNCwgdGhlbiBzdG9wLlxuICAgICAgLy8gSG93ZXZlciwgaW4gb3JkZXIgdG8gYXZvaWQgc21hbGwgYXJlYSB1bmRlciBsZWZ0IHRhaWwsXG4gICAgICAvLyBhdCBsZWFzdCAgMSAvIHVsZW4gIGludGVydmFscyBhcmUgY2FsY3VsYXRlZC5cbiAgICAgIGlmIChpICogdWxlbiA+PSAxLjAgJiYgb3RzdW0gPD0gZXBzMilcbiAgICAgICAgYnJlYWs7XG5cbiAgICAgIC8vIGVuZCBvZiBpbnRlcnZhbCBpXG4gICAgICAvLyBMMzMwOlxuXG4gICAgICBhbnMgKz0gb3RzdW07XG4gICAgfVxuXG4gICAgaWYgKG90c3VtID4gZXBzMikgeyAvLyBub3QgY29udmVyZ2VkXG4gICAgICB0aHJvdyBuZXcgRXJyb3IoJ3R1a2V5LmNkZiBmYWlsZWQgdG8gY29udmVyZ2UnKTtcbiAgICB9XG4gICAgaWYgKGFucyA+IDEpXG4gICAgICBhbnMgPSAxO1xuICAgIHJldHVybiBhbnM7XG4gIH0sXG5cbiAgaW52OiBmdW5jdGlvbihwLCBubWVhbnMsIGRmKSB7XG4gICAgLy8gSWRlbnRpY2FsIGltcGxlbWVudGF0aW9uIGFzIHRoZSBSIHF0dWtleSgpIGZ1bmN0aW9uIGFzIG9mIGNvbW1pdCA2ODk0N1xuICAgIHZhciByciA9IDE7XG4gICAgdmFyIGNjID0gbm1lYW5zO1xuXG4gICAgdmFyIGVwcyA9IDAuMDAwMTtcbiAgICB2YXIgbWF4aXRlciA9IDUwO1xuXG4gICAgLy8gZGYgbXVzdCBiZSA+IDEgOyB0aGVyZSBtdXN0IGJlIGF0IGxlYXN0IHR3byB2YWx1ZXNcbiAgICBpZiAoZGYgPCAyIHx8IHJyIDwgMSB8fCBjYyA8IDIpIHJldHVybiBOYU47XG5cbiAgICBpZiAocCA8IDAgfHwgcCA+IDEpIHJldHVybiBOYU47XG4gICAgaWYgKHAgPT09IDApIHJldHVybiAwO1xuICAgIGlmIChwID09PSAxKSByZXR1cm4gSW5maW5pdHk7XG5cbiAgICAvLyBJbml0aWFsIHZhbHVlXG5cbiAgICB2YXIgeDAgPSB0dWtleVFpbnYocCwgY2MsIGRmKTtcblxuICAgIC8vIEZpbmQgcHJvYih2YWx1ZSA8IHgwKVxuXG4gICAgdmFyIHZhbHgwID0galN0YXQudHVrZXkuY2RmKHgwLCBubWVhbnMsIGRmKSAtIHA7XG5cbiAgICAvLyBGaW5kIHRoZSBzZWNvbmQgaXRlcmF0ZSBhbmQgcHJvYih2YWx1ZSA8IHgxKS5cbiAgICAvLyBJZiB0aGUgZmlyc3QgaXRlcmF0ZSBoYXMgcHJvYmFiaWxpdHkgdmFsdWVcbiAgICAvLyBleGNlZWRpbmcgcCB0aGVuIHNlY29uZCBpdGVyYXRlIGlzIDEgbGVzcyB0aGFuXG4gICAgLy8gZmlyc3QgaXRlcmF0ZTsgb3RoZXJ3aXNlIGl0IGlzIDEgZ3JlYXRlci5cblxuICAgIHZhciB4MTtcbiAgICBpZiAodmFseDAgPiAwLjApXG4gICAgICB4MSA9IE1hdGgubWF4KDAuMCwgeDAgLSAxLjApO1xuICAgIGVsc2VcbiAgICAgIHgxID0geDAgKyAxLjA7XG4gICAgdmFyIHZhbHgxID0galN0YXQudHVrZXkuY2RmKHgxLCBubWVhbnMsIGRmKSAtIHA7XG5cbiAgICAvLyBGaW5kIG5ldyBpdGVyYXRlXG5cbiAgICB2YXIgYW5zO1xuICAgIGZvcih2YXIgaXRlciA9IDE7IGl0ZXIgPCBtYXhpdGVyOyBpdGVyKyspIHtcbiAgICAgIGFucyA9IHgxIC0gKCh2YWx4MSAqICh4MSAtIHgwKSkgLyAodmFseDEgLSB2YWx4MCkpO1xuICAgICAgdmFseDAgPSB2YWx4MTtcblxuICAgICAgLy8gTmV3IGl0ZXJhdGUgbXVzdCBiZSA+PSAwXG5cbiAgICAgIHgwID0geDE7XG4gICAgICBpZiAoYW5zIDwgMC4wKSB7XG4gICAgICAgIGFucyA9IDAuMDtcbiAgICAgICAgdmFseDEgPSAtcDtcbiAgICAgIH1cbiAgICAgIC8vIEZpbmQgcHJvYih2YWx1ZSA8IG5ldyBpdGVyYXRlKVxuXG4gICAgICB2YWx4MSA9IGpTdGF0LnR1a2V5LmNkZihhbnMsIG5tZWFucywgZGYpIC0gcDtcbiAgICAgIHgxID0gYW5zO1xuXG4gICAgICAvLyBJZiB0aGUgZGlmZmVyZW5jZSBiZXR3ZWVuIHR3byBzdWNjZXNzaXZlXG4gICAgICAvLyBpdGVyYXRlcyBpcyBsZXNzIHRoYW4gZXBzLCBzdG9wXG5cbiAgICAgIHZhciB4YWJzID0gTWF0aC5hYnMoeDEgLSB4MCk7XG4gICAgICBpZiAoeGFicyA8IGVwcylcbiAgICAgICAgcmV0dXJuIGFucztcbiAgICB9XG5cbiAgICB0aHJvdyBuZXcgRXJyb3IoJ3R1a2V5LmludiBmYWlsZWQgdG8gY29udmVyZ2UnKTtcbiAgfVxufSk7XG5cbn0oalN0YXQsIE1hdGgpKTtcbi8qIFByb3ZpZGVzIGZ1bmN0aW9ucyBmb3IgdGhlIHNvbHV0aW9uIG9mIGxpbmVhciBzeXN0ZW0gb2YgZXF1YXRpb25zLCBpbnRlZ3JhdGlvbiwgZXh0cmFwb2xhdGlvbixcbiAqIGludGVycG9sYXRpb24sIGVpZ2VudmFsdWUgcHJvYmxlbXMsIGRpZmZlcmVudGlhbCBlcXVhdGlvbnMgYW5kIFBDQSBhbmFseXNpcy4gKi9cblxuKGZ1bmN0aW9uKGpTdGF0LCBNYXRoKSB7XG5cbnZhciBwdXNoID0gQXJyYXkucHJvdG90eXBlLnB1c2g7XG52YXIgaXNBcnJheSA9IGpTdGF0LnV0aWxzLmlzQXJyYXk7XG5cbmZ1bmN0aW9uIGlzVXNhYmxlKGFyZykge1xuICByZXR1cm4gaXNBcnJheShhcmcpIHx8IGFyZyBpbnN0YW5jZW9mIGpTdGF0O1xufVxuXG5qU3RhdC5leHRlbmQoe1xuXG4gIC8vIGFkZCBhIHZlY3Rvci9tYXRyaXggdG8gYSB2ZWN0b3IvbWF0cml4IG9yIHNjYWxhclxuICBhZGQ6IGZ1bmN0aW9uIGFkZChhcnIsIGFyZykge1xuICAgIC8vIGNoZWNrIGlmIGFyZyBpcyBhIHZlY3RvciBvciBzY2FsYXJcbiAgICBpZiAoaXNVc2FibGUoYXJnKSkge1xuICAgICAgaWYgKCFpc1VzYWJsZShhcmdbMF0pKSBhcmcgPSBbIGFyZyBdO1xuICAgICAgcmV0dXJuIGpTdGF0Lm1hcChhcnIsIGZ1bmN0aW9uKHZhbHVlLCByb3csIGNvbCkge1xuICAgICAgICByZXR1cm4gdmFsdWUgKyBhcmdbcm93XVtjb2xdO1xuICAgICAgfSk7XG4gICAgfVxuICAgIHJldHVybiBqU3RhdC5tYXAoYXJyLCBmdW5jdGlvbih2YWx1ZSkgeyByZXR1cm4gdmFsdWUgKyBhcmc7IH0pO1xuICB9LFxuXG4gIC8vIHN1YnRyYWN0IGEgdmVjdG9yIG9yIHNjYWxhciBmcm9tIHRoZSB2ZWN0b3JcbiAgc3VidHJhY3Q6IGZ1bmN0aW9uIHN1YnRyYWN0KGFyciwgYXJnKSB7XG4gICAgLy8gY2hlY2sgaWYgYXJnIGlzIGEgdmVjdG9yIG9yIHNjYWxhclxuICAgIGlmIChpc1VzYWJsZShhcmcpKSB7XG4gICAgICBpZiAoIWlzVXNhYmxlKGFyZ1swXSkpIGFyZyA9IFsgYXJnIF07XG4gICAgICByZXR1cm4galN0YXQubWFwKGFyciwgZnVuY3Rpb24odmFsdWUsIHJvdywgY29sKSB7XG4gICAgICAgIHJldHVybiB2YWx1ZSAtIGFyZ1tyb3ddW2NvbF0gfHwgMDtcbiAgICAgIH0pO1xuICAgIH1cbiAgICByZXR1cm4galN0YXQubWFwKGFyciwgZnVuY3Rpb24odmFsdWUpIHsgcmV0dXJuIHZhbHVlIC0gYXJnOyB9KTtcbiAgfSxcblxuICAvLyBtYXRyaXggZGl2aXNpb25cbiAgZGl2aWRlOiBmdW5jdGlvbiBkaXZpZGUoYXJyLCBhcmcpIHtcbiAgICBpZiAoaXNVc2FibGUoYXJnKSkge1xuICAgICAgaWYgKCFpc1VzYWJsZShhcmdbMF0pKSBhcmcgPSBbIGFyZyBdO1xuICAgICAgcmV0dXJuIGpTdGF0Lm11bHRpcGx5KGFyciwgalN0YXQuaW52KGFyZykpO1xuICAgIH1cbiAgICByZXR1cm4galN0YXQubWFwKGFyciwgZnVuY3Rpb24odmFsdWUpIHsgcmV0dXJuIHZhbHVlIC8gYXJnOyB9KTtcbiAgfSxcblxuICAvLyBtYXRyaXggbXVsdGlwbGljYXRpb25cbiAgbXVsdGlwbHk6IGZ1bmN0aW9uIG11bHRpcGx5KGFyciwgYXJnKSB7XG4gICAgdmFyIHJvdywgY29sLCBucmVzY29scywgc3VtLCBucm93LCBuY29sLCByZXMsIHJlc2NvbHM7XG4gICAgLy8gZWc6IGFyciA9IDIgYXJnID0gMyAtPiA2IGZvciByZXNbMF1bMF0gc3RhdGVtZW50IGNsb3N1cmVcbiAgICBpZiAoYXJyLmxlbmd0aCA9PT0gdW5kZWZpbmVkICYmIGFyZy5sZW5ndGggPT09IHVuZGVmaW5lZCkge1xuICAgICAgcmV0dXJuIGFyciAqIGFyZztcbiAgICB9XG4gICAgbnJvdyA9IGFyci5sZW5ndGgsXG4gICAgbmNvbCA9IGFyclswXS5sZW5ndGgsXG4gICAgcmVzID0galN0YXQuemVyb3MobnJvdywgbnJlc2NvbHMgPSAoaXNVc2FibGUoYXJnKSkgPyBhcmdbMF0ubGVuZ3RoIDogbmNvbCksXG4gICAgcmVzY29scyA9IDA7XG4gICAgaWYgKGlzVXNhYmxlKGFyZykpIHtcbiAgICAgIGZvciAoOyByZXNjb2xzIDwgbnJlc2NvbHM7IHJlc2NvbHMrKykge1xuICAgICAgICBmb3IgKHJvdyA9IDA7IHJvdyA8IG5yb3c7IHJvdysrKSB7XG4gICAgICAgICAgc3VtID0gMDtcbiAgICAgICAgICBmb3IgKGNvbCA9IDA7IGNvbCA8IG5jb2w7IGNvbCsrKVxuICAgICAgICAgIHN1bSArPSBhcnJbcm93XVtjb2xdICogYXJnW2NvbF1bcmVzY29sc107XG4gICAgICAgICAgcmVzW3Jvd11bcmVzY29sc10gPSBzdW07XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiAobnJvdyA9PT0gMSAmJiByZXNjb2xzID09PSAxKSA/IHJlc1swXVswXSA6IHJlcztcbiAgICB9XG4gICAgcmV0dXJuIGpTdGF0Lm1hcChhcnIsIGZ1bmN0aW9uKHZhbHVlKSB7IHJldHVybiB2YWx1ZSAqIGFyZzsgfSk7XG4gIH0sXG5cbiAgLy8gb3V0ZXIoWzEsMiwzXSxbNCw1LDZdKVxuICAvLyA9PT1cbiAgLy8gW1sxXSxbMl0sWzNdXSB0aW1lcyBbWzQsNSw2XV1cbiAgLy8gLT5cbiAgLy8gW1s0LDUsNl0sWzgsMTAsMTJdLFsxMiwxNSwxOF1dXG4gIG91dGVyOmZ1bmN0aW9uIG91dGVyKEEsIEIpIHtcbiAgICByZXR1cm4galN0YXQubXVsdGlwbHkoQS5tYXAoZnVuY3Rpb24odCl7IHJldHVybiBbdF0gfSksIFtCXSk7XG4gIH0sXG5cblxuICAvLyBSZXR1cm5zIHRoZSBkb3QgcHJvZHVjdCBvZiB0d28gbWF0cmljaWVzXG4gIGRvdDogZnVuY3Rpb24gZG90KGFyciwgYXJnKSB7XG4gICAgaWYgKCFpc1VzYWJsZShhcnJbMF0pKSBhcnIgPSBbIGFyciBdO1xuICAgIGlmICghaXNVc2FibGUoYXJnWzBdKSkgYXJnID0gWyBhcmcgXTtcbiAgICAvLyBjb252ZXJ0IGNvbHVtbiB0byByb3cgdmVjdG9yXG4gICAgdmFyIGxlZnQgPSAoYXJyWzBdLmxlbmd0aCA9PT0gMSAmJiBhcnIubGVuZ3RoICE9PSAxKSA/IGpTdGF0LnRyYW5zcG9zZShhcnIpIDogYXJyLFxuICAgIHJpZ2h0ID0gKGFyZ1swXS5sZW5ndGggPT09IDEgJiYgYXJnLmxlbmd0aCAhPT0gMSkgPyBqU3RhdC50cmFuc3Bvc2UoYXJnKSA6IGFyZyxcbiAgICByZXMgPSBbXSxcbiAgICByb3cgPSAwLFxuICAgIG5yb3cgPSBsZWZ0Lmxlbmd0aCxcbiAgICBuY29sID0gbGVmdFswXS5sZW5ndGgsXG4gICAgc3VtLCBjb2w7XG4gICAgZm9yICg7IHJvdyA8IG5yb3c7IHJvdysrKSB7XG4gICAgICByZXNbcm93XSA9IFtdO1xuICAgICAgc3VtID0gMDtcbiAgICAgIGZvciAoY29sID0gMDsgY29sIDwgbmNvbDsgY29sKyspXG4gICAgICBzdW0gKz0gbGVmdFtyb3ddW2NvbF0gKiByaWdodFtyb3ddW2NvbF07XG4gICAgICByZXNbcm93XSA9IHN1bTtcbiAgICB9XG4gICAgcmV0dXJuIChyZXMubGVuZ3RoID09PSAxKSA/IHJlc1swXSA6IHJlcztcbiAgfSxcblxuICAvLyByYWlzZSBldmVyeSBlbGVtZW50IGJ5IGEgc2NhbGFyXG4gIHBvdzogZnVuY3Rpb24gcG93KGFyciwgYXJnKSB7XG4gICAgcmV0dXJuIGpTdGF0Lm1hcChhcnIsIGZ1bmN0aW9uKHZhbHVlKSB7IHJldHVybiBNYXRoLnBvdyh2YWx1ZSwgYXJnKTsgfSk7XG4gIH0sXG5cbiAgLy8gZXhwb25lbnRpYXRlIGV2ZXJ5IGVsZW1lbnRcbiAgZXhwOiBmdW5jdGlvbiBleHAoYXJyKSB7XG4gICAgcmV0dXJuIGpTdGF0Lm1hcChhcnIsIGZ1bmN0aW9uKHZhbHVlKSB7IHJldHVybiBNYXRoLmV4cCh2YWx1ZSk7IH0pO1xuICB9LFxuXG4gIC8vIGdlbmVyYXRlIHRoZSBuYXR1cmFsIGxvZyBvZiBldmVyeSBlbGVtZW50XG4gIGxvZzogZnVuY3Rpb24gZXhwKGFycikge1xuICAgIHJldHVybiBqU3RhdC5tYXAoYXJyLCBmdW5jdGlvbih2YWx1ZSkgeyByZXR1cm4gTWF0aC5sb2codmFsdWUpOyB9KTtcbiAgfSxcblxuICAvLyBnZW5lcmF0ZSB0aGUgYWJzb2x1dGUgdmFsdWVzIG9mIHRoZSB2ZWN0b3JcbiAgYWJzOiBmdW5jdGlvbiBhYnMoYXJyKSB7XG4gICAgcmV0dXJuIGpTdGF0Lm1hcChhcnIsIGZ1bmN0aW9uKHZhbHVlKSB7IHJldHVybiBNYXRoLmFicyh2YWx1ZSk7IH0pO1xuICB9LFxuXG4gIC8vIGNvbXB1dGVzIHRoZSBwLW5vcm0gb2YgdGhlIHZlY3RvclxuICAvLyBJbiB0aGUgY2FzZSB0aGF0IGEgbWF0cml4IGlzIHBhc3NlZCwgdXNlcyB0aGUgZmlyc3Qgcm93IGFzIHRoZSB2ZWN0b3JcbiAgbm9ybTogZnVuY3Rpb24gbm9ybShhcnIsIHApIHtcbiAgICB2YXIgbm5vcm0gPSAwLFxuICAgIGkgPSAwO1xuICAgIC8vIGNoZWNrIHRoZSBwLXZhbHVlIG9mIHRoZSBub3JtLCBhbmQgc2V0IGZvciBtb3N0IGNvbW1vbiBjYXNlXG4gICAgaWYgKGlzTmFOKHApKSBwID0gMjtcbiAgICAvLyBjaGVjayBpZiBtdWx0aS1kaW1lbnNpb25hbCBhcnJheSwgYW5kIG1ha2UgdmVjdG9yIGNvcnJlY3Rpb25cbiAgICBpZiAoaXNVc2FibGUoYXJyWzBdKSkgYXJyID0gYXJyWzBdO1xuICAgIC8vIHZlY3RvciBub3JtXG4gICAgZm9yICg7IGkgPCBhcnIubGVuZ3RoOyBpKyspIHtcbiAgICAgIG5ub3JtICs9IE1hdGgucG93KE1hdGguYWJzKGFycltpXSksIHApO1xuICAgIH1cbiAgICByZXR1cm4gTWF0aC5wb3cobm5vcm0sIDEgLyBwKTtcbiAgfSxcblxuICAvLyBjb21wdXRlcyB0aGUgYW5nbGUgYmV0d2VlbiB0d28gdmVjdG9ycyBpbiByYWRzXG4gIC8vIEluIGNhc2UgYSBtYXRyaXggaXMgcGFzc2VkLCB0aGlzIHVzZXMgdGhlIGZpcnN0IHJvdyBhcyB0aGUgdmVjdG9yXG4gIGFuZ2xlOiBmdW5jdGlvbiBhbmdsZShhcnIsIGFyZykge1xuICAgIHJldHVybiBNYXRoLmFjb3MoalN0YXQuZG90KGFyciwgYXJnKSAvIChqU3RhdC5ub3JtKGFycikgKiBqU3RhdC5ub3JtKGFyZykpKTtcbiAgfSxcblxuICAvLyBhdWdtZW50IG9uZSBtYXRyaXggYnkgYW5vdGhlclxuICAvLyBOb3RlOiB0aGlzIGZ1bmN0aW9uIHJldHVybnMgYSBtYXRyaXgsIG5vdCBhIGpTdGF0IG9iamVjdFxuICBhdWc6IGZ1bmN0aW9uIGF1ZyhhLCBiKSB7XG4gICAgdmFyIG5ld2FyciA9IFtdO1xuICAgIHZhciBpO1xuICAgIGZvciAoaSA9IDA7IGkgPCBhLmxlbmd0aDsgaSsrKSB7XG4gICAgICBuZXdhcnIucHVzaChhW2ldLnNsaWNlKCkpO1xuICAgIH1cbiAgICBmb3IgKGkgPSAwOyBpIDwgbmV3YXJyLmxlbmd0aDsgaSsrKSB7XG4gICAgICBwdXNoLmFwcGx5KG5ld2FycltpXSwgYltpXSk7XG4gICAgfVxuICAgIHJldHVybiBuZXdhcnI7XG4gIH0sXG5cbiAgLy8gVGhlIGludigpIGZ1bmN0aW9uIGNhbGN1bGF0ZXMgdGhlIGludmVyc2Ugb2YgYSBtYXRyaXhcbiAgLy8gQ3JlYXRlIHRoZSBpbnZlcnNlIGJ5IGF1Z21lbnRpbmcgdGhlIG1hdHJpeCBieSB0aGUgaWRlbnRpdHkgbWF0cml4IG9mIHRoZVxuICAvLyBhcHByb3ByaWF0ZSBzaXplLCBhbmQgdGhlbiB1c2UgRy1KIGVsaW1pbmF0aW9uIG9uIHRoZSBhdWdtZW50ZWQgbWF0cml4LlxuICBpbnY6IGZ1bmN0aW9uIGludihhKSB7XG4gICAgdmFyIHJvd3MgPSBhLmxlbmd0aDtcbiAgICB2YXIgY29scyA9IGFbMF0ubGVuZ3RoO1xuICAgIHZhciBiID0galN0YXQuaWRlbnRpdHkocm93cywgY29scyk7XG4gICAgdmFyIGMgPSBqU3RhdC5nYXVzc19qb3JkYW4oYSwgYik7XG4gICAgdmFyIHJlc3VsdCA9IFtdO1xuICAgIHZhciBpID0gMDtcbiAgICB2YXIgajtcblxuICAgIC8vV2UgbmVlZCB0byBjb3B5IHRoZSBpbnZlcnNlIHBvcnRpb24gdG8gYSBuZXcgbWF0cml4IHRvIHJpZCBHLUogYXJ0aWZhY3RzXG4gICAgZm9yICg7IGkgPCByb3dzOyBpKyspIHtcbiAgICAgIHJlc3VsdFtpXSA9IFtdO1xuICAgICAgZm9yIChqID0gY29sczsgaiA8IGNbMF0ubGVuZ3RoOyBqKyspXG4gICAgICAgIHJlc3VsdFtpXVtqIC0gY29sc10gPSBjW2ldW2pdO1xuICAgIH1cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9LFxuXG4gIC8vIGNhbGN1bGF0ZSB0aGUgZGV0ZXJtaW5hbnQgb2YgYSBtYXRyaXhcbiAgZGV0OiBmdW5jdGlvbiBkZXQoYSkge1xuICAgIGlmIChhLmxlbmd0aCA9PT0gMikge1xuICAgICAgcmV0dXJuIGFbMF1bMF0gKiBhWzFdWzFdIC0gYVswXVsxXSAqIGFbMV1bMF07XG4gICAgfVxuXG4gICAgdmFyIGRldGVybWluYW50ID0gMDtcbiAgICBmb3IgKHZhciBpID0gMDsgaSA8IGEubGVuZ3RoOyBpKyspIHtcbiAgICAgIC8vIGJ1aWxkIGEgc3ViIG1hdHJpeCB3aXRob3V0IGNvbHVtbiBgaWBcbiAgICAgIHZhciBzdWJtYXRyaXggPSBbXTtcbiAgICAgIGZvciAodmFyIHJvdyA9IDE7IHJvdyA8IGEubGVuZ3RoOyByb3crKykge1xuICAgICAgICBzdWJtYXRyaXhbcm93IC0gMV0gPSBbXTtcbiAgICAgICAgZm9yICh2YXIgY29sID0gMDsgY29sIDwgYS5sZW5ndGg7IGNvbCsrKSB7XG4gICAgICAgICAgaWYgKGNvbCA8IGkpIHtcbiAgICAgICAgICAgIHN1Ym1hdHJpeFtyb3cgLSAxXVtjb2xdID0gYVtyb3ddW2NvbF07XG4gICAgICAgICAgfSBlbHNlIGlmIChjb2wgPiBpKSB7XG4gICAgICAgICAgICBzdWJtYXRyaXhbcm93IC0gMV1bY29sIC0gMV0gPSBhW3Jvd11bY29sXTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cblxuICAgICAgLy8gYWx0ZXJuYXRlIGJldHdlZW4gKyBhbmQgLSBiZXR3ZWVuIGRldGVybWluYW50c1xuICAgICAgdmFyIHNpZ24gPSBpICUgMiA/IC0xIDogMTtcbiAgICAgIGRldGVybWluYW50ICs9IGRldChzdWJtYXRyaXgpICogYVswXVtpXSAqIHNpZ247XG4gICAgfVxuXG4gICAgcmV0dXJuIGRldGVybWluYW50XG4gIH0sXG5cbiAgZ2F1c3NfZWxpbWluYXRpb246IGZ1bmN0aW9uIGdhdXNzX2VsaW1pbmF0aW9uKGEsIGIpIHtcbiAgICB2YXIgaSA9IDAsXG4gICAgaiA9IDAsXG4gICAgbiA9IGEubGVuZ3RoLFxuICAgIG0gPSBhWzBdLmxlbmd0aCxcbiAgICBmYWN0b3IgPSAxLFxuICAgIHN1bSA9IDAsXG4gICAgeCA9IFtdLFxuICAgIG1hdWcsIHBpdm90LCB0ZW1wLCBrO1xuICAgIGEgPSBqU3RhdC5hdWcoYSwgYik7XG4gICAgbWF1ZyA9IGFbMF0ubGVuZ3RoO1xuICAgIGZvcihpID0gMDsgaSA8IG47IGkrKykge1xuICAgICAgcGl2b3QgPSBhW2ldW2ldO1xuICAgICAgaiA9IGk7XG4gICAgICBmb3IgKGsgPSBpICsgMTsgayA8IG07IGsrKykge1xuICAgICAgICBpZiAocGl2b3QgPCBNYXRoLmFicyhhW2tdW2ldKSkge1xuICAgICAgICAgIHBpdm90ID0gYVtrXVtpXTtcbiAgICAgICAgICBqID0gaztcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKGogIT0gaSkge1xuICAgICAgICBmb3IoayA9IDA7IGsgPCBtYXVnOyBrKyspIHtcbiAgICAgICAgICB0ZW1wID0gYVtpXVtrXTtcbiAgICAgICAgICBhW2ldW2tdID0gYVtqXVtrXTtcbiAgICAgICAgICBhW2pdW2tdID0gdGVtcDtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgZm9yIChqID0gaSArIDE7IGogPCBuOyBqKyspIHtcbiAgICAgICAgZmFjdG9yID0gYVtqXVtpXSAvIGFbaV1baV07XG4gICAgICAgIGZvcihrID0gaTsgayA8IG1hdWc7IGsrKykge1xuICAgICAgICAgIGFbal1ba10gPSBhW2pdW2tdIC0gZmFjdG9yICogYVtpXVtrXTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICBmb3IgKGkgPSBuIC0gMTsgaSA+PSAwOyBpLS0pIHtcbiAgICAgIHN1bSA9IDA7XG4gICAgICBmb3IgKGogPSBpICsgMTsgajw9IG4gLSAxOyBqKyspIHtcbiAgICAgICAgc3VtID0gc3VtICsgeFtqXSAqIGFbaV1bal07XG4gICAgICB9XG4gICAgICB4W2ldID0oYVtpXVttYXVnIC0gMV0gLSBzdW0pIC8gYVtpXVtpXTtcbiAgICB9XG4gICAgcmV0dXJuIHg7XG4gIH0sXG5cbiAgZ2F1c3Nfam9yZGFuOiBmdW5jdGlvbiBnYXVzc19qb3JkYW4oYSwgYikge1xuICAgIHZhciBtID0galN0YXQuYXVnKGEsIGIpO1xuICAgIHZhciBoID0gbS5sZW5ndGg7XG4gICAgdmFyIHcgPSBtWzBdLmxlbmd0aDtcbiAgICB2YXIgYyA9IDA7XG4gICAgdmFyIHgsIHksIHkyO1xuICAgIC8vIGZpbmQgbWF4IHBpdm90XG4gICAgZm9yICh5ID0gMDsgeSA8IGg7IHkrKykge1xuICAgICAgdmFyIG1heHJvdyA9IHk7XG4gICAgICBmb3IgKHkyID0geSsxOyB5MiA8IGg7IHkyKyspIHtcbiAgICAgICAgaWYgKE1hdGguYWJzKG1beTJdW3ldKSA+IE1hdGguYWJzKG1bbWF4cm93XVt5XSkpXG4gICAgICAgICAgbWF4cm93ID0geTI7XG4gICAgICB9XG4gICAgICB2YXIgdG1wID0gbVt5XTtcbiAgICAgIG1beV0gPSBtW21heHJvd107XG4gICAgICBtW21heHJvd10gPSB0bXBcbiAgICAgIGZvciAoeTIgPSB5KzE7IHkyIDwgaDsgeTIrKykge1xuICAgICAgICBjID0gbVt5Ml1beV0gLyBtW3ldW3ldO1xuICAgICAgICBmb3IgKHggPSB5OyB4IDwgdzsgeCsrKSB7XG4gICAgICAgICAgbVt5Ml1beF0gLT0gbVt5XVt4XSAqIGM7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgLy8gYmFja3N1YnN0aXR1dGVcbiAgICBmb3IgKHkgPSBoLTE7IHkgPj0gMDsgeS0tKSB7XG4gICAgICBjID0gbVt5XVt5XTtcbiAgICAgIGZvciAoeTIgPSAwOyB5MiA8IHk7IHkyKyspIHtcbiAgICAgICAgZm9yICh4ID0gdy0xOyB4ID4geS0xOyB4LS0pIHtcbiAgICAgICAgICBtW3kyXVt4XSAtPSBtW3ldW3hdICogbVt5Ml1beV0gLyBjO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgICBtW3ldW3ldIC89IGM7XG4gICAgICBmb3IgKHggPSBoOyB4IDwgdzsgeCsrKSB7XG4gICAgICAgIG1beV1beF0gLz0gYztcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIG07XG4gIH0sXG5cbiAgLy8gc29sdmUgZXF1YXRpb25cbiAgLy8gQXg9YlxuICAvLyBBIGlzIHVwcGVyIHRyaWFuZ3VsYXIgbWF0cml4XG4gIC8vIEE9W1sxLDIsM10sWzAsNCw1XSxbMCw2LDddXVxuICAvLyBiPVsxLDIsM11cbiAgLy8gdHJpYVVwU29sdmUoQSxiKSAvLyAtPiBbMi42NjYsMC4xNjY2LDEuNjY2XVxuICAvLyBpZiB5b3UgdXNlIG1hdHJpeCBzdHlsZVxuICAvLyBBPVtbMSwyLDNdLFswLDQsNV0sWzAsNiw3XV1cbiAgLy8gYj1bWzFdLFsyXSxbM11dXG4gIC8vIHdpbGwgcmV0dXJuIFtbMi42NjZdLFswLjE2NjZdLFsxLjY2Nl1dXG4gIHRyaWFVcFNvbHZlOiBmdW5jdGlvbiB0cmlhVXBTb2x2ZShBLCBiKSB7XG4gICAgdmFyIHNpemUgPSBBWzBdLmxlbmd0aDtcbiAgICB2YXIgeCA9IGpTdGF0Lnplcm9zKDEsIHNpemUpWzBdO1xuICAgIHZhciBwYXJ0cztcbiAgICB2YXIgbWF0cml4X21vZGUgPSBmYWxzZTtcblxuICAgIGlmIChiWzBdLmxlbmd0aCAhPSB1bmRlZmluZWQpIHtcbiAgICAgIGIgPSBiLm1hcChmdW5jdGlvbihpKXsgcmV0dXJuIGlbMF0gfSk7XG4gICAgICBtYXRyaXhfbW9kZSA9IHRydWU7XG4gICAgfVxuXG4gICAgalN0YXQuYXJhbmdlKHNpemUgLSAxLCAtMSwgLTEpLmZvckVhY2goZnVuY3Rpb24oaSkge1xuICAgICAgcGFydHMgPSBqU3RhdC5hcmFuZ2UoaSArIDEsIHNpemUpLm1hcChmdW5jdGlvbihqKSB7XG4gICAgICAgIHJldHVybiB4W2pdICogQVtpXVtqXTtcbiAgICAgIH0pO1xuICAgICAgeFtpXSA9IChiW2ldIC0galN0YXQuc3VtKHBhcnRzKSkgLyBBW2ldW2ldO1xuICAgIH0pO1xuXG4gICAgaWYgKG1hdHJpeF9tb2RlKVxuICAgICAgcmV0dXJuIHgubWFwKGZ1bmN0aW9uKGkpeyByZXR1cm4gW2ldIH0pO1xuICAgIHJldHVybiB4O1xuICB9LFxuXG4gIHRyaWFMb3dTb2x2ZTogZnVuY3Rpb24gdHJpYUxvd1NvbHZlKEEsIGIpIHtcbiAgICAvLyBsaWtlIHRvIHRyaWFVcFNvbHZlIGJ1dCBBIGlzIGxvd2VyIHRyaWFuZ3VsYXIgbWF0cml4XG4gICAgdmFyIHNpemUgPSBBWzBdLmxlbmd0aDtcbiAgICB2YXIgeCA9IGpTdGF0Lnplcm9zKDEsIHNpemUpWzBdO1xuICAgIHZhciBwYXJ0cztcblxuICAgIHZhciBtYXRyaXhfbW9kZT1mYWxzZTtcbiAgICBpZiAoYlswXS5sZW5ndGggIT0gdW5kZWZpbmVkKSB7XG4gICAgICBiID0gYi5tYXAoZnVuY3Rpb24oaSl7IHJldHVybiBpWzBdIH0pO1xuICAgICAgbWF0cml4X21vZGUgPSB0cnVlO1xuICAgIH1cblxuICAgIGpTdGF0LmFyYW5nZShzaXplKS5mb3JFYWNoKGZ1bmN0aW9uKGkpIHtcbiAgICAgIHBhcnRzID0galN0YXQuYXJhbmdlKGkpLm1hcChmdW5jdGlvbihqKSB7XG4gICAgICAgIHJldHVybiBBW2ldW2pdICogeFtqXTtcbiAgICAgIH0pO1xuICAgICAgeFtpXSA9IChiW2ldIC0galN0YXQuc3VtKHBhcnRzKSkgLyBBW2ldW2ldO1xuICAgIH0pXG5cbiAgICBpZiAobWF0cml4X21vZGUpXG4gICAgICByZXR1cm4geC5tYXAoZnVuY3Rpb24oaSl7IHJldHVybiBbaV0gfSk7XG4gICAgcmV0dXJuIHg7XG4gIH0sXG5cblxuICAvLyBBIC0+IFtMLFVdXG4gIC8vIEE9TFVcbiAgLy8gTCBpcyBsb3dlciB0cmlhbmd1bGFyIG1hdHJpeFxuICAvLyBVIGlzIHVwcGVyIHRyaWFuZ3VsYXIgbWF0cml4XG4gIGx1OiBmdW5jdGlvbiBsdShBKSB7XG4gICAgdmFyIHNpemUgPSBBLmxlbmd0aDtcbiAgICAvL3ZhciBMPWpTdGF0LmRpYWdvbmFsKGpTdGF0Lm9uZXMoMSxzaXplKVswXSk7XG4gICAgdmFyIEwgPSBqU3RhdC5pZGVudGl0eShzaXplKTtcbiAgICB2YXIgUiA9IGpTdGF0Lnplcm9zKEEubGVuZ3RoLCBBWzBdLmxlbmd0aCk7XG4gICAgdmFyIHBhcnRzO1xuICAgIGpTdGF0LmFyYW5nZShzaXplKS5mb3JFYWNoKGZ1bmN0aW9uKHQpIHtcbiAgICAgIFJbMF1bdF0gPSBBWzBdW3RdO1xuICAgIH0pO1xuICAgIGpTdGF0LmFyYW5nZSgxLCBzaXplKS5mb3JFYWNoKGZ1bmN0aW9uKGwpIHtcbiAgICAgIGpTdGF0LmFyYW5nZShsKS5mb3JFYWNoKGZ1bmN0aW9uKGkpIHtcbiAgICAgICAgcGFydHMgPSBqU3RhdC5hcmFuZ2UoaSkubWFwKGZ1bmN0aW9uKGpqKSB7XG4gICAgICAgICAgcmV0dXJuIExbbF1bampdICogUltqal1baV07XG4gICAgICAgIH0pO1xuICAgICAgICBMW2xdW2ldID0gKEFbbF1baV0gLSBqU3RhdC5zdW0ocGFydHMpKSAvIFJbaV1baV07XG4gICAgICB9KTtcbiAgICAgIGpTdGF0LmFyYW5nZShsLCBzaXplKS5mb3JFYWNoKGZ1bmN0aW9uKGopIHtcbiAgICAgICAgcGFydHMgPSBqU3RhdC5hcmFuZ2UobCkubWFwKGZ1bmN0aW9uKGpqKSB7XG4gICAgICAgICAgcmV0dXJuIExbbF1bampdICogUltqal1bal07XG4gICAgICAgIH0pO1xuICAgICAgICBSW2xdW2pdID0gQVtwYXJ0cy5sZW5ndGhdW2pdIC0galN0YXQuc3VtKHBhcnRzKTtcbiAgICAgIH0pO1xuICAgIH0pO1xuICAgIHJldHVybiBbTCwgUl07XG4gIH0sXG5cbiAgLy8gQSAtPiBUXG4gIC8vIEE9VFQnXG4gIC8vIFQgaXMgbG93ZXIgdHJpYW5ndWxhciBtYXRyaXhcbiAgY2hvbGVza3k6IGZ1bmN0aW9uIGNob2xlc2t5KEEpIHtcbiAgICB2YXIgc2l6ZSA9IEEubGVuZ3RoO1xuICAgIHZhciBUID0galN0YXQuemVyb3MoQS5sZW5ndGgsIEFbMF0ubGVuZ3RoKTtcbiAgICB2YXIgcGFydHM7XG4gICAgalN0YXQuYXJhbmdlKHNpemUpLmZvckVhY2goZnVuY3Rpb24oaSkge1xuICAgICAgcGFydHMgPSBqU3RhdC5hcmFuZ2UoaSkubWFwKGZ1bmN0aW9uKHQpIHtcbiAgICAgICAgcmV0dXJuIE1hdGgucG93KFRbaV1bdF0sMik7XG4gICAgICB9KTtcbiAgICAgIFRbaV1baV0gPSBNYXRoLnNxcnQoQVtpXVtpXSAtIGpTdGF0LnN1bShwYXJ0cykpO1xuICAgICAgalN0YXQuYXJhbmdlKGkgKyAxLCBzaXplKS5mb3JFYWNoKGZ1bmN0aW9uKGopIHtcbiAgICAgICAgcGFydHMgPSBqU3RhdC5hcmFuZ2UoaSkubWFwKGZ1bmN0aW9uKHQpIHtcbiAgICAgICAgICByZXR1cm4gVFtpXVt0XSAqIFRbal1bdF07XG4gICAgICAgIH0pO1xuICAgICAgICBUW2pdW2ldID0gKEFbaV1bal0gLSBqU3RhdC5zdW0ocGFydHMpKSAvIFRbaV1baV07XG4gICAgICB9KTtcbiAgICB9KTtcbiAgICByZXR1cm4gVDtcbiAgfSxcblxuXG4gIGdhdXNzX2phY29iaTogZnVuY3Rpb24gZ2F1c3NfamFjb2JpKGEsIGIsIHgsIHIpIHtcbiAgICB2YXIgaSA9IDA7XG4gICAgdmFyIGogPSAwO1xuICAgIHZhciBuID0gYS5sZW5ndGg7XG4gICAgdmFyIGwgPSBbXTtcbiAgICB2YXIgdSA9IFtdO1xuICAgIHZhciBkID0gW107XG4gICAgdmFyIHh2LCBjLCBoLCB4aztcbiAgICBmb3IgKDsgaSA8IG47IGkrKykge1xuICAgICAgbFtpXSA9IFtdO1xuICAgICAgdVtpXSA9IFtdO1xuICAgICAgZFtpXSA9IFtdO1xuICAgICAgZm9yIChqID0gMDsgaiA8IG47IGorKykge1xuICAgICAgICBpZiAoaSA+IGopIHtcbiAgICAgICAgICBsW2ldW2pdID0gYVtpXVtqXTtcbiAgICAgICAgICB1W2ldW2pdID0gZFtpXVtqXSA9IDA7XG4gICAgICAgIH0gZWxzZSBpZiAoaSA8IGopIHtcbiAgICAgICAgICB1W2ldW2pdID0gYVtpXVtqXTtcbiAgICAgICAgICBsW2ldW2pdID0gZFtpXVtqXSA9IDA7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgZFtpXVtqXSA9IGFbaV1bal07XG4gICAgICAgICAgbFtpXVtqXSA9IHVbaV1bal0gPSAwO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIGggPSBqU3RhdC5tdWx0aXBseShqU3RhdC5tdWx0aXBseShqU3RhdC5pbnYoZCksIGpTdGF0LmFkZChsLCB1KSksIC0xKTtcbiAgICBjID0galN0YXQubXVsdGlwbHkoalN0YXQuaW52KGQpLCBiKTtcbiAgICB4diA9IHg7XG4gICAgeGsgPSBqU3RhdC5hZGQoalN0YXQubXVsdGlwbHkoaCwgeCksIGMpO1xuICAgIGkgPSAyO1xuICAgIHdoaWxlIChNYXRoLmFicyhqU3RhdC5ub3JtKGpTdGF0LnN1YnRyYWN0KHhrLHh2KSkpID4gcikge1xuICAgICAgeHYgPSB4aztcbiAgICAgIHhrID0galN0YXQuYWRkKGpTdGF0Lm11bHRpcGx5KGgsIHh2KSwgYyk7XG4gICAgICBpKys7XG4gICAgfVxuICAgIHJldHVybiB4aztcbiAgfSxcblxuICBnYXVzc19zZWlkZWw6IGZ1bmN0aW9uIGdhdXNzX3NlaWRlbChhLCBiLCB4LCByKSB7XG4gICAgdmFyIGkgPSAwO1xuICAgIHZhciBuID0gYS5sZW5ndGg7XG4gICAgdmFyIGwgPSBbXTtcbiAgICB2YXIgdSA9IFtdO1xuICAgIHZhciBkID0gW107XG4gICAgdmFyIGosIHh2LCBjLCBoLCB4aztcbiAgICBmb3IgKDsgaSA8IG47IGkrKykge1xuICAgICAgbFtpXSA9IFtdO1xuICAgICAgdVtpXSA9IFtdO1xuICAgICAgZFtpXSA9IFtdO1xuICAgICAgZm9yIChqID0gMDsgaiA8IG47IGorKykge1xuICAgICAgICBpZiAoaSA+IGopIHtcbiAgICAgICAgICBsW2ldW2pdID0gYVtpXVtqXTtcbiAgICAgICAgICB1W2ldW2pdID0gZFtpXVtqXSA9IDA7XG4gICAgICAgIH0gZWxzZSBpZiAoaSA8IGopIHtcbiAgICAgICAgICB1W2ldW2pdID0gYVtpXVtqXTtcbiAgICAgICAgICBsW2ldW2pdID0gZFtpXVtqXSA9IDA7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgZFtpXVtqXSA9IGFbaV1bal07XG4gICAgICAgICAgbFtpXVtqXSA9IHVbaV1bal0gPSAwO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIGggPSBqU3RhdC5tdWx0aXBseShqU3RhdC5tdWx0aXBseShqU3RhdC5pbnYoalN0YXQuYWRkKGQsIGwpKSwgdSksIC0xKTtcbiAgICBjID0galN0YXQubXVsdGlwbHkoalN0YXQuaW52KGpTdGF0LmFkZChkLCBsKSksIGIpO1xuICAgIHh2ID0geDtcbiAgICB4ayA9IGpTdGF0LmFkZChqU3RhdC5tdWx0aXBseShoLCB4KSwgYyk7XG4gICAgaSA9IDI7XG4gICAgd2hpbGUgKE1hdGguYWJzKGpTdGF0Lm5vcm0oalN0YXQuc3VidHJhY3QoeGssIHh2KSkpID4gcikge1xuICAgICAgeHYgPSB4aztcbiAgICAgIHhrID0galN0YXQuYWRkKGpTdGF0Lm11bHRpcGx5KGgsIHh2KSwgYyk7XG4gICAgICBpID0gaSArIDE7XG4gICAgfVxuICAgIHJldHVybiB4aztcbiAgfSxcblxuICBTT1I6IGZ1bmN0aW9uIFNPUihhLCBiLCB4LCByLCB3KSB7XG4gICAgdmFyIGkgPSAwO1xuICAgIHZhciBuID0gYS5sZW5ndGg7XG4gICAgdmFyIGwgPSBbXTtcbiAgICB2YXIgdSA9IFtdO1xuICAgIHZhciBkID0gW107XG4gICAgdmFyIGosIHh2LCBjLCBoLCB4aztcbiAgICBmb3IgKDsgaSA8IG47IGkrKykge1xuICAgICAgbFtpXSA9IFtdO1xuICAgICAgdVtpXSA9IFtdO1xuICAgICAgZFtpXSA9IFtdO1xuICAgICAgZm9yIChqID0gMDsgaiA8IG47IGorKykge1xuICAgICAgICBpZiAoaSA+IGopIHtcbiAgICAgICAgICBsW2ldW2pdID0gYVtpXVtqXTtcbiAgICAgICAgICB1W2ldW2pdID0gZFtpXVtqXSA9IDA7XG4gICAgICAgIH0gZWxzZSBpZiAoaSA8IGopIHtcbiAgICAgICAgICB1W2ldW2pdID0gYVtpXVtqXTtcbiAgICAgICAgICBsW2ldW2pdID0gZFtpXVtqXSA9IDA7XG4gICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgZFtpXVtqXSA9IGFbaV1bal07XG4gICAgICAgICAgbFtpXVtqXSA9IHVbaV1bal0gPSAwO1xuICAgICAgICB9XG4gICAgICB9XG4gICAgfVxuICAgIGggPSBqU3RhdC5tdWx0aXBseShqU3RhdC5pbnYoalN0YXQuYWRkKGQsIGpTdGF0Lm11bHRpcGx5KGwsIHcpKSksXG4gICAgICAgICAgICAgICAgICAgICAgIGpTdGF0LnN1YnRyYWN0KGpTdGF0Lm11bHRpcGx5KGQsIDEgLSB3KSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgalN0YXQubXVsdGlwbHkodSwgdykpKTtcbiAgICBjID0galN0YXQubXVsdGlwbHkoalN0YXQubXVsdGlwbHkoalN0YXQuaW52KGpTdGF0LmFkZChkLFxuICAgICAgICBqU3RhdC5tdWx0aXBseShsLCB3KSkpLCBiKSwgdyk7XG4gICAgeHYgPSB4O1xuICAgIHhrID0galN0YXQuYWRkKGpTdGF0Lm11bHRpcGx5KGgsIHgpLCBjKTtcbiAgICBpID0gMjtcbiAgICB3aGlsZSAoTWF0aC5hYnMoalN0YXQubm9ybShqU3RhdC5zdWJ0cmFjdCh4aywgeHYpKSkgPiByKSB7XG4gICAgICB4diA9IHhrO1xuICAgICAgeGsgPSBqU3RhdC5hZGQoalN0YXQubXVsdGlwbHkoaCwgeHYpLCBjKTtcbiAgICAgIGkrKztcbiAgICB9XG4gICAgcmV0dXJuIHhrO1xuICB9LFxuXG4gIGhvdXNlaG9sZGVyOiBmdW5jdGlvbiBob3VzZWhvbGRlcihhKSB7XG4gICAgdmFyIG0gPSBhLmxlbmd0aDtcbiAgICB2YXIgbiA9IGFbMF0ubGVuZ3RoO1xuICAgIHZhciBpID0gMDtcbiAgICB2YXIgdyA9IFtdO1xuICAgIHZhciBwID0gW107XG4gICAgdmFyIGFscGhhLCByLCBrLCBqLCBmYWN0b3I7XG4gICAgZm9yICg7IGkgPCBtIC0gMTsgaSsrKSB7XG4gICAgICBhbHBoYSA9IDA7XG4gICAgICBmb3IgKGogPSBpICsgMTsgaiA8IG47IGorKylcbiAgICAgIGFscGhhICs9IChhW2pdW2ldICogYVtqXVtpXSk7XG4gICAgICBmYWN0b3IgPSAoYVtpICsgMV1baV0gPiAwKSA/IC0xIDogMTtcbiAgICAgIGFscGhhID0gZmFjdG9yICogTWF0aC5zcXJ0KGFscGhhKTtcbiAgICAgIHIgPSBNYXRoLnNxcnQoKCgoYWxwaGEgKiBhbHBoYSkgLSBhW2kgKyAxXVtpXSAqIGFscGhhKSAvIDIpKTtcbiAgICAgIHcgPSBqU3RhdC56ZXJvcyhtLCAxKTtcbiAgICAgIHdbaSArIDFdWzBdID0gKGFbaSArIDFdW2ldIC0gYWxwaGEpIC8gKDIgKiByKTtcbiAgICAgIGZvciAoayA9IGkgKyAyOyBrIDwgbTsgaysrKSB3W2tdWzBdID0gYVtrXVtpXSAvICgyICogcik7XG4gICAgICBwID0galN0YXQuc3VidHJhY3QoalN0YXQuaWRlbnRpdHkobSwgbiksXG4gICAgICAgICAgalN0YXQubXVsdGlwbHkoalN0YXQubXVsdGlwbHkodywgalN0YXQudHJhbnNwb3NlKHcpKSwgMikpO1xuICAgICAgYSA9IGpTdGF0Lm11bHRpcGx5KHAsIGpTdGF0Lm11bHRpcGx5KGEsIHApKTtcbiAgICB9XG4gICAgcmV0dXJuIGE7XG4gIH0sXG5cbiAgLy8gQSAtPiBbUSxSXVxuICAvLyBRIGlzIG9ydGhvZ29uYWwgbWF0cml4XG4gIC8vIFIgaXMgdXBwZXIgdHJpYW5ndWxhclxuICBRUjogKGZ1bmN0aW9uKCkge1xuICAgIC8vIHggLT4gUVxuICAgIC8vIGZpbmQgYSBvcnRob2dvbmFsIG1hdHJpeCBRIHN0LlxuICAgIC8vIFF4PXlcbiAgICAvLyB5IGlzIFt8fHh8fCwwLDAsLi4uXVxuXG4gICAgLy8gcXVpY2sgcmVmXG4gICAgdmFyIHN1bSAgID0galN0YXQuc3VtO1xuICAgIHZhciByYW5nZSA9IGpTdGF0LmFyYW5nZTtcblxuICAgIGZ1bmN0aW9uIHFyMih4KSB7XG4gICAgICAvLyBxdWljayBpbXBsZXRhdGlvblxuICAgICAgLy8gaHR0cHM6Ly93d3cuc3RhdC53aXNjLmVkdS9+bGFyZ2V0L21hdGg0OTYvcXIuaHRtbFxuXG4gICAgICB2YXIgbiA9IHgubGVuZ3RoO1xuICAgICAgdmFyIHAgPSB4WzBdLmxlbmd0aDtcblxuICAgICAgdmFyIHIgPSBqU3RhdC56ZXJvcyhwLCBwKTtcbiAgICAgIHggPSBqU3RhdC5jb3B5KHgpO1xuXG4gICAgICB2YXIgaSxqLGs7XG4gICAgICBmb3IoaiA9IDA7IGogPCBwOyBqKyspe1xuICAgICAgICByW2pdW2pdID0gTWF0aC5zcXJ0KHN1bShyYW5nZShuKS5tYXAoZnVuY3Rpb24oaSl7XG4gICAgICAgICAgcmV0dXJuIHhbaV1bal0gKiB4W2ldW2pdO1xuICAgICAgICB9KSkpO1xuICAgICAgICBmb3IoaSA9IDA7IGkgPCBuOyBpKyspe1xuICAgICAgICAgIHhbaV1bal0gPSB4W2ldW2pdIC8gcltqXVtqXTtcbiAgICAgICAgfVxuICAgICAgICBmb3IoayA9IGorMTsgayA8IHA7IGsrKyl7XG4gICAgICAgICAgcltqXVtrXSA9IHN1bShyYW5nZShuKS5tYXAoZnVuY3Rpb24oaSl7XG4gICAgICAgICAgICByZXR1cm4geFtpXVtqXSAqIHhbaV1ba107XG4gICAgICAgICAgfSkpO1xuICAgICAgICAgIGZvcihpID0gMDsgaSA8IG47IGkrKyl7XG4gICAgICAgICAgICB4W2ldW2tdID0geFtpXVtrXSAtIHhbaV1bal0qcltqXVtrXTtcbiAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICAgIHJldHVybiBbeCwgcl07XG4gICAgfVxuXG4gICAgcmV0dXJuIHFyMjtcbiAgfSgpKSxcblxuICBsc3RzcTogKGZ1bmN0aW9uKCkge1xuICAgIC8vIHNvbHZlIGxlYXN0IHNxdWFyZCBwcm9ibGVtIGZvciBBeD1iIGFzIFFSIGRlY29tcG9zaXRpb24gd2F5IGlmIGIgaXNcbiAgICAvLyBbW2IxXSxbYjJdLFtiM11dIGZvcm0gd2lsbCByZXR1cm4gW1t4MV0sW3gyXSxbeDNdXSBhcnJheSBmb3JtIHNvbHV0aW9uXG4gICAgLy8gZWxzZSBiIGlzIFtiMSxiMixiM10gZm9ybSB3aWxsIHJldHVybiBbeDEseDIseDNdIGFycmF5IGZvcm0gc29sdXRpb25cbiAgICBmdW5jdGlvbiBSX0koQSkge1xuICAgICAgQSA9IGpTdGF0LmNvcHkoQSk7XG4gICAgICB2YXIgc2l6ZSA9IEEubGVuZ3RoO1xuICAgICAgdmFyIEkgPSBqU3RhdC5pZGVudGl0eShzaXplKTtcbiAgICAgIGpTdGF0LmFyYW5nZShzaXplIC0gMSwgLTEsIC0xKS5mb3JFYWNoKGZ1bmN0aW9uKGkpIHtcbiAgICAgICAgalN0YXQuc2xpY2VBc3NpZ24oXG4gICAgICAgICAgICBJLCB7IHJvdzogaSB9LCBqU3RhdC5kaXZpZGUoalN0YXQuc2xpY2UoSSwgeyByb3c6IGkgfSksIEFbaV1baV0pKTtcbiAgICAgICAgalN0YXQuc2xpY2VBc3NpZ24oXG4gICAgICAgICAgICBBLCB7IHJvdzogaSB9LCBqU3RhdC5kaXZpZGUoalN0YXQuc2xpY2UoQSwgeyByb3c6IGkgfSksIEFbaV1baV0pKTtcbiAgICAgICAgalN0YXQuYXJhbmdlKGkpLmZvckVhY2goZnVuY3Rpb24oaikge1xuICAgICAgICAgIHZhciBjID0galN0YXQubXVsdGlwbHkoQVtqXVtpXSwgLTEpO1xuICAgICAgICAgIHZhciBBaiA9IGpTdGF0LnNsaWNlKEEsIHsgcm93OiBqIH0pO1xuICAgICAgICAgIHZhciBjQWkgPSBqU3RhdC5tdWx0aXBseShqU3RhdC5zbGljZShBLCB7IHJvdzogaSB9KSwgYyk7XG4gICAgICAgICAgalN0YXQuc2xpY2VBc3NpZ24oQSwgeyByb3c6IGogfSwgalN0YXQuYWRkKEFqLCBjQWkpKTtcbiAgICAgICAgICB2YXIgSWogPSBqU3RhdC5zbGljZShJLCB7IHJvdzogaiB9KTtcbiAgICAgICAgICB2YXIgY0lpID0galN0YXQubXVsdGlwbHkoalN0YXQuc2xpY2UoSSwgeyByb3c6IGkgfSksIGMpO1xuICAgICAgICAgIGpTdGF0LnNsaWNlQXNzaWduKEksIHsgcm93OiBqIH0sIGpTdGF0LmFkZChJaiwgY0lpKSk7XG4gICAgICAgIH0pXG4gICAgICB9KTtcbiAgICAgIHJldHVybiBJO1xuICAgIH1cblxuICAgIGZ1bmN0aW9uIHFyX3NvbHZlKEEsIGIpe1xuICAgICAgdmFyIGFycmF5X21vZGUgPSBmYWxzZTtcbiAgICAgIGlmIChiWzBdLmxlbmd0aCA9PT0gdW5kZWZpbmVkKSB7XG4gICAgICAgIC8vIFtjMSxjMixjM10gbW9kZVxuICAgICAgICBiID0gYi5tYXAoZnVuY3Rpb24oeCl7IHJldHVybiBbeF0gfSk7XG4gICAgICAgIGFycmF5X21vZGUgPSB0cnVlO1xuICAgICAgfVxuICAgICAgdmFyIFFSID0galN0YXQuUVIoQSk7XG4gICAgICB2YXIgUSA9IFFSWzBdO1xuICAgICAgdmFyIFIgPSBRUlsxXTtcbiAgICAgIHZhciBhdHRycyA9IEFbMF0ubGVuZ3RoO1xuICAgICAgdmFyIFExID0galN0YXQuc2xpY2UoUSx7Y29sOntlbmQ6YXR0cnN9fSk7XG4gICAgICB2YXIgUjEgPSBqU3RhdC5zbGljZShSLHtyb3c6e2VuZDphdHRyc319KTtcbiAgICAgIHZhciBSSSA9IFJfSShSMSk7XG4gICAgICB2YXIgUTIgPSBqU3RhdC50cmFuc3Bvc2UoUTEpO1xuXG4gICAgICBpZihRMlswXS5sZW5ndGggPT09IHVuZGVmaW5lZCl7XG4gICAgICAgIFEyID0gW1EyXTsgLy8gVGhlIGNvbmZ1c2luZyBqU3RhdC5tdWx0aWZseSBpbXBsZW1lbnRhdGlvbiB0aHJlYXQgbmF0dXJlIHByb2Nlc3MgYWdhaW4uXG4gICAgICB9XG5cbiAgICAgIHZhciB4ID0galN0YXQubXVsdGlwbHkoalN0YXQubXVsdGlwbHkoUkksIFEyKSwgYik7XG5cbiAgICAgIGlmKHgubGVuZ3RoID09PSB1bmRlZmluZWQpe1xuICAgICAgICB4ID0gW1t4XV07IC8vIFRoZSBjb25mdXNpbmcgalN0YXQubXVsdGlmbHkgaW1wbGVtZW50YXRpb24gdGhyZWF0IG5hdHVyZSBwcm9jZXNzIGFnYWluLlxuICAgICAgfVxuXG5cbiAgICAgIGlmIChhcnJheV9tb2RlKVxuICAgICAgICByZXR1cm4geC5tYXAoZnVuY3Rpb24oaSl7IHJldHVybiBpWzBdIH0pO1xuICAgICAgcmV0dXJuIHg7XG4gICAgfVxuXG4gICAgcmV0dXJuIHFyX3NvbHZlO1xuICB9KCkpLFxuXG4gIGphY29iaTogZnVuY3Rpb24gamFjb2JpKGEpIHtcbiAgICB2YXIgY29uZGl0aW9uID0gMTtcbiAgICB2YXIgbiA9IGEubGVuZ3RoO1xuICAgIHZhciBlID0galN0YXQuaWRlbnRpdHkobiwgbik7XG4gICAgdmFyIGV2ID0gW107XG4gICAgdmFyIGIsIGksIGosIHAsIHEsIG1heGltLCB0aGV0YSwgcztcbiAgICAvLyBjb25kaXRpb24gPT09IDEgb25seSBpZiB0b2xlcmFuY2UgaXMgbm90IHJlYWNoZWRcbiAgICB3aGlsZSAoY29uZGl0aW9uID09PSAxKSB7XG4gICAgICBtYXhpbSA9IGFbMF1bMV07XG4gICAgICBwID0gMDtcbiAgICAgIHEgPSAxO1xuICAgICAgZm9yIChpID0gMDsgaSA8IG47IGkrKykge1xuICAgICAgICBmb3IgKGogPSAwOyBqIDwgbjsgaisrKSB7XG4gICAgICAgICAgaWYgKGkgIT0gaikge1xuICAgICAgICAgICAgaWYgKG1heGltIDwgTWF0aC5hYnMoYVtpXVtqXSkpIHtcbiAgICAgICAgICAgICAgbWF4aW0gPSBNYXRoLmFicyhhW2ldW2pdKTtcbiAgICAgICAgICAgICAgcCA9IGk7XG4gICAgICAgICAgICAgIHEgPSBqO1xuICAgICAgICAgICAgfVxuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgaWYgKGFbcF1bcF0gPT09IGFbcV1bcV0pXG4gICAgICAgIHRoZXRhID0gKGFbcF1bcV0gPiAwKSA/IE1hdGguUEkgLyA0IDogLU1hdGguUEkgLyA0O1xuICAgICAgZWxzZVxuICAgICAgICB0aGV0YSA9IE1hdGguYXRhbigyICogYVtwXVtxXSAvIChhW3BdW3BdIC0gYVtxXVtxXSkpIC8gMjtcbiAgICAgIHMgPSBqU3RhdC5pZGVudGl0eShuLCBuKTtcbiAgICAgIHNbcF1bcF0gPSBNYXRoLmNvcyh0aGV0YSk7XG4gICAgICBzW3BdW3FdID0gLU1hdGguc2luKHRoZXRhKTtcbiAgICAgIHNbcV1bcF0gPSBNYXRoLnNpbih0aGV0YSk7XG4gICAgICBzW3FdW3FdID0gTWF0aC5jb3ModGhldGEpO1xuICAgICAgLy8gZWlnZW4gdmVjdG9yIG1hdHJpeFxuICAgICAgZSA9IGpTdGF0Lm11bHRpcGx5KGUsIHMpO1xuICAgICAgYiA9IGpTdGF0Lm11bHRpcGx5KGpTdGF0Lm11bHRpcGx5KGpTdGF0LmludihzKSwgYSksIHMpO1xuICAgICAgYSA9IGI7XG4gICAgICBjb25kaXRpb24gPSAwO1xuICAgICAgZm9yIChpID0gMTsgaSA8IG47IGkrKykge1xuICAgICAgICBmb3IgKGogPSAxOyBqIDwgbjsgaisrKSB7XG4gICAgICAgICAgaWYgKGkgIT0gaiAmJiBNYXRoLmFicyhhW2ldW2pdKSA+IDAuMDAxKSB7XG4gICAgICAgICAgICBjb25kaXRpb24gPSAxO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgfVxuICAgIH1cbiAgICBmb3IgKGkgPSAwOyBpIDwgbjsgaSsrKSBldi5wdXNoKGFbaV1baV0pO1xuICAgIC8vcmV0dXJucyBib3RoIHRoZSBlaWdlbnZhbHVlIGFuZCBlaWdlbm1hdHJpeFxuICAgIHJldHVybiBbZSwgZXZdO1xuICB9LFxuXG4gIHJ1bmdla3V0dGE6IGZ1bmN0aW9uIHJ1bmdla3V0dGEoZiwgaCwgcCwgdF9qLCB1X2osIG9yZGVyKSB7XG4gICAgdmFyIGsxLCBrMiwgdV9qMSwgazMsIGs0O1xuICAgIGlmIChvcmRlciA9PT0gMikge1xuICAgICAgd2hpbGUgKHRfaiA8PSBwKSB7XG4gICAgICAgIGsxID0gaCAqIGYodF9qLCB1X2opO1xuICAgICAgICBrMiA9IGggKiBmKHRfaiArIGgsIHVfaiArIGsxKTtcbiAgICAgICAgdV9qMSA9IHVfaiArIChrMSArIGsyKSAvIDI7XG4gICAgICAgIHVfaiA9IHVfajE7XG4gICAgICAgIHRfaiA9IHRfaiArIGg7XG4gICAgICB9XG4gICAgfVxuICAgIGlmIChvcmRlciA9PT0gNCkge1xuICAgICAgd2hpbGUgKHRfaiA8PSBwKSB7XG4gICAgICAgIGsxID0gaCAqIGYodF9qLCB1X2opO1xuICAgICAgICBrMiA9IGggKiBmKHRfaiArIGggLyAyLCB1X2ogKyBrMSAvIDIpO1xuICAgICAgICBrMyA9IGggKiBmKHRfaiArIGggLyAyLCB1X2ogKyBrMiAvIDIpO1xuICAgICAgICBrNCA9IGggKiBmKHRfaiAraCwgdV9qICsgazMpO1xuICAgICAgICB1X2oxID0gdV9qICsgKGsxICsgMiAqIGsyICsgMiAqIGszICsgazQpIC8gNjtcbiAgICAgICAgdV9qID0gdV9qMTtcbiAgICAgICAgdF9qID0gdF9qICsgaDtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIHVfajtcbiAgfSxcblxuICByb21iZXJnOiBmdW5jdGlvbiByb21iZXJnKGYsIGEsIGIsIG9yZGVyKSB7XG4gICAgdmFyIGkgPSAwO1xuICAgIHZhciBoID0gKGIgLSBhKSAvIDI7XG4gICAgdmFyIHggPSBbXTtcbiAgICB2YXIgaDEgPSBbXTtcbiAgICB2YXIgZyA9IFtdO1xuICAgIHZhciBtLCBhMSwgaiwgaywgSTtcbiAgICB3aGlsZSAoaSA8IG9yZGVyIC8gMikge1xuICAgICAgSSA9IGYoYSk7XG4gICAgICBmb3IgKGogPSBhLCBrID0gMDsgaiA8PSBiOyBqID0gaiArIGgsIGsrKykgeFtrXSA9IGo7XG4gICAgICBtID0geC5sZW5ndGg7XG4gICAgICBmb3IgKGogPSAxOyBqIDwgbSAtIDE7IGorKykge1xuICAgICAgICBJICs9ICgoKGogJSAyKSAhPT0gMCkgPyA0IDogMikgKiBmKHhbal0pO1xuICAgICAgfVxuICAgICAgSSA9IChoIC8gMykgKiAoSSArIGYoYikpO1xuICAgICAgZ1tpXSA9IEk7XG4gICAgICBoIC89IDI7XG4gICAgICBpKys7XG4gICAgfVxuICAgIGExID0gZy5sZW5ndGg7XG4gICAgbSA9IDE7XG4gICAgd2hpbGUgKGExICE9PSAxKSB7XG4gICAgICBmb3IgKGogPSAwOyBqIDwgYTEgLSAxOyBqKyspXG4gICAgICBoMVtqXSA9ICgoTWF0aC5wb3coNCwgbSkpICogZ1tqICsgMV0gLSBnW2pdKSAvIChNYXRoLnBvdyg0LCBtKSAtIDEpO1xuICAgICAgYTEgPSBoMS5sZW5ndGg7XG4gICAgICBnID0gaDE7XG4gICAgICBoMSA9IFtdO1xuICAgICAgbSsrO1xuICAgIH1cbiAgICByZXR1cm4gZztcbiAgfSxcblxuICByaWNoYXJkc29uOiBmdW5jdGlvbiByaWNoYXJkc29uKFgsIGYsIHgsIGgpIHtcbiAgICBmdW5jdGlvbiBwb3MoWCwgeCkge1xuICAgICAgdmFyIGkgPSAwO1xuICAgICAgdmFyIG4gPSBYLmxlbmd0aDtcbiAgICAgIHZhciBwO1xuICAgICAgZm9yICg7IGkgPCBuOyBpKyspXG4gICAgICAgIGlmIChYW2ldID09PSB4KSBwID0gaTtcbiAgICAgIHJldHVybiBwO1xuICAgIH1cbiAgICB2YXIgaF9taW4gPSBNYXRoLmFicyh4IC0gWFtwb3MoWCwgeCkgKyAxXSk7XG4gICAgdmFyIGkgPSAwO1xuICAgIHZhciBnID0gW107XG4gICAgdmFyIGgxID0gW107XG4gICAgdmFyIHkxLCB5MiwgbSwgYSwgajtcbiAgICB3aGlsZSAoaCA+PSBoX21pbikge1xuICAgICAgeTEgPSBwb3MoWCwgeCArIGgpO1xuICAgICAgeTIgPSBwb3MoWCwgeCk7XG4gICAgICBnW2ldID0gKGZbeTFdIC0gMiAqIGZbeTJdICsgZlsyICogeTIgLSB5MV0pIC8gKGggKiBoKTtcbiAgICAgIGggLz0gMjtcbiAgICAgIGkrKztcbiAgICB9XG4gICAgYSA9IGcubGVuZ3RoO1xuICAgIG0gPSAxO1xuICAgIHdoaWxlIChhICE9IDEpIHtcbiAgICAgIGZvciAoaiA9IDA7IGogPCBhIC0gMTsgaisrKVxuICAgICAgICBoMVtqXSA9ICgoTWF0aC5wb3coNCwgbSkpICogZ1tqICsgMV0gLSBnW2pdKSAvIChNYXRoLnBvdyg0LCBtKSAtIDEpO1xuICAgICAgYSA9IGgxLmxlbmd0aDtcbiAgICAgIGcgPSBoMTtcbiAgICAgIGgxID0gW107XG4gICAgICBtKys7XG4gICAgfVxuICAgIHJldHVybiBnO1xuICB9LFxuXG4gIHNpbXBzb246IGZ1bmN0aW9uIHNpbXBzb24oZiwgYSwgYiwgbikge1xuICAgIHZhciBoID0gKGIgLSBhKSAvIG47XG4gICAgdmFyIEkgPSBmKGEpO1xuICAgIHZhciB4ID0gW107XG4gICAgdmFyIGogPSBhO1xuICAgIHZhciBrID0gMDtcbiAgICB2YXIgaSA9IDE7XG4gICAgdmFyIG07XG4gICAgZm9yICg7IGogPD0gYjsgaiA9IGogKyBoLCBrKyspXG4gICAgICB4W2tdID0gajtcbiAgICBtID0geC5sZW5ndGg7XG4gICAgZm9yICg7IGkgPCBtIC0gMTsgaSsrKSB7XG4gICAgICBJICs9ICgoaSAlIDIgIT09IDApID8gNCA6IDIpICogZih4W2ldKTtcbiAgICB9XG4gICAgcmV0dXJuIChoIC8gMykgKiAoSSArIGYoYikpO1xuICB9LFxuXG4gIGhlcm1pdGU6IGZ1bmN0aW9uIGhlcm1pdGUoWCwgRiwgZEYsIHZhbHVlKSB7XG4gICAgdmFyIG4gPSBYLmxlbmd0aDtcbiAgICB2YXIgcCA9IDA7XG4gICAgdmFyIGkgPSAwO1xuICAgIHZhciBsID0gW107XG4gICAgdmFyIGRsID0gW107XG4gICAgdmFyIEEgPSBbXTtcbiAgICB2YXIgQiA9IFtdO1xuICAgIHZhciBqO1xuICAgIGZvciAoOyBpIDwgbjsgaSsrKSB7XG4gICAgICBsW2ldID0gMTtcbiAgICAgIGZvciAoaiA9IDA7IGogPCBuOyBqKyspIHtcbiAgICAgICAgaWYgKGkgIT0gaikgbFtpXSAqPSAodmFsdWUgLSBYW2pdKSAvIChYW2ldIC0gWFtqXSk7XG4gICAgICB9XG4gICAgICBkbFtpXSA9IDA7XG4gICAgICBmb3IgKGogPSAwOyBqIDwgbjsgaisrKSB7XG4gICAgICAgIGlmIChpICE9IGopIGRsW2ldICs9IDEgLyAoWCBbaV0gLSBYW2pdKTtcbiAgICAgIH1cbiAgICAgIEFbaV0gPSAoMSAtIDIgKiAodmFsdWUgLSBYW2ldKSAqIGRsW2ldKSAqIChsW2ldICogbFtpXSk7XG4gICAgICBCW2ldID0gKHZhbHVlIC0gWFtpXSkgKiAobFtpXSAqIGxbaV0pO1xuICAgICAgcCArPSAoQVtpXSAqIEZbaV0gKyBCW2ldICogZEZbaV0pO1xuICAgIH1cbiAgICByZXR1cm4gcDtcbiAgfSxcblxuICBsYWdyYW5nZTogZnVuY3Rpb24gbGFncmFuZ2UoWCwgRiwgdmFsdWUpIHtcbiAgICB2YXIgcCA9IDA7XG4gICAgdmFyIGkgPSAwO1xuICAgIHZhciBqLCBsO1xuICAgIHZhciBuID0gWC5sZW5ndGg7XG4gICAgZm9yICg7IGkgPCBuOyBpKyspIHtcbiAgICAgIGwgPSBGW2ldO1xuICAgICAgZm9yIChqID0gMDsgaiA8IG47IGorKykge1xuICAgICAgICAvLyBjYWxjdWxhdGluZyB0aGUgbGFncmFuZ2UgcG9seW5vbWlhbCBMX2lcbiAgICAgICAgaWYgKGkgIT0gaikgbCAqPSAodmFsdWUgLSBYW2pdKSAvIChYW2ldIC0gWFtqXSk7XG4gICAgICB9XG4gICAgICAvLyBhZGRpbmcgdGhlIGxhZ3JhbmdlIHBvbHlub21pYWxzIGZvdW5kIGFib3ZlXG4gICAgICBwICs9IGw7XG4gICAgfVxuICAgIHJldHVybiBwO1xuICB9LFxuXG4gIGN1YmljX3NwbGluZTogZnVuY3Rpb24gY3ViaWNfc3BsaW5lKFgsIEYsIHZhbHVlKSB7XG4gICAgdmFyIG4gPSBYLmxlbmd0aDtcbiAgICB2YXIgaSA9IDAsIGo7XG4gICAgdmFyIEEgPSBbXTtcbiAgICB2YXIgQiA9IFtdO1xuICAgIHZhciBhbHBoYSA9IFtdO1xuICAgIHZhciBjID0gW107XG4gICAgdmFyIGggPSBbXTtcbiAgICB2YXIgYiA9IFtdO1xuICAgIHZhciBkID0gW107XG4gICAgZm9yICg7IGkgPCBuIC0gMTsgaSsrKVxuICAgICAgaFtpXSA9IFhbaSArIDFdIC0gWFtpXTtcbiAgICBhbHBoYVswXSA9IDA7XG4gICAgZm9yIChpID0gMTsgaSA8IG4gLSAxOyBpKyspIHtcbiAgICAgIGFscGhhW2ldID0gKDMgLyBoW2ldKSAqIChGW2kgKyAxXSAtIEZbaV0pIC1cbiAgICAgICAgICAoMyAvIGhbaS0xXSkgKiAoRltpXSAtIEZbaS0xXSk7XG4gICAgfVxuICAgIGZvciAoaSA9IDE7IGkgPCBuIC0gMTsgaSsrKSB7XG4gICAgICBBW2ldID0gW107XG4gICAgICBCW2ldID0gW107XG4gICAgICBBW2ldW2ktMV0gPSBoW2ktMV07XG4gICAgICBBW2ldW2ldID0gMiAqIChoW2kgLSAxXSArIGhbaV0pO1xuICAgICAgQVtpXVtpKzFdID0gaFtpXTtcbiAgICAgIEJbaV1bMF0gPSBhbHBoYVtpXTtcbiAgICB9XG4gICAgYyA9IGpTdGF0Lm11bHRpcGx5KGpTdGF0LmludihBKSwgQik7XG4gICAgZm9yIChqID0gMDsgaiA8IG4gLSAxOyBqKyspIHtcbiAgICAgIGJbal0gPSAoRltqICsgMV0gLSBGW2pdKSAvIGhbal0gLSBoW2pdICogKGNbaiArIDFdWzBdICsgMiAqIGNbal1bMF0pIC8gMztcbiAgICAgIGRbal0gPSAoY1tqICsgMV1bMF0gLSBjW2pdWzBdKSAvICgzICogaFtqXSk7XG4gICAgfVxuICAgIGZvciAoaiA9IDA7IGogPCBuOyBqKyspIHtcbiAgICAgIGlmIChYW2pdID4gdmFsdWUpIGJyZWFrO1xuICAgIH1cbiAgICBqIC09IDE7XG4gICAgcmV0dXJuIEZbal0gKyAodmFsdWUgLSBYW2pdKSAqIGJbal0gKyBqU3RhdC5zcSh2YWx1ZS1YW2pdKSAqXG4gICAgICAgIGNbal0gKyAodmFsdWUgLSBYW2pdKSAqIGpTdGF0LnNxKHZhbHVlIC0gWFtqXSkgKiBkW2pdO1xuICB9LFxuXG4gIGdhdXNzX3F1YWRyYXR1cmU6IGZ1bmN0aW9uIGdhdXNzX3F1YWRyYXR1cmUoKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKCdnYXVzc19xdWFkcmF0dXJlIG5vdCB5ZXQgaW1wbGVtZW50ZWQnKTtcbiAgfSxcblxuICBQQ0E6IGZ1bmN0aW9uIFBDQShYKSB7XG4gICAgdmFyIG0gPSBYLmxlbmd0aDtcbiAgICB2YXIgbiA9IFhbMF0ubGVuZ3RoO1xuICAgIHZhciBpID0gMDtcbiAgICB2YXIgaiwgdGVtcDE7XG4gICAgdmFyIHUgPSBbXTtcbiAgICB2YXIgRCA9IFtdO1xuICAgIHZhciByZXN1bHQgPSBbXTtcbiAgICB2YXIgdGVtcDIgPSBbXTtcbiAgICB2YXIgWSA9IFtdO1xuICAgIHZhciBCdCA9IFtdO1xuICAgIHZhciBCID0gW107XG4gICAgdmFyIEMgPSBbXTtcbiAgICB2YXIgViA9IFtdO1xuICAgIHZhciBWdCA9IFtdO1xuICAgIGZvciAoaSA9IDA7IGkgPCBtOyBpKyspIHtcbiAgICAgIHVbaV0gPSBqU3RhdC5zdW0oWFtpXSkgLyBuO1xuICAgIH1cbiAgICBmb3IgKGkgPSAwOyBpIDwgbjsgaSsrKSB7XG4gICAgICBCW2ldID0gW107XG4gICAgICBmb3IoaiA9IDA7IGogPCBtOyBqKyspIHtcbiAgICAgICAgQltpXVtqXSA9IFhbal1baV0gLSB1W2pdO1xuICAgICAgfVxuICAgIH1cbiAgICBCID0galN0YXQudHJhbnNwb3NlKEIpO1xuICAgIGZvciAoaSA9IDA7IGkgPCBtOyBpKyspIHtcbiAgICAgIENbaV0gPSBbXTtcbiAgICAgIGZvciAoaiA9IDA7IGogPCBtOyBqKyspIHtcbiAgICAgICAgQ1tpXVtqXSA9IChqU3RhdC5kb3QoW0JbaV1dLCBbQltqXV0pKSAvIChuIC0gMSk7XG4gICAgICB9XG4gICAgfVxuICAgIHJlc3VsdCA9IGpTdGF0LmphY29iaShDKTtcbiAgICBWID0gcmVzdWx0WzBdO1xuICAgIEQgPSByZXN1bHRbMV07XG4gICAgVnQgPSBqU3RhdC50cmFuc3Bvc2UoVik7XG4gICAgZm9yIChpID0gMDsgaSA8IEQubGVuZ3RoOyBpKyspIHtcbiAgICAgIGZvciAoaiA9IGk7IGogPCBELmxlbmd0aDsgaisrKSB7XG4gICAgICAgIGlmKERbaV0gPCBEW2pdKSAge1xuICAgICAgICAgIHRlbXAxID0gRFtpXTtcbiAgICAgICAgICBEW2ldID0gRFtqXTtcbiAgICAgICAgICBEW2pdID0gdGVtcDE7XG4gICAgICAgICAgdGVtcDIgPSBWdFtpXTtcbiAgICAgICAgICBWdFtpXSA9IFZ0W2pdO1xuICAgICAgICAgIFZ0W2pdID0gdGVtcDI7XG4gICAgICAgIH1cbiAgICAgIH1cbiAgICB9XG4gICAgQnQgPSBqU3RhdC50cmFuc3Bvc2UoQik7XG4gICAgZm9yIChpID0gMDsgaSA8IG07IGkrKykge1xuICAgICAgWVtpXSA9IFtdO1xuICAgICAgZm9yIChqID0gMDsgaiA8IEJ0Lmxlbmd0aDsgaisrKSB7XG4gICAgICAgIFlbaV1bal0gPSBqU3RhdC5kb3QoW1Z0W2ldXSwgW0J0W2pdXSk7XG4gICAgICB9XG4gICAgfVxuICAgIHJldHVybiBbWCwgRCwgVnQsIFldO1xuICB9XG59KTtcblxuLy8gZXh0ZW5kIGpTdGF0LmZuIHdpdGggbWV0aG9kcyB0aGF0IHJlcXVpcmUgb25lIGFyZ3VtZW50XG4oZnVuY3Rpb24oZnVuY3MpIHtcbiAgZm9yICh2YXIgaSA9IDA7IGkgPCBmdW5jcy5sZW5ndGg7IGkrKykgKGZ1bmN0aW9uKHBhc3NmdW5jKSB7XG4gICAgalN0YXQuZm5bcGFzc2Z1bmNdID0gZnVuY3Rpb24oYXJnLCBmdW5jKSB7XG4gICAgICB2YXIgdG1wdGhpcyA9IHRoaXM7XG4gICAgICAvLyBjaGVjayBmb3IgY2FsbGJhY2tcbiAgICAgIGlmIChmdW5jKSB7XG4gICAgICAgIHNldFRpbWVvdXQoZnVuY3Rpb24oKSB7XG4gICAgICAgICAgZnVuYy5jYWxsKHRtcHRoaXMsIGpTdGF0LmZuW3Bhc3NmdW5jXS5jYWxsKHRtcHRoaXMsIGFyZykpO1xuICAgICAgICB9LCAxNSk7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgICAgfVxuICAgICAgaWYgKHR5cGVvZiBqU3RhdFtwYXNzZnVuY10odGhpcywgYXJnKSA9PT0gJ251bWJlcicpXG4gICAgICAgIHJldHVybiBqU3RhdFtwYXNzZnVuY10odGhpcywgYXJnKTtcbiAgICAgIGVsc2VcbiAgICAgICAgcmV0dXJuIGpTdGF0KGpTdGF0W3Bhc3NmdW5jXSh0aGlzLCBhcmcpKTtcbiAgICB9O1xuICB9KGZ1bmNzW2ldKSk7XG59KCdhZGQgZGl2aWRlIG11bHRpcGx5IHN1YnRyYWN0IGRvdCBwb3cgZXhwIGxvZyBhYnMgbm9ybSBhbmdsZScuc3BsaXQoJyAnKSkpO1xuXG59KGpTdGF0LCBNYXRoKSk7XG4oZnVuY3Rpb24oalN0YXQsIE1hdGgpIHtcblxudmFyIHNsaWNlID0gW10uc2xpY2U7XG52YXIgaXNOdW1iZXIgPSBqU3RhdC51dGlscy5pc051bWJlcjtcbnZhciBpc0FycmF5ID0galN0YXQudXRpbHMuaXNBcnJheTtcblxuLy8gZmxhZz09dHJ1ZSBkZW5vdGVzIHVzZSBvZiBzYW1wbGUgc3RhbmRhcmQgZGV2aWF0aW9uXG4vLyBaIFN0YXRpc3RpY3NcbmpTdGF0LmV4dGVuZCh7XG4gIC8vIDIgZGlmZmVyZW50IHBhcmFtZXRlciBsaXN0czpcbiAgLy8gKHZhbHVlLCBtZWFuLCBzZClcbiAgLy8gKHZhbHVlLCBhcnJheSwgZmxhZylcbiAgenNjb3JlOiBmdW5jdGlvbiB6c2NvcmUoKSB7XG4gICAgdmFyIGFyZ3MgPSBzbGljZS5jYWxsKGFyZ3VtZW50cyk7XG4gICAgaWYgKGlzTnVtYmVyKGFyZ3NbMV0pKSB7XG4gICAgICByZXR1cm4gKGFyZ3NbMF0gLSBhcmdzWzFdKSAvIGFyZ3NbMl07XG4gICAgfVxuICAgIHJldHVybiAoYXJnc1swXSAtIGpTdGF0Lm1lYW4oYXJnc1sxXSkpIC8galN0YXQuc3RkZXYoYXJnc1sxXSwgYXJnc1syXSk7XG4gIH0sXG5cbiAgLy8gMyBkaWZmZXJlbnQgcGFyYW10ZXIgbGlzdHM6XG4gIC8vICh2YWx1ZSwgbWVhbiwgc2QsIHNpZGVzKVxuICAvLyAoenNjb3JlLCBzaWRlcylcbiAgLy8gKHZhbHVlLCBhcnJheSwgc2lkZXMsIGZsYWcpXG4gIHp0ZXN0OiBmdW5jdGlvbiB6dGVzdCgpIHtcbiAgICB2YXIgYXJncyA9IHNsaWNlLmNhbGwoYXJndW1lbnRzKTtcbiAgICB2YXIgejtcbiAgICBpZiAoaXNBcnJheShhcmdzWzFdKSkge1xuICAgICAgLy8gKHZhbHVlLCBhcnJheSwgc2lkZXMsIGZsYWcpXG4gICAgICB6ID0galN0YXQuenNjb3JlKGFyZ3NbMF0sYXJnc1sxXSxhcmdzWzNdKTtcbiAgICAgIHJldHVybiAoYXJnc1syXSA9PT0gMSkgP1xuICAgICAgICAoalN0YXQubm9ybWFsLmNkZigtTWF0aC5hYnMoeiksIDAsIDEpKSA6XG4gICAgICAgIChqU3RhdC5ub3JtYWwuY2RmKC1NYXRoLmFicyh6KSwgMCwgMSkqMik7XG4gICAgfSBlbHNlIHtcbiAgICAgIGlmIChhcmdzLmxlbmd0aCA+IDIpIHtcbiAgICAgICAgLy8gKHZhbHVlLCBtZWFuLCBzZCwgc2lkZXMpXG4gICAgICAgIHogPSBqU3RhdC56c2NvcmUoYXJnc1swXSxhcmdzWzFdLGFyZ3NbMl0pO1xuICAgICAgICByZXR1cm4gKGFyZ3NbM10gPT09IDEpID9cbiAgICAgICAgICAoalN0YXQubm9ybWFsLmNkZigtTWF0aC5hYnMoeiksMCwxKSkgOlxuICAgICAgICAgIChqU3RhdC5ub3JtYWwuY2RmKC1NYXRoLmFicyh6KSwwLDEpKiAyKTtcbiAgICAgIH0gZWxzZSB7XG4gICAgICAgIC8vICh6c2NvcmUsIHNpZGVzKVxuICAgICAgICB6ID0gYXJnc1swXTtcbiAgICAgICAgcmV0dXJuIChhcmdzWzFdID09PSAxKSA/XG4gICAgICAgICAgKGpTdGF0Lm5vcm1hbC5jZGYoLU1hdGguYWJzKHopLDAsMSkpIDpcbiAgICAgICAgICAoalN0YXQubm9ybWFsLmNkZigtTWF0aC5hYnMoeiksMCwxKSoyKTtcbiAgICAgIH1cbiAgICB9XG4gIH1cbn0pO1xuXG5qU3RhdC5leHRlbmQoalN0YXQuZm4sIHtcbiAgenNjb3JlOiBmdW5jdGlvbiB6c2NvcmUodmFsdWUsIGZsYWcpIHtcbiAgICByZXR1cm4gKHZhbHVlIC0gdGhpcy5tZWFuKCkpIC8gdGhpcy5zdGRldihmbGFnKTtcbiAgfSxcblxuICB6dGVzdDogZnVuY3Rpb24genRlc3QodmFsdWUsIHNpZGVzLCBmbGFnKSB7XG4gICAgdmFyIHpzY29yZSA9IE1hdGguYWJzKHRoaXMuenNjb3JlKHZhbHVlLCBmbGFnKSk7XG4gICAgcmV0dXJuIChzaWRlcyA9PT0gMSkgP1xuICAgICAgKGpTdGF0Lm5vcm1hbC5jZGYoLXpzY29yZSwgMCwgMSkpIDpcbiAgICAgIChqU3RhdC5ub3JtYWwuY2RmKC16c2NvcmUsIDAsIDEpICogMik7XG4gIH1cbn0pO1xuXG4vLyBUIFN0YXRpc3RpY3NcbmpTdGF0LmV4dGVuZCh7XG4gIC8vIDIgcGFyYW1ldGVyIGxpc3RzXG4gIC8vICh2YWx1ZSwgbWVhbiwgc2QsIG4pXG4gIC8vICh2YWx1ZSwgYXJyYXkpXG4gIHRzY29yZTogZnVuY3Rpb24gdHNjb3JlKCkge1xuICAgIHZhciBhcmdzID0gc2xpY2UuY2FsbChhcmd1bWVudHMpO1xuICAgIHJldHVybiAoYXJncy5sZW5ndGggPT09IDQpID9cbiAgICAgICgoYXJnc1swXSAtIGFyZ3NbMV0pIC8gKGFyZ3NbMl0gLyBNYXRoLnNxcnQoYXJnc1szXSkpKSA6XG4gICAgICAoKGFyZ3NbMF0gLSBqU3RhdC5tZWFuKGFyZ3NbMV0pKSAvXG4gICAgICAgKGpTdGF0LnN0ZGV2KGFyZ3NbMV0sIHRydWUpIC8gTWF0aC5zcXJ0KGFyZ3NbMV0ubGVuZ3RoKSkpO1xuICB9LFxuXG4gIC8vIDMgZGlmZmVyZW50IHBhcmFtdGVyIGxpc3RzOlxuICAvLyAodmFsdWUsIG1lYW4sIHNkLCBuLCBzaWRlcylcbiAgLy8gKHRzY29yZSwgbiwgc2lkZXMpXG4gIC8vICh2YWx1ZSwgYXJyYXksIHNpZGVzKVxuICB0dGVzdDogZnVuY3Rpb24gdHRlc3QoKSB7XG4gICAgdmFyIGFyZ3MgPSBzbGljZS5jYWxsKGFyZ3VtZW50cyk7XG4gICAgdmFyIHRzY29yZTtcbiAgICBpZiAoYXJncy5sZW5ndGggPT09IDUpIHtcbiAgICAgIHRzY29yZSA9IE1hdGguYWJzKGpTdGF0LnRzY29yZShhcmdzWzBdLCBhcmdzWzFdLCBhcmdzWzJdLCBhcmdzWzNdKSk7XG4gICAgICByZXR1cm4gKGFyZ3NbNF0gPT09IDEpID9cbiAgICAgICAgKGpTdGF0LnN0dWRlbnR0LmNkZigtdHNjb3JlLCBhcmdzWzNdLTEpKSA6XG4gICAgICAgIChqU3RhdC5zdHVkZW50dC5jZGYoLXRzY29yZSwgYXJnc1szXS0xKSoyKTtcbiAgICB9XG4gICAgaWYgKGlzTnVtYmVyKGFyZ3NbMV0pKSB7XG4gICAgICB0c2NvcmUgPSBNYXRoLmFicyhhcmdzWzBdKVxuICAgICAgcmV0dXJuIChhcmdzWzJdID09IDEpID9cbiAgICAgICAgKGpTdGF0LnN0dWRlbnR0LmNkZigtdHNjb3JlLCBhcmdzWzFdLTEpKSA6XG4gICAgICAgIChqU3RhdC5zdHVkZW50dC5jZGYoLXRzY29yZSwgYXJnc1sxXS0xKSAqIDIpO1xuICAgIH1cbiAgICB0c2NvcmUgPSBNYXRoLmFicyhqU3RhdC50c2NvcmUoYXJnc1swXSwgYXJnc1sxXSkpXG4gICAgcmV0dXJuIChhcmdzWzJdID09IDEpID9cbiAgICAgIChqU3RhdC5zdHVkZW50dC5jZGYoLXRzY29yZSwgYXJnc1sxXS5sZW5ndGgtMSkpIDpcbiAgICAgIChqU3RhdC5zdHVkZW50dC5jZGYoLXRzY29yZSwgYXJnc1sxXS5sZW5ndGgtMSkgKiAyKTtcbiAgfVxufSk7XG5cbmpTdGF0LmV4dGVuZChqU3RhdC5mbiwge1xuICB0c2NvcmU6IGZ1bmN0aW9uIHRzY29yZSh2YWx1ZSkge1xuICAgIHJldHVybiAodmFsdWUgLSB0aGlzLm1lYW4oKSkgLyAodGhpcy5zdGRldih0cnVlKSAvIE1hdGguc3FydCh0aGlzLmNvbHMoKSkpO1xuICB9LFxuXG4gIHR0ZXN0OiBmdW5jdGlvbiB0dGVzdCh2YWx1ZSwgc2lkZXMpIHtcbiAgICByZXR1cm4gKHNpZGVzID09PSAxKSA/XG4gICAgICAoMSAtIGpTdGF0LnN0dWRlbnR0LmNkZihNYXRoLmFicyh0aGlzLnRzY29yZSh2YWx1ZSkpLCB0aGlzLmNvbHMoKS0xKSkgOlxuICAgICAgKGpTdGF0LnN0dWRlbnR0LmNkZigtTWF0aC5hYnModGhpcy50c2NvcmUodmFsdWUpKSwgdGhpcy5jb2xzKCktMSkqMik7XG4gIH1cbn0pO1xuXG4vLyBGIFN0YXRpc3RpY3NcbmpTdGF0LmV4dGVuZCh7XG4gIC8vIFBhcmFtdGVyIGxpc3QgaXMgYXMgZm9sbG93czpcbiAgLy8gKGFycmF5MSwgYXJyYXkyLCBhcnJheTMsIC4uLilcbiAgLy8gb3IgaXQgaXMgYW4gYXJyYXkgb2YgYXJyYXlzXG4gIC8vIGFycmF5IG9mIGFycmF5cyBjb252ZXJzaW9uXG4gIGFub3ZhZnNjb3JlOiBmdW5jdGlvbiBhbm92YWZzY29yZSgpIHtcbiAgICB2YXIgYXJncyA9IHNsaWNlLmNhbGwoYXJndW1lbnRzKSxcbiAgICBleHBWYXIsIHNhbXBsZSwgc2FtcE1lYW4sIHNhbXBTYW1wTWVhbiwgdG1wYXJncywgdW5leHBWYXIsIGksIGo7XG4gICAgaWYgKGFyZ3MubGVuZ3RoID09PSAxKSB7XG4gICAgICB0bXBhcmdzID0gbmV3IEFycmF5KGFyZ3NbMF0ubGVuZ3RoKTtcbiAgICAgIGZvciAoaSA9IDA7IGkgPCBhcmdzWzBdLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHRtcGFyZ3NbaV0gPSBhcmdzWzBdW2ldO1xuICAgICAgfVxuICAgICAgYXJncyA9IHRtcGFyZ3M7XG4gICAgfVxuICAgIC8vIEJ1aWxkcyBzYW1wbGUgYXJyYXlcbiAgICBzYW1wbGUgPSBuZXcgQXJyYXkoKTtcbiAgICBmb3IgKGkgPSAwOyBpIDwgYXJncy5sZW5ndGg7IGkrKykge1xuICAgICAgc2FtcGxlID0gc2FtcGxlLmNvbmNhdChhcmdzW2ldKTtcbiAgICB9XG4gICAgc2FtcE1lYW4gPSBqU3RhdC5tZWFuKHNhbXBsZSk7XG4gICAgLy8gQ29tcHV0ZXMgdGhlIGV4cGxhaW5lZCB2YXJpYW5jZVxuICAgIGV4cFZhciA9IDA7XG4gICAgZm9yIChpID0gMDsgaSA8IGFyZ3MubGVuZ3RoOyBpKyspIHtcbiAgICAgIGV4cFZhciA9IGV4cFZhciArIGFyZ3NbaV0ubGVuZ3RoICogTWF0aC5wb3coalN0YXQubWVhbihhcmdzW2ldKSAtIHNhbXBNZWFuLCAyKTtcbiAgICB9XG4gICAgZXhwVmFyIC89IChhcmdzLmxlbmd0aCAtIDEpO1xuICAgIC8vIENvbXB1dGVzIHVuZXhwbGFpbmVkIHZhcmlhbmNlXG4gICAgdW5leHBWYXIgPSAwO1xuICAgIGZvciAoaSA9IDA7IGkgPCBhcmdzLmxlbmd0aDsgaSsrKSB7XG4gICAgICBzYW1wU2FtcE1lYW4gPSBqU3RhdC5tZWFuKGFyZ3NbaV0pO1xuICAgICAgZm9yIChqID0gMDsgaiA8IGFyZ3NbaV0ubGVuZ3RoOyBqKyspIHtcbiAgICAgICAgdW5leHBWYXIgKz0gTWF0aC5wb3coYXJnc1tpXVtqXSAtIHNhbXBTYW1wTWVhbiwgMik7XG4gICAgICB9XG4gICAgfVxuICAgIHVuZXhwVmFyIC89IChzYW1wbGUubGVuZ3RoIC0gYXJncy5sZW5ndGgpO1xuICAgIHJldHVybiBleHBWYXIgLyB1bmV4cFZhcjtcbiAgfSxcblxuICAvLyAyIGRpZmZlcmVudCBwYXJhbXRlciBzZXR1cHNcbiAgLy8gKGFycmF5MSwgYXJyYXkyLCBhcnJheTMsIC4uLilcbiAgLy8gKGFub3ZhZnNjb3JlLCBkZjEsIGRmMilcbiAgYW5vdmFmdGVzdDogZnVuY3Rpb24gYW5vdmFmdGVzdCgpIHtcbiAgICB2YXIgYXJncyA9IHNsaWNlLmNhbGwoYXJndW1lbnRzKSxcbiAgICBkZjEsIGRmMiwgbiwgaTtcbiAgICBpZiAoaXNOdW1iZXIoYXJnc1swXSkpIHtcbiAgICAgIHJldHVybiAxIC0galN0YXQuY2VudHJhbEYuY2RmKGFyZ3NbMF0sIGFyZ3NbMV0sIGFyZ3NbMl0pO1xuICAgIH1cbiAgICB2YXIgYW5vdmFmc2NvcmUgPSBqU3RhdC5hbm92YWZzY29yZShhcmdzKTtcbiAgICBkZjEgPSBhcmdzLmxlbmd0aCAtIDE7XG4gICAgbiA9IDA7XG4gICAgZm9yIChpID0gMDsgaSA8IGFyZ3MubGVuZ3RoOyBpKyspIHtcbiAgICAgIG4gPSBuICsgYXJnc1tpXS5sZW5ndGg7XG4gICAgfVxuICAgIGRmMiA9IG4gLSBkZjEgLSAxO1xuICAgIHJldHVybiAxIC0galN0YXQuY2VudHJhbEYuY2RmKGFub3ZhZnNjb3JlLCBkZjEsIGRmMik7XG4gIH0sXG5cbiAgZnRlc3Q6IGZ1bmN0aW9uIGZ0ZXN0KGZzY29yZSwgZGYxLCBkZjIpIHtcbiAgICByZXR1cm4gMSAtIGpTdGF0LmNlbnRyYWxGLmNkZihmc2NvcmUsIGRmMSwgZGYyKTtcbiAgfVxufSk7XG5cbmpTdGF0LmV4dGVuZChqU3RhdC5mbiwge1xuICBhbm92YWZzY29yZTogZnVuY3Rpb24gYW5vdmFmc2NvcmUoKSB7XG4gICAgcmV0dXJuIGpTdGF0LmFub3ZhZnNjb3JlKHRoaXMudG9BcnJheSgpKTtcbiAgfSxcblxuICBhbm92YWZ0ZXM6IGZ1bmN0aW9uIGFub3ZhZnRlcygpIHtcbiAgICB2YXIgbiA9IDA7XG4gICAgdmFyIGk7XG4gICAgZm9yIChpID0gMDsgaSA8IHRoaXMubGVuZ3RoOyBpKyspIHtcbiAgICAgIG4gPSBuICsgdGhpc1tpXS5sZW5ndGg7XG4gICAgfVxuICAgIHJldHVybiBqU3RhdC5mdGVzdCh0aGlzLmFub3ZhZnNjb3JlKCksIHRoaXMubGVuZ3RoIC0gMSwgbiAtIHRoaXMubGVuZ3RoKTtcbiAgfVxufSk7XG5cbi8vIFR1a2V5J3MgcmFuZ2UgdGVzdFxualN0YXQuZXh0ZW5kKHtcbiAgLy8gMiBwYXJhbWV0ZXIgbGlzdHNcbiAgLy8gKG1lYW4xLCBtZWFuMiwgbjEsIG4yLCBzZClcbiAgLy8gKGFycmF5MSwgYXJyYXkyLCBzZClcbiAgcXNjb3JlOiBmdW5jdGlvbiBxc2NvcmUoKSB7XG4gICAgdmFyIGFyZ3MgPSBzbGljZS5jYWxsKGFyZ3VtZW50cyk7XG4gICAgdmFyIG1lYW4xLCBtZWFuMiwgbjEsIG4yLCBzZDtcbiAgICBpZiAoaXNOdW1iZXIoYXJnc1swXSkpIHtcbiAgICAgICAgbWVhbjEgPSBhcmdzWzBdO1xuICAgICAgICBtZWFuMiA9IGFyZ3NbMV07XG4gICAgICAgIG4xID0gYXJnc1syXTtcbiAgICAgICAgbjIgPSBhcmdzWzNdO1xuICAgICAgICBzZCA9IGFyZ3NbNF07XG4gICAgfSBlbHNlIHtcbiAgICAgICAgbWVhbjEgPSBqU3RhdC5tZWFuKGFyZ3NbMF0pO1xuICAgICAgICBtZWFuMiA9IGpTdGF0Lm1lYW4oYXJnc1sxXSk7XG4gICAgICAgIG4xID0gYXJnc1swXS5sZW5ndGg7XG4gICAgICAgIG4yID0gYXJnc1sxXS5sZW5ndGg7XG4gICAgICAgIHNkID0gYXJnc1syXTtcbiAgICB9XG4gICAgcmV0dXJuIE1hdGguYWJzKG1lYW4xIC0gbWVhbjIpIC8gKHNkICogTWF0aC5zcXJ0KCgxIC8gbjEgKyAxIC8gbjIpIC8gMikpO1xuICB9LFxuXG4gIC8vIDMgZGlmZmVyZW50IHBhcmFtZXRlciBsaXN0czpcbiAgLy8gKHFzY29yZSwgbiwgaylcbiAgLy8gKG1lYW4xLCBtZWFuMiwgbjEsIG4yLCBzZCwgbiwgaylcbiAgLy8gKGFycmF5MSwgYXJyYXkyLCBzZCwgbiwgaylcbiAgcXRlc3Q6IGZ1bmN0aW9uIHF0ZXN0KCkge1xuICAgIHZhciBhcmdzID0gc2xpY2UuY2FsbChhcmd1bWVudHMpO1xuXG4gICAgdmFyIHFzY29yZTtcbiAgICBpZiAoYXJncy5sZW5ndGggPT09IDMpIHtcbiAgICAgIHFzY29yZSA9IGFyZ3NbMF07XG4gICAgICBhcmdzID0gYXJncy5zbGljZSgxKTtcbiAgICB9IGVsc2UgaWYgKGFyZ3MubGVuZ3RoID09PSA3KSB7XG4gICAgICBxc2NvcmUgPSBqU3RhdC5xc2NvcmUoYXJnc1swXSwgYXJnc1sxXSwgYXJnc1syXSwgYXJnc1szXSwgYXJnc1s0XSk7XG4gICAgICBhcmdzID0gYXJncy5zbGljZSg1KTtcbiAgICB9IGVsc2Uge1xuICAgICAgcXNjb3JlID0galN0YXQucXNjb3JlKGFyZ3NbMF0sIGFyZ3NbMV0sIGFyZ3NbMl0pO1xuICAgICAgYXJncyA9IGFyZ3Muc2xpY2UoMyk7XG4gICAgfVxuXG4gICAgdmFyIG4gPSBhcmdzWzBdO1xuICAgIHZhciBrID0gYXJnc1sxXTtcblxuICAgIHJldHVybiAxIC0galN0YXQudHVrZXkuY2RmKHFzY29yZSwgaywgbiAtIGspO1xuICB9LFxuXG4gIHR1a2V5aHNkOiBmdW5jdGlvbiB0dWtleWhzZChhcnJheXMpIHtcbiAgICB2YXIgc2QgPSBqU3RhdC5wb29sZWRzdGRldihhcnJheXMpO1xuICAgIHZhciBtZWFucyA9IGFycmF5cy5tYXAoZnVuY3Rpb24gKGFycikge3JldHVybiBqU3RhdC5tZWFuKGFycik7fSk7XG4gICAgdmFyIG4gPSBhcnJheXMucmVkdWNlKGZ1bmN0aW9uIChuLCBhcnIpIHtyZXR1cm4gbiArIGFyci5sZW5ndGg7fSwgMCk7XG5cbiAgICB2YXIgcmVzdWx0cyA9IFtdO1xuICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYXJyYXlzLmxlbmd0aDsgKytpKSB7XG4gICAgICAgIGZvciAodmFyIGogPSBpICsgMTsgaiA8IGFycmF5cy5sZW5ndGg7ICsraikge1xuICAgICAgICAgICAgdmFyIHAgPSBqU3RhdC5xdGVzdChtZWFuc1tpXSwgbWVhbnNbal0sIGFycmF5c1tpXS5sZW5ndGgsIGFycmF5c1tqXS5sZW5ndGgsIHNkLCBuLCBhcnJheXMubGVuZ3RoKTtcbiAgICAgICAgICAgIHJlc3VsdHMucHVzaChbW2ksIGpdLCBwXSk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gcmVzdWx0cztcbiAgfVxufSk7XG5cbi8vIEVycm9yIEJvdW5kc1xualN0YXQuZXh0ZW5kKHtcbiAgLy8gMiBkaWZmZXJlbnQgcGFyYW1ldGVyIHNldHVwc1xuICAvLyAodmFsdWUsIGFscGhhLCBzZCwgbilcbiAgLy8gKHZhbHVlLCBhbHBoYSwgYXJyYXkpXG4gIG5vcm1hbGNpOiBmdW5jdGlvbiBub3JtYWxjaSgpIHtcbiAgICB2YXIgYXJncyA9IHNsaWNlLmNhbGwoYXJndW1lbnRzKSxcbiAgICBhbnMgPSBuZXcgQXJyYXkoMiksXG4gICAgY2hhbmdlO1xuICAgIGlmIChhcmdzLmxlbmd0aCA9PT0gNCkge1xuICAgICAgY2hhbmdlID0gTWF0aC5hYnMoalN0YXQubm9ybWFsLmludihhcmdzWzFdIC8gMiwgMCwgMSkgKlxuICAgICAgICAgICAgICAgICAgICAgICAgYXJnc1syXSAvIE1hdGguc3FydChhcmdzWzNdKSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNoYW5nZSA9IE1hdGguYWJzKGpTdGF0Lm5vcm1hbC5pbnYoYXJnc1sxXSAvIDIsIDAsIDEpICpcbiAgICAgICAgICAgICAgICAgICAgICAgIGpTdGF0LnN0ZGV2KGFyZ3NbMl0pIC8gTWF0aC5zcXJ0KGFyZ3NbMl0ubGVuZ3RoKSk7XG4gICAgfVxuICAgIGFuc1swXSA9IGFyZ3NbMF0gLSBjaGFuZ2U7XG4gICAgYW5zWzFdID0gYXJnc1swXSArIGNoYW5nZTtcbiAgICByZXR1cm4gYW5zO1xuICB9LFxuXG4gIC8vIDIgZGlmZmVyZW50IHBhcmFtZXRlciBzZXR1cHNcbiAgLy8gKHZhbHVlLCBhbHBoYSwgc2QsIG4pXG4gIC8vICh2YWx1ZSwgYWxwaGEsIGFycmF5KVxuICB0Y2k6IGZ1bmN0aW9uIHRjaSgpIHtcbiAgICB2YXIgYXJncyA9IHNsaWNlLmNhbGwoYXJndW1lbnRzKSxcbiAgICBhbnMgPSBuZXcgQXJyYXkoMiksXG4gICAgY2hhbmdlO1xuICAgIGlmIChhcmdzLmxlbmd0aCA9PT0gNCkge1xuICAgICAgY2hhbmdlID0gTWF0aC5hYnMoalN0YXQuc3R1ZGVudHQuaW52KGFyZ3NbMV0gLyAyLCBhcmdzWzNdIC0gMSkgKlxuICAgICAgICAgICAgICAgICAgICAgICAgYXJnc1syXSAvIE1hdGguc3FydChhcmdzWzNdKSk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNoYW5nZSA9IE1hdGguYWJzKGpTdGF0LnN0dWRlbnR0LmludihhcmdzWzFdIC8gMiwgYXJnc1syXS5sZW5ndGggLSAxKSAqXG4gICAgICAgICAgICAgICAgICAgICAgICBqU3RhdC5zdGRldihhcmdzWzJdLCB0cnVlKSAvIE1hdGguc3FydChhcmdzWzJdLmxlbmd0aCkpO1xuICAgIH1cbiAgICBhbnNbMF0gPSBhcmdzWzBdIC0gY2hhbmdlO1xuICAgIGFuc1sxXSA9IGFyZ3NbMF0gKyBjaGFuZ2U7XG4gICAgcmV0dXJuIGFucztcbiAgfSxcblxuICBzaWduaWZpY2FudDogZnVuY3Rpb24gc2lnbmlmaWNhbnQocHZhbHVlLCBhbHBoYSkge1xuICAgIHJldHVybiBwdmFsdWUgPCBhbHBoYTtcbiAgfVxufSk7XG5cbmpTdGF0LmV4dGVuZChqU3RhdC5mbiwge1xuICBub3JtYWxjaTogZnVuY3Rpb24gbm9ybWFsY2kodmFsdWUsIGFscGhhKSB7XG4gICAgcmV0dXJuIGpTdGF0Lm5vcm1hbGNpKHZhbHVlLCBhbHBoYSwgdGhpcy50b0FycmF5KCkpO1xuICB9LFxuXG4gIHRjaTogZnVuY3Rpb24gdGNpKHZhbHVlLCBhbHBoYSkge1xuICAgIHJldHVybiBqU3RhdC50Y2kodmFsdWUsIGFscGhhLCB0aGlzLnRvQXJyYXkoKSk7XG4gIH1cbn0pO1xuXG4vLyBpbnRlcm5hbCBtZXRob2QgZm9yIGNhbGN1bGF0aW5nIHRoZSB6LXNjb3JlIGZvciBhIGRpZmZlcmVuY2Ugb2YgcHJvcG9ydGlvbnMgdGVzdFxuZnVuY3Rpb24gZGlmZmVyZW5jZU9mUHJvcG9ydGlvbnMocDEsIG4xLCBwMiwgbjIpIHtcbiAgaWYgKHAxID4gMSB8fCBwMiA+IDEgfHwgcDEgPD0gMCB8fCBwMiA8PSAwKSB7XG4gICAgdGhyb3cgbmV3IEVycm9yKFwiUHJvcG9ydGlvbnMgc2hvdWxkIGJlIGdyZWF0ZXIgdGhhbiAwIGFuZCBsZXNzIHRoYW4gMVwiKVxuICB9XG4gIHZhciBwb29sZWQgPSAocDEgKiBuMSArIHAyICogbjIpIC8gKG4xICsgbjIpO1xuICB2YXIgc2UgPSBNYXRoLnNxcnQocG9vbGVkICogKDEgLSBwb29sZWQpICogKCgxL24xKSArICgxL24yKSkpO1xuICByZXR1cm4gKHAxIC0gcDIpIC8gc2U7XG59XG5cbi8vIERpZmZlcmVuY2Ugb2YgUHJvcG9ydGlvbnNcbmpTdGF0LmV4dGVuZChqU3RhdC5mbiwge1xuICBvbmVTaWRlZERpZmZlcmVuY2VPZlByb3BvcnRpb25zOiBmdW5jdGlvbiBvbmVTaWRlZERpZmZlcmVuY2VPZlByb3BvcnRpb25zKHAxLCBuMSwgcDIsIG4yKSB7XG4gICAgdmFyIHogPSBkaWZmZXJlbmNlT2ZQcm9wb3J0aW9ucyhwMSwgbjEsIHAyLCBuMik7XG4gICAgcmV0dXJuIGpTdGF0Lnp0ZXN0KHosIDEpO1xuICB9LFxuXG4gIHR3b1NpZGVkRGlmZmVyZW5jZU9mUHJvcG9ydGlvbnM6IGZ1bmN0aW9uIHR3b1NpZGVkRGlmZmVyZW5jZU9mUHJvcG9ydGlvbnMocDEsIG4xLCBwMiwgbjIpIHtcbiAgICB2YXIgeiA9IGRpZmZlcmVuY2VPZlByb3BvcnRpb25zKHAxLCBuMSwgcDIsIG4yKTtcbiAgICByZXR1cm4galN0YXQuenRlc3QoeiwgMik7XG4gIH1cbn0pO1xuXG59KGpTdGF0LCBNYXRoKSk7XG5qU3RhdC5tb2RlbHMgPSAoZnVuY3Rpb24oKXtcbiAgZnVuY3Rpb24gc3ViX3JlZ3Jlc3MoZXhvZykge1xuICAgIHZhciB2YXJfY291bnQgPSBleG9nWzBdLmxlbmd0aDtcbiAgICB2YXIgbW9kZWxMaXN0ID0galN0YXQuYXJhbmdlKHZhcl9jb3VudCkubWFwKGZ1bmN0aW9uKGVuZG9nX2luZGV4KSB7XG4gICAgICB2YXIgZXhvZ19pbmRleCA9XG4gICAgICAgICAgalN0YXQuYXJhbmdlKHZhcl9jb3VudCkuZmlsdGVyKGZ1bmN0aW9uKGkpe3JldHVybiBpIT09ZW5kb2dfaW5kZXh9KTtcbiAgICAgIHJldHVybiBvbHMoalN0YXQuY29sKGV4b2csIGVuZG9nX2luZGV4KS5tYXAoZnVuY3Rpb24oeCl7IHJldHVybiB4WzBdIH0pLFxuICAgICAgICAgICAgICAgICBqU3RhdC5jb2woZXhvZywgZXhvZ19pbmRleCkpXG4gICAgfSk7XG4gICAgcmV0dXJuIG1vZGVsTGlzdDtcbiAgfVxuXG4gIC8vIGRvIE9MUyBtb2RlbCByZWdyZXNzXG4gIC8vIGV4b2cgaGF2ZSBpbmNsdWRlIGNvbnN0IGNvbHVtbnMgLGl0IHdpbGwgbm90IGdlbmVyYXRlIGl0IC5JbiBmYWN0LCBleG9nIGlzXG4gIC8vIFwiZGVzaWduIG1hdHJpeFwiIGxvb2sgYXRcbiAgLy9odHRwczovL2VuLndpa2lwZWRpYS5vcmcvd2lraS9EZXNpZ25fbWF0cml4XG4gIGZ1bmN0aW9uIG9scyhlbmRvZywgZXhvZykge1xuICAgIHZhciBub2JzID0gZW5kb2cubGVuZ3RoO1xuICAgIHZhciBkZl9tb2RlbCA9IGV4b2dbMF0ubGVuZ3RoIC0gMTtcbiAgICB2YXIgZGZfcmVzaWQgPSBub2JzLWRmX21vZGVsIC0gMTtcbiAgICB2YXIgY29lZiA9IGpTdGF0LmxzdHNxKGV4b2csIGVuZG9nKTtcbiAgICB2YXIgcHJlZGljdCA9XG4gICAgICAgIGpTdGF0Lm11bHRpcGx5KGV4b2csIGNvZWYubWFwKGZ1bmN0aW9uKHgpIHsgcmV0dXJuIFt4XSB9KSlcbiAgICAgICAgICAgIC5tYXAoZnVuY3Rpb24ocCkgeyByZXR1cm4gcFswXSB9KTtcbiAgICB2YXIgcmVzaWQgPSBqU3RhdC5zdWJ0cmFjdChlbmRvZywgcHJlZGljdCk7XG4gICAgdmFyIHliYXIgPSBqU3RhdC5tZWFuKGVuZG9nKTtcbiAgICAvLyBjb25zdGFudCBjYXVzZSBwcm9ibGVtXG4gICAgLy8gdmFyIFNTVCA9IGpTdGF0LnN1bShlbmRvZy5tYXAoZnVuY3Rpb24oeSkge1xuICAgIC8vICAgcmV0dXJuIE1hdGgucG93KHkteWJhciwyKTtcbiAgICAvLyB9KSk7XG4gICAgdmFyIFNTRSA9IGpTdGF0LnN1bShwcmVkaWN0Lm1hcChmdW5jdGlvbihmKSB7XG4gICAgICByZXR1cm4gTWF0aC5wb3coZiAtIHliYXIsIDIpO1xuICAgIH0pKTtcbiAgICB2YXIgU1NSID0galN0YXQuc3VtKGVuZG9nLm1hcChmdW5jdGlvbih5LCBpKSB7XG4gICAgICByZXR1cm4gTWF0aC5wb3coeSAtIHByZWRpY3RbaV0sIDIpO1xuICAgIH0pKTtcbiAgICB2YXIgU1NUID0gU1NFICsgU1NSO1xuICAgIHZhciBSMiA9IChTU0UgLyBTU1QpO1xuICAgIHJldHVybiB7XG4gICAgICAgIGV4b2c6ZXhvZyxcbiAgICAgICAgZW5kb2c6ZW5kb2csXG4gICAgICAgIG5vYnM6bm9icyxcbiAgICAgICAgZGZfbW9kZWw6ZGZfbW9kZWwsXG4gICAgICAgIGRmX3Jlc2lkOmRmX3Jlc2lkLFxuICAgICAgICBjb2VmOmNvZWYsXG4gICAgICAgIHByZWRpY3Q6cHJlZGljdCxcbiAgICAgICAgcmVzaWQ6cmVzaWQsXG4gICAgICAgIHliYXI6eWJhcixcbiAgICAgICAgU1NUOlNTVCxcbiAgICAgICAgU1NFOlNTRSxcbiAgICAgICAgU1NSOlNTUixcbiAgICAgICAgUjI6UjJcbiAgICB9O1xuICB9XG5cbiAgLy8gSDA6IGJfST0wXG4gIC8vIEgxOiBiX0khPTBcbiAgZnVuY3Rpb24gdF90ZXN0KG1vZGVsKSB7XG4gICAgdmFyIHN1Yk1vZGVsTGlzdCA9IHN1Yl9yZWdyZXNzKG1vZGVsLmV4b2cpO1xuICAgIC8vdmFyIHNpZ21hSGF0PWpTdGF0LnN0ZGV2KG1vZGVsLnJlc2lkKTtcbiAgICB2YXIgc2lnbWFIYXQgPSBNYXRoLnNxcnQobW9kZWwuU1NSIC8gKG1vZGVsLmRmX3Jlc2lkKSk7XG4gICAgdmFyIHNlQmV0YUhhdCA9IHN1Yk1vZGVsTGlzdC5tYXAoZnVuY3Rpb24obW9kKSB7XG4gICAgICB2YXIgU1NUID0gbW9kLlNTVDtcbiAgICAgIHZhciBSMiA9IG1vZC5SMjtcbiAgICAgIHJldHVybiBzaWdtYUhhdCAvIE1hdGguc3FydChTU1QgKiAoMSAtIFIyKSk7XG4gICAgfSk7XG4gICAgdmFyIHRTdGF0aXN0aWMgPSBtb2RlbC5jb2VmLm1hcChmdW5jdGlvbihjb2VmLCBpKSB7XG4gICAgICByZXR1cm4gKGNvZWYgLSAwKSAvIHNlQmV0YUhhdFtpXTtcbiAgICB9KTtcbiAgICB2YXIgcFZhbHVlID0gdFN0YXRpc3RpYy5tYXAoZnVuY3Rpb24odCkge1xuICAgICAgdmFyIGxlZnRwcGYgPSBqU3RhdC5zdHVkZW50dC5jZGYodCwgbW9kZWwuZGZfcmVzaWQpO1xuICAgICAgcmV0dXJuIChsZWZ0cHBmID4gMC41ID8gMSAtIGxlZnRwcGYgOiBsZWZ0cHBmKSAqIDI7XG4gICAgfSk7XG4gICAgdmFyIGMgPSBqU3RhdC5zdHVkZW50dC5pbnYoMC45NzUsIG1vZGVsLmRmX3Jlc2lkKTtcbiAgICB2YXIgaW50ZXJ2YWw5NSA9IG1vZGVsLmNvZWYubWFwKGZ1bmN0aW9uKGNvZWYsIGkpIHtcbiAgICAgIHZhciBkID0gYyAqIHNlQmV0YUhhdFtpXTtcbiAgICAgIHJldHVybiBbY29lZiAtIGQsIGNvZWYgKyBkXTtcbiAgICB9KVxuICAgIHJldHVybiB7XG4gICAgICAgIHNlOiBzZUJldGFIYXQsXG4gICAgICAgIHQ6IHRTdGF0aXN0aWMsXG4gICAgICAgIHA6IHBWYWx1ZSxcbiAgICAgICAgc2lnbWFIYXQ6IHNpZ21hSGF0LFxuICAgICAgICBpbnRlcnZhbDk1OiBpbnRlcnZhbDk1XG4gICAgfTtcbiAgfVxuXG4gIGZ1bmN0aW9uIEZfdGVzdChtb2RlbCkge1xuICAgIHZhciBGX3N0YXRpc3RpYyA9XG4gICAgICAgIChtb2RlbC5SMiAvIG1vZGVsLmRmX21vZGVsKSAvICgoMSAtIG1vZGVsLlIyKSAvIG1vZGVsLmRmX3Jlc2lkKTtcbiAgICB2YXIgZmNkZiA9IGZ1bmN0aW9uKHgsIG4xLCBuMikge1xuICAgICAgcmV0dXJuIGpTdGF0LmJldGEuY2RmKHggLyAobjIgLyBuMSArIHgpLCBuMSAvIDIsIG4yIC8gMilcbiAgICB9XG4gICAgdmFyIHB2YWx1ZSA9IDEgLSBmY2RmKEZfc3RhdGlzdGljLCBtb2RlbC5kZl9tb2RlbCwgbW9kZWwuZGZfcmVzaWQpO1xuICAgIHJldHVybiB7IEZfc3RhdGlzdGljOiBGX3N0YXRpc3RpYywgcHZhbHVlOiBwdmFsdWUgfTtcbiAgfVxuXG4gIGZ1bmN0aW9uIG9sc193cmFwKGVuZG9nLCBleG9nKSB7XG4gICAgdmFyIG1vZGVsID0gb2xzKGVuZG9nLGV4b2cpO1xuICAgIHZhciB0dGVzdCA9IHRfdGVzdChtb2RlbCk7XG4gICAgdmFyIGZ0ZXN0ID0gRl90ZXN0KG1vZGVsKTtcbiAgICAvLyBQcm92aWRlIHRoZSBXaGVycnkgLyBFemVraWVsIC8gTWNOZW1hciAvIENvaGVuIEFkanVzdGVkIFJeMlxuICAgIC8vIFdoaWNoIG1hdGNoZXMgdGhlICdhZGp1c3RlZCBSXjInIHByb3ZpZGVkIGJ5IFIncyBsbSBwYWNrYWdlXG4gICAgdmFyIGFkanVzdF9SMiA9XG4gICAgICAgIDEgLSAoMSAtIG1vZGVsLlIyKSAqICgobW9kZWwubm9icyAtIDEpIC8gKG1vZGVsLmRmX3Jlc2lkKSk7XG4gICAgbW9kZWwudCA9IHR0ZXN0O1xuICAgIG1vZGVsLmYgPSBmdGVzdDtcbiAgICBtb2RlbC5hZGp1c3RfUjIgPSBhZGp1c3RfUjI7XG4gICAgcmV0dXJuIG1vZGVsO1xuICB9XG5cbiAgcmV0dXJuIHsgb2xzOiBvbHNfd3JhcCB9O1xufSkoKTtcbi8vVG8gcmVncmVzcywgc2ltcGx5IGJ1aWxkIFggbWF0cml4XG4vLyhhcHBlbmQgY29sdW1uIG9mIDEncykgdXNpbmdcbi8vYnVpbGR4bWF0cml4IGFuZCBidWlsZCB0aGUgWVxuLy9tYXRyaXggdXNpbmcgYnVpbGR5bWF0cml4XG4vLyhzaW1wbHkgdGhlIHRyYW5zcG9zZSlcbi8vYW5kIHJ1biByZWdyZXNzLlxuXG5cblxuLy9SZWdyZXNzaW9uc1xuXG5qU3RhdC5leHRlbmQoe1xuICBidWlsZHhtYXRyaXg6IGZ1bmN0aW9uIGJ1aWxkeG1hdHJpeCgpe1xuICAgIC8vUGFyYW1ldGVycyB3aWxsIGJlIHBhc3NlZCBpbiBhcyBzdWNoXG4gICAgLy8oYXJyYXkxLGFycmF5MixhcnJheTMsLi4uKVxuICAgIC8vYXMgKHgxLHgyLHgzLC4uLilcbiAgICAvL25lZWRzIHRvIGJlICgxLHgxLHgyLHgzLC4uLilcbiAgICB2YXIgbWF0cml4Um93cyA9IG5ldyBBcnJheShhcmd1bWVudHMubGVuZ3RoKTtcbiAgICBmb3IodmFyIGk9MDtpPGFyZ3VtZW50cy5sZW5ndGg7aSsrKXtcbiAgICAgIHZhciBhcnJheSA9IFsxXTtcbiAgICAgIG1hdHJpeFJvd3NbaV09IGFycmF5LmNvbmNhdChhcmd1bWVudHNbaV0pO1xuICAgIH1cbiAgICByZXR1cm4galN0YXQobWF0cml4Um93cyk7XG5cbiAgfSxcblxuICBidWlsZGR4bWF0cml4OiBmdW5jdGlvbiBidWlsZGR4bWF0cml4KCkge1xuICAgIC8vUGFyYW10ZXJzIHdpbGwgYmUgcGFzc2VkIGluIGFzIHN1Y2hcbiAgICAvLyhbYXJyYXkxLGFycmF5MiwuLi5dXG4gICAgdmFyIG1hdHJpeFJvd3MgPSBuZXcgQXJyYXkoYXJndW1lbnRzWzBdLmxlbmd0aCk7XG4gICAgZm9yKHZhciBpPTA7aTxhcmd1bWVudHNbMF0ubGVuZ3RoO2krKyl7XG4gICAgICB2YXIgYXJyYXkgPSBbMV1cbiAgICAgIG1hdHJpeFJvd3NbaV09IGFycmF5LmNvbmNhdChhcmd1bWVudHNbMF1baV0pO1xuICAgIH1cbiAgICByZXR1cm4galN0YXQobWF0cml4Um93cyk7XG5cbiAgfSxcblxuICBidWlsZGp4bWF0cml4OiBmdW5jdGlvbiBidWlsZGp4bWF0cml4KGpNYXQpIHtcbiAgICAvL0J1aWxkcyBmcm9tIGpTdGF0IE1hdHJpeFxuICAgIHZhciBwYXNzID0gbmV3IEFycmF5KGpNYXQubGVuZ3RoKVxuICAgIGZvcih2YXIgaT0wO2k8ak1hdC5sZW5ndGg7aSsrKXtcbiAgICAgIHBhc3NbaV0gPSBqTWF0W2ldO1xuICAgIH1cbiAgICByZXR1cm4galN0YXQuYnVpbGRkeG1hdHJpeChwYXNzKTtcblxuICB9LFxuXG4gIGJ1aWxkeW1hdHJpeDogZnVuY3Rpb24gYnVpbGR5bWF0cml4KGFycmF5KXtcbiAgICByZXR1cm4galN0YXQoYXJyYXkpLnRyYW5zcG9zZSgpO1xuICB9LFxuXG4gIGJ1aWxkanltYXRyaXg6IGZ1bmN0aW9uIGJ1aWxkanltYXRyaXgoak1hdCl7XG4gICAgcmV0dXJuIGpNYXQudHJhbnNwb3NlKCk7XG4gIH0sXG5cbiAgbWF0cml4bXVsdDogZnVuY3Rpb24gbWF0cml4bXVsdChBLEIpe1xuICAgIHZhciBpLCBqLCBrLCByZXN1bHQsIHN1bTtcbiAgICBpZiAoQS5jb2xzKCkgPT0gQi5yb3dzKCkpIHtcbiAgICAgIGlmKEIucm93cygpPjEpe1xuICAgICAgICByZXN1bHQgPSBbXTtcbiAgICAgICAgZm9yIChpID0gMDsgaSA8IEEucm93cygpOyBpKyspIHtcbiAgICAgICAgICByZXN1bHRbaV0gPSBbXTtcbiAgICAgICAgICBmb3IgKGogPSAwOyBqIDwgQi5jb2xzKCk7IGorKykge1xuICAgICAgICAgICAgc3VtID0gMDtcbiAgICAgICAgICAgIGZvciAoayA9IDA7IGsgPCBBLmNvbHMoKTsgaysrKSB7XG4gICAgICAgICAgICAgIHN1bSArPSBBLnRvQXJyYXkoKVtpXVtrXSAqIEIudG9BcnJheSgpW2tdW2pdO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgcmVzdWx0W2ldW2pdID0gc3VtO1xuICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4galN0YXQocmVzdWx0KTtcbiAgICAgIH1cbiAgICAgIHJlc3VsdCA9IFtdO1xuICAgICAgZm9yIChpID0gMDsgaSA8IEEucm93cygpOyBpKyspIHtcbiAgICAgICAgcmVzdWx0W2ldID0gW107XG4gICAgICAgIGZvciAoaiA9IDA7IGogPCBCLmNvbHMoKTsgaisrKSB7XG4gICAgICAgICAgc3VtID0gMDtcbiAgICAgICAgICBmb3IgKGsgPSAwOyBrIDwgQS5jb2xzKCk7IGsrKykge1xuICAgICAgICAgICAgc3VtICs9IEEudG9BcnJheSgpW2ldW2tdICogQi50b0FycmF5KClbal07XG4gICAgICAgICAgfVxuICAgICAgICAgIHJlc3VsdFtpXVtqXSA9IHN1bTtcbiAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIGpTdGF0KHJlc3VsdCk7XG4gICAgfVxuICB9LFxuXG4gIC8vcmVncmVzcyBhbmQgcmVncmVzc3QgdG8gYmUgZml4ZWRcblxuICByZWdyZXNzOiBmdW5jdGlvbiByZWdyZXNzKGpNYXRYLGpNYXRZKXtcbiAgICAvL3ByaW50KFwicmVncmVzc2luIVwiKTtcbiAgICAvL3ByaW50KGpNYXRYLnRvQXJyYXkoKSk7XG4gICAgdmFyIGlubmVyaW52ID0galN0YXQueHRyYW5zcHhpbnYoak1hdFgpO1xuICAgIC8vcHJpbnQoaW5uZXJpbnYpO1xuICAgIHZhciB4dHJhbnNwID0gak1hdFgudHJhbnNwb3NlKCk7XG4gICAgdmFyIG5leHQgPSBqU3RhdC5tYXRyaXhtdWx0KGpTdGF0KGlubmVyaW52KSx4dHJhbnNwKTtcbiAgICByZXR1cm4galN0YXQubWF0cml4bXVsdChuZXh0LGpNYXRZKTtcblxuICB9LFxuXG4gIHJlZ3Jlc3N0OiBmdW5jdGlvbiByZWdyZXNzdChqTWF0WCxqTWF0WSxzaWRlcyl7XG4gICAgdmFyIGJldGEgPSBqU3RhdC5yZWdyZXNzKGpNYXRYLGpNYXRZKTtcblxuICAgIHZhciBjb21waWxlID0ge307XG4gICAgY29tcGlsZS5hbm92YSA9IHt9O1xuICAgIHZhciBqTWF0WUJhciA9IGpTdGF0LmpNYXRZQmFyKGpNYXRYLCBiZXRhKTtcbiAgICBjb21waWxlLnlCYXIgPSBqTWF0WUJhcjtcbiAgICB2YXIgeUF2ZXJhZ2UgPSBqTWF0WS5tZWFuKCk7XG4gICAgY29tcGlsZS5hbm92YS5yZXNpZHVhbHMgPSBqU3RhdC5yZXNpZHVhbHMoak1hdFksIGpNYXRZQmFyKTtcblxuICAgIGNvbXBpbGUuYW5vdmEuc3NyID0galN0YXQuc3NyKGpNYXRZQmFyLCB5QXZlcmFnZSk7XG4gICAgY29tcGlsZS5hbm92YS5tc3IgPSBjb21waWxlLmFub3ZhLnNzciAvIChqTWF0WFswXS5sZW5ndGggLSAxKTtcblxuICAgIGNvbXBpbGUuYW5vdmEuc3NlID0galN0YXQuc3NlKGpNYXRZLCBqTWF0WUJhcik7XG4gICAgY29tcGlsZS5hbm92YS5tc2UgPVxuICAgICAgICBjb21waWxlLmFub3ZhLnNzZSAvIChqTWF0WS5sZW5ndGggLSAoak1hdFhbMF0ubGVuZ3RoIC0gMSkgLSAxKTtcblxuICAgIGNvbXBpbGUuYW5vdmEuc3N0ID0galN0YXQuc3N0KGpNYXRZLCB5QXZlcmFnZSk7XG4gICAgY29tcGlsZS5hbm92YS5tc3QgPSBjb21waWxlLmFub3ZhLnNzdCAvIChqTWF0WS5sZW5ndGggLSAxKTtcblxuICAgIGNvbXBpbGUuYW5vdmEucjIgPSAxIC0gKGNvbXBpbGUuYW5vdmEuc3NlIC8gY29tcGlsZS5hbm92YS5zc3QpO1xuICAgIGlmIChjb21waWxlLmFub3ZhLnIyIDwgMCkgY29tcGlsZS5hbm92YS5yMiA9IDA7XG5cbiAgICBjb21waWxlLmFub3ZhLmZyYXRpbyA9IGNvbXBpbGUuYW5vdmEubXNyIC8gY29tcGlsZS5hbm92YS5tc2U7XG4gICAgY29tcGlsZS5hbm92YS5wdmFsdWUgPVxuICAgICAgICBqU3RhdC5hbm92YWZ0ZXN0KGNvbXBpbGUuYW5vdmEuZnJhdGlvLFxuICAgICAgICAgICAgICAgICAgICAgICAgIGpNYXRYWzBdLmxlbmd0aCAtIDEsXG4gICAgICAgICAgICAgICAgICAgICAgICAgak1hdFkubGVuZ3RoIC0gKGpNYXRYWzBdLmxlbmd0aCAtIDEpIC0gMSk7XG5cbiAgICBjb21waWxlLmFub3ZhLnJtc2UgPSBNYXRoLnNxcnQoY29tcGlsZS5hbm92YS5tc2UpO1xuXG4gICAgY29tcGlsZS5hbm92YS5yMmFkaiA9IDEgLSAoY29tcGlsZS5hbm92YS5tc2UgLyBjb21waWxlLmFub3ZhLm1zdCk7XG4gICAgaWYgKGNvbXBpbGUuYW5vdmEucjJhZGogPCAwKSBjb21waWxlLmFub3ZhLnIyYWRqID0gMDtcblxuICAgIGNvbXBpbGUuc3RhdHMgPSBuZXcgQXJyYXkoak1hdFhbMF0ubGVuZ3RoKTtcbiAgICB2YXIgY292YXIgPSBqU3RhdC54dHJhbnNweGludihqTWF0WCk7XG4gICAgdmFyIHNkcywgdHMsIHBzO1xuXG4gICAgZm9yKHZhciBpPTA7IGk8YmV0YS5sZW5ndGg7aSsrKXtcbiAgICAgIHNkcz1NYXRoLnNxcnQoY29tcGlsZS5hbm92YS5tc2UgKiBNYXRoLmFicyhjb3ZhcltpXVtpXSkpO1xuICAgICAgdHM9IE1hdGguYWJzKGJldGFbaV0gLyBzZHMpO1xuICAgICAgcHM9IGpTdGF0LnR0ZXN0KHRzLCBqTWF0WS5sZW5ndGggLSBqTWF0WFswXS5sZW5ndGggLSAxLCBzaWRlcyk7XG5cbiAgICAgIGNvbXBpbGUuc3RhdHNbaV09W2JldGFbaV0sIHNkcywgdHMsIHBzXTtcbiAgICB9XG5cbiAgICBjb21waWxlLnJlZ3Jlc3MgPSBiZXRhO1xuICAgIHJldHVybiBjb21waWxlO1xuICB9LFxuXG4gIHh0cmFuc3B4OiBmdW5jdGlvbiB4dHJhbnNweChqTWF0WCl7XG4gICAgcmV0dXJuIGpTdGF0Lm1hdHJpeG11bHQoak1hdFgudHJhbnNwb3NlKCksak1hdFgpO1xuICB9LFxuXG5cbiAgeHRyYW5zcHhpbnY6IGZ1bmN0aW9uIHh0cmFuc3B4aW52KGpNYXRYKXtcbiAgICB2YXIgaW5uZXIgPSBqU3RhdC5tYXRyaXhtdWx0KGpNYXRYLnRyYW5zcG9zZSgpLGpNYXRYKTtcbiAgICB2YXIgaW5uZXJpbnYgPSBqU3RhdC5pbnYoaW5uZXIpO1xuICAgIHJldHVybiBpbm5lcmludjtcbiAgfSxcblxuICBqTWF0WUJhcjogZnVuY3Rpb24gak1hdFlCYXIoak1hdFgsIGJldGEpIHtcbiAgICB2YXIgeUJhciA9IGpTdGF0Lm1hdHJpeG11bHQoak1hdFgsIGJldGEpO1xuICAgIHJldHVybiBuZXcgalN0YXQoeUJhcik7XG4gIH0sXG5cbiAgcmVzaWR1YWxzOiBmdW5jdGlvbiByZXNpZHVhbHMoak1hdFksIGpNYXRZQmFyKSB7XG4gICAgcmV0dXJuIGpTdGF0Lm1hdHJpeHN1YnRyYWN0KGpNYXRZLCBqTWF0WUJhcik7XG4gIH0sXG5cbiAgc3NyOiBmdW5jdGlvbiBzc3Ioak1hdFlCYXIsIHlBdmVyYWdlKSB7XG4gICAgdmFyIHNzciA9IDA7XG4gICAgZm9yKHZhciBpID0gMDsgaSA8IGpNYXRZQmFyLmxlbmd0aDsgaSsrKSB7XG4gICAgICBzc3IgKz0gTWF0aC5wb3coak1hdFlCYXJbaV0gLSB5QXZlcmFnZSwgMik7XG4gICAgfVxuICAgIHJldHVybiBzc3I7XG4gIH0sXG5cbiAgc3NlOiBmdW5jdGlvbiBzc2Uoak1hdFksIGpNYXRZQmFyKSB7XG4gICAgdmFyIHNzZSA9IDA7XG4gICAgZm9yKHZhciBpID0gMDsgaSA8IGpNYXRZLmxlbmd0aDsgaSsrKSB7XG4gICAgICBzc2UgKz0gTWF0aC5wb3coak1hdFlbaV0gLSBqTWF0WUJhcltpXSwgMik7XG4gICAgfVxuICAgIHJldHVybiBzc2U7XG4gIH0sXG5cbiAgc3N0OiBmdW5jdGlvbiBzc3Qoak1hdFksIHlBdmVyYWdlKSB7XG4gICAgdmFyIHNzdCA9IDA7XG4gICAgZm9yKHZhciBpID0gMDsgaSA8IGpNYXRZLmxlbmd0aDsgaSsrKSB7XG4gICAgICBzc3QgKz0gTWF0aC5wb3coak1hdFlbaV0gLSB5QXZlcmFnZSwgMik7XG4gICAgfVxuICAgIHJldHVybiBzc3Q7XG4gIH0sXG5cbiAgbWF0cml4c3VidHJhY3Q6IGZ1bmN0aW9uIG1hdHJpeHN1YnRyYWN0KEEsQil7XG4gICAgdmFyIGFucyA9IG5ldyBBcnJheShBLmxlbmd0aCk7XG4gICAgZm9yKHZhciBpPTA7aTxBLmxlbmd0aDtpKyspe1xuICAgICAgYW5zW2ldID0gbmV3IEFycmF5KEFbaV0ubGVuZ3RoKTtcbiAgICAgIGZvcih2YXIgaj0wO2o8QVtpXS5sZW5ndGg7aisrKXtcbiAgICAgICAgYW5zW2ldW2pdPUFbaV1bal0tQltpXVtqXTtcbiAgICAgIH1cbiAgICB9XG4gICAgcmV0dXJuIGpTdGF0KGFucyk7XG4gIH1cbn0pO1xuICAvLyBNYWtlIGl0IGNvbXBhdGlibGUgd2l0aCBwcmV2aW91cyB2ZXJzaW9uLlxuICBqU3RhdC5qU3RhdCA9IGpTdGF0O1xuXG4gIHJldHVybiBqU3RhdDtcbn0pO1xuIiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbnZhciBzdHlsZXNJbkRPTSA9IFtdO1xuZnVuY3Rpb24gZ2V0SW5kZXhCeUlkZW50aWZpZXIoaWRlbnRpZmllcikge1xuICB2YXIgcmVzdWx0ID0gLTE7XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgc3R5bGVzSW5ET00ubGVuZ3RoOyBpKyspIHtcbiAgICBpZiAoc3R5bGVzSW5ET01baV0uaWRlbnRpZmllciA9PT0gaWRlbnRpZmllcikge1xuICAgICAgcmVzdWx0ID0gaTtcbiAgICAgIGJyZWFrO1xuICAgIH1cbiAgfVxuICByZXR1cm4gcmVzdWx0O1xufVxuZnVuY3Rpb24gbW9kdWxlc1RvRG9tKGxpc3QsIG9wdGlvbnMpIHtcbiAgdmFyIGlkQ291bnRNYXAgPSB7fTtcbiAgdmFyIGlkZW50aWZpZXJzID0gW107XG4gIGZvciAodmFyIGkgPSAwOyBpIDwgbGlzdC5sZW5ndGg7IGkrKykge1xuICAgIHZhciBpdGVtID0gbGlzdFtpXTtcbiAgICB2YXIgaWQgPSBvcHRpb25zLmJhc2UgPyBpdGVtWzBdICsgb3B0aW9ucy5iYXNlIDogaXRlbVswXTtcbiAgICB2YXIgY291bnQgPSBpZENvdW50TWFwW2lkXSB8fCAwO1xuICAgIHZhciBpZGVudGlmaWVyID0gXCJcIi5jb25jYXQoaWQsIFwiIFwiKS5jb25jYXQoY291bnQpO1xuICAgIGlkQ291bnRNYXBbaWRdID0gY291bnQgKyAxO1xuICAgIHZhciBpbmRleEJ5SWRlbnRpZmllciA9IGdldEluZGV4QnlJZGVudGlmaWVyKGlkZW50aWZpZXIpO1xuICAgIHZhciBvYmogPSB7XG4gICAgICBjc3M6IGl0ZW1bMV0sXG4gICAgICBtZWRpYTogaXRlbVsyXSxcbiAgICAgIHNvdXJjZU1hcDogaXRlbVszXSxcbiAgICAgIHN1cHBvcnRzOiBpdGVtWzRdLFxuICAgICAgbGF5ZXI6IGl0ZW1bNV1cbiAgICB9O1xuICAgIGlmIChpbmRleEJ5SWRlbnRpZmllciAhPT0gLTEpIHtcbiAgICAgIHN0eWxlc0luRE9NW2luZGV4QnlJZGVudGlmaWVyXS5yZWZlcmVuY2VzKys7XG4gICAgICBzdHlsZXNJbkRPTVtpbmRleEJ5SWRlbnRpZmllcl0udXBkYXRlcihvYmopO1xuICAgIH0gZWxzZSB7XG4gICAgICB2YXIgdXBkYXRlciA9IGFkZEVsZW1lbnRTdHlsZShvYmosIG9wdGlvbnMpO1xuICAgICAgb3B0aW9ucy5ieUluZGV4ID0gaTtcbiAgICAgIHN0eWxlc0luRE9NLnNwbGljZShpLCAwLCB7XG4gICAgICAgIGlkZW50aWZpZXI6IGlkZW50aWZpZXIsXG4gICAgICAgIHVwZGF0ZXI6IHVwZGF0ZXIsXG4gICAgICAgIHJlZmVyZW5jZXM6IDFcbiAgICAgIH0pO1xuICAgIH1cbiAgICBpZGVudGlmaWVycy5wdXNoKGlkZW50aWZpZXIpO1xuICB9XG4gIHJldHVybiBpZGVudGlmaWVycztcbn1cbmZ1bmN0aW9uIGFkZEVsZW1lbnRTdHlsZShvYmosIG9wdGlvbnMpIHtcbiAgdmFyIGFwaSA9IG9wdGlvbnMuZG9tQVBJKG9wdGlvbnMpO1xuICBhcGkudXBkYXRlKG9iaik7XG4gIHZhciB1cGRhdGVyID0gZnVuY3Rpb24gdXBkYXRlcihuZXdPYmopIHtcbiAgICBpZiAobmV3T2JqKSB7XG4gICAgICBpZiAobmV3T2JqLmNzcyA9PT0gb2JqLmNzcyAmJiBuZXdPYmoubWVkaWEgPT09IG9iai5tZWRpYSAmJiBuZXdPYmouc291cmNlTWFwID09PSBvYmouc291cmNlTWFwICYmIG5ld09iai5zdXBwb3J0cyA9PT0gb2JqLnN1cHBvcnRzICYmIG5ld09iai5sYXllciA9PT0gb2JqLmxheWVyKSB7XG4gICAgICAgIHJldHVybjtcbiAgICAgIH1cbiAgICAgIGFwaS51cGRhdGUob2JqID0gbmV3T2JqKTtcbiAgICB9IGVsc2Uge1xuICAgICAgYXBpLnJlbW92ZSgpO1xuICAgIH1cbiAgfTtcbiAgcmV0dXJuIHVwZGF0ZXI7XG59XG5tb2R1bGUuZXhwb3J0cyA9IGZ1bmN0aW9uIChsaXN0LCBvcHRpb25zKSB7XG4gIG9wdGlvbnMgPSBvcHRpb25zIHx8IHt9O1xuICBsaXN0ID0gbGlzdCB8fCBbXTtcbiAgdmFyIGxhc3RJZGVudGlmaWVycyA9IG1vZHVsZXNUb0RvbShsaXN0LCBvcHRpb25zKTtcbiAgcmV0dXJuIGZ1bmN0aW9uIHVwZGF0ZShuZXdMaXN0KSB7XG4gICAgbmV3TGlzdCA9IG5ld0xpc3QgfHwgW107XG4gICAgZm9yICh2YXIgaSA9IDA7IGkgPCBsYXN0SWRlbnRpZmllcnMubGVuZ3RoOyBpKyspIHtcbiAgICAgIHZhciBpZGVudGlmaWVyID0gbGFzdElkZW50aWZpZXJzW2ldO1xuICAgICAgdmFyIGluZGV4ID0gZ2V0SW5kZXhCeUlkZW50aWZpZXIoaWRlbnRpZmllcik7XG4gICAgICBzdHlsZXNJbkRPTVtpbmRleF0ucmVmZXJlbmNlcy0tO1xuICAgIH1cbiAgICB2YXIgbmV3TGFzdElkZW50aWZpZXJzID0gbW9kdWxlc1RvRG9tKG5ld0xpc3QsIG9wdGlvbnMpO1xuICAgIGZvciAodmFyIF9pID0gMDsgX2kgPCBsYXN0SWRlbnRpZmllcnMubGVuZ3RoOyBfaSsrKSB7XG4gICAgICB2YXIgX2lkZW50aWZpZXIgPSBsYXN0SWRlbnRpZmllcnNbX2ldO1xuICAgICAgdmFyIF9pbmRleCA9IGdldEluZGV4QnlJZGVudGlmaWVyKF9pZGVudGlmaWVyKTtcbiAgICAgIGlmIChzdHlsZXNJbkRPTVtfaW5kZXhdLnJlZmVyZW5jZXMgPT09IDApIHtcbiAgICAgICAgc3R5bGVzSW5ET01bX2luZGV4XS51cGRhdGVyKCk7XG4gICAgICAgIHN0eWxlc0luRE9NLnNwbGljZShfaW5kZXgsIDEpO1xuICAgICAgfVxuICAgIH1cbiAgICBsYXN0SWRlbnRpZmllcnMgPSBuZXdMYXN0SWRlbnRpZmllcnM7XG4gIH07XG59OyIsIlwidXNlIHN0cmljdFwiO1xuXG52YXIgbWVtbyA9IHt9O1xuXG4vKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAgKi9cbmZ1bmN0aW9uIGdldFRhcmdldCh0YXJnZXQpIHtcbiAgaWYgKHR5cGVvZiBtZW1vW3RhcmdldF0gPT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICB2YXIgc3R5bGVUYXJnZXQgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yKHRhcmdldCk7XG5cbiAgICAvLyBTcGVjaWFsIGNhc2UgdG8gcmV0dXJuIGhlYWQgb2YgaWZyYW1lIGluc3RlYWQgb2YgaWZyYW1lIGl0c2VsZlxuICAgIGlmICh3aW5kb3cuSFRNTElGcmFtZUVsZW1lbnQgJiYgc3R5bGVUYXJnZXQgaW5zdGFuY2VvZiB3aW5kb3cuSFRNTElGcmFtZUVsZW1lbnQpIHtcbiAgICAgIHRyeSB7XG4gICAgICAgIC8vIFRoaXMgd2lsbCB0aHJvdyBhbiBleGNlcHRpb24gaWYgYWNjZXNzIHRvIGlmcmFtZSBpcyBibG9ja2VkXG4gICAgICAgIC8vIGR1ZSB0byBjcm9zcy1vcmlnaW4gcmVzdHJpY3Rpb25zXG4gICAgICAgIHN0eWxlVGFyZ2V0ID0gc3R5bGVUYXJnZXQuY29udGVudERvY3VtZW50LmhlYWQ7XG4gICAgICB9IGNhdGNoIChlKSB7XG4gICAgICAgIC8vIGlzdGFuYnVsIGlnbm9yZSBuZXh0XG4gICAgICAgIHN0eWxlVGFyZ2V0ID0gbnVsbDtcbiAgICAgIH1cbiAgICB9XG4gICAgbWVtb1t0YXJnZXRdID0gc3R5bGVUYXJnZXQ7XG4gIH1cbiAgcmV0dXJuIG1lbW9bdGFyZ2V0XTtcbn1cblxuLyogaXN0YW5idWwgaWdub3JlIG5leHQgICovXG5mdW5jdGlvbiBpbnNlcnRCeVNlbGVjdG9yKGluc2VydCwgc3R5bGUpIHtcbiAgdmFyIHRhcmdldCA9IGdldFRhcmdldChpbnNlcnQpO1xuICBpZiAoIXRhcmdldCkge1xuICAgIHRocm93IG5ldyBFcnJvcihcIkNvdWxkbid0IGZpbmQgYSBzdHlsZSB0YXJnZXQuIFRoaXMgcHJvYmFibHkgbWVhbnMgdGhhdCB0aGUgdmFsdWUgZm9yIHRoZSAnaW5zZXJ0JyBwYXJhbWV0ZXIgaXMgaW52YWxpZC5cIik7XG4gIH1cbiAgdGFyZ2V0LmFwcGVuZENoaWxkKHN0eWxlKTtcbn1cbm1vZHVsZS5leHBvcnRzID0gaW5zZXJ0QnlTZWxlY3RvcjsiLCJcInVzZSBzdHJpY3RcIjtcblxuLyogaXN0YW5idWwgaWdub3JlIG5leHQgICovXG5mdW5jdGlvbiBpbnNlcnRTdHlsZUVsZW1lbnQob3B0aW9ucykge1xuICB2YXIgZWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoXCJzdHlsZVwiKTtcbiAgb3B0aW9ucy5zZXRBdHRyaWJ1dGVzKGVsZW1lbnQsIG9wdGlvbnMuYXR0cmlidXRlcyk7XG4gIG9wdGlvbnMuaW5zZXJ0KGVsZW1lbnQsIG9wdGlvbnMub3B0aW9ucyk7XG4gIHJldHVybiBlbGVtZW50O1xufVxubW9kdWxlLmV4cG9ydHMgPSBpbnNlcnRTdHlsZUVsZW1lbnQ7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbi8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICAqL1xuZnVuY3Rpb24gc2V0QXR0cmlidXRlc1dpdGhvdXRBdHRyaWJ1dGVzKHN0eWxlRWxlbWVudCkge1xuICB2YXIgbm9uY2UgPSB0eXBlb2YgX193ZWJwYWNrX25vbmNlX18gIT09IFwidW5kZWZpbmVkXCIgPyBfX3dlYnBhY2tfbm9uY2VfXyA6IG51bGw7XG4gIGlmIChub25jZSkge1xuICAgIHN0eWxlRWxlbWVudC5zZXRBdHRyaWJ1dGUoXCJub25jZVwiLCBub25jZSk7XG4gIH1cbn1cbm1vZHVsZS5leHBvcnRzID0gc2V0QXR0cmlidXRlc1dpdGhvdXRBdHRyaWJ1dGVzOyIsIlwidXNlIHN0cmljdFwiO1xuXG4vKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAgKi9cbmZ1bmN0aW9uIGFwcGx5KHN0eWxlRWxlbWVudCwgb3B0aW9ucywgb2JqKSB7XG4gIHZhciBjc3MgPSBcIlwiO1xuICBpZiAob2JqLnN1cHBvcnRzKSB7XG4gICAgY3NzICs9IFwiQHN1cHBvcnRzIChcIi5jb25jYXQob2JqLnN1cHBvcnRzLCBcIikge1wiKTtcbiAgfVxuICBpZiAob2JqLm1lZGlhKSB7XG4gICAgY3NzICs9IFwiQG1lZGlhIFwiLmNvbmNhdChvYmoubWVkaWEsIFwiIHtcIik7XG4gIH1cbiAgdmFyIG5lZWRMYXllciA9IHR5cGVvZiBvYmoubGF5ZXIgIT09IFwidW5kZWZpbmVkXCI7XG4gIGlmIChuZWVkTGF5ZXIpIHtcbiAgICBjc3MgKz0gXCJAbGF5ZXJcIi5jb25jYXQob2JqLmxheWVyLmxlbmd0aCA+IDAgPyBcIiBcIi5jb25jYXQob2JqLmxheWVyKSA6IFwiXCIsIFwiIHtcIik7XG4gIH1cbiAgY3NzICs9IG9iai5jc3M7XG4gIGlmIChuZWVkTGF5ZXIpIHtcbiAgICBjc3MgKz0gXCJ9XCI7XG4gIH1cbiAgaWYgKG9iai5tZWRpYSkge1xuICAgIGNzcyArPSBcIn1cIjtcbiAgfVxuICBpZiAob2JqLnN1cHBvcnRzKSB7XG4gICAgY3NzICs9IFwifVwiO1xuICB9XG4gIHZhciBzb3VyY2VNYXAgPSBvYmouc291cmNlTWFwO1xuICBpZiAoc291cmNlTWFwICYmIHR5cGVvZiBidG9hICE9PSBcInVuZGVmaW5lZFwiKSB7XG4gICAgY3NzICs9IFwiXFxuLyojIHNvdXJjZU1hcHBpbmdVUkw9ZGF0YTphcHBsaWNhdGlvbi9qc29uO2Jhc2U2NCxcIi5jb25jYXQoYnRvYSh1bmVzY2FwZShlbmNvZGVVUklDb21wb25lbnQoSlNPTi5zdHJpbmdpZnkoc291cmNlTWFwKSkpKSwgXCIgKi9cIik7XG4gIH1cblxuICAvLyBGb3Igb2xkIElFXG4gIC8qIGlzdGFuYnVsIGlnbm9yZSBpZiAgKi9cbiAgb3B0aW9ucy5zdHlsZVRhZ1RyYW5zZm9ybShjc3MsIHN0eWxlRWxlbWVudCwgb3B0aW9ucy5vcHRpb25zKTtcbn1cbmZ1bmN0aW9uIHJlbW92ZVN0eWxlRWxlbWVudChzdHlsZUVsZW1lbnQpIHtcbiAgLy8gaXN0YW5idWwgaWdub3JlIGlmXG4gIGlmIChzdHlsZUVsZW1lbnQucGFyZW50Tm9kZSA9PT0gbnVsbCkge1xuICAgIHJldHVybiBmYWxzZTtcbiAgfVxuICBzdHlsZUVsZW1lbnQucGFyZW50Tm9kZS5yZW1vdmVDaGlsZChzdHlsZUVsZW1lbnQpO1xufVxuXG4vKiBpc3RhbmJ1bCBpZ25vcmUgbmV4dCAgKi9cbmZ1bmN0aW9uIGRvbUFQSShvcHRpb25zKSB7XG4gIGlmICh0eXBlb2YgZG9jdW1lbnQgPT09IFwidW5kZWZpbmVkXCIpIHtcbiAgICByZXR1cm4ge1xuICAgICAgdXBkYXRlOiBmdW5jdGlvbiB1cGRhdGUoKSB7fSxcbiAgICAgIHJlbW92ZTogZnVuY3Rpb24gcmVtb3ZlKCkge31cbiAgICB9O1xuICB9XG4gIHZhciBzdHlsZUVsZW1lbnQgPSBvcHRpb25zLmluc2VydFN0eWxlRWxlbWVudChvcHRpb25zKTtcbiAgcmV0dXJuIHtcbiAgICB1cGRhdGU6IGZ1bmN0aW9uIHVwZGF0ZShvYmopIHtcbiAgICAgIGFwcGx5KHN0eWxlRWxlbWVudCwgb3B0aW9ucywgb2JqKTtcbiAgICB9LFxuICAgIHJlbW92ZTogZnVuY3Rpb24gcmVtb3ZlKCkge1xuICAgICAgcmVtb3ZlU3R5bGVFbGVtZW50KHN0eWxlRWxlbWVudCk7XG4gICAgfVxuICB9O1xufVxubW9kdWxlLmV4cG9ydHMgPSBkb21BUEk7IiwiXCJ1c2Ugc3RyaWN0XCI7XG5cbi8qIGlzdGFuYnVsIGlnbm9yZSBuZXh0ICAqL1xuZnVuY3Rpb24gc3R5bGVUYWdUcmFuc2Zvcm0oY3NzLCBzdHlsZUVsZW1lbnQpIHtcbiAgaWYgKHN0eWxlRWxlbWVudC5zdHlsZVNoZWV0KSB7XG4gICAgc3R5bGVFbGVtZW50LnN0eWxlU2hlZXQuY3NzVGV4dCA9IGNzcztcbiAgfSBlbHNlIHtcbiAgICB3aGlsZSAoc3R5bGVFbGVtZW50LmZpcnN0Q2hpbGQpIHtcbiAgICAgIHN0eWxlRWxlbWVudC5yZW1vdmVDaGlsZChzdHlsZUVsZW1lbnQuZmlyc3RDaGlsZCk7XG4gICAgfVxuICAgIHN0eWxlRWxlbWVudC5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShjc3MpKTtcbiAgfVxufVxubW9kdWxlLmV4cG9ydHMgPSBzdHlsZVRhZ1RyYW5zZm9ybTsiLCIvLyBUaGUgbW9kdWxlIGNhY2hlXG52YXIgX193ZWJwYWNrX21vZHVsZV9jYWNoZV9fID0ge307XG5cbi8vIFRoZSByZXF1aXJlIGZ1bmN0aW9uXG5mdW5jdGlvbiBfX3dlYnBhY2tfcmVxdWlyZV9fKG1vZHVsZUlkKSB7XG5cdC8vIENoZWNrIGlmIG1vZHVsZSBpcyBpbiBjYWNoZVxuXHR2YXIgY2FjaGVkTW9kdWxlID0gX193ZWJwYWNrX21vZHVsZV9jYWNoZV9fW21vZHVsZUlkXTtcblx0aWYgKGNhY2hlZE1vZHVsZSAhPT0gdW5kZWZpbmVkKSB7XG5cdFx0cmV0dXJuIGNhY2hlZE1vZHVsZS5leHBvcnRzO1xuXHR9XG5cdC8vIENyZWF0ZSBhIG5ldyBtb2R1bGUgKGFuZCBwdXQgaXQgaW50byB0aGUgY2FjaGUpXG5cdHZhciBtb2R1bGUgPSBfX3dlYnBhY2tfbW9kdWxlX2NhY2hlX19bbW9kdWxlSWRdID0ge1xuXHRcdGlkOiBtb2R1bGVJZCxcblx0XHRsb2FkZWQ6IGZhbHNlLFxuXHRcdGV4cG9ydHM6IHt9XG5cdH07XG5cblx0Ly8gRXhlY3V0ZSB0aGUgbW9kdWxlIGZ1bmN0aW9uXG5cdF9fd2VicGFja19tb2R1bGVzX19bbW9kdWxlSWRdLmNhbGwobW9kdWxlLmV4cG9ydHMsIG1vZHVsZSwgbW9kdWxlLmV4cG9ydHMsIF9fd2VicGFja19yZXF1aXJlX18pO1xuXG5cdC8vIEZsYWcgdGhlIG1vZHVsZSBhcyBsb2FkZWRcblx0bW9kdWxlLmxvYWRlZCA9IHRydWU7XG5cblx0Ly8gUmV0dXJuIHRoZSBleHBvcnRzIG9mIHRoZSBtb2R1bGVcblx0cmV0dXJuIG1vZHVsZS5leHBvcnRzO1xufVxuXG4vLyBleHBvc2UgdGhlIG1vZHVsZXMgb2JqZWN0IChfX3dlYnBhY2tfbW9kdWxlc19fKVxuX193ZWJwYWNrX3JlcXVpcmVfXy5tID0gX193ZWJwYWNrX21vZHVsZXNfXztcblxuIiwiX193ZWJwYWNrX3JlcXVpcmVfXy5hbWRPID0ge307IiwiLy8gZ2V0RGVmYXVsdEV4cG9ydCBmdW5jdGlvbiBmb3IgY29tcGF0aWJpbGl0eSB3aXRoIG5vbi1oYXJtb255IG1vZHVsZXNcbl9fd2VicGFja19yZXF1aXJlX18ubiA9IChtb2R1bGUpID0+IHtcblx0dmFyIGdldHRlciA9IG1vZHVsZSAmJiBtb2R1bGUuX19lc01vZHVsZSA/XG5cdFx0KCkgPT4gKG1vZHVsZVsnZGVmYXVsdCddKSA6XG5cdFx0KCkgPT4gKG1vZHVsZSk7XG5cdF9fd2VicGFja19yZXF1aXJlX18uZChnZXR0ZXIsIHsgYTogZ2V0dGVyIH0pO1xuXHRyZXR1cm4gZ2V0dGVyO1xufTsiLCIvLyBkZWZpbmUgZ2V0dGVyIGZ1bmN0aW9ucyBmb3IgaGFybW9ueSBleHBvcnRzXG5fX3dlYnBhY2tfcmVxdWlyZV9fLmQgPSAoZXhwb3J0cywgZGVmaW5pdGlvbikgPT4ge1xuXHRmb3IodmFyIGtleSBpbiBkZWZpbml0aW9uKSB7XG5cdFx0aWYoX193ZWJwYWNrX3JlcXVpcmVfXy5vKGRlZmluaXRpb24sIGtleSkgJiYgIV9fd2VicGFja19yZXF1aXJlX18ubyhleHBvcnRzLCBrZXkpKSB7XG5cdFx0XHRPYmplY3QuZGVmaW5lUHJvcGVydHkoZXhwb3J0cywga2V5LCB7IGVudW1lcmFibGU6IHRydWUsIGdldDogZGVmaW5pdGlvbltrZXldIH0pO1xuXHRcdH1cblx0fVxufTsiLCIvLyBUaGlzIGZ1bmN0aW9uIGFsbG93IHRvIHJlZmVyZW5jZSBhc3luYyBjaHVua3Ncbl9fd2VicGFja19yZXF1aXJlX18udSA9IChjaHVua0lkKSA9PiB7XG5cdC8vIHJldHVybiB1cmwgZm9yIGZpbGVuYW1lcyBiYXNlZCBvbiB0ZW1wbGF0ZVxuXHRyZXR1cm4gXCJcIiArIGNodW5rSWQgKyBcIi5qc1wiO1xufTsiLCJfX3dlYnBhY2tfcmVxdWlyZV9fLmcgPSAoZnVuY3Rpb24oKSB7XG5cdGlmICh0eXBlb2YgZ2xvYmFsVGhpcyA9PT0gJ29iamVjdCcpIHJldHVybiBnbG9iYWxUaGlzO1xuXHR0cnkge1xuXHRcdHJldHVybiB0aGlzIHx8IG5ldyBGdW5jdGlvbigncmV0dXJuIHRoaXMnKSgpO1xuXHR9IGNhdGNoIChlKSB7XG5cdFx0aWYgKHR5cGVvZiB3aW5kb3cgPT09ICdvYmplY3QnKSByZXR1cm4gd2luZG93O1xuXHR9XG59KSgpOyIsIl9fd2VicGFja19yZXF1aXJlX18uaG1kID0gKG1vZHVsZSkgPT4ge1xuXHRtb2R1bGUgPSBPYmplY3QuY3JlYXRlKG1vZHVsZSk7XG5cdGlmICghbW9kdWxlLmNoaWxkcmVuKSBtb2R1bGUuY2hpbGRyZW4gPSBbXTtcblx0T2JqZWN0LmRlZmluZVByb3BlcnR5KG1vZHVsZSwgJ2V4cG9ydHMnLCB7XG5cdFx0ZW51bWVyYWJsZTogdHJ1ZSxcblx0XHRzZXQ6ICgpID0+IHtcblx0XHRcdHRocm93IG5ldyBFcnJvcignRVMgTW9kdWxlcyBtYXkgbm90IGFzc2lnbiBtb2R1bGUuZXhwb3J0cyBvciBleHBvcnRzLiosIFVzZSBFU00gZXhwb3J0IHN5bnRheCwgaW5zdGVhZDogJyArIG1vZHVsZS5pZCk7XG5cdFx0fVxuXHR9KTtcblx0cmV0dXJuIG1vZHVsZTtcbn07IiwiX193ZWJwYWNrX3JlcXVpcmVfXy5vID0gKG9iaiwgcHJvcCkgPT4gKE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChvYmosIHByb3ApKSIsIi8vIGRlZmluZSBfX2VzTW9kdWxlIG9uIGV4cG9ydHNcbl9fd2VicGFja19yZXF1aXJlX18uciA9IChleHBvcnRzKSA9PiB7XG5cdGlmKHR5cGVvZiBTeW1ib2wgIT09ICd1bmRlZmluZWQnICYmIFN5bWJvbC50b1N0cmluZ1RhZykge1xuXHRcdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCBTeW1ib2wudG9TdHJpbmdUYWcsIHsgdmFsdWU6ICdNb2R1bGUnIH0pO1xuXHR9XG5cdE9iamVjdC5kZWZpbmVQcm9wZXJ0eShleHBvcnRzLCAnX19lc01vZHVsZScsIHsgdmFsdWU6IHRydWUgfSk7XG59OyIsInZhciBzY3JpcHRVcmw7XG5pZiAoX193ZWJwYWNrX3JlcXVpcmVfXy5nLmltcG9ydFNjcmlwdHMpIHNjcmlwdFVybCA9IF9fd2VicGFja19yZXF1aXJlX18uZy5sb2NhdGlvbiArIFwiXCI7XG52YXIgZG9jdW1lbnQgPSBfX3dlYnBhY2tfcmVxdWlyZV9fLmcuZG9jdW1lbnQ7XG5pZiAoIXNjcmlwdFVybCAmJiBkb2N1bWVudCkge1xuXHRpZiAoZG9jdW1lbnQuY3VycmVudFNjcmlwdClcblx0XHRzY3JpcHRVcmwgPSBkb2N1bWVudC5jdXJyZW50U2NyaXB0LnNyYztcblx0aWYgKCFzY3JpcHRVcmwpIHtcblx0XHR2YXIgc2NyaXB0cyA9IGRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKFwic2NyaXB0XCIpO1xuXHRcdGlmKHNjcmlwdHMubGVuZ3RoKSB7XG5cdFx0XHR2YXIgaSA9IHNjcmlwdHMubGVuZ3RoIC0gMTtcblx0XHRcdHdoaWxlIChpID4gLTEgJiYgIXNjcmlwdFVybCkgc2NyaXB0VXJsID0gc2NyaXB0c1tpLS1dLnNyYztcblx0XHR9XG5cdH1cbn1cbi8vIFdoZW4gc3VwcG9ydGluZyBicm93c2VycyB3aGVyZSBhbiBhdXRvbWF0aWMgcHVibGljUGF0aCBpcyBub3Qgc3VwcG9ydGVkIHlvdSBtdXN0IHNwZWNpZnkgYW4gb3V0cHV0LnB1YmxpY1BhdGggbWFudWFsbHkgdmlhIGNvbmZpZ3VyYXRpb25cbi8vIG9yIHBhc3MgYW4gZW1wdHkgc3RyaW5nIChcIlwiKSBhbmQgc2V0IHRoZSBfX3dlYnBhY2tfcHVibGljX3BhdGhfXyB2YXJpYWJsZSBmcm9tIHlvdXIgY29kZSB0byB1c2UgeW91ciBvd24gbG9naWMuXG5pZiAoIXNjcmlwdFVybCkgdGhyb3cgbmV3IEVycm9yKFwiQXV0b21hdGljIHB1YmxpY1BhdGggaXMgbm90IHN1cHBvcnRlZCBpbiB0aGlzIGJyb3dzZXJcIik7XG5zY3JpcHRVcmwgPSBzY3JpcHRVcmwucmVwbGFjZSgvIy4qJC8sIFwiXCIpLnJlcGxhY2UoL1xcPy4qJC8sIFwiXCIpLnJlcGxhY2UoL1xcL1teXFwvXSskLywgXCIvXCIpO1xuX193ZWJwYWNrX3JlcXVpcmVfXy5wID0gc2NyaXB0VXJsOyIsIl9fd2VicGFja19yZXF1aXJlX18uYiA9IGRvY3VtZW50LmJhc2VVUkkgfHwgc2VsZi5sb2NhdGlvbi5ocmVmO1xuXG4vLyBvYmplY3QgdG8gc3RvcmUgbG9hZGVkIGFuZCBsb2FkaW5nIGNodW5rc1xuLy8gdW5kZWZpbmVkID0gY2h1bmsgbm90IGxvYWRlZCwgbnVsbCA9IGNodW5rIHByZWxvYWRlZC9wcmVmZXRjaGVkXG4vLyBbcmVzb2x2ZSwgcmVqZWN0LCBQcm9taXNlXSA9IGNodW5rIGxvYWRpbmcsIDAgPSBjaHVuayBsb2FkZWRcbnZhciBpbnN0YWxsZWRDaHVua3MgPSB7XG5cdDM1OTogMFxufTtcblxuLy8gbm8gY2h1bmsgb24gZGVtYW5kIGxvYWRpbmdcblxuLy8gbm8gcHJlZmV0Y2hpbmdcblxuLy8gbm8gcHJlbG9hZGVkXG5cbi8vIG5vIEhNUlxuXG4vLyBubyBITVIgbWFuaWZlc3RcblxuLy8gbm8gb24gY2h1bmtzIGxvYWRlZFxuXG4vLyBubyBqc29ucCBmdW5jdGlvbiIsIl9fd2VicGFja19yZXF1aXJlX18ubmMgPSB1bmRlZmluZWQ7IiwiY29uc3QgX19XRUJQQUNLX05BTUVTUEFDRV9PQkpFQ1RfXyA9IGdyb2s7IiwiY29uc3QgX19XRUJQQUNLX05BTUVTUEFDRV9PQkpFQ1RfXyA9IHVpOyIsImNvbnN0IF9fV0VCUEFDS19OQU1FU1BBQ0VfT0JKRUNUX18gPSBERzsiLCIvLyBSdW50aW1lIHN5c3RlbSBmb3IgZXhwb3J0ZWQgQy9DKystZnVuY3Rpb25zIGNhbGwuXG4vLyBJdCB3YXMgcHJldmlvdXNlbHkgZGV2ZWxvcGVkIGFuZCBkb2VzIE5PVCBwcm92aWRlIGNhbGwgd2FzbS1mdW5jdGlvbnMgaW4gV2ViV29ya2Vycy5cblxuLy8gdHlwZS10by1oZWFwIGNvcnJlc3BvbmRlbmNlXG5jb25zdCBoZWFwTWFwID0ge1wiaTMyXCI6IFwiSEVBUDMyXCIsIC8vIEludDMyQXJyYXlcbiAgICAgICAgICAgICAgICAgXCJmMzJcIjogXCJIRUFQRjMyXCIgLy8gRmxvYXQzMkFycmF5XG4gICAgICAgICAgICAgICAgfTtcblxuLy8gdHlwZSBzaWduYXR1cmUgdG8gdHlwZWQgYXJyYXkgLGFwcFxuY29uc3QgdHlwZU1hcCA9IHtcImkzMlwiOiBJbnQzMkFycmF5LCAvLyBJbnQzMkFycmF5XG4gICAgICAgICAgICAgICAgIFwiZjMyXCI6IEZsb2F0MzJBcnJheSAvLyBGbG9hdDMyQXJyYXlcbiAgICAgICAgICAgICAgICB9OyBcbiBcbi8vIHR5cGUtdG8tc2hpZnQgbWFwXG5jb25zdCBzaGlmdE1hcCA9IHtcImkzMlwiOiAyLCAvLyBJbnQzMkFycmF5XG4gICAgICAgICAgICAgICAgICBcImYzMlwiOiAyIC8vIEZsb2F0MzJBcnJheVxuICAgICAgICAgICAgICAgICB9O1xuXG4vLyB0eXBlLXRvLWNvbHVtbl9jcmVhdG9yIG1hcFxuY29uc3QgdHlwZVRvQ29sdW1uQ3JlYXRvck1hcCA9IHtcImkzMlwiOiBERy5Db2x1bW4uZnJvbUludDMyQXJyYXksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwiZjMyXCI6IERHLkNvbHVtbi5mcm9tRmxvYXQzMkFycmF5fTtcbiBcblxuLy8gQ0xBU1NFUyBUSEFUIEFSRSBVU0VEIEJZIENQUC1XUkFQUEVSXG5cbi8vIHNpbXBsZSBhcmd1bWVudDogYSBudW1iZXIgXG5jbGFzcyBBcmd7XG5cbiAgICBjb25zdHJ1Y3RvcihkYXRhKSB7XG4gICAgICAgIHRoaXMuZGF0YSA9IGRhdGE7ICAgICAgICBcbiAgICB9XG5cbiAgICBjb21wbGVtZW50QXJyT2ZQYXJhbXMoYXJyT2ZQYXJhbXMpIHtcbiAgICAgICAgYXJyT2ZQYXJhbXMucHVzaCh0aGlzLmRhdGEpO1xuICAgIH1cblxuICAgIGNvbXBsZW1lbnRBcnJPZlR5cGVzKGFyck9mVHlwZXMpIHtcbiAgICAgICAgYXJyT2ZUeXBlcy5wdXNoKCdudW1iZXInKTsgICAgICAgIFxuICAgIH1cblxuICAgIGFsbG9jYXRlTWVtb3J5Rm9yQnVmZmVyKG1vZHVsZSkge31cblxuICAgIGlzTWVtb3J5Rm9yQnVmZmVyQWxsb2NhdGVkKCl7XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cblxuICAgIHB1dERhdGFUb0J1ZmZlcihtb2R1bGUpIHt9XG5cbiAgICBnZXREYXRhRnJvbUJ1ZmZlcihtb2R1bGUpIHt9XG5cbiAgICBmcmVlQnVmZmVyKG1vZHVsZSkge31cbn1cblxuLy8gY29sdW1uIGFyZ3VtZW50XG5jbGFzcyBBcmdDb2x1bW4gZXh0ZW5kcyBBcmcge1xuXG4gICAgY29uc3RydWN0b3IoZGF0YSwgdGFyZ2V0VHlwZSwgdG9VcGRhdGUgPSBmYWxzZSkge1xuICAgICAgICBzdXBlcihkYXRhKTtcbiAgICAgICAgdGhpcy50eXBlID0gdGFyZ2V0VHlwZTtcbiAgICAgICAgdGhpcy50b1VwZGF0ZSA9IHRvVXBkYXRlO1xuICAgICAgICB0aGlzLmJ1ZiA9IDA7ICAgIFxuICAgICAgICB0aGlzLm51bU9mUm93cyA9IGRhdGEubGVuZ3RoO1xuICAgIH1cblxuICAgIGNvbXBsZW1lbnRBcnJPZlBhcmFtcyhhcnJPZlBhcmFtcykge1xuICAgICAgICBhcnJPZlBhcmFtcy5wdXNoKHRoaXMuYnVmKTtcbiAgICAgICAgYXJyT2ZQYXJhbXMucHVzaCh0aGlzLm51bU9mUm93cyk7XG4gICAgfVxuXG4gICAgY29tcGxlbWVudEFyck9mVHlwZXMoYXJyT2ZUeXBlcykge1xuICAgICAgICBhcnJPZlR5cGVzLnB1c2goJ251bWJlcicpO1xuICAgICAgICBhcnJPZlR5cGVzLnB1c2goJ251bWJlcicpOyAgICAgICAgXG4gICAgfVxuXG4gICAgYWxsb2NhdGVNZW1vcnlGb3JCdWZmZXIobW9kdWxlKSB7XG4gICAgICAgIHRoaXMuYnVmID0gbW9kdWxlLl9tYWxsb2ModGhpcy5udW1PZlJvd3MgKiB0eXBlTWFwW3RoaXMudHlwZV0uQllURVNfUEVSX0VMRU1FTlQpO1xuICAgIH1cblxuICAgIGlzTWVtb3J5Rm9yQnVmZmVyQWxsb2NhdGVkKCl7XG4gICAgICAgIHJldHVybiAodGhpcy5idWYgIT0gMCk7XG4gICAgfVxuXG4gICAgcHV0RGF0YVRvQnVmZmVyKG1vZHVsZSkge1xuICAgICAgICBpZih0aGlzLmlzTWVtb3J5Rm9yQnVmZmVyQWxsb2NhdGVkKCkpIHtcbiAgICAgICAgICAgIGxldCB0eXBlID0gdGhpcy50eXBlO1xuICAgICAgICAgICAgbGV0IHNoaWZ0ID0gc2hpZnRNYXBbdHlwZV07XG4gICAgICAgICAgICBsZXQgaGVhcCA9IG1vZHVsZVtoZWFwTWFwW3R5cGVdXTsgICAgICAgICAgICBcbiAgICAgICAgICAgIGxldCBhcnJheSA9IG51bGw7XG4gICAgICAgICAgICBsZXQgY29sID0gdGhpcy5kYXRhO1xuXG4gICAgICAgICAgICBpZigoKGNvbC50eXBlID09ICdpbnQnKSAmJiAodHlwZSA9PSAnaTMyJykpIFxuICAgICAgICAgICAgICAgfHwgKChjb2wudHlwZSA9PSAnZG91YmxlJykgJiYgKHR5cGUgPT0gJ2YzMicpKSlcbiAgICAgICAgICAgICAgYXJyYXkgPSBjb2wuZ2V0UmF3RGF0YSgpO1xuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICBhcnJheSA9IG5ldyB0eXBlTWFwW3R5cGVdKGNvbC5nZXRSYXdEYXRhKCkpO1xuXG4gICAgICAgICAgICBpZihhcnJheSkgXG4gICAgICAgICAgICAgIGhlYXAuc2V0KGFycmF5LCB0aGlzLmJ1ZiA+PiBzaGlmdCk7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBnZXREYXRhRnJvbUJ1ZmZlcihtb2R1bGUpIHtcbiAgICAgICAgaWYodGhpcy50b1VwZGF0ZSAmJiB0aGlzLmlzTWVtb3J5Rm9yQnVmZmVyQWxsb2NhdGVkKCkpIHtcbiAgICAgICAgICAgIGxldCB0eXBlID0gdGhpcy50eXBlO1xuICAgICAgICAgICAgbGV0IGhlYXAgPSBtb2R1bGVbaGVhcE1hcFt0eXBlXV07XG4gICAgICAgICAgICBsZXQgYnVmZmVyID0gdGhpcy5idWY7XG4gICAgICAgICAgICBsZXQgYnl0ZXMgPSB0eXBlTWFwW3R5cGVdLkJZVEVTX1BFUl9FTEVNRU5UO1xuICAgICAgICAgICAgbGV0IGFycmF5ID0gdGhpcy5kYXRhLmdldFJhd0RhdGEoKTtcblxuICAgICAgICAgICAgZm9yKGxldCBpID0gMDsgaSA8IHRoaXMubnVtT2ZSb3dzOyBpKyspXG4gICAgICAgICAgICAgICAgYXJyYXlbaV0gPSBoZWFwW2J1ZmZlciAvIGJ5dGVzICsgaV07XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICBmcmVlQnVmZmVyKG1vZHVsZSkge1xuICAgICAgICBpZih0aGlzLmlzTWVtb3J5Rm9yQnVmZmVyQWxsb2NhdGVkKCkpIHtcbiAgICAgICAgICAgbW9kdWxlLl9mcmVlKHRoaXMuYnVmKTtcbiAgICAgICAgICAgdGhpcy5idWYgPSAwO1xuICAgICAgICB9XG4gICAgfVxuXG59XG5cbi8vIG5ldyBjb2x1bW4gYXJndW1lbnQ6IGEgbmV3IGNvbHVtbiBpcyBjcmVhdGVkXG5jbGFzcyBBcmdOZXdDb2x1bW4gZXh0ZW5kcyBBcmdDb2x1bW4ge1xuICAgIGNvbnN0cnVjdG9yKHRhcmdldFR5cGUsIG51bU9mUm93cykge1xuICAgICAgICBzdXBlcihbXSwgdGFyZ2V0VHlwZSwgdHJ1ZSk7XG4gICAgICAgIHRoaXMubnVtT2ZSb3dzID0gbnVtT2ZSb3dzO1xuICAgIH1cblxuICAgIHB1dERhdGFUb0J1ZmZlcihtb2R1bGUpIHt9XG5cbiAgICBnZXREYXRhRnJvbUJ1ZmZlcihtb2R1bGUpIHtcbiAgICAgICAgaWYodGhpcy50b1VwZGF0ZSAmJiB0aGlzLmlzTWVtb3J5Rm9yQnVmZmVyQWxsb2NhdGVkKCkpIHtcbiAgICAgICAgICAgIGxldCB0eXBlID0gdGhpcy50eXBlO1xuICAgICAgICAgICAgbGV0IGhlYXAgPSBtb2R1bGVbaGVhcE1hcFt0eXBlXV07XG4gICAgICAgICAgICBsZXQgYnVmID0gdGhpcy5idWY7XG4gICAgICAgICAgICBcbiAgICAgICAgICAgIGxldCBjb2x1bW5DcmVhdG9yID0gdHlwZVRvQ29sdW1uQ3JlYXRvck1hcFt0eXBlXTsgICBcbiAgICAgICAgICAgIFxuICAgICAgICAgICAgbGV0IGFyciA9IG5ldyB0eXBlTWFwW3R5cGVdKHRoaXMubnVtT2ZSb3dzKTsgICAgICAgICAgICBcblxuICAgICAgICAgICAgZm9yKGxldCBpID0gMDsgaSA8IGFyci5sZW5ndGg7IGkrKylcbiAgICAgICAgICAgICAgICBhcnJbaV0gPSBoZWFwW2J1ZiAvIGFyci5CWVRFU19QRVJfRUxFTUVOVCArIGldO1xuXG4gICAgICAgICAgICB0aGlzLmRhdGEgPSBjb2x1bW5DcmVhdG9yKCduYW1lJywgYXJyKTtcblxuICAgICAgICAgICAgLy9jb25zb2xlLmxvZyhhcnIpO1xuICAgICAgICAgICAgXG4gICAgICAgICAgICAvLyBUaGlzIG1ha2VzIG1pc3Rha2UsIHdoZW4gdGhpcy5udW1PZlJvd3MgPSA1IChUT0RPOiBpbnZlc3RpZ2F0ZSB3aHkpXG4gICAgICAgICAgICAvL3RoaXMuZGF0YSA9IGNvbHVtbkNyZWF0b3IoJ25hbWUnLCBuZXcgdHlwZU1hcFt0eXBlXShoZWFwLmJ1ZmZlciwgdGhpcy5idWYsIHRoaXMubnVtT2ZSb3dzKSk7XG5cbiAgICAgICAgICAgIC8vY29uc29sZS5sb2codGhpcy5kYXRhLmdldFJhd0RhdGEoKSk7XG4gICAgICAgIH1cbiAgICB9XG59XG5cbi8vIGFuIGFycmF5IG9mIGNvbHVtbnMgYXJndW1lbnRcbmNsYXNzIEFyZ0NvbHVtbnMgZXh0ZW5kcyBBcmcge1xuXG4gICAgY29uc3RydWN0b3IoZGF0YSwgdGFyZ2V0VHlwZSwgdG9VcGRhdGUgPSBmYWxzZSkge1xuICAgICAgICBzdXBlcihkYXRhKTtcbiAgICAgICAgdGhpcy50eXBlID0gdGFyZ2V0VHlwZTtcbiAgICAgICAgdGhpcy50b1VwZGF0ZSA9IHRvVXBkYXRlO1xuICAgICAgICB0aGlzLmJ1ZiA9IDA7ICAgIFxuICAgICAgICB0aGlzLm51bU9mQ29sdW1ucyA9IGRhdGEubGVuZ3RoO1xuICAgICAgICB0aGlzLm51bU9mUm93cyA9IGRhdGFbMF0ubGVuZ3RoO1xuICAgIH1cblxuICAgIGNvbXBsZW1lbnRBcnJPZlBhcmFtcyhhcnJPZlBhcmFtcykge1xuICAgICAgICBhcnJPZlBhcmFtcy5wdXNoKHRoaXMuYnVmKTtcbiAgICAgICAgYXJyT2ZQYXJhbXMucHVzaCh0aGlzLm51bU9mUm93cyk7XG4gICAgICAgIGFyck9mUGFyYW1zLnB1c2godGhpcy5udW1PZkNvbHVtbnMpO1xuICAgIH1cblxuICAgIGNvbXBsZW1lbnRBcnJPZlR5cGVzKGFyck9mVHlwZXMpIHtcbiAgICAgICAgYXJyT2ZUeXBlcy5wdXNoKCdudW1iZXInKTtcbiAgICAgICAgYXJyT2ZUeXBlcy5wdXNoKCdudW1iZXInKTtcbiAgICAgICAgYXJyT2ZUeXBlcy5wdXNoKCdudW1iZXInKTsgICAgICAgIFxuICAgIH1cblxuICAgIGFsbG9jYXRlTWVtb3J5Rm9yQnVmZmVyKG1vZHVsZSkge1xuICAgICAgICB0aGlzLmJ1ZiA9IG1vZHVsZS5fbWFsbG9jKHRoaXMubnVtT2ZSb3dzICogdGhpcy5udW1PZkNvbHVtbnMgXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiB0eXBlTWFwW3RoaXMudHlwZV0uQllURVNfUEVSX0VMRU1FTlQpO1xuICAgIH1cblxuICAgIGlzTWVtb3J5Rm9yQnVmZmVyQWxsb2NhdGVkKCl7XG4gICAgICAgIHJldHVybiAodGhpcy5idWYgIT0gMCk7XG4gICAgfVxuXG4gICAgcHV0RGF0YVRvQnVmZmVyKG1vZHVsZSkge1xuICAgICAgICBpZih0aGlzLmlzTWVtb3J5Rm9yQnVmZmVyQWxsb2NhdGVkKCkpIHtcbiAgICAgICAgICAgIGxldCB0eXBlID0gdGhpcy50eXBlO1xuICAgICAgICAgICAgbGV0IHNoaWZ0ID0gc2hpZnRNYXBbdHlwZV07XG4gICAgICAgICAgICBsZXQgaGVhcCA9IG1vZHVsZVtoZWFwTWFwW3R5cGVdXTtcbiAgICAgICAgICAgIGxldCBudW1PZkJ5dGVzID0gdHlwZU1hcFt0eXBlXS5CWVRFU19QRVJfRUxFTUVOVDtcbiAgICAgICAgICAgIFxuICAgICAgICAgICAgLy8gcHV0IGNvbHVtbnMgZGF0YSB0byBidWZmZXJcbiAgICAgICAgICAgIGZvcihsZXQgaSA9IDA7IGkgPCB0aGlzLm51bU9mQ29sdW1uczsgaSsrKSB7XG4gICAgICAgICAgICAgICAgbGV0IGFycmF5ID0gbnVsbDtcbiAgICAgICAgICAgICAgICBsZXQgY29sID0gdGhpcy5kYXRhW2ldO1xuXG4gICAgICAgICAgICAgICAgaWYoKChjb2wudHlwZSA9PSAnaW50JykgJiYgKHR5cGUgPT0gJ2kzMicpKSBcbiAgICAgICAgICAgICAgICAgICB8fCAoKGNvbC50eXBlID09ICdkb3VibGUnKSAmJiAodHlwZSA9PSAnZjMyJykpKVxuICAgICAgICAgICAgICAgICAgICAgYXJyYXkgPSBjb2wuZ2V0UmF3RGF0YSgpO1xuICAgICAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICAgICAgIGFycmF5ID0gbmV3IHR5cGVNYXBbdHlwZV0oY29sLmdldFJhd0RhdGEoKSk7XG5cbiAgICAgICAgICAgICAgICAvLyBjaGVjayBkYXRhIGFycmF5XG4gICAgICAgICAgICAgICAgaWYoYXJyYXkgIT0gbnVsbCkgXG4gICAgICAgICAgICAgICAgICAgIGhlYXAuc2V0KGFycmF5LCAodGhpcy5idWYgKyBpICogdGhpcy5udW1PZlJvd3MgKiBudW1PZkJ5dGVzKSA+PiBzaGlmdCk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH1cblxuICAgIGdldERhdGFGcm9tQnVmZmVyKG1vZHVsZSkge1xuICAgICAgICBpZih0aGlzLnRvVXBkYXRlICYmIHRoaXMuaXNNZW1vcnlGb3JCdWZmZXJBbGxvY2F0ZWQoKSkge1xuICAgICAgICAgICAgbGV0IHR5cGUgPSB0aGlzLnR5cGU7XG4gICAgICAgICAgICBsZXQgaGVhcCA9IG1vZHVsZVtoZWFwTWFwW3R5cGVdXTtcbiAgICAgICAgICAgIGxldCBudW1PZlJvd3MgPSB0aGlzLm51bU9mUm93cztcbiAgICAgICAgICAgIGxldCBudW1PZkNvbHMgPSB0aGlzLm51bU9mQ29sdW1uczsgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgbGV0IGFyciA9IG5ldyB0eXBlTWFwW3R5cGVdKGhlYXAuYnVmZmVyLCB0aGlzLmJ1ZiwgbnVtT2ZSb3dzICogbnVtT2ZDb2xzKTtcbiAgICAgICBcbiAgICAgICAgICAgIGZvcihsZXQgaSA9IDA7IGkgPCBudW1PZkNvbHM7IGkrKykge1xuICAgICAgICAgICAgICAgIGxldCBjb2xEYXRhID0gdGhpcy5kYXRhW2ldLmdldFJhd0RhdGEoKTtcbiAgICAgICAgICAgICAgICBmb3IobGV0IGogPSAwOyBqIDwgbnVtT2ZSb3dzOyBqKyspXG4gICAgICAgICAgICAgICAgICBjb2xEYXRhW2pdID0gYXJyW2ogKyBpICogbnVtT2ZSb3dzXTsgICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgfVxuXG4gICAgZnJlZUJ1ZmZlcihtb2R1bGUpIHtcbiAgICAgICAgaWYodGhpcy5pc01lbW9yeUZvckJ1ZmZlckFsbG9jYXRlZCgpKSB7XG4gICAgICAgICAgIG1vZHVsZS5fZnJlZSh0aGlzLmJ1Zik7XG4gICAgICAgICAgIHRoaXMuYnVmID0gMDtcbiAgICAgICAgfVxuICAgIH1cblxufVxuXG4vLyBhbiBhcnJheSBvZiBuZXcgY29sdW1uczogbmV3IGNvbHVtbnMgYXJlIGNyZWF0ZWRcbmNsYXNzIEFyZ05ld0NvbHVtbnMgZXh0ZW5kcyBBcmdDb2x1bW5zIHtcblxuICAgIGNvbnN0cnVjdG9yKHRhcmdldFR5cGUsIG51bU9mUm93cywgbnVtT2ZDb2x1bW5zKSB7XG4gICAgICAgIHN1cGVyKFtbXV0sIHRhcmdldFR5cGUsIHRydWUpOyAgXG4gICAgICAgIHRoaXMuZGF0YSA9IFtdOyAgICAgICAgXG4gICAgICAgIHRoaXMubnVtT2ZDb2x1bW5zID0gbnVtT2ZDb2x1bW5zO1xuICAgICAgICB0aGlzLm51bU9mUm93cyA9IG51bU9mUm93cztcbiAgICB9XG5cbiAgICBwdXREYXRhVG9CdWZmZXIobW9kdWxlKSB7IH1cblxuICAgIGdldERhdGFGcm9tQnVmZmVyKG1vZHVsZSkge1xuICAgICAgICBpZih0aGlzLnRvVXBkYXRlICYmIHRoaXMuaXNNZW1vcnlGb3JCdWZmZXJBbGxvY2F0ZWQoKSkge1xuICAgICAgICAgICAgbGV0IHR5cGUgPSB0aGlzLnR5cGU7XG4gICAgICAgICAgICBsZXQgaGVhcCA9IG1vZHVsZVtoZWFwTWFwW3R5cGVdXTtcbiAgICAgICAgICAgIGxldCBudW1PZlJvd3MgPSB0aGlzLm51bU9mUm93cztcbiAgICAgICAgICAgIGxldCBudW1PZkNvbHMgPSB0aGlzLm51bU9mQ29sdW1ucztcbiAgICAgICAgICAgIGxldCBudW1PZkJ5dGVzID0gdHlwZU1hcFt0eXBlXS5CWVRFU19QRVJfRUxFTUVOVDsgICAgICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgbGV0IGNvbHVtbkNyZWF0b3IgPSB0eXBlVG9Db2x1bW5DcmVhdG9yTWFwW3R5cGVdO1xuICAgICAgICAgICAgbGV0IGJ1ZiA9IHRoaXMuYnVmO1xuXG4gICAgICAgICAgICBmb3IobGV0IGkgPSAwOyBpIDwgbnVtT2ZDb2xzOyBpKyspIHtcbiAgICAgICAgICAgICAgICBsZXQgYXJyID0gbmV3IHR5cGVNYXBbdHlwZV0obnVtT2ZSb3dzKTtcblxuICAgICAgICAgICAgICAgIGZvcihsZXQgaiA9IDA7IGogPCBudW1PZlJvd3M7IGorKylcbiAgICAgICAgICAgICAgICAgICAgYXJyW2pdID0gaGVhcFtidWYgLyBudW1PZkJ5dGVzICsgaiArIGkgKiBudW1PZlJvd3NdO1xuICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgIHRoaXMuZGF0YS5wdXNoKGNvbHVtbkNyZWF0b3IoKGkgKyAxKS50b1N0cmluZygpLCBhcnIpKTtcbiAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgLy8gY3JlYXRlIGNvbHVtbnM6IGhlcmUsIG1heSBiZSBhIHByb2JsZW0gd2hlbiBudW1PZlJvd3MgPSA1ICAgICAgICAgICAgXG4gICAgICAgICAgICAvKmZvcihsZXQgaSA9IDA7IGkgPCBudW1PZkNvbHM7IGkrKylcbiAgICAgICAgICAgICAgICB0aGlzLmRhdGEucHVzaChjb2x1bW5DcmVhdG9yKChpICsgMSkudG9TdHJpbmcoKSwgbmV3IHR5cGVNYXBbdHlwZV0oaGVhcC5idWZmZXIsIFxuICAgICAgICAgICAgICAgICAgICB0aGlzLmJ1ZiArIGkgKiBudW1PZlJvd3MgKiBudW1PZkJ5dGVzLCBudW1PZlJvd3MpKSk7Ki9cbiAgICAgICAgfVxuICAgIH1cbn1cblxuLy8gYSB3cmFwcGVyIGZvciBleHBvcnRlZCBDL0MrKy1mdW5jdGlvbiBjYWxsXG5mdW5jdGlvbiBjcHBGdW5jV3JhcHBlcihtb2R1bGUsIGNGdW5jTmFtZSwgcmV0dXJuVHlwZSwgYXJncylcbntcbiAgICBsZXQgcmVzdWx0O1xuXG4gICAgLy8gYWxsb2NhdGUgbWVtb3J5IGZvciBidWZmZXJzXG4gICAgZm9yKGxldCBhcmcgb2YgYXJncykgICAgICAgICBcbiAgICAgICAgYXJnLmFsbG9jYXRlTWVtb3J5Rm9yQnVmZmVyKG1vZHVsZSk7XG4gICAgXG4gICAgbGV0IGlzRW5vdWdoT2ZNZW1vcnlBbGxvY2F0ZWQgPSB0cnVlO1xuXG4gICAgLy8gY2hlY2sgbWVtb3J5IGFsbG9jYXRpb25cbiAgICBmb3IobGV0IGFyZyBvZiBhcmdzKVxuICAgICAgICBpc0Vub3VnaE9mTWVtb3J5QWxsb2NhdGVkICY9IGFyZy5pc01lbW9yeUZvckJ1ZmZlckFsbG9jYXRlZCgpOyAgXG4gICAgXG4gICAgLy8gcnVuIGV4cG9ydGVkIGZ1bmN0aW9uIGlmIGVub3VnaCBvZiBtZW1vcnkgaXMgYWxsb2NhdGVkXG4gICAgaWYoaXNFbm91Z2hPZk1lbW9yeUFsbG9jYXRlZCkge1xuXG4gICAgICAgIGxldCBwYXJhbXMgPSBbXTsgLy8gYXJndW1lbnRzIHRoYXQgYXJlIHB1dCB0byB0aGUgZXhwb3J0ZWQgZnVuY3Rpb25cbiAgICAgICAgbGV0IHR5cGVzID0gW107IC8vIHRoZWlyIHR5cGVzXG5cbiAgICAgICAgLy8gcHJlcGFyZSBkYXRhIHRoYXQgaXMgcHV0IHRvIGV4cG9ydGVkIGZ1bmN0aW9uXG4gICAgICAgIGZvcihsZXQgYXJnIG9mIGFyZ3MpIHtcbiAgICAgICAgICAgIGFyZy5jb21wbGVtZW50QXJyT2ZQYXJhbXMocGFyYW1zKTtcbiAgICAgICAgICAgIGFyZy5jb21wbGVtZW50QXJyT2ZUeXBlcyh0eXBlcyk7XG4gICAgICAgICAgICBhcmcucHV0RGF0YVRvQnVmZmVyKG1vZHVsZSk7XG4gICAgICAgIH1cblxuICAgICAgICBsZXQgZXh0ZW5kZWRUeXBlT2ZSZXR1cm4gPSAocmV0dXJuVHlwZSA9PSAnbnVtJykgPyAnbnVtYmVyJyA6IG51bGw7ICAgXG4gICAgICAgIFxuICAgICAgICAvLyBjYWxsIGV4cG9ydGVkIGZ1bmN0aW9uXG4gICAgICAgIGlmKGV4dGVuZGVkVHlwZU9mUmV0dXJuKVxuICAgICAgICAgICAgcmVzdWx0ID0gbW9kdWxlLmNjYWxsKGNGdW5jTmFtZSwgZXh0ZW5kZWRUeXBlT2ZSZXR1cm4sIHR5cGVzLCBwYXJhbXMpO1xuICAgICAgICBlbHNlXG4gICAgICAgICAgICByZXN1bHQgPSBtb2R1bGUuY2NhbGwoY0Z1bmNOYW1lLCBleHRlbmRlZFR5cGVPZlJldHVybiwgdHlwZXMsIHBhcmFtcyk7XG4gICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAvLyB1cGRhdGUgYW5kIGdldCBkYXRhIGZyb20gYnVmZmVycyBpZiByZXF1aXJlZFxuICAgICAgICBmb3IobGV0IGFyZyBvZiBhcmdzKVxuICAgICAgICAgICAgYXJnLmdldERhdGFGcm9tQnVmZmVyKG1vZHVsZSk7ICAgICAgIFxuICAgIH1cblxuICAgIC8vIGNsZWFyIGJ1ZmZlcnNcbiAgICBmb3IobGV0IGFyZyBvZiBhcmdzKSAgICAgICAgIFxuICAgICAgICBhcmcuZnJlZUJ1ZmZlcihtb2R1bGUpO1xuXG4gICAgaWYocmVzdWx0ICE9IHVuZGVmaW5lZClcbiAgICAgICAgcmV0dXJuIHJlc3VsdDsgICAgXG59IC8vIGNwcEZ1bmNXcmFwcGVyXG5cblxuLy8gQSBMQVlFUiBCRVRXRUVOIEpTIEFORCBDUFAtV1JBUFBFUlxuXG4vLyBQYXJhbWV0ZXJzIGNyZWF0b3JcbmxldCBQYXJhbSA9IHtcbiAgICBpbnRDb2x1bW4gKGNvbHVtbikge1xuICAgICAgICByZXR1cm4gbmV3IEFyZ0NvbHVtbihjb2x1bW4sICdpMzInKTtcbiAgICB9LFxuICAgIFxuICAgIG5ld0ludENvbHVtbiAobnVtT2ZSb3dzKSB7XG4gICAgICAgIHJldHVybiBuZXcgQXJnTmV3Q29sdW1uKCdpMzInLCBudW1PZlJvd3MpO1xuICAgIH0sXG5cbiAgICBpbnRDb2x1bW5zKGNvbHVtbnMpe1xuICAgICAgICByZXR1cm4gbmV3IEFyZ0NvbHVtbnMoY29sdW1ucy50b0xpc3QoKSwgJ2kzMicpO1xuICAgIH0sXG5cbiAgICBuZXdJbnRDb2x1bW5zKG51bU9mUm93cywgbnVtT2ZDb2x1bW5zKSB7XG4gICAgICAgIHJldHVybiBuZXcgQXJnTmV3Q29sdW1ucygnaTMyJywgbnVtT2ZSb3dzLCBudW1PZkNvbHVtbnMpO1xuICAgIH0sXG5cbiAgICBmbG9hdENvbHVtbiAoY29sdW1uKSB7XG4gICAgICAgIHJldHVybiBuZXcgQXJnQ29sdW1uKGNvbHVtbiwgJ2YzMicpO1xuICAgIH0sXG5cbiAgICBuZXdGbG9hdENvbHVtbiAobnVtT2ZSb3dzKSB7XG4gICAgICAgIHJldHVybiBuZXcgQXJnTmV3Q29sdW1uKCdmMzInLCBudW1PZlJvd3MpO1xuICAgIH0sXG5cbiAgICBmbG9hdENvbHVtbnMoY29sdW1ucyl7XG4gICAgICAgIHJldHVybiBuZXcgQXJnQ29sdW1ucyhjb2x1bW5zLnRvTGlzdCgpLCAnZjMyJyk7XG4gICAgfSxcblxuICAgIG5ld0Zsb2F0Q29sdW1ucyhudW1PZlJvd3MsIG51bU9mQ29sdW1ucykge1xuICAgICAgICByZXR1cm4gbmV3IEFyZ05ld0NvbHVtbnMoJ2YzMicsIG51bU9mUm93cywgbnVtT2ZDb2x1bW5zKTtcbiAgICB9LFxuXG4gICAgaW50KG51bWJlcikge1xuICAgICAgICByZXR1cm4gbmV3IEFyZyhudW1iZXIpO1xuICAgIH0sXG5cbiAgICBudW0obnVtYmVyKSB7XG4gICAgICAgIHJldHVybiBuZXcgQXJnKG51bWJlcik7XG4gICAgfVxufTtcblxuLy8gUmV0dXJuIHZhbHVlIGNyZWF0b3JcbmxldCBSZXR1cm4gPSB7XG4gICAgdGFibGVGcm9tQ29sdW1ucyhhcmdDb2x1bW5zKSB7XG4gICAgICAgIHJldHVybiBERy5EYXRhRnJhbWUuZnJvbUNvbHVtbnMoYXJnQ29sdW1ucy5kYXRhKTtcbiAgICB9LFxuXG4gICAgbnVtKG51bWJlcikge1xuICAgICAgICByZXR1cm4gbnVtYmVyO1xuICAgIH0sXG5cbiAgICBpbnQobnVtYmVyKSB7XG4gICAgICAgIHJldHVybiBudW1iZXI7XG4gICAgfSxcblxuICAgIGRvdWJsZShudW1iZXIpIHtcbiAgICAgICAgcmV0dXJuIG51bWJlcjtcbiAgICB9LFxuXG4gICAgY29sdW1uKGFyZ0NvbHVtbikge1xuICAgICAgICByZXR1cm4gYXJnQ29sdW1uLmRhdGE7XG4gICAgfVxufTtcblxuLy8gVGhlIG1haW4gdG9vbCB0aGF0IGNvbWJpbmVzIGFsbCB0b2dldGhlclxuZXhwb3J0IGZ1bmN0aW9uIGNhbGxXYXNtKG1vZHVsZSwgZnVuY05hbWUsIGlucHV0cykge1xuICAgIC8vIGdldCBzcGVjaWZpY2F0aW9uIG9mIGV4cG9ydGVkIEMvQysrLWZ1bmN0aW9uXG4gICAgbGV0IGZ1bmNTcGVjaWZpY2F0aW9uID0gbW9kdWxlW2Z1bmNOYW1lXTtcblxuICAgIC8vIGdldCBhcmd1bW5ldHNcbiAgICBsZXQgYXJncyA9IGZ1bmNTcGVjaWZpY2F0aW9uLmFyZ3VtZW50czsgXG5cbiAgICAvLyBhcnJheSBvZiBhcmd1bWVudHMgdGhhdCBmdXJ0aGVyIGFyZSB1c2VkIGJ5IGNwcC13cmFwcGVyXG4gICAgbGV0IGNwcEZ1bmNJbnB1dCA9IFtdO1xuXG4gICAgLy8gY29tcGxldGUgYW4gaW5wdXQgZm9yIGNwcFxuICAgIGxldCBpID0gMDtcbiAgICBmb3IobGV0IGtleSBpbiBhcmdzKXtcbiAgICAgICAgbGV0IGFyZyA9IGFyZ3Nba2V5XTsgXG4gICAgICAgIFxuICAgICAgICAvLyBza2lwIGF1eGlsaXJ5IGVsZW1lbnRcbiAgICAgICAgaWYoa2V5ID09ICdfY2FsbFJlc3VsdCcpICAgICAgICAgICAgIFxuICAgICAgICAgICAgY29udGludWU7XG5cbiAgICAgICAgLy8gY3JlYXRlIGFuIGFyZ3VtZW50XG4gICAgICAgIHN3aXRjaChhcmcudHlwZSl7XG4gICAgICAgICAgICBjYXNlICdmbG9hdENvbHVtbnMnOlxuICAgICAgICAgICAgY2FzZSAnaW50JzpcbiAgICAgICAgICAgIGNhc2UgJ251bSc6XG4gICAgICAgICAgICBjYXNlICdmbG9hdENvbHVtbic6XG4gICAgICAgICAgICBjYXNlICdpbnRDb2x1bW4nOlxuICAgICAgICAgICAgY2FzZSAnaW50Q29sdW1ucyc6XG4gICAgICAgICAgICAgICAgYXJnLmRhdGEgPSBQYXJhbVthcmcudHlwZV0oaW5wdXRzW2ldKTtcbiAgICAgICAgICAgICAgICBpKys7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICduZXdGbG9hdENvbHVtbnMnOlxuICAgICAgICAgICAgY2FzZSAnbmV3SW50Q29sdW1ucyc6XG4gICAgICAgICAgICAgICAgbGV0IHZhbDEgPSBhcmdzWyBhcmdbJ251bU9mUm93cyddWydyZWYnXSBdLmRhdGFbYXJnWydudW1PZlJvd3MnXVsndmFsdWUnXV07XG4gICAgICAgICAgICAgICAgbGV0IHZhbDIgPSBhcmdzWyBhcmdbJ251bU9mQ29sdW1ucyddWydyZWYnXSBdLmRhdGFbYXJnWydudW1PZkNvbHVtbnMnXVsndmFsdWUnXV07XG4gICAgICAgICAgICAgICAgYXJnLmRhdGEgPSBQYXJhbVthcmcudHlwZV0odmFsMSwgdmFsMik7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlICduZXdGbG9hdENvbHVtbic6XG4gICAgICAgICAgICBjYXNlICduZXdJbnRDb2x1bW4nOlxuICAgICAgICAgICAgICAgIGxldCB2YWwgPSBhcmdzWyBhcmdbJ251bU9mUm93cyddWydyZWYnXSBdLmRhdGFbYXJnWydudW1PZlJvd3MnXVsndmFsdWUnXV07XG4gICAgICAgICAgICAgICAgYXJnLmRhdGEgPSBQYXJhbVthcmcudHlwZV0odmFsKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH0gLy8gc3dpdGNoXG5cbiAgICAgICAgY3BwRnVuY0lucHV0LnB1c2goYXJnc1trZXldLmRhdGEpO1xuXG4gICAgfSAvLyBmb3Iga2V5ICAgIFxuXG4gICAgLy8gQ0FMTCBFWFBPUlRFRCBDUFAtRlVOQ1RJT05cbiAgICBsZXQgY2FsbFJlc3VsdCA9IGNwcEZ1bmNXcmFwcGVyKG1vZHVsZSwgZnVuY05hbWUsICdudW0nLCBjcHBGdW5jSW5wdXQpO1xuXG4gICAgLy8gc3RvcmUgcmVzdWx0IHRoYXQgaXMgcmV0dXJuZWQgYnkgZXhwb3J0ZWQgY3BwLWZ1bmN0aW9uXG4gICAgYXJncy5fY2FsbFJlc3VsdCA9IFBhcmFtLm51bShjYWxsUmVzdWx0KTtcblxuICAgIC8vIGNyZWF0ZSBvdXRwdXRcbiAgICBsZXQgb3V0cHV0ID0gZnVuY1NwZWNpZmljYXRpb24ub3V0cHV0O1xuXG4gICAgLy8gaWYgYSBzaW5nbGUgb2JqZWN0IG11c3QgYmUgcmV0dXJuZWRcbiAgICBpZihvdXRwdXRbJ3R5cGUnXSAhPSAnb2JqZWN0cycpXG4gICAgICByZXR1cm4gUmV0dXJuW291dHB1dFsndHlwZSddXShhcmdzW291dHB1dFsnc291cmNlJ11dLmRhdGEpO1xuXG4gICAgbGV0IGFycmF5VG9SZXR1cm4gPSBbXTtcblxuICAgIC8vIHB1c2ggZGF0YSBvZiB0aGUgcmVxdWlyZWQgYXJndW1lbnRzXG4gICAgZm9yKGxldCBuYW1lIG9mIG91dHB1dFsnc291cmNlJ10pXG4gICAgICBhcnJheVRvUmV0dXJuLnB1c2goYXJnc1tuYW1lXS5kYXRhLmRhdGEpO1xuXG4gICAgcmV0dXJuIGFycmF5VG9SZXR1cm47XG4gIH0gLy8gY2FsbFdhc20iLCIvLyBVdGlsaXRpZXMgZm9yIGNhbGxpbmcgd2FzbS1mdW5jdGlvbnMgdmlhIHdlYndvcmtlci5cblxuLy8gV2UgdXNlIGFuIGFwcHJvYWNoIHRoYXQgaXMgd2VsbCBkZXNjcmliZWQgaGVyZTpcbi8vIGh0dHBzOi8vYmVjb21pbmdodW1hbi5haS9wYXNzaW5nLWFuZC1yZXR1cm5pbmctd2ViYXNzZW1ibHktYXJyYXktcGFyYW1ldGVycy1hMGY1NzJjNjVkOTdcbi8vIEl0IGhhcyBiZWVuIG1vZGlmaWVkIGZvciB1c2FnZSBpbiBEQVRBR1JPSy5cblxuLy8gQ29uc3RhbnRzIGZvciB3YXNtLWZ1bmN0aW9ucyBpbiB3ZWJ3b3JrZXJzIHJ1bnRpbWUgc3lzdGVtXG5jb25zdCBUWVBFID0gJ3R5cGUnO1xuY29uc3QgTlVNX1RZUEUgPSAnbnVtJztcbmNvbnN0IEZMT0FUX0NPTFVNTl9UWVBFID0gJ2Zsb2F0Q29sdW1uJztcbmNvbnN0IElOVF9DT0xVTU5fVFlQRSA9ICdpbnRDb2x1bW4nO1xuY29uc3QgRkxPQVRfQ09MVU1OU19UWVBFID0gJ2Zsb2F0Q29sdW1ucyc7XG5jb25zdCBORVdfRkxPQVRfQ09MVU1OU19UWVBFID0gJ25ld0Zsb2F0Q29sdW1ucyc7XG5jb25zdCBJTlRfQ09MVU1OU19UWVBFID0gJ2ludENvbHVtbnMnO1xuY29uc3QgTkVXX0lOVF9DT0xVTU5TX1RZUEUgPSAnbmV3SW50Q29sdW1ucyc7XG5jb25zdCBORVdfRkxPQVRfQ09MVU1OX1RZUEUgPSAnbmV3RmxvYXRDb2x1bW4nO1xuY29uc3QgTkVXX0lOVF9DT0xVTU5fVFlQRSA9ICduZXdJbnRDb2x1bW4nO1xuY29uc3QgQ09MVU1OID0gJ2NvbHVtbic7XG5jb25zdCBDQUxMX1JFU1VMVCA9ICdfY2FsbFJlc3VsdCc7XG5jb25zdCBOVU1fT0ZfUk9XUyA9ICdudW1PZlJvd3MnO1xuY29uc3QgTlVNX09GX0NPTFVNTlMgPSAnbnVtT2ZDb2x1bW5zJztcbmNvbnN0IFJFRiA9ICdyZWYnO1xuY29uc3QgVkFMVUUgPSAndmFsdWUnO1xuY29uc3QgVEFCTEVfT0ZfQ09MVU1OUyA9ICd0YWJsZUZyb21Db2x1bW5zJztcbmNvbnN0IE9CSkVDVFMgPSAnb2JqZWN0cyc7XG5jb25zdCBJTlRfVFlQRSA9ICdpbnQnO1xuY29uc3QgRE9VQkxFX1RZUEUgPSAnZG91YmxlJztcbmNvbnN0IE5VTUJFUiA9ICdudW1iZXInO1xuXG4vLyBUeXBlLXRvLWhlYXAgY29ycmVzcG9uZGVuY2UuXG4vLyBJdCBpcyByZXF1aXJlZCBmb3IgSlMtbW9kdWxlIGdlbmVyYXRlZCBieSBFbXNjcmlwdGVuLFxuLy8gYW5kIGl0IGlzIHVzZWQsIHdoZW4gcGFzc2luZyBhcnJheSBkYXRhIHRvL2Zyb20gd2FzbS1mdW5jdGlvbnMuXG4vLyBNb3JlIGluZm8gY2FuIGJlIGZvdW5kIGF0IHRoZSBmb2xsb3dpbmcgbGluazpcbi8vIGh0dHBzOi8vYmVjb21pbmdodW1hbi5haS9wYXNzaW5nLWFuZC1yZXR1cm5pbmctd2ViYXNzZW1ibHktYXJyYXktcGFyYW1ldGVycy1hMGY1NzJjNjVkOTdcbmNvbnN0IGhlYXBNYXAgPSB7XG4gICAgICAgICAgICAgICAgICdpbnRDb2x1bW4nOiBcIkhFQVAzMlwiLFxuICAgICAgICAgICAgICAgICAnZmxvYXRDb2x1bW4nOiBcIkhFQVBGMzJcIixcbiAgICAgICAgICAgICAgICAgJ2Zsb2F0Q29sdW1ucyc6IFwiSEVBUEYzMlwiLFxuICAgICAgICAgICAgICAgICAnbmV3RmxvYXRDb2x1bW5zJzogXCJIRUFQRjMyXCIsXG4gICAgICAgICAgICAgICAgICdpbnRDb2x1bW5zJzogXCJIRUFQMzJcIixcbiAgICAgICAgICAgICAgICAgJ25ld0ludENvbHVtbnMnOiBcIkhFQVAzMlwiLFxuICAgICAgICAgICAgICAgICAnbmV3RmxvYXRDb2x1bW4nOiBcIkhFQVBGMzJcIixcbiAgICAgICAgICAgICAgICAgJ25ld0ludENvbHVtbic6IFwiSEVBUDMyXCJcbiAgICAgICAgICAgICAgICB9O1xuXG4vLyBUeXBlIHNpZ25hdHVyZSB0byB0eXBlZCBhcnJheSBtYXAuXG4vLyBJdCBpcyB1c2VkLCB3aGVuIG1hbmlwdWxhdGluZyBjb2x1bW4ocykuXG5jb25zdCB0eXBlTWFwID0ge1xuICAgICAgICAgICAgICAgICAnaW50Q29sdW1uJzogSW50MzJBcnJheSxcbiAgICAgICAgICAgICAgICAgJ2Zsb2F0Q29sdW1uJzogRmxvYXQzMkFycmF5LFxuICAgICAgICAgICAgICAgICAnZmxvYXRDb2x1bW5zJzogRmxvYXQzMkFycmF5LFxuICAgICAgICAgICAgICAgICAnbmV3RmxvYXRDb2x1bW5zJzogRmxvYXQzMkFycmF5LFxuICAgICAgICAgICAgICAgICAnaW50Q29sdW1ucyc6IEludDMyQXJyYXksICBcbiAgICAgICAgICAgICAgICAgJ25ld0ludENvbHVtbnMnOiBJbnQzMkFycmF5LFxuICAgICAgICAgICAgICAgICAnbmV3RmxvYXRDb2x1bW4nOiBGbG9hdDMyQXJyYXksXG4gICAgICAgICAgICAgICAgICduZXdJbnRDb2x1bW4nOiBJbnQzMkFycmF5XG4gICAgICAgICAgICAgICAgfTsgXG5cbi8vIFR5cGUtdG8tc2hpZnQgbWFwLlxuLy8gSXQgaXMgdXNlZCwgd2hlbiBwYXNzaW5nIGFycmF5IHRvL2Zyb20gd2FzbS1mdW5jdGlvbnMuXG4vLyBNb3JlIGluZm8gY2FuIGJlIGZvdW5kIGF0IHRoZSBmb2xsb3dpbmcgbGluazpcbi8vIGh0dHBzOi8vYmVjb21pbmdodW1hbi5haS9wYXNzaW5nLWFuZC1yZXR1cm5pbmctd2ViYXNzZW1ibHktYXJyYXktcGFyYW1ldGVycy1hMGY1NzJjNjVkOTcgXG5jb25zdCBzaGlmdE1hcCA9IHsnaW50Q29sdW1uJzogMiwgXG4gICAgICAgICAgICAgICAgICAnZmxvYXRDb2x1bW4nOiAyLCBcbiAgICAgICAgICAgICAgICAgICdmbG9hdENvbHVtbnMnOiAyLCAgXG4gICAgICAgICAgICAgICAgICAnbmV3RmxvYXRDb2x1bW5zJzogMiwgXG4gICAgICAgICAgICAgICAgICAnaW50Q29sdW1ucyc6IDIsICBcbiAgICAgICAgICAgICAgICAgICduZXdJbnRDb2x1bW5zJzogMixcbiAgICAgICAgICAgICAgICAgICduZXdGbG9hdENvbHVtbic6IDIsXG4gICAgICAgICAgICAgICAgICAnbmV3SW50Q29sdW1uJzogMlxuICAgICAgICAgICAgICAgICB9OyAgICAgICAgIFxuXG4vLyBHZXQgaW5wdXQgZm9yIEMrKy1mdW5jdGlvbi5cbi8vIFRoaXMgZnVuY3Rpb24gdGFrZXMgc3BlY2lmaWNhdGlvbiBvZiBhcmd1bWVudHMgKGFyZ3NTcGVjaWZpY2F0aW9uKSAmIGlucHV0IGRhdGEgKGlucHV0VmFscylcbi8vIGFuZCByZXR1cm5zIGlucHV0IHRoYXQgd2lsbCBiZSBmdXJ0aGVyIHVzZWQgaW4gY3BwL3dhc20tZnVuY3Rpb24uXG5leHBvcnQgZnVuY3Rpb24gZ2V0Q3BwSW5wdXQoYXJnc1NwZWNpZmljYXRpb24sIGlucHV0VmFscykge1xuICAgIGxldCBjcHBGdW5jSW5wdXQgPSBbXTtcbiAgICBsZXQgcmVmO1xuXG4gICAgLy8gY29tcGxldGUgYW4gaW5wdXQgZm9yIGNwcFxuICAgIGxldCBpID0gMDtcbiAgICBmb3IoY29uc3Qga2V5IGluIGFyZ3NTcGVjaWZpY2F0aW9uKSB7XG4gICAgICAgIGNvbnN0IGFyZyA9IGFyZ3NTcGVjaWZpY2F0aW9uW2tleV07IFxuICAgICAgICBjb25zdCB0eXBlID0gYXJnLnR5cGU7XG4gICAgICAgIFxuICAgICAgICAvLyBza2lwIGF1eGlsaXJ5IGVsZW1lbnRcbiAgICAgICAgaWYoa2V5ID09PSBDQUxMX1JFU1VMVCkgICAgICAgICAgICAgXG4gICAgICAgICAgICBjb250aW51ZTtcblxuICAgICAgICAvLyBoZXJlLCB3ZSBjb25zaWRlciBlYWNoIHR5cGUgb2YgaW5wdXRcbiAgICAgICAgc3dpdGNoKHR5cGUpIHsgICAgICAgICAgIFxuIFxuICAgICAgICAgICAgLy8gbnVtYmVyc1xuICAgICAgICAgICAgY2FzZSBOVU1fVFlQRTogICAgICAgICAgICAgICAgXG4gICAgICAgICAgICBjYXNlIElOVF9UWVBFOlxuICAgICAgICAgICAgY2FzZSBET1VCTEVfVFlQRTpcbiAgICAgICAgICAgICAgICBhcmcuZGF0YSA9IGlucHV0VmFsc1tpXTtcbiAgICAgICAgICAgICAgICBpKys7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgIC8vIGNvbHVtblxuICAgICAgICAgICAgY2FzZSBJTlRfQ09MVU1OX1RZUEU6XG4gICAgICAgICAgICBjYXNlIEZMT0FUX0NPTFVNTl9UWVBFOlxuXG4gICAgICAgICAgICAgICAgbGV0IGFycmF5O1xuXG4gICAgICAgICAgICAgICAgLy8gdGhpcyBpcyBPSyBpZiB0eXBlIG9mIGNvbHVtbiBhbmQgdGFyZ2V0IHR5cGUgY29pbnNpZGVcbiAgICAgICAgICAgICAgICAvL2FycmF5ID0gaW5wdXRWYWxzW2ldLmdldFJhd0RhdGEoKTtcblxuICAgICAgICAgICAgICAgIGxldCBjb2wgPSBpbnB1dFZhbHNbaV07XG5cbiAgICAgICAgICAgICAgICAvLyBoZXJlLCB3ZSBjaGVjayB0eXBlcyBhbmQgcGVyZm9ybSBhbiBhcHByb3ByaWF0ZSB0cmFuc2Zvcm1cbiAgICAgICAgICAgICAgICBpZiggKCAoY29sLnR5cGUgPT09IElOVF9UWVBFKSAmJiAodHlwZSA9PT0gSU5UX0NPTFVNTl9UWVBFKSApIFxuICAgICAgICAgICAgICAgICAgIHx8ICggKGNvbC50eXBlID09PSBET1VCTEVfVFlQRSkgJiYgKHR5cGUgPT09IEZMT0FUX0NPTFVNTl9UWVBFKSApIClcbiAgICAgICAgICAgICAgICAgICAgIGFycmF5ID0gY29sLmdldFJhd0RhdGEoKTtcbiAgICAgICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgICAgICBhcnJheSA9IG5ldyB0eXBlTWFwW3R5cGVdKGNvbC5nZXRSYXdEYXRhKCkpO1xuXG4gICAgICAgICAgICAgICAgLyppZigoKGNvbC50eXBlID09ICdpbnQnKSAmJiAodHlwZSA9PSBJTlRfQ09MVU1OX1RZUEUpKSBcbiAgICAgICAgICAgICAgICAgICAgIHx8ICgoY29sLnR5cGUgPT0gJ2RvdWJsZScpICYmICh0eXBlID09IEZMT0FUX0NPTFVNTl9UWVBFKSkpXG4gICAgICAgICAgICAgICAgICAgICAgIGFycmF5ID0gY29sLmdldFJhd0RhdGEoKTtcbiAgICAgICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgICAgICAgIGFycmF5ID0gbmV3IHR5cGVNYXBbdHlwZV0oY29sLmdldFJhd0RhdGEoKSk7Ki9cblxuICAgICAgICAgICAgICAgIC8vIGNoZWNrIHR5cGVzXG4gICAgICAgICAgICAgICAgYXJnLmRhdGEgPSB7ICdhcnJheSc6IGFycmF5LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnbnVtT2ZSb3dzJzogYXJyYXkubGVuZ3RofTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgaSsrO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAvLyBuZXcgY29sdW1uIFxuICAgICAgICAgICAgY2FzZSBORVdfSU5UX0NPTFVNTl9UWVBFOlxuICAgICAgICAgICAgY2FzZSBORVdfRkxPQVRfQ09MVU1OX1RZUEU6XG4gICAgICAgICAgICAgICAgbGV0IHZhbCA9IDA7ICAgICAgICAgICAgICAgIFxuXG4gICAgICAgICAgICAgICAgcmVmID0gYXJnW05VTV9PRl9ST1dTXVtSRUZdO1xuXG4gICAgICAgICAgICAgICAgaWYgKGFyZ3NTcGVjaWZpY2F0aW9uW3JlZl0udHlwZSA9PT0gTlVNX1RZUEUpXG4gICAgICAgICAgICAgICAgICAgIHZhbCA9IGFyZ3NTcGVjaWZpY2F0aW9uW3JlZl0uZGF0YTtcbiAgICAgICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgICAgIHZhbCA9IGFyZ3NTcGVjaWZpY2F0aW9uW3JlZl0uZGF0YVthcmdbTlVNX09GX1JPV1NdW1ZBTFVFXV07ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcblxuICAgICAgICAgICAgICAgIGFyZy5kYXRhID0geydudW1PZlJvd3MnOiB2YWx9O1xuXG4gICAgICAgICAgICAgICAgaSsrO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAvLyBjb2x1bW5zIG9yIGNvbHVtbl9saXN0XG4gICAgICAgICAgICBjYXNlIElOVF9DT0xVTU5TX1RZUEU6XG4gICAgICAgICAgICBjYXNlIEZMT0FUX0NPTFVNTlNfVFlQRTogICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgbGV0IGFycmF5cyA9IFtdOyAgICAgICAgICAgICAgICBcblxuICAgICAgICAgICAgICAgIC8vIHRoaXMgaXMgT0sgaWYgdHlwZSBvZiBjb2x1bW5zIGFuZCB0YXJnZXQgdHlwZSBjb2luc2lkZVxuICAgICAgICAgICAgICAgIC8vZm9yKGxldCBjb2wgb2YgaW5wdXRWYWxzW2ldLnRvTGlzdCgpKVxuICAgICAgICAgICAgICAgIC8vICBhcnJheXMucHVzaChjb2wuZ2V0UmF3RGF0YSgpKTtcblxuICAgICAgICAgICAgICAgIC8vIGhlcmUsIHdlIGNoZWNrIHR5cGVzIGFuZCBwZXJmb3JtIGFuIGFwcHJvcHJpYXRlIHRyYW5zZm9ybVxuICAgICAgICAgICAgICAgIGZvcihsZXQgY29sIG9mIGlucHV0VmFsc1tpXS50b0xpc3QoKSlcbiAgICAgICAgICAgICAgICAgIGlmKCAoIChjb2wudHlwZSA9PT0gSU5UX1RZUEUpICYmICh0eXBlID09PSBJTlRfQ09MVU1OX1RZUEUpICkgXG4gICAgICAgICAgICAgICAgICAgIHx8ICggKGNvbC50eXBlID09PSBET1VCTEVfVFlQRSkgJiYgKHR5cGUgPT09IEZMT0FUX0NPTFVNTl9UWVBFKSApIClcbiAgICAgICAgICAgICAgICAgICAgYXJyYXlzLnB1c2goY29sLmdldFJhd0RhdGEoKSk7XG4gICAgICAgICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgICAgIGFycmF5cy5wdXNoKG5ldyB0eXBlTWFwW3R5cGVdKGNvbC5nZXRSYXdEYXRhKCkpKTtcbiAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAvKmZvcihsZXQgY29sIG9mIGlucHV0VmFsc1tpXS50b0xpc3QoKSlcbiAgICAgICAgICAgICAgICAgICAgaWYoKChjb2wudHlwZSA9PSAnaW50JykgJiYgKHR5cGUgPT0gSU5UX0NPTFVNTl9UWVBFKSkgXG4gICAgICAgICAgICAgICAgICAgICAgfHwgKChjb2wudHlwZSA9PSAnZG91YmxlJykgJiYgKHR5cGUgPT0gRkxPQVRfQ09MVU1OX1RZUEUpKSlcbiAgICAgICAgICAgICAgICAgICAgICBhcnJheXMucHVzaChjb2wuZ2V0UmF3RGF0YSgpKTtcbiAgICAgICAgICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgICAgICAgIGFycmF5cy5wdXNoKG5ldyB0eXBlTWFwW3R5cGVdKGNvbC5nZXRSYXdEYXRhKCkpKTsqL1xuXG4gICAgICAgICAgICAgICAgYXJnLmRhdGEgPSB7ICdhcnJheXMnOiBhcnJheXMsXG4gICAgICAgICAgICAgICAgICAgICdudW1PZlJvd3MnOiBhcnJheXNbMF0ubGVuZ3RoLFxuICAgICAgICAgICAgICAgICAgICAnbnVtT2ZDb2x1bW5zJzogYXJyYXlzLmxlbmd0aH07XG5cbiAgICAgICAgICAgICAgICBpKys7ICBcbiAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgLy8gbmV3IGNvbHVtbnMgb3IgbmV3IGNvbHVtbl9saXN0XG4gICAgICAgICAgICBjYXNlIE5FV19JTlRfQ09MVU1OU19UWVBFOlxuICAgICAgICAgICAgY2FzZSBORVdfRkxPQVRfQ09MVU1OU19UWVBFOlxuICAgICAgICAgICAgICAgIGxldCB2YWwxID0gMDtcbiAgICAgICAgICAgICAgICBsZXQgdmFsMiA9IDA7XG5cbiAgICAgICAgICAgICAgICByZWYgPSBhcmdbTlVNX09GX1JPV1NdW1JFRl07XG5cbiAgICAgICAgICAgICAgICBpZiAoYXJnc1NwZWNpZmljYXRpb25bcmVmXS50eXBlID09PSBOVU1fVFlQRSlcbiAgICAgICAgICAgICAgICAgICAgdmFsMSA9IGFyZ3NTcGVjaWZpY2F0aW9uW3JlZl0uZGF0YTtcbiAgICAgICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgICAgIHZhbDEgPSBhcmdzU3BlY2lmaWNhdGlvbltyZWZdLmRhdGFbYXJnW05VTV9PRl9ST1dTXVtWQUxVRV1dO1xuXG4gICAgICAgICAgICAgICAgcmVmID0gYXJnW05VTV9PRl9DT0xVTU5TXVtSRUZdO1xuXG4gICAgICAgICAgICAgICAgLy9jb25zb2xlLmxvZygnUmVmOicpO1xuICAgICAgICAgICAgICAgIC8vY29uc29sZS5sb2cocmVmKTtcbiAgICAgICAgICAgICAgICAvL2NvbnNvbGUubG9nKGFyZ3NTcGVjaWZpY2F0aW9uW3JlZl0uZGF0YSk7XG5cbiAgICAgICAgICAgICAgICBpZiAoYXJnc1NwZWNpZmljYXRpb25bcmVmXS50eXBlID09PSBOVU1fVFlQRSlcbiAgICAgICAgICAgICAgICAgICAgdmFsMiA9IGFyZ3NTcGVjaWZpY2F0aW9uW3JlZl0uZGF0YTtcbiAgICAgICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgICAgIHZhbDIgPSBhcmdzU3BlY2lmaWNhdGlvbltyZWZdLmRhdGFbYXJnW05VTV9PRl9DT0xVTU5TXVtWQUxVRV1dOyAgICAgICAgICAgICAgICBcblxuICAgICAgICAgICAgICAgIGFyZy5kYXRhID0geydudW1PZlJvd3MnOiB2YWwxLFxuICAgICAgICAgICAgICAgICAgJ251bU9mQ29sdW1ucyc6IHZhbDJ9O1xuXG4gICAgICAgICAgICAgICAgaSsrO1xuICAgICAgICAgICAgICAgIGJyZWFrOyAgICAgICAgICAgIFxuXG4gICAgICAgICAgICBkZWZhdWx0OiBcbiAgICAgICAgICAgICAgICByZXR1cm47IC8vIFRPRE86IHNwZWNpZnkgYmVoYXZpb3VyICAgICAgICAgICBcbiAgICAgICAgICAgIH0gLy8gc3dpdGNoICAgICAgICBcblxuICAgICAgICBjcHBGdW5jSW5wdXQucHVzaChhcmcpO1xuICAgIH0gLy8gZm9yIGtleVxuXG4gICAgLy9jb25zb2xlLmxvZygnY3BwRnVuY0lucHV0OicpO1xuICAgIC8vY29uc29sZS5sb2coY3BwRnVuY0lucHV0KTtcblxuICAgIHJldHVybiBjcHBGdW5jSW5wdXQ7XG59IC8vIGdldENwcElucHV0XG5cbi8vIEFsbG9jYXRlIG1lbW9yeSBmb3IgYnVmZmVycyBmb3IgYXJyYXkgZGF0YVxuZnVuY3Rpb24gYWxsb2NhdGVNZW1vcnlGb3JCdWZmZXIobW9kdWxlLCBpbnB1dHMpIHtcbiAgICBmb3IoY29uc3QgYXJnIG9mIGlucHV0cykgeyBcbiAgICAgICAgY29uc3QgdHlwZSA9IGFyZy50eXBlO1xuXG4gICAgICAgIHN3aXRjaCh0eXBlKSB7IC8vIFByb2Nlc3MgZWFjaCB0eXBlIG9mIGlucHV0XG5cbiAgICAgICAgICAgIC8vIG51bWJlcnNcbiAgICAgICAgICAgIGNhc2UgTlVNX1RZUEU6IFxuICAgICAgICAgICAgY2FzZSBJTlRfVFlQRTpcbiAgICAgICAgICAgIGNhc2UgRE9VQkxFX1RZUEU6XG4gICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgIC8vIGNvbHVtbiAmIG5ldyBjb2x1bW5cbiAgICAgICAgICAgIGNhc2UgSU5UX0NPTFVNTl9UWVBFOlxuICAgICAgICAgICAgY2FzZSBGTE9BVF9DT0xVTU5fVFlQRTpcbiAgICAgICAgICAgIGNhc2UgTkVXX0ZMT0FUX0NPTFVNTl9UWVBFOlxuICAgICAgICAgICAgY2FzZSBORVdfSU5UX0NPTFVNTl9UWVBFOlxuICAgICAgICAgICAgICAgIGFyZy5kYXRhLmJ1ZiA9IG1vZHVsZS5fbWFsbG9jKGFyZy5kYXRhLm51bU9mUm93cyAqIHR5cGVNYXBbdHlwZV0uQllURVNfUEVSX0VMRU1FTlQpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAvLyBjb2x1bW5zICYgbmV3IGNvbHVtbnNcbiAgICAgICAgICAgIGNhc2UgSU5UX0NPTFVNTlNfVFlQRTogICAgICAgICAgICAgXG4gICAgICAgICAgICBjYXNlIE5FV19JTlRfQ09MVU1OU19UWVBFOlxuICAgICAgICAgICAgY2FzZSBGTE9BVF9DT0xVTU5TX1RZUEU6ICAgICAgICAgICAgIFxuICAgICAgICAgICAgY2FzZSBORVdfRkxPQVRfQ09MVU1OU19UWVBFOiAvLyBhbGxvY2F0aW9uIG1lbW9yeSBmb3IgY29sdW1ucyB0aGF0IGFyZSBjcmVhdGVkXG4gICAgICAgICAgICAgICAgYXJnLmRhdGEuYnVmID0gbW9kdWxlLl9tYWxsb2MoYXJnLmRhdGEubnVtT2ZSb3dzICogYXJnLmRhdGEubnVtT2ZDb2x1bW5zIFxuICAgICAgICAgICAgICAgICAgICAqIHR5cGVNYXBbdHlwZV0uQllURVNfUEVSX0VMRU1FTlQpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAvLyBUT0RPOiBwcm9jZXNzIG90aGVyIGNhc2VzIGFuZCBtaXN0YWtlc1xuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICBicmVhazsgXG4gICAgICAgIH0gIFxuICAgIH1cbiAgICBcbiAgICAvL2NvbnNvbGUubG9nKCdpbnB1dHMgYWZ0ZXIgbWVtb3J5IGFsbG9jYXRpb246Jyk7XG4gICAgLy9jb25zb2xlLmxvZyhpbnB1dHMpO1xufSAvLyBhbGxvY2F0ZU1lbW9yeUZvckJ1ZmZlclxuXG4vLyBHZXQgYXJyYXkgb2YgdmFsdWVzIHRoYXQgYXJlIHB1dCB0byB3YXNtLWZ1bmN0aW9uLlxuZnVuY3Rpb24gZ2V0QXJyT2ZXYXNtUGFyYW1zKGlucHV0cykge1xuICAgIGxldCBwYXJhbXMgPSBbXTtcblxuICAgIC8vIFByb2Nlc3MgZWFjaCB0eXBlIG9mIGlucHV0XG4gICAgZm9yKGNvbnN0IGFyZyBvZiBpbnB1dHMpIHtcbiAgICAgICAgc3dpdGNoIChhcmcudHlwZSkge1xuXG4gICAgICAgICAgICAvLyBudW1iZXJzXG4gICAgICAgICAgICBjYXNlIE5VTV9UWVBFOiAgICAgICAgICAgIFxuICAgICAgICAgICAgY2FzZSBJTlRfVFlQRTpcbiAgICAgICAgICAgIGNhc2UgRE9VQkxFX1RZUEU6XG4gICAgICAgICAgICAgICAgcGFyYW1zLnB1c2goYXJnLmRhdGEpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgICAgICAvLyBjb2x1bW4gJiBuZXcgY29sdW1uXG4gICAgICAgICAgICBjYXNlIElOVF9DT0xVTU5fVFlQRTpcbiAgICAgICAgICAgIGNhc2UgRkxPQVRfQ09MVU1OX1RZUEU6XG4gICAgICAgICAgICBjYXNlIE5FV19GTE9BVF9DT0xVTU5fVFlQRTpcbiAgICAgICAgICAgIGNhc2UgTkVXX0lOVF9DT0xVTU5fVFlQRTpcbiAgICAgICAgICAgICAgICBwYXJhbXMucHVzaChhcmcuZGF0YS5idWYpOyAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICBwYXJhbXMucHVzaChhcmcuZGF0YS5udW1PZlJvd3MpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgXG4gICAgICAgICAgICAvLyBjb2x1bW5zICYgbmV3IGNvbHVtbnNcbiAgICAgICAgICAgIGNhc2UgSU5UX0NPTFVNTlNfVFlQRTpcbiAgICAgICAgICAgIGNhc2UgTkVXX0lOVF9DT0xVTU5TX1RZUEU6XG4gICAgICAgICAgICBjYXNlIEZMT0FUX0NPTFVNTlNfVFlQRTpcbiAgICAgICAgICAgIGNhc2UgTkVXX0ZMT0FUX0NPTFVNTlNfVFlQRTogXG4gICAgICAgICAgICAgICAgcGFyYW1zLnB1c2goYXJnLmRhdGEuYnVmKTtcbiAgICAgICAgICAgICAgICBwYXJhbXMucHVzaChhcmcuZGF0YS5udW1PZlJvd3MpO1xuICAgICAgICAgICAgICAgIHBhcmFtcy5wdXNoKGFyZy5kYXRhLm51bU9mQ29sdW1ucyk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIFxuICAgICAgICAgICAgLy8gVE9ETzogcHJvY2VzcyBvdGhlciBjYXNlcyBhbmQgbWlzdGFrZXNcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gcGFyYW1zO1xufSAvLyBnZXRBcnJPZldhc21QYXJhbXNcblxuLy8gR2V0IGFycmF5IG9mIHR5cGVzIHRoYXQgYXJlIHB1dCB0byB3YXNtLWZ1bmN0aW9uLlxuZnVuY3Rpb24gZ2V0QXJyT2ZXYXNtVHlwZXMoaW5wdXRzKSB7XG4gICAgbGV0IHR5cGVzID0gW107XG5cbiAgICBmb3IoY29uc3QgYXJnIG9mIGlucHV0cykge1xuICAgICAgICBzd2l0Y2ggKGFyZy50eXBlKSB7IC8vIFByb2Nlc3MgZWFjaCB0eXBlIG9mIGlucHV0XG5cbiAgICAgICAgICAgIC8vIG51bWJlcnNcbiAgICAgICAgICAgIGNhc2UgTlVNX1RZUEU6XG4gICAgICAgICAgICBjYXNlIElOVF9UWVBFOlxuICAgICAgICAgICAgY2FzZSBET1VCTEVfVFlQRTpcbiAgICAgICAgICAgICAgICB0eXBlcy5wdXNoKE5VTUJFUik7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgIC8vIGNvbHVtbiAmIG5ldyBjb2x1bW5cbiAgICAgICAgICAgIGNhc2UgSU5UX0NPTFVNTl9UWVBFOlxuICAgICAgICAgICAgY2FzZSBGTE9BVF9DT0xVTU5fVFlQRTpcbiAgICAgICAgICAgIGNhc2UgTkVXX0ZMT0FUX0NPTFVNTl9UWVBFOlxuICAgICAgICAgICAgY2FzZSBORVdfSU5UX0NPTFVNTl9UWVBFOlxuICAgICAgICAgICAgICAgIHR5cGVzLnB1c2goTlVNQkVSKTsgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgdHlwZXMucHVzaChOVU1CRVIpO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgXG4gICAgICAgICAgICAvLyBjb2x1bW5zICYgbmV3IGNvbHVtbnNcbiAgICAgICAgICAgIGNhc2UgSU5UX0NPTFVNTlNfVFlQRTpcbiAgICAgICAgICAgIGNhc2UgTkVXX0lOVF9DT0xVTU5TX1RZUEU6XG4gICAgICAgICAgICBjYXNlIEZMT0FUX0NPTFVNTlNfVFlQRTpcbiAgICAgICAgICAgIGNhc2UgTkVXX0ZMT0FUX0NPTFVNTlNfVFlQRTpcbiAgICAgICAgICAgICAgICB0eXBlcy5wdXNoKE5VTUJFUik7XG4gICAgICAgICAgICAgICAgdHlwZXMucHVzaChOVU1CRVIpO1xuICAgICAgICAgICAgICAgIHR5cGVzLnB1c2goTlVNQkVSKTtcbiAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgLy8gVE9ETzogcHJvY2VzcyBvdGhlciBjYXNlcyBhbmQgbWlzdGFrZXNcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICB9XG5cbiAgICByZXR1cm4gdHlwZXM7XG59IC8vIGdldEFyck9mV2FzbVR5cGVzXG5cbi8vIFB1dCBhcnJheSBkYXRhIHRvIGJ1ZmZlclxuZnVuY3Rpb24gcHV0RGF0YVRvQnVmZmVyKG1vZHVsZSwgaW5wdXRzKSB7XG4gICAgbGV0IHNoaWZ0O1xuICAgIGxldCBoZWFwOyAgICBcbiAgICBcbiAgICBmb3IoY29uc3QgYXJnIG9mIGlucHV0cykge1xuICAgICAgICBjb25zdCB0eXBlID0gYXJnLnR5cGU7XG5cbiAgICAgICAgc3dpdGNoICh0eXBlKSB7IC8vIFByb2Nlc3MgZWFjaCB0eXBlIG9mIGlucHV0XG5cbiAgICAgICAgICAgIC8vIG51bWJlcnNcbiAgICAgICAgICAgIGNhc2UgTlVNX1RZUEU6XG4gICAgICAgICAgICBjYXNlIElOVF9UWVBFOlxuICAgICAgICAgICAgY2FzZSBET1VCTEVfVFlQRTogICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAvLyBjb2x1bW5cbiAgICAgICAgICAgIGNhc2UgSU5UX0NPTFVNTl9UWVBFOlxuICAgICAgICAgICAgY2FzZSBGTE9BVF9DT0xVTU5fVFlQRTogICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgc2hpZnQgPSBzaGlmdE1hcFt0eXBlXTtcbiAgICAgICAgICAgICAgICBoZWFwID0gbW9kdWxlW2hlYXBNYXBbdHlwZV1dOyAgXG4gICAgICAgICAgICAgICAgaGVhcC5zZXQoYXJnLmRhdGEuYXJyYXksIGFyZy5kYXRhLmJ1ZiA+PiBzaGlmdCk7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBcbiAgICAgICAgICAgIC8vIGNvbHVtbnNcbiAgICAgICAgICAgIGNhc2UgSU5UX0NPTFVNTlNfVFlQRTpcbiAgICAgICAgICAgIGNhc2UgRkxPQVRfQ09MVU1OU19UWVBFOlxuICAgICAgICAgICAgICAgIHNoaWZ0ID0gc2hpZnRNYXBbdHlwZV07XG4gICAgICAgICAgICAgICAgaGVhcCA9IG1vZHVsZVtoZWFwTWFwW3R5cGVdXTtcbiAgICAgICAgICAgICAgICBsZXQgbnVtT2ZCeXRlcyA9IHR5cGVNYXBbdHlwZV0uQllURVNfUEVSX0VMRU1FTlQ7XG4gICAgICAgICAgICAgICAgbGV0IGJ1ZiA9IGFyZy5kYXRhLmJ1ZjtcbiAgICAgICAgICAgICAgICBsZXQgbnVtT2ZDb2x1bW5zID0gYXJnLmRhdGEubnVtT2ZDb2x1bW5zO1xuICAgICAgICAgICAgICAgIGxldCBudW1PZlJvd3MgPSBhcmcuZGF0YS5udW1PZlJvd3M7XG4gICAgICAgICAgICAgICAgbGV0IGFycmF5cyA9IGFyZy5kYXRhLmFycmF5cztcblxuICAgICAgICAgICAgICAgIGZvcihsZXQgaSA9IDA7IGkgPCBudW1PZkNvbHVtbnM7IGkrKylcbiAgICAgICAgICAgICAgICAgICAgaGVhcC5zZXQoYXJyYXlzW2ldLCAoYnVmICsgaSAqIG51bU9mUm93cyAqIG51bU9mQnl0ZXMpID4+IHNoaWZ0KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgIC8vIG5ldyBjb2x1bW4ocylcbiAgICAgICAgICAgIGNhc2UgTkVXX0lOVF9DT0xVTU5TX1RZUEU6XG4gICAgICAgICAgICBjYXNlIE5FV19GTE9BVF9DT0xVTU5TX1RZUEU6XG4gICAgICAgICAgICBjYXNlIE5FV19GTE9BVF9DT0xVTU5fVFlQRTpcbiAgICAgICAgICAgIGNhc2UgTkVXX0lOVF9DT0xVTU5fVFlQRTogICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgIC8vIFRPRE86IHByb2Nlc3Mgb3RoZXIgY2FzZXMgYW5kIG1pc3Rha2VzXG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG4gICAgfVxufSAvLyBwdXREYXRhVG9CdWZmZXJcblxuLy8gR2V0IGFycmF5IGRhdGEgZnJvbSBidWZmZXIuXG5mdW5jdGlvbiBnZXREYXRhRnJvbUJ1ZmZlcihtb2R1bGUsIGlucHV0cykge1xuXG4gICAgbGV0IGhlYXA7XG4gICAgbGV0IG51bU9mUm93cztcbiAgICBsZXQgbnVtT2ZDb2xzO1xuICAgIGxldCBudW1PZkJ5dGVzOyAgICBcbiAgICBsZXQgYnVmO1xuXG4gICAgZm9yKGNvbnN0IGFyZyBvZiBpbnB1dHMpIHtcbiAgICAgICAgY29uc3QgdHlwZSA9IGFyZy50eXBlO1xuXG4gICAgICAgIHN3aXRjaCAodHlwZSkgeyAvLyBQcm9jZXNzIGVhY2ggdHlwZSBvZiBpbnB1dFxuICAgICAgICAgICAgXG4gICAgICAgICAgICAvLyBudW1iZXJcbiAgICAgICAgICAgIGNhc2UgTlVNX1RZUEU6XG4gICAgICAgICAgICBjYXNlIElOVF9UWVBFOlxuICAgICAgICAgICAgY2FzZSBET1VCTEVfVFlQRTpcbiAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgLy8gY29sdW1uKHMpXG4gICAgICAgICAgICBjYXNlIElOVF9DT0xVTU5fVFlQRTpcbiAgICAgICAgICAgIGNhc2UgRkxPQVRfQ09MVU1OX1RZUEU6XG4gICAgICAgICAgICBjYXNlIEZMT0FUX0NPTFVNTlNfVFlQRTogIFxuICAgICAgICAgICAgY2FzZSBJTlRfQ09MVU1OU19UWVBFOiAgICAgICAgICBcbiAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgLy8gbmV3IGNvbHVtblxuICAgICAgICAgICAgY2FzZSBORVdfRkxPQVRfQ09MVU1OX1RZUEU6XG4gICAgICAgICAgICBjYXNlIE5FV19JTlRfQ09MVU1OX1RZUEU6XG4gICAgICAgICAgICAgICAgaGVhcCA9IG1vZHVsZVtoZWFwTWFwW3R5cGVdXTtcbiAgICAgICAgICAgICAgICBudW1PZlJvd3MgPSBhcmcuZGF0YS5udW1PZlJvd3M7XG4gICAgICAgICAgICAgICAgbnVtT2ZCeXRlcyA9IHR5cGVNYXBbdHlwZV0uQllURVNfUEVSX0VMRU1FTlQ7ICAgIFxuICAgICAgICAgICAgICAgIGJ1ZiA9IGFyZy5kYXRhLmJ1ZjtcbiAgICAgICAgICAgICAgICBsZXQgYXJyYXkgPSBuZXcgdHlwZU1hcFt0eXBlXShudW1PZlJvd3MpO1xuXG4gICAgICAgICAgICAgICAgZm9yKGxldCBqID0gMDsgaiA8IG51bU9mUm93czsgaisrKVxuICAgICAgICAgICAgICAgICAgICBhcnJheVtqXSA9IGhlYXBbYnVmIC8gbnVtT2ZCeXRlcyArIGpdO1xuXG4gICAgICAgICAgICAgICAgYXJnLmFycmF5ID0gYXJyYXk7XG5cbiAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgLy8gbmV3IGNvbHVtbnNcbiAgICAgICAgICAgIGNhc2UgTkVXX0lOVF9DT0xVTU5TX1RZUEU6XG4gICAgICAgICAgICBjYXNlIE5FV19GTE9BVF9DT0xVTU5TX1RZUEU6IFxuICAgICAgICAgICAgICAgIGhlYXAgPSBtb2R1bGVbaGVhcE1hcFt0eXBlXV07XG4gICAgICAgICAgICAgICAgbnVtT2ZSb3dzID0gYXJnLmRhdGEubnVtT2ZSb3dzO1xuICAgICAgICAgICAgICAgIG51bU9mQ29scyA9IGFyZy5kYXRhLm51bU9mQ29sdW1ucztcbiAgICAgICAgICAgICAgICBudW1PZkJ5dGVzID0gdHlwZU1hcFt0eXBlXS5CWVRFU19QRVJfRUxFTUVOVDsgICAgXG4gICAgICAgICAgICAgICAgYnVmID0gYXJnLmRhdGEuYnVmO1xuICAgICAgICAgICAgICAgIGxldCBhcnJheXMgPSBbXTtcblxuICAgICAgICAgICAgICAgIGZvcihsZXQgaSA9IDA7IGkgPCBudW1PZkNvbHM7IGkrKykge1xuICAgICAgICAgICAgICAgICAgIGxldCBhcnIgPSBuZXcgdHlwZU1hcFt0eXBlXShudW1PZlJvd3MpO1xuXG4gICAgICAgICAgICAgICAgICAgZm9yKGxldCBqID0gMDsgaiA8IG51bU9mUm93czsgaisrKVxuICAgICAgICAgICAgICAgICAgICAgIGFycltqXSA9IGhlYXBbYnVmIC8gbnVtT2ZCeXRlcyArIGogKyBpICogbnVtT2ZSb3dzXTsgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICAgICBhcnJheXMucHVzaChhcnIpO1xuICAgICAgICAgICAgICAgIH1cblxuICAgICAgICAgICAgICAgIGFyZy5hcnJheXMgPSBhcnJheXM7XG4gICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIFxuICAgICAgICAgICAgLy8gVE9ETzogcHJvY2VzcyBvdGhlciBjYXNlcyBhbmQgbWlzdGFrZXNcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICB9ICAgICAgICAgICAgXG59IC8vIGdldERhdGFGcm9tQnVmZmVyXG5cbi8vIENsZWFyIG1lbW9yeSBhbGxvY2F0ZWQgZm9yIGFycmF5IGRhdGFcbmZ1bmN0aW9uIGNsZWFyTWVtb3J5Rm9yQnVmZmVyKG1vZHVsZSwgaW5wdXRzKSB7XG4gICAgZm9yKGNvbnN0IGFyZyBvZiBpbnB1dHMpIFxuICAgICAgICBzd2l0Y2goYXJnLnR5cGUpIHsgLy8gcHJvY2VzcyBlYWNoIHR5cGUgb2YgaW5wdXRcblxuICAgICAgICAgICAgLy8gbnVtYmVyXG4gICAgICAgICAgICBjYXNlIE5VTV9UWVBFOlxuICAgICAgICAgICAgY2FzZSBJTlRfVFlQRTpcbiAgICAgICAgICAgIGNhc2UgRE9VQkxFX1RZUEU6XG4gICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgIC8vIGVhY2ggbm9uLW51bWJlciBjYXNlXG4gICAgICAgICAgICBjYXNlIElOVF9DT0xVTU5fVFlQRTpcbiAgICAgICAgICAgIGNhc2UgRkxPQVRfQ09MVU1OX1RZUEU6ICAgICAgICAgICAgICAgIFxuICAgICAgICAgICAgY2FzZSBJTlRfQ09MVU1OU19UWVBFOlxuICAgICAgICAgICAgY2FzZSBORVdfSU5UX0NPTFVNTlNfVFlQRTpcbiAgICAgICAgICAgIGNhc2UgRkxPQVRfQ09MVU1OU19UWVBFOlxuICAgICAgICAgICAgY2FzZSBORVdfRkxPQVRfQ09MVU1OU19UWVBFOlxuICAgICAgICAgICAgY2FzZSBORVdfRkxPQVRfQ09MVU1OX1RZUEU6XG4gICAgICAgICAgICBjYXNlIE5FV19JTlRfQ09MVU1OX1RZUEU6XG4gICAgICAgICAgICAgICAgbW9kdWxlLl9mcmVlKGFyZy5kYXRhLmJ1Zik7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgIC8vIFRPRE86IHByb2Nlc3Mgb3RoZXIgY2FzZXMgYW5kIG1pc3Rha2VzXG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIGJyZWFrOyBcbiAgICAgICAgfSAgICBcbn0gLy8gY2xlYXJNZW1vcnlGb3JCdWZmZXJcblxuLy8gRXh0cmFjdCBuZXdseSBjcmVhdGVkIGRhdGE6IG5ldyBjb2x1bW4ocykgYXJlIGNyZWF0ZWRcbmZ1bmN0aW9uIGV4dHJhY3ROZXdseUNyZWF0ZWREYXRhKGZ1bmNTcGVjaWZpY2F0aW9uQXJncywgYXJnc0FmdGVyV2FzbUNhbGwpIHtcbiAgICAvLyB0eXBlLXRvLWNvbHVtbl9jcmVhdG9yIG1hcFxuICAgIGNvbnN0IHR5cGVUb0NvbHVtbkNyZWF0b3JNYXAgPSB7J25ld0Zsb2F0Q29sdW1ucyc6IERHLkNvbHVtbi5mcm9tRmxvYXQzMkFycmF5LFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ25ld0ludENvbHVtbnMnOiBERy5Db2x1bW4uZnJvbUludDMyQXJyYXksXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnbmV3RmxvYXRDb2x1bW4nOiBERy5Db2x1bW4uZnJvbUZsb2F0MzJBcnJheSxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICduZXdJbnRDb2x1bW4nOiBERy5Db2x1bW4uZnJvbUludDMyQXJyYXl9O1xuXG4gICAgbGV0IGkgPSAwO1xuXG4gICAgZm9yKGNvbnN0IGtleSBpbiBmdW5jU3BlY2lmaWNhdGlvbkFyZ3MpIFxuICAgIHtcbiAgICAgICAgY29uc3QgYXJnID0gZnVuY1NwZWNpZmljYXRpb25BcmdzW2tleV07XG5cbiAgICAgICAgc3dpdGNoKGFyZy50eXBlKXsgLy8gUHJvY2VzcyBlYWNoIHR5cGVcblxuICAgICAgICAgICAgLy8gbnVtYmVyXG4gICAgICAgICAgICBjYXNlIE5VTV9UWVBFOlxuICAgICAgICAgICAgY2FzZSBJTlRfVFlQRTpcbiAgICAgICAgICAgIGNhc2UgRE9VQkxFX1RZUEU6XG4gICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgIC8vIGNvbHVtbihzKVxuICAgICAgICAgICAgY2FzZSBJTlRfQ09MVU1OX1RZUEU6XG4gICAgICAgICAgICBjYXNlIEZMT0FUX0NPTFVNTl9UWVBFOlxuICAgICAgICAgICAgY2FzZSBGTE9BVF9DT0xVTU5TX1RZUEU6XG4gICAgICAgICAgICBjYXNlIElOVF9DT0xVTU5TX1RZUEU6XG4gICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgIC8vIG5ldyBjb2x1bW5cbiAgICAgICAgICAgIGNhc2UgTkVXX0ZMT0FUX0NPTFVNTl9UWVBFOlxuICAgICAgICAgICAgY2FzZSBORVdfSU5UX0NPTFVNTl9UWVBFOlxuICAgICAgICAgICAgICAgIGxldCBuYW1lO1xuXG4gICAgICAgICAgICAgICAgLy8gc3BlY2lmeSBuYW1lIGZvciBjb2x1bW5cbiAgICAgICAgICAgICAgICBpZihhcmcubmFtZSA9PSB1bmRlZmluZWQpXG4gICAgICAgICAgICAgICAgICAgIG5hbWUgPSAoMCkudG9TdHJpbmcoKTtcbiAgICAgICAgICAgICAgICBlbHNlIFxuICAgICAgICAgICAgICAgICAgICBuYW1lcyA9IGFyZy5uYW1lO1xuXG4gICAgICAgICAgICAgICAgYXJnLmNvbHVtbiA9IHR5cGVUb0NvbHVtbkNyZWF0b3JNYXBbYXJnLnR5cGVdKG5hbWUsXG4gICAgICAgICAgICAgICAgICAgIGFyZ3NBZnRlcldhc21DYWxsW2ldLmFycmF5KTtcbiAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgLy8gbmV3IGNvbHVtbnNcbiAgICAgICAgICAgIGNhc2UgTkVXX0lOVF9DT0xVTU5TX1RZUEU6XG4gICAgICAgICAgICBjYXNlIE5FV19GTE9BVF9DT0xVTU5TX1RZUEU6XG4gICAgICAgICAgICAgICAgbGV0IGNvbHVtbnMgPSBbXTtcbiAgICAgICAgICAgICAgICBsZXQgbGVuZ3RoID0gYXJnc0FmdGVyV2FzbUNhbGxbaV0uYXJyYXlzLmxlbmd0aDtcblxuICAgICAgICAgICAgICAgIGxldCBuYW1lcyA9IFtdO1xuXG4gICAgICAgICAgICAgICAgLy8gc3BlY2lmeSBuYW1lIGZvciBjb2x1bW5cbiAgICAgICAgICAgICAgICBpZihhcmcubmFtZXMgPT0gdW5kZWZpbmVkKVxuICAgICAgICAgICAgICAgICAgICBmb3IobGV0IGsgPSAxOyBrIDw9IGxlbmd0aDsgaysrKVxuICAgICAgICAgICAgICAgICAgICAgICAgbmFtZXMucHVzaCgoaykudG9TdHJpbmcoKSk7XG4gICAgICAgICAgICAgICAgZWxzZSBuYW1lcyA9IGFyZy5uYW1lcztcblxuICAgICAgICAgICAgICAgIGZvcihsZXQgaiA9IDA7IGogPCBsZW5ndGg7IGorKylcbiAgICAgICAgICAgICAgICAgICAgY29sdW1ucy5wdXNoKHR5cGVUb0NvbHVtbkNyZWF0b3JNYXBbYXJnLnR5cGVdKG5hbWVzW2pdLFxuICAgICAgICAgICAgICAgICAgICAgICAgYXJnc0FmdGVyV2FzbUNhbGxbaV0uYXJyYXlzW2pdKSk7XG5cbiAgICAgICAgICAgICAgICBhcmcuY29sdW1ucyA9IGNvbHVtbnM7XG4gICAgICAgICAgICAgICAgXG4gICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgIC8vIFRPRE86IHByb2Nlc3Mgb3RoZXIgY2FzZXMgYW5kIG1pc3Rha2VzXG4gICAgICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICB9XG5cbiAgICAgICAgaSsrO1xuICAgIH1cbn0gLy8gZXh0cmFjdE5ld2x5Q3JlYXRlZERhdGFcblxuLy8gR2V0IG91dHB1dCBkYXRhOiBvdmVyYWxsIG91dHB1dCBpcyBjcmVhdGVkXG5mdW5jdGlvbiBnZXRPdXRwdXQoZnVuY1NwZWNpZmljYXRpb24pIHsgIFxuICAgIGxldCBvdXRwdXQgPSBmdW5jU3BlY2lmaWNhdGlvbi5vdXRwdXQ7XG4gICAgXG4gICAgY29uc3QgdHlwZVRvRGF0YUZpZWxkTWFwID0geyduZXdGbG9hdENvbHVtbnMnOiAnY29sdW1ucycsXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICduZXdJbnRDb2x1bW5zJzogJ2NvbHVtbnMnLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAnbmV3RmxvYXRDb2x1bW4nOiAnY29sdW1uJyxcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ25ld0ludENvbHVtbic6ICdjb2x1bW4nfTtcblxuICAgIHN3aXRjaChvdXRwdXQudHlwZSkge1xuXG4gICAgICAgIGNhc2UgTlVNX1RZUEU6XG4gICAgICAgIGNhc2UgSU5UX1RZUEU6XG4gICAgICAgIGNhc2UgRE9VQkxFX1RZUEU6XG4gICAgICAgICAgICByZXR1cm4gZnVuY1NwZWNpZmljYXRpb24uYXJndW1lbnRzW291dHB1dC5zb3VyY2VdO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSBDT0xVTU46XG4gICAgICAgICAgICByZXR1cm4gZnVuY1NwZWNpZmljYXRpb24uYXJndW1lbnRzW291dHB1dC5zb3VyY2VdLmNvbHVtbjtcbiAgICAgICAgICAgIGJyZWFrO1xuXG4gICAgICAgIGNhc2UgVEFCTEVfT0ZfQ09MVU1OUzpcbiAgICAgICAgICAgIHJldHVybiBERy5EYXRhRnJhbWUuZnJvbUNvbHVtbnMoZnVuY1NwZWNpZmljYXRpb24uYXJndW1lbnRzW291dHB1dC5zb3VyY2VdLmNvbHVtbnMpO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgY2FzZSBPQkpFQ1RTOlxuICAgICAgICAgICAgbGV0IGFycmF5VG9SZXR1cm4gPSBbXTtcbiAgICAgICAgICAgIFxuICAgICAgICAgICAgLy8gcHVzaCBkYXRhIG9mIHRoZSByZXF1aXJlZCBhcmd1bWVudHNcbiAgICAgICAgICAgIGZvcihsZXQgbmFtZSBvZiBvdXRwdXQuc291cmNlKSB7XG4gICAgICAgICAgICAgICAgbGV0IGFyZyA9IGZ1bmNTcGVjaWZpY2F0aW9uLmFyZ3VtZW50c1tuYW1lXTtcbiAgICAgICAgICAgICAgICBhcnJheVRvUmV0dXJuLnB1c2goYXJnW3R5cGVUb0RhdGFGaWVsZE1hcFthcmcudHlwZV1dKTtcbiAgICAgICAgICAgIH0gICAgICAgICAgICAgICAgXG5cbiAgICAgICAgICAgIHJldHVybiBhcnJheVRvUmV0dXJuO1xuICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgLy8gVE9ETzogcHJvY2VzcyBvdGhlciBjYXNlcyBhbmQgbWlzdGFrZXNcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIGJyZWFrO1xuICAgIH1cblxufSAvLyBnZXRPdXRwdXRcblxuLy8gQ2xlYXIgbmV3bHkgY3JlYXRlZCBkYXRhIGZpZWxkcyAobmV3IGNvbHVtbihzKSlcbmZ1bmN0aW9uIGNsZWFyTmV3bHlDcmVhdGVkRGF0YShmdW5jU3BlY2lmaWNhdGlvbkFyZ3MpIHsgXG4gICAgZm9yKGNvbnN0IGtleSBpbiBmdW5jU3BlY2lmaWNhdGlvbkFyZ3MpIHtcbiAgICAgICAgY29uc3QgYXJnID0gZnVuY1NwZWNpZmljYXRpb25BcmdzW2tleV07XG5cbiAgICAgICAgc3dpdGNoIChhcmcudHlwZSkge1xuICAgICAgICAgICAgY2FzZSBOVU1fVFlQRTpcbiAgICAgICAgICAgIGNhc2UgSU5UX1RZUEU6XG4gICAgICAgICAgICBjYXNlIERPVUJMRV9UWVBFOlxuICAgICAgICAgICAgY2FzZSBJTlRfQ09MVU1OX1RZUEU6XG4gICAgICAgICAgICBjYXNlIEZMT0FUX0NPTFVNTl9UWVBFOiAgICAgICAgICAgIFxuICAgICAgICAgICAgY2FzZSBJTlRfQ09MVU1OU19UWVBFOlxuICAgICAgICAgICAgY2FzZSBGTE9BVF9DT0xVTU5TX1RZUEU6XG4gICAgICAgICAgICAgICAgYnJlYWs7XG5cbiAgICAgICAgICAgIGNhc2UgTkVXX0lOVF9DT0xVTU5fVFlQRTpcbiAgICAgICAgICAgIGNhc2UgTkVXX0ZMT0FUX0NPTFVNTl9UWVBFOlxuICAgICAgICAgICAgICAgIGFyZy5jb2x1bW4gPSBudWxsOyAgICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgICBicmVhaztcblxuICAgICAgICAgICAgY2FzZSBORVdfSU5UX0NPTFVNTlNfVFlQRTpcbiAgICAgICAgICAgIGNhc2UgTkVXX0ZMT0FUX0NPTFVNTlNfVFlQRTpcbiAgICAgICAgICAgICAgICBhcmcuY29sdW1ucyA9IG51bGw7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIFxuICAgICAgICAgICAgLy8gVE9ETzogcHJvY2VzcyBvdGhlciBjYXNlcyBhbmQgbWlzdGFrZXNcbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgIH1cbiAgICB9XG59IC8vIGNsZWFyTmV3bHlDcmVhdGVkRGF0YVxuXG4vLyBUSEUgTUFJTiBGVU5DVElPTjogYSB3cmFwcGVyIGZvciBDKystZnVuY3Rpb24gY2FsbFxuZXhwb3J0IGZ1bmN0aW9uIGNwcFdyYXBwZXIobW9kdWxlLCBhcmdzLCBjcHBGdW5jTmFtZSwgcmV0dXJuVHlwZSkge1xuICAgIC8vIGFsbG9jYXRlIG1lbW9yeSBmb3IgYXJyYXlzIHRoYXQgYXJlIHBhc3NlZCB0byBDKystZnVuY3Rpb25cbiAgICBhbGxvY2F0ZU1lbW9yeUZvckJ1ZmZlcihtb2R1bGUsIGFyZ3MpO1xuXG4gICAgLy8gcHV0IGRhdGEgKGp1c3QgY29sdW1uKHMpKSB0byBhbGxvY2F0ZWQgYnVmZmVyc1xuICAgIHB1dERhdGFUb0J1ZmZlcihtb2R1bGUsIGFyZ3MpO1xuXG4gICAgLy8gY3JlYXRlIGFycmF5IG9mIHBhcmFtZXRlcnMgdGhhdCBhcmUgcGFzc2VkIHRvIEMrKy1mdW5jdGlvblxuICAgIGxldCBwYXJhbXMgPSBnZXRBcnJPZldhc21QYXJhbXMoYXJncyk7XG5cbiAgICAvL2NvbnNvbGUubG9nKCdwYXJhbXM6Jyk7XG4gICAgLy9jb25zb2xlLmxvZyhwYXJhbXMpO1xuXG4gICAgLy8gY3JlYXRlIGFycmF5IG9mIHBhcmFtZXRlcnMnIHR5cGVzIHRoYXQgYXJlIHBhc3NlZCB0byBDKystZnVuY3Rpb25cbiAgICBsZXQgdHlwZXMgPSBnZXRBcnJPZldhc21UeXBlcyhhcmdzKTtcbiAgICBcbiAgICAvL2NvbnNvbGUubG9nKCd0eXBlczonKTtcbiAgICAvL2NvbnNvbGUubG9nKHR5cGVzKTtcblxuICAgIC8vIGNhbGwgd2FzbS1mdW5jdGlvblxuICAgIGxldCByZXN1bHQgPSBtb2R1bGUuY2NhbGwoY3BwRnVuY05hbWUsIHJldHVyblR5cGUsIHR5cGVzLCBwYXJhbXMpO1xuICAgIFxuICAgIC8vY29uc29sZS5sb2cocmVzdWx0KTtcblxuICAgIC8vIGdldCBkYXRhIGZyb20gYnVmZmVycyAoanVzdCBjb2x1bW4ocykpXG4gICAgZ2V0RGF0YUZyb21CdWZmZXIobW9kdWxlLCBhcmdzKTsgICAgICAgIFxuXG4gICAgLy8gY2xlYXIgbWVtb3J5IHRoYXQgd2FzIHByZXZpb3VzZWx5IGFsbG9jYXRlZFxuICAgIGNsZWFyTWVtb3J5Rm9yQnVmZmVyKG1vZHVsZSwgYXJncyk7XG5cbiAgICAvL2NvbnNvbGUubG9nKCdkb25lJyk7XG5cbiAgICByZXR1cm4gcmVzdWx0O1xufVxuXG4vLyBHZXQgdGhlIHJlcXVpcmVkIG91dHB1dC5cbi8vIEl0IHRha2VzIGEgc3BlY2lmaWNhdGlvbiBvZiB0aGUgZnVuY3Rpb24gYW5kIHRoZSBkYXRhIGNvbXB1dGVkXG4vLyBhbmQgZXh0cmFjdHMgdGhlIHJlcXVpcmVkIHJlc3VsdHMuXG5leHBvcnQgZnVuY3Rpb24gZ2V0UmVzdWx0KGZ1bmNTcGVjaWZpY2F0aW9uLCBkYXRhRnJvbVdlYldvcmtlcikge1xuICAgIGZ1bmNTcGVjaWZpY2F0aW9uLmFyZ3VtZW50cy5fY2FsbFJlc3VsdCA9IGRhdGFGcm9tV2ViV29ya2VyLmNhbGxSZXN1bHQ7ICBcblxuICAgIGV4dHJhY3ROZXdseUNyZWF0ZWREYXRhKGZ1bmNTcGVjaWZpY2F0aW9uLmFyZ3VtZW50cywgZGF0YUZyb21XZWJXb3JrZXIuYXJncyk7ICAgIFxuXG4gICAgbGV0IG91dFB1dCA9IGdldE91dHB1dChmdW5jU3BlY2lmaWNhdGlvbik7XG5cbiAgICAvLyBCZWxvdywgd2UgcmVtb3ZlIG5ld2x5IGNyZWF0ZWQgY29sdW1uKHMpLCB3aGljaCBhcmUgY3JlYXRlZCBhdCB0aGUgZXh0cmFjdGlvbi1zdGVwLlxuICAgIC8vIEl0IGlzIGVzcGVjaWFsbHkgcmVxdWlyZWQsIHdoZW4gbXVsdGlwbGUgY2FsbCBvZiB3YXNtLWZ1bmN0aW9ucyBpbiB3ZWJ3b3JrZXIuXG4gICAgY2xlYXJOZXdseUNyZWF0ZWREYXRhKGZ1bmNTcGVjaWZpY2F0aW9uLmFyZ3VtZW50cyk7XG5cbiAgICByZXR1cm4gb3V0UHV0O1xufSIsImltcG9ydCAqIGFzIERHIGZyb20gJ2RhdGFncm9rLWFwaS9kZyc7XG4vLyBJbnB1dHMgY29ycmVjdG5lc3MgY2hlY2sgdG9vbHNcbi8vTGltaXRhdGlvbiBjb25zdGFudHNcbmNvbnN0IENPTVBfTUlOID0gMTtcbmNvbnN0IFNBTVBMRVNfQ09VTlRfTUlOID0gMTtcbmNvbnN0IEZFQVRVUkVTX0NPVU5UX01JTiA9IDE7XG5jb25zdCBQRVJDRU5UQUdFX01JTiA9IDA7XG5jb25zdCBQRVJDRU5UQUdFX01BWCA9IDEwMDtcbmNvbnN0IE1BWF9FTEVNRU5UU19DT1VOVCA9IDEwMDAwMDAwMDtcbi8vIEVycm9yIG1lc3NhZ2VzXG5jb25zdCBDT01QX1BPU0lUVkVfTUVTID0gJ2NvbXBvbmVudHMgbXVzdCBiZSBwb3NpdGl2ZS4nO1xuY29uc3QgQ09NUF9FWENFU1MgPSAnY29tcG9uZW50cyBtdXN0IG5vdCBiZSBncmVhdGVyIHRoYW4gZmVhdHVyZXMgY291bnQuJztcbmNvbnN0IElOQ09SRVJSRUNUX01JTl9NQVhfTUVTID0gJ21pbiBtdXN0IGJlIGxlc3MgdGhhbiBtYXguJztcbmNvbnN0IElOQ09SRVJSRUNUX0ZFQVRVUkVTX01FUyA9ICdmZWF0dXJlcyBtdXN0IGJlIHBvc2l0aXZlLic7XG5jb25zdCBJTkNPUkVSUkVDVF9TQU1QTEVTX01FUyA9ICdzYW1wbGVzIG11c3QgYmUgcG9zaXRpdmUuJztcbmNvbnN0IElOQ09SRVJSRUNUX1BFUkNFTlRBR0VfTUVTID0gJ3Zpb2xhdG9ycyBwZXJjZW50YWdlIG11c3QgYmUgZnJvbSB0aGUgcmFuZ2UgZnJvbSAwIHRvIDEwMC4nO1xuY29uc3QgREFUQUZSQU1FX0lTX1RPT19CSUdfTUVTID0gJ2RhdGFmcmFtZSBpcyB0b28gYmlnLic7XG5jb25zdCBVTlNVUFBPUlRFRF9DT0xVTU5fVFlQRV9NRVMgPSAndW5zdXBwb3J0ZWQgY29sdW1uIHR5cGU6ICc7XG5jb25zdCBJTkNPUlJFQ1RfTUlOX0RJU1RfTUVTID0gJ21pbiBkaXN0YW5jZSBtdXN0IGJlIHBvc2l0aXZlLic7XG5jb25zdCBJTkNPUlJFQ1RfU1BSRUFEX01FUyA9ICdzcHJlYWQgbXVzdCBiZSBwb3NpdGl2ZS4nO1xuY29uc3QgSU5DT1JSRUNUX0VQT0NIX01FUyA9ICdudW1iZXIgb2YgZXBvY2ggbXVzdCBiZSBhdCBsZWFzdCAxLic7XG5jb25zdCBJTkNPUlJFQ1RfTkVJQk9SU19NRVMgPSAnbnVtYmVyIG9mIG5laWJvcnMgbXVzdCBiZSBhdCBsZWFzdCAyIGFuZCBub3QgZ3JlYXRlciB0aGFuIHNhbXBsZXMgY291bnQuJztcbmNvbnN0IElOQ09SUkVDVF9JVEVSQVRJT05TX01FUyA9ICdudW1iZXIgb2YgaXRlcmF0aW9ucyBtdXN0IGJlIGF0IGxlYXN0IDEuJztcbmNvbnN0IElOQ09SUkVDVF9MRUFSTklOR19SQVRFX01FUyA9ICdsZWFybmluZyByYXRlIG11c3QgYmUgcG9zaXRpdmUuJztcbmNvbnN0IElOQ09SUkVDVF9QRVJQTEVYSVRZX01FUyA9ICdwZXJwbGV4aXR5IG11c3QgYmUgYXQgbGVhc3QgMiBhbmQgbm90IGdyZWF0ZXIgdGhhbiBzYW1wbGVzIGNvdW50Lic7XG5jb25zdCBJTkNPUlJFQ1RfU1RFUFNfTUVTID0gJ3N0ZXBzIG11c3QgYmUgbm9uLW5lZ2F0aXZlLic7XG5jb25zdCBJTkNPUlJFQ1RfQ1lDTEVTX01FUyA9ICdjeWNsZXMgbXVzdCBiZSBwb3NpdGl2ZS4nO1xuY29uc3QgSU5DT1JSRUNUX0NVVE9GRl9NRVMgPSAnY3V0b2ZmIG11c3QgYmUgbm9uLW5lZ2F0aXZlLic7XG4vKiogQ2hlY2sgY29sdW1uIHR5cGUgKi9cbmV4cG9ydCBmdW5jdGlvbiBjaGVja0NvbHVtblR5cGUoY29sKSB7XG4gICAgaWYgKChjb2wudHlwZSAhPSBERy5DT0xVTU5fVFlQRS5GTE9BVCkgJiYgKGNvbC50eXBlICE9IERHLkNPTFVNTl9UWVBFLklOVCkpXG4gICAgICAgIHRocm93IG5ldyBFcnJvcihVTlNVUFBPUlRFRF9DT0xVTU5fVFlQRV9NRVMgKyBjb2wudHlwZSk7XG59XG4vKiogQ2hlY2sgbWlzc2luZyB2YWx1ZXMgKi9cbmV4cG9ydCBmdW5jdGlvbiBjaGVja01pc3NpbmdWYWxzKGNvbCkge1xuICAgIGlmIChjb2wuc3RhdHMubWlzc2luZ1ZhbHVlQ291bnQgPiAwKVxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYFRoZSBjb2x1bW4gJyR7Y29sLm5hbWV9JyBoYXMgbWlzc2luZyB2YWx1ZXMuYCk7XG59XG4vLyBDaGVjayBkaW1lbnNpb24gcmVkdWNlciBpbnB1dHNcbmV4cG9ydCBmdW5jdGlvbiBjaGVja0RpbWVuc2lvblJlZHVjZXJJbnB1dHMoZmVhdHVyZXMsIGNvbXBvbmVudHMpIHtcbiAgICBpZiAoY29tcG9uZW50cyA8IENPTVBfTUlOKVxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoQ09NUF9QT1NJVFZFX01FUyk7XG4gICAgaWYgKGNvbXBvbmVudHMgPiBmZWF0dXJlcy5sZW5ndGgpXG4gICAgICAgIHRocm93IG5ldyBFcnJvcihDT01QX0VYQ0VTUyk7XG4gICAgZm9yIChjb25zdCBjb2wgb2YgZmVhdHVyZXMpIHtcbiAgICAgICAgY2hlY2tDb2x1bW5UeXBlKGNvbCk7XG4gICAgICAgIGNoZWNrTWlzc2luZ1ZhbHMoY29sKTtcbiAgICB9XG59XG4vLyBDaGVjayBVTUFQIGlucHV0c1xuZXhwb3J0IGZ1bmN0aW9uIGNoZWNrVU1BUGlucHV0cyhmZWF0dXJlcywgY29tcG9uZW50cywgZXBvY2hzLCBuZWlnaGJvcnMsIG1pbkRpc3QsIHNwcmVhZCkge1xuICAgIC8vIEdlbmVyYWwgZGltIHJlZHVjZXIgY2hlY2tzXG4gICAgY2hlY2tEaW1lbnNpb25SZWR1Y2VySW5wdXRzKGZlYXR1cmVzLCBjb21wb25lbnRzKTtcbiAgICAvLyBDaGVjayBkYXRhIHRvdGFsIHNpemVcbiAgICBpZiAoZmVhdHVyZXMubGVuZ3RoICogZmVhdHVyZXMuYnlJbmRleCgwKS5sZW5ndGggPiBNQVhfRUxFTUVOVFNfQ09VTlQpXG4gICAgICAgIHRocm93IG5ldyBFcnJvcihEQVRBRlJBTUVfSVNfVE9PX0JJR19NRVMpO1xuICAgIC8vIFVNQVAgc3BlY2lmaWMgY2hlY2tzXG4gICAgaWYgKG1pbkRpc3QgPD0gMClcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKElOQ09SUkVDVF9NSU5fRElTVF9NRVMpO1xuICAgIGlmIChzcHJlYWQgPD0gMClcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKElOQ09SUkVDVF9TUFJFQURfTUVTKTtcbiAgICBpZiAoZXBvY2hzIDwgMSlcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKElOQ09SUkVDVF9FUE9DSF9NRVMpO1xuICAgIGlmICgobmVpZ2hib3JzIDwgMikgfHwgKG5laWdoYm9ycyA+IGZlYXR1cmVzLmJ5SW5kZXgoMCkubGVuZ3RoKSlcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKElOQ09SUkVDVF9ORUlCT1JTX01FUyk7XG59XG4vLyBDaGVjayB0LVNORSBpbnB1dHNcbmV4cG9ydCBmdW5jdGlvbiBjaGVja1RTTkVpbnB1dHMoZmVhdHVyZXMsIGNvbXBvbmVudHMsIGxlYXJuaW5nUmF0ZSwgcGVycGxleGl0eSwgaXRlcmF0aW9ucykge1xuICAgIC8vIEdlbmVyYWwgZGltIHJlZHVjZXIgY2hlY2tzXG4gICAgY2hlY2tEaW1lbnNpb25SZWR1Y2VySW5wdXRzKGZlYXR1cmVzLCBjb21wb25lbnRzKTtcbiAgICAvLyBDaGVjayBkYXRhIHRvdGFsIHNpemVcbiAgICBpZiAoZmVhdHVyZXMubGVuZ3RoICogZmVhdHVyZXMuYnlJbmRleCgwKS5sZW5ndGggPiBNQVhfRUxFTUVOVFNfQ09VTlQpXG4gICAgICAgIHRocm93IG5ldyBFcnJvcihEQVRBRlJBTUVfSVNfVE9PX0JJR19NRVMpO1xuICAgIC8vIHQtU05FIHNwZWNpZmljIGNoZWNrc1xuICAgIGlmIChsZWFybmluZ1JhdGUgPCAwKVxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoSU5DT1JSRUNUX0xFQVJOSU5HX1JBVEVfTUVTKTtcbiAgICBpZiAoaXRlcmF0aW9ucyA8IDEpXG4gICAgICAgIHRocm93IG5ldyBFcnJvcihJTkNPUlJFQ1RfSVRFUkFUSU9OU19NRVMpO1xuICAgIGlmICgocGVycGxleGl0eSA8IDIpIHx8IChwZXJwbGV4aXR5ID4gZmVhdHVyZXMuYnlJbmRleCgwKS5sZW5ndGgpKVxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoSU5DT1JSRUNUX1BFUlBMRVhJVFlfTUVTKTtcbn1cbi8vIENoZWNrIFNQRSBpbnB1dHNcbmV4cG9ydCBmdW5jdGlvbiBjaGVja1NQRWlucHV0cyhmZWF0dXJlcywgZGltZW5zaW9uLCBzdGVwcywgY3ljbGVzLCBjdXRvZmYsIGxhbWJkYSkge1xuICAgIC8vIEdlbmVyYWwgZGltIHJlZHVjZXIgY2hlY2tzXG4gICAgY2hlY2tEaW1lbnNpb25SZWR1Y2VySW5wdXRzKGZlYXR1cmVzLCBkaW1lbnNpb24pO1xuICAgIC8vIENoZWNrIGRhdGEgdG90YWwgc2l6ZVxuICAgIGlmIChmZWF0dXJlcy5sZW5ndGggKiBmZWF0dXJlcy5ieUluZGV4KDApLmxlbmd0aCA+IE1BWF9FTEVNRU5UU19DT1VOVClcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKERBVEFGUkFNRV9JU19UT09fQklHX01FUyk7XG4gICAgLy8gU1BFIHNwZWNpZmljIGNoZWNrc1xuICAgIGlmIChzdGVwcyA8IDApXG4gICAgICAgIHRocm93IG5ldyBFcnJvcihJTkNPUlJFQ1RfU1RFUFNfTUVTKTtcbiAgICBpZiAoY3ljbGVzIDw9IDApXG4gICAgICAgIHRocm93IG5ldyBFcnJvcihJTkNPUlJFQ1RfQ1lDTEVTX01FUyk7XG4gICAgaWYgKGN1dG9mZiA8IDApXG4gICAgICAgIHRocm93IG5ldyBFcnJvcihJTkNPUlJFQ1RfQ1VUT0ZGX01FUyk7XG4gICAgaWYgKGxhbWJkYSA8PSAwKVxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoSU5DT1JSRUNUX0xFQVJOSU5HX1JBVEVfTUVTKTtcbn1cbi8vIENoZWNrIHdhc20gZGltZW5zaW9uIHJlZHVjZXIgaW5wdXRzXG5leHBvcnQgZnVuY3Rpb24gY2hlY2tXYXNtRGltZW5zaW9uUmVkdWNlcklucHV0cyhmZWF0dXJlcywgY29tcG9uZW50cykge1xuICAgIC8vIEdlbmVyYWwgZGltIHJlZHVjZXIgY2hlY2tzXG4gICAgY2hlY2tEaW1lbnNpb25SZWR1Y2VySW5wdXRzKGZlYXR1cmVzLCBjb21wb25lbnRzKTtcbiAgICAvLyBDaGVjayBkYXRhIHRvdGFsIHNpemVcbiAgICBpZiAoZmVhdHVyZXMubGVuZ3RoICogZmVhdHVyZXMuYnlJbmRleCgwKS5sZW5ndGggPiBNQVhfRUxFTUVOVFNfQ09VTlQpXG4gICAgICAgIHRocm93IG5ldyBFcnJvcihEQVRBRlJBTUVfSVNfVE9PX0JJR19NRVMpO1xufVxuLy8gQ2hlY2sgaW5wdXRzIG9mIGRhdGEgZm9yIFNWTSB0ZXN0aW5nIGdlbmVyYXRvclxuZXhwb3J0IGZ1bmN0aW9uIGNoZWNrR2VuZXJhdG9yU1ZNaW5wdXRzKHNhbXBsZXNDb3VudCwgZmVhdHVyZXNDb3VudCwgbWluLCBtYXgsIHZpb2xhdG9yc1BlcmNlbnRhZ2UpIHtcbiAgICBpZiAobWluID49IG1heClcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKElOQ09SRVJSRUNUX01JTl9NQVhfTUVTKTtcbiAgICBpZiAoZmVhdHVyZXNDb3VudCA8IEZFQVRVUkVTX0NPVU5UX01JTilcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKElOQ09SRVJSRUNUX0ZFQVRVUkVTX01FUyk7XG4gICAgaWYgKHNhbXBsZXNDb3VudCA8IFNBTVBMRVNfQ09VTlRfTUlOKVxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoSU5DT1JFUlJFQ1RfU0FNUExFU19NRVMpO1xuICAgIGlmICgodmlvbGF0b3JzUGVyY2VudGFnZSA8IFBFUkNFTlRBR0VfTUlOKSB8fCAodmlvbGF0b3JzUGVyY2VudGFnZSA+IFBFUkNFTlRBR0VfTUFYKSlcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKElOQ09SRVJSRUNUX1BFUkNFTlRBR0VfTUVTKTtcbn1cbi8vIFJldHVybnMgcm93cyBvZiBjb2x1bW4gZGF0YVxuZXhwb3J0IGZ1bmN0aW9uIGdldFJvd3NPZk51bWVyaWNhbENvbHVtbm5zKGNvbHVtbkxpc3QpIHtcbiAgICBjb25zdCBjb2x1bW5zID0gY29sdW1uTGlzdC50b0xpc3QoKTtcbiAgICBjb25zdCByb3dDb3VudCA9IGNvbHVtbnNbMF0ubGVuZ3RoO1xuICAgIGNvbnN0IGNvbENvdW50ID0gY29sdW1ucy5sZW5ndGg7XG4gICAgY29uc3Qgb3V0cHV0ID0gW107XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCByb3dDb3VudDsgKytpKVxuICAgICAgICBvdXRwdXQucHVzaChBcnJheShjb2xDb3VudCkpO1xuICAgIGZvciAobGV0IGogPSAwOyBqIDwgY29sQ291bnQ7ICsraikge1xuICAgICAgICBjb25zdCBjb2wgPSBjb2x1bW5zW2pdO1xuICAgICAgICBjaGVja0NvbHVtblR5cGUoY29sKTtcbiAgICAgICAgY29uc3QgYXJyYXkgPSBjb2wuZ2V0UmF3RGF0YSgpO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHJvd0NvdW50OyArK2kpXG4gICAgICAgICAgICBvdXRwdXRbaV1bal0gPSBhcnJheVtpXTtcbiAgICB9XG4gICAgcmV0dXJuIG91dHB1dDtcbn1cbiIsIi8vIEV4cGxvcmF0b3J5IGRhdGEgYW5hbHlzaXMgKEVEQSkgdG9vbHNcbnZhciBfX2F3YWl0ZXIgPSAodGhpcyAmJiB0aGlzLl9fYXdhaXRlcikgfHwgZnVuY3Rpb24gKHRoaXNBcmcsIF9hcmd1bWVudHMsIFAsIGdlbmVyYXRvcikge1xuICAgIGZ1bmN0aW9uIGFkb3B0KHZhbHVlKSB7IHJldHVybiB2YWx1ZSBpbnN0YW5jZW9mIFAgPyB2YWx1ZSA6IG5ldyBQKGZ1bmN0aW9uIChyZXNvbHZlKSB7IHJlc29sdmUodmFsdWUpOyB9KTsgfVxuICAgIHJldHVybiBuZXcgKFAgfHwgKFAgPSBQcm9taXNlKSkoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgICBmdW5jdGlvbiBmdWxmaWxsZWQodmFsdWUpIHsgdHJ5IHsgc3RlcChnZW5lcmF0b3IubmV4dCh2YWx1ZSkpOyB9IGNhdGNoIChlKSB7IHJlamVjdChlKTsgfSB9XG4gICAgICAgIGZ1bmN0aW9uIHJlamVjdGVkKHZhbHVlKSB7IHRyeSB7IHN0ZXAoZ2VuZXJhdG9yW1widGhyb3dcIl0odmFsdWUpKTsgfSBjYXRjaCAoZSkgeyByZWplY3QoZSk7IH0gfVxuICAgICAgICBmdW5jdGlvbiBzdGVwKHJlc3VsdCkgeyByZXN1bHQuZG9uZSA/IHJlc29sdmUocmVzdWx0LnZhbHVlKSA6IGFkb3B0KHJlc3VsdC52YWx1ZSkudGhlbihmdWxmaWxsZWQsIHJlamVjdGVkKTsgfVxuICAgICAgICBzdGVwKChnZW5lcmF0b3IgPSBnZW5lcmF0b3IuYXBwbHkodGhpc0FyZywgX2FyZ3VtZW50cyB8fCBbXSkpLm5leHQoKSk7XG4gICAgfSk7XG59O1xuaW1wb3J0ICogYXMgREcgZnJvbSAnZGF0YWdyb2stYXBpL2RnJztcbmltcG9ydCB7IF9wcmluY2lwYWxDb21wb25lbnRBbmFseXNpc0luV2ViV29ya2VyLCBfcGFydGlhbExlYXN0U3F1YXJlUmVncmVzc2lvbkluV2ViV29ya2VyIH0gZnJvbSAnLi4vd2FzbS9FREFBUEknO1xuaW1wb3J0IHsgY2hlY2tXYXNtRGltZW5zaW9uUmVkdWNlcklucHV0cywgY2hlY2tVTUFQaW5wdXRzLCBjaGVja1RTTkVpbnB1dHMsIGdldFJvd3NPZk51bWVyaWNhbENvbHVtbm5zIH0gZnJvbSAnLi91dGlscyc7XG4vLyBQcmluY2lwYWwgY29tcG9uZW50cyBhbmFseXNpcyAoUENBKVxuZXhwb3J0IGZ1bmN0aW9uIGNvbXB1dGVQQ0EodGFibGUsIGZlYXR1cmVzLCBjb21wb25lbnRzLCBjZW50ZXIsIHNjYWxlKSB7XG4gICAgcmV0dXJuIF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgY2hlY2tXYXNtRGltZW5zaW9uUmVkdWNlcklucHV0cyhmZWF0dXJlcywgY29tcG9uZW50cyk7XG4gICAgICAgIGNvbnN0IGNlbnRlck51bSA9IGNlbnRlciA/IDEgOiAwO1xuICAgICAgICBjb25zdCBzY2FsZU51bSA9IHNjYWxlID8gMSA6IDA7XG4gICAgICAgIHJldHVybiB5aWVsZCBfcHJpbmNpcGFsQ29tcG9uZW50QW5hbHlzaXNJbldlYldvcmtlcih0YWJsZSwgZmVhdHVyZXMsIGNvbXBvbmVudHMsIGNlbnRlck51bSwgc2NhbGVOdW0pO1xuICAgIH0pO1xufVxuLy8gUGFydGlhbCBsZWFzdCBzcXVhcmUgcmVncmVzc2lvbiAoUExTKTogVE8gUkVNT1ZFXG5leHBvcnQgZnVuY3Rpb24gY29tcHV0ZVBMUyh0YWJsZSwgZmVhdHVyZXMsIHByZWRpY3QsIGNvbXBvbmVudHMpIHtcbiAgICByZXR1cm4gX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuICAgICAgICAvLyBJbnB1dHMgYXJlIGNoZWNrZWQgaW4gdGhlIHNhbWUgbWFubmVyIGFzIGluIFBDQSwgc2luY2UgdGhlIHNhbWUgY29tcHV0YXRpb25zIGFyZSBhcHBsaWVkLlxuICAgICAgICBjaGVja1dhc21EaW1lbnNpb25SZWR1Y2VySW5wdXRzKGZlYXR1cmVzLCBjb21wb25lbnRzKTtcbiAgICAgICAgcmV0dXJuIHlpZWxkIF9wYXJ0aWFsTGVhc3RTcXVhcmVSZWdyZXNzaW9uSW5XZWJXb3JrZXIodGFibGUsIGZlYXR1cmVzLCBwcmVkaWN0LCBjb21wb25lbnRzKTtcbiAgICB9KTtcbn1cbi8vIFVuaWZvcm0gTWFuaWZvbGQgQXBwcm94aW1hdGlvbiBhbmQgUHJvamVjdGlvbiAoVU1BUClcbmV4cG9ydCBmdW5jdGlvbiBjb21wdXRlVU1BUChmZWF0dXJlcywgY29tcG9uZW50cywgZXBvY2hzLCBuZWlnaGJvcnMsIG1pbkRpc3QsIHNwcmVhZCkge1xuICAgIHJldHVybiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG4gICAgICAgIC8vIGNoZWNrIGlucHV0c1xuICAgICAgICBjaGVja1VNQVBpbnB1dHMoZmVhdHVyZXMsIGNvbXBvbmVudHMsIGVwb2NocywgbmVpZ2hib3JzLCBtaW5EaXN0LCBzcHJlYWQpO1xuICAgICAgICAvLyBnZXQgcm93LWJ5LXJvdyBkYXRhXG4gICAgICAgIGNvbnN0IGRhdGEgPSBnZXRSb3dzT2ZOdW1lcmljYWxDb2x1bW5ucyhmZWF0dXJlcyk7XG4gICAgICAgIGxldCB3b3JrZXJPdXRwdXQ7XG4gICAgICAgIC8vIFVNQVAgaW4gd2Vid29ya2VyXG4gICAgICAgIGNvbnN0IHByb21pc2UgPSBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgX3JlamVjdCkgPT4ge1xuICAgICAgICAgICAgY29uc3Qgd29ya2VyID0gbmV3IFdvcmtlcihuZXcgVVJMKCd3b3JrZXJzL3VtYXAtd29ya2VyLnRzJywgaW1wb3J0Lm1ldGEudXJsKSk7XG4gICAgICAgICAgICB3b3JrZXIucG9zdE1lc3NhZ2Uoe1xuICAgICAgICAgICAgICAgIGRhdGE6IGRhdGEsXG4gICAgICAgICAgICAgICAgb3B0aW9uczoge1xuICAgICAgICAgICAgICAgICAgICBuQ29tcG9uZW50czogY29tcG9uZW50cyxcbiAgICAgICAgICAgICAgICAgICAgbkVwb2NoczogZXBvY2hzLFxuICAgICAgICAgICAgICAgICAgICBuTmVpZ2hib3JzOiBuZWlnaGJvcnMsXG4gICAgICAgICAgICAgICAgICAgIG1pbkRpc3Q6IG1pbkRpc3QsXG4gICAgICAgICAgICAgICAgICAgIHNwcmVhZDogc3ByZWFkLFxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgd29ya2VyLm9ubWVzc2FnZSA9IGZ1bmN0aW9uIChlKSB7XG4gICAgICAgICAgICAgICAgd29ya2VyLnRlcm1pbmF0ZSgpO1xuICAgICAgICAgICAgICAgIHJlc29sdmUoZS5kYXRhLmVtYmVkZGluZ3MpO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgfSk7XG4gICAgICAgIHlpZWxkIHByb21pc2UudGhlbigocmVzdWx0KSA9PiB7IHdvcmtlck91dHB1dCA9IHJlc3VsdDsgfSwgKF9lcnJvcikgPT4geyB0aHJvdyBuZXcgRXJyb3IoJ2FwcGx5aW5nIFVNQVAgZmFpbHMuJyk7IH0pO1xuICAgICAgICBjb25zdCBlbWJlZGRpbmdzID0gd29ya2VyT3V0cHV0O1xuICAgICAgICBjb25zdCByb3dDb3VudCA9IGVtYmVkZGluZ3MubGVuZ3RoO1xuICAgICAgICBjb25zdCByYW5nZSA9IFsuLi5BcnJheShjb21wb25lbnRzKS5rZXlzKCldO1xuICAgICAgICAvLyBDcmVhdGUgb3V0cHV0XG4gICAgICAgIC8vIGNvbHVtbnMgZGF0YVxuICAgICAgICBjb25zdCB1bWFwQ29sdW1uc0RhdGEgPSByYW5nZS5tYXAoKF8pID0+IG5ldyBGbG9hdDMyQXJyYXkocm93Q291bnQpKTtcbiAgICAgICAgLy8gcGVyZm9ybSB0cmFuc3BvbmF0aW9uXG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcm93Q291bnQ7ICsraSkge1xuICAgICAgICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCBjb21wb25lbnRzOyArK2opXG4gICAgICAgICAgICAgICAgdW1hcENvbHVtbnNEYXRhW2pdW2ldID0gZW1iZWRkaW5nc1tpXVtqXTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gREcuRGF0YUZyYW1lLmZyb21Db2x1bW5zKHJhbmdlLm1hcCgoaSkgPT4gREcuQ29sdW1uLmZyb21GbG9hdDMyQXJyYXkoJ1VNQVAnICsgaS50b1N0cmluZygpLCB1bWFwQ29sdW1uc0RhdGFbaV0pKSk7XG4gICAgfSk7XG59IC8vIGNvbXB1dGVVTUFQXG4vLyB0LWRpc3RyaWJ1dGVkIHN0b2NoYXN0aWMgbmVpZ2hib3IgZW1iZWRkaW5nICh0LVNORSlcbmV4cG9ydCBmdW5jdGlvbiBjb21wdXRlVFNORShmZWF0dXJlcywgY29tcG9uZW50cywgbGVhcm5pbmdSYXRlLCBwZXJwbGV4aXR5LCBpdGVyYXRpb25zKSB7XG4gICAgcmV0dXJuIF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgLy8gY2hlY2sgaW5wdXRzXG4gICAgICAgIGNoZWNrVFNORWlucHV0cyhmZWF0dXJlcywgY29tcG9uZW50cywgbGVhcm5pbmdSYXRlLCBwZXJwbGV4aXR5LCBpdGVyYXRpb25zKTtcbiAgICAgICAgLy8gZ2V0IHJvdy1ieS1yb3cgZGF0YVxuICAgICAgICBjb25zdCBkYXRhID0gZ2V0Um93c09mTnVtZXJpY2FsQ29sdW1ubnMoZmVhdHVyZXMpO1xuICAgICAgICBsZXQgd29ya2VyT3V0cHV0O1xuICAgICAgICAvLyB0LVNORSBpbiB3ZWJ3b3JrZXJcbiAgICAgICAgY29uc3QgcHJvbWlzZSA9IG5ldyBQcm9taXNlKChyZXNvbHZlLCBfcmVqZWN0KSA9PiB7XG4gICAgICAgICAgICBjb25zdCB3b3JrZXIgPSBuZXcgV29ya2VyKG5ldyBVUkwoJ3dvcmtlcnMvdHNuZS13b3JrZXIudHMnLCBpbXBvcnQubWV0YS51cmwpKTtcbiAgICAgICAgICAgIHdvcmtlci5wb3N0TWVzc2FnZSh7XG4gICAgICAgICAgICAgICAgZGF0YTogZGF0YSxcbiAgICAgICAgICAgICAgICBvcHRpb25zOiB7XG4gICAgICAgICAgICAgICAgICAgIGxlYXJuaW5nUmF0ZTogbGVhcm5pbmdSYXRlLFxuICAgICAgICAgICAgICAgICAgICBwZXJwbGV4aXR5OiBwZXJwbGV4aXR5LFxuICAgICAgICAgICAgICAgICAgICBjb21wb25lbnRzOiBjb21wb25lbnRzLFxuICAgICAgICAgICAgICAgICAgICBpdGVyYXRpb25zOiBpdGVyYXRpb25zLFxuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgd29ya2VyLm9ubWVzc2FnZSA9IGZ1bmN0aW9uIChlKSB7XG4gICAgICAgICAgICAgICAgd29ya2VyLnRlcm1pbmF0ZSgpO1xuICAgICAgICAgICAgICAgIHJlc29sdmUoZS5kYXRhLmVtYmVkZGluZ3MpO1xuICAgICAgICAgICAgfTtcbiAgICAgICAgfSk7XG4gICAgICAgIHlpZWxkIHByb21pc2UudGhlbigocmVzdWx0KSA9PiB7IHdvcmtlck91dHB1dCA9IHJlc3VsdDsgfSwgKF9lcnJvcikgPT4geyB0aHJvdyBuZXcgRXJyb3IoJ2FwcGx5aW5nIHQtU05FIGZhaWxzLicpOyB9KTtcbiAgICAgICAgY29uc3QgZW1iZWRkaW5ncyA9IHdvcmtlck91dHB1dDtcbiAgICAgICAgY29uc3Qgcm93Q291bnQgPSBlbWJlZGRpbmdzLmxlbmd0aDtcbiAgICAgICAgY29uc3QgcmFuZ2UgPSBbLi4uQXJyYXkoY29tcG9uZW50cykua2V5cygpXTtcbiAgICAgICAgLy8gQ3JlYXRlIG91dHB1dFxuICAgICAgICAvLyBjb2x1bW5zIGRhdGFcbiAgICAgICAgY29uc3QgdW1hcENvbHVtbnNEYXRhID0gcmFuZ2UubWFwKChfKSA9PiBuZXcgRmxvYXQzMkFycmF5KHJvd0NvdW50KSk7XG4gICAgICAgIC8vIHBlcmZvcm0gdHJhbnNwb25hdGlvblxuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHJvd0NvdW50OyArK2kpIHtcbiAgICAgICAgICAgIGZvciAobGV0IGogPSAwOyBqIDwgY29tcG9uZW50czsgKytqKVxuICAgICAgICAgICAgICAgIHVtYXBDb2x1bW5zRGF0YVtqXVtpXSA9IGVtYmVkZGluZ3NbaV1bal07XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIERHLkRhdGFGcmFtZS5mcm9tQ29sdW1ucyhyYW5nZS5tYXAoKGkpID0+IERHLkNvbHVtbi5mcm9tRmxvYXQzMkFycmF5KCd0U05FJyArIGkudG9TdHJpbmcoKSwgdW1hcENvbHVtbnNEYXRhW2ldKSkpO1xuICAgIH0pO1xufSAvLyBjb21wdXRlVFNORVxuIiwiLyogZXNsaW50LWRpc2FibGUgbWF4LWxlbiAqL1xuLy8gVGVzdCBkYXRhIGdlbmVyYXRpb24gdG9vbHNcbnZhciBfX2F3YWl0ZXIgPSAodGhpcyAmJiB0aGlzLl9fYXdhaXRlcikgfHwgZnVuY3Rpb24gKHRoaXNBcmcsIF9hcmd1bWVudHMsIFAsIGdlbmVyYXRvcikge1xuICAgIGZ1bmN0aW9uIGFkb3B0KHZhbHVlKSB7IHJldHVybiB2YWx1ZSBpbnN0YW5jZW9mIFAgPyB2YWx1ZSA6IG5ldyBQKGZ1bmN0aW9uIChyZXNvbHZlKSB7IHJlc29sdmUodmFsdWUpOyB9KTsgfVxuICAgIHJldHVybiBuZXcgKFAgfHwgKFAgPSBQcm9taXNlKSkoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgICBmdW5jdGlvbiBmdWxmaWxsZWQodmFsdWUpIHsgdHJ5IHsgc3RlcChnZW5lcmF0b3IubmV4dCh2YWx1ZSkpOyB9IGNhdGNoIChlKSB7IHJlamVjdChlKTsgfSB9XG4gICAgICAgIGZ1bmN0aW9uIHJlamVjdGVkKHZhbHVlKSB7IHRyeSB7IHN0ZXAoZ2VuZXJhdG9yW1widGhyb3dcIl0odmFsdWUpKTsgfSBjYXRjaCAoZSkgeyByZWplY3QoZSk7IH0gfVxuICAgICAgICBmdW5jdGlvbiBzdGVwKHJlc3VsdCkgeyByZXN1bHQuZG9uZSA/IHJlc29sdmUocmVzdWx0LnZhbHVlKSA6IGFkb3B0KHJlc3VsdC52YWx1ZSkudGhlbihmdWxmaWxsZWQsIHJlamVjdGVkKTsgfVxuICAgICAgICBzdGVwKChnZW5lcmF0b3IgPSBnZW5lcmF0b3IuYXBwbHkodGhpc0FyZywgX2FyZ3VtZW50cyB8fCBbXSkpLm5leHQoKSk7XG4gICAgfSk7XG59O1xuaW1wb3J0ICogYXMgREcgZnJvbSAnZGF0YWdyb2stYXBpL2RnJztcbmltcG9ydCB7IGNoZWNrR2VuZXJhdG9yU1ZNaW5wdXRzIH0gZnJvbSAnLi91dGlscyc7XG5pbXBvcnQgeyBfZ2VuZXJhdGVEYXRhc2V0SW5XZWJXb3JrZXIgfSBmcm9tICcuLi93YXNtL0VEQUFQSSc7XG5jb25zdCBTVk1fR0VOX0ZFQVRVUkVTX0lOREVYID0gMDtcbmNvbnN0IFNWTV9HRU5fTEFCRUxTX0lOREVYID0gMTtcbmNvbnN0IFNWTV9GRUFUVVJFX05BTUUgPSAnRmVhdHVyZSAjJztcbmNvbnN0IFNWTV9MQUJFTF9OQU1FID0gJ0xhYmVsJztcbi8vIFJldHVybnMgdGhlIGRhdGFmcmFtZSBcImNhcnNcIlxuZXhwb3J0IGZ1bmN0aW9uIGNhcnNEYXRhZnJhbWUoKSB7XG4gICAgcmV0dXJuIERHLkRhdGFGcmFtZS5mcm9tQ29sdW1ucyhbXG4gICAgICAgIERHLkNvbHVtbi5mcm9tU3RyaW5ncygnbW9kZWwnLCBbJ2FsZmFyb21lbycsICdhdWRpJywgJ2JtdycsICdjaGV2cm9sZXQnLCAnZG9kZ2UxJywgJ2RvZGdlMicsICdob25kYTEnLCAnaG9uZGEyJywgJ2lzdXp1JywgJ2phZ3VhcicsICdtYXpkYScsICdtZXJjZWRlcycsICdtZXJjdXJ5JywgJ21pdHN1YmlzaGknLCAnbmlzc2FuMScsICduaXNzYW4yJywgJ3BldWdvdCcsICdwbHltb3V0aCcsICdwb3JzY2hlJywgJ3NhYWInLCAnc3ViYXJ1JywgJ3RveW90YTEnLCAndG95b3RhMicsICd0b3lvdGEzJywgJ3RveW90YTQnLCAndm9sa3N3YWdlbjEnLCAndm9sa3N3YWdlbjInLCAndm9sdm8xJywgJ3ZvbHZvMicsICd2b2x2bzMnXSksXG4gICAgICAgIERHLkNvbHVtbi5mcm9tSW50MzJBcnJheSgnZGllc2VsJywgbmV3IEludDMyQXJyYXkoWzAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDAsIDEsIDAsIDAsIDAsIDAsIDAsIDEsIDAsIDAsIDAsIDAsIDEsIDAsIDEsIDEsIDAsIDAsIDAsIDFdKSksXG4gICAgICAgIERHLkNvbHVtbi5mcm9tSW50MzJBcnJheSgndHVyYm8nLCBuZXcgSW50MzJBcnJheShbMCwgMCwgMCwgMCwgMSwgMCwgMCwgMCwgMCwgMCwgMCwgMSwgMSwgMCwgMCwgMCwgMCwgMSwgMCwgMCwgMCwgMCwgMCwgMCwgMSwgMCwgMCwgMCwgMSwgMV0pKSxcbiAgICAgICAgREcuQ29sdW1uLmZyb21JbnQzMkFycmF5KCd0d28uZG9vcnMnLCBuZXcgSW50MzJBcnJheShbMSwgMCwgMSwgMCwgMSwgMCwgMSwgMCwgMCwgMCwgMCwgMCwgMSwgMSwgMCwgMSwgMCwgMCwgMSwgMCwgMCwgMSwgMCwgMSwgMCwgMSwgMCwgMCwgMCwgMF0pKSxcbiAgICAgICAgREcuQ29sdW1uLmZyb21JbnQzMkFycmF5KCdoYXRjaGJhY2snLCBuZXcgSW50MzJBcnJheShbMSwgMCwgMCwgMCwgMSwgMSwgMSwgMCwgMCwgMCwgMCwgMCwgMSwgMSwgMCwgMCwgMSwgMCwgMCwgMCwgMCwgMSwgMCwgMSwgMCwgMCwgMCwgMCwgMCwgMF0pKSxcbiAgICAgICAgREcuQ29sdW1uLmZyb21GbG9hdDMyQXJyYXkoJ3doZWVsLmJhc2UnLCBuZXcgRmxvYXQzMkFycmF5KFs5NC41LCAxMDUuODAwMDAzMDUxNzU3ODEsIDEwMS4xOTk5OTY5NDgyNDIxOSwgOTQuNSwgOTMuNjk5OTk2OTQ4MjQyMTksIDkzLjY5OTk5Njk0ODI0MjE5LCA5My42OTk5OTY5NDgyNDIxOSwgOTYuNSwgOTQuMzAwMDAzMDUxNzU3ODEsIDExMywgOTMuMDk5OTk4NDc0MTIxMSwgMTE1LjU5OTk5ODQ3NDEyMTEsIDEwMi42OTk5OTY5NDgyNDIxOSwgOTMuNjk5OTk2OTQ4MjQyMTksIDk0LjUsIDk0LjUsIDkzLjY5OTk5Njk0ODI0MjE5LCAxMTQuMTk5OTk2OTQ4MjQyMTksIDg5LjUsIDk5LjA5OTk5ODQ3NDEyMTEsIDk3LjE5OTk5Njk0ODI0MjE5LCA5NS42OTk5OTY5NDgyNDIxOSwgOTUuNjk5OTk2OTQ4MjQyMTksIDk4LjQwMDAwMTUyNTg3ODksIDEwMi40MDAwMDE1MjU4Nzg5LCA5Ny4zMDAwMDMwNTE3NTc4MSwgMTAwLjQwMDAwMTUyNTg3ODksIDEwNC4zMDAwMDMwNTE3NTc4MSwgMTA5LjA5OTk5ODQ3NDEyMTEsIDEwOS4wOTk5OTg0NzQxMjExXSkpLFxuICAgICAgICBERy5Db2x1bW4uZnJvbUZsb2F0MzJBcnJheSgnbGVuZ3RoJywgbmV3IEZsb2F0MzJBcnJheShbMTcxLjE5OTk5Njk0ODI0MjIsIDE5Mi42OTk5OTY5NDgyNDIyLCAxNzYuODAwMDAzMDUxNzU3OCwgMTU4LjgwMDAwMzA1MTc1NzgsIDE1Ny4zMDAwMDMwNTE3NTc4LCAxNTcuMzAwMDAzMDUxNzU3OCwgMTUwLCAxNzUuMzk5OTkzODk2NDg0MzgsIDE3MC42OTk5OTY5NDgyNDIyLCAxOTkuNjAwMDA2MTAzNTE1NjIsIDE2Ni44MDAwMDMwNTE3NTc4LCAyMDIuNjAwMDA2MTAzNTE1NjIsIDE3OC4zOTk5OTM4OTY0ODQzOCwgMTU3LjMwMDAwMzA1MTc1NzgsIDE3MC4xOTk5OTY5NDgyNDIyLCAxNjUuMzAwMDAzMDUxNzU3OCwgMTU3LjMwMDAwMzA1MTc1NzgsIDE5OC44OTk5OTM4OTY0ODQzOCwgMTY4Ljg5OTk5Mzg5NjQ4NDM4LCAxODYuNjAwMDA2MTAzNTE1NjIsIDE3MiwgMTU4LjY5OTk5Njk0ODI0MjIsIDE2Ni4zMDAwMDMwNTE3NTc4LCAxNzYuMTk5OTk2OTQ4MjQyMiwgMTc1LjYwMDAwNjEwMzUxNTYyLCAxNzEuNjk5OTk2OTQ4MjQyMiwgMTgwLjE5OTk5Njk0ODI0MjIsIDE4OC44MDAwMDMwNTE3NTc4LCAxODguODAwMDAzMDUxNzU3OCwgMTg4LjgwMDAwMzA1MTc1NzhdKSksXG4gICAgICAgIERHLkNvbHVtbi5mcm9tRmxvYXQzMkFycmF5KCd3aWR0aCcsIG5ldyBGbG9hdDMyQXJyYXkoWzY1LjUsIDcxLjQwMDAwMTUyNTg3ODksIDY0LjgwMDAwMzA1MTc1NzgxLCA2My41OTk5OTg0NzQxMjEwOTQsIDYzLjc5OTk5OTIzNzA2MDU1LCA2My43OTk5OTkyMzcwNjA1NSwgNjQsIDY1LjE5OTk5Njk0ODI0MjE5LCA2MS43OTk5OTkyMzcwNjA1NSwgNjkuNTk5OTk4NDc0MTIxMSwgNjQuMTk5OTk2OTQ4MjQyMTksIDcxLjY5OTk5Njk0ODI0MjE5LCA2OCwgNjQuNDAwMDAxNTI1ODc4OSwgNjMuNzk5OTk5MjM3MDYwNTUsIDYzLjc5OTk5OTIzNzA2MDU1LCA2My43OTk5OTkyMzcwNjA1NSwgNjguNDAwMDAxNTI1ODc4OSwgNjUsIDY2LjUsIDY1LjQwMDAwMTUyNTg3ODksIDYzLjU5OTk5ODQ3NDEyMTA5NCwgNjQuNDAwMDAxNTI1ODc4OSwgNjUuNTk5OTk4NDc0MTIxMSwgNjYuNSwgNjUuNSwgNjYuOTAwMDAxNTI1ODc4OSwgNjcuMTk5OTk2OTQ4MjQyMTksIDY4LjgwMDAwMzA1MTc1NzgxLCA2OC45MDAwMDE1MjU4Nzg5XSkpLFxuICAgICAgICBERy5Db2x1bW4uZnJvbUZsb2F0MzJBcnJheSgnaGVpZ2h0JywgbmV3IEZsb2F0MzJBcnJheShbNTIuNDAwMDAxNTI1ODc4OTA2LCA1NS43MDAwMDA3NjI5Mzk0NSwgNTQuMjk5OTk5MjM3MDYwNTUsIDUyLCA1MC43OTk5OTkyMzcwNjA1NSwgNTAuNTk5OTk4NDc0MTIxMDk0LCA1Mi41OTk5OTg0NzQxMjEwOTQsIDU0LjA5OTk5ODQ3NDEyMTA5NCwgNTMuNSwgNTIuNzk5OTk5MjM3MDYwNTUsIDU0LjA5OTk5ODQ3NDEyMTA5NCwgNTYuMjk5OTk5MjM3MDYwNTUsIDU0Ljc5OTk5OTIzNzA2MDU1LCA1MC43OTk5OTkyMzcwNjA1NSwgNTMuNSwgNTQuNSwgNTAuNTk5OTk4NDc0MTIxMDk0LCA1OC43MDAwMDA3NjI5Mzk0NSwgNTEuNTk5OTk4NDc0MTIxMDk0LCA1Ni4wOTk5OTg0NzQxMjEwOTQsIDUyLjUsIDU0LjUsIDUzLCA1MiwgNTQuOTAwMDAxNTI1ODc4OTA2LCA1NS43MDAwMDA3NjI5Mzk0NSwgNTUuMDk5OTk4NDc0MTIxMDk0LCA1Ni4yMDAwMDA3NjI5Mzk0NSwgNTUuNSwgNTUuNV0pKSxcbiAgICAgICAgREcuQ29sdW1uLmZyb21JbnQzMkFycmF5KCdjdXJiLndlaWdodCcsIG5ldyBJbnQzMkFycmF5KFsyODIzLCAyODQ0LCAyMzk1LCAxOTA5LCAyMTI4LCAxOTY3LCAxOTU2LCAyMzA0LCAyMzM3LCA0MDY2LCAxOTUwLCAzNzcwLCAyOTEwLCAxOTE4LCAyMDI0LCAxOTUxLCAxOTY3LCAzNDMwLCAyODAwLCAyNjk1LCAyMTkwLCAxOTg1LCAyMjc1LCAyNTUxLCAyNDgwLCAyMjYxLCAyNjYxLCAyOTEyLCAzMDQ5LCAzMjE3XSkpLFxuICAgICAgICBERy5Db2x1bW4uZnJvbUludDMyQXJyYXkoJ2VuZy5zaXplJywgbmV3IEludDMyQXJyYXkoWzE1MiwgMTM2LCAxMDgsIDkwLCA5OCwgOTAsIDkyLCAxMTAsIDExMSwgMjU4LCA5MSwgMTgzLCAxNDAsIDkyLCA5NywgOTcsIDkwLCAxNTIsIDE5NCwgMTIxLCAxMDgsIDkyLCAxMTAsIDE0NiwgMTEwLCA5NywgMTM2LCAxNDEsIDE0MSwgMTQ1XSkpLFxuICAgICAgICBERy5Db2x1bW4uZnJvbUludDMyQXJyYXkoJ2hvcnNlcG93ZXInLCBuZXcgSW50MzJBcnJheShbMTU0LCAxMTAsIDEwMSwgNzAsIDEwMiwgNjgsIDc2LCA4NiwgNzgsIDE3NiwgNjgsIDEyMywgMTc1LCA2OCwgNjksIDY5LCA2OCwgOTUsIDIwNywgMTEwLCA4MiwgNjIsIDU2LCAxMTYsIDczLCA1MiwgMTEwLCAxMTQsIDE2MCwgMTA2XSkpLFxuICAgICAgICBERy5Db2x1bW4uZnJvbUludDMyQXJyYXkoJ3BlYWsucnBtJywgbmV3IEludDMyQXJyYXkoWzUwMDAsIDU1MDAsIDU4MDAsIDU0MDAsIDU1MDAsIDU1MDAsIDYwMDAsIDU4MDAsIDQ4MDAsIDQ3NTAsIDUwMDAsIDQzNTAsIDUwMDAsIDU1MDAsIDUyMDAsIDUyMDAsIDU1MDAsIDQxNTAsIDU5MDAsIDUyNTAsIDQ0MDAsIDQ4MDAsIDQ1MDAsIDQ4MDAsIDQ1MDAsIDQ4MDAsIDU1MDAsIDU0MDAsIDUzMDAsIDQ4MDBdKSksXG4gICAgICAgIERHLkNvbHVtbi5mcm9tSW50MzJBcnJheSgnc3ltYm9sJywgbmV3IEludDMyQXJyYXkoWzEsIDEsIDIsIDAsIDEsIDEsIDEsIDAsIDAsIDAsIDEsIC0xLCAxLCAyLCAxLCAxLCAxLCAwLCAzLCAyLCAwLCAxLCAwLCAyLCAtMSwgMiwgMCwgLTIsIC0xLCAtMV0pKSxcbiAgICAgICAgREcuQ29sdW1uLmZyb21JbnQzMkFycmF5KCdjaXR5Lm1wZycsIG5ldyBJbnQzMkFycmF5KFsxOSwgMTksIDIzLCAzOCwgMjQsIDMxLCAzMCwgMjcsIDI0LCAxNSwgMzEsIDIyLCAxOSwgMzcsIDMxLCAzMSwgMzEsIDI1LCAxNywgMjEsIDI4LCAzNSwgMzQsIDI0LCAzMCwgMzcsIDE5LCAyMywgMTksIDI2XSkpLFxuICAgICAgICBERy5Db2x1bW4uZnJvbUludDMyQXJyYXkoJ2hpZ2h3YXkubXBnJywgbmV3IEludDMyQXJyYXkoWzI2LCAyNSwgMjksIDQzLCAzMCwgMzgsIDM0LCAzMywgMjksIDE5LCAzOCwgMjUsIDI0LCA0MSwgMzcsIDM3LCAzOCwgMjUsIDI1LCAyOCwgMzMsIDM5LCAzNiwgMzAsIDMzLCA0NiwgMjQsIDI4LCAyNSwgMjddKSksXG4gICAgICAgIERHLkNvbHVtbi5mcm9tSW50MzJBcnJheSgncHJpY2UnLCBuZXcgSW50MzJBcnJheShbMTY1MDAsIDE3NzEwLCAxNjQzMCwgNjU3NSwgNzk1NywgNjIyOSwgNzEyOSwgODg0NSwgNjc4NSwgMzU1NTAsIDczOTUsIDMxNjAwLCAxNjUwMywgNTM4OSwgNzM0OSwgNzI5OSwgNjIyOSwgMTM4NjAsIDM3MDI4LCAxMjE3MCwgNzc3NSwgNTM0OCwgNzg5OCwgOTk4OSwgMTA2OTgsIDc3NzUsIDEzMjk1LCAxMjk0MCwgMTkwNDUsIDIyNDcwXSkpLFxuICAgIF0pO1xufSAvLyBjYXJzRGF0YWZyYW1lXG4vLyBHZW5lcmF0ZSBkYXRhc2V0IGZvciB0ZXN0aW5nIGJpbmFyeSBjbGFzc2lmaWVyc1xuZXhwb3J0IGZ1bmN0aW9uIHRlc3REYXRhRm9yQmluYXJ5Q2xhc3NpZmljYXRpb24oa2VybmVsLCBrZXJuZWxQYXJhbXMsIG5hbWUsIHNhbXBsZXNDb3VudCwgZmVhdHVyZXNDb3VudCwgbWluLCBtYXgsIHZpb2xhdG9yc1BlcmNlbnRhZ2UpIHtcbiAgICByZXR1cm4gX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuICAgICAgICAvLyBjaGVjayBpbnB1dHNcbiAgICAgICAgY2hlY2tHZW5lcmF0b3JTVk1pbnB1dHMoc2FtcGxlc0NvdW50LCBmZWF0dXJlc0NvdW50LCBtaW4sIG1heCwgdmlvbGF0b3JzUGVyY2VudGFnZSk7XG4gICAgICAgIC8vIGtlcm5lbCBwYXJhbXMgY29sdW1uXG4gICAgICAgIGNvbnN0IGtlcm5lbFBhcmFtc0NvbCA9IERHLkNvbHVtbi5mcm9tTGlzdCgnZG91YmxlJywgJ2tlcm5lbFBhcmFtcycsIGtlcm5lbFBhcmFtcyk7XG4gICAgICAgIC8vIENBTEwgV0FTTS1DT01QVVRBVElPTlNcbiAgICAgICAgbGV0IF9vdXRwdXQ7XG4gICAgICAgIGNvbnN0IF9wcm9taXNlID0gX2dlbmVyYXRlRGF0YXNldEluV2ViV29ya2VyKGtlcm5lbCwga2VybmVsUGFyYW1zQ29sLCBzYW1wbGVzQ291bnQsIGZlYXR1cmVzQ291bnQsIG1pbiwgbWF4LCB2aW9sYXRvcnNQZXJjZW50YWdlKTtcbiAgICAgICAgeWllbGQgX3Byb21pc2UudGhlbigoX3Jlc3VsdCkgPT4geyBfb3V0cHV0ID0gX3Jlc3VsdDsgfSwgKF9lcnJvcikgPT4geyB0aHJvdyBuZXcgRXJyb3IoYEVycm9yOiAke19lcnJvcn1gKTsgfSk7XG4gICAgICAgIC8vIFJlbmFtZSBsYWJlbHMgY29sdW1uXG4gICAgICAgIF9vdXRwdXRbU1ZNX0dFTl9MQUJFTFNfSU5ERVhdLm5hbWUgPSBTVk1fTEFCRUxfTkFNRTtcbiAgICAgICAgLy8gUmVuYW1lIGZlYXR1cmUgY29sdW1uc1xuICAgICAgICBmb3IgKGNvbnN0IGNvbCBvZiBfb3V0cHV0W1NWTV9HRU5fRkVBVFVSRVNfSU5ERVhdKVxuICAgICAgICAgICAgY29sLm5hbWUgPSBTVk1fRkVBVFVSRV9OQU1FICsgY29sLm5hbWU7XG4gICAgICAgIC8vIENyZWF0ZSBkYXRhZnJhbWVcbiAgICAgICAgY29uc3QgZGYgPSBERy5EYXRhRnJhbWUuZnJvbUNvbHVtbnMoX291dHB1dFtTVk1fR0VOX0ZFQVRVUkVTX0lOREVYXSk7XG4gICAgICAgIGRmLm5hbWUgPSBuYW1lO1xuICAgICAgICBkZi5jb2x1bW5zLmFkZChfb3V0cHV0W1NWTV9HRU5fTEFCRUxTX0lOREVYXSk7XG4gICAgICAgIHJldHVybiBkZjtcbiAgICB9KTtcbn0gLy8gdGVzdERhdGFGb3JNYWNoaW5lTGVhcm5pbmdcbiIsIi8vIFRoZSBmb2xsb3dpbmcgY29kZSBpcyBnZW5lcmF0ZWQgYXV0b21hdGljYWxseS5cbi8vIEphdmFTY3JpcHQgQVBJIGZvciBjYWxsIHdhc20tZnVuY3Rpb25zIGZyb20gdGhlIG1vZHVsZSBFREFcblxuLy8gSW1wb3J0cyBmb3IgY2FsbCB3YXNtIHJ1bnRpbWUtc3lzdGVtOiBpbiB0aGUgbWFpbiBzdHJlYW0gYW5kIGluIHdlYndvcmtlcnNcbmltcG9ydCB7Y2FsbFdhc219IGZyb20gJy4uL3dhc20vY2FsbFdhc20nO1xuaW1wb3J0IHtnZXRDcHBJbnB1dCwgZ2V0UmVzdWx0fSBmcm9tICcuLi93YXNtL2NhbGxXYXNtRm9yV2ViV29ya2VyJztcblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIF9pbml0RURBQVBJKCkge1xuICBhd2FpdCBpbml0RURBKCk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBfcHJpbmNpcGFsQ29tcG9uZW50QW5hbHlzaXModGFibGUsIGNvbHVtbnMsIGNvbXBvbmVudHNDb3VudCwgY2VudGVyTnVtLCBzY2FsZU51bSkge1xuICByZXR1cm4gY2FsbFdhc20oRURBLCAncHJpbmNpcGFsQ29tcG9uZW50QW5hbHlzaXMnLCBbY29sdW1ucywgY29tcG9uZW50c0NvdW50LCBjZW50ZXJOdW0sIHNjYWxlTnVtXSk7XG59XG5cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBfcHJpbmNpcGFsQ29tcG9uZW50QW5hbHlzaXNJbldlYldvcmtlcih0YWJsZSwgY29sdW1ucywgY29tcG9uZW50c0NvdW50LCBjZW50ZXJOdW0sIHNjYWxlTnVtKSB7XG4gIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgY29uc3Qgd29ya2VyID0gbmV3IFdvcmtlcihuZXcgVVJMKCcuLi93YXNtL3dvcmtlcnMvcHJpbmNpcGFsQ29tcG9uZW50QW5hbHlzaXNXb3JrZXIuanMnLCBpbXBvcnQubWV0YS51cmwpKTtcbiAgICB3b3JrZXIucG9zdE1lc3NhZ2UoZ2V0Q3BwSW5wdXQoRURBWydwcmluY2lwYWxDb21wb25lbnRBbmFseXNpcyddLmFyZ3VtZW50cyxbY29sdW1ucywgY29tcG9uZW50c0NvdW50LCBjZW50ZXJOdW0sIHNjYWxlTnVtXSkpO1xuICAgIHdvcmtlci5vbm1lc3NhZ2UgPSBmdW5jdGlvbihlKSB7XG4gICAgICB3b3JrZXIudGVybWluYXRlKCk7XG4gICAgICByZXNvbHZlKGdldFJlc3VsdChFREFbJ3ByaW5jaXBhbENvbXBvbmVudEFuYWx5c2lzJ10sIGUuZGF0YSkpO1xuICAgIH1cbiAgfSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBfZXJyb3IoZGYsIGNvbDEsIGNvbDIpIHtcbiAgcmV0dXJuIGNhbGxXYXNtKEVEQSwgJ2Vycm9yJywgW2NvbDEsIGNvbDJdKTtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIF9lcnJvckluV2ViV29ya2VyKGRmLCBjb2wxLCBjb2wyKSB7XG4gIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgY29uc3Qgd29ya2VyID0gbmV3IFdvcmtlcihuZXcgVVJMKCcuLi93YXNtL3dvcmtlcnMvZXJyb3JXb3JrZXIuanMnLCBpbXBvcnQubWV0YS51cmwpKTtcbiAgICB3b3JrZXIucG9zdE1lc3NhZ2UoZ2V0Q3BwSW5wdXQoRURBWydlcnJvciddLmFyZ3VtZW50cyxbY29sMSwgY29sMl0pKTtcbiAgICB3b3JrZXIub25tZXNzYWdlID0gZnVuY3Rpb24oZSkge1xuICAgICAgd29ya2VyLnRlcm1pbmF0ZSgpO1xuICAgICAgcmVzb2x2ZShnZXRSZXN1bHQoRURBWydlcnJvciddLCBlLmRhdGEpKTtcbiAgICB9XG4gIH0pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gX3BhcnRpYWxMZWFzdFNxdWFyZVJlZ3Jlc3Npb24odGFibGUsIGZlYXR1cmVzLCBwcmVkaWN0LCBjb21wb25lbnRzQ291bnQpIHtcbiAgcmV0dXJuIGNhbGxXYXNtKEVEQSwgJ3BhcnRpYWxMZWFzdFNxdWFyZVJlZ3Jlc3Npb24nLCBbZmVhdHVyZXMsIHByZWRpY3QsIGNvbXBvbmVudHNDb3VudF0pO1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gX3BhcnRpYWxMZWFzdFNxdWFyZVJlZ3Jlc3Npb25JbldlYldvcmtlcih0YWJsZSwgZmVhdHVyZXMsIHByZWRpY3QsIGNvbXBvbmVudHNDb3VudCkge1xuICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgIGNvbnN0IHdvcmtlciA9IG5ldyBXb3JrZXIobmV3IFVSTCgnLi4vd2FzbS93b3JrZXJzL3BhcnRpYWxMZWFzdFNxdWFyZVJlZ3Jlc3Npb25Xb3JrZXIuanMnLCBpbXBvcnQubWV0YS51cmwpKTtcbiAgICB3b3JrZXIucG9zdE1lc3NhZ2UoZ2V0Q3BwSW5wdXQoRURBWydwYXJ0aWFsTGVhc3RTcXVhcmVSZWdyZXNzaW9uJ10uYXJndW1lbnRzLFtmZWF0dXJlcywgcHJlZGljdCwgY29tcG9uZW50c0NvdW50XSkpO1xuICAgIHdvcmtlci5vbm1lc3NhZ2UgPSBmdW5jdGlvbihlKSB7XG4gICAgICB3b3JrZXIudGVybWluYXRlKCk7XG4gICAgICByZXNvbHZlKGdldFJlc3VsdChFREFbJ3BhcnRpYWxMZWFzdFNxdWFyZVJlZ3Jlc3Npb24nXSwgZS5kYXRhKSk7XG4gICAgfVxuICB9KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIF9nZW5lcmF0ZURhdGFzZXQoa2VybmVsLCBrZXJuZWxQYXJhbXMsIHNhbXBsZXNDb3VudCwgZmVhdHVyZXNDb3VudCwgbWluLCBtYXgsIHZpb2xhdG9yc1BlcmNlbnRhZ2UpIHtcbiAgcmV0dXJuIGNhbGxXYXNtKEVEQSwgJ2dlbmVyYXRlRGF0YXNldCcsIFtrZXJuZWwsIGtlcm5lbFBhcmFtcywgc2FtcGxlc0NvdW50LCBmZWF0dXJlc0NvdW50LCBtaW4sIG1heCwgdmlvbGF0b3JzUGVyY2VudGFnZV0pO1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gX2dlbmVyYXRlRGF0YXNldEluV2ViV29ya2VyKGtlcm5lbCwga2VybmVsUGFyYW1zLCBzYW1wbGVzQ291bnQsIGZlYXR1cmVzQ291bnQsIG1pbiwgbWF4LCB2aW9sYXRvcnNQZXJjZW50YWdlKSB7XG4gIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgY29uc3Qgd29ya2VyID0gbmV3IFdvcmtlcihuZXcgVVJMKCcuLi93YXNtL3dvcmtlcnMvZ2VuZXJhdGVEYXRhc2V0V29ya2VyLmpzJywgaW1wb3J0Lm1ldGEudXJsKSk7XG4gICAgd29ya2VyLnBvc3RNZXNzYWdlKGdldENwcElucHV0KEVEQVsnZ2VuZXJhdGVEYXRhc2V0J10uYXJndW1lbnRzLFtrZXJuZWwsIGtlcm5lbFBhcmFtcywgc2FtcGxlc0NvdW50LCBmZWF0dXJlc0NvdW50LCBtaW4sIG1heCwgdmlvbGF0b3JzUGVyY2VudGFnZV0pKTtcbiAgICB3b3JrZXIub25tZXNzYWdlID0gZnVuY3Rpb24oZSkge1xuICAgICAgd29ya2VyLnRlcm1pbmF0ZSgpO1xuICAgICAgcmVzb2x2ZShnZXRSZXN1bHQoRURBWydnZW5lcmF0ZURhdGFzZXQnXSwgZS5kYXRhKSk7XG4gICAgfVxuICB9KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIF9ub3JtYWxpemVEYXRhc2V0KGRhdGEpIHtcbiAgcmV0dXJuIGNhbGxXYXNtKEVEQSwgJ25vcm1hbGl6ZURhdGFzZXQnLCBbZGF0YV0pO1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gX25vcm1hbGl6ZURhdGFzZXRJbldlYldvcmtlcihkYXRhKSB7XG4gIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgY29uc3Qgd29ya2VyID0gbmV3IFdvcmtlcihuZXcgVVJMKCcuLi93YXNtL3dvcmtlcnMvbm9ybWFsaXplRGF0YXNldFdvcmtlci5qcycsIGltcG9ydC5tZXRhLnVybCkpO1xuICAgIHdvcmtlci5wb3N0TWVzc2FnZShnZXRDcHBJbnB1dChFREFbJ25vcm1hbGl6ZURhdGFzZXQnXS5hcmd1bWVudHMsW2RhdGFdKSk7XG4gICAgd29ya2VyLm9ubWVzc2FnZSA9IGZ1bmN0aW9uKGUpIHtcbiAgICAgIHdvcmtlci50ZXJtaW5hdGUoKTtcbiAgICAgIHJlc29sdmUoZ2V0UmVzdWx0KEVEQVsnbm9ybWFsaXplRGF0YXNldCddLCBlLmRhdGEpKTtcbiAgICB9XG4gIH0pO1xufVxuXG5leHBvcnQgZnVuY3Rpb24gX3RyYWluTFNTVk0oZ2FtbWEsIGtlcm5lbCwga2VybmVsUGFyYW1zLCBtb2RlbFBhcmFtc0NvdW50LCBwcmVjb21wdXRlZFdlaWdodHNDb3VudCwgZGF0YXNldCwgbGFiZWxzKSB7XG4gIHJldHVybiBjYWxsV2FzbShFREEsICd0cmFpbkxTU1ZNJywgW2dhbW1hLCBrZXJuZWwsIGtlcm5lbFBhcmFtcywgbW9kZWxQYXJhbXNDb3VudCwgcHJlY29tcHV0ZWRXZWlnaHRzQ291bnQsIGRhdGFzZXQsIGxhYmVsc10pO1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gX3RyYWluTFNTVk1JbldlYldvcmtlcihnYW1tYSwga2VybmVsLCBrZXJuZWxQYXJhbXMsIG1vZGVsUGFyYW1zQ291bnQsIHByZWNvbXB1dGVkV2VpZ2h0c0NvdW50LCBkYXRhc2V0LCBsYWJlbHMpIHtcbiAgcmV0dXJuIG5ldyBQcm9taXNlKChyZXNvbHZlLCByZWplY3QpID0+IHtcbiAgICBjb25zdCB3b3JrZXIgPSBuZXcgV29ya2VyKG5ldyBVUkwoJy4uL3dhc20vd29ya2Vycy90cmFpbkxTU1ZNV29ya2VyLmpzJywgaW1wb3J0Lm1ldGEudXJsKSk7XG4gICAgd29ya2VyLnBvc3RNZXNzYWdlKGdldENwcElucHV0KEVEQVsndHJhaW5MU1NWTSddLmFyZ3VtZW50cyxbZ2FtbWEsIGtlcm5lbCwga2VybmVsUGFyYW1zLCBtb2RlbFBhcmFtc0NvdW50LCBwcmVjb21wdXRlZFdlaWdodHNDb3VudCwgZGF0YXNldCwgbGFiZWxzXSkpO1xuICAgIHdvcmtlci5vbm1lc3NhZ2UgPSBmdW5jdGlvbihlKSB7XG4gICAgICB3b3JrZXIudGVybWluYXRlKCk7XG4gICAgICByZXNvbHZlKGdldFJlc3VsdChFREFbJ3RyYWluTFNTVk0nXSwgZS5kYXRhKSk7XG4gICAgfVxuICB9KTtcbn1cblxuZXhwb3J0IGZ1bmN0aW9uIF9wcmVkaWN0QnlMU1NWTShrZXJuZWwsIGtlcm5lbFBhcmFtcywgbm9ybWFsaXplZERhdGEsIGxhYmVscywgbWVhbnMsIHN0ZERldnMsIG1vZGVsUGFyYW1zLCBwcmVjb21wdXRlZFdlaWdodHMsIHRhcmdldERhdGEpIHtcbiAgcmV0dXJuIGNhbGxXYXNtKEVEQSwgJ3ByZWRpY3RCeUxTU1ZNJywgW2tlcm5lbCwga2VybmVsUGFyYW1zLCBub3JtYWxpemVkRGF0YSwgbGFiZWxzLCBtZWFucywgc3RkRGV2cywgbW9kZWxQYXJhbXMsIHByZWNvbXB1dGVkV2VpZ2h0cywgdGFyZ2V0RGF0YV0pO1xufVxuXG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gX3ByZWRpY3RCeUxTU1ZNSW5XZWJXb3JrZXIoa2VybmVsLCBrZXJuZWxQYXJhbXMsIG5vcm1hbGl6ZWREYXRhLCBsYWJlbHMsIG1lYW5zLCBzdGREZXZzLCBtb2RlbFBhcmFtcywgcHJlY29tcHV0ZWRXZWlnaHRzLCB0YXJnZXREYXRhKSB7XG4gIHJldHVybiBuZXcgUHJvbWlzZSgocmVzb2x2ZSwgcmVqZWN0KSA9PiB7XG4gICAgY29uc3Qgd29ya2VyID0gbmV3IFdvcmtlcihuZXcgVVJMKCcuLi93YXNtL3dvcmtlcnMvcHJlZGljdEJ5TFNTVk1Xb3JrZXIuanMnLCBpbXBvcnQubWV0YS51cmwpKTtcbiAgICB3b3JrZXIucG9zdE1lc3NhZ2UoZ2V0Q3BwSW5wdXQoRURBWydwcmVkaWN0QnlMU1NWTSddLmFyZ3VtZW50cyxba2VybmVsLCBrZXJuZWxQYXJhbXMsIG5vcm1hbGl6ZWREYXRhLCBsYWJlbHMsIG1lYW5zLCBzdGREZXZzLCBtb2RlbFBhcmFtcywgcHJlY29tcHV0ZWRXZWlnaHRzLCB0YXJnZXREYXRhXSkpO1xuICAgIHdvcmtlci5vbm1lc3NhZ2UgPSBmdW5jdGlvbihlKSB7XG4gICAgICB3b3JrZXIudGVybWluYXRlKCk7XG4gICAgICByZXNvbHZlKGdldFJlc3VsdChFREFbJ3ByZWRpY3RCeUxTU1ZNJ10sIGUuZGF0YSkpO1xuICAgIH1cbiAgfSk7XG59XG5cbmV4cG9ydCBmdW5jdGlvbiBfdHJhaW5BbmRBbmFseXplTFNTVk0oZ2FtbWEsIGtlcm5lbCwga2VybmVsUGFyYW1zLCBtb2RlbFBhcmFtc0NvdW50LCBwcmVjb21wdXRlZFdlaWdodHNDb3VudCwgY29uZnVzaW9uTWF0cml4RWxlbWVudHNDb3VudCwgZGF0YXNldCwgbGFiZWxzKSB7XG4gIHJldHVybiBjYWxsV2FzbShFREEsICd0cmFpbkFuZEFuYWx5emVMU1NWTScsIFtnYW1tYSwga2VybmVsLCBrZXJuZWxQYXJhbXMsIG1vZGVsUGFyYW1zQ291bnQsIHByZWNvbXB1dGVkV2VpZ2h0c0NvdW50LCBjb25mdXNpb25NYXRyaXhFbGVtZW50c0NvdW50LCBkYXRhc2V0LCBsYWJlbHNdKTtcbn1cblxuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIF90cmFpbkFuZEFuYWx5emVMU1NWTUluV2ViV29ya2VyKGdhbW1hLCBrZXJuZWwsIGtlcm5lbFBhcmFtcywgbW9kZWxQYXJhbXNDb3VudCwgcHJlY29tcHV0ZWRXZWlnaHRzQ291bnQsIGNvbmZ1c2lvbk1hdHJpeEVsZW1lbnRzQ291bnQsIGRhdGFzZXQsIGxhYmVscykge1xuICByZXR1cm4gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgIGNvbnN0IHdvcmtlciA9IG5ldyBXb3JrZXIobmV3IFVSTCgnLi4vd2FzbS93b3JrZXJzL3RyYWluQW5kQW5hbHl6ZUxTU1ZNV29ya2VyLmpzJywgaW1wb3J0Lm1ldGEudXJsKSk7XG4gICAgd29ya2VyLnBvc3RNZXNzYWdlKGdldENwcElucHV0KEVEQVsndHJhaW5BbmRBbmFseXplTFNTVk0nXS5hcmd1bWVudHMsW2dhbW1hLCBrZXJuZWwsIGtlcm5lbFBhcmFtcywgbW9kZWxQYXJhbXNDb3VudCwgcHJlY29tcHV0ZWRXZWlnaHRzQ291bnQsIGNvbmZ1c2lvbk1hdHJpeEVsZW1lbnRzQ291bnQsIGRhdGFzZXQsIGxhYmVsc10pKTtcbiAgICB3b3JrZXIub25tZXNzYWdlID0gZnVuY3Rpb24oZSkge1xuICAgICAgd29ya2VyLnRlcm1pbmF0ZSgpO1xuICAgICAgcmVzb2x2ZShnZXRSZXN1bHQoRURBWyd0cmFpbkFuZEFuYWx5emVMU1NWTSddLCBlLmRhdGEpKTtcbiAgICB9XG4gIH0pO1xufVxuXG4iLCJ2YXIgX19hd2FpdGVyID0gKHRoaXMgJiYgdGhpcy5fX2F3YWl0ZXIpIHx8IGZ1bmN0aW9uICh0aGlzQXJnLCBfYXJndW1lbnRzLCBQLCBnZW5lcmF0b3IpIHtcbiAgICBmdW5jdGlvbiBhZG9wdCh2YWx1ZSkgeyByZXR1cm4gdmFsdWUgaW5zdGFuY2VvZiBQID8gdmFsdWUgOiBuZXcgUChmdW5jdGlvbiAocmVzb2x2ZSkgeyByZXNvbHZlKHZhbHVlKTsgfSk7IH1cbiAgICByZXR1cm4gbmV3IChQIHx8IChQID0gUHJvbWlzZSkpKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgICAgZnVuY3Rpb24gZnVsZmlsbGVkKHZhbHVlKSB7IHRyeSB7IHN0ZXAoZ2VuZXJhdG9yLm5leHQodmFsdWUpKTsgfSBjYXRjaCAoZSkgeyByZWplY3QoZSk7IH0gfVxuICAgICAgICBmdW5jdGlvbiByZWplY3RlZCh2YWx1ZSkgeyB0cnkgeyBzdGVwKGdlbmVyYXRvcltcInRocm93XCJdKHZhbHVlKSk7IH0gY2F0Y2ggKGUpIHsgcmVqZWN0KGUpOyB9IH1cbiAgICAgICAgZnVuY3Rpb24gc3RlcChyZXN1bHQpIHsgcmVzdWx0LmRvbmUgPyByZXNvbHZlKHJlc3VsdC52YWx1ZSkgOiBhZG9wdChyZXN1bHQudmFsdWUpLnRoZW4oZnVsZmlsbGVkLCByZWplY3RlZCk7IH1cbiAgICAgICAgc3RlcCgoZ2VuZXJhdG9yID0gZ2VuZXJhdG9yLmFwcGx5KHRoaXNBcmcsIF9hcmd1bWVudHMgfHwgW10pKS5uZXh0KCkpO1xuICAgIH0pO1xufTtcbi8qIFN1cHBvcnQgdmVjdG9yIG1hY2hpbmUgKFNWTSkgdG9vbHMuXG4gICBJdCdzIGRldmVsb3BlZCBmb3IgYXBwbHlpbmcgaW4gY29tYmluYXRpb24gd2l0aCBEQVRBR1JPSyBwcmVkaWN0aXZlIHRvb2xzLlxuXG4gICBUcmFpbmluZyAmIHByZWRpY3RpbmcgYXJlIHByb3ZpZGVkIGJ5IHdhc20tY29tcHV0YXRpb25zLlxuXG4gICBMZWFzdCBzcXVhcmUgc3VwcG9ydCB2ZWN0b3IgbWFjaGluZSAoTFMtU1ZNKSBpcyBpbXBsZW1lbnRlZDpcbiAgICAgWzFdIFN1eWtlbnMsIEouLCBWYW5kZXdhbGxlLCBKLiBcIkxlYXN0IFNxdWFyZXMgU3VwcG9ydCBWZWN0b3IgTWFjaGluZSBDbGFzc2lmaWVyc1wiLFxuICAgICAgIE5ldXJhbCBQcm9jZXNzaW5nIExldHRlcnMgOSwgMjkzLTMwMCAoMTk5OSkuIGh0dHBzOi8vZG9pLm9yZy8xMC4xMDIzL0E6MTAxODYyODYwOTc0MlxuKi9cbmltcG9ydCAqIGFzIGdyb2sgZnJvbSAnZGF0YWdyb2stYXBpL2dyb2snO1xuaW1wb3J0ICogYXMgREcgZnJvbSAnZGF0YWdyb2stYXBpL2RnJztcbmltcG9ydCB7IF90cmFpbkFuZEFuYWx5emVMU1NWTUluV2ViV29ya2VyLCBfcHJlZGljdEJ5TFNTVk1JbldlYldvcmtlciB9IGZyb20gJy4uL3dhc20vRURBQVBJJztcbi8vIDEuIENPTlNUQU5UU1xuLy8ga2VybmVsIHR5cGVzXG5leHBvcnQgY29uc3QgTElORUFSID0gMDtcbmV4cG9ydCBjb25zdCBQT0xZTk9NSUFMID0gMTtcbmV4cG9ydCBjb25zdCBSQkYgPSAyO1xuZXhwb3J0IGNvbnN0IFNJR01PSUQgPSAzO1xuLy8gb3V0cHV0LXJlbGF0ZWRcbmNvbnN0IENPTkZVU0lPTl9NQVRSX1NJWkUgPSA0O1xuY29uc3QgTk9STUFMSVpFRF9EQVRBX0lOREVYID0gMDtcbmNvbnN0IE1FQU5TX0lOREVYID0gMTtcbmNvbnN0IFNURF9ERVZTX0lOREVYID0gMjtcbmNvbnN0IE1PREVMX1BBUkFNU19JTkRFWCA9IDM7XG5jb25zdCBNT0RFTF9XRUlHSFRTX0lOREVYID0gNDtcbmNvbnN0IFBSRURJQ1RFRF9MQUJFTFNfSU5ERVggPSA1O1xuY29uc3QgQ09SUkVDVE5FU1NfSU5ERVggPSA2O1xuY29uc3QgQ09ORlVTSU9OX01BVFJJWF9JTkRFWCA9IDc7XG5jb25zdCBUUlVFX1BPU0lUSVZFX0lOREVYID0gMDtcbmNvbnN0IEZBTFNFX05FR0FUSVZFX0lOREVYID0gMTtcbmNvbnN0IEZBTFNFX1BPU0lUSVZFX0lOREVYID0gMjtcbmNvbnN0IFRSVUVfTkVHQVRJVkVfSU5ERVggPSAzO1xuLy8ga2VybmVsIHBhcmFtZXRlcnMgaW5kZWNlc1xuY29uc3QgUkJGX1NJR01BX0lOREVYID0gMDtcbmNvbnN0IFBPTFlOT01JQUxfQ19JTkRFWCA9IDA7XG5jb25zdCBQT0xZTk9NSUFMX0RfSU5ERVggPSAxO1xuY29uc3QgU0lHTU9JRF9LQVBQQV9JTkRFWCA9IDA7XG5jb25zdCBTSUdNT0lEX1RIRVRBX0lOREVYID0gMTtcbi8vIGh5cGVycGFyYW1ldGVycyBsaW1pdHNcbmNvbnN0IEdBTU1BX0lORklNVU1fTElNSVQgPSAwO1xuY29uc3QgUkJGX1NJR01BX0lORklNVU1fTElNSVQgPSAwO1xuY29uc3QgUE9MWU5PTUlBTF9DX0lORklNVU1fTElNSVQgPSAwO1xuY29uc3QgUE9MWU5PTUlBTF9EX0lORklNVU1fTElNSVQgPSAwO1xuLy8gZXJyb3IgbWVzc2FnZXNcbmNvbnN0IFdST05HX0dBTU1BX01FU1NBR0UgPSAnZ2FtbWEgbXVzdCBiZSBzdHJpY3RseSBwb3NpdGl2ZS4nO1xuY29uc3QgV1JPTkdfUkJGX1NJR01BX01FU1NBR0UgPSAnc2lnbWEgbXVzdCBiZSBzdHJpY3RseSBwb3NpdGl2ZS4nO1xuY29uc3QgV1JPTkdfUE9MWU5PTUlBTF9DX01FU1NBR0UgPSAnYyBtdXN0IGJlIHN0cmljdGx5IHBvc2l0aXZlLic7XG5jb25zdCBXUk9OR19QT0xZTk9NSUFMX0RfTUVTU0FHRSA9ICdkIG11c3QgYmUgc3RyaWN0bHkgcG9zaXRpdmUuJztcbmNvbnN0IFdST05HX0tFUk5FTF9NRVNTQUdFID0gJ2luY29ycmVjdCBrZXJuZWwuJztcbi8vIG5hbWVzXG5jb25zdCBMQUJFTFMgPSAnTGFiZWxzJztcbmNvbnN0IFBSRURJQ1RFRCA9ICdwcmVkaWN0ZWQnO1xuY29uc3QgQ09SUkVDVE5FU1MgPSAnY29ycmVjdG5lc3MnO1xuY29uc3QgQ09ORlVTSU9OX01BVFJJWF9OQU1FID0gJ0NvbmZ1c2lvbiBtYXRyaXgnO1xuY29uc3QgTUVBTiA9ICdtZWFuJztcbmNvbnN0IFNURF9ERVYgPSAnc3RkIGRldic7XG5jb25zdCBNT0RFTF9QQVJBTVNfTkFNRSA9ICdhbHBoYSc7XG5jb25zdCBNT0RFTF9XRUlHSFRTX05BTUUgPSAnd2VpZ2h0JztcbmNvbnN0IEdBTU1BID0gJ2dhbW1hJztcbmNvbnN0IEtFUk5FTCA9ICdrZXJuZWwnO1xuY29uc3QgS0VSTkVMX1BBUkFNUyA9ICdrZXJuZWwgcGFyYW1zJztcbmNvbnN0IEtFUk5FTF9QQVJBTV8xID0gJ2tlcm5lbCBwYXJhbSAxJztcbmNvbnN0IEtFUk5FTF9QQVJBTV8yID0gJ2tlcm5lbCBwYXJhbSAyJztcbmNvbnN0IEZFQVRVUkVTX0NPVU5UX05BTUUgPSAnZmVhdHVyZXMgY291bnQnO1xuY29uc3QgVFJBSU5fU0FNUExFU19DT1VOVF9OQU1FID0gJ3RyYWluIHNhbXBsZXMgY291bnQnO1xuY29uc3QgVFJBSU5fRVJST1IgPSAnVHJhaW4gZXJyb3IsJSc7XG5jb25zdCBLRVJORUxfVFlQRV9UT19OQU1FX01BUCA9IFsnbGluZWFyJywgJ3BvbHlub21pYWwnLCAnUkJGJywgJ3NpZ21vaWQnXTtcbmNvbnN0IFBPU0lUSVZFX05BTUUgPSAncG9zaXRpdmUgKFApJztcbmNvbnN0IE5FR0FUSVZFX05BTUUgPSAnbmVnYXRpdmUgKE4pJztcbmNvbnN0IFBSRURJQ1RFRF9QT1NJVElWRV9OQU1FID0gJ3ByZWRpY3RlZCBwb3NpdGl2ZSAoUFApJztcbmNvbnN0IFBSRURJQ1RFRF9ORUdBVElWRV9OQU1FID0gJ3ByZWRpY3RlZCBuZWdhdGl2ZSAoUE4pJztcbmNvbnN0IFNFTlNJVElWSVRZID0gJ1NlbnNpdGl2aXR5JztcbmNvbnN0IFNQRUNJRklDSVRZID0gJ1NwZWNpZmljaXR5JztcbmNvbnN0IEJBTEFOQ0VEX0FDQ1VSQUNZID0gJ0JhbGFuY2VkIGFjY3VyYWN5JztcbmNvbnN0IFBPU0lUSVZFX1BSRURJQ1RJVkVfVkFMVUUgPSAnUG9zaXRpdmUgcHJlZGljaXR2ZSB2YWx1ZSc7XG5jb25zdCBORUdBVElWRV9QUkVESUNUSVZFX1ZBTFVFID0gJ05lZ2F0aXZlIHByZWRpY2l0dmUgdmFsdWUnO1xuY29uc3QgTUxfUkVQT1JUID0gJ01vZGVsIHJlcG9ydCc7XG5jb25zdCBNTF9SRVBPUlRfUFJFRElDVEVEX0xBQkVMUyA9ICdQcmVkaWN0ZWQgbGFiZWxzJztcbmNvbnN0IE1MX1JFUE9SVF9UUkFJTl9MQUJFTFMgPSAnVHJhaW4gbGFiZWxzJztcbmNvbnN0IE1MX1JFUE9SVF9DT1JSRUNUTkVTUyA9ICdQcmVkaWN0aW9uIGNvcnJlY3RuZXNzJztcbmNvbnN0IFBSRURJQ1RJT04gPSAncHJlZGljdGlvbic7XG4vLyBQYWNrL3VucGFjayBjb25zdGFudHNcbmNvbnN0IEJZVEVTID0gNDtcbmNvbnN0IElOVFNfQ09VTlQgPSAzO1xuY29uc3QgS0VSX1BBUkFNU19DT1VOVCA9IDI7XG5jb25zdCBNT0RFTF9LRVJORUxfSU5ERVggPSAwO1xuY29uc3QgU0FNUExFU19DT1VOVF9JTkRFWCA9IDE7XG5jb25zdCBGRUFUVVJFU19DT1VOVF9JTkRFWCA9IDI7XG4vLyBtaXNjXG5jb25zdCBJTklUX1ZBTFVFID0gMDsgLy8gYW55IG51bWJlciBjYW4gYmUgdXNlZFxuY29uc3QgTFNfU1ZNX0FERF9DT05TVCA9IDE7IC8vIHNlZSBbMV0gZm9yIG1vcmUgZGV0YWlsc1xuLy8gMi4gVE9PTFNcbi8vIENoZWNrIExTLVNWTSBsZWFybmluZyBoeXBlcnBhcmFtZXRlcnNcbmZ1bmN0aW9uIGNoZWNrSHlwZXJwYXJhbWV0ZXJzKGh5cGVycGFyYW1ldGVycykge1xuICAgIC8vIGNoZWNrIGdhbW1hXG4gICAgaWYgKGh5cGVycGFyYW1ldGVycy5nYW1tYSA8PSBHQU1NQV9JTkZJTVVNX0xJTUlUKVxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoV1JPTkdfR0FNTUFfTUVTU0FHRSk7XG4gICAgLy8gY2hlY2sga2VybmVsICYgaXRzIHBhcmFtZXRlcnNcbiAgICBzd2l0Y2ggKGh5cGVycGFyYW1ldGVycy5rZXJuZWwpIHtcbiAgICAgICAgY2FzZSBMSU5FQVI6IC8vIHRoZSBjYXNlIG9mIGxpbmVhciBrZXJuZWxcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgY2FzZSBSQkY6IC8vIHRoZSBjYXNlIG9mIFJCRiBrZXJuZWxcbiAgICAgICAgICAgIGlmIChoeXBlcnBhcmFtZXRlcnMuc2lnbWEgPD0gUkJGX1NJR01BX0lORklNVU1fTElNSVQpXG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFdST05HX1JCRl9TSUdNQV9NRVNTQUdFKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgY2FzZSBQT0xZTk9NSUFMOiAvLyB0aGUgY2FzZSBvZiBwb2x5bm9taWFsIGtlcm5lbFxuICAgICAgICAgICAgLy8gY2hlY2sgY1xuICAgICAgICAgICAgaWYgKGh5cGVycGFyYW1ldGVycy5jUGFyYW0gPD0gUE9MWU5PTUlBTF9DX0lORklNVU1fTElNSVQpXG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFdST05HX1BPTFlOT01JQUxfQ19NRVNTQUdFKTtcbiAgICAgICAgICAgIC8vIGNoZWNrIGRcbiAgICAgICAgICAgIGlmIChoeXBlcnBhcmFtZXRlcnMuZFBhcmFtIDw9IFBPTFlOT01JQUxfRF9JTkZJTVVNX0xJTUlUKVxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihXUk9OR19QT0xZTk9NSUFMX0RfTUVTU0FHRSk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIGNhc2UgU0lHTU9JRDogLy8gdGhlIGNhc2Ugb2YgcG9seW5vbWlhbCBrZXJuZWxcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgZGVmYXVsdDogLy8gaW5jb3JyZWN0IGtlcm5lbFxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFdST05HX0tFUk5FTF9NRVNTQUdFKTtcbiAgICB9IC8vIHN3aXRjaFxufSAvLyBjaGVja0h5cGVycGFyYW1ldGVyc1xuLy8gUmV0dXJuZXMgbGFiZWxzIHByZWRpY3RlZCBieSB0aGUgbW9kZWwgc3BlY2lmaWVkXG5mdW5jdGlvbiBwcmVkaWN0KG1vZGVsLCBkYXRhc2V0KSB7XG4gICAgcmV0dXJuIF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgbGV0IF9vdXRwdXQ7XG4gICAgICAgIGNvbnN0IF9wcm9taXNlID0gX3ByZWRpY3RCeUxTU1ZNSW5XZWJXb3JrZXIobW9kZWwua2VybmVsVHlwZSwgbW9kZWwua2VybmVsUGFyYW1zLCBtb2RlbC5ub3JtYWxpemVkVHJhaW5EYXRhLmNvbHVtbnMsIG1vZGVsLnRyYWluTGFiZWxzLCBtb2RlbC5tZWFucywgbW9kZWwuc3RkRGV2cywgbW9kZWwubW9kZWxQYXJhbXMsIG1vZGVsLm1vZGVsV2VpZ2h0cywgZGF0YXNldCk7XG4gICAgICAgIHlpZWxkIF9wcm9taXNlLnRoZW4oKF9yZXN1bHQpID0+IHsgX291dHB1dCA9IF9yZXN1bHQ7IH0sIChfZXJyb3IpID0+IHsgdGhyb3cgbmV3IEVycm9yKGBFcnJvcjogJHtfZXJyb3J9YCk7IH0pO1xuICAgICAgICByZXR1cm4gX291dHB1dDtcbiAgICB9KTtcbn0gLy8gcHJlZGljdFxuLy8gRXZhbHVhdGUgYWNjdXJhY3kgb2YgdGhlIG1vZGVsXG5mdW5jdGlvbiBldmFsdWF0ZUFjY3VyYWN5KG1vZGVsKSB7XG4gICAgY29uc3QgZGF0YSA9IG1vZGVsLmNvbmZ1c2lvbk1hdHJpeC5nZXRSYXdEYXRhKCk7XG4gICAgLy8gaGVyZSwgdGhlIGNsYXNzaWMgbm90YXRpb24gaXMgdXNlZCAoc2VlIGh0dHBzOi8vZW4ud2lraXBlZGlhLm9yZy93aWtpL1NlbnNpdGl2aXR5X2FuZF9zcGVjaWZpY2l0eSlcbiAgICBjb25zdCBUUCA9IGRhdGFbVFJVRV9QT1NJVElWRV9JTkRFWF07IC8vIHRydWUgcG9zaXRpdmVcbiAgICBjb25zdCBUTiA9IGRhdGFbVFJVRV9ORUdBVElWRV9JTkRFWF07IC8vIHRydWUgbmVnYXRpdmVcbiAgICBjb25zdCBGUCA9IGRhdGFbRkFMU0VfUE9TSVRJVkVfSU5ERVhdOyAvLyBmYWxzZSBwb3NpdGl2ZVxuICAgIGNvbnN0IEZOID0gZGF0YVtGQUxTRV9ORUdBVElWRV9JTkRFWF07IC8vIGZhbHNlIG5lZ2F0aXZlXG4gICAgY29uc3QgUCA9IFRQICsgRk47IC8vIHBvc2l0aXZlXG4gICAgY29uc3QgTiA9IEZQICsgVE47IC8vIG5lZ2F0aXZlXG4gICAgY29uc3QgVFBSID0gVFAgLyBQOyAvLyB0cnVlIHBvc2l0aXZlIHJhdGVcbiAgICBjb25zdCBUTlIgPSBUTiAvIE47IC8vIHRydWUgbmVnYXRpdmUgcmF0ZVxuICAgIGNvbnN0IFBQViA9IFRQIC8gKFRQICsgRlApOyAvLyBwb3NpdGl2ZSBwcmVkaWNpdHZlIHZhbHVlXG4gICAgY29uc3QgTlBWID0gVE4gLyAoVE4gKyBGTik7IC8vIG5lZ2F0aXZlIHByZWRpY2l0dmUgdmFsdWVcbiAgICBjb25zdCBBQ0MgPSAoVFAgKyBUTikgLyAoUCArIE4pOyAvLyBhY2N1cmFjeVxuICAgIGNvbnN0IEJBID0gKFRQUiArIFROUikgLyAyOyAvLyBiYWxhbmNlZCBhY2N1cmFjeVxuICAgIG1vZGVsLnNlbnNpdGl2aXR5ID0gVFBSO1xuICAgIG1vZGVsLnNwZWNpZmljaXR5ID0gVE5SO1xuICAgIG1vZGVsLmJhbGFuY2VkQWNjdXJhY3kgPSBCQTtcbiAgICBtb2RlbC5wb3NpdGl2ZVByZWRpY2l0dmVWYWx1ZSA9IFBQVjtcbiAgICBtb2RlbC5uZWdhdGl2ZVByZWRpY2l0dmVWYWx1ZSA9IE5QVjtcbiAgICBtb2RlbC50cmFpbkVycm9yID0gKDEgLSBBQ0MpICogMTAwOyAvLyB0cmFpbiBlcnJvciwgJVxufSAvLyBldmFsdWF0ZUFjY3VyYWN5XG4vLyBSZXR1cm5zIHRyYWluZWQgTFMtU1ZNIG1vZGVsLlxuZnVuY3Rpb24gdHJhaW5BbmRBbmFseXplTW9kZWwoaHlwZXJwYXJhbWV0ZXJzLCBkYXRhc2V0LCBsYWJlbHMpIHtcbiAgICByZXR1cm4gX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuICAgICAgICAvLyBjaGVjayBjb3JyZWN0bmVzcyBvZiBoeXBlcnBhcmFtZXRlciBnYW1tYVxuICAgICAgICBjaGVja0h5cGVycGFyYW1ldGVycyhoeXBlcnBhcmFtZXRlcnMpO1xuICAgICAgICAvLyBjcmVhdGUgZGVmYXVsdCBrZXJuZWwgcGFyYW1zIGFycmF5XG4gICAgICAgIGNvbnN0IGtlcm5lbFBhcmFtc0FycmF5ID0gW0lOSVRfVkFMVUUsIElOSVRfVkFMVUVdO1xuICAgICAgICAvLyBmaWxsIGtlcm5lbFBhcmFtc1xuICAgICAgICBzd2l0Y2ggKGh5cGVycGFyYW1ldGVycy5rZXJuZWwpIHtcbiAgICAgICAgICAgIGNhc2UgTElORUFSOiAvLyBubyBrZXJuZWwgcGFyYW1ldGVycyBpbiB0aGUgY2FzZSBvZiBsaW5lYXIga2VybmVsXG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBjYXNlIFJCRjogLy8gc2lnbWEgcGFyYW1ldGVyIGluIHRoZSBjYXNlIG9mIFJCRi1rZXJuZWxcbiAgICAgICAgICAgICAgICBrZXJuZWxQYXJhbXNBcnJheVtSQkZfU0lHTUFfSU5ERVhdID0gaHlwZXJwYXJhbWV0ZXJzLnNpZ21hO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgY2FzZSBQT0xZTk9NSUFMOiAvLyBzaWdtYSBwYXJhbWV0ZXIgaW4gdGhlIGNhc2Ugb2YgcG9seW5vbWlhbCBrZXJuZWxcbiAgICAgICAgICAgICAgICBrZXJuZWxQYXJhbXNBcnJheVtQT0xZTk9NSUFMX0NfSU5ERVhdID0gaHlwZXJwYXJhbWV0ZXJzLmNQYXJhbTtcbiAgICAgICAgICAgICAgICBrZXJuZWxQYXJhbXNBcnJheVtQT0xZTk9NSUFMX0RfSU5ERVhdID0gaHlwZXJwYXJhbWV0ZXJzLmRQYXJhbTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIGNhc2UgU0lHTU9JRDogLy8gc2lnbWEgcGFyYW1ldGVyIGluIHRoZSBjYXNlIG9mIHNpZ21vaWQga2VybmVsXG4gICAgICAgICAgICAgICAga2VybmVsUGFyYW1zQXJyYXlbU0lHTU9JRF9LQVBQQV9JTkRFWF0gPSBoeXBlcnBhcmFtZXRlcnMua2FwcGE7XG4gICAgICAgICAgICAgICAga2VybmVsUGFyYW1zQXJyYXlbU0lHTU9JRF9USEVUQV9JTkRFWF0gPSBoeXBlcnBhcmFtZXRlcnMudGhldGE7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICBkZWZhdWx0OiAvLyBpbmNvcnJlY3Qga2VybmVsXG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKFdST05HX0tFUk5FTF9NRVNTQUdFKTtcbiAgICAgICAgfVxuICAgICAgICA7XG4gICAgICAgIC8vIGNyZWF0ZSBrZXJuZWwgcGFyYW1zIGNvbHVtblxuICAgICAgICBjb25zdCBrZXJuZWxQYXJhbXMgPSBERy5Db2x1bW4uZnJvbUxpc3QoJ2RvdWJsZScsIEtFUk5FTF9QQVJBTVMsIGtlcm5lbFBhcmFtc0FycmF5KTtcbiAgICAgICAgLy8gY29tcHV0ZSBzaXplIG9mIG1vZGVsIHBhcmFtcyAmIHByZWNvbXB1dGVkIHdlaWd0aHNcbiAgICAgICAgY29uc3QgdHJhaW5Db2xzID0gZGF0YXNldC50b0xpc3QoKTtcbiAgICAgICAgY29uc3QgbW9kZWxQYXJhbXNDb3VudCA9IHRyYWluQ29sc1swXS5sZW5ndGggKyBMU19TVk1fQUREX0NPTlNUO1xuICAgICAgICBjb25zdCBwcmVjb21wdXRlZFdlaWdodHNDb3VudCA9IHRyYWluQ29scy5sZW5ndGggKyBMU19TVk1fQUREX0NPTlNUO1xuICAgICAgICBjb25zdCBjb25mdXNpb25NYXRyaXhFbGVtZW50c0NvdW50ID0gQ09ORlVTSU9OX01BVFJfU0laRTtcbiAgICAgICAgLy8gY2FsbCB3ZWJhc3NlbWJseSB0cmFpbmluZyBmdW5jdGlvblxuICAgICAgICBsZXQgb3V0cHV0O1xuICAgICAgICBjb25zdCBfcHJvbWlzZSA9IF90cmFpbkFuZEFuYWx5emVMU1NWTUluV2ViV29ya2VyKGh5cGVycGFyYW1ldGVycy5nYW1tYSwgaHlwZXJwYXJhbWV0ZXJzLmtlcm5lbCwga2VybmVsUGFyYW1zLCBtb2RlbFBhcmFtc0NvdW50LCBwcmVjb21wdXRlZFdlaWdodHNDb3VudCwgY29uZnVzaW9uTWF0cml4RWxlbWVudHNDb3VudCwgZGF0YXNldCwgbGFiZWxzKTtcbiAgICAgICAgeWllbGQgX3Byb21pc2UudGhlbigoX3Jlc3VsdCkgPT4geyBvdXRwdXQgPSBfcmVzdWx0OyB9LCAoX2Vycm9yKSA9PiB7IHRocm93IG5ldyBFcnJvcihgRXJyb3I6ICR7X2Vycm9yfWApOyB9KTtcbiAgICAgICAgLy8gcmVuYW1lIG91dHB1dCBjb2x1bW5zXG4gICAgICAgIG91dHB1dFtNRUFOU19JTkRFWF0ubmFtZSA9IE1FQU47XG4gICAgICAgIG91dHB1dFtTVERfREVWU19JTkRFWF0ubmFtZSA9IFNURF9ERVY7XG4gICAgICAgIG91dHB1dFtNT0RFTF9QQVJBTVNfSU5ERVhdLm5hbWUgPSBNT0RFTF9QQVJBTVNfTkFNRTtcbiAgICAgICAgb3V0cHV0W01PREVMX1dFSUdIVFNfSU5ERVhdLm5hbWUgPSBNT0RFTF9XRUlHSFRTX05BTUU7XG4gICAgICAgIG91dHB1dFtQUkVESUNURURfTEFCRUxTX0lOREVYXS5uYW1lID0gUFJFRElDVEVEO1xuICAgICAgICBvdXRwdXRbQ09SUkVDVE5FU1NfSU5ERVhdLm5hbWUgPSBDT1JSRUNUTkVTUztcbiAgICAgICAgb3V0cHV0W0NPTkZVU0lPTl9NQVRSSVhfSU5ERVhdLm5hbWUgPSBDT05GVVNJT05fTUFUUklYX05BTUU7XG4gICAgICAgIC8vIGNvbXBsZXRlIG1vZGVsXG4gICAgICAgIGNvbnN0IG1vZGVsID0ge1xuICAgICAgICAgICAgdHJhaW5HYW1tYTogaHlwZXJwYXJhbWV0ZXJzLmdhbW1hLFxuICAgICAgICAgICAga2VybmVsVHlwZTogaHlwZXJwYXJhbWV0ZXJzLmtlcm5lbCxcbiAgICAgICAgICAgIGtlcm5lbFBhcmFtczoga2VybmVsUGFyYW1zLFxuICAgICAgICAgICAgdHJhaW5MYWJlbHM6IGxhYmVscyxcbiAgICAgICAgICAgIG5vcm1hbGl6ZWRUcmFpbkRhdGE6IERHLkRhdGFGcmFtZS5mcm9tQ29sdW1ucyhvdXRwdXRbTk9STUFMSVpFRF9EQVRBX0lOREVYXSksXG4gICAgICAgICAgICBtZWFuczogb3V0cHV0W01FQU5TX0lOREVYXSxcbiAgICAgICAgICAgIHN0ZERldnM6IG91dHB1dFtTVERfREVWU19JTkRFWF0sXG4gICAgICAgICAgICBtb2RlbFBhcmFtczogb3V0cHV0W01PREVMX1BBUkFNU19JTkRFWF0sXG4gICAgICAgICAgICBtb2RlbFdlaWdodHM6IG91dHB1dFtNT0RFTF9XRUlHSFRTX0lOREVYXSxcbiAgICAgICAgICAgIHByZWRpY3RlZExhYmVsczogb3V0cHV0W1BSRURJQ1RFRF9MQUJFTFNfSU5ERVhdLFxuICAgICAgICAgICAgY29ycmVjdG5lc3M6IG91dHB1dFtDT1JSRUNUTkVTU19JTkRFWF0sXG4gICAgICAgICAgICBjb25mdXNpb25NYXRyaXg6IG91dHB1dFtDT05GVVNJT05fTUFUUklYX0lOREVYXSxcbiAgICAgICAgICAgIHRyYWluRXJyb3I6IHVuZGVmaW5lZCxcbiAgICAgICAgICAgIGZlYXR1cmVzQ291bnQ6IHRyYWluQ29scy5sZW5ndGgsXG4gICAgICAgICAgICB0cmFpblNhbXBsZXNDb3VudDogdHJhaW5Db2xzWzBdLmxlbmd0aCxcbiAgICAgICAgfTtcbiAgICAgICAgZXZhbHVhdGVBY2N1cmFjeShtb2RlbCk7XG4gICAgICAgIHJldHVybiBtb2RlbDtcbiAgICB9KTtcbn0gLy8gdHJhaW5BbmRBbmFseXplTW9kZWxcbi8vIFdyYXBwZXIgZm9yIGNvbWJpbmluZyB0aGUgZnVuY3Rpb24gXCJ0cmFpbkFuZEFuYWx5emVNb2RlbFwiIHdpdGggRGF0YWdyb2sgcHJlZGljaXR2ZSB0b29sc1xuZXhwb3J0IGZ1bmN0aW9uIGdldFRyYWluZWRNb2RlbChoeXBlcnBhcmFtZXRlcnMsIGRmLCBwcmVkaWN0Q29sdW1uKSB7XG4gICAgcmV0dXJuIF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgY29uc3QgY29sdW1ucyA9IGRmLmNvbHVtbnM7XG4gICAgICAgIGNvbnN0IGxhYmVscyA9IGNvbHVtbnMuYnlOYW1lKHByZWRpY3RDb2x1bW4pO1xuICAgICAgICBjb2x1bW5zLnJlbW92ZShwcmVkaWN0Q29sdW1uKTtcbiAgICAgICAgcmV0dXJuIHlpZWxkIHRyYWluQW5kQW5hbHl6ZU1vZGVsKGh5cGVycGFyYW1ldGVycywgY29sdW1ucywgbGFiZWxzKTtcbiAgICB9KTtcbn1cbi8vIFJldHVybnMgZGF0YWZyYW1lIHdpdGggc2hvcnQgaW5mbyBhYm91dCBtb2RlbFxuZnVuY3Rpb24gZ2V0TW9kZWxJbmZvKG1vZGVsKSB7XG4gICAgY29uc3Qga2VybmVsUGFyYW1zID0gbW9kZWwua2VybmVsUGFyYW1zLmdldFJhd0RhdGEoKTtcbiAgICByZXR1cm4gREcuRGF0YUZyYW1lLmZyb21Db2x1bW5zKFtcbiAgICAgICAgREcuQ29sdW1uLmZyb21MaXN0KCdkb3VibGUnLCBHQU1NQSwgW21vZGVsLnRyYWluR2FtbWFdKSxcbiAgICAgICAgREcuQ29sdW1uLmZyb21TdHJpbmdzKEtFUk5FTCwgW0tFUk5FTF9UWVBFX1RPX05BTUVfTUFQW21vZGVsLmtlcm5lbFR5cGVdXSksXG4gICAgICAgIERHLkNvbHVtbi5mcm9tTGlzdCgnZG91YmxlJywgS0VSTkVMX1BBUkFNXzEsIFtrZXJuZWxQYXJhbXNbMF1dKSxcbiAgICAgICAgREcuQ29sdW1uLmZyb21MaXN0KCdkb3VibGUnLCBLRVJORUxfUEFSQU1fMiwgW2tlcm5lbFBhcmFtc1sxXV0pLFxuICAgICAgICBERy5Db2x1bW4uZnJvbUxpc3QoJ2RvdWJsZScsIEZFQVRVUkVTX0NPVU5UX05BTUUsIFttb2RlbC5mZWF0dXJlc0NvdW50XSksXG4gICAgICAgIERHLkNvbHVtbi5mcm9tTGlzdCgnZG91YmxlJywgVFJBSU5fU0FNUExFU19DT1VOVF9OQU1FLCBbbW9kZWwudHJhaW5TYW1wbGVzQ291bnRdKSxcbiAgICAgICAgREcuQ29sdW1uLmZyb21MaXN0KCdkb3VibGUnLCBUUkFJTl9FUlJPUiwgW21vZGVsLnRyYWluRXJyb3JdKSxcbiAgICAgICAgREcuQ29sdW1uLmZyb21MaXN0KCdkb3VibGUnLCBCQUxBTkNFRF9BQ0NVUkFDWSwgW21vZGVsLmJhbGFuY2VkQWNjdXJhY3ldKSxcbiAgICAgICAgREcuQ29sdW1uLmZyb21MaXN0KCdkb3VibGUnLCBTRU5TSVRJVklUWSwgW21vZGVsLnNlbnNpdGl2aXR5XSksXG4gICAgICAgIERHLkNvbHVtbi5mcm9tTGlzdCgnZG91YmxlJywgU1BFQ0lGSUNJVFksIFttb2RlbC5zcGVjaWZpY2l0eV0pLFxuICAgICAgICBERy5Db2x1bW4uZnJvbUxpc3QoJ2RvdWJsZScsIFBPU0lUSVZFX1BSRURJQ1RJVkVfVkFMVUUsIFttb2RlbC5wb3NpdGl2ZVByZWRpY2l0dmVWYWx1ZV0pLFxuICAgICAgICBERy5Db2x1bW4uZnJvbUxpc3QoJ2RvdWJsZScsIE5FR0FUSVZFX1BSRURJQ1RJVkVfVkFMVUUsIFttb2RlbC5uZWdhdGl2ZVByZWRpY2l0dmVWYWx1ZV0pLFxuICAgIF0pO1xufVxuLy8gR2V0IGRhdGFmcmFtZSB3aXRoIGNvbmZ1c2lvbiBtYXRyaXhcbmZ1bmN0aW9uIGdldENvbmZ1c2lvbk1hdHJpeERGKG1vZGVsKSB7XG4gICAgY29uc3QgZGF0YSA9IG1vZGVsLmNvbmZ1c2lvbk1hdHJpeC5nZXRSYXdEYXRhKCk7XG4gICAgcmV0dXJuIERHLkRhdGFGcmFtZS5mcm9tQ29sdW1ucyhbXG4gICAgICAgIERHLkNvbHVtbi5mcm9tU3RyaW5ncygnJywgW1BPU0lUSVZFX05BTUUsIE5FR0FUSVZFX05BTUVdKSxcbiAgICAgICAgREcuQ29sdW1uLmZyb21MaXN0KCdpbnQnLCBQUkVESUNURURfUE9TSVRJVkVfTkFNRSwgW2RhdGFbVFJVRV9QT1NJVElWRV9JTkRFWF0sIGRhdGFbRkFMU0VfUE9TSVRJVkVfSU5ERVhdXSksXG4gICAgICAgIERHLkNvbHVtbi5mcm9tTGlzdCgnaW50JywgUFJFRElDVEVEX05FR0FUSVZFX05BTUUsIFtkYXRhW0ZBTFNFX05FR0FUSVZFX0lOREVYXSwgZGF0YVtUUlVFX05FR0FUSVZFX0lOREVYXV0pLFxuICAgIF0pO1xufVxuLy8gU2hvdyB0cmFpbmluZyByZXBvcnRcbmV4cG9ydCBmdW5jdGlvbiBzaG93VHJhaW5SZXBvcnQoZGYsIG1vZGVsKSB7XG4gICAgZGYubmFtZSA9IE1MX1JFUE9SVDtcbiAgICBkZi5jb2x1bW5zLmFkZChtb2RlbC50cmFpbkxhYmVscyk7XG4gICAgZGYuY29sdW1ucy5hZGQobW9kZWwucHJlZGljdGVkTGFiZWxzKTtcbiAgICBkZi5jb2x1bW5zLmFkZChtb2RlbC5jb3JyZWN0bmVzcyk7XG4gICAgY29uc3QgZGZWaWV3ID0gZ3Jvay5zaGVsbC5hZGRUYWJsZVZpZXcoZGYpO1xuICAgIGRmVmlldy5hZGRWaWV3ZXIoREcuVmlld2VyLmZvcm0oZ2V0TW9kZWxJbmZvKG1vZGVsKSkpO1xuICAgIGRmVmlldy5hZGRWaWV3ZXIoREcuVmlld2VyLnNjYXR0ZXJQbG90KGRmLCB7IHRpdGxlOiBNTF9SRVBPUlRfUFJFRElDVEVEX0xBQkVMUyxcbiAgICAgICAgY29sb3I6IG1vZGVsLnByZWRpY3RlZExhYmVscy5uYW1lLFxuICAgIH0pKTtcbiAgICBkZlZpZXcuYWRkVmlld2VyKERHLlZpZXdlci5zY2F0dGVyUGxvdChkZiwgeyB0aXRsZTogTUxfUkVQT1JUX1RSQUlOX0xBQkVMUyxcbiAgICAgICAgY29sb3I6IG1vZGVsLnRyYWluTGFiZWxzLm5hbWUsXG4gICAgfSkpO1xuICAgIGRmVmlldy5hZGRWaWV3ZXIoREcuVmlld2VyLmdyaWQoZ2V0Q29uZnVzaW9uTWF0cml4REYobW9kZWwpKSk7XG4gICAgZGZWaWV3LmFkZFZpZXdlcihERy5WaWV3ZXIuc2NhdHRlclBsb3QoZGYsIHsgdGl0bGU6IE1MX1JFUE9SVF9DT1JSRUNUTkVTUyxcbiAgICAgICAgY29sb3I6IG1vZGVsLmNvcnJlY3RuZXNzLm5hbWUsXG4gICAgfSkpO1xufSAvLyBzaG93VHJhaW5SZXBvcnRcbi8vIFJldHVybnMgdHJhaW5lZCBtb2RlbCBwYWNrZWQgaW50byBVSW50OEFycmF5XG5leHBvcnQgZnVuY3Rpb24gZ2V0UGFja2VkTW9kZWwobW9kZWwpIHtcbiAgICAvLyBnZXQgcHJpbmNpcGFsIGRhdGFcbiAgICBjb25zdCBkYXRhQ29scyA9IG1vZGVsLm5vcm1hbGl6ZWRUcmFpbkRhdGEuY29sdW1ucztcbiAgICBjb25zdCBzYW1wbGVzQ291bnQgPSBtb2RlbC50cmFpblNhbXBsZXNDb3VudDtcbiAgICBjb25zdCBmZWF0dXJlc0NvdW50ID0gbW9kZWwuZmVhdHVyZXNDb3VudDtcbiAgICAvKmxldCBidWZmZXJTaXplID0gQllURVMgKiAoNyArIGZlYXR1cmVzQ291bnQgKiBzYW1wbGVzQ291bnRcbiAgICAgICsgMyAqIGZlYXR1cmVzQ291bnQgKyAyICogc2FtcGxlc0NvdW50KTsqL1xuICAgIC8vIGNvbXB1dGUgc2l6ZSBvZiBwYWNrZWQgbW9kZWxcbiAgICBjb25zdCBidWZmZXJTaXplID0gQllURVMgKiAoSU5UU19DT1VOVCArIEtFUl9QQVJBTVNfQ09VTlQgK1xuICAgICAgICBzYW1wbGVzQ291bnQgKyBmZWF0dXJlc0NvdW50ICsgZmVhdHVyZXNDb3VudCArIHNhbXBsZXNDb3VudCArIExTX1NWTV9BRERfQ09OU1QgK1xuICAgICAgICBmZWF0dXJlc0NvdW50ICsgTFNfU1ZNX0FERF9DT05TVCArIGZlYXR1cmVzQ291bnQgKiBzYW1wbGVzQ291bnQpO1xuICAgIC8vIHBhY2tlZCBtb2RlbFxuICAgIGNvbnN0IHJlc3VsdCA9IG5ldyBVaW50OEFycmF5KGJ1ZmZlclNpemUpO1xuICAgIGNvbnN0IGJ1ZmZlciA9IHJlc3VsdC5idWZmZXI7XG4gICAgbGV0IG9mZnNldCA9IDA7XG4gICAgLy8gcGFjayBrZXJuZWwgdHlwZSBhbmQgc2l6ZXNcbiAgICBjb25zdCBpbnRzID0gbmV3IEludDMyQXJyYXkoYnVmZmVyLCBvZmZzZXQsIElOVFNfQ09VTlQpO1xuICAgIGludHNbTU9ERUxfS0VSTkVMX0lOREVYXSA9IG1vZGVsLmtlcm5lbFR5cGU7XG4gICAgaW50c1tTQU1QTEVTX0NPVU5UX0lOREVYXSA9IHNhbXBsZXNDb3VudDtcbiAgICBpbnRzW0ZFQVRVUkVTX0NPVU5UX0lOREVYXSA9IGZlYXR1cmVzQ291bnQ7XG4gICAgb2Zmc2V0ICs9IElOVFNfQ09VTlQgKiBCWVRFUztcbiAgICAvLyBwYWNrIGtlcm5lbCBwYXJhbWV0ZXJzXG4gICAgbGV0IGZsb2F0cyA9IG5ldyBGbG9hdDMyQXJyYXkoYnVmZmVyLCBvZmZzZXQsIEtFUl9QQVJBTVNfQ09VTlQpO1xuICAgIGZsb2F0cy5zZXQobW9kZWwua2VybmVsUGFyYW1zLmdldFJhd0RhdGEoKSk7XG4gICAgb2Zmc2V0ICs9IEtFUl9QQVJBTVNfQ09VTlQgKiBCWVRFUztcbiAgICAvLyBwYWNrIHBhY2sgbGFiZWxzIG9mIHRyYWluaW5nIGRhdGFcbiAgICBmbG9hdHMgPSBuZXcgRmxvYXQzMkFycmF5KGJ1ZmZlciwgb2Zmc2V0LCBzYW1wbGVzQ291bnQpO1xuICAgIGZsb2F0cy5zZXQobW9kZWwudHJhaW5MYWJlbHMuZ2V0UmF3RGF0YSgpKTtcbiAgICBvZmZzZXQgKz0gc2FtcGxlc0NvdW50ICogQllURVM7XG4gICAgLy8gcGFjayBtZWFuIHZhbHVlcyBvZiB0cmFpbmluZyBkYXRhXG4gICAgZmxvYXRzID0gbmV3IEZsb2F0MzJBcnJheShidWZmZXIsIG9mZnNldCwgZmVhdHVyZXNDb3VudCk7XG4gICAgZmxvYXRzLnNldChtb2RlbC5tZWFucy5nZXRSYXdEYXRhKCkpO1xuICAgIG9mZnNldCArPSBmZWF0dXJlc0NvdW50ICogQllURVM7XG4gICAgLy8gcGFjayBzdGFuZGFyZCBkZXZpYXRpb25zIG9mIHRyYWluaW5nIGRhdGFcbiAgICBmbG9hdHMgPSBuZXcgRmxvYXQzMkFycmF5KGJ1ZmZlciwgb2Zmc2V0LCBmZWF0dXJlc0NvdW50KTtcbiAgICBmbG9hdHMuc2V0KG1vZGVsLnN0ZERldnMuZ2V0UmF3RGF0YSgpKTtcbiAgICBvZmZzZXQgKz0gZmVhdHVyZXNDb3VudCAqIEJZVEVTO1xuICAgIC8vIHBhY2sgbW9kZWwgcGFyYW10ZXJzXG4gICAgZmxvYXRzID0gbmV3IEZsb2F0MzJBcnJheShidWZmZXIsIG9mZnNldCwgc2FtcGxlc0NvdW50ICsgTFNfU1ZNX0FERF9DT05TVCk7XG4gICAgZmxvYXRzLnNldChtb2RlbC5tb2RlbFBhcmFtcy5nZXRSYXdEYXRhKCkpO1xuICAgIG9mZnNldCArPSAoc2FtcGxlc0NvdW50ICsgTFNfU1ZNX0FERF9DT05TVCkgKiBCWVRFUztcbiAgICAvLyBwYWNrIG1vZGVsJ3MgcHJlY29tcHV0ZWQgd2VpZ2h0c1xuICAgIGZsb2F0cyA9IG5ldyBGbG9hdDMyQXJyYXkoYnVmZmVyLCBvZmZzZXQsIGZlYXR1cmVzQ291bnQgKyBMU19TVk1fQUREX0NPTlNUKTtcbiAgICBmbG9hdHMuc2V0KG1vZGVsLm1vZGVsV2VpZ2h0cy5nZXRSYXdEYXRhKCkpO1xuICAgIG9mZnNldCArPSAoZmVhdHVyZXNDb3VudCArIExTX1NWTV9BRERfQ09OU1QpICogQllURVM7XG4gICAgLy8gcGFjayB0cmFpbmluZyBkYXRhc2V0XG4gICAgZm9yIChjb25zdCBjb2wgb2YgZGF0YUNvbHMpIHtcbiAgICAgICAgZmxvYXRzID0gbmV3IEZsb2F0MzJBcnJheShidWZmZXIsIG9mZnNldCwgZmVhdHVyZXNDb3VudCk7XG4gICAgICAgIGZsb2F0cy5zZXQoY29sLmdldFJhd0RhdGEoKSk7XG4gICAgICAgIG9mZnNldCArPSBmZWF0dXJlc0NvdW50ICogQllURVM7XG4gICAgfVxuICAgIHJldHVybiByZXN1bHQ7XG59IC8vIGdldFBhY2tlZE1vZGVsXG4vLyBSZXR1cm5zIHVucGFja2VkIG1vZGVsXG5mdW5jdGlvbiBnZXRVbnBhY2tlZE1vZGVsKHBhY2tlZE1vZGVsKSB7XG4gICAgY29uc3QgbW9kZWxCeXRlcyA9IHBhY2tlZE1vZGVsLmJ1ZmZlcjtcbiAgICBsZXQgb2Zmc2V0ID0gMDtcbiAgICAvLyBleHRyYWN0IGtlcm5lbCB0eXBlIGFuZCBzaXplc1xuICAgIGNvbnN0IGhlYWRlciA9IG5ldyBJbnQzMkFycmF5KG1vZGVsQnl0ZXMsIG9mZnNldCwgSU5UU19DT1VOVCk7XG4gICAgb2Zmc2V0ICs9IElOVFNfQ09VTlQgKiBCWVRFUztcbiAgICBjb25zdCBzYW1wbGVzQ291bnQgPSBoZWFkZXJbU0FNUExFU19DT1VOVF9JTkRFWF07XG4gICAgY29uc3QgZmVhdHVyZXNDb3VudCA9IGhlYWRlcltGRUFUVVJFU19DT1VOVF9JTkRFWF07XG4gICAgLy8gZXh0cmFjdCBwYXJhbWV0ZXJzIG9mIGtlcm5lbFxuICAgIGNvbnN0IGtlcm5lbFBhcmFtcyA9IERHLkNvbHVtbi5mcm9tRmxvYXQzMkFycmF5KEtFUk5FTF9QQVJBTVMsIG5ldyBGbG9hdDMyQXJyYXkobW9kZWxCeXRlcywgb2Zmc2V0LCBLRVJfUEFSQU1TX0NPVU5UKSk7XG4gICAgb2Zmc2V0ICs9IEtFUl9QQVJBTVNfQ09VTlQgKiBCWVRFUztcbiAgICAvLyBleHRyYWN0IHRyYWluaW5nIGxhYmVsc1xuICAgIGNvbnN0IHRyYWluTGFiZWxzID0gREcuQ29sdW1uLmZyb21GbG9hdDMyQXJyYXkoTEFCRUxTLCBuZXcgRmxvYXQzMkFycmF5KG1vZGVsQnl0ZXMsIG9mZnNldCwgc2FtcGxlc0NvdW50KSk7XG4gICAgb2Zmc2V0ICs9IHNhbXBsZXNDb3VudCAqIEJZVEVTO1xuICAgIC8vIGV4dHJhY3QgbWVhbiB2YWx1ZXMgb2YgdHJhaW5pbmcgZGF0YVxuICAgIGNvbnN0IG1lYW5zID0gREcuQ29sdW1uLmZyb21GbG9hdDMyQXJyYXkoTUVBTiwgbmV3IEZsb2F0MzJBcnJheShtb2RlbEJ5dGVzLCBvZmZzZXQsIGZlYXR1cmVzQ291bnQpKTtcbiAgICBvZmZzZXQgKz0gZmVhdHVyZXNDb3VudCAqIEJZVEVTO1xuICAgIC8vIGV4dHJhY3Qgc3RhbmRhcmQgZGV2aWF0aW9ucyBvZiB0cmFpbmluZyBkYXRhXG4gICAgY29uc3Qgc3RkRGV2cyA9IERHLkNvbHVtbi5mcm9tRmxvYXQzMkFycmF5KFNURF9ERVYsIG5ldyBGbG9hdDMyQXJyYXkobW9kZWxCeXRlcywgb2Zmc2V0LCBmZWF0dXJlc0NvdW50KSk7XG4gICAgb2Zmc2V0ICs9IGZlYXR1cmVzQ291bnQgKiBCWVRFUztcbiAgICAvLyBleHRyYWN0IHBhcmFtZXRlcnMgb2YgbW9kZWxcbiAgICBjb25zdCBtb2RlbFBhcmFtcyA9IERHLkNvbHVtbi5mcm9tRmxvYXQzMkFycmF5KE1PREVMX1BBUkFNU19OQU1FLCBuZXcgRmxvYXQzMkFycmF5KG1vZGVsQnl0ZXMsIG9mZnNldCwgc2FtcGxlc0NvdW50ICsgTFNfU1ZNX0FERF9DT05TVCkpO1xuICAgIG9mZnNldCArPSAoc2FtcGxlc0NvdW50ICsgTFNfU1ZNX0FERF9DT05TVCkgKiBCWVRFUztcbiAgICAvLyBleHRyYWN0IG1vZGVsJ3MgcHJlY29tcHV0ZWQgd2VpZ2h0c1xuICAgIGNvbnN0IG1vZGVsV2VpZ2h0cyA9IERHLkNvbHVtbi5mcm9tRmxvYXQzMkFycmF5KE1PREVMX1dFSUdIVFNfTkFNRSwgbmV3IEZsb2F0MzJBcnJheShtb2RlbEJ5dGVzLCBvZmZzZXQsIGZlYXR1cmVzQ291bnQgKyBMU19TVk1fQUREX0NPTlNUKSk7XG4gICAgb2Zmc2V0ICs9IChmZWF0dXJlc0NvdW50ICsgTFNfU1ZNX0FERF9DT05TVCkgKiBCWVRFUztcbiAgICAvLyBleHRyYWN0IHRyYWluaW5nIGRhdGEgY29sdW1uc1xuICAgIGNvbnN0IGRhdGFDb2xzID0gW107XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBzYW1wbGVzQ291bnQ7IGkrKykge1xuICAgICAgICBkYXRhQ29scy5wdXNoKERHLkNvbHVtbi5mcm9tRmxvYXQzMkFycmF5KGkudG9TdHJpbmcoKSwgbmV3IEZsb2F0MzJBcnJheShtb2RlbEJ5dGVzLCBvZmZzZXQsIGZlYXR1cmVzQ291bnQpKSk7XG4gICAgICAgIG9mZnNldCArPSBmZWF0dXJlc0NvdW50ICogQllURVM7XG4gICAgfVxuICAgIGNvbnN0IG5vcm1hbGl6ZWRUcmFpbkRhdGEgPSBERy5EYXRhRnJhbWUuZnJvbUNvbHVtbnMoZGF0YUNvbHMpO1xuICAgIGNvbnN0IG1vZGVsID0geyBrZXJuZWxUeXBlOiBoZWFkZXJbTU9ERUxfS0VSTkVMX0lOREVYXSxcbiAgICAgICAga2VybmVsUGFyYW1zOiBrZXJuZWxQYXJhbXMsXG4gICAgICAgIHRyYWluTGFiZWxzOiB0cmFpbkxhYmVscyxcbiAgICAgICAgbWVhbnM6IG1lYW5zLFxuICAgICAgICBzdGREZXZzOiBzdGREZXZzLFxuICAgICAgICBtb2RlbFBhcmFtczogbW9kZWxQYXJhbXMsXG4gICAgICAgIG1vZGVsV2VpZ2h0czogbW9kZWxXZWlnaHRzLFxuICAgICAgICBub3JtYWxpemVkVHJhaW5EYXRhOiBub3JtYWxpemVkVHJhaW5EYXRhLFxuICAgIH07XG4gICAgcmV0dXJuIG1vZGVsO1xufSAvLyBnZXRVbnBhY2tlZE1vZGVsXG4vLyBXcmFwcGVyIGZvciBjb21iaW5pbmcgdGhlIGZ1bmN0aW9uIFwicHJlZGljdFwiIHdpdGggRGF0YWdyb2sgcHJlZGljaXR2ZSB0b29sc1xuZXhwb3J0IGZ1bmN0aW9uIGdldFByZWRpY3Rpb24oZGYsIHBhY2tlZE1vZGVsKSB7XG4gICAgcmV0dXJuIF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgY29uc3QgbW9kZWwgPSBnZXRVbnBhY2tlZE1vZGVsKG5ldyBVaW50OEFycmF5KHBhY2tlZE1vZGVsKSk7XG4gICAgICAgIGNvbnN0IHJlcyA9IHlpZWxkIHByZWRpY3QobW9kZWwsIGRmLmNvbHVtbnMpO1xuICAgICAgICByZXMubmFtZSA9IFBSRURJQ1RJT047XG4gICAgICAgIHJldHVybiBERy5EYXRhRnJhbWUuZnJvbUNvbHVtbnMoW3Jlc10pO1xuICAgIH0pO1xufSAvLyBnZXRQcmVkaWN0aW9uXG4iLCIvLyBQTFMgc3BlY2lmaWMgY29uc3RhbnRzXG4vKiogVHlwZXMgb2YgYW5hbHlzaXMgdXNpbmcgUExTICovXG5leHBvcnQgdmFyIFBMU19BTkFMWVNJUztcbihmdW5jdGlvbiAoUExTX0FOQUxZU0lTKSB7XG4gICAgUExTX0FOQUxZU0lTW1BMU19BTkFMWVNJU1tcIkNPTVBVVEVfQ09NUE9ORU5UU1wiXSA9IDBdID0gXCJDT01QVVRFX0NPTVBPTkVOVFNcIjtcbiAgICBQTFNfQU5BTFlTSVNbUExTX0FOQUxZU0lTW1wiUEVSRk9STV9NVkFcIl0gPSAxXSA9IFwiUEVSRk9STV9NVkFcIjtcbiAgICBQTFNfQU5BTFlTSVNbUExTX0FOQUxZU0lTW1wiREVNT1wiXSA9IDJdID0gXCJERU1PXCI7XG59KShQTFNfQU5BTFlTSVMgfHwgKFBMU19BTkFMWVNJUyA9IHt9KSk7XG4vKiogRXJyb3JzICYgd2FybmluZ3MgKi9cbmV4cG9ydCB2YXIgRVJST1JfTVNHO1xuKGZ1bmN0aW9uIChFUlJPUl9NU0cpIHtcbiAgICBFUlJPUl9NU0dbXCJOT19ERlwiXSA9IFwiTm8gZGF0YWZyYW1lIGlzIG9wZW5lZFwiO1xuICAgIEVSUk9SX01TR1tcIk5PX0NPTFNcIl0gPSBcIk5vIG51bWVyaWMgY29sdW1ucyB3aXRob3V0IG1pc3NpbmcgdmFsdWVzXCI7XG4gICAgRVJST1JfTVNHW1wiT05FX0NPTFwiXSA9IFwiTm8gY29sdW1ucyB0byBiZSB1c2VkIGFzIGZlYXR1cmVzIChqdXN0IG9uZSBudW1lcmljIGNvbHVtbnMgd2l0aG91dCBtaXNzaW5nIHZhbHVlcylcIjtcbiAgICBFUlJPUl9NU0dbXCJFTVBUWV9ERlwiXSA9IFwiRGF0YWZyYW1lIGlzIGVtcHR5XCI7XG59KShFUlJPUl9NU0cgfHwgKEVSUk9SX01TRyA9IHt9KSk7XG4vKiogV2lkZ2V0IHRpdGxlcyAqL1xuZXhwb3J0IHZhciBUSVRMRTtcbihmdW5jdGlvbiAoVElUTEUpIHtcbiAgICBUSVRMRVtcIlBSRURJQ1RcIl0gPSBcIlByZWRpY3RcIjtcbiAgICBUSVRMRVtcIlVTSU5HXCJdID0gXCJVc2luZ1wiO1xuICAgIFRJVExFW1wiQ09NUE9ORU5UU1wiXSA9IFwiQ29tcG9uZW50c1wiO1xuICAgIFRJVExFW1wiUExTXCJdID0gXCJQTFNcIjtcbiAgICBUSVRMRVtcIk1WQVwiXSA9IFwiTXVsdGl2YXJpYXRlIEFuYWx5c2lzIChQTFMpXCI7XG4gICAgVElUTEVbXCJSVU5cIl0gPSBcIlJVTlwiO1xuICAgIFRJVExFW1wiTkFNRVNcIl0gPSBcIk5hbWVzXCI7XG4gICAgVElUTEVbXCJNT0RFTFwiXSA9IFwiT2JzZXJ2ZWQgdnMuIFByZWRpY3RlZFwiO1xuICAgIFRJVExFW1wiRkVBVFVSRVwiXSA9IFwiRmVhdHVyZVwiO1xuICAgIFRJVExFW1wiUkVHUl9DT0VGU1wiXSA9IFwiUmVncmVzc2lvbiBDb2VmZmljaWVudHNcIjtcbiAgICBUSVRMRVtcIlhMT0FESU5HXCJdID0gXCJ4LmxvYWRpbmcucFwiO1xuICAgIFRJVExFW1wiTE9BRElOR1NcIl0gPSBcIkxvYWRpbmdzXCI7XG4gICAgVElUTEVbXCJYU0NPUkVcIl0gPSBcInguc2NvcmUudFwiO1xuICAgIFRJVExFW1wiWVNDT1JFXCJdID0gXCJ5LnNjb3JlLnVcIjtcbiAgICBUSVRMRVtcIlNDT1JFU1wiXSA9IFwiU2NvcmVzXCI7XG4gICAgVElUTEVbXCJFWFBMX1ZBUlwiXSA9IFwiRXhwbGFpbmVkIFZhcmlhbmNlXCI7XG4gICAgVElUTEVbXCJFWFBMT1JFXCJdID0gXCJFeHBsb3JlXCI7XG59KShUSVRMRSB8fCAoVElUTEUgPSB7fSkpO1xuLyoqIFRvb2x0aXBzICovXG5leHBvcnQgdmFyIEhJTlQ7XG4oZnVuY3Rpb24gKEhJTlQpIHtcbiAgICBISU5UW1wiUFJFRElDVFwiXSA9IFwiQ29sdW1uIHdpdGggdGhlIHJlc3BvbnNlIHZhcmlhYmxlXCI7XG4gICAgSElOVFtcIkZFQVRVUkVTXCJdID0gXCJQcmVkaWN0b3JzIChmZWF0dXJlcylcIjtcbiAgICBISU5UW1wiQ09NUE9ORU5UU1wiXSA9IFwiTnVtYmVyIG9mIFBMUyBjb21wb25lbnRzXCI7XG4gICAgSElOVFtcIlBMU1wiXSA9IFwiQ29tcHV0ZSBQTFMgY29tcG9uZW50c1wiO1xuICAgIEhJTlRbXCJNVkFcIl0gPSBcIlBlcmZvcm0gbXVsdGl2YXJpYXRlIGFuYWx5c2lzXCI7XG4gICAgSElOVFtcIk5BTUVTXCJdID0gXCJOYW1lcyBvZiBkYXRhIHNhbXBsZXNcIjtcbn0pKEhJTlQgfHwgKEhJTlQgPSB7fSkpO1xuLyoqIExpbmtzIHRvIGhlbHAgKi9cbmV4cG9ydCB2YXIgTElOSztcbihmdW5jdGlvbiAoTElOSykge1xuICAgIExJTktbXCJQTFNcIl0gPSBcImh0dHBzOi8vZGF0YWdyb2suYWkvaGVscC9leHBsb3JlL211bHRpdmFyaWF0ZS1hbmFseXNpcy9wbHMjcGxzLWNvbXBvbmVudHNcIjtcbiAgICBMSU5LW1wiTVZBXCJdID0gXCJodHRwczovL2RhdGFncm9rLmFpL2hlbHAvZXhwbG9yZS9tdWx0aXZhcmlhdGUtYW5hbHlzaXMvcGxzXCI7XG4gICAgTElOS1tcIk1PREVMXCJdID0gXCJodHRwczovL2RhdGFncm9rLmFpL2hlbHAvZXhwbG9yZS9tdWx0aXZhcmlhdGUtYW5hbHlzaXMvcGxvdHMvcHJlZGljdGVkLXZzLXJlZmVyZW5jZVwiO1xuICAgIExJTktbXCJDT0VGRlNcIl0gPSBcImh0dHBzOi8vZGF0YWdyb2suYWkvaGVscC9leHBsb3JlL211bHRpdmFyaWF0ZS1hbmFseXNpcy9wbG90cy9yZWdyZXNzaW9uLWNvZWZmaWNpZW50c1wiO1xuICAgIExJTktbXCJMT0FESU5HU1wiXSA9IFwiaHR0cHM6Ly9kYXRhZ3Jvay5haS9oZWxwL2V4cGxvcmUvbXVsdGl2YXJpYXRlLWFuYWx5c2lzL3Bsb3RzL2xvYWRpbmdzXCI7XG4gICAgTElOS1tcIkVYUExfVkFSU1wiXSA9IFwiaHR0cHM6Ly9kYXRhZ3Jvay5haS9oZWxwL2V4cGxvcmUvbXVsdGl2YXJpYXRlLWFuYWx5c2lzL3Bsb3RzL2V4cGxhaW5lZC12YXJpYW5jZVwiO1xuICAgIExJTktbXCJTQ09SRVNcIl0gPSBcImh0dHBzOi8vZGF0YWdyb2suYWkvaGVscC9leHBsb3JlL211bHRpdmFyaWF0ZS1hbmFseXNpcy9wbG90cy9zY29yZXNcIjtcbn0pKExJTksgfHwgKExJTksgPSB7fSkpO1xuLyoqIENvbXBvbmVudHMgY29uc3RzICovXG5leHBvcnQgdmFyIENPTVBPTkVOVFM7XG4oZnVuY3Rpb24gKENPTVBPTkVOVFMpIHtcbiAgICBDT01QT05FTlRTW0NPTVBPTkVOVFNbXCJERUZBVUxUXCJdID0gM10gPSBcIkRFRkFVTFRcIjtcbiAgICBDT01QT05FTlRTW0NPTVBPTkVOVFNbXCJNSU5cIl0gPSAxXSA9IFwiTUlOXCI7XG59KShDT01QT05FTlRTIHx8IChDT01QT05FTlRTID0ge30pKTtcbi8qKiBJdGVtcyB1c2VkIGZvciBuYW1pbmcgcmVzdWx0cyAqL1xuZXhwb3J0IHZhciBSRVNVTFRfTkFNRVM7XG4oZnVuY3Rpb24gKFJFU1VMVF9OQU1FUykge1xuICAgIFJFU1VMVF9OQU1FU1tcIlBSRUZJWFwiXSA9IFwiUExTXCI7XG4gICAgUkVTVUxUX05BTUVTW1wiU1VGRklYXCJdID0gXCIocHJlZGljdGVkKVwiO1xuICAgIFJFU1VMVF9OQU1FU1tcIkNPTVBcIl0gPSBcImNvbXBvbmVudFwiO1xuICAgIFJFU1VMVF9OQU1FU1tcIkNPTVBTXCJdID0gXCJjb21wb25lbnRzXCI7XG59KShSRVNVTFRfTkFNRVMgfHwgKFJFU1VMVF9OQU1FUyA9IHt9KSk7XG4vKiogSW5kZWNlcyBvZiB3YXNtLWNvbXB1dGF0aW9uIG91dHB1dCAqL1xuZXhwb3J0IHZhciBXQVNNX09VVFBVVF9JRFg7XG4oZnVuY3Rpb24gKFdBU01fT1VUUFVUX0lEWCkge1xuICAgIFdBU01fT1VUUFVUX0lEWFtXQVNNX09VVFBVVF9JRFhbXCJQUkVESUNUSU9OXCJdID0gMF0gPSBcIlBSRURJQ1RJT05cIjtcbiAgICBXQVNNX09VVFBVVF9JRFhbV0FTTV9PVVRQVVRfSURYW1wiUkVHUl9DT0VGRlNcIl0gPSAxXSA9IFwiUkVHUl9DT0VGRlNcIjtcbiAgICBXQVNNX09VVFBVVF9JRFhbV0FTTV9PVVRQVVRfSURYW1wiVF9TQ09SRVNcIl0gPSAyXSA9IFwiVF9TQ09SRVNcIjtcbiAgICBXQVNNX09VVFBVVF9JRFhbV0FTTV9PVVRQVVRfSURYW1wiVV9TQ09SRVNcIl0gPSAzXSA9IFwiVV9TQ09SRVNcIjtcbiAgICBXQVNNX09VVFBVVF9JRFhbV0FTTV9PVVRQVVRfSURYW1wiWF9MT0FESU5HU1wiXSA9IDRdID0gXCJYX0xPQURJTkdTXCI7XG4gICAgV0FTTV9PVVRQVVRfSURYW1dBU01fT1VUUFVUX0lEWFtcIllfTE9BRElOR1NcIl0gPSA1XSA9IFwiWV9MT0FESU5HU1wiO1xufSkoV0FTTV9PVVRQVVRfSURYIHx8IChXQVNNX09VVFBVVF9JRFggPSB7fSkpO1xuZXhwb3J0IGNvbnN0IElOVCA9ICdJbnQnO1xuZXhwb3J0IGNvbnN0IFRJTUVPVVQgPSA2O1xuZXhwb3J0IGNvbnN0IFJBRElVUyA9IFswLjQ5LCAwLjc5LCAwLjk5XTtcbmV4cG9ydCBjb25zdCBMSU5FX1dJRFRIID0gMTtcbmV4cG9ydCBjb25zdCBYX0NPT1JEID0gMjAwO1xuZXhwb3J0IGNvbnN0IFlfQ09PUkQgPSAyMDA7XG5leHBvcnQgY29uc3QgREVMQVkgPSAyMDAwO1xuLyoqIEN1cnZlcyBjb2xvcnMgKi9cbmV4cG9ydCB2YXIgQ09MT1I7XG4oZnVuY3Rpb24gKENPTE9SKSB7XG4gICAgQ09MT1JbXCJBWElTXCJdID0gXCIjODM4MzgzXCI7XG4gICAgQ09MT1JbXCJDSVJDTEVcIl0gPSBcIiMwMDAwRkZcIjtcbn0pKENPTE9SIHx8IChDT0xPUiA9IHt9KSk7XG47XG4vKiogSW50cm8gbWFya2Rvd24gZm9yIGRlbW8gYXBwICovXG5leHBvcnQgY29uc3QgREVNT19JTlRST19NRCA9IGAjIERhdGFcbkVhY2ggY2FyIGhhcyBtYW55IGZlYXR1cmVzIC0gcGF0dGVybnMgZXh0cmFjdGlvbiBpcyBjb21wbGljYXRlZC5cblxuIyBNb2RlbFxuUHJlZGljdCBjYXIgcHJpY2UgYnkgaXRzIG90aGVyIGZlYXR1cmVzLlxuXG4jIFRyeVxuUHJlc3MgJ1JVTicgdG8gcGVyZm9ybSBtdWx0aXZhcmlhdGUgYW5hbHlzaXMgdXNpbmcgcGFydGlhbCBsZWFzdCBzcXVhcmVzXG4oW1BMU10oaHR0cHM6Ly9lbi53aWtpcGVkaWEub3JnL3dpa2kvUGFydGlhbF9sZWFzdF9zcXVhcmVzX3JlZ3Jlc3Npb24pKSByZWdyZXNzaW9uLlxuXG4jIEVzc2VuY2VcblRoZSBtZXRob2QgZmluZHMgdGhlIGxhdGVudCBmYWN0b3JzIHRoYXRcblxuKiBjYXB0dXJlIHRoZSBtYXhpbXVtIHZhcmlhbmNlIGluIHRoZSBmZWF0dXJlc1xuKiBtYXhpbWl6ZSBjb3JyZWxhdGlvbiB3aXRoIHRoZSByZXNwb25zZSB2YXJpYWJsZWA7XG4vKiogRGVzY3JpcHRpb24gb2YgZGVtbyByZXN1bHRzOiB3aXphcmQgY29tcG9uZW50cyAqL1xuZXhwb3J0IGNvbnN0IERFTU9fUkVTVUxUUyA9IFtcbiAgICB7IGNhcHRpb246IFRJVExFLk1PREVMLCB0ZXh0OiAnQ2xvc2VyIHRvIHRoZSBsaW5lIG1lYW5zIGJldHRlciBwcmljZSBwcmVkaWN0aW9uLicgfSxcbiAgICB7IGNhcHRpb246IFRJVExFLlNDT1JFUywgdGV4dDogJ1RoZSBsYXRlbnQgZmFjdG9yIHZhbHVlcyBmb3IgZWFjaCBkYXRhIHNhbXBsZSByZWZsZWN0IHRoZSBzaW1pbGFyaXRpZXMgYW5kIGRpc3NpbWlsYXJpdGllcyBhbW9uZyBvYnNlcnZhdGlvbnMuJyB9LFxuICAgIHsgY2FwdGlvbjogVElUTEUuTE9BRElOR1MsIHRleHQ6ICdUaGUgaW1wYWN0IG9mIGVhY2ggZmVhdHVyZSBvbiB0aGUgbGF0ZW50IGZhY3RvcnM6IGhpZ2hlciBsb2FkaW5nIG1lYW5zIHN0cm9uZ2VyIGluZmx1ZW5jZS4nIH0sXG4gICAgeyBjYXB0aW9uOiBUSVRMRS5SRUdSX0NPRUZTLCB0ZXh0OiAnUGFyYW1ldGVycyBvZiB0aGUgb2J0YWluZWQgbGluZWFyIG1vZGVsOiBmZWF0dXJlcyBtYWtlIGRpZmZlcmVudCBjb250cmlidXRpb24gdG8gdGhlIHByZWRpY3Rpb24uJyB9LFxuICAgIHsgY2FwdGlvbjogVElUTEUuRVhQTF9WQVIsIHRleHQ6ICdIb3cgd2VsbCB0aGUgbGF0ZW50IGNvbXBvbmVudHMgZml0IHNvdXJjZSBkYXRhOiBjbG9zZXIgdG8gb25lIG1lYW5zIGJldHRlciBmaXQuJyB9LFxuXTtcbi8qKiBGb3JtIHJlc3VsdHMgbWFya2Rvd24gZm9yIGRlbW8gYXBwICovXG5leHBvcnQgY29uc3QgREVNT19SRVNVTFRTX01EID0gREVNT19SRVNVTFRTLm1hcCgoaXRlbSkgPT4gYCMgJHtpdGVtLmNhcHRpb259XFxuXFxuJHtpdGVtLnRleHR9YClcbiAgICAuam9pbignXFxuXFxuJykgKyBgXFxuXFxuIyBMZWFybiBtb3JlXG4gIFxuICAqIFtNdWx0aXZhcmlhdGUgYW5hbHlzaXNdKCR7TElOSy5NVkF9KSxcbiAgKiBbQU5PVkFdKGh0dHBzOi8vZGF0YWdyb2suYWkvaGVscC9leHBsb3JlL2Fub3ZhKWA7XG4iLCIvLyBUb29scyBmb3IgbXVsdGl2YXJpYXRlIGFuYWx5c2lzIGJ5IFBMU1xudmFyIF9fYXdhaXRlciA9ICh0aGlzICYmIHRoaXMuX19hd2FpdGVyKSB8fCBmdW5jdGlvbiAodGhpc0FyZywgX2FyZ3VtZW50cywgUCwgZ2VuZXJhdG9yKSB7XG4gICAgZnVuY3Rpb24gYWRvcHQodmFsdWUpIHsgcmV0dXJuIHZhbHVlIGluc3RhbmNlb2YgUCA/IHZhbHVlIDogbmV3IFAoZnVuY3Rpb24gKHJlc29sdmUpIHsgcmVzb2x2ZSh2YWx1ZSk7IH0pOyB9XG4gICAgcmV0dXJuIG5ldyAoUCB8fCAoUCA9IFByb21pc2UpKShmdW5jdGlvbiAocmVzb2x2ZSwgcmVqZWN0KSB7XG4gICAgICAgIGZ1bmN0aW9uIGZ1bGZpbGxlZCh2YWx1ZSkgeyB0cnkgeyBzdGVwKGdlbmVyYXRvci5uZXh0KHZhbHVlKSk7IH0gY2F0Y2ggKGUpIHsgcmVqZWN0KGUpOyB9IH1cbiAgICAgICAgZnVuY3Rpb24gcmVqZWN0ZWQodmFsdWUpIHsgdHJ5IHsgc3RlcChnZW5lcmF0b3JbXCJ0aHJvd1wiXSh2YWx1ZSkpOyB9IGNhdGNoIChlKSB7IHJlamVjdChlKTsgfSB9XG4gICAgICAgIGZ1bmN0aW9uIHN0ZXAocmVzdWx0KSB7IHJlc3VsdC5kb25lID8gcmVzb2x2ZShyZXN1bHQudmFsdWUpIDogYWRvcHQocmVzdWx0LnZhbHVlKS50aGVuKGZ1bGZpbGxlZCwgcmVqZWN0ZWQpOyB9XG4gICAgICAgIHN0ZXAoKGdlbmVyYXRvciA9IGdlbmVyYXRvci5hcHBseSh0aGlzQXJnLCBfYXJndW1lbnRzIHx8IFtdKSkubmV4dCgpKTtcbiAgICB9KTtcbn07XG5pbXBvcnQgKiBhcyBncm9rIGZyb20gJ2RhdGFncm9rLWFwaS9ncm9rJztcbmltcG9ydCAqIGFzIHVpIGZyb20gJ2RhdGFncm9rLWFwaS91aSc7XG5pbXBvcnQgKiBhcyBERyBmcm9tICdkYXRhZ3Jvay1hcGkvZGcnO1xuaW1wb3J0IHsgUExTX0FOQUxZU0lTLCBFUlJPUl9NU0csIFRJVExFLCBISU5ULCBMSU5LLCBDT01QT05FTlRTLCBJTlQsIFRJTUVPVVQsIFJFU1VMVF9OQU1FUywgV0FTTV9PVVRQVVRfSURYLCBSQURJVVMsIExJTkVfV0lEVEgsIENPTE9SLCBYX0NPT1JELCBZX0NPT1JELCBERU1PX0lOVFJPX01ELCBERU1PX1JFU1VMVFNfTUQsIERFTU9fUkVTVUxUUyB9IGZyb20gJy4vcGxzLWNvbnN0YW50cyc7XG5pbXBvcnQgeyBjaGVja1dhc21EaW1lbnNpb25SZWR1Y2VySW5wdXRzLCBjaGVja0NvbHVtblR5cGUsIGNoZWNrTWlzc2luZ1ZhbHMgfSBmcm9tICcuLi91dGlscyc7XG5pbXBvcnQgeyBfcGFydGlhbExlYXN0U3F1YXJlUmVncmVzc2lvbkluV2ViV29ya2VyIH0gZnJvbSAnLi4vLi4vd2FzbS9FREFBUEknO1xuaW1wb3J0IHsgY2Fyc0RhdGFmcmFtZSB9IGZyb20gJy4uL2RhdGEtZ2VuZXJhdG9ycyc7XG5jb25zdCBtaW4gPSBNYXRoLm1pbjtcbmNvbnN0IG1heCA9IE1hdGgubWF4O1xuLyoqIFBhcnRpYWwgbGVhc3Qgc3F1YXJlIHJlZ3Jlc3Npb24gKFBMUykgKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRQbHNBbmFseXNpcyhpbnB1dCkge1xuICAgIHJldHVybiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG4gICAgICAgIGNoZWNrV2FzbURpbWVuc2lvblJlZHVjZXJJbnB1dHMoaW5wdXQuZmVhdHVyZXMsIGlucHV0LmNvbXBvbmVudHMpO1xuICAgICAgICAvLyBDaGVjayB0aGUgcmVzcG9uY2UgY29sdW1uXG4gICAgICAgIGNoZWNrQ29sdW1uVHlwZShpbnB1dC5wcmVkaWN0KTtcbiAgICAgICAgY2hlY2tNaXNzaW5nVmFscyhpbnB1dC5wcmVkaWN0KTtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0geWllbGQgX3BhcnRpYWxMZWFzdFNxdWFyZVJlZ3Jlc3Npb25JbldlYldvcmtlcihpbnB1dC50YWJsZSwgaW5wdXQuZmVhdHVyZXMsIGlucHV0LnByZWRpY3QsIGlucHV0LmNvbXBvbmVudHMpO1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgcHJlZGljdGlvbjogcmVzdWx0W1dBU01fT1VUUFVUX0lEWC5QUkVESUNUSU9OXSxcbiAgICAgICAgICAgIHJlZ3Jlc3Npb25Db2VmZmljaWVudHM6IHJlc3VsdFtXQVNNX09VVFBVVF9JRFguUkVHUl9DT0VGRlNdLFxuICAgICAgICAgICAgdFNjb3JlczogcmVzdWx0W1dBU01fT1VUUFVUX0lEWC5UX1NDT1JFU10sXG4gICAgICAgICAgICB1U2NvcmVzOiByZXN1bHRbV0FTTV9PVVRQVVRfSURYLlVfU0NPUkVTXSxcbiAgICAgICAgICAgIHhMb2FkaW5nczogcmVzdWx0W1dBU01fT1VUUFVUX0lEWC5YX0xPQURJTkdTXSxcbiAgICAgICAgICAgIHlMb2FkaW5nczogcmVzdWx0W1dBU01fT1VUUFVUX0lEWC5ZX0xPQURJTkdTXSxcbiAgICAgICAgfTtcbiAgICB9KTtcbn1cbi8qKiBQZXJmb3JtIG11bHRpdmFyaWF0ZSBhbmFseXNpcyB1c2luZyB0aGUgUExTIHJlZ3Jlc3Npb24gKi9cbmZ1bmN0aW9uIHBlcmZvcm1NVkEoaW5wdXQsIGFuYWx5c2lzVHlwZSkge1xuICAgIHZhciBfYSwgX2I7XG4gICAgcmV0dXJuIF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgY29uc3QgcmVzdWx0ID0geWllbGQgZ2V0UGxzQW5hbHlzaXMoaW5wdXQpO1xuICAgICAgICBjb25zdCBwbHNDb2xzID0gcmVzdWx0LnRTY29yZXM7XG4gICAgICAgIGNvbnN0IGNvbHMgPSBpbnB1dC50YWJsZS5jb2x1bW5zO1xuICAgICAgICBjb25zdCBmZWF0dXJlc05hbWVzID0gaW5wdXQuZmVhdHVyZXMubmFtZXMoKTtcbiAgICAgICAgY29uc3QgcHJlZml4ID0gKGFuYWx5c2lzVHlwZSA9PT0gUExTX0FOQUxZU0lTLkNPTVBVVEVfQ09NUE9ORU5UUykgPyBSRVNVTFRfTkFNRVMuUFJFRklYIDogVElUTEUuWFNDT1JFO1xuICAgICAgICAvLyBhZGQgUExTIGNvbXBvbmVudHMgdG8gdGhlIHRhYmxlXG4gICAgICAgIHBsc0NvbHMuZm9yRWFjaCgoY29sLCBpZHgpID0+IHtcbiAgICAgICAgICAgIGNvbC5uYW1lID0gY29scy5nZXRVbnVzZWROYW1lKGAke3ByZWZpeH0ke2lkeCArIDF9YCk7XG4gICAgICAgICAgICBjb2xzLmFkZChjb2wpO1xuICAgICAgICB9KTtcbiAgICAgICAgaWYgKGFuYWx5c2lzVHlwZSA9PT0gUExTX0FOQUxZU0lTLkNPTVBVVEVfQ09NUE9ORU5UUylcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgY29uc3QgdmlldyA9IGdyb2suc2hlbGwudGFibGVWaWV3KGlucHV0LnRhYmxlLm5hbWUpO1xuICAgICAgICAvLyAwLjEgQnVmZmVyIHRhYmxlXG4gICAgICAgIGNvbnN0IGJ1ZmZlciA9IERHLkRhdGFGcmFtZS5mcm9tQ29sdW1ucyhbXG4gICAgICAgICAgICBERy5Db2x1bW4uZnJvbVN0cmluZ3MoVElUTEUuRkVBVFVSRSwgZmVhdHVyZXNOYW1lcyksXG4gICAgICAgICAgICByZXN1bHQucmVncmVzc2lvbkNvZWZmaWNpZW50cyxcbiAgICAgICAgXSk7XG4gICAgICAgIC8vIDAuMi4gQWRkIFgtTG9hZGluZ3NcbiAgICAgICAgcmVzdWx0LnhMb2FkaW5ncy5mb3JFYWNoKChjb2wsIGlkeCkgPT4ge1xuICAgICAgICAgICAgY29sLm5hbWUgPSBidWZmZXIuY29sdW1ucy5nZXRVbnVzZWROYW1lKGAke1RJVExFLlhMT0FESU5HfSR7aWR4ICsgMX1gKTtcbiAgICAgICAgICAgIGJ1ZmZlci5jb2x1bW5zLmFkZChjb2wpO1xuICAgICAgICB9KTtcbiAgICAgICAgLy8gMS4gUHJlZGljdGVkIHZzIFJlZmVyZW5jZSBzY2F0dGVyIHBsb3RcbiAgICAgICAgY29uc3QgcHJlZCA9IHJlc3VsdC5wcmVkaWN0aW9uO1xuICAgICAgICBwcmVkLm5hbWUgPSBjb2xzLmdldFVudXNlZE5hbWUoYCR7aW5wdXQucHJlZGljdC5uYW1lfSAke1JFU1VMVF9OQU1FUy5TVUZGSVh9YCk7XG4gICAgICAgIGNvbHMuYWRkKHByZWQpO1xuICAgICAgICBjb25zdCBwcmVkaWN0VnNSZWZlclNjYXR0ZXIgPSB2aWV3LmFkZFZpZXdlcihERy5WaWV3ZXIuc2NhdHRlclBsb3QoaW5wdXQudGFibGUsIHtcbiAgICAgICAgICAgIHRpdGxlOiBUSVRMRS5NT0RFTCxcbiAgICAgICAgICAgIHhDb2x1bW5OYW1lOiBpbnB1dC5wcmVkaWN0Lm5hbWUsXG4gICAgICAgICAgICB5Q29sdW1uTmFtZTogcHJlZC5uYW1lLFxuICAgICAgICAgICAgc2hvd1JlZ3Jlc3Npb25MaW5lOiB0cnVlLFxuICAgICAgICAgICAgbWFya2VyVHlwZTogREcuTUFSS0VSX1RZUEUuQ0lSQ0xFLFxuICAgICAgICAgICAgbGFiZWxzOiAoX2EgPSBpbnB1dC5uYW1lcykgPT09IG51bGwgfHwgX2EgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9hLm5hbWUsXG4gICAgICAgICAgICBoZWxwOiBMSU5LLk1PREVMLFxuICAgICAgICB9KSk7XG4gICAgICAgIC8vIDIuIFJlZ3Jlc3Npb24gQ29lZmZpY2llbnRzIEJhciBDaGFydFxuICAgICAgICByZXN1bHQucmVncmVzc2lvbkNvZWZmaWNpZW50cy5uYW1lID0gVElUTEUuUkVHUl9DT0VGUztcbiAgICAgICAgY29uc3QgcmVnckNvZWZmc0JhciA9IHZpZXcuYWRkVmlld2VyKERHLlZpZXdlci5iYXJDaGFydChidWZmZXIsIHtcbiAgICAgICAgICAgIHRpdGxlOiBUSVRMRS5SRUdSX0NPRUZTLFxuICAgICAgICAgICAgc3BsaXRDb2x1bW5OYW1lOiBUSVRMRS5GRUFUVVJFLFxuICAgICAgICAgICAgdmFsdWVDb2x1bW5OYW1lOiByZXN1bHQucmVncmVzc2lvbkNvZWZmaWNpZW50cy5uYW1lLFxuICAgICAgICAgICAgdmFsdWVBZ2dyVHlwZTogREcuQUdHLkFWRyxcbiAgICAgICAgICAgIGhlbHA6IExJTksuQ09FRkZTLFxuICAgICAgICAgICAgc2hvd1ZhbHVlU2VsZWN0b3I6IGZhbHNlLFxuICAgICAgICAgICAgc2hvd1N0YWNrU2VsZWN0b3I6IGZhbHNlLFxuICAgICAgICB9KSk7XG4gICAgICAgIC8vIDMuIExvYWRpbmdzIFNjYXR0ZXIgUGxvdFxuICAgICAgICByZXN1bHQueExvYWRpbmdzLmZvckVhY2goKGNvbCwgaWR4KSA9PiBjb2wubmFtZSA9IGAke1RJVExFLlhMT0FESU5HfSR7aWR4ICsgMX1gKTtcbiAgICAgICAgY29uc3QgbG9hZGluZ3NTY2F0dGVyID0gdmlldy5hZGRWaWV3ZXIoREcuVmlld2VyLnNjYXR0ZXJQbG90KGJ1ZmZlciwge1xuICAgICAgICAgICAgdGl0bGU6IFRJVExFLkxPQURJTkdTLFxuICAgICAgICAgICAgeENvbHVtbk5hbWU6IGAke1RJVExFLlhMT0FESU5HfTFgLFxuICAgICAgICAgICAgeUNvbHVtbk5hbWU6IGAke1RJVExFLlhMT0FESU5HfSR7cmVzdWx0LnhMb2FkaW5ncy5sZW5ndGggPiAxID8gJzInIDogJzEnfWAsXG4gICAgICAgICAgICBtYXJrZXJUeXBlOiBERy5NQVJLRVJfVFlQRS5DSVJDTEUsXG4gICAgICAgICAgICBsYWJlbHM6IFRJVExFLkZFQVRVUkUsXG4gICAgICAgICAgICBoZWxwOiBMSU5LLkxPQURJTkdTLFxuICAgICAgICB9KSk7XG4gICAgICAgIC8vIDQuIFNjb3JlcyBTY2F0dGVyIFBsb3RcbiAgICAgICAgLy8gNC4xKSBkYXRhXG4gICAgICAgIGNvbnN0IHNjb3JlTmFtZXMgPSBwbHNDb2xzLm1hcCgoY29sKSA9PiBjb2wubmFtZSk7XG4gICAgICAgIHJlc3VsdC51U2NvcmVzLmZvckVhY2goKGNvbCwgaWR4KSA9PiB7XG4gICAgICAgICAgICBjb2wubmFtZSA9IGNvbHMuZ2V0VW51c2VkTmFtZShgJHtUSVRMRS5ZU0NPUkV9JHtpZHggKyAxfWApO1xuICAgICAgICAgICAgY29scy5hZGQoY29sKTtcbiAgICAgICAgICAgIHNjb3JlTmFtZXMucHVzaChjb2wubmFtZSk7XG4gICAgICAgIH0pO1xuICAgICAgICAvLyA0LjIpIGNyZWF0ZSBzY2F0dGVyXG4gICAgICAgIGNvbnN0IHNjb3Jlc1NjYXR0ZXIgPSBERy5WaWV3ZXIuc2NhdHRlclBsb3QoaW5wdXQudGFibGUsIHtcbiAgICAgICAgICAgIHRpdGxlOiBUSVRMRS5TQ09SRVMsXG4gICAgICAgICAgICB4Q29sdW1uTmFtZTogcGxzQ29sc1swXS5uYW1lLFxuICAgICAgICAgICAgeUNvbHVtbk5hbWU6IChwbHNDb2xzLmxlbmd0aCA+IDEpID8gcGxzQ29sc1sxXS5uYW1lIDogcmVzdWx0LnVTY29yZXNbMF0sXG4gICAgICAgICAgICBtYXJrZXJUeXBlOiBERy5NQVJLRVJfVFlQRS5DSVJDTEUsXG4gICAgICAgICAgICBsYWJlbHM6IChfYiA9IGlucHV0Lm5hbWVzKSA9PT0gbnVsbCB8fCBfYiA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2IubmFtZSxcbiAgICAgICAgICAgIGhlbHA6IExJTksuU0NPUkVTLFxuICAgICAgICAgICAgc2hvd1ZpZXdlckZvcm11bGFMaW5lczogdHJ1ZSxcbiAgICAgICAgfSk7XG4gICAgICAgIC8vIDQuMykgY3JlYXRlIGxpbmVzICYgY2lyY2xlc1xuICAgICAgICBjb25zdCBsaW5lcyA9IFtdO1xuICAgICAgICBjb25zdCBhZGRMaW5lID0gKGZvcm11bGEsIHJhZGl1cykgPT4ge1xuICAgICAgICAgICAgbGluZXMucHVzaCh7XG4gICAgICAgICAgICAgICAgdHlwZTogJ2xpbmUnLFxuICAgICAgICAgICAgICAgIGZvcm11bGE6IGZvcm11bGEsXG4gICAgICAgICAgICAgICAgd2lkdGg6IExJTkVfV0lEVEgsXG4gICAgICAgICAgICAgICAgdmlzaWJsZTogdHJ1ZSxcbiAgICAgICAgICAgICAgICB0aXRsZTogJyAnLFxuICAgICAgICAgICAgICAgIG1pbjogLXJhZGl1cyxcbiAgICAgICAgICAgICAgICBtYXg6IHJhZGl1cyxcbiAgICAgICAgICAgICAgICBjb2xvcjogQ09MT1IuQ0lSQ0xFLFxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH07XG4gICAgICAgIHNjb3JlTmFtZXMuZm9yRWFjaCgoeE5hbWUpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHggPSAnJHsnICsgeE5hbWUgKyAnfSc7XG4gICAgICAgICAgICBsaW5lcy5wdXNoKHsgdHlwZTogJ2xpbmUnLCBmb3JtdWxhOiBgJHt4fSA9IDBgLCB3aWR0aDogTElORV9XSURUSCwgdmlzaWJsZTogdHJ1ZSwgdGl0bGU6ICcgJywgY29sb3I6IENPTE9SLkFYSVMgfSk7XG4gICAgICAgICAgICBzY29yZU5hbWVzLmZvckVhY2goKHlOYW1lKSA9PiB7XG4gICAgICAgICAgICAgICAgY29uc3QgeSA9ICckeycgKyB5TmFtZSArICd9JztcbiAgICAgICAgICAgICAgICBSQURJVVMuZm9yRWFjaCgocikgPT4ge1xuICAgICAgICAgICAgICAgICAgICBhZGRMaW5lKHkgKyBgID0gc3FydCgke3IgKiByfSAtICR7eH0gKiAke3h9KWAsIHIpO1xuICAgICAgICAgICAgICAgICAgICBhZGRMaW5lKHkgKyBgID0gLXNxcnQoJHtyICogcn0gLSAke3h9ICogJHt4fSlgLCByKTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIH0pO1xuICAgICAgICB9KTtcbiAgICAgICAgc2NvcmVzU2NhdHRlci5tZXRhLmZvcm11bGFMaW5lcy5hZGRBbGwobGluZXMpO1xuICAgICAgICB2aWV3LmFkZFZpZXdlcihzY29yZXNTY2F0dGVyKTtcbiAgICAgICAgLy8gNS4gRXhwbGFpbmVkIFZhcmlhbmNlc1xuICAgICAgICAvLyA1LjEpIGNvbXB1dGF0aW9uLCBzb3VyY2U6IHRoZSBwYXBlciBodHRwczovL2RvaS5vcmcvMTAuMTAwMi9jZW0uMjU4OVxuICAgICAgICAvLyAgICAgIGhlcmUsIHdlIHVzZSBub3RhdGlvbnMgZnJvbSB0aGlzIHBhcGVyXG4gICAgICAgIGNvbnN0IHEgPSByZXN1bHQueUxvYWRpbmdzLmdldFJhd0RhdGEoKTtcbiAgICAgICAgY29uc3QgcCA9IHJlc3VsdC54TG9hZGluZ3MubWFwKChjb2wpID0+IGNvbC5nZXRSYXdEYXRhKCkpO1xuICAgICAgICBjb25zdCBuID0gaW5wdXQudGFibGUucm93Q291bnQ7XG4gICAgICAgIGNvbnN0IG0gPSBmZWF0dXJlc05hbWVzLmxlbmd0aDtcbiAgICAgICAgY29uc3QgQSA9IGlucHV0LmNvbXBvbmVudHM7XG4gICAgICAgIGNvbnN0IHlFeHBsVmFycyA9IG5ldyBGbG9hdDMyQXJyYXkoQSk7XG4gICAgICAgIGNvbnN0IGNvbXBOYW1lcyA9IFtdO1xuICAgICAgICBjb25zdCB4RXhwbFZhcnMgPSBbXTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBtOyArK2kpXG4gICAgICAgICAgICB4RXhwbFZhcnMucHVzaChuZXcgRmxvYXQzMkFycmF5KEEpKTtcbiAgICAgICAgeUV4cGxWYXJzWzBdID0gTWF0aC5wb3cocVswXSwgMikgLyBuO1xuICAgICAgICBjb21wTmFtZXMucHVzaChgMSAke1JFU1VMVF9OQU1FUy5DT01QfWApO1xuICAgICAgICB4RXhwbFZhcnMuZm9yRWFjaCgoYXJyLCBpZHgpID0+IHsgYXJyWzBdID0gTWF0aC5wb3cocFswXVtpZHhdLCAyKSAvIG47IH0pO1xuICAgICAgICBmb3IgKGxldCBjb21wID0gMTsgY29tcCA8IEE7ICsrY29tcCkge1xuICAgICAgICAgICAgeUV4cGxWYXJzW2NvbXBdID0geUV4cGxWYXJzW2NvbXAgLSAxXSArIE1hdGgucG93KHFbY29tcF0sIDIpIC8gbjtcbiAgICAgICAgICAgIHhFeHBsVmFycy5mb3JFYWNoKChhcnIsIGlkeCkgPT4gYXJyW2NvbXBdID0gYXJyW2NvbXAgLSAxXSArIE1hdGgucG93KHBbY29tcF1baWR4XSwgMikgLyBuKTtcbiAgICAgICAgICAgIGNvbXBOYW1lcy5wdXNoKGAke2NvbXAgKyAxfSAke1JFU1VMVF9OQU1FUy5DT01QU31gKTtcbiAgICAgICAgfVxuICAgICAgICAvLyA1LjIpIGNyZWF0ZSBkZlxuICAgICAgICBjb25zdCBleHBsVmFyc0RGID0gREcuRGF0YUZyYW1lLmZyb21Db2x1bW5zKFtcbiAgICAgICAgICAgIERHLkNvbHVtbi5mcm9tU3RyaW5ncyhUSVRMRS5DT01QT05FTlRTLCBjb21wTmFtZXMpLFxuICAgICAgICAgICAgREcuQ29sdW1uLmZyb21GbG9hdDMyQXJyYXkoaW5wdXQucHJlZGljdC5uYW1lLCB5RXhwbFZhcnMpLFxuICAgICAgICBdKTtcbiAgICAgICAgeEV4cGxWYXJzLmZvckVhY2goKGFyciwgaWR4KSA9PiBleHBsVmFyc0RGLmNvbHVtbnMuYWRkKERHLkNvbHVtbi5mcm9tRmxvYXQzMkFycmF5KGZlYXR1cmVzTmFtZXNbaWR4XSwgYXJyKSkpO1xuICAgICAgICAvLyA1LjMpIGJhciBjaGFydFxuICAgICAgICBjb25zdCBleHBsVmFyc0JhciA9IHZpZXcuYWRkVmlld2VyKERHLlZpZXdlci5iYXJDaGFydChleHBsVmFyc0RGLCB7XG4gICAgICAgICAgICB0aXRsZTogVElUTEUuRVhQTF9WQVIsXG4gICAgICAgICAgICBzcGxpdENvbHVtbk5hbWU6IFRJVExFLkNPTVBPTkVOVFMsXG4gICAgICAgICAgICB2YWx1ZUNvbHVtbk5hbWU6IGlucHV0LnByZWRpY3QubmFtZSxcbiAgICAgICAgICAgIHZhbHVlQWdnclR5cGU6IERHLkFHRy5BVkcsXG4gICAgICAgICAgICBoZWxwOiBMSU5LLkVYUExfVkFSUyxcbiAgICAgICAgICAgIHNob3dDYXRlZ29yeVNlbGVjdG9yOiBmYWxzZSxcbiAgICAgICAgICAgIHNob3dTdGFja1NlbGVjdG9yOiBmYWxzZSxcbiAgICAgICAgfSkpO1xuICAgICAgICAvLyBlbXBoYXNpemUgdmlld2VycyBpbiB0aGUgZGVtbyBjYXNlXG4gICAgICAgIGlmIChhbmFseXNpc1R5cGUgPT09IFBMU19BTkFMWVNJUy5ERU1PKSB7XG4gICAgICAgICAgICBjb25zdCBwYWdlcyA9IFtwcmVkaWN0VnNSZWZlclNjYXR0ZXIsIHNjb3Jlc1NjYXR0ZXIsIGxvYWRpbmdzU2NhdHRlciwgcmVnckNvZWZmc0JhciwgZXhwbFZhcnNCYXJdLm1hcCgodmlld2VyLCBpZHgpID0+IHtcbiAgICAgICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgICAgICB0ZXh0OiBERU1PX1JFU1VMVFNbaWR4XS50ZXh0LFxuICAgICAgICAgICAgICAgICAgICBzaG93TmV4dFRvOiB2aWV3ZXIucm9vdCxcbiAgICAgICAgICAgICAgICB9O1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICBjb25zdCB3aXphcmQgPSB1aS5oaW50cy5hZGRUZXh0SGludCh7IHRpdGxlOiBUSVRMRS5FWFBMT1JFLCBwYWdlczogcGFnZXMgfSk7XG4gICAgICAgICAgICB3aXphcmQuaGVscFVybCA9IExJTksuTVZBO1xuICAgICAgICAgICAgZ3Jvay5zaGVsbC53aW5kb3dzLmhlbHAuc2hvd0hlbHAodWkubWFya2Rvd24oREVNT19SRVNVTFRTX01EKSk7XG4gICAgICAgIH1cbiAgICB9KTtcbn0gLy8gcGVyZm9ybU1WQVxuLyoqIFJ1biBtdWx0aXZhcmlhdGUgYW5hbHlzaXMgKFBMUykgKi9cbmV4cG9ydCBmdW5jdGlvbiBydW5NVkEoYW5hbHlzaXNUeXBlKSB7XG4gICAgcmV0dXJuIF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgY29uc3QgdGFibGUgPSBncm9rLnNoZWxsLnQ7XG4gICAgICAgIGlmICh0YWJsZSA9PT0gbnVsbCkge1xuICAgICAgICAgICAgZ3Jvay5zaGVsbC53YXJuaW5nKEVSUk9SX01TRy5OT19ERik7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKHRhYmxlLnJvd0NvdW50ID09PSAwKSB7XG4gICAgICAgICAgICBncm9rLnNoZWxsLndhcm5pbmcoRVJST1JfTVNHLkVNUFRZX0RGKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBudW1Db2xOYW1lcyA9IFtdO1xuICAgICAgICBjb25zdCBudW1Db2xzID0gW107XG4gICAgICAgIGNvbnN0IHN0ckNvbHMgPSBbXTtcbiAgICAgICAgY29uc3QgaXNWYWxpZE51bWVyaWMgPSAoY29sKSA9PiAoKGNvbC50eXBlID09PSBERy5DT0xVTU5fVFlQRS5JTlQpIHx8IChjb2wudHlwZSA9PT0gREcuQ09MVU1OX1RZUEUuRkxPQVQpKSAmJlxuICAgICAgICAgICAgKGNvbC5zdGF0cy5taXNzaW5nVmFsdWVDb3VudCA9PT0gMCk7XG4gICAgICAgIHRhYmxlLmNvbHVtbnMudG9MaXN0KCkuZm9yRWFjaCgoY29sKSA9PiB7XG4gICAgICAgICAgICBpZiAoaXNWYWxpZE51bWVyaWMoY29sKSkge1xuICAgICAgICAgICAgICAgIG51bUNvbE5hbWVzLnB1c2goY29sLm5hbWUpO1xuICAgICAgICAgICAgICAgIG51bUNvbHMucHVzaChjb2wpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoY29sLnR5cGUgPT09IERHLkNPTFVNTl9UWVBFLlNUUklORylcbiAgICAgICAgICAgICAgICBzdHJDb2xzLnB1c2goY29sKTtcbiAgICAgICAgfSk7XG4gICAgICAgIGlmIChudW1Db2xOYW1lcy5sZW5ndGggPT09IDApIHtcbiAgICAgICAgICAgIGdyb2suc2hlbGwud2FybmluZyhFUlJPUl9NU0cuTk9fQ09MUyk7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgaWYgKG51bUNvbE5hbWVzLmxlbmd0aCA9PT0gMSkge1xuICAgICAgICAgICAgZ3Jvay5zaGVsbC53YXJuaW5nKEVSUk9SX01TRy5PTkVfQ09MKTtcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgfVxuICAgICAgICAvLyByZXNwb25jZSAodG8gcHJlZGljdClcbiAgICAgICAgbGV0IHByZWRpY3QgPSBudW1Db2xzW251bUNvbHMubGVuZ3RoIC0gMV07XG4gICAgICAgIGNvbnN0IHByZWRpY3RJbnB1dCA9IHVpLmNvbHVtbklucHV0KFRJVExFLlBSRURJQ1QsIHRhYmxlLCBwcmVkaWN0LCAoKSA9PiB7XG4gICAgICAgICAgICBwcmVkaWN0ID0gcHJlZGljdElucHV0LnZhbHVlO1xuICAgICAgICAgICAgdXBkYXRlSXB1dHMoKTtcbiAgICAgICAgfSwgeyBmaWx0ZXI6IChjb2wpID0+IGlzVmFsaWROdW1lcmljKGNvbCkgfSk7XG4gICAgICAgIHByZWRpY3RJbnB1dC5zZXRUb29sdGlwKEhJTlQuUFJFRElDVCk7XG4gICAgICAgIC8vIHByZWRpY3RvcnMgKGZlYXR1cmVzKVxuICAgICAgICBsZXQgZmVhdHVyZXM7XG4gICAgICAgIGNvbnN0IGZlYXR1cmVzSW5wdXQgPSB1aS5jb2x1bW5zSW5wdXQoVElUTEUuVVNJTkcsIHRhYmxlLCAoKSA9PiB7IH0sIHsgYXZhaWxhYmxlOiBudW1Db2xOYW1lcyB9KTtcbiAgICAgICAgZmVhdHVyZXNJbnB1dC5vbklucHV0KCgpID0+IHVwZGF0ZUlwdXRzKCkpO1xuICAgICAgICBmZWF0dXJlc0lucHV0LnNldFRvb2x0aXAoSElOVC5GRUFUVVJFUyk7XG4gICAgICAgIC8vIGNvbXBvbmVudHMgY291bnRcbiAgICAgICAgbGV0IGNvbXBvbmVudHMgPSBtaW4obnVtQ29sTmFtZXMubGVuZ3RoIC0gMSwgQ09NUE9ORU5UUy5ERUZBVUxUKTtcbiAgICAgICAgY29uc3QgY29tcG9uZW50c0lucHV0ID0gdWkuaW5wdXQuZm9yUHJvcGVydHkoREcuUHJvcGVydHkuZnJvbU9wdGlvbnMoe1xuICAgICAgICAgICAgbmFtZTogVElUTEUuQ09NUE9ORU5UUyxcbiAgICAgICAgICAgIGlucHV0VHlwZTogSU5ULFxuICAgICAgICAgICAgZGVmYXVsdFZhbHVlOiBjb21wb25lbnRzLFxuICAgICAgICAgICAgLy9AdHMtaWdub3JlXG4gICAgICAgICAgICBzaG93UGx1c01pbnVzOiB0cnVlLFxuICAgICAgICAgICAgbWluOiBDT01QT05FTlRTLk1JTixcbiAgICAgICAgfSkpO1xuICAgICAgICBjb21wb25lbnRzSW5wdXQub25JbnB1dCgoKSA9PiB1cGRhdGVJcHV0cygpKTtcbiAgICAgICAgY29tcG9uZW50c0lucHV0LnNldFRvb2x0aXAoSElOVC5DT01QT05FTlRTKTtcbiAgICAgICAgbGV0IGRsZ1RpdGxlO1xuICAgICAgICBsZXQgZGxnSGVscFVybDtcbiAgICAgICAgbGV0IGRsZ1J1bkJ0blRvb2x0aXA7XG4gICAgICAgIGlmIChhbmFseXNpc1R5cGUgPT09IFBMU19BTkFMWVNJUy5DT01QVVRFX0NPTVBPTkVOVFMpIHtcbiAgICAgICAgICAgIGRsZ1RpdGxlID0gVElUTEUuUExTO1xuICAgICAgICAgICAgZGxnSGVscFVybCA9IExJTksuUExTO1xuICAgICAgICAgICAgZGxnUnVuQnRuVG9vbHRpcCA9IEhJTlQuUExTO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgZGxnVGl0bGUgPSBUSVRMRS5NVkE7XG4gICAgICAgICAgICBkbGdIZWxwVXJsID0gTElOSy5NVkE7XG4gICAgICAgICAgICBkbGdSdW5CdG5Ub29sdGlwID0gSElOVC5NVkE7XG4gICAgICAgIH1cbiAgICAgICAgY29uc3QgdXBkYXRlSXB1dHMgPSAoKSA9PiB7XG4gICAgICAgICAgICB2YXIgX2E7XG4gICAgICAgICAgICBmZWF0dXJlc0lucHV0LnZhbHVlID0gZmVhdHVyZXNJbnB1dC52YWx1ZS5maWx0ZXIoKGNvbCkgPT4gY29sICE9PSBwcmVkaWN0KTtcbiAgICAgICAgICAgIGZlYXR1cmVzID0gZmVhdHVyZXNJbnB1dC52YWx1ZTtcbiAgICAgICAgICAgIGNvbXBvbmVudHNJbnB1dC52YWx1ZSA9IG1pbihtYXgoKF9hID0gY29tcG9uZW50c0lucHV0LnZhbHVlKSAhPT0gbnVsbCAmJiBfYSAhPT0gdm9pZCAwID8gX2EgOiBjb21wb25lbnRzLCBDT01QT05FTlRTLk1JTiksIGZlYXR1cmVzLmxlbmd0aCk7XG4gICAgICAgICAgICBjb21wb25lbnRzID0gY29tcG9uZW50c0lucHV0LnZhbHVlO1xuICAgICAgICAgICAgZGxnLmdldEJ1dHRvbihUSVRMRS5SVU4pLmRpc2FibGVkID0gKGZlYXR1cmVzLmxlbmd0aCA9PT0gMCkgfHwgKGNvbXBvbmVudHMgPD0gMCk7XG4gICAgICAgIH07XG4gICAgICAgIC8vIG5hbWVzIG9mIHNhbXBsZXNcbiAgICAgICAgbGV0IG5hbWVzID0gKHN0ckNvbHMubGVuZ3RoID4gMCkgPyBzdHJDb2xzWzBdIDogbnVsbDtcbiAgICAgICAgY29uc3QgbmFtZXNJbnB1dHMgPSB1aS5jb2x1bW5JbnB1dChUSVRMRS5OQU1FUywgdGFibGUsIG5hbWVzLCAoKSA9PiBuYW1lcyA9IHByZWRpY3RJbnB1dC52YWx1ZSwgeyBmaWx0ZXI6IChjb2wpID0+IGNvbC50eXBlID09PSBERy5DT0xVTU5fVFlQRS5TVFJJTkcgfSk7XG4gICAgICAgIG5hbWVzSW5wdXRzLnNldFRvb2x0aXAoSElOVC5OQU1FUyk7XG4gICAgICAgIG5hbWVzSW5wdXRzLnJvb3QuaGlkZGVuID0gKHN0ckNvbHMubGVuZ3RoID09PSAwKSB8fCAoYW5hbHlzaXNUeXBlID09PSBQTFNfQU5BTFlTSVMuQ09NUFVURV9DT01QT05FTlRTKTtcbiAgICAgICAgY29uc3QgZGxnID0gdWkuZGlhbG9nKHsgdGl0bGU6IGRsZ1RpdGxlLCBoZWxwVXJsOiBkbGdIZWxwVXJsIH0pXG4gICAgICAgICAgICAuYWRkKHVpLmZvcm0oW3ByZWRpY3RJbnB1dCwgZmVhdHVyZXNJbnB1dCwgY29tcG9uZW50c0lucHV0LCBuYW1lc0lucHV0c10pKVxuICAgICAgICAgICAgLmFkZEJ1dHRvbihUSVRMRS5SVU4sICgpID0+IF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgICAgIGRsZy5jbG9zZSgpO1xuICAgICAgICAgICAgeWllbGQgcGVyZm9ybU1WQSh7XG4gICAgICAgICAgICAgICAgdGFibGU6IHRhYmxlLFxuICAgICAgICAgICAgICAgIGZlYXR1cmVzOiBERy5EYXRhRnJhbWUuZnJvbUNvbHVtbnMoZmVhdHVyZXMpLmNvbHVtbnMsXG4gICAgICAgICAgICAgICAgcHJlZGljdDogcHJlZGljdCxcbiAgICAgICAgICAgICAgICBjb21wb25lbnRzOiBjb21wb25lbnRzLFxuICAgICAgICAgICAgICAgIG5hbWVzOiBuYW1lcyxcbiAgICAgICAgICAgIH0sIGFuYWx5c2lzVHlwZSk7XG4gICAgICAgIH0pLCB1bmRlZmluZWQsIGRsZ1J1bkJ0blRvb2x0aXApXG4gICAgICAgICAgICAuc2hvdyh7IHg6IFhfQ09PUkQsIHk6IFlfQ09PUkQgfSk7XG4gICAgICAgIC8vIHRoZSBmb2xsb3dpbmcgZGVsYXkgcHJvdmlkZXMgY29ycmVjdCBzdHlsZXMgKHNlZSBodHRwczovL3JlZGRhdGEuYXRsYXNzaWFuLm5ldC9icm93c2UvR1JPSy0xNTE5NilcbiAgICAgICAgc2V0VGltZW91dCgoKSA9PiB7XG4gICAgICAgICAgICBmZWF0dXJlc0lucHV0LnZhbHVlID0gbnVtQ29scy5maWx0ZXIoKGNvbCkgPT4gY29sICE9PSBwcmVkaWN0KTtcbiAgICAgICAgICAgIGZlYXR1cmVzID0gZmVhdHVyZXNJbnB1dC52YWx1ZTtcbiAgICAgICAgfSwgVElNRU9VVCk7XG4gICAgICAgIGdyb2suc2hlbGwudi5hcHBlbmQoZGxnLnJvb3QpO1xuICAgIH0pO1xufSAvLyBydW5NVkFcbi8qKiBSdW4gbXVsdGl2YXJpYXRlIGFuYWx5c2lzIGRlbW8gKi9cbmV4cG9ydCBmdW5jdGlvbiBydW5EZW1vTVZBKCkge1xuICAgIHJldHVybiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG4gICAgICAgIGdyb2suc2hlbGwuYWRkVGFibGVWaWV3KGNhcnNEYXRhZnJhbWUoKSk7XG4gICAgICAgIGdyb2suc2hlbGwud2luZG93cy5oZWxwLnZpc2libGUgPSB0cnVlO1xuICAgICAgICBncm9rLnNoZWxsLndpbmRvd3MuaGVscC5zaG93SGVscCh1aS5tYXJrZG93bihERU1PX0lOVFJPX01EKSk7XG4gICAgICAgIGdyb2suc2hlbGwud2luZG93cy5zaG93Q29udGV4dFBhbmVsID0gZmFsc2U7XG4gICAgICAgIGdyb2suc2hlbGwud2luZG93cy5zaG93UHJvcGVydGllcyA9IGZhbHNlO1xuICAgICAgICB5aWVsZCBydW5NVkEoUExTX0FOQUxZU0lTLkRFTU8pO1xuICAgIH0pO1xufVxuIiwiLy8gU3RhdGlzdGljIHRvb2xzXG5pbXBvcnQgKiBhcyBERyBmcm9tICdkYXRhZ3Jvay1hcGkvZGcnO1xuLy9AdHMtaWdub3JlOiBubyB0eXBlc1xuaW1wb3J0ICogYXMgalN0YXQgZnJvbSAnanN0YXQnO1xudmFyIEVSUk9SX01TRztcbihmdW5jdGlvbiAoRVJST1JfTVNHKSB7XG4gICAgRVJST1JfTVNHW1wiTk9OX0VRVUFMX0ZBQ1RPUlNfVkFMVUVTX1NJWkVcIl0gPSBcIm5vbi1lcXVhbCBzaXplcyBvZiBmYWN0b3IgYW5kIHZhbHVlcyBhcnJheXMuIElOUFVUIEVSUk9SLlwiO1xuICAgIEVSUk9SX01TR1tcIklOQ09SUkVDVF9TSUdOSUZJQ0FOQ0VfTEVWRUxcIl0gPSBcImluY29ycmVjdCBzaWduaWZpY2FuY2UgbGV2ZWwuIEl0IG11c3QgYmUgZnJvbSB0aGUgaW50ZXJ2YWwgKDAsIDEpLiBJTlBVVCBFUlJPUi5cIjtcbiAgICBFUlJPUl9NU0dbXCJJTkNPUlJFQ1RfU0FNUExFX1NJWkVcIl0gPSBcImluY29ycmVjdCBzaXplIG9mIHNhbXBsZS4gREFUQSBGQUNUT1JJWkFJTkcgRVJST1IuXCI7XG4gICAgRVJST1JfTVNHW1wiTk9OX0VRVUFMX1ZBUklBTkNFU1wiXSA9IFwidmFyaWFuY2VzIGFyZSBub3QgZXF1YWwuXCI7XG4gICAgRVJST1JfTVNHW1wiTk9OX05PUk1BTF9ESVNUUklCXCJdID0gXCJub24tbm9ybWFsIGRpc3RyaWJ1dGlvbi5cIjtcbiAgICBFUlJPUl9NU0dbXCJVTlNVUFBPUlRFRF9DT0xVTU5fVFlQRVwiXSA9IFwidW5zdXBwb3J0ZWQgY29sdW1uIHR5cGUuXCI7XG4gICAgRVJST1JfTVNHW1wiSU5DT1JSRUNUX0NBVEVHT1JJRVNfQ09MX1RZUEVcIl0gPSBcImluY29ycmVjdCBjYXRlZ29yaWVzIGNvbHVtbiB0eXBlLlwiO1xuICAgIEVSUk9SX01TR1tcIkFOT1ZBX0ZBSUxFRF9KVVNUX09ORV9DQVRcIl0gPSBcIkFOT1ZBIGZpbGVkOiB0aGVyZSBzaG91bGQgYmUgYXQgbGVhc3QgMiBjYXRlZ29yaWVzLlwiO1xufSkoRVJST1JfTVNHIHx8IChFUlJPUl9NU0cgPSB7fSkpO1xuO1xuLyoqIENyZWF0ZSBkYXRhZnJhbWUgd2l0aCBvbmUtd2F5IEFOT1ZBIHJlc3VsdHMuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0T25lV2F5QW5vdmFERihhbm92YSwgYWxwaGEsIGZDcml0aWNhbCwgaHlwb3RoZXNpcywgdGVzdFJlc3VsdCkge1xuICAgIHJldHVybiBERy5EYXRhRnJhbWUuZnJvbUNvbHVtbnMoW1xuICAgICAgICBERy5Db2x1bW4uZnJvbVN0cmluZ3MoJ1NvdXJjZSBvZiB2YXJpYW5jZScsIFsnQmV0d2VlbiBncm91cHMnLCAnV2l0aGluIGdyb3VwcycsICdUb3RhbCcsICcnLCBoeXBvdGhlc2lzLCAnJywgdGVzdFJlc3VsdF0pLFxuICAgICAgICBERy5Db2x1bW4uZnJvbUxpc3QoREcuQ09MVU1OX1RZUEUuRkxPQVQsICdTdW0gb2Ygc3F1YXJlcycsIFthbm92YS5zc0JuLCBhbm92YS5zc1duLCBhbm92YS5zc1RvdCwgbnVsbCwgbnVsbCwgbnVsbCwgbnVsbF0pLFxuICAgICAgICBERy5Db2x1bW4uZnJvbUxpc3QoREcuQ09MVU1OX1RZUEUuSU5ULCAnRGVncmVlcyBvZiBmcmVlZG9tJywgW2Fub3ZhLmRmQm4sIGFub3ZhLmRmV24sIGFub3ZhLmRmVG90LCBudWxsLCBudWxsLCBudWxsLCBudWxsXSksXG4gICAgICAgIERHLkNvbHVtbi5mcm9tTGlzdChERy5DT0xVTU5fVFlQRS5GTE9BVCwgJ01lYW4gc3F1YXJlJywgW2Fub3ZhLm1zQm4sIGFub3ZhLm1zV24sIG51bGwsIG51bGwsIG51bGwsIG51bGwsIG51bGxdKSxcbiAgICAgICAgREcuQ29sdW1uLmZyb21MaXN0KERHLkNPTFVNTl9UWVBFLkZMT0FULCAnRi1zdGF0aXN0aWNzJywgW2Fub3ZhLmZTdGF0LCBudWxsLCBudWxsLCBudWxsLCBudWxsLCBudWxsLCBudWxsXSksXG4gICAgICAgIERHLkNvbHVtbi5mcm9tTGlzdChERy5DT0xVTU5fVFlQRS5GTE9BVCwgJ3AtdmFsdWUnLCBbYW5vdmEucFZhbHVlLCBudWxsLCBudWxsLCBudWxsLCBudWxsLCBudWxsLCBudWxsXSksXG4gICAgICAgIERHLkNvbHVtbi5mcm9tTGlzdChERy5DT0xVTU5fVFlQRS5GTE9BVCwgYCR7YWxwaGF9LWNyaXRpY2FsIHZhbHVlYCwgW2ZDcml0aWNhbCwgbnVsbCwgbnVsbCwgbnVsbCwgbnVsbCwgbnVsbCwgbnVsbF0pLFxuICAgIF0pO1xufSAvLyBnZXRPbmVXYXlBbm92YURGXG4vKiogQ2hlY2sgY29ycmVjdG5lc3Mgb2Ygc2lnbmlmaWNhbmNlIGxldmVsLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNoZWNrU2lnbmlmaWNhbmNlTGV2ZWwoYWxwaGEpIHtcbiAgICBpZiAoKGFscGhhIDw9IDApIHx8IChhbHBoYSA+PSAxKSlcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKEVSUk9SX01TRy5JTkNPUlJFQ1RfU0lHTklGSUNBTkNFX0xFVkVMKTtcbn1cbi8qKiBDb21wdXRlIHVuYmlhc2VkIHZhcmlhbmNlLiovXG5leHBvcnQgZnVuY3Rpb24gZ2V0VmFyaWFuY2UoZGF0YSkge1xuICAgIC8vIFRoZSBhcHBsaWVkIGZvcm11bGFzIGNhbiBiZSBmb3VuZCBpbiBbNF0gKHNlZSBwLiA2MylcbiAgICBjb25zdCBzaXplID0gZGF0YS5zaXplO1xuICAgIGlmIChzaXplIDw9IDApXG4gICAgICAgIHRocm93IG5ldyBFcnJvcihFUlJPUl9NU0cuSU5DT1JSRUNUX1NBTVBMRV9TSVpFKTtcbiAgICBpZiAoc2l6ZSA9PT0gMSlcbiAgICAgICAgcmV0dXJuIDA7XG4gICAgcmV0dXJuIChkYXRhLnN1bU9mU3F1YXJlcyAtIE1hdGgucG93KChkYXRhLnN1bSksIDIpIC8gc2l6ZSkgLyAoc2l6ZSAtIDEpO1xufSAvLyBnZXRWYXJpYW5jZVxuLyoqIENoZWNrIGVxdWFsaXR5IG9mIHZhcmlhbmNlcyBvZiAyIHNhbXBsZXMuIEYtdGVzdCBpcyBwZXJmb3JtZWQuKi9cbmZ1bmN0aW9uIGFyZVZhcnNFcXVhbCh4RGF0YSwgeURhdGEsIGFscGhhID0gMC4wNSkge1xuICAgIC8vIFRoZSBhcHBsaWVkIGFwcHJvYWNoIGNhbiBiZSBmb3VuZCBpbiBbM11cbiAgICBjaGVja1NpZ25pZmljYW5jZUxldmVsKGFscGhhKTtcbiAgICBjb25zdCB4VmFyID0gZ2V0VmFyaWFuY2UoeERhdGEpO1xuICAgIGNvbnN0IHlWYXIgPSBnZXRWYXJpYW5jZSh5RGF0YSk7XG4gICAgaWYgKHlWYXIgPT09IDApXG4gICAgICAgIHJldHVybiAoeFZhciA9PT0geVZhcik7XG4gICAgY29uc3QgZlN0YXQgPSB4VmFyIC8geVZhcjtcbiAgICBjb25zdCBmQ3JpdCA9IGpTdGF0LmNlbnRyYWxGLmludigxIC0gYWxwaGEsIHhEYXRhLnNpemUgLSAxLCB5RGF0YS5zaXplIC0gMSk7XG4gICAgcmV0dXJuIChmU3RhdCA8IGZDcml0KTtcbn0gLy8gYXJlVmFyc0VxdWFsXG5leHBvcnQgY2xhc3MgRmFjdG9yaXplZERhdGEge1xuICAgIGNvbnN0cnVjdG9yKGNhdGVnb3JpZXMsIHZhbHVlcywgY2hlY2tOb3JtYWxpdHkgPSBmYWxzZSwgYWxwaGEgPSAwLjA1KSB7XG4gICAgICAgIHRoaXMuaXNOb3JtRGlzdHJpYiA9IHVuZGVmaW5lZDtcbiAgICAgICAgdGhpcy5jYXRlZ29yaWVzID0gW107XG4gICAgICAgIGlmIChjYXRlZ29yaWVzLnR5cGUgIT09IERHLkNPTFVNTl9UWVBFLlNUUklORylcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcigpO1xuICAgICAgICBpZiAoY2F0ZWdvcmllcy5sZW5ndGggIT09IHZhbHVlcy5sZW5ndGgpXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoRVJST1JfTVNHLk5PTl9FUVVBTF9GQUNUT1JTX1ZBTFVFU19TSVpFKTtcbiAgICAgICAgdGhpcy5zZXRTdGF0cyhjYXRlZ29yaWVzLCB2YWx1ZXMsIGNoZWNrTm9ybWFsaXR5LCBhbHBoYSk7XG4gICAgfVxuICAgIGlzTm9ybWFsKCkge1xuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9XG4gICAgLyoqIENoZWNrIGVxdWFsaXR5IG9mIHZhcmlhbmNlcyBvZiBmYWN0b3JpemVkIGRhdGEuICovXG4gICAgYXJlVmFyc0VxdWFsKGFscGhhID0gMC4wNSkge1xuICAgICAgICBjb25zdCBLID0gdGhpcy5jYXRDb3VudDtcbiAgICAgICAgaWYgKEsgPT09IDEpXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgY29uc3QgZmlyc3QgPSB7IHN1bTogdGhpcy5zdW1zWzBdLCBzdW1PZlNxdWFyZXM6IHRoaXMuc3Vtc09mU3F1YXJlc1swXSwgc2l6ZTogdGhpcy5zdWJTYW1wbGVTaXplc1swXSB9O1xuICAgICAgICBmb3IgKGxldCBpID0gMTsgaSA8IEs7ICsraSkge1xuICAgICAgICAgICAgaWYgKCFhcmVWYXJzRXF1YWwoZmlyc3QsIHsgc3VtOiB0aGlzLnN1bXNbaV0sIHN1bU9mU3F1YXJlczogdGhpcy5zdW1zT2ZTcXVhcmVzW2ldLFxuICAgICAgICAgICAgICAgIHNpemU6IHRoaXMuc3ViU2FtcGxlU2l6ZXNbaV0gfSwgYWxwaGEpKVxuICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICB9IC8vIGFyZVZhcnNFcXVhbFxuICAgIC8qKiBQZXJmb3JtIG9uZS13YXkgQU5PVkEgY29tcHV0YXRpb25zLiAqL1xuICAgIGdldE9uZVdheUFub3ZhKCkge1xuICAgICAgICAvLyBGdXJ0aGVyLCBub3RhdGlvbnMgYW5kIGZvcm11bGFzIGZyb20gKHNlZSBbMl0sIHAuIDI5MCkgYXJlIHVzZWQuXG4gICAgICAgIGNvbnN0IEsgPSB0aGlzLmNhdENvdW50O1xuICAgICAgICBpZiAoSyA9PT0gMSlcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihFUlJPUl9NU0cuQU5PVkFfRkFJTEVEX0pVU1RfT05FX0NBVCk7XG4gICAgICAgIGxldCBzdW0gPSAwO1xuICAgICAgICBsZXQgc3VtT2ZTcXVhcmVzID0gMDtcbiAgICAgICAgY29uc3QgTiA9IHRoaXMuc2l6ZTtcbiAgICAgICAgbGV0IGJ1ZiA9IDA7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgSzsgKytpKSB7XG4gICAgICAgICAgICBzdW0gKz0gdGhpcy5zdW1zW2ldO1xuICAgICAgICAgICAgc3VtT2ZTcXVhcmVzICs9IHRoaXMuc3Vtc09mU3F1YXJlc1tpXTtcbiAgICAgICAgICAgIGJ1ZiArPSBNYXRoLnBvdyh0aGlzLnN1bXNbaV0sIDIpIC8gdGhpcy5zdWJTYW1wbGVTaXplc1tpXTtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBzc1RvdCA9IHN1bU9mU3F1YXJlcyAtIE1hdGgucG93KHN1bSwgMikgLyBOO1xuICAgICAgICBjb25zdCBzc0JuID0gYnVmIC0gTWF0aC5wb3coc3VtLCAyKSAvIE47XG4gICAgICAgIGNvbnN0IHNzV24gPSBzc1RvdCAtIHNzQm47XG4gICAgICAgIGNvbnN0IGRmQm4gPSBLIC0gMTtcbiAgICAgICAgY29uc3QgZGZXbiA9IE4gLSBLO1xuICAgICAgICBjb25zdCBkZlRvdCA9IE4gLSAxO1xuICAgICAgICBjb25zdCBtc0JuID0gc3NCbiAvIGRmQm47XG4gICAgICAgIGNvbnN0IG1zV24gPSBzc1duIC8gZGZXbjtcbiAgICAgICAgY29uc3QgZlN0YXQgPSBtc0JuIC8gbXNXbjtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHNzQm46IHNzQm4sXG4gICAgICAgICAgICBzc1duOiBzc1duLFxuICAgICAgICAgICAgc3NUb3Q6IHNzVG90LFxuICAgICAgICAgICAgZGZCbjogZGZCbixcbiAgICAgICAgICAgIGRmV246IGRmV24sXG4gICAgICAgICAgICBkZlRvdDogZGZUb3QsXG4gICAgICAgICAgICBtc0JuOiBtc0JuLFxuICAgICAgICAgICAgbXNXbjogbXNXbixcbiAgICAgICAgICAgIGZTdGF0OiBmU3RhdCxcbiAgICAgICAgICAgIHBWYWx1ZTogMSAtIGpTdGF0LmNlbnRyYWxGLmNkZihmU3RhdCwgZGZCbiwgZGZXbiksXG4gICAgICAgIH07XG4gICAgfSAvLyBnZXRPbmVXYXlBbm92YVxuICAgIC8qKiBDb21wdXRlIHN1bSAmIHN1bXMgb2Ygc3F1YXJlcyB3aXRoIHJlc3BlY3QgdG8gZmFjdG9yIGxldmVscy4gKi9cbiAgICBzZXRTdGF0cyhjYXRlZ29yaWVzLCB2YWx1ZXMsIF9jaGVja05vcm1hbGl0eSA9IGZhbHNlLCBfYWxwaGEgPSAwLjA1KSB7XG4gICAgICAgIC8vIFRPRE86IHByb3ZpZGUgY2hlY2sgbm9ybWFsaXR5IGZlYXR1cmVcbiAgICAgICAgY29uc3QgdHlwZSA9IHZhbHVlcy50eXBlO1xuICAgICAgICBjb25zdCBzaXplID0gdmFsdWVzLmxlbmd0aDtcbiAgICAgICAgc3dpdGNoICh0eXBlKSB7XG4gICAgICAgICAgICBjYXNlIERHLkNPTFVNTl9UWVBFLklOVDpcbiAgICAgICAgICAgIGNhc2UgREcuQ09MVU1OX1RZUEUuRkxPQVQ6XG4gICAgICAgICAgICAgICAgdGhpcy5jYXRlZ29yaWVzID0gY2F0ZWdvcmllcy5jYXRlZ29yaWVzO1xuICAgICAgICAgICAgICAgIGNvbnN0IGNhdENvdW50ID0gdGhpcy5jYXRlZ29yaWVzLmxlbmd0aDtcbiAgICAgICAgICAgICAgICB0aGlzLmNhdENvdW50ID0gY2F0Q291bnQ7XG4gICAgICAgICAgICAgICAgdGhpcy5zaXplID0gc2l6ZTtcbiAgICAgICAgICAgICAgICBjb25zdCB2YWxzID0gdmFsdWVzLmdldFJhd0RhdGEoKTtcbiAgICAgICAgICAgICAgICBjb25zdCBjYXRzID0gY2F0ZWdvcmllcy5nZXRSYXdEYXRhKCk7XG4gICAgICAgICAgICAgICAgY29uc3Qgc3VtcyA9IG5ldyBGbG9hdDY0QXJyYXkoY2F0Q291bnQpLmZpbGwoMCk7XG4gICAgICAgICAgICAgICAgY29uc3Qgc3Vtc09mU3F1YXJlcyA9IG5ldyBGbG9hdDY0QXJyYXkoY2F0Q291bnQpLmZpbGwoMCk7XG4gICAgICAgICAgICAgICAgY29uc3Qgc3ViU2FtcGxlU2l6ZXMgPSBuZXcgSW50MzJBcnJheShjYXRDb3VudCkuZmlsbCgwKTtcbiAgICAgICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHNpemU7ICsraSkge1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBjID0gY2F0c1tpXTtcbiAgICAgICAgICAgICAgICAgICAgc3Vtc1tjXSArPSB2YWxzW2ldO1xuICAgICAgICAgICAgICAgICAgICBzdW1zT2ZTcXVhcmVzW2NdICs9IE1hdGgucG93KHZhbHNbaV0sIDIpO1xuICAgICAgICAgICAgICAgICAgICArK3N1YlNhbXBsZVNpemVzW2NdO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB0aGlzLnN1bXMgPSBzdW1zO1xuICAgICAgICAgICAgICAgIHRoaXMuc3Vtc09mU3F1YXJlcyA9IHN1bXNPZlNxdWFyZXM7XG4gICAgICAgICAgICAgICAgdGhpcy5zdWJTYW1wbGVTaXplcyA9IHN1YlNhbXBsZVNpemVzO1xuICAgICAgICAgICAgICAgIGJyZWFrO1xuICAgICAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoRVJST1JfTVNHLlVOU1VQUE9SVEVEX0NPTFVNTl9UWVBFKTtcbiAgICAgICAgfVxuICAgIH0gLy8gc2V0U3RhdHNcbn0gLy8gRmFjdG9yaXplZERhdGFcbi8qKiBQZXJmb3JtIG9uZS13YXkgYW5hbHlzaXMgb2YgdmFyaWFuY2VzLiAqL1xuZXhwb3J0IGZ1bmN0aW9uIG9uZVdheUFub3ZhKGNhdGVnb3JlcywgdmFsdWVzLCBhbHBoYSA9IDAuMDUsIHZhbGlkYXRlID0gZmFsc2UpIHtcbiAgICBjaGVja1NpZ25pZmljYW5jZUxldmVsKGFscGhhKTtcbiAgICBjb25zdCBmYWN0b3JpemVkID0gbmV3IEZhY3Rvcml6ZWREYXRhKGNhdGVnb3JlcywgdmFsdWVzLCB2YWxpZGF0ZSwgYWxwaGEpO1xuICAgIGlmICh2YWxpZGF0ZSkge1xuICAgICAgICBpZiAoIWZhY3Rvcml6ZWQuYXJlVmFyc0VxdWFsKGFscGhhKSlcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihFUlJPUl9NU0cuTk9OX0VRVUFMX1ZBUklBTkNFUyk7XG4gICAgICAgIGlmICghZmFjdG9yaXplZC5pc05vcm1hbCgpKVxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKEVSUk9SX01TRy5OT05fTk9STUFMX0RJU1RSSUIpO1xuICAgIH1cbiAgICBjb25zdCBhbm92YSA9IGZhY3Rvcml6ZWQuZ2V0T25lV2F5QW5vdmEoKTtcbiAgICBjb25zdCBmQ3JpdCA9IGpTdGF0LmNlbnRyYWxGLmludigxIC0gYWxwaGEsIGFub3ZhLmRmQm4sIGFub3ZhLmRmV24pO1xuICAgIGNvbnN0IGh5cG90aGVzaXMgPSBgVEhFIE5VTEwgSFlQT1RIRVNJUzogdGhlIFwiJHtjYXRlZ29yZXMubmFtZX1cIiBcbiAgICBmYWN0b3IgZG9lcyBub3QgcHJvZHVjZSBhIHNpZ25pZmljYW50IGRpZmZlcmVuY2UgaW4gdGhlIFwiJHt2YWx1ZXMubmFtZX1cIiBmZWF0dXJlLmA7XG4gICAgY29uc3QgdGVzdFJlc3VsdCA9IGBUZXN0IHJlc3VsdDogJHsoYW5vdmEuZlN0YXQgPiBmQ3JpdCkgPyAnUkVKRUNURUQuJyA6ICdGQUlMRUQgVE8gUkVKRUNULid9YDtcbiAgICByZXR1cm4gZ2V0T25lV2F5QW5vdmFERihhbm92YSwgYWxwaGEsIGZDcml0LCBoeXBvdGhlc2lzLCB0ZXN0UmVzdWx0KTtcbn0gLy8gb25lV2F5QW5vdmFcbiIsInZhciBfX2F3YWl0ZXIgPSAodGhpcyAmJiB0aGlzLl9fYXdhaXRlcikgfHwgZnVuY3Rpb24gKHRoaXNBcmcsIF9hcmd1bWVudHMsIFAsIGdlbmVyYXRvcikge1xuICAgIGZ1bmN0aW9uIGFkb3B0KHZhbHVlKSB7IHJldHVybiB2YWx1ZSBpbnN0YW5jZW9mIFAgPyB2YWx1ZSA6IG5ldyBQKGZ1bmN0aW9uIChyZXNvbHZlKSB7IHJlc29sdmUodmFsdWUpOyB9KTsgfVxuICAgIHJldHVybiBuZXcgKFAgfHwgKFAgPSBQcm9taXNlKSkoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgICBmdW5jdGlvbiBmdWxmaWxsZWQodmFsdWUpIHsgdHJ5IHsgc3RlcChnZW5lcmF0b3IubmV4dCh2YWx1ZSkpOyB9IGNhdGNoIChlKSB7IHJlamVjdChlKTsgfSB9XG4gICAgICAgIGZ1bmN0aW9uIHJlamVjdGVkKHZhbHVlKSB7IHRyeSB7IHN0ZXAoZ2VuZXJhdG9yW1widGhyb3dcIl0odmFsdWUpKTsgfSBjYXRjaCAoZSkgeyByZWplY3QoZSk7IH0gfVxuICAgICAgICBmdW5jdGlvbiBzdGVwKHJlc3VsdCkgeyByZXN1bHQuZG9uZSA/IHJlc29sdmUocmVzdWx0LnZhbHVlKSA6IGFkb3B0KHJlc3VsdC52YWx1ZSkudGhlbihmdWxmaWxsZWQsIHJlamVjdGVkKTsgfVxuICAgICAgICBzdGVwKChnZW5lcmF0b3IgPSBnZW5lcmF0b3IuYXBwbHkodGhpc0FyZywgX2FyZ3VtZW50cyB8fCBbXSkpLm5leHQoKSk7XG4gICAgfSk7XG59O1xuLyoqIENhbGN1bGF0ZXMgQ2x1c3RlcnMgYmFzZWQgb24gZGJzY2FuIGFsZ29yaXRobSBpbiB3YXNtLlxuICogQHBhcmFtIGVtYmVkWCAtIGVtYmVkZGluZ3MgeCBsb2NhdGlvbi5cbiAqIEBwYXJhbSBlbWJlZFkgLSBlbWJlZGRpbmdzIHkgbG9jYXRpb24uXG4gKiBAcGFyYW0gbWluUHRzIC0gbWluaW11bSBudW1iZXIgb2YgcG9pbnRzIGluIGEgY2x1c3Rlci5cbiAqIEBwYXJhbSBlcHNpbG9uIC0gZXBzaWxvbi5cbiAqIEByZXR1cm5zIGFycmF5IHdpdGggY2x1c3RlciBpbmRleGVzLlxuICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0RGJzY2FuV29ya2VyKGVtYmVkWCwgZW1iZWRZLCBlcHNpbG9uLCBtaW5QdHMpIHtcbiAgICByZXR1cm4gX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuICAgICAgICByZXR1cm4gbmV3IFByb21pc2UoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgICAgICAgY29uc3Qgd29ya2VyID0gbmV3IFdvcmtlcihuZXcgVVJMKCcuL2NsdXN0ZXJpbmctd29ya2VyJywgaW1wb3J0Lm1ldGEudXJsKSk7XG4gICAgICAgICAgICB3b3JrZXIucG9zdE1lc3NhZ2UoeyBlbWJlZFgsIGVtYmVkWSwgbWluUHRzLCBlcHNpbG9uIH0pO1xuICAgICAgICAgICAgd29ya2VyLm9ubWVzc2FnZSA9ICh7IGRhdGE6IHsgZXJyb3IsIGNsdXN0ZXJzIH0gfSkgPT4ge1xuICAgICAgICAgICAgICAgIHdvcmtlci50ZXJtaW5hdGUoKTtcbiAgICAgICAgICAgICAgICBlcnJvciA/IHJlamVjdChlcnJvcikgOiByZXNvbHZlKGNsdXN0ZXJzKTtcbiAgICAgICAgICAgIH07XG4gICAgICAgIH0pO1xuICAgIH0pO1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZGJzY2FuLXdvcmtlci1jcmVhdG9yLmpzLm1hcCIsInZhciBfX2F3YWl0ZXIgPSAodGhpcyAmJiB0aGlzLl9fYXdhaXRlcikgfHwgZnVuY3Rpb24gKHRoaXNBcmcsIF9hcmd1bWVudHMsIFAsIGdlbmVyYXRvcikge1xuICAgIGZ1bmN0aW9uIGFkb3B0KHZhbHVlKSB7IHJldHVybiB2YWx1ZSBpbnN0YW5jZW9mIFAgPyB2YWx1ZSA6IG5ldyBQKGZ1bmN0aW9uIChyZXNvbHZlKSB7IHJlc29sdmUodmFsdWUpOyB9KTsgfVxuICAgIHJldHVybiBuZXcgKFAgfHwgKFAgPSBQcm9taXNlKSkoZnVuY3Rpb24gKHJlc29sdmUsIHJlamVjdCkge1xuICAgICAgICBmdW5jdGlvbiBmdWxmaWxsZWQodmFsdWUpIHsgdHJ5IHsgc3RlcChnZW5lcmF0b3IubmV4dCh2YWx1ZSkpOyB9IGNhdGNoIChlKSB7IHJlamVjdChlKTsgfSB9XG4gICAgICAgIGZ1bmN0aW9uIHJlamVjdGVkKHZhbHVlKSB7IHRyeSB7IHN0ZXAoZ2VuZXJhdG9yW1widGhyb3dcIl0odmFsdWUpKTsgfSBjYXRjaCAoZSkgeyByZWplY3QoZSk7IH0gfVxuICAgICAgICBmdW5jdGlvbiBzdGVwKHJlc3VsdCkgeyByZXN1bHQuZG9uZSA/IHJlc29sdmUocmVzdWx0LnZhbHVlKSA6IGFkb3B0KHJlc3VsdC52YWx1ZSkudGhlbihmdWxmaWxsZWQsIHJlamVjdGVkKTsgfVxuICAgICAgICBzdGVwKChnZW5lcmF0b3IgPSBnZW5lcmF0b3IuYXBwbHkodGhpc0FyZywgX2FyZ3VtZW50cyB8fCBbXSkpLm5leHQoKSk7XG4gICAgfSk7XG59O1xubGV0IGdwdUFkYXB0ZXIgPSBudWxsO1xubGV0IGdwdURldmljZSA9IG51bGw7XG5leHBvcnQgZnVuY3Rpb24gZ2V0R1BVRGV2aWNlKCkge1xuICAgIHJldHVybiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG4gICAgICAgIGlmICghZ3B1QWRhcHRlcikge1xuICAgICAgICAgICAgLy9yZWFzb246IG9ubHkgaGVyZSB3ZSBnZXQgdGhlIGdwdUFkYXB0ZXJcbiAgICAgICAgICAgIC8vIGVzbGludC1kaXNhYmxlLW5leHQtbGluZSBuby1yZXN0cmljdGVkLXN5bnRheFxuICAgICAgICAgICAgZ3B1QWRhcHRlciA9IHlpZWxkIG5hdmlnYXRvci5ncHUucmVxdWVzdEFkYXB0ZXIoeyBwb3dlclByZWZlcmVuY2U6ICdoaWdoLXBlcmZvcm1hbmNlJyB9KTtcbiAgICAgICAgICAgIGlmIChncHVBZGFwdGVyID09IG51bGwpXG4gICAgICAgICAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgICAgIH1cbiAgICAgICAgbGV0IGlzTG9zdCA9IGZhbHNlO1xuICAgICAgICBpZiAoZ3B1RGV2aWNlKSB7XG4gICAgICAgICAgICBncHVEZXZpY2UubG9zdC50aGVuKCgpID0+IHtcbiAgICAgICAgICAgICAgICBpc0xvc3QgPSB0cnVlO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB5aWVsZCBuZXcgUHJvbWlzZSgocikgPT4gc2V0VGltZW91dChyLCAxMCkpOyAvLyB3YWl0IHRvIHNlZSBpZiB0aGUgZGV2aWNlIGlzIGxvc3RcbiAgICAgICAgfVxuICAgICAgICBpZiAoIWdwdURldmljZSB8fCBpc0xvc3QpIHtcbiAgICAgICAgICAgIGNvbnN0IHJlcXVpcmVkQnVmZmVyU2l6ZSA9IDEwMDAwMDAwMDA7IC8vIH4xMDAwTUJcbiAgICAgICAgICAgIGNvbnN0IGFkYXB0ZXJMaW1pdHMgPSBncHVBZGFwdGVyLmxpbWl0cztcbiAgICAgICAgICAgIGNvbnN0IGJ1ZmZmZXJTaXplTGltaXQgPSBhZGFwdGVyTGltaXRzLm1heEJ1ZmZlclNpemU7XG4gICAgICAgICAgICBjb25zdCBzdG9yYWdlQnVmZmVyU2l6ZUxpbWl0ID0gYWRhcHRlckxpbWl0cy5tYXhTdG9yYWdlQnVmZmVyQmluZGluZ1NpemU7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIGdwdURldmljZSA9IHlpZWxkIGdwdUFkYXB0ZXIucmVxdWVzdERldmljZSh7IHJlcXVpcmVkTGltaXRzOiB7XG4gICAgICAgICAgICAgICAgICAgICAgICBtYXhCdWZmZXJTaXplOiBNYXRoLm1pbihidWZmZmVyU2l6ZUxpbWl0LCByZXF1aXJlZEJ1ZmZlclNpemUpLFxuICAgICAgICAgICAgICAgICAgICAgICAgbWF4U3RvcmFnZUJ1ZmZlckJpbmRpbmdTaXplOiBNYXRoLm1pbihzdG9yYWdlQnVmZmVyU2l6ZUxpbWl0LCByZXF1aXJlZEJ1ZmZlclNpemUpXG4gICAgICAgICAgICAgICAgICAgIH0gfSk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIGdwdURldmljZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgY29uc29sZS5lcnJvcignRmFpbGVkIHRvIGNyZWF0ZSBkZXZpY2Ugd2l0aCByZXF1aXJlZCBsaW1pdHMnLCBlKTtcbiAgICAgICAgICAgICAgICBncHVEZXZpY2UgPSB5aWVsZCBncHVBZGFwdGVyLnJlcXVlc3REZXZpY2UoKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gZ3B1RGV2aWNlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBncHVEZXZpY2U7XG4gICAgfSk7XG59XG5leHBvcnQgZnVuY3Rpb24gZ2V0R1BVQWRhcHRlckRlc2NyaXB0aW9uKCkge1xuICAgIHJldHVybiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG4gICAgICAgIGlmICghZ3B1QWRhcHRlcikge1xuICAgICAgICAgICAgLy8gcmVhc29uOiBvbmx5IGhlcmUgd2UgZ2V0IHRoZSBncHVBZGFwdGVyXG4gICAgICAgICAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgbm8tcmVzdHJpY3RlZC1zeW50YXhcbiAgICAgICAgICAgIGdwdUFkYXB0ZXIgPSB5aWVsZCBuYXZpZ2F0b3IuZ3B1LnJlcXVlc3RBZGFwdGVyKCk7XG4gICAgICAgICAgICBpZiAoZ3B1QWRhcHRlciA9PSBudWxsKVxuICAgICAgICAgICAgICAgIHJldHVybiBudWxsO1xuICAgICAgICB9XG4gICAgICAgIGNvbnN0IGluZm8gPSB5aWVsZCBncHVBZGFwdGVyLnJlcXVlc3RBZGFwdGVySW5mbygpO1xuICAgICAgICBpZiAoIWluZm8pXG4gICAgICAgICAgICByZXR1cm4gbnVsbDtcbiAgICAgICAgY29uc3Qgb3V0U3RyaW5nID0gcmVwbGFjZUVtcHR5U3RyaW5nKGluZm8uZGVzY3JpcHRpb24sIHJlcGxhY2VFbXB0eVN0cmluZyhpbmZvLnZlbmRvciwgJ05vIEdQVSBkZXNjcmlwdGlvbiBhdmFpbGFibGUnKSk7XG4gICAgICAgIHJldHVybiBvdXRTdHJpbmc7XG4gICAgfSk7XG59XG5mdW5jdGlvbiByZXBsYWNlRW1wdHlTdHJpbmcoc3RyLCByZXBsYWNlbWVudCkge1xuICAgIHJldHVybiAhc3RyIHx8IHN0ciA9PSAnJyA/IHJlcGxhY2VtZW50IDogc3RyO1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9Z2V0R1BVRGV2aWNlLmpzLm1hcCIsImZ1bmN0aW9uIGV1Y2xpZGVhbkFnZ3JlZ2F0aW9uV2dzbChhcnJheVNpemUpIHtcbiAgICByZXR1cm4gYFxuICAgICAgICB2YXIgc3VtID0gMC4wO1xuICAgICAgICBmb3IgKHZhciBpID0gMHU7IGkgPCAke2FycmF5U2l6ZX07IGkgPSBpICsgMXUpIHtcbiAgICAgICAgICAgIHN1bSA9IHN1bSArIGRpc3RhbmNlc1tpXSAqIGRpc3RhbmNlc1tpXSAqIGNvbXB1dGVJbmZvLndlaWdodHNbaV0gKiBjb21wdXRlSW5mby53ZWlnaHRzW2ldO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBzcXJ0KHN1bSk7XG4gICAgYDtcbn1cbjtcbmZ1bmN0aW9uIG1hbmhhdHRhbkFnZ3JlZ2F0aW9uV2dzbChhcnJheVNpemUpIHtcbiAgICByZXR1cm4gYFxuICAgICAgICB2YXIgc3VtID0gMC4wO1xuICAgICAgICBmb3IgKHZhciBpID0gMHU7IGkgPCAke2FycmF5U2l6ZX07IGkgPSBpICsgMXUpIHtcbiAgICAgICAgICAgIHN1bSA9IHN1bSArIGFicyhkaXN0YW5jZXNbaV0pICogY29tcHV0ZUluZm8ud2VpZ2h0c1tpXTtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gc3VtO1xuICAgIGA7XG59XG5leHBvcnQgdmFyIFdFQkdTTEFHR1JFR0FUSU9OO1xuKGZ1bmN0aW9uIChXRUJHU0xBR0dSRUdBVElPTikge1xuICAgIFdFQkdTTEFHR1JFR0FUSU9OW1wiRVVDTElERUFOXCJdID0gXCJFVUNMSURFQU5cIjtcbiAgICBXRUJHU0xBR0dSRUdBVElPTltcIk1BTkhBVFRBTlwiXSA9IFwiTUFOSEFUVEFOXCI7XG59KShXRUJHU0xBR0dSRUdBVElPTiB8fCAoV0VCR1NMQUdHUkVHQVRJT04gPSB7fSkpO1xuZXhwb3J0IGNvbnN0IFdFQkdTTEFHR1JFR0FUSU9ORlVOQ1RJT05TID0ge1xuICAgIFtXRUJHU0xBR0dSRUdBVElPTi5FVUNMSURFQU5dOiBldWNsaWRlYW5BZ2dyZWdhdGlvbldnc2wsXG4gICAgW1dFQkdTTEFHR1JFR0FUSU9OLk1BTkhBVFRBTl06IG1hbmhhdHRhbkFnZ3JlZ2F0aW9uV2dzbFxufTtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPXdlYkdQVS1hZ2dyZWdhdGlvbi5qcy5tYXAiLCIvKiBlc2xpbnQtZGlzYWJsZSBtYXgtbGVuICovXG4vLyBpbiBhbGwgdGhlIGZ1bmN0aW9ucyBiZWxvdywgdGhlIHZhcmlhYmxlcyBhIGFuZCBiIGFyZSBhc3N1bWVkIHRvIGJlIGFycmF5cyBvZiB1aW50MzIvZjMyXG4vL3ZhbHVlcyB3aGljaCBhcmUgaW5mZXJlZCBmcm9tIHRoZSBjb2RlIHRoaXMgY2h1bmsgaXMgaW5qZWN0ZWQgaW50b1xuLy8gYWxzbywgd2UgaGF2ZSBhY2Nlc3MgdG8gY29tcHV0ZUluZm8gc3RydWN0LCB3aGljaCBjb250YWlucyB0aGUgZm9sbG93aW5nIGZpZWxkczpcbi8vIGNvbXB1dGVJbmZvLmVudHJ5U2l6ZXM6IGFycmF5IG9mIGFycmF5cyBvZiB1MzIgY29udGFpbmluZyB0aGUgc2l6ZXMgb2YgdGhlIGVudHJpZXNcbi8vIG90aGVyIGZpZWxkcyBhcmUgc3BlY2lmaWMgdG8gdGhlIGRpc3RhbmNlIGZ1bmN0aW9uIHNob3VsZCBiZSBpbmplY3RlZCBmcm9tIHRoZSBtYWluIHNjcmlwdCB0aGF0IGNhbGxzIHRoaXMgZnVuY3Rpb24sXG4vLyBhbmQgc2hvdWxkIGJlIGF2YWlsYWJsZSBpbiB0aGUgc3VwcGxlbWVudGFyeUluZm8gc3RydWN0XG4vLyBsaWtlIHRoZSBzaW1pbGFyaXR5IG1hdHJpeCBmb3IgbW9ub21lciBjaGVtaWNhbCBkaXN0YW5jZS5cbi8vIHRoZSBnZXRQcm9jZXNzSW5mbyBmdW5jdGlvbiBzaG91bGQgcmV0dXJuIGNvcnJlY3QgYnVmZmVyIGFsbG9jYXRpb24gbWVjaGFuaXNtIGZvciB0aGUgc3VwcGxlbWVudGFyeUluZm8sXG4vLyBmb3IgZXZlcnkgZW50cnkgbGlzdFxuLy8gdGhlIG1heERpc3RhbmNlIHZhcmlhYmxlIGlzIGFsc28gYXNzdW1lZCB0byBiZSBhdmFpbGFibGUgaW4gdGhlXG4vLyBzY29wZSBvZiB0aGUgZnVuY3Rpb24sIGluIGNhc2Ugb2Yga25uIGl0IGlzIHRoZSBkaXN0YW5jZSBpbiB0aGUgbGFzdCBwb3N0aW9uIG9mIGtubiBvbiB0aGlzIGluZGV4LFxuLy8gaW4gY2FzZSBvZiBzcGFyc2UgbWF0cml4LCBpdCBjYW4gYmUganVzdCB0aGUgdGhyZXNob2xkIGZvciB0aGUgZGlzdGFuY2UuXG4vLyBoYW1taW5nIGRpc3RhbmNlIGZvciBzZXF1bmVuY2VzIG9mIHVpbnQzMiBhcnJheXMgb2YgbWF4IGxlbmd0aCAke21heEFycmF5U2l6ZX1cbmV4cG9ydCBmdW5jdGlvbiB3ZWJHUFVIYW1taW5nKF9tYXhBcnJheVNpemUsIGVudHJ5SW5kZXgpIHtcbiAgICByZXR1cm4gYFxuICBsZXQgYUxlbmd0aDogdTMyID0gY29tcHV0ZUluZm8uZW50cnlTaXplc1ske2VudHJ5SW5kZXh9XVthSW5kZXhdO1xuICBsZXQgYkxlbmd0aDogdTMyID0gY29tcHV0ZUluZm8uZW50cnlTaXplc1ske2VudHJ5SW5kZXh9XVtiSW5kZXhdO1xuICBsZXQgbWF4TGVuZ3RoOiB1MzIgPSBtYXgoYUxlbmd0aCwgYkxlbmd0aCk7XG4gIGxldCBtaW5MZW5ndGg6IHUzMiA9IG1pbihhTGVuZ3RoLCBiTGVuZ3RoKTtcbiAgbGV0IHNpemVEaWZmOiB1MzIgPSBtYXhMZW5ndGggLSBtaW5MZW5ndGg7XG4gIFxuICBsZXQgbWF4SW50RGlzdGFuY2UgPSBjZWlsKG1heERpc3RhbmNlICogZjMyKG1heExlbmd0aCkpIC0gZjMyKHNpemVEaWZmKTtcblxuICB2YXIgZGlmZjogZjMyID0gMC4wO1xuICBmb3IgKHZhciBpID0gMHU7IGkgPCAke19tYXhBcnJheVNpemV9OyBpID0gaSArIDF1KSB7XG4gICAgICBkaWZmID0gZGlmZiArIGYzMihhW2ldICE9IGJbaV0pO1xuICAgICAgaWYgKGRpZmYgPiBtYXhJbnREaXN0YW5jZSkge1xuICAgICAgICAgICAgcmV0dXJuIDEuMDtcbiAgICAgICAgfVxuICB9XG4gIGRpZmYgKz0gZjMyKHNpemVEaWZmKTtcbiAgcmV0dXJuIGRpZmYgLyAke19tYXhBcnJheVNpemV9O1xuICBgO1xufVxuZXhwb3J0IGZ1bmN0aW9uIHdlYkdQVU1vbm9tZXJDaGVtaWNhbERpc3RhbmNlKF9tYXhBcnJheVNpemUsIGVudHJ5SW5kZXgpIHtcbiAgICAvLyBpdCBpcyBhc3N1bWV0IHRoYXQgc3VwcEluZm8gc3RydWN0IGNvbnRhaW5zIGNvcnJlY3QgbWF0cml4IGNhbGxlZCBzaW1pbGFyaXR5TWF0cml4JHtlbnRyeUluZGV4fSwgKHNpbWlsYXJpdHlNYXRyaXgwLCBzaW1pbGFyaXR5TWF0cml4MSwgZXRjKVxuICAgIC8vIHRoaXMgc2hvdWxkIGJlIGd1YXJhbnRlZWQgYnkgdGhlIGdldFByb2Nlc3NJbmZvIGZ1bmN0aW9uLlxuICAgIHJldHVybiBgXG4gIGxldCBhTGVuZ3RoOiB1MzIgPSBjb21wdXRlSW5mby5lbnRyeVNpemVzWyR7ZW50cnlJbmRleH1dW2FJbmRleF07XG4gIGxldCBiTGVuZ3RoOiB1MzIgPSBjb21wdXRlSW5mby5lbnRyeVNpemVzWyR7ZW50cnlJbmRleH1dW2JJbmRleF07XG4gIGxldCBtYXhMZW5ndGg6IHUzMiA9IG1heChhTGVuZ3RoLCBiTGVuZ3RoKTtcbiAgbGV0IG1pbkxlbmd0aDogdTMyID0gbWluKGFMZW5ndGgsIGJMZW5ndGgpO1xuICBsZXQgc2l6ZURpZmY6IHUzMiA9IG1heExlbmd0aCAtIG1pbkxlbmd0aDtcbiAgXG4gIGxldCBtYXhJbnREaXN0YW5jZSA9IGNlaWwobWF4RGlzdGFuY2UgKiBmMzIobWF4TGVuZ3RoKSkgLSBmMzIoc2l6ZURpZmYpO1xuXG4gIGxldCBzaW1NYXRyaXggPSAmKHN1cHBJbmZvLnNpbWlsYXJpdHlNYXRyaXgke2VudHJ5SW5kZXh9KTsgLy8gdXNpbmcgcG9pbnRlcnMgbWFrZSB0aGluZ3MgZmFzdGVyXG4gIHZhciBkaWZmOiBmMzIgPSAwLjA7XG4gIGZvciAodmFyIGkgPSAwdTsgaSA8ICR7X21heEFycmF5U2l6ZX07IGkgPSBpICsgMXUpIHtcbiAgICAgIGRpZmYgPSBkaWZmICsgMS4wIC0gKCpzaW1NYXRyaXgpW3UzMihhW2ldKV1bdTMyKGJbaV0pXTtcbiAgICAgIGlmIChkaWZmID4gbWF4SW50RGlzdGFuY2UpIHtcbiAgICAgICAgICAgIHJldHVybiAxLjA7XG4gICAgICAgIH1cbiAgfVxuICBkaWZmICs9IGYzMihzaXplRGlmZik7XG4gIHJldHVybiBkaWZmIC8gJHtfbWF4QXJyYXlTaXplfTtcbiAgYDtcbn1cbmV4cG9ydCBmdW5jdGlvbiB3ZWJHUFVMZXZlbnN0ZWluKG1heEFycmF5U2l6ZSwgZW50cnlJbmRleCkge1xuICAgIHJldHVybiBgXG4gIGxldCBhTGVuZ3RoOiB1MzIgPSBjb21wdXRlSW5mby5lbnRyeVNpemVzWyR7ZW50cnlJbmRleH1dW2FJbmRleF07XG4gIGxldCBiTGVuZ3RoOiB1MzIgPSBjb21wdXRlSW5mby5lbnRyeVNpemVzWyR7ZW50cnlJbmRleH1dW2JJbmRleF07XG4gIGxldCBtYXhMZW5ndGg6IHUzMiA9IG1heChhTGVuZ3RoLCBiTGVuZ3RoKTtcbiAgbGV0IG1pbkxlbmd0aDogdTMyID0gbWluKGFMZW5ndGgsIGJMZW5ndGgpO1xuXG4gIGxldCBtYXhJbnREaXN0YW5jZSA9IGNlaWwobWF4RGlzdGFuY2UgKiBmMzIobWF4TGVuZ3RoKSk7XG5cbiAgLy8gd2Ugd2lsbCBzdG9yZSB0d28gYXJyYXlzIGFzIG1hdHJpeCBhbmQgc3dhcCB0aGUgd29ya2luZyBpbmRpY2VzIHBlciBwYXNzLlxuICAvLyB0aGlzIHdheSB3ZSBjYW4gcmVkdWNlIG1lbW9yeSB1c2FnZSBwZXIgY29tcHV0YXRpb24gdG8ganVzdCBPKGFMZW5ndGgpXG4gIC8vIHRoZSBncmlkIHdpbGwgaGF2ZSBhTGVuZ3RoICsgMSBjb2x1bW5zIGFuZCBiTGVuZ3RoICsgMSByb3dzXG4gIC8vIHRoaXMgd2lsbCBiZSBndWFyYW50ZWVkIGJ5IGl0ZXJhdGlvbiwgYnV0IHRoZSBhcnJheSBzaXplcyBtdXN0IGJlIGtub3duIGF0IGNvbXBpbGUgdGltZSwgc28gd2Ugd2lsbCB1c2UgYSBmaXhlZCBzaXplIG9mIG1heEFycmF5U2l6ZVxuICB2YXIgZHluYW1pY1Bhc3NNYXQ6IGFycmF5PGFycmF5PGYzMiwgJHttYXhBcnJheVNpemUgKyAxfXU+LCAyPjsgLy8gaW5pdGlhbGl6ZSB0byAwXG4gIFxuICB2YXIgcHJldkluZGV4OiB1MzIgPSAwO1xuICB2YXIgY3VySW5kZXg6IHUzMiA9IDE7IC8vIHdlIHdpbGwgc3dhcCB0aGVzZSBpbmRpY2VzIHBlciBwYXNzXG5cbiAgLy8gaW5pdGlhbGl6ZSB0aGUgZmlyc3Qgcm93XG4gIGZvciAodmFyIGkgPSAwdTsgaSA8PSBhTGVuZ3RoOyBpID0gaSArIDF1KSB7XG4gICAgICBkeW5hbWljUGFzc01hdFtwcmV2SW5kZXhdW2ldID0gZjMyKGkpO1xuICB9XG5cbiAgLy8gaXRlcmF0ZSBvdmVyIHRoZSByb3dzXG4gIGZvciAodmFyIGkgPSAxdTsgaSA8PSBiTGVuZ3RoOyBpID0gaSArIDF1KSB7XG4gICAgICBkeW5hbWljUGFzc01hdFtjdXJJbmRleF1bMF0gPSBmMzIoaSk7XG4gICAgICB2YXIgbWluRW50cnk6IGYzMiA9IGYzMihtYXhMZW5ndGgpO1xuICAgICAgbGV0IHByZXZSb3cgPSAmZHluYW1pY1Bhc3NNYXRbcHJldkluZGV4XTtcbiAgICAgIGxldCBjdXJSb3cgPSAmZHluYW1pY1Bhc3NNYXRbY3VySW5kZXhdO1xuICAgICAgbGV0IGJNb24gPSB1MzIoYltpIC0gMV0pO1xuICAgICAgZm9yICh2YXIgaiA9IDF1OyBqIDw9IGFMZW5ndGg7IGogPSBqICsgMXUpIHtcbiAgICAgICAgICB2YXIgY29zdDogZjMyID0gZjMyKGFbaiAtIDFdICE9IGJNb24pO1xuICAgICAgICAgIHZhciByZXM6IGYzMiA9IG1pbihcbiAgICAgICAgICAgICAgbWluKFxuICAgICAgICAgICAgICAgICgqcHJldlJvdylbal0gKyAxLjAsIC8vIGRlbGV0aW9uXG4gICAgICAgICAgICAgICAgKCpjdXJSb3cpW2ogLSAxXSArIDEuMCwgLy8gaW5zZXJ0aW9uXG4gICAgICAgICAgICAgICksXG4gICAgICAgICAgICAgICgqcHJldlJvdylbaiAtIDFdICsgY29zdCAvLyBzdWJzdGl0dXRpb25cbiAgICAgICAgICAgICAgKTtcbiAgICAgICAgICAgICAgKCpjdXJSb3cpW2pdID0gcmVzO1xuICAgICAgICAgIGlmIChyZXMgPCBtaW5FbnRyeSkge1xuICAgICAgICAgICAgICBtaW5FbnRyeSA9IHJlcztcbiAgICAgICAgICB9XG4gICAgICB9XG4gICAgICAvLyBzd2FwIHRoZSBpbmRpY2VzXG4gICAgICBsZXQgdGVtcDogdTMyID0gcHJldkluZGV4O1xuICAgICAgcHJldkluZGV4ID0gY3VySW5kZXg7XG4gICAgICBjdXJJbmRleCA9IHRlbXA7XG4gICAgICBpZiAobWluRW50cnkgPiBtYXhJbnREaXN0YW5jZSkge1xuICAgICAgICAgIHJldHVybiAxLjA7XG4gICAgICB9XG4gIH1cblxuICByZXR1cm4gZHluYW1pY1Bhc3NNYXRbcHJldkluZGV4XVthTGVuZ3RoXSAvIGYzMihtYXhMZW5ndGgpO1xuICBgO1xufVxuZXhwb3J0IGZ1bmN0aW9uIHdlYkdQVU5lZWRsZW1hbld1bnNjaChtYXhBcnJheVNpemUsIGVudHJ5SW5kZXgpIHtcbiAgICAvLyB2ZXJzaW9uIG9mIHRoZSBsZXZlbnNodGFpbiB3aGVyZSB0aGUgY29zdCBvZiBzdWJzdGl0dXRpb24gaXMgY3VzdG9taXphYmxlXG4gICAgLy8gaXQgaXMgYXNzdW1ldCB0aGF0IHN1cHBJbmZvIHN0cnVjdCBjb250YWlucyBjb3JyZWN0IG1hdHJpeCBjYWxsZWQgc2ltaWxhcml0eU1hdHJpeCR7ZW50cnlJbmRleH0sIChzaW1pbGFyaXR5TWF0cml4MCwgc2ltaWxhcml0eU1hdHJpeDEsIGV0YylcbiAgICAvLyBhbmQgZ2FwT3BlblBlbmFsdHksIGdhcEV4dGVuc2lvblBlbmFsdHlcbiAgICAvLyB0aGlzIHNob3VsZCBiZSBndWFyYW50ZWVkIGJ5IHRoZSBnZXRQcm9jZXNzSW5mbyBmdW5jdGlvbi5cbiAgICByZXR1cm4gYFxuICAgICAgbGV0IGFMZW5ndGg6IHUzMiA9IGNvbXB1dGVJbmZvLmVudHJ5U2l6ZXNbJHtlbnRyeUluZGV4fV1bYUluZGV4XTtcbiAgICAgIGxldCBiTGVuZ3RoOiB1MzIgPSBjb21wdXRlSW5mby5lbnRyeVNpemVzWyR7ZW50cnlJbmRleH1dW2JJbmRleF07XG4gICAgICBsZXQgbWF4TGVuZ3RoOiB1MzIgPSBtYXgoYUxlbmd0aCwgYkxlbmd0aCk7XG4gICAgICBsZXQgbWluTGVuZ3RoOiB1MzIgPSBtaW4oYUxlbmd0aCwgYkxlbmd0aCk7XG4gIFxuICAgICAgbGV0IG1heEludERpc3RhbmNlID0gY2VpbChtYXhEaXN0YW5jZSAqIGYzMihtYXhMZW5ndGgpKTtcbiAgICAgIC8vIHdlIHdpbGwgc3RvcmUgdHdvIGFycmF5cyBhcyBtYXRyaXggYW5kIHN3YXAgdGhlIHdvcmtpbmcgaW5kaWNlcyBwZXIgcGFzcy5cbiAgICAgIC8vIHRoaXMgd2F5IHdlIGNhbiByZWR1Y2UgbWVtb3J5IHVzYWdlIHBlciBjb21wdXRhdGlvbiB0byBqdXN0IE8oYUxlbmd0aClcbiAgICAgIC8vIHRoZSBncmlkIHdpbGwgaGF2ZSBhTGVuZ3RoICsgMSBjb2x1bW5zIGFuZCBiTGVuZ3RoICsgMSByb3dzXG4gICAgICAvLyB0aGlzIHdpbGwgYmUgZ3VhcmFudGVlZCBieSBpdGVyYXRpb24sIGJ1dCB0aGUgYXJyYXkgc2l6ZXMgbXVzdCBiZSBrbm93biBhdCBjb21waWxlIHRpbWUsIHNvIHdlIHdpbGwgdXNlIGEgZml4ZWQgc2l6ZSBvZiBtYXhBcnJheVNpemVcbiAgICAgIHZhciBkeW5hbWljUGFzc01hdDogYXJyYXk8YXJyYXk8ZjMyLCAke21heEFycmF5U2l6ZSArIDF9dT4sIDI+OyAvLyBpbml0aWFsaXplIHRvIDBcbiAgICAgIFxuICAgICAgLy8gd2UgbmVlZCB0byBrZWVwIHRyYWNrIG9mIHdoaWNoIG9wZXJhdGlvbiBsZWQgdG8gdGhlIGN1cnJlbnQgY2VsbFxuICAgICAgLy8gaS5lLiB3aGV0aGVyIHdlIGNhbWUgZnJvbSB0aGUgbGVmdCwgdG9wIG9yIGRpYWdvbmFsIHRvIGFzc2lnbiBnYXAgb3Blbi9nYXAgZXh0ZW5kIHBlbmFsdHlcbiAgICAgIHZhciB2ZXJ0aWNhbEdhcHM6IGFycmF5PHUzMiwgJHttYXhBcnJheVNpemUgKyAxfXU+O1xuICAgICAgdmFyIGhvcml6b250YWxHYXBzOiBhcnJheTx1MzIsICR7bWF4QXJyYXlTaXplICsgMX11PjtcblxuICAgICAgbGV0IGdhcE9wZW5QZW5hbHR5OiBmMzIgPSBzdXBwSW5mby5nYXBPcGVuUGVuYWx0eSR7ZW50cnlJbmRleH07XG4gICAgICBsZXQgZ2FwRXh0ZW5zaW9uUGVuYWx0eTogZjMyID0gc3VwcEluZm8uZ2FwRXh0ZW5zaW9uUGVuYWx0eSR7ZW50cnlJbmRleH07XG4gICAgICB2YXIgcHJldkluZGV4OiB1MzIgPSAwO1xuICAgICAgdmFyIGN1ckluZGV4OiB1MzIgPSAxOyAvLyB3ZSB3aWxsIHN3YXAgdGhlc2UgaW5kaWNlcyBwZXIgcGFzc1xuICAgICAgLy8gaW5pdGlhbGl6ZSB0aGUgZmlyc3Qgcm93XG4gICAgICBmb3IgKHZhciBpID0gMHU7IGkgPD0gYUxlbmd0aDsgaSA9IGkgKyAxdSkge1xuICAgICAgICAgIGR5bmFtaWNQYXNzTWF0W3ByZXZJbmRleF1baV0gPSBnYXBPcGVuUGVuYWx0eSArIGYzMihpIC0gMSkgKiBnYXBFeHRlbnNpb25QZW5hbHR5O1xuICAgICAgICAgIGR5bmFtaWNQYXNzTWF0W2N1ckluZGV4XVtpXSA9IDAuMDtcbiAgICAgIH1cbiAgICAgIGR5bmFtaWNQYXNzTWF0WzBdWzBdID0gMC4wO1xuXG4gICAgICBsZXQgc2ltTWF0cml4ID0gJnN1cHBJbmZvLnNpbWlsYXJpdHlNYXRyaXgke2VudHJ5SW5kZXh9OyAvLyB1c2luZyBwb2ludGVycyBtYWtlIHRoaW5ncyBmYXN0ZXJcbiAgICAgIC8vIGl0ZXJhdGUgb3ZlciB0aGUgcm93c1xuICAgICAgZm9yICh2YXIgaSA9IDF1OyBpIDw9IGJMZW5ndGg7IGkgPSBpICsgMXUpIHtcbiAgICAgICAgICBsZXQgcHJldlJvdyA9ICZkeW5hbWljUGFzc01hdFtwcmV2SW5kZXhdO1xuICAgICAgICAgIGxldCBjdXJSb3cgPSAmZHluYW1pY1Bhc3NNYXRbY3VySW5kZXhdO1xuICAgICAgICAgICgqY3VyUm93KVswXSA9IGdhcE9wZW5QZW5hbHR5ICsgZjMyKGkgLSAxKSAqIGdhcEV4dGVuc2lvblBlbmFsdHk7XG4gICAgICAgICAgdmFyIG1pbkVudHJ5OiBmMzIgPSBmMzIobWF4TGVuZ3RoKTtcbiAgICAgICAgICBsZXQgbW9uQiA9IHUzMihiW2kgLSAxXSk7XG4gICAgICAgICAgZm9yICh2YXIgaiA9IDF1OyBqIDw9IGFMZW5ndGg7IGogPSBqICsgMXUpIHtcbiAgICAgICAgICAgICAgbGV0IG1vbkEgPSB1MzIoYVtqIC0gMV0pO1xuICAgICAgICAgICAgICBcbiAgICAgICAgICAgICAgbGV0IGNvc3Q6IGYzMiA9ICgqcHJldlJvdylbaiAtIDFdICsgMWYgLSAoKnNpbU1hdHJpeClbbW9uQV1bbW9uQl07XG4gICAgICAgICAgICAgIHZhciB0b3AgPSAoKnByZXZSb3cpW2pdOyAvLyBkZWxldGlvblxuICAgICAgICAgICAgICBpZiAodmVydGljYWxHYXBzW2pdID4gMCkge1xuICAgICAgICAgICAgICAgICAgdG9wID0gdG9wICsgZ2FwRXh0ZW5zaW9uUGVuYWx0eTtcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgIHRvcCA9IHRvcCArIGdhcE9wZW5QZW5hbHR5O1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIHZhciBsZWZ0ID0gKCpjdXJSb3cpW2ogLSAxXTsgLy8gaW5zZXJ0aW9uXG4gICAgICAgICAgICAgIGlmIChob3Jpem9udGFsR2Fwc1tqIC0gMV0gPiAwKSB7XG4gICAgICAgICAgICAgICAgICBsZWZ0ID0gbGVmdCArIGdhcEV4dGVuc2lvblBlbmFsdHk7XG4gICAgICAgICAgICAgIH0gZWxzZSB7XG4gICAgICAgICAgICAgICAgICBsZWZ0ID0gbGVmdCArIGdhcE9wZW5QZW5hbHR5O1xuICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgIHZhciByZXM6IGYzMiA9IG1pbihcbiAgICAgICAgICAgICAgICAgIG1pbihcbiAgICAgICAgICAgICAgICAgICAgICB0b3AsIC8vIGRlbGV0aW9uXG4gICAgICAgICAgICAgICAgICAgICAgbGVmdCwgLy8gaW5zZXJ0aW9uXG4gICAgICAgICAgICAgICAgICApLFxuICAgICAgICAgICAgICAgICAgY29zdCAvLyBzdWJzdGl0dXRpb25cbiAgICAgICAgICAgICAgICAgICk7XG4gICAgICAgICAgICAgICAgICAoKmN1clJvdylbal0gPSByZXM7XG4gICAgICAgICAgICAgIGlmIChyZXMgPCBtaW5FbnRyeSkge1xuICAgICAgICAgICAgICAgICAgbWluRW50cnkgPSByZXM7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgLy8gdXBkYXRlIHRoZSBob3Jpem9udGFsIGFuZCB2ZXJ0aWNhbCBnYXBzXG4gICAgICAgICAgICAgIGlmIChyZXMgPT0gY29zdCkge1xuICAgICAgICAgICAgICAgICAgdmVydGljYWxHYXBzW2pdID0gMDtcbiAgICAgICAgICAgICAgICAgIGhvcml6b250YWxHYXBzW2pdID0gMDtcbiAgICAgICAgICAgICAgfSBlbHNlIGlmIChyZXMgPT0gbGVmdCkge1xuICAgICAgICAgICAgICAgICAgdmVydGljYWxHYXBzW2pdID0gMDtcbiAgICAgICAgICAgICAgICAgIGhvcml6b250YWxHYXBzW2pdID0gMTtcbiAgICAgICAgICAgICAgfSBlbHNlIHtcbiAgICAgICAgICAgICAgICAgIHZlcnRpY2FsR2Fwc1tqXSA9IDE7XG4gICAgICAgICAgICAgICAgICBob3Jpem9udGFsR2Fwc1tqXSA9IDA7XG4gICAgICAgICAgICAgIH1cbiAgICAgICAgICB9XG4gICAgICAgICAgLy8gc3dhcCB0aGUgaW5kaWNlc1xuICAgICAgICAgIGxldCB0ZW1wOiB1MzIgPSBwcmV2SW5kZXg7XG4gICAgICAgICAgcHJldkluZGV4ID0gY3VySW5kZXg7XG4gICAgICAgICAgY3VySW5kZXggPSB0ZW1wO1xuICAgICAgICAgIGlmIChtaW5FbnRyeSA+IG1heEludERpc3RhbmNlKSB7XG4gICAgICAgICAgICAgIHJldHVybiAxLjA7XG4gICAgICAgICAgfVxuICAgICAgfVxuICAgICAgcmV0dXJuIGR5bmFtaWNQYXNzTWF0W3ByZXZJbmRleF1bYUxlbmd0aF0gLyBmMzIobWF4TGVuZ3RoKTtcbiAgXG4gIGA7XG59XG5leHBvcnQgZnVuY3Rpb24gd2ViR1BVRXVjbGlkZWFuKG1heEFycmF5U2l6ZSwgX2VudHJ5SW5kZXgpIHtcbiAgICByZXR1cm4gYFxuICB2YXIgZGlzdDogZjMyID0gMC4wO1xuICBmb3IgKHZhciBpID0gMHU7IGkgPCAke21heEFycmF5U2l6ZX07IGkgPSBpICsgMXUpIHtcbiAgICBkaXN0ID0gZGlzdCArIGYzMihhW2ldIC0gYltpXSkgKiBmMzIoYVtpXSAtIGJbaV0pO1xuICB9XG4gIHJldHVybiBzcXJ0KGRpc3QpO1xuICBgO1xufVxuZXhwb3J0IGZ1bmN0aW9uIHdlYkdQVU1hbmhhdHRhbihtYXhBcnJheVNpemUsIF9lbnRyeUluZGV4KSB7XG4gICAgcmV0dXJuIGBcbiAgdmFyIGRpc3Q6IGYzMiA9IDAuMDtcbiAgZm9yICh2YXIgaSA9IDB1OyBpIDwgJHttYXhBcnJheVNpemV9OyBpID0gaSArIDF1KSB7XG4gICAgZGlzdCA9IGRpc3QgKyBhYnMoZjMyKGFbaV0gLSBiW2ldKSk7XG4gIH1cbiAgcmV0dXJuIGRpc3Q7XG4gIGA7XG59XG5leHBvcnQgZnVuY3Rpb24gd2ViR1BVT25lSG90RGlzdGFuY2UoX21heEFycmF5U2l6ZSwgZW50cnlJbmRleCkge1xuICAgIHJldHVybiBgXG4gIGxldCBhTGVuZ3RoOiB1MzIgPSBjb21wdXRlSW5mby5lbnRyeVNpemVzWyR7ZW50cnlJbmRleH1dW2FJbmRleF07XG4gIGxldCBiTGVuZ3RoOiB1MzIgPSBjb21wdXRlSW5mby5lbnRyeVNpemVzWyR7ZW50cnlJbmRleH1dW2JJbmRleF07XG4gIGlmIChhTGVuZ3RoICE9IGJMZW5ndGgpIHtcbiAgICByZXR1cm4gMS4wO1xuICB9XG4gIGZvciAodmFyIGkgPSAwdTsgaSA8IGFMZW5ndGg7IGkgPSBpICsgMXUpIHtcbiAgICBpZihhW2ldICE9IGJbaV0pIHtcbiAgICAgIHJldHVybiAxLjA7XG4gICAgfVxuICB9XG4gIHJldHVybiAwLjA7XG4gIGA7XG59XG5leHBvcnQgZnVuY3Rpb24gd2ViR1BVTnVtZXJpY0Rpc3RhbmNlKF9tYXhBcnJheVNpemUsIGVudHJ5SW5kZXgpIHtcbiAgICAvLyB3ZSBhc3N1bWUgdGhhdCByYW5nZSR7ZW50cnlJbmRleH0gaXMgYXZhaWxhYmxlIGluIHRoZSBzdXBwbGVtZW50YXJ5SW5mbyBzdHJ1Y3RcbiAgICByZXR1cm4gYFxuICAgIGxldCByYW5nZSA9IHN1cHBJbmZvLnJhbmdlJHtlbnRyeUluZGV4fTtcbiAgICByZXR1cm4gZjMyKGFicyhmMzIoYVswXSkgLSBmMzIoYlswXSkpIC8gcmFuZ2UpO1xuICBgO1xufVxuLy8gdGFuaW1vdG8gZGlzdGFuY2UgZm9yIHVpbnQzMiBhcnJheXMgb2YgbGVuZ3RoICR7bWF4QXJyYXlTaXplfVxuZXhwb3J0IGZ1bmN0aW9uIHdlYkdQVVRhbmltb3RvQml0QXJyYXkobWF4QXJyYXlTaXplLCBfZW50cnlJbmRleCkge1xuICAgIHJldHVybiBgXG4gIHZhciBvbkJpdHNhOiB1MzIgPSAwdTtcbiAgdmFyIG9uQml0c2I6IHUzMiA9IDB1O1xuICBmb3IgKHZhciBpID0gMHU7IGkgPCAke21heEFycmF5U2l6ZX11OyBpID0gaSArIDF1KSB7XG4gICAgICBvbkJpdHNhID0gb25CaXRzYSArIGNvdW50T25lQml0cyhhW2ldKTtcbiAgICAgIG9uQml0c2IgPSBvbkJpdHNiICsgY291bnRPbmVCaXRzKGJbaV0pO1xuICB9XG5cbiAgaWYgKG9uQml0c2EgPT0gMHUgJiYgb25CaXRzYiA9PSAwdSkge1xuICAgICAgcmV0dXJuIDAuMDtcbiAgfVxuXG4gIGxldCB0b3RhbE9uQml0cyA9IG9uQml0c2EgKyBvbkJpdHNiO1xuICB2YXIgY29tbW9uQml0czogdTMyID0gMHU7XG4gIGZvciAodmFyIGkgPSAwdTsgaSA8ICR7bWF4QXJyYXlTaXplfXU7IGkgPSBpICsgMXUpIHtcbiAgICAgIGNvbW1vbkJpdHMgPSBjb21tb25CaXRzICsgY291bnRPbmVCaXRzKGFbaV0gJiBiW2ldKTtcbiAgfVxuXG4gIHJldHVybiAxLjAgLSBmMzIoY29tbW9uQml0cykgLyBmMzIodG90YWxPbkJpdHMgLSBjb21tb25CaXRzKTtcbiAgYDtcbn1cbmV4cG9ydCBmdW5jdGlvbiB3ZWJHUFVBc3ltbWV0cmljQml0QXJyYXkobWF4QXJyYXlTaXplLCBfZW50cnlJbmRleCkge1xuICAgIHJldHVybiBgXG4gIHZhciBvbkJpdHNhOiB1MzIgPSAwdTtcbiAgdmFyIG9uQml0c2I6IHUzMiA9IDB1O1xuICBmb3IgKHZhciBpID0gMHU7IGkgPCAke21heEFycmF5U2l6ZX11OyBpID0gaSArIDF1KSB7XG4gICAgICBvbkJpdHNhID0gb25CaXRzYSArIGNvdW50T25lQml0cyhhW2ldKTtcbiAgICAgIG9uQml0c2IgPSBvbkJpdHNiICsgY291bnRPbmVCaXRzKGJbaV0pO1xuICB9XG4gIGxldCBtaW4gPSBtaW4ob25CaXRzYSwgb25CaXRzYik7XG4gIGlmIChtaW4gPT0gMHUpIHtcbiAgICByZXR1cm4gMS4wO1xuICB9XG4gIHZhciBjb21tb25CaXRzOiB1MzIgPSAwdTtcbiAgZm9yICh2YXIgaSA9IDB1OyBpIDwgJHttYXhBcnJheVNpemV9dTsgaSA9IGkgKyAxdSkge1xuICAgICAgY29tbW9uQml0cyA9IGNvbW1vbkJpdHMgKyBjb3VudE9uZUJpdHMoYVtpXSAmIGJbaV0pO1xuICB9XG4gIHJldHVybiAxLjAgLSBmMzIoY29tbW9uQml0cykgLyBmMzIobWluKTtcbiAgYDtcbn1cbmV4cG9ydCBmdW5jdGlvbiB3ZWJHUFVDb3NpbmVCaXRBcnJheShtYXhBcnJheVNpemUsIF9lbnRyeUluZGV4KSB7XG4gICAgcmV0dXJuIGBcbiAgdmFyIG9uQml0c2E6IHUzMiA9IDB1O1xuICB2YXIgb25CaXRzYjogdTMyID0gMHU7XG4gIGZvciAodmFyIGkgPSAwdTsgaSA8ICR7bWF4QXJyYXlTaXplfXU7IGkgPSBpICsgMXUpIHtcbiAgICAgIG9uQml0c2EgPSBvbkJpdHNhICsgY291bnRPbmVCaXRzKGFbaV0pO1xuICAgICAgb25CaXRzYiA9IG9uQml0c2IgKyBjb3VudE9uZUJpdHMoYltpXSk7XG4gIH1cbiAgbGV0IHRvdGFsID0gb25CaXRzYSAqIG9uQml0c2I7IC8vIHAucy4gaGVyZSB0b3RhbCBpcyB0YWtlbiBieSBtdWx0aXBseWluZ1xuICBpZiAodG90YWwgPT0gMHUpIHtcbiAgICByZXR1cm4gMS4wO1xuICB9XG4gIHZhciBjb21tb25CaXRzOiB1MzIgPSAwdTtcbiAgZm9yICh2YXIgaSA9IDB1OyBpIDwgJHttYXhBcnJheVNpemV9dTsgaSA9IGkgKyAxdSkge1xuICAgICAgY29tbW9uQml0cyA9IGNvbW1vbkJpdHMgKyBjb3VudE9uZUJpdHMoYVtpXSAmIGJbaV0pO1xuICB9XG4gIHJldHVybiAxLjAgLSBmMzIoY29tbW9uQml0cykgLyBzcXJ0KGYzMih0b3RhbCkpO1xuICBgO1xufVxuZXhwb3J0IGZ1bmN0aW9uIHdlYkdQVVNva2FsQml0QXJyYXkobWF4QXJyYXlTaXplLCBfZW50cnlJbmRleCkge1xuICAgIHJldHVybiBgXG4gIHZhciBvbkJpdHNhOiB1MzIgPSAwdTtcbiAgdmFyIG9uQml0c2I6IHUzMiA9IDB1O1xuICBmb3IgKHZhciBpID0gMHU7IGkgPCAke21heEFycmF5U2l6ZX11OyBpID0gaSArIDF1KSB7XG4gICAgICBvbkJpdHNhID0gb25CaXRzYSArIGNvdW50T25lQml0cyhhW2ldKTtcbiAgICAgIG9uQml0c2IgPSBvbkJpdHNiICsgY291bnRPbmVCaXRzKGJbaV0pO1xuICB9XG4gIGxldCB0b3RhbCA9IG9uQml0c2EgKyBvbkJpdHNiO1xuICBpZiAodG90YWwgPT0gMHUpIHtcbiAgICByZXR1cm4gMS4wO1xuICB9XG4gIHZhciBjb21tb25CaXRzOiB1MzIgPSAwdTtcbiAgZm9yICh2YXIgaSA9IDB1OyBpIDwgJHttYXhBcnJheVNpemV9dTsgaSA9IGkgKyAxdSkge1xuICAgICAgY29tbW9uQml0cyA9IGNvbW1vbkJpdHMgKyBjb3VudE9uZUJpdHMoYVtpXSAmIGJbaV0pO1xuICB9XG4gIHJldHVybiAxLjAgLSBmMzIoY29tbW9uQml0cykgLyBmMzIodG90YWwgKiAyIC0gY29tbW9uQml0cyAqIDMpO1xuICBgO1xufVxuZXhwb3J0IHZhciBXRUJHUFVESVNUQU5DRTtcbihmdW5jdGlvbiAoV0VCR1BVRElTVEFOQ0UpIHtcbiAgICBXRUJHUFVESVNUQU5DRVtcIkhBTU1JTkdcIl0gPSBcIkhhbW1pbmdcIjtcbiAgICBXRUJHUFVESVNUQU5DRVtcIkVVQ0xJREVBTlwiXSA9IFwiRXVjbGlkZWFuXCI7XG4gICAgV0VCR1BVRElTVEFOQ0VbXCJNQU5IQVRUQU5cIl0gPSBcIk1hbmhhdHRhblwiO1xuICAgIFdFQkdQVURJU1RBTkNFW1wiVEFOSU1PVE9cIl0gPSBcIlRhbmltb3RvXCI7XG4gICAgV0VCR1BVRElTVEFOQ0VbXCJMRVZFTlNURUlOXCJdID0gXCJMZXZlbnNodGVpblwiO1xuICAgIFdFQkdQVURJU1RBTkNFW1wiTkVFRExFTUFOX1dVTlNDSFwiXSA9IFwiTmVlZGxlbWFubi1XdW5zY2hcIjtcbiAgICBXRUJHUFVESVNUQU5DRVtcIk1PTk9NRVJfQ0hFTUlDQUxfRElTVEFOQ0VcIl0gPSBcIk1vbm9tZXIgY2hlbWljYWwgZGlzdGFuY2VcIjtcbiAgICBXRUJHUFVESVNUQU5DRVtcIlNPS0FMXCJdID0gXCJTb2thbFwiO1xuICAgIFdFQkdQVURJU1RBTkNFW1wiQ09TSU5FXCJdID0gXCJDb3NpbmVcIjtcbiAgICBXRUJHUFVESVNUQU5DRVtcIkFTWU1NRVRSSUNcIl0gPSBcIkFzeW1tZXRyaWNcIjtcbiAgICBXRUJHUFVESVNUQU5DRVtcIkRpZmZlcmVuY2VcIl0gPSBcIkRpZmZlcmVuY2VcIjtcbiAgICBXRUJHUFVESVNUQU5DRVtcIk9uZUhvdFwiXSA9IFwiT25lLUhvdFwiO1xufSkoV0VCR1BVRElTVEFOQ0UgfHwgKFdFQkdQVURJU1RBTkNFID0ge30pKTtcbmV4cG9ydCBjb25zdCB3ZWJHUFVGdW5jdGlvbnMgPSB7XG4gICAgW1dFQkdQVURJU1RBTkNFLkhBTU1JTkddOiB3ZWJHUFVIYW1taW5nLFxuICAgIFtXRUJHUFVESVNUQU5DRS5FVUNMSURFQU5dOiB3ZWJHUFVFdWNsaWRlYW4sXG4gICAgW1dFQkdQVURJU1RBTkNFLk1BTkhBVFRBTl06IHdlYkdQVU1hbmhhdHRhbixcbiAgICBbV0VCR1BVRElTVEFOQ0UuVEFOSU1PVE9dOiB3ZWJHUFVUYW5pbW90b0JpdEFycmF5LFxuICAgIFtXRUJHUFVESVNUQU5DRS5MRVZFTlNURUlOXTogd2ViR1BVTGV2ZW5zdGVpbixcbiAgICBbV0VCR1BVRElTVEFOQ0UuTkVFRExFTUFOX1dVTlNDSF06IHdlYkdQVU5lZWRsZW1hbld1bnNjaCxcbiAgICBbV0VCR1BVRElTVEFOQ0UuTU9OT01FUl9DSEVNSUNBTF9ESVNUQU5DRV06IHdlYkdQVU1vbm9tZXJDaGVtaWNhbERpc3RhbmNlLFxuICAgIFtXRUJHUFVESVNUQU5DRS5TT0tBTF06IHdlYkdQVVNva2FsQml0QXJyYXksXG4gICAgW1dFQkdQVURJU1RBTkNFLkNPU0lORV06IHdlYkdQVUNvc2luZUJpdEFycmF5LFxuICAgIFtXRUJHUFVESVNUQU5DRS5BU1lNTUVUUklDXTogd2ViR1BVQXN5bW1ldHJpY0JpdEFycmF5LFxuICAgIFtXRUJHUFVESVNUQU5DRS5EaWZmZXJlbmNlXTogd2ViR1BVTnVtZXJpY0Rpc3RhbmNlLFxuICAgIFtXRUJHUFVESVNUQU5DRS5PbmVIb3RdOiB3ZWJHUFVPbmVIb3REaXN0YW5jZVxufTtcbmV4cG9ydCBjb25zdCBkaXN0YW5jZUZ1bmN0aW9uQ29tcGxleGl0eSA9IHtcbiAgICBbV0VCR1BVRElTVEFOQ0UuSEFNTUlOR106IChtYXhFbnRyeVNpemUpID0+IE1hdGguY2VpbChtYXhFbnRyeVNpemUgLyAzMCksXG4gICAgW1dFQkdQVURJU1RBTkNFLkVVQ0xJREVBTl06IChtYXhFbnRyeVNpemUpID0+IE1hdGguY2VpbChtYXhFbnRyeVNpemUgLyAzMCksXG4gICAgW1dFQkdQVURJU1RBTkNFLk1BTkhBVFRBTl06IChtYXhFbnRyeVNpemUpID0+IE1hdGguY2VpbChtYXhFbnRyeVNpemUgLyAzMCksXG4gICAgW1dFQkdQVURJU1RBTkNFLlRBTklNT1RPXTogKG1heEVudHJ5U2l6ZSkgPT4gTWF0aC5jZWlsKG1heEVudHJ5U2l6ZSAvIDYwKSxcbiAgICBbV0VCR1BVRElTVEFOQ0UuU09LQUxdOiAobWF4RW50cnlTaXplKSA9PiBNYXRoLmNlaWwobWF4RW50cnlTaXplIC8gNjApLFxuICAgIFtXRUJHUFVESVNUQU5DRS5DT1NJTkVdOiAobWF4RW50cnlTaXplKSA9PiBNYXRoLmNlaWwobWF4RW50cnlTaXplIC8gNjApLFxuICAgIFtXRUJHUFVESVNUQU5DRS5BU1lNTUVUUklDXTogKG1heEVudHJ5U2l6ZSkgPT4gTWF0aC5jZWlsKG1heEVudHJ5U2l6ZSAvIDYwKSxcbiAgICBbV0VCR1BVRElTVEFOQ0UuTEVWRU5TVEVJTl06IChtYXhFbnRyeVNpemUpID0+IE1hdGguY2VpbChtYXhFbnRyeVNpemUgKiBtYXhFbnRyeVNpemUgLyA2MCksXG4gICAgW1dFQkdQVURJU1RBTkNFLk5FRURMRU1BTl9XVU5TQ0hdOiAobWF4RW50cnlTaXplKSA9PiBNYXRoLmNlaWwobWF4RW50cnlTaXplICogbWF4RW50cnlTaXplIC8gNjApLFxuICAgIFtXRUJHUFVESVNUQU5DRS5NT05PTUVSX0NIRU1JQ0FMX0RJU1RBTkNFXTogKG1heEVudHJ5U2l6ZSkgPT4gTWF0aC5jZWlsKG1heEVudHJ5U2l6ZSAvIDI1KSxcbiAgICBbV0VCR1BVRElTVEFOQ0UuRGlmZmVyZW5jZV06IChfbWF4RW50cnlTaXplKSA9PiAxLFxuICAgIFtXRUJHUFVESVNUQU5DRS5PbmVIb3RdOiAoX21heEVudHJ5U2l6ZSkgPT4gTWF0aC5jZWlsKF9tYXhFbnRyeVNpemUgLyA0MCksXG59O1xuZXhwb3J0IGNvbnN0IFR5cGVTdXBwb3J0ZWREaXN0YW5jZXMgPSB7XG4gICAgW1wiU1RSSU5HXCIgLyogV0dQVUVOVFJZVFlQRS5TVFJJTkcgKi9dOiBuZXcgU2V0KFtXRUJHUFVESVNUQU5DRS5IQU1NSU5HLCBXRUJHUFVESVNUQU5DRS5MRVZFTlNURUlOLCBXRUJHUFVESVNUQU5DRS5ORUVETEVNQU5fV1VOU0NILCBXRUJHUFVESVNUQU5DRS5NT05PTUVSX0NIRU1JQ0FMX0RJU1RBTkNFLCBXRUJHUFVESVNUQU5DRS5PbmVIb3RdKSxcbiAgICBbXCJVSU5UMzJBUlJBWVwiIC8qIFdHUFVFTlRSWVRZUEUuVUlOVDMyQVJSQVkgKi9dOiBuZXcgU2V0KFtXRUJHUFVESVNUQU5DRS5IQU1NSU5HLCBXRUJHUFVESVNUQU5DRS5FVUNMSURFQU4sIFdFQkdQVURJU1RBTkNFLk1BTkhBVFRBTiwgV0VCR1BVRElTVEFOQ0UuTU9OT01FUl9DSEVNSUNBTF9ESVNUQU5DRSwgV0VCR1BVRElTVEFOQ0UuTEVWRU5TVEVJTiwgV0VCR1BVRElTVEFOQ0UuTkVFRExFTUFOX1dVTlNDSCwgV0VCR1BVRElTVEFOQ0UuVEFOSU1PVE8sIFdFQkdQVURJU1RBTkNFLkNPU0lORSwgV0VCR1BVRElTVEFOQ0UuU09LQUwsIFdFQkdQVURJU1RBTkNFLkFTWU1NRVRSSUMsIFdFQkdQVURJU1RBTkNFLk9uZUhvdCwgV0VCR1BVRElTVEFOQ0UuRGlmZmVyZW5jZV0pLFxuICAgIFtcIklOVDMyQVJSQVlcIiAvKiBXR1BVRU5UUllUWVBFLklOVDMyQVJSQVkgKi9dOiBuZXcgU2V0KFtXRUJHUFVESVNUQU5DRS5FVUNMSURFQU4sIFdFQkdQVURJU1RBTkNFLk1BTkhBVFRBTiwgV0VCR1BVRElTVEFOQ0UuT25lSG90LCBXRUJHUFVESVNUQU5DRS5EaWZmZXJlbmNlXSksXG4gICAgW1wiRkxPQVQzMkFSUkFZXCIgLyogV0dQVUVOVFJZVFlQRS5GTE9BVDMyQVJSQVkgKi9dOiBuZXcgU2V0KFtXRUJHUFVESVNUQU5DRS5FVUNMSURFQU4sIFdFQkdQVURJU1RBTkNFLk1BTkhBVFRBTiwgV0VCR1BVRElTVEFOQ0UuRGlmZmVyZW5jZV0pLFxuICAgIFtcIk5VTUJFUlwiIC8qIFdHUFVFTlRSWVRZUEUuTlVNQkVSICovXTogbmV3IFNldChbV0VCR1BVRElTVEFOQ0UuRVVDTElERUFOLCBXRUJHUFVESVNUQU5DRS5NQU5IQVRUQU4sIFdFQkdQVURJU1RBTkNFLkRpZmZlcmVuY2VdKSxcbiAgICBbXCJCSVRBUlJBWVwiIC8qIFdHUFVFTlRSWVRZUEUuQklUQVJSQVkgKi9dOiBuZXcgU2V0KFtXRUJHUFVESVNUQU5DRS5UQU5JTU9UTywgV0VCR1BVRElTVEFOQ0UuQ09TSU5FLCBXRUJHUFVESVNUQU5DRS5TT0tBTCwgV0VCR1BVRElTVEFOQ0UuQVNZTU1FVFJJQ10pXG59O1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9d2ViR1BVLW11bHRpY29sLWRpc3RhbmNlcy5qcy5tYXAiLCJleHBvcnQgdmFyIE1hdHJpeE1hdHJpeE9wVHlwZTtcbihmdW5jdGlvbiAoTWF0cml4TWF0cml4T3BUeXBlKSB7XG4gICAgTWF0cml4TWF0cml4T3BUeXBlW1wiQUREXCJdID0gXCJBRERcIjtcbiAgICBNYXRyaXhNYXRyaXhPcFR5cGVbXCJTVUJcIl0gPSBcIlNVQlwiO1xuICAgIE1hdHJpeE1hdHJpeE9wVHlwZVtcIk1VTFRcIl0gPSBcIk1VTFRcIjtcbn0pKE1hdHJpeE1hdHJpeE9wVHlwZSB8fCAoTWF0cml4TWF0cml4T3BUeXBlID0ge30pKTtcbmV4cG9ydCB2YXIgTWF0cml4T3BUeXBlO1xuKGZ1bmN0aW9uIChNYXRyaXhPcFR5cGUpIHtcbiAgICBNYXRyaXhPcFR5cGVbXCJTUVVBUkVcIl0gPSBcIlNRVUFSRVwiO1xuICAgIE1hdHJpeE9wVHlwZVtcIklOVkVSU0VcIl0gPSBcIklOVkVSU0VcIjtcbiAgICBNYXRyaXhPcFR5cGVbXCJUUkFOU1BPU0VcIl0gPSBcIlRSQU5TUE9TRVwiO1xuICAgIE1hdHJpeE9wVHlwZVtcIk5PUk1cIl0gPSBcIk5PUk1cIjtcbiAgICBNYXRyaXhPcFR5cGVbXCJDT0xVTU5fTk9STVwiXSA9IFwiQ09MVU1OX05PUk1cIjtcbn0pKE1hdHJpeE9wVHlwZSB8fCAoTWF0cml4T3BUeXBlID0ge30pKTtcbmV4cG9ydCB2YXIgTWF0cml4U2NhbGFyT3BUeXBlO1xuKGZ1bmN0aW9uIChNYXRyaXhTY2FsYXJPcFR5cGUpIHtcbiAgICBNYXRyaXhTY2FsYXJPcFR5cGVbXCJTQ0FMQVJNVUxUXCJdID0gXCJTQ0FMQVJNVUxUXCI7XG4gICAgTWF0cml4U2NhbGFyT3BUeXBlW1wiU0NBTEFSQUREXCJdID0gXCJTQ0FMQVJBRERcIjtcbiAgICBNYXRyaXhTY2FsYXJPcFR5cGVbXCJTQ0FMQVJQT1dcIl0gPSBcIlNDQUxBUlBPV1wiO1xufSkoTWF0cml4U2NhbGFyT3BUeXBlIHx8IChNYXRyaXhTY2FsYXJPcFR5cGUgPSB7fSkpO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9dHlwZXMuanMubWFwIiwiZXhwb3J0IHZhciBEaW1SZWR1Y3Rpb25NZXRob2RzO1xuKGZ1bmN0aW9uIChEaW1SZWR1Y3Rpb25NZXRob2RzKSB7XG4gICAgRGltUmVkdWN0aW9uTWV0aG9kc1tcIlVNQVBcIl0gPSBcIlVNQVBcIjtcbiAgICBEaW1SZWR1Y3Rpb25NZXRob2RzW1wiVF9TTkVcIl0gPSBcInQtU05FXCI7XG59KShEaW1SZWR1Y3Rpb25NZXRob2RzIHx8IChEaW1SZWR1Y3Rpb25NZXRob2RzID0ge30pKTtcbjtcbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWRhdGE6YXBwbGljYXRpb24vanNvbjtiYXNlNjQsZXlKMlpYSnphVzl1SWpvekxDSm1hV3hsSWpvaWRIbHdaWE11YW5NaUxDSnpiM1Z5WTJWU2IyOTBJam9pSWl3aWMyOTFjbU5sY3lJNld5SjBlWEJsY3k1MGN5SmRMQ0p1WVcxbGN5STZXMTBzSW0xaGNIQnBibWR6SWpvaVFVRkJRU3hOUVVGTkxFTkJRVTRzU1VGQldTeHRRa0ZIV0R0QlFVaEVMRmRCUVZrc2JVSkJRVzFDTzBsQlF6TkNMRzlEUVVGaExFTkJRVUU3U1VGRFlpeHpRMEZCWlN4RFFVRkJPMEZCUTI1Q0xFTkJRVU1zUlVGSVZ5eHRRa0ZCYlVJc1MwRkJia0lzYlVKQlFXMUNMRkZCUnpsQ08wRkJRVUVzUTBGQlF5SXNJbk52ZFhKalpYTkRiMjUwWlc1MElqcGJJbVY0Y0c5eWRDQmxiblZ0SUVScGJWSmxaSFZqZEdsdmJrMWxkR2h2WkhON1hHNGdJQ0FnVlUxQlVDQTlJQ2RWVFVGUUp5eGNiaUFnSUNCVVgxTk9SU0E5SUNkMExWTk9SU2RjYm4wN1hHNGlYWDA9IiwiLy8gZXNsaW50LWRpc2FibGUtbmV4dC1saW5lIEB0eXBlc2NyaXB0LWVzbGludC91bmJvdW5kLW1ldGhvZFxuY29uc3QgdG9TdHJpbmcgPSBPYmplY3QucHJvdG90eXBlLnRvU3RyaW5nO1xuLyoqXG4gKiBDaGVja3MgaWYgYW4gb2JqZWN0IGlzIGFuIGluc3RhbmNlIG9mIGFuIEFycmF5IChhcnJheSBvciB0eXBlZCBhcnJheSwgZXhjZXB0IHRob3NlIHRoYXQgY29udGFpbiBiaWdpbnQgdmFsdWVzKS5cbiAqXG4gKiBAcGFyYW0gdmFsdWUgLSBPYmplY3QgdG8gY2hlY2suXG4gKiBAcmV0dXJucyBUcnVlIGlmIHRoZSBvYmplY3QgaXMgYW4gYXJyYXkgb3IgYSB0eXBlZCBhcnJheS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGlzQW55QXJyYXkodmFsdWUpIHtcbiAgICBjb25zdCB0YWcgPSB0b1N0cmluZy5jYWxsKHZhbHVlKTtcbiAgICByZXR1cm4gdGFnLmVuZHNXaXRoKCdBcnJheV0nKSAmJiAhdGFnLmluY2x1ZGVzKCdCaWcnKTtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWluZGV4LmpzLm1hcCIsImltcG9ydCAqIGFzIGdyb2sgZnJvbSAnZGF0YWdyb2stYXBpL2dyb2snO1xuaW1wb3J0ICogYXMgdWkgZnJvbSAnZGF0YWdyb2stYXBpL3VpJztcbmltcG9ydCAqIGFzIERHIGZyb20gJ2RhdGFncm9rLWFwaS9kZyc7XG5pbXBvcnQgeyBESU1fUkVEX1BSRVBST0NFU1NJTkdfRlVOQ1RJT05fVEFHLCBTVVBQT1JURURfRElTVEFOQ0VfRlVOQ1RJT05TX1RBRywgU1VQUE9SVEVEX1NFTVRZUEVTX1RBRywgU1VQUE9SVEVEX1RZUEVTX1RBRywgU1VQUE9SVEVEX1VOSVRTX1RBRyB9IGZyb20gJy4vY29uc3RzJztcbmltcG9ydCB7IFRTTkVPcHRpb25zLCBVTUFQT3B0aW9ucyB9IGZyb20gJy4uL211bHRpLWNvbHVtbi1kaW1lbnNpb25hbGl0eS1yZWR1Y3Rpb24vbXVsdGktY29sdW1uLWRpbS1yZWR1Y3Rpb24tZWRpdG9yJztcbmltcG9ydCB7IERpbVJlZHVjdGlvbk1ldGhvZHMgfSBmcm9tICcuLi9tdWx0aS1jb2x1bW4tZGltZW5zaW9uYWxpdHktcmVkdWN0aW9uL3R5cGVzJztcbmltcG9ydCB7IE1DTE1ldGhvZE5hbWUgfSBmcm9tICcuLi9NQ0wnO1xuZXhwb3J0IGNvbnN0IFNFUV9DT0xfTkFNRVMgPSB7XG4gICAgW0RHLlNFTVRZUEUuTU9MRUNVTEVdOiAnTW9sZWN1bGVzJyxcbiAgICBbREcuU0VNVFlQRS5NQUNST01PTEVDVUxFXTogJ1NlcXVlbmNlcydcbn07XG5leHBvcnQgY2xhc3MgREJTY2FuT3B0aW9ucyB7XG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHRoaXMuZXBzaWxvbiA9IHtcbiAgICAgICAgICAgIHVpTmFtZTogJ0Vwc2lsb24nLCB2YWx1ZTogMC4wMSwgdG9vbHRpcDogJ01pbmltdW0gZGlzdGFuY2UgYmV0d2VlbiBjbHVzdGVyIHBvaW50cycsIG1pbjogMCwgbWF4OiAyLCBzdGVwOiAwLjAwNVxuICAgICAgICB9O1xuICAgICAgICB0aGlzLm1pblB0cyA9IHtcbiAgICAgICAgICAgIHVpTmFtZTogJ01pbmltdW0gcG9pbnRzJywgdmFsdWU6IDQsIHRvb2x0aXA6ICdNaW5pbXVtIG51bWJlciBvZiBwb2ludHMgaW4gY2x1c3RlcicsIG1pbjogMSwgbWF4OiAxMDAwLCBzdGVwOiAxXG4gICAgICAgIH07XG4gICAgfVxuICAgIDtcbn1cbmV4cG9ydCBjbGFzcyBEaW1SZWR1Y3Rpb25CYXNlRWRpdG9yIHtcbiAgICBnZXQgYWxnb3JpdGhtT3B0aW9ucygpIHtcbiAgICAgICAgY29uc3QgYWxnb3JpdGhtUGFyYW1zID0gdGhpcy5tZXRob2RzUGFyYW1zW3RoaXMubWV0aG9kSW5wdXQudmFsdWVdO1xuICAgICAgICBjb25zdCBvcHRpb25zID0ge307XG4gICAgICAgIE9iamVjdC5rZXlzKGFsZ29yaXRobVBhcmFtcykuZm9yRWFjaCgoa2V5KSA9PiB7XG4gICAgICAgICAgICBpZiAoYWxnb3JpdGhtUGFyYW1zW2tleV0udmFsdWUgIT0gbnVsbClcbiAgICAgICAgICAgICAgICBvcHRpb25zW2tleV0gPSBhbGdvcml0aG1QYXJhbXNba2V5XS52YWx1ZTtcbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBvcHRpb25zO1xuICAgIH1cbiAgICBnZXQgZGJTY2FuT3B0aW9ucygpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIGRiU2NhbkVwc2lsb246IHRoaXMuZGJTY2FuUGFyYW1zLmVwc2lsb24udmFsdWUgPz8gMC4wMSxcbiAgICAgICAgICAgIGRiU2Nhbk1pblB0czogdGhpcy5kYlNjYW5QYXJhbXMubWluUHRzLnZhbHVlID8/IDRcbiAgICAgICAgfTtcbiAgICB9XG4gICAgY29uc3RydWN0b3IoZWRpdG9yU2V0dGluZ3MgPSB7fSkge1xuICAgICAgICB0aGlzLmVkaXRvclNldHRpbmdzID0ge307XG4gICAgICAgIHRoaXMucGxvdEVtYmVkZGluZ3NJbnB1dCA9IHVpLmJvb2xJbnB1dCgnUGxvdCBlbWJlZGRpbmdzJywgdHJ1ZSk7XG4gICAgICAgIHRoaXMuY2x1c3RlckVtYmVkZGluZ3NJbnB1dCA9IHVpLmJvb2xJbnB1dCgnQ2x1c3RlciBlbWJlZGRpbmdzJywgdHJ1ZSk7XG4gICAgICAgIHRoaXMucHJlcHJvY2Vzc2luZ0Z1bmN0aW9uSW5wdXRSb290ID0gbnVsbDtcbiAgICAgICAgdGhpcy5tZXRob2RzID0gW0RpbVJlZHVjdGlvbk1ldGhvZHMuVU1BUCwgRGltUmVkdWN0aW9uTWV0aG9kcy5UX1NORV07XG4gICAgICAgIHRoaXMuY29sdW1uRnVuY3Rpb25zTWFwID0ge307XG4gICAgICAgIHRoaXMuc3VwcG9ydGVkRnVuY3Rpb25zID0ge307XG4gICAgICAgIHRoaXMuYXZhaWxhYmxlTWV0cmljcyA9IFtdO1xuICAgICAgICB0aGlzLm1ldGhvZFNldHRpbmdzRGl2ID0gdWkuaW5wdXRzKFtdKTtcbiAgICAgICAgdGhpcy5kYlNjYW5TZXR0aW5nc0RpdiA9IHVpLmlucHV0cyhbXSk7XG4gICAgICAgIHRoaXMucHJlcHJvY2Vzc2luZ0Z1bmNTZXR0aW5nc0RpdiA9IHVpLmlucHV0cyhbXSk7XG4gICAgICAgIHRoaXMucHJlcHJvY2Vzc2luZ0Z1bmN0aW9uU2V0dGluZ3MgPSB7fTtcbiAgICAgICAgdGhpcy5tZXRob2RzUGFyYW1zID0ge1xuICAgICAgICAgICAgW0RpbVJlZHVjdGlvbk1ldGhvZHMuVU1BUF06IG5ldyBVTUFQT3B0aW9ucygpLFxuICAgICAgICAgICAgW0RpbVJlZHVjdGlvbk1ldGhvZHMuVF9TTkVdOiBuZXcgVFNORU9wdGlvbnMoKVxuICAgICAgICB9O1xuICAgICAgICB0aGlzLmRiU2NhblBhcmFtcyA9IG5ldyBEQlNjYW5PcHRpb25zKCk7XG4gICAgICAgIHRoaXMuZWRpdG9yU2V0dGluZ3MgPSBlZGl0b3JTZXR0aW5ncztcbiAgICAgICAgaWYgKHRoaXMuZWRpdG9yU2V0dGluZ3MuZW5hYmxlTUNMKVxuICAgICAgICAgICAgdGhpcy5tZXRob2RzLnB1c2goTUNMTWV0aG9kTmFtZSk7XG4gICAgICAgIGNvbnN0IHByZXBvcmNlc3NpbmdGdW5jcyA9IERHLkZ1bmMuZmluZCh7IHRhZ3M6IFtESU1fUkVEX1BSRVBST0NFU1NJTkdfRlVOQ1RJT05fVEFHXSB9KTtcbiAgICAgICAgLy8gbWFwIHRoYXQgY29udGFpbnMgYWxsIHByZXByb2Nlc3NpbmcgZnVuY3Rpb25zIGFuZCB0aGVpciBtZXRhZGF0YVxuICAgICAgICBwcmVwb3JjZXNzaW5nRnVuY3MuZm9yRWFjaCgoZikgPT4ge1xuICAgICAgICAgICAgY29uc3Qgc2VtVHlwZXMgPSBmLm9wdGlvbnMuZ2V0KFNVUFBPUlRFRF9TRU1UWVBFU19UQUcpID8/ICcnO1xuICAgICAgICAgICAgY29uc3QgbmFtZSA9IGYuZnJpZW5kbHlOYW1lID8/IGYubmFtZTtcbiAgICAgICAgICAgIGNvbnN0IHR5cGVzID0gZi5vcHRpb25zLmdldChTVVBQT1JURURfVFlQRVNfVEFHKSA/PyAnJztcbiAgICAgICAgICAgIGNvbnN0IHVuaXRzID0gZi5vcHRpb25zLmdldChTVVBQT1JURURfVU5JVFNfVEFHKSA/PyAnJztcbiAgICAgICAgICAgIGNvbnN0IGRpc3RhbmNlRnVuY3Rpb25zID0gZi5vcHRpb25zLmdldChTVVBQT1JURURfRElTVEFOQ0VfRlVOQ1RJT05TX1RBRykgPz8gJyc7XG4gICAgICAgICAgICBpZiAodGhpcy5lZGl0b3JTZXR0aW5ncy5zZW10eXBlICYmICFzZW1UeXBlcy5pbmNsdWRlcyh0aGlzLmVkaXRvclNldHRpbmdzLnNlbXR5cGUpKVxuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIGlmICh0aGlzLmVkaXRvclNldHRpbmdzLnR5cGUgJiYgIXR5cGVzLmluY2x1ZGVzKHRoaXMuZWRpdG9yU2V0dGluZ3MudHlwZSkpXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgaWYgKHRoaXMuZWRpdG9yU2V0dGluZ3MudW5pdHMgJiYgIXVuaXRzLmluY2x1ZGVzKHRoaXMuZWRpdG9yU2V0dGluZ3MudW5pdHMpKVxuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIHRoaXMuc3VwcG9ydGVkRnVuY3Rpb25zW25hbWVdID0ge1xuICAgICAgICAgICAgICAgIGZ1bmM6IGYsXG4gICAgICAgICAgICAgICAgc2VtVHlwZXM6IHNlbVR5cGVzID8gc2VtVHlwZXMuc3BsaXQoJywnKSA6IFtdLFxuICAgICAgICAgICAgICAgIHR5cGVzOiB0eXBlcyA/IHR5cGVzLnNwbGl0KCcsJykgOiBbXSxcbiAgICAgICAgICAgICAgICB1bml0czogdW5pdHMgPyB1bml0cy5zcGxpdCgnLCcpIDogW10sXG4gICAgICAgICAgICAgICAgZGlzdGFuY2VGdW5jdGlvbnM6IGRpc3RhbmNlRnVuY3Rpb25zID8gZGlzdGFuY2VGdW5jdGlvbnMuc3BsaXQoJywnKSA6IFtdLFxuICAgICAgICAgICAgfTtcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMudGFibGVJbnB1dCA9IHVpLnRhYmxlSW5wdXQoJ1RhYmxlJywgZ3Jvay5zaGVsbC50di5kYXRhRnJhbWUsIGdyb2suc2hlbGwudGFibGVzLCAoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLm9uVGFibGVJbnB1dENoYW5nZWQoKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMub25UYWJsZUlucHV0Q2hhbmdlZCgpO1xuICAgICAgICB0aGlzLnJlZ2VuZXJhdGVDb2xJbnB1dCgpO1xuICAgICAgICB0aGlzLm9uQ29sdW1uSW5wdXRDaGFuZ2VkKCk7XG4gICAgICAgIGxldCBzZXR0aW5nc09wZW5lZCA9IGZhbHNlO1xuICAgICAgICBsZXQgZGJTY2FuU2V0dGluZ3NPcGVuZWQgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5tZXRob2RJbnB1dCA9IHVpLmNob2ljZUlucHV0KCdNZXRob2QnLCBEaW1SZWR1Y3Rpb25NZXRob2RzLlVNQVAsIHRoaXMubWV0aG9kcywgKCkgPT4ge1xuICAgICAgICAgICAgaWYgKHNldHRpbmdzT3BlbmVkKVxuICAgICAgICAgICAgICAgIHRoaXMuY3JlYXRlQWxnb3JpdGhtU2V0dGluZ3NEaXYodGhpcy5tZXRob2RTZXR0aW5nc0RpdiwgdGhpcy5tZXRob2RzUGFyYW1zW3RoaXMubWV0aG9kSW5wdXQudmFsdWVdKTtcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMubWV0aG9kU2V0dGluZ3NJY29uID0gdWkuaWNvbnMuc2V0dGluZ3MoKCkgPT4ge1xuICAgICAgICAgICAgc2V0dGluZ3NPcGVuZWQgPSAhc2V0dGluZ3NPcGVuZWQ7XG4gICAgICAgICAgICBpZiAoIXNldHRpbmdzT3BlbmVkKVxuICAgICAgICAgICAgICAgIHVpLmVtcHR5KHRoaXMubWV0aG9kU2V0dGluZ3NEaXYpO1xuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgIHRoaXMuY3JlYXRlQWxnb3JpdGhtU2V0dGluZ3NEaXYodGhpcy5tZXRob2RTZXR0aW5nc0RpdiwgdGhpcy5tZXRob2RzUGFyYW1zW3RoaXMubWV0aG9kSW5wdXQudmFsdWVdKTtcbiAgICAgICAgfSwgJ01vZGlmeSBtZXRob2RzIHBhcmFtZXRlcnMnKTtcbiAgICAgICAgdGhpcy5kYlNjYW5TZXR0aW5nc0ljb24gPSB1aS5pY29ucy5zZXR0aW5ncygoKSA9PiB7XG4gICAgICAgICAgICBkYlNjYW5TZXR0aW5nc09wZW5lZCA9ICFkYlNjYW5TZXR0aW5nc09wZW5lZDtcbiAgICAgICAgICAgIGlmICghZGJTY2FuU2V0dGluZ3NPcGVuZWQpXG4gICAgICAgICAgICAgICAgdWkuZW1wdHkodGhpcy5kYlNjYW5TZXR0aW5nc0Rpdik7XG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgdGhpcy5jcmVhdGVBbGdvcml0aG1TZXR0aW5nc0Rpdih0aGlzLmRiU2NhblNldHRpbmdzRGl2LCB0aGlzLmRiU2NhblBhcmFtcyk7XG4gICAgICAgIH0sICdNb2RpZnkgY2x1c3RlcmluZyBwYXJhbWV0ZXJzJyk7XG4gICAgICAgIHRoaXMuY2x1c3RlckVtYmVkZGluZ3NJbnB1dC5jbGFzc0xpc3QuYWRkKCdtbC1kaW0tcmVkdWN0aW9uLXNldHRpbmdzLWlucHV0Jyk7XG4gICAgICAgIHRoaXMuY2x1c3RlckVtYmVkZGluZ3NJbnB1dC5yb290LnByZXBlbmQodGhpcy5kYlNjYW5TZXR0aW5nc0ljb24pO1xuICAgICAgICB0aGlzLm1ldGhvZElucHV0LnJvb3QuY2xhc3NMaXN0LmFkZCgnbWwtZGltLXJlZHVjdGlvbi1zZXR0aW5ncy1pbnB1dCcpO1xuICAgICAgICB0aGlzLm1ldGhvZElucHV0LnJvb3QucHJlcGVuZCh0aGlzLm1ldGhvZFNldHRpbmdzSWNvbik7XG4gICAgICAgIHRoaXMubWV0aG9kU2V0dGluZ3NEaXYgPSB1aS5pbnB1dHMoW10pO1xuICAgICAgICBjb25zdCBmdW5jdGlvbnMgPSB0aGlzLmNvbHVtbkZ1bmN0aW9uc01hcFt0aGlzLmNvbElucHV0LnZhbHVlLm5hbWVdO1xuICAgICAgICB0aGlzLnByZXByb2Nlc3NpbmdGdW5jdGlvbklucHV0ID0gdWkuY2hvaWNlSW5wdXQoJ0VuY29kaW5nIGZ1bmN0aW9uJywgZnVuY3Rpb25zWzBdLCBmdW5jdGlvbnMsICgpID0+IHtcbiAgICAgICAgICAgIHRoaXMub25QcmVwcm9jZXNzaW5nRnVuY3Rpb25DaGFuZ2VkKCk7XG4gICAgICAgIH0pO1xuICAgICAgICBsZXQgZmxhZ1BmaSA9IGZhbHNlO1xuICAgICAgICBpZiAoIXRoaXMucHJlcHJvY2Vzc2luZ0Z1bmN0aW9uSW5wdXRSb290KSB7XG4gICAgICAgICAgICB0aGlzLnByZXByb2Nlc3NpbmdGdW5jdGlvbklucHV0Um9vdCA9IHRoaXMucHJlcHJvY2Vzc2luZ0Z1bmN0aW9uSW5wdXQucm9vdDtcbiAgICAgICAgICAgIGZsYWdQZmkgPSB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIGlmICghZmxhZ1BmaSkge1xuICAgICAgICAgICAgdWkuZW1wdHkodGhpcy5wcmVwcm9jZXNzaW5nRnVuY3Rpb25JbnB1dFJvb3QpO1xuICAgICAgICAgICAgQXJyYXkuZnJvbSh0aGlzLnByZXByb2Nlc3NpbmdGdW5jdGlvbklucHV0LnJvb3QuY2hpbGRyZW4pXG4gICAgICAgICAgICAgICAgLmZvckVhY2goKGNoaWxkKSA9PiB0aGlzLnByZXByb2Nlc3NpbmdGdW5jdGlvbklucHV0Um9vdC5hcHBlbmQoY2hpbGQpKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLnByZXByb2Nlc3NpbmdGdW5jdGlvbklucHV0Um9vdC5jbGFzc0xpc3QuYWRkKCdtbC1kaW0tcmVkdWN0aW9uLXNldHRpbmdzLWlucHV0Jyk7XG4gICAgICAgIGxldCBwcmVwcm9jZXNzaW5nU2V0dGluZ3NPcGVuZWQgPSBmYWxzZTtcbiAgICAgICAgdGhpcy5wcmVwcm9jZXNzaW5nRnVuY1NldHRpbmdzSWNvbiA9IHVpLmljb25zLnNldHRpbmdzKGFzeW5jICgpID0+IHtcbiAgICAgICAgICAgIGlmICghcHJlcHJvY2Vzc2luZ1NldHRpbmdzT3BlbmVkKSB7XG4gICAgICAgICAgICAgICAgYXdhaXQgdGhpcy5jcmVhdGVQcmVwcm9jZXNzaW5nRnVuY1BhcmFtc0Rpdih0aGlzLnByZXByb2Nlc3NpbmdGdW5jU2V0dGluZ3NEaXYsIHRoaXMuc3VwcG9ydGVkRnVuY3Rpb25zW3RoaXMucHJlcHJvY2Vzc2luZ0Z1bmN0aW9uSW5wdXQudmFsdWVdLmZ1bmMpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgdWkuZW1wdHkodGhpcy5wcmVwcm9jZXNzaW5nRnVuY1NldHRpbmdzRGl2KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHByZXByb2Nlc3NpbmdTZXR0aW5nc09wZW5lZCA9ICFwcmVwcm9jZXNzaW5nU2V0dGluZ3NPcGVuZWQ7XG4gICAgICAgIH0sICdNb2RpZnkgZW5jb2RpbmcgZnVuY3Rpb24gcGFyYW1ldGVycycpO1xuICAgICAgICB0aGlzLnByZXByb2Nlc3NpbmdGdW5jdGlvbklucHV0Um9vdC5wcmVwZW5kKHRoaXMucHJlcHJvY2Vzc2luZ0Z1bmNTZXR0aW5nc0ljb24pO1xuICAgICAgICB0aGlzLnNpbWlsYXJpdHlNZXRyaWNJbnB1dCA9IHVpLmNob2ljZUlucHV0KCdTaW1pbGFyaXR5JywgJycsIFtdLCBudWxsKTtcbiAgICAgICAgdGhpcy5zaW1pbGFyaXR5TWV0cmljSW5wdXQubnVsbGFibGUgPSBmYWxzZTtcbiAgICAgICAgaWYgKCF0aGlzLnNpbWlsYXJpdHlNZXRyaWNJbnB1dFJvb3QpXG4gICAgICAgICAgICB0aGlzLnNpbWlsYXJpdHlNZXRyaWNJbnB1dFJvb3QgPSB0aGlzLnNpbWlsYXJpdHlNZXRyaWNJbnB1dC5yb290O1xuICAgICAgICB0aGlzLm9uUHJlcHJvY2Vzc2luZ0Z1bmN0aW9uQ2hhbmdlZCgpO1xuICAgIH1cbiAgICBnZXRDb2xJbnB1dCgpIHtcbiAgICAgICAgY29uc3QgZmlyc3RTdXBwb3J0ZWRDb2x1bW4gPSB0aGlzLnRhYmxlSW5wdXQudmFsdWU/LmNvbHVtbnMudG9MaXN0KClcbiAgICAgICAgICAgIC5maW5kKChjb2wpID0+ICEhdGhpcy5jb2x1bW5GdW5jdGlvbnNNYXBbY29sLm5hbWVdKSA/PyBudWxsO1xuICAgICAgICBjb25zdCBpbnB1dCA9IHVpLmNvbHVtbklucHV0KCdDb2x1bW4nLCB0aGlzLnRhYmxlSW5wdXQudmFsdWUsIGZpcnN0U3VwcG9ydGVkQ29sdW1uLCAoKSA9PiB0aGlzLm9uQ29sdW1uSW5wdXRDaGFuZ2VkKCksIHsgZmlsdGVyOiAoY29sKSA9PiAhIXRoaXMuY29sdW1uRnVuY3Rpb25zTWFwW2NvbC5uYW1lXSB9KTtcbiAgICAgICAgaWYgKCF0aGlzLmNvbElucHV0Um9vdClcbiAgICAgICAgICAgIHRoaXMuY29sSW5wdXRSb290ID0gaW5wdXQucm9vdDtcbiAgICAgICAgcmV0dXJuIGlucHV0O1xuICAgIH1cbiAgICByZWdlbmVyYXRlQ29sSW5wdXQoKSB7XG4gICAgICAgIGxldCBmbGFnID0gZmFsc2U7XG4gICAgICAgIGlmICh0aGlzLmNvbElucHV0Um9vdCkge1xuICAgICAgICAgICAgZmxhZyA9IHRydWU7XG4gICAgICAgICAgICB1aS5lbXB0eSh0aGlzLmNvbElucHV0Um9vdCk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5jb2xJbnB1dCA9IHRoaXMuZ2V0Q29sSW5wdXQoKTtcbiAgICAgICAgaWYgKGZsYWcpXG4gICAgICAgICAgICBBcnJheS5mcm9tKHRoaXMuY29sSW5wdXQucm9vdC5jaGlsZHJlbikuZm9yRWFjaCgoY2hpbGQpID0+IHRoaXMuY29sSW5wdXRSb290LmFwcGVuZChjaGlsZCkpO1xuICAgICAgICB0aGlzLm9uQ29sdW1uSW5wdXRDaGFuZ2VkKCk7XG4gICAgfVxuICAgIG9uVGFibGVJbnB1dENoYW5nZWQoKSB7XG4gICAgICAgIGNvbnN0IHZhbHVlID0gdGhpcy50YWJsZUlucHV0LnZhbHVlO1xuICAgICAgICBpZiAoIXZhbHVlKVxuICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB0aGlzLmNvbHVtbkZ1bmN0aW9uc01hcCA9IHt9O1xuICAgICAgICBjb25zdCBjb2x1bW5zID0gdmFsdWUuY29sdW1ucy50b0xpc3QoKTtcbiAgICAgICAgY29sdW1ucy5mb3JFYWNoKChjb2wpID0+IHtcbiAgICAgICAgICAgIE9iamVjdC5rZXlzKHRoaXMuc3VwcG9ydGVkRnVuY3Rpb25zKS5mb3JFYWNoKChmdW5jTmFtZSkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IHNlbVR5cGVzID0gdGhpcy5zdXBwb3J0ZWRGdW5jdGlvbnNbZnVuY05hbWVdLnNlbVR5cGVzO1xuICAgICAgICAgICAgICAgIGNvbnN0IHR5cGVzID0gdGhpcy5zdXBwb3J0ZWRGdW5jdGlvbnNbZnVuY05hbWVdLnR5cGVzO1xuICAgICAgICAgICAgICAgIGNvbnN0IHVuaXRzID0gdGhpcy5zdXBwb3J0ZWRGdW5jdGlvbnNbZnVuY05hbWVdLnVuaXRzO1xuICAgICAgICAgICAgICAgIGNvbnN0IHNlbVR5cGVTdXBwb3J0ZWQgPSAhc2VtVHlwZXMubGVuZ3RoIHx8IChjb2wuc2VtVHlwZSAmJiBzZW1UeXBlcy5pbmNsdWRlcyhjb2wuc2VtVHlwZSkpO1xuICAgICAgICAgICAgICAgIGNvbnN0IHR5cGVTdXBvcnRlZCA9ICF0eXBlcy5sZW5ndGggfHwgdHlwZXMuaW5jbHVkZXMoY29sLnR5cGUpO1xuICAgICAgICAgICAgICAgIGNvbnN0IHVuaXRzU3VwcG9ydGVkID0gIXVuaXRzLmxlbmd0aCB8fFxuICAgICAgICAgICAgICAgICAgICAoY29sLmdldFRhZyhERy5UQUdTLlVOSVRTKSAmJiB1bml0cy5pbmNsdWRlcyhjb2wuZ2V0VGFnKERHLlRBR1MuVU5JVFMpKSk7XG4gICAgICAgICAgICAgICAgaWYgKHNlbVR5cGVTdXBwb3J0ZWQgJiYgdHlwZVN1cG9ydGVkICYmIHVuaXRzU3VwcG9ydGVkKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmICghdGhpcy5jb2x1bW5GdW5jdGlvbnNNYXBbY29sLm5hbWVdKVxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jb2x1bW5GdW5jdGlvbnNNYXBbY29sLm5hbWVdID0gW107XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY29sdW1uRnVuY3Rpb25zTWFwW2NvbC5uYW1lXS5wdXNoKGZ1bmNOYW1lKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9KTtcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMucmVnZW5lcmF0ZUNvbElucHV0KCk7XG4gICAgfVxuICAgIG9uQ29sdW1uSW5wdXRDaGFuZ2VkKCkge1xuICAgICAgICBjb25zdCBjb2wgPSB0aGlzLmNvbElucHV0LnZhbHVlO1xuICAgICAgICBpZiAoIWNvbClcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgY29uc3Qgc3VwcG9ydGVkUHJlcHJvY2Vzc2luZ0Z1bmN0aW9ucyA9IHRoaXMuY29sdW1uRnVuY3Rpb25zTWFwW2NvbC5uYW1lXTtcbiAgICAgICAgdGhpcy5wcmVwcm9jZXNzaW5nRnVuY3Rpb25JbnB1dCA9IHVpLmNob2ljZUlucHV0KCdQcmVwcm9jZXNzaW5nIGZ1bmN0aW9uJywgc3VwcG9ydGVkUHJlcHJvY2Vzc2luZ0Z1bmN0aW9uc1swXSwgc3VwcG9ydGVkUHJlcHJvY2Vzc2luZ0Z1bmN0aW9ucywgKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5vblByZXByb2Nlc3NpbmdGdW5jdGlvbkNoYW5nZWQoKTtcbiAgICAgICAgfSk7XG4gICAgICAgIGxldCBmbGFnID0gZmFsc2U7XG4gICAgICAgIGlmICghdGhpcy5wcmVwcm9jZXNzaW5nRnVuY3Rpb25JbnB1dFJvb3QpIHtcbiAgICAgICAgICAgIHRoaXMucHJlcHJvY2Vzc2luZ0Z1bmN0aW9uSW5wdXRSb290ID0gdGhpcy5wcmVwcm9jZXNzaW5nRnVuY3Rpb25JbnB1dC5yb290O1xuICAgICAgICAgICAgZmxhZyA9IHRydWU7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKCFmbGFnKSB7XG4gICAgICAgICAgICB1aS5lbXB0eSh0aGlzLnByZXByb2Nlc3NpbmdGdW5jdGlvbklucHV0Um9vdCk7XG4gICAgICAgICAgICBBcnJheS5mcm9tKHRoaXMucHJlcHJvY2Vzc2luZ0Z1bmN0aW9uSW5wdXQucm9vdC5jaGlsZHJlbilcbiAgICAgICAgICAgICAgICAuZm9yRWFjaCgoY2hpbGQpID0+IHRoaXMucHJlcHJvY2Vzc2luZ0Z1bmN0aW9uSW5wdXRSb290LmFwcGVuZChjaGlsZCkpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMub25QcmVwcm9jZXNzaW5nRnVuY3Rpb25DaGFuZ2VkKCk7XG4gICAgfVxuICAgIG9uUHJlcHJvY2Vzc2luZ0Z1bmN0aW9uQ2hhbmdlZCgpIHtcbiAgICAgICAgdWkuZW1wdHkodGhpcy5wcmVwcm9jZXNzaW5nRnVuY1NldHRpbmdzRGl2KTtcbiAgICAgICAgdGhpcy5wcmVwcm9jZXNzaW5nRnVuY3Rpb25TZXR0aW5ncyA9IHt9O1xuICAgICAgICBjb25zdCBmTmFtZSA9IHRoaXMucHJlcHJvY2Vzc2luZ0Z1bmN0aW9uSW5wdXQudmFsdWU7XG4gICAgICAgIGNvbnN0IGRpc3RhbmNlRnMgPSB0aGlzLnN1cHBvcnRlZEZ1bmN0aW9uc1tmTmFtZV0uZGlzdGFuY2VGdW5jdGlvbnM7XG4gICAgICAgIHRoaXMuYXZhaWxhYmxlTWV0cmljcyA9IFsuLi5kaXN0YW5jZUZzXTtcbiAgICAgICAgdGhpcy5zaW1pbGFyaXR5TWV0cmljSW5wdXQgPSB1aS5jaG9pY2VJbnB1dCgnU2ltaWxhcml0eScsIHRoaXMuYXZhaWxhYmxlTWV0cmljc1swXSwgdGhpcy5hdmFpbGFibGVNZXRyaWNzLCBudWxsKTtcbiAgICAgICAgdGhpcy5zaW1pbGFyaXR5TWV0cmljSW5wdXQubnVsbGFibGUgPSBmYWxzZTtcbiAgICAgICAgaWYgKCF0aGlzLnNpbWlsYXJpdHlNZXRyaWNJbnB1dFJvb3QpXG4gICAgICAgICAgICB0aGlzLnNpbWlsYXJpdHlNZXRyaWNJbnB1dFJvb3QgPSB0aGlzLnNpbWlsYXJpdHlNZXRyaWNJbnB1dC5yb290O1xuICAgICAgICB1aS5lbXB0eSh0aGlzLnNpbWlsYXJpdHlNZXRyaWNJbnB1dFJvb3QpO1xuICAgICAgICBBcnJheS5mcm9tKHRoaXMuc2ltaWxhcml0eU1ldHJpY0lucHV0LnJvb3QuY2hpbGRyZW4pXG4gICAgICAgICAgICAuZm9yRWFjaCgoY2hpbGQpID0+IHRoaXMuc2ltaWxhcml0eU1ldHJpY0lucHV0Um9vdC5hcHBlbmQoY2hpbGQpKTtcbiAgICAgICAgaWYgKHRoaXMucHJlcHJvY2Vzc2luZ0Z1bmNTZXR0aW5nc0ljb24pIHtcbiAgICAgICAgICAgIGlmICh0aGlzLnN1cHBvcnRlZEZ1bmN0aW9uc1tmTmFtZV0uZnVuYy5pbnB1dHMubGVuZ3RoIDwgMylcbiAgICAgICAgICAgICAgICB0aGlzLnByZXByb2Nlc3NpbmdGdW5jU2V0dGluZ3NJY29uLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7XG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgdGhpcy5wcmVwcm9jZXNzaW5nRnVuY1NldHRpbmdzSWNvbi5zdHlsZS5kaXNwbGF5ID0gJ2ZsZXgnO1xuICAgICAgICB9XG4gICAgfVxuICAgIGNyZWF0ZUFsZ29yaXRobVNldHRpbmdzRGl2KHBhcmFtc0Zvcm0sIHBhcmFtcykge1xuICAgICAgICB1aS5lbXB0eShwYXJhbXNGb3JtKTtcbiAgICAgICAgT2JqZWN0LmtleXMocGFyYW1zKS5mb3JFYWNoKChpdCkgPT4ge1xuICAgICAgICAgICAgY29uc3QgcGFyYW0gPSBwYXJhbXNbaXRdO1xuICAgICAgICAgICAgY29uc3QgaW5wdXQgPSBwYXJhbS50eXBlID09PSAnc3RyaW5nJyA/XG4gICAgICAgICAgICAgICAgdWkuc3RyaW5nSW5wdXQocGFyYW0udWlOYW1lLCBwYXJhbS52YWx1ZSA/PyAnJywgKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBwYXJhbS52YWx1ZSA9IGlucHV0LnZhbHVlO1xuICAgICAgICAgICAgICAgIH0pIDogcGFyYW0udHlwZSA9PT0gJ2Jvb2xlYW4nID9cbiAgICAgICAgICAgICAgICB1aS5ib29sSW5wdXQocGFyYW0udWlOYW1lLCBwYXJhbS52YWx1ZSA/PyBmYWxzZSwgKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBwYXJhbS52YWx1ZSA9IGlucHV0LnZhbHVlO1xuICAgICAgICAgICAgICAgIH0pIDpcbiAgICAgICAgICAgICAgICB1aS5mbG9hdElucHV0KHBhcmFtLnVpTmFtZSwgcGFyYW0udmFsdWUsICgpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgcGFyYW0udmFsdWUgPSBpbnB1dC52YWx1ZTtcbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgIHBhcmFtc0Zvcm0uYXBwZW5kKGlucHV0LnJvb3QpO1xuICAgICAgICAgICAgaWYgKHBhcmFtLmRpc2FibGUpIHtcbiAgICAgICAgICAgICAgICBpbnB1dC5lbmFibGVkID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgdWkudG9vbHRpcC5iaW5kKGlucHV0LmlucHV0ID8/IGlucHV0LnJvb3QsIHBhcmFtLmRpc2FibGVUb29sdGlwID8/ICcnKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHVpLnRvb2x0aXAuYmluZChpbnB1dC5pbnB1dCA/PyBpbnB1dC5yb290LCBwYXJhbS50b29sdGlwKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIHJldHVybiBwYXJhbXNGb3JtO1xuICAgIH1cbiAgICBhc3luYyBjcmVhdGVQcmVwcm9jZXNzaW5nRnVuY1BhcmFtc0RpdihwYXJhbXNGb3JtLCBmdW5jKSB7XG4gICAgICAgIHVpLmVtcHR5KHBhcmFtc0Zvcm0pO1xuICAgICAgICBpZiAoZnVuYy5pbnB1dHMubGVuZ3RoIDwgMylcbiAgICAgICAgICAgIHJldHVybiB1aS5kaXYoKTtcbiAgICAgICAgY29uc3QgZmMgPSBmdW5jLnByZXBhcmUoKTtcbiAgICAgICAgY29uc3QgaW5wdXRzID0gYXdhaXQgZmMuYnVpbGRFZGl0b3IodWkuZGl2KCkpO1xuICAgICAgICBmb3IgKGxldCBpID0gMjsgaSA8IGZ1bmMuaW5wdXRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBjb25zdCBmSW5wdXQgPSBmdW5jLmlucHV0c1tpXTtcbiAgICAgICAgICAgIGlmICh0aGlzLnByZXByb2Nlc3NpbmdGdW5jdGlvblNldHRpbmdzW2ZJbnB1dC5uYW1lXSB8fCBmYy5pbnB1dFBhcmFtc1tmdW5jLmlucHV0c1tpXS5uYW1lXS52YWx1ZSB8fFxuICAgICAgICAgICAgICAgIGZJbnB1dC5kZWZhdWx0VmFsdWUpIHtcbiAgICAgICAgICAgICAgICB0aGlzLnByZXByb2Nlc3NpbmdGdW5jdGlvblNldHRpbmdzW2ZJbnB1dC5uYW1lXSA9XG4gICAgICAgICAgICAgICAgICAgIHRoaXMucHJlcHJvY2Vzc2luZ0Z1bmN0aW9uU2V0dGluZ3NbZklucHV0Lm5hbWVdID8/IGZjLmlucHV0UGFyYW1zW2ZJbnB1dC5uYW1lXS52YWx1ZSA/PyBmSW5wdXQuZGVmYXVsdFZhbHVlO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgaW5wdXQgPSBpbnB1dHMuZmluZCgoaW5wKSA9PiBpbnAucHJvcGVydHkubmFtZSA9PT0gZklucHV0Lm5hbWUpO1xuICAgICAgICAgICAgaWYgKCFpbnB1dClcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIGlmICh0aGlzLnByZXByb2Nlc3NpbmdGdW5jdGlvblNldHRpbmdzW2ZJbnB1dC5uYW1lXSAhPT0gbnVsbCAmJlxuICAgICAgICAgICAgICAgIHRoaXMucHJlcHJvY2Vzc2luZ0Z1bmN0aW9uU2V0dGluZ3NbZklucHV0Lm5hbWVdICE9PSB1bmRlZmluZWQpXG4gICAgICAgICAgICAgICAgaW5wdXQudmFsdWUgPSB0aGlzLnByZXByb2Nlc3NpbmdGdW5jdGlvblNldHRpbmdzW2ZJbnB1dC5uYW1lXTtcbiAgICAgICAgICAgIGlucHV0Lm9uQ2hhbmdlZCgoKSA9PiB7IHRoaXMucHJlcHJvY2Vzc2luZ0Z1bmN0aW9uU2V0dGluZ3NbZklucHV0Lm5hbWVdID0gaW5wdXQudmFsdWU7IH0pO1xuICAgICAgICAgICAgcGFyYW1zRm9ybS5hcHBlbmQoaW5wdXQucm9vdCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHBhcmFtc0Zvcm07XG4gICAgfVxuICAgIGdldEVkaXRvcigpIHtcbiAgICAgICAgcmV0dXJuIHVpLmRpdihbXG4gICAgICAgICAgICB0aGlzLnRhYmxlSW5wdXQsXG4gICAgICAgICAgICB0aGlzLmNvbElucHV0Um9vdCxcbiAgICAgICAgICAgIHRoaXMucHJlcHJvY2Vzc2luZ0Z1bmN0aW9uSW5wdXRSb290LFxuICAgICAgICAgICAgdGhpcy5wcmVwcm9jZXNzaW5nRnVuY1NldHRpbmdzRGl2LFxuICAgICAgICAgICAgdGhpcy5tZXRob2RJbnB1dCxcbiAgICAgICAgICAgIHRoaXMubWV0aG9kU2V0dGluZ3NEaXYsXG4gICAgICAgICAgICB0aGlzLnNpbWlsYXJpdHlNZXRyaWNJbnB1dFJvb3QsXG4gICAgICAgICAgICB0aGlzLnBsb3RFbWJlZGRpbmdzSW5wdXQsXG4gICAgICAgICAgICB0aGlzLmNsdXN0ZXJFbWJlZGRpbmdzSW5wdXQsXG4gICAgICAgICAgICB0aGlzLmRiU2NhblNldHRpbmdzRGl2XG4gICAgICAgIF0sIHsgc3R5bGU6IHsgbWluV2lkdGg6ICczMjBweCcgfSwgY2xhc3NlczogJ3VpLWZvcm0nIH0pO1xuICAgIH1cbiAgICBnZXRQYXJhbXMoKSB7XG4gICAgICAgIHJldHVybiB7XG4gICAgICAgICAgICB0YWJsZTogdGhpcy50YWJsZUlucHV0LnZhbHVlLFxuICAgICAgICAgICAgY29sOiB0aGlzLmNvbElucHV0LnZhbHVlLFxuICAgICAgICAgICAgbWV0aG9kTmFtZTogdGhpcy5tZXRob2RJbnB1dC52YWx1ZSxcbiAgICAgICAgICAgIHByZXByb2Nlc3NpbmdGdW5jdGlvbjogdGhpcy5zdXBwb3J0ZWRGdW5jdGlvbnNbdGhpcy5wcmVwcm9jZXNzaW5nRnVuY3Rpb25JbnB1dC52YWx1ZV0uZnVuYyxcbiAgICAgICAgICAgIHNpbWlsYXJpdHlNZXRyaWM6IHRoaXMuc2ltaWxhcml0eU1ldHJpY0lucHV0LnZhbHVlLFxuICAgICAgICAgICAgcGxvdEVtYmVkZGluZ3M6IHRoaXMucGxvdEVtYmVkZGluZ3NJbnB1dC52YWx1ZSxcbiAgICAgICAgICAgIGNsdXN0ZXJFbWJlZGRpbmdzOiB0aGlzLmNsdXN0ZXJFbWJlZGRpbmdzSW5wdXQudmFsdWUsXG4gICAgICAgICAgICBvcHRpb25zOiB7IC4uLnRoaXMuYWxnb3JpdGhtT3B0aW9ucywgLi4udGhpcy5kYlNjYW5PcHRpb25zLFxuICAgICAgICAgICAgICAgIHByZXByb2Nlc3NpbmdGdW5jQXJnczogKHRoaXMucHJlcHJvY2Vzc2luZ0Z1bmN0aW9uU2V0dGluZ3MgPz8ge30pIH1cbiAgICAgICAgfTtcbiAgICB9XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1kYXRhOmFwcGxpY2F0aW9uL2pzb247YmFzZTY0LGV5SjJaWEp6YVc5dUlqb3pMQ0ptYVd4bElqb2laR2x0Wlc1emFXOXVZV3hwZEhrdGNtVmtkV04wYVc5dUxXVmthWFJ2Y2k1cWN5SXNJbk52ZFhKalpWSnZiM1FpT2lJaUxDSnpiM1Z5WTJWeklqcGJJbVJwYldWdWMybHZibUZzYVhSNUxYSmxaSFZqZEdsdmJpMWxaR2wwYjNJdWRITWlYU3dpYm1GdFpYTWlPbHRkTENKdFlYQndhVzVuY3lJNklrRkJRVUVzVDBGQlR5eExRVUZMTEVsQlFVa3NUVUZCVFN4dFFrRkJiVUlzUTBGQlF6dEJRVU14UXl4UFFVRlBMRXRCUVVzc1JVRkJSU3hOUVVGTkxHbENRVUZwUWl4RFFVRkRPMEZCUTNSRExFOUJRVThzUzBGQlN5eEZRVUZGTEUxQlFVMHNhVUpCUVdsQ0xFTkJRVU03UVVGRGRFTXNUMEZCVHl4RlFVRkRMR3REUVVGclF5eEZRVUZGTEdkRFFVRm5ReXhGUVVNeFJTeHpRa0ZCYzBJc1JVRkJSU3h0UWtGQmJVSXNSVUZCUlN4dFFrRkJiVUlzUlVGQlF5eE5RVUZOTEZWQlFWVXNRMEZCUXp0QlFVZHdSaXhQUVVGUExFVkJRVU1zVjBGQlZ5eEZRVUZGTEZkQlFWY3NSVUZCUXl4TlFVRk5MRFJGUVVFMFJTeERRVUZETzBGQlIzQklMRTlCUVU4c1JVRkJReXh0UWtGQmJVSXNSVUZCUXl4TlFVRk5MR2RFUVVGblJDeERRVUZETzBGQlEyNUdMRTlCUVU4c1JVRkJReXhoUVVGaExFVkJRVU1zVFVGQlRTeFJRVUZSTEVOQlFVTTdRVUZGY2tNc1RVRkJUU3hEUVVGRExFMUJRVTBzWVVGQllTeEhRVUZITzBsQlF6TkNMRU5CUVVNc1JVRkJSU3hEUVVGRExFOUJRVThzUTBGQlF5eFJRVUZSTEVOQlFVTXNSVUZCUlN4WFFVRlhPMGxCUTJ4RExFTkJRVU1zUlVGQlJTeERRVUZETEU5QlFVOHNRMEZCUXl4aFFVRmhMRU5CUVVNc1JVRkJSU3hYUVVGWE8wTkJRM2hETEVOQlFVTTdRVUY1UWtZc1RVRkJUU3hQUVVGUExHRkJRV0U3U1VGTmRFSTdVVUZNUVN4WlFVRlBMRWRCUVhWQ08xbEJRelZDTEUxQlFVMHNSVUZCUlN4VFFVRlRMRVZCUVVVc1MwRkJTeXhGUVVGRkxFbEJRVWtzUlVGQlJTeFBRVUZQTEVWQlFVVXNlVU5CUVhsRExFVkJRVVVzUjBGQlJ5eEZRVUZGTEVOQlFVTXNSVUZCUlN4SFFVRkhMRVZCUVVVc1EwRkJReXhGUVVGRkxFbEJRVWtzUlVGQlJTeExRVUZMTzFOQlFVTXNRMEZCUXp0UlFVTnVTQ3hYUVVGTkxFZEJRWFZDTzFsQlF6TkNMRTFCUVUwc1JVRkJSU3huUWtGQlowSXNSVUZCUlN4TFFVRkxMRVZCUVVVc1EwRkJReXhGUVVGRkxFOUJRVThzUlVGQlJTeHhRMEZCY1VNc1JVRkJSU3hIUVVGSExFVkJRVVVzUTBGQlF5eEZRVUZGTEVkQlFVY3NSVUZCUlN4SlFVRkpMRVZCUVVVc1NVRkJTU3hGUVVGRkxFTkJRVU03VTBGQlF5eERRVUZETzBsQlJXNUhMRU5CUVVNN1NVRkJRU3hEUVVGRE8wTkJRM0JDTzBGQlEwUXNUVUZCVFN4UFFVRlBMSE5DUVVGelFqdEpRV3RETDBJc1NVRkJTU3huUWtGQlowSTdVVUZEYkVJc1RVRkJUU3hsUVVGbExFZEJRVGhDTEVsQlFVa3NRMEZCUXl4aFFVRmhMRU5CUVVNc1NVRkJTU3hEUVVGRExGZEJRVmNzUTBGQlF5eExRVUZOTEVOQlFVTXNRMEZCUXp0UlFVTXZSaXhOUVVGTkxFOUJRVThzUjBGQlVTeEZRVUZGTEVOQlFVTTdVVUZEZUVJc1RVRkJUU3hEUVVGRExFbEJRVWtzUTBGQlF5eGxRVUZsTEVOQlFVTXNRMEZCUXl4UFFVRlBMRU5CUVVNc1EwRkJReXhIUVVGWExFVkJRVVVzUlVGQlJUdFpRVU51UkN4SlFVRkxMR1ZCUVhWQ0xFTkJRVU1zUjBGQlJ5eERRVUZETEVOQlFVTXNTMEZCU3l4SlFVRkpMRWxCUVVrN1owSkJRemRETEU5QlFVOHNRMEZCUXl4SFFVRkhMRU5CUVVNc1IwRkJTU3hsUVVGMVFpeERRVUZETEVkQlFVY3NRMEZCUXl4RFFVRkRMRXRCUVVzc1EwRkJRenRSUVVOMlJDeERRVUZETEVOQlFVTXNRMEZCUXp0UlFVTklMRTlCUVU4c1QwRkJUeXhEUVVGRE8wbEJRMnBDTEVOQlFVTTdTVUZGUkN4SlFVRkpMR0ZCUVdFN1VVRkRaaXhQUVVGUE8xbEJRMHdzWVVGQllTeEZRVUZGTEVsQlFVa3NRMEZCUXl4WlFVRlpMRU5CUVVNc1QwRkJUeXhEUVVGRExFdEJRVXNzU1VGQlNTeEpRVUZKTzFsQlEzUkVMRmxCUVZrc1JVRkJSU3hKUVVGSkxFTkJRVU1zV1VGQldTeERRVUZETEUxQlFVMHNRMEZCUXl4TFFVRkxMRWxCUVVrc1EwRkJRenRUUVVOc1JDeERRVUZETzBsQlEwb3NRMEZCUXp0SlFVVkVMRmxCUVZrc2FVSkJRVFJETEVWQlFVVTdVVUZzUkRGRUxHMUNRVUZqTEVkQlFUaENMRVZCUVVVc1EwRkJRenRSUVVrdlF5eDNRa0ZCYlVJc1IwRkJSeXhGUVVGRkxFTkJRVU1zVTBGQlV5eERRVUZETEdsQ1FVRnBRaXhGUVVGRkxFbEJRVWtzUTBGQlF5eERRVUZETzFGQlF6VkVMREpDUVVGelFpeEhRVUZITEVWQlFVVXNRMEZCUXl4VFFVRlRMRU5CUVVNc2IwSkJRVzlDTEVWQlFVVXNTVUZCU1N4RFFVRkRMRU5CUVVNN1VVRkRiRVVzYlVOQlFUaENMRWRCUVhWQ0xFbEJRVWtzUTBGQlF6dFJRVVV4UkN4WlFVRlBMRWRCUVRCQ0xFTkJRVU1zYlVKQlFXMUNMRU5CUVVNc1NVRkJTU3hGUVVGRkxHMUNRVUZ0UWl4RFFVRkRMRXRCUVVzc1EwRkJReXhEUVVGRE8xRkJTM1pHTEhWQ1FVRnJRaXhIUVVFNFFpeEZRVUZGTEVOQlFVTTdVVUZEYmtRc2RVSkJRV3RDTEVkQlRXSXNSVUZCUlN4RFFVRkRPMUZCUTFJc2NVSkJRV2RDTEVkQlFXRXNSVUZCUlN4RFFVRkRPMUZCUldoRExITkNRVUZwUWl4SFFVRkhMRVZCUVVVc1EwRkJReXhOUVVGTkxFTkJRVU1zUlVGQlJTeERRVUZETEVOQlFVTTdVVUZEYkVNc2MwSkJRV2xDTEVkQlFVY3NSVUZCUlN4RFFVRkRMRTFCUVUwc1EwRkJReXhGUVVGRkxFTkJRVU1zUTBGQlF6dFJRVU5zUXl4cFEwRkJORUlzUjBGQlJ5eEZRVUZGTEVOQlFVTXNUVUZCVFN4RFFVRkRMRVZCUVVVc1EwRkJReXhEUVVGRE8xRkJRemRETEd0RFFVRTJRaXhIUVVGWkxFVkJRVVVzUTBGQlF6dFJRVU0xUXl4clFrRkJZU3hIUVVFclF6dFpRVU14UkN4RFFVRkRMRzFDUVVGdFFpeERRVUZETEVsQlFVa3NRMEZCUXl4RlFVRkZMRWxCUVVrc1YwRkJWeXhGUVVGRk8xbEJRemRETEVOQlFVTXNiVUpCUVcxQ0xFTkJRVU1zUzBGQlN5eERRVUZETEVWQlFVVXNTVUZCU1N4WFFVRlhMRVZCUVVVN1UwRkRMME1zUTBGQlF6dFJRVU5HTEdsQ1FVRlpMRWRCUVVjc1NVRkJTU3hoUVVGaExFVkJRVVVzUTBGQlF6dFJRVzlDYWtNc1NVRkJTU3hEUVVGRExHTkJRV01zUjBGQlJ5eGpRVUZqTEVOQlFVTTdVVUZEY2tNc1NVRkJTU3hKUVVGSkxFTkJRVU1zWTBGQll5eERRVUZETEZOQlFWTTdXVUZETDBJc1NVRkJTU3hEUVVGRExFOUJRVThzUTBGQlF5eEpRVUZKTEVOQlFVTXNZVUZCYjBJc1EwRkJReXhEUVVGRE8xRkJSVEZETEUxQlFVMHNhMEpCUVd0Q0xFZEJRVWNzUlVGQlJTeERRVUZETEVsQlFVa3NRMEZCUXl4SlFVRkpMRU5CUVVNc1JVRkJReXhKUVVGSkxFVkJRVVVzUTBGQlF5eHJRMEZCYTBNc1EwRkJReXhGUVVGRExFTkJRVU1zUTBGQlF6dFJRVU4wUml4dFJVRkJiVVU3VVVGRGJrVXNhMEpCUVd0Q0xFTkJRVU1zVDBGQlR5eERRVUZETEVOQlFVTXNRMEZCUXl4RlFVRkZMRVZCUVVVN1dVRkRMMElzVFVGQlRTeFJRVUZSTEVkQlFWY3NRMEZCUXl4RFFVRkRMRTlCUVU4c1EwRkJReXhIUVVGSExFTkJRVU1zYzBKQlFYTkNMRU5CUVVNc1NVRkJTU3hGUVVGRkxFTkJRVU03V1VGRGNrVXNUVUZCVFN4SlFVRkpMRWRCUVVjc1EwRkJReXhEUVVGRExGbEJRVmtzU1VGQlNTeERRVUZETEVOQlFVTXNTVUZCU1N4RFFVRkRPMWxCUTNSRExFMUJRVTBzUzBGQlN5eEhRVUZYTEVOQlFVTXNRMEZCUXl4UFFVRlBMRU5CUVVNc1IwRkJSeXhEUVVGRExHMUNRVUZ0UWl4RFFVRkRMRWxCUVVrc1JVRkJSU3hEUVVGRE8xbEJReTlFTEUxQlFVMHNTMEZCU3l4SFFVRlhMRU5CUVVNc1EwRkJReXhQUVVGUExFTkJRVU1zUjBGQlJ5eERRVUZETEcxQ1FVRnRRaXhEUVVGRExFbEJRVWtzUlVGQlJTeERRVUZETzFsQlF5OUVMRTFCUVUwc2FVSkJRV2xDTEVkQlFWY3NRMEZCUXl4RFFVRkRMRTlCUVU4c1EwRkJReXhIUVVGSExFTkJRVU1zWjBOQlFXZERMRU5CUVVNc1NVRkJTU3hGUVVGRkxFTkJRVU03V1VGRGVFWXNTVUZCU1N4SlFVRkpMRU5CUVVNc1kwRkJZeXhEUVVGRExFOUJRVThzU1VGQlNTeERRVUZETEZGQlFWRXNRMEZCUXl4UlFVRlJMRU5CUVVNc1NVRkJTU3hEUVVGRExHTkJRV01zUTBGQlF5eFBRVUZQTEVOQlFVTTdaMEpCUTJoR0xFOUJRVTg3V1VGRFZDeEpRVUZKTEVsQlFVa3NRMEZCUXl4alFVRmpMRU5CUVVNc1NVRkJTU3hKUVVGSkxFTkJRVU1zUzBGQlN5eERRVUZETEZGQlFWRXNRMEZCUXl4SlFVRkpMRU5CUVVNc1kwRkJZeXhEUVVGRExFbEJRVWtzUTBGQlF6dG5Ra0ZEZGtVc1QwRkJUenRaUVVOVUxFbEJRVWtzU1VGQlNTeERRVUZETEdOQlFXTXNRMEZCUXl4TFFVRkxMRWxCUVVrc1EwRkJReXhMUVVGTExFTkJRVU1zVVVGQlVTeERRVUZETEVsQlFVa3NRMEZCUXl4alFVRmpMRU5CUVVNc1MwRkJTeXhEUVVGRE8yZENRVU42UlN4UFFVRlBPMWxCUlZRc1NVRkJTU3hEUVVGRExHdENRVUZyUWl4RFFVRkRMRWxCUVVrc1EwRkJReXhIUVVGSE8yZENRVU01UWl4SlFVRkpMRVZCUVVVc1EwRkJRenRuUWtGRFVDeFJRVUZSTEVWQlFVVXNVVUZCVVN4RFFVRkRMRU5CUVVNc1EwRkJReXhSUVVGUkxFTkJRVU1zUzBGQlN5eERRVUZETEVkQlFVY3NRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJReXhGUVVGRk8yZENRVU0zUXl4TFFVRkxMRVZCUVVVc1MwRkJTeXhEUVVGRExFTkJRVU1zUTBGQlF5eExRVUZMTEVOQlFVTXNTMEZCU3l4RFFVRkRMRWRCUVVjc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF5eEZRVUZGTzJkQ1FVTndReXhMUVVGTExFVkJRVVVzUzBGQlN5eERRVUZETEVOQlFVTXNRMEZCUXl4TFFVRkxMRU5CUVVNc1MwRkJTeXhEUVVGRExFZEJRVWNzUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXl4RlFVRkZPMmRDUVVOd1F5eHBRa0ZCYVVJc1JVRkJSU3hwUWtGQmFVSXNRMEZCUXl4RFFVRkRMRU5CUVVNc2FVSkJRV2xDTEVOQlFVTXNTMEZCU3l4RFFVRkRMRWRCUVVjc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF5eEZRVUZGTzJGQlEzcEZMRU5CUVVNN1VVRkRTaXhEUVVGRExFTkJRVU1zUTBGQlF6dFJRVVZJTEVsQlFVa3NRMEZCUXl4VlFVRlZMRWRCUVVjc1JVRkJSU3hEUVVGRExGVkJRVlVzUTBGQlF5eFBRVUZQTEVWQlFVVXNTVUZCU1N4RFFVRkRMRXRCUVVzc1EwRkJReXhGUVVGRkxFTkJRVU1zVTBGQlV5eEZRVUZGTEVsQlFVa3NRMEZCUXl4TFFVRkxMRU5CUVVNc1RVRkJUU3hGUVVGRkxFZEJRVWNzUlVGQlJUdFpRVU40Uml4SlFVRkpMRU5CUVVNc2JVSkJRVzFDTEVWQlFVVXNRMEZCUXp0UlFVTTNRaXhEUVVGRExFTkJRVU1zUTBGQlF6dFJRVU5JTEVsQlFVa3NRMEZCUXl4dFFrRkJiVUlzUlVGQlJTeERRVUZETzFGQlJUTkNMRWxCUVVrc1EwRkJReXhyUWtGQmEwSXNSVUZCUlN4RFFVRkRPMUZCUXpGQ0xFbEJRVWtzUTBGQlF5eHZRa0ZCYjBJc1JVRkJSU3hEUVVGRE8xRkJRelZDTEVsQlFVa3NZMEZCWXl4SFFVRkhMRXRCUVVzc1EwRkJRenRSUVVNelFpeEpRVUZKTEc5Q1FVRnZRaXhIUVVGSExFdEJRVXNzUTBGQlF6dFJRVU5xUXl4SlFVRkpMRU5CUVVNc1YwRkJWeXhIUVVGSExFVkJRVVVzUTBGQlF5eFhRVUZYTEVOQlFVTXNVVUZCVVN4RlFVRkZMRzFDUVVGdFFpeERRVUZETEVsQlFVa3NSVUZEYkVVc1NVRkJTU3hEUVVGRExFOUJRVThzUlVGQlJTeEhRVUZITEVWQlFVVTdXVUZEYWtJc1NVRkJTU3hqUVVGak8yZENRVU5vUWl4SlFVRkpMRU5CUVVNc01FSkJRVEJDTEVOQlFVTXNTVUZCU1N4RFFVRkRMR2xDUVVGcFFpeEZRVUZGTEVsQlFVa3NRMEZCUXl4aFFVRmhMRU5CUVVNc1NVRkJTU3hEUVVGRExGZEJRVmNzUTBGQlF5eExRVUZOTEVOQlFVTXNRMEZCUXl4RFFVRkRPMUZCUTNwSExFTkJRVU1zUTBGQlF5eERRVUZETzFGQlEwd3NTVUZCU1N4RFFVRkRMR3RDUVVGclFpeEhRVUZITEVWQlFVVXNRMEZCUXl4TFFVRkxMRU5CUVVNc1VVRkJVU3hEUVVGRExFZEJRVVVzUlVGQlJUdFpRVU01UXl4alFVRmpMRWRCUVVjc1EwRkJReXhqUVVGakxFTkJRVU03V1VGRGFrTXNTVUZCU1N4RFFVRkRMR05CUVdNN1owSkJRMnBDTEVWQlFVVXNRMEZCUXl4TFFVRkxMRU5CUVVNc1NVRkJTU3hEUVVGRExHbENRVUZwUWl4RFFVRkRMRU5CUVVNN08yZENRVVZxUXl4SlFVRkpMRU5CUVVNc01FSkJRVEJDTEVOQlFVTXNTVUZCU1N4RFFVRkRMR2xDUVVGcFFpeEZRVUZGTEVsQlFVa3NRMEZCUXl4aFFVRmhMRU5CUVVNc1NVRkJTU3hEUVVGRExGZEJRVmNzUTBGQlF5eExRVUZOTEVOQlFVTXNRMEZCUXl4RFFVRkRPMUZCUTNwSExFTkJRVU1zUlVGQlJTd3lRa0ZCTWtJc1EwRkJReXhEUVVGRE8xRkJRMmhETEVsQlFVa3NRMEZCUXl4clFrRkJhMElzUjBGQlJ5eEZRVUZGTEVOQlFVTXNTMEZCU3l4RFFVRkRMRkZCUVZFc1EwRkJReXhIUVVGRkxFVkJRVVU3V1VGRE9VTXNiMEpCUVc5Q0xFZEJRVWNzUTBGQlF5eHZRa0ZCYjBJc1EwRkJRenRaUVVNM1F5eEpRVUZKTEVOQlFVTXNiMEpCUVc5Q08yZENRVU4yUWl4RlFVRkZMRU5CUVVNc1MwRkJTeXhEUVVGRExFbEJRVWtzUTBGQlF5eHBRa0ZCYVVJc1EwRkJReXhEUVVGRE96dG5Ra0ZGYWtNc1NVRkJTU3hEUVVGRExEQkNRVUV3UWl4RFFVRkRMRWxCUVVrc1EwRkJReXhwUWtGQmFVSXNSVUZCUlN4SlFVRkpMRU5CUVVNc1dVRkJXU3hEUVVGRExFTkJRVU03VVVGREwwVXNRMEZCUXl4RlFVRkZMRGhDUVVFNFFpeERRVUZETEVOQlFVTTdVVUZEYmtNc1NVRkJTU3hEUVVGRExITkNRVUZ6UWl4RFFVRkRMRk5CUVZNc1EwRkJReXhIUVVGSExFTkJRVU1zYVVOQlFXbERMRU5CUVVNc1EwRkJRenRSUVVNM1JTeEpRVUZKTEVOQlFVTXNjMEpCUVhOQ0xFTkJRVU1zU1VGQlNTeERRVUZETEU5QlFVOHNRMEZCUXl4SlFVRkpMRU5CUVVNc2EwSkJRV3RDTEVOQlFVTXNRMEZCUXp0UlFVTnNSU3hKUVVGSkxFTkJRVU1zVjBGQlZ5eERRVUZETEVsQlFVa3NRMEZCUXl4VFFVRlRMRU5CUVVNc1IwRkJSeXhEUVVGRExHbERRVUZwUXl4RFFVRkRMRU5CUVVNN1VVRkRka1VzU1VGQlNTeERRVUZETEZkQlFWY3NRMEZCUXl4SlFVRkpMRU5CUVVNc1QwRkJUeXhEUVVGRExFbEJRVWtzUTBGQlF5eHJRa0ZCYTBJc1EwRkJReXhEUVVGRE8xRkJRM1pFTEVsQlFVa3NRMEZCUXl4cFFrRkJhVUlzUjBGQlJ5eEZRVUZGTEVOQlFVTXNUVUZCVFN4RFFVRkRMRVZCUVVVc1EwRkJReXhEUVVGRE8xRkJRM1pETEUxQlFVMHNVMEZCVXl4SFFVRkhMRWxCUVVrc1EwRkJReXhyUWtGQmEwSXNRMEZCUXl4SlFVRkpMRU5CUVVNc1VVRkJVU3hEUVVGRExFdEJRVTBzUTBGQlF5eEpRVUZKTEVOQlFVTXNRMEZCUXp0UlFVVnlSU3hKUVVGSkxFTkJRVU1zTUVKQlFUQkNMRWRCUVVjc1JVRkJSU3hEUVVGRExGZEJRVmNzUTBGQlF5eHRRa0ZCYlVJc1JVRkJSU3hUUVVGVExFTkJRVU1zUTBGQlF5eERRVUZETEVWQlFVVXNVMEZCVXl4RlFVRkZMRWRCUVVjc1JVRkJSVHRaUVVOc1J5eEpRVUZKTEVOQlFVTXNPRUpCUVRoQ0xFVkJRVVVzUTBGQlF6dFJRVU40UXl4RFFVRkRMRU5CUVVNc1EwRkJRenRSUVVOSUxFbEJRVWtzVDBGQlR5eEhRVUZITEV0QlFVc3NRMEZCUXp0UlFVTndRaXhKUVVGSkxFTkJRVU1zU1VGQlNTeERRVUZETERoQ1FVRTRRaXhGUVVGRk8xbEJRM2hETEVsQlFVa3NRMEZCUXl3NFFrRkJPRUlzUjBGQlJ5eEpRVUZKTEVOQlFVTXNNRUpCUVRCQ0xFTkJRVU1zU1VGQlNTeERRVUZETzFsQlF6TkZMRTlCUVU4c1IwRkJSeXhKUVVGSkxFTkJRVU03VTBGRGFFSTdVVUZEUkN4SlFVRkpMRU5CUVVNc1QwRkJUeXhGUVVGRk8xbEJRMW9zUlVGQlJTeERRVUZETEV0QlFVc3NRMEZCUXl4SlFVRkpMRU5CUVVNc09FSkJRVGhDTEVOQlFVTXNRMEZCUXp0WlFVTTVReXhMUVVGTExFTkJRVU1zU1VGQlNTeERRVUZETEVsQlFVa3NRMEZCUXl3d1FrRkJNRUlzUTBGQlF5eEpRVUZKTEVOQlFVTXNVVUZCVVN4RFFVRkRPMmxDUVVOMFJDeFBRVUZQTEVOQlFVTXNRMEZCUXl4TFFVRkxMRVZCUVVVc1JVRkJSU3hEUVVGRExFbEJRVWtzUTBGQlF5dzRRa0ZCSzBJc1EwRkJReXhOUVVGTkxFTkJRVU1zUzBGQlN5eERRVUZETEVOQlFVTXNRMEZCUXp0VFFVTXpSVHRSUVVORUxFbEJRVWtzUTBGQlF5dzRRa0ZCT0VJc1EwRkJReXhUUVVGVExFTkJRVU1zUjBGQlJ5eERRVUZETEdsRFFVRnBReXhEUVVGRExFTkJRVU03VVVGRGNrWXNTVUZCU1N3eVFrRkJNa0lzUjBGQlJ5eExRVUZMTEVOQlFVTTdVVUZEZUVNc1NVRkJTU3hEUVVGRExEWkNRVUUyUWl4SFFVRkhMRVZCUVVVc1EwRkJReXhMUVVGTExFTkJRVU1zVVVGQlVTeERRVUZETEV0QlFVc3NTVUZCUnl4RlFVRkZPMWxCUXk5RUxFbEJRVWtzUTBGQlF5d3lRa0ZCTWtJc1JVRkJSVHRuUWtGRGFFTXNUVUZCVFN4SlFVRkpMRU5CUVVNc1owTkJRV2RETEVOQlEzcERMRWxCUVVrc1EwRkJReXcwUWtGQk5FSXNSVUZCUlN4SlFVRkpMRU5CUVVNc2EwSkJRV3RDTEVOQlFVTXNTVUZCU1N4RFFVRkRMREJDUVVFd1FpeERRVUZETEV0QlFVMHNRMEZCUXl4RFFVRkRMRWxCUVVrc1EwRkJReXhEUVVGRE8yRkJRelZITzJsQ1FVRk5PMmRDUVVGRkxFVkJRVVVzUTBGQlF5eExRVUZMTEVOQlFVTXNTVUZCU1N4RFFVRkRMRFJDUVVFMFFpeERRVUZETEVOQlFVTTdZVUZCUlR0WlFVTjJSQ3d5UWtGQk1rSXNSMEZCUnl4RFFVRkRMREpDUVVFeVFpeERRVUZETzFGQlF6ZEVMRU5CUVVNc1JVRkJSU3h4UTBGQmNVTXNRMEZCUXl4RFFVRkRPMUZCUXpGRExFbEJRVWtzUTBGQlF5dzRRa0ZCT0VJc1EwRkJReXhQUVVGUExFTkJRVU1zU1VGQlNTeERRVUZETERaQ1FVRTJRaXhEUVVGRExFTkJRVU03VVVGRmFFWXNTVUZCU1N4RFFVRkRMSEZDUVVGeFFpeEhRVUZITEVWQlFVVXNRMEZCUXl4WFFVRlhMRU5CUVVNc1dVRkJXU3hGUVVGRkxFVkJRVVVzUlVGQlJTeEZRVUZGTEVWQlFVVXNTVUZCU1N4RFFVRkRMRU5CUVVNN1VVRkRlRVVzU1VGQlNTeERRVUZETEhGQ1FVRnhRaXhEUVVGRExGRkJRVkVzUjBGQlJ5eExRVUZMTEVOQlFVTTdVVUZETlVNc1NVRkJTU3hEUVVGRExFbEJRVWtzUTBGQlF5eDVRa0ZCZVVJN1dVRkRha01zU1VGQlNTeERRVUZETEhsQ1FVRjVRaXhIUVVGSExFbEJRVWtzUTBGQlF5eHhRa0ZCY1VJc1EwRkJReXhKUVVGSkxFTkJRVU03VVVGRGJrVXNTVUZCU1N4RFFVRkRMRGhDUVVFNFFpeEZRVUZGTEVOQlFVTTdTVUZEZUVNc1EwRkJRenRKUVVWUExGZEJRVmM3VVVGRGFrSXNUVUZCVFN4dlFrRkJiMElzUjBGQlJ5eEpRVUZKTEVOQlFVTXNWVUZCVlN4RFFVRkRMRXRCUVVzc1JVRkJSU3hQUVVGUExFTkJRVU1zVFVGQlRTeEZRVUZGTzJGQlEycEZMRWxCUVVrc1EwRkJReXhEUVVGRExFZEJRVWNzUlVGQlJTeEZRVUZGTEVOQlFVTXNRMEZCUXl4RFFVRkRMRWxCUVVrc1EwRkJReXhyUWtGQmEwSXNRMEZCUXl4SFFVRkhMRU5CUVVNc1NVRkJTU3hEUVVGRExFTkJRVU1zU1VGQlNTeEpRVUZKTEVOQlFVTTdVVUZET1VRc1RVRkJUU3hMUVVGTExFZEJRVWNzUlVGQlJTeERRVUZETEZkQlFWY3NRMEZCUXl4UlFVRlJMRVZCUVVVc1NVRkJTU3hEUVVGRExGVkJRVlVzUTBGQlF5eExRVUZOTEVWQlFVVXNiMEpCUVc5Q0xFVkJRMnBHTEVkQlFVY3NSVUZCUlN4RFFVRkRMRWxCUVVrc1EwRkJReXh2UWtGQmIwSXNSVUZCUlN4RlFVRkZMRVZCUVVNc1RVRkJUU3hGUVVGRkxFTkJRVU1zUjBGQll5eEZRVUZGTEVWQlFVVXNRMEZCUXl4RFFVRkRMRU5CUVVNc1NVRkJTU3hEUVVGRExHdENRVUZyUWl4RFFVRkRMRWRCUVVjc1EwRkJReXhKUVVGSkxFTkJRVU1zUlVGQlF5eERRVUZETEVOQlFVTTdVVUZEZUVjc1NVRkJTU3hEUVVGRExFbEJRVWtzUTBGQlF5eFpRVUZaTzFsQlEzQkNMRWxCUVVrc1EwRkJReXhaUVVGWkxFZEJRVWNzUzBGQlN5eERRVUZETEVsQlFVa3NRMEZCUXp0UlFVTnFReXhQUVVGUExFdEJRVXNzUTBGQlF6dEpRVU5tTEVOQlFVTTdTVUZGVHl4clFrRkJhMEk3VVVGRGVFSXNTVUZCU1N4SlFVRkpMRWRCUVVjc1MwRkJTeXhEUVVGRE8xRkJRMnBDTEVsQlFVa3NTVUZCU1N4RFFVRkRMRmxCUVZrc1JVRkJSVHRaUVVOeVFpeEpRVUZKTEVkQlFVY3NTVUZCU1N4RFFVRkRPMWxCUTFvc1JVRkJSU3hEUVVGRExFdEJRVXNzUTBGQlF5eEpRVUZKTEVOQlFVTXNXVUZCV1N4RFFVRkRMRU5CUVVNN1UwRkROMEk3VVVGRFJDeEpRVUZKTEVOQlFVTXNVVUZCVVN4SFFVRkhMRWxCUVVrc1EwRkJReXhYUVVGWExFVkJRVVVzUTBGQlF6dFJRVU51UXl4SlFVRkpMRWxCUVVrN1dVRkRUaXhMUVVGTExFTkJRVU1zU1VGQlNTeERRVUZETEVsQlFVa3NRMEZCUXl4UlFVRlJMRU5CUVVNc1NVRkJTU3hEUVVGRExGRkJRVkVzUTBGQlF5eERRVUZETEU5QlFVOHNRMEZCUXl4RFFVRkRMRXRCUVVzc1JVRkJSU3hGUVVGRkxFTkJRVU1zU1VGQlNTeERRVUZETEZsQlFWa3NRMEZCUXl4TlFVRk5MRU5CUVVNc1MwRkJTeXhEUVVGRExFTkJRVU1zUTBGQlF6dFJRVU01Uml4SlFVRkpMRU5CUVVNc2IwSkJRVzlDTEVWQlFVVXNRMEZCUXp0SlFVTTVRaXhEUVVGRE8wbEJSVVFzYlVKQlFXMUNPMUZCUTJwQ0xFMUJRVTBzUzBGQlN5eEhRVUZITEVsQlFVa3NRMEZCUXl4VlFVRlZMRU5CUVVNc1MwRkJTeXhEUVVGRE8xRkJRM0JETEVsQlFVa3NRMEZCUXl4TFFVRkxPMWxCUTFJc1QwRkJUenRSUVVOVUxFbEJRVWtzUTBGQlF5eHJRa0ZCYTBJc1IwRkJSeXhGUVVGRkxFTkJRVU03VVVGRE4wSXNUVUZCVFN4UFFVRlBMRWRCUVVjc1MwRkJTeXhEUVVGRExFOUJRVThzUTBGQlF5eE5RVUZOTEVWQlFVVXNRMEZCUXp0UlFVTjJReXhQUVVGUExFTkJRVU1zVDBGQlR5eERRVUZETEVOQlFVTXNSMEZCUnl4RlFVRkZMRVZCUVVVN1dVRkRkRUlzVFVGQlRTeERRVUZETEVsQlFVa3NRMEZCUXl4SlFVRkpMRU5CUVVNc2EwSkJRV3RDTEVOQlFVTXNRMEZCUXl4UFFVRlBMRU5CUVVNc1EwRkJReXhSUVVGUkxFVkJRVVVzUlVGQlJUdG5Ra0ZEZUVRc1RVRkJUU3hSUVVGUkxFZEJRVWNzU1VGQlNTeERRVUZETEd0Q1FVRnJRaXhEUVVGRExGRkJRVkVzUTBGQlF5eERRVUZETEZGQlFWRXNRMEZCUXp0blFrRkROVVFzVFVGQlRTeExRVUZMTEVkQlFVY3NTVUZCU1N4RFFVRkRMR3RDUVVGclFpeERRVUZETEZGQlFWRXNRMEZCUXl4RFFVRkRMRXRCUVVzc1EwRkJRenRuUWtGRGRFUXNUVUZCVFN4TFFVRkxMRWRCUVVjc1NVRkJTU3hEUVVGRExHdENRVUZyUWl4RFFVRkRMRkZCUVZFc1EwRkJReXhEUVVGRExFdEJRVXNzUTBGQlF6dG5Ra0ZEZEVRc1RVRkJUU3huUWtGQlowSXNSMEZCUnl4RFFVRkRMRkZCUVZFc1EwRkJReXhOUVVGTkxFbEJRVWtzUTBGQlF5eEhRVUZITEVOQlFVTXNUMEZCVHl4SlFVRkpMRkZCUVZFc1EwRkJReXhSUVVGUkxFTkJRVU1zUjBGQlJ5eERRVUZETEU5QlFVOHNRMEZCUXl4RFFVRkRMRU5CUVVNN1owSkJRemRHTEUxQlFVMHNXVUZCV1N4SFFVRkhMRU5CUVVNc1MwRkJTeXhEUVVGRExFMUJRVTBzU1VGQlNTeExRVUZMTEVOQlFVTXNVVUZCVVN4RFFVRkRMRWRCUVVjc1EwRkJReXhKUVVGSkxFTkJRVU1zUTBGQlF6dG5Ra0ZETDBRc1RVRkJUU3hqUVVGakxFZEJRVWNzUTBGQlF5eExRVUZMTEVOQlFVTXNUVUZCVFR0dlFrRkRiRU1zUTBGQlF5eEhRVUZITEVOQlFVTXNUVUZCVFN4RFFVRkRMRVZCUVVVc1EwRkJReXhKUVVGSkxFTkJRVU1zUzBGQlN5eERRVUZETEVsQlFVa3NTMEZCU3l4RFFVRkRMRkZCUVZFc1EwRkJReXhIUVVGSExFTkJRVU1zVFVGQlRTeERRVUZETEVWQlFVVXNRMEZCUXl4SlFVRkpMRU5CUVVNc1MwRkJTeXhEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETzJkQ1FVTXpSU3hKUVVGSkxHZENRVUZuUWl4SlFVRkpMRmxCUVZrc1NVRkJTU3hqUVVGakxFVkJRVVU3YjBKQlEzUkVMRWxCUVVrc1EwRkJReXhKUVVGSkxFTkJRVU1zYTBKQlFXdENMRU5CUVVNc1IwRkJSeXhEUVVGRExFbEJRVWtzUTBGQlF6dDNRa0ZEY0VNc1NVRkJTU3hEUVVGRExHdENRVUZyUWl4RFFVRkRMRWRCUVVjc1EwRkJReXhKUVVGSkxFTkJRVU1zUjBGQlJ5eEZRVUZGTEVOQlFVTTdiMEpCUTNwRExFbEJRVWtzUTBGQlF5eHJRa0ZCYTBJc1EwRkJReXhIUVVGSExFTkJRVU1zU1VGQlNTeERRVUZETEVOQlFVTXNTVUZCU1N4RFFVRkRMRkZCUVZFc1EwRkJReXhEUVVGRE8ybENRVU5zUkR0WlFVTklMRU5CUVVNc1EwRkJReXhEUVVGRE8xRkJRMHdzUTBGQlF5eERRVUZETEVOQlFVTTdVVUZEU0N4SlFVRkpMRU5CUVVNc2EwSkJRV3RDTEVWQlFVVXNRMEZCUXp0SlFVTTFRaXhEUVVGRE8wbEJSVThzYjBKQlFXOUNPMUZCUXpGQ0xFMUJRVTBzUjBGQlJ5eEhRVUZITEVsQlFVa3NRMEZCUXl4UlFVRlJMRU5CUVVNc1MwRkJTeXhEUVVGRE8xRkJRMmhETEVsQlFVa3NRMEZCUXl4SFFVRkhPMWxCUTA0c1QwRkJUenRSUVVOVUxFMUJRVTBzSzBKQlFTdENMRWRCUVVjc1NVRkJTU3hEUVVGRExHdENRVUZyUWl4RFFVRkRMRWRCUVVjc1EwRkJReXhKUVVGSkxFTkJRVU1zUTBGQlF6dFJRVU14UlN4SlFVRkpMRU5CUVVNc01FSkJRVEJDTEVkQlFVY3NSVUZCUlN4RFFVRkRMRmRCUVZjc1EwRkJReXgzUWtGQmQwSXNSVUZEZGtVc0swSkJRU3RDTEVOQlFVTXNRMEZCUXl4RFFVRkRMRVZCUVVVc0swSkJRU3RDTEVWQlFVVXNSMEZCUnl4RlFVRkZPMWxCUTNoRkxFbEJRVWtzUTBGQlF5dzRRa0ZCT0VJc1JVRkJSU3hEUVVGRE8xRkJRM2hETEVOQlFVTXNRMEZCUXl4RFFVRkRPMUZCUTB3c1NVRkJTU3hKUVVGSkxFZEJRVWNzUzBGQlN5eERRVUZETzFGQlEycENMRWxCUVVrc1EwRkJReXhKUVVGSkxFTkJRVU1zT0VKQlFUaENMRVZCUVVVN1dVRkRlRU1zU1VGQlNTeERRVUZETERoQ1FVRTRRaXhIUVVGSExFbEJRVWtzUTBGQlF5d3dRa0ZCTUVJc1EwRkJReXhKUVVGSkxFTkJRVU03V1VGRE0wVXNTVUZCU1N4SFFVRkhMRWxCUVVrc1EwRkJRenRUUVVOaU8xRkJRMFFzU1VGQlNTeERRVUZETEVsQlFVa3NSVUZCUlR0WlFVTlVMRVZCUVVVc1EwRkJReXhMUVVGTExFTkJRVU1zU1VGQlNTeERRVUZETERoQ1FVRTRRaXhEUVVGRExFTkJRVU03V1VGRE9VTXNTMEZCU3l4RFFVRkRMRWxCUVVrc1EwRkJReXhKUVVGSkxFTkJRVU1zTUVKQlFUQkNMRU5CUVVNc1NVRkJTU3hEUVVGRExGRkJRVkVzUTBGQlF6dHBRa0ZEZEVRc1QwRkJUeXhEUVVGRExFTkJRVU1zUzBGQlN5eEZRVUZGTEVWQlFVVXNRMEZCUXl4SlFVRkpMRU5CUVVNc09FSkJRU3RDTEVOQlFVTXNUVUZCVFN4RFFVRkRMRXRCUVVzc1EwRkJReXhEUVVGRExFTkJRVU03VTBGRE0wVTdVVUZEUkN4SlFVRkpMRU5CUVVNc09FSkJRVGhDTEVWQlFVVXNRMEZCUXp0SlFVTjRReXhEUVVGRE8wbEJSVThzT0VKQlFUaENPMUZCUTNCRExFVkJRVVVzUTBGQlF5eExRVUZMTEVOQlFVTXNTVUZCU1N4RFFVRkRMRFJDUVVFMFFpeERRVUZETEVOQlFVTTdVVUZETlVNc1NVRkJTU3hEUVVGRExEWkNRVUUyUWl4SFFVRkhMRVZCUVVVc1EwRkJRenRSUVVONFF5eE5RVUZOTEV0QlFVc3NSMEZCUnl4SlFVRkpMRU5CUVVNc01FSkJRVEJDTEVOQlFVTXNTMEZCVFN4RFFVRkRPMUZCUTNKRUxFMUJRVTBzVlVGQlZTeEhRVUZITEVsQlFVa3NRMEZCUXl4clFrRkJhMElzUTBGQlF5eExRVUZMTEVOQlFVTXNRMEZCUXl4cFFrRkJhVUlzUTBGQlF6dFJRVU53UlN4SlFVRkpMRU5CUVVNc1owSkJRV2RDTEVkQlFVY3NRMEZCUXl4SFFVRkhMRlZCUVZVc1EwRkJReXhEUVVGRE8xRkJRM2hETEVsQlFVa3NRMEZCUXl4eFFrRkJjVUlzUjBGQlJ5eEZRVUZGTEVOQlFVTXNWMEZCVnl4RFFVRkRMRmxCUVZrc1JVRkJSU3hKUVVGSkxFTkJRVU1zWjBKQlFXZENMRU5CUVVNc1EwRkJReXhEUVVGRExFVkJRVVVzU1VGQlNTeERRVUZETEdkQ1FVRm5RaXhGUVVGRkxFbEJRVWtzUTBGQlF5eERRVUZETzFGQlEycElMRWxCUVVrc1EwRkJReXh4UWtGQmNVSXNRMEZCUXl4UlFVRlJMRWRCUVVjc1MwRkJTeXhEUVVGRE8xRkJRelZETEVsQlFVa3NRMEZCUXl4SlFVRkpMRU5CUVVNc2VVSkJRWGxDTzFsQlEycERMRWxCUVVrc1EwRkJReXg1UWtGQmVVSXNSMEZCUnl4SlFVRkpMRU5CUVVNc2NVSkJRWEZDTEVOQlFVTXNTVUZCU1N4RFFVRkRPMUZCUlc1RkxFVkJRVVVzUTBGQlF5eExRVUZMTEVOQlFVTXNTVUZCU1N4RFFVRkRMSGxDUVVGNVFpeERRVUZETEVOQlFVTTdVVUZEZWtNc1MwRkJTeXhEUVVGRExFbEJRVWtzUTBGQlF5eEpRVUZKTEVOQlFVTXNjVUpCUVhGQ0xFTkJRVU1zU1VGQlNTeERRVUZETEZGQlFWRXNRMEZCUXp0aFFVTnFSQ3hQUVVGUExFTkJRVU1zUTBGQlF5eExRVUZMTEVWQlFVVXNSVUZCUlN4RFFVRkRMRWxCUVVrc1EwRkJReXg1UWtGQmVVSXNRMEZCUXl4TlFVRk5MRU5CUVVNc1MwRkJTeXhEUVVGRExFTkJRVU1zUTBGQlF6dFJRVU53UlN4SlFVRkpMRWxCUVVrc1EwRkJReXcyUWtGQk5rSXNSVUZCUlR0WlFVTjBReXhKUVVGSkxFbEJRVWtzUTBGQlF5eHJRa0ZCYTBJc1EwRkJReXhMUVVGTExFTkJRVU1zUTBGQlF5eEpRVUZKTEVOQlFVTXNUVUZCVFN4RFFVRkRMRTFCUVUwc1IwRkJSeXhEUVVGRE8yZENRVU4yUkN4SlFVRkpMRU5CUVVNc05rSkJRVFpDTEVOQlFVTXNTMEZCU3l4RFFVRkRMRTlCUVU4c1IwRkJSeXhOUVVGTkxFTkJRVU03TzJkQ1FVVXhSQ3hKUVVGSkxFTkJRVU1zTmtKQlFUWkNMRU5CUVVNc1MwRkJTeXhEUVVGRExFOUJRVThzUjBGQlJ5eE5RVUZOTEVOQlFVTTdVMEZETjBRN1NVRkRTQ3hEUVVGRE8wbEJSVThzTUVKQlFUQkNMRU5CUTJoRExGVkJRWFZDTEVWQlFVVXNUVUZCYVVRN1VVRkRNVVVzUlVGQlJTeERRVUZETEV0QlFVc3NRMEZCUXl4VlFVRlZMRU5CUVVNc1EwRkJRenRSUVVOeVFpeE5RVUZOTEVOQlFVTXNTVUZCU1N4RFFVRkRMRTFCUVUwc1EwRkJReXhEUVVGRExFOUJRVThzUTBGQlF5eERRVUZETEVWQlFVOHNSVUZCUlN4RlFVRkZPMWxCUTNSRExFMUJRVTBzUzBGQlN5eEhRVU5TTEUxQlFXTXNRMEZCUXl4RlFVRkZMRU5CUVVNc1EwRkJRenRaUVVWMFFpeE5RVUZOTEV0QlFVc3NSMEZCUnl4TFFVRkxMRU5CUVVNc1NVRkJTU3hMUVVGTExGRkJRVkVzUTBGQlF5eERRVUZETzJkQ1FVTnlReXhGUVVGRkxFTkJRVU1zVjBGQlZ5eERRVUZETEV0QlFVc3NRMEZCUXl4TlFVRk5MRVZCUVVVc1MwRkJTeXhEUVVGRExFdEJRVXNzU1VGQlNTeEZRVUZGTEVWQlFVVXNSMEZCUnl4RlFVRkZPMjlDUVVOdVJDeExRVUZMTEVOQlFVTXNTMEZCU3l4SFFVRkpMRXRCUVRoQ0xFTkJRVU1zUzBGQlN5eERRVUZETzJkQ1FVTjBSQ3hEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTXNTMEZCU3l4RFFVRkRMRWxCUVVrc1MwRkJTeXhUUVVGVExFTkJRVU1zUTBGQlF6dG5Ra0ZETjBJc1JVRkJSU3hEUVVGRExGTkJRVk1zUTBGQlF5eExRVUZMTEVOQlFVTXNUVUZCVFN4RlFVRkZMRXRCUVVzc1EwRkJReXhMUVVGTExFbEJRVWtzUzBGQlN5eEZRVUZGTEVkQlFVY3NSVUZCUlR0dlFrRkRjRVFzUzBGQlN5eERRVUZETEV0QlFVc3NSMEZCU1N4TFFVRXJRaXhEUVVGRExFdEJRVXNzUTBGQlF6dG5Ra0ZEZGtRc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF6dG5Ra0ZEU2l4RlFVRkZMRU5CUVVNc1ZVRkJWU3hEUVVGRExFdEJRVXNzUTBGQlF5eE5RVUZOTEVWQlFVVXNTMEZCU3l4RFFVRkRMRXRCUVZrc1JVRkJSU3hIUVVGSExFVkJRVVU3YjBKQlEyNUVMRXRCUVVzc1EwRkJReXhMUVVGTExFZEJRVWNzUzBGQlN5eERRVUZETEV0QlFVc3NRMEZCUXp0blFrRkROVUlzUTBGQlF5eERRVUZETEVOQlFVTTdXVUZEVUN4VlFVRlZMRU5CUVVNc1RVRkJUU3hEUVVGRExFdEJRVXNzUTBGQlF5eEpRVUZKTEVOQlFVTXNRMEZCUXp0WlFVTTVRaXhKUVVGSkxFdEJRVXNzUTBGQlF5eFBRVUZQTEVWQlFVVTdaMEpCUTJwQ0xFdEJRVXNzUTBGQlF5eFBRVUZQTEVkQlFVY3NTMEZCU3l4RFFVRkRPMmRDUVVOMFFpeEZRVUZGTEVOQlFVTXNUMEZCVHl4RFFVRkRMRWxCUVVrc1EwRkJReXhMUVVGTExFTkJRVU1zUzBGQlN5eEpRVUZKTEV0QlFVc3NRMEZCUXl4SlFVRkpMRVZCUVVVc1MwRkJTeXhEUVVGRExHTkJRV01zU1VGQlNTeEZRVUZGTEVOQlFVTXNRMEZCUXp0aFFVTjRSVHRwUWtGQlRUdG5Ra0ZCUlN4RlFVRkZMRU5CUVVNc1QwRkJUeXhEUVVGRExFbEJRVWtzUTBGQlF5eExRVUZMTEVOQlFVTXNTMEZCU3l4SlFVRkpMRXRCUVVzc1EwRkJReXhKUVVGSkxFVkJRVVVzUzBGQlN5eERRVUZETEU5QlFVOHNRMEZCUXl4RFFVRkRPMkZCUVVVN1VVRkRka1VzUTBGQlF5eERRVUZETEVOQlFVTTdVVUZEU0N4UFFVRlBMRlZCUVZVc1EwRkJRenRKUVVOd1FpeERRVUZETzBsQlJVOHNTMEZCU3l4RFFVRkRMR2REUVVGblF5eERRVUZETEZWQlFYVkNMRVZCUVVVc1NVRkJZVHRSUVVOdVJpeEZRVUZGTEVOQlFVTXNTMEZCU3l4RFFVRkRMRlZCUVZVc1EwRkJReXhEUVVGRE8xRkJRM0pDTEVsQlFVa3NTVUZCU1N4RFFVRkRMRTFCUVUwc1EwRkJReXhOUVVGTkxFZEJRVWNzUTBGQlF6dFpRVU40UWl4UFFVRlBMRVZCUVVVc1EwRkJReXhIUVVGSExFVkJRVVVzUTBGQlF6dFJRVU5zUWl4TlFVRk5MRVZCUVVVc1IwRkJSeXhKUVVGSkxFTkJRVU1zVDBGQlR5eEZRVUZGTEVOQlFVTTdVVUZETVVJc1RVRkJUU3hOUVVGTkxFZEJRVWNzVFVGQlRTeEZRVUZGTEVOQlFVTXNWMEZCVnl4RFFVRkRMRVZCUVVVc1EwRkJReXhIUVVGSExFVkJRVVVzUTBGQlF5eERRVUZETzFGQlF6bERMRXRCUVVzc1NVRkJTU3hEUVVGRExFZEJRVWNzUTBGQlF5eEZRVUZGTEVOQlFVTXNSMEZCUnl4SlFVRkpMRU5CUVVNc1RVRkJUU3hEUVVGRExFMUJRVTBzUlVGQlJTeERRVUZETEVWQlFVVXNSVUZCUlR0WlFVTXpReXhOUVVGTkxFMUJRVTBzUjBGQlJ5eEpRVUZKTEVOQlFVTXNUVUZCVFN4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRE8xbEJRemxDTEVsQlFVa3NTVUZCU1N4RFFVRkRMRFpDUVVFMlFpeERRVUZETEUxQlFVMHNRMEZCUXl4SlFVRkpMRU5CUVVNc1NVRkJTU3hGUVVGRkxFTkJRVU1zVjBGQlZ5eERRVUZETEVsQlFVa3NRMEZCUXl4TlFVRk5MRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU1zU1VGQlNTeERRVUZETEVOQlFVTXNTMEZCU3p0blFrRkROMFlzVFVGQlRTeERRVUZETEZsQlFWa3NSVUZCUlR0blFrRkRkRUlzU1VGQlNTeERRVUZETERaQ1FVRTJRaXhEUVVGRExFMUJRVTBzUTBGQlF5eEpRVUZKTEVOQlFVTTdiMEpCUXpkRExFbEJRVWtzUTBGQlF5dzJRa0ZCTmtJc1EwRkJReXhOUVVGTkxFTkJRVU1zU1VGQlNTeERRVUZETEVsQlFVa3NSVUZCUlN4RFFVRkRMRmRCUVZjc1EwRkJReXhOUVVGTkxFTkJRVU1zU1VGQlNTeERRVUZETEVOQlFVTXNTMEZCU3l4SlFVRkpMRTFCUVUwc1EwRkJReXhaUVVGWkxFTkJRVU03WVVGREwwYzdXVUZEUkN4TlFVRk5MRXRCUVVzc1IwRkJSeXhOUVVGTkxFTkJRVU1zU1VGQlNTeERRVUZETEVOQlFVTXNSMEZCUnl4RlFVRkZMRVZCUVVVc1EwRkJReXhIUVVGSExFTkJRVU1zVVVGQlVTeERRVUZETEVsQlFVa3NTMEZCU3l4TlFVRk5MRU5CUVVNc1NVRkJTU3hEUVVGRExFTkJRVU03V1VGRGRFVXNTVUZCU1N4RFFVRkRMRXRCUVVzN1owSkJRMUlzVTBGQlV6dFpRVU5ZTEVsQlFVa3NTVUZCU1N4RFFVRkRMRFpDUVVFMlFpeERRVUZETEUxQlFVMHNRMEZCUXl4SlFVRkpMRU5CUVVNc1MwRkJTeXhKUVVGSk8yZENRVU14UkN4SlFVRkpMRU5CUVVNc05rSkJRVFpDTEVOQlFVTXNUVUZCVFN4RFFVRkRMRWxCUVVrc1EwRkJReXhMUVVGTExGTkJRVk03WjBKQlF6ZEVMRXRCUVVzc1EwRkJReXhMUVVGTExFZEJRVWNzU1VGQlNTeERRVUZETERaQ1FVRTJRaXhEUVVGRExFMUJRVTBzUTBGQlF5eEpRVUZKTEVOQlFVTXNRMEZCUXp0WlFVTm9SU3hMUVVGTExFTkJRVU1zVTBGQlV5eERRVUZETEVkQlFVY3NSVUZCUlN4SFFVRkhMRWxCUVVrc1EwRkJReXcyUWtGQk5rSXNRMEZCUXl4TlFVRk5MRU5CUVVNc1NVRkJTU3hEUVVGRExFZEJRVWNzUzBGQlN5eERRVUZETEV0QlFVc3NRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRE8xbEJRekZHTEZWQlFWVXNRMEZCUXl4TlFVRk5MRU5CUVVNc1MwRkJTeXhEUVVGRExFbEJRVWtzUTBGQlF5eERRVUZETzFOQlF5OUNPMUZCUTBRc1QwRkJUeXhWUVVGVkxFTkJRVU03U1VGRGNFSXNRMEZCUXp0SlFVVk5MRk5CUVZNN1VVRkRaQ3hQUVVGUExFVkJRVVVzUTBGQlF5eEhRVUZITEVOQlFVTTdXVUZEV2l4SlFVRkpMRU5CUVVNc1ZVRkJWVHRaUVVObUxFbEJRVWtzUTBGQlF5eFpRVUZaTzFsQlEycENMRWxCUVVrc1EwRkJReXc0UWtGQk9FSTdXVUZEYmtNc1NVRkJTU3hEUVVGRExEUkNRVUUwUWp0WlFVTnFReXhKUVVGSkxFTkJRVU1zVjBGQlZ6dFpRVU5vUWl4SlFVRkpMRU5CUVVNc2FVSkJRV2xDTzFsQlEzUkNMRWxCUVVrc1EwRkJReXg1UWtGQmVVSTdXVUZET1VJc1NVRkJTU3hEUVVGRExHMUNRVUZ0UWp0WlFVTjRRaXhKUVVGSkxFTkJRVU1zYzBKQlFYTkNPMWxCUXpOQ0xFbEJRVWtzUTBGQlF5eHBRa0ZCYVVJN1UwRkRka0lzUlVGQlJTeEZRVUZETEV0QlFVc3NSVUZCUlN4RlFVRkRMRkZCUVZFc1JVRkJSU3hQUVVGUExFVkJRVU1zUlVGQlJTeFBRVUZQTEVWQlFVVXNVMEZCVXl4RlFVRkRMRU5CUVVNc1EwRkJRenRKUVVOMlJDeERRVUZETzBsQlJVMHNVMEZCVXp0UlFVTmtMRTlCUVU4N1dVRkRUQ3hMUVVGTExFVkJRVVVzU1VGQlNTeERRVUZETEZWQlFWVXNRMEZCUXl4TFFVRk5PMWxCUXpkQ0xFZEJRVWNzUlVGQlJTeEpRVUZKTEVOQlFVTXNVVUZCVVN4RFFVRkRMRXRCUVUwN1dVRkRla0lzVlVGQlZTeEZRVUZGTEVsQlFVa3NRMEZCUXl4WFFVRlhMRU5CUVVNc1MwRkJUVHRaUVVOdVF5eHhRa0ZCY1VJc1JVRkJSU3hKUVVGSkxFTkJRVU1zYTBKQlFXdENMRU5CUVVNc1NVRkJTU3hEUVVGRExEQkNRVUV3UWl4RFFVRkRMRXRCUVUwc1EwRkJReXhEUVVGRExFbEJRVWs3V1VGRE0wWXNaMEpCUVdkQ0xFVkJRVVVzU1VGQlNTeERRVUZETEhGQ1FVRnhRaXhEUVVGRExFdEJRVTA3V1VGRGJrUXNZMEZCWXl4RlFVRkZMRWxCUVVrc1EwRkJReXh0UWtGQmJVSXNRMEZCUXl4TFFVRk5PMWxCUXk5RExHbENRVUZwUWl4RlFVRkZMRWxCUVVrc1EwRkJReXh6UWtGQmMwSXNRMEZCUXl4TFFVRk5PMWxCUTNKRUxFOUJRVThzUlVGQlJTeEZRVUZETEVkQlFVY3NTVUZCU1N4RFFVRkRMR2RDUVVGblFpeEZRVUZGTEVkQlFVY3NTVUZCU1N4RFFVRkRMR0ZCUVdFN1owSkJRM1pFTEhGQ1FVRnhRaXhGUVVGRkxFTkJRVU1zU1VGQlNTeERRVUZETERaQ1FVRTJRaXhKUVVGSkxFVkJRVVVzUTBGQlF5eEZRVUZETzFOQlEzSkZMRU5CUVVNN1NVRkRTaXhEUVVGRE8wTkJRMG9pTENKemIzVnlZMlZ6UTI5dWRHVnVkQ0k2V3lKcGJYQnZjblFnS2lCaGN5Qm5jbTlySUdaeWIyMGdKMlJoZEdGbmNtOXJMV0Z3YVM5bmNtOXJKenRjYm1sdGNHOXlkQ0FxSUdGeklIVnBJR1p5YjIwZ0oyUmhkR0ZuY205ckxXRndhUzkxYVNjN1hHNXBiWEJ2Y25RZ0tpQmhjeUJFUnlCbWNtOXRJQ2RrWVhSaFozSnZheTFoY0drdlpHY25PMXh1YVcxd2IzSjBJSHRFU1UxZlVrVkVYMUJTUlZCU1QwTkZVMU5KVGtkZlJsVk9RMVJKVDA1ZlZFRkhMQ0JUVlZCUVQxSlVSVVJmUkVsVFZFRk9RMFZmUmxWT1ExUkpUMDVUWDFSQlJ5eGNiaUFnVTFWUVVFOVNWRVZFWDFORlRWUlpVRVZUWDFSQlJ5d2dVMVZRVUU5U1ZFVkVYMVJaVUVWVFgxUkJSeXdnVTFWUVVFOVNWRVZFWDFWT1NWUlRYMVJCUjMwZ1puSnZiU0FuTGk5amIyNXpkSE1uTzF4dWFXMXdiM0owSUh0SlJFSlRZMkZ1VDNCMGFXOXVjMzBnWm5KdmJTQW5RR1JoZEdGbmNtOXJMV3hwWW5KaGNtbGxjeTl0WVhSb0p6dGNibWx0Y0c5eWRDQjdUM0IwYVc5dWMzMGdabkp2YlNBblFHUmhkR0ZuY205ckxXeHBZbkpoY21sbGN5OTFkR2xzY3k5emNtTXZkSGx3WlMxa1pXTnNZWEpoZEdsdmJuTW5PMXh1YVcxd2IzSjBJSHRVVTA1RlQzQjBhVzl1Y3l3Z1ZVMUJVRTl3ZEdsdmJuTjlJR1p5YjIwZ0p5NHVMMjExYkhScExXTnZiSFZ0Ymkxa2FXMWxibk5wYjI1aGJHbDBlUzF5WldSMVkzUnBiMjR2YlhWc2RHa3RZMjlzZFcxdUxXUnBiUzF5WldSMVkzUnBiMjR0WldScGRHOXlKenRjYm1sdGNHOXlkQ0I3U1VScGJWSmxaSFZqZEdsdmJsQmhjbUZ0TENCSlZGTk9SVTl3ZEdsdmJuTXNJRWxWVFVGUVQzQjBhVzl1YzMxY2JpQWdabkp2YlNBbkxpNHZiWFZzZEdrdFkyOXNkVzF1TFdScGJXVnVjMmx2Ym1Gc2FYUjVMWEpsWkhWamRHbHZiaTl0ZFd4MGFTMWpiMngxYlc0dFpHbHRMWEpsWkhWalpYSW5PMXh1YVcxd2IzSjBJSHRFYVcxU1pXUjFZM1JwYjI1TlpYUm9iMlJ6ZlNCbWNtOXRJQ2N1TGk5dGRXeDBhUzFqYjJ4MWJXNHRaR2x0Wlc1emFXOXVZV3hwZEhrdGNtVmtkV04wYVc5dUwzUjVjR1Z6Snp0Y2JtbHRjRzl5ZENCN1RVTk1UV1YwYUc5a1RtRnRaWDBnWm5KdmJTQW5MaTR2VFVOTUp6dGNibHh1Wlhod2IzSjBJR052Ym5OMElGTkZVVjlEVDB4ZlRrRk5SVk1nUFNCN1hHNGdJRnRFUnk1VFJVMVVXVkJGTGsxUFRFVkRWVXhGWFRvZ0owMXZiR1ZqZFd4bGN5Y3NYRzRnSUZ0RVJ5NVRSVTFVV1ZCRkxrMUJRMUpQVFU5TVJVTlZURVZkT2lBblUyVnhkV1Z1WTJWekoxeHVmVHRjYmx4dVpYaHdiM0owSUhSNWNHVWdVSEpsY0hKdlkyVnpjMFoxYm1OMGFXOXVVbVYwZFhKdVZIbHdaU0E5SUh0Y2JpQWdJQ0JsYm5SeWFXVnpPaUJoYm5sYlhTeGNiaUFnSUNCdmNIUnBiMjV6UHpvZ2UxdGZPaUJ6ZEhKcGJtZGRPaUJoYm5sOVhHNTlPMXh1WEc1bGVIQnZjblFnZEhsd1pTQkVhVzFTWldSMVkzUnBiMjVGWkdsMGIzSlBjSFJwYjI1eklEMGdlMXh1SUNBZ0lITmxiWFI1Y0dVL09pQnpkSEpwYm1jc1hHNGdJQ0FnZEhsd1pUODZJSE4wY21sdVp5eGNiaUFnSUNCMWJtbDBjejg2SUhOMGNtbHVaeXhjYmlBZ0lDQmxibUZpYkdWTlEwdy9PaUJpYjI5c1pXRnVMRnh1ZlZ4dVhHNWxlSEJ2Y25RZ2RIbHdaU0JFYVcxU1pXUjFZM1JwYjI1UVlYSmhiWE1nUFNCN1hHNGdJQ0FnZEdGaWJHVTZJRVJITGtSaGRHRkdjbUZ0WlN4Y2JpQWdJQ0JqYjJ3NklFUkhMa052YkhWdGJpeGNiaUFnSUNCdFpYUm9iMlJPWVcxbE9pQnpkSEpwYm1jc1hHNGdJQ0FnY0hKbGNISnZZMlZ6YzJsdVowWjFibU4wYVc5dU9pQkVSeTVHZFc1akxGeHVJQ0FnSUhOcGJXbHNZWEpwZEhsTlpYUnlhV002SUhOMGNtbHVaeXhjYmlBZ0lDQndiRzkwUlcxaVpXUmthVzVuY3o4NklHSnZiMnhsWVc0c1hHNGdJQ0FnWTJ4MWMzUmxja1Z0WW1Wa1pHbHVaM00vT2lCaWIyOXNaV0Z1TEZ4dUlDQWdJRzl3ZEdsdmJuTTZJQ2hKVlUxQlVFOXdkR2x2Ym5NZ2ZDQkpWRk5PUlU5d2RHbHZibk1wSUNZZ1VHRnlkR2xoYkR4SlJFSlRZMkZ1VDNCMGFXOXVjejRnSmlCN2NISmxjSEp2WTJWemMybHVaMFoxYm1OQmNtZHpQem9nVDNCMGFXOXVjMzBnSmlCUGNIUnBiMjV6WEc1OU8xeHVYRzVsZUhCdmNuUWdZMnhoYzNNZ1JFSlRZMkZ1VDNCMGFXOXVjeUI3WEc0Z0lDQWdaWEJ6YVd4dmJqb2dTVVJwYlZKbFpIVmpkR2x2YmxCaGNtRnRJRDBnZTF4dUlDQWdJQ0FnZFdsT1lXMWxPaUFuUlhCemFXeHZiaWNzSUhaaGJIVmxPaUF3TGpBeExDQjBiMjlzZEdsd09pQW5UV2x1YVcxMWJTQmthWE4wWVc1alpTQmlaWFIzWldWdUlHTnNkWE4wWlhJZ2NHOXBiblJ6Snl3Z2JXbHVPaUF3TENCdFlYZzZJRElzSUhOMFpYQTZJREF1TURBMWZUdGNiaUFnSUNCdGFXNVFkSE02SUVsRWFXMVNaV1IxWTNScGIyNVFZWEpoYlNBOUlIdGNiaUFnSUNBZ0lIVnBUbUZ0WlRvZ0owMXBibWx0ZFcwZ2NHOXBiblJ6Snl3Z2RtRnNkV1U2SURRc0lIUnZiMngwYVhBNklDZE5hVzVwYlhWdElHNTFiV0psY2lCdlppQndiMmx1ZEhNZ2FXNGdZMngxYzNSbGNpY3NJRzFwYmpvZ01Td2diV0Y0T2lBeE1EQXdMQ0J6ZEdWd09pQXhmVHRjYmx4dUlDQWdJR052Ym5OMGNuVmpkRzl5S0NrZ2UzMDdYRzU5WEc1bGVIQnZjblFnWTJ4aGMzTWdSR2x0VW1Wa2RXTjBhVzl1UW1GelpVVmthWFJ2Y2lCN1hHNGdJQ0FnWldScGRHOXlVMlYwZEdsdVozTTZJRVJwYlZKbFpIVmpkR2x2YmtWa2FYUnZjazl3ZEdsdmJuTWdQU0I3ZlR0Y2JpQWdJQ0IwWVdKc1pVbHVjSFYwT2lCRVJ5NUpibkIxZEVKaGMyVThSRWN1UkdGMFlVWnlZVzFsSUh3Z2JuVnNiRDQ3WEc0Z0lDQWdZMjlzU1c1d2RYUWhPaUJFUnk1SmJuQjFkRUpoYzJVOFJFY3VRMjlzZFcxdUlId2diblZzYkQ0N1hHNGdJQ0FnY0hKbGNISnZZMlZ6YzJsdVowWjFibU4wYVc5dVNXNXdkWFE2SUVSSExrbHVjSFYwUW1GelpUeHpkSEpwYm1jZ2ZDQnVkV3hzUGp0Y2JpQWdJQ0J3Ykc5MFJXMWlaV1JrYVc1bmMwbHVjSFYwSUQwZ2RXa3VZbTl2YkVsdWNIVjBLQ2RRYkc5MElHVnRZbVZrWkdsdVozTW5MQ0IwY25WbEtUdGNiaUFnSUNCamJIVnpkR1Z5UlcxaVpXUmthVzVuYzBsdWNIVjBJRDBnZFdrdVltOXZiRWx1Y0hWMEtDZERiSFZ6ZEdWeUlHVnRZbVZrWkdsdVozTW5MQ0IwY25WbEtUdGNiaUFnSUNCd2NtVndjbTlqWlhOemFXNW5SblZ1WTNScGIyNUpibkIxZEZKdmIzUTZJRWhVVFV4RmJHVnRaVzUwSUh3Z2JuVnNiQ0E5SUc1MWJHdzdYRzRnSUNBZ1kyOXNTVzV3ZFhSU2IyOTBJVG9nU0ZSTlRFVnNaVzFsYm5RN1hHNGdJQ0FnYldWMGFHOWtjem9nUkdsdFVtVmtkV04wYVc5dVRXVjBhRzlrYzF0ZElEMGdXMFJwYlZKbFpIVmpkR2x2YmsxbGRHaHZaSE11VlUxQlVDd2dSR2x0VW1Wa2RXTjBhVzl1VFdWMGFHOWtjeTVVWDFOT1JWMDdYRzRnSUNBZ2JXVjBhRzlrU1c1d2RYUTZJRVJITGtOb2IybGpaVWx1Y0hWMFBITjBjbWx1WnlCOElHNTFiR3crTzF4dUlDQWdJRzFsZEdodlpGTmxkSFJwYm1kelNXTnZiam9nU0ZSTlRFVnNaVzFsYm5RN1hHNGdJQ0FnWkdKVFkyRnVVMlYwZEdsdVozTkpZMjl1T2lCSVZFMU1SV3hsYldWdWREdGNiaUFnSUNCd2NtVndjbTlqWlhOemFXNW5SblZ1WTFObGRIUnBibWR6U1dOdmJqb2dTRlJOVEVWc1pXMWxiblE3WEc0Z0lDQWdZMjlzZFcxdVJuVnVZM1JwYjI1elRXRndPaUI3VzJ0bGVUb2djM1J5YVc1blhUb2djM1J5YVc1blcxMTlJRDBnZTMwN1hHNGdJQ0FnYzNWd2NHOXlkR1ZrUm5WdVkzUnBiMjV6T2lCN1cyNWhiV1U2SUhOMGNtbHVaMTA2SUh0Y2JpQWdJQ0FnSUNBZ1puVnVZem9nUkVjdVJuVnVZeXhjYmlBZ0lDQWdJQ0FnYzJWdFZIbHdaWE02SUhOMGNtbHVaMXRkTEZ4dUlDQWdJQ0FnSUNCMGVYQmxjem9nYzNSeWFXNW5XMTBzWEc0Z0lDQWdJQ0FnSUhWdWFYUnpPaUJ6ZEhKcGJtZGJYU3hjYmlBZ0lDQWdJQ0FnWkdsemRHRnVZMlZHZFc1amRHbHZibk02SUhOMGNtbHVaMXRkWEc0Z0lDQWdmWDBnUFNCN2ZUdGNiaUFnSUNCaGRtRnBiR0ZpYkdWTlpYUnlhV056T2lCemRISnBibWRiWFNBOUlGdGRPMXh1SUNBZ0lITnBiV2xzWVhKcGRIbE5aWFJ5YVdOSmJuQjFkRkp2YjNRaE9pQklWRTFNUld4bGJXVnVkRHRjYmlBZ0lDQnRaWFJvYjJSVFpYUjBhVzVuYzBScGRpQTlJSFZwTG1sdWNIVjBjeWhiWFNrN1hHNGdJQ0FnWkdKVFkyRnVVMlYwZEdsdVozTkVhWFlnUFNCMWFTNXBibkIxZEhNb1cxMHBPMXh1SUNBZ0lIQnlaWEJ5YjJObGMzTnBibWRHZFc1alUyVjBkR2x1WjNORWFYWWdQU0IxYVM1cGJuQjFkSE1vVzEwcE8xeHVJQ0FnSUhCeVpYQnliMk5sYzNOcGJtZEdkVzVqZEdsdmJsTmxkSFJwYm1kek9pQlBjSFJwYjI1eklEMGdlMzA3WEc0Z0lDQWdiV1YwYUc5a2MxQmhjbUZ0Y3pvZ2UxdHJaWGs2SUhOMGNtbHVaMTA2SUZWTlFWQlBjSFJwYjI1eklId2dWRk5PUlU5d2RHbHZibk45SUQwZ2UxeHVJQ0FnSUNBZ1cwUnBiVkpsWkhWamRHbHZiazFsZEdodlpITXVWVTFCVUYwNklHNWxkeUJWVFVGUVQzQjBhVzl1Y3lncExGeHVJQ0FnSUNBZ1cwUnBiVkpsWkhWamRHbHZiazFsZEdodlpITXVWRjlUVGtWZE9pQnVaWGNnVkZOT1JVOXdkR2x2Ym5Nb0tWeHVJQ0FnSUgwN1hHNGdJQ0FnWkdKVFkyRnVVR0Z5WVcxeklEMGdibVYzSUVSQ1UyTmhiazl3ZEdsdmJuTW9LVHRjYmlBZ0lDQnphVzFwYkdGeWFYUjVUV1YwY21salNXNXdkWFFoT2lCRVJ5NUpibkIxZEVKaGMyVThjM1J5YVc1bklId2diblZzYkQ0N1hHNGdJQ0FnWjJWMElHRnNaMjl5YVhSb2JVOXdkR2x2Ym5Nb0tUb2dLRWxWVFVGUVQzQjBhVzl1Y3lCOElFbFVVMDVGVDNCMGFXOXVjeWtnSmlCUGNIUnBiMjV6SUh0Y2JpQWdJQ0FnSUdOdmJuTjBJR0ZzWjI5eWFYUm9iVkJoY21GdGN6b2dWVTFCVUU5d2RHbHZibk1nZkNCVVUwNUZUM0IwYVc5dWN5QTlJSFJvYVhNdWJXVjBhRzlrYzFCaGNtRnRjMXQwYUdsekxtMWxkR2h2WkVsdWNIVjBMblpoYkhWbElWMDdYRzRnSUNBZ0lDQmpiMjV6ZENCdmNIUnBiMjV6T2lCaGJua2dQU0I3ZlR0Y2JpQWdJQ0FnSUU5aWFtVmpkQzVyWlhsektHRnNaMjl5YVhSb2JWQmhjbUZ0Y3lrdVptOXlSV0ZqYUNnb2EyVjVPaUJ6ZEhKcGJtY3BJRDArSUh0Y2JpQWdJQ0FnSUNBZ2FXWWdLQ2hoYkdkdmNtbDBhRzFRWVhKaGJYTWdZWE1nWVc1NUtWdHJaWGxkTG5aaGJIVmxJQ0U5SUc1MWJHd3BYRzRnSUNBZ0lDQWdJQ0FnYjNCMGFXOXVjMXRyWlhsZElEMGdLR0ZzWjI5eWFYUm9iVkJoY21GdGN5QmhjeUJoYm5rcFcydGxlVjB1ZG1Gc2RXVTdYRzRnSUNBZ0lDQjlLVHRjYmlBZ0lDQWdJSEpsZEhWeWJpQnZjSFJwYjI1ek8xeHVJQ0FnSUgxY2JseHVJQ0FnSUdkbGRDQmtZbE5qWVc1UGNIUnBiMjV6S0NrNklFbEVRbE5qWVc1UGNIUnBiMjV6SUh0Y2JpQWdJQ0FnSUhKbGRIVnliaUI3WEc0Z0lDQWdJQ0FnSUdSaVUyTmhia1Z3YzJsc2IyNDZJSFJvYVhNdVpHSlRZMkZ1VUdGeVlXMXpMbVZ3YzJsc2IyNHVkbUZzZFdVZ1B6OGdNQzR3TVN4Y2JpQWdJQ0FnSUNBZ1pHSlRZMkZ1VFdsdVVIUnpPaUIwYUdsekxtUmlVMk5oYmxCaGNtRnRjeTV0YVc1UWRITXVkbUZzZFdVZ1B6OGdORnh1SUNBZ0lDQWdmVHRjYmlBZ0lDQjlYRzVjYmlBZ0lDQmpiMjV6ZEhKMVkzUnZjaWhsWkdsMGIzSlRaWFIwYVc1bmN6b2dSR2x0VW1Wa2RXTjBhVzl1UldScGRHOXlUM0IwYVc5dWN5QTlJSHQ5S1NCN1hHNGdJQ0FnSUNCMGFHbHpMbVZrYVhSdmNsTmxkSFJwYm1keklEMGdaV1JwZEc5eVUyVjBkR2x1WjNNN1hHNGdJQ0FnSUNCcFppQW9kR2hwY3k1bFpHbDBiM0pUWlhSMGFXNW5jeTVsYm1GaWJHVk5RMHdwWEc0Z0lDQWdJQ0FnSUhSb2FYTXViV1YwYUc5a2N5NXdkWE5vS0UxRFRFMWxkR2h2WkU1aGJXVWdZWE1nWVc1NUtUdGNibHh1SUNBZ0lDQWdZMjl1YzNRZ2NISmxjRzl5WTJWemMybHVaMFoxYm1OeklEMGdSRWN1Um5WdVl5NW1hVzVrS0h0MFlXZHpPaUJiUkVsTlgxSkZSRjlRVWtWUVVrOURSVk5UU1U1SFgwWlZUa05VU1U5T1gxUkJSMTE5S1R0Y2JpQWdJQ0FnSUM4dklHMWhjQ0IwYUdGMElHTnZiblJoYVc1eklHRnNiQ0J3Y21Wd2NtOWpaWE56YVc1bklHWjFibU4wYVc5dWN5QmhibVFnZEdobGFYSWdiV1YwWVdSaGRHRmNiaUFnSUNBZ0lIQnlaWEJ2Y21ObGMzTnBibWRHZFc1amN5NW1iM0pGWVdOb0tDaG1LU0E5UGlCN1hHNGdJQ0FnSUNBZ0lHTnZibk4wSUhObGJWUjVjR1Z6T2lCemRISnBibWNnUFNCbUxtOXdkR2x2Ym5NdVoyVjBLRk5WVUZCUFVsUkZSRjlUUlUxVVdWQkZVMTlVUVVjcElEOC9JQ2NuTzF4dUlDQWdJQ0FnSUNCamIyNXpkQ0J1WVcxbElEMGdaaTVtY21sbGJtUnNlVTVoYldVZ1B6OGdaaTV1WVcxbE8xeHVJQ0FnSUNBZ0lDQmpiMjV6ZENCMGVYQmxjem9nYzNSeWFXNW5JRDBnWmk1dmNIUnBiMjV6TG1kbGRDaFRWVkJRVDFKVVJVUmZWRmxRUlZOZlZFRkhLU0EvUHlBbkp6dGNiaUFnSUNBZ0lDQWdZMjl1YzNRZ2RXNXBkSE02SUhOMGNtbHVaeUE5SUdZdWIzQjBhVzl1Y3k1blpYUW9VMVZRVUU5U1ZFVkVYMVZPU1ZSVFgxUkJSeWtnUHo4Z0p5YzdYRzRnSUNBZ0lDQWdJR052Ym5OMElHUnBjM1JoYm1ObFJuVnVZM1JwYjI1ek9pQnpkSEpwYm1jZ1BTQm1MbTl3ZEdsdmJuTXVaMlYwS0ZOVlVGQlBVbFJGUkY5RVNWTlVRVTVEUlY5R1ZVNURWRWxQVGxOZlZFRkhLU0EvUHlBbkp6dGNiaUFnSUNBZ0lDQWdhV1lnS0hSb2FYTXVaV1JwZEc5eVUyVjBkR2x1WjNNdWMyVnRkSGx3WlNBbUppQWhjMlZ0Vkhsd1pYTXVhVzVqYkhWa1pYTW9kR2hwY3k1bFpHbDBiM0pUWlhSMGFXNW5jeTV6WlcxMGVYQmxLU2xjYmlBZ0lDQWdJQ0FnSUNCeVpYUjFjbTQ3WEc0Z0lDQWdJQ0FnSUdsbUlDaDBhR2x6TG1Wa2FYUnZjbE5sZEhScGJtZHpMblI1Y0dVZ0ppWWdJWFI1Y0dWekxtbHVZMngxWkdWektIUm9hWE11WldScGRHOXlVMlYwZEdsdVozTXVkSGx3WlNrcFhHNGdJQ0FnSUNBZ0lDQWdjbVYwZFhKdU8xeHVJQ0FnSUNBZ0lDQnBaaUFvZEdocGN5NWxaR2wwYjNKVFpYUjBhVzVuY3k1MWJtbDBjeUFtSmlBaGRXNXBkSE11YVc1amJIVmtaWE1vZEdocGN5NWxaR2wwYjNKVFpYUjBhVzVuY3k1MWJtbDBjeWtwWEc0Z0lDQWdJQ0FnSUNBZ2NtVjBkWEp1TzF4dVhHNGdJQ0FnSUNBZ0lIUm9hWE11YzNWd2NHOXlkR1ZrUm5WdVkzUnBiMjV6VzI1aGJXVmRJRDBnZTF4dUlDQWdJQ0FnSUNBZ0lHWjFibU02SUdZc1hHNGdJQ0FnSUNBZ0lDQWdjMlZ0Vkhsd1pYTTZJSE5sYlZSNWNHVnpJRDhnYzJWdFZIbHdaWE11YzNCc2FYUW9KeXduS1NBNklGdGRMRnh1SUNBZ0lDQWdJQ0FnSUhSNWNHVnpPaUIwZVhCbGN5QS9JSFI1Y0dWekxuTndiR2wwS0Njc0p5a2dPaUJiWFN4Y2JpQWdJQ0FnSUNBZ0lDQjFibWwwY3pvZ2RXNXBkSE1nUHlCMWJtbDBjeTV6Y0d4cGRDZ25MQ2NwSURvZ1cxMHNYRzRnSUNBZ0lDQWdJQ0FnWkdsemRHRnVZMlZHZFc1amRHbHZibk02SUdScGMzUmhibU5sUm5WdVkzUnBiMjV6SUQ4Z1pHbHpkR0Z1WTJWR2RXNWpkR2x2Ym5NdWMzQnNhWFFvSnl3bktTQTZJRnRkTEZ4dUlDQWdJQ0FnSUNCOU8xeHVJQ0FnSUNBZ2ZTazdYRzVjYmlBZ0lDQWdJSFJvYVhNdWRHRmliR1ZKYm5CMWRDQTlJSFZwTG5SaFlteGxTVzV3ZFhRb0oxUmhZbXhsSnl3Z1ozSnZheTV6YUdWc2JDNTBkaTVrWVhSaFJuSmhiV1VzSUdkeWIyc3VjMmhsYkd3dWRHRmliR1Z6TENBb0tTQTlQaUI3WEc0Z0lDQWdJQ0FnSUhSb2FYTXViMjVVWVdKc1pVbHVjSFYwUTJoaGJtZGxaQ2dwTzF4dUlDQWdJQ0FnZlNrN1hHNGdJQ0FnSUNCMGFHbHpMbTl1VkdGaWJHVkpibkIxZEVOb1lXNW5aV1FvS1R0Y2JseHVJQ0FnSUNBZ2RHaHBjeTV5WldkbGJtVnlZWFJsUTI5c1NXNXdkWFFvS1R0Y2JpQWdJQ0FnSUhSb2FYTXViMjVEYjJ4MWJXNUpibkIxZEVOb1lXNW5aV1FvS1R0Y2JpQWdJQ0FnSUd4bGRDQnpaWFIwYVc1bmMwOXdaVzVsWkNBOUlHWmhiSE5sTzF4dUlDQWdJQ0FnYkdWMElHUmlVMk5oYmxObGRIUnBibWR6VDNCbGJtVmtJRDBnWm1Gc2MyVTdYRzRnSUNBZ0lDQjBhR2x6TG0xbGRHaHZaRWx1Y0hWMElEMGdkV2t1WTJodmFXTmxTVzV3ZFhRb0owMWxkR2h2WkNjc0lFUnBiVkpsWkhWamRHbHZiazFsZEdodlpITXVWVTFCVUN4Y2JpQWdJQ0FnSUNBZ2RHaHBjeTV0WlhSb2IyUnpMQ0FvS1NBOVBpQjdYRzRnSUNBZ0lDQWdJQ0FnYVdZZ0tITmxkSFJwYm1kelQzQmxibVZrS1Z4dUlDQWdJQ0FnSUNBZ0lDQWdkR2hwY3k1amNtVmhkR1ZCYkdkdmNtbDBhRzFUWlhSMGFXNW5jMFJwZGloMGFHbHpMbTFsZEdodlpGTmxkSFJwYm1kelJHbDJMQ0IwYUdsekxtMWxkR2h2WkhOUVlYSmhiWE5iZEdocGN5NXRaWFJvYjJSSmJuQjFkQzUyWVd4MVpTRmRLVHRjYmlBZ0lDQWdJQ0FnZlNrN1hHNGdJQ0FnSUNCMGFHbHpMbTFsZEdodlpGTmxkSFJwYm1kelNXTnZiaUE5SUhWcExtbGpiMjV6TG5ObGRIUnBibWR6S0NncFBUNGdlMXh1SUNBZ0lDQWdJQ0J6WlhSMGFXNW5jMDl3Wlc1bFpDQTlJQ0Z6WlhSMGFXNW5jMDl3Wlc1bFpEdGNiaUFnSUNBZ0lDQWdhV1lnS0NGelpYUjBhVzVuYzA5d1pXNWxaQ2xjYmlBZ0lDQWdJQ0FnSUNCMWFTNWxiWEIwZVNoMGFHbHpMbTFsZEdodlpGTmxkSFJwYm1kelJHbDJLVHRjYmlBZ0lDQWdJQ0FnWld4elpWeHVJQ0FnSUNBZ0lDQWdJSFJvYVhNdVkzSmxZWFJsUVd4bmIzSnBkR2h0VTJWMGRHbHVaM05FYVhZb2RHaHBjeTV0WlhSb2IyUlRaWFIwYVc1bmMwUnBkaXdnZEdocGN5NXRaWFJvYjJSelVHRnlZVzF6VzNSb2FYTXViV1YwYUc5a1NXNXdkWFF1ZG1Gc2RXVWhYU2s3WEc0Z0lDQWdJQ0I5TENBblRXOWthV1o1SUcxbGRHaHZaSE1nY0dGeVlXMWxkR1Z5Y3ljcE8xeHVJQ0FnSUNBZ2RHaHBjeTVrWWxOallXNVRaWFIwYVc1bmMwbGpiMjRnUFNCMWFTNXBZMjl1Y3k1elpYUjBhVzVuY3lnb0tUMCtJSHRjYmlBZ0lDQWdJQ0FnWkdKVFkyRnVVMlYwZEdsdVozTlBjR1Z1WldRZ1BTQWhaR0pUWTJGdVUyVjBkR2x1WjNOUGNHVnVaV1E3WEc0Z0lDQWdJQ0FnSUdsbUlDZ2haR0pUWTJGdVUyVjBkR2x1WjNOUGNHVnVaV1FwWEc0Z0lDQWdJQ0FnSUNBZ2RXa3VaVzF3ZEhrb2RHaHBjeTVrWWxOallXNVRaWFIwYVc1bmMwUnBkaWs3WEc0Z0lDQWdJQ0FnSUdWc2MyVmNiaUFnSUNBZ0lDQWdJQ0IwYUdsekxtTnlaV0YwWlVGc1oyOXlhWFJvYlZObGRIUnBibWR6UkdsMktIUm9hWE11WkdKVFkyRnVVMlYwZEdsdVozTkVhWFlzSUhSb2FYTXVaR0pUWTJGdVVHRnlZVzF6S1R0Y2JpQWdJQ0FnSUgwc0lDZE5iMlJwWm5rZ1kyeDFjM1JsY21sdVp5QndZWEpoYldWMFpYSnpKeWs3WEc0Z0lDQWdJQ0IwYUdsekxtTnNkWE4wWlhKRmJXSmxaR1JwYm1kelNXNXdkWFF1WTJ4aGMzTk1hWE4wTG1Ga1pDZ25iV3d0WkdsdExYSmxaSFZqZEdsdmJpMXpaWFIwYVc1bmN5MXBibkIxZENjcE8xeHVJQ0FnSUNBZ2RHaHBjeTVqYkhWemRHVnlSVzFpWldSa2FXNW5jMGx1Y0hWMExuSnZiM1F1Y0hKbGNHVnVaQ2gwYUdsekxtUmlVMk5oYmxObGRIUnBibWR6U1dOdmJpazdYRzRnSUNBZ0lDQjBhR2x6TG0xbGRHaHZaRWx1Y0hWMExuSnZiM1F1WTJ4aGMzTk1hWE4wTG1Ga1pDZ25iV3d0WkdsdExYSmxaSFZqZEdsdmJpMXpaWFIwYVc1bmN5MXBibkIxZENjcE8xeHVJQ0FnSUNBZ2RHaHBjeTV0WlhSb2IyUkpibkIxZEM1eWIyOTBMbkJ5WlhCbGJtUW9kR2hwY3k1dFpYUm9iMlJUWlhSMGFXNW5jMGxqYjI0cE8xeHVJQ0FnSUNBZ2RHaHBjeTV0WlhSb2IyUlRaWFIwYVc1bmMwUnBkaUE5SUhWcExtbHVjSFYwY3loYlhTazdYRzRnSUNBZ0lDQmpiMjV6ZENCbWRXNWpkR2x2Ym5NZ1BTQjBhR2x6TG1OdmJIVnRia1oxYm1OMGFXOXVjMDFoY0Z0MGFHbHpMbU52YkVsdWNIVjBMblpoYkhWbElTNXVZVzFsWFR0Y2JseHVJQ0FnSUNBZ2RHaHBjeTV3Y21Wd2NtOWpaWE56YVc1blJuVnVZM1JwYjI1SmJuQjFkQ0E5SUhWcExtTm9iMmxqWlVsdWNIVjBLQ2RGYm1OdlpHbHVaeUJtZFc1amRHbHZiaWNzSUdaMWJtTjBhVzl1YzFzd1hTd2dablZ1WTNScGIyNXpMQ0FvS1NBOVBpQjdYRzRnSUNBZ0lDQWdJSFJvYVhNdWIyNVFjbVZ3Y205alpYTnphVzVuUm5WdVkzUnBiMjVEYUdGdVoyVmtLQ2s3WEc0Z0lDQWdJQ0I5S1R0Y2JpQWdJQ0FnSUd4bGRDQm1iR0ZuVUdacElEMGdabUZzYzJVN1hHNGdJQ0FnSUNCcFppQW9JWFJvYVhNdWNISmxjSEp2WTJWemMybHVaMFoxYm1OMGFXOXVTVzV3ZFhSU2IyOTBLU0I3WEc0Z0lDQWdJQ0FnSUhSb2FYTXVjSEpsY0hKdlkyVnpjMmx1WjBaMWJtTjBhVzl1U1c1d2RYUlNiMjkwSUQwZ2RHaHBjeTV3Y21Wd2NtOWpaWE56YVc1blJuVnVZM1JwYjI1SmJuQjFkQzV5YjI5ME8xeHVJQ0FnSUNBZ0lDQm1iR0ZuVUdacElEMGdkSEoxWlR0Y2JpQWdJQ0FnSUgxY2JpQWdJQ0FnSUdsbUlDZ2habXhoWjFCbWFTa2dlMXh1SUNBZ0lDQWdJQ0IxYVM1bGJYQjBlU2gwYUdsekxuQnlaWEJ5YjJObGMzTnBibWRHZFc1amRHbHZia2x1Y0hWMFVtOXZkQ2s3WEc0Z0lDQWdJQ0FnSUVGeWNtRjVMbVp5YjIwb2RHaHBjeTV3Y21Wd2NtOWpaWE56YVc1blJuVnVZM1JwYjI1SmJuQjFkQzV5YjI5MExtTm9hV3hrY21WdUtWeHVJQ0FnSUNBZ0lDQWdJQzVtYjNKRllXTm9LQ2hqYUdsc1pDa2dQVDRnZEdocGN5NXdjbVZ3Y205alpYTnphVzVuUm5WdVkzUnBiMjVKYm5CMWRGSnZiM1FoTG1Gd2NHVnVaQ2hqYUdsc1pDa3BPMXh1SUNBZ0lDQWdmVnh1SUNBZ0lDQWdkR2hwY3k1d2NtVndjbTlqWlhOemFXNW5SblZ1WTNScGIyNUpibkIxZEZKdmIzUXVZMnhoYzNOTWFYTjBMbUZrWkNnbmJXd3RaR2x0TFhKbFpIVmpkR2x2YmkxelpYUjBhVzVuY3kxcGJuQjFkQ2NwTzF4dUlDQWdJQ0FnYkdWMElIQnlaWEJ5YjJObGMzTnBibWRUWlhSMGFXNW5jMDl3Wlc1bFpDQTlJR1poYkhObE8xeHVJQ0FnSUNBZ2RHaHBjeTV3Y21Wd2NtOWpaWE56YVc1blJuVnVZMU5sZEhScGJtZHpTV052YmlBOUlIVnBMbWxqYjI1ekxuTmxkSFJwYm1kektHRnplVzVqSUNncFBUNGdlMXh1SUNBZ0lDQWdJQ0JwWmlBb0lYQnlaWEJ5YjJObGMzTnBibWRUWlhSMGFXNW5jMDl3Wlc1bFpDa2dlMXh1SUNBZ0lDQWdJQ0FnSUdGM1lXbDBJSFJvYVhNdVkzSmxZWFJsVUhKbGNISnZZMlZ6YzJsdVowWjFibU5RWVhKaGJYTkVhWFlvWEc0Z0lDQWdJQ0FnSUNBZ0lDQjBhR2x6TG5CeVpYQnliMk5sYzNOcGJtZEdkVzVqVTJWMGRHbHVaM05FYVhZc0lIUm9hWE11YzNWd2NHOXlkR1ZrUm5WdVkzUnBiMjV6VzNSb2FYTXVjSEpsY0hKdlkyVnpjMmx1WjBaMWJtTjBhVzl1U1c1d2RYUXVkbUZzZFdVaFhTNW1kVzVqS1R0Y2JpQWdJQ0FnSUNBZ2ZTQmxiSE5sSUhzZ2RXa3VaVzF3ZEhrb2RHaHBjeTV3Y21Wd2NtOWpaWE56YVc1blJuVnVZMU5sZEhScGJtZHpSR2wyS1RzZ2ZWeHVJQ0FnSUNBZ0lDQndjbVZ3Y205alpYTnphVzVuVTJWMGRHbHVaM05QY0dWdVpXUWdQU0FoY0hKbGNISnZZMlZ6YzJsdVoxTmxkSFJwYm1kelQzQmxibVZrTzF4dUlDQWdJQ0FnZlN3Z0owMXZaR2xtZVNCbGJtTnZaR2x1WnlCbWRXNWpkR2x2YmlCd1lYSmhiV1YwWlhKekp5azdYRzRnSUNBZ0lDQjBhR2x6TG5CeVpYQnliMk5sYzNOcGJtZEdkVzVqZEdsdmJrbHVjSFYwVW05dmRDNXdjbVZ3Wlc1a0tIUm9hWE11Y0hKbGNISnZZMlZ6YzJsdVowWjFibU5UWlhSMGFXNW5jMGxqYjI0cE8xeHVYRzRnSUNBZ0lDQjBhR2x6TG5OcGJXbHNZWEpwZEhsTlpYUnlhV05KYm5CMWRDQTlJSFZwTG1Ob2IybGpaVWx1Y0hWMEtDZFRhVzFwYkdGeWFYUjVKeXdnSnljc0lGdGRMQ0J1ZFd4c0tUdGNiaUFnSUNBZ0lIUm9hWE11YzJsdGFXeGhjbWwwZVUxbGRISnBZMGx1Y0hWMExtNTFiR3hoWW14bElEMGdabUZzYzJVN1hHNGdJQ0FnSUNCcFppQW9JWFJvYVhNdWMybHRhV3hoY21sMGVVMWxkSEpwWTBsdWNIVjBVbTl2ZENsY2JpQWdJQ0FnSUNBZ2RHaHBjeTV6YVcxcGJHRnlhWFI1VFdWMGNtbGpTVzV3ZFhSU2IyOTBJRDBnZEdocGN5NXphVzFwYkdGeWFYUjVUV1YwY21salNXNXdkWFF1Y205dmREdGNiaUFnSUNBZ0lIUm9hWE11YjI1UWNtVndjbTlqWlhOemFXNW5SblZ1WTNScGIyNURhR0Z1WjJWa0tDazdYRzRnSUNBZ2ZWeHVYRzRnSUNBZ2NISnBkbUYwWlNCblpYUkRiMnhKYm5CMWRDZ3BJSHRjYmlBZ0lDQWdJR052Ym5OMElHWnBjbk4wVTNWd2NHOXlkR1ZrUTI5c2RXMXVJRDBnZEdocGN5NTBZV0pzWlVsdWNIVjBMblpoYkhWbFB5NWpiMngxYlc1ekxuUnZUR2x6ZENncFhHNGdJQ0FnSUNBZ0lDNW1hVzVrS0NoamIyd3BJRDArSUNFaGRHaHBjeTVqYjJ4MWJXNUdkVzVqZEdsdmJuTk5ZWEJiWTI5c0xtNWhiV1ZkS1NBL1B5QnVkV3hzTzF4dUlDQWdJQ0FnWTI5dWMzUWdhVzV3ZFhRZ1BTQjFhUzVqYjJ4MWJXNUpibkIxZENnblEyOXNkVzF1Snl3Z2RHaHBjeTUwWVdKc1pVbHVjSFYwTG5aaGJIVmxJU3dnWm1seWMzUlRkWEJ3YjNKMFpXUkRiMngxYlc0c1hHNGdJQ0FnSUNBZ0lDZ3BJRDArSUhSb2FYTXViMjVEYjJ4MWJXNUpibkIxZEVOb1lXNW5aV1FvS1N3Z2UyWnBiSFJsY2pvZ0tHTnZiRG9nUkVjdVEyOXNkVzF1S1NBOVBpQWhJWFJvYVhNdVkyOXNkVzF1Um5WdVkzUnBiMjV6VFdGd1cyTnZiQzV1WVcxbFhYMHBPMXh1SUNBZ0lDQWdhV1lnS0NGMGFHbHpMbU52YkVsdWNIVjBVbTl2ZENsY2JpQWdJQ0FnSUNBZ2RHaHBjeTVqYjJ4SmJuQjFkRkp2YjNRZ1BTQnBibkIxZEM1eWIyOTBPMXh1SUNBZ0lDQWdjbVYwZFhKdUlHbHVjSFYwTzF4dUlDQWdJSDFjYmx4dUlDQWdJSEJ5YVhaaGRHVWdjbVZuWlc1bGNtRjBaVU52YkVsdWNIVjBLQ2tnZTF4dUlDQWdJQ0FnYkdWMElHWnNZV2NnUFNCbVlXeHpaVHRjYmlBZ0lDQWdJR2xtSUNoMGFHbHpMbU52YkVsdWNIVjBVbTl2ZENrZ2UxeHVJQ0FnSUNBZ0lDQm1iR0ZuSUQwZ2RISjFaVHRjYmlBZ0lDQWdJQ0FnZFdrdVpXMXdkSGtvZEdocGN5NWpiMnhKYm5CMWRGSnZiM1FwTzF4dUlDQWdJQ0FnZlZ4dUlDQWdJQ0FnZEdocGN5NWpiMnhKYm5CMWRDQTlJSFJvYVhNdVoyVjBRMjlzU1c1d2RYUW9LVHRjYmlBZ0lDQWdJR2xtSUNobWJHRm5LVnh1SUNBZ0lDQWdJQ0JCY25KaGVTNW1jbTl0S0hSb2FYTXVZMjlzU1c1d2RYUXVjbTl2ZEM1amFHbHNaSEpsYmlrdVptOXlSV0ZqYUNnb1kyaHBiR1FwSUQwK0lIUm9hWE11WTI5c1NXNXdkWFJTYjI5MExtRndjR1Z1WkNoamFHbHNaQ2twTzF4dUlDQWdJQ0FnZEdocGN5NXZia052YkhWdGJrbHVjSFYwUTJoaGJtZGxaQ2dwTzF4dUlDQWdJSDFjYmx4dUlDQWdJRzl1VkdGaWJHVkpibkIxZEVOb1lXNW5aV1FvS1NCN1hHNGdJQ0FnSUNCamIyNXpkQ0IyWVd4MVpTQTlJSFJvYVhNdWRHRmliR1ZKYm5CMWRDNTJZV3gxWlR0Y2JpQWdJQ0FnSUdsbUlDZ2hkbUZzZFdVcFhHNGdJQ0FnSUNBZ0lISmxkSFZ5Ymp0Y2JpQWdJQ0FnSUhSb2FYTXVZMjlzZFcxdVJuVnVZM1JwYjI1elRXRndJRDBnZTMwN1hHNGdJQ0FnSUNCamIyNXpkQ0JqYjJ4MWJXNXpJRDBnZG1Gc2RXVXVZMjlzZFcxdWN5NTBiMHhwYzNRb0tUdGNiaUFnSUNBZ0lHTnZiSFZ0Ym5NdVptOXlSV0ZqYUNnb1kyOXNLU0E5UGlCN1hHNGdJQ0FnSUNBZ0lFOWlhbVZqZEM1clpYbHpLSFJvYVhNdWMzVndjRzl5ZEdWa1JuVnVZM1JwYjI1ektTNW1iM0pGWVdOb0tDaG1kVzVqVG1GdFpTa2dQVDRnZTF4dUlDQWdJQ0FnSUNBZ0lHTnZibk4wSUhObGJWUjVjR1Z6SUQwZ2RHaHBjeTV6ZFhCd2IzSjBaV1JHZFc1amRHbHZibk5iWm5WdVkwNWhiV1ZkTG5ObGJWUjVjR1Z6TzF4dUlDQWdJQ0FnSUNBZ0lHTnZibk4wSUhSNWNHVnpJRDBnZEdocGN5NXpkWEJ3YjNKMFpXUkdkVzVqZEdsdmJuTmJablZ1WTA1aGJXVmRMblI1Y0dWek8xeHVJQ0FnSUNBZ0lDQWdJR052Ym5OMElIVnVhWFJ6SUQwZ2RHaHBjeTV6ZFhCd2IzSjBaV1JHZFc1amRHbHZibk5iWm5WdVkwNWhiV1ZkTG5WdWFYUnpPMXh1SUNBZ0lDQWdJQ0FnSUdOdmJuTjBJSE5sYlZSNWNHVlRkWEJ3YjNKMFpXUWdQU0FoYzJWdFZIbHdaWE11YkdWdVozUm9JSHg4SUNoamIyd3VjMlZ0Vkhsd1pTQW1KaUJ6WlcxVWVYQmxjeTVwYm1Oc2RXUmxjeWhqYjJ3dWMyVnRWSGx3WlNrcE8xeHVJQ0FnSUNBZ0lDQWdJR052Ym5OMElIUjVjR1ZUZFhCdmNuUmxaQ0E5SUNGMGVYQmxjeTVzWlc1bmRHZ2dmSHdnZEhsd1pYTXVhVzVqYkhWa1pYTW9ZMjlzTG5SNWNHVXBPMXh1SUNBZ0lDQWdJQ0FnSUdOdmJuTjBJSFZ1YVhSelUzVndjRzl5ZEdWa0lEMGdJWFZ1YVhSekxteGxibWQwYUNCOGZGeHVJQ0FnSUNBZ0lDQWdJQ0FnS0dOdmJDNW5aWFJVWVdjb1JFY3VWRUZIVXk1VlRrbFVVeWtnSmlZZ2RXNXBkSE11YVc1amJIVmtaWE1vWTI5c0xtZGxkRlJoWnloRVJ5NVVRVWRUTGxWT1NWUlRLU2twTzF4dUlDQWdJQ0FnSUNBZ0lHbG1JQ2h6WlcxVWVYQmxVM1Z3Y0c5eWRHVmtJQ1ltSUhSNWNHVlRkWEJ2Y25SbFpDQW1KaUIxYm1sMGMxTjFjSEJ2Y25SbFpDa2dlMXh1SUNBZ0lDQWdJQ0FnSUNBZ2FXWWdLQ0YwYUdsekxtTnZiSFZ0YmtaMWJtTjBhVzl1YzAxaGNGdGpiMnd1Ym1GdFpWMHBYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lIUm9hWE11WTI5c2RXMXVSblZ1WTNScGIyNXpUV0Z3VzJOdmJDNXVZVzFsWFNBOUlGdGRPMXh1SUNBZ0lDQWdJQ0FnSUNBZ2RHaHBjeTVqYjJ4MWJXNUdkVzVqZEdsdmJuTk5ZWEJiWTI5c0xtNWhiV1ZkTG5CMWMyZ29ablZ1WTA1aGJXVXBPMXh1SUNBZ0lDQWdJQ0FnSUgxY2JpQWdJQ0FnSUNBZ2ZTazdYRzRnSUNBZ0lDQjlLVHRjYmlBZ0lDQWdJSFJvYVhNdWNtVm5aVzVsY21GMFpVTnZiRWx1Y0hWMEtDazdYRzRnSUNBZ2ZWeHVYRzRnSUNBZ2NISnBkbUYwWlNCdmJrTnZiSFZ0YmtsdWNIVjBRMmhoYm1kbFpDZ3BJSHRjYmlBZ0lDQWdJR052Ym5OMElHTnZiQ0E5SUhSb2FYTXVZMjlzU1c1d2RYUXVkbUZzZFdVN1hHNGdJQ0FnSUNCcFppQW9JV052YkNsY2JpQWdJQ0FnSUNBZ2NtVjBkWEp1TzF4dUlDQWdJQ0FnWTI5dWMzUWdjM1Z3Y0c5eWRHVmtVSEpsY0hKdlkyVnpjMmx1WjBaMWJtTjBhVzl1Y3lBOUlIUm9hWE11WTI5c2RXMXVSblZ1WTNScGIyNXpUV0Z3VzJOdmJDNXVZVzFsWFR0Y2JpQWdJQ0FnSUhSb2FYTXVjSEpsY0hKdlkyVnpjMmx1WjBaMWJtTjBhVzl1U1c1d2RYUWdQU0IxYVM1amFHOXBZMlZKYm5CMWRDZ25VSEpsY0hKdlkyVnpjMmx1WnlCbWRXNWpkR2x2Ymljc1hHNGdJQ0FnSUNBZ0lITjFjSEJ2Y25SbFpGQnlaWEJ5YjJObGMzTnBibWRHZFc1amRHbHZibk5iTUYwc0lITjFjSEJ2Y25SbFpGQnlaWEJ5YjJObGMzTnBibWRHZFc1amRHbHZibk1zSUNncElEMCtJSHRjYmlBZ0lDQWdJQ0FnSUNCMGFHbHpMbTl1VUhKbGNISnZZMlZ6YzJsdVowWjFibU4wYVc5dVEyaGhibWRsWkNncE8xeHVJQ0FnSUNBZ0lDQjlLVHRjYmlBZ0lDQWdJR3hsZENCbWJHRm5JRDBnWm1Gc2MyVTdYRzRnSUNBZ0lDQnBaaUFvSVhSb2FYTXVjSEpsY0hKdlkyVnpjMmx1WjBaMWJtTjBhVzl1U1c1d2RYUlNiMjkwS1NCN1hHNGdJQ0FnSUNBZ0lIUm9hWE11Y0hKbGNISnZZMlZ6YzJsdVowWjFibU4wYVc5dVNXNXdkWFJTYjI5MElEMGdkR2hwY3k1d2NtVndjbTlqWlhOemFXNW5SblZ1WTNScGIyNUpibkIxZEM1eWIyOTBPMXh1SUNBZ0lDQWdJQ0JtYkdGbklEMGdkSEoxWlR0Y2JpQWdJQ0FnSUgxY2JpQWdJQ0FnSUdsbUlDZ2habXhoWnlrZ2UxeHVJQ0FnSUNBZ0lDQjFhUzVsYlhCMGVTaDBhR2x6TG5CeVpYQnliMk5sYzNOcGJtZEdkVzVqZEdsdmJrbHVjSFYwVW05dmRDazdYRzRnSUNBZ0lDQWdJRUZ5Y21GNUxtWnliMjBvZEdocGN5NXdjbVZ3Y205alpYTnphVzVuUm5WdVkzUnBiMjVKYm5CMWRDNXliMjkwTG1Ob2FXeGtjbVZ1S1Z4dUlDQWdJQ0FnSUNBZ0lDNW1iM0pGWVdOb0tDaGphR2xzWkNrZ1BUNGdkR2hwY3k1d2NtVndjbTlqWlhOemFXNW5SblZ1WTNScGIyNUpibkIxZEZKdmIzUWhMbUZ3Y0dWdVpDaGphR2xzWkNrcE8xeHVJQ0FnSUNBZ2ZWeHVJQ0FnSUNBZ2RHaHBjeTV2YmxCeVpYQnliMk5sYzNOcGJtZEdkVzVqZEdsdmJrTm9ZVzVuWldRb0tUdGNiaUFnSUNCOVhHNWNiaUFnSUNCd2NtbDJZWFJsSUc5dVVISmxjSEp2WTJWemMybHVaMFoxYm1OMGFXOXVRMmhoYm1kbFpDZ3BJSHRjYmlBZ0lDQWdJSFZwTG1WdGNIUjVLSFJvYVhNdWNISmxjSEp2WTJWemMybHVaMFoxYm1OVFpYUjBhVzVuYzBScGRpazdYRzRnSUNBZ0lDQjBhR2x6TG5CeVpYQnliMk5sYzNOcGJtZEdkVzVqZEdsdmJsTmxkSFJwYm1keklEMGdlMzA3WEc0Z0lDQWdJQ0JqYjI1emRDQm1UbUZ0WlNBOUlIUm9hWE11Y0hKbGNISnZZMlZ6YzJsdVowWjFibU4wYVc5dVNXNXdkWFF1ZG1Gc2RXVWhPMXh1SUNBZ0lDQWdZMjl1YzNRZ1pHbHpkR0Z1WTJWR2N5QTlJSFJvYVhNdWMzVndjRzl5ZEdWa1JuVnVZM1JwYjI1elcyWk9ZVzFsWFM1a2FYTjBZVzVqWlVaMWJtTjBhVzl1Y3p0Y2JpQWdJQ0FnSUhSb2FYTXVZWFpoYVd4aFlteGxUV1YwY21samN5QTlJRnN1TGk1a2FYTjBZVzVqWlVaelhUdGNiaUFnSUNBZ0lIUm9hWE11YzJsdGFXeGhjbWwwZVUxbGRISnBZMGx1Y0hWMElEMGdkV2t1WTJodmFXTmxTVzV3ZFhRb0oxTnBiV2xzWVhKcGRIa25MQ0IwYUdsekxtRjJZV2xzWVdKc1pVMWxkSEpwWTNOYk1GMHNJSFJvYVhNdVlYWmhhV3hoWW14bFRXVjBjbWxqY3l3Z2JuVnNiQ2s3WEc0Z0lDQWdJQ0IwYUdsekxuTnBiV2xzWVhKcGRIbE5aWFJ5YVdOSmJuQjFkQzV1ZFd4c1lXSnNaU0E5SUdaaGJITmxPMXh1SUNBZ0lDQWdhV1lnS0NGMGFHbHpMbk5wYldsc1lYSnBkSGxOWlhSeWFXTkpibkIxZEZKdmIzUXBYRzRnSUNBZ0lDQWdJSFJvYVhNdWMybHRhV3hoY21sMGVVMWxkSEpwWTBsdWNIVjBVbTl2ZENBOUlIUm9hWE11YzJsdGFXeGhjbWwwZVUxbGRISnBZMGx1Y0hWMExuSnZiM1E3WEc1Y2JpQWdJQ0FnSUhWcExtVnRjSFI1S0hSb2FYTXVjMmx0YVd4aGNtbDBlVTFsZEhKcFkwbHVjSFYwVW05dmRDazdYRzRnSUNBZ0lDQkJjbkpoZVM1bWNtOXRLSFJvYVhNdWMybHRhV3hoY21sMGVVMWxkSEpwWTBsdWNIVjBMbkp2YjNRdVkyaHBiR1J5Wlc0cFhHNGdJQ0FnSUNBZ0lDNW1iM0pGWVdOb0tDaGphR2xzWkNrZ1BUNGdkR2hwY3k1emFXMXBiR0Z5YVhSNVRXVjBjbWxqU1c1d2RYUlNiMjkwTG1Gd2NHVnVaQ2hqYUdsc1pDa3BPMXh1SUNBZ0lDQWdhV1lnS0hSb2FYTXVjSEpsY0hKdlkyVnpjMmx1WjBaMWJtTlRaWFIwYVc1bmMwbGpiMjRwSUh0Y2JpQWdJQ0FnSUNBZ2FXWWdLSFJvYVhNdWMzVndjRzl5ZEdWa1JuVnVZM1JwYjI1elcyWk9ZVzFsWFM1bWRXNWpMbWx1Y0hWMGN5NXNaVzVuZEdnZ1BDQXpLVnh1SUNBZ0lDQWdJQ0FnSUhSb2FYTXVjSEpsY0hKdlkyVnpjMmx1WjBaMWJtTlRaWFIwYVc1bmMwbGpiMjR1YzNSNWJHVXVaR2x6Y0d4aGVTQTlJQ2R1YjI1bEp6dGNiaUFnSUNBZ0lDQWdaV3h6WlZ4dUlDQWdJQ0FnSUNBZ0lIUm9hWE11Y0hKbGNISnZZMlZ6YzJsdVowWjFibU5UWlhSMGFXNW5jMGxqYjI0dWMzUjViR1V1WkdsemNHeGhlU0E5SUNkbWJHVjRKenRjYmlBZ0lDQWdJSDFjYmlBZ0lDQjlYRzVjYmlBZ0lDQndjbWwyWVhSbElHTnlaV0YwWlVGc1oyOXlhWFJvYlZObGRIUnBibWR6UkdsMktGeHVJQ0FnSUNBZ2NHRnlZVzF6Um05eWJUb2dTRlJOVEVWc1pXMWxiblFzSUhCaGNtRnRjem9nVlUxQlVFOXdkR2x2Ym5NZ2ZDQlVVMDVGVDNCMGFXOXVjeUI4SUVSQ1UyTmhiazl3ZEdsdmJuTXBPaUJJVkUxTVJXeGxiV1Z1ZENCN1hHNGdJQ0FnSUNCMWFTNWxiWEIwZVNod1lYSmhiWE5HYjNKdEtUdGNiaUFnSUNBZ0lFOWlhbVZqZEM1clpYbHpLSEJoY21GdGN5a3VabTl5UldGamFDZ29hWFE2SUdGdWVTa2dQVDRnZTF4dUlDQWdJQ0FnSUNCamIyNXpkQ0J3WVhKaGJUb2dTVVJwYlZKbFpIVmpkR2x2YmxCaGNtRnRJSHdnU1VScGJWSmxaSFZqZEdsdmJsQmhjbUZ0UEhOMGNtbHVaejRnZkNCSlJHbHRVbVZrZFdOMGFXOXVVR0Z5WVcwOFltOXZiR1ZoYmo0Z1BWeHVJQ0FnSUNBZ0lDQWdJQ2h3WVhKaGJYTWdZWE1nWVc1NUtWdHBkRjA3WEc1Y2JpQWdJQ0FnSUNBZ1kyOXVjM1FnYVc1d2RYUWdQU0J3WVhKaGJTNTBlWEJsSUQwOVBTQW5jM1J5YVc1bkp5QS9YRzRnSUNBZ0lDQWdJQ0FnZFdrdWMzUnlhVzVuU1c1d2RYUW9jR0Z5WVcwdWRXbE9ZVzFsTENCd1lYSmhiUzUyWVd4MVpTQS9QeUFuSnl3Z0tDa2dQVDRnZTF4dUlDQWdJQ0FnSUNBZ0lDQWdjR0Z5WVcwdWRtRnNkV1VnUFNBb2FXNXdkWFFnWVhNZ1JFY3VTVzV3ZFhSQ1lYTmxQSE4wY21sdVp6NHBMblpoYkhWbE8xeHVJQ0FnSUNBZ0lDQWdJSDBwSURvZ2NHRnlZVzB1ZEhsd1pTQTlQVDBnSjJKdmIyeGxZVzRuSUQ5Y2JpQWdJQ0FnSUNBZ0lDQWdJSFZwTG1KdmIyeEpibkIxZENod1lYSmhiUzUxYVU1aGJXVXNJSEJoY21GdExuWmhiSFZsSUQ4L0lHWmhiSE5sTENBb0tTQTlQaUI3WEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJSEJoY21GdExuWmhiSFZsSUQwZ0tHbHVjSFYwSUdGeklFUkhMa2x1Y0hWMFFtRnpaVHhpYjI5c1pXRnVQaWt1ZG1Gc2RXVTdYRzRnSUNBZ0lDQWdJQ0FnSUNCOUtTQTZYRzRnSUNBZ0lDQWdJQ0FnSUNCMWFTNW1iRzloZEVsdWNIVjBLSEJoY21GdExuVnBUbUZ0WlN3Z2NHRnlZVzB1ZG1Gc2RXVWdZWE1nWVc1NUxDQW9LU0E5UGlCN1hHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUhCaGNtRnRMblpoYkhWbElEMGdhVzV3ZFhRdWRtRnNkV1U3WEc0Z0lDQWdJQ0FnSUNBZ0lDQjlLVHRjYmlBZ0lDQWdJQ0FnY0dGeVlXMXpSbTl5YlM1aGNIQmxibVFvYVc1d2RYUXVjbTl2ZENrN1hHNGdJQ0FnSUNBZ0lHbG1JQ2h3WVhKaGJTNWthWE5oWW14bEtTQjdYRzRnSUNBZ0lDQWdJQ0FnYVc1d2RYUXVaVzVoWW14bFpDQTlJR1poYkhObE8xeHVJQ0FnSUNBZ0lDQWdJSFZwTG5SdmIyeDBhWEF1WW1sdVpDaHBibkIxZEM1cGJuQjFkQ0EvUHlCcGJuQjFkQzV5YjI5MExDQndZWEpoYlM1a2FYTmhZbXhsVkc5dmJIUnBjQ0EvUHlBbkp5azdYRzRnSUNBZ0lDQWdJSDBnWld4elpTQjdJSFZwTG5SdmIyeDBhWEF1WW1sdVpDaHBibkIxZEM1cGJuQjFkQ0EvUHlCcGJuQjFkQzV5YjI5MExDQndZWEpoYlM1MGIyOXNkR2x3S1RzZ2ZWeHVJQ0FnSUNBZ2ZTazdYRzRnSUNBZ0lDQnlaWFIxY200Z2NHRnlZVzF6Um05eWJUdGNiaUFnSUNCOVhHNWNiaUFnSUNCd2NtbDJZWFJsSUdGemVXNWpJR055WldGMFpWQnlaWEJ5YjJObGMzTnBibWRHZFc1alVHRnlZVzF6UkdsMktIQmhjbUZ0YzBadmNtMDZJRWhVVFV4RmJHVnRaVzUwTENCbWRXNWpPaUJFUnk1R2RXNWpLVG9nVUhKdmJXbHpaVHhJVkUxTVJXeGxiV1Z1ZEQ0Z2UxeHVJQ0FnSUNBZ2RXa3VaVzF3ZEhrb2NHRnlZVzF6Um05eWJTazdYRzRnSUNBZ0lDQnBaaUFvWm5WdVl5NXBibkIxZEhNdWJHVnVaM1JvSUR3Z015bGNiaUFnSUNBZ0lDQWdjbVYwZFhKdUlIVnBMbVJwZGlncE8xeHVJQ0FnSUNBZ1kyOXVjM1FnWm1NZ1BTQm1kVzVqTG5CeVpYQmhjbVVvS1R0Y2JpQWdJQ0FnSUdOdmJuTjBJR2x1Y0hWMGN5QTlJR0YzWVdsMElHWmpMbUoxYVd4a1JXUnBkRzl5S0hWcExtUnBkaWdwS1R0Y2JpQWdJQ0FnSUdadmNpQW9iR1YwSUdrZ1BTQXlPeUJwSUR3Z1puVnVZeTVwYm5CMWRITXViR1Z1WjNSb095QnBLeXNwSUh0Y2JpQWdJQ0FnSUNBZ1kyOXVjM1FnWmtsdWNIVjBJRDBnWm5WdVl5NXBibkIxZEhOYmFWMDdYRzRnSUNBZ0lDQWdJR2xtSUNoMGFHbHpMbkJ5WlhCeWIyTmxjM05wYm1kR2RXNWpkR2x2YmxObGRIUnBibWR6VzJaSmJuQjFkQzV1WVcxbFhTQjhmQ0JtWXk1cGJuQjFkRkJoY21GdGMxdG1kVzVqTG1sdWNIVjBjMXRwWFM1dVlXMWxYUzUyWVd4MVpTQjhmRnh1SUNBZ0lDQWdJQ0FnSUNCbVNXNXdkWFF1WkdWbVlYVnNkRlpoYkhWbEtTQjdYRzRnSUNBZ0lDQWdJQ0FnZEdocGN5NXdjbVZ3Y205alpYTnphVzVuUm5WdVkzUnBiMjVUWlhSMGFXNW5jMXRtU1c1d2RYUXVibUZ0WlYwZ1BWeHVJQ0FnSUNBZ0lDQWdJQ0FnZEdocGN5NXdjbVZ3Y205alpYTnphVzVuUm5WdVkzUnBiMjVUWlhSMGFXNW5jMXRtU1c1d2RYUXVibUZ0WlYwZ1B6OGdabU11YVc1d2RYUlFZWEpoYlhOYlprbHVjSFYwTG01aGJXVmRMblpoYkhWbElEOC9JR1pKYm5CMWRDNWtaV1poZFd4MFZtRnNkV1U3WEc0Z0lDQWdJQ0FnSUgxY2JpQWdJQ0FnSUNBZ1kyOXVjM1FnYVc1d2RYUWdQU0JwYm5CMWRITXVabWx1WkNnb2FXNXdLU0E5UGlCcGJuQXVjSEp2Y0dWeWRIa3VibUZ0WlNBOVBUMGdaa2x1Y0hWMExtNWhiV1VwTzF4dUlDQWdJQ0FnSUNCcFppQW9JV2x1Y0hWMEtWeHVJQ0FnSUNBZ0lDQWdJR052Ym5ScGJuVmxPMXh1SUNBZ0lDQWdJQ0JwWmlBb2RHaHBjeTV3Y21Wd2NtOWpaWE56YVc1blJuVnVZM1JwYjI1VFpYUjBhVzVuYzF0bVNXNXdkWFF1Ym1GdFpWMGdJVDA5SUc1MWJHd2dKaVpjYmlBZ0lDQWdJQ0FnSUNCMGFHbHpMbkJ5WlhCeWIyTmxjM05wYm1kR2RXNWpkR2x2YmxObGRIUnBibWR6VzJaSmJuQjFkQzV1WVcxbFhTQWhQVDBnZFc1a1pXWnBibVZrS1Z4dUlDQWdJQ0FnSUNBZ0lHbHVjSFYwTG5aaGJIVmxJRDBnZEdocGN5NXdjbVZ3Y205alpYTnphVzVuUm5WdVkzUnBiMjVUWlhSMGFXNW5jMXRtU1c1d2RYUXVibUZ0WlYwN1hHNGdJQ0FnSUNBZ0lHbHVjSFYwTG05dVEyaGhibWRsWkNnb0tTQTlQaUI3SUhSb2FYTXVjSEpsY0hKdlkyVnpjMmx1WjBaMWJtTjBhVzl1VTJWMGRHbHVaM05iWmtsdWNIVjBMbTVoYldWZElEMGdhVzV3ZFhRdWRtRnNkV1U3SUgwcE8xeHVJQ0FnSUNBZ0lDQndZWEpoYlhOR2IzSnRMbUZ3Y0dWdVpDaHBibkIxZEM1eWIyOTBLVHRjYmlBZ0lDQWdJSDFjYmlBZ0lDQWdJSEpsZEhWeWJpQndZWEpoYlhOR2IzSnRPMXh1SUNBZ0lIMWNibHh1SUNBZ0lIQjFZbXhwWXlCblpYUkZaR2wwYjNJb0tUb2dTRlJOVEVWc1pXMWxiblFnZTF4dUlDQWdJQ0FnY21WMGRYSnVJSFZwTG1ScGRpaGJYRzRnSUNBZ0lDQWdJSFJvYVhNdWRHRmliR1ZKYm5CMWRDeGNiaUFnSUNBZ0lDQWdkR2hwY3k1amIyeEpibkIxZEZKdmIzUXNYRzRnSUNBZ0lDQWdJSFJvYVhNdWNISmxjSEp2WTJWemMybHVaMFoxYm1OMGFXOXVTVzV3ZFhSU2IyOTBMRnh1SUNBZ0lDQWdJQ0IwYUdsekxuQnlaWEJ5YjJObGMzTnBibWRHZFc1alUyVjBkR2x1WjNORWFYWXNYRzRnSUNBZ0lDQWdJSFJvYVhNdWJXVjBhRzlrU1c1d2RYUXNYRzRnSUNBZ0lDQWdJSFJvYVhNdWJXVjBhRzlrVTJWMGRHbHVaM05FYVhZc1hHNGdJQ0FnSUNBZ0lIUm9hWE11YzJsdGFXeGhjbWwwZVUxbGRISnBZMGx1Y0hWMFVtOXZkQ3hjYmlBZ0lDQWdJQ0FnZEdocGN5NXdiRzkwUlcxaVpXUmthVzVuYzBsdWNIVjBMRnh1SUNBZ0lDQWdJQ0IwYUdsekxtTnNkWE4wWlhKRmJXSmxaR1JwYm1kelNXNXdkWFFzWEc0Z0lDQWdJQ0FnSUhSb2FYTXVaR0pUWTJGdVUyVjBkR2x1WjNORWFYWmNiaUFnSUNBZ0lGMHNJSHR6ZEhsc1pUb2dlMjFwYmxkcFpIUm9PaUFuTXpJd2NIZ25mU3dnWTJ4aGMzTmxjem9nSjNWcExXWnZjbTBuZlNrN1hHNGdJQ0FnZlZ4dVhHNGdJQ0FnY0hWaWJHbGpJR2RsZEZCaGNtRnRjeWdwT2lCRWFXMVNaV1IxWTNScGIyNVFZWEpoYlhNZ2UxeHVJQ0FnSUNBZ2NtVjBkWEp1SUh0Y2JpQWdJQ0FnSUNBZ2RHRmliR1U2SUhSb2FYTXVkR0ZpYkdWSmJuQjFkQzUyWVd4MVpTRXNYRzRnSUNBZ0lDQWdJR052YkRvZ2RHaHBjeTVqYjJ4SmJuQjFkQzUyWVd4MVpTRXNYRzRnSUNBZ0lDQWdJRzFsZEdodlpFNWhiV1U2SUhSb2FYTXViV1YwYUc5a1NXNXdkWFF1ZG1Gc2RXVWhMRnh1SUNBZ0lDQWdJQ0J3Y21Wd2NtOWpaWE56YVc1blJuVnVZM1JwYjI0NklIUm9hWE11YzNWd2NHOXlkR1ZrUm5WdVkzUnBiMjV6VzNSb2FYTXVjSEpsY0hKdlkyVnpjMmx1WjBaMWJtTjBhVzl1U1c1d2RYUXVkbUZzZFdVaFhTNW1kVzVqTEZ4dUlDQWdJQ0FnSUNCemFXMXBiR0Z5YVhSNVRXVjBjbWxqT2lCMGFHbHpMbk5wYldsc1lYSnBkSGxOWlhSeWFXTkpibkIxZEM1MllXeDFaU0VzWEc0Z0lDQWdJQ0FnSUhCc2IzUkZiV0psWkdScGJtZHpPaUIwYUdsekxuQnNiM1JGYldKbFpHUnBibWR6U1c1d2RYUXVkbUZzZFdVaExGeHVJQ0FnSUNBZ0lDQmpiSFZ6ZEdWeVJXMWlaV1JrYVc1bmN6b2dkR2hwY3k1amJIVnpkR1Z5UlcxaVpXUmthVzVuYzBsdWNIVjBMblpoYkhWbElTeGNiaUFnSUNBZ0lDQWdiM0IwYVc5dWN6b2dleTR1TG5Sb2FYTXVZV3huYjNKcGRHaHRUM0IwYVc5dWN5d2dMaTR1ZEdocGN5NWtZbE5qWVc1UGNIUnBiMjV6TEZ4dUlDQWdJQ0FnSUNBZ0lIQnlaWEJ5YjJObGMzTnBibWRHZFc1alFYSm5jem9nS0hSb2FYTXVjSEpsY0hKdlkyVnpjMmx1WjBaMWJtTjBhVzl1VTJWMGRHbHVaM01nUHo4Z2UzMHBmVnh1SUNBZ0lDQWdmVHRjYmlBZ0lDQjlYRzU5WEc0aVhYMD0iLCJleHBvcnQgY29uc3QgRElNX1JFRF9QUkVQUk9DRVNTSU5HX0ZVTkNUSU9OX1RBRyA9ICdkaW0tcmVkLXByZXByb2Nlc3NpbmctZnVuY3Rpb24nO1xuZXhwb3J0IGNvbnN0IERJTV9SRURfUE9TVFBST0NFU1NJTkdfRlVOQ1RJT05fVEFHID0gJ2RpbS1yZWQtcG9zdHByb2Nlc3NpbmctZnVuY3Rpb24nO1xuZXhwb3J0IGNvbnN0IERJTV9SRURfREVGQVVMVF9QT1NUUFJPQ0VTU0lOR19GVU5DVElPTl9NRVRBID0gJ2RlZmF1bHRQb3N0UHJvY2Vzc2luZ0Z1bmN0aW9uJztcbmV4cG9ydCBjb25zdCBTVVBQT1JURURfU0VNVFlQRVNfVEFHID0gJ3N1cHBvcnRlZFNlbVR5cGVzJztcbmV4cG9ydCBjb25zdCBTVVBQT1JURURfVFlQRVNfVEFHID0gJ3N1cHBvcnRlZFR5cGVzJztcbmV4cG9ydCBjb25zdCBTVVBQT1JURURfVU5JVFNfVEFHID0gJ3N1cHBvcnRlZFVuaXRzJztcbmV4cG9ydCBjb25zdCBTVVBQT1JURURfRElTVEFOQ0VfRlVOQ1RJT05TX1RBRyA9ICdzdXBwb3J0ZWREaXN0YW5jZUZ1bmN0aW9ucyc7XG5leHBvcnQgY29uc3QgQllQQVNTX0xBUkdFX0RBVEFfV0FSTklORyA9ICdieXBhc3NMYXJnZURhdGFXYXJuaW5nJztcbmV4cG9ydCBjb25zdCBTSE9XX1NDQVRURVJQTE9UX1BST0dSRVNTID0gJ3Nob3ctc2NhdHRlcnBsb3QtcHJvZ3Jlc3MnO1xuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZGF0YTphcHBsaWNhdGlvbi9qc29uO2Jhc2U2NCxleUoyWlhKemFXOXVJam96TENKbWFXeGxJam9pWTI5dWMzUnpMbXB6SWl3aWMyOTFjbU5sVW05dmRDSTZJaUlzSW5OdmRYSmpaWE1pT2xzaVkyOXVjM1J6TG5SeklsMHNJbTVoYldWeklqcGJYU3dpYldGd2NHbHVaM01pT2lKQlFVRkJMRTFCUVUwc1EwRkJReXhOUVVGTkxHdERRVUZyUXl4SFFVRkhMR2REUVVGblF5eERRVUZETzBGQlEyNUdMRTFCUVUwc1EwRkJReXhOUVVGTkxHMURRVUZ0UXl4SFFVRkhMR2xEUVVGcFF5eERRVUZETzBGQlEzSkdMRTFCUVUwc1EwRkJReXhOUVVGTkxEUkRRVUUwUXl4SFFVRkhMQ3RDUVVFclFpeERRVUZETzBGQlF6VkdMRTFCUVUwc1EwRkJReXhOUVVGTkxITkNRVUZ6UWl4SFFVRkhMRzFDUVVGdFFpeERRVUZETzBGQlF6RkVMRTFCUVUwc1EwRkJReXhOUVVGTkxHMUNRVUZ0UWl4SFFVRkhMR2RDUVVGblFpeERRVUZETzBGQlEzQkVMRTFCUVUwc1EwRkJReXhOUVVGTkxHMUNRVUZ0UWl4SFFVRkhMR2RDUVVGblFpeERRVUZETzBGQlEzQkVMRTFCUVUwc1EwRkJReXhOUVVGTkxHZERRVUZuUXl4SFFVRkhMRFJDUVVFMFFpeERRVUZETzBGQlF6ZEZMRTFCUVUwc1EwRkJReXhOUVVGTkxIbENRVUY1UWl4SFFVRkhMSGRDUVVGM1FpeERRVUZETzBGQlEyeEZMRTFCUVUwc1EwRkJReXhOUVVGTkxIbENRVUY1UWl4SFFVRkhMREpDUVVFeVFpeERRVUZESWl3aWMyOTFjbU5sYzBOdmJuUmxiblFpT2xzaVpYaHdiM0owSUdOdmJuTjBJRVJKVFY5U1JVUmZVRkpGVUZKUFEwVlRVMGxPUjE5R1ZVNURWRWxQVGw5VVFVY2dQU0FuWkdsdExYSmxaQzF3Y21Wd2NtOWpaWE56YVc1bkxXWjFibU4wYVc5dUp6dGNibVY0Y0c5eWRDQmpiMjV6ZENCRVNVMWZVa1ZFWDFCUFUxUlFVazlEUlZOVFNVNUhYMFpWVGtOVVNVOU9YMVJCUnlBOUlDZGthVzB0Y21Wa0xYQnZjM1J3Y205alpYTnphVzVuTFdaMWJtTjBhVzl1Snp0Y2JtVjRjRzl5ZENCamIyNXpkQ0JFU1UxZlVrVkVYMFJGUmtGVlRGUmZVRTlUVkZCU1QwTkZVMU5KVGtkZlJsVk9RMVJKVDA1ZlRVVlVRU0E5SUNka1pXWmhkV3gwVUc5emRGQnliMk5sYzNOcGJtZEdkVzVqZEdsdmJpYzdYRzVsZUhCdmNuUWdZMjl1YzNRZ1UxVlFVRTlTVkVWRVgxTkZUVlJaVUVWVFgxUkJSeUE5SUNkemRYQndiM0owWldSVFpXMVVlWEJsY3ljN1hHNWxlSEJ2Y25RZ1kyOXVjM1FnVTFWUVVFOVNWRVZFWDFSWlVFVlRYMVJCUnlBOUlDZHpkWEJ3YjNKMFpXUlVlWEJsY3ljN1hHNWxlSEJ2Y25RZ1kyOXVjM1FnVTFWUVVFOVNWRVZFWDFWT1NWUlRYMVJCUnlBOUlDZHpkWEJ3YjNKMFpXUlZibWwwY3ljN1hHNWxlSEJ2Y25RZ1kyOXVjM1FnVTFWUVVFOVNWRVZFWDBSSlUxUkJUa05GWDBaVlRrTlVTVTlPVTE5VVFVY2dQU0FuYzNWd2NHOXlkR1ZrUkdsemRHRnVZMlZHZFc1amRHbHZibk1uTzF4dVpYaHdiM0owSUdOdmJuTjBJRUpaVUVGVFUxOU1RVkpIUlY5RVFWUkJYMWRCVWs1SlRrY2dQU0FuWW5sd1lYTnpUR0Z5WjJWRVlYUmhWMkZ5Ym1sdVp5YzdYRzVsZUhCdmNuUWdZMjl1YzNRZ1UwaFBWMTlUUTBGVVZFVlNVRXhQVkY5UVVrOUhVa1ZUVXlBOUlDZHphRzkzTFhOallYUjBaWEp3Ykc5MExYQnliMmR5WlhOekp6dGNiaUpkZlE9PSIsImV4cG9ydCB2YXIgRGlzdGFuY2VBZ2dyZWdhdGlvbk1ldGhvZHM7XG4oZnVuY3Rpb24gKERpc3RhbmNlQWdncmVnYXRpb25NZXRob2RzKSB7XG4gICAgRGlzdGFuY2VBZ2dyZWdhdGlvbk1ldGhvZHNbXCJFVUNMSURFQU5cIl0gPSBcIkVVQ0xJREVBTlwiO1xuICAgIERpc3RhbmNlQWdncmVnYXRpb25NZXRob2RzW1wiTUFOSEFUVEFOXCJdID0gXCJNQU5IQVRUQU5cIjtcbn0pKERpc3RhbmNlQWdncmVnYXRpb25NZXRob2RzIHx8IChEaXN0YW5jZUFnZ3JlZ2F0aW9uTWV0aG9kcyA9IHt9KSk7XG47XG4vLyMgc291cmNlTWFwcGluZ1VSTD1kYXRhOmFwcGxpY2F0aW9uL2pzb247YmFzZTY0LGV5SjJaWEp6YVc5dUlqb3pMQ0ptYVd4bElqb2lkSGx3WlhNdWFuTWlMQ0p6YjNWeVkyVlNiMjkwSWpvaUlpd2ljMjkxY21ObGN5STZXeUowZVhCbGN5NTBjeUpkTENKdVlXMWxjeUk2VzEwc0ltMWhjSEJwYm1keklqb2lRVUZCUVN4TlFVRk5MRU5CUVU0c1NVRkJXU3d3UWtGSFZEdEJRVWhJTEZkQlFWa3NNRUpCUVRCQ08wbEJRMnhETEhGRVFVRjFRaXhEUVVGQk8wbEJRM1pDTEhGRVFVRjFRaXhEUVVGQk8wRkJRM3BDTEVOQlFVTXNSVUZJVXl3d1FrRkJNRUlzUzBGQk1VSXNNRUpCUVRCQ0xGRkJSMjVETzBGQlFVRXNRMEZCUXlJc0luTnZkWEpqWlhORGIyNTBaVzUwSWpwYkltVjRjRzl5ZENCbGJuVnRJRVJwYzNSaGJtTmxRV2RuY21WbllYUnBiMjVOWlhSb2IyUnpJSHRjYmlBZ0lDQkZWVU5NU1VSRlFVNGdQU0FuUlZWRFRFbEVSVUZPSnl4Y2JpQWdJQ0JOUVU1SVFWUlVRVTRnUFNBblRVRk9TRUZVVkVGT0p5eGNiaUFnZlR0Y2JseHVaWGh3YjNKMElIUjVjR1VnUkdsemRHRnVZMlZCWjJkeVpXZGhkR2x2YmsxbGRHaHZaQ0E5SUd0bGVXOW1JSFI1Y0dWdlppQkVhWE4wWVc1alpVRm5aM0psWjJGMGFXOXVUV1YwYUc5a2N6dGNiaUpkZlE9PSIsImNvbnN0IF9fV0VCUEFDS19OQU1FU1BBQ0VfT0JKRUNUX18gPSByeGpzOyIsIlxuICAgICAgaW1wb3J0IEFQSSBmcm9tIFwiIS4uLy4uLy4uL3N0eWxlLWxvYWRlci9kaXN0L3J1bnRpbWUvaW5qZWN0U3R5bGVzSW50b1N0eWxlVGFnLmpzXCI7XG4gICAgICBpbXBvcnQgZG9tQVBJIGZyb20gXCIhLi4vLi4vLi4vc3R5bGUtbG9hZGVyL2Rpc3QvcnVudGltZS9zdHlsZURvbUFQSS5qc1wiO1xuICAgICAgaW1wb3J0IGluc2VydEZuIGZyb20gXCIhLi4vLi4vLi4vc3R5bGUtbG9hZGVyL2Rpc3QvcnVudGltZS9pbnNlcnRCeVNlbGVjdG9yLmpzXCI7XG4gICAgICBpbXBvcnQgc2V0QXR0cmlidXRlcyBmcm9tIFwiIS4uLy4uLy4uL3N0eWxlLWxvYWRlci9kaXN0L3J1bnRpbWUvc2V0QXR0cmlidXRlc1dpdGhvdXRBdHRyaWJ1dGVzLmpzXCI7XG4gICAgICBpbXBvcnQgaW5zZXJ0U3R5bGVFbGVtZW50IGZyb20gXCIhLi4vLi4vLi4vc3R5bGUtbG9hZGVyL2Rpc3QvcnVudGltZS9pbnNlcnRTdHlsZUVsZW1lbnQuanNcIjtcbiAgICAgIGltcG9ydCBzdHlsZVRhZ1RyYW5zZm9ybUZuIGZyb20gXCIhLi4vLi4vLi4vc3R5bGUtbG9hZGVyL2Rpc3QvcnVudGltZS9zdHlsZVRhZ1RyYW5zZm9ybS5qc1wiO1xuICAgICAgaW1wb3J0IGNvbnRlbnQsICogYXMgbmFtZWRFeHBvcnQgZnJvbSBcIiEhLi4vLi4vLi4vY3NzLWxvYWRlci9kaXN0L2Nqcy5qcyEuL3N0eWxlcy5jc3NcIjtcbiAgICAgIFxuICAgICAgXG5cbnZhciBvcHRpb25zID0ge307XG5cbm9wdGlvbnMuc3R5bGVUYWdUcmFuc2Zvcm0gPSBzdHlsZVRhZ1RyYW5zZm9ybUZuO1xub3B0aW9ucy5zZXRBdHRyaWJ1dGVzID0gc2V0QXR0cmlidXRlcztcbm9wdGlvbnMuaW5zZXJ0ID0gaW5zZXJ0Rm4uYmluZChudWxsLCBcImhlYWRcIik7XG5vcHRpb25zLmRvbUFQSSA9IGRvbUFQSTtcbm9wdGlvbnMuaW5zZXJ0U3R5bGVFbGVtZW50ID0gaW5zZXJ0U3R5bGVFbGVtZW50O1xuXG52YXIgdXBkYXRlID0gQVBJKGNvbnRlbnQsIG9wdGlvbnMpO1xuXG5cblxuZXhwb3J0ICogZnJvbSBcIiEhLi4vLi4vLi4vY3NzLWxvYWRlci9kaXN0L2Nqcy5qcyEuL3N0eWxlcy5jc3NcIjtcbiAgICAgICBleHBvcnQgZGVmYXVsdCBjb250ZW50ICYmIGNvbnRlbnQubG9jYWxzID8gY29udGVudC5sb2NhbHMgOiB1bmRlZmluZWQ7XG4iLCJpbXBvcnQgKiBhcyBncm9rIGZyb20gJ2RhdGFncm9rLWFwaS9ncm9rJztcbmltcG9ydCAqIGFzIHVpIGZyb20gJ2RhdGFncm9rLWFwaS91aSc7XG5pbXBvcnQgKiBhcyBERyBmcm9tICdkYXRhZ3Jvay1hcGkvZGcnO1xuaW1wb3J0IHsgRGltUmVkdWN0aW9uTWV0aG9kcyB9IGZyb20gJy4vdHlwZXMnO1xuaW1wb3J0IHsgREJTY2FuT3B0aW9ucyB9IGZyb20gJy4uL2Z1bmN0aW9uRWRpdG9ycy9kaW1lbnNpb25hbGl0eS1yZWR1Y3Rpb24tZWRpdG9yJztcbmltcG9ydCB7IERJTV9SRURfREVGQVVMVF9QT1NUUFJPQ0VTU0lOR19GVU5DVElPTl9NRVRBLCBESU1fUkVEX1BPU1RQUk9DRVNTSU5HX0ZVTkNUSU9OX1RBRywgRElNX1JFRF9QUkVQUk9DRVNTSU5HX0ZVTkNUSU9OX1RBRywgU1VQUE9SVEVEX0RJU1RBTkNFX0ZVTkNUSU9OU19UQUcsIFNVUFBPUlRFRF9TRU1UWVBFU19UQUcsIFNVUFBPUlRFRF9UWVBFU19UQUcsIFNVUFBPUlRFRF9VTklUU19UQUcgfSBmcm9tICcuLi9mdW5jdGlvbkVkaXRvcnMvY29uc3RzJztcbmltcG9ydCB7IERpc3RhbmNlQWdncmVnYXRpb25NZXRob2RzIH0gZnJvbSAnLi4vZGlzdGFuY2UtbWF0cml4L3R5cGVzJztcbmltcG9ydCB7IFN1YmplY3QgfSBmcm9tICdyeGpzJztcbmltcG9ydCAnLi4vLi4vY3NzL3N0eWxlcy5jc3MnO1xuaW1wb3J0IHsgZ2V0R1BVQWRhcHRlckRlc2NyaXB0aW9uIH0gZnJvbSAnQGRhdGFncm9rLWxpYnJhcmllcy9tYXRoL3NyYy93ZWJHUFUvZ2V0R1BVRGV2aWNlJztcbmV4cG9ydCBjbGFzcyBVTUFQT3B0aW9ucyB7XG4gICAgY29uc3RydWN0b3IoKSB7XG4gICAgICAgIHRoaXMubGVhcm5pbmdSYXRlID0geyB1aU5hbWU6ICdMZWFybmluaWcgcmF0ZScsIHZhbHVlOiAxLCB0b29sdGlwOiAnVGhlIGluaXRpYWwgbGVhcm5pbmcgcmF0ZSBmb3IgdGhlIGVtYmVkZGluZyBvcHRpbWl6YXRpb24nIH07XG4gICAgICAgIC8vIG5Db21wb25lbnRzOiBJRGltUmVkdWN0aW9uUGFyYW0gPVxuICAgICAgICAvLyB7dWlOYW1lOiAnQ29tcG9uZW50cycsIHZhbHVlOiAyLCB0b29sdGlwOiAnVGhlIG51bWJlciBvZiBjb21wb25lbnRzIChkaW1lbnNpb25zKSB0byBwcm9qZWN0IHRoZSBkYXRhIHRvJ307XG4gICAgICAgIHRoaXMubkVwb2NocyA9IHsgdWlOYW1lOiAnRXBvY2hzJywgdmFsdWU6IDAsXG4gICAgICAgICAgICB0b29sdGlwOiAnVGhlIG51bWJlciBvZiBlcG9jaHMgdG8gb3B0aW1pemUgZW1iZWRkaW5ncyB2aWEgU0dELiBDb21wdXRlZCBhdXRvbWF0aWNhbGx5IGlmIHNldCB0byAwJyB9O1xuICAgICAgICB0aGlzLm5OZWlnaGJvcnMgPSB7IHVpTmFtZTogJ05laWdoYm9ycycsIHZhbHVlOiAxNSwgdG9vbHRpcDogJ1RoZSBudW1iZXIgb2YgbmVhcmVzdCBuZWlnaGJvcnMgdG8gY29uc3RydWN0IHRoZSBmdXp6eSBtYW5pZm9sZCcgfTtcbiAgICAgICAgdGhpcy5zcHJlYWQgPSB7IHVpTmFtZTogJ1NwcmVhZCcsIHZhbHVlOiAxLFxuICAgICAgICAgICAgdG9vbHRpcDogYFRoZSBlZmZlY3RpdmUgc2NhbGUgb2YgZW1iZWRkZWQgcG9pbnRzLCB1c2VkIHdpdGggbWluIGRpc3RhbmNlIHRvIGNvbnRyb2wgXG4gICAgdGhlIGNsdW1wZWQvZGlzcGVyc2VkIG5hdHVyZSBvZiB0aGUgZW1iZWRkaW5nYCB9O1xuICAgICAgICB0aGlzLm1pbkRpc3QgPSB7IHVpTmFtZTogJ01pbiBkaXN0YW5jZScsIHZhbHVlOiAwLjEsXG4gICAgICAgICAgICB0b29sdGlwOiBgVGhlIGVmZmVjdGl2ZSBtaW5pbXVtIGRpc3RhbmNlIGJldHdlZW4gZW1iZWRkZWQgcG9pbnRzLCBcbiAgdXNlZCB3aXRoIHNwcmVhZCB0byBjb250cm9sIHRoZSBjbHVtcGVkL2Rpc3BlcnNlZCBuYXR1cmUgb2YgdGhlIGVtYmVkZGluZ2AgfTtcbiAgICAgICAgdGhpcy5yYW5kb21TZWVkID0geyB1aU5hbWU6ICdSYW5kb20gc2VlZCcsIHZhbHVlOiBudWxsLCB0b29sdGlwOiAnUmFuZG9tIHNlZWQnLCB0eXBlOiAnc3RyaW5nJyB9O1xuICAgICAgICB0aGlzLnVzZVdlYkdQVSA9IHsgdWlOYW1lOiAnVXNlIFdlYkdQVScsIHZhbHVlOiBmYWxzZSwgdG9vbHRpcDogJ1VzZSBXZWJHUFUgZm9yIEtOTiBjb21wdXRhdGlvbnMnLCB0eXBlOiAnYm9vbGVhbicsXG4gICAgICAgICAgICBkaXNhYmxlVG9vbHRpcDogJ1dlYkdQVSBpcyBub3QgYXZhaWxhYmxlJyB9O1xuICAgICAgICBnZXRHUFVBZGFwdGVyRGVzY3JpcHRpb24oKS50aGVuKChkZXNjKSA9PiB7XG4gICAgICAgICAgICBpZiAoZGVzYykge1xuICAgICAgICAgICAgICAgIHRoaXMudXNlV2ViR1BVLnRvb2x0aXAgKz0gYCAoJHtkZXNjfSlgO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgdGhpcy51c2VXZWJHUFUudmFsdWUgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICB0aGlzLnVzZVdlYkdQVS5kaXNhYmxlID0gdHJ1ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgfVxuICAgIDtcbn1cbmV4cG9ydCBjbGFzcyBUU05FT3B0aW9ucyB7XG4gICAgLy8gZGltOiBJRGltUmVkdWN0aW9uUGFyYW0gPSB7dWlOYW1lOiAnRGltZW5zaW9uYWxpdHknLCB2YWx1ZTogMiwgdG9vbHRpcDogJ0RpbWVuc2lvbmFsaXR5IG9mIHRoZSBlbWJlZGRpbmcnfTtcbiAgICBjb25zdHJ1Y3RvcigpIHtcbiAgICAgICAgdGhpcy5lcHNpbG9uID0geyB1aU5hbWU6ICdFcHNpbG9uJywgdmFsdWU6IDEwLCB0b29sdGlwOiAnRXBzaWxvbiBpcyBsZWFybmluZyByYXRlJyB9O1xuICAgICAgICB0aGlzLnBlcnBsZXhpdHkgPSB7IHVpTmFtZTogJ1BlcnBsZXhpdHknLCB2YWx1ZTogMzAsIHRvb2x0aXA6ICdSb3VnaGx5IGhvdyBtYW55IG5laWdoYm9ycyBlYWNoIHBvaW50IGluZmx1ZW5jZXMnIH07XG4gICAgfVxuICAgIDtcbn1cbmV4cG9ydCBjbGFzcyBNdWx0aUNvbHVtbkRpbVJlZHVjdGlvbkVkaXRvciB7XG4gICAgY29uc3RydWN0b3IoZWRpdG9yU2V0dGluZ3MgPSB7fSkge1xuICAgICAgICB0aGlzLmVkaXRvclNldHRpbmdzID0ge307XG4gICAgICAgIHRoaXMuY29sdW1uT3B0RWRpdG9ycyA9IFtdO1xuICAgICAgICB0aGlzLmNvbHVtbk9wdEVkaXRvcnNSb290ID0gdWkuZGl2KCk7XG4gICAgICAgIHRoaXMuY29sdW1uUGFyYW1zRWRpdG9yUm9vdCA9IHVpLmRpdigpO1xuICAgICAgICB0aGlzLndlaWdodHNFZGl0b3JSb290ID0gdWkuZGl2KCk7XG4gICAgICAgIHRoaXMuY29sdW1uRnVuY3Rpb25zTWFwID0ge307XG4gICAgICAgIHRoaXMubWV0aG9kc1BhcmFtcyA9IHtcbiAgICAgICAgICAgIFtEaW1SZWR1Y3Rpb25NZXRob2RzLlVNQVBdOiBuZXcgVU1BUE9wdGlvbnMoKSxcbiAgICAgICAgICAgIFtEaW1SZWR1Y3Rpb25NZXRob2RzLlRfU05FXTogbmV3IFRTTkVPcHRpb25zKClcbiAgICAgICAgfTtcbiAgICAgICAgdGhpcy5kYlNjYW5QYXJhbXMgPSBuZXcgREJTY2FuT3B0aW9ucygpO1xuICAgICAgICB0aGlzLm1ldGhvZFNldHRpbmdzRGl2ID0gdWkuaW5wdXRzKFtdKTtcbiAgICAgICAgdGhpcy5kYlNjYW5TZXR0aW5nc0RpdiA9IHVpLmlucHV0cyhbXSk7XG4gICAgICAgIHRoaXMuc3VwcG9ydGVkRnVuY3Rpb25zID0ge307XG4gICAgICAgIHRoaXMucGxvdEVtYmVkZGluZ3NJbnB1dCA9IHVpLmJvb2xJbnB1dCgnUGxvdCBlbWJlZGRpbmdzJywgdHJ1ZSk7XG4gICAgICAgIHRoaXMuY2x1c3RlckVtYmVkZGluZ3NJbnB1dCA9IHVpLmJvb2xJbnB1dCgnQ2x1c3RlciBlbWJlZGRpbmdzJywgZmFsc2UpO1xuICAgICAgICB0aGlzLmFnZ3JlZ2F0aW9uTWV0aG9kSW5wdXQgPSB1aS5jaG9pY2VJbnB1dCgnQWdncmVnYXRpb24nLCBEaXN0YW5jZUFnZ3JlZ2F0aW9uTWV0aG9kcy5FVUNMSURFQU4sIFtEaXN0YW5jZUFnZ3JlZ2F0aW9uTWV0aG9kcy5FVUNMSURFQU4sIERpc3RhbmNlQWdncmVnYXRpb25NZXRob2RzLk1BTkhBVFRBTl0pO1xuICAgICAgICB0aGlzLmFnZ3JlZ2F0aW9uTWV0aG9kSW5wdXQuc2V0VG9vbHRpcCgnQWdncmVnYXRpb24gbWV0aG9kIGZvciBjb21iaW5pbmcgZGlzdGFuY2VzIGJldHdlZW4gY29sdW1ucycpO1xuICAgICAgICB0aGlzLm9uQ29sdW1uc0NoYW5nZWQgPSBuZXcgU3ViamVjdCgpO1xuICAgICAgICB0aGlzLmVkaXRvclNldHRpbmdzID0gZWRpdG9yU2V0dGluZ3M7XG4gICAgICAgIHRoaXMuY29sdW1uUGFyYW1zRWRpdG9yQWNjb3JkaW9uID0gdWkuYWNjb3JkaW9uKCk7XG4gICAgICAgIGNvbnN0IHByZXBvcmNlc3NpbmdGdW5jcyA9IERHLkZ1bmMuZmluZCh7IHRhZ3M6IFtESU1fUkVEX1BSRVBST0NFU1NJTkdfRlVOQ1RJT05fVEFHXSB9KTtcbiAgICAgICAgcHJlcG9yY2Vzc2luZ0Z1bmNzLmZvckVhY2goKGYpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHNlbVR5cGVzID0gZi5vcHRpb25zLmdldChTVVBQT1JURURfU0VNVFlQRVNfVEFHKSA/PyAnJztcbiAgICAgICAgICAgIGNvbnN0IG5hbWUgPSBmLmZyaWVuZGx5TmFtZSA/PyBmLm5hbWU7XG4gICAgICAgICAgICBjb25zdCB0eXBlcyA9IGYub3B0aW9ucy5nZXQoU1VQUE9SVEVEX1RZUEVTX1RBRykgPz8gJyc7XG4gICAgICAgICAgICBjb25zdCB1bml0cyA9IGYub3B0aW9ucy5nZXQoU1VQUE9SVEVEX1VOSVRTX1RBRykgPz8gJyc7XG4gICAgICAgICAgICBjb25zdCBkaXN0YW5jZUZ1bmN0aW9ucyA9IGYub3B0aW9ucy5nZXQoU1VQUE9SVEVEX0RJU1RBTkNFX0ZVTkNUSU9OU19UQUcpID8/ICcnO1xuICAgICAgICAgICAgaWYgKHRoaXMuZWRpdG9yU2V0dGluZ3Muc2VtdHlwZSAmJiAhc2VtVHlwZXMuaW5jbHVkZXModGhpcy5lZGl0b3JTZXR0aW5ncy5zZW10eXBlKSlcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICBpZiAodGhpcy5lZGl0b3JTZXR0aW5ncy50eXBlICYmICF0eXBlcy5pbmNsdWRlcyh0aGlzLmVkaXRvclNldHRpbmdzLnR5cGUpKVxuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIGlmICh0aGlzLmVkaXRvclNldHRpbmdzLnVuaXRzICYmICF1bml0cy5pbmNsdWRlcyh0aGlzLmVkaXRvclNldHRpbmdzLnVuaXRzKSlcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB0aGlzLnN1cHBvcnRlZEZ1bmN0aW9uc1tuYW1lXSA9IHtcbiAgICAgICAgICAgICAgICBmdW5jOiBmLFxuICAgICAgICAgICAgICAgIHNlbVR5cGVzOiBzZW1UeXBlcyA/IHNlbVR5cGVzLnNwbGl0KCcsJykgOiBbXSxcbiAgICAgICAgICAgICAgICB0eXBlczogdHlwZXMgPyB0eXBlcy5zcGxpdCgnLCcpIDogW10sXG4gICAgICAgICAgICAgICAgdW5pdHM6IHVuaXRzID8gdW5pdHMuc3BsaXQoJywnKSA6IFtdLFxuICAgICAgICAgICAgICAgIGRpc3RhbmNlRnVuY3Rpb25zOiBkaXN0YW5jZUZ1bmN0aW9ucyA/IGRpc3RhbmNlRnVuY3Rpb25zLnNwbGl0KCcsJykgOiBbXSxcbiAgICAgICAgICAgIH07XG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLnBvc3RQcm9jZXNzaW5nRWRpdG9yID0gbmV3IFBvc3RQcm9jZXNzaW5nRnVuY0VkaXRvcigpO1xuICAgICAgICB0aGlzLnRhYmxlSW5wdXQgPSB1aS50YWJsZUlucHV0KCdUYWJsZScsIGdyb2suc2hlbGwudHYuZGF0YUZyYW1lLCBncm9rLnNoZWxsLnRhYmxlcywgKCkgPT4ge1xuICAgICAgICAgICAgdGhpcy5vblRhYmxlSW5wdXRDaGFuZ2VkKCk7XG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLm9uVGFibGVJbnB1dENoYW5nZWQoKTtcbiAgICAgICAgbGV0IHNldHRpbmdzT3BlbmVkID0gZmFsc2U7XG4gICAgICAgIGxldCBkYlNjYW5TZXR0aW5nc09wZW5lZCA9IGZhbHNlO1xuICAgICAgICB0aGlzLm1ldGhvZElucHV0ID0gdWkuY2hvaWNlSW5wdXQoJ01ldGhvZCcsIERpbVJlZHVjdGlvbk1ldGhvZHMuVU1BUCwgW0RpbVJlZHVjdGlvbk1ldGhvZHMuVU1BUCwgRGltUmVkdWN0aW9uTWV0aG9kcy5UX1NORV0sICgpID0+IHtcbiAgICAgICAgICAgIGlmIChzZXR0aW5nc09wZW5lZClcbiAgICAgICAgICAgICAgICB0aGlzLmNyZWF0ZUFsZ29yaXRobVNldHRpbmdzRGl2KHRoaXMubWV0aG9kU2V0dGluZ3NEaXYsIHRoaXMubWV0aG9kc1BhcmFtc1t0aGlzLm1ldGhvZElucHV0LnZhbHVlXSk7XG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLm1ldGhvZFNldHRpbmdzSWNvbiA9IHVpLmljb25zLnNldHRpbmdzKCgpID0+IHtcbiAgICAgICAgICAgIHNldHRpbmdzT3BlbmVkID0gIXNldHRpbmdzT3BlbmVkO1xuICAgICAgICAgICAgaWYgKCFzZXR0aW5nc09wZW5lZClcbiAgICAgICAgICAgICAgICB1aS5lbXB0eSh0aGlzLm1ldGhvZFNldHRpbmdzRGl2KTtcbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICB0aGlzLmNyZWF0ZUFsZ29yaXRobVNldHRpbmdzRGl2KHRoaXMubWV0aG9kU2V0dGluZ3NEaXYsIHRoaXMubWV0aG9kc1BhcmFtc1t0aGlzLm1ldGhvZElucHV0LnZhbHVlXSk7XG4gICAgICAgIH0sICdNb2RpZnkgbWV0aG9kcyBwYXJhbWV0ZXJzJyk7XG4gICAgICAgIHRoaXMuZGJTY2FuU2V0dGluZ3NJY29uID0gdWkuaWNvbnMuc2V0dGluZ3MoKCkgPT4ge1xuICAgICAgICAgICAgZGJTY2FuU2V0dGluZ3NPcGVuZWQgPSAhZGJTY2FuU2V0dGluZ3NPcGVuZWQ7XG4gICAgICAgICAgICBpZiAoIWRiU2NhblNldHRpbmdzT3BlbmVkKVxuICAgICAgICAgICAgICAgIHVpLmVtcHR5KHRoaXMuZGJTY2FuU2V0dGluZ3NEaXYpO1xuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgIHRoaXMuY3JlYXRlQWxnb3JpdGhtU2V0dGluZ3NEaXYodGhpcy5kYlNjYW5TZXR0aW5nc0RpdiwgdGhpcy5kYlNjYW5QYXJhbXMpO1xuICAgICAgICB9LCAnTW9kaWZ5IGNsdXN0ZXJpbmcgcGFyYW1ldGVycycpO1xuICAgICAgICB0aGlzLmNsdXN0ZXJFbWJlZGRpbmdzSW5wdXQuY2xhc3NMaXN0LmFkZCgnbWwtZGltLXJlZHVjdGlvbi1zZXR0aW5ncy1pbnB1dCcpO1xuICAgICAgICB0aGlzLmNsdXN0ZXJFbWJlZGRpbmdzSW5wdXQucm9vdC5wcmVwZW5kKHRoaXMuZGJTY2FuU2V0dGluZ3NJY29uKTtcbiAgICAgICAgdGhpcy5tZXRob2RJbnB1dC5yb290LmNsYXNzTGlzdC5hZGQoJ21sLWRpbS1yZWR1Y3Rpb24tc2V0dGluZ3MtaW5wdXQnKTtcbiAgICAgICAgdGhpcy5tZXRob2RJbnB1dC5yb290LnByZXBlbmQodGhpcy5tZXRob2RTZXR0aW5nc0ljb24pO1xuICAgICAgICB0aGlzLmNvbHVtblBhcmFtc0VkaXRvckFjY29yZGlvbi5hZGRQYW5lKCdDb2x1bW4gb3B0aW9ucycsICgpID0+IHRoaXMuY29sdW1uT3B0RWRpdG9yc1Jvb3QsIHRydWUsIG51bGwsIGZhbHNlKTtcbiAgICAgICAgdGhpcy5jb2x1bW5QYXJhbXNFZGl0b3JBY2NvcmRpb24ucm9vdC5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnO1xuICAgICAgICB0aGlzLmNvbHVtblBhcmFtc0VkaXRvclJvb3QuYXBwZW5kQ2hpbGQodGhpcy5jb2x1bW5QYXJhbXNFZGl0b3JBY2NvcmRpb24ucm9vdCk7XG4gICAgICAgIHRoaXMuY29sdW1uUGFyYW1zRWRpdG9yUm9vdC5hcHBlbmRDaGlsZCh0aGlzLndlaWdodHNFZGl0b3JSb290KTtcbiAgICB9XG4gICAgb25UYWJsZUlucHV0Q2hhbmdlZCgpIHtcbiAgICAgICAgY29uc3QgdGFibGUgPSB0aGlzLnRhYmxlSW5wdXQudmFsdWU7XG4gICAgICAgIGlmICghdGFibGUpXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIHVpLmVtcHR5KHRoaXMuY29sdW1uT3B0RWRpdG9yc1Jvb3QpO1xuICAgICAgICB1aS5lbXB0eSh0aGlzLndlaWdodHNFZGl0b3JSb290KTtcbiAgICAgICAgdGhpcy5jb2x1bW5GdW5jdGlvbnNNYXAgPSB7fTtcbiAgICAgICAgY29uc3QgY29sdW1ucyA9IHRhYmxlLmNvbHVtbnMudG9MaXN0KCk7XG4gICAgICAgIGNvbHVtbnMuZm9yRWFjaCgoY29sKSA9PiB7XG4gICAgICAgICAgICBPYmplY3Qua2V5cyh0aGlzLnN1cHBvcnRlZEZ1bmN0aW9ucykuZm9yRWFjaCgoZnVuY05hbWUpID0+IHtcbiAgICAgICAgICAgICAgICBjb25zdCBzZW1UeXBlcyA9IHRoaXMuc3VwcG9ydGVkRnVuY3Rpb25zW2Z1bmNOYW1lXS5zZW1UeXBlcztcbiAgICAgICAgICAgICAgICBjb25zdCB0eXBlcyA9IHRoaXMuc3VwcG9ydGVkRnVuY3Rpb25zW2Z1bmNOYW1lXS50eXBlcztcbiAgICAgICAgICAgICAgICBjb25zdCB1bml0cyA9IHRoaXMuc3VwcG9ydGVkRnVuY3Rpb25zW2Z1bmNOYW1lXS51bml0cztcbiAgICAgICAgICAgICAgICBjb25zdCBzZW1UeXBlU3VwcG9ydGVkID0gIXNlbVR5cGVzLmxlbmd0aCB8fCAoY29sLnNlbVR5cGUgJiYgc2VtVHlwZXMuaW5jbHVkZXMoY29sLnNlbVR5cGUpKTtcbiAgICAgICAgICAgICAgICBjb25zdCB0eXBlU3Vwb3J0ZWQgPSAhdHlwZXMubGVuZ3RoIHx8IHR5cGVzLmluY2x1ZGVzKGNvbC50eXBlKTtcbiAgICAgICAgICAgICAgICBjb25zdCB1bml0c1N1cHBvcnRlZCA9ICF1bml0cy5sZW5ndGggfHxcbiAgICAgICAgICAgICAgICAgICAgKGNvbC5nZXRUYWcoREcuVEFHUy5VTklUUykgJiYgdW5pdHMuaW5jbHVkZXMoY29sLmdldFRhZyhERy5UQUdTLlVOSVRTKSkpO1xuICAgICAgICAgICAgICAgIGlmIChzZW1UeXBlU3VwcG9ydGVkICYmIHR5cGVTdXBvcnRlZCAmJiB1bml0c1N1cHBvcnRlZCkge1xuICAgICAgICAgICAgICAgICAgICBpZiAoIXRoaXMuY29sdW1uRnVuY3Rpb25zTWFwW2NvbC5uYW1lXSlcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY29sdW1uRnVuY3Rpb25zTWFwW2NvbC5uYW1lXSA9IFtdO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmNvbHVtbkZ1bmN0aW9uc01hcFtjb2wubmFtZV0ucHVzaChmdW5jTmFtZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH0pO1xuICAgICAgICBjb25zdCBzdXBwb3J0ZWRDb2xOYW1lcyA9IE9iamVjdC5rZXlzKHRoaXMuY29sdW1uRnVuY3Rpb25zTWFwKTtcbiAgICAgICAgY29uc3QgY29sdW1uc0lucHV0ID0gdWkuY29sdW1uc0lucHV0KCdDb2x1bW5zJywgdGFibGUsICgpID0+IHtcbiAgICAgICAgICAgIHRoaXMub25Db2x1bW5zQ2hhbmdlZC5uZXh0KCk7XG4gICAgICAgICAgICB1aS5lbXB0eSh0aGlzLmNvbHVtbk9wdEVkaXRvcnNSb290KTtcbiAgICAgICAgICAgIHVpLmVtcHR5KHRoaXMud2VpZ2h0c0VkaXRvclJvb3QpO1xuICAgICAgICAgICAgY29uc3QgY29scyA9IGNvbHVtbnNJbnB1dC52YWx1ZTtcbiAgICAgICAgICAgIGlmICghY29scyB8fCBjb2xzPy5sZW5ndGggPCAyKVxuICAgICAgICAgICAgICAgIHRoaXMuYWdncmVnYXRpb25NZXRob2RJbnB1dC5yb290LnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7XG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgdGhpcy5hZ2dyZWdhdGlvbk1ldGhvZElucHV0LnJvb3Quc3R5bGUuZGlzcGxheSA9ICdmbGV4JztcbiAgICAgICAgICAgIGlmICghY29scyB8fCBjb2xzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICAgICAgICAgIHRoaXMuY29sdW1uUGFyYW1zRWRpdG9yQWNjb3JkaW9uLnJvb3Quc3R5bGUuZGlzcGxheSA9ICdub25lJztcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjb25zdCBlZGl0b3JXaWR0aHMgPSBbMjAsIDMwLCAzMCwgMjBdO1xuICAgICAgICAgICAgdGhpcy5jb2x1bW5PcHRFZGl0b3JzID0gY29scy5tYXAoKGNvbCkgPT4ge1xuICAgICAgICAgICAgICAgIGNvbnN0IGVkaXRvckNsYXNzID0gbmV3IERpbVJlZHVjdGlvbkNvbHVtbkVkaXRvcihjb2wsIHRoaXMuY29sdW1uRnVuY3Rpb25zTWFwW2NvbC5uYW1lXS5tYXAoKGl0KSA9PiB0aGlzLnN1cHBvcnRlZEZ1bmN0aW9uc1tpdF0pLCBlZGl0b3JXaWR0aHMpO1xuICAgICAgICAgICAgICAgIHJldHVybiBlZGl0b3JDbGFzcztcbiAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgY29uc3QgZWRpdG9yVGl0bGVzID0gWydDb2x1bW4nLCAnRW5jb2RpbmcgZnVuY3Rpb24nLCAnU2ltaWxhcml0eSBtZXRyaWMnLCAnV2VpZ2h0J10ubWFwKChpdCwgaSkgPT4gdWkuaDEoaXQsIHsgc3R5bGU6IHsgd2lkdGg6IGAke2VkaXRvcldpZHRoc1tpXX0lYCwgbWFyZ2luOiAwIH0gfSkpO1xuICAgICAgICAgICAgdWkudG9vbHRpcC5iaW5kKGVkaXRvclRpdGxlc1sxXSwgJ0VuY29kaW5nIGZ1bmN0aW9uIGZvciB0aGUgY29sdW1uIHZhbHVlcycpO1xuICAgICAgICAgICAgdWkudG9vbHRpcC5iaW5kKGVkaXRvclRpdGxlc1syXSwgJ0Rpc3RhbmNlL1NpbWlsYXJpdHkgbWV0cmljIGZvciB0aGUgZW5jb2RlZCBjb2x1bW4gdmFsdWVzJyk7XG4gICAgICAgICAgICB1aS50b29sdGlwLmJpbmQoZWRpdG9yVGl0bGVzWzNdLCAnV2VpZ2h0IG9mIHRoZSBjb2x1bW4gZm9yIGNvbWJpbmluZyBkaXN0YW5jZXMgYmV0d2VlbiB2YWx1ZXMnKTtcbiAgICAgICAgICAgIGNvbnN0IGVkaXRvclRpdGxlUm9vdCA9IHVpLmRpdkgoZWRpdG9yVGl0bGVzLCB7IGNsYXNzZXM6ICdtbC1kaW0tcmVkdWN0aW9uLWNvbHVtbi1lZGl0b3ItaGVhZGVyLXJvb3QnIH0pO1xuICAgICAgICAgICAgdGhpcy5jb2x1bW5PcHRFZGl0b3JzUm9vdC5hcHBlbmRDaGlsZChlZGl0b3JUaXRsZVJvb3QpO1xuICAgICAgICAgICAgY29uc3QgZWRpdG9yc1Jvb3QgPSB1aS5kaXZWKFtdLCB7IHN0eWxlOiB7IG1heEhlaWdodDogJzQwMHB4Jywgb3ZlcmZsb3c6ICdhdXRvJyB9IH0pO1xuICAgICAgICAgICAgdGhpcy5jb2x1bW5PcHRFZGl0b3JzLmZvckVhY2goKGVkaXRvcikgPT4ge1xuICAgICAgICAgICAgICAgIGVkaXRvcnNSb290LmFwcGVuZENoaWxkKGVkaXRvci5hY2NvcmRpb25EaXYpO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICB0aGlzLmNvbHVtbk9wdEVkaXRvcnNSb290LmFwcGVuZENoaWxkKGVkaXRvcnNSb290KTtcbiAgICAgICAgICAgIGlmICh0aGlzLmNvbHVtbk9wdEVkaXRvcnMubGVuZ3RoID4gMClcbiAgICAgICAgICAgICAgICB0aGlzLmNvbHVtblBhcmFtc0VkaXRvckFjY29yZGlvbi5yb290LnN0eWxlLmRpc3BsYXkgPSAnZmxleCc7XG4gICAgICAgIH0sIHsgYXZhaWxhYmxlOiBzdXBwb3J0ZWRDb2xOYW1lcyB9KTtcbiAgICAgICAgY29sdW1uc0lucHV0LmZpcmVDaGFuZ2VkKCk7XG4gICAgICAgIGlmICghdGhpcy5jb2x1bW5zSW5wdXRSb290KSB7XG4gICAgICAgICAgICB0aGlzLmNvbHVtbnNJbnB1dFJvb3QgPSBjb2x1bW5zSW5wdXQucm9vdDtcbiAgICAgICAgICAgIHRoaXMuY29sdW1uc0lucHV0ID0gY29sdW1uc0lucHV0O1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgdWkuZW1wdHkodGhpcy5jb2x1bW5zSW5wdXRSb290KTtcbiAgICAgICAgICAgIHRoaXMuY29sdW1uc0lucHV0ID0gY29sdW1uc0lucHV0O1xuICAgICAgICAgICAgQXJyYXkuZnJvbSh0aGlzLmNvbHVtbnNJbnB1dC5yb290LmNoaWxkcmVuKVxuICAgICAgICAgICAgICAgIC5mb3JFYWNoKChpdCkgPT4gdGhpcy5jb2x1bW5zSW5wdXRSb290LmFwcGVuZENoaWxkKGl0KSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgY3JlYXRlQWxnb3JpdGhtU2V0dGluZ3NEaXYocGFyYW1zRm9ybSwgcGFyYW1zKSB7XG4gICAgICAgIHVpLmVtcHR5KHBhcmFtc0Zvcm0pO1xuICAgICAgICBPYmplY3Qua2V5cyhwYXJhbXMpLmZvckVhY2goKGl0KSA9PiB7XG4gICAgICAgICAgICBjb25zdCBwYXJhbSA9IHBhcmFtc1tpdF07XG4gICAgICAgICAgICBjb25zdCBpbnB1dCA9IHBhcmFtLnR5cGUgPT09ICdzdHJpbmcnID9cbiAgICAgICAgICAgICAgICB1aS5zdHJpbmdJbnB1dChwYXJhbS51aU5hbWUsIHBhcmFtLnZhbHVlID8/ICcnLCAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHBhcmFtLnZhbHVlID0gaW5wdXQudmFsdWU7XG4gICAgICAgICAgICAgICAgfSkgOiBwYXJhbS50eXBlID09PSAnYm9vbGVhbicgP1xuICAgICAgICAgICAgICAgIHVpLmJvb2xJbnB1dChwYXJhbS51aU5hbWUsIHBhcmFtLnZhbHVlID8/IGZhbHNlLCAoKSA9PiB7XG4gICAgICAgICAgICAgICAgICAgIHBhcmFtLnZhbHVlID0gaW5wdXQudmFsdWU7XG4gICAgICAgICAgICAgICAgfSkgOlxuICAgICAgICAgICAgICAgIHVpLmZsb2F0SW5wdXQocGFyYW0udWlOYW1lLCBwYXJhbS52YWx1ZSwgKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICBwYXJhbS52YWx1ZSA9IGlucHV0LnZhbHVlO1xuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgaWYgKHBhcmFtLmRpc2FibGUpIHtcbiAgICAgICAgICAgICAgICBpbnB1dC5lbmFibGVkID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgdWkudG9vbHRpcC5iaW5kKGlucHV0LmlucHV0ID8/IGlucHV0LnJvb3QsIHBhcmFtLmRpc2FibGVUb29sdGlwID8/ICcnKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIHVpLnRvb2x0aXAuYmluZChpbnB1dC5pbnB1dCA/PyBpbnB1dC5yb290LCBwYXJhbS50b29sdGlwKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIHBhcmFtc0Zvcm0uYXBwZW5kKGlucHV0LnJvb3QpO1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIHBhcmFtc0Zvcm07XG4gICAgfVxuICAgIGdldCBhbGdvcml0aG1PcHRpb25zKCkge1xuICAgICAgICBjb25zdCBhbGdvcml0aG1QYXJhbXMgPSB0aGlzLm1ldGhvZHNQYXJhbXNbdGhpcy5tZXRob2RJbnB1dC52YWx1ZV07XG4gICAgICAgIGNvbnN0IG9wdGlvbnMgPSB7fTtcbiAgICAgICAgT2JqZWN0LmtleXMoYWxnb3JpdGhtUGFyYW1zKS5mb3JFYWNoKChrZXkpID0+IHtcbiAgICAgICAgICAgIGlmIChhbGdvcml0aG1QYXJhbXNba2V5XS52YWx1ZSAhPSBudWxsKVxuICAgICAgICAgICAgICAgIG9wdGlvbnNba2V5XSA9IGFsZ29yaXRobVBhcmFtc1trZXldLnZhbHVlO1xuICAgICAgICB9KTtcbiAgICAgICAgcmV0dXJuIG9wdGlvbnM7XG4gICAgfVxuICAgIGdldCBkYlNjYW5PcHRpb25zKCkge1xuICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgZGJTY2FuRXBzaWxvbjogdGhpcy5kYlNjYW5QYXJhbXMuZXBzaWxvbi52YWx1ZSA/PyAwLjAxLFxuICAgICAgICAgICAgZGJTY2FuTWluUHRzOiB0aGlzLmRiU2NhblBhcmFtcy5taW5QdHMudmFsdWUgPz8gNFxuICAgICAgICB9O1xuICAgIH1cbiAgICBnZXRFZGl0b3IoKSB7XG4gICAgICAgIGNvbnN0IGRpdiA9IHVpLmRpdihbXG4gICAgICAgICAgICB0aGlzLnRhYmxlSW5wdXQucm9vdCxcbiAgICAgICAgICAgIHRoaXMuY29sdW1uc0lucHV0Um9vdCxcbiAgICAgICAgICAgIHRoaXMuY29sdW1uUGFyYW1zRWRpdG9yUm9vdCxcbiAgICAgICAgICAgIHRoaXMuYWdncmVnYXRpb25NZXRob2RJbnB1dC5yb290LFxuICAgICAgICAgICAgdGhpcy5tZXRob2RJbnB1dC5yb290LFxuICAgICAgICAgICAgdGhpcy5tZXRob2RTZXR0aW5nc0RpdixcbiAgICAgICAgICAgIHRoaXMucGxvdEVtYmVkZGluZ3NJbnB1dCxcbiAgICAgICAgICAgIHRoaXMucG9zdFByb2Nlc3NpbmdFZGl0b3Iucm9vdCxcbiAgICAgICAgXSwgeyBzdHlsZTogeyBtaW5XaWR0aDogJzQyMHB4JyB9LCBjbGFzc2VzOiAndWktZm9ybScgfSk7XG4gICAgICAgIHJldHVybiBkaXY7XG4gICAgfVxuICAgIGdldFBhcmFtcygpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHRhYmxlOiB0aGlzLnRhYmxlSW5wdXQudmFsdWUsXG4gICAgICAgICAgICBjb2x1bW5zOiB0aGlzLmNvbHVtbnNJbnB1dC52YWx1ZSxcbiAgICAgICAgICAgIG1ldGhvZE5hbWU6IHRoaXMubWV0aG9kSW5wdXQudmFsdWUsXG4gICAgICAgICAgICBwcmVwcm9jZXNzaW5nRnVuY3Rpb25zOiB0aGlzLmNvbHVtbk9wdEVkaXRvcnMubWFwKChpdCkgPT4gaXQucHJlUHJvY2Vzc2luZ0Z1bmN0aW9uKSxcbiAgICAgICAgICAgIGRpc3RhbmNlTWV0cmljczogdGhpcy5jb2x1bW5PcHRFZGl0b3JzLm1hcCgoaXQpID0+IGl0LnNpbWlsYXJpdHlNZXRyaWNJbnB1dC52YWx1ZSksXG4gICAgICAgICAgICB3ZWlnaHRzOiB0aGlzLmNvbHVtbk9wdEVkaXRvcnMubWFwKChpdCkgPT4gaXQud2VpZ2h0ID8/IDEpLFxuICAgICAgICAgICAgb3B0aW9uczogeyAuLi50aGlzLmFsZ29yaXRobU9wdGlvbnMsIC4uLnRoaXMuZGJTY2FuT3B0aW9ucyxcbiAgICAgICAgICAgICAgICBwcmVwcm9jZXNzaW5nRnVuY0FyZ3M6IHRoaXMuY29sdW1uT3B0RWRpdG9ycy5tYXAoKGl0KSA9PiBpdC5wcmVwcm9jZXNzaW5nRnVuY3Rpb25TZXR0aW5ncykgfSxcbiAgICAgICAgICAgIHBsb3RFbWJlZGRpbmdzOiB0aGlzLnBsb3RFbWJlZGRpbmdzSW5wdXQudmFsdWUsXG4gICAgICAgICAgICBjbHVzdGVyRW1iZWRkaW5nczogZmFsc2UsXG4gICAgICAgICAgICBwb3N0UHJvY2Vzc2luZ0Z1bmN0aW9uOiB0aGlzLnBvc3RQcm9jZXNzaW5nRWRpdG9yLnBvc3RQcm9jZXNzaW5nRnVuY3Rpb24sXG4gICAgICAgICAgICBwb3N0UHJvY2Vzc2luZ0Z1bmN0aW9uQXJnczogdGhpcy5wb3N0UHJvY2Vzc2luZ0VkaXRvci5hcmdzLFxuICAgICAgICAgICAgYWdncmVhZ2dyZWdhdGlvbk1ldGhvZDogdGhpcy5hZ2dyZWdhdGlvbk1ldGhvZElucHV0LnZhbHVlXG4gICAgICAgIH07XG4gICAgfVxufVxuY2xhc3MgRGltUmVkdWN0aW9uQ29sdW1uRWRpdG9yIHtcbiAgICBjb25zdHJ1Y3Rvcihjb2x1bW4sIHN1cHBvcnRlZEZ1bmN0aW9ucywgZWRpdG9yV2lkdGhzKSB7XG4gICAgICAgIHRoaXMucHJlcHJvY2Vzc2luZ0Z1bmNTZXR0aW5nc0RpdiA9IHVpLmRpdihbXSk7XG4gICAgICAgIHRoaXMucHJlcHJvY2Vzc2luZ0Z1bmN0aW9uU2V0dGluZ3MgPSB7fTtcbiAgICAgICAgdGhpcy5lZGl0b3JEaXYgPSB1aS5kaXYoW10pO1xuICAgICAgICB0aGlzLmhhc0V4dHJhU2V0dGluZ3MgPSB0cnVlO1xuICAgICAgICB0aGlzLmZ1bmN0aW9uc01hcCA9IHt9O1xuICAgICAgICB0aGlzLm5lZWRzQ29uZmlndXJhdGlvbiA9IGZhbHNlO1xuICAgICAgICB0aGlzLndlaWdodCA9IDE7XG4gICAgICAgIHRoaXMud2VpZ2h0SW5wdXQgPSB1aS5mbG9hdElucHV0KCdXZWlnaHQnLCAxLCAoKSA9PiB7IHRoaXMud2VpZ2h0ID0gdGhpcy53ZWlnaHRJbnB1dC52YWx1ZSA/PyAxOyB9KTtcbiAgICAgICAgdGhpcy5jb2x1bW4gPSBjb2x1bW47XG4gICAgICAgIC8vIHNvcnQgYnkgc3BlY2lmaWNpdHlcbiAgICAgICAgdGhpcy5zdXBwb3J0ZWRGdW5jdGlvbnMgPSBzdXBwb3J0ZWRGdW5jdGlvbnMuc29ydCgoYSwgYikgPT4ge1xuICAgICAgICAgICAgaWYgKChhLnVuaXRzLmxlbmd0aCA9PT0gMCB8fCBiLnVuaXRzLmxlbmd0aCA9PT0gMCkgJiYgYS51bml0cy5sZW5ndGggIT09IGIudW5pdHMubGVuZ3RoKVxuICAgICAgICAgICAgICAgIHJldHVybiBiLnVuaXRzLmxlbmd0aCAtIGEudW5pdHMubGVuZ3RoO1xuICAgICAgICAgICAgaWYgKGEudW5pdHMubGVuZ3RoICE9PSBiLnVuaXRzLmxlbmd0aClcbiAgICAgICAgICAgICAgICByZXR1cm4gYS51bml0cy5sZW5ndGggLSBiLnVuaXRzLmxlbmd0aDtcbiAgICAgICAgICAgIGlmIChhLnNlbVR5cGVzLmxlbmd0aCA9PT0gMCB8fCBiLnNlbVR5cGVzLmxlbmd0aCA9PT0gMClcbiAgICAgICAgICAgICAgICByZXR1cm4gYi5zZW1UeXBlcy5sZW5ndGggLSBhLnNlbVR5cGVzLmxlbmd0aDtcbiAgICAgICAgICAgIGlmIChhLnNlbVR5cGVzLmxlbmd0aCAhPT0gYi5zZW1UeXBlcy5sZW5ndGgpXG4gICAgICAgICAgICAgICAgcmV0dXJuIGEuc2VtVHlwZXMubGVuZ3RoIC0gYi5zZW1UeXBlcy5sZW5ndGg7XG4gICAgICAgICAgICByZXR1cm4gYS50eXBlcy5sZW5ndGggLSBiLnR5cGVzLmxlbmd0aDtcbiAgICAgICAgfSk7XG4gICAgICAgIHRoaXMuc3VwcG9ydGVkRnVuY3Rpb25zLmZvckVhY2goKGYpID0+IHtcbiAgICAgICAgICAgIHRoaXMuZnVuY3Rpb25zTWFwW2dldEZ1bmNOYW1lKGYuZnVuYyldID0gZi5mdW5jO1xuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5wcmVwcm9jZXNzaW5nRnVuY3Rpb25JbnB1dCA9IHVpLmNob2ljZUlucHV0KCdFbmNvZGluZyBmdW5jdGlvbicsIGdldEZ1bmNOYW1lKHRoaXMuc3VwcG9ydGVkRnVuY3Rpb25zWzBdLmZ1bmMpLCB0aGlzLnN1cHBvcnRlZEZ1bmN0aW9ucy5tYXAoKGl0KSA9PiBnZXRGdW5jTmFtZShpdC5mdW5jKSksICgpID0+IHtcbiAgICAgICAgICAgIGNvbnN0IHZhbCA9IHRoaXMucHJlcHJvY2Vzc2luZ0Z1bmN0aW9uSW5wdXQudmFsdWU7XG4gICAgICAgICAgICBjb25zdCBmdW5jID0gdGhpcy5mdW5jdGlvbnNNYXBbdmFsXTtcbiAgICAgICAgICAgIHRoaXMucHJlcHJvY2Vzc2luZ0Z1bmN0aW9uU2V0dGluZ3MgPSB7fTtcbiAgICAgICAgICAgIHRoaXMuaGFzRXh0cmFTZXR0aW5ncyA9IGZ1bmMuaW5wdXRzLmxlbmd0aCA+IDI7XG4gICAgICAgICAgICBjb25zdCBzdXBGID0gdGhpcy5zdXBwb3J0ZWRGdW5jdGlvbnMuZmluZCgoaXQpID0+IGdldEZ1bmNOYW1lKGl0LmZ1bmMpID09PSB2YWwpO1xuICAgICAgICAgICAgdGhpcy5nZXRTaW1pbGFyaXR5TWV0cmljSW5wdXQoc3VwRik7XG4gICAgICAgICAgICB1aS5lbXB0eSh0aGlzLnByZXByb2Nlc3NpbmdGdW5jU2V0dGluZ3NEaXYpO1xuICAgICAgICAgICAgc2V0dGluZ3NPcGVuZWQgPSBmYWxzZTtcbiAgICAgICAgICAgIGlmICghdGhpcy5oYXNFeHRyYVNldHRpbmdzKVxuICAgICAgICAgICAgICAgIHRoaXMucHJlcHJvY2Vzc2luZ0Z1bmNTZXR0aW5nc0ljb24uc3R5bGUuZGlzcGxheSA9ICdub25lJztcbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICB0aGlzLnByZXByb2Nlc3NpbmdGdW5jU2V0dGluZ3NJY29uLnN0eWxlLmRpc3BsYXkgPSAnZmxleCc7XG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLnByZXByb2Nlc3NpbmdGdW5jdGlvbklucHV0LnJvb3Quc3R5bGUuZGlzcGxheSA9ICdmbGV4JztcbiAgICAgICAgdGhpcy5jcmVhdGVTZXR0aW5nc0Rpdih0aGlzLnByZXByb2Nlc3NpbmdGdW5jU2V0dGluZ3NEaXYsIHRoaXMuc3VwcG9ydGVkRnVuY3Rpb25zWzBdLmZ1bmMpXG4gICAgICAgICAgICAudGhlbigoKSA9PiB7IHVpLmVtcHR5KHRoaXMucHJlcHJvY2Vzc2luZ0Z1bmNTZXR0aW5nc0Rpdik7IH0pO1xuICAgICAgICB0aGlzLmdldFNpbWlsYXJpdHlNZXRyaWNJbnB1dCh0aGlzLnN1cHBvcnRlZEZ1bmN0aW9uc1swXSk7XG4gICAgICAgIHRoaXMuaGFzRXh0cmFTZXR0aW5ncyA9IHRoaXMuc3VwcG9ydGVkRnVuY3Rpb25zWzBdLmZ1bmMuaW5wdXRzLmxlbmd0aCA+IDI7XG4gICAgICAgIGxldCBzZXR0aW5nc09wZW5lZCA9IGZhbHNlO1xuICAgICAgICB0aGlzLnByZXByb2Nlc3NpbmdGdW5jU2V0dGluZ3NJY29uID0gdWkuaWNvbnMuc2V0dGluZ3MoYXN5bmMgKCkgPT4ge1xuICAgICAgICAgICAgc2V0dGluZ3NPcGVuZWQgPSAhc2V0dGluZ3NPcGVuZWQ7XG4gICAgICAgICAgICBpZiAoc2V0dGluZ3NPcGVuZWQpIHtcbiAgICAgICAgICAgICAgICBhd2FpdCB0aGlzLmNyZWF0ZVNldHRpbmdzRGl2KHRoaXMucHJlcHJvY2Vzc2luZ0Z1bmNTZXR0aW5nc0RpdiwgdGhpcy5mdW5jdGlvbnNNYXBbdGhpcy5wcmVwcm9jZXNzaW5nRnVuY3Rpb25JbnB1dC52YWx1ZV0pO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgdWkuZW1wdHkodGhpcy5wcmVwcm9jZXNzaW5nRnVuY1NldHRpbmdzRGl2KTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSwgJ01vZGlmeSBlbmNvZGluZyBmdW5jdGlvbiBwYXJhbWV0ZXJzJyk7XG4gICAgICAgIHRoaXMucHJlcHJvY2Vzc2luZ0Z1bmN0aW9uSW5wdXQucm9vdC5jbGFzc0xpc3QuYWRkKCdtbC1kaW0tcmVkdWN0aW9uLXNldHRpbmdzLWlucHV0Jyk7XG4gICAgICAgIHRoaXMucHJlcHJvY2Vzc2luZ0Z1bmN0aW9uSW5wdXQucm9vdC5wcmVwZW5kKHRoaXMucHJlcHJvY2Vzc2luZ0Z1bmNTZXR0aW5nc0ljb24pO1xuICAgICAgICBpZiAoIXRoaXMuaGFzRXh0cmFTZXR0aW5ncylcbiAgICAgICAgICAgIHRoaXMucHJlcHJvY2Vzc2luZ0Z1bmNTZXR0aW5nc0ljb24uc3R5bGUuZGlzcGxheSA9ICdub25lJztcbiAgICAgICAgZWxzZVxuICAgICAgICAgICAgdGhpcy5wcmVwcm9jZXNzaW5nRnVuY1NldHRpbmdzSWNvbi5zdHlsZS5kaXNwbGF5ID0gJ2ZsZXgnO1xuICAgICAgICB0aGlzLm5lZWRzQ29uZmlndXJhdGlvbiA9ICEoc3VwcG9ydGVkRnVuY3Rpb25zLmxlbmd0aCA8IDIgJiYgIXRoaXMuaGFzRXh0cmFTZXR0aW5ncyAmJlxuICAgICAgICAgICAgc3VwcG9ydGVkRnVuY3Rpb25zWzBdLmRpc3RhbmNlRnVuY3Rpb25zLmxlbmd0aCA8IDIpO1xuICAgICAgICBjb25zdCBjb2x1bW5UaXRsZSA9IHVpLmgzKHRoaXMuY29sdW1uLm5hbWUsIHsgY2xhc3NlczogJ21sLWRpbS1yZWR1Y3Rpb24tY29sdW1uLWVkaXRvci1jb2x1bW4tdGl0bGUnIH0pO1xuICAgICAgICBjb25zdCBjb2xPcHRFZGl0b3JzID0gW1xuICAgICAgICAgICAgY29sdW1uVGl0bGUsIHRoaXMucHJlcHJvY2Vzc2luZ0Z1bmN0aW9uSW5wdXQucm9vdCxcbiAgICAgICAgICAgIHRoaXMuc2ltaWxhcml0eU1ldHJpY0lucHV0Um9vdCwgdGhpcy53ZWlnaHRJbnB1dC5yb290XG4gICAgICAgIF07XG4gICAgICAgIC8vIGFzc2lnbiB0b29sdGlwc1xuICAgICAgICB1aS50b29sdGlwLmJpbmQoY29sdW1uVGl0bGUsIHRoaXMuY29sdW1uLm5hbWUpO1xuICAgICAgICBjb2xPcHRFZGl0b3JzLmZvckVhY2goKGl0LCBpKSA9PiB7XG4gICAgICAgICAgICBpdC5zdHlsZS53aWR0aCA9IGAke2VkaXRvcldpZHRoc1tpXX0lYDtcbiAgICAgICAgfSk7XG4gICAgICAgIC8vYWRkIGNsYXNzZXNcbiAgICAgICAgY29sT3B0RWRpdG9ycy5mb3JFYWNoKChpdCkgPT4gaXQuY2xhc3NMaXN0LmFkZCgnbWwtZGltLXJlZHVjdGlvbi1jb2x1bW4tZWRpdG9yLWlucHV0LXJvb3QnKSk7XG4gICAgICAgIGNvbnN0IGRpc3RhbmNlT3B0aW9uc0RpdiA9IHVpLmRpdkgoY29sT3B0RWRpdG9ycywgeyBjbGFzc2VzOiAnbWwtZGltLXJlZHVjdGlvbi1jb2x1bW4tZWRpdG9yLXJvb3QnIH0pO1xuICAgICAgICB0aGlzLmFjY29yZGlvbkRpdiA9IHVpLmRpdlYoW10pO1xuICAgICAgICB0aGlzLmVkaXRvckRpdi5hcHBlbmRDaGlsZChkaXN0YW5jZU9wdGlvbnNEaXYpO1xuICAgICAgICB0aGlzLmVkaXRvckRpdi5hcHBlbmRDaGlsZCh0aGlzLnByZXByb2Nlc3NpbmdGdW5jU2V0dGluZ3NEaXYpO1xuICAgICAgICB0aGlzLmFjY29yZGlvbkRpdi5hcHBlbmRDaGlsZCh0aGlzLmVkaXRvckRpdik7XG4gICAgfVxuICAgIGdldFNpbWlsYXJpdHlNZXRyaWNJbnB1dChwcmVGdW5jKSB7XG4gICAgICAgIGNvbnN0IGlucHV0ID0gdWkuY2hvaWNlSW5wdXQoJ1NpbWlsYXJpdHkgbWV0cmljJywgcHJlRnVuYy5kaXN0YW5jZUZ1bmN0aW9uc1swXSwgcHJlRnVuYy5kaXN0YW5jZUZ1bmN0aW9ucyk7XG4gICAgICAgIGlmICghdGhpcy5zaW1pbGFyaXR5TWV0cmljSW5wdXRSb290KSB7XG4gICAgICAgICAgICB0aGlzLnNpbWlsYXJpdHlNZXRyaWNJbnB1dFJvb3QgPSBpbnB1dC5yb290O1xuICAgICAgICAgICAgdGhpcy5zaW1pbGFyaXR5TWV0cmljSW5wdXQgPSBpbnB1dDtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHVpLmVtcHR5KHRoaXMuc2ltaWxhcml0eU1ldHJpY0lucHV0Um9vdCk7XG4gICAgICAgICAgICB0aGlzLnNpbWlsYXJpdHlNZXRyaWNJbnB1dCA9IGlucHV0O1xuICAgICAgICAgICAgQXJyYXkuZnJvbSh0aGlzLnNpbWlsYXJpdHlNZXRyaWNJbnB1dC5yb290LmNoaWxkcmVuKVxuICAgICAgICAgICAgICAgIC5mb3JFYWNoKChpdCkgPT4gdGhpcy5zaW1pbGFyaXR5TWV0cmljSW5wdXRSb290LmFwcGVuZENoaWxkKGl0KSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZ2V0IHByZVByb2Nlc3NpbmdGdW5jdGlvbigpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZnVuY3Rpb25zTWFwW3RoaXMucHJlcHJvY2Vzc2luZ0Z1bmN0aW9uSW5wdXQudmFsdWVdO1xuICAgIH1cbiAgICBhc3luYyBjcmVhdGVTZXR0aW5nc0RpdihwYXJhbXNGb3JtLCBmdW5jKSB7XG4gICAgICAgIHVpLmVtcHR5KHBhcmFtc0Zvcm0pO1xuICAgICAgICBpZiAoZnVuYy5pbnB1dHMubGVuZ3RoIDwgMylcbiAgICAgICAgICAgIHJldHVybiB1aS5kaXYoKTtcbiAgICAgICAgY29uc3QgZmMgPSBmdW5jLnByZXBhcmUoKTtcbiAgICAgICAgY29uc3QgaW5wdXRzID0gYXdhaXQgZmMuYnVpbGRFZGl0b3IodWkuZGl2KCkpO1xuICAgICAgICBmb3IgKGxldCBpID0gMjsgaSA8IGZ1bmMuaW5wdXRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBjb25zdCBmSW5wdXQgPSBmdW5jLmlucHV0c1tpXTtcbiAgICAgICAgICAgIGNvbnN0IHZhbCA9IHRoaXMucHJlcHJvY2Vzc2luZ0Z1bmN0aW9uU2V0dGluZ3NbZklucHV0Lm5hbWVdIHx8XG4gICAgICAgICAgICAgICAgZmMuaW5wdXRQYXJhbXNbZnVuYy5pbnB1dHNbaV0ubmFtZV0udmFsdWUgfHwgZklucHV0LmRlZmF1bHRWYWx1ZTtcbiAgICAgICAgICAgIGlmICh2YWwpXG4gICAgICAgICAgICAgICAgdGhpcy5wcmVwcm9jZXNzaW5nRnVuY3Rpb25TZXR0aW5nc1tmSW5wdXQubmFtZV0gPSB2YWw7XG4gICAgICAgICAgICBjb25zdCBpbnB1dCA9IGlucHV0cy5maW5kKChpbnApID0+IGlucC5wcm9wZXJ0eS5uYW1lID09PSBmSW5wdXQubmFtZSk7XG4gICAgICAgICAgICBpZiAoIWlucHV0KVxuICAgICAgICAgICAgICAgIGNvbnRpbnVlO1xuICAgICAgICAgICAgaWYgKHRoaXMucHJlcHJvY2Vzc2luZ0Z1bmN0aW9uU2V0dGluZ3NbZklucHV0Lm5hbWVdICE9PSBudWxsICYmXG4gICAgICAgICAgICAgICAgdGhpcy5wcmVwcm9jZXNzaW5nRnVuY3Rpb25TZXR0aW5nc1tmSW5wdXQubmFtZV0gIT09IHVuZGVmaW5lZClcbiAgICAgICAgICAgICAgICBpbnB1dC52YWx1ZSA9IHRoaXMucHJlcHJvY2Vzc2luZ0Z1bmN0aW9uU2V0dGluZ3NbZklucHV0Lm5hbWVdO1xuICAgICAgICAgICAgaW5wdXQub25DaGFuZ2VkKCgpID0+IHsgdGhpcy5wcmVwcm9jZXNzaW5nRnVuY3Rpb25TZXR0aW5nc1tmSW5wdXQubmFtZV0gPSBpbnB1dC52YWx1ZTsgfSk7XG4gICAgICAgICAgICBwYXJhbXNGb3JtLmFwcGVuZChpbnB1dC5yb290KTtcbiAgICAgICAgfVxuICAgICAgICBwYXJhbXNGb3JtLnN0eWxlLm1hcmdpbkJvdHRvbSA9ICcxMHB4JztcbiAgICAgICAgcmV0dXJuIHBhcmFtc0Zvcm07XG4gICAgfVxufVxuZnVuY3Rpb24gZ2V0RnVuY05hbWUoZnVuYykge1xuICAgIHJldHVybiBmdW5jLmZyaWVuZGx5TmFtZSA/PyBmdW5jLm5hbWU7XG59XG5jbGFzcyBQb3N0UHJvY2Vzc2luZ0Z1bmNFZGl0b3Ige1xuICAgIGNvbnN0cnVjdG9yKCkge1xuICAgICAgICB0aGlzLnBvc3RQcm9jZXNzaW5nRnVuY3Rpb25zTWFwID0ge307XG4gICAgICAgIHRoaXMuX3Jvb3QgPSB1aS5kaXYoW10pO1xuICAgICAgICB0aGlzLl9wb3N0UHJvY2Vzc2luZ0FyZ3MgPSB7fTtcbiAgICAgICAgdGhpcy5fYXJnc0VsZW1lbnQgPSB1aS5kaXYoW10pO1xuICAgICAgICB0aGlzLl9zZXR0aW5nc09wZW5lZCA9IGZhbHNlO1xuICAgICAgICB0aGlzLl9zZXR0aW5nc0ljb24gPSB1aS5pY29ucy5zZXR0aW5ncyhhc3luYyAoKSA9PiB7XG4gICAgICAgICAgICB0aGlzLl9zZXR0aW5nc09wZW5lZCA9ICF0aGlzLl9zZXR0aW5nc09wZW5lZDtcbiAgICAgICAgICAgIGlmICh0aGlzLl9zZXR0aW5nc09wZW5lZClcbiAgICAgICAgICAgICAgICB0aGlzLl9hcmdzRWxlbWVudC5zdHlsZS5kaXNwbGF5ID0gJ2Jsb2NrJztcbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICB0aGlzLl9hcmdzRWxlbWVudC5zdHlsZS5kaXNwbGF5ID0gJ25vbmUnO1xuICAgICAgICB9KTtcbiAgICAgICAgdGhpcy5fYXJnc0VsZW1lbnQuc3R5bGUuZGlzcGxheSA9ICdub25lJztcbiAgICAgICAgY29uc3QgcG9zdFByb2Nlc3NpbmdGdW5jcyA9IERHLkZ1bmMuZmluZCh7IHRhZ3M6IFtESU1fUkVEX1BPU1RQUk9DRVNTSU5HX0ZVTkNUSU9OX1RBR10gfSlcbiAgICAgICAgICAgIC5maWx0ZXIoKGYpID0+IGYuaW5wdXRzLmxlbmd0aCA+PSAyKTtcbiAgICAgICAgcG9zdFByb2Nlc3NpbmdGdW5jcy5mb3JFYWNoKChmKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBuYW1lID0gZi5mcmllbmRseU5hbWUgPz8gZi5uYW1lO1xuICAgICAgICAgICAgdGhpcy5wb3N0UHJvY2Vzc2luZ0Z1bmN0aW9uc01hcFtuYW1lXSA9IGY7XG4gICAgICAgIH0pO1xuICAgICAgICB0aGlzLnBvc3RQcm9jZXNzaW5nRnVuY3Rpb25zTWFwWydOb25lJ10gPSBudWxsO1xuICAgICAgICBjb25zdCBkZWZhdWx0UG9zdFByb2Nlc3NpbmdGdW5jID0gT2JqZWN0LmtleXModGhpcy5wb3N0UHJvY2Vzc2luZ0Z1bmN0aW9uc01hcCkuZmluZCgoaXQpID0+ICEhdGhpcy5wb3N0UHJvY2Vzc2luZ0Z1bmN0aW9uc01hcFtpdF0/Lm9wdGlvbnM/LltESU1fUkVEX0RFRkFVTFRfUE9TVFBST0NFU1NJTkdfRlVOQ1RJT05fTUVUQV0pID8/ICdOb25lJztcbiAgICAgICAgdGhpcy5wb3N0UHJvY2Vzc2luZ0Z1bmN0aW9uSW5wdXQgPVxuICAgICAgICAgICAgdWkuY2hvaWNlSW5wdXQoJ1Bvc3Rwcm9jZXNzaW5nJywgZGVmYXVsdFBvc3RQcm9jZXNzaW5nRnVuYywgT2JqZWN0LmtleXModGhpcy5wb3N0UHJvY2Vzc2luZ0Z1bmN0aW9uc01hcCksIGFzeW5jICgpID0+IHsgYXdhaXQgdGhpcy5vbkZ1bmN0aW9uQ2hhbmdlZCgpOyB9LCB7IG51bGxhYmxlOiBmYWxzZSB9KTtcbiAgICAgICAgdGhpcy5vbkZ1bmN0aW9uQ2hhbmdlZCgpO1xuICAgICAgICB0aGlzLnBvc3RQcm9jZXNzaW5nRnVuY3Rpb25JbnB1dC5udWxsYWJsZSA9IGZhbHNlO1xuICAgICAgICB0aGlzLnBvc3RQcm9jZXNzaW5nRnVuY3Rpb25JbnB1dC5jbGFzc0xpc3QuYWRkKCdtbC1kaW0tcmVkdWN0aW9uLXNldHRpbmdzLWlucHV0Jyk7XG4gICAgICAgIHRoaXMucG9zdFByb2Nlc3NpbmdGdW5jdGlvbklucHV0LnJvb3QucHJlcGVuZCh0aGlzLl9zZXR0aW5nc0ljb24pO1xuICAgICAgICB0aGlzLl9yb290LmFwcGVuZENoaWxkKHRoaXMucG9zdFByb2Nlc3NpbmdGdW5jdGlvbklucHV0LnJvb3QpO1xuICAgICAgICB0aGlzLl9yb290LmFwcGVuZENoaWxkKHRoaXMuX2FyZ3NFbGVtZW50KTtcbiAgICB9XG4gICAgZ2V0IHBvc3RQcm9jZXNzaW5nRnVuY3Rpb24oKSB7XG4gICAgICAgIHJldHVybiB0aGlzLnBvc3RQcm9jZXNzaW5nRnVuY3Rpb25JbnB1dC52YWx1ZSA/XG4gICAgICAgICAgICB0aGlzLnBvc3RQcm9jZXNzaW5nRnVuY3Rpb25zTWFwW3RoaXMucG9zdFByb2Nlc3NpbmdGdW5jdGlvbklucHV0LnZhbHVlXSA6IG51bGw7XG4gICAgfVxuICAgIGFzeW5jIG9uRnVuY3Rpb25DaGFuZ2VkKCkge1xuICAgICAgICBjb25zdCBmdW5jID0gdGhpcy5wb3N0UHJvY2Vzc2luZ0Z1bmN0aW9uO1xuICAgICAgICB1aS5lbXB0eSh0aGlzLl9hcmdzRWxlbWVudCk7XG4gICAgICAgIHRoaXMuX3Bvc3RQcm9jZXNzaW5nQXJncyA9IHt9O1xuICAgICAgICBpZiAoIWZ1bmMgfHwgZnVuYy5pbnB1dHMubGVuZ3RoIDwgMykge1xuICAgICAgICAgICAgdGhpcy5fc2V0dGluZ3NJY29uLnN0eWxlLmRpc3BsYXkgPSAnbm9uZSc7XG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cbiAgICAgICAgO1xuICAgICAgICB0aGlzLl9zZXR0aW5nc0ljb24uc3R5bGUuZGlzcGxheSA9ICdmbGV4JztcbiAgICAgICAgY29uc3QgZmMgPSBmdW5jLnByZXBhcmUoKTtcbiAgICAgICAgY29uc3QgaW5wdXRzID0gYXdhaXQgZmMuYnVpbGRFZGl0b3IodWkuZGl2KCkpO1xuICAgICAgICBmb3IgKGxldCBpID0gMjsgaSA8IGZ1bmMuaW5wdXRzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBjb25zdCBmSW5wdXQgPSBmdW5jLmlucHV0c1tpXTtcbiAgICAgICAgICAgIGNvbnN0IHZhbCA9IHRoaXMuX3Bvc3RQcm9jZXNzaW5nQXJnc1tmSW5wdXQubmFtZV0gfHxcbiAgICAgICAgICAgICAgICBmYy5pbnB1dFBhcmFtc1tmdW5jLmlucHV0c1tpXS5uYW1lXS52YWx1ZSB8fCBmSW5wdXQuZGVmYXVsdFZhbHVlO1xuICAgICAgICAgICAgaWYgKHZhbClcbiAgICAgICAgICAgICAgICB0aGlzLl9wb3N0UHJvY2Vzc2luZ0FyZ3NbZklucHV0Lm5hbWVdID0gdmFsO1xuICAgICAgICAgICAgY29uc3QgaW5wdXQgPSBpbnB1dHMuZmluZCgoaW5wKSA9PiBpbnAucHJvcGVydHkubmFtZSA9PT0gZklucHV0Lm5hbWUpO1xuICAgICAgICAgICAgaWYgKCFpbnB1dClcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIGlucHV0Lm9uQ2hhbmdlZCgoKSA9PiB7IHRoaXMuX3Bvc3RQcm9jZXNzaW5nQXJnc1tmSW5wdXQubmFtZV0gPSBpbnB1dC52YWx1ZTsgfSk7XG4gICAgICAgICAgICB0aGlzLl9hcmdzRWxlbWVudC5hcHBlbmQoaW5wdXQucm9vdCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgZ2V0IHJvb3QoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl9yb290O1xuICAgIH1cbiAgICBnZXQgYXJncygpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuX3Bvc3RQcm9jZXNzaW5nQXJncztcbiAgICB9XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1kYXRhOmFwcGxpY2F0aW9uL2pzb247YmFzZTY0LGV5SjJaWEp6YVc5dUlqb3pMQ0ptYVd4bElqb2liWFZzZEdrdFkyOXNkVzF1TFdScGJTMXlaV1IxWTNScGIyNHRaV1JwZEc5eUxtcHpJaXdpYzI5MWNtTmxVbTl2ZENJNklpSXNJbk52ZFhKalpYTWlPbHNpYlhWc2RHa3RZMjlzZFcxdUxXUnBiUzF5WldSMVkzUnBiMjR0WldScGRHOXlMblJ6SWwwc0ltNWhiV1Z6SWpwYlhTd2liV0Z3Y0dsdVozTWlPaUpCUVVGQkxFOUJRVThzUzBGQlN5eEpRVUZKTEUxQlFVMHNiVUpCUVcxQ0xFTkJRVU03UVVGRE1VTXNUMEZCVHl4TFFVRkxMRVZCUVVVc1RVRkJUU3hwUWtGQmFVSXNRMEZCUXp0QlFVTjBReXhQUVVGUExFdEJRVXNzUlVGQlJTeE5RVUZOTEdsQ1FVRnBRaXhEUVVGRE8wRkJRM1JETEU5QlFVOHNSVUZCUXl4dFFrRkJiVUlzUlVGQlF5eE5RVUZOTEZOQlFWTXNRMEZCUXp0QlFVTTFReXhQUVVGUExFVkJRVFJDTEdGQlFXRXNSVUZCUXl4TlFVRk5MRzlFUVVGdlJDeERRVUZETzBGQlJ6VkhMRTlCUVU4c1JVRkJReXcwUTBGQk5FTXNSVUZCUlN4dFEwRkJiVU1zUlVGRGRrWXNhME5CUVd0RExFVkJRVVVzWjBOQlFXZERMRVZCUTNCRkxITkNRVUZ6UWl4RlFVRkZMRzFDUVVGdFFpeEZRVUZGTEcxQ1FVRnRRaXhGUVVGRExFMUJRVTBzTWtKQlFUSkNMRU5CUVVNN1FVRkRja2NzVDBGQlR5eEZRVUZETERCQ1FVRXdRaXhGUVVGRExFMUJRVTBzTUVKQlFUQkNMRU5CUVVNN1FVRkZjRVVzVDBGQlR5eEZRVUZETEU5QlFVOHNSVUZCUXl4TlFVRk5MRTFCUVUwc1EwRkJRenRCUVVNM1FpeFBRVUZQTEhOQ1FVRnpRaXhEUVVGRE8wRkJRemxDTEU5QlFVOHNSVUZCUXl4M1FrRkJkMElzUlVGQlF5eE5RVUZOTEd0RVFVRnJSQ3hEUVVGRE8wRkJSVEZHTEUxQlFVMHNUMEZCVHl4WFFVRlhPMGxCZFVKMFFqdFJRWFJDUVN4cFFrRkJXU3hIUVVOYUxFVkJRVU1zVFVGQlRTeEZRVUZGTEdkQ1FVRm5RaXhGUVVGRkxFdEJRVXNzUlVGQlJTeERRVUZETEVWQlFVVXNUMEZCVHl4RlFVRkZMREJFUVVFd1JDeEZRVUZETEVOQlFVTTdVVUZETVVjc2IwTkJRVzlETzFGQlEzQkRMRFpIUVVFMlJ6dFJRVU0zUnl4WlFVRlBMRWRCUTB3c1JVRkJReXhOUVVGTkxFVkJRVVVzVVVGQlVTeEZRVUZGTEV0QlFVc3NSVUZCUlN4RFFVRkRPMWxCUTNwQ0xFOUJRVThzUlVGQlJTeDVSa0ZCZVVZc1JVRkJReXhEUVVGRE8xRkJRM2hITEdWQlFWVXNSMEZEVml4RlFVRkRMRTFCUVUwc1JVRkJSU3hYUVVGWExFVkJRVVVzUzBGQlN5eEZRVUZGTEVWQlFVVXNSVUZCUlN4UFFVRlBMRVZCUVVVc2FVVkJRV2xGTEVWQlFVTXNRMEZCUXp0UlFVTTNSeXhYUVVGTkxFZEJRMDRzUlVGQlF5eE5RVUZOTEVWQlFVVXNVVUZCVVN4RlFVRkZMRXRCUVVzc1JVRkJSU3hEUVVGRE8xbEJRM3BDTEU5QlFVOHNSVUZEVUR0clJFRkRPRU1zUlVGQlF5eERRVUZETzFGQlEyeEVMRmxCUVU4c1IwRkRVQ3hGUVVGRExFMUJRVTBzUlVGQlJTeGpRVUZqTEVWQlFVVXNTMEZCU3l4RlFVRkZMRWRCUVVjN1dVRkRha01zVDBGQlR5eEZRVUZGT3pSRlFVTXJSQ3hGUVVGRExFTkJRVU03VVVGRE5VVXNaVUZCVlN4SFFVRXJRaXhGUVVGRExFMUJRVTBzUlVGQlJTeGhRVUZoTEVWQlFVVXNTMEZCU3l4RlFVRkZMRWxCUVVrc1JVRkJSU3hQUVVGUExFVkJRVVVzWVVGQllTeEZRVUZGTEVsQlFVa3NSVUZCUlN4UlFVRlJMRVZCUVVNc1EwRkJRenRSUVVOMFNDeGpRVUZUTEVkQlExQXNSVUZCUXl4TlFVRk5MRVZCUVVVc1dVRkJXU3hGUVVGRkxFdEJRVXNzUlVGQlJTeExRVUZMTEVWQlFVVXNUMEZCVHl4RlFVRkZMR2xEUVVGcFF5eEZRVUZGTEVsQlFVa3NSVUZCUlN4VFFVRlRPMWxCUXpsR0xHTkJRV01zUlVGQlJTeDVRa0ZCZVVJc1JVRkJReXhEUVVGRE8xRkJSVGRETEhkQ1FVRjNRaXhGUVVGRkxFTkJRVU1zU1VGQlNTeERRVUZETEVOQlFVTXNTVUZCU1N4RlFVRkZMRVZCUVVVN1dVRkRka01zU1VGQlNTeEpRVUZKTEVWQlFVVTdaMEpCUTFJc1NVRkJTU3hEUVVGRExGTkJRVk1zUTBGQlF5eFBRVUZQTEVsQlFVa3NTMEZCU3l4SlFVRkpMRWRCUVVjc1EwRkJRenRoUVVONFF6dHBRa0ZCVFR0blFrRkRUQ3hKUVVGSkxFTkJRVU1zVTBGQlV5eERRVUZETEV0QlFVc3NSMEZCUnl4TFFVRkxMRU5CUVVNN1owSkJRemRDTEVsQlFVa3NRMEZCUXl4VFFVRlRMRU5CUVVNc1QwRkJUeXhIUVVGSExFbEJRVWtzUTBGQlF6dGhRVU12UWp0UlFVTklMRU5CUVVNc1EwRkJReXhEUVVGRE8wbEJRMHdzUTBGQlF6dEpRVUZCTEVOQlFVTTdRMEZEU0R0QlFVVkVMRTFCUVUwc1QwRkJUeXhYUVVGWE8wbEJTM1JDTERoSFFVRTRSenRKUVVVNVJ6dFJRVTVCTEZsQlFVOHNSMEZEVUN4RlFVRkRMRTFCUVUwc1JVRkJSU3hUUVVGVExFVkJRVVVzUzBGQlN5eEZRVUZGTEVWQlFVVXNSVUZCUlN4UFFVRlBMRVZCUVVVc01FSkJRVEJDTEVWQlFVTXNRMEZCUXp0UlFVTndSU3hsUVVGVkxFZEJRMVlzUlVGQlF5eE5RVUZOTEVWQlFVVXNXVUZCV1N4RlFVRkZMRXRCUVVzc1JVRkJSU3hGUVVGRkxFVkJRVVVzVDBGQlR5eEZRVUZGTEd0RVFVRnJSQ3hGUVVGRExFTkJRVU03U1VGSGFFWXNRMEZCUXp0SlFVRkJMRU5CUVVNN1EwRkRiRUk3UVVGelFrUXNUVUZCVFN4UFFVRlBMRFpDUVVFMlFqdEpRVFpDZEVNc1dVRkJXU3hwUWtGQk5FTXNSVUZCUlR0UlFUVkNNVVFzYlVKQlFXTXNSMEZCT0VJc1JVRkJSU3hEUVVGRE8xRkJTUzlETEhGQ1FVRm5RaXhIUVVFclFpeEZRVUZGTEVOQlFVTTdVVUZEYkVRc2VVSkJRVzlDTEVkQlFXZENMRVZCUVVVc1EwRkJReXhIUVVGSExFVkJRVVVzUTBGQlF6dFJRVU0zUXl3eVFrRkJjMElzUjBGQlowSXNSVUZCUlN4RFFVRkRMRWRCUVVjc1JVRkJSU3hEUVVGRE8xRkJSUzlETEhOQ1FVRnBRaXhIUVVGblFpeEZRVUZGTEVOQlFVTXNSMEZCUnl4RlFVRkZMRU5CUVVNN1VVRkRNVU1zZFVKQlFXdENMRWRCUVRoQ0xFVkJRVVVzUTBGQlF6dFJRVU51UkN4clFrRkJZU3hIUVVFclF6dFpRVU14UkN4RFFVRkRMRzFDUVVGdFFpeERRVUZETEVsQlFVa3NRMEZCUXl4RlFVRkZMRWxCUVVrc1YwRkJWeXhGUVVGRk8xbEJRemRETEVOQlFVTXNiVUpCUVcxQ0xFTkJRVU1zUzBGQlN5eERRVUZETEVWQlFVVXNTVUZCU1N4WFFVRlhMRVZCUVVVN1UwRkRMME1zUTBGQlF6dFJRVU5HTEdsQ1FVRlpMRWRCUVVjc1NVRkJTU3hoUVVGaExFVkJRVVVzUTBGQlF6dFJRVU51UXl4elFrRkJhVUlzUjBGQlJ5eEZRVUZGTEVOQlFVTXNUVUZCVFN4RFFVRkRMRVZCUVVVc1EwRkJReXhEUVVGRE8xRkJRMnhETEhOQ1FVRnBRaXhIUVVGSExFVkJRVVVzUTBGQlF5eE5RVUZOTEVOQlFVTXNSVUZCUlN4RFFVRkRMRU5CUVVNN1VVRkRiRU1zZFVKQlFXdENMRWRCUVN0RExFVkJRVVVzUTBGQlF6dFJRVWx3UlN4M1FrRkJiVUlzUjBGQlJ5eEZRVUZGTEVOQlFVTXNVMEZCVXl4RFFVRkRMR2xDUVVGcFFpeEZRVUZGTEVsQlFVa3NRMEZCUXl4RFFVRkRPMUZCUXpWRUxESkNRVUZ6UWl4SFFVRkhMRVZCUVVVc1EwRkJReXhUUVVGVExFTkJRVU1zYjBKQlFXOUNMRVZCUVVVc1MwRkJTeXhEUVVGRExFTkJRVU03VVVGRmJrVXNNa0pCUVhOQ0xFZEJRVWNzUlVGQlJTeERRVUZETEZkQlFWY3NRMEZCUXl4aFFVRmhMRVZCUVVVc01FSkJRVEJDTEVOQlFVTXNVMEZCVXl4RlFVTjZSaXhEUVVGRExEQkNRVUV3UWl4RFFVRkRMRk5CUVZNc1JVRkJSU3d3UWtGQk1FSXNRMEZCUXl4VFFVRlRMRU5CUVVNc1EwRkJReXhEUVVGRE8xRkJTVGxGTEVsQlFVa3NRMEZCUXl4elFrRkJjMElzUTBGQlF5eFZRVUZWTEVOQlFVTXNORVJCUVRSRUxFTkJRVU1zUTBGQlF6dFJRVU55Unl4SlFVRkpMRU5CUVVNc1owSkJRV2RDTEVkQlFVY3NTVUZCU1N4UFFVRlBMRVZCUVVVc1EwRkJRenRSUVVOMFF5eEpRVUZKTEVOQlFVTXNZMEZCWXl4SFFVRkhMR05CUVdNc1EwRkJRenRSUVVOeVF5eEpRVUZKTEVOQlFVTXNNa0pCUVRKQ0xFZEJRVWNzUlVGQlJTeERRVUZETEZOQlFWTXNSVUZCUlN4RFFVRkRPMUZCUTJ4RUxFMUJRVTBzYTBKQlFXdENMRWRCUVVjc1JVRkJSU3hEUVVGRExFbEJRVWtzUTBGQlF5eEpRVUZKTEVOQlFVTXNSVUZCUXl4SlFVRkpMRVZCUVVVc1EwRkJReXhyUTBGQmEwTXNRMEZCUXl4RlFVRkRMRU5CUVVNc1EwRkJRenRSUVVOMFJpeHJRa0ZCYTBJc1EwRkJReXhQUVVGUExFTkJRVU1zUTBGQlF5eERRVUZETEVWQlFVVXNSVUZCUlR0WlFVTXZRaXhOUVVGTkxGRkJRVkVzUjBGQlZ5eERRVUZETEVOQlFVTXNUMEZCVHl4RFFVRkRMRWRCUVVjc1EwRkJReXh6UWtGQmMwSXNRMEZCUXl4SlFVRkpMRVZCUVVVc1EwRkJRenRaUVVOeVJTeE5RVUZOTEVsQlFVa3NSMEZCUnl4RFFVRkRMRU5CUVVNc1dVRkJXU3hKUVVGSkxFTkJRVU1zUTBGQlF5eEpRVUZKTEVOQlFVTTdXVUZEZEVNc1RVRkJUU3hMUVVGTExFZEJRVmNzUTBGQlF5eERRVUZETEU5QlFVOHNRMEZCUXl4SFFVRkhMRU5CUVVNc2JVSkJRVzFDTEVOQlFVTXNTVUZCU1N4RlFVRkZMRU5CUVVNN1dVRkRMMFFzVFVGQlRTeExRVUZMTEVkQlFWY3NRMEZCUXl4RFFVRkRMRTlCUVU4c1EwRkJReXhIUVVGSExFTkJRVU1zYlVKQlFXMUNMRU5CUVVNc1NVRkJTU3hGUVVGRkxFTkJRVU03V1VGREwwUXNUVUZCVFN4cFFrRkJhVUlzUjBGQlZ5eERRVUZETEVOQlFVTXNUMEZCVHl4RFFVRkRMRWRCUVVjc1EwRkJReXhuUTBGQlowTXNRMEZCUXl4SlFVRkpMRVZCUVVVc1EwRkJRenRaUVVONFJpeEpRVUZKTEVsQlFVa3NRMEZCUXl4alFVRmpMRU5CUVVNc1QwRkJUeXhKUVVGSkxFTkJRVU1zVVVGQlVTeERRVUZETEZGQlFWRXNRMEZCUXl4SlFVRkpMRU5CUVVNc1kwRkJZeXhEUVVGRExFOUJRVThzUTBGQlF6dG5Ra0ZEYUVZc1QwRkJUenRaUVVOVUxFbEJRVWtzU1VGQlNTeERRVUZETEdOQlFXTXNRMEZCUXl4SlFVRkpMRWxCUVVrc1EwRkJReXhMUVVGTExFTkJRVU1zVVVGQlVTeERRVUZETEVsQlFVa3NRMEZCUXl4alFVRmpMRU5CUVVNc1NVRkJTU3hEUVVGRE8yZENRVU4yUlN4UFFVRlBPMWxCUTFRc1NVRkJTU3hKUVVGSkxFTkJRVU1zWTBGQll5eERRVUZETEV0QlFVc3NTVUZCU1N4RFFVRkRMRXRCUVVzc1EwRkJReXhSUVVGUkxFTkJRVU1zU1VGQlNTeERRVUZETEdOQlFXTXNRMEZCUXl4TFFVRkxMRU5CUVVNN1owSkJRM3BGTEU5QlFVODdXVUZGVkN4SlFVRkpMRU5CUVVNc2EwSkJRV3RDTEVOQlFVTXNTVUZCU1N4RFFVRkRMRWRCUVVjN1owSkJRemxDTEVsQlFVa3NSVUZCUlN4RFFVRkRPMmRDUVVOUUxGRkJRVkVzUlVGQlJTeFJRVUZSTEVOQlFVTXNRMEZCUXl4RFFVRkRMRkZCUVZFc1EwRkJReXhMUVVGTExFTkJRVU1zUjBGQlJ5eERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRMRVZCUVVVN1owSkJRemRETEV0QlFVc3NSVUZCUlN4TFFVRkxMRU5CUVVNc1EwRkJReXhEUVVGRExFdEJRVXNzUTBGQlF5eExRVUZMTEVOQlFVTXNSMEZCUnl4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRExFVkJRVVU3WjBKQlEzQkRMRXRCUVVzc1JVRkJSU3hMUVVGTExFTkJRVU1zUTBGQlF5eERRVUZETEV0QlFVc3NRMEZCUXl4TFFVRkxMRU5CUVVNc1IwRkJSeXhEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETEVWQlFVVTdaMEpCUTNCRExHbENRVUZwUWl4RlFVRkZMR2xDUVVGcFFpeERRVUZETEVOQlFVTXNRMEZCUXl4cFFrRkJhVUlzUTBGQlF5eExRVUZMTEVOQlFVTXNSMEZCUnl4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRExFVkJRVVU3WVVGRGVrVXNRMEZCUXp0UlFVTktMRU5CUVVNc1EwRkJReXhEUVVGRE8xRkJSVWdzU1VGQlNTeERRVUZETEc5Q1FVRnZRaXhIUVVGSExFbEJRVWtzZDBKQlFYZENMRVZCUVVVc1EwRkJRenRSUVVVelJDeEpRVUZKTEVOQlFVTXNWVUZCVlN4SFFVRkhMRVZCUVVVc1EwRkJReXhWUVVGVkxFTkJRVU1zVDBGQlR5eEZRVUZGTEVsQlFVa3NRMEZCUXl4TFFVRkxMRU5CUVVNc1JVRkJSU3hEUVVGRExGTkJRVk1zUlVGQlJTeEpRVUZKTEVOQlFVTXNTMEZCU3l4RFFVRkRMRTFCUVUwc1JVRkJSU3hIUVVGSExFVkJRVVU3V1VGRGVFWXNTVUZCU1N4RFFVRkRMRzFDUVVGdFFpeEZRVUZGTEVOQlFVTTdVVUZETjBJc1EwRkJReXhEUVVGRExFTkJRVU03VVVGRFNDeEpRVUZKTEVOQlFVTXNiVUpCUVcxQ0xFVkJRVVVzUTBGQlF6dFJRVU16UWl4SlFVRkpMR05CUVdNc1IwRkJSeXhMUVVGTExFTkJRVU03VVVGRE0wSXNTVUZCU1N4dlFrRkJiMElzUjBGQlJ5eExRVUZMTEVOQlFVTTdVVUZGYWtNc1NVRkJTU3hEUVVGRExGZEJRVmNzUjBGQlJ5eEZRVUZGTEVOQlFVTXNWMEZCVnl4RFFVRkRMRkZCUVZFc1JVRkJSU3h0UWtGQmJVSXNRMEZCUXl4SlFVRkpMRVZCUTJ4RkxFTkJRVU1zYlVKQlFXMUNMRU5CUVVNc1NVRkJTU3hGUVVGRkxHMUNRVUZ0UWl4RFFVRkRMRXRCUVVzc1EwRkJReXhGUVVGRkxFZEJRVWNzUlVGQlJUdFpRVU14UkN4SlFVRkpMR05CUVdNN1owSkJRMmhDTEVsQlFVa3NRMEZCUXl3d1FrRkJNRUlzUTBGQlF5eEpRVUZKTEVOQlFVTXNhVUpCUVdsQ0xFVkJRVVVzU1VGQlNTeERRVUZETEdGQlFXRXNRMEZCUXl4SlFVRkpMRU5CUVVNc1YwRkJWeXhEUVVGRExFdEJRVTBzUTBGQlF5eERRVUZETEVOQlFVTTdVVUZEZWtjc1EwRkJReXhEUVVGRExFTkJRVU03VVVGRFRDeEpRVUZKTEVOQlFVTXNhMEpCUVd0Q0xFZEJRVWNzUlVGQlJTeERRVUZETEV0QlFVc3NRMEZCUXl4UlFVRlJMRU5CUVVNc1IwRkJSU3hGUVVGRk8xbEJRemxETEdOQlFXTXNSMEZCUnl4RFFVRkRMR05CUVdNc1EwRkJRenRaUVVOcVF5eEpRVUZKTEVOQlFVTXNZMEZCWXp0blFrRkRha0lzUlVGQlJTeERRVUZETEV0QlFVc3NRMEZCUXl4SlFVRkpMRU5CUVVNc2FVSkJRV2xDTEVOQlFVTXNRMEZCUXpzN1owSkJSV3BETEVsQlFVa3NRMEZCUXl3d1FrRkJNRUlzUTBGQlF5eEpRVUZKTEVOQlFVTXNhVUpCUVdsQ0xFVkJRVVVzU1VGQlNTeERRVUZETEdGQlFXRXNRMEZCUXl4SlFVRkpMRU5CUVVNc1YwRkJWeXhEUVVGRExFdEJRVTBzUTBGQlF5eERRVUZETEVOQlFVTTdVVUZEZWtjc1EwRkJReXhGUVVGRkxESkNRVUV5UWl4RFFVRkRMRU5CUVVNN1VVRkRhRU1zU1VGQlNTeERRVUZETEd0Q1FVRnJRaXhIUVVGSExFVkJRVVVzUTBGQlF5eExRVUZMTEVOQlFVTXNVVUZCVVN4RFFVRkRMRWRCUVVVc1JVRkJSVHRaUVVNNVF5eHZRa0ZCYjBJc1IwRkJSeXhEUVVGRExHOUNRVUZ2UWl4RFFVRkRPMWxCUXpkRExFbEJRVWtzUTBGQlF5eHZRa0ZCYjBJN1owSkJRM1pDTEVWQlFVVXNRMEZCUXl4TFFVRkxMRU5CUVVNc1NVRkJTU3hEUVVGRExHbENRVUZwUWl4RFFVRkRMRU5CUVVNN08yZENRVVZxUXl4SlFVRkpMRU5CUVVNc01FSkJRVEJDTEVOQlFVTXNTVUZCU1N4RFFVRkRMR2xDUVVGcFFpeEZRVUZGTEVsQlFVa3NRMEZCUXl4WlFVRlpMRU5CUVVNc1EwRkJRenRSUVVNdlJTeERRVUZETEVWQlFVVXNPRUpCUVRoQ0xFTkJRVU1zUTBGQlF6dFJRVU51UXl4SlFVRkpMRU5CUVVNc2MwSkJRWE5DTEVOQlFVTXNVMEZCVXl4RFFVRkRMRWRCUVVjc1EwRkJReXhwUTBGQmFVTXNRMEZCUXl4RFFVRkRPMUZCUXpkRkxFbEJRVWtzUTBGQlF5eHpRa0ZCYzBJc1EwRkJReXhKUVVGSkxFTkJRVU1zVDBGQlR5eERRVUZETEVsQlFVa3NRMEZCUXl4clFrRkJhMElzUTBGQlF5eERRVUZETzFGQlEyeEZMRWxCUVVrc1EwRkJReXhYUVVGWExFTkJRVU1zU1VGQlNTeERRVUZETEZOQlFWTXNRMEZCUXl4SFFVRkhMRU5CUVVNc2FVTkJRV2xETEVOQlFVTXNRMEZCUXp0UlFVTjJSU3hKUVVGSkxFTkJRVU1zVjBGQlZ5eERRVUZETEVsQlFVa3NRMEZCUXl4UFFVRlBMRU5CUVVNc1NVRkJTU3hEUVVGRExHdENRVUZyUWl4RFFVRkRMRU5CUVVNN1VVRkRka1FzU1VGQlNTeERRVUZETERKQ1FVRXlRaXhEUVVGRExFOUJRVThzUTBGQlF5eG5Ra0ZCWjBJc1JVRkJSU3hIUVVGSExFVkJRVVVzUTBGQlF5eEpRVUZKTEVOQlFVTXNiMEpCUVc5Q0xFVkJRVVVzU1VGQlNTeEZRVUZGTEVsQlFVa3NSVUZCUlN4TFFVRkxMRU5CUVVNc1EwRkJRenRSUVVNdlJ5eEpRVUZKTEVOQlFVTXNNa0pCUVRKQ0xFTkJRVU1zU1VGQlNTeERRVUZETEV0QlFVc3NRMEZCUXl4UFFVRlBMRWRCUVVjc1RVRkJUU3hEUVVGRE8xRkJRemRFTEVsQlFVa3NRMEZCUXl4elFrRkJjMElzUTBGQlF5eFhRVUZYTEVOQlFVTXNTVUZCU1N4RFFVRkRMREpDUVVFeVFpeERRVUZETEVsQlFVa3NRMEZCUXl4RFFVRkRPMUZCUXk5RkxFbEJRVWtzUTBGQlF5eHpRa0ZCYzBJc1EwRkJReXhYUVVGWExFTkJRVU1zU1VGQlNTeERRVUZETEdsQ1FVRnBRaXhEUVVGRExFTkJRVU03U1VGRGJFVXNRMEZCUXp0SlFVVkVMRzFDUVVGdFFqdFJRVU5xUWl4TlFVRk5MRXRCUVVzc1IwRkJSeXhKUVVGSkxFTkJRVU1zVlVGQlZTeERRVUZETEV0QlFVc3NRMEZCUXp0UlFVTndReXhKUVVGSkxFTkJRVU1zUzBGQlN6dFpRVU5TTEU5QlFVODdVVUZEVkN4RlFVRkZMRU5CUVVNc1MwRkJTeXhEUVVGRExFbEJRVWtzUTBGQlF5eHZRa0ZCYjBJc1EwRkJReXhEUVVGRE8xRkJRM0JETEVWQlFVVXNRMEZCUXl4TFFVRkxMRU5CUVVNc1NVRkJTU3hEUVVGRExHbENRVUZwUWl4RFFVRkRMRU5CUVVNN1VVRkZha01zU1VGQlNTeERRVUZETEd0Q1FVRnJRaXhIUVVGSExFVkJRVVVzUTBGQlF6dFJRVU0zUWl4TlFVRk5MRTlCUVU4c1IwRkJSeXhMUVVGTExFTkJRVU1zVDBGQlR5eERRVUZETEUxQlFVMHNSVUZCUlN4RFFVRkRPMUZCUTNaRExFOUJRVThzUTBGQlF5eFBRVUZQTEVOQlFVTXNRMEZCUXl4SFFVRkhMRVZCUVVVc1JVRkJSVHRaUVVOMFFpeE5RVUZOTEVOQlFVTXNTVUZCU1N4RFFVRkRMRWxCUVVrc1EwRkJReXhyUWtGQmEwSXNRMEZCUXl4RFFVRkRMRTlCUVU4c1EwRkJReXhEUVVGRExGRkJRVkVzUlVGQlJTeEZRVUZGTzJkQ1FVTjRSQ3hOUVVGTkxGRkJRVkVzUjBGQlJ5eEpRVUZKTEVOQlFVTXNhMEpCUVd0Q0xFTkJRVU1zVVVGQlVTeERRVUZETEVOQlFVTXNVVUZCVVN4RFFVRkRPMmRDUVVNMVJDeE5RVUZOTEV0QlFVc3NSMEZCUnl4SlFVRkpMRU5CUVVNc2EwSkJRV3RDTEVOQlFVTXNVVUZCVVN4RFFVRkRMRU5CUVVNc1MwRkJTeXhEUVVGRE8yZENRVU4wUkN4TlFVRk5MRXRCUVVzc1IwRkJSeXhKUVVGSkxFTkJRVU1zYTBKQlFXdENMRU5CUVVNc1VVRkJVU3hEUVVGRExFTkJRVU1zUzBGQlN5eERRVUZETzJkQ1FVTjBSQ3hOUVVGTkxHZENRVUZuUWl4SFFVRkhMRU5CUVVNc1VVRkJVU3hEUVVGRExFMUJRVTBzU1VGQlNTeERRVUZETEVkQlFVY3NRMEZCUXl4UFFVRlBMRWxCUVVrc1VVRkJVU3hEUVVGRExGRkJRVkVzUTBGQlF5eEhRVUZITEVOQlFVTXNUMEZCVHl4RFFVRkRMRU5CUVVNc1EwRkJRenRuUWtGRE4wWXNUVUZCVFN4WlFVRlpMRWRCUVVjc1EwRkJReXhMUVVGTExFTkJRVU1zVFVGQlRTeEpRVUZKTEV0QlFVc3NRMEZCUXl4UlFVRlJMRU5CUVVNc1IwRkJSeXhEUVVGRExFbEJRVWtzUTBGQlF5eERRVUZETzJkQ1FVTXZSQ3hOUVVGTkxHTkJRV01zUjBGQlJ5eERRVUZETEV0QlFVc3NRMEZCUXl4TlFVRk5PMjlDUVVOc1F5eERRVUZETEVkQlFVY3NRMEZCUXl4TlFVRk5MRU5CUVVNc1JVRkJSU3hEUVVGRExFbEJRVWtzUTBGQlF5eExRVUZMTEVOQlFVTXNTVUZCU1N4TFFVRkxMRU5CUVVNc1VVRkJVU3hEUVVGRExFZEJRVWNzUTBGQlF5eE5RVUZOTEVOQlFVTXNSVUZCUlN4RFFVRkRMRWxCUVVrc1EwRkJReXhMUVVGTExFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTTdaMEpCUXpORkxFbEJRVWtzWjBKQlFXZENMRWxCUVVrc1dVRkJXU3hKUVVGSkxHTkJRV01zUlVGQlJUdHZRa0ZEZEVRc1NVRkJTU3hEUVVGRExFbEJRVWtzUTBGQlF5eHJRa0ZCYTBJc1EwRkJReXhIUVVGSExFTkJRVU1zU1VGQlNTeERRVUZETzNkQ1FVTndReXhKUVVGSkxFTkJRVU1zYTBKQlFXdENMRU5CUVVNc1IwRkJSeXhEUVVGRExFbEJRVWtzUTBGQlF5eEhRVUZITEVWQlFVVXNRMEZCUXp0dlFrRkRla01zU1VGQlNTeERRVUZETEd0Q1FVRnJRaXhEUVVGRExFZEJRVWNzUTBGQlF5eEpRVUZKTEVOQlFVTXNRMEZCUXl4SlFVRkpMRU5CUVVNc1VVRkJVU3hEUVVGRExFTkJRVU03YVVKQlEyeEVPMWxCUTBnc1EwRkJReXhEUVVGRExFTkJRVU03VVVGRFRDeERRVUZETEVOQlFVTXNRMEZCUXp0UlFVTklMRTFCUVUwc2FVSkJRV2xDTEVkQlFVY3NUVUZCVFN4RFFVRkRMRWxCUVVrc1EwRkJReXhKUVVGSkxFTkJRVU1zYTBKQlFXdENMRU5CUVVNc1EwRkJRenRSUVVNdlJDeE5RVUZOTEZsQlFWa3NSMEZCUnl4RlFVRkZMRU5CUVVNc1dVRkJXU3hEUVVGRExGTkJRVk1zUlVGQlJTeExRVUZMTEVWQlFVVXNSMEZCUnl4RlFVRkZPMWxCUXpGRUxFbEJRVWtzUTBGQlF5eG5Ra0ZCWjBJc1EwRkJReXhKUVVGSkxFVkJRVVVzUTBGQlF6dFpRVU0zUWl4RlFVRkZMRU5CUVVNc1MwRkJTeXhEUVVGRExFbEJRVWtzUTBGQlF5eHZRa0ZCYjBJc1EwRkJReXhEUVVGRE8xbEJRM0JETEVWQlFVVXNRMEZCUXl4TFFVRkxMRU5CUVVNc1NVRkJTU3hEUVVGRExHbENRVUZwUWl4RFFVRkRMRU5CUVVNN1dVRkRha01zVFVGQlRTeEpRVUZKTEVkQlFVY3NXVUZCV1N4RFFVRkRMRXRCUVVzc1EwRkJRenRaUVVOb1F5eEpRVUZKTEVOQlFVTXNTVUZCU1N4SlFVRkpMRWxCUVVrc1JVRkJSU3hOUVVGTkxFZEJRVWNzUTBGQlF6dG5Ra0ZETTBJc1NVRkJTU3hEUVVGRExITkNRVUZ6UWl4RFFVRkRMRWxCUVVrc1EwRkJReXhMUVVGTExFTkJRVU1zVDBGQlR5eEhRVUZITEUxQlFVMHNRMEZCUXpzN1owSkJSWGhFTEVsQlFVa3NRMEZCUXl4elFrRkJjMElzUTBGQlF5eEpRVUZKTEVOQlFVTXNTMEZCU3l4RFFVRkRMRTlCUVU4c1IwRkJSeXhOUVVGTkxFTkJRVU03V1VGRE1VUXNTVUZCU1N4RFFVRkRMRWxCUVVrc1NVRkJTU3hKUVVGSkxFTkJRVU1zVFVGQlRTeExRVUZMTEVOQlFVTXNSVUZCUlR0blFrRkRPVUlzU1VGQlNTeERRVUZETERKQ1FVRXlRaXhEUVVGRExFbEJRVWtzUTBGQlF5eExRVUZMTEVOQlFVTXNUMEZCVHl4SFFVRkhMRTFCUVUwc1EwRkJRenRuUWtGRE4wUXNUMEZCVHp0aFFVTlNPMWxCUTBRc1RVRkJUU3haUVVGWkxFZEJRVWNzUTBGQlF5eEZRVUZGTEVWQlFVVXNSVUZCUlN4RlFVRkZMRVZCUVVVc1JVRkJSU3hGUVVGRkxFTkJRVU1zUTBGQlF6dFpRVU4wUXl4SlFVRkpMRU5CUVVNc1owSkJRV2RDTEVkQlFVY3NTVUZCU1N4RFFVRkRMRWRCUVVjc1EwRkJReXhEUVVGRExFZEJRVWNzUlVGQlJTeEZRVUZGTzJkQ1FVTjJReXhOUVVGTkxGZEJRVmNzUjBGQlJ5eEpRVUZKTEhkQ1FVRjNRaXhEUVVGRExFZEJRVWNzUlVGQlJTeEpRVUZKTEVOQlFVTXNhMEpCUVd0Q0xFTkJRVU1zUjBGQlJ5eERRVUZETEVsQlFVa3NRMEZCUXl4RFFVRkRMRWRCUVVjc1EwRkJReXhEUVVGRExFVkJRVVVzUlVGQlJTeEZRVUZGTEVOQlEycEhMRWxCUVVrc1EwRkJReXhyUWtGQmEwSXNRMEZCUXl4RlFVRkZMRU5CUVVNc1EwRkJReXhGUVVGRkxGbEJRVmtzUTBGQlF5eERRVUZETzJkQ1FVTTVReXhQUVVGUExGZEJRVmNzUTBGQlF6dFpRVU55UWl4RFFVRkRMRU5CUVVNc1EwRkJRenRaUVVOSUxFMUJRVTBzV1VGQldTeEhRVUZITEVOQlFVTXNVVUZCVVN4RlFVRkZMRzFDUVVGdFFpeEZRVUZGTEcxQ1FVRnRRaXhGUVVGRkxGRkJRVkVzUTBGQlF5eERRVUZETEVkQlFVY3NRMEZCUXl4RFFVRkRMRVZCUVVVc1JVRkJSU3hEUVVGRExFVkJRVVVzUlVGQlJTeERRVU5vUnl4RlFVRkZMRU5CUVVNc1JVRkJSU3hEUVVGRExFVkJRVVVzUlVGQlJTeEZRVUZETEV0QlFVc3NSVUZCUlN4RlFVRkRMRXRCUVVzc1JVRkJSU3hIUVVGSExGbEJRVmtzUTBGQlF5eERRVUZETEVOQlFVTXNSMEZCUnl4RlFVRkZMRTFCUVUwc1JVRkJSU3hEUVVGRExFVkJRVU1zUlVGQlF5eERRVUZETEVOQlFVTXNRMEZCUXp0WlFVVnFSU3hGUVVGRkxFTkJRVU1zVDBGQlR5eERRVUZETEVsQlFVa3NRMEZCUXl4WlFVRlpMRU5CUVVNc1EwRkJReXhEUVVGRExFVkJRVVVzZVVOQlFYbERMRU5CUVVNc1EwRkJRenRaUVVNMVJTeEZRVUZGTEVOQlFVTXNUMEZCVHl4RFFVRkRMRWxCUVVrc1EwRkJReXhaUVVGWkxFTkJRVU1zUTBGQlF5eERRVUZETEVWQlFVVXNNRVJCUVRCRUxFTkJRVU1zUTBGQlF6dFpRVU0zUml4RlFVRkZMRU5CUVVNc1QwRkJUeXhEUVVGRExFbEJRVWtzUTBGQlF5eFpRVUZaTEVOQlFVTXNRMEZCUXl4RFFVRkRMRVZCUVVVc05rUkJRVFpFTEVOQlFVTXNRMEZCUXp0WlFVVm9SeXhOUVVGTkxHVkJRV1VzUjBGQlJ5eEZRVUZGTEVOQlFVTXNTVUZCU1N4RFFVRkRMRmxCUVZrc1JVRkJSU3hGUVVGRExFOUJRVThzUlVGQlJTdzBRMEZCTkVNc1JVRkJReXhEUVVGRExFTkJRVU03V1VGRGRrY3NTVUZCU1N4RFFVRkRMRzlDUVVGdlFpeERRVUZETEZkQlFWY3NRMEZCUXl4bFFVRmxMRU5CUVVNc1EwRkJRenRaUVVOMlJDeE5RVUZOTEZkQlFWY3NSMEZCUnl4RlFVRkZMRU5CUVVNc1NVRkJTU3hEUVVGRExFVkJRVVVzUlVGQlJTeEZRVUZETEV0QlFVc3NSVUZCUlN4RlFVRkRMRk5CUVZNc1JVRkJSU3hQUVVGUExFVkJRVVVzVVVGQlVTeEZRVUZGTEUxQlFVMHNSVUZCUXl4RlFVRkRMRU5CUVVNc1EwRkJRenRaUVVOcVJpeEpRVUZKTEVOQlFVTXNaMEpCUVdkQ0xFTkJRVU1zVDBGQlR5eERRVUZETEVOQlFVTXNUVUZCVFN4RlFVRkZMRVZCUVVVN1owSkJRM1pETEZkQlFWY3NRMEZCUXl4WFFVRlhMRU5CUVVNc1RVRkJUU3hEUVVGRExGbEJRVmtzUTBGQlF5eERRVUZETzFsQlF5OURMRU5CUVVNc1EwRkJReXhEUVVGRE8xbEJRMGdzU1VGQlNTeERRVUZETEc5Q1FVRnZRaXhEUVVGRExGZEJRVmNzUTBGQlF5eFhRVUZYTEVOQlFVTXNRMEZCUXp0WlFVTnVSQ3hKUVVGSkxFbEJRVWtzUTBGQlF5eG5Ra0ZCWjBJc1EwRkJReXhOUVVGTkxFZEJRVWNzUTBGQlF6dG5Ra0ZEYkVNc1NVRkJTU3hEUVVGRExESkNRVUV5UWl4RFFVRkRMRWxCUVVrc1EwRkJReXhMUVVGTExFTkJRVU1zVDBGQlR5eEhRVUZITEUxQlFVMHNRMEZCUXp0UlFVTnFSU3hEUVVGRExFVkJRVVVzUlVGQlF5eFRRVUZUTEVWQlFVVXNhVUpCUVdsQ0xFVkJRVU1zUTBGQlF5eERRVUZETzFGQlEyNURMRmxCUVZrc1EwRkJReXhYUVVGWExFVkJRVVVzUTBGQlF6dFJRVU16UWl4SlFVRkpMRU5CUVVNc1NVRkJTU3hEUVVGRExHZENRVUZuUWl4RlFVRkZPMWxCUXpGQ0xFbEJRVWtzUTBGQlF5eG5Ra0ZCWjBJc1IwRkJSeXhaUVVGWkxFTkJRVU1zU1VGQlNTeERRVUZETzFsQlF6RkRMRWxCUVVrc1EwRkJReXhaUVVGWkxFZEJRVWNzV1VGQldTeERRVUZETzFOQlEyeERPMkZCUVUwN1dVRkRUQ3hGUVVGRkxFTkJRVU1zUzBGQlN5eERRVUZETEVsQlFVa3NRMEZCUXl4blFrRkJaMElzUTBGQlF5eERRVUZETzFsQlEyaERMRWxCUVVrc1EwRkJReXhaUVVGWkxFZEJRVWNzV1VGQldTeERRVUZETzFsQlEycERMRXRCUVVzc1EwRkJReXhKUVVGSkxFTkJRVU1zU1VGQlNTeERRVUZETEZsQlFWa3NRMEZCUXl4SlFVRkpMRU5CUVVNc1VVRkJVU3hEUVVGRE8ybENRVU40UXl4UFFVRlBMRU5CUVVNc1EwRkJReXhGUVVGRkxFVkJRVVVzUlVGQlJTeERRVUZETEVsQlFVa3NRMEZCUXl4blFrRkJaMElzUTBGQlF5eFhRVUZYTEVOQlFVTXNSVUZCUlN4RFFVRkRMRU5CUVVNc1EwRkJRenRUUVVNelJEdEpRVU5JTEVOQlFVTTdTVUZEVHl3d1FrRkJNRUlzUTBGRGFFTXNWVUZCZFVJc1JVRkJSU3hOUVVGcFJEdFJRVU14UlN4RlFVRkZMRU5CUVVNc1MwRkJTeXhEUVVGRExGVkJRVlVzUTBGQlF5eERRVUZETzFGQlEzSkNMRTFCUVUwc1EwRkJReXhKUVVGSkxFTkJRVU1zVFVGQlRTeERRVUZETEVOQlFVTXNUMEZCVHl4RFFVRkRMRU5CUVVNc1JVRkJUeXhGUVVGRkxFVkJRVVU3V1VGRGRFTXNUVUZCVFN4TFFVRkxMRWRCUTFJc1RVRkJZeXhEUVVGRExFVkJRVVVzUTBGQlF5eERRVUZETzFsQlJYUkNMRTFCUVUwc1MwRkJTeXhIUVVGSExFdEJRVXNzUTBGQlF5eEpRVUZKTEV0QlFVc3NVVUZCVVN4RFFVRkRMRU5CUVVNN1owSkJRM0pETEVWQlFVVXNRMEZCUXl4WFFVRlhMRU5CUVVNc1MwRkJTeXhEUVVGRExFMUJRVTBzUlVGQlJTeExRVUZMTEVOQlFVTXNTMEZCU3l4SlFVRkpMRVZCUVVVc1JVRkJSU3hIUVVGSExFVkJRVVU3YjBKQlEyNUVMRXRCUVVzc1EwRkJReXhMUVVGTExFZEJRVWtzUzBGQk9FSXNRMEZCUXl4TFFVRkxMRU5CUVVNN1owSkJRM1JFTEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJReXhMUVVGTExFTkJRVU1zU1VGQlNTeExRVUZMTEZOQlFWTXNRMEZCUXl4RFFVRkRPMmRDUVVNM1FpeEZRVUZGTEVOQlFVTXNVMEZCVXl4RFFVRkRMRXRCUVVzc1EwRkJReXhOUVVGTkxFVkJRVVVzUzBGQlN5eERRVUZETEV0QlFVc3NTVUZCU1N4TFFVRkxMRVZCUVVVc1IwRkJSeXhGUVVGRk8yOUNRVU53UkN4TFFVRkxMRU5CUVVNc1MwRkJTeXhIUVVGSkxFdEJRU3RDTEVOQlFVTXNTMEZCU3l4RFFVRkRPMmRDUVVOMlJDeERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRPMmRDUVVOS0xFVkJRVVVzUTBGQlF5eFZRVUZWTEVOQlFVTXNTMEZCU3l4RFFVRkRMRTFCUVUwc1JVRkJSU3hMUVVGTExFTkJRVU1zUzBGQldTeEZRVUZGTEVkQlFVY3NSVUZCUlR0dlFrRkRia1FzUzBGQlN5eERRVUZETEV0QlFVc3NSMEZCUnl4TFFVRkxMRU5CUVVNc1MwRkJTeXhEUVVGRE8yZENRVU0xUWl4RFFVRkRMRU5CUVVNc1EwRkJRenRaUVVOUUxFbEJRVWtzUzBGQlN5eERRVUZETEU5QlFVOHNSVUZCUlR0blFrRkRha0lzUzBGQlN5eERRVUZETEU5QlFVOHNSMEZCUnl4TFFVRkxMRU5CUVVNN1owSkJRM1JDTEVWQlFVVXNRMEZCUXl4UFFVRlBMRU5CUVVNc1NVRkJTU3hEUVVGRExFdEJRVXNzUTBGQlF5eExRVUZMTEVsQlFVa3NTMEZCU3l4RFFVRkRMRWxCUVVrc1JVRkJSU3hMUVVGTExFTkJRVU1zWTBGQll5eEpRVUZKTEVWQlFVVXNRMEZCUXl4RFFVRkRPMkZCUTNoRk8ybENRVUZOTzJkQ1FVRkZMRVZCUVVVc1EwRkJReXhQUVVGUExFTkJRVU1zU1VGQlNTeERRVUZETEV0QlFVc3NRMEZCUXl4TFFVRkxMRWxCUVVrc1MwRkJTeXhEUVVGRExFbEJRVWtzUlVGQlJTeExRVUZMTEVOQlFVTXNUMEZCVHl4RFFVRkRMRU5CUVVNN1lVRkJSVHRaUVVOeVJTeFZRVUZWTEVOQlFVTXNUVUZCVFN4RFFVRkRMRXRCUVVzc1EwRkJReXhKUVVGSkxFTkJRVU1zUTBGQlF6dFJRVU5vUXl4RFFVRkRMRU5CUVVNc1EwRkJRenRSUVVOSUxFOUJRVThzVlVGQlZTeERRVUZETzBsQlEzQkNMRU5CUVVNN1NVRkZSQ3hKUVVGSkxHZENRVUZuUWp0UlFVTnNRaXhOUVVGTkxHVkJRV1VzUjBGQk9FSXNTVUZCU1N4RFFVRkRMR0ZCUVdFc1EwRkJReXhKUVVGSkxFTkJRVU1zVjBGQlZ5eERRVUZETEV0QlFVMHNRMEZCUXl4RFFVRkRPMUZCUXk5R0xFMUJRVTBzVDBGQlR5eEhRVUZSTEVWQlFVVXNRMEZCUXp0UlFVTjRRaXhOUVVGTkxFTkJRVU1zU1VGQlNTeERRVUZETEdWQlFXVXNRMEZCUXl4RFFVRkRMRTlCUVU4c1EwRkJReXhEUVVGRExFZEJRVmNzUlVGQlJTeEZRVUZGTzFsQlEyNUVMRWxCUVVzc1pVRkJkVUlzUTBGQlF5eEhRVUZITEVOQlFVTXNRMEZCUXl4TFFVRkxMRWxCUVVrc1NVRkJTVHRuUWtGRE4wTXNUMEZCVHl4RFFVRkRMRWRCUVVjc1EwRkJReXhIUVVGSkxHVkJRWFZDTEVOQlFVTXNSMEZCUnl4RFFVRkRMRU5CUVVNc1MwRkJTeXhEUVVGRE8xRkJRM1pFTEVOQlFVTXNRMEZCUXl4RFFVRkRPMUZCUTBnc1QwRkJUeXhQUVVGUExFTkJRVU03U1VGRGFrSXNRMEZCUXp0SlFVVkVMRWxCUVVrc1lVRkJZVHRSUVVObUxFOUJRVTg3V1VGRFRDeGhRVUZoTEVWQlFVVXNTVUZCU1N4RFFVRkRMRmxCUVZrc1EwRkJReXhQUVVGUExFTkJRVU1zUzBGQlN5eEpRVUZKTEVsQlFVazdXVUZEZEVRc1dVRkJXU3hGUVVGRkxFbEJRVWtzUTBGQlF5eFpRVUZaTEVOQlFVTXNUVUZCVFN4RFFVRkRMRXRCUVVzc1NVRkJTU3hEUVVGRE8xTkJRMnhFTEVOQlFVTTdTVUZEU2l4RFFVRkRPMGxCUlUwc1UwRkJVenRSUVVOa0xFMUJRVTBzUjBGQlJ5eEhRVUZITEVWQlFVVXNRMEZCUXl4SFFVRkhMRU5CUVVNN1dVRkRha0lzU1VGQlNTeERRVUZETEZWQlFWVXNRMEZCUXl4SlFVRkpPMWxCUTNCQ0xFbEJRVWtzUTBGQlF5eG5Ra0ZCWjBJN1dVRkRja0lzU1VGQlNTeERRVUZETEhOQ1FVRnpRanRaUVVNelFpeEpRVUZKTEVOQlFVTXNjMEpCUVhOQ0xFTkJRVU1zU1VGQlNUdFpRVU5vUXl4SlFVRkpMRU5CUVVNc1YwRkJWeXhEUVVGRExFbEJRVWs3V1VGRGNrSXNTVUZCU1N4RFFVRkRMR2xDUVVGcFFqdFpRVU4wUWl4SlFVRkpMRU5CUVVNc2JVSkJRVzFDTzFsQlEzaENMRWxCUVVrc1EwRkJReXh2UWtGQmIwSXNRMEZCUXl4SlFVRkpPMU5CUXk5Q0xFVkJRVVVzUlVGQlF5eExRVUZMTEVWQlFVVXNSVUZCUXl4UlFVRlJMRVZCUVVVc1QwRkJUeXhGUVVGRExFVkJRVVVzVDBGQlR5eEZRVUZGTEZOQlFWTXNSVUZCUXl4RFFVRkRMRU5CUVVNN1VVRkRja1FzVDBGQlR5eEhRVUZITEVOQlFVTTdTVUZEWWl4RFFVRkRPMGxCUlUwc1UwRkJVenRSUVVOa0xFOUJRVTg3V1VGRFRDeExRVUZMTEVWQlFVVXNTVUZCU1N4RFFVRkRMRlZCUVZVc1EwRkJReXhMUVVGTk8xbEJRemRDTEU5QlFVOHNSVUZCUlN4SlFVRkpMRU5CUVVNc1dVRkJXU3hEUVVGRExFdEJRVTA3V1VGRGFrTXNWVUZCVlN4RlFVRkZMRWxCUVVrc1EwRkJReXhYUVVGWExFTkJRVU1zUzBGQlRUdFpRVU51UXl4elFrRkJjMElzUlVGQlJTeEpRVUZKTEVOQlFVTXNaMEpCUVdkQ0xFTkJRVU1zUjBGQlJ5eERRVUZETEVOQlFVTXNSVUZCUlN4RlFVRkZMRVZCUVVVc1EwRkJReXhGUVVGRkxFTkJRVU1zY1VKQlFYRkNMRU5CUVVNN1dVRkRia1lzWlVGQlpTeEZRVUZGTEVsQlFVa3NRMEZCUXl4blFrRkJaMElzUTBGQlF5eEhRVUZITEVOQlFVTXNRMEZCUXl4RlFVRkZMRVZCUVVVc1JVRkJSU3hEUVVGRExFVkJRVVVzUTBGQlF5eHhRa0ZCY1VJc1EwRkJReXhMUVVGTkxFTkJRVU03V1VGRGJrWXNUMEZCVHl4RlFVRkZMRWxCUVVrc1EwRkJReXhuUWtGQlowSXNRMEZCUXl4SFFVRkhMRU5CUVVNc1EwRkJReXhGUVVGRkxFVkJRVVVzUlVGQlJTeERRVUZETEVWQlFVVXNRMEZCUXl4TlFVRk5MRWxCUVVrc1EwRkJReXhEUVVGRE8xbEJRekZFTEU5QlFVOHNSVUZCUlN4RlFVRkRMRWRCUVVjc1NVRkJTU3hEUVVGRExHZENRVUZuUWl4RlFVRkZMRWRCUVVjc1NVRkJTU3hEUVVGRExHRkJRV0U3WjBKQlEzWkVMSEZDUVVGeFFpeEZRVUZGTEVsQlFVa3NRMEZCUXl4blFrRkJaMElzUTBGQlF5eEhRVUZITEVOQlFVTXNRMEZCUXl4RlFVRkZMRVZCUVVVc1JVRkJSU3hEUVVGRExFVkJRVVVzUTBGQlF5dzJRa0ZCTmtJc1EwRkJReXhGUVVGRE8xbEJRemRHTEdOQlFXTXNSVUZCUlN4SlFVRkpMRU5CUVVNc2JVSkJRVzFDTEVOQlFVTXNTMEZCU3p0WlFVTTVReXhwUWtGQmFVSXNSVUZCUlN4TFFVRkxPMWxCUTNoQ0xITkNRVUZ6UWl4RlFVRkZMRWxCUVVrc1EwRkJReXh2UWtGQmIwSXNRMEZCUXl4elFrRkJjMEk3V1VGRGVFVXNNRUpCUVRCQ0xFVkJRVVVzU1VGQlNTeERRVUZETEc5Q1FVRnZRaXhEUVVGRExFbEJRVWs3V1VGRE1VUXNjMEpCUVhOQ0xFVkJRVVVzU1VGQlNTeERRVUZETEhOQ1FVRnpRaXhEUVVGRExFdEJRVXM3VTBGRE1VUXNRMEZCUXp0SlFVTktMRU5CUVVNN1EwRkRTanRCUVVkRUxFMUJRVTBzZDBKQlFYZENPMGxCWjBJeFFpeFpRVUZaTEUxQlFXbENMRVZCUVVVc2EwSkJRVGhETEVWQlFVVXNXVUZCYzBJN1VVRm1ja2NzYVVOQlFUUkNMRWRCUVVjc1JVRkJSU3hEUVVGRExFZEJRVWNzUTBGQlF5eEZRVUZGTEVOQlFVTXNRMEZCUXp0UlFVc3hReXhyUTBGQk5rSXNSMEZCV1N4RlFVRkZMRU5CUVVNN1VVRkpOVU1zWTBGQlV5eEhRVUZuUWl4RlFVRkZMRU5CUVVNc1IwRkJSeXhEUVVGRExFVkJRVVVzUTBGQlF5eERRVUZETzFGQlEzQkRMSEZDUVVGblFpeEhRVUZaTEVsQlFVa3NRMEZCUXp0UlFVTnFReXhwUWtGQldTeEhRVUV5UWl4RlFVRkZMRU5CUVVNN1VVRkRNVU1zZFVKQlFXdENMRWRCUVZrc1MwRkJTeXhEUVVGRE8xRkJSWEJETEZkQlFVMHNSMEZCVnl4RFFVRkRMRU5CUVVNN1VVRkZha0lzU1VGQlNTeERRVUZETEZkQlFWY3NSMEZCUnl4RlFVRkZMRU5CUVVNc1ZVRkJWU3hEUVVGRExGRkJRVkVzUlVGQlJTeERRVUZETEVWQlFVVXNSMEZCUnl4RlFVRkZMRWRCUVVjc1NVRkJTU3hEUVVGRExFMUJRVTBzUjBGQlJ5eEpRVUZKTEVOQlFVTXNWMEZCVnl4RFFVRkRMRXRCUVVzc1NVRkJTU3hEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXp0UlFVTndSeXhKUVVGSkxFTkJRVU1zVFVGQlRTeEhRVUZITEUxQlFVMHNRMEZCUXp0UlFVTnlRaXh6UWtGQmMwSTdVVUZEZEVJc1NVRkJTU3hEUVVGRExHdENRVUZyUWl4SFFVRkhMR3RDUVVGclFpeERRVUZETEVsQlFVa3NRMEZCUXl4RFFVRkRMRU5CUVVNc1JVRkJSU3hEUVVGRExFVkJRVVVzUlVGQlJUdFpRVU42UkN4SlFVRkpMRU5CUVVNc1EwRkJReXhEUVVGRExFdEJRVXNzUTBGQlF5eE5RVUZOTEV0QlFVc3NRMEZCUXl4SlFVRkpMRU5CUVVNc1EwRkJReXhMUVVGTExFTkJRVU1zVFVGQlRTeExRVUZMTEVOQlFVTXNRMEZCUXl4SlFVRkpMRU5CUVVNc1EwRkJReXhMUVVGTExFTkJRVU1zVFVGQlRTeExRVUZMTEVOQlFVTXNRMEZCUXl4TFFVRkxMRU5CUVVNc1RVRkJUVHRuUWtGRGNrWXNUMEZCVHl4RFFVRkRMRU5CUVVNc1MwRkJTeXhEUVVGRExFMUJRVTBzUjBGQlJ5eERRVUZETEVOQlFVTXNTMEZCU3l4RFFVRkRMRTFCUVUwc1EwRkJRenRaUVVONlF5eEpRVUZKTEVOQlFVTXNRMEZCUXl4TFFVRkxMRU5CUVVNc1RVRkJUU3hMUVVGTExFTkJRVU1zUTBGQlF5eExRVUZMTEVOQlFVTXNUVUZCVFR0blFrRkRia01zVDBGQlR5eERRVUZETEVOQlFVTXNTMEZCU3l4RFFVRkRMRTFCUVUwc1IwRkJSeXhEUVVGRExFTkJRVU1zUzBGQlN5eERRVUZETEUxQlFVMHNRMEZCUXp0WlFVTjZReXhKUVVGSkxFTkJRVU1zUTBGQlF5eFJRVUZSTEVOQlFVTXNUVUZCVFN4TFFVRkxMRU5CUVVNc1NVRkJTU3hEUVVGRExFTkJRVU1zVVVGQlVTeERRVUZETEUxQlFVMHNTMEZCU3l4RFFVRkRPMmRDUVVOd1JDeFBRVUZQTEVOQlFVTXNRMEZCUXl4UlFVRlJMRU5CUVVNc1RVRkJUU3hIUVVGSExFTkJRVU1zUTBGQlF5eFJRVUZSTEVOQlFVTXNUVUZCVFN4RFFVRkRPMWxCUXk5RExFbEJRVWtzUTBGQlF5eERRVUZETEZGQlFWRXNRMEZCUXl4TlFVRk5MRXRCUVVzc1EwRkJReXhEUVVGRExGRkJRVkVzUTBGQlF5eE5RVUZOTzJkQ1FVTjZReXhQUVVGUExFTkJRVU1zUTBGQlF5eFJRVUZSTEVOQlFVTXNUVUZCVFN4SFFVRkhMRU5CUVVNc1EwRkJReXhSUVVGUkxFTkJRVU1zVFVGQlRTeERRVUZETzFsQlF5OURMRTlCUVU4c1EwRkJReXhEUVVGRExFdEJRVXNzUTBGQlF5eE5RVUZOTEVkQlFVY3NRMEZCUXl4RFFVRkRMRXRCUVVzc1EwRkJReXhOUVVGTkxFTkJRVU03VVVGRGVrTXNRMEZCUXl4RFFVRkRMRU5CUVVNN1VVRkRTQ3hKUVVGSkxFTkJRVU1zYTBKQlFXdENMRU5CUVVNc1QwRkJUeXhEUVVGRExFTkJRVU1zUTBGQlF5eEZRVUZGTEVWQlFVVTdXVUZEY0VNc1NVRkJTU3hEUVVGRExGbEJRVmtzUTBGQlF5eFhRVUZYTEVOQlFVTXNRMEZCUXl4RFFVRkRMRWxCUVVrc1EwRkJReXhEUVVGRExFZEJRVWNzUTBGQlF5eERRVUZETEVsQlFVa3NRMEZCUXp0UlFVTnNSQ3hEUVVGRExFTkJRVU1zUTBGQlF6dFJRVU5JTEVsQlFVa3NRMEZCUXl3d1FrRkJNRUlzUjBGQlJ5eEZRVUZGTEVOQlFVTXNWMEZCVnl4RFFVRkRMRzFDUVVGdFFpeEZRVU5zUlN4WFFVRlhMRU5CUVVNc1NVRkJTU3hEUVVGRExHdENRVUZyUWl4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRExFbEJRVWtzUTBGQlF5eEZRVUZGTEVsQlFVa3NRMEZCUXl4clFrRkJhMElzUTBGQlF5eEhRVUZITEVOQlFVTXNRMEZCUXl4RlFVRkZMRVZCUVVVc1JVRkJSU3hEUVVGRExGZEJRVmNzUTBGQlF5eEZRVUZGTEVOQlFVTXNTVUZCU1N4RFFVRkRMRU5CUVVNc1JVRkRka2NzUjBGQlJ5eEZRVUZGTzFsQlEwZ3NUVUZCVFN4SFFVRkhMRWRCUVVjc1NVRkJTU3hEUVVGRExEQkNRVUV3UWl4RFFVRkRMRXRCUVUwc1EwRkJRenRaUVVOdVJDeE5RVUZOTEVsQlFVa3NSMEZCUnl4SlFVRkpMRU5CUVVNc1dVRkJXU3hEUVVGRExFZEJRVWNzUTBGQlF5eERRVUZETzFsQlEzQkRMRWxCUVVrc1EwRkJReXcyUWtGQk5rSXNSMEZCUnl4RlFVRkZMRU5CUVVNN1dVRkRlRU1zU1VGQlNTeERRVUZETEdkQ1FVRm5RaXhIUVVGSExFbEJRVWtzUTBGQlF5eE5RVUZOTEVOQlFVTXNUVUZCVFN4SFFVRkhMRU5CUVVNc1EwRkJRenRaUVVNdlF5eE5RVUZOTEVsQlFVa3NSMEZCUnl4SlFVRkpMRU5CUVVNc2EwSkJRV3RDTEVOQlFVTXNTVUZCU1N4RFFVRkRMRU5CUVVNc1JVRkJSU3hGUVVGRkxFVkJRVVVzUTBGQlF5eFhRVUZYTEVOQlFVTXNSVUZCUlN4RFFVRkRMRWxCUVVrc1EwRkJReXhMUVVGTExFZEJRVWNzUTBGQlJTeERRVUZETzFsQlEycEdMRWxCUVVrc1EwRkJReXgzUWtGQmQwSXNRMEZCUXl4SlFVRkpMRU5CUVVNc1EwRkJRenRaUVVOd1F5eEZRVUZGTEVOQlFVTXNTMEZCU3l4RFFVRkRMRWxCUVVrc1EwRkJReXcwUWtGQk5FSXNRMEZCUXl4RFFVRkRPMWxCUXpWRExHTkJRV01zUjBGQlJ5eExRVUZMTEVOQlFVTTdXVUZEZGtJc1NVRkJTU3hEUVVGRExFbEJRVWtzUTBGQlF5eG5Ra0ZCWjBJN1owSkJRM2hDTEVsQlFVa3NRMEZCUXl3MlFrRkJOa0lzUTBGQlF5eExRVUZMTEVOQlFVTXNUMEZCVHl4SFFVRkhMRTFCUVUwc1EwRkJRenM3WjBKQlJURkVMRWxCUVVrc1EwRkJReXcyUWtGQk5rSXNRMEZCUXl4TFFVRkxMRU5CUVVNc1QwRkJUeXhIUVVGSExFMUJRVTBzUTBGQlF6dFJRVU01UkN4RFFVRkRMRU5CUTBZc1EwRkJRenRSUVVOR0xFbEJRVWtzUTBGQlF5d3dRa0ZCTUVJc1EwRkJReXhKUVVGSkxFTkJRVU1zUzBGQlN5eERRVUZETEU5QlFVOHNSMEZCUnl4TlFVRk5MRU5CUVVNN1VVRkZOVVFzU1VGQlNTeERRVUZETEdsQ1FVRnBRaXhEUVVGRExFbEJRVWtzUTBGQlF5dzBRa0ZCTkVJc1JVRkJSU3hKUVVGSkxFTkJRVU1zYTBKQlFXdENMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU1zU1VGQlNTeERRVUZETzJGQlEzWkdMRWxCUVVrc1EwRkJReXhIUVVGSExFVkJRVVVzUjBGQlJ5eEZRVUZGTEVOQlFVTXNTMEZCU3l4RFFVRkRMRWxCUVVrc1EwRkJReXcwUWtGQk5FSXNRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU03VVVGRmFFVXNTVUZCU1N4RFFVRkRMSGRDUVVGM1FpeERRVUZETEVsQlFVa3NRMEZCUXl4clFrRkJhMElzUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRPMUZCUXpGRUxFbEJRVWtzUTBGQlF5eG5Ra0ZCWjBJc1IwRkJSeXhKUVVGSkxFTkJRVU1zYTBKQlFXdENMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU1zU1VGQlNTeERRVUZETEUxQlFVMHNRMEZCUXl4TlFVRk5MRWRCUVVjc1EwRkJReXhEUVVGRE8xRkJSVEZGTEVsQlFVa3NZMEZCWXl4SFFVRkhMRXRCUVVzc1EwRkJRenRSUVVNelFpeEpRVUZKTEVOQlFVTXNOa0pCUVRaQ0xFZEJRVWNzUlVGQlJTeERRVUZETEV0QlFVc3NRMEZCUXl4UlFVRlJMRU5CUVVNc1MwRkJTeXhKUVVGSkxFVkJRVVU3V1VGRGFFVXNZMEZCWXl4SFFVRkhMRU5CUVVNc1kwRkJZeXhEUVVGRE8xbEJRMnBETEVsQlFVa3NZMEZCWXl4RlFVRkZPMmRDUVVOc1FpeE5RVUZOTEVsQlFVa3NRMEZCUXl4cFFrRkJhVUlzUTBGQlF5eEpRVUZKTEVOQlFVTXNORUpCUVRSQ0xFVkJRelZFTEVsQlFVa3NRMEZCUXl4WlFVRlpMRU5CUVVNc1NVRkJTU3hEUVVGRExEQkNRVUV3UWl4RFFVRkRMRXRCUVUwc1EwRkJReXhEUVVGRExFTkJRVU03WVVGRE9VUTdhVUpCUVUwN1owSkJRMHdzUlVGQlJTeERRVUZETEV0QlFVc3NRMEZCUXl4SlFVRkpMRU5CUVVNc05FSkJRVFJDTEVOQlFVTXNRMEZCUXp0aFFVTTNRenRSUVVOSUxFTkJRVU1zUlVGQlJTeHhRMEZCY1VNc1EwRkJReXhEUVVGRE8xRkJSVEZETEVsQlFVa3NRMEZCUXl3d1FrRkJNRUlzUTBGQlF5eEpRVUZKTEVOQlFVTXNVMEZCVXl4RFFVRkRMRWRCUVVjc1EwRkJReXhwUTBGQmFVTXNRMEZCUXl4RFFVRkRPMUZCUTNSR0xFbEJRVWtzUTBGQlF5d3dRa0ZCTUVJc1EwRkJReXhKUVVGSkxFTkJRVU1zVDBGQlR5eERRVUZETEVsQlFVa3NRMEZCUXl3MlFrRkJOa0lzUTBGQlF5eERRVUZETzFGQlJXcEdMRWxCUVVrc1EwRkJReXhKUVVGSkxFTkJRVU1zWjBKQlFXZENPMWxCUTNoQ0xFbEJRVWtzUTBGQlF5dzJRa0ZCTmtJc1EwRkJReXhMUVVGTExFTkJRVU1zVDBGQlR5eEhRVUZITEUxQlFVMHNRMEZCUXpzN1dVRkZNVVFzU1VGQlNTeERRVUZETERaQ1FVRTJRaXhEUVVGRExFdEJRVXNzUTBGQlF5eFBRVUZQTEVkQlFVY3NUVUZCVFN4RFFVRkRPMUZCUlRWRUxFbEJRVWtzUTBGQlF5eHJRa0ZCYTBJc1IwRkJSeXhEUVVGRExFTkJRVU1zYTBKQlFXdENMRU5CUVVNc1RVRkJUU3hIUVVGSExFTkJRVU1zU1VGQlNTeERRVUZETEVsQlFVa3NRMEZCUXl4blFrRkJaMEk3V1VGRGJrWXNhMEpCUVd0Q0xFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTXNhVUpCUVdsQ0xFTkJRVU1zVFVGQlRTeEhRVUZITEVOQlFVTXNRMEZCUXl4RFFVRkRPMUZCUlhCRUxFMUJRVTBzVjBGQlZ5eEhRVUZITEVWQlFVVXNRMEZCUXl4RlFVRkZMRU5CUVVNc1NVRkJTU3hEUVVGRExFMUJRVTBzUTBGQlF5eEpRVUZKTEVWQlFVVXNSVUZCUXl4UFFVRlBMRVZCUVVVc05rTkJRVFpETEVWQlFVTXNRMEZCUXl4RFFVRkRPMUZCUTNSSExFMUJRVTBzWVVGQllTeEhRVUZITzFsQlEzQkNMRmRCUVZjc1JVRkJSU3hKUVVGSkxFTkJRVU1zTUVKQlFUQkNMRU5CUVVNc1NVRkJTVHRaUVVOcVJDeEpRVUZKTEVOQlFVTXNlVUpCUVhsQ0xFVkJRVVVzU1VGQlNTeERRVUZETEZkQlFWY3NRMEZCUXl4SlFVRkpPMU5CUTNSRUxFTkJRVU03VVVGRFJpeHJRa0ZCYTBJN1VVRkRiRUlzUlVGQlJTeERRVUZETEU5QlFVOHNRMEZCUXl4SlFVRkpMRU5CUVVNc1YwRkJWeXhGUVVGRkxFbEJRVWtzUTBGQlF5eE5RVUZOTEVOQlFVTXNTVUZCU1N4RFFVRkRMRU5CUVVNN1VVRkZMME1zWVVGQllTeERRVUZETEU5QlFVOHNRMEZCUXl4RFFVRkRMRVZCUVVVc1JVRkJSU3hEUVVGRExFVkJRVVVzUlVGQlJUdFpRVU01UWl4RlFVRkZMRU5CUVVNc1MwRkJTeXhEUVVGRExFdEJRVXNzUjBGQlJ5eEhRVUZITEZsQlFWa3NRMEZCUXl4RFFVRkRMRU5CUVVNc1IwRkJSeXhEUVVGRE8xRkJRM3BETEVOQlFVTXNRMEZCUXl4RFFVRkRPMUZCUlVnc1lVRkJZVHRSUVVOaUxHRkJRV0VzUTBGQlF5eFBRVUZQTEVOQlFVTXNRMEZCUXl4RlFVRkZMRVZCUVVVc1JVRkJSU3hEUVVGRExFVkJRVVVzUTBGQlF5eFRRVUZUTEVOQlFVTXNSMEZCUnl4RFFVRkRMREpEUVVFeVF5eERRVUZETEVOQlFVTXNRMEZCUXp0UlFVVTNSaXhOUVVGTkxHdENRVUZyUWl4SFFVRkhMRVZCUVVVc1EwRkJReXhKUVVGSkxFTkJRMmhETEdGQlFXRXNSVUZCUlN4RlFVRkRMRTlCUVU4c1JVRkJSU3h4UTBGQmNVTXNSVUZCUXl4RFFVTm9SU3hEUVVGRE8xRkJSVVlzU1VGQlNTeERRVUZETEZsQlFWa3NSMEZCUnl4RlFVRkZMRU5CUVVNc1NVRkJTU3hEUVVGRExFVkJRVVVzUTBGQlF5eERRVUZETzFGQlEyaERMRWxCUVVrc1EwRkJReXhUUVVGVExFTkJRVU1zVjBGQlZ5eERRVUZETEd0Q1FVRnJRaXhEUVVGRExFTkJRVU03VVVGREwwTXNTVUZCU1N4RFFVRkRMRk5CUVZNc1EwRkJReXhYUVVGWExFTkJRVU1zU1VGQlNTeERRVUZETERSQ1FVRTBRaXhEUVVGRExFTkJRVU03VVVGRE9VUXNTVUZCU1N4RFFVRkRMRmxCUVZrc1EwRkJReXhYUVVGWExFTkJRVU1zU1VGQlNTeERRVUZETEZOQlFWTXNRMEZCUXl4RFFVRkRPMGxCUTJoRUxFTkJRVU03U1VGRlJDeDNRa0ZCZDBJc1EwRkJReXhQUVVGcFF6dFJRVU40UkN4TlFVRk5MRXRCUVVzc1IwRkJSeXhGUVVGRkxFTkJRVU1zVjBGQlZ5eERRVUZETEcxQ1FVRnRRaXhGUVVGRkxFOUJRVThzUTBGQlF5eHBRa0ZCYVVJc1EwRkJReXhEUVVGRExFTkJRVU1zUlVGQlJTeFBRVUZQTEVOQlFVTXNhVUpCUVdsQ0xFTkJRVU1zUTBGQlF6dFJRVU16Unl4SlFVRkpMRU5CUVVNc1NVRkJTU3hEUVVGRExIbENRVUY1UWl4RlFVRkZPMWxCUTI1RExFbEJRVWtzUTBGQlF5eDVRa0ZCZVVJc1IwRkJSeXhMUVVGTExFTkJRVU1zU1VGQlNTeERRVUZETzFsQlF6VkRMRWxCUVVrc1EwRkJReXh4UWtGQmNVSXNSMEZCUnl4TFFVRkxMRU5CUVVNN1UwRkRjRU03WVVGQlRUdFpRVU5NTEVWQlFVVXNRMEZCUXl4TFFVRkxMRU5CUVVNc1NVRkJTU3hEUVVGRExIbENRVUY1UWl4RFFVRkRMRU5CUVVNN1dVRkRla01zU1VGQlNTeERRVUZETEhGQ1FVRnhRaXhIUVVGSExFdEJRVXNzUTBGQlF6dFpRVU51UXl4TFFVRkxMRU5CUVVNc1NVRkJTU3hEUVVGRExFbEJRVWtzUTBGQlF5eHhRa0ZCY1VJc1EwRkJReXhKUVVGSkxFTkJRVU1zVVVGQlVTeERRVUZETzJsQ1FVTnFSQ3hQUVVGUExFTkJRVU1zUTBGQlF5eEZRVUZGTEVWQlFVVXNSVUZCUlN4RFFVRkRMRWxCUVVrc1EwRkJReXg1UWtGQmVVSXNRMEZCUXl4WFFVRlhMRU5CUVVNc1JVRkJSU3hEUVVGRExFTkJRVU1zUTBGQlF6dFRRVU53UlR0SlFVTklMRU5CUVVNN1NVRkZSQ3hKUVVGSkxIRkNRVUZ4UWp0UlFVTjJRaXhQUVVGUExFbEJRVWtzUTBGQlF5eFpRVUZaTEVOQlFVTXNTVUZCU1N4RFFVRkRMREJDUVVFd1FpeERRVUZETEV0QlFVMHNRMEZCUXl4RFFVRkRPMGxCUTI1RkxFTkJRVU03U1VGRFJDeExRVUZMTEVOQlFVTXNhVUpCUVdsQ0xFTkJRVU1zVlVGQmRVSXNSVUZCUlN4SlFVRmhPMUZCUXpWRUxFVkJRVVVzUTBGQlF5eExRVUZMTEVOQlFVTXNWVUZCVlN4RFFVRkRMRU5CUVVNN1VVRkRja0lzU1VGQlNTeEpRVUZKTEVOQlFVTXNUVUZCVFN4RFFVRkRMRTFCUVUwc1IwRkJSeXhEUVVGRE8xbEJRM2hDTEU5QlFVOHNSVUZCUlN4RFFVRkRMRWRCUVVjc1JVRkJSU3hEUVVGRE8xRkJRMnhDTEUxQlFVMHNSVUZCUlN4SFFVRkhMRWxCUVVrc1EwRkJReXhQUVVGUExFVkJRVVVzUTBGQlF6dFJRVU14UWl4TlFVRk5MRTFCUVUwc1IwRkJSeXhOUVVGTkxFVkJRVVVzUTBGQlF5eFhRVUZYTEVOQlFVTXNSVUZCUlN4RFFVRkRMRWRCUVVjc1JVRkJSU3hEUVVGRExFTkJRVU03VVVGRE9VTXNTMEZCU3l4SlFVRkpMRU5CUVVNc1IwRkJSeXhEUVVGRExFVkJRVVVzUTBGQlF5eEhRVUZITEVsQlFVa3NRMEZCUXl4TlFVRk5MRU5CUVVNc1RVRkJUU3hGUVVGRkxFTkJRVU1zUlVGQlJTeEZRVUZGTzFsQlF6TkRMRTFCUVUwc1RVRkJUU3hIUVVGSExFbEJRVWtzUTBGQlF5eE5RVUZOTEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNN1dVRkRPVUlzVFVGQlRTeEhRVUZITEVkQlFVY3NTVUZCU1N4RFFVRkRMRFpDUVVFMlFpeERRVUZETEUxQlFVMHNRMEZCUXl4SlFVRkpMRU5CUVVNN1owSkJRM1pFTEVWQlFVVXNRMEZCUXl4WFFVRlhMRU5CUVVNc1NVRkJTU3hEUVVGRExFMUJRVTBzUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXl4SlFVRkpMRU5CUVVNc1EwRkJReXhMUVVGTExFbEJRVWtzVFVGQlRTeERRVUZETEZsQlFWa3NRMEZCUXp0WlFVTnlSU3hKUVVGSkxFZEJRVWM3WjBKQlEwd3NTVUZCU1N4RFFVRkRMRFpDUVVFMlFpeERRVUZETEUxQlFVMHNRMEZCUXl4SlFVRkpMRU5CUVVNc1IwRkJSeXhIUVVGSExFTkJRVU03V1VGRGVFUXNUVUZCVFN4TFFVRkxMRWRCUVVjc1RVRkJUU3hEUVVGRExFbEJRVWtzUTBGQlF5eERRVUZETEVkQlFVY3NSVUZCUlN4RlFVRkZMRU5CUVVNc1IwRkJSeXhEUVVGRExGRkJRVkVzUTBGQlF5eEpRVUZKTEV0QlFVc3NUVUZCVFN4RFFVRkRMRWxCUVVrc1EwRkJReXhEUVVGRE8xbEJRM1JGTEVsQlFVa3NRMEZCUXl4TFFVRkxPMmRDUVVOU0xGTkJRVk03V1VGRFdDeEpRVUZKTEVsQlFVa3NRMEZCUXl3MlFrRkJOa0lzUTBGQlF5eE5RVUZOTEVOQlFVTXNTVUZCU1N4RFFVRkRMRXRCUVVzc1NVRkJTVHRuUWtGRGVFUXNTVUZCU1N4RFFVRkRMRFpDUVVFMlFpeERRVUZETEUxQlFVMHNRMEZCUXl4SlFVRkpMRU5CUVVNc1MwRkJTeXhUUVVGVE8yZENRVU12UkN4TFFVRkxMRU5CUVVNc1MwRkJTeXhIUVVGSExFbEJRVWtzUTBGQlF5dzJRa0ZCTmtJc1EwRkJReXhOUVVGTkxFTkJRVU1zU1VGQlNTeERRVUZETEVOQlFVTTdXVUZEYUVVc1MwRkJTeXhEUVVGRExGTkJRVk1zUTBGQlF5eEhRVUZITEVWQlFVVXNSMEZCUnl4SlFVRkpMRU5CUVVNc05rSkJRVFpDTEVOQlFVTXNUVUZCVFN4RFFVRkRMRWxCUVVrc1EwRkJReXhIUVVGSExFdEJRVXNzUTBGQlF5eExRVUZMTEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJRenRaUVVNeFJpeFZRVUZWTEVOQlFVTXNUVUZCVFN4RFFVRkRMRXRCUVVzc1EwRkJReXhKUVVGSkxFTkJRVU1zUTBGQlF6dFRRVU12UWp0UlFVTkVMRlZCUVZVc1EwRkJReXhMUVVGTExFTkJRVU1zV1VGQldTeEhRVUZITEUxQlFVMHNRMEZCUXp0UlFVTjJReXhQUVVGUExGVkJRVlVzUTBGQlF6dEpRVU53UWl4RFFVRkRPME5CUTBvN1FVRkZSQ3hUUVVGVExGZEJRVmNzUTBGQlF5eEpRVUZoTzBsQlEyaERMRTlCUVU4c1NVRkJTU3hEUVVGRExGbEJRVmtzU1VGQlNTeEpRVUZKTEVOQlFVTXNTVUZCU1N4RFFVRkRPMEZCUTNoRExFTkJRVU03UVVGRlJDeE5RVUZOTEhkQ1FVRjNRanRKUVZFMVFqdFJRVkJCTEN0Q1FVRXdRaXhIUVVGdlF5eEZRVUZGTEVOQlFVTTdVVUZGZWtRc1ZVRkJTeXhIUVVGblFpeEZRVUZGTEVOQlFVTXNSMEZCUnl4RFFVRkRMRVZCUVVVc1EwRkJReXhEUVVGRE8xRkJRMmhETEhkQ1FVRnRRaXhIUVVGWkxFVkJRVVVzUTBGQlF6dFJRVU5zUXl4cFFrRkJXU3hIUVVGblFpeEZRVUZGTEVOQlFVTXNSMEZCUnl4RFFVRkRMRVZCUVVVc1EwRkJReXhEUVVGRE8xRkJSWFpETEc5Q1FVRmxMRWRCUVZrc1MwRkJTeXhEUVVGRE8xRkJSWFpETEVsQlFVa3NRMEZCUXl4aFFVRmhMRWRCUVVjc1JVRkJSU3hEUVVGRExFdEJRVXNzUTBGQlF5eFJRVUZSTEVOQlFVTXNTMEZCU3l4SlFVRkpMRVZCUVVVN1dVRkRhRVFzU1VGQlNTeERRVUZETEdWQlFXVXNSMEZCUnl4RFFVRkRMRWxCUVVrc1EwRkJReXhsUVVGbExFTkJRVU03V1VGRE4wTXNTVUZCU1N4SlFVRkpMRU5CUVVNc1pVRkJaVHRuUWtGRGRFSXNTVUZCU1N4RFFVRkRMRmxCUVZrc1EwRkJReXhMUVVGTExFTkJRVU1zVDBGQlR5eEhRVUZITEU5QlFVOHNRMEZCUXpzN1owSkJSVEZETEVsQlFVa3NRMEZCUXl4WlFVRlpMRU5CUVVNc1MwRkJTeXhEUVVGRExFOUJRVThzUjBGQlJ5eE5RVUZOTEVOQlFVTTdVVUZETjBNc1EwRkJReXhEUVVGRExFTkJRVU03VVVGRFNDeEpRVUZKTEVOQlFVTXNXVUZCV1N4RFFVRkRMRXRCUVVzc1EwRkJReXhQUVVGUExFZEJRVWNzVFVGQlRTeERRVUZETzFGQlJYcERMRTFCUVUwc2JVSkJRVzFDTEVkQlFVY3NSVUZCUlN4RFFVRkRMRWxCUVVrc1EwRkJReXhKUVVGSkxFTkJRVU1zUlVGQlF5eEpRVUZKTEVWQlFVVXNRMEZCUXl4dFEwRkJiVU1zUTBGQlF5eEZRVUZETEVOQlFVTTdZVUZEY0VZc1RVRkJUU3hEUVVGRExFTkJRVU1zUTBGQlF5eEZRVUZGTEVWQlFVVXNRMEZCUXl4RFFVRkRMRU5CUVVNc1RVRkJUU3hEUVVGRExFMUJRVTBzU1VGQlNTeERRVUZETEVOQlFVTXNRMEZCUXp0UlFVTjJReXh0UWtGQmJVSXNRMEZCUXl4UFFVRlBMRU5CUVVNc1EwRkJReXhEUVVGRExFVkJRVVVzUlVGQlJUdFpRVU5vUXl4TlFVRk5MRWxCUVVrc1IwRkJSeXhEUVVGRExFTkJRVU1zV1VGQldTeEpRVUZKTEVOQlFVTXNRMEZCUXl4SlFVRkpMRU5CUVVNN1dVRkRkRU1zU1VGQlNTeERRVUZETERCQ1FVRXdRaXhEUVVGRExFbEJRVWtzUTBGQlF5eEhRVUZITEVOQlFVTXNRMEZCUXp0UlFVTTFReXhEUVVGRExFTkJRVU1zUTBGQlF6dFJRVU5JTEVsQlFVa3NRMEZCUXl3d1FrRkJNRUlzUTBGQlF5eE5RVUZOTEVOQlFVTXNSMEZCUnl4SlFVRkpMRU5CUVVNN1VVRkZMME1zVFVGQlRTeDVRa0ZCZVVJc1IwRkJSeXhOUVVGTkxFTkJRVU1zU1VGQlNTeERRVUZETEVsQlFVa3NRMEZCUXl3d1FrRkJNRUlzUTBGQlF5eERRVUZETEVsQlFVa3NRMEZCUXl4RFFVRkRMRVZCUVVVc1JVRkJSU3hGUVVGRkxFTkJRM3BHTEVOQlFVTXNRMEZCUXl4SlFVRkpMRU5CUVVNc01FSkJRVEJDTEVOQlFVTXNSVUZCUlN4RFFVRkRMRVZCUVVVc1QwRkJUeXhGUVVGRkxFTkJRVU1zTkVOQlFUUkRMRU5CUVVNc1EwRkJReXhKUVVGSkxFMUJRVTBzUTBGQlF6dFJRVU0xUnl4SlFVRkpMRU5CUVVNc01rSkJRVEpDTzFsQlF6bENMRVZCUVVVc1EwRkJReXhYUVVGWExFTkJRVU1zWjBKQlFXZENMRVZCUVVVc2VVSkJRWGxDTEVWQlEzaEVMRTFCUVUwc1EwRkJReXhKUVVGSkxFTkJRVU1zU1VGQlNTeERRVUZETERCQ1FVRXdRaXhEUVVGRExFVkJRVVVzUzBGQlN5eEpRVUZKTEVWQlFVVXNSMEZCUnl4TlFVRk5MRWxCUVVrc1EwRkJReXhwUWtGQmFVSXNSVUZCUlN4RFFVRkRMRU5CUVVNc1EwRkJReXhGUVVNM1JpeEZRVUZETEZGQlFWRXNSVUZCUlN4TFFVRkxMRVZCUVVNc1EwRkJReXhEUVVGRE8xRkJRM1pDTEVsQlFVa3NRMEZCUXl4cFFrRkJhVUlzUlVGQlJTeERRVUZETzFGQlEzcENMRWxCUVVrc1EwRkJReXd5UWtGQk1rSXNRMEZCUXl4UlFVRlJMRWRCUVVjc1MwRkJTeXhEUVVGRE8xRkJRMnhFTEVsQlFVa3NRMEZCUXl3eVFrRkJNa0lzUTBGQlF5eFRRVUZUTEVOQlFVTXNSMEZCUnl4RFFVRkRMR2xEUVVGcFF5eERRVUZETEVOQlFVTTdVVUZEYkVZc1NVRkJTU3hEUVVGRExESkNRVUV5UWl4RFFVRkRMRWxCUVVrc1EwRkJReXhQUVVGUExFTkJRVU1zU1VGQlNTeERRVUZETEdGQlFXRXNRMEZCUXl4RFFVRkRPMUZCUTJ4RkxFbEJRVWtzUTBGQlF5eExRVUZMTEVOQlFVTXNWMEZCVnl4RFFVRkRMRWxCUVVrc1EwRkJReXd5UWtGQk1rSXNRMEZCUXl4SlFVRkpMRU5CUVVNc1EwRkJRenRSUVVNNVJDeEpRVUZKTEVOQlFVTXNTMEZCU3l4RFFVRkRMRmRCUVZjc1EwRkJReXhKUVVGSkxFTkJRVU1zV1VGQldTeERRVUZETEVOQlFVTTdTVUZETlVNc1EwRkJRenRKUVVWRUxFbEJRVWtzYzBKQlFYTkNPMUZCUTNoQ0xFOUJRVThzU1VGQlNTeERRVUZETERKQ1FVRXlRaXhEUVVGRExFdEJRVXNzUTBGQlF5eERRVUZETzFsQlF6ZERMRWxCUVVrc1EwRkJReXd3UWtGQk1FSXNRMEZCUXl4SlFVRkpMRU5CUVVNc01rSkJRVEpDTEVOQlFVTXNTMEZCU3l4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRExFbEJRVWtzUTBGQlF6dEpRVU51Uml4RFFVRkRPMGxCUlVRc1MwRkJTeXhEUVVGRExHbENRVUZwUWp0UlFVTnlRaXhOUVVGTkxFbEJRVWtzUjBGQlJ5eEpRVUZKTEVOQlFVTXNjMEpCUVhOQ0xFTkJRVU03VVVGRGVrTXNSVUZCUlN4RFFVRkRMRXRCUVVzc1EwRkJReXhKUVVGSkxFTkJRVU1zV1VGQldTeERRVUZETEVOQlFVTTdVVUZETlVJc1NVRkJTU3hEUVVGRExHMUNRVUZ0UWl4SFFVRkhMRVZCUVVVc1EwRkJRenRSUVVNNVFpeEpRVUZKTEVOQlFVTXNTVUZCU1N4SlFVRkpMRWxCUVVrc1EwRkJReXhOUVVGTkxFTkJRVU1zVFVGQlRTeEhRVUZITEVOQlFVTXNSVUZCUlR0WlFVTnVReXhKUVVGSkxFTkJRVU1zWVVGQllTeERRVUZETEV0QlFVc3NRMEZCUXl4UFFVRlBMRWRCUVVjc1RVRkJUU3hEUVVGRE8xbEJRekZETEU5QlFVODdVMEZEVWp0UlFVRkJMRU5CUVVNN1VVRkRSaXhKUVVGSkxFTkJRVU1zWVVGQllTeERRVUZETEV0QlFVc3NRMEZCUXl4UFFVRlBMRWRCUVVjc1RVRkJUU3hEUVVGRE8xRkJRekZETEUxQlFVMHNSVUZCUlN4SFFVRkhMRWxCUVVrc1EwRkJReXhQUVVGUExFVkJRVVVzUTBGQlF6dFJRVU14UWl4TlFVRk5MRTFCUVUwc1IwRkJSeXhOUVVGTkxFVkJRVVVzUTBGQlF5eFhRVUZYTEVOQlFVTXNSVUZCUlN4RFFVRkRMRWRCUVVjc1JVRkJSU3hEUVVGRExFTkJRVU03VVVGRE9VTXNTMEZCU3l4SlFVRkpMRU5CUVVNc1IwRkJSeXhEUVVGRExFVkJRVVVzUTBGQlF5eEhRVUZITEVsQlFVa3NRMEZCUXl4TlFVRk5MRU5CUVVNc1RVRkJUU3hGUVVGRkxFTkJRVU1zUlVGQlJTeEZRVUZGTzFsQlF6TkRMRTFCUVUwc1RVRkJUU3hIUVVGSExFbEJRVWtzUTBGQlF5eE5RVUZOTEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNN1dVRkRPVUlzVFVGQlRTeEhRVUZITEVkQlFVY3NTVUZCU1N4RFFVRkRMRzFDUVVGdFFpeERRVUZETEUxQlFVMHNRMEZCUXl4SlFVRkpMRU5CUVVNN1owSkJReTlETEVWQlFVVXNRMEZCUXl4WFFVRlhMRU5CUVVNc1NVRkJTU3hEUVVGRExFMUJRVTBzUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXl4SlFVRkpMRU5CUVVNc1EwRkJReXhMUVVGTExFbEJRVWtzVFVGQlRTeERRVUZETEZsQlFWa3NRMEZCUXp0WlFVTnVSU3hKUVVGSkxFZEJRVWM3WjBKQlEwd3NTVUZCU1N4RFFVRkRMRzFDUVVGdFFpeERRVUZETEUxQlFVMHNRMEZCUXl4SlFVRkpMRU5CUVVNc1IwRkJSeXhIUVVGSExFTkJRVU03V1VGRE9VTXNUVUZCVFN4TFFVRkxMRWRCUVVjc1RVRkJUU3hEUVVGRExFbEJRVWtzUTBGQlF5eERRVUZETEVkQlFVY3NSVUZCUlN4RlFVRkZMRU5CUVVNc1IwRkJSeXhEUVVGRExGRkJRVkVzUTBGQlF5eEpRVUZKTEV0QlFVc3NUVUZCVFN4RFFVRkRMRWxCUVVrc1EwRkJReXhEUVVGRE8xbEJRM1JGTEVsQlFVa3NRMEZCUXl4TFFVRkxPMmRDUVVOU0xGTkJRVk03V1VGRFdDeExRVUZMTEVOQlFVTXNVMEZCVXl4RFFVRkRMRWRCUVVjc1JVRkJSU3hIUVVGSExFbEJRVWtzUTBGQlF5eHRRa0ZCYlVJc1EwRkJReXhOUVVGTkxFTkJRVU1zU1VGQlNTeERRVUZETEVkQlFVY3NTMEZCU3l4RFFVRkRMRXRCUVVzc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETzFsQlEyaEdMRWxCUVVrc1EwRkJReXhaUVVGWkxFTkJRVU1zVFVGQlRTeERRVUZETEV0QlFVc3NRMEZCUXl4SlFVRkpMRU5CUVVNc1EwRkJRenRUUVVOMFF6dEpRVU5JTEVOQlFVTTdTVUZGUkN4SlFVRkpMRWxCUVVrN1VVRkRUaXhQUVVGUExFbEJRVWtzUTBGQlF5eExRVUZMTEVOQlFVTTdTVUZEY0VJc1EwRkJRenRKUVVWRUxFbEJRVWtzU1VGQlNUdFJRVU5PTEU5QlFVOHNTVUZCU1N4RFFVRkRMRzFDUVVGdFFpeERRVUZETzBsQlEyeERMRU5CUVVNN1EwRkRSaUlzSW5OdmRYSmpaWE5EYjI1MFpXNTBJanBiSW1sdGNHOXlkQ0FxSUdGeklHZHliMnNnWm5KdmJTQW5aR0YwWVdkeWIyc3RZWEJwTDJkeWIyc25PMXh1YVcxd2IzSjBJQ29nWVhNZ2RXa2dabkp2YlNBblpHRjBZV2R5YjJzdFlYQnBMM1ZwSnp0Y2JtbHRjRzl5ZENBcUlHRnpJRVJISUdaeWIyMGdKMlJoZEdGbmNtOXJMV0Z3YVM5a1p5YzdYRzVwYlhCdmNuUWdlMFJwYlZKbFpIVmpkR2x2YmsxbGRHaHZaSE45SUdaeWIyMGdKeTR2ZEhsd1pYTW5PMXh1YVcxd2IzSjBJSHRFYVcxU1pXUjFZM1JwYjI1RlpHbDBiM0pQY0hScGIyNXpMQ0JFUWxOallXNVBjSFJwYjI1emZTQm1jbTl0SUNjdUxpOW1kVzVqZEdsdmJrVmthWFJ2Y25NdlpHbHRaVzV6YVc5dVlXeHBkSGt0Y21Wa2RXTjBhVzl1TFdWa2FYUnZjaWM3WEc1cGJYQnZjblFnZTBsRVFsTmpZVzVQY0hScGIyNXpmU0JtY205dElDZEFaR0YwWVdkeWIyc3RiR2xpY21GeWFXVnpMMjFoZEdnbk8xeHVhVzF3YjNKMElIdFBjSFJwYjI1emZTQm1jbTl0SUNkQVpHRjBZV2R5YjJzdGJHbGljbUZ5YVdWekwzVjBhV3h6TDNOeVl5OTBlWEJsTFdSbFkyeGhjbUYwYVc5dWN5YzdYRzVwYlhCdmNuUWdlMFJKVFY5U1JVUmZSRVZHUVZWTVZGOVFUMU5VVUZKUFEwVlRVMGxPUjE5R1ZVNURWRWxQVGw5TlJWUkJMQ0JFU1UxZlVrVkVYMUJQVTFSUVVrOURSVk5UU1U1SFgwWlZUa05VU1U5T1gxUkJSeXhjYmlBZ1JFbE5YMUpGUkY5UVVrVlFVazlEUlZOVFNVNUhYMFpWVGtOVVNVOU9YMVJCUnl3Z1UxVlFVRTlTVkVWRVgwUkpVMVJCVGtORlgwWlZUa05VU1U5T1UxOVVRVWNzWEc0Z0lGTlZVRkJQVWxSRlJGOVRSVTFVV1ZCRlUxOVVRVWNzSUZOVlVGQlBVbFJGUkY5VVdWQkZVMTlVUVVjc0lGTlZVRkJQVWxSRlJGOVZUa2xVVTE5VVFVZDlJR1p5YjIwZ0p5NHVMMloxYm1OMGFXOXVSV1JwZEc5eWN5OWpiMjV6ZEhNbk8xeHVhVzF3YjNKMElIdEVhWE4wWVc1alpVRm5aM0psWjJGMGFXOXVUV1YwYUc5a2MzMGdabkp2YlNBbkxpNHZaR2x6ZEdGdVkyVXRiV0YwY21sNEwzUjVjR1Z6Snp0Y2JtbHRjRzl5ZENCN1NVUnBiVkpsWkhWamRHbHZibEJoY21GdExDQkpWRk5PUlU5d2RHbHZibk1zSUVsVlRVRlFUM0IwYVc5dWMzMGdabkp2YlNBbkxpOXRkV3gwYVMxamIyeDFiVzR0WkdsdExYSmxaSFZqWlhJbk8xeHVhVzF3YjNKMElIdFRkV0pxWldOMGZTQm1jbTl0SUNkeWVHcHpKenRjYm1sdGNHOXlkQ0FuTGk0dkxpNHZZM056TDNOMGVXeGxjeTVqYzNNbk8xeHVhVzF3YjNKMElIdG5aWFJIVUZWQlpHRndkR1Z5UkdWelkzSnBjSFJwYjI1OUlHWnliMjBnSjBCa1lYUmhaM0p2YXkxc2FXSnlZWEpwWlhNdmJXRjBhQzl6Y21NdmQyVmlSMUJWTDJkbGRFZFFWVVJsZG1salpTYzdYRzVjYm1WNGNHOXlkQ0JqYkdGemN5QlZUVUZRVDNCMGFXOXVjeUI3WEc0Z0lHeGxZWEp1YVc1blVtRjBaVG9nU1VScGJWSmxaSFZqZEdsdmJsQmhjbUZ0SUQxY2JpQWdlM1ZwVG1GdFpUb2dKMHhsWVhKdWFXNXBaeUJ5WVhSbEp5d2dkbUZzZFdVNklERXNJSFJ2YjJ4MGFYQTZJQ2RVYUdVZ2FXNXBkR2xoYkNCc1pXRnlibWx1WnlCeVlYUmxJR1p2Y2lCMGFHVWdaVzFpWldSa2FXNW5JRzl3ZEdsdGFYcGhkR2x2YmlkOU8xeHVJQ0F2THlCdVEyOXRjRzl1Wlc1MGN6b2dTVVJwYlZKbFpIVmpkR2x2YmxCaGNtRnRJRDFjYmlBZ0x5OGdlM1ZwVG1GdFpUb2dKME52YlhCdmJtVnVkSE1uTENCMllXeDFaVG9nTWl3Z2RHOXZiSFJwY0RvZ0oxUm9aU0J1ZFcxaVpYSWdiMllnWTI5dGNHOXVaVzUwY3lBb1pHbHRaVzV6YVc5dWN5a2dkRzhnY0hKdmFtVmpkQ0IwYUdVZ1pHRjBZU0IwYnlkOU8xeHVJQ0J1UlhCdlkyaHpPaUJKUkdsdFVtVmtkV04wYVc5dVVHRnlZVzBnUFZ4dUlDQWdJSHQxYVU1aGJXVTZJQ2RGY0c5amFITW5MQ0IyWVd4MVpUb2dNQ3hjYmlBZ0lDQWdJSFJ2YjJ4MGFYQTZJQ2RVYUdVZ2JuVnRZbVZ5SUc5bUlHVndiMk5vY3lCMGJ5QnZjSFJwYldsNlpTQmxiV0psWkdScGJtZHpJSFpwWVNCVFIwUXVJRU52YlhCMWRHVmtJR0YxZEc5dFlYUnBZMkZzYkhrZ2FXWWdjMlYwSUhSdklEQW5mVHRjYmlBZ2JrNWxhV2RvWW05eWN6b2dTVVJwYlZKbFpIVmpkR2x2YmxCaGNtRnRJRDFjYmlBZ2UzVnBUbUZ0WlRvZ0owNWxhV2RvWW05eWN5Y3NJSFpoYkhWbE9pQXhOU3dnZEc5dmJIUnBjRG9nSjFSb1pTQnVkVzFpWlhJZ2IyWWdibVZoY21WemRDQnVaV2xuYUdKdmNuTWdkRzhnWTI5dWMzUnlkV04wSUhSb1pTQm1kWHA2ZVNCdFlXNXBabTlzWkNkOU8xeHVJQ0J6Y0hKbFlXUTZJRWxFYVcxU1pXUjFZM1JwYjI1UVlYSmhiU0E5WEc0Z0lIdDFhVTVoYldVNklDZFRjSEpsWVdRbkxDQjJZV3gxWlRvZ01TeGNiaUFnSUNCMGIyOXNkR2x3T2x4dUlDQWdJR0JVYUdVZ1pXWm1aV04wYVhabElITmpZV3hsSUc5bUlHVnRZbVZrWkdWa0lIQnZhVzUwY3l3Z2RYTmxaQ0IzYVhSb0lHMXBiaUJrYVhOMFlXNWpaU0IwYnlCamIyNTBjbTlzSUZ4dUlDQWdJSFJvWlNCamJIVnRjR1ZrTDJScGMzQmxjbk5sWkNCdVlYUjFjbVVnYjJZZ2RHaGxJR1Z0WW1Wa1pHbHVaMkI5TzF4dUlDQnRhVzVFYVhOME9pQkpSR2x0VW1Wa2RXTjBhVzl1VUdGeVlXMGdQVnh1SUNCN2RXbE9ZVzFsT2lBblRXbHVJR1JwYzNSaGJtTmxKeXdnZG1Gc2RXVTZJREF1TVN4Y2JpQWdJQ0IwYjI5c2RHbHdPaUJnVkdobElHVm1abVZqZEdsMlpTQnRhVzVwYlhWdElHUnBjM1JoYm1ObElHSmxkSGRsWlc0Z1pXMWlaV1JrWldRZ2NHOXBiblJ6TENCY2JpQWdkWE5sWkNCM2FYUm9JSE53Y21WaFpDQjBieUJqYjI1MGNtOXNJSFJvWlNCamJIVnRjR1ZrTDJScGMzQmxjbk5sWkNCdVlYUjFjbVVnYjJZZ2RHaGxJR1Z0WW1Wa1pHbHVaMkI5TzF4dUlDQnlZVzVrYjIxVFpXVmtPaUJKUkdsdFVtVmtkV04wYVc5dVVHRnlZVzA4YzNSeWFXNW5QaUE5SUh0MWFVNWhiV1U2SUNkU1lXNWtiMjBnYzJWbFpDY3NJSFpoYkhWbE9pQnVkV3hzTENCMGIyOXNkR2x3T2lBblVtRnVaRzl0SUhObFpXUW5MQ0IwZVhCbE9pQW5jM1J5YVc1bkozMDdYRzRnSUhWelpWZGxZa2RRVlRvZ1NVUnBiVkpsWkhWamRHbHZibEJoY21GdFBHSnZiMnhsWVc0K0lEMWNiaUFnSUNCN2RXbE9ZVzFsT2lBblZYTmxJRmRsWWtkUVZTY3NJSFpoYkhWbE9pQm1ZV3h6WlN3Z2RHOXZiSFJwY0RvZ0oxVnpaU0JYWldKSFVGVWdabTl5SUV0T1RpQmpiMjF3ZFhSaGRHbHZibk1uTENCMGVYQmxPaUFuWW05dmJHVmhiaWNzWEc0Z0lDQWdJQ0JrYVhOaFlteGxWRzl2YkhScGNEb2dKMWRsWWtkUVZTQnBjeUJ1YjNRZ1lYWmhhV3hoWW14bEozMDdYRzRnSUdOdmJuTjBjblZqZEc5eUtDa2dlMXh1SUNBZ0lHZGxkRWRRVlVGa1lYQjBaWEpFWlhOamNtbHdkR2x2YmlncExuUm9aVzRvS0dSbGMyTXBJRDArSUh0Y2JpQWdJQ0FnSUdsbUlDaGtaWE5qS1NCN1hHNGdJQ0FnSUNBZ0lIUm9hWE11ZFhObFYyVmlSMUJWTG5SdmIyeDBhWEFnS3owZ1lDQW9KSHRrWlhOamZTbGdPMXh1SUNBZ0lDQWdmU0JsYkhObElIdGNiaUFnSUNBZ0lDQWdkR2hwY3k1MWMyVlhaV0pIVUZVdWRtRnNkV1VnUFNCbVlXeHpaVHRjYmlBZ0lDQWdJQ0FnZEdocGN5NTFjMlZYWldKSFVGVXVaR2x6WVdKc1pTQTlJSFJ5ZFdVN1hHNGdJQ0FnSUNCOVhHNGdJQ0FnZlNrN1hHNGdJSDA3WEc1OVhHNWNibVY0Y0c5eWRDQmpiR0Z6Y3lCVVUwNUZUM0IwYVc5dWN5QjdYRzRnSUdWd2MybHNiMjQ2SUVsRWFXMVNaV1IxWTNScGIyNVFZWEpoYlNBOVhHNGdJSHQxYVU1aGJXVTZJQ2RGY0hOcGJHOXVKeXdnZG1Gc2RXVTZJREV3TENCMGIyOXNkR2x3T2lBblJYQnphV3h2YmlCcGN5QnNaV0Z5Ym1sdVp5QnlZWFJsSjMwN1hHNGdJSEJsY25Cc1pYaHBkSGs2SUVsRWFXMVNaV1IxWTNScGIyNVFZWEpoYlNBOVhHNGdJSHQxYVU1aGJXVTZJQ2RRWlhKd2JHVjRhWFI1Snl3Z2RtRnNkV1U2SURNd0xDQjBiMjlzZEdsd09pQW5VbTkxWjJoc2VTQm9iM2NnYldGdWVTQnVaV2xuYUdKdmNuTWdaV0ZqYUNCd2IybHVkQ0JwYm1ac2RXVnVZMlZ6SjMwN1hHNGdJQzh2SUdScGJUb2dTVVJwYlZKbFpIVmpkR2x2YmxCaGNtRnRJRDBnZTNWcFRtRnRaVG9nSjBScGJXVnVjMmx2Ym1Gc2FYUjVKeXdnZG1Gc2RXVTZJRElzSUhSdmIyeDBhWEE2SUNkRWFXMWxibk5wYjI1aGJHbDBlU0J2WmlCMGFHVWdaVzFpWldSa2FXNW5KMzA3WEc1Y2JpQWdZMjl1YzNSeWRXTjBiM0lvS1NCN2ZUdGNibjFjYmx4dVpYaHdiM0owSUhSNWNHVWdSR2x0VW1Wa1UzVndjRzl5ZEdWa1JuVnVZM1JwYjI1eklEMGdlMXh1SUNBZ0lHWjFibU02SUVSSExrWjFibU1zWEc0Z0lDQWdjMlZ0Vkhsd1pYTTZJSE4wY21sdVoxdGRMRnh1SUNBZ0lIUjVjR1Z6T2lCemRISnBibWRiWFN4Y2JpQWdJQ0IxYm1sMGN6b2djM1J5YVc1blcxMHNYRzRnSUNBZ1pHbHpkR0Z1WTJWR2RXNWpkR2x2Ym5NNklITjBjbWx1WjF0ZFhHNTlYRzVjYm1WNGNHOXlkQ0IwZVhCbElFMTFiSFJwUTI5c1JHbHRVbVZrZFdOMGFXOXVVR0Z5WVcxeklEMGdlMXh1SUNBZ0lIUmhZbXhsT2lCRVJ5NUVZWFJoUm5KaGJXVXNYRzRnSUNBZ1kyOXNkVzF1Y3pvZ1JFY3VRMjlzZFcxdVRHbHpkQ3hjYmlBZ0lDQnRaWFJvYjJST1lXMWxPaUJFYVcxU1pXUjFZM1JwYjI1TlpYUm9iMlJ6TEZ4dUlDQWdJSEJ5WlhCeWIyTmxjM05wYm1kR2RXNWpkR2x2Ym5NNklFUkhMa1oxYm1OYlhTeGNiaUFnSUNCa2FYTjBZVzVqWlUxbGRISnBZM002SUhOMGNtbHVaMXRkTEZ4dUlDQWdJSGRsYVdkb2RITTZJRzUxYldKbGNsdGRMRnh1SUNBZ0lHOXdkR2x2Ym5NNklDaEpWVTFCVUU5d2RHbHZibk1nZkNCSlZGTk9SVTl3ZEdsdmJuTXBJQ1lnVUdGeWRHbGhiRHhKUkVKVFkyRnVUM0IwYVc5dWN6NGdKaUI3Y0hKbGNISnZZMlZ6YzJsdVowWjFibU5CY21kek9pQlBjSFJwYjI1elcxMTlJQ1lnVDNCMGFXOXVjeXhjYmlBZ0lDQndiRzkwUlcxaVpXUmthVzVuY3o4NklHSnZiMnhsWVc0c1hHNGdJQ0FnWTJ4MWMzUmxja1Z0WW1Wa1pHbHVaM00vT2lCaWIyOXNaV0Z1TEZ4dWZWeHVYRzVsZUhCdmNuUWdZMnhoYzNNZ1RYVnNkR2xEYjJ4MWJXNUVhVzFTWldSMVkzUnBiMjVGWkdsMGIzSWdlMXh1SUNBZ0lHVmthWFJ2Y2xObGRIUnBibWR6T2lCRWFXMVNaV1IxWTNScGIyNUZaR2wwYjNKUGNIUnBiMjV6SUQwZ2UzMDdYRzRnSUNBZ2RHRmliR1ZKYm5CMWRDRTZJRVJITGtsdWNIVjBRbUZ6WlR4RVJ5NUVZWFJoUm5KaGJXVWdmQ0J1ZFd4c1BqdGNiaUFnSUNCamIyeDFiVzV6U1c1d2RYUWhPaUJFUnk1SmJuQjFkRUpoYzJVOFJFY3VRMjlzZFcxdVcxMCtPMXh1SUNBZ0lHTnZiSFZ0Ym5OSmJuQjFkRkp2YjNRaE9pQklWRTFNUld4bGJXVnVkRHRjYmlBZ0lDQmpiMngxYlc1UGNIUkZaR2wwYjNKek9pQkVhVzFTWldSMVkzUnBiMjVEYjJ4MWJXNUZaR2wwYjNKYlhTQTlJRnRkTzF4dUlDQWdJR052YkhWdGJrOXdkRVZrYVhSdmNuTlNiMjkwT2lCSVZFMU1SV3hsYldWdWRDQTlJSFZwTG1ScGRpZ3BPMXh1SUNBZ0lHTnZiSFZ0YmxCaGNtRnRjMFZrYVhSdmNsSnZiM1E2SUVoVVRVeEZiR1Z0Wlc1MElEMGdkV2t1WkdsMktDazdYRzRnSUNBZ1kyOXNkVzF1VUdGeVlXMXpSV1JwZEc5eVFXTmpiM0prYVc5dU9pQkVSeTVCWTJOdmNtUnBiMjQ3WEc0Z0lDQWdkMlZwWjJoMGMwVmthWFJ2Y2xKdmIzUTZJRWhVVFV4RmJHVnRaVzUwSUQwZ2RXa3VaR2wyS0NrN1hHNGdJQ0FnWTI5c2RXMXVSblZ1WTNScGIyNXpUV0Z3T2lCN1cydGxlVG9nYzNSeWFXNW5YVG9nYzNSeWFXNW5XMTE5SUQwZ2UzMDdYRzRnSUNBZ2JXVjBhRzlrYzFCaGNtRnRjem9nZTF0clpYazZJSE4wY21sdVoxMDZJRlZOUVZCUGNIUnBiMjV6SUh3Z1ZGTk9SVTl3ZEdsdmJuTjlJRDBnZTF4dUlDQWdJQ0FnVzBScGJWSmxaSFZqZEdsdmJrMWxkR2h2WkhNdVZVMUJVRjA2SUc1bGR5QlZUVUZRVDNCMGFXOXVjeWdwTEZ4dUlDQWdJQ0FnVzBScGJWSmxaSFZqZEdsdmJrMWxkR2h2WkhNdVZGOVRUa1ZkT2lCdVpYY2dWRk5PUlU5d2RHbHZibk1vS1Z4dUlDQWdJSDA3WEc0Z0lDQWdaR0pUWTJGdVVHRnlZVzF6SUQwZ2JtVjNJRVJDVTJOaGJrOXdkR2x2Ym5Nb0tUdGNiaUFnSUNCdFpYUm9iMlJUWlhSMGFXNW5jMFJwZGlBOUlIVnBMbWx1Y0hWMGN5aGJYU2s3WEc0Z0lDQWdaR0pUWTJGdVUyVjBkR2x1WjNORWFYWWdQU0IxYVM1cGJuQjFkSE1vVzEwcE8xeHVJQ0FnSUhOMWNIQnZjblJsWkVaMWJtTjBhVzl1Y3pvZ2UxdHVZVzFsT2lCemRISnBibWRkT2lCRWFXMVNaV1JUZFhCd2IzSjBaV1JHZFc1amRHbHZibk45SUQwZ2UzMDdYRzRnSUNBZ2JXVjBhRzlrU1c1d2RYUTZJRVJITGtsdWNIVjBRbUZ6WlR4emRISnBibWNnZkNCdWRXeHNQanRjYmlBZ0lDQnRaWFJvYjJSVFpYUjBhVzVuYzBsamIyNDZJRWhVVFV4RmJHVnRaVzUwTzF4dUlDQWdJR1JpVTJOaGJsTmxkSFJwYm1kelNXTnZiam9nU0ZSTlRFVnNaVzFsYm5RN1hHNGdJQ0FnY0d4dmRFVnRZbVZrWkdsdVozTkpibkIxZENBOUlIVnBMbUp2YjJ4SmJuQjFkQ2duVUd4dmRDQmxiV0psWkdScGJtZHpKeXdnZEhKMVpTazdYRzRnSUNBZ1kyeDFjM1JsY2tWdFltVmtaR2x1WjNOSmJuQjFkQ0E5SUhWcExtSnZiMnhKYm5CMWRDZ25RMngxYzNSbGNpQmxiV0psWkdScGJtZHpKeXdnWm1Gc2MyVXBPMXh1SUNBZ0lIQnZjM1JRY205alpYTnphVzVuUldScGRHOXlPaUJRYjNOMFVISnZZMlZ6YzJsdVowWjFibU5GWkdsMGIzSTdYRzRnSUNBZ1lXZG5jbVZuWVhScGIyNU5aWFJvYjJSSmJuQjFkQ0E5SUhWcExtTm9iMmxqWlVsdWNIVjBLQ2RCWjJkeVpXZGhkR2x2Ymljc0lFUnBjM1JoYm1ObFFXZG5jbVZuWVhScGIyNU5aWFJvYjJSekxrVlZRMHhKUkVWQlRpeGNiaUFnSUNBZ0lGdEVhWE4wWVc1alpVRm5aM0psWjJGMGFXOXVUV1YwYUc5a2N5NUZWVU5NU1VSRlFVNHNJRVJwYzNSaGJtTmxRV2RuY21WbllYUnBiMjVOWlhSb2IyUnpMazFCVGtoQlZGUkJUbDBwTzF4dVhHNGdJQ0FnYjI1RGIyeDFiVzV6UTJoaGJtZGxaRG9nVTNWaWFtVmpkRHgyYjJsa1BqdGNiaUFnSUNCamIyNXpkSEoxWTNSdmNpaGxaR2wwYjNKVFpYUjBhVzVuY3pvZ1JHbHRVbVZrZFdOMGFXOXVSV1JwZEc5eVQzQjBhVzl1Y3lBOUlIdDlLU0I3WEc0Z0lDQWdJQ0IwYUdsekxtRm5aM0psWjJGMGFXOXVUV1YwYUc5a1NXNXdkWFF1YzJWMFZHOXZiSFJwY0NnblFXZG5jbVZuWVhScGIyNGdiV1YwYUc5a0lHWnZjaUJqYjIxaWFXNXBibWNnWkdsemRHRnVZMlZ6SUdKbGRIZGxaVzRnWTI5c2RXMXVjeWNwTzF4dUlDQWdJQ0FnZEdocGN5NXZia052YkhWdGJuTkRhR0Z1WjJWa0lEMGdibVYzSUZOMVltcGxZM1FvS1R0Y2JpQWdJQ0FnSUhSb2FYTXVaV1JwZEc5eVUyVjBkR2x1WjNNZ1BTQmxaR2wwYjNKVFpYUjBhVzVuY3p0Y2JpQWdJQ0FnSUhSb2FYTXVZMjlzZFcxdVVHRnlZVzF6UldScGRHOXlRV05qYjNKa2FXOXVJRDBnZFdrdVlXTmpiM0prYVc5dUtDazdYRzRnSUNBZ0lDQmpiMjV6ZENCd2NtVndiM0pqWlhOemFXNW5SblZ1WTNNZ1BTQkVSeTVHZFc1akxtWnBibVFvZTNSaFozTTZJRnRFU1UxZlVrVkVYMUJTUlZCU1QwTkZVMU5KVGtkZlJsVk9RMVJKVDA1ZlZFRkhYWDBwTzF4dUlDQWdJQ0FnY0hKbGNHOXlZMlZ6YzJsdVowWjFibU56TG1admNrVmhZMmdvS0dZcElEMCtJSHRjYmlBZ0lDQWdJQ0FnWTI5dWMzUWdjMlZ0Vkhsd1pYTTZJSE4wY21sdVp5QTlJR1l1YjNCMGFXOXVjeTVuWlhRb1UxVlFVRTlTVkVWRVgxTkZUVlJaVUVWVFgxUkJSeWtnUHo4Z0p5YzdYRzRnSUNBZ0lDQWdJR052Ym5OMElHNWhiV1VnUFNCbUxtWnlhV1Z1Wkd4NVRtRnRaU0EvUHlCbUxtNWhiV1U3WEc0Z0lDQWdJQ0FnSUdOdmJuTjBJSFI1Y0dWek9pQnpkSEpwYm1jZ1BTQm1MbTl3ZEdsdmJuTXVaMlYwS0ZOVlVGQlBVbFJGUkY5VVdWQkZVMTlVUVVjcElEOC9JQ2NuTzF4dUlDQWdJQ0FnSUNCamIyNXpkQ0IxYm1sMGN6b2djM1J5YVc1bklEMGdaaTV2Y0hScGIyNXpMbWRsZENoVFZWQlFUMUpVUlVSZlZVNUpWRk5mVkVGSEtTQS9QeUFuSnp0Y2JpQWdJQ0FnSUNBZ1kyOXVjM1FnWkdsemRHRnVZMlZHZFc1amRHbHZibk02SUhOMGNtbHVaeUE5SUdZdWIzQjBhVzl1Y3k1blpYUW9VMVZRVUU5U1ZFVkVYMFJKVTFSQlRrTkZYMFpWVGtOVVNVOU9VMTlVUVVjcElEOC9JQ2NuTzF4dUlDQWdJQ0FnSUNCcFppQW9kR2hwY3k1bFpHbDBiM0pUWlhSMGFXNW5jeTV6WlcxMGVYQmxJQ1ltSUNGelpXMVVlWEJsY3k1cGJtTnNkV1JsY3loMGFHbHpMbVZrYVhSdmNsTmxkSFJwYm1kekxuTmxiWFI1Y0dVcEtWeHVJQ0FnSUNBZ0lDQWdJSEpsZEhWeWJqdGNiaUFnSUNBZ0lDQWdhV1lnS0hSb2FYTXVaV1JwZEc5eVUyVjBkR2x1WjNNdWRIbHdaU0FtSmlBaGRIbHdaWE11YVc1amJIVmtaWE1vZEdocGN5NWxaR2wwYjNKVFpYUjBhVzVuY3k1MGVYQmxLU2xjYmlBZ0lDQWdJQ0FnSUNCeVpYUjFjbTQ3WEc0Z0lDQWdJQ0FnSUdsbUlDaDBhR2x6TG1Wa2FYUnZjbE5sZEhScGJtZHpMblZ1YVhSeklDWW1JQ0YxYm1sMGN5NXBibU5zZFdSbGN5aDBhR2x6TG1Wa2FYUnZjbE5sZEhScGJtZHpMblZ1YVhSektTbGNiaUFnSUNBZ0lDQWdJQ0J5WlhSMWNtNDdYRzVjYmlBZ0lDQWdJQ0FnZEdocGN5NXpkWEJ3YjNKMFpXUkdkVzVqZEdsdmJuTmJibUZ0WlYwZ1BTQjdYRzRnSUNBZ0lDQWdJQ0FnWm5WdVl6b2daaXhjYmlBZ0lDQWdJQ0FnSUNCelpXMVVlWEJsY3pvZ2MyVnRWSGx3WlhNZ1B5QnpaVzFVZVhCbGN5NXpjR3hwZENnbkxDY3BJRG9nVzEwc1hHNGdJQ0FnSUNBZ0lDQWdkSGx3WlhNNklIUjVjR1Z6SUQ4Z2RIbHdaWE11YzNCc2FYUW9KeXduS1NBNklGdGRMRnh1SUNBZ0lDQWdJQ0FnSUhWdWFYUnpPaUIxYm1sMGN5QS9JSFZ1YVhSekxuTndiR2wwS0Njc0p5a2dPaUJiWFN4Y2JpQWdJQ0FnSUNBZ0lDQmthWE4wWVc1alpVWjFibU4wYVc5dWN6b2daR2x6ZEdGdVkyVkdkVzVqZEdsdmJuTWdQeUJrYVhOMFlXNWpaVVoxYm1OMGFXOXVjeTV6Y0d4cGRDZ25MQ2NwSURvZ1cxMHNYRzRnSUNBZ0lDQWdJSDA3WEc0Z0lDQWdJQ0I5S1R0Y2JseHVJQ0FnSUNBZ2RHaHBjeTV3YjNOMFVISnZZMlZ6YzJsdVowVmthWFJ2Y2lBOUlHNWxkeUJRYjNOMFVISnZZMlZ6YzJsdVowWjFibU5GWkdsMGIzSW9LVHRjYmx4dUlDQWdJQ0FnZEdocGN5NTBZV0pzWlVsdWNIVjBJRDBnZFdrdWRHRmliR1ZKYm5CMWRDZ25WR0ZpYkdVbkxDQm5jbTlyTG5Ob1pXeHNMblIyTG1SaGRHRkdjbUZ0WlN3Z1ozSnZheTV6YUdWc2JDNTBZV0pzWlhNc0lDZ3BJRDArSUh0Y2JpQWdJQ0FnSUNBZ2RHaHBjeTV2YmxSaFlteGxTVzV3ZFhSRGFHRnVaMlZrS0NrN1hHNGdJQ0FnSUNCOUtUdGNiaUFnSUNBZ0lIUm9hWE11YjI1VVlXSnNaVWx1Y0hWMFEyaGhibWRsWkNncE8xeHVJQ0FnSUNBZ2JHVjBJSE5sZEhScGJtZHpUM0JsYm1Wa0lEMGdabUZzYzJVN1hHNGdJQ0FnSUNCc1pYUWdaR0pUWTJGdVUyVjBkR2x1WjNOUGNHVnVaV1FnUFNCbVlXeHpaVHRjYmx4dUlDQWdJQ0FnZEdocGN5NXRaWFJvYjJSSmJuQjFkQ0E5SUhWcExtTm9iMmxqWlVsdWNIVjBLQ2ROWlhSb2IyUW5MQ0JFYVcxU1pXUjFZM1JwYjI1TlpYUm9iMlJ6TGxWTlFWQXNYRzRnSUNBZ0lDQWdJRnRFYVcxU1pXUjFZM1JwYjI1TlpYUm9iMlJ6TGxWTlFWQXNJRVJwYlZKbFpIVmpkR2x2YmsxbGRHaHZaSE11VkY5VFRrVmRMQ0FvS1NBOVBpQjdYRzRnSUNBZ0lDQWdJQ0FnYVdZZ0tITmxkSFJwYm1kelQzQmxibVZrS1Z4dUlDQWdJQ0FnSUNBZ0lDQWdkR2hwY3k1amNtVmhkR1ZCYkdkdmNtbDBhRzFUWlhSMGFXNW5jMFJwZGloMGFHbHpMbTFsZEdodlpGTmxkSFJwYm1kelJHbDJMQ0IwYUdsekxtMWxkR2h2WkhOUVlYSmhiWE5iZEdocGN5NXRaWFJvYjJSSmJuQjFkQzUyWVd4MVpTRmRLVHRjYmlBZ0lDQWdJQ0FnZlNrN1hHNGdJQ0FnSUNCMGFHbHpMbTFsZEdodlpGTmxkSFJwYm1kelNXTnZiaUE5SUhWcExtbGpiMjV6TG5ObGRIUnBibWR6S0NncFBUNGdlMXh1SUNBZ0lDQWdJQ0J6WlhSMGFXNW5jMDl3Wlc1bFpDQTlJQ0Z6WlhSMGFXNW5jMDl3Wlc1bFpEdGNiaUFnSUNBZ0lDQWdhV1lnS0NGelpYUjBhVzVuYzA5d1pXNWxaQ2xjYmlBZ0lDQWdJQ0FnSUNCMWFTNWxiWEIwZVNoMGFHbHpMbTFsZEdodlpGTmxkSFJwYm1kelJHbDJLVHRjYmlBZ0lDQWdJQ0FnWld4elpWeHVJQ0FnSUNBZ0lDQWdJSFJvYVhNdVkzSmxZWFJsUVd4bmIzSnBkR2h0VTJWMGRHbHVaM05FYVhZb2RHaHBjeTV0WlhSb2IyUlRaWFIwYVc1bmMwUnBkaXdnZEdocGN5NXRaWFJvYjJSelVHRnlZVzF6VzNSb2FYTXViV1YwYUc5a1NXNXdkWFF1ZG1Gc2RXVWhYU2s3WEc0Z0lDQWdJQ0I5TENBblRXOWthV1o1SUcxbGRHaHZaSE1nY0dGeVlXMWxkR1Z5Y3ljcE8xeHVJQ0FnSUNBZ2RHaHBjeTVrWWxOallXNVRaWFIwYVc1bmMwbGpiMjRnUFNCMWFTNXBZMjl1Y3k1elpYUjBhVzVuY3lnb0tUMCtJSHRjYmlBZ0lDQWdJQ0FnWkdKVFkyRnVVMlYwZEdsdVozTlBjR1Z1WldRZ1BTQWhaR0pUWTJGdVUyVjBkR2x1WjNOUGNHVnVaV1E3WEc0Z0lDQWdJQ0FnSUdsbUlDZ2haR0pUWTJGdVUyVjBkR2x1WjNOUGNHVnVaV1FwWEc0Z0lDQWdJQ0FnSUNBZ2RXa3VaVzF3ZEhrb2RHaHBjeTVrWWxOallXNVRaWFIwYVc1bmMwUnBkaWs3WEc0Z0lDQWdJQ0FnSUdWc2MyVmNiaUFnSUNBZ0lDQWdJQ0IwYUdsekxtTnlaV0YwWlVGc1oyOXlhWFJvYlZObGRIUnBibWR6UkdsMktIUm9hWE11WkdKVFkyRnVVMlYwZEdsdVozTkVhWFlzSUhSb2FYTXVaR0pUWTJGdVVHRnlZVzF6S1R0Y2JpQWdJQ0FnSUgwc0lDZE5iMlJwWm5rZ1kyeDFjM1JsY21sdVp5QndZWEpoYldWMFpYSnpKeWs3WEc0Z0lDQWdJQ0IwYUdsekxtTnNkWE4wWlhKRmJXSmxaR1JwYm1kelNXNXdkWFF1WTJ4aGMzTk1hWE4wTG1Ga1pDZ25iV3d0WkdsdExYSmxaSFZqZEdsdmJpMXpaWFIwYVc1bmN5MXBibkIxZENjcE8xeHVJQ0FnSUNBZ2RHaHBjeTVqYkhWemRHVnlSVzFpWldSa2FXNW5jMGx1Y0hWMExuSnZiM1F1Y0hKbGNHVnVaQ2gwYUdsekxtUmlVMk5oYmxObGRIUnBibWR6U1dOdmJpazdYRzRnSUNBZ0lDQjBhR2x6TG0xbGRHaHZaRWx1Y0hWMExuSnZiM1F1WTJ4aGMzTk1hWE4wTG1Ga1pDZ25iV3d0WkdsdExYSmxaSFZqZEdsdmJpMXpaWFIwYVc1bmN5MXBibkIxZENjcE8xeHVJQ0FnSUNBZ2RHaHBjeTV0WlhSb2IyUkpibkIxZEM1eWIyOTBMbkJ5WlhCbGJtUW9kR2hwY3k1dFpYUm9iMlJUWlhSMGFXNW5jMGxqYjI0cE8xeHVJQ0FnSUNBZ2RHaHBjeTVqYjJ4MWJXNVFZWEpoYlhORlpHbDBiM0pCWTJOdmNtUnBiMjR1WVdSa1VHRnVaU2duUTI5c2RXMXVJRzl3ZEdsdmJuTW5MQ0FvS1NBOVBpQjBhR2x6TG1OdmJIVnRiazl3ZEVWa2FYUnZjbk5TYjI5MExDQjBjblZsTENCdWRXeHNMQ0JtWVd4elpTazdYRzRnSUNBZ0lDQjBhR2x6TG1OdmJIVnRibEJoY21GdGMwVmthWFJ2Y2tGalkyOXlaR2x2Ymk1eWIyOTBMbk4wZVd4bExtUnBjM0JzWVhrZ1BTQW5ibTl1WlNjN1hHNGdJQ0FnSUNCMGFHbHpMbU52YkhWdGJsQmhjbUZ0YzBWa2FYUnZjbEp2YjNRdVlYQndaVzVrUTJocGJHUW9kR2hwY3k1amIyeDFiVzVRWVhKaGJYTkZaR2wwYjNKQlkyTnZjbVJwYjI0dWNtOXZkQ2s3WEc0Z0lDQWdJQ0IwYUdsekxtTnZiSFZ0YmxCaGNtRnRjMFZrYVhSdmNsSnZiM1F1WVhCd1pXNWtRMmhwYkdRb2RHaHBjeTUzWldsbmFIUnpSV1JwZEc5eVVtOXZkQ2s3WEc0Z0lDQWdmVnh1WEc0Z0lDQWdiMjVVWVdKc1pVbHVjSFYwUTJoaGJtZGxaQ2dwSUh0Y2JpQWdJQ0FnSUdOdmJuTjBJSFJoWW14bElEMGdkR2hwY3k1MFlXSnNaVWx1Y0hWMExuWmhiSFZsTzF4dUlDQWdJQ0FnYVdZZ0tDRjBZV0pzWlNsY2JpQWdJQ0FnSUNBZ2NtVjBkWEp1TzF4dUlDQWdJQ0FnZFdrdVpXMXdkSGtvZEdocGN5NWpiMngxYlc1UGNIUkZaR2wwYjNKelVtOXZkQ2s3WEc0Z0lDQWdJQ0IxYVM1bGJYQjBlU2gwYUdsekxuZGxhV2RvZEhORlpHbDBiM0pTYjI5MEtUdGNibHh1SUNBZ0lDQWdkR2hwY3k1amIyeDFiVzVHZFc1amRHbHZibk5OWVhBZ1BTQjdmVHRjYmlBZ0lDQWdJR052Ym5OMElHTnZiSFZ0Ym5NZ1BTQjBZV0pzWlM1amIyeDFiVzV6TG5SdlRHbHpkQ2dwTzF4dUlDQWdJQ0FnWTI5c2RXMXVjeTVtYjNKRllXTm9LQ2hqYjJ3cElEMCtJSHRjYmlBZ0lDQWdJQ0FnVDJKcVpXTjBMbXRsZVhNb2RHaHBjeTV6ZFhCd2IzSjBaV1JHZFc1amRHbHZibk1wTG1admNrVmhZMmdvS0daMWJtTk9ZVzFsS1NBOVBpQjdYRzRnSUNBZ0lDQWdJQ0FnWTI5dWMzUWdjMlZ0Vkhsd1pYTWdQU0IwYUdsekxuTjFjSEJ2Y25SbFpFWjFibU4wYVc5dWMxdG1kVzVqVG1GdFpWMHVjMlZ0Vkhsd1pYTTdYRzRnSUNBZ0lDQWdJQ0FnWTI5dWMzUWdkSGx3WlhNZ1BTQjBhR2x6TG5OMWNIQnZjblJsWkVaMWJtTjBhVzl1YzF0bWRXNWpUbUZ0WlYwdWRIbHdaWE03WEc0Z0lDQWdJQ0FnSUNBZ1kyOXVjM1FnZFc1cGRITWdQU0IwYUdsekxuTjFjSEJ2Y25SbFpFWjFibU4wYVc5dWMxdG1kVzVqVG1GdFpWMHVkVzVwZEhNN1hHNGdJQ0FnSUNBZ0lDQWdZMjl1YzNRZ2MyVnRWSGx3WlZOMWNIQnZjblJsWkNBOUlDRnpaVzFVZVhCbGN5NXNaVzVuZEdnZ2ZId2dLR052YkM1elpXMVVlWEJsSUNZbUlITmxiVlI1Y0dWekxtbHVZMngxWkdWektHTnZiQzV6WlcxVWVYQmxLU2s3WEc0Z0lDQWdJQ0FnSUNBZ1kyOXVjM1FnZEhsd1pWTjFjRzl5ZEdWa0lEMGdJWFI1Y0dWekxteGxibWQwYUNCOGZDQjBlWEJsY3k1cGJtTnNkV1JsY3loamIyd3VkSGx3WlNrN1hHNGdJQ0FnSUNBZ0lDQWdZMjl1YzNRZ2RXNXBkSE5UZFhCd2IzSjBaV1FnUFNBaGRXNXBkSE11YkdWdVozUm9JSHg4WEc0Z0lDQWdJQ0FnSUNBZ0lDQW9ZMjlzTG1kbGRGUmhaeWhFUnk1VVFVZFRMbFZPU1ZSVEtTQW1KaUIxYm1sMGN5NXBibU5zZFdSbGN5aGpiMnd1WjJWMFZHRm5LRVJITGxSQlIxTXVWVTVKVkZNcEtTazdYRzRnSUNBZ0lDQWdJQ0FnYVdZZ0tITmxiVlI1Y0dWVGRYQndiM0owWldRZ0ppWWdkSGx3WlZOMWNHOXlkR1ZrSUNZbUlIVnVhWFJ6VTNWd2NHOXlkR1ZrS1NCN1hHNGdJQ0FnSUNBZ0lDQWdJQ0JwWmlBb0lYUm9hWE11WTI5c2RXMXVSblZ1WTNScGIyNXpUV0Z3VzJOdmJDNXVZVzFsWFNsY2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnZEdocGN5NWpiMngxYlc1R2RXNWpkR2x2Ym5OTllYQmJZMjlzTG01aGJXVmRJRDBnVzEwN1hHNGdJQ0FnSUNBZ0lDQWdJQ0IwYUdsekxtTnZiSFZ0YmtaMWJtTjBhVzl1YzAxaGNGdGpiMnd1Ym1GdFpWMHVjSFZ6YUNobWRXNWpUbUZ0WlNrN1hHNGdJQ0FnSUNBZ0lDQWdmVnh1SUNBZ0lDQWdJQ0I5S1R0Y2JpQWdJQ0FnSUgwcE8xeHVJQ0FnSUNBZ1kyOXVjM1FnYzNWd2NHOXlkR1ZrUTI5c1RtRnRaWE1nUFNCUFltcGxZM1F1YTJWNWN5aDBhR2x6TG1OdmJIVnRia1oxYm1OMGFXOXVjMDFoY0NrN1hHNGdJQ0FnSUNCamIyNXpkQ0JqYjJ4MWJXNXpTVzV3ZFhRZ1BTQjFhUzVqYjJ4MWJXNXpTVzV3ZFhRb0owTnZiSFZ0Ym5NbkxDQjBZV0pzWlN3Z0tDa2dQVDRnZTF4dUlDQWdJQ0FnSUNCMGFHbHpMbTl1UTI5c2RXMXVjME5vWVc1blpXUXVibVY0ZENncE8xeHVJQ0FnSUNBZ0lDQjFhUzVsYlhCMGVTaDBhR2x6TG1OdmJIVnRiazl3ZEVWa2FYUnZjbk5TYjI5MEtUdGNiaUFnSUNBZ0lDQWdkV2t1Wlcxd2RIa29kR2hwY3k1M1pXbG5hSFJ6UldScGRHOXlVbTl2ZENrN1hHNGdJQ0FnSUNBZ0lHTnZibk4wSUdOdmJITWdQU0JqYjJ4MWJXNXpTVzV3ZFhRdWRtRnNkV1U3WEc0Z0lDQWdJQ0FnSUdsbUlDZ2hZMjlzY3lCOGZDQmpiMnh6UHk1c1pXNW5kR2dnUENBeUtWeHVJQ0FnSUNBZ0lDQWdJSFJvYVhNdVlXZG5jbVZuWVhScGIyNU5aWFJvYjJSSmJuQjFkQzV5YjI5MExuTjBlV3hsTG1ScGMzQnNZWGtnUFNBbmJtOXVaU2M3WEc0Z0lDQWdJQ0FnSUdWc2MyVmNiaUFnSUNBZ0lDQWdJQ0IwYUdsekxtRm5aM0psWjJGMGFXOXVUV1YwYUc5a1NXNXdkWFF1Y205dmRDNXpkSGxzWlM1a2FYTndiR0Y1SUQwZ0oyWnNaWGduTzF4dUlDQWdJQ0FnSUNCcFppQW9JV052YkhNZ2ZId2dZMjlzY3k1c1pXNW5kR2dnUFQwOUlEQXBJSHRjYmlBZ0lDQWdJQ0FnSUNCMGFHbHpMbU52YkhWdGJsQmhjbUZ0YzBWa2FYUnZja0ZqWTI5eVpHbHZiaTV5YjI5MExuTjBlV3hsTG1ScGMzQnNZWGtnUFNBbmJtOXVaU2M3WEc0Z0lDQWdJQ0FnSUNBZ2NtVjBkWEp1TzF4dUlDQWdJQ0FnSUNCOVhHNGdJQ0FnSUNBZ0lHTnZibk4wSUdWa2FYUnZjbGRwWkhSb2N5QTlJRnN5TUN3Z016QXNJRE13TENBeU1GMDdYRzRnSUNBZ0lDQWdJSFJvYVhNdVkyOXNkVzF1VDNCMFJXUnBkRzl5Y3lBOUlHTnZiSE11YldGd0tDaGpiMndwSUQwK0lIdGNiaUFnSUNBZ0lDQWdJQ0JqYjI1emRDQmxaR2wwYjNKRGJHRnpjeUE5SUc1bGR5QkVhVzFTWldSMVkzUnBiMjVEYjJ4MWJXNUZaR2wwYjNJb1kyOXNMQ0IwYUdsekxtTnZiSFZ0YmtaMWJtTjBhVzl1YzAxaGNGdGpiMnd1Ym1GdFpWMHViV0Z3S0NocGRDa2dQVDVjYmlBZ0lDQWdJQ0FnSUNBZ0lIUm9hWE11YzNWd2NHOXlkR1ZrUm5WdVkzUnBiMjV6VzJsMFhTa3NJR1ZrYVhSdmNsZHBaSFJvY3lrN1hHNGdJQ0FnSUNBZ0lDQWdjbVYwZFhKdUlHVmthWFJ2Y2tOc1lYTnpPMXh1SUNBZ0lDQWdJQ0I5S1R0Y2JpQWdJQ0FnSUNBZ1kyOXVjM1FnWldScGRHOXlWR2wwYkdWeklEMGdXeWREYjJ4MWJXNG5MQ0FuUlc1amIyUnBibWNnWm5WdVkzUnBiMjRuTENBblUybHRhV3hoY21sMGVTQnRaWFJ5YVdNbkxDQW5WMlZwWjJoMEoxMHViV0Z3S0NocGRDd2dhU2tnUFQ1Y2JpQWdJQ0FnSUNBZ0lDQjFhUzVvTVNocGRDd2dlM04wZVd4bE9pQjdkMmxrZEdnNklHQWtlMlZrYVhSdmNsZHBaSFJvYzF0cFhYMGxZQ3dnYldGeVoybHVPaUF3ZlgwcEtUdGNibHh1SUNBZ0lDQWdJQ0IxYVM1MGIyOXNkR2x3TG1KcGJtUW9aV1JwZEc5eVZHbDBiR1Z6V3pGZExDQW5SVzVqYjJScGJtY2dablZ1WTNScGIyNGdabTl5SUhSb1pTQmpiMngxYlc0Z2RtRnNkV1Z6SnlrN1hHNGdJQ0FnSUNBZ0lIVnBMblJ2YjJ4MGFYQXVZbWx1WkNobFpHbDBiM0pVYVhSc1pYTmJNbDBzSUNkRWFYTjBZVzVqWlM5VGFXMXBiR0Z5YVhSNUlHMWxkSEpwWXlCbWIzSWdkR2hsSUdWdVkyOWtaV1FnWTI5c2RXMXVJSFpoYkhWbGN5Y3BPMXh1SUNBZ0lDQWdJQ0IxYVM1MGIyOXNkR2x3TG1KcGJtUW9aV1JwZEc5eVZHbDBiR1Z6V3pOZExDQW5WMlZwWjJoMElHOW1JSFJvWlNCamIyeDFiVzRnWm05eUlHTnZiV0pwYm1sdVp5QmthWE4wWVc1alpYTWdZbVYwZDJWbGJpQjJZV3gxWlhNbktUdGNibHh1SUNBZ0lDQWdJQ0JqYjI1emRDQmxaR2wwYjNKVWFYUnNaVkp2YjNRZ1BTQjFhUzVrYVhaSUtHVmthWFJ2Y2xScGRHeGxjeXdnZTJOc1lYTnpaWE02SUNkdGJDMWthVzB0Y21Wa2RXTjBhVzl1TFdOdmJIVnRiaTFsWkdsMGIzSXRhR1ZoWkdWeUxYSnZiM1FuZlNrN1hHNGdJQ0FnSUNBZ0lIUm9hWE11WTI5c2RXMXVUM0IwUldScGRHOXljMUp2YjNRdVlYQndaVzVrUTJocGJHUW9aV1JwZEc5eVZHbDBiR1ZTYjI5MEtUdGNiaUFnSUNBZ0lDQWdZMjl1YzNRZ1pXUnBkRzl5YzFKdmIzUWdQU0IxYVM1a2FYWldLRnRkTENCN2MzUjViR1U2SUh0dFlYaElaV2xuYUhRNklDYzBNREJ3ZUNjc0lHOTJaWEptYkc5M09pQW5ZWFYwYnlkOWZTazdYRzRnSUNBZ0lDQWdJSFJvYVhNdVkyOXNkVzF1VDNCMFJXUnBkRzl5Y3k1bWIzSkZZV05vS0NobFpHbDBiM0lwSUQwK0lIdGNiaUFnSUNBZ0lDQWdJQ0JsWkdsMGIzSnpVbTl2ZEM1aGNIQmxibVJEYUdsc1pDaGxaR2wwYjNJdVlXTmpiM0prYVc5dVJHbDJLVHRjYmlBZ0lDQWdJQ0FnZlNrN1hHNGdJQ0FnSUNBZ0lIUm9hWE11WTI5c2RXMXVUM0IwUldScGRHOXljMUp2YjNRdVlYQndaVzVrUTJocGJHUW9aV1JwZEc5eWMxSnZiM1FwTzF4dUlDQWdJQ0FnSUNCcFppQW9kR2hwY3k1amIyeDFiVzVQY0hSRlpHbDBiM0p6TG14bGJtZDBhQ0ErSURBcFhHNGdJQ0FnSUNBZ0lDQWdkR2hwY3k1amIyeDFiVzVRWVhKaGJYTkZaR2wwYjNKQlkyTnZjbVJwYjI0dWNtOXZkQzV6ZEhsc1pTNWthWE53YkdGNUlEMGdKMlpzWlhnbk8xeHVJQ0FnSUNBZ2ZTd2dlMkYyWVdsc1lXSnNaVG9nYzNWd2NHOXlkR1ZrUTI5c1RtRnRaWE45S1R0Y2JpQWdJQ0FnSUdOdmJIVnRibk5KYm5CMWRDNW1hWEpsUTJoaGJtZGxaQ2dwTzF4dUlDQWdJQ0FnYVdZZ0tDRjBhR2x6TG1OdmJIVnRibk5KYm5CMWRGSnZiM1FwSUh0Y2JpQWdJQ0FnSUNBZ2RHaHBjeTVqYjJ4MWJXNXpTVzV3ZFhSU2IyOTBJRDBnWTI5c2RXMXVjMGx1Y0hWMExuSnZiM1E3WEc0Z0lDQWdJQ0FnSUhSb2FYTXVZMjlzZFcxdWMwbHVjSFYwSUQwZ1kyOXNkVzF1YzBsdWNIVjBPMXh1SUNBZ0lDQWdmU0JsYkhObElIdGNiaUFnSUNBZ0lDQWdkV2t1Wlcxd2RIa29kR2hwY3k1amIyeDFiVzV6U1c1d2RYUlNiMjkwS1R0Y2JpQWdJQ0FnSUNBZ2RHaHBjeTVqYjJ4MWJXNXpTVzV3ZFhRZ1BTQmpiMngxYlc1elNXNXdkWFE3WEc0Z0lDQWdJQ0FnSUVGeWNtRjVMbVp5YjIwb2RHaHBjeTVqYjJ4MWJXNXpTVzV3ZFhRdWNtOXZkQzVqYUdsc1pISmxiaWxjYmlBZ0lDQWdJQ0FnSUNBdVptOXlSV0ZqYUNnb2FYUXBJRDArSUhSb2FYTXVZMjlzZFcxdWMwbHVjSFYwVW05dmRDNWhjSEJsYm1SRGFHbHNaQ2hwZENrcE8xeHVJQ0FnSUNBZ2ZWeHVJQ0FnSUgxY2JpQWdJQ0J3Y21sMllYUmxJR055WldGMFpVRnNaMjl5YVhSb2JWTmxkSFJwYm1kelJHbDJLRnh1SUNBZ0lDQWdjR0Z5WVcxelJtOXliVG9nU0ZSTlRFVnNaVzFsYm5Rc0lIQmhjbUZ0Y3pvZ1ZVMUJVRTl3ZEdsdmJuTWdmQ0JVVTA1RlQzQjBhVzl1Y3lCOElFUkNVMk5oYms5d2RHbHZibk1wT2lCSVZFMU1SV3hsYldWdWRDQjdYRzRnSUNBZ0lDQjFhUzVsYlhCMGVTaHdZWEpoYlhOR2IzSnRLVHRjYmlBZ0lDQWdJRTlpYW1WamRDNXJaWGx6S0hCaGNtRnRjeWt1Wm05eVJXRmphQ2dvYVhRNklHRnVlU2tnUFQ0Z2UxeHVJQ0FnSUNBZ0lDQmpiMjV6ZENCd1lYSmhiVG9nU1VScGJWSmxaSFZqZEdsdmJsQmhjbUZ0SUh3Z1NVUnBiVkpsWkhWamRHbHZibEJoY21GdFBITjBjbWx1Wno0Z2ZDQkpSR2x0VW1Wa2RXTjBhVzl1VUdGeVlXMDhZbTl2YkdWaGJqNGdQVnh1SUNBZ0lDQWdJQ0FnSUNod1lYSmhiWE1nWVhNZ1lXNTVLVnRwZEYwN1hHNWNiaUFnSUNBZ0lDQWdZMjl1YzNRZ2FXNXdkWFFnUFNCd1lYSmhiUzUwZVhCbElEMDlQU0FuYzNSeWFXNW5KeUEvWEc0Z0lDQWdJQ0FnSUNBZ2RXa3VjM1J5YVc1blNXNXdkWFFvY0dGeVlXMHVkV2xPWVcxbExDQndZWEpoYlM1MllXeDFaU0EvUHlBbkp5d2dLQ2tnUFQ0Z2UxeHVJQ0FnSUNBZ0lDQWdJQ0FnY0dGeVlXMHVkbUZzZFdVZ1BTQW9hVzV3ZFhRZ1lYTWdSRWN1U1c1d2RYUkNZWE5sUEhOMGNtbHVaejRwTG5aaGJIVmxPMXh1SUNBZ0lDQWdJQ0FnSUgwcElEb2djR0Z5WVcwdWRIbHdaU0E5UFQwZ0oySnZiMnhsWVc0bklEOWNiaUFnSUNBZ0lDQWdJQ0FnSUhWcExtSnZiMnhKYm5CMWRDaHdZWEpoYlM1MWFVNWhiV1VzSUhCaGNtRnRMblpoYkhWbElEOC9JR1poYkhObExDQW9LU0E5UGlCN1hHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUhCaGNtRnRMblpoYkhWbElEMGdLR2x1Y0hWMElHRnpJRVJITGtsdWNIVjBRbUZ6WlR4aWIyOXNaV0Z1UGlrdWRtRnNkV1U3WEc0Z0lDQWdJQ0FnSUNBZ0lDQjlLU0E2WEc0Z0lDQWdJQ0FnSUNBZ0lDQjFhUzVtYkc5aGRFbHVjSFYwS0hCaGNtRnRMblZwVG1GdFpTd2djR0Z5WVcwdWRtRnNkV1VnWVhNZ1lXNTVMQ0FvS1NBOVBpQjdYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lIQmhjbUZ0TG5aaGJIVmxJRDBnYVc1d2RYUXVkbUZzZFdVN1hHNGdJQ0FnSUNBZ0lDQWdJQ0I5S1R0Y2JpQWdJQ0FnSUNBZ2FXWWdLSEJoY21GdExtUnBjMkZpYkdVcElIdGNiaUFnSUNBZ0lDQWdJQ0JwYm5CMWRDNWxibUZpYkdWa0lEMGdabUZzYzJVN1hHNGdJQ0FnSUNBZ0lDQWdkV2t1ZEc5dmJIUnBjQzVpYVc1a0tHbHVjSFYwTG1sdWNIVjBJRDgvSUdsdWNIVjBMbkp2YjNRc0lIQmhjbUZ0TG1ScGMyRmliR1ZVYjI5c2RHbHdJRDgvSUNjbktUdGNiaUFnSUNBZ0lDQWdmU0JsYkhObElIc2dkV2t1ZEc5dmJIUnBjQzVpYVc1a0tHbHVjSFYwTG1sdWNIVjBJRDgvSUdsdWNIVjBMbkp2YjNRc0lIQmhjbUZ0TG5SdmIyeDBhWEFwT3lCOVhHNGdJQ0FnSUNBZ0lIQmhjbUZ0YzBadmNtMHVZWEJ3Wlc1a0tHbHVjSFYwTG5KdmIzUXBPMXh1SUNBZ0lDQWdmU2s3WEc0Z0lDQWdJQ0J5WlhSMWNtNGdjR0Z5WVcxelJtOXliVHRjYmlBZ0lDQjlYRzVjYmlBZ0lDQm5aWFFnWVd4bmIzSnBkR2h0VDNCMGFXOXVjeWdwT2lCSlZVMUJVRTl3ZEdsdmJuTWdmQ0JKVkZOT1JVOXdkR2x2Ym5NZ2UxeHVJQ0FnSUNBZ1kyOXVjM1FnWVd4bmIzSnBkR2h0VUdGeVlXMXpPaUJWVFVGUVQzQjBhVzl1Y3lCOElGUlRUa1ZQY0hScGIyNXpJRDBnZEdocGN5NXRaWFJvYjJSelVHRnlZVzF6VzNSb2FYTXViV1YwYUc5a1NXNXdkWFF1ZG1Gc2RXVWhYVHRjYmlBZ0lDQWdJR052Ym5OMElHOXdkR2x2Ym5NNklHRnVlU0E5SUh0OU8xeHVJQ0FnSUNBZ1QySnFaV04wTG10bGVYTW9ZV3huYjNKcGRHaHRVR0Z5WVcxektTNW1iM0pGWVdOb0tDaHJaWGs2SUhOMGNtbHVaeWtnUFQ0Z2UxeHVJQ0FnSUNBZ0lDQnBaaUFvS0dGc1oyOXlhWFJvYlZCaGNtRnRjeUJoY3lCaGJua3BXMnRsZVYwdWRtRnNkV1VnSVQwZ2JuVnNiQ2xjYmlBZ0lDQWdJQ0FnSUNCdmNIUnBiMjV6VzJ0bGVWMGdQU0FvWVd4bmIzSnBkR2h0VUdGeVlXMXpJR0Z6SUdGdWVTbGJhMlY1WFM1MllXeDFaVHRjYmlBZ0lDQWdJSDBwTzF4dUlDQWdJQ0FnY21WMGRYSnVJRzl3ZEdsdmJuTTdYRzRnSUNBZ2ZWeHVYRzRnSUNBZ1oyVjBJR1JpVTJOaGJrOXdkR2x2Ym5Nb0tUb2dTVVJDVTJOaGJrOXdkR2x2Ym5NZ2UxeHVJQ0FnSUNBZ2NtVjBkWEp1SUh0Y2JpQWdJQ0FnSUNBZ1pHSlRZMkZ1UlhCemFXeHZiam9nZEdocGN5NWtZbE5qWVc1UVlYSmhiWE11WlhCemFXeHZiaTUyWVd4MVpTQS9QeUF3TGpBeExGeHVJQ0FnSUNBZ0lDQmtZbE5qWVc1TmFXNVFkSE02SUhSb2FYTXVaR0pUWTJGdVVHRnlZVzF6TG0xcGJsQjBjeTUyWVd4MVpTQS9QeUEwWEc0Z0lDQWdJQ0I5TzF4dUlDQWdJSDFjYmx4dUlDQWdJSEIxWW14cFl5Qm5aWFJGWkdsMGIzSW9LVG9nU0ZSTlRFVnNaVzFsYm5RZ2UxeHVJQ0FnSUNBZ1kyOXVjM1FnWkdsMklEMGdkV2t1WkdsMktGdGNiaUFnSUNBZ0lDQWdkR2hwY3k1MFlXSnNaVWx1Y0hWMExuSnZiM1FzWEc0Z0lDQWdJQ0FnSUhSb2FYTXVZMjlzZFcxdWMwbHVjSFYwVW05dmRDeGNiaUFnSUNBZ0lDQWdkR2hwY3k1amIyeDFiVzVRWVhKaGJYTkZaR2wwYjNKU2IyOTBMRnh1SUNBZ0lDQWdJQ0IwYUdsekxtRm5aM0psWjJGMGFXOXVUV1YwYUc5a1NXNXdkWFF1Y205dmRDeGNiaUFnSUNBZ0lDQWdkR2hwY3k1dFpYUm9iMlJKYm5CMWRDNXliMjkwTEZ4dUlDQWdJQ0FnSUNCMGFHbHpMbTFsZEdodlpGTmxkSFJwYm1kelJHbDJMRnh1SUNBZ0lDQWdJQ0IwYUdsekxuQnNiM1JGYldKbFpHUnBibWR6U1c1d2RYUXNYRzRnSUNBZ0lDQWdJSFJvYVhNdWNHOXpkRkJ5YjJObGMzTnBibWRGWkdsMGIzSXVjbTl2ZEN4Y2JpQWdJQ0FnSUYwc0lIdHpkSGxzWlRvZ2UyMXBibGRwWkhSb09pQW5OREl3Y0hnbmZTd2dZMnhoYzNObGN6b2dKM1ZwTFdadmNtMG5mU2s3WEc0Z0lDQWdJQ0J5WlhSMWNtNGdaR2wyTzF4dUlDQWdJSDFjYmx4dUlDQWdJSEIxWW14cFl5Qm5aWFJRWVhKaGJYTW9LU0I3WEc0Z0lDQWdJQ0J5WlhSMWNtNGdlMXh1SUNBZ0lDQWdJQ0IwWVdKc1pUb2dkR2hwY3k1MFlXSnNaVWx1Y0hWMExuWmhiSFZsSVN4Y2JpQWdJQ0FnSUNBZ1kyOXNkVzF1Y3pvZ2RHaHBjeTVqYjJ4MWJXNXpTVzV3ZFhRdWRtRnNkV1VoTEZ4dUlDQWdJQ0FnSUNCdFpYUm9iMlJPWVcxbE9pQjBhR2x6TG0xbGRHaHZaRWx1Y0hWMExuWmhiSFZsSVN4Y2JpQWdJQ0FnSUNBZ2NISmxjSEp2WTJWemMybHVaMFoxYm1OMGFXOXVjem9nZEdocGN5NWpiMngxYlc1UGNIUkZaR2wwYjNKekxtMWhjQ2dvYVhRcElEMCtJR2wwTG5CeVpWQnliMk5sYzNOcGJtZEdkVzVqZEdsdmJpa3NYRzRnSUNBZ0lDQWdJR1JwYzNSaGJtTmxUV1YwY21samN6b2dkR2hwY3k1amIyeDFiVzVQY0hSRlpHbDBiM0p6TG0xaGNDZ29hWFFwSUQwK0lHbDBMbk5wYldsc1lYSnBkSGxOWlhSeWFXTkpibkIxZEM1MllXeDFaU0VwTEZ4dUlDQWdJQ0FnSUNCM1pXbG5hSFJ6T2lCMGFHbHpMbU52YkhWdGJrOXdkRVZrYVhSdmNuTXViV0Z3S0NocGRDa2dQVDRnYVhRdWQyVnBaMmgwSUQ4L0lERXBMRnh1SUNBZ0lDQWdJQ0J2Y0hScGIyNXpPaUI3TGk0dWRHaHBjeTVoYkdkdmNtbDBhRzFQY0hScGIyNXpMQ0F1TGk1MGFHbHpMbVJpVTJOaGJrOXdkR2x2Ym5Nc1hHNGdJQ0FnSUNBZ0lDQWdjSEpsY0hKdlkyVnpjMmx1WjBaMWJtTkJjbWR6T2lCMGFHbHpMbU52YkhWdGJrOXdkRVZrYVhSdmNuTXViV0Z3S0NocGRDa2dQVDRnYVhRdWNISmxjSEp2WTJWemMybHVaMFoxYm1OMGFXOXVVMlYwZEdsdVozTXBmU3hjYmlBZ0lDQWdJQ0FnY0d4dmRFVnRZbVZrWkdsdVozTTZJSFJvYVhNdWNHeHZkRVZ0WW1Wa1pHbHVaM05KYm5CMWRDNTJZV3gxWlN4Y2JpQWdJQ0FnSUNBZ1kyeDFjM1JsY2tWdFltVmtaR2x1WjNNNklHWmhiSE5sTEZ4dUlDQWdJQ0FnSUNCd2IzTjBVSEp2WTJWemMybHVaMFoxYm1OMGFXOXVPaUIwYUdsekxuQnZjM1JRY205alpYTnphVzVuUldScGRHOXlMbkJ2YzNSUWNtOWpaWE56YVc1blJuVnVZM1JwYjI0c1hHNGdJQ0FnSUNBZ0lIQnZjM1JRY205alpYTnphVzVuUm5WdVkzUnBiMjVCY21kek9pQjBhR2x6TG5CdmMzUlFjbTlqWlhOemFXNW5SV1JwZEc5eUxtRnlaM01zWEc0Z0lDQWdJQ0FnSUdGblozSmxZV2RuY21WbllYUnBiMjVOWlhSb2IyUTZJSFJvYVhNdVlXZG5jbVZuWVhScGIyNU5aWFJvYjJSSmJuQjFkQzUyWVd4MVpWeHVJQ0FnSUNBZ2ZUdGNiaUFnSUNCOVhHNTlYRzVjYmx4dVkyeGhjM01nUkdsdFVtVmtkV04wYVc5dVEyOXNkVzF1UldScGRHOXlJSHRjYmlBZ0lDQndjbVZ3Y205alpYTnphVzVuUm5WdVkxTmxkSFJwYm1kelJHbDJJRDBnZFdrdVpHbDJLRnRkS1R0Y2JpQWdJQ0J3Y21Wd2NtOWpaWE56YVc1blJuVnVZM1JwYjI1SmJuQjFkRG9nUkVjdVNXNXdkWFJDWVhObFBITjBjbWx1WnlCOElHNTFiR3crTzF4dUlDQWdJSEJ5WlhCeWIyTmxjM05wYm1kR2RXNWpVMlYwZEdsdVozTkpZMjl1T2lCSVZFMU1SV3hsYldWdWREdGNiaUFnSUNCemFXMXBiR0Z5YVhSNVRXVjBjbWxqU1c1d2RYUWhPaUJFUnk1SmJuQjFkRUpoYzJVOGMzUnlhVzVuSUh3Z2JuVnNiRDQ3WEc0Z0lDQWdjMmx0YVd4aGNtbDBlVTFsZEhKcFkwbHVjSFYwVW05dmRDRTZJRWhVVFV4RmJHVnRaVzUwTzF4dUlDQWdJSEJ5WlhCeWIyTmxjM05wYm1kR2RXNWpkR2x2YmxObGRIUnBibWR6T2lCUGNIUnBiMjV6SUQwZ2UzMDdYRzRnSUNBZ1lXTmpiM0prYVc5dVJHbDJPaUJJVkUxTVJXeGxiV1Z1ZER0Y2JpQWdJQ0JqYjJ4MWJXNDZJRVJITGtOdmJIVnRianRjYmlBZ0lDQnpkWEJ3YjNKMFpXUkdkVzVqZEdsdmJuTTZJRVJwYlZKbFpGTjFjSEJ2Y25SbFpFWjFibU4wYVc5dWMxdGRPMXh1SUNBZ0lHVmthWFJ2Y2tScGRqb2dTRlJOVEVWc1pXMWxiblFnUFNCMWFTNWthWFlvVzEwcE8xeHVJQ0FnSUdoaGMwVjRkSEpoVTJWMGRHbHVaM002SUdKdmIyeGxZVzRnUFNCMGNuVmxPMXh1SUNBZ0lHWjFibU4wYVc5dWMwMWhjRG9nZTF0Zk9pQnpkSEpwYm1kZE9pQkVSeTVHZFc1amZTQTlJSHQ5TzF4dUlDQWdJRzVsWldSelEyOXVabWxuZFhKaGRHbHZiam9nWW05dmJHVmhiaUE5SUdaaGJITmxPMXh1SUNBZ0lIZGxhV2RvZEVsdWNIVjBPaUJFUnk1SmJuQjFkRUpoYzJVOGJuVnRZbVZ5SUh3Z2JuVnNiRDQ3WEc0Z0lDQWdkMlZwWjJoME9pQnVkVzFpWlhJZ1BTQXhPMXh1SUNBZ0lHTnZibk4wY25WamRHOXlLR052YkhWdGJqb2dSRWN1UTI5c2RXMXVMQ0J6ZFhCd2IzSjBaV1JHZFc1amRHbHZibk02SUVScGJWSmxaRk4xY0hCdmNuUmxaRVoxYm1OMGFXOXVjMXRkTENCbFpHbDBiM0pYYVdSMGFITTZJRzUxYldKbGNsdGRLU0I3WEc0Z0lDQWdJQ0IwYUdsekxuZGxhV2RvZEVsdWNIVjBJRDBnZFdrdVpteHZZWFJKYm5CMWRDZ25WMlZwWjJoMEp5d2dNU3dnS0NrZ1BUNGdleUIwYUdsekxuZGxhV2RvZENBOUlIUm9hWE11ZDJWcFoyaDBTVzV3ZFhRdWRtRnNkV1VnUHo4Z01Uc2dmU2s3WEc0Z0lDQWdJQ0IwYUdsekxtTnZiSFZ0YmlBOUlHTnZiSFZ0Ymp0Y2JpQWdJQ0FnSUM4dklITnZjblFnWW5rZ2MzQmxZMmxtYVdOcGRIbGNiaUFnSUNBZ0lIUm9hWE11YzNWd2NHOXlkR1ZrUm5WdVkzUnBiMjV6SUQwZ2MzVndjRzl5ZEdWa1JuVnVZM1JwYjI1ekxuTnZjblFvS0dFc0lHSXBJRDArSUh0Y2JpQWdJQ0FnSUNBZ2FXWWdLQ2hoTG5WdWFYUnpMbXhsYm1kMGFDQTlQVDBnTUNCOGZDQmlMblZ1YVhSekxteGxibWQwYUNBOVBUMGdNQ2tnSmlZZ1lTNTFibWwwY3k1c1pXNW5kR2dnSVQwOUlHSXVkVzVwZEhNdWJHVnVaM1JvS1Z4dUlDQWdJQ0FnSUNBZ0lISmxkSFZ5YmlCaUxuVnVhWFJ6TG14bGJtZDBhQ0F0SUdFdWRXNXBkSE11YkdWdVozUm9PMXh1SUNBZ0lDQWdJQ0JwWmlBb1lTNTFibWwwY3k1c1pXNW5kR2dnSVQwOUlHSXVkVzVwZEhNdWJHVnVaM1JvS1Z4dUlDQWdJQ0FnSUNBZ0lISmxkSFZ5YmlCaExuVnVhWFJ6TG14bGJtZDBhQ0F0SUdJdWRXNXBkSE11YkdWdVozUm9PMXh1SUNBZ0lDQWdJQ0JwWmlBb1lTNXpaVzFVZVhCbGN5NXNaVzVuZEdnZ1BUMDlJREFnZkh3Z1lpNXpaVzFVZVhCbGN5NXNaVzVuZEdnZ1BUMDlJREFwWEc0Z0lDQWdJQ0FnSUNBZ2NtVjBkWEp1SUdJdWMyVnRWSGx3WlhNdWJHVnVaM1JvSUMwZ1lTNXpaVzFVZVhCbGN5NXNaVzVuZEdnN1hHNGdJQ0FnSUNBZ0lHbG1JQ2hoTG5ObGJWUjVjR1Z6TG14bGJtZDBhQ0FoUFQwZ1lpNXpaVzFVZVhCbGN5NXNaVzVuZEdncFhHNGdJQ0FnSUNBZ0lDQWdjbVYwZFhKdUlHRXVjMlZ0Vkhsd1pYTXViR1Z1WjNSb0lDMGdZaTV6WlcxVWVYQmxjeTVzWlc1bmRHZzdYRzRnSUNBZ0lDQWdJSEpsZEhWeWJpQmhMblI1Y0dWekxteGxibWQwYUNBdElHSXVkSGx3WlhNdWJHVnVaM1JvTzF4dUlDQWdJQ0FnZlNrN1hHNGdJQ0FnSUNCMGFHbHpMbk4xY0hCdmNuUmxaRVoxYm1OMGFXOXVjeTVtYjNKRllXTm9LQ2htS1NBOVBpQjdYRzRnSUNBZ0lDQWdJSFJvYVhNdVpuVnVZM1JwYjI1elRXRndXMmRsZEVaMWJtTk9ZVzFsS0dZdVpuVnVZeWxkSUQwZ1ppNW1kVzVqTzF4dUlDQWdJQ0FnZlNrN1hHNGdJQ0FnSUNCMGFHbHpMbkJ5WlhCeWIyTmxjM05wYm1kR2RXNWpkR2x2YmtsdWNIVjBJRDBnZFdrdVkyaHZhV05sU1c1d2RYUW9KMFZ1WTI5a2FXNW5JR1oxYm1OMGFXOXVKeXhjYmlBZ0lDQWdJQ0FnWjJWMFJuVnVZMDVoYldVb2RHaHBjeTV6ZFhCd2IzSjBaV1JHZFc1amRHbHZibk5iTUYwdVpuVnVZeWtzSUhSb2FYTXVjM1Z3Y0c5eWRHVmtSblZ1WTNScGIyNXpMbTFoY0Nnb2FYUXBJRDArSUdkbGRFWjFibU5PWVcxbEtHbDBMbVoxYm1NcEtTeGNiaUFnSUNBZ0lDQWdLQ2tnUFQ0Z2UxeHVJQ0FnSUNBZ0lDQWdJR052Ym5OMElIWmhiQ0E5SUhSb2FYTXVjSEpsY0hKdlkyVnpjMmx1WjBaMWJtTjBhVzl1U1c1d2RYUXVkbUZzZFdVaE8xeHVJQ0FnSUNBZ0lDQWdJR052Ym5OMElHWjFibU1nUFNCMGFHbHpMbVoxYm1OMGFXOXVjMDFoY0Z0MllXeGRPMXh1SUNBZ0lDQWdJQ0FnSUhSb2FYTXVjSEpsY0hKdlkyVnpjMmx1WjBaMWJtTjBhVzl1VTJWMGRHbHVaM01nUFNCN2ZUdGNiaUFnSUNBZ0lDQWdJQ0IwYUdsekxtaGhjMFY0ZEhKaFUyVjBkR2x1WjNNZ1BTQm1kVzVqTG1sdWNIVjBjeTVzWlc1bmRHZ2dQaUF5TzF4dUlDQWdJQ0FnSUNBZ0lHTnZibk4wSUhOMWNFWWdQU0IwYUdsekxuTjFjSEJ2Y25SbFpFWjFibU4wYVc5dWN5NW1hVzVrS0NocGRDa2dQVDRnWjJWMFJuVnVZMDVoYldVb2FYUXVablZ1WXlrZ1BUMDlJSFpoYkNraE8xeHVJQ0FnSUNBZ0lDQWdJSFJvYVhNdVoyVjBVMmx0YVd4aGNtbDBlVTFsZEhKcFkwbHVjSFYwS0hOMWNFWXBPMXh1SUNBZ0lDQWdJQ0FnSUhWcExtVnRjSFI1S0hSb2FYTXVjSEpsY0hKdlkyVnpjMmx1WjBaMWJtTlRaWFIwYVc1bmMwUnBkaWs3WEc0Z0lDQWdJQ0FnSUNBZ2MyVjBkR2x1WjNOUGNHVnVaV1FnUFNCbVlXeHpaVHRjYmlBZ0lDQWdJQ0FnSUNCcFppQW9JWFJvYVhNdWFHRnpSWGgwY21GVFpYUjBhVzVuY3lsY2JpQWdJQ0FnSUNBZ0lDQWdJSFJvYVhNdWNISmxjSEp2WTJWemMybHVaMFoxYm1OVFpYUjBhVzVuYzBsamIyNHVjM1I1YkdVdVpHbHpjR3hoZVNBOUlDZHViMjVsSnp0Y2JpQWdJQ0FnSUNBZ0lDQmxiSE5sWEc0Z0lDQWdJQ0FnSUNBZ0lDQjBhR2x6TG5CeVpYQnliMk5sYzNOcGJtZEdkVzVqVTJWMGRHbHVaM05KWTI5dUxuTjBlV3hsTG1ScGMzQnNZWGtnUFNBblpteGxlQ2M3WEc0Z0lDQWdJQ0FnSUgxY2JpQWdJQ0FnSUNrN1hHNGdJQ0FnSUNCMGFHbHpMbkJ5WlhCeWIyTmxjM05wYm1kR2RXNWpkR2x2YmtsdWNIVjBMbkp2YjNRdWMzUjViR1V1WkdsemNHeGhlU0E5SUNkbWJHVjRKenRjYmx4dUlDQWdJQ0FnZEdocGN5NWpjbVZoZEdWVFpYUjBhVzVuYzBScGRpaDBhR2x6TG5CeVpYQnliMk5sYzNOcGJtZEdkVzVqVTJWMGRHbHVaM05FYVhZc0lIUm9hWE11YzNWd2NHOXlkR1ZrUm5WdVkzUnBiMjV6V3pCZExtWjFibU1wWEc0Z0lDQWdJQ0FnSUM1MGFHVnVLQ2dwSUQwK0lIc2dkV2t1Wlcxd2RIa29kR2hwY3k1d2NtVndjbTlqWlhOemFXNW5SblZ1WTFObGRIUnBibWR6UkdsMktUc2dmU2s3WEc1Y2JpQWdJQ0FnSUhSb2FYTXVaMlYwVTJsdGFXeGhjbWwwZVUxbGRISnBZMGx1Y0hWMEtIUm9hWE11YzNWd2NHOXlkR1ZrUm5WdVkzUnBiMjV6V3pCZEtUdGNiaUFnSUNBZ0lIUm9hWE11YUdGelJYaDBjbUZUWlhSMGFXNW5jeUE5SUhSb2FYTXVjM1Z3Y0c5eWRHVmtSblZ1WTNScGIyNXpXekJkTG1aMWJtTXVhVzV3ZFhSekxteGxibWQwYUNBK0lESTdYRzVjYmlBZ0lDQWdJR3hsZENCelpYUjBhVzVuYzA5d1pXNWxaQ0E5SUdaaGJITmxPMXh1SUNBZ0lDQWdkR2hwY3k1d2NtVndjbTlqWlhOemFXNW5SblZ1WTFObGRIUnBibWR6U1dOdmJpQTlJSFZwTG1samIyNXpMbk5sZEhScGJtZHpLR0Z6ZVc1aklDZ3BJRDArSUh0Y2JpQWdJQ0FnSUNBZ2MyVjBkR2x1WjNOUGNHVnVaV1FnUFNBaGMyVjBkR2x1WjNOUGNHVnVaV1E3WEc0Z0lDQWdJQ0FnSUdsbUlDaHpaWFIwYVc1bmMwOXdaVzVsWkNrZ2UxeHVJQ0FnSUNBZ0lDQWdJR0YzWVdsMElIUm9hWE11WTNKbFlYUmxVMlYwZEdsdVozTkVhWFlvZEdocGN5NXdjbVZ3Y205alpYTnphVzVuUm5WdVkxTmxkSFJwYm1kelJHbDJMRnh1SUNBZ0lDQWdJQ0FnSUNBZ2RHaHBjeTVtZFc1amRHbHZibk5OWVhCYmRHaHBjeTV3Y21Wd2NtOWpaWE56YVc1blJuVnVZM1JwYjI1SmJuQjFkQzUyWVd4MVpTRmRLVHRjYmlBZ0lDQWdJQ0FnZlNCbGJITmxJSHRjYmlBZ0lDQWdJQ0FnSUNCMWFTNWxiWEIwZVNoMGFHbHpMbkJ5WlhCeWIyTmxjM05wYm1kR2RXNWpVMlYwZEdsdVozTkVhWFlwTzF4dUlDQWdJQ0FnSUNCOVhHNGdJQ0FnSUNCOUxDQW5UVzlrYVdaNUlHVnVZMjlrYVc1bklHWjFibU4wYVc5dUlIQmhjbUZ0WlhSbGNuTW5LVHRjYmx4dUlDQWdJQ0FnZEdocGN5NXdjbVZ3Y205alpYTnphVzVuUm5WdVkzUnBiMjVKYm5CMWRDNXliMjkwTG1Oc1lYTnpUR2x6ZEM1aFpHUW9KMjFzTFdScGJTMXlaV1IxWTNScGIyNHRjMlYwZEdsdVozTXRhVzV3ZFhRbktUdGNiaUFnSUNBZ0lIUm9hWE11Y0hKbGNISnZZMlZ6YzJsdVowWjFibU4wYVc5dVNXNXdkWFF1Y205dmRDNXdjbVZ3Wlc1a0tIUm9hWE11Y0hKbGNISnZZMlZ6YzJsdVowWjFibU5UWlhSMGFXNW5jMGxqYjI0cE8xeHVYRzRnSUNBZ0lDQnBaaUFvSVhSb2FYTXVhR0Z6UlhoMGNtRlRaWFIwYVc1bmN5bGNiaUFnSUNBZ0lDQWdkR2hwY3k1d2NtVndjbTlqWlhOemFXNW5SblZ1WTFObGRIUnBibWR6U1dOdmJpNXpkSGxzWlM1a2FYTndiR0Y1SUQwZ0oyNXZibVVuTzF4dUlDQWdJQ0FnWld4elpWeHVJQ0FnSUNBZ0lDQjBhR2x6TG5CeVpYQnliMk5sYzNOcGJtZEdkVzVqVTJWMGRHbHVaM05KWTI5dUxuTjBlV3hsTG1ScGMzQnNZWGtnUFNBblpteGxlQ2M3WEc1Y2JpQWdJQ0FnSUhSb2FYTXVibVZsWkhORGIyNW1hV2QxY21GMGFXOXVJRDBnSVNoemRYQndiM0owWldSR2RXNWpkR2x2Ym5NdWJHVnVaM1JvSUR3Z01pQW1KaUFoZEdocGN5NW9ZWE5GZUhSeVlWTmxkSFJwYm1keklDWW1YRzRnSUNBZ0lDQnpkWEJ3YjNKMFpXUkdkVzVqZEdsdmJuTmJNRjB1WkdsemRHRnVZMlZHZFc1amRHbHZibk11YkdWdVozUm9JRHdnTWlrN1hHNWNiaUFnSUNBZ0lHTnZibk4wSUdOdmJIVnRibFJwZEd4bElEMGdkV2t1YURNb2RHaHBjeTVqYjJ4MWJXNHVibUZ0WlN3Z2UyTnNZWE56WlhNNklDZHRiQzFrYVcwdGNtVmtkV04wYVc5dUxXTnZiSFZ0YmkxbFpHbDBiM0l0WTI5c2RXMXVMWFJwZEd4bEozMHBPMXh1SUNBZ0lDQWdZMjl1YzNRZ1kyOXNUM0IwUldScGRHOXljeUE5SUZ0Y2JpQWdJQ0FnSUNBZ1kyOXNkVzF1VkdsMGJHVXNJSFJvYVhNdWNISmxjSEp2WTJWemMybHVaMFoxYm1OMGFXOXVTVzV3ZFhRdWNtOXZkQ3hjYmlBZ0lDQWdJQ0FnZEdocGN5NXphVzFwYkdGeWFYUjVUV1YwY21salNXNXdkWFJTYjI5MExDQjBhR2x6TG5kbGFXZG9kRWx1Y0hWMExuSnZiM1JjYmlBZ0lDQWdJRjA3WEc0Z0lDQWdJQ0F2THlCaGMzTnBaMjRnZEc5dmJIUnBjSE5jYmlBZ0lDQWdJSFZwTG5SdmIyeDBhWEF1WW1sdVpDaGpiMngxYlc1VWFYUnNaU3dnZEdocGN5NWpiMngxYlc0dWJtRnRaU2s3WEc1Y2JpQWdJQ0FnSUdOdmJFOXdkRVZrYVhSdmNuTXVabTl5UldGamFDZ29hWFFzSUdrcElEMCtJSHRjYmlBZ0lDQWdJQ0FnYVhRdWMzUjViR1V1ZDJsa2RHZ2dQU0JnSkh0bFpHbDBiM0pYYVdSMGFITmJhVjE5SldBN1hHNGdJQ0FnSUNCOUtUdGNibHh1SUNBZ0lDQWdMeTloWkdRZ1kyeGhjM05sYzF4dUlDQWdJQ0FnWTI5c1QzQjBSV1JwZEc5eWN5NW1iM0pGWVdOb0tDaHBkQ2tnUFQ0Z2FYUXVZMnhoYzNOTWFYTjBMbUZrWkNnbmJXd3RaR2x0TFhKbFpIVmpkR2x2YmkxamIyeDFiVzR0WldScGRHOXlMV2x1Y0hWMExYSnZiM1FuS1NrN1hHNWNiaUFnSUNBZ0lHTnZibk4wSUdScGMzUmhibU5sVDNCMGFXOXVjMFJwZGlBOUlIVnBMbVJwZGtnb1hHNGdJQ0FnSUNBZ0lHTnZiRTl3ZEVWa2FYUnZjbk1zSUh0amJHRnpjMlZ6T2lBbmJXd3RaR2x0TFhKbFpIVmpkR2x2YmkxamIyeDFiVzR0WldScGRHOXlMWEp2YjNRbmZWeHVJQ0FnSUNBZ0tUdGNibHh1SUNBZ0lDQWdkR2hwY3k1aFkyTnZjbVJwYjI1RWFYWWdQU0IxYVM1a2FYWldLRnRkS1R0Y2JpQWdJQ0FnSUhSb2FYTXVaV1JwZEc5eVJHbDJMbUZ3Y0dWdVpFTm9hV3hrS0dScGMzUmhibU5sVDNCMGFXOXVjMFJwZGlrN1hHNGdJQ0FnSUNCMGFHbHpMbVZrYVhSdmNrUnBkaTVoY0hCbGJtUkRhR2xzWkNoMGFHbHpMbkJ5WlhCeWIyTmxjM05wYm1kR2RXNWpVMlYwZEdsdVozTkVhWFlwTzF4dUlDQWdJQ0FnZEdocGN5NWhZMk52Y21ScGIyNUVhWFl1WVhCd1pXNWtRMmhwYkdRb2RHaHBjeTVsWkdsMGIzSkVhWFlwTzF4dUlDQWdJSDFjYmx4dUlDQWdJR2RsZEZOcGJXbHNZWEpwZEhsTlpYUnlhV05KYm5CMWRDaHdjbVZHZFc1ak9pQkVhVzFTWldSVGRYQndiM0owWldSR2RXNWpkR2x2Ym5NcElIdGNiaUFnSUNBZ0lHTnZibk4wSUdsdWNIVjBJRDBnZFdrdVkyaHZhV05sU1c1d2RYUW9KMU5wYldsc1lYSnBkSGtnYldWMGNtbGpKeXdnY0hKbFJuVnVZeTVrYVhOMFlXNWpaVVoxYm1OMGFXOXVjMXN3WFN3Z2NISmxSblZ1WXk1a2FYTjBZVzVqWlVaMWJtTjBhVzl1Y3lrN1hHNGdJQ0FnSUNCcFppQW9JWFJvYVhNdWMybHRhV3hoY21sMGVVMWxkSEpwWTBsdWNIVjBVbTl2ZENrZ2UxeHVJQ0FnSUNBZ0lDQjBhR2x6TG5OcGJXbHNZWEpwZEhsTlpYUnlhV05KYm5CMWRGSnZiM1FnUFNCcGJuQjFkQzV5YjI5ME8xeHVJQ0FnSUNBZ0lDQjBhR2x6TG5OcGJXbHNZWEpwZEhsTlpYUnlhV05KYm5CMWRDQTlJR2x1Y0hWME8xeHVJQ0FnSUNBZ2ZTQmxiSE5sSUh0Y2JpQWdJQ0FnSUNBZ2RXa3VaVzF3ZEhrb2RHaHBjeTV6YVcxcGJHRnlhWFI1VFdWMGNtbGpTVzV3ZFhSU2IyOTBLVHRjYmlBZ0lDQWdJQ0FnZEdocGN5NXphVzFwYkdGeWFYUjVUV1YwY21salNXNXdkWFFnUFNCcGJuQjFkRHRjYmlBZ0lDQWdJQ0FnUVhKeVlYa3Vabkp2YlNoMGFHbHpMbk5wYldsc1lYSnBkSGxOWlhSeWFXTkpibkIxZEM1eWIyOTBMbU5vYVd4a2NtVnVLVnh1SUNBZ0lDQWdJQ0FnSUM1bWIzSkZZV05vS0NocGRDa2dQVDRnZEdocGN5NXphVzFwYkdGeWFYUjVUV1YwY21salNXNXdkWFJTYjI5MExtRndjR1Z1WkVOb2FXeGtLR2wwS1NrN1hHNGdJQ0FnSUNCOVhHNGdJQ0FnZlZ4dVhHNGdJQ0FnWjJWMElIQnlaVkJ5YjJObGMzTnBibWRHZFc1amRHbHZiaWdwSUh0Y2JpQWdJQ0FnSUhKbGRIVnliaUIwYUdsekxtWjFibU4wYVc5dWMwMWhjRnQwYUdsekxuQnlaWEJ5YjJObGMzTnBibWRHZFc1amRHbHZia2x1Y0hWMExuWmhiSFZsSVYwN1hHNGdJQ0FnZlZ4dUlDQWdJR0Z6ZVc1aklHTnlaV0YwWlZObGRIUnBibWR6UkdsMktIQmhjbUZ0YzBadmNtMDZJRWhVVFV4RmJHVnRaVzUwTENCbWRXNWpPaUJFUnk1R2RXNWpLVG9nVUhKdmJXbHpaVHhJVkUxTVJXeGxiV1Z1ZEQ0Z2UxeHVJQ0FnSUNBZ2RXa3VaVzF3ZEhrb2NHRnlZVzF6Um05eWJTazdYRzRnSUNBZ0lDQnBaaUFvWm5WdVl5NXBibkIxZEhNdWJHVnVaM1JvSUR3Z015bGNiaUFnSUNBZ0lDQWdjbVYwZFhKdUlIVnBMbVJwZGlncE8xeHVJQ0FnSUNBZ1kyOXVjM1FnWm1NZ1BTQm1kVzVqTG5CeVpYQmhjbVVvS1R0Y2JpQWdJQ0FnSUdOdmJuTjBJR2x1Y0hWMGN5QTlJR0YzWVdsMElHWmpMbUoxYVd4a1JXUnBkRzl5S0hWcExtUnBkaWdwS1R0Y2JpQWdJQ0FnSUdadmNpQW9iR1YwSUdrZ1BTQXlPeUJwSUR3Z1puVnVZeTVwYm5CMWRITXViR1Z1WjNSb095QnBLeXNwSUh0Y2JpQWdJQ0FnSUNBZ1kyOXVjM1FnWmtsdWNIVjBJRDBnWm5WdVl5NXBibkIxZEhOYmFWMDdYRzRnSUNBZ0lDQWdJR052Ym5OMElIWmhiQ0E5SUhSb2FYTXVjSEpsY0hKdlkyVnpjMmx1WjBaMWJtTjBhVzl1VTJWMGRHbHVaM05iWmtsdWNIVjBMbTVoYldWZElIeDhYRzRnSUNBZ0lDQWdJQ0FnSUNCbVl5NXBibkIxZEZCaGNtRnRjMXRtZFc1akxtbHVjSFYwYzF0cFhTNXVZVzFsWFM1MllXeDFaU0I4ZkNCbVNXNXdkWFF1WkdWbVlYVnNkRlpoYkhWbE8xeHVJQ0FnSUNBZ0lDQnBaaUFvZG1Gc0tWeHVJQ0FnSUNBZ0lDQWdJSFJvYVhNdWNISmxjSEp2WTJWemMybHVaMFoxYm1OMGFXOXVVMlYwZEdsdVozTmJaa2x1Y0hWMExtNWhiV1ZkSUQwZ2RtRnNPMXh1SUNBZ0lDQWdJQ0JqYjI1emRDQnBibkIxZENBOUlHbHVjSFYwY3k1bWFXNWtLQ2hwYm5BcElEMCtJR2x1Y0M1d2NtOXdaWEowZVM1dVlXMWxJRDA5UFNCbVNXNXdkWFF1Ym1GdFpTazdYRzRnSUNBZ0lDQWdJR2xtSUNnaGFXNXdkWFFwWEc0Z0lDQWdJQ0FnSUNBZ1kyOXVkR2x1ZFdVN1hHNGdJQ0FnSUNBZ0lHbG1JQ2gwYUdsekxuQnlaWEJ5YjJObGMzTnBibWRHZFc1amRHbHZibE5sZEhScGJtZHpXMlpKYm5CMWRDNXVZVzFsWFNBaFBUMGdiblZzYkNBbUpseHVJQ0FnSUNBZ0lDQWdJQ0FnZEdocGN5NXdjbVZ3Y205alpYTnphVzVuUm5WdVkzUnBiMjVUWlhSMGFXNW5jMXRtU1c1d2RYUXVibUZ0WlYwZ0lUMDlJSFZ1WkdWbWFXNWxaQ2xjYmlBZ0lDQWdJQ0FnSUNCcGJuQjFkQzUyWVd4MVpTQTlJSFJvYVhNdWNISmxjSEp2WTJWemMybHVaMFoxYm1OMGFXOXVVMlYwZEdsdVozTmJaa2x1Y0hWMExtNWhiV1ZkTzF4dUlDQWdJQ0FnSUNCcGJuQjFkQzV2YmtOb1lXNW5aV1FvS0NrZ1BUNGdleUIwYUdsekxuQnlaWEJ5YjJObGMzTnBibWRHZFc1amRHbHZibE5sZEhScGJtZHpXMlpKYm5CMWRDNXVZVzFsWFNBOUlHbHVjSFYwTG5aaGJIVmxPeUI5S1R0Y2JpQWdJQ0FnSUNBZ2NHRnlZVzF6Um05eWJTNWhjSEJsYm1Rb2FXNXdkWFF1Y205dmRDazdYRzRnSUNBZ0lDQjlYRzRnSUNBZ0lDQndZWEpoYlhOR2IzSnRMbk4wZVd4bExtMWhjbWRwYmtKdmRIUnZiU0E5SUNjeE1IQjRKenRjYmlBZ0lDQWdJSEpsZEhWeWJpQndZWEpoYlhOR2IzSnRPMXh1SUNBZ0lIMWNibjFjYmx4dVpuVnVZM1JwYjI0Z1oyVjBSblZ1WTA1aGJXVW9ablZ1WXpvZ1JFY3VSblZ1WXlrZ2UxeHVJQ0J5WlhSMWNtNGdablZ1WXk1bWNtbGxibVJzZVU1aGJXVWdQejhnWm5WdVl5NXVZVzFsTzF4dWZWeHVYRzVqYkdGemN5QlFiM04wVUhKdlkyVnpjMmx1WjBaMWJtTkZaR2wwYjNJZ2UxeHVJQ0J3YjNOMFVISnZZMlZ6YzJsdVowWjFibU4wYVc5dWMwMWhjRG9nZTF0clpYazZJSE4wY21sdVoxMDZJRVJITGtaMWJtTWdmQ0J1ZFd4c2ZTQTlJSHQ5TzF4dUlDQndiM04wVUhKdlkyVnpjMmx1WjBaMWJtTjBhVzl1U1c1d2RYUTZJRVJITGtOb2IybGpaVWx1Y0hWMFBITjBjbWx1WnlCOElHNTFiR3crTzF4dUlDQndjbWwyWVhSbElGOXliMjkwT2lCSVZFMU1SV3hsYldWdWRDQTlJSFZwTG1ScGRpaGJYU2s3WEc0Z0lIQnlhWFpoZEdVZ1gzQnZjM1JRY205alpYTnphVzVuUVhKbmN6b2dUM0IwYVc5dWN5QTlJSHQ5TzF4dUlDQndjbWwyWVhSbElGOWhjbWR6Uld4bGJXVnVkRG9nU0ZSTlRFVnNaVzFsYm5RZ1BTQjFhUzVrYVhZb1cxMHBPMXh1SUNCd2NtbDJZWFJsSUY5elpYUjBhVzVuYzBsamIyNDZJRWhVVFV4RmJHVnRaVzUwTzF4dUlDQndjbWwyWVhSbElGOXpaWFIwYVc1bmMwOXdaVzVsWkRvZ1ltOXZiR1ZoYmlBOUlHWmhiSE5sTzF4dUlDQmpiMjV6ZEhKMVkzUnZjaWdwSUh0Y2JpQWdJQ0IwYUdsekxsOXpaWFIwYVc1bmMwbGpiMjRnUFNCMWFTNXBZMjl1Y3k1elpYUjBhVzVuY3loaGMzbHVZeUFvS1NBOVBpQjdYRzRnSUNBZ0lDQjBhR2x6TGw5elpYUjBhVzVuYzA5d1pXNWxaQ0E5SUNGMGFHbHpMbDl6WlhSMGFXNW5jMDl3Wlc1bFpEdGNiaUFnSUNBZ0lHbG1JQ2gwYUdsekxsOXpaWFIwYVc1bmMwOXdaVzVsWkNsY2JpQWdJQ0FnSUNBZ2RHaHBjeTVmWVhKbmMwVnNaVzFsYm5RdWMzUjViR1V1WkdsemNHeGhlU0E5SUNkaWJHOWpheWM3WEc0Z0lDQWdJQ0JsYkhObFhHNGdJQ0FnSUNBZ0lIUm9hWE11WDJGeVozTkZiR1Z0Wlc1MExuTjBlV3hsTG1ScGMzQnNZWGtnUFNBbmJtOXVaU2M3WEc0Z0lDQWdmU2s3WEc0Z0lDQWdkR2hwY3k1ZllYSm5jMFZzWlcxbGJuUXVjM1I1YkdVdVpHbHpjR3hoZVNBOUlDZHViMjVsSnp0Y2JseHVJQ0FnSUdOdmJuTjBJSEJ2YzNSUWNtOWpaWE56YVc1blJuVnVZM01nUFNCRVJ5NUdkVzVqTG1acGJtUW9lM1JoWjNNNklGdEVTVTFmVWtWRVgxQlBVMVJRVWs5RFJWTlRTVTVIWDBaVlRrTlVTVTlPWDFSQlIxMTlLVnh1SUNBZ0lDQWdMbVpwYkhSbGNpZ29aaWtnUFQ0Z1ppNXBibkIxZEhNdWJHVnVaM1JvSUQ0OUlESXBPMXh1SUNBZ0lIQnZjM1JRY205alpYTnphVzVuUm5WdVkzTXVabTl5UldGamFDZ29aaWtnUFQ0Z2UxeHVJQ0FnSUNBZ1kyOXVjM1FnYm1GdFpTQTlJR1l1Wm5KcFpXNWtiSGxPWVcxbElEOC9JR1l1Ym1GdFpUdGNiaUFnSUNBZ0lIUm9hWE11Y0c5emRGQnliMk5sYzNOcGJtZEdkVzVqZEdsdmJuTk5ZWEJiYm1GdFpWMGdQU0JtTzF4dUlDQWdJSDBwTzF4dUlDQWdJSFJvYVhNdWNHOXpkRkJ5YjJObGMzTnBibWRHZFc1amRHbHZibk5OWVhCYkowNXZibVVuWFNBOUlHNTFiR3c3WEc1Y2JpQWdJQ0JqYjI1emRDQmtaV1poZFd4MFVHOXpkRkJ5YjJObGMzTnBibWRHZFc1aklEMGdUMkpxWldOMExtdGxlWE1vZEdocGN5NXdiM04wVUhKdlkyVnpjMmx1WjBaMWJtTjBhVzl1YzAxaGNDa3VabWx1WkNnb2FYUXBJRDArWEc0Z0lDQWdJQ0FoSVhSb2FYTXVjRzl6ZEZCeWIyTmxjM05wYm1kR2RXNWpkR2x2Ym5OTllYQmJhWFJkUHk1dmNIUnBiMjV6UHk1YlJFbE5YMUpGUkY5RVJVWkJWVXhVWDFCUFUxUlFVazlEUlZOVFNVNUhYMFpWVGtOVVNVOU9YMDFGVkVGZEtTQS9QeUFuVG05dVpTYzdYRzRnSUNBZ2RHaHBjeTV3YjNOMFVISnZZMlZ6YzJsdVowWjFibU4wYVc5dVNXNXdkWFFnUFZ4dUlDQWdJQ0FnZFdrdVkyaHZhV05sU1c1d2RYUW9KMUJ2YzNSd2NtOWpaWE56YVc1bkp5d2daR1ZtWVhWc2RGQnZjM1JRY205alpYTnphVzVuUm5WdVl5eGNiaUFnSUNBZ0lDQWdUMkpxWldOMExtdGxlWE1vZEdocGN5NXdiM04wVUhKdlkyVnpjMmx1WjBaMWJtTjBhVzl1YzAxaGNDa3NJR0Z6ZVc1aklDZ3BJRDArSUhzZ1lYZGhhWFFnZEdocGN5NXZia1oxYm1OMGFXOXVRMmhoYm1kbFpDZ3BPeUI5TEZ4dUlDQWdJQ0FnSUNCN2JuVnNiR0ZpYkdVNklHWmhiSE5sZlNrN1hHNGdJQ0FnZEdocGN5NXZia1oxYm1OMGFXOXVRMmhoYm1kbFpDZ3BPMXh1SUNBZ0lIUm9hWE11Y0c5emRGQnliMk5sYzNOcGJtZEdkVzVqZEdsdmJrbHVjSFYwTG01MWJHeGhZbXhsSUQwZ1ptRnNjMlU3WEc0Z0lDQWdkR2hwY3k1d2IzTjBVSEp2WTJWemMybHVaMFoxYm1OMGFXOXVTVzV3ZFhRdVkyeGhjM05NYVhOMExtRmtaQ2duYld3dFpHbHRMWEpsWkhWamRHbHZiaTF6WlhSMGFXNW5jeTFwYm5CMWRDY3BPMXh1SUNBZ0lIUm9hWE11Y0c5emRGQnliMk5sYzNOcGJtZEdkVzVqZEdsdmJrbHVjSFYwTG5KdmIzUXVjSEpsY0dWdVpDaDBhR2x6TGw5elpYUjBhVzVuYzBsamIyNHBPMXh1SUNBZ0lIUm9hWE11WDNKdmIzUXVZWEJ3Wlc1a1EyaHBiR1FvZEdocGN5NXdiM04wVUhKdlkyVnpjMmx1WjBaMWJtTjBhVzl1U1c1d2RYUXVjbTl2ZENrN1hHNGdJQ0FnZEdocGN5NWZjbTl2ZEM1aGNIQmxibVJEYUdsc1pDaDBhR2x6TGw5aGNtZHpSV3hsYldWdWRDazdYRzRnSUgxY2JseHVJQ0JuWlhRZ2NHOXpkRkJ5YjJObGMzTnBibWRHZFc1amRHbHZiaWdwSUh0Y2JpQWdJQ0J5WlhSMWNtNGdkR2hwY3k1d2IzTjBVSEp2WTJWemMybHVaMFoxYm1OMGFXOXVTVzV3ZFhRdWRtRnNkV1VnUDF4dUlDQWdJQ0FnZEdocGN5NXdiM04wVUhKdlkyVnpjMmx1WjBaMWJtTjBhVzl1YzAxaGNGdDBhR2x6TG5CdmMzUlFjbTlqWlhOemFXNW5SblZ1WTNScGIyNUpibkIxZEM1MllXeDFaVjBnT2lCdWRXeHNPMXh1SUNCOVhHNWNiaUFnWVhONWJtTWdiMjVHZFc1amRHbHZia05vWVc1blpXUW9LU0I3WEc0Z0lDQWdZMjl1YzNRZ1puVnVZeUE5SUhSb2FYTXVjRzl6ZEZCeWIyTmxjM05wYm1kR2RXNWpkR2x2Ymp0Y2JpQWdJQ0IxYVM1bGJYQjBlU2gwYUdsekxsOWhjbWR6Uld4bGJXVnVkQ2s3WEc0Z0lDQWdkR2hwY3k1ZmNHOXpkRkJ5YjJObGMzTnBibWRCY21keklEMGdlMzA3WEc0Z0lDQWdhV1lnS0NGbWRXNWpJSHg4SUdaMWJtTXVhVzV3ZFhSekxteGxibWQwYUNBOElETXBJSHRjYmlBZ0lDQWdJSFJvYVhNdVgzTmxkSFJwYm1kelNXTnZiaTV6ZEhsc1pTNWthWE53YkdGNUlEMGdKMjV2Ym1Vbk8xeHVJQ0FnSUNBZ2NtVjBkWEp1TzF4dUlDQWdJSDA3WEc0Z0lDQWdkR2hwY3k1ZmMyVjBkR2x1WjNOSlkyOXVMbk4wZVd4bExtUnBjM0JzWVhrZ1BTQW5abXhsZUNjN1hHNGdJQ0FnWTI5dWMzUWdabU1nUFNCbWRXNWpMbkJ5WlhCaGNtVW9LVHRjYmlBZ0lDQmpiMjV6ZENCcGJuQjFkSE1nUFNCaGQyRnBkQ0JtWXk1aWRXbHNaRVZrYVhSdmNpaDFhUzVrYVhZb0tTazdYRzRnSUNBZ1ptOXlJQ2hzWlhRZ2FTQTlJREk3SUdrZ1BDQm1kVzVqTG1sdWNIVjBjeTVzWlc1bmRHZzdJR2tyS3lrZ2UxeHVJQ0FnSUNBZ1kyOXVjM1FnWmtsdWNIVjBJRDBnWm5WdVl5NXBibkIxZEhOYmFWMDdYRzRnSUNBZ0lDQmpiMjV6ZENCMllXd2dQU0IwYUdsekxsOXdiM04wVUhKdlkyVnpjMmx1WjBGeVozTmJaa2x1Y0hWMExtNWhiV1ZkSUh4OFhHNGdJQ0FnSUNBZ0lHWmpMbWx1Y0hWMFVHRnlZVzF6VzJaMWJtTXVhVzV3ZFhSelcybGRMbTVoYldWZExuWmhiSFZsSUh4OElHWkpibkIxZEM1a1pXWmhkV3gwVm1Gc2RXVTdYRzRnSUNBZ0lDQnBaaUFvZG1Gc0tWeHVJQ0FnSUNBZ0lDQjBhR2x6TGw5d2IzTjBVSEp2WTJWemMybHVaMEZ5WjNOYlprbHVjSFYwTG01aGJXVmRJRDBnZG1Gc08xeHVJQ0FnSUNBZ1kyOXVjM1FnYVc1d2RYUWdQU0JwYm5CMWRITXVabWx1WkNnb2FXNXdLU0E5UGlCcGJuQXVjSEp2Y0dWeWRIa3VibUZ0WlNBOVBUMGdaa2x1Y0hWMExtNWhiV1VwTzF4dUlDQWdJQ0FnYVdZZ0tDRnBibkIxZENsY2JpQWdJQ0FnSUNBZ1kyOXVkR2x1ZFdVN1hHNGdJQ0FnSUNCcGJuQjFkQzV2YmtOb1lXNW5aV1FvS0NrZ1BUNGdleUIwYUdsekxsOXdiM04wVUhKdlkyVnpjMmx1WjBGeVozTmJaa2x1Y0hWMExtNWhiV1ZkSUQwZ2FXNXdkWFF1ZG1Gc2RXVTdJSDBwTzF4dUlDQWdJQ0FnZEdocGN5NWZZWEpuYzBWc1pXMWxiblF1WVhCd1pXNWtLR2x1Y0hWMExuSnZiM1FwTzF4dUlDQWdJSDFjYmlBZ2ZWeHVYRzRnSUdkbGRDQnliMjkwS0NrZ2UxeHVJQ0FnSUhKbGRIVnliaUIwYUdsekxsOXliMjkwTzF4dUlDQjlYRzVjYmlBZ1oyVjBJR0Z5WjNNb0tTQjdYRzRnSUNBZ2NtVjBkWEp1SUhSb2FYTXVYM0J2YzNSUWNtOWpaWE56YVc1blFYSm5jenRjYmlBZ2ZWeHVmVnh1SWwxOSIsImV4cG9ydCBjb25zdCBESU1FTlNJT05BTElUWV9SRURVQ0VSX1RFUk1JTkFURV9FVkVOVCA9ICdkaW1lbnNpb25hbGl0eS1yZWR1Y2VyLXRlcm1pbmF0ZS1ldmVudCc7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1kYXRhOmFwcGxpY2F0aW9uL2pzb247YmFzZTY0LGV5SjJaWEp6YVc5dUlqb3pMQ0ptYVd4bElqb2lZMjl1YzNSekxtcHpJaXdpYzI5MWNtTmxVbTl2ZENJNklpSXNJbk52ZFhKalpYTWlPbHNpWTI5dWMzUnpMblJ6SWwwc0ltNWhiV1Z6SWpwYlhTd2liV0Z3Y0dsdVozTWlPaUpCUVVGQkxFMUJRVTBzUTBGQlF5eE5RVUZOTEhORFFVRnpReXhIUVVGSExIZERRVUYzUXl4RFFVRkRJaXdpYzI5MWNtTmxjME52Ym5SbGJuUWlPbHNpWlhod2IzSjBJR052Ym5OMElFUkpUVVZPVTBsUFRrRk1TVlJaWDFKRlJGVkRSVkpmVkVWU1RVbE9RVlJGWDBWV1JVNVVJRDBnSjJScGJXVnVjMmx2Ym1Gc2FYUjVMWEpsWkhWalpYSXRkR1Z5YldsdVlYUmxMV1YyWlc1MEp6dGNiaUpkZlE9PSIsImltcG9ydCB7IERpc3RhbmNlQWdncmVnYXRpb25NZXRob2RzIH0gZnJvbSAnLi90eXBlcyc7XG5leHBvcnQgY29uc3QgaXNOaWwgPSAoeCkgPT4geCA9PT0gbnVsbCB8fCB4ID09PSB1bmRlZmluZWQ7XG5leHBvcnQgZnVuY3Rpb24gaW5zZXJ0U21hbGxlcihkaXN0YW5jZXNBciwgaW5kZXhlcywgbnVtLCBpbmRleCkge1xuICAgIGlmIChudW0gPiBkaXN0YW5jZXNBcltkaXN0YW5jZXNBci5sZW5ndGggLSAxXSlcbiAgICAgICAgcmV0dXJuO1xuICAgIGNvbnN0IG5ld1Bvc2l0aW9uID0gZGlzdGFuY2VzQXIuZmluZEluZGV4KCh2KSA9PiBudW0gPCB2KTtcbiAgICBkaXN0YW5jZXNBci5wb3AoKTtcbiAgICBkaXN0YW5jZXNBci5zcGxpY2UobmV3UG9zaXRpb24sIDAsIG51bSk7XG4gICAgaW5kZXhlcy5wb3AoKTtcbiAgICBpbmRleGVzLnNwbGljZShuZXdQb3NpdGlvbiwgMCwgaW5kZXgpO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGluc2VydExhcmdlcihkaXN0YW5jZXNBciwgaW5kZXhlcywgbnVtLCBpbmRleCkge1xuICAgIGlmIChudW0gPCBkaXN0YW5jZXNBcltkaXN0YW5jZXNBci5sZW5ndGggLSAxXSlcbiAgICAgICAgcmV0dXJuO1xuICAgIGNvbnN0IG5ld1Bvc2l0aW9uID0gZGlzdGFuY2VzQXIuZmluZEluZGV4KCh2KSA9PiBudW0gPiB2KTtcbiAgICBkaXN0YW5jZXNBci5wb3AoKTtcbiAgICBkaXN0YW5jZXNBci5zcGxpY2UobmV3UG9zaXRpb24sIDAsIG51bSk7XG4gICAgaW5kZXhlcy5wb3AoKTtcbiAgICBpbmRleGVzLnNwbGljZShuZXdQb3NpdGlvbiwgMCwgaW5kZXgpO1xufVxuZXhwb3J0IGZ1bmN0aW9uIGdldEFnZ3JlZ2F0aW9uRnVuY3Rpb24oYWdncmVnYXRpb25NZXRob2QsIHdlaWdodHMpIHtcbiAgICBzd2l0Y2ggKGFnZ3JlZ2F0aW9uTWV0aG9kKSB7XG4gICAgICAgIGNhc2UgRGlzdGFuY2VBZ2dyZWdhdGlvbk1ldGhvZHMuTUFOSEFUVEFOOlxuICAgICAgICAgICAgcmV0dXJuICh2cykgPT4gdnMucmVkdWNlKChhY2MsIHZhbCwgaWR4KSA9PiBhY2MgKyB2YWwgKiB3ZWlnaHRzW2lkeF0sIDApO1xuICAgICAgICBkZWZhdWx0OlxuICAgICAgICAgICAgcmV0dXJuICh2cykgPT4ge1xuICAgICAgICAgICAgICAgIC8vIGV1Y2xpZGVhblxuICAgICAgICAgICAgICAgIGNvbnN0IHN1bSA9IHZzLnJlZHVjZSgoYWNjLCB2YWwsIGlkeCkgPT4gYWNjICsgKHZhbCAqIHdlaWdodHNbaWR4XSkgKiogMiwgMCk7XG4gICAgICAgICAgICAgICAgcmV0dXJuIE1hdGguc3FydChzdW0pO1xuICAgICAgICAgICAgfTtcbiAgICB9XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1kYXRhOmFwcGxpY2F0aW9uL2pzb247YmFzZTY0LGV5SjJaWEp6YVc5dUlqb3pMQ0ptYVd4bElqb2lkWFJwYkhNdWFuTWlMQ0p6YjNWeVkyVlNiMjkwSWpvaUlpd2ljMjkxY21ObGN5STZXeUoxZEdsc2N5NTBjeUpkTENKdVlXMWxjeUk2VzEwc0ltMWhjSEJwYm1keklqb2lRVUZCUVN4UFFVRlBMRVZCUVRSQ0xEQkNRVUV3UWl4RlFVRkRMRTFCUVUwc1UwRkJVeXhEUVVGRE8wRkJSVGxGTEUxQlFVMHNRMEZCUXl4TlFVRk5MRXRCUVVzc1IwRkJSeXhEUVVGRExFTkJRVTBzUlVGQlJTeEZRVUZGTEVOQlFVTXNRMEZCUXl4TFFVRkxMRWxCUVVrc1NVRkJTU3hEUVVGRExFdEJRVXNzVTBGQlV5eERRVUZETzBGQlJTOUVMRTFCUVUwc1ZVRkJWU3hoUVVGaExFTkJRVU1zVjBGQmNVSXNSVUZCUlN4UFFVRnBRaXhGUVVGRkxFZEJRVmNzUlVGQlJTeExRVUZoTzBsQlEyaEhMRWxCUVVrc1IwRkJSeXhIUVVGSExGZEJRVmNzUTBGQlF5eFhRVUZYTEVOQlFVTXNUVUZCVFN4SFFVRkRMRU5CUVVNc1EwRkJRenRSUVVONlF5eFBRVUZQTzBsQlJWUXNUVUZCVFN4WFFVRlhMRWRCUVVjc1YwRkJWeXhEUVVGRExGTkJRVk1zUTBGQlF5eERRVUZETEVOQlFVTXNSVUZCUlN4RlFVRkZMRU5CUVVNc1IwRkJSeXhIUVVGSExFTkJRVU1zUTBGQlF5eERRVUZETzBsQlF6RkVMRmRCUVZjc1EwRkJReXhIUVVGSExFVkJRVVVzUTBGQlF6dEpRVU5zUWl4WFFVRlhMRU5CUVVNc1RVRkJUU3hEUVVGRExGZEJRVmNzUlVGQlJTeERRVUZETEVWQlFVVXNSMEZCUnl4RFFVRkRMRU5CUVVNN1NVRkRlRU1zVDBGQlR5eERRVUZETEVkQlFVY3NSVUZCUlN4RFFVRkRPMGxCUTJRc1QwRkJUeXhEUVVGRExFMUJRVTBzUTBGQlF5eFhRVUZYTEVWQlFVVXNRMEZCUXl4RlFVRkZMRXRCUVVzc1EwRkJReXhEUVVGRE8wRkJRM2hETEVOQlFVTTdRVUZGUkN4TlFVRk5MRlZCUVZVc1dVRkJXU3hEUVVGRExGZEJRWEZDTEVWQlFVVXNUMEZCYVVJc1JVRkJSU3hIUVVGWExFVkJRVVVzUzBGQllUdEpRVU12Uml4SlFVRkpMRWRCUVVjc1IwRkJSeXhYUVVGWExFTkJRVU1zVjBGQlZ5eERRVUZETEUxQlFVMHNSMEZCUXl4RFFVRkRMRU5CUVVNN1VVRkRla01zVDBGQlR6dEpRVVZVTEUxQlFVMHNWMEZCVnl4SFFVRkhMRmRCUVZjc1EwRkJReXhUUVVGVExFTkJRVU1zUTBGQlF5eERRVUZETEVWQlFVVXNSVUZCUlN4RFFVRkRMRWRCUVVjc1IwRkJSeXhEUVVGRExFTkJRVU1zUTBGQlF6dEpRVU14UkN4WFFVRlhMRU5CUVVNc1IwRkJSeXhGUVVGRkxFTkJRVU03U1VGRGJFSXNWMEZCVnl4RFFVRkRMRTFCUVUwc1EwRkJReXhYUVVGWExFVkJRVVVzUTBGQlF5eEZRVUZGTEVkQlFVY3NRMEZCUXl4RFFVRkRPMGxCUTNoRExFOUJRVThzUTBGQlF5eEhRVUZITEVWQlFVVXNRMEZCUXp0SlFVTmtMRTlCUVU4c1EwRkJReXhOUVVGTkxFTkJRVU1zVjBGQlZ5eEZRVUZGTEVOQlFVTXNSVUZCUlN4TFFVRkxMRU5CUVVNc1EwRkJRenRCUVVONFF5eERRVUZETzBGQlJVUXNUVUZCVFN4VlFVRlZMSE5DUVVGelFpeERRVU53UXl4cFFrRkJORU1zUlVGQlJTeFBRVUZwUWp0SlFVVXZSQ3hSUVVGUkxHbENRVUZwUWl4RlFVRkZPMUZCUTNwQ0xFdEJRVXNzTUVKQlFUQkNMRU5CUVVNc1UwRkJVenRaUVVOMlF5eFBRVUZQTEVOQlFVTXNSVUZCV1N4RlFVRkZMRVZCUVVVc1EwRkJReXhGUVVGRkxFTkJRVU1zVFVGQlRTeERRVUZETEVOQlFVTXNSMEZCUnl4RlFVRkZMRWRCUVVjc1JVRkJSU3hIUVVGSExFVkJRVVVzUlVGQlJTeERRVUZETEVkQlFVY3NSMEZCUnl4SFFVRkhMRWRCUVVjc1QwRkJUeXhEUVVGRExFZEJRVWNzUTBGQlF5eEZRVUZGTEVOQlFVTXNRMEZCUXl4RFFVRkRPMUZCUTNKR08xbEJRMFVzVDBGQlR5eERRVUZETEVWQlFWa3NSVUZCUlN4RlFVRkZPMmRDUVVOMFFpeFpRVUZaTzJkQ1FVTmFMRTFCUVUwc1IwRkJSeXhIUVVGSExFVkJRVVVzUTBGQlF5eE5RVUZOTEVOQlFVTXNRMEZCUXl4SFFVRkhMRVZCUVVVc1IwRkJSeXhGUVVGRkxFZEJRVWNzUlVGQlJTeEZRVUZGTEVOQlFVTXNSMEZCUnl4SFFVRkhMRU5CUVVNc1IwRkJSeXhIUVVGSExFOUJRVThzUTBGQlF5eEhRVUZITEVOQlFVTXNRMEZCUXl4SlFVRkpMRU5CUVVNc1JVRkJSU3hEUVVGRExFTkJRVU1zUTBGQlF6dG5Ra0ZETjBVc1QwRkJUeXhKUVVGSkxFTkJRVU1zU1VGQlNTeERRVUZETEVkQlFVY3NRMEZCUXl4RFFVRkRPMWxCUTNoQ0xFTkJRVU1zUTBGQlF6dExRVU5NTzBGQlEwZ3NRMEZCUXlJc0luTnZkWEpqWlhORGIyNTBaVzUwSWpwYkltbHRjRzl5ZENCN1JHbHpkR0Z1WTJWQloyZHlaV2RoZEdsdmJrMWxkR2h2WkN3Z1JHbHpkR0Z1WTJWQloyZHlaV2RoZEdsdmJrMWxkR2h2WkhOOUlHWnliMjBnSnk0dmRIbHdaWE1uTzF4dVhHNWxlSEJ2Y25RZ1kyOXVjM1FnYVhOT2FXd2dQU0FvZURvZ1lXNTVLU0E5UGlCNElEMDlQU0J1ZFd4c0lIeDhJSGdnUFQwOUlIVnVaR1ZtYVc1bFpEdGNibHh1Wlhod2IzSjBJR1oxYm1OMGFXOXVJR2x1YzJWeWRGTnRZV3hzWlhJb1pHbHpkR0Z1WTJWelFYSTZJRzUxYldKbGNsdGRMQ0JwYm1SbGVHVnpPaUJ1ZFcxaVpYSmJYU3dnYm5WdE9pQnVkVzFpWlhJc0lHbHVaR1Y0T2lCdWRXMWlaWElwSUh0Y2JpQWdhV1lnS0c1MWJTQStJR1JwYzNSaGJtTmxjMEZ5VzJScGMzUmhibU5sYzBGeUxteGxibWQwYUMweFhTbGNiaUFnSUNCeVpYUjFjbTQ3WEc1Y2JpQWdZMjl1YzNRZ2JtVjNVRzl6YVhScGIyNGdQU0JrYVhOMFlXNWpaWE5CY2k1bWFXNWtTVzVrWlhnb0tIWXBJRDArSUc1MWJTQThJSFlwTzF4dUlDQmthWE4wWVc1alpYTkJjaTV3YjNBb0tUdGNiaUFnWkdsemRHRnVZMlZ6UVhJdWMzQnNhV05sS0c1bGQxQnZjMmwwYVc5dUxDQXdMQ0J1ZFcwcE8xeHVJQ0JwYm1SbGVHVnpMbkJ2Y0NncE8xeHVJQ0JwYm1SbGVHVnpMbk53YkdsalpTaHVaWGRRYjNOcGRHbHZiaXdnTUN3Z2FXNWtaWGdwTzF4dWZWeHVYRzVsZUhCdmNuUWdablZ1WTNScGIyNGdhVzV6WlhKMFRHRnlaMlZ5S0dScGMzUmhibU5sYzBGeU9pQnVkVzFpWlhKYlhTd2dhVzVrWlhobGN6b2diblZ0WW1WeVcxMHNJRzUxYlRvZ2JuVnRZbVZ5TENCcGJtUmxlRG9nYm5WdFltVnlLU0I3WEc0Z0lHbG1JQ2h1ZFcwZ1BDQmthWE4wWVc1alpYTkJjbHRrYVhOMFlXNWpaWE5CY2k1c1pXNW5kR2d0TVYwcFhHNGdJQ0FnY21WMGRYSnVPMXh1WEc0Z0lHTnZibk4wSUc1bGQxQnZjMmwwYVc5dUlEMGdaR2x6ZEdGdVkyVnpRWEl1Wm1sdVpFbHVaR1Y0S0NoMktTQTlQaUJ1ZFcwZ1BpQjJLVHRjYmlBZ1pHbHpkR0Z1WTJWelFYSXVjRzl3S0NrN1hHNGdJR1JwYzNSaGJtTmxjMEZ5TG5Od2JHbGpaU2h1WlhkUWIzTnBkR2x2Yml3Z01Dd2diblZ0S1R0Y2JpQWdhVzVrWlhobGN5NXdiM0FvS1R0Y2JpQWdhVzVrWlhobGN5NXpjR3hwWTJVb2JtVjNVRzl6YVhScGIyNHNJREFzSUdsdVpHVjRLVHRjYm4xY2JseHVaWGh3YjNKMElHWjFibU4wYVc5dUlHZGxkRUZuWjNKbFoyRjBhVzl1Um5WdVkzUnBiMjRvWEc0Z0lHRm5aM0psWjJGMGFXOXVUV1YwYUc5a09pQkVhWE4wWVc1alpVRm5aM0psWjJGMGFXOXVUV1YwYUc5a0xDQjNaV2xuYUhSek9pQnVkVzFpWlhKYlhWeHVLVG9nS0haaGJIVmxjem9nYm5WdFltVnlXMTBwSUQwK0lHNTFiV0psY2lCN1hHNGdJSE4zYVhSamFDQW9ZV2RuY21WbllYUnBiMjVOWlhSb2IyUXBJSHRjYmlBZ0lDQmpZWE5sSUVScGMzUmhibU5sUVdkbmNtVm5ZWFJwYjI1TlpYUm9iMlJ6TGsxQlRraEJWRlJCVGpwY2JpQWdJQ0FnSUhKbGRIVnliaUFvZG5NNklHNTFiV0psY2x0ZEtTQTlQaUIyY3k1eVpXUjFZMlVvS0dGall5d2dkbUZzTENCcFpIZ3BJRDArSUdGall5QXJJSFpoYkNBcUlIZGxhV2RvZEhOYmFXUjRYU3dnTUNrN1hHNGdJQ0FnWkdWbVlYVnNkRHBjYmlBZ0lDQWdJSEpsZEhWeWJpQW9kbk02SUc1MWJXSmxjbHRkS1NBOVBpQjdYRzRnSUNBZ0lDQWdJQzh2SUdWMVkyeHBaR1ZoYmx4dUlDQWdJQ0FnSUNCamIyNXpkQ0J6ZFcwZ1BTQjJjeTV5WldSMVkyVW9LR0ZqWXl3Z2RtRnNMQ0JwWkhncElEMCtJR0ZqWXlBcklDaDJZV3dnS2lCM1pXbG5hSFJ6VzJsa2VGMHBJQ29xSURJc0lEQXBPMXh1SUNBZ0lDQWdJQ0J5WlhSMWNtNGdUV0YwYUM1emNYSjBLSE4xYlNrN1hHNGdJQ0FnSUNCOU8xeHVJQ0I5WEc1OVhHNGlYWDA9IiwiLyoqXG4gKiBEZW5vdGVzIGEgdmVjdG9yIG9mIGZsb2F0aW5nIHBvaXQgdmFsdWVzLlxuICpcbiAqIEBleHBvcnRcbiAqIEBjbGFzcyBWZWN0b3JcbiAqIEBleHRlbmRzIHtGbG9hdDMyQXJyYXl9XG4gKi9cbmV4cG9ydCBjbGFzcyBWZWN0b3IgZXh0ZW5kcyBGbG9hdDMyQXJyYXkge1xufVxuLyoqXG4gKiBEZW5vdGVzIGEgdHdvLWRpbWVuc2lvbmFsIG1hdHJpeC5cbiAqXG4gKiBAZXhwb3J0XG4gKiBAY2xhc3MgTWF0cml4XG4gKiBAZXh0ZW5kcyB7QXJyYXk8VmVjdG9yPn1cbiAqL1xuZXhwb3J0IGNsYXNzIE1hdHJpeCBleHRlbmRzIEFycmF5IHtcbn1cbi8qKlxuICogRGVub3RlcyBjYXJ0ZXNpYW4gY29vcmRpbmF0ZXMuXG4gKlxuICogQGV4cG9ydFxuICogQGNsYXNzIENvb3JkaW5hdGVzXG4gKiBAZXh0ZW5kcyB7TWF0cml4fVxuICovXG5leHBvcnQgY2xhc3MgQ29vcmRpbmF0ZXMgZXh0ZW5kcyBNYXRyaXgge1xufVxuLyoqXG4gKiBEZW5vdGVzIGFuIGFycmF5IG9mIGFyYml0cmFyeS10eXBlZCB2ZWN0b3JzLlxuICpcbiAqIEBleHBvcnRcbiAqIEBjbGFzcyBWZWN0b3JzXG4gKiBAZXh0ZW5kcyB7QXJyYXk8YW55Pn1cbiAqL1xuZXhwb3J0IGNsYXNzIFZlY3RvcnMgZXh0ZW5kcyBBcnJheSB7XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1kYXRhOmFwcGxpY2F0aW9uL2pzb247YmFzZTY0LGV5SjJaWEp6YVc5dUlqb3pMQ0ptYVd4bElqb2lkSGx3WlMxa1pXTnNZWEpoZEdsdmJuTXVhbk1pTENKemIzVnlZMlZTYjI5MElqb2lJaXdpYzI5MWNtTmxjeUk2V3lKMGVYQmxMV1JsWTJ4aGNtRjBhVzl1Y3k1MGN5SmRMQ0p1WVcxbGN5STZXMTBzSW0xaGNIQnBibWR6SWpvaVFVRkZRVHM3T3pzN08wZEJUVWM3UVVGRFNDeE5RVUZOTEU5QlFVOHNUVUZCVHl4VFFVRlJMRmxCUVZrN1EwRkJSenRCUVVVelF6czdPenM3TzBkQlRVYzdRVUZEU0N4TlFVRk5MRTlCUVU4c1RVRkJUeXhUUVVGUkxFdEJRV0U3UTBGQlJ6dEJRVVUxUXpzN096czdPMGRCVFVjN1FVRkRTQ3hOUVVGTkxFOUJRVThzVjBGQldTeFRRVUZSTEUxQlFVMDdRMEZCUnp0QlFVVXhRenM3T3pzN08wZEJUVWM3UVVGRFNDeE5RVUZOTEU5QlFVOHNUMEZCVVN4VFFVRlJMRXRCUVZVN1EwRkJSeUlzSW5OdmRYSmpaWE5EYjI1MFpXNTBJanBiSW1sdGNHOXlkQ0FxSUdGeklFUkhJR1p5YjIwZ0oyUmhkR0ZuY205ckxXRndhUzlrWnljN1hHNWNiaThxS2x4dUlDb2dSR1Z1YjNSbGN5QmhJSFpsWTNSdmNpQnZaaUJtYkc5aGRHbHVaeUJ3YjJsMElIWmhiSFZsY3k1Y2JpQXFYRzRnS2lCQVpYaHdiM0owWEc0Z0tpQkFZMnhoYzNNZ1ZtVmpkRzl5WEc0Z0tpQkFaWGgwWlc1a2N5QjdSbXh2WVhRek1rRnljbUY1ZlZ4dUlDb3ZYRzVsZUhCdmNuUWdZMnhoYzNNZ1ZtVmpkRzl5SUdWNGRHVnVaSE1nUm14dllYUXpNa0Z5Y21GNUlIdDlYRzVjYmk4cUtseHVJQ29nUkdWdWIzUmxjeUJoSUhSM2J5MWthVzFsYm5OcGIyNWhiQ0J0WVhSeWFYZ3VYRzRnS2x4dUlDb2dRR1Y0Y0c5eWRGeHVJQ29nUUdOc1lYTnpJRTFoZEhKcGVGeHVJQ29nUUdWNGRHVnVaSE1nZTBGeWNtRjVQRlpsWTNSdmNqNTlYRzRnS2k5Y2JtVjRjRzl5ZENCamJHRnpjeUJOWVhSeWFYZ2daWGgwWlc1a2N5QkJjbkpoZVR4V1pXTjBiM0krSUh0OVhHNWNiaThxS2x4dUlDb2dSR1Z1YjNSbGN5QmpZWEowWlhOcFlXNGdZMjl2Y21ScGJtRjBaWE11WEc0Z0tseHVJQ29nUUdWNGNHOXlkRnh1SUNvZ1FHTnNZWE56SUVOdmIzSmthVzVoZEdWelhHNGdLaUJBWlhoMFpXNWtjeUI3VFdGMGNtbDRmVnh1SUNvdlhHNWxlSEJ2Y25RZ1kyeGhjM01nUTI5dmNtUnBibUYwWlhNZ1pYaDBaVzVrY3lCTllYUnlhWGdnZTMxY2JseHVMeW9xWEc0Z0tpQkVaVzV2ZEdWeklHRnVJR0Z5Y21GNUlHOW1JR0Z5WW1sMGNtRnllUzEwZVhCbFpDQjJaV04wYjNKekxseHVJQ3BjYmlBcUlFQmxlSEJ2Y25SY2JpQXFJRUJqYkdGemN5QldaV04wYjNKelhHNGdLaUJBWlhoMFpXNWtjeUI3UVhKeVlYazhZVzU1UG4xY2JpQXFMMXh1Wlhod2IzSjBJR05zWVhOeklGWmxZM1J2Y25NZ1pYaDBaVzVrY3lCQmNuSmhlVHhoYm5rK0lIdDlYRzVjYmk4cUtseHVJQ29nUkdWdWIzUmxjeUJoSUdScFkzUnBiMjVoY25rZ1kyOXVkR0ZwYm1sdVp5Qm1kVzVqZEdsdmJpQnZjSFJwYjI1ekxseHVJQ3BjYmlBcUlFQmxlSEJ2Y25SY2JpQXFJRUIwZVhCbElFOXdkR2x2Ym5OY2JpQXFMMXh1Wlhod2IzSjBJSFI1Y0dVZ1QzQjBhVzl1Y3lBOUlIdGJibUZ0WlRvZ2MzUnlhVzVuWFRvZ1lXNTVmVHRjYmx4dUx5b3FYRzRnS2lCRVpXNXZkR1Z6SUdOMWMzUnZiU0JrYVhOMFlXNWpaU0J0WlhSeWFXTWdZbVYwZDJWbGJpQjBhR1VnZEhkdklHZHBkbVZ1SUhabFkzUnZjbk11WEc0Z0tseHVJQ29nUUdWNGNHOXlkRnh1SUNvZ1FIUjVjR1VnUkdsemRHRnVZMlZOWlhSeWFXTmNiaUFxSUVCd1lYSmhiU0I3WVc1NWZTQjJNU0JVYUdVZ1ptbHljM1FnZG1WamRHOXlMbHh1SUNvZ1FIQmhjbUZ0SUh0aGJubDlJSFl5SUZSb1pTQnpaV052Ym1RZ2RtVmpkRzl5TGx4dUlDb2dRSEpsZEhWeWJpQjdiblZ0WW1WeWZTQkVhWE4wWVc1alpTQmlaWFIzWldWdUlIUm9aWE5sSUhSM2J5QjJaV04wYjNKekxseHVJQ292WEc1bGVIQnZjblFnZEhsd1pTQkVhWE4wWVc1alpVMWxkSEpwWXlBOUlDaDJNVG9nWVc1NUxDQjJNam9nWVc1NUtTQTlQaUFvYm5WdFltVnlLVHRjYmx4dUx5b3FYRzRnS2lCRVpXNXZkR1Z6SUdFZ2MybHRjR3hsSUhOMGNtbHVaeUIwYnlCemRISnBibWNnWkdsamRHbHZibUZ5ZVM1Y2JpQXFYRzRnS2lCQVpYaHdiM0owWEc0Z0tpQkFkSGx3WlNCVGRISnBibWRFYVdOMGFXOXVZWEo1WEc0Z0tpOWNibVY0Y0c5eWRDQjBlWEJsSUZOMGNtbHVaMFJwWTNScGIyNWhjbmtnUFNCN1cydGxlVG9nYzNSeWFXNW5YVG9nYzNSeWFXNW5mVHRjYmx4dVhHNWxlSEJ2Y25RZ2RIbHdaU0JEYjJ4MWJXNUpibkIxZEU5d2RHbHZibk1nUFNCN1hHNGdJQ0FnWm1sc2RHVnlQem9nS0dOdmJEb2dSRWN1UTI5c2RXMXVLU0E5UGlCaWIyOXNaV0Z1SUh3Z2JuVnNiRHRjYm4wN1hHNGlYWDA9IiwiaW1wb3J0ICogYXMgZ3JvayBmcm9tICdkYXRhZ3Jvay1hcGkvZ3Jvayc7XG5pbXBvcnQgKiBhcyB1aSBmcm9tICdkYXRhZ3Jvay1hcGkvdWknO1xuaW1wb3J0ICogYXMgREcgZnJvbSAnZGF0YWdyb2stYXBpL2RnJztcbmltcG9ydCB7IEJZUEFTU19MQVJHRV9EQVRBX1dBUk5JTkcsIFNIT1dfU0NBVFRFUlBMT1RfUFJPR1JFU1MgfSBmcm9tICcuLi9mdW5jdGlvbkVkaXRvcnMvY29uc3RzJztcbmltcG9ydCB7IGdldERic2NhbldvcmtlciB9IGZyb20gJ0BkYXRhZ3Jvay1saWJyYXJpZXMvbWF0aCc7XG5pbXBvcnQgeyBESU1FTlNJT05BTElUWV9SRURVQ0VSX1RFUk1JTkFURV9FVkVOVCB9IGZyb20gJy4vY29uc3RzJztcbmltcG9ydCB7IGdldE5vcm1hbGl6ZWRFbWJlZGRpbmdzIH0gZnJvbSAnLi9lbWJlZGRpbmdzLXNwYWNlJztcbmV4cG9ydCBmdW5jdGlvbiBnZXRFbWJlZGRpbmdDb2xzTmFtZXMoZGYpIHtcbiAgICBjb25zdCBheGVzID0gWydFbWJlZF9YJywgJ0VtYmVkX1knXTtcbiAgICBjb25zdCBjb2xOYW1lSW5kID0gZGYuY29sdW1ucy5uYW1lcygpLmZpbHRlcigoaXQpID0+IGl0LmluY2x1ZGVzKGF4ZXNbMF0pKS5sZW5ndGggKyAxO1xuICAgIHJldHVybiBheGVzLm1hcCgoaXQpID0+IGAke2l0fV8ke2NvbE5hbWVJbmR9YCk7XG59XG5leHBvcnQgZnVuY3Rpb24gZ2V0RW1iZWRkaW5nVmlld2VyTmFtZShjb2x1bW5zLCBtZXRob2QpIHtcbiAgICBjb25zdCBjb2xOYW1lcyA9IGNvbHVtbnMubGVuZ3RoID4gNCA/IGAke2NvbHVtbnMubGVuZ3RofSBjb2x1bW5zYCA6IGNvbHVtbnMubWFwKChpdCkgPT4gaXQubmFtZSkuam9pbignLCAnKTtcbiAgICByZXR1cm4gYCR7bWV0aG9kfSAoJHtjb2xOYW1lc30pYDtcbn1cbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBtdWx0aUNvbFJlZHVjZURpbWVuc2lvbmFsaXR5KHRhYmxlLCBjb2x1bW5zLCBtZXRob2QsIG1ldHJpY3MsIHdlaWdodHMsIHByZXByb2Nlc3NpbmdGdW5jdGlvbnMsIGFnZ3JlZ2F0aW9uTWV0aG9kLCBwbG90RW1iZWRkaW5ncyA9IHRydWUsIGNsdXN0ZXJFbWJlZGRpbmdzID0gZmFsc2UsIGRpbVJlZE9wdGlvbnMgPSB7IHByZXByb2Nlc3NpbmdGdW5jQXJnczogW10gfSwgdWlPcHRpb25zID0ge30sIHBvc3RQcm9jZXNzaW5nRnVuYyA9IG51bGwsIHBvc3RQcm9jRnVuY0FyZ3MgPSB7fSkge1xuICAgIGNvbnN0IHNjYXR0ZXJQbG90UHJvcHMgPSB7XG4gICAgICAgIHNob3dYQXhpczogZmFsc2UsXG4gICAgICAgIHNob3dZQXhpczogZmFsc2UsXG4gICAgICAgIHNob3dYU2VsZWN0b3I6IGZhbHNlLFxuICAgICAgICBzaG93WVNlbGVjdG9yOiBmYWxzZSxcbiAgICB9O1xuICAgIGlmIChjb2x1bW5zLmxlbmd0aCAhPT0gbWV0cmljcy5sZW5ndGggfHwgY29sdW1ucy5sZW5ndGggIT09IHByZXByb2Nlc3NpbmdGdW5jdGlvbnMubGVuZ3RoIHx8XG4gICAgICAgIGNvbHVtbnMubGVuZ3RoICE9PSB3ZWlnaHRzLmxlbmd0aCB8fCBjb2x1bW5zLmxlbmd0aCAhPT0gZGltUmVkT3B0aW9ucy5wcmVwcm9jZXNzaW5nRnVuY0FyZ3MubGVuZ3RoKSB7XG4gICAgICAgIHRocm93IG5ldyBFcnJvcignY29sdW1ucywgbWV0cmljcyBhbmQgcHJlcHJvY2Vzc2luZyBmdW5jdGlvbnMsIHdlaWdodHMgYW5kIGZ1bmN0aW9uIGFyZ3VtZW50cycgK1xuICAgICAgICAgICAgJ211c3QgaGF2ZSB0aGUgc2FtZSBsZW5ndGgnKTtcbiAgICB9XG4gICAgY29uc3QgdHYgPSBwbG90RW1iZWRkaW5ncyA/IGdyb2suc2hlbGwudGFibGVWaWV3KHRhYmxlLm5hbWUpID8/IGdyb2suc2hlbGwuYWRkVGFibGVWaWV3KHRhYmxlKSA6IG51bGw7XG4gICAgY29uc3QgZG9SZWR1Y2UgPSBhc3luYyAoKSA9PiB7XG4gICAgICAgIGNvbnN0IHBnID0gREcuVGFza0JhclByb2dyZXNzSW5kaWNhdG9yLmNyZWF0ZShgSW5pdGlhbGl6aW5nICR7dWlPcHRpb25zLnNjYXR0ZXJQbG90TmFtZSA/PyAnZGltZW5zaW9uYWxpdHkgcmVkdWN0aW9uJ30gLi4uYCk7XG4gICAgICAgIGxldCBzY2F0dGVyUGxvdCA9IHVuZGVmaW5lZDtcbiAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgIGNvbnN0IGVtYmVkQ29sc05hbWVzID0gZ2V0RW1iZWRkaW5nQ29sc05hbWVzKHRhYmxlKTtcbiAgICAgICAgICAgIGZ1bmN0aW9uIHByb2dyZXNzRnVuYyhfbkVwb2NoLCBlcG9jaHNMZW5ndGgsIGVtYmVkZGluZ3MpIHtcbiAgICAgICAgICAgICAgICBsZXQgZW1iZWRYQ29sID0gbnVsbDtcbiAgICAgICAgICAgICAgICBsZXQgZW1iZWRZQ29sID0gbnVsbDtcbiAgICAgICAgICAgICAgICBpZiAoIXRhYmxlLmNvbHVtbnMubmFtZXMoKS5pbmNsdWRlcyhlbWJlZENvbHNOYW1lc1swXSkpIHtcbiAgICAgICAgICAgICAgICAgICAgZW1iZWRYQ29sID0gdGFibGUuY29sdW1ucy5hZGQoREcuQ29sdW1uLmZsb2F0KGVtYmVkQ29sc05hbWVzWzBdLCB0YWJsZS5yb3dDb3VudCkpO1xuICAgICAgICAgICAgICAgICAgICBlbWJlZFlDb2wgPSB0YWJsZS5jb2x1bW5zLmFkZChERy5Db2x1bW4uZmxvYXQoZW1iZWRDb2xzTmFtZXNbMV0sIHRhYmxlLnJvd0NvdW50KSk7XG4gICAgICAgICAgICAgICAgICAgIGlmIChwbG90RW1iZWRkaW5ncyAmJiAhc2NhdHRlclBsb3QpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHNjYXR0ZXJQbG90ID0gdHZcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAuc2NhdHRlclBsb3QoeyAuLi5zY2F0dGVyUGxvdFByb3BzLCB4OiBlbWJlZENvbHNOYW1lc1swXSwgeTogZW1iZWRDb2xzTmFtZXNbMV0sXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGl0bGU6IHVpT3B0aW9ucy5zY2F0dGVyUGxvdE5hbWUgPz8gZ2V0RW1iZWRkaW5nVmlld2VyTmFtZShjb2x1bW5zLCBtZXRob2QpIH0pO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICBlbWJlZFhDb2wgPSB0YWJsZS5jb2x1bW5zLmJ5TmFtZShlbWJlZENvbHNOYW1lc1swXSk7XG4gICAgICAgICAgICAgICAgICAgIGVtYmVkWUNvbCA9IHRhYmxlLmNvbHVtbnMuYnlOYW1lKGVtYmVkQ29sc05hbWVzWzFdKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKHVpT3B0aW9uc1tTSE9XX1NDQVRURVJQTE9UX1BST0dSRVNTXSkge1xuICAgICAgICAgICAgICAgICAgICBzY2F0dGVyUGxvdD8ucm9vdCAmJiB1aS5zZXRVcGRhdGVJbmRpY2F0b3Ioc2NhdHRlclBsb3Qucm9vdCwgZmFsc2UpO1xuICAgICAgICAgICAgICAgICAgICBlbWJlZFhDb2wuaW5pdCgoaSkgPT4gZW1iZWRkaW5nc1swXSA/IGVtYmVkZGluZ3NbMF1baV0gOiB1bmRlZmluZWQpO1xuICAgICAgICAgICAgICAgICAgICBlbWJlZFlDb2wuaW5pdCgoaSkgPT4gZW1iZWRkaW5nc1sxXSA/IGVtYmVkZGluZ3NbMV1baV0gOiB1bmRlZmluZWQpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjb25zdCBwcm9ncmVzcyA9IChfbkVwb2NoIC8gZXBvY2hzTGVuZ3RoICogMTAwKTtcbiAgICAgICAgICAgICAgICBwZy51cGRhdGUocHJvZ3Jlc3MsIGBSdW5uaW5nICR7dWlPcHRpb25zLnNjYXR0ZXJQbG90TmFtZSA/PyAnZGltZW5zaW9uYWxpdHkgcmVkdWN0aW9uJ30uLi4gJHtwcm9ncmVzcy50b0ZpeGVkKDApfSVgKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGFzeW5jIGZ1bmN0aW9uIGdldERpbVJlZCgpIHtcbiAgICAgICAgICAgICAgICB0YWJsZS5jb2x1bW5zLmFkZChERy5Db2x1bW4uZmxvYXQoZW1iZWRDb2xzTmFtZXNbMF0sIHRhYmxlLnJvd0NvdW50KSk7XG4gICAgICAgICAgICAgICAgdGFibGUuY29sdW1ucy5hZGQoREcuQ29sdW1uLmZsb2F0KGVtYmVkQ29sc05hbWVzWzFdLCB0YWJsZS5yb3dDb3VudCkpO1xuICAgICAgICAgICAgICAgIGxldCByZXNvbHZlRiA9IG51bGw7XG4gICAgICAgICAgICAgICAgaWYgKHBsb3RFbWJlZGRpbmdzKSB7XG4gICAgICAgICAgICAgICAgICAgIHNjYXR0ZXJQbG90ID0gdHZcbiAgICAgICAgICAgICAgICAgICAgICAgIC5zY2F0dGVyUGxvdCh7IC4uLnNjYXR0ZXJQbG90UHJvcHMsIHg6IGVtYmVkQ29sc05hbWVzWzBdLCB5OiBlbWJlZENvbHNOYW1lc1sxXSxcbiAgICAgICAgICAgICAgICAgICAgICAgIHRpdGxlOiB1aU9wdGlvbnMuc2NhdHRlclBsb3ROYW1lID8/IGdldEVtYmVkZGluZ1ZpZXdlck5hbWUoY29sdW1ucywgbWV0aG9kKSB9KTtcbiAgICAgICAgICAgICAgICAgICAgdWkuc2V0VXBkYXRlSW5kaWNhdG9yKHNjYXR0ZXJQbG90LnJvb3QsIHRydWUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBjb25zdCBzdWIgPSBncm9rLmV2ZW50cy5vblZpZXdlckNsb3NlZC5zdWJzY3JpYmUoKGFyZ3MpID0+IHtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgdiA9IGFyZ3MuYXJncy52aWV3ZXI7XG4gICAgICAgICAgICAgICAgICAgIGlmICh2Py5nZXRPcHRpb25zKCk/Lmxvb2s/LnRpdGxlICYmIHNjYXR0ZXJQbG90Py5nZXRPcHRpb25zKCk/Lmxvb2s/LnRpdGxlICYmXG4gICAgICAgICAgICAgICAgICAgICAgICB2Py5nZXRPcHRpb25zKCk/Lmxvb2s/LnRpdGxlID09PSBzY2F0dGVyUGxvdD8uZ2V0T3B0aW9ucygpPy5sb29rPy50aXRsZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgZ3Jvay5ldmVudHMuZmlyZUN1c3RvbUV2ZW50KERJTUVOU0lPTkFMSVRZX1JFRFVDRVJfVEVSTUlOQVRFX0VWRU5ULCB7fSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBzdWIudW5zdWJzY3JpYmUoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmVGPy4oKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHBnLmNsb3NlKCk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICB9KTtcbiAgICAgICAgICAgICAgICBjb25zdCBkaW1SZWRSZXNQcm9taXNlID0gbmV3IFByb21pc2UoYXN5bmMgKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVzb2x2ZUYgPSByZXNvbHZlO1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZW5jb2RlZENvbEVudHJpZXMgPSBbXTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcHJlcHJvY2Vzc2luZ0Z1bmN0aW9ucy5sZW5ndGg7ICsraSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IHBmID0gcHJlcHJvY2Vzc2luZ0Z1bmN0aW9uc1tpXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoIWRpbVJlZE9wdGlvbnMuZGlzdGFuY2VGbkFyZ3MpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpbVJlZE9wdGlvbnMuZGlzdGFuY2VGbkFyZ3MgPSBbXTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAocGYpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY29sSW5wdXROYW1lID0gcGYuaW5wdXRzWzBdLm5hbWU7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IG1ldHJpY0lucHV0TmFtZSA9IHBmLmlucHV0c1sxXS5uYW1lO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCB7IGVudHJpZXMsIG9wdGlvbnMgfSA9IGF3YWl0IHBmLmFwcGx5KHsgW2NvbElucHV0TmFtZV06IGNvbHVtbnNbaV0sIFttZXRyaWNJbnB1dE5hbWVdOiBtZXRyaWNzW2ldLFxuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLi4uKGRpbVJlZE9wdGlvbnMucHJlcHJvY2Vzc2luZ0Z1bmNBcmdzW2ldID8/IHt9KSB9KTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZW5jb2RlZENvbEVudHJpZXMucHVzaCh7IGVudHJpZXMsIG9wdGlvbnMgfSk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpbVJlZE9wdGlvbnMuZGlzdGFuY2VGbkFyZ3MucHVzaChvcHRpb25zKTtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGVudHJpZXMgPSBjb2x1bW5zW2ldLnRvTGlzdCgpO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBvcHRpb25zID0ge307XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGVuY29kZWRDb2xFbnRyaWVzLnB1c2goeyBlbnRyaWVzLCBvcHRpb25zIH0pO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBkaW1SZWRPcHRpb25zLmRpc3RhbmNlRm5BcmdzLnB1c2gob3B0aW9ucyk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgcmVzID0gYXdhaXQgZ2V0Tm9ybWFsaXplZEVtYmVkZGluZ3MoZW5jb2RlZENvbEVudHJpZXMubWFwKChpdCkgPT4gaXQuZW50cmllcyksIG1ldGhvZCwgbWV0cmljcywgd2VpZ2h0cywgYWdncmVnYXRpb25NZXRob2QsIGRpbVJlZE9wdGlvbnMsIHVpT3B0aW9uc1tCWVBBU1NfTEFSR0VfREFUQV9XQVJOSU5HXSA/IHVuZGVmaW5lZCA6IHByb2dyZXNzRnVuYyk7XG4gICAgICAgICAgICAgICAgICAgICAgICByZXNvbHZlKHJlcyk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlamVjdChlKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIH0pO1xuICAgICAgICAgICAgICAgIGNvbnN0IHJlcyA9IGF3YWl0IGRpbVJlZFJlc1Byb21pc2U7XG4gICAgICAgICAgICAgICAgcGcuY2xvc2UoKTtcbiAgICAgICAgICAgICAgICBzdWIudW5zdWJzY3JpYmUoKTtcbiAgICAgICAgICAgICAgICByZXR1cm4gcmVzO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY29uc3QgcmVzID0gYXdhaXQgZ2V0RGltUmVkKCk7XG4gICAgICAgICAgICBpZiAoY2x1c3RlckVtYmVkZGluZ3MgJiYgcmVzKSB7XG4gICAgICAgICAgICAgICAgY29uc3QgY2x1c3RlclBnID0gREcuVGFza0JhclByb2dyZXNzSW5kaWNhdG9yLmNyZWF0ZShgQ2x1c3RlcmluZyBlbWJlZGRpbmdzIC4uLmApO1xuICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGNsdXN0ZXJSZXMgPSBhd2FpdCBnZXREYnNjYW5Xb3JrZXIocmVzWzBdLCByZXNbMV0sIGRpbVJlZE9wdGlvbnMuZGJTY2FuRXBzaWxvbiA/PyAwLjAxLCBkaW1SZWRPcHRpb25zLmRiU2Nhbk1pblB0cyA/PyA0KTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgY2x1c3RlckNvbE5hbWUgPSB0YWJsZS5jb2x1bW5zLmdldFVudXNlZE5hbWUoJ0NsdXN0ZXIgKERCU0NBTiknKTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgY2x1c3RlckNvbCA9IHRhYmxlLmNvbHVtbnMuYWRkTmV3U3RyaW5nKGNsdXN0ZXJDb2xOYW1lKTtcbiAgICAgICAgICAgICAgICAgICAgY2x1c3RlckNvbC5pbml0KChpKSA9PiBjbHVzdGVyUmVzW2ldLnRvU3RyaW5nKCkpO1xuICAgICAgICAgICAgICAgICAgICBpZiAoc2NhdHRlclBsb3QpXG4gICAgICAgICAgICAgICAgICAgICAgICBzY2F0dGVyUGxvdC5wcm9wcy5jb2xvckNvbHVtbk5hbWUgPSBjbHVzdGVyQ29sTmFtZTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICAgICAgZ3Jvay5zaGVsbC5lcnJvcignQ2x1c3RlcmluZyBlbWJlZGRpbmdzIGZhaWxlZCcpO1xuICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKGUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICBmaW5hbGx5IHtcbiAgICAgICAgICAgICAgICAgICAgY2x1c3RlclBnLmNsb3NlKCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKHJlcykge1xuICAgICAgICAgICAgICAgIGNvbnN0IGVtYmVkWENvbCA9IHRhYmxlLmNvbHVtbnMuYnlOYW1lKGVtYmVkQ29sc05hbWVzWzBdKTtcbiAgICAgICAgICAgICAgICBjb25zdCBlbWJlZFlDb2wgPSB0YWJsZS5jb2x1bW5zLmJ5TmFtZShlbWJlZENvbHNOYW1lc1sxXSk7XG4gICAgICAgICAgICAgICAgZW1iZWRYQ29sLmluaXQoKGkpID0+IHJlc1swXVtpXSk7XG4gICAgICAgICAgICAgICAgZW1iZWRZQ29sLmluaXQoKGkpID0+IHJlc1sxXVtpXSk7XG4gICAgICAgICAgICAgICAgaWYgKHBvc3RQcm9jZXNzaW5nRnVuYykge1xuICAgICAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY29sMUlucHV0TmFtZSA9IHBvc3RQcm9jZXNzaW5nRnVuYy5pbnB1dHNbMF0ubmFtZTtcbiAgICAgICAgICAgICAgICAgICAgICAgIGNvbnN0IGNvbDJJbnB1dE5hbWUgPSBwb3N0UHJvY2Vzc2luZ0Z1bmMuaW5wdXRzWzFdLm5hbWU7XG4gICAgICAgICAgICAgICAgICAgICAgICBhd2FpdCBwb3N0UHJvY2Vzc2luZ0Z1bmNcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAucHJlcGFyZSh7IFtjb2wxSW5wdXROYW1lXTogZW1iZWRYQ29sLCBbY29sMklucHV0TmFtZV06IGVtYmVkWUNvbCwgLi4ucG9zdFByb2NGdW5jQXJncyB9KVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIC5jYWxsKHRydWUpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGNhdGNoIChlKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBncm9rLnNoZWxsLmVycm9yKCdQb3N0LXByb2Nlc3NpbmcgZmFpbGVkJyk7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKGUpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGlmIChzY2F0dGVyUGxvdCkge1xuICAgICAgICAgICAgICAgICAgICB1aS5zZXRVcGRhdGVJbmRpY2F0b3Ioc2NhdHRlclBsb3Qucm9vdCwgZmFsc2UpO1xuICAgICAgICAgICAgICAgICAgICBzY2F0dGVyUGxvdC5oZWxwVXJsID0gJy9oZWxwL2NvbXB1dGUvc2VxdWVuY2Utc3BhY2UnO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gc2NhdHRlclBsb3Q7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGNhdGNoIChlKSB7XG4gICAgICAgICAgICBncm9rLnNoZWxsLmVycm9yKCdEaW1lbnNpb25hbGl0eSByZWR1Y3Rpb24gZmFpbGVkJyk7XG4gICAgICAgICAgICBjb25zb2xlLmVycm9yKGUpO1xuICAgICAgICAgICAgcGcuY2xvc2UoKTtcbiAgICAgICAgICAgIGlmIChzY2F0dGVyUGxvdClcbiAgICAgICAgICAgICAgICB1aS5zZXRVcGRhdGVJbmRpY2F0b3Ioc2NhdHRlclBsb3Qucm9vdCwgZmFsc2UpO1xuICAgICAgICB9XG4gICAgfTtcbiAgICByZXR1cm4gbmV3IFByb21pc2UoYXN5bmMgKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgaWYgKHVpT3B0aW9ucy5mYXN0Um93Q291bnQgJiYgdGFibGUucm93Q291bnQgPiB1aU9wdGlvbnMuZmFzdFJvd0NvdW50ICYmICF1aU9wdGlvbnNbQllQQVNTX0xBUkdFX0RBVEFfV0FSTklOR10pIHtcbiAgICAgICAgICAgICAgICB1aS5kaWFsb2coKVxuICAgICAgICAgICAgICAgICAgICAuYWRkKHVpLmRpdlRleHQoJ0FuYWx5c2lzIG1pZ2h0IHRha2Ugc2V2ZXJhbCBtaW51dGVzLiBEbyB5b3Ugd2FudCB0byBjb250aW51ZT8nKSlcbiAgICAgICAgICAgICAgICAgICAgLm9uT0soYXN5bmMgKCkgPT4ge1xuICAgICAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgcmVzID0gYXdhaXQgZG9SZWR1Y2UoKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHJlc29sdmUocmVzKTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBjYXRjaCAoZSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgcmVqZWN0KGUpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgfSlcbiAgICAgICAgICAgICAgICAgICAgLm9uQ2FuY2VsKCgpID0+IHJlc29sdmUodW5kZWZpbmVkKSlcbiAgICAgICAgICAgICAgICAgICAgLnNob3coKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgIGNvbnN0IHJlcyA9IGF3YWl0IGRvUmVkdWNlKCk7XG4gICAgICAgICAgICAgICAgcmVzb2x2ZShyZXMpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIGNhdGNoIChlKSB7XG4gICAgICAgICAgICByZWplY3QoZSk7XG4gICAgICAgIH1cbiAgICB9KTtcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWRhdGE6YXBwbGljYXRpb24vanNvbjtiYXNlNjQsZXlKMlpYSnphVzl1SWpvekxDSm1hV3hsSWpvaWNtVmtkV05sTFdScGJXVnVjMmx2Ym1Gc2FYUjVMbXB6SWl3aWMyOTFjbU5sVW05dmRDSTZJaUlzSW5OdmRYSmpaWE1pT2xzaWNtVmtkV05sTFdScGJXVnVjMmx2Ym1Gc2FYUjVMblJ6SWwwc0ltNWhiV1Z6SWpwYlhTd2liV0Z3Y0dsdVozTWlPaUpCUVVGQkxFOUJRVThzUzBGQlN5eEpRVUZKTEUxQlFVMHNiVUpCUVcxQ0xFTkJRVU03UVVGRE1VTXNUMEZCVHl4TFFVRkxMRVZCUVVVc1RVRkJUU3hwUWtGQmFVSXNRMEZCUXp0QlFVTjBReXhQUVVGUExFdEJRVXNzUlVGQlJTeE5RVUZOTEdsQ1FVRnBRaXhEUVVGRE8wRkJSWFJETEU5QlFVOHNSVUZCUXl4NVFrRkJlVUlzUlVGQlJTeDVRa0ZCZVVJc1JVRkJReXhOUVVGTkxESkNRVUV5UWl4RFFVRkRPMEZCUlM5R0xFOUJRVThzUlVGQmFVSXNaVUZCWlN4RlFVRkRMRTFCUVUwc01FSkJRVEJDTEVOQlFVTTdRVUZEZWtVc1QwRkJUeXhGUVVGRExITkRRVUZ6UXl4RlFVRkRMRTFCUVUwc1ZVRkJWU3hEUVVGRE8wRkJSV2hGTEU5QlFVOHNSVUZCUXl4MVFrRkJkVUlzUlVGQlF5eE5RVUZOTEc5Q1FVRnZRaXhEUVVGRE8wRkJXVE5FTEUxQlFVMHNWVUZCVlN4eFFrRkJjVUlzUTBGQlF5eEZRVUZuUWp0SlFVTndSQ3hOUVVGTkxFbEJRVWtzUjBGQlJ5eERRVUZETEZOQlFWTXNSVUZCUlN4VFFVRlRMRU5CUVVNc1EwRkJRenRKUVVOd1F5eE5RVUZOTEZWQlFWVXNSMEZCUnl4RlFVRkZMRU5CUVVNc1QwRkJUeXhEUVVGRExFdEJRVXNzUlVGQlJTeERRVUZETEUxQlFVMHNRMEZCUXl4RFFVRkRMRVZCUVZVc1JVRkJSU3hGUVVGRkxFTkJRVU1zUlVGQlJTeERRVUZETEZGQlFWRXNRMEZCUXl4SlFVRkpMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETEUxQlFVMHNSMEZCUnl4RFFVRkRMRU5CUVVNN1NVRkRPVVlzVDBGQlR5eEpRVUZKTEVOQlFVTXNSMEZCUnl4RFFVRkRMRU5CUVVNc1JVRkJSU3hGUVVGRkxFVkJRVVVzUTBGQlF5eEhRVUZITEVWQlFVVXNTVUZCU1N4VlFVRlZMRVZCUVVVc1EwRkJReXhEUVVGRE8wRkJRMnBFTEVOQlFVTTdRVUZGUkN4TlFVRk5MRlZCUVZVc2MwSkJRWE5DTEVOQlFVTXNUMEZCYjBJc1JVRkJSU3hOUVVFeVFqdEpRVU4wUml4TlFVRk5MRkZCUVZFc1IwRkJSeXhQUVVGUExFTkJRVU1zVFVGQlRTeEhRVUZITEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNc1IwRkJSeXhQUVVGUExFTkJRVU1zVFVGQlRTeFZRVUZWTEVOQlFVTXNRMEZCUXl4RFFVRkRMRTlCUVU4c1EwRkJReXhIUVVGSExFTkJRVU1zUTBGQlF5eEZRVUZGTEVWQlFVVXNSVUZCUlN4RFFVRkRMRVZCUVVVc1EwRkJReXhKUVVGSkxFTkJRVU1zUTBGQlF5eEpRVUZKTEVOQlFVTXNTVUZCU1N4RFFVRkRMRU5CUVVNN1NVRkROVWNzVDBGQlR5eEhRVUZITEUxQlFVMHNTMEZCU3l4UlFVRlJMRWRCUVVjc1EwRkJRenRCUVVOdVF5eERRVUZETzBGQlJVUXNUVUZCVFN4RFFVRkRMRXRCUVVzc1ZVRkJWU3cwUWtGQk5FSXNRMEZCUXl4TFFVRnRRaXhGUVVGRkxFOUJRVzlDTEVWQlF6RkdMRTFCUVRKQ0xFVkJRVVVzVDBGQmRVSXNSVUZCUlN4UFFVRnBRaXhGUVVOMlJTeHpRa0ZCYzBRc1JVRkRkRVFzYVVKQlFUUkRMRVZCUVVVc2FVSkJRVEJDTEVsQlFVa3NSVUZCUlN4dlFrRkJOa0lzUzBGQlN5eEZRVU5vU0N4blFrRkRXU3hGUVVGRExIRkNRVUZ4UWl4RlFVRkZMRVZCUVVVc1JVRkJReXhGUVVOMlF5eFpRVUUyUWl4RlFVRkZMRVZCUVVVc2NVSkJRWEZETEVsQlFVa3NSVUZCUlN4dFFrRkJORUlzUlVGQlJUdEpRVU14Unl4TlFVRk5MR2RDUVVGblFpeEhRVUZITzFGQlEzWkNMRk5CUVZNc1JVRkJSU3hMUVVGTE8xRkJRMmhDTEZOQlFWTXNSVUZCUlN4TFFVRkxPMUZCUTJoQ0xHRkJRV0VzUlVGQlJTeExRVUZMTzFGQlEzQkNMR0ZCUVdFc1JVRkJSU3hMUVVGTE8wdEJRM0pDTEVOQlFVTTdTVUZEUml4SlFVRkpMRTlCUVU4c1EwRkJReXhOUVVGTkxFdEJRVXNzVDBGQlR5eERRVUZETEUxQlFVMHNTVUZCU1N4UFFVRlBMRU5CUVVNc1RVRkJUU3hMUVVGTExITkNRVUZ6UWl4RFFVRkRMRTFCUVUwN1VVRkRia1lzVDBGQlR5eERRVUZETEUxQlFVMHNTMEZCU3l4UFFVRlBMRU5CUVVNc1RVRkJUU3hKUVVGSkxFOUJRVThzUTBGQlF5eE5RVUZOTEV0QlFVc3NZVUZCWVN4RFFVRkRMSEZDUVVGeFFpeERRVUZETEUxQlFVMHNSVUZCUlR0UlFVTjRSeXhOUVVGTkxFbEJRVWtzUzBGQlN5eERRVUZETERoRlFVRTRSVHRaUVVNMVJpd3lRa0ZCTWtJc1EwRkJReXhEUVVGRE8wdEJRMmhETzBsQlJVUXNUVUZCVFN4RlFVRkZMRWRCUVVjc1kwRkJZeXhEUVVGRExFTkJRVU1zUTBGQlF5eEpRVUZKTEVOQlFVTXNTMEZCU3l4RFFVRkRMRk5CUVZNc1EwRkJReXhMUVVGTExFTkJRVU1zU1VGQlNTeERRVUZETEVsQlFVa3NTVUZCU1N4RFFVRkRMRXRCUVVzc1EwRkJReXhaUVVGWkxFTkJRVU1zUzBGQlN5eERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRMRWxCUVVrc1EwRkJRenRKUVVWMFJ5eE5RVUZOTEZGQlFWRXNSMEZCUnl4TFFVRkxMRWxCUVVrc1JVRkJSVHRSUVVNeFFpeE5RVUZOTEVWQlFVVXNSMEZCUnl4RlFVRkZMRU5CUVVNc2QwSkJRWGRDTEVOQlFVTXNUVUZCVFN4RFFVTXpReXhuUWtGQlowSXNVMEZCVXl4RFFVRkRMR1ZCUVdVc1NVRkJTU3d3UWtGQk1FSXNUVUZCVFN4RFFVRkRMRU5CUVVNN1VVRkRha1lzU1VGQlNTeFhRVUZYTEVkQlFYRkRMRk5CUVZNc1EwRkJRenRSUVVNNVJDeEpRVUZKTzFsQlEwWXNUVUZCVFN4alFVRmpMRWRCUVVjc2NVSkJRWEZDTEVOQlFVTXNTMEZCU3l4RFFVRkRMRU5CUVVNN1dVRkRjRVFzVTBGQlV5eFpRVUZaTEVOQlFVTXNUMEZCWlN4RlFVRkZMRmxCUVc5Q0xFVkJRVVVzVlVGQmMwSTdaMEpCUTJwR0xFbEJRVWtzVTBGQlV5eEhRVUZ4UWl4SlFVRkpMRU5CUVVNN1owSkJRM1pETEVsQlFVa3NVMEZCVXl4SFFVRnhRaXhKUVVGSkxFTkJRVU03WjBKQlEzWkRMRWxCUVVrc1EwRkJReXhMUVVGTExFTkJRVU1zVDBGQlR5eERRVUZETEV0QlFVc3NSVUZCUlN4RFFVRkRMRkZCUVZFc1EwRkJReXhqUVVGakxFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTXNSVUZCUlR0dlFrRkRkRVFzVTBGQlV5eEhRVUZITEV0QlFVc3NRMEZCUXl4UFFVRlBMRU5CUVVNc1IwRkJSeXhEUVVGRExFVkJRVVVzUTBGQlF5eE5RVUZOTEVOQlFVTXNTMEZCU3l4RFFVRkRMR05CUVdNc1EwRkJReXhEUVVGRExFTkJRVU1zUlVGQlJTeExRVUZMTEVOQlFVTXNVVUZCVVN4RFFVRkRMRU5CUVVNc1EwRkJRenR2UWtGRGJFWXNVMEZCVXl4SFFVRkhMRXRCUVVzc1EwRkJReXhQUVVGUExFTkJRVU1zUjBGQlJ5eERRVUZETEVWQlFVVXNRMEZCUXl4TlFVRk5MRU5CUVVNc1MwRkJTeXhEUVVGRExHTkJRV01zUTBGQlF5eERRVUZETEVOQlFVTXNSVUZCUlN4TFFVRkxMRU5CUVVNc1VVRkJVU3hEUVVGRExFTkJRVU1zUTBGQlF6dHZRa0ZEYkVZc1NVRkJTU3hqUVVGakxFbEJRVWtzUTBGQlF5eFhRVUZYTEVWQlFVVTdkMEpCUTJ4RExGZEJRVmNzUjBGQlJ5eEZRVUZIT3paQ1FVTmtMRmRCUVZjc1EwRkJReXhGUVVGRExFZEJRVWNzWjBKQlFXZENMRVZCUVVVc1EwRkJReXhGUVVGRkxHTkJRV01zUTBGQlF5eERRVUZETEVOQlFVTXNSVUZCUlN4RFFVRkRMRVZCUVVVc1kwRkJZeXhEUVVGRExFTkJRVU1zUTBGQlF6czBRa0ZETTBVc1MwRkJTeXhGUVVGRkxGTkJRVk1zUTBGQlF5eGxRVUZsTEVsQlFVa3NjMEpCUVhOQ0xFTkJRVU1zVDBGQlR5eEZRVUZGTEUxQlFVMHNRMEZCUXl4RlFVRkRMRU5CUVVNc1EwRkJRenR4UWtGRGJrWTdhVUpCUTBZN2NVSkJRVTA3YjBKQlEwd3NVMEZCVXl4SFFVRkhMRXRCUVVzc1EwRkJReXhQUVVGUExFTkJRVU1zVFVGQlRTeERRVUZETEdOQlFXTXNRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRE8yOUNRVU53UkN4VFFVRlRMRWRCUVVjc1MwRkJTeXhEUVVGRExFOUJRVThzUTBGQlF5eE5RVUZOTEVOQlFVTXNZMEZCWXl4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU03YVVKQlEzSkVPMmRDUVVWRUxFbEJRVWtzVTBGQlV5eERRVUZETEhsQ1FVRjVRaXhEUVVGRExFVkJRVVU3YjBKQlEzaERMRmRCUVZjc1JVRkJSU3hKUVVGSkxFbEJRVWtzUlVGQlJTeERRVUZETEd0Q1FVRnJRaXhEUVVGRExGZEJRVmtzUTBGQlF5eEpRVUZKTEVWQlFVVXNTMEZCU3l4RFFVRkRMRU5CUVVNN2IwSkJRM0pGTEZOQlFWTXNRMEZCUXl4SlFVRkpMRU5CUVVNc1EwRkJReXhEUVVGRExFVkJRVVVzUlVGQlJTeERRVUZETEZWQlFWVXNRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU1zVlVGQlZTeERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF5eFRRVUZUTEVOQlFVTXNRMEZCUXp0dlFrRkRjRVVzVTBGQlV5eERRVUZETEVsQlFVa3NRMEZCUXl4RFFVRkRMRU5CUVVNc1JVRkJSU3hGUVVGRkxFTkJRVU1zVlVGQlZTeERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJReXhWUVVGVkxFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRExGTkJRVk1zUTBGQlF5eERRVUZETzJsQ1FVTnlSVHRuUWtGRFJDeE5RVUZOTEZGQlFWRXNSMEZCUnl4RFFVRkRMRTlCUVU4c1IwRkJSeXhaUVVGWkxFZEJRVWNzUjBGQlJ5eERRVUZETEVOQlFVTTdaMEpCUTJoRUxFVkJRVVVzUTBGQlF5eE5RVUZOTEVOQlFVTXNVVUZCVVN4RlFVTm9RaXhYUVVGWExGTkJRVk1zUTBGQlF5eGxRVUZsTEVsQlFVa3NNRUpCUVRCQ0xFOUJRVThzVVVGQlVTeERRVUZETEU5QlFVOHNRMEZCUXl4RFFVRkRMRU5CUVVNc1IwRkJSeXhEUVVGRExFTkJRVU03V1VGRGNrY3NRMEZCUXp0WlFVTkVMRXRCUVVzc1ZVRkJWU3hUUVVGVE8yZENRVU4wUWl4TFFVRkxMRU5CUVVNc1QwRkJUeXhEUVVGRExFZEJRVWNzUTBGQlF5eEZRVUZGTEVOQlFVTXNUVUZCVFN4RFFVRkRMRXRCUVVzc1EwRkJReXhqUVVGakxFTkJRVU1zUTBGQlF5eERRVUZETEVWQlFVVXNTMEZCU3l4RFFVRkRMRkZCUVZFc1EwRkJReXhEUVVGRExFTkJRVU03WjBKQlEzUkZMRXRCUVVzc1EwRkJReXhQUVVGUExFTkJRVU1zUjBGQlJ5eERRVUZETEVWQlFVVXNRMEZCUXl4TlFVRk5MRU5CUVVNc1MwRkJTeXhEUVVGRExHTkJRV01zUTBGQlF5eERRVUZETEVOQlFVTXNSVUZCUlN4TFFVRkxMRU5CUVVNc1VVRkJVU3hEUVVGRExFTkJRVU1zUTBGQlF6dG5Ra0ZEZEVVc1NVRkJTU3hSUVVGUkxFZEJRVzlDTEVsQlFVa3NRMEZCUXp0blFrRkRja01zU1VGQlNTeGpRVUZqTEVWQlFVVTdiMEpCUTJ4Q0xGZEJRVmNzUjBGQlJ5eEZRVUZITzNsQ1FVTmtMRmRCUVZjc1EwRkJReXhGUVVGRExFZEJRVWNzWjBKQlFXZENMRVZCUVVVc1EwRkJReXhGUVVGRkxHTkJRV01zUTBGQlF5eERRVUZETEVOQlFVTXNSVUZCUlN4RFFVRkRMRVZCUVVVc1kwRkJZeXhEUVVGRExFTkJRVU1zUTBGQlF6dDNRa0ZETTBVc1MwRkJTeXhGUVVGRkxGTkJRVk1zUTBGQlF5eGxRVUZsTEVsQlFVa3NjMEpCUVhOQ0xFTkJRVU1zVDBGQlR5eEZRVUZGTEUxQlFVMHNRMEZCUXl4RlFVRkRMRU5CUVVNc1EwRkJRenR2UWtGRGJFWXNSVUZCUlN4RFFVRkRMR3RDUVVGclFpeERRVUZETEZkQlFWY3NRMEZCUXl4SlFVRkpMRVZCUVVVc1NVRkJTU3hEUVVGRExFTkJRVU03YVVKQlF5OURPMmRDUVVWRUxFMUJRVTBzUjBGQlJ5eEhRVUZITEVsQlFVa3NRMEZCUXl4TlFVRk5MRU5CUVVNc1kwRkJZeXhEUVVGRExGTkJRVk1zUTBGQlF5eERRVUZETEVsQlFVa3NSVUZCUlN4RlFVRkZPMjlDUVVONFJDeE5RVUZOTEVOQlFVTXNSMEZCUnl4SlFVRkpMRU5CUVVNc1NVRkJTU3hEUVVGRExFMUJRVzFETEVOQlFVTTdiMEpCUTNoRUxFbEJRVWtzUTBGQlF5eEZRVUZGTEZWQlFWVXNSVUZCUlN4RlFVRkZMRWxCUVVrc1JVRkJSU3hMUVVGTExFbEJRVWtzVjBGQlZ5eEZRVUZGTEZWQlFWVXNSVUZCUlN4RlFVRkZMRWxCUVVrc1JVRkJSU3hMUVVGTE8zZENRVU01UkN4RFFVRkRMRVZCUVVVc1ZVRkJWU3hGUVVGRkxFVkJRVVVzU1VGQlNTeEZRVUZGTEV0QlFVc3NTMEZCU3l4WFFVRlhMRVZCUVVVc1ZVRkJWU3hGUVVGRkxFVkJRVVVzU1VGQlNTeEZRVUZGTEV0QlFVc3NSVUZCUlR0M1FrRkRia1lzU1VGQlNTeERRVUZETEUxQlFVMHNRMEZCUXl4bFFVRmxMRU5CUVVNc2MwTkJRWE5ETEVWQlFVVXNSVUZCUlN4RFFVRkRMRU5CUVVNN2QwSkJRM2hGTEVkQlFVY3NRMEZCUXl4WFFVRlhMRVZCUVVVc1EwRkJRenQzUWtGRGJFSXNVVUZCVVN4RlFVRkZMRVZCUVVVc1EwRkJRenQzUWtGRFlpeEZRVUZGTEVOQlFVTXNTMEZCU3l4RlFVRkZMRU5CUVVNN2NVSkJRMW83WjBKQlEwZ3NRMEZCUXl4RFFVRkRMRU5CUVVNN1owSkJSVWdzVFVGQlRTeG5Ra0ZCWjBJc1IwRkJSeXhKUVVGSkxFOUJRVThzUTBGQmNVSXNTMEZCU3l4RlFVRkZMRTlCUVU4c1JVRkJSU3hOUVVGTkxFVkJRVVVzUlVGQlJUdHZRa0ZEYWtZc1NVRkJTVHQzUWtGRFJpeFJRVUZSTEVkQlFVY3NUMEZCVHl4RFFVRkRPM2RDUVVOdVFpeE5RVUZOTEdsQ1FVRnBRaXhIUVVGdFF5eEZRVUZGTEVOQlFVTTdkMEpCUXpkRUxFdEJRVXNzU1VGQlNTeERRVUZETEVkQlFVY3NRMEZCUXl4RlFVRkZMRU5CUVVNc1IwRkJSeXh6UWtGQmMwSXNRMEZCUXl4TlFVRk5MRVZCUVVVc1JVRkJSU3hEUVVGRExFVkJRVVU3TkVKQlEzUkVMRTFCUVUwc1JVRkJSU3hIUVVGSExITkNRVUZ6UWl4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRE96UkNRVU55UXl4SlFVRkpMRU5CUVVNc1lVRkJZU3hEUVVGRExHTkJRV003WjBOQlF5OUNMR0ZCUVdFc1EwRkJReXhqUVVGakxFZEJRVWNzUlVGQlJTeERRVUZET3pSQ1FVTndReXhKUVVGSkxFVkJRVVVzUlVGQlJUdG5RMEZEVGl4TlFVRk5MRmxCUVZrc1IwRkJSeXhGUVVGRkxFTkJRVU1zVFVGQlRTeERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRMRWxCUVVrc1EwRkJRenRuUTBGRGRrTXNUVUZCVFN4bFFVRmxMRWRCUVVjc1JVRkJSU3hEUVVGRExFMUJRVTBzUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXl4SlFVRkpMRU5CUVVNN1owTkJRekZETEUxQlFVMHNSVUZCUXl4UFFVRlBMRVZCUVVVc1QwRkJUeXhGUVVGRExFZEJRM2hDTEUxQlFVMHNSVUZCUlN4RFFVRkRMRXRCUVVzc1EwRkJReXhGUVVGRExFTkJRVU1zV1VGQldTeERRVUZETEVWQlFVVXNUMEZCVHl4RFFVRkRMRU5CUVVNc1EwRkJReXhGUVVGRkxFTkJRVU1zWlVGQlpTeERRVUZETEVWQlFVVXNUMEZCVHl4RFFVRkRMRU5CUVVNc1EwRkJRenR2UTBGRGRrVXNSMEZCUnl4RFFVRkRMR0ZCUVdFc1EwRkJReXh4UWtGQmNVSXNRMEZCUXl4RFFVRkRMRU5CUVVNc1NVRkJTU3hGUVVGRkxFTkJRVU1zUlVGQlF5eERRVUZETEVOQlFVTTdaME5CUTNSRUxHbENRVUZwUWl4RFFVRkRMRWxCUVVrc1EwRkJReXhGUVVGRExFOUJRVThzUlVGQlJTeFBRVUZQTEVWQlFVTXNRMEZCUXl4RFFVRkRPMmREUVVNelF5eGhRVUZoTEVOQlFVTXNZMEZCWXl4RFFVRkRMRWxCUVVrc1EwRkJReXhQUVVGUExFTkJRVU1zUTBGQlF6czJRa0ZETlVNN2FVTkJRVTA3WjBOQlEwd3NUVUZCVFN4UFFVRlBMRWRCUVVjc1QwRkJUeXhEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETEUxQlFVMHNSVUZCUlN4RFFVRkRPMmREUVVOd1F5eE5RVUZOTEU5QlFVOHNSMEZCUnl4RlFVRkZMRU5CUVVNN1owTkJRMjVDTEdsQ1FVRnBRaXhEUVVGRExFbEJRVWtzUTBGQlF5eEZRVUZETEU5QlFVOHNSVUZCUlN4UFFVRlBMRVZCUVVNc1EwRkJReXhEUVVGRE8yZERRVU16UXl4aFFVRmhMRU5CUVVNc1kwRkJZeXhEUVVGRExFbEJRVWtzUTBGQlF5eFBRVUZQTEVOQlFVTXNRMEZCUXpzMlFrRkROVU03ZVVKQlEwWTdkMEpCUTBRc1RVRkJUU3hIUVVGSExFZEJRVWNzVFVGQlRTeDFRa0ZCZFVJc1EwRkJReXhwUWtGQmFVSXNRMEZCUXl4SFFVRkhMRU5CUVVNc1EwRkJReXhGUVVGRkxFVkJRVVVzUlVGQlJTeERRVUZETEVWQlFVVXNRMEZCUXl4UFFVRlBMRU5CUVVNc1JVRkJSU3hOUVVGTkxFVkJRM3BHTEU5QlFVOHNSVUZCUlN4UFFVRlBMRVZCUVVVc2FVSkJRV2xDTEVWQlFVVXNZVUZCWVN4RlFVTnNSQ3hUUVVGVExFTkJRVU1zZVVKQlFYbENMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU1zVTBGQlV5eERRVUZETEVOQlFVTXNRMEZCUXl4WlFVRlpMRU5CUVVNc1EwRkJRenQzUWtGRGJrVXNUMEZCVHl4RFFVRkRMRWRCUVVjc1EwRkJReXhEUVVGRE8zRkNRVU5rTzI5Q1FVRkRMRTlCUVU4c1EwRkJReXhGUVVGRk8zZENRVU5XTEUxQlFVMHNRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJRenR4UWtGRFdEdG5Ra0ZEU0N4RFFVRkRMRU5CUVVNc1EwRkJRenRuUWtGRFNDeE5RVUZOTEVkQlFVY3NSMEZCUnl4TlFVRk5MR2RDUVVGblFpeERRVUZETzJkQ1FVTnVReXhGUVVGRkxFTkJRVU1zUzBGQlN5eEZRVUZGTEVOQlFVTTdaMEpCUTFnc1IwRkJSeXhEUVVGRExGZEJRVmNzUlVGQlJTeERRVUZETzJkQ1FVTnNRaXhQUVVGUExFZEJRVWNzUTBGQlF6dFpRVU5pTEVOQlFVTTdXVUZEUkN4TlFVRk5MRWRCUVVjc1IwRkJSeXhOUVVGTkxGTkJRVk1zUlVGQlJTeERRVUZETzFsQlJUbENMRWxCUVVrc2FVSkJRV2xDTEVsQlFVa3NSMEZCUnl4RlFVRkZPMmRDUVVNMVFpeE5RVUZOTEZOQlFWTXNSMEZCUnl4RlFVRkZMRU5CUVVNc2QwSkJRWGRDTEVOQlFVTXNUVUZCVFN4RFFVRkRMREpDUVVFeVFpeERRVUZETEVOQlFVTTdaMEpCUTJ4R0xFbEJRVWs3YjBKQlEwWXNUVUZCVFN4VlFVRlZMRWRCUVVjc1RVRkJUU3hsUVVGbExFTkJRVU1zUjBGQlJ5eERRVUZETEVOQlFVTXNRMEZCUXl4RlFVRkZMRWRCUVVjc1EwRkJReXhEUVVGRExFTkJRVU1zUlVGRGNrUXNZVUZCWVN4RFFVRkRMR0ZCUVdFc1NVRkJTU3hKUVVGSkxFVkJRVVVzWVVGQllTeERRVUZETEZsQlFWa3NTVUZCU1N4RFFVRkRMRU5CUVVNc1EwRkJRenR2UWtGRGVFVXNUVUZCVFN4alFVRmpMRWRCUVVjc1MwRkJTeXhEUVVGRExFOUJRVThzUTBGQlF5eGhRVUZoTEVOQlFVTXNhMEpCUVd0Q0xFTkJRVU1zUTBGQlF6dHZRa0ZEZGtVc1RVRkJUU3hWUVVGVkxFZEJRVWNzUzBGQlN5eERRVUZETEU5QlFVOHNRMEZCUXl4WlFVRlpMRU5CUVVNc1kwRkJZeXhEUVVGRExFTkJRVU03YjBKQlF6bEVMRlZCUVZVc1EwRkJReXhKUVVGSkxFTkJRVU1zUTBGQlF5eERRVUZETEVWQlFVVXNSVUZCUlN4RFFVRkRMRlZCUVZVc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF5eFJRVUZSTEVWQlFVVXNRMEZCUXl4RFFVRkRPMjlDUVVOcVJDeEpRVUZKTEZkQlFWYzdkMEpCUTFvc1YwRkJiME1zUTBGQlF5eExRVUZMTEVOQlFVTXNaVUZCWlN4SFFVRkhMR05CUVdNc1EwRkJRenRwUWtGRGFFWTdaMEpCUVVNc1QwRkJUeXhEUVVGRExFVkJRVVU3YjBKQlExWXNTVUZCU1N4RFFVRkRMRXRCUVVzc1EwRkJReXhMUVVGTExFTkJRVU1zT0VKQlFUaENMRU5CUVVNc1EwRkJRenR2UWtGRGFrUXNUMEZCVHl4RFFVRkRMRXRCUVVzc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF6dHBRa0ZEYkVJN2QwSkJRVk03YjBKQlExSXNVMEZCVXl4RFFVRkRMRXRCUVVzc1JVRkJSU3hEUVVGRE8ybENRVU51UWp0aFFVTkdPMWxCUTBRc1NVRkJTU3hIUVVGSExFVkJRVVU3WjBKQlExQXNUVUZCVFN4VFFVRlRMRWRCUVVjc1MwRkJTeXhEUVVGRExFOUJRVThzUTBGQlF5eE5RVUZOTEVOQlFVTXNZMEZCWXl4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU03WjBKQlF6RkVMRTFCUVUwc1UwRkJVeXhIUVVGSExFdEJRVXNzUTBGQlF5eFBRVUZQTEVOQlFVTXNUVUZCVFN4RFFVRkRMR05CUVdNc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETzJkQ1FVTXhSQ3hUUVVGVExFTkJRVU1zU1VGQlNTeERRVUZETEVOQlFVTXNRMEZCUXl4RlFVRkZMRVZCUVVVc1EwRkJReXhIUVVGSExFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJRenRuUWtGRGFrTXNVMEZCVXl4RFFVRkRMRWxCUVVrc1EwRkJReXhEUVVGRExFTkJRVU1zUlVGQlJTeEZRVUZGTEVOQlFVTXNSMEZCUnl4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTTdaMEpCUTJwRExFbEJRVWtzYTBKQlFXdENMRVZCUVVVN2IwSkJRM1JDTEVsQlFVazdkMEpCUTBZc1RVRkJUU3hoUVVGaExFZEJRVWNzYTBKQlFXdENMRU5CUVVNc1RVRkJUU3hEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETEVsQlFVa3NRMEZCUXp0M1FrRkRlRVFzVFVGQlRTeGhRVUZoTEVkQlFVY3NhMEpCUVd0Q0xFTkJRVU1zVFVGQlRTeERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRMRWxCUVVrc1EwRkJRenQzUWtGRGVFUXNUVUZCVFN4clFrRkJhMEk3TmtKQlEzSkNMRTlCUVU4c1EwRkJReXhGUVVGRExFTkJRVU1zWVVGQllTeERRVUZETEVWQlFVVXNVMEZCVXl4RlFVRkZMRU5CUVVNc1lVRkJZU3hEUVVGRExFVkJRVVVzVTBGQlV5eEZRVUZGTEVkQlFVY3NaMEpCUVdkQ0xFVkJRVU1zUTBGQlF6czJRa0ZEZEVZc1NVRkJTU3hEUVVGRExFbEJRVWtzUTBGQlF5eERRVUZETzNGQ1FVTm1PMjlDUVVGRExFOUJRVThzUTBGQlF5eEZRVUZGTzNkQ1FVTldMRWxCUVVrc1EwRkJReXhMUVVGTExFTkJRVU1zUzBGQlN5eERRVUZETEhkQ1FVRjNRaXhEUVVGRExFTkJRVU03ZDBKQlF6TkRMRTlCUVU4c1EwRkJReXhMUVVGTExFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTTdjVUpCUTJ4Q08ybENRVU5HTzJkQ1FVTkVMRWxCUVVrc1YwRkJWeXhGUVVGRk8yOUNRVU5tTEVWQlFVVXNRMEZCUXl4clFrRkJhMElzUTBGQlJTeFhRVUZ2UXl4RFFVRkRMRWxCUVVrc1JVRkJSU3hMUVVGTExFTkJRVU1zUTBGQlF6dHZRa0ZEZUVVc1YwRkJiME1zUTBGQlF5eFBRVUZQTEVkQlFVY3NPRUpCUVRoQ0xFTkJRVU03YjBKQlF5OUZMRTlCUVU4c1YwRkJiVU1zUTBGQlF6dHBRa0ZETlVNN1lVRkRSanRUUVVOR08xRkJRVU1zVDBGQlR5eERRVUZETEVWQlFVVTdXVUZEVml4SlFVRkpMRU5CUVVNc1MwRkJTeXhEUVVGRExFdEJRVXNzUTBGQlF5eHBRMEZCYVVNc1EwRkJReXhEUVVGRE8xbEJRM0JFTEU5QlFVOHNRMEZCUXl4TFFVRkxMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU03V1VGRGFrSXNSVUZCUlN4RFFVRkRMRXRCUVVzc1JVRkJSU3hEUVVGRE8xbEJRMWdzU1VGQlNTeFhRVUZYTzJkQ1FVTmlMRVZCUVVVc1EwRkJReXhyUWtGQmEwSXNRMEZCUlN4WFFVRnZReXhEUVVGRExFbEJRVWtzUlVGQlJTeExRVUZMTEVOQlFVTXNRMEZCUXp0VFFVTTFSVHRKUVVOSUxFTkJRVU1zUTBGQlF6dEpRVU5HTEU5QlFVOHNTVUZCU1N4UFFVRlBMRU5CUVcxRExFdEJRVXNzUlVGQlJTeFBRVUZQTEVWQlFVVXNUVUZCVFN4RlFVRkZMRVZCUVVVN1VVRkROMFVzU1VGQlNUdFpRVU5HTEVsQlFVa3NVMEZCVXl4RFFVRkRMRmxCUVZrc1NVRkJTU3hMUVVGTExFTkJRVU1zVVVGQlVTeEhRVUZITEZOQlFWTXNRMEZCUXl4WlFVRlpMRWxCUVVrc1EwRkJReXhUUVVGVExFTkJRVU1zZVVKQlFYbENMRU5CUVVNc1JVRkJSVHRuUWtGRE9VY3NSVUZCUlN4RFFVRkRMRTFCUVUwc1JVRkJSVHR4UWtGRFVpeEhRVUZITEVOQlFVTXNSVUZCUlN4RFFVRkRMRTlCUVU4c1EwRkJReXdyUkVGQkswUXNRMEZCUXl4RFFVRkRPM0ZDUVVOb1JpeEpRVUZKTEVOQlFVTXNTMEZCU3l4SlFVRkpMRVZCUVVVN2IwSkJRMllzU1VGQlNUdDNRa0ZEUml4TlFVRk5MRWRCUVVjc1IwRkJSeXhOUVVGTkxGRkJRVkVzUlVGQlJTeERRVUZETzNkQ1FVTTNRaXhQUVVGUExFTkJRVU1zUjBGQlJ5eERRVUZETEVOQlFVTTdjVUpCUTJRN2IwSkJRVU1zVDBGQlR5eERRVUZETEVWQlFVVTdkMEpCUTFZc1RVRkJUU3hEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETzNGQ1FVTllPMmRDUVVOSUxFTkJRVU1zUTBGQlF6dHhRa0ZEUkN4UlFVRlJMRU5CUVVNc1IwRkJSeXhGUVVGRkxFTkJRVU1zVDBGQlR5eERRVUZETEZOQlFWTXNRMEZCUXl4RFFVRkRPM0ZDUVVOc1F5eEpRVUZKTEVWQlFVVXNRMEZCUXp0aFFVTllPMmxDUVVGTk8yZENRVU5NTEUxQlFVMHNSMEZCUnl4SFFVRkhMRTFCUVUwc1VVRkJVU3hGUVVGRkxFTkJRVU03WjBKQlF6ZENMRTlCUVU4c1EwRkJReXhIUVVGSExFTkJRVU1zUTBGQlF6dGhRVU5rTzFOQlEwWTdVVUZCUXl4UFFVRlBMRU5CUVVNc1JVRkJSVHRaUVVOV0xFMUJRVTBzUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXp0VFFVTllPMGxCUTBnc1EwRkJReXhEUVVGRExFTkJRVU03UVVGRFRDeERRVUZESWl3aWMyOTFjbU5sYzBOdmJuUmxiblFpT2xzaWFXMXdiM0owSUNvZ1lYTWdaM0p2YXlCbWNtOXRJQ2RrWVhSaFozSnZheTFoY0drdlozSnZheWM3WEc1cGJYQnZjblFnS2lCaGN5QjFhU0JtY205dElDZGtZWFJoWjNKdmF5MWhjR2t2ZFdrbk8xeHVhVzF3YjNKMElDb2dZWE1nUkVjZ1puSnZiU0FuWkdGMFlXZHliMnN0WVhCcEwyUm5KenRjYm1sdGNHOXlkQ0I3UzI1dmQyNU5aWFJ5YVdOemZTQm1jbTl0SUNjdUxpOTBlWEJsWkMxdFpYUnlhV056Snp0Y2JtbHRjRzl5ZENCN1FsbFFRVk5UWDB4QlVrZEZYMFJCVkVGZlYwRlNUa2xPUnl3Z1UwaFBWMTlUUTBGVVZFVlNVRXhQVkY5UVVrOUhVa1ZUVTMwZ1puSnZiU0FuTGk0dlpuVnVZM1JwYjI1RlpHbDBiM0p6TDJOdmJuTjBjeWM3WEc1cGJYQnZjblFnZTAxaGRISnBlQ3dnVDNCMGFXOXVjMzBnWm5KdmJTQW5RR1JoZEdGbmNtOXJMV3hwWW5KaGNtbGxjeTkxZEdsc2N5OXpjbU12ZEhsd1pTMWtaV05zWVhKaGRHbHZibk1uTzF4dWFXMXdiM0owSUh0SlJFSlRZMkZ1VDNCMGFXOXVjeXdnWjJWMFJHSnpZMkZ1VjI5eWEyVnlmU0JtY205dElDZEFaR0YwWVdkeWIyc3RiR2xpY21GeWFXVnpMMjFoZEdnbk8xeHVhVzF3YjNKMElIdEVTVTFGVGxOSlQwNUJURWxVV1Y5U1JVUlZRMFZTWDFSRlVrMUpUa0ZVUlY5RlZrVk9WSDBnWm5KdmJTQW5MaTlqYjI1emRITW5PMXh1YVcxd2IzSjBJSHRRY21Wd2NtOWpaWE56Um5WdVkzUnBiMjVTWlhSMWNtNVVlWEJsZlNCbWNtOXRJQ2N1TGk5bWRXNWpkR2x2YmtWa2FYUnZjbk12WkdsdFpXNXphVzl1WVd4cGRIa3RjbVZrZFdOMGFXOXVMV1ZrYVhSdmNpYzdYRzVwYlhCdmNuUWdlMmRsZEU1dmNtMWhiR2w2WldSRmJXSmxaR1JwYm1kemZTQm1jbTl0SUNjdUwyVnRZbVZrWkdsdVozTXRjM0JoWTJVbk8xeHVhVzF3YjNKMElIdEVhWE4wWVc1alpVRm5aM0psWjJGMGFXOXVUV1YwYUc5a2ZTQm1jbTl0SUNjdUxpOWthWE4wWVc1alpTMXRZWFJ5YVhndmRIbHdaWE1uTzF4dWFXMXdiM0owSUh0SlZGTk9SVTl3ZEdsdmJuTXNJRWxWVFVGUVQzQjBhVzl1YzMwZ1puSnZiU0FuTGk5dGRXeDBhUzFqYjJ4MWJXNHRaR2x0TFhKbFpIVmpaWEluTzF4dWFXMXdiM0owSUh0RWFXMVNaV1IxWTNScGIyNU5aWFJvYjJSemZTQm1jbTl0SUNjdUwzUjVjR1Z6Snp0Y2JseHVaWGh3YjNKMElIUjVjR1VnUkdsdFVtVmtWV2xQY0hScGIyNXpJRDBnZTF4dUlDQWdJRnRDV1ZCQlUxTmZURUZTUjBWZlJFRlVRVjlYUVZKT1NVNUhYVDg2SUdKdmIyeGxZVzRzWEc0Z0lDQWdXMU5JVDFkZlUwTkJWRlJGVWxCTVQxUmZVRkpQUjFKRlUxTmRQem9nWW05dmJHVmhiaXhjYmlBZ0lDQm1ZWE4wVW05M1EyOTFiblEvT2lCdWRXMWlaWElzWEc0Z0lDQWdjMk5oZEhSbGNsQnNiM1JPWVcxbFB6b2djM1J5YVc1bkxGeHVmVnh1WEc1bGVIQnZjblFnWm5WdVkzUnBiMjRnWjJWMFJXMWlaV1JrYVc1blEyOXNjMDVoYldWektHUm1PaUJFUnk1RVlYUmhSbkpoYldVcElIdGNiaUFnWTI5dWMzUWdZWGhsY3lBOUlGc25SVzFpWldSZldDY3NJQ2RGYldKbFpGOVpKMTA3WEc0Z0lHTnZibk4wSUdOdmJFNWhiV1ZKYm1RZ1BTQmtaaTVqYjJ4MWJXNXpMbTVoYldWektDa3VabWxzZEdWeUtDaHBkRG9nYzNSeWFXNW5LU0E5UGlCcGRDNXBibU5zZFdSbGN5aGhlR1Z6V3pCZEtTa3ViR1Z1WjNSb0lDc2dNVHRjYmlBZ2NtVjBkWEp1SUdGNFpYTXViV0Z3S0NocGRDa2dQVDRnWUNSN2FYUjlYeVI3WTI5c1RtRnRaVWx1WkgxZ0tUdGNibjFjYmx4dVpYaHdiM0owSUdaMWJtTjBhVzl1SUdkbGRFVnRZbVZrWkdsdVoxWnBaWGRsY2s1aGJXVW9ZMjlzZFcxdWN6b2dSRWN1UTI5c2RXMXVXMTBzSUcxbGRHaHZaRG9nUkdsdFVtVmtkV04wYVc5dVRXVjBhRzlrY3lrZ2UxeHVJQ0JqYjI1emRDQmpiMnhPWVcxbGN5QTlJR052YkhWdGJuTXViR1Z1WjNSb0lENGdOQ0EvSUdBa2UyTnZiSFZ0Ym5NdWJHVnVaM1JvZlNCamIyeDFiVzV6WUNBNklHTnZiSFZ0Ym5NdWJXRndLQ2hwZENrZ1BUNGdhWFF1Ym1GdFpTa3VhbTlwYmlnbkxDQW5LVHRjYmlBZ2NtVjBkWEp1SUdBa2UyMWxkR2h2WkgwZ0tDUjdZMjlzVG1GdFpYTjlLV0E3WEc1OVhHNWNibVY0Y0c5eWRDQmhjM2x1WXlCbWRXNWpkR2x2YmlCdGRXeDBhVU52YkZKbFpIVmpaVVJwYldWdWMybHZibUZzYVhSNUtIUmhZbXhsT2lCRVJ5NUVZWFJoUm5KaGJXVXNJR052YkhWdGJuTTZJRVJITGtOdmJIVnRibHRkTEZ4dUlDQnRaWFJvYjJRNklFUnBiVkpsWkhWamRHbHZiazFsZEdodlpITXNJRzFsZEhKcFkzTTZJRXR1YjNkdVRXVjBjbWxqYzF0ZExDQjNaV2xuYUhSek9pQnVkVzFpWlhKYlhTeGNiaUFnY0hKbGNISnZZMlZ6YzJsdVowWjFibU4wYVc5dWN6b2dLRVJITGtaMWJtTWdmQ0J1ZFd4c0lId2dkVzVrWldacGJtVmtLVnRkTEZ4dUlDQmhaMmR5WldkaGRHbHZiazFsZEdodlpEb2dSR2x6ZEdGdVkyVkJaMmR5WldkaGRHbHZiazFsZEdodlpDd2djR3h2ZEVWdFltVmtaR2x1WjNNNklHSnZiMnhsWVc0Z1BTQjBjblZsTENCamJIVnpkR1Z5UlcxaVpXUmthVzVuY3pvZ1ltOXZiR1ZoYmlBOUlHWmhiSE5sTEZ4dUlDQmthVzFTWldSUGNIUnBiMjV6T2lBb1NWVk5RVkJQY0hScGIyNXpJSHdnU1ZSVFRrVlBjSFJwYjI1ektTQW1JRkJoY25ScFlXdzhTVVJDVTJOaGJrOXdkR2x2Ym5NK0lDWWdlM0J5WlhCeWIyTmxjM05wYm1kR2RXNWpRWEpuY3pvZ1QzQjBhVzl1YzF0ZGZTQW1YRzRnSUNBZ1QzQjBhVzl1Y3lBOUlIdHdjbVZ3Y205alpYTnphVzVuUm5WdVkwRnlaM002SUZ0ZGZTeGNiaUFnZFdsUGNIUnBiMjV6T2lCRWFXMVNaV1JWYVU5d2RHbHZibk1nUFNCN2ZTd2djRzl6ZEZCeWIyTmxjM05wYm1kR2RXNWpPaUJFUnk1R2RXNWpJSHdnYm5Wc2JDQTlJRzUxYkd3c0lIQnZjM1JRY205alJuVnVZMEZ5WjNNNklFOXdkR2x2Ym5NZ1BTQjdmU2tnZTF4dUlDQmpiMjV6ZENCelkyRjBkR1Z5VUd4dmRGQnliM0J6SUQwZ2UxeHVJQ0FnSUhOb2IzZFlRWGhwY3pvZ1ptRnNjMlVzWEc0Z0lDQWdjMmh2ZDFsQmVHbHpPaUJtWVd4elpTeGNiaUFnSUNCemFHOTNXRk5sYkdWamRHOXlPaUJtWVd4elpTeGNiaUFnSUNCemFHOTNXVk5sYkdWamRHOXlPaUJtWVd4elpTeGNiaUFnZlR0Y2JpQWdhV1lnS0dOdmJIVnRibk11YkdWdVozUm9JQ0U5UFNCdFpYUnlhV056TG14bGJtZDBhQ0I4ZkNCamIyeDFiVzV6TG14bGJtZDBhQ0FoUFQwZ2NISmxjSEp2WTJWemMybHVaMFoxYm1OMGFXOXVjeTVzWlc1bmRHZ2dmSHhjYmlBZ0lDQWdJQ0FnWTI5c2RXMXVjeTVzWlc1bmRHZ2dJVDA5SUhkbGFXZG9kSE11YkdWdVozUm9JSHg4SUdOdmJIVnRibk11YkdWdVozUm9JQ0U5UFNCa2FXMVNaV1JQY0hScGIyNXpMbkJ5WlhCeWIyTmxjM05wYm1kR2RXNWpRWEpuY3k1c1pXNW5kR2dwSUh0Y2JpQWdJQ0IwYUhKdmR5QnVaWGNnUlhKeWIzSW9KMk52YkhWdGJuTXNJRzFsZEhKcFkzTWdZVzVrSUhCeVpYQnliMk5sYzNOcGJtY2dablZ1WTNScGIyNXpMQ0IzWldsbmFIUnpJR0Z1WkNCbWRXNWpkR2x2YmlCaGNtZDFiV1Z1ZEhNbklDdGNiaUFnSUNBZ0lDZHRkWE4wSUdoaGRtVWdkR2hsSUhOaGJXVWdiR1Z1WjNSb0p5azdYRzRnSUgxY2JseHVJQ0JqYjI1emRDQjBkaUE5SUhCc2IzUkZiV0psWkdScGJtZHpJRDhnWjNKdmF5NXphR1ZzYkM1MFlXSnNaVlpwWlhjb2RHRmliR1V1Ym1GdFpTa2dQejhnWjNKdmF5NXphR1ZzYkM1aFpHUlVZV0pzWlZacFpYY29kR0ZpYkdVcElEb2diblZzYkR0Y2JseHVJQ0JqYjI1emRDQmtiMUpsWkhWalpTQTlJR0Z6ZVc1aklDZ3BJRDArSUh0Y2JpQWdJQ0JqYjI1emRDQndaeUE5SUVSSExsUmhjMnRDWVhKUWNtOW5jbVZ6YzBsdVpHbGpZWFJ2Y2k1amNtVmhkR1VvWEc0Z0lDQWdJQ0JnU1c1cGRHbGhiR2w2YVc1bklDUjdkV2xQY0hScGIyNXpMbk5qWVhSMFpYSlFiRzkwVG1GdFpTQS9QeUFuWkdsdFpXNXphVzl1WVd4cGRIa2djbVZrZFdOMGFXOXVKMzBnTGk0dVlDazdYRzRnSUNBZ2JHVjBJSE5qWVhSMFpYSlFiRzkwT2lCRVJ5NVRZMkYwZEdWeVVHeHZkRlpwWlhkbGNpQjhJSFZ1WkdWbWFXNWxaQ0E5SUhWdVpHVm1hVzVsWkR0Y2JpQWdJQ0IwY25rZ2UxeHVJQ0FnSUNBZ1kyOXVjM1FnWlcxaVpXUkRiMnh6VG1GdFpYTWdQU0JuWlhSRmJXSmxaR1JwYm1kRGIyeHpUbUZ0WlhNb2RHRmliR1VwTzF4dUlDQWdJQ0FnWm5WdVkzUnBiMjRnY0hKdlozSmxjM05HZFc1aktGOXVSWEJ2WTJnNklHNTFiV0psY2l3Z1pYQnZZMmh6VEdWdVozUm9PaUJ1ZFcxaVpYSXNJR1Z0WW1Wa1pHbHVaM002SUc1MWJXSmxjbHRkVzEwcElIdGNiaUFnSUNBZ0lDQWdiR1YwSUdWdFltVmtXRU52YkRvZ1JFY3VRMjlzZFcxdUlId2diblZzYkNBOUlHNTFiR3c3WEc0Z0lDQWdJQ0FnSUd4bGRDQmxiV0psWkZsRGIydzZJRVJITGtOdmJIVnRiaUI4SUc1MWJHd2dQU0J1ZFd4c08xeHVJQ0FnSUNBZ0lDQnBaaUFvSVhSaFlteGxMbU52YkhWdGJuTXVibUZ0WlhNb0tTNXBibU5zZFdSbGN5aGxiV0psWkVOdmJITk9ZVzFsYzFzd1hTa3BJSHRjYmlBZ0lDQWdJQ0FnSUNCbGJXSmxaRmhEYjJ3Z1BTQjBZV0pzWlM1amIyeDFiVzV6TG1Ga1pDaEVSeTVEYjJ4MWJXNHVabXh2WVhRb1pXMWlaV1JEYjJ4elRtRnRaWE5iTUYwc0lIUmhZbXhsTG5KdmQwTnZkVzUwS1NrN1hHNGdJQ0FnSUNBZ0lDQWdaVzFpWldSWlEyOXNJRDBnZEdGaWJHVXVZMjlzZFcxdWN5NWhaR1FvUkVjdVEyOXNkVzF1TG1ac2IyRjBLR1Z0WW1Wa1EyOXNjMDVoYldWeld6RmRMQ0IwWVdKc1pTNXliM2REYjNWdWRDa3BPMXh1SUNBZ0lDQWdJQ0FnSUdsbUlDaHdiRzkwUlcxaVpXUmthVzVuY3lBbUppQWhjMk5oZEhSbGNsQnNiM1FwSUh0Y2JpQWdJQ0FnSUNBZ0lDQWdJSE5qWVhSMFpYSlFiRzkwSUQwZ2RIWWhYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDNXpZMkYwZEdWeVVHeHZkQ2g3TGk0dWMyTmhkSFJsY2xCc2IzUlFjbTl3Y3l3Z2VEb2daVzFpWldSRGIyeHpUbUZ0WlhOYk1GMHNJSGs2SUdWdFltVmtRMjlzYzA1aGJXVnpXekZkTEZ4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUhScGRHeGxPaUIxYVU5d2RHbHZibk11YzJOaGRIUmxjbEJzYjNST1lXMWxJRDgvSUdkbGRFVnRZbVZrWkdsdVoxWnBaWGRsY2s1aGJXVW9ZMjlzZFcxdWN5d2diV1YwYUc5a0tYMHBPMXh1SUNBZ0lDQWdJQ0FnSUgxY2JpQWdJQ0FnSUNBZ2ZTQmxiSE5sSUh0Y2JpQWdJQ0FnSUNBZ0lDQmxiV0psWkZoRGIyd2dQU0IwWVdKc1pTNWpiMngxYlc1ekxtSjVUbUZ0WlNobGJXSmxaRU52YkhOT1lXMWxjMXN3WFNrN1hHNGdJQ0FnSUNBZ0lDQWdaVzFpWldSWlEyOXNJRDBnZEdGaWJHVXVZMjlzZFcxdWN5NWllVTVoYldVb1pXMWlaV1JEYjJ4elRtRnRaWE5iTVYwcE8xeHVJQ0FnSUNBZ0lDQjlYRzVjYmlBZ0lDQWdJQ0FnYVdZZ0tIVnBUM0IwYVc5dWMxdFRTRTlYWDFORFFWUlVSVkpRVEU5VVgxQlNUMGRTUlZOVFhTa2dlMXh1SUNBZ0lDQWdJQ0FnSUhOallYUjBaWEpRYkc5MFB5NXliMjkwSUNZbUlIVnBMbk5sZEZWd1pHRjBaVWx1WkdsallYUnZjaWh6WTJGMGRHVnlVR3h2ZENFdWNtOXZkQ3dnWm1Gc2MyVXBPMXh1SUNBZ0lDQWdJQ0FnSUdWdFltVmtXRU52YkM1cGJtbDBLQ2hwS1NBOVBpQmxiV0psWkdScGJtZHpXekJkSUQ4Z1pXMWlaV1JrYVc1bmMxc3dYVnRwWFNBNklIVnVaR1ZtYVc1bFpDazdYRzRnSUNBZ0lDQWdJQ0FnWlcxaVpXUlpRMjlzTG1sdWFYUW9LR2twSUQwK0lHVnRZbVZrWkdsdVozTmJNVjBnUHlCbGJXSmxaR1JwYm1keld6RmRXMmxkSURvZ2RXNWtaV1pwYm1Wa0tUdGNiaUFnSUNBZ0lDQWdmVnh1SUNBZ0lDQWdJQ0JqYjI1emRDQndjbTluY21WemN5QTlJQ2hmYmtWd2IyTm9JQzhnWlhCdlkyaHpUR1Z1WjNSb0lDb2dNVEF3S1R0Y2JpQWdJQ0FnSUNBZ2NHY3VkWEJrWVhSbEtIQnliMmR5WlhOekxGeHVJQ0FnSUNBZ0lDQWdJR0JTZFc1dWFXNW5JQ1I3ZFdsUGNIUnBiMjV6TG5OallYUjBaWEpRYkc5MFRtRnRaU0EvUHlBblpHbHRaVzV6YVc5dVlXeHBkSGtnY21Wa2RXTjBhVzl1SjMwdUxpNGdKSHR3Y205bmNtVnpjeTUwYjBacGVHVmtLREFwZlNWZ0tUdGNiaUFnSUNBZ0lIMWNiaUFnSUNBZ0lHRnplVzVqSUdaMWJtTjBhVzl1SUdkbGRFUnBiVkpsWkNncElIdGNiaUFnSUNBZ0lDQWdkR0ZpYkdVdVkyOXNkVzF1Y3k1aFpHUW9SRWN1UTI5c2RXMXVMbVpzYjJGMEtHVnRZbVZrUTI5c2MwNWhiV1Z6V3pCZExDQjBZV0pzWlM1eWIzZERiM1Z1ZENrcE8xeHVJQ0FnSUNBZ0lDQjBZV0pzWlM1amIyeDFiVzV6TG1Ga1pDaEVSeTVEYjJ4MWJXNHVabXh2WVhRb1pXMWlaV1JEYjJ4elRtRnRaWE5iTVYwc0lIUmhZbXhsTG5KdmQwTnZkVzUwS1NrN1hHNGdJQ0FnSUNBZ0lHeGxkQ0J5WlhOdmJIWmxSam9nUm5WdVkzUnBiMjRnZkNCdWRXeHNJRDBnYm5Wc2JEdGNiaUFnSUNBZ0lDQWdhV1lnS0hCc2IzUkZiV0psWkdScGJtZHpLU0I3WEc0Z0lDQWdJQ0FnSUNBZ2MyTmhkSFJsY2xCc2IzUWdQU0IwZGlGY2JpQWdJQ0FnSUNBZ0lDQWdJQzV6WTJGMGRHVnlVR3h2ZENoN0xpNHVjMk5oZEhSbGNsQnNiM1JRY205d2N5d2dlRG9nWlcxaVpXUkRiMnh6VG1GdFpYTmJNRjBzSUhrNklHVnRZbVZrUTI5c2MwNWhiV1Z6V3pGZExGeHVJQ0FnSUNBZ0lDQWdJQ0FnSUNCMGFYUnNaVG9nZFdsUGNIUnBiMjV6TG5OallYUjBaWEpRYkc5MFRtRnRaU0EvUHlCblpYUkZiV0psWkdScGJtZFdhV1YzWlhKT1lXMWxLR052YkhWdGJuTXNJRzFsZEdodlpDbDlLVHRjYmlBZ0lDQWdJQ0FnSUNCMWFTNXpaWFJWY0dSaGRHVkpibVJwWTJGMGIzSW9jMk5oZEhSbGNsQnNiM1F1Y205dmRDd2dkSEoxWlNrN1hHNGdJQ0FnSUNBZ0lIMWNibHh1SUNBZ0lDQWdJQ0JqYjI1emRDQnpkV0lnUFNCbmNtOXJMbVYyWlc1MGN5NXZibFpwWlhkbGNrTnNiM05sWkM1emRXSnpZM0pwWW1Vb0tHRnlaM01wSUQwK0lIdGNiaUFnSUNBZ0lDQWdJQ0JqYjI1emRDQjJJRDBnWVhKbmN5NWhjbWR6TG5acFpYZGxjaUJoY3lCMWJtdHViM2R1SUdGeklFUkhMbFpwWlhkbGNqeGhibmsrTzF4dUlDQWdJQ0FnSUNBZ0lHbG1JQ2gyUHk1blpYUlBjSFJwYjI1ektDay9MbXh2YjJzL0xuUnBkR3hsSUNZbUlITmpZWFIwWlhKUWJHOTBQeTVuWlhSUGNIUnBiMjV6S0NrL0xteHZiMnMvTG5ScGRHeGxJQ1ltWEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdkajh1WjJWMFQzQjBhVzl1Y3lncFB5NXNiMjlyUHk1MGFYUnNaU0E5UFQwZ2MyTmhkSFJsY2xCc2IzUS9MbWRsZEU5d2RHbHZibk1vS1Q4dWJHOXZhejh1ZEdsMGJHVXBJSHRjYmlBZ0lDQWdJQ0FnSUNBZ0lHZHliMnN1WlhabGJuUnpMbVpwY21WRGRYTjBiMjFGZG1WdWRDaEVTVTFGVGxOSlQwNUJURWxVV1Y5U1JVUlZRMFZTWDFSRlVrMUpUa0ZVUlY5RlZrVk9WQ3dnZTMwcE8xeHVJQ0FnSUNBZ0lDQWdJQ0FnYzNWaUxuVnVjM1ZpYzJOeWFXSmxLQ2s3WEc0Z0lDQWdJQ0FnSUNBZ0lDQnlaWE52YkhabFJqOHVLQ2s3WEc0Z0lDQWdJQ0FnSUNBZ0lDQndaeTVqYkc5elpTZ3BPMXh1SUNBZ0lDQWdJQ0FnSUgxY2JpQWdJQ0FnSUNBZ2ZTazdYRzVjYmlBZ0lDQWdJQ0FnWTI5dWMzUWdaR2x0VW1Wa1VtVnpVSEp2YldselpTQTlJRzVsZHlCUWNtOXRhWE5sUEUxaGRISnBlQ0I4SUhWdVpHVm1hVzVsWkQ0b1lYTjVibU1nS0hKbGMyOXNkbVVzSUhKbGFtVmpkQ2tnUFQ0Z2UxeHVJQ0FnSUNBZ0lDQWdJSFJ5ZVNCN1hHNGdJQ0FnSUNBZ0lDQWdJQ0J5WlhOdmJIWmxSaUE5SUhKbGMyOXNkbVU3WEc0Z0lDQWdJQ0FnSUNBZ0lDQmpiMjV6ZENCbGJtTnZaR1ZrUTI5c1JXNTBjbWxsY3pvZ1VISmxjSEp2WTJWemMwWjFibU4wYVc5dVVtVjBkWEp1Vkhsd1pWdGRJRDBnVzEwN1hHNGdJQ0FnSUNBZ0lDQWdJQ0JtYjNJZ0tHeGxkQ0JwSUQwZ01Ec2dhU0E4SUhCeVpYQnliMk5sYzNOcGJtZEdkVzVqZEdsdmJuTXViR1Z1WjNSb095QXJLMmtwSUh0Y2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnWTI5dWMzUWdjR1lnUFNCd2NtVndjbTlqWlhOemFXNW5SblZ1WTNScGIyNXpXMmxkTzF4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0JwWmlBb0lXUnBiVkpsWkU5d2RHbHZibk11WkdsemRHRnVZMlZHYmtGeVozTXBYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdaR2x0VW1Wa1QzQjBhVzl1Y3k1a2FYTjBZVzVqWlVadVFYSm5jeUE5SUZ0ZE8xeHVJQ0FnSUNBZ0lDQWdJQ0FnSUNCcFppQW9jR1lwSUh0Y2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNCamIyNXpkQ0JqYjJ4SmJuQjFkRTVoYldVZ1BTQndaaTVwYm5CMWRITmJNRjB1Ym1GdFpUdGNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQmpiMjV6ZENCdFpYUnlhV05KYm5CMWRFNWhiV1VnUFNCd1ppNXBibkIxZEhOYk1WMHVibUZ0WlR0Y2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNCamIyNXpkQ0I3Wlc1MGNtbGxjeXdnYjNCMGFXOXVjMzA2SUZCeVpYQnliMk5sYzNOR2RXNWpkR2x2YmxKbGRIVnlibFI1Y0dVZ1BWeHVJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lHRjNZV2wwSUhCbUxtRndjR3g1S0h0YlkyOXNTVzV3ZFhST1lXMWxYVG9nWTI5c2RXMXVjMXRwWFN3Z1cyMWxkSEpwWTBsdWNIVjBUbUZ0WlYwNklHMWxkSEpwWTNOYmFWMHNYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0F1TGk0b1pHbHRVbVZrVDNCMGFXOXVjeTV3Y21Wd2NtOWpaWE56YVc1blJuVnVZMEZ5WjNOYmFWMGdQejhnZTMwcGZTazdYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdaVzVqYjJSbFpFTnZiRVZ1ZEhKcFpYTXVjSFZ6YUNoN1pXNTBjbWxsY3l3Z2IzQjBhVzl1YzMwcE8xeHVJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lHUnBiVkpsWkU5d2RHbHZibk11WkdsemRHRnVZMlZHYmtGeVozTXVjSFZ6YUNodmNIUnBiMjV6S1R0Y2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnZlNCbGJITmxJSHRjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0JqYjI1emRDQmxiblJ5YVdWeklEMGdZMjlzZFcxdWMxdHBYUzUwYjB4cGMzUW9LVHRjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0JqYjI1emRDQnZjSFJwYjI1eklEMGdlMzA3WEc0Z0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnWlc1amIyUmxaRU52YkVWdWRISnBaWE11Y0hWemFDaDdaVzUwY21sbGN5d2diM0IwYVc5dWMzMHBPMXh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJR1JwYlZKbFpFOXdkR2x2Ym5NdVpHbHpkR0Z1WTJWR2JrRnlaM011Y0hWemFDaHZjSFJwYjI1ektUdGNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ2ZWeHVJQ0FnSUNBZ0lDQWdJQ0FnZlZ4dUlDQWdJQ0FnSUNBZ0lDQWdZMjl1YzNRZ2NtVnpJRDBnWVhkaGFYUWdaMlYwVG05eWJXRnNhWHBsWkVWdFltVmtaR2x1WjNNb1pXNWpiMlJsWkVOdmJFVnVkSEpwWlhNdWJXRndLQ2hwZENrZ1BUNGdhWFF1Wlc1MGNtbGxjeWtzSUcxbGRHaHZaQ3hjYmlBZ0lDQWdJQ0FnSUNBZ0lDQWdiV1YwY21samN5d2dkMlZwWjJoMGN5d2dZV2RuY21WbllYUnBiMjVOWlhSb2IyUXNJR1JwYlZKbFpFOXdkR2x2Ym5Nc1hHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUhWcFQzQjBhVzl1YzF0Q1dWQkJVMU5mVEVGU1IwVmZSRUZVUVY5WFFWSk9TVTVIWFNBL0lIVnVaR1ZtYVc1bFpDQTZJSEJ5YjJkeVpYTnpSblZ1WXlrN1hHNGdJQ0FnSUNBZ0lDQWdJQ0J5WlhOdmJIWmxLSEpsY3lrN1hHNGdJQ0FnSUNBZ0lDQWdmU0JqWVhSamFDQW9aU2tnZTF4dUlDQWdJQ0FnSUNBZ0lDQWdjbVZxWldOMEtHVXBPMXh1SUNBZ0lDQWdJQ0FnSUgxY2JpQWdJQ0FnSUNBZ2ZTazdYRzRnSUNBZ0lDQWdJR052Ym5OMElISmxjeUE5SUdGM1lXbDBJR1JwYlZKbFpGSmxjMUJ5YjIxcGMyVTdYRzRnSUNBZ0lDQWdJSEJuTG1Oc2IzTmxLQ2s3WEc0Z0lDQWdJQ0FnSUhOMVlpNTFibk4xWW5OamNtbGlaU2dwTzF4dUlDQWdJQ0FnSUNCeVpYUjFjbTRnY21Wek8xeHVJQ0FnSUNBZ2ZWeHVJQ0FnSUNBZ1kyOXVjM1FnY21WeklEMGdZWGRoYVhRZ1oyVjBSR2x0VW1Wa0tDazdYRzVjYmlBZ0lDQWdJR2xtSUNoamJIVnpkR1Z5UlcxaVpXUmthVzVuY3lBbUppQnlaWE1wSUh0Y2JpQWdJQ0FnSUNBZ1kyOXVjM1FnWTJ4MWMzUmxjbEJuSUQwZ1JFY3VWR0Z6YTBKaGNsQnliMmR5WlhOelNXNWthV05oZEc5eUxtTnlaV0YwWlNoZ1EyeDFjM1JsY21sdVp5QmxiV0psWkdScGJtZHpJQzR1TG1BcE8xeHVJQ0FnSUNBZ0lDQjBjbmtnZTF4dUlDQWdJQ0FnSUNBZ0lHTnZibk4wSUdOc2RYTjBaWEpTWlhNZ1BTQmhkMkZwZENCblpYUkVZbk5qWVc1WGIzSnJaWElvY21Weld6QmRMQ0J5WlhOYk1WMHNYRzRnSUNBZ0lDQWdJQ0FnSUNCa2FXMVNaV1JQY0hScGIyNXpMbVJpVTJOaGJrVndjMmxzYjI0Z1B6OGdNQzR3TVN3Z1pHbHRVbVZrVDNCMGFXOXVjeTVrWWxOallXNU5hVzVRZEhNZ1B6OGdOQ2s3WEc0Z0lDQWdJQ0FnSUNBZ1kyOXVjM1FnWTJ4MWMzUmxja052YkU1aGJXVWdQU0IwWVdKc1pTNWpiMngxYlc1ekxtZGxkRlZ1ZFhObFpFNWhiV1VvSjBOc2RYTjBaWElnS0VSQ1UwTkJUaWtuS1R0Y2JpQWdJQ0FnSUNBZ0lDQmpiMjV6ZENCamJIVnpkR1Z5UTI5c0lEMGdkR0ZpYkdVdVkyOXNkVzF1Y3k1aFpHUk9aWGRUZEhKcGJtY29ZMngxYzNSbGNrTnZiRTVoYldVcE8xeHVJQ0FnSUNBZ0lDQWdJR05zZFhOMFpYSkRiMnd1YVc1cGRDZ29hU2tnUFQ0Z1kyeDFjM1JsY2xKbGMxdHBYUzUwYjFOMGNtbHVaeWdwS1R0Y2JpQWdJQ0FnSUNBZ0lDQnBaaUFvYzJOaGRIUmxjbEJzYjNRcFhHNGdJQ0FnSUNBZ0lDQWdJQ0FvYzJOaGRIUmxjbEJzYjNRZ1lYTWdSRWN1VTJOaGRIUmxjbEJzYjNSV2FXVjNaWElwTG5CeWIzQnpMbU52Ykc5eVEyOXNkVzF1VG1GdFpTQTlJR05zZFhOMFpYSkRiMnhPWVcxbE8xeHVJQ0FnSUNBZ0lDQjlJR05oZEdOb0lDaGxLU0I3WEc0Z0lDQWdJQ0FnSUNBZ1ozSnZheTV6YUdWc2JDNWxjbkp2Y2lnblEyeDFjM1JsY21sdVp5QmxiV0psWkdScGJtZHpJR1poYVd4bFpDY3BPMXh1SUNBZ0lDQWdJQ0FnSUdOdmJuTnZiR1V1WlhKeWIzSW9aU2s3WEc0Z0lDQWdJQ0FnSUgwZ1ptbHVZV3hzZVNCN1hHNGdJQ0FnSUNBZ0lDQWdZMngxYzNSbGNsQm5MbU5zYjNObEtDazdYRzRnSUNBZ0lDQWdJSDFjYmlBZ0lDQWdJSDFjYmlBZ0lDQWdJR2xtSUNoeVpYTXBJSHRjYmlBZ0lDQWdJQ0FnWTI5dWMzUWdaVzFpWldSWVEyOXNJRDBnZEdGaWJHVXVZMjlzZFcxdWN5NWllVTVoYldVb1pXMWlaV1JEYjJ4elRtRnRaWE5iTUYwcE8xeHVJQ0FnSUNBZ0lDQmpiMjV6ZENCbGJXSmxaRmxEYjJ3Z1BTQjBZV0pzWlM1amIyeDFiVzV6TG1KNVRtRnRaU2hsYldKbFpFTnZiSE5PWVcxbGMxc3hYU2s3WEc0Z0lDQWdJQ0FnSUdWdFltVmtXRU52YkM1cGJtbDBLQ2hwS1NBOVBpQnlaWE5iTUYxYmFWMHBPMXh1SUNBZ0lDQWdJQ0JsYldKbFpGbERiMnd1YVc1cGRDZ29hU2tnUFQ0Z2NtVnpXekZkVzJsZEtUdGNiaUFnSUNBZ0lDQWdhV1lnS0hCdmMzUlFjbTlqWlhOemFXNW5SblZ1WXlrZ2UxeHVJQ0FnSUNBZ0lDQWdJSFJ5ZVNCN1hHNGdJQ0FnSUNBZ0lDQWdJQ0JqYjI1emRDQmpiMnd4U1c1d2RYUk9ZVzFsSUQwZ2NHOXpkRkJ5YjJObGMzTnBibWRHZFc1akxtbHVjSFYwYzFzd1hTNXVZVzFsTzF4dUlDQWdJQ0FnSUNBZ0lDQWdZMjl1YzNRZ1kyOXNNa2x1Y0hWMFRtRnRaU0E5SUhCdmMzUlFjbTlqWlhOemFXNW5SblZ1WXk1cGJuQjFkSE5iTVYwdWJtRnRaVHRjYmlBZ0lDQWdJQ0FnSUNBZ0lHRjNZV2wwSUhCdmMzUlFjbTlqWlhOemFXNW5SblZ1WTF4dUlDQWdJQ0FnSUNBZ0lDQWdJQ0F1Y0hKbGNHRnlaU2g3VzJOdmJERkpibkIxZEU1aGJXVmRPaUJsYldKbFpGaERiMndzSUZ0amIyd3lTVzV3ZFhST1lXMWxYVG9nWlcxaVpXUlpRMjlzTENBdUxpNXdiM04wVUhKdlkwWjFibU5CY21kemZTbGNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0xtTmhiR3dvZEhKMVpTazdYRzRnSUNBZ0lDQWdJQ0FnZlNCallYUmphQ0FvWlNrZ2UxeHVJQ0FnSUNBZ0lDQWdJQ0FnWjNKdmF5NXphR1ZzYkM1bGNuSnZjaWduVUc5emRDMXdjbTlqWlhOemFXNW5JR1poYVd4bFpDY3BPMXh1SUNBZ0lDQWdJQ0FnSUNBZ1kyOXVjMjlzWlM1bGNuSnZjaWhsS1R0Y2JpQWdJQ0FnSUNBZ0lDQjlYRzRnSUNBZ0lDQWdJSDFjYmlBZ0lDQWdJQ0FnYVdZZ0tITmpZWFIwWlhKUWJHOTBLU0I3WEc0Z0lDQWdJQ0FnSUNBZ2RXa3VjMlYwVlhCa1lYUmxTVzVrYVdOaGRHOXlLQ2h6WTJGMGRHVnlVR3h2ZENCaGN5QkVSeTVUWTJGMGRHVnlVR3h2ZEZacFpYZGxjaWt1Y205dmRDd2dabUZzYzJVcE8xeHVJQ0FnSUNBZ0lDQWdJQ2h6WTJGMGRHVnlVR3h2ZENCaGN5QkVSeTVUWTJGMGRHVnlVR3h2ZEZacFpYZGxjaWt1YUdWc2NGVnliQ0E5SUNjdmFHVnNjQzlqYjIxd2RYUmxMM05sY1hWbGJtTmxMWE53WVdObEp6dGNiaUFnSUNBZ0lDQWdJQ0J5WlhSMWNtNGdjMk5oZEhSbGNsQnNiM1FnWVhNZ1JFY3VVMk5oZEhSbGNsQnNiM1JXYVdWM1pYSTdYRzRnSUNBZ0lDQWdJSDFjYmlBZ0lDQWdJSDFjYmlBZ0lDQjlJR05oZEdOb0lDaGxLU0I3WEc0Z0lDQWdJQ0JuY205ckxuTm9aV3hzTG1WeWNtOXlLQ2RFYVcxbGJuTnBiMjVoYkdsMGVTQnlaV1IxWTNScGIyNGdabUZwYkdWa0p5azdYRzRnSUNBZ0lDQmpiMjV6YjJ4bExtVnljbTl5S0dVcE8xeHVJQ0FnSUNBZ2NHY3VZMnh2YzJVb0tUdGNiaUFnSUNBZ0lHbG1JQ2h6WTJGMGRHVnlVR3h2ZENsY2JpQWdJQ0FnSUNBZ2RXa3VjMlYwVlhCa1lYUmxTVzVrYVdOaGRHOXlLQ2h6WTJGMGRHVnlVR3h2ZENCaGN5QkVSeTVUWTJGMGRHVnlVR3h2ZEZacFpYZGxjaWt1Y205dmRDd2dabUZzYzJVcE8xeHVJQ0FnSUgxY2JpQWdmVHRjYmlBZ2NtVjBkWEp1SUc1bGR5QlFjbTl0YVhObFBFUkhMbE5qWVhSMFpYSlFiRzkwVm1sbGQyVnlJSHdnZFc1a1pXWnBibVZrUGloaGMzbHVZeUFvY21WemIyeDJaU3dnY21WcVpXTjBLU0E5UGlCN1hHNGdJQ0FnZEhKNUlIdGNiaUFnSUNBZ0lHbG1JQ2gxYVU5d2RHbHZibk11Wm1GemRGSnZkME52ZFc1MElDWW1JSFJoWW14bExuSnZkME52ZFc1MElENGdkV2xQY0hScGIyNXpMbVpoYzNSU2IzZERiM1Z1ZENBbUppQWhkV2xQY0hScGIyNXpXMEpaVUVGVFUxOU1RVkpIUlY5RVFWUkJYMWRCVWs1SlRrZGRLU0I3WEc0Z0lDQWdJQ0FnSUhWcExtUnBZV3h2WnlncFhHNGdJQ0FnSUNBZ0lDQWdMbUZrWkNoMWFTNWthWFpVWlhoMEtDZEJibUZzZVhOcGN5QnRhV2RvZENCMFlXdGxJSE5sZG1WeVlXd2diV2x1ZFhSbGN5NGdSRzhnZVc5MUlIZGhiblFnZEc4Z1kyOXVkR2x1ZFdVL0p5a3BYRzRnSUNBZ0lDQWdJQ0FnTG05dVQwc29ZWE41Ym1NZ0tDa2dQVDRnZTF4dUlDQWdJQ0FnSUNBZ0lDQWdkSEo1SUh0Y2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnWTI5dWMzUWdjbVZ6SUQwZ1lYZGhhWFFnWkc5U1pXUjFZMlVvS1R0Y2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnY21WemIyeDJaU2h5WlhNcE8xeHVJQ0FnSUNBZ0lDQWdJQ0FnZlNCallYUmphQ0FvWlNrZ2UxeHVJQ0FnSUNBZ0lDQWdJQ0FnSUNCeVpXcGxZM1FvWlNrN1hHNGdJQ0FnSUNBZ0lDQWdJQ0I5WEc0Z0lDQWdJQ0FnSUNBZ2ZTbGNiaUFnSUNBZ0lDQWdJQ0F1YjI1RFlXNWpaV3dvS0NrZ1BUNGdjbVZ6YjJ4MlpTaDFibVJsWm1sdVpXUXBLVnh1SUNBZ0lDQWdJQ0FnSUM1emFHOTNLQ2s3WEc0Z0lDQWdJQ0I5SUdWc2MyVWdlMXh1SUNBZ0lDQWdJQ0JqYjI1emRDQnlaWE1nUFNCaGQyRnBkQ0JrYjFKbFpIVmpaU2dwTzF4dUlDQWdJQ0FnSUNCeVpYTnZiSFpsS0hKbGN5azdYRzRnSUNBZ0lDQjlYRzRnSUNBZ2ZTQmpZWFJqYUNBb1pTa2dlMXh1SUNBZ0lDQWdjbVZxWldOMEtHVXBPMXh1SUNBZ0lIMWNiaUFnZlNrN1hHNTlYRzRpWFgwPSIsIi8qKiBFcnJvciAmIGluZm8gbWVzc2FnZXMgKi9cbmV4cG9ydCB2YXIgRVJST1JfTVNHO1xuKGZ1bmN0aW9uIChFUlJPUl9NU0cpIHtcbiAgICBFUlJPUl9NU0dbXCJOT19EQVRBRlJBTUVcIl0gPSBcIk5vIGRhdGFmcmFtZSBpcyBvcGVuZWRcIjtcbiAgICBFUlJPUl9NU0dbXCJOT19NSVNTSU5HX1ZBTFVFU1wiXSA9IFwiTm8gbWlzc2luZyB2YWx1ZXNcIjtcbiAgICBFUlJPUl9NU0dbXCJPTkVfQVZBSUxBQkxFX0ZFQVRVUkVcIl0gPSBcIk5vdCBlbm91Z2ggb2YgZmVhdHVyZSBjb2x1bW5zIHRvIGFwcGx5IGltcHV0YXRpb24gdXNpbmcgdGhlIEtOTiBtZXRob2RcIjtcbiAgICBFUlJPUl9NU0dbXCJPTkVfRkVBVFVSRV9TRUxFQ1RFRFwiXSA9IFwiSW1wdXRhdGlvbiBjYW5ub3QgYmUgYXBwbGllZCB0b1wiO1xuICAgIEVSUk9SX01TR1tcIlVOU1VQUE9SVEVEX0NPTFVNTl9UWVBFXCJdID0gXCJVbnN1cHBvcnRlZCBjb2x1bW4gdHlwZVwiO1xuICAgIEVSUk9SX01TR1tcIlVOU1VQUE9SVEVEX0lNUFVUQVRJT05fU1RSQVRFR1lcIl0gPSBcIlVuc3VwcG9ydGVkIGltcHV0YXRpb24gc3RyYXRlZ3lcIjtcbiAgICBFUlJPUl9NU0dbXCJLTk5fQ0FOTk9UX0JFX0FQUExJRURcIl0gPSBcIktOTiBpbXB1dGVyIGNhbm5vdCBiZSBhcHBsaWVkOiBubyBjb2x1bW5zIHRvIGJlIHVzZWQgYXMgZmVhdHVyZXNcIjtcbiAgICBFUlJPUl9NU0dbXCJLTk5fTk9fVEFSR0VUX0NPTFVNTlNcIl0gPSBcIktOTiBpbXB1dGVyIGNhbm5vdCBiZSBhcHBsaWVkOiBubyBjb2x1bW5zIHdpdGggbWlzc2luZyB2YWx1ZXNcIjtcbiAgICBFUlJPUl9NU0dbXCJLTk5fTk9fRkVBVFVSRV9DT0xVTU5TXCJdID0gXCJLTk4gaW1wdXRlciBjYW5ub3QgYmUgYXBwbGllZDogbm8gZmVhdHVyZSBjb2x1bW5zXCI7XG4gICAgRVJST1JfTVNHW1wiS05OX05PVF9FTk9VR0hfT0ZfUk9XU1wiXSA9IFwiS05OIGltcHV0ZXIgY2Fubm90IGJlIGFwcGxpZWQ6IG5vdCBlbm91Z2ggb2Ygcm93c1wiO1xuICAgIEVSUk9SX01TR1tcIktOTl9JTVBPU1NJQkxFX0lNUFVUQVRJT05cIl0gPSBcIkltcHV0YXRpb24gaXMgaW1wb3NzaWJsZSwgbm8gZmVhdHVyZXMgY2FuIGJlIHVzZWRcIjtcbiAgICBFUlJPUl9NU0dbXCJJTkNPUlJFQ1RfTkVJR0hCT1JTXCJdID0gXCJJbmNvcnJlY3QgbnVtYmVyIG9mIG5laWdoYm9yc1wiO1xuICAgIEVSUk9SX01TR1tcIktOTl9GQUlMU1wiXSA9IFwiS05OIElNUFVUQVRJT04gRkFJTFNcIjtcbiAgICBFUlJPUl9NU0dbXCJDT1JFX0lTU1VFXCJdID0gXCJDb3JlIGlzc3VlXCI7XG4gICAgRVJST1JfTVNHW1wiRkFJTEVEX1RPX0lNUFVURVwiXSA9IFwiRmFpbGVkIHRvIGltcHV0ZVwiO1xuICAgIEVSUk9SX01TR1tcIlVOU1VQUE9SVEVEX0ZJTExfVkFMVUVfVFlQRVwiXSA9IFwiVW5zdXBwb3J0ZWQgZmlsbCB2YWx1ZSB0eXBlXCI7XG4gICAgRVJST1JfTVNHW1wiRU1QVFlfQ09MVU1OXCJdID0gXCJDb2x1bW4gY29udGFpbnMganVzdCBudWxsIHZhbHVlc1wiO1xuICAgIEVSUk9SX01TR1tcIkZBSUxTX1RPX1BSRURJQ1RfSU1QVVRBVElPTl9GQUlMU1wiXSA9IFwiRmFpbGVkIHRvIHByZWRpY3QgaW1wdXRhdGlvbiBmYWlsc1wiO1xuICAgIEVSUk9SX01TR1tcIldST05HX1BSRURJQ1RJT05TXCJdID0gXCJ3cm9uZyBldmFsdWF0aW9uIG9mIEtOTiBpbXB1dGF0aW9uIGZhaWxzXCI7XG59KShFUlJPUl9NU0cgfHwgKEVSUk9SX01TRyA9IHt9KSk7XG47XG4vKiogU3VmZml4IHVzZWQgZm9yIGNvbHVtbiBjb3B5ICovXG5leHBvcnQgY29uc3QgQ09QWV9TVUZGSVggPSAnY29weSc7XG4vKiogVUkgdGl0bGVzICovXG5leHBvcnQgdmFyIFRJVExFO1xuKGZ1bmN0aW9uIChUSVRMRSkge1xuICAgIFRJVExFW1wiS05OX0lNUFVURVJcIl0gPSBcIkltcHV0ZVwiO1xuICAgIFRJVExFW1wiVEFCTEVcIl0gPSBcIlRhYmxlXCI7XG4gICAgVElUTEVbXCJJTl9QTEFDRVwiXSA9IFwiSW4tcGxhY2VcIjtcbiAgICBUSVRMRVtcIkNPTFVNTlNcIl0gPSBcIkltcHV0ZVwiO1xuICAgIFRJVExFW1wiRkVBVFVSRVNcIl0gPSBcIlVzaW5nXCI7XG4gICAgVElUTEVbXCJDQU5DRUxcIl0gPSBcIkNBTkNFTFwiO1xuICAgIFRJVExFW1wiUlVOXCJdID0gXCJSVU5cIjtcbiAgICBUSVRMRVtcIk9LXCJdID0gXCJPS1wiO1xuICAgIFRJVExFW1wiTkVJR0hCT1JTXCJdID0gXCJOZWlnaGJvcnNcIjtcbiAgICBUSVRMRVtcIkRJU1RBTkNFXCJdID0gXCJEaXN0YW5jZVwiO1xuICAgIFRJVExFW1wiRklMTFwiXSA9IFwiRmlsbFwiO1xuICAgIFRJVExFW1wiTUFSS1wiXSA9IFwiTWFya1wiO1xuICAgIFRJVExFW1wiU0lNUExFX0lNUFVURVJcIl0gPSBcIlNpbXBsZSBpbXB1dGVcIjtcbiAgICBUSVRMRVtcIlNFVFRJTkdTXCJdID0gXCJTZXR0aW5nc1wiO1xuICAgIFRJVExFW1wiS0VFUF9FTVBUWVwiXSA9IFwiS2VlcCBlbXB0eVwiO1xufSkoVElUTEUgfHwgKFRJVExFID0ge30pKTtcbjtcbi8qKiBIZWxwIGxpbmtzICovXG5leHBvcnQgY29uc3QgS05OX0lNUFVURVIgPSAnL2hlbHAvdHJhbnNmb3JtL21pc3NpbmctdmFsdWVzLWltcHV0YXRpb24nO1xuLyoqIFRvb2x0aXBzICovXG5leHBvcnQgdmFyIEhJTlQ7XG4oZnVuY3Rpb24gKEhJTlQpIHtcbiAgICBISU5UW1wiVEFSR0VUXCJdID0gXCJDb2x1bW5zIHdpdGggbWlzc2luZyB2YWx1ZXMgdGhhdCBtdXN0IGJlIGZpbGxlZFwiO1xuICAgIEhJTlRbXCJGRUFUVVJFU1wiXSA9IFwiQ29sdW1ucyB3aXRoIGZlYXR1cmVzIHRvIGJlIHVzZWQgZm9yIGRldGVybWluaW5nIHRoZSAnbmVhcmVzdCcgZWxlbWVudHMgaW4gdGhlIEtOTiBtZXRob2RcIjtcbiAgICBISU5UW1wiSU5fUExBQ0VcIl0gPSBcIkRlZmluZXMgd2hldGhlciB0byB1c2UgaW4tcGxhY2UgaW1wdXRhdGlvbiBvciBhZGQgYSBuZXcgY29sdW1uIHdpdGhvdXQgbWlzc2luZyB2YWx1ZXNcIjtcbiAgICBISU5UW1wiTUVUUklDXCJdID0gXCJUeXBlIG9mIG1ldHJpYyBiZXR3ZWVuIHRoZSBmZWF0dXJlIHZhbHVlc1wiO1xuICAgIEhJTlRbXCJXRUlHSFRcIl0gPSBcIldlaWdodFwiO1xuICAgIEhJTlRbXCJORUlHSEJPUlNcIl0gPSBcIk5laWdoYm9ycyBjb3VudCB1c2VkIGluIHRoZSBLTk4gbWV0aG9kXCI7XG4gICAgSElOVFtcIkRJU1RBTkNFXCJdID0gXCJUeXBlIG9mIGRpc3RhbmNlIGJldHdlZW4gZWxlbWVudHMgd2l0aCB0aGUgc3BlY2lmaWVkIGZlYXR1cmVzXCI7XG4gICAgSElOVFtcIk1FVFJJQ19TRVRUSU5HU1wiXSA9IFwiU2hvdyBhZGRpdGlvbmFsIG9wdGlvbnNcIjtcbiAgICBISU5UW1wiRklMTF9GQUlMRURfSVRFTVNcIl0gPSBcIkltcHV0ZSBtaXNzaW5nIHZhbHVlcyB1c2luZyBhIHNpbXBsZSBhcHByb2FjaDogbWVhbiwgbWVkaWFuIG9yIG1vc3QgZnJlcXVlbnRcIjtcbiAgICBISU5UW1wiTUFSS19GQUlMRURfSVRFTVNcIl0gPSBcIk1hcmsgbWlzc2luZyB2YWx1ZXMgY2VsbHMgd2l0aCBhIGNvbG9yXCI7XG4gICAgSElOVFtcIkZJTExfVkFMVUVcIl0gPSBcIkZpbGwgdmFsdWVcIjtcbiAgICBISU5UW1wiSU1QVVRBVElPTl9TRVRUSU5HU1wiXSA9IFwiU2ltcGxlIGltcHV0YXRpb24gc2V0dGluZ3NcIjtcbiAgICBISU5UW1wiS0VFUF9FTVBUWVwiXSA9IFwiRGVmaW5lcyB3aGV0aGVyIHRvIGtlZXAgZW1wdHkgbWlzc2luZyB2YWx1ZXMgZmFpbGVkIHRvIGJlIGltcHV0ZWQgT1IgZmlsbCB0aGVtIHVzaW5nIHNpbXBsZSBpbXB1dGF0aW9uXCI7XG59KShISU5UIHx8IChISU5UID0ge30pKTtcbjtcbiIsIi8vIFRvb2xzIGZvciBtaXNzaW5nIHZhbHVlcyBpbXB1dGF0aW9uIHVzaW5nIHRoZSBrLW5lYXJlc3QgbmVpZ2hib3JzIG1ldGhvZFxuaW1wb3J0ICogYXMgZ3JvayBmcm9tICdkYXRhZ3Jvay1hcGkvZ3Jvayc7XG5pbXBvcnQgKiBhcyBERyBmcm9tICdkYXRhZ3Jvay1hcGkvZGcnO1xuaW1wb3J0IHsgRVJST1JfTVNHLCBDT1BZX1NVRkZJWCB9IGZyb20gJy4vdWktY29uc3RhbnRzJztcbi8qKiBDb2x1bW4gdHlwZXMgc3VwcG9ydGVkIGJ5IHRoZSBtaXNzaW5nIHZhbHVlcyBpbXB1dGVyICovXG5leHBvcnQgY29uc3QgU1VQUE9SVEVEX0NPTFVNTl9UWVBFUyA9IFtcbiAgICBERy5DT0xVTU5fVFlQRS5JTlQsXG4gICAgREcuQ09MVU1OX1RZUEUuRkxPQVQsXG4gICAgREcuQ09MVU1OX1RZUEUuU1RSSU5HLFxuICAgIERHLkNPTFVNTl9UWVBFLkRBVEVfVElNRSxcbiAgICBERy5DT0xVTU5fVFlQRS5RTlVNLFxuXTtcbi8qKiBSZXR1cm4gbnVsbCB2YWx1ZSB3aXRoIHJlc3BlY3QgdG8gdGhlIGNvbHVtbiB0eXBlICovXG5leHBvcnQgZnVuY3Rpb24gZ2V0TnVsbFZhbHVlKGNvbCkge1xuICAgIHN3aXRjaCAoY29sLnR5cGUpIHtcbiAgICAgICAgY2FzZSBERy5DT0xVTU5fVFlQRS5JTlQ6XG4gICAgICAgICAgICByZXR1cm4gREcuSU5UX05VTEw7XG4gICAgICAgIGNhc2UgREcuQ09MVU1OX1RZUEUuRkxPQVQ6XG4gICAgICAgICAgICByZXR1cm4gREcuRkxPQVRfTlVMTDtcbiAgICAgICAgY2FzZSBERy5DT0xVTU5fVFlQRS5RTlVNOlxuICAgICAgICAgICAgcmV0dXJuIERHLkZMT0FUX05VTEw7XG4gICAgICAgIGNhc2UgREcuQ09MVU1OX1RZUEUuREFURV9USU1FOlxuICAgICAgICAgICAgcmV0dXJuIERHLkZMT0FUX05VTEw7XG4gICAgICAgIGNhc2UgREcuQ09MVU1OX1RZUEUuU1RSSU5HOlxuICAgICAgICAgICAgcmV0dXJuIGNvbC5tYXg7XG4gICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoRVJST1JfTVNHLlVOU1VQUE9SVEVEX0NPTFVNTl9UWVBFKTtcbiAgICB9XG59XG4vKiogTWV0cmljIHR5cGVzIChiZXR3ZWVuIGNvbHVtbiBlbGVtZW50cykgKi9cbmV4cG9ydCB2YXIgTUVUUklDX1RZUEU7XG4oZnVuY3Rpb24gKE1FVFJJQ19UWVBFKSB7XG4gICAgTUVUUklDX1RZUEVbXCJPTkVfSE9UXCJdID0gXCJPbmUtaG90XCI7XG4gICAgTUVUUklDX1RZUEVbXCJESUZGRVJFTkNFXCJdID0gXCJEaWZmZXJlbmNlXCI7XG59KShNRVRSSUNfVFlQRSB8fCAoTUVUUklDX1RZUEUgPSB7fSkpO1xuO1xuLyoqIERpc3RhbmNlIHR5cGVzIChvdmVyIHNldmVyYWwgY29sdW1ucykuICovXG5leHBvcnQgdmFyIERJU1RBTkNFX1RZUEU7XG4oZnVuY3Rpb24gKERJU1RBTkNFX1RZUEUpIHtcbiAgICBESVNUQU5DRV9UWVBFW1wiRVVDTElERUFOXCJdID0gXCJFdWNsaWRlYW5cIjtcbiAgICBESVNUQU5DRV9UWVBFW1wiTUFOSEFUVEFOXCJdID0gXCJNYW5oYXR0YW5cIjtcbn0pKERJU1RBTkNFX1RZUEUgfHwgKERJU1RBTkNFX1RZUEUgPSB7fSkpO1xuO1xuLyoqIERlZmF1bHQgdmFsdWVzICovXG5leHBvcnQgdmFyIERFRkFVTFQ7XG4oZnVuY3Rpb24gKERFRkFVTFQpIHtcbiAgICBERUZBVUxUW0RFRkFVTFRbXCJXRUlHSFRcIl0gPSAxXSA9IFwiV0VJR0hUXCI7XG4gICAgREVGQVVMVFtERUZBVUxUW1wiTkVJR0hCT1JTXCJdID0gNF0gPSBcIk5FSUdIQk9SU1wiO1xuICAgIERFRkFVTFRbREVGQVVMVFtcIklOX1BMQUNFXCJdID0gMV0gPSBcIklOX1BMQUNFXCI7XG4gICAgREVGQVVMVFtERUZBVUxUW1wiU0VMRUNURURcIl0gPSAxXSA9IFwiU0VMRUNURURcIjtcbiAgICBERUZBVUxUW0RFRkFVTFRbXCJLRUVQX0VNUFRZXCJdID0gMF0gPSBcIktFRVBfRU1QVFlcIjtcbn0pKERFRkFVTFQgfHwgKERFRkFVTFQgPSB7fSkpO1xuO1xuLyoqIE1pbiBudW1iZXIgb2YgbmVpZ2hib3JzIGZvciBLTk4gKi9cbmV4cG9ydCBjb25zdCBNSU5fTkVJR0hCT1JTID0gMTtcbi8qKiBJbXB1dGUgbWlzc2luZyB2YWx1ZXMgdXNpbmcgdGhlIEtOTiBtZXRob2QgYW5kIHJldHVybnMgYW4gYXJyYXkgb2YgaXRlbXMgZm9yIHdoaWNoIGFuIGltcHV0YXRpb24gZmFpbHMgKi9cbmV4cG9ydCBmdW5jdGlvbiBpbXB1dGUoZGYsIHRhcmdldENvbE5hbWVzLCBmZWF0dXJlc01ldHJpY3MsIG1pc3NpbmdWYWxzSW5kaWNlcywgZGlzdGFuY2UsIG5laWdoYm9ycywgaW5QbGFjZSkge1xuICAgIC8vIDEuIENoZWNrIGlucHV0cyBjb21wbGV0bmVzc1xuICAgIGlmIChuZWlnaGJvcnMgPCBNSU5fTkVJR0hCT1JTKVxuICAgICAgICB0aHJvdyBuZXcgRXJyb3IoRVJST1JfTVNHLklOQ09SUkVDVF9ORUlHSEJPUlMpO1xuICAgIGlmIChkZi5yb3dDb3VudCA8IDIpXG4gICAgICAgIHRocm93IG5ldyBFcnJvcihFUlJPUl9NU0cuS05OX05PVF9FTk9VR0hfT0ZfUk9XUyk7XG4gICAgaWYgKHRhcmdldENvbE5hbWVzLmxlbmd0aCA9PT0gMClcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKEVSUk9SX01TRy5LTk5fTk9fVEFSR0VUX0NPTFVNTlMpO1xuICAgIGlmIChmZWF0dXJlc01ldHJpY3Muc2l6ZSA9PT0gMClcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKEVSUk9SX01TRy5LTk5fTk9fRkVBVFVSRV9DT0xVTU5TKTtcbiAgICBpZiAoZmVhdHVyZXNNZXRyaWNzLnNpemUgPT09IDEpXG4gICAgICAgIHRhcmdldENvbE5hbWVzLmZvckVhY2goKG5hbWUpID0+IHtcbiAgICAgICAgICAgIGlmIChmZWF0dXJlc01ldHJpY3MuaGFzKG5hbWUpKVxuICAgICAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgJHtFUlJPUl9NU0cuS05OX05PX0ZFQVRVUkVfQ09MVU1OU30gY2FuIGJlIHVzZWQgZm9yIHRoZSBjb2x1bW4gJyR7bmFtZX0nYCk7XG4gICAgICAgIH0pO1xuICAgIHRhcmdldENvbE5hbWVzLmZvckVhY2goKG5hbWUpID0+IHtcbiAgICAgICAgaWYgKCFtaXNzaW5nVmFsc0luZGljZXMuaGFzKG5hbWUpKVxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGAke0VSUk9SX01TRy5LTk5fRkFJTFN9OiAke0VSUk9SX01TRy5XUk9OR19QUkVESUNUSU9OU31gKTtcbiAgICB9KTtcbiAgICBjb25zdCBjb2x1bW5zID0gZGYuY29sdW1ucztcbiAgICAvLyAyLiBJbXB1dGF0aW9uXG4gICAgdGFyZ2V0Q29sTmFtZXMuZm9yRWFjaCgobmFtZSkgPT4ge1xuICAgICAgICBpZiAoIVNVUFBPUlRFRF9DT0xVTU5fVFlQRVMuaW5jbHVkZXMoY29sdW1ucy5ieU5hbWUobmFtZSkudHlwZSkpXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoRVJST1JfTVNHLlVOU1VQUE9SVEVEX0NPTFVNTl9UWVBFKTtcbiAgICB9KTtcbiAgICBmZWF0dXJlc01ldHJpY3MuZm9yRWFjaCgodmFsLCBuYW1lKSA9PiB7XG4gICAgICAgIGlmICghU1VQUE9SVEVEX0NPTFVNTl9UWVBFUy5pbmNsdWRlcyhkZi5nZXRDb2wobmFtZSkudHlwZSkpXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoRVJST1JfTVNHLlVOU1VQUE9SVEVEX0NPTFVNTl9UWVBFKTtcbiAgICB9KTtcbiAgICAvKiogRmFpbGVkIHRvIGltcHV0ZSBpdGVtcyAqL1xuICAgIGNvbnN0IGZhaWxlZFRvSW1wdXRlID0gbmV3IE1hcCgpO1xuICAgIC8vIDIuIE1pc3NpbmcgdmFsdWVzIGltcHV0YXRpb24gaW4gZWFjaCB0YXJnZXQgY29sdW1uXG4gICAgdGFyZ2V0Q29sTmFtZXMuZm9yRWFjaCgobmFtZSkgPT4ge1xuICAgICAgICBjb25zdCBjb2wgPSBjb2x1bW5zLmJ5TmFtZShuYW1lKTtcbiAgICAgICAgY29uc3QgbnVsbFZhbHVlID0gZ2V0TnVsbFZhbHVlKGNvbCk7XG4gICAgICAgIGNvbnN0IGxlbiA9IGNvbC5sZW5ndGg7XG4gICAgICAgIGNvbnN0IHNvdXJjZSA9IGNvbC5nZXRSYXdEYXRhKCk7XG4gICAgICAgIGNvbnN0IGZyZXF1ZW5jaWVzID0gbmV3IFVpbnQxNkFycmF5KGNvbC5jYXRlZ29yaWVzLmxlbmd0aCk7XG4gICAgICAgIGNvbnN0IGZlYXR1cmVTb3VyY2UgPSBbXTtcbiAgICAgICAgY29uc3QgZmVhdHVyZU51bGxWYWwgPSBbXTtcbiAgICAgICAgY29uc3QgbWV0cmljRnVuYyA9IFtdO1xuICAgICAgICBjb25zdCBmYWlsZWRUb0ltcHV0ZUluZGljZXMgPSBbXTtcbiAgICAgICAgLy8gY3JlYXRlIGZlYXR1cmVzIHRvb2xzXG4gICAgICAgIGZlYXR1cmVzTWV0cmljcy5mb3JFYWNoKChtZXRyaWNJbmZvLCBuYW1lKSA9PiB7XG4gICAgICAgICAgICBpZiAobmFtZSAhPT0gY29sLm5hbWUpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBmZWF0dXJlID0gY29sdW1ucy5ieU5hbWUobmFtZSk7XG4gICAgICAgICAgICAgICAgZmVhdHVyZVNvdXJjZS5wdXNoKGZlYXR1cmUuZ2V0UmF3RGF0YSgpKTtcbiAgICAgICAgICAgICAgICBmZWF0dXJlTnVsbFZhbC5wdXNoKGdldE51bGxWYWx1ZShmZWF0dXJlKSk7XG4gICAgICAgICAgICAgICAgc3dpdGNoIChtZXRyaWNJbmZvLnR5cGUpIHtcbiAgICAgICAgICAgICAgICAgICAgY2FzZSBNRVRSSUNfVFlQRS5ESUZGRVJFTkNFOlxuICAgICAgICAgICAgICAgICAgICAgICAgbWV0cmljRnVuYy5wdXNoKChhLCBiKSA9PiBtZXRyaWNJbmZvLndlaWdodCAqIE1hdGguYWJzKGEgLSBiKSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICAgICAgY2FzZSBNRVRSSUNfVFlQRS5PTkVfSE9UOlxuICAgICAgICAgICAgICAgICAgICAgICAgbWV0cmljRnVuYy5wdXNoKChhLCBiKSA9PiBtZXRyaWNJbmZvLndlaWdodCAqICgoYSA9PT0gYikgPyAwIDogMSkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH0pO1xuICAgICAgICBjb25zdCBmZWF0dXJlc0NvdW50ID0gZmVhdHVyZVNvdXJjZS5sZW5ndGg7XG4gICAgICAgIGNvbnN0IHByb3BlckluZGljZXMgPSBuZXcgVWludDMyQXJyYXkoZmVhdHVyZVNvdXJjZS5sZW5ndGgpO1xuICAgICAgICBjb25zdCBidWZmZXJWZWN0b3IgPSBuZXcgRmxvYXQzMkFycmF5KGZlYXR1cmVTb3VyY2UubGVuZ3RoKTtcbiAgICAgICAgbGV0IHByb3BlckluZGljZXNDb3VudCA9IDA7XG4gICAgICAgIC8vIGNsb3Nlc3QgaXRlbXNcbiAgICAgICAgY29uc3QgbmVhcmVzdEl0ZW1zID0gbmV3IEFycmF5KG5laWdoYm9ycyk7XG4gICAgICAgIGxldCBuZWFyZXN0SXRlbXNDb3VudCA9IDA7XG4gICAgICAgIC8vIGF1eGlsaXJ5IHZhcmlhYmxlc1xuICAgICAgICBsZXQgbWF4SW5kID0gMDtcbiAgICAgICAgbGV0IG1heERpc3QgPSAwO1xuICAgICAgICBsZXQgc3VtID0gMDtcbiAgICAgICAgbGV0IGZpbGxWYWx1ZSA9IDA7XG4gICAgICAgIC8qKiBPYnRhaW4gcHJvcGVyIGluZGljZXMgZm9yIEtOTjogZmVhdHVyZXMgd2l0aCBtaXNzaW5nIHZhbHMgYXJlIHNraXBwZWQgKi9cbiAgICAgICAgY29uc3QgZ2V0UHJvcGVySW5kZWNlcyA9IChpZHgpID0+IHtcbiAgICAgICAgICAgIHByb3BlckluZGljZXNDb3VudCA9IDA7XG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGZlYXR1cmVzQ291bnQ7ICsraSlcbiAgICAgICAgICAgICAgICBpZiAoZmVhdHVyZVNvdXJjZVtpXVtpZHhdICE9PSBmZWF0dXJlTnVsbFZhbFtpXSkge1xuICAgICAgICAgICAgICAgICAgICBwcm9wZXJJbmRpY2VzW3Byb3BlckluZGljZXNDb3VudF0gPSBpO1xuICAgICAgICAgICAgICAgICAgICArK3Byb3BlckluZGljZXNDb3VudDtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgIH07XG4gICAgICAgIC8qKiBDb21wdXRlIGJ1ZmZlciB2ZWN0b3IgKi9cbiAgICAgICAgY29uc3QgY29tcHV0ZUJ1ZmZlclZlY3RvciA9IChpZHgsIGN1cikgPT4ge1xuICAgICAgICAgICAgcHJvcGVySW5kaWNlcy5mb3JFYWNoKChwcm9wZXJJbmRleCwgaykgPT4ge1xuICAgICAgICAgICAgICAgIGJ1ZmZlclZlY3RvcltrXSA9IG1ldHJpY0Z1bmNbcHJvcGVySW5kZXhdKGZlYXR1cmVTb3VyY2VbcHJvcGVySW5kZXhdW2lkeF0sIGZlYXR1cmVTb3VyY2VbcHJvcGVySW5kZXhdW2N1cl0pO1xuICAgICAgICAgICAgfSk7XG4gICAgICAgIH07XG4gICAgICAgIC8qKiBFdWNsaWRlYW4gZGlzdGFuY2UgZnVuY3Rpb24gKi9cbiAgICAgICAgY29uc3QgZXVjbGlkZWFuRGlzdEZ1bmMgPSAoKSA9PiB7XG4gICAgICAgICAgICBsZXQgc3VtID0gMDtcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgcHJvcGVySW5kaWNlc0NvdW50OyArK2kpXG4gICAgICAgICAgICAgICAgc3VtICs9IGJ1ZmZlclZlY3RvcltpXSAqIGJ1ZmZlclZlY3RvcltpXTtcbiAgICAgICAgICAgIHJldHVybiBNYXRoLnNxcnQoc3VtKTtcbiAgICAgICAgfTtcbiAgICAgICAgLyoqIE1hbmhhdHRhbiBkaXN0YW5jZSBmdW5jdGlvbiAqL1xuICAgICAgICBjb25zdCBtYW5oYXR0YW5EaXN0RnVuYyA9ICgpID0+IHtcbiAgICAgICAgICAgIGxldCBzdW0gPSAwO1xuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBwcm9wZXJJbmRpY2VzQ291bnQ7ICsraSlcbiAgICAgICAgICAgICAgICBzdW0gKz0gTWF0aC5hYnMoYnVmZmVyVmVjdG9yW2ldKTtcbiAgICAgICAgICAgIHJldHVybiBNYXRoLnNxcnQoc3VtKTtcbiAgICAgICAgfTtcbiAgICAgICAgLyoqIFJldHVybiBub3JtIG9mIHRoZSBidWZmZXIgdmVjdG9yIChkaXN0YW5jZSBiZXR3ZWVuIGktdGggJiBqLXRoIGVsZW1lbnRzKSAqL1xuICAgICAgICBjb25zdCBkaXN0ID0gKGRpc3RhbmNlID09PSBESVNUQU5DRV9UWVBFLkVVQ0xJREVBTikgPyBldWNsaWRlYW5EaXN0RnVuYyA6IG1hbmhhdHRhbkRpc3RGdW5jO1xuICAgICAgICAvKiogQ2hlY2sgaWYgdGhlIGN1cnJlbnQgaXRlbSAoaS5lLiB0YWJsZSByb3cpIGNhbiBiZSB1c2VkICovXG4gICAgICAgIGNvbnN0IGNhbkl0ZW1CZVVzZWQgPSAoY3VyKSA9PiB7XG4gICAgICAgICAgICBpZiAoc291cmNlW2N1cl0gPT09IG51bGxWYWx1ZSlcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IHByb3BlckluZGljZXNDb3VudDsgKytpKVxuICAgICAgICAgICAgICAgIGlmIChmZWF0dXJlU291cmNlW3Byb3BlckluZGljZXNbaV1dW2N1cl0gPT09IGZlYXR1cmVOdWxsVmFsW3Byb3BlckluZGljZXNbaV1dKVxuICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfTtcbiAgICAgICAgLyoqIFJldHVybiB0aGUgbW9zdCBmcmVxdWVudCBvZiB0aGUgbmVhcmVzdCBpdGVtcyAoZm9yIGNhdGVnb3JpYWwgZGF0YSkgKi9cbiAgICAgICAgY29uc3QgbW9zdEZyZXF1ZW50T2ZUaGVOZWFyZXN0SXRlbXMgPSAoKSA9PiB7XG4gICAgICAgICAgICBmcmVxdWVuY2llcy5mb3JFYWNoKCh2LCBpLCBhcnIpID0+IGFycltpXSA9IDApO1xuICAgICAgICAgICAgbGV0IGkgPSAwO1xuICAgICAgICAgICAgZm9yIChpID0gMDsgaSA8IG5lYXJlc3RJdGVtc0NvdW50OyArK2kpXG4gICAgICAgICAgICAgICAgKytmcmVxdWVuY2llc1tzb3VyY2VbbmVhcmVzdEl0ZW1zW2ldLmluZGV4XV07XG4gICAgICAgICAgICBsZXQgbWF4RnJlcSA9IGZyZXF1ZW5jaWVzWzBdO1xuICAgICAgICAgICAgbGV0IG1heEZyZXFJZHggPSAwO1xuICAgICAgICAgICAgZnJlcXVlbmNpZXMuZm9yRWFjaCgodiwgaSkgPT4ge1xuICAgICAgICAgICAgICAgIGlmICh2ID4gbWF4RnJlcSkge1xuICAgICAgICAgICAgICAgICAgICBtYXhGcmVxID0gdjtcbiAgICAgICAgICAgICAgICAgICAgbWF4RnJlcUlkeCA9IGk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgICAgICByZXR1cm4gbWF4RnJlcUlkeDtcbiAgICAgICAgfTtcbiAgICAgICAgLyoqIEdldCBpbXB1dGF0aW9uIHZhbHVlICovXG4gICAgICAgIGNvbnN0IGdldEZpbGxWYWx1ZSA9IChpZHgpID0+IHtcbiAgICAgICAgICAgIGdldFByb3BlckluZGVjZXMoaWR4KTtcbiAgICAgICAgICAgIC8vIGNoZWNrIGF2YWlsYWJsZSBmZWF0dXJlc1xuICAgICAgICAgICAgaWYgKHByb3BlckluZGljZXNDb3VudCA9PT0gMClcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYCR7RVJST1JfTVNHLktOTl9JTVBPU1NJQkxFX0lNUFVUQVRJT059OiB0aGUgY29sdW1uIFwiJHtjb2wubmFtZX1cIiwgcm93ICR7aWR4ICsgMX1gKTtcbiAgICAgICAgICAgIG5lYXJlc3RJdGVtc0NvdW50ID0gMDtcbiAgICAgICAgICAgIC8vIHNlYXJjaCBmb3IgdGhlIGNsb3Nlc3QgaXRlbXNcbiAgICAgICAgICAgIGZvciAobGV0IGN1ciA9IDA7IGN1ciA8IGxlbjsgKytjdXIpXG4gICAgICAgICAgICAgICAgaWYgKGNhbkl0ZW1CZVVzZWQoY3VyKSAmJiAoY3VyICE9PSBpZHgpKSB7XG4gICAgICAgICAgICAgICAgICAgIC8vIDEpIGNvbXB1dGUgZGlzdGFuY2UgYmV0d2VlbiBjdXItdGggYW5kIGlkeC10aCBpdGVtc1xuICAgICAgICAgICAgICAgICAgICBjb21wdXRlQnVmZmVyVmVjdG9yKGlkeCwgY3VyKTtcbiAgICAgICAgICAgICAgICAgICAgY29uc3QgY3VyRGlzdCA9IGRpc3QoKTtcbiAgICAgICAgICAgICAgICAgICAgLy8gMikgaW5zZXJ0IHRoZSBjdXJyZW50IGl0ZW1cbiAgICAgICAgICAgICAgICAgICAgaWYgKG5lYXJlc3RJdGVtc0NvdW50IDwgbmVpZ2hib3JzKSB7XG4gICAgICAgICAgICAgICAgICAgICAgICBuZWFyZXN0SXRlbXNbbmVhcmVzdEl0ZW1zQ291bnRdID0geyBpbmRleDogY3VyLCBkaXN0OiBjdXJEaXN0IH07XG4gICAgICAgICAgICAgICAgICAgICAgICArK25lYXJlc3RJdGVtc0NvdW50O1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgICAgICAgICAgICAgLy8gMi4xKSBmaW5kIHRoZSBmYXJlc3RcbiAgICAgICAgICAgICAgICAgICAgICAgIG1heEluZCA9IDA7XG4gICAgICAgICAgICAgICAgICAgICAgICBtYXhEaXN0ID0gbmVhcmVzdEl0ZW1zWzBdLmRpc3Q7XG4gICAgICAgICAgICAgICAgICAgICAgICBmb3IgKGxldCBpID0gMTsgaSA8IG5lYXJlc3RJdGVtc0NvdW50OyArK2kpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgaWYgKG1heERpc3QgPCBuZWFyZXN0SXRlbXNbaV0uZGlzdCkge1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXhEaXN0ID0gbmVhcmVzdEl0ZW1zW2ldLmRpc3Q7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1heEluZCA9IGk7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICAgICAgLy8gMi4yKSByZXBsYWNlXG4gICAgICAgICAgICAgICAgICAgICAgICBpZiAoY3VyRGlzdCA8IG1heERpc3QpXG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgbmVhcmVzdEl0ZW1zW21heEluZF0gPSB7IGluZGV4OiBjdXIsIGRpc3Q6IGN1ckRpc3QgfTtcbiAgICAgICAgICAgICAgICAgICAgfSAvLyBlbHNlXG4gICAgICAgICAgICAgICAgfSAvLyBmb3IgY3VyXG4gICAgICAgICAgICAvLyBjaGVjayBmb3VuZCBuZWFyZXN0IGl0ZW1zXG4gICAgICAgICAgICBpZiAobmVhcmVzdEl0ZW1zQ291bnQgPT09IDApXG4gICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKGAke0VSUk9SX01TRy5LTk5fSU1QT1NTSUJMRV9JTVBVVEFUSU9OfTogdGhlIGNvbHVtbiBcIiR7Y29sLm5hbWV9XCIsIHJvdyAke2lkeCArIDF9YCk7XG4gICAgICAgICAgICBpZiAoY29sLnR5cGUgPT09IERHLkNPTFVNTl9UWVBFLlNUUklORylcbiAgICAgICAgICAgICAgICByZXR1cm4gbW9zdEZyZXF1ZW50T2ZUaGVOZWFyZXN0SXRlbXMoKTtcbiAgICAgICAgICAgIC8vIGNvbXB1dGUgZmlsbCB2YWx1ZVxuICAgICAgICAgICAgc3VtID0gMDtcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbmVhcmVzdEl0ZW1zQ291bnQ7ICsraSlcbiAgICAgICAgICAgICAgICBzdW0gKz0gc291cmNlW25lYXJlc3RJdGVtc1tpXS5pbmRleF07XG4gICAgICAgICAgICBmaWxsVmFsdWUgPSBzdW0gLyBuZWFyZXN0SXRlbXNDb3VudDtcbiAgICAgICAgICAgIGlmIChjb2wudHlwZSA9PT0gREcuQ09MVU1OX1RZUEUuSU5UKVxuICAgICAgICAgICAgICAgIHJldHVybiBNYXRoLnJvdW5kKGZpbGxWYWx1ZSk7XG4gICAgICAgICAgICByZXR1cm4gZmlsbFZhbHVlO1xuICAgICAgICB9OyAvLyBnZXRGaWxsVmFsdWVcbiAgICAgICAgaWYgKGluUGxhY2UpIHtcbiAgICAgICAgICAgIC8vIHVzZSBpbmRpY2VzIGZvdW5kIHByZXZpb3VzZWx5XG4gICAgICAgICAgICBmb3IgKGNvbnN0IGkgb2YgbWlzc2luZ1ZhbHNJbmRpY2VzLmdldChuYW1lKSlcbiAgICAgICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgICAgICBzb3VyY2VbaV0gPSBnZXRGaWxsVmFsdWUoaSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgZmFpbGVkVG9JbXB1dGVJbmRpY2VzLnB1c2goaSk7XG4gICAgICAgICAgICAgICAgICAgIGlmICghKGVyciBpbnN0YW5jZW9mIEVycm9yKSlcbiAgICAgICAgICAgICAgICAgICAgICAgIGdyb2suc2hlbGwuZXJyb3IoRVJST1JfTVNHLkNPUkVfSVNTVUUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChmYWlsZWRUb0ltcHV0ZUluZGljZXMubGVuZ3RoID4gMClcbiAgICAgICAgICAgICAgICBmYWlsZWRUb0ltcHV0ZS5zZXQobmFtZSwgZmFpbGVkVG9JbXB1dGVJbmRpY2VzKTtcbiAgICAgICAgICAgIC8vIHRvIHJlc2V0IHZpZXcgICAgICBcbiAgICAgICAgICAgIGNvbC5zZXQoMCwgY29sLmdldCgwKSk7XG4gICAgICAgIH0gLy8gaWZcbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAvL0B0cy1pZ25vcmVcbiAgICAgICAgICAgIGNvbnN0IGNvcHkgPSBjb2wuY2xvbmUoKTtcbiAgICAgICAgICAgIGxldCBpID0gMTtcbiAgICAgICAgICAgIGxldCBjb3B5TmFtZSA9IGAke25hbWV9KCR7Q09QWV9TVUZGSVh9KWA7XG4gICAgICAgICAgICAvLyBmaW5kIGFuIGFwcHJvcHJpYXRlIG5hbWVcbiAgICAgICAgICAgIHdoaWxlIChkZi5jb2x1bW5zLmNvbnRhaW5zKGNvcHlOYW1lKSkge1xuICAgICAgICAgICAgICAgIGNvcHlOYW1lID0gYCR7bmFtZX0oJHtDT1BZX1NVRkZJWH0gJHtpfSlgO1xuICAgICAgICAgICAgICAgICsraTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGNvcHkubmFtZSA9IGNvcHlOYW1lO1xuICAgICAgICAgICAgY29uc3QgY29weVNvdXJjZSA9IGNvcHkuZ2V0UmF3RGF0YSgpO1xuICAgICAgICAgICAgLy8gdXNlIGluZGljZXMgZm91bmQgcHJldmlvdXNlbHlcbiAgICAgICAgICAgIGZvciAoY29uc3QgaSBvZiBtaXNzaW5nVmFsc0luZGljZXMuZ2V0KG5hbWUpKVxuICAgICAgICAgICAgICAgIHRyeSB7XG4gICAgICAgICAgICAgICAgICAgIGNvcHlTb3VyY2VbaV0gPSBnZXRGaWxsVmFsdWUoaSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgIGNhdGNoIChlcnIpIHtcbiAgICAgICAgICAgICAgICAgICAgZmFpbGVkVG9JbXB1dGVJbmRpY2VzLnB1c2goaSk7XG4gICAgICAgICAgICAgICAgICAgIGlmICghKGVyciBpbnN0YW5jZW9mIEVycm9yKSlcbiAgICAgICAgICAgICAgICAgICAgICAgIGdyb2suc2hlbGwuZXJyb3IoRVJST1JfTVNHLkNPUkVfSVNTVUUpO1xuICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGlmIChmYWlsZWRUb0ltcHV0ZUluZGljZXMubGVuZ3RoID4gMClcbiAgICAgICAgICAgICAgICBmYWlsZWRUb0ltcHV0ZS5zZXQoY29weU5hbWUsIGZhaWxlZFRvSW1wdXRlSW5kaWNlcyk7XG4gICAgICAgICAgICBjb3B5LnNldCgwLCBjb3B5LmdldCgwKSk7XG4gICAgICAgICAgICBkZi5jb2x1bW5zLmFkZChjb3B5KTtcbiAgICAgICAgfSAvLyBlbHNlXG4gICAgfSk7XG4gICAgcmV0dXJuIGZhaWxlZFRvSW1wdXRlO1xufSAvLyBpbXB1dGVcbi8qKiBSZXR1cm4gaW5kaWNlcyBvZiBtaXNzaW5nIHZhbHVlcyBmb3IgZWFjaCBjb2x1bW4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXRNaXNzaW5nVmFsc0luZGljZXMoY29sdW1ucykge1xuICAgIGNvbnN0IG1pc1ZhbHNJbmRzID0gbmV3IE1hcCgpO1xuICAgIGZvciAoY29uc3QgY29sIG9mIGNvbHVtbnMpIHtcbiAgICAgICAgaWYgKCFTVVBQT1JURURfQ09MVU1OX1RZUEVTLmluY2x1ZGVzKGNvbC50eXBlKSlcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihFUlJPUl9NU0cuVU5TVVBQT1JURURfQ09MVU1OX1RZUEUpO1xuICAgICAgICBpZiAoY29sLnN0YXRzLm1pc3NpbmdWYWx1ZUNvdW50ID09PSAwKVxuICAgICAgICAgICAgY29udGludWU7XG4gICAgICAgIGNvbnN0IGluZGljZXMgPSBbXTtcbiAgICAgICAgY29uc3QgbnVsbFZhbHVlID0gZ2V0TnVsbFZhbHVlKGNvbCk7XG4gICAgICAgIGNvbC5nZXRSYXdEYXRhKCkuZm9yRWFjaCgodmFsLCBpZHgpID0+IHtcbiAgICAgICAgICAgIGlmICh2YWwgPT09IG51bGxWYWx1ZSlcbiAgICAgICAgICAgICAgICBpbmRpY2VzLnB1c2goaWR4KTtcbiAgICAgICAgfSk7XG4gICAgICAgIG1pc1ZhbHNJbmRzLnNldChjb2wubmFtZSwgaW5kaWNlcyk7XG4gICAgfVxuICAgIHJldHVybiBtaXNWYWxzSW5kcztcbn1cbi8qKiBQcmVkaWN0IGV4aXN0ZW5jZSBvZiBtaXNzaW5nIHZhbHVlcyBpbXB1dGF0aW9uIGZhaWxzICovXG5leHBvcnQgZnVuY3Rpb24gYXJlVGhlcmVGYWlscyh0YXJnZXRDb2xOYW1lcywgZmVhdHVyZUNvbE5hbWVzLCBtaXNWYWxzSW5kcykge1xuICAgIC8vIGNoZWNrIGZlYXR1cmUgY29sdW1uc1xuICAgIGZvciAoY29uc3QgbmFtZSBvZiBmZWF0dXJlQ29sTmFtZXMpXG4gICAgICAgIGlmICghbWlzVmFsc0luZHMuaGFzKG5hbWUpKVxuICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgIC8vIGNoZWNrIHRhcmdldCBjb2x1bW5zXG4gICAgZm9yIChjb25zdCB0YXJnZXQgb2YgdGFyZ2V0Q29sTmFtZXMpIHtcbiAgICAgICAgY29uc3QgaW5kaWNlcyA9IG1pc1ZhbHNJbmRzLmdldCh0YXJnZXQpO1xuICAgICAgICBpZiAoaW5kaWNlcyA9PT0gdW5kZWZpbmVkKVxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKEVSUk9SX01TRy5GQUlMU19UT19QUkVESUNUX0lNUFVUQVRJT05fRkFJTFMpO1xuICAgICAgICBmb3IgKGNvbnN0IGlkeCBvZiBpbmRpY2VzKSB7XG4gICAgICAgICAgICBsZXQgZmFpbFRvSW1wdXRlID0gdHJ1ZTtcbiAgICAgICAgICAgIGZvciAoY29uc3QgZmVhdHVyZSBvZiBmZWF0dXJlQ29sTmFtZXMpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBmZWF0dXJlSW5kcyA9IG1pc1ZhbHNJbmRzLmdldChmZWF0dXJlKTtcbiAgICAgICAgICAgICAgICBpZiAoZmVhdHVyZUluZHMgPT09IHVuZGVmaW5lZClcbiAgICAgICAgICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKEVSUk9SX01TRy5GQUlMU19UT19QUkVESUNUX0lNUFVUQVRJT05fRkFJTFMpO1xuICAgICAgICAgICAgICAgIGlmICghZmVhdHVyZUluZHMuaW5jbHVkZXMoaWR4KSkge1xuICAgICAgICAgICAgICAgICAgICBmYWlsVG9JbXB1dGUgPSBmYWxzZTtcbiAgICAgICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGZhaWxUb0ltcHV0ZSlcbiAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgfVxuICAgIH1cbiAgICByZXR1cm4gZmFsc2U7XG59IC8vIHByZWRpY3RGYWlsc1xuLyoqIFJldHVybnMgZmlyc3Qgbm9uLW51bGwgdmFsdWUgKi9cbmZ1bmN0aW9uIGdldEZpcnN0Tm9uTnVsbChjb2wpIHtcbiAgICBjb25zdCBudWxsVmFsdWUgPSBnZXROdWxsVmFsdWUoY29sKTtcbiAgICBjb25zdCByYXcgPSBjb2wuZ2V0UmF3RGF0YSgpO1xuICAgIGNvbnN0IGxlbiA9IHJhdy5sZW5ndGg7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBsZW47ICsraSlcbiAgICAgICAgaWYgKHJhd1tpXSAhPT0gbnVsbFZhbHVlKVxuICAgICAgICAgICAgcmV0dXJuIGNvbC5nZXQoaSk7XG4gICAgdGhyb3cgbmV3IEVycm9yKEVSUk9SX01TRy5FTVBUWV9DT0xVTU4pO1xufVxuLyoqIFJldHVybiBkZWZhdWx0IGZpbGwgdmFsdWUgd2l0aCByZXNwZWN0IHRvIHRoZSBjb2x1bW4gdHlwZSAqL1xuZnVuY3Rpb24gZ2V0RGVmYXVsdEZpbGxWYWx1ZShjb2wpIHtcbiAgICBzd2l0Y2ggKGNvbC50eXBlKSB7XG4gICAgICAgIGNhc2UgREcuQ09MVU1OX1RZUEUuU1RSSU5HOlxuICAgICAgICBjYXNlIERHLkNPTFVNTl9UWVBFLkRBVEVfVElNRTpcbiAgICAgICAgICAgIHJldHVybiBnZXRGaXJzdE5vbk51bGwoY29sKTsgLy8gVE9ETzogcmVwbGFjZSBieSBtb3N0IGZyZXF1ZW50XG4gICAgICAgIGNhc2UgREcuQ09MVU1OX1RZUEUuSU5UOlxuICAgICAgICBjYXNlIERHLkNPTFVNTl9UWVBFLkZMT0FUOlxuICAgICAgICBjYXNlIERHLkNPTFVNTl9UWVBFLlFOVU06XG4gICAgICAgICAgICByZXR1cm4gY29sLnN0YXRzLmF2ZztcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihFUlJPUl9NU0cuVU5TVVBQT1JURURfQ09MVU1OX1RZUEUpO1xuICAgIH1cbn1cbi8qKiBQZXJmb3JtIG1pc3NpbmcgdmFsdWVzIGltcHV0YXRpb24gdXNpbmcgdGhlIHNpbXBsZSBhcHByb2FjaCAqL1xuZXhwb3J0IGZ1bmN0aW9uIGltcHV0ZUZhaWxlZChkZiwgZmFpbGVkVG9JbXB1dGUpIHtcbiAgICBmYWlsZWRUb0ltcHV0ZS5mb3JFYWNoKChpbmRpY2VzLCBjb2xOYW1lKSA9PiB7XG4gICAgICAgIGNvbnN0IGNvbCA9IGRmLmNvbChjb2xOYW1lKTtcbiAgICAgICAgaWYgKGNvbCAhPT0gbnVsbCkge1xuICAgICAgICAgICAgaWYgKCFTVVBQT1JURURfQ09MVU1OX1RZUEVTLmluY2x1ZGVzKGNvbC50eXBlKSlcbiAgICAgICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoRVJST1JfTVNHLlVOU1VQUE9SVEVEX0NPTFVNTl9UWVBFKTtcbiAgICAgICAgICAgIGNvbnN0IGZpbGxWYWwgPSBnZXREZWZhdWx0RmlsbFZhbHVlKGNvbCk7XG4gICAgICAgICAgICBpbmRpY2VzLmZvckVhY2goKGlkeCkgPT4gY29sLnNldChpZHgsIGZpbGxWYWwpKTtcbiAgICAgICAgfVxuICAgIH0pO1xufVxuIiwiaW1wb3J0ICogYXMgZ3JvayBmcm9tICdkYXRhZ3Jvay1hcGkvZ3Jvayc7XG5pbXBvcnQgKiBhcyB1aSBmcm9tICdkYXRhZ3Jvay1hcGkvdWknO1xuaW1wb3J0ICogYXMgREcgZnJvbSAnZGF0YWdyb2stYXBpL2RnJztcbmltcG9ydCB7IFRJVExFLCBLTk5fSU1QVVRFUiwgRVJST1JfTVNHLCBISU5UIH0gZnJvbSAnLi91aS1jb25zdGFudHMnO1xuaW1wb3J0IHsgU1VQUE9SVEVEX0NPTFVNTl9UWVBFUywgTUVUUklDX1RZUEUsIERJU1RBTkNFX1RZUEUsIERFRkFVTFQsIE1JTl9ORUlHSEJPUlMsIGltcHV0ZSwgZ2V0TWlzc2luZ1ZhbHNJbmRpY2VzLCBhcmVUaGVyZUZhaWxzLCBpbXB1dGVGYWlsZWQgfSBmcm9tIFwiLi9rbm4taW1wdXRlclwiO1xuLyoqIFJldHVybiBkZWZhdWx0IHNldHRpbmcgb2YgdGhlIGZlYXR1cmUgbWV0cmljIGlucHV0cyAqL1xuZnVuY3Rpb24gZ2V0RmVhdHVyZUlucHV0U2V0dGluZ3ModHlwZSkge1xuICAgIHN3aXRjaCAodHlwZSkge1xuICAgICAgICBjYXNlIERHLkNPTFVNTl9UWVBFLlNUUklORzpcbiAgICAgICAgY2FzZSBERy5DT0xVTU5fVFlQRS5EQVRFX1RJTUU6XG4gICAgICAgICAgICByZXR1cm4ge1xuICAgICAgICAgICAgICAgIGRlZmF1bHRXZWlnaHQ6IERFRkFVTFQuV0VJR0hULFxuICAgICAgICAgICAgICAgIGRlZmF1bHRNZXRyaWM6IE1FVFJJQ19UWVBFLk9ORV9IT1QsXG4gICAgICAgICAgICAgICAgYXZhaWxhYmxlTWV0cmljczogW01FVFJJQ19UWVBFLk9ORV9IT1RdXG4gICAgICAgICAgICB9O1xuICAgICAgICBjYXNlIERHLkNPTFVNTl9UWVBFLklOVDpcbiAgICAgICAgY2FzZSBERy5DT0xVTU5fVFlQRS5GTE9BVDpcbiAgICAgICAgY2FzZSBERy5DT0xVTU5fVFlQRS5RTlVNOlxuICAgICAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgICAgICBkZWZhdWx0V2VpZ2h0OiBERUZBVUxULldFSUdIVCxcbiAgICAgICAgICAgICAgICBkZWZhdWx0TWV0cmljOiBNRVRSSUNfVFlQRS5ESUZGRVJFTkNFLFxuICAgICAgICAgICAgICAgIGF2YWlsYWJsZU1ldHJpY3M6IFtNRVRSSUNfVFlQRS5ESUZGRVJFTkNFLCBNRVRSSUNfVFlQRS5PTkVfSE9UXVxuICAgICAgICAgICAgfTtcbiAgICAgICAgZGVmYXVsdDpcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihFUlJPUl9NU0cuVU5TVVBQT1JURURfQ09MVU1OX1RZUEUpO1xuICAgIH1cbn1cbi8qKiBSdW4gdGhlIEtOTiBtaXNzaW5nIHZhbHVlcyBpbXB1dGVyICovXG5leHBvcnQgZnVuY3Rpb24gcnVuS05OSW1wdXRlcigpIHtcbiAgICAvKiogY3VycmVudCBkYXRhZnJhbWUgKi9cbiAgICBsZXQgZGYgPSBncm9rLnNoZWxsLnQ7XG4gICAgaWYgKGRmID09PSBudWxsKSB7XG4gICAgICAgIGdyb2suc2hlbGwud2FybmluZyhFUlJPUl9NU0cuTk9fREFUQUZSQU1FKTtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICAvKiogY29sdW1ucyB3aXRoIG1pc3NpbmcgdmFsdWVzICovXG4gICAgY29uc3QgY29sc1dpdGhNaXNzaW5nVmFscyA9IFtdO1xuICAgIC8qKiBuYW1lcyBvZiBjb2x1bW5zIHdpdGggbWlzc2luZyB2YWx1ZXMgKi9cbiAgICBjb25zdCBhdmFpbGFibGVUYXJnZXRDb2xzTmFtZXMgPSBbXTtcbiAgICAvKiogbmFtZXMgb2YgY29sdW1ucyB0aGF0IGNhbiBiZSB1c2VkIGFzIGZlYXR1cmVzICovXG4gICAgY29uc3QgYXZhaWxhYmxlRmVhdHVyZUNvbHNOYW1lcyA9IFtdO1xuICAgIC8vIGdldCBjb2x1bW5zIHdpdGggbWlzc2luZyB2YWxzICYgYXZhaWxhYmxlIGZlYXR1cmUgY29sc1xuICAgIGRmLmNvbHVtbnMudG9MaXN0KClcbiAgICAgICAgLmZpbHRlcigoY29sKSA9PiBTVVBQT1JURURfQ09MVU1OX1RZUEVTLmluY2x1ZGVzKGNvbC50eXBlKSlcbiAgICAgICAgLmZvckVhY2goKGNvbCkgPT4ge1xuICAgICAgICBhdmFpbGFibGVGZWF0dXJlQ29sc05hbWVzLnB1c2goY29sLm5hbWUpO1xuICAgICAgICBpZiAoY29sLnN0YXRzLm1pc3NpbmdWYWx1ZUNvdW50ID4gMCkge1xuICAgICAgICAgICAgY29sc1dpdGhNaXNzaW5nVmFscy5wdXNoKGNvbCk7XG4gICAgICAgICAgICBhdmFpbGFibGVUYXJnZXRDb2xzTmFtZXMucHVzaChjb2wubmFtZSk7XG4gICAgICAgIH1cbiAgICB9KTtcbiAgICAvLyBnZXQgaW5kaWNlcyBvZiBtaXNzaW5nIHZhbHVlczogY29sIG5hbWUgLT4gYXJyYXkgb2YgaW5kaWNlc1xuICAgIGNvbnN0IG1pc1ZhbHNJbmRzID0gZ2V0TWlzc2luZ1ZhbHNJbmRpY2VzKGNvbHNXaXRoTWlzc2luZ1ZhbHMpO1xuICAgIGlmIChjb2xzV2l0aE1pc3NpbmdWYWxzLmxlbmd0aCA9PT0gMCkge1xuICAgICAgICBncm9rLnNoZWxsLmluZm8oRVJST1JfTVNHLk5PX01JU1NJTkdfVkFMVUVTKTtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICBpZiAoYXZhaWxhYmxlRmVhdHVyZUNvbHNOYW1lcy5sZW5ndGggPT09IDEpIHtcbiAgICAgICAgZ3Jvay5zaGVsbC5lcnJvcihFUlJPUl9NU0cuT05FX0FWQUlMQUJMRV9GRUFUVVJFKTtcbiAgICAgICAgcmV0dXJuO1xuICAgIH1cbiAgICAvLyBJbi1wbGFjZSBjb21wb25lbnRzXG4gICAgbGV0IGluUGxhY2UgPSBERUZBVUxULklOX1BMQUNFID4gMDtcbiAgICBjb25zdCBpblBsYWNlSW5wdXQgPSB1aS5ib29sSW5wdXQoVElUTEUuSU5fUExBQ0UsIGluUGxhY2UsICgpID0+IHsgdmFyIF9hOyBpblBsYWNlID0gKF9hID0gaW5QbGFjZUlucHV0LnZhbHVlKSAhPT0gbnVsbCAmJiBfYSAhPT0gdm9pZCAwID8gX2EgOiBmYWxzZTsgfSk7XG4gICAgaW5QbGFjZUlucHV0LnNldFRvb2x0aXAoSElOVC5JTl9QTEFDRSk7XG4gICAgLy8gS2VlcCBlbXB0eSBmZWF0dXJlXG4gICAgbGV0IGtlZXBFbXB0eSA9IERFRkFVTFQuS0VFUF9FTVBUWSA+IDA7XG4gICAgY29uc3Qga2VlcEVtcHR5SW5wdXQgPSB1aS5ib29sSW5wdXQoVElUTEUuS0VFUF9FTVBUWSwga2VlcEVtcHR5LCAoKSA9PiB7IHZhciBfYTsga2VlcEVtcHR5ID0gKF9hID0ga2VlcEVtcHR5SW5wdXQudmFsdWUpICE9PSBudWxsICYmIF9hICE9PSB2b2lkIDAgPyBfYSA6IGZhbHNlOyB9KTtcbiAgICBrZWVwRW1wdHlJbnB1dC5zZXRUb29sdGlwKEhJTlQuS0VFUF9FTVBUWSk7XG4gICAgLy8gTmVpZ2hib3JzIGNvbXBvbmVudHNcbiAgICBsZXQgbmVpZ2hib3JzID0gREVGQVVMVC5ORUlHSEJPUlM7XG4gICAgY29uc3QgbmVpZ2hib3JzSW5wdXQgPSB1aS5pbnRJbnB1dChUSVRMRS5ORUlHSEJPUlMsIG5laWdoYm9ycywgKCkgPT4ge1xuICAgICAgICBjb25zdCB2YWwgPSBuZWlnaGJvcnNJbnB1dC52YWx1ZTtcbiAgICAgICAgaWYgKHZhbCA9PT0gbnVsbClcbiAgICAgICAgICAgIG5laWdoYm9yc0lucHV0LnZhbHVlID0gbmVpZ2hib3JzO1xuICAgICAgICBlbHNlIGlmICh2YWwgPj0gTUlOX05FSUdIQk9SUylcbiAgICAgICAgICAgIG5laWdoYm9ycyA9IHZhbDtcbiAgICAgICAgZWxzZVxuICAgICAgICAgICAgbmVpZ2hib3JzSW5wdXQudmFsdWUgPSBuZWlnaGJvcnM7XG4gICAgfSk7XG4gICAgbmVpZ2hib3JzSW5wdXQuc2V0VG9vbHRpcChISU5ULk5FSUdIQk9SUyk7XG4gICAgLy8gRGlzdGFuY2UgY29tcG9uZW50c1xuICAgIGxldCBkaXN0VHlwZSA9IERJU1RBTkNFX1RZUEUuRVVDTElERUFOO1xuICAgIGNvbnN0IGRpc3RUeXBlSW5wdXQgPSB1aS5jaG9pY2VJbnB1dChUSVRMRS5ESVNUQU5DRSwgZGlzdFR5cGUsIFtESVNUQU5DRV9UWVBFLkVVQ0xJREVBTiwgRElTVEFOQ0VfVFlQRS5NQU5IQVRUQU5dLCAoKSA9PiB7IHZhciBfYTsgcmV0dXJuIGRpc3RUeXBlID0gKF9hID0gZGlzdFR5cGVJbnB1dC52YWx1ZSkgIT09IG51bGwgJiYgX2EgIT09IHZvaWQgMCA/IF9hIDogRElTVEFOQ0VfVFlQRS5FVUNMSURFQU47IH0pO1xuICAgIGRpc3RUeXBlSW5wdXQuc2V0VG9vbHRpcChISU5ULkRJU1RBTkNFKTtcbiAgICAvLyBUYXJnZXQgY29sdW1ucyBjb21wb25lbnRzIChjb2xzIHdpdGggbWlzc2luZyB2YWx1ZXMgdG8gYmUgaW1wdXRlZClcbiAgICBsZXQgdGFyZ2V0Q29sTmFtZXMgPSBjb2xzV2l0aE1pc3NpbmdWYWxzLm1hcCgoY29sKSA9PiBjb2wubmFtZSk7XG4gICAgY29uc3QgdGFyZ2V0Q29sSW5wdXQgPSB1aS5jb2x1bW5zSW5wdXQoVElUTEUuQ09MVU1OUywgZGYsICgpID0+IHtcbiAgICAgICAgdGFyZ2V0Q29sTmFtZXMgPSB0YXJnZXRDb2xJbnB1dC52YWx1ZS5tYXAoKGNvbCkgPT4gY29sLm5hbWUpO1xuICAgICAgICBjaGVja0FwcGxpY2FiaWxpdHkoKTtcbiAgICB9LCB7IGF2YWlsYWJsZTogYXZhaWxhYmxlVGFyZ2V0Q29sc05hbWVzLCBjaGVja2VkOiBhdmFpbGFibGVUYXJnZXRDb2xzTmFtZXMgfSk7XG4gICAgdGFyZ2V0Q29sSW5wdXQuc2V0VG9vbHRpcChISU5ULlRBUkdFVCk7XG4gICAgLy8gRmVhdHVyZSBjb2x1bW5zIGNvbXBvbmVudHNcbiAgICBsZXQgc2VsZWN0ZWRGZWF0dXJlQ29sTmFtZXMgPSBhdmFpbGFibGVGZWF0dXJlQ29sc05hbWVzO1xuICAgIGNvbnN0IGZlYXR1cmVzSW5wdXQgPSB1aS5jb2x1bW5zSW5wdXQoVElUTEUuRkVBVFVSRVMsIGRmLCAoKSA9PiB7XG4gICAgICAgIHNlbGVjdGVkRmVhdHVyZUNvbE5hbWVzID0gZmVhdHVyZXNJbnB1dC52YWx1ZS5tYXAoKGNvbCkgPT4gY29sLm5hbWUpO1xuICAgICAgICBpZiAoc2VsZWN0ZWRGZWF0dXJlQ29sTmFtZXMubGVuZ3RoID4gMCkge1xuICAgICAgICAgICAgY2hlY2tBcHBsaWNhYmlsaXR5KCk7XG4gICAgICAgICAgICBtZXRyaWNJbmZvSW5wdXRzLmZvckVhY2goKGRpdiwgbmFtZSkgPT4gZGl2LmhpZGRlbiA9ICFzZWxlY3RlZEZlYXR1cmVDb2xOYW1lcy5pbmNsdWRlcyhuYW1lKSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZVxuICAgICAgICAgICAgaGlkZVdpZGdldHMoKTtcbiAgICB9LCB7IGF2YWlsYWJsZTogYXZhaWxhYmxlRmVhdHVyZUNvbHNOYW1lcywgY2hlY2tlZDogYXZhaWxhYmxlRmVhdHVyZUNvbHNOYW1lcyB9KTtcbiAgICBmZWF0dXJlc0lucHV0LnNldFRvb2x0aXAoSElOVC5GRUFUVVJFUyk7XG4gICAgLyoqIEhpZGUgd2lkZ2V0cyAodXNlIGlmIHJ1biBpcyBub3QgYXBwbGljYWJsZSkgKi9cbiAgICBjb25zdCBoaWRlV2lkZ2V0cyA9ICgpID0+IHtcbiAgICAgICAgZGxnLmdldEJ1dHRvbihUSVRMRS5SVU4pLmRpc2FibGVkID0gdHJ1ZTtcbiAgICAgICAgaW5QbGFjZUlucHV0LnJvb3QuaGlkZGVuID0gdHJ1ZTtcbiAgICAgICAga2VlcEVtcHR5SW5wdXQucm9vdC5oaWRkZW4gPSB0cnVlO1xuICAgICAgICBuZWlnaGJvcnNJbnB1dC5yb290LmhpZGRlbiA9IHRydWU7XG4gICAgICAgIGRpc3REaXYuaGlkZGVuID0gdHJ1ZTtcbiAgICAgICAgbWV0cmljc0Rpdi5oaWRkZW4gPSB0cnVlO1xuICAgIH07XG4gICAgLyoqIFNob3cgd2lkZ2V0cyAodXNlIGlmIHJ1biBpcyBhcHBsaWNhYmxlKSAqL1xuICAgIGNvbnN0IHNob3dXaWRnZXRzID0gKCkgPT4ge1xuICAgICAgICBkbGcuZ2V0QnV0dG9uKFRJVExFLlJVTikuZGlzYWJsZWQgPSBmYWxzZTtcbiAgICAgICAgZGlzdERpdi5oaWRkZW4gPSBmYWxzZTtcbiAgICAgICAgaW5QbGFjZUlucHV0LnJvb3QuaGlkZGVuID0gZmFsc2U7XG4gICAgICAgIG5laWdoYm9yc0lucHV0LnJvb3QuaGlkZGVuID0gZmFsc2U7XG4gICAgICAgIGRpc3RUeXBlSW5wdXQucm9vdC5oaWRkZW4gPSBmYWxzZTtcbiAgICAgICAga2VlcEVtcHR5SW5wdXQucm9vdC5oaWRkZW4gPSAhYXJlVGhlcmVGYWlscyh0YXJnZXRDb2xOYW1lcywgc2VsZWN0ZWRGZWF0dXJlQ29sTmFtZXMsIG1pc1ZhbHNJbmRzKTtcbiAgICB9O1xuICAgIC8qKiBDaGVjayBhcHBsaWNhYmlsaXR5IG9mIHRoZSBpbXB1dGF0aW9uICovXG4gICAgY29uc3QgY2hlY2tBcHBsaWNhYmlsaXR5ID0gKCkgPT4ge1xuICAgICAgICBzaG93V2lkZ2V0cygpO1xuICAgICAgICBpZiAoc2VsZWN0ZWRGZWF0dXJlQ29sTmFtZXMubGVuZ3RoID09PSAxKSB7XG4gICAgICAgICAgICB0YXJnZXRDb2xOYW1lcy5mb3JFYWNoKChuYW1lKSA9PiB7XG4gICAgICAgICAgICAgICAgaWYgKHNlbGVjdGVkRmVhdHVyZUNvbE5hbWVzWzBdID09PSBuYW1lKSB7XG4gICAgICAgICAgICAgICAgICAgIGhpZGVXaWRnZXRzKCk7XG4gICAgICAgICAgICAgICAgICAgIGdyb2suc2hlbGwud2FybmluZyhgJHtFUlJPUl9NU0cuT05FX0ZFQVRVUkVfU0VMRUNURUR9IHRoZSBjb2x1bW4gJyR7bmFtZX0nYCk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfSk7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIC8vIE1ldHJpY3MgY29tcG9uZW50c1xuICAgIGNvbnN0IGZlYXR1cmVzTWV0cmljcyA9IG5ldyBNYXAoKTtcbiAgICBjb25zdCBtZXRyaWNJbmZvSW5wdXRzID0gbmV3IE1hcCgpO1xuICAgIGNvbnN0IG1ldHJpY3NEaXYgPSB1aS5kaXZWKFtdKTtcbiAgICBtZXRyaWNzRGl2LnN0eWxlLm92ZXJmbG93ID0gJ2F1dG8nO1xuICAgIC8vIENyZWF0ZSBtZXRyaWNzIFVJXG4gICAgYXZhaWxhYmxlRmVhdHVyZUNvbHNOYW1lcy5mb3JFYWNoKChuYW1lKSA9PiB7XG4gICAgICAgIC8vIGluaXRpYWxpemF0aW9uXG4gICAgICAgIGNvbnN0IHR5cGUgPSBkZi5jb2wobmFtZSkudHlwZTtcbiAgICAgICAgY29uc3Qgc2V0dGluZ3MgPSBnZXRGZWF0dXJlSW5wdXRTZXR0aW5ncyh0eXBlKTtcbiAgICAgICAgZmVhdHVyZXNNZXRyaWNzLnNldChuYW1lLCB7IHdlaWdodDogc2V0dGluZ3MuZGVmYXVsdFdlaWdodCwgdHlwZTogc2V0dGluZ3MuZGVmYXVsdE1ldHJpYyB9KTtcbiAgICAgICAgLy8gZGlzdGFuY2UgaW5wdXRcbiAgICAgICAgY29uc3QgZGlzdFR5cGVJbnB1dCA9IHVpLmNob2ljZUlucHV0KG5hbWUsIHNldHRpbmdzLmRlZmF1bHRNZXRyaWMsIHNldHRpbmdzLmF2YWlsYWJsZU1ldHJpY3MsICgpID0+IHtcbiAgICAgICAgICAgIHZhciBfYSwgX2I7XG4gICAgICAgICAgICBjb25zdCBkaXN0SW5mbyA9IChfYSA9IGZlYXR1cmVzTWV0cmljcy5nZXQobmFtZSkpICE9PSBudWxsICYmIF9hICE9PSB2b2lkIDAgPyBfYSA6IHsgd2VpZ2h0OiBzZXR0aW5ncy5kZWZhdWx0V2VpZ2h0LCB0eXBlOiBzZXR0aW5ncy5kZWZhdWx0TWV0cmljIH07XG4gICAgICAgICAgICBkaXN0SW5mby50eXBlID0gKF9iID0gZGlzdFR5cGVJbnB1dC52YWx1ZSkgIT09IG51bGwgJiYgX2IgIT09IHZvaWQgMCA/IF9iIDogc2V0dGluZ3MuZGVmYXVsdE1ldHJpYztcbiAgICAgICAgICAgIGZlYXR1cmVzTWV0cmljcy5zZXQobmFtZSwgZGlzdEluZm8pO1xuICAgICAgICB9KTtcbiAgICAgICAgZGlzdFR5cGVJbnB1dC5yb290LnN0eWxlLndpZHRoID0gJzUwJSc7XG4gICAgICAgIGRpc3RUeXBlSW5wdXQuc2V0VG9vbHRpcChISU5ULk1FVFJJQyk7XG4gICAgICAgIGRpc3RUeXBlSW5wdXQucm9vdC5oaWRkZW4gPSB0cnVlOyAvLyB0aGlzIGlucHV0IHdpbGwgYmUgdXNlZCBmdXJ0aGVyXG4gICAgICAgIC8vIFRoZSBmb2xsb3dpbmcgc2hvdWxkIHByb3ZpZGUgYSBzbGlkZXIgKHNlZSB0aCBidWcgaHR0cHM6Ly9yZWRkYXRhLmF0bGFzc2lhbi5uZXQvYnJvd3NlL0dST0stMTQ0MzEpXG4gICAgICAgIC8vIEB0cy1pZ25vcmVcbiAgICAgICAgY29uc3QgcHJvcCA9IERHLlByb3BlcnR5LmZyb21PcHRpb25zKHsgXCJuYW1lXCI6IG5hbWUsIFwiaW5wdXRUeXBlXCI6IFwiRmxvYXRcIiwgbWluOiAwLCBtYXg6IDEwLCBcInNob3dTbGlkZXJcIjogdHJ1ZSwgXCJzdGVwXCI6IDEgfSk7XG4gICAgICAgIGNvbnN0IHdlaWdodElucHV0ID0gdWkuaW5wdXQuZm9yUHJvcGVydHkocHJvcCk7XG4gICAgICAgIHdlaWdodElucHV0LnZhbHVlID0gc2V0dGluZ3MuZGVmYXVsdFdlaWdodDtcbiAgICAgICAgd2VpZ2h0SW5wdXQub25DaGFuZ2VkKCgpID0+IHtcbiAgICAgICAgICAgIHZhciBfYSwgX2I7XG4gICAgICAgICAgICBjb25zdCBkaXN0SW5mbyA9IChfYSA9IGZlYXR1cmVzTWV0cmljcy5nZXQobmFtZSkpICE9PSBudWxsICYmIF9hICE9PSB2b2lkIDAgPyBfYSA6IHsgd2VpZ2h0OiBzZXR0aW5ncy5kZWZhdWx0V2VpZ2h0LCB0eXBlOiBzZXR0aW5ncy5kZWZhdWx0TWV0cmljIH07XG4gICAgICAgICAgICBkaXN0SW5mby53ZWlnaHQgPSAoX2IgPSB3ZWlnaHRJbnB1dC52YWx1ZSkgIT09IG51bGwgJiYgX2IgIT09IHZvaWQgMCA/IF9iIDogc2V0dGluZ3MuZGVmYXVsdFdlaWdodDtcbiAgICAgICAgICAgIGZlYXR1cmVzTWV0cmljcy5zZXQobmFtZSwgZGlzdEluZm8pO1xuICAgICAgICB9KTtcbiAgICAgICAgd2VpZ2h0SW5wdXQuc2V0VG9vbHRpcChISU5ULldFSUdIVCk7XG4gICAgICAgIGNvbnN0IGRpdiA9IHVpLmRpdkgoW2Rpc3RUeXBlSW5wdXQucm9vdCwgd2VpZ2h0SW5wdXQucm9vdF0pO1xuICAgICAgICBtZXRyaWNJbmZvSW5wdXRzLnNldChuYW1lLCBkaXYpO1xuICAgICAgICBtZXRyaWNzRGl2LmFwcGVuZChkaXYpO1xuICAgIH0pO1xuICAgIC8vIFRoZSBtYWluIGRpYWxvZ1xuICAgIGNvbnN0IGRsZyA9IHVpLmRpYWxvZyh7IHRpdGxlOiBUSVRMRS5LTk5fSU1QVVRFUiwgaGVscFVybDogS05OX0lNUFVURVIgfSk7XG4gICAgZ3Jvay5zaGVsbC52LnJvb3QuYXBwZW5kQ2hpbGQoZGxnLnJvb3QpO1xuICAgIG1ldHJpY3NEaXYuaGlkZGVuID0gdHJ1ZTtcbiAgICBrZWVwRW1wdHlJbnB1dC5yb290LmhpZGRlbiA9ICFhcmVUaGVyZUZhaWxzKHRhcmdldENvbE5hbWVzLCBzZWxlY3RlZEZlYXR1cmVDb2xOYW1lcywgbWlzVmFsc0luZHMpO1xuICAgIC8vIEljb24gc2hvd2luZy9oaWRpbmcgbWV0cmljcyBVSVxuICAgIGNvbnN0IHNldHRpbmdzSWNvbiA9IHVpLmljb25zLnNldHRpbmdzKCgpID0+IHsgbWV0cmljc0Rpdi5oaWRkZW4gPSAhbWV0cmljc0Rpdi5oaWRkZW47IH0sIEhJTlQuTUVUUklDX1NFVFRJTkdTKTtcbiAgICBjb25zdCBkaXN0RGl2ID0gdWkuZGl2SChbZGlzdFR5cGVJbnB1dC5yb290LCBzZXR0aW5nc0ljb25dKTtcbiAgICBkbGcuYWRkQnV0dG9uKFRJVExFLlJVTiwgKCkgPT4ge1xuICAgICAgICBkbGcuY2xvc2UoKTtcbiAgICAgICAgYXZhaWxhYmxlRmVhdHVyZUNvbHNOYW1lcy5maWx0ZXIoKG5hbWUpID0+ICFzZWxlY3RlZEZlYXR1cmVDb2xOYW1lcy5pbmNsdWRlcyhuYW1lKSkuZm9yRWFjaCgobmFtZSkgPT4gZmVhdHVyZXNNZXRyaWNzLmRlbGV0ZShuYW1lKSk7XG4gICAgICAgIHRyeSB7XG4gICAgICAgICAgICBjb25zdCBmYWlsZWRUb0ltcHV0ZSA9IGltcHV0ZShkZiwgdGFyZ2V0Q29sTmFtZXMsIGZlYXR1cmVzTWV0cmljcywgbWlzVmFsc0luZHMsIGRpc3RUeXBlLCBuZWlnaGJvcnMsIGluUGxhY2UpO1xuICAgICAgICAgICAgaWYgKCFrZWVwRW1wdHkpXG4gICAgICAgICAgICAgICAgaW1wdXRlRmFpbGVkKGRmLCBmYWlsZWRUb0ltcHV0ZSk7XG4gICAgICAgIH1cbiAgICAgICAgY2F0Y2ggKGVycikge1xuICAgICAgICAgICAgaWYgKGVyciBpbnN0YW5jZW9mIEVycm9yKVxuICAgICAgICAgICAgICAgIGdyb2suc2hlbGwuZXJyb3IoYCR7RVJST1JfTVNHLktOTl9GQUlMU306ICR7ZXJyLm1lc3NhZ2V9YCk7XG4gICAgICAgICAgICBlbHNlXG4gICAgICAgICAgICAgICAgZ3Jvay5zaGVsbC5lcnJvcihgJHtFUlJPUl9NU0cuS05OX0ZBSUxTfTogJHtFUlJPUl9NU0cuQ09SRV9JU1NVRX1gKTtcbiAgICAgICAgfVxuICAgIH0pXG4gICAgICAgIC5hZGQodGFyZ2V0Q29sSW5wdXQpXG4gICAgICAgIC5hZGQoZmVhdHVyZXNJbnB1dClcbiAgICAgICAgLmFkZChkaXN0RGl2KVxuICAgICAgICAuYWRkKG1ldHJpY3NEaXYpXG4gICAgICAgIC5hZGQobmVpZ2hib3JzSW5wdXQpXG4gICAgICAgIC5hZGQoaW5QbGFjZUlucHV0KVxuICAgICAgICAuYWRkKGtlZXBFbXB0eUlucHV0KVxuICAgICAgICAuc2hvdygpO1xufSAvLyBydW5LTk5JbXB1dGVyXG4iLCJpbXBvcnQgKiBhcyB1aSBmcm9tICdkYXRhZ3Jvay1hcGkvdWknO1xuaW1wb3J0IHsgTXVsdGlDb2x1bW5EaW1SZWR1Y3Rpb25FZGl0b3IgfSBmcm9tICcuLi9tdWx0aS1jb2x1bW4tZGltZW5zaW9uYWxpdHktcmVkdWN0aW9uL211bHRpLWNvbHVtbi1kaW0tcmVkdWN0aW9uLWVkaXRvcic7XG5pbXBvcnQgeyBnZXRHUFVBZGFwdGVyRGVzY3JpcHRpb24gfSBmcm9tICdAZGF0YWdyb2stbGlicmFyaWVzL21hdGgvc3JjL3dlYkdQVS9nZXRHUFVEZXZpY2UnO1xuZXhwb3J0IGNsYXNzIE1DTEVkaXRvciBleHRlbmRzIE11bHRpQ29sdW1uRGltUmVkdWN0aW9uRWRpdG9yIHtcbiAgICBjb25zdHJ1Y3RvcihlZGl0b3JTZXR0aW5ncyA9IHt9KSB7XG4gICAgICAgIHN1cGVyKGVkaXRvclNldHRpbmdzKTtcbiAgICAgICAgdGhpcy5zaW1pbGFyaXR5VGhyZXNob2xkSW5wdXQgPSB1aS5pbnRJbnB1dCgnU2ltaWxhcml0eSB0aHJlc2hvbGQnLCA4MCk7XG4gICAgICAgIHRoaXMubWF4SXRlcmF0aW9uc0lucHV0ID0gdWkuaW50SW5wdXQoJ01heCBpdGVyYXRpb25zJywgNSk7XG4gICAgICAgIHRoaXMudXNlV2ViR1BVSW5wdXQgPSB1aS5ib29sSW5wdXQoJ1VzZSBXZWJHUFUnLCBmYWxzZSk7XG4gICAgICAgIGdldEdQVUFkYXB0ZXJEZXNjcmlwdGlvbigpLnRoZW4oKGRlc2MpID0+IHtcbiAgICAgICAgICAgIGlmIChkZXNjKSB7XG4gICAgICAgICAgICAgICAgdGhpcy51c2VXZWJHUFVJbnB1dC5zZXRUb29sdGlwKGBVc2Ugd2ViR1BVIGZvciBNQ0wgY2FsY3VsYXRpb24gKCR7ZGVzY30pYCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgICAgICB0aGlzLnVzZVdlYkdQVUlucHV0LnZhbHVlID0gZmFsc2U7XG4gICAgICAgICAgICAgICAgdGhpcy51c2VXZWJHUFVJbnB1dC5zZXRUb29sdGlwKCdXZWJHUFUgaXMgbm90IGF2YWlsYWJsZScpO1xuICAgICAgICAgICAgICAgIHRoaXMudXNlV2ViR1BVSW5wdXQuZW5hYmxlZCA9IGZhbHNlO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICB9XG4gICAgZ2V0RWRpdG9yKCkge1xuICAgICAgICBjb25zdCBkaXYgPSB1aS5kaXYoW1xuICAgICAgICAgICAgdGhpcy50YWJsZUlucHV0LnJvb3QsXG4gICAgICAgICAgICB0aGlzLmNvbHVtbnNJbnB1dFJvb3QsXG4gICAgICAgICAgICB0aGlzLmNvbHVtblBhcmFtc0VkaXRvclJvb3QsXG4gICAgICAgICAgICB0aGlzLmFnZ3JlZ2F0aW9uTWV0aG9kSW5wdXQucm9vdCxcbiAgICAgICAgICAgIHRoaXMuc2ltaWxhcml0eVRocmVzaG9sZElucHV0LnJvb3QsXG4gICAgICAgICAgICB0aGlzLm1heEl0ZXJhdGlvbnNJbnB1dC5yb290LFxuICAgICAgICAgICAgdGhpcy51c2VXZWJHUFVJbnB1dC5yb290LFxuICAgICAgICBdLCB7IHN0eWxlOiB7IG1pbldpZHRoOiAnNDIwcHgnIH0sIGNsYXNzZXM6ICd1aS1mb3JtJyB9KTtcbiAgICAgICAgcmV0dXJuIGRpdjtcbiAgICB9XG4gICAgZ2V0IHBhcmFtcygpIHtcbiAgICAgICAgcmV0dXJuIHtcbiAgICAgICAgICAgIHRhYmxlOiB0aGlzLnRhYmxlSW5wdXQudmFsdWUsXG4gICAgICAgICAgICBjb2x1bW5zOiB0aGlzLmNvbHVtbnNJbnB1dC52YWx1ZSxcbiAgICAgICAgICAgIG1ldGhvZE5hbWU6IHRoaXMubWV0aG9kSW5wdXQudmFsdWUsXG4gICAgICAgICAgICBwcmVwcm9jZXNzaW5nRnVuY3Rpb25zOiB0aGlzLmNvbHVtbk9wdEVkaXRvcnMubWFwKChpdCkgPT4gaXQucHJlUHJvY2Vzc2luZ0Z1bmN0aW9uKSxcbiAgICAgICAgICAgIGRpc3RhbmNlTWV0cmljczogdGhpcy5jb2x1bW5PcHRFZGl0b3JzLm1hcCgoaXQpID0+IGl0LnNpbWlsYXJpdHlNZXRyaWNJbnB1dC52YWx1ZSksXG4gICAgICAgICAgICB3ZWlnaHRzOiB0aGlzLmNvbHVtbk9wdEVkaXRvcnMubWFwKChpdCkgPT4gaXQud2VpZ2h0KSxcbiAgICAgICAgICAgIHByZXByb2Nlc3NpbmdGdW5jQXJnczogdGhpcy5jb2x1bW5PcHRFZGl0b3JzLm1hcCgoaXQpID0+IGl0LnByZXByb2Nlc3NpbmdGdW5jdGlvblNldHRpbmdzKSxcbiAgICAgICAgICAgIGFnZ3JlYWdncmVnYXRpb25NZXRob2Q6IHRoaXMuYWdncmVnYXRpb25NZXRob2RJbnB1dC52YWx1ZSxcbiAgICAgICAgICAgIHRocmVzaG9sZDogdGhpcy5zaW1pbGFyaXR5VGhyZXNob2xkSW5wdXQudmFsdWUsXG4gICAgICAgICAgICBtYXhJdGVyYXRpb25zOiB0aGlzLm1heEl0ZXJhdGlvbnNJbnB1dC52YWx1ZSA/PyA1LFxuICAgICAgICAgICAgdXNlV2ViR1BVOiB0aGlzLnVzZVdlYkdQVUlucHV0LnZhbHVlID8/IGZhbHNlLFxuICAgICAgICB9O1xuICAgIH1cbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWRhdGE6YXBwbGljYXRpb24vanNvbjtiYXNlNjQsZXlKMlpYSnphVzl1SWpvekxDSm1hV3hsSWpvaWJXTnNMV1ZrYVhSdmNpNXFjeUlzSW5OdmRYSmpaVkp2YjNRaU9pSWlMQ0p6YjNWeVkyVnpJanBiSW0xamJDMWxaR2wwYjNJdWRITWlYU3dpYm1GdFpYTWlPbHRkTENKdFlYQndhVzVuY3lJNklrRkJRMEVzVDBGQlR5eExRVUZMTEVWQlFVVXNUVUZCVFN4cFFrRkJhVUlzUTBGQlF6dEJRVVYwUXl4UFFVRlBMRVZCUVVNc05rSkJRVFpDTEVWQlFVTXNUVUZETDBJc05FVkJRVFJGTEVOQlFVTTdRVUZEY0VZc1QwRkJUeXhGUVVGRExIZENRVUYzUWl4RlFVRkRMRTFCUVUwc2EwUkJRV3RFTEVOQlFVTTdRVUZITVVZc1RVRkJUU3hQUVVGUExGTkJRVlVzVTBGQlVTdzJRa0ZCTmtJN1NVRkplRVFzV1VGQldTeHBRa0ZCTkVNc1JVRkJSVHRSUVVONFJDeExRVUZMTEVOQlFVTXNZMEZCWXl4RFFVRkRMRU5CUVVNN1VVRkRkRUlzU1VGQlNTeERRVUZETEhkQ1FVRjNRaXhIUVVGSExFVkJRVVVzUTBGQlF5eFJRVUZSTEVOQlFVTXNjMEpCUVhOQ0xFVkJRVVVzUlVGQlJTeERRVUZETEVOQlFVTTdVVUZEZUVVc1NVRkJTU3hEUVVGRExHdENRVUZyUWl4SFFVRkhMRVZCUVVVc1EwRkJReXhSUVVGUkxFTkJRVU1zWjBKQlFXZENMRVZCUVVVc1EwRkJReXhEUVVGRExFTkJRVU03VVVGRE0wUXNTVUZCU1N4RFFVRkRMR05CUVdNc1IwRkJSeXhGUVVGRkxFTkJRVU1zVTBGQlV5eERRVUZETEZsQlFWa3NSVUZCUlN4TFFVRkxMRU5CUVVNc1EwRkJRenRSUVVONFJDeDNRa0ZCZDBJc1JVRkJSU3hEUVVGRExFbEJRVWtzUTBGQlF5eERRVUZETEVsQlFVa3NSVUZCUlN4RlFVRkZPMWxCUTNaRExFbEJRVWtzU1VGQlNTeEZRVUZGTzJkQ1FVTlNMRWxCUVVrc1EwRkJReXhqUVVGakxFTkJRVU1zVlVGQlZTeERRVUZETEcxRFFVRnRReXhKUVVGSkxFZEJRVWNzUTBGQlF5eERRVUZETzJGQlF6VkZPMmxDUVVGTk8yZENRVU5NTEVsQlFVa3NRMEZCUXl4alFVRmpMRU5CUVVNc1MwRkJTeXhIUVVGSExFdEJRVXNzUTBGQlF6dG5Ra0ZEYkVNc1NVRkJTU3hEUVVGRExHTkJRV01zUTBGQlF5eFZRVUZWTEVOQlFVTXNlVUpCUVhsQ0xFTkJRVU1zUTBGQlF6dG5Ra0ZETVVRc1NVRkJTU3hEUVVGRExHTkJRV01zUTBGQlF5eFBRVUZQTEVkQlFVY3NTMEZCU3l4RFFVRkRPMkZCUTNKRE8xRkJRMGdzUTBGQlF5eERRVUZETEVOQlFVTTdTVUZEVEN4RFFVRkRPMGxCUlUwc1UwRkJVenRSUVVOa0xFMUJRVTBzUjBGQlJ5eEhRVUZITEVWQlFVVXNRMEZCUXl4SFFVRkhMRU5CUVVNN1dVRkRha0lzU1VGQlNTeERRVUZETEZWQlFWVXNRMEZCUXl4SlFVRkpPMWxCUTNCQ0xFbEJRVWtzUTBGQlF5eG5Ra0ZCWjBJN1dVRkRja0lzU1VGQlNTeERRVUZETEhOQ1FVRnpRanRaUVVNelFpeEpRVUZKTEVOQlFVTXNjMEpCUVhOQ0xFTkJRVU1zU1VGQlNUdFpRVU5vUXl4SlFVRkpMRU5CUVVNc2QwSkJRWGRDTEVOQlFVTXNTVUZCU1R0WlFVTnNReXhKUVVGSkxFTkJRVU1zYTBKQlFXdENMRU5CUVVNc1NVRkJTVHRaUVVNMVFpeEpRVUZKTEVOQlFVTXNZMEZCWXl4RFFVRkRMRWxCUVVrN1UwRkRla0lzUlVGQlJTeEZRVUZETEV0QlFVc3NSVUZCUlN4RlFVRkRMRkZCUVZFc1JVRkJSU3hQUVVGUExFVkJRVU1zUlVGQlJTeFBRVUZQTEVWQlFVVXNVMEZCVXl4RlFVRkRMRU5CUVVNc1EwRkJRenRSUVVOeVJDeFBRVUZQTEVkQlFVY3NRMEZCUXp0SlFVTmlMRU5CUVVNN1NVRkZSQ3hKUVVGWExFMUJRVTA3VVVGRFppeFBRVUZQTzFsQlEwd3NTMEZCU3l4RlFVRkZMRWxCUVVrc1EwRkJReXhWUVVGVkxFTkJRVU1zUzBGQlRUdFpRVU0zUWl4UFFVRlBMRVZCUVVVc1NVRkJTU3hEUVVGRExGbEJRVmtzUTBGQlF5eExRVUZOTzFsQlEycERMRlZCUVZVc1JVRkJSU3hKUVVGSkxFTkJRVU1zVjBGQlZ5eERRVUZETEV0QlFVMDdXVUZEYmtNc2MwSkJRWE5DTEVWQlFVVXNTVUZCU1N4RFFVRkRMR2RDUVVGblFpeERRVUZETEVkQlFVY3NRMEZCUXl4RFFVRkRMRVZCUVVVc1JVRkJSU3hGUVVGRkxFTkJRVU1zUlVGQlJTeERRVUZETEhGQ1FVRnhRaXhEUVVGRE8xbEJRMjVHTEdWQlFXVXNSVUZCUlN4SlFVRkpMRU5CUVVNc1owSkJRV2RDTEVOQlFVTXNSMEZCUnl4RFFVRkRMRU5CUVVNc1JVRkJSU3hGUVVGRkxFVkJRVVVzUTBGQlF5eEZRVUZGTEVOQlFVTXNjVUpCUVhGQ0xFTkJRVU1zUzBGQlRTeERRVUZETzFsQlEyNUdMRTlCUVU4c1JVRkJSU3hKUVVGSkxFTkJRVU1zWjBKQlFXZENMRU5CUVVNc1IwRkJSeXhEUVVGRExFTkJRVU1zUlVGQlJTeEZRVUZGTEVWQlFVVXNRMEZCUXl4RlFVRkZMRU5CUVVNc1RVRkJUeXhEUVVGRE8xbEJRM1JFTEhGQ1FVRnhRaXhGUVVGRkxFbEJRVWtzUTBGQlF5eG5Ra0ZCWjBJc1EwRkJReXhIUVVGSExFTkJRVU1zUTBGQlF5eEZRVUZGTEVWQlFVVXNSVUZCUlN4RFFVRkRMRVZCUVVVc1EwRkJReXcyUWtGQk5rSXNRMEZCUXp0WlFVTXhSaXh6UWtGQmMwSXNSVUZCUlN4SlFVRkpMRU5CUVVNc2MwSkJRWE5DTEVOQlFVTXNTMEZCU3p0WlFVTjZSQ3hUUVVGVExFVkJRVVVzU1VGQlNTeERRVUZETEhkQ1FVRjNRaXhEUVVGRExFdEJRVXM3V1VGRE9VTXNZVUZCWVN4RlFVRkZMRWxCUVVrc1EwRkJReXhyUWtGQmEwSXNRMEZCUXl4TFFVRkxMRWxCUVVrc1EwRkJRenRaUVVOcVJDeFRRVUZUTEVWQlFVVXNTVUZCU1N4RFFVRkRMR05CUVdNc1EwRkJReXhMUVVGTExFbEJRVWtzUzBGQlN6dFRRVU01UXl4RFFVRkRPMGxCUTBvc1EwRkJRenREUVVOS0lpd2ljMjkxY21ObGMwTnZiblJsYm5RaU9sc2lhVzF3YjNKMElDb2dZWE1nUkVjZ1puSnZiU0FuWkdGMFlXZHliMnN0WVhCcEwyUm5KenRjYm1sdGNHOXlkQ0FxSUdGeklIVnBJR1p5YjIwZ0oyUmhkR0ZuY205ckxXRndhUzkxYVNjN1hHNXBiWEJ2Y25RZ2UwUnBiVkpsWkhWamRHbHZia1ZrYVhSdmNrOXdkR2x2Ym5OOUlHWnliMjBnSnk0dUwyWjFibU4wYVc5dVJXUnBkRzl5Y3k5a2FXMWxibk5wYjI1aGJHbDBlUzF5WldSMVkzUnBiMjR0WldScGRHOXlKenRjYm1sdGNHOXlkQ0I3VFhWc2RHbERiMngxYlc1RWFXMVNaV1IxWTNScGIyNUZaR2wwYjNKOVhHNGdJR1p5YjIwZ0p5NHVMMjExYkhScExXTnZiSFZ0Ymkxa2FXMWxibk5wYjI1aGJHbDBlUzF5WldSMVkzUnBiMjR2YlhWc2RHa3RZMjlzZFcxdUxXUnBiUzF5WldSMVkzUnBiMjR0WldScGRHOXlKenRjYm1sdGNHOXlkQ0I3WjJWMFIxQlZRV1JoY0hSbGNrUmxjMk55YVhCMGFXOXVmU0JtY205dElDZEFaR0YwWVdkeWIyc3RiR2xpY21GeWFXVnpMMjFoZEdndmMzSmpMM2RsWWtkUVZTOW5aWFJIVUZWRVpYWnBZMlVuTzF4dVhHNWNibVY0Y0c5eWRDQmpiR0Z6Y3lCTlEweEZaR2wwYjNJZ1pYaDBaVzVrY3lCTmRXeDBhVU52YkhWdGJrUnBiVkpsWkhWamRHbHZia1ZrYVhSdmNpQjdYRzRnSUNBZ2NIVmliR2xqSUhOcGJXbHNZWEpwZEhsVWFISmxjMmh2YkdSSmJuQjFkRG9nUkVjdVNXNXdkWFJDWVhObFBHNTFiV0psY2lCOElHNTFiR3crTzF4dUlDQWdJSEIxWW14cFl5QnRZWGhKZEdWeVlYUnBiMjV6U1c1d2RYUTZJRVJITGtsdWNIVjBRbUZ6WlR4dWRXMWlaWElnZkNCdWRXeHNQanRjYmlBZ0lDQndkV0pzYVdNZ2RYTmxWMlZpUjFCVlNXNXdkWFE2SUVSSExrbHVjSFYwUW1GelpUeGliMjlzWldGdUlId2diblZzYkQ0N1hHNGdJQ0FnWTI5dWMzUnlkV04wYjNJb1pXUnBkRzl5VTJWMGRHbHVaM002SUVScGJWSmxaSFZqZEdsdmJrVmthWFJ2Y2s5d2RHbHZibk1nUFNCN2ZTa2dlMXh1SUNBZ0lDQWdjM1Z3WlhJb1pXUnBkRzl5VTJWMGRHbHVaM01wTzF4dUlDQWdJQ0FnZEdocGN5NXphVzFwYkdGeWFYUjVWR2h5WlhOb2IyeGtTVzV3ZFhRZ1BTQjFhUzVwYm5SSmJuQjFkQ2duVTJsdGFXeGhjbWwwZVNCMGFISmxjMmh2YkdRbkxDQTRNQ2s3WEc0Z0lDQWdJQ0IwYUdsekxtMWhlRWwwWlhKaGRHbHZibk5KYm5CMWRDQTlJSFZwTG1sdWRFbHVjSFYwS0NkTllYZ2dhWFJsY21GMGFXOXVjeWNzSURVcE8xeHVJQ0FnSUNBZ2RHaHBjeTUxYzJWWFpXSkhVRlZKYm5CMWRDQTlJSFZwTG1KdmIyeEpibkIxZENnblZYTmxJRmRsWWtkUVZTY3NJR1poYkhObEtUdGNiaUFnSUNBZ0lHZGxkRWRRVlVGa1lYQjBaWEpFWlhOamNtbHdkR2x2YmlncExuUm9aVzRvS0dSbGMyTXBJRDArSUh0Y2JpQWdJQ0FnSUNBZ2FXWWdLR1JsYzJNcElIdGNiaUFnSUNBZ0lDQWdJQ0IwYUdsekxuVnpaVmRsWWtkUVZVbHVjSFYwTG5ObGRGUnZiMngwYVhBb1lGVnpaU0IzWldKSFVGVWdabTl5SUUxRFRDQmpZV3hqZFd4aGRHbHZiaUFvSkh0a1pYTmpmU2xnS1R0Y2JpQWdJQ0FnSUNBZ2ZTQmxiSE5sSUh0Y2JpQWdJQ0FnSUNBZ0lDQjBhR2x6TG5WelpWZGxZa2RRVlVsdWNIVjBMblpoYkhWbElEMGdabUZzYzJVN1hHNGdJQ0FnSUNBZ0lDQWdkR2hwY3k1MWMyVlhaV0pIVUZWSmJuQjFkQzV6WlhSVWIyOXNkR2x3S0NkWFpXSkhVRlVnYVhNZ2JtOTBJR0YyWVdsc1lXSnNaU2NwTzF4dUlDQWdJQ0FnSUNBZ0lIUm9hWE11ZFhObFYyVmlSMUJWU1c1d2RYUXVaVzVoWW14bFpDQTlJR1poYkhObE8xeHVJQ0FnSUNBZ0lDQjlYRzRnSUNBZ0lDQjlLVHRjYmlBZ0lDQjlYRzVjYmlBZ0lDQndkV0pzYVdNZ1oyVjBSV1JwZEc5eUtDazZJRWhVVFV4RmJHVnRaVzUwSUh0Y2JpQWdJQ0FnSUdOdmJuTjBJR1JwZGlBOUlIVnBMbVJwZGloYlhHNGdJQ0FnSUNBZ0lIUm9hWE11ZEdGaWJHVkpibkIxZEM1eWIyOTBMRnh1SUNBZ0lDQWdJQ0IwYUdsekxtTnZiSFZ0Ym5OSmJuQjFkRkp2YjNRc1hHNGdJQ0FnSUNBZ0lIUm9hWE11WTI5c2RXMXVVR0Z5WVcxelJXUnBkRzl5VW05dmRDeGNiaUFnSUNBZ0lDQWdkR2hwY3k1aFoyZHlaV2RoZEdsdmJrMWxkR2h2WkVsdWNIVjBMbkp2YjNRc1hHNGdJQ0FnSUNBZ0lIUm9hWE11YzJsdGFXeGhjbWwwZVZSb2NtVnphRzlzWkVsdWNIVjBMbkp2YjNRc1hHNGdJQ0FnSUNBZ0lIUm9hWE11YldGNFNYUmxjbUYwYVc5dWMwbHVjSFYwTG5KdmIzUXNYRzRnSUNBZ0lDQWdJSFJvYVhNdWRYTmxWMlZpUjFCVlNXNXdkWFF1Y205dmRDeGNiaUFnSUNBZ0lGMHNJSHR6ZEhsc1pUb2dlMjFwYmxkcFpIUm9PaUFuTkRJd2NIZ25mU3dnWTJ4aGMzTmxjem9nSjNWcExXWnZjbTBuZlNrN1hHNGdJQ0FnSUNCeVpYUjFjbTRnWkdsMk8xeHVJQ0FnSUgxY2JseHVJQ0FnSUhCMVlteHBZeUJuWlhRZ2NHRnlZVzF6S0NrZ2UxeHVJQ0FnSUNBZ2NtVjBkWEp1SUh0Y2JpQWdJQ0FnSUNBZ2RHRmliR1U2SUhSb2FYTXVkR0ZpYkdWSmJuQjFkQzUyWVd4MVpTRXNYRzRnSUNBZ0lDQWdJR052YkhWdGJuTTZJSFJvYVhNdVkyOXNkVzF1YzBsdWNIVjBMblpoYkhWbElTeGNiaUFnSUNBZ0lDQWdiV1YwYUc5a1RtRnRaVG9nZEdocGN5NXRaWFJvYjJSSmJuQjFkQzUyWVd4MVpTRXNYRzRnSUNBZ0lDQWdJSEJ5WlhCeWIyTmxjM05wYm1kR2RXNWpkR2x2Ym5NNklIUm9hWE11WTI5c2RXMXVUM0IwUldScGRHOXljeTV0WVhBb0tHbDBLU0E5UGlCcGRDNXdjbVZRY205alpYTnphVzVuUm5WdVkzUnBiMjRwTEZ4dUlDQWdJQ0FnSUNCa2FYTjBZVzVqWlUxbGRISnBZM002SUhSb2FYTXVZMjlzZFcxdVQzQjBSV1JwZEc5eWN5NXRZWEFvS0dsMEtTQTlQaUJwZEM1emFXMXBiR0Z5YVhSNVRXVjBjbWxqU1c1d2RYUXVkbUZzZFdVaEtTeGNiaUFnSUNBZ0lDQWdkMlZwWjJoMGN6b2dkR2hwY3k1amIyeDFiVzVQY0hSRlpHbDBiM0p6TG0xaGNDZ29hWFFwSUQwK0lHbDBMbmRsYVdkb2RDRXBMRnh1SUNBZ0lDQWdJQ0J3Y21Wd2NtOWpaWE56YVc1blJuVnVZMEZ5WjNNNklIUm9hWE11WTI5c2RXMXVUM0IwUldScGRHOXljeTV0WVhBb0tHbDBLU0E5UGlCcGRDNXdjbVZ3Y205alpYTnphVzVuUm5WdVkzUnBiMjVUWlhSMGFXNW5jeWtzWEc0Z0lDQWdJQ0FnSUdGblozSmxZV2RuY21WbllYUnBiMjVOWlhSb2IyUTZJSFJvYVhNdVlXZG5jbVZuWVhScGIyNU5aWFJvYjJSSmJuQjFkQzUyWVd4MVpTeGNiaUFnSUNBZ0lDQWdkR2h5WlhOb2IyeGtPaUIwYUdsekxuTnBiV2xzWVhKcGRIbFVhSEpsYzJodmJHUkpibkIxZEM1MllXeDFaU3hjYmlBZ0lDQWdJQ0FnYldGNFNYUmxjbUYwYVc5dWN6b2dkR2hwY3k1dFlYaEpkR1Z5WVhScGIyNXpTVzV3ZFhRdWRtRnNkV1VnUHo4Z05TeGNiaUFnSUNBZ0lDQWdkWE5sVjJWaVIxQlZPaUIwYUdsekxuVnpaVmRsWWtkUVZVbHVjSFYwTG5aaGJIVmxJRDgvSUdaaGJITmxMRnh1SUNBZ0lDQWdmVHRjYmlBZ0lDQjlYRzU5WEc0aVhYMD0iLCJleHBvcnQgZGVmYXVsdCBjbGFzcyBCaXRBcnJheSB7XG4gICAgY29uc3RydWN0b3IoYXJnLCBkZWZhdWx0VmFsdWUgPSBmYWxzZSkge1xuICAgICAgICB0aGlzLl9sZW5ndGggPSAwO1xuICAgICAgICB0aGlzLl92ZXJzaW9uID0gMDtcbiAgICAgICAgdGhpcy5fdXBkYXRlTGV2ZWwgPSAwO1xuICAgICAgICB0aGlzLl9zZWxlY3RlZENvdW50ID0gMDtcbiAgICAgICAgdGhpcy5fc2VsZWN0ZWRDb3VudFZlcnNpb24gPSAtMTtcbiAgICAgICAgdGhpcy5fc2VsZWN0ZWRJbmRleGVzVmVyc2lvbiA9IC0xO1xuICAgICAgICB0aGlzLl92ZXJzaW9uZWROYW1lID0gJyc7XG4gICAgICAgIHRoaXMuX3ZlcnNpb25lZE5hbWVWZXJzaW9uID0gLTE7XG4gICAgICAgIHRoaXMuU0hSSU5LX1RIUkVTSE9MRCA9IDB4MTAwO1xuICAgICAgICBpZiAodHlwZW9mIGFyZyA9PT0gJ251bWJlcicpIHtcbiAgICAgICAgICAgIGNvbnN0IGxlbmd0aCA9IGFyZztcbiAgICAgICAgICAgIGNvbnN0IGJ1ZmYgPSBCaXRBcnJheS5fY3JlYXRlQnVmZmVyKGxlbmd0aCk7XG4gICAgICAgICAgICBpZiAoZGVmYXVsdFZhbHVlKSB7XG4gICAgICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBidWZmLmxlbmd0aDsgaSsrKVxuICAgICAgICAgICAgICAgICAgICBidWZmW2ldID0gLTE7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0aGlzLl9kYXRhID0gYnVmZjtcbiAgICAgICAgICAgIHRoaXMuX2xlbmd0aCA9IGxlbmd0aDtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIGlmIChhcmcgaW5zdGFuY2VvZiBVaW50MzJBcnJheSkge1xuICAgICAgICAgICAgdGhpcy5fZGF0YSA9IGFyZztcbiAgICAgICAgICAgIHRoaXMuX2xlbmd0aCA9IGRlZmF1bHRWYWx1ZTtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignSW52YWxpZCBjb25zdHJ1Y3RvcicpO1xuICAgICAgICB9XG4gICAgfVxuICAgIGdldFJhd0RhdGEoKSB7IHJldHVybiB0aGlzLl9kYXRhOyB9XG4gICAgYXNzdXJlR29leihudW0sIGFyZ05hbWUpIHtcbiAgICAgICAgaWYgKG51bSA8IDApXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYCR7YXJnTmFtZX0gc2hvdWxkIGJlIGdyZWF0ZXIgdGhhbiB6ZXJvYCk7XG4gICAgfVxuICAgIGFzc3VyZUluUmFuZ2UodmFsdWUsIG1pbiwgbWF4LCBhcmdOYW1lKSB7XG4gICAgICAgIGlmICgodmFsdWUgPCBtaW4pIHx8ICh2YWx1ZSA+IG1heCkpXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYEFyZ3VtZW50ICR7YXJnTmFtZX0gKCR7dmFsdWV9KSBvdXQgb2YgcmFuZ2UgKCR7bWlufSwgJHttYXh9KWApO1xuICAgIH1cbiAgICBjb3B5KHNyYywgZHN0LCBjb3VudCkge1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGNvdW50OyBpKyspXG4gICAgICAgICAgICBkc3RbaV0gPSBzcmNbaV07XG4gICAgfVxuICAgIGNvcHlGcm9tKG90aGVyKSB7XG4gICAgICAgIGlmICh0aGlzLl9sZW5ndGggIT0gb3RoZXIuX2xlbmd0aClcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcihgTGVuZ3RocyBkaWZmZXIgKCR7dGhpcy5fbGVuZ3RofSAhPSAke290aGVyLl9sZW5ndGh9KWApO1xuICAgICAgICB0aGlzLmNvcHkob3RoZXIuX2RhdGEsIHRoaXMuX2RhdGEsIHRoaXMubGVuZ3RoSW5JbnRzKTtcbiAgICAgICAgdGhpcy5fdmVyc2lvbisrO1xuICAgIH1cbiAgICBnZXQgbGVuZ3RoKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fbGVuZ3RoO1xuICAgIH1cbiAgICBnZXQgYnVmZmVyKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fZGF0YTtcbiAgICB9XG4gICAgc2V0IGJ1ZmZlcihkYXRhKSB7XG4gICAgICAgIHRoaXMuX2RhdGEgPSBkYXRhO1xuICAgICAgICB0aGlzLl92ZXJzaW9uKys7XG4gICAgfVxuICAgIGdldCB2ZXJzaW9uKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fdmVyc2lvbjtcbiAgICB9XG4gICAgc2V0IHZlcnNpb24odmFsdWUpIHtcbiAgICAgICAgdGhpcy5fdmVyc2lvbiA9IHZhbHVlO1xuICAgIH1cbiAgICBpbmNyZW1lbnRWZXJzaW9uKG5vdGlmeSA9IHRydWUpIHtcbiAgICAgICAgdGhpcy5fdmVyc2lvbisrO1xuICAgIH1cbiAgICBnZXQgbGVuZ3RoSW5JbnRzKCkge1xuICAgICAgICByZXR1cm4gTWF0aC5mbG9vcigodGhpcy5fbGVuZ3RoICsgMHgxZikgLyAweDIwKTtcbiAgICB9XG4gICAgZ2V0IHZlcnNpb25lZE5hbWUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLl92ZXJzaW9uID09IHRoaXMuX3ZlcnNpb25lZE5hbWVWZXJzaW9uID8gdGhpcy5fdmVyc2lvbmVkTmFtZSA6ICcnO1xuICAgIH1cbiAgICBzZXQgdmVyc2lvbmVkTmFtZShuYW1lKSB7XG4gICAgICAgIHRoaXMuX3ZlcnNpb25lZE5hbWUgPSBuYW1lO1xuICAgICAgICB0aGlzLl92ZXJzaW9uZWROYW1lVmVyc2lvbiA9IHRoaXMuX3ZlcnNpb247XG4gICAgfVxuICAgIGdldCBzZWxmKCkge1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG4gICAgc2V0TGVuZ3RoKHZhbHVlKSB7XG4gICAgICAgIGlmICh2YWx1ZSA8IDApXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ3Nob3VsZCBiZSA+PSAwJyk7XG4gICAgICAgIGlmICh2YWx1ZSA9PSB0aGlzLl9sZW5ndGgpXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIGNvbnN0IG5JbnRzTmVlZGVkID0gTWF0aC5mbG9vcigodmFsdWUgKyAweDFmKSAvIDB4MjApO1xuICAgICAgICBpZiAoKG5JbnRzTmVlZGVkID4gdGhpcy5fZGF0YS5sZW5ndGgpIHx8ICgobkludHNOZWVkZWQgKyB0aGlzLlNIUklOS19USFJFU0hPTEQpIDwgdGhpcy5fZGF0YS5sZW5ndGgpKSB7XG4gICAgICAgICAgICBjb25zdCBuZXdEYXRhID0gbmV3IFVpbnQzMkFycmF5KG5JbnRzTmVlZGVkKTtcbiAgICAgICAgICAgIHRoaXMuY29weSh0aGlzLl9kYXRhLCBuZXdEYXRhLCAobkludHNOZWVkZWQgPiB0aGlzLl9kYXRhLmxlbmd0aCkgPyB0aGlzLl9kYXRhLmxlbmd0aCA6IG5JbnRzTmVlZGVkKTtcbiAgICAgICAgICAgIHRoaXMuX2RhdGEgPSBuZXdEYXRhO1xuICAgICAgICB9XG4gICAgICAgIGlmICh2YWx1ZSA+IHRoaXMuX2xlbmd0aCkge1xuICAgICAgICAgICAgaWYgKHRoaXMuX2xlbmd0aCAlIDB4MjAgPiAwKVxuICAgICAgICAgICAgICAgIHRoaXMuX2RhdGFbdGhpcy5sZW5ndGhJbkludHMgLSAxXSAmPSAoMSA8PCAoKHRoaXMuX2xlbmd0aCAlIDB4MjApICYgMHgxZikpIC0gMTtcbiAgICAgICAgICAgIHRoaXMuX2RhdGEuZmlsbCgwLCB0aGlzLmxlbmd0aEluSW50cywgbkludHNOZWVkZWQpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuX2xlbmd0aCA9IHZhbHVlO1xuICAgICAgICB0aGlzLl92ZXJzaW9uKys7XG4gICAgfVxuICAgIHN0YXRpYyBmcm9tQW5kKHNldDEsIHNldDIpIHtcbiAgICAgICAgaWYgKHNldDEuX2xlbmd0aCAhPSBzZXQyLl9sZW5ndGgpXG4gICAgICAgICAgICB0aHJvdyBuZXcgRXJyb3IoYExlbmd0aHMgZGlmZmVyICgke3NldDEuX2xlbmd0aH0gIT0gJHtzZXQyLl9sZW5ndGh9KWApO1xuICAgICAgICBjb25zdCB0ZW1wID0gbmV3IEJpdEFycmF5KHNldDEuX2xlbmd0aCk7XG4gICAgICAgIHRlbXAuX2xlbmd0aCA9IHNldDEuX2xlbmd0aDtcbiAgICAgICAgdGVtcC5fZGF0YSA9IEJpdEFycmF5Ll9jcmVhdGVCdWZmZXIodGVtcC5fbGVuZ3RoKTtcbiAgICAgICAgdGVtcC5fdmVyc2lvbiA9IDA7XG4gICAgICAgIGNvbnN0IGxlbiA9IHNldDEubGVuZ3RoSW5JbnRzO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGxlbjsgaSsrKVxuICAgICAgICAgICAgdGVtcC5fZGF0YVtpXSA9IHNldDEuX2RhdGFbaV0gJiBzZXQyLl9kYXRhW2ldO1xuICAgICAgICByZXR1cm4gdGVtcDtcbiAgICB9XG4gICAgc3RhdGljIF9jcmVhdGVCdWZmZXIobGVuZ3RoKSB7XG4gICAgICAgIHJldHVybiBuZXcgVWludDMyQXJyYXkoTWF0aC5mbG9vcigobGVuZ3RoICsgMHgxZikgLyAweDIwKSk7XG4gICAgfVxuICAgIHN0YXRpYyBmcm9tVmFsdWVzKHZhbHVlcykge1xuICAgICAgICBjb25zdCB0ZW1wID0gbmV3IEJpdEFycmF5KHZhbHVlcy5sZW5ndGgpO1xuICAgICAgICB0ZW1wLl92ZXJzaW9uID0gMDtcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0ZW1wLl9sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgaWYgKHZhbHVlc1tpXSlcbiAgICAgICAgICAgICAgICB0ZW1wLl9kYXRhW01hdGguZmxvb3IoaSAvIDB4MjApXSB8PSAxIDw8ICgoaSAlIDB4MjApICYgMHgxZik7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRlbXA7XG4gICAgfVxuICAgIC8vLyBDb25zdHJ1Y3RzIGEgW0JpdFNldF0gb2YgbGVuZ3RoIFtjb3VudF0sIHdoZXJlIGlkeC10aCBiaXQgaXMgZGV0ZXJtaW5lZCBieSBhIGNhbGwgdG8gW2ZsYWddIChpZHgpLlxuICAgIHN0YXRpYyBmcm9tU2VxKGNvdW50LCBmbGFnKSB7XG4gICAgICAgIGNvbnN0IHRlbXAgPSBuZXcgQml0QXJyYXkoY291bnQpO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGNvdW50OyArK2kpXG4gICAgICAgICAgICB0ZW1wLnNldEJpdChpLCBmbGFnKGkpKTtcbiAgICAgICAgdGVtcC5fdmVyc2lvbiA9IDA7XG4gICAgICAgIHJldHVybiB0ZW1wO1xuICAgIH1cbiAgICAvLy8gQ29uc3RydWN0cyBhIFtCaXRTZXRdIGZyb20gYSBzdHJpbmcgW3NdIGNvbnRhaW5pbmcgJzAnIG9yICcxJy5cbiAgICBzdGF0aWMgZnJvbVN0cmluZyhzKSB7XG4gICAgICAgIHJldHVybiBCaXRBcnJheS5mcm9tU2VxKHMubGVuZ3RoLCAoaSkgPT4gcy5jaGFyQXQoaSkgPT0gJzEnKTtcbiAgICB9XG4gICAgLy8vIENvbnN0cnVjdHMgYSBbQml0U2V0XSwgYmFzZWQgb24gbGVuZ3RoIFtfbGVuZ3RoXSBhbmQgYnl0ZSBhcnJheSBbX2RhdGFdLlxuICAgIHN0YXRpYyBmcm9tVWludDMyQXJyYXkoX2xlbmd0aCwgX2RhdGEpIHtcbiAgICAgICAgY29uc3QgdGVtcCA9IG5ldyBCaXRBcnJheShfbGVuZ3RoKTtcbiAgICAgICAgdGVtcC5fZGF0YSA9IF9kYXRhO1xuICAgICAgICByZXR1cm4gdGVtcDtcbiAgICB9XG4gICAgLy8vIERlc2VyaWFsaXplcyBhIFtCaXRTZXRdIGZyb20gW2J5dGVzXS5cbiAgICBzdGF0aWMgZnJvbUJ5dGVzKGJ5dGVzKSB7XG4gICAgICAgIGNvbnN0IGxlbiA9IGJ5dGVzLmxlbmd0aDtcbiAgICAgICAgY29uc3QgdGVtcCA9IG5ldyBCaXRBcnJheShsZW4gKiA4KTtcbiAgICAgICAgdGVtcC5fZGF0YSA9IG5ldyBVaW50MzJBcnJheShNYXRoLmZsb29yKChsZW4gKyAzKSAvIDQpKTtcbiAgICAgICAgdGVtcC5fbGVuZ3RoID0gbGVuICogODtcbiAgICAgICAgbGV0IG51bTEgPSAwO1xuICAgICAgICBsZXQgbnVtMiA9IDA7XG4gICAgICAgIHdoaWxlICgobGVuIC0gbnVtMikgPj0gNCkge1xuICAgICAgICAgICAgdGVtcC5fZGF0YVtudW0xKytdID0gKCgoYnl0ZXNbbnVtMl0gJiAweGZmKSB8ICgoYnl0ZXNbbnVtMiArIDFdICYgMHhmZikgPDwgOCkpIHxcbiAgICAgICAgICAgICAgICAoKGJ5dGVzW251bTIgKyAyXSAmIDB4ZmYpIDw8IDB4MTApKSB8ICgoYnl0ZXNbbnVtMiArIDNdICYgMHhmZikgPDwgMHgxOCk7XG4gICAgICAgICAgICBudW0yICs9IDQ7XG4gICAgICAgIH1cbiAgICAgICAgaWYgKGxlbiAtIG51bTIgPT0gMylcbiAgICAgICAgICAgIHRlbXAuX2RhdGFbbnVtMV0gPSAoYnl0ZXNbbnVtMiArIDJdICYgMHhmZikgPDwgMHgxMDtcbiAgICAgICAgaWYgKGxlbiAtIG51bTIgPT0gMilcbiAgICAgICAgICAgIHRlbXAuX2RhdGFbbnVtMV0gfD0gKGJ5dGVzW251bTIgKyAxXSAmIDB4ZmYpIDw8IDg7XG4gICAgICAgIGlmIChsZW4gLSBudW0yID09IDEpXG4gICAgICAgICAgICB0ZW1wLl9kYXRhW251bTFdIHw9IGJ5dGVzW251bTJdICYgMHhmZjtcbiAgICAgICAgdGVtcC5fdmVyc2lvbiA9IDA7XG4gICAgICAgIHJldHVybiB0ZW1wO1xuICAgIH1cbiAgICB0b1N0cmluZygpIHtcbiAgICAgICAgcmV0dXJuIGAke3RoaXMuX2xlbmd0aH0gYml0cywgJHt0aGlzLmNvdW50Qml0cyh0cnVlKX0gc2V0YDtcbiAgICB9XG4gICAgLy8vIFBlcmZvcm1zIGRlZXAgY29tcGFyaXNvbiBvZiB0d28gYml0c2V0cy5cbiAgICBlcXVhbHMob3RoZXIpIHtcbiAgICAgICAgaWYgKHRoaXMgPT0gb3RoZXIpXG4gICAgICAgICAgICByZXR1cm4gdHJ1ZTtcbiAgICAgICAgaWYgKG90aGVyID09IG51bGwpXG4gICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIGlmICh0aGlzLl9sZW5ndGggIT0gb3RoZXIuX2xlbmd0aClcbiAgICAgICAgICAgIHJldHVybiBmYWxzZTtcbiAgICAgICAgaWYgKHRoaXMuX2xlbmd0aCA9PSAwKVxuICAgICAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5fZGF0YS5sZW5ndGggLSAxOyBpKyspXG4gICAgICAgICAgICBpZiAodGhpcy5fZGF0YVtpXSAhPSBvdGhlci5fZGF0YVtpXSlcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIGZvciAobGV0IGkgPSAodGhpcy5fZGF0YS5sZW5ndGggLSAxKSAqIDg7IGkgPCB0aGlzLl9sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgaWYgKHRoaXMuZ2V0Qml0KGkpICE9IG90aGVyLmdldEJpdChpKSlcbiAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRydWU7XG4gICAgfVxuICAgIC8qKiBDbG9uZXMgYSBiaXRzZXQuICovXG4gICAgY2xvbmUoKSB7XG4gICAgICAgIGNvbnN0IGJpdEFycmF5ID0gbmV3IEJpdEFycmF5KDAsIGZhbHNlKTtcbiAgICAgICAgYml0QXJyYXkuX2RhdGEgPSBVaW50MzJBcnJheS5mcm9tKHRoaXMuX2RhdGEpOyAvLyBlZmZlY3RpdmUgbGVuZ3RoOiAobGVuZ3RoSW5JbnRzKVxuICAgICAgICBiaXRBcnJheS5fbGVuZ3RoID0gdGhpcy5fbGVuZ3RoO1xuICAgICAgICBiaXRBcnJheS5fdmVyc2lvbiA9IHRoaXMuX3ZlcnNpb247XG4gICAgICAgIHJldHVybiBiaXRBcnJheTtcbiAgICB9XG4gICAgLyoqIEluaXRpYWxpemVzIGEgYml0c2V0LiAqL1xuICAgIGluaXQoZmxhZywgbm90aWZ5KSB7XG4gICAgICAgIHRoaXMuc2V0QWxsKGZhbHNlLCBmYWxzZSk7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5fbGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGlmIChmbGFnKGkpKVxuICAgICAgICAgICAgICAgIHRoaXMuX2RhdGFbTWF0aC5mbG9vcihpIC8gMHgyMCldIHw9IDEgPDwgKChpICUgMHgyMCkgJiAweDFmKTtcbiAgICAgICAgfVxuICAgICAgICB0aGlzLmluY3JlbWVudFZlcnNpb24obm90aWZ5KTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuICAgIC8vLyBJbnZlcnRzIGEgYml0c2V0LlxuICAgIGludmVydChub3RpZnkgPSB0cnVlKSB7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5fZGF0YS5sZW5ndGg7IGkrKylcbiAgICAgICAgICAgIHRoaXMuX2RhdGFbaV0gXj0gLTE7XG4gICAgICAgIHRoaXMuaW5jcmVtZW50VmVyc2lvbihub3RpZnkpO1xuICAgIH1cbiAgICAvLy8gU2V0cyBhbGwgYml0cyB0byBbdmFsdWVdLCBvcHRpb25hbGx5IHN1cHByZXNzaW5nIG5vdGlmaWNhdGlvbnMuXG4gICAgc2V0QWxsKHZhbHVlLCBub3RpZnkgPSBmYWxzZSkge1xuICAgICAgICBjb25zdCBmbGFncyA9IHZhbHVlID8gLTEgOiAwO1xuICAgICAgICBjb25zdCBsZW4gPSB0aGlzLmxlbmd0aEluSW50cztcbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBsZW47IGkrKykgLy90b2RvOiBvcHRpbWl6ZVxuICAgICAgICAgICAgdGhpcy5fZGF0YVtpXSA9IGZsYWdzO1xuICAgICAgICB0aGlzLmluY3JlbWVudFZlcnNpb24obm90aWZ5KTtcbiAgICB9XG4gICAgLy8vIFNldHMgYml0cyBhdCBbaW5kZXhlc10gcG9zaXRpb24gdG8gW3ZhbHVlXS5cbiAgICAvLy8gQ2xlYXJzIHRoZSBiaXRzZXQgaWYgW2NsZWFyXSBmbGFnIGlzIHRydWUuXG4gICAgLy8vIENoYW5nZSBub3RpZmljYXRpb24gaXMgcmFpc2VkIHdoZW4gW25vdGlmeV0gaXMgdHJ1ZS5cbiAgICBzZXRJbmRleGVzKGluZGV4ZXMsIHZhbHVlID0gdHJ1ZSwgY2xlYXIgPSB0cnVlLCBub3RpZnkgPSB0cnVlKSB7XG4gICAgICAgIGlmIChjbGVhcilcbiAgICAgICAgICAgIHRoaXMuc2V0QWxsKCF2YWx1ZSwgZmFsc2UpO1xuICAgICAgICBmb3IgKGNvbnN0IGkgb2YgaW5kZXhlcylcbiAgICAgICAgICAgIHRoaXMuc2V0RmFzdChpLCB2YWx1ZSk7XG4gICAgICAgIHRoaXMuaW5jcmVtZW50VmVyc2lvbihub3RpZnkpO1xuICAgIH1cbiAgICBldmVyeUluZGV4KGluZGV4ZXMsIHZhbHVlID0gdHJ1ZSkge1xuICAgICAgICBmb3IgKGNvbnN0IGluZGV4IG9mIGluZGV4ZXMpIHtcbiAgICAgICAgICAgIGlmICh0aGlzLmdldEJpdChpbmRleCkgIT0gdmFsdWUpXG4gICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiB0cnVlO1xuICAgIH1cbiAgICBhbnlJbmRleChpbmRleGVzLCB2YWx1ZSA9IHRydWUpIHtcbiAgICAgICAgZm9yIChjb25zdCBpbmRleCBvZiBpbmRleGVzKSB7XG4gICAgICAgICAgICBpZiAodGhpcy5nZXRCaXQoaW5kZXgpID09IHZhbHVlKVxuICAgICAgICAgICAgICAgIHJldHVybiB0cnVlO1xuICAgICAgICB9XG4gICAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgc2V0V2hlcmUoY2hlY2ssIHZhbHVlID0gdHJ1ZSwgY2xlYXIgPSB0cnVlLCBub3RpZnkgPSB0cnVlLCBhbGxvd0NsZWFyID0gdHJ1ZSkge1xuICAgICAgICBpZiAoY2xlYXIgJiYgYWxsb3dDbGVhcilcbiAgICAgICAgICAgIHRoaXMuc2V0QWxsKCF2YWx1ZSwgZmFsc2UpO1xuICAgICAgICBpZiAoYWxsb3dDbGVhcikge1xuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLl9sZW5ndGg7IGkrKykge1xuICAgICAgICAgICAgICAgIGlmIChjaGVjayhpKSlcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5zZXRGYXN0KGksIHZhbHVlKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5fbGVuZ3RoOyBpKyspXG4gICAgICAgICAgICAgICAgdGhpcy5zZXRGYXN0KGksIGNoZWNrKGkpID8gdmFsdWUgOiAhdmFsdWUpO1xuICAgICAgICB9XG4gICAgICAgIHRoaXMuaW5jcmVtZW50VmVyc2lvbihub3RpZnkpO1xuICAgIH1cbiAgICBnZXRSYW5nZShmcm9tLCB0bykge1xuICAgICAgICB0aGlzLmFzc3VyZUluUmFuZ2UoZnJvbSwgMCwgdGhpcy5fbGVuZ3RoIC0gMSwgJ2Zyb20nKTtcbiAgICAgICAgdGhpcy5hc3N1cmVJblJhbmdlKHRvLCAwLCB0aGlzLl9sZW5ndGgsICd0bycpO1xuICAgICAgICBjb25zdCBhcnIgPSBbXTtcbiAgICAgICAgZm9yIChsZXQgaSA9IGZyb207IGkgPCB0bzsgKytpKVxuICAgICAgICAgICAgYXJyLnB1c2godGhpcy5nZXRCaXQoaSkpO1xuICAgICAgICByZXR1cm4gQml0QXJyYXkuZnJvbVZhbHVlcyhhcnIpO1xuICAgIH1cbiAgICBnZXRSYW5nZUFzTGlzdChmcm9tLCB0bykge1xuICAgICAgICB0aGlzLmFzc3VyZUluUmFuZ2UoZnJvbSwgMCwgdGhpcy5fbGVuZ3RoIC0gMSwgJ2Zyb20nKTtcbiAgICAgICAgdGhpcy5hc3N1cmVJblJhbmdlKHRvLCAwLCB0aGlzLl9sZW5ndGgsICd0bycpO1xuICAgICAgICBjb25zdCBhcnIgPSBbXTtcbiAgICAgICAgZm9yIChsZXQgaSA9IGZyb207IGkgPCB0bzsgKytpKVxuICAgICAgICAgICAgYXJyLnB1c2godGhpcy5nZXRCaXQoaSkpO1xuICAgICAgICByZXR1cm4gYXJyO1xuICAgIH1cbiAgICBzZXRSYW5nZShmcm9tLCB0bywgdmFsdWUsIG5vdGlmeSA9IHRydWUpIHtcbiAgICAgICAgdGhpcy5hc3N1cmVJblJhbmdlKGZyb20sIDAsIHRoaXMuX2xlbmd0aCAtIDEsICdmcm9tJyk7XG4gICAgICAgIHRoaXMuYXNzdXJlSW5SYW5nZSh0bywgMCwgdGhpcy5fbGVuZ3RoIC0gMSwgJ3RvJyk7XG4gICAgICAgIGNvbnN0IHN0YXJ0ID0gTWF0aC5taW4oZnJvbSwgdG8pO1xuICAgICAgICBjb25zdCBlbmQgPSBNYXRoLm1heChmcm9tLCB0byk7XG4gICAgICAgIC8vdG9kbzogb3B0aW1pemVcbiAgICAgICAgaWYgKHZhbHVlKSB7XG4gICAgICAgICAgICBmb3IgKGxldCBpID0gc3RhcnQ7IGkgPD0gZW5kOyBpKyspXG4gICAgICAgICAgICAgICAgdGhpcy5zZXRUcnVlKGkpO1xuICAgICAgICB9XG4gICAgICAgIGVsc2Uge1xuICAgICAgICAgICAgZm9yIChsZXQgaSA9IHN0YXJ0OyBpIDw9IGVuZDsgaSsrKVxuICAgICAgICAgICAgICAgIHRoaXMuc2V0RmFsc2UoaSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5pbmNyZW1lbnRWZXJzaW9uKG5vdGlmeSk7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cbiAgICAvLy8gU2V0cyBuIHJhbmRvbWx5IGNob3NlbiBiaXRzIHRvIHZhbHVlLCByZW1haW5pbmcgYml0cyB0byAhdmFsdWUuXG4gICAgc2V0UmFuZG9tKG4sIHZhbHVlLCBub3RpZnkgPSB0cnVlKSB7XG4gICAgICAgIGlmIChuIDwgMCB8fCBuID4gdGhpcy5fbGVuZ3RoKVxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCduIG11c3QgYmUgPj0gMCAmJiA8PSBDb3VudCcpO1xuICAgICAgICBpZiAobiA+IHRoaXMuX2xlbmd0aCAvIDIpXG4gICAgICAgICAgICB0aGlzLnNldFJhbmRvbSh0aGlzLl9sZW5ndGggLSBuLCAhdmFsdWUpO1xuICAgICAgICB0aGlzLnNldEFsbCghdmFsdWUpO1xuICAgICAgICBmb3IgKGxldCBrID0gMDsgayA8IG47KSB7XG4gICAgICAgICAgICBjb25zdCBpID0gTWF0aC5mbG9vcihNYXRoLnJhbmRvbSgpICogdGhpcy5fbGVuZ3RoKTtcbiAgICAgICAgICAgIGlmICh0aGlzLmdldEJpdChpKSA9PSB2YWx1ZSlcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIHRoaXMuc2V0RmFzdChpLCB2YWx1ZSk7XG4gICAgICAgICAgICBrKys7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5pbmNyZW1lbnRWZXJzaW9uKG5vdGlmeSk7XG4gICAgfVxuICAgIC8vLyBNb2RpZmllcyBjdXJyZW50IGJpdHNldCBieSBwZXJmb3JtaW5nIHRoZSBiaXR3aXNlIEFORCBvcGVyYXRpb24gYWdhaW5zdCB0aGVcbiAgICAvLy8gY29ycmVzcG9uZGluZyBlbGVtZW50cyBpbiB0aGUgc3BlY2lmaWVkIGJpdHNldC5cbiAgICBhbmQodmFsdWUsIG5vdGlmeSA9IHRydWUpIHtcbiAgICAgICAgaWYgKHRoaXMuX2xlbmd0aCAhPSB2YWx1ZS5fbGVuZ3RoKVxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdBcnJheSBsZW5ndGhzIGRpZmZlci4nKTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDAsIGxlbiA9IHRoaXMubGVuZ3RoSW5JbnRzOyBpIDwgbGVuOyBpKyspXG4gICAgICAgICAgICB0aGlzLl9kYXRhW2ldICY9IHZhbHVlLl9kYXRhW2ldO1xuICAgICAgICB0aGlzLmluY3JlbWVudFZlcnNpb24obm90aWZ5KTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuICAgIC8vLyBQZXJmb3JtcyB0aGUgYml0d2lzZSBBTkQgTk9UIG9wZXJhdGlvbiBvbiB0aGUgZWxlbWVudHMgaW4gdGhlIGN1cnJlbnQgYml0c2V0XG4gICAgLy8vIGFnYWluc3QgdGhlIGNvcnJlc3BvbmRpbmcgZWxlbWVudHMgaW4gdGhlIHNwZWNpZmllZCBiaXRzZXQuXG4gICAgYW5kTm90KHZhbHVlLCBub3RpZnkgPSB0cnVlKSB7XG4gICAgICAgIGlmICh0aGlzLl9sZW5ndGggIT0gdmFsdWUuX2xlbmd0aClcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignQXJyYXkgbGVuZ3RocyBkaWZmZXIuJyk7XG4gICAgICAgIGNvbnN0IGxlbiA9IHRoaXMubGVuZ3RoSW5JbnRzO1xuICAgICAgICBmb3IgKGxldCBudW0yID0gMDsgbnVtMiA8IGxlbjsgbnVtMisrKVxuICAgICAgICAgICAgdGhpcy5fZGF0YVtudW0yXSAmPSB+dmFsdWUuX2RhdGFbbnVtMl07XG4gICAgICAgIHRoaXMuaW5jcmVtZW50VmVyc2lvbihub3RpZnkpO1xuICAgICAgICByZXR1cm4gdGhpcztcbiAgICB9XG4gICAgLy8vIFBlcmZvcm1zIHRoZSBiaXR3aXNlIE5PVCBBTkQgb3BlcmF0aW9uIG9uIHRoZSBlbGVtZW50cyBpbiB0aGUgY3VycmVudCBiaXRzZXRcbiAgICAvLy8gYWdhaW5zdCB0aGUgY29ycmVzcG9uZGluZyBlbGVtZW50cyBpbiB0aGUgc3BlY2lmaWVkIGJpdHNldC5cbiAgICBub3RBbmQodmFsdWUsIG5vdGlmeSA9IHRydWUpIHtcbiAgICAgICAgaWYgKHRoaXMuX2xlbmd0aCAhPSB2YWx1ZS5fbGVuZ3RoKVxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdBcnJheSBsZW5ndGhzIGRpZmZlci4nKTtcbiAgICAgICAgZm9yIChsZXQgaSA9IDAsIGxlbiA9IHRoaXMubGVuZ3RoSW5JbnRzOyBpIDwgbGVuOyBpKyspXG4gICAgICAgICAgICB0aGlzLl9kYXRhW2ldID0gKH50aGlzLl9kYXRhW2ldKSAmIHZhbHVlLl9kYXRhW2ldO1xuICAgICAgICB0aGlzLmluY3JlbWVudFZlcnNpb24obm90aWZ5KTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuICAgIC8vLyBJbnZlcnRzIGFsbCBiaXQgdmFsdWVzIGluIHRoZSBjdXJyZW50IGJpdHNldFxuICAgIG5vdChub3RpZnkgPSB0cnVlKSB7XG4gICAgICAgIGZvciAobGV0IGkgPSAwLCBsZW4gPSB0aGlzLmxlbmd0aEluSW50czsgaSA8IGxlbjsgaSsrKVxuICAgICAgICAgICAgdGhpcy5fZGF0YVtpXSA9IH50aGlzLl9kYXRhW2ldO1xuICAgICAgICB0aGlzLmluY3JlbWVudFZlcnNpb24obm90aWZ5KTtcbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuICAgIC8vLyBQZXJmb3JtcyB0aGUgYml0d2lzZSBPUiBvcGVyYXRpb24gb24gdGhlIGVsZW1lbnRzIGluIHRoZSBjdXJyZW50IGJpdHNldFxuICAgIC8vLyBhZ2FpbnN0IHRoZSBjb3JyZXNwb25kaW5nIGVsZW1lbnRzIGluIHRoZSBzcGVjaWZpZWQgYml0c2V0LlxuICAgIG9yKHZhbHVlLCBub3RpZnkgPSB0cnVlKSB7XG4gICAgICAgIGlmICh0aGlzLl9sZW5ndGggIT0gdmFsdWUuX2xlbmd0aClcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignQXJyYXkgbGVuZ3RocyBkaWZmZXIuJyk7XG4gICAgICAgIGZvciAobGV0IGkgPSAwLCBsZW4gPSB0aGlzLmxlbmd0aEluSW50czsgaSA8IGxlbjsgaSsrKVxuICAgICAgICAgICAgdGhpcy5fZGF0YVtpXSB8PSB2YWx1ZS5fZGF0YVtpXTtcbiAgICAgICAgdGhpcy5pbmNyZW1lbnRWZXJzaW9uKG5vdGlmeSk7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cbiAgICAvLy8gUGVyZm9ybXMgdGhlIGJpdHdpc2UgZXhjbHVzaXZlIE9SIG9wZXJhdGlvbiBvbiB0aGUgZWxlbWVudHMgaW4gdGhlIGN1cnJlbnQgYml0c2V0XG4gICAgLy8vIGFnYWluc3QgdGhlIGNvcnJlc3BvbmRpbmcgZWxlbWVudHMgaW4gdGhlIHNwZWNpZmllZCBiaXRzZXQuXG4gICAgeG9yKHZhbHVlLCBub3RpZnkgPSB0cnVlKSB7XG4gICAgICAgIGlmICh0aGlzLl9sZW5ndGggIT0gdmFsdWUuX2xlbmd0aClcbiAgICAgICAgICAgIHRocm93IG5ldyBFcnJvcignQXJyYXkgbGVuZ3RocyBkaWZmZXIuJyk7XG4gICAgICAgIGZvciAobGV0IGkgPSAwLCBsZW4gPSB0aGlzLmxlbmd0aEluSW50czsgaSA8IGxlbjsgaSsrKVxuICAgICAgICAgICAgdGhpcy5fZGF0YVtpXSBePSB2YWx1ZS5fZGF0YVtpXTtcbiAgICAgICAgdGhpcy5pbmNyZW1lbnRWZXJzaW9uKG5vdGlmeSk7XG4gICAgICAgIHJldHVybiB0aGlzO1xuICAgIH1cbiAgICAvLy8gSW5zZXJ0cyBuIDAtYml0cyBhdCBwb3NpdGlvbiBwb3MsIHJlc2l6aW5nIHNlbGYgYW5kIHNoaWZ0aW5nIGJpdHMgYXBwcm9wcmlhdGVseS5cbiAgICBpbnNlcnRBdChwb3MsIG4sIGZsYWcgPSBmYWxzZSkge1xuICAgICAgICB0aGlzLmFzc3VyZUluUmFuZ2UocG9zLCAwLCB0aGlzLl9sZW5ndGgsICdwb3MnKTtcbiAgICAgICAgaWYgKG4gPT0gMClcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgLy9UT0RPOiBvcHRpbWl6ZVxuICAgICAgICAvL3RoZSBtb3N0IHByaW1pdGl2ZSBpbXBsZW1lbnRhdGlvbiwgb3B0aW1pemUgaXQgbGF0ZXIhXG4gICAgICAgIC8vIGJlZ2luVXBkYXRlKCk7XG4gICAgICAgIGNvbnN0IG9sZGxlbmd0aCA9IHRoaXMuX2xlbmd0aDtcbiAgICAgICAgdGhpcy5zZXRMZW5ndGgodGhpcy5fbGVuZ3RoICsgbik7XG4gICAgICAgIC8vaWYgKCFjb250YWlucyghZmxhZykpIHJldHVybjsgLy8gbm90aGluZyB0byBkb1xuICAgICAgICBmb3IgKGxldCBpID0gb2xkbGVuZ3RoIC0gMTsgaSA+PSBwb3M7IGktLSlcbiAgICAgICAgICAgIHRoaXMuc2V0Qml0KGkgKyBuLCB0aGlzLmdldEJpdChpKSk7XG4gICAgICAgIGZvciAobGV0IGkgPSBwb3M7IGkgPCBwb3MgKyBuOyBpKyspXG4gICAgICAgICAgICB0aGlzLnNldEJpdChpLCBmbGFnKTtcbiAgICAgICAgLy8gZW5kVXBkYXRlKCk7XG4gICAgfVxuICAgIC8vLyBEZWxldGVzIG4gYml0cyBiZWdpbm5pbmcgYXQgcG9zaXRpb24gcG9zLCByZXNpemluZyBzZWxmIGFuZCBzaGlmdGluZyByZW1haW5pbmdcbiAgICAvLy8gYml0cyBhcHByb3ByaWF0ZWx5LlxuICAgIHJlbW92ZUF0KHBvcywgbiA9IDEpIHtcbiAgICAgICAgLy8gdGhlIG1vc3QgcHJpbWl0aXZlIGltcGxlbWVudGF0aW9uLCBvcHRpbWl6ZSBpdCBsYXRlciFcbiAgICAgICAgaWYgKG4gPCAwKVxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCduIGNhbm5vdCBiZSBuZWdhdGl2ZScpO1xuICAgICAgICB0aGlzLmFzc3VyZUluUmFuZ2UocG9zLCAwLCB0aGlzLl9sZW5ndGggLSBuLCAncG9zJyk7XG4gICAgICAgIGlmICh0aGlzLmNvbnRhaW5zKHRydWUpKSB7XG4gICAgICAgICAgICBmb3IgKGxldCBpID0gcG9zOyBpIDwgdGhpcy5fbGVuZ3RoIC0gbjsgaSsrKVxuICAgICAgICAgICAgICAgIHRoaXMuc2V0Qml0KGksIHRoaXMuZ2V0Qml0KGkgKyBuKSk7XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5zZXRMZW5ndGgodGhpcy5fbGVuZ3RoIC0gbik7XG4gICAgfVxuICAgIHJlbW92ZUJ5TWFzayhtYXNrLCBmbGFnID0gdHJ1ZSkge1xuICAgICAgICBpZiAodGhpcy5fbGVuZ3RoICE9IG1hc2subGVuZ3RoKVxuICAgICAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdsZW5ndGggIT0gbWFzay5sZW5ndGgnKTtcbiAgICAgICAgaWYgKG1hc2sgPT0gdGhpcykgeyAvLyBubyBuZWVkIHRvIGl0ZXJhdGVcbiAgICAgICAgICAgIHRoaXMuc2V0TGVuZ3RoKG1hc2suY291bnRCaXRzKCFmbGFnKSk7XG4gICAgICAgICAgICB0aGlzLnNldEFsbCghZmxhZyk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBsZXQgZHN0SWR4ID0gMDtcbiAgICAgICAgICAgIGZvciAobGV0IHNyY0lkeCA9IC0xOyAoc3JjSWR4ID0gbWFzay5maW5kTmV4dChzcmNJZHgsICFmbGFnKSkgIT0gLTE7KVxuICAgICAgICAgICAgICAgIHRoaXMuc2V0RmFzdChkc3RJZHgrKywgdGhpcy5nZXRCaXQoc3JjSWR4KSk7XG4gICAgICAgICAgICB0aGlzLl9sZW5ndGggPSBkc3RJZHg7XG4gICAgICAgICAgICB0aGlzLl92ZXJzaW9uKys7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHRoaXM7XG4gICAgfVxuICAgIC8vLyBTaW1pbGFyIHRvIHRoZSBbXSBvcGVyYXRvci5cbiAgICBnZXRCaXQocG9zKSB7XG4gICAgICAgIHJldHVybiAodGhpcy5fZGF0YVtNYXRoLmZsb29yKHBvcyAvIDB4MjApXSAmICgxIDw8IChwb3MgJiAweDFmKSkpICE9IDA7XG4gICAgfVxuICAgIC8vLyBTaW1pbGFyIHRvIHRoZSBbXSBvcGVyYXRvci5cbiAgICBzZXRCaXQocG9zLCBiaXQsIG5vdGlmeSA9IHRydWUpIHtcbiAgICAgICAgdGhpcy5zZXRGYXN0KHBvcywgYml0KTtcbiAgICAgICAgaWYgKG5vdGlmeSlcbiAgICAgICAgICAgIHRoaXMuX3ZlcnNpb24rKztcbiAgICAgICAgZWxzZVxuICAgICAgICAgICAgdGhpcy5fdmVyc2lvbisrO1xuICAgIH1cbiAgICAvLy8gU2V0cyBbaV0tdGggYml0IHRvIFt2YWx1ZV0sIGRvZXMgbm90IGNoZWNrIGJvdW5kcywgZG9lcyBub3QgaW5jcmVtZW50IHZlcnNpb25cbiAgICBzZXRGYXN0KGksIHZhbHVlKSB7XG4gICAgICAgIGlmICh2YWx1ZSlcbiAgICAgICAgICAgIHRoaXMuX2RhdGFbTWF0aC5mbG9vcihpIC8gMHgyMCldIHw9IDEgPDwgKGkgJiAweDFmKTtcbiAgICAgICAgZWxzZVxuICAgICAgICAgICAgdGhpcy5fZGF0YVtNYXRoLmZsb29yKGkgLyAweDIwKV0gJj0gfigxIDw8IChpICYgMHgxZikpO1xuICAgIH1cbiAgICBzZXRUcnVlKHBvcykge1xuICAgICAgICB0aGlzLl9kYXRhW01hdGguZmxvb3IocG9zIC8gMHgyMCldIHw9IDEgPDwgKHBvcyAmIDB4MWYpO1xuICAgIH1cbiAgICBzZXRGYWxzZShwb3MpIHtcbiAgICAgICAgdGhpcy5fZGF0YVtNYXRoLmZsb29yKHBvcyAvIDB4MjApXSAmPSB+KDEgPDwgKHBvcyAmIDB4MWYpKTtcbiAgICB9XG4gICAgdHJ1ZUNvdW50KCkge1xuICAgICAgICByZXR1cm4gdGhpcy5jb3VudEJpdHModHJ1ZSk7XG4gICAgfVxuICAgIGZhbHNlQ291bnQoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmNvdW50Qml0cyhmYWxzZSk7XG4gICAgfVxuICAgIC8vLyBDb3VudHMgYml0cyBvZiB0aGUgc3BlY2lmaWVkIHZhbHVlLlxuICAgIGNvdW50Qml0cyh2YWx1ZSkge1xuICAgICAgICBpZiAodGhpcy5fbGVuZ3RoID09IDApXG4gICAgICAgICAgICByZXR1cm4gMDtcbiAgICAgICAgaWYgKHRoaXMuX3NlbGVjdGVkQ291bnRWZXJzaW9uICE9IHRoaXMuX3ZlcnNpb24pIHtcbiAgICAgICAgICAgIHRoaXMuX3NlbGVjdGVkQ291bnQgPSAwO1xuICAgICAgICAgICAgY29uc3QgbGVuID0gdGhpcy5sZW5ndGhJbkludHM7XG4gICAgICAgICAgICBsZXQgaSA9IDA7XG4gICAgICAgICAgICBmb3IgKDsgaSA8IGxlbiAtIDE7IGkrKykge1xuICAgICAgICAgICAgICAgIGZvciAobGV0IGsgPSB0aGlzLl9kYXRhW2ldOyBrICE9IDA7IGsgPj4+PSA4KSB7IC8vdG9kbzogY2FzdCBkYXRhW2ldIHRvIHVpbnRcbiAgICAgICAgICAgICAgICAgICAgdGhpcy5fc2VsZWN0ZWRDb3VudCArPSBCaXRBcnJheS5fb25CaXRDb3VudFtrICYgMHhmZl07XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgLy8gVGhlIGxhc3QgaW50LlxuICAgICAgICAgICAgbGV0IGsgPSB0aGlzLl9kYXRhW2ldO1xuICAgICAgICAgICAgY29uc3QgcmVtYWluaW5nQml0cyA9IHRoaXMuX2xlbmd0aCAmIDB4MWY7XG4gICAgICAgICAgICBpZiAocmVtYWluaW5nQml0cyAhPSAwKSAvKiBpZiByZW1haW5pbmdCaXRzID09IDAsIHRoZSBsYXN0IGludCBpcyBmdWxseSB1c2VkIGFuZCBBTEwgYml0cyBzaG91bGQgYmUgbGVmdCBhcyBpcyAqL1xuICAgICAgICAgICAgICAgIGsgJj0gfigoNDI5NDk2NzI5NSkgPDwgcmVtYWluaW5nQml0cyk7XG4gICAgICAgICAgICBmb3IgKDsgayAhPSAwOyBrID4+Pj0gOClcbiAgICAgICAgICAgICAgICB0aGlzLl9zZWxlY3RlZENvdW50ICs9IEJpdEFycmF5Ll9vbkJpdENvdW50W2sgJiAweGZmXTtcbiAgICAgICAgICAgIHRoaXMuX3NlbGVjdGVkQ291bnRWZXJzaW9uID0gdGhpcy5fdmVyc2lvbjtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gKHZhbHVlID8gdGhpcy5fc2VsZWN0ZWRDb3VudCA6IHRoaXMuX2xlbmd0aCAtIHRoaXMuX3NlbGVjdGVkQ291bnQpO1xuICAgIH1cbiAgICAvLy8gUmV0dXJucyBhIG51bWJlciBvZiBzZXQgYml0cyB3aGVyZSBhbHNvIFtjaGVja10gaXMgdHJ1ZVxuICAgIGNvdW50V2hlcmUoY2hlY2spIHtcbiAgICAgICAgbGV0IHJlc3VsdCA9IDA7XG4gICAgICAgIGlmICh0aGlzLnRydWVDb3VudCgpID09IHRoaXMuX2xlbmd0aCkge1xuICAgICAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCB0aGlzLl9sZW5ndGg7IGkrKylcbiAgICAgICAgICAgICAgICByZXN1bHQgKz0gY2hlY2soaSkgPyAxIDogMDtcbiAgICAgICAgfVxuICAgICAgICBlbHNlIHtcbiAgICAgICAgICAgIGZvciAobGV0IGkgPSAtMTsgKGkgPSB0aGlzLmZpbmROZXh0KGksIHRydWUpKSAhPSAtMTspXG4gICAgICAgICAgICAgICAgcmVzdWx0ICs9IGNoZWNrKGkpID8gMSA6IDA7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIHJlc3VsdDtcbiAgICB9XG4gICAgLy8vIFBlcmZvcm1zIGJpdCBcImFuZFwiIGFuZCBjb3VudHMgYml0cyBvZiB0aGUgc3BlY2lmaWVkIHZhbHVlLCB3aXRob3V0IGJpdHNldCBtb2RpZmljYXRpb24uXG4gICAgYW5kV2l0aENvdW50Qml0cyhzZWNvbmQsIHZhbHVlKSB7XG4gICAgICAgIGlmICh0aGlzLl9sZW5ndGggPT0gMClcbiAgICAgICAgICAgIHJldHVybiAwO1xuICAgICAgICBsZXQgY291bnQgPSAwO1xuICAgICAgICBjb25zdCBsZW4gPSB0aGlzLmxlbmd0aEluSW50cztcbiAgICAgICAgbGV0IGkgPSAwO1xuICAgICAgICBmb3IgKDsgaSA8IGxlbiAtIDE7IGkrKykge1xuICAgICAgICAgICAgZm9yIChsZXQgayA9IHRoaXMuX2RhdGFbaV0gJiBzZWNvbmQuX2RhdGFbaV07IGsgIT0gMDsgayA+Pj49IDgpXG4gICAgICAgICAgICAgICAgY291bnQgKz0gQml0QXJyYXkuX29uQml0Q291bnRbayAmIDB4ZmZdO1xuICAgICAgICB9XG4gICAgICAgIC8vIFRoZSBsYXN0IGludC5cbiAgICAgICAgbGV0IGsgPSB0aGlzLl9kYXRhW2ldICYgc2Vjb25kLl9kYXRhW2ldO1xuICAgICAgICBjb25zdCByZW1haW5pbmdCaXRzID0gdGhpcy5fbGVuZ3RoICYgMHgxZjtcbiAgICAgICAgaWYgKHJlbWFpbmluZ0JpdHMgIT0gMClcbiAgICAgICAgICAgIGsgJj0gfigoNDI5NDk2NzI5NSkgPDwgcmVtYWluaW5nQml0cyk7XG4gICAgICAgIGZvciAoOyBrICE9IDA7IGsgPj4+PSA4KVxuICAgICAgICAgICAgY291bnQgKz0gQml0QXJyYXkuX29uQml0Q291bnRbayAmIDB4ZmZdO1xuICAgICAgICByZXR1cm4gKHZhbHVlID8gY291bnQgOiB0aGlzLl9sZW5ndGggLSBjb3VudCk7XG4gICAgfVxuICAgIGNsZWFyKCkge1xuICAgICAgICB0aGlzLnNldExlbmd0aCgwKTtcbiAgICB9XG4gICAgY29udGFpbnModmFsdWUpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuZmluZE5leHQoLTEsIHZhbHVlKSA+PSAwO1xuICAgIH1cbiAgICBnZXQgYWxsVHJ1ZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY291bnRCaXRzKHRydWUpID09IHRoaXMuX2xlbmd0aDtcbiAgICB9XG4gICAgZ2V0IGFsbEZhbHNlKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5jb3VudEJpdHMoZmFsc2UpID09IHRoaXMuX2xlbmd0aDtcbiAgICB9XG4gICAgZ2V0IGFueVRydWUoKSB7XG4gICAgICAgIHJldHVybiB0aGlzLmNvdW50Qml0cyh0cnVlKSA+IDA7XG4gICAgfVxuICAgIGdldCBhbnlGYWxzZSgpIHtcbiAgICAgICAgcmV0dXJuIHRoaXMuY291bnRCaXRzKGZhbHNlKSA+IDA7XG4gICAgfVxuICAgIC8vLyBSZXR1cm5zIHRoZSBwb3NpdGlvbiBvZiB0aGUgbmV4dCBiaXQgb2YgdGhlIHNwZWNpZmllZCB2YWx1ZSwgc3RhcnRpbmcgZnJvbSB0aGUgc3BlY2lmaWVkIHBvc2l0aW9uLlxuICAgIC8vLyBSZXR1cm5zIC0xLCBpZiB0aGVyZSBhcmUgbm8gc3VjaCBiaXRzLlxuICAgIGZpbmROZXh0KGluZGV4LCB2YWx1ZSA9IHRydWUpIHtcbiAgICAgICAgdGhpcy5hc3N1cmVJblJhbmdlKGluZGV4LCAtMSwgdGhpcy5fbGVuZ3RoLCAnaW5kZXgnKTtcbiAgICAgICAgaWYgKGluZGV4ID49IHRoaXMuX2xlbmd0aCAtIDEpXG4gICAgICAgICAgICByZXR1cm4gLTE7XG4gICAgICAgIGluZGV4ID0gaW5kZXggPCAwID8gMCA6IGluZGV4ICsgMTsgLy8gc2tpcCBzdGFydFxuICAgICAgICBsZXQgdW51c2VkQml0cyA9IGluZGV4ICYgMHgxZjtcbiAgICAgICAgY29uc3QgbnVtSW50cyA9IHRoaXMubGVuZ3RoSW5JbnRzO1xuICAgICAgICBmb3IgKGxldCBpID0gTWF0aC5mbG9vcihpbmRleCAvIDMyKTsgaSA8IG51bUludHM7IGkrKykge1xuICAgICAgICAgICAgbGV0IGsgPSAodmFsdWUgPyB0aGlzLl9kYXRhW2ldIDogfnRoaXMuX2RhdGFbaV0pOyAvLyB1aW50IGNhc3RcbiAgICAgICAgICAgIGlmICh1bnVzZWRCaXRzICE9IDApIHtcbiAgICAgICAgICAgICAgICBrICY9ICgoMHhmZmZmZmZmZiA8PCB1bnVzZWRCaXRzKSAmIDB4ZmZmZmZmZmYpO1xuICAgICAgICAgICAgICAgIHVudXNlZEJpdHMgPSAwO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgZWxzZSBpZiAoIXZhbHVlICYmIGsgPT0gLTQyOTQ5NjcyOTYpIC8qIGxvb2tpbmcgZm9yIGZhbHNlLCBhbGwgYml0cyBhcmUgc2V0ICovIHtcbiAgICAgICAgICAgICAgICBjb250aW51ZTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGZvciAobGV0IGogPSAwOyBrICE9IDA7IGogKz0gOCwgayA+Pj49IDgpIHtcbiAgICAgICAgICAgICAgICBjb25zdCBwID0gQml0QXJyYXkuX2ZpcnN0T25CaXRbayAmIDB4ZmZdO1xuICAgICAgICAgICAgICAgIGlmIChwID49IDApIHtcbiAgICAgICAgICAgICAgICAgICAgaW5kZXggPSBwICsgKGkgKiAzMikgKyBqO1xuICAgICAgICAgICAgICAgICAgICBpZiAoaW5kZXggPj0gdGhpcy5fbGVuZ3RoKVxuICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIC0xO1xuICAgICAgICAgICAgICAgICAgICByZXR1cm4gaW5kZXg7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiAtMTtcbiAgICB9XG4gICAgLy8vIEZpbmRzIHByZXZpb3VzIGJpdCBvZiB0aGUgc3BlY2lmaWVkIHZhbHVlIGluIHRoZSBiaXRzZXQuXG4gICAgZmluZFByZXYoaW5kZXgsIHZhbHVlID0gdHJ1ZSkge1xuICAgICAgICBpZiAoaW5kZXggPT0gMClcbiAgICAgICAgICAgIHJldHVybiAtMTtcbiAgICAgICAgdGhpcy5hc3N1cmVJblJhbmdlKGluZGV4LCAtMSwgdGhpcy5fbGVuZ3RoLCAnaW5kZXgnKTtcbiAgICAgICAgaW5kZXggPSBpbmRleCA8IDAgPyB0aGlzLl9sZW5ndGggLSAxIDogaW5kZXggLSAxOyAvLyBza2lwIHN0YXJ0XG4gICAgICAgIGNvbnN0IGxhc3RJbnRJZHggPSBNYXRoLmZsb29yKGluZGV4IC8gMHgyMCk7XG4gICAgICAgIGxldCByZW1haW5pbmdCaXRzID0gKGluZGV4ICsgMSkgJiAweDFmO1xuICAgICAgICBmb3IgKGxldCBpID0gbGFzdEludElkeDsgaSA+PSAwOyBpLS0pIHtcbiAgICAgICAgICAgIGxldCBrID0gKHZhbHVlID8gdGhpcy5fZGF0YVtpXSA6IH50aGlzLl9kYXRhW2ldKTsgLy8gY2FzdFxuICAgICAgICAgICAgaWYgKHJlbWFpbmluZ0JpdHMgIT0gMCkge1xuICAgICAgICAgICAgICAgIGsgJj0gfigoNDI5NDk2NzI5NSkgPDwgcmVtYWluaW5nQml0cyk7XG4gICAgICAgICAgICAgICAgcmVtYWluaW5nQml0cyA9IDA7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBmb3IgKGxldCBqID0gMjQ7IGsgIT0gMDsgaiAtPSA4LCBrIDw8PSA4KSB7XG4gICAgICAgICAgICAgICAgY29uc3QgcCA9IEJpdEFycmF5Ll9sYXN0T25CaXRbayA+Pj4gMHgxOF07XG4gICAgICAgICAgICAgICAgaWYgKHAgPj0gMClcbiAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHAgKyAoaSAqIDMyKSArIGo7XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIC0xO1xuICAgIH1cbn1cbkJpdEFycmF5Ll9vbkJpdENvdW50ID0gSW50OEFycmF5LmZyb20oW1xuICAgIDAsIDEsIDEsIDIsIDEsIDIsIDIsIDMsIDEsIDIsIDIsIDMsIDIsIDMsIDMsIDQsXG4gICAgMSwgMiwgMiwgMywgMiwgMywgMywgNCwgMiwgMywgMywgNCwgMywgNCwgNCwgNSxcbiAgICAxLCAyLCAyLCAzLCAyLCAzLCAzLCA0LCAyLCAzLCAzLCA0LCAzLCA0LCA0LCA1LFxuICAgIDIsIDMsIDMsIDQsIDMsIDQsIDQsIDUsIDMsIDQsIDQsIDUsIDQsIDUsIDUsIDYsXG4gICAgMSwgMiwgMiwgMywgMiwgMywgMywgNCwgMiwgMywgMywgNCwgMywgNCwgNCwgNSxcbiAgICAyLCAzLCAzLCA0LCAzLCA0LCA0LCA1LCAzLCA0LCA0LCA1LCA0LCA1LCA1LCA2LFxuICAgIDIsIDMsIDMsIDQsIDMsIDQsIDQsIDUsIDMsIDQsIDQsIDUsIDQsIDUsIDUsIDYsXG4gICAgMywgNCwgNCwgNSwgNCwgNSwgNSwgNiwgNCwgNSwgNSwgNiwgNSwgNiwgNiwgNyxcbiAgICAxLCAyLCAyLCAzLCAyLCAzLCAzLCA0LCAyLCAzLCAzLCA0LCAzLCA0LCA0LCA1LFxuICAgIDIsIDMsIDMsIDQsIDMsIDQsIDQsIDUsIDMsIDQsIDQsIDUsIDQsIDUsIDUsIDYsXG4gICAgMiwgMywgMywgNCwgMywgNCwgNCwgNSwgMywgNCwgNCwgNSwgNCwgNSwgNSwgNixcbiAgICAzLCA0LCA0LCA1LCA0LCA1LCA1LCA2LCA0LCA1LCA1LCA2LCA1LCA2LCA2LCA3LFxuICAgIDIsIDMsIDMsIDQsIDMsIDQsIDQsIDUsIDMsIDQsIDQsIDUsIDQsIDUsIDUsIDYsXG4gICAgMywgNCwgNCwgNSwgNCwgNSwgNSwgNiwgNCwgNSwgNSwgNiwgNSwgNiwgNiwgNyxcbiAgICAzLCA0LCA0LCA1LCA0LCA1LCA1LCA2LCA0LCA1LCA1LCA2LCA1LCA2LCA2LCA3LFxuICAgIDQsIDUsIDUsIDYsIDUsIDYsIDYsIDcsIDUsIDYsIDYsIDcsIDYsIDcsIDcsIDhcbl0pO1xuQml0QXJyYXkuX2ZpcnN0T25CaXQgPSBJbnQ4QXJyYXkuZnJvbShbXG4gICAgLTEsIDAsIDEsIDAsIDIsIDAsIDEsIDAsIDMsIDAsIDEsIDAsIDIsIDAsIDEsIDAsXG4gICAgNCwgMCwgMSwgMCwgMiwgMCwgMSwgMCwgMywgMCwgMSwgMCwgMiwgMCwgMSwgMCxcbiAgICA1LCAwLCAxLCAwLCAyLCAwLCAxLCAwLCAzLCAwLCAxLCAwLCAyLCAwLCAxLCAwLFxuICAgIDQsIDAsIDEsIDAsIDIsIDAsIDEsIDAsIDMsIDAsIDEsIDAsIDIsIDAsIDEsIDAsXG4gICAgNiwgMCwgMSwgMCwgMiwgMCwgMSwgMCwgMywgMCwgMSwgMCwgMiwgMCwgMSwgMCxcbiAgICA0LCAwLCAxLCAwLCAyLCAwLCAxLCAwLCAzLCAwLCAxLCAwLCAyLCAwLCAxLCAwLFxuICAgIDUsIDAsIDEsIDAsIDIsIDAsIDEsIDAsIDMsIDAsIDEsIDAsIDIsIDAsIDEsIDAsXG4gICAgNCwgMCwgMSwgMCwgMiwgMCwgMSwgMCwgMywgMCwgMSwgMCwgMiwgMCwgMSwgMCxcbiAgICA3LCAwLCAxLCAwLCAyLCAwLCAxLCAwLCAzLCAwLCAxLCAwLCAyLCAwLCAxLCAwLFxuICAgIDQsIDAsIDEsIDAsIDIsIDAsIDEsIDAsIDMsIDAsIDEsIDAsIDIsIDAsIDEsIDAsXG4gICAgNSwgMCwgMSwgMCwgMiwgMCwgMSwgMCwgMywgMCwgMSwgMCwgMiwgMCwgMSwgMCxcbiAgICA0LCAwLCAxLCAwLCAyLCAwLCAxLCAwLCAzLCAwLCAxLCAwLCAyLCAwLCAxLCAwLFxuICAgIDYsIDAsIDEsIDAsIDIsIDAsIDEsIDAsIDMsIDAsIDEsIDAsIDIsIDAsIDEsIDAsXG4gICAgNCwgMCwgMSwgMCwgMiwgMCwgMSwgMCwgMywgMCwgMSwgMCwgMiwgMCwgMSwgMCxcbiAgICA1LCAwLCAxLCAwLCAyLCAwLCAxLCAwLCAzLCAwLCAxLCAwLCAyLCAwLCAxLCAwLFxuICAgIDQsIDAsIDEsIDAsIDIsIDAsIDEsIDAsIDMsIDAsIDEsIDAsIDIsIDAsIDEsIDBcbl0pO1xuQml0QXJyYXkuX2xhc3RPbkJpdCA9IEludDhBcnJheS5mcm9tKFtcbiAgICAtMSwgMCwgMSwgMSwgMiwgMiwgMiwgMiwgMywgMywgMywgMywgMywgMywgMywgMyxcbiAgICA0LCA0LCA0LCA0LCA0LCA0LCA0LCA0LCA0LCA0LCA0LCA0LCA0LCA0LCA0LCA0LFxuICAgIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsIDUsXG4gICAgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSwgNSxcbiAgICA2LCA2LCA2LCA2LCA2LCA2LCA2LCA2LCA2LCA2LCA2LCA2LCA2LCA2LCA2LCA2LFxuICAgIDYsIDYsIDYsIDYsIDYsIDYsIDYsIDYsIDYsIDYsIDYsIDYsIDYsIDYsIDYsIDYsXG4gICAgNiwgNiwgNiwgNiwgNiwgNiwgNiwgNiwgNiwgNiwgNiwgNiwgNiwgNiwgNiwgNixcbiAgICA2LCA2LCA2LCA2LCA2LCA2LCA2LCA2LCA2LCA2LCA2LCA2LCA2LCA2LCA2LCA2LFxuICAgIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsXG4gICAgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNyxcbiAgICA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LFxuICAgIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsXG4gICAgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNyxcbiAgICA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LCA3LFxuICAgIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsIDcsXG4gICAgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgNywgN1xuXSk7XG4vLyMgc291cmNlTWFwcGluZ1VSTD1kYXRhOmFwcGxpY2F0aW9uL2pzb247YmFzZTY0LGV5SjJaWEp6YVc5dUlqb3pMQ0ptYVd4bElqb2lZbWwwTFdGeWNtRjVMbXB6SWl3aWMyOTFjbU5sVW05dmRDSTZJaUlzSW5OdmRYSmpaWE1pT2xzaVltbDBMV0Z5Y21GNUxuUnpJbDBzSW01aGJXVnpJanBiWFN3aWJXRndjR2x1WjNNaU9pSkJRVUZCTEUxQlFVMHNRMEZCUXl4UFFVRlBMRTlCUVU4c1VVRkJVVHRKUVc5Rk0wSXNXVUZCV1N4SFFVRjVRaXhGUVVGRkxHVkJRV2xETEV0QlFVczdVVUZhY2tVc1dVRkJUeXhIUVVGSExFTkJRVU1zUTBGQlF6dFJRVU5hTEdGQlFWRXNSMEZCUnl4RFFVRkRMRU5CUVVNN1VVRkRZaXhwUWtGQldTeEhRVUZITEVOQlFVTXNRMEZCUXp0UlFVTnFRaXh0UWtGQll5eEhRVUZITEVOQlFVTXNRMEZCUXp0UlFVTnVRaXd3UWtGQmNVSXNSMEZCUnl4RFFVRkRMRU5CUVVNc1EwRkJRenRSUVVNelFpdzBRa0ZCZFVJc1IwRkJSeXhEUVVGRExFTkJRVU1zUTBGQlF6dFJRVU0zUWl4dFFrRkJZeXhIUVVGSExFVkJRVVVzUTBGQlF6dFJRVU53UWl3d1FrRkJjVUlzUjBGQlJ5eERRVUZETEVOQlFVTXNRMEZCUXp0UlFVTnVReXh4UWtGQlowSXNSMEZCUnl4TFFVRkxMRU5CUVVNN1VVRkxka0lzU1VGQlNTeFBRVUZQTEVkQlFVY3NTMEZCU3l4UlFVRlJMRVZCUVVVN1dVRkRNMElzVFVGQlRTeE5RVUZOTEVkQlFVY3NSMEZCUnl4RFFVRkRPMWxCUTI1Q0xFMUJRVTBzU1VGQlNTeEhRVUZITEZGQlFWRXNRMEZCUXl4aFFVRmhMRU5CUVVNc1RVRkJUU3hEUVVGRExFTkJRVU03V1VGRE5VTXNTVUZCU1N4WlFVRlpMRVZCUVVVN1owSkJRMmhDTEV0QlFVc3NTVUZCU1N4RFFVRkRMRWRCUVVjc1EwRkJReXhGUVVGRkxFTkJRVU1zUjBGQlJ5eEpRVUZKTEVOQlFVTXNUVUZCVFN4RlFVRkZMRU5CUVVNc1JVRkJSVHR2UWtGRGJFTXNTVUZCU1N4RFFVRkRMRU5CUVVNc1EwRkJReXhIUVVGSExFTkJRVU1zUTBGQlF5eERRVUZETzJGQlEyaENPMWxCUTBRc1NVRkJTU3hEUVVGRExFdEJRVXNzUjBGQlJ5eEpRVUZKTEVOQlFVTTdXVUZEYkVJc1NVRkJTU3hEUVVGRExFOUJRVThzUjBGQlJ5eE5RVUZOTEVOQlFVTTdVMEZEZGtJN1lVRkJUU3hKUVVGSkxFZEJRVWNzV1VGQldTeFhRVUZYTEVWQlFVVTdXVUZEY2tNc1NVRkJTU3hEUVVGRExFdEJRVXNzUjBGQlJ5eEhRVUZyUWl4RFFVRkRPMWxCUTJoRExFbEJRVWtzUTBGQlF5eFBRVUZQTEVkQlFVY3NXVUZCYzBJc1EwRkJRenRUUVVOMlF6dGhRVUZOTzFsQlEwd3NUVUZCVFN4SlFVRkpMRXRCUVVzc1EwRkJReXh4UWtGQmNVSXNRMEZCUXl4RFFVRkRPMU5CUTNoRE8wbEJRMGdzUTBGQlF6dEpRVWRFTEZWQlFWVXNTMEZCU3l4UFFVRlBMRWxCUVVrc1EwRkJReXhMUVVGTExFTkJRVU1zUTBGQlF5eERRVUZETzBsQlJXNURMRlZCUVZVc1EwRkJReXhIUVVGWExFVkJRVVVzVDBGQlpUdFJRVU55UXl4SlFVRkpMRWRCUVVjc1IwRkJSeXhEUVVGRE8xbEJRVVVzVFVGQlRTeEpRVUZKTEV0QlFVc3NRMEZCUXl4SFFVRkhMRTlCUVU4c09FSkJRVGhDTEVOQlFVTXNRMEZCUXp0SlFVTjZSU3hEUVVGRE8wbEJSVVFzWVVGQllTeERRVUZETEV0QlFXRXNSVUZCUlN4SFFVRlhMRVZCUVVVc1IwRkJWeXhGUVVGRkxFOUJRV1U3VVVGRGNFVXNTVUZCU1N4RFFVRkRMRXRCUVVzc1IwRkJSeXhIUVVGSExFTkJRVU1zU1VGQlNTeERRVUZETEV0QlFVc3NSMEZCUnl4SFFVRkhMRU5CUVVNN1dVRkRhRU1zVFVGQlRTeEpRVUZKTEV0QlFVc3NRMEZCUXl4WlFVRlpMRTlCUVU4c1MwRkJTeXhMUVVGTExHMUNRVUZ0UWl4SFFVRkhMRXRCUVVzc1IwRkJSeXhIUVVGSExFTkJRVU1zUTBGQlF6dEpRVU53Uml4RFFVRkRPMGxCUlVRc1NVRkJTU3hEUVVGRExFZEJRV2RDTEVWQlFVVXNSMEZCWjBJc1JVRkJSU3hMUVVGaE8xRkJRM0JFTEV0QlFVc3NTVUZCU1N4RFFVRkRMRWRCUVVjc1EwRkJReXhGUVVGRkxFTkJRVU1zUjBGQlJ5eExRVUZMTEVWQlFVVXNRMEZCUXl4RlFVRkZPMWxCUXpWQ0xFZEJRVWNzUTBGQlF5eERRVUZETEVOQlFVTXNSMEZCUnl4SFFVRkhMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU03U1VGRGNFSXNRMEZCUXp0SlFVVkVMRkZCUVZFc1EwRkJReXhMUVVGbE8xRkJRM1JDTEVsQlFVa3NTVUZCU1N4RFFVRkRMRTlCUVU4c1NVRkJTU3hMUVVGTExFTkJRVU1zVDBGQlR6dFpRVU12UWl4TlFVRk5MRWxCUVVrc1MwRkJTeXhEUVVGRExHMUNRVUZ0UWl4SlFVRkpMRU5CUVVNc1QwRkJUeXhQUVVGUExFdEJRVXNzUTBGQlF5eFBRVUZQTEVkQlFVY3NRMEZCUXl4RFFVRkRPMUZCUXpGRkxFbEJRVWtzUTBGQlF5eEpRVUZKTEVOQlFVTXNTMEZCU3l4RFFVRkRMRXRCUVVzc1JVRkJSU3hKUVVGSkxFTkJRVU1zUzBGQlN5eEZRVUZGTEVsQlFVa3NRMEZCUXl4WlFVRlpMRU5CUVVNc1EwRkJRenRSUVVOMFJDeEpRVUZKTEVOQlFVTXNVVUZCVVN4RlFVRkZMRU5CUVVNN1NVRkRiRUlzUTBGQlF6dEpRVVZFTEVsQlFVa3NUVUZCVFR0UlFVTlNMRTlCUVU4c1NVRkJTU3hEUVVGRExFOUJRVThzUTBGQlF6dEpRVU4wUWl4RFFVRkRPMGxCUlVRc1NVRkJTU3hOUVVGTk8xRkJRMUlzVDBGQlR5eEpRVUZKTEVOQlFVTXNTMEZCU3l4RFFVRkRPMGxCUTNCQ0xFTkJRVU03U1VGRlJDeEpRVUZKTEUxQlFVMHNRMEZCUXl4SlFVRnBRanRSUVVNeFFpeEpRVUZKTEVOQlFVTXNTMEZCU3l4SFFVRkhMRWxCUVVrc1EwRkJRenRSUVVOc1FpeEpRVUZKTEVOQlFVTXNVVUZCVVN4RlFVRkZMRU5CUVVNN1NVRkRiRUlzUTBGQlF6dEpRVVZFTEVsQlFVa3NUMEZCVHp0UlFVTlVMRTlCUVU4c1NVRkJTU3hEUVVGRExGRkJRVkVzUTBGQlF6dEpRVU4yUWl4RFFVRkRPMGxCUlVRc1NVRkJTU3hQUVVGUExFTkJRVU1zUzBGQllUdFJRVU4yUWl4SlFVRkpMRU5CUVVNc1VVRkJVU3hIUVVGSExFdEJRVXNzUTBGQlF6dEpRVU40UWl4RFFVRkRPMGxCUlVRc1owSkJRV2RDTEVOQlFVTXNUVUZCVFN4SFFVRkhMRWxCUVVrN1VVRkROVUlzU1VGQlNTeERRVUZETEZGQlFWRXNSVUZCUlN4RFFVRkRPMGxCUTJ4Q0xFTkJRVU03U1VGRlJDeEpRVUZKTEZsQlFWazdVVUZEWkN4UFFVRlBMRWxCUVVrc1EwRkJReXhMUVVGTExFTkJRVU1zUTBGQlF5eEpRVUZKTEVOQlFVTXNUMEZCVHl4SFFVRkhMRWxCUVVrc1EwRkJReXhIUVVGSExFbEJRVWtzUTBGQlF5eERRVUZETzBsQlEyeEVMRU5CUVVNN1NVRkZSQ3hKUVVGSkxHRkJRV0U3VVVGRFppeFBRVUZQTEVsQlFVa3NRMEZCUXl4UlFVRlJMRWxCUVVrc1NVRkJTU3hEUVVGRExIRkNRVUZ4UWl4RFFVRkRMRU5CUVVNc1EwRkJReXhKUVVGSkxFTkJRVU1zWTBGQll5eERRVUZETEVOQlFVTXNRMEZCUXl4RlFVRkZMRU5CUVVNN1NVRkRhRVlzUTBGQlF6dEpRVVZFTEVsQlFVa3NZVUZCWVN4RFFVRkRMRWxCUVZrN1VVRkROVUlzU1VGQlNTeERRVUZETEdOQlFXTXNSMEZCUnl4SlFVRkpMRU5CUVVNN1VVRkRNMElzU1VGQlNTeERRVUZETEhGQ1FVRnhRaXhIUVVGSExFbEJRVWtzUTBGQlF5eFJRVUZSTEVOQlFVTTdTVUZETjBNc1EwRkJRenRKUVVWRUxFbEJRVWtzU1VGQlNUdFJRVU5PTEU5QlFVOHNTVUZCU1N4RFFVRkRPMGxCUTJRc1EwRkJRenRKUVVWRUxGTkJRVk1zUTBGQlF5eExRVUZoTzFGQlEzSkNMRWxCUVVrc1MwRkJTeXhIUVVGSExFTkJRVU03V1VGRFdDeE5RVUZOTEVsQlFVa3NTMEZCU3l4RFFVRkRMR2RDUVVGblFpeERRVUZETEVOQlFVTTdVVUZGY0VNc1NVRkJTU3hMUVVGTExFbEJRVWtzU1VGQlNTeERRVUZETEU5QlFVODdXVUZCUlN4UFFVRlBPMUZCUTJ4RExFMUJRVTBzVjBGQlZ5eEhRVUZITEVsQlFVa3NRMEZCUXl4TFFVRkxMRU5CUVVNc1EwRkJReXhMUVVGTExFZEJRVWNzU1VGQlNTeERRVUZETEVkQlFVY3NTVUZCU1N4RFFVRkRMRU5CUVVNN1VVRkRkRVFzU1VGQlNTeERRVUZETEZkQlFWY3NSMEZCUnl4SlFVRkpMRU5CUVVNc1MwRkJTeXhEUVVGRExFMUJRVTBzUTBGQlF5eEpRVUZKTEVOQlFVTXNRMEZCUXl4WFFVRlhMRWRCUVVjc1NVRkJTU3hEUVVGRExHZENRVUZuUWl4RFFVRkRMRWRCUVVjc1NVRkJTU3hEUVVGRExFdEJRVXNzUTBGQlF5eE5RVUZOTEVOQlFVTXNSVUZCUlR0WlFVTndSeXhOUVVGTkxFOUJRVThzUjBGQlJ5eEpRVUZKTEZkQlFWY3NRMEZCUXl4WFFVRlhMRU5CUVVNc1EwRkJRenRaUVVNM1F5eEpRVUZKTEVOQlFVTXNTVUZCU1N4RFFVRkRMRWxCUVVrc1EwRkJReXhMUVVGTExFVkJRVVVzVDBGQlR5eEZRVUZGTEVOQlFVTXNWMEZCVnl4SFFVRkhMRWxCUVVrc1EwRkJReXhMUVVGTExFTkJRVU1zVFVGQlRTeERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRMRWxCUVVrc1EwRkJReXhMUVVGTExFTkJRVU1zVFVGQlRTeERRVUZETEVOQlFVTXNRMEZCUXl4WFFVRlhMRU5CUVVNc1EwRkJRenRaUVVOd1J5eEpRVUZKTEVOQlFVTXNTMEZCU3l4SFFVRkhMRTlCUVU4c1EwRkJRenRUUVVOMFFqdFJRVVZFTEVsQlFVa3NTMEZCU3l4SFFVRkhMRWxCUVVrc1EwRkJReXhQUVVGUExFVkJRVVU3V1VGRGVFSXNTVUZCU1N4SlFVRkpMRU5CUVVNc1QwRkJUeXhIUVVGSExFbEJRVWtzUjBGQlJ5eERRVUZETzJkQ1FVTjZRaXhKUVVGSkxFTkJRVU1zUzBGQlN5eERRVUZETEVsQlFVa3NRMEZCUXl4WlFVRlpMRWRCUVVjc1EwRkJReXhEUVVGRExFbEJRVWtzUTBGQlF5eERRVUZETEVsQlFVa3NRMEZCUXl4RFFVRkRMRWxCUVVrc1EwRkJReXhQUVVGUExFZEJRVWNzU1VGQlNTeERRVUZETEVkQlFVY3NTVUZCU1N4RFFVRkRMRU5CUVVNc1IwRkJSeXhEUVVGRExFTkJRVU03V1VGRmFrWXNTVUZCU1N4RFFVRkRMRXRCUVVzc1EwRkJReXhKUVVGSkxFTkJRVU1zUTBGQlF5eEZRVUZGTEVsQlFVa3NRMEZCUXl4WlFVRlpMRVZCUVVVc1YwRkJWeXhEUVVGRExFTkJRVU03VTBGRGNFUTdVVUZEUkN4SlFVRkpMRU5CUVVNc1QwRkJUeXhIUVVGSExFdEJRVXNzUTBGQlF6dFJRVU55UWl4SlFVRkpMRU5CUVVNc1VVRkJVU3hGUVVGRkxFTkJRVU03U1VGRGJFSXNRMEZCUXp0SlFVVkVMRTFCUVUwc1EwRkJReXhQUVVGUExFTkJRVU1zU1VGQll5eEZRVUZGTEVsQlFXTTdVVUZETTBNc1NVRkJTU3hKUVVGSkxFTkJRVU1zVDBGQlR5eEpRVUZKTEVsQlFVa3NRMEZCUXl4UFFVRlBPMWxCUXpsQ0xFMUJRVTBzU1VGQlNTeExRVUZMTEVOQlFVTXNiVUpCUVcxQ0xFbEJRVWtzUTBGQlF5eFBRVUZQTEU5QlFVOHNTVUZCU1N4RFFVRkRMRTlCUVU4c1IwRkJSeXhEUVVGRExFTkJRVU03VVVGRmVrVXNUVUZCVFN4SlFVRkpMRWRCUVVjc1NVRkJTU3hSUVVGUkxFTkJRVU1zU1VGQlNTeERRVUZETEU5QlFVOHNRMEZCUXl4RFFVRkRPMUZCUTNoRExFbEJRVWtzUTBGQlF5eFBRVUZQTEVkQlFVY3NTVUZCU1N4RFFVRkRMRTlCUVU4c1EwRkJRenRSUVVNMVFpeEpRVUZKTEVOQlFVTXNTMEZCU3l4SFFVRkhMRkZCUVZFc1EwRkJReXhoUVVGaExFTkJRVU1zU1VGQlNTeERRVUZETEU5QlFVOHNRMEZCUXl4RFFVRkRPMUZCUTJ4RUxFbEJRVWtzUTBGQlF5eFJRVUZSTEVkQlFVY3NRMEZCUXl4RFFVRkRPMUZCUld4Q0xFMUJRVTBzUjBGQlJ5eEhRVUZITEVsQlFVa3NRMEZCUXl4WlFVRlpMRU5CUVVNN1VVRkRPVUlzUzBGQlN5eEpRVUZKTEVOQlFVTXNSMEZCUnl4RFFVRkRMRVZCUVVVc1EwRkJReXhIUVVGSExFZEJRVWNzUlVGQlJTeERRVUZETEVWQlFVVTdXVUZETVVJc1NVRkJTU3hEUVVGRExFdEJRVXNzUTBGQlF5eERRVUZETEVOQlFVTXNSMEZCUnl4SlFVRkpMRU5CUVVNc1MwRkJTeXhEUVVGRExFTkJRVU1zUTBGQlF5eEhRVUZITEVsQlFVa3NRMEZCUXl4TFFVRkxMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU03VVVGRmFFUXNUMEZCVHl4SlFVRkpMRU5CUVVNN1NVRkRaQ3hEUVVGRE8wbEJSVThzVFVGQlRTeERRVUZETEdGQlFXRXNRMEZCUXl4TlFVRmpPMUZCUTNwRExFOUJRVThzU1VGQlNTeFhRVUZYTEVOQlFVTXNTVUZCU1N4RFFVRkRMRXRCUVVzc1EwRkJReXhEUVVGRExFMUJRVTBzUjBGQlJ5eEpRVUZKTEVOQlFVTXNSMEZCUnl4SlFVRkpMRU5CUVVNc1EwRkJReXhEUVVGRE8wbEJRemRFTEVOQlFVTTdTVUZGUkN4TlFVRk5MRU5CUVVNc1ZVRkJWU3hEUVVGRExFMUJRWE5DTzFGQlEzUkRMRTFCUVUwc1NVRkJTU3hIUVVGSExFbEJRVWtzVVVGQlVTeERRVUZETEUxQlFVMHNRMEZCUXl4TlFVRk5MRU5CUVVNc1EwRkJRenRSUVVONlF5eEpRVUZKTEVOQlFVTXNVVUZCVVN4SFFVRkhMRU5CUVVNc1EwRkJRenRSUVVWc1FpeExRVUZMTEVsQlFVa3NRMEZCUXl4SFFVRkhMRU5CUVVNc1JVRkJSU3hEUVVGRExFZEJRVWNzU1VGQlNTeERRVUZETEU5QlFVOHNSVUZCUlN4RFFVRkRMRVZCUVVVc1JVRkJSVHRaUVVOeVF5eEpRVUZKTEUxQlFVMHNRMEZCUXl4RFFVRkRMRU5CUVVNN1owSkJRMWdzU1VGQlNTeERRVUZETEV0QlFVc3NRMEZCUXl4SlFVRkpMRU5CUVVNc1MwRkJTeXhEUVVGRExFTkJRVU1zUjBGQlJ5eEpRVUZKTEVOQlFVTXNRMEZCUXl4SlFVRkpMRU5CUVVNc1NVRkJTU3hEUVVGRExFTkJRVU1zUTBGQlF5eEhRVUZITEVsQlFVa3NRMEZCUXl4SFFVRkhMRWxCUVVrc1EwRkJReXhEUVVGRE8xTkJRMmhGTzFGQlEwUXNUMEZCVHl4SlFVRkpMRU5CUVVNN1NVRkRaQ3hEUVVGRE8wbEJSVVFzYzBkQlFYTkhPMGxCUTNSSExFMUJRVTBzUTBGQlF5eFBRVUZQTEVOQlFVTXNTMEZCWVN4RlFVRkZMRWxCUVdNN1VVRkRNVU1zVFVGQlRTeEpRVUZKTEVkQlFVY3NTVUZCU1N4UlFVRlJMRU5CUVVNc1MwRkJTeXhEUVVGRExFTkJRVU03VVVGRGFrTXNTMEZCU3l4SlFVRkpMRU5CUVVNc1IwRkJSeXhEUVVGRExFVkJRVVVzUTBGQlF5eEhRVUZITEV0QlFVc3NSVUZCUlN4RlFVRkZMRU5CUVVNN1dVRkROVUlzU1VGQlNTeERRVUZETEUxQlFVMHNRMEZCUXl4RFFVRkRMRVZCUVVVc1NVRkJTU3hEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTTdVVUZGTVVJc1NVRkJTU3hEUVVGRExGRkJRVkVzUjBGQlJ5eERRVUZETEVOQlFVTTdVVUZEYkVJc1QwRkJUeXhKUVVGSkxFTkJRVU03U1VGRFpDeERRVUZETzBsQlJVUXNhMFZCUVd0Rk8wbEJRMnhGTEUxQlFVMHNRMEZCUXl4VlFVRlZMRU5CUVVNc1EwRkJVenRSUVVONlFpeFBRVUZQTEZGQlFWRXNRMEZCUXl4UFFVRlBMRU5CUVVNc1EwRkJReXhEUVVGRExFMUJRVTBzUlVGQlJTeERRVUZETEVOQlFWTXNSVUZCUlN4RlFVRkZMRU5CUVVNc1EwRkJReXhEUVVGRExFMUJRVTBzUTBGQlF5eERRVUZETEVOQlFVTXNTVUZCU1N4SFFVRkhMRU5CUVVNc1EwRkJRenRKUVVOMlJTeERRVUZETzBsQlJVUXNORVZCUVRSRk8wbEJRelZGTEUxQlFVMHNRMEZCUXl4bFFVRmxMRU5CUVVNc1QwRkJaU3hGUVVGRkxFdEJRV3RDTzFGQlEzaEVMRTFCUVUwc1NVRkJTU3hIUVVGSExFbEJRVWtzVVVGQlVTeERRVUZETEU5QlFVOHNRMEZCUXl4RFFVRkRPMUZCUTI1RExFbEJRVWtzUTBGQlF5eExRVUZMTEVkQlFVY3NTMEZCU3l4RFFVRkRPMUZCUTI1Q0xFOUJRVThzU1VGQlNTeERRVUZETzBsQlEyUXNRMEZCUXp0SlFVVkVMSGxEUVVGNVF6dEpRVU42UXl4TlFVRk5MRU5CUVVNc1UwRkJVeXhEUVVGRExFdEJRV2xDTzFGQlEyaERMRTFCUVUwc1IwRkJSeXhIUVVGSExFdEJRVXNzUTBGQlF5eE5RVUZOTEVOQlFVTTdVVUZEZWtJc1RVRkJUU3hKUVVGSkxFZEJRVWNzU1VGQlNTeFJRVUZSTEVOQlFVTXNSMEZCUnl4SFFVRkhMRU5CUVVNc1EwRkJReXhEUVVGRE8xRkJRMjVETEVsQlFVa3NRMEZCUXl4TFFVRkxMRWRCUVVjc1NVRkJTU3hYUVVGWExFTkJRVU1zU1VGQlNTeERRVUZETEV0QlFVc3NRMEZCUXl4RFFVRkRMRWRCUVVjc1IwRkJSeXhEUVVGRExFTkJRVU1zUjBGQlJ5eERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRPMUZCUTNoRUxFbEJRVWtzUTBGQlF5eFBRVUZQTEVkQlFVY3NSMEZCUnl4SFFVRkhMRU5CUVVNc1EwRkJRenRSUVVOMlFpeEpRVUZKTEVsQlFVa3NSMEZCUnl4RFFVRkRMRU5CUVVNN1VVRkRZaXhKUVVGSkxFbEJRVWtzUjBGQlJ5eERRVUZETEVOQlFVTTdVVUZGWWl4UFFVRlBMRU5CUVVNc1IwRkJSeXhIUVVGSExFbEJRVWtzUTBGQlF5eEpRVUZKTEVOQlFVTXNSVUZCUlR0WlFVTjRRaXhKUVVGSkxFTkJRVU1zUzBGQlN5eERRVUZETEVsQlFVa3NSVUZCUlN4RFFVRkRMRWRCUVVjc1EwRkRia0lzUTBGQlF5eERRVUZETEV0QlFVc3NRMEZCUXl4SlFVRkpMRU5CUVVNc1IwRkJSeXhKUVVGSkxFTkJRVU1zUjBGQlJ5eERRVUZETEVOQlFVTXNTMEZCU3l4RFFVRkRMRWxCUVVrc1IwRkJSeXhEUVVGRExFTkJRVU1zUjBGQlJ5eEpRVUZKTEVOQlFVTXNTVUZCU1N4RFFVRkRMRU5CUVVNc1EwRkJRenRuUWtGRGVFUXNRMEZCUXl4RFFVRkRMRXRCUVVzc1EwRkJReXhKUVVGSkxFZEJRVWNzUTBGQlF5eERRVUZETEVkQlFVY3NTVUZCU1N4RFFVRkRMRWxCUVVrc1NVRkJTU3hEUVVGRExFTkJRMjVETEVkQlFVY3NRMEZCUXl4RFFVRkRMRXRCUVVzc1EwRkJReXhKUVVGSkxFZEJRVWNzUTBGQlF5eERRVUZETEVkQlFVY3NTVUZCU1N4RFFVRkRMRWxCUVVrc1NVRkJTU3hEUVVGRExFTkJRVU03V1VGRmRrTXNTVUZCU1N4SlFVRkpMRU5CUVVNc1EwRkJRenRUUVVOWU8xRkJSVVFzU1VGQlNTeEhRVUZITEVkQlFVY3NTVUZCU1N4SlFVRkpMRU5CUVVNN1dVRkRha0lzU1VGQlNTeERRVUZETEV0QlFVc3NRMEZCUXl4SlFVRkpMRU5CUVVNc1IwRkJSeXhEUVVGRExFdEJRVXNzUTBGQlF5eEpRVUZKTEVkQlFVY3NRMEZCUXl4RFFVRkRMRWRCUVVjc1NVRkJTU3hEUVVGRExFbEJRVWtzU1VGQlNTeERRVUZETzFGQlJYUkVMRWxCUVVrc1IwRkJSeXhIUVVGSExFbEJRVWtzU1VGQlNTeERRVUZETzFsQlEycENMRWxCUVVrc1EwRkJReXhMUVVGTExFTkJRVU1zU1VGQlNTeERRVUZETEVsQlFVa3NRMEZCUXl4TFFVRkxMRU5CUVVNc1NVRkJTU3hIUVVGSExFTkJRVU1zUTBGQlF5eEhRVUZITEVsQlFVa3NRMEZCUXl4SlFVRkpMRU5CUVVNc1EwRkJRenRSUVVWd1JDeEpRVUZKTEVkQlFVY3NSMEZCUnl4SlFVRkpMRWxCUVVrc1EwRkJRenRaUVVOcVFpeEpRVUZKTEVOQlFVTXNTMEZCU3l4RFFVRkRMRWxCUVVrc1EwRkJReXhKUVVGSkxFdEJRVXNzUTBGQlF5eEpRVUZKTEVOQlFVTXNSMEZCUnl4SlFVRkpMRU5CUVVNN1VVRkZla01zU1VGQlNTeERRVUZETEZGQlFWRXNSMEZCUnl4RFFVRkRMRU5CUVVNN1VVRkRiRUlzVDBGQlR5eEpRVUZKTEVOQlFVTTdTVUZEWkN4RFFVRkRPMGxCUlVRc1VVRkJVVHRSUVVOT0xFOUJRVThzUjBGQlJ5eEpRVUZKTEVOQlFVTXNUMEZCVHl4VlFVRlZMRWxCUVVrc1EwRkJReXhUUVVGVExFTkJRVU1zU1VGQlNTeERRVUZETEUxQlFVMHNRMEZCUXp0SlFVTTNSQ3hEUVVGRE8wbEJSVVFzTkVOQlFUUkRPMGxCUXpWRExFMUJRVTBzUTBGQlF5eExRVUZsTzFGQlEzQkNMRWxCUVVrc1NVRkJTU3hKUVVGSkxFdEJRVXM3V1VGQlJTeFBRVUZQTEVsQlFVa3NRMEZCUXp0UlFVTXZRaXhKUVVGSkxFdEJRVXNzU1VGQlNTeEpRVUZKTzFsQlFVVXNUMEZCVHl4TFFVRkxMRU5CUVVNN1VVRkRhRU1zU1VGQlNTeEpRVUZKTEVOQlFVTXNUMEZCVHl4SlFVRkpMRXRCUVVzc1EwRkJReXhQUVVGUE8xbEJRVVVzVDBGQlR5eExRVUZMTEVOQlFVTTdVVUZEYUVRc1NVRkJTU3hKUVVGSkxFTkJRVU1zVDBGQlR5eEpRVUZKTEVOQlFVTTdXVUZCUlN4UFFVRlBMRWxCUVVrc1EwRkJRenRSUVVWdVF5eExRVUZMTEVsQlFVa3NRMEZCUXl4SFFVRkhMRU5CUVVNc1JVRkJSU3hEUVVGRExFZEJRVWNzU1VGQlNTeERRVUZETEV0QlFVc3NRMEZCUXl4TlFVRk5MRWRCUVVjc1EwRkJReXhGUVVGRkxFTkJRVU1zUlVGQlJUdFpRVU0xUXl4SlFVRkpMRWxCUVVrc1EwRkJReXhMUVVGTExFTkJRVU1zUTBGQlF5eERRVUZETEVsQlFVa3NTMEZCU3l4RFFVRkRMRXRCUVVzc1EwRkJReXhEUVVGRExFTkJRVU03WjBKQlFVVXNUMEZCVHl4TFFVRkxMRU5CUVVNN1VVRkZjRVFzUzBGQlN5eEpRVUZKTEVOQlFVTXNSMEZCUnl4RFFVRkRMRWxCUVVrc1EwRkJReXhMUVVGTExFTkJRVU1zVFVGQlRTeEhRVUZITEVOQlFVTXNRMEZCUXl4SFFVRkhMRU5CUVVNc1JVRkJSU3hEUVVGRExFZEJRVWNzU1VGQlNTeERRVUZETEU5QlFVOHNSVUZCUlN4RFFVRkRMRVZCUVVVc1JVRkJSVHRaUVVNdlJDeEpRVUZKTEVsQlFVa3NRMEZCUXl4TlFVRk5MRU5CUVVNc1EwRkJReXhEUVVGRExFbEJRVWtzUzBGQlN5eERRVUZETEUxQlFVMHNRMEZCUXl4RFFVRkRMRU5CUVVNN1owSkJRMjVETEU5QlFVOHNTMEZCU3l4RFFVRkRPMU5CUTJoQ08xRkJRMFFzVDBGQlR5eEpRVUZKTEVOQlFVTTdTVUZEWkN4RFFVRkRPMGxCUlVRc2RVSkJRWFZDTzBsQlEzWkNMRXRCUVVzN1VVRkRTQ3hOUVVGTkxGRkJRVkVzUjBGQlJ5eEpRVUZKTEZGQlFWRXNRMEZCUXl4RFFVRkRMRVZCUVVVc1MwRkJTeXhEUVVGRExFTkJRVU03VVVGRGVFTXNVVUZCVVN4RFFVRkRMRXRCUVVzc1IwRkJSeXhYUVVGWExFTkJRVU1zU1VGQlNTeERRVUZETEVsQlFVa3NRMEZCUXl4TFFVRkxMRU5CUVVNc1EwRkJReXhEUVVGRExHMURRVUZ0UXp0UlFVTnNSaXhSUVVGUkxFTkJRVU1zVDBGQlR5eEhRVUZITEVsQlFVa3NRMEZCUXl4UFFVRlBMRU5CUVVNN1VVRkRhRU1zVVVGQlVTeERRVUZETEZGQlFWRXNSMEZCUnl4SlFVRkpMRU5CUVVNc1VVRkJVU3hEUVVGRE8xRkJRMnhETEU5QlFVOHNVVUZCVVN4RFFVRkRPMGxCUTJ4Q0xFTkJRVU03U1VGRlJDdzBRa0ZCTkVJN1NVRkROVUlzU1VGQlNTeERRVUZETEVsQlFXTXNSVUZCUlN4TlFVRmxPMUZCUTJ4RExFbEJRVWtzUTBGQlF5eE5RVUZOTEVOQlFVTXNTMEZCU3l4RlFVRkZMRXRCUVVzc1EwRkJReXhEUVVGRE8xRkJSVEZDTEV0QlFVc3NTVUZCU1N4RFFVRkRMRWRCUVVjc1EwRkJReXhGUVVGRkxFTkJRVU1zUjBGQlJ5eEpRVUZKTEVOQlFVTXNUMEZCVHl4RlFVRkZMRU5CUVVNc1JVRkJSU3hGUVVGRk8xbEJRM0pETEVsQlFVa3NTVUZCU1N4RFFVRkRMRU5CUVVNc1EwRkJRenRuUWtGRFZDeEpRVUZKTEVOQlFVTXNTMEZCU3l4RFFVRkRMRWxCUVVrc1EwRkJReXhMUVVGTExFTkJRVU1zUTBGQlF5eEhRVUZITEVsQlFVa3NRMEZCUXl4RFFVRkRMRWxCUVVrc1EwRkJReXhKUVVGSkxFTkJRVU1zUTBGQlF5eERRVUZETEVkQlFVY3NTVUZCU1N4RFFVRkRMRWRCUVVjc1NVRkJTU3hEUVVGRExFTkJRVU03VTBGRGFFVTdVVUZGUkN4SlFVRkpMRU5CUVVNc1owSkJRV2RDTEVOQlFVTXNUVUZCVFN4RFFVRkRMRU5CUVVNN1VVRkRPVUlzVDBGQlR5eEpRVUZKTEVOQlFVTTdTVUZEWkN4RFFVRkRPMGxCUlVRc2NVSkJRWEZDTzBsQlEzSkNMRTFCUVUwc1EwRkJReXhOUVVGTkxFZEJRVWNzU1VGQlNUdFJRVU5zUWl4TFFVRkxMRWxCUVVrc1EwRkJReXhIUVVGSExFTkJRVU1zUlVGQlJTeERRVUZETEVkQlFVY3NTVUZCU1N4RFFVRkRMRXRCUVVzc1EwRkJReXhOUVVGTkxFVkJRVVVzUTBGQlF5eEZRVUZGTzFsQlEzaERMRWxCUVVrc1EwRkJReXhMUVVGTExFTkJRVU1zUTBGQlF5eERRVUZETEVsQlFVa3NRMEZCUXl4RFFVRkRMRU5CUVVNN1VVRkZkRUlzU1VGQlNTeERRVUZETEdkQ1FVRm5RaXhEUVVGRExFMUJRVTBzUTBGQlF5eERRVUZETzBsQlEyaERMRU5CUVVNN1NVRkZSQ3h0UlVGQmJVVTdTVUZEYmtVc1RVRkJUU3hEUVVGRExFdEJRV01zUlVGQlJTeE5RVUZOTEVkQlFVY3NTMEZCU3p0UlFVTnVReXhOUVVGTkxFdEJRVXNzUjBGQlJ5eExRVUZMTEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTTdVVUZETjBJc1RVRkJUU3hIUVVGSExFZEJRVWNzU1VGQlNTeERRVUZETEZsQlFWa3NRMEZCUXp0UlFVVTVRaXhMUVVGTExFbEJRVWtzUTBGQlF5eEhRVUZITEVOQlFVTXNSVUZCUlN4RFFVRkRMRWRCUVVjc1IwRkJSeXhGUVVGRkxFTkJRVU1zUlVGQlJTeEZRVUZGTEdkQ1FVRm5RanRaUVVNMVF5eEpRVUZKTEVOQlFVTXNTMEZCU3l4RFFVRkRMRU5CUVVNc1EwRkJReXhIUVVGSExFdEJRVXNzUTBGQlF6dFJRVVY0UWl4SlFVRkpMRU5CUVVNc1owSkJRV2RDTEVOQlFVTXNUVUZCVFN4RFFVRkRMRU5CUVVNN1NVRkRhRU1zUTBGQlF6dEpRVVZFTEN0RFFVRXJRenRKUVVNdlF5dzRRMEZCT0VNN1NVRkRPVU1zZDBSQlFYZEVPMGxCUTNoRUxGVkJRVlVzUTBGQlF5eFBRVUZ6UWl4RlFVRkZMRXRCUVVzc1IwRkJSeXhKUVVGSkxFVkJRVVVzUzBGQlN5eEhRVUZITEVsQlFVa3NSVUZCUlN4TlFVRk5MRWRCUVVjc1NVRkJTVHRSUVVNeFJTeEpRVUZKTEV0QlFVczdXVUZEVUN4SlFVRkpMRU5CUVVNc1RVRkJUU3hEUVVGRExFTkJRVU1zUzBGQlN5eEZRVUZGTEV0QlFVc3NRMEZCUXl4RFFVRkRPMUZCUlRkQ0xFdEJRVXNzVFVGQlRTeERRVUZETEVsQlFVa3NUMEZCVHp0WlFVTnlRaXhKUVVGSkxFTkJRVU1zVDBGQlR5eERRVUZETEVOQlFVTXNSVUZCUlN4TFFVRkxMRU5CUVVNc1EwRkJRenRSUVVWNlFpeEpRVUZKTEVOQlFVTXNaMEpCUVdkQ0xFTkJRVU1zVFVGQlRTeERRVUZETEVOQlFVTTdTVUZEYUVNc1EwRkJRenRKUVVWRUxGVkJRVlVzUTBGQlF5eFBRVUZ6UWl4RlFVRkZMRXRCUVVzc1IwRkJSeXhKUVVGSk8xRkJRemRETEV0QlFVc3NUVUZCVFN4TFFVRkxMRWxCUVVrc1QwRkJUeXhGUVVGRk8xbEJRek5DTEVsQlFVa3NTVUZCU1N4RFFVRkRMRTFCUVUwc1EwRkJReXhMUVVGTExFTkJRVU1zU1VGQlNTeExRVUZMTzJkQ1FVTTNRaXhQUVVGUExFdEJRVXNzUTBGQlF6dFRRVU5vUWp0UlFVTkVMRTlCUVU4c1NVRkJTU3hEUVVGRE8wbEJRMlFzUTBGQlF6dEpRVVZFTEZGQlFWRXNRMEZCUXl4UFFVRnpRaXhGUVVGRkxFdEJRVXNzUjBGQlJ5eEpRVUZKTzFGQlF6TkRMRXRCUVVzc1RVRkJUU3hMUVVGTExFbEJRVWtzVDBGQlR5eEZRVUZGTzFsQlF6TkNMRWxCUVVrc1NVRkJTU3hEUVVGRExFMUJRVTBzUTBGQlF5eExRVUZMTEVOQlFVTXNTVUZCU1N4TFFVRkxPMmRDUVVNM1FpeFBRVUZQTEVsQlFVa3NRMEZCUXp0VFFVTm1PMUZCUTBRc1QwRkJUeXhMUVVGTExFTkJRVU03U1VGRFppeERRVUZETzBsQlJVUXNVVUZCVVN4RFFVRkRMRXRCUVdVc1JVRkJSU3hMUVVGTExFZEJRVWNzU1VGQlNTeEZRVUZGTEV0QlFVc3NSMEZCUnl4SlFVRkpMRVZCUVVVc1RVRkJUU3hIUVVGSExFbEJRVWtzUlVGQlJTeFZRVUZWTEVkQlFVY3NTVUZCU1R0UlFVTndSaXhKUVVGSkxFdEJRVXNzU1VGQlNTeFZRVUZWTzFsQlEzSkNMRWxCUVVrc1EwRkJReXhOUVVGTkxFTkJRVU1zUTBGQlF5eExRVUZMTEVWQlFVVXNTMEZCU3l4RFFVRkRMRU5CUVVNN1VVRkZOMElzU1VGQlNTeFZRVUZWTEVWQlFVVTdXVUZEWkN4TFFVRkxMRWxCUVVrc1EwRkJReXhIUVVGSExFTkJRVU1zUlVGQlJTeERRVUZETEVkQlFVY3NTVUZCU1N4RFFVRkRMRTlCUVU4c1JVRkJSU3hEUVVGRExFVkJRVVVzUlVGQlJUdG5Ra0ZEY2tNc1NVRkJTU3hMUVVGTExFTkJRVU1zUTBGQlF5eERRVUZETzI5Q1FVTldMRWxCUVVrc1EwRkJReXhQUVVGUExFTkJRVU1zUTBGQlF5eEZRVUZGTEV0QlFVc3NRMEZCUXl4RFFVRkRPMkZCUXpGQ08xTkJRMFk3WVVGQlRUdFpRVU5NTEV0QlFVc3NTVUZCU1N4RFFVRkRMRWRCUVVjc1EwRkJReXhGUVVGRkxFTkJRVU1zUjBGQlJ5eEpRVUZKTEVOQlFVTXNUMEZCVHl4RlFVRkZMRU5CUVVNc1JVRkJSVHRuUWtGRGJrTXNTVUZCU1N4RFFVRkRMRTlCUVU4c1EwRkJReXhEUVVGRExFVkJRVVVzUzBGQlN5eERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJReXhMUVVGTExFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTXNTMEZCU3l4RFFVRkRMRU5CUVVNN1UwRkRPVU03VVVGRlJDeEpRVUZKTEVOQlFVTXNaMEpCUVdkQ0xFTkJRVU1zVFVGQlRTeERRVUZETEVOQlFVTTdTVUZEYUVNc1EwRkJRenRKUVVWRUxGRkJRVkVzUTBGQlF5eEpRVUZaTEVWQlFVVXNSVUZCVlR0UlFVTXZRaXhKUVVGSkxFTkJRVU1zWVVGQllTeERRVUZETEVsQlFVa3NSVUZCUlN4RFFVRkRMRVZCUVVVc1NVRkJTU3hEUVVGRExFOUJRVThzUjBGQlJ5eERRVUZETEVWQlFVVXNUVUZCVFN4RFFVRkRMRU5CUVVNN1VVRkRkRVFzU1VGQlNTeERRVUZETEdGQlFXRXNRMEZCUXl4RlFVRkZMRVZCUVVVc1EwRkJReXhGUVVGRkxFbEJRVWtzUTBGQlF5eFBRVUZQTEVWQlFVVXNTVUZCU1N4RFFVRkRMRU5CUVVNN1VVRkRPVU1zVFVGQlRTeEhRVUZITEVkQlFXMUNMRVZCUVVVc1EwRkJRenRSUVVNdlFpeExRVUZMTEVsQlFVa3NRMEZCUXl4SFFVRkhMRWxCUVVrc1JVRkJSU3hEUVVGRExFZEJRVWNzUlVGQlJTeEZRVUZGTEVWQlFVVXNRMEZCUXp0WlFVTTFRaXhIUVVGSExFTkJRVU1zU1VGQlNTeERRVUZETEVsQlFVa3NRMEZCUXl4TlFVRk5MRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF6dFJRVU16UWl4UFFVRlBMRkZCUVZFc1EwRkJReXhWUVVGVkxFTkJRVU1zUjBGQlJ5eERRVUZETEVOQlFVTTdTVUZEYkVNc1EwRkJRenRKUVVWRUxHTkJRV01zUTBGQlF5eEpRVUZaTEVWQlFVVXNSVUZCVlR0UlFVTnlReXhKUVVGSkxFTkJRVU1zWVVGQllTeERRVUZETEVsQlFVa3NSVUZCUlN4RFFVRkRMRVZCUVVVc1NVRkJTU3hEUVVGRExFOUJRVThzUjBGQlJ5eERRVUZETEVWQlFVVXNUVUZCVFN4RFFVRkRMRU5CUVVNN1VVRkRkRVFzU1VGQlNTeERRVUZETEdGQlFXRXNRMEZCUXl4RlFVRkZMRVZCUVVVc1EwRkJReXhGUVVGRkxFbEJRVWtzUTBGQlF5eFBRVUZQTEVWQlFVVXNTVUZCU1N4RFFVRkRMRU5CUVVNN1VVRkRPVU1zVFVGQlRTeEhRVUZITEVkQlFXTXNSVUZCUlN4RFFVRkRPMUZCUXpGQ0xFdEJRVXNzU1VGQlNTeERRVUZETEVkQlFVY3NTVUZCU1N4RlFVRkZMRU5CUVVNc1IwRkJSeXhGUVVGRkxFVkJRVVVzUlVGQlJTeERRVUZETzFsQlF6VkNMRWRCUVVjc1EwRkJReXhKUVVGSkxFTkJRVU1zU1VGQlNTeERRVUZETEUxQlFVMHNRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRE8xRkJRek5DTEU5QlFVOHNSMEZCUnl4RFFVRkRPMGxCUTJJc1EwRkJRenRKUVVkRUxGRkJRVkVzUTBGQlF5eEpRVUZaTEVWQlFVVXNSVUZCVlN4RlFVRkZMRXRCUVdNc1JVRkJSU3hOUVVGTkxFZEJRVWNzU1VGQlNUdFJRVU01UkN4SlFVRkpMRU5CUVVNc1lVRkJZU3hEUVVGRExFbEJRVWtzUlVGQlJTeERRVUZETEVWQlFVVXNTVUZCU1N4RFFVRkRMRTlCUVU4c1IwRkJSeXhEUVVGRExFVkJRVVVzVFVGQlRTeERRVUZETEVOQlFVTTdVVUZEZEVRc1NVRkJTU3hEUVVGRExHRkJRV0VzUTBGQlF5eEZRVUZGTEVWQlFVVXNRMEZCUXl4RlFVRkZMRWxCUVVrc1EwRkJReXhQUVVGUExFZEJRVWNzUTBGQlF5eEZRVUZGTEVsQlFVa3NRMEZCUXl4RFFVRkRPMUZCUld4RUxFMUJRVTBzUzBGQlN5eEhRVUZITEVsQlFVa3NRMEZCUXl4SFFVRkhMRU5CUVVNc1NVRkJTU3hGUVVGRkxFVkJRVVVzUTBGQlF5eERRVUZETzFGQlEycERMRTFCUVUwc1IwRkJSeXhIUVVGSExFbEJRVWtzUTBGQlF5eEhRVUZITEVOQlFVTXNTVUZCU1N4RlFVRkZMRVZCUVVVc1EwRkJReXhEUVVGRE8xRkJSUzlDTEdkQ1FVRm5RanRSUVVOb1FpeEpRVUZKTEV0QlFVc3NSVUZCUlR0WlFVTlVMRXRCUVVzc1NVRkJTU3hEUVVGRExFZEJRVWNzUzBGQlN5eEZRVUZGTEVOQlFVTXNTVUZCU1N4SFFVRkhMRVZCUVVVc1EwRkJReXhGUVVGRk8yZENRVU12UWl4SlFVRkpMRU5CUVVNc1QwRkJUeXhEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETzFOQlEyNUNPMkZCUVUwN1dVRkRUQ3hMUVVGTExFbEJRVWtzUTBGQlF5eEhRVUZITEV0QlFVc3NSVUZCUlN4RFFVRkRMRWxCUVVrc1IwRkJSeXhGUVVGRkxFTkJRVU1zUlVGQlJUdG5Ra0ZETDBJc1NVRkJTU3hEUVVGRExGRkJRVkVzUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXp0VFFVTndRanRSUVVWRUxFbEJRVWtzUTBGQlF5eG5Ra0ZCWjBJc1EwRkJReXhOUVVGTkxFTkJRVU1zUTBGQlF6dFJRVU01UWl4UFFVRlBMRWxCUVVrc1EwRkJRenRKUVVOa0xFTkJRVU03U1VGRlJDeHRSVUZCYlVVN1NVRkRia1VzVTBGQlV5eERRVUZETEVOQlFWTXNSVUZCUlN4TFFVRmpMRVZCUVVVc1RVRkJUU3hIUVVGSExFbEJRVWs3VVVGRGFFUXNTVUZCU1N4RFFVRkRMRWRCUVVjc1EwRkJReXhKUVVGSkxFTkJRVU1zUjBGQlJ5eEpRVUZKTEVOQlFVTXNUMEZCVHp0WlFVTXpRaXhOUVVGTkxFbEJRVWtzUzBGQlN5eERRVUZETERSQ1FVRTBRaXhEUVVGRExFTkJRVU03VVVGRmFFUXNTVUZCU1N4RFFVRkRMRWRCUVVjc1NVRkJTU3hEUVVGRExFOUJRVThzUjBGQlJ5eERRVUZETzFsQlEzUkNMRWxCUVVrc1EwRkJReXhUUVVGVExFTkJRVU1zU1VGQlNTeERRVUZETEU5QlFVOHNSMEZCUnl4RFFVRkRMRVZCUVVVc1EwRkJReXhMUVVGTExFTkJRVU1zUTBGQlF6dFJRVVV6UXl4SlFVRkpMRU5CUVVNc1RVRkJUU3hEUVVGRExFTkJRVU1zUzBGQlN5eERRVUZETEVOQlFVTTdVVUZGY0VJc1MwRkJTeXhKUVVGSkxFTkJRVU1zUjBGQlJ5eERRVUZETEVWQlFVVXNRMEZCUXl4SFFVRkhMRU5CUVVNc1IwRkJSenRaUVVOMFFpeE5RVUZOTEVOQlFVTXNSMEZCUnl4SlFVRkpMRU5CUVVNc1MwRkJTeXhEUVVGRExFbEJRVWtzUTBGQlF5eE5RVUZOTEVWQlFVVXNSMEZCUnl4SlFVRkpMRU5CUVVNc1QwRkJUeXhEUVVGRExFTkJRVU03V1VGRGJrUXNTVUZCU1N4SlFVRkpMRU5CUVVNc1RVRkJUU3hEUVVGRExFTkJRVU1zUTBGQlF5eEpRVUZKTEV0QlFVczdaMEpCUVVVc1UwRkJVenRaUVVOMFF5eEpRVUZKTEVOQlFVTXNUMEZCVHl4RFFVRkRMRU5CUVVNc1JVRkJSU3hMUVVGTExFTkJRVU1zUTBGQlF6dFpRVU4yUWl4RFFVRkRMRVZCUVVVc1EwRkJRenRUUVVOTU8xRkJSVVFzU1VGQlNTeERRVUZETEdkQ1FVRm5RaXhEUVVGRExFMUJRVTBzUTBGQlF5eERRVUZETzBsQlEyaERMRU5CUVVNN1NVRkZSQ3dyUlVGQkswVTdTVUZETDBVc2JVUkJRVzFFTzBsQlEyNUVMRWRCUVVjc1EwRkJReXhMUVVGbExFVkJRVVVzVFVGQlRTeEhRVUZITEVsQlFVazdVVUZEYUVNc1NVRkJTU3hKUVVGSkxFTkJRVU1zVDBGQlR5eEpRVUZKTEV0QlFVc3NRMEZCUXl4UFFVRlBPMWxCUXk5Q0xFMUJRVTBzU1VGQlNTeExRVUZMTEVOQlFVTXNkVUpCUVhWQ0xFTkJRVU1zUTBGQlF6dFJRVVV6UXl4TFFVRkxMRWxCUVVrc1EwRkJReXhIUVVGSExFTkJRVU1zUlVGQlJTeEhRVUZITEVkQlFVY3NTVUZCU1N4RFFVRkRMRmxCUVZrc1JVRkJSU3hEUVVGRExFZEJRVWNzUjBGQlJ5eEZRVUZGTEVOQlFVTXNSVUZCUlR0WlFVTnVSQ3hKUVVGSkxFTkJRVU1zUzBGQlN5eERRVUZETEVOQlFVTXNRMEZCUXl4SlFVRkpMRXRCUVVzc1EwRkJReXhMUVVGTExFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTTdVVUZGYkVNc1NVRkJTU3hEUVVGRExHZENRVUZuUWl4RFFVRkRMRTFCUVUwc1EwRkJReXhEUVVGRE8xRkJRemxDTEU5QlFVOHNTVUZCU1N4RFFVRkRPMGxCUTJRc1EwRkJRenRKUVVWRUxHZEdRVUZuUmp0SlFVTm9SaXdyUkVGQkswUTdTVUZETDBRc1RVRkJUU3hEUVVGRExFdEJRV1VzUlVGQlJTeE5RVUZOTEVkQlFVY3NTVUZCU1R0UlFVTnVReXhKUVVGSkxFbEJRVWtzUTBGQlF5eFBRVUZQTEVsQlFVa3NTMEZCU3l4RFFVRkRMRTlCUVU4N1dVRkRMMElzVFVGQlRTeEpRVUZKTEV0QlFVc3NRMEZCUXl4MVFrRkJkVUlzUTBGQlF5eERRVUZETzFGQlJUTkRMRTFCUVUwc1IwRkJSeXhIUVVGSExFbEJRVWtzUTBGQlF5eFpRVUZaTEVOQlFVTTdVVUZET1VJc1MwRkJTeXhKUVVGSkxFbEJRVWtzUjBGQlJ5eERRVUZETEVWQlFVVXNTVUZCU1N4SFFVRkhMRWRCUVVjc1JVRkJSU3hKUVVGSkxFVkJRVVU3V1VGRGJrTXNTVUZCU1N4RFFVRkRMRXRCUVVzc1EwRkJReXhKUVVGSkxFTkJRVU1zU1VGQlNTeERRVUZETEV0QlFVc3NRMEZCUXl4TFFVRkxMRU5CUVVNc1NVRkJTU3hEUVVGRExFTkJRVU03VVVGRmVrTXNTVUZCU1N4RFFVRkRMR2RDUVVGblFpeERRVUZETEUxQlFVMHNRMEZCUXl4RFFVRkRPMUZCUXpsQ0xFOUJRVThzU1VGQlNTeERRVUZETzBsQlEyUXNRMEZCUXp0SlFVVkVMR2RHUVVGblJqdEpRVU5vUml3clJFRkJLMFE3U1VGREwwUXNUVUZCVFN4RFFVRkRMRXRCUVdVc1JVRkJSU3hOUVVGTkxFZEJRVWNzU1VGQlNUdFJRVU51UXl4SlFVRkpMRWxCUVVrc1EwRkJReXhQUVVGUExFbEJRVWtzUzBGQlN5eERRVUZETEU5QlFVODdXVUZETDBJc1RVRkJUU3hKUVVGSkxFdEJRVXNzUTBGQlF5eDFRa0ZCZFVJc1EwRkJReXhEUVVGRE8xRkJSVE5ETEV0QlFVc3NTVUZCU1N4RFFVRkRMRWRCUVVjc1EwRkJReXhGUVVGRkxFZEJRVWNzUjBGQlJ5eEpRVUZKTEVOQlFVTXNXVUZCV1N4RlFVRkZMRU5CUVVNc1IwRkJSeXhIUVVGSExFVkJRVVVzUTBGQlF5eEZRVUZGTzFsQlEyNUVMRWxCUVVrc1EwRkJReXhMUVVGTExFTkJRVU1zUTBGQlF5eERRVUZETEVkQlFVY3NRMEZCUXl4RFFVRkRMRWxCUVVrc1EwRkJReXhMUVVGTExFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTXNSMEZCUnl4TFFVRkxMRU5CUVVNc1MwRkJTeXhEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETzFGQlJYQkVMRWxCUVVrc1EwRkJReXhuUWtGQlowSXNRMEZCUXl4TlFVRk5MRU5CUVVNc1EwRkJRenRSUVVNNVFpeFBRVUZQTEVsQlFVa3NRMEZCUXp0SlFVTmtMRU5CUVVNN1NVRkZSQ3huUkVGQlowUTdTVUZEYUVRc1IwRkJSeXhEUVVGRExFMUJRVTBzUjBGQlJ5eEpRVUZKTzFGQlEyWXNTMEZCU3l4SlFVRkpMRU5CUVVNc1IwRkJSeXhEUVVGRExFVkJRVVVzUjBGQlJ5eEhRVUZITEVsQlFVa3NRMEZCUXl4WlFVRlpMRVZCUVVVc1EwRkJReXhIUVVGSExFZEJRVWNzUlVGQlJTeERRVUZETEVWQlFVVTdXVUZEYmtRc1NVRkJTU3hEUVVGRExFdEJRVXNzUTBGQlF5eERRVUZETEVOQlFVTXNSMEZCUnl4RFFVRkRMRWxCUVVrc1EwRkJReXhMUVVGTExFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTTdVVUZGYWtNc1NVRkJTU3hEUVVGRExHZENRVUZuUWl4RFFVRkRMRTFCUVUwc1EwRkJReXhEUVVGRE8xRkJRemxDTEU5QlFVOHNTVUZCU1N4RFFVRkRPMGxCUTJRc1EwRkJRenRKUVVWRUxESkZRVUV5UlR0SlFVTXpSU3dyUkVGQkswUTdTVUZETDBRc1JVRkJSU3hEUVVGRExFdEJRV1VzUlVGQlJTeE5RVUZOTEVkQlFVY3NTVUZCU1R0UlFVTXZRaXhKUVVGSkxFbEJRVWtzUTBGQlF5eFBRVUZQTEVsQlFVa3NTMEZCU3l4RFFVRkRMRTlCUVU4N1dVRkRMMElzVFVGQlRTeEpRVUZKTEV0QlFVc3NRMEZCUXl4MVFrRkJkVUlzUTBGQlF5eERRVUZETzFGQlJUTkRMRXRCUVVzc1NVRkJTU3hEUVVGRExFZEJRVWNzUTBGQlF5eEZRVUZGTEVkQlFVY3NSMEZCUnl4SlFVRkpMRU5CUVVNc1dVRkJXU3hGUVVGRkxFTkJRVU1zUjBGQlJ5eEhRVUZITEVWQlFVVXNRMEZCUXl4RlFVRkZPMWxCUTI1RUxFbEJRVWtzUTBGQlF5eExRVUZMTEVOQlFVTXNRMEZCUXl4RFFVRkRMRWxCUVVrc1MwRkJTeXhEUVVGRExFdEJRVXNzUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXp0UlFVVnNReXhKUVVGSkxFTkJRVU1zWjBKQlFXZENMRU5CUVVNc1RVRkJUU3hEUVVGRExFTkJRVU03VVVGRE9VSXNUMEZCVHl4SlFVRkpMRU5CUVVNN1NVRkRaQ3hEUVVGRE8wbEJSVVFzY1VaQlFYRkdPMGxCUTNKR0xDdEVRVUVyUkR0SlFVTXZSQ3hIUVVGSExFTkJRVU1zUzBGQlpTeEZRVUZGTEUxQlFVMHNSMEZCUnl4SlFVRkpPMUZCUTJoRExFbEJRVWtzU1VGQlNTeERRVUZETEU5QlFVOHNTVUZCU1N4TFFVRkxMRU5CUVVNc1QwRkJUenRaUVVNdlFpeE5RVUZOTEVsQlFVa3NTMEZCU3l4RFFVRkRMSFZDUVVGMVFpeERRVUZETEVOQlFVTTdVVUZGTTBNc1MwRkJTeXhKUVVGSkxFTkJRVU1zUjBGQlJ5eERRVUZETEVWQlFVVXNSMEZCUnl4SFFVRkhMRWxCUVVrc1EwRkJReXhaUVVGWkxFVkJRVVVzUTBGQlF5eEhRVUZITEVkQlFVY3NSVUZCUlN4RFFVRkRMRVZCUVVVN1dVRkRia1FzU1VGQlNTeERRVUZETEV0QlFVc3NRMEZCUXl4RFFVRkRMRU5CUVVNc1NVRkJTU3hMUVVGTExFTkJRVU1zUzBGQlN5eERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRPMUZCUld4RExFbEJRVWtzUTBGQlF5eG5Ra0ZCWjBJc1EwRkJReXhOUVVGTkxFTkJRVU1zUTBGQlF6dFJRVU01UWl4UFFVRlBMRWxCUVVrc1EwRkJRenRKUVVOa0xFTkJRVU03U1VGRlJDeHZSa0ZCYjBZN1NVRkRjRVlzVVVGQlVTeERRVUZETEVkQlFWY3NSVUZCUlN4RFFVRlRMRVZCUVVVc1NVRkJTU3hIUVVGSExFdEJRVXM3VVVGRE0wTXNTVUZCU1N4RFFVRkRMR0ZCUVdFc1EwRkJReXhIUVVGSExFVkJRVVVzUTBGQlF5eEZRVUZGTEVsQlFVa3NRMEZCUXl4UFFVRlBMRVZCUVVVc1MwRkJTeXhEUVVGRExFTkJRVU03VVVGRmFFUXNTVUZCU1N4RFFVRkRMRWxCUVVrc1EwRkJRenRaUVVGRkxFOUJRVTg3VVVGRmJrSXNaMEpCUVdkQ08xRkJRMmhDTEhWRVFVRjFSRHRSUVVWMlJDeHBRa0ZCYVVJN1VVRkRha0lzVFVGQlRTeFRRVUZUTEVkQlFVY3NTVUZCU1N4RFFVRkRMRTlCUVU4c1EwRkJRenRSUVVNdlFpeEpRVUZKTEVOQlFVTXNVMEZCVXl4RFFVRkRMRWxCUVVrc1EwRkJReXhQUVVGUExFZEJRVWNzUTBGQlF5eERRVUZETEVOQlFVTTdVVUZGYWtNc1owUkJRV2RFTzFGQlJXaEVMRXRCUVVzc1NVRkJTU3hEUVVGRExFZEJRVWNzVTBGQlV5eEhRVUZITEVOQlFVTXNSVUZCUlN4RFFVRkRMRWxCUVVrc1IwRkJSeXhGUVVGRkxFTkJRVU1zUlVGQlJUdFpRVU4yUXl4SlFVRkpMRU5CUVVNc1RVRkJUU3hEUVVGRExFTkJRVU1zUjBGQlJ5eERRVUZETEVWQlFVVXNTVUZCU1N4RFFVRkRMRTFCUVUwc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETzFGQlJYSkRMRXRCUVVzc1NVRkJTU3hEUVVGRExFZEJRVWNzUjBGQlJ5eEZRVUZGTEVOQlFVTXNSMEZCUnl4SFFVRkhMRWRCUVVjc1EwRkJReXhGUVVGRkxFTkJRVU1zUlVGQlJUdFpRVU5vUXl4SlFVRkpMRU5CUVVNc1RVRkJUU3hEUVVGRExFTkJRVU1zUlVGQlJTeEpRVUZKTEVOQlFVTXNRMEZCUXp0UlFVVjJRaXhsUVVGbE8wbEJRMnBDTEVOQlFVTTdTVUZGUkN4clJrRkJhMFk3U1VGRGJFWXNkVUpCUVhWQ08wbEJRM1pDTEZGQlFWRXNRMEZCUXl4SFFVRlhMRVZCUVVVc1EwRkJReXhIUVVGSExFTkJRVU03VVVGRGVrSXNkMFJCUVhkRU8xRkJRM2hFTEVsQlFVa3NRMEZCUXl4SFFVRkhMRU5CUVVNN1dVRkRVQ3hOUVVGTkxFbEJRVWtzUzBGQlN5eERRVUZETEhOQ1FVRnpRaXhEUVVGRExFTkJRVU03VVVGRk1VTXNTVUZCU1N4RFFVRkRMR0ZCUVdFc1EwRkJReXhIUVVGSExFVkJRVVVzUTBGQlF5eEZRVUZGTEVsQlFVa3NRMEZCUXl4UFFVRlBMRWRCUVVjc1EwRkJReXhGUVVGRkxFdEJRVXNzUTBGQlF5eERRVUZETzFGQlJYQkVMRWxCUVVrc1NVRkJTU3hEUVVGRExGRkJRVkVzUTBGQlF5eEpRVUZKTEVOQlFVTXNSVUZCUlR0WlFVTjJRaXhMUVVGTExFbEJRVWtzUTBGQlF5eEhRVUZITEVkQlFVY3NSVUZCUlN4RFFVRkRMRWRCUVVjc1NVRkJTU3hEUVVGRExFOUJRVThzUjBGQlJ5eERRVUZETEVWQlFVVXNRMEZCUXl4RlFVRkZPMmRDUVVONlF5eEpRVUZKTEVOQlFVTXNUVUZCVFN4RFFVRkRMRU5CUVVNc1JVRkJSU3hKUVVGSkxFTkJRVU1zVFVGQlRTeERRVUZETEVOQlFVTXNSMEZCUnl4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRE8xTkJRM1JETzFGQlJVUXNTVUZCU1N4RFFVRkRMRk5CUVZNc1EwRkJReXhKUVVGSkxFTkJRVU1zVDBGQlR5eEhRVUZITEVOQlFVTXNRMEZCUXl4RFFVRkRPMGxCUTI1RExFTkJRVU03U1VGRlJDeFpRVUZaTEVOQlFVTXNTVUZCWXl4RlFVRkZMRWxCUVVrc1IwRkJSeXhKUVVGSk8xRkJRM1JETEVsQlFVa3NTVUZCU1N4RFFVRkRMRTlCUVU4c1NVRkJTU3hKUVVGSkxFTkJRVU1zVFVGQlRUdFpRVU0zUWl4TlFVRk5MRWxCUVVrc1MwRkJTeXhEUVVGRExIVkNRVUYxUWl4RFFVRkRMRU5CUVVNN1VVRkZNME1zU1VGQlNTeEpRVUZKTEVsQlFVa3NTVUZCU1N4RlFVRkZMRVZCUVVVc2NVSkJRWEZDTzFsQlEzWkRMRWxCUVVrc1EwRkJReXhUUVVGVExFTkJRVU1zU1VGQlNTeERRVUZETEZOQlFWTXNRMEZCUXl4RFFVRkRMRWxCUVVrc1EwRkJReXhEUVVGRExFTkJRVU03V1VGRGRFTXNTVUZCU1N4RFFVRkRMRTFCUVUwc1EwRkJReXhEUVVGRExFbEJRVWtzUTBGQlF5eERRVUZETzFOQlEzQkNPMkZCUVUwN1dVRkRUQ3hKUVVGSkxFMUJRVTBzUjBGQlJ5eERRVUZETEVOQlFVTTdXVUZGWml4TFFVRkxMRWxCUVVrc1RVRkJUU3hIUVVGSExFTkJRVU1zUTBGQlF5eEZRVUZGTEVOQlFVTXNUVUZCVFN4SFFVRkhMRWxCUVVrc1EwRkJReXhSUVVGUkxFTkJRVU1zVFVGQlRTeEZRVUZGTEVOQlFVTXNTVUZCU1N4RFFVRkRMRU5CUVVNc1NVRkJTU3hEUVVGRExFTkJRVU03WjBKQlEycEZMRWxCUVVrc1EwRkJReXhQUVVGUExFTkJRVU1zVFVGQlRTeEZRVUZGTEVWQlFVVXNTVUZCU1N4RFFVRkRMRTFCUVUwc1EwRkJReXhOUVVGTkxFTkJRVU1zUTBGQlF5eERRVUZETzFsQlJUbERMRWxCUVVrc1EwRkJReXhQUVVGUExFZEJRVWNzVFVGQlRTeERRVUZETzFsQlEzUkNMRWxCUVVrc1EwRkJReXhSUVVGUkxFVkJRVVVzUTBGQlF6dFRRVU5xUWp0UlFVVkVMRTlCUVU4c1NVRkJTU3hEUVVGRE8wbEJRMlFzUTBGQlF6dEpRVVZFTEN0Q1FVRXJRanRKUVVNdlFpeE5RVUZOTEVOQlFVTXNSMEZCVnp0UlFVTm9RaXhQUVVGUExFTkJRVU1zU1VGQlNTeERRVUZETEV0QlFVc3NRMEZCUXl4SlFVRkpMRU5CUVVNc1MwRkJTeXhEUVVGRExFZEJRVWNzUjBGQlJ5eEpRVUZKTEVOQlFVTXNRMEZCUXl4SFFVRkhMRU5CUVVNc1EwRkJReXhKUVVGSkxFTkJRVU1zUjBGQlJ5eEhRVUZITEVsQlFVa3NRMEZCUXl4RFFVRkRMRU5CUVVNc1NVRkJTU3hEUVVGRExFTkJRVU03U1VGRGVrVXNRMEZCUXp0SlFVVkVMQ3RDUVVFclFqdEpRVU12UWl4TlFVRk5MRU5CUVVNc1IwRkJWeXhGUVVGRkxFZEJRVmtzUlVGQlJTeE5RVUZOTEVkQlFVY3NTVUZCU1R0UlFVTTNReXhKUVVGSkxFTkJRVU1zVDBGQlR5eERRVUZETEVkQlFVY3NSVUZCUlN4SFFVRkhMRU5CUVVNc1EwRkJRenRSUVVOMlFpeEpRVUZKTEUxQlFVMDdXVUZEVWl4SlFVRkpMRU5CUVVNc1VVRkJVU3hGUVVGRkxFTkJRVU03TzFsQlJXaENMRWxCUVVrc1EwRkJReXhSUVVGUkxFVkJRVVVzUTBGQlF6dEpRVU53UWl4RFFVRkRPMGxCUlVRc2FVWkJRV2xHTzBsQlEycEdMRTlCUVU4c1EwRkJReXhEUVVGVExFVkJRVVVzUzBGQll6dFJRVU12UWl4SlFVRkpMRXRCUVVzN1dVRkRVQ3hKUVVGSkxFTkJRVU1zUzBGQlN5eERRVUZETEVsQlFVa3NRMEZCUXl4TFFVRkxMRU5CUVVNc1EwRkJReXhIUVVGSExFbEJRVWtzUTBGQlF5eERRVUZETEVsQlFVa3NRMEZCUXl4SlFVRkpMRU5CUVVNc1EwRkJReXhIUVVGSExFbEJRVWtzUTBGQlF5eERRVUZET3p0WlFVVndSQ3hKUVVGSkxFTkJRVU1zUzBGQlN5eERRVUZETEVsQlFVa3NRMEZCUXl4TFFVRkxMRU5CUVVNc1EwRkJReXhIUVVGSExFbEJRVWtzUTBGQlF5eERRVUZETEVsQlFVa3NRMEZCUXl4RFFVRkRMRU5CUVVNc1NVRkJTU3hEUVVGRExFTkJRVU1zUjBGQlJ5eEpRVUZKTEVOQlFVTXNRMEZCUXl4RFFVRkRPMGxCUXpORUxFTkJRVU03U1VGRlJDeFBRVUZQTEVOQlFVTXNSMEZCVnp0UlFVTnFRaXhKUVVGSkxFTkJRVU1zUzBGQlN5eERRVUZETEVsQlFVa3NRMEZCUXl4TFFVRkxMRU5CUVVNc1IwRkJSeXhIUVVGSExFbEJRVWtzUTBGQlF5eERRVUZETEVsQlFVa3NRMEZCUXl4SlFVRkpMRU5CUVVNc1IwRkJSeXhIUVVGSExFbEJRVWtzUTBGQlF5eERRVUZETzBsQlF6RkVMRU5CUVVNN1NVRkZSQ3hSUVVGUkxFTkJRVU1zUjBGQlZ6dFJRVU5zUWl4SlFVRkpMRU5CUVVNc1MwRkJTeXhEUVVGRExFbEJRVWtzUTBGQlF5eExRVUZMTEVOQlFVTXNSMEZCUnl4SFFVRkhMRWxCUVVrc1EwRkJReXhEUVVGRExFbEJRVWtzUTBGQlF5eERRVUZETEVOQlFVTXNTVUZCU1N4RFFVRkRMRWRCUVVjc1IwRkJSeXhKUVVGSkxFTkJRVU1zUTBGQlF5eERRVUZETzBsQlF6ZEVMRU5CUVVNN1NVRkZSQ3hUUVVGVE8xRkJRMUFzVDBGQlR5eEpRVUZKTEVOQlFVTXNVMEZCVXl4RFFVRkRMRWxCUVVrc1EwRkJReXhEUVVGRE8wbEJRemxDTEVOQlFVTTdTVUZGUkN4VlFVRlZPMUZCUTFJc1QwRkJUeXhKUVVGSkxFTkJRVU1zVTBGQlV5eERRVUZETEV0QlFVc3NRMEZCUXl4RFFVRkRPMGxCUXk5Q0xFTkJRVU03U1VGRlJDeDFRMEZCZFVNN1NVRkRka01zVTBGQlV5eERRVUZETEV0QlFXTTdVVUZEZEVJc1NVRkJTU3hKUVVGSkxFTkJRVU1zVDBGQlR5eEpRVUZKTEVOQlFVTTdXVUZCUlN4UFFVRlBMRU5CUVVNc1EwRkJRenRSUVVWb1F5eEpRVUZKTEVsQlFVa3NRMEZCUXl4eFFrRkJjVUlzU1VGQlNTeEpRVUZKTEVOQlFVTXNVVUZCVVN4RlFVRkZPMWxCUXk5RExFbEJRVWtzUTBGQlF5eGpRVUZqTEVkQlFVY3NRMEZCUXl4RFFVRkRPMWxCUTNoQ0xFMUJRVTBzUjBGQlJ5eEhRVUZITEVsQlFVa3NRMEZCUXl4WlFVRlpMRU5CUVVNN1dVRkRPVUlzU1VGQlNTeERRVUZETEVkQlFVY3NRMEZCUXl4RFFVRkRPMWxCUTFZc1QwRkJUeXhEUVVGRExFZEJRVWNzUjBGQlJ5eEhRVUZITEVOQlFVTXNSVUZCUlN4RFFVRkRMRVZCUVVVc1JVRkJSVHRuUWtGRGRrSXNTMEZCU3l4SlFVRkpMRU5CUVVNc1IwRkJSeXhKUVVGSkxFTkJRVU1zUzBGQlN5eERRVUZETEVOQlFVTXNRMEZCUXl4RlFVRkZMRU5CUVVNc1NVRkJTU3hEUVVGRExFVkJRVVVzUTBGQlF5eE5RVUZOTEVOQlFVTXNSVUZCUlN4RlFVRkZMRFJDUVVFMFFqdHZRa0ZETVVVc1NVRkJTU3hEUVVGRExHTkJRV01zU1VGQlNTeFJRVUZSTEVOQlFVTXNWMEZCVnl4RFFVRkRMRU5CUVVNc1IwRkJSeXhKUVVGSkxFTkJRVU1zUTBGQlF6dHBRa0ZEZGtRN1lVRkRSanRaUVVWRUxHZENRVUZuUWp0WlFVTm9RaXhKUVVGSkxFTkJRVU1zUjBGQlJ5eEpRVUZKTEVOQlFVTXNTMEZCU3l4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRE8xbEJRM1JDTEUxQlFVMHNZVUZCWVN4SFFVRkhMRWxCUVVrc1EwRkJReXhQUVVGUExFZEJRVWNzU1VGQlNTeERRVUZETzFsQlF6RkRMRWxCUVVrc1lVRkJZU3hKUVVGSkxFTkJRVU1zUlVGQlJTeDVSa0ZCZVVZN1owSkJReTlITEVOQlFVTXNTVUZCU1N4RFFVRkRMRU5CUVVNc1EwRkJReXhWUVVGVkxFTkJRVU1zU1VGQlNTeGhRVUZoTEVOQlFVTXNRMEZCUXp0WlFVVjRReXhQUVVGUExFTkJRVU1zU1VGQlNTeERRVUZETEVWQlFVVXNRMEZCUXl4TlFVRk5MRU5CUVVNN1owSkJRM0pDTEVsQlFVa3NRMEZCUXl4alFVRmpMRWxCUVVrc1VVRkJVU3hEUVVGRExGZEJRVmNzUTBGQlF5eERRVUZETEVkQlFVY3NTVUZCU1N4RFFVRkRMRU5CUVVNN1dVRkZlRVFzU1VGQlNTeERRVUZETEhGQ1FVRnhRaXhIUVVGSExFbEJRVWtzUTBGQlF5eFJRVUZSTEVOQlFVTTdVMEZETlVNN1VVRkZSQ3hQUVVGUExFTkJRVU1zUzBGQlN5eERRVUZETEVOQlFVTXNRMEZCUXl4SlFVRkpMRU5CUVVNc1kwRkJZeXhEUVVGRExFTkJRVU1zUTBGQlF5eEpRVUZKTEVOQlFVTXNUMEZCVHl4SFFVRkhMRWxCUVVrc1EwRkJReXhqUVVGakxFTkJRVU1zUTBGQlF6dEpRVU0xUlN4RFFVRkRPMGxCUlVRc01rUkJRVEpFTzBsQlF6TkVMRlZCUVZVc1EwRkJReXhMUVVGbE8xRkJRM2hDTEVsQlFVa3NUVUZCVFN4SFFVRkhMRU5CUVVNc1EwRkJRenRSUVVObUxFbEJRVWtzU1VGQlNTeERRVUZETEZOQlFWTXNSVUZCUlN4SlFVRkpMRWxCUVVrc1EwRkJReXhQUVVGUExFVkJRVVU3V1VGRGNFTXNTMEZCU3l4SlFVRkpMRU5CUVVNc1IwRkJSeXhEUVVGRExFVkJRVVVzUTBGQlF5eEhRVUZITEVsQlFVa3NRMEZCUXl4UFFVRlBMRVZCUVVVc1EwRkJReXhGUVVGRk8yZENRVU51UXl4TlFVRk5MRWxCUVVrc1MwRkJTeXhEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF6dFRRVU01UWp0aFFVRk5PMWxCUTB3c1MwRkJTeXhKUVVGSkxFTkJRVU1zUjBGQlJ5eERRVUZETEVOQlFVTXNSVUZCUlN4RFFVRkRMRU5CUVVNc1IwRkJSeXhKUVVGSkxFTkJRVU1zVVVGQlVTeERRVUZETEVOQlFVTXNSVUZCUlN4SlFVRkpMRU5CUVVNc1EwRkJReXhKUVVGSkxFTkJRVU1zUTBGQlF6dG5Ra0ZEYWtRc1RVRkJUU3hKUVVGSkxFdEJRVXNzUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTTdVMEZET1VJN1VVRkRSQ3hQUVVGUExFMUJRVTBzUTBGQlF6dEpRVU5vUWl4RFFVRkRPMGxCUlVRc01rWkJRVEpHTzBsQlF6TkdMR2RDUVVGblFpeERRVUZETEUxQlFXZENMRVZCUVVVc1MwRkJZenRSUVVNdlF5eEpRVUZKTEVsQlFVa3NRMEZCUXl4UFFVRlBMRWxCUVVrc1EwRkJRenRaUVVGRkxFOUJRVThzUTBGQlF5eERRVUZETzFGQlJXaERMRWxCUVVrc1MwRkJTeXhIUVVGSExFTkJRVU1zUTBGQlF6dFJRVU5rTEUxQlFVMHNSMEZCUnl4SFFVRkhMRWxCUVVrc1EwRkJReXhaUVVGWkxFTkJRVU03VVVGRE9VSXNTVUZCU1N4RFFVRkRMRWRCUVVjc1EwRkJReXhEUVVGRE8xRkJRMVlzVDBGQlR5eERRVUZETEVkQlFVY3NSMEZCUnl4SFFVRkhMRU5CUVVNc1JVRkJSU3hEUVVGRExFVkJRVVVzUlVGQlJUdFpRVU4yUWl4TFFVRkxMRWxCUVVrc1EwRkJReXhIUVVGSExFbEJRVWtzUTBGQlF5eExRVUZMTEVOQlFVTXNRMEZCUXl4RFFVRkRMRWRCUVVjc1RVRkJUU3hEUVVGRExFdEJRVXNzUTBGQlF5eERRVUZETEVOQlFVTXNSVUZCUlN4RFFVRkRMRWxCUVVrc1EwRkJReXhGUVVGRkxFTkJRVU1zVFVGQlRTeERRVUZETzJkQ1FVTTFSQ3hMUVVGTExFbEJRVWtzVVVGQlVTeERRVUZETEZkQlFWY3NRMEZCUXl4RFFVRkRMRWRCUVVjc1NVRkJTU3hEUVVGRExFTkJRVU03VTBGRE0wTTdVVUZGUkN4blFrRkJaMEk3VVVGRGFFSXNTVUZCU1N4RFFVRkRMRWRCUVVjc1NVRkJTU3hEUVVGRExFdEJRVXNzUTBGQlF5eERRVUZETEVOQlFVTXNSMEZCUnl4TlFVRk5MRU5CUVVNc1MwRkJTeXhEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETzFGQlEzaERMRTFCUVUwc1lVRkJZU3hIUVVGSExFbEJRVWtzUTBGQlF5eFBRVUZQTEVkQlFVY3NTVUZCU1N4RFFVRkRPMUZCUXpGRExFbEJRVWtzWVVGQllTeEpRVUZKTEVOQlFVTTdXVUZEY0VJc1EwRkJReXhKUVVGSkxFTkJRVU1zUTBGQlF5eERRVUZETEZWQlFWVXNRMEZCUXl4SlFVRkpMR0ZCUVdFc1EwRkJReXhEUVVGRE8xRkJRM2hETEU5QlFVOHNRMEZCUXl4SlFVRkpMRU5CUVVNc1JVRkJSU3hEUVVGRExFMUJRVTBzUTBGQlF6dFpRVU55UWl4TFFVRkxMRWxCUVVrc1VVRkJVU3hEUVVGRExGZEJRVmNzUTBGQlF5eERRVUZETEVkQlFVY3NTVUZCU1N4RFFVRkRMRU5CUVVNN1VVRkZNVU1zVDBGQlR5eERRVUZETEV0QlFVc3NRMEZCUXl4RFFVRkRMRU5CUVVNc1MwRkJTeXhEUVVGRExFTkJRVU1zUTBGQlF5eEpRVUZKTEVOQlFVTXNUMEZCVHl4SFFVRkhMRXRCUVVzc1EwRkJReXhEUVVGRE8wbEJRMmhFTEVOQlFVTTdTVUZGUkN4TFFVRkxPMUZCUTBnc1NVRkJTU3hEUVVGRExGTkJRVk1zUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXp0SlFVTndRaXhEUVVGRE8wbEJSVVFzVVVGQlVTeERRVUZETEV0QlFXTTdVVUZEY2tJc1QwRkJUeXhKUVVGSkxFTkJRVU1zVVVGQlVTeERRVUZETEVOQlFVTXNRMEZCUXl4RlFVRkZMRXRCUVVzc1EwRkJReXhKUVVGSkxFTkJRVU1zUTBGQlF6dEpRVU4yUXl4RFFVRkRPMGxCUlVRc1NVRkJTU3hQUVVGUE8xRkJRMVFzVDBGQlR5eEpRVUZKTEVOQlFVTXNVMEZCVXl4RFFVRkRMRWxCUVVrc1EwRkJReXhKUVVGSkxFbEJRVWtzUTBGQlF5eFBRVUZQTEVOQlFVTTdTVUZET1VNc1EwRkJRenRKUVVWRUxFbEJRVWtzVVVGQlVUdFJRVU5XTEU5QlFVOHNTVUZCU1N4RFFVRkRMRk5CUVZNc1EwRkJReXhMUVVGTExFTkJRVU1zU1VGQlNTeEpRVUZKTEVOQlFVTXNUMEZCVHl4RFFVRkRPMGxCUXk5RExFTkJRVU03U1VGRlJDeEpRVUZKTEU5QlFVODdVVUZEVkN4UFFVRlBMRWxCUVVrc1EwRkJReXhUUVVGVExFTkJRVU1zU1VGQlNTeERRVUZETEVkQlFVY3NRMEZCUXl4RFFVRkRPMGxCUTJ4RExFTkJRVU03U1VGRlJDeEpRVUZKTEZGQlFWRTdVVUZEVml4UFFVRlBMRWxCUVVrc1EwRkJReXhUUVVGVExFTkJRVU1zUzBGQlN5eERRVUZETEVkQlFVY3NRMEZCUXl4RFFVRkRPMGxCUTI1RExFTkJRVU03U1VGRlJDeHpSMEZCYzBjN1NVRkRkRWNzTUVOQlFUQkRPMGxCUXpGRExGRkJRVkVzUTBGQlF5eExRVUZoTEVWQlFVVXNTMEZCU3l4SFFVRkhMRWxCUVVrN1VVRkRiRU1zU1VGQlNTeERRVUZETEdGQlFXRXNRMEZCUXl4TFFVRkxMRVZCUVVVc1EwRkJReXhEUVVGRExFVkJRVVVzU1VGQlNTeERRVUZETEU5QlFVOHNSVUZCUlN4UFFVRlBMRU5CUVVNc1EwRkJRenRSUVVWeVJDeEpRVUZKTEV0QlFVc3NTVUZCU1N4SlFVRkpMRU5CUVVNc1QwRkJUeXhIUVVGSExFTkJRVU03V1VGQlJTeFBRVUZQTEVOQlFVTXNRMEZCUXl4RFFVRkRPMUZCUTNwRExFdEJRVXNzUjBGQlJ5eExRVUZMTEVkQlFVY3NRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETEV0QlFVc3NSMEZCUnl4RFFVRkRMRU5CUVVNc1EwRkJReXhoUVVGaE8xRkJRMmhFTEVsQlFVa3NWVUZCVlN4SFFVRkhMRXRCUVVzc1IwRkJSeXhKUVVGSkxFTkJRVU03VVVGRE9VSXNUVUZCVFN4UFFVRlBMRWRCUVVjc1NVRkJTU3hEUVVGRExGbEJRVmtzUTBGQlF6dFJRVVZzUXl4TFFVRkxMRWxCUVVrc1EwRkJReXhIUVVGSExFbEJRVWtzUTBGQlF5eExRVUZMTEVOQlFVTXNTMEZCU3l4SFFVRkhMRVZCUVVVc1EwRkJReXhGUVVGRkxFTkJRVU1zUjBGQlJ5eFBRVUZQTEVWQlFVVXNRMEZCUXl4RlFVRkZMRVZCUVVVN1dVRkRja1FzU1VGQlNTeERRVUZETEVkQlFVY3NRMEZCUXl4TFFVRkxMRU5CUVVNc1EwRkJReXhEUVVGRExFbEJRVWtzUTBGQlF5eExRVUZMTEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU1zU1VGQlNTeERRVUZETEV0QlFVc3NRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU1zV1VGQldUdFpRVU01UkN4SlFVRkpMRlZCUVZVc1NVRkJTU3hEUVVGRExFVkJRVVU3WjBKQlEyNUNMRU5CUVVNc1NVRkJTU3hEUVVGRExFTkJRVU1zVlVGQlZTeEpRVUZKTEZWQlFWVXNRMEZCUXl4SFFVRkhMRlZCUVZVc1EwRkJReXhEUVVGRE8yZENRVU12UXl4VlFVRlZMRWRCUVVjc1EwRkJReXhEUVVGRE8yRkJRMmhDTzJsQ1FVRk5MRWxCUVVrc1EwRkJReXhMUVVGTExFbEJRVWtzUTBGQlF5eEpRVUZKTEVOQlFVTXNWVUZCVlN4RlFVRkZMSGxEUVVGNVF5eERRVUZCTzJkQ1FVTTVSU3hUUVVGVE8yRkJRMVk3V1VGRlJDeExRVUZMTEVsQlFVa3NRMEZCUXl4SFFVRkhMRU5CUVVNc1JVRkJSU3hEUVVGRExFbEJRVWtzUTBGQlF5eEZRVUZGTEVOQlFVTXNTVUZCU1N4RFFVRkRMRVZCUVVVc1EwRkJReXhOUVVGTkxFTkJRVU1zUlVGQlJUdG5Ra0ZEZUVNc1RVRkJUU3hEUVVGRExFZEJRVWNzVVVGQlVTeERRVUZETEZkQlFWY3NRMEZCUXl4RFFVRkRMRWRCUVVjc1NVRkJTU3hEUVVGRExFTkJRVU03WjBKQlEzcERMRWxCUVVrc1EwRkJReXhKUVVGSkxFTkJRVU1zUlVGQlJUdHZRa0ZEVml4TFFVRkxMRWRCUVVjc1EwRkJReXhIUVVGSExFTkJRVU1zUTBGQlF5eEhRVUZITEVWQlFVVXNRMEZCUXl4SFFVRkhMRU5CUVVNc1EwRkJRenR2UWtGRGVrSXNTVUZCU1N4TFFVRkxMRWxCUVVrc1NVRkJTU3hEUVVGRExFOUJRVTg3ZDBKQlFVVXNUMEZCVHl4RFFVRkRMRU5CUVVNc1EwRkJRenR2UWtGRGNrTXNUMEZCVHl4TFFVRkxMRU5CUVVNN2FVSkJRMlE3WVVGRFJqdFRRVU5HTzFGQlEwUXNUMEZCVHl4RFFVRkRMRU5CUVVNc1EwRkJRenRKUVVOYUxFTkJRVU03U1VGRlJDdzBSRUZCTkVRN1NVRkROVVFzVVVGQlVTeERRVUZETEV0QlFXRXNSVUZCUlN4TFFVRkxMRWRCUVVjc1NVRkJTVHRSUVVOc1F5eEpRVUZKTEV0QlFVc3NTVUZCU1N4RFFVRkRPMWxCUVVVc1QwRkJUeXhEUVVGRExFTkJRVU1zUTBGQlF6dFJRVU14UWl4SlFVRkpMRU5CUVVNc1lVRkJZU3hEUVVGRExFdEJRVXNzUlVGQlJTeERRVUZETEVOQlFVTXNSVUZCUlN4SlFVRkpMRU5CUVVNc1QwRkJUeXhGUVVGRkxFOUJRVThzUTBGQlF5eERRVUZETzFGQlJYSkVMRXRCUVVzc1IwRkJSeXhMUVVGTExFZEJRVWNzUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXl4SlFVRkpMRU5CUVVNc1QwRkJUeXhIUVVGSExFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTXNTMEZCU3l4SFFVRkhMRU5CUVVNc1EwRkJReXhEUVVGRExHRkJRV0U3VVVGRkwwUXNUVUZCVFN4VlFVRlZMRWRCUVVjc1NVRkJTU3hEUVVGRExFdEJRVXNzUTBGQlF5eExRVUZMTEVkQlFVY3NTVUZCU1N4RFFVRkRMRU5CUVVNN1VVRkROVU1zU1VGQlNTeGhRVUZoTEVkQlFVY3NRMEZCUXl4TFFVRkxMRWRCUVVjc1EwRkJReXhEUVVGRExFZEJRVWNzU1VGQlNTeERRVUZETzFGQlJYWkRMRXRCUVVzc1NVRkJTU3hEUVVGRExFZEJRVWNzVlVGQlZTeEZRVUZGTEVOQlFVTXNTVUZCU1N4RFFVRkRMRVZCUVVVc1EwRkJReXhGUVVGRkxFVkJRVVU3V1VGRGNFTXNTVUZCU1N4RFFVRkRMRWRCUVVjc1EwRkJReXhMUVVGTExFTkJRVU1zUTBGQlF5eERRVUZETEVsQlFVa3NRMEZCUXl4TFFVRkxMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTXNTVUZCU1N4RFFVRkRMRXRCUVVzc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTXNUMEZCVHp0WlFVTjZSQ3hKUVVGSkxHRkJRV0VzU1VGQlNTeERRVUZETEVWQlFVVTdaMEpCUTNSQ0xFTkJRVU1zU1VGQlNTeERRVUZETEVOQlFVTXNRMEZCUXl4VlFVRlZMRU5CUVVNc1NVRkJTU3hoUVVGaExFTkJRVU1zUTBGQlF6dG5Ra0ZEZEVNc1lVRkJZU3hIUVVGSExFTkJRVU1zUTBGQlF6dGhRVU51UWp0WlFVTkVMRXRCUVVzc1NVRkJTU3hEUVVGRExFZEJRVWNzUlVGQlJTeEZRVUZGTEVOQlFVTXNTVUZCU1N4RFFVRkRMRVZCUVVVc1EwRkJReXhKUVVGSkxFTkJRVU1zUlVGQlJTeERRVUZETEV0QlFVc3NRMEZCUXl4RlFVRkZPMmRDUVVONFF5eE5RVUZOTEVOQlFVTXNSMEZCUnl4UlFVRlJMRU5CUVVNc1ZVRkJWU3hEUVVGRExFTkJRVU1zUzBGQlN5eEpRVUZKTEVOQlFVTXNRMEZCUXp0blFrRkRNVU1zU1VGQlNTeERRVUZETEVsQlFVa3NRMEZCUXp0dlFrRkRVaXhQUVVGUExFTkJRVU1zUjBGQlJ5eERRVUZETEVOQlFVTXNSMEZCUnl4RlFVRkZMRU5CUVVNc1IwRkJSeXhEUVVGRExFTkJRVU03WVVGRE0wSTdVMEZEUmp0UlFVTkVMRTlCUVU4c1EwRkJReXhEUVVGRExFTkJRVU03U1VGRFdpeERRVUZET3p0QlFYSjFRazBzYjBKQlFWY3NSMEZCUnl4VFFVRlRMRU5CUVVNc1NVRkJTU3hEUVVGRE8wbEJRMnhETEVOQlFVTXNSVUZCUlN4RFFVRkRMRVZCUVVVc1EwRkJReXhGUVVGRkxFTkJRVU1zUlVGQlJTeERRVUZETEVWQlFVVXNRMEZCUXl4RlFVRkZMRU5CUVVNc1JVRkJSU3hEUVVGRExFVkJRVVVzUTBGQlF5eEZRVUZGTEVOQlFVTXNSVUZCUlN4RFFVRkRMRVZCUVVVc1EwRkJReXhGUVVGRkxFTkJRVU1zUlVGQlJTeERRVUZETEVWQlFVVXNRMEZCUXl4RlFVRkZMRU5CUVVNN1NVRkRPVU1zUTBGQlF5eEZRVUZGTEVOQlFVTXNSVUZCUlN4RFFVRkRMRVZCUVVVc1EwRkJReXhGUVVGRkxFTkJRVU1zUlVGQlJTeERRVUZETEVWQlFVVXNRMEZCUXl4RlFVRkZMRU5CUVVNc1JVRkJSU3hEUVVGRExFVkJRVVVzUTBGQlF5eEZRVUZGTEVOQlFVTXNSVUZCUlN4RFFVRkRMRVZCUVVVc1EwRkJReXhGUVVGRkxFTkJRVU1zUlVGQlJTeERRVUZETEVWQlFVVXNRMEZCUXp0SlFVTTVReXhEUVVGRExFVkJRVVVzUTBGQlF5eEZRVUZGTEVOQlFVTXNSVUZCUlN4RFFVRkRMRVZCUVVVc1EwRkJReXhGUVVGRkxFTkJRVU1zUlVGQlJTeERRVUZETEVWQlFVVXNRMEZCUXl4RlFVRkZMRU5CUVVNc1JVRkJSU3hEUVVGRExFVkJRVVVzUTBGQlF5eEZRVUZGTEVOQlFVTXNSVUZCUlN4RFFVRkRMRVZCUVVVc1EwRkJReXhGUVVGRkxFTkJRVU1zUlVGQlJTeERRVUZETzBsQlF6bERMRU5CUVVNc1JVRkJSU3hEUVVGRExFVkJRVVVzUTBGQlF5eEZRVUZGTEVOQlFVTXNSVUZCUlN4RFFVRkRMRVZCUVVVc1EwRkJReXhGUVVGRkxFTkJRVU1zUlVGQlJTeERRVUZETEVWQlFVVXNRMEZCUXl4RlFVRkZMRU5CUVVNc1JVRkJSU3hEUVVGRExFVkJRVVVzUTBGQlF5eEZRVUZGTEVOQlFVTXNSVUZCUlN4RFFVRkRMRVZCUVVVc1EwRkJReXhGUVVGRkxFTkJRVU03U1VGRE9VTXNRMEZCUXl4RlFVRkZMRU5CUVVNc1JVRkJSU3hEUVVGRExFVkJRVVVzUTBGQlF5eEZRVUZGTEVOQlFVTXNSVUZCUlN4RFFVRkRMRVZCUVVVc1EwRkJReXhGUVVGRkxFTkJRVU1zUlVGQlJTeERRVUZETEVWQlFVVXNRMEZCUXl4RlFVRkZMRU5CUVVNc1JVRkJSU3hEUVVGRExFVkJRVVVzUTBGQlF5eEZRVUZGTEVOQlFVTXNSVUZCUlN4RFFVRkRMRVZCUVVVc1EwRkJRenRKUVVNNVF5eERRVUZETEVWQlFVVXNRMEZCUXl4RlFVRkZMRU5CUVVNc1JVRkJSU3hEUVVGRExFVkJRVVVzUTBGQlF5eEZRVUZGTEVOQlFVTXNSVUZCUlN4RFFVRkRMRVZCUVVVc1EwRkJReXhGUVVGRkxFTkJRVU1zUlVGQlJTeERRVUZETEVWQlFVVXNRMEZCUXl4RlFVRkZMRU5CUVVNc1JVRkJSU3hEUVVGRExFVkJRVVVzUTBGQlF5eEZRVUZGTEVOQlFVTXNSVUZCUlN4RFFVRkRPMGxCUXpsRExFTkJRVU1zUlVGQlJTeERRVUZETEVWQlFVVXNRMEZCUXl4RlFVRkZMRU5CUVVNc1JVRkJSU3hEUVVGRExFVkJRVVVzUTBGQlF5eEZRVUZGTEVOQlFVTXNSVUZCUlN4RFFVRkRMRVZCUVVVc1EwRkJReXhGUVVGRkxFTkJRVU1zUlVGQlJTeERRVUZETEVWQlFVVXNRMEZCUXl4RlFVRkZMRU5CUVVNc1JVRkJSU3hEUVVGRExFVkJRVVVzUTBGQlF5eEZRVUZGTEVOQlFVTTdTVUZET1VNc1EwRkJReXhGUVVGRkxFTkJRVU1zUlVGQlJTeERRVUZETEVWQlFVVXNRMEZCUXl4RlFVRkZMRU5CUVVNc1JVRkJSU3hEUVVGRExFVkJRVVVzUTBGQlF5eEZRVUZGTEVOQlFVTXNSVUZCUlN4RFFVRkRMRVZCUVVVc1EwRkJReXhGUVVGRkxFTkJRVU1zUlVGQlJTeERRVUZETEVWQlFVVXNRMEZCUXl4RlFVRkZMRU5CUVVNc1JVRkJSU3hEUVVGRExFVkJRVVVzUTBGQlF6dEpRVU01UXl4RFFVRkRMRVZCUVVVc1EwRkJReXhGUVVGRkxFTkJRVU1zUlVGQlJTeERRVUZETEVWQlFVVXNRMEZCUXl4RlFVRkZMRU5CUVVNc1JVRkJSU3hEUVVGRExFVkJRVVVzUTBGQlF5eEZRVUZGTEVOQlFVTXNSVUZCUlN4RFFVRkRMRVZCUVVVc1EwRkJReXhGUVVGRkxFTkJRVU1zUlVGQlJTeERRVUZETEVWQlFVVXNRMEZCUXl4RlFVRkZMRU5CUVVNc1JVRkJSU3hEUVVGRE8wbEJRemxETEVOQlFVTXNSVUZCUlN4RFFVRkRMRVZCUVVVc1EwRkJReXhGUVVGRkxFTkJRVU1zUlVGQlJTeERRVUZETEVWQlFVVXNRMEZCUXl4RlFVRkZMRU5CUVVNc1JVRkJSU3hEUVVGRExFVkJRVVVzUTBGQlF5eEZRVUZGTEVOQlFVTXNSVUZCUlN4RFFVRkRMRVZCUVVVc1EwRkJReXhGUVVGRkxFTkJRVU1zUlVGQlJTeERRVUZETEVWQlFVVXNRMEZCUXl4RlFVRkZMRU5CUVVNN1NVRkRPVU1zUTBGQlF5eEZRVUZGTEVOQlFVTXNSVUZCUlN4RFFVRkRMRVZCUVVVc1EwRkJReXhGUVVGRkxFTkJRVU1zUlVGQlJTeERRVUZETEVWQlFVVXNRMEZCUXl4RlFVRkZMRU5CUVVNc1JVRkJSU3hEUVVGRExFVkJRVVVzUTBGQlF5eEZRVUZGTEVOQlFVTXNSVUZCUlN4RFFVRkRMRVZCUVVVc1EwRkJReXhGUVVGRkxFTkJRVU1zUlVGQlJTeERRVUZETEVWQlFVVXNRMEZCUXp0SlFVTTVReXhEUVVGRExFVkJRVVVzUTBGQlF5eEZRVUZGTEVOQlFVTXNSVUZCUlN4RFFVRkRMRVZCUVVVc1EwRkJReXhGUVVGRkxFTkJRVU1zUlVGQlJTeERRVUZETEVWQlFVVXNRMEZCUXl4RlFVRkZMRU5CUVVNc1JVRkJSU3hEUVVGRExFVkJRVVVzUTBGQlF5eEZRVUZGTEVOQlFVTXNSVUZCUlN4RFFVRkRMRVZCUVVVc1EwRkJReXhGUVVGRkxFTkJRVU1zUlVGQlJTeERRVUZETzBsQlF6bERMRU5CUVVNc1JVRkJSU3hEUVVGRExFVkJRVVVzUTBGQlF5eEZRVUZGTEVOQlFVTXNSVUZCUlN4RFFVRkRMRVZCUVVVc1EwRkJReXhGUVVGRkxFTkJRVU1zUlVGQlJTeERRVUZETEVWQlFVVXNRMEZCUXl4RlFVRkZMRU5CUVVNc1JVRkJSU3hEUVVGRExFVkJRVVVzUTBGQlF5eEZRVUZGTEVOQlFVTXNSVUZCUlN4RFFVRkRMRVZCUVVVc1EwRkJReXhGUVVGRkxFTkJRVU03U1VGRE9VTXNRMEZCUXl4RlFVRkZMRU5CUVVNc1JVRkJSU3hEUVVGRExFVkJRVVVzUTBGQlF5eEZRVUZGTEVOQlFVTXNSVUZCUlN4RFFVRkRMRVZCUVVVc1EwRkJReXhGUVVGRkxFTkJRVU1zUlVGQlJTeERRVUZETEVWQlFVVXNRMEZCUXl4RlFVRkZMRU5CUVVNc1JVRkJSU3hEUVVGRExFVkJRVVVzUTBGQlF5eEZRVUZGTEVOQlFVTXNSVUZCUlN4RFFVRkRMRVZCUVVVc1EwRkJRenRKUVVNNVF5eERRVUZETEVWQlFVVXNRMEZCUXl4RlFVRkZMRU5CUVVNc1JVRkJSU3hEUVVGRExFVkJRVVVzUTBGQlF5eEZRVUZGTEVOQlFVTXNSVUZCUlN4RFFVRkRMRVZCUVVVc1EwRkJReXhGUVVGRkxFTkJRVU1zUlVGQlJTeERRVUZETEVWQlFVVXNRMEZCUXl4RlFVRkZMRU5CUVVNc1JVRkJSU3hEUVVGRExFVkJRVVVzUTBGQlF5eEZRVUZGTEVOQlFVTXNSVUZCUlN4RFFVRkRPMGxCUXpsRExFTkJRVU1zUlVGQlJTeERRVUZETEVWQlFVVXNRMEZCUXl4RlFVRkZMRU5CUVVNc1JVRkJSU3hEUVVGRExFVkJRVVVzUTBGQlF5eEZRVUZGTEVOQlFVTXNSVUZCUlN4RFFVRkRMRVZCUVVVc1EwRkJReXhGUVVGRkxFTkJRVU1zUlVGQlJTeERRVUZETEVWQlFVVXNRMEZCUXl4RlFVRkZMRU5CUVVNc1JVRkJSU3hEUVVGRExFVkJRVVVzUTBGQlF5eEZRVUZGTEVOQlFVTTdRMEZCUXl4RFFVRkRMRU5CUVVNN1FVRkZOVU1zYjBKQlFWY3NSMEZCUnl4VFFVRlRMRU5CUVVNc1NVRkJTU3hEUVVGRE8wbEJRMnhETEVOQlFVTXNRMEZCUXl4RlFVRkZMRU5CUVVNc1JVRkJSU3hEUVVGRExFVkJRVVVzUTBGQlF5eEZRVUZGTEVOQlFVTXNSVUZCUlN4RFFVRkRMRVZCUVVVc1EwRkJReXhGUVVGRkxFTkJRVU1zUlVGQlJTeERRVUZETEVWQlFVVXNRMEZCUXl4RlFVRkZMRU5CUVVNc1JVRkJSU3hEUVVGRExFVkJRVVVzUTBGQlF5eEZRVUZGTEVOQlFVTXNSVUZCUlN4RFFVRkRMRVZCUVVVc1EwRkJRenRKUVVNdlF5eERRVUZETEVWQlFVVXNRMEZCUXl4RlFVRkZMRU5CUVVNc1JVRkJSU3hEUVVGRExFVkJRVVVzUTBGQlF5eEZRVUZGTEVOQlFVTXNSVUZCUlN4RFFVRkRMRVZCUVVVc1EwRkJReXhGUVVGRkxFTkJRVU1zUlVGQlJTeERRVUZETEVWQlFVVXNRMEZCUXl4RlFVRkZMRU5CUVVNc1JVRkJSU3hEUVVGRExFVkJRVVVzUTBGQlF5eEZRVUZGTEVOQlFVTXNSVUZCUlN4RFFVRkRPMGxCUXpsRExFTkJRVU1zUlVGQlJTeERRVUZETEVWQlFVVXNRMEZCUXl4RlFVRkZMRU5CUVVNc1JVRkJSU3hEUVVGRExFVkJRVVVzUTBGQlF5eEZRVUZGTEVOQlFVTXNSVUZCUlN4RFFVRkRMRVZCUVVVc1EwRkJReXhGUVVGRkxFTkJRVU1zUlVGQlJTeERRVUZETEVWQlFVVXNRMEZCUXl4RlFVRkZMRU5CUVVNc1JVRkJSU3hEUVVGRExFVkJRVVVzUTBGQlF5eEZRVUZGTEVOQlFVTTdTVUZET1VNc1EwRkJReXhGUVVGRkxFTkJRVU1zUlVGQlJTeERRVUZETEVWQlFVVXNRMEZCUXl4RlFVRkZMRU5CUVVNc1JVRkJSU3hEUVVGRExFVkJRVVVzUTBGQlF5eEZRVUZGTEVOQlFVTXNSVUZCUlN4RFFVRkRMRVZCUVVVc1EwRkJReXhGUVVGRkxFTkJRVU1zUlVGQlJTeERRVUZETEVWQlFVVXNRMEZCUXl4RlFVRkZMRU5CUVVNc1JVRkJSU3hEUVVGRExFVkJRVVVzUTBGQlF6dEpRVU01UXl4RFFVRkRMRVZCUVVVc1EwRkJReXhGUVVGRkxFTkJRVU1zUlVGQlJTeERRVUZETEVWQlFVVXNRMEZCUXl4RlFVRkZMRU5CUVVNc1JVRkJSU3hEUVVGRExFVkJRVVVzUTBGQlF5eEZRVUZGTEVOQlFVTXNSVUZCUlN4RFFVRkRMRVZCUVVVc1EwRkJReXhGUVVGRkxFTkJRVU1zUlVGQlJTeERRVUZETEVWQlFVVXNRMEZCUXl4RlFVRkZMRU5CUVVNc1JVRkJSU3hEUVVGRE8wbEJRemxETEVOQlFVTXNSVUZCUlN4RFFVRkRMRVZCUVVVc1EwRkJReXhGUVVGRkxFTkJRVU1zUlVGQlJTeERRVUZETEVWQlFVVXNRMEZCUXl4RlFVRkZMRU5CUVVNc1JVRkJSU3hEUVVGRExFVkJRVVVzUTBGQlF5eEZRVUZGTEVOQlFVTXNSVUZCUlN4RFFVRkRMRVZCUVVVc1EwRkJReXhGUVVGRkxFTkJRVU1zUlVGQlJTeERRVUZETEVWQlFVVXNRMEZCUXl4RlFVRkZMRU5CUVVNN1NVRkRPVU1zUTBGQlF5eEZRVUZGTEVOQlFVTXNSVUZCUlN4RFFVRkRMRVZCUVVVc1EwRkJReXhGUVVGRkxFTkJRVU1zUlVGQlJTeERRVUZETEVWQlFVVXNRMEZCUXl4RlFVRkZMRU5CUVVNc1JVRkJSU3hEUVVGRExFVkJRVVVzUTBGQlF5eEZRVUZGTEVOQlFVTXNSVUZCUlN4RFFVRkRMRVZCUVVVc1EwRkJReXhGUVVGRkxFTkJRVU1zUlVGQlJTeERRVUZETEVWQlFVVXNRMEZCUXp0SlFVTTVReXhEUVVGRExFVkJRVVVzUTBGQlF5eEZRVUZGTEVOQlFVTXNSVUZCUlN4RFFVRkRMRVZCUVVVc1EwRkJReXhGUVVGRkxFTkJRVU1zUlVGQlJTeERRVUZETEVWQlFVVXNRMEZCUXl4RlFVRkZMRU5CUVVNc1JVRkJSU3hEUVVGRExFVkJRVVVzUTBGQlF5eEZRVUZGTEVOQlFVTXNSVUZCUlN4RFFVRkRMRVZCUVVVc1EwRkJReXhGUVVGRkxFTkJRVU1zUlVGQlJTeERRVUZETzBsQlF6bERMRU5CUVVNc1JVRkJSU3hEUVVGRExFVkJRVVVzUTBGQlF5eEZRVUZGTEVOQlFVTXNSVUZCUlN4RFFVRkRMRVZCUVVVc1EwRkJReXhGUVVGRkxFTkJRVU1zUlVGQlJTeERRVUZETEVWQlFVVXNRMEZCUXl4RlFVRkZMRU5CUVVNc1JVRkJSU3hEUVVGRExFVkJRVVVzUTBGQlF5eEZRVUZGTEVOQlFVTXNSVUZCUlN4RFFVRkRMRVZCUVVVc1EwRkJReXhGUVVGRkxFTkJRVU03U1VGRE9VTXNRMEZCUXl4RlFVRkZMRU5CUVVNc1JVRkJSU3hEUVVGRExFVkJRVVVzUTBGQlF5eEZRVUZGTEVOQlFVTXNSVUZCUlN4RFFVRkRMRVZCUVVVc1EwRkJReXhGUVVGRkxFTkJRVU1zUlVGQlJTeERRVUZETEVWQlFVVXNRMEZCUXl4RlFVRkZMRU5CUVVNc1JVRkJSU3hEUVVGRExFVkJRVVVzUTBGQlF5eEZRVUZGTEVOQlFVTXNSVUZCUlN4RFFVRkRMRVZCUVVVc1EwRkJRenRKUVVNNVF5eERRVUZETEVWQlFVVXNRMEZCUXl4RlFVRkZMRU5CUVVNc1JVRkJSU3hEUVVGRExFVkJRVVVzUTBGQlF5eEZRVUZGTEVOQlFVTXNSVUZCUlN4RFFVRkRMRVZCUVVVc1EwRkJReXhGUVVGRkxFTkJRVU1zUlVGQlJTeERRVUZETEVWQlFVVXNRMEZCUXl4RlFVRkZMRU5CUVVNc1JVRkJSU3hEUVVGRExFVkJRVVVzUTBGQlF5eEZRVUZGTEVOQlFVTXNSVUZCUlN4RFFVRkRPMGxCUXpsRExFTkJRVU1zUlVGQlJTeERRVUZETEVWQlFVVXNRMEZCUXl4RlFVRkZMRU5CUVVNc1JVRkJSU3hEUVVGRExFVkJRVVVzUTBGQlF5eEZRVUZGTEVOQlFVTXNSVUZCUlN4RFFVRkRMRVZCUVVVc1EwRkJReXhGUVVGRkxFTkJRVU1zUlVGQlJTeERRVUZETEVWQlFVVXNRMEZCUXl4RlFVRkZMRU5CUVVNc1JVRkJSU3hEUVVGRExFVkJRVVVzUTBGQlF5eEZRVUZGTEVOQlFVTTdTVUZET1VNc1EwRkJReXhGUVVGRkxFTkJRVU1zUlVGQlJTeERRVUZETEVWQlFVVXNRMEZCUXl4RlFVRkZMRU5CUVVNc1JVRkJSU3hEUVVGRExFVkJRVVVzUTBGQlF5eEZRVUZGTEVOQlFVTXNSVUZCUlN4RFFVRkRMRVZCUVVVc1EwRkJReXhGUVVGRkxFTkJRVU1zUlVGQlJTeERRVUZETEVWQlFVVXNRMEZCUXl4RlFVRkZMRU5CUVVNc1JVRkJSU3hEUVVGRExFVkJRVVVzUTBGQlF6dEpRVU01UXl4RFFVRkRMRVZCUVVVc1EwRkJReXhGUVVGRkxFTkJRVU1zUlVGQlJTeERRVUZETEVWQlFVVXNRMEZCUXl4RlFVRkZMRU5CUVVNc1JVRkJSU3hEUVVGRExFVkJRVVVzUTBGQlF5eEZRVUZGTEVOQlFVTXNSVUZCUlN4RFFVRkRMRVZCUVVVc1EwRkJReXhGUVVGRkxFTkJRVU1zUlVGQlJTeERRVUZETEVWQlFVVXNRMEZCUXl4RlFVRkZMRU5CUVVNc1JVRkJSU3hEUVVGRE8wbEJRemxETEVOQlFVTXNSVUZCUlN4RFFVRkRMRVZCUVVVc1EwRkJReXhGUVVGRkxFTkJRVU1zUlVGQlJTeERRVUZETEVWQlFVVXNRMEZCUXl4RlFVRkZMRU5CUVVNc1JVRkJSU3hEUVVGRExFVkJRVVVzUTBGQlF5eEZRVUZGTEVOQlFVTXNSVUZCUlN4RFFVRkRMRVZCUVVVc1EwRkJReXhGUVVGRkxFTkJRVU1zUlVGQlJTeERRVUZETEVWQlFVVXNRMEZCUXl4RlFVRkZMRU5CUVVNN1NVRkRPVU1zUTBGQlF5eEZRVUZGTEVOQlFVTXNSVUZCUlN4RFFVRkRMRVZCUVVVc1EwRkJReXhGUVVGRkxFTkJRVU1zUlVGQlJTeERRVUZETEVWQlFVVXNRMEZCUXl4RlFVRkZMRU5CUVVNc1JVRkJSU3hEUVVGRExFVkJRVVVzUTBGQlF5eEZRVUZGTEVOQlFVTXNSVUZCUlN4RFFVRkRMRVZCUVVVc1EwRkJReXhGUVVGRkxFTkJRVU1zUlVGQlJTeERRVUZETEVWQlFVVXNRMEZCUXp0RFFVRkRMRU5CUVVNc1EwRkJRenRCUVVVMVF5eHRRa0ZCVlN4SFFVRkhMRk5CUVZNc1EwRkJReXhKUVVGSkxFTkJRVU03U1VGRGFrTXNRMEZCUXl4RFFVRkRMRVZCUVVVc1EwRkJReXhGUVVGRkxFTkJRVU1zUlVGQlJTeERRVUZETEVWQlFVVXNRMEZCUXl4RlFVRkZMRU5CUVVNc1JVRkJSU3hEUVVGRExFVkJRVVVzUTBGQlF5eEZRVUZGTEVOQlFVTXNSVUZCUlN4RFFVRkRMRVZCUVVVc1EwRkJReXhGUVVGRkxFTkJRVU1zUlVGQlJTeERRVUZETEVWQlFVVXNRMEZCUXl4RlFVRkZMRU5CUVVNc1JVRkJSU3hEUVVGRE8wbEJReTlETEVOQlFVTXNSVUZCUlN4RFFVRkRMRVZCUVVVc1EwRkJReXhGUVVGRkxFTkJRVU1zUlVGQlJTeERRVUZETEVWQlFVVXNRMEZCUXl4RlFVRkZMRU5CUVVNc1JVRkJSU3hEUVVGRExFVkJRVVVzUTBGQlF5eEZRVUZGTEVOQlFVTXNSVUZCUlN4RFFVRkRMRVZCUVVVc1EwRkJReXhGUVVGRkxFTkJRVU1zUlVGQlJTeERRVUZETEVWQlFVVXNRMEZCUXl4RlFVRkZMRU5CUVVNN1NVRkRPVU1zUTBGQlF5eEZRVUZGTEVOQlFVTXNSVUZCUlN4RFFVRkRMRVZCUVVVc1EwRkJReXhGUVVGRkxFTkJRVU1zUlVGQlJTeERRVUZETEVWQlFVVXNRMEZCUXl4RlFVRkZMRU5CUVVNc1JVRkJSU3hEUVVGRExFVkJRVVVzUTBGQlF5eEZRVUZGTEVOQlFVTXNSVUZCUlN4RFFVRkRMRVZCUVVVc1EwRkJReXhGUVVGRkxFTkJRVU1zUlVGQlJTeERRVUZETEVWQlFVVXNRMEZCUXp0SlFVTTVReXhEUVVGRExFVkJRVVVzUTBGQlF5eEZRVUZGTEVOQlFVTXNSVUZCUlN4RFFVRkRMRVZCUVVVc1EwRkJReXhGUVVGRkxFTkJRVU1zUlVGQlJTeERRVUZETEVWQlFVVXNRMEZCUXl4RlFVRkZMRU5CUVVNc1JVRkJSU3hEUVVGRExFVkJRVVVzUTBGQlF5eEZRVUZGTEVOQlFVTXNSVUZCUlN4RFFVRkRMRVZCUVVVc1EwRkJReXhGUVVGRkxFTkJRVU1zUlVGQlJTeERRVUZETzBsQlF6bERMRU5CUVVNc1JVRkJSU3hEUVVGRExFVkJRVVVzUTBGQlF5eEZRVUZGTEVOQlFVTXNSVUZCUlN4RFFVRkRMRVZCUVVVc1EwRkJReXhGUVVGRkxFTkJRVU1zUlVGQlJTeERRVUZETEVWQlFVVXNRMEZCUXl4RlFVRkZMRU5CUVVNc1JVRkJSU3hEUVVGRExFVkJRVVVzUTBGQlF5eEZRVUZGTEVOQlFVTXNSVUZCUlN4RFFVRkRMRVZCUVVVc1EwRkJReXhGUVVGRkxFTkJRVU03U1VGRE9VTXNRMEZCUXl4RlFVRkZMRU5CUVVNc1JVRkJSU3hEUVVGRExFVkJRVVVzUTBGQlF5eEZRVUZGTEVOQlFVTXNSVUZCUlN4RFFVRkRMRVZCUVVVc1EwRkJReXhGUVVGRkxFTkJRVU1zUlVGQlJTeERRVUZETEVWQlFVVXNRMEZCUXl4RlFVRkZMRU5CUVVNc1JVRkJSU3hEUVVGRExFVkJRVVVzUTBGQlF5eEZRVUZGTEVOQlFVTXNSVUZCUlN4RFFVRkRMRVZCUVVVc1EwRkJRenRKUVVNNVF5eERRVUZETEVWQlFVVXNRMEZCUXl4RlFVRkZMRU5CUVVNc1JVRkJSU3hEUVVGRExFVkJRVVVzUTBGQlF5eEZRVUZGTEVOQlFVTXNSVUZCUlN4RFFVRkRMRVZCUVVVc1EwRkJReXhGUVVGRkxFTkJRVU1zUlVGQlJTeERRVUZETEVWQlFVVXNRMEZCUXl4RlFVRkZMRU5CUVVNc1JVRkJSU3hEUVVGRExFVkJRVVVzUTBGQlF5eEZRVUZGTEVOQlFVTXNSVUZCUlN4RFFVRkRPMGxCUXpsRExFTkJRVU1zUlVGQlJTeERRVUZETEVWQlFVVXNRMEZCUXl4RlFVRkZMRU5CUVVNc1JVRkJSU3hEUVVGRExFVkJRVVVzUTBGQlF5eEZRVUZGTEVOQlFVTXNSVUZCUlN4RFFVRkRMRVZCUVVVc1EwRkJReXhGUVVGRkxFTkJRVU1zUlVGQlJTeERRVUZETEVWQlFVVXNRMEZCUXl4RlFVRkZMRU5CUVVNc1JVRkJSU3hEUVVGRExFVkJRVVVzUTBGQlF5eEZRVUZGTEVOQlFVTTdTVUZET1VNc1EwRkJReXhGUVVGRkxFTkJRVU1zUlVGQlJTeERRVUZETEVWQlFVVXNRMEZCUXl4RlFVRkZMRU5CUVVNc1JVRkJSU3hEUVVGRExFVkJRVVVzUTBGQlF5eEZRVUZGTEVOQlFVTXNSVUZCUlN4RFFVRkRMRVZCUVVVc1EwRkJReXhGUVVGRkxFTkJRVU1zUlVGQlJTeERRVUZETEVWQlFVVXNRMEZCUXl4RlFVRkZMRU5CUVVNc1JVRkJSU3hEUVVGRExFVkJRVVVzUTBGQlF6dEpRVU01UXl4RFFVRkRMRVZCUVVVc1EwRkJReXhGUVVGRkxFTkJRVU1zUlVGQlJTeERRVUZETEVWQlFVVXNRMEZCUXl4RlFVRkZMRU5CUVVNc1JVRkJSU3hEUVVGRExFVkJRVVVzUTBGQlF5eEZRVUZGTEVOQlFVTXNSVUZCUlN4RFFVRkRMRVZCUVVVc1EwRkJReXhGUVVGRkxFTkJRVU1zUlVGQlJTeERRVUZETEVWQlFVVXNRMEZCUXl4RlFVRkZMRU5CUVVNc1JVRkJSU3hEUVVGRE8wbEJRemxETEVOQlFVTXNSVUZCUlN4RFFVRkRMRVZCUVVVc1EwRkJReXhGUVVGRkxFTkJRVU1zUlVGQlJTeERRVUZETEVWQlFVVXNRMEZCUXl4RlFVRkZMRU5CUVVNc1JVRkJSU3hEUVVGRExFVkJRVVVzUTBGQlF5eEZRVUZGTEVOQlFVTXNSVUZCUlN4RFFVRkRMRVZCUVVVc1EwRkJReXhGUVVGRkxFTkJRVU1zUlVGQlJTeERRVUZETEVWQlFVVXNRMEZCUXl4RlFVRkZMRU5CUVVNN1NVRkRPVU1zUTBGQlF5eEZRVUZGTEVOQlFVTXNSVUZCUlN4RFFVRkRMRVZCUVVVc1EwRkJReXhGUVVGRkxFTkJRVU1zUlVGQlJTeERRVUZETEVWQlFVVXNRMEZCUXl4RlFVRkZMRU5CUVVNc1JVRkJSU3hEUVVGRExFVkJRVVVzUTBGQlF5eEZRVUZGTEVOQlFVTXNSVUZCUlN4RFFVRkRMRVZCUVVVc1EwRkJReXhGUVVGRkxFTkJRVU1zUlVGQlJTeERRVUZETEVWQlFVVXNRMEZCUXp0SlFVTTVReXhEUVVGRExFVkJRVVVzUTBGQlF5eEZRVUZGTEVOQlFVTXNSVUZCUlN4RFFVRkRMRVZCUVVVc1EwRkJReXhGUVVGRkxFTkJRVU1zUlVGQlJTeERRVUZETEVWQlFVVXNRMEZCUXl4RlFVRkZMRU5CUVVNc1JVRkJSU3hEUVVGRExFVkJRVVVzUTBGQlF5eEZRVUZGTEVOQlFVTXNSVUZCUlN4RFFVRkRMRVZCUVVVc1EwRkJReXhGUVVGRkxFTkJRVU1zUlVGQlJTeERRVUZETzBsQlF6bERMRU5CUVVNc1JVRkJSU3hEUVVGRExFVkJRVVVzUTBGQlF5eEZRVUZGTEVOQlFVTXNSVUZCUlN4RFFVRkRMRVZCUVVVc1EwRkJReXhGUVVGRkxFTkJRVU1zUlVGQlJTeERRVUZETEVWQlFVVXNRMEZCUXl4RlFVRkZMRU5CUVVNc1JVRkJSU3hEUVVGRExFVkJRVVVzUTBGQlF5eEZRVUZGTEVOQlFVTXNSVUZCUlN4RFFVRkRMRVZCUVVVc1EwRkJReXhGUVVGRkxFTkJRVU03U1VGRE9VTXNRMEZCUXl4RlFVRkZMRU5CUVVNc1JVRkJSU3hEUVVGRExFVkJRVVVzUTBGQlF5eEZRVUZGTEVOQlFVTXNSVUZCUlN4RFFVRkRMRVZCUVVVc1EwRkJReXhGUVVGRkxFTkJRVU1zUlVGQlJTeERRVUZETEVWQlFVVXNRMEZCUXl4RlFVRkZMRU5CUVVNc1JVRkJSU3hEUVVGRExFVkJRVVVzUTBGQlF5eEZRVUZGTEVOQlFVTXNSVUZCUlN4RFFVRkRMRVZCUVVVc1EwRkJRenRKUVVNNVF5eERRVUZETEVWQlFVVXNRMEZCUXl4RlFVRkZMRU5CUVVNc1JVRkJSU3hEUVVGRExFVkJRVVVzUTBGQlF5eEZRVUZGTEVOQlFVTXNSVUZCUlN4RFFVRkRMRVZCUVVVc1EwRkJReXhGUVVGRkxFTkJRVU1zUlVGQlJTeERRVUZETEVWQlFVVXNRMEZCUXl4RlFVRkZMRU5CUVVNc1JVRkJSU3hEUVVGRExFVkJRVVVzUTBGQlF5eEZRVUZGTEVOQlFVTXNSVUZCUlN4RFFVRkRPME5CUVVNc1EwRkJReXhEUVVGRElpd2ljMjkxY21ObGMwTnZiblJsYm5RaU9sc2laWGh3YjNKMElHUmxabUYxYkhRZ1kyeGhjM01nUW1sMFFYSnlZWGtnZTF4dUlDQnpkR0YwYVdNZ1gyOXVRbWwwUTI5MWJuUWdQU0JKYm5RNFFYSnlZWGt1Wm5KdmJTaGJYRzRnSUNBZ01Dd2dNU3dnTVN3Z01pd2dNU3dnTWl3Z01pd2dNeXdnTVN3Z01pd2dNaXdnTXl3Z01pd2dNeXdnTXl3Z05DeGNiaUFnSUNBeExDQXlMQ0F5TENBekxDQXlMQ0F6TENBekxDQTBMQ0F5TENBekxDQXpMQ0EwTENBekxDQTBMQ0EwTENBMUxGeHVJQ0FnSURFc0lESXNJRElzSURNc0lESXNJRE1zSURNc0lEUXNJRElzSURNc0lETXNJRFFzSURNc0lEUXNJRFFzSURVc1hHNGdJQ0FnTWl3Z015d2dNeXdnTkN3Z015d2dOQ3dnTkN3Z05Td2dNeXdnTkN3Z05Dd2dOU3dnTkN3Z05Td2dOU3dnTml4Y2JpQWdJQ0F4TENBeUxDQXlMQ0F6TENBeUxDQXpMQ0F6TENBMExDQXlMQ0F6TENBekxDQTBMQ0F6TENBMExDQTBMQ0ExTEZ4dUlDQWdJRElzSURNc0lETXNJRFFzSURNc0lEUXNJRFFzSURVc0lETXNJRFFzSURRc0lEVXNJRFFzSURVc0lEVXNJRFlzWEc0Z0lDQWdNaXdnTXl3Z015d2dOQ3dnTXl3Z05Dd2dOQ3dnTlN3Z015d2dOQ3dnTkN3Z05Td2dOQ3dnTlN3Z05Td2dOaXhjYmlBZ0lDQXpMQ0EwTENBMExDQTFMQ0EwTENBMUxDQTFMQ0EyTENBMExDQTFMQ0ExTENBMkxDQTFMQ0EyTENBMkxDQTNMRnh1SUNBZ0lERXNJRElzSURJc0lETXNJRElzSURNc0lETXNJRFFzSURJc0lETXNJRE1zSURRc0lETXNJRFFzSURRc0lEVXNYRzRnSUNBZ01pd2dNeXdnTXl3Z05Dd2dNeXdnTkN3Z05Dd2dOU3dnTXl3Z05Dd2dOQ3dnTlN3Z05Dd2dOU3dnTlN3Z05peGNiaUFnSUNBeUxDQXpMQ0F6TENBMExDQXpMQ0EwTENBMExDQTFMQ0F6TENBMExDQTBMQ0ExTENBMExDQTFMQ0ExTENBMkxGeHVJQ0FnSURNc0lEUXNJRFFzSURVc0lEUXNJRFVzSURVc0lEWXNJRFFzSURVc0lEVXNJRFlzSURVc0lEWXNJRFlzSURjc1hHNGdJQ0FnTWl3Z015d2dNeXdnTkN3Z015d2dOQ3dnTkN3Z05Td2dNeXdnTkN3Z05Dd2dOU3dnTkN3Z05Td2dOU3dnTml4Y2JpQWdJQ0F6TENBMExDQTBMQ0ExTENBMExDQTFMQ0ExTENBMkxDQTBMQ0ExTENBMUxDQTJMQ0ExTENBMkxDQTJMQ0EzTEZ4dUlDQWdJRE1zSURRc0lEUXNJRFVzSURRc0lEVXNJRFVzSURZc0lEUXNJRFVzSURVc0lEWXNJRFVzSURZc0lEWXNJRGNzWEc0Z0lDQWdOQ3dnTlN3Z05Td2dOaXdnTlN3Z05pd2dOaXdnTnl3Z05Td2dOaXdnTml3Z055d2dOaXdnTnl3Z055d2dPRjBwTzF4dVhHNGdJSE4wWVhScFl5QmZabWx5YzNSUGJrSnBkQ0E5SUVsdWREaEJjbkpoZVM1bWNtOXRLRnRjYmlBZ0lDQXRNU3dnTUN3Z01Td2dNQ3dnTWl3Z01Dd2dNU3dnTUN3Z015d2dNQ3dnTVN3Z01Dd2dNaXdnTUN3Z01Td2dNQ3hjYmlBZ0lDQTBMQ0F3TENBeExDQXdMQ0F5TENBd0xDQXhMQ0F3TENBekxDQXdMQ0F4TENBd0xDQXlMQ0F3TENBeExDQXdMRnh1SUNBZ0lEVXNJREFzSURFc0lEQXNJRElzSURBc0lERXNJREFzSURNc0lEQXNJREVzSURBc0lESXNJREFzSURFc0lEQXNYRzRnSUNBZ05Dd2dNQ3dnTVN3Z01Dd2dNaXdnTUN3Z01Td2dNQ3dnTXl3Z01Dd2dNU3dnTUN3Z01pd2dNQ3dnTVN3Z01DeGNiaUFnSUNBMkxDQXdMQ0F4TENBd0xDQXlMQ0F3TENBeExDQXdMQ0F6TENBd0xDQXhMQ0F3TENBeUxDQXdMQ0F4TENBd0xGeHVJQ0FnSURRc0lEQXNJREVzSURBc0lESXNJREFzSURFc0lEQXNJRE1zSURBc0lERXNJREFzSURJc0lEQXNJREVzSURBc1hHNGdJQ0FnTlN3Z01Dd2dNU3dnTUN3Z01pd2dNQ3dnTVN3Z01Dd2dNeXdnTUN3Z01Td2dNQ3dnTWl3Z01Dd2dNU3dnTUN4Y2JpQWdJQ0EwTENBd0xDQXhMQ0F3TENBeUxDQXdMQ0F4TENBd0xDQXpMQ0F3TENBeExDQXdMQ0F5TENBd0xDQXhMQ0F3TEZ4dUlDQWdJRGNzSURBc0lERXNJREFzSURJc0lEQXNJREVzSURBc0lETXNJREFzSURFc0lEQXNJRElzSURBc0lERXNJREFzWEc0Z0lDQWdOQ3dnTUN3Z01Td2dNQ3dnTWl3Z01Dd2dNU3dnTUN3Z015d2dNQ3dnTVN3Z01Dd2dNaXdnTUN3Z01Td2dNQ3hjYmlBZ0lDQTFMQ0F3TENBeExDQXdMQ0F5TENBd0xDQXhMQ0F3TENBekxDQXdMQ0F4TENBd0xDQXlMQ0F3TENBeExDQXdMRnh1SUNBZ0lEUXNJREFzSURFc0lEQXNJRElzSURBc0lERXNJREFzSURNc0lEQXNJREVzSURBc0lESXNJREFzSURFc0lEQXNYRzRnSUNBZ05pd2dNQ3dnTVN3Z01Dd2dNaXdnTUN3Z01Td2dNQ3dnTXl3Z01Dd2dNU3dnTUN3Z01pd2dNQ3dnTVN3Z01DeGNiaUFnSUNBMExDQXdMQ0F4TENBd0xDQXlMQ0F3TENBeExDQXdMQ0F6TENBd0xDQXhMQ0F3TENBeUxDQXdMQ0F4TENBd0xGeHVJQ0FnSURVc0lEQXNJREVzSURBc0lESXNJREFzSURFc0lEQXNJRE1zSURBc0lERXNJREFzSURJc0lEQXNJREVzSURBc1hHNGdJQ0FnTkN3Z01Dd2dNU3dnTUN3Z01pd2dNQ3dnTVN3Z01Dd2dNeXdnTUN3Z01Td2dNQ3dnTWl3Z01Dd2dNU3dnTUYwcE8xeHVYRzRnSUhOMFlYUnBZeUJmYkdGemRFOXVRbWwwSUQwZ1NXNTBPRUZ5Y21GNUxtWnliMjBvVzF4dUlDQWdJQzB4TENBd0xDQXhMQ0F4TENBeUxDQXlMQ0F5TENBeUxDQXpMQ0F6TENBekxDQXpMQ0F6TENBekxDQXpMQ0F6TEZ4dUlDQWdJRFFzSURRc0lEUXNJRFFzSURRc0lEUXNJRFFzSURRc0lEUXNJRFFzSURRc0lEUXNJRFFzSURRc0lEUXNJRFFzWEc0Z0lDQWdOU3dnTlN3Z05Td2dOU3dnTlN3Z05Td2dOU3dnTlN3Z05Td2dOU3dnTlN3Z05Td2dOU3dnTlN3Z05Td2dOU3hjYmlBZ0lDQTFMQ0ExTENBMUxDQTFMQ0ExTENBMUxDQTFMQ0ExTENBMUxDQTFMQ0ExTENBMUxDQTFMQ0ExTENBMUxDQTFMRnh1SUNBZ0lEWXNJRFlzSURZc0lEWXNJRFlzSURZc0lEWXNJRFlzSURZc0lEWXNJRFlzSURZc0lEWXNJRFlzSURZc0lEWXNYRzRnSUNBZ05pd2dOaXdnTml3Z05pd2dOaXdnTml3Z05pd2dOaXdnTml3Z05pd2dOaXdnTml3Z05pd2dOaXdnTml3Z05peGNiaUFnSUNBMkxDQTJMQ0EyTENBMkxDQTJMQ0EyTENBMkxDQTJMQ0EyTENBMkxDQTJMQ0EyTENBMkxDQTJMQ0EyTENBMkxGeHVJQ0FnSURZc0lEWXNJRFlzSURZc0lEWXNJRFlzSURZc0lEWXNJRFlzSURZc0lEWXNJRFlzSURZc0lEWXNJRFlzSURZc1hHNGdJQ0FnTnl3Z055d2dOeXdnTnl3Z055d2dOeXdnTnl3Z055d2dOeXdnTnl3Z055d2dOeXdnTnl3Z055d2dOeXdnTnl4Y2JpQWdJQ0EzTENBM0xDQTNMQ0EzTENBM0xDQTNMQ0EzTENBM0xDQTNMQ0EzTENBM0xDQTNMQ0EzTENBM0xDQTNMQ0EzTEZ4dUlDQWdJRGNzSURjc0lEY3NJRGNzSURjc0lEY3NJRGNzSURjc0lEY3NJRGNzSURjc0lEY3NJRGNzSURjc0lEY3NJRGNzWEc0Z0lDQWdOeXdnTnl3Z055d2dOeXdnTnl3Z055d2dOeXdnTnl3Z055d2dOeXdnTnl3Z055d2dOeXdnTnl3Z055d2dOeXhjYmlBZ0lDQTNMQ0EzTENBM0xDQTNMQ0EzTENBM0xDQTNMQ0EzTENBM0xDQTNMQ0EzTENBM0xDQTNMQ0EzTENBM0xDQTNMRnh1SUNBZ0lEY3NJRGNzSURjc0lEY3NJRGNzSURjc0lEY3NJRGNzSURjc0lEY3NJRGNzSURjc0lEY3NJRGNzSURjc0lEY3NYRzRnSUNBZ055d2dOeXdnTnl3Z055d2dOeXdnTnl3Z055d2dOeXdnTnl3Z055d2dOeXdnTnl3Z055d2dOeXdnTnl3Z055eGNiaUFnSUNBM0xDQTNMQ0EzTENBM0xDQTNMQ0EzTENBM0xDQTNMQ0EzTENBM0xDQTNMQ0EzTENBM0xDQTNMQ0EzTENBM1hTazdYRzVjYmlBZ2NISnBkbUYwWlNCZlpHRjBZVG9nVldsdWRETXlRWEp5WVhrN1hHNGdJSEJ5YVhaaGRHVWdYMnhsYm1kMGFDQTlJREE3WEc0Z0lIQnlhWFpoZEdVZ1gzWmxjbk5wYjI0Z1BTQXdPMXh1SUNCd2NtbDJZWFJsSUY5MWNHUmhkR1ZNWlhabGJDQTlJREE3WEc0Z0lIQnlhWFpoZEdVZ1gzTmxiR1ZqZEdWa1EyOTFiblFnUFNBd08xeHVJQ0J3Y21sMllYUmxJRjl6Wld4bFkzUmxaRU52ZFc1MFZtVnljMmx2YmlBOUlDMHhPMXh1SUNCd2NtbDJZWFJsSUY5elpXeGxZM1JsWkVsdVpHVjRaWE5XWlhKemFXOXVJRDBnTFRFN1hHNGdJSEJ5YVhaaGRHVWdYM1psY25OcGIyNWxaRTVoYldVZ1BTQW5KenRjYmlBZ2NISnBkbUYwWlNCZmRtVnljMmx2Ym1Wa1RtRnRaVlpsY25OcGIyNGdQU0F0TVR0Y2JpQWdVMGhTU1U1TFgxUklVa1ZUU0U5TVJDQTlJREI0TVRBd08xeHVYRzRnSUdOdmJuTjBjblZqZEc5eUtHUmhkR0U2SUZWcGJuUXpNa0Z5Y21GNUxDQnNaVzVuZEdnNklHNTFiV0psY2lsY2JpQWdZMjl1YzNSeWRXTjBiM0lvYkdWdVozUm9PaUJ1ZFcxaVpYSXNJR1JsWm1GMWJIUldZV3gxWlQ4NklHSnZiMnhsWVc0cFhHNGdJR052Ym5OMGNuVmpkRzl5S0dGeVp6b2diblZ0WW1WeUlId2dWV2x1ZERNeVFYSnlZWGtzSUdSbFptRjFiSFJXWVd4MVpUb2dZbTl2YkdWaGJpQjhJRzUxYldKbGNpQTlJR1poYkhObEtTQjdYRzRnSUNBZ2FXWWdLSFI1Y0dWdlppQmhjbWNnUFQwOUlDZHVkVzFpWlhJbktTQjdYRzRnSUNBZ0lDQmpiMjV6ZENCc1pXNW5kR2dnUFNCaGNtYzdYRzRnSUNBZ0lDQmpiMjV6ZENCaWRXWm1JRDBnUW1sMFFYSnlZWGt1WDJOeVpXRjBaVUoxWm1abGNpaHNaVzVuZEdncE8xeHVJQ0FnSUNBZ2FXWWdLR1JsWm1GMWJIUldZV3gxWlNrZ2UxeHVJQ0FnSUNBZ0lDQm1iM0lnS0d4bGRDQnBJRDBnTURzZ2FTQThJR0oxWm1ZdWJHVnVaM1JvT3lCcEt5c3BYRzRnSUNBZ0lDQWdJQ0FnWW5WbVpsdHBYU0E5SUMweE8xeHVJQ0FnSUNBZ2ZWeHVJQ0FnSUNBZ2RHaHBjeTVmWkdGMFlTQTlJR0oxWm1ZN1hHNGdJQ0FnSUNCMGFHbHpMbDlzWlc1bmRHZ2dQU0JzWlc1bmRHZzdYRzRnSUNBZ2ZTQmxiSE5sSUdsbUlDaGhjbWNnYVc1emRHRnVZMlZ2WmlCVmFXNTBNekpCY25KaGVTa2dlMXh1SUNBZ0lDQWdkR2hwY3k1ZlpHRjBZU0E5SUdGeVp5QmhjeUJWYVc1ME16SkJjbkpoZVR0Y2JpQWdJQ0FnSUhSb2FYTXVYMnhsYm1kMGFDQTlJR1JsWm1GMWJIUldZV3gxWlNCaGN5QnVkVzFpWlhJN1hHNGdJQ0FnZlNCbGJITmxJSHRjYmlBZ0lDQWdJSFJvY205M0lHNWxkeUJGY25KdmNpZ25TVzUyWVd4cFpDQmpiMjV6ZEhKMVkzUnZjaWNwTzF4dUlDQWdJSDFjYmlBZ2ZWeHVYRzVjYmlBZ1oyVjBVbUYzUkdGMFlTZ3BJSHNnY21WMGRYSnVJSFJvYVhNdVgyUmhkR0U3SUgxY2JseHVJQ0JoYzNOMWNtVkhiMlY2S0c1MWJUb2diblZ0WW1WeUxDQmhjbWRPWVcxbE9pQlRkSEpwYm1jcE9pQjJiMmxrSUh0Y2JpQWdJQ0JwWmlBb2JuVnRJRHdnTUNrZ2RHaHliM2NnYm1WM0lFVnljbTl5S0dBa2UyRnlaMDVoYldWOUlITm9iM1ZzWkNCaVpTQm5jbVZoZEdWeUlIUm9ZVzRnZW1WeWIyQXBPMXh1SUNCOVhHNWNiaUFnWVhOemRYSmxTVzVTWVc1blpTaDJZV3gxWlRvZ2JuVnRZbVZ5TENCdGFXNDZJRzUxYldKbGNpd2diV0Y0T2lCdWRXMWlaWElzSUdGeVowNWhiV1U2SUZOMGNtbHVaeWs2SUhadmFXUWdlMXh1SUNBZ0lHbG1JQ2dvZG1Gc2RXVWdQQ0J0YVc0cElIeDhJQ2gyWVd4MVpTQStJRzFoZUNrcFhHNGdJQ0FnSUNCMGFISnZkeUJ1WlhjZ1JYSnliM0lvWUVGeVozVnRaVzUwSUNSN1lYSm5UbUZ0WlgwZ0tDUjdkbUZzZFdWOUtTQnZkWFFnYjJZZ2NtRnVaMlVnS0NSN2JXbHVmU3dnSkh0dFlYaDlLV0FwTzF4dUlDQjlYRzVjYmlBZ1kyOXdlU2h6Y21NNklGVnBiblF6TWtGeWNtRjVMQ0JrYzNRNklGVnBiblF6TWtGeWNtRjVMQ0JqYjNWdWREb2diblZ0WW1WeUtUb2dkbTlwWkNCN1hHNGdJQ0FnWm05eUlDaHNaWFFnYVNBOUlEQTdJR2tnUENCamIzVnVkRHNnYVNzcktWeHVJQ0FnSUNBZ1pITjBXMmxkSUQwZ2MzSmpXMmxkTzF4dUlDQjlYRzVjYmlBZ1kyOXdlVVp5YjIwb2IzUm9aWEk2SUVKcGRFRnljbUY1S1RvZ2RtOXBaQ0I3WEc0Z0lDQWdhV1lnS0hSb2FYTXVYMnhsYm1kMGFDQWhQU0J2ZEdobGNpNWZiR1Z1WjNSb0tWeHVJQ0FnSUNBZ2RHaHliM2NnYm1WM0lFVnljbTl5S0dCTVpXNW5kR2h6SUdScFptWmxjaUFvSkh0MGFHbHpMbDlzWlc1bmRHaDlJQ0U5SUNSN2IzUm9aWEl1WDJ4bGJtZDBhSDBwWUNrN1hHNGdJQ0FnZEdocGN5NWpiM0I1S0c5MGFHVnlMbDlrWVhSaExDQjBhR2x6TGw5a1lYUmhMQ0IwYUdsekxteGxibWQwYUVsdVNXNTBjeWs3WEc0Z0lDQWdkR2hwY3k1ZmRtVnljMmx2Ymlzck8xeHVJQ0I5WEc1Y2JpQWdaMlYwSUd4bGJtZDBhQ2dwSUh0Y2JpQWdJQ0J5WlhSMWNtNGdkR2hwY3k1ZmJHVnVaM1JvTzF4dUlDQjlYRzVjYmlBZ1oyVjBJR0oxWm1abGNpZ3BJSHRjYmlBZ0lDQnlaWFIxY200Z2RHaHBjeTVmWkdGMFlUdGNiaUFnZlZ4dVhHNGdJSE5sZENCaWRXWm1aWElvWkdGMFlUb2dWV2x1ZERNeVFYSnlZWGtwSUh0Y2JpQWdJQ0IwYUdsekxsOWtZWFJoSUQwZ1pHRjBZVHRjYmlBZ0lDQjBhR2x6TGw5MlpYSnphVzl1S3lzN1hHNGdJSDFjYmx4dUlDQm5aWFFnZG1WeWMybHZiaWdwSUh0Y2JpQWdJQ0J5WlhSMWNtNGdkR2hwY3k1ZmRtVnljMmx2Ymp0Y2JpQWdmVnh1WEc0Z0lITmxkQ0IyWlhKemFXOXVLSFpoYkhWbE9pQnVkVzFpWlhJcElIdGNiaUFnSUNCMGFHbHpMbDkyWlhKemFXOXVJRDBnZG1Gc2RXVTdYRzRnSUgxY2JseHVJQ0JwYm1OeVpXMWxiblJXWlhKemFXOXVLRzV2ZEdsbWVTQTlJSFJ5ZFdVcE9pQjJiMmxrSUh0Y2JpQWdJQ0IwYUdsekxsOTJaWEp6YVc5dUt5czdYRzRnSUgxY2JseHVJQ0JuWlhRZ2JHVnVaM1JvU1c1SmJuUnpLQ2tnZTF4dUlDQWdJSEpsZEhWeWJpQk5ZWFJvTG1ac2IyOXlLQ2gwYUdsekxsOXNaVzVuZEdnZ0t5QXdlREZtS1NBdklEQjRNakFwTzF4dUlDQjlYRzVjYmlBZ1oyVjBJSFpsY25OcGIyNWxaRTVoYldVb0tTQjdYRzRnSUNBZ2NtVjBkWEp1SUhSb2FYTXVYM1psY25OcGIyNGdQVDBnZEdocGN5NWZkbVZ5YzJsdmJtVmtUbUZ0WlZabGNuTnBiMjRnUHlCMGFHbHpMbDkyWlhKemFXOXVaV1JPWVcxbElEb2dKeWM3WEc0Z0lIMWNibHh1SUNCelpYUWdkbVZ5YzJsdmJtVmtUbUZ0WlNodVlXMWxPaUJ6ZEhKcGJtY3BJSHRjYmlBZ0lDQjBhR2x6TGw5MlpYSnphVzl1WldST1lXMWxJRDBnYm1GdFpUdGNiaUFnSUNCMGFHbHpMbDkyWlhKemFXOXVaV1JPWVcxbFZtVnljMmx2YmlBOUlIUm9hWE11WDNabGNuTnBiMjQ3WEc0Z0lIMWNibHh1SUNCblpYUWdjMlZzWmlncElIdGNiaUFnSUNCeVpYUjFjbTRnZEdocGN6dGNiaUFnZlZ4dVhHNGdJSE5sZEV4bGJtZDBhQ2gyWVd4MVpUb2diblZ0WW1WeUtUb2dkbTlwWkNCN1hHNGdJQ0FnYVdZZ0tIWmhiSFZsSUR3Z01DbGNiaUFnSUNBZ0lIUm9jbTkzSUc1bGR5QkZjbkp2Y2lnbmMyaHZkV3hrSUdKbElENDlJREFuS1R0Y2JseHVJQ0FnSUdsbUlDaDJZV3gxWlNBOVBTQjBhR2x6TGw5c1pXNW5kR2dwSUhKbGRIVnlianRjYmlBZ0lDQmpiMjV6ZENCdVNXNTBjMDVsWldSbFpDQTlJRTFoZEdndVpteHZiM0lvS0haaGJIVmxJQ3NnTUhneFppa2dMeUF3ZURJd0tUdGNiaUFnSUNCcFppQW9LRzVKYm5SelRtVmxaR1ZrSUQ0Z2RHaHBjeTVmWkdGMFlTNXNaVzVuZEdncElIeDhJQ2dvYmtsdWRITk9aV1ZrWldRZ0t5QjBhR2x6TGxOSVVrbE9TMTlVU0ZKRlUwaFBURVFwSUR3Z2RHaHBjeTVmWkdGMFlTNXNaVzVuZEdncEtTQjdYRzRnSUNBZ0lDQmpiMjV6ZENCdVpYZEVZWFJoSUQwZ2JtVjNJRlZwYm5Rek1rRnljbUY1S0c1SmJuUnpUbVZsWkdWa0tUdGNiaUFnSUNBZ0lIUm9hWE11WTI5d2VTaDBhR2x6TGw5a1lYUmhMQ0J1WlhkRVlYUmhMQ0FvYmtsdWRITk9aV1ZrWldRZ1BpQjBhR2x6TGw5a1lYUmhMbXhsYm1kMGFDa2dQeUIwYUdsekxsOWtZWFJoTG14bGJtZDBhQ0E2SUc1SmJuUnpUbVZsWkdWa0tUdGNiaUFnSUNBZ0lIUm9hWE11WDJSaGRHRWdQU0J1WlhkRVlYUmhPMXh1SUNBZ0lIMWNibHh1SUNBZ0lHbG1JQ2gyWVd4MVpTQStJSFJvYVhNdVgyeGxibWQwYUNrZ2UxeHVJQ0FnSUNBZ2FXWWdLSFJvYVhNdVgyeGxibWQwYUNBbElEQjRNakFnUGlBd0tWeHVJQ0FnSUNBZ0lDQjBhR2x6TGw5a1lYUmhXM1JvYVhNdWJHVnVaM1JvU1c1SmJuUnpJQzBnTVYwZ0pqMGdLREVnUER3Z0tDaDBhR2x6TGw5c1pXNW5kR2dnSlNBd2VESXdLU0FtSURCNE1XWXBLU0F0SURFN1hHNWNiaUFnSUNBZ0lIUm9hWE11WDJSaGRHRXVabWxzYkNnd0xDQjBhR2x6TG14bGJtZDBhRWx1U1c1MGN5d2dia2x1ZEhOT1pXVmtaV1FwTzF4dUlDQWdJSDFjYmlBZ0lDQjBhR2x6TGw5c1pXNW5kR2dnUFNCMllXeDFaVHRjYmlBZ0lDQjBhR2x6TGw5MlpYSnphVzl1S3lzN1hHNGdJSDFjYmx4dUlDQnpkR0YwYVdNZ1puSnZiVUZ1WkNoelpYUXhPaUJDYVhSQmNuSmhlU3dnYzJWME1qb2dRbWwwUVhKeVlYa3BPaUJDYVhSQmNuSmhlU0I3WEc0Z0lDQWdhV1lnS0hObGRERXVYMnhsYm1kMGFDQWhQU0J6WlhReUxsOXNaVzVuZEdncFhHNGdJQ0FnSUNCMGFISnZkeUJ1WlhjZ1JYSnliM0lvWUV4bGJtZDBhSE1nWkdsbVptVnlJQ2drZTNObGRERXVYMnhsYm1kMGFIMGdJVDBnSkh0elpYUXlMbDlzWlc1bmRHaDlLV0FwTzF4dVhHNGdJQ0FnWTI5dWMzUWdkR1Z0Y0NBOUlHNWxkeUJDYVhSQmNuSmhlU2h6WlhReExsOXNaVzVuZEdncE8xeHVJQ0FnSUhSbGJYQXVYMnhsYm1kMGFDQTlJSE5sZERFdVgyeGxibWQwYUR0Y2JpQWdJQ0IwWlcxd0xsOWtZWFJoSUQwZ1FtbDBRWEp5WVhrdVgyTnlaV0YwWlVKMVptWmxjaWgwWlcxd0xsOXNaVzVuZEdncE8xeHVJQ0FnSUhSbGJYQXVYM1psY25OcGIyNGdQU0F3TzF4dVhHNGdJQ0FnWTI5dWMzUWdiR1Z1SUQwZ2MyVjBNUzVzWlc1bmRHaEpia2x1ZEhNN1hHNGdJQ0FnWm05eUlDaHNaWFFnYVNBOUlEQTdJR2tnUENCc1pXNDdJR2tyS3lsY2JpQWdJQ0FnSUhSbGJYQXVYMlJoZEdGYmFWMGdQU0J6WlhReExsOWtZWFJoVzJsZElDWWdjMlYwTWk1ZlpHRjBZVnRwWFR0Y2JseHVJQ0FnSUhKbGRIVnliaUIwWlcxd08xeHVJQ0I5WEc1Y2JpQWdjSEpwZG1GMFpTQnpkR0YwYVdNZ1gyTnlaV0YwWlVKMVptWmxjaWhzWlc1bmRHZzZJRzUxYldKbGNpazZJRlZwYm5Rek1rRnljbUY1SUh0Y2JpQWdJQ0J5WlhSMWNtNGdibVYzSUZWcGJuUXpNa0Z5Y21GNUtFMWhkR2d1Wm14dmIzSW9LR3hsYm1kMGFDQXJJREI0TVdZcElDOGdNSGd5TUNrcE8xeHVJQ0I5WEc1Y2JpQWdjM1JoZEdsaklHWnliMjFXWVd4MVpYTW9kbUZzZFdWek9pQkJjbkpoZVR4aWIyOXNaV0Z1UGlrNklFSnBkRUZ5Y21GNUlIdGNiaUFnSUNCamIyNXpkQ0IwWlcxd0lEMGdibVYzSUVKcGRFRnljbUY1S0haaGJIVmxjeTVzWlc1bmRHZ3BPMXh1SUNBZ0lIUmxiWEF1WDNabGNuTnBiMjRnUFNBd08xeHVYRzRnSUNBZ1ptOXlJQ2hzWlhRZ2FTQTlJREE3SUdrZ1BDQjBaVzF3TGw5c1pXNW5kR2c3SUdrckt5a2dlMXh1SUNBZ0lDQWdhV1lnS0haaGJIVmxjMXRwWFNsY2JpQWdJQ0FnSUNBZ2RHVnRjQzVmWkdGMFlWdE5ZWFJvTG1ac2IyOXlLR2tnTHlBd2VESXdLVjBnZkQwZ01TQThQQ0FvS0drZ0pTQXdlREl3S1NBbUlEQjRNV1lwTzF4dUlDQWdJSDFjYmlBZ0lDQnlaWFIxY200Z2RHVnRjRHRjYmlBZ2ZWeHVYRzRnSUM4dkx5QkRiMjV6ZEhKMVkzUnpJR0VnVzBKcGRGTmxkRjBnYjJZZ2JHVnVaM1JvSUZ0amIzVnVkRjBzSUhkb1pYSmxJR2xrZUMxMGFDQmlhWFFnYVhNZ1pHVjBaWEp0YVc1bFpDQmllU0JoSUdOaGJHd2dkRzhnVzJac1lXZGRJQ2hwWkhncExseHVJQ0J6ZEdGMGFXTWdabkp2YlZObGNTaGpiM1Z1ZERvZ2JuVnRZbVZ5TENCbWJHRm5PaUJHZFc1amRHbHZiaWs2SUVKcGRFRnljbUY1SUh0Y2JpQWdJQ0JqYjI1emRDQjBaVzF3SUQwZ2JtVjNJRUpwZEVGeWNtRjVLR052ZFc1MEtUdGNiaUFnSUNCbWIzSWdLR3hsZENCcElEMGdNRHNnYVNBOElHTnZkVzUwT3lBcksya3BYRzRnSUNBZ0lDQjBaVzF3TG5ObGRFSnBkQ2hwTENCbWJHRm5LR2twS1R0Y2JseHVJQ0FnSUhSbGJYQXVYM1psY25OcGIyNGdQU0F3TzF4dUlDQWdJSEpsZEhWeWJpQjBaVzF3TzF4dUlDQjlYRzVjYmlBZ0x5OHZJRU52Ym5OMGNuVmpkSE1nWVNCYlFtbDBVMlYwWFNCbWNtOXRJR0VnYzNSeWFXNW5JRnR6WFNCamIyNTBZV2x1YVc1bklDY3dKeUJ2Y2lBbk1TY3VYRzRnSUhOMFlYUnBZeUJtY205dFUzUnlhVzVuS0hNNklITjBjbWx1WnlrNklFSnBkRUZ5Y21GNUlIdGNiaUFnSUNCeVpYUjFjbTRnUW1sMFFYSnlZWGt1Wm5KdmJWTmxjU2h6TG14bGJtZDBhQ3dnS0drNklHNTFiV0psY2lrZ1BUNGdjeTVqYUdGeVFYUW9hU2tnUFQwZ0p6RW5LVHRjYmlBZ2ZWeHVYRzRnSUM4dkx5QkRiMjV6ZEhKMVkzUnpJR0VnVzBKcGRGTmxkRjBzSUdKaGMyVmtJRzl1SUd4bGJtZDBhQ0JiWDJ4bGJtZDBhRjBnWVc1a0lHSjVkR1VnWVhKeVlYa2dXMTlrWVhSaFhTNWNiaUFnYzNSaGRHbGpJR1p5YjIxVmFXNTBNekpCY25KaGVTaGZiR1Z1WjNSb09pQnVkVzFpWlhJc0lGOWtZWFJoT2lCVmFXNTBNekpCY25KaGVTazZJRUpwZEVGeWNtRjVJSHRjYmlBZ0lDQmpiMjV6ZENCMFpXMXdJRDBnYm1WM0lFSnBkRUZ5Y21GNUtGOXNaVzVuZEdncE8xeHVJQ0FnSUhSbGJYQXVYMlJoZEdFZ1BTQmZaR0YwWVR0Y2JpQWdJQ0J5WlhSMWNtNGdkR1Z0Y0R0Y2JpQWdmVnh1WEc0Z0lDOHZMeUJFWlhObGNtbGhiR2w2WlhNZ1lTQmJRbWwwVTJWMFhTQm1jbTl0SUZ0aWVYUmxjMTB1WEc0Z0lITjBZWFJwWXlCbWNtOXRRbmwwWlhNb1lubDBaWE02SUZWcGJuUTRRWEp5WVhrcE9pQkNhWFJCY25KaGVTQjdYRzRnSUNBZ1kyOXVjM1FnYkdWdUlEMGdZbmwwWlhNdWJHVnVaM1JvTzF4dUlDQWdJR052Ym5OMElIUmxiWEFnUFNCdVpYY2dRbWwwUVhKeVlYa29iR1Z1SUNvZ09DazdYRzRnSUNBZ2RHVnRjQzVmWkdGMFlTQTlJRzVsZHlCVmFXNTBNekpCY25KaGVTaE5ZWFJvTG1ac2IyOXlLQ2hzWlc0Z0t5QXpLU0F2SURRcEtUdGNiaUFnSUNCMFpXMXdMbDlzWlc1bmRHZ2dQU0JzWlc0Z0tpQTRPMXh1SUNBZ0lHeGxkQ0J1ZFcweElEMGdNRHRjYmlBZ0lDQnNaWFFnYm5WdE1pQTlJREE3WEc1Y2JpQWdJQ0IzYUdsc1pTQW9LR3hsYmlBdElHNTFiVElwSUQ0OUlEUXBJSHRjYmlBZ0lDQWdJSFJsYlhBdVgyUmhkR0ZiYm5WdE1Tc3JYU0E5SUNoY2JpQWdJQ0FnSUNBZ0tDaGllWFJsYzF0dWRXMHlYU0FtSURCNFptWXBJSHdnS0NoaWVYUmxjMXR1ZFcweUlDc2dNVjBnSmlBd2VHWm1LU0E4UENBNEtTa2dmRnh1SUNBZ0lDQWdJQ0FvS0dKNWRHVnpXMjUxYlRJZ0t5QXlYU0FtSURCNFptWXBJRHc4SURCNE1UQXBYRzRnSUNBZ0lDQXBJSHdnS0NoaWVYUmxjMXR1ZFcweUlDc2dNMTBnSmlBd2VHWm1LU0E4UENBd2VERTRLVHRjYmx4dUlDQWdJQ0FnYm5WdE1pQXJQU0EwTzF4dUlDQWdJSDFjYmx4dUlDQWdJR2xtSUNoc1pXNGdMU0J1ZFcweUlEMDlJRE1wWEc0Z0lDQWdJQ0IwWlcxd0xsOWtZWFJoVzI1MWJURmRJRDBnS0dKNWRHVnpXMjUxYlRJZ0t5QXlYU0FtSURCNFptWXBJRHc4SURCNE1UQTdYRzVjYmlBZ0lDQnBaaUFvYkdWdUlDMGdiblZ0TWlBOVBTQXlLVnh1SUNBZ0lDQWdkR1Z0Y0M1ZlpHRjBZVnR1ZFcweFhTQjhQU0FvWW5sMFpYTmJiblZ0TWlBcklERmRJQ1lnTUhobVppa2dQRHdnT0R0Y2JseHVJQ0FnSUdsbUlDaHNaVzRnTFNCdWRXMHlJRDA5SURFcFhHNGdJQ0FnSUNCMFpXMXdMbDlrWVhSaFcyNTFiVEZkSUh3OUlHSjVkR1Z6VzI1MWJUSmRJQ1lnTUhobVpqdGNibHh1SUNBZ0lIUmxiWEF1WDNabGNuTnBiMjRnUFNBd08xeHVJQ0FnSUhKbGRIVnliaUIwWlcxd08xeHVJQ0I5WEc1Y2JpQWdkRzlUZEhKcGJtY29LVG9nYzNSeWFXNW5JSHRjYmlBZ0lDQnlaWFIxY200Z1lDUjdkR2hwY3k1ZmJHVnVaM1JvZlNCaWFYUnpMQ0FrZTNSb2FYTXVZMjkxYm5SQ2FYUnpLSFJ5ZFdVcGZTQnpaWFJnTzF4dUlDQjlYRzVjYmlBZ0x5OHZJRkJsY21admNtMXpJR1JsWlhBZ1kyOXRjR0Z5YVhOdmJpQnZaaUIwZDI4Z1ltbDBjMlYwY3k1Y2JpQWdaWEYxWVd4ektHOTBhR1Z5T2lCQ2FYUkJjbkpoZVNrNklHSnZiMnhsWVc0Z2UxeHVJQ0FnSUdsbUlDaDBhR2x6SUQwOUlHOTBhR1Z5S1NCeVpYUjFjbTRnZEhKMVpUdGNiaUFnSUNCcFppQW9iM1JvWlhJZ1BUMGdiblZzYkNrZ2NtVjBkWEp1SUdaaGJITmxPMXh1SUNBZ0lHbG1JQ2gwYUdsekxsOXNaVzVuZEdnZ0lUMGdiM1JvWlhJdVgyeGxibWQwYUNrZ2NtVjBkWEp1SUdaaGJITmxPMXh1SUNBZ0lHbG1JQ2gwYUdsekxsOXNaVzVuZEdnZ1BUMGdNQ2tnY21WMGRYSnVJSFJ5ZFdVN1hHNWNiaUFnSUNCbWIzSWdLR3hsZENCcElEMGdNRHNnYVNBOElIUm9hWE11WDJSaGRHRXViR1Z1WjNSb0lDMGdNVHNnYVNzcktWeHVJQ0FnSUNBZ2FXWWdLSFJvYVhNdVgyUmhkR0ZiYVYwZ0lUMGdiM1JvWlhJdVgyUmhkR0ZiYVYwcElISmxkSFZ5YmlCbVlXeHpaVHRjYmx4dUlDQWdJR1p2Y2lBb2JHVjBJR2tnUFNBb2RHaHBjeTVmWkdGMFlTNXNaVzVuZEdnZ0xTQXhLU0FxSURnN0lHa2dQQ0IwYUdsekxsOXNaVzVuZEdnN0lHa3JLeWtnZTF4dUlDQWdJQ0FnYVdZZ0tIUm9hWE11WjJWMFFtbDBLR2twSUNFOUlHOTBhR1Z5TG1kbGRFSnBkQ2hwS1NsY2JpQWdJQ0FnSUNBZ2NtVjBkWEp1SUdaaGJITmxPMXh1SUNBZ0lIMWNiaUFnSUNCeVpYUjFjbTRnZEhKMVpUdGNiaUFnZlZ4dVhHNGdJQzhxS2lCRGJHOXVaWE1nWVNCaWFYUnpaWFF1SUNvdlhHNGdJR05zYjI1bEtDazZJRUpwZEVGeWNtRjVJSHRjYmlBZ0lDQmpiMjV6ZENCaWFYUkJjbkpoZVNBOUlHNWxkeUJDYVhSQmNuSmhlU2d3TENCbVlXeHpaU2s3WEc0Z0lDQWdZbWwwUVhKeVlYa3VYMlJoZEdFZ1BTQlZhVzUwTXpKQmNuSmhlUzVtY205dEtIUm9hWE11WDJSaGRHRXBPeUF2THlCbFptWmxZM1JwZG1VZ2JHVnVaM1JvT2lBb2JHVnVaM1JvU1c1SmJuUnpLVnh1SUNBZ0lHSnBkRUZ5Y21GNUxsOXNaVzVuZEdnZ1BTQjBhR2x6TGw5c1pXNW5kR2c3WEc0Z0lDQWdZbWwwUVhKeVlYa3VYM1psY25OcGIyNGdQU0IwYUdsekxsOTJaWEp6YVc5dU8xeHVJQ0FnSUhKbGRIVnliaUJpYVhSQmNuSmhlVHRjYmlBZ2ZWeHVYRzRnSUM4cUtpQkpibWwwYVdGc2FYcGxjeUJoSUdKcGRITmxkQzRnS2k5Y2JpQWdhVzVwZENobWJHRm5PaUJHZFc1amRHbHZiaXdnYm05MGFXWjVPaUJpYjI5c1pXRnVLVG9nUW1sMFFYSnlZWGtnZTF4dUlDQWdJSFJvYVhNdWMyVjBRV3hzS0daaGJITmxMQ0JtWVd4elpTazdYRzVjYmlBZ0lDQm1iM0lnS0d4bGRDQnBJRDBnTURzZ2FTQThJSFJvYVhNdVgyeGxibWQwYURzZ2FTc3JLU0I3WEc0Z0lDQWdJQ0JwWmlBb1pteGhaeWhwS1NsY2JpQWdJQ0FnSUNBZ2RHaHBjeTVmWkdGMFlWdE5ZWFJvTG1ac2IyOXlLR2tnTHlBd2VESXdLVjBnZkQwZ01TQThQQ0FvS0drZ0pTQXdlREl3S1NBbUlEQjRNV1lwTzF4dUlDQWdJSDFjYmx4dUlDQWdJSFJvYVhNdWFXNWpjbVZ0Wlc1MFZtVnljMmx2YmlodWIzUnBabmtwTzF4dUlDQWdJSEpsZEhWeWJpQjBhR2x6TzF4dUlDQjlYRzVjYmlBZ0x5OHZJRWx1ZG1WeWRITWdZU0JpYVhSelpYUXVYRzRnSUdsdWRtVnlkQ2h1YjNScFpua2dQU0IwY25WbEtUb2dkbTlwWkNCN1hHNGdJQ0FnWm05eUlDaHNaWFFnYVNBOUlEQTdJR2tnUENCMGFHbHpMbDlrWVhSaExteGxibWQwYURzZ2FTc3JLVnh1SUNBZ0lDQWdkR2hwY3k1ZlpHRjBZVnRwWFNCZVBTQXRNVHRjYmx4dUlDQWdJSFJvYVhNdWFXNWpjbVZ0Wlc1MFZtVnljMmx2YmlodWIzUnBabmtwTzF4dUlDQjlYRzVjYmlBZ0x5OHZJRk5sZEhNZ1lXeHNJR0pwZEhNZ2RHOGdXM1poYkhWbFhTd2diM0IwYVc5dVlXeHNlU0J6ZFhCd2NtVnpjMmx1WnlCdWIzUnBabWxqWVhScGIyNXpMbHh1SUNCelpYUkJiR3dvZG1Gc2RXVTZJR0p2YjJ4bFlXNHNJRzV2ZEdsbWVTQTlJR1poYkhObEtUb2dkbTlwWkNCN1hHNGdJQ0FnWTI5dWMzUWdabXhoWjNNZ1BTQjJZV3gxWlNBL0lDMHhJRG9nTUR0Y2JpQWdJQ0JqYjI1emRDQnNaVzRnUFNCMGFHbHpMbXhsYm1kMGFFbHVTVzUwY3p0Y2JseHVJQ0FnSUdadmNpQW9iR1YwSUdrZ1BTQXdPeUJwSUR3Z2JHVnVPeUJwS3lzcElDOHZkRzlrYnpvZ2IzQjBhVzFwZW1WY2JpQWdJQ0FnSUhSb2FYTXVYMlJoZEdGYmFWMGdQU0JtYkdGbmN6dGNibHh1SUNBZ0lIUm9hWE11YVc1amNtVnRaVzUwVm1WeWMybHZiaWh1YjNScFpua3BPMXh1SUNCOVhHNWNiaUFnTHk4dklGTmxkSE1nWW1sMGN5QmhkQ0JiYVc1a1pYaGxjMTBnY0c5emFYUnBiMjRnZEc4Z1czWmhiSFZsWFM1Y2JpQWdMeTh2SUVOc1pXRnljeUIwYUdVZ1ltbDBjMlYwSUdsbUlGdGpiR1ZoY2wwZ1pteGhaeUJwY3lCMGNuVmxMbHh1SUNBdkx5OGdRMmhoYm1kbElHNXZkR2xtYVdOaGRHbHZiaUJwY3lCeVlXbHpaV1FnZDJobGJpQmJibTkwYVdaNVhTQnBjeUIwY25WbExseHVJQ0J6WlhSSmJtUmxlR1Z6S0dsdVpHVjRaWE02SUVGeWNtRjVQRzUxYldKbGNqNHNJSFpoYkhWbElEMGdkSEoxWlN3Z1kyeGxZWElnUFNCMGNuVmxMQ0J1YjNScFpua2dQU0IwY25WbEtUb2dkbTlwWkNCN1hHNGdJQ0FnYVdZZ0tHTnNaV0Z5S1Z4dUlDQWdJQ0FnZEdocGN5NXpaWFJCYkd3b0lYWmhiSFZsTENCbVlXeHpaU2s3WEc1Y2JpQWdJQ0JtYjNJZ0tHTnZibk4wSUdrZ2IyWWdhVzVrWlhobGN5bGNiaUFnSUNBZ0lIUm9hWE11YzJWMFJtRnpkQ2hwTENCMllXeDFaU2s3WEc1Y2JpQWdJQ0IwYUdsekxtbHVZM0psYldWdWRGWmxjbk5wYjI0b2JtOTBhV1o1S1R0Y2JpQWdmVnh1WEc0Z0lHVjJaWEo1U1c1a1pYZ29hVzVrWlhobGN6b2dRWEp5WVhrOGJuVnRZbVZ5UGl3Z2RtRnNkV1VnUFNCMGNuVmxLVG9nWW05dmJHVmhiaUI3WEc0Z0lDQWdabTl5SUNoamIyNXpkQ0JwYm1SbGVDQnZaaUJwYm1SbGVHVnpLU0I3WEc0Z0lDQWdJQ0JwWmlBb2RHaHBjeTVuWlhSQ2FYUW9hVzVrWlhncElDRTlJSFpoYkhWbEtWeHVJQ0FnSUNBZ0lDQnlaWFIxY200Z1ptRnNjMlU3WEc0Z0lDQWdmVnh1SUNBZ0lISmxkSFZ5YmlCMGNuVmxPMXh1SUNCOVhHNWNiaUFnWVc1NVNXNWtaWGdvYVc1a1pYaGxjem9nUVhKeVlYazhiblZ0WW1WeVBpd2dkbUZzZFdVZ1BTQjBjblZsS1RvZ1ltOXZiR1ZoYmlCN1hHNGdJQ0FnWm05eUlDaGpiMjV6ZENCcGJtUmxlQ0J2WmlCcGJtUmxlR1Z6S1NCN1hHNGdJQ0FnSUNCcFppQW9kR2hwY3k1blpYUkNhWFFvYVc1a1pYZ3BJRDA5SUhaaGJIVmxLVnh1SUNBZ0lDQWdJQ0J5WlhSMWNtNGdkSEoxWlR0Y2JpQWdJQ0I5WEc0Z0lDQWdjbVYwZFhKdUlHWmhiSE5sTzF4dUlDQjlYRzVjYmlBZ2MyVjBWMmhsY21Vb1kyaGxZMnM2SUVaMWJtTjBhVzl1TENCMllXeDFaU0E5SUhSeWRXVXNJR05zWldGeUlEMGdkSEoxWlN3Z2JtOTBhV1o1SUQwZ2RISjFaU3dnWVd4c2IzZERiR1ZoY2lBOUlIUnlkV1VwT2lCMmIybGtJSHRjYmlBZ0lDQnBaaUFvWTJ4bFlYSWdKaVlnWVd4c2IzZERiR1ZoY2lsY2JpQWdJQ0FnSUhSb2FYTXVjMlYwUVd4c0tDRjJZV3gxWlN3Z1ptRnNjMlVwTzF4dVhHNGdJQ0FnYVdZZ0tHRnNiRzkzUTJ4bFlYSXBJSHRjYmlBZ0lDQWdJR1p2Y2lBb2JHVjBJR2tnUFNBd095QnBJRHdnZEdocGN5NWZiR1Z1WjNSb095QnBLeXNwSUh0Y2JpQWdJQ0FnSUNBZ2FXWWdLR05vWldOcktHa3BLVnh1SUNBZ0lDQWdJQ0FnSUhSb2FYTXVjMlYwUm1GemRDaHBMQ0IyWVd4MVpTazdYRzRnSUNBZ0lDQjlYRzRnSUNBZ2ZTQmxiSE5sSUh0Y2JpQWdJQ0FnSUdadmNpQW9iR1YwSUdrZ1BTQXdPeUJwSUR3Z2RHaHBjeTVmYkdWdVozUm9PeUJwS3lzcFhHNGdJQ0FnSUNBZ0lIUm9hWE11YzJWMFJtRnpkQ2hwTENCamFHVmpheWhwS1NBL0lIWmhiSFZsSURvZ0lYWmhiSFZsS1R0Y2JpQWdJQ0I5WEc1Y2JpQWdJQ0IwYUdsekxtbHVZM0psYldWdWRGWmxjbk5wYjI0b2JtOTBhV1o1S1R0Y2JpQWdmVnh1WEc0Z0lHZGxkRkpoYm1kbEtHWnliMjA2SUc1MWJXSmxjaXdnZEc4NklHNTFiV0psY2lrNklFSnBkRUZ5Y21GNUlIdGNiaUFnSUNCMGFHbHpMbUZ6YzNWeVpVbHVVbUZ1WjJVb1puSnZiU3dnTUN3Z2RHaHBjeTVmYkdWdVozUm9JQzBnTVN3Z0oyWnliMjBuS1R0Y2JpQWdJQ0IwYUdsekxtRnpjM1Z5WlVsdVVtRnVaMlVvZEc4c0lEQXNJSFJvYVhNdVgyeGxibWQwYUN3Z0ozUnZKeWs3WEc0Z0lDQWdZMjl1YzNRZ1lYSnlPaUJCY25KaGVUeGliMjlzWldGdVBpQTlJRnRkTzF4dUlDQWdJR1p2Y2lBb2JHVjBJR2tnUFNCbWNtOXRPeUJwSUR3Z2RHODdJQ3NyYVNsY2JpQWdJQ0FnSUdGeWNpNXdkWE5vS0hSb2FYTXVaMlYwUW1sMEtHa3BLVHRjYmlBZ0lDQnlaWFIxY200Z1FtbDBRWEp5WVhrdVpuSnZiVlpoYkhWbGN5aGhjbklwTzF4dUlDQjlYRzVjYmlBZ1oyVjBVbUZ1WjJWQmMweHBjM1FvWm5KdmJUb2diblZ0WW1WeUxDQjBiem9nYm5WdFltVnlLVG9nWW05dmJHVmhibHRkSUh0Y2JpQWdJQ0IwYUdsekxtRnpjM1Z5WlVsdVVtRnVaMlVvWm5KdmJTd2dNQ3dnZEdocGN5NWZiR1Z1WjNSb0lDMGdNU3dnSjJaeWIyMG5LVHRjYmlBZ0lDQjBhR2x6TG1GemMzVnlaVWx1VW1GdVoyVW9kRzhzSURBc0lIUm9hWE11WDJ4bGJtZDBhQ3dnSjNSdkp5azdYRzRnSUNBZ1kyOXVjM1FnWVhKeU9pQmliMjlzWldGdVcxMGdQU0JiWFR0Y2JpQWdJQ0JtYjNJZ0tHeGxkQ0JwSUQwZ1puSnZiVHNnYVNBOElIUnZPeUFySzJrcFhHNGdJQ0FnSUNCaGNuSXVjSFZ6YUNoMGFHbHpMbWRsZEVKcGRDaHBLU2s3WEc0Z0lDQWdjbVYwZFhKdUlHRnljanRjYmlBZ2ZWeHVYRzVjYmlBZ2MyVjBVbUZ1WjJVb1puSnZiVG9nYm5WdFltVnlMQ0IwYnpvZ2JuVnRZbVZ5TENCMllXeDFaVG9nWW05dmJHVmhiaXdnYm05MGFXWjVJRDBnZEhKMVpTazZJRUpwZEVGeWNtRjVJSHRjYmlBZ0lDQjBhR2x6TG1GemMzVnlaVWx1VW1GdVoyVW9abkp2YlN3Z01Dd2dkR2hwY3k1ZmJHVnVaM1JvSUMwZ01Td2dKMlp5YjIwbktUdGNiaUFnSUNCMGFHbHpMbUZ6YzNWeVpVbHVVbUZ1WjJVb2RHOHNJREFzSUhSb2FYTXVYMnhsYm1kMGFDQXRJREVzSUNkMGJ5Y3BPMXh1WEc0Z0lDQWdZMjl1YzNRZ2MzUmhjblFnUFNCTllYUm9MbTFwYmlobWNtOXRMQ0IwYnlrN1hHNGdJQ0FnWTI5dWMzUWdaVzVrSUQwZ1RXRjBhQzV0WVhnb1puSnZiU3dnZEc4cE8xeHVYRzRnSUNBZ0x5OTBiMlJ2T2lCdmNIUnBiV2w2WlZ4dUlDQWdJR2xtSUNoMllXeDFaU2tnZTF4dUlDQWdJQ0FnWm05eUlDaHNaWFFnYVNBOUlITjBZWEowT3lCcElEdzlJR1Z1WkRzZ2FTc3JLVnh1SUNBZ0lDQWdJQ0IwYUdsekxuTmxkRlJ5ZFdVb2FTazdYRzRnSUNBZ2ZTQmxiSE5sSUh0Y2JpQWdJQ0FnSUdadmNpQW9iR1YwSUdrZ1BTQnpkR0Z5ZERzZ2FTQThQU0JsYm1RN0lHa3JLeWxjYmlBZ0lDQWdJQ0FnZEdocGN5NXpaWFJHWVd4elpTaHBLVHRjYmlBZ0lDQjlYRzVjYmlBZ0lDQjBhR2x6TG1sdVkzSmxiV1Z1ZEZabGNuTnBiMjRvYm05MGFXWjVLVHRjYmlBZ0lDQnlaWFIxY200Z2RHaHBjenRjYmlBZ2ZWeHVYRzRnSUM4dkx5QlRaWFJ6SUc0Z2NtRnVaRzl0YkhrZ1kyaHZjMlZ1SUdKcGRITWdkRzhnZG1Gc2RXVXNJSEpsYldGcGJtbHVaeUJpYVhSeklIUnZJQ0YyWVd4MVpTNWNiaUFnYzJWMFVtRnVaRzl0S0c0NklHNTFiV0psY2l3Z2RtRnNkV1U2SUdKdmIyeGxZVzRzSUc1dmRHbG1lU0E5SUhSeWRXVXBPaUIyYjJsa0lIdGNiaUFnSUNCcFppQW9iaUE4SURBZ2ZId2diaUErSUhSb2FYTXVYMnhsYm1kMGFDbGNiaUFnSUNBZ0lIUm9jbTkzSUc1bGR5QkZjbkp2Y2lnbmJpQnRkWE4wSUdKbElENDlJREFnSmlZZ1BEMGdRMjkxYm5RbktUdGNibHh1SUNBZ0lHbG1JQ2h1SUQ0Z2RHaHBjeTVmYkdWdVozUm9JQzhnTWlsY2JpQWdJQ0FnSUhSb2FYTXVjMlYwVW1GdVpHOXRLSFJvYVhNdVgyeGxibWQwYUNBdElHNHNJQ0YyWVd4MVpTazdYRzVjYmlBZ0lDQjBhR2x6TG5ObGRFRnNiQ2doZG1Gc2RXVXBPMXh1WEc0Z0lDQWdabTl5SUNoc1pYUWdheUE5SURBN0lHc2dQQ0J1T3lrZ2UxeHVJQ0FnSUNBZ1kyOXVjM1FnYVNBOUlFMWhkR2d1Wm14dmIzSW9UV0YwYUM1eVlXNWtiMjBvS1NBcUlIUm9hWE11WDJ4bGJtZDBhQ2s3WEc0Z0lDQWdJQ0JwWmlBb2RHaHBjeTVuWlhSQ2FYUW9hU2tnUFQwZ2RtRnNkV1VwSUdOdmJuUnBiblZsTzF4dUlDQWdJQ0FnZEdocGN5NXpaWFJHWVhOMEtHa3NJSFpoYkhWbEtUdGNiaUFnSUNBZ0lHc3JLenRjYmlBZ0lDQjlYRzVjYmlBZ0lDQjBhR2x6TG1sdVkzSmxiV1Z1ZEZabGNuTnBiMjRvYm05MGFXWjVLVHRjYmlBZ2ZWeHVYRzRnSUM4dkx5Qk5iMlJwWm1sbGN5QmpkWEp5Wlc1MElHSnBkSE5sZENCaWVTQndaWEptYjNKdGFXNW5JSFJvWlNCaWFYUjNhWE5sSUVGT1JDQnZjR1Z5WVhScGIyNGdZV2RoYVc1emRDQjBhR1ZjYmlBZ0x5OHZJR052Y25KbGMzQnZibVJwYm1jZ1pXeGxiV1Z1ZEhNZ2FXNGdkR2hsSUhOd1pXTnBabWxsWkNCaWFYUnpaWFF1WEc0Z0lHRnVaQ2gyWVd4MVpUb2dRbWwwUVhKeVlYa3NJRzV2ZEdsbWVTQTlJSFJ5ZFdVcE9pQkNhWFJCY25KaGVTQjdYRzRnSUNBZ2FXWWdLSFJvYVhNdVgyeGxibWQwYUNBaFBTQjJZV3gxWlM1ZmJHVnVaM1JvS1Z4dUlDQWdJQ0FnZEdoeWIzY2dibVYzSUVWeWNtOXlLQ2RCY25KaGVTQnNaVzVuZEdoeklHUnBabVpsY2k0bktUdGNibHh1SUNBZ0lHWnZjaUFvYkdWMElHa2dQU0F3TENCc1pXNGdQU0IwYUdsekxteGxibWQwYUVsdVNXNTBjenNnYVNBOElHeGxianNnYVNzcktWeHVJQ0FnSUNBZ2RHaHBjeTVmWkdGMFlWdHBYU0FtUFNCMllXeDFaUzVmWkdGMFlWdHBYVHRjYmx4dUlDQWdJSFJvYVhNdWFXNWpjbVZ0Wlc1MFZtVnljMmx2YmlodWIzUnBabmtwTzF4dUlDQWdJSEpsZEhWeWJpQjBhR2x6TzF4dUlDQjlYRzVjYmlBZ0x5OHZJRkJsY21admNtMXpJSFJvWlNCaWFYUjNhWE5sSUVGT1JDQk9UMVFnYjNCbGNtRjBhVzl1SUc5dUlIUm9aU0JsYkdWdFpXNTBjeUJwYmlCMGFHVWdZM1Z5Y21WdWRDQmlhWFJ6WlhSY2JpQWdMeTh2SUdGbllXbHVjM1FnZEdobElHTnZjbkpsYzNCdmJtUnBibWNnWld4bGJXVnVkSE1nYVc0Z2RHaGxJSE53WldOcFptbGxaQ0JpYVhSelpYUXVYRzRnSUdGdVpFNXZkQ2gyWVd4MVpUb2dRbWwwUVhKeVlYa3NJRzV2ZEdsbWVTQTlJSFJ5ZFdVcE9pQkNhWFJCY25KaGVTQjdYRzRnSUNBZ2FXWWdLSFJvYVhNdVgyeGxibWQwYUNBaFBTQjJZV3gxWlM1ZmJHVnVaM1JvS1Z4dUlDQWdJQ0FnZEdoeWIzY2dibVYzSUVWeWNtOXlLQ2RCY25KaGVTQnNaVzVuZEdoeklHUnBabVpsY2k0bktUdGNibHh1SUNBZ0lHTnZibk4wSUd4bGJpQTlJSFJvYVhNdWJHVnVaM1JvU1c1SmJuUnpPMXh1SUNBZ0lHWnZjaUFvYkdWMElHNTFiVElnUFNBd095QnVkVzB5SUR3Z2JHVnVPeUJ1ZFcweUt5c3BYRzRnSUNBZ0lDQjBhR2x6TGw5a1lYUmhXMjUxYlRKZElDWTlJSDUyWVd4MVpTNWZaR0YwWVZ0dWRXMHlYVHRjYmx4dUlDQWdJSFJvYVhNdWFXNWpjbVZ0Wlc1MFZtVnljMmx2YmlodWIzUnBabmtwTzF4dUlDQWdJSEpsZEhWeWJpQjBhR2x6TzF4dUlDQjlYRzVjYmlBZ0x5OHZJRkJsY21admNtMXpJSFJvWlNCaWFYUjNhWE5sSUU1UFZDQkJUa1FnYjNCbGNtRjBhVzl1SUc5dUlIUm9aU0JsYkdWdFpXNTBjeUJwYmlCMGFHVWdZM1Z5Y21WdWRDQmlhWFJ6WlhSY2JpQWdMeTh2SUdGbllXbHVjM1FnZEdobElHTnZjbkpsYzNCdmJtUnBibWNnWld4bGJXVnVkSE1nYVc0Z2RHaGxJSE53WldOcFptbGxaQ0JpYVhSelpYUXVYRzRnSUc1dmRFRnVaQ2gyWVd4MVpUb2dRbWwwUVhKeVlYa3NJRzV2ZEdsbWVTQTlJSFJ5ZFdVcE9pQkNhWFJCY25KaGVTQjdYRzRnSUNBZ2FXWWdLSFJvYVhNdVgyeGxibWQwYUNBaFBTQjJZV3gxWlM1ZmJHVnVaM1JvS1Z4dUlDQWdJQ0FnZEdoeWIzY2dibVYzSUVWeWNtOXlLQ2RCY25KaGVTQnNaVzVuZEdoeklHUnBabVpsY2k0bktUdGNibHh1SUNBZ0lHWnZjaUFvYkdWMElHa2dQU0F3TENCc1pXNGdQU0IwYUdsekxteGxibWQwYUVsdVNXNTBjenNnYVNBOElHeGxianNnYVNzcktWeHVJQ0FnSUNBZ2RHaHBjeTVmWkdGMFlWdHBYU0E5SUNoK2RHaHBjeTVmWkdGMFlWdHBYU2tnSmlCMllXeDFaUzVmWkdGMFlWdHBYVHRjYmx4dUlDQWdJSFJvYVhNdWFXNWpjbVZ0Wlc1MFZtVnljMmx2YmlodWIzUnBabmtwTzF4dUlDQWdJSEpsZEhWeWJpQjBhR2x6TzF4dUlDQjlYRzVjYmlBZ0x5OHZJRWx1ZG1WeWRITWdZV3hzSUdKcGRDQjJZV3gxWlhNZ2FXNGdkR2hsSUdOMWNuSmxiblFnWW1sMGMyVjBYRzRnSUc1dmRDaHViM1JwWm5rZ1BTQjBjblZsS1RvZ1FtbDBRWEp5WVhrZ2UxeHVJQ0FnSUdadmNpQW9iR1YwSUdrZ1BTQXdMQ0JzWlc0Z1BTQjBhR2x6TG14bGJtZDBhRWx1U1c1MGN6c2dhU0E4SUd4bGJqc2dhU3NyS1Z4dUlDQWdJQ0FnZEdocGN5NWZaR0YwWVZ0cFhTQTlJSDUwYUdsekxsOWtZWFJoVzJsZE8xeHVYRzRnSUNBZ2RHaHBjeTVwYm1OeVpXMWxiblJXWlhKemFXOXVLRzV2ZEdsbWVTazdYRzRnSUNBZ2NtVjBkWEp1SUhSb2FYTTdYRzRnSUgxY2JseHVJQ0F2THk4Z1VHVnlabTl5YlhNZ2RHaGxJR0pwZEhkcGMyVWdUMUlnYjNCbGNtRjBhVzl1SUc5dUlIUm9aU0JsYkdWdFpXNTBjeUJwYmlCMGFHVWdZM1Z5Y21WdWRDQmlhWFJ6WlhSY2JpQWdMeTh2SUdGbllXbHVjM1FnZEdobElHTnZjbkpsYzNCdmJtUnBibWNnWld4bGJXVnVkSE1nYVc0Z2RHaGxJSE53WldOcFptbGxaQ0JpYVhSelpYUXVYRzRnSUc5eUtIWmhiSFZsT2lCQ2FYUkJjbkpoZVN3Z2JtOTBhV1o1SUQwZ2RISjFaU2tnZTF4dUlDQWdJR2xtSUNoMGFHbHpMbDlzWlc1bmRHZ2dJVDBnZG1Gc2RXVXVYMnhsYm1kMGFDbGNiaUFnSUNBZ0lIUm9jbTkzSUc1bGR5QkZjbkp2Y2lnblFYSnlZWGtnYkdWdVozUm9jeUJrYVdabVpYSXVKeWs3WEc1Y2JpQWdJQ0JtYjNJZ0tHeGxkQ0JwSUQwZ01Dd2diR1Z1SUQwZ2RHaHBjeTVzWlc1bmRHaEpia2x1ZEhNN0lHa2dQQ0JzWlc0N0lHa3JLeWxjYmlBZ0lDQWdJSFJvYVhNdVgyUmhkR0ZiYVYwZ2ZEMGdkbUZzZFdVdVgyUmhkR0ZiYVYwN1hHNWNiaUFnSUNCMGFHbHpMbWx1WTNKbGJXVnVkRlpsY25OcGIyNG9ibTkwYVdaNUtUdGNiaUFnSUNCeVpYUjFjbTRnZEdocGN6dGNiaUFnZlZ4dVhHNGdJQzh2THlCUVpYSm1iM0p0Y3lCMGFHVWdZbWwwZDJselpTQmxlR05zZFhOcGRtVWdUMUlnYjNCbGNtRjBhVzl1SUc5dUlIUm9aU0JsYkdWdFpXNTBjeUJwYmlCMGFHVWdZM1Z5Y21WdWRDQmlhWFJ6WlhSY2JpQWdMeTh2SUdGbllXbHVjM1FnZEdobElHTnZjbkpsYzNCdmJtUnBibWNnWld4bGJXVnVkSE1nYVc0Z2RHaGxJSE53WldOcFptbGxaQ0JpYVhSelpYUXVYRzRnSUhodmNpaDJZV3gxWlRvZ1FtbDBRWEp5WVhrc0lHNXZkR2xtZVNBOUlIUnlkV1VwSUh0Y2JpQWdJQ0JwWmlBb2RHaHBjeTVmYkdWdVozUm9JQ0U5SUhaaGJIVmxMbDlzWlc1bmRHZ3BYRzRnSUNBZ0lDQjBhSEp2ZHlCdVpYY2dSWEp5YjNJb0owRnljbUY1SUd4bGJtZDBhSE1nWkdsbVptVnlMaWNwTzF4dVhHNGdJQ0FnWm05eUlDaHNaWFFnYVNBOUlEQXNJR3hsYmlBOUlIUm9hWE11YkdWdVozUm9TVzVKYm5Sek95QnBJRHdnYkdWdU95QnBLeXNwWEc0Z0lDQWdJQ0IwYUdsekxsOWtZWFJoVzJsZElGNDlJSFpoYkhWbExsOWtZWFJoVzJsZE8xeHVYRzRnSUNBZ2RHaHBjeTVwYm1OeVpXMWxiblJXWlhKemFXOXVLRzV2ZEdsbWVTazdYRzRnSUNBZ2NtVjBkWEp1SUhSb2FYTTdYRzRnSUgxY2JseHVJQ0F2THk4Z1NXNXpaWEowY3lCdUlEQXRZbWwwY3lCaGRDQndiM05wZEdsdmJpQndiM01zSUhKbGMybDZhVzVuSUhObGJHWWdZVzVrSUhOb2FXWjBhVzVuSUdKcGRITWdZWEJ3Y205d2NtbGhkR1ZzZVM1Y2JpQWdhVzV6WlhKMFFYUW9jRzl6T2lCdWRXMWlaWElzSUc0NklHNTFiV0psY2l3Z1pteGhaeUE5SUdaaGJITmxLVG9nZG05cFpDQjdYRzRnSUNBZ2RHaHBjeTVoYzNOMWNtVkpibEpoYm1kbEtIQnZjeXdnTUN3Z2RHaHBjeTVmYkdWdVozUm9MQ0FuY0c5ekp5azdYRzVjYmlBZ0lDQnBaaUFvYmlBOVBTQXdLU0J5WlhSMWNtNDdYRzVjYmlBZ0lDQXZMMVJQUkU4NklHOXdkR2x0YVhwbFhHNGdJQ0FnTHk5MGFHVWdiVzl6ZENCd2NtbHRhWFJwZG1VZ2FXMXdiR1Z0Wlc1MFlYUnBiMjRzSUc5d2RHbHRhWHBsSUdsMElHeGhkR1Z5SVZ4dVhHNGdJQ0FnTHk4Z1ltVm5hVzVWY0dSaGRHVW9LVHRjYmlBZ0lDQmpiMjV6ZENCdmJHUnNaVzVuZEdnZ1BTQjBhR2x6TGw5c1pXNW5kR2c3WEc0Z0lDQWdkR2hwY3k1elpYUk1aVzVuZEdnb2RHaHBjeTVmYkdWdVozUm9JQ3NnYmlrN1hHNWNiaUFnSUNBdkwybG1JQ2doWTI5dWRHRnBibk1vSVdac1lXY3BLU0J5WlhSMWNtNDdJQzh2SUc1dmRHaHBibWNnZEc4Z1pHOWNibHh1SUNBZ0lHWnZjaUFvYkdWMElHa2dQU0J2YkdSc1pXNW5kR2dnTFNBeE95QnBJRDQ5SUhCdmN6c2dhUzB0S1Z4dUlDQWdJQ0FnZEdocGN5NXpaWFJDYVhRb2FTQXJJRzRzSUhSb2FYTXVaMlYwUW1sMEtHa3BLVHRjYmx4dUlDQWdJR1p2Y2lBb2JHVjBJR2tnUFNCd2IzTTdJR2tnUENCd2IzTWdLeUJ1T3lCcEt5c3BYRzRnSUNBZ0lDQjBhR2x6TG5ObGRFSnBkQ2hwTENCbWJHRm5LVHRjYmx4dUlDQWdJQzh2SUdWdVpGVndaR0YwWlNncE8xeHVJQ0I5WEc1Y2JpQWdMeTh2SUVSbGJHVjBaWE1nYmlCaWFYUnpJR0psWjJsdWJtbHVaeUJoZENCd2IzTnBkR2x2YmlCd2IzTXNJSEpsYzJsNmFXNW5JSE5sYkdZZ1lXNWtJSE5vYVdaMGFXNW5JSEpsYldGcGJtbHVaMXh1SUNBdkx5OGdZbWwwY3lCaGNIQnliM0J5YVdGMFpXeDVMbHh1SUNCeVpXMXZkbVZCZENod2IzTTZJRzUxYldKbGNpd2diaUE5SURFcE9pQjJiMmxrSUh0Y2JpQWdJQ0F2THlCMGFHVWdiVzl6ZENCd2NtbHRhWFJwZG1VZ2FXMXdiR1Z0Wlc1MFlYUnBiMjRzSUc5d2RHbHRhWHBsSUdsMElHeGhkR1Z5SVZ4dUlDQWdJR2xtSUNodUlEd2dNQ2xjYmlBZ0lDQWdJSFJvY205M0lHNWxkeUJGY25KdmNpZ25iaUJqWVc1dWIzUWdZbVVnYm1WbllYUnBkbVVuS1R0Y2JseHVJQ0FnSUhSb2FYTXVZWE56ZFhKbFNXNVNZVzVuWlNod2IzTXNJREFzSUhSb2FYTXVYMnhsYm1kMGFDQXRJRzRzSUNkd2IzTW5LVHRjYmx4dUlDQWdJR2xtSUNoMGFHbHpMbU52Ym5SaGFXNXpLSFJ5ZFdVcEtTQjdYRzRnSUNBZ0lDQm1iM0lnS0d4bGRDQnBJRDBnY0c5ek95QnBJRHdnZEdocGN5NWZiR1Z1WjNSb0lDMGdianNnYVNzcktWeHVJQ0FnSUNBZ0lDQjBhR2x6TG5ObGRFSnBkQ2hwTENCMGFHbHpMbWRsZEVKcGRDaHBJQ3NnYmlrcE8xeHVJQ0FnSUgxY2JseHVJQ0FnSUhSb2FYTXVjMlYwVEdWdVozUm9LSFJvYVhNdVgyeGxibWQwYUNBdElHNHBPMXh1SUNCOVhHNWNiaUFnY21WdGIzWmxRbmxOWVhOcktHMWhjMnM2SUVKcGRFRnljbUY1TENCbWJHRm5JRDBnZEhKMVpTazZJRUpwZEVGeWNtRjVJSHRjYmlBZ0lDQnBaaUFvZEdocGN5NWZiR1Z1WjNSb0lDRTlJRzFoYzJzdWJHVnVaM1JvS1Z4dUlDQWdJQ0FnZEdoeWIzY2dibVYzSUVWeWNtOXlLQ2RzWlc1bmRHZ2dJVDBnYldGemF5NXNaVzVuZEdnbktUdGNibHh1SUNBZ0lHbG1JQ2h0WVhOcklEMDlJSFJvYVhNcElIc2dMeThnYm04Z2JtVmxaQ0IwYnlCcGRHVnlZWFJsWEc0Z0lDQWdJQ0IwYUdsekxuTmxkRXhsYm1kMGFDaHRZWE5yTG1OdmRXNTBRbWwwY3lnaFpteGhaeWtwTzF4dUlDQWdJQ0FnZEdocGN5NXpaWFJCYkd3b0lXWnNZV2NwTzF4dUlDQWdJSDBnWld4elpTQjdYRzRnSUNBZ0lDQnNaWFFnWkhOMFNXUjRJRDBnTUR0Y2JseHVJQ0FnSUNBZ1ptOXlJQ2hzWlhRZ2MzSmpTV1I0SUQwZ0xURTdJQ2h6Y21OSlpIZ2dQU0J0WVhOckxtWnBibVJPWlhoMEtITnlZMGxrZUN3Z0lXWnNZV2NwS1NBaFBTQXRNVHNwWEc0Z0lDQWdJQ0FnSUhSb2FYTXVjMlYwUm1GemRDaGtjM1JKWkhnckt5d2dkR2hwY3k1blpYUkNhWFFvYzNKalNXUjRLU2s3WEc1Y2JpQWdJQ0FnSUhSb2FYTXVYMnhsYm1kMGFDQTlJR1J6ZEVsa2VEdGNiaUFnSUNBZ0lIUm9hWE11WDNabGNuTnBiMjRyS3p0Y2JpQWdJQ0I5WEc1Y2JpQWdJQ0J5WlhSMWNtNGdkR2hwY3p0Y2JpQWdmVnh1WEc0Z0lDOHZMeUJUYVcxcGJHRnlJSFJ2SUhSb1pTQmJYU0J2Y0dWeVlYUnZjaTVjYmlBZ1oyVjBRbWwwS0hCdmN6b2diblZ0WW1WeUtUb2dZbTl2YkdWaGJpQjdYRzRnSUNBZ2NtVjBkWEp1SUNoMGFHbHpMbDlrWVhSaFcwMWhkR2d1Wm14dmIzSW9jRzl6SUM4Z01IZ3lNQ2xkSUNZZ0tERWdQRHdnS0hCdmN5QW1JREI0TVdZcEtTa2dJVDBnTUR0Y2JpQWdmVnh1WEc0Z0lDOHZMeUJUYVcxcGJHRnlJSFJ2SUhSb1pTQmJYU0J2Y0dWeVlYUnZjaTVjYmlBZ2MyVjBRbWwwS0hCdmN6b2diblZ0WW1WeUxDQmlhWFE2SUdKdmIyeGxZVzRzSUc1dmRHbG1lU0E5SUhSeWRXVXBJSHRjYmlBZ0lDQjBhR2x6TG5ObGRFWmhjM1FvY0c5ekxDQmlhWFFwTzF4dUlDQWdJR2xtSUNodWIzUnBabmtwWEc0Z0lDQWdJQ0IwYUdsekxsOTJaWEp6YVc5dUt5czdYRzRnSUNBZ1pXeHpaVnh1SUNBZ0lDQWdkR2hwY3k1ZmRtVnljMmx2Ymlzck8xeHVJQ0I5WEc1Y2JpQWdMeTh2SUZObGRITWdXMmxkTFhSb0lHSnBkQ0IwYnlCYmRtRnNkV1ZkTENCa2IyVnpJRzV2ZENCamFHVmpheUJpYjNWdVpITXNJR1J2WlhNZ2JtOTBJR2x1WTNKbGJXVnVkQ0IyWlhKemFXOXVYRzRnSUhObGRFWmhjM1FvYVRvZ2JuVnRZbVZ5TENCMllXeDFaVG9nWW05dmJHVmhiaWs2SUhadmFXUWdlMXh1SUNBZ0lHbG1JQ2gyWVd4MVpTbGNiaUFnSUNBZ0lIUm9hWE11WDJSaGRHRmJUV0YwYUM1bWJHOXZjaWhwSUM4Z01IZ3lNQ2xkSUh3OUlERWdQRHdnS0drZ0ppQXdlREZtS1R0Y2JpQWdJQ0JsYkhObFhHNGdJQ0FnSUNCMGFHbHpMbDlrWVhSaFcwMWhkR2d1Wm14dmIzSW9hU0F2SURCNE1qQXBYU0FtUFNCK0tERWdQRHdnS0drZ0ppQXdlREZtS1NrN1hHNGdJSDFjYmx4dUlDQnpaWFJVY25WbEtIQnZjem9nYm5WdFltVnlLVG9nZG05cFpDQjdYRzRnSUNBZ2RHaHBjeTVmWkdGMFlWdE5ZWFJvTG1ac2IyOXlLSEJ2Y3lBdklEQjRNakFwWFNCOFBTQXhJRHc4SUNod2IzTWdKaUF3ZURGbUtUdGNiaUFnZlZ4dVhHNGdJSE5sZEVaaGJITmxLSEJ2Y3pvZ2JuVnRZbVZ5S1NCN1hHNGdJQ0FnZEdocGN5NWZaR0YwWVZ0TllYUm9MbVpzYjI5eUtIQnZjeUF2SURCNE1qQXBYU0FtUFNCK0tERWdQRHdnS0hCdmN5QW1JREI0TVdZcEtUdGNiaUFnZlZ4dVhHNGdJSFJ5ZFdWRGIzVnVkQ2dwT2lCdWRXMWlaWElnZTF4dUlDQWdJSEpsZEhWeWJpQjBhR2x6TG1OdmRXNTBRbWwwY3loMGNuVmxLVHRjYmlBZ2ZWeHVYRzRnSUdaaGJITmxRMjkxYm5Rb0tUb2diblZ0WW1WeUlIdGNiaUFnSUNCeVpYUjFjbTRnZEdocGN5NWpiM1Z1ZEVKcGRITW9abUZzYzJVcE8xeHVJQ0I5WEc1Y2JpQWdMeTh2SUVOdmRXNTBjeUJpYVhSeklHOW1JSFJvWlNCemNHVmphV1pwWldRZ2RtRnNkV1V1WEc0Z0lHTnZkVzUwUW1sMGN5aDJZV3gxWlRvZ1ltOXZiR1ZoYmlrNklHNTFiV0psY2lCN1hHNGdJQ0FnYVdZZ0tIUm9hWE11WDJ4bGJtZDBhQ0E5UFNBd0tTQnlaWFIxY200Z01EdGNibHh1SUNBZ0lHbG1JQ2gwYUdsekxsOXpaV3hsWTNSbFpFTnZkVzUwVm1WeWMybHZiaUFoUFNCMGFHbHpMbDkyWlhKemFXOXVLU0I3WEc0Z0lDQWdJQ0IwYUdsekxsOXpaV3hsWTNSbFpFTnZkVzUwSUQwZ01EdGNiaUFnSUNBZ0lHTnZibk4wSUd4bGJpQTlJSFJvYVhNdWJHVnVaM1JvU1c1SmJuUnpPMXh1SUNBZ0lDQWdiR1YwSUdrZ1BTQXdPMXh1SUNBZ0lDQWdabTl5SUNnN0lHa2dQQ0JzWlc0Z0xTQXhPeUJwS3lzcElIdGNiaUFnSUNBZ0lDQWdabTl5SUNoc1pYUWdheUE5SUhSb2FYTXVYMlJoZEdGYmFWMDdJR3NnSVQwZ01Ec2dheUErUGo0OUlEZ3BJSHNnTHk5MGIyUnZPaUJqWVhOMElHUmhkR0ZiYVYwZ2RHOGdkV2x1ZEZ4dUlDQWdJQ0FnSUNBZ0lIUm9hWE11WDNObGJHVmpkR1ZrUTI5MWJuUWdLejBnUW1sMFFYSnlZWGt1WDI5dVFtbDBRMjkxYm5SYmF5QW1JREI0Wm1aZE8xeHVJQ0FnSUNBZ0lDQjlYRzRnSUNBZ0lDQjlYRzVjYmlBZ0lDQWdJQzh2SUZSb1pTQnNZWE4wSUdsdWRDNWNiaUFnSUNBZ0lHeGxkQ0JySUQwZ2RHaHBjeTVmWkdGMFlWdHBYVHRjYmlBZ0lDQWdJR052Ym5OMElISmxiV0ZwYm1sdVowSnBkSE1nUFNCMGFHbHpMbDlzWlc1bmRHZ2dKaUF3ZURGbU8xeHVJQ0FnSUNBZ2FXWWdLSEpsYldGcGJtbHVaMEpwZEhNZ0lUMGdNQ2tnTHlvZ2FXWWdjbVZ0WVdsdWFXNW5RbWwwY3lBOVBTQXdMQ0IwYUdVZ2JHRnpkQ0JwYm5RZ2FYTWdablZzYkhrZ2RYTmxaQ0JoYm1RZ1FVeE1JR0pwZEhNZ2MyaHZkV3hrSUdKbElHeGxablFnWVhNZ2FYTWdLaTljYmlBZ0lDQWdJQ0FnYXlBbVBTQitLQ2cwTWprME9UWTNNamsxS1NBOFBDQnlaVzFoYVc1cGJtZENhWFJ6S1R0Y2JseHVJQ0FnSUNBZ1ptOXlJQ2c3SUdzZ0lUMGdNRHNnYXlBK1BqNDlJRGdwWEc0Z0lDQWdJQ0FnSUhSb2FYTXVYM05sYkdWamRHVmtRMjkxYm5RZ0t6MGdRbWwwUVhKeVlYa3VYMjl1UW1sMFEyOTFiblJiYXlBbUlEQjRabVpkTzF4dVhHNGdJQ0FnSUNCMGFHbHpMbDl6Wld4bFkzUmxaRU52ZFc1MFZtVnljMmx2YmlBOUlIUm9hWE11WDNabGNuTnBiMjQ3WEc0Z0lDQWdmVnh1WEc0Z0lDQWdjbVYwZFhKdUlDaDJZV3gxWlNBL0lIUm9hWE11WDNObGJHVmpkR1ZrUTI5MWJuUWdPaUIwYUdsekxsOXNaVzVuZEdnZ0xTQjBhR2x6TGw5elpXeGxZM1JsWkVOdmRXNTBLVHRjYmlBZ2ZWeHVYRzRnSUM4dkx5QlNaWFIxY201eklHRWdiblZ0WW1WeUlHOW1JSE5sZENCaWFYUnpJSGRvWlhKbElHRnNjMjhnVzJOb1pXTnJYU0JwY3lCMGNuVmxYRzRnSUdOdmRXNTBWMmhsY21Vb1kyaGxZMnM2SUVaMWJtTjBhVzl1S1RvZ2JuVnRZbVZ5SUh0Y2JpQWdJQ0JzWlhRZ2NtVnpkV3gwSUQwZ01EdGNiaUFnSUNCcFppQW9kR2hwY3k1MGNuVmxRMjkxYm5Rb0tTQTlQU0IwYUdsekxsOXNaVzVuZEdncElIdGNiaUFnSUNBZ0lHWnZjaUFvYkdWMElHa2dQU0F3T3lCcElEd2dkR2hwY3k1ZmJHVnVaM1JvT3lCcEt5c3BYRzRnSUNBZ0lDQWdJSEpsYzNWc2RDQXJQU0JqYUdWamF5aHBLU0EvSURFZ09pQXdPMXh1SUNBZ0lIMGdaV3h6WlNCN1hHNGdJQ0FnSUNCbWIzSWdLR3hsZENCcElEMGdMVEU3SUNocElEMGdkR2hwY3k1bWFXNWtUbVY0ZENocExDQjBjblZsS1NrZ0lUMGdMVEU3S1Z4dUlDQWdJQ0FnSUNCeVpYTjFiSFFnS3owZ1kyaGxZMnNvYVNrZ1B5QXhJRG9nTUR0Y2JpQWdJQ0I5WEc0Z0lDQWdjbVYwZFhKdUlISmxjM1ZzZER0Y2JpQWdmVnh1WEc0Z0lDOHZMeUJRWlhKbWIzSnRjeUJpYVhRZ1hDSmhibVJjSWlCaGJtUWdZMjkxYm5SeklHSnBkSE1nYjJZZ2RHaGxJSE53WldOcFptbGxaQ0IyWVd4MVpTd2dkMmwwYUc5MWRDQmlhWFJ6WlhRZ2JXOWthV1pwWTJGMGFXOXVMbHh1SUNCaGJtUlhhWFJvUTI5MWJuUkNhWFJ6S0hObFkyOXVaRG9nUW1sMFFYSnlZWGtzSUhaaGJIVmxPaUJpYjI5c1pXRnVLVG9nYm5WdFltVnlJSHRjYmlBZ0lDQnBaaUFvZEdocGN5NWZiR1Z1WjNSb0lEMDlJREFwSUhKbGRIVnliaUF3TzF4dVhHNGdJQ0FnYkdWMElHTnZkVzUwSUQwZ01EdGNiaUFnSUNCamIyNXpkQ0JzWlc0Z1BTQjBhR2x6TG14bGJtZDBhRWx1U1c1MGN6dGNiaUFnSUNCc1pYUWdhU0E5SURBN1hHNGdJQ0FnWm05eUlDZzdJR2tnUENCc1pXNGdMU0F4T3lCcEt5c3BJSHRjYmlBZ0lDQWdJR1p2Y2lBb2JHVjBJR3NnUFNCMGFHbHpMbDlrWVhSaFcybGRJQ1lnYzJWamIyNWtMbDlrWVhSaFcybGRPeUJySUNFOUlEQTdJR3NnUGo0K1BTQTRLVnh1SUNBZ0lDQWdJQ0JqYjNWdWRDQXJQU0JDYVhSQmNuSmhlUzVmYjI1Q2FYUkRiM1Z1ZEZ0cklDWWdNSGhtWmwwN1hHNGdJQ0FnZlZ4dVhHNGdJQ0FnTHk4Z1ZHaGxJR3hoYzNRZ2FXNTBMbHh1SUNBZ0lHeGxkQ0JySUQwZ2RHaHBjeTVmWkdGMFlWdHBYU0FtSUhObFkyOXVaQzVmWkdGMFlWdHBYVHRjYmlBZ0lDQmpiMjV6ZENCeVpXMWhhVzVwYm1kQ2FYUnpJRDBnZEdocGN5NWZiR1Z1WjNSb0lDWWdNSGd4Wmp0Y2JpQWdJQ0JwWmlBb2NtVnRZV2x1YVc1blFtbDBjeUFoUFNBd0tWeHVJQ0FnSUNBZ2F5QW1QU0IrS0NnME1qazBPVFkzTWprMUtTQThQQ0J5WlcxaGFXNXBibWRDYVhSektUdGNiaUFnSUNCbWIzSWdLRHNnYXlBaFBTQXdPeUJySUQ0K1BqMGdPQ2xjYmlBZ0lDQWdJR052ZFc1MElDczlJRUpwZEVGeWNtRjVMbDl2YmtKcGRFTnZkVzUwVzJzZ0ppQXdlR1ptWFR0Y2JseHVJQ0FnSUhKbGRIVnliaUFvZG1Gc2RXVWdQeUJqYjNWdWRDQTZJSFJvYVhNdVgyeGxibWQwYUNBdElHTnZkVzUwS1R0Y2JpQWdmVnh1WEc0Z0lHTnNaV0Z5S0NrNklIWnZhV1FnZTF4dUlDQWdJSFJvYVhNdWMyVjBUR1Z1WjNSb0tEQXBPMXh1SUNCOVhHNWNiaUFnWTI5dWRHRnBibk1vZG1Gc2RXVTZJR0p2YjJ4bFlXNHBPaUJpYjI5c1pXRnVJSHRjYmlBZ0lDQnlaWFIxY200Z2RHaHBjeTVtYVc1a1RtVjRkQ2d0TVN3Z2RtRnNkV1VwSUQ0OUlEQTdYRzRnSUgxY2JseHVJQ0JuWlhRZ1lXeHNWSEoxWlNncElIdGNiaUFnSUNCeVpYUjFjbTRnZEdocGN5NWpiM1Z1ZEVKcGRITW9kSEoxWlNrZ1BUMGdkR2hwY3k1ZmJHVnVaM1JvTzF4dUlDQjlYRzVjYmlBZ1oyVjBJR0ZzYkVaaGJITmxLQ2tnZTF4dUlDQWdJSEpsZEhWeWJpQjBhR2x6TG1OdmRXNTBRbWwwY3lobVlXeHpaU2tnUFQwZ2RHaHBjeTVmYkdWdVozUm9PMXh1SUNCOVhHNWNiaUFnWjJWMElHRnVlVlJ5ZFdVb0tTQjdYRzRnSUNBZ2NtVjBkWEp1SUhSb2FYTXVZMjkxYm5SQ2FYUnpLSFJ5ZFdVcElENGdNRHRjYmlBZ2ZWeHVYRzRnSUdkbGRDQmhibmxHWVd4elpTZ3BJSHRjYmlBZ0lDQnlaWFIxY200Z2RHaHBjeTVqYjNWdWRFSnBkSE1vWm1Gc2MyVXBJRDRnTUR0Y2JpQWdmVnh1WEc0Z0lDOHZMeUJTWlhSMWNtNXpJSFJvWlNCd2IzTnBkR2x2YmlCdlppQjBhR1VnYm1WNGRDQmlhWFFnYjJZZ2RHaGxJSE53WldOcFptbGxaQ0IyWVd4MVpTd2djM1JoY25ScGJtY2dabkp2YlNCMGFHVWdjM0JsWTJsbWFXVmtJSEJ2YzJsMGFXOXVMbHh1SUNBdkx5OGdVbVYwZFhKdWN5QXRNU3dnYVdZZ2RHaGxjbVVnWVhKbElHNXZJSE4xWTJnZ1ltbDBjeTVjYmlBZ1ptbHVaRTVsZUhRb2FXNWtaWGc2SUc1MWJXSmxjaXdnZG1Gc2RXVWdQU0IwY25WbEtUb2diblZ0WW1WeUlIdGNiaUFnSUNCMGFHbHpMbUZ6YzNWeVpVbHVVbUZ1WjJVb2FXNWtaWGdzSUMweExDQjBhR2x6TGw5c1pXNW5kR2dzSUNkcGJtUmxlQ2NwTzF4dVhHNGdJQ0FnYVdZZ0tHbHVaR1Y0SUQ0OUlIUm9hWE11WDJ4bGJtZDBhQ0F0SURFcElISmxkSFZ5YmlBdE1UdGNiaUFnSUNCcGJtUmxlQ0E5SUdsdVpHVjRJRHdnTUNBL0lEQWdPaUJwYm1SbGVDQXJJREU3SUM4dklITnJhWEFnYzNSaGNuUmNiaUFnSUNCc1pYUWdkVzUxYzJWa1FtbDBjeUE5SUdsdVpHVjRJQ1lnTUhneFpqdGNiaUFnSUNCamIyNXpkQ0J1ZFcxSmJuUnpJRDBnZEdocGN5NXNaVzVuZEdoSmJrbHVkSE03WEc1Y2JpQWdJQ0JtYjNJZ0tHeGxkQ0JwSUQwZ1RXRjBhQzVtYkc5dmNpaHBibVJsZUNBdklETXlLVHNnYVNBOElHNTFiVWx1ZEhNN0lHa3JLeWtnZTF4dUlDQWdJQ0FnYkdWMElHc2dQU0FvZG1Gc2RXVWdQeUIwYUdsekxsOWtZWFJoVzJsZElEb2dmblJvYVhNdVgyUmhkR0ZiYVYwcE95QXZMeUIxYVc1MElHTmhjM1JjYmlBZ0lDQWdJR2xtSUNoMWJuVnpaV1JDYVhSeklDRTlJREFwSUh0Y2JpQWdJQ0FnSUNBZ2F5QW1QU0FvS0RCNFptWm1abVptWm1ZZ1BEd2dkVzUxYzJWa1FtbDBjeWtnSmlBd2VHWm1abVptWm1abUtUdGNiaUFnSUNBZ0lDQWdkVzUxYzJWa1FtbDBjeUE5SURBN1hHNGdJQ0FnSUNCOUlHVnNjMlVnYVdZZ0tDRjJZV3gxWlNBbUppQnJJRDA5SUMwME1qazBPVFkzTWprMktTQXZLaUJzYjI5cmFXNW5JR1p2Y2lCbVlXeHpaU3dnWVd4c0lHSnBkSE1nWVhKbElITmxkQ0FxTDN0Y2JpQWdJQ0FnSUNBZ1kyOXVkR2x1ZFdVN1hHNGdJQ0FnSUNCOVhHNWNiaUFnSUNBZ0lHWnZjaUFvYkdWMElHb2dQU0F3T3lCcklDRTlJREE3SUdvZ0t6MGdPQ3dnYXlBK1BqNDlJRGdwSUh0Y2JpQWdJQ0FnSUNBZ1kyOXVjM1FnY0NBOUlFSnBkRUZ5Y21GNUxsOW1hWEp6ZEU5dVFtbDBXMnNnSmlBd2VHWm1YVHRjYmlBZ0lDQWdJQ0FnYVdZZ0tIQWdQajBnTUNrZ2UxeHVJQ0FnSUNBZ0lDQWdJR2x1WkdWNElEMGdjQ0FySUNocElDb2dNeklwSUNzZ2FqdGNiaUFnSUNBZ0lDQWdJQ0JwWmlBb2FXNWtaWGdnUGowZ2RHaHBjeTVmYkdWdVozUm9LU0J5WlhSMWNtNGdMVEU3WEc0Z0lDQWdJQ0FnSUNBZ2NtVjBkWEp1SUdsdVpHVjRPMXh1SUNBZ0lDQWdJQ0I5WEc0Z0lDQWdJQ0I5WEc0Z0lDQWdmVnh1SUNBZ0lISmxkSFZ5YmlBdE1UdGNiaUFnZlZ4dVhHNGdJQzh2THlCR2FXNWtjeUJ3Y21WMmFXOTFjeUJpYVhRZ2IyWWdkR2hsSUhOd1pXTnBabWxsWkNCMllXeDFaU0JwYmlCMGFHVWdZbWwwYzJWMExseHVJQ0JtYVc1a1VISmxkaWhwYm1SbGVEb2diblZ0WW1WeUxDQjJZV3gxWlNBOUlIUnlkV1VwT2lCdWRXMWlaWElnZTF4dUlDQWdJR2xtSUNocGJtUmxlQ0E5UFNBd0tTQnlaWFIxY200Z0xURTdYRzRnSUNBZ2RHaHBjeTVoYzNOMWNtVkpibEpoYm1kbEtHbHVaR1Y0TENBdE1Td2dkR2hwY3k1ZmJHVnVaM1JvTENBbmFXNWtaWGduS1R0Y2JseHVJQ0FnSUdsdVpHVjRJRDBnYVc1a1pYZ2dQQ0F3SUQ4Z2RHaHBjeTVmYkdWdVozUm9JQzBnTVNBNklHbHVaR1Y0SUMwZ01Uc2dMeThnYzJ0cGNDQnpkR0Z5ZEZ4dVhHNGdJQ0FnWTI5dWMzUWdiR0Z6ZEVsdWRFbGtlQ0E5SUUxaGRHZ3VabXh2YjNJb2FXNWtaWGdnTHlBd2VESXdLVHRjYmlBZ0lDQnNaWFFnY21WdFlXbHVhVzVuUW1sMGN5QTlJQ2hwYm1SbGVDQXJJREVwSUNZZ01IZ3haanRjYmx4dUlDQWdJR1p2Y2lBb2JHVjBJR2tnUFNCc1lYTjBTVzUwU1dSNE95QnBJRDQ5SURBN0lHa3RMU2tnZTF4dUlDQWdJQ0FnYkdWMElHc2dQU0FvZG1Gc2RXVWdQeUIwYUdsekxsOWtZWFJoVzJsZElEb2dmblJvYVhNdVgyUmhkR0ZiYVYwcE95QXZMeUJqWVhOMFhHNGdJQ0FnSUNCcFppQW9jbVZ0WVdsdWFXNW5RbWwwY3lBaFBTQXdLU0I3WEc0Z0lDQWdJQ0FnSUdzZ0pqMGdmaWdvTkRJNU5EazJOekk1TlNrZ1BEd2djbVZ0WVdsdWFXNW5RbWwwY3lrN1hHNGdJQ0FnSUNBZ0lISmxiV0ZwYm1sdVowSnBkSE1nUFNBd08xeHVJQ0FnSUNBZ2ZWeHVJQ0FnSUNBZ1ptOXlJQ2hzWlhRZ2FpQTlJREkwT3lCcklDRTlJREE3SUdvZ0xUMGdPQ3dnYXlBOFBEMGdPQ2tnZTF4dUlDQWdJQ0FnSUNCamIyNXpkQ0J3SUQwZ1FtbDBRWEp5WVhrdVgyeGhjM1JQYmtKcGRGdHJJRDQrUGlBd2VERTRYVHRjYmlBZ0lDQWdJQ0FnYVdZZ0tIQWdQajBnTUNsY2JpQWdJQ0FnSUNBZ0lDQnlaWFIxY200Z2NDQXJJQ2hwSUNvZ016SXBJQ3NnYWp0Y2JpQWdJQ0FnSUgxY2JpQWdJQ0I5WEc0Z0lDQWdjbVYwZFhKdUlDMHhPMXh1SUNCOVhHNTlYRzRpWFgwPSIsIi8qIGVzbGludC1kaXNhYmxlIG1heC1sZW4gKi9cbmltcG9ydCAqIGFzIERHIGZyb20gJ2RhdGFncm9rLWFwaS9kZyc7XG5pbXBvcnQgeyBTdWJqZWN0IH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgQml0QXJyYXkgZnJvbSAnLi9iaXQtYXJyYXknO1xuZXhwb3J0IHZhciBTY2F0dGVyUGxvdEN1cnJlbnRMaW5lU3R5bGU7XG4oZnVuY3Rpb24gKFNjYXR0ZXJQbG90Q3VycmVudExpbmVTdHlsZSkge1xuICAgIFNjYXR0ZXJQbG90Q3VycmVudExpbmVTdHlsZVtcIm5vbmVcIl0gPSBcIm5vbmVcIjtcbiAgICBTY2F0dGVyUGxvdEN1cnJlbnRMaW5lU3R5bGVbXCJib2xkXCJdID0gXCJib2xkXCI7XG4gICAgU2NhdHRlclBsb3RDdXJyZW50TGluZVN0eWxlW1wiZGFzaGVkXCJdID0gXCJkYXNoZWRcIjtcbn0pKFNjYXR0ZXJQbG90Q3VycmVudExpbmVTdHlsZSB8fCAoU2NhdHRlclBsb3RDdXJyZW50TGluZVN0eWxlID0ge30pKTtcbmV4cG9ydCBjbGFzcyBTY2F0dGVyUGxvdExpbmVzUmVuZGVyZXIge1xuICAgIGdldCBjdXJyZW50TGluZUlkKCkge1xuICAgICAgICByZXR1cm4gdGhpcy5fY3VycmVudExpbmVJZHg7XG4gICAgfVxuICAgIHNldCBjdXJyZW50TGluZUlkKGlkKSB7XG4gICAgICAgIGlmIChpZCAhPT0gdGhpcy5fY3VycmVudExpbmVJZHgpIHtcbiAgICAgICAgICAgIHRoaXMuX2N1cnJlbnRMaW5lSWR4ID0gaWQ7XG4gICAgICAgICAgICB0aGlzLnNwLnJlbmRlcih0aGlzLmN0eCk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgc2V0IGxpbmVzVG9SZW5kZXIobGluZXMpIHtcbiAgICAgICAgdGhpcy51cGRhdGVMaW5lcyhsaW5lcyk7XG4gICAgICAgIHRoaXMuc3AucmVuZGVyKHRoaXMuY3R4KTtcbiAgICB9XG4gICAgc2V0IGxpbmVzVmlzaWJpbGl0eSh2aXNpYmlsaXR5KSB7XG4gICAgICAgIHRoaXMudmlzaWJpbGl0eSA9IHZpc2liaWxpdHk7XG4gICAgICAgIHRoaXMuc3AucmVuZGVyKHRoaXMuY3R4KTtcbiAgICB9XG4gICAgY29uc3RydWN0b3Ioc3AsIHhBeGlzLCB5QXhpcywgbGluZXMsIGN1cnJlbnRMaW5lU3R5bGUgPSBTY2F0dGVyUGxvdEN1cnJlbnRMaW5lU3R5bGUubm9uZSkge1xuICAgICAgICB2YXIgX2E7XG4gICAgICAgIHRoaXMuX2N1cnJlbnRMaW5lSWR4ID0gLTE7XG4gICAgICAgIHRoaXMubGluZUNsaWNrZWQgPSBuZXcgU3ViamVjdCgpO1xuICAgICAgICB0aGlzLmxpbmVIb3ZlciA9IG5ldyBTdWJqZWN0KCk7XG4gICAgICAgIHRoaXMubW91c2VPdmVyTGluZUlkID0gLTE7XG4gICAgICAgIHRoaXMuYXJyb3dXaWR0aCA9IDE1O1xuICAgICAgICB0aGlzLnNwID0gc3A7XG4gICAgICAgIHRoaXMueEF4aXNDb2wgPSB0aGlzLnNwLmRhdGFGcmFtZS5jb2x1bW5zLmJ5TmFtZSh4QXhpcyk7XG4gICAgICAgIHRoaXMueUF4aXNDb2wgPSB0aGlzLnNwLmRhdGFGcmFtZS5jb2x1bW5zLmJ5TmFtZSh5QXhpcyk7XG4gICAgICAgIHRoaXMuY2FudmFzID0gdGhpcy5zcC5nZXRJbmZvKClbJ2NhbnZhcyddO1xuICAgICAgICB0aGlzLmN0eCA9IHRoaXMuY2FudmFzLmdldENvbnRleHQoJzJkJyk7XG4gICAgICAgIHRoaXMuY3VycmVudExpbmVTdHlsZSA9IGN1cnJlbnRMaW5lU3R5bGU7XG4gICAgICAgIHRoaXMudXBkYXRlTGluZXMobGluZXMpO1xuICAgICAgICB0aGlzLnZpc2liaWxpdHkgPSAoX2EgPSBsaW5lcy52aXNpYmlsaXR5KSAhPT0gbnVsbCAmJiBfYSAhPT0gdm9pZCAwID8gX2EgOiBuZXcgQml0QXJyYXkodGhpcy5saW5lcy5mcm9tLmxlbmd0aCk7XG4gICAgICAgIGlmICghbGluZXMudmlzaWJpbGl0eSlcbiAgICAgICAgICAgIHRoaXMudmlzaWJpbGl0eS5zZXRBbGwodHJ1ZSwgZmFsc2UpO1xuICAgICAgICBpZiAobGluZXMuYXJyb3dTaXplKVxuICAgICAgICAgICAgdGhpcy5hcnJvd1dpZHRoID0gbGluZXMuYXJyb3dTaXplO1xuICAgICAgICB0aGlzLmNhbnZhcy5vbm1vdXNlZG93biA9IChldmVudCkgPT4ge1xuICAgICAgICAgICAgaWYgKHRoaXMubW91c2VPdmVyTGluZUlkICE9PSAtMSlcbiAgICAgICAgICAgICAgICB0aGlzLmxpbmVDbGlja2VkLm5leHQoeyB4OiBldmVudC5jbGllbnRYLCB5OiBldmVudC5jbGllbnRZLCBpZDogdGhpcy5tb3VzZU92ZXJMaW5lSWQsIGV2ZW50OiBldmVudCB9KTtcbiAgICAgICAgfTtcbiAgICAgICAgdGhpcy5jYW52YXMub25tb3VzZW1vdmUgPSAoZXZlbnQpID0+IHtcbiAgICAgICAgICAgIHRoaXMubW91c2VPdmVyTGluZUlkID0gdGhpcy5jaGVja0Nvb3Jkc09uTGluZShldmVudC5vZmZzZXRYLCBldmVudC5vZmZzZXRZKTtcbiAgICAgICAgICAgIGlmICh0aGlzLm1vdXNlT3ZlckxpbmVJZCAhPT0gLTEpXG4gICAgICAgICAgICAgICAgdGhpcy5saW5lSG92ZXIubmV4dCh7IHg6IGV2ZW50LmNsaWVudFgsIHk6IGV2ZW50LmNsaWVudFksIGlkOiB0aGlzLm1vdXNlT3ZlckxpbmVJZCwgZXZlbnQ6IGV2ZW50IH0pO1xuICAgICAgICB9O1xuICAgICAgICBzcC5vbkV2ZW50KCdkNC1iZWZvcmUtZHJhdy1zY2VuZScpXG4gICAgICAgICAgICAuc3Vic2NyaWJlKChfKSA9PiB7XG4gICAgICAgICAgICB0aGlzLnJlbmRlckxpbmVzKCk7XG4gICAgICAgIH0pO1xuICAgIH1cbiAgICB1cGRhdGVMaW5lcyhsaW5lcykge1xuICAgICAgICB0aGlzLmxpbmVzID0gbGluZXM7XG4gICAgICAgIHRoaXMubXVsdGlwbGVMaW5lc0NvdW50cyA9IG5ldyBVaW50OEFycmF5KHRoaXMubGluZXMuZnJvbS5sZW5ndGgpO1xuICAgICAgICBpZiAoIWxpbmVzLnNraXBNdWx0aUxpbmVDYWxjdWxhdGlvbilcbiAgICAgICAgICAgIHRoaXMuY3JlYXRlTXVsdGlMaW5lc0luZGljZXMoKTtcbiAgICAgICAgZWxzZVxuICAgICAgICAgICAgdGhpcy5tdWx0aXBsZUxpbmVzQ291bnRzLmZpbGwoMCk7XG4gICAgfVxuICAgIHJlbmRlckxpbmVzKCkge1xuICAgICAgICB2YXIgX2EsIF9iLCBfYywgX2QsIF9lLCBfZiwgX2csIF9oLCBfaiwgX2ssIF9sLCBfbSwgX287XG4gICAgICAgIGNvbnN0IHNwTG9vayA9IHRoaXMuc3AuZ2V0T3B0aW9ucygpLmxvb2s7XG4gICAgICAgIGNvbnN0IGluZGl2aWR1YWxMaW5lU3R5bGVzID0gdGhpcy5saW5lcy5jb2xvcnMgfHwgdGhpcy5saW5lcy53aWR0aCB8fCB0aGlzLmxpbmVzLm9wYWNpdGllcyB8fCB0aGlzLmxpbmVzLmRyYXdBcnJvd3NBcnI7XG4gICAgICAgIGlmICghaW5kaXZpZHVhbExpbmVTdHlsZXMpIHtcbiAgICAgICAgICAgIHRoaXMuY3R4LmxpbmVXaWR0aCA9IChfYSA9IHRoaXMubGluZXMud2lkdGgpICE9PSBudWxsICYmIF9hICE9PSB2b2lkIDAgPyBfYSA6IDE7XG4gICAgICAgICAgICB0aGlzLmN0eC5zdHJva2VTdHlsZSA9IGByZ2JhKCR7KF9iID0gdGhpcy5saW5lcy5jb2xvcikgIT09IG51bGwgJiYgX2IgIT09IHZvaWQgMCA/IF9iIDogJzAsMTI4LDAnfSwkeyhfYyA9IHRoaXMubGluZXMub3BhY2l0eSkgIT09IG51bGwgJiYgX2MgIT09IHZvaWQgMCA/IF9jIDogMX0pYDtcbiAgICAgICAgfVxuICAgICAgICBjb25zdCBtYXJrZXJTaXplQ29sID0gc3BMb29rWydzaXplQ29sdW1uTmFtZSddID8gdGhpcy5zcC5kYXRhRnJhbWUuY29sKHNwTG9va1snc2l6ZUNvbHVtbk5hbWUnXSkgOiBudWxsO1xuICAgICAgICBjb25zdCBmaWx0ZXIgPSB0aGlzLnNwLmRhdGFGcmFtZS5maWx0ZXI7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5saW5lcy5mcm9tLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBpZiAoZmlsdGVyLmdldCh0aGlzLmxpbmVzLmZyb21baV0pICYmIGZpbHRlci5nZXQodGhpcy5saW5lcy50b1tpXSkgJiYgdGhpcy52aXNpYmlsaXR5LmdldEJpdChpKSkge1xuICAgICAgICAgICAgICAgIGxldCBsaW5lTGVuID0gMDtcbiAgICAgICAgICAgICAgICBjb25zdCB7IHNpemVGcm9tLCBzaXplVG8gfSA9IHRoaXMuZ2V0TWFya2Vyc1NpemVzKHNwTG9vaywgbWFya2VyU2l6ZUNvbCwgaSk7XG4gICAgICAgICAgICAgICAgY29uc3QgcG9pbnRGcm9tID0gdGhpcy5zcC53b3JsZFRvU2NyZWVuKHRoaXMueEF4aXNDb2wuZ2V0KHRoaXMubGluZXMuZnJvbVtpXSksIHRoaXMueUF4aXNDb2wuZ2V0KHRoaXMubGluZXMuZnJvbVtpXSkpO1xuICAgICAgICAgICAgICAgIGxldCBhWCA9IHBvaW50RnJvbSA9PT0gbnVsbCB8fCBwb2ludEZyb20gPT09IHZvaWQgMCA/IHZvaWQgMCA6IHBvaW50RnJvbS54O1xuICAgICAgICAgICAgICAgIGxldCBhWSA9IHBvaW50RnJvbSA9PT0gbnVsbCB8fCBwb2ludEZyb20gPT09IHZvaWQgMCA/IHZvaWQgMCA6IHBvaW50RnJvbS55O1xuICAgICAgICAgICAgICAgIGNvbnN0IHBvaW50VG8gPSB0aGlzLnNwLndvcmxkVG9TY3JlZW4odGhpcy54QXhpc0NvbC5nZXQodGhpcy5saW5lcy50b1tpXSksIHRoaXMueUF4aXNDb2wuZ2V0KHRoaXMubGluZXMudG9baV0pKTtcbiAgICAgICAgICAgICAgICBsZXQgYlggPSBwb2ludFRvID09PSBudWxsIHx8IHBvaW50VG8gPT09IHZvaWQgMCA/IHZvaWQgMCA6IHBvaW50VG8ueDtcbiAgICAgICAgICAgICAgICBsZXQgYlkgPSBwb2ludFRvID09PSBudWxsIHx8IHBvaW50VG8gPT09IHZvaWQgMCA/IHZvaWQgMCA6IHBvaW50VG8ueTtcbiAgICAgICAgICAgICAgICBjb25zdCBtaW5BeGlzID0gTWF0aC5taW4odGhpcy5zcC52aWV3Qm94LndpZHRoLCB0aGlzLnNwLnZpZXdCb3guaGVpZ2h0KTtcbiAgICAgICAgICAgICAgICB0aGlzLmN0eC5iZWdpblBhdGgoKTtcbiAgICAgICAgICAgICAgICBpZiAoYVggJiYgYVkgJiYgYlggJiYgYlkgJiYgTWF0aC5oeXBvdChiWCAtIGFYLCBiWSAtIGFZKSAvIG1pbkF4aXMgPiAwLjAxKSB7XG4gICAgICAgICAgICAgICAgICAgIGlmIChpbmRpdmlkdWFsTGluZVN0eWxlcykge1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgY29sb3IgPSAoKF9kID0gdGhpcy5saW5lcy5jb2xvcnMpID09PSBudWxsIHx8IF9kID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfZFtpXSkgPyAoX2UgPSB0aGlzLmxpbmVzLmNvbG9ycykgPT09IG51bGwgfHwgX2UgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9lW2ldIDogJzAsMTI4LDAnO1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3Qgb3BhY2l0eSA9ICgoX2YgPSB0aGlzLmxpbmVzLm9wYWNpdGllcykgPT09IG51bGwgfHwgX2YgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9mW2ldKSA/IChfZyA9IHRoaXMubGluZXMub3BhY2l0aWVzKSA9PT0gbnVsbCB8fCBfZyA9PT0gdm9pZCAwID8gdm9pZCAwIDogX2dbaV0gOiAxO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jdHguc3Ryb2tlU3R5bGUgPSBgcmdiYSgke2NvbG9yfSwke29wYWNpdHl9KWA7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmN0eC5saW5lV2lkdGggPSAoKF9oID0gdGhpcy5saW5lcy53aWR0aHMpID09PSBudWxsIHx8IF9oID09PSB2b2lkIDAgPyB2b2lkIDAgOiBfaFtpXSkgPyAoX2ogPSB0aGlzLmxpbmVzLndpZHRocykgPT09IG51bGwgfHwgX2ogPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9qW2ldIDogMTtcbiAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICBpZiAoaSA9PT0gdGhpcy5fY3VycmVudExpbmVJZHgpXG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLnRvZ2dsZUN1cnJlbnRMaW5lU3R5bGUodHJ1ZSk7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IG11bHRpTGluZXMgPSB0aGlzLm11bHRpcGxlTGluZXNDb3VudHNbaV07XG4gICAgICAgICAgICAgICAgICAgIGxldCBjb250cm9sUG9pbnQgPSBudWxsO1xuICAgICAgICAgICAgICAgICAgICBpZiAobXVsdGlMaW5lcykge1xuICAgICAgICAgICAgICAgICAgICAgICAgbGluZUxlbiA9IHRoaXMuZ2V0TGluZUxlbmd0aChhWCwgYVksIGJYLCBiWSk7XG4gICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBzdGFydFBvaW50V2l0aE1hcmtlciA9IHRoaXMuZ2V0UG9pbnRPbkRpc3RhbmNlKGFYLCBhWSwgYlgsIGJZLCBzaXplVG8sIGxpbmVMZW4pO1xuICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgZW5kdFBvaW50V2l0aE1hcmtlciA9IHRoaXMuZ2V0UG9pbnRPbkRpc3RhbmNlKGJYLCBiWSwgYVgsIGFZLCBzaXplRnJvbSwgbGluZUxlbik7XG4gICAgICAgICAgICAgICAgICAgICAgICBhWCA9IHN0YXJ0UG9pbnRXaXRoTWFya2VyLng7XG4gICAgICAgICAgICAgICAgICAgICAgICBhWSA9IHN0YXJ0UG9pbnRXaXRoTWFya2VyLnk7XG4gICAgICAgICAgICAgICAgICAgICAgICBiWCA9IGVuZHRQb2ludFdpdGhNYXJrZXIueDtcbiAgICAgICAgICAgICAgICAgICAgICAgIGJZID0gZW5kdFBvaW50V2l0aE1hcmtlci55O1xuICAgICAgICAgICAgICAgICAgICAgICAgY29udHJvbFBvaW50ID0gdGhpcy5saW5lcy5mcm9tW2ldID4gdGhpcy5saW5lcy50b1tpXSA/XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5maW5kQ29udHJvbFBvaW50KG11bHRpTGluZXMsIGFYLCBhWSwgYlgsIGJZLCBpKSA6XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5maW5kQ29udHJvbFBvaW50KG11bHRpTGluZXMsIGJYLCBiWSwgYVgsIGFZLCBpKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY3R4Lm1vdmVUbyhhWCwgYVkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5jdHgucXVhZHJhdGljQ3VydmVUbyhjb250cm9sUG9pbnQueCwgY29udHJvbFBvaW50LnksIGJYLCBiWSk7XG4gICAgICAgICAgICAgICAgICAgIH1cbiAgICAgICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmN0eC5tb3ZlVG8oYVgsIGFZKTtcbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY3R4LmxpbmVUbyhiWCwgYlkpO1xuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIGlmICgoX2sgPSB0aGlzLmxpbmVzLmRyYXdBcnJvd3MpICE9PSBudWxsICYmIF9rICE9PSB2b2lkIDAgPyBfayA6IChfbCA9IHRoaXMubGluZXMuZHJhd0Fycm93c0FycikgPT09IG51bGwgfHwgX2wgPT09IHZvaWQgMCA/IHZvaWQgMCA6IF9sLmdldEJpdChpKSkge1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKCFsaW5lTGVuKVxuICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpbmVMZW4gPSB0aGlzLmdldExpbmVMZW5ndGgoYVgsIGFZLCBiWCwgYlkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGxpbmVMZW4gPiB0aGlzLmFycm93V2lkdGgpIHtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBhcnJvd1BvaW50ID0gIW11bHRpTGluZXMgPyB0aGlzLmdldFBvaW50T25EaXN0YW5jZShhWCwgYVksIGJYLCBiWSwgc2l6ZVRvLCBsaW5lTGVuKSA6IG51bGw7XG4gICAgICAgICAgICAgICAgICAgICAgICAgICAgY29uc3QgYXJyb3dDUFggPSBtdWx0aUxpbmVzID8gY29udHJvbFBvaW50LnggOiBhWDtcbiAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBhcnJvd0NQWSA9IG11bHRpTGluZXMgPyBjb250cm9sUG9pbnQueSA6IGFZO1xuICAgICAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuY2FudmFzQXJyb3codGhpcy5jdHgsIChfbSA9IGFycm93UG9pbnQgPT09IG51bGwgfHwgYXJyb3dQb2ludCA9PT0gdm9pZCAwID8gdm9pZCAwIDogYXJyb3dQb2ludC54KSAhPT0gbnVsbCAmJiBfbSAhPT0gdm9pZCAwID8gX20gOiBhWCwgKF9vID0gYXJyb3dQb2ludCA9PT0gbnVsbCB8fCBhcnJvd1BvaW50ID09PSB2b2lkIDAgPyB2b2lkIDAgOiBhcnJvd1BvaW50LnkpICE9PSBudWxsICYmIF9vICE9PSB2b2lkIDAgPyBfbyA6IGFZLCBhcnJvd0NQWCwgYXJyb3dDUFkpO1xuICAgICAgICAgICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgICAgIHRoaXMuY3R4LnN0cm9rZSgpO1xuICAgICAgICAgICAgICAgICAgICB0aGlzLmN0eC5jbG9zZVBhdGgoKTtcbiAgICAgICAgICAgICAgICAgICAgaWYgKGkgPT09IHRoaXMuX2N1cnJlbnRMaW5lSWR4KVxuICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy50b2dnbGVDdXJyZW50TGluZVN0eWxlKGZhbHNlKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICB9XG4gICAgICAgIH1cbiAgICAgICAgdGhpcy5maWxsTGVmdEJvdHRvbVJlY3QoKTtcbiAgICB9XG4gICAgdG9nZ2xlQ3VycmVudExpbmVTdHlsZShmbGFnKSB7XG4gICAgICAgIHN3aXRjaCAodGhpcy5jdXJyZW50TGluZVN0eWxlKSB7XG4gICAgICAgICAgICBjYXNlIFNjYXR0ZXJQbG90Q3VycmVudExpbmVTdHlsZS5ib2xkOiB7XG4gICAgICAgICAgICAgICAgZmxhZyA/IHRoaXMuY3R4LmxpbmVXaWR0aCArPSAyIDogdGhpcy5jdHgubGluZVdpZHRoIC09IDI7XG4gICAgICAgICAgICAgICAgYnJlYWs7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBjYXNlIFNjYXR0ZXJQbG90Q3VycmVudExpbmVTdHlsZS5kYXNoZWQ6IHtcbiAgICAgICAgICAgICAgICBmbGFnID8gdGhpcy5jdHguc2V0TGluZURhc2goWzUsIDVdKSA6IHRoaXMuY3R4LnNldExpbmVEYXNoKFtdKTtcbiAgICAgICAgICAgICAgICBicmVhaztcbiAgICAgICAgICAgIH1cbiAgICAgICAgICAgIGRlZmF1bHQ6XG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICB9XG4gICAgfVxuICAgIGdldE1hcmtlcnNTaXplcyhzcExvb2ssIG1hcmtlclNpemVDb2wsIGkpIHtcbiAgICAgICAgbGV0IHNpemVGcm9tID0gMztcbiAgICAgICAgbGV0IHNpemVUbyA9IDM7XG4gICAgICAgIGlmIChtYXJrZXJTaXplQ29sKSB7XG4gICAgICAgICAgICBzaXplRnJvbSA9IChzcExvb2subWFya2VyTWluU2l6ZSArIChzcExvb2subWFya2VyTWF4U2l6ZSAtIHNwTG9vay5tYXJrZXJNaW5TaXplKSAqIG1hcmtlclNpemVDb2wuc2NhbGUodGhpcy5saW5lcy5mcm9tW2ldKSkgLyAyO1xuICAgICAgICAgICAgc2l6ZVRvID0gKHNwTG9vay5tYXJrZXJNaW5TaXplICsgKHNwTG9vay5tYXJrZXJNYXhTaXplIC0gc3BMb29rLm1hcmtlck1pblNpemUpICogbWFya2VyU2l6ZUNvbC5zY2FsZSh0aGlzLmxpbmVzLnRvW2ldKSkgLyAyO1xuICAgICAgICB9XG4gICAgICAgIGVsc2UgaWYgKHNwTG9vay5tYXJrZXJEZWZhdWx0U2l6ZSkge1xuICAgICAgICAgICAgc2l6ZUZyb20gPSBzcExvb2subWFya2VyRGVmYXVsdFNpemUgLyAyO1xuICAgICAgICAgICAgc2l6ZVRvID0gc3BMb29rLm1hcmtlckRlZmF1bHRTaXplIC8gMjtcbiAgICAgICAgfVxuICAgICAgICByZXR1cm4geyBzaXplRnJvbSwgc2l6ZVRvIH07XG4gICAgfVxuICAgIGZpbGxMZWZ0Qm90dG9tUmVjdCgpIHtcbiAgICAgICAgY29uc3QgcmVjdCA9IG5ldyBQYXRoMkQoKTtcbiAgICAgICAgcmVjdC5yZWN0KHRoaXMuc3AueUF4aXNCb3gubWluWCwgdGhpcy5zcC55QXhpc0JveC5tYXhZLCB0aGlzLnNwLnlBeGlzQm94LndpZHRoLCB0aGlzLnNwLnhBeGlzQm94LmhlaWdodCk7XG4gICAgICAgIHRoaXMuY3R4LmZpbGxTdHlsZSA9IGB3aGl0ZWA7XG4gICAgICAgIHRoaXMuY3R4LmJlZ2luUGF0aCgpO1xuICAgICAgICB0aGlzLmN0eC5maWxsKHJlY3QpO1xuICAgICAgICB0aGlzLmN0eC5jbG9zZVBhdGgoKTtcbiAgICB9XG4gICAgY3JlYXRlTXVsdGlMaW5lc0luZGljZXMoKSB7XG4gICAgICAgIGNvbnN0IGFycmF5SWR4c0JpdEFycmF5ID0gbmV3IEJpdEFycmF5KHRoaXMubGluZXMuZnJvbS5sZW5ndGgpO1xuICAgICAgICBhcnJheUlkeHNCaXRBcnJheS5zZXRBbGwodHJ1ZSk7XG4gICAgICAgIGZvciAobGV0IGkgPSAtMTsgKGkgPSBhcnJheUlkeHNCaXRBcnJheS5maW5kTmV4dChpKSkgIT09IC0xOykge1xuICAgICAgICAgICAgY29uc3QgZmlyc3RMaW5lSWR4ID0gaTtcbiAgICAgICAgICAgIGNvbnN0IHAxID0gdGhpcy5saW5lcy5mcm9tW2ZpcnN0TGluZUlkeF07XG4gICAgICAgICAgICBjb25zdCBwMiA9IHRoaXMubGluZXMudG9bZmlyc3RMaW5lSWR4XTtcbiAgICAgICAgICAgIGxldCBsaW5lc1BlclBhaXIgPSAxO1xuICAgICAgICAgICAgZm9yIChsZXQgaiA9IGk7IChqID0gYXJyYXlJZHhzQml0QXJyYXkuZmluZE5leHQoaikpICE9PSAtMTspIHtcbiAgICAgICAgICAgICAgICBjb25zdCBwb2ludFRvQ29tcGFyZTEgPSB0aGlzLmxpbmVzLmZyb21bal07XG4gICAgICAgICAgICAgICAgY29uc3QgcG9pbnRUb0NvbXBhcmUyID0gdGhpcy5saW5lcy50b1tqXTtcbiAgICAgICAgICAgICAgICBpZiAocG9pbnRUb0NvbXBhcmUxID09PSBwMSAmJiBwb2ludFRvQ29tcGFyZTIgPT09IHAyIHx8XG4gICAgICAgICAgICAgICAgICAgIHBvaW50VG9Db21wYXJlMiA9PT0gcDEgJiYgcG9pbnRUb0NvbXBhcmUxID09PSBwMikge1xuICAgICAgICAgICAgICAgICAgICB0aGlzLm11bHRpcGxlTGluZXNDb3VudHNbal0gPSArK2xpbmVzUGVyUGFpcjtcbiAgICAgICAgICAgICAgICAgICAgYXJyYXlJZHhzQml0QXJyYXkuc2V0Qml0KGosIGZhbHNlLCBmYWxzZSk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICAgICAgaWYgKGxpbmVzUGVyUGFpciA+IDEpXG4gICAgICAgICAgICAgICAgdGhpcy5tdWx0aXBsZUxpbmVzQ291bnRzW2ZpcnN0TGluZUlkeF0gPSAxO1xuICAgICAgICAgICAgYXJyYXlJZHhzQml0QXJyYXkuc2V0Qml0KGksIGZhbHNlLCBmYWxzZSk7XG4gICAgICAgIH1cbiAgICB9XG4gICAgY2hlY2tDb29yZHNPbkxpbmUoeCwgeSkge1xuICAgICAgICBsZXQgY2FuZGlkYXRlSWR4ID0gLTE7XG4gICAgICAgIGxldCBtaW5EaXN0ID0gbnVsbDtcbiAgICAgICAgbGV0IGRpc3QgPSBudWxsO1xuICAgICAgICBjb25zdCBzcExvb2sgPSB0aGlzLnNwLmdldE9wdGlvbnMoKS5sb29rO1xuICAgICAgICBjb25zdCBtYXJrZXJTaXplQ29sID0gc3BMb29rWydzaXplQ29sdW1uTmFtZSddID8gdGhpcy5zcC5kYXRhRnJhbWUuY29sKHNwTG9va1snc2l6ZUNvbHVtbk5hbWUnXSkgOiBudWxsO1xuICAgICAgICBjb25zdCBmaWx0ZXIgPSB0aGlzLnNwLmRhdGFGcmFtZS5maWx0ZXI7XG4gICAgICAgIGZvciAobGV0IGkgPSAwOyBpIDwgdGhpcy5saW5lcy5mcm9tLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBpZiAoZmlsdGVyLmdldCh0aGlzLmxpbmVzLmZyb21baV0pICYmIGZpbHRlci5nZXQodGhpcy5saW5lcy50b1tpXSkgJiYgdGhpcy52aXNpYmlsaXR5LmdldEJpdChpKSkge1xuICAgICAgICAgICAgICAgIGNvbnN0IHsgc2l6ZUZyb20sIHNpemVUbyB9ID0gdGhpcy5nZXRNYXJrZXJzU2l6ZXMoc3BMb29rLCBtYXJrZXJTaXplQ29sLCBpKTtcbiAgICAgICAgICAgICAgICBjb25zdCBwRnJvbSA9IHRoaXMuc3Aud29ybGRUb1NjcmVlbih0aGlzLnhBeGlzQ29sLmdldCh0aGlzLmxpbmVzLmZyb21baV0pLCB0aGlzLnlBeGlzQ29sLmdldCh0aGlzLmxpbmVzLmZyb21baV0pKTtcbiAgICAgICAgICAgICAgICBjb25zdCBwVG8gPSB0aGlzLnNwLndvcmxkVG9TY3JlZW4odGhpcy54QXhpc0NvbC5nZXQodGhpcy5saW5lcy50b1tpXSksIHRoaXMueUF4aXNDb2wuZ2V0KHRoaXMubGluZXMudG9baV0pKTtcbiAgICAgICAgICAgICAgICBpZiAodGhpcy5tdWx0aXBsZUxpbmVzQ291bnRzW2ldKSB7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IGxlbiA9IHRoaXMuZ2V0TGluZUxlbmd0aChwRnJvbS54LCBwRnJvbS55LCBwVG8ueCwgcFRvLnkpO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBmcm9tTWFya2VyID0gdGhpcy5nZXRQb2ludE9uRGlzdGFuY2UocEZyb20ueCwgcEZyb20ueSwgcFRvLngsIHBUby55LCBzaXplVG8sIGxlbik7XG4gICAgICAgICAgICAgICAgICAgIGNvbnN0IHRvTWFya2VyID0gdGhpcy5nZXRQb2ludE9uRGlzdGFuY2UocFRvLngsIHBUby55LCBwRnJvbSA9PT0gbnVsbCB8fCBwRnJvbSA9PT0gdm9pZCAwID8gdm9pZCAwIDogcEZyb20ueCwgcEZyb20gPT09IG51bGwgfHwgcEZyb20gPT09IHZvaWQgMCA/IHZvaWQgMCA6IHBGcm9tLnksIHNpemVGcm9tLCBsZW4pO1xuICAgICAgICAgICAgICAgICAgICBjb25zdCBjb250cm9sUG9pbnQgPSB0aGlzLmxpbmVzLmZyb21baV0gPiB0aGlzLmxpbmVzLnRvW2ldID9cbiAgICAgICAgICAgICAgICAgICAgICAgIHRoaXMuZmluZENvbnRyb2xQb2ludCh0aGlzLm11bHRpcGxlTGluZXNDb3VudHNbaV0sIGZyb21NYXJrZXIueCwgZnJvbU1hcmtlci55LCB0b01hcmtlci54LCB0b01hcmtlci55LCBpKSA6XG4gICAgICAgICAgICAgICAgICAgICAgICB0aGlzLmZpbmRDb250cm9sUG9pbnQodGhpcy5tdWx0aXBsZUxpbmVzQ291bnRzW2ldLCB0b01hcmtlci54LCB0b01hcmtlci55LCBmcm9tTWFya2VyLngsIGZyb21NYXJrZXIueSwgaSk7XG4gICAgICAgICAgICAgICAgICAgIGRpc3QgPSB0aGlzLmNhbGN1bGF0ZURpc3RUb0N1cnZlTGluZShpLCB4LCB5LCBmcm9tTWFya2VyLCB0b01hcmtlciwgY29udHJvbFBvaW50KTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICAgICAgICAgIGRpc3QgPSB0aGlzLmNhbGN1bGF0ZURpc3RUb1N0cmFpZ2h0TGluZSh4LCB5LCBwRnJvbSwgcFRvKTtcbiAgICAgICAgICAgICAgICB9XG4gICAgICAgICAgICAgICAgaWYgKCghbWluRGlzdCAmJiBkaXN0ICE9PSBudWxsICYmIGRpc3QgPCA1KSB8fCBtaW5EaXN0ICYmIGRpc3QgIT09IG51bGwgJiYgZGlzdCA8IG1pbkRpc3QpIHtcbiAgICAgICAgICAgICAgICAgICAgbWluRGlzdCA9IGRpc3Q7XG4gICAgICAgICAgICAgICAgICAgIGNhbmRpZGF0ZUlkeCA9IGk7XG4gICAgICAgICAgICAgICAgfVxuICAgICAgICAgICAgfVxuICAgICAgICB9XG4gICAgICAgIHJldHVybiBjYW5kaWRhdGVJZHg7XG4gICAgfVxuICAgIGNhbGN1bGF0ZURpc3RUb1N0cmFpZ2h0TGluZSh4LCB5LCBwMSwgcDIpIHtcbiAgICAgICAgLyogY2FsY3VsYXRpbmcgY29vcmRpbmF0ZXMgb2YgYSByZWN0IGFyb3VuZCBhIGxpbmUuIElmIGN1cnNvciBjb29yZHMgYXJlIG91dHNpZGUgdGhpcyByZWN0IC0gYXNzdW1lIHRoYXRcbiAgICAgICAgICAgIHBvaW50IGlzIG5vdCBvbiBsaW5lIGFuZCBkbyBub3QgY2FsY3VsYXRlIGRpc3RhbmNlIHRvIGxpbmUgKi9cbiAgICAgICAgY29uc3QgeE1pbiA9IE1hdGgubWluKHAxLngsIHAyLngpO1xuICAgICAgICBjb25zdCB4TWF4ID0gTWF0aC5tYXgocDEueCwgcDIueCk7XG4gICAgICAgIGNvbnN0IHlNaW4gPSBNYXRoLm1pbihwMS55LCBwMi55KTtcbiAgICAgICAgY29uc3QgeU1heCA9IE1hdGgubWF4KHAxLnksIHAyLnkpO1xuICAgICAgICAvL2FkZGluZyBhIGNvdXBsZSBvZiBwaXhlbHMgdG8gaW5jcmVhc2UgdGhlIHdpZHRoL2hlaWdodCBvZiB0aGUgcmVjdFxuICAgICAgICBjb25zdCB0aHJlc2hvbGQgPSAyO1xuICAgICAgICByZXR1cm4geCA+PSB4TWluIC0gdGhyZXNob2xkICYmIHggPD0geE1heCArIHRocmVzaG9sZCAmJiB5ID49IHlNaW4gLSB0aHJlc2hvbGQgJiYgeSA8PSB5TWF4ICsgdGhyZXNob2xkID9cbiAgICAgICAgICAgIHRoaXMuZGlzdFRvU3RyYWlnaHRMaW5lU2VnbWVudCh4LCB5LCBwMSwgcDIpIDpcbiAgICAgICAgICAgIG51bGw7XG4gICAgfVxuICAgIGRpc3RUb1N0cmFpZ2h0TGluZVNlZ21lbnQoeCwgeSwgcDEsIHAyKSB7XG4gICAgICAgIGNvbnN0IGRpc3QgPSAoeDEsIHkxLCB4MiwgeTIpID0+IE1hdGgucG93KCh4MSAtIHgyKSwgMikgKyBNYXRoLnBvdygoeTEgLSB5MiksIDIpO1xuICAgICAgICBjb25zdCBsID0gZGlzdChwMS54LCBwMS55LCBwMi54LCBwMi55KTtcbiAgICAgICAgaWYgKGwgPT0gMClcbiAgICAgICAgICAgIHJldHVybiBkaXN0KHgsIHksIHAxLngsIHAxLnkpO1xuICAgICAgICBsZXQgdCA9ICgoeCAtIHAxLngpICogKHAyLnggLSBwMS54KSArICh5IC0gcDEueSkgKiAocDIueSAtIHAxLnkpKSAvIGw7XG4gICAgICAgIHQgPSBNYXRoLm1heCgwLCBNYXRoLm1pbigxLCB0KSk7XG4gICAgICAgIHJldHVybiBkaXN0KHgsIHksIHAxLnggKyB0ICogKHAyLnggLSBwMS54KSwgcDEueSArIHQgKiAocDIueSAtIHAxLnkpKTtcbiAgICB9XG4gICAgY2FsY3VsYXRlRGlzdFRvQ3VydmVMaW5lKGksIHgsIHksIHAxLCBwMiwgcGMpIHtcbiAgICAgICAgLyogY2FsY3VsYXRpbmcgY29vcmRpbmF0ZXMgb2YgYSByZWN0IGFyb3VuZCBhIGxpbmUuIElmIGN1cnNvciBjb29yZHMgYXJlIG91dHNpZGUgdGhpcyBzaGFwZSAtIGFzc3VtZSB0aGF0XG4gICAgICAgICAgICBwb2ludCBpcyBub3Qgb24gbGluZSBhbmQgZG8gbm90IGNhbGN1bGF0ZSBkaXN0YW5jZSB0byBsaW5lICovXG4gICAgICAgIGNvbnN0IHhNaW4gPSBNYXRoLm1pbihwMS54LCBwMi54LCBwYy54KTtcbiAgICAgICAgY29uc3QgeE1heCA9IE1hdGgubWF4KHAxLngsIHAyLngsIHBjLngpO1xuICAgICAgICBjb25zdCB5TWluID0gTWF0aC5taW4ocDEueSwgcDIueSwgcGMueSk7XG4gICAgICAgIGNvbnN0IHlNYXggPSBNYXRoLm1heChwMS55LCBwMi55LCBwYy55KTtcbiAgICAgICAgLy9hZGRpbmcgYSBjb3VwbGUgb2YgcGl4ZWxzIHRvIGluY3JlYXNlIHRoZSB3aWR0aC9oZWlnaHQgb2YgdGhlIHJlY3RcbiAgICAgICAgY29uc3QgdGhyZXNob2xkID0gMjtcbiAgICAgICAgaWYgKHggPj0geE1pbiAtIHRocmVzaG9sZCAmJiB4IDw9IHhNYXggKyB0aHJlc2hvbGQgJiYgeSA+PSB5TWluIC0gdGhyZXNob2xkICYmIHkgPD0geU1heCArIHRocmVzaG9sZCkge1xuICAgICAgICAgICAgY29uc3QgdyA9IHhNYXggLSB4TWluO1xuICAgICAgICAgICAgY29uc3QgaCA9IHlNYXggLSB5TWluO1xuICAgICAgICAgICAgcmV0dXJuIHRoaXMuY2FsY3VsYXRlRGlzdFRvQ3VydmVJblJlY3QoeCwgeSwgcDEsIHBjLCBwMiwgdywgaCk7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG51bGw7XG4gICAgfVxuICAgIGNhbGN1bGF0ZURpc3RUb0N1cnZlSW5SZWN0KHgsIHksIHAwLCBwMSwgcDIsIHcsIGgpIHtcbiAgICAgICAgY29uc3Qgc3RlcExlbiA9IDM7XG4gICAgICAgIGNvbnN0IHN0ZXBzTnVtID0gTWF0aC5mbG9vcigodyArIGgpIC8gc3RlcExlbik7XG4gICAgICAgIGNvbnN0IGRlbHRhVCA9IDEgLyBzdGVwc051bTtcbiAgICAgICAgY29uc3QgYXJyWCA9IG5ldyBVaW50MzJBcnJheShzdGVwc051bSk7XG4gICAgICAgIGNvbnN0IGFyclkgPSBuZXcgVWludDMyQXJyYXkoc3RlcHNOdW0pO1xuICAgICAgICBjb25zdCBtYXhIVyA9IG5ldyBVaW50MzJBcnJheShzdGVwc051bSk7XG4gICAgICAgIGxldCBtaW5TdW1IVyA9IG51bGw7XG4gICAgICAgIGNvbnN0IGNhbmRpZGF0ZUlkeHMgPSBuZXcgQml0QXJyYXkoc3RlcHNOdW0pO1xuICAgICAgICBmb3IgKGxldCBpID0gMDsgaSA8IGFyclgubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgICAgIGNvbnN0IHQgPSBpICogZGVsdGFUO1xuICAgICAgICAgICAgY29uc3QgeE9uQ3VydmUgPSBNYXRoLnBvdygoMSAtIHQpLCAyKSAqIHAwLnggKyAyICogdCAqICgxIC0gdCkgKiBwMS54ICsgTWF0aC5wb3codCwgMikgKiBwMi54O1xuICAgICAgICAgICAgY29uc3QgeU9uQ3VydmUgPSBNYXRoLnBvdygoMSAtIHQpLCAyKSAqIHAwLnkgKyAyICogdCAqICgxIC0gdCkgKiBwMS55ICsgTWF0aC5wb3codCwgMikgKiBwMi55O1xuICAgICAgICAgICAgY29uc3QgcmVjdFcgPSBNYXRoLmFicyh4IC0geE9uQ3VydmUpO1xuICAgICAgICAgICAgY29uc3QgcmVjdEggPSBNYXRoLmFicyh5IC0geU9uQ3VydmUpO1xuICAgICAgICAgICAgY29uc3Qgc3VtSFcgPSByZWN0VyArIHJlY3RIO1xuICAgICAgICAgICAgaWYgKCFtaW5TdW1IVyB8fCBtaW5TdW1IVyA+IHN1bUhXKVxuICAgICAgICAgICAgICAgIG1pblN1bUhXID0gc3VtSFc7XG4gICAgICAgICAgICBtYXhIV1tpXSA9IE1hdGgubWF4KHJlY3RXLCByZWN0SCk7XG4gICAgICAgICAgICBhcnJYW2ldID0geE9uQ3VydmU7XG4gICAgICAgICAgICBhcnJZW2ldID0geU9uQ3VydmU7XG4gICAgICAgIH1cbiAgICAgICAgZm9yIChsZXQgaSA9IDA7IGkgPCBhcnJYLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgICAgICBpZiAobWF4SFdbaV0gPCBtaW5TdW1IVylcbiAgICAgICAgICAgICAgICBjYW5kaWRhdGVJZHhzLnNldEJpdChpLCB0cnVlLCBmYWxzZSk7XG4gICAgICAgIH1cbiAgICAgICAgbGV0IG1pbkRpc3QgPSBudWxsO1xuICAgICAgICBmb3IgKGxldCBqID0gLTE7IChqID0gY2FuZGlkYXRlSWR4cy5maW5kTmV4dChqKSkgIT09IC0xOykge1xuICAgICAgICAgICAgY29uc3QgZGlzdCA9IE1hdGguaHlwb3QoKGFyclhbal0gLSB4KSwgKGFycllbal0gLSB5KSk7XG4gICAgICAgICAgICBpZiAoIW1pbkRpc3QgfHwgbWluRGlzdCA+IGRpc3QpXG4gICAgICAgICAgICAgICAgbWluRGlzdCA9IGRpc3Q7XG4gICAgICAgIH1cbiAgICAgICAgcmV0dXJuIG1pbkRpc3Q7XG4gICAgfVxuICAgIGdldExpbmVMZW5ndGgocDF4LCBwMXksIHAyeCwgcDJ5KSB7XG4gICAgICAgIHJldHVybiBNYXRoLnNxcnQoTWF0aC5wb3cocDJ4IC0gcDF4LCAyKSArIE1hdGgucG93KHAyeSAtIHAxeSwgMikpO1xuICAgIH1cbiAgICBnZXRQb2ludE9uRGlzdGFuY2UocDF4LCBwMXksIHAyeCwgcDJ5LCBkaXN0YW5jZSwgbGVuZ3RoKSB7XG4gICAgICAgIGNvbnN0IGR4ID0gKHAyeCAtIHAxeCkgLyBsZW5ndGg7XG4gICAgICAgIGNvbnN0IGR5ID0gKHAyeSAtIHAxeSkgLyBsZW5ndGg7XG4gICAgICAgIGNvbnN0IHAzeCA9IHAyeCAtIGRpc3RhbmNlICogZHg7XG4gICAgICAgIGNvbnN0IHAzeSA9IHAyeSAtIGRpc3RhbmNlICogZHk7XG4gICAgICAgIHJldHVybiBuZXcgREcuUG9pbnQocDN4LCBwM3kpO1xuICAgIH1cbiAgICBmaW5kQ29udHJvbFBvaW50KGlkeCwgeDEsIHkxLCB4MiwgeTIsIGkpIHtcbiAgICAgICAgY29uc3QgbWlkWCA9IHgxICsgKHgyIC0geDEpIC8gMjtcbiAgICAgICAgY29uc3QgbWlkWSA9IHkxICsgKHkyIC0geTEpIC8gMjtcbiAgICAgICAgbGV0IGR4ID0gbWlkWCAtIHgxO1xuICAgICAgICBsZXQgZHkgPSBtaWRZIC0geTE7XG4gICAgICAgIGNvbnN0IGRpc3QgPSBNYXRoLnNxcnQoZHggKiBkeCArIGR5ICogZHkpO1xuICAgICAgICBkeCAvPSBkaXN0O1xuICAgICAgICBkeSAvPSBkaXN0O1xuICAgICAgICBjb25zdCBwZXJwZW5kaWN1bGFyTGVuID0gNTAgKiBNYXRoLmNlaWwoaWR4IC8gMik7XG4gICAgICAgIHJldHVybiBpZHggJSAyID09PSAwID9cbiAgICAgICAgICAgIG5ldyBERy5Qb2ludChtaWRYICsgKHBlcnBlbmRpY3VsYXJMZW4gLyAyKSAqIGR5LCBtaWRZIC0gKHBlcnBlbmRpY3VsYXJMZW4gLyAyKSAqIGR4KSA6XG4gICAgICAgICAgICBuZXcgREcuUG9pbnQobWlkWCAtIChwZXJwZW5kaWN1bGFyTGVuIC8gMikgKiBkeSwgbWlkWSArIChwZXJwZW5kaWN1bGFyTGVuIC8gMikgKiBkeCk7XG4gICAgfVxuICAgIGNhbnZhc0Fycm93KHBhdGgsIGFycm93RW5kWCwgYXJyb3dFbmRZLCBxdWFkWCwgcXVhZFkpIHtcbiAgICAgICAgY29uc3QgYXJyb3dBbmdsZSA9IE1hdGguYXRhbjIocXVhZFggLSBhcnJvd0VuZFgsIHF1YWRZIC0gYXJyb3dFbmRZKSArIE1hdGguUEk7XG4gICAgICAgIHBhdGgubW92ZVRvKGFycm93RW5kWCAtICh0aGlzLmFycm93V2lkdGggKiBNYXRoLnNpbihhcnJvd0FuZ2xlIC0gTWF0aC5QSSAvIDEwKSksIGFycm93RW5kWSAtICh0aGlzLmFycm93V2lkdGggKiBNYXRoLmNvcyhhcnJvd0FuZ2xlIC0gTWF0aC5QSSAvIDEwKSkpO1xuICAgICAgICBwYXRoLmxpbmVUbyhhcnJvd0VuZFgsIGFycm93RW5kWSk7XG4gICAgICAgIHBhdGgubGluZVRvKGFycm93RW5kWCAtICh0aGlzLmFycm93V2lkdGggKiBNYXRoLnNpbihhcnJvd0FuZ2xlICsgTWF0aC5QSSAvIDEwKSksIGFycm93RW5kWSAtICh0aGlzLmFycm93V2lkdGggKiBNYXRoLmNvcyhhcnJvd0FuZ2xlICsgTWF0aC5QSSAvIDEwKSkpO1xuICAgIH1cbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWRhdGE6YXBwbGljYXRpb24vanNvbjtiYXNlNjQsZXlKMlpYSnphVzl1SWpvekxDSm1hV3hsSWpvaWNtVnVaR1Z5TFd4cGJtVnpMVzl1TFhOd0xtcHpJaXdpYzI5MWNtTmxVbTl2ZENJNklpSXNJbk52ZFhKalpYTWlPbHNpY21WdVpHVnlMV3hwYm1WekxXOXVMWE53TG5SeklsMHNJbTVoYldWeklqcGJYU3dpYldGd2NHbHVaM01pT2lKQlFVRkJMRFJDUVVFMFFqdEJRVU0xUWl4UFFVRlBMRXRCUVVzc1JVRkJSU3hOUVVGTkxHbENRVUZwUWl4RFFVRkRPMEZCUTNSRExFOUJRVThzUlVGQlF5eFBRVUZQTEVWQlFVTXNUVUZCVFN4TlFVRk5MRU5CUVVNN1FVRkROMElzVDBGQlR5eFJRVUZSTEUxQlFVMHNZVUZCWVN4RFFVRkRPMEZCUlc1RExFMUJRVTBzUTBGQlRpeEpRVUZaTERKQ1FVbFlPMEZCU2tRc1YwRkJXU3d5UWtGQk1rSTdTVUZEYmtNc05FTkJRV0VzUTBGQlFUdEpRVU5pTERSRFFVRmhMRU5CUVVFN1NVRkRZaXhuUkVGQmFVSXNRMEZCUVR0QlFVTnlRaXhEUVVGRExFVkJTbGNzTWtKQlFUSkNMRXRCUVROQ0xESkNRVUV5UWl4UlFVbDBRenRCUVRoQ1JDeE5RVUZOTEU5QlFVOHNkMEpCUVhkQ08wbEJaMEp1UXl4SlFVRkpMR0ZCUVdFN1VVRkRaaXhQUVVGUExFbEJRVWtzUTBGQlF5eGxRVUZsTEVOQlFVTTdTVUZET1VJc1EwRkJRenRKUVVWRUxFbEJRVWtzWVVGQllTeERRVUZETEVWQlFWVTdVVUZETVVJc1NVRkJTU3hGUVVGRkxFdEJRVXNzU1VGQlNTeERRVUZETEdWQlFXVXNSVUZCUlR0WlFVTXZRaXhKUVVGSkxFTkJRVU1zWlVGQlpTeEhRVUZITEVWQlFVVXNRMEZCUXp0WlFVTXhRaXhKUVVGSkxFTkJRVU1zUlVGQlJTeERRVUZETEUxQlFVMHNRMEZCUXl4SlFVRkpMRU5CUVVNc1IwRkJSeXhEUVVGRExFTkJRVU03VTBGRE1VSTdTVUZEU0N4RFFVRkRPMGxCUlVRc1NVRkJTU3hoUVVGaExFTkJRVU1zUzBGQmEwSTdVVUZEYkVNc1NVRkJTU3hEUVVGRExGZEJRVmNzUTBGQlF5eExRVUZMTEVOQlFVTXNRMEZCUXp0UlFVTjRRaXhKUVVGSkxFTkJRVU1zUlVGQlJTeERRVUZETEUxQlFVMHNRMEZCUXl4SlFVRkpMRU5CUVVNc1IwRkJSeXhEUVVGRExFTkJRVU03U1VGRE0wSXNRMEZCUXp0SlFVVkVMRWxCUVVrc1pVRkJaU3hEUVVGRExGVkJRVzlDTzFGQlEzUkRMRWxCUVVrc1EwRkJReXhWUVVGVkxFZEJRVWNzVlVGQlZTeERRVUZETzFGQlF6ZENMRWxCUVVrc1EwRkJReXhGUVVGRkxFTkJRVU1zVFVGQlRTeERRVUZETEVsQlFVa3NRMEZCUXl4SFFVRkhMRU5CUVVNc1EwRkJRenRKUVVNelFpeERRVUZETzBsQlJVUXNXVUZCV1N4RlFVRjNRaXhGUVVGRkxFdEJRV0VzUlVGQlJTeExRVUZoTEVWQlFVVXNTMEZCYTBJc1JVRkRjRVlzWjBKQlFXZENMRWRCUVVjc01rSkJRVEpDTEVOQlFVTXNTVUZCU1RzN1VVRnNRM0pFTEc5Q1FVRmxMRWRCUVVjc1EwRkJReXhEUVVGRExFTkJRVU03VVVGRmNrSXNaMEpCUVZjc1IwRkJSeXhKUVVGSkxFOUJRVThzUlVGQmMwSXNRMEZCUXp0UlFVTm9SQ3hqUVVGVExFZEJRVWNzU1VGQlNTeFBRVUZQTEVWQlFYTkNMRU5CUVVNN1VVRkhPVU1zYjBKQlFXVXNSMEZCUnl4RFFVRkRMRU5CUVVNc1EwRkJRenRSUVVseVFpeGxRVUZWTEVkQlFVY3NSVUZCUlN4RFFVRkRPMUZCZVVKa0xFbEJRVWtzUTBGQlF5eEZRVUZGTEVkQlFVY3NSVUZCUlN4RFFVRkRPMUZCUTJJc1NVRkJTU3hEUVVGRExGRkJRVkVzUjBGQlJ5eEpRVUZKTEVOQlFVTXNSVUZCUlN4RFFVRkRMRk5CUVZVc1EwRkJReXhQUVVGUExFTkJRVU1zVFVGQlRTeERRVUZETEV0QlFVc3NRMEZCUXl4RFFVRkRPMUZCUTNwRUxFbEJRVWtzUTBGQlF5eFJRVUZSTEVkQlFVY3NTVUZCU1N4RFFVRkRMRVZCUVVVc1EwRkJReXhUUVVGVkxFTkJRVU1zVDBGQlR5eERRVUZETEUxQlFVMHNRMEZCUXl4TFFVRkxMRU5CUVVNc1EwRkJRenRSUVVONlJDeEpRVUZKTEVOQlFVTXNUVUZCVFN4SFFVRkhMRWxCUVVrc1EwRkJReXhGUVVGRkxFTkJRVU1zVDBGQlR5eEZRVUZGTEVOQlFVTXNVVUZCVVN4RFFVRkRMRU5CUVVNN1VVRkRNVU1zU1VGQlNTeERRVUZETEVkQlFVY3NSMEZCUnl4SlFVRkpMRU5CUVVNc1RVRkJUU3hEUVVGRExGVkJRVlVzUTBGQlF5eEpRVUZKTEVOQlFUWkNMRU5CUVVNN1VVRkRjRVVzU1VGQlNTeERRVUZETEdkQ1FVRm5RaXhIUVVGSExHZENRVUZuUWl4RFFVRkRPMUZCUTNwRExFbEJRVWtzUTBGQlF5eFhRVUZYTEVOQlFVTXNTMEZCU3l4RFFVRkRMRU5CUVVNN1VVRkRlRUlzU1VGQlNTeERRVUZETEZWQlFWVXNSMEZCUnl4TlFVRkJMRXRCUVVzc1EwRkJReXhWUVVGVkxHMURRVUZKTEVsQlFVa3NVVUZCVVN4RFFVRkRMRWxCUVVrc1EwRkJReXhMUVVGTExFTkJRVU1zU1VGQlNTeERRVUZETEUxQlFVMHNRMEZCUXl4RFFVRkRPMUZCUXpORkxFbEJRVWtzUTBGQlF5eExRVUZMTEVOQlFVTXNWVUZCVlR0WlFVTnVRaXhKUVVGSkxFTkJRVU1zVlVGQlZTeERRVUZETEUxQlFVMHNRMEZCUXl4SlFVRkpMRVZCUVVVc1MwRkJTeXhEUVVGRExFTkJRVU03VVVGRGRFTXNTVUZCU1N4TFFVRkxMRU5CUVVNc1UwRkJVenRaUVVOcVFpeEpRVUZKTEVOQlFVTXNWVUZCVlN4SFFVRkhMRXRCUVVzc1EwRkJReXhUUVVGVExFTkJRVU03VVVGRmNFTXNTVUZCU1N4RFFVRkRMRTFCUVUwc1EwRkJReXhYUVVGWExFZEJRVWNzUTBGQlF5eExRVUZwUWl4RlFVRkZMRVZCUVVVN1dVRkRPVU1zU1VGQlNTeEpRVUZKTEVOQlFVTXNaVUZCWlN4TFFVRkxMRU5CUVVNc1EwRkJRenRuUWtGRE4wSXNTVUZCU1N4RFFVRkRMRmRCUVZjc1EwRkJReXhKUVVGSkxFTkJRVU1zUlVGQlF5eERRVUZETEVWQlFVVXNTMEZCU3l4RFFVRkRMRTlCUVU4c1JVRkJSU3hEUVVGRExFVkJRVVVzUzBGQlN5eERRVUZETEU5QlFVOHNSVUZCUlN4RlFVRkZMRVZCUVVVc1NVRkJTU3hEUVVGRExHVkJRV1VzUlVGQlJTeExRVUZMTEVWQlFVVXNTMEZCU3l4RlFVRkRMRU5CUVVNc1EwRkJRenRSUVVONFJ5eERRVUZETEVOQlFVTTdVVUZGUml4SlFVRkpMRU5CUVVNc1RVRkJUU3hEUVVGRExGZEJRVmNzUjBGQlJ5eERRVUZETEV0QlFXbENMRVZCUVVVc1JVRkJSVHRaUVVNNVF5eEpRVUZKTEVOQlFVTXNaVUZCWlN4SFFVRkhMRWxCUVVrc1EwRkJReXhwUWtGQmFVSXNRMEZCUXl4TFFVRkxMRU5CUVVNc1QwRkJUeXhGUVVGRkxFdEJRVXNzUTBGQlF5eFBRVUZQTEVOQlFVTXNRMEZCUXp0WlFVTTFSU3hKUVVGSkxFbEJRVWtzUTBGQlF5eGxRVUZsTEV0QlFVc3NRMEZCUXl4RFFVRkRPMmRDUVVNM1FpeEpRVUZKTEVOQlFVTXNVMEZCVXl4RFFVRkRMRWxCUVVrc1EwRkJReXhGUVVGRExFTkJRVU1zUlVGQlJTeExRVUZMTEVOQlFVTXNUMEZCVHl4RlFVRkZMRU5CUVVNc1JVRkJSU3hMUVVGTExFTkJRVU1zVDBGQlR5eEZRVUZGTEVWQlFVVXNSVUZCUlN4SlFVRkpMRU5CUVVNc1pVRkJaU3hGUVVGRkxFdEJRVXNzUlVGQlJTeExRVUZMTEVWQlFVTXNRMEZCUXl4RFFVRkRPMUZCUTNSSExFTkJRVU1zUTBGQlF6dFJRVVZHTEVWQlFVVXNRMEZCUXl4UFFVRlBMRU5CUVVNc2MwSkJRWE5DTEVOQlFVTTdZVUZETDBJc1UwRkJVeXhEUVVGRExFTkJRVU1zUTBGQlRTeEZRVUZGTEVWQlFVVTdXVUZEY0VJc1NVRkJTU3hEUVVGRExGZEJRVmNzUlVGQlJTeERRVUZETzFGQlEzSkNMRU5CUVVNc1EwRkJReXhEUVVGRE8wbEJRMUFzUTBGQlF6dEpRVVZFTEZkQlFWY3NRMEZCUXl4TFFVRnJRanRSUVVNMVFpeEpRVUZKTEVOQlFVTXNTMEZCU3l4SFFVRkhMRXRCUVVzc1EwRkJRenRSUVVOdVFpeEpRVUZKTEVOQlFVTXNiVUpCUVcxQ0xFZEJRVWNzU1VGQlNTeFZRVUZWTEVOQlFVTXNTVUZCU1N4RFFVRkRMRXRCUVVzc1EwRkJReXhKUVVGSkxFTkJRVU1zVFVGQlRTeERRVUZETEVOQlFVTTdVVUZEYkVVc1NVRkJTU3hEUVVGRExFdEJRVXNzUTBGQlF5eDNRa0ZCZDBJN1dVRkRha01zU1VGQlNTeERRVUZETEhWQ1FVRjFRaXhGUVVGRkxFTkJRVU03TzFsQlJTOUNMRWxCUVVrc1EwRkJReXh0UWtGQmJVSXNRMEZCUXl4SlFVRkpMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU03U1VGRGNrTXNRMEZCUXp0SlFVVkVMRmRCUVZjN08xRkJRMVFzVFVGQlRTeE5RVUZOTEVkQlFVY3NTVUZCU1N4RFFVRkRMRVZCUVVVc1EwRkJReXhWUVVGVkxFVkJRVVVzUTBGQlF5eEpRVUZKTEVOQlFVTTdVVUZEZWtNc1RVRkJUU3h2UWtGQmIwSXNSMEZCUnl4SlFVRkpMRU5CUVVNc1MwRkJTeXhEUVVGRExFMUJRVTBzU1VGQlNTeEpRVUZKTEVOQlFVTXNTMEZCU3l4RFFVRkRMRXRCUVVzc1NVRkJTU3hKUVVGSkxFTkJRVU1zUzBGQlN5eERRVUZETEZOQlFWTXNTVUZCU1N4SlFVRkpMRU5CUVVNc1MwRkJTeXhEUVVGRExHRkJRV0VzUTBGQlF6dFJRVU4yU0N4SlFVRkpMRU5CUVVNc2IwSkJRVzlDTEVWQlFVVTdXVUZEZWtJc1NVRkJTU3hEUVVGRExFZEJRVWNzUTBGQlF5eFRRVUZUTEVkQlFVY3NUVUZCUVN4SlFVRkpMRU5CUVVNc1MwRkJTeXhEUVVGRExFdEJRVXNzYlVOQlFVa3NRMEZCUXl4RFFVRkRPMWxCUXpORExFbEJRVWtzUTBGQlF5eEhRVUZITEVOQlFVTXNWMEZCVnl4SFFVRkhMRkZCUVZFc1RVRkJRU3hKUVVGSkxFTkJRVU1zUzBGQlN5eERRVUZETEV0QlFVc3NiVU5CUVVrc1UwRkJVeXhKUVVGSkxFMUJRVUVzU1VGQlNTeERRVUZETEV0QlFVc3NRMEZCUXl4UFFVRlBMRzFEUVVGSkxFTkJRVU1zUjBGQlJ5eERRVUZETzFOQlF6VkdPMUZCUTBRc1RVRkJUU3hoUVVGaExFZEJRVWNzVFVGQlRTeERRVUZETEdkQ1FVRm5RaXhEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETEVsQlFVa3NRMEZCUXl4RlFVRkZMRU5CUVVNc1UwRkJVeXhEUVVGRExFZEJRVWNzUTBGQlF5eE5RVUZOTEVOQlFVTXNaMEpCUVdkQ0xFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXl4SlFVRkpMRU5CUVVNN1VVRkRlRWNzVFVGQlRTeE5RVUZOTEVkQlFVY3NTVUZCU1N4RFFVRkRMRVZCUVVVc1EwRkJReXhUUVVGVExFTkJRVU1zVFVGQlRTeERRVUZETzFGQlEzaERMRXRCUVVzc1NVRkJTU3hEUVVGRExFZEJRVWNzUTBGQlF5eEZRVUZGTEVOQlFVTXNSMEZCUnl4SlFVRkpMRU5CUVVNc1MwRkJTeXhEUVVGRExFbEJRVWtzUTBGQlF5eE5RVUZOTEVWQlFVVXNRMEZCUXl4RlFVRkZMRVZCUVVVN1dVRkRMME1zU1VGQlNTeE5RVUZOTEVOQlFVTXNSMEZCUnl4RFFVRkRMRWxCUVVrc1EwRkJReXhMUVVGTExFTkJRVU1zU1VGQlNTeERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRMRWxCUVVrc1RVRkJUU3hEUVVGRExFZEJRVWNzUTBGQlF5eEpRVUZKTEVOQlFVTXNTMEZCU3l4RFFVRkRMRVZCUVVVc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF5eEpRVUZKTEVsQlFVa3NRMEZCUXl4VlFVRlZMRU5CUVVNc1RVRkJUU3hEUVVGRExFTkJRVU1zUTBGQlF5eEZRVUZGTzJkQ1FVTXZSaXhKUVVGSkxFOUJRVThzUjBGQlJ5eERRVUZETEVOQlFVTTdaMEpCUTJoQ0xFMUJRVTBzUlVGQlF5eFJRVUZSTEVWQlFVVXNUVUZCVFN4RlFVRkRMRWRCUVVjc1NVRkJTU3hEUVVGRExHVkJRV1VzUTBGQlF5eE5RVUZOTEVWQlFVVXNZVUZCWVN4RlFVRkZMRU5CUVVNc1EwRkJReXhEUVVGRE8yZENRVU14UlN4TlFVRk5MRk5CUVZNc1IwRkJSeXhKUVVGSkxFTkJRVU1zUlVGQlJTeERRVUZETEdGQlFXRXNRMEZCUXl4SlFVRkpMRU5CUVVNc1VVRkJVU3hEUVVGRExFZEJRVWNzUTBGQlF5eEpRVUZKTEVOQlFVTXNTMEZCU3l4RFFVRkRMRWxCUVVrc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF5eEZRVUZGTEVsQlFVa3NRMEZCUXl4UlFVRlJMRU5CUVVNc1IwRkJSeXhEUVVGRExFbEJRVWtzUTBGQlF5eExRVUZMTEVOQlFVTXNTVUZCU1N4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF6dG5Ra0ZEZEVnc1NVRkJTU3hGUVVGRkxFZEJRVWNzVTBGQlV5eGhRVUZVTEZOQlFWTXNkVUpCUVZRc1UwRkJVeXhEUVVGRkxFTkJRVU1zUTBGQlF6dG5Ra0ZEZEVJc1NVRkJTU3hGUVVGRkxFZEJRVWNzVTBGQlV5eGhRVUZVTEZOQlFWTXNkVUpCUVZRc1UwRkJVeXhEUVVGRkxFTkJRVU1zUTBGQlF6dG5Ra0ZEZEVJc1RVRkJUU3hQUVVGUExFZEJRVWNzU1VGQlNTeERRVUZETEVWQlFVVXNRMEZCUXl4aFFVRmhMRU5CUVVNc1NVRkJTU3hEUVVGRExGRkJRVkVzUTBGQlF5eEhRVUZITEVOQlFVTXNTVUZCU1N4RFFVRkRMRXRCUVVzc1EwRkJReXhGUVVGRkxFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTXNSVUZCUlN4SlFVRkpMRU5CUVVNc1VVRkJVU3hEUVVGRExFZEJRVWNzUTBGQlF5eEpRVUZKTEVOQlFVTXNTMEZCU3l4RFFVRkRMRVZCUVVVc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTTdaMEpCUTJoSUxFbEJRVWtzUlVGQlJTeEhRVUZITEU5QlFVOHNZVUZCVUN4UFFVRlBMSFZDUVVGUUxFOUJRVThzUTBGQlJTeERRVUZETEVOQlFVTTdaMEpCUTNCQ0xFbEJRVWtzUlVGQlJTeEhRVUZITEU5QlFVOHNZVUZCVUN4UFFVRlBMSFZDUVVGUUxFOUJRVThzUTBGQlJTeERRVUZETEVOQlFVTTdaMEpCUTNCQ0xFMUJRVTBzVDBGQlR5eEhRVUZITEVsQlFVa3NRMEZCUXl4SFFVRkhMRU5CUVVNc1NVRkJTU3hEUVVGRExFVkJRVVVzUTBGQlF5eFBRVUZQTEVOQlFVTXNTMEZCU3l4RlFVRkZMRWxCUVVrc1EwRkJReXhGUVVGRkxFTkJRVU1zVDBGQlR5eERRVUZETEUxQlFVMHNRMEZCUXl4RFFVRkRPMmRDUVVONFJTeEpRVUZKTEVOQlFVTXNSMEZCUnl4RFFVRkRMRk5CUVZNc1JVRkJSU3hEUVVGRE8yZENRVU55UWl4SlFVRkpMRVZCUVVVc1NVRkJTU3hGUVVGRkxFbEJRVWtzUlVGQlJTeEpRVUZKTEVWQlFVVXNTVUZCU1N4SlFVRkpMRU5CUVVNc1MwRkJTeXhEUVVGRExFVkJRVWNzUjBGQlJ5eEZRVUZITEVWQlFVVXNSVUZCUnl4SFFVRkhMRVZCUVVjc1EwRkJReXhIUVVGSExFOUJRVThzUjBGQlJ5eEpRVUZKTEVWQlFVVTdiMEpCUXpkRkxFbEJRVWtzYjBKQlFXOUNMRVZCUVVVN2QwSkJRM2hDTEUxQlFVMHNTMEZCU3l4SFFVRkhMRU5CUVVFc1RVRkJRU3hKUVVGSkxFTkJRVU1zUzBGQlN5eERRVUZETEUxQlFVMHNNRU5CUVVjc1EwRkJReXhEUVVGRExFVkJRVU1zUTBGQlF5eERRVUZETEUxQlFVRXNTVUZCU1N4RFFVRkRMRXRCUVVzc1EwRkJReXhOUVVGTkxEQkRRVUZITEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJReXhUUVVGVExFTkJRVU03ZDBKQlF6RkZMRTFCUVUwc1QwRkJUeXhIUVVGSExFTkJRVUVzVFVGQlFTeEpRVUZKTEVOQlFVTXNTMEZCU3l4RFFVRkRMRk5CUVZNc01FTkJRVWNzUTBGQlF5eERRVUZETEVWQlFVTXNRMEZCUXl4RFFVRkRMRTFCUVVFc1NVRkJTU3hEUVVGRExFdEJRVXNzUTBGQlF5eFRRVUZUTERCRFFVRkhMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTTdkMEpCUXpGRkxFbEJRVWtzUTBGQlF5eEhRVUZITEVOQlFVTXNWMEZCVnl4SFFVRkhMRkZCUVZFc1MwRkJTeXhKUVVGSkxFOUJRVThzUjBGQlJ5eERRVUZETzNkQ1FVTnVSQ3hKUVVGSkxFTkJRVU1zUjBGQlJ5eERRVUZETEZOQlFWTXNSMEZCUnl4RFFVRkJMRTFCUVVFc1NVRkJTU3hEUVVGRExFdEJRVXNzUTBGQlF5eE5RVUZOTERCRFFVRkhMRU5CUVVNc1EwRkJReXhGUVVGRExFTkJRVU1zUTBGQlF5eE5RVUZCTEVsQlFVa3NRMEZCUXl4TFFVRkxMRU5CUVVNc1RVRkJUU3d3UTBGQlJ5eERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRE8zRkNRVU14UlR0dlFrRkRSQ3hKUVVGSkxFTkJRVU1zUzBGQlN5eEpRVUZKTEVOQlFVTXNaVUZCWlR0M1FrRkROVUlzU1VGQlNTeERRVUZETEhOQ1FVRnpRaXhEUVVGRExFbEJRVWtzUTBGQlF5eERRVUZETzI5Q1FVTndReXhOUVVGTkxGVkJRVlVzUjBGQlJ5eEpRVUZKTEVOQlFVTXNiVUpCUVcxQ0xFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTTdiMEpCUXk5RExFbEJRVWtzV1VGQldTeEhRVUZ2UWl4SlFVRkpMRU5CUVVNN2IwSkJRM3BETEVsQlFVa3NWVUZCVlN4RlFVRkZPM2RDUVVOa0xFOUJRVThzUjBGQlJ5eEpRVUZKTEVOQlFVTXNZVUZCWVN4RFFVRkRMRVZCUVVVc1JVRkJSU3hGUVVGRkxFVkJRVVVzUlVGQlJTeEZRVUZGTEVWQlFVVXNRMEZCUXl4RFFVRkRPM2RDUVVNM1F5eE5RVUZOTEc5Q1FVRnZRaXhIUVVGSExFbEJRVWtzUTBGQlF5eHJRa0ZCYTBJc1EwRkJReXhGUVVGRkxFVkJRVVVzUlVGQlJTeEZRVUZGTEVWQlFVVXNSVUZCUlN4RlFVRkZMRVZCUVVVc1RVRkJUU3hGUVVGRkxFOUJRVThzUTBGQlF5eERRVUZETzNkQ1FVTjBSaXhOUVVGTkxHMUNRVUZ0UWl4SFFVRkhMRWxCUVVrc1EwRkJReXhyUWtGQmEwSXNRMEZCUXl4RlFVRkZMRVZCUVVVc1JVRkJSU3hGUVVGRkxFVkJRVVVzUlVGQlJTeEZRVUZGTEVWQlFVVXNVVUZCVVN4RlFVRkZMRTlCUVU4c1EwRkJReXhEUVVGRE8zZENRVU4yUml4RlFVRkZMRWRCUVVjc2IwSkJRVzlDTEVOQlFVTXNRMEZCUXl4RFFVRkRPM2RDUVVNMVFpeEZRVUZGTEVkQlFVY3NiMEpCUVc5Q0xFTkJRVU1zUTBGQlF5eERRVUZETzNkQ1FVTTFRaXhGUVVGRkxFZEJRVWNzYlVKQlFXMUNMRU5CUVVNc1EwRkJReXhEUVVGRE8zZENRVU16UWl4RlFVRkZMRWRCUVVjc2JVSkJRVzFDTEVOQlFVTXNRMEZCUXl4RFFVRkRPM2RDUVVNelFpeFpRVUZaTEVkQlFVY3NTVUZCU1N4RFFVRkRMRXRCUVVzc1EwRkJReXhKUVVGSkxFTkJRVU1zUTBGQlF5eERRVUZETEVkQlFVY3NTVUZCU1N4RFFVRkRMRXRCUVVzc1EwRkJReXhGUVVGRkxFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXpzMFFrRkRjRVFzU1VGQlNTeERRVUZETEdkQ1FVRm5RaXhEUVVGRExGVkJRVlVzUlVGQlJTeEZRVUZGTEVWQlFVVXNSVUZCUlN4RlFVRkZMRVZCUVVVc1JVRkJSU3hGUVVGRkxFVkJRVVVzUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXpzMFFrRkRkRVFzU1VGQlNTeERRVUZETEdkQ1FVRm5RaXhEUVVGRExGVkJRVlVzUlVGQlJTeEZRVUZGTEVWQlFVVXNSVUZCUlN4RlFVRkZMRVZCUVVVc1JVRkJSU3hGUVVGRkxFVkJRVVVzUTBGQlF5eERRVUZETEVOQlFVTTdkMEpCUTNaRUxFbEJRVWtzUTBGQlF5eEhRVUZITEVOQlFVTXNUVUZCVFN4RFFVRkRMRVZCUVVjc1JVRkJSU3hGUVVGSExFTkJRVU1zUTBGQlF6dDNRa0ZETVVJc1NVRkJTU3hEUVVGRExFZEJRVWNzUTBGQlF5eG5Ra0ZCWjBJc1EwRkJReXhaUVVGWkxFTkJRVU1zUTBGQlF5eEZRVUZGTEZsQlFWa3NRMEZCUXl4RFFVRkRMRVZCUVVVc1JVRkJSU3hGUVVGRkxFVkJRVVVzUTBGQlF5eERRVUZETzNGQ1FVTnVSVHQ1UWtGQlRUdDNRa0ZEVEN4SlFVRkpMRU5CUVVNc1IwRkJSeXhEUVVGRExFMUJRVTBzUTBGQlF5eEZRVUZITEVWQlFVVXNSVUZCUnl4RFFVRkRMRU5CUVVNN2QwSkJRekZDTEVsQlFVa3NRMEZCUXl4SFFVRkhMRU5CUVVNc1RVRkJUU3hEUVVGRExFVkJRVVVzUlVGQlJTeEZRVUZGTEVOQlFVTXNRMEZCUXp0eFFrRkRla0k3YjBKQlEwUXNTVUZCU1N4TlFVRkJMRWxCUVVrc1EwRkJReXhMUVVGTExFTkJRVU1zVlVGQlZTeHRRMEZCU1N4TlFVRkJMRWxCUVVrc1EwRkJReXhMUVVGTExFTkJRVU1zWVVGQllTd3dRMEZCUlN4TlFVRk5MRU5CUVVNc1EwRkJReXhEUVVGRExFVkJRVVU3ZDBKQlEyaEZMRWxCUVVrc1EwRkJReXhQUVVGUE96UkNRVU5XTEU5QlFVOHNSMEZCUnl4SlFVRkpMRU5CUVVNc1lVRkJZU3hEUVVGRExFVkJRVVVzUlVGQlJTeEZRVUZGTEVWQlFVVXNSVUZCUlN4RlFVRkZMRVZCUVVVc1EwRkJReXhEUVVGRE8zZENRVU12UXl4SlFVRkpMRTlCUVU4c1IwRkJSeXhKUVVGSkxFTkJRVU1zVlVGQlZTeEZRVUZGT3pSQ1FVTTNRaXhOUVVGTkxGVkJRVlVzUjBGQlJ5eERRVUZETEZWQlFWVXNRMEZCUXl4RFFVRkRMRU5CUVVNc1NVRkJTU3hEUVVGRExHdENRVUZyUWl4RFFVRkRMRVZCUVVVc1JVRkJSU3hGUVVGRkxFVkJRVVVzUlVGQlJTeEZRVUZGTEVWQlFVVXNSVUZCUlN4TlFVRk5MRVZCUVVVc1QwRkJUeXhEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETEVsQlFVa3NRMEZCUXpzMFFrRkRha2NzVFVGQlRTeFJRVUZSTEVkQlFVY3NWVUZCVlN4RFFVRkRMRU5CUVVNc1EwRkJReXhaUVVGaExFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXl4RlFVRkZMRU5CUVVNN05FSkJRMjVFTEUxQlFVMHNVVUZCVVN4SFFVRkhMRlZCUVZVc1EwRkJReXhEUVVGRExFTkJRVU1zV1VGQllTeERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNc1JVRkJSU3hEUVVGRE96UkNRVU51UkN4SlFVRkpMRU5CUVVNc1YwRkJWeXhEUVVGRExFbEJRVWtzUTBGQlF5eEhRVUZITEVWQlFVVXNUVUZCUVN4VlFVRlZMR0ZCUVZZc1ZVRkJWU3gxUWtGQlZpeFZRVUZWTEVOQlFVVXNRMEZCUXl4dFEwRkJTU3hGUVVGRkxFVkJRVVVzVFVGQlFTeFZRVUZWTEdGQlFWWXNWVUZCVlN4MVFrRkJWaXhWUVVGVkxFTkJRVVVzUTBGQlF5eHRRMEZCU1N4RlFVRkZMRVZCUVVVc1VVRkJVU3hGUVVGRkxGRkJRVkVzUTBGQlF5eERRVUZETzNsQ1FVTXhSanR4UWtGRFJqdHZRa0ZEUkN4SlFVRkpMRU5CUVVNc1IwRkJSeXhEUVVGRExFMUJRVTBzUlVGQlJTeERRVUZETzI5Q1FVTnNRaXhKUVVGSkxFTkJRVU1zUjBGQlJ5eERRVUZETEZOQlFWTXNSVUZCUlN4RFFVRkRPMjlDUVVOeVFpeEpRVUZKTEVOQlFVTXNTMEZCU3l4SlFVRkpMRU5CUVVNc1pVRkJaVHQzUWtGRE5VSXNTVUZCU1N4RFFVRkRMSE5DUVVGelFpeERRVUZETEV0QlFVc3NRMEZCUXl4RFFVRkRPMmxDUVVOMFF6dGhRVU5HTzFOQlEwWTdVVUZEUkN4SlFVRkpMRU5CUVVNc2EwSkJRV3RDTEVWQlFVVXNRMEZCUXp0SlFVTTFRaXhEUVVGRE8wbEJSVVFzYzBKQlFYTkNMRU5CUVVNc1NVRkJZVHRSUVVOc1F5eFJRVUZSTEVsQlFVa3NRMEZCUXl4blFrRkJaMElzUlVGQlJUdFpRVU0zUWl4TFFVRkxMREpDUVVFeVFpeERRVUZETEVsQlFVa3NRMEZCUXl4RFFVRkRPMmRDUVVOeVF5eEpRVUZKTEVOQlFVTXNRMEZCUXl4RFFVRkRMRWxCUVVrc1EwRkJReXhIUVVGSExFTkJRVU1zVTBGQlV5eEpRVUZKTEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNc1NVRkJTU3hEUVVGRExFZEJRVWNzUTBGQlF5eFRRVUZUTEVsQlFVa3NRMEZCUXl4RFFVRkRPMmRDUVVONlJDeE5RVUZOTzJGQlExQTdXVUZEUkN4TFFVRkxMREpDUVVFeVFpeERRVUZETEUxQlFVMHNRMEZCUXl4RFFVRkRPMmRDUVVOMlF5eEpRVUZKTEVOQlFVTXNRMEZCUXl4RFFVRkRMRWxCUVVrc1EwRkJReXhIUVVGSExFTkJRVU1zVjBGQlZ5eERRVUZETEVOQlFVTXNRMEZCUXl4RlFVRkZMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETEVsQlFVa3NRMEZCUXl4SFFVRkhMRU5CUVVNc1YwRkJWeXhEUVVGRExFVkJRVVVzUTBGQlF5eERRVUZETzJkQ1FVTXZSQ3hOUVVGTk8yRkJRMUE3V1VGRFJEdG5Ra0ZEUlN4UFFVRlBPMU5CUTFZN1NVRkRTQ3hEUVVGRE8wbEJSVVFzWlVGQlpTeERRVUZETEUxQlFWY3NSVUZCUlN4aFFVRXJRaXhGUVVGRkxFTkJRVk03VVVGRGNrVXNTVUZCU1N4UlFVRlJMRWRCUVVjc1EwRkJReXhEUVVGRE8xRkJRMnBDTEVsQlFVa3NUVUZCVFN4SFFVRkhMRU5CUVVNc1EwRkJRenRSUVVObUxFbEJRVWtzWVVGQllTeEZRVUZGTzFsQlEycENMRkZCUVZFc1IwRkJSeXhEUVVGRExFMUJRVTBzUTBGQlF5eGhRVUZoTEVkQlFVY3NRMEZCUXl4TlFVRk5MRU5CUVVNc1lVRkJZU3hIUVVGSExFMUJRVTBzUTBGQlF5eGhRVUZoTEVOQlFVTXNSMEZCUnl4aFFVRmhMRU5CUVVNc1MwRkJTeXhEUVVGRExFbEJRVWtzUTBGQlF5eExRVUZMTEVOQlFVTXNTVUZCU1N4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU1zUjBGQlJ5eERRVUZETEVOQlFVTTdXVUZEYUVrc1RVRkJUU3hIUVVGSExFTkJRVU1zVFVGQlRTeERRVUZETEdGQlFXRXNSMEZCUnl4RFFVRkRMRTFCUVUwc1EwRkJReXhoUVVGaExFZEJRVWNzVFVGQlRTeERRVUZETEdGQlFXRXNRMEZCUXl4SFFVRkhMR0ZCUVdFc1EwRkJReXhMUVVGTExFTkJRVU1zU1VGQlNTeERRVUZETEV0QlFVc3NRMEZCUXl4RlFVRkZMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF5eEhRVUZITEVOQlFVTXNRMEZCUXp0VFFVTTNTRHRoUVVGTkxFbEJRVWtzVFVGQlRTeERRVUZETEdsQ1FVRnBRaXhGUVVGRk8xbEJRMjVETEZGQlFWRXNSMEZCUnl4TlFVRk5MRU5CUVVNc2FVSkJRV2xDTEVkQlFVY3NRMEZCUXl4RFFVRkRPMWxCUTNoRExFMUJRVTBzUjBGQlJ5eE5RVUZOTEVOQlFVTXNhVUpCUVdsQ0xFZEJRVWNzUTBGQlF5eERRVUZETzFOQlEzWkRPMUZCUTBRc1QwRkJUeXhGUVVGRExGRkJRVkVzUlVGQlJTeE5RVUZOTEVWQlFVTXNRMEZCUXp0SlFVTTFRaXhEUVVGRE8wbEJSMFFzYTBKQlFXdENPMUZCUTJoQ0xFMUJRVTBzU1VGQlNTeEhRVUZITEVsQlFVa3NUVUZCVFN4RlFVRkZMRU5CUVVNN1VVRkRNVUlzU1VGQlNTeERRVUZETEVsQlFVa3NRMEZCUXl4SlFVRkpMRU5CUVVNc1JVRkJSU3hEUVVGRExGRkJRVkVzUTBGQlF5eEpRVUZKTEVWQlFVVXNTVUZCU1N4RFFVRkRMRVZCUVVVc1EwRkJReXhSUVVGUkxFTkJRVU1zU1VGQlNTeEZRVUZGTEVsQlFVa3NRMEZCUXl4RlFVRkZMRU5CUVVNc1VVRkJVU3hEUVVGRExFdEJRVXNzUlVGQlJTeEpRVUZKTEVOQlFVTXNSVUZCUlN4RFFVRkRMRkZCUVZFc1EwRkJReXhOUVVGTkxFTkJRVU1zUTBGQlF6dFJRVU42Unl4SlFVRkpMRU5CUVVNc1IwRkJSeXhEUVVGRExGTkJRVk1zUjBGQlJ5eFBRVUZQTEVOQlFVTTdVVUZETjBJc1NVRkJTU3hEUVVGRExFZEJRVWNzUTBGQlF5eFRRVUZUTEVWQlFVVXNRMEZCUXp0UlFVTnlRaXhKUVVGSkxFTkJRVU1zUjBGQlJ5eERRVUZETEVsQlFVa3NRMEZCUXl4SlFVRkpMRU5CUVVNc1EwRkJRenRSUVVOd1FpeEpRVUZKTEVOQlFVTXNSMEZCUnl4RFFVRkRMRk5CUVZNc1JVRkJSU3hEUVVGRE8wbEJRM1pDTEVOQlFVTTdTVUZGUkN4MVFrRkJkVUk3VVVGRGNrSXNUVUZCVFN4cFFrRkJhVUlzUjBGQlJ5eEpRVUZKTEZGQlFWRXNRMEZCUXl4SlFVRkpMRU5CUVVNc1MwRkJTeXhEUVVGRExFbEJRVWtzUTBGQlF5eE5RVUZOTEVOQlFVTXNRMEZCUXp0UlFVTXZSQ3hwUWtGQmFVSXNRMEZCUXl4TlFVRk5MRU5CUVVNc1NVRkJTU3hEUVVGRExFTkJRVU03VVVGREwwSXNTMEZCU3l4SlFVRkpMRU5CUVVNc1IwRkJSeXhEUVVGRExFTkJRVU1zUlVGQlJTeERRVUZETEVOQlFVTXNSMEZCUnl4cFFrRkJhVUlzUTBGQlF5eFJRVUZSTEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNc1MwRkJTeXhEUVVGRExFTkJRVU1zUjBGQlJ6dFpRVU0xUkN4TlFVRk5MRmxCUVZrc1IwRkJSeXhEUVVGRExFTkJRVU03V1VGRGRrSXNUVUZCVFN4RlFVRkZMRWRCUVVjc1NVRkJTU3hEUVVGRExFdEJRVXNzUTBGQlF5eEpRVUZKTEVOQlFVTXNXVUZCV1N4RFFVRkRMRU5CUVVNN1dVRkRla01zVFVGQlRTeEZRVUZGTEVkQlFVY3NTVUZCU1N4RFFVRkRMRXRCUVVzc1EwRkJReXhGUVVGRkxFTkJRVU1zV1VGQldTeERRVUZETEVOQlFVTTdXVUZEZGtNc1NVRkJTU3haUVVGWkxFZEJRVWNzUTBGQlF5eERRVUZETzFsQlEzSkNMRXRCUVVzc1NVRkJTU3hEUVVGRExFZEJRVWNzUTBGQlF5eEZRVUZGTEVOQlFVTXNRMEZCUXl4SFFVRkhMR2xDUVVGcFFpeERRVUZETEZGQlFWRXNRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJReXhMUVVGTExFTkJRVU1zUTBGQlF5eEhRVUZITzJkQ1FVTXpSQ3hOUVVGTkxHVkJRV1VzUjBGQlJ5eEpRVUZKTEVOQlFVTXNTMEZCU3l4RFFVRkRMRWxCUVVrc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF6dG5Ra0ZETTBNc1RVRkJUU3hsUVVGbExFZEJRVWNzU1VGQlNTeERRVUZETEV0QlFVc3NRMEZCUXl4RlFVRkZMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU03WjBKQlEzcERMRWxCUVVrc1pVRkJaU3hMUVVGTExFVkJRVVVzU1VGQlNTeGxRVUZsTEV0QlFVc3NSVUZCUlR0dlFrRkRlRU1zWlVGQlpTeExRVUZMTEVWQlFVVXNTVUZCU1N4bFFVRmxMRXRCUVVzc1JVRkJSU3hGUVVGRk8yOUNRVU0xUkN4SlFVRkpMRU5CUVVNc2JVSkJRVzFDTEVOQlFVTXNRMEZCUXl4RFFVRkRMRWRCUVVjc1JVRkJSU3haUVVGWkxFTkJRVU03YjBKQlF6ZERMR2xDUVVGcFFpeERRVUZETEUxQlFVMHNRMEZCUXl4RFFVRkRMRVZCUVVVc1MwRkJTeXhGUVVGRkxFdEJRVXNzUTBGQlF5eERRVUZETzJsQ1FVTXpRenRoUVVOR08xbEJRMFFzU1VGQlNTeFpRVUZaTEVkQlFVY3NRMEZCUXp0blFrRkRiRUlzU1VGQlNTeERRVUZETEcxQ1FVRnRRaXhEUVVGRExGbEJRVmtzUTBGQlF5eEhRVUZITEVOQlFVTXNRMEZCUXp0WlFVTTNReXhwUWtGQmFVSXNRMEZCUXl4TlFVRk5MRU5CUVVNc1EwRkJReXhGUVVGRkxFdEJRVXNzUlVGQlJTeExRVUZMTEVOQlFVTXNRMEZCUXp0VFFVTXpRenRKUVVOSUxFTkJRVU03U1VGRlJDeHBRa0ZCYVVJc1EwRkJReXhEUVVGVExFVkJRVVVzUTBGQlV6dFJRVU53UXl4SlFVRkpMRmxCUVZrc1IwRkJSeXhEUVVGRExFTkJRVU1zUTBGQlF6dFJRVU4wUWl4SlFVRkpMRTlCUVU4c1IwRkJSeXhKUVVGSkxFTkJRVU03VVVGRGJrSXNTVUZCU1N4SlFVRkpMRWRCUVVjc1NVRkJTU3hEUVVGRE8xRkJRMmhDTEUxQlFVMHNUVUZCVFN4SFFVRkhMRWxCUVVrc1EwRkJReXhGUVVGRkxFTkJRVU1zVlVGQlZTeEZRVUZGTEVOQlFVTXNTVUZCU1N4RFFVRkRPMUZCUTNwRExFMUJRVTBzWVVGQllTeEhRVUZITEUxQlFVMHNRMEZCUXl4blFrRkJaMElzUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXl4SlFVRkpMRU5CUVVNc1JVRkJSU3hEUVVGRExGTkJRVk1zUTBGQlF5eEhRVUZITEVOQlFVTXNUVUZCVFN4RFFVRkRMR2RDUVVGblFpeERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNc1NVRkJTU3hEUVVGRE8xRkJRM2hITEUxQlFVMHNUVUZCVFN4SFFVRkhMRWxCUVVrc1EwRkJReXhGUVVGRkxFTkJRVU1zVTBGQlV5eERRVUZETEUxQlFVMHNRMEZCUXp0UlFVTjRReXhMUVVGTExFbEJRVWtzUTBGQlF5eEhRVUZITEVOQlFVTXNSVUZCUlN4RFFVRkRMRWRCUVVjc1NVRkJTU3hEUVVGRExFdEJRVXNzUTBGQlF5eEpRVUZKTEVOQlFVTXNUVUZCVFN4RlFVRkZMRU5CUVVNc1JVRkJSU3hGUVVGRk8xbEJReTlETEVsQlFVa3NUVUZCVFN4RFFVRkRMRWRCUVVjc1EwRkJReXhKUVVGSkxFTkJRVU1zUzBGQlN5eERRVUZETEVsQlFVa3NRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJReXhKUVVGSkxFMUJRVTBzUTBGQlF5eEhRVUZITEVOQlFVTXNTVUZCU1N4RFFVRkRMRXRCUVVzc1EwRkJReXhGUVVGRkxFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTXNTVUZCU1N4SlFVRkpMRU5CUVVNc1ZVRkJWU3hEUVVGRExFMUJRVTBzUTBGQlF5eERRVUZETEVOQlFVTXNSVUZCUlR0blFrRkRMMFlzVFVGQlRTeEZRVUZETEZGQlFWRXNSVUZCUlN4TlFVRk5MRVZCUVVNc1IwRkJSeXhKUVVGSkxFTkJRVU1zWlVGQlpTeERRVUZETEUxQlFVMHNSVUZCUlN4aFFVRmhMRVZCUVVVc1EwRkJReXhEUVVGRExFTkJRVU03WjBKQlF6RkZMRTFCUVUwc1MwRkJTeXhIUVVGSExFbEJRVWtzUTBGQlF5eEZRVUZGTEVOQlFVTXNZVUZCWVN4RFFVRkRMRWxCUVVrc1EwRkJReXhSUVVGUkxFTkJRVU1zUjBGQlJ5eERRVUZETEVsQlFVa3NRMEZCUXl4TFFVRkxMRU5CUVVNc1NVRkJTU3hEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETEVWQlFVVXNTVUZCU1N4RFFVRkRMRkZCUVZFc1EwRkJReXhIUVVGSExFTkJRVU1zU1VGQlNTeERRVUZETEV0QlFVc3NRMEZCUXl4SlFVRkpMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETzJkQ1FVTnNTQ3hOUVVGTkxFZEJRVWNzUjBGQlJ5eEpRVUZKTEVOQlFVTXNSVUZCUlN4RFFVRkRMR0ZCUVdFc1EwRkJReXhKUVVGSkxFTkJRVU1zVVVGQlVTeERRVUZETEVkQlFVY3NRMEZCUXl4SlFVRkpMRU5CUVVNc1MwRkJTeXhEUVVGRExFVkJRVVVzUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXl4RlFVRkZMRWxCUVVrc1EwRkJReXhSUVVGUkxFTkJRVU1zUjBGQlJ5eERRVUZETEVsQlFVa3NRMEZCUXl4TFFVRkxMRU5CUVVNc1JVRkJSU3hEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXp0blFrRkROVWNzU1VGQlNTeEpRVUZKTEVOQlFVTXNiVUpCUVcxQ0xFTkJRVU1zUTBGQlF5eERRVUZETEVWQlFVVTdiMEpCUXk5Q0xFMUJRVTBzUjBGQlJ5eEhRVUZITEVsQlFVa3NRMEZCUXl4aFFVRmhMRU5CUVVNc1MwRkJTeXhEUVVGRExFTkJRVU1zUlVGQlJTeExRVUZMTEVOQlFVTXNRMEZCUXl4RlFVRkZMRWRCUVVjc1EwRkJReXhEUVVGRExFVkJRVVVzUjBGQlJ5eERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRPMjlDUVVNdlJDeE5RVUZOTEZWQlFWVXNSMEZCUnl4SlFVRkpMRU5CUVVNc2EwSkJRV3RDTEVOQlFVTXNTMEZCU3l4RFFVRkRMRU5CUVVNc1JVRkJSU3hMUVVGTExFTkJRVU1zUTBGQlF5eEZRVUZGTEVkQlFVY3NRMEZCUXl4RFFVRkRMRVZCUVVVc1IwRkJSeXhEUVVGRExFTkJRVU1zUlVGQlJTeE5RVUZOTEVWQlFVVXNSMEZCUnl4RFFVRkRMRU5CUVVNN2IwSkJRM2hHTEUxQlFVMHNVVUZCVVN4SFFVRkhMRWxCUVVrc1EwRkJReXhyUWtGQmEwSXNRMEZCUXl4SFFVRkhMRU5CUVVNc1EwRkJReXhGUVVGRkxFZEJRVWNzUTBGQlF5eERRVUZETEVWQlFVVXNTMEZCU3l4aFFVRk1MRXRCUVVzc2RVSkJRVXdzUzBGQlN5eERRVUZGTEVOQlFVTXNSVUZCUlN4TFFVRkxMR0ZCUVV3c1MwRkJTeXgxUWtGQlRDeExRVUZMTEVOQlFVVXNRMEZCUXl4RlFVRkZMRkZCUVZFc1JVRkJSU3hIUVVGSExFTkJRVU1zUTBGQlF6dHZRa0ZETVVZc1RVRkJUU3haUVVGWkxFZEJRVWNzU1VGQlNTeERRVUZETEV0QlFVc3NRMEZCUXl4SlFVRkpMRU5CUVVNc1EwRkJReXhEUVVGRExFZEJRVWNzU1VGQlNTeERRVUZETEV0QlFVc3NRMEZCUXl4RlFVRkZMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF6dDNRa0ZETVVRc1NVRkJTU3hEUVVGRExHZENRVUZuUWl4RFFVRkRMRWxCUVVrc1EwRkJReXh0UWtGQmJVSXNRMEZCUXl4RFFVRkRMRU5CUVVNc1JVRkJSU3hWUVVGVkxFTkJRVU1zUTBGQlF5eEZRVUZGTEZWQlFWVXNRMEZCUXl4RFFVRkRMRVZCUVVVc1VVRkJVU3hEUVVGRExFTkJRVU1zUlVGQlJTeFJRVUZSTEVOQlFVTXNRMEZCUXl4RlFVRkZMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU03ZDBKQlF6TkhMRWxCUVVrc1EwRkJReXhuUWtGQlowSXNRMEZCUXl4SlFVRkpMRU5CUVVNc2JVSkJRVzFDTEVOQlFVTXNRMEZCUXl4RFFVRkRMRVZCUVVVc1VVRkJVU3hEUVVGRExFTkJRVU1zUlVGQlJTeFJRVUZSTEVOQlFVTXNRMEZCUXl4RlFVRkZMRlZCUVZVc1EwRkJReXhEUVVGRExFVkJRVVVzVlVGQlZTeERRVUZETEVOQlFVTXNSVUZCUlN4RFFVRkRMRU5CUVVNc1EwRkJRenR2UWtGRE5VY3NTVUZCU1N4SFFVRkhMRWxCUVVrc1EwRkJReXgzUWtGQmQwSXNRMEZCUXl4RFFVRkRMRVZCUVVVc1EwRkJReXhGUVVGRkxFTkJRVU1zUlVGQlJTeFZRVUZWTEVWQlFVVXNVVUZCVVN4RlFVRkZMRmxCUVZrc1EwRkJReXhEUVVGRE8ybENRVU51Ump0eFFrRkJUVHR2UWtGRFRDeEpRVUZKTEVkQlFVY3NTVUZCU1N4RFFVRkRMREpDUVVFeVFpeERRVUZETEVOQlFVTXNSVUZCUlN4RFFVRkRMRVZCUVVVc1MwRkJTeXhGUVVGRkxFZEJRVWNzUTBGQlF5eERRVUZETzJsQ1FVTXpSRHRuUWtGRFJDeEpRVUZKTEVOQlFVTXNRMEZCUXl4UFFVRlBMRWxCUVVrc1NVRkJTU3hMUVVGTExFbEJRVWtzU1VGQlNTeEpRVUZKTEVkQlFVY3NRMEZCUXl4RFFVRkRMRWxCUVVrc1QwRkJUeXhKUVVGSkxFbEJRVWtzUzBGQlN5eEpRVUZKTEVsQlFVa3NTVUZCU1N4SFFVRkhMRTlCUVU4c1JVRkJSVHR2UWtGRGVrWXNUMEZCVHl4SFFVRkhMRWxCUVVrc1EwRkJRenR2UWtGRFppeFpRVUZaTEVkQlFVY3NRMEZCUXl4RFFVRkRPMmxDUVVOc1FqdGhRVU5HTzFOQlEwWTdVVUZEUkN4UFFVRlBMRmxCUVZrc1EwRkJRenRKUVVOMFFpeERRVUZETzBsQlJVUXNNa0pCUVRKQ0xFTkJRVU1zUTBGQlV5eEZRVUZGTEVOQlFWTXNSVUZCUlN4RlFVRlpMRVZCUVVVc1JVRkJXVHRSUVVNeFJUdDVSVUZEYVVVN1VVRkRha1VzVFVGQlRTeEpRVUZKTEVkQlFVY3NTVUZCU1N4RFFVRkRMRWRCUVVjc1EwRkJReXhGUVVGRkxFTkJRVU1zUTBGQlF5eEZRVUZGTEVWQlFVVXNRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJRenRSUVVOc1F5eE5RVUZOTEVsQlFVa3NSMEZCUnl4SlFVRkpMRU5CUVVNc1IwRkJSeXhEUVVGRExFVkJRVVVzUTBGQlF5eERRVUZETEVWQlFVVXNSVUZCUlN4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRE8xRkJRMnhETEUxQlFVMHNTVUZCU1N4SFFVRkhMRWxCUVVrc1EwRkJReXhIUVVGSExFTkJRVU1zUlVGQlJTeERRVUZETEVOQlFVTXNSVUZCUlN4RlFVRkZMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU03VVVGRGJFTXNUVUZCVFN4SlFVRkpMRWRCUVVjc1NVRkJTU3hEUVVGRExFZEJRVWNzUTBGQlF5eEZRVUZGTEVOQlFVTXNRMEZCUXl4RlFVRkZMRVZCUVVVc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF6dFJRVVZzUXl4dlJVRkJiMFU3VVVGRGNFVXNUVUZCVFN4VFFVRlRMRWRCUVVjc1EwRkJReXhEUVVGRE8xRkJRM0JDTEU5QlFVOHNRMEZCUXl4SlFVRkpMRWxCUVVrc1IwRkJSeXhUUVVGVExFbEJRVWtzUTBGQlF5eEpRVUZKTEVsQlFVa3NSMEZCUnl4VFFVRlRMRWxCUVVrc1EwRkJReXhKUVVGSkxFbEJRVWtzUjBGQlJ5eFRRVUZUTEVsQlFVa3NRMEZCUXl4SlFVRkpMRWxCUVVrc1IwRkJSeXhUUVVGVExFTkJRVU1zUTBGQlF6dFpRVU4yUnl4SlFVRkpMRU5CUVVNc2VVSkJRWGxDTEVOQlFVTXNRMEZCUXl4RlFVRkZMRU5CUVVNc1JVRkJSU3hGUVVGRkxFVkJRVVVzUlVGQlJTeERRVUZETEVOQlFVTXNRMEZCUXp0WlFVTTVReXhKUVVGSkxFTkJRVU03U1VGRFZDeERRVUZETzBsQlJVUXNlVUpCUVhsQ0xFTkJRVU1zUTBGQlV5eEZRVUZGTEVOQlFWTXNSVUZCUlN4RlFVRlpMRVZCUVVVc1JVRkJXVHRSUVVONFJTeE5RVUZOTEVsQlFVa3NSMEZCUnl4RFFVRkRMRVZCUVZVc1JVRkJSU3hGUVVGVkxFVkJRVVVzUlVGQlZTeEZRVUZGTEVWQlFWVXNSVUZCUlN4RlFVRkZMRU5CUVVNc1NVRkJTU3hEUVVGRExFZEJRVWNzUTBGQlF5eERRVUZETEVWQlFVVXNSMEZCUnl4RlFVRkZMRU5CUVVNc1JVRkJSU3hEUVVGRExFTkJRVU1zUjBGQlJ5eEpRVUZKTEVOQlFVTXNSMEZCUnl4RFFVRkRMRU5CUVVNc1JVRkJSU3hIUVVGSExFVkJRVVVzUTBGQlF5eEZRVUZGTEVOQlFVTXNRMEZCUXl4RFFVRkRPMUZCUTJwSUxFMUJRVTBzUTBGQlF5eEhRVUZITEVsQlFVa3NRMEZCUXl4RlFVRkZMRU5CUVVNc1EwRkJReXhGUVVGRkxFVkJRVVVzUTBGQlF5eERRVUZETEVWQlFVVXNSVUZCUlN4RFFVRkRMRU5CUVVNc1JVRkJSU3hGUVVGRkxFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTTdVVUZEZGtNc1NVRkJTU3hEUVVGRExFbEJRVWtzUTBGQlF6dFpRVUZGTEU5QlFVOHNTVUZCU1N4RFFVRkRMRU5CUVVNc1JVRkJSU3hEUVVGRExFVkJRVVVzUlVGQlJTeERRVUZETEVOQlFVTXNSVUZCUlN4RlFVRkZMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU03VVVGRE1VTXNTVUZCU1N4RFFVRkRMRWRCUVVjc1EwRkJReXhEUVVGRExFTkJRVU1zUjBGQlJ5eEZRVUZGTEVOQlFVTXNRMEZCUXl4RFFVRkRMRWRCUVVjc1EwRkJReXhGUVVGRkxFTkJRVU1zUTBGQlF5eEhRVUZITEVWQlFVVXNRMEZCUXl4RFFVRkRMRU5CUVVNc1IwRkJSeXhEUVVGRExFTkJRVU1zUjBGQlJ5eEZRVUZGTEVOQlFVTXNRMEZCUXl4RFFVRkRMRWRCUVVjc1EwRkJReXhGUVVGRkxFTkJRVU1zUTBGQlF5eEhRVUZITEVWQlFVVXNRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJReXhIUVVGSExFTkJRVU1zUTBGQlF6dFJRVU4wUlN4RFFVRkRMRWRCUVVjc1NVRkJTU3hEUVVGRExFZEJRVWNzUTBGQlF5eERRVUZETEVWQlFVVXNTVUZCU1N4RFFVRkRMRWRCUVVjc1EwRkJReXhEUVVGRExFVkJRVVVzUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXp0UlFVTm9ReXhQUVVGUExFbEJRVWtzUTBGQlF5eERRVUZETEVWQlFVVXNRMEZCUXl4RlFVRkZMRVZCUVVVc1EwRkJReXhEUVVGRExFZEJRVWNzUTBGQlF5eEhRVUZITEVOQlFVTXNSVUZCUlN4RFFVRkRMRU5CUVVNc1IwRkJSeXhGUVVGRkxFTkJRVU1zUTBGQlF5eERRVUZETEVWQlFVVXNSVUZCUlN4RFFVRkRMRU5CUVVNc1IwRkJSeXhEUVVGRExFZEJRVWNzUTBGQlF5eEZRVUZGTEVOQlFVTXNRMEZCUXl4SFFVRkhMRVZCUVVVc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETzBsQlEzaEZMRU5CUVVNN1NVRkZSQ3gzUWtGQmQwSXNRMEZCUXl4RFFVRlRMRVZCUVVVc1EwRkJVeXhGUVVGRkxFTkJRVk1zUlVGQlJTeEZRVUZaTEVWQlFVVXNSVUZCV1N4RlFVTnNSaXhGUVVGWk8xRkJRMW83ZVVWQlEybEZPMUZCUTJwRkxFMUJRVTBzU1VGQlNTeEhRVUZITEVsQlFVa3NRMEZCUXl4SFFVRkhMRU5CUVVNc1JVRkJSU3hEUVVGRExFTkJRVU1zUlVGQlJTeEZRVUZGTEVOQlFVTXNRMEZCUXl4RlFVRkZMRVZCUVVVc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF6dFJRVU40UXl4TlFVRk5MRWxCUVVrc1IwRkJSeXhKUVVGSkxFTkJRVU1zUjBGQlJ5eERRVUZETEVWQlFVVXNRMEZCUXl4RFFVRkRMRVZCUVVVc1JVRkJSU3hEUVVGRExFTkJRVU1zUlVGQlJTeEZRVUZGTEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNN1VVRkRlRU1zVFVGQlRTeEpRVUZKTEVkQlFVY3NTVUZCU1N4RFFVRkRMRWRCUVVjc1EwRkJReXhGUVVGRkxFTkJRVU1zUTBGQlF5eEZRVUZGTEVWQlFVVXNRMEZCUXl4RFFVRkRMRVZCUVVVc1JVRkJSU3hEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETzFGQlEzaERMRTFCUVUwc1NVRkJTU3hIUVVGSExFbEJRVWtzUTBGQlF5eEhRVUZITEVOQlFVTXNSVUZCUlN4RFFVRkRMRU5CUVVNc1JVRkJSU3hGUVVGRkxFTkJRVU1zUTBGQlF5eEZRVUZGTEVWQlFVVXNRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJRenRSUVVWNFF5eHZSVUZCYjBVN1VVRkRjRVVzVFVGQlRTeFRRVUZUTEVkQlFVY3NRMEZCUXl4RFFVRkRPMUZCUTNCQ0xFbEJRVWtzUTBGQlF5eEpRVUZKTEVsQlFVa3NSMEZCUnl4VFFVRlRMRWxCUVVrc1EwRkJReXhKUVVGSkxFbEJRVWtzUjBGQlJ5eFRRVUZUTEVsQlFVa3NRMEZCUXl4SlFVRkpMRWxCUVVrc1IwRkJSeXhUUVVGVExFbEJRVWtzUTBGQlF5eEpRVUZKTEVsQlFVa3NSMEZCUnl4VFFVRlRMRVZCUVVVN1dVRkRjRWNzVFVGQlRTeERRVUZETEVkQlFVY3NTVUZCU1N4SFFVRkhMRWxCUVVrc1EwRkJRenRaUVVOMFFpeE5RVUZOTEVOQlFVTXNSMEZCUnl4SlFVRkpMRWRCUVVjc1NVRkJTU3hEUVVGRE8xbEJRM1JDTEU5QlFVOHNTVUZCU1N4RFFVRkRMREJDUVVFd1FpeERRVUZETEVOQlFVTXNSVUZCUlN4RFFVRkRMRVZCUVVVc1JVRkJSU3hGUVVGRkxFVkJRVVVzUlVGQlJTeEZRVUZGTEVWQlFVVXNRMEZCUXl4RlFVRkZMRU5CUVVNc1EwRkJReXhEUVVGRE8xTkJRMmhGTzFGQlEwUXNUMEZCVHl4SlFVRkpMRU5CUVVNN1NVRkRaQ3hEUVVGRE8wbEJSVVFzTUVKQlFUQkNMRU5CUVVNc1EwRkJVeXhGUVVGRkxFTkJRVk1zUlVGQlJTeEZRVUZaTEVWQlFVVXNSVUZCV1N4RlFVRkZMRVZCUVZrc1JVRkRka1lzUTBGQlV5eEZRVUZGTEVOQlFWTTdVVUZEY0VJc1RVRkJUU3hQUVVGUExFZEJRVWNzUTBGQlF5eERRVUZETzFGQlEyeENMRTFCUVUwc1VVRkJVU3hIUVVGSExFbEJRVWtzUTBGQlF5eExRVUZMTEVOQlFVTXNRMEZCUXl4RFFVRkRMRWRCUVVjc1EwRkJReXhEUVVGRExFZEJRVWNzVDBGQlR5eERRVUZETEVOQlFVTTdVVUZETDBNc1RVRkJUU3hOUVVGTkxFZEJRVWNzUTBGQlF5eEhRVUZITEZGQlFWRXNRMEZCUXp0UlFVTTFRaXhOUVVGTkxFbEJRVWtzUjBGQlJ5eEpRVUZKTEZkQlFWY3NRMEZCUXl4UlFVRlJMRU5CUVVNc1EwRkJRenRSUVVOMlF5eE5RVUZOTEVsQlFVa3NSMEZCUnl4SlFVRkpMRmRCUVZjc1EwRkJReXhSUVVGUkxFTkJRVU1zUTBGQlF6dFJRVU4yUXl4TlFVRk5MRXRCUVVzc1IwRkJSeXhKUVVGSkxGZEJRVmNzUTBGQlF5eFJRVUZSTEVOQlFVTXNRMEZCUXp0UlFVTjRReXhKUVVGSkxGRkJRVkVzUjBGQmEwSXNTVUZCU1N4RFFVRkRPMUZCUTI1RExFMUJRVTBzWVVGQllTeEhRVUZITEVsQlFVa3NVVUZCVVN4RFFVRkRMRkZCUVZFc1EwRkJReXhEUVVGRE8xRkJRemRETEV0QlFVc3NTVUZCU1N4RFFVRkRMRWRCUVVjc1EwRkJReXhGUVVGRkxFTkJRVU1zUjBGQlJ5eEpRVUZKTEVOQlFVTXNUVUZCVFN4RlFVRkZMRU5CUVVNc1JVRkJSU3hGUVVGRk8xbEJRM0JETEUxQlFVMHNRMEZCUXl4SFFVRkhMRU5CUVVNc1IwRkJSeXhOUVVGTkxFTkJRVU03V1VGRGNrSXNUVUZCVFN4UlFVRlJMRWRCUVVjc1NVRkJTU3hEUVVGRExFZEJRVWNzUTBGQlF5eERRVUZETEVOQlFVTXNSMEZCUnl4RFFVRkRMRU5CUVVNc1JVRkJSU3hEUVVGRExFTkJRVU1zUjBGQlJ5eEZRVUZGTEVOQlFVTXNRMEZCUXl4SFFVRkhMRU5CUVVNc1IwRkJSeXhEUVVGRExFZEJRVWNzUTBGQlF5eERRVUZETEVkQlFVY3NRMEZCUXl4RFFVRkRMRWRCUVVjc1JVRkJSU3hEUVVGRExFTkJRVU1zUjBGQlJ5eEpRVUZKTEVOQlFVTXNSMEZCUnl4RFFVRkRMRU5CUVVNc1JVRkJSU3hEUVVGRExFTkJRVU1zUjBGQlJ5eEZRVUZGTEVOQlFVTXNRMEZCUXl4RFFVRkRPMWxCUXpsR0xFMUJRVTBzVVVGQlVTeEhRVUZITEVsQlFVa3NRMEZCUXl4SFFVRkhMRU5CUVVNc1EwRkJReXhEUVVGRExFZEJRVWNzUTBGQlF5eERRVUZETEVWQlFVVXNRMEZCUXl4RFFVRkRMRWRCUVVjc1JVRkJSU3hEUVVGRExFTkJRVU1zUjBGQlJ5eERRVUZETEVkQlFVY3NRMEZCUXl4SFFVRkhMRU5CUVVNc1EwRkJReXhIUVVGSExFTkJRVU1zUTBGQlF5eEhRVUZITEVWQlFVVXNRMEZCUXl4RFFVRkRMRWRCUVVjc1NVRkJTU3hEUVVGRExFZEJRVWNzUTBGQlF5eERRVUZETEVWQlFVVXNRMEZCUXl4RFFVRkRMRWRCUVVjc1JVRkJSU3hEUVVGRExFTkJRVU1zUTBGQlF6dFpRVU01Uml4TlFVRk5MRXRCUVVzc1IwRkJSeXhKUVVGSkxFTkJRVU1zUjBGQlJ5eERRVUZETEVOQlFVTXNSMEZCUnl4UlFVRlJMRU5CUVVNc1EwRkJRenRaUVVOeVF5eE5RVUZOTEV0QlFVc3NSMEZCUnl4SlFVRkpMRU5CUVVNc1IwRkJSeXhEUVVGRExFTkJRVU1zUjBGQlJ5eFJRVUZSTEVOQlFVTXNRMEZCUXp0WlFVTnlReXhOUVVGTkxFdEJRVXNzUjBGQlJ5eExRVUZMTEVkQlFVY3NTMEZCU3l4RFFVRkRPMWxCUXpWQ0xFbEJRVWtzUTBGQlF5eFJRVUZSTEVsQlFVa3NVVUZCVVN4SFFVRkhMRXRCUVVzN1owSkJReTlDTEZGQlFWRXNSMEZCUnl4TFFVRkxMRU5CUVVNN1dVRkRia0lzUzBGQlN5eERRVUZETEVOQlFVTXNRMEZCUXl4SFFVRkhMRWxCUVVrc1EwRkJReXhIUVVGSExFTkJRVU1zUzBGQlN5eEZRVUZGTEV0QlFVc3NRMEZCUXl4RFFVRkRPMWxCUTJ4RExFbEJRVWtzUTBGQlF5eERRVUZETEVOQlFVTXNSMEZCUnl4UlFVRlJMRU5CUVVNN1dVRkRia0lzU1VGQlNTeERRVUZETEVOQlFVTXNRMEZCUXl4SFFVRkhMRkZCUVZFc1EwRkJRenRUUVVOd1FqdFJRVU5FTEV0QlFVc3NTVUZCU1N4RFFVRkRMRWRCUVVjc1EwRkJReXhGUVVGRkxFTkJRVU1zUjBGQlJ5eEpRVUZKTEVOQlFVTXNUVUZCVFN4RlFVRkZMRU5CUVVNc1JVRkJSU3hGUVVGRk8xbEJRM0JETEVsQlFVa3NTMEZCU3l4RFFVRkRMRU5CUVVNc1EwRkJReXhIUVVGSExGRkJRVk03WjBKQlEzUkNMR0ZCUVdFc1EwRkJReXhOUVVGTkxFTkJRVU1zUTBGQlF5eEZRVUZGTEVsQlFVa3NSVUZCUlN4TFFVRkxMRU5CUVVNc1EwRkJRenRUUVVONFF6dFJRVU5FTEVsQlFVa3NUMEZCVHl4SFFVRnJRaXhKUVVGSkxFTkJRVU03VVVGRGJFTXNTMEZCU3l4SlFVRkpMRU5CUVVNc1IwRkJSeXhEUVVGRExFTkJRVU1zUlVGQlJTeERRVUZETEVOQlFVTXNSMEZCUnl4aFFVRmhMRU5CUVVNc1VVRkJVU3hEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETEV0QlFVc3NRMEZCUXl4RFFVRkRMRWRCUVVjN1dVRkRlRVFzVFVGQlRTeEpRVUZKTEVkQlFVY3NTVUZCU1N4RFFVRkRMRXRCUVVzc1EwRkJReXhEUVVGRExFbEJRVWtzUTBGQlF5eERRVUZETEVOQlFVTXNSMEZCUnl4RFFVRkRMRU5CUVVNc1JVRkJSU3hEUVVGRExFbEJRVWtzUTBGQlF5eERRVUZETEVOQlFVTXNSMEZCUnl4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRE8xbEJRM1JFTEVsQlFVa3NRMEZCUXl4UFFVRlBMRWxCUVVrc1QwRkJUeXhIUVVGSExFbEJRVWs3WjBKQlF6VkNMRTlCUVU4c1IwRkJSeXhKUVVGSkxFTkJRVU03VTBGRGJFSTdVVUZEUkN4UFFVRlBMRTlCUVZFc1EwRkJRenRKUVVOc1FpeERRVUZETzBsQlJVUXNZVUZCWVN4RFFVRkRMRWRCUVZjc1JVRkJSU3hIUVVGWExFVkJRVVVzUjBGQlZ5eEZRVUZGTEVkQlFWYzdVVUZET1VRc1QwRkJUeXhKUVVGSkxFTkJRVU1zU1VGQlNTeERRVUZETEVsQlFVa3NRMEZCUXl4SFFVRkhMRU5CUVVNc1IwRkJSeXhIUVVGSExFZEJRVWNzUlVGQlJTeERRVUZETEVOQlFVTXNSMEZCUnl4SlFVRkpMRU5CUVVNc1IwRkJSeXhEUVVGRExFZEJRVWNzUjBGQlJ5eEhRVUZITEVWQlFVVXNRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJRenRKUVVOd1JTeERRVUZETzBsQlJVUXNhMEpCUVd0Q0xFTkJRVU1zUjBGQlZ5eEZRVUZGTEVkQlFWY3NSVUZCUlN4SFFVRlhMRVZCUVVVc1IwRkJWeXhGUVVGRkxGRkJRV2RDTEVWQlFVVXNUVUZCWXp0UlFVTnlSeXhOUVVGTkxFVkJRVVVzUjBGQlJ5eERRVUZETEVkQlFVY3NSMEZCUnl4SFFVRkhMRU5CUVVNc1IwRkJSeXhOUVVGTkxFTkJRVU03VVVGRGFFTXNUVUZCVFN4RlFVRkZMRWRCUVVjc1EwRkJReXhIUVVGSExFZEJRVWNzUjBGQlJ5eERRVUZETEVkQlFVY3NUVUZCVFN4RFFVRkRPMUZCUTJoRExFMUJRVTBzUjBGQlJ5eEhRVUZITEVkQlFVY3NSMEZCUnl4UlFVRlJMRWRCUVVjc1JVRkJSU3hEUVVGRE8xRkJRMmhETEUxQlFVMHNSMEZCUnl4SFFVRkhMRWRCUVVjc1IwRkJSeXhSUVVGUkxFZEJRVWNzUlVGQlJTeERRVUZETzFGQlJXaERMRTlCUVU4c1NVRkJTU3hGUVVGRkxFTkJRVU1zUzBGQlN5eERRVUZETEVkQlFVY3NSVUZCUlN4SFFVRkhMRU5CUVVNc1EwRkJRenRKUVVOb1F5eERRVUZETzBsQlJVUXNaMEpCUVdkQ0xFTkJRVU1zUjBGQlZ5eEZRVUZGTEVWQlFWVXNSVUZCUlN4RlFVRlZMRVZCUVVVc1JVRkJWU3hGUVVGRkxFVkJRVlVzUlVGQlJTeERRVUZWTzFGQlEzUkdMRTFCUVUwc1NVRkJTU3hIUVVGSExFVkJRVVVzUjBGQlJ5eERRVUZETEVWQlFVVXNSMEZCUnl4RlFVRkZMRU5CUVVNc1IwRkJSeXhEUVVGRExFTkJRVU03VVVGRGFFTXNUVUZCVFN4SlFVRkpMRWRCUVVjc1JVRkJSU3hIUVVGSExFTkJRVU1zUlVGQlJTeEhRVUZITEVWQlFVVXNRMEZCUXl4SFFVRkhMRU5CUVVNc1EwRkJRenRSUVVOb1F5eEpRVUZKTEVWQlFVVXNSMEZCUnl4SlFVRkpMRWRCUVVjc1JVRkJSU3hEUVVGRE8xRkJRMjVDTEVsQlFVa3NSVUZCUlN4SFFVRkhMRWxCUVVrc1IwRkJSeXhGUVVGRkxFTkJRVU03VVVGRGJrSXNUVUZCVFN4SlFVRkpMRWRCUVVjc1NVRkJTU3hEUVVGRExFbEJRVWtzUTBGQlF5eEZRVUZGTEVkQlFVY3NSVUZCUlN4SFFVRkhMRVZCUVVVc1IwRkJSeXhGUVVGRkxFTkJRVU1zUTBGQlF6dFJRVU14UXl4RlFVRkZMRWxCUVVrc1NVRkJTU3hEUVVGRE8xRkJRMWdzUlVGQlJTeEpRVUZKTEVsQlFVa3NRMEZCUXp0UlFVTllMRTFCUVUwc1owSkJRV2RDTEVkQlFVY3NSVUZCUlN4SFFVRkhMRWxCUVVrc1EwRkJReXhKUVVGSkxFTkJRVU1zUjBGQlJ5eEhRVUZITEVOQlFVTXNRMEZCUXl4RFFVRkRPMUZCUTJwRUxFOUJRVThzUjBGQlJ5eEhRVUZITEVOQlFVTXNTMEZCU3l4RFFVRkRMRU5CUVVNc1EwRkJRenRaUVVOd1FpeEpRVUZKTEVWQlFVVXNRMEZCUXl4TFFVRkxMRU5CUVVNc1NVRkJTU3hIUVVGSExFTkJRVU1zWjBKQlFXZENMRWRCUVVjc1EwRkJReXhEUVVGRExFZEJRVWNzUlVGQlJTeEZRVUZGTEVsQlFVa3NSMEZCUnl4RFFVRkRMR2RDUVVGblFpeEhRVUZITEVOQlFVTXNRMEZCUXl4SFFVRkhMRVZCUVVVc1EwRkJReXhEUVVGRExFTkJRVU03V1VGRGRFWXNTVUZCU1N4RlFVRkZMRU5CUVVNc1MwRkJTeXhEUVVGRExFbEJRVWtzUjBGQlJ5eERRVUZETEdkQ1FVRm5RaXhIUVVGSExFTkJRVU1zUTBGQlF5eEhRVUZITEVWQlFVVXNSVUZCUlN4SlFVRkpMRWRCUVVjc1EwRkJReXhuUWtGQlowSXNSMEZCUnl4RFFVRkRMRU5CUVVNc1IwRkJSeXhGUVVGRkxFTkJRVU1zUTBGQlF6dEpRVU42Uml4RFFVRkRPMGxCUlVRc1YwRkJWeXhEUVVGRExFbEJRVGhDTEVWQlFVVXNVMEZCYVVJc1JVRkJSU3hUUVVGcFFpeEZRVUZGTEV0QlFXRXNSVUZCUlN4TFFVRmhPMUZCUXpWSExFMUJRVTBzVlVGQlZTeEhRVUZITEVsQlFVa3NRMEZCUXl4TFFVRkxMRU5CUVVNc1MwRkJTeXhIUVVGSExGTkJRVk1zUlVGQlJTeExRVUZMTEVkQlFVY3NVMEZCVXl4RFFVRkRMRWRCUVVjc1NVRkJTU3hEUVVGRExFVkJRVVVzUTBGQlF6dFJRVU01UlN4SlFVRkpMRU5CUVVNc1RVRkJUU3hEUVVGRExGTkJRVk1zUjBGQlJ5eERRVUZETEVsQlFVa3NRMEZCUXl4VlFVRlZMRWRCUVVjc1NVRkJTU3hEUVVGRExFZEJRVWNzUTBGQlF5eFZRVUZWTEVkQlFVY3NTVUZCU1N4RFFVRkRMRVZCUVVVc1IwRkJSeXhGUVVGRkxFTkJRVU1zUTBGQlF5eEZRVU0zUlN4VFFVRlRMRWRCUVVjc1EwRkJReXhKUVVGSkxFTkJRVU1zVlVGQlZTeEhRVUZITEVsQlFVa3NRMEZCUXl4SFFVRkhMRU5CUVVNc1ZVRkJWU3hIUVVGSExFbEJRVWtzUTBGQlF5eEZRVUZGTEVkQlFVY3NSVUZCUlN4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRE8xRkJRM1pGTEVsQlFVa3NRMEZCUXl4TlFVRk5MRU5CUVVNc1UwRkJVeXhGUVVGRkxGTkJRVk1zUTBGQlF5eERRVUZETzFGQlEyeERMRWxCUVVrc1EwRkJReXhOUVVGTkxFTkJRVU1zVTBGQlV5eEhRVUZITEVOQlFVTXNTVUZCU1N4RFFVRkRMRlZCUVZVc1IwRkJSeXhKUVVGSkxFTkJRVU1zUjBGQlJ5eERRVUZETEZWQlFWVXNSMEZCUnl4SlFVRkpMRU5CUVVNc1JVRkJSU3hIUVVGSExFVkJRVVVzUTBGQlF5eERRVUZETEVWQlF6ZEZMRk5CUVZNc1IwRkJSeXhEUVVGRExFbEJRVWtzUTBGQlF5eFZRVUZWTEVkQlFVY3NTVUZCU1N4RFFVRkRMRWRCUVVjc1EwRkJReXhWUVVGVkxFZEJRVWNzU1VGQlNTeERRVUZETEVWQlFVVXNSMEZCUnl4RlFVRkZMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU03U1VGRGVrVXNRMEZCUXp0RFFVTkdJaXdpYzI5MWNtTmxjME52Ym5SbGJuUWlPbHNpTHlvZ1pYTnNhVzUwTFdScGMyRmliR1VnYldGNExXeGxiaUFxTDF4dWFXMXdiM0owSUNvZ1lYTWdSRWNnWm5KdmJTQW5aR0YwWVdkeWIyc3RZWEJwTDJSbkp6dGNibWx0Y0c5eWRDQjdVM1ZpYW1WamRIMGdabkp2YlNBbmNuaHFjeWM3WEc1cGJYQnZjblFnUW1sMFFYSnlZWGtnWm5KdmJTQW5MaTlpYVhRdFlYSnlZWGtuTzF4dVhHNWxlSEJ2Y25RZ1pXNTFiU0JUWTJGMGRHVnlVR3h2ZEVOMWNuSmxiblJNYVc1bFUzUjViR1VnZTF4dUlDQWdJRzV2Ym1VZ1BTQW5ibTl1WlNjc1hHNGdJQ0FnWW05c1pDQTlJQ2RpYjJ4a0p5eGNiaUFnSUNCa1lYTm9aV1FnUFNBblpHRnphR1ZrSjF4dWZWeHVYRzUwZVhCbElFMWhjbXRsY2xOcGVtVWdQU0I3WEc0Z0lDQWdjMmw2WlVaeWIyMDZJRzUxYldKbGNpeGNiaUFnSUNCemFYcGxWRzg2SUc1MWJXSmxjbHh1ZlZ4dVhHNWxlSEJ2Y25RZ2RIbHdaU0JOYjNWelpVOTJaWEpNYVc1bFJYWmxiblFnUFNCN1hHNGdJQ0FnZURvZ2JuVnRZbVZ5TzF4dUlDQWdJSGs2SUc1MWJXSmxjanRjYmlBZ0lDQnBaRG9nYm5WdFltVnlPMXh1SUNBZ0lHVjJaVzUwT2lCTmIzVnpaVVYyWlc1MFhHNTlYRzVjYm1WNGNHOXlkQ0IwZVhCbElFbE1hVzVsVTJWeWFXVnpJRDBnZTF4dUlDQWdJR1p5YjIwNklGVnBiblF6TWtGeWNtRjVPMXh1SUNBZ0lIUnZPaUJWYVc1ME16SkJjbkpoZVR0Y2JpQWdJQ0JqYjJ4dmNqODZJSE4wY21sdVp6c2dMeThnWTI5dGJXOXVJR052Ykc5eUxpQlZjMlVnVzJOdmJHOXljMTBnYVdZZ2VXOTFJRzVsWldRZ2FXNWthWFpwWkhWaGJDQmpiMnh2Y25NZ2NHVnlJR3hwYm1WY2JpQWdJQ0JqYjJ4dmNuTS9PaUJ6ZEhKcGJtZGJYVHNnTHk4Z2JHbHVaU0JqYjJ4dmNuTXVJRWxtSUhSb1pYa2dZWEpsSUhSb1pTQnpZVzFsSUdadmNpQjBhR1VnYzJWeWFXVnpMQ0IxYzJVZ1cyTnZiRzl5WFNCcGJuTjBaV0ZrTGx4dUlDQWdJSGRwWkhSb1B6b2diblZ0WW1WeU95QXZMeUJqYjIxdGIyNGdkMmxrZEdndUlGVnpaU0JiWTI5c2IzSnpYU0JwWmlCNWIzVWdibVZsWkNCcGJtUnBkbWxrZFdGc0lIZHBaSFJvY3lCd1pYSWdiR2x1WlZ4dUlDQWdJSGRwWkhSb2N6ODZJRVpzYjJGME16SkJjbkpoZVRzZ0x5OGdiR2x1WlNCM2FXUjBhSE11SUVsbUlIUm9aWGtnWVhKbElIUm9aU0J6WVcxbElHWnZjaUIwYUdVZ2MyVnlhV1Z6TENCMWMyVWdXM2RwWkhSb1hTQnBibk4wWldGa0xseHVJQ0FnSUc5d1lXTnBkSGsvT2lCdWRXMWlaWEk3SUM4dklHTnZiVzF2YmlCdmNHRmphWFI1TGlCVmMyVWdXMjl3WVdOcGRHbGxjMTBnYVdZZ2VXOTFJRzVsWldRZ2FXNWthWFpwWkhWaGJDQnZjR0ZqYVhScFpYTWdjR1Z5SUd4cGJtVmNiaUFnSUNCdmNHRmphWFJwWlhNL09pQkdiRzloZERNeVFYSnlZWGs3SUM4dklHeHBibVVnYjNCaFkybDBhV1Z6TGlCSlppQjBhR1Y1SUdGeVpTQjBhR1VnYzJGdFpTQm1iM0lnZEdobElITmxjbWxsY3l3Z2RYTmxJRnR2Y0dGamFYUjVYU0JwYm5OMFpXRmtYRzRnSUNBZ1pISmhkMEZ5Y205M2N6ODZJR0p2YjJ4bFlXNDdJQzh2SUdOdmJXMXZiaUJ3WVhKaGJXVjBaWElnZEc4Z1pISmhkeUJoY25KdmQzTXVJRlZ6WlNCYlpISmhkMEZ5Y205M2MwRnljbDBnYVdZZ2VXOTFJRzVsWldRZ2RHOGdaSEpoZHlCaGNuSnZkM01nYm05MElHWnZjaUJsWVdOb0lHeHBibVZjYmlBZ0lDQmtjbUYzUVhKeWIzZHpRWEp5UHpvZ1FtbDBRWEp5WVhrN0lDOHZJR2x1WkdsMmFXUjFZV3dnY0dGeVlXMWxkR1Z5SUdadmNpQmxZV05vSUd4cGJtVXVJRWxtSUhSb1pYa2dZWEpsSUhSb1pTQnpZVzFsSUdadmNpQjBhR1VnYzJWeWFXVnpMQ0IxYzJVZ1cyUnlZWGRCY25KdmQzTmRJR2x1YzNSbFlXUmNiaUFnSUNCMmFYTnBZbWxzYVhSNVB6b2dRbWwwUVhKeVlYazdJQzh2SUdsdVpHbDJhV1IxWVd3Z2NHRnlZVzFsZEdWeUlHWnZjaUJsWVdOb0lHeHBibVV1SUZObGRDQmlhWFFnZEc4Z1ptRnNjMlVnZEc4Z2FHbGtaU0IwYUdVZ2JHbHVaVnh1SUNBZ0lHRnljbTkzVTJsNlpUODZJRzUxYldKbGNqc2dMeThnWTI5dGJXOXVJR1p2Y2lCaGJHd2dZWEp5YjNkelhHNGdJQ0FnYzJ0cGNFMTFiSFJwVEdsdVpVTmhiR04xYkdGMGFXOXVQem9nWW05dmJHVmhianRjYm4xY2JseHVaWGh3YjNKMElHTnNZWE56SUZOallYUjBaWEpRYkc5MFRHbHVaWE5TWlc1a1pYSmxjaUI3WEc0Z0lITndPaUJFUnk1VFkyRjBkR1Z5VUd4dmRGWnBaWGRsY2p0Y2JpQWdlRUY0YVhORGIydzZJRVJITGtOdmJIVnRianRjYmlBZ2VVRjRhWE5EYjJ3NklFUkhMa052YkhWdGJqdGNiaUFnWDJOMWNuSmxiblJNYVc1bFNXUjRJRDBnTFRFN1hHNGdJR3hwYm1WeklUb2dTVXhwYm1WVFpYSnBaWE03WEc0Z0lHeHBibVZEYkdsamEyVmtJRDBnYm1WM0lGTjFZbXBsWTNROFRXOTFjMlZQZG1WeVRHbHVaVVYyWlc1MFBpZ3BPMXh1SUNCc2FXNWxTRzkyWlhJZ1BTQnVaWGNnVTNWaWFtVmpkRHhOYjNWelpVOTJaWEpNYVc1bFJYWmxiblErS0NrN1hHNGdJR05oYm5aaGN6b2dTRlJOVEVOaGJuWmhjMFZzWlcxbGJuUTdYRzRnSUdOMGVEb2dRMkZ1ZG1GelVtVnVaR1Z5YVc1blEyOXVkR1Y0ZERKRU8xeHVJQ0J0YjNWelpVOTJaWEpNYVc1bFNXUWdQU0F0TVR0Y2JpQWdiWFZzZEdsd2JHVk1hVzVsYzBOdmRXNTBjeUU2SUZWcGJuUTRRWEp5WVhrN1hHNGdJSFpwYzJsaWFXeHBkSGs2SUVKcGRFRnljbUY1TzF4dUlDQmpkWEp5Wlc1MFRHbHVaVk4wZVd4bE9pQlRZMkYwZEdWeVVHeHZkRU4xY25KbGJuUk1hVzVsVTNSNWJHVTdYRzRnSUdGeWNtOTNWMmxrZEdnZ1BTQXhOVHRjYmx4dUlDQm5aWFFnWTNWeWNtVnVkRXhwYm1WSlpDZ3BPaUJ1ZFcxaVpYSWdlMXh1SUNBZ0lISmxkSFZ5YmlCMGFHbHpMbDlqZFhKeVpXNTBUR2x1WlVsa2VEdGNiaUFnZlZ4dVhHNGdJSE5sZENCamRYSnlaVzUwVEdsdVpVbGtLR2xrT2lCdWRXMWlaWElwSUh0Y2JpQWdJQ0JwWmlBb2FXUWdJVDA5SUhSb2FYTXVYMk4xY25KbGJuUk1hVzVsU1dSNEtTQjdYRzRnSUNBZ0lDQjBhR2x6TGw5amRYSnlaVzUwVEdsdVpVbGtlQ0E5SUdsa08xeHVJQ0FnSUNBZ2RHaHBjeTV6Y0M1eVpXNWtaWElvZEdocGN5NWpkSGdwTzF4dUlDQWdJSDFjYmlBZ2ZWeHVYRzRnSUhObGRDQnNhVzVsYzFSdlVtVnVaR1Z5S0d4cGJtVnpPaUJKVEdsdVpWTmxjbWxsY3lrZ2UxeHVJQ0FnSUhSb2FYTXVkWEJrWVhSbFRHbHVaWE1vYkdsdVpYTXBPMXh1SUNBZ0lIUm9hWE11YzNBdWNtVnVaR1Z5S0hSb2FYTXVZM1I0S1R0Y2JpQWdmVnh1WEc0Z0lITmxkQ0JzYVc1bGMxWnBjMmxpYVd4cGRIa29kbWx6YVdKcGJHbDBlVG9nUW1sMFFYSnlZWGtwSUh0Y2JpQWdJQ0IwYUdsekxuWnBjMmxpYVd4cGRIa2dQU0IyYVhOcFltbHNhWFI1TzF4dUlDQWdJSFJvYVhNdWMzQXVjbVZ1WkdWeUtIUm9hWE11WTNSNEtUdGNiaUFnZlZ4dVhHNGdJR052Ym5OMGNuVmpkRzl5S0hOd09pQkVSeTVUWTJGMGRHVnlVR3h2ZEZacFpYZGxjaXdnZUVGNGFYTTZJSE4wY21sdVp5d2dlVUY0YVhNNklITjBjbWx1Wnl3Z2JHbHVaWE02SUVsTWFXNWxVMlZ5YVdWekxGeHVJQ0FnSUdOMWNuSmxiblJNYVc1bFUzUjViR1VnUFNCVFkyRjBkR1Z5VUd4dmRFTjFjbkpsYm5STWFXNWxVM1I1YkdVdWJtOXVaU2tnZTF4dUlDQWdJSFJvYVhNdWMzQWdQU0J6Y0R0Y2JpQWdJQ0IwYUdsekxuaEJlR2x6UTI5c0lEMGdkR2hwY3k1emNDNWtZWFJoUm5KaGJXVWhMbU52YkhWdGJuTXVZbmxPWVcxbEtIaEJlR2x6S1R0Y2JpQWdJQ0IwYUdsekxubEJlR2x6UTI5c0lEMGdkR2hwY3k1emNDNWtZWFJoUm5KaGJXVWhMbU52YkhWdGJuTXVZbmxPWVcxbEtIbEJlR2x6S1R0Y2JpQWdJQ0IwYUdsekxtTmhiblpoY3lBOUlIUm9hWE11YzNBdVoyVjBTVzVtYnlncFd5ZGpZVzUyWVhNblhUdGNiaUFnSUNCMGFHbHpMbU4wZUNBOUlIUm9hWE11WTJGdWRtRnpMbWRsZEVOdmJuUmxlSFFvSnpKa0p5a2dZWE1nUTJGdWRtRnpVbVZ1WkdWeWFXNW5RMjl1ZEdWNGRESkVPMXh1SUNBZ0lIUm9hWE11WTNWeWNtVnVkRXhwYm1WVGRIbHNaU0E5SUdOMWNuSmxiblJNYVc1bFUzUjViR1U3WEc0Z0lDQWdkR2hwY3k1MWNHUmhkR1ZNYVc1bGN5aHNhVzVsY3lrN1hHNGdJQ0FnZEdocGN5NTJhWE5wWW1sc2FYUjVJRDBnYkdsdVpYTXVkbWx6YVdKcGJHbDBlU0EvUHlCdVpYY2dRbWwwUVhKeVlYa29kR2hwY3k1c2FXNWxjeTVtY205dExteGxibWQwYUNrN1hHNGdJQ0FnYVdZZ0tDRnNhVzVsY3k1MmFYTnBZbWxzYVhSNUtWeHVJQ0FnSUNBZ2RHaHBjeTUyYVhOcFltbHNhWFI1TG5ObGRFRnNiQ2gwY25WbExDQm1ZV3h6WlNrN1hHNGdJQ0FnYVdZZ0tHeHBibVZ6TG1GeWNtOTNVMmw2WlNsY2JpQWdJQ0FnSUhSb2FYTXVZWEp5YjNkWGFXUjBhQ0E5SUd4cGJtVnpMbUZ5Y205M1UybDZaVHRjYmx4dUlDQWdJSFJvYVhNdVkyRnVkbUZ6TG05dWJXOTFjMlZrYjNkdUlEMGdLR1YyWlc1ME9pQk5iM1Z6WlVWMlpXNTBLU0E5UGlCN1hHNGdJQ0FnSUNCcFppQW9kR2hwY3k1dGIzVnpaVTkyWlhKTWFXNWxTV1FnSVQwOUlDMHhLVnh1SUNBZ0lDQWdJQ0IwYUdsekxteHBibVZEYkdsamEyVmtMbTVsZUhRb2UzZzZJR1YyWlc1MExtTnNhV1Z1ZEZnc0lIazZJR1YyWlc1MExtTnNhV1Z1ZEZrc0lHbGtPaUIwYUdsekxtMXZkWE5sVDNabGNreHBibVZKWkN3Z1pYWmxiblE2SUdWMlpXNTBmU2s3WEc0Z0lDQWdmVHRjYmx4dUlDQWdJSFJvYVhNdVkyRnVkbUZ6TG05dWJXOTFjMlZ0YjNabElEMGdLR1YyWlc1ME9pQk5iM1Z6WlVWMlpXNTBLU0E5UGlCN1hHNGdJQ0FnSUNCMGFHbHpMbTF2ZFhObFQzWmxja3hwYm1WSlpDQTlJSFJvYVhNdVkyaGxZMnREYjI5eVpITlBia3hwYm1Vb1pYWmxiblF1YjJabWMyVjBXQ3dnWlhabGJuUXViMlptYzJWMFdTazdYRzRnSUNBZ0lDQnBaaUFvZEdocGN5NXRiM1Z6WlU5MlpYSk1hVzVsU1dRZ0lUMDlJQzB4S1Z4dUlDQWdJQ0FnSUNCMGFHbHpMbXhwYm1WSWIzWmxjaTV1WlhoMEtIdDRPaUJsZG1WdWRDNWpiR2xsYm5SWUxDQjVPaUJsZG1WdWRDNWpiR2xsYm5SWkxDQnBaRG9nZEdocGN5NXRiM1Z6WlU5MlpYSk1hVzVsU1dRc0lHVjJaVzUwT2lCbGRtVnVkSDBwTzF4dUlDQWdJSDA3WEc1Y2JpQWdJQ0J6Y0M1dmJrVjJaVzUwS0Nka05DMWlaV1p2Y21VdFpISmhkeTF6WTJWdVpTY3BYRzRnSUNBZ0lDQXVjM1ZpYzJOeWFXSmxLQ2hmT2lCaGJua3BJRDArSUh0Y2JpQWdJQ0FnSUNBZ2RHaHBjeTV5Wlc1a1pYSk1hVzVsY3lncE8xeHVJQ0FnSUNBZ2ZTazdYRzRnSUgxY2JseHVJQ0IxY0dSaGRHVk1hVzVsY3loc2FXNWxjem9nU1V4cGJtVlRaWEpwWlhNcElIdGNiaUFnSUNCMGFHbHpMbXhwYm1WeklEMGdiR2x1WlhNN1hHNGdJQ0FnZEdocGN5NXRkV3gwYVhCc1pVeHBibVZ6UTI5MWJuUnpJRDBnYm1WM0lGVnBiblE0UVhKeVlYa29kR2hwY3k1c2FXNWxjeTVtY205dExteGxibWQwYUNrN1hHNGdJQ0FnYVdZZ0tDRnNhVzVsY3k1emEybHdUWFZzZEdsTWFXNWxRMkZzWTNWc1lYUnBiMjRwWEc0Z0lDQWdJQ0IwYUdsekxtTnlaV0YwWlUxMWJIUnBUR2x1WlhOSmJtUnBZMlZ6S0NrN1hHNGdJQ0FnWld4elpWeHVJQ0FnSUNBZ2RHaHBjeTV0ZFd4MGFYQnNaVXhwYm1WelEyOTFiblJ6TG1acGJHd29NQ2s3WEc0Z0lIMWNibHh1SUNCeVpXNWtaWEpNYVc1bGN5Z3BPaUIyYjJsa0lIdGNiaUFnSUNCamIyNXpkQ0J6Y0V4dmIyc2dQU0IwYUdsekxuTndMbWRsZEU5d2RHbHZibk1vS1M1c2IyOXJPMXh1SUNBZ0lHTnZibk4wSUdsdVpHbDJhV1IxWVd4TWFXNWxVM1I1YkdWeklEMGdkR2hwY3k1c2FXNWxjeTVqYjJ4dmNuTWdmSHdnZEdocGN5NXNhVzVsY3k1M2FXUjBhQ0I4ZkNCMGFHbHpMbXhwYm1WekxtOXdZV05wZEdsbGN5QjhmQ0IwYUdsekxteHBibVZ6TG1SeVlYZEJjbkp2ZDNOQmNuSTdYRzRnSUNBZ2FXWWdLQ0ZwYm1ScGRtbGtkV0ZzVEdsdVpWTjBlV3hsY3lrZ2UxeHVJQ0FnSUNBZ2RHaHBjeTVqZEhndWJHbHVaVmRwWkhSb0lEMGdkR2hwY3k1c2FXNWxjeTUzYVdSMGFDQS9QeUF4TzF4dUlDQWdJQ0FnZEdocGN5NWpkSGd1YzNSeWIydGxVM1I1YkdVZ1BTQmdjbWRpWVNna2UzUm9hWE11YkdsdVpYTXVZMjlzYjNJZ1B6OGdKekFzTVRJNExEQW5mU3drZTNSb2FYTXViR2x1WlhNdWIzQmhZMmwwZVNBL1B5QXhmU2xnTzF4dUlDQWdJSDFjYmlBZ0lDQmpiMjV6ZENCdFlYSnJaWEpUYVhwbFEyOXNJRDBnYzNCTWIyOXJXeWR6YVhwbFEyOXNkVzF1VG1GdFpTZGRJRDhnZEdocGN5NXpjQzVrWVhSaFJuSmhiV1V1WTI5c0tITndURzl2YTFzbmMybDZaVU52YkhWdGJrNWhiV1VuWFNrZ09pQnVkV3hzTzF4dUlDQWdJR052Ym5OMElHWnBiSFJsY2lBOUlIUm9hWE11YzNBdVpHRjBZVVp5WVcxbExtWnBiSFJsY2p0Y2JpQWdJQ0JtYjNJZ0tHeGxkQ0JwSUQwZ01Ec2dhU0E4SUhSb2FYTXViR2x1WlhNdVpuSnZiUzVzWlc1bmRHZzdJR2tyS3lrZ2UxeHVJQ0FnSUNBZ2FXWWdLR1pwYkhSbGNpNW5aWFFvZEdocGN5NXNhVzVsY3k1bWNtOXRXMmxkS1NBbUppQm1hV3gwWlhJdVoyVjBLSFJvYVhNdWJHbHVaWE11ZEc5YmFWMHBJQ1ltSUhSb2FYTXVkbWx6YVdKcGJHbDBlUzVuWlhSQ2FYUW9hU2twSUh0Y2JpQWdJQ0FnSUNBZ2JHVjBJR3hwYm1WTVpXNGdQU0F3TzF4dUlDQWdJQ0FnSUNCamIyNXpkQ0I3YzJsNlpVWnliMjBzSUhOcGVtVlViMzBnUFNCMGFHbHpMbWRsZEUxaGNtdGxjbk5UYVhwbGN5aHpjRXh2YjJzc0lHMWhjbXRsY2xOcGVtVkRiMndzSUdrcE8xeHVJQ0FnSUNBZ0lDQmpiMjV6ZENCd2IybHVkRVp5YjIwZ1BTQjBhR2x6TG5Od0xuZHZjbXhrVkc5VFkzSmxaVzRvZEdocGN5NTRRWGhwYzBOdmJDNW5aWFFvZEdocGN5NXNhVzVsY3k1bWNtOXRXMmxkS1N3Z2RHaHBjeTU1UVhocGMwTnZiQzVuWlhRb2RHaHBjeTVzYVc1bGN5NW1jbTl0VzJsZEtTazdYRzRnSUNBZ0lDQWdJR3hsZENCaFdDQTlJSEJ2YVc1MFJuSnZiVDh1ZUR0Y2JpQWdJQ0FnSUNBZ2JHVjBJR0ZaSUQwZ2NHOXBiblJHY205dFB5NTVPMXh1SUNBZ0lDQWdJQ0JqYjI1emRDQndiMmx1ZEZSdklEMGdkR2hwY3k1emNDNTNiM0pzWkZSdlUyTnlaV1Z1S0hSb2FYTXVlRUY0YVhORGIyd3VaMlYwS0hSb2FYTXViR2x1WlhNdWRHOWJhVjBwTENCMGFHbHpMbmxCZUdselEyOXNMbWRsZENoMGFHbHpMbXhwYm1WekxuUnZXMmxkS1NrN1hHNGdJQ0FnSUNBZ0lHeGxkQ0JpV0NBOUlIQnZhVzUwVkc4L0xuZzdYRzRnSUNBZ0lDQWdJR3hsZENCaVdTQTlJSEJ2YVc1MFZHOC9Mbms3WEc0Z0lDQWdJQ0FnSUdOdmJuTjBJRzFwYmtGNGFYTWdQU0JOWVhSb0xtMXBiaWgwYUdsekxuTndMblpwWlhkQ2IzZ3VkMmxrZEdnc0lIUm9hWE11YzNBdWRtbGxkMEp2ZUM1b1pXbG5hSFFwTzF4dUlDQWdJQ0FnSUNCMGFHbHpMbU4wZUM1aVpXZHBibEJoZEdnb0tUdGNiaUFnSUNBZ0lDQWdhV1lnS0dGWUlDWW1JR0ZaSUNZbUlHSllJQ1ltSUdKWklDWW1JRTFoZEdndWFIbHdiM1FvWWxnaElDMGdZVmdoTENCaVdTRWdMU0JoV1NFcElDOGdiV2x1UVhocGN5QStJREF1TURFcElIdGNiaUFnSUNBZ0lDQWdJQ0JwWmlBb2FXNWthWFpwWkhWaGJFeHBibVZUZEhsc1pYTXBJSHRjYmlBZ0lDQWdJQ0FnSUNBZ0lHTnZibk4wSUdOdmJHOXlJRDBnZEdocGN5NXNhVzVsY3k1amIyeHZjbk0vTGx0cFhTQS9JSFJvYVhNdWJHbHVaWE11WTI5c2IzSnpQeTViYVYwZ09pQW5NQ3d4TWpnc01DYzdYRzRnSUNBZ0lDQWdJQ0FnSUNCamIyNXpkQ0J2Y0dGamFYUjVJRDBnZEdocGN5NXNhVzVsY3k1dmNHRmphWFJwWlhNL0xsdHBYU0EvSUhSb2FYTXViR2x1WlhNdWIzQmhZMmwwYVdWelB5NWJhVjBnT2lBeE8xeHVJQ0FnSUNBZ0lDQWdJQ0FnZEdocGN5NWpkSGd1YzNSeWIydGxVM1I1YkdVZ1BTQmdjbWRpWVNna2UyTnZiRzl5ZlN3a2UyOXdZV05wZEhsOUtXQTdYRzRnSUNBZ0lDQWdJQ0FnSUNCMGFHbHpMbU4wZUM1c2FXNWxWMmxrZEdnZ1BTQjBhR2x6TG14cGJtVnpMbmRwWkhSb2N6OHVXMmxkSUQ4Z2RHaHBjeTVzYVc1bGN5NTNhV1IwYUhNL0xsdHBYU0E2SURFN1hHNGdJQ0FnSUNBZ0lDQWdmVnh1SUNBZ0lDQWdJQ0FnSUdsbUlDaHBJRDA5UFNCMGFHbHpMbDlqZFhKeVpXNTBUR2x1WlVsa2VDbGNiaUFnSUNBZ0lDQWdJQ0FnSUhSb2FYTXVkRzluWjJ4bFEzVnljbVZ1ZEV4cGJtVlRkSGxzWlNoMGNuVmxLVHRjYmlBZ0lDQWdJQ0FnSUNCamIyNXpkQ0J0ZFd4MGFVeHBibVZ6SUQwZ2RHaHBjeTV0ZFd4MGFYQnNaVXhwYm1WelEyOTFiblJ6VzJsZE8xeHVJQ0FnSUNBZ0lDQWdJR3hsZENCamIyNTBjbTlzVUc5cGJuUTZJRVJITGxCdmFXNTBJSHdnYm5Wc2JDQTlJRzUxYkd3N1hHNGdJQ0FnSUNBZ0lDQWdhV1lnS0cxMWJIUnBUR2x1WlhNcElIdGNiaUFnSUNBZ0lDQWdJQ0FnSUd4cGJtVk1aVzRnUFNCMGFHbHpMbWRsZEV4cGJtVk1aVzVuZEdnb1lWZ3NJR0ZaTENCaVdDd2dZbGtwTzF4dUlDQWdJQ0FnSUNBZ0lDQWdZMjl1YzNRZ2MzUmhjblJRYjJsdWRGZHBkR2hOWVhKclpYSWdQU0IwYUdsekxtZGxkRkJ2YVc1MFQyNUVhWE4wWVc1alpTaGhXQ3dnWVZrc0lHSllMQ0JpV1N3Z2MybDZaVlJ2TENCc2FXNWxUR1Z1S1R0Y2JpQWdJQ0FnSUNBZ0lDQWdJR052Ym5OMElHVnVaSFJRYjJsdWRGZHBkR2hOWVhKclpYSWdQU0IwYUdsekxtZGxkRkJ2YVc1MFQyNUVhWE4wWVc1alpTaGlXQ3dnWWxrc0lHRllMQ0JoV1N3Z2MybDZaVVp5YjIwc0lHeHBibVZNWlc0cE8xeHVJQ0FnSUNBZ0lDQWdJQ0FnWVZnZ1BTQnpkR0Z5ZEZCdmFXNTBWMmwwYUUxaGNtdGxjaTU0TzF4dUlDQWdJQ0FnSUNBZ0lDQWdZVmtnUFNCemRHRnlkRkJ2YVc1MFYybDBhRTFoY210bGNpNTVPMXh1SUNBZ0lDQWdJQ0FnSUNBZ1lsZ2dQU0JsYm1SMFVHOXBiblJYYVhSb1RXRnlhMlZ5TG5nN1hHNGdJQ0FnSUNBZ0lDQWdJQ0JpV1NBOUlHVnVaSFJRYjJsdWRGZHBkR2hOWVhKclpYSXVlVHRjYmlBZ0lDQWdJQ0FnSUNBZ0lHTnZiblJ5YjJ4UWIybHVkQ0E5SUhSb2FYTXViR2x1WlhNdVpuSnZiVnRwWFNBK0lIUm9hWE11YkdsdVpYTXVkRzliYVYwZ1AxeHVJQ0FnSUNBZ0lDQWdJQ0FnSUNCMGFHbHpMbVpwYm1SRGIyNTBjbTlzVUc5cGJuUW9iWFZzZEdsTWFXNWxjeXdnWVZnc0lHRlpMQ0JpV0N3Z1lsa3NJR2twSURwY2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnZEdocGN5NW1hVzVrUTI5dWRISnZiRkJ2YVc1MEtHMTFiSFJwVEdsdVpYTXNJR0pZTENCaVdTd2dZVmdzSUdGWkxDQnBLVHRjYmlBZ0lDQWdJQ0FnSUNBZ0lIUm9hWE11WTNSNExtMXZkbVZVYnloaFdDRXNJR0ZaSVNrN1hHNGdJQ0FnSUNBZ0lDQWdJQ0IwYUdsekxtTjBlQzV4ZFdGa2NtRjBhV05EZFhKMlpWUnZLR052Ym5SeWIyeFFiMmx1ZEM1NExDQmpiMjUwY205c1VHOXBiblF1ZVN3Z1lsZ3NJR0paS1R0Y2JpQWdJQ0FnSUNBZ0lDQjlJR1ZzYzJVZ2UxeHVJQ0FnSUNBZ0lDQWdJQ0FnZEdocGN5NWpkSGd1Ylc5MlpWUnZLR0ZZSVN3Z1lWa2hLVHRjYmlBZ0lDQWdJQ0FnSUNBZ0lIUm9hWE11WTNSNExteHBibVZVYnloaVdDd2dZbGtwTzF4dUlDQWdJQ0FnSUNBZ0lIMWNiaUFnSUNBZ0lDQWdJQ0JwWmlBb2RHaHBjeTVzYVc1bGN5NWtjbUYzUVhKeWIzZHpJRDgvSUhSb2FYTXViR2x1WlhNdVpISmhkMEZ5Y205M2MwRnljajh1WjJWMFFtbDBLR2twS1NCN1hHNGdJQ0FnSUNBZ0lDQWdJQ0JwWmlBb0lXeHBibVZNWlc0cFhHNGdJQ0FnSUNBZ0lDQWdJQ0FnSUd4cGJtVk1aVzRnUFNCMGFHbHpMbWRsZEV4cGJtVk1aVzVuZEdnb1lWZ3NJR0ZaTENCaVdDd2dZbGtwTzF4dUlDQWdJQ0FnSUNBZ0lDQWdhV1lnS0d4cGJtVk1aVzRnUGlCMGFHbHpMbUZ5Y205M1YybGtkR2dwSUh0Y2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnWTI5dWMzUWdZWEp5YjNkUWIybHVkQ0E5SUNGdGRXeDBhVXhwYm1WeklEOGdkR2hwY3k1blpYUlFiMmx1ZEU5dVJHbHpkR0Z1WTJVb1lWZ3NJR0ZaTENCaVdDd2dZbGtzSUhOcGVtVlVieXdnYkdsdVpVeGxiaWtnT2lCdWRXeHNPMXh1SUNBZ0lDQWdJQ0FnSUNBZ0lDQmpiMjV6ZENCaGNuSnZkME5RV0NBOUlHMTFiSFJwVEdsdVpYTWdQeUJqYjI1MGNtOXNVRzlwYm5RaExuZ2dPaUJoV0R0Y2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnWTI5dWMzUWdZWEp5YjNkRFVGa2dQU0J0ZFd4MGFVeHBibVZ6SUQ4Z1kyOXVkSEp2YkZCdmFXNTBJUzU1SURvZ1lWazdYRzRnSUNBZ0lDQWdJQ0FnSUNBZ0lIUm9hWE11WTJGdWRtRnpRWEp5YjNjb2RHaHBjeTVqZEhnc0lHRnljbTkzVUc5cGJuUS9MbmdnUHo4Z1lWZ3NJR0Z5Y205M1VHOXBiblEvTG5rZ1B6OGdZVmtzSUdGeWNtOTNRMUJZTENCaGNuSnZkME5RV1NrN1hHNGdJQ0FnSUNBZ0lDQWdJQ0I5WEc0Z0lDQWdJQ0FnSUNBZ2ZWeHVJQ0FnSUNBZ0lDQWdJSFJvYVhNdVkzUjRMbk4wY205clpTZ3BPMXh1SUNBZ0lDQWdJQ0FnSUhSb2FYTXVZM1I0TG1Oc2IzTmxVR0YwYUNncE8xeHVJQ0FnSUNBZ0lDQWdJR2xtSUNocElEMDlQU0IwYUdsekxsOWpkWEp5Wlc1MFRHbHVaVWxrZUNsY2JpQWdJQ0FnSUNBZ0lDQWdJSFJvYVhNdWRHOW5aMnhsUTNWeWNtVnVkRXhwYm1WVGRIbHNaU2htWVd4elpTazdYRzRnSUNBZ0lDQWdJSDFjYmlBZ0lDQWdJSDFjYmlBZ0lDQjlYRzRnSUNBZ2RHaHBjeTVtYVd4c1RHVm1kRUp2ZEhSdmJWSmxZM1FvS1R0Y2JpQWdmVnh1WEc0Z0lIUnZaMmRzWlVOMWNuSmxiblJNYVc1bFUzUjViR1VvWm14aFp6b2dZbTl2YkdWaGJpa2dlMXh1SUNBZ0lITjNhWFJqYUNBb2RHaHBjeTVqZFhKeVpXNTBUR2x1WlZOMGVXeGxLU0I3WEc0Z0lDQWdJQ0JqWVhObElGTmpZWFIwWlhKUWJHOTBRM1Z5Y21WdWRFeHBibVZUZEhsc1pTNWliMnhrT2lCN1hHNGdJQ0FnSUNBZ0lHWnNZV2NnUHlCMGFHbHpMbU4wZUM1c2FXNWxWMmxrZEdnZ0t6MGdNaUE2SUhSb2FYTXVZM1I0TG14cGJtVlhhV1IwYUNBdFBTQXlPMXh1SUNBZ0lDQWdJQ0JpY21WaGF6dGNiaUFnSUNBZ0lIMWNiaUFnSUNBZ0lHTmhjMlVnVTJOaGRIUmxjbEJzYjNSRGRYSnlaVzUwVEdsdVpWTjBlV3hsTG1SaGMyaGxaRG9nZTF4dUlDQWdJQ0FnSUNCbWJHRm5JRDhnZEdocGN5NWpkSGd1YzJWMFRHbHVaVVJoYzJnb1d6VXNJRFZkS1NBNklIUm9hWE11WTNSNExuTmxkRXhwYm1WRVlYTm9LRnRkS1R0Y2JpQWdJQ0FnSUNBZ1luSmxZV3M3WEc0Z0lDQWdJQ0I5WEc0Z0lDQWdJQ0JrWldaaGRXeDBPbHh1SUNBZ0lDQWdJQ0J5WlhSMWNtNDdYRzRnSUNBZ2ZWeHVJQ0I5WEc1Y2JpQWdaMlYwVFdGeWEyVnljMU5wZW1WektITndURzl2YXpvZ1lXNTVMQ0J0WVhKclpYSlRhWHBsUTI5c09pQkVSeTVEYjJ4MWJXNGdmQ0J1ZFd4c0xDQnBPaUJ1ZFcxaVpYSXBPaUJOWVhKclpYSlRhWHBsSUh0Y2JpQWdJQ0JzWlhRZ2MybDZaVVp5YjIwZ1BTQXpPMXh1SUNBZ0lHeGxkQ0J6YVhwbFZHOGdQU0F6TzF4dUlDQWdJR2xtSUNodFlYSnJaWEpUYVhwbFEyOXNLU0I3WEc0Z0lDQWdJQ0J6YVhwbFJuSnZiU0E5SUNoemNFeHZiMnN1YldGeWEyVnlUV2x1VTJsNlpTQXJJQ2h6Y0V4dmIyc3ViV0Z5YTJWeVRXRjRVMmw2WlNBdElITndURzl2YXk1dFlYSnJaWEpOYVc1VGFYcGxLU0FxSUcxaGNtdGxjbE5wZW1WRGIyd3VjMk5oYkdVb2RHaHBjeTVzYVc1bGN5NW1jbTl0VzJsZEtTa2dMeUF5TzF4dUlDQWdJQ0FnYzJsNlpWUnZJRDBnS0hOd1RHOXZheTV0WVhKclpYSk5hVzVUYVhwbElDc2dLSE53VEc5dmF5NXRZWEpyWlhKTllYaFRhWHBsSUMwZ2MzQk1iMjlyTG0xaGNtdGxjazFwYmxOcGVtVXBJQ29nYldGeWEyVnlVMmw2WlVOdmJDNXpZMkZzWlNoMGFHbHpMbXhwYm1WekxuUnZXMmxkS1NrZ0x5QXlPMXh1SUNBZ0lIMGdaV3h6WlNCcFppQW9jM0JNYjI5ckxtMWhjbXRsY2tSbFptRjFiSFJUYVhwbEtTQjdYRzRnSUNBZ0lDQnphWHBsUm5KdmJTQTlJSE53VEc5dmF5NXRZWEpyWlhKRVpXWmhkV3gwVTJsNlpTQXZJREk3WEc0Z0lDQWdJQ0J6YVhwbFZHOGdQU0J6Y0V4dmIyc3ViV0Z5YTJWeVJHVm1ZWFZzZEZOcGVtVWdMeUF5TzF4dUlDQWdJSDFjYmlBZ0lDQnlaWFIxY200Z2UzTnBlbVZHY205dExDQnphWHBsVkc5OU8xeHVJQ0I5WEc1Y2JseHVJQ0JtYVd4c1RHVm1kRUp2ZEhSdmJWSmxZM1FvS1NCN1hHNGdJQ0FnWTI5dWMzUWdjbVZqZENBOUlHNWxkeUJRWVhSb01rUW9LVHRjYmlBZ0lDQnlaV04wTG5KbFkzUW9kR2hwY3k1emNDNTVRWGhwYzBKdmVDNXRhVzVZTENCMGFHbHpMbk53TG5sQmVHbHpRbTk0TG0xaGVGa3NJSFJvYVhNdWMzQXVlVUY0YVhOQ2IzZ3VkMmxrZEdnc0lIUm9hWE11YzNBdWVFRjRhWE5DYjNndWFHVnBaMmgwS1R0Y2JpQWdJQ0IwYUdsekxtTjBlQzVtYVd4c1UzUjViR1VnUFNCZ2QyaHBkR1ZnTzF4dUlDQWdJSFJvYVhNdVkzUjRMbUpsWjJsdVVHRjBhQ2dwTzF4dUlDQWdJSFJvYVhNdVkzUjRMbVpwYkd3b2NtVmpkQ2s3WEc0Z0lDQWdkR2hwY3k1amRIZ3VZMnh2YzJWUVlYUm9LQ2s3WEc0Z0lIMWNibHh1SUNCamNtVmhkR1ZOZFd4MGFVeHBibVZ6U1c1a2FXTmxjeWdwT2lCMmIybGtJSHRjYmlBZ0lDQmpiMjV6ZENCaGNuSmhlVWxrZUhOQ2FYUkJjbkpoZVNBOUlHNWxkeUJDYVhSQmNuSmhlU2gwYUdsekxteHBibVZ6TG1aeWIyMHViR1Z1WjNSb0tUdGNiaUFnSUNCaGNuSmhlVWxrZUhOQ2FYUkJjbkpoZVM1elpYUkJiR3dvZEhKMVpTazdYRzRnSUNBZ1ptOXlJQ2hzWlhRZ2FTQTlJQzB4T3lBb2FTQTlJR0Z5Y21GNVNXUjRjMEpwZEVGeWNtRjVMbVpwYm1ST1pYaDBLR2twS1NBaFBUMGdMVEU3S1NCN1hHNGdJQ0FnSUNCamIyNXpkQ0JtYVhKemRFeHBibVZKWkhnZ1BTQnBPMXh1SUNBZ0lDQWdZMjl1YzNRZ2NERWdQU0IwYUdsekxteHBibVZ6TG1aeWIyMWJabWx5YzNSTWFXNWxTV1I0WFR0Y2JpQWdJQ0FnSUdOdmJuTjBJSEF5SUQwZ2RHaHBjeTVzYVc1bGN5NTBiMXRtYVhKemRFeHBibVZKWkhoZE8xeHVJQ0FnSUNBZ2JHVjBJR3hwYm1WelVHVnlVR0ZwY2lBOUlERTdYRzRnSUNBZ0lDQm1iM0lnS0d4bGRDQnFJRDBnYVRzZ0tHb2dQU0JoY25KaGVVbGtlSE5DYVhSQmNuSmhlUzVtYVc1a1RtVjRkQ2hxS1NrZ0lUMDlJQzB4T3lrZ2UxeHVJQ0FnSUNBZ0lDQmpiMjV6ZENCd2IybHVkRlJ2UTI5dGNHRnlaVEVnUFNCMGFHbHpMbXhwYm1WekxtWnliMjFiYWwwN1hHNGdJQ0FnSUNBZ0lHTnZibk4wSUhCdmFXNTBWRzlEYjIxd1lYSmxNaUE5SUhSb2FYTXViR2x1WlhNdWRHOWJhbDA3WEc0Z0lDQWdJQ0FnSUdsbUlDaHdiMmx1ZEZSdlEyOXRjR0Z5WlRFZ1BUMDlJSEF4SUNZbUlIQnZhVzUwVkc5RGIyMXdZWEpsTWlBOVBUMGdjRElnZkh4Y2JpQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdjRzlwYm5SVWIwTnZiWEJoY21VeUlEMDlQU0J3TVNBbUppQndiMmx1ZEZSdlEyOXRjR0Z5WlRFZ1BUMDlJSEF5S1NCN1hHNGdJQ0FnSUNBZ0lDQWdkR2hwY3k1dGRXeDBhWEJzWlV4cGJtVnpRMjkxYm5SelcycGRJRDBnS3l0c2FXNWxjMUJsY2xCaGFYSTdYRzRnSUNBZ0lDQWdJQ0FnWVhKeVlYbEpaSGh6UW1sMFFYSnlZWGt1YzJWMFFtbDBLR29zSUdaaGJITmxMQ0JtWVd4elpTazdYRzRnSUNBZ0lDQWdJSDFjYmlBZ0lDQWdJSDFjYmlBZ0lDQWdJR2xtSUNoc2FXNWxjMUJsY2xCaGFYSWdQaUF4S1Z4dUlDQWdJQ0FnSUNCMGFHbHpMbTExYkhScGNHeGxUR2x1WlhORGIzVnVkSE5iWm1seWMzUk1hVzVsU1dSNFhTQTlJREU3WEc0Z0lDQWdJQ0JoY25KaGVVbGtlSE5DYVhSQmNuSmhlUzV6WlhSQ2FYUW9hU3dnWm1Gc2MyVXNJR1poYkhObEtUdGNiaUFnSUNCOVhHNGdJSDFjYmx4dUlDQmphR1ZqYTBOdmIzSmtjMDl1VEdsdVpTaDRPaUJ1ZFcxaVpYSXNJSGs2SUc1MWJXSmxjaWs2SUc1MWJXSmxjaUI3WEc0Z0lDQWdiR1YwSUdOaGJtUnBaR0YwWlVsa2VDQTlJQzB4TzF4dUlDQWdJR3hsZENCdGFXNUVhWE4wSUQwZ2JuVnNiRHRjYmlBZ0lDQnNaWFFnWkdsemRDQTlJRzUxYkd3N1hHNGdJQ0FnWTI5dWMzUWdjM0JNYjI5cklEMGdkR2hwY3k1emNDNW5aWFJQY0hScGIyNXpLQ2t1Ykc5dmF6dGNiaUFnSUNCamIyNXpkQ0J0WVhKclpYSlRhWHBsUTI5c0lEMGdjM0JNYjI5cld5ZHphWHBsUTI5c2RXMXVUbUZ0WlNkZElEOGdkR2hwY3k1emNDNWtZWFJoUm5KaGJXVXVZMjlzS0hOd1RHOXZhMXNuYzJsNlpVTnZiSFZ0Yms1aGJXVW5YU2tnT2lCdWRXeHNPMXh1SUNBZ0lHTnZibk4wSUdacGJIUmxjaUE5SUhSb2FYTXVjM0F1WkdGMFlVWnlZVzFsTG1acGJIUmxjanRjYmlBZ0lDQm1iM0lnS0d4bGRDQnBJRDBnTURzZ2FTQThJSFJvYVhNdWJHbHVaWE11Wm5KdmJTNXNaVzVuZEdnN0lHa3JLeWtnZTF4dUlDQWdJQ0FnYVdZZ0tHWnBiSFJsY2k1blpYUW9kR2hwY3k1c2FXNWxjeTVtY205dFcybGRLU0FtSmlCbWFXeDBaWEl1WjJWMEtIUm9hWE11YkdsdVpYTXVkRzliYVYwcElDWW1JSFJvYVhNdWRtbHphV0pwYkdsMGVTNW5aWFJDYVhRb2FTa3BJSHRjYmlBZ0lDQWdJQ0FnWTI5dWMzUWdlM05wZW1WR2NtOXRMQ0J6YVhwbFZHOTlJRDBnZEdocGN5NW5aWFJOWVhKclpYSnpVMmw2WlhNb2MzQk1iMjlyTENCdFlYSnJaWEpUYVhwbFEyOXNMQ0JwS1R0Y2JpQWdJQ0FnSUNBZ1kyOXVjM1FnY0VaeWIyMGdQU0IwYUdsekxuTndMbmR2Y214a1ZHOVRZM0psWlc0b2RHaHBjeTU0UVhocGMwTnZiQzVuWlhRb2RHaHBjeTVzYVc1bGN5NW1jbTl0VzJsZEtTd2dkR2hwY3k1NVFYaHBjME52YkM1blpYUW9kR2hwY3k1c2FXNWxjeTVtY205dFcybGRLU2s3WEc0Z0lDQWdJQ0FnSUdOdmJuTjBJSEJVYnlBOUlIUm9hWE11YzNBdWQyOXliR1JVYjFOamNtVmxiaWgwYUdsekxuaEJlR2x6UTI5c0xtZGxkQ2gwYUdsekxteHBibVZ6TG5SdlcybGRLU3dnZEdocGN5NTVRWGhwYzBOdmJDNW5aWFFvZEdocGN5NXNhVzVsY3k1MGIxdHBYU2twTzF4dUlDQWdJQ0FnSUNCcFppQW9kR2hwY3k1dGRXeDBhWEJzWlV4cGJtVnpRMjkxYm5SelcybGRLU0I3WEc0Z0lDQWdJQ0FnSUNBZ1kyOXVjM1FnYkdWdUlEMGdkR2hwY3k1blpYUk1hVzVsVEdWdVozUm9LSEJHY205dExuZ3NJSEJHY205dExua3NJSEJVYnk1NExDQndWRzh1ZVNrN1hHNGdJQ0FnSUNBZ0lDQWdZMjl1YzNRZ1puSnZiVTFoY210bGNpQTlJSFJvYVhNdVoyVjBVRzlwYm5SUGJrUnBjM1JoYm1ObEtIQkdjbTl0TG5nc0lIQkdjbTl0TG5rc0lIQlVieTU0TENCd1ZHOHVlU3dnYzJsNlpWUnZMQ0JzWlc0cE8xeHVJQ0FnSUNBZ0lDQWdJR052Ym5OMElIUnZUV0Z5YTJWeUlEMGdkR2hwY3k1blpYUlFiMmx1ZEU5dVJHbHpkR0Z1WTJVb2NGUnZMbmdzSUhCVWJ5NTVMQ0J3Um5KdmJUOHVlQ3dnY0VaeWIyMC9MbmtzSUhOcGVtVkdjbTl0TENCc1pXNHBPMXh1SUNBZ0lDQWdJQ0FnSUdOdmJuTjBJR052Ym5SeWIyeFFiMmx1ZENBOUlIUm9hWE11YkdsdVpYTXVabkp2YlZ0cFhTQStJSFJvYVhNdWJHbHVaWE11ZEc5YmFWMGdQMXh1SUNBZ0lDQWdJQ0FnSUNBZ2RHaHBjeTVtYVc1a1EyOXVkSEp2YkZCdmFXNTBLSFJvYVhNdWJYVnNkR2x3YkdWTWFXNWxjME52ZFc1MGMxdHBYU3dnWm5KdmJVMWhjbXRsY2k1NExDQm1jbTl0VFdGeWEyVnlMbmtzSUhSdlRXRnlhMlZ5TG5nc0lIUnZUV0Z5YTJWeUxua3NJR2twSURwY2JpQWdJQ0FnSUNBZ0lDQWdJSFJvYVhNdVptbHVaRU52Ym5SeWIyeFFiMmx1ZENoMGFHbHpMbTExYkhScGNHeGxUR2x1WlhORGIzVnVkSE5iYVYwc0lIUnZUV0Z5YTJWeUxuZ3NJSFJ2VFdGeWEyVnlMbmtzSUdaeWIyMU5ZWEpyWlhJdWVDd2dabkp2YlUxaGNtdGxjaTU1TENCcEtUdGNiaUFnSUNBZ0lDQWdJQ0JrYVhOMElEMGdkR2hwY3k1allXeGpkV3hoZEdWRWFYTjBWRzlEZFhKMlpVeHBibVVvYVN3Z2VDd2dlU3dnWm5KdmJVMWhjbXRsY2l3Z2RHOU5ZWEpyWlhJc0lHTnZiblJ5YjJ4UWIybHVkQ2s3WEc0Z0lDQWdJQ0FnSUgwZ1pXeHpaU0I3WEc0Z0lDQWdJQ0FnSUNBZ1pHbHpkQ0E5SUhSb2FYTXVZMkZzWTNWc1lYUmxSR2x6ZEZSdlUzUnlZV2xuYUhSTWFXNWxLSGdzSUhrc0lIQkdjbTl0TENCd1ZHOHBPMXh1SUNBZ0lDQWdJQ0I5WEc0Z0lDQWdJQ0FnSUdsbUlDZ29JVzFwYmtScGMzUWdKaVlnWkdsemRDQWhQVDBnYm5Wc2JDQW1KaUJrYVhOMElEd2dOU2tnZkh3Z2JXbHVSR2x6ZENBbUppQmthWE4wSUNFOVBTQnVkV3hzSUNZbUlHUnBjM1FnUENCdGFXNUVhWE4wS1NCN1hHNGdJQ0FnSUNBZ0lDQWdiV2x1UkdsemRDQTlJR1JwYzNRN1hHNGdJQ0FnSUNBZ0lDQWdZMkZ1Wkdsa1lYUmxTV1I0SUQwZ2FUdGNiaUFnSUNBZ0lDQWdmVnh1SUNBZ0lDQWdmVnh1SUNBZ0lIMWNiaUFnSUNCeVpYUjFjbTRnWTJGdVpHbGtZWFJsU1dSNE8xeHVJQ0I5WEc1Y2JpQWdZMkZzWTNWc1lYUmxSR2x6ZEZSdlUzUnlZV2xuYUhSTWFXNWxLSGc2SUc1MWJXSmxjaXdnZVRvZ2JuVnRZbVZ5TENCd01Ub2dSRWN1VUc5cGJuUXNJSEF5T2lCRVJ5NVFiMmx1ZENrNklHNTFiV0psY2lCOElHNTFiR3dnZTF4dUlDQWdJQzhxSUdOaGJHTjFiR0YwYVc1bklHTnZiM0prYVc1aGRHVnpJRzltSUdFZ2NtVmpkQ0JoY205MWJtUWdZU0JzYVc1bExpQkpaaUJqZFhKemIzSWdZMjl2Y21SeklHRnlaU0J2ZFhSemFXUmxJSFJvYVhNZ2NtVmpkQ0F0SUdGemMzVnRaU0IwYUdGMFhHNGdJQ0FnSUNBZ0lIQnZhVzUwSUdseklHNXZkQ0J2YmlCc2FXNWxJR0Z1WkNCa2J5QnViM1FnWTJGc1kzVnNZWFJsSUdScGMzUmhibU5sSUhSdklHeHBibVVnS2k5Y2JpQWdJQ0JqYjI1emRDQjRUV2x1SUQwZ1RXRjBhQzV0YVc0b2NERXVlQ3dnY0RJdWVDazdYRzRnSUNBZ1kyOXVjM1FnZUUxaGVDQTlJRTFoZEdndWJXRjRLSEF4TG5nc0lIQXlMbmdwTzF4dUlDQWdJR052Ym5OMElIbE5hVzRnUFNCTllYUm9MbTFwYmlod01TNTVMQ0J3TWk1NUtUdGNiaUFnSUNCamIyNXpkQ0I1VFdGNElEMGdUV0YwYUM1dFlYZ29jREV1ZVN3Z2NESXVlU2s3WEc1Y2JpQWdJQ0F2TDJGa1pHbHVaeUJoSUdOdmRYQnNaU0J2WmlCd2FYaGxiSE1nZEc4Z2FXNWpjbVZoYzJVZ2RHaGxJSGRwWkhSb0wyaGxhV2RvZENCdlppQjBhR1VnY21WamRGeHVJQ0FnSUdOdmJuTjBJSFJvY21WemFHOXNaQ0E5SURJN1hHNGdJQ0FnY21WMGRYSnVJSGdnUGowZ2VFMXBiaUF0SUhSb2NtVnphRzlzWkNBbUppQjRJRHc5SUhoTllYZ2dLeUIwYUhKbGMyaHZiR1FnSmlZZ2VTQStQU0I1VFdsdUlDMGdkR2h5WlhOb2IyeGtJQ1ltSUhrZ1BEMGdlVTFoZUNBcklIUm9jbVZ6YUc5c1pDQS9YRzRnSUNBZ0lDQjBhR2x6TG1ScGMzUlViMU4wY21GcFoyaDBUR2x1WlZObFoyMWxiblFvZUN3Z2VTd2djREVzSUhBeUtTQTZYRzRnSUNBZ0lDQnVkV3hzTzF4dUlDQjlYRzVjYmlBZ1pHbHpkRlJ2VTNSeVlXbG5hSFJNYVc1bFUyVm5iV1Z1ZENoNE9pQnVkVzFpWlhJc0lIazZJRzUxYldKbGNpd2djREU2SUVSSExsQnZhVzUwTENCd01qb2dSRWN1VUc5cGJuUXBJSHRjYmlBZ0lDQmpiMjV6ZENCa2FYTjBJRDBnS0hneE9pQnVkVzFpWlhJc0lIa3hPaUJ1ZFcxaVpYSXNJSGd5T2lCdWRXMWlaWElzSUhreU9pQnVkVzFpWlhJcElEMCtJRTFoZEdndWNHOTNLQ2g0TVNBdElIZ3lLU3dnTWlrZ0t5Qk5ZWFJvTG5CdmR5Z29lVEVnTFNCNU1pa3NJRElwTzF4dUlDQWdJR052Ym5OMElHd2dQU0JrYVhOMEtIQXhMbmdzSUhBeExua3NJSEF5TG5nc0lIQXlMbmtwTzF4dUlDQWdJR2xtSUNoc0lEMDlJREFwSUhKbGRIVnliaUJrYVhOMEtIZ3NJSGtzSUhBeExuZ3NJSEF4TG5rcE8xeHVJQ0FnSUd4bGRDQjBJRDBnS0NoNElDMGdjREV1ZUNrZ0tpQW9jREl1ZUNBdElIQXhMbmdwSUNzZ0tIa2dMU0J3TVM1NUtTQXFJQ2h3TWk1NUlDMGdjREV1ZVNrcElDOGdiRHRjYmlBZ0lDQjBJRDBnVFdGMGFDNXRZWGdvTUN3Z1RXRjBhQzV0YVc0b01Td2dkQ2twTzF4dUlDQWdJSEpsZEhWeWJpQmthWE4wS0hnc0lIa3NJSEF4TG5nZ0t5QjBJQ29nS0hBeUxuZ2dMU0J3TVM1NEtTd2djREV1ZVNBcklIUWdLaUFvY0RJdWVTQXRJSEF4TG5rcEtUdGNiaUFnZlZ4dVhHNGdJR05oYkdOMWJHRjBaVVJwYzNSVWIwTjFjblpsVEdsdVpTaHBPaUJ1ZFcxaVpYSXNJSGc2SUc1MWJXSmxjaXdnZVRvZ2JuVnRZbVZ5TENCd01Ub2dSRWN1VUc5cGJuUXNJSEF5T2lCRVJ5NVFiMmx1ZEN4Y2JpQWdJQ0J3WXpvZ1JFY3VVRzlwYm5RcE9pQnVkVzFpWlhJZ2ZDQnVkV3hzSUh0Y2JpQWdJQ0F2S2lCallXeGpkV3hoZEdsdVp5QmpiMjl5WkdsdVlYUmxjeUJ2WmlCaElISmxZM1FnWVhKdmRXNWtJR0VnYkdsdVpTNGdTV1lnWTNWeWMyOXlJR052YjNKa2N5QmhjbVVnYjNWMGMybGtaU0IwYUdseklITm9ZWEJsSUMwZ1lYTnpkVzFsSUhSb1lYUmNiaUFnSUNBZ0lDQWdjRzlwYm5RZ2FYTWdibTkwSUc5dUlHeHBibVVnWVc1a0lHUnZJRzV2ZENCallXeGpkV3hoZEdVZ1pHbHpkR0Z1WTJVZ2RHOGdiR2x1WlNBcUwxeHVJQ0FnSUdOdmJuTjBJSGhOYVc0Z1BTQk5ZWFJvTG0xcGJpaHdNUzU0TENCd01pNTRMQ0J3WXk1NEtUdGNiaUFnSUNCamIyNXpkQ0I0VFdGNElEMGdUV0YwYUM1dFlYZ29jREV1ZUN3Z2NESXVlQ3dnY0dNdWVDazdYRzRnSUNBZ1kyOXVjM1FnZVUxcGJpQTlJRTFoZEdndWJXbHVLSEF4TG5rc0lIQXlMbmtzSUhCakxua3BPMXh1SUNBZ0lHTnZibk4wSUhsTllYZ2dQU0JOWVhSb0xtMWhlQ2h3TVM1NUxDQndNaTU1TENCd1l5NTVLVHRjYmx4dUlDQWdJQzh2WVdSa2FXNW5JR0VnWTI5MWNHeGxJRzltSUhCcGVHVnNjeUIwYnlCcGJtTnlaV0Z6WlNCMGFHVWdkMmxrZEdndmFHVnBaMmgwSUc5bUlIUm9aU0J5WldOMFhHNGdJQ0FnWTI5dWMzUWdkR2h5WlhOb2IyeGtJRDBnTWp0Y2JpQWdJQ0JwWmlBb2VDQStQU0I0VFdsdUlDMGdkR2h5WlhOb2IyeGtJQ1ltSUhnZ1BEMGdlRTFoZUNBcklIUm9jbVZ6YUc5c1pDQW1KaUI1SUQ0OUlIbE5hVzRnTFNCMGFISmxjMmh2YkdRZ0ppWWdlU0E4UFNCNVRXRjRJQ3NnZEdoeVpYTm9iMnhrS1NCN1hHNGdJQ0FnSUNCamIyNXpkQ0IzSUQwZ2VFMWhlQ0F0SUhoTmFXNDdYRzRnSUNBZ0lDQmpiMjV6ZENCb0lEMGdlVTFoZUNBdElIbE5hVzQ3WEc0Z0lDQWdJQ0J5WlhSMWNtNGdkR2hwY3k1allXeGpkV3hoZEdWRWFYTjBWRzlEZFhKMlpVbHVVbVZqZENoNExDQjVMQ0J3TVN3Z2NHTXNJSEF5TENCM0xDQm9LVHRjYmlBZ0lDQjlYRzRnSUNBZ2NtVjBkWEp1SUc1MWJHdzdYRzRnSUgxY2JseHVJQ0JqWVd4amRXeGhkR1ZFYVhOMFZHOURkWEoyWlVsdVVtVmpkQ2g0T2lCdWRXMWlaWElzSUhrNklHNTFiV0psY2l3Z2NEQTZJRVJITGxCdmFXNTBMQ0J3TVRvZ1JFY3VVRzlwYm5Rc0lIQXlPaUJFUnk1UWIybHVkQ3hjYmlBZ0lDQjNPaUJ1ZFcxaVpYSXNJR2c2SUc1MWJXSmxjaWs2SUc1MWJXSmxjaUI3WEc0Z0lDQWdZMjl1YzNRZ2MzUmxjRXhsYmlBOUlETTdYRzRnSUNBZ1kyOXVjM1FnYzNSbGNITk9kVzBnUFNCTllYUm9MbVpzYjI5eUtDaDNJQ3NnYUNrZ0x5QnpkR1Z3VEdWdUtUdGNiaUFnSUNCamIyNXpkQ0JrWld4MFlWUWdQU0F4SUM4Z2MzUmxjSE5PZFcwN1hHNGdJQ0FnWTI5dWMzUWdZWEp5V0NBOUlHNWxkeUJWYVc1ME16SkJjbkpoZVNoemRHVndjMDUxYlNrN1hHNGdJQ0FnWTI5dWMzUWdZWEp5V1NBOUlHNWxkeUJWYVc1ME16SkJjbkpoZVNoemRHVndjMDUxYlNrN1hHNGdJQ0FnWTI5dWMzUWdiV0Y0U0ZjZ1BTQnVaWGNnVldsdWRETXlRWEp5WVhrb2MzUmxjSE5PZFcwcE8xeHVJQ0FnSUd4bGRDQnRhVzVUZFcxSVZ6b2diblZ0WW1WeUlId2diblZzYkNBOUlHNTFiR3c3WEc0Z0lDQWdZMjl1YzNRZ1kyRnVaR2xrWVhSbFNXUjRjeUE5SUc1bGR5QkNhWFJCY25KaGVTaHpkR1Z3YzA1MWJTazdYRzRnSUNBZ1ptOXlJQ2hzWlhRZ2FTQTlJREE3SUdrZ1BDQmhjbkpZTG14bGJtZDBhRHNnYVNzcktTQjdYRzRnSUNBZ0lDQmpiMjV6ZENCMElEMGdhU0FxSUdSbGJIUmhWRHRjYmlBZ0lDQWdJR052Ym5OMElIaFBia04xY25abElEMGdUV0YwYUM1d2IzY29LREVnTFNCMEtTd2dNaWtnS2lCd01DNTRJQ3NnTWlBcUlIUWdLaUFvTVNBdElIUXBJQ29nY0RFdWVDQXJJRTFoZEdndWNHOTNLSFFzSURJcElDb2djREl1ZUR0Y2JpQWdJQ0FnSUdOdmJuTjBJSGxQYmtOMWNuWmxJRDBnVFdGMGFDNXdiM2NvS0RFZ0xTQjBLU3dnTWlrZ0tpQndNQzU1SUNzZ01pQXFJSFFnS2lBb01TQXRJSFFwSUNvZ2NERXVlU0FySUUxaGRHZ3VjRzkzS0hRc0lESXBJQ29nY0RJdWVUdGNiaUFnSUNBZ0lHTnZibk4wSUhKbFkzUlhJRDBnVFdGMGFDNWhZbk1vZUNBdElIaFBia04xY25abEtUdGNiaUFnSUNBZ0lHTnZibk4wSUhKbFkzUklJRDBnVFdGMGFDNWhZbk1vZVNBdElIbFBia04xY25abEtUdGNiaUFnSUNBZ0lHTnZibk4wSUhOMWJVaFhJRDBnY21WamRGY2dLeUJ5WldOMFNEdGNiaUFnSUNBZ0lHbG1JQ2doYldsdVUzVnRTRmNnZkh3Z2JXbHVVM1Z0U0ZjZ1BpQnpkVzFJVnlsY2JpQWdJQ0FnSUNBZ2JXbHVVM1Z0U0ZjZ1BTQnpkVzFJVnp0Y2JpQWdJQ0FnSUcxaGVFaFhXMmxkSUQwZ1RXRjBhQzV0WVhnb2NtVmpkRmNzSUhKbFkzUklLVHRjYmlBZ0lDQWdJR0Z5Y2xoYmFWMGdQU0I0VDI1RGRYSjJaVHRjYmlBZ0lDQWdJR0Z5Y2xsYmFWMGdQU0I1VDI1RGRYSjJaVHRjYmlBZ0lDQjlYRzRnSUNBZ1ptOXlJQ2hzWlhRZ2FTQTlJREE3SUdrZ1BDQmhjbkpZTG14bGJtZDBhRHNnYVNzcktTQjdYRzRnSUNBZ0lDQnBaaUFvYldGNFNGZGJhVjBnUENCdGFXNVRkVzFJVnlFcFhHNGdJQ0FnSUNBZ0lHTmhibVJwWkdGMFpVbGtlSE11YzJWMFFtbDBLR2tzSUhSeWRXVXNJR1poYkhObEtUdGNiaUFnSUNCOVhHNGdJQ0FnYkdWMElHMXBia1JwYzNRNklHNTFiV0psY2lCOElHNTFiR3dnUFNCdWRXeHNPMXh1SUNBZ0lHWnZjaUFvYkdWMElHb2dQU0F0TVRzZ0tHb2dQU0JqWVc1a2FXUmhkR1ZKWkhoekxtWnBibVJPWlhoMEtHb3BLU0FoUFQwZ0xURTdLU0I3WEc0Z0lDQWdJQ0JqYjI1emRDQmthWE4wSUQwZ1RXRjBhQzVvZVhCdmRDZ29ZWEp5V0Z0cVhTQXRJSGdwTENBb1lYSnlXVnRxWFNBdElIa3BLVHRjYmlBZ0lDQWdJR2xtSUNnaGJXbHVSR2x6ZENCOGZDQnRhVzVFYVhOMElENGdaR2x6ZENsY2JpQWdJQ0FnSUNBZ2JXbHVSR2x6ZENBOUlHUnBjM1E3WEc0Z0lDQWdmVnh1SUNBZ0lISmxkSFZ5YmlCdGFXNUVhWE4wSVR0Y2JpQWdmVnh1WEc0Z0lHZGxkRXhwYm1WTVpXNW5kR2dvY0RGNE9pQnVkVzFpWlhJc0lIQXhlVG9nYm5WdFltVnlMQ0J3TW5nNklHNTFiV0psY2l3Z2NESjVPaUJ1ZFcxaVpYSXBPaUJ1ZFcxaVpYSWdlMXh1SUNBZ0lISmxkSFZ5YmlCTllYUm9Mbk54Y25Rb1RXRjBhQzV3YjNjb2NESjRJQzBnY0RGNExDQXlLU0FySUUxaGRHZ3VjRzkzS0hBeWVTQXRJSEF4ZVN3Z01pa3BPMXh1SUNCOVhHNWNiaUFnWjJWMFVHOXBiblJQYmtScGMzUmhibU5sS0hBeGVEb2diblZ0WW1WeUxDQndNWGs2SUc1MWJXSmxjaXdnY0RKNE9pQnVkVzFpWlhJc0lIQXllVG9nYm5WdFltVnlMQ0JrYVhOMFlXNWpaVG9nYm5WdFltVnlMQ0JzWlc1bmRHZzZJRzUxYldKbGNpazZJRVJITGxCdmFXNTBJSHRjYmlBZ0lDQmpiMjV6ZENCa2VDQTlJQ2h3TW5nZ0xTQndNWGdwSUM4Z2JHVnVaM1JvTzF4dUlDQWdJR052Ym5OMElHUjVJRDBnS0hBeWVTQXRJSEF4ZVNrZ0x5QnNaVzVuZEdnN1hHNGdJQ0FnWTI5dWMzUWdjRE40SUQwZ2NESjRJQzBnWkdsemRHRnVZMlVnS2lCa2VEdGNiaUFnSUNCamIyNXpkQ0J3TTNrZ1BTQndNbmtnTFNCa2FYTjBZVzVqWlNBcUlHUjVPMXh1WEc0Z0lDQWdjbVYwZFhKdUlHNWxkeUJFUnk1UWIybHVkQ2h3TTNnc0lIQXplU2s3WEc0Z0lIMWNibHh1SUNCbWFXNWtRMjl1ZEhKdmJGQnZhVzUwS0dsa2VEb2diblZ0WW1WeUxDQjRNVG9nYm5WdFltVnlMQ0I1TVRvZ2JuVnRZbVZ5TENCNE1qb2diblZ0WW1WeUxDQjVNam9nYm5WdFltVnlMQ0JwUHpvZ2JuVnRZbVZ5S1RvZ1JFY3VVRzlwYm5RZ2UxeHVJQ0FnSUdOdmJuTjBJRzFwWkZnZ1BTQjRNU0FySUNoNE1pQXRJSGd4S1NBdklESTdYRzRnSUNBZ1kyOXVjM1FnYldsa1dTQTlJSGt4SUNzZ0tIa3lJQzBnZVRFcElDOGdNanRjYmlBZ0lDQnNaWFFnWkhnZ1BTQnRhV1JZSUMwZ2VERTdYRzRnSUNBZ2JHVjBJR1I1SUQwZ2JXbGtXU0F0SUhreE8xeHVJQ0FnSUdOdmJuTjBJR1JwYzNRZ1BTQk5ZWFJvTG5OeGNuUW9aSGdnS2lCa2VDQXJJR1I1SUNvZ1pIa3BPMXh1SUNBZ0lHUjRJQzg5SUdScGMzUTdYRzRnSUNBZ1pIa2dMejBnWkdsemREdGNiaUFnSUNCamIyNXpkQ0J3WlhKd1pXNWthV04xYkdGeVRHVnVJRDBnTlRBZ0tpQk5ZWFJvTG1ObGFXd29hV1I0SUM4Z01pazdYRzRnSUNBZ2NtVjBkWEp1SUdsa2VDQWxJRElnUFQwOUlEQWdQMXh1SUNBZ0lDQWdibVYzSUVSSExsQnZhVzUwS0cxcFpGZ2dLeUFvY0dWeWNHVnVaR2xqZFd4aGNreGxiaUF2SURJcElDb2daSGtzSUcxcFpGa2dMU0FvY0dWeWNHVnVaR2xqZFd4aGNreGxiaUF2SURJcElDb2daSGdwSURwY2JpQWdJQ0FnSUc1bGR5QkVSeTVRYjJsdWRDaHRhV1JZSUMwZ0tIQmxjbkJsYm1ScFkzVnNZWEpNWlc0Z0x5QXlLU0FxSUdSNUxDQnRhV1JaSUNzZ0tIQmxjbkJsYm1ScFkzVnNZWEpNWlc0Z0x5QXlLU0FxSUdSNEtUdGNiaUFnZlZ4dVhHNGdJR05oYm5aaGMwRnljbTkzS0hCaGRHZzZJRU5oYm5aaGMxSmxibVJsY21sdVowTnZiblJsZUhReVJDd2dZWEp5YjNkRmJtUllPaUJ1ZFcxaVpYSXNJR0Z5Y205M1JXNWtXVG9nYm5WdFltVnlMQ0J4ZFdGa1dEb2diblZ0WW1WeUxDQnhkV0ZrV1RvZ2JuVnRZbVZ5S1RvZ2RtOXBaQ0I3WEc0Z0lDQWdZMjl1YzNRZ1lYSnliM2RCYm1kc1pTQTlJRTFoZEdndVlYUmhiaklvY1hWaFpGZ2dMU0JoY25KdmQwVnVaRmdzSUhGMVlXUlpJQzBnWVhKeWIzZEZibVJaS1NBcklFMWhkR2d1VUVrN1hHNGdJQ0FnY0dGMGFDNXRiM1psVkc4b1lYSnliM2RGYm1SWUlDMGdLSFJvYVhNdVlYSnliM2RYYVdSMGFDQXFJRTFoZEdndWMybHVLR0Z5Y205M1FXNW5iR1VnTFNCTllYUm9MbEJKSUM4Z01UQXBLU3hjYmlBZ0lDQWdJR0Z5Y205M1JXNWtXU0F0SUNoMGFHbHpMbUZ5Y205M1YybGtkR2dnS2lCTllYUm9MbU52Y3loaGNuSnZkMEZ1WjJ4bElDMGdUV0YwYUM1UVNTQXZJREV3S1NrcE8xeHVJQ0FnSUhCaGRHZ3ViR2x1WlZSdktHRnljbTkzUlc1a1dDd2dZWEp5YjNkRmJtUlpLVHRjYmlBZ0lDQndZWFJvTG14cGJtVlVieWhoY25KdmQwVnVaRmdnTFNBb2RHaHBjeTVoY25KdmQxZHBaSFJvSUNvZ1RXRjBhQzV6YVc0b1lYSnliM2RCYm1kc1pTQXJJRTFoZEdndVVFa2dMeUF4TUNrcExGeHVJQ0FnSUNBZ1lYSnliM2RGYm1SWklDMGdLSFJvYVhNdVlYSnliM2RYYVdSMGFDQXFJRTFoZEdndVkyOXpLR0Z5Y205M1FXNW5iR1VnS3lCTllYUm9MbEJKSUM4Z01UQXBLU2s3WEc0Z0lIMWNibjFjYmlKZGZRPT0iLCJ2YXIgX19hd2FpdGVyID0gKHRoaXMgJiYgdGhpcy5fX2F3YWl0ZXIpIHx8IGZ1bmN0aW9uICh0aGlzQXJnLCBfYXJndW1lbnRzLCBQLCBnZW5lcmF0b3IpIHtcbiAgICBmdW5jdGlvbiBhZG9wdCh2YWx1ZSkgeyByZXR1cm4gdmFsdWUgaW5zdGFuY2VvZiBQID8gdmFsdWUgOiBuZXcgUChmdW5jdGlvbiAocmVzb2x2ZSkgeyByZXNvbHZlKHZhbHVlKTsgfSk7IH1cbiAgICByZXR1cm4gbmV3IChQIHx8IChQID0gUHJvbWlzZSkpKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgICAgZnVuY3Rpb24gZnVsZmlsbGVkKHZhbHVlKSB7IHRyeSB7IHN0ZXAoZ2VuZXJhdG9yLm5leHQodmFsdWUpKTsgfSBjYXRjaCAoZSkgeyByZWplY3QoZSk7IH0gfVxuICAgICAgICBmdW5jdGlvbiByZWplY3RlZCh2YWx1ZSkgeyB0cnkgeyBzdGVwKGdlbmVyYXRvcltcInRocm93XCJdKHZhbHVlKSk7IH0gY2F0Y2ggKGUpIHsgcmVqZWN0KGUpOyB9IH1cbiAgICAgICAgZnVuY3Rpb24gc3RlcChyZXN1bHQpIHsgcmVzdWx0LmRvbmUgPyByZXNvbHZlKHJlc3VsdC52YWx1ZSkgOiBhZG9wdChyZXN1bHQudmFsdWUpLnRoZW4oZnVsZmlsbGVkLCByZWplY3RlZCk7IH1cbiAgICAgICAgc3RlcCgoZ2VuZXJhdG9yID0gZ2VuZXJhdG9yLmFwcGx5KHRoaXNBcmcsIF9hcmd1bWVudHMgfHwgW10pKS5uZXh0KCkpO1xuICAgIH0pO1xufTtcbi8qIGVzbGludC1kaXNhYmxlIGNhbWVsY2FzZSAqL1xuLyogZXNsaW50LWRpc2FibGUgbWF4LWxlbiAqL1xuLyogRG8gbm90IGNoYW5nZSB0aGVzZSBpbXBvcnQgbGluZXMgdG8gbWF0Y2ggZXh0ZXJuYWwgbW9kdWxlcyBpbiB3ZWJwYWNrIGNvbmZpZ3VyYXRpb24gKi9cbmltcG9ydCAqIGFzIGdyb2sgZnJvbSAnZGF0YWdyb2stYXBpL2dyb2snO1xuaW1wb3J0ICogYXMgdWkgZnJvbSAnZGF0YWdyb2stYXBpL3VpJztcbmltcG9ydCAqIGFzIERHIGZyb20gJ2RhdGFncm9rLWFwaS9kZyc7XG5pbXBvcnQgeyBfaW5pdEVEQUFQSSB9IGZyb20gJy4uL3dhc20vRURBQVBJJztcbmltcG9ydCB7IGNvbXB1dGVQQ0EgfSBmcm9tICcuL2VkYS10b29scyc7XG5pbXBvcnQgeyBhZGRQcmVmaXhUb0VhY2hDb2x1bW5OYW1lLCBhZGRPbmVXYXlBbm92YVZpenVhbGl6YXRpb24gfSBmcm9tICcuL2VkYS11aSc7XG5pbXBvcnQgeyB0ZXN0RGF0YUZvckJpbmFyeUNsYXNzaWZpY2F0aW9uIH0gZnJvbSAnLi9kYXRhLWdlbmVyYXRvcnMnO1xuaW1wb3J0IHsgTElORUFSLCBSQkYsIFBPTFlOT01JQUwsIFNJR01PSUQsIGdldFRyYWluZWRNb2RlbCwgZ2V0UHJlZGljdGlvbiwgc2hvd1RyYWluUmVwb3J0LCBnZXRQYWNrZWRNb2RlbCB9IGZyb20gJy4vc3ZtJztcbmltcG9ydCB7IFBMU19BTkFMWVNJUyB9IGZyb20gJy4vcGxzL3Bscy1jb25zdGFudHMnO1xuaW1wb3J0IHsgcnVuTVZBLCBydW5EZW1vTVZBLCBnZXRQbHNBbmFseXNpcyB9IGZyb20gJy4vcGxzL3Bscy10b29scyc7XG5pbXBvcnQgeyBvbmVXYXlBbm92YSB9IGZyb20gJy4vc3RhdC10b29scyc7XG5pbXBvcnQgeyBnZXREYnNjYW5Xb3JrZXIgfSBmcm9tICdAZGF0YWdyb2stbGlicmFyaWVzL21hdGgnO1xuaW1wb3J0IHsgTXVsdGlDb2x1bW5EaW1SZWR1Y3Rpb25FZGl0b3IgfSBmcm9tICdAZGF0YWdyb2stbGlicmFyaWVzL21sL3NyYy9tdWx0aS1jb2x1bW4tZGltZW5zaW9uYWxpdHktcmVkdWN0aW9uL211bHRpLWNvbHVtbi1kaW0tcmVkdWN0aW9uLWVkaXRvcic7XG5pbXBvcnQgeyBtdWx0aUNvbFJlZHVjZURpbWVuc2lvbmFsaXR5IH0gZnJvbSAnQGRhdGFncm9rLWxpYnJhcmllcy9tbC9zcmMvbXVsdGktY29sdW1uLWRpbWVuc2lvbmFsaXR5LXJlZHVjdGlvbi9yZWR1Y2UtZGltZW5zaW9uYWxpdHknO1xuaW1wb3J0IHsgcnVuS05OSW1wdXRlciB9IGZyb20gJy4vbWlzc2luZy12YWx1ZXMtaW1wdXRhdGlvbi91aSc7XG5pbXBvcnQgeyBNQ0xFZGl0b3IgfSBmcm9tICdAZGF0YWdyb2stbGlicmFyaWVzL21sL3NyYy9NQ0wvbWNsLWVkaXRvcic7XG5pbXBvcnQgeyBtYXJrb3ZDbHVzdGVyIH0gZnJvbSAnQGRhdGFncm9rLWxpYnJhcmllcy9tbC9zcmMvTUNML2NsdXN0ZXJpbmctdmlldyc7XG5leHBvcnQgY29uc3QgX3BhY2thZ2UgPSBuZXcgREcuUGFja2FnZSgpO1xuLy9uYW1lOiBpbmZvXG5leHBvcnQgZnVuY3Rpb24gaW5mbygpIHtcbiAgICBncm9rLnNoZWxsLmluZm8oX3BhY2thZ2Uud2ViUm9vdCk7XG59XG4vL3RhZ3M6IGluaXRcbmV4cG9ydCBmdW5jdGlvbiBpbml0KCkge1xuICAgIHJldHVybiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG4gICAgICAgIHlpZWxkIF9pbml0RURBQVBJKCk7XG4gICAgfSk7XG59XG4vL3RvcC1tZW51OiBNTCB8IENsdXN0ZXIgfCBEQlNDQU4uLi5cbi8vbmFtZTogREJTQ0FOXG4vL2Rlc2NyaXB0aW9uOiBEZW5zaXR5LWJhc2VkIHNwYXRpYWwgY2x1c3RlcmluZyBvZiBhcHBsaWNhdGlvbnMgd2l0aCBub2lzZSAoREJTQ0FOKVxuLy9pbnB1dDogZGF0YWZyYW1lIGRmXG4vL2lucHV0OiBjb2x1bW4geENvbCB7dHlwZTogbnVtZXJpY2FsfVxuLy9pbnB1dDogY29sdW1uIHlDb2wge3R5cGU6IG51bWVyaWNhbH1cbi8vaW5wdXQ6IGRvdWJsZSBlcHNpbG9uID0gMC4wMiB7Y2FwdGlvbjogRXBzaWxvbn0gW1RoZSBtYXhpbXVtIGRpc3RhbmNlIGJldHdlZW4gdHdvIHNhbXBsZXMgZm9yIHRoZW0gdG8gYmUgY29uc2lkZXJlZCBhcyBpbiB0aGUgc2FtZSBuZWlnaGJvcmhvb2QuXVxuLy9pbnB1dDogaW50IG1pblB0cyA9IDQge2NhcHRpb246IE1pbmltdW0gcG9pbnRzfSBbVGhlIG51bWJlciBvZiBzYW1wbGVzIChvciB0b3RhbCB3ZWlnaHQpIGluIGEgbmVpZ2hib3Job29kIGZvciBhIHBvaW50IHRvIGJlIGNvbnNpZGVyZWQgYXMgYSBjb3JlIHBvaW50Ll1cbi8vb3V0cHV0OiBjb2x1bW4gY2x1c3RlclxuZXhwb3J0IGZ1bmN0aW9uIGRiU2NhbihkZiwgeENvbCwgeUNvbCwgZXBzaWxvbiwgbWluUHRzKSB7XG4gICAgcmV0dXJuIF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgY29uc3QgeCA9IHhDb2wuZ2V0UmF3RGF0YSgpO1xuICAgICAgICBjb25zdCB5ID0geUNvbC5nZXRSYXdEYXRhKCk7XG4gICAgICAgIGNvbnN0IHJlcyA9IHlpZWxkIGdldERic2Nhbldvcmtlcih4LCB5LCBlcHNpbG9uLCBtaW5QdHMpO1xuICAgICAgICBjb25zdCBjbHVzdGVyQ29sTmFtZSA9IGRmLmNvbHVtbnMuZ2V0VW51c2VkTmFtZSgnQ2x1c3RlciAoREJTQ0FOKScpO1xuICAgICAgICBjb25zdCBjbHVzdGVyID0gREcuQ29sdW1uLmZyb21JbnQzMkFycmF5KGNsdXN0ZXJDb2xOYW1lLCByZXMpO1xuICAgICAgICBkZi5jb2x1bW5zLmFkZChjbHVzdGVyKTtcbiAgICAgICAgcmV0dXJuIGNsdXN0ZXI7XG4gICAgfSk7XG59XG4vL3RvcC1tZW51OiBNTCB8IEFuYWx5emUgfCBQQ0EuLi5cbi8vbmFtZTogUENBXG4vL2Rlc2NyaXB0aW9uOiBQcmluY2lwYWwgY29tcG9uZW50IGFuYWx5c2lzIChQQ0EpXG4vL2lucHV0OiBkYXRhZnJhbWUgdGFibGVcbi8vaW5wdXQ6IGNvbHVtbl9saXN0IGZlYXR1cmVzIHt0eXBlOiBudW1lcmljYWx9XG4vL2lucHV0OiBpbnQgY29tcG9uZW50cyA9IDIge2NhcHRpb246IENvbXBvbmVudHN9IFtOdW1iZXIgb2YgY29tcG9uZW50cy5dXG4vL2lucHV0OiBib29sIGNlbnRlciA9IGZhbHNlIFtJbmRpY2F0aW5nIHdoZXRoZXIgdGhlIHZhcmlhYmxlcyBzaG91bGQgYmUgc2hpZnRlZCB0byBiZSB6ZXJvIGNlbnRlcmVkLl1cbi8vaW5wdXQ6IGJvb2wgc2NhbGUgPSBmYWxzZSBbSW5kaWNhdGluZyB3aGV0aGVyIHRoZSB2YXJpYWJsZXMgc2hvdWxkIGJlIHNjYWxlZCB0byBoYXZlIHVuaXQgdmFyaWFuY2UuXVxuZXhwb3J0IGZ1bmN0aW9uIFBDQSh0YWJsZSwgZmVhdHVyZXMsIGNvbXBvbmVudHMsIGNlbnRlciwgc2NhbGUpIHtcbiAgICByZXR1cm4gX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuICAgICAgICBjb25zdCBwY2FUYWJsZSA9IHlpZWxkIGNvbXB1dGVQQ0EodGFibGUsIGZlYXR1cmVzLCBjb21wb25lbnRzLCBjZW50ZXIsIHNjYWxlKTtcbiAgICAgICAgYWRkUHJlZml4VG9FYWNoQ29sdW1uTmFtZSgnUEMnLCBwY2FUYWJsZS5jb2x1bW5zKTtcbiAgICAgICAgaWYgKHRhYmxlLmlkID09PSBudWxsKSAvLyB0YWJsZSBpcyBsb2FkZWQgZnJvbSBhIGxvY2FsIGZpbGVcbiAgICAgICAgICAgIGdyb2suc2hlbGwuYWRkVGFibGVWaWV3KHBjYVRhYmxlKTtcbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBjb25zdCBjb2xzID0gdGFibGUuY29sdW1ucztcbiAgICAgICAgICAgIGZvciAoY29uc3QgY29sIG9mIHBjYVRhYmxlLmNvbHVtbnMpIHtcbiAgICAgICAgICAgICAgICBjb2wubmFtZSA9IGNvbHMuZ2V0VW51c2VkTmFtZShjb2wubmFtZSk7XG4gICAgICAgICAgICAgICAgY29scy5hZGQoY29sKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH0pO1xufVxuLy9uYW1lOiBEQlNDQU4gY2x1c3RlcmluZ1xuLy90YWdzOiBkaW0tcmVkLXBvc3Rwcm9jZXNzaW5nLWZ1bmN0aW9uXG4vL21ldGEuZGVmYXVsdFBvc3RQcm9jZXNzaW5nRnVuY3Rpb246IHRydWVcbi8vaW5wdXQ6IGNvbHVtbiBjb2wxXG4vL2lucHV0OiBjb2x1bW4gY29sMlxuLy9pbnB1dDogZG91YmxlIGVwc2lsb24gPSAwLjAxIHtkZWZhdWx0OiAwLjAxfVtNaW5pbXVtIGRpc3RhbmNlIGJldHdlZW4gdHdvIHBvaW50cyB0byBiZSBjb25zaWRlcmVkIGFzIGluIHRoZSBzYW1lIG5laWdoYm9yaG9vZC5dXG4vL2lucHV0OiBpbnQgbWluaW11bVBvaW50cyA9IDUge2RlZmF1bHQ6IDV9W01pbmltdW0gbnVtYmVyIG9mIHBvaW50cyB0byBmb3JtIGEgZGVuc2UgcmVnaW9uLl1cbmV4cG9ydCBmdW5jdGlvbiBkYnNjYW5Qb3N0UHJvY2Vzc2luZ0Z1bmN0aW9uKGNvbDEsIGNvbDIsIGVwc2lsb24sIG1pbmltdW1Qb2ludHMpIHtcbiAgICByZXR1cm4gX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuICAgICAgICBjb25zdCBkZiA9IGNvbDEuZGF0YUZyYW1lO1xuICAgICAgICBpZiAoZGYgPT09IG51bGwpXG4gICAgICAgICAgICByZXR1cm47XG4gICAgICAgIGNvbnN0IHJlc0NvbCA9IHlpZWxkIGRiU2NhbihkZiwgY29sMSwgY29sMiwgZXBzaWxvbiwgbWluaW11bVBvaW50cyk7XG4gICAgICAgIGRmLmNoYW5nZUNvbHVtblR5cGUocmVzQ29sLCAnc3RyaW5nJyk7XG4gICAgICAgIGNvbnN0IGNvbE5hbWVzID0gW2NvbDEubmFtZSwgY29sMi5uYW1lXTtcbiAgICAgICAgY29uc3QgdHYgPSBncm9rLnNoZWxsLnRhYmxlVmlldyhkZi5uYW1lKTtcbiAgICAgICAgaWYgKCF0dilcbiAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgLy8gZmluZCB0aGUgY29ycmVjdCBzY2F0dGVyUGxvdFZpZXdlciBhbmQgc2V0IHRoZSBjb2xvckNvbHVtbk5hbWVcbiAgICAgICAgZm9yIChjb25zdCB2IG9mIHR2LnZpZXdlcnMpIHtcbiAgICAgICAgICAgIGlmICh2IGluc3RhbmNlb2YgREcuU2NhdHRlclBsb3RWaWV3ZXIgJiYgY29sTmFtZXMuaW5jbHVkZXModi5wcm9wcy54Q29sdW1uTmFtZSkgJiYgY29sTmFtZXMuaW5jbHVkZXModi5wcm9wcy55Q29sdW1uTmFtZSkpIHtcbiAgICAgICAgICAgICAgICB2LnByb3BzLmNvbG9yQ29sdW1uTmFtZSA9IHJlc0NvbC5uYW1lO1xuICAgICAgICAgICAgICAgIHJldHVybjtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgIH0pO1xufVxuLy9uYW1lOiBOb25lIChudW1iZXIpXG4vL3RhZ3M6IGRpbS1yZWQtcHJlcHJvY2Vzc2luZy1mdW5jdGlvblxuLy9tZXRhLnN1cHBvcnRlZFR5cGVzOiBpbnQsZmxvYXQsZG91YmxlLHFudW1cbi8vbWV0YS5zdXBwb3J0ZWREaXN0YW5jZUZ1bmN0aW9uczogRGlmZmVyZW5jZVxuLy9pbnB1dDogY29sdW1uIGNvbFxuLy9pbnB1dDogc3RyaW5nIF9tZXRyaWMge29wdGlvbmFsOiB0cnVlfVxuLy9vdXRwdXQ6IG9iamVjdCByZXN1bHRcbmV4cG9ydCBmdW5jdGlvbiBudW1iZXJQcmVwcm9jZXNzaW5nRnVuY3Rpb24oY29sLCBfbWV0cmljKSB7XG4gICAgY29uc3QgcmFuZ2UgPSBjb2wuc3RhdHMubWF4IC0gY29sLnN0YXRzLm1pbjtcbiAgICBjb25zdCBlbnRyaWVzID0gY29sLnRvTGlzdCgpO1xuICAgIHJldHVybiB7IGVudHJpZXMsIG9wdGlvbnM6IHsgcmFuZ2UgfSB9O1xufVxuLy9uYW1lOiBOb25lIChzdHJpbmcpXG4vL3RhZ3M6IGRpbS1yZWQtcHJlcHJvY2Vzc2luZy1mdW5jdGlvblxuLy9tZXRhLnN1cHBvcnRlZFR5cGVzOiBzdHJpbmdcbi8vbWV0YS5zdXBwb3J0ZWREaXN0YW5jZUZ1bmN0aW9uczogT25lLUhvdCxMZXZlbnNodGVpbixIYW1taW5nXG4vL2lucHV0OiBjb2x1bW4gY29sXG4vL2lucHV0OiBzdHJpbmcgX21ldHJpYyB7b3B0aW9uYWw6IHRydWV9XG4vL291dHB1dDogb2JqZWN0IHJlc3VsdFxuZXhwb3J0IGZ1bmN0aW9uIHN0cmluZ1ByZXByb2Nlc3NpbmdGdW5jdGlvbihjb2wsIF9tZXRyaWMpIHtcbiAgICBjb25zdCBlbnRyaWVzID0gY29sLnRvTGlzdCgpO1xuICAgIHJldHVybiB7IGVudHJpZXMsIG9wdGlvbnM6IHt9IH07XG59XG4vL3RvcC1tZW51OiBNTCB8IFJlZHVjZSBEaW1lbnNpb25hbGl0eS4uLlxuLy9uYW1lOiBNdWx0aSBDb2x1bW4gRGltZW5zaW9uYWxpdHkgUmVkdWN0aW9uXG5leHBvcnQgZnVuY3Rpb24gcmVkdWNlRGltZW5zaW9uYWxpdHkoKSB7XG4gICAgcmV0dXJuIF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgY29uc3QgZWRpdG9yID0gbmV3IE11bHRpQ29sdW1uRGltUmVkdWN0aW9uRWRpdG9yKCk7XG4gICAgICAgIGNvbnN0IGRpYWxvZyA9IHVpLmRpYWxvZygnRGltZW5zaW9uYWxpdHkgcmVkdWN0aW9uJylcbiAgICAgICAgICAgIC5hZGQoZWRpdG9yLmdldEVkaXRvcigpKVxuICAgICAgICAgICAgLm9uT0soKCkgPT4gX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuICAgICAgICAgICAgY29uc3QgcGFyYW1zID0gZWRpdG9yLmdldFBhcmFtcygpO1xuICAgICAgICAgICAgaWYgKHBhcmFtcy5jb2x1bW5zLmxlbmd0aCA9PT0gMClcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB5aWVsZCBtdWx0aUNvbFJlZHVjZURpbWVuc2lvbmFsaXR5KHBhcmFtcy50YWJsZSwgcGFyYW1zLmNvbHVtbnMsIHBhcmFtcy5tZXRob2ROYW1lLCBwYXJhbXMuZGlzdGFuY2VNZXRyaWNzLCBwYXJhbXMud2VpZ2h0cywgcGFyYW1zLnByZXByb2Nlc3NpbmdGdW5jdGlvbnMsIHBhcmFtcy5hZ2dyZWFnZ3JlZ2F0aW9uTWV0aG9kLCAhIXBhcmFtcy5wbG90RW1iZWRkaW5ncywgISFwYXJhbXMuY2x1c3RlckVtYmVkZGluZ3MsIHBhcmFtcy5vcHRpb25zLCB7XG4gICAgICAgICAgICAgICAgZmFzdFJvd0NvdW50OiAxMDAwMCxcbiAgICAgICAgICAgIH0sIHBhcmFtcy5wb3N0UHJvY2Vzc2luZ0Z1bmN0aW9uLCBwYXJhbXMucG9zdFByb2Nlc3NpbmdGdW5jdGlvbkFyZ3MpO1xuICAgICAgICB9KSkuc2hvdygpO1xuICAgICAgICBkaWFsb2cuaGVscFVybCA9ICdodHRwczovL2RhdGFncm9rLmFpL2hlbHAvZXhwbG9yZS9kaW0tcmVkdWN0aW9uLm1kJztcbiAgICAgICAgY29uc3QgdmFsaWRhdGUgPSAoKSA9PiB7XG4gICAgICAgICAgICBjb25zdCBjb2xzID0gZWRpdG9yLmNvbHVtbnNJbnB1dC52YWx1ZTtcbiAgICAgICAgICAgIGNvbnN0IG9rQnV0dG9uID0gZGlhbG9nLmdldEJ1dHRvbignT0snKTtcbiAgICAgICAgICAgIGlmICghb2tCdXR0b24pXG4gICAgICAgICAgICAgICAgcmV0dXJuO1xuICAgICAgICAgICAgY29uc3QgaXNEaXNhYmxlZCA9ICFjb2xzIHx8IGNvbHMubGVuZ3RoID09PSAwO1xuICAgICAgICAgICAgaWYgKGlzRGlzYWJsZWQpXG4gICAgICAgICAgICAgICAgb2tCdXR0b24uY2xhc3NMaXN0LmFkZCgnZGlzYWJsZWQnKTtcbiAgICAgICAgICAgIGVsc2VcbiAgICAgICAgICAgICAgICBva0J1dHRvbi5jbGFzc0xpc3QucmVtb3ZlKCdkaXNhYmxlZCcpO1xuICAgICAgICB9O1xuICAgICAgICBlZGl0b3Iub25Db2x1bW5zQ2hhbmdlZC5zdWJzY3JpYmUoKCkgPT4ge1xuICAgICAgICAgICAgdHJ5IHtcbiAgICAgICAgICAgICAgICB2YWxpZGF0ZSgpO1xuICAgICAgICAgICAgfVxuICAgICAgICAgICAgY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgICAgICBjb25zb2xlLmVycm9yKGUpO1xuICAgICAgICAgICAgfVxuICAgICAgICB9KTtcbiAgICAgICAgdmFsaWRhdGUoKTtcbiAgICB9KTtcbn1cbi8vbmFtZTogR2V0TUNMRWRpdG9yXG4vL3RhZ3M6IGVkaXRvclxuLy9pbnB1dDogZnVuY2NhbGwgY2FsbFxuZXhwb3J0IGZ1bmN0aW9uIEdldE1DTEVkaXRvcihjYWxsKSB7XG4gICAgdHJ5IHtcbiAgICAgICAgY29uc3QgZnVuY0VkaXRvciA9IG5ldyBNQ0xFZGl0b3IoKTtcbiAgICAgICAgdWkuZGlhbG9nKCdNYXJrb3YgY2x1c3RlcmluZycpXG4gICAgICAgICAgICAuYWRkKGZ1bmNFZGl0b3IuZ2V0RWRpdG9yKCkpXG4gICAgICAgICAgICAub25PSygoKSA9PiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG4gICAgICAgICAgICBjb25zdCBwYXJhbXMgPSBmdW5jRWRpdG9yLnBhcmFtcztcbiAgICAgICAgICAgIHJldHVybiBjYWxsLmZ1bmMucHJlcGFyZSh7XG4gICAgICAgICAgICAgICAgZGY6IHBhcmFtcy50YWJsZSwgY29sczogcGFyYW1zLmNvbHVtbnMsIG1ldHJpY3M6IHBhcmFtcy5kaXN0YW5jZU1ldHJpY3MsXG4gICAgICAgICAgICAgICAgd2VpZ2h0czogcGFyYW1zLndlaWdodHMsIGFnZ3JlZ2F0aW9uTWV0aG9kOiBwYXJhbXMuYWdncmVhZ2dyZWdhdGlvbk1ldGhvZCwgcHJlcHJvY2Vzc2luZ0Z1bmNzOiBwYXJhbXMucHJlcHJvY2Vzc2luZ0Z1bmN0aW9ucyxcbiAgICAgICAgICAgICAgICBwcmVwcm9jZXNzaW5nRnVuY0FyZ3M6IHBhcmFtcy5wcmVwcm9jZXNzaW5nRnVuY0FyZ3MsIHRocmVzaG9sZDogcGFyYW1zLnRocmVzaG9sZCwgbWF4SXRlcmF0aW9uczogcGFyYW1zLm1heEl0ZXJhdGlvbnMsXG4gICAgICAgICAgICAgICAgdXNlV2ViR1BVOiBwYXJhbXMudXNlV2ViR1BVLFxuICAgICAgICAgICAgfSkuY2FsbCh0cnVlKTtcbiAgICAgICAgfSkpLnNob3coKTtcbiAgICB9XG4gICAgY2F0Y2ggKGVycikge1xuICAgICAgICBjb25zdCBlcnJNc2cgPSBlcnIgaW5zdGFuY2VvZiBFcnJvciA/IGVyci5tZXNzYWdlIDogZXJyLnRvU3RyaW5nKCk7XG4gICAgICAgIGNvbnN0IGVyclN0YWNrID0gZXJyIGluc3RhbmNlb2YgRXJyb3IgPyBlcnIuc3RhY2sgOiB1bmRlZmluZWQ7XG4gICAgICAgIGdyb2suc2hlbGwuZXJyb3IoYEdldCByZWdpb24gZWRpdG9yIGVycm9yOiAke2Vyck1zZ31gKTtcbiAgICAgICAgX3BhY2thZ2UubG9nZ2VyLmVycm9yKGVyck1zZywgdW5kZWZpbmVkLCBlcnJTdGFjayk7XG4gICAgfVxufVxuLy90b3AtbWVudTogTUwgfCBDbHVzdGVyIHwgTUNMLi4uXG4vL25hbWU6IE1DTFxuLy9kZXNjcmlwdGlvbjogTWFya292IGNsdXN0ZXJpbmcgKE1DTCkgaXMgYW4gdW5zdXBlcnZpc2VkIGNsdXN0ZXJpbmcgYWxnb3JpdGhtIGZvciBncmFwaHMgYmFzZWQgb24gc2ltdWxhdGlvbiBvZiBzdG9jaGFzdGljIGZsb3cuXG4vL2lucHV0OiBkYXRhZnJhbWUgZGZcbi8vaW5wdXQ6IGxpc3Q8Y29sdW1uPiBjb2xzXG4vL2lucHV0OiBsaXN0PHN0cmluZz4gbWV0cmljc1xuLy9pbnB1dDogbGlzdDxkb3VibGU+IHdlaWdodHNcbi8vaW5wdXQ6IHN0cmluZyBhZ2dyZWdhdGlvbk1ldGhvZFxuLy9pbnB1dDogbGlzdDxmdW5jPiBwcmVwcm9jZXNzaW5nRnVuY3Ncbi8vaW5wdXQ6IG9iamVjdCBwcmVwcm9jZXNzaW5nRnVuY0FyZ3Ncbi8vaW5wdXQ6IGludCB0aHJlc2hvbGQgPSA4MFxuLy9pbnB1dDogaW50IG1heEl0ZXJhdGlvbnMgPSAxMFxuLy9pbnB1dDogYm9vbCB1c2VXZWJHUFUgPSBmYWxzZVxuLy9lZGl0b3I6IEVEQTogR2V0TUNMRWRpdG9yXG5leHBvcnQgZnVuY3Rpb24gTUNMKGRmLCBjb2xzLCBtZXRyaWNzLCB3ZWlnaHRzLCBhZ2dyZWdhdGlvbk1ldGhvZCwgcHJlcHJvY2Vzc2luZ0Z1bmNzLCBwcmVwcm9jZXNzaW5nRnVuY0FyZ3MsIHRocmVzaG9sZCA9IDgwLCBtYXhJdGVyYXRpb25zID0gMTAsIHVzZVdlYkdQVSA9IGZhbHNlKSB7XG4gICAgcmV0dXJuIF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgY29uc3QgcmVzID0gKHlpZWxkIG1hcmtvdkNsdXN0ZXIoZGYsIGNvbHMsIG1ldHJpY3MsIHdlaWdodHMsIGFnZ3JlZ2F0aW9uTWV0aG9kLCBwcmVwcm9jZXNzaW5nRnVuY3MsIHByZXByb2Nlc3NpbmdGdW5jQXJncywgdGhyZXNob2xkLCBtYXhJdGVyYXRpb25zLCB1c2VXZWJHUFUpKTtcbiAgICAgICAgcmV0dXJuIHJlcyA9PT0gbnVsbCB8fCByZXMgPT09IHZvaWQgMCA/IHZvaWQgMCA6IHJlcy5zYztcbiAgICB9KTtcbn1cbi8vbmFtZTogUExTXG4vL2Rlc2NyaXB0aW9uOiBDb21wdXRlIHBhcnRpYWwgbGVhc3Qgc3F1YXJlcyAoUExTKSByZWdyZXNzaW9uIGFuYWx5c2lzIGNvbXBvbmVudHM6IHByZWRpY3Rpb24sIHJlZ3Jlc3Npb24gY29lZmZpY2llbnRzLCBULSAmIFUtc2NvcmVzLCBYLWxvYWRpbmdzLlxuLy9pbnB1dDogZGF0YWZyYW1lIHRhYmxlXG4vL2lucHV0OiBjb2x1bW5fbGlzdCBmZWF0dXJlcyB7dHlwZTogbnVtZXJpY2FsfVxuLy9pbnB1dDogY29sdW1uIHByZWRpY3Qge3R5cGU6IG51bWVyaWNhbH1cbi8vaW5wdXQ6IGludCBjb21wb25lbnRzID0gM1xuLy9pbnB1dDogY29sdW1uIG5hbWVzIHt0eXBlOiBzdHJpbmd9XG4vL291dHB1dDogb2JqZWN0IHBsc1Jlc3VsdHNcbmV4cG9ydCBmdW5jdGlvbiBQTFModGFibGUsIGZlYXR1cmVzLCBwcmVkaWN0LCBjb21wb25lbnRzLCBuYW1lcykge1xuICAgIHJldHVybiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG4gICAgICAgIHJldHVybiB5aWVsZCBnZXRQbHNBbmFseXNpcyh7XG4gICAgICAgICAgICB0YWJsZTogdGFibGUsXG4gICAgICAgICAgICBmZWF0dXJlczogZmVhdHVyZXMsXG4gICAgICAgICAgICBwcmVkaWN0OiBwcmVkaWN0LFxuICAgICAgICAgICAgY29tcG9uZW50czogY29tcG9uZW50cyxcbiAgICAgICAgICAgIG5hbWVzOiBuYW1lcyxcbiAgICAgICAgfSk7XG4gICAgfSk7XG59XG4vL3RvcC1tZW51OiBNTCB8IEFuYWx5emUgfCBQTFMuLi5cbi8vbmFtZTogdG9wTWVudVBMU1xuLy9kZXNjcmlwdGlvbjogQ29tcHV0ZSBwYXJ0aWFsIGxlYXN0IHNxdWFyZXMgKFBMUykgcmVncmVzc2lvbiBjb21wb25lbnRzLiBUaGV5IG1heGltYWxseSBzdW1tYXJpemUgdGhlIHZhcmlhdGlvbiBvZiB0aGUgcHJlZGljdG9ycyB3aGlsZSBtYXhpbWl6aW5nIGNvcnJlbGF0aW9uIHdpdGggdGhlIHJlc3BvbnNlIHZhcmlhYmxlLlxuZXhwb3J0IGZ1bmN0aW9uIHRvcE1lbnVQTFMoKSB7XG4gICAgcmV0dXJuIF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgeWllbGQgcnVuTVZBKFBMU19BTkFMWVNJUy5DT01QVVRFX0NPTVBPTkVOVFMpO1xuICAgIH0pO1xufVxuLy90b3AtbWVudTogTUwgfCBBbmFseXplIHwgTXVsdGl2YXJpYXRlIEFuYWx5c2lzLi4uXG4vL25hbWU6IG11bHRpdmFyaWF0ZUFuYWx5c2lzXG4vL2Rlc2NyaXB0aW9uOiBNdWx0aWRpbWVuc2lvbmFsIGRhdGEgYW5hbHlzaXMgdXNpbmcgcGFydGlhbCBsZWFzdCBzcXVhcmVzIChQTFMpIHJlZ3Jlc3Npb24uXG5leHBvcnQgZnVuY3Rpb24gTVZBKCkge1xuICAgIHJldHVybiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG4gICAgICAgIHlpZWxkIHJ1bk1WQShQTFNfQU5BTFlTSVMuUEVSRk9STV9NVkEpO1xuICAgIH0pO1xufVxuLy9uYW1lOiBNVkEgZGVtb1xuLy9kZXNjcmlwdGlvbjogTXVsdGlkaW1lbnNpb25hbCBkYXRhIGFuYWx5c2lzIHVzaW5nIHBhcnRpYWwgbGVhc3Qgc3F1YXJlcyAoUExTKSByZWdyZXNzaW9uLiBJdCBpZGVudGlmaWVzIGxhdGVudCBmYWN0b3JzIGFuZCBjb25zdHJ1Y3RzIGEgbGluZWFyIG1vZGVsIGJhc2VkIG9uIHRoZW0uXG4vL21ldGEuZGVtb1BhdGg6IENvbXB1dGUgfCBNdWx0aXZhcmlhdGUgYW5hbHlzaXNcbmV4cG9ydCBmdW5jdGlvbiBkZW1vTXVsdGl2YXJpYXRlQW5hbHlzaXMoKSB7XG4gICAgcmV0dXJuIF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgcnVuRGVtb01WQSgpO1xuICAgIH0pO1xufVxuLy9uYW1lOiBHZW5lcmF0ZSBsaW5lYXIgc2VwYXJhYmxlIGRhdGFzZXRcbi8vZGVzY3JpcHRpb246IEdlbmVyYXRlcyBsaW5lYXIgc2VwYXJibGUgZGF0YXNldCBmb3IgdGVzdGluZyBiaW5hcnkgY2xhc3NpZmljYXRvcnNcbi8vaW5wdXQ6IHN0cmluZyBuYW1lID0gJ0RhdGEnIHtjYXB0aW9uOiBuYW1lOyBjYXRlZ29yeTogRGF0YXNldH1cbi8vaW5wdXQ6IGludCBzYW1wbGVzQ291bnQgPSAxMDAwIHtjYXB0aW9uOiBzYW1wbGVzOyBjYXRlZ29yeTogU2l6ZX1cbi8vaW5wdXQ6IGludCBmZWF0dXJlc0NvdW50ID0gMiB7Y2FwdGlvbjogZmVhdHVyZXM7IGNhdGVnb3J5OiBTaXplfVxuLy9pbnB1dDogZG91YmxlIG1pbiA9IC0zOSB7Y2FwdGlvbjogbWluOyBjYXRlZ29yeTogUmFuZ2V9XG4vL2lucHV0OiBkb3VibGUgbWF4ID0gMTczIHtjYXB0aW9uOiBtYXg7IGNhdGVnb3J5OiBSYW5nZX1cbi8vaW5wdXQ6IGRvdWJsZSB2aW9sYXRvcnNQZXJjZW50YWdlID0gNSB7Y2FwdGlvbjogdmlvbGF0b3JzOyB1bml0czogJTsgY2F0ZWdvcnk6IERhdGFzZXR9XG4vL291dHB1dDogZGF0YWZyYW1lIGRmXG5leHBvcnQgZnVuY3Rpb24gdGVzdERhdGFMaW5lYXJTZXBhcmFibGUobmFtZSwgc2FtcGxlc0NvdW50LCBmZWF0dXJlc0NvdW50LCBtaW4sIG1heCwgdmlvbGF0b3JzUGVyY2VudGFnZSkge1xuICAgIHJldHVybiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG4gICAgICAgIHJldHVybiB5aWVsZCB0ZXN0RGF0YUZvckJpbmFyeUNsYXNzaWZpY2F0aW9uKExJTkVBUiwgWzAsIDBdLCBuYW1lLCBzYW1wbGVzQ291bnQsIGZlYXR1cmVzQ291bnQsIG1pbiwgbWF4LCB2aW9sYXRvcnNQZXJjZW50YWdlKTtcbiAgICB9KTtcbn1cbi8vbmFtZTogR2VuZXJhdGUgbGluZWFyIG5vbi1zZXBhcmFibGUgZGF0YXNldFxuLy9kZXNjcmlwdGlvbjogR2VuZXJhdGVzIGxpbmVhciBub24tc2VwYXJibGUgZGF0YXNldCBmb3IgdGVzdGluZyBiaW5hcnkgY2xhc3NpZmljYXRvcnNcbi8vaW5wdXQ6IHN0cmluZyBuYW1lID0gJ0RhdGEnIHtjYXB0aW9uOiBuYW1lOyBjYXRlZ29yeTogRGF0YXNldH1cbi8vaW5wdXQ6IGRvdWJsZSBzaWdtYSA9IDkwICB7Y2FwdGlvbjogc2lnbWE7IGNhdGVnb3J5OiBIeXBlcnBhcmFtZXRlcnN9IFtSQkYta2VybmVsIHBhcmFtYXRlcl1cbi8vaW5wdXQ6IGludCBzYW1wbGVzQ291bnQgPSAxMDAwIHtjYXB0aW9uOiBzYW1wbGVzOyBjYXRlZ29yeTogU2l6ZX1cbi8vaW5wdXQ6IGludCBmZWF0dXJlc0NvdW50ID0gMiB7Y2FwdGlvbjogZmVhdHVyZXM7IGNhdGVnb3J5OiBTaXplfVxuLy9pbnB1dDogZG91YmxlIG1pbiA9IC0zOSB7Y2FwdGlvbjogbWluOyBjYXRlZ29yeTogUmFuZ2V9XG4vL2lucHV0OiBkb3VibGUgbWF4ID0gMTczIHtjYXB0aW9uOiBtYXg7IGNhdGVnb3J5OiBSYW5nZX1cbi8vaW5wdXQ6IGRvdWJsZSB2aW9sYXRvcnNQZXJjZW50YWdlID0gNSB7Y2FwdGlvbjogdmlvbGF0b3JzOyB1bml0czogJTsgY2F0ZWdvcnk6IERhdGFzZXR9XG4vL291dHB1dDogZGF0YWZyYW1lIGRmXG5leHBvcnQgZnVuY3Rpb24gdGVzdERhdGFMaW5lYXJOb25TZXBhcmFibGUobmFtZSwgc2lnbWEsIHNhbXBsZXNDb3VudCwgZmVhdHVyZXNDb3VudCwgbWluLCBtYXgsIHZpb2xhdG9yc1BlcmNlbnRhZ2UpIHtcbiAgICByZXR1cm4gX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuICAgICAgICByZXR1cm4geWllbGQgdGVzdERhdGFGb3JCaW5hcnlDbGFzc2lmaWNhdGlvbihSQkYsIFtzaWdtYSwgMF0sIG5hbWUsIHNhbXBsZXNDb3VudCwgZmVhdHVyZXNDb3VudCwgbWluLCBtYXgsIHZpb2xhdG9yc1BlcmNlbnRhZ2UpO1xuICAgIH0pO1xufVxuLy9uYW1lOiB0cmFpbkxpbmVhcktlcm5lbFNWTVxuLy9tZXRhLm1sbmFtZTogbGluZWFyIGtlcm5lbCBMUy1TVk1cbi8vbWV0YS5tbHJvbGU6IHRyYWluXG4vL2lucHV0OiBkYXRhZnJhbWUgZGZcbi8vaW5wdXQ6IHN0cmluZyBwcmVkaWN0X2NvbHVtblxuLy9pbnB1dDogZG91YmxlIGdhbW1hID0gMS4wIHtjYXRlZ29yeTogSHlwZXJwYXJhbWV0ZXJzfVxuLy9pbnB1dDogYm9vbCB0b1Nob3dSZXBvcnQgPSBmYWxzZSB7Y2FwdGlvbjogdG8gc2hvdyByZXBvcnQ7IGNhdGVnb3J5OiBSZXBvcnR9XG4vL291dHB1dDogZHluYW1pYyBtb2RlbFxuZXhwb3J0IGZ1bmN0aW9uIHRyYWluTGluZWFyS2VybmVsU1ZNKGRmLCBwcmVkaWN0X2NvbHVtbiwgZ2FtbWEsIHRvU2hvd1JlcG9ydCkge1xuICAgIHJldHVybiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG4gICAgICAgIGNvbnN0IHRyYWluZWRNb2RlbCA9IHlpZWxkIGdldFRyYWluZWRNb2RlbCh7IGdhbW1hOiBnYW1tYSwga2VybmVsOiBMSU5FQVIgfSwgZGYsIHByZWRpY3RfY29sdW1uKTtcbiAgICAgICAgaWYgKHRvU2hvd1JlcG9ydClcbiAgICAgICAgICAgIHNob3dUcmFpblJlcG9ydChkZiwgdHJhaW5lZE1vZGVsKTtcbiAgICAgICAgcmV0dXJuIGdldFBhY2tlZE1vZGVsKHRyYWluZWRNb2RlbCk7XG4gICAgfSk7XG59XG4vL25hbWU6IGFwcGx5TGluZWFyS2VybmVsU1ZNXG4vL21ldGEubWxuYW1lOiBsaW5lYXIga2VybmVsIExTLVNWTVxuLy9tZXRhLm1scm9sZTogYXBwbHlcbi8vaW5wdXQ6IGRhdGFmcmFtZSBkZlxuLy9pbnB1dDogZHluYW1pYyBtb2RlbFxuLy9vdXRwdXQ6IGRhdGFmcmFtZSB0YWJsZVxuZXhwb3J0IGZ1bmN0aW9uIGFwcGx5TGluZWFyS2VybmVsU1ZNKGRmLCBtb2RlbCkge1xuICAgIHJldHVybiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG4gICAgICAgIHJldHVybiB5aWVsZCBnZXRQcmVkaWN0aW9uKGRmLCBtb2RlbCk7XG4gICAgfSk7XG59XG4vL25hbWU6IHRyYWluUkJGa2VybmVsU1ZNXG4vL21ldGEubWxuYW1lOiBSQkYta2VybmVsIExTLVNWTVxuLy9tZXRhLm1scm9sZTogdHJhaW5cbi8vaW5wdXQ6IGRhdGFmcmFtZSBkZlxuLy9pbnB1dDogc3RyaW5nIHByZWRpY3RfY29sdW1uXG4vL2lucHV0OiBkb3VibGUgZ2FtbWEgPSAxLjAge2NhdGVnb3J5OiBIeXBlcnBhcmFtZXRlcnN9XG4vL2lucHV0OiBkb3VibGUgc2lnbWEgPSAxLjUge2NhdGVnb3J5OiBIeXBlcnBhcmFtZXRlcnN9XG4vL2lucHV0OiBib29sIHRvU2hvd1JlcG9ydCA9IGZhbHNlIHtjYXB0aW9uOiB0byBzaG93IHJlcG9ydDsgY2F0ZWdvcnk6IFJlcG9ydH1cbi8vb3V0cHV0OiBkeW5hbWljIG1vZGVsXG5leHBvcnQgZnVuY3Rpb24gdHJhaW5SQkZrZXJuZWxTVk0oZGYsIHByZWRpY3RfY29sdW1uLCBnYW1tYSwgc2lnbWEsIHRvU2hvd1JlcG9ydCkge1xuICAgIHJldHVybiBfX2F3YWl0ZXIodGhpcywgdm9pZCAwLCB2b2lkIDAsIGZ1bmN0aW9uKiAoKSB7XG4gICAgICAgIGNvbnN0IHRyYWluZWRNb2RlbCA9IHlpZWxkIGdldFRyYWluZWRNb2RlbCh7IGdhbW1hOiBnYW1tYSwga2VybmVsOiBSQkYsIHNpZ21hOiBzaWdtYSB9LCBkZiwgcHJlZGljdF9jb2x1bW4pO1xuICAgICAgICBpZiAodG9TaG93UmVwb3J0KVxuICAgICAgICAgICAgc2hvd1RyYWluUmVwb3J0KGRmLCB0cmFpbmVkTW9kZWwpO1xuICAgICAgICByZXR1cm4gZ2V0UGFja2VkTW9kZWwodHJhaW5lZE1vZGVsKTtcbiAgICB9KTtcbn1cbi8vbmFtZTogYXBwbHlSQkZrZXJuZWxTVk1cbi8vbWV0YS5tbG5hbWU6IFJCRi1rZXJuZWwgTFMtU1ZNXG4vL21ldGEubWxyb2xlOiBhcHBseVxuLy9pbnB1dDogZGF0YWZyYW1lIGRmXG4vL2lucHV0OiBkeW5hbWljIG1vZGVsXG4vL291dHB1dDogZGF0YWZyYW1lIHRhYmxlXG5leHBvcnQgZnVuY3Rpb24gYXBwbHlSQkZrZXJuZWxTVk0oZGYsIG1vZGVsKSB7XG4gICAgcmV0dXJuIF9fYXdhaXRlcih0aGlzLCB2b2lkIDAsIHZvaWQgMCwgZnVuY3Rpb24qICgpIHtcbiAgICAgICAgcmV0dXJuIHlpZWxkIGdldFByZWRpY3Rpb24oZGYsIG1vZGVsKTtcbiAgICB9KTtcbn1cbi8vbmFtZTogdHJhaW5Qb2x5bm9taWFsS2VybmVsU1ZNXG4vL21ldGEubWxuYW1lOiBwb2x5bm9taWFsIGtlcm5lbCBMUy1TVk1cbi8vbWV0YS5tbHJvbGU6IHRyYWluXG4vL2lucHV0OiBkYXRhZnJhbWUgZGZcbi8vaW5wdXQ6IHN0cmluZyBwcmVkaWN0X2NvbHVtblxuLy9pbnB1dDogZG91YmxlIGdhbW1hID0gMS4wIHtjYXRlZ29yeTogSHlwZXJwYXJhbWV0ZXJzfVxuLy9pbnB1dDogZG91YmxlIGMgPSAxIHtjYXRlZ29yeTogSHlwZXJwYXJhbWV0ZXJzfVxuLy9pbnB1dDogZG91YmxlIGQgPSAyIHtjYXRlZ29yeTogSHlwZXJwYXJhbWV0ZXJzfVxuLy9pbnB1dDogYm9vbCB0b1Nob3dSZXBvcnQgPSBmYWxzZSB7Y2FwdGlvbjogdG8gc2hvdyByZXBvcnQ7IGNhdGVnb3J5OiBSZXBvcnR9XG4vL291dHB1dDogZHluYW1pYyBtb2RlbFxuZXhwb3J0IGZ1bmN0aW9uIHRyYWluUG9seW5vbWlhbEtlcm5lbFNWTShkZiwgcHJlZGljdF9jb2x1bW4sIGdhbW1hLCBjLCBkLCB0b1Nob3dSZXBvcnQpIHtcbiAgICByZXR1cm4gX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuICAgICAgICBjb25zdCB0cmFpbmVkTW9kZWwgPSB5aWVsZCBnZXRUcmFpbmVkTW9kZWwoeyBnYW1tYTogZ2FtbWEsIGtlcm5lbDogUE9MWU5PTUlBTCwgY1BhcmFtOiBjLCBkUGFyYW06IGQgfSwgZGYsIHByZWRpY3RfY29sdW1uKTtcbiAgICAgICAgaWYgKHRvU2hvd1JlcG9ydClcbiAgICAgICAgICAgIHNob3dUcmFpblJlcG9ydChkZiwgdHJhaW5lZE1vZGVsKTtcbiAgICAgICAgcmV0dXJuIGdldFBhY2tlZE1vZGVsKHRyYWluZWRNb2RlbCk7XG4gICAgfSk7XG59IC8vIHRyYWluUG9seW5vbWlhbEtlcm5lbFNWTVxuLy9uYW1lOiBhcHBseVBvbHlub21pYWxLZXJuZWxTVk1cbi8vbWV0YS5tbG5hbWU6IHBvbHlub21pYWwga2VybmVsIExTLVNWTVxuLy9tZXRhLm1scm9sZTogYXBwbHlcbi8vaW5wdXQ6IGRhdGFmcmFtZSBkZlxuLy9pbnB1dDogZHluYW1pYyBtb2RlbFxuLy9vdXRwdXQ6IGRhdGFmcmFtZSB0YWJsZVxuZXhwb3J0IGZ1bmN0aW9uIGFwcGx5UG9seW5vbWlhbEtlcm5lbFNWTShkZiwgbW9kZWwpIHtcbiAgICByZXR1cm4gX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuICAgICAgICByZXR1cm4geWllbGQgZ2V0UHJlZGljdGlvbihkZiwgbW9kZWwpO1xuICAgIH0pO1xufVxuLy9uYW1lOiB0cmFpblNpZ21vaWRLZXJuZWxTVk1cbi8vbWV0YS5tbG5hbWU6IHNpZ21vaWQga2VybmVsIExTLVNWTVxuLy9tZXRhLm1scm9sZTogdHJhaW5cbi8vaW5wdXQ6IGRhdGFmcmFtZSBkZlxuLy9pbnB1dDogc3RyaW5nIHByZWRpY3RfY29sdW1uXG4vL2lucHV0OiBkb3VibGUgZ2FtbWEgPSAxLjAge2NhdGVnb3J5OiBIeXBlcnBhcmFtZXRlcnN9XG4vL2lucHV0OiBkb3VibGUga2FwcGEgPSAxIHtjYXRlZ29yeTogSHlwZXJwYXJhbWV0ZXJzfVxuLy9pbnB1dDogZG91YmxlIHRoZXRhID0gMSB7Y2F0ZWdvcnk6IEh5cGVycGFyYW1ldGVyc31cbi8vaW5wdXQ6IGJvb2wgdG9TaG93UmVwb3J0ID0gZmFsc2Uge2NhcHRpb246IHRvIHNob3cgcmVwb3J0OyBjYXRlZ29yeTogUmVwb3J0fVxuLy9vdXRwdXQ6IGR5bmFtaWMgbW9kZWxcbmV4cG9ydCBmdW5jdGlvbiB0cmFpblNpZ21vaWRLZXJuZWxTVk0oZGYsIHByZWRpY3RfY29sdW1uLCBnYW1tYSwga2FwcGEsIHRoZXRhLCB0b1Nob3dSZXBvcnQpIHtcbiAgICByZXR1cm4gX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuICAgICAgICBjb25zdCB0cmFpbmVkTW9kZWwgPSB5aWVsZCBnZXRUcmFpbmVkTW9kZWwoeyBnYW1tYTogZ2FtbWEsIGtlcm5lbDogU0lHTU9JRCwga2FwcGE6IGthcHBhLCB0aGV0YTogdGhldGEgfSwgZGYsIHByZWRpY3RfY29sdW1uKTtcbiAgICAgICAgaWYgKHRvU2hvd1JlcG9ydClcbiAgICAgICAgICAgIHNob3dUcmFpblJlcG9ydChkZiwgdHJhaW5lZE1vZGVsKTtcbiAgICAgICAgcmV0dXJuIGdldFBhY2tlZE1vZGVsKHRyYWluZWRNb2RlbCk7XG4gICAgfSk7XG59IC8vIHRyYWluU2lnbW9pZEtlcm5lbFNWTVxuLy9uYW1lOiBhcHBseVNpZ21vaWRLZXJuZWxTVk1cbi8vbWV0YS5tbG5hbWU6IHNpZ21vaWQga2VybmVsIExTLVNWTVxuLy9tZXRhLm1scm9sZTogYXBwbHlcbi8vaW5wdXQ6IGRhdGFmcmFtZSBkZlxuLy9pbnB1dDogZHluYW1pYyBtb2RlbFxuLy9vdXRwdXQ6IGRhdGFmcmFtZSB0YWJsZVxuZXhwb3J0IGZ1bmN0aW9uIGFwcGx5U2lnbW9pZEtlcm5lbFNWTShkZiwgbW9kZWwpIHtcbiAgICByZXR1cm4gX19hd2FpdGVyKHRoaXMsIHZvaWQgMCwgdm9pZCAwLCBmdW5jdGlvbiogKCkge1xuICAgICAgICByZXR1cm4geWllbGQgZ2V0UHJlZGljdGlvbihkZiwgbW9kZWwpO1xuICAgIH0pO1xufVxuLy90b3AtbWVudTogTUwgfCBBbmFseXplIHwgQU5PVkEuLi5cbi8vbmFtZTogQU5PVkFcbi8vZGVzY3JpcHRpb246IE9uZS13YXkgYW5hbHlzaXMgb2YgdmFyaWFuY2VzIChBTk9WQSkgZGV0ZXJtaW5lcyB3aGV0aGVyIHRoZSBleGFtaW5lZCBmYWN0b3IgaGFzIGEgc2lnbmlmaWNhbnQgaW1wYWN0IG9uIHRoZSBzdHVkaWVkIGZlYXR1cmUuXG4vL2lucHV0OiBkYXRhZnJhbWUgdGFibGVcbi8vaW5wdXQ6IGNvbHVtbiBmYWN0b3Ige3R5cGU6IGNhdGVnb3JpY2FsfVxuLy9pbnB1dDogY29sdW1uIGZlYXR1cmUge3R5cGU6IG51bWVyaWNhbH1cbi8vaW5wdXQ6IGRvdWJsZSBzaWduaWZpY2FuY2UgPSAwLjA1IFtUaGUgc2lnbmlmaWNhbmNlIGxldmVsIGlzIGEgdmFsdWUgZnJvbSB0aGUgaW50ZXJ2YWwgKDAsIDEpIHNwZWNpZnlpbmcgdGhlIGNyaXRlcmlvbiB1c2VkIGZvciByZWplY3RpbmcgdGhlIG51bGwgaHlwb3RoZXNpcy5dXG4vL2lucHV0OiBib29sIHZhbGlkYXRlID0gZmFsc2UgW0luZGljYXRlcyB3aGV0aGVyIHRoZSBub3JtYWxpdHkgb2YgZGlzdHJpYnV0aW9uIGFuZCBhbiBlcWF1bGl0eSBvZiB2YXJhaW5jZXMgc2hvdWxkIGJlIGNoZWNrZWQuXVxuZXhwb3J0IGZ1bmN0aW9uIGFub3ZhKHRhYmxlLCBmYWN0b3IsIGZlYXR1cmUsIHNpZ25pZmljYW5jZSwgdmFsaWRhdGUpIHtcbiAgICBjb25zdCByZXMgPSBvbmVXYXlBbm92YShmYWN0b3IsIGZlYXR1cmUsIHNpZ25pZmljYW5jZSwgdmFsaWRhdGUpO1xuICAgIGFkZE9uZVdheUFub3ZhVml6dWFsaXphdGlvbih0YWJsZSwgZmFjdG9yLCBmZWF0dXJlLCByZXMpO1xufVxuLy90b3AtbWVudTogTUwgfCBNaXNzaW5nIFZhbHVlcyBJbXB1dGF0aW9uIC4uLlxuLy9uYW1lOiBLTk4gaW1wdXRlXG4vL2Rlc3JpcHRpb246IE1pc3NpbmcgdmFsdWVzIGltcHV0YXRpb24gdXNpbmcgdGhlIGstbmVhcmVzdCBuZWlnaGJvcnMgbWV0aG9kXG5leHBvcnQgZnVuY3Rpb24ga05OSW1wdXRhdGlvbigpIHtcbiAgICBydW5LTk5JbXB1dGVyKCk7XG59XG4iLCIvLyBDdXN0b20gVUkgZm9yIEV4cGxvcmF0b3J5IGRhdGEgYW5hbHlzaXMgKEVEQSkgdG9vbHNcbmltcG9ydCAqIGFzIGdyb2sgZnJvbSAnZGF0YWdyb2stYXBpL2dyb2snO1xuaW1wb3J0ICogYXMgREcgZnJvbSAnZGF0YWdyb2stYXBpL2RnJztcbi8vIFJlbmFtZSBQQ0EgY29sdW1uc1xuZXhwb3J0IGZ1bmN0aW9uIHJlbmFtZVBDQWNvbHVtbnMocGNhVGFibGUpIHtcbiAgICBmb3IgKGNvbnN0IGNvbCBvZiBwY2FUYWJsZS5jb2x1bW5zLnRvTGlzdCgpKVxuICAgICAgICBjb2wubmFtZSA9ICdQQ0EnICsgY29sLm5hbWU7XG4gICAgcmV0dXJuIHBjYVRhYmxlO1xufVxuLy8gQWRkcyBwcmVmaXggdG8gZWFjaCBjb2x1bW4gbmFtZVxuZXhwb3J0IGZ1bmN0aW9uIGFkZFByZWZpeFRvRWFjaENvbHVtbk5hbWUocHJlZml4LCBjb2x1bW5zKSB7XG4gICAgZm9yIChjb25zdCBjb2wgb2YgY29sdW1ucy50b0xpc3QoKSlcbiAgICAgICAgY29sLm5hbWUgPSBwcmVmaXggKyBjb2wubmFtZTtcbn1cbi8vIFByZWRpY3RlZCB2cyBSZWZlcmVuY2Ugc2NhdHRlciBwbG90XG5leHBvcnQgZnVuY3Rpb24gcHJlZGljdGVkVmVyc3VzUmVmZXJlbmNlU2NhdHRlclBsb3Qoc2FtcGxlc05hbWVzLCByZWZlcmVuY2UsIHByZWRpY3Rpb24pIHtcbiAgICBwcmVkaWN0aW9uLm5hbWUgPSByZWZlcmVuY2UubmFtZSArICcocHJlZGljdGVkKSc7XG4gICAgY29uc3QgZGZSZWZlcmVuY2VQcmVkaWN0aW9uID0gREcuRGF0YUZyYW1lLmZyb21Db2x1bW5zKFtzYW1wbGVzTmFtZXMsIHJlZmVyZW5jZSwgcHJlZGljdGlvbl0pO1xuICAgIGRmUmVmZXJlbmNlUHJlZGljdGlvbi5uYW1lID0gJ1JlZmVyZW5jZSB2cy4gUHJlZGljdGVkJztcbiAgICByZXR1cm4gREcuVmlld2VyLnNjYXR0ZXJQbG90KGRmUmVmZXJlbmNlUHJlZGljdGlvbiwgeyB0aXRsZTogZGZSZWZlcmVuY2VQcmVkaWN0aW9uLm5hbWUsXG4gICAgICAgIHg6IHJlZmVyZW5jZS5uYW1lLFxuICAgICAgICB5OiBwcmVkaWN0aW9uLm5hbWUsXG4gICAgICAgIHNob3dSZWdyZXNzaW9uTGluZTogdHJ1ZSxcbiAgICAgICAgbWFya2VyVHlwZTogJ2NpcmNsZScsXG4gICAgICAgIGxhYmVsczogc2FtcGxlc05hbWVzLm5hbWUsXG4gICAgfSk7XG59XG4vLyBSZWdyZXNzaW9uIENvZWZmaWNpZW50cyBCYXIgQ2hhcnRcbmV4cG9ydCBmdW5jdGlvbiByZWdyZXNzaW9uQ29lZmZpY2llbnRzQmFyQ2hhcnQoZmVhdHVyZXMsIHJlZ3Jlc3Npb25Db2VmZnMpIHtcbiAgICByZWdyZXNzaW9uQ29lZmZzLm5hbWUgPSAncmVncmVzc2lvbiBjb2VmZmljaWVudCc7XG4gICAgY29uc3QgbmFtZXNPZlByZWRpY3RvcnMgPSBbXTtcbiAgICBmb3IgKGNvbnN0IGNvbCBvZiBmZWF0dXJlcylcbiAgICAgICAgbmFtZXNPZlByZWRpY3RvcnMucHVzaChjb2wubmFtZSk7XG4gICAgY29uc3QgcHJlZGljdG9yTmFtZXNDb2x1bW4gPSBERy5Db2x1bW4uZnJvbVN0cmluZ3MoJ2ZlYXR1cmUnLCBuYW1lc09mUHJlZGljdG9ycyk7XG4gICAgY29uc3QgZGZSZWdyQ29lZnMgPSBERy5EYXRhRnJhbWUuZnJvbUNvbHVtbnMoW3ByZWRpY3Rvck5hbWVzQ29sdW1uLCByZWdyZXNzaW9uQ29lZmZzXSk7XG4gICAgZGZSZWdyQ29lZnMubmFtZSA9ICdSZWdyZXNzaW9uIENvZWZmaWNpZW50cyc7XG4gICAgcmV0dXJuIERHLlZpZXdlci5iYXJDaGFydChkZlJlZ3JDb2VmcywgeyB0aXRsZTogZGZSZWdyQ29lZnMubmFtZSwgc3BsaXQ6ICdmZWF0dXJlJyxcbiAgICAgICAgdmFsdWU6ICdyZWdyZXNzaW9uIGNvZWZmaWNpZW50JywgdmFsdWVBZ2dyVHlwZTogJ2F2ZycgfSk7XG59XG4vLyBTY29yZXMgU2NhdHRlciBQbG90XG5leHBvcnQgZnVuY3Rpb24gc2NvcmVzU2NhdHRlclBsb3Qoc2FtcGxlc05hbWVzLCB4U2NvcmVzLCB5U2NvcmVzKSB7XG4gICAgY29uc3Qgc2NvcmVzQ29sdW1ucyA9IFtzYW1wbGVzTmFtZXNdO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgeFNjb3Jlcy5sZW5ndGg7IGkrKykge1xuICAgICAgICB4U2NvcmVzW2ldLm5hbWUgPSBgeC5zY29yZS50JHtpICsgMX1gO1xuICAgICAgICBzY29yZXNDb2x1bW5zLnB1c2goeFNjb3Jlc1tpXSk7XG4gICAgfVxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgeVNjb3Jlcy5sZW5ndGg7IGkrKykge1xuICAgICAgICB5U2NvcmVzW2ldLm5hbWUgPSBgeS5zY29yZS51JHtpICsgMX1gO1xuICAgICAgICBzY29yZXNDb2x1bW5zLnB1c2goeVNjb3Jlc1tpXSk7XG4gICAgfVxuICAgIGNvbnN0IHNjb3JlcyA9IERHLkRhdGFGcmFtZS5mcm9tQ29sdW1ucyhzY29yZXNDb2x1bW5zKTtcbiAgICBzY29yZXMubmFtZSA9ICdTY29yZXMnO1xuICAgIC8vZ3Jvay5zaGVsbC5hZGRUYWJsZVZpZXcoc2NvcmVzKTtcbiAgICBjb25zdCBpbmRleCA9IHhTY29yZXMubGVuZ3RoID4gMSA/IDEgOiAwO1xuICAgIHJldHVybiBERy5WaWV3ZXIuc2NhdHRlclBsb3Qoc2NvcmVzLCB7IHRpdGxlOiBzY29yZXMubmFtZSxcbiAgICAgICAgeDogeFNjb3Jlc1swXS5uYW1lLFxuICAgICAgICB5OiB4U2NvcmVzW2luZGV4XS5uYW1lLFxuICAgICAgICBtYXJrZXJUeXBlOiAnY2lyY2xlJyxcbiAgICAgICAgbGFiZWxzOiBzYW1wbGVzTmFtZXMubmFtZSxcbiAgICB9KTtcbn1cbi8vIExvYWRpbmcgU2NhdHRlciBQbG90XG5leHBvcnQgZnVuY3Rpb24gbG9hZGluZ1NjYXR0ZXJQbG90KGZlYXR1cmVzLCB4TG9hZGluZ3MpIHtcbiAgICBjb25zdCBsb2FkaW5nQ29scyA9IFtdO1xuICAgIGNvbnN0IGxvYWRpbmdMYWJlbHMgPSBbXTtcbiAgICBmb3IgKGNvbnN0IGNvbCBvZiBmZWF0dXJlcylcbiAgICAgICAgbG9hZGluZ0xhYmVscy5wdXNoKGNvbC5uYW1lKTtcbiAgICBsb2FkaW5nQ29scy5wdXNoKERHLkNvbHVtbi5mcm9tU3RyaW5ncygnbGFiZWxzJywgbG9hZGluZ0xhYmVscykpO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgeExvYWRpbmdzLmxlbmd0aDsgaSsrKSB7XG4gICAgICAgIHhMb2FkaW5nc1tpXS5uYW1lID0gYHgubG9hZGluZy5wJHtpICsgMX1gO1xuICAgICAgICBsb2FkaW5nQ29scy5wdXNoKHhMb2FkaW5nc1tpXSk7XG4gICAgfVxuICAgIGNvbnN0IGRmTG9hZGluZ3MgPSBERy5EYXRhRnJhbWUuZnJvbUNvbHVtbnMobG9hZGluZ0NvbHMpO1xuICAgIGRmTG9hZGluZ3MubmFtZSA9ICdMb2FkaW5ncyc7XG4gICAgcmV0dXJuIERHLlZpZXdlci5zY2F0dGVyUGxvdChkZkxvYWRpbmdzLCB7IHRpdGxlOiBkZkxvYWRpbmdzLm5hbWUsXG4gICAgICAgIHg6IHhMb2FkaW5nc1swXS5uYW1lLFxuICAgICAgICB5OiB4TG9hZGluZ3NbeExvYWRpbmdzLmxlbmd0aCAtIDFdLm5hbWUsXG4gICAgICAgIG1hcmtlclR5cGU6ICdjaXJjbGUnLFxuICAgICAgICBsYWJlbHM6ICdsYWJlbHMnLFxuICAgIH0pO1xufVxuLy8gQWRkIFBMUyB2aXN1YWxpemF0aW9uXG5leHBvcnQgZnVuY3Rpb24gYWRkUExTdmlzdWFsaXphdGlvbih0YWJsZSwgc2FtcGxlc05hbWVzLCBmZWF0dXJlcywgcHJlZGljdCwgcGxzT3V0cHV0KSB7XG4gICAgY29uc3QgdmlldyA9ICh0YWJsZS5pZCAhPT0gbnVsbCkgPyBncm9rLnNoZWxsLmdldFRhYmxlVmlldyh0YWJsZS5uYW1lKSA6IGdyb2suc2hlbGwuYWRkVGFibGVWaWV3KHRhYmxlKTtcbiAgICAvLyAxLiBQcmVkaWN0ZWQgdnMgUmVmZXJlbmNlIHNjYXR0ZXIgcGxvdFxuICAgIHZpZXcuYWRkVmlld2VyKHByZWRpY3RlZFZlcnN1c1JlZmVyZW5jZVNjYXR0ZXJQbG90KHNhbXBsZXNOYW1lcywgcHJlZGljdCwgcGxzT3V0cHV0WzBdKSk7XG4gICAgLy8gMi4gUmVncmVzc2lvbiBDb2VmZmljaWVudHMgQmFyIENoYXJ0XG4gICAgdmlldy5hZGRWaWV3ZXIocmVncmVzc2lvbkNvZWZmaWNpZW50c0JhckNoYXJ0KGZlYXR1cmVzLCBwbHNPdXRwdXRbMV0pKTtcbiAgICAvLyAzLiBMb2FkaW5nIFNjYXR0ZXIgUGxvdFxuICAgIHZpZXcuYWRkVmlld2VyKGxvYWRpbmdTY2F0dGVyUGxvdChmZWF0dXJlcywgcGxzT3V0cHV0WzRdKSk7XG4gICAgLy8gNC4gU2NvcmVzIFNjYXR0ZXIgUGxvdFxuICAgIHZpZXcuYWRkVmlld2VyKHNjb3Jlc1NjYXR0ZXJQbG90KHNhbXBsZXNOYW1lcywgcGxzT3V0cHV0WzJdLCBwbHNPdXRwdXRbM10pKTtcbn1cbi8vIEFkZCBvbmUtd2F5IEFOT1ZBIHJlc3VsdHNcbmV4cG9ydCBmdW5jdGlvbiBhZGRPbmVXYXlBbm92YVZpenVhbGl6YXRpb24odGFibGUsIGZhY3RvcnMsIHZhbHVlcywgYW5vdmEpIHtcbiAgICBjb25zdCB2aWV3ID0gZ3Jvay5zaGVsbC5nZXRUYWJsZVZpZXcodGFibGUubmFtZSk7XG4gICAgdmlldy5hZGRWaWV3ZXIoREcuVmlld2VyLmJveFBsb3QoREcuRGF0YUZyYW1lLmZyb21Db2x1bW5zKFtmYWN0b3JzLCB2YWx1ZXNdKSkpO1xuICAgIHZpZXcuYWRkVmlld2VyKERHLlZpZXdlci5ncmlkKGFub3ZhKSk7XG59XG4iLCJpbXBvcnQgeyBjcmVhdGVNdWx0aURpbVJlZFdvcmtlciB9IGZyb20gJy4vbXVsdGktZGltLXJlZC13b3JrZXItY3JlYXRvcic7XG5pbXBvcnQgeyBub3JtYWxpemUgfSBmcm9tICdAZGF0YWdyb2stbGlicmFyaWVzL3V0aWxzL3NyYy92ZWN0b3Itb3BlcmF0aW9ucyc7XG5leHBvcnQgYXN5bmMgZnVuY3Rpb24gZ2V0Tm9ybWFsaXplZEVtYmVkZGluZ3MoZGF0YUNvbHMsIG1ldGhvZE5hbWUsIGRpc3RhbmNlTWV0cmljcywgd2VpZ2h0cywgZGlzdGFuY2VBZ2dyZWdhdGlvbiwgb3B0aW9ucywgcHJvZ3Jlc3NGdW5jKSB7XG4gICAgbGV0IGRpbWVuc2lvbmFsaXR5UmVkdWNlUmVzID0gYXdhaXQgY3JlYXRlTXVsdGlEaW1SZWRXb3JrZXIoZGF0YUNvbHMsIGRpc3RhbmNlTWV0cmljcywgbWV0aG9kTmFtZSwgd2VpZ2h0cywgZGlzdGFuY2VBZ2dyZWdhdGlvbiwgb3B0aW9ucywgcHJvZ3Jlc3NGdW5jKTtcbiAgICBkaW1lbnNpb25hbGl0eVJlZHVjZVJlcyA9IGRpbWVuc2lvbmFsaXR5UmVkdWNlUmVzLm1hcCgoaXQpID0+IG5vcm1hbGl6ZShpdCkpO1xuICAgIHJldHVybiBkaW1lbnNpb25hbGl0eVJlZHVjZVJlcztcbn1cbi8vIyBzb3VyY2VNYXBwaW5nVVJMPWRhdGE6YXBwbGljYXRpb24vanNvbjtiYXNlNjQsZXlKMlpYSnphVzl1SWpvekxDSm1hV3hsSWpvaVpXMWlaV1JrYVc1bmN5MXpjR0ZqWlM1cWN5SXNJbk52ZFhKalpWSnZiM1FpT2lJaUxDSnpiM1Z5WTJWeklqcGJJbVZ0WW1Wa1pHbHVaM010YzNCaFkyVXVkSE1pWFN3aWJtRnRaWE1pT2x0ZExDSnRZWEJ3YVc1bmN5STZJa0ZCUlVFc1QwRkJUeXhGUVVGRExIVkNRVUYxUWl4RlFVRkRMRTFCUVUwc1owTkJRV2RETEVOQlFVTTdRVUZGZGtVc1QwRkJUeXhGUVVGRExGTkJRVk1zUlVGQlF5eE5RVUZOTEdsRVFVRnBSQ3hEUVVGRE8wRkJTVEZGTEUxQlFVMHNRMEZCUXl4TFFVRkxMRlZCUVZVc2RVSkJRWFZDTEVOQlF6TkRMRkZCUVhOQ0xFVkJRM1JDTEZWQlFTdENMRVZCUXk5Q0xHVkJRU3RDTEVWQlF5OUNMRTlCUVdsQ0xFVkJRMnBDTEcxQ1FVRTRReXhGUVVNNVF5eFBRVUZaTEVWQlFVVXNXVUZCYlVZN1NVRkZha2NzU1VGQlNTeDFRa0ZCZFVJc1IwRkRia0lzVFVGQlRTeDFRa0ZCZFVJc1EwRkRNMElzVVVGQlVTeEZRVUZGTEdWQlFXVXNSVUZCUlN4VlFVRlZMRVZCUVVVc1QwRkJUeXhGUVVGRkxHMUNRVUZ0UWl4RlFVRkZMRTlCUVU4c1JVRkJSU3haUVVGWkxFTkJRek5HTEVOQlFVTTdTVUZGVml4MVFrRkJkVUlzUjBGQlJ5eDFRa0ZCZFVJc1EwRkJReXhIUVVGSExFTkJRVU1zUTBGQlF5eEZRVUZGTEVWQlFVVXNSVUZCUlN4RFFVRkRMRk5CUVZNc1EwRkJReXhGUVVGRkxFTkJRVU1zUTBGQlF5eERRVUZETzBsQlF6ZEZMRTlCUVU4c2RVSkJRWFZDTEVOQlFVTTdRVUZEYWtNc1EwRkJReUlzSW5OdmRYSmpaWE5EYjI1MFpXNTBJanBiSW1sdGNHOXlkQ0I3VFdGMGNtbDRmU0JtY205dElDZEFaR0YwWVdkeWIyc3RiR2xpY21GeWFXVnpMM1YwYVd4ekwzTnlZeTkwZVhCbExXUmxZMnhoY21GMGFXOXVjeWM3WEc1cGJYQnZjblFnZTB0dWIzZHVUV1YwY21samMzMGdabkp2YlNBbkxpNHZkSGx3WldRdGJXVjBjbWxqY3ljN1hHNXBiWEJ2Y25RZ2UyTnlaV0YwWlUxMWJIUnBSR2x0VW1Wa1YyOXlhMlZ5ZlNCbWNtOXRJQ2N1TDIxMWJIUnBMV1JwYlMxeVpXUXRkMjl5YTJWeUxXTnlaV0YwYjNJbk8xeHVhVzF3YjNKMElIdEVhWE4wWVc1alpVRm5aM0psWjJGMGFXOXVUV1YwYUc5a2ZTQm1jbTl0SUNjdUxpOWthWE4wWVc1alpTMXRZWFJ5YVhndmRIbHdaWE1uTzF4dWFXMXdiM0owSUh0dWIzSnRZV3hwZW1WOUlHWnliMjBnSjBCa1lYUmhaM0p2YXkxc2FXSnlZWEpwWlhNdmRYUnBiSE12YzNKakwzWmxZM1J2Y2kxdmNHVnlZWFJwYjI1ekp6dGNibWx0Y0c5eWRDQjdSR2x0VW1Wa2RXTjBhVzl1VFdWMGFHOWtjMzBnWm5KdmJTQW5MaTkwZVhCbGN5YzdYRzVjYmx4dVpYaHdiM0owSUdGemVXNWpJR1oxYm1OMGFXOXVJR2RsZEU1dmNtMWhiR2w2WldSRmJXSmxaR1JwYm1kektGeHVJQ0JrWVhSaFEyOXNjem9nUVhKeVlYazhZVzU1VzEwK0xGeHVJQ0J0WlhSb2IyUk9ZVzFsT2lCRWFXMVNaV1IxWTNScGIyNU5aWFJvYjJSekxGeHVJQ0JrYVhOMFlXNWpaVTFsZEhKcFkzTTZJRXR1YjNkdVRXVjBjbWxqYzF0ZExGeHVJQ0IzWldsbmFIUnpPaUJ1ZFcxaVpYSmJYU3hjYmlBZ1pHbHpkR0Z1WTJWQloyZHlaV2RoZEdsdmJqb2dSR2x6ZEdGdVkyVkJaMmR5WldkaGRHbHZiazFsZEdodlpDeGNiaUFnYjNCMGFXOXVjem9nWVc1NUxDQndjbTluY21WemMwWjFibU0vT2lBb1pYQnZZMmc2SUc1MWJXSmxjaXdnWlhCdlkyaHpUR1Z1WjNSb09pQnVkVzFpWlhJc0lHVnRZbVZrWkdsdVp6b2diblZ0WW1WeVcxMWJYU2tnUFQ0Z2RtOXBaRnh1S1RvZ1VISnZiV2x6WlR4TllYUnlhWGcrSUh0Y2JpQWdiR1YwSUdScGJXVnVjMmx2Ym1Gc2FYUjVVbVZrZFdObFVtVnpPaUJOWVhSeWFYZ2dQVnh1SUNBZ0lDQWdJQ0FnSUdGM1lXbDBJR055WldGMFpVMTFiSFJwUkdsdFVtVmtWMjl5YTJWeUtGeHVJQ0FnSUNBZ0lDQWdJQ0FnWkdGMFlVTnZiSE1zSUdScGMzUmhibU5sVFdWMGNtbGpjeXdnYldWMGFHOWtUbUZ0WlN3Z2QyVnBaMmgwY3l3Z1pHbHpkR0Z1WTJWQloyZHlaV2RoZEdsdmJpd2diM0IwYVc5dWN5d2djSEp2WjNKbGMzTkdkVzVqWEc0Z0lDQWdJQ0FnSUNBZ0tUdGNibHh1SUNCa2FXMWxibk5wYjI1aGJHbDBlVkpsWkhWalpWSmxjeUE5SUdScGJXVnVjMmx2Ym1Gc2FYUjVVbVZrZFdObFVtVnpMbTFoY0Nnb2FYUXBJRDArSUc1dmNtMWhiR2w2WlNocGRDa3BPMXh1SUNCeVpYUjFjbTRnWkdsdFpXNXphVzl1WVd4cGRIbFNaV1IxWTJWU1pYTTdYRzU5WEc1Y2JpSmRmUT09IiwiaW1wb3J0ICogYXMgZ3JvayBmcm9tICdkYXRhZ3Jvay1hcGkvZ3Jvayc7XG5pbXBvcnQgeyBESU1FTlNJT05BTElUWV9SRURVQ0VSX1RFUk1JTkFURV9FVkVOVCB9IGZyb20gJy4vY29uc3RzJztcbmltcG9ydCB7IGlzTmlsIH0gZnJvbSAnLi4vZGlzdGFuY2UtbWF0cml4L3V0aWxzJztcbmV4cG9ydCBhc3luYyBmdW5jdGlvbiBjcmVhdGVNdWx0aURpbVJlZFdvcmtlcihkYXRhLCBtZXRyaWNzLCBtZXRob2QsIHdlaWdodHMsIGFnZ3JlZ2F0aW9uTWV0aG9kLCBvcHRpb25zLCBwcm9ncmVzc0Z1bmMpIHtcbiAgICBpZiAoIW9wdGlvbnMuZGlzdGFuY2VGbkFyZ3MpXG4gICAgICAgIHRocm93IG5ldyBFcnJvcignb3B0aW9ucy5kaXN0YW5jZUZuQXJncyBtdXN0IGJlIGRlZmluZWQnKTtcbiAgICBpZiAoZGF0YS5sZW5ndGggIT09IG1ldHJpY3MubGVuZ3RoIHx8IGRhdGEubGVuZ3RoICE9PSBvcHRpb25zLmRpc3RhbmNlRm5BcmdzLmxlbmd0aCB8fCBkYXRhLmxlbmd0aCAhPT0gd2VpZ2h0cy5sZW5ndGgpXG4gICAgICAgIHRocm93IG5ldyBFcnJvcignZGF0YSwgbWV0cmljcyBhbmQgb3B0aW9ucyBhbmQgd2VpZ2h0cyBtdXN0IGhhdmUgdGhlIHNhbWUgbGVuZ3RoJyk7XG4gICAgcmV0dXJuIG5ldyBQcm9taXNlKGZ1bmN0aW9uIChyZXNvbHZlLCByZWplY3QpIHtcbiAgICAgICAgY29uc3Qgd29ya2VyID0gbmV3IFdvcmtlcihuZXcgVVJMKCcuL211bGl0LWNvbHVtbi1kaW0tcmVkdWNlci13b3JrZXInLCBpbXBvcnQubWV0YS51cmwpKTtcbiAgICAgICAgd29ya2VyLnBvc3RNZXNzYWdlKHtcbiAgICAgICAgICAgIGNvbHVtbnNEYXRhOiBkYXRhLFxuICAgICAgICAgICAgZGlzdGFuY2VNZXRyaWNzOiBtZXRyaWNzLFxuICAgICAgICAgICAgbWV0aG9kOiBtZXRob2QsXG4gICAgICAgICAgICBvcHRpb25zOiBvcHRpb25zLFxuICAgICAgICAgICAgd2VpZ2h0czogd2VpZ2h0cyxcbiAgICAgICAgICAgIGFnZ3JlZ2F0aW9uTWV0aG9kOiBhZ2dyZWdhdGlvbk1ldGhvZCxcbiAgICAgICAgfSk7XG4gICAgICAgIGNvbnN0IHRlcm1pbmF0ZVN1YiA9IGdyb2suZXZlbnRzLm9uQ3VzdG9tRXZlbnQoRElNRU5TSU9OQUxJVFlfUkVEVUNFUl9URVJNSU5BVEVfRVZFTlQpLnN1YnNjcmliZSgoKSA9PiB7XG4gICAgICAgICAgICB0cnkge1xuICAgICAgICAgICAgICAgIHdvcmtlcj8udGVybWluYXRlKCk7XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICBmaW5hbGx5IHtcbiAgICAgICAgICAgICAgICB0ZXJtaW5hdGVTdWIudW5zdWJzY3JpYmUoKTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfSk7XG4gICAgICAgIHdvcmtlci5vbm1lc3NhZ2UgPSAoeyBkYXRhOiB7IGVycm9yLCBlbWJlZGRpbmcsIGVwb2NoTnVtLCBlcG9jaHNMZW5ndGggfSB9KSA9PiB7XG4gICAgICAgICAgICBpZiAoIWlzTmlsKGVwb2NoTnVtKSAmJiAhaXNOaWwoZXBvY2hzTGVuZ3RoKSkge1xuICAgICAgICAgICAgICAgIHByb2dyZXNzRnVuYyAmJiBwcm9ncmVzc0Z1bmMoZXBvY2hOdW0sIGVwb2Noc0xlbmd0aCwgZW1iZWRkaW5nKTtcbiAgICAgICAgICAgICAgICByZXR1cm47XG4gICAgICAgICAgICB9XG4gICAgICAgICAgICB0ZXJtaW5hdGVTdWIudW5zdWJzY3JpYmUoKTtcbiAgICAgICAgICAgIGlmIChlcnJvcilcbiAgICAgICAgICAgICAgICByZWplY3QoZXJyb3IpO1xuICAgICAgICAgICAgZWxzZVxuICAgICAgICAgICAgICAgIHJlc29sdmUoZW1iZWRkaW5nKTtcbiAgICAgICAgICAgIC8vIHRlcm1pbmF0ZSB0aGUgd29ya2VyIGFmdGVyIHNvbWUgdGltZS4gaW1taWRpYXRlIHRlcm1pbmF0aW9uIGNhdXNlcyBjcmFzaGVzLlxuICAgICAgICAgICAgc2V0VGltZW91dCgoKSA9PiB3b3JrZXIudGVybWluYXRlKCksIDEwMCk7XG4gICAgICAgIH07XG4gICAgfSk7XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1kYXRhOmFwcGxpY2F0aW9uL2pzb247YmFzZTY0LGV5SjJaWEp6YVc5dUlqb3pMQ0ptYVd4bElqb2liWFZzZEdrdFpHbHRMWEpsWkMxM2IzSnJaWEl0WTNKbFlYUnZjaTVxY3lJc0luTnZkWEpqWlZKdmIzUWlPaUlpTENKemIzVnlZMlZ6SWpwYkltMTFiSFJwTFdScGJTMXlaV1F0ZDI5eWEyVnlMV055WldGMGIzSXVkSE1pWFN3aWJtRnRaWE1pT2x0ZExDSnRZWEJ3YVc1bmN5STZJa0ZCUTBFc1QwRkJUeXhMUVVGTExFbEJRVWtzVFVGQlRTeHRRa0ZCYlVJc1EwRkJRenRCUVVNeFF5eFBRVUZQTEVWQlFVTXNjME5CUVhORExFVkJRVU1zVFVGQlRTeFZRVUZWTEVOQlFVTTdRVUZKYUVVc1QwRkJUeXhGUVVGRExFdEJRVXNzUlVGQlF5eE5RVUZOTERCQ1FVRXdRaXhEUVVGRE8wRkJSUzlETEUxQlFVMHNRMEZCUXl4TFFVRkxMRlZCUVZVc2RVSkJRWFZDTEVOQlFVTXNTVUZCYTBJc1JVRkJSU3hQUVVGMVFpeEZRVUZGTEUxQlFUSkNMRVZCUTNCSUxFOUJRV2xDTEVWQlFVVXNhVUpCUVRSRExFVkJReTlFTEU5QlFWa3NSVUZCUlN4WlFVRnRSanRKUVVWcVJ5eEpRVUZKTEVOQlFVTXNUMEZCVHl4RFFVRkRMR05CUVdNN1VVRkRla0lzVFVGQlRTeEpRVUZKTEV0QlFVc3NRMEZCUXl4M1EwRkJkME1zUTBGQlF5eERRVUZETzBsQlF6VkVMRWxCUVVrc1NVRkJTU3hEUVVGRExFMUJRVTBzUzBGQlN5eFBRVUZQTEVOQlFVTXNUVUZCVFN4SlFVRkpMRWxCUVVrc1EwRkJReXhOUVVGTkxFdEJRVXNzVDBGQlR5eERRVUZETEdOQlFXTXNRMEZCUXl4TlFVRk5MRWxCUVVrc1NVRkJTU3hEUVVGRExFMUJRVTBzUzBGQlN5eFBRVUZQTEVOQlFVTXNUVUZCVFR0UlFVTnVTQ3hOUVVGTkxFbEJRVWtzUzBGQlN5eERRVUZETEdsRlFVRnBSU3hEUVVGRExFTkJRVU03U1VGRGNrWXNUMEZCVHl4SlFVRkpMRTlCUVU4c1EwRkJReXhWUVVGVExFOUJRVThzUlVGQlJTeE5RVUZOTzFGQlEzcERMRTFCUVUwc1RVRkJUU3hIUVVGSExFbEJRVWtzVFVGQlRTeERRVUZETEVsQlFVa3NSMEZCUnl4RFFVRkRMRzFEUVVGdFF5eEZRVUZGTEUxQlFVMHNRMEZCUXl4SlFVRkpMRU5CUVVNc1IwRkJSeXhEUVVGRExFTkJRVU1zUTBGQlF6dFJRVU42Uml4TlFVRk5MRU5CUVVNc1YwRkJWeXhEUVVGRE8xbEJRMnBDTEZkQlFWY3NSVUZCUlN4SlFVRkpPMWxCUTJwQ0xHVkJRV1VzUlVGQlJTeFBRVUZQTzFsQlEzaENMRTFCUVUwc1JVRkJSU3hOUVVGTk8xbEJRMlFzVDBGQlR5eEZRVUZGTEU5QlFVODdXVUZEYUVJc1QwRkJUeXhGUVVGRkxFOUJRVTg3V1VGRGFFSXNhVUpCUVdsQ0xFVkJRVVVzYVVKQlFXbENPMU5CUTNKRExFTkJRVU1zUTBGQlF6dFJRVU5JTEUxQlFVMHNXVUZCV1N4SFFVRkhMRWxCUVVrc1EwRkJReXhOUVVGTkxFTkJRVU1zWVVGQllTeERRVUZETEhORFFVRnpReXhEUVVGRExFTkJRVU1zVTBGQlV5eERRVUZETEVkQlFVY3NSVUZCUlR0WlFVTndSeXhKUVVGSk8yZENRVU5HTEUxQlFVMHNSVUZCUlN4VFFVRlRMRVZCUVVVc1EwRkJRenRoUVVOeVFqdHZRa0ZCVXp0blFrRkRVaXhaUVVGWkxFTkJRVU1zVjBGQlZ5eEZRVUZGTEVOQlFVTTdZVUZETlVJN1VVRkRTQ3hEUVVGRExFTkJRVU1zUTBGQlF6dFJRVU5JTEUxQlFVMHNRMEZCUXl4VFFVRlRMRWRCUVVjc1EwRkJReXhGUVVGRExFbEJRVWtzUlVGQlJTeEZRVUZETEV0QlFVc3NSVUZCUlN4VFFVRlRMRVZCUVVVc1VVRkJVU3hGUVVGRkxGbEJRVmtzUlVGQlF5eEZRVUZETEVWQlFVVXNSVUZCUlR0WlFVTjRSU3hKUVVGSkxFTkJRVU1zUzBGQlN5eERRVUZETEZGQlFWRXNRMEZCUXl4SlFVRkpMRU5CUVVNc1MwRkJTeXhEUVVGRExGbEJRVmtzUTBGQlF5eEZRVUZGTzJkQ1FVTTFReXhaUVVGWkxFbEJRVWtzV1VGQldTeERRVUZETEZGQlFWRXNSVUZCUlN4WlFVRlpMRVZCUVVVc1UwRkJVeXhEUVVGRExFTkJRVU03WjBKQlEyaEZMRTlCUVU4N1lVRkRVanRaUVVORUxGbEJRVmtzUTBGQlF5eFhRVUZYTEVWQlFVVXNRMEZCUXp0WlFVTXpRaXhKUVVGSkxFdEJRVXM3WjBKQlExQXNUVUZCVFN4RFFVRkRMRXRCUVVzc1EwRkJReXhEUVVGRE96dG5Ra0ZGWkN4UFFVRlBMRU5CUVVNc1UwRkJVeXhEUVVGRExFTkJRVU03V1VGRGNrSXNPRVZCUVRoRk8xbEJRemxGTEZWQlFWVXNRMEZCUXl4SFFVRkhMRVZCUVVVc1EwRkJReXhOUVVGTkxFTkJRVU1zVTBGQlV5eEZRVUZGTEVWQlFVVXNSMEZCUnl4RFFVRkRMRU5CUVVNN1VVRkROVU1zUTBGQlF5eERRVUZETzBsQlEwb3NRMEZCUXl4RFFVRkRMRU5CUVVNN1FVRkRUQ3hEUVVGRElpd2ljMjkxY21ObGMwTnZiblJsYm5RaU9sc2lhVzF3YjNKMElIdExibTkzYmsxbGRISnBZM045SUdaeWIyMGdKeTR1TDNSNWNHVmtMVzFsZEhKcFkzTXZkSGx3WldRdGJXVjBjbWxqY3ljN1hHNXBiWEJ2Y25RZ0tpQmhjeUJuY205cklHWnliMjBnSjJSaGRHRm5jbTlyTFdGd2FTOW5jbTlySnp0Y2JtbHRjRzl5ZENCN1JFbE5SVTVUU1U5T1FVeEpWRmxmVWtWRVZVTkZVbDlVUlZKTlNVNUJWRVZmUlZaRlRsUjlJR1p5YjIwZ0p5NHZZMjl1YzNSekp6dGNibWx0Y0c5eWRDQjdUV0YwY21sNGZTQm1jbTl0SUNkQVpHRjBZV2R5YjJzdGJHbGljbUZ5YVdWekwzVjBhV3h6TDNOeVl5OTBlWEJsTFdSbFkyeGhjbUYwYVc5dWN5YzdYRzVwYlhCdmNuUWdlMFJwYlZKbFpIVmpkR2x2YmsxbGRHaHZaSE45SUdaeWIyMGdKeTR2ZEhsd1pYTW5PMXh1YVcxd2IzSjBJSHRFYVhOMFlXNWpaVUZuWjNKbFoyRjBhVzl1VFdWMGFHOWtmU0JtY205dElDY3VMaTlrYVhOMFlXNWpaUzF0WVhSeWFYZ3ZkSGx3WlhNbk8xeHVhVzF3YjNKMElIdHBjMDVwYkgwZ1puSnZiU0FuTGk0dlpHbHpkR0Z1WTJVdGJXRjBjbWw0TDNWMGFXeHpKenRjYmx4dVpYaHdiM0owSUdGemVXNWpJR1oxYm1OMGFXOXVJR055WldGMFpVMTFiSFJwUkdsdFVtVmtWMjl5YTJWeUtHUmhkR0U2SUVGeWNtRjVQR0Z1ZVZ0ZFBpd2diV1YwY21samN6b2dTMjV2ZDI1TlpYUnlhV056VzEwc0lHMWxkR2h2WkRvZ1JHbHRVbVZrZFdOMGFXOXVUV1YwYUc5a2N5eGNiaUFnZDJWcFoyaDBjem9nYm5WdFltVnlXMTBzSUdGblozSmxaMkYwYVc5dVRXVjBhRzlrT2lCRWFYTjBZVzVqWlVGblozSmxaMkYwYVc5dVRXVjBhRzlrTEZ4dUlDQnZjSFJwYjI1ek9pQmhibmtzSUhCeWIyZHlaWE56Um5WdVl6ODZJQ2hsY0c5amFEb2diblZ0WW1WeUxDQmxjRzlqYUhOTVpXNW5kR2c2SUc1MWJXSmxjaXdnWlcxaVpXUmthVzVuT2lCdWRXMWlaWEpiWFZ0ZEtTQTlQaUIyYjJsa1hHNHBPaUJRY205dGFYTmxQRTFoZEhKcGVENGdlMXh1SUNCcFppQW9JVzl3ZEdsdmJuTXVaR2x6ZEdGdVkyVkdia0Z5WjNNcFhHNGdJQ0FnZEdoeWIzY2dibVYzSUVWeWNtOXlLQ2R2Y0hScGIyNXpMbVJwYzNSaGJtTmxSbTVCY21keklHMTFjM1FnWW1VZ1pHVm1hVzVsWkNjcE8xeHVJQ0JwWmlBb1pHRjBZUzVzWlc1bmRHZ2dJVDA5SUcxbGRISnBZM011YkdWdVozUm9JSHg4SUdSaGRHRXViR1Z1WjNSb0lDRTlQU0J2Y0hScGIyNXpMbVJwYzNSaGJtTmxSbTVCY21kekxteGxibWQwYUNCOGZDQmtZWFJoTG14bGJtZDBhQ0FoUFQwZ2QyVnBaMmgwY3k1c1pXNW5kR2dwWEc0Z0lDQWdkR2h5YjNjZ2JtVjNJRVZ5Y205eUtDZGtZWFJoTENCdFpYUnlhV056SUdGdVpDQnZjSFJwYjI1eklHRnVaQ0IzWldsbmFIUnpJRzExYzNRZ2FHRjJaU0IwYUdVZ2MyRnRaU0JzWlc1bmRHZ25LVHRjYmlBZ2NtVjBkWEp1SUc1bGR5QlFjbTl0YVhObEtHWjFibU4wYVc5dUtISmxjMjlzZG1Vc0lISmxhbVZqZENrZ2UxeHVJQ0FnSUdOdmJuTjBJSGR2Y210bGNpQTlJRzVsZHlCWGIzSnJaWElvYm1WM0lGVlNUQ2duTGk5dGRXeHBkQzFqYjJ4MWJXNHRaR2x0TFhKbFpIVmpaWEl0ZDI5eWEyVnlKeXdnYVcxd2IzSjBMbTFsZEdFdWRYSnNLU2s3WEc0Z0lDQWdkMjl5YTJWeUxuQnZjM1JOWlhOellXZGxLSHRjYmlBZ0lDQWdJR052YkhWdGJuTkVZWFJoT2lCa1lYUmhMRnh1SUNBZ0lDQWdaR2x6ZEdGdVkyVk5aWFJ5YVdOek9pQnRaWFJ5YVdOekxGeHVJQ0FnSUNBZ2JXVjBhRzlrT2lCdFpYUm9iMlFzWEc0Z0lDQWdJQ0J2Y0hScGIyNXpPaUJ2Y0hScGIyNXpMRnh1SUNBZ0lDQWdkMlZwWjJoMGN6b2dkMlZwWjJoMGN5eGNiaUFnSUNBZ0lHRm5aM0psWjJGMGFXOXVUV1YwYUc5a09pQmhaMmR5WldkaGRHbHZiazFsZEdodlpDeGNiaUFnSUNCOUtUdGNiaUFnSUNCamIyNXpkQ0IwWlhKdGFXNWhkR1ZUZFdJZ1BTQm5jbTlyTG1WMlpXNTBjeTV2YmtOMWMzUnZiVVYyWlc1MEtFUkpUVVZPVTBsUFRrRk1TVlJaWDFKRlJGVkRSVkpmVkVWU1RVbE9RVlJGWDBWV1JVNVVLUzV6ZFdKelkzSnBZbVVvS0NrZ1BUNGdlMXh1SUNBZ0lDQWdkSEo1SUh0Y2JpQWdJQ0FnSUNBZ2QyOXlhMlZ5UHk1MFpYSnRhVzVoZEdVb0tUdGNiaUFnSUNBZ0lIMGdabWx1WVd4c2VTQjdYRzRnSUNBZ0lDQWdJSFJsY20xcGJtRjBaVk4xWWk1MWJuTjFZbk5qY21saVpTZ3BPMXh1SUNBZ0lDQWdmVnh1SUNBZ0lIMHBPMXh1SUNBZ0lIZHZjbXRsY2k1dmJtMWxjM05oWjJVZ1BTQW9lMlJoZEdFNklIdGxjbkp2Y2l3Z1pXMWlaV1JrYVc1bkxDQmxjRzlqYUU1MWJTd2daWEJ2WTJoelRHVnVaM1JvZlgwcElEMCtJSHRjYmlBZ0lDQWdJR2xtSUNnaGFYTk9hV3dvWlhCdlkyaE9kVzBwSUNZbUlDRnBjMDVwYkNobGNHOWphSE5NWlc1bmRHZ3BLU0I3WEc0Z0lDQWdJQ0FnSUhCeWIyZHlaWE56Um5WdVl5QW1KaUJ3Y205bmNtVnpjMFoxYm1Nb1pYQnZZMmhPZFcwc0lHVndiMk5vYzB4bGJtZDBhQ3dnWlcxaVpXUmthVzVuS1R0Y2JpQWdJQ0FnSUNBZ2NtVjBkWEp1TzF4dUlDQWdJQ0FnZlZ4dUlDQWdJQ0FnZEdWeWJXbHVZWFJsVTNWaUxuVnVjM1ZpYzJOeWFXSmxLQ2s3WEc0Z0lDQWdJQ0JwWmlBb1pYSnliM0lwWEc0Z0lDQWdJQ0FnSUhKbGFtVmpkQ2hsY25KdmNpazdYRzRnSUNBZ0lDQmxiSE5sWEc0Z0lDQWdJQ0FnSUhKbGMyOXNkbVVvWlcxaVpXUmthVzVuS1R0Y2JpQWdJQ0FnSUM4dklIUmxjbTFwYm1GMFpTQjBhR1VnZDI5eWEyVnlJR0ZtZEdWeUlITnZiV1VnZEdsdFpTNGdhVzF0YVdScFlYUmxJSFJsY20xcGJtRjBhVzl1SUdOaGRYTmxjeUJqY21GemFHVnpMbHh1SUNBZ0lDQWdjMlYwVkdsdFpXOTFkQ2dvS1NBOVBpQjNiM0pyWlhJdWRHVnliV2x1WVhSbEtDa3NJREV3TUNrN1hHNGdJQ0FnZlR0Y2JpQWdmU2s3WEc1OVhHNGlYWDA9IiwiaW1wb3J0IHsgVmVjdG9yIH0gZnJvbSAnLi90eXBlLWRlY2xhcmF0aW9ucyc7XG5pbXBvcnQgeyByYW5kb21GbG9hdCwgcmFuZG9tSW50IH0gZnJvbSAnLi9yYW5kb20nO1xuLyoqXG4gKiBBc3NlcnRzIGEgY29uZGl0aW9uIGJ5IHRocm93aW5nIGFuIEVycm9yLlxuICpcbiAqIEBleHBvcnRcbiAqIEBwYXJhbSB7Ym9vbGVhbn0gW2NvbmRpdGlvbj1mYWxzZV0gQ29uZGl0aW9uIHRvIGFzc2VydC5cbiAqIEBwYXJhbSB7c3RyaW5nfSBbbWVzc2FnZT0nQXNzZXJ0aW9uIGVycm9yLiddIE1lc3NhZ2UgdG8gb3V0cHV0LlxuICogQHRocm93cyB7RXJyb3J9XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBhc3NlcnQoY29uZGl0aW9uID0gZmFsc2UsIG1lc3NhZ2UgPSAnQXNzZXJ0aW9uIGVycm9yLicpIHtcbiAgICBpZiAoIWNvbmRpdGlvbilcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKG1lc3NhZ2UpO1xufVxuLyoqXG4gKiBDcmVhdGVzIG5ldyB0d28tZGltZW5zaW9uYWwgYXJyYXkgYW5kIGZpbGxzIGl0IHdpdGggdGhlIHZhbHVlIGdpdmVuLlxuICpcbiAqIEBwYXJhbSB7bnVtYmVyfSBkaW1lbnNpb24xIFRoZSBmaXJzdCBkaW1lbnNpb24gb2YgdGhlIGNvb3JkaW5hdGVzIChudW1iZXIgb2Ygcm93cykuXG4gKiBAcGFyYW0ge251bWJlcn0gZGltZW5zaW9uMiBUaGUgc2Vjb25kIGRpbWVuc2lvbiBvZiB0aGUgY29vcmRpbmF0ZXMgKG51bWJlciBvZiBjb2x1bW5zKS5cbiAqIEBwYXJhbSB7bnVtYmVyfSBbZmlsbD0wXSBBIHZhbHVlIHRvIGZpbGwgdGhlIGNvb3JkaW5hdGVzIHdpdGguXG4gKiBAcmV0dXJuIHtDb29yZGluYXRlc30gQSB0d28tZGltZW5zaW9uYWwgZmlsbGVkIHdpdGggdGhlIHZhbHVlIGdpdmVuLlxuICogQHRvZG8gTWlnaHQgYmUgc2xvdyBzaW5jZSB1c2VkIEFycmF5Lm1hcC4gUHJvYmFibHkgbmVlZHMgcGVyZm9ybWFuY2UgcmV2aXNpb24uXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBpbml0Q29vcmRpbmF0ZXMoZGltZW5zaW9uMSwgZGltZW5zaW9uMiwgZmlsbCA9IDApIHtcbiAgICByZXR1cm4gbmV3IEFycmF5KGRpbWVuc2lvbjEpLmZpbGwoZmlsbCkubWFwKCgpID0+IChuZXcgVmVjdG9yKGRpbWVuc2lvbjIpLmZpbGwoZmlsbCkpKTtcbn1cbi8qKlxuICogVHJhbnNwb3NlIG1hdHJpeC5cbiAqXG4gKiBAZXhwb3J0XG4gKiBAcGFyYW0ge01hdHJpeH0gbWF0cml4IFRoZSBtYXRyaXggdG8gYmUgdHJhbnNwb3NlZC5cbiAqIEByZXR1cm4ge01hdHJpeH0gVHJhbnNwb3NlZCBtYXRyaXguXG4gKiBAdG9kbyBNaWdodCBiZSBzbG93IHNpbmNlIHVzZWQgQXJyYXkubWFwLiBQcm9iYWJseSBuZWVkcyBwZXJmb3JtYW5jZSByZXZpc2lvbi5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHRyYW5zcG9zZU1hdHJpeChtYXRyaXgpIHtcbiAgICByZXR1cm4gbmV3IEFycmF5KG1hdHJpeFswXS5sZW5ndGgpLmZpbGwoMClcbiAgICAgICAgLm1hcCgoXywgaSkgPT4gKG5ldyBWZWN0b3IobWF0cml4Lmxlbmd0aCkuZmlsbCgwKS5tYXAoKF8sIGopID0+IChtYXRyaXhbal1baV0pKSkpO1xufVxuLyoqXG4gKiBBZGRzIHR3byB2ZWN0b3JzIHdpdGggdGhlIHNlY29uZCBvbmUgdG8gYmUgbXVsdGlwbGllZCBieSB0aGUgZ2l2ZW4gcmF0aW8uXG4gKlxuICogQGV4cG9ydFxuICogQHBhcmFtIHtWZWN0b3J9IHAgVGhlIGZpcnN0IHZlY3RvciB0byBhZGQuXG4gKiBAcGFyYW0ge1ZlY3Rvcn0gcSBUaGUgc2Vjb25kIHZlY3RvciB0byBhZGQuXG4gKiBAcGFyYW0ge251bWJlcn0gW211bHRpcGxpZXI9MV0gQSBtdWx0aXBsaWVyIHRvIGJlIHVzZWQgYmVmb3JlIHRoZSBzZWNvbmQgdmVjdG9yIGlzIGFkZGVkLlxuICogQHJldHVybiB7VmVjdG9yfSBOZXcgdmVjdG9yIGNvbnRhaW5lZCB0aGUgcmVzdWx0IG9mIG9wZXJhdGlvbiBwK211bHRpcGxpZXIqcS5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIHZlY3RvckFkZChwLCBxLCBtdWx0aXBsaWVyID0gMSkge1xuICAgIGNvbnN0IG5JdGVtcyA9IHAubGVuZ3RoO1xuICAgIGFzc2VydChuSXRlbXMgPT0gcS5sZW5ndGgsICdWZWN0b3IgbGVuZ3RocyBkbyBub3QgbWF0Y2guJyk7XG4gICAgY29uc3QgdG90YWwgPSBuZXcgVmVjdG9yKG5JdGVtcyk7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBwLmxlbmd0aDsgKytpKVxuICAgICAgICB0b3RhbFtpXSA9IHBbaV0gKyBtdWx0aXBsaWVyICogcVtpXTtcbiAgICByZXR1cm4gdG90YWw7XG59XG4vKipcbiAqIFN1bXMgdGhlIHZlY3RvcidzIGl0ZW1zLlxuICpcbiAqIEBwYXJhbSB7VmVjdG9yfSB2IFRoZSB2ZWN0b3IgdG8gYmUgc3VtbWVkLlxuICogQHJldHVybiB7bnVtYmVyfSBUaGUgdmVjdG9yJ3MgaXRlbXMgc3VtLlxuICovXG5mdW5jdGlvbiBpdGVtc1N1bSh2KSB7XG4gICAgbGV0IHRvdGFsID0gMDtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHYubGVuZ3RoOyArK2kpXG4gICAgICAgIHRvdGFsICs9IHZbaV07XG4gICAgcmV0dXJuIHRvdGFsO1xufVxuLyoqXG4gKiBTdXFhcmVzIHRoZSB2ZWN0b3IncyBpdGVtcy5cbiAqXG4gKiBAcGFyYW0ge1ZlY3Rvcn0gdiBUaGUgdmVjdG9yIHRvIHNxdWFyZS5cbiAqIEByZXR1cm4ge1ZlY3Rvcn0gQSBuZXcgdmVjdG9yIGNvbnRhaW5pbmcgdGhlIG9yaWdpbmFsJ3MgaXRlbXMgc3F1YXJlZC5cbiAqL1xuZnVuY3Rpb24gdmVjdG9yU3F1YXJlKHYpIHtcbiAgICBjb25zdCBuSXRlbXMgPSB2Lmxlbmd0aDtcbiAgICBjb25zdCB0b3RhbCA9IG5ldyBWZWN0b3Iobkl0ZW1zKTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IHYubGVuZ3RoOyArK2kpXG4gICAgICAgIHRvdGFsW2ldID0gdltpXSAqIHZbaV07XG4gICAgcmV0dXJuIHRvdGFsO1xufVxuZXhwb3J0IGZ1bmN0aW9uIHZlY3Rvckxlbmd0aCh2KSB7XG4gICAgbGV0IHNxclN1bSA9IDA7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB2Lmxlbmd0aDsgaSsrKVxuICAgICAgICBzcXJTdW0gKz0gdltpXSAqIHZbaV07XG4gICAgcmV0dXJuIE1hdGguc3FydChzcXJTdW0pO1xufVxuZXhwb3J0IGZ1bmN0aW9uIHZlY3RvckRvdFByb2R1Y3QodjEsIHYyKSB7XG4gICAgaWYgKHYxLmxlbmd0aCAhPSB2Mi5sZW5ndGgpXG4gICAgICAgIHRocm93IG5ldyBFcnJvcignVGhlIGRpbWVuc2lvbmFsaXR5IG9mIHRoZSB2ZWN0b3JzIG11c3QgbWF0Y2gnKTtcbiAgICBsZXQgcHJvZCA9IDA7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCB2MS5sZW5ndGg7IGkrKylcbiAgICAgICAgcHJvZCArPSB2MVtpXSAqIHYyW2ldO1xuICAgIHJldHVybiBwcm9kO1xufVxuLyoqXG4gKiBDcmVhdGVzIGEgbWF0cml4IGZpbGxlZCB3aXRoIHJhbmRvbSBmbG9hdGluZyBwb2ludCB2YWx1ZXMuXG4gKlxuICogQGV4cG9ydFxuICogQHBhcmFtIHtudW1iZXJ9IGRpbWVuc2lvbjEgVGhlIGZpcnN0IGRpbWVuc2lvbiBvZiB0aGUgbWF0cml4LlxuICogQHBhcmFtIHtudW1iZXJ9IGRpbWVuc2lvbjIgVGhlIHNlY29uZCBkaW1lbnNpb24gb2YgdGhlIG1hdHJpeC5cbiAqIEBwYXJhbSB7bnVtYmVyfSBbc2NhbGU9MS5dIE1heCB2YWx1ZSBnaXZlbiBieSByYW5kb20gZ2VuZXJhdG9yLlxuICogQHJldHVybiB7TWF0cml4fSBBIG5ldyBtYXRyaXggZmlsbGVkIHdpdGggcmFuZG9tIGZsb2F0aW5nIHBvaW50ICB2YWx1ZXMuXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBmaWxsUmFuZG9tTWF0cml4KGRpbWVuc2lvbjEsIGRpbWVuc2lvbjIsIHNjYWxlID0gMS4pIHtcbiAgICBjb25zdCBtYXRyaXggPSBpbml0Q29vcmRpbmF0ZXMoZGltZW5zaW9uMSwgZGltZW5zaW9uMik7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBkaW1lbnNpb24xOyArK2kpIHtcbiAgICAgICAgZm9yIChsZXQgaiA9IDA7IGogPCBkaW1lbnNpb24yOyArK2opXG4gICAgICAgICAgICBtYXRyaXhbaV1bal0gPSByYW5kb21GbG9hdChzY2FsZSk7XG4gICAgfVxuICAgIHJldHVybiBtYXRyaXg7XG59XG4vKipcbiAqIENhbGN1bGF0ZXMgRXVjbGlkZWFuIGRpc3RhbmNlIGJldHdlZW4gdHdvIHZlY3RvcnMuXG4gKlxuICogQGV4cG9ydFxuICogQHBhcmFtIHtWZWN0b3J9IHAgVGhlIGZpcnN0IHZlY3Rvci5cbiAqIEBwYXJhbSB7VmVjdG9yfSBxIFRoZSBzZWNvbmQgdmVjdG9yLlxuICogQHJldHVybiB7bnVtYmVyfSBFdWNsaWRlYW4gZGlzdGFuY2UgYmV0d2VlbiB0aGUgZ2l2ZW4gdmVjdG9ycy5cbiAqL1xuZXhwb3J0IGZ1bmN0aW9uIGNhbGN1bGF0ZUV1Y2xpZGVhbkRpc3RhbmNlKHAsIHEpIHtcbiAgICBsZXQgcmVzdWx0ID0gMDtcbiAgICBjb25zdCBsZW4gPSBwLmxlbmd0aDtcbiAgICBpZiAobGVuICE9PSBxLmxlbmd0aClcbiAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdUaGUgZGltZW5zaW9uYWxpdHkgb2YgdGhlIHZlY3RvcnMgbXVzdCBtYXRjaCcpO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbGVuOyArK2kpXG4gICAgICAgIHJlc3VsdCArPSBNYXRoLnBvdygocFtpXSAtIHFbaV0pLCAyKTtcbiAgICByZXR1cm4gTWF0aC5zcXJ0KHJlc3VsdCk7XG59XG4vKipcbiAqIENyZWF0ZXMgYSBkaXN0YW5jZSBtYXRyaXggdXNpbmcgYSBjdXN0b20gZGlzdGFuY2UgZnVuY3Rpb24uXG4gKlxuICogQGV4cG9ydFxuICogQHBhcmFtIHtWZWN0b3JzfSBkYXRhIElucHV0IHZlY3RvcnMgdG8gY2FsY3VsYXRlIGRpc3RhbmNlcy5cbiAqIEBwYXJhbSB7RGlzdGFuY2VNZXRyaWN9IGRpc3RhbmNlIEN1c3RvbSBkaXN0YW5jZSBmdW5jdGlvbi5cbiAqIEByZXR1cm4ge01hdHJpeH0gQ2FsY3VsYXRlZCBjdXN0b20gZGlzdGFuY2UgbWF0cml4LlxuICovXG5leHBvcnQgZnVuY3Rpb24gY2FsY0Rpc3RhbmNlTWF0cml4KGRhdGEsIGRpc3RhbmNlKSB7XG4gICAgY29uc3Qgbkl0ZW1zID0gZGF0YS5sZW5ndGg7XG4gICAgY29uc3QgbWF0cml4ID0gaW5pdENvb3JkaW5hdGVzKG5JdGVtcywgbkl0ZW1zLCAwKTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IG5JdGVtczsgKytpKSB7XG4gICAgICAgIGZvciAobGV0IGogPSBpICsgMTsgaiA8IG5JdGVtczsgKytqKSB7XG4gICAgICAgICAgICBjb25zdCBkID0gKGRhdGFbaV0gPT0gbnVsbCkgfHwgKGRhdGFbal0gPT0gbnVsbCkgPyAwIDogZGlzdGFuY2UoZGF0YVtpXSwgZGF0YVtqXSk7XG4gICAgICAgICAgICBtYXRyaXhbaV1bal0gPSBtYXRyaXhbal1baV0gPSBkO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBtYXRyaXg7XG59XG4vKipcbiAqIENyZWF0ZXMgYSBkaXN0YW5jZSBtYXRyaXggdXNpbmcgYSBjdXN0b20gZGlzdGFuY2UgZnVuY3Rpb24uXG4gKlxuICogQGV4cG9ydFxuICogQHBhcmFtIHtWZWN0b3JzfSBkYXRhIElucHV0IHZlY3RvcnMgdG8gY2FsY3VsYXRlIGRpc3RhbmNlcy5cbiAqIEBwYXJhbSB7RGlzdGFuY2VNZXRyaWN9IGRpc3RhbmNlIEN1c3RvbSBkaXN0YW5jZSBmdW5jdGlvbi5cbiAqIEByZXR1cm4ge01hdHJpeH0gQ2FsY3VsYXRlZCBjdXN0b20gZGlzdGFuY2UgbWF0cml4LlxuICovXG5leHBvcnQgZnVuY3Rpb24gY2FsY05vcm1hbGl6ZWREaXN0YW5jZU1hdHJpeChkYXRhLCBkaXN0YW5jZSkge1xuICAgIGNvbnN0IG5JdGVtcyA9IGRhdGEubGVuZ3RoO1xuICAgIGNvbnN0IG1hdHJpeCA9IGluaXRDb29yZGluYXRlcyhuSXRlbXMsIG5JdGVtcywgMCk7XG4gICAgbGV0IG1heCA9IE51bWJlci5NSU5fVkFMVUU7XG4gICAgbGV0IG1pbiA9IE51bWJlci5NQVhfVkFMVUU7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBuSXRlbXM7ICsraSkge1xuICAgICAgICBmb3IgKGxldCBqID0gaTsgaiA8IG5JdGVtczsgKytqKSB7XG4gICAgICAgICAgICBjb25zdCBkID0gKGRhdGFbaV0gPT0gbnVsbCkgfHwgKGRhdGFbal0gPT0gbnVsbCB8fCBpID09PSBqKSA/IDAgOiBkaXN0YW5jZShkYXRhW2ldLCBkYXRhW2pdKTtcbiAgICAgICAgICAgIG1hdHJpeFtpXVtqXSA9IG1hdHJpeFtqXVtpXSA9IGQ7XG4gICAgICAgICAgICBpZiAoZCA+IG1heClcbiAgICAgICAgICAgICAgICBtYXggPSBkO1xuICAgICAgICAgICAgaWYgKGQgPCBtaW4pXG4gICAgICAgICAgICAgICAgbWluID0gZDtcbiAgICAgICAgfVxuICAgIH1cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IG5JdGVtczsgKytpKSB7XG4gICAgICAgIGZvciAobGV0IGogPSBpICsgMTsgaiA8IG5JdGVtczsgKytqKVxuICAgICAgICAgICAgbWF0cml4W2ldW2pdID0gbWF0cml4W2pdW2ldID0gKG1hdHJpeFtpXVtqXSAtIG1pbikgLyAobWF4IC0gbWluKTtcbiAgICB9XG4gICAgcmV0dXJuIG1hdHJpeDtcbn1cbi8qKiBHZW5lcmF0ZXMgYXJyYXkgZnJvbSBhIHJhbmdlIFtiZWdpbjsgZW5kXSBvciBbYmVnaW47IGVuZCkgaWYgZW5kRXhjbHVzaXZlLiAqKi9cbmV4cG9ydCBmdW5jdGlvbiBnZW5SYW5nZShiZWdpbiwgZW5kLCBlbmRFeGNsdXNpdmUgPSBmYWxzZSkge1xuICAgIGNvbnN0IG5JdGVtcyA9IGVuZCAtIGJlZ2luICsgKGVuZEV4Y2x1c2l2ZSA/IDAgOiAxKTtcbiAgICBjb25zdCBzZXJpZXMgPSBuZXcgSW50MzJBcnJheShuSXRlbXMpO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbkl0ZW1zOyArK2kpXG4gICAgICAgIHNlcmllc1tpXSA9IGJlZ2luICsgaTtcbiAgICByZXR1cm4gc2VyaWVzO1xufVxuLyoqXG4gKiBSZXR1cm5zIG9yZGVyIG9mIHZhbHVlcyBhcyBpZiB0aGV5IGFyZSBzb3J0ZWQuXG4gKlxuICogQGV4cG9ydFxuICogQHBhcmFtIHthbnlbXX0gdmFsdWVzIElucHV0IGFycmF5LlxuICogQHBhcmFtIHtib29sZWFufSBbcmV2ZXJzZT1mYWxzZV0gV2hldGhlciB0byByZXR1cm4gcmV2ZXJzZWQgb3JkZXIuXG4gKiBAcmV0dXJuIHtudW1iZXJbXX0gVGhlIG9yZGVyIGNvbXB1dGVkLlxuICovXG5leHBvcnQgZnVuY3Rpb24gYXJnU29ydCh2YWx1ZXMsIHJldmVyc2UgPSBmYWxzZSkge1xuICAgIGNvbnN0IHNvcnRmbiA9IHJldmVyc2UgPyAoYSwgYikgPT4gKGJbMF0gLSBhWzBdKSA6IChhLCBiKSA9PiAoYVswXSAtIGJbMF0pO1xuICAgIGNvbnN0IGRlY29yID0gKHYsIGkpID0+IFt2LCBpXTsgLy8gc2V0IGluZGV4IHRvIHZhbHVlXG4gICAgY29uc3QgdW5kZWNvciA9IChhKSA9PiBhWzFdOyAvLyBsZWF2ZSBvbmx5IGluZGV4XG4gICAgY29uc3QgX2FyZ3NvcnQgPSAoYXJyKSA9PiBhcnIubWFwKGRlY29yKS5zb3J0KHNvcnRmbikubWFwKHVuZGVjb3IpO1xuICAgIHJldHVybiBfYXJnc29ydCh2YWx1ZXMpO1xufVxuLyoqXG4gKiBSZXR1cm5zIHRoZSBpbmRleGVzIG9mIHRoZSBtb3N0IGRpdmVyc2Ugb2JqZWN0cyBhY2NvcmRpbmcgdG8gdGhlIGRpc3QgZnVuY3Rpb25cbiAqIEBwYXJhbSB7bnVtYmVyfSBsZW5ndGggdG90YWwgbnVtYmVyIG9mIG9iamVjdHNcbiAqIEBwYXJhbSB7bnVtYmVyfSBuIG51bWJlciBvZiBkaXZlcnNlIGVsZW1lbnRzIHRvIGZpbmRcbiAqIEBwYXJhbSB7KGkxOiBudW1iZXIsIGkyOiBudW1iZXIpID0+IG51bWJlcn0gZGlzdCBhIGZ1bmN0aW9uIHdoaWNoIGNhbGN1bGF0ZXMgZGlzdGFuY2UgYmV0d2VlblxuICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHR3byBvYmplY3RzIHVzaW5nIHRoZWlyIGluZGV4ZXNcbiAqIEByZXR1cm5zIHtudW1iZXJbXX0gVGhlIGluZGV4ZXMgb2YgdGhlIG1vc3QgZGl2ZXJzZSBvYmplY3RzXG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBnZXREaXZlcnNlU3Vic2V0KGxlbmd0aCwgbiwgZGlzdCkge1xuICAgIGZ1bmN0aW9uIG1heEJ5KHZhbHVlcywgb3JkZXJCeSkge1xuICAgICAgICBsZXQgbWF4VmFsdWUgPSBudWxsO1xuICAgICAgICBsZXQgbWF4T3JkZXJCeSA9IG51bGw7XG4gICAgICAgIGZvciAoY29uc3QgZWxlbWVudCBvZiB2YWx1ZXMpIHtcbiAgICAgICAgICAgIGNvbnN0IGVsZW1lbnRPcmRlckJ5ID0gb3JkZXJCeShlbGVtZW50KTtcbiAgICAgICAgICAgIGlmIChtYXhPcmRlckJ5ID09IG51bGwgfHwgZWxlbWVudE9yZGVyQnkgPiBtYXhPcmRlckJ5KSB7XG4gICAgICAgICAgICAgICAgbWF4VmFsdWUgPSBlbGVtZW50O1xuICAgICAgICAgICAgICAgIG1heE9yZGVyQnkgPSBlbGVtZW50T3JkZXJCeTtcbiAgICAgICAgICAgIH1cbiAgICAgICAgfVxuICAgICAgICByZXR1cm4gbWF4VmFsdWU7XG4gICAgfVxuICAgIGNvbnN0IHN1YnNldCA9IFtyYW5kb21JbnQobGVuZ3RoIC0gMSldO1xuICAgIGNvbnN0IGNvbXBsZW1lbnQgPSBuZXcgU2V0KCk7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBsZW5ndGg7ICsraSkge1xuICAgICAgICBpZiAoIXN1YnNldC5pbmNsdWRlcyhpKSlcbiAgICAgICAgICAgIGNvbXBsZW1lbnQuYWRkKGkpO1xuICAgIH1cbiAgICB3aGlsZSAoc3Vic2V0Lmxlbmd0aCA8IG4pIHtcbiAgICAgICAgY29uc3QgaWR4ID0gbWF4QnkoY29tcGxlbWVudC52YWx1ZXMoKSwgKGkpID0+IE1hdGgubWluLmFwcGx5KE1hdGgsIHN1YnNldC5tYXAoZnVuY3Rpb24gKHZhbCwgaW5kZXgpIHtcbiAgICAgICAgICAgIHJldHVybiBkaXN0KGksIHZhbCk7XG4gICAgICAgIH0pKSk7XG4gICAgICAgIGlmIChpZHgpIHtcbiAgICAgICAgICAgIHN1YnNldC5wdXNoKGlkeCk7XG4gICAgICAgICAgICBjb21wbGVtZW50LmRlbGV0ZShpZHgpO1xuICAgICAgICB9XG4gICAgfVxuICAgIHJldHVybiBzdWJzZXQ7XG59XG4vKipcbiAqIFJldHVybnMgbm9ybWFsaXplZCB2ZWN0b3IuXG4gKlxuICogQGV4cG9ydFxuICogQHBhcmFtIHtWZWN0b3J9IGRhdGEgbnVtZXJpY2FsIGFycmF5XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBub3JtYWxpemUoZGF0YSkge1xuICAgIGNvbnN0IGxlbiA9IGRhdGEubGVuZ3RoO1xuICAgIGxldCBzdW0gPSAwO1xuICAgIGxldCBzdW1PZlNxdWFyZXMgPSAwO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbGVuOyArK2kpIHtcbiAgICAgICAgc3VtICs9IGRhdGFbaV07XG4gICAgICAgIHN1bU9mU3F1YXJlcyArPSBNYXRoLnBvdyhkYXRhW2ldLCAyKTtcbiAgICB9XG4gICAgY29uc3QgbWVhbiA9IHN1bSAvIGxlbjtcbiAgICBjb25zdCBzdGREZXZJbnZlcnNlID0gMS4wIC8gTWF0aC5zcXJ0KHN1bU9mU3F1YXJlcyAvIGxlbiAtIE1hdGgucG93KG1lYW4sIDIpKTtcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGxlbjsgKytpKVxuICAgICAgICBkYXRhW2ldID0gKGRhdGFbaV0gLSBtZWFuKSAqIHN0ZERldkludmVyc2U7XG4gICAgcmV0dXJuIGRhdGE7XG59XG4vKipcbiAqIEZpbmRzIHNldCBkaWZmZXJlbmNlIGJldHdlZW4gdHdvIGxpc3RzLlxuICogQHBhcmFtIHthbnlbXX0gYSBUaGUgZmlyc3QgbGlzdC5cbiAqIEBwYXJhbSB7YW55W119IGIgVGhlIHNlY29uZCBsaXN0LlxuICogQHJldHVybiB7YW55W119XG4gKi9cbmV4cG9ydCBmdW5jdGlvbiBzZXREaWZmZXJlbmNlKGEsIGIpIHtcbiAgICBjb25zdCBiU2V0ID0gbmV3IFNldChiKTtcbiAgICByZXR1cm4gQXJyYXkuZnJvbShuZXcgU2V0KGEuZmlsdGVyKCh4KSA9PiAhYlNldC5oYXMoeCkpKS52YWx1ZXMoKSk7XG59XG4vLyMgc291cmNlTWFwcGluZ1VSTD1kYXRhOmFwcGxpY2F0aW9uL2pzb247YmFzZTY0LGV5SjJaWEp6YVc5dUlqb3pMQ0ptYVd4bElqb2lkbVZqZEc5eUxXOXdaWEpoZEdsdmJuTXVhbk1pTENKemIzVnlZMlZTYjI5MElqb2lJaXdpYzI5MWNtTmxjeUk2V3lKMlpXTjBiM0l0YjNCbGNtRjBhVzl1Y3k1MGN5SmRMQ0p1WVcxbGN5STZXMTBzSW0xaGNIQnBibWR6SWpvaVFVRkJRU3hQUVVGUExFVkJRVk1zVFVGQlRTeEZRVUYxUXl4TlFVRk5MSEZDUVVGeFFpeERRVUZETzBGQlEzcEdMRTlCUVU4c1JVRkJReXhYUVVGWExFVkJRVVVzVTBGQlV5eEZRVUZETEUxQlFVMHNWVUZCVlN4RFFVRkRPMEZCUldoRU96czdPenM3TzBkQlQwYzdRVUZEU0N4TlFVRk5MRlZCUVZVc1RVRkJUU3hEUVVGRExGbEJRWEZDTEV0QlFVc3NSVUZCUlN4VlFVRnJRaXhyUWtGQmEwSTdTVUZEY2tZc1NVRkJTU3hEUVVGRExGTkJRVk03VVVGRFdpeE5RVUZOTEVsQlFVa3NTMEZCU3l4RFFVRkRMRTlCUVU4c1EwRkJReXhEUVVGRE8wRkJRemRDTEVOQlFVTTdRVUZGUkRzN096czdPenM3UjBGUlJ6dEJRVU5JTEUxQlFVMHNWVUZCVlN4bFFVRmxMRU5CUVVNc1ZVRkJhMElzUlVGQlJTeFZRVUZyUWl4RlFVRkZMRTlCUVdVc1EwRkJRenRKUVVOMFJpeFBRVUZQTEVsQlFVa3NTMEZCU3l4RFFVRkRMRlZCUVZVc1EwRkJReXhEUVVGRExFbEJRVWtzUTBGQlF5eEpRVUZKTEVOQlFVTXNRMEZCUXl4SFFVRkhMRU5CUVVNc1IwRkJSeXhGUVVGRkxFTkJRVU1zUTBGQlF5eEpRVUZKTEUxQlFVMHNRMEZCUXl4VlFVRlZMRU5CUVVNc1EwRkJReXhKUVVGSkxFTkJRVU1zU1VGQlNTeERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRPMEZCUTNwR0xFTkJRVU03UVVGRlJEczdPenM3T3p0SFFVOUhPMEZCUTBnc1RVRkJUU3hWUVVGVkxHVkJRV1VzUTBGQlF5eE5RVUZqTzBsQlF6VkRMRTlCUVU4c1NVRkJTU3hMUVVGTExFTkJRVU1zVFVGQlRTeERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRMRTFCUVUwc1EwRkJReXhEUVVGRExFbEJRVWtzUTBGQlF5eERRVUZETEVOQlFVTTdVMEZEZGtNc1IwRkJSeXhEUVVGRExFTkJRVU1zUTBGQlF5eEZRVUZGTEVOQlFVTXNSVUZCUlN4RlFVRkZMRU5CUVVNc1EwRkJReXhKUVVGSkxFMUJRVTBzUTBGQlF5eE5RVUZOTEVOQlFVTXNUVUZCVFN4RFFVRkRMRU5CUVVNc1NVRkJTU3hEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETEVkQlFVY3NRMEZCUXl4RFFVRkRMRU5CUVVNc1JVRkJSU3hEUVVGRExFVkJRVVVzUlVGQlJTeERRVUZETEVOQlFVTXNUVUZCVFN4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNN1FVRkRkRVlzUTBGQlF6dEJRVVZFT3pzN096czdPenRIUVZGSE8wRkJRMGdzVFVGQlRTeFZRVUZWTEZOQlFWTXNRMEZCUXl4RFFVRlRMRVZCUVVVc1EwRkJVeXhGUVVGRkxHRkJRWEZDTEVOQlFVTTdTVUZEY0VVc1RVRkJUU3hOUVVGTkxFZEJRVWNzUTBGQlF5eERRVUZETEUxQlFVMHNRMEZCUXp0SlFVVjRRaXhOUVVGTkxFTkJRVU1zVFVGQlRTeEpRVUZKTEVOQlFVTXNRMEZCUXl4TlFVRk5MRVZCUVVVc09FSkJRVGhDTEVOQlFVTXNRMEZCUXp0SlFVVXpSQ3hOUVVGTkxFdEJRVXNzUjBGQlJ5eEpRVUZKTEUxQlFVMHNRMEZCUXl4TlFVRk5MRU5CUVVNc1EwRkJRenRKUVVWcVF5eExRVUZMTEVsQlFVa3NRMEZCUXl4SFFVRkhMRU5CUVVNc1JVRkJSU3hEUVVGRExFZEJRVWNzUTBGQlF5eERRVUZETEUxQlFVMHNSVUZCUlN4RlFVRkZMRU5CUVVNN1VVRkRMMElzUzBGQlN5eERRVUZETEVOQlFVTXNRMEZCUXl4SFFVRkhMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU1zUjBGQlJ5eFZRVUZWTEVkQlFVY3NRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRE8wbEJSWFJETEU5QlFVOHNTMEZCU3l4RFFVRkRPMEZCUTJZc1EwRkJRenRCUVVWRU96czdPenRIUVV0SE8wRkJRMGdzVTBGQlV5eFJRVUZSTEVOQlFVTXNRMEZCVXp0SlFVTjZRaXhKUVVGSkxFdEJRVXNzUjBGQlJ5eERRVUZETEVOQlFVTTdTVUZGWkN4TFFVRkxMRWxCUVVrc1EwRkJReXhIUVVGSExFTkJRVU1zUlVGQlJTeERRVUZETEVkQlFVY3NRMEZCUXl4RFFVRkRMRTFCUVUwc1JVRkJSU3hGUVVGRkxFTkJRVU03VVVGREwwSXNTMEZCU3l4SlFVRkpMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF6dEpRVVZvUWl4UFFVRlBMRXRCUVVzc1EwRkJRenRCUVVObUxFTkJRVU03UVVGRlJEczdPenM3UjBGTFJ6dEJRVU5JTEZOQlFWTXNXVUZCV1N4RFFVRkRMRU5CUVZNN1NVRkROMElzVFVGQlRTeE5RVUZOTEVkQlFVY3NRMEZCUXl4RFFVRkRMRTFCUVUwc1EwRkJRenRKUVVONFFpeE5RVUZOTEV0QlFVc3NSMEZCUnl4SlFVRkpMRTFCUVUwc1EwRkJReXhOUVVGTkxFTkJRVU1zUTBGQlF6dEpRVVZxUXl4TFFVRkxMRWxCUVVrc1EwRkJReXhIUVVGSExFTkJRVU1zUlVGQlJTeERRVUZETEVkQlFVY3NRMEZCUXl4RFFVRkRMRTFCUVUwc1JVRkJSU3hGUVVGRkxFTkJRVU03VVVGREwwSXNTMEZCU3l4RFFVRkRMRU5CUVVNc1EwRkJReXhIUVVGSExFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTXNSMEZCUnl4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU03U1VGRmVrSXNUMEZCVHl4TFFVRkxMRU5CUVVNN1FVRkRaaXhEUVVGRE8wRkJSVVFzVFVGQlRTeFZRVUZWTEZsQlFWa3NRMEZCUXl4RFFVRlRPMGxCUTNCRExFbEJRVWtzVFVGQlRTeEhRVUZYTEVOQlFVTXNRMEZCUXp0SlFVTjJRaXhMUVVGTExFbEJRVWtzUTBGQlF5eEhRVUZYTEVOQlFVTXNSVUZCUlN4RFFVRkRMRWRCUVVjc1EwRkJReXhEUVVGRExFMUJRVTBzUlVGQlJTeERRVUZETEVWQlFVVTdVVUZEZGtNc1RVRkJUU3hKUVVGSkxFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTXNSMEZCUnl4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU03U1VGRGVFSXNUMEZCVHl4SlFVRkpMRU5CUVVNc1NVRkJTU3hEUVVGRExFMUJRVTBzUTBGQlF5eERRVUZETzBGQlF6TkNMRU5CUVVNN1FVRkZSQ3hOUVVGTkxGVkJRVlVzWjBKQlFXZENMRU5CUVVNc1JVRkJWU3hGUVVGRkxFVkJRVlU3U1VGRGNrUXNTVUZCU1N4RlFVRkZMRU5CUVVNc1RVRkJUU3hKUVVGSkxFVkJRVVVzUTBGQlF5eE5RVUZOTzFGQlEzaENMRTFCUVUwc1NVRkJTU3hMUVVGTExFTkJRVU1zT0VOQlFUaERMRU5CUVVNc1EwRkJRenRKUVVOc1JTeEpRVUZKTEVsQlFVa3NSMEZCVnl4RFFVRkRMRU5CUVVNN1NVRkRja0lzUzBGQlN5eEpRVUZKTEVOQlFVTXNSMEZCVnl4RFFVRkRMRVZCUVVVc1EwRkJReXhIUVVGSExFVkJRVVVzUTBGQlF5eE5RVUZOTEVWQlFVVXNRMEZCUXl4RlFVRkZPMUZCUTNoRExFbEJRVWtzU1VGQlNTeEZRVUZGTEVOQlFVTXNRMEZCUXl4RFFVRkRMRWRCUVVjc1JVRkJSU3hEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETzBsQlEzaENMRTlCUVU4c1NVRkJTU3hEUVVGRE8wRkJRMlFzUTBGQlF6dEJRVVZFT3pzN096czdPenRIUVZGSE8wRkJRMGdzVFVGQlRTeFZRVUZWTEdkQ1FVRm5RaXhEUVVGRExGVkJRV3RDTEVWQlFVVXNWVUZCYTBJc1JVRkJSU3hSUVVGblFpeEZRVUZGTzBsQlEzcEdMRTFCUVUwc1RVRkJUU3hIUVVGSExHVkJRV1VzUTBGQlF5eFZRVUZWTEVWQlFVVXNWVUZCVlN4RFFVRkRMRU5CUVVNN1NVRkZka1FzUzBGQlN5eEpRVUZKTEVOQlFVTXNSMEZCUnl4RFFVRkRMRVZCUVVVc1EwRkJReXhIUVVGSExGVkJRVlVzUlVGQlJTeEZRVUZGTEVOQlFVTXNSVUZCUlR0UlFVTnVReXhMUVVGTExFbEJRVWtzUTBGQlF5eEhRVUZITEVOQlFVTXNSVUZCUlN4RFFVRkRMRWRCUVVjc1ZVRkJWU3hGUVVGRkxFVkJRVVVzUTBGQlF6dFpRVU5xUXl4TlFVRk5MRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETEVkQlFVY3NWMEZCVnl4RFFVRkRMRXRCUVVzc1EwRkJReXhEUVVGRE8wdEJRM0pETzBsQlEwUXNUMEZCVHl4TlFVRk5MRU5CUVVNN1FVRkRhRUlzUTBGQlF6dEJRVVZFT3pzN096czdPMGRCVDBjN1FVRkRTQ3hOUVVGTkxGVkJRVlVzTUVKQlFUQkNMRU5CUVVNc1EwRkJVeXhGUVVGRkxFTkJRVk03U1VGRE4wUXNTVUZCU1N4TlFVRk5MRWRCUVVjc1EwRkJReXhEUVVGRE8wbEJRMllzVFVGQlRTeEhRVUZITEVkQlFVY3NRMEZCUXl4RFFVRkRMRTFCUVUwc1EwRkJRenRKUVVWeVFpeEpRVUZKTEVkQlFVY3NTMEZCU3l4RFFVRkRMRU5CUVVNc1RVRkJUVHRSUVVOc1FpeE5RVUZOTEVsQlFVa3NTMEZCU3l4RFFVRkRMRGhEUVVFNFF5eERRVUZETEVOQlFVTTdTVUZGYkVVc1MwRkJTeXhKUVVGSkxFTkJRVU1zUjBGQlJ5eERRVUZETEVWQlFVVXNRMEZCUXl4SFFVRkhMRWRCUVVjc1JVRkJSU3hGUVVGRkxFTkJRVU03VVVGRE1VSXNUVUZCVFN4SlFVRkpMRk5CUVVFc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETEVkQlFVY3NRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRExFVkJRVWtzUTBGQlF5eERRVUZCTEVOQlFVTTdTVUZGTDBJc1QwRkJUeXhKUVVGSkxFTkJRVU1zU1VGQlNTeERRVUZETEUxQlFVMHNRMEZCUXl4RFFVRkRPMEZCUXpOQ0xFTkJRVU03UVVGRlJEczdPenM3T3p0SFFVOUhPMEZCUTBnc1RVRkJUU3hWUVVGVkxHdENRVUZyUWl4RFFVRkRMRWxCUVdFc1JVRkJSU3hSUVVGM1FqdEpRVU40UlN4TlFVRk5MRTFCUVUwc1IwRkJSeXhKUVVGSkxFTkJRVU1zVFVGQlRTeERRVUZETzBsQlF6TkNMRTFCUVUwc1RVRkJUU3hIUVVGSExHVkJRV1VzUTBGQlF5eE5RVUZOTEVWQlFVVXNUVUZCVFN4RlFVRkZMRU5CUVVNc1EwRkJReXhEUVVGRE8wbEJSV3hFTEV0QlFVc3NTVUZCU1N4RFFVRkRMRWRCUVVjc1EwRkJReXhGUVVGRkxFTkJRVU1zUjBGQlJ5eE5RVUZOTEVWQlFVVXNSVUZCUlN4RFFVRkRMRVZCUVVVN1VVRkRMMElzUzBGQlN5eEpRVUZKTEVOQlFVTXNSMEZCUnl4RFFVRkRMRWRCUVVjc1EwRkJReXhGUVVGRkxFTkJRVU1zUjBGQlJ5eE5RVUZOTEVWQlFVVXNSVUZCUlN4RFFVRkRMRVZCUVVVN1dVRkRia01zVFVGQlRTeERRVUZETEVkQlFWY3NRMEZCUXl4SlFVRkpMRU5CUVVNc1EwRkJReXhEUVVGRExFbEJRVWtzU1VGQlNTeERRVUZETEVsQlFVa3NRMEZCUXl4SlFVRkpMRU5CUVVNc1EwRkJReXhEUVVGRExFbEJRVWtzU1VGQlNTeERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU1zVVVGQlVTeERRVUZETEVsQlFVa3NRMEZCUXl4RFFVRkRMRU5CUVVNc1JVRkJSU3hKUVVGSkxFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXp0WlFVTXhSaXhOUVVGTkxFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRMRWRCUVVjc1RVRkJUU3hEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXl4SFFVRkhMRU5CUVVNc1EwRkJRenRUUVVOcVF6dExRVU5HTzBsQlEwUXNUMEZCVHl4TlFVRk5MRU5CUVVNN1FVRkRhRUlzUTBGQlF6dEJRVVZFT3pzN096czdPMGRCVDBjN1FVRkRTQ3hOUVVGTkxGVkJRVlVzTkVKQlFUUkNMRU5CUVVNc1NVRkJZU3hGUVVGRkxGRkJRWGRDTzBsQlEyeEdMRTFCUVUwc1RVRkJUU3hIUVVGSExFbEJRVWtzUTBGQlF5eE5RVUZOTEVOQlFVTTdTVUZETTBJc1RVRkJUU3hOUVVGTkxFZEJRVWNzWlVGQlpTeERRVUZETEUxQlFVMHNSVUZCUlN4TlFVRk5MRVZCUVVVc1EwRkJReXhEUVVGRExFTkJRVU03U1VGRGJFUXNTVUZCU1N4SFFVRkhMRWRCUVVjc1RVRkJUU3hEUVVGRExGTkJRVk1zUTBGQlF6dEpRVU16UWl4SlFVRkpMRWRCUVVjc1IwRkJSeXhOUVVGTkxFTkJRVU1zVTBGQlV5eERRVUZETzBsQlF6TkNMRXRCUVVzc1NVRkJTU3hEUVVGRExFZEJRVWNzUTBGQlF5eEZRVUZGTEVOQlFVTXNSMEZCUnl4TlFVRk5MRVZCUVVVc1JVRkJSU3hEUVVGRExFVkJRVVU3VVVGREwwSXNTMEZCU3l4SlFVRkpMRU5CUVVNc1IwRkJSeXhEUVVGRExFVkJRVVVzUTBGQlF5eEhRVUZITEUxQlFVMHNSVUZCUlN4RlFVRkZMRU5CUVVNc1JVRkJSVHRaUVVNdlFpeE5RVUZOTEVOQlFVTXNSMEZCVnl4RFFVRkRMRWxCUVVrc1EwRkJReXhEUVVGRExFTkJRVU1zU1VGQlNTeEpRVUZKTEVOQlFVTXNTVUZCU1N4RFFVRkRMRWxCUVVrc1EwRkJReXhEUVVGRExFTkJRVU1zU1VGQlNTeEpRVUZKTEVsQlFVa3NRMEZCUXl4TFFVRkxMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRMRkZCUVZFc1EwRkJReXhKUVVGSkxFTkJRVU1zUTBGQlF5eERRVUZETEVWQlFVVXNTVUZCU1N4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU03V1VGRGNrY3NUVUZCVFN4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF5eEhRVUZITEUxQlFVMHNRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU1zUjBGQlJ5eERRVUZETEVOQlFVTTdXVUZEYUVNc1NVRkJTU3hEUVVGRExFZEJRVWNzUjBGQlJ6dG5Ra0ZCUlN4SFFVRkhMRWRCUVVjc1EwRkJReXhEUVVGRE8xbEJRM0pDTEVsQlFVa3NRMEZCUXl4SFFVRkhMRWRCUVVjN1owSkJRVVVzUjBGQlJ5eEhRVUZITEVOQlFVTXNRMEZCUXp0VFFVTjBRanRMUVVOR08wbEJRMFFzUzBGQlN5eEpRVUZKTEVOQlFVTXNSMEZCUnl4RFFVRkRMRVZCUVVVc1EwRkJReXhIUVVGSExFMUJRVTBzUlVGQlJTeEZRVUZGTEVOQlFVTXNSVUZCUlR0UlFVTXZRaXhMUVVGTExFbEJRVWtzUTBGQlF5eEhRVUZITEVOQlFVTXNSMEZCUnl4RFFVRkRMRVZCUVVVc1EwRkJReXhIUVVGSExFMUJRVTBzUlVGQlJTeEZRVUZGTEVOQlFVTTdXVUZEYWtNc1RVRkJUU3hEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXl4SFFVRkhMRTFCUVUwc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTXNSMEZCUnl4RFFVRkRMRTFCUVUwc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTXNSMEZCUnl4SFFVRkhMRU5CUVVNc1IwRkJSeXhEUVVGRExFZEJRVWNzUjBGQlJ5eEhRVUZITEVOQlFVTXNRMEZCUXp0TFFVTndSVHRKUVVORUxFOUJRVThzVFVGQlRTeERRVUZETzBGQlEyaENMRU5CUVVNN1FVRkZSQ3hyUmtGQmEwWTdRVUZEYkVZc1RVRkJUU3hWUVVGVkxGRkJRVkVzUTBGQlF5eExRVUZoTEVWQlFVVXNSMEZCVnl4RlFVRkZMRmxCUVZrc1IwRkJSeXhMUVVGTE8wbEJRM1pGTEUxQlFVMHNUVUZCVFN4SFFVRkhMRWRCUVVjc1IwRkJSeXhMUVVGTExFZEJRVWNzUTBGQlF5eFpRVUZaTEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTTdTVUZEY0VRc1RVRkJUU3hOUVVGTkxFZEJRVWNzU1VGQlNTeFZRVUZWTEVOQlFVTXNUVUZCVFN4RFFVRkRMRU5CUVVNN1NVRkZkRU1zUzBGQlN5eEpRVUZKTEVOQlFVTXNSMEZCUnl4RFFVRkRMRVZCUVVVc1EwRkJReXhIUVVGSExFMUJRVTBzUlVGQlJTeEZRVUZGTEVOQlFVTTdVVUZETjBJc1RVRkJUU3hEUVVGRExFTkJRVU1zUTBGQlF5eEhRVUZITEV0QlFVc3NSMEZCUnl4RFFVRkRMRU5CUVVNN1NVRkZlRUlzVDBGQlR5eE5RVUZOTEVOQlFVTTdRVUZEYUVJc1EwRkJRenRCUVVWRU96czdPenM3TzBkQlQwYzdRVUZEU0N4TlFVRk5MRlZCUVZVc1QwRkJUeXhEUVVGRExFMUJRV0VzUlVGQlJTeFBRVUZQTEVkQlFVY3NTMEZCU3p0SlFVTndSQ3hOUVVGTkxFMUJRVTBzUjBGQlJ5eFBRVUZQTEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJVU3hGUVVGRkxFTkJRVkVzUlVGQlJTeEZRVUZGTEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRExFZEJRVWNzUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlVTeEZRVUZGTEVOQlFWRXNSVUZCUlN4RlFVRkZMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETEVkQlFVY3NRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU03U1VGRGRrY3NUVUZCVFN4TFFVRkxMRWRCUVVjc1EwRkJReXhEUVVGTkxFVkJRVVVzUTBGQlV5eEZRVUZGTEVWQlFVVXNRMEZCUXl4RFFVRkRMRU5CUVVNc1JVRkJSU3hEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETEhGQ1FVRnhRanRKUVVOc1JTeE5RVUZOTEU5QlFVOHNSMEZCUnl4RFFVRkRMRU5CUVZFc1JVRkJSU3hGUVVGRkxFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNc2JVSkJRVzFDTzBsQlEzWkVMRTFCUVUwc1VVRkJVU3hIUVVGSExFTkJRVU1zUjBGQlZTeEZRVUZGTEVWQlFVVXNRMEZCUXl4SFFVRkhMRU5CUVVNc1IwRkJSeXhEUVVGRExFdEJRVXNzUTBGQlF5eERRVUZETEVsQlFVa3NRMEZCUXl4TlFVRk5MRU5CUVVNc1EwRkJReXhIUVVGSExFTkJRVU1zVDBGQlR5eERRVUZETEVOQlFVTTdTVUZETVVVc1QwRkJUeXhSUVVGUkxFTkJRVU1zVFVGQlRTeERRVUZETEVOQlFVTTdRVUZETVVJc1EwRkJRenRCUVVWRU96czdPenM3TzBkQlQwYzdRVUZEU0N4TlFVRk5MRlZCUVZVc1owSkJRV2RDTEVOQlFVTXNUVUZCWXl4RlFVRkZMRU5CUVZNc1JVRkJSU3hKUVVGM1F6dEpRVU5zUnl4VFFVRlRMRXRCUVVzc1EwRkJReXhOUVVGblF5eEZRVUZGTEU5QlFUaENPMUZCUXpkRkxFbEJRVWtzVVVGQlVTeEhRVUZITEVsQlFVa3NRMEZCUXp0UlFVTndRaXhKUVVGSkxGVkJRVlVzUjBGQlJ5eEpRVUZKTEVOQlFVTTdVVUZGZEVJc1MwRkJTeXhOUVVGTkxFOUJRVThzU1VGQlNTeE5RVUZOTEVWQlFVVTdXVUZETlVJc1RVRkJUU3hqUVVGakxFZEJRVWNzVDBGQlR5eERRVUZETEU5QlFVOHNRMEZCUXl4RFFVRkRPMWxCUTNoRExFbEJRVWtzVlVGQlZTeEpRVUZKTEVsQlFVa3NTVUZCU1N4alFVRmpMRWRCUVVjc1ZVRkJWU3hGUVVGRk8yZENRVU55UkN4UlFVRlJMRWRCUVVjc1QwRkJUeXhEUVVGRE8yZENRVU51UWl4VlFVRlZMRWRCUVVjc1kwRkJZeXhEUVVGRE8yRkJRemRDTzFOQlEwWTdVVUZEUkN4UFFVRlBMRkZCUVZFc1EwRkJRenRKUVVOc1FpeERRVUZETzBsQlJVUXNUVUZCVFN4TlFVRk5MRWRCUVVjc1EwRkJReXhUUVVGVExFTkJRVU1zVFVGQlRTeEhRVUZITEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNN1NVRkRka01zVFVGQlRTeFZRVUZWTEVkQlFVY3NTVUZCU1N4SFFVRkhMRVZCUVVVc1EwRkJRenRKUVVVM1FpeExRVUZMTEVsQlFVa3NRMEZCUXl4SFFVRkhMRU5CUVVNc1JVRkJSU3hEUVVGRExFZEJRVWNzVFVGQlRTeEZRVUZGTEVWQlFVVXNRMEZCUXl4RlFVRkZPMUZCUXk5Q0xFbEJRVWtzUTBGQlF5eE5RVUZOTEVOQlFVTXNVVUZCVVN4RFFVRkRMRU5CUVVNc1EwRkJRenRaUVVOeVFpeFZRVUZWTEVOQlFVTXNSMEZCUnl4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRE8wdEJRM0pDTzBsQlJVUXNUMEZCVHl4TlFVRk5MRU5CUVVNc1RVRkJUU3hIUVVGSExFTkJRVU1zUlVGQlJUdFJRVU40UWl4TlFVRk5MRWRCUVVjc1IwRkJSeXhMUVVGTExFTkJRMllzVlVGQlZTeERRVUZETEUxQlFVMHNSVUZCT0VJc1JVRkRMME1zUTBGQlF5eERRVUZETEVWQlFVVXNSVUZCUlN4RFFVRkRMRWxCUVVrc1EwRkJReXhIUVVGSExFTkJRVU1zUzBGQlN5eERRVUZETEVsQlFVa3NSVUZCUlN4TlFVRk5MRU5CUVVNc1IwRkJSeXhEUVVGRExGVkJRVk1zUjBGQlJ5eEZRVUZGTEV0QlFVczdXVUZEZUVRc1QwRkJUeXhKUVVGSkxFTkJRVU1zUTBGQlF5eEZRVUZGTEVkQlFVY3NRMEZCUXl4RFFVRkRPMUZCUTNSQ0xFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXp0UlFVTlFMRWxCUVVrc1IwRkJSeXhGUVVGRk8xbEJRMUFzVFVGQlRTeERRVUZETEVsQlFVa3NRMEZCUXl4SFFVRkhMRU5CUVVNc1EwRkJRenRaUVVOcVFpeFZRVUZWTEVOQlFVTXNUVUZCVFN4RFFVRkRMRWRCUVVjc1EwRkJReXhEUVVGRE8xTkJRM2hDTzB0QlEwWTdTVUZEUkN4UFFVRlBMRTFCUVUwc1EwRkJRenRCUVVOb1FpeERRVUZETzBGQlJVUTdPenM3TzBkQlMwYzdRVUZEU0N4TlFVRk5MRlZCUVZVc1UwRkJVeXhEUVVGRExFbEJRVms3U1VGRGNFTXNUVUZCVFN4SFFVRkhMRWRCUVVjc1NVRkJTU3hEUVVGRExFMUJRVTBzUTBGQlF6dEpRVU40UWl4SlFVRkpMRWRCUVVjc1IwRkJSeXhEUVVGRExFTkJRVU03U1VGRFdpeEpRVUZKTEZsQlFWa3NSMEZCUnl4RFFVRkRMRU5CUVVNN1NVRkZja0lzUzBGQlN5eEpRVUZKTEVOQlFVTXNSMEZCUnl4RFFVRkRMRVZCUVVVc1EwRkJReXhIUVVGSExFZEJRVWNzUlVGQlJTeEZRVUZGTEVOQlFVTXNSVUZCUlR0UlFVTTFRaXhIUVVGSExFbEJRVWtzU1VGQlNTeERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRPMUZCUTJZc1dVRkJXU3hKUVVGSkxGTkJRVUVzU1VGQlNTeERRVUZETEVOQlFVTXNRMEZCUXl4RlFVRkpMRU5CUVVNc1EwRkJRU3hEUVVGRE8wdEJRemxDTzBsQlJVUXNUVUZCVFN4SlFVRkpMRWRCUVVjc1IwRkJSeXhIUVVGSExFZEJRVWNzUTBGQlF6dEpRVU4yUWl4TlFVRk5MR0ZCUVdFc1IwRkJSeXhIUVVGSExFZEJRVWNzU1VGQlNTeERRVUZETEVsQlFVa3NRMEZCUXl4WlFVRlpMRWRCUVVjc1IwRkJSeXhIUVVGSExGTkJRVUVzU1VGQlNTeEZRVUZKTEVOQlFVTXNRMEZCUVN4RFFVRkRMRU5CUVVNN1NVRkZkRVVzUzBGQlN5eEpRVUZKTEVOQlFVTXNSMEZCUnl4RFFVRkRMRVZCUVVVc1EwRkJReXhIUVVGSExFZEJRVWNzUlVGQlJTeEZRVUZGTEVOQlFVTTdVVUZETVVJc1NVRkJTU3hEUVVGRExFTkJRVU1zUTBGQlF5eEhRVUZITEVOQlFVTXNTVUZCU1N4RFFVRkRMRU5CUVVNc1EwRkJReXhIUVVGSExFbEJRVWtzUTBGQlF5eEhRVUZITEdGQlFXRXNRMEZCUXp0SlFVVTNReXhQUVVGUExFbEJRVWtzUTBGQlF6dEJRVU5rTEVOQlFVTTdRVUZGUkRzN096czdSMEZMUnp0QlFVTklMRTFCUVUwc1ZVRkJWU3hoUVVGaExFTkJRVU1zUTBGQlVTeEZRVUZGTEVOQlFWRTdTVUZET1VNc1RVRkJUU3hKUVVGSkxFZEJRVWNzU1VGQlNTeEhRVUZITEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNN1NVRkRlRUlzVDBGQlR5eExRVUZMTEVOQlFVTXNTVUZCU1N4RFFVRkRMRWxCUVVrc1IwRkJSeXhEUVVGRExFTkJRVU1zUTBGQlF5eE5RVUZOTEVOQlFVTXNRMEZCUXl4RFFVRkRMRVZCUVVVc1JVRkJSU3hEUVVGRExFTkJRVU1zU1VGQlNTeERRVUZETEVkQlFVY3NRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU1zVFVGQlRTeEZRVUZGTEVOQlFVTXNRMEZCUXp0QlFVTnlSU3hEUVVGRElpd2ljMjkxY21ObGMwTnZiblJsYm5RaU9sc2lhVzF3YjNKMElIdE5ZWFJ5YVhnc0lGWmxZM1J2Y2l3Z1EyOXZjbVJwYm1GMFpYTXNJRlpsWTNSdmNuTXNJRVJwYzNSaGJtTmxUV1YwY21samZTQm1jbTl0SUNjdUwzUjVjR1V0WkdWamJHRnlZWFJwYjI1ekp6dGNibWx0Y0c5eWRDQjdjbUZ1Wkc5dFJteHZZWFFzSUhKaGJtUnZiVWx1ZEgwZ1puSnZiU0FuTGk5eVlXNWtiMjBuTzF4dVhHNHZLaXBjYmlBcUlFRnpjMlZ5ZEhNZ1lTQmpiMjVrYVhScGIyNGdZbmtnZEdoeWIzZHBibWNnWVc0Z1JYSnliM0l1WEc0Z0tseHVJQ29nUUdWNGNHOXlkRnh1SUNvZ1FIQmhjbUZ0SUh0aWIyOXNaV0Z1ZlNCYlkyOXVaR2wwYVc5dVBXWmhiSE5sWFNCRGIyNWthWFJwYjI0Z2RHOGdZWE56WlhKMExseHVJQ29nUUhCaGNtRnRJSHR6ZEhKcGJtZDlJRnR0WlhOellXZGxQU2RCYzNObGNuUnBiMjRnWlhKeWIzSXVKMTBnVFdWemMyRm5aU0IwYnlCdmRYUndkWFF1WEc0Z0tpQkFkR2h5YjNkeklIdEZjbkp2Y24xY2JpQXFMMXh1Wlhod2IzSjBJR1oxYm1OMGFXOXVJR0Z6YzJWeWRDaGpiMjVrYVhScGIyNDZJR0p2YjJ4bFlXNGdQU0JtWVd4elpTd2diV1Z6YzJGblpUb2djM1J5YVc1bklEMGdKMEZ6YzJWeWRHbHZiaUJsY25KdmNpNG5LU0I3WEc0Z0lHbG1JQ2doWTI5dVpHbDBhVzl1S1Z4dUlDQWdJSFJvY205M0lHNWxkeUJGY25KdmNpaHRaWE56WVdkbEtUdGNibjFjYmx4dUx5b3FYRzRnS2lCRGNtVmhkR1Z6SUc1bGR5QjBkMjh0WkdsdFpXNXphVzl1WVd3Z1lYSnlZWGtnWVc1a0lHWnBiR3h6SUdsMElIZHBkR2dnZEdobElIWmhiSFZsSUdkcGRtVnVMbHh1SUNwY2JpQXFJRUJ3WVhKaGJTQjdiblZ0WW1WeWZTQmthVzFsYm5OcGIyNHhJRlJvWlNCbWFYSnpkQ0JrYVcxbGJuTnBiMjRnYjJZZ2RHaGxJR052YjNKa2FXNWhkR1Z6SUNodWRXMWlaWElnYjJZZ2NtOTNjeWt1WEc0Z0tpQkFjR0Z5WVcwZ2UyNTFiV0psY24wZ1pHbHRaVzV6YVc5dU1pQlVhR1VnYzJWamIyNWtJR1JwYldWdWMybHZiaUJ2WmlCMGFHVWdZMjl2Y21ScGJtRjBaWE1nS0c1MWJXSmxjaUJ2WmlCamIyeDFiVzV6S1M1Y2JpQXFJRUJ3WVhKaGJTQjdiblZ0WW1WeWZTQmJabWxzYkQwd1hTQkJJSFpoYkhWbElIUnZJR1pwYkd3Z2RHaGxJR052YjNKa2FXNWhkR1Z6SUhkcGRHZ3VYRzRnS2lCQWNtVjBkWEp1SUh0RGIyOXlaR2x1WVhSbGMzMGdRU0IwZDI4dFpHbHRaVzV6YVc5dVlXd2dabWxzYkdWa0lIZHBkR2dnZEdobElIWmhiSFZsSUdkcGRtVnVMbHh1SUNvZ1FIUnZaRzhnVFdsbmFIUWdZbVVnYzJ4dmR5QnphVzVqWlNCMWMyVmtJRUZ5Y21GNUxtMWhjQzRnVUhKdlltRmliSGtnYm1WbFpITWdjR1Z5Wm05eWJXRnVZMlVnY21WMmFYTnBiMjR1WEc0Z0tpOWNibVY0Y0c5eWRDQm1kVzVqZEdsdmJpQnBibWwwUTI5dmNtUnBibUYwWlhNb1pHbHRaVzV6YVc5dU1Ub2diblZ0WW1WeUxDQmthVzFsYm5OcGIyNHlPaUJ1ZFcxaVpYSXNJR1pwYkd3NklHNTFiV0psY2lBOUlEQXBPaUJEYjI5eVpHbHVZWFJsY3lCN1hHNGdJSEpsZEhWeWJpQnVaWGNnUVhKeVlYa29aR2x0Wlc1emFXOXVNU2t1Wm1sc2JDaG1hV3hzS1M1dFlYQW9LQ2tnUFQ0Z0tHNWxkeUJXWldOMGIzSW9aR2x0Wlc1emFXOXVNaWt1Wm1sc2JDaG1hV3hzS1NrcE8xeHVmVnh1WEc0dktpcGNiaUFxSUZSeVlXNXpjRzl6WlNCdFlYUnlhWGd1WEc0Z0tseHVJQ29nUUdWNGNHOXlkRnh1SUNvZ1FIQmhjbUZ0SUh0TllYUnlhWGg5SUcxaGRISnBlQ0JVYUdVZ2JXRjBjbWw0SUhSdklHSmxJSFJ5WVc1emNHOXpaV1F1WEc0Z0tpQkFjbVYwZFhKdUlIdE5ZWFJ5YVhoOUlGUnlZVzV6Y0c5elpXUWdiV0YwY21sNExseHVJQ29nUUhSdlpHOGdUV2xuYUhRZ1ltVWdjMnh2ZHlCemFXNWpaU0IxYzJWa0lFRnljbUY1TG0xaGNDNGdVSEp2WW1GaWJIa2dibVZsWkhNZ2NHVnlabTl5YldGdVkyVWdjbVYyYVhOcGIyNHVYRzRnS2k5Y2JtVjRjRzl5ZENCbWRXNWpkR2x2YmlCMGNtRnVjM0J2YzJWTllYUnlhWGdvYldGMGNtbDRPaUJOWVhSeWFYZ3BPaUJOWVhSeWFYZ2dlMXh1SUNCeVpYUjFjbTRnYm1WM0lFRnljbUY1S0cxaGRISnBlRnN3WFM1c1pXNW5kR2dwTG1acGJHd29NQ2xjYmlBZ0lDQXViV0Z3S0NoZkxDQnBLU0E5UGlBb2JtVjNJRlpsWTNSdmNpaHRZWFJ5YVhndWJHVnVaM1JvS1M1bWFXeHNLREFwTG0xaGNDZ29YeXdnYWlrZ1BUNGdLRzFoZEhKcGVGdHFYVnRwWFNrcEtTazdYRzU5WEc1Y2JpOHFLbHh1SUNvZ1FXUmtjeUIwZDI4Z2RtVmpkRzl5Y3lCM2FYUm9JSFJvWlNCelpXTnZibVFnYjI1bElIUnZJR0psSUcxMWJIUnBjR3hwWldRZ1lua2dkR2hsSUdkcGRtVnVJSEpoZEdsdkxseHVJQ3BjYmlBcUlFQmxlSEJ2Y25SY2JpQXFJRUJ3WVhKaGJTQjdWbVZqZEc5eWZTQndJRlJvWlNCbWFYSnpkQ0IyWldOMGIzSWdkRzhnWVdSa0xseHVJQ29nUUhCaGNtRnRJSHRXWldOMGIzSjlJSEVnVkdobElITmxZMjl1WkNCMlpXTjBiM0lnZEc4Z1lXUmtMbHh1SUNvZ1FIQmhjbUZ0SUh0dWRXMWlaWEo5SUZ0dGRXeDBhWEJzYVdWeVBURmRJRUVnYlhWc2RHbHdiR2xsY2lCMGJ5QmlaU0IxYzJWa0lHSmxabTl5WlNCMGFHVWdjMlZqYjI1a0lIWmxZM1J2Y2lCcGN5QmhaR1JsWkM1Y2JpQXFJRUJ5WlhSMWNtNGdlMVpsWTNSdmNuMGdUbVYzSUhabFkzUnZjaUJqYjI1MFlXbHVaV1FnZEdobElISmxjM1ZzZENCdlppQnZjR1Z5WVhScGIyNGdjQ3R0ZFd4MGFYQnNhV1Z5S25FdVhHNGdLaTljYm1WNGNHOXlkQ0JtZFc1amRHbHZiaUIyWldOMGIzSkJaR1FvY0RvZ1ZtVmpkRzl5TENCeE9pQldaV04wYjNJc0lHMTFiSFJwY0d4cFpYSTZJRzUxYldKbGNpQTlJREVwT2lCV1pXTjBiM0lnZTF4dUlDQmpiMjV6ZENCdVNYUmxiWE1nUFNCd0xteGxibWQwYUR0Y2JseHVJQ0JoYzNObGNuUW9ia2wwWlcxeklEMDlJSEV1YkdWdVozUm9MQ0FuVm1WamRHOXlJR3hsYm1kMGFITWdaRzhnYm05MElHMWhkR05vTGljcE8xeHVYRzRnSUdOdmJuTjBJSFJ2ZEdGc0lEMGdibVYzSUZabFkzUnZjaWh1U1hSbGJYTXBPMXh1WEc0Z0lHWnZjaUFvYkdWMElHa2dQU0F3T3lCcElEd2djQzVzWlc1bmRHZzdJQ3NyYVNsY2JpQWdJQ0IwYjNSaGJGdHBYU0E5SUhCYmFWMGdLeUJ0ZFd4MGFYQnNhV1Z5SUNvZ2NWdHBYVHRjYmx4dUlDQnlaWFIxY200Z2RHOTBZV3c3WEc1OVhHNWNiaThxS2x4dUlDb2dVM1Z0Y3lCMGFHVWdkbVZqZEc5eUozTWdhWFJsYlhNdVhHNGdLbHh1SUNvZ1FIQmhjbUZ0SUh0V1pXTjBiM0o5SUhZZ1ZHaGxJSFpsWTNSdmNpQjBieUJpWlNCemRXMXRaV1F1WEc0Z0tpQkFjbVYwZFhKdUlIdHVkVzFpWlhKOUlGUm9aU0IyWldOMGIzSW5jeUJwZEdWdGN5QnpkVzB1WEc0Z0tpOWNibVoxYm1OMGFXOXVJR2wwWlcxelUzVnRLSFk2SUZabFkzUnZjaWs2SUc1MWJXSmxjaUI3WEc0Z0lHeGxkQ0IwYjNSaGJDQTlJREE3WEc1Y2JpQWdabTl5SUNoc1pYUWdhU0E5SURBN0lHa2dQQ0IyTG14bGJtZDBhRHNnS3l0cEtWeHVJQ0FnSUhSdmRHRnNJQ3M5SUhaYmFWMDdYRzVjYmlBZ2NtVjBkWEp1SUhSdmRHRnNPMXh1ZlZ4dVhHNHZLaXBjYmlBcUlGTjFjV0Z5WlhNZ2RHaGxJSFpsWTNSdmNpZHpJR2wwWlcxekxseHVJQ3BjYmlBcUlFQndZWEpoYlNCN1ZtVmpkRzl5ZlNCMklGUm9aU0IyWldOMGIzSWdkRzhnYzNGMVlYSmxMbHh1SUNvZ1FISmxkSFZ5YmlCN1ZtVmpkRzl5ZlNCQklHNWxkeUIyWldOMGIzSWdZMjl1ZEdGcGJtbHVaeUIwYUdVZ2IzSnBaMmx1WVd3bmN5QnBkR1Z0Y3lCemNYVmhjbVZrTGx4dUlDb3ZYRzVtZFc1amRHbHZiaUIyWldOMGIzSlRjWFZoY21Vb2Rqb2dWbVZqZEc5eUtUb2dWbVZqZEc5eUlIdGNiaUFnWTI5dWMzUWdia2wwWlcxeklEMGdkaTVzWlc1bmRHZzdYRzRnSUdOdmJuTjBJSFJ2ZEdGc0lEMGdibVYzSUZabFkzUnZjaWh1U1hSbGJYTXBPMXh1WEc0Z0lHWnZjaUFvYkdWMElHa2dQU0F3T3lCcElEd2dkaTVzWlc1bmRHZzdJQ3NyYVNsY2JpQWdJQ0IwYjNSaGJGdHBYU0E5SUhaYmFWMGdLaUIyVzJsZE8xeHVYRzRnSUhKbGRIVnliaUIwYjNSaGJEdGNibjFjYmx4dVpYaHdiM0owSUdaMWJtTjBhVzl1SUhabFkzUnZja3hsYm1kMGFDaDJPaUJXWldOMGIzSXBPaUJ1ZFcxaVpYSWdlMXh1SUNCc1pYUWdjM0Z5VTNWdE9pQnVkVzFpWlhJZ1BTQXdPMXh1SUNCbWIzSWdLR3hsZENCcE9pQnVkVzFpWlhJZ1BTQXdPeUJwSUR3Z2RpNXNaVzVuZEdnN0lHa3JLeWxjYmlBZ0lDQnpjWEpUZFcwZ0t6MGdkbHRwWFNBcUlIWmJhVjA3WEc0Z0lISmxkSFZ5YmlCTllYUm9Mbk54Y25Rb2MzRnlVM1Z0S1R0Y2JuMWNibHh1Wlhod2IzSjBJR1oxYm1OMGFXOXVJSFpsWTNSdmNrUnZkRkJ5YjJSMVkzUW9kakU2SUZabFkzUnZjaXdnZGpJNklGWmxZM1J2Y2lrNklHNTFiV0psY2lCN1hHNGdJR2xtSUNoMk1TNXNaVzVuZEdnZ0lUMGdkakl1YkdWdVozUm9LVnh1SUNBZ0lIUm9jbTkzSUc1bGR5QkZjbkp2Y2lnblZHaGxJR1JwYldWdWMybHZibUZzYVhSNUlHOW1JSFJvWlNCMlpXTjBiM0p6SUcxMWMzUWdiV0YwWTJnbktUdGNiaUFnYkdWMElIQnliMlE2SUc1MWJXSmxjaUE5SURBN1hHNGdJR1p2Y2lBb2JHVjBJR2s2SUc1MWJXSmxjaUE5SURBN0lHa2dQQ0IyTVM1c1pXNW5kR2c3SUdrckt5bGNiaUFnSUNCd2NtOWtJQ3M5SUhZeFcybGRJQ29nZGpKYmFWMDdYRzRnSUhKbGRIVnliaUJ3Y205a08xeHVmVnh1WEc0dktpcGNiaUFxSUVOeVpXRjBaWE1nWVNCdFlYUnlhWGdnWm1sc2JHVmtJSGRwZEdnZ2NtRnVaRzl0SUdac2IyRjBhVzVuSUhCdmFXNTBJSFpoYkhWbGN5NWNiaUFxWEc0Z0tpQkFaWGh3YjNKMFhHNGdLaUJBY0dGeVlXMGdlMjUxYldKbGNuMGdaR2x0Wlc1emFXOXVNU0JVYUdVZ1ptbHljM1FnWkdsdFpXNXphVzl1SUc5bUlIUm9aU0J0WVhSeWFYZ3VYRzRnS2lCQWNHRnlZVzBnZTI1MWJXSmxjbjBnWkdsdFpXNXphVzl1TWlCVWFHVWdjMlZqYjI1a0lHUnBiV1Z1YzJsdmJpQnZaaUIwYUdVZ2JXRjBjbWw0TGx4dUlDb2dRSEJoY21GdElIdHVkVzFpWlhKOUlGdHpZMkZzWlQweExsMGdUV0Y0SUhaaGJIVmxJR2RwZG1WdUlHSjVJSEpoYm1SdmJTQm5aVzVsY21GMGIzSXVYRzRnS2lCQWNtVjBkWEp1SUh0TllYUnlhWGg5SUVFZ2JtVjNJRzFoZEhKcGVDQm1hV3hzWldRZ2QybDBhQ0J5WVc1a2IyMGdabXh2WVhScGJtY2djRzlwYm5RZ0lIWmhiSFZsY3k1Y2JpQXFMMXh1Wlhod2IzSjBJR1oxYm1OMGFXOXVJR1pwYkd4U1lXNWtiMjFOWVhSeWFYZ29aR2x0Wlc1emFXOXVNVG9nYm5WdFltVnlMQ0JrYVcxbGJuTnBiMjR5T2lCdWRXMWlaWElzSUhOallXeGxPaUJ1ZFcxaVpYSWdQU0F4TGlrNklFMWhkSEpwZUNCN1hHNGdJR052Ym5OMElHMWhkSEpwZUNBOUlHbHVhWFJEYjI5eVpHbHVZWFJsY3loa2FXMWxibk5wYjI0eExDQmthVzFsYm5OcGIyNHlLVHRjYmx4dUlDQm1iM0lnS0d4bGRDQnBJRDBnTURzZ2FTQThJR1JwYldWdWMybHZiakU3SUNzcmFTa2dlMXh1SUNBZ0lHWnZjaUFvYkdWMElHb2dQU0F3T3lCcUlEd2daR2x0Wlc1emFXOXVNanNnS3l0cUtWeHVJQ0FnSUNBZ2JXRjBjbWw0VzJsZFcycGRJRDBnY21GdVpHOXRSbXh2WVhRb2MyTmhiR1VwTzF4dUlDQjlYRzRnSUhKbGRIVnliaUJ0WVhSeWFYZzdYRzU5WEc1Y2JpOHFLbHh1SUNvZ1EyRnNZM1ZzWVhSbGN5QkZkV05zYVdSbFlXNGdaR2x6ZEdGdVkyVWdZbVYwZDJWbGJpQjBkMjhnZG1WamRHOXljeTVjYmlBcVhHNGdLaUJBWlhod2IzSjBYRzRnS2lCQWNHRnlZVzBnZTFabFkzUnZjbjBnY0NCVWFHVWdabWx5YzNRZ2RtVmpkRzl5TGx4dUlDb2dRSEJoY21GdElIdFdaV04wYjNKOUlIRWdWR2hsSUhObFkyOXVaQ0IyWldOMGIzSXVYRzRnS2lCQWNtVjBkWEp1SUh0dWRXMWlaWEo5SUVWMVkyeHBaR1ZoYmlCa2FYTjBZVzVqWlNCaVpYUjNaV1Z1SUhSb1pTQm5hWFpsYmlCMlpXTjBiM0p6TGx4dUlDb3ZYRzVsZUhCdmNuUWdablZ1WTNScGIyNGdZMkZzWTNWc1lYUmxSWFZqYkdsa1pXRnVSR2x6ZEdGdVkyVW9jRG9nVm1WamRHOXlMQ0J4T2lCV1pXTjBiM0lwT2lCdWRXMWlaWElnZTF4dUlDQnNaWFFnY21WemRXeDBJRDBnTUR0Y2JpQWdZMjl1YzNRZ2JHVnVJRDBnY0M1c1pXNW5kR2c3WEc1Y2JpQWdhV1lnS0d4bGJpQWhQVDBnY1M1c1pXNW5kR2dwWEc0Z0lDQWdkR2h5YjNjZ2JtVjNJRVZ5Y205eUtDZFVhR1VnWkdsdFpXNXphVzl1WVd4cGRIa2diMllnZEdobElIWmxZM1J2Y25NZ2JYVnpkQ0J0WVhSamFDY3BPMXh1SUNCY2JpQWdabTl5SUNoc1pYUWdhU0E5SURBN0lHa2dQQ0JzWlc0N0lDc3JhU2xjYmlBZ0lDQnlaWE4xYkhRZ0t6MGdLSEJiYVYwZ0xTQnhXMmxkS1NBcUtpQXlPMXh1SUNCY2JpQWdjbVYwZFhKdUlFMWhkR2d1YzNGeWRDaHlaWE4xYkhRcE8xeHVmVnh1WEc0dktpcGNiaUFxSUVOeVpXRjBaWE1nWVNCa2FYTjBZVzVqWlNCdFlYUnlhWGdnZFhOcGJtY2dZU0JqZFhOMGIyMGdaR2x6ZEdGdVkyVWdablZ1WTNScGIyNHVYRzRnS2x4dUlDb2dRR1Y0Y0c5eWRGeHVJQ29nUUhCaGNtRnRJSHRXWldOMGIzSnpmU0JrWVhSaElFbHVjSFYwSUhabFkzUnZjbk1nZEc4Z1kyRnNZM1ZzWVhSbElHUnBjM1JoYm1ObGN5NWNiaUFxSUVCd1lYSmhiU0I3UkdsemRHRnVZMlZOWlhSeWFXTjlJR1JwYzNSaGJtTmxJRU4xYzNSdmJTQmthWE4wWVc1alpTQm1kVzVqZEdsdmJpNWNiaUFxSUVCeVpYUjFjbTRnZTAxaGRISnBlSDBnUTJGc1kzVnNZWFJsWkNCamRYTjBiMjBnWkdsemRHRnVZMlVnYldGMGNtbDRMbHh1SUNvdlhHNWxlSEJ2Y25RZ1puVnVZM1JwYjI0Z1kyRnNZMFJwYzNSaGJtTmxUV0YwY21sNEtHUmhkR0U2SUZabFkzUnZjbk1zSUdScGMzUmhibU5sT2lCRWFYTjBZVzVqWlUxbGRISnBZeWs2SUUxaGRISnBlQ0I3WEc0Z0lHTnZibk4wSUc1SmRHVnRjeUE5SUdSaGRHRXViR1Z1WjNSb08xeHVJQ0JqYjI1emRDQnRZWFJ5YVhnZ1BTQnBibWwwUTI5dmNtUnBibUYwWlhNb2JrbDBaVzF6TENCdVNYUmxiWE1zSURBcE8xeHVYRzRnSUdadmNpQW9iR1YwSUdrZ1BTQXdPeUJwSUR3Z2JrbDBaVzF6T3lBcksya3BJSHRjYmlBZ0lDQm1iM0lnS0d4bGRDQnFJRDBnYVNBcklERTdJR29nUENCdVNYUmxiWE03SUNzcmFpa2dlMXh1SUNBZ0lDQWdZMjl1YzNRZ1pEb2diblZ0WW1WeUlEMGdLR1JoZEdGYmFWMGdQVDBnYm5Wc2JDa2dmSHdnS0dSaGRHRmJhbDBnUFQwZ2JuVnNiQ2tnUHlBd0lEb2daR2x6ZEdGdVkyVW9aR0YwWVZ0cFhTd2daR0YwWVZ0cVhTazdYRzRnSUNBZ0lDQnRZWFJ5YVhoYmFWMWJhbDBnUFNCdFlYUnlhWGhiYWwxYmFWMGdQU0JrTzF4dUlDQWdJSDFjYmlBZ2ZWeHVJQ0J5WlhSMWNtNGdiV0YwY21sNE8xeHVmVnh1WEc0dktpcGNiaUFxSUVOeVpXRjBaWE1nWVNCa2FYTjBZVzVqWlNCdFlYUnlhWGdnZFhOcGJtY2dZU0JqZFhOMGIyMGdaR2x6ZEdGdVkyVWdablZ1WTNScGIyNHVYRzRnS2x4dUlDb2dRR1Y0Y0c5eWRGeHVJQ29nUUhCaGNtRnRJSHRXWldOMGIzSnpmU0JrWVhSaElFbHVjSFYwSUhabFkzUnZjbk1nZEc4Z1kyRnNZM1ZzWVhSbElHUnBjM1JoYm1ObGN5NWNiaUFxSUVCd1lYSmhiU0I3UkdsemRHRnVZMlZOWlhSeWFXTjlJR1JwYzNSaGJtTmxJRU4xYzNSdmJTQmthWE4wWVc1alpTQm1kVzVqZEdsdmJpNWNiaUFxSUVCeVpYUjFjbTRnZTAxaGRISnBlSDBnUTJGc1kzVnNZWFJsWkNCamRYTjBiMjBnWkdsemRHRnVZMlVnYldGMGNtbDRMbHh1SUNvdlhHNWxlSEJ2Y25RZ1puVnVZM1JwYjI0Z1kyRnNZMDV2Y20xaGJHbDZaV1JFYVhOMFlXNWpaVTFoZEhKcGVDaGtZWFJoT2lCV1pXTjBiM0p6TENCa2FYTjBZVzVqWlRvZ1JHbHpkR0Z1WTJWTlpYUnlhV01wT2lCTllYUnlhWGdnZTF4dUlDQmpiMjV6ZENCdVNYUmxiWE1nUFNCa1lYUmhMbXhsYm1kMGFEdGNiaUFnWTI5dWMzUWdiV0YwY21sNElEMGdhVzVwZEVOdmIzSmthVzVoZEdWektHNUpkR1Z0Y3l3Z2JrbDBaVzF6TENBd0tUdGNiaUFnYkdWMElHMWhlQ0E5SUU1MWJXSmxjaTVOU1U1ZlZrRk1WVVU3WEc0Z0lHeGxkQ0J0YVc0Z1BTQk9kVzFpWlhJdVRVRllYMVpCVEZWRk8xeHVJQ0JtYjNJZ0tHeGxkQ0JwSUQwZ01Ec2dhU0E4SUc1SmRHVnRjenNnS3l0cEtTQjdYRzRnSUNBZ1ptOXlJQ2hzWlhRZ2FpQTlJR2s3SUdvZ1BDQnVTWFJsYlhNN0lDc3JhaWtnZTF4dUlDQWdJQ0FnWTI5dWMzUWdaRG9nYm5WdFltVnlJRDBnS0dSaGRHRmJhVjBnUFQwZ2JuVnNiQ2tnZkh3Z0tHUmhkR0ZiYWwwZ1BUMGdiblZzYkNCOGZDQnBJRDA5UFNCcUtTQS9JREFnT2lCa2FYTjBZVzVqWlNoa1lYUmhXMmxkTENCa1lYUmhXMnBkS1R0Y2JpQWdJQ0FnSUcxaGRISnBlRnRwWFZ0cVhTQTlJRzFoZEhKcGVGdHFYVnRwWFNBOUlHUTdYRzRnSUNBZ0lDQnBaaUFvWkNBK0lHMWhlQ2tnYldGNElEMGdaRHRjYmlBZ0lDQWdJR2xtSUNoa0lEd2diV2x1S1NCdGFXNGdQU0JrTzF4dUlDQWdJSDFjYmlBZ2ZWeHVJQ0JtYjNJZ0tHeGxkQ0JwSUQwZ01Ec2dhU0E4SUc1SmRHVnRjenNnS3l0cEtTQjdYRzRnSUNBZ1ptOXlJQ2hzWlhRZ2FpQTlJR2tnS3lBeE95QnFJRHdnYmtsMFpXMXpPeUFySzJvcFhHNGdJQ0FnSUNCdFlYUnlhWGhiYVYxYmFsMGdQU0J0WVhSeWFYaGJhbDFiYVYwZ1BTQW9iV0YwY21sNFcybGRXMnBkSUMwZ2JXbHVLU0F2SUNodFlYZ2dMU0J0YVc0cE8xeHVJQ0I5WEc0Z0lISmxkSFZ5YmlCdFlYUnlhWGc3WEc1OVhHNWNiaThxS2lCSFpXNWxjbUYwWlhNZ1lYSnlZWGtnWm5KdmJTQmhJSEpoYm1kbElGdGlaV2RwYmpzZ1pXNWtYU0J2Y2lCYlltVm5hVzQ3SUdWdVpDa2dhV1lnWlc1a1JYaGpiSFZ6YVhabExpQXFLaTljYm1WNGNHOXlkQ0JtZFc1amRHbHZiaUJuWlc1U1lXNW5aU2hpWldkcGJqb2diblZ0WW1WeUxDQmxibVE2SUc1MWJXSmxjaXdnWlc1a1JYaGpiSFZ6YVhabElEMGdabUZzYzJVcE9pQkpiblF6TWtGeWNtRjVJSHRjYmlBZ1kyOXVjM1FnYmtsMFpXMXpJRDBnWlc1a0lDMGdZbVZuYVc0Z0t5QW9aVzVrUlhoamJIVnphWFpsSUQ4Z01DQTZJREVwTzF4dUlDQmpiMjV6ZENCelpYSnBaWE1nUFNCdVpYY2dTVzUwTXpKQmNuSmhlU2h1U1hSbGJYTXBPMXh1WEc0Z0lHWnZjaUFvYkdWMElHa2dQU0F3T3lCcElEd2dia2wwWlcxek95QXJLMmtwWEc0Z0lDQWdjMlZ5YVdWelcybGRJRDBnWW1WbmFXNGdLeUJwTzF4dVhHNGdJSEpsZEhWeWJpQnpaWEpwWlhNN1hHNTlYRzVjYmk4cUtseHVJQ29nVW1WMGRYSnVjeUJ2Y21SbGNpQnZaaUIyWVd4MVpYTWdZWE1nYVdZZ2RHaGxlU0JoY21VZ2MyOXlkR1ZrTGx4dUlDcGNiaUFxSUVCbGVIQnZjblJjYmlBcUlFQndZWEpoYlNCN1lXNTVXMTE5SUhaaGJIVmxjeUJKYm5CMWRDQmhjbkpoZVM1Y2JpQXFJRUJ3WVhKaGJTQjdZbTl2YkdWaGJuMGdXM0psZG1WeWMyVTlabUZzYzJWZElGZG9aWFJvWlhJZ2RHOGdjbVYwZFhKdUlISmxkbVZ5YzJWa0lHOXlaR1Z5TGx4dUlDb2dRSEpsZEhWeWJpQjdiblZ0WW1WeVcxMTlJRlJvWlNCdmNtUmxjaUJqYjIxd2RYUmxaQzVjYmlBcUwxeHVaWGh3YjNKMElHWjFibU4wYVc5dUlHRnlaMU52Y25Rb2RtRnNkV1Z6T2lCaGJubGJYU3dnY21WMlpYSnpaU0E5SUdaaGJITmxLVG9nYm5WdFltVnlXMTBnZTF4dUlDQmpiMjV6ZENCemIzSjBabTRnUFNCeVpYWmxjbk5sSUQ4Z0tHRTZJR0Z1ZVZ0ZExDQmlPaUJoYm5sYlhTa2dQVDRnS0dKYk1GMGdMU0JoV3pCZEtTQTZJQ2hoT2lCaGJubGJYU3dnWWpvZ1lXNTVXMTBwSUQwK0lDaGhXekJkSUMwZ1lsc3dYU2s3WEc0Z0lHTnZibk4wSUdSbFkyOXlJRDBnS0hZNklHRnVlU3dnYVRvZ2JuVnRZbVZ5S1NBOVBpQmJkaXdnYVYwN0lDOHZJSE5sZENCcGJtUmxlQ0IwYnlCMllXeDFaVnh1SUNCamIyNXpkQ0IxYm1SbFkyOXlJRDBnS0dFNklHRnVlVnRkS1NBOVBpQmhXekZkT3lBdkx5QnNaV0YyWlNCdmJteDVJR2x1WkdWNFhHNGdJR052Ym5OMElGOWhjbWR6YjNKMElEMGdLR0Z5Y2pvZ1lXNTVXMTBwSUQwK0lHRnljaTV0WVhBb1pHVmpiM0lwTG5OdmNuUW9jMjl5ZEdadUtTNXRZWEFvZFc1a1pXTnZjaWs3WEc0Z0lISmxkSFZ5YmlCZllYSm5jMjl5ZENoMllXeDFaWE1wTzF4dWZWeHVYRzR2S2lwY2JpQXFJRkpsZEhWeWJuTWdkR2hsSUdsdVpHVjRaWE1nYjJZZ2RHaGxJRzF2YzNRZ1pHbDJaWEp6WlNCdlltcGxZM1J6SUdGalkyOXlaR2x1WnlCMGJ5QjBhR1VnWkdsemRDQm1kVzVqZEdsdmJseHVJQ29nUUhCaGNtRnRJSHR1ZFcxaVpYSjlJR3hsYm1kMGFDQjBiM1JoYkNCdWRXMWlaWElnYjJZZ2IySnFaV04wYzF4dUlDb2dRSEJoY21GdElIdHVkVzFpWlhKOUlHNGdiblZ0WW1WeUlHOW1JR1JwZG1WeWMyVWdaV3hsYldWdWRITWdkRzhnWm1sdVpGeHVJQ29nUUhCaGNtRnRJSHNvYVRFNklHNTFiV0psY2l3Z2FUSTZJRzUxYldKbGNpa2dQVDRnYm5WdFltVnlmU0JrYVhOMElHRWdablZ1WTNScGIyNGdkMmhwWTJnZ1kyRnNZM1ZzWVhSbGN5QmthWE4wWVc1alpTQmlaWFIzWldWdVhHNGdLaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ2RIZHZJRzlpYW1WamRITWdkWE5wYm1jZ2RHaGxhWElnYVc1a1pYaGxjMXh1SUNvZ1FISmxkSFZ5Ym5NZ2UyNTFiV0psY2x0ZGZTQlVhR1VnYVc1a1pYaGxjeUJ2WmlCMGFHVWdiVzl6ZENCa2FYWmxjbk5sSUc5aWFtVmpkSE5jYmlBcUwxeHVaWGh3YjNKMElHWjFibU4wYVc5dUlHZGxkRVJwZG1WeWMyVlRkV0p6WlhRb2JHVnVaM1JvT2lCdWRXMWlaWElzSUc0NklHNTFiV0psY2l3Z1pHbHpkRG9nS0dreE9pQnVkVzFpWlhJc0lHa3lPaUJ1ZFcxaVpYSXBJRDArSUc1MWJXSmxjaWs2SUc1MWJXSmxjbHRkSUh0Y2JpQWdablZ1WTNScGIyNGdiV0Y0UW5rb2RtRnNkV1Z6T2lCSmRHVnlZV0pzWlVsMFpYSmhkRzl5UEc1MWJXSmxjajRzSUc5eVpHVnlRbms2SUNocE9pQnVkVzFpWlhJcElEMCtJRzUxYldKbGNpa2dlMXh1SUNBZ0lHeGxkQ0J0WVhoV1lXeDFaU0E5SUc1MWJHdzdYRzRnSUNBZ2JHVjBJRzFoZUU5eVpHVnlRbmtnUFNCdWRXeHNPMXh1WEc0Z0lDQWdabTl5SUNoamIyNXpkQ0JsYkdWdFpXNTBJRzltSUhaaGJIVmxjeWtnZTF4dUlDQWdJQ0FnWTI5dWMzUWdaV3hsYldWdWRFOXlaR1Z5UW5rZ1BTQnZjbVJsY2tKNUtHVnNaVzFsYm5RcE8xeHVJQ0FnSUNBZ2FXWWdLRzFoZUU5eVpHVnlRbmtnUFQwZ2JuVnNiQ0I4ZkNCbGJHVnRaVzUwVDNKa1pYSkNlU0ErSUcxaGVFOXlaR1Z5UW5rcElIdGNiaUFnSUNBZ0lDQWdiV0Y0Vm1Gc2RXVWdQU0JsYkdWdFpXNTBPMXh1SUNBZ0lDQWdJQ0J0WVhoUGNtUmxja0o1SUQwZ1pXeGxiV1Z1ZEU5eVpHVnlRbms3WEc0Z0lDQWdJQ0I5WEc0Z0lDQWdmVnh1SUNBZ0lISmxkSFZ5YmlCdFlYaFdZV3gxWlR0Y2JpQWdmVnh1WEc0Z0lHTnZibk4wSUhOMVluTmxkQ0E5SUZ0eVlXNWtiMjFKYm5Rb2JHVnVaM1JvSUMwZ01TbGRPMXh1SUNCamIyNXpkQ0JqYjIxd2JHVnRaVzUwSUQwZ2JtVjNJRk5sZENncE8xeHVYRzRnSUdadmNpQW9iR1YwSUdrZ1BTQXdPeUJwSUR3Z2JHVnVaM1JvT3lBcksya3BJSHRjYmlBZ0lDQnBaaUFvSVhOMVluTmxkQzVwYm1Oc2RXUmxjeWhwS1NsY2JpQWdJQ0FnSUdOdmJYQnNaVzFsYm5RdVlXUmtLR2twTzF4dUlDQjlYRzVjYmlBZ2QyaHBiR1VnS0hOMVluTmxkQzVzWlc1bmRHZ2dQQ0J1S1NCN1hHNGdJQ0FnWTI5dWMzUWdhV1I0SUQwZ2JXRjRRbmtvWEc0Z0lDQWdJQ0JqYjIxd2JHVnRaVzUwTG5aaGJIVmxjeWdwSUdGeklFbDBaWEpoWW14bFNYUmxjbUYwYjNJOGJuVnRZbVZ5UGl4Y2JpQWdJQ0FnSUNocEtTQTlQaUJOWVhSb0xtMXBiaTVoY0hCc2VTaE5ZWFJvTENCemRXSnpaWFF1YldGd0tHWjFibU4wYVc5dUtIWmhiQ3dnYVc1a1pYZ3BJSHRjYmlBZ0lDQWdJQ0FnY21WMGRYSnVJR1JwYzNRb2FTd2dkbUZzS1R0Y2JpQWdJQ0FnSUgwcEtTazdYRzRnSUNBZ2FXWWdLR2xrZUNrZ2UxeHVJQ0FnSUNBZ2MzVmljMlYwTG5CMWMyZ29hV1I0S1R0Y2JpQWdJQ0FnSUdOdmJYQnNaVzFsYm5RdVpHVnNaWFJsS0dsa2VDazdYRzRnSUNBZ2ZWeHVJQ0I5WEc0Z0lISmxkSFZ5YmlCemRXSnpaWFE3WEc1OVhHNWNiaThxS2x4dUlDb2dVbVYwZFhKdWN5QnViM0p0WVd4cGVtVmtJSFpsWTNSdmNpNWNiaUFxSUZ4dUlDb2dRR1Y0Y0c5eWRGeHVJQ29nUUhCaGNtRnRJSHRXWldOMGIzSjlJR1JoZEdFZ2JuVnRaWEpwWTJGc0lHRnljbUY1WEc0Z0tpOWNibVY0Y0c5eWRDQm1kVzVqZEdsdmJpQnViM0p0WVd4cGVtVW9aR0YwWVRvZ1ZtVmpkRzl5S1RvZ1ZtVmpkRzl5SUh0Y2JpQWdZMjl1YzNRZ2JHVnVJRDBnWkdGMFlTNXNaVzVuZEdnN1hHNGdJR3hsZENCemRXMGdQU0F3TzF4dUlDQnNaWFFnYzNWdFQyWlRjWFZoY21WeklEMGdNRHRjYmx4dUlDQm1iM0lnS0d4bGRDQnBJRDBnTURzZ2FTQThJR3hsYmpzZ0t5dHBLU0I3WEc0Z0lDQWdjM1Z0SUNzOUlHUmhkR0ZiYVYwN1hHNGdJQ0FnYzNWdFQyWlRjWFZoY21WeklDczlJR1JoZEdGYmFWMGdLaW9nTWp0Y2JpQWdmVnh1WEc0Z0lHTnZibk4wSUcxbFlXNGdQU0J6ZFcwZ0x5QnNaVzQ3WEc0Z0lHTnZibk4wSUhOMFpFUmxka2x1ZG1WeWMyVWdQU0F4TGpBZ0x5Qk5ZWFJvTG5OeGNuUW9jM1Z0VDJaVGNYVmhjbVZ6SUM4Z2JHVnVJQzBnYldWaGJpQXFLaUF5S1R0Y2JseHVJQ0JtYjNJZ0tHeGxkQ0JwSUQwZ01Ec2dhU0E4SUd4bGJqc2dLeXRwS1Z4dUlDQWdJR1JoZEdGYmFWMGdQU0FvWkdGMFlWdHBYU0F0SUcxbFlXNHBJQ29nYzNSa1JHVjJTVzUyWlhKelpUdGNibHh1SUNCeVpYUjFjbTRnWkdGMFlUdGNibjFjYmx4dUx5b3FYRzRnS2lCR2FXNWtjeUJ6WlhRZ1pHbG1abVZ5Wlc1alpTQmlaWFIzWldWdUlIUjNieUJzYVhOMGN5NWNiaUFxSUVCd1lYSmhiU0I3WVc1NVcxMTlJR0VnVkdobElHWnBjbk4wSUd4cGMzUXVYRzRnS2lCQWNHRnlZVzBnZTJGdWVWdGRmU0JpSUZSb1pTQnpaV052Ym1RZ2JHbHpkQzVjYmlBcUlFQnlaWFIxY200Z2UyRnVlVnRkZlZ4dUlDb3ZYRzVsZUhCdmNuUWdablZ1WTNScGIyNGdjMlYwUkdsbVptVnlaVzVqWlNoaE9pQmhibmxiWFN3Z1lqb2dZVzU1VzEwcE9pQmhibmxiWFNCN1hHNGdJR052Ym5OMElHSlRaWFFnUFNCdVpYY2dVMlYwS0dJcE8xeHVJQ0J5WlhSMWNtNGdRWEp5WVhrdVpuSnZiU2h1WlhjZ1UyVjBLR0V1Wm1sc2RHVnlLQ2g0S1NBOVBpQWhZbE5sZEM1b1lYTW9lQ2twS1M1MllXeDFaWE1vS1NrN1hHNTlYRzRpWFgwPSIsImltcG9ydCAqIGFzIGdyb2sgZnJvbSAnZGF0YWdyb2stYXBpL2dyb2snO1xuaW1wb3J0ICogYXMgdWkgZnJvbSAnZGF0YWdyb2stYXBpL3VpJztcbmltcG9ydCB7IGNyZWF0ZU1DTFdvcmtlciB9IGZyb20gJy4vaW5kZXgnO1xuaW1wb3J0IHsgU2NhdHRlclBsb3RDdXJyZW50TGluZVN0eWxlLCBTY2F0dGVyUGxvdExpbmVzUmVuZGVyZXIgfSBmcm9tICdAZGF0YWdyb2stbGlicmFyaWVzL3V0aWxzL3NyYy9yZW5kZXItbGluZXMtb24tc3AnO1xuZXhwb3J0IGFzeW5jIGZ1bmN0aW9uIG1hcmtvdkNsdXN0ZXIoZGYsIGNvbHMsIG1ldHJpY3MsIHdlaWdodHMsIGFnZ3JlZ2F0aW9uTWV0aG9kLCBwcmVwcm9jZXNzaW5nRnVuY3MsIHByZXByb2Nlc3NpbmdGdW5jQXJncywgdGhyZXNob2xkID0gODAsIG1heEl0ZXJhdGlvbnMgPSAxMCwgdXNlV2ViR1BVID0gZmFsc2UpIHtcbiAgICBjb25zdCBzY2F0dGVyUGxvdFByb3BzID0ge1xuICAgICAgICBzaG93WEF4aXM6IGZhbHNlLFxuICAgICAgICBzaG93WUF4aXM6IGZhbHNlLFxuICAgICAgICBzaG93WFNlbGVjdG9yOiBmYWxzZSxcbiAgICAgICAgc2hvd1lTZWxlY3RvcjogZmFsc2UsXG4gICAgfTtcbiAgICBjb25zdCB0diA9IGdyb2suc2hlbGwudGFibGVWaWV3KGRmLm5hbWUpID8/IGdyb2suc2hlbGwuYWRkVGFibGVWaWV3KGRmKTtcbiAgICBjb25zdCBzYyA9IHR2LnNjYXR0ZXJQbG90KHsgLi4uc2NhdHRlclBsb3RQcm9wcywgdGl0bGU6ICdNQ0wnIH0pO1xuICAgIHVpLnNldFVwZGF0ZUluZGljYXRvcihzYy5yb290LCB0cnVlKTtcbiAgICBjb25zdCBkaXN0YW5jZUZuQXJncyA9IFtdO1xuICAgIGNvbnN0IGVuY29kZWRDb2xFbnRyaWVzID0gW107XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBwcmVwcm9jZXNzaW5nRnVuY3MubGVuZ3RoOyArK2kpIHtcbiAgICAgICAgY29uc3QgcGYgPSBwcmVwcm9jZXNzaW5nRnVuY3NbaV07XG4gICAgICAgIGlmIChwZikge1xuICAgICAgICAgICAgY29uc3QgY29sSW5wdXROYW1lID0gcGYuaW5wdXRzWzBdLm5hbWU7XG4gICAgICAgICAgICBjb25zdCBtZXRyaWNJbnB1dE5hbWUgPSBwZi5pbnB1dHNbMV0ubmFtZTtcbiAgICAgICAgICAgIGNvbnN0IHsgZW50cmllcywgb3B0aW9ucyB9ID0gYXdhaXQgcGYuYXBwbHkoeyBbY29sSW5wdXROYW1lXTogY29sc1tpXSwgW21ldHJpY0lucHV0TmFtZV06IG1ldHJpY3NbaV0sXG4gICAgICAgICAgICAgICAgLi4uKHByZXByb2Nlc3NpbmdGdW5jQXJnc1tpXSA/PyB7fSkgfSk7XG4gICAgICAgICAgICBlbmNvZGVkQ29sRW50cmllcy5wdXNoKHsgZW50cmllcywgb3B0aW9ucyB9KTtcbiAgICAgICAgICAgIGRpc3RhbmNlRm5BcmdzLnB1c2gob3B0aW9ucyA/PyB7fSk7XG4gICAgICAgIH1cbiAgICAgICAgZWxzZSB7XG4gICAgICAgICAgICBjb25zdCBlbnRyaWVzID0gY29sc1tpXS50b0xpc3QoKTtcbiAgICAgICAgICAgIGNvbnN0IG9wdGlvbnMgPSB7fTtcbiAgICAgICAgICAgIGVuY29kZWRDb2xFbnRyaWVzLnB1c2goeyBlbnRyaWVzLCBvcHRpb25zIH0pO1xuICAgICAgICAgICAgZGlzdGFuY2VGbkFyZ3MucHVzaChvcHRpb25zKTtcbiAgICAgICAgfVxuICAgIH1cbiAgICBjb25zdCBtY2xXb3JrZXIgPSBjcmVhdGVNQ0xXb3JrZXIoZW5jb2RlZENvbEVudHJpZXMubWFwKChpdCkgPT4gaXQuZW50cmllcyksIHRocmVzaG9sZCwgd2VpZ2h0cywgYWdncmVnYXRpb25NZXRob2QsIG1ldHJpY3MsIGRpc3RhbmNlRm5BcmdzLCBtYXhJdGVyYXRpb25zLCB1c2VXZWJHUFUpO1xuICAgIGNvbnN0IHRlcm1pbmF0ZVN1YiA9IGdyb2suZXZlbnRzLm9uVmlld2VyQ2xvc2VkLnN1YnNjcmliZSgoYXJncykgPT4ge1xuICAgICAgICBpZiAoYXJncy5hcmdzLnZpZXdlcj8ucHJvcHM/LnRpdGxlID09PSBzYy5wcm9wcy50aXRsZSAmJiBzYy50eXBlID09PSBhcmdzLmFyZ3M/LnZpZXdlcj8udHlwZSkge1xuICAgICAgICAgICAgdGVybWluYXRlU3ViLnVuc3Vic2NyaWJlKCk7XG4gICAgICAgICAgICBtY2xXb3JrZXIudGVybWluYXRlKCk7XG4gICAgICAgIH1cbiAgICB9KTtcbiAgICBjb25zdCByZXMgPSBhd2FpdCBtY2xXb3JrZXIucHJvbWlzZTtcbiAgICBpZiAoIXJlcylcbiAgICAgICAgcmV0dXJuO1xuICAgIGNvbnN0IGNsdXN0ZXJDb2xOYW1lID0gZGYuY29sdW1ucy5nZXRVbnVzZWROYW1lKCdDbHVzdGVyIChNQ0wpJyk7XG4gICAgY29uc3QgZW1iZXJkWENvbE5hbWUgPSBkZi5jb2x1bW5zLmdldFVudXNlZE5hbWUoJ0VtYmVkWCAoTUNMKScpO1xuICAgIGNvbnN0IGVtYmVyZFlDb2xOYW1lID0gZGYuY29sdW1ucy5nZXRVbnVzZWROYW1lKCdFbWJlZFkgKE1DTCknKTtcbiAgICBjb25zdCBjbHVzdGVyc0NvdW50ZXIgPSB7fTtcbiAgICByZXMuY2x1c3RlcnMuZm9yRWFjaCgoYykgPT4ge1xuICAgICAgICBpZiAoIWNsdXN0ZXJzQ291bnRlcltjXSlcbiAgICAgICAgICAgIGNsdXN0ZXJzQ291bnRlcltjXSA9IDA7XG4gICAgICAgIGNsdXN0ZXJzQ291bnRlcltjXSsrO1xuICAgIH0pO1xuICAgIGNvbnN0IGNvbm5lY3Rpdml0eSA9IG5ldyBVaW50MzJBcnJheShyZXMuZW1iZWRYLmxlbmd0aCk7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCByZXMuaXMubGVuZ3RoOyBpKyspIHtcbiAgICAgICAgY29ubmVjdGl2aXR5W3Jlcy5pc1tpXV0rKztcbiAgICAgICAgY29ubmVjdGl2aXR5W3Jlcy5qc1tpXV0rKztcbiAgICB9XG4gICAgY29uc3QgY2x1c3RlckNvdW50ZXJDb2xOYW1lID0gZGYuY29sdW1ucy5nZXRVbnVzZWROYW1lKCdDbHVzdGVyIHNpemUgKE1DTCknKTtcbiAgICBjb25zdCBjb25uZWN0aXZpdHlDb2xOYW1lID0gZGYuY29sdW1ucy5nZXRVbnVzZWROYW1lKCdDb25uZWN0aXZpdHkgKE1DTCknKTtcbiAgICBjb25zdCBlbWJlZFhDb2wgPSBkZi5jb2x1bW5zLmFkZE5ld0Zsb2F0KGVtYmVyZFhDb2xOYW1lKTtcbiAgICBlbWJlZFhDb2wuaW5pdCgoaSkgPT4gcmVzLmVtYmVkWFtpXSk7XG4gICAgY29uc3QgZW1iZWRZQ29sID0gZGYuY29sdW1ucy5hZGROZXdGbG9hdChlbWJlcmRZQ29sTmFtZSk7XG4gICAgZW1iZWRZQ29sLmluaXQoKGkpID0+IHJlcy5lbWJlZFlbaV0pO1xuICAgIGNvbnN0IGNsdXN0ZXJDb2wgPSBkZi5jb2x1bW5zLmFkZE5ld1N0cmluZyhjbHVzdGVyQ29sTmFtZSk7XG4gICAgY2x1c3RlckNvbC5pbml0KChpKSA9PiByZXMuY2x1c3RlcnNbaV0udG9TdHJpbmcoKSk7XG4gICAgY29uc3QgY2x1c3RlckNvdW50ZXJDb2wgPSBkZi5jb2x1bW5zLmFkZE5ld0ludChjbHVzdGVyQ291bnRlckNvbE5hbWUpO1xuICAgIGNsdXN0ZXJDb3VudGVyQ29sLmluaXQoKGkpID0+IGNsdXN0ZXJzQ291bnRlcltyZXMuY2x1c3RlcnNbaV1dKTtcbiAgICBjb25zdCBjb25uZWN0aXZpdHlDb2wgPSBkZi5jb2x1bW5zLmFkZE5ld0ludChjb25uZWN0aXZpdHlDb2xOYW1lKTtcbiAgICBjb25uZWN0aXZpdHlDb2wuaW5pdCgoaSkgPT4gY29ubmVjdGl2aXR5W2ldKTtcbiAgICAvLyBkZi5jb2x1bW5zLmFkZE5ld0Zsb2F0KGVtYmVyZFhDb2xOYW1lKS5pbml0KChpKSA9PiByZXMuZW1iZWRYW2ldKTtcbiAgICAvLyBkZi5jb2x1bW5zLmFkZE5ld0Zsb2F0KGVtYmVyZFlDb2xOYW1lKS5pbml0KChpKSA9PiByZXMuZW1iZWRZW2ldKTtcbiAgICAvLyBkZi5jb2x1bW5zLmFkZE5ld0ludChjbHVzdGVyQ291bnRlckNvbE5hbWUpLmluaXQoKGkpID0+IGNsdXN0ZXJzQ291bnRlcltyZXMuY2x1c3RlcnNbaV1dKTtcbiAgICAvLyBkZi5jb2x1bW5zLmFkZE5ld1N0cmluZyhjbHVzdGVyQ29sTmFtZSkuaW5pdCgoaSkgPT4gcmVzLmNsdXN0ZXJzW2ldLnRvU3RyaW5nKCkpO1xuICAgIHNjLnByb3BzLnhDb2x1bW5OYW1lID0gZW1iZXJkWENvbE5hbWU7XG4gICAgc2MucHJvcHMueUNvbHVtbk5hbWUgPSBlbWJlcmRZQ29sTmFtZTtcbiAgICBzYy5wcm9wcy5jb2xvckNvbHVtbk5hbWUgPSBjbHVzdGVyQ29sTmFtZTtcbiAgICBzYy5wcm9wcy5tYXJrZXJEZWZhdWx0U2l6ZSA9IDU7XG4gICAgdGVybWluYXRlU3ViLnVuc3Vic2NyaWJlKCk7XG4gICAgLy8gY29uc3Qgc2MgPSB0di5zY2F0dGVyUGxvdCh7eDogZW1iZXJkWENvbE5hbWUsIHk6IGVtYmVyZFlDb2xOYW1lfSk7XG4gICAgLy8gc2MucHJvcHMuY29sb3JDb2x1bW5OYW1lID0gY2x1c3RlckNvbE5hbWU7XG4gICAgLy8gc2MucHJvcHMubWFya2VyRGVmYXVsdFNpemUgPSA1O1xuICAgIGNvbnN0IF9zY0xpbmVzID0gbmV3IFNjYXR0ZXJQbG90TGluZXNSZW5kZXJlcihzYywgZW1iZXJkWENvbE5hbWUsIGVtYmVyZFlDb2xOYW1lLCB7IGZyb206IHJlcy5pcywgdG86IHJlcy5qcywgZHJhd0Fycm93czogZmFsc2UsIG9wYWNpdHk6IDAuMywgc2tpcE11bHRpTGluZUNhbGN1bGF0aW9uOiB0cnVlIH0sIFNjYXR0ZXJQbG90Q3VycmVudExpbmVTdHlsZS5ub25lKTtcbiAgICB1aS5zZXRVcGRhdGVJbmRpY2F0b3Ioc2Mucm9vdCwgZmFsc2UpO1xuICAgIC8vIHNjLmNsb3NlKCk7XG4gICAgLy8gY29uc3Qgc2NMaW5lc1ZpZXdlciA9IG5ldyBTY2F0dGVyUGxvdFdpdGhMaW5lcyhzYywgcmVzLmlzLCByZXMuanMsIGVtYmVyZFhDb2xOYW1lLCBlbWJlcmRZQ29sTmFtZSk7XG4gICAgLy8gdHYuYWRkVmlld2VyKHNjTGluZXNWaWV3ZXIpO1xuICAgIHJldHVybiB7IHNjLCBlbWJlZFhDb2wsIGVtYmVkWUNvbCwgY2x1c3RlckNvbCwgY2x1c3RlckNvdW50ZXJDb2wsIGNvbm5lY3Rpdml0eUNvbCB9O1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZGF0YTphcHBsaWNhdGlvbi9qc29uO2Jhc2U2NCxleUoyWlhKemFXOXVJam96TENKbWFXeGxJam9pWTJ4MWMzUmxjbWx1WnkxMmFXVjNMbXB6SWl3aWMyOTFjbU5sVW05dmRDSTZJaUlzSW5OdmRYSmpaWE1pT2xzaVkyeDFjM1JsY21sdVp5MTJhV1YzTG5SeklsMHNJbTVoYldWeklqcGJYU3dpYldGd2NHbHVaM01pT2lKQlFVRkJMRTlCUVU4c1MwRkJTeXhKUVVGSkxFMUJRVTBzYlVKQlFXMUNMRU5CUVVNN1FVRkRNVU1zVDBGQlR5eExRVUZMTEVWQlFVVXNUVUZCVFN4cFFrRkJhVUlzUTBGQlF6dEJRVWQwUXl4UFFVRlBMRVZCUVVNc1pVRkJaU3hGUVVGRExFMUJRVTBzVTBGQlV5eERRVUZETzBGQlEzaERMRTlCUVU4c1JVRkJReXd5UWtGQk1rSXNSVUZCUlN4M1FrRkJkMElzUlVGQlF5eE5RVUZOTEd0RVFVRnJSQ3hEUVVGRE8wRkJaMEoyU0N4TlFVRk5MRU5CUVVNc1MwRkJTeXhWUVVGVkxHRkJRV0VzUTBGRGFrTXNSVUZCWjBJc1JVRkJSU3hKUVVGcFFpeEZRVUZGTEU5QlFYVkNMRVZCUXpWRUxFOUJRV2xDTEVWQlFVVXNhVUpCUVRSRExFVkJRVVVzYTBKQlFXdEVMRVZCUTI1SUxIRkNRVUUwUWl4RlFVRkZMRmxCUVc5Q0xFVkJRVVVzUlVGQlJTeG5Ra0ZCZDBJc1JVRkJSU3hGUVVGRkxGbEJRWEZDTEV0QlFVczdTVUZGTlVjc1RVRkJUU3huUWtGQlowSXNSMEZCUnp0UlFVTjJRaXhUUVVGVExFVkJRVVVzUzBGQlN6dFJRVU5vUWl4VFFVRlRMRVZCUVVVc1MwRkJTenRSUVVOb1FpeGhRVUZoTEVWQlFVVXNTMEZCU3p0UlFVTndRaXhoUVVGaExFVkJRVVVzUzBGQlN6dExRVU55UWl4RFFVRkRPMGxCUTBZc1RVRkJUU3hGUVVGRkxFZEJRVWNzU1VGQlNTeERRVUZETEV0QlFVc3NRMEZCUXl4VFFVRlRMRU5CUVVNc1JVRkJSU3hEUVVGRExFbEJRVWtzUTBGQlF5eEpRVUZKTEVsQlFVa3NRMEZCUXl4TFFVRkxMRU5CUVVNc1dVRkJXU3hEUVVGRExFVkJRVVVzUTBGQlF5eERRVUZETzBsQlJYaEZMRTFCUVUwc1JVRkJSU3hIUVVGSExFVkJRVVVzUTBGQlF5eFhRVUZYTEVOQlFVTXNSVUZCUXl4SFFVRkhMR2RDUVVGblFpeEZRVUZGTEV0QlFVc3NSVUZCUlN4TFFVRkxMRVZCUVVNc1EwRkJReXhEUVVGRE8wbEJSUzlFTEVWQlFVVXNRMEZCUXl4clFrRkJhMElzUTBGQlF5eEZRVUZGTEVOQlFVTXNTVUZCU1N4RlFVRkZMRWxCUVVrc1EwRkJReXhEUVVGRE8wbEJRM0pETEUxQlFVMHNZMEZCWXl4SFFVRmpMRVZCUVVVc1EwRkJRenRKUVVOeVF5eE5RVUZOTEdsQ1FVRnBRaXhIUVVGdFF5eEZRVUZGTEVOQlFVTTdTVUZETjBRc1MwRkJTeXhKUVVGSkxFTkJRVU1zUjBGQlJ5eERRVUZETEVWQlFVVXNRMEZCUXl4SFFVRkhMR3RDUVVGclFpeERRVUZETEUxQlFVMHNSVUZCUlN4RlFVRkZMRU5CUVVNc1JVRkJSVHRSUVVOc1JDeE5RVUZOTEVWQlFVVXNSMEZCUnl4clFrRkJhMElzUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXp0UlFVTnFReXhKUVVGSkxFVkJRVVVzUlVGQlJUdFpRVU5PTEUxQlFVMHNXVUZCV1N4SFFVRkhMRVZCUVVVc1EwRkJReXhOUVVGTkxFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTXNTVUZCU1N4RFFVRkRPMWxCUTNaRExFMUJRVTBzWlVGQlpTeEhRVUZITEVWQlFVVXNRMEZCUXl4TlFVRk5MRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU1zU1VGQlNTeERRVUZETzFsQlF6RkRMRTFCUVUwc1JVRkJReXhQUVVGUExFVkJRVVVzVDBGQlR5eEZRVUZETEVkQlEyUXNUVUZCVFN4RlFVRkZMRU5CUVVNc1MwRkJTeXhEUVVGRExFVkJRVU1zUTBGQlF5eFpRVUZaTEVOQlFVTXNSVUZCUlN4SlFVRkpMRU5CUVVNc1EwRkJReXhEUVVGRExFVkJRVVVzUTBGQlF5eGxRVUZsTEVOQlFVTXNSVUZCUlN4UFFVRlBMRU5CUVVNc1EwRkJReXhEUVVGRE8yZENRVU53UlN4SFFVRkhMRU5CUVVNc2NVSkJRWEZDTEVOQlFVTXNRMEZCUXl4RFFVRkRMRWxCUVVrc1JVRkJSU3hEUVVGRExFVkJRVU1zUTBGQlF5eERRVUZETzFsQlEyeEVMR2xDUVVGcFFpeERRVUZETEVsQlFVa3NRMEZCUXl4RlFVRkRMRTlCUVU4c1JVRkJSU3hQUVVGUExFVkJRVU1zUTBGQlF5eERRVUZETzFsQlF6TkRMR05CUVdNc1EwRkJReXhKUVVGSkxFTkJRVU1zVDBGQlR5eEpRVUZKTEVWQlFVVXNRMEZCUXl4RFFVRkRPMU5CUTNCRE8yRkJRVTA3V1VGRFRDeE5RVUZOTEU5QlFVOHNSMEZCUnl4SlFVRkpMRU5CUVVNc1EwRkJReXhEUVVGRExFTkJRVU1zVFVGQlRTeEZRVUZGTEVOQlFVTTdXVUZEYWtNc1RVRkJUU3hQUVVGUExFZEJRVWNzUlVGQlJTeERRVUZETzFsQlEyNUNMR2xDUVVGcFFpeERRVUZETEVsQlFVa3NRMEZCUXl4RlFVRkRMRTlCUVU4c1JVRkJSU3hQUVVGUExFVkJRVU1zUTBGQlF5eERRVUZETzFsQlF6TkRMR05CUVdNc1EwRkJReXhKUVVGSkxFTkJRVU1zVDBGQlR5eERRVUZETEVOQlFVTTdVMEZET1VJN1MwRkRSanRKUVVWRUxFMUJRVTBzVTBGQlV5eEhRVUZITEdWQlFXVXNRMEZCUXl4cFFrRkJhVUlzUTBGQlF5eEhRVUZITEVOQlFVTXNRMEZCUXl4RlFVRkZMRVZCUVVVc1JVRkJSU3hEUVVGRExFVkJRVVVzUTBGQlF5eFBRVUZQTEVOQlFVTXNSVUZEZWtVc1UwRkJVeXhGUVVGRkxFOUJRVThzUlVGQlJTeHBRa0ZCYVVJc1JVRkJSU3hQUVVGUExFVkJRVVVzWTBGQll5eEZRVUZGTEdGQlFXRXNSVUZCUlN4VFFVRlRMRU5CUVVNc1EwRkJRenRKUVVVMVJpeE5RVUZOTEZsQlFWa3NSMEZCUnl4SlFVRkpMRU5CUVVNc1RVRkJUU3hEUVVGRExHTkJRV01zUTBGQlF5eFRRVUZUTEVOQlFVTXNRMEZCUXl4SlFVRkpMRVZCUVVVc1JVRkJSVHRSUVVOcVJTeEpRVUZKTEVsQlFVa3NRMEZCUXl4SlFVRkpMRU5CUVVNc1RVRkJUU3hGUVVGRkxFdEJRVXNzUlVGQlJTeExRVUZMTEV0QlFVc3NSVUZCUlN4RFFVRkRMRXRCUVVzc1EwRkJReXhMUVVGTExFbEJRVWtzUlVGQlJTeERRVUZETEVsQlFVa3NTMEZCU3l4SlFVRkpMRU5CUVVNc1NVRkJTU3hGUVVGRkxFMUJRVTBzUlVGQlJTeEpRVUZKTEVWQlFVVTdXVUZETlVZc1dVRkJXU3hEUVVGRExGZEJRVmNzUlVGQlJTeERRVUZETzFsQlF6TkNMRk5CUVZNc1EwRkJReXhUUVVGVExFVkJRVVVzUTBGQlF6dFRRVU4yUWp0SlFVTklMRU5CUVVNc1EwRkJReXhEUVVGRE8wbEJRMGdzVFVGQlRTeEhRVUZITEVkQlFVY3NUVUZCVFN4VFFVRlRMRU5CUVVNc1QwRkJUeXhEUVVGRE8wbEJRM0JETEVsQlFVa3NRMEZCUXl4SFFVRkhPMUZCUTA0c1QwRkJUenRKUVVOVUxFMUJRVTBzWTBGQll5eEhRVUZITEVWQlFVVXNRMEZCUXl4UFFVRlBMRU5CUVVNc1lVRkJZU3hEUVVGRExHVkJRV1VzUTBGQlF5eERRVUZETzBsQlEycEZMRTFCUVUwc1kwRkJZeXhIUVVGSExFVkJRVVVzUTBGQlF5eFBRVUZQTEVOQlFVTXNZVUZCWVN4RFFVRkRMR05CUVdNc1EwRkJReXhEUVVGRE8wbEJRMmhGTEUxQlFVMHNZMEZCWXl4SFFVRkhMRVZCUVVVc1EwRkJReXhQUVVGUExFTkJRVU1zWVVGQllTeERRVUZETEdOQlFXTXNRMEZCUXl4RFFVRkRPMGxCUTJoRkxFMUJRVTBzWlVGQlpTeEhRVUV3UWl4RlFVRkZMRU5CUVVNN1NVRkRiRVFzUjBGQlJ5eERRVUZETEZGQlFWRXNRMEZCUXl4UFFVRlBMRU5CUVVNc1EwRkJReXhEUVVGRExFVkJRVVVzUlVGQlJUdFJRVU42UWl4SlFVRkpMRU5CUVVNc1pVRkJaU3hEUVVGRExFTkJRVU1zUTBGQlF6dFpRVUZGTEdWQlFXVXNRMEZCUXl4RFFVRkRMRU5CUVVNc1IwRkJSeXhEUVVGRExFTkJRVU03VVVGRGFFUXNaVUZCWlN4RFFVRkRMRU5CUVVNc1EwRkJReXhGUVVGRkxFTkJRVU03U1VGRGRrSXNRMEZCUXl4RFFVRkRMRU5CUVVNN1NVRkRTQ3hOUVVGTkxGbEJRVmtzUjBGQlJ5eEpRVUZKTEZkQlFWY3NRMEZCUXl4SFFVRkhMRU5CUVVNc1RVRkJUU3hEUVVGRExFMUJRVTBzUTBGQlF5eERRVUZETzBsQlEzaEVMRXRCUVVzc1NVRkJTU3hEUVVGRExFZEJRVWNzUTBGQlF5eEZRVUZGTEVOQlFVTXNSMEZCUnl4SFFVRkhMRU5CUVVNc1JVRkJSU3hEUVVGRExFMUJRVTBzUlVGQlJTeERRVUZETEVWQlFVVXNSVUZCUlR0UlFVTjBReXhaUVVGWkxFTkJRVU1zUjBGQlJ5eERRVUZETEVWQlFVVXNRMEZCUXl4RFFVRkRMRU5CUVVNc1EwRkJReXhGUVVGRkxFTkJRVU03VVVGRE1VSXNXVUZCV1N4RFFVRkRMRWRCUVVjc1EwRkJReXhGUVVGRkxFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTXNSVUZCUlN4RFFVRkRPMHRCUXpOQ08wbEJRMFFzVFVGQlRTeHhRa0ZCY1VJc1IwRkJSeXhGUVVGRkxFTkJRVU1zVDBGQlR5eERRVUZETEdGQlFXRXNRMEZCUXl4dlFrRkJiMElzUTBGQlF5eERRVUZETzBsQlF6ZEZMRTFCUVUwc2JVSkJRVzFDTEVkQlFVY3NSVUZCUlN4RFFVRkRMRTlCUVU4c1EwRkJReXhoUVVGaExFTkJRVU1zYjBKQlFXOUNMRU5CUVVNc1EwRkJRenRKUVVVelJTeE5RVUZOTEZOQlFWTXNSMEZCUnl4RlFVRkZMRU5CUVVNc1QwRkJUeXhEUVVGRExGZEJRVmNzUTBGQlF5eGpRVUZqTEVOQlFVTXNRMEZCUXp0SlFVTjZSQ3hUUVVGVExFTkJRVU1zU1VGQlNTeERRVUZETEVOQlFVTXNRMEZCUXl4RlFVRkZMRVZCUVVVc1EwRkJReXhIUVVGSExFTkJRVU1zVFVGQlRTeERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRMRU5CUVVNN1NVRkRja01zVFVGQlRTeFRRVUZUTEVkQlFVY3NSVUZCUlN4RFFVRkRMRTlCUVU4c1EwRkJReXhYUVVGWExFTkJRVU1zWTBGQll5eERRVUZETEVOQlFVTTdTVUZEZWtRc1UwRkJVeXhEUVVGRExFbEJRVWtzUTBGQlF5eERRVUZETEVOQlFVTXNSVUZCUlN4RlFVRkZMRU5CUVVNc1IwRkJSeXhEUVVGRExFMUJRVTBzUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXl4RFFVRkRPMGxCUTNKRExFMUJRVTBzVlVGQlZTeEhRVUZITEVWQlFVVXNRMEZCUXl4UFFVRlBMRU5CUVVNc1dVRkJXU3hEUVVGRExHTkJRV01zUTBGQlF5eERRVUZETzBsQlF6TkVMRlZCUVZVc1EwRkJReXhKUVVGSkxFTkJRVU1zUTBGQlF5eERRVUZETEVWQlFVVXNSVUZCUlN4RFFVRkRMRWRCUVVjc1EwRkJReXhSUVVGUkxFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTXNVVUZCVVN4RlFVRkZMRU5CUVVNc1EwRkJRenRKUVVOdVJDeE5RVUZOTEdsQ1FVRnBRaXhIUVVGSExFVkJRVVVzUTBGQlF5eFBRVUZQTEVOQlFVTXNVMEZCVXl4RFFVRkRMSEZDUVVGeFFpeERRVUZETEVOQlFVTTdTVUZEZEVVc2FVSkJRV2xDTEVOQlFVTXNTVUZCU1N4RFFVRkRMRU5CUVVNc1EwRkJReXhGUVVGRkxFVkJRVVVzUTBGQlF5eGxRVUZsTEVOQlFVTXNSMEZCUnl4RFFVRkRMRkZCUVZFc1EwRkJReXhEUVVGRExFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTTdTVUZEYUVVc1RVRkJUU3hsUVVGbExFZEJRVWNzUlVGQlJTeERRVUZETEU5QlFVOHNRMEZCUXl4VFFVRlRMRU5CUVVNc2JVSkJRVzFDTEVOQlFVTXNRMEZCUXp0SlFVTnNSU3hsUVVGbExFTkJRVU1zU1VGQlNTeERRVUZETEVOQlFVTXNRMEZCUXl4RlFVRkZMRVZCUVVVc1EwRkJReXhaUVVGWkxFTkJRVU1zUTBGQlF5eERRVUZETEVOQlFVTXNRMEZCUXp0SlFVVTNReXh4UlVGQmNVVTdTVUZEY2tVc2NVVkJRWEZGTzBsQlEzSkZMRFpHUVVFMlJqdEpRVU0zUml4dFJrRkJiVVk3U1VGRGJrWXNSVUZCUlN4RFFVRkRMRXRCUVVzc1EwRkJReXhYUVVGWExFZEJRVWNzWTBGQll5eERRVUZETzBsQlEzUkRMRVZCUVVVc1EwRkJReXhMUVVGTExFTkJRVU1zVjBGQlZ5eEhRVUZITEdOQlFXTXNRMEZCUXp0SlFVTjBReXhGUVVGRkxFTkJRVU1zUzBGQlN5eERRVUZETEdWQlFXVXNSMEZCUnl4alFVRmpMRU5CUVVNN1NVRkRNVU1zUlVGQlJTeERRVUZETEV0QlFVc3NRMEZCUXl4cFFrRkJhVUlzUjBGQlJ5eERRVUZETEVOQlFVTTdTVUZETDBJc1dVRkJXU3hEUVVGRExGZEJRVmNzUlVGQlJTeERRVUZETzBsQlF6TkNMSEZGUVVGeFJUdEpRVU55UlN3MlEwRkJOa003U1VGRE4wTXNhME5CUVd0RE8wbEJRMnhETEUxQlFVMHNVVUZCVVN4SFFVRkhMRWxCUVVrc2QwSkJRWGRDTEVOQlFVTXNSVUZCUlN4RlFVRkZMR05CUVdNc1JVRkJSU3hqUVVGakxFVkJRemxGTEVWQlFVTXNTVUZCU1N4RlFVRkZMRWRCUVVjc1EwRkJReXhGUVVGVExFVkJRVVVzUlVGQlJTeEZRVUZGTEVkQlFVY3NRMEZCUXl4RlFVRlRMRVZCUVVVc1ZVRkJWU3hGUVVGRkxFdEJRVXNzUlVGQlJTeFBRVUZQTEVWQlFVVXNSMEZCUnl4RlFVRkZMSGRDUVVGM1FpeEZRVUZGTEVsQlFVa3NSVUZCUXl4RlFVTjZSeXd5UWtGQk1rSXNRMEZCUXl4SlFVRkpMRU5CUVVNc1EwRkJRenRKUVVOd1F5eEZRVUZGTEVOQlFVTXNhMEpCUVd0Q0xFTkJRVU1zUlVGQlJTeERRVUZETEVsQlFVa3NSVUZCUlN4TFFVRkxMRU5CUVVNc1EwRkJRenRKUVVOMFF5eGpRVUZqTzBsQlEyUXNjMGRCUVhOSE8wbEJRM1JITEN0Q1FVRXJRanRKUVVNdlFpeFBRVUZQTEVWQlFVTXNSVUZCUlN4RlFVRkZMRk5CUVZNc1JVRkJSU3hUUVVGVExFVkJRVVVzVlVGQlZTeEZRVUZGTEdsQ1FVRnBRaXhGUVVGRkxHVkJRV1VzUlVGQlF5eERRVUZETzBGQlEzQkdMRU5CUVVNaUxDSnpiM1Z5WTJWelEyOXVkR1Z1ZENJNld5SnBiWEJ2Y25RZ0tpQmhjeUJuY205cklHWnliMjBnSjJSaGRHRm5jbTlyTFdGd2FTOW5jbTlySnp0Y2JtbHRjRzl5ZENBcUlHRnpJSFZwSUdaeWIyMGdKMlJoZEdGbmNtOXJMV0Z3YVM5MWFTYzdYRzVwYlhCdmNuUWdLaUJoY3lCRVJ5Qm1jbTl0SUNka1lYUmhaM0p2YXkxaGNHa3ZaR2NuTzF4dVhHNXBiWEJ2Y25RZ2UyTnlaV0YwWlUxRFRGZHZjbXRsY24wZ1puSnZiU0FuTGk5cGJtUmxlQ2M3WEc1cGJYQnZjblFnZTFOallYUjBaWEpRYkc5MFEzVnljbVZ1ZEV4cGJtVlRkSGxzWlN3Z1UyTmhkSFJsY2xCc2IzUk1hVzVsYzFKbGJtUmxjbVZ5ZlNCbWNtOXRJQ2RBWkdGMFlXZHliMnN0YkdsaWNtRnlhV1Z6TDNWMGFXeHpMM055WXk5eVpXNWtaWEl0YkdsdVpYTXRiMjR0YzNBbk8xeHVhVzF3YjNKMElIdExibTkzYmsxbGRISnBZM045SUdaeWIyMGdKeTR1TDNSNWNHVmtMVzFsZEhKcFkzTW5PMXh1YVcxd2IzSjBJSHRFYVhOMFlXNWpaVUZuWjNKbFoyRjBhVzl1VFdWMGFHOWtmU0JtY205dElDY3VMaTlrYVhOMFlXNWpaUzF0WVhSeWFYZ3ZkSGx3WlhNbk8xeHVhVzF3YjNKMElIdFFjbVZ3Y205alpYTnpSblZ1WTNScGIyNVNaWFIxY201VWVYQmxmU0JtY205dElDY3VMaTltZFc1amRHbHZia1ZrYVhSdmNuTXZaR2x0Wlc1emFXOXVZV3hwZEhrdGNtVmtkV04wYVc5dUxXVmthWFJ2Y2ljN1hHNXBiWEJ2Y25RZ2UwOXdkR2x2Ym5OOUlHWnliMjBnSjBCa1lYUmhaM0p2YXkxc2FXSnlZWEpwWlhNdmRYUnBiSE12YzNKakwzUjVjR1V0WkdWamJHRnlZWFJwYjI1ekp6dGNibHh1WEc1bGVIQnZjblFnZEhsd1pTQk5RMHhEYkhWemRHVnlWbWxsZDJWeVVtVnpkV3gwSUQwZ2UxeHVJQ0J6WXpvZ1JFY3VVMk5oZEhSbGNsQnNiM1JXYVdWM1pYSTdYRzRnSUdWdFltVmtXRU52YkRvZ1JFY3VRMjlzZFcxdU8xeHVJQ0JsYldKbFpGbERiMnc2SUVSSExrTnZiSFZ0Ymp0Y2JpQWdZMngxYzNSbGNrTnZiRG9nUkVjdVEyOXNkVzF1TzF4dUlDQmpiSFZ6ZEdWeVEyOTFiblJsY2tOdmJEb2dSRWN1UTI5c2RXMXVPMXh1SUNCamIyNXVaV04wYVhacGRIbERiMnc2SUVSSExrTnZiSFZ0Ymp0Y2JuMWNibHh1Wlhod2IzSjBJR0Z6ZVc1aklHWjFibU4wYVc5dUlHMWhjbXR2ZGtOc2RYTjBaWElvWEc0Z0lHUm1PaUJFUnk1RVlYUmhSbkpoYldVc0lHTnZiSE02SUVSSExrTnZiSFZ0Ymx0ZExDQnRaWFJ5YVdOek9pQkxibTkzYmsxbGRISnBZM05iWFN4Y2JpQWdkMlZwWjJoMGN6b2diblZ0WW1WeVcxMHNJR0ZuWjNKbFoyRjBhVzl1VFdWMGFHOWtPaUJFYVhOMFlXNWpaVUZuWjNKbFoyRjBhVzl1VFdWMGFHOWtMQ0J3Y21Wd2NtOWpaWE56YVc1blJuVnVZM002SUNoRVJ5NUdkVzVqSUh3Z2JuVnNiQ0I4SUhWdVpHVm1hVzVsWkNsYlhTeGNiaUFnY0hKbGNISnZZMlZ6YzJsdVowWjFibU5CY21kek9pQmhibmxiWFN3Z2RHaHlaWE5vYjJ4a09pQnVkVzFpWlhJZ1BTQTRNQ3dnYldGNFNYUmxjbUYwYVc5dWN6b2diblZ0WW1WeUlEMGdNVEFzSUhWelpWZGxZa2RRVlRvZ1ltOXZiR1ZoYmlBOUlHWmhiSE5sWEc0cE9pQlFjbTl0YVhObFBIVnVaR1ZtYVc1bFpDQjhJRTFEVEVOc2RYTjBaWEpXYVdWM1pYSlNaWE4xYkhRK0lIdGNiaUFnWTI5dWMzUWdjMk5oZEhSbGNsQnNiM1JRY205d2N5QTlJSHRjYmlBZ0lDQnphRzkzV0VGNGFYTTZJR1poYkhObExGeHVJQ0FnSUhOb2IzZFpRWGhwY3pvZ1ptRnNjMlVzWEc0Z0lDQWdjMmh2ZDFoVFpXeGxZM1J2Y2pvZ1ptRnNjMlVzWEc0Z0lDQWdjMmh2ZDFsVFpXeGxZM1J2Y2pvZ1ptRnNjMlVzWEc0Z0lIMDdYRzRnSUdOdmJuTjBJSFIySUQwZ1ozSnZheTV6YUdWc2JDNTBZV0pzWlZacFpYY29aR1l1Ym1GdFpTa2dQejhnWjNKdmF5NXphR1ZzYkM1aFpHUlVZV0pzWlZacFpYY29aR1lwTzF4dVhHNGdJR052Ym5OMElITmpJRDBnZEhZdWMyTmhkSFJsY2xCc2IzUW9leTR1TG5OallYUjBaWEpRYkc5MFVISnZjSE1zSUhScGRHeGxPaUFuVFVOTUozMHBPMXh1WEc0Z0lIVnBMbk5sZEZWd1pHRjBaVWx1WkdsallYUnZjaWh6WXk1eWIyOTBMQ0IwY25WbEtUdGNiaUFnWTI5dWMzUWdaR2x6ZEdGdVkyVkdia0Z5WjNNNklFOXdkR2x2Ym5OYlhTQTlJRnRkTzF4dUlDQmpiMjV6ZENCbGJtTnZaR1ZrUTI5c1JXNTBjbWxsY3pvZ1VISmxjSEp2WTJWemMwWjFibU4wYVc5dVVtVjBkWEp1Vkhsd1pWdGRJRDBnVzEwN1hHNGdJR1p2Y2lBb2JHVjBJR2tnUFNBd095QnBJRHdnY0hKbGNISnZZMlZ6YzJsdVowWjFibU56TG14bGJtZDBhRHNnS3l0cEtTQjdYRzRnSUNBZ1kyOXVjM1FnY0dZZ1BTQndjbVZ3Y205alpYTnphVzVuUm5WdVkzTmJhVjA3WEc0Z0lDQWdhV1lnS0hCbUtTQjdYRzRnSUNBZ0lDQmpiMjV6ZENCamIyeEpibkIxZEU1aGJXVWdQU0J3Wmk1cGJuQjFkSE5iTUYwdWJtRnRaVHRjYmlBZ0lDQWdJR052Ym5OMElHMWxkSEpwWTBsdWNIVjBUbUZ0WlNBOUlIQm1MbWx1Y0hWMGMxc3hYUzV1WVcxbE8xeHVJQ0FnSUNBZ1kyOXVjM1FnZTJWdWRISnBaWE1zSUc5d2RHbHZibk45T2lCUWNtVndjbTlqWlhOelJuVnVZM1JwYjI1U1pYUjFjbTVVZVhCbElEMWNiaUFnSUNBZ0lDQWdJQ0FnSUNBZ0lDQmhkMkZwZENCd1ppNWhjSEJzZVNoN1cyTnZiRWx1Y0hWMFRtRnRaVjA2SUdOdmJITmJhVjBzSUZ0dFpYUnlhV05KYm5CMWRFNWhiV1ZkT2lCdFpYUnlhV056VzJsZExGeHVJQ0FnSUNBZ0lDQWdJQ0FnSUNBZ0lDQWdMaTR1S0hCeVpYQnliMk5sYzNOcGJtZEdkVzVqUVhKbmMxdHBYU0EvUHlCN2ZTbDlLVHRjYmlBZ0lDQWdJR1Z1WTI5a1pXUkRiMnhGYm5SeWFXVnpMbkIxYzJnb2UyVnVkSEpwWlhNc0lHOXdkR2x2Ym5OOUtUdGNiaUFnSUNBZ0lHUnBjM1JoYm1ObFJtNUJjbWR6TG5CMWMyZ29iM0IwYVc5dWN5QS9QeUI3ZlNrN1hHNGdJQ0FnZlNCbGJITmxJSHRjYmlBZ0lDQWdJR052Ym5OMElHVnVkSEpwWlhNZ1BTQmpiMnh6VzJsZExuUnZUR2x6ZENncE8xeHVJQ0FnSUNBZ1kyOXVjM1FnYjNCMGFXOXVjeUE5SUh0OU8xeHVJQ0FnSUNBZ1pXNWpiMlJsWkVOdmJFVnVkSEpwWlhNdWNIVnphQ2g3Wlc1MGNtbGxjeXdnYjNCMGFXOXVjMzBwTzF4dUlDQWdJQ0FnWkdsemRHRnVZMlZHYmtGeVozTXVjSFZ6YUNodmNIUnBiMjV6S1R0Y2JpQWdJQ0I5WEc0Z0lIMWNibHh1SUNCamIyNXpkQ0J0WTJ4WGIzSnJaWElnUFNCamNtVmhkR1ZOUTB4WGIzSnJaWElvWlc1amIyUmxaRU52YkVWdWRISnBaWE11YldGd0tDaHBkQ2tnUFQ0Z2FYUXVaVzUwY21sbGN5a3NYRzRnSUNBZ2RHaHlaWE5vYjJ4a0xDQjNaV2xuYUhSekxDQmhaMmR5WldkaGRHbHZiazFsZEdodlpDd2diV1YwY21samN5d2daR2x6ZEdGdVkyVkdia0Z5WjNNc0lHMWhlRWwwWlhKaGRHbHZibk1zSUhWelpWZGxZa2RRVlNrN1hHNWNiaUFnWTI5dWMzUWdkR1Z5YldsdVlYUmxVM1ZpSUQwZ1ozSnZheTVsZG1WdWRITXViMjVXYVdWM1pYSkRiRzl6WldRdWMzVmljMk55YVdKbEtDaGhjbWR6S1NBOVBpQjdYRzRnSUNBZ2FXWWdLR0Z5WjNNdVlYSm5jeTUyYVdWM1pYSS9MbkJ5YjNCelB5NTBhWFJzWlNBOVBUMGdjMk11Y0hKdmNITXVkR2wwYkdVZ0ppWWdjMk11ZEhsd1pTQTlQVDBnWVhKbmN5NWhjbWR6UHk1MmFXVjNaWEkvTG5SNWNHVXBJSHRjYmlBZ0lDQWdJSFJsY20xcGJtRjBaVk4xWWk1MWJuTjFZbk5qY21saVpTZ3BPMXh1SUNBZ0lDQWdiV05zVjI5eWEyVnlMblJsY20xcGJtRjBaU2dwTzF4dUlDQWdJSDFjYmlBZ2ZTazdYRzRnSUdOdmJuTjBJSEpsY3lBOUlHRjNZV2wwSUcxamJGZHZjbXRsY2k1d2NtOXRhWE5sTzF4dUlDQnBaaUFvSVhKbGN5bGNiaUFnSUNCeVpYUjFjbTQ3WEc0Z0lHTnZibk4wSUdOc2RYTjBaWEpEYjJ4T1lXMWxJRDBnWkdZdVkyOXNkVzF1Y3k1blpYUlZiblZ6WldST1lXMWxLQ2REYkhWemRHVnlJQ2hOUTB3cEp5azdYRzRnSUdOdmJuTjBJR1Z0WW1WeVpGaERiMnhPWVcxbElEMGdaR1l1WTI5c2RXMXVjeTVuWlhSVmJuVnpaV1JPWVcxbEtDZEZiV0psWkZnZ0tFMURUQ2tuS1R0Y2JpQWdZMjl1YzNRZ1pXMWlaWEprV1VOdmJFNWhiV1VnUFNCa1ppNWpiMngxYlc1ekxtZGxkRlZ1ZFhObFpFNWhiV1VvSjBWdFltVmtXU0FvVFVOTUtTY3BPMXh1SUNCamIyNXpkQ0JqYkhWemRHVnljME52ZFc1MFpYSTZJSHRiWHpvZ2JuVnRZbVZ5WFRvZ2JuVnRZbVZ5ZlNBOUlIdDlPMXh1SUNCeVpYTXVZMngxYzNSbGNuTXVabTl5UldGamFDZ29ZeWtnUFQ0Z2UxeHVJQ0FnSUdsbUlDZ2hZMngxYzNSbGNuTkRiM1Z1ZEdWeVcyTmRLU0JqYkhWemRHVnljME52ZFc1MFpYSmJZMTBnUFNBd08xeHVJQ0FnSUdOc2RYTjBaWEp6UTI5MWJuUmxjbHRqWFNzck8xeHVJQ0I5S1R0Y2JpQWdZMjl1YzNRZ1kyOXVibVZqZEdsMmFYUjVJRDBnYm1WM0lGVnBiblF6TWtGeWNtRjVLSEpsY3k1bGJXSmxaRmd1YkdWdVozUm9LVHRjYmlBZ1ptOXlJQ2hzWlhRZ2FTQTlJREE3SUdrZ1BDQnlaWE11YVhNdWJHVnVaM1JvT3lCcEt5c3BJSHRjYmlBZ0lDQmpiMjV1WldOMGFYWnBkSGxiY21WekxtbHpXMmxkWFNzck8xeHVJQ0FnSUdOdmJtNWxZM1JwZG1sMGVWdHlaWE11YW5OYmFWMWRLeXM3WEc0Z0lIMWNiaUFnWTI5dWMzUWdZMngxYzNSbGNrTnZkVzUwWlhKRGIyeE9ZVzFsSUQwZ1pHWXVZMjlzZFcxdWN5NW5aWFJWYm5WelpXUk9ZVzFsS0NkRGJIVnpkR1Z5SUhOcGVtVWdLRTFEVENrbktUdGNiaUFnWTI5dWMzUWdZMjl1Ym1WamRHbDJhWFI1UTI5c1RtRnRaU0E5SUdSbUxtTnZiSFZ0Ym5NdVoyVjBWVzUxYzJWa1RtRnRaU2duUTI5dWJtVmpkR2wyYVhSNUlDaE5RMHdwSnlrN1hHNWNiaUFnWTI5dWMzUWdaVzFpWldSWVEyOXNJRDBnWkdZdVkyOXNkVzF1Y3k1aFpHUk9aWGRHYkc5aGRDaGxiV0psY21SWVEyOXNUbUZ0WlNrN1hHNGdJR1Z0WW1Wa1dFTnZiQzVwYm1sMEtDaHBLU0E5UGlCeVpYTXVaVzFpWldSWVcybGRLVHRjYmlBZ1kyOXVjM1FnWlcxaVpXUlpRMjlzSUQwZ1pHWXVZMjlzZFcxdWN5NWhaR1JPWlhkR2JHOWhkQ2hsYldKbGNtUlpRMjlzVG1GdFpTazdYRzRnSUdWdFltVmtXVU52YkM1cGJtbDBLQ2hwS1NBOVBpQnlaWE11WlcxaVpXUlpXMmxkS1R0Y2JpQWdZMjl1YzNRZ1kyeDFjM1JsY2tOdmJDQTlJR1JtTG1OdmJIVnRibk11WVdSa1RtVjNVM1J5YVc1bktHTnNkWE4wWlhKRGIyeE9ZVzFsS1R0Y2JpQWdZMngxYzNSbGNrTnZiQzVwYm1sMEtDaHBLU0E5UGlCeVpYTXVZMngxYzNSbGNuTmJhVjB1ZEc5VGRISnBibWNvS1NrN1hHNGdJR052Ym5OMElHTnNkWE4wWlhKRGIzVnVkR1Z5UTI5c0lEMGdaR1l1WTI5c2RXMXVjeTVoWkdST1pYZEpiblFvWTJ4MWMzUmxja052ZFc1MFpYSkRiMnhPWVcxbEtUdGNiaUFnWTJ4MWMzUmxja052ZFc1MFpYSkRiMnd1YVc1cGRDZ29hU2tnUFQ0Z1kyeDFjM1JsY25ORGIzVnVkR1Z5VzNKbGN5NWpiSFZ6ZEdWeWMxdHBYVjBwTzF4dUlDQmpiMjV6ZENCamIyNXVaV04wYVhacGRIbERiMndnUFNCa1ppNWpiMngxYlc1ekxtRmtaRTVsZDBsdWRDaGpiMjV1WldOMGFYWnBkSGxEYjJ4T1lXMWxLVHRjYmlBZ1kyOXVibVZqZEdsMmFYUjVRMjlzTG1sdWFYUW9LR2twSUQwK0lHTnZibTVsWTNScGRtbDBlVnRwWFNrN1hHNWNiaUFnTHk4Z1pHWXVZMjlzZFcxdWN5NWhaR1JPWlhkR2JHOWhkQ2hsYldKbGNtUllRMjlzVG1GdFpTa3VhVzVwZENnb2FTa2dQVDRnY21WekxtVnRZbVZrV0Z0cFhTazdYRzRnSUM4dklHUm1MbU52YkhWdGJuTXVZV1JrVG1WM1JteHZZWFFvWlcxaVpYSmtXVU52YkU1aGJXVXBMbWx1YVhRb0tHa3BJRDArSUhKbGN5NWxiV0psWkZsYmFWMHBPMXh1SUNBdkx5QmtaaTVqYjJ4MWJXNXpMbUZrWkU1bGQwbHVkQ2hqYkhWemRHVnlRMjkxYm5SbGNrTnZiRTVoYldVcExtbHVhWFFvS0drcElEMCtJR05zZFhOMFpYSnpRMjkxYm5SbGNsdHlaWE11WTJ4MWMzUmxjbk5iYVYxZEtUdGNiaUFnTHk4Z1pHWXVZMjlzZFcxdWN5NWhaR1JPWlhkVGRISnBibWNvWTJ4MWMzUmxja052YkU1aGJXVXBMbWx1YVhRb0tHa3BJRDArSUhKbGN5NWpiSFZ6ZEdWeWMxdHBYUzUwYjFOMGNtbHVaeWdwS1R0Y2JpQWdjMk11Y0hKdmNITXVlRU52YkhWdGJrNWhiV1VnUFNCbGJXSmxjbVJZUTI5c1RtRnRaVHRjYmlBZ2MyTXVjSEp2Y0hNdWVVTnZiSFZ0Yms1aGJXVWdQU0JsYldKbGNtUlpRMjlzVG1GdFpUdGNiaUFnYzJNdWNISnZjSE11WTI5c2IzSkRiMngxYlc1T1lXMWxJRDBnWTJ4MWMzUmxja052YkU1aGJXVTdYRzRnSUhOakxuQnliM0J6TG0xaGNtdGxja1JsWm1GMWJIUlRhWHBsSUQwZ05UdGNiaUFnZEdWeWJXbHVZWFJsVTNWaUxuVnVjM1ZpYzJOeWFXSmxLQ2s3WEc0Z0lDOHZJR052Ym5OMElITmpJRDBnZEhZdWMyTmhkSFJsY2xCc2IzUW9lM2c2SUdWdFltVnlaRmhEYjJ4T1lXMWxMQ0I1T2lCbGJXSmxjbVJaUTI5c1RtRnRaWDBwTzF4dUlDQXZMeUJ6WXk1d2NtOXdjeTVqYjJ4dmNrTnZiSFZ0Yms1aGJXVWdQU0JqYkhWemRHVnlRMjlzVG1GdFpUdGNiaUFnTHk4Z2MyTXVjSEp2Y0hNdWJXRnlhMlZ5UkdWbVlYVnNkRk5wZW1VZ1BTQTFPMXh1SUNCamIyNXpkQ0JmYzJOTWFXNWxjeUE5SUc1bGR5QlRZMkYwZEdWeVVHeHZkRXhwYm1WelVtVnVaR1Z5WlhJb2MyTXNJR1Z0WW1WeVpGaERiMnhPWVcxbExDQmxiV0psY21SWlEyOXNUbUZ0WlN4Y2JpQWdJQ0I3Wm5KdmJUb2djbVZ6TG1seklHRnpJR0Z1ZVN3Z2RHODZJSEpsY3k1cWN5QmhjeUJoYm5rc0lHUnlZWGRCY25KdmQzTTZJR1poYkhObExDQnZjR0ZqYVhSNU9pQXdMak1zSUhOcmFYQk5kV3gwYVV4cGJtVkRZV3hqZFd4aGRHbHZiam9nZEhKMVpYMHNYRzRnSUNBZ1UyTmhkSFJsY2xCc2IzUkRkWEp5Wlc1MFRHbHVaVk4wZVd4bExtNXZibVVwTzF4dUlDQjFhUzV6WlhSVmNHUmhkR1ZKYm1ScFkyRjBiM0lvYzJNdWNtOXZkQ3dnWm1Gc2MyVXBPMXh1SUNBdkx5QnpZeTVqYkc5elpTZ3BPMXh1SUNBdkx5QmpiMjV6ZENCelkweHBibVZ6Vm1sbGQyVnlJRDBnYm1WM0lGTmpZWFIwWlhKUWJHOTBWMmwwYUV4cGJtVnpLSE5qTENCeVpYTXVhWE1zSUhKbGN5NXFjeXdnWlcxaVpYSmtXRU52YkU1aGJXVXNJR1Z0WW1WeVpGbERiMnhPWVcxbEtUdGNiaUFnTHk4Z2RIWXVZV1JrVm1sbGQyVnlLSE5qVEdsdVpYTldhV1YzWlhJcE8xeHVJQ0J5WlhSMWNtNGdlM05qTENCbGJXSmxaRmhEYjJ3c0lHVnRZbVZrV1VOdmJDd2dZMngxYzNSbGNrTnZiQ3dnWTJ4MWMzUmxja052ZFc1MFpYSkRiMndzSUdOdmJtNWxZM1JwZG1sMGVVTnZiSDA3WEc1OVhHNWNiaUpkZlE9PSIsImV4cG9ydCAqIGZyb20gJy4vbWFyY292LWNsdXN0ZXInO1xuZXhwb3J0ICogZnJvbSAnLi90eXBlcyc7XG5leHBvcnQgZnVuY3Rpb24gY3JlYXRlTUNMV29ya2VyKGRhdGEsIHRocmVzaG9sZCwgd2VpZ2h0cywgYWdncmVnYXRpb25NZXRob2QsIGRpc3RhbmNlRm5zLCBkaXN0YW5jZUZuQXJncywgbWF4SXRlcmF0aW9ucyA9IDEwLCB1c2VXZWJHUFUgPSBmYWxzZSkge1xuICAgIGNvbnN0IHdvcmtlciA9IG5ldyBXb3JrZXIobmV3IFVSTCgnbWNsLXdvcmtlcicsIGltcG9ydC5tZXRhLnVybCkpO1xuICAgIHdvcmtlci5wb3N0TWVzc2FnZSh7IGRhdGEsIHRocmVzaG9sZCwgd2VpZ2h0cywgYWdncmVnYXRpb25NZXRob2QsIGRpc3RhbmNlRm5zLFxuICAgICAgICBkaXN0YW5jZUZuQXJncywgbWF4SXRlcmF0aW9ucywgdXNlV2ViR1BVIH0pO1xuICAgIGxldCByZXNvbHZlRjtcbiAgICBjb25zdCBwcm9taXNlID0gbmV3IFByb21pc2UoKHJlc29sdmUsIHJlamVjdCkgPT4ge1xuICAgICAgICByZXNvbHZlRiA9IHJlc29sdmU7XG4gICAgICAgIHdvcmtlci5vbm1lc3NhZ2UgPSAoZXZlbnQpID0+IHtcbiAgICAgICAgICAgIHNldFRpbWVvdXQoKCkgPT4gd29ya2VyLnRlcm1pbmF0ZSgpLCAxMDApO1xuICAgICAgICAgICAgcmVzb2x2ZShldmVudC5kYXRhLnJlcyk7XG4gICAgICAgIH07XG4gICAgICAgIHdvcmtlci5vbmVycm9yID0gKGV2ZW50KSA9PiB7XG4gICAgICAgICAgICBzZXRUaW1lb3V0KCgpID0+IHdvcmtlci50ZXJtaW5hdGUoKSwgMTAwKTtcbiAgICAgICAgICAgIHJlamVjdChldmVudCk7XG4gICAgICAgIH07XG4gICAgfSk7XG4gICAgY29uc3QgdGVybWluYXRlID0gKCkgPT4ge1xuICAgICAgICB0cnkge1xuICAgICAgICAgICAgcmVzb2x2ZUYobnVsbCk7XG4gICAgICAgICAgICB3b3JrZXIudGVybWluYXRlKCk7XG4gICAgICAgIH1cbiAgICAgICAgY2F0Y2ggKGUpIHtcbiAgICAgICAgICAgIGNvbnNvbGUuZXJyb3IoZSk7XG4gICAgICAgIH1cbiAgICB9O1xuICAgIHJldHVybiB7IHByb21pc2UsIHRlcm1pbmF0ZSB9O1xufVxuLy8jIHNvdXJjZU1hcHBpbmdVUkw9ZGF0YTphcHBsaWNhdGlvbi9qc29uO2Jhc2U2NCxleUoyWlhKemFXOXVJam96TENKbWFXeGxJam9pYVc1a1pYZ3Vhbk1pTENKemIzVnlZMlZTYjI5MElqb2lJaXdpYzI5MWNtTmxjeUk2V3lKcGJtUmxlQzUwY3lKZExDSnVZVzFsY3lJNlcxMHNJbTFoY0hCcGJtZHpJam9pUVVGSFFTeGpRVUZqTEd0Q1FVRnJRaXhEUVVGRE8wRkJRMnBETEdOQlFXTXNVMEZCVXl4RFFVRkRPMEZCUlhoQ0xFMUJRVTBzVlVGQlZTeGxRVUZsTEVOQlFVTXNTVUZCWVN4RlFVRkZMRk5CUVdsQ0xFVkJRemxFTEU5QlFXbENMRVZCUVVVc2FVSkJRVFJETEVWQlF5OUVMRmRCUVRKQ0xFVkJRVVVzWTBGQmNVSXNSVUZCUlN4blFrRkJkMElzUlVGQlJTeEZRVUZGTEZsQlFYRkNMRXRCUVVzN1NVRkRNVWNzVFVGQlRTeE5RVUZOTEVkQlFVY3NTVUZCU1N4TlFVRk5MRU5CUVVNc1NVRkJTU3hIUVVGSExFTkJRVU1zV1VGQldTeEZRVUZGTEUxQlFVMHNRMEZCUXl4SlFVRkpMRU5CUVVNc1IwRkJSeXhEUVVGRExFTkJRVU1zUTBGQlF6dEpRVU5zUlN4TlFVRk5MRU5CUVVNc1YwRkJWeXhEUVVGRExFVkJRVU1zU1VGQlNTeEZRVUZGTEZOQlFWTXNSVUZCUlN4UFFVRlBMRVZCUVVVc2FVSkJRV2xDTEVWQlFVVXNWMEZCVnp0UlFVTXhSU3hqUVVGakxFVkJRVVVzWVVGQllTeEZRVUZGTEZOQlFWTXNSVUZCUXl4RFFVRkRMRU5CUVVNN1NVRkROME1zU1VGQlNTeFJRVUZyUWl4RFFVRkRPMGxCUTNaQ0xFMUJRVTBzVDBGQlR5eEhRVUZITEVsQlFVa3NUMEZCVHl4RFFVZDBRaXhEUVVGRExFOUJRVThzUlVGQlJTeE5RVUZOTEVWQlFVVXNSVUZCUlR0UlFVTnlRaXhSUVVGUkxFZEJRVWNzVDBGQlR5eERRVUZETzFGQlEyNUNMRTFCUVUwc1EwRkJReXhUUVVGVExFZEJRVWNzUTBGQlF5eExRVUZMTEVWQlFVVXNSVUZCUlR0WlFVTXpRaXhWUVVGVkxFTkJRVU1zUjBGQlJ5eEZRVUZGTEVOQlFVTXNUVUZCVFN4RFFVRkRMRk5CUVZNc1JVRkJSU3hGUVVGRkxFZEJRVWNzUTBGQlF5eERRVUZETzFsQlF6RkRMRTlCUVU4c1EwRkJReXhMUVVGTExFTkJRVU1zU1VGQlNTeERRVUZETEVkQlFVY3NRMEZCUXl4RFFVRkRPMUZCUXpGQ0xFTkJRVU1zUTBGQlF6dFJRVU5HTEUxQlFVMHNRMEZCUXl4UFFVRlBMRWRCUVVjc1EwRkJReXhMUVVGTExFVkJRVVVzUlVGQlJUdFpRVU42UWl4VlFVRlZMRU5CUVVNc1IwRkJSeXhGUVVGRkxFTkJRVU1zVFVGQlRTeERRVUZETEZOQlFWTXNSVUZCUlN4RlFVRkZMRWRCUVVjc1EwRkJReXhEUVVGRE8xbEJRekZETEUxQlFVMHNRMEZCUXl4TFFVRkxMRU5CUVVNc1EwRkJRenRSUVVOb1FpeERRVUZETEVOQlFVTTdTVUZEU2l4RFFVRkRMRU5CUVVNc1EwRkJRenRKUVVOTUxFMUJRVTBzVTBGQlV5eEhRVUZITEVkQlFVY3NSVUZCUlR0UlFVTnlRaXhKUVVGSk8xbEJRMFlzVVVGQlVTeERRVUZETEVsQlFVa3NRMEZCUXl4RFFVRkRPMWxCUTJZc1RVRkJUU3hEUVVGRExGTkJRVk1zUlVGQlJTeERRVUZETzFOQlEzQkNPMUZCUVVNc1QwRkJUeXhEUVVGRExFVkJRVVU3V1VGRFZpeFBRVUZQTEVOQlFVTXNTMEZCU3l4RFFVRkRMRU5CUVVNc1EwRkJReXhEUVVGRE8xTkJRMnhDTzBsQlEwZ3NRMEZCUXl4RFFVRkRPMGxCUTBZc1QwRkJUeXhGUVVGRExFOUJRVThzUlVGQlJTeFRRVUZUTEVWQlFVTXNRMEZCUXp0QlFVTTVRaXhEUVVGRElpd2ljMjkxY21ObGMwTnZiblJsYm5RaU9sc2lhVzF3YjNKMElIdEVhWE4wWVc1alpVRm5aM0psWjJGMGFXOXVUV1YwYUc5a2ZTQm1jbTl0SUNjdUxpOWthWE4wWVc1alpTMXRZWFJ5YVhndmRIbHdaWE1uTzF4dWFXMXdiM0owSUh0TGJtOTNiazFsZEhKcFkzTjlJR1p5YjIwZ0p5NHVMM1I1Y0dWa0xXMWxkSEpwWTNNbk8xeHVYRzVsZUhCdmNuUWdLaUJtY205dElDY3VMMjFoY21OdmRpMWpiSFZ6ZEdWeUp6dGNibVY0Y0c5eWRDQXFJR1p5YjIwZ0p5NHZkSGx3WlhNbk8xeHVYRzVsZUhCdmNuUWdablZ1WTNScGIyNGdZM0psWVhSbFRVTk1WMjl5YTJWeUtHUmhkR0U2SUdGdWVWdGRXMTBzSUhSb2NtVnphRzlzWkRvZ2JuVnRZbVZ5TEZ4dUlDQjNaV2xuYUhSek9pQnVkVzFpWlhKYlhTd2dZV2RuY21WbllYUnBiMjVOWlhSb2IyUTZJRVJwYzNSaGJtTmxRV2RuY21WbllYUnBiMjVOWlhSb2IyUXNYRzRnSUdScGMzUmhibU5sUm01ek9pQkxibTkzYmsxbGRISnBZM05iWFN3Z1pHbHpkR0Z1WTJWR2JrRnlaM002SUdGdWVWdGRMQ0J0WVhoSmRHVnlZWFJwYjI1ek9pQnVkVzFpWlhJZ1BTQXhNQ3dnZFhObFYyVmlSMUJWT2lCaWIyOXNaV0Z1SUQwZ1ptRnNjMlVwSUh0Y2JpQWdZMjl1YzNRZ2QyOXlhMlZ5SUQwZ2JtVjNJRmR2Y210bGNpaHVaWGNnVlZKTUtDZHRZMnd0ZDI5eWEyVnlKeXdnYVcxd2IzSjBMbTFsZEdFdWRYSnNLU2s3WEc0Z0lIZHZjbXRsY2k1d2IzTjBUV1Z6YzJGblpTaDdaR0YwWVN3Z2RHaHlaWE5vYjJ4a0xDQjNaV2xuYUhSekxDQmhaMmR5WldkaGRHbHZiazFsZEdodlpDd2daR2x6ZEdGdVkyVkdibk1zWEc0Z0lDQWdaR2x6ZEdGdVkyVkdia0Z5WjNNc0lHMWhlRWwwWlhKaGRHbHZibk1zSUhWelpWZGxZa2RRVlgwcE8xeHVJQ0JzWlhRZ2NtVnpiMngyWlVZNklFWjFibU4wYVc5dU8xeHVJQ0JqYjI1emRDQndjbTl0YVhObElEMGdibVYzSUZCeWIyMXBjMlU4ZTF4dUlDQWdJR05zZFhOMFpYSnpPaUJ1ZFcxaVpYSmJYU3dnWlcxaVpXUllPaUJHYkc5aGRETXlRWEp5WVhrc0lHVnRZbVZrV1RvZ1JteHZZWFF6TWtGeWNtRjVMRnh1SUNBZ0lDQnBjem9nVldsdWRETXlRWEp5WVhrc0lHcHpPaUJWYVc1ME16SkJjbkpoZVZ4dUlDQWdJSDArS0NoeVpYTnZiSFpsTENCeVpXcGxZM1FwSUQwK0lIdGNiaUFnSUNBZ0lISmxjMjlzZG1WR0lEMGdjbVZ6YjJ4MlpUdGNiaUFnSUNBZ0lIZHZjbXRsY2k1dmJtMWxjM05oWjJVZ1BTQW9aWFpsYm5RcElEMCtJSHRjYmlBZ0lDQWdJQ0FnYzJWMFZHbHRaVzkxZENnb0tTQTlQaUIzYjNKclpYSXVkR1Z5YldsdVlYUmxLQ2tzSURFd01DazdYRzRnSUNBZ0lDQWdJSEpsYzI5c2RtVW9aWFpsYm5RdVpHRjBZUzV5WlhNcE8xeHVJQ0FnSUNBZ2ZUdGNiaUFnSUNBZ0lIZHZjbXRsY2k1dmJtVnljbTl5SUQwZ0tHVjJaVzUwS1NBOVBpQjdYRzRnSUNBZ0lDQWdJSE5sZEZScGJXVnZkWFFvS0NrZ1BUNGdkMjl5YTJWeUxuUmxjbTFwYm1GMFpTZ3BMQ0F4TURBcE8xeHVJQ0FnSUNBZ0lDQnlaV3BsWTNRb1pYWmxiblFwTzF4dUlDQWdJQ0FnZlR0Y2JpQWdJQ0I5S1R0Y2JpQWdZMjl1YzNRZ2RHVnliV2x1WVhSbElEMGdLQ2tnUFQ0Z2UxeHVJQ0FnSUhSeWVTQjdYRzRnSUNBZ0lDQnlaWE52YkhabFJpaHVkV3hzS1R0Y2JpQWdJQ0FnSUhkdmNtdGxjaTUwWlhKdGFXNWhkR1VvS1R0Y2JpQWdJQ0I5SUdOaGRHTm9JQ2hsS1NCN1hHNGdJQ0FnSUNCamIyNXpiMnhsTG1WeWNtOXlLR1VwTzF4dUlDQWdJSDFjYmlBZ2ZUdGNiaUFnY21WMGRYSnVJSHR3Y205dGFYTmxMQ0IwWlhKdGFXNWhkR1Y5TzF4dWZWeHVJbDE5Il0sIm5hbWVzIjpbIl9zY3JpcHREaXIiLCJleHBvcnRDcHBEYnNjYW5MaWIiLCJkb2N1bWVudCIsImN1cnJlbnRTY3JpcHQiLCJzcmMiLCJ1bmRlZmluZWQiLCJyZWFkeVByb21pc2VSZXNvbHZlIiwicmVhZHlQcm9taXNlUmVqZWN0IiwiTW9kdWxlIiwiUHJvbWlzZSIsInJlc29sdmUiLCJyZWplY3QiLCJyZWFkQmluYXJ5IiwibW9kdWxlT3ZlcnJpZGVzIiwiT2JqZWN0IiwiYXNzaWduIiwiRU5WSVJPTk1FTlRfSVNfV0VCIiwid2luZG93IiwiRU5WSVJPTk1FTlRfSVNfV09SS0VSIiwiaW1wb3J0U2NyaXB0cyIsInNjcmlwdERpcmVjdG9yeSIsInByb2Nlc3MiLCJ2ZXJzaW9ucyIsIm5vZGUiLCJzZWxmIiwibG9jYXRpb24iLCJocmVmIiwiaW5kZXhPZiIsInN1YnN0ciIsInJlcGxhY2UiLCJsYXN0SW5kZXhPZiIsInVybCIsInhociIsIlhNTEh0dHBSZXF1ZXN0Iiwib3BlbiIsInJlc3BvbnNlVHlwZSIsInNlbmQiLCJVaW50OEFycmF5IiwiY29uc29sZSIsImxvZyIsImJpbmQiLCJ3YXNtQmluYXJ5Iiwid2FzbU1lbW9yeSIsImVyciIsIndhcm4iLCJXZWJBc3NlbWJseSIsImFib3J0IiwiSEVBUDgiLCJIRUFQVTgiLCJIRUFQVTMyIiwiQUJPUlQiLCJ1cGRhdGVNZW1vcnlWaWV3cyIsImIiLCJidWZmZXIiLCJJbnQ4QXJyYXkiLCJJbnQxNkFycmF5IiwiSW50MzJBcnJheSIsIlVpbnQxNkFycmF5IiwiVWludDMyQXJyYXkiLCJGbG9hdDMyQXJyYXkiLCJGbG9hdDY0QXJyYXkiLCJfX0FUUFJFUlVOX18iLCJfX0FUSU5JVF9fIiwiX19BVFBPU1RSVU5fXyIsInJ1bkRlcGVuZGVuY2llcyIsInJ1bkRlcGVuZGVuY3lXYXRjaGVyIiwiZGVwZW5kZW5jaWVzRnVsZmlsbGVkIiwid2hhdCIsImUiLCJSdW50aW1lRXJyb3IiLCJ3YXNtQmluYXJ5RmlsZSIsInBhdGgiLCJpc0RhdGFVUkkiLCJmaWxlbmFtZSIsInN0YXJ0c1dpdGgiLCJnZXRCaW5hcnkiLCJmaWxlIiwiaW5zdGFudGlhdGVBcnJheUJ1ZmZlciIsImJpbmFyeUZpbGUiLCJpbXBvcnRzIiwicmVjZWl2ZXIiLCJmZXRjaCIsInRoZW4iLCJjcmVkZW50aWFscyIsInJlc3BvbnNlIiwiY2F0Y2giLCJnZXRCaW5hcnlQcm9taXNlIiwiYmluYXJ5IiwiaW5zdGFudGlhdGUiLCJpbnN0YW5jZSIsInJlYXNvbiIsImNhbGxSdW50aW1lQ2FsbGJhY2tzIiwiY2FsbGJhY2tzIiwibGVuZ3RoIiwic2hpZnQiLCJFeGNlcHRpb25JbmZvIiwiZXhjUHRyIiwidGhpcyIsInB0ciIsInNldF90eXBlIiwidHlwZSIsImdldF90eXBlIiwic2V0X2Rlc3RydWN0b3IiLCJkZXN0cnVjdG9yIiwiZ2V0X2Rlc3RydWN0b3IiLCJzZXRfY2F1Z2h0IiwiY2F1Z2h0IiwiZ2V0X2NhdWdodCIsInNldF9yZXRocm93biIsInJldGhyb3duIiwiZ2V0X3JldGhyb3duIiwiaW5pdCIsInNldF9hZGp1c3RlZF9wdHIiLCJhZGp1c3RlZFB0ciIsImdldF9hZGp1c3RlZF9wdHIiLCJnZXRfZXhjZXB0aW9uX3B0ciIsIl9fX2N4YV9pc19wb2ludGVyX3R5cGUiLCJhZGp1c3RlZCIsImVtc2NyaXB0ZW5fcmVhbGxvY19idWZmZXIiLCJzaXplIiwiZ3JvdyIsImJ5dGVMZW5ndGgiLCJnZXRDRnVuYyIsImlkZW50IiwiVVRGOERlY29kZXIiLCJUZXh0RGVjb2RlciIsImNjYWxsIiwicmV0dXJuVHlwZSIsImFyZ1R5cGVzIiwiYXJncyIsIm9wdHMiLCJ0b0MiLCJzdHIiLCJyZXQiLCJsZW4iLCJpIiwiYyIsImNoYXJDb2RlQXQiLCJsZW5ndGhCeXRlc1VURjgiLCJzdGFja0FsbG9jIiwib3V0UHRyIiwibWF4Qnl0ZXNUb1dyaXRlIiwiaGVhcCIsIm91dElkeCIsImVuZElkeCIsInUiLCJzdHJpbmdUb1VURjhBcnJheSIsInN0cmluZ1RvVVRGOCIsInN0cmluZ1RvVVRGOE9uU3RhY2siLCJhcnIiLCJhcnJheSIsInNldCIsImZ1bmMiLCJjQXJncyIsInN0YWNrIiwiY29udmVydGVyIiwic3RhY2tTYXZlIiwiYXBwbHkiLCJzdGFja1Jlc3RvcmUiLCJoZWFwT3JBcnJheSIsImlkeCIsIm1heEJ5dGVzVG9SZWFkIiwiZW5kUHRyIiwiZGVjb2RlIiwic3ViYXJyYXkiLCJ1MCIsInUxIiwidTIiLCJTdHJpbmciLCJmcm9tQ2hhckNvZGUiLCJjaCIsIlVURjhBcnJheVRvU3RyaW5nIiwiQm9vbGVhbiIsImNvbnZlcnRSZXR1cm5WYWx1ZSIsIm9uRG9uZSIsImNhbGxlZFJ1biIsIndhc21JbXBvcnRzIiwiZGVzdCIsIm51bSIsImNvcHlXaXRoaW4iLCJyZXF1ZXN0ZWRTaXplIiwieCIsIm9sZFNpemUiLCJtYXhIZWFwU2l6ZSIsImN1dERvd24iLCJvdmVyR3Jvd25IZWFwU2l6ZSIsIk1hdGgiLCJtaW4iLCJtYXgiLCJjYWxsYmFjayIsImluZm8iLCJyZWNlaXZlSW5zdGFuY2UiLCJtb2R1bGUiLCJjYiIsImV4cG9ydHMiLCJ1bnNoaWZ0IiwiaWQiLCJjbGVhckludGVydmFsIiwicmVtb3ZlUnVuRGVwZW5kZW5jeSIsInJlc3VsdCIsImluc3RhbnRpYXRlU3RyZWFtaW5nIiwiY3JlYXRlV2FzbSIsImFyZ3VtZW50cyIsInJ1biIsImRvUnVuIiwicG9zdFJ1biIsInByZVJ1biIsInNldFRpbWVvdXQiLCJudW1lcmljQXJncyIsImV2ZXJ5IiwicnVuQ2FsbGVyIiwicG9wIiwicmVhZHkiLCJkZWZpbmUiLCJfX19DU1NfTE9BREVSX0VYUE9SVF9fXyIsInB1c2giLCJjc3NXaXRoTWFwcGluZ1RvU3RyaW5nIiwibGlzdCIsInRvU3RyaW5nIiwibWFwIiwiaXRlbSIsImNvbnRlbnQiLCJuZWVkTGF5ZXIiLCJjb25jYXQiLCJqb2luIiwibW9kdWxlcyIsIm1lZGlhIiwiZGVkdXBlIiwic3VwcG9ydHMiLCJsYXllciIsImFscmVhZHlJbXBvcnRlZE1vZHVsZXMiLCJrIiwiX2siLCJjc3NNYXBwaW5nIiwiYnRvYSIsImJhc2U2NCIsInVuZXNjYXBlIiwiZW5jb2RlVVJJQ29tcG9uZW50IiwiSlNPTiIsInN0cmluZ2lmeSIsImRhdGEiLCJzb3VyY2VNYXBwaW5nIiwialN0YXQiLCJBcnJheSIsInByb3RvdHlwZSIsInNsaWNlIiwiY2FsY1JkeCIsIm4iLCJtIiwidmFsIiwicG93IiwiTE9HMTBFIiwiaXNBcnJheSIsImFyZyIsImNhbGwiLCJpc0Z1bmN0aW9uIiwiaXNOdW1iZXIiLCJfaW5pdCIsInJldFplcm8iLCJyZXRPbmUiLCJyZXRJZGVudCIsImoiLCJmbiIsInNlcSIsInRvQXJyYXkiLCJjb25zdHJ1Y3RvciIsInV0aWxzIiwidG9WZWN0b3IiLCJfcmFuZG9tX2ZuIiwicmFuZG9tIiwic2V0UmFuZG9tIiwiVHlwZUVycm9yIiwiZXh0ZW5kIiwib2JqIiwicm93cyIsImNvbHMiLCJkaW1lbnNpb25zIiwicm93IiwiaW5kZXgiLCJyb3dhIiwiY29sIiwic3VibWF0IiwiYXJhbmdlIiwiZm9yRWFjaCIsImluZCIsImNvbHVtbiIsImNvbGEiLCJhIiwiZGlhZyIsIm5yb3ciLCJyZXMiLCJhbnRpZGlhZyIsInRyYW5zcG9zZSIsIm9iakFyciIsInRvQWx0ZXIiLCJuY29sIiwiY3VtcmVkdWNlIiwiYWx0ZXIiLCJjcmVhdGUiLCJ6ZXJvcyIsIm9uZXMiLCJyYW5kIiwiaWRlbnRpdHkiLCJzeW1tZXRyaWMiLCJjbGVhciIsImNudCIsImhpdmFsIiwic3RlcCIsImN1cnJlbnQiLCJzdGFydCIsImVuZCIsInJsIiwiX3NsaWNlIiwiY29weSIsInJjU2xpY2UiLCJjb2xTbGljZSIsInJvd1NsaWNlIiwic2xpY2VBc3NpZ24iLCJBIiwiQiIsIm5sIiwibWwiLCJkaWFnb25hbCIsImRpYWdBcnJheSIsIm1hdCIsInQiLCJqUHJvdG8iLCJzb3J0Iiwic3BsaWNlIiwiZnVuY3MiLCJwYXNzZnVuYyIsInJlc3VsdHMiLCJzcGxpdCIsImFzY051bSIsImNsaXAiLCJzdW0iLCJzdW1zcXJkIiwic3Vtc3FlcnIiLCJ0bXAiLCJtZWFuIiwic3Vtcm93IiwicHJvZHVjdCIsInByb2QiLCJsb3ciLCJoaWdoIiwidW5pcXVlIiwiaGFzaCIsIl9hcnIiLCJtZWFuc3FlcnIiLCJnZW9tZWFuIiwibG9ncyIsIm1lYW5PZkxvZ3MiLCJleHAiLCJtZWRpYW4iLCJhcnJsZW4iLCJjdW1zdW0iLCJjdW1wcm9kIiwiZGlmZiIsImRpZmZzIiwiYXJyTGVuIiwicmFuayIsImRpc3RpbmN0TnVtYmVycyIsIm51bWJlckNvdW50cyIsIm51bWJlciIsInNvcnRlZERpc3RpbmN0TnVtYmVycyIsIm51bWJlclJhbmtzIiwiY3VycmVudFJhbmsiLCJjb3VudCIsIm1vZGUiLCJtYXhDb3VudCIsIm51bU1heENvdW50IiwibW9kZV9hcnIiLCJyYW5nZSIsInZhcmlhbmNlIiwiZmxhZyIsInBvb2xlZHZhcmlhbmNlIiwicmVkdWNlIiwic2FtcGxlcyIsImRldmlhdGlvbiIsImRldiIsInN0ZGV2Iiwic3FydCIsInBvb2xlZHN0ZGV2IiwibWVhbmRldiIsImFicyIsIm1lZGRldiIsImNvZWZmdmFyIiwicXVhcnRpbGVzIiwicm91bmQiLCJxdWFudGlsZXMiLCJxdWFudGlsZXNBcnJheSIsImFscGhhcCIsImJldGFwIiwicCIsImFsZXBoIiwiZ2FtbWEiLCJzb3J0ZWRBcnJheSIsInF1YW50aWxlVmFscyIsImZsb29yIiwicGVyY2VudGlsZSIsImV4Y2x1c2l2ZSIsInJlYWxJbmRleCIsInBhcnNlSW50IiwiZnJhYyIsInBlcmNlbnRpbGVPZlNjb3JlIiwic2NvcmUiLCJraW5kIiwidmFsdWUiLCJjb3VudGVyIiwic3RyaWN0IiwiaGlzdG9ncmFtIiwiYmluQ250IiwiZmlyc3QiLCJiaW5XaWR0aCIsImJpbnMiLCJjb3ZhcmlhbmNlIiwiYXJyMSIsImFycjIiLCJ2IiwiYXJyMUxlbiIsInNxX2RldiIsImNvcnJjb2VmZiIsInNwZWFybWFuY29lZmYiLCJzdGFuTW9tZW50IiwibXUiLCJzaWdtYSIsInNrZXdTdW0iLCJza2V3bmVzcyIsImt1cnRvc2lzIiwiZnVsbGJvb2wiLCJ0bXB0aGlzIiwiY2FsbGJhY2tGdW5jdGlvbiIsImFyZ3NUb1Bhc3MiLCJjdXJyaWVkRnVuY3Rpb24iLCJ2ZWN0b3IiLCJnYW1tYWxuIiwieHgiLCJ5IiwiY29mIiwic2VyIiwibG9nZ2FtIiwieDAiLCJ4MiIsInhwIiwiZ2wiLCJnbDAiLCJQSSIsImdhbW1hZm4iLCJ6IiwieWkiLCJxIiwiZmFjdCIsInhkZW4iLCJ4bnVtIiwiSW5maW5pdHkiLCJzaW4iLCJnYW1tYXAiLCJsb3dSZWdHYW1tYSIsImFuIiwiYWxuIiwiYXAiLCJkZWwiLCJkIiwiaCIsIklUTUFYIiwiTmFOIiwiZmFjdG9yaWFsbG4iLCJmYWN0b3JpYWwiLCJjb21iaW5hdGlvbiIsImNvbWJpbmF0aW9ubG4iLCJwZXJtdXRhdGlvbiIsImJldGFmbiIsImJldGFsbiIsImJldGFjZiIsIm0yIiwiYWEiLCJmcG1pbiIsInFhYiIsInFhcCIsInFhbSIsImdhbW1hcGludiIsInBwIiwibG5hMSIsImFmYWMiLCJhMSIsImdsbiIsImVyZiIsInR5IiwiaXNuZWciLCJkZCIsImVyZmMiLCJlcmZjaW52IiwiaWJldGFpbnYiLCJsbmEiLCJsbmIiLCJhbCIsInciLCJiMSIsImliZXRhIiwiYnQiLCJyYW5kbiIsInJhbmRnIiwic2hhcGUiLCJhMiIsIm9hbHBoIiwiYmV0aW5jIiwiZXBzIiwiYzkiLCJhMCIsImIwIiwibTkiLCJ0dWtleVdwcm9iIiwicnIiLCJjYyIsInhsZWciLCJhbGVnIiwicXNxeiIsIndpbmNyIiwicHJfdyIsIm5vcm1hbCIsImNkZiIsImJsYiIsImJpbmMiLCJidWIiLCJlaW5zdW0iLCJjYzEiLCJ3aSIsImVsc3VtIiwiamoiLCJhYyIsInFleHBvIiwicmluc3VtIiwiZiIsIl9hIiwiX2IiLCJfYyIsIm5ld3RoaXMiLCJzYW1wbGUiLCJ2YWxzIiwiZm5mdW5jIiwiYmV0YSIsInBkZiIsImFscGhhIiwiaW52IiwiY2VudHJhbEYiLCJkZjEiLCJkZjIiLCJiaW5vbWlhbCIsImNhdWNoeSIsImxvY2FsIiwic2NhbGUiLCJhdGFuIiwidGFuIiwiY2hpc3F1YXJlIiwiZG9mIiwiZXhwb25lbnRpYWwiLCJyYXRlIiwiaW52Z2FtbWEiLCJrdW1hcmFzd2FteSIsIkVycm9yIiwibG9nbm9ybWFsIiwibm9uY2VudHJhbHQiLCJuY3AiLCJzdHVkZW50dCIsInRvbCIsImZsaXAiLCJwcm9iIiwibGFzdHZhbHVlIiwic3RkIiwicGFyZXRvIiwiU1FSVDIiLCJkb2YyIiwid2VpYnVsbCIsInVuaWZvcm0iLCJiZXRhY2RmIiwicyIsIm5lZ2JpbiIsInIiLCJoeXBnZW9tIiwiTiIsInNjYWxlZFBERiIsInNhbXBsZXNEb25lIiwic2NhbGVkQ0RGIiwiZmFjdG9yIiwicG9pc3NvbiIsImwiLCJzdW1hcnIiLCJzYW1wbGVTbWFsbCIsIkwiLCJzYW1wbGVMYXJnZSIsIlUiLCJWIiwic2xhbSIsImxvZ2xhbSIsImludmFscGhhIiwidnIiLCJ1cyIsImxhbSIsInRyaWFuZ3VsYXIiLCJhcmNzaW5lIiwiYXNpbiIsImNvcyIsImxhcGxhY2UiLCJ0dWtleSIsIm5tZWFucyIsImRmIiwieGxlZ3EiLCJhbGVncSIsIk51bWJlciIsImlzRmluaXRlIiwidWxlbiIsImYyIiwiZjJsZiIsImYyMSIsImZmNCIsImFucyIsIm90c3VtIiwidHdhMSIsInQxIiwieDEiLCJwcyIsInR1a2V5UWludiIsInZhbHgwIiwidmFseDEiLCJpdGVyIiwiaXNVc2FibGUiLCJhZGQiLCJzdWJ0cmFjdCIsImRpdmlkZSIsIm11bHRpcGx5IiwibnJlc2NvbHMiLCJyZXNjb2xzIiwib3V0ZXIiLCJkb3QiLCJsZWZ0IiwicmlnaHQiLCJub3JtIiwibm5vcm0iLCJpc05hTiIsImFuZ2xlIiwiYWNvcyIsImF1ZyIsIm5ld2FyciIsImdhdXNzX2pvcmRhbiIsImRldCIsImRldGVybWluYW50Iiwic3VibWF0cml4Iiwic2lnbiIsImdhdXNzX2VsaW1pbmF0aW9uIiwibWF1ZyIsInBpdm90IiwidGVtcCIsInkyIiwibWF4cm93IiwidHJpYVVwU29sdmUiLCJwYXJ0cyIsIm1hdHJpeF9tb2RlIiwidHJpYUxvd1NvbHZlIiwibHUiLCJSIiwiY2hvbGVza3kiLCJUIiwiZ2F1c3NfamFjb2JpIiwieHYiLCJ4ayIsImdhdXNzX3NlaWRlbCIsIlNPUiIsImhvdXNlaG9sZGVyIiwiUVIiLCJsc3RzcSIsImFycmF5X21vZGUiLCJRIiwiYXR0cnMiLCJRMSIsIlJJIiwiSSIsIkFqIiwiY0FpIiwiSWoiLCJjSWkiLCJSX0kiLCJRMiIsImphY29iaSIsIm1heGltIiwidGhldGEiLCJjb25kaXRpb24iLCJldiIsInJ1bmdla3V0dGEiLCJ0X2oiLCJ1X2oiLCJvcmRlciIsImsxIiwiazIiLCJrMyIsInJvbWJlcmciLCJoMSIsImciLCJyaWNoYXJkc29uIiwiWCIsInBvcyIsInkxIiwiaF9taW4iLCJzaW1wc29uIiwiaGVybWl0ZSIsIkYiLCJkRiIsImRsIiwibGFncmFuZ2UiLCJjdWJpY19zcGxpbmUiLCJzcSIsImdhdXNzX3F1YWRyYXR1cmUiLCJQQ0EiLCJ0ZW1wMSIsIkJ0IiwiRCIsInRlbXAyIiwiWSIsIkMiLCJWdCIsImRpZmZlcmVuY2VPZlByb3BvcnRpb25zIiwicDEiLCJuMSIsInAyIiwibjIiLCJwb29sZWQiLCJ6c2NvcmUiLCJ6dGVzdCIsInNpZGVzIiwidHNjb3JlIiwidHRlc3QiLCJhbm92YWZzY29yZSIsImV4cFZhciIsInNhbXBNZWFuIiwic2FtcFNhbXBNZWFuIiwidG1wYXJncyIsInVuZXhwVmFyIiwiYW5vdmFmdGVzdCIsImZ0ZXN0IiwiZnNjb3JlIiwiYW5vdmFmdGVzIiwicXNjb3JlIiwibWVhbjEiLCJtZWFuMiIsInNkIiwicXRlc3QiLCJ0dWtleWhzZCIsImFycmF5cyIsIm1lYW5zIiwibm9ybWFsY2kiLCJjaGFuZ2UiLCJ0Y2kiLCJzaWduaWZpY2FudCIsInB2YWx1ZSIsIm9uZVNpZGVkRGlmZmVyZW5jZU9mUHJvcG9ydGlvbnMiLCJ0d29TaWRlZERpZmZlcmVuY2VPZlByb3BvcnRpb25zIiwibW9kZWxzIiwib2xzIiwiZW5kb2ciLCJleG9nIiwibm9icyIsImRmX21vZGVsIiwiZGZfcmVzaWQiLCJjb2VmIiwicHJlZGljdCIsInJlc2lkIiwieWJhciIsIlNTRSIsIlNTUiIsIlNTVCIsIlIyIiwidF90ZXN0IiwibW9kZWwiLCJ2YXJfY291bnQiLCJzdWJNb2RlbExpc3QiLCJlbmRvZ19pbmRleCIsImV4b2dfaW5kZXgiLCJmaWx0ZXIiLCJzaWdtYUhhdCIsInNlQmV0YUhhdCIsIm1vZCIsInRTdGF0aXN0aWMiLCJwVmFsdWUiLCJsZWZ0cHBmIiwiaW50ZXJ2YWw5NSIsInNlIiwiRl9zdGF0aXN0aWMiLCJGX3Rlc3QiLCJhZGp1c3RfUjIiLCJidWlsZHhtYXRyaXgiLCJtYXRyaXhSb3dzIiwiYnVpbGRkeG1hdHJpeCIsImJ1aWxkanhtYXRyaXgiLCJqTWF0IiwicGFzcyIsImJ1aWxkeW1hdHJpeCIsImJ1aWxkanltYXRyaXgiLCJtYXRyaXhtdWx0IiwicmVncmVzcyIsImpNYXRYIiwiak1hdFkiLCJpbm5lcmludiIsInh0cmFuc3B4aW52IiwieHRyYW5zcCIsIm5leHQiLCJyZWdyZXNzdCIsImNvbXBpbGUiLCJqTWF0WUJhciIsInlCYXIiLCJ5QXZlcmFnZSIsImFub3ZhIiwicmVzaWR1YWxzIiwic3NyIiwibXNyIiwic3NlIiwibXNlIiwic3N0IiwibXN0IiwicjIiLCJmcmF0aW8iLCJybXNlIiwicjJhZGoiLCJzdGF0cyIsInNkcyIsInRzIiwiY292YXIiLCJ4dHJhbnNweCIsImlubmVyIiwibWF0cml4c3VidHJhY3QiLCJzdHlsZXNJbkRPTSIsImdldEluZGV4QnlJZGVudGlmaWVyIiwiaWRlbnRpZmllciIsIm1vZHVsZXNUb0RvbSIsIm9wdGlvbnMiLCJpZENvdW50TWFwIiwiaWRlbnRpZmllcnMiLCJiYXNlIiwiaW5kZXhCeUlkZW50aWZpZXIiLCJjc3MiLCJzb3VyY2VNYXAiLCJyZWZlcmVuY2VzIiwidXBkYXRlciIsImFkZEVsZW1lbnRTdHlsZSIsImJ5SW5kZXgiLCJhcGkiLCJkb21BUEkiLCJ1cGRhdGUiLCJuZXdPYmoiLCJyZW1vdmUiLCJsYXN0SWRlbnRpZmllcnMiLCJuZXdMaXN0IiwibmV3TGFzdElkZW50aWZpZXJzIiwiX2kiLCJfaW5kZXgiLCJtZW1vIiwiaW5zZXJ0Iiwic3R5bGUiLCJ0YXJnZXQiLCJzdHlsZVRhcmdldCIsInF1ZXJ5U2VsZWN0b3IiLCJIVE1MSUZyYW1lRWxlbWVudCIsImNvbnRlbnREb2N1bWVudCIsImhlYWQiLCJnZXRUYXJnZXQiLCJhcHBlbmRDaGlsZCIsImVsZW1lbnQiLCJjcmVhdGVFbGVtZW50Iiwic2V0QXR0cmlidXRlcyIsImF0dHJpYnV0ZXMiLCJzdHlsZUVsZW1lbnQiLCJub25jZSIsInNldEF0dHJpYnV0ZSIsImluc2VydFN0eWxlRWxlbWVudCIsInN0eWxlVGFnVHJhbnNmb3JtIiwicGFyZW50Tm9kZSIsInJlbW92ZUNoaWxkIiwicmVtb3ZlU3R5bGVFbGVtZW50Iiwic3R5bGVTaGVldCIsImNzc1RleHQiLCJmaXJzdENoaWxkIiwiY3JlYXRlVGV4dE5vZGUiLCJfX3dlYnBhY2tfbW9kdWxlX2NhY2hlX18iLCJfX3dlYnBhY2tfcmVxdWlyZV9fIiwibW9kdWxlSWQiLCJjYWNoZWRNb2R1bGUiLCJsb2FkZWQiLCJfX3dlYnBhY2tfbW9kdWxlc19fIiwiYW1kTyIsImdldHRlciIsIl9fZXNNb2R1bGUiLCJkZWZpbml0aW9uIiwia2V5IiwibyIsImRlZmluZVByb3BlcnR5IiwiZW51bWVyYWJsZSIsImdldCIsImNodW5rSWQiLCJnbG9iYWxUaGlzIiwiRnVuY3Rpb24iLCJobWQiLCJjaGlsZHJlbiIsInByb3AiLCJoYXNPd25Qcm9wZXJ0eSIsIlN5bWJvbCIsInRvU3RyaW5nVGFnIiwic2NyaXB0VXJsIiwic2NyaXB0cyIsImdldEVsZW1lbnRzQnlUYWdOYW1lIiwiYmFzZVVSSSIsIm5jIiwiZ3JvayIsInVpIiwiREciLCJDb2x1bW4iLCJmcm9tSW50MzJBcnJheSIsImZyb21GbG9hdDMyQXJyYXkiLCJOVU1fVFlQRSIsIkZMT0FUX0NPTFVNTl9UWVBFIiwiSU5UX0NPTFVNTl9UWVBFIiwiRkxPQVRfQ09MVU1OU19UWVBFIiwiTkVXX0ZMT0FUX0NPTFVNTlNfVFlQRSIsIklOVF9DT0xVTU5TX1RZUEUiLCJORVdfSU5UX0NPTFVNTlNfVFlQRSIsIk5FV19GTE9BVF9DT0xVTU5fVFlQRSIsIk5FV19JTlRfQ09MVU1OX1RZUEUiLCJDT0xVTU4iLCJDQUxMX1JFU1VMVCIsIk5VTV9PRl9ST1dTIiwiTlVNX09GX0NPTFVNTlMiLCJSRUYiLCJWQUxVRSIsIlRBQkxFX09GX0NPTFVNTlMiLCJPQkpFQ1RTIiwiSU5UX1RZUEUiLCJET1VCTEVfVFlQRSIsImFyZ3NTcGVjaWZpY2F0aW9uIiwiaW5wdXRWYWxzIiwicmVmIiwiY3BwRnVuY0lucHV0IiwiZ2V0UmF3RGF0YSIsInRvTGlzdCIsInZhbDEiLCJ2YWwyIiwiZnVuY1NwZWNpZmljYXRpb24iLCJkYXRhRnJvbVdlYldvcmtlciIsIl9jYWxsUmVzdWx0IiwiY2FsbFJlc3VsdCIsImZ1bmNTcGVjaWZpY2F0aW9uQXJncyIsImFyZ3NBZnRlcldhc21DYWxsIiwidHlwZVRvQ29sdW1uQ3JlYXRvck1hcCIsIm5hbWUiLCJuYW1lcyIsImNvbHVtbnMiLCJleHRyYWN0TmV3bHlDcmVhdGVkRGF0YSIsIm91dFB1dCIsIm91dHB1dCIsInR5cGVUb0RhdGFGaWVsZE1hcCIsInNvdXJjZSIsIkRhdGFGcmFtZSIsImZyb21Db2x1bW5zIiwiYXJyYXlUb1JldHVybiIsImdldE91dHB1dCIsImNsZWFyTmV3bHlDcmVhdGVkRGF0YSIsIkNPTVBfTUlOIiwiU0FNUExFU19DT1VOVF9NSU4iLCJGRUFUVVJFU19DT1VOVF9NSU4iLCJQRVJDRU5UQUdFX01JTiIsIlBFUkNFTlRBR0VfTUFYIiwiTUFYX0VMRU1FTlRTX0NPVU5UIiwiQ09NUF9QT1NJVFZFX01FUyIsIkNPTVBfRVhDRVNTIiwiSU5DT1JFUlJFQ1RfTUlOX01BWF9NRVMiLCJJTkNPUkVSUkVDVF9GRUFUVVJFU19NRVMiLCJJTkNPUkVSUkVDVF9TQU1QTEVTX01FUyIsIklOQ09SRVJSRUNUX1BFUkNFTlRBR0VfTUVTIiwiREFUQUZSQU1FX0lTX1RPT19CSUdfTUVTIiwiVU5TVVBQT1JURURfQ09MVU1OX1RZUEVfTUVTIiwiY2hlY2tDb2x1bW5UeXBlIiwiY2hlY2tNaXNzaW5nVmFscyIsIm1pc3NpbmdWYWx1ZUNvdW50IiwiZmVhdHVyZXMiLCJjb21wb25lbnRzIiwiY2hlY2tEaW1lbnNpb25SZWR1Y2VySW5wdXRzIiwiX19hd2FpdGVyIiwidGhpc0FyZyIsIl9hcmd1bWVudHMiLCJQIiwiZ2VuZXJhdG9yIiwiZnVsZmlsbGVkIiwicmVqZWN0ZWQiLCJkb25lIiwiU1ZNX0dFTl9GRUFUVVJFU19JTkRFWCIsIlNWTV9HRU5fTEFCRUxTX0lOREVYIiwiU1ZNX0ZFQVRVUkVfTkFNRSIsIlNWTV9MQUJFTF9OQU1FIiwidGVzdERhdGFGb3JCaW5hcnlDbGFzc2lmaWNhdGlvbiIsImtlcm5lbCIsImtlcm5lbFBhcmFtcyIsInNhbXBsZXNDb3VudCIsImZlYXR1cmVzQ291bnQiLCJ2aW9sYXRvcnNQZXJjZW50YWdlIiwiY2hlY2tHZW5lcmF0b3JTVk1pbnB1dHMiLCJrZXJuZWxQYXJhbXNDb2wiLCJfb3V0cHV0IiwiX3Byb21pc2UiLCJhc3luYyIsIndvcmtlciIsIldvcmtlciIsIlVSTCIsInBvc3RNZXNzYWdlIiwiRURBIiwib25tZXNzYWdlIiwidGVybWluYXRlIiwiX2dlbmVyYXRlRGF0YXNldEluV2ViV29ya2VyIiwiX3Jlc3VsdCIsIl9lcnJvciIsIkxJTkVBUiIsIlBPTFlOT01JQUwiLCJSQkYiLCJTSUdNT0lEIiwiQ09ORlVTSU9OX01BVFJfU0laRSIsIk5PUk1BTElaRURfREFUQV9JTkRFWCIsIk1FQU5TX0lOREVYIiwiU1REX0RFVlNfSU5ERVgiLCJNT0RFTF9QQVJBTVNfSU5ERVgiLCJNT0RFTF9XRUlHSFRTX0lOREVYIiwiUFJFRElDVEVEX0xBQkVMU19JTkRFWCIsIkNPUlJFQ1RORVNTX0lOREVYIiwiQ09ORlVTSU9OX01BVFJJWF9JTkRFWCIsIlRSVUVfUE9TSVRJVkVfSU5ERVgiLCJGQUxTRV9ORUdBVElWRV9JTkRFWCIsIkZBTFNFX1BPU0lUSVZFX0lOREVYIiwiVFJVRV9ORUdBVElWRV9JTkRFWCIsIlJCRl9TSUdNQV9JTkRFWCIsIlBPTFlOT01JQUxfQ19JTkRFWCIsIlBPTFlOT01JQUxfRF9JTkRFWCIsIlNJR01PSURfS0FQUEFfSU5ERVgiLCJTSUdNT0lEX1RIRVRBX0lOREVYIiwiR0FNTUFfSU5GSU1VTV9MSU1JVCIsIlJCRl9TSUdNQV9JTkZJTVVNX0xJTUlUIiwiUE9MWU5PTUlBTF9DX0lORklNVU1fTElNSVQiLCJQT0xZTk9NSUFMX0RfSU5GSU1VTV9MSU1JVCIsIldST05HX0dBTU1BX01FU1NBR0UiLCJXUk9OR19SQkZfU0lHTUFfTUVTU0FHRSIsIldST05HX1BPTFlOT01JQUxfQ19NRVNTQUdFIiwiV1JPTkdfUE9MWU5PTUlBTF9EX01FU1NBR0UiLCJXUk9OR19LRVJORUxfTUVTU0FHRSIsIkxBQkVMUyIsIlBSRURJQ1RFRCIsIkNPUlJFQ1RORVNTIiwiQ09ORlVTSU9OX01BVFJJWF9OQU1FIiwiTUVBTiIsIlNURF9ERVYiLCJNT0RFTF9QQVJBTVNfTkFNRSIsIk1PREVMX1dFSUdIVFNfTkFNRSIsIkdBTU1BIiwiS0VSTkVMIiwiS0VSTkVMX1BBUkFNUyIsIktFUk5FTF9QQVJBTV8xIiwiS0VSTkVMX1BBUkFNXzIiLCJGRUFUVVJFU19DT1VOVF9OQU1FIiwiVFJBSU5fU0FNUExFU19DT1VOVF9OQU1FIiwiVFJBSU5fRVJST1IiLCJLRVJORUxfVFlQRV9UT19OQU1FX01BUCIsIlBPU0lUSVZFX05BTUUiLCJORUdBVElWRV9OQU1FIiwiUFJFRElDVEVEX1BPU0lUSVZFX05BTUUiLCJQUkVESUNURURfTkVHQVRJVkVfTkFNRSIsIlNFTlNJVElWSVRZIiwiU1BFQ0lGSUNJVFkiLCJCQUxBTkNFRF9BQ0NVUkFDWSIsIlBPU0lUSVZFX1BSRURJQ1RJVkVfVkFMVUUiLCJORUdBVElWRV9QUkVESUNUSVZFX1ZBTFVFIiwiTUxfUkVQT1JUIiwiTUxfUkVQT1JUX1BSRURJQ1RFRF9MQUJFTFMiLCJNTF9SRVBPUlRfVFJBSU5fTEFCRUxTIiwiTUxfUkVQT1JUX0NPUlJFQ1RORVNTIiwiUFJFRElDVElPTiIsIkJZVEVTIiwiSU5UU19DT1VOVCIsIktFUl9QQVJBTVNfQ09VTlQiLCJNT0RFTF9LRVJORUxfSU5ERVgiLCJTQU1QTEVTX0NPVU5UX0lOREVYIiwiRkVBVFVSRVNfQ09VTlRfSU5ERVgiLCJJTklUX1ZBTFVFIiwiTFNfU1ZNX0FERF9DT05TVCIsImdldFRyYWluZWRNb2RlbCIsImh5cGVycGFyYW1ldGVycyIsInByZWRpY3RDb2x1bW4iLCJsYWJlbHMiLCJieU5hbWUiLCJkYXRhc2V0IiwiY1BhcmFtIiwiZFBhcmFtIiwiY2hlY2tIeXBlcnBhcmFtZXRlcnMiLCJrZXJuZWxQYXJhbXNBcnJheSIsImthcHBhIiwidHJhaW5Db2xzIiwibW9kZWxQYXJhbXNDb3VudCIsInByZWNvbXB1dGVkV2VpZ2h0c0NvdW50IiwiY29uZnVzaW9uTWF0cml4RWxlbWVudHNDb3VudCIsIl90cmFpbkFuZEFuYWx5emVMU1NWTUluV2ViV29ya2VyIiwidHJhaW5HYW1tYSIsImtlcm5lbFR5cGUiLCJ0cmFpbkxhYmVscyIsIm5vcm1hbGl6ZWRUcmFpbkRhdGEiLCJzdGREZXZzIiwibW9kZWxQYXJhbXMiLCJtb2RlbFdlaWdodHMiLCJwcmVkaWN0ZWRMYWJlbHMiLCJjb3JyZWN0bmVzcyIsImNvbmZ1c2lvbk1hdHJpeCIsInRyYWluRXJyb3IiLCJ0cmFpblNhbXBsZXNDb3VudCIsIlRQIiwiVE4iLCJGUCIsIkZOIiwiVFBSIiwiVE5SIiwiUFBWIiwiTlBWIiwiQUNDIiwiQkEiLCJzZW5zaXRpdml0eSIsInNwZWNpZmljaXR5IiwiYmFsYW5jZWRBY2N1cmFjeSIsInBvc2l0aXZlUHJlZGljaXR2ZVZhbHVlIiwibmVnYXRpdmVQcmVkaWNpdHZlVmFsdWUiLCJldmFsdWF0ZUFjY3VyYWN5IiwidHJhaW5BbmRBbmFseXplTW9kZWwiLCJzaG93VHJhaW5SZXBvcnQiLCJkZlZpZXciLCJhZGRWaWV3ZXIiLCJnZXRNb2RlbEluZm8iLCJ0aXRsZSIsImNvbG9yIiwiZ2V0Q29uZnVzaW9uTWF0cml4REYiLCJnZXRQYWNrZWRNb2RlbCIsImRhdGFDb2xzIiwib2Zmc2V0IiwiaW50cyIsImZsb2F0cyIsImdldFByZWRpY3Rpb24iLCJwYWNrZWRNb2RlbCIsIm1vZGVsQnl0ZXMiLCJoZWFkZXIiLCJnZXRVbnBhY2tlZE1vZGVsIiwibm9ybWFsaXplZERhdGEiLCJwcmVjb21wdXRlZFdlaWdodHMiLCJ0YXJnZXREYXRhIiwiX3ByZWRpY3RCeUxTU1ZNSW5XZWJXb3JrZXIiLCJQTFNfQU5BTFlTSVMiLCJFUlJPUl9NU0ciLCJUSVRMRSIsIkhJTlQiLCJMSU5LIiwiQ09NUE9ORU5UUyIsIlJFU1VMVF9OQU1FUyIsIldBU01fT1VUUFVUX0lEWCIsIklOVCIsIlRJTUVPVVQiLCJSQURJVVMiLCJMSU5FX1dJRFRIIiwiWF9DT09SRCIsIllfQ09PUkQiLCJDT0xPUiIsIkRFTU9fSU5UUk9fTUQiLCJERU1PX1JFU1VMVFMiLCJjYXB0aW9uIiwiTU9ERUwiLCJ0ZXh0IiwiU0NPUkVTIiwiTE9BRElOR1MiLCJSRUdSX0NPRUZTIiwiRVhQTF9WQVIiLCJERU1PX1JFU1VMVFNfTUQiLCJNVkEiLCJnZXRQbHNBbmFseXNpcyIsImlucHV0IiwidGFibGUiLCJjb21wb25lbnRzQ291bnQiLCJwcmVkaWN0aW9uIiwicmVncmVzc2lvbkNvZWZmaWNpZW50cyIsIlJFR1JfQ09FRkZTIiwidFNjb3JlcyIsIlRfU0NPUkVTIiwidVNjb3JlcyIsIlVfU0NPUkVTIiwieExvYWRpbmdzIiwiWF9MT0FESU5HUyIsInlMb2FkaW5ncyIsIllfTE9BRElOR1MiLCJydW5NVkEiLCJhbmFseXNpc1R5cGUiLCJOT19ERiIsInJvd0NvdW50IiwiRU1QVFlfREYiLCJudW1Db2xOYW1lcyIsIm51bUNvbHMiLCJzdHJDb2xzIiwiaXNWYWxpZE51bWVyaWMiLCJOT19DT0xTIiwiT05FX0NPTCIsInByZWRpY3RJbnB1dCIsIlBSRURJQ1QiLCJ1cGRhdGVJcHV0cyIsInNldFRvb2x0aXAiLCJmZWF0dXJlc0lucHV0IiwiVVNJTkciLCJhdmFpbGFibGUiLCJvbklucHV0IiwiRkVBVFVSRVMiLCJERUZBVUxUIiwiY29tcG9uZW50c0lucHV0IiwiaW5wdXRUeXBlIiwiZGVmYXVsdFZhbHVlIiwic2hvd1BsdXNNaW51cyIsIk1JTiIsImRsZ1RpdGxlIiwiZGxnSGVscFVybCIsImRsZ1J1bkJ0blRvb2x0aXAiLCJDT01QVVRFX0NPTVBPTkVOVFMiLCJQTFMiLCJkbGciLCJnZXRCdXR0b24iLCJSVU4iLCJkaXNhYmxlZCIsIm5hbWVzSW5wdXRzIiwiTkFNRVMiLCJyb290IiwiaGlkZGVuIiwiaGVscFVybCIsImFkZEJ1dHRvbiIsImNsb3NlIiwicGxzQ29scyIsImZlYXR1cmVzTmFtZXMiLCJwcmVmaXgiLCJQUkVGSVgiLCJYU0NPUkUiLCJnZXRVbnVzZWROYW1lIiwidmlldyIsIkZFQVRVUkUiLCJYTE9BRElORyIsInByZWQiLCJTVUZGSVgiLCJwcmVkaWN0VnNSZWZlclNjYXR0ZXIiLCJ4Q29sdW1uTmFtZSIsInlDb2x1bW5OYW1lIiwic2hvd1JlZ3Jlc3Npb25MaW5lIiwibWFya2VyVHlwZSIsImhlbHAiLCJyZWdyQ29lZmZzQmFyIiwic3BsaXRDb2x1bW5OYW1lIiwidmFsdWVDb2x1bW5OYW1lIiwidmFsdWVBZ2dyVHlwZSIsIkNPRUZGUyIsInNob3dWYWx1ZVNlbGVjdG9yIiwic2hvd1N0YWNrU2VsZWN0b3IiLCJsb2FkaW5nc1NjYXR0ZXIiLCJzY29yZU5hbWVzIiwiWVNDT1JFIiwic2NvcmVzU2NhdHRlciIsInNob3dWaWV3ZXJGb3JtdWxhTGluZXMiLCJsaW5lcyIsImFkZExpbmUiLCJmb3JtdWxhIiwicmFkaXVzIiwid2lkdGgiLCJ2aXNpYmxlIiwiQ0lSQ0xFIiwieE5hbWUiLCJBWElTIiwieU5hbWUiLCJtZXRhIiwiZm9ybXVsYUxpbmVzIiwiYWRkQWxsIiwieUV4cGxWYXJzIiwiY29tcE5hbWVzIiwieEV4cGxWYXJzIiwiQ09NUCIsImNvbXAiLCJDT01QUyIsImV4cGxWYXJzREYiLCJleHBsVmFyc0JhciIsIkVYUExfVkFSUyIsInNob3dDYXRlZ29yeVNlbGVjdG9yIiwiREVNTyIsInBhZ2VzIiwidmlld2VyIiwic2hvd05leHRUbyIsIkVYUExPUkUiLCJwZXJmb3JtTVZBIiwic2hvdyIsImNoZWNrU2lnbmlmaWNhbmNlTGV2ZWwiLCJJTkNPUlJFQ1RfU0lHTklGSUNBTkNFX0xFVkVMIiwiZ2V0VmFyaWFuY2UiLCJJTkNPUlJFQ1RfU0FNUExFX1NJWkUiLCJzdW1PZlNxdWFyZXMiLCJhcmVWYXJzRXF1YWwiLCJ4RGF0YSIsInlEYXRhIiwieFZhciIsInlWYXIiLCJGYWN0b3JpemVkRGF0YSIsImNhdGVnb3JpZXMiLCJ2YWx1ZXMiLCJjaGVja05vcm1hbGl0eSIsImlzTm9ybURpc3RyaWIiLCJOT05fRVFVQUxfRkFDVE9SU19WQUxVRVNfU0laRSIsInNldFN0YXRzIiwiaXNOb3JtYWwiLCJLIiwiY2F0Q291bnQiLCJzdW1zIiwic3Vtc09mU3F1YXJlcyIsInN1YlNhbXBsZVNpemVzIiwiZ2V0T25lV2F5QW5vdmEiLCJBTk9WQV9GQUlMRURfSlVTVF9PTkVfQ0FUIiwiYnVmIiwic3NUb3QiLCJzc0JuIiwic3NXbiIsImRmQm4iLCJkZlduIiwibXNCbiIsIm1zV24iLCJmU3RhdCIsImRmVG90IiwiX2NoZWNrTm9ybWFsaXR5IiwiX2FscGhhIiwiY2F0cyIsImZpbGwiLCJVTlNVUFBPUlRFRF9DT0xVTU5fVFlQRSIsImdldERic2NhbldvcmtlciIsImVtYmVkWCIsImVtYmVkWSIsImVwc2lsb24iLCJtaW5QdHMiLCJlcnJvciIsImNsdXN0ZXJzIiwiZ3B1QWRhcHRlciIsImdldEdQVUFkYXB0ZXJEZXNjcmlwdGlvbiIsIm5hdmlnYXRvciIsImdwdSIsInJlcXVlc3RBZGFwdGVyIiwicmVxdWVzdEFkYXB0ZXJJbmZvIiwicmVwbGFjZUVtcHR5U3RyaW5nIiwiZGVzY3JpcHRpb24iLCJ2ZW5kb3IiLCJyZXBsYWNlbWVudCIsIldFQkdTTEFHR1JFR0FUSU9OIiwiV0VCR1BVRElTVEFOQ0UiLCJNYXRyaXhNYXRyaXhPcFR5cGUiLCJNYXRyaXhPcFR5cGUiLCJNYXRyaXhTY2FsYXJPcFR5cGUiLCJEaW1SZWR1Y3Rpb25NZXRob2RzIiwiRVVDTElERUFOIiwiTUFOSEFUVEFOIiwiSEFNTUlORyIsIlRBTklNT1RPIiwiTEVWRU5TVEVJTiIsIk5FRURMRU1BTl9XVU5TQ0giLCJNT05PTUVSX0NIRU1JQ0FMX0RJU1RBTkNFIiwiU09LQUwiLCJDT1NJTkUiLCJBU1lNTUVUUklDIiwiRGlmZmVyZW5jZSIsIk9uZUhvdCIsIlNldCIsIkRCU2Nhbk9wdGlvbnMiLCJ1aU5hbWUiLCJ0b29sdGlwIiwiQllQQVNTX0xBUkdFX0RBVEFfV0FSTklORyIsIlNIT1dfU0NBVFRFUlBMT1RfUFJPR1JFU1MiLCJEaXN0YW5jZUFnZ3JlZ2F0aW9uTWV0aG9kcyIsInJ4anMiLCJsZWFybmluZ1JhdGUiLCJuRXBvY2hzIiwibk5laWdoYm9ycyIsInNwcmVhZCIsIm1pbkRpc3QiLCJyYW5kb21TZWVkIiwidXNlV2ViR1BVIiwiZGlzYWJsZVRvb2x0aXAiLCJkZXNjIiwiZGlzYWJsZSIsInBlcnBsZXhpdHkiLCJNdWx0aUNvbHVtbkRpbVJlZHVjdGlvbkVkaXRvciIsImVkaXRvclNldHRpbmdzIiwiY29sdW1uT3B0RWRpdG9ycyIsImNvbHVtbk9wdEVkaXRvcnNSb290IiwiY29sdW1uUGFyYW1zRWRpdG9yUm9vdCIsIndlaWdodHNFZGl0b3JSb290IiwiY29sdW1uRnVuY3Rpb25zTWFwIiwibWV0aG9kc1BhcmFtcyIsImRiU2NhblBhcmFtcyIsIm1ldGhvZFNldHRpbmdzRGl2IiwiZGJTY2FuU2V0dGluZ3NEaXYiLCJzdXBwb3J0ZWRGdW5jdGlvbnMiLCJwbG90RW1iZWRkaW5nc0lucHV0IiwiY2x1c3RlckVtYmVkZGluZ3NJbnB1dCIsImFnZ3JlZ2F0aW9uTWV0aG9kSW5wdXQiLCJvbkNvbHVtbnNDaGFuZ2VkIiwiU3ViamVjdCIsImNvbHVtblBhcmFtc0VkaXRvckFjY29yZGlvbiIsInRhZ3MiLCJzZW1UeXBlcyIsImZyaWVuZGx5TmFtZSIsInR5cGVzIiwidW5pdHMiLCJkaXN0YW5jZUZ1bmN0aW9ucyIsInNlbXR5cGUiLCJpbmNsdWRlcyIsInBvc3RQcm9jZXNzaW5nRWRpdG9yIiwiUG9zdFByb2Nlc3NpbmdGdW5jRWRpdG9yIiwidGFibGVJbnB1dCIsIm9uVGFibGVJbnB1dENoYW5nZWQiLCJzZXR0aW5nc09wZW5lZCIsImRiU2NhblNldHRpbmdzT3BlbmVkIiwibWV0aG9kSW5wdXQiLCJjcmVhdGVBbGdvcml0aG1TZXR0aW5nc0RpdiIsIm1ldGhvZFNldHRpbmdzSWNvbiIsImRiU2NhblNldHRpbmdzSWNvbiIsImNsYXNzTGlzdCIsInByZXBlbmQiLCJhZGRQYW5lIiwiZGlzcGxheSIsImtleXMiLCJmdW5jTmFtZSIsInNlbVR5cGVTdXBwb3J0ZWQiLCJzZW1UeXBlIiwidHlwZVN1cG9ydGVkIiwidW5pdHNTdXBwb3J0ZWQiLCJnZXRUYWciLCJzdXBwb3J0ZWRDb2xOYW1lcyIsImNvbHVtbnNJbnB1dCIsImVkaXRvcldpZHRocyIsIkRpbVJlZHVjdGlvbkNvbHVtbkVkaXRvciIsIml0IiwiZWRpdG9yVGl0bGVzIiwibWFyZ2luIiwiZWRpdG9yVGl0bGVSb290IiwiY2xhc3NlcyIsImVkaXRvcnNSb290IiwibWF4SGVpZ2h0Iiwib3ZlcmZsb3ciLCJlZGl0b3IiLCJhY2NvcmRpb25EaXYiLCJmaXJlQ2hhbmdlZCIsImNvbHVtbnNJbnB1dFJvb3QiLCJmcm9tIiwicGFyYW1zRm9ybSIsInBhcmFtcyIsInBhcmFtIiwiZW5hYmxlZCIsImFwcGVuZCIsImFsZ29yaXRobU9wdGlvbnMiLCJhbGdvcml0aG1QYXJhbXMiLCJkYlNjYW5PcHRpb25zIiwiZGJTY2FuRXBzaWxvbiIsImRiU2Nhbk1pblB0cyIsImdldEVkaXRvciIsIm1pbldpZHRoIiwiZ2V0UGFyYW1zIiwibWV0aG9kTmFtZSIsInByZXByb2Nlc3NpbmdGdW5jdGlvbnMiLCJwcmVQcm9jZXNzaW5nRnVuY3Rpb24iLCJkaXN0YW5jZU1ldHJpY3MiLCJzaW1pbGFyaXR5TWV0cmljSW5wdXQiLCJ3ZWlnaHRzIiwid2VpZ2h0IiwicHJlcHJvY2Vzc2luZ0Z1bmNBcmdzIiwicHJlcHJvY2Vzc2luZ0Z1bmN0aW9uU2V0dGluZ3MiLCJwbG90RW1iZWRkaW5ncyIsImNsdXN0ZXJFbWJlZGRpbmdzIiwicG9zdFByb2Nlc3NpbmdGdW5jdGlvbiIsInBvc3RQcm9jZXNzaW5nRnVuY3Rpb25BcmdzIiwiYWdncmVhZ2dyZWdhdGlvbk1ldGhvZCIsInByZXByb2Nlc3NpbmdGdW5jU2V0dGluZ3NEaXYiLCJlZGl0b3JEaXYiLCJoYXNFeHRyYVNldHRpbmdzIiwiZnVuY3Rpb25zTWFwIiwibmVlZHNDb25maWd1cmF0aW9uIiwid2VpZ2h0SW5wdXQiLCJnZXRGdW5jTmFtZSIsInByZXByb2Nlc3NpbmdGdW5jdGlvbklucHV0IiwiaW5wdXRzIiwic3VwRiIsImZpbmQiLCJnZXRTaW1pbGFyaXR5TWV0cmljSW5wdXQiLCJwcmVwcm9jZXNzaW5nRnVuY1NldHRpbmdzSWNvbiIsImNyZWF0ZVNldHRpbmdzRGl2IiwiY29sdW1uVGl0bGUiLCJjb2xPcHRFZGl0b3JzIiwic2ltaWxhcml0eU1ldHJpY0lucHV0Um9vdCIsImRpc3RhbmNlT3B0aW9uc0RpdiIsInByZUZ1bmMiLCJmYyIsInByZXBhcmUiLCJidWlsZEVkaXRvciIsImZJbnB1dCIsImlucHV0UGFyYW1zIiwiaW5wIiwicHJvcGVydHkiLCJvbkNoYW5nZWQiLCJtYXJnaW5Cb3R0b20iLCJwb3N0UHJvY2Vzc2luZ0Z1bmN0aW9uc01hcCIsIl9yb290IiwiX3Bvc3RQcm9jZXNzaW5nQXJncyIsIl9hcmdzRWxlbWVudCIsIl9zZXR0aW5nc09wZW5lZCIsIl9zZXR0aW5nc0ljb24iLCJkZWZhdWx0UG9zdFByb2Nlc3NpbmdGdW5jIiwicG9zdFByb2Nlc3NpbmdGdW5jdGlvbklucHV0Iiwib25GdW5jdGlvbkNoYW5nZWQiLCJudWxsYWJsZSIsIkRJTUVOU0lPTkFMSVRZX1JFRFVDRVJfVEVSTUlOQVRFX0VWRU5UIiwiaXNOaWwiLCJnZXRFbWJlZGRpbmdWaWV3ZXJOYW1lIiwibWV0aG9kIiwiQ09QWV9TVUZGSVgiLCJLTk5fSU1QVVRFUiIsIlNVUFBPUlRFRF9DT0xVTU5fVFlQRVMiLCJnZXROdWxsVmFsdWUiLCJNRVRSSUNfVFlQRSIsIkRJU1RBTkNFX1RZUEUiLCJNSU5fTkVJR0hCT1JTIiwiYXJlVGhlcmVGYWlscyIsInRhcmdldENvbE5hbWVzIiwiZmVhdHVyZUNvbE5hbWVzIiwibWlzVmFsc0luZHMiLCJoYXMiLCJpbmRpY2VzIiwiZmFpbFRvSW1wdXRlIiwiZmVhdHVyZSIsImZlYXR1cmVJbmRzIiwicnVuS05OSW1wdXRlciIsImNvbHNXaXRoTWlzc2luZ1ZhbHMiLCJhdmFpbGFibGVUYXJnZXRDb2xzTmFtZXMiLCJhdmFpbGFibGVGZWF0dXJlQ29sc05hbWVzIiwiTWFwIiwibnVsbFZhbHVlIiwiZ2V0TWlzc2luZ1ZhbHNJbmRpY2VzIiwiaW5QbGFjZSIsIklOX1BMQUNFIiwiaW5QbGFjZUlucHV0Iiwia2VlcEVtcHR5IiwiS0VFUF9FTVBUWSIsImtlZXBFbXB0eUlucHV0IiwibmVpZ2hib3JzIiwiTkVJR0hCT1JTIiwibmVpZ2hib3JzSW5wdXQiLCJkaXN0VHlwZSIsImRpc3RUeXBlSW5wdXQiLCJ0YXJnZXRDb2xJbnB1dCIsImNoZWNrQXBwbGljYWJpbGl0eSIsImNoZWNrZWQiLCJzZWxlY3RlZEZlYXR1cmVDb2xOYW1lcyIsIm1ldHJpY0luZm9JbnB1dHMiLCJkaXYiLCJoaWRlV2lkZ2V0cyIsImRpc3REaXYiLCJtZXRyaWNzRGl2IiwiZmVhdHVyZXNNZXRyaWNzIiwic2V0dGluZ3MiLCJkZWZhdWx0V2VpZ2h0IiwiV0VJR0hUIiwiZGVmYXVsdE1ldHJpYyIsIk9ORV9IT1QiLCJhdmFpbGFibGVNZXRyaWNzIiwiRElGRkVSRU5DRSIsImdldEZlYXR1cmVJbnB1dFNldHRpbmdzIiwiZGlzdEluZm8iLCJzZXR0aW5nc0ljb24iLCJkZWxldGUiLCJmYWlsZWRUb0ltcHV0ZSIsIm1pc3NpbmdWYWxzSW5kaWNlcyIsImRpc3RhbmNlIiwiZ2V0Q29sIiwiZnJlcXVlbmNpZXMiLCJmZWF0dXJlU291cmNlIiwiZmVhdHVyZU51bGxWYWwiLCJtZXRyaWNGdW5jIiwiZmFpbGVkVG9JbXB1dGVJbmRpY2VzIiwibWV0cmljSW5mbyIsInByb3BlckluZGljZXMiLCJidWZmZXJWZWN0b3IiLCJwcm9wZXJJbmRpY2VzQ291bnQiLCJuZWFyZXN0SXRlbXMiLCJuZWFyZXN0SXRlbXNDb3VudCIsIm1heEluZCIsIm1heERpc3QiLCJmaWxsVmFsdWUiLCJjb21wdXRlQnVmZmVyVmVjdG9yIiwiY3VyIiwicHJvcGVySW5kZXgiLCJkaXN0IiwiY2FuSXRlbUJlVXNlZCIsImdldEZpbGxWYWx1ZSIsImdldFByb3BlckluZGVjZXMiLCJjdXJEaXN0IiwibWF4RnJlcSIsIm1heEZyZXFJZHgiLCJtb3N0RnJlcXVlbnRPZlRoZU5lYXJlc3RJdGVtcyIsImNsb25lIiwiY29weU5hbWUiLCJjb250YWlucyIsImNvcHlTb3VyY2UiLCJpbXB1dGUiLCJjb2xOYW1lIiwiZmlsbFZhbCIsInJhdyIsImdldEZpcnN0Tm9uTnVsbCIsImF2ZyIsImdldERlZmF1bHRGaWxsVmFsdWUiLCJpbXB1dGVGYWlsZWQiLCJtZXNzYWdlIiwiTUNMRWRpdG9yIiwic3VwZXIiLCJzaW1pbGFyaXR5VGhyZXNob2xkSW5wdXQiLCJtYXhJdGVyYXRpb25zSW5wdXQiLCJ1c2VXZWJHUFVJbnB1dCIsInRocmVzaG9sZCIsIm1heEl0ZXJhdGlvbnMiLCJCaXRBcnJheSIsIl9sZW5ndGgiLCJfdmVyc2lvbiIsIl91cGRhdGVMZXZlbCIsIl9zZWxlY3RlZENvdW50IiwiX3NlbGVjdGVkQ291bnRWZXJzaW9uIiwiX3NlbGVjdGVkSW5kZXhlc1ZlcnNpb24iLCJfdmVyc2lvbmVkTmFtZSIsIl92ZXJzaW9uZWROYW1lVmVyc2lvbiIsIlNIUklOS19USFJFU0hPTEQiLCJidWZmIiwiX2NyZWF0ZUJ1ZmZlciIsIl9kYXRhIiwiYXNzdXJlR29leiIsImFyZ05hbWUiLCJhc3N1cmVJblJhbmdlIiwiZHN0IiwiY29weUZyb20iLCJvdGhlciIsImxlbmd0aEluSW50cyIsInZlcnNpb24iLCJpbmNyZW1lbnRWZXJzaW9uIiwibm90aWZ5IiwidmVyc2lvbmVkTmFtZSIsInNldExlbmd0aCIsIm5JbnRzTmVlZGVkIiwibmV3RGF0YSIsInN0YXRpYyIsInNldDEiLCJzZXQyIiwic2V0Qml0IiwiZnJvbVNlcSIsImNoYXJBdCIsImJ5dGVzIiwibnVtMSIsIm51bTIiLCJjb3VudEJpdHMiLCJlcXVhbHMiLCJnZXRCaXQiLCJiaXRBcnJheSIsInNldEFsbCIsImludmVydCIsImZsYWdzIiwic2V0SW5kZXhlcyIsImluZGV4ZXMiLCJzZXRGYXN0IiwiZXZlcnlJbmRleCIsImFueUluZGV4Iiwic2V0V2hlcmUiLCJjaGVjayIsImFsbG93Q2xlYXIiLCJnZXRSYW5nZSIsInRvIiwiZnJvbVZhbHVlcyIsImdldFJhbmdlQXNMaXN0Iiwic2V0UmFuZ2UiLCJzZXRUcnVlIiwic2V0RmFsc2UiLCJhbmQiLCJhbmROb3QiLCJub3RBbmQiLCJub3QiLCJvciIsInhvciIsImluc2VydEF0Iiwib2xkbGVuZ3RoIiwicmVtb3ZlQXQiLCJyZW1vdmVCeU1hc2siLCJtYXNrIiwiZHN0SWR4Iiwic3JjSWR4IiwiZmluZE5leHQiLCJiaXQiLCJ0cnVlQ291bnQiLCJmYWxzZUNvdW50IiwiX29uQml0Q291bnQiLCJyZW1haW5pbmdCaXRzIiwiY291bnRXaGVyZSIsImFuZFdpdGhDb3VudEJpdHMiLCJzZWNvbmQiLCJhbGxUcnVlIiwiYWxsRmFsc2UiLCJhbnlUcnVlIiwiYW55RmFsc2UiLCJ1bnVzZWRCaXRzIiwibnVtSW50cyIsIl9maXJzdE9uQml0IiwiZmluZFByZXYiLCJfbGFzdE9uQml0IiwiU2NhdHRlclBsb3RDdXJyZW50TGluZVN0eWxlIiwiU2NhdHRlclBsb3RMaW5lc1JlbmRlcmVyIiwiY3VycmVudExpbmVJZCIsIl9jdXJyZW50TGluZUlkeCIsInNwIiwicmVuZGVyIiwiY3R4IiwibGluZXNUb1JlbmRlciIsInVwZGF0ZUxpbmVzIiwibGluZXNWaXNpYmlsaXR5IiwidmlzaWJpbGl0eSIsInhBeGlzIiwieUF4aXMiLCJjdXJyZW50TGluZVN0eWxlIiwibm9uZSIsImxpbmVDbGlja2VkIiwibGluZUhvdmVyIiwibW91c2VPdmVyTGluZUlkIiwiYXJyb3dXaWR0aCIsInhBeGlzQ29sIiwiZGF0YUZyYW1lIiwieUF4aXNDb2wiLCJjYW52YXMiLCJnZXRJbmZvIiwiZ2V0Q29udGV4dCIsImFycm93U2l6ZSIsIm9ubW91c2Vkb3duIiwiZXZlbnQiLCJjbGllbnRYIiwiY2xpZW50WSIsIm9ubW91c2Vtb3ZlIiwiY2hlY2tDb29yZHNPbkxpbmUiLCJvZmZzZXRYIiwib2Zmc2V0WSIsIm9uRXZlbnQiLCJzdWJzY3JpYmUiLCJfIiwicmVuZGVyTGluZXMiLCJtdWx0aXBsZUxpbmVzQ291bnRzIiwic2tpcE11bHRpTGluZUNhbGN1bGF0aW9uIiwiY3JlYXRlTXVsdGlMaW5lc0luZGljZXMiLCJfZCIsIl9lIiwiX2YiLCJfZyIsIl9oIiwiX2oiLCJfbCIsIl9tIiwiX28iLCJzcExvb2siLCJnZXRPcHRpb25zIiwibG9vayIsImluZGl2aWR1YWxMaW5lU3R5bGVzIiwiY29sb3JzIiwib3BhY2l0aWVzIiwiZHJhd0Fycm93c0FyciIsImxpbmVXaWR0aCIsInN0cm9rZVN0eWxlIiwib3BhY2l0eSIsIm1hcmtlclNpemVDb2wiLCJsaW5lTGVuIiwic2l6ZUZyb20iLCJzaXplVG8iLCJnZXRNYXJrZXJzU2l6ZXMiLCJwb2ludEZyb20iLCJ3b3JsZFRvU2NyZWVuIiwiYVgiLCJhWSIsInBvaW50VG8iLCJiWCIsImJZIiwibWluQXhpcyIsInZpZXdCb3giLCJoZWlnaHQiLCJiZWdpblBhdGgiLCJoeXBvdCIsIndpZHRocyIsInRvZ2dsZUN1cnJlbnRMaW5lU3R5bGUiLCJtdWx0aUxpbmVzIiwiY29udHJvbFBvaW50IiwiZ2V0TGluZUxlbmd0aCIsInN0YXJ0UG9pbnRXaXRoTWFya2VyIiwiZ2V0UG9pbnRPbkRpc3RhbmNlIiwiZW5kdFBvaW50V2l0aE1hcmtlciIsImZpbmRDb250cm9sUG9pbnQiLCJtb3ZlVG8iLCJxdWFkcmF0aWNDdXJ2ZVRvIiwibGluZVRvIiwiZHJhd0Fycm93cyIsImFycm93UG9pbnQiLCJhcnJvd0NQWCIsImFycm93Q1BZIiwiY2FudmFzQXJyb3ciLCJzdHJva2UiLCJjbG9zZVBhdGgiLCJmaWxsTGVmdEJvdHRvbVJlY3QiLCJib2xkIiwiZGFzaGVkIiwic2V0TGluZURhc2giLCJtYXJrZXJNaW5TaXplIiwibWFya2VyTWF4U2l6ZSIsIm1hcmtlckRlZmF1bHRTaXplIiwicmVjdCIsIlBhdGgyRCIsInlBeGlzQm94IiwibWluWCIsIm1heFkiLCJ4QXhpc0JveCIsImZpbGxTdHlsZSIsImFycmF5SWR4c0JpdEFycmF5IiwiZmlyc3RMaW5lSWR4IiwibGluZXNQZXJQYWlyIiwicG9pbnRUb0NvbXBhcmUxIiwicG9pbnRUb0NvbXBhcmUyIiwiY2FuZGlkYXRlSWR4IiwicEZyb20iLCJwVG8iLCJmcm9tTWFya2VyIiwidG9NYXJrZXIiLCJjYWxjdWxhdGVEaXN0VG9DdXJ2ZUxpbmUiLCJjYWxjdWxhdGVEaXN0VG9TdHJhaWdodExpbmUiLCJ4TWluIiwieE1heCIsInlNaW4iLCJ5TWF4IiwiZGlzdFRvU3RyYWlnaHRMaW5lU2VnbWVudCIsInBjIiwiY2FsY3VsYXRlRGlzdFRvQ3VydmVJblJlY3QiLCJwMCIsInN0ZXBzTnVtIiwiZGVsdGFUIiwiYXJyWCIsImFyclkiLCJtYXhIVyIsIm1pblN1bUhXIiwiY2FuZGlkYXRlSWR4cyIsInhPbkN1cnZlIiwieU9uQ3VydmUiLCJyZWN0VyIsInJlY3RIIiwic3VtSFciLCJwMXgiLCJwMXkiLCJwMngiLCJwMnkiLCJwM3giLCJwM3kiLCJtaWRYIiwibWlkWSIsImR4IiwiZHkiLCJwZXJwZW5kaWN1bGFyTGVuIiwiY2VpbCIsImFycm93RW5kWCIsImFycm93RW5kWSIsInF1YWRYIiwicXVhZFkiLCJhcnJvd0FuZ2xlIiwiYXRhbjIiLCJfcGFja2FnZSIsIndlYlJvb3QiLCJpbml0RURBIiwiX2luaXRFREFBUEkiLCJkYlNjYW4iLCJ4Q29sIiwieUNvbCIsImNsdXN0ZXJDb2xOYW1lIiwiY2x1c3RlciIsImNlbnRlciIsInBjYVRhYmxlIiwiY2VudGVyTnVtIiwic2NhbGVOdW0iLCJfcHJpbmNpcGFsQ29tcG9uZW50QW5hbHlzaXNJbldlYldvcmtlciIsImNvbXB1dGVQQ0EiLCJhZGRQcmVmaXhUb0VhY2hDb2x1bW5OYW1lIiwiZGJzY2FuUG9zdFByb2Nlc3NpbmdGdW5jdGlvbiIsImNvbDEiLCJjb2wyIiwibWluaW11bVBvaW50cyIsInJlc0NvbCIsImNoYW5nZUNvbHVtblR5cGUiLCJjb2xOYW1lcyIsInR2Iiwidmlld2VycyIsInByb3BzIiwiY29sb3JDb2x1bW5OYW1lIiwibnVtYmVyUHJlcHJvY2Vzc2luZ0Z1bmN0aW9uIiwiX21ldHJpYyIsImVudHJpZXMiLCJzdHJpbmdQcmVwcm9jZXNzaW5nRnVuY3Rpb24iLCJyZWR1Y2VEaW1lbnNpb25hbGl0eSIsImRpYWxvZyIsIm9uT0siLCJtZXRyaWNzIiwiYWdncmVnYXRpb25NZXRob2QiLCJkaW1SZWRPcHRpb25zIiwidWlPcHRpb25zIiwicG9zdFByb2Nlc3NpbmdGdW5jIiwicG9zdFByb2NGdW5jQXJncyIsInNjYXR0ZXJQbG90UHJvcHMiLCJzaG93WEF4aXMiLCJzaG93WUF4aXMiLCJzaG93WFNlbGVjdG9yIiwic2hvd1lTZWxlY3RvciIsImRvUmVkdWNlIiwicGciLCJzY2F0dGVyUGxvdE5hbWUiLCJzY2F0dGVyUGxvdCIsImVtYmVkQ29sc05hbWVzIiwiYXhlcyIsImNvbE5hbWVJbmQiLCJnZXRFbWJlZGRpbmdDb2xzTmFtZXMiLCJwcm9ncmVzc0Z1bmMiLCJfbkVwb2NoIiwiZXBvY2hzTGVuZ3RoIiwiZW1iZWRkaW5ncyIsImVtYmVkWENvbCIsImVtYmVkWUNvbCIsInByb2dyZXNzIiwidG9GaXhlZCIsImdldERpbVJlZCIsInJlc29sdmVGIiwic3ViIiwidW5zdWJzY3JpYmUiLCJkaW1SZWRSZXNQcm9taXNlIiwiZW5jb2RlZENvbEVudHJpZXMiLCJwZiIsImRpc3RhbmNlRm5BcmdzIiwiY29sSW5wdXROYW1lIiwibWV0cmljSW5wdXROYW1lIiwiZGlzdGFuY2VBZ2dyZWdhdGlvbiIsImRpbWVuc2lvbmFsaXR5UmVkdWNlUmVzIiwiY29sdW1uc0RhdGEiLCJ0ZXJtaW5hdGVTdWIiLCJlbWJlZGRpbmciLCJlcG9jaE51bSIsImNyZWF0ZU11bHRpRGltUmVkV29ya2VyIiwic3RkRGV2SW52ZXJzZSIsIm5vcm1hbGl6ZSIsImdldE5vcm1hbGl6ZWRFbWJlZGRpbmdzIiwiY2x1c3RlclBnIiwiY2x1c3RlclJlcyIsImFkZE5ld1N0cmluZyIsImNvbDFJbnB1dE5hbWUiLCJjb2wySW5wdXROYW1lIiwiZmFzdFJvd0NvdW50Iiwib25DYW5jZWwiLCJtdWx0aUNvbFJlZHVjZURpbWVuc2lvbmFsaXR5IiwidmFsaWRhdGUiLCJva0J1dHRvbiIsIkdldE1DTEVkaXRvciIsImZ1bmNFZGl0b3IiLCJwcmVwcm9jZXNzaW5nRnVuY3MiLCJlcnJNc2ciLCJlcnJTdGFjayIsImxvZ2dlciIsIk1DTCIsInNjIiwibWNsV29ya2VyIiwiZGlzdGFuY2VGbnMiLCJwcm9taXNlIiwib25lcnJvciIsImNyZWF0ZU1DTFdvcmtlciIsImVtYmVyZFhDb2xOYW1lIiwiZW1iZXJkWUNvbE5hbWUiLCJjbHVzdGVyc0NvdW50ZXIiLCJjb25uZWN0aXZpdHkiLCJpcyIsImpzIiwiY2x1c3RlckNvdW50ZXJDb2xOYW1lIiwiY29ubmVjdGl2aXR5Q29sTmFtZSIsImFkZE5ld0Zsb2F0IiwiY2x1c3RlckNvbCIsImNsdXN0ZXJDb3VudGVyQ29sIiwiYWRkTmV3SW50IiwiY29ubmVjdGl2aXR5Q29sIiwibWFya292Q2x1c3RlciIsInRvcE1lbnVQTFMiLCJQRVJGT1JNX01WQSIsImRlbW9NdWx0aXZhcmlhdGVBbmFseXNpcyIsInJ1bkRlbW9NVkEiLCJ0ZXN0RGF0YUxpbmVhclNlcGFyYWJsZSIsInRlc3REYXRhTGluZWFyTm9uU2VwYXJhYmxlIiwidHJhaW5MaW5lYXJLZXJuZWxTVk0iLCJwcmVkaWN0X2NvbHVtbiIsInRvU2hvd1JlcG9ydCIsInRyYWluZWRNb2RlbCIsImFwcGx5TGluZWFyS2VybmVsU1ZNIiwidHJhaW5SQkZrZXJuZWxTVk0iLCJhcHBseVJCRmtlcm5lbFNWTSIsInRyYWluUG9seW5vbWlhbEtlcm5lbFNWTSIsImFwcGx5UG9seW5vbWlhbEtlcm5lbFNWTSIsInRyYWluU2lnbW9pZEtlcm5lbFNWTSIsImFwcGx5U2lnbW9pZEtlcm5lbFNWTSIsInNpZ25pZmljYW5jZSIsImZhY3RvcnMiLCJhZGRPbmVXYXlBbm92YVZpenVhbGl6YXRpb24iLCJjYXRlZ29yZXMiLCJmYWN0b3JpemVkIiwiTk9OX0VRVUFMX1ZBUklBTkNFUyIsIk5PTl9OT1JNQUxfRElTVFJJQiIsImZDcml0IiwiZkNyaXRpY2FsIiwiaHlwb3RoZXNpcyIsInRlc3RSZXN1bHQiLCJnZXRPbmVXYXlBbm92YURGIiwib25lV2F5QW5vdmEiLCJrTk5JbXB1dGF0aW9uIl0sInNvdXJjZVJvb3QiOiIifQ==
1
+ var eda;(()=>{var t={5540:(t,n,e)=>{"use strict";t=e.hmd(t);var r,o=(r="undefined"!=typeof document&&document.currentScript?document.currentScript.src:void 0,function(t={}){var n,e,o=void 0!==t?t:{};o.ready=new Promise((function(t,r){n=t,e=r}));var i,s=Object.assign({},o),a="object"==typeof window,u="function"==typeof importScripts,l=("object"==typeof process&&"object"==typeof process.versions&&process.versions.node,"");(a||u)&&(u?l=self.location.href:"undefined"!=typeof document&&document.currentScript&&(l=document.currentScript.src),r&&(l=r),l=0!==l.indexOf("blob:")?l.substr(0,l.replace(/[?#].*/,"").lastIndexOf("/")+1):"",u&&(i=t=>{var n=new XMLHttpRequest;return n.open("GET",t,!1),n.responseType="arraybuffer",n.send(null),new Uint8Array(n.response)})),o.print||console.log.bind(console);var c,f,h=o.printErr||console.warn.bind(console);Object.assign(o,s),s=null,o.arguments&&o.arguments,o.thisProgram&&o.thisProgram,o.quit&&o.quit,o.wasmBinary&&(c=o.wasmBinary),o.noExitRuntime,"object"!=typeof WebAssembly&&b("no native wasm support detected");var m,d,p,g=!1;function v(){var t=f.buffer;o.HEAP8=m=new Int8Array(t),o.HEAP16=new Int16Array(t),o.HEAP32=new Int32Array(t),o.HEAPU8=d=new Uint8Array(t),o.HEAPU16=new Uint16Array(t),o.HEAPU32=p=new Uint32Array(t),o.HEAPF32=new Float32Array(t),o.HEAPF64=new Float64Array(t)}var y=[],w=[],E=[],A=0,C=null,_=null;function b(t){o.onAbort&&o.onAbort(t),h(t="Aborted("+t+")"),g=!0,t+=". Build with -sASSERTIONS for more info.";var n=new WebAssembly.RuntimeError(t);throw e(n),n}var I,N;function S(t){return t.startsWith("data:application/octet-stream;base64,")}function M(t){try{if(t==I&&c)return new Uint8Array(c);if(i)return i(t);throw"both async and sync fetching of the wasm failed"}catch(t){b(t)}}function T(t,n,e){return function(t){return c||!a&&!u||"function"!=typeof fetch?Promise.resolve().then((function(){return M(t)})):fetch(t,{credentials:"same-origin"}).then((function(n){if(!n.ok)throw"failed to load wasm binary file at '"+t+"'";return n.arrayBuffer()})).catch((function(){return M(t)}))}(t).then((function(t){return WebAssembly.instantiate(t,n)})).then((function(t){return t})).then(e,(function(t){h("failed to asynchronously prepare wasm: "+t),b(t)}))}function O(t){for(;t.length>0;)t.shift()(o)}function P(t){this.excPtr=t,this.ptr=t-24,this.set_type=function(t){p[this.ptr+4>>2]=t},this.get_type=function(){return p[this.ptr+4>>2]},this.set_destructor=function(t){p[this.ptr+8>>2]=t},this.get_destructor=function(){return p[this.ptr+8>>2]},this.set_caught=function(t){t=t?1:0,m[this.ptr+12|0]=t},this.get_caught=function(){return 0!=m[this.ptr+12|0]},this.set_rethrown=function(t){t=t?1:0,m[this.ptr+13|0]=t},this.get_rethrown=function(){return 0!=m[this.ptr+13|0]},this.init=function(t,n){this.set_adjusted_ptr(0),this.set_type(t),this.set_destructor(n)},this.set_adjusted_ptr=function(t){p[this.ptr+16>>2]=t},this.get_adjusted_ptr=function(){return p[this.ptr+16>>2]},this.get_exception_ptr=function(){if(G(this.get_type()))return p[this.excPtr>>2];var t=this.get_adjusted_ptr();return 0!==t?t:this.excPtr}}function x(t){var n=f.buffer;try{return f.grow(t-n.byteLength+65535>>>16),v(),1}catch(t){}}function L(t){return o["_"+t]}S(I="wasmDbscan.wasm")||(N=I,I=o.locateFile?o.locateFile(N,l):l+N);var R="undefined"!=typeof TextDecoder?new TextDecoder("utf8"):void 0;function F(t,n,e,r,o){var i={string:t=>{var n=0;return null!=t&&0!==t&&(n=function(t){var n=function(t){for(var n=0,e=0;e<t.length;++e){var r=t.charCodeAt(e);r<=127?n++:r<=2047?n+=2:r>=55296&&r<=57343?(n+=4,++e):n+=3}return n}(t)+1,e=V(n);return function(t,n,e){!function(t,n,e,r){if(!(r>0))return 0;for(var o=e+r-1,i=0;i<t.length;++i){var s=t.charCodeAt(i);if(s>=55296&&s<=57343&&(s=65536+((1023&s)<<10)|1023&t.charCodeAt(++i)),s<=127){if(e>=o)break;n[e++]=s}else if(s<=2047){if(e+1>=o)break;n[e++]=192|s>>6,n[e++]=128|63&s}else if(s<=65535){if(e+2>=o)break;n[e++]=224|s>>12,n[e++]=128|s>>6&63,n[e++]=128|63&s}else{if(e+3>=o)break;n[e++]=240|s>>18,n[e++]=128|s>>12&63,n[e++]=128|s>>6&63,n[e++]=128|63&s}}n[e]=0}(t,d,n,e)}(t,e,n),e}(t)),n},array:t=>{var n,e,r=V(t.length);return n=t,e=r,m.set(n,e),r}},s=L(t),a=[],u=0;if(r)for(var l=0;l<r.length;l++){var c=i[e[l]];c?(0===u&&(u=B()),a[l]=c(r[l])):a[l]=r[l]}var f=s.apply(null,a);return function(t){return 0!==u&&k(u),function(t){return"string"===n?(e=t)?function(t,n,e){for(var r=n+e,o=n;t[o]&&!(o>=r);)++o;if(o-n>16&&t.buffer&&R)return R.decode(t.subarray(n,o));for(var i="";n<o;){var s=t[n++];if(128&s){var a=63&t[n++];if(192!=(224&s)){var u=63&t[n++];if((s=224==(240&s)?(15&s)<<12|a<<6|u:(7&s)<<18|a<<12|u<<6|63&t[n++])<65536)i+=String.fromCharCode(s);else{var l=s-65536;i+=String.fromCharCode(55296|l>>10,56320|1023&l)}}else i+=String.fromCharCode((31&s)<<6|a)}else i+=String.fromCharCode(s)}return i}(d,e,r):"":"boolean"===n?Boolean(t):t;var e,r}(t)}(f)}var D,U={__cxa_throw:function(t,n,e){throw new P(t).init(n,e),t},abort:function(){b("")},emscripten_memcpy_big:function(t,n,e){d.copyWithin(t,n,n+e)},emscripten_resize_heap:function(t){var n,e=d.length,r=2147483648;if((t>>>=0)>r)return!1;for(var o=1;o<=4;o*=2){var i=e*(1+.2/o);if(i=Math.min(i,t+100663296),x(Math.min(r,(n=Math.max(t,i))+(65536-n%65536)%65536)))return!0}return!1}},B=(function(){var t,n,r,i,s={env:U,wasi_snapshot_preview1:U};function a(t,n){var e,r=t.exports;return o.asm=r,f=o.asm.memory,v(),o.asm.__indirect_function_table,e=o.asm.__wasm_call_ctors,w.unshift(e),function(){if(A--,o.monitorRunDependencies&&o.monitorRunDependencies(A),0==A&&(null!==C&&(clearInterval(C),C=null),_)){var t=_;_=null,t()}}(),r}if(A++,o.monitorRunDependencies&&o.monitorRunDependencies(A),o.instantiateWasm)try{return o.instantiateWasm(s,a)}catch(t){h("Module.instantiateWasm callback failed with error: "+t),e(t)}(t=c,n=I,r=s,i=function(t){a(t.instance)},t||"function"!=typeof WebAssembly.instantiateStreaming||S(n)||"function"!=typeof fetch?T(n,r,i):fetch(n,{credentials:"same-origin"}).then((function(t){return WebAssembly.instantiateStreaming(t,r).then(i,(function(t){return h("wasm streaming compile failed: "+t),h("falling back to ArrayBuffer instantiation"),T(n,r,i)}))}))).catch(e)}(),o._dbscan=function(){return(o._dbscan=o.asm.dbscan).apply(null,arguments)},o._malloc=function(){return(o._malloc=o.asm.malloc).apply(null,arguments)},o._free=function(){return(o._free=o.asm.free).apply(null,arguments)},function(){return(B=o.asm.stackSave).apply(null,arguments)}),k=function(){return(k=o.asm.stackRestore).apply(null,arguments)},V=function(){return(V=o.asm.stackAlloc).apply(null,arguments)},G=function(){return(G=o.asm.__cxa_is_pointer_type).apply(null,arguments)};function q(){function t(){D||(D=!0,o.calledRun=!0,g||(O(w),n(o),o.onRuntimeInitialized&&o.onRuntimeInitialized(),function(){if(o.postRun)for("function"==typeof o.postRun&&(o.postRun=[o.postRun]);o.postRun.length;)t=o.postRun.shift(),E.unshift(t);var t;O(E)}()))}A>0||(function(){if(o.preRun)for("function"==typeof o.preRun&&(o.preRun=[o.preRun]);o.preRun.length;)t=o.preRun.shift(),y.unshift(t);var t;O(y)}(),A>0||(o.setStatus?(o.setStatus("Running..."),setTimeout((function(){setTimeout((function(){o.setStatus("")}),1),t()}),1)):t()))}if(o.ccall=F,o.cwrap=function(t,n,e,r){var o=!e||e.every((t=>"number"===t||"boolean"===t));return"string"!==n&&o&&!r?L(t):function(){return F(t,n,e,arguments)}},_=function t(){D||q(),D||(_=t)},o.preInit)for("function"==typeof o.preInit&&(o.preInit=[o.preInit]);o.preInit.length>0;)o.preInit.pop()();return q(),t.ready});"object"==typeof exports?t.exports=o:"function"==typeof define&&e.amdO?define([],(function(){return o})):"object"==typeof exports&&(exports.exportCppDbscanLib=o)},7939:(t,n,e)=>{"use strict";e.d(n,{A:()=>a});var r=e(1354),o=e.n(r),i=e(6314),s=e.n(i)()(o());s.push([t.id,".scatter_plot_link {\n position: absolute!important;\n right: 10px;\n}\n\n.cliffs_grid {\n top: 10px;\n}\n\n.show_only_cliffs {\n top: 30px;\n}\n\n.ml-dim-reduction-settings-input i.grok-icon.grok-font-icon-settings {\n font-size: 18px;\n position: absolute;\n height: 28px;\n \n}\n\n.ml-dim-reduction-settings-input i.grok-icon.grok-font-icon-settings:not(.ml-dim-reduction-column-editor-input-root i) {\n left: -20px;\n}\n.dlg-dimensionality-reduction.ui-form, .dlg-markov-clustering.ui-form, .dlg-markov-clustering.ui-form .ui-form, .dlg-dimensionality-reduction.ui-form .ui-form {\n max-width: unset;\n}\n\n.ml-dim-reduction-column-editor-input-root label {\n display: none !important;\n}\n\n.dim-reduction-dialog-form > .ui-input-root, .dim-reduction-dialog-form > div > .ui-input-root {\n margin-left: 10px;\n}\n\n.ml-dim-reduction-column-editor-input-root input, .ml-dim-reduction-column-editor-input-root select {\n margin-left: 20px !important;\n}\n\nh3.ml-dim-reduction-column-editor-input-root {\n margin: 0 !important;\n}\n\n.ml-dim-reduction-column-editor-root, .ml-dim-reduction-column-editor-header-root {\n display: flex;\n flex-direction: row;\n align-items: center;\n margin-bottom: 10px !important;\n width: 700px !important;\n}\n\n.ml-dim-reduction-column-editor-column-title {\n text-overflow: ellipsis;\n overflow: hidden;\n}\n\n.ml-dim-reduction-column-editor-header-root > h1:not(:first-child) {\n margin-left: 20px !important;\n}\n\n.ml-dim-reduction-column-editor-table-root .header > td:not(:first-child) {\n padding-left: 32px;\n}","",{version:3,sources:["webpack://./node_modules/@datagrok-libraries/ml/css/styles.css"],names:[],mappings:"AAAA;IACI,4BAA4B;IAC5B,WAAW;AACf;;AAEA;IACI,SAAS;AACb;;AAEA;IACI,SAAS;AACb;;AAEA;IACI,eAAe;IACf,kBAAkB;IAClB,YAAY;;AAEhB;;AAEA;IACI,WAAW;AACf;AACA;IACI,gBAAgB;AACpB;;AAEA;IACI,wBAAwB;AAC5B;;AAEA;IACI,iBAAiB;AACrB;;AAEA;IACI,4BAA4B;AAChC;;AAEA;IACI,oBAAoB;AACxB;;AAEA;IACI,aAAa;IACb,mBAAmB;IACnB,mBAAmB;IACnB,8BAA8B;IAC9B,uBAAuB;AAC3B;;AAEA;IACI,uBAAuB;IACvB,gBAAgB;AACpB;;AAEA;IACI,4BAA4B;AAChC;;AAEA;IACI,kBAAkB;AACtB",sourcesContent:[".scatter_plot_link {\n position: absolute!important;\n right: 10px;\n}\n\n.cliffs_grid {\n top: 10px;\n}\n\n.show_only_cliffs {\n top: 30px;\n}\n\n.ml-dim-reduction-settings-input i.grok-icon.grok-font-icon-settings {\n font-size: 18px;\n position: absolute;\n height: 28px;\n \n}\n\n.ml-dim-reduction-settings-input i.grok-icon.grok-font-icon-settings:not(.ml-dim-reduction-column-editor-input-root i) {\n left: -20px;\n}\n.dlg-dimensionality-reduction.ui-form, .dlg-markov-clustering.ui-form, .dlg-markov-clustering.ui-form .ui-form, .dlg-dimensionality-reduction.ui-form .ui-form {\n max-width: unset;\n}\n\n.ml-dim-reduction-column-editor-input-root label {\n display: none !important;\n}\n\n.dim-reduction-dialog-form > .ui-input-root, .dim-reduction-dialog-form > div > .ui-input-root {\n margin-left: 10px;\n}\n\n.ml-dim-reduction-column-editor-input-root input, .ml-dim-reduction-column-editor-input-root select {\n margin-left: 20px !important;\n}\n\nh3.ml-dim-reduction-column-editor-input-root {\n margin: 0 !important;\n}\n\n.ml-dim-reduction-column-editor-root, .ml-dim-reduction-column-editor-header-root {\n display: flex;\n flex-direction: row;\n align-items: center;\n margin-bottom: 10px !important;\n width: 700px !important;\n}\n\n.ml-dim-reduction-column-editor-column-title {\n text-overflow: ellipsis;\n overflow: hidden;\n}\n\n.ml-dim-reduction-column-editor-header-root > h1:not(:first-child) {\n margin-left: 20px !important;\n}\n\n.ml-dim-reduction-column-editor-table-root .header > td:not(:first-child) {\n padding-left: 32px;\n}"],sourceRoot:""}]);const a=s},6314:t=>{"use strict";t.exports=function(t){var n=[];return n.toString=function(){return this.map((function(n){var e="",r=void 0!==n[5];return n[4]&&(e+="@supports (".concat(n[4],") {")),n[2]&&(e+="@media ".concat(n[2]," {")),r&&(e+="@layer".concat(n[5].length>0?" ".concat(n[5]):""," {")),e+=t(n),r&&(e+="}"),n[2]&&(e+="}"),n[4]&&(e+="}"),e})).join("")},n.i=function(t,e,r,o,i){"string"==typeof t&&(t=[[null,t,void 0]]);var s={};if(r)for(var a=0;a<this.length;a++){var u=this[a][0];null!=u&&(s[u]=!0)}for(var l=0;l<t.length;l++){var c=[].concat(t[l]);r&&s[c[0]]||(void 0!==i&&(void 0===c[5]||(c[1]="@layer".concat(c[5].length>0?" ".concat(c[5]):""," {").concat(c[1],"}")),c[5]=i),e&&(c[2]?(c[1]="@media ".concat(c[2]," {").concat(c[1],"}"),c[2]=e):c[2]=e),o&&(c[4]?(c[1]="@supports (".concat(c[4],") {").concat(c[1],"}"),c[4]=o):c[4]="".concat(o)),n.push(c))}},n}},1354:t=>{"use strict";t.exports=function(t){var n=t[1],e=t[3];if(!e)return n;if("function"==typeof btoa){var r=btoa(unescape(encodeURIComponent(JSON.stringify(e)))),o="sourceMappingURL=data:application/json;charset=utf-8;base64,".concat(r),i="/*# ".concat(o," */");return[n].concat([i]).join("\n")}return[n].join("\n")}},6572:function(t){var n;t.exports=(n=function(t,n){var e=Array.prototype.concat,r=Array.prototype.slice,o=Object.prototype.toString;function i(n,e){var r=n>e?n:e;return t.pow(10,17-~~(t.log(r>0?r:-r)*t.LOG10E))}var s=Array.isArray||function(t){return"[object Array]"===o.call(t)};function a(t){return"[object Function]"===o.call(t)}function u(t){return"number"==typeof t&&t-t==0}function l(){return new l._init(arguments)}function c(){return 0}function f(){return 1}function h(t,n){return t===n?1:0}l.fn=l.prototype,l._init=function(t){if(s(t[0]))if(s(t[0][0])){a(t[1])&&(t[0]=l.map(t[0],t[1]));for(var n=0;n<t[0].length;n++)this[n]=t[0][n];this.length=t[0].length}else this[0]=a(t[1])?l.map(t[0],t[1]):t[0],this.length=1;else if(u(t[0]))this[0]=l.seq.apply(null,t),this.length=1;else{if(t[0]instanceof l)return l(t[0].toArray());this[0]=[],this.length=1}return this},l._init.prototype=l.prototype,l._init.constructor=l,l.utils={calcRdx:i,isArray:s,isFunction:a,isNumber:u,toVector:function(t){return e.apply([],t)}},l._random_fn=t.random,l.setRandom=function(t){if("function"!=typeof t)throw new TypeError("fn is not a function");l._random_fn=t},l.extend=function(t){var n,e;if(1===arguments.length){for(e in t)l[e]=t[e];return this}for(n=1;n<arguments.length;n++)for(e in arguments[n])t[e]=arguments[n][e];return t},l.rows=function(t){return t.length||1},l.cols=function(t){return t[0].length||1},l.dimensions=function(t){return{rows:l.rows(t),cols:l.cols(t)}},l.row=function(t,n){return s(n)?n.map((function(n){return l.row(t,n)})):t[n]},l.rowa=function(t,n){return l.row(t,n)},l.col=function(t,n){if(s(n)){var e=l.arange(t.length).map((function(){return new Array(n.length)}));return n.forEach((function(n,r){l.arange(t.length).forEach((function(o){e[o][r]=t[o][n]}))})),e}for(var r=new Array(t.length),o=0;o<t.length;o++)r[o]=[t[o][n]];return r},l.cola=function(t,n){return l.col(t,n).map((function(t){return t[0]}))},l.diag=function(t){for(var n=l.rows(t),e=new Array(n),r=0;r<n;r++)e[r]=[t[r][r]];return e},l.antidiag=function(t){for(var n=l.rows(t)-1,e=new Array(n),r=0;n>=0;n--,r++)e[r]=[t[r][n]];return e},l.transpose=function(t){var n,e,r,o,i,a=[];for(s(t[0])||(t=[t]),e=t.length,r=t[0].length,i=0;i<r;i++){for(n=new Array(e),o=0;o<e;o++)n[o]=t[o][i];a.push(n)}return 1===a.length?a[0]:a},l.map=function(t,n,e){var r,o,i,a,u;for(s(t[0])||(t=[t]),o=t.length,i=t[0].length,a=e?t:new Array(o),r=0;r<o;r++)for(a[r]||(a[r]=new Array(i)),u=0;u<i;u++)a[r][u]=n(t[r][u],r,u);return 1===a.length?a[0]:a},l.cumreduce=function(t,n,e){var r,o,i,a,u;for(s(t[0])||(t=[t]),o=t.length,i=t[0].length,a=e?t:new Array(o),r=0;r<o;r++)for(a[r]||(a[r]=new Array(i)),i>0&&(a[r][0]=t[r][0]),u=1;u<i;u++)a[r][u]=n(a[r][u-1],t[r][u]);return 1===a.length?a[0]:a},l.alter=function(t,n){return l.map(t,n,!0)},l.create=function(t,n,e){var r,o,i=new Array(t);for(a(n)&&(e=n,n=t),r=0;r<t;r++)for(i[r]=new Array(n),o=0;o<n;o++)i[r][o]=e(r,o);return i},l.zeros=function(t,n){return u(n)||(n=t),l.create(t,n,c)},l.ones=function(t,n){return u(n)||(n=t),l.create(t,n,f)},l.rand=function(t,n){return u(n)||(n=t),l.create(t,n,l._random_fn)},l.identity=function(t,n){return u(n)||(n=t),l.create(t,n,h)},l.symmetric=function(t){var n,e,r=t.length;if(t.length!==t[0].length)return!1;for(n=0;n<r;n++)for(e=0;e<r;e++)if(t[e][n]!==t[n][e])return!1;return!0},l.clear=function(t){return l.alter(t,c)},l.seq=function(t,n,e,r){a(r)||(r=!1);var o,s=[],u=i(t,n),l=(n*u-t*u)/((e-1)*u),c=t;for(o=0;c<=n&&o<e;c=(t*u+l*u*++o)/u)s.push(r?r(c,o):c);return s},l.arange=function(t,e,r){var o,i=[];if(r=r||1,e===n&&(e=t,t=0),t===e||0===r)return[];if(t<e&&r<0)return[];if(t>e&&r>0)return[];if(r>0)for(o=t;o<e;o+=r)i.push(o);else for(o=t;o>e;o+=r)i.push(o);return i},l.slice=function(){function t(t,e,r,o){var i,s=[],a=t.length;if(e===n&&r===n&&o===n)return l.copy(t);if(o=o||1,(e=(e=e||0)>=0?e:a+e)===(r=(r=r||t.length)>=0?r:a+r)||0===o)return[];if(e<r&&o<0)return[];if(e>r&&o>0)return[];if(o>0)for(i=e;i<r;i+=o)s.push(t[i]);else for(i=e;i>r;i+=o)s.push(t[i]);return s}return function(n,e){var r,o;return u((e=e||{}).row)?u(e.col)?n[e.row][e.col]:t(l.rowa(n,e.row),(r=e.col||{}).start,r.end,r.step):u(e.col)?t(l.cola(n,e.col),(o=e.row||{}).start,o.end,o.step):(o=e.row||{},r=e.col||{},t(n,o.start,o.end,o.step).map((function(n){return t(n,r.start,r.end,r.step)})))}}(),l.sliceAssign=function(e,r,o){var i,s;if(u(r.row)){if(u(r.col))return e[r.row][r.col]=o;r.col=r.col||{},r.col.start=r.col.start||0,r.col.end=r.col.end||e[0].length,r.col.step=r.col.step||1,i=l.arange(r.col.start,t.min(e.length,r.col.end),r.col.step);var a=r.row;return i.forEach((function(t,n){e[a][t]=o[n]})),e}if(u(r.col)){r.row=r.row||{},r.row.start=r.row.start||0,r.row.end=r.row.end||e.length,r.row.step=r.row.step||1,s=l.arange(r.row.start,t.min(e[0].length,r.row.end),r.row.step);var c=r.col;return s.forEach((function(t,n){e[t][c]=o[n]})),e}return o[0].length===n&&(o=[o]),r.row.start=r.row.start||0,r.row.end=r.row.end||e.length,r.row.step=r.row.step||1,r.col.start=r.col.start||0,r.col.end=r.col.end||e[0].length,r.col.step=r.col.step||1,s=l.arange(r.row.start,t.min(e.length,r.row.end),r.row.step),i=l.arange(r.col.start,t.min(e[0].length,r.col.end),r.col.step),s.forEach((function(t,n){i.forEach((function(r,i){e[t][r]=o[n][i]}))})),e},l.diagonal=function(t){var n=l.zeros(t.length,t.length);return t.forEach((function(t,e){n[e][e]=t})),n},l.copy=function(t){return t.map((function(t){return u(t)?t:t.map((function(t){return t}))}))};var m=l.prototype;return m.length=0,m.push=Array.prototype.push,m.sort=Array.prototype.sort,m.splice=Array.prototype.splice,m.slice=Array.prototype.slice,m.toArray=function(){return this.length>1?r.call(this):r.call(this)[0]},m.map=function(t,n){return l(l.map(this,t,n))},m.cumreduce=function(t,n){return l(l.cumreduce(this,t,n))},m.alter=function(t){return l.alter(this,t),this},function(t){for(var n=0;n<t.length;n++)!function(t){m[t]=function(n){var e,r=this;return n?(setTimeout((function(){n.call(r,m[t].call(r))})),this):(e=l[t](this),s(e)?l(e):e)}}(t[n])}("transpose clear symmetric rows cols dimensions diag antidiag".split(" ")),function(t){for(var n=0;n<t.length;n++)!function(t){m[t]=function(n,e){var r=this;return e?(setTimeout((function(){e.call(r,m[t].call(r,n))})),this):l(l[t](this,n))}}(t[n])}("row col".split(" ")),function(t){for(var n=0;n<t.length;n++)!function(t){m[t]=function(){return l(l[t].apply(null,arguments))}}(t[n])}("create zeros ones rand identity".split(" ")),l}(Math),function(t,n){var e=t.utils.isFunction;function r(t,n){return t-n}function o(t,e,r){return n.max(e,n.min(t,r))}t.sum=function(t){for(var n=0,e=t.length;--e>=0;)n+=t[e];return n},t.sumsqrd=function(t){for(var n=0,e=t.length;--e>=0;)n+=t[e]*t[e];return n},t.sumsqerr=function(n){for(var e,r=t.mean(n),o=0,i=n.length;--i>=0;)o+=(e=n[i]-r)*e;return o},t.sumrow=function(t){for(var n=0,e=t.length;--e>=0;)n+=t[e];return n},t.product=function(t){for(var n=1,e=t.length;--e>=0;)n*=t[e];return n},t.min=function(t){for(var n=t[0],e=0;++e<t.length;)t[e]<n&&(n=t[e]);return n},t.max=function(t){for(var n=t[0],e=0;++e<t.length;)t[e]>n&&(n=t[e]);return n},t.unique=function(t){for(var n={},e=[],r=0;r<t.length;r++)n[t[r]]||(n[t[r]]=!0,e.push(t[r]));return e},t.mean=function(n){return t.sum(n)/n.length},t.meansqerr=function(n){return t.sumsqerr(n)/n.length},t.geomean=function(e){var r=e.map(n.log),o=t.mean(r);return n.exp(o)},t.median=function(t){var n=t.length,e=t.slice().sort(r);return 1&n?e[n/2|0]:(e[n/2-1]+e[n/2])/2},t.cumsum=function(n){return t.cumreduce(n,(function(t,n){return t+n}))},t.cumprod=function(n){return t.cumreduce(n,(function(t,n){return t*n}))},t.diff=function(t){var n,e=[],r=t.length;for(n=1;n<r;n++)e.push(t[n]-t[n-1]);return e},t.rank=function(t){var n,e=[],o={};for(n=0;n<t.length;n++)o[u=t[n]]?o[u]++:(o[u]=1,e.push(u));var i=e.sort(r),s={},a=1;for(n=0;n<i.length;n++){var u,l=o[u=i[n]],c=(a+(a+l-1))/2;s[u]=c,a+=l}return t.map((function(t){return s[t]}))},t.mode=function(t){var n,e=t.length,o=t.slice().sort(r),i=1,s=0,a=0,u=[];for(n=0;n<e;n++)o[n]===o[n+1]?i++:(i>s?(u=[o[n]],s=i,a=0):i===s&&(u.push(o[n]),a++),i=1);return 0===a?u[0]:u},t.range=function(n){return t.max(n)-t.min(n)},t.variance=function(n,e){return t.sumsqerr(n)/(n.length-(e?1:0))},t.pooledvariance=function(n){return n.reduce((function(n,e){return n+t.sumsqerr(e)}),0)/(n.reduce((function(t,n){return t+n.length}),0)-n.length)},t.deviation=function(n){for(var e=t.mean(n),r=n.length,o=new Array(r),i=0;i<r;i++)o[i]=n[i]-e;return o},t.stdev=function(e,r){return n.sqrt(t.variance(e,r))},t.pooledstdev=function(e){return n.sqrt(t.pooledvariance(e))},t.meandev=function(e){for(var r=t.mean(e),o=[],i=e.length-1;i>=0;i--)o.push(n.abs(e[i]-r));return t.mean(o)},t.meddev=function(e){for(var r=t.median(e),o=[],i=e.length-1;i>=0;i--)o.push(n.abs(e[i]-r));return t.median(o)},t.coeffvar=function(n){return t.stdev(n)/t.mean(n)},t.quartiles=function(t){var e=t.length,o=t.slice().sort(r);return[o[n.round(e/4)-1],o[n.round(e/2)-1],o[n.round(3*e/4)-1]]},t.quantiles=function(t,e,i,s){var a,u,l,c,f,h=t.slice().sort(r),m=[e.length],d=t.length;for(void 0===i&&(i=3/8),void 0===s&&(s=3/8),a=0;a<e.length;a++)l=d*(u=e[a])+(i+u*(1-i-s)),c=n.floor(o(l,1,d-1)),f=o(l-c,0,1),m[a]=(1-f)*h[c-1]+f*h[c];return m},t.percentile=function(t,n,e){var o=t.slice().sort(r),i=n*(o.length+(e?1:-1))+(e?0:1),s=parseInt(i),a=i-s;return s+1<o.length?o[s-1]+a*(o[s]-o[s-1]):o[s-1]},t.percentileOfScore=function(t,n,e){var r,o,i=0,s=t.length,a=!1;for("strict"===e&&(a=!0),o=0;o<s;o++)r=t[o],(a&&r<n||!a&&r<=n)&&i++;return i/s},t.histogram=function(e,r){r=r||4;var o,i=t.min(e),s=(t.max(e)-i)/r,a=e.length,u=[];for(o=0;o<r;o++)u[o]=0;for(o=0;o<a;o++)u[n.min(n.floor((e[o]-i)/s),r-1)]+=1;return u},t.covariance=function(n,e){var r,o=t.mean(n),i=t.mean(e),s=n.length,a=new Array(s);for(r=0;r<s;r++)a[r]=(n[r]-o)*(e[r]-i);return t.sum(a)/(s-1)},t.corrcoeff=function(n,e){return t.covariance(n,e)/t.stdev(n,1)/t.stdev(e,1)},t.spearmancoeff=function(n,e){return n=t.rank(n),e=t.rank(e),t.corrcoeff(n,e)},t.stanMoment=function(e,r){for(var o=t.mean(e),i=t.stdev(e),s=e.length,a=0,u=0;u<s;u++)a+=n.pow((e[u]-o)/i,r);return a/e.length},t.skewness=function(n){return t.stanMoment(n,3)},t.kurtosis=function(n){return t.stanMoment(n,4)-3};var i=t.prototype;!function(n){for(var r=0;r<n.length;r++)!function(n){i[n]=function(r,o){var s=[],a=0,u=this;if(e(r)&&(o=r,r=!1),o)return setTimeout((function(){o.call(u,i[n].call(u,r))})),this;if(this.length>1){for(u=!0===r?this:this.transpose();a<u.length;a++)s[a]=t[n](u[a]);return s}return t[n](this[0],r)}}(n[r])}("cumsum cumprod".split(" ")),function(n){for(var r=0;r<n.length;r++)!function(n){i[n]=function(r,o){var s=[],a=0,u=this;if(e(r)&&(o=r,r=!1),o)return setTimeout((function(){o.call(u,i[n].call(u,r))})),this;if(this.length>1){for("sumrow"!==n&&(u=!0===r?this:this.transpose());a<u.length;a++)s[a]=t[n](u[a]);return!0===r?t[n](t.utils.toVector(s)):s}return t[n](this[0],r)}}(n[r])}("sum sumsqrd sumsqerr sumrow product min max unique mean meansqerr geomean median diff rank mode range variance deviation stdev meandev meddev coeffvar quartiles histogram skewness kurtosis".split(" ")),function(n){for(var r=0;r<n.length;r++)!function(n){i[n]=function(){var r,o=[],s=0,a=this,u=Array.prototype.slice.call(arguments);if(e(u[u.length-1])){r=u[u.length-1];var l=u.slice(0,u.length-1);return setTimeout((function(){r.call(a,i[n].apply(a,l))})),this}r=void 0;var c=function(e){return t[n].apply(a,[e].concat(u))};if(this.length>1){for(a=a.transpose();s<a.length;s++)o[s]=c(a[s]);return o}return c(this[0])}}(n[r])}("quantiles percentileOfScore".split(" "))}(n,Math),function(t,n){t.gammaln=function(t){var e,r,o,i=0,s=[76.18009172947146,-86.50532032941678,24.01409824083091,-1.231739572450155,.001208650973866179,-5395239384953e-18],a=1.000000000190015;for(o=(r=e=t)+5.5,o-=(e+.5)*n.log(o);i<6;i++)a+=s[i]/++r;return n.log(2.5066282746310007*a/e)-o},t.loggam=function(t){var e,r,o,i,s,a,u,l=[.08333333333333333,-.002777777777777778,.0007936507936507937,-.0005952380952380952,.0008417508417508418,-.001917526917526918,.00641025641025641,-.02955065359477124,.1796443723688307,-1.3924322169059];if(e=t,u=0,1==t||2==t)return 0;for(t<=7&&(e=t+(u=n.floor(7-t))),r=1/(e*e),o=2*n.PI,s=l[9],a=8;a>=0;a--)s*=r,s+=l[a];if(i=s/e+.5*n.log(o)+(e-.5)*n.log(e)-e,t<=7)for(a=1;a<=u;a++)i-=n.log(e-1),e-=1;return i},t.gammafn=function(t){var e,r,o,i,s=[-1.716185138865495,24.76565080557592,-379.80425647094563,629.3311553128184,866.9662027904133,-31451.272968848367,-36144.413418691176,66456.14382024054],a=[-30.8402300119739,315.35062697960416,-1015.1563674902192,-3107.771671572311,22538.11842098015,4755.846277527881,-134659.9598649693,-115132.2596755535],u=!1,l=0,c=0,f=0,h=t;if(t>171.6243769536076)return 1/0;if(h<=0){if(!(i=h%1+36e-17))return 1/0;u=(1&h?-1:1)*n.PI/n.sin(n.PI*i),h=1-h}for(o=h,r=h<1?h++:(h-=l=(0|h)-1)-1,e=0;e<8;++e)f=(f+s[e])*r,c=c*r+a[e];if(i=f/c+1,o<h)i/=o;else if(o>h)for(e=0;e<l;++e)i*=h,h++;return u&&(i=u/i),i},t.gammap=function(n,e){return t.lowRegGamma(n,e)*t.gammafn(n)},t.lowRegGamma=function(e,r){var o,i=t.gammaln(e),s=e,a=1/e,u=a,l=r+1-e,c=1/1e-30,f=1/l,h=f,m=1,d=-~(8.5*n.log(e>=1?e:1/e)+.4*e+17);if(r<0||e<=0)return NaN;if(r<e+1){for(;m<=d;m++)a+=u*=r/++s;return a*n.exp(-r+e*n.log(r)-i)}for(;m<=d;m++)h*=(f=1/(f=(o=-m*(m-e))*f+(l+=2)))*(c=l+o/c);return 1-h*n.exp(-r+e*n.log(r)-i)},t.factorialln=function(n){return n<0?NaN:t.gammaln(n+1)},t.factorial=function(n){return n<0?NaN:t.gammafn(n+1)},t.combination=function(e,r){return e>170||r>170?n.exp(t.combinationln(e,r)):t.factorial(e)/t.factorial(r)/t.factorial(e-r)},t.combinationln=function(n,e){return t.factorialln(n)-t.factorialln(e)-t.factorialln(n-e)},t.permutation=function(n,e){return t.factorial(n)/t.factorial(n-e)},t.betafn=function(e,r){if(!(e<=0||r<=0))return e+r>170?n.exp(t.betaln(e,r)):t.gammafn(e)*t.gammafn(r)/t.gammafn(e+r)},t.betaln=function(n,e){return t.gammaln(n)+t.gammaln(e)-t.gammaln(n+e)},t.betacf=function(t,e,r){var o,i,s,a,u=1e-30,l=1,c=e+r,f=e+1,h=e-1,m=1,d=1-c*t/f;for(n.abs(d)<u&&(d=u),a=d=1/d;l<=100&&(d=1+(i=l*(r-l)*t/((h+(o=2*l))*(e+o)))*d,n.abs(d)<u&&(d=u),m=1+i/m,n.abs(m)<u&&(m=u),a*=(d=1/d)*m,d=1+(i=-(e+l)*(c+l)*t/((e+o)*(f+o)))*d,n.abs(d)<u&&(d=u),m=1+i/m,n.abs(m)<u&&(m=u),a*=s=(d=1/d)*m,!(n.abs(s-1)<3e-7));l++);return a},t.gammapinv=function(e,r){var o,i,s,a,u,l,c=0,f=r-1,h=t.gammaln(r);if(e>=1)return n.max(100,r+100*n.sqrt(r));if(e<=0)return 0;for(r>1?(u=n.log(f),l=n.exp(f*(u-1)-h),a=e<.5?e:1-e,o=(2.30753+.27061*(i=n.sqrt(-2*n.log(a))))/(1+i*(.99229+.04481*i))-i,e<.5&&(o=-o),o=n.max(.001,r*n.pow(1-1/(9*r)-o/(3*n.sqrt(r)),3))):o=e<(i=1-r*(.253+.12*r))?n.pow(e/i,1/r):1-n.log(1-(e-i)/(1-i));c<12;c++){if(o<=0)return 0;if((o-=i=(s=(t.lowRegGamma(r,o)-e)/(i=r>1?l*n.exp(-(o-f)+f*(n.log(o)-u)):n.exp(-o+f*n.log(o)-h)))/(1-.5*n.min(1,s*((r-1)/o-1))))<=0&&(o=.5*(o+i)),n.abs(i)<1e-8*o)break}return o},t.erf=function(t){var e,r,o,i,s=[-1.3026537197817094,.6419697923564902,.019476473204185836,-.00956151478680863,-.000946595344482036,.000366839497852761,42523324806907e-18,-20278578112534e-18,-1624290004647e-18,130365583558e-17,1.5626441722e-8,-8.5238095915e-8,6.529054439e-9,5.059343495e-9,-9.91364156e-10,-2.27365122e-10,96467911e-18,2394038e-18,-6886027e-18,894487e-18,313092e-18,-112708e-18,381e-18,7106e-18,-1523e-18,-94e-18,121e-18,-28e-18],a=s.length-1,u=!1,l=0,c=0;for(t<0&&(t=-t,u=!0),r=4*(e=2/(2+t))-2;a>0;a--)o=l,l=r*l-c+s[a],c=o;return i=e*n.exp(-t*t+.5*(s[0]+r*l)-c),u?i-1:1-i},t.erfc=function(n){return 1-t.erf(n)},t.erfcinv=function(e){var r,o,i,s,a=0;if(e>=2)return-100;if(e<=0)return 100;for(s=e<1?e:2-e,r=-.70711*((2.30753+.27061*(i=n.sqrt(-2*n.log(s/2))))/(1+i*(.99229+.04481*i))-i);a<2;a++)r+=(o=t.erfc(r)-s)/(1.1283791670955126*n.exp(-r*r)-r*o);return e<1?r:-r},t.ibetainv=function(e,r,o){var i,s,a,u,l,c,f,h,m,d,p=r-1,g=o-1,v=0;if(e<=0)return 0;if(e>=1)return 1;for(r>=1&&o>=1?(a=e<.5?e:1-e,c=(2.30753+.27061*(u=n.sqrt(-2*n.log(a))))/(1+u*(.99229+.04481*u))-u,e<.5&&(c=-c),f=(c*c-3)/6,h=2/(1/(2*r-1)+1/(2*o-1)),m=c*n.sqrt(f+h)/h-(1/(2*o-1)-1/(2*r-1))*(f+5/6-2/(3*h)),c=r/(r+o*n.exp(2*m))):(i=n.log(r/(r+o)),s=n.log(o/(r+o)),c=e<(u=n.exp(r*i)/r)/(m=u+(l=n.exp(o*s)/o))?n.pow(r*m*e,1/r):1-n.pow(o*m*(1-e),1/o)),d=-t.gammaln(r)-t.gammaln(o)+t.gammaln(r+o);v<10;v++){if(0===c||1===c)return c;if((c-=u=(l=(t.ibeta(c,r,o)-e)/(u=n.exp(p*n.log(c)+g*n.log(1-c)+d)))/(1-.5*n.min(1,l*(p/c-g/(1-c)))))<=0&&(c=.5*(c+u)),c>=1&&(c=.5*(c+u+1)),n.abs(u)<1e-8*c&&v>0)break}return c},t.ibeta=function(e,r,o){var i=0===e||1===e?0:n.exp(t.gammaln(r+o)-t.gammaln(r)-t.gammaln(o)+r*n.log(e)+o*n.log(1-e));return!(e<0||e>1)&&(e<(r+1)/(r+o+2)?i*t.betacf(e,r,o)/r:1-i*t.betacf(1-e,o,r)/o)},t.randn=function(e,r){var o,i,s,a,u;if(r||(r=e),e)return t.create(e,r,(function(){return t.randn()}));do{o=t._random_fn(),i=1.7156*(t._random_fn()-.5),u=(s=o-.449871)*s+(a=n.abs(i)+.386595)*(.196*a-.25472*s)}while(u>.27597&&(u>.27846||i*i>-4*n.log(o)*o*o));return i/o},t.randg=function(e,r,o){var i,s,a,u,l,c,f=e;if(o||(o=r),e||(e=1),r)return(c=t.zeros(r,o)).alter((function(){return t.randg(e)})),c;e<1&&(e+=1),i=e-1/3,s=1/n.sqrt(9*i);do{do{u=1+s*(l=t.randn())}while(u<=0);u*=u*u,a=t._random_fn()}while(a>1-.331*n.pow(l,4)&&n.log(a)>.5*l*l+i*(1-u+n.log(u)));if(e==f)return i*u;do{a=t._random_fn()}while(0===a);return n.pow(a,1/f)*i*u},function(n){for(var e=0;e<n.length;e++)!function(n){t.fn[n]=function(){return t(t.map(this,(function(e){return t[n](e)})))}}(n[e])}("gammaln gammafn factorial factorialln".split(" ")),function(n){for(var e=0;e<n.length;e++)!function(n){t.fn[n]=function(){return t(t[n].apply(null,arguments))}}(n[e])}("randn".split(" "))}(n,Math),function(t,n){function e(t,e,r,o){for(var i,s=0,a=1,u=1,l=1,c=0,f=0;n.abs((u-f)/u)>o;)f=u,a=l+(i=-(e+c)*(e+r+c)*t/(e+2*c)/(e+2*c+1))*a,u=(s=u+i*s)+(i=(c+=1)*(r-c)*t/(e+2*c-1)/(e+2*c))*u,s/=l=a+i*l,a/=l,u/=l,l=1;return u/e}function r(e,r,o){var i=[.9815606342467192,.9041172563704749,.7699026741943047,.5873179542866175,.3678314989981802,.1252334085114689],s=[.04717533638651183,.10693932599531843,.16007832854334622,.20316742672306592,.2334925365383548,.24914704581340277],a=.5*e;if(a>=8)return 1;var u,l=2*t.normal.cdf(a,0,1,1,0)-1;l=l>=n.exp(-50/o)?n.pow(l,o):0;for(var c=a,f=(8-a)/(u=e>3?2:3),h=c+f,m=0,d=o-1,p=1;p<=u;p++){for(var g=0,v=.5*(h+c),y=.5*(h-c),w=1;w<=12;w++){var E,A=v+y*(6<w?i[(E=12-w+1)-1]:-i[(E=w)-1]),C=A*A;if(C>60)break;var _=2*t.normal.cdf(A,0,1,1,0)*.5-2*t.normal.cdf(A,e,1,1,0)*.5;_>=n.exp(-30/d)&&(g+=_=s[E-1]*n.exp(-.5*C)*n.pow(_,d))}m+=g*=2*y*o/n.sqrt(2*n.PI),c=h,h+=f}return(l+=m)<=n.exp(-30/r)?0:(l=n.pow(l,r))>=1?1:l}!function(n){for(var e=0;e<n.length;e++)!function(n){t[n]=function t(n,e,r){return this instanceof t?(this._a=n,this._b=e,this._c=r,this):new t(n,e,r)},t.fn[n]=function(e,r,o){var i=t[n](e,r,o);return i.data=this,i},t[n].prototype.sample=function(e){var r=this._a,o=this._b,i=this._c;return e?t.alter(e,(function(){return t[n].sample(r,o,i)})):t[n].sample(r,o,i)},function(e){for(var r=0;r<e.length;r++)!function(e){t[n].prototype[e]=function(r){var o=this._a,i=this._b,s=this._c;return r||0===r||(r=this.data),"number"!=typeof r?t.fn.map.call(r,(function(r){return t[n][e](r,o,i,s)})):t[n][e](r,o,i,s)}}(e[r])}("pdf cdf inv".split(" ")),function(e){for(var r=0;r<e.length;r++)!function(e){t[n].prototype[e]=function(){return t[n][e](this._a,this._b,this._c)}}(e[r])}("mean median mode variance".split(" "))}(n[e])}("beta centralF cauchy chisquare exponential gamma invgamma kumaraswamy laplace lognormal noncentralt normal pareto studentt weibull uniform binomial negbin hypgeom poisson triangular tukey arcsine".split(" ")),t.extend(t.beta,{pdf:function(e,r,o){return e>1||e<0?0:1==r&&1==o?1:r<512&&o<512?n.pow(e,r-1)*n.pow(1-e,o-1)/t.betafn(r,o):n.exp((r-1)*n.log(e)+(o-1)*n.log(1-e)-t.betaln(r,o))},cdf:function(n,e,r){return n>1||n<0?1*(n>1):t.ibeta(n,e,r)},inv:function(n,e,r){return t.ibetainv(n,e,r)},mean:function(t,n){return t/(t+n)},median:function(n,e){return t.ibetainv(.5,n,e)},mode:function(t,n){return(t-1)/(t+n-2)},sample:function(n,e){var r=t.randg(n);return r/(r+t.randg(e))},variance:function(t,e){return t*e/(n.pow(t+e,2)*(t+e+1))}}),t.extend(t.centralF,{pdf:function(e,r,o){var i;return e<0?0:r<=2?0===e&&r<2?1/0:0===e&&2===r?1:1/t.betafn(r/2,o/2)*n.pow(r/o,r/2)*n.pow(e,r/2-1)*n.pow(1+r/o*e,-(r+o)/2):(i=r*e/(o+e*r),r*(o/(o+e*r))/2*t.binomial.pdf((r-2)/2,(r+o-2)/2,i))},cdf:function(n,e,r){return n<0?0:t.ibeta(e*n/(e*n+r),e/2,r/2)},inv:function(n,e,r){return r/(e*(1/t.ibetainv(n,e/2,r/2)-1))},mean:function(t,n){return n>2?n/(n-2):void 0},mode:function(t,n){return t>2?n*(t-2)/(t*(n+2)):void 0},sample:function(n,e){return 2*t.randg(n/2)/n/(2*t.randg(e/2)/e)},variance:function(t,n){if(!(n<=4))return 2*n*n*(t+n-2)/(t*(n-2)*(n-2)*(n-4))}}),t.extend(t.cauchy,{pdf:function(t,e,r){return r<0?0:r/(n.pow(t-e,2)+n.pow(r,2))/n.PI},cdf:function(t,e,r){return n.atan((t-e)/r)/n.PI+.5},inv:function(t,e,r){return e+r*n.tan(n.PI*(t-.5))},median:function(t){return t},mode:function(t){return t},sample:function(e,r){return t.randn()*n.sqrt(1/(2*t.randg(.5)))*r+e}}),t.extend(t.chisquare,{pdf:function(e,r){return e<0?0:0===e&&2===r?.5:n.exp((r/2-1)*n.log(e)-e/2-r/2*n.log(2)-t.gammaln(r/2))},cdf:function(n,e){return n<0?0:t.lowRegGamma(e/2,n/2)},inv:function(n,e){return 2*t.gammapinv(n,.5*e)},mean:function(t){return t},median:function(t){return t*n.pow(1-2/(9*t),3)},mode:function(t){return t-2>0?t-2:0},sample:function(n){return 2*t.randg(n/2)},variance:function(t){return 2*t}}),t.extend(t.exponential,{pdf:function(t,e){return t<0?0:e*n.exp(-e*t)},cdf:function(t,e){return t<0?0:1-n.exp(-e*t)},inv:function(t,e){return-n.log(1-t)/e},mean:function(t){return 1/t},median:function(t){return 1/t*n.log(2)},mode:function(){return 0},sample:function(e){return-1/e*n.log(t._random_fn())},variance:function(t){return n.pow(t,-2)}}),t.extend(t.gamma,{pdf:function(e,r,o){return e<0?0:0===e&&1===r?1/o:n.exp((r-1)*n.log(e)-e/o-t.gammaln(r)-r*n.log(o))},cdf:function(n,e,r){return n<0?0:t.lowRegGamma(e,n/r)},inv:function(n,e,r){return t.gammapinv(n,e)*r},mean:function(t,n){return t*n},mode:function(t,n){if(t>1)return(t-1)*n},sample:function(n,e){return t.randg(n)*e},variance:function(t,n){return t*n*n}}),t.extend(t.invgamma,{pdf:function(e,r,o){return e<=0?0:n.exp(-(r+1)*n.log(e)-o/e-t.gammaln(r)+r*n.log(o))},cdf:function(n,e,r){return n<=0?0:1-t.lowRegGamma(e,r/n)},inv:function(n,e,r){return r/t.gammapinv(1-n,e)},mean:function(t,n){return t>1?n/(t-1):void 0},mode:function(t,n){return n/(t+1)},sample:function(n,e){return e/t.randg(n)},variance:function(t,n){if(!(t<=2))return n*n/((t-1)*(t-1)*(t-2))}}),t.extend(t.kumaraswamy,{pdf:function(t,e,r){return 0===t&&1===e?r:1===t&&1===r?e:n.exp(n.log(e)+n.log(r)+(e-1)*n.log(t)+(r-1)*n.log(1-n.pow(t,e)))},cdf:function(t,e,r){return t<0?0:t>1?1:1-n.pow(1-n.pow(t,e),r)},inv:function(t,e,r){return n.pow(1-n.pow(1-t,1/r),1/e)},mean:function(n,e){return e*t.gammafn(1+1/n)*t.gammafn(e)/t.gammafn(1+1/n+e)},median:function(t,e){return n.pow(1-n.pow(2,-1/e),1/t)},mode:function(t,e){if(t>=1&&e>=1&&1!==t&&1!==e)return n.pow((t-1)/(t*e-1),1/t)},variance:function(){throw new Error("variance not yet implemented")}}),t.extend(t.lognormal,{pdf:function(t,e,r){return t<=0?0:n.exp(-n.log(t)-.5*n.log(2*n.PI)-n.log(r)-n.pow(n.log(t)-e,2)/(2*r*r))},cdf:function(e,r,o){return e<0?0:.5+.5*t.erf((n.log(e)-r)/n.sqrt(2*o*o))},inv:function(e,r,o){return n.exp(-1.4142135623730951*o*t.erfcinv(2*e)+r)},mean:function(t,e){return n.exp(t+e*e/2)},median:function(t){return n.exp(t)},mode:function(t,e){return n.exp(t-e*e)},sample:function(e,r){return n.exp(t.randn()*r+e)},variance:function(t,e){return(n.exp(e*e)-1)*n.exp(2*t+e*e)}}),t.extend(t.noncentralt,{pdf:function(e,r,o){return n.abs(o)<1e-14?t.studentt.pdf(e,r):n.abs(e)<1e-14?n.exp(t.gammaln((r+1)/2)-o*o/2-.5*n.log(n.PI*r)-t.gammaln(r/2)):r/e*(t.noncentralt.cdf(e*n.sqrt(1+2/r),r+2,o)-t.noncentralt.cdf(e,r,o))},cdf:function(e,r,o){var i=1e-14;if(n.abs(o)<i)return t.studentt.cdf(e,r);var s=!1;e<0&&(s=!0,o=-o);for(var a=t.normal.cdf(-o,0,1),u=i+1,l=u,c=e*e/(e*e+r),f=0,h=n.exp(-o*o/2),m=n.exp(-o*o/2-.5*n.log(2)-t.gammaln(1.5))*o;f<200||l>i||u>i;)l=u,f>0&&(h*=o*o/(2*f),m*=o*o/(2*(f+.5))),a+=.5*(u=h*t.beta.cdf(c,f+.5,r/2)+m*t.beta.cdf(c,f+1,r/2)),f++;return s?1-a:a}}),t.extend(t.normal,{pdf:function(t,e,r){return n.exp(-.5*n.log(2*n.PI)-n.log(r)-n.pow(t-e,2)/(2*r*r))},cdf:function(e,r,o){return.5*(1+t.erf((e-r)/n.sqrt(2*o*o)))},inv:function(n,e,r){return-1.4142135623730951*r*t.erfcinv(2*n)+e},mean:function(t){return t},median:function(t){return t},mode:function(t){return t},sample:function(n,e){return t.randn()*e+n},variance:function(t,n){return n*n}}),t.extend(t.pareto,{pdf:function(t,e,r){return t<e?0:r*n.pow(e,r)/n.pow(t,r+1)},cdf:function(t,e,r){return t<e?0:1-n.pow(e/t,r)},inv:function(t,e,r){return e/n.pow(1-t,1/r)},mean:function(t,e){if(!(e<=1))return e*n.pow(t,e)/(e-1)},median:function(t,e){return t*(e*n.SQRT2)},mode:function(t){return t},variance:function(t,e){if(!(e<=2))return t*t*e/(n.pow(e-1,2)*(e-2))}}),t.extend(t.studentt,{pdf:function(e,r){return r=r>1e100?1e100:r,1/(n.sqrt(r)*t.betafn(.5,r/2))*n.pow(1+e*e/r,-(r+1)/2)},cdf:function(e,r){var o=r/2;return t.ibeta((e+n.sqrt(e*e+r))/(2*n.sqrt(e*e+r)),o,o)},inv:function(e,r){var o=t.ibetainv(2*n.min(e,1-e),.5*r,.5);return o=n.sqrt(r*(1-o)/o),e>.5?o:-o},mean:function(t){return t>1?0:void 0},median:function(){return 0},mode:function(){return 0},sample:function(e){return t.randn()*n.sqrt(e/(2*t.randg(e/2)))},variance:function(t){return t>2?t/(t-2):t>1?1/0:void 0}}),t.extend(t.weibull,{pdf:function(t,e,r){return t<0||e<0||r<0?0:r/e*n.pow(t/e,r-1)*n.exp(-n.pow(t/e,r))},cdf:function(t,e,r){return t<0?0:1-n.exp(-n.pow(t/e,r))},inv:function(t,e,r){return e*n.pow(-n.log(1-t),1/r)},mean:function(n,e){return n*t.gammafn(1+1/e)},median:function(t,e){return t*n.pow(n.log(2),1/e)},mode:function(t,e){return e<=1?0:t*n.pow((e-1)/e,1/e)},sample:function(e,r){return e*n.pow(-n.log(t._random_fn()),1/r)},variance:function(e,r){return e*e*t.gammafn(1+2/r)-n.pow(t.weibull.mean(e,r),2)}}),t.extend(t.uniform,{pdf:function(t,n,e){return t<n||t>e?0:1/(e-n)},cdf:function(t,n,e){return t<n?0:t<e?(t-n)/(e-n):1},inv:function(t,n,e){return n+t*(e-n)},mean:function(t,n){return.5*(t+n)},median:function(n,e){return t.mean(n,e)},mode:function(){throw new Error("mode is not yet implemented")},sample:function(n,e){return n/2+e/2+(e/2-n/2)*(2*t._random_fn()-1)},variance:function(t,e){return n.pow(e-t,2)/12}}),t.extend(t.binomial,{pdf:function(e,r,o){return 0===o||1===o?r*o===e?1:0:t.combination(r,e)*n.pow(o,e)*n.pow(1-o,r-e)},cdf:function(r,o,i){var s,a=1e-10;if(r<0)return 0;if(r>=o)return 1;if(i<0||i>1||o<=0)return NaN;var u=i,l=(r=n.floor(r))+1,c=o-r,f=l+c,h=n.exp(t.gammaln(f)-t.gammaln(c)-t.gammaln(l)+l*n.log(u)+c*n.log(1-u));return s=u<(l+1)/(f+2)?h*e(u,l,c,a):1-h*e(1-u,c,l,a),n.round(1/a*(1-s))/(1/a)}}),t.extend(t.negbin,{pdf:function(e,r,o){return e===e>>>0&&(e<0?0:t.combination(e+r-1,r-1)*n.pow(1-o,e)*n.pow(o,r))},cdf:function(n,e,r){var o=0,i=0;if(n<0)return 0;for(;i<=n;i++)o+=t.negbin.pdf(i,e,r);return o}}),t.extend(t.hypgeom,{pdf:function(e,r,o,i){if(e!=e|0)return!1;if(e<0||e<o-(r-i))return 0;if(e>i||e>o)return 0;if(2*o>r)return 2*i>r?t.hypgeom.pdf(r-o-i+e,r,r-o,r-i):t.hypgeom.pdf(i-e,r,r-o,i);if(2*i>r)return t.hypgeom.pdf(o-e,r,o,r-i);if(o<i)return t.hypgeom.pdf(e,r,i,o);for(var s=1,a=0,u=0;u<e;u++){for(;s>1&&a<i;)s*=1-o/(r-a),a++;s*=(i-u)*(o-u)/((u+1)*(r-o-i+u+1))}for(;a<i;a++)s*=1-o/(r-a);return n.min(1,n.max(0,s))},cdf:function(e,r,o,i){if(e<0||e<o-(r-i))return 0;if(e>=i||e>=o)return 1;if(2*o>r)return 2*i>r?t.hypgeom.cdf(r-o-i+e,r,r-o,r-i):1-t.hypgeom.cdf(i-e-1,r,r-o,i);if(2*i>r)return 1-t.hypgeom.cdf(o-e-1,r,o,r-i);if(o<i)return t.hypgeom.cdf(e,r,i,o);for(var s=1,a=1,u=0,l=0;l<e;l++){for(;s>1&&u<i;){var c=1-o/(r-u);a*=c,s*=c,u++}s+=a*=(i-l)*(o-l)/((l+1)*(r-o-i+l+1))}for(;u<i;u++)s*=1-o/(r-u);return n.min(1,n.max(0,s))}}),t.extend(t.poisson,{pdf:function(e,r){return r<0||e%1!=0||e<0?0:n.pow(r,e)*n.exp(-r)/t.factorial(e)},cdf:function(n,e){var r=[],o=0;if(n<0)return 0;for(;o<=n;o++)r.push(t.poisson.pdf(o,e));return t.sum(r)},mean:function(t){return t},variance:function(t){return t},sampleSmall:function(e){var r=1,o=0,i=n.exp(-e);do{o++,r*=t._random_fn()}while(r>i);return o-1},sampleLarge:function(e){var r,o,i,s,a,u,l,c,f,h,m=e;for(s=n.sqrt(m),a=n.log(m),u=.02483*(l=.931+2.53*s)-.059,c=1.1239+1.1328/(l-3.4),f=.9277-3.6224/(l-2);;){if(o=n.random()-.5,i=n.random(),h=.5-n.abs(o),r=n.floor((2*u/h+l)*o+m+.43),h>=.07&&i<=f)return r;if(!(r<0||h<.013&&i>h)&&n.log(i)+n.log(c)-n.log(u/(h*h)+l)<=r*a-m-t.loggam(r+1))return r}},sample:function(t){return t<10?this.sampleSmall(t):this.sampleLarge(t)}}),t.extend(t.triangular,{pdf:function(t,n,e,r){return e<=n||r<n||r>e?NaN:t<n||t>e?0:t<r?2*(t-n)/((e-n)*(r-n)):t===r?2/(e-n):2*(e-t)/((e-n)*(e-r))},cdf:function(t,e,r,o){return r<=e||o<e||o>r?NaN:t<=e?0:t>=r?1:t<=o?n.pow(t-e,2)/((r-e)*(o-e)):1-n.pow(r-t,2)/((r-e)*(r-o))},inv:function(t,e,r,o){return r<=e||o<e||o>r?NaN:t<=(o-e)/(r-e)?e+(r-e)*n.sqrt(t*((o-e)/(r-e))):e+(r-e)*(1-n.sqrt((1-t)*(1-(o-e)/(r-e))))},mean:function(t,n,e){return(t+n+e)/3},median:function(t,e,r){return r<=(t+e)/2?e-n.sqrt((e-t)*(e-r))/n.sqrt(2):r>(t+e)/2?t+n.sqrt((e-t)*(r-t))/n.sqrt(2):void 0},mode:function(t,n,e){return e},sample:function(e,r,o){var i=t._random_fn();return i<(o-e)/(r-e)?e+n.sqrt(i*(r-e)*(o-e)):r-n.sqrt((1-i)*(r-e)*(r-o))},variance:function(t,n,e){return(t*t+n*n+e*e-t*n-t*e-n*e)/18}}),t.extend(t.arcsine,{pdf:function(t,e,r){return r<=e?NaN:t<=e||t>=r?0:2/n.PI*n.pow(n.pow(r-e,2)-n.pow(2*t-e-r,2),-.5)},cdf:function(t,e,r){return t<e?0:t<r?2/n.PI*n.asin(n.sqrt((t-e)/(r-e))):1},inv:function(t,e,r){return e+(.5-.5*n.cos(n.PI*t))*(r-e)},mean:function(t,n){return n<=t?NaN:(t+n)/2},median:function(t,n){return n<=t?NaN:(t+n)/2},mode:function(){throw new Error("mode is not yet implemented")},sample:function(e,r){return(e+r)/2+(r-e)/2*n.sin(2*n.PI*t.uniform.sample(0,1))},variance:function(t,e){return e<=t?NaN:n.pow(e-t,2)/8}}),t.extend(t.laplace,{pdf:function(t,e,r){return r<=0?0:n.exp(-n.abs(t-e)/r)/(2*r)},cdf:function(t,e,r){return r<=0?0:t<e?.5*n.exp((t-e)/r):1-.5*n.exp(-(t-e)/r)},mean:function(t){return t},median:function(t){return t},mode:function(t){return t},variance:function(t,n){return 2*n*n},sample:function(e,r){var o,i=t._random_fn()-.5;return e-r*((o=i)/n.abs(o))*n.log(1-2*n.abs(i))}}),t.extend(t.tukey,{cdf:function(e,o,i){var s=o,a=[.9894009349916499,.9445750230732326,.8656312023878318,.755404408355003,.6178762444026438,.45801677765722737,.2816035507792589,.09501250983763744],u=[.027152459411754096,.062253523938647894,.09515851168249279,.12462897125553388,.14959598881657674,.16915651939500254,.18260341504492358,.1894506104550685];if(e<=0)return 0;if(i<2||s<2)return NaN;if(!Number.isFinite(e))return 1;if(i>25e3)return r(e,1,s);var l,c=.5*i,f=c*n.log(i)-i*n.log(2)-t.gammaln(c),h=c-1,m=.25*i;l=i<=100?1:i<=800?.5:i<=5e3?.25:.125,f+=n.log(l);for(var d=0,p=1;p<=50;p++){for(var g=0,v=(2*p-1)*l,y=1;y<=16;y++){var w,E;8<y?(w=y-8-1,E=f+h*n.log(v+a[w]*l)-(a[w]*l+v)*m):(w=y-1,E=f+h*n.log(v-a[w]*l)+(a[w]*l-v)*m),E>=-30&&(g+=r(8<y?e*n.sqrt(.5*(a[w]*l+v)):e*n.sqrt(.5*(-a[w]*l+v)),1,s)*u[w]*n.exp(E))}if(p*l>=1&&g<=1e-14)break;d+=g}if(g>1e-14)throw new Error("tukey.cdf failed to converge");return d>1&&(d=1),d},inv:function(e,r,o){if(o<2||r<2)return NaN;if(e<0||e>1)return NaN;if(0===e)return 0;if(1===e)return 1/0;var i,s=function(t,e,r){var o=.5-.5*t,i=n.sqrt(n.log(1/(o*o))),s=i+((((-453642210148e-16*i-.204231210125)*i-.342242088547)*i-1)*i+.322232421088)/((((.0038560700634*i+.10353775285)*i+.531103462366)*i+.588581570495)*i+.099348462606);r<120&&(s+=(s*s*s+s)/r/4);var a=.8832-.2368*s;return r<120&&(a+=-1.214/r+1.208*s/r),s*(a*n.log(e-1)+1.4142)}(e,r,o),a=t.tukey.cdf(s,r,o)-e;i=a>0?n.max(0,s-1):s+1;for(var u,l=t.tukey.cdf(i,r,o)-e,c=1;c<50;c++)if(u=i-l*(i-s)/(l-a),a=l,s=i,u<0&&(u=0,l=-e),l=t.tukey.cdf(u,r,o)-e,i=u,n.abs(i-s)<1e-4)return u;throw new Error("tukey.inv failed to converge")}})}(n,Math),function(t,n){var e,r,o=Array.prototype.push,i=t.utils.isArray;function s(n){return i(n)||n instanceof t}t.extend({add:function(n,e){return s(e)?(s(e[0])||(e=[e]),t.map(n,(function(t,n,r){return t+e[n][r]}))):t.map(n,(function(t){return t+e}))},subtract:function(n,e){return s(e)?(s(e[0])||(e=[e]),t.map(n,(function(t,n,r){return t-e[n][r]||0}))):t.map(n,(function(t){return t-e}))},divide:function(n,e){return s(e)?(s(e[0])||(e=[e]),t.multiply(n,t.inv(e))):t.map(n,(function(t){return t/e}))},multiply:function(n,e){var r,o,i,a,u,l,c,f;if(void 0===n.length&&void 0===e.length)return n*e;if(u=n.length,l=n[0].length,c=t.zeros(u,i=s(e)?e[0].length:l),f=0,s(e)){for(;f<i;f++)for(r=0;r<u;r++){for(a=0,o=0;o<l;o++)a+=n[r][o]*e[o][f];c[r][f]=a}return 1===u&&1===f?c[0][0]:c}return t.map(n,(function(t){return t*e}))},outer:function(n,e){return t.multiply(n.map((function(t){return[t]})),[e])},dot:function(n,e){s(n[0])||(n=[n]),s(e[0])||(e=[e]);for(var r,o,i=1===n[0].length&&1!==n.length?t.transpose(n):n,a=1===e[0].length&&1!==e.length?t.transpose(e):e,u=[],l=0,c=i.length,f=i[0].length;l<c;l++){for(u[l]=[],r=0,o=0;o<f;o++)r+=i[l][o]*a[l][o];u[l]=r}return 1===u.length?u[0]:u},pow:function(e,r){return t.map(e,(function(t){return n.pow(t,r)}))},exp:function(e){return t.map(e,(function(t){return n.exp(t)}))},log:function(e){return t.map(e,(function(t){return n.log(t)}))},abs:function(e){return t.map(e,(function(t){return n.abs(t)}))},norm:function(t,e){var r=0,o=0;for(isNaN(e)&&(e=2),s(t[0])&&(t=t[0]);o<t.length;o++)r+=n.pow(n.abs(t[o]),e);return n.pow(r,1/e)},angle:function(e,r){return n.acos(t.dot(e,r)/(t.norm(e)*t.norm(r)))},aug:function(t,n){var e,r=[];for(e=0;e<t.length;e++)r.push(t[e].slice());for(e=0;e<r.length;e++)o.apply(r[e],n[e]);return r},inv:function(n){for(var e,r=n.length,o=n[0].length,i=t.identity(r,o),s=t.gauss_jordan(n,i),a=[],u=0;u<r;u++)for(a[u]=[],e=o;e<s[0].length;e++)a[u][e-o]=s[u][e];return a},det:function t(n){if(2===n.length)return n[0][0]*n[1][1]-n[0][1]*n[1][0];for(var e=0,r=0;r<n.length;r++){for(var o=[],i=1;i<n.length;i++){o[i-1]=[];for(var s=0;s<n.length;s++)s<r?o[i-1][s]=n[i][s]:s>r&&(o[i-1][s-1]=n[i][s])}var a=r%2?-1:1;e+=t(o)*n[0][r]*a}return e},gauss_elimination:function(e,r){var o,i,s,a,u=0,l=0,c=e.length,f=e[0].length,h=1,m=0,d=[];for(o=(e=t.aug(e,r))[0].length,u=0;u<c;u++){for(i=e[u][u],l=u,a=u+1;a<f;a++)i<n.abs(e[a][u])&&(i=e[a][u],l=a);if(l!=u)for(a=0;a<o;a++)s=e[u][a],e[u][a]=e[l][a],e[l][a]=s;for(l=u+1;l<c;l++)for(h=e[l][u]/e[u][u],a=u;a<o;a++)e[l][a]=e[l][a]-h*e[u][a]}for(u=c-1;u>=0;u--){for(m=0,l=u+1;l<=c-1;l++)m+=d[l]*e[u][l];d[u]=(e[u][o-1]-m)/e[u][u]}return d},gauss_jordan:function(e,r){var o,i,s,a=t.aug(e,r),u=a.length,l=a[0].length,c=0;for(i=0;i<u;i++){var f=i;for(s=i+1;s<u;s++)n.abs(a[s][i])>n.abs(a[f][i])&&(f=s);var h=a[i];for(a[i]=a[f],a[f]=h,s=i+1;s<u;s++)for(c=a[s][i]/a[i][i],o=i;o<l;o++)a[s][o]-=a[i][o]*c}for(i=u-1;i>=0;i--){for(c=a[i][i],s=0;s<i;s++)for(o=l-1;o>i-1;o--)a[s][o]-=a[i][o]*a[s][i]/c;for(a[i][i]/=c,o=u;o<l;o++)a[i][o]/=c}return a},triaUpSolve:function(n,e){var r,o=n[0].length,i=t.zeros(1,o)[0],s=!1;return null!=e[0].length&&(e=e.map((function(t){return t[0]})),s=!0),t.arange(o-1,-1,-1).forEach((function(s){r=t.arange(s+1,o).map((function(t){return i[t]*n[s][t]})),i[s]=(e[s]-t.sum(r))/n[s][s]})),s?i.map((function(t){return[t]})):i},triaLowSolve:function(n,e){var r,o=n[0].length,i=t.zeros(1,o)[0],s=!1;return null!=e[0].length&&(e=e.map((function(t){return t[0]})),s=!0),t.arange(o).forEach((function(o){r=t.arange(o).map((function(t){return n[o][t]*i[t]})),i[o]=(e[o]-t.sum(r))/n[o][o]})),s?i.map((function(t){return[t]})):i},lu:function(n){var e,r=n.length,o=t.identity(r),i=t.zeros(n.length,n[0].length);return t.arange(r).forEach((function(t){i[0][t]=n[0][t]})),t.arange(1,r).forEach((function(s){t.arange(s).forEach((function(r){e=t.arange(r).map((function(t){return o[s][t]*i[t][r]})),o[s][r]=(n[s][r]-t.sum(e))/i[r][r]})),t.arange(s,r).forEach((function(r){e=t.arange(s).map((function(t){return o[s][t]*i[t][r]})),i[s][r]=n[e.length][r]-t.sum(e)}))})),[o,i]},cholesky:function(e){var r,o=e.length,i=t.zeros(e.length,e[0].length);return t.arange(o).forEach((function(s){r=t.arange(s).map((function(t){return n.pow(i[s][t],2)})),i[s][s]=n.sqrt(e[s][s]-t.sum(r)),t.arange(s+1,o).forEach((function(n){r=t.arange(s).map((function(t){return i[s][t]*i[n][t]})),i[n][s]=(e[s][n]-t.sum(r))/i[s][s]}))})),i},gauss_jacobi:function(e,r,o,i){for(var s,a,u,l,c=0,f=0,h=e.length,m=[],d=[],p=[];c<h;c++)for(m[c]=[],d[c]=[],p[c]=[],f=0;f<h;f++)c>f?(m[c][f]=e[c][f],d[c][f]=p[c][f]=0):c<f?(d[c][f]=e[c][f],m[c][f]=p[c][f]=0):(p[c][f]=e[c][f],m[c][f]=d[c][f]=0);for(u=t.multiply(t.multiply(t.inv(p),t.add(m,d)),-1),a=t.multiply(t.inv(p),r),s=o,l=t.add(t.multiply(u,o),a),c=2;n.abs(t.norm(t.subtract(l,s)))>i;)s=l,l=t.add(t.multiply(u,s),a),c++;return l},gauss_seidel:function(e,r,o,i){for(var s,a,u,l,c,f=0,h=e.length,m=[],d=[],p=[];f<h;f++)for(m[f]=[],d[f]=[],p[f]=[],s=0;s<h;s++)f>s?(m[f][s]=e[f][s],d[f][s]=p[f][s]=0):f<s?(d[f][s]=e[f][s],m[f][s]=p[f][s]=0):(p[f][s]=e[f][s],m[f][s]=d[f][s]=0);for(l=t.multiply(t.multiply(t.inv(t.add(p,m)),d),-1),u=t.multiply(t.inv(t.add(p,m)),r),a=o,c=t.add(t.multiply(l,o),u),f=2;n.abs(t.norm(t.subtract(c,a)))>i;)a=c,c=t.add(t.multiply(l,a),u),f+=1;return c},SOR:function(e,r,o,i,s){for(var a,u,l,c,f,h=0,m=e.length,d=[],p=[],g=[];h<m;h++)for(d[h]=[],p[h]=[],g[h]=[],a=0;a<m;a++)h>a?(d[h][a]=e[h][a],p[h][a]=g[h][a]=0):h<a?(p[h][a]=e[h][a],d[h][a]=g[h][a]=0):(g[h][a]=e[h][a],d[h][a]=p[h][a]=0);for(c=t.multiply(t.inv(t.add(g,t.multiply(d,s))),t.subtract(t.multiply(g,1-s),t.multiply(p,s))),l=t.multiply(t.multiply(t.inv(t.add(g,t.multiply(d,s))),r),s),u=o,f=t.add(t.multiply(c,o),l),h=2;n.abs(t.norm(t.subtract(f,u)))>i;)u=f,f=t.add(t.multiply(c,u),l),h++;return f},householder:function(e){for(var r,o,i,s,a=e.length,u=e[0].length,l=0,c=[],f=[];l<a-1;l++){for(r=0,s=l+1;s<u;s++)r+=e[s][l]*e[s][l];for(r=(e[l+1][l]>0?-1:1)*n.sqrt(r),o=n.sqrt((r*r-e[l+1][l]*r)/2),(c=t.zeros(a,1))[l+1][0]=(e[l+1][l]-r)/(2*o),i=l+2;i<a;i++)c[i][0]=e[i][l]/(2*o);f=t.subtract(t.identity(a,u),t.multiply(t.multiply(c,t.transpose(c)),2)),e=t.multiply(f,t.multiply(e,f))}return e},QR:(e=t.sum,r=t.arange,function(o){var i,s,a,u=o.length,l=o[0].length,c=t.zeros(l,l);for(o=t.copy(o),s=0;s<l;s++){for(c[s][s]=n.sqrt(e(r(u).map((function(t){return o[t][s]*o[t][s]})))),i=0;i<u;i++)o[i][s]=o[i][s]/c[s][s];for(a=s+1;a<l;a++)for(c[s][a]=e(r(u).map((function(t){return o[t][s]*o[t][a]}))),i=0;i<u;i++)o[i][a]=o[i][a]-o[i][s]*c[s][a]}return[o,c]}),lstsq:function(n,e){var r=!1;void 0===e[0].length&&(e=e.map((function(t){return[t]})),r=!0);var o=t.QR(n),i=o[0],s=o[1],a=n[0].length,u=t.slice(i,{col:{end:a}}),l=function(n){var e=(n=t.copy(n)).length,r=t.identity(e);return t.arange(e-1,-1,-1).forEach((function(e){t.sliceAssign(r,{row:e},t.divide(t.slice(r,{row:e}),n[e][e])),t.sliceAssign(n,{row:e},t.divide(t.slice(n,{row:e}),n[e][e])),t.arange(e).forEach((function(o){var i=t.multiply(n[o][e],-1),s=t.slice(n,{row:o}),a=t.multiply(t.slice(n,{row:e}),i);t.sliceAssign(n,{row:o},t.add(s,a));var u=t.slice(r,{row:o}),l=t.multiply(t.slice(r,{row:e}),i);t.sliceAssign(r,{row:o},t.add(u,l))}))})),r}(t.slice(s,{row:{end:a}})),c=t.transpose(u);void 0===c[0].length&&(c=[c]);var f=t.multiply(t.multiply(l,c),e);return void 0===f.length&&(f=[[f]]),r?f.map((function(t){return t[0]})):f},jacobi:function(e){for(var r,o,i,s,a,u,l,c=1,f=e.length,h=t.identity(f,f),m=[];1===c;){for(a=e[0][1],i=0,s=1,r=0;r<f;r++)for(o=0;o<f;o++)r!=o&&a<n.abs(e[r][o])&&(a=n.abs(e[r][o]),i=r,s=o);for(u=e[i][i]===e[s][s]?e[i][s]>0?n.PI/4:-n.PI/4:n.atan(2*e[i][s]/(e[i][i]-e[s][s]))/2,(l=t.identity(f,f))[i][i]=n.cos(u),l[i][s]=-n.sin(u),l[s][i]=n.sin(u),l[s][s]=n.cos(u),h=t.multiply(h,l),e=t.multiply(t.multiply(t.inv(l),e),l),c=0,r=1;r<f;r++)for(o=1;o<f;o++)r!=o&&n.abs(e[r][o])>.001&&(c=1)}for(r=0;r<f;r++)m.push(e[r][r]);return[h,m]},rungekutta:function(t,n,e,r,o,i){var s,a,u;if(2===i)for(;r<=e;)o+=((s=n*t(r,o))+(a=n*t(r+n,o+s)))/2,r+=n;if(4===i)for(;r<=e;)o+=((s=n*t(r,o))+2*(a=n*t(r+n/2,o+s/2))+2*(u=n*t(r+n/2,o+a/2))+n*t(r+n,o+u))/6,r+=n;return o},romberg:function(t,e,r,o){for(var i,s,a,u,l,c=0,f=(r-e)/2,h=[],m=[],d=[];c<o/2;){for(l=t(e),a=e,u=0;a<=r;a+=f,u++)h[u]=a;for(i=h.length,a=1;a<i-1;a++)l+=(a%2!=0?4:2)*t(h[a]);l=f/3*(l+t(r)),d[c]=l,f/=2,c++}for(s=d.length,i=1;1!==s;){for(a=0;a<s-1;a++)m[a]=(n.pow(4,i)*d[a+1]-d[a])/(n.pow(4,i)-1);s=m.length,d=m,m=[],i++}return d},richardson:function(t,e,r,o){function i(t,n){for(var e,r=0,o=t.length;r<o;r++)t[r]===n&&(e=r);return e}for(var s,a,u,l,c,f=n.abs(r-t[i(t,r)+1]),h=0,m=[],d=[];o>=f;)s=i(t,r+o),a=i(t,r),m[h]=(e[s]-2*e[a]+e[2*a-s])/(o*o),o/=2,h++;for(l=m.length,u=1;1!=l;){for(c=0;c<l-1;c++)d[c]=(n.pow(4,u)*m[c+1]-m[c])/(n.pow(4,u)-1);l=d.length,m=d,d=[],u++}return m},simpson:function(t,n,e,r){for(var o,i=(e-n)/r,s=t(n),a=[],u=n,l=0,c=1;u<=e;u+=i,l++)a[l]=u;for(o=a.length;c<o-1;c++)s+=(c%2!=0?4:2)*t(a[c]);return i/3*(s+t(e))},hermite:function(t,n,e,r){for(var o,i=t.length,s=0,a=0,u=[],l=[],c=[],f=[];a<i;a++){for(u[a]=1,o=0;o<i;o++)a!=o&&(u[a]*=(r-t[o])/(t[a]-t[o]));for(l[a]=0,o=0;o<i;o++)a!=o&&(l[a]+=1/(t[a]-t[o]));c[a]=(1-2*(r-t[a])*l[a])*(u[a]*u[a]),f[a]=(r-t[a])*(u[a]*u[a]),s+=c[a]*n[a]+f[a]*e[a]}return s},lagrange:function(t,n,e){for(var r,o,i=0,s=0,a=t.length;s<a;s++){for(o=n[s],r=0;r<a;r++)s!=r&&(o*=(e-t[r])/(t[s]-t[r]));i+=o}return i},cubic_spline:function(n,e,r){for(var o,i,s=n.length,a=0,u=[],l=[],c=[],f=[],h=[],m=[];a<s-1;a++)f[a]=n[a+1]-n[a];for(c[0]=0,a=1;a<s-1;a++)c[a]=3/f[a]*(e[a+1]-e[a])-3/f[a-1]*(e[a]-e[a-1]);for(a=1;a<s-1;a++)u[a]=[],l[a]=[],u[a][a-1]=f[a-1],u[a][a]=2*(f[a-1]+f[a]),u[a][a+1]=f[a],l[a][0]=c[a];for(i=t.multiply(t.inv(u),l),o=0;o<s-1;o++)h[o]=(e[o+1]-e[o])/f[o]-f[o]*(i[o+1][0]+2*i[o][0])/3,m[o]=(i[o+1][0]-i[o][0])/(3*f[o]);for(o=0;o<s&&!(n[o]>r);o++);return e[o-=1]+(r-n[o])*h[o]+t.sq(r-n[o])*i[o]+(r-n[o])*t.sq(r-n[o])*m[o]},gauss_quadrature:function(){throw new Error("gauss_quadrature not yet implemented")},PCA:function(n){var e,r,o,i,s,a=n.length,u=n[0].length,l=0,c=[],f=[],h=[],m=[],d=[],p=[],g=[];for(l=0;l<a;l++)c[l]=t.sum(n[l])/u;for(l=0;l<u;l++)for(d[l]=[],e=0;e<a;e++)d[l][e]=n[e][l]-c[e];for(d=t.transpose(d),l=0;l<a;l++)for(p[l]=[],e=0;e<a;e++)p[l][e]=t.dot([d[l]],[d[e]])/(u-1);for(s=(o=t.jacobi(p))[0],f=o[1],g=t.transpose(s),l=0;l<f.length;l++)for(e=l;e<f.length;e++)f[l]<f[e]&&(r=f[l],f[l]=f[e],f[e]=r,h=g[l],g[l]=g[e],g[e]=h);for(i=t.transpose(d),l=0;l<a;l++)for(m[l]=[],e=0;e<i.length;e++)m[l][e]=t.dot([g[l]],[i[e]]);return[n,f,g,m]}}),function(n){for(var e=0;e<n.length;e++)!function(n){t.fn[n]=function(e,r){var o=this;return r?(setTimeout((function(){r.call(o,t.fn[n].call(o,e))}),15),this):"number"==typeof t[n](this,e)?t[n](this,e):t(t[n](this,e))}}(n[e])}("add divide multiply subtract dot pow exp log abs norm angle".split(" "))}(n,Math),function(t,n){var e=[].slice,r=t.utils.isNumber,o=t.utils.isArray;function i(t,e,r,o){if(t>1||r>1||t<=0||r<=0)throw new Error("Proportions should be greater than 0 and less than 1");var i=(t*e+r*o)/(e+o);return(t-r)/n.sqrt(i*(1-i)*(1/e+1/o))}t.extend({zscore:function(){var n=e.call(arguments);return r(n[1])?(n[0]-n[1])/n[2]:(n[0]-t.mean(n[1]))/t.stdev(n[1],n[2])},ztest:function(){var r,i=e.call(arguments);return o(i[1])?(r=t.zscore(i[0],i[1],i[3]),1===i[2]?t.normal.cdf(-n.abs(r),0,1):2*t.normal.cdf(-n.abs(r),0,1)):i.length>2?(r=t.zscore(i[0],i[1],i[2]),1===i[3]?t.normal.cdf(-n.abs(r),0,1):2*t.normal.cdf(-n.abs(r),0,1)):(r=i[0],1===i[1]?t.normal.cdf(-n.abs(r),0,1):2*t.normal.cdf(-n.abs(r),0,1))}}),t.extend(t.fn,{zscore:function(t,n){return(t-this.mean())/this.stdev(n)},ztest:function(e,r,o){var i=n.abs(this.zscore(e,o));return 1===r?t.normal.cdf(-i,0,1):2*t.normal.cdf(-i,0,1)}}),t.extend({tscore:function(){var r=e.call(arguments);return 4===r.length?(r[0]-r[1])/(r[2]/n.sqrt(r[3])):(r[0]-t.mean(r[1]))/(t.stdev(r[1],!0)/n.sqrt(r[1].length))},ttest:function(){var o,i=e.call(arguments);return 5===i.length?(o=n.abs(t.tscore(i[0],i[1],i[2],i[3])),1===i[4]?t.studentt.cdf(-o,i[3]-1):2*t.studentt.cdf(-o,i[3]-1)):r(i[1])?(o=n.abs(i[0]),1==i[2]?t.studentt.cdf(-o,i[1]-1):2*t.studentt.cdf(-o,i[1]-1)):(o=n.abs(t.tscore(i[0],i[1])),1==i[2]?t.studentt.cdf(-o,i[1].length-1):2*t.studentt.cdf(-o,i[1].length-1))}}),t.extend(t.fn,{tscore:function(t){return(t-this.mean())/(this.stdev(!0)/n.sqrt(this.cols()))},ttest:function(e,r){return 1===r?1-t.studentt.cdf(n.abs(this.tscore(e)),this.cols()-1):2*t.studentt.cdf(-n.abs(this.tscore(e)),this.cols()-1)}}),t.extend({anovafscore:function(){var r,o,i,s,a,u,l,c,f=e.call(arguments);if(1===f.length){for(a=new Array(f[0].length),l=0;l<f[0].length;l++)a[l]=f[0][l];f=a}for(o=new Array,l=0;l<f.length;l++)o=o.concat(f[l]);for(i=t.mean(o),r=0,l=0;l<f.length;l++)r+=f[l].length*n.pow(t.mean(f[l])-i,2);for(r/=f.length-1,u=0,l=0;l<f.length;l++)for(s=t.mean(f[l]),c=0;c<f[l].length;c++)u+=n.pow(f[l][c]-s,2);return r/(u/(o.length-f.length))},anovaftest:function(){var n,o,i,s,a=e.call(arguments);if(r(a[0]))return 1-t.centralF.cdf(a[0],a[1],a[2]);var u=t.anovafscore(a);for(n=a.length-1,i=0,s=0;s<a.length;s++)i+=a[s].length;return o=i-n-1,1-t.centralF.cdf(u,n,o)},ftest:function(n,e,r){return 1-t.centralF.cdf(n,e,r)}}),t.extend(t.fn,{anovafscore:function(){return t.anovafscore(this.toArray())},anovaftes:function(){var n,e=0;for(n=0;n<this.length;n++)e+=this[n].length;return t.ftest(this.anovafscore(),this.length-1,e-this.length)}}),t.extend({qscore:function(){var o,i,s,a,u,l=e.call(arguments);return r(l[0])?(o=l[0],i=l[1],s=l[2],a=l[3],u=l[4]):(o=t.mean(l[0]),i=t.mean(l[1]),s=l[0].length,a=l[1].length,u=l[2]),n.abs(o-i)/(u*n.sqrt((1/s+1/a)/2))},qtest:function(){var n,r=e.call(arguments);3===r.length?(n=r[0],r=r.slice(1)):7===r.length?(n=t.qscore(r[0],r[1],r[2],r[3],r[4]),r=r.slice(5)):(n=t.qscore(r[0],r[1],r[2]),r=r.slice(3));var o=r[0],i=r[1];return 1-t.tukey.cdf(n,i,o-i)},tukeyhsd:function(n){for(var e=t.pooledstdev(n),r=n.map((function(n){return t.mean(n)})),o=n.reduce((function(t,n){return t+n.length}),0),i=[],s=0;s<n.length;++s)for(var a=s+1;a<n.length;++a){var u=t.qtest(r[s],r[a],n[s].length,n[a].length,e,o,n.length);i.push([[s,a],u])}return i}}),t.extend({normalci:function(){var r,o=e.call(arguments),i=new Array(2);return r=4===o.length?n.abs(t.normal.inv(o[1]/2,0,1)*o[2]/n.sqrt(o[3])):n.abs(t.normal.inv(o[1]/2,0,1)*t.stdev(o[2])/n.sqrt(o[2].length)),i[0]=o[0]-r,i[1]=o[0]+r,i},tci:function(){var r,o=e.call(arguments),i=new Array(2);return r=4===o.length?n.abs(t.studentt.inv(o[1]/2,o[3]-1)*o[2]/n.sqrt(o[3])):n.abs(t.studentt.inv(o[1]/2,o[2].length-1)*t.stdev(o[2],!0)/n.sqrt(o[2].length)),i[0]=o[0]-r,i[1]=o[0]+r,i},significant:function(t,n){return t<n}}),t.extend(t.fn,{normalci:function(n,e){return t.normalci(n,e,this.toArray())},tci:function(n,e){return t.tci(n,e,this.toArray())}}),t.extend(t.fn,{oneSidedDifferenceOfProportions:function(n,e,r,o){var s=i(n,e,r,o);return t.ztest(s,1)},twoSidedDifferenceOfProportions:function(n,e,r,o){var s=i(n,e,r,o);return t.ztest(s,2)}})}(n,Math),n.models=function(){function t(t,e){var r=t.length,o=e[0].length-1,i=r-o-1,s=n.lstsq(e,t),a=n.multiply(e,s.map((function(t){return[t]}))).map((function(t){return t[0]})),u=n.subtract(t,a),l=n.mean(t),c=n.sum(a.map((function(t){return Math.pow(t-l,2)}))),f=n.sum(t.map((function(t,n){return Math.pow(t-a[n],2)}))),h=c+f;return{exog:e,endog:t,nobs:r,df_model:o,df_resid:i,coef:s,predict:a,resid:u,ybar:l,SST:h,SSE:c,SSR:f,R2:c/h}}function e(e){var r,o,i=(r=e.exog,o=r[0].length,n.arange(o).map((function(e){var i=n.arange(o).filter((function(t){return t!==e}));return t(n.col(r,e).map((function(t){return t[0]})),n.col(r,i))}))),s=Math.sqrt(e.SSR/e.df_resid),a=i.map((function(t){var n=t.SST,e=t.R2;return s/Math.sqrt(n*(1-e))})),u=e.coef.map((function(t,n){return(t-0)/a[n]})),l=u.map((function(t){var r=n.studentt.cdf(t,e.df_resid);return 2*(r>.5?1-r:r)})),c=n.studentt.inv(.975,e.df_resid),f=e.coef.map((function(t,n){var e=c*a[n];return[t-e,t+e]}));return{se:a,t:u,p:l,sigmaHat:s,interval95:f}}return{ols:function(r,o){var i=t(r,o),s=e(i),a=function(t){var e,r,o,i=t.R2/t.df_model/((1-t.R2)/t.df_resid);return{F_statistic:i,pvalue:1-(e=i,r=t.df_model,o=t.df_resid,n.beta.cdf(e/(o/r+e),r/2,o/2))}}(i),u=1-(1-i.R2)*((i.nobs-1)/i.df_resid);return i.t=s,i.f=a,i.adjust_R2=u,i}}}(),n.extend({buildxmatrix:function(){for(var t=new Array(arguments.length),e=0;e<arguments.length;e++){t[e]=[1].concat(arguments[e])}return n(t)},builddxmatrix:function(){for(var t=new Array(arguments[0].length),e=0;e<arguments[0].length;e++){t[e]=[1].concat(arguments[0][e])}return n(t)},buildjxmatrix:function(t){for(var e=new Array(t.length),r=0;r<t.length;r++)e[r]=t[r];return n.builddxmatrix(e)},buildymatrix:function(t){return n(t).transpose()},buildjymatrix:function(t){return t.transpose()},matrixmult:function(t,e){var r,o,i,s,a;if(t.cols()==e.rows()){if(e.rows()>1){for(s=[],r=0;r<t.rows();r++)for(s[r]=[],o=0;o<e.cols();o++){for(a=0,i=0;i<t.cols();i++)a+=t.toArray()[r][i]*e.toArray()[i][o];s[r][o]=a}return n(s)}for(s=[],r=0;r<t.rows();r++)for(s[r]=[],o=0;o<e.cols();o++){for(a=0,i=0;i<t.cols();i++)a+=t.toArray()[r][i]*e.toArray()[o];s[r][o]=a}return n(s)}},regress:function(t,e){var r=n.xtranspxinv(t),o=t.transpose(),i=n.matrixmult(n(r),o);return n.matrixmult(i,e)},regresst:function(t,e,r){var o=n.regress(t,e),i={anova:{}},s=n.jMatYBar(t,o);i.yBar=s;var a=e.mean();i.anova.residuals=n.residuals(e,s),i.anova.ssr=n.ssr(s,a),i.anova.msr=i.anova.ssr/(t[0].length-1),i.anova.sse=n.sse(e,s),i.anova.mse=i.anova.sse/(e.length-(t[0].length-1)-1),i.anova.sst=n.sst(e,a),i.anova.mst=i.anova.sst/(e.length-1),i.anova.r2=1-i.anova.sse/i.anova.sst,i.anova.r2<0&&(i.anova.r2=0),i.anova.fratio=i.anova.msr/i.anova.mse,i.anova.pvalue=n.anovaftest(i.anova.fratio,t[0].length-1,e.length-(t[0].length-1)-1),i.anova.rmse=Math.sqrt(i.anova.mse),i.anova.r2adj=1-i.anova.mse/i.anova.mst,i.anova.r2adj<0&&(i.anova.r2adj=0),i.stats=new Array(t[0].length);for(var u,l,c,f=n.xtranspxinv(t),h=0;h<o.length;h++)u=Math.sqrt(i.anova.mse*Math.abs(f[h][h])),l=Math.abs(o[h]/u),c=n.ttest(l,e.length-t[0].length-1,r),i.stats[h]=[o[h],u,l,c];return i.regress=o,i},xtranspx:function(t){return n.matrixmult(t.transpose(),t)},xtranspxinv:function(t){var e=n.matrixmult(t.transpose(),t);return n.inv(e)},jMatYBar:function(t,e){var r=n.matrixmult(t,e);return new n(r)},residuals:function(t,e){return n.matrixsubtract(t,e)},ssr:function(t,n){for(var e=0,r=0;r<t.length;r++)e+=Math.pow(t[r]-n,2);return e},sse:function(t,n){for(var e=0,r=0;r<t.length;r++)e+=Math.pow(t[r]-n[r],2);return e},sst:function(t,n){for(var e=0,r=0;r<t.length;r++)e+=Math.pow(t[r]-n,2);return e},matrixsubtract:function(t,e){for(var r=new Array(t.length),o=0;o<t.length;o++){r[o]=new Array(t[o].length);for(var i=0;i<t[o].length;i++)r[o][i]=t[o][i]-e[o][i]}return n(r)}}),n.jStat=n,n)},5072:t=>{"use strict";var n=[];function e(t){for(var e=-1,r=0;r<n.length;r++)if(n[r].identifier===t){e=r;break}return e}function r(t,r){for(var i={},s=[],a=0;a<t.length;a++){var u=t[a],l=r.base?u[0]+r.base:u[0],c=i[l]||0,f="".concat(l," ").concat(c);i[l]=c+1;var h=e(f),m={css:u[1],media:u[2],sourceMap:u[3],supports:u[4],layer:u[5]};if(-1!==h)n[h].references++,n[h].updater(m);else{var d=o(m,r);r.byIndex=a,n.splice(a,0,{identifier:f,updater:d,references:1})}s.push(f)}return s}function o(t,n){var e=n.domAPI(n);return e.update(t),function(n){if(n){if(n.css===t.css&&n.media===t.media&&n.sourceMap===t.sourceMap&&n.supports===t.supports&&n.layer===t.layer)return;e.update(t=n)}else e.remove()}}t.exports=function(t,o){var i=r(t=t||[],o=o||{});return function(t){t=t||[];for(var s=0;s<i.length;s++){var a=e(i[s]);n[a].references--}for(var u=r(t,o),l=0;l<i.length;l++){var c=e(i[l]);0===n[c].references&&(n[c].updater(),n.splice(c,1))}i=u}}},7659:t=>{"use strict";var n={};t.exports=function(t,e){var r=function(t){if(void 0===n[t]){var e=document.querySelector(t);if(window.HTMLIFrameElement&&e instanceof window.HTMLIFrameElement)try{e=e.contentDocument.head}catch(t){e=null}n[t]=e}return n[t]}(t);if(!r)throw new Error("Couldn't find a style target. This probably means that the value for the 'insert' parameter is invalid.");r.appendChild(e)}},540:t=>{"use strict";t.exports=function(t){var n=document.createElement("style");return t.setAttributes(n,t.attributes),t.insert(n,t.options),n}},5056:(t,n,e)=>{"use strict";t.exports=function(t){var n=e.nc;n&&t.setAttribute("nonce",n)}},7825:t=>{"use strict";t.exports=function(t){if("undefined"==typeof document)return{update:function(){},remove:function(){}};var n=t.insertStyleElement(t);return{update:function(e){!function(t,n,e){var r="";e.supports&&(r+="@supports (".concat(e.supports,") {")),e.media&&(r+="@media ".concat(e.media," {"));var o=void 0!==e.layer;o&&(r+="@layer".concat(e.layer.length>0?" ".concat(e.layer):""," {")),r+=e.css,o&&(r+="}"),e.media&&(r+="}"),e.supports&&(r+="}");var i=e.sourceMap;i&&"undefined"!=typeof btoa&&(r+="\n/*# sourceMappingURL=data:application/json;base64,".concat(btoa(unescape(encodeURIComponent(JSON.stringify(i))))," */")),n.styleTagTransform(r,t,n.options)}(n,t,e)},remove:function(){!function(t){if(null===t.parentNode)return!1;t.parentNode.removeChild(t)}(n)}}}},1113:t=>{"use strict";t.exports=function(t,n){if(n.styleSheet)n.styleSheet.cssText=t;else{for(;n.firstChild;)n.removeChild(n.firstChild);n.appendChild(document.createTextNode(t))}}}},n={};function e(r){var o=n[r];if(void 0!==o)return o.exports;var i=n[r]={id:r,loaded:!1,exports:{}};return t[r].call(i.exports,i,i.exports,e),i.loaded=!0,i.exports}e.m=t,e.amdO={},e.n=t=>{var n=t&&t.__esModule?()=>t.default:()=>t;return e.d(n,{a:n}),n},e.d=(t,n)=>{for(var r in n)e.o(n,r)&&!e.o(t,r)&&Object.defineProperty(t,r,{enumerable:!0,get:n[r]})},e.u=t=>t+".js",e.g=function(){if("object"==typeof globalThis)return globalThis;try{return this||new Function("return this")()}catch(t){if("object"==typeof window)return window}}(),e.hmd=t=>((t=Object.create(t)).children||(t.children=[]),Object.defineProperty(t,"exports",{enumerable:!0,set:()=>{throw new Error("ES Modules may not assign module.exports or exports.*, Use ESM export syntax, instead: "+t.id)}}),t),e.o=(t,n)=>Object.prototype.hasOwnProperty.call(t,n),e.r=t=>{"undefined"!=typeof Symbol&&Symbol.toStringTag&&Object.defineProperty(t,Symbol.toStringTag,{value:"Module"}),Object.defineProperty(t,"__esModule",{value:!0})},(()=>{var t;e.g.importScripts&&(t=e.g.location+"");var n=e.g.document;if(!t&&n&&(n.currentScript&&(t=n.currentScript.src),!t)){var r=n.getElementsByTagName("script");if(r.length)for(var o=r.length-1;o>-1&&(!t||!/^http(s?):/.test(t));)t=r[o--].src}if(!t)throw new Error("Automatic publicPath is not supported in this browser");t=t.replace(/#.*$/,"").replace(/\?.*$/,"").replace(/\/[^\/]+$/,"/"),e.p=t})(),e.b=document.baseURI||self.location.href,e.nc=void 0;var r={};(()=>{"use strict";e.r(r),e.d(r,{GetMCLEditor:()=>br,MCL:()=>Ir,MCLInitializationFunction:()=>Nr,MVA:()=>Tr,PCA:()=>wr,PLS:()=>Sr,_package:()=>pr,anova:()=>Zr,applyLinearKernelSVM:()=>Rr,applyLinearRegression:()=>io,applyPolynomialKernelSVM:()=>Yr,applyRBFkernelSVM:()=>kr,applySigmoidKernelSVM:()=>jr,dbScan:()=>yr,dbscanPostProcessingFunction:()=>Er,demoMultivariateAnalysis:()=>Or,generateDatasetForLinearRegressionTest:()=>ro,info:()=>gr,init:()=>vr,isApplicableLinearKernelSVM:()=>Fr,isApplicableLinearRegression:()=>so,isApplicablePolynomialKernelSVM:()=>Hr,isApplicableRBFkernelSVM:()=>Vr,isApplicableSigmoidKernelSVM:()=>Xr,isInteractiveLinearKernelSVM:()=>Dr,isInteractiveLinearRegression:()=>ao,isInteractivePolynomialKernelSVM:()=>zr,isInteractiveRBFkernelSVM:()=>Gr,isInteractiveSigmoidKernelSVM:()=>Qr,kNNImputation:()=>to,kNNImputationForTable:()=>no,linearRegression:()=>eo,numberPreprocessingFunction:()=>Ar,reduceDimensionality:()=>_r,stringPreprocessingFunction:()=>Cr,testDataLinearNonSeparable:()=>xr,testDataLinearSeparable:()=>Pr,topMenuPLS:()=>Mr,trainLinearKernelSVM:()=>Lr,trainLinearRegression:()=>oo,trainPolynomialKernelSVM:()=>Wr,trainRBFkernelSVM:()=>Br,trainSigmoidKernelSVM:()=>Kr,visualizeLinearKernelSVM:()=>Ur,visualizePolynomialKernelSVM:()=>$r,visualizeRBFkernelSVM:()=>qr,visualizeSigmoidKernelSVM:()=>Jr});const t=grok,n=ui,o=DG,i={i32:"HEAP32",f32:"HEAPF32"},s={i32:Int32Array,f32:Float32Array},a={i32:2,f32:2},u={i32:DG.Column.fromInt32Array,f32:DG.Column.fromFloat32Array};class l{constructor(t){this.data=t}complementArrOfParams(t){t.push(this.data)}complementArrOfTypes(t){t.push("number")}allocateMemoryForBuffer(t){}isMemoryForBufferAllocated(){return!0}putDataToBuffer(t){}getDataFromBuffer(t){}freeBuffer(t){}}class c extends l{constructor(t,n,e=!1){super(t),this.type=n,this.toUpdate=e,this.buf=0,this.numOfRows=t.length}complementArrOfParams(t){t.push(this.buf),t.push(this.numOfRows)}complementArrOfTypes(t){t.push("number"),t.push("number")}allocateMemoryForBuffer(t){this.buf=t._malloc(this.numOfRows*s[this.type].BYTES_PER_ELEMENT)}isMemoryForBufferAllocated(){return 0!=this.buf}putDataToBuffer(t){if(this.isMemoryForBufferAllocated()){const n=this.type,e=a[n],r=t[i[n]];let o=null;const u=this.data;o="int"==u.type&&"i32"==n||"double"==u.type&&"f32"==n?u.getRawData():new s[n](u.getRawData()),o&&r.set(o,this.buf>>e)}}getDataFromBuffer(t){if(this.toUpdate&&this.isMemoryForBufferAllocated()){const n=this.type,e=t[i[n]],r=this.buf,o=s[n].BYTES_PER_ELEMENT,a=this.data.getRawData();for(let t=0;t<this.numOfRows;t++)a[t]=e[r/o+t]}}freeBuffer(t){this.isMemoryForBufferAllocated()&&(t._free(this.buf),this.buf=0)}}class f extends c{constructor(t,n){super([],t,!0),this.numOfRows=n}putDataToBuffer(t){}getDataFromBuffer(t){if(this.toUpdate&&this.isMemoryForBufferAllocated()){const n=this.type,e=t[i[n]],r=this.buf,o=u[n],a=new s[n](this.numOfRows);for(let t=0;t<a.length;t++)a[t]=e[r/a.BYTES_PER_ELEMENT+t];this.data=o("name",a)}}}class h extends l{constructor(t,n,e=!1){super(t),this.type=n,this.toUpdate=e,this.buf=0,this.numOfColumns=t.length,this.numOfRows=t[0].length}complementArrOfParams(t){t.push(this.buf),t.push(this.numOfRows),t.push(this.numOfColumns)}complementArrOfTypes(t){t.push("number"),t.push("number"),t.push("number")}allocateMemoryForBuffer(t){this.buf=t._malloc(this.numOfRows*this.numOfColumns*s[this.type].BYTES_PER_ELEMENT)}isMemoryForBufferAllocated(){return 0!=this.buf}putDataToBuffer(t){if(this.isMemoryForBufferAllocated()){const n=this.type,e=a[n],r=t[i[n]],o=s[n].BYTES_PER_ELEMENT;for(let t=0;t<this.numOfColumns;t++){let i=null;const a=this.data[t];i="int"==a.type&&"i32"==n||"double"==a.type&&"f32"==n?a.getRawData():new s[n](a.getRawData()),null!=i&&r.set(i,this.buf+t*this.numOfRows*o>>e)}}}getDataFromBuffer(t){if(this.toUpdate&&this.isMemoryForBufferAllocated()){const n=this.type,e=t[i[n]],r=this.numOfRows,o=this.numOfColumns,a=new s[n](e.buffer,this.buf,r*o);for(let t=0;t<o;t++){const n=this.data[t].getRawData();for(let e=0;e<r;e++)n[e]=a[e+t*r]}}}freeBuffer(t){this.isMemoryForBufferAllocated()&&(t._free(this.buf),this.buf=0)}}class m extends h{constructor(t,n,e){super([[]],t,!0),this.data=[],this.numOfColumns=e,this.numOfRows=n}putDataToBuffer(t){}getDataFromBuffer(t){if(this.toUpdate&&this.isMemoryForBufferAllocated()){const n=this.type,e=t[i[n]],r=this.numOfRows,o=this.numOfColumns,a=s[n].BYTES_PER_ELEMENT,l=u[n],c=this.buf;for(let t=0;t<o;t++){const o=new s[n](r);for(let n=0;n<r;n++)o[n]=e[c/a+n+t*r];this.data.push(l((t+1).toString(),o))}}}}const d={intColumn:t=>new c(t,"i32"),newIntColumn:t=>new f("i32",t),intColumns:t=>new h(t.toList(),"i32"),newIntColumns:(t,n)=>new m("i32",t,n),floatColumn:t=>new c(t,"f32"),newFloatColumn:t=>new f("f32",t),floatColumns:t=>new h(t.toList(),"f32"),newFloatColumns:(t,n)=>new m("f32",t,n),int:t=>new l(t),num:t=>new l(t)},p={tableFromColumns:t=>DG.DataFrame.fromColumns(t.data),num:t=>t,int:t=>t,double:t=>t,column:t=>t.data},g="num",v="floatColumn",y="intColumn",w="floatColumns",E="newFloatColumns",A="intColumns",C="newIntColumns",_="newFloatColumn",b="newIntColumn",I="column",N="_callResult",S="numOfRows",M="numOfColumns",T="ref",O="value",P="tableFromColumns",x="objects",L="int",R="double",F={intColumn:Int32Array,floatColumn:Float32Array,floatColumns:Float32Array,newFloatColumns:Float32Array,intColumns:Int32Array,newIntColumns:Int32Array,newFloatColumn:Float32Array,newIntColumn:Int32Array};function D(t,n){let e,r=[],o=0;for(const i in t){const s=t[i],a=s.type;if(i!==N){switch(a){case g:case L:case R:s.data=n[o],o++;break;case y:case v:let r,i=n[o];r=i.type===L&&a===y||i.type===R&&a===v?i.getRawData():new F[a](i.getRawData()),s.data={array:r,numOfRows:r.length},o++;break;case b:case _:let u=0;e=s[S][T],u=t[e].type===g?t[e].data:t[e].data[s[S][O]],s.data={numOfRows:u},o++;break;case A:case w:let l=[];for(let t of n[o].toList())t.type===L&&a===y||t.type===R&&a===v?l.push(t.getRawData()):l.push(new F[a](t.getRawData()));s.data={arrays:l,numOfRows:l[0].length,numOfColumns:l.length},o++;break;case C:case E:let c=0,f=0;e=s[S][T],c=t[e].type===g?t[e].data:t[e].data[s[S][O]],e=s[M][T],f=t[e].type===g?t[e].data:t[e].data[s[M][O]],s.data={numOfRows:c,numOfColumns:f},o++;break;default:return}r.push(s)}}return r}function U(t,n){t.arguments._callResult=n.callResult,function(t,n){const e={newFloatColumns:DG.Column.fromFloat32Array,newIntColumns:DG.Column.fromInt32Array,newFloatColumn:DG.Column.fromFloat32Array,newIntColumn:DG.Column.fromInt32Array};let r=0;for(const o in t){const i=t[o];switch(i.type){case g:case L:case R:case y:case v:case w:case A:break;case _:case b:let t;null==i.name?t=(0).toString():a=i.name,i.column=e[i.type](t,n[r].array);break;case C:case E:let o=[],s=n[r].arrays.length,a=[];if(null==i.names)for(let t=1;t<=s;t++)a.push(t.toString());else a=i.names;for(let t=0;t<s;t++)o.push(e[i.type](a[t],n[r].arrays[t]));i.columns=o}r++}}(t.arguments,n.args);let e=function(t){let n=t.output;const e={newFloatColumns:"columns",newIntColumns:"columns",newFloatColumn:"column",newIntColumn:"column"};switch(n.type){case g:case L:case R:return t.arguments[n.source];case I:return t.arguments[n.source].column;case P:return DG.DataFrame.fromColumns(t.arguments[n.source].columns);case x:let r=[];for(let o of n.source){let n=t.arguments[o];r.push(n[e[n.type]])}return r}}(t);return function(t){for(const n in t){const e=t[n];switch(e.type){case g:case L:case R:case y:case v:case A:case w:break;case b:case _:e.column=null;break;case C:case E:e.columns=null}}}(t.arguments),e}const B=1,k=1,V=1,G=0,q=100,W=1e8,Y="components must be positive.",H="components must not be greater than features count.",z="min must be less than max.",$="features must be positive.",K="samples must be positive.",j="violators percentage must be from the range from 0 to 100.",X="dataframe is too big.",Q="unsupported column type: ";function J(t){if(t.type!=o.COLUMN_TYPE.FLOAT&&t.type!=o.COLUMN_TYPE.INT)throw new Error(Q+t.type)}function Z(t){if(t.stats.missingValueCount>0)throw new Error(`The column '${t.name}' has missing values.`)}function tt(t,n){if(function(t,n){if(n<B)throw new Error(Y);if(n>t.length)throw new Error(H);for(const n of t)J(n),Z(n)}(t,n),t.length*t.byIndex(0).length>W)throw new Error(X)}var nt=function(t,n,e,r){return new(e||(e=Promise))((function(o,i){function s(t){try{u(r.next(t))}catch(t){i(t)}}function a(t){try{u(r.throw(t))}catch(t){i(t)}}function u(t){var n;t.done?o(t.value):(n=t.value,n instanceof e?n:new e((function(t){t(n)}))).then(s,a)}u((r=r.apply(t,n||[])).next())}))};var et=function(t,n,e,r){return new(e||(e=Promise))((function(o,i){function s(t){try{u(r.next(t))}catch(t){i(t)}}function a(t){try{u(r.throw(t))}catch(t){i(t)}}function u(t){var n;t.done?o(t.value):(n=t.value,n instanceof e?n:new e((function(t){t(n)}))).then(s,a)}u((r=r.apply(t,n||[])).next())}))};const rt=0,ot=1,it="Feature #",st="Label";function at(t,n,r,i,s,a,u,l){return et(this,void 0,void 0,(function*(){!function(t,n,e,r,o){if(e>=r)throw new Error(z);if(n<V)throw new Error($);if(t<k)throw new Error(K);if(o<G||o>q)throw new Error(j)}(i,s,a,u,l);const c=o.Column.fromList("double","kernelParams",n);let f;const h=async function(t,n,r,o,i,s,a){return new Promise(((u,l)=>{const c=new Worker(new URL(e.p+e.u(583),e.b));c.postMessage(D(EDA.generateDataset.arguments,[t,n,r,o,i,s,a])),c.onmessage=function(t){c.terminate(),u(U(EDA.generateDataset,t.data))}}))}(t,c,i,s,a,u,l);yield h.then((t=>{f=t}),(t=>{throw new Error(`Error: ${t}`)})),f[ot].name=st;for(const t of f[rt])t.name=it+t.name;const m=o.DataFrame.fromColumns(f[rt]);return m.name=r,m.columns.add(f[ot]),m}))}var ut=function(t,n,e,r){return new(e||(e=Promise))((function(o,i){function s(t){try{u(r.next(t))}catch(t){i(t)}}function a(t){try{u(r.throw(t))}catch(t){i(t)}}function u(t){var n;t.done?o(t.value):(n=t.value,n instanceof e?n:new e((function(t){t(n)}))).then(s,a)}u((r=r.apply(t,n||[])).next())}))};const lt=0,ct=1,ft=2,ht=3,mt=4,dt=0,pt=1,gt=2,vt=3,yt=4,wt=5,Et=6,At=7,Ct=0,_t=1,bt=2,It=3,Nt=0,St=0,Mt=1,Tt=0,Ot=1,Pt=0,xt=0,Lt=0,Rt=0,Ft="gamma must be strictly positive.",Dt="sigma must be strictly positive.",Ut="c must be strictly positive.",Bt="d must be strictly positive.",kt="incorrect kernel.",Vt="labels must be strings of two categories.",Gt="Labels",qt="predicted",Wt="correctness",Yt="Confusion matrix",Ht="mean",zt="std dev",$t="alpha",Kt="weight",jt="Gamma",Xt="Kernel",Qt="Kernel params",Jt="Kernel parameter 1",Zt="Kernel parameter 2",tn="Features count",nn="Train samples count",en="Train error, %",rn=["linear","polynomial","RBF","sigmoid"],on="Sensitivity",sn="Specificity",an="Balanced accuracy",un="Positive predicitve value",ln="Negative predicitve value",cn="prediction",fn=4,hn=3,mn=2,dn=0,pn=1,gn=2,vn=0,yn=1;function wn(t,n,r){return ut(this,void 0,void 0,(function*(){const i=n.columns;if(2!=r.categories.length)throw new Error(Vt);let s=o.Column.float(r.name,r.length);for(var a=0;a<r.length;a++)s.set(a,r.get(a)==r.categories[0]?-1:1,!1);let u=yield function(t,n,r){return ut(this,void 0,void 0,(function*(){!function(t){if(t.gamma<=Pt)throw new Error(Ft);switch(t.kernel){case lt:return;case ft:if(t.sigma<=xt)throw new Error(Dt);return;case ct:if(t.cParam<=Lt)throw new Error(Ut);if(t.dParam<=Rt)throw new Error(Bt);return;case ht:return;default:throw new Error(kt)}}(t);const i=[vn,vn];switch(t.kernel){case lt:break;case ft:i[Nt]=t.sigma;break;case ct:i[St]=t.cParam,i[Mt]=t.dParam;break;case ht:i[Tt]=t.kappa,i[Ot]=t.theta;break;default:throw new Error(kt)}const s=o.Column.fromList("double",Qt,i),a=n.toList(),u=a[0].length+yn,l=a.length+yn,c=mt;let f;const h=async function(t,n,r,o,i,s,a,u){return new Promise(((l,c)=>{const f=new Worker(new URL(e.p+e.u(656),e.b));f.postMessage(D(EDA.trainAndAnalyzeLSSVM.arguments,[t,n,r,o,i,s,a,u])),f.onmessage=function(t){f.terminate(),l(U(EDA.trainAndAnalyzeLSSVM,t.data))}}))}(t.gamma,t.kernel,s,u,l,c,n,r);yield h.then((t=>{f=t}),(t=>{throw new Error(`Error: ${t}`)})),f[pt].name=Ht,f[gt].name=zt,f[vt].name=$t,f[yt].name=Kt,f[wt].name=qt,f[Et].name=Wt,f[At].name=Yt;const m={trainGamma:t.gamma,kernelType:t.kernel,kernelParams:s,trainLabels:r,normalizedTrainData:o.DataFrame.fromColumns(f[dt]),means:f[pt],stdDevs:f[gt],modelParams:f[vt],modelWeights:f[yt],predictedLabels:f[wt],correctness:f[Et],confusionMatrix:f[At],trainError:void 0,featuresCount:a.length,trainSamplesCount:a[0].length};return function(t){const n=t.confusionMatrix.getRawData(),e=n[Ct],r=n[It],o=n[bt],i=n[_t],s=e+i,a=o+r,u=e/s,l=r/a,c=e/(e+o),f=r/(r+i),h=(e+r)/(s+a),m=(u+l)/2;t.sensitivity=u,t.specificity=l,t.balancedAccuracy=m,t.positivePredicitveValue=c,t.negativePredicitveValue=f,t.trainError=100*(1-h)}(m),m}))}(t,i,s);return u.realLabels=r,u}))}function En(t,n){const e=Cn(n);return o.Viewer.form(e.modelInfo,{showNavigation:!1}).root}function An(t){const n=t.normalizedTrainData.columns,e=t.trainSamplesCount,r=t.featuresCount,i=o.DataFrame.fromColumns([t.realLabels]).toByteArray(),s=fn+i.length+4-i.length%4,a=function(t){const n=t.kernelParams.getRawData();return o.DataFrame.fromColumns([o.Column.fromList("double",jt,[t.trainGamma]),o.Column.fromStrings(Xt,[rn[t.kernelType]]),o.Column.fromList("double",Jt,[n[0]]),o.Column.fromList("double",Zt,[n[1]]),o.Column.fromList("double",tn,[t.featuresCount]),o.Column.fromList("double",nn,[t.trainSamplesCount]),o.Column.fromList("double",en,[t.trainError]),o.Column.fromList("double",an,[t.balancedAccuracy]),o.Column.fromList("double",on,[t.sensitivity]),o.Column.fromList("double",sn,[t.specificity]),o.Column.fromList("double",un,[t.positivePredicitveValue]),o.Column.fromList("double",ln,[t.negativePredicitveValue])])}(t).toByteArray(),u=fn+a.length+4-a.length%4,l=new Uint8Array(fn*(hn+mn+e+r+r+e+yn+r+yn+r*e)+s+u),c=l.buffer;let f=0,h=new Int32Array(c,f,hn);h[dn]=t.kernelType,h[pn]=e,h[gn]=r,f+=hn*fn;let m=new Float32Array(c,f,mn);m.set(t.kernelParams.getRawData()),f+=mn*fn,m=new Float32Array(c,f,e),m.set(t.trainLabels.getRawData()),f+=e*fn,m=new Float32Array(c,f,r),m.set(t.means.getRawData()),f+=r*fn,m=new Float32Array(c,f,r),m.set(t.stdDevs.getRawData()),f+=r*fn,m=new Float32Array(c,f,e+yn),m.set(t.modelParams.getRawData()),f+=(e+yn)*fn,m=new Float32Array(c,f,r+yn),m.set(t.modelWeights.getRawData()),f+=(r+yn)*fn;for(const t of n)m=new Float32Array(c,f,r),m.set(t.getRawData()),f+=r*fn;return h=new Int32Array(c,f,1),h[0]=i.length,l.set(i,f+fn),f+=s,h=new Int32Array(c,f,1),h[0]=a.length,l.set(a,f+fn),f+=u,l}function Cn(t){const n=t.buffer;let e=0;const r=new Int32Array(n,e,hn);e+=hn*fn;const i=r[pn],s=r[gn],a=o.Column.fromFloat32Array(Qt,new Float32Array(n,e,mn));e+=mn*fn;const u=o.Column.fromFloat32Array(Gt,new Float32Array(n,e,i));e+=i*fn;const l=o.Column.fromFloat32Array(Ht,new Float32Array(n,e,s));e+=s*fn;const c=o.Column.fromFloat32Array(zt,new Float32Array(n,e,s));e+=s*fn;const f=o.Column.fromFloat32Array($t,new Float32Array(n,e,i+yn));e+=(i+yn)*fn;const h=o.Column.fromFloat32Array(Kt,new Float32Array(n,e,s+yn));e+=(s+yn)*fn;const m=[];for(let t=0;t<i;t++)m.push(o.Column.fromFloat32Array(t.toString(),new Float32Array(n,e,s))),e+=s*fn;const d=o.DataFrame.fromColumns(m),p=new Int32Array(n,e,1)[0],g=p+4-p%4;e+=fn;const v=o.DataFrame.fromByteArray(new Uint8Array(n,e,p)).columns.byIndex(0);e+=g;const y=new Int32Array(n,e,1)[0],w=y+4-y%4;e+=fn;const E=o.DataFrame.fromByteArray(new Uint8Array(n,e,y));return e+=w,{kernelType:r[dn],kernelParams:a,trainLabels:u,realLabels:v,means:l,stdDevs:c,modelParams:f,modelWeights:h,normalizedTrainData:d,modelInfo:E}}function _n(t,n){return ut(this,void 0,void 0,(function*(){const r=Cn(new Uint8Array(n)),i=yield function(t,n){return ut(this,void 0,void 0,(function*(){let r;const o=async function(t,n,r,o,i,s,a,u,l){return new Promise(((c,f)=>{const h=new Worker(new URL(e.p+e.u(763),e.b));h.postMessage(D(EDA.predictByLSSVM.arguments,[t,n,r,o,i,s,a,u,l])),h.onmessage=function(t){h.terminate(),c(U(EDA.predictByLSSVM,t.data))}}))}(t.kernelType,t.kernelParams,t.normalizedTrainData.columns,t.trainLabels,t.means,t.stdDevs,t.modelParams,t.modelWeights,n);return yield o.then((t=>{r=t}),(t=>{throw new Error(`Error: ${t}`)})),r}))}(r,t.columns),s=o.Column.string(cn,i.length),a=r.realLabels.categories;for(var u=0;u<s.length;u++)s.set(u,-1==i.get(u)?a[0]:a[1]);return o.DataFrame.fromColumns([s])}))}function bn(t,n){const e=t.columns;if(!n.matches("categorical")||n.categories.length>2)return!1;for(var r=!0,o=0;o<e.length;o++)r=r&&e.byIndex(o).matches("numerical");return r}function In(t,n){return t.rowCount<=1e3}var Nn,Sn,Mn,Tn,On,Pn,xn,Ln;!function(t){t[t.COMPUTE_COMPONENTS=0]="COMPUTE_COMPONENTS",t[t.PERFORM_MVA=1]="PERFORM_MVA",t[t.DEMO=2]="DEMO"}(Nn||(Nn={})),function(t){t.NO_DF="No dataframe is opened",t.NO_COLS="No numeric columns without missing values",t.ONE_COL="No columns to be used as features (just one numeric columns without missing values)",t.EMPTY_DF="Dataframe is empty"}(Sn||(Sn={})),function(t){t.PREDICT="Predict",t.USING="Using",t.COMPONENTS="Components",t.PLS="PLS",t.MVA="Multivariate Analysis (PLS)",t.RUN="RUN",t.NAMES="Names",t.MODEL="Observed vs. Predicted",t.FEATURE="Feature",t.REGR_COEFS="Regression Coefficients",t.XLOADING="x.loading.p",t.LOADINGS="Loadings",t.XSCORE="x.score.t",t.YSCORE="y.score.u",t.SCORES="Scores",t.EXPL_VAR="Explained Variance",t.EXPLORE="Explore"}(Mn||(Mn={})),function(t){t.PREDICT="Column with the response variable",t.FEATURES="Predictors (features)",t.COMPONENTS="Number of PLS components",t.PLS="Compute PLS components",t.MVA="Perform multivariate analysis",t.NAMES="Names of data samples"}(Tn||(Tn={})),function(t){t.PLS="https://datagrok.ai/help/explore/multivariate-analysis/pls#pls-components",t.MVA="https://datagrok.ai/help/explore/multivariate-analysis/pls",t.MODEL="https://datagrok.ai/help/explore/multivariate-analysis/plots/predicted-vs-reference",t.COEFFS="https://datagrok.ai/help/explore/multivariate-analysis/plots/regression-coefficients",t.LOADINGS="https://datagrok.ai/help/explore/multivariate-analysis/plots/loadings",t.EXPL_VARS="https://datagrok.ai/help/explore/multivariate-analysis/plots/explained-variance",t.SCORES="https://datagrok.ai/help/explore/multivariate-analysis/plots/scores"}(On||(On={})),function(t){t[t.DEFAULT=3]="DEFAULT",t[t.MIN=1]="MIN"}(Pn||(Pn={})),function(t){t.PREFIX="PLS",t.SUFFIX="(predicted)",t.COMP="component",t.COMPS="components"}(xn||(xn={})),function(t){t[t.PREDICTION=0]="PREDICTION",t[t.REGR_COEFFS=1]="REGR_COEFFS",t[t.T_SCORES=2]="T_SCORES",t[t.U_SCORES=3]="U_SCORES",t[t.X_LOADINGS=4]="X_LOADINGS",t[t.Y_LOADINGS=5]="Y_LOADINGS"}(Ln||(Ln={}));const Rn="Int",Fn=6,Dn=[.49,.79,.99],Un=1,Bn=200,kn=200;var Vn;!function(t){t.AXIS="#838383",t.CIRCLE="#0000FF"}(Vn||(Vn={}));const Gn="# Data\nEach car has many features - patterns extraction is complicated.\n\n# Model\nPredict car price by its other features.\n\n# Try\nPress 'RUN' to perform multivariate analysis using partial least squares\n([PLS](https://en.wikipedia.org/wiki/Partial_least_squares_regression)) regression.\n\n# Essence\nThe method finds the latent factors that\n\n* capture the maximum variance in the features\n* maximize correlation with the response variable",qn=[{caption:Mn.MODEL,text:"Closer to the line means better price prediction."},{caption:Mn.SCORES,text:"The latent factor values for each data sample reflect the similarities and dissimilarities among observations."},{caption:Mn.LOADINGS,text:"The impact of each feature on the latent factors: higher loading means stronger influence."},{caption:Mn.REGR_COEFS,text:"Parameters of the obtained linear model: features make different contribution to the prediction."},{caption:Mn.EXPL_VAR,text:"How well the latent components fit source data: closer to one means better fit."}],Wn=qn.map((t=>`# ${t.caption}\n\n${t.text}`)).join("\n\n")+`\n\n# Learn more\n \n * [Multivariate analysis](${On.MVA}),\n * [ANOVA](https://datagrok.ai/help/explore/anova)`;var Yn=function(t,n,e,r){return new(e||(e=Promise))((function(o,i){function s(t){try{u(r.next(t))}catch(t){i(t)}}function a(t){try{u(r.throw(t))}catch(t){i(t)}}function u(t){var n;t.done?o(t.value):(n=t.value,n instanceof e?n:new e((function(t){t(n)}))).then(s,a)}u((r=r.apply(t,n||[])).next())}))};const Hn=Math.min,zn=Math.max;function $n(t){return Yn(this,void 0,void 0,(function*(){tt(t.features,t.components),J(t.predict),Z(t.predict);const n=yield async function(t,n,r,o){return new Promise(((t,i)=>{const s=new Worker(new URL(e.p+e.u(412),e.b));s.postMessage(D(EDA.partialLeastSquareRegression.arguments,[n,r,o])),s.onmessage=function(n){s.terminate(),t(U(EDA.partialLeastSquareRegression,n.data))}}))}(t.table,t.features,t.predict,t.components);return{prediction:n[Ln.PREDICTION],regressionCoefficients:n[Ln.REGR_COEFFS],tScores:n[Ln.T_SCORES],uScores:n[Ln.U_SCORES],xLoadings:n[Ln.X_LOADINGS],yLoadings:n[Ln.Y_LOADINGS]}}))}function Kn(e){return Yn(this,void 0,void 0,(function*(){const r=t.shell.t;if(null===r)return void t.shell.warning(Sn.NO_DF);if(0===r.rowCount)return void t.shell.warning(Sn.EMPTY_DF);const i=[],s=[],a=[],u=t=>(t.type===o.COLUMN_TYPE.INT||t.type===o.COLUMN_TYPE.FLOAT)&&0===t.stats.missingValueCount;if(r.columns.toList().forEach((t=>{u(t)?(i.push(t.name),s.push(t)):t.type===o.COLUMN_TYPE.STRING&&a.push(t)})),0===i.length)return void t.shell.warning(Sn.NO_COLS);if(1===i.length)return void t.shell.warning(Sn.ONE_COL);let l=s[s.length-1];const c=n.input.column(Mn.PREDICT,{table:r,value:l,onValueChanged:()=>{l=c.value,y()},filter:t=>u(t)});let f;c.setTooltip(Tn.PREDICT);const h=n.input.columns(Mn.USING,{table:r,available:i});h.onInput((()=>y())),h.setTooltip(Tn.FEATURES);let m=Hn(i.length-1,Pn.DEFAULT);const d=n.input.forProperty(o.Property.fromOptions({name:Mn.COMPONENTS,inputType:Rn,defaultValue:m,showPlusMinus:!0,min:Pn.MIN}));let p,g,v;d.onInput((()=>y())),d.setTooltip(Tn.COMPONENTS),e===Nn.COMPUTE_COMPONENTS?(p=Mn.PLS,g=On.PLS,v=Tn.PLS):(p=Mn.MVA,g=On.MVA,v=Tn.MVA);const y=()=>{var t;h.value=h.value.filter((t=>t!==l)),f=h.value,d.value=Hn(zn(null!==(t=d.value)&&void 0!==t?t:m,Pn.MIN),f.length),m=d.value,A.getButton(Mn.RUN).disabled=0===f.length||m<=0};let w=a.length>0?a[0]:null;const E=n.input.column(Mn.NAMES,{table:r,value:w,onValueChanged:()=>w=c.value,filter:t=>t.type===o.COLUMN_TYPE.STRING});E.setTooltip(Tn.NAMES),E.root.hidden=0===a.length||e===Nn.COMPUTE_COMPONENTS;const A=n.dialog({title:p,helpUrl:g}).add(n.form([c,h,d,E])).addButton(Mn.RUN,(()=>Yn(this,void 0,void 0,(function*(){A.close(),yield function(e,r){return Yn(this,void 0,void 0,(function*(){var i,s;const a=yield $n(e),u=a.tScores,l=e.table.columns,c=e.features.names(),f=r===Nn.COMPUTE_COMPONENTS?xn.PREFIX:Mn.XSCORE;if(u.forEach(((t,n)=>{t.name=l.getUnusedName(`${f}${n+1}`),l.add(t)})),r===Nn.COMPUTE_COMPONENTS)return;const h=t.shell.tableView(e.table.name),m=o.DataFrame.fromColumns([o.Column.fromStrings(Mn.FEATURE,c),a.regressionCoefficients]);a.xLoadings.forEach(((t,n)=>{t.name=m.columns.getUnusedName(`${Mn.XLOADING}${n+1}`),m.columns.add(t)}));const d=a.prediction;d.name=l.getUnusedName(`${e.predict.name} ${xn.SUFFIX}`),l.add(d);const p=h.addViewer(o.Viewer.scatterPlot(e.table,{title:Mn.MODEL,xColumnName:e.predict.name,yColumnName:d.name,showRegressionLine:!0,markerType:o.MARKER_TYPE.CIRCLE,labels:null===(i=e.names)||void 0===i?void 0:i.name,help:On.MODEL}));a.regressionCoefficients.name=Mn.REGR_COEFS;const g=h.addViewer(o.Viewer.barChart(m,{title:Mn.REGR_COEFS,splitColumnName:Mn.FEATURE,valueColumnName:a.regressionCoefficients.name,valueAggrType:o.AGG.AVG,help:On.COEFFS,showValueSelector:!1,showStackSelector:!1}));a.xLoadings.forEach(((t,n)=>t.name=`${Mn.XLOADING}${n+1}`));const v=h.addViewer(o.Viewer.scatterPlot(m,{title:Mn.LOADINGS,xColumnName:`${Mn.XLOADING}1`,yColumnName:`${Mn.XLOADING}${a.xLoadings.length>1?"2":"1"}`,markerType:o.MARKER_TYPE.CIRCLE,labels:Mn.FEATURE,help:On.LOADINGS})),y=u.map((t=>t.name));a.uScores.forEach(((t,n)=>{t.name=l.getUnusedName(`${Mn.YSCORE}${n+1}`),l.add(t),y.push(t.name)}));const w=o.Viewer.scatterPlot(e.table,{title:Mn.SCORES,xColumnName:u[0].name,yColumnName:u.length>1?u[1].name:a.uScores[0].name,markerType:o.MARKER_TYPE.CIRCLE,labels:null===(s=e.names)||void 0===s?void 0:s.name,help:On.SCORES,showViewerFormulaLines:!0}),E=[],A=(t,n)=>{E.push({type:"line",formula:t,width:Un,visible:!0,title:" ",min:-n,max:n,color:Vn.CIRCLE})};y.forEach((t=>{const n="${"+t+"}";E.push({type:"line",formula:`${n} = 0`,width:Un,visible:!0,title:" ",color:Vn.AXIS}),y.forEach((t=>{const e="${"+t+"}";Dn.forEach((t=>{A(e+` = sqrt(${t*t} - ${n} * ${n})`,t),A(e+` = -sqrt(${t*t} - ${n} * ${n})`,t)}))}))})),w.meta.formulaLines.addAll(E),h.addViewer(w);const C=a.yLoadings.getRawData(),_=a.xLoadings.map((t=>t.getRawData())),b=e.table.rowCount,I=c.length,N=e.components,S=new Float32Array(N),M=[],T=[];for(let t=0;t<I;++t)T.push(new Float32Array(N));S[0]=Math.pow(C[0],2)/b,M.push(`1 ${xn.COMP}`),T.forEach(((t,n)=>{t[0]=Math.pow(_[0][n],2)/b}));for(let t=1;t<N;++t)S[t]=S[t-1]+Math.pow(C[t],2)/b,T.forEach(((n,e)=>n[t]=n[t-1]+Math.pow(_[t][e],2)/b)),M.push(`${t+1} ${xn.COMPS}`);const O=o.DataFrame.fromColumns([o.Column.fromStrings(Mn.COMPONENTS,M),o.Column.fromFloat32Array(e.predict.name,S)]);T.forEach(((t,n)=>O.columns.add(o.Column.fromFloat32Array(c[n],t))));const P=h.addViewer(o.Viewer.barChart(O,{title:Mn.EXPL_VAR,splitColumnName:Mn.COMPONENTS,valueColumnName:e.predict.name,valueAggrType:o.AGG.AVG,help:On.EXPL_VARS,showCategorySelector:!1,showStackSelector:!1}));if(r===Nn.DEMO){const e=[p,w,v,g,P].map(((t,n)=>({text:qn[n].text,showNextTo:t.root})));n.hints.addTextHint({title:Mn.EXPLORE,pages:e}).helpUrl=On.MVA,t.shell.windows.help.showHelp(n.markdown(Wn))}}))}({table:r,features:o.DataFrame.fromColumns(f).columns,predict:l,components:m,names:w},e)}))),void 0,v).show({x:Bn,y:kn});setTimeout((()=>{h.value=s.filter((t=>t!==l)),f=h.value}),Fn),t.shell.v.append(A.root)}))}var jn,Xn=e(6572);function Qn(t){if(t<=0||t>=1)throw new Error(jn.INCORRECT_SIGNIFICANCE_LEVEL)}function Jn(t){const n=t.size;if(n<=0)throw new Error(jn.INCORRECT_SAMPLE_SIZE);return 1===n?0:(t.sumOfSquares-Math.pow(t.sum,2)/n)/(n-1)}function Zn(t,n,e=.05){Qn(e);const r=Jn(t),o=Jn(n);return 0===o?r===o:r/o<Xn.centralF.inv(1-e,t.size-1,n.size-1)}!function(t){t.NON_EQUAL_FACTORS_VALUES_SIZE="non-equal sizes of factor and values arrays. INPUT ERROR.",t.INCORRECT_SIGNIFICANCE_LEVEL="incorrect significance level. It must be from the interval (0, 1). INPUT ERROR.",t.INCORRECT_SAMPLE_SIZE="incorrect size of sample. DATA FACTORIZAING ERROR.",t.NON_EQUAL_VARIANCES="variances are not equal.",t.NON_NORMAL_DISTRIB="non-normal distribution.",t.UNSUPPORTED_COLUMN_TYPE="unsupported column type.",t.INCORRECT_CATEGORIES_COL_TYPE="incorrect categories column type.",t.ANOVA_FAILED_JUST_ONE_CAT="ANOVA filed: there should be at least 2 categories."}(jn||(jn={}));class te{constructor(t,n,e=!1,r=.05){if(this.isNormDistrib=void 0,this.categories=[],t.type!==o.COLUMN_TYPE.STRING)throw new Error;if(t.length!==n.length)throw new Error(jn.NON_EQUAL_FACTORS_VALUES_SIZE);this.setStats(t,n,e,r)}isNormal(){return!0}areVarsEqual(t=.05){const n=this.catCount;if(1===n)return!0;const e={sum:this.sums[0],sumOfSquares:this.sumsOfSquares[0],size:this.subSampleSizes[0]};for(let r=1;r<n;++r)if(!Zn(e,{sum:this.sums[r],sumOfSquares:this.sumsOfSquares[r],size:this.subSampleSizes[r]},t))return!1;return!0}getOneWayAnova(){const t=this.catCount;if(1===t)throw new Error(jn.ANOVA_FAILED_JUST_ONE_CAT);let n=0,e=0;const r=this.size;let o=0;for(let r=0;r<t;++r)n+=this.sums[r],e+=this.sumsOfSquares[r],o+=Math.pow(this.sums[r],2)/this.subSampleSizes[r];const i=e-Math.pow(n,2)/r,s=o-Math.pow(n,2)/r,a=i-s,u=t-1,l=r-t,c=s/u,f=a/l,h=c/f;return{ssBn:s,ssWn:a,ssTot:i,dfBn:u,dfWn:l,dfTot:r-1,msBn:c,msWn:f,fStat:h,pValue:1-Xn.centralF.cdf(h,u,l)}}setStats(t,n,e=!1,r=.05){const i=n.type,s=n.length;switch(i){case o.COLUMN_TYPE.INT:case o.COLUMN_TYPE.FLOAT:this.categories=t.categories;const e=this.categories.length;this.catCount=e,this.size=s;const r=n.getRawData(),i=t.getRawData(),a=new Float64Array(e).fill(0),u=new Float64Array(e).fill(0),l=new Int32Array(e).fill(0);for(let t=0;t<s;++t){const n=i[t];a[n]+=r[t],u[n]+=Math.pow(r[t],2),++l[n]}this.sums=a,this.sumsOfSquares=u,this.subSampleSizes=l;break;default:throw new Error(jn.UNSUPPORTED_COLUMN_TYPE)}}}var ne=function(t,n,e,r){return new(e||(e=Promise))((function(o,i){function s(t){try{u(r.next(t))}catch(t){i(t)}}function a(t){try{u(r.throw(t))}catch(t){i(t)}}function u(t){var n;t.done?o(t.value):(n=t.value,n instanceof e?n:new e((function(t){t(n)}))).then(s,a)}u((r=r.apply(t,n||[])).next())}))};function ee(t,n,r,o){return ne(this,void 0,void 0,(function*(){return new Promise((function(i,s){const a=new Worker(new URL(e.p+e.u(682),e.b));a.postMessage({embedX:t,embedY:n,minPts:o,epsilon:r}),a.onmessage=({data:{error:t,clusters:n}})=>{a.terminate(),t?s(t):i(n)}}))}))}e(5540);let re=null;function oe(){return t=this,n=void 0,r=function*(){if(!re&&(re=yield navigator.gpu.requestAdapter(),null==re))return null;const t=yield re.requestAdapterInfo();return t?ie(t.description,ie(t.vendor,"No GPU description available")):null},new((e=void 0)||(e=Promise))((function(o,i){function s(t){try{u(r.next(t))}catch(t){i(t)}}function a(t){try{u(r.throw(t))}catch(t){i(t)}}function u(t){var n;t.done?o(t.value):(n=t.value,n instanceof e?n:new e((function(t){t(n)}))).then(s,a)}u((r=r.apply(t,n||[])).next())}));var t,n,e,r}function ie(t,n){return t&&""!=t?t:n}var se,ae,ue,le,ce,fe,he,me,de;(ae=se||(se={})).EUCLIDEAN="EUCLIDEAN",ae.MANHATTAN="MANHATTAN",se.EUCLIDEAN,se.MANHATTAN,(le=ue||(ue={})).HAMMING="Hamming",le.EUCLIDEAN="Euclidean",le.MANHATTAN="Manhattan",le.TANIMOTO="Tanimoto",le.LEVENSTEIN="Levenshtein",le.NEEDLEMAN_WUNSCH="Needlemann-Wunsch",le.MONOMER_CHEMICAL_DISTANCE="Monomer chemical distance",le.SOKAL="Sokal",le.COSINE="Cosine",le.ASYMMETRIC="Asymmetric",le.Difference="Difference",le.OneHot="One-Hot",ue.HAMMING,ue.EUCLIDEAN,ue.MANHATTAN,ue.TANIMOTO,ue.LEVENSTEIN,ue.NEEDLEMAN_WUNSCH,ue.MONOMER_CHEMICAL_DISTANCE,ue.SOKAL,ue.COSINE,ue.ASYMMETRIC,ue.Difference,ue.OneHot,ue.HAMMING,ue.EUCLIDEAN,ue.MANHATTAN,ue.TANIMOTO,ue.SOKAL,ue.COSINE,ue.ASYMMETRIC,ue.LEVENSTEIN,ue.NEEDLEMAN_WUNSCH,ue.MONOMER_CHEMICAL_DISTANCE,ue.Difference,ue.OneHot,new Set([ue.HAMMING,ue.LEVENSTEIN,ue.NEEDLEMAN_WUNSCH,ue.MONOMER_CHEMICAL_DISTANCE,ue.OneHot]),new Set([ue.HAMMING,ue.EUCLIDEAN,ue.MANHATTAN,ue.MONOMER_CHEMICAL_DISTANCE,ue.LEVENSTEIN,ue.NEEDLEMAN_WUNSCH,ue.TANIMOTO,ue.COSINE,ue.SOKAL,ue.ASYMMETRIC,ue.OneHot,ue.Difference]),new Set([ue.EUCLIDEAN,ue.MANHATTAN,ue.OneHot,ue.Difference]),new Set([ue.EUCLIDEAN,ue.MANHATTAN,ue.Difference]),new Set([ue.EUCLIDEAN,ue.MANHATTAN,ue.Difference]),new Set([ue.TANIMOTO,ue.COSINE,ue.SOKAL,ue.ASYMMETRIC]),function(t){t.ADD="ADD",t.SUB="SUB",t.MULT="MULT"}(ce||(ce={})),function(t){t.SQUARE="SQUARE",t.INVERSE="INVERSE",t.TRANSPOSE="TRANSPOSE",t.NORM="NORM",t.COLUMN_NORM="COLUMN_NORM"}(fe||(fe={})),function(t){t.SCALARMULT="SCALARMULT",t.SCALARADD="SCALARADD",t.SCALARPOW="SCALARPOW"}(he||(he={})),Object.prototype.toString,(de=me||(me={})).UMAP="UMAP",de.T_SNE="t-SNE";const pe=2,ge="MCL_OPTIONS";o.SEMTYPE.MOLECULE,o.SEMTYPE.MACROMOLECULE;class ve{constructor(){this.epsilon={uiName:"Epsilon",value:.01,tooltip:"Minimum distance between cluster points",min:0,max:2,step:.005},this.minPts={uiName:"Minimum points",value:4,tooltip:"Minimum number of points in cluster",min:1,max:1e3,step:1}}}const ye="bypassLargeDataWarning",we="show-scatterplot-progress";var Ee,Ae;(Ae=Ee||(Ee={})).EUCLIDEAN="EUCLIDEAN",Ae.MANHATTAN="MANHATTAN";const Ce=rxjs;var _e=e(5072),be=e.n(_e),Ie=e(7825),Ne=e.n(Ie),Se=e(7659),Me=e.n(Se),Te=e(5056),Oe=e.n(Te),Pe=e(540),xe=e.n(Pe),Le=e(1113),Re=e.n(Le),Fe=e(7939),De={};De.styleTagTransform=Re(),De.setAttributes=Oe(),De.insert=Me().bind(null,"head"),De.domAPI=Ne(),De.insertStyleElement=xe(),be()(Fe.A,De),Fe.A&&Fe.A.locals&&Fe.A.locals;class Ue{constructor(){this.learningRate={uiName:"Learninig rate",value:1,tooltip:"The initial learning rate for the embedding optimization"},this.nEpochs={uiName:"Epochs",value:0,tooltip:"The number of epochs to optimize embeddings via SGD. Computed automatically if set to 0"},this.nNeighbors={uiName:"Neighbors",value:15,tooltip:"The number of nearest neighbors to construct the fuzzy manifold"},this.spread={uiName:"Spread",value:1,tooltip:"The effective scale of embedded points, used with min distance to control \n the clumped/dispersed nature of the embedding"},this.minDist={uiName:"Min distance",value:.1,tooltip:"The effective minimum distance between embedded points, \n used with spread to control the clumped/dispersed nature of the embedding"},this.randomSeed={uiName:"Random seed",value:null,tooltip:"Random seed",type:"string"},this.useWebGPU={uiName:"Use WebGPU",value:!1,tooltip:"Use WebGPU for KNN computations",type:"boolean",disableTooltip:"WebGPU is not available"},oe().then((t=>{t?this.useWebGPU.tooltip+=` (${t})`:(this.useWebGPU.value=!1,this.useWebGPU.disable=!0)}))}}class Be{constructor(){this.epsilon={uiName:"Epsilon",value:10,tooltip:"Epsilon is learning rate"},this.perplexity={uiName:"Perplexity",value:30,tooltip:"Roughly how many neighbors each point influences"}}}class ke{constructor(e={}){this.editorSettings={},this.columnOptEditors=[],this.columnOptEditorsRoot=n.div(),this.columnParamsEditorRoot=n.div(),this.weightsEditorRoot=n.div(),this.columnFunctionsMap={},this.methodsParams={[me.UMAP]:new Ue,[me.T_SNE]:new Be},this.dbScanParams=new ve,this.methodSettingsDivs=[],this.supportedFunctions={},this.methodSettingsAnchor=n.div(),this.plotEmbeddingsInput=n.boolInput("Plot embeddings",!0),this.aggregationMethodInput=n.choiceInput("Aggregation",Ee.EUCLIDEAN,[Ee.EUCLIDEAN,Ee.MANHATTAN]),this.aggregationMethodInput.setTooltip("Aggregation method for combining distances between columns"),this.onColumnsChanged=new Ce.Subject,this.editorSettings=e,this.columnParamsEditorAccordion=n.accordion(),o.Func.find({tags:["dim-red-preprocessing-function"]}).forEach((t=>{const n=t.options.get("supportedSemTypes")??"",e=t.friendlyName??t.name,r=t.options.get("supportedTypes")??"",o=t.options.get("supportedUnits")??"",i=t.options.get("supportedDistanceFunctions")??"";this.editorSettings.semtype&&!n.includes(this.editorSettings.semtype)||this.editorSettings.type&&!r.includes(this.editorSettings.type)||this.editorSettings.units&&!o.includes(this.editorSettings.units)||(this.supportedFunctions[e]={func:t,semTypes:n?n.split(","):[],types:r?r.split(","):[],units:o?o.split(","):[],distanceFunctions:i?i.split(","):[]})})),this.postProcessingEditor=new qe,this.tableInput=n.tableInput("Table",t.shell.tv.dataFrame,t.shell.tables,(()=>{this.onTableInputChanged()})),this.onTableInputChanged();let r=!1;this.methodInput=n.choiceInput("Method",me.UMAP,[me.UMAP,me.T_SNE],(()=>{r&&this.createAlgorithmSettingsDiv(this.methodsParams[this.methodInput.value])})),this.methodSettingsIcon=n.icons.settings((()=>{r=!r,r?this.createAlgorithmSettingsDiv(this.methodsParams[this.methodInput.value]):(this.methodSettingsDivs.forEach((t=>t.remove())),this.methodSettingsDivs=[])}),"Modify methods parameters"),this.methodInput.root.classList.add("ml-dim-reduction-settings-input"),this.methodInput.root.prepend(this.methodSettingsIcon),this.columnParamsEditorAccordion.addPane("Column options",(()=>this.columnOptEditorsRoot),!0,null,!1),this.columnParamsEditorAccordion.root.style.display="none",this.columnParamsEditorRoot.appendChild(this.columnParamsEditorAccordion.root),this.columnParamsEditorRoot.appendChild(this.weightsEditorRoot)}onTableInputChanged(){const t=this.tableInput.value;if(!t)return;n.empty(this.columnOptEditorsRoot),n.empty(this.weightsEditorRoot),this.columnFunctionsMap={},t.columns.toList().forEach((t=>{Object.keys(this.supportedFunctions).forEach((n=>{const e=this.supportedFunctions[n].semTypes,r=this.supportedFunctions[n].types,i=this.supportedFunctions[n].units,s=!e.length||t.semType&&e.includes(t.semType),a=!r.length||r.includes(t.type),u=!i.length||t.getTag(o.TAGS.UNITS)&&i.includes(t.getTag(o.TAGS.UNITS));s&&a&&u&&(this.columnFunctionsMap[t.name]||(this.columnFunctionsMap[t.name]=[]),this.columnFunctionsMap[t.name].push(n))}))}));const e=Object.keys(this.columnFunctionsMap),r=n.columnsInput("Columns",t,(()=>{this.onColumnsChanged.next(),n.empty(this.columnOptEditorsRoot),n.empty(this.weightsEditorRoot);const t=r.value;if(this.aggregationMethodInput.root.style.display=!t||t?.length<2?"none":"flex",!t||0===t.length)return void(this.columnParamsEditorAccordion.root.style.display="none");this.columnOptEditors=t.map((t=>new Ve(t,this.columnFunctionsMap[t.name].map((t=>this.supportedFunctions[t])))));const e=n.divV([],{style:{maxHeight:"400px",overflow:"auto"}});this.columnOptEditors.forEach((t=>{e.appendChild(t.accordionDiv)}));const o=new Array(2*this.columnOptEditors.length).fill(null).map(((t,n)=>n%2==0?this.columnOptEditors[n/2].colOptEditors:[]));let i=0;const s=n.table(o,(t=>(i++,t&&t.length>0?t:[this.columnOptEditors[Math.floor((i-1)/2)].preprocessingFuncSettingsDiv=n.div([]),n.div(),n.div(),n.div()])),["Column","Encoding function","Similarity metric","Weight"]);this.columnOptEditors.forEach((t=>{t.preprocessingFuncSettingsDiv?.parentElement?.setAttribute("colspan","4"),t.preprocessingFuncSettingsDiv?.parentElement?.parentElement?.style?.setProperty("height","unset")})),this.columnOptEditors.length>0&&(this.columnParamsEditorAccordion.root.style.display="flex"),s.classList.add("ml-dim-reduction-column-editor-table-root"),this.columnOptEditorsRoot.appendChild(s)}),{available:e});r.fireChanged(),this.columnsInputRoot?(n.empty(this.columnsInputRoot),this.columnsInput=r,Array.from(this.columnsInput.root.children).forEach((t=>this.columnsInputRoot.appendChild(t)))):(this.columnsInputRoot=r.root,this.columnsInput=r)}createAlgorithmSettingsDiv(t){this.methodSettingsDivs.forEach((t=>t.remove())),this.methodSettingsDivs=[];const e=this.methodSettingsAnchor,r=e.parentElement;r&&Object.keys(t).forEach((o=>{const i=t[o],s="string"===i.type?n.stringInput(i.uiName,i.value??"",(()=>{i.value=s.value})):"boolean"===i.type?n.boolInput(i.uiName,i.value??!1,(()=>{i.value=s.value})):n.floatInput(i.uiName,i.value,(()=>{i.value=s.value}));i.disable?(s.enabled=!1,n.tooltip.bind(s.input??s.root,i.disableTooltip??"")):n.tooltip.bind(s.input??s.root,i.tooltip),r.insertBefore(s.root,e),this.methodSettingsDivs.push(s.root)}))}get algorithmOptions(){const t=this.methodsParams[this.methodInput.value],n={};return Object.keys(t).forEach((e=>{null!=t[e].value&&(n[e]=t[e].value)})),n}get dbScanOptions(){return{dbScanEpsilon:this.dbScanParams.epsilon.value??.01,dbScanMinPts:this.dbScanParams.minPts.value??4}}getEditor(){return n.div([this.tableInput.root,this.columnsInputRoot,this.columnParamsEditorRoot,this.aggregationMethodInput.root,this.methodInput.root,this.methodSettingsAnchor,this.plotEmbeddingsInput,this.postProcessingEditor.root],{style:{minWidth:"420px"},classes:"dim-reduction-dialog-form"})}getParams(){return{table:this.tableInput.value,columns:this.columnsInput.value,methodName:this.methodInput.value,preprocessingFunctions:this.columnOptEditors.map((t=>t.preProcessingFunction)),distanceMetrics:this.columnOptEditors.map((t=>t.similarityMetricInput.value)),weights:this.columnOptEditors.map((t=>t.weight??1)),options:{...this.algorithmOptions,...this.dbScanOptions,preprocessingFuncArgs:this.columnOptEditors.map((t=>t.preprocessingFunctionSettings))},plotEmbeddings:this.plotEmbeddingsInput.value,clusterEmbeddings:!1,postProcessingFunction:this.postProcessingEditor.postProcessingFunction,postProcessingFunctionArgs:this.postProcessingEditor.args,aggreaggregationMethod:this.aggregationMethodInput.value}}}class Ve{constructor(t,e){this.preprocessingFuncSettingsDiv=n.div([]),this.preprocessingFunctionSettings={},this.editorDiv=n.div([]),this.hasExtraSettings=!0,this.functionsMap={},this.needsConfiguration=!1,this.weight=1,this.colOptEditors=[],this.weightInput=n.floatInput("Weight",1,(()=>{this.weight=this.weightInput.value??1})),this.column=t,this.supportedFunctions=e.sort(((t,n)=>0!==t.units.length&&0!==n.units.length||t.units.length===n.units.length?t.units.length!==n.units.length?t.units.length-n.units.length:0===t.semTypes.length||0===n.semTypes.length?n.semTypes.length-t.semTypes.length:t.semTypes.length!==n.semTypes.length?t.semTypes.length-n.semTypes.length:t.types.length-n.types.length:n.units.length-t.units.length)),this.supportedFunctions.forEach((t=>{this.functionsMap[Ge(t.func)]=t.func})),this.preprocessingFunctionInput=n.choiceInput("Encoding function",Ge(this.supportedFunctions[0].func),this.supportedFunctions.map((t=>Ge(t.func))),(()=>{const t=this.preprocessingFunctionInput.value,e=this.functionsMap[t];this.preprocessingFunctionSettings={},this.hasExtraSettings=e.inputs.length>2;const o=this.supportedFunctions.find((n=>Ge(n.func)===t));this.getSimilarityMetricInput(o),n.empty(this.preprocessingFuncSettingsDiv),r=!1,this.hasExtraSettings?this.preprocessingFuncSettingsIcon.style.display="flex":this.preprocessingFuncSettingsIcon.style.display="none"})),this.preprocessingFunctionInput.root.style.display="flex",this.createSettingsDiv(this.preprocessingFuncSettingsDiv,this.supportedFunctions[0].func).then((()=>{n.empty(this.preprocessingFuncSettingsDiv)})),this.getSimilarityMetricInput(this.supportedFunctions[0]),this.hasExtraSettings=this.supportedFunctions[0].func.inputs.length>2;let r=!1;this.preprocessingFuncSettingsIcon=n.icons.settings((async()=>{r=!r,r?await this.createSettingsDiv(this.preprocessingFuncSettingsDiv,this.functionsMap[this.preprocessingFunctionInput.value]):n.empty(this.preprocessingFuncSettingsDiv)}),"Modify encoding function parameters"),this.preprocessingFunctionInput.root.classList.add("ml-dim-reduction-settings-input"),this.preprocessingFunctionInput.root.prepend(this.preprocessingFuncSettingsIcon),this.hasExtraSettings?this.preprocessingFuncSettingsIcon.style.display="flex":this.preprocessingFuncSettingsIcon.style.display="none",this.needsConfiguration=!(e.length<2&&!this.hasExtraSettings&&e[0].distanceFunctions.length<2);const o=n.h3(this.column.name,{classes:"ml-dim-reduction-column-editor-column-title"});this.colOptEditors=[o,this.preprocessingFunctionInput.root,this.similarityMetricInputRoot,this.weightInput.root],n.tooltip.bind(o,this.column.name),this.colOptEditors.forEach((t=>t.classList.add("ml-dim-reduction-column-editor-input-root")));const i=n.divH(this.colOptEditors,{classes:"ml-dim-reduction-column-editor-root"});this.accordionDiv=n.divV([]),this.editorDiv.appendChild(i),this.editorDiv.appendChild(this.preprocessingFuncSettingsDiv),this.accordionDiv.appendChild(this.editorDiv)}getSimilarityMetricInput(t){const e=n.choiceInput("Similarity metric",t.distanceFunctions[0],t.distanceFunctions);this.similarityMetricInputRoot?(n.empty(this.similarityMetricInputRoot),this.similarityMetricInput=e,Array.from(this.similarityMetricInput.root.children).forEach((t=>this.similarityMetricInputRoot.appendChild(t)))):(this.similarityMetricInputRoot=e.root,this.similarityMetricInput=e)}get preProcessingFunction(){return this.functionsMap[this.preprocessingFunctionInput.value]}async createSettingsDiv(t,e){if(n.empty(t),e.inputs.length<3)return n.div();const r=e.prepare(),o=await r.buildEditor(n.div());for(let n=2;n<e.inputs.length;n++){const i=e.inputs[n],s=this.preprocessingFunctionSettings[i.name]||r.inputParams[e.inputs[n].name].value||i.defaultValue;s&&(this.preprocessingFunctionSettings[i.name]=s);const a=o.find((t=>t.property.name===i.name));a&&(null!==this.preprocessingFunctionSettings[i.name]&&void 0!==this.preprocessingFunctionSettings[i.name]&&(a.value=this.preprocessingFunctionSettings[i.name]),a.onChanged((()=>{this.preprocessingFunctionSettings[i.name]=a.value})),t.append(a.root))}return t.style.marginBottom="10px",t}}function Ge(t){return t.friendlyName??t.name}class qe{constructor(){this.postProcessingFunctionsMap={},this._root=n.div([]),this._postProcessingArgs={},this._argsElement=n.div([]),this._settingsOpened=!1,this._settingsIcon=n.icons.settings((async()=>{this._settingsOpened=!this._settingsOpened,this._settingsOpened?this._argsElement.style.display="block":this._argsElement.style.display="none"})),this._argsElement.style.display="none",o.Func.find({tags:["dim-red-postprocessing-function"]}).filter((t=>t.inputs.length>=2)).forEach((t=>{const n=t.friendlyName??t.name;this.postProcessingFunctionsMap[n]=t})),this.postProcessingFunctionsMap.None=null;const t=Object.keys(this.postProcessingFunctionsMap).find((t=>!!this.postProcessingFunctionsMap[t]?.options?.defaultPostProcessingFunction))??"None";this.postProcessingFunctionInput=n.choiceInput("Postprocessing",t,Object.keys(this.postProcessingFunctionsMap),(async()=>{await this.onFunctionChanged()}),{nullable:!1}),this.onFunctionChanged(),this.postProcessingFunctionInput.nullable=!1,this.postProcessingFunctionInput.classList.add("ml-dim-reduction-settings-input"),this.postProcessingFunctionInput.root.prepend(this._settingsIcon),this._root.appendChild(this.postProcessingFunctionInput.root),this._root.appendChild(this._argsElement)}get postProcessingFunction(){return this.postProcessingFunctionInput.value?this.postProcessingFunctionsMap[this.postProcessingFunctionInput.value]:null}async onFunctionChanged(){const t=this.postProcessingFunction;if(n.empty(this._argsElement),this._postProcessingArgs={},!t||t.inputs.length<3)return void(this._settingsIcon.style.display="none");this._settingsIcon.style.display="flex";const e=t.prepare(),r=await e.buildEditor(n.div());for(let n=2;n<t.inputs.length;n++){const o=t.inputs[n],i=this._postProcessingArgs[o.name]||e.inputParams[t.inputs[n].name].value||o.defaultValue;i&&(this._postProcessingArgs[o.name]=i);const s=r.find((t=>t.property.name===o.name));s&&(s.onChanged((()=>{this._postProcessingArgs[o.name]=s.value})),this._argsElement.append(s.root))}}get root(){return this._root}get args(){return this._postProcessingArgs}}const We="dimensionality-reducer-terminate-event",Ye=t=>null==t;function He(t,n){return`${n} (${t.length>4?`${t.length} columns`:t.map((t=>t.name)).join(", ")})`}var ze;!function(t){t.NO_DATAFRAME="No dataframe is opened",t.NO_MISSING_VALUES="No missing values",t.ONE_AVAILABLE_FEATURE="Not enough of feature columns to apply imputation using the KNN method",t.ONE_FEATURE_SELECTED="Imputation cannot be applied to",t.UNSUPPORTED_COLUMN_TYPE="Unsupported column type",t.UNSUPPORTED_IMPUTATION_STRATEGY="Unsupported imputation strategy",t.KNN_CANNOT_BE_APPLIED="KNN imputer cannot be applied: no columns to be used as features",t.KNN_NO_TARGET_COLUMNS="KNN imputer cannot be applied: no columns with missing values",t.KNN_NO_FEATURE_COLUMNS="KNN imputer cannot be applied: no feature columns",t.KNN_NOT_ENOUGH_OF_ROWS="KNN imputer cannot be applied: not enough of rows",t.KNN_IMPOSSIBLE_IMPUTATION="Imputation is impossible, no features can be used",t.INCORRECT_NEIGHBORS="Incorrect number of neighbors",t.KNN_FAILS="KNN IMPUTATION FAILS",t.CORE_ISSUE="Core issue",t.FAILED_TO_IMPUTE="Failed to impute",t.UNSUPPORTED_FILL_VALUE_TYPE="Unsupported fill value type",t.EMPTY_COLUMN="Column contains just null values",t.FAILS_TO_PREDICT_IMPUTATION_FAILS="Failed to predict imputation fails",t.WRONG_PREDICTIONS="wrong evaluation of KNN imputation fails"}(ze||(ze={}));const $e="copy";var Ke;!function(t){t.KNN_IMPUTER="Impute",t.TABLE="Table",t.IN_PLACE="In-place",t.COLUMNS="Impute",t.FEATURES="Using",t.CANCEL="CANCEL",t.RUN="RUN",t.OK="OK",t.NEIGHBORS="Neighbors",t.DISTANCE="Distance",t.FILL="Fill",t.MARK="Mark",t.SIMPLE_IMPUTER="Simple impute",t.SETTINGS="Settings",t.KEEP_EMPTY="Keep empty"}(Ke||(Ke={}));const je="/help/transform/missing-values-imputation";var Xe;!function(t){t.TARGET="Columns with missing values that must be filled",t.FEATURES="Columns with features to be used for determining the 'nearest' elements in the KNN method",t.IN_PLACE="Defines whether to use in-place imputation or add a new column without missing values",t.METRIC="Type of metric between the feature values",t.WEIGHT="Weight",t.NEIGHBORS="Neighbors count used in the KNN method",t.DISTANCE="Type of distance between elements with the specified features",t.METRIC_SETTINGS="Show additional options",t.FILL_FAILED_ITEMS="Impute missing values using a simple approach: mean, median or most frequent",t.MARK_FAILED_ITEMS="Mark missing values cells with a color",t.FILL_VALUE="Fill value",t.IMPUTATION_SETTINGS="Simple imputation settings",t.KEEP_EMPTY="Defines whether to keep empty missing values failed to be imputed OR fill them using simple imputation"}(Xe||(Xe={}));const Qe=[o.COLUMN_TYPE.INT,o.COLUMN_TYPE.FLOAT,o.COLUMN_TYPE.STRING,o.COLUMN_TYPE.DATE_TIME,o.COLUMN_TYPE.QNUM];function Je(t){switch(t.type){case o.COLUMN_TYPE.INT:return o.INT_NULL;case o.COLUMN_TYPE.FLOAT:case o.COLUMN_TYPE.QNUM:case o.COLUMN_TYPE.DATE_TIME:return o.FLOAT_NULL;case o.COLUMN_TYPE.STRING:return t.max;default:throw new Error(ze.UNSUPPORTED_COLUMN_TYPE)}}var Ze,tr,nr;!function(t){t.ONE_HOT="One-hot",t.DIFFERENCE="Difference"}(Ze||(Ze={})),function(t){t.EUCLIDEAN="Euclidean",t.MANHATTAN="Manhattan"}(tr||(tr={})),function(t){t[t.WEIGHT=1]="WEIGHT",t[t.NEIGHBORS=4]="NEIGHBORS",t[t.IN_PLACE=1]="IN_PLACE",t[t.SELECTED=1]="SELECTED",t[t.KEEP_EMPTY=0]="KEEP_EMPTY"}(nr||(nr={}));const er=1;function rr(t,n,e){for(const t of n)if(!e.has(t))return!1;for(const r of t){const t=e.get(r);if(void 0===t)throw new Error(ze.FAILS_TO_PREDICT_IMPUTATION_FAILS);for(const r of t){let t=!0;for(const o of n){const n=e.get(o);if(void 0===n)throw new Error(ze.FAILS_TO_PREDICT_IMPUTATION_FAILS);if(!n.includes(r)){t=!1;break}}if(t)return!0}}return!1}var or,ir=function(t,n,e,r){return new(e||(e=Promise))((function(o,i){function s(t){try{u(r.next(t))}catch(t){i(t)}}function a(t){try{u(r.throw(t))}catch(t){i(t)}}function u(t){var n;t.done?o(t.value):(n=t.value,n instanceof e?n:new e((function(t){t(n)}))).then(s,a)}u((r=r.apply(t,n||[])).next())}))};function sr(e){return ir(this,void 0,void 0,(function*(){if(null!=e||(e=t.shell.t),null===e)return void t.shell.warning(ze.NO_DATAFRAME);const r=[],i=[],s=[];e.columns.toList().filter((t=>Qe.includes(t.type))).forEach((t=>{s.push(t.name),t.stats.missingValueCount>0&&(r.push(t),i.push(t.name))}));const a=function(t){const n=new Map;for(const e of t){if(!Qe.includes(e.type))throw new Error(ze.UNSUPPORTED_COLUMN_TYPE);if(0===e.stats.missingValueCount)continue;const t=[],r=Je(e);e.getRawData().forEach(((n,e)=>{n===r&&t.push(e)})),n.set(e.name,t)}return n}(r);if(0===r.length)return void t.shell.info(ze.NO_MISSING_VALUES);if(1===s.length)return void t.shell.error(ze.ONE_AVAILABLE_FEATURE);let u=nr.IN_PLACE>0;const l=n.input.bool(Ke.IN_PLACE,{value:u,onValueChanged:()=>{var t;u=null!==(t=l.value)&&void 0!==t&&t}});l.setTooltip(Xe.IN_PLACE);let c=nr.KEEP_EMPTY>0;const f=n.input.bool(Ke.KEEP_EMPTY,{value:c,onValueChanged:()=>{var t;c=null!==(t=f.value)&&void 0!==t&&t}});f.setTooltip(Xe.KEEP_EMPTY);let h=nr.NEIGHBORS;const m=n.input.int(Ke.NEIGHBORS,{value:h,onValueChanged:()=>{const t=m.value;null===t?m.value=h:t>=er?h=t:m.value=h}});m.setTooltip(Xe.NEIGHBORS);let d=tr.EUCLIDEAN;const p=n.input.choice(Ke.DISTANCE,{value:d,items:[tr.EUCLIDEAN,tr.MANHATTAN],onValueChanged:()=>{var t;return d=null!==(t=p.value)&&void 0!==t?t:tr.EUCLIDEAN}});p.setTooltip(Xe.DISTANCE);let g=r.map((t=>t.name));const v=n.input.columns(Ke.COLUMNS,{table:e,onValueChanged:()=>{g=v.value.map((t=>t.name)),A()},available:i,checked:i});v.setTooltip(Xe.TARGET);let y=s;const w=n.input.columns(Ke.FEATURES,{table:e,onValueChanged:()=>{y=w.value.map((t=>t.name)),y.length>0?(A(),_.forEach(((t,n)=>t.hidden=!y.includes(n)))):E()},available:s,checked:s});w.setTooltip(Xe.FEATURES);const E=()=>{I.getButton(Ke.RUN).disabled=!0,l.root.hidden=!0,f.root.hidden=!0,m.root.hidden=!0,S.hidden=!0,b.hidden=!0},A=()=>{I.getButton(Ke.RUN).disabled=!1,S.hidden=!1,l.root.hidden=!1,m.root.hidden=!1,p.root.hidden=!1,f.root.hidden=!rr(g,y,a),1===y.length&&g.forEach((n=>{y[0]===n&&(E(),t.shell.warning(`${ze.ONE_FEATURE_SELECTED} the column '${n}'`))}))},C=new Map,_=new Map,b=n.divV([]);b.style.overflow="auto",s.forEach((t=>{const r=function(t){switch(t){case o.COLUMN_TYPE.STRING:case o.COLUMN_TYPE.DATE_TIME:return{defaultWeight:nr.WEIGHT,defaultMetric:Ze.ONE_HOT,availableMetrics:[Ze.ONE_HOT]};case o.COLUMN_TYPE.INT:case o.COLUMN_TYPE.FLOAT:case o.COLUMN_TYPE.QNUM:return{defaultWeight:nr.WEIGHT,defaultMetric:Ze.DIFFERENCE,availableMetrics:[Ze.DIFFERENCE,Ze.ONE_HOT]};default:throw new Error(ze.UNSUPPORTED_COLUMN_TYPE)}}(e.col(t).type);C.set(t,{weight:r.defaultWeight,type:r.defaultMetric});const i=n.input.choice(t,{value:r.defaultMetric,items:r.availableMetrics,onValueChanged:()=>{var n,e;const o=null!==(n=C.get(t))&&void 0!==n?n:{weight:r.defaultWeight,type:r.defaultMetric};o.type=null!==(e=i.value)&&void 0!==e?e:r.defaultMetric,C.set(t,o)}});i.root.style.width="50%",i.setTooltip(Xe.METRIC),i.root.hidden=!0;const s=o.Property.fromOptions({name:t,inputType:"Float",min:0,max:10,showSlider:!0,step:1}),a=n.input.forProperty(s);a.value=r.defaultWeight,a.onChanged((()=>{var n,e;const o=null!==(n=C.get(t))&&void 0!==n?n:{weight:r.defaultWeight,type:r.defaultMetric};o.weight=null!==(e=a.value)&&void 0!==e?e:r.defaultWeight,C.set(t,o)})),a.setTooltip(Xe.WEIGHT);const u=n.divH([i.root,a.root]);_.set(t,u),b.append(u)}));const I=n.dialog({title:Ke.KNN_IMPUTER,helpUrl:je});t.shell.v.root.appendChild(I.root),b.hidden=!0,f.root.hidden=!rr(g,y,a);const N=n.icons.settings((()=>{b.hidden=!b.hidden}),Xe.METRIC_SETTINGS),S=n.divH([p.root,N]);let M,T,O=!1;const P=new Promise(((t,n)=>{M=t,T=n}));return I.add(v).add(w).add(S).add(b).add(m).add(l).add(f).show().onOK((()=>{O=!0,I.close(),s.filter((t=>!y.includes(t))).forEach((t=>C.delete(t)));try{const n=function(n,e,r,i,s,a,u){if(a<er)throw new Error(ze.INCORRECT_NEIGHBORS);if(n.rowCount<2)throw new Error(ze.KNN_NOT_ENOUGH_OF_ROWS);if(0===e.length)throw new Error(ze.KNN_NO_TARGET_COLUMNS);if(0===r.size)throw new Error(ze.KNN_NO_FEATURE_COLUMNS);1===r.size&&e.forEach((t=>{if(r.has(t))throw new Error(`${ze.KNN_NO_FEATURE_COLUMNS} can be used for the column '${t}'`)})),e.forEach((t=>{if(!i.has(t))throw new Error(`${ze.KNN_FAILS}: ${ze.WRONG_PREDICTIONS}`)}));const l=n.columns;e.forEach((t=>{if(!Qe.includes(l.byName(t).type))throw new Error(ze.UNSUPPORTED_COLUMN_TYPE)})),r.forEach(((t,e)=>{if(!Qe.includes(n.getCol(e).type))throw new Error(ze.UNSUPPORTED_COLUMN_TYPE)}));const c=new Map;return e.forEach((e=>{const f=l.byName(e),h=Je(f),m=f.length,d=f.getRawData(),p=new Uint16Array(f.categories.length),g=[],v=[],y=[],w=[];r.forEach(((t,n)=>{if(n!==f.name){const e=l.byName(n);switch(g.push(e.getRawData()),v.push(Je(e)),t.type){case Ze.DIFFERENCE:y.push(((n,e)=>t.weight*Math.abs(n-e)));break;case Ze.ONE_HOT:y.push(((n,e)=>t.weight*(n===e?0:1)))}}}));const E=g.length,A=new Uint32Array(g.length),C=new Float32Array(g.length);let _=0;const b=new Array(a);let I=0,N=0,S=0,M=0,T=0;const O=(t,n)=>{A.forEach(((e,r)=>{C[r]=y[e](g[e][t],g[e][n])}))},P=s===tr.EUCLIDEAN?()=>{let t=0;for(let n=0;n<_;++n)t+=C[n]*C[n];return Math.sqrt(t)}:()=>{let t=0;for(let n=0;n<_;++n)t+=Math.abs(C[n]);return Math.sqrt(t)},x=t=>{if(d[t]===h)return!1;for(let n=0;n<_;++n)if(g[A[n]][t]===v[A[n]])return!1;return!0},L=t=>{if((t=>{_=0;for(let n=0;n<E;++n)g[n][t]!==v[n]&&(A[_]=n,++_)})(t),0===_)throw new Error(`${ze.KNN_IMPOSSIBLE_IMPUTATION}: the column "${f.name}", row ${t+1}`);I=0;for(let n=0;n<m;++n)if(x(n)&&n!==t){O(t,n);const e=P();if(I<a)b[I]={index:n,dist:e},++I;else{N=0,S=b[0].dist;for(let t=1;t<I;++t)S<b[t].dist&&(S=b[t].dist,N=t);e<S&&(b[N]={index:n,dist:e})}}if(0===I)throw new Error(`${ze.KNN_IMPOSSIBLE_IMPUTATION}: the column "${f.name}", row ${t+1}`);if(f.type===o.COLUMN_TYPE.STRING)return(()=>{p.forEach(((t,n,e)=>e[n]=0));let t=0;for(t=0;t<I;++t)++p[d[b[t].index]];let n=p[0],e=0;return p.forEach(((t,r)=>{t>n&&(n=t,e=r)})),e})();M=0;for(let t=0;t<I;++t)M+=d[b[t].index];return T=M/I,f.type===o.COLUMN_TYPE.INT?Math.round(T):T};if(u){for(const n of i.get(e))try{d[n]=L(n)}catch(e){w.push(n),e instanceof Error||t.shell.error(ze.CORE_ISSUE)}w.length>0&&c.set(e,w),f.set(0,f.get(0))}else{const r=f.clone();let o=1,s=`${e}(${$e})`;for(;n.columns.contains(s);)s=`${e}(${$e} ${o})`,++o;r.name=s;const a=r.getRawData();for(const n of i.get(e))try{a[n]=L(n)}catch(e){w.push(n),e instanceof Error||t.shell.error(ze.CORE_ISSUE)}w.length>0&&c.set(s,w),r.set(0,r.get(0)),n.columns.add(r)}})),c}(e,g,C,a,d,h,u);c||function(t,n){n.forEach(((n,e)=>{const r=t.col(e);if(null!==r){if(!Qe.includes(r.type))throw new Error(ze.UNSUPPORTED_COLUMN_TYPE);const t=function(t){switch(t.type){case o.COLUMN_TYPE.STRING:case o.COLUMN_TYPE.DATE_TIME:return function(t){const n=Je(t),e=t.getRawData(),r=e.length;for(let o=0;o<r;++o)if(e[o]!==n)return t.get(o);throw new Error(ze.EMPTY_COLUMN)}(t);case o.COLUMN_TYPE.INT:case o.COLUMN_TYPE.FLOAT:case o.COLUMN_TYPE.QNUM:return t.stats.avg;default:throw new Error(ze.UNSUPPORTED_COLUMN_TYPE)}}(r);n.forEach((n=>r.set(n,t)))}}))}(e,n),M()}catch(n){n instanceof Error?t.shell.error(`${ze.KNN_FAILS}: ${n.message}`):t.shell.error(`${ze.KNN_FAILS}: ${ze.CORE_ISSUE}`),T(n)}})).onClose.subscribe((()=>!O&&T())),P}))}class ar extends ke{constructor(t={}){super(t),this.similarityThresholdInput=n.intInput("Similarity Threshold",80),this.maxIterationsInput=n.intInput("Max Iterations",5),this.useWebGPUInput=n.boolInput("Use WebGPU",!1),this.inflateInput=n.floatInput("Inflation Factor",pe),oe().then((t=>{t?this.useWebGPUInput.setTooltip(`Use webGPU for MCL calculation (${t})`):(this.useWebGPUInput.value=!1,this.useWebGPUInput.setTooltip("WebGPU is not available"),this.useWebGPUInput.enabled=!1)}))}getEditor(){return n.div([this.tableInput.root,this.columnsInputRoot,this.columnParamsEditorRoot,this.aggregationMethodInput.root,this.similarityThresholdInput.root,this.inflateInput.root,this.maxIterationsInput.root,this.useWebGPUInput.root],{style:{minWidth:"420px"},classes:"ui-form"})}get params(){return{table:this.tableInput.value,columns:this.columnsInput.value,methodName:this.methodInput.value,preprocessingFunctions:this.columnOptEditors.map((t=>t.preProcessingFunction)),distanceMetrics:this.columnOptEditors.map((t=>t.similarityMetricInput.value)),weights:this.columnOptEditors.map((t=>t.weight)),preprocessingFuncArgs:this.columnOptEditors.map((t=>t.preprocessingFunctionSettings)),aggreaggregationMethod:this.aggregationMethodInput.value,threshold:this.similarityThresholdInput.value,maxIterations:this.maxIterationsInput.value??5,useWebGPU:this.useWebGPUInput.value??!1,inflateFactor:this.inflateInput.value??pe}}}class ur{constructor(t,n=!1){if(this._length=0,this._version=0,this._updateLevel=0,this._selectedCount=0,this._selectedCountVersion=-1,this._selectedIndexesVersion=-1,this._versionedName="",this._versionedNameVersion=-1,this.SHRINK_THRESHOLD=256,"number"==typeof t){const e=t,r=ur._createBuffer(e);if(n)for(let t=0;t<r.length;t++)r[t]=-1;this._data=r,this._length=e}else{if(!(t instanceof Uint32Array))throw new Error("Invalid constructor");this._data=t,this._length=n}}getRawData(){return this._data}assureGoez(t,n){if(t<0)throw new Error(`${n} should be greater than zero`)}assureInRange(t,n,e,r){if(t<n||t>e)throw new Error(`Argument ${r} (${t}) out of range (${n}, ${e})`)}copy(t,n,e){for(let r=0;r<e;r++)n[r]=t[r]}copyFrom(t){if(this._length!=t._length)throw new Error(`Lengths differ (${this._length} != ${t._length})`);this.copy(t._data,this._data,this.lengthInInts),this._version++}get length(){return this._length}get buffer(){return this._data}set buffer(t){this._data=t,this._version++}get version(){return this._version}set version(t){this._version=t}incrementVersion(t=!0){this._version++}get lengthInInts(){return Math.floor((this._length+31)/32)}get versionedName(){return this._version==this._versionedNameVersion?this._versionedName:""}set versionedName(t){this._versionedName=t,this._versionedNameVersion=this._version}get self(){return this}setLength(t){if(t<0)throw new Error("should be >= 0");if(t==this._length)return;const n=Math.floor((t+31)/32);if(n>this._data.length||n+this.SHRINK_THRESHOLD<this._data.length){const t=new Uint32Array(n);this.copy(this._data,t,n>this._data.length?this._data.length:n),this._data=t}t>this._length&&(this._length%32>0&&(this._data[this.lengthInInts-1]&=(1<<(this._length%32&31))-1),this._data.fill(0,this.lengthInInts,n)),this._length=t,this._version++}static fromAnd(t,n){if(t._length!=n._length)throw new Error(`Lengths differ (${t._length} != ${n._length})`);const e=new ur(t._length);e._length=t._length,e._data=ur._createBuffer(e._length),e._version=0;const r=t.lengthInInts;for(let o=0;o<r;o++)e._data[o]=t._data[o]&n._data[o];return e}static _createBuffer(t){return new Uint32Array(Math.floor((t+31)/32))}static fromValues(t){const n=new ur(t.length);n._version=0;for(let e=0;e<n._length;e++)t[e]&&(n._data[Math.floor(e/32)]|=1<<(e%32&31));return n}static fromSeq(t,n){const e=new ur(t);for(let r=0;r<t;++r)e.setBit(r,n(r));return e._version=0,e}static fromString(t){return ur.fromSeq(t.length,(n=>"1"==t.charAt(n)))}static fromUint32Array(t,n){const e=new ur(t);return e._data=n,e}static fromBytes(t){const n=t.length,e=new ur(8*n);e._data=new Uint32Array(Math.floor((n+3)/4)),e._length=8*n;let r=0,o=0;for(;n-o>=4;)e._data[r++]=255&t[o]|(255&t[o+1])<<8|(255&t[o+2])<<16|(255&t[o+3])<<24,o+=4;return n-o==3&&(e._data[r]=(255&t[o+2])<<16),n-o==2&&(e._data[r]|=(255&t[o+1])<<8),n-o==1&&(e._data[r]|=255&t[o]),e._version=0,e}toString(){return`${this._length} bits, ${this.countBits(!0)} set`}equals(t){if(this==t)return!0;if(null==t)return!1;if(this._length!=t._length)return!1;if(0==this._length)return!0;for(let n=0;n<this._data.length-1;n++)if(this._data[n]!=t._data[n])return!1;for(let n=8*(this._data.length-1);n<this._length;n++)if(this.getBit(n)!=t.getBit(n))return!1;return!0}clone(){const t=new ur(0,!1);return t._data=Uint32Array.from(this._data),t._length=this._length,t._version=this._version,t}init(t,n){this.setAll(!1,!1);for(let n=0;n<this._length;n++)t(n)&&(this._data[Math.floor(n/32)]|=1<<(n%32&31));return this.incrementVersion(n),this}invert(t=!0){for(let t=0;t<this._data.length;t++)this._data[t]^=-1;this.incrementVersion(t)}setAll(t,n=!1){const e=t?-1:0,r=this.lengthInInts;for(let t=0;t<r;t++)this._data[t]=e;this.incrementVersion(n)}setIndexes(t,n=!0,e=!0,r=!0){e&&this.setAll(!n,!1);for(const e of t)this.setFast(e,n);this.incrementVersion(r)}everyIndex(t,n=!0){for(const e of t)if(this.getBit(e)!=n)return!1;return!0}anyIndex(t,n=!0){for(const e of t)if(this.getBit(e)==n)return!0;return!1}setWhere(t,n=!0,e=!0,r=!0,o=!0){if(e&&o&&this.setAll(!n,!1),o)for(let e=0;e<this._length;e++)t(e)&&this.setFast(e,n);else for(let e=0;e<this._length;e++)this.setFast(e,t(e)?n:!n);this.incrementVersion(r)}getRange(t,n){this.assureInRange(t,0,this._length-1,"from"),this.assureInRange(n,0,this._length,"to");const e=[];for(let r=t;r<n;++r)e.push(this.getBit(r));return ur.fromValues(e)}getRangeAsList(t,n){this.assureInRange(t,0,this._length-1,"from"),this.assureInRange(n,0,this._length,"to");const e=[];for(let r=t;r<n;++r)e.push(this.getBit(r));return e}setRange(t,n,e,r=!0){this.assureInRange(t,0,this._length-1,"from"),this.assureInRange(n,0,this._length-1,"to");const o=Math.min(t,n),i=Math.max(t,n);if(e)for(let t=o;t<=i;t++)this.setTrue(t);else for(let t=o;t<=i;t++)this.setFalse(t);return this.incrementVersion(r),this}setRandom(t,n,e=!0){if(t<0||t>this._length)throw new Error("n must be >= 0 && <= Count");t>this._length/2&&this.setRandom(this._length-t,!n),this.setAll(!n);for(let e=0;e<t;){const t=Math.floor(Math.random()*this._length);this.getBit(t)!=n&&(this.setFast(t,n),e++)}this.incrementVersion(e)}and(t,n=!0){if(this._length!=t._length)throw new Error("Array lengths differ.");for(let n=0,e=this.lengthInInts;n<e;n++)this._data[n]&=t._data[n];return this.incrementVersion(n),this}andNot(t,n=!0){if(this._length!=t._length)throw new Error("Array lengths differ.");const e=this.lengthInInts;for(let n=0;n<e;n++)this._data[n]&=~t._data[n];return this.incrementVersion(n),this}notAnd(t,n=!0){if(this._length!=t._length)throw new Error("Array lengths differ.");for(let n=0,e=this.lengthInInts;n<e;n++)this._data[n]=~this._data[n]&t._data[n];return this.incrementVersion(n),this}not(t=!0){for(let t=0,n=this.lengthInInts;t<n;t++)this._data[t]=~this._data[t];return this.incrementVersion(t),this}or(t,n=!0){if(this._length!=t._length)throw new Error("Array lengths differ.");for(let n=0,e=this.lengthInInts;n<e;n++)this._data[n]|=t._data[n];return this.incrementVersion(n),this}xor(t,n=!0){if(this._length!=t._length)throw new Error("Array lengths differ.");for(let n=0,e=this.lengthInInts;n<e;n++)this._data[n]^=t._data[n];return this.incrementVersion(n),this}insertAt(t,n,e=!1){if(this.assureInRange(t,0,this._length,"pos"),0==n)return;const r=this._length;this.setLength(this._length+n);for(let e=r-1;e>=t;e--)this.setBit(e+n,this.getBit(e));for(let r=t;r<t+n;r++)this.setBit(r,e)}removeAt(t,n=1){if(n<0)throw new Error("n cannot be negative");if(this.assureInRange(t,0,this._length-n,"pos"),this.contains(!0))for(let e=t;e<this._length-n;e++)this.setBit(e,this.getBit(e+n));this.setLength(this._length-n)}removeByMask(t,n=!0){if(this._length!=t.length)throw new Error("length != mask.length");if(t==this)this.setLength(t.countBits(!n)),this.setAll(!n);else{let e=0;for(let r=-1;-1!=(r=t.findNext(r,!n));)this.setFast(e++,this.getBit(r));this._length=e,this._version++}return this}getBit(t){return!!(this._data[Math.floor(t/32)]&1<<(31&t))}setBit(t,n,e=!0){this.setFast(t,n),this._version++}setFast(t,n){n?this._data[Math.floor(t/32)]|=1<<(31&t):this._data[Math.floor(t/32)]&=~(1<<(31&t))}setTrue(t){this._data[Math.floor(t/32)]|=1<<(31&t)}setFalse(t){this._data[Math.floor(t/32)]&=~(1<<(31&t))}trueCount(){return this.countBits(!0)}falseCount(){return this.countBits(!1)}countBits(t){if(0==this._length)return 0;if(this._selectedCountVersion!=this._version){this._selectedCount=0;const t=this.lengthInInts;let n=0;for(;n<t-1;n++)for(let t=this._data[n];0!=t;t>>>=8)this._selectedCount+=ur._onBitCount[255&t];let e=this._data[n];const r=31&this._length;for(0!=r&&(e&=~(4294967295<<r));0!=e;e>>>=8)this._selectedCount+=ur._onBitCount[255&e];this._selectedCountVersion=this._version}return t?this._selectedCount:this._length-this._selectedCount}countWhere(t){let n=0;if(this.trueCount()==this._length)for(let e=0;e<this._length;e++)n+=t(e)?1:0;else for(let e=-1;-1!=(e=this.findNext(e,!0));)n+=t(e)?1:0;return n}andWithCountBits(t,n){if(0==this._length)return 0;let e=0;const r=this.lengthInInts;let o=0;for(;o<r-1;o++)for(let n=this._data[o]&t._data[o];0!=n;n>>>=8)e+=ur._onBitCount[255&n];let i=this._data[o]&t._data[o];const s=31&this._length;for(0!=s&&(i&=~(4294967295<<s));0!=i;i>>>=8)e+=ur._onBitCount[255&i];return n?e:this._length-e}clear(){this.setLength(0)}contains(t){return this.findNext(-1,t)>=0}get allTrue(){return this.countBits(!0)==this._length}get allFalse(){return this.countBits(!1)==this._length}get anyTrue(){return this.countBits(!0)>0}get anyFalse(){return this.countBits(!1)>0}findNext(t,n=!0){if(this.assureInRange(t,-1,this._length,"index"),t>=this._length-1)return-1;let e=31&(t=t<0?0:t+1);const r=this.lengthInInts;for(let o=Math.floor(t/32);o<r;o++){let r=n?this._data[o]:~this._data[o];if(0!=e)r&=4294967295<<e&4294967295,e=0;else if(!n&&-4294967296==r)continue;for(let n=0;0!=r;n+=8,r>>>=8){const e=ur._firstOnBit[255&r];if(e>=0)return(t=e+32*o+n)>=this._length?-1:t}}return-1}findPrev(t,n=!0){if(0==t)return-1;this.assureInRange(t,-1,this._length,"index");let e=1+(t=t<0?this._length-1:t-1)&31;for(let r=Math.floor(t/32);r>=0;r--){let t=n?this._data[r]:~this._data[r];0!=e&&(t&=~(4294967295<<e),e=0);for(let n=24;0!=t;n-=8,t<<=8){const e=ur._lastOnBit[t>>>24];if(e>=0)return e+32*r+n}}return-1}}ur._onBitCount=Int8Array.from([0,1,1,2,1,2,2,3,1,2,2,3,2,3,3,4,1,2,2,3,2,3,3,4,2,3,3,4,3,4,4,5,1,2,2,3,2,3,3,4,2,3,3,4,3,4,4,5,2,3,3,4,3,4,4,5,3,4,4,5,4,5,5,6,1,2,2,3,2,3,3,4,2,3,3,4,3,4,4,5,2,3,3,4,3,4,4,5,3,4,4,5,4,5,5,6,2,3,3,4,3,4,4,5,3,4,4,5,4,5,5,6,3,4,4,5,4,5,5,6,4,5,5,6,5,6,6,7,1,2,2,3,2,3,3,4,2,3,3,4,3,4,4,5,2,3,3,4,3,4,4,5,3,4,4,5,4,5,5,6,2,3,3,4,3,4,4,5,3,4,4,5,4,5,5,6,3,4,4,5,4,5,5,6,4,5,5,6,5,6,6,7,2,3,3,4,3,4,4,5,3,4,4,5,4,5,5,6,3,4,4,5,4,5,5,6,4,5,5,6,5,6,6,7,3,4,4,5,4,5,5,6,4,5,5,6,5,6,6,7,4,5,5,6,5,6,6,7,5,6,6,7,6,7,7,8]),ur._firstOnBit=Int8Array.from([-1,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,5,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,6,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,5,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,7,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,5,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,6,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,5,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0]),ur._lastOnBit=Int8Array.from([-1,0,1,1,2,2,2,2,3,3,3,3,3,3,3,3,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,4,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,5,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,6,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7,7]),function(t){t.none="none",t.bold="bold",t.dashed="dashed"}(or||(or={}));class lr{get currentLineId(){return this._currentLineIdx}set currentLineId(t){t!==this._currentLineIdx&&(this._currentLineIdx=t,this.sp.render(this.ctx))}set linesToRender(t){this.updateLines(t),this.sp.render(this.ctx)}set linesVisibility(t){this.visibility=t,this.sp.render(this.ctx)}constructor(t,n,e,r,o=or.none){var i;this._currentLineIdx=-1,this.lineClicked=new Ce.Subject,this.lineHover=new Ce.Subject,this.mouseOverLineId=-1,this.arrowWidth=15,this.sp=t,this.xAxisCol=this.sp.dataFrame.columns.byName(n),this.yAxisCol=this.sp.dataFrame.columns.byName(e),this.canvas=this.sp.getInfo().canvas,this.ctx=this.canvas.getContext("2d"),this.currentLineStyle=o,this.updateLines(r),this.visibility=null!==(i=r.visibility)&&void 0!==i?i:new ur(this.lines.from.length),r.visibility||this.visibility.setAll(!0,!1),r.arrowSize&&(this.arrowWidth=r.arrowSize),this.canvas.onmousedown=t=>{-1!==this.mouseOverLineId&&this.lineClicked.next({x:t.clientX,y:t.clientY,id:this.mouseOverLineId,event:t})},this.canvas.onmousemove=t=>{this.mouseOverLineId=this.checkCoordsOnLine(t.offsetX,t.offsetY),-1!==this.mouseOverLineId&&this.lineHover.next({x:t.clientX,y:t.clientY,id:this.mouseOverLineId,event:t})},t.onEvent("d4-before-draw-scene").subscribe((t=>{this.renderLines()}))}updateLines(t){this.lines=t,this.multipleLinesCounts=new Uint8Array(this.lines.from.length),t.skipMultiLineCalculation?this.multipleLinesCounts.fill(0):this.createMultiLinesIndices()}renderLines(){var t,n,e,r,o,i,s,a,u,l,c,f,h;const m=this.sp.getOptions().look,d=this.lines.colors||this.lines.width||this.lines.opacities||this.lines.drawArrowsArr;d||(this.ctx.lineWidth=null!==(t=this.lines.width)&&void 0!==t?t:1,this.ctx.strokeStyle=`rgba(${null!==(n=this.lines.color)&&void 0!==n?n:"0,128,0"},${null!==(e=this.lines.opacity)&&void 0!==e?e:1})`);const p=m.sizeColumnName?this.sp.dataFrame.col(m.sizeColumnName):null,g=this.sp.dataFrame.filter;for(let t=0;t<this.lines.from.length;t++)if(g.get(this.lines.from[t])&&g.get(this.lines.to[t])&&this.visibility.getBit(t)){let n=0;const{sizeFrom:e,sizeTo:g}=this.getMarkersSizes(m,p,t),v=this.sp.worldToScreen(this.xAxisCol.get(this.lines.from[t]),this.yAxisCol.get(this.lines.from[t]));let y=null==v?void 0:v.x,w=null==v?void 0:v.y;const E=this.sp.worldToScreen(this.xAxisCol.get(this.lines.to[t]),this.yAxisCol.get(this.lines.to[t]));let A=null==E?void 0:E.x,C=null==E?void 0:E.y;const _=Math.min(this.sp.viewBox.width,this.sp.viewBox.height);if(this.ctx.beginPath(),y&&w&&A&&C&&Math.hypot(A-y,C-w)/_>.01){if(d){const n=(null===(r=this.lines.colors)||void 0===r?void 0:r[t])?null===(o=this.lines.colors)||void 0===o?void 0:o[t]:"0,128,0",e=(null===(i=this.lines.opacities)||void 0===i?void 0:i[t])?null===(s=this.lines.opacities)||void 0===s?void 0:s[t]:1;this.ctx.strokeStyle=`rgba(${n},${e})`,this.ctx.lineWidth=(null===(a=this.lines.widths)||void 0===a?void 0:a[t])?null===(u=this.lines.widths)||void 0===u?void 0:u[t]:1}t===this._currentLineIdx&&this.toggleCurrentLineStyle(!0);const m=this.multipleLinesCounts[t];let p=null;if(m){n=this.getLineLength(y,w,A,C);const r=this.getPointOnDistance(y,w,A,C,g,n),o=this.getPointOnDistance(A,C,y,w,e,n);y=r.x,w=r.y,A=o.x,C=o.y,p=this.lines.from[t]>this.lines.to[t]?this.findControlPoint(m,y,w,A,C,t):this.findControlPoint(m,A,C,y,w,t),this.ctx.moveTo(y,w),this.ctx.quadraticCurveTo(p.x,p.y,A,C)}else this.ctx.moveTo(y,w),this.ctx.lineTo(A,C);if((null!==(l=this.lines.drawArrows)&&void 0!==l?l:null===(c=this.lines.drawArrowsArr)||void 0===c?void 0:c.getBit(t))&&(n||(n=this.getLineLength(y,w,A,C)),n>this.arrowWidth)){const t=m?null:this.getPointOnDistance(y,w,A,C,g,n),e=m?p.x:y,r=m?p.y:w;this.canvasArrow(this.ctx,null!==(f=null==t?void 0:t.x)&&void 0!==f?f:y,null!==(h=null==t?void 0:t.y)&&void 0!==h?h:w,e,r)}this.ctx.stroke(),this.ctx.closePath(),t===this._currentLineIdx&&this.toggleCurrentLineStyle(!1)}}this.fillLeftBottomRect()}toggleCurrentLineStyle(t){switch(this.currentLineStyle){case or.bold:t?this.ctx.lineWidth+=2:this.ctx.lineWidth-=2;break;case or.dashed:t?this.ctx.setLineDash([5,5]):this.ctx.setLineDash([]);break;default:return}}getMarkersSizes(t,n,e){let r=3,o=3;return n?(r=(t.markerMinSize+(t.markerMaxSize-t.markerMinSize)*n.scale(this.lines.from[e]))/2,o=(t.markerMinSize+(t.markerMaxSize-t.markerMinSize)*n.scale(this.lines.to[e]))/2):t.markerDefaultSize&&(r=t.markerDefaultSize/2,o=t.markerDefaultSize/2),{sizeFrom:r,sizeTo:o}}fillLeftBottomRect(){const t=new Path2D;t.rect(this.sp.yAxisBox.minX,this.sp.yAxisBox.maxY,this.sp.yAxisBox.width,this.sp.xAxisBox.height),this.ctx.fillStyle="white",this.ctx.beginPath(),this.ctx.fill(t),this.ctx.closePath()}createMultiLinesIndices(){const t=new ur(this.lines.from.length);t.setAll(!0);for(let n=-1;-1!==(n=t.findNext(n));){const e=n,r=this.lines.from[e],o=this.lines.to[e];let i=1;for(let e=n;-1!==(e=t.findNext(e));){const n=this.lines.from[e],s=this.lines.to[e];(n===r&&s===o||s===r&&n===o)&&(this.multipleLinesCounts[e]=++i,t.setBit(e,!1,!1))}i>1&&(this.multipleLinesCounts[e]=1),t.setBit(n,!1,!1)}}checkCoordsOnLine(t,n){let e=-1,r=null,o=null;const i=this.sp.getOptions().look,s=i.sizeColumnName?this.sp.dataFrame.col(i.sizeColumnName):null,a=this.sp.dataFrame.filter;for(let u=0;u<this.lines.from.length;u++)if(a.get(this.lines.from[u])&&a.get(this.lines.to[u])&&this.visibility.getBit(u)){const{sizeFrom:a,sizeTo:l}=this.getMarkersSizes(i,s,u),c=this.sp.worldToScreen(this.xAxisCol.get(this.lines.from[u]),this.yAxisCol.get(this.lines.from[u])),f=this.sp.worldToScreen(this.xAxisCol.get(this.lines.to[u]),this.yAxisCol.get(this.lines.to[u]));if(this.multipleLinesCounts[u]){const e=this.getLineLength(c.x,c.y,f.x,f.y),r=this.getPointOnDistance(c.x,c.y,f.x,f.y,l,e),i=this.getPointOnDistance(f.x,f.y,null==c?void 0:c.x,null==c?void 0:c.y,a,e),s=this.lines.from[u]>this.lines.to[u]?this.findControlPoint(this.multipleLinesCounts[u],r.x,r.y,i.x,i.y,u):this.findControlPoint(this.multipleLinesCounts[u],i.x,i.y,r.x,r.y,u);o=this.calculateDistToCurveLine(u,t,n,r,i,s)}else o=this.calculateDistToStraightLine(t,n,c,f);(!r&&null!==o&&o<5||r&&null!==o&&o<r)&&(r=o,e=u)}return e}calculateDistToStraightLine(t,n,e,r){const o=Math.min(e.x,r.x),i=Math.max(e.x,r.x),s=Math.min(e.y,r.y),a=Math.max(e.y,r.y);return t>=o-2&&t<=i+2&&n>=s-2&&n<=a+2?this.distToStraightLineSegment(t,n,e,r):null}distToStraightLineSegment(t,n,e,r){const o=(t,n,e,r)=>Math.pow(t-e,2)+Math.pow(n-r,2),i=o(e.x,e.y,r.x,r.y);if(0==i)return o(t,n,e.x,e.y);let s=((t-e.x)*(r.x-e.x)+(n-e.y)*(r.y-e.y))/i;return s=Math.max(0,Math.min(1,s)),o(t,n,e.x+s*(r.x-e.x),e.y+s*(r.y-e.y))}calculateDistToCurveLine(t,n,e,r,o,i){const s=Math.min(r.x,o.x,i.x),a=Math.max(r.x,o.x,i.x),u=Math.min(r.y,o.y,i.y),l=Math.max(r.y,o.y,i.y);if(n>=s-2&&n<=a+2&&e>=u-2&&e<=l+2){const t=a-s,c=l-u;return this.calculateDistToCurveInRect(n,e,r,i,o,t,c)}return null}calculateDistToCurveInRect(t,n,e,r,o,i,s){const a=Math.floor((i+s)/3),u=1/a,l=new Uint32Array(a),c=new Uint32Array(a),f=new Uint32Array(a);let h=null;const m=new ur(a);for(let i=0;i<l.length;i++){const s=i*u,a=Math.pow(1-s,2)*e.x+2*s*(1-s)*r.x+Math.pow(s,2)*o.x,m=Math.pow(1-s,2)*e.y+2*s*(1-s)*r.y+Math.pow(s,2)*o.y,d=Math.abs(t-a),p=Math.abs(n-m),g=d+p;(!h||h>g)&&(h=g),f[i]=Math.max(d,p),l[i]=a,c[i]=m}for(let t=0;t<l.length;t++)f[t]<h&&m.setBit(t,!0,!1);let d=null;for(let e=-1;-1!==(e=m.findNext(e));){const r=Math.hypot(l[e]-t,c[e]-n);(!d||d>r)&&(d=r)}return d}getLineLength(t,n,e,r){return Math.sqrt(Math.pow(e-t,2)+Math.pow(r-n,2))}getPointOnDistance(t,n,e,r,i,s){const a=e-i*((e-t)/s),u=r-i*((r-n)/s);return new o.Point(a,u)}findControlPoint(t,n,e,r,i,s){const a=n+(r-n)/2,u=e+(i-e)/2;let l=a-n,c=u-e;const f=Math.sqrt(l*l+c*c);l/=f,c/=f;const h=50*Math.ceil(t/2);return t%2==0?new o.Point(a+h/2*c,u-h/2*l):new o.Point(a-h/2*c,u+h/2*l)}canvasArrow(t,n,e,r,o){const i=Math.atan2(r-n,o-e)+Math.PI;t.moveTo(n-this.arrowWidth*Math.sin(i-Math.PI/10),e-this.arrowWidth*Math.cos(i-Math.PI/10)),t.lineTo(n,e),t.lineTo(n-this.arrowWidth*Math.sin(i+Math.PI/10),e-this.arrowWidth*Math.cos(i+Math.PI/10))}}var cr=function(t,n,e,r){return new(e||(e=Promise))((function(o,i){function s(t){try{u(r.next(t))}catch(t){i(t)}}function a(t){try{u(r.throw(t))}catch(t){i(t)}}function u(t){var n;t.done?o(t.value):(n=t.value,n instanceof e?n:new e((function(t){t(n)}))).then(s,a)}u((r=r.apply(t,n||[])).next())}))};function fr(n,e){return cr(this,void 0,void 0,(function*(){const r=n.length,i=e.length,s=e.stats.avg,a=e.stats.stdev,u=new Float32Array(r+1).fill(0);if(u[r]=s,0===a||1===i)return u;try{const t=mr(r,i);if(t.toApplyPLS){const i=yield function(t,n,e){return cr(this,void 0,void 0,(function*(){return(yield $n({table:o.DataFrame.fromColumns([n]),features:t,predict:n,components:e,names:null})).regressionCoefficients.getRawData()}))}(n,e,t.components);let s=0;for(let t=0;t<r;++t)u[t]=i[t],s+=i[t]*n.byIndex(t).stats.avg;return u[r]-=s,u}const l=[],c=[],f=new Float32Array(r),h=new Float32Array(r);let m=0,g=0;for(const t of n){const n=t.stats;n.stdev>0&&(l.push(m),c.push(t),f[g]=n.avg,h[g]=n.stdev,++g),++m}if(0===g)return u;const v=function(t,n,e,r,o,i,s){return function(t,n,e){const r=t[n],o=r.arguments,i=[];let s=0;for(const t in o){const n=o[t];if("_callResult"!=t){switch(n.type){case"floatColumns":case"int":case"num":case"floatColumn":case"intColumn":case"intColumns":n.data=d[n.type](e[s]),s++;break;case"newFloatColumns":case"newIntColumns":const t=o[n.numOfRows.ref].data[n.numOfRows.value],r=o[n.numOfColumns.ref].data[n.numOfColumns.value];n.data=d[n.type](t,r);break;case"newFloatColumn":case"newIntColumn":const i=o[n.numOfRows.ref].data[n.numOfRows.value];n.data=d[n.type](i)}i.push(o[t].data)}}const a=function(t,n,e,r){let o;for(const n of r)n.allocateMemoryForBuffer(t);let i=!0;for(const t of r)i&=t.isMemoryForBufferAllocated();if(i){const e=[],i=[];for(const n of r)n.complementArrOfParams(e),n.complementArrOfTypes(i),n.putDataToBuffer(t);const s="number";o=t.ccall(n,s,i,e);for(const n of r)n.getDataFromBuffer(t)}for(const n of r)n.freeBuffer(t);if(null!=o)return o}(t,n,0,i);o._callResult=d.num(a);const u=r.output;if("objects"!=u.type)return p[u.type](o[u.source].data);const l=[];for(const t of u.source)l.push(o[t].data.data);return l}(EDA,"fitLinearRegressionParamsWithDataNormalizing",[t,n,e,r,o,i,s])}(o.DataFrame.fromColumns(c).columns,o.Column.fromFloat32Array("xAvgs",f,g),o.Column.fromFloat32Array("xStdevs",h,g),e,s,a,g+1).getRawData();for(let t=0;t<g;++t)u[l[t]]=v[t];u[r]=v[g]}catch(n){t.shell.error(`Fitted the trivial model: ${n instanceof Error?n.message:"due to the platform issue"}`)}return u}))}function hr(t,n){const e=t.length;if(e!==n.length-1)throw new Error("Incorrect parameters count");const r=t.byIndex(0),i=r.length,s=new Float32Array(i);let a=r.getRawData();const u=n[e];let l=n[0];for(let t=0;t<i;++t)s[t]=u+l*a[t];for(let r=1;r<e;++r){a=t.byIndex(r).getRawData(),l=n[r];for(let t=0;t<i;++t)s[t]+=l*a[t]}return o.Column.fromFloat32Array(t.getUnusedName("prediction"),s,i)}const mr=(t,n)=>((t,n)=>8*n*(t+1)>=268435456)(t,n)||t>=1e3?{toApplyPLS:!0,components:10}:n>=1e6?{toApplyPLS:!0,components:Math.min(10,t)}:n<=t?{toApplyPLS:!0,components:Math.min(10,n)}:{toApplyPLS:!1,components:10};var dr=function(t,n,e,r){return new(e||(e=Promise))((function(o,i){function s(t){try{u(r.next(t))}catch(t){i(t)}}function a(t){try{u(r.throw(t))}catch(t){i(t)}}function u(t){var n;t.done?o(t.value):(n=t.value,n instanceof e?n:new e((function(t){t(n)}))).then(s,a)}u((r=r.apply(t,n||[])).next())}))};const pr=new o.Package;function gr(){t.shell.info(pr.webRoot)}function vr(){return dr(this,void 0,void 0,(function*(){yield async function(){await initEDA()}()}))}function yr(t,n,e,r,i){return dr(this,void 0,void 0,(function*(){const s=n.getRawData(),a=e.getRawData(),u=yield ee(s,a,r,i),l=t.columns.getUnusedName("Cluster (DBSCAN)"),c=o.Column.fromInt32Array(l,u);return t.columns.add(c),c}))}function wr(n,r,o,i,s){return dr(this,void 0,void 0,(function*(){const a=yield function(t,n,r,o,i){return nt(this,void 0,void 0,(function*(){tt(n,r);const t=o?1:0,s=i?1:0;return yield async function(t,n,r,o,i){return new Promise(((t,s)=>{const a=new Worker(new URL(e.p+e.u(91),e.b));a.postMessage(D(EDA.principalComponentAnalysis.arguments,[n,r,o,i])),a.onmessage=function(n){a.terminate(),t(U(EDA.principalComponentAnalysis,n.data))}}))}(0,n,r,t,s)}))}(0,r,o,i,s);if(function(t,n){for(const t of n.toList())t.name="PC"+t.name}(0,a.columns),null===n.id)t.shell.addTableView(a);else{const t=n.columns;for(const n of a.columns)n.name=t.getUnusedName(n.name),t.add(n)}}))}function Er(n,e,r,i){return dr(this,void 0,void 0,(function*(){const s=n.dataFrame;if(null===s)return;const a=yield yr(s,n,e,r,i);s.changeColumnType(a,"string");const u=[n.name,e.name],l=t.shell.tableView(s.name);if(l)for(const t of l.viewers)if(t instanceof o.ScatterPlotViewer&&u.includes(t.props.xColumnName)&&u.includes(t.props.yColumnName))return void(t.props.colorColumnName=a.name)}))}function Ar(t,n){const e=t.stats.max-t.stats.min;return{entries:t.toList(),options:{range:e}}}function Cr(t,n){return{entries:t.toList(),options:{}}}function _r(){return dr(this,void 0,void 0,(function*(){const r=new ke,i=n.dialog("Dimensionality reduction").add(r.getEditor()).onOK((()=>dr(this,void 0,void 0,(function*(){const i=r.getParams();0!==i.columns.length&&(yield async function(r,i,s,a,u,l,c,f=!0,h=!1,m={preprocessingFuncArgs:[]},d={},p=null,g={}){const v={showXAxis:!1,showYAxis:!1,showXSelector:!1,showYSelector:!1};if(i.length!==a.length||i.length!==l.length||i.length!==u.length||i.length!==m.preprocessingFuncArgs.length)throw new Error("columns, metrics and preprocessing functions, weights and function argumentsmust have the same length");const y=f?t.shell.tableView(r.name)??t.shell.addTableView(r):null,w=async()=>{const w=o.TaskBarProgressIndicator.create(`Initializing ${d.scatterPlotName??"dimensionality reduction"} ...`);let E;try{const A=function(t){const n=["Embed_X","Embed_Y"],e=t.columns.names().filter((t=>t.includes(n[0]))).length+1;return n.map((t=>`${t}_${e}`))}(r);function C(t,e,a){let u=null,l=null;r.columns.names().includes(A[0])?(u=r.columns.byName(A[0]),l=r.columns.byName(A[1])):(u=r.columns.add(o.Column.float(A[0],r.rowCount)),l=r.columns.add(o.Column.float(A[1],r.rowCount)),f&&!E&&(E=y.scatterPlot({...v,x:A[0],y:A[1],title:d.scatterPlotName??He(i,s)}))),d[we]&&(E?.root&&n.setUpdateIndicator(E.root,!1),u.init((t=>a[0]?a[0][t]:void 0)),l.init((t=>a[1]?a[1][t]:void 0)));const c=t/e*100;w.update(c,`Running ${d.scatterPlotName??"dimensionality reduction"}... ${c.toFixed(0)}%`)}async function _(){r.columns.add(o.Column.float(A[0],r.rowCount)),r.columns.add(o.Column.float(A[1],r.rowCount));let h=null;f&&(E=y.scatterPlot({...v,x:A[0],y:A[1],title:d.scatterPlotName??He(i,s)}),n.setUpdateIndicator(E.root,!0));const p=t.events.onViewerClosed.subscribe((n=>{const e=n.args.viewer;e?.getOptions()?.look?.title&&E?.getOptions()?.look?.title&&e?.getOptions()?.look?.title===E?.getOptions()?.look?.title&&(t.events.fireCustomEvent(We,{}),p.unsubscribe(),h?.(),w.close())})),g=new Promise((async(n,r)=>{try{h=n;const r=[];for(let t=0;t<l.length;++t){const n=l[t];if(m.distanceFnArgs||(m.distanceFnArgs=[]),n){const e=n.inputs[0].name,o=n.inputs[1].name,{entries:s,options:u}=await n.apply({[e]:i[t],[o]:a[t],...m.preprocessingFuncArgs[t]??{}});r.push({entries:s,options:u}),m.distanceFnArgs.push(u)}else{const n=i[t].toList(),e={};r.push({entries:n,options:e}),m.distanceFnArgs.push(e)}}n(await async function(n,r,o,i,s,a,u){let l=await async function(n,r,o,i,s,a,u){if(!a.distanceFnArgs)throw new Error("options.distanceFnArgs must be defined");if(n.length!==r.length||n.length!==a.distanceFnArgs.length||n.length!==i.length)throw new Error("data, metrics and options and weights must have the same length");return new Promise((function(l,c){const f=new Worker(new URL(e.p+e.u(234),e.b));f.postMessage({columnsData:n,distanceMetrics:r,method:o,options:a,weights:i,aggregationMethod:s});const h=t.events.onCustomEvent(We).subscribe((()=>{try{f?.terminate()}finally{h.unsubscribe()}}));f.onmessage=({data:{error:t,embedding:n,epochNum:e,epochsLength:r}})=>{Ye(e)||Ye(r)?(h.unsubscribe(),t?c(t):l(n),setTimeout((()=>f.terminate()),100)):u&&u(e,r,n)}}))}(n,o,r,i,s,a,u);return l=l.map((t=>function(t){const n=t.length;let e=0,r=0;for(let o=0;o<n;++o)e+=t[o],r+=Math.pow(t[o],2);const o=e/n,i=1/Math.sqrt(r/n-Math.pow(o,2));for(let e=0;e<n;++e)t[e]=(t[e]-o)*i;return t}(t))),l}(r.map((t=>t.entries)),s,a,u,c,m,d[ye]?void 0:C))}catch(t){r(t)}})),_=await g;return w.close(),p.unsubscribe(),_}const b=await _();if(h&&b){const I=o.TaskBarProgressIndicator.create("Clustering embeddings ...");try{const N=await ee(b[0],b[1],m.dbScanEpsilon??.01,m.dbScanMinPts??4),S=r.columns.getUnusedName("Cluster (DBSCAN)");r.columns.addNewString(S).init((t=>N[t].toString())),E&&(E.props.colorColumnName=S)}catch(M){t.shell.error("Clustering embeddings failed"),console.error(M)}finally{I.close()}}if(b){const T=r.columns.byName(A[0]),O=r.columns.byName(A[1]);if(T.init((t=>b[0][t])),O.init((t=>b[1][t])),p)try{const P=p.inputs[0].name,x=p.inputs[1].name;await p.prepare({[P]:T,[x]:O,...g}).call(!0)}catch(L){t.shell.error("Post-processing failed"),console.error(L)}if(E)return n.setUpdateIndicator(E.root,!1),E.helpUrl="/help/compute/sequence-space",E}}catch(R){t.shell.error("Dimensionality reduction failed"),console.error(R),w.close(),E&&n.setUpdateIndicator(E.root,!1)}};return new Promise((async(t,e)=>{try{if(d.fastRowCount&&r.rowCount>d.fastRowCount&&!d[ye])n.dialog().add(n.divText("Analysis might take several minutes. Do you want to continue?")).onOK((async()=>{try{const n=await w();t(n)}catch(t){e(t)}})).onCancel((()=>t(void 0))).show();else{const n=await w();t(n)}}catch(t){e(t)}}))}(i.table,i.columns,i.methodName,i.distanceMetrics,i.weights,i.preprocessingFunctions,i.aggreaggregationMethod,!!i.plotEmbeddings,!!i.clusterEmbeddings,i.options,{fastRowCount:1e4},i.postProcessingFunction,i.postProcessingFunctionArgs))})))).show();i.helpUrl="https://datagrok.ai/help/explore/dim-reduction.md";const s=()=>{const t=r.columnsInput.value,n=i.getButton("OK");n&&(t&&0!==t.length?n.classList.remove("disabled"):n.classList.add("disabled"))};r.onColumnsChanged.subscribe((()=>{try{s()}catch(t){console.error(t)}})),s()}))}function br(e){try{const t=new ar;n.dialog("Markov clustering").add(t.getEditor()).onOK((()=>dr(this,void 0,void 0,(function*(){const n=t.params;return e.func.prepare({df:n.table,cols:n.columns,metrics:n.distanceMetrics,weights:n.weights,aggregationMethod:n.aggreaggregationMethod,preprocessingFuncs:n.preprocessingFunctions,preprocessingFuncArgs:n.preprocessingFuncArgs,threshold:n.threshold,maxIterations:n.maxIterations,useWebGPU:n.useWebGPU,inflate:n.inflateFactor}).call(!0)})))).show()}catch(n){const e=n instanceof Error?n.message:n.toString(),r=n instanceof Error?n.stack:void 0;t.shell.error(`Get region editor error: ${e}`),pr.logger.error(e,void 0,r)}}function Ir(n,e,r,i,s,a,u){return dr(this,arguments,void 0,(function*(n,e,r,i,s,a,u,l=80,c=10,f=!1,h=0){var m;const d=null!==(m=t.shell.tableView(n.name))&&void 0!==m?m:t.shell.addTableView(n),p=JSON.stringify({cols:e.map((t=>t.name)),metrics:r,weights:i,aggregationMethod:s,preprocessingFuncs:a.map((t=>{var n;return null!==(n=null==t?void 0:t.name)&&void 0!==n?n:null})),preprocessingFuncArgs:u,threshold:l,maxIterations:c,useWebGPU:f,inflate:h});return n.setTag(ge,p),d.addViewer(o.VIEWER.SCATTER_PLOT,{title:"MCL",initializationFunction:"EDA:MCLInitializationFunction"})}))}function Nr(r){return dr(this,void 0,void 0,(function*(){const i=r.dataFrame;if(null===i)throw new Error("Data frame of the scatter plot is null");const s=i.getTag(ge);if(!s)throw new Error("MCL options tag on the dataFrame is not found");const a=JSON.parse(s),u=a.cols.map((t=>i.columns.byName(t))),l=a.preprocessingFuncs.map((t=>t?o.Func.byName(t):null)),c=yield async function(r,o,i,s,a,u,l,c=80,f=10,h=!1,m=2,d){const p=t.shell.tableView(r.name)??t.shell.addTableView(r),g=d??p.scatterPlot({showXAxis:!1,showYAxis:!1,showXSelector:!1,showYSelector:!1,title:"MCL"});n.setUpdateIndicator(g.root,!0);const v=[],y=[];for(let t=0;t<u.length;++t){const n=u[t];if(n){const e=n.inputs[0].name,r=n.inputs[1].name,{entries:s,options:a}=await n.apply({[e]:o[t],[r]:i[t],...l[t]??{}});y.push({entries:s,options:a}),v.push(a??{})}else{const n=o[t].toList(),e={};y.push({entries:n,options:e}),v.push(e)}}const w=function(t,n,r,o,i,s,a=10,u=!1,l=2){const c=new Worker(new URL(e.p+e.u(317),e.b));let f;return c.postMessage({data:t,threshold:n,weights:r,aggregationMethod:o,distanceFns:i,distanceFnArgs:s,maxIterations:a,useWebGPU:u,inflate:l}),{promise:new Promise(((t,n)=>{f=t,c.onmessage=n=>{setTimeout((()=>c.terminate()),100),t(n.data.res)},c.onerror=t=>{setTimeout((()=>c.terminate()),100),n(t)}})),terminate:()=>{try{f(null),c.terminate()}catch(t){console.error(t)}}}}(y.map((t=>t.entries)),c,s,a,i,v,f,h,m),E=t.events.onViewerClosed.subscribe((t=>{t.args.viewer?.props?.title===g.props.title&&g.type===t.args?.viewer?.type&&(E.unsubscribe(),w.terminate())})),A=await w.promise;if(!A)return;const C=r.columns.getUnusedName("Cluster (MCL)"),_=r.columns.getUnusedName("EmbedX (MCL)"),b=r.columns.getUnusedName("EmbedY (MCL)"),I={};A.clusters.forEach((t=>{I[t]||(I[t]=0),I[t]++}));const N=new Uint32Array(A.embedX.length);for(let t=0;t<A.is.length;t++)N[A.is[t]]++,N[A.js[t]]++;const S=r.columns.getUnusedName("Cluster size (MCL)"),M=r.columns.getUnusedName("Connectivity (MCL)"),T=r.columns.addNewFloat(_);T.init((t=>A.embedX[t]));const O=r.columns.addNewFloat(b);O.init((t=>A.embedY[t]));const P=r.columns.addNewString(C);P.init((t=>A.clusters[t].toString()));const x=r.columns.addNewInt(S);x.init((t=>I[A.clusters[t]]));const L=r.columns.addNewInt(M);return L.init((t=>N[t])),g.props.xColumnName=_,g.props.yColumnName=b,g.props.colorColumnName=C,g.props.markerDefaultSize=5,E.unsubscribe(),new lr(g,_,b,{from:A.is,to:A.js,drawArrows:!1,opacity:.3,skipMultiLineCalculation:!0},or.none),n.setUpdateIndicator(g.root,!1),{sc:g,embedXCol:T,embedYCol:O,clusterCol:P,clusterCounterCol:x,connectivityCol:L}}(i,u,a.metrics,a.weights,a.aggregationMethod,l,a.preprocessingFuncArgs,a.threshold,a.maxIterations,a.useWebGPU,a.inflate,r);return null==c?void 0:c.sc}))}function Sr(t,n,e,r,o){return dr(this,void 0,void 0,(function*(){return yield $n({table:t,features:n,predict:e,components:r,names:o})}))}function Mr(){return dr(this,void 0,void 0,(function*(){yield Kn(Nn.COMPUTE_COMPONENTS)}))}function Tr(){return dr(this,void 0,void 0,(function*(){yield Kn(Nn.PERFORM_MVA)}))}function Or(){return dr(this,void 0,void 0,(function*(){!function(){Yn(this,void 0,void 0,(function*(){t.shell.addTableView(o.DataFrame.fromColumns([o.Column.fromStrings("model",["alfaromeo","audi","bmw","chevrolet","dodge1","dodge2","honda1","honda2","isuzu","jaguar","mazda","mercedes","mercury","mitsubishi","nissan1","nissan2","peugot","plymouth","porsche","saab","subaru","toyota1","toyota2","toyota3","toyota4","volkswagen1","volkswagen2","volvo1","volvo2","volvo3"]),o.Column.fromInt32Array("diesel",new Int32Array([0,0,0,0,0,0,0,0,0,0,0,1,0,0,0,0,0,1,0,0,0,0,1,0,1,1,0,0,0,1])),o.Column.fromInt32Array("turbo",new Int32Array([0,0,0,0,1,0,0,0,0,0,0,1,1,0,0,0,0,1,0,0,0,0,0,0,1,0,0,0,1,1])),o.Column.fromInt32Array("two.doors",new Int32Array([1,0,1,0,1,0,1,0,0,0,0,0,1,1,0,1,0,0,1,0,0,1,0,1,0,1,0,0,0,0])),o.Column.fromInt32Array("hatchback",new Int32Array([1,0,0,0,1,1,1,0,0,0,0,0,1,1,0,0,1,0,0,0,0,1,0,1,0,0,0,0,0,0])),o.Column.fromFloat32Array("wheel.base",new Float32Array([94.5,105.80000305175781,101.19999694824219,94.5,93.69999694824219,93.69999694824219,93.69999694824219,96.5,94.30000305175781,113,93.0999984741211,115.5999984741211,102.69999694824219,93.69999694824219,94.5,94.5,93.69999694824219,114.19999694824219,89.5,99.0999984741211,97.19999694824219,95.69999694824219,95.69999694824219,98.4000015258789,102.4000015258789,97.30000305175781,100.4000015258789,104.30000305175781,109.0999984741211,109.0999984741211])),o.Column.fromFloat32Array("length",new Float32Array([171.1999969482422,192.6999969482422,176.8000030517578,158.8000030517578,157.3000030517578,157.3000030517578,150,175.39999389648438,170.6999969482422,199.60000610351562,166.8000030517578,202.60000610351562,178.39999389648438,157.3000030517578,170.1999969482422,165.3000030517578,157.3000030517578,198.89999389648438,168.89999389648438,186.60000610351562,172,158.6999969482422,166.3000030517578,176.1999969482422,175.60000610351562,171.6999969482422,180.1999969482422,188.8000030517578,188.8000030517578,188.8000030517578])),o.Column.fromFloat32Array("width",new Float32Array([65.5,71.4000015258789,64.80000305175781,63.599998474121094,63.79999923706055,63.79999923706055,64,65.19999694824219,61.79999923706055,69.5999984741211,64.19999694824219,71.69999694824219,68,64.4000015258789,63.79999923706055,63.79999923706055,63.79999923706055,68.4000015258789,65,66.5,65.4000015258789,63.599998474121094,64.4000015258789,65.5999984741211,66.5,65.5,66.9000015258789,67.19999694824219,68.80000305175781,68.9000015258789])),o.Column.fromFloat32Array("height",new Float32Array([52.400001525878906,55.70000076293945,54.29999923706055,52,50.79999923706055,50.599998474121094,52.599998474121094,54.099998474121094,53.5,52.79999923706055,54.099998474121094,56.29999923706055,54.79999923706055,50.79999923706055,53.5,54.5,50.599998474121094,58.70000076293945,51.599998474121094,56.099998474121094,52.5,54.5,53,52,54.900001525878906,55.70000076293945,55.099998474121094,56.20000076293945,55.5,55.5])),o.Column.fromInt32Array("curb.weight",new Int32Array([2823,2844,2395,1909,2128,1967,1956,2304,2337,4066,1950,3770,2910,1918,2024,1951,1967,3430,2800,2695,2190,1985,2275,2551,2480,2261,2661,2912,3049,3217])),o.Column.fromInt32Array("eng.size",new Int32Array([152,136,108,90,98,90,92,110,111,258,91,183,140,92,97,97,90,152,194,121,108,92,110,146,110,97,136,141,141,145])),o.Column.fromInt32Array("horsepower",new Int32Array([154,110,101,70,102,68,76,86,78,176,68,123,175,68,69,69,68,95,207,110,82,62,56,116,73,52,110,114,160,106])),o.Column.fromInt32Array("peak.rpm",new Int32Array([5e3,5500,5800,5400,5500,5500,6e3,5800,4800,4750,5e3,4350,5e3,5500,5200,5200,5500,4150,5900,5250,4400,4800,4500,4800,4500,4800,5500,5400,5300,4800])),o.Column.fromInt32Array("symbol",new Int32Array([1,1,2,0,1,1,1,0,0,0,1,-1,1,2,1,1,1,0,3,2,0,1,0,2,-1,2,0,-2,-1,-1])),o.Column.fromInt32Array("city.mpg",new Int32Array([19,19,23,38,24,31,30,27,24,15,31,22,19,37,31,31,31,25,17,21,28,35,34,24,30,37,19,23,19,26])),o.Column.fromInt32Array("highway.mpg",new Int32Array([26,25,29,43,30,38,34,33,29,19,38,25,24,41,37,37,38,25,25,28,33,39,36,30,33,46,24,28,25,27])),o.Column.fromInt32Array("price",new Int32Array([16500,17710,16430,6575,7957,6229,7129,8845,6785,35550,7395,31600,16503,5389,7349,7299,6229,13860,37028,12170,7775,5348,7898,9989,10698,7775,13295,12940,19045,22470]))])),t.shell.windows.help.visible=!0,t.shell.windows.help.showHelp(n.markdown(Gn)),t.shell.windows.showContextPanel=!1,t.shell.windows.showProperties=!1,yield Kn(Nn.DEMO)}))}()}))}function Pr(t,n,e,r,o,i){return dr(this,void 0,void 0,(function*(){return yield at(lt,[0,0],t,n,e,r,o,i)}))}function xr(t,n,e,r,o,i,s){return dr(this,void 0,void 0,(function*(){return yield at(ft,[n,0],t,e,r,o,i,s)}))}function Lr(t,n,e){return dr(this,void 0,void 0,(function*(){return An(yield wn({gamma:e,kernel:lt},t,n))}))}function Rr(t,n){return dr(this,void 0,void 0,(function*(){return yield _n(t,n)}))}function Fr(t,n){return dr(this,void 0,void 0,(function*(){return bn(t,n)}))}function Dr(t,n){return dr(this,void 0,void 0,(function*(){return In(t)}))}function Ur(t,n,e,r){return dr(this,void 0,void 0,(function*(){return En(0,r)}))}function Br(t,n,e,r){return dr(this,void 0,void 0,(function*(){return An(yield wn({gamma:e,kernel:ft,sigma:r},t,n))}))}function kr(t,n){return dr(this,void 0,void 0,(function*(){return yield _n(t,n)}))}function Vr(t,n){return dr(this,void 0,void 0,(function*(){return bn(t,n)}))}function Gr(t,n){return dr(this,void 0,void 0,(function*(){return In(t)}))}function qr(t,n,e,r){return dr(this,void 0,void 0,(function*(){return En(0,r)}))}function Wr(t,n,e,r,o){return dr(this,void 0,void 0,(function*(){return An(yield wn({gamma:e,kernel:ct,cParam:r,dParam:o},t,n))}))}function Yr(t,n){return dr(this,void 0,void 0,(function*(){return yield _n(t,n)}))}function Hr(t,n){return dr(this,void 0,void 0,(function*(){return bn(t,n)}))}function zr(t,n){return dr(this,void 0,void 0,(function*(){return In(t)}))}function $r(t,n,e,r){return dr(this,void 0,void 0,(function*(){return En(0,r)}))}function Kr(t,n,e,r,o){return dr(this,void 0,void 0,(function*(){return An(yield wn({gamma:e,kernel:ht,kappa:r,theta:o},t,n))}))}function jr(t,n){return dr(this,void 0,void 0,(function*(){return yield _n(t,n)}))}function Xr(t,n){return dr(this,void 0,void 0,(function*(){return bn(t,n)}))}function Qr(t,n){return dr(this,void 0,void 0,(function*(){return In(t)}))}function Jr(t,n,e,r){return dr(this,void 0,void 0,(function*(){return En(0,r)}))}function Zr(n,e,r,i,s){!function(n,e,r,i){const s=t.shell.getTableView(n.name);s.addViewer(o.Viewer.boxPlot(o.DataFrame.fromColumns([e,r]))),s.addViewer(o.Viewer.grid(i))}(n,e,r,function(t,n,e=.05,r=!1){Qn(e);const i=new te(t,n,r,e);if(r){if(!i.areVarsEqual(e))throw new Error(jn.NON_EQUAL_VARIANCES);if(!i.isNormal())throw new Error(jn.NON_NORMAL_DISTRIB)}const s=i.getOneWayAnova(),a=Xn.centralF.inv(1-e,s.dfBn,s.dfWn);return function(t,n,e,r,i){return o.DataFrame.fromColumns([o.Column.fromStrings("Source of variance",["Between groups","Within groups","Total","",r,"",i]),o.Column.fromList(o.COLUMN_TYPE.FLOAT,"Sum of squares",[t.ssBn,t.ssWn,t.ssTot,null,null,null,null]),o.Column.fromList(o.COLUMN_TYPE.INT,"Degrees of freedom",[t.dfBn,t.dfWn,t.dfTot,null,null,null,null]),o.Column.fromList(o.COLUMN_TYPE.FLOAT,"Mean square",[t.msBn,t.msWn,null,null,null,null,null]),o.Column.fromList(o.COLUMN_TYPE.FLOAT,"F-statistics",[t.fStat,null,null,null,null,null,null]),o.Column.fromList(o.COLUMN_TYPE.FLOAT,"p-value",[t.pValue,null,null,null,null,null,null]),o.Column.fromList(o.COLUMN_TYPE.FLOAT,`${n}-critical value`,[e,null,null,null,null,null,null])])}(s,e,a,`THE NULL HYPOTHESIS: the "${t.name}" \n factor does not produce a significant difference in the "${n.name}" feature.`,"Test result: "+(s.fStat>a?"REJECTED.":"FAILED TO REJECT."))}(e,r,i,s))}function to(){sr()}function no(t){return dr(this,void 0,void 0,(function*(){yield sr(t)}))}function eo(n,e,r,i){return dr(this,void 0,void 0,(function*(){const s=performance.now(),a=yield fr(e,r),u=performance.now();console.log(`Fit: ${u-s} ms.`);const l=hr(e,a);console.log(`Predict: ${performance.now()-u} ms.`),l.name=n.columns.getUnusedName(l.name),n.columns.add(l),i&&t.shell.tableView(n.name).addViewer(o.VIEWER.SCATTER_PLOT,{xColumnName:r.name,yColumnName:l.name,showRegressionLine:!0})}))}function ro(n,e,r,i,s,a){return function(n,e,r,i,s,a){const u=t.data.demo.randomWalk(n,e+1),l=u.columns,c=l.byIndex(e);c.name="y (noisy)";const f=c.getRawData(),h=new Float32Array(n).fill(a);let m=0,d=0,p=0,g=0;for(const t of l){t.name=`x${m}`,d=Math.random()*r,p=Math.random()*i;const o=t.getRawData();g=Math.random()*s;for(let t=0;t<n;++t)o[t]=d*o[t]+p,h[t]+=o[t]*g;if(++m,m===e)break}d=Math.random()*r,p=Math.random()*i;for(let t=0;t<n;++t)f[t]=d*f[t]+h[t];return l.add(o.Column.fromFloat32Array("y",h,n)),u}(n,e,r,i,s,a)}function oo(t,n){return dr(this,void 0,void 0,(function*(){const e=t.columns,r=yield fr(e,n);return new Uint8Array(r.buffer)}))}function io(t,n){const e=t.columns,r=new Float32Array(n.buffer);return o.DataFrame.fromColumns([hr(e,r)])}function so(t,n){for(const n of t.columns)if(!n.matches("numerical"))return!1;return!!n.matches("numerical")}function ao(t,n){return t.rowCount<=1e5}})(),eda=r})();
2
+ //# sourceMappingURL=package.js.map