diff --git a/Bin/Config/Common/MenuDefines_Ribbon_cn.dat b/Bin/Config/Common/MenuDefines_Ribbon_cn.dat
index d99c42a..ba855b2 100644
--- a/Bin/Config/Common/MenuDefines_Ribbon_cn.dat
+++ b/Bin/Config/Common/MenuDefines_Ribbon_cn.dat
@@ -1 +1 @@
-77u/PD94bWwgcup_mpadmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4NCg0KPCEtLSDnvJbovpHkvbwzy/nlKggWE1MU3B5IHYyMDA2IFUgKGh0dHA6Ly93d3cuYWx0b3ZhLmNvbSkg55SxIGFueSAoYW55KSAtLT4NCjwhLS0qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLS0+DQo8IS0tICAgIOacrOaWh+aho+eahOebrueahOaYr+W7uueri1dUQUnova/ku7bns7vnu5/nmoToj5zljZXlsYLmrKHlhbPns7so6ZKI5a+5UmliYm9u5qih5byPKSAgICAgICAgICAgICAgICAgICAgICAgLS0+DQo8IS0tICAgIEF1dGhvcihzKTogd2FuZ3pnICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPg0KPCEtLSAgICBEYXRlOiAyMDI0MDcxOCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLT4NCjwhLS0qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLS0+DQoNCjwhLS0qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLS0+DQo8IS0tDQogICAgVGFiIOe6p+WIqw0KICAgICAgICBJRDogICAgICAgICAg5ZSv5LiA5qCH6K+GDQogICAgICAgIE5hbWXvvJogICAgICAg5ZCN56ew77yM6YCa5bi46Iux5paHDQogICAgICAgIEFsaWFz77yaICAgICAg5Yir5ZCN77yM6YCa5bi45Lit5paHDQogICAgICAgIEZpbGVNb2RlOiAgICDmmK/lkKbmlofku7ZNZW515qih5byP77yMMSBvciAwDQogICAgICAgIFZpc2libGXvvJogICAg5piv5ZCm5Y+v6KeB77yMMSBvciAwDQogICAgICAgIFRpcHPvvJogICAgICAg6L6F5Yqp6K+05piODQoNCiAgICAgICAgR3JvdXAg57qn5YirDQogICAgICAgICAgICBOYW1l77yaICAgICAgIOWQjeensO+8jOmAmuW4uOiLseaWhw0KICAgICAgICAgICAgQWxpYXPvvJogICAgICDliKvlkI3vvIzpgJrluLjkuK3mlocNCg0KICAgICAgICAgICAgQ21kIOe6p+WIqw0KICAgICAgICAgICAgICAgIElEOiAgICAgICAgICDllK/kuIDmoIfor4YNCiAgICAgICAgICAgICAgICBUeXBlOiAgICAgICAg5a+55bqU5o6n5Lu257G75Z6LOg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAw4oCU4oCU6buY6K6kQnV0dG9uDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIDHigJTigJTluKbkuIvmi4noj5zljZVCdXR0b24NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMuKAlOKAlENvbWJvQm94DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIDPigJTigJRDaGVja0JveA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICA04oCU4oCUUmFkaW9CdXR0b24NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNeKAlOKAlFRleHQNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNuKAlOKAlExhYmVsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIDfigJTigJRMaXN0V2lkZ2V0DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIDjigJTigJRMaW5lRWRpdA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICA54oCU4oCU5YqI5YiG5oyJ6ZKuDQogICAgICAgICAgICAgICAgTmFtZe+8miAgICAgICDlkI3np7DvvIzpgJrluLjoi7HmlocNCiAgICAgICAgICAgICAgICBBbGlhc++8miAgICAgIOWIq+WQje+8jOmAmuW4uOS4reaWhw0KICAgICAgICAgICAgICAgIEljb27vvJogICAgICAg5Zu+5qCHDQogICAgICAgICAgICAgICAgU2hvcnRLZXnvvJogICDlv6vmjbfplK4NCiAgICAgICAgICAgICAgICBCb3VuZHM6ICAgICAg5L2N572u5L+h5oGv77yM5YWo5piv5pW05pWw77yM5ZyoR3JpZExheW91dOS4rQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMCwwLDEsMikgKDAsMCkg5YiG5Yir5Li6eHl3aA0KICAgICAgICAgICAgICAgIEV4dEluZm86ICAgICDmianlsZXkv6Hmga/vvIzlpoLmk43kvZzlr7nosaHnmoTooajlkI0s5LiL5ouJ6YCJ6aG5562JDQogICAgICAgICAgICAgICAgRXh0TmFtZXM6ICAgIOaJqeWxleS/oeaBr+WvueW6lOeahE5hbWXvvIzlpoLkuIvmi4lidXR0b27lr7nlupTnmoROYW1lDQogICAgICAgICAgICAgICAgVGlwc++8miAgICAgICDovoXliqnor7TmmI4NCi0tPg0KPCEtLSoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiotLT4NCg0KPFJpYmJvbj4NCg0KICAgIDxUYWIgSUQ9IjEiIE5hbWU9IlByb2pNYW5hZ2VyIiBBbGlhcz0i6aG555uu566h55CGKFApIiBGaWxlTW9kZT0iMSIgPg0KDQogICAgICAgIDxHcm91cCBOYW1lPSJQcm9qZWN0IiBBbGlhcz0i5paH5Lu2Ij4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjEwMDAiIE5hbWU9IkFwcEhvbWUiIEFsaWFzPSIiIEljb249IkFwcEhvbWUxMjgiIC8+DQogICAgICAgICAgICA8Q21kIElEPSItMSIgTmFtZT0iU2VwYXJhdG9yIiBBbGlhcz0i5YiG6ZqU56ymIiBUaXBzPSIiIC8+DQogICAgICAgICAgICA8Q21kIElEPSIxMDAxIiBOYW1lPSJQcm9qTmV3IiBBbGlhcz0i5paw5bu66aG555uuIiBTaG9ydEtleT0iQ3RybCtOIiBJY29uPSJOZXdQcm9qIiAvPg0KICAgICAgICAgICAgPENtZCBJRD0iMTAwMiIgTmFtZT0iUHJvak9wZW4iIEFsaWFzPSLmiZPlvIDpobnnm64iIFNob3J0S2V5PSJDdHJsK08iIEljb249Ik9wZW5Qcm9qIiAvPg0KICAgICAgICAgICAgPENtZCBJRD0iMTAwMyIgTmFtZT0iUHJvakNsb3NlIiBBbGlhcz0i5YWz6Zet6aG555uuIiBJY29uPSJDbG9zZVByb2oiIC8+DQogICAgICAgICAgICA8Q21kIElEPSItMSIgTmFtZT0iU2VwYXJhdG9yIiBBbGlhcz0i5YiG6ZqU56ymIiBUaXBzPSIiIC8+DQogICAgICAgICAgICA8Q21kIElEPSIxMDA1IiBOYW1lPSJQcm9qU2F2ZSIgQWxpYXM9IuS/neWtmOmhueebriIgU2hvcnRLZXk9IkN0cmwrUyIgSWNvbj0iU2F2ZVByb2oiIC8+DQogICAgICAgICAgICA8Q21kIElEPSIxMDA2IiBOYW1lPSJQcm9qU2F2ZUFzIiBBbGlhcz0i6aG555uu5Y+m5a2YIiBJY29uPSJTYXZlYXMiIC8+DQogICAgICAgICAgICA8Q21kIElEPSIxMDA3IiBOYW1lPSJQcm9qQ29uZmlnIiBBbGlhcz0i6aG555uu5L+h5oGvIiBJY29uPSJQcm9qSW5mbyIgLz4NCg0KICAgICAgICAgICAgPENtZCBJRD0iLTEiIE5hbWU9IlNlcGFyYXRvciIgQWxpYXM9IuWIhumalOespiIgVGlwcz0iIiAvPg0KICAgICAgICAgICAgPENtZCBJRD0iMTAwMDIiIE5hbWU9IkhlbHAiIEFsaWFzPSLluK7liqkoSCkiIEljb249IkhlbHAiIC8+DQogICAgICAgICAgICA8Q21kIElEPSIxMDAwMyIgTmFtZT0iQWJvdXQiIEFsaWFzPSLlhbPkuo4oQSkiIEljb249IldUQUlBYm91dCIgLz4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjEwMDA4IiBOYW1lPSJVcGRhdGVMaXN0cyIgQWxpYXM9IuabtOaWsOWIl+ihqChJKSIgSWNvbj0iVXBkYXRlTGlzdHMiIC8+DQogICAgICAgICAgICA8Q21kIElEPSItMSIgTmFtZT0iU2VwYXJhdG9yIiBBbGlhcz0i5YiG6ZqU56ymIiBUaXBzPSIiIC8+DQogICAgICAgICAgICA8Q21kIElEPSIxMDEwIiBOYW1lPSJBcHBRdWl0IiBBbGlhcz0i6YCA5Ye6KFgpIiBJY29uPSJDbG9zZSIgLz4NCiAgICAgICAgPC9Hcm91cD4NCiAgICA8L1RhYj4NCg0KICAgIDxUYWIgSUQ9IjAiIE5hbWU9IldlbENvbWUiIEFsaWFzPSLlvIDlp4soTykiID4NCg0KICAgICAgICA8R3JvdXAgTmFtZT0iRGF0YU1hbmFnZXIiIEFsaWFzPSLmlbDmja7lh4blpIciPg0KICAgICAgICAgICAgPENtZCBJRD0iMTA5OSIgQm91bmRzPSIwLDAsMiwxIiBOYW1lPSJXZWxsTmV3IiBBbGlhcz0i5paw5bu65LqVKFcpIiBJY29uPSJXZWxsTmV3IiAvPg0KICAgICAgICAgICAgPENtZCBJRD0iMjAwNSIgQm91bmRzPSIwLDEsMiwxIiBOYW1lPSJEYXRhUmF0ZSIgQWxpYXM9Iua1gemHj+aVsOaNrihRKSIgRXh0SW5mbz0iUF9EQVRBX0dBVUdFX0YiIEljb249IlJhdGVEYXRhIiAvPg0KICAgICAgICAgICAgPENtZCBJRD0iMjAwNiIgQm91bmRzPSIwLDIsMiwxIiBOYW1lPSJEYXRhUHJlIiBBbGlhcz0i5Y6L5Yqb5pWw5o2uKFApIiBFeHRJbmZvPSJQX0RBVEFfR0FVR0VfUCIgSWNvbj0iUHJlc3N1cmVEYXRhIiAvPg0KICAgICAgICA8L0dyb3VwPg0KDQogICAgICAgIDxHcm91cCBOYW1lPSJBbmFsRWRpdCIgQWxpYXM9IuWIhuaekOeuoeeQhiI+DQogICAgICAgICAgICA8Q21kIElEPSIzMDA2IiBCb3VuZHM9IjAsMCwyLDEiIE5hbWU9IkFuYWxOZXciIEFsaWFzPSLmlrDlu7rliIbmnpAiIEljb249IkpvYk5ldyIgLz4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjMwMDciIEJvdW5kcz0iMCwxLDIsMSIgTmFtZT0iQW5hbEVkaXQiIEFsaWFzPSLliIbmnpDnrqHnkIYiIEljb249IkpvYkVkaXQiIFZpc2libGU9IjAiIC8+DQogICAgICAgICAgICA8Q21kIElEPSI5MTAxIiBCb3VuZHM9IjAsMSIgTmFtZT0iVmlzaWJsZUFuYWxCYXNpYyIgQWxpYXM9IuWfuuehgOS/oeaBryIgSWNvbj0iSW5wdXRCYXNpYyIgLz4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjkxMDIiIEJvdW5kcz0iMSwxIiBOYW1lPSJWaXNpYmxlQW5hbFBWVCIgQWxpYXM9IlBWVOaVsOaNriIgSWNvbj0iSW5wdXRGbHVpZCIgLz4NCiAgICAgICAgPC9Hcm91cD4NCg0KICAgICAgICA8R3JvdXAgTmFtZT0iQW5hbHl0aWNhbCIgQWxpYXM9Iua1geWKqOauteWIhuaekCI+DQogICAgICAgICAgICA8Q21kIElEPSIzMDAzIiBCb3VuZHM9IjAsMCwyLDEiIE5hbWU9IkFuYWxQRiIgQWxpYXM9Iua1geWKqOautemAieaLqSIgRXh0SW5mbz0iUEYiIEljb249IlBGIiAvPg0KICAgICAgICAgICAgPENtZCBJRD0iMzAwNCIgQm91bmRzPSIwLDEsMiwxIiBOYW1lPSJBbmFsRmxvd1NlZyIgQWxpYXM9Iua1geWKqOauteWIhuaekCIgSWNvbj0iRmxvd1BlcmlvZCIgLz4NCiAgICAgICAgPC9Hcm91cD4NCg0KICAgICAgICA8R3JvdXAgTmFtZT0iQW5hbHl0aWNhbCIgQWxpYXM9Iuino+mHiuaLn+WQiCI+DQoNCiAgICAgICAgICAgIDxDbWQgSUQ9IjMxMDUiIEJvdW5kcz0iMCwwLDIsMSIgTmFtZT0iRGVjb252b2x2IiBBbGlhcz0i5Y+N6KS256evIiBJY29uPSJEZWNvbnZvbHYiIFZpc2libGU9IjAiIC8+DQogICAgICAgICAgICA8Q21kIElEPSIzMTAxIiBCb3VuZHM9IjAsMSwyLDEiIE5hbWU9IkZpdE1vZGVsIiBBbGlhcz0i6Kej5p6Q6KejIiBJY29uPSJGaXRNb2RlbCIgLz4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjMxMDQiIEJvdW5kcz0iMCwyLDIsMSIgTmFtZT0ibm1GaXRNb2RlbCIgQWxpYXM9IuaVsOWAvOinoyIgSWNvbj0iRml0TW9kZWwiIC8+DQoNCiAgICAgICAgICAgIDxDbWQgSUQ9IjMxMDIiIEJvdW5kcz0iMCwzLDIsMSIgTmFtZT0iQXV0b0ZpdCIgQWxpYXM9IuiHquWKqOaLn+WQiCIgSWNvbj0iQXV0b0ZpdCIgLz4NCiAgICAgICA8L0dyb3VwPg0KDQogICAgICAgIDxHcm91cCBOYW1lPSJOdW1lcmljYWwiIEFsaWFzPSLlnLDotKjlu7rmqKEoRGVidWcpIiBWaXNpYmxlPSIwIj4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjUwMDIiIEJvdW5kcz0iMCwwLDIsMSIgTmFtZT0iUHJvcGVydHlMb2FkIiBBbGlhcz0i5bGe5oCn5a+85YWlIiBJY29uPSJQcmVwYXJlR3JpZCIgLz4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjUxMDIiIEJvdW5kcz0iMCwxLDIsMSIgTmFtZT0iUnVuR3JpZCIgQWxpYXM9Iue9keagvOWIkuWIhiIgSWNvbj0iUGxhdGVGaXQiIC8+DQogICAgICAgICAgICA8Q21kIElEPSI1MjAxIiBCb3VuZHM9IjAsMiwyLDEiIE5hbWU9IkFuYWxNYXAiIEFsaWFzPSLorqHnrpciIEljb249IlJ1bkV4IiAvPg0KICAgICAgICAgICAgPENtZCBJRD0iNTIwMiIgQm91bmRzPSIwLDMsMiwxIiBOYW1lPSJBbmFsUEYiIEFsaWFzPSLovoXliqnmi5/lkIgiIEV4dEluZm89IlBGIiBJY29uPSJSdW5PdGhlciIgVmlzaWJsZT0iMCIvPg0KICAgICAgIDwvR3JvdXA+DQoNCiAgICAgICAgPEdyb3VwIE5hbWU9IldlbGxNYXAiIEFsaWFzPSLkupXkvY3lm74iPg0KICAgICAgICAgICAgPENtZCBJRD0iMzAwOCIgQm91bmRzPSIwLDAsMiwxIiBOYW1lPSJBbmFsTWFwIiBBbGlhcz0i5LqV5L2N5Zu+IiBJY29uPSJNYXAyRCIgVmlzaWJsZT0iMSIgLz4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjMwMTgiIEJvdW5kcz0iMCwxLDIsMSIgTmFtZT0iQW5hbEludGVyZmVyZSIgQWxpYXM9IuW5suaJsOiuvuWumiIgSWNvbj0iTWFwMkQiIFZpc2libGU9IjAiIC8+DQogICAgICAgIDwvR3JvdXA+DQoNCiAgICAgICAgPEdyb3VwIE5hbWU9IldpbmRvdyIgQWxpYXM9Iueql+WPo+aYvuekuihEZWJ1ZykiIFZpc2libGU9IjAiID4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjkwMDIiIEJvdW5kcz0iMCwwIiBOYW1lPSJWaXNpYmxlTW9kZWxzIiBBbGlhcz0i5qih5Z6L56qX5Y+jIiBJY29uPSJWaXNpYmxlTW9kZWxzIiAvPg0KICAgICAgICAgICAgPENtZCBJRD0iOTAwMyIgQm91bmRzPSIxLDAiIE5hbWU9IlZpc2libGVQYXJhbWV0ZXJzIiBBbGlhcz0i5Y+C5pWw56qX5Y+jIiBJY29uPSJWaXNpYmxlUGFyYW1ldGVycyIgLz4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjkxMDEiIEJvdW5kcz0iMCwxIiBOYW1lPSJWaXNpYmxlQW5hbEJhc2ljIiBBbGlhcz0i5Z+656GA5L+h5oGvIiBJY29uPSJJbnB1dEJhc2ljIiAvPg0KICAgICAgICAgICAgPENtZCBJRD0iOTEwMiIgQm91bmRzPSIxLDEiIE5hbWU9IlZpc2libGVBbmFsUFZUIiBBbGlhcz0iUFZU5pWw5o2uIiBJY29uPSJJbnB1dEZsdWlkIiAvPg0KICAgICAgICAgICAgPENtZCBJRD0iOTEwMyIgQm91bmRzPSIwLDIiIE5hbWU9IlZpc2libGVBbmFsRGlmZiIgQWxpYXM9IkRJRkbmlbDmja4iIEljb249IklucHV0Rmx1aWQiIC8+DQogICAgICAgICAgICA8Q21kIElEPSI5MTA0IiBCb3VuZHM9IjEsMiIgTmFtZT0iVmlzaWJsZUFuYWxQc2V1IiBBbGlhcz0i5ouf5Y6L5Yqb5pWw5o2uIiBJY29uPSJJbnB1dEZsdWlkIiAvPg0KICAgICAgICA8L0dyb3VwPg0KDQogICAgICAgIDxHcm91cCBOYW1lPSJIZWxwIiBBbGlhcz0i5biu5YqpIj4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjEwMDAyIiBCb3VuZHM9IjAsMCwyLDEiIE5hbWU9IkhlbHAiIEFsaWFzPSLluK7liqkoSCkiIEljb249IkhlbHAiIC8+DQogICAgICAgIDwvR3JvdXA+DQoNCiAgICA8L1RhYj4NCg0KDQogICAgPFRhYiBJRD0iMiIgTmFtZT0iRGF0YU1hbmFnZXIiIEFsaWFzPSLmlbDmja7nrqHnkIYoRCkiID4NCg0KICAgICAgICA8R3JvdXAgTmFtZT0iRGF0YU1hbmFnZXIiIEFsaWFzPSLkupUiPg0KICAgICAgICAgICAgPENtZCBJRD0iMTA5OSIgQm91bmRzPSIwLDAsMiwxIiBOYW1lPSJXZWxsTmV3IiBBbGlhcz0i5paw5bu65LqVKFcpIiBJY29uPSJXZWxsTmV3IiAvPg0KICAgICAgICA8L0dyb3VwPg0KDQogICAgICAgIDxHcm91cCBOYW1lPSJEYXRhTWFuYWdlciIgQWxpYXM9IuWfuuehgOaVsOaNriI+DQogICAgICAgICAgICA8Q21kIElEPSIyMDAxIiBCb3VuZHM9IjAsMCwyLDEiIE5hbWU9IkRhdGFXZWxsQmFzaWMiIEFsaWFzPSLkupXln7rnoYDmlbDmja4oQikiIEV4dEluZm89IkJfV0VMTCIgSWNvbj0iQmFzaWNEYXRhIiAvPg0KICAgICAgICAgICAgPENtZCBJRD0iMjAwMiIgQm91bmRzPSIwLDEsMiwxIiBOYW1lPSJEYXRhTGF5ZXIiIEFsaWFzPSLlnLDotKjliIblsYLmlbDmja4oTCkiIEV4dEluZm89IkJfTEFZRVIiIEljb249IkxheWVyRGF0YSIgLz4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjIwMDMiIEJvdW5kcz0iMCwyLDIsMSIgTmFtZT0iRGF0YVJlcyIgQWxpYXM9IuWCqOWxguaVsOaNrihSKSIgRXh0SW5mbz0iUF9EQVRBX1JFUyIgSWNvbj0iUmVzRGF0YSIgLz4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjIwMDQiIEJvdW5kcz0iMCwzLDIsMSIgTmFtZT0iRGF0YUZsdSIgQWxpYXM9Iua1geS9k+aAp+i0qOaVsOaNrihGKSIgRXh0SW5mbz0iUF9EQVRBX0ZMVUlEIiBJY29uPSJGbHVpZFByb3BlcnR5IiAvPg0KICAgICAgICA8L0dyb3VwPg0KDQogICAgICAgIDxHcm91cCBOYW1lPSJEYXRhTWFuYWdlciIgQWxpYXM9IuWOi+WKm+a1gemHjyI+DQogICAgICAgICAgICA8Q21kIElEPSIyMDA1IiBCb3VuZHM9IjAsMCwyLDEiIE5hbWU9IkRhdGFSYXRlIiBBbGlhcz0i5rWB6YeP5pWw5o2uKFEpIiBFeHRJbmZvPSJQX0RBVEFfR0FVR0VfRiIgSWNvbj0iUmF0ZURhdGEiIC8+DQogICAgICAgICAgICA8Q21kIElEPSIyMDA2IiBCb3VuZHM9IjAsMSwyLDEiIE5hbWU9IkRhdGFQcmUiIEFsaWFzPSLljovlipvmlbDmja4oUCkiIEV4dEluZm89IlBfREFUQV9HQVVHRV9QIiBJY29uPSJQcmVzc3VyZURhdGEiIC8+DQogICAgICAgIDwvR3JvdXA+DQoNCiAgICAgICAgPEdyb3VwIE5hbWU9IkdYNiIgQWxpYXM9IuW5s+WPsOS6kumAmiI+DQogICAgICAgICAgICA8Q21kIElEPSIyMDA3IiBCb3VuZHM9IjAsMCwyLDEiIE5hbWU9Ikd4NkNvbm5lY3RTZXJ2ZXIiIEFsaWFzPSJHWDbkupLpgJooQykiIEljb249Ikd4NkNvbm5lY3RTZXJ2ZXIiIC8+DQogICAgICAgICAgICA8Q21kIElEPSIyMDA4IiBCb3VuZHM9IjAsMSwyLDEiIE5hbWU9Ikd4NkdldFRhc2tzIiBBbGlhcz0i6I635Y+W5Lu75YqhKEQpIiBJY29uPSJHeDZHZXRUYXNrcyIgIFZpc2libGU9IjAiLz4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjIwMDkiIEJvdW5kcz0iMCwyLDIsMSIgTmFtZT0iR3g2VXBkYXRlVGFza3MiIEFsaWFzPSLmm7TmlrDnirbmgIEoVSkiIEljb249Ikd4NlVwZGF0ZVRhc2tzIiAgVmlzaWJsZT0iMCIvPg0KICAgICAgICA8L0dyb3VwPg0KDQogICAgPC9UYWI+DQoNCiAgICA8VGFiIElEPSIyMDEiIE5hbWU9IkRhdGFFZGl0IiBBbGlhcz0i5pWw5o2u57yW6L6RKEUpIiA+DQogICAgICAgIDxHcm91cCBOYW1lPSJEYXRhRWRpdCIgQWxpYXM9IuaVsOaNrue8lui+kSI+DQogICAgICAgICAgICA8Q21kIElEPSIzMDAxIiBCb3VuZHM9IjAsMCwyLDEiIE5hbWU9IkFuYWxGbHUiIEFsaWFzPSLmtYHph4/nvJbovpEiIEV4dEluZm89IkYiIE1kaVR5cGU9IkRhdGFFZGl0IiBJY29uPSJSYXRlRGF0YSIgLz4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjMwMDIiIEJvdW5kcz0iMCwxLDIsMSIgTmFtZT0iQW5hbFByZXNzIiBBbGlhcz0i5Y6L5Yqb57yW6L6RIiBFeHRJbmZvPSJQIiBNZGlUeXBlPSJEYXRhRWRpdCIgSWNvbj0iUHJlc3N1cmVEYXRhIiAvPg0KICAgICAgICAgICAgPENtZCBJRD0iMzMwMyIgQm91bmRzPSIwLDIsMiwxIiBOYW1lPSJBbmFsUHJlQ29uIiBBbGlhcz0i5Y6L5Yqb5oqY566XIiBFeHRJbmZvPSJQIiBNZGlUeXBlPSJEYXRhRWRpdCIgSWNvbj0iQW5hbFByZUNvbiIgLz4NCiAgICAgICAgPC9Hcm91cD4NCiAgICA8L1RhYj4NCg0KICAgIDxUYWIgSUQ9IjMiIE5hbWU9IkFuYWx5dGljYWxUZXN0IiBBbGlhcz0i5aSE55CG6Kej6YeKKEEpIiA+DQoNCiAgICAgICAgPEdyb3VwIE5hbWU9IkFuYWxFZGl0IiBBbGlhcz0i5YiG5p6Q566h55CGIj4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjMwMDYiIEJvdW5kcz0iMCwwIiBOYW1lPSJBbmFsTmV3IiBBbGlhcz0i5paw5bu65YiG5p6QIiBJY29uPSJKb2JOZXciIC8+DQogICAgICAgICAgICA8Q21kIElEPSIzMDA3IiBCb3VuZHM9IjEsMCIgTmFtZT0iQW5hbEVkaXQiIEFsaWFzPSLliIbmnpDnrqHnkIYiIEljb249IkpvYkVkaXQiIC8+DQogICAgICAgIDwvR3JvdXA+DQoNCiAgICAgICAgPEdyb3VwIE5hbWU9IlNlZ0FuYWwiIEFsaWFzPSLmtYHliqjmrrXliIbmnpAiPg0KICAgICAgICAgICAgPENtZCBJRD0iMzAwMyIgQm91bmRzPSIwLDAsMiwxIiBOYW1lPSJBbmFsUEYiIEFsaWFzPSLmtYHliqjmrrXpgInmi6kiIEV4dEluZm89IlBGIiBJY29uPSJQRiIgLz4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjMwMDQiIEJvdW5kcz0iMCwxLDIsMSIgTmFtZT0iQW5hbEZsb3dTZWciIEFsaWFzPSLmtYHliqjmrrXliIbmnpAiIEljb249IkZsb3dQZXJpb2QiIC8+DQogICAgICAgICAgICA8Q21kIElEPSIzMDA1IiBCb3VuZHM9IjAsMiwyLDEiIE5hbWU9IkFuYWxPdGhlcnMiIEFsaWFzPSLnibnlvoHnur/liIbmnpAiIFR5cGU9IjEiICBWaXNpYmxlPSIwIiBFeHROYW1lcz0iQ2hhcnRUO0NoYXJ0U3FydFQ7Q2hhcnQyNVQ7Q2hhcnQ1VCIgRXh0SW5mbz0iQ2hhcnQgVDtDaGFydCBTcXJ0KFQpO0NoYXJ0IDAuMjVUO0NoYXJ0IC0wLjVUIiBJY29uPSJBc3Npc0FuYWwiIC8+DQogICAgICAgICAgICA8Q21kIElEPSIzMDEwIiBCb3VuZHM9IjAsMywyLDEiIE5hbWU9IkFuYWxXbmRNIiBBbGlhcz0i5rWB5Yqo5q6156qX5Y+jIiBUeXBlPSIxIiBJY29uPSJBbmFsV25kTSIgLz4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjMwMDkiIEJvdW5kcz0iMCw0LDIsMSIgTmFtZT0iQW5hbERpc3RyaSIgQWxpYXM9IuWIhuW4g+WbviIgVHlwZT0iMSIgRXh0TmFtZXM9IkNoYXJ0RGVuO0NoYXJ0VmlzIiBFeHRJbmZvPSLmtZPluqbliIbluIPlm7476buP5bqm5YiG5biD5Zu+IiBJY29uPSJBbmFsRGlzdHJpIiAvPg0KICAgICAgICA8L0dyb3VwPg0KDQogICAgICAgIDxHcm91cCBOYW1lPSJEYXRhRml0IiBBbGlhcz0i6Kej6YeK5ouf5ZCIIj4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjMxMDUiIEJvdW5kcz0iMCwwLDIsMSIgTmFtZT0iRGVjb252b2x2IiBBbGlhcz0i5Y+N6KS256evKERlYnVnKSIgSWNvbj0iRGVjb252b2x2IiAvPg0KDQogICAgICAgICAgICA8Q21kIElEPSIzMTAxIiBCb3VuZHM9IjAsMSwyLDEiIE5hbWU9IkZpdE1vZGVsIiBBbGlhcz0i6Kej5p6Q6KejIiBJY29uPSJGaXRNb2RlbCIgLz4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjMxMDQiIEJvdW5kcz0iMCwyLDIsMSIgTmFtZT0ibm1GaXRNb2RlbCIgQWxpYXM9IuaVsOWAvOinoyIgSWNvbj0iRml0TW9kZWwiIC8+DQogICAgICAgICAgICA8Q21kIElEPSIzMTAyIiBCb3VuZHM9IjAsMywyLDEiIE5hbWU9IkF1dG9GaXQiIEFsaWFzPSLoh6rliqjmi5/lkIgiIEljb249IkF1dG9GaXQiIC8+DQogICAgICAgICAgICA8Q21kIElEPSIzMTAzIiBCb3VuZHM9IjAsNCwyLDEiIE5hbWU9IlBsYXRlRml0IiBBbGlhcz0i5pWP5oSf5oCn5YiG5p6QIiBJY29uPSJQbGF0ZUZpdCIgLz4NCiAgICAgICA8L0dyb3VwPg0KDQogICAgICAgIDxHcm91cCBOYW1lPSJBSVRlc3QiIEFsaWFzPSLmmbrog73or5XkupUiPg0KICAgICAgICAgICAgPENtZCBJRD0iMzkwMSIgQm91bmRzPSIwLDAsMiwxIiBOYW1lPSJNb2RlbENsYXNzaWZ5IiBBbGlhcz0i5qih5Z6L6K+G5YirIiBJY29uPSJNb2RlbENsYXNzaWZ5IiAvPg0KICAgICAgICA8L0dyb3VwPg0KDQogICAgICAgIDxHcm91cCBOYW1lPSJSZWxhdGl2ZVRvb2wiIEFsaWFzPSLnm7jlhbPlt6XlhbciPg0KICAgICAgICAgICAgPENtZCBJRD0iMzIwMSIgQm91bmRzPSIwLDAsMiwxIiBOYW1lPSJUaW1lIiBBbGlhcz0i5pe26Ze0IiBJY29uPSJUaW1lIiAvPg0KICAgICAgICAgICAgPENtZCBJRD0iMzIwMiIgQm91bmRzPSIwLDEiIE5hbWU9IlNob3dNb2RlbENoYXJ0cyIgQWxpYXM9IuaooeWei+ekuuaEjyIgSWNvbj0iU2hvd01vZGVsQ2hhcnRzIiAvPg0KICAgICAgICAgICAgPENtZCBJRD0iMzIwNCIgQm91bmRzPSIxLDEiIE5hbWU9IlNhdmVBc01vZGVsU2tldGNoIiBBbGlhcz0i5a2Y5Li656S65oSPIiBJY29uPSJTYXZlQXNNb2RlbFNrZXRjaCIgLz4NCg0KICAgICAgIDwvR3JvdXA+DQoNCjwhLS0gICAgICAgICAgICAgICAgICAgIDxDbWQgSUQ9IjMyMDMiIEJvdW5kcz0iMCwxIiBOYW1lPSJTaG93TW9kZWxTa2V0Y2giIEFsaWFzPSLnkIborroiIEljb249IlNob3dNb2RlbFNrZXRjaCIgLz48R3JvdXAgTmFtZT0iVG9vbFMiIEFsaWFzPSLmianlsZXlip/og70iPg0KICAgICAgICAgICAgPENtZCBJRD0iOTgwMSIgQm91bmRzPSIwLDAsMiwxIiBOYW1lPSJGbG93VG9TIiBBbGlhcz0i5rWB6YeP5Y+Y6KGo55quIiBJY29uPSJGbG93VG9TIiBWaXNpYmxlPSIwIiAvPg0KICAgICAgICAgICAgPENtZCBJRD0iOTIwMSIgQm91bmRzPSIwLDEsMiwxIiBOYW1lPSJNaXhWaXNjb3NpdHkiIEFsaWFzPSLmt7flkIjpu4/luqYiIEljb249Ik1peFZpc2Nvc2l0eSIgVmlzaWJsZT0iMCIgLz4NCiAgICAgICA8L0dyb3VwPi0tPg0KDQogICAgICAgIDxHcm91cCBOYW1lPSJKb2JzIiBBbGlhcz0i5oiQ5p6c566h55CGIj4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjEwMDgiIEJvdW5kcz0iMCwwIiBOYW1lPSJSc3RMb2FkIiBBbGlhcz0i5Yqg6L295oiQ5p6cIiBJY29uPSJMb2FkSm9icyIgLz4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjEwMDkiIEJvdW5kcz0iMSwwIiBOYW1lPSJSc3RTYXZlIiBUeXBlPSIxIiBFeHROYW1lcz0iUnN0U2F2ZUN1cjtSc3RTYXZlQWxsIiBFeHRJbmZvPSLkv53lrZjlvZPliY3miJDmnpw75L+d5a2Y5omA5pyJ5oiQ5p6cIiBBbGlhcz0i5L+d5a2Y5oiQ5p6cIiBJY29uPSJTYXZlSm9icyIgLz4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjEwMTEiIEJvdW5kcz0iMCwxLDIsMSIgTmFtZT0iVG9OdW1lcmljYWwiIEFsaWFzPSJUby3mlbDlgLwiIEljb249IkxvYWRKb2JzIiBWaXNpYmxlPSIwIiAvPg0KICAgICAgICA8L0dyb3VwPg0KDQogICAgICAgIDxHcm91cCBOYW1lPSJXaW5kb3ciIEFsaWFzPSLnqpflj6PmmL7npLoiPg0KICAgICAgICAgICAgPENtZCBJRD0iOTAwMiIgQm91bmRzPSIwLDAiIE5hbWU9IlZpc2libGVNb2RlbHMiIEFsaWFzPSLmqKHlnovnqpflj6MiIEljb249IlZpc2libGVNb2RlbHMiIC8+DQogICAgICAgICAgICA8Q21kIElEPSI5MDAzIiBCb3VuZHM9IjEsMCIgTmFtZT0iVmlzaWJsZVBhcmFtZXRlcnMiIEFsaWFzPSLlj4LmlbDnqpflj6MiIEljb249IlZpc2libGVQYXJhbWV0ZXJzIiAvPg0KICAgICAgICAgICAgPENtZCBJRD0iOTEwMSIgQm91bmRzPSIwLDEiIE5hbWU9IlZpc2libGVBbmFsQmFzaWMiIEFsaWFzPSLln7rnoYDkv6Hmga8iIEljb249IklucHV0QmFzaWMiIC8+DQogICAgICAgICAgICA8Q21kIElEPSI5MTAyIiBCb3VuZHM9IjEsMSIgTmFtZT0iVmlzaWJsZUFuYWxQVlQiIEFsaWFzPSJQVlTmlbDmja4iIEljb249IklucHV0Rmx1aWQiIC8+DQogICAgICAgICAgICA8Q21kIElEPSI5MTAzIiBCb3VuZHM9IjAsMiIgTmFtZT0iVmlzaWJsZUFuYWxEaWZmIiBBbGlhcz0iRElGRuaVsOaNriIgSWNvbj0iSW5wdXRGbHVpZCIgLz4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjkxMDQiIEJvdW5kcz0iMSwyIiBOYW1lPSJWaXNpYmxlQW5hbFBzZXUiIEFsaWFzPSLmi5/ljovlipvmlbDmja4iIEljb249IklucHV0Rmx1aWQiIC8+DQogICAgICAgIDwvR3JvdXA+DQogICAgPC9UYWI+DQoNCiAgICA8VGFiIElEPSI1IiBOYW1lPSJOdW1lcmljYWxUZXN0IiBBbGlhcz0i5pWw5YC85bu65qihKE4pIiA+DQogICAgICAgIDxHcm91cCBOYW1lPSJObU1hbmFnZXIiIEFsaWFzPSLliIbmnpDnrqHnkIYiIFZpc2libGU9IjAiPg0KICAgICAgICAgICAgPENtZCBJRD0iNTAwMSIgQm91bmRzPSIwLDAsMiwxIiBOYW1lPSJBbmFsTmV3IiBBbGlhcz0i5Li05pe25rWL6K+VMSIgSWNvbj0iUHJlcGFyZUdyaWQiIFZpc2libGU9IjAiIC8+DQogICAgICAgICAgICA8Q21kIElEPSI1MDAyIiBCb3VuZHM9IjAsMSwyLDEiIE5hbWU9IlByb3BlcnR5TG9hZCIgQWxpYXM9IuS4tOaXtua1i+ivlTIiIEljb249IlByZXBhcmVHcmlkIiAgVmlzaWJsZT0iMCIvPg0KICAgICAgICA8L0dyb3VwPg0KDQogICAgICAgIDxHcm91cCBOYW1lPSJObUFuYWxDaGFuZ2UiIEFsaWFzPSLliIbmnpDliIfmjaIiPg0KICAgICAgICAgICAgPENtZCBJRD0iNTEzMCIgQm91bmRzPSIwLDAiIE5hbWU9Ik5tQW5hbENoYW5nZSIgQWxpYXM9IuWIhuaekOWIh+aNoiIgSWNvbj0iSm9iRWRpdCIgLz4NCiAgICAgICA8L0dyb3VwPg0KDQogICAgICAgIDxHcm91cCBOYW1lPSJOdEluaXQiIEFsaWFzPSLmqKHlnovlh6DkvZXlr7nosaEiPg0KICAgICAgICAgICAgPENtZCBJRD0iNTExOCIgQm91bmRzPSIwLDAsMiwxIiBOYW1lPSJObU1hcCIgQWxpYXM9Ik1hcCIgSWNvbj0iTm1JbWFnZSIgLz4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjUxMTkiIEJvdW5kcz0iMCwxLDIsMSIgTmFtZT0iTm1VbmxvY2tlZCIgQWxpYXM9IumUgeWumiIgSWNvbj0iTm1VbmxvY2tlZCIgLz4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjUxMDIiIEJvdW5kcz0iMCwyLDIsMSIgTmFtZT0iTm1JbWFnZSIgQWxpYXM9IuayueiXj+WcsOWbviIgSWNvbj0iTm1JbWFnZSIgLz4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjUxMjAiIEJvdW5kcz0iMCwzLDIsMSIgTmFtZT0iTm1NZWFzdXJlIiBBbGlhcz0i5q+U5L6L5bC6IiBJY29uPSJObU1lYXN1cmUiIC8+DQogICAgICAgICAgICA8Q21kIElEPSI1MTAzIiBCb3VuZHM9IjAsNCwyLDEiIE5hbWU9Ik5tUG9seWdvbiIgQWxpYXM9IuWkmui+ueW9oui+ueeVjCIgSWNvbj0iTm1Qb2x5Z29uIiAvPg0KICAgICAgICAgICAgPENtZCBJRD0iNTEwNCIgQm91bmRzPSIwLDUiIE5hbWU9Ik5tUG9seWdvbiIgQWxpYXM9IuefqeW9oui+ueeVjCIgSWNvbj0iTm1SZWN0YW5nbGUiIC8+DQogICAgICAgICAgICA8Q21kIElEPSI1MTA1IiBCb3VuZHM9IjEsNSIgTmFtZT0iTm1Qb2x5Z29uIiBBbGlhcz0i5ZyG5b2i6L6555WMIiBJY29uPSJObVJvdW5kIiAvPg0KICAgICAgICAgICAgPENtZCBJRD0iNTEwNiIgQm91bmRzPSIwLDYsMiwxIiBOYW1lPSJObUZhdWx0IiBBbGlhcz0i5pat5bGCIiBJY29uPSJObUZhdWx0IiAvPg0KICAgICAgICAgICAgPENtZCBJRD0iNTEwNyIgQm91bmRzPSIwLDciIE5hbWU9Ik5tV2VsbCIgQWxpYXM9IumAieaLqeS6lSIgSWNvbj0iTm1XZWxsIiAvPg0KICAgICAgICAgICAgPENtZCBJRD0iNTEwOCIgQm91bmRzPSIxLDciIE5hbWU9Ik5tV2VsbCIgQWxpYXM9IuaWsOW7uuS6lSIgSWNvbj0iTm1XZWxsIiAvPg0KICAgICAgICAgICAgPENtZCBJRD0iNTEwOSIgQm91bmRzPSIwLDgsMiwxIiBOYW1lPSJObUZhdWx0IiBBbGlhcz0i6KOC57ydIiBJY29uPSJObUZhdWx0IiAvPg0KICAgICAgICAgICAgPENtZCBJRD0iNTExMCIgQm91bmRzPSIwLDkiIE5hbWU9Ik5tTGltaXQiIEFsaWFzPSLljLrln58iIEljb249Ik5tTGltaXQiIC8+DQogICAgICAgICAgICA8Q21kIElEPSI1MTExIiBCb3VuZHM9IjEsOSIgTmFtZT0iTm1SZWdpb24iIEFsaWFzPSLmoIforrDljLrln58iIEljb249Ik5tUmVnaW9uIiAvPg0KICAgICAgICAgICAgPENtZCBJRD0iNTEyMSIgQm91bmRzPSIwLDEwLDIsMSIgTmFtZT0iTm1EZWxldGUiIEFsaWFzPSLliKDpmaQiIEljb249Ik5tRGVsZXRlIiAvPg0KICAgICAgIDwvR3JvdXA+DQoNCiAgICAgICA8R3JvdXAgTmFtZT0iTnRSZXNlcnZvaXIiIEFsaWFzPSLlgqjlsYLnibnlvoEiPgogICAgICAgICAgICA8Q21kIElEPSI1MTEyIiBCb3VuZHM9IjAsMCwyLDEiIE5hbWU9Ik5tR2VvbWV0cnkiIEFsaWFzPSLliIblsYIiIEljb249Ik5tR2VvbWV0cnkiIC8+CiAgICAgICAgICAgIDxDbWQgSUQ9IjUxMTMiIEJvdW5kcz0iMCwxLDIsMSIgTmFtZT0iTm1Qcm9wZXJ0aWVzIiBBbGlhcz0i5YKo5bGC54m55oCnIiBJY29uPSJObVByb3BlcnRpZXMiIC8+CiAgICAgICAgICAgIDxDbWQgSUQ9IjUxMjIiIEJvdW5kcz0iMCwyLDIsMSIgTmFtZT0iTm1ERk4iIEFsaWFzPSJERk4iIEljb249Ik5tREZOIiAvPgogICAgICAgICAgICA8Q21kIElEPSI1MTI2IiBCb3VuZHM9IjAsMywyLDEiIE5hbWU9Ik5tSW50ZXJwb2xhdGlvbiIgQWxpYXM9IuWxnuaAp+aPkuWAvCIgSWNvbj0iTm1JbnRlcnBvbGF0aW9uIiAvPgogICAgICAgPC9Hcm91cD4KDQogICAgICAgPEdyb3VwIE5hbWU9Ik50TW9kZWwiIEFsaWFzPSLmqKHlnovnlJ/miJAiPg0KICAgICAgICAgICAgIDxDbWQgSUQ9IjUxMTQiIEJvdW5kcz0iMCwwLDIsMSIgTmFtZT0iTm1HcmlkIiBBbGlhcz0i572R5qC85YiS5YiGIiBJY29uPSJObUdyaWQiIC8+DQogICAgICAgICAgICAgPENtZCBJRD0iNTExNSIgQm91bmRzPSIwLDEsMiwxIiBOYW1lPSJObUNhY3VsYXRpb24iIEFsaWFzPSLorqHnrpfmsYLop6MiIEljb249IlRpbWUiIC8+DQogICAgICAgICAgICAgPCEtLQ0KICAgICAgICAgICAgIDxDbWQgSUQ9IjUxMTYiIEJvdW5kcz0iMCwyLDIsMSIgTmFtZT0iTm1CYWNrIiBBbGlhcz0i5ZCO5aSE55CGIiBJY29uPSJUaW1lIiAvPg0KICAgICAgICAgICAgIDxDbWQgSUQ9IjUxMTciIEJvdW5kcz0iMCwzLDIsMSIgTmFtZT0iTm1SZXN1bHQiIEFsaWFzPSLnu5PmnpwiIEljb249IkZsb3dQZXJpb2QiIC8+DQogICAgICAgICAgICAgLS0+DQogICAgICAgPC9Hcm91cD4NCg0KICAgICAgICA8R3JvdXAgTmFtZT0iTnRUb29scyIgQWxpYXM9IuW3peWFtyI+DQogICAgICAgICAgICA8Q21kIElEPSI1MTI3IiBCb3VuZHM9IjAsMCIgTmFtZT0iTm1HZW9SZWZlcmVuY2UiIEFsaWFzPSLmqKHlnovlj4LogIPngrnorr7nva4iIEljb249Ik5tR2VvUmVmZXJlbmNlIiAvPg0KICAgICAgICAgICAgPENtZCBJRD0iNTEyOCIgQm91bmRzPSIxLDAiIE5hbWU9Ik5tUG9pbnRlclBvc2l0aW9uIiBBbGlhcz0i5qih5Z6L5L2N572u5pi+56S6IiBJY29uPSJObVBvaW50ZXJQb3NpdGlvbiIgLz4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjUxMjkiIEJvdW5kcz0iMCwxLDIsMSIgTmFtZT0iTm1NZWFzdXJlIiBBbGlhcz0i5qih5Z6L5bC65a+45rWL6YePIiBJY29uPSJObU1lYXN1cmUiIC8+DQogICAgICAgPC9Hcm91cD4NCg0KICAgICAgICA8R3JvdXAgTmFtZT0iTnREaXNwbGF5IiBBbGlhcz0i5pi+56S6Ij4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjUxMjMiIEJvdW5kcz0iMCwwLDIsMSIgTmFtZT0iTm1TaG93IiBBbGlhcz0i5pi+56S6IiBJY29uPSJObVNob3ciIC8+DQogICAgICAgICAgICA8Q21kIElEPSI1MTI0IiBCb3VuZHM9IjAsMSwyLDEiIE5hbWU9Ik5tUHJpbnRQcmV2aWV3IiBBbGlhcz0i5omT5Y2w6aKE6KeIIiBJY29uPSJObVByaW50UHJldmlldyIgLz4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjUxMjUiIEJvdW5kcz0iMCwyLDIsMSIgTmFtZT0iTm1QcmludCIgQWxpYXM9IuaJk+WNsCIgSWNvbj0iTm1QcmludCIgLz4NCiAgICAgICA8L0dyb3VwPg0KDQogICAgICAgIDxHcm91cCBOYW1lPSJXaW5kb3ciIEFsaWFzPSLnqpflj6PmmL7npLoiICBWaXNpYmxlPSIwIj4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjkwMDIiIEJvdW5kcz0iMCwwIiBOYW1lPSJWaXNpYmxlTW9kZWxzIiBBbGlhcz0i5qih5Z6L56qX5Y+jIiBJY29uPSJWaXNpYmxlTW9kZWxzIiAgVmlzaWJsZT0iMCIvPg0KICAgICAgICAgICAgPENtZCBJRD0iOTAwMyIgQm91bmRzPSIxLDAiIE5hbWU9IlZpc2libGVQYXJhbWV0ZXJzIiBBbGlhcz0i5Y+C5pWw56qX5Y+jIiBJY29uPSJWaXNpYmxlUGFyYW1ldGVycyIgIFZpc2libGU9IjAiLz4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjkxMDEiIEJvdW5kcz0iMCwxIiBOYW1lPSJWaXNpYmxlQW5hbEJhc2ljIiBBbGlhcz0i5Z+656GA5L+h5oGvIiBJY29uPSJJbnB1dEJhc2ljIiAvPg0KICAgICAgICAgICAgPENtZCBJRD0iOTEwMiIgQm91bmRzPSIxLDEiIE5hbWU9IlZpc2libGVBbmFsUFZUIiBBbGlhcz0iUFZU5pWw5o2uIiBJY29uPSJJbnB1dEZsdWlkIiAvPg0KICAgICAgICAgICAgPENtZCBJRD0iOTEwMyIgQm91bmRzPSIwLDIiIE5hbWU9IlZpc2libGVBbmFsRGlmZiIgQWxpYXM9IkRJRkbmlbDmja4iIEljb249IklucHV0Rmx1aWQiIC8+DQogICAgICAgICAgICA8Q21kIElEPSI5MTA0IiBCb3VuZHM9IjEsMiIgTmFtZT0iVmlzaWJsZUFuYWxQc2V1IiBBbGlhcz0i5ouf5Y6L5Yqb5pWw5o2uIiBJY29uPSJJbnB1dEZsdWlkIiAvPg0KICAgICAgICA8L0dyb3VwPg0KDQogICAgICAgIDxHcm91cCBOYW1lPSJObURlYnVnIiBBbGlhcz0i5qGG5p625rWL6K+VKERlYnVnKSI+DQogICAgICAgICAgICA8Q21kIElEPSI1OTk5IiBCb3VuZHM9IjAsMCwyLDEiIE5hbWU9Ik5tRGVidWciIEFsaWFzPSLmoYbmnrbku6PnoIHosIPor5UiIEljb249IlByZXBhcmVHcmlkIiAvPg0KICAgICAgICA8L0dyb3VwPg0KDQoNCiAgICA8L1RhYj4NCg0KICAgIDxUYWIgSUQ9IjQiIE5hbWU9Ik1pbmlGcmFjIiBBbGlhcz0i5bCP5Z6L5Y6L6KOCKEYpKERlYnVnKSIgPg0KDQogICAgICAgIDxHcm91cCBOYW1lPSJBbmFsRWRpdCIgQWxpYXM9IuWIhuaekOeuoeeQhiI+DQogICAgICAgICAgICA8Q21kIElEPSIzMDA2IiBCb3VuZHM9IjAsMCIgTmFtZT0iQW5hbE5ldyIgQWxpYXM9IuaWsOW7uuWIhuaekCIgSWNvbj0iSm9iTmV3IiAvPg0KICAgICAgICAgICAgPENtZCBJRD0iMzAwNyIgQm91bmRzPSIxLDAiIE5hbWU9IkFuYWxFZGl0IiBBbGlhcz0i5YiG5p6Q566h55CGIiBJY29uPSJKb2JFZGl0IiAvPg0KICAgICAgICA8L0dyb3VwPg0KDQogICAgICAgIDxHcm91cCBOYW1lPSJQQSIgQWxpYXM9IuWOi+mZjeWIhuaekCI+DQogICAgICAgICAgICA8Q21kIElEPSI0MDAyIiBCb3VuZHM9IjAsMCwzLDEiIE5hbWU9Ik1pbmlGckFuYWxQQSIgQWxpYXM9IuWOi+mZjeWHhuWkhyIgRXh0SW5mbz0iUEYiIEljb249IlBGIiAvPg0KICAgICAgICAgICAgPENtZCBJRD0iNDAwMyIgQm91bmRzPSIwLDEsMywxIiBOYW1lPSJNaW5pRnJQQSIgQWxpYXM9IuWOi+mZjeWIhuaekCIgSWNvbj0iRmxvd1BlcmlvZCIgLz4NCg0KICAgICAgICAgICAgPENtZCBJRD0iNDAwNCIgQm91bmRzPSIwLDIsMywxIiBOYW1lPSJDYWxTdWRkZW5TdG9wUCIgQWxpYXM9IueerOaXtuWBnOazteWOi+WKmyIgSWNvbj0iUnVuRXgiIC8+DQogICAgICAgICAgICA8Q21kIElEPSI0MDA1IiBCb3VuZHM9IjAsMyIgTmFtZT0iQ2FsR0Z1bmN0aW9uIiBBbGlhcz0iR+WHveaVsCIgSWNvbj0iUnVuT3RoZXIiIC8+DQogICAgICAgICAgICA8Q21kIElEPSI0MDA2IiBCb3VuZHM9IjEsMyIgTmFtZT0iQ2FsU3FydFQiIEFsaWFzPSLml7bpl7TlubPmlrnmoLkiIEljb249IlJ1bk90aGVyIiAvPg0KICAgICAgICAgICAgPENtZCBJRD0iNDAwNyIgQm91bmRzPSIyLDMiIE5hbWU9IkNhbExvZ0xvZyIgQWxpYXM9IuWPjOWvueaVsCIgSWNvbj0iUnVuT3RoZXIiIC8+DQogICAgICAgIDwvR3JvdXA+DQoNCg0KICAgICAgICA8R3JvdXAgTmFtZT0iRkEiIEFsaWFzPSLmjpLph4/liIbmnpAiPg0KICAgICAgICAgICAgPENtZCBJRD0iNDEwMiIgQm91bmRzPSIwLDAsMiwxIiBOYW1lPSJNaW5pRnJBbmFsRkEiIEFsaWFzPSLmjpLph4/lh4blpIciIEV4dEluZm89IklQUiIgSWNvbj0iTWluaUZyQW5hbEZBIiAvPg0KICAgICAgICAgICAgPENtZCBJRD0iNDEwMyIgQm91bmRzPSIwLDEiIE5hbWU9Ik1pbmlGckZBVXAiIEFsaWFzPSLpmLbmoq/ljYciIEljb249IlN0ZXBVcCIgLz4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjQxMDQiIEJvdW5kcz0iMSwxIiBOYW1lPSJNaW5pRnJGQURvd24iIEFsaWFzPSLpmLbmoq/pmY0iIEljb249IlN0ZXBEb3duIiAvPg0KICAgICAgIDwvR3JvdXA+DQoNCiAgICAgICAgPEdyb3VwIE5hbWU9IkpvYnMiIEFsaWFzPSLmiJDmnpznrqHnkIYiICBWaXNpYmxlPSIwIj4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjEwMDgiIEJvdW5kcz0iMCwwIiBOYW1lPSJSc3RMb2FkIiBBbGlhcz0i5Yqg6L295oiQ5p6cIiBJY29uPSJMb2FkSm9icyIgLz4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjEwMDkiIEJvdW5kcz0iMSwwIiBOYW1lPSJSc3RTYXZlIiBUeXBlPSIxIiBFeHROYW1lcz0iUnN0U2F2ZUN1cjtSc3RTYXZlQWxsIiBFeHRJbmZvPSLkv53lrZjlvZPliY3miJDmnpw75L+d5a2Y5omA5pyJ5oiQ5p6cIiBBbGlhcz0i5L+d5a2Y5oiQ5p6cIiBJY29uPSJTYXZlSm9icyIgLz4NCiAgICAgICAgPC9Hcm91cD4NCg0KICAgICAgICA8R3JvdXAgTmFtZT0iV2luZG93IiBBbGlhcz0i56qX5Y+j5pi+56S6IiAgVmlzaWJsZT0iMCI+DQogICAgICAgICAgICA8Q21kIElEPSI5MDAyIiBCb3VuZHM9IjAsMCIgTmFtZT0iVmlzaWJsZU1vZGVscyIgQWxpYXM9IuaooeWei+eql+WPoyIgSWNvbj0iVmlzaWJsZU1vZGVscyIgLz4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjkwMDMiIEJvdW5kcz0iMSwwIiBOYW1lPSJWaXNpYmxlUGFyYW1ldGVycyIgQWxpYXM9IuWPguaVsOeql+WPoyIgSWNvbj0iVmlzaWJsZVBhcmFtZXRlcnMiIC8+DQogICAgICAgICAgICA8Q21kIElEPSI5MTAxIiBCb3VuZHM9IjAsMSIgTmFtZT0iVmlzaWJsZUFuYWxCYXNpYyIgQWxpYXM9IuWfuuehgOS/oeaBryIgSWNvbj0iSW5wdXRCYXNpYyIgLz4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjkxMDIiIEJvdW5kcz0iMSwxIiBOYW1lPSJWaXNpYmxlQW5hbFBWVCIgQWxpYXM9IlBWVOaVsOaNriIgSWNvbj0iSW5wdXRGbHVpZCIgLz4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjkxMDMiIEJvdW5kcz0iMCwyIiBOYW1lPSJWaXNpYmxlQW5hbERpZmYiIEFsaWFzPSJESUZG5pWw5o2uIiBJY29uPSJJbnB1dEZsdWlkIiAvPg0KICAgICAgICAgICAgPENtZCBJRD0iOTEwNCIgQm91bmRzPSIxLDIiIE5hbWU9IlZpc2libGVBbmFsUHNldSIgQWxpYXM9IuaLn+WOi+WKm+aVsOaNriIgSWNvbj0iSW5wdXRGbHVpZCIgLz4NCiAgICAgICAgPC9Hcm91cD4NCg0KICAgIDwvVGFiPg0KDQogICAgPFRhYiBJRD0iNDAxIiBOYW1lPSJXRFQiIEFsaWFzPSLkuqfog73or5XkupUoUCkiID4NCg0KICAgICAgICA8R3JvdXAgTmFtZT0iQW5hbEVkaXQiIEFsaWFzPSLliIbmnpDnrqHnkIYiPg0KICAgICAgICAgICAgPENtZCBJRD0iMzAwNiIgQm91bmRzPSIwLDAiIE5hbWU9IkFuYWxOZXciIEFsaWFzPSLmlrDlu7rliIbmnpAiIEljb249IkpvYk5ldyIgLz4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjMwMDciIEJvdW5kcz0iMSwwIiBOYW1lPSJBbmFsRWRpdCIgQWxpYXM9IuWIhuaekOeuoeeQhiIgSWNvbj0iSm9iRWRpdCIgLz4NCiAgICAgICAgPC9Hcm91cD4NCg0KICAgICAgICA8R3JvdXAgTmFtZT0iSVBSIiBBbGlhcz0iSVBS5YWI5YmN5Y+C6ICDKERlYnVnKSI+DQogICAgICAgICAgICA8Q21kIElEPSI2MDAyIiBCb3VuZHM9IjAsMCwyLDEiIE5hbWU9IklQUkFuYWwiIEFsaWFzPSJJUFLlh4blpIciIEV4dEluZm89IklQUiIgSWNvbj0iSVBSQW5hbCIgLz4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjYwMDMiIEJvdW5kcz0iMCwxLDIsMSIgTmFtZT0iSVBSQ2FsIiBBbGlhcz0iSVBS6K6h566XIiBJY29uPSJJUFJDYWwiIC8+DQogICAgICAgIDwvR3JvdXA+DQoNCiAgICAgICAgPEdyb3VwIE5hbWU9IldkdERhdGFQcmVwcm9jZXNzIiBBbGlhcz0i5pWw5o2u6aKE5aSE55CGIiBWaXNpYmxlPSIwIj4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjYxMDEiIEJvdW5kcz0iMCwwLDIsMSIgTmFtZT0iV2R0RGF0YUFzc24iIEFsaWFzPSLmlbDmja7lvZLkuIDljJYiIEV4dEluZm89IldEVCIgSWNvbj0iSVBSQW5hbCIgIFZpc2libGU9IjAiLz4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjYxMDIiIEJvdW5kcz0iMCwxLDIsMSIgTmFtZT0iV2R0T3RoZXIiIEFsaWFzPSLlhbblroMiIEljb249IldkdE90aGVyIiBWaXNpYmxlPSIwIiAvPg0KICAgICAgICAgICAgPENtZCBJRD0iNjEwMyIgQm91bmRzPSIwLDMsMiwxIiBOYW1lPSJXZHRXTUYiIEFsaWFzPSLkupXnrZLlpJrnm7jmtYEiIEljb249IldkdFdNRiIgIFZpc2libGU9IjAiLz4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjYxMDQiIEJvdW5kcz0iMCw0LDIsMSIgTmFtZT0iV2R0Q2hva2UiIEFsaWFzPSLlmLTmtYEiIEljb249IldkdENob2tlIiAgVmlzaWJsZT0iMCIvPg0KICAgICAgICA8L0dyb3VwPg0KDQogICAgICAgIDxHcm91cCBOYW1lPSJJUFIiIEFsaWFzPSLkuqfog73liIbmnpAiPg0KICAgICAgICAgICAgPENtZCBJRD0iNjIwMSIgQm91bmRzPSIwLDAsMiwxIiBOYW1lPSJXZHRJUFJDYWwiIEV4dEluZm89IldEVCIgQWxpYXM9IuWCqOWxguS6p+iDveiuoeeulyIgSWNvbj0iSVBSQ2FsIiAvPg0KICAgICAgICAgICAgPENtZCBJRD0iNjIwMiIgQm91bmRzPSIwLDEsMiwxIiBOYW1lPSJXZWxsUGR0eSIgQWxpYXM9IuS4gOS9k+WMluS6p+iDvSIgSWNvbj0iV2VsbFBkdHkiICBWaXNpYmxlPSIwIiAvPg0KICAgICAgICAgICAgPENtZCBJRD0iNjIwMyIgQm91bmRzPSIwLDIsMiwxIiBOYW1lPSJXZHRJUFJFeHQiIEFsaWFzPSLkuqfog73or5XkupVb5omp5bGVXSIgSWNvbj0iSVBSRXh0Ii8+DQogICAgICAgICAgICA8Q21kIElEPSI2MjA0IiBCb3VuZHM9IjAsMywyLDEiIE5hbWU9IldkdElQUkFuYWwiIEFsaWFzPSLlgqjlsYLkuqfog73liIbmnpAiIEljb249IklQUkFuYWwiIC8+DQogICAgICAgICAgICA8Q21kIElEPSI2MjA1IiBCb3VuZHM9IjAsNCwyLDEiIE5hbWU9IldlbGxJbnRlZ0FuYWwiIEFsaWFzPSLnu7zlkIjliIbmnpAiIEljb249IldlbGxJbnRlZ0FuYWwiIFZpc2libGU9IjAiIC8+DQogICAgICAgIDwvR3JvdXA+DQoNCiAgICAgICAgPEdyb3VwIE5hbWU9IklQUiIgQWxpYXM9IuS6p+iDveiuoeeulyI+DQogICAgICAgICAgICA8Q21kIElEPSI2MzAxIiBCb3VuZHM9IjAsMCwyLDEiIE5hbWU9IldkdENhbCIgQWxpYXM9IuiuoeeulyIgRXh0SW5mbz0iV0RUIiBJY29uPSJSdW5FeCIgLz4NCiAgICAgICAgPC9Hcm91cD4NCg0KDQogICAgICAgIDxHcm91cCBOYW1lPSJKb2JzIiBBbGlhcz0i5oiQ5p6c566h55CGIj4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjEwMDgiIEJvdW5kcz0iMCwwIiBOYW1lPSJSc3RMb2FkIiBBbGlhcz0i5Yqg6L295oiQ5p6cIiBJY29uPSJMb2FkSm9icyIgLz4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjEwMDkiIEJvdW5kcz0iMSwwIiBOYW1lPSJSc3RTYXZlIiBUeXBlPSIxIiBFeHROYW1lcz0iUnN0U2F2ZUN1cjtSc3RTYXZlQWxsIiBFeHRJbmZvPSLkv53lrZjlvZPliY3miJDmnpw75L+d5a2Y5omA5pyJ5oiQ5p6cIiBBbGlhcz0i5L+d5a2Y5oiQ5p6cIiBJY29uPSJTYXZlSm9icyIgLz4NCiAgICAgICAgPC9Hcm91cD4NCg0KICAgICAgICA8R3JvdXAgTmFtZT0iV2luZG93IiBBbGlhcz0i56qX5Y+j5pi+56S6Ij4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjkwMDIiIEJvdW5kcz0iMCwwIiBOYW1lPSJWaXNpYmxlTW9kZWxzIiBBbGlhcz0i5qih5Z6L56qX5Y+jIiBJY29uPSJWaXNpYmxlTW9kZWxzIiAvPg0KICAgICAgICAgICAgPENtZCBJRD0iOTAwMyIgQm91bmRzPSIxLDAiIE5hbWU9IlZpc2libGVQYXJhbWV0ZXJzIiBBbGlhcz0i5Y+C5pWw56qX5Y+jIiBJY29uPSJWaXNpYmxlUGFyYW1ldGVycyIgLz4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjkxMDEiIEJvdW5kcz0iMCwxIiBOYW1lPSJWaXNpYmxlQW5hbEJhc2ljIiBBbGlhcz0i5Z+656GA5L+h5oGvIiBJY29uPSJJbnB1dEJhc2ljIiAgIFZpc2libGU9IjAiLz4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjkxMDIiIEJvdW5kcz0iMCwxIiBOYW1lPSJWaXNpYmxlQW5hbFBWVCIgQWxpYXM9IlBWVOaVsOaNriIgSWNvbj0iSW5wdXRGbHVpZCIgLz4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjkxMDMiIEJvdW5kcz0iMCwyIiBOYW1lPSJWaXNpYmxlQW5hbERpZmYiIEFsaWFzPSJESUZG5pWw5o2uIiBJY29uPSJJbnB1dEZsdWlkIiAgIFZpc2libGU9IjAiLz4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjkxMDQiIEJvdW5kcz0iMSwxIiBOYW1lPSJWaXNpYmxlQW5hbFBzZXUiIEFsaWFzPSLmi5/ljovlipvmlbDmja4iIEljb249IklucHV0Rmx1aWQiIC8+DQogICAgICAgIDwvR3JvdXA+DQoNCg0KICAgIDwvVGFiPg0KDQogICAgPFRhYiBJRD0iNiIgTmFtZT0iQWR2YW5jZWRGdW5jdGlvbiIgQWxpYXM9IuivleS6leiuvuiuoShYKSIgPg0KDQogICAgICAgIDxHcm91cCBOYW1lPSJEZXNpZ24iIEFsaWFzPSLor5XkupXorr7orqEiPg0KICAgICAgICAgICAgPENtZCBJRD0iNjAwMSIgQm91bmRzPSIwLDAsMiwxIiBOYW1lPSJUZXN0RGVzaWduIiBBbGlhcz0i6K+V5LqV6K6+6K6hIiBJY29uPSJUZXN0RGVzaWduIiBFeHRJbmZvPSJQRiIgIC8+DQogICAgICAgICAgICA8Q21kIElEPSIzMDA0IiBCb3VuZHM9IjAsMSwyLDEiIE5hbWU9IkFuYWxGbG93U2VnIiBBbGlhcz0i5rWB5Yqo5q615YiG5p6QIiBJY29uPSJGbG93UGVyaW9kIiAvPg0KICAgICAgICAgICAgPENtZCBJRD0iMzAwNSIgQm91bmRzPSIwLDIsMiwxIiBOYW1lPSJBbmFsT3RoZXJzIiBBbGlhcz0i54m55b6B5q615YiG5p6QIiBUeXBlPSIxIiBFeHROYW1lcz0iQ2hhcnRUO0NoYXJ0U3FydFQ7Q2hhcnQyNVQ7Q2hhcnQ1VCIgRXh0SW5mbz0iQ2hhcnQgVDtDaGFydCBTcXJ0KFQpO0NoYXJ0IDAuMjVUO0NoYXJ0IC0wLjVUIiBJY29uPSJBc3Npc0FuYWwiIC8+DQogICAgICAgICAgICA8Q21kIElEPSIzMDA5IiBCb3VuZHM9IjAsMywyLDEiIE5hbWU9IkFuYWxEaXN0cmkiIEFsaWFzPSLliIbluIPlm74iIFR5cGU9IjEiIEV4dE5hbWVzPSJDaGFydERlbjtDaGFydFZpcyIgRXh0SW5mbz0i5rWT5bqm5YiG5biD5Zu+O+m7j+W6puWIhuW4g+WbviIgSWNvbj0iQW5hbERpc3RyaSIgLz4NCg0KICAgICAgICA8L0dyb3VwPg0KDQogICAgICAgIDxHcm91cCBOYW1lPSJEYXRhRml0IiBBbGlhcz0i6Kej6YeK5ouf5ZCIIj4NCg0KICAgICAgICAgICAgPENtZCBJRD0iMzEwNSIgQm91bmRzPSIwLDAsMiwxIiBOYW1lPSJEZWNvbnZvbHYiIEFsaWFzPSLlj43opLbnp68iIEljb249IkRlY29udm9sdiIgVmlzaWJsZT0iMCIvPg0KICAgICAgICAgICAgPENtZCBJRD0iMzEwMSIgQm91bmRzPSIwLDEsMiwxIiBOYW1lPSJGaXRNb2RlbCIgQWxpYXM9Iuino+aekOinoyIgSWNvbj0iRml0TW9kZWwiIC8+DQogICAgICAgICAgICA8Q21kIElEPSIzMTA0IiBCb3VuZHM9IjAsMiwyLDEiIE5hbWU9Im5tRml0TW9kZWwiIEFsaWFzPSLmlbDlgLzop6MiIEljb249IkZpdE1vZGVsIiAvPg0KICAgICAgICAgICAgPENtZCBJRD0iMzEwMiIgQm91bmRzPSIwLDMsMiwxIiBOYW1lPSJBdXRvRml0IiBBbGlhcz0i6Ieq5Yqo5ouf5ZCIIiBJY29uPSJBdXRvRml0IiAvPg0KICAgICAgICAgICAgPENtZCBJRD0iMzEwMyIgQm91bmRzPSIwLDQsMiwxIiBOYW1lPSJQbGF0ZUZpdCIgQWxpYXM9IuaVj+aEn+aAp+WIhuaekCIgSWNvbj0iUGxhdGVGaXQiIC8+DQogICAgICAgPC9Hcm91cD4NCg0KICAgICAgICA8R3JvdXAgTmFtZT0iQUlUZXN0IiBBbGlhcz0i5pm66IO96K+V5LqVKERlYnVnKSI+DQogICAgICAgICAgICA8Q21kIElEPSIzOTAxIiBCb3VuZHM9IjAsMCwyLDEiIE5hbWU9Ik1vZGVsQ2xhc3NpZnkiIEFsaWFzPSLmqKHlnovor4bliKsiIEljb249Ik1vZGVsQ2xhc3NpZnkiIC8+DQogICAgICAgIDwvR3JvdXA+DQoNCiAgICAgICAgPEdyb3VwIE5hbWU9IlJlbGF0aXZlVG9vbCIgQWxpYXM9IuebuOWFs+W3peWFtyIgVmlzaWJsZT0iMCI+DQogICAgICAgICAgICA8Q21kIElEPSIzMjAxIiBCb3VuZHM9IjAsMCIgTmFtZT0iVGltZSIgQWxpYXM9IuaXtumXtCIgSWNvbj0iVGltZSIgLz4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjMyMDIiIEJvdW5kcz0iMSwwIiBOYW1lPSJTaG93TW9kZWxDaGFydHMiIEFsaWFzPSLmqKHlnosiIEljb249IlNob3dNb2RlbENoYXJ0cyIgLz4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjMyMDMiIEJvdW5kcz0iMCwxIiBOYW1lPSJTaG93TW9kZWxTa2V0Y2giIEFsaWFzPSLnkIborroiIEljb249IlNob3dNb2RlbFNrZXRjaCIgLz4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjMyMDQiIEJvdW5kcz0iMSwxIiBOYW1lPSJTYXZlQXNNb2RlbFNrZXRjaCIgQWxpYXM9IuWtmOS4uuekuuaEjyIgSWNvbj0iU2F2ZUFzTW9kZWxTa2V0Y2giIC8+ICAgICAgICAgICAgDQogICAgICAgPC9Hcm91cD4NCg0KICAgICAgICA8R3JvdXAgTmFtZT0iVG9vbFMiIEFsaWFzPSLmianlsZXlip/og70iICBWaXNpYmxlPSIwIj4NCiAgICAgICAgICAgIDxDbWQgSUQ9Ijk4MDEiIEJvdW5kcz0iMCwwLDIsMSIgTmFtZT0iRmxvd1RvUyIgQWxpYXM9Iua1gemHj+WPmOihqOeariIgSWNvbj0iRmxvd1RvUyIgLz4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjkyMDEiIEJvdW5kcz0iMCwxLDIsMSIgTmFtZT0iTWl4VmlzY29zaXR5IiBBbGlhcz0i5re35ZCI6buP5bqmIiBJY29uPSJNaXhWaXNjb3NpdHkiIC8+DQogICAgICAgPC9Hcm91cD4NCg0KICAgICAgICA8R3JvdXAgTmFtZT0iSm9icyIgQWxpYXM9IuaIkOaenOeuoeeQhiIgVmlzaWJsZT0iMCI+DQogICAgICAgICAgICA8Q21kIElEPSIxMDA4IiBCb3VuZHM9IjAsMCIgTmFtZT0iUnN0TG9hZCIgQWxpYXM9IuWKoOi9veaIkOaenCIgSWNvbj0iTG9hZEpvYnMiIC8+DQogICAgICAgICAgICA8Q21kIElEPSIxMDA5IiBCb3VuZHM9IjEsMCIgTmFtZT0iUnN0U2F2ZSIgVHlwZT0iMSIgRXh0TmFtZXM9IlJzdFNhdmVDdXI7UnN0U2F2ZUFsbCIgRXh0SW5mbz0i5L+d5a2Y5b2T5YmN5oiQ5p6cO+S/neWtmOaJgOacieaIkOaenCIgQWxpYXM9IuS/neWtmOaIkOaenCIgSWNvbj0iU2F2ZUpvYnMiIC8+DQogICAgICAgIDwvR3JvdXA+DQoNCiAgICAgICAgPEdyb3VwIE5hbWU9IldpbmRvdyIgQWxpYXM9Iueql+WPo+aYvuekuiIgVmlzaWJsZT0iMCI+DQogICAgICAgICAgICA8Q21kIElEPSI5MDAyIiBCb3VuZHM9IjAsMCIgTmFtZT0iVmlzaWJsZU1vZGVscyIgQWxpYXM9IuaooeWei+eql+WPoyIgSWNvbj0iVmlzaWJsZU1vZGVscyIgLz4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjkwMDMiIEJvdW5kcz0iMSwwIiBOYW1lPSJWaXNpYmxlUGFyYW1ldGVycyIgQWxpYXM9IuWPguaVsOeql+WPoyIgSWNvbj0iVmlzaWJsZVBhcmFtZXRlcnMiIC8+DQogICAgICAgICAgICA8Q21kIElEPSI5MTAxIiBCb3VuZHM9IjAsMSIgTmFtZT0iVmlzaWJsZUFuYWxCYXNpYyIgQWxpYXM9IuWfuuehgOS/oeaBryIgSWNvbj0iSW5wdXRCYXNpYyIgLz4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjkxMDIiIEJvdW5kcz0iMSwxIiBOYW1lPSJWaXNpYmxlQW5hbFBWVCIgQWxpYXM9IlBWVOaVsOaNriIgSWNvbj0iSW5wdXRGbHVpZCIgLz4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjkxMDMiIEJvdW5kcz0iMCwyIiBOYW1lPSJWaXNpYmxlQW5hbERpZmYiIEFsaWFzPSJESUZG5pWw5o2uIiBJY29uPSJJbnB1dEZsdWlkIiAvPg0KICAgICAgICAgICAgPENtZCBJRD0iOTEwNCIgQm91bmRzPSIxLDIiIE5hbWU9IlZpc2libGVBbmFsUHNldSIgQWxpYXM9IuaLn+WOi+WKm+aVsOaNriIgSWNvbj0iSW5wdXRGbHVpZCIgLz4NCiAgICAgICAgPC9Hcm91cD4NCg0KICAgIDwvVGFiPg0KDQogICAgPFRhYiBJRD0iNyIgTmFtZT0iQWlUZXN0IiBBbGlhcz0i5pm66IO96K+V5LqVKEkpIj4NCg0KICAgICAgICA8R3JvdXAgTmFtZT0iRGVtbzEiIEFsaWFzPSLmoLfkvovoj5zljZUxIj4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjcwMDEiIEJvdW5kcz0iMCwwLDIsMSIgTmFtZT0iQWN0aW9uTmFtZTEiIEFsaWFzPSLkuLTml7bmtYvor5UxIiBJY29uPSJUT0RPMSIgLz4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjcwMDIiIEJvdW5kcz0iMCwxLDIsMSIgTmFtZT0iQWN0aW9uTmFtZTIiIEFsaWFzPSLkuLTml7bmtYvor5UyIiBJY29uPSJUT0RPMiIgLz4NCiAgICAgICAgPC9Hcm91cD4NCg0KICAgICAgICA8R3JvdXAgTmFtZT0iRGVtbzIiIEFsaWFzPSLmoLfkvovoj5zljZUyIj4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjcxMDEiIEJvdW5kcz0iMCwwLDIsMSIgTmFtZT0iQWN0aW9uTmFtZTMiIEFsaWFzPSLkuLTml7bmtYvor5UzIiBJY29uPSJUT0RPMyIgLz4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjcxMDIiIEJvdW5kcz0iMCwxLDIsMSIgTmFtZT0iQWN0aW9uTmFtZTQiIEFsaWFzPSLkuLTml7bmtYvor5U0IiBJY29uPSJUT0RPNCIgLz4NCiAgICAgICAgPC9Hcm91cD4NCg0KICAgICAgICA8R3JvdXAgTmFtZT0iRGVtbzMiIEFsaWFzPSLmoLfkvovoj5zljZUzIj4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjcyMDEiIEJvdW5kcz0iMCwwLDIsMSIgTmFtZT0iQWN0aW9uTmFtZTQiIEFsaWFzPSLkuLTml7bmtYvor5U1IiBJY29uPSJUT0RPNSIgLz4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjcyMDIiIEJvdW5kcz0iMCwxLDIsMSIgTmFtZT0iQWN0aW9uTmFtZTUiIEFsaWFzPSLkuLTml7bmtYvor5U2IiBJY29uPSJUT0RPNiIgLz4NCiAgICAgICAgPC9Hcm91cD4NCg0KICAgICAgICA8R3JvdXAgTmFtZT0iTm1EZWJ1ZyIgQWxpYXM9Iuahhuaetua1i+ivlShEZWJ1ZykiPg0KICAgICAgICAgICAgPENtZCBJRD0iNzk5OSIgQm91bmRzPSIwLDAsMiwxIiBOYW1lPSJObURlYnVnIiBBbGlhcz0i5qGG5p625Luj56CB6LCD6K+VIiBJY29uPSJQcmVwYXJlR3JpZCIgLz4NCiAgICAgICAgPC9Hcm91cD4NCg0KDQoNCiAgICA8L1RhYj4NCg0KICAgIDxUYWIgSUQ9IjgiIE5hbWU9IlJlc3VsdCIgQWxpYXM9IuaIkOaenOeuoeeQhihSKSIgPg0KDQogICAgICAgIDxHcm91cCBOYW1lPSJKb2JzIiBBbGlhcz0i5oiQ5p6c566h55CGIj4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjEwMDgiIEJvdW5kcz0iMCwwIiBOYW1lPSJSc3RMb2FkIiBBbGlhcz0i5Yqg6L295oiQ5p6cIiBJY29uPSJMb2FkSm9icyIgLz4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjEwMDkiIEJvdW5kcz0iMSwwIiBOYW1lPSJSc3RTYXZlIiBUeXBlPSIxIiBFeHROYW1lcz0iUnN0U2F2ZUN1cjtSc3RTYXZlQWxsIiBFeHRJbmZvPSLkv53lrZjlvZPliY3miJDmnpw75L+d5a2Y5omA5pyJ5oiQ5p6cIiBBbGlhcz0i5L+d5a2Y5oiQ5p6cIiBJY29uPSJTYXZlSm9icyIgLz4NCiAgICAgICAgPC9Hcm91cD4NCg0KICAgICAgICA8R3JvdXAgTmFtZT0iUmVzQ29tcGFyZSIgQWxpYXM9IuaIkOaenOWvueavlCI+DQogICAgICAgICAgICA8Q21kIElEPSI4MDAzIiBCb3VuZHM9IjAsMCwyLDEiIE5hbWU9IlJlc0NvbXBhcmUiIEFsaWFzPSLmiJDmnpzlr7nmr5QiIEljb249IlJlc0NvbXBhcmUiICAvPg0KICAgICAgICA8L0dyb3VwPg0KDQogICAgICAgIDxHcm91cCBOYW1lPSJQcmludCIgQWxpYXM9IuaKpeWRiuaJk+WNsCI+DQogICAgICAgICAgICA8Q21kIElEPSI4MDAxIiBCb3VuZHM9IjAsMCIgTmFtZT0iUmVwb3J0Q29uZmlnIiBBbGlhcz0i5oql5ZGK6K6+572uIiBJY29uPSJyZXBvcnRDb25maWciICAvPg0KICAgICAgICAgICAgPENtZCBJRD0iODAwNCIgQm91bmRzPSIxLDAiIE5hbWU9IlByaW50UHJldmlldyIgQWxpYXM9IuaKpeWRiumihOiniCIgSWNvbj0iUHJlUHJpbnQiICAvPg0KICAgICAgICAgICAgPENtZCBJRD0iODAwMiIgQm91bmRzPSIwLDEiIE5hbWU9IlByaW50IiBBbGlhcz0i5omT5Y2wKOWQq1BERikiIEljb249IlByaW50IiAgLz4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjgwMDUiIEJvdW5kcz0iMSwxIiBOYW1lPSJFeHBvcnRXb3JkIiBBbGlhcz0i5a+85Ye6KFdvcmQpIiBJY29uPSJXb3JkMTYiICAvPg0KICAgICAgICA8L0dyb3VwPg0KDQogICAgICAgIDxHcm91cCBOYW1lPSJXaW5kb3ciIEFsaWFzPSLnqpflj6PmmL7npLoiIFZpc2libGU9IjAiPg0KICAgICAgICAgICAgPENtZCBJRD0iOTAwMyIgQm91bmRzPSIwLDAsMiwxIiBOYW1lPSJWaXNpYmxlUGFyYW1ldGVycyIgQWxpYXM9IuWPguaVsOeql+WPoyIgSWNvbj0iVmlzaWJsZVBhcmFtZXRlcnMiIC8+DQogICAgICAgICAgICA8Q21kIElEPSI5MDA0IiBCb3VuZHM9IjAsMSwyLDEiIE5hbWU9IlZpc2libGVQdHlzIiBBbGlhcz0i5bGe5oCn56qX5Y+jIiBJY29uPSJQcm9wZXJ0eVdpbmRvdyIgLz4NCg0KICAgICAgICA8L0dyb3VwPg0KDQogICAgPC9UYWI+DQoNCiAgICA8VGFiIElEPSI5IiBOYW1lPSJXaW5kb3ciIEFsaWFzPSLnqpflj6MoVykiID4NCg0KICAgICAgICA8R3JvdXAgTmFtZT0iV2luZG93IiBBbGlhcz0i5Z+65pysIj4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjkwMDEiIEJvdW5kcz0iMCwwLDIsMSIgTmFtZT0iVmlzaWJsZVByb2pUcmVlRGEiIEFsaWFzPSLpobnnm67moJEiIEljb249IlByb2pUcmVlIiAvPg0KICAgICAgICAgICAgPENtZCBJRD0iOTAwOCIgQm91bmRzPSIwLDEsMiwxIiBOYW1lPSJWaXNpYmxlUHJvalRyZWVKYiIgQWxpYXM9IuWIhuaekOagkSIgSWNvbj0iUHJvalRyZWUiIC8+DQogICAgICAgICAgICA8Q21kIElEPSI5MDA5IiBCb3VuZHM9IjAsMiwyLDEiIE5hbWU9IlZpc2libGVQcm9qVHJlZVJzIiBBbGlhcz0i5oiQ5p6c5qCRIiBJY29uPSJQcm9qVHJlZSIgLz4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjkwMDIiIEJvdW5kcz0iMCwzIiBOYW1lPSJWaXNpYmxlTW9kZWxzIiBBbGlhcz0i5qih5Z6L56qX5Y+jIiBJY29uPSJWaXNpYmxlTW9kZWxzIiAvPg0KICAgICAgICAgICAgPENtZCBJRD0iOTAwMyIgQm91bmRzPSIxLDMiIE5hbWU9IlZpc2libGVQYXJhbWV0ZXJzIiBBbGlhcz0i5Y+C5pWw56qX5Y+jIiBJY29uPSJWaXNpYmxlUGFyYW1ldGVycyIgLz4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjkwMDQiIEJvdW5kcz0iMCw0IiBOYW1lPSJWaXNpYmxlUHR5cyIgQWxpYXM9IuWxnuaAp+eql+WPoyIgSWNvbj0iUHJvcGVydHlXaW5kb3ciIC8+DQogICAgICAgICAgICA8Q21kIElEPSI5MDA1IiBCb3VuZHM9IjEsNCIgTmFtZT0iVmlzaWJsZUxvZ3MiIEFsaWFzPSLml6Xlv5fnqpflj6MiIEljb249IlZpc2libGVMb2dzIiAvPg0KICAgICAgICAgICAgPENtZCBJRD0iOTAwNiIgQm91bmRzPSIwLDUiIE5hbWU9IlN0YWNrZWRQcm9qZWN0IiBBbGlhcz0i6aG555uu56qX5L2TIiBJY29uPSJTdGFja2VkUHJvamVjdCIgLz4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjkwMDciIEJvdW5kcz0iMSw1IiBOYW1lPSJTdGFja2VkTWRpIiBBbGlhcz0i5YiG5p6Q56qX5L2TIiBJY29uPSJTdGFja2VkTWRpIiAvPg0KICAgICAgICA8L0dyb3VwPg0KDQogICAgICAgIDxHcm91cCBOYW1lPSJXaW5kb3dMYXlvdXQiIEFsaWFzPSLnqpflj6PluIPlsYAiPg0KICAgICAgICAgICAgPENtZCBJRD0iOTAxMSIgQm91bmRzPSIwLDAiIE5hbWU9IldpbmRvd0xheW91dEgiIEljb25Pbmx5PSIxIiBUaXBzPSLmsLTlubPluIPlsYAiIEljb249IldpbmRvd0xheW91dEgiIC8+DQogICAgICAgICAgICA8Q21kIElEPSI5MDEyIiBCb3VuZHM9IjEsMCIgTmFtZT0iV2luZG93TGF5b3V0ViIgSWNvbk9ubHk9IjEiIFRpcHM9IuerluebtOW4g+WxgCIgSWNvbj0iV2luZG93TGF5b3V0ViIgLz4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjkwMTMiIEJvdW5kcz0iMCwxIiBOYW1lPSJXaW5kb3dMYXlvdXRUIiBJY29uT25seT0iMSIgVGlwcz0i5bmz6ZO65biD5bGAIiBJY29uPSJXaW5kb3dMYXlvdXRUIiAvPg0KICAgICAgICAgICAgPENtZCBJRD0iOTAxNCIgQm91bmRzPSIxLDEiIE5hbWU9IldpbmRvd0xheW91dEMiIEljb25Pbmx5PSIxIiBUaXBzPSLmipjlj6DluIPlsYAiIEljb249IldpbmRvd0xheW91dEMiIC8+DQogICAgICAgIDwvR3JvdXA+DQoNCiAgICAgICAgPEdyb3VwIE5hbWU9IkNsb3NlIiBBbGlhcz0i5YWz6ZetIj4gICAgICAgIA0KICAgICAgICAgICAgPENtZCBJRD0iOTAyMSIgQm91bmRzPSIwLDAiIE5hbWU9IkNsb3NlQ3VyV25kIiBBbGlhcz0i5YWz6Zet5b2T5YmNIiBJY29uPSJDbG9zZUFsbFdpbmRvdyIgLz4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjkwMjIiIEJvdW5kcz0iMSwwIiBOYW1lPSJDbG9zZUFsbFduZHMiIEFsaWFzPSLlhbPpl63miYDmnIkiIEljb249IkNsb3NlQWxsV2luZG93IiAvPg0KICAgICAgICAgICAgPENtZCBJRD0iOTAyMyIgQm91bmRzPSIwLDEiIE5hbWU9IlByZXZXbmQiIEFsaWFzPSLkuIrkuIDkuKoiIEljb25Pbmx5PSIxIiBJY29uPSJVcCIgVGlwcz0i5LiK5LiA5Liq56qX5L2TIiAvPg0KICAgICAgICAgICAgPENtZCBJRD0iOTAyNCIgQm91bmRzPSIxLDEiIE5hbWU9Ik5leHRXbmQiIEFsaWFzPSLkuIvkuIDkuKoiIEljb25Pbmx5PSIxIiBJY29uPSJEb3duIiBUaXBzPSLkuIvkuIDkuKrnqpfkvZMiIC8+DQogICAgICAgICAgICA8Q21kIElEPSI5MDI1IiBCb3VuZHM9IjAsMiwyLDEiIFR5cGU9IjciIE5hbWU9Ikxpc3RXeFduZHMiIEFsaWFzPSLnqpfkvZMiIC8+DQogICAgICAgIDwvR3JvdXA+DQoNCiAgICA8L1RhYj4NCg0KICAgIDxUYWIgSUQ9IjEwIiBOYW1lPSJIZWxwIiBBbGlhcz0i5biu5YqpKEgpIiA+DQoNCiAgICAgICAgPEdyb3VwIE5hbWU9IkhlbHAiIEFsaWFzPSLluK7liqkiPg0KICAgICAgICAgICAgPENtZCBJRD0iMTAwMDEiIEJvdW5kcz0iMCwwLDIsMSIgTmFtZT0iTG9nVmlldyIgQWxpYXM9IuaXpeW/l+afpeeciyhMKSIgSWNvbj0iTG9nVmlldyIgLz4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjEwMDAyIiBCb3VuZHM9IjAsMSwyLDEiIE5hbWU9IkhlbHAiIEFsaWFzPSLluK7liqkoSCkiIEljb249IkhlbHAiIC8+DQogICAgICAgICAgICA8Q21kIElEPSIxMDAwOCIgQm91bmRzPSIwLDIsMiwxIiBOYW1lPSJVcGRhdGVMaXN0cyIgQWxpYXM9IuabtOaWsOWIl+ihqChJKSIgSWNvbj0iVXBkYXRlTGlzdHMiIC8+DQogICAgICAgIDwvR3JvdXA+DQoNCiAgICAgICAgPEdyb3VwIE5hbWU9IkxhbmciIEFsaWFzPSLor63oqIAiPg0KICAgICAgICAgICA8Q21kIElEPSIxMDAwOSIgQm91bmRzPSIwLDAsMiwxIiBOYW1lPSJMYW5nU3dhcCIgQWxpYXM9IuWIh+aNouivreiogCIgSWNvbj0iTGFuZ1N3YXAiIC8+DQogICAgICAgIDwvR3JvdXA+DQoNCiAgICAgICAgPEdyb3VwIE5hbWU9IkFib3V0IiBBbGlhcz0i5YWz5LqOIj4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjEwMDAzIiBCb3VuZHM9IjAsMCwyLDEiIE5hbWU9IkFib3V0IiBBbGlhcz0i5YWz5LqOKEEpIiBJY29uPSJXVEFJQWJvdXQiIC8+DQogICAgICAgICAgICA8Q21kIElEPSIxMDAwNCIgQm91bmRzPSIxLDAiIE5hbWU9IkFib3V0UXQiIEFsaWFzPSLlhbPkuo5RdChRKSIgSWNvbj0iUXQiIFZpc2libGU9IjAiIC8+DQogICAgICAgIDwvR3JvdXA+DQoNCiAgICAgICAgPEdyb3VwIE5hbWU9IkxvZ2luIiBBbGlhcz0i55m75b2VKERlYnVnKSI+DQogICAgICAgICAgICA8Q21kIElEPSIxMDAwNyIgQm91bmRzPSIwLDAiIE5hbWU9IlJlZ2lzdGVyIiBBbGlhcz0iKERlYnVnKei9r+S7tuazqOWGjChSKSIgSWNvbj0iUmVnaXN0ZXIiIC8+DQogICAgICAgICAgICA8Q21kIElEPSIxMDAwNSIgQm91bmRzPSIxLDAiIE5hbWU9IkxvZ2luIiBBbGlhcz0iKERlYnVnKeeUqOaIt+eZu+W9lShVKSIgSWNvbj0iTG9naW4iIC8+DQogICAgICAgIDwvR3JvdXA+DQoNCiAgICAgICAgPEdyb3VwIE5hbWU9IkRlYnVnIiBBbGlhcz0i6LCD6K+VKERlYnVnKSI+DQogICAgICAgICAgICA8Q21kIElEPSIxMDAwNiIgQm91bmRzPSIwLDAsMiwxIiBOYW1lPSIoRGVidWcpIFN1bSBQYXJhbWV0ZXJzIiBBbGlhcz0iKERlYnVnKeaxh+aAu+aooeWei+WPguaVsCIgSWNvbj0iU3VtUGFyYSIgLz4NCiAgICAgICA8L0dyb3VwPg0KICAgIDwvVGFiPg0KDQo8L1JpYmJvbj4NCg==
\ No newline at end of file
+77u/PD94bWwgcup_mpadmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4NCg0KPCEtLSDnvJbovpHkvbwzy/nlKggWE1MU3B5IHYyMDA2IFUgKGh0dHA6Ly93d3cuYWx0b3ZhLmNvbSkg55SxIGFueSAoYW55KSAtLT4NCjwhLS0qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLS0+DQo8IS0tICAgIOacrOaWh+aho+eahOebrueahOaYr+W7uueri1dUQUnova/ku7bns7vnu5/nmoToj5zljZXlsYLmrKHlhbPns7so6ZKI5a+5UmliYm9u5qih5byPKSAgICAgICAgICAgICAgICAgICAgICAgLS0+DQo8IS0tICAgIEF1dGhvcihzKTogd2FuZ3pnICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPg0KPCEtLSAgICBEYXRlOiAyMDI0MDcxOCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLT4NCjwhLS0qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLS0+DQoNCjwhLS0qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLS0+DQo8IS0tDQogICAgVGFiIOe6p+WIqw0KICAgICAgICBJRDogICAgICAgICAg5ZSv5LiA5qCH6K+GDQogICAgICAgIE5hbWXvvJogICAgICAg5ZCN56ew77yM6YCa5bi46Iux5paHDQogICAgICAgIEFsaWFz77yaICAgICAg5Yir5ZCN77yM6YCa5bi45Lit5paHDQogICAgICAgIEZpbGVNb2RlOiAgICDmmK/lkKbmlofku7ZNZW515qih5byP77yMMSBvciAwDQogICAgICAgIFZpc2libGXvvJogICAg5piv5ZCm5Y+v6KeB77yMMSBvciAwDQogICAgICAgIFRpcHPvvJogICAgICAg6L6F5Yqp6K+05piODQoNCiAgICAgICAgR3JvdXAg57qn5YirDQogICAgICAgICAgICBOYW1l77yaICAgICAgIOWQjeensO+8jOmAmuW4uOiLseaWhw0KICAgICAgICAgICAgQWxpYXPvvJogICAgICDliKvlkI3vvIzpgJrluLjkuK3mlocNCg0KICAgICAgICAgICAgQ21kIOe6p+WIqw0KICAgICAgICAgICAgICAgIElEOiAgICAgICAgICDllK/kuIDmoIfor4YNCiAgICAgICAgICAgICAgICBUeXBlOiAgICAgICAg5a+55bqU5o6n5Lu257G75Z6LOg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAw4oCU4oCU6buY6K6kQnV0dG9uDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIDHigJTigJTluKbkuIvmi4noj5zljZVCdXR0b24NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMuKAlOKAlENvbWJvQm94DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIDPigJTigJRDaGVja0JveA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICA04oCU4oCUUmFkaW9CdXR0b24NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNeKAlOKAlFRleHQNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNuKAlOKAlExhYmVsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIDfigJTigJRMaXN0V2lkZ2V0DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIDjigJTigJRMaW5lRWRpdA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICA54oCU4oCU5YqI5YiG5oyJ6ZKuDQogICAgICAgICAgICAgICAgTmFtZe+8miAgICAgICDlkI3np7DvvIzpgJrluLjoi7HmlocNCiAgICAgICAgICAgICAgICBBbGlhc++8miAgICAgIOWIq+WQje+8jOmAmuW4uOS4reaWhw0KICAgICAgICAgICAgICAgIEljb27vvJogICAgICAg5Zu+5qCHDQogICAgICAgICAgICAgICAgU2hvcnRLZXnvvJogICDlv6vmjbfplK4NCiAgICAgICAgICAgICAgICBCb3VuZHM6ICAgICAg5L2N572u5L+h5oGv77yM5YWo5piv5pW05pWw77yM5ZyoR3JpZExheW91dOS4rQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMCwwLDEsMikgKDAsMCkg5YiG5Yir5Li6eHl3aA0KICAgICAgICAgICAgICAgIEV4dEluZm86ICAgICDmianlsZXkv6Hmga/vvIzlpoLmk43kvZzlr7nosaHnmoTooajlkI0s5LiL5ouJ6YCJ6aG5562JDQogICAgICAgICAgICAgICAgRXh0TmFtZXM6ICAgIOaJqeWxleS/oeaBr+WvueW6lOeahE5hbWXvvIzlpoLkuIvmi4lidXR0b27lr7nlupTnmoROYW1lDQogICAgICAgICAgICAgICAgVGlwc++8miAgICAgICDovoXliqnor7TmmI4NCi0tPg0KPCEtLSoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiotLT4NCg0KPFJpYmJvbj4NCg0KICAgIDxUYWIgSUQ9IjEiIE5hbWU9IlByb2pNYW5hZ2VyIiBBbGlhcz0i6aG555uu566h55CGKFApIiBGaWxlTW9kZT0iMSIgPg0KDQogICAgICAgIDxHcm91cCBOYW1lPSJQcm9qZWN0IiBBbGlhcz0i5paH5Lu2Ij4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjEwMDAiIE5hbWU9IkFwcEhvbWUiIEFsaWFzPSIiIEljb249IkFwcEhvbWUxMjgiIC8+DQogICAgICAgICAgICA8Q21kIElEPSItMSIgTmFtZT0iU2VwYXJhdG9yIiBBbGlhcz0i5YiG6ZqU56ymIiBUaXBzPSIiIC8+DQogICAgICAgICAgICA8Q21kIElEPSIxMDAxIiBOYW1lPSJQcm9qTmV3IiBBbGlhcz0i5paw5bu66aG555uuIiBTaG9ydEtleT0iQ3RybCtOIiBJY29uPSJOZXdQcm9qIiAvPg0KICAgICAgICAgICAgPENtZCBJRD0iMTAwMiIgTmFtZT0iUHJvak9wZW4iIEFsaWFzPSLmiZPlvIDpobnnm64iIFNob3J0S2V5PSJDdHJsK08iIEljb249Ik9wZW5Qcm9qIiAvPg0KICAgICAgICAgICAgPENtZCBJRD0iMTAwMyIgTmFtZT0iUHJvakNsb3NlIiBBbGlhcz0i5YWz6Zet6aG555uuIiBJY29uPSJDbG9zZVByb2oiIC8+DQogICAgICAgICAgICA8Q21kIElEPSItMSIgTmFtZT0iU2VwYXJhdG9yIiBBbGlhcz0i5YiG6ZqU56ymIiBUaXBzPSIiIC8+DQogICAgICAgICAgICA8Q21kIElEPSIxMDA1IiBOYW1lPSJQcm9qU2F2ZSIgQWxpYXM9IuS/neWtmOmhueebriIgU2hvcnRLZXk9IkN0cmwrUyIgSWNvbj0iU2F2ZVByb2oiIC8+DQogICAgICAgICAgICA8Q21kIElEPSIxMDA2IiBOYW1lPSJQcm9qU2F2ZUFzIiBBbGlhcz0i6aG555uu5Y+m5a2YIiBJY29uPSJTYXZlYXMiIC8+DQogICAgICAgICAgICA8Q21kIElEPSIxMDA3IiBOYW1lPSJQcm9qQ29uZmlnIiBBbGlhcz0i6aG555uu5L+h5oGvIiBJY29uPSJQcm9qSW5mbyIgLz4NCg0KICAgICAgICAgICAgPENtZCBJRD0iLTEiIE5hbWU9IlNlcGFyYXRvciIgQWxpYXM9IuWIhumalOespiIgVGlwcz0iIiAvPg0KICAgICAgICAgICAgPENtZCBJRD0iMTAwMDIiIE5hbWU9IkhlbHAiIEFsaWFzPSLluK7liqkoSCkiIEljb249IkhlbHAiIC8+DQogICAgICAgICAgICA8Q21kIElEPSIxMDAwMyIgTmFtZT0iQWJvdXQiIEFsaWFzPSLlhbPkuo4oQSkiIEljb249IldUQUlBYm91dCIgLz4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjEwMDA4IiBOYW1lPSJVcGRhdGVMaXN0cyIgQWxpYXM9IuabtOaWsOWIl+ihqChJKSIgSWNvbj0iVXBkYXRlTGlzdHMiIC8+DQogICAgICAgICAgICA8Q21kIElEPSItMSIgTmFtZT0iU2VwYXJhdG9yIiBBbGlhcz0i5YiG6ZqU56ymIiBUaXBzPSIiIC8+DQogICAgICAgICAgICA8Q21kIElEPSIxMDEwIiBOYW1lPSJBcHBRdWl0IiBBbGlhcz0i6YCA5Ye6KFgpIiBJY29uPSJDbG9zZSIgLz4NCiAgICAgICAgPC9Hcm91cD4NCiAgICA8L1RhYj4NCg0KICAgIDxUYWIgSUQ9IjAiIE5hbWU9IldlbENvbWUiIEFsaWFzPSLlvIDlp4soTykiID4NCg0KICAgICAgICA8R3JvdXAgTmFtZT0iRGF0YU1hbmFnZXIiIEFsaWFzPSLmlbDmja7lh4blpIciPg0KICAgICAgICAgICAgPENtZCBJRD0iMTA5OSIgQm91bmRzPSIwLDAsMiwxIiBOYW1lPSJXZWxsTmV3IiBBbGlhcz0i5paw5bu65LqVKFcpIiBJY29uPSJXZWxsTmV3IiAvPg0KICAgICAgICAgICAgPENtZCBJRD0iMjAwNSIgQm91bmRzPSIwLDEsMiwxIiBOYW1lPSJEYXRhUmF0ZSIgQWxpYXM9Iua1gemHj+aVsOaNrihRKSIgRXh0SW5mbz0iUF9EQVRBX0dBVUdFX0YiIEljb249IlJhdGVEYXRhIiAvPg0KICAgICAgICAgICAgPENtZCBJRD0iMjAwNiIgQm91bmRzPSIwLDIsMiwxIiBOYW1lPSJEYXRhUHJlIiBBbGlhcz0i5Y6L5Yqb5pWw5o2uKFApIiBFeHRJbmZvPSJQX0RBVEFfR0FVR0VfUCIgSWNvbj0iUHJlc3N1cmVEYXRhIiAvPg0KICAgICAgICA8L0dyb3VwPg0KDQogICAgICAgIDxHcm91cCBOYW1lPSJBbmFsRWRpdCIgQWxpYXM9IuWIhuaekOeuoeeQhiI+DQogICAgICAgICAgICA8Q21kIElEPSIzMDA2IiBCb3VuZHM9IjAsMCwyLDEiIE5hbWU9IkFuYWxOZXciIEFsaWFzPSLmlrDlu7rliIbmnpAiIEljb249IkpvYk5ldyIgLz4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjMwMDciIEJvdW5kcz0iMCwxLDIsMSIgTmFtZT0iQW5hbEVkaXQiIEFsaWFzPSLliIbmnpDnrqHnkIYiIEljb249IkpvYkVkaXQiIFZpc2libGU9IjAiIC8+DQogICAgICAgICAgICA8Q21kIElEPSI5MTAxIiBCb3VuZHM9IjAsMSIgTmFtZT0iVmlzaWJsZUFuYWxCYXNpYyIgQWxpYXM9IuWfuuehgOS/oeaBryIgSWNvbj0iSW5wdXRCYXNpYyIgLz4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjkxMDIiIEJvdW5kcz0iMSwxIiBOYW1lPSJWaXNpYmxlQW5hbFBWVCIgQWxpYXM9IlBWVOaVsOaNriIgSWNvbj0iSW5wdXRGbHVpZCIgLz4NCiAgICAgICAgPC9Hcm91cD4NCg0KICAgICAgICA8R3JvdXAgTmFtZT0iQW5hbHl0aWNhbCIgQWxpYXM9Iua1geWKqOauteWIhuaekCI+DQogICAgICAgICAgICA8Q21kIElEPSIzMDAzIiBCb3VuZHM9IjAsMCwyLDEiIE5hbWU9IkFuYWxQRiIgQWxpYXM9Iua1geWKqOautemAieaLqSIgRXh0SW5mbz0iUEYiIEljb249IlBGIiAvPg0KICAgICAgICAgICAgPENtZCBJRD0iMzAwNCIgQm91bmRzPSIwLDEsMiwxIiBOYW1lPSJBbmFsRmxvd1NlZyIgQWxpYXM9Iua1geWKqOauteWIhuaekCIgSWNvbj0iRmxvd1BlcmlvZCIgLz4NCiAgICAgICAgPC9Hcm91cD4NCg0KICAgICAgICA8R3JvdXAgTmFtZT0iQW5hbHl0aWNhbCIgQWxpYXM9Iuino+mHiuaLn+WQiCI+DQoNCiAgICAgICAgICAgIDxDbWQgSUQ9IjMxMDUiIEJvdW5kcz0iMCwwLDIsMSIgTmFtZT0iRGVjb252b2x2IiBBbGlhcz0i5Y+N6KS256evIiBJY29uPSJEZWNvbnZvbHYiIFZpc2libGU9IjAiIC8+DQogICAgICAgICAgICA8Q21kIElEPSIzMTAxIiBCb3VuZHM9IjAsMSwyLDEiIE5hbWU9IkZpdE1vZGVsIiBBbGlhcz0i6Kej5p6Q6KejIiBJY29uPSJGaXRNb2RlbCIgLz4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjMxMDQiIEJvdW5kcz0iMCwyLDIsMSIgTmFtZT0ibm1GaXRNb2RlbCIgQWxpYXM9IuaVsOWAvOinoyIgSWNvbj0iRml0TW9kZWwiIC8+DQoNCiAgICAgICAgICAgIDxDbWQgSUQ9IjMxMDIiIEJvdW5kcz0iMCwzLDIsMSIgTmFtZT0iQXV0b0ZpdCIgQWxpYXM9IuiHquWKqOaLn+WQiCIgSWNvbj0iQXV0b0ZpdCIgLz4NCiAgICAgICA8L0dyb3VwPg0KDQogICAgICAgIDxHcm91cCBOYW1lPSJOdW1lcmljYWwiIEFsaWFzPSLlnLDotKjlu7rmqKEoRGVidWcpIiBWaXNpYmxlPSIwIj4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjUwMDIiIEJvdW5kcz0iMCwwLDIsMSIgTmFtZT0iUHJvcGVydHlMb2FkIiBBbGlhcz0i5bGe5oCn5a+85YWlIiBJY29uPSJQcmVwYXJlR3JpZCIgLz4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjUxMDIiIEJvdW5kcz0iMCwxLDIsMSIgTmFtZT0iUnVuR3JpZCIgQWxpYXM9Iue9keagvOWIkuWIhiIgSWNvbj0iUGxhdGVGaXQiIC8+DQogICAgICAgICAgICA8Q21kIElEPSI1MjAxIiBCb3VuZHM9IjAsMiwyLDEiIE5hbWU9IkFuYWxNYXAiIEFsaWFzPSLorqHnrpciIEljb249IlJ1bkV4IiAvPg0KICAgICAgICAgICAgPENtZCBJRD0iNTIwMiIgQm91bmRzPSIwLDMsMiwxIiBOYW1lPSJBbmFsUEYiIEFsaWFzPSLovoXliqnmi5/lkIgiIEV4dEluZm89IlBGIiBJY29uPSJSdW5PdGhlciIgVmlzaWJsZT0iMCIvPg0KICAgICAgIDwvR3JvdXA+DQoNCiAgICAgICAgPEdyb3VwIE5hbWU9IldlbGxNYXAiIEFsaWFzPSLkupXkvY3lm74iPg0KICAgICAgICAgICAgPENtZCBJRD0iMzAwOCIgQm91bmRzPSIwLDAsMiwxIiBOYW1lPSJBbmFsTWFwIiBBbGlhcz0i5LqV5L2N5Zu+IiBJY29uPSJNYXAyRCIgVmlzaWJsZT0iMSIgLz4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjMwMTgiIEJvdW5kcz0iMCwxLDIsMSIgTmFtZT0iQW5hbEludGVyZmVyZSIgQWxpYXM9IuW5suaJsOiuvuWumiIgSWNvbj0iTWFwMkQiIFZpc2libGU9IjAiIC8+DQogICAgICAgIDwvR3JvdXA+DQoNCiAgICAgICAgPEdyb3VwIE5hbWU9IldpbmRvdyIgQWxpYXM9Iueql+WPo+aYvuekuihEZWJ1ZykiIFZpc2libGU9IjAiID4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjkwMDIiIEJvdW5kcz0iMCwwIiBOYW1lPSJWaXNpYmxlTW9kZWxzIiBBbGlhcz0i5qih5Z6L56qX5Y+jIiBJY29uPSJWaXNpYmxlTW9kZWxzIiAvPg0KICAgICAgICAgICAgPENtZCBJRD0iOTAwMyIgQm91bmRzPSIxLDAiIE5hbWU9IlZpc2libGVQYXJhbWV0ZXJzIiBBbGlhcz0i5Y+C5pWw56qX5Y+jIiBJY29uPSJWaXNpYmxlUGFyYW1ldGVycyIgLz4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjkxMDEiIEJvdW5kcz0iMCwxIiBOYW1lPSJWaXNpYmxlQW5hbEJhc2ljIiBBbGlhcz0i5Z+656GA5L+h5oGvIiBJY29uPSJJbnB1dEJhc2ljIiAvPg0KICAgICAgICAgICAgPENtZCBJRD0iOTEwMiIgQm91bmRzPSIxLDEiIE5hbWU9IlZpc2libGVBbmFsUFZUIiBBbGlhcz0iUFZU5pWw5o2uIiBJY29uPSJJbnB1dEZsdWlkIiAvPg0KICAgICAgICAgICAgPENtZCBJRD0iOTEwMyIgQm91bmRzPSIwLDIiIE5hbWU9IlZpc2libGVBbmFsRGlmZiIgQWxpYXM9IkRJRkbmlbDmja4iIEljb249IklucHV0Rmx1aWQiIC8+DQogICAgICAgICAgICA8Q21kIElEPSI5MTA0IiBCb3VuZHM9IjEsMiIgTmFtZT0iVmlzaWJsZUFuYWxQc2V1IiBBbGlhcz0i5ouf5Y6L5Yqb5pWw5o2uIiBJY29uPSJJbnB1dEZsdWlkIiAvPg0KICAgICAgICA8L0dyb3VwPg0KDQogICAgICAgIDxHcm91cCBOYW1lPSJIZWxwIiBBbGlhcz0i5biu5YqpIj4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjEwMDAyIiBCb3VuZHM9IjAsMCwyLDEiIE5hbWU9IkhlbHAiIEFsaWFzPSLluK7liqkoSCkiIEljb249IkhlbHAiIC8+DQogICAgICAgIDwvR3JvdXA+DQoNCiAgICA8L1RhYj4NCg0KDQogICAgPFRhYiBJRD0iMiIgTmFtZT0iRGF0YU1hbmFnZXIiIEFsaWFzPSLmlbDmja7nrqHnkIYoRCkiID4NCg0KICAgICAgICA8R3JvdXAgTmFtZT0iRGF0YU1hbmFnZXIiIEFsaWFzPSLkupUiPg0KICAgICAgICAgICAgPENtZCBJRD0iMTA5OSIgQm91bmRzPSIwLDAsMiwxIiBOYW1lPSJXZWxsTmV3IiBBbGlhcz0i5paw5bu65LqVKFcpIiBJY29uPSJXZWxsTmV3IiAvPg0KICAgICAgICA8L0dyb3VwPg0KDQogICAgICAgIDxHcm91cCBOYW1lPSJEYXRhTWFuYWdlciIgQWxpYXM9IuWfuuehgOaVsOaNriI+DQogICAgICAgICAgICA8Q21kIElEPSIyMDAxIiBCb3VuZHM9IjAsMCwyLDEiIE5hbWU9IkRhdGFXZWxsQmFzaWMiIEFsaWFzPSLkupXln7rnoYDmlbDmja4oQikiIEV4dEluZm89IkJfV0VMTCIgSWNvbj0iQmFzaWNEYXRhIiAvPg0KICAgICAgICAgICAgPENtZCBJRD0iMjAwMiIgQm91bmRzPSIwLDEsMiwxIiBOYW1lPSJEYXRhTGF5ZXIiIEFsaWFzPSLlnLDotKjliIblsYLmlbDmja4oTCkiIEV4dEluZm89IkJfTEFZRVIiIEljb249IkxheWVyRGF0YSIgLz4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjIwMDMiIEJvdW5kcz0iMCwyLDIsMSIgTmFtZT0iRGF0YVJlcyIgQWxpYXM9IuWCqOWxguaVsOaNrihSKSIgRXh0SW5mbz0iUF9EQVRBX1JFUyIgSWNvbj0iUmVzRGF0YSIgLz4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjIwMDQiIEJvdW5kcz0iMCwzLDIsMSIgTmFtZT0iRGF0YUZsdSIgQWxpYXM9Iua1geS9k+aAp+i0qOaVsOaNrihGKSIgRXh0SW5mbz0iUF9EQVRBX0ZMVUlEIiBJY29uPSJGbHVpZFByb3BlcnR5IiAvPg0KICAgICAgICA8L0dyb3VwPg0KDQogICAgICAgIDxHcm91cCBOYW1lPSJEYXRhTWFuYWdlciIgQWxpYXM9IuWOi+WKm+a1gemHjyI+DQogICAgICAgICAgICA8Q21kIElEPSIyMDA1IiBCb3VuZHM9IjAsMCwyLDEiIE5hbWU9IkRhdGFSYXRlIiBBbGlhcz0i5rWB6YeP5pWw5o2uKFEpIiBFeHRJbmZvPSJQX0RBVEFfR0FVR0VfRiIgSWNvbj0iUmF0ZURhdGEiIC8+DQogICAgICAgICAgICA8Q21kIElEPSIyMDA2IiBCb3VuZHM9IjAsMSwyLDEiIE5hbWU9IkRhdGFQcmUiIEFsaWFzPSLljovlipvmlbDmja4oUCkiIEV4dEluZm89IlBfREFUQV9HQVVHRV9QIiBJY29uPSJQcmVzc3VyZURhdGEiIC8+DQogICAgICAgIDwvR3JvdXA+DQoNCiAgICAgICAgPEdyb3VwIE5hbWU9IkdYNiIgQWxpYXM9IuW5s+WPsOS6kumAmiI+DQogICAgICAgICAgICA8Q21kIElEPSIyMDA3IiBCb3VuZHM9IjAsMCwyLDEiIE5hbWU9Ikd4NkNvbm5lY3RTZXJ2ZXIiIEFsaWFzPSJHWDbkupLpgJooQykiIEljb249Ikd4NkNvbm5lY3RTZXJ2ZXIiIC8+DQogICAgICAgICAgICA8Q21kIElEPSIyMDA4IiBCb3VuZHM9IjAsMSwyLDEiIE5hbWU9Ikd4NkdldFRhc2tzIiBBbGlhcz0i6I635Y+W5Lu75YqhKEQpIiBJY29uPSJHeDZHZXRUYXNrcyIgIFZpc2libGU9IjAiLz4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjIwMDkiIEJvdW5kcz0iMCwyLDIsMSIgTmFtZT0iR3g2VXBkYXRlVGFza3MiIEFsaWFzPSLmm7TmlrDnirbmgIEoVSkiIEljb249Ikd4NlVwZGF0ZVRhc2tzIiAgVmlzaWJsZT0iMCIvPg0KICAgICAgICA8L0dyb3VwPg0KDQogICAgPC9UYWI+DQoNCiAgICA8VGFiIElEPSIyMDEiIE5hbWU9IkRhdGFFZGl0IiBBbGlhcz0i5pWw5o2u57yW6L6RKEUpIiA+DQogICAgICAgIDxHcm91cCBOYW1lPSJEYXRhRWRpdCIgQWxpYXM9IuaVsOaNrue8lui+kSI+DQogICAgICAgICAgICA8Q21kIElEPSIzMDAxIiBCb3VuZHM9IjAsMCwyLDEiIE5hbWU9IkFuYWxGbHUiIEFsaWFzPSLmtYHph4/nvJbovpEiIEV4dEluZm89IkYiIE1kaVR5cGU9IkRhdGFFZGl0IiBJY29uPSJSYXRlRGF0YSIgLz4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjMwMDIiIEJvdW5kcz0iMCwxLDIsMSIgTmFtZT0iQW5hbFByZXNzIiBBbGlhcz0i5Y6L5Yqb57yW6L6RIiBFeHRJbmZvPSJQIiBNZGlUeXBlPSJEYXRhRWRpdCIgSWNvbj0iUHJlc3N1cmVEYXRhIiAvPg0KICAgICAgICAgICAgPENtZCBJRD0iMzMwMyIgQm91bmRzPSIwLDIsMiwxIiBOYW1lPSJBbmFsUHJlQ29uIiBBbGlhcz0i5Y6L5Yqb5oqY566XIiBFeHRJbmZvPSJQIiBNZGlUeXBlPSJEYXRhRWRpdCIgSWNvbj0iQW5hbFByZUNvbiIgLz4NCiAgICAgICAgPC9Hcm91cD4NCiAgICA8L1RhYj4NCg0KICAgIDxUYWIgSUQ9IjMiIE5hbWU9IkFuYWx5dGljYWxUZXN0IiBBbGlhcz0i5aSE55CG6Kej6YeKKEEpIiA+DQoNCiAgICAgICAgPEdyb3VwIE5hbWU9IkFuYWxFZGl0IiBBbGlhcz0i5YiG5p6Q566h55CGIj4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjMwMDYiIEJvdW5kcz0iMCwwIiBOYW1lPSJBbmFsTmV3IiBBbGlhcz0i5paw5bu65YiG5p6QIiBJY29uPSJKb2JOZXciIC8+DQogICAgICAgICAgICA8Q21kIElEPSIzMDA3IiBCb3VuZHM9IjEsMCIgTmFtZT0iQW5hbEVkaXQiIEFsaWFzPSLliIbmnpDnrqHnkIYiIEljb249IkpvYkVkaXQiIC8+DQogICAgICAgIDwvR3JvdXA+DQoNCiAgICAgICAgPEdyb3VwIE5hbWU9IlNlZ0FuYWwiIEFsaWFzPSLmtYHliqjmrrXliIbmnpAiPg0KICAgICAgICAgICAgPENtZCBJRD0iMzAwMyIgQm91bmRzPSIwLDAsMiwxIiBOYW1lPSJBbmFsUEYiIEFsaWFzPSLmtYHliqjmrrXpgInmi6kiIEV4dEluZm89IlBGIiBJY29uPSJQRiIgLz4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjMwMDQiIEJvdW5kcz0iMCwxLDIsMSIgTmFtZT0iQW5hbEZsb3dTZWciIEFsaWFzPSLmtYHliqjmrrXliIbmnpAiIEljb249IkZsb3dQZXJpb2QiIC8+DQogICAgICAgICAgICA8Q21kIElEPSIzMDA1IiBCb3VuZHM9IjAsMiwyLDEiIE5hbWU9IkFuYWxPdGhlcnMiIEFsaWFzPSLnibnlvoHnur/liIbmnpAiIFR5cGU9IjEiICBWaXNpYmxlPSIwIiBFeHROYW1lcz0iQ2hhcnRUO0NoYXJ0U3FydFQ7Q2hhcnQyNVQ7Q2hhcnQ1VCIgRXh0SW5mbz0iQ2hhcnQgVDtDaGFydCBTcXJ0KFQpO0NoYXJ0IDAuMjVUO0NoYXJ0IC0wLjVUIiBJY29uPSJBc3Npc0FuYWwiIC8+DQogICAgICAgICAgICA8Q21kIElEPSIzMDEwIiBCb3VuZHM9IjAsMywyLDEiIE5hbWU9IkFuYWxXbmRNIiBBbGlhcz0i5rWB5Yqo5q6156qX5Y+jIiBUeXBlPSIxIiBJY29uPSJBbmFsV25kTSIgLz4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjMwMDkiIEJvdW5kcz0iMCw0LDIsMSIgTmFtZT0iQW5hbERpc3RyaSIgQWxpYXM9IuWIhuW4g+WbviIgVHlwZT0iMSIgRXh0TmFtZXM9IkNoYXJ0RGVuO0NoYXJ0VmlzIiBFeHRJbmZvPSLmtZPluqbliIbluIPlm7476buP5bqm5YiG5biD5Zu+IiBJY29uPSJBbmFsRGlzdHJpIiAvPg0KICAgICAgICA8L0dyb3VwPg0KDQogICAgICAgIDxHcm91cCBOYW1lPSJEYXRhRml0IiBBbGlhcz0i6Kej6YeK5ouf5ZCIIj4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjMxMDUiIEJvdW5kcz0iMCwwLDIsMSIgTmFtZT0iRGVjb252b2x2IiBBbGlhcz0i5Y+N6KS256evKERlYnVnKSIgSWNvbj0iRGVjb252b2x2IiAvPg0KDQogICAgICAgICAgICA8Q21kIElEPSIzMTAxIiBCb3VuZHM9IjAsMSwyLDEiIE5hbWU9IkZpdE1vZGVsIiBBbGlhcz0i6Kej5p6Q6KejIiBJY29uPSJGaXRNb2RlbCIgLz4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjMxMDQiIEJvdW5kcz0iMCwyLDIsMSIgTmFtZT0ibm1GaXRNb2RlbCIgQWxpYXM9IuaVsOWAvOinoyIgSWNvbj0iRml0TW9kZWwiIC8+DQogICAgICAgICAgICA8Q21kIElEPSIzMTAyIiBCb3VuZHM9IjAsMywyLDEiIE5hbWU9IkF1dG9GaXQiIEFsaWFzPSLoh6rliqjmi5/lkIgiIEljb249IkF1dG9GaXQiIC8+DQogICAgICAgICAgICA8Q21kIElEPSIzMTAzIiBCb3VuZHM9IjAsNCwyLDEiIE5hbWU9IlBsYXRlRml0IiBBbGlhcz0i5pWP5oSf5oCn5YiG5p6QIiBJY29uPSJQbGF0ZUZpdCIgLz4NCiAgICAgICA8L0dyb3VwPg0KDQogICAgICAgIDxHcm91cCBOYW1lPSJBSVRlc3QiIEFsaWFzPSLmmbrog73or5XkupUiPg0KICAgICAgICAgICAgPENtZCBJRD0iMzkwMSIgQm91bmRzPSIwLDAsMiwxIiBOYW1lPSJNb2RlbENsYXNzaWZ5IiBBbGlhcz0i5qih5Z6L6K+G5YirIiBJY29uPSJNb2RlbENsYXNzaWZ5IiAvPg0KICAgICAgICA8L0dyb3VwPg0KDQogICAgICAgIDxHcm91cCBOYW1lPSJSZWxhdGl2ZVRvb2wiIEFsaWFzPSLnm7jlhbPlt6XlhbciPg0KICAgICAgICAgICAgPENtZCBJRD0iMzIwMSIgQm91bmRzPSIwLDAsMiwxIiBOYW1lPSJUaW1lIiBBbGlhcz0i5pe26Ze0IiBJY29uPSJUaW1lIiAvPg0KICAgICAgICAgICAgPENtZCBJRD0iMzIwMiIgQm91bmRzPSIwLDEiIE5hbWU9IlNob3dNb2RlbENoYXJ0cyIgQWxpYXM9IuaooeWei+ekuuaEjyIgSWNvbj0iU2hvd01vZGVsQ2hhcnRzIiAvPg0KICAgICAgICAgICAgPENtZCBJRD0iMzIwNCIgQm91bmRzPSIxLDEiIE5hbWU9IlNhdmVBc01vZGVsU2tldGNoIiBBbGlhcz0i5a2Y5Li656S65oSPIiBJY29uPSJTYXZlQXNNb2RlbFNrZXRjaCIgLz4NCg0KICAgICAgIDwvR3JvdXA+DQoNCjwhLS0gICAgICAgICAgICAgICAgICAgIDxDbWQgSUQ9IjMyMDMiIEJvdW5kcz0iMCwxIiBOYW1lPSJTaG93TW9kZWxTa2V0Y2giIEFsaWFzPSLnkIborroiIEljb249IlNob3dNb2RlbFNrZXRjaCIgLz48R3JvdXAgTmFtZT0iVG9vbFMiIEFsaWFzPSLmianlsZXlip/og70iPg0KICAgICAgICAgICAgPENtZCBJRD0iOTgwMSIgQm91bmRzPSIwLDAsMiwxIiBOYW1lPSJGbG93VG9TIiBBbGlhcz0i5rWB6YeP5Y+Y6KGo55quIiBJY29uPSJGbG93VG9TIiBWaXNpYmxlPSIwIiAvPg0KICAgICAgICAgICAgPENtZCBJRD0iOTIwMSIgQm91bmRzPSIwLDEsMiwxIiBOYW1lPSJNaXhWaXNjb3NpdHkiIEFsaWFzPSLmt7flkIjpu4/luqYiIEljb249Ik1peFZpc2Nvc2l0eSIgVmlzaWJsZT0iMCIgLz4NCiAgICAgICA8L0dyb3VwPi0tPg0KDQogICAgICAgIDxHcm91cCBOYW1lPSJKb2JzIiBBbGlhcz0i5oiQ5p6c566h55CGIj4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjEwMDgiIEJvdW5kcz0iMCwwIiBOYW1lPSJSc3RMb2FkIiBBbGlhcz0i5Yqg6L295oiQ5p6cIiBJY29uPSJMb2FkSm9icyIgLz4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjEwMDkiIEJvdW5kcz0iMSwwIiBOYW1lPSJSc3RTYXZlIiBUeXBlPSIxIiBFeHROYW1lcz0iUnN0U2F2ZUN1cjtSc3RTYXZlQWxsIiBFeHRJbmZvPSLkv53lrZjlvZPliY3miJDmnpw75L+d5a2Y5omA5pyJ5oiQ5p6cIiBBbGlhcz0i5L+d5a2Y5oiQ5p6cIiBJY29uPSJTYXZlSm9icyIgLz4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjEwMTEiIEJvdW5kcz0iMCwxLDIsMSIgTmFtZT0iVG9OdW1lcmljYWwiIEFsaWFzPSJUby3mlbDlgLwiIEljb249IkxvYWRKb2JzIiBWaXNpYmxlPSIwIiAvPg0KICAgICAgICA8L0dyb3VwPg0KDQogICAgICAgIDxHcm91cCBOYW1lPSJXaW5kb3ciIEFsaWFzPSLnqpflj6PmmL7npLoiPg0KICAgICAgICAgICAgPENtZCBJRD0iOTAwMiIgQm91bmRzPSIwLDAiIE5hbWU9IlZpc2libGVNb2RlbHMiIEFsaWFzPSLmqKHlnovnqpflj6MiIEljb249IlZpc2libGVNb2RlbHMiIC8+DQogICAgICAgICAgICA8Q21kIElEPSI5MDAzIiBCb3VuZHM9IjEsMCIgTmFtZT0iVmlzaWJsZVBhcmFtZXRlcnMiIEFsaWFzPSLlj4LmlbDnqpflj6MiIEljb249IlZpc2libGVQYXJhbWV0ZXJzIiAvPg0KICAgICAgICAgICAgPENtZCBJRD0iOTEwMSIgQm91bmRzPSIwLDEiIE5hbWU9IlZpc2libGVBbmFsQmFzaWMiIEFsaWFzPSLln7rnoYDkv6Hmga8iIEljb249IklucHV0QmFzaWMiIC8+DQogICAgICAgICAgICA8Q21kIElEPSI5MTAyIiBCb3VuZHM9IjEsMSIgTmFtZT0iVmlzaWJsZUFuYWxQVlQiIEFsaWFzPSJQVlTmlbDmja4iIEljb249IklucHV0Rmx1aWQiIC8+DQogICAgICAgICAgICA8Q21kIElEPSI5MTAzIiBCb3VuZHM9IjAsMiIgTmFtZT0iVmlzaWJsZUFuYWxEaWZmIiBBbGlhcz0iRElGRuaVsOaNriIgSWNvbj0iSW5wdXRGbHVpZCIgLz4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjkxMDQiIEJvdW5kcz0iMSwyIiBOYW1lPSJWaXNpYmxlQW5hbFBzZXUiIEFsaWFzPSLmi5/ljovlipvmlbDmja4iIEljb249IklucHV0Rmx1aWQiIC8+DQogICAgICAgIDwvR3JvdXA+DQogICAgPC9UYWI+DQoNCiAgICA8VGFiIElEPSI1IiBOYW1lPSJOdW1lcmljYWxUZXN0IiBBbGlhcz0i5pWw5YC85bu65qihKE4pIiA+DQogICAgICAgIDxHcm91cCBOYW1lPSJObU1hbmFnZXIiIEFsaWFzPSLliIbmnpDnrqHnkIYiIFZpc2libGU9IjAiPg0KICAgICAgICAgICAgPENtZCBJRD0iNTAwMSIgQm91bmRzPSIwLDAsMiwxIiBOYW1lPSJBbmFsTmV3IiBBbGlhcz0i5Li05pe25rWL6K+VMSIgSWNvbj0iUHJlcGFyZUdyaWQiIFZpc2libGU9IjAiIC8+DQogICAgICAgICAgICA8Q21kIElEPSI1MDAyIiBCb3VuZHM9IjAsMSwyLDEiIE5hbWU9IlByb3BlcnR5TG9hZCIgQWxpYXM9IuS4tOaXtua1i+ivlTIiIEljb249IlByZXBhcmVHcmlkIiAgVmlzaWJsZT0iMCIvPg0KICAgICAgICA8L0dyb3VwPg0KDQogICAgICAgIDxHcm91cCBOYW1lPSJObUFuYWxDaGFuZ2UiIEFsaWFzPSLliIbmnpDliIfmjaIiPg0KICAgICAgICAgICAgPENtZCBJRD0iNTEzMCIgQm91bmRzPSIwLDAiIE5hbWU9Ik5tQW5hbENoYW5nZSIgQWxpYXM9IuWIhuaekOWIh+aNoiIgSWNvbj0iSm9iRWRpdCIgLz4NCiAgICAgICA8L0dyb3VwPg0KDQogICAgICAgIDxHcm91cCBOYW1lPSJOdEluaXQiIEFsaWFzPSLmqKHlnovlh6DkvZXlr7nosaEiPg0KICAgICAgICAgICAgPENtZCBJRD0iNTExOCIgQm91bmRzPSIwLDAsMiwxIiBOYW1lPSJObU1hcCIgQWxpYXM9Ik1hcCIgSWNvbj0iTm1JbWFnZSIgLz4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjUxMTkiIEJvdW5kcz0iMCwxLDIsMSIgTmFtZT0iTm1VbmxvY2tlZCIgQWxpYXM9IumUgeWumiIgSWNvbj0iTm1VbmxvY2tlZCIgLz4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjUxMDIiIEJvdW5kcz0iMCwyLDIsMSIgTmFtZT0iTm1JbWFnZSIgQWxpYXM9IuayueiXj+WcsOWbviIgSWNvbj0iTm1JbWFnZSIgLz4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjUxMjAiIEJvdW5kcz0iMCwzLDIsMSIgTmFtZT0iTm1NZWFzdXJlIiBBbGlhcz0i5q+U5L6L5bC6IiBJY29uPSJObU1lYXN1cmUiIC8+DQogICAgICAgICAgICA8Q21kIElEPSI1MTAzIiBCb3VuZHM9IjAsNCwyLDEiIE5hbWU9Ik5tUG9seWdvbiIgQWxpYXM9IuWkmui+ueW9oui+ueeVjCIgSWNvbj0iTm1Qb2x5Z29uIiAvPg0KICAgICAgICAgICAgPENtZCBJRD0iNTEwNCIgQm91bmRzPSIwLDUiIE5hbWU9Ik5tUG9seWdvbiIgQWxpYXM9IuefqeW9oui+ueeVjCIgSWNvbj0iTm1SZWN0YW5nbGUiIC8+DQogICAgICAgICAgICA8Q21kIElEPSI1MTA1IiBCb3VuZHM9IjEsNSIgTmFtZT0iTm1Qb2x5Z29uIiBBbGlhcz0i5ZyG5b2i6L6555WMIiBJY29uPSJObVJvdW5kIiAvPg0KICAgICAgICAgICAgPENtZCBJRD0iNTEwNiIgQm91bmRzPSIwLDYsMiwxIiBOYW1lPSJObUZhdWx0IiBBbGlhcz0i5pat5bGCIiBJY29uPSJObUZhdWx0IiAvPg0KICAgICAgICAgICAgPENtZCBJRD0iNTEwNyIgQm91bmRzPSIwLDciIE5hbWU9Ik5tV2VsbCIgQWxpYXM9IumAieaLqeS6lSIgSWNvbj0iTm1XZWxsIiAvPg0KICAgICAgICAgICAgPENtZCBJRD0iNTEwOCIgQm91bmRzPSIxLDciIE5hbWU9Ik5tV2VsbCIgQWxpYXM9IuaWsOW7uuS6lSIgSWNvbj0iTm1XZWxsIiAvPg0KICAgICAgICAgICAgPENtZCBJRD0iNTEwOSIgQm91bmRzPSIwLDgsMiwxIiBOYW1lPSJObUZhdWx0IiBBbGlhcz0i6KOC57ydIiBJY29uPSJObUZhdWx0IiAvPg0KICAgICAgICAgICAgPENtZCBJRD0iNTExMCIgQm91bmRzPSIwLDkiIE5hbWU9Ik5tTGltaXQiIEFsaWFzPSLljLrln58iIEljb249Ik5tTGltaXQiIC8+DQogICAgICAgICAgICA8Q21kIElEPSI1MTExIiBCb3VuZHM9IjEsOSIgTmFtZT0iTm1SZWdpb24iIEFsaWFzPSLmoIforrDljLrln58iIEljb249Ik5tUmVnaW9uIiAvPg0KICAgICAgICAgICAgPENtZCBJRD0iNTEyMSIgQm91bmRzPSIwLDEwLDIsMSIgTmFtZT0iTm1EZWxldGUiIEFsaWFzPSLliKDpmaQiIEljb249Ik5tRGVsZXRlIiAvPg0KICAgICAgIDwvR3JvdXA+DQoNCiAgICAgICA8R3JvdXAgTmFtZT0iTnRSZXNlcnZvaXIiIEFsaWFzPSLlgqjlsYLnibnlvoEiPg0KICAgICAgICAgICAgPENtZCBJRD0iNTExMiIgQm91bmRzPSIwLDAsMiwxIiBOYW1lPSJObUdlb21ldHJ5IiBBbGlhcz0i5YiG5bGCIiBJY29uPSJObUdlb21ldHJ5IiAvPg0KICAgICAgICAgICAgPENtZCBJRD0iNTExMyIgQm91bmRzPSIwLDEsMiwxIiBOYW1lPSJObVByb3BlcnRpZXMiIEFsaWFzPSLlgqjlsYLnibnmgKciIEljb249Ik5tUHJvcGVydGllcyIgLz4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjUxMjIiIEJvdW5kcz0iMCwyLDIsMSIgTmFtZT0iTm1ERk4iIEFsaWFzPSJERk4iIEljb249Ik5tREZOIiAvPg0KICAgICAgICAgICAgPENtZCBJRD0iNTEyNiIgQm91bmRzPSIwLDMsMiwxIiBOYW1lPSJObUludGVycG9sYXRpb24iIEFsaWFzPSLlsZ7mgKfmj5LlgLwiIEljb249Ik5tSW50ZXJwb2xhdGlvbiIgLz4NCiAgICAgICA8L0dyb3VwPg0KDQogICAgICAgPEdyb3VwIE5hbWU9Ik50TW9kZWwiIEFsaWFzPSLmqKHlnovnlJ/miJAiPg0KICAgICAgICAgICAgIDxDbWQgSUQ9IjUxMTQiIEJvdW5kcz0iMCwwLDIsMSIgTmFtZT0iTm1HcmlkIiBBbGlhcz0i572R5qC85YiS5YiGIiBJY29uPSJObUdyaWQiIC8+DQogICAgICAgICAgICAgPENtZCBJRD0iNTExNSIgQm91bmRzPSIwLDEsMiwxIiBOYW1lPSJObUNhY3VsYXRpb24iIEFsaWFzPSLorqHnrpfmsYLop6MiIEljb249IlRpbWUiIC8+DQogICAgICAgICAgICAgPCEtLQ0KICAgICAgICAgICAgIDxDbWQgSUQ9IjUxMTYiIEJvdW5kcz0iMCwyLDIsMSIgTmFtZT0iTm1CYWNrIiBBbGlhcz0i5ZCO5aSE55CGIiBJY29uPSJUaW1lIiAvPg0KICAgICAgICAgICAgIDxDbWQgSUQ9IjUxMTciIEJvdW5kcz0iMCwzLDIsMSIgTmFtZT0iTm1SZXN1bHQiIEFsaWFzPSLnu5PmnpwiIEljb249IkZsb3dQZXJpb2QiIC8+DQogICAgICAgICAgICAgLS0+DQogICAgICAgPC9Hcm91cD4NCg0KICAgICAgICA8R3JvdXAgTmFtZT0iTnRUb29scyIgQWxpYXM9IuW3peWFtyI+DQogICAgICAgICAgICA8Q21kIElEPSI1MTI3IiBCb3VuZHM9IjAsMCIgTmFtZT0iTm1HZW9SZWZlcmVuY2UiIEFsaWFzPSLmqKHlnovlj4LogIPngrnorr7nva4iIEljb249Ik5tR2VvUmVmZXJlbmNlIiAvPg0KICAgICAgICAgICAgPENtZCBJRD0iNTEyOCIgQm91bmRzPSIxLDAiIE5hbWU9Ik5tUG9pbnRlclBvc2l0aW9uIiBBbGlhcz0i5qih5Z6L5L2N572u5pi+56S6IiBJY29uPSJObVBvaW50ZXJQb3NpdGlvbiIgLz4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjUxMjkiIEJvdW5kcz0iMCwxLDIsMSIgTmFtZT0iTm1NZWFzdXJlIiBBbGlhcz0i5qih5Z6L5bC65a+45rWL6YePIiBJY29uPSJObU1lYXN1cmUiIC8+DQogICAgICAgPC9Hcm91cD4NCg0KICAgICAgICA8R3JvdXAgTmFtZT0iTnREaXNwbGF5IiBBbGlhcz0i5pi+56S6Ij4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjUxMjMiIEJvdW5kcz0iMCwwLDIsMSIgTmFtZT0iTm1TaG93IiBBbGlhcz0i5pi+56S6IiBJY29uPSJObVNob3ciIC8+DQogICAgICAgICAgICA8Q21kIElEPSI1MTI0IiBCb3VuZHM9IjAsMSwyLDEiIE5hbWU9Ik5tUHJpbnRQcmV2aWV3IiBBbGlhcz0i5omT5Y2w6aKE6KeIIiBJY29uPSJObVByaW50UHJldmlldyIgLz4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjUxMjUiIEJvdW5kcz0iMCwyLDIsMSIgTmFtZT0iTm1QcmludCIgQWxpYXM9IuaJk+WNsCIgSWNvbj0iTm1QcmludCIgLz4NCiAgICAgICA8L0dyb3VwPg0KDQogICAgICAgIDxHcm91cCBOYW1lPSJXaW5kb3ciIEFsaWFzPSLnqpflj6PmmL7npLoiICBWaXNpYmxlPSIwIj4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjkwMDIiIEJvdW5kcz0iMCwwIiBOYW1lPSJWaXNpYmxlTW9kZWxzIiBBbGlhcz0i5qih5Z6L56qX5Y+jIiBJY29uPSJWaXNpYmxlTW9kZWxzIiAgVmlzaWJsZT0iMCIvPg0KICAgICAgICAgICAgPENtZCBJRD0iOTAwMyIgQm91bmRzPSIxLDAiIE5hbWU9IlZpc2libGVQYXJhbWV0ZXJzIiBBbGlhcz0i5Y+C5pWw56qX5Y+jIiBJY29uPSJWaXNpYmxlUGFyYW1ldGVycyIgIFZpc2libGU9IjAiLz4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjkxMDEiIEJvdW5kcz0iMCwxIiBOYW1lPSJWaXNpYmxlQW5hbEJhc2ljIiBBbGlhcz0i5Z+656GA5L+h5oGvIiBJY29uPSJJbnB1dEJhc2ljIiAvPg0KICAgICAgICAgICAgPENtZCBJRD0iOTEwMiIgQm91bmRzPSIxLDEiIE5hbWU9IlZpc2libGVBbmFsUFZUIiBBbGlhcz0iUFZU5pWw5o2uIiBJY29uPSJJbnB1dEZsdWlkIiAvPg0KICAgICAgICAgICAgPENtZCBJRD0iOTEwMyIgQm91bmRzPSIwLDIiIE5hbWU9IlZpc2libGVBbmFsRGlmZiIgQWxpYXM9IkRJRkbmlbDmja4iIEljb249IklucHV0Rmx1aWQiIC8+DQogICAgICAgICAgICA8Q21kIElEPSI5MTA0IiBCb3VuZHM9IjEsMiIgTmFtZT0iVmlzaWJsZUFuYWxQc2V1IiBBbGlhcz0i5ouf5Y6L5Yqb5pWw5o2uIiBJY29uPSJJbnB1dEZsdWlkIiAvPg0KICAgICAgICA8L0dyb3VwPg0KDQogICAgICAgIDxHcm91cCBOYW1lPSJObURlYnVnIiBBbGlhcz0i5qGG5p625rWL6K+VKERlYnVnKSI+DQogICAgICAgICAgICA8Q21kIElEPSI1OTk5IiBCb3VuZHM9IjAsMCwyLDEiIE5hbWU9Ik5tRGVidWciIEFsaWFzPSLmoYbmnrbku6PnoIHosIPor5UiIEljb249IlByZXBhcmVHcmlkIiAvPg0KICAgICAgICA8L0dyb3VwPg0KDQoNCiAgICA8L1RhYj4NCg0KICAgIDxUYWIgSUQ9IjQiIE5hbWU9Ik1pbmlGcmFjIiBBbGlhcz0i5bCP5Z6L5Y6L6KOCKEYpKERlYnVnKSIgPg0KDQogICAgICAgIDxHcm91cCBOYW1lPSJBbmFsRWRpdCIgQWxpYXM9IuWIhuaekOeuoeeQhiI+DQogICAgICAgICAgICA8Q21kIElEPSIzMDA2IiBCb3VuZHM9IjAsMCIgTmFtZT0iQW5hbE5ldyIgQWxpYXM9IuaWsOW7uuWIhuaekCIgSWNvbj0iSm9iTmV3IiAvPg0KICAgICAgICAgICAgPENtZCBJRD0iMzAwNyIgQm91bmRzPSIxLDAiIE5hbWU9IkFuYWxFZGl0IiBBbGlhcz0i5YiG5p6Q566h55CGIiBJY29uPSJKb2JFZGl0IiAvPg0KICAgICAgICA8L0dyb3VwPg0KDQogICAgICAgIDxHcm91cCBOYW1lPSJQQSIgQWxpYXM9IuWOi+mZjeWIhuaekCI+DQogICAgICAgICAgICA8Q21kIElEPSI0MDAyIiBCb3VuZHM9IjAsMCwzLDEiIE5hbWU9Ik1pbmlGckFuYWxQQSIgQWxpYXM9IuWOi+mZjeWHhuWkhyIgRXh0SW5mbz0iUEYiIEljb249IlBGIiAvPg0KICAgICAgICAgICAgPENtZCBJRD0iNDAwMyIgQm91bmRzPSIwLDEsMywxIiBOYW1lPSJNaW5pRnJQQSIgQWxpYXM9IuWOi+mZjeWIhuaekCIgSWNvbj0iRmxvd1BlcmlvZCIgLz4NCg0KICAgICAgICAgICAgPENtZCBJRD0iNDAwNCIgQm91bmRzPSIwLDIsMywxIiBOYW1lPSJDYWxTdWRkZW5TdG9wUCIgQWxpYXM9IueerOaXtuWBnOazteWOi+WKmyIgSWNvbj0iUnVuRXgiIC8+DQogICAgICAgICAgICA8Q21kIElEPSI0MDA1IiBCb3VuZHM9IjAsMyIgTmFtZT0iQ2FsR0Z1bmN0aW9uIiBBbGlhcz0iR+WHveaVsCIgSWNvbj0iUnVuT3RoZXIiIC8+DQogICAgICAgICAgICA8Q21kIElEPSI0MDA2IiBCb3VuZHM9IjEsMyIgTmFtZT0iQ2FsU3FydFQiIEFsaWFzPSLml7bpl7TlubPmlrnmoLkiIEljb249IlJ1bk90aGVyIiAvPg0KICAgICAgICAgICAgPENtZCBJRD0iNDAwNyIgQm91bmRzPSIyLDMiIE5hbWU9IkNhbExvZ0xvZyIgQWxpYXM9IuWPjOWvueaVsCIgSWNvbj0iUnVuT3RoZXIiIC8+DQogICAgICAgIDwvR3JvdXA+DQoNCg0KICAgICAgICA8R3JvdXAgTmFtZT0iRkEiIEFsaWFzPSLmjpLph4/liIbmnpAiPg0KICAgICAgICAgICAgPENtZCBJRD0iNDEwMiIgQm91bmRzPSIwLDAsMiwxIiBOYW1lPSJNaW5pRnJBbmFsRkEiIEFsaWFzPSLmjpLph4/lh4blpIciIEV4dEluZm89IklQUiIgSWNvbj0iTWluaUZyQW5hbEZBIiAvPg0KICAgICAgICAgICAgPENtZCBJRD0iNDEwMyIgQm91bmRzPSIwLDEiIE5hbWU9Ik1pbmlGckZBVXAiIEFsaWFzPSLpmLbmoq/ljYciIEljb249IlN0ZXBVcCIgLz4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjQxMDQiIEJvdW5kcz0iMSwxIiBOYW1lPSJNaW5pRnJGQURvd24iIEFsaWFzPSLpmLbmoq/pmY0iIEljb249IlN0ZXBEb3duIiAvPg0KICAgICAgIDwvR3JvdXA+DQoNCiAgICAgICAgPEdyb3VwIE5hbWU9IkpvYnMiIEFsaWFzPSLmiJDmnpznrqHnkIYiICBWaXNpYmxlPSIwIj4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjEwMDgiIEJvdW5kcz0iMCwwIiBOYW1lPSJSc3RMb2FkIiBBbGlhcz0i5Yqg6L295oiQ5p6cIiBJY29uPSJMb2FkSm9icyIgLz4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjEwMDkiIEJvdW5kcz0iMSwwIiBOYW1lPSJSc3RTYXZlIiBUeXBlPSIxIiBFeHROYW1lcz0iUnN0U2F2ZUN1cjtSc3RTYXZlQWxsIiBFeHRJbmZvPSLkv53lrZjlvZPliY3miJDmnpw75L+d5a2Y5omA5pyJ5oiQ5p6cIiBBbGlhcz0i5L+d5a2Y5oiQ5p6cIiBJY29uPSJTYXZlSm9icyIgLz4NCiAgICAgICAgPC9Hcm91cD4NCg0KICAgICAgICA8R3JvdXAgTmFtZT0iV2luZG93IiBBbGlhcz0i56qX5Y+j5pi+56S6IiAgVmlzaWJsZT0iMCI+DQogICAgICAgICAgICA8Q21kIElEPSI5MDAyIiBCb3VuZHM9IjAsMCIgTmFtZT0iVmlzaWJsZU1vZGVscyIgQWxpYXM9IuaooeWei+eql+WPoyIgSWNvbj0iVmlzaWJsZU1vZGVscyIgLz4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjkwMDMiIEJvdW5kcz0iMSwwIiBOYW1lPSJWaXNpYmxlUGFyYW1ldGVycyIgQWxpYXM9IuWPguaVsOeql+WPoyIgSWNvbj0iVmlzaWJsZVBhcmFtZXRlcnMiIC8+DQogICAgICAgICAgICA8Q21kIElEPSI5MTAxIiBCb3VuZHM9IjAsMSIgTmFtZT0iVmlzaWJsZUFuYWxCYXNpYyIgQWxpYXM9IuWfuuehgOS/oeaBryIgSWNvbj0iSW5wdXRCYXNpYyIgLz4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjkxMDIiIEJvdW5kcz0iMSwxIiBOYW1lPSJWaXNpYmxlQW5hbFBWVCIgQWxpYXM9IlBWVOaVsOaNriIgSWNvbj0iSW5wdXRGbHVpZCIgLz4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjkxMDMiIEJvdW5kcz0iMCwyIiBOYW1lPSJWaXNpYmxlQW5hbERpZmYiIEFsaWFzPSJESUZG5pWw5o2uIiBJY29uPSJJbnB1dEZsdWlkIiAvPg0KICAgICAgICAgICAgPENtZCBJRD0iOTEwNCIgQm91bmRzPSIxLDIiIE5hbWU9IlZpc2libGVBbmFsUHNldSIgQWxpYXM9IuaLn+WOi+WKm+aVsOaNriIgSWNvbj0iSW5wdXRGbHVpZCIgLz4NCiAgICAgICAgPC9Hcm91cD4NCg0KICAgIDwvVGFiPg0KDQogICAgPFRhYiBJRD0iNDAxIiBOYW1lPSJXRFQiIEFsaWFzPSLkuqfog73or5XkupUoUCkiID4NCg0KICAgICAgICA8R3JvdXAgTmFtZT0iQW5hbEVkaXQiIEFsaWFzPSLliIbmnpDnrqHnkIYiPg0KICAgICAgICAgICAgPENtZCBJRD0iMzAwNiIgQm91bmRzPSIwLDAiIE5hbWU9IkFuYWxOZXciIEFsaWFzPSLmlrDlu7rliIbmnpAiIEljb249IkpvYk5ldyIgLz4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjMwMDciIEJvdW5kcz0iMSwwIiBOYW1lPSJBbmFsRWRpdCIgQWxpYXM9IuWIhuaekOeuoeeQhiIgSWNvbj0iSm9iRWRpdCIgLz4NCiAgICAgICAgPC9Hcm91cD4NCg0KICAgICAgICA8R3JvdXAgTmFtZT0iSVBSIiBBbGlhcz0iSVBS5YWI5YmN5Y+C6ICDKERlYnVnKSI+DQogICAgICAgICAgICA8Q21kIElEPSI2MDAyIiBCb3VuZHM9IjAsMCwyLDEiIE5hbWU9IklQUkFuYWwiIEFsaWFzPSJJUFLlh4blpIciIEV4dEluZm89IklQUiIgSWNvbj0iSVBSQW5hbCIgLz4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjYwMDMiIEJvdW5kcz0iMCwxLDIsMSIgTmFtZT0iSVBSQ2FsIiBBbGlhcz0iSVBS6K6h566XIiBJY29uPSJJUFJDYWwiIC8+DQogICAgICAgIDwvR3JvdXA+DQoNCiAgICAgICAgPEdyb3VwIE5hbWU9IldkdERhdGFQcmVwcm9jZXNzIiBBbGlhcz0i5pWw5o2u6aKE5aSE55CGIiBWaXNpYmxlPSIwIj4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjYxMDEiIEJvdW5kcz0iMCwwLDIsMSIgTmFtZT0iV2R0RGF0YUFzc24iIEFsaWFzPSLmlbDmja7lvZLkuIDljJYiIEV4dEluZm89IldEVCIgSWNvbj0iSVBSQW5hbCIgIFZpc2libGU9IjAiLz4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjYxMDIiIEJvdW5kcz0iMCwxLDIsMSIgTmFtZT0iV2R0T3RoZXIiIEFsaWFzPSLlhbblroMiIEljb249IldkdE90aGVyIiBWaXNpYmxlPSIwIiAvPg0KICAgICAgICAgICAgPENtZCBJRD0iNjEwMyIgQm91bmRzPSIwLDMsMiwxIiBOYW1lPSJXZHRXTUYiIEFsaWFzPSLkupXnrZLlpJrnm7jmtYEiIEljb249IldkdFdNRiIgIFZpc2libGU9IjAiLz4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjYxMDQiIEJvdW5kcz0iMCw0LDIsMSIgTmFtZT0iV2R0Q2hva2UiIEFsaWFzPSLlmLTmtYEiIEljb249IldkdENob2tlIiAgVmlzaWJsZT0iMCIvPg0KICAgICAgICA8L0dyb3VwPg0KDQogICAgICAgIDxHcm91cCBOYW1lPSJJUFIiIEFsaWFzPSLkuqfog73liIbmnpAiPg0KICAgICAgICAgICAgPENtZCBJRD0iNjIwMSIgQm91bmRzPSIwLDAsMiwxIiBOYW1lPSJXZHRJUFJDYWwiIEV4dEluZm89IldEVCIgQWxpYXM9IuWCqOWxguS6p+iDveiuoeeulyIgSWNvbj0iSVBSQ2FsIiAvPg0KICAgICAgICAgICAgPENtZCBJRD0iNjIwMiIgQm91bmRzPSIwLDEsMiwxIiBOYW1lPSJXZWxsUGR0eSIgQWxpYXM9IuS4gOS9k+WMluS6p+iDvSIgSWNvbj0iV2VsbFBkdHkiICBWaXNpYmxlPSIwIiAvPg0KICAgICAgICAgICAgPENtZCBJRD0iNjIwMyIgQm91bmRzPSIwLDIsMiwxIiBOYW1lPSJXZHRJUFJFeHQiIEFsaWFzPSLkuqfog73or5XkupVb5omp5bGVXSIgSWNvbj0iSVBSRXh0Ii8+DQogICAgICAgICAgICA8Q21kIElEPSI2MjA0IiBCb3VuZHM9IjAsMywyLDEiIE5hbWU9IldkdElQUkFuYWwiIEFsaWFzPSLlgqjlsYLkuqfog73liIbmnpAiIEljb249IklQUkFuYWwiIC8+DQogICAgICAgICAgICA8Q21kIElEPSI2MjA1IiBCb3VuZHM9IjAsNCwyLDEiIE5hbWU9IldlbGxJbnRlZ0FuYWwiIEFsaWFzPSLnu7zlkIjliIbmnpAiIEljb249IldlbGxJbnRlZ0FuYWwiIFZpc2libGU9IjAiIC8+DQogICAgICAgIDwvR3JvdXA+DQoNCiAgICAgICAgPEdyb3VwIE5hbWU9IklQUiIgQWxpYXM9IuS6p+iDveiuoeeulyI+DQogICAgICAgICAgICA8Q21kIElEPSI2MzAxIiBCb3VuZHM9IjAsMCwyLDEiIE5hbWU9IldkdENhbCIgQWxpYXM9IuiuoeeulyIgRXh0SW5mbz0iV0RUIiBJY29uPSJSdW5FeCIgLz4NCiAgICAgICAgPC9Hcm91cD4NCg0KDQogICAgICAgIDxHcm91cCBOYW1lPSJKb2JzIiBBbGlhcz0i5oiQ5p6c566h55CGIj4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjEwMDgiIEJvdW5kcz0iMCwwIiBOYW1lPSJSc3RMb2FkIiBBbGlhcz0i5Yqg6L295oiQ5p6cIiBJY29uPSJMb2FkSm9icyIgLz4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjEwMDkiIEJvdW5kcz0iMSwwIiBOYW1lPSJSc3RTYXZlIiBUeXBlPSIxIiBFeHROYW1lcz0iUnN0U2F2ZUN1cjtSc3RTYXZlQWxsIiBFeHRJbmZvPSLkv53lrZjlvZPliY3miJDmnpw75L+d5a2Y5omA5pyJ5oiQ5p6cIiBBbGlhcz0i5L+d5a2Y5oiQ5p6cIiBJY29uPSJTYXZlSm9icyIgLz4NCiAgICAgICAgPC9Hcm91cD4NCg0KICAgICAgICA8R3JvdXAgTmFtZT0iV2luZG93IiBBbGlhcz0i56qX5Y+j5pi+56S6Ij4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjkwMDIiIEJvdW5kcz0iMCwwIiBOYW1lPSJWaXNpYmxlTW9kZWxzIiBBbGlhcz0i5qih5Z6L56qX5Y+jIiBJY29uPSJWaXNpYmxlTW9kZWxzIiAvPg0KICAgICAgICAgICAgPENtZCBJRD0iOTAwMyIgQm91bmRzPSIxLDAiIE5hbWU9IlZpc2libGVQYXJhbWV0ZXJzIiBBbGlhcz0i5Y+C5pWw56qX5Y+jIiBJY29uPSJWaXNpYmxlUGFyYW1ldGVycyIgLz4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjkxMDEiIEJvdW5kcz0iMCwxIiBOYW1lPSJWaXNpYmxlQW5hbEJhc2ljIiBBbGlhcz0i5Z+656GA5L+h5oGvIiBJY29uPSJJbnB1dEJhc2ljIiAgIFZpc2libGU9IjAiLz4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjkxMDIiIEJvdW5kcz0iMCwxIiBOYW1lPSJWaXNpYmxlQW5hbFBWVCIgQWxpYXM9IlBWVOaVsOaNriIgSWNvbj0iSW5wdXRGbHVpZCIgLz4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjkxMDMiIEJvdW5kcz0iMCwyIiBOYW1lPSJWaXNpYmxlQW5hbERpZmYiIEFsaWFzPSJESUZG5pWw5o2uIiBJY29uPSJJbnB1dEZsdWlkIiAgIFZpc2libGU9IjAiLz4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjkxMDQiIEJvdW5kcz0iMSwxIiBOYW1lPSJWaXNpYmxlQW5hbFBzZXUiIEFsaWFzPSLmi5/ljovlipvmlbDmja4iIEljb249IklucHV0Rmx1aWQiIC8+DQogICAgICAgIDwvR3JvdXA+DQoNCg0KICAgIDwvVGFiPg0KDQogICAgPFRhYiBJRD0iNiIgTmFtZT0iQWR2YW5jZWRGdW5jdGlvbiIgQWxpYXM9IuivleS6leiuvuiuoShYKSIgPg0KDQogICAgICAgIDxHcm91cCBOYW1lPSJEZXNpZ24iIEFsaWFzPSLor5XkupXorr7orqEiPg0KICAgICAgICAgICAgPENtZCBJRD0iNjAwMSIgQm91bmRzPSIwLDAsMiwxIiBOYW1lPSJUZXN0RGVzaWduIiBBbGlhcz0i6K+V5LqV6K6+6K6hIiBJY29uPSJUZXN0RGVzaWduIiBFeHRJbmZvPSJQRiIgIC8+DQogICAgICAgICAgICA8Q21kIElEPSIzMDA0IiBCb3VuZHM9IjAsMSwyLDEiIE5hbWU9IkFuYWxGbG93U2VnIiBBbGlhcz0i5rWB5Yqo5q615YiG5p6QIiBJY29uPSJGbG93UGVyaW9kIiAvPg0KICAgICAgICAgICAgPENtZCBJRD0iMzAwNSIgQm91bmRzPSIwLDIsMiwxIiBOYW1lPSJBbmFsT3RoZXJzIiBBbGlhcz0i54m55b6B5q615YiG5p6QIiBUeXBlPSIxIiBFeHROYW1lcz0iQ2hhcnRUO0NoYXJ0U3FydFQ7Q2hhcnQyNVQ7Q2hhcnQ1VCIgRXh0SW5mbz0iQ2hhcnQgVDtDaGFydCBTcXJ0KFQpO0NoYXJ0IDAuMjVUO0NoYXJ0IC0wLjVUIiBJY29uPSJBc3Npc0FuYWwiIC8+DQogICAgICAgICAgICA8Q21kIElEPSIzMDA5IiBCb3VuZHM9IjAsMywyLDEiIE5hbWU9IkFuYWxEaXN0cmkiIEFsaWFzPSLliIbluIPlm74iIFR5cGU9IjEiIEV4dE5hbWVzPSJDaGFydERlbjtDaGFydFZpcyIgRXh0SW5mbz0i5rWT5bqm5YiG5biD5Zu+O+m7j+W6puWIhuW4g+WbviIgSWNvbj0iQW5hbERpc3RyaSIgLz4NCg0KICAgICAgICA8L0dyb3VwPg0KDQogICAgICAgIDxHcm91cCBOYW1lPSJEYXRhRml0IiBBbGlhcz0i6Kej6YeK5ouf5ZCIIj4NCg0KICAgICAgICAgICAgPENtZCBJRD0iMzEwNSIgQm91bmRzPSIwLDAsMiwxIiBOYW1lPSJEZWNvbnZvbHYiIEFsaWFzPSLlj43opLbnp68iIEljb249IkRlY29udm9sdiIgVmlzaWJsZT0iMCIvPg0KICAgICAgICAgICAgPENtZCBJRD0iMzEwMSIgQm91bmRzPSIwLDEsMiwxIiBOYW1lPSJGaXRNb2RlbCIgQWxpYXM9Iuino+aekOinoyIgSWNvbj0iRml0TW9kZWwiIC8+DQogICAgICAgICAgICA8Q21kIElEPSIzMTA0IiBCb3VuZHM9IjAsMiwyLDEiIE5hbWU9Im5tRml0TW9kZWwiIEFsaWFzPSLmlbDlgLzop6MiIEljb249IkZpdE1vZGVsIiAvPg0KICAgICAgICAgICAgPENtZCBJRD0iMzEwMiIgQm91bmRzPSIwLDMsMiwxIiBOYW1lPSJBdXRvRml0IiBBbGlhcz0i6Ieq5Yqo5ouf5ZCIIiBJY29uPSJBdXRvRml0IiAvPg0KICAgICAgICAgICAgPENtZCBJRD0iMzEwMyIgQm91bmRzPSIwLDQsMiwxIiBOYW1lPSJQbGF0ZUZpdCIgQWxpYXM9IuaVj+aEn+aAp+WIhuaekCIgSWNvbj0iUGxhdGVGaXQiIC8+DQogICAgICAgPC9Hcm91cD4NCg0KICAgICAgICA8R3JvdXAgTmFtZT0iQUlUZXN0IiBBbGlhcz0i5pm66IO96K+V5LqVKERlYnVnKSI+DQogICAgICAgICAgICA8Q21kIElEPSIzOTAxIiBCb3VuZHM9IjAsMCwyLDEiIE5hbWU9Ik1vZGVsQ2xhc3NpZnkiIEFsaWFzPSLmqKHlnovor4bliKsiIEljb249Ik1vZGVsQ2xhc3NpZnkiIC8+DQogICAgICAgIDwvR3JvdXA+DQoNCiAgICAgICAgPEdyb3VwIE5hbWU9IlJlbGF0aXZlVG9vbCIgQWxpYXM9IuebuOWFs+W3peWFtyIgVmlzaWJsZT0iMCI+DQogICAgICAgICAgICA8Q21kIElEPSIzMjAxIiBCb3VuZHM9IjAsMCIgTmFtZT0iVGltZSIgQWxpYXM9IuaXtumXtCIgSWNvbj0iVGltZSIgLz4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjMyMDIiIEJvdW5kcz0iMSwwIiBOYW1lPSJTaG93TW9kZWxDaGFydHMiIEFsaWFzPSLmqKHlnosiIEljb249IlNob3dNb2RlbENoYXJ0cyIgLz4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjMyMDMiIEJvdW5kcz0iMCwxIiBOYW1lPSJTaG93TW9kZWxTa2V0Y2giIEFsaWFzPSLnkIborroiIEljb249IlNob3dNb2RlbFNrZXRjaCIgLz4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjMyMDQiIEJvdW5kcz0iMSwxIiBOYW1lPSJTYXZlQXNNb2RlbFNrZXRjaCIgQWxpYXM9IuWtmOS4uuekuuaEjyIgSWNvbj0iU2F2ZUFzTW9kZWxTa2V0Y2giIC8+ICAgICAgICAgICAgDQogICAgICAgPC9Hcm91cD4NCg0KICAgICAgICA8R3JvdXAgTmFtZT0iVG9vbFMiIEFsaWFzPSLmianlsZXlip/og70iICBWaXNpYmxlPSIwIj4NCiAgICAgICAgICAgIDxDbWQgSUQ9Ijk4MDEiIEJvdW5kcz0iMCwwLDIsMSIgTmFtZT0iRmxvd1RvUyIgQWxpYXM9Iua1gemHj+WPmOihqOeariIgSWNvbj0iRmxvd1RvUyIgLz4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjkyMDEiIEJvdW5kcz0iMCwxLDIsMSIgTmFtZT0iTWl4VmlzY29zaXR5IiBBbGlhcz0i5re35ZCI6buP5bqmIiBJY29uPSJNaXhWaXNjb3NpdHkiIC8+DQogICAgICAgPC9Hcm91cD4NCg0KICAgICAgICA8R3JvdXAgTmFtZT0iSm9icyIgQWxpYXM9IuaIkOaenOeuoeeQhiIgVmlzaWJsZT0iMCI+DQogICAgICAgICAgICA8Q21kIElEPSIxMDA4IiBCb3VuZHM9IjAsMCIgTmFtZT0iUnN0TG9hZCIgQWxpYXM9IuWKoOi9veaIkOaenCIgSWNvbj0iTG9hZEpvYnMiIC8+DQogICAgICAgICAgICA8Q21kIElEPSIxMDA5IiBCb3VuZHM9IjEsMCIgTmFtZT0iUnN0U2F2ZSIgVHlwZT0iMSIgRXh0TmFtZXM9IlJzdFNhdmVDdXI7UnN0U2F2ZUFsbCIgRXh0SW5mbz0i5L+d5a2Y5b2T5YmN5oiQ5p6cO+S/neWtmOaJgOacieaIkOaenCIgQWxpYXM9IuS/neWtmOaIkOaenCIgSWNvbj0iU2F2ZUpvYnMiIC8+DQogICAgICAgIDwvR3JvdXA+DQoNCiAgICAgICAgPEdyb3VwIE5hbWU9IldpbmRvdyIgQWxpYXM9Iueql+WPo+aYvuekuiIgVmlzaWJsZT0iMCI+DQogICAgICAgICAgICA8Q21kIElEPSI5MDAyIiBCb3VuZHM9IjAsMCIgTmFtZT0iVmlzaWJsZU1vZGVscyIgQWxpYXM9IuaooeWei+eql+WPoyIgSWNvbj0iVmlzaWJsZU1vZGVscyIgLz4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjkwMDMiIEJvdW5kcz0iMSwwIiBOYW1lPSJWaXNpYmxlUGFyYW1ldGVycyIgQWxpYXM9IuWPguaVsOeql+WPoyIgSWNvbj0iVmlzaWJsZVBhcmFtZXRlcnMiIC8+DQogICAgICAgICAgICA8Q21kIElEPSI5MTAxIiBCb3VuZHM9IjAsMSIgTmFtZT0iVmlzaWJsZUFuYWxCYXNpYyIgQWxpYXM9IuWfuuehgOS/oeaBryIgSWNvbj0iSW5wdXRCYXNpYyIgLz4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjkxMDIiIEJvdW5kcz0iMSwxIiBOYW1lPSJWaXNpYmxlQW5hbFBWVCIgQWxpYXM9IlBWVOaVsOaNriIgSWNvbj0iSW5wdXRGbHVpZCIgLz4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjkxMDMiIEJvdW5kcz0iMCwyIiBOYW1lPSJWaXNpYmxlQW5hbERpZmYiIEFsaWFzPSJESUZG5pWw5o2uIiBJY29uPSJJbnB1dEZsdWlkIiAvPg0KICAgICAgICAgICAgPENtZCBJRD0iOTEwNCIgQm91bmRzPSIxLDIiIE5hbWU9IlZpc2libGVBbmFsUHNldSIgQWxpYXM9IuaLn+WOi+WKm+aVsOaNriIgSWNvbj0iSW5wdXRGbHVpZCIgLz4NCiAgICAgICAgPC9Hcm91cD4NCg0KICAgIDwvVGFiPg0KDQogICAgPFRhYiBJRD0iNyIgTmFtZT0iQWlUZXN0IiBBbGlhcz0i5pm66IO96K+V5LqVKEkpIj4NCg0KICAgICAgICA8R3JvdXAgTmFtZT0iRGVtbzEiIEFsaWFzPSLmoLfkvovoj5zljZUxIj4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjcwMDEiIEJvdW5kcz0iMCwwLDIsMSIgTmFtZT0iQWN0aW9uTmFtZTEiIEFsaWFzPSLkuLTml7bmtYvor5UxIiBJY29uPSJUT0RPMSIgLz4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjcwMDIiIEJvdW5kcz0iMCwxLDIsMSIgTmFtZT0iQWN0aW9uTmFtZTIiIEFsaWFzPSLkuLTml7bmtYvor5UyIiBJY29uPSJUT0RPMiIgLz4NCiAgICAgICAgPC9Hcm91cD4NCg0KICAgICAgICA8R3JvdXAgTmFtZT0iRGVtbzIiIEFsaWFzPSLmoLfkvovoj5zljZUyIj4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjcxMDEiIEJvdW5kcz0iMCwwLDIsMSIgTmFtZT0iQWN0aW9uTmFtZTMiIEFsaWFzPSLkuLTml7bmtYvor5UzIiBJY29uPSJUT0RPMyIgLz4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjcxMDIiIEJvdW5kcz0iMCwxLDIsMSIgTmFtZT0iQWN0aW9uTmFtZTQiIEFsaWFzPSLkuLTml7bmtYvor5U0IiBJY29uPSJUT0RPNCIgLz4NCiAgICAgICAgPC9Hcm91cD4NCg0KICAgICAgICA8R3JvdXAgTmFtZT0iRGVtbzMiIEFsaWFzPSLmoLfkvovoj5zljZUzIj4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjcyMDEiIEJvdW5kcz0iMCwwLDIsMSIgTmFtZT0iQWN0aW9uTmFtZTQiIEFsaWFzPSLkuLTml7bmtYvor5U1IiBJY29uPSJUT0RPNSIgLz4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjcyMDIiIEJvdW5kcz0iMCwxLDIsMSIgTmFtZT0iQWN0aW9uTmFtZTUiIEFsaWFzPSLkuLTml7bmtYvor5U2IiBJY29uPSJUT0RPNiIgLz4NCiAgICAgICAgPC9Hcm91cD4NCg0KICAgICAgICA8R3JvdXAgTmFtZT0iTm1EZWJ1ZyIgQWxpYXM9Iuahhuaetua1i+ivlShEZWJ1ZykiPg0KICAgICAgICAgICAgPENtZCBJRD0iNzk5OSIgQm91bmRzPSIwLDAsMiwxIiBOYW1lPSJObURlYnVnIiBBbGlhcz0i5qGG5p625Luj56CB6LCD6K+VIiBJY29uPSJQcmVwYXJlR3JpZCIgLz4NCiAgICAgICAgPC9Hcm91cD4NCg0KDQoNCiAgICA8L1RhYj4NCg0KICAgIDxUYWIgSUQ9IjgiIE5hbWU9IlJlc3VsdCIgQWxpYXM9IuaIkOaenOeuoeeQhihSKSIgPg0KDQogICAgICAgIDxHcm91cCBOYW1lPSJKb2JzIiBBbGlhcz0i5oiQ5p6c566h55CGIj4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjEwMDgiIEJvdW5kcz0iMCwwIiBOYW1lPSJSc3RMb2FkIiBBbGlhcz0i5Yqg6L295oiQ5p6cIiBJY29uPSJMb2FkSm9icyIgLz4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjEwMDkiIEJvdW5kcz0iMSwwIiBOYW1lPSJSc3RTYXZlIiBUeXBlPSIxIiBFeHROYW1lcz0iUnN0U2F2ZUN1cjtSc3RTYXZlQWxsIiBFeHRJbmZvPSLkv53lrZjlvZPliY3miJDmnpw75L+d5a2Y5omA5pyJ5oiQ5p6cIiBBbGlhcz0i5L+d5a2Y5oiQ5p6cIiBJY29uPSJTYXZlSm9icyIgLz4NCiAgICAgICAgPC9Hcm91cD4NCg0KICAgICAgICA8R3JvdXAgTmFtZT0iUmVzQ29tcGFyZSIgQWxpYXM9IuaIkOaenOWvueavlCI+DQogICAgICAgICAgICA8Q21kIElEPSI4MDAzIiBCb3VuZHM9IjAsMCwyLDEiIE5hbWU9IlJlc0NvbXBhcmUiIEFsaWFzPSLmiJDmnpzlr7nmr5QiIEljb249IlJlc0NvbXBhcmUiICAvPg0KICAgICAgICA8L0dyb3VwPg0KDQogICAgICAgIDxHcm91cCBOYW1lPSJQcmludCIgQWxpYXM9IuaKpeWRiuaJk+WNsCI+DQogICAgICAgICAgICA8Q21kIElEPSI4MDAxIiBCb3VuZHM9IjAsMCIgTmFtZT0iUmVwb3J0Q29uZmlnIiBBbGlhcz0i5oql5ZGK6K6+572uIiBJY29uPSJyZXBvcnRDb25maWciICAvPg0KICAgICAgICAgICAgPENtZCBJRD0iODAwNCIgQm91bmRzPSIxLDAiIE5hbWU9IlByaW50UHJldmlldyIgQWxpYXM9IuaKpeWRiumihOiniCIgSWNvbj0iUHJlUHJpbnQiICAvPg0KICAgICAgICAgICAgPENtZCBJRD0iODAwMiIgQm91bmRzPSIwLDEiIE5hbWU9IlByaW50IiBBbGlhcz0i5omT5Y2wKOWQq1BERikiIEljb249IlByaW50IiAgLz4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjgwMDUiIEJvdW5kcz0iMSwxIiBOYW1lPSJFeHBvcnRXb3JkIiBBbGlhcz0i5a+85Ye6KFdvcmQpIiBJY29uPSJXb3JkMTYiICAvPg0KICAgICAgICA8L0dyb3VwPg0KDQogICAgICAgIDxHcm91cCBOYW1lPSJXaW5kb3ciIEFsaWFzPSLnqpflj6PmmL7npLoiIFZpc2libGU9IjAiPg0KICAgICAgICAgICAgPENtZCBJRD0iOTAwMyIgQm91bmRzPSIwLDAsMiwxIiBOYW1lPSJWaXNpYmxlUGFyYW1ldGVycyIgQWxpYXM9IuWPguaVsOeql+WPoyIgSWNvbj0iVmlzaWJsZVBhcmFtZXRlcnMiIC8+DQogICAgICAgICAgICA8Q21kIElEPSI5MDA0IiBCb3VuZHM9IjAsMSwyLDEiIE5hbWU9IlZpc2libGVQdHlzIiBBbGlhcz0i5bGe5oCn56qX5Y+jIiBJY29uPSJQcm9wZXJ0eVdpbmRvdyIgLz4NCg0KICAgICAgICA8L0dyb3VwPg0KDQogICAgPC9UYWI+DQoNCiAgICA8VGFiIElEPSI5IiBOYW1lPSJXaW5kb3ciIEFsaWFzPSLnqpflj6MoVykiID4NCg0KICAgICAgICA8R3JvdXAgTmFtZT0iV2luZG93IiBBbGlhcz0i5Z+65pysIj4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjkwMDEiIEJvdW5kcz0iMCwwLDIsMSIgTmFtZT0iVmlzaWJsZVByb2pUcmVlRGEiIEFsaWFzPSLpobnnm67moJEiIEljb249IlByb2pUcmVlIiAvPg0KICAgICAgICAgICAgPENtZCBJRD0iOTAwOCIgQm91bmRzPSIwLDEsMiwxIiBOYW1lPSJWaXNpYmxlUHJvalRyZWVKYiIgQWxpYXM9IuWIhuaekOagkSIgSWNvbj0iUHJvalRyZWUiIC8+DQogICAgICAgICAgICA8Q21kIElEPSI5MDA5IiBCb3VuZHM9IjAsMiwyLDEiIE5hbWU9IlZpc2libGVQcm9qVHJlZVJzIiBBbGlhcz0i5oiQ5p6c5qCRIiBJY29uPSJQcm9qVHJlZSIgLz4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjkwMDIiIEJvdW5kcz0iMCwzIiBOYW1lPSJWaXNpYmxlTW9kZWxzIiBBbGlhcz0i5qih5Z6L56qX5Y+jIiBJY29uPSJWaXNpYmxlTW9kZWxzIiAvPg0KICAgICAgICAgICAgPENtZCBJRD0iOTAwMyIgQm91bmRzPSIxLDMiIE5hbWU9IlZpc2libGVQYXJhbWV0ZXJzIiBBbGlhcz0i5Y+C5pWw56qX5Y+jIiBJY29uPSJWaXNpYmxlUGFyYW1ldGVycyIgLz4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjkwMDQiIEJvdW5kcz0iMCw0IiBOYW1lPSJWaXNpYmxlUHR5cyIgQWxpYXM9IuWxnuaAp+eql+WPoyIgSWNvbj0iUHJvcGVydHlXaW5kb3ciIC8+DQogICAgICAgICAgICA8Q21kIElEPSI5MDA1IiBCb3VuZHM9IjEsNCIgTmFtZT0iVmlzaWJsZUxvZ3MiIEFsaWFzPSLml6Xlv5fnqpflj6MiIEljb249IlZpc2libGVMb2dzIiAvPg0KICAgICAgICAgICAgPENtZCBJRD0iOTAwNiIgQm91bmRzPSIwLDUiIE5hbWU9IlN0YWNrZWRQcm9qZWN0IiBBbGlhcz0i6aG555uu56qX5L2TIiBJY29uPSJTdGFja2VkUHJvamVjdCIgLz4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjkwMDciIEJvdW5kcz0iMSw1IiBOYW1lPSJTdGFja2VkTWRpIiBBbGlhcz0i5YiG5p6Q56qX5L2TIiBJY29uPSJTdGFja2VkTWRpIiAvPg0KICAgICAgICA8L0dyb3VwPg0KDQogICAgICAgIDxHcm91cCBOYW1lPSJXaW5kb3dMYXlvdXQiIEFsaWFzPSLnqpflj6PluIPlsYAiPg0KICAgICAgICAgICAgPENtZCBJRD0iOTAxMSIgQm91bmRzPSIwLDAiIE5hbWU9IldpbmRvd0xheW91dEgiIEljb25Pbmx5PSIxIiBUaXBzPSLmsLTlubPluIPlsYAiIEljb249IldpbmRvd0xheW91dEgiIC8+DQogICAgICAgICAgICA8Q21kIElEPSI5MDEyIiBCb3VuZHM9IjEsMCIgTmFtZT0iV2luZG93TGF5b3V0ViIgSWNvbk9ubHk9IjEiIFRpcHM9IuerluebtOW4g+WxgCIgSWNvbj0iV2luZG93TGF5b3V0ViIgLz4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjkwMTMiIEJvdW5kcz0iMCwxIiBOYW1lPSJXaW5kb3dMYXlvdXRUIiBJY29uT25seT0iMSIgVGlwcz0i5bmz6ZO65biD5bGAIiBJY29uPSJXaW5kb3dMYXlvdXRUIiAvPg0KICAgICAgICAgICAgPENtZCBJRD0iOTAxNCIgQm91bmRzPSIxLDEiIE5hbWU9IldpbmRvd0xheW91dEMiIEljb25Pbmx5PSIxIiBUaXBzPSLmipjlj6DluIPlsYAiIEljb249IldpbmRvd0xheW91dEMiIC8+DQogICAgICAgIDwvR3JvdXA+DQoNCiAgICAgICAgPEdyb3VwIE5hbWU9IkNsb3NlIiBBbGlhcz0i5YWz6ZetIj4gICAgICAgIA0KICAgICAgICAgICAgPENtZCBJRD0iOTAyMSIgQm91bmRzPSIwLDAiIE5hbWU9IkNsb3NlQ3VyV25kIiBBbGlhcz0i5YWz6Zet5b2T5YmNIiBJY29uPSJDbG9zZUFsbFdpbmRvdyIgLz4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjkwMjIiIEJvdW5kcz0iMSwwIiBOYW1lPSJDbG9zZUFsbFduZHMiIEFsaWFzPSLlhbPpl63miYDmnIkiIEljb249IkNsb3NlQWxsV2luZG93IiAvPg0KICAgICAgICAgICAgPENtZCBJRD0iOTAyMyIgQm91bmRzPSIwLDEiIE5hbWU9IlByZXZXbmQiIEFsaWFzPSLkuIrkuIDkuKoiIEljb25Pbmx5PSIxIiBJY29uPSJVcCIgVGlwcz0i5LiK5LiA5Liq56qX5L2TIiAvPg0KICAgICAgICAgICAgPENtZCBJRD0iOTAyNCIgQm91bmRzPSIxLDEiIE5hbWU9Ik5leHRXbmQiIEFsaWFzPSLkuIvkuIDkuKoiIEljb25Pbmx5PSIxIiBJY29uPSJEb3duIiBUaXBzPSLkuIvkuIDkuKrnqpfkvZMiIC8+DQogICAgICAgICAgICA8Q21kIElEPSI5MDI1IiBCb3VuZHM9IjAsMiwyLDEiIFR5cGU9IjciIE5hbWU9Ikxpc3RXeFduZHMiIEFsaWFzPSLnqpfkvZMiIC8+DQogICAgICAgIDwvR3JvdXA+DQoNCiAgICA8L1RhYj4NCg0KICAgIDxUYWIgSUQ9IjEwIiBOYW1lPSJIZWxwIiBBbGlhcz0i5biu5YqpKEgpIiA+DQoNCiAgICAgICAgPEdyb3VwIE5hbWU9IkhlbHAiIEFsaWFzPSLluK7liqkiPg0KICAgICAgICAgICAgPENtZCBJRD0iMTAwMDEiIEJvdW5kcz0iMCwwLDIsMSIgTmFtZT0iTG9nVmlldyIgQWxpYXM9IuaXpeW/l+afpeeciyhMKSIgSWNvbj0iTG9nVmlldyIgLz4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjEwMDAyIiBCb3VuZHM9IjAsMSwyLDEiIE5hbWU9IkhlbHAiIEFsaWFzPSLluK7liqkoSCkiIEljb249IkhlbHAiIC8+DQogICAgICAgICAgICA8Q21kIElEPSIxMDAwOCIgQm91bmRzPSIwLDIsMiwxIiBOYW1lPSJVcGRhdGVMaXN0cyIgQWxpYXM9IuabtOaWsOWIl+ihqChJKSIgSWNvbj0iVXBkYXRlTGlzdHMiIC8+DQogICAgICAgIDwvR3JvdXA+DQoNCiAgICAgICAgPEdyb3VwIE5hbWU9IkxhbmciIEFsaWFzPSLor63oqIAiPg0KICAgICAgICAgICA8Q21kIElEPSIxMDAwOSIgQm91bmRzPSIwLDAsMiwxIiBOYW1lPSJMYW5nU3dhcCIgQWxpYXM9IuWIh+aNouivreiogCIgSWNvbj0iTGFuZ1N3YXAiIC8+DQogICAgICAgIDwvR3JvdXA+DQoNCiAgICAgICAgPEdyb3VwIE5hbWU9IkFib3V0IiBBbGlhcz0i5YWz5LqOIj4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjEwMDAzIiBCb3VuZHM9IjAsMCwyLDEiIE5hbWU9IkFib3V0IiBBbGlhcz0i5YWz5LqOKEEpIiBJY29uPSJXVEFJQWJvdXQiIC8+DQogICAgICAgICAgICA8Q21kIElEPSIxMDAwNCIgQm91bmRzPSIxLDAiIE5hbWU9IkFib3V0UXQiIEFsaWFzPSLlhbPkuo5RdChRKSIgSWNvbj0iUXQiIFZpc2libGU9IjAiIC8+DQogICAgICAgIDwvR3JvdXA+DQoNCiAgICAgICAgPEdyb3VwIE5hbWU9IkxvZ2luIiBBbGlhcz0i55m75b2VKERlYnVnKSI+DQogICAgICAgICAgICA8Q21kIElEPSIxMDAwNyIgQm91bmRzPSIwLDAiIE5hbWU9IlJlZ2lzdGVyIiBBbGlhcz0iKERlYnVnKei9r+S7tuazqOWGjChSKSIgSWNvbj0iUmVnaXN0ZXIiIC8+DQogICAgICAgICAgICA8Q21kIElEPSIxMDAwNSIgQm91bmRzPSIxLDAiIE5hbWU9IkxvZ2luIiBBbGlhcz0iKERlYnVnKeeUqOaIt+eZu+W9lShVKSIgSWNvbj0iTG9naW4iIC8+DQogICAgICAgIDwvR3JvdXA+DQoNCiAgICAgICAgPEdyb3VwIE5hbWU9IkRlYnVnIiBBbGlhcz0i6LCD6K+VKERlYnVnKSI+DQogICAgICAgICAgICA8Q21kIElEPSIxMDAwNiIgQm91bmRzPSIwLDAsMiwxIiBOYW1lPSIoRGVidWcpIFN1bSBQYXJhbWV0ZXJzIiBBbGlhcz0iKERlYnVnKeaxh+aAu+aooeWei+WPguaVsCIgSWNvbj0iU3VtUGFyYSIgLz4NCiAgICAgICA8L0dyb3VwPg0KICAgIDwvVGFiPg0KDQo8L1JpYmJvbj4NCg==
\ No newline at end of file
diff --git a/Bin/Config/Common/MenuDefines_Ribbon_en.dat b/Bin/Config/Common/MenuDefines_Ribbon_en.dat
index 154151c..d5725ff 100644
--- a/Bin/Config/Common/MenuDefines_Ribbon_en.dat
+++ b/Bin/Config/Common/MenuDefines_Ribbon_en.dat
@@ -1 +1 @@
-77u/PD94bWwgcup_mpadmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4NCg0KPCEtLSDnvJbovpHkvbwzy/nlKggWE1MU3B5IHYyMDA2IFUgKGh0dHA6Ly93d3cuYWx0b3ZhLmNvbSkg55SxIGFueSAoYW55KSAtLT4NCjwhLS0qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLS0+DQo8IS0tICAgIOacrOaWh+aho+eahOebrueahOaYr+W7uueri1dUQUnova/ku7bns7vnu5/nmoToj5zljZXlsYLmrKHlhbPns7so6ZKI5a+5UmliYm9u5qih5byPKSAgICAgICAgICAgICAgICAgICAgICAgLS0+DQo8IS0tICAgIEF1dGhvcihzKTogd2FuZ3pnICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPg0KPCEtLSAgICBEYXRlOiAyMDI0MDcxOCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLT4NCjwhLS0qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLS0+DQoNCjwhLS0qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLS0+DQo8IS0tDQogICAgVGFiIOe6p+WIqw0KICAgICAgICBJRDogICAgICAgICAg5ZSv5LiA5qCH6K+GDQogICAgICAgIE5hbWXvvJogICAgICAg5ZCN56ew77yM6YCa5bi46Iux5paHDQogICAgICAgIEFsaWFz77yaICAgICAg5Yir5ZCN77yM6YCa5bi45Lit5paHDQogICAgICAgIEZpbGVNb2RlOiAgICDmmK/lkKbmlofku7ZNZW515qih5byP77yMMSBvciAwDQogICAgICAgIFZpc2libGXvvJogICAg5piv5ZCm5Y+v6KeB77yMMSBvciAwDQogICAgICAgIFRpcHPvvJogICAgICAg6L6F5Yqp6K+05piODQoNCiAgICAgICAgR3JvdXAg57qn5YirDQogICAgICAgICAgICBOYW1l77yaICAgICAgIOWQjeensO+8jOmAmuW4uOiLseaWhw0KICAgICAgICAgICAgQWxpYXPvvJogICAgICDliKvlkI3vvIzpgJrluLjkuK3mlocNCg0KICAgICAgICAgICAgQ21kIOe6p+WIqw0KICAgICAgICAgICAgICAgIElEOiAgICAgICAgICDllK/kuIDmoIfor4YNCiAgICAgICAgICAgICAgICBUeXBlOiAgICAgICAg5a+55bqU5o6n5Lu257G75Z6LOg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAw4oCU4oCU6buY6K6kQnV0dG9uDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIDHigJTigJTluKbkuIvmi4noj5zljZVCdXR0b24NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMuKAlOKAlENvbWJvQm94DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIDPigJTigJRDaGVja0JveA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICA04oCU4oCUUmFkaW9CdXR0b24NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNeKAlOKAlFRleHQNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNuKAlOKAlExhYmVsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIDfigJTigJRMaXN0V2lkZ2V0DQogICAgICAgICAgICAgICAgTmFtZe+8miAgICAgICDlkI3np7DvvIzpgJrluLjoi7HmlocNCiAgICAgICAgICAgICAgICBBbGlhc++8miAgICAgIOWIq+WQje+8jOmAmuW4uOS4reaWhw0KICAgICAgICAgICAgICAgIEljb27vvJogICAgICAg5Zu+5qCHDQogICAgICAgICAgICAgICAgU2hvcnRLZXnvvJogICDlv6vmjbfplK4NCiAgICAgICAgICAgICAgICBCb3VuZHM6ICAgICAg5L2N572u5L+h5oGv77yM5YWo5piv5pW05pWw77yM5ZyoR3JpZExheW91dOS4rQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMCwwLDEsMikgKDAsMCkg5YiG5Yir5Li6eHl3aA0KICAgICAgICAgICAgICAgIEV4dEluZm86ICAgICDmianlsZXkv6Hmga/vvIzlpoLmk43kvZzlr7nosaHnmoTooajlkI0s5LiL5ouJ6YCJ6aG5562JDQogICAgICAgICAgICAgICAgRXh0TmFtZXM6ICAgIOaJqeWxleS/oeaBr+WvueW6lOeahE5hbWXvvIzlpoLkuIvmi4lidXR0b27lr7nlupTnmoROYW1lDQogICAgICAgICAgICAgICAgVGlwc++8miAgICAgICDovoXliqnor7TmmI4NCi0tPg0KPCEtLSoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiotLT4NCg0KPFJpYmJvbj4NCg0KICAgIDxUYWIgSUQ9IjEiIE5hbWU9IlByb2pNYW5hZ2VyIiBBbGlhcz0iUHJvaiBNYW5hZ2VyIiBGaWxlTW9kZT0iMSIgPg0KDQogICAgICAgIDxHcm91cCBOYW1lPSJQcm9qZWN0IiBBbGlhcz0iRmlsZSI+DQogICAgICAgICAgICA8Q21kIElEPSIxMDAwIiBOYW1lPSJBcHBIb21lIiBBbGlhcz0iIiBJY29uPSJBcHBIb21lMTI4IiAvPg0KICAgICAgICAgICAgPENtZCBJRD0iLTEiIE5hbWU9IlNlcGFyYXRvciIgQWxpYXM9IlNlcGFyYXRvciIgVGlwcz0iIiAvPg0KICAgICAgICAgICAgPENtZCBJRD0iMTAwMSIgTmFtZT0iUHJvak5ldyIgQWxpYXM9Ik5ldyBwcm9qZWN0IiBTaG9ydEtleT0iQ3RybCtOIiBJY29uPSJOZXdQcm9qIiAvPg0KICAgICAgICAgICAgPENtZCBJRD0iMTAwMiIgTmFtZT0iUHJvak9wZW4iIEFsaWFzPSJPcGVuIHByb2plY3QiIFNob3J0S2V5PSJDdHJsK08iIEljb249Ik9wZW5Qcm9qIiAvPg0KICAgICAgICAgICAgPENtZCBJRD0iMTAwMyIgTmFtZT0iUHJvakNsb3NlIiBBbGlhcz0iQ2xvc2UgcHJvamVjdCIgSWNvbj0iQ2xvc2VQcm9qIiAvPg0KICAgICAgICAgICAgPENtZCBJRD0iLTEiIE5hbWU9IlNlcGFyYXRvciIgQWxpYXM9IlNlcGFyYXRvciIgVGlwcz0iIiAvPg0KICAgICAgICAgICAgPENtZCBJRD0iMTAwNSIgTmFtZT0iUHJvalNhdmUiIEFsaWFzPSJTYXZlIHByb2plY3QiIFNob3J0S2V5PSJDdHJsK1MiIEljb249IlNhdmVQcm9qIiAvPg0KICAgICAgICAgICAgPENtZCBJRD0iMTAwNiIgTmFtZT0iUHJvalNhdmVBcyIgQWxpYXM9IlNhdmUgcHJvamVjdCBhcyIgSWNvbj0iU2F2ZWFzIiAvPg0KICAgICAgICAgICAgPENtZCBJRD0iMTAwNyIgTmFtZT0iUHJvakNvbmZpZyIgQWxpYXM9IlByb2plY3RJbmZvIiBJY29uPSJQcm9qSW5mbyIgLz4NCg0KICAgICAgICAgICAgPENtZCBJRD0iLTEiIE5hbWU9IlNlcGFyYXRvciIgQWxpYXM9IlNlcGFyYXRvciIgVGlwcz0iIiAvPg0KICAgICAgICAgICAgPENtZCBJRD0iMTAwMDIiIE5hbWU9IkhlbHAiIEFsaWFzPSJIZWxwIiBJY29uPSJIZWxwIiAvPg0KICAgICAgICAgICAgPENtZCBJRD0iMTAwMDMiIE5hbWU9IkFib3V0IiBBbGlhcz0iQWJvdXQiIEljb249IldUQUlBYm91dCIgLz4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjEwMDA4IiBOYW1lPSJVcGRhdGVMaXN0cyIgQWxpYXM9IlVwZGF0ZSBsaXN0cyIgSWNvbj0iVXBkYXRlTGlzdHMiIC8+DQogICAgICAgICAgICA8Q21kIElEPSItMSIgTmFtZT0iU2VwYXJhdG9yIiBBbGlhcz0iU2VwYXJhdG9yIiBUaXBzPSIiIC8+DQogICAgICAgICAgICA8Q21kIElEPSIxMDEwIiBOYW1lPSJBcHBRdWl0IiBBbGlhcz0iUXVpdChYKSIgSWNvbj0iQ2xvc2UiIC8+DQogICAgICAgIDwvR3JvdXA+DQogICAgPC9UYWI+DQoNCiAgICA8VGFiIElEPSIwIiBOYW1lPSJXZWxDb21lIiBBbGlhcz0iU3RhcnQiID4NCg0KICAgICAgICA8R3JvdXAgTmFtZT0iRGF0YU1hbmFnZXIiIEFsaWFzPSJEYXRhIj4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjEwOTkiIEJvdW5kcz0iMCwwLDIsMSIgTmFtZT0iV2VsbE5ldyIgQWxpYXM9Ik5ldyB3ZWxsIiBJY29uPSJXZWxsTmV3IiAvPg0KICAgICAgICAgICAgPENtZCBJRD0iMjAwNSIgQm91bmRzPSIwLDEsMiwxIiBOYW1lPSJEYXRhUmF0ZSIgQWxpYXM9IlJhdGUiIEV4dEluZm89IlBfREFUQV9HQVVHRV9GIiBJY29uPSJSYXRlRGF0YSIgLz4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjIwMDYiIEJvdW5kcz0iMCwyLDIsMSIgTmFtZT0iRGF0YVByZSIgQWxpYXM9IlByZXNzdXJlIiBFeHRJbmZvPSJQX0RBVEFfR0FVR0VfUCIgSWNvbj0iUHJlc3N1cmVEYXRhIiAvPg0KICAgICAgICA8L0dyb3VwPg0KDQogICAgICAgIDxHcm91cCBOYW1lPSJBbmFsRWRpdCIgQWxpYXM9IkFuYWwiPg0KICAgICAgICAgICAgPENtZCBJRD0iMzAwNiIgQm91bmRzPSIwLDAsMiwxIiBOYW1lPSJBbmFsTmV3IiBBbGlhcz0iTmV3IGFuYWx5c2lzIiBJY29uPSJKb2JOZXciIC8+DQogICAgICAgICAgICA8Q21kIElEPSIzMDA3IiBCb3VuZHM9IjAsMSwyLDEiIE5hbWU9IkFuYWxFZGl0IiBBbGlhcz0iTWFuYWdpbmciIEljb249IkpvYkVkaXQiIFZpc2libGU9IjAiIC8+DQogICAgICAgICAgICA8Q21kIElEPSI5MTAxIiBCb3VuZHM9IjAsMSIgTmFtZT0iVmlzaWJsZUFuYWxCYXNpYyIgQWxpYXM9IkJhc2ljIGluZm8iIEljb249IklucHV0QmFzaWMiIC8+DQogICAgICAgICAgICA8Q21kIElEPSI5MTAyIiBCb3VuZHM9IjEsMSIgTmFtZT0iVmlzaWJsZUFuYWxQVlQiIEFsaWFzPSJQVlQgaW5mbyIgSWNvbj0iSW5wdXRGbHVpZCIgLz4NCiAgICAgICAgPC9Hcm91cD4NCg0KICAgICAgICA8R3JvdXAgTmFtZT0iQW5hbHl0aWNhbCIgQWxpYXM9IkZsb3cgcGVyaW9kIGFuYWwiPg0KICAgICAgICAgICAgPENtZCBJRD0iMzAwMyIgQm91bmRzPSIwLDAsMiwxIiBOYW1lPSJBbmFsUEYiIEFsaWFzPSJQZXJpb2Qgc2VsZWN0IiBFeHRJbmZvPSJQRiIgSWNvbj0iUEYiIC8+DQogICAgICAgICAgICA8Q21kIElEPSIzMDA0IiBCb3VuZHM9IjAsMSwyLDEiIE5hbWU9IkFuYWxGbG93U2VnIiBBbGlhcz0iUGVyaW9kIGFuYWwiIEljb249IkZsb3dQZXJpb2QiIC8+DQogICAgICAgIDwvR3JvdXA+DQoNCiAgICAgICAgPEdyb3VwIE5hbWU9IkFuYWx5dGljYWwiIEFsaWFzPSJJbnRlcnByZXRhdGlvbiBGaXR0aW5nIj4NCg0KICAgICAgICAgICAgPENtZCBJRD0iMzEwNSIgQm91bmRzPSIwLDAsMiwxIiBOYW1lPSJEZWNvbnZvbHYiIEFsaWFzPSJEZWNvbnZvbHV0aW9uIiBJY29uPSJEZWNvbnZvbHYiIFZpc2libGU9IjAiIC8+DQogICAgICAgICAgICA8Q21kIElEPSIzMTAxIiBCb3VuZHM9IjAsMSwyLDEiIE5hbWU9IkZpdE1vZGVsIiBBbGlhcz0iQW5hbHl0aWNhbCIgSWNvbj0iRml0TW9kZWwiIC8+DQogICAgICAgICAgICA8Q21kIElEPSIzMTA0IiBCb3VuZHM9IjAsMiwyLDEiIE5hbWU9Im5tRml0TW9kZWwiIEFsaWFzPSJOdW1lcmljYWwiIEljb249IkZpdE1vZGVsIiAvPg0KDQogICAgICAgICAgICA8Q21kIElEPSIzMTAyIiBCb3VuZHM9IjAsMywyLDEiIE5hbWU9IkF1dG9GaXQiIEFsaWFzPSJGaXR0aW5nIiBJY29uPSJBdXRvRml0IiAvPg0KICAgICAgIDwvR3JvdXA+DQoNCiAgICAgICAgPEdyb3VwIE5hbWU9Ik51bWVyaWNhbCIgQWxpYXM9Ikdlb2xvZ2ljYWwgTW9kZWxpbmcoRGVidWcpIiBWaXNpYmxlPSIwIj4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjUwMDIiIEJvdW5kcz0iMCwwLDIsMSIgTmFtZT0iUHJvcGVydHlMb2FkIiBBbGlhcz0iUHJvcGVydHkgSW1wb3J0IiBJY29uPSJQcmVwYXJlR3JpZCIgLz4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjUxMDIiIEJvdW5kcz0iMCwxLDIsMSIgTmFtZT0iUnVuR3JpZCIgQWxpYXM9IkdyaWQgR2VuZXJhdGlvbiIgSWNvbj0iUGxhdGVGaXQiIC8+DQogICAgICAgICAgICA8Q21kIElEPSI1MjAxIiBCb3VuZHM9IjAsMiwyLDEiIE5hbWU9IkFuYWxNYXAiIEFsaWFzPSJDYWxjdWxhdGlvbiIgSWNvbj0iUnVuRXgiIC8+DQogICAgICAgICAgICA8Q21kIElEPSI1MjAyIiBCb3VuZHM9IjAsMywyLDEiIE5hbWU9IkFuYWxQRiIgQWxpYXM9IkF1eGlsaWFyeSBGaXR0aW5nIiBFeHRJbmZvPSJQRiIgSWNvbj0iUnVuT3RoZXIiIFZpc2libGU9IjAiLz4NCiAgICAgICA8L0dyb3VwPg0KDQogICAgICAgIDxHcm91cCBOYW1lPSJXZWxsTWFwIiBBbGlhcz0iV2VsbCBNYXAiPg0KICAgICAgICAgICAgPENtZCBJRD0iMzAwOCIgQm91bmRzPSIwLDAsMiwxIiBOYW1lPSJBbmFsTWFwIiBBbGlhcz0iTWFwIiBJY29uPSJNYXAyRCIgVmlzaWJsZT0iMSIgLz4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjMwMTgiIEJvdW5kcz0iMCwxLDIsMSIgTmFtZT0iQW5hbEludGVyZmVyZSIgQWxpYXM9IkludGVyZmVyZW5jZSBTZXR0aW5nIiBJY29uPSJNYXAyRCIgVmlzaWJsZT0iMCIgLz4NCiAgICAgICAgPC9Hcm91cD4NCg0KICAgICAgICA8R3JvdXAgTmFtZT0iV2luZG93IiBBbGlhcz0iV2luZG93IERpc3BsYXkoRGVidWcpIiBWaXNpYmxlPSIwIiA+DQogICAgICAgICAgICA8Q21kIElEPSI5MDAyIiBCb3VuZHM9IjAsMCIgTmFtZT0iVmlzaWJsZU1vZGVscyIgQWxpYXM9Ik1vZGVsIFdpbmRvdyIgSWNvbj0iVmlzaWJsZU1vZGVscyIgLz4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjkwMDMiIEJvdW5kcz0iMSwwIiBOYW1lPSJWaXNpYmxlUGFyYW1ldGVycyIgQWxpYXM9IlBhcmFtZXRlciBXaW5kb3ciIEljb249IlZpc2libGVQYXJhbWV0ZXJzIiAvPg0KICAgICAgICAgICAgPENtZCBJRD0iOTEwMSIgQm91bmRzPSIwLDEiIE5hbWU9IlZpc2libGVBbmFsQmFzaWMiIEFsaWFzPSJCYXNpYyBJbmZvIiBJY29uPSJJbnB1dEJhc2ljIiAvPg0KICAgICAgICAgICAgPENtZCBJRD0iOTEwMiIgQm91bmRzPSIxLDEiIE5hbWU9IlZpc2libGVBbmFsUFZUIiBBbGlhcz0iUFZUIERhdGEiIEljb249IklucHV0Rmx1aWQiIC8+DQogICAgICAgICAgICA8Q21kIElEPSI5MTAzIiBCb3VuZHM9IjAsMiIgTmFtZT0iVmlzaWJsZUFuYWxEaWZmIiBBbGlhcz0iRElGRiBEYXRhIiBJY29uPSJJbnB1dEZsdWlkIiAvPg0KICAgICAgICAgICAgPENtZCBJRD0iOTEwNCIgQm91bmRzPSIxLDIiIE5hbWU9IlZpc2libGVBbmFsUHNldSIgQWxpYXM9IlBzZXVkbyBQcmVzc3VyZSBEYXRhIiBJY29uPSJJbnB1dEZsdWlkIiAvPg0KICAgICAgICA8L0dyb3VwPg0KDQogICAgICAgIDxHcm91cCBOYW1lPSJIZWxwIiBBbGlhcz0iSGVscCI+DQogICAgICAgICAgICA8Q21kIElEPSIxMDAwMiIgQm91bmRzPSIwLDAsMiwxIiBOYW1lPSJIZWxwIiBBbGlhcz0iSGVscCIgSWNvbj0iSGVscCIgLz4NCiAgICAgICAgPC9Hcm91cD4NCg0KICAgIDwvVGFiPg0KDQoNCiAgICA8VGFiIElEPSIyIiBOYW1lPSJEYXRhTWFuYWdlciIgQWxpYXM9IkRhdGEgTWFuYWdlciIgPg0KDQogICAgICAgIDxHcm91cCBOYW1lPSJEYXRhTWFuYWdlciIgQWxpYXM9IldlbGwiPg0KICAgICAgICAgICAgPENtZCBJRD0iMTA5OSIgQm91bmRzPSIwLDAsMiwxIiBOYW1lPSJXZWxsTmV3IiBBbGlhcz0iTmV3IFdlbGwoVykiIEljb249IldlbGxOZXciIC8+DQogICAgICAgIDwvR3JvdXA+DQoNCiAgICAgICAgPEdyb3VwIE5hbWU9IkRhdGFNYW5hZ2VyIiBBbGlhcz0iQmFzaWMgRGF0YSI+DQogICAgICAgICAgICA8Q21kIElEPSIyMDAxIiBCb3VuZHM9IjAsMCwyLDEiIE5hbWU9IkRhdGFXZWxsQmFzaWMiIEFsaWFzPSJXZWxsIEJhc2ljIERhdGEoQikiIEV4dEluZm89IkJfV0VMTCIgSWNvbj0iQmFzaWNEYXRhIiAvPg0KICAgICAgICAgICAgPENtZCBJRD0iMjAwMiIgQm91bmRzPSIwLDEsMiwxIiBOYW1lPSJEYXRhTGF5ZXIiIEFsaWFzPSJHZW9sb2dpY2FsIExheWVyIERhdGEoTCkiIEV4dEluZm89IkJfTEFZRVIiIEljb249IkxheWVyRGF0YSIgLz4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjIwMDMiIEJvdW5kcz0iMCwyLDIsMSIgTmFtZT0iRGF0YVJlcyIgQWxpYXM9IlJlc2Vydm9pciBEYXRhKFIpIiBFeHRJbmZvPSJQX0RBVEFfUkVTIiBJY29uPSJSZXNEYXRhIiAvPg0KICAgICAgICAgICAgPENtZCBJRD0iMjAwNCIgQm91bmRzPSIwLDMsMiwxIiBOYW1lPSJEYXRhRmx1IiBBbGlhcz0iRmx1aWQgUHJvcGVydHkgRGF0YShGKSIgRXh0SW5mbz0iUF9EQVRBX0ZMVUlEIiBJY29uPSJGbHVpZFByb3BlcnR5IiAvPg0KICAgICAgICA8L0dyb3VwPg0KDQogICAgICAgIDxHcm91cCBOYW1lPSJEYXRhTWFuYWdlciIgQWxpYXM9IlByZXNzdXJlIFJhdGUiPg0KICAgICAgICAgICAgPENtZCBJRD0iMjAwNSIgQm91bmRzPSIwLDAsMiwxIiBOYW1lPSJEYXRhUmF0ZSIgQWxpYXM9IlJhdGUgRGF0YShRKSIgRXh0SW5mbz0iUF9EQVRBX0dBVUdFX0YiIEljb249IlJhdGVEYXRhIiAvPg0KICAgICAgICAgICAgPENtZCBJRD0iMjAwNiIgQm91bmRzPSIwLDEsMiwxIiBOYW1lPSJEYXRhUHJlIiBBbGlhcz0iUHJlc3N1cmUgRGF0YShQKSIgRXh0SW5mbz0iUF9EQVRBX0dBVUdFX1AiIEljb249IlByZXNzdXJlRGF0YSIgLz4NCiAgICAgICAgPC9Hcm91cD4NCg0KICAgICAgICA8R3JvdXAgTmFtZT0iR1g2IiBBbGlhcz0iUGxhdGZvcm0gSW50ZXJvcGVyYWJpbGl0eSI+DQogICAgICAgICAgICA8Q21kIElEPSIyMDA3IiBCb3VuZHM9IjAsMCwyLDEiIE5hbWU9Ikd4NkNvbm5lY3RTZXJ2ZXIiIEFsaWFzPSJHWDYgSW50ZXJvcGVyYWJpbGl0eShDKSIgSWNvbj0iR3g2Q29ubmVjdFNlcnZlciIgLz4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjIwMDgiIEJvdW5kcz0iMCwxLDIsMSIgTmFtZT0iR3g2R2V0VGFza3MiIEFsaWFzPSJHZXQgVGFza3MoRCkiIEljb249Ikd4NkdldFRhc2tzIiAgVmlzaWJsZT0iMCIvPg0KICAgICAgICAgICAgPENtZCBJRD0iMjAwOSIgQm91bmRzPSIwLDIsMiwxIiBOYW1lPSJHeDZVcGRhdGVUYXNrcyIgQWxpYXM9IlVwZGF0ZSBTdGF0dXMoVSkiIEljb249Ikd4NlVwZGF0ZVRhc2tzIiAgVmlzaWJsZT0iMCIvPg0KICAgICAgICA8L0dyb3VwPg0KDQogICAgPC9UYWI+DQoNCiAgICA8VGFiIElEPSIyMDEiIE5hbWU9IkRhdGFFZGl0IiBBbGlhcz0iRGF0YSBFZGl0IiA+DQogICAgICAgIDxHcm91cCBOYW1lPSJEYXRhRWRpdCIgQWxpYXM9IkRhdGEgRWRpdGluZyI+DQogICAgICAgICAgICA8Q21kIElEPSIzMDAxIiBCb3VuZHM9IjAsMCwyLDEiIE5hbWU9IkFuYWxGbHUiIEFsaWFzPSJSYXRlIEVkaXRpbmciIEV4dEluZm89IkYiIE1kaVR5cGU9IkRhdGFFZGl0IiBJY29uPSJSYXRlRGF0YSIgLz4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjMwMDIiIEJvdW5kcz0iMCwxLDIsMSIgTmFtZT0iQW5hbFByZXNzIiBBbGlhcz0iUHJlc3N1cmUgRWRpdGluZyIgRXh0SW5mbz0iUCIgTWRpVHlwZT0iRGF0YUVkaXQiIEljb249IlByZXNzdXJlRGF0YSIgLz4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjMzMDMiIEJvdW5kcz0iMCwyLDIsMSIgTmFtZT0iQW5hbFByZUNvbiIgQWxpYXM9IlByZXNzdXJlIENvbnZlcnNpb24iIEV4dEluZm89IlAiIE1kaVR5cGU9IkRhdGFFZGl0IiBJY29uPSJBbmFsUHJlQ29uIiAvPg0KICAgICAgICA8L0dyb3VwPg0KICAgIDwvVGFiPg0KDQogICAgPFRhYiBJRD0iMyIgTmFtZT0iQW5hbHl0aWNhbFRlc3QiIEFsaWFzPSJJbnRlcnByZXRhdGlvbiIgPg0KDQogICAgICAgIDxHcm91cCBOYW1lPSJBbmFsRWRpdCIgQWxpYXM9IkFuYWx5c2lzIE1hbmFnZW1lbnQiPg0KICAgICAgICAgICAgPENtZCBJRD0iMzAwNiIgQm91bmRzPSIwLDAiIE5hbWU9IkFuYWxOZXciIEFsaWFzPSJOZXcgQW5hbHlzaXMiIEljb249IkpvYk5ldyIgLz4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjMwMDciIEJvdW5kcz0iMSwwIiBOYW1lPSJBbmFsRWRpdCIgQWxpYXM9IkFuYWx5c2lzIE1hbmFnZW1lbnQiIEljb249IkpvYkVkaXQiIC8+DQogICAgICAgIDwvR3JvdXA+DQoNCiAgICAgICAgPEdyb3VwIE5hbWU9IlNlZ0FuYWwiIEFsaWFzPSJGbG93IFBlcmlvZCBBbmFseXNpcyI+DQogICAgICAgICAgICA8Q21kIElEPSIzMDAzIiBCb3VuZHM9IjAsMCwyLDEiIE5hbWU9IkFuYWxQRiIgQWxpYXM9IkZsb3cgUGVyaW9kIFNlbGVjdGlvbiIgRXh0SW5mbz0iUEYiIEljb249IlBGIiAvPg0KICAgICAgICAgICAgPENtZCBJRD0iMzAwNCIgQm91bmRzPSIwLDEsMiwxIiBOYW1lPSJBbmFsRmxvd1NlZyIgQWxpYXM9IkZsb3cgUGVyaW9kIEFuYWx5c2lzIiBJY29uPSJGbG93UGVyaW9kIiAvPg0KICAgICAgICAgICAgPENtZCBJRD0iMzAwNSIgQm91bmRzPSIwLDIsMiwxIiBOYW1lPSJBbmFsT3RoZXJzIiBBbGlhcz0iQ2hhcmFjdGVyaXN0aWMgTGluZSBBbmFseXNpcyIgVHlwZT0iMSIgIFZpc2libGU9IjAiIEV4dE5hbWVzPSJDaGFydFQ7Q2hhcnRTcXJ0VDtDaGFydDI1VDtDaGFydDVUIiBFeHRJbmZvPSJDaGFydCBUO0NoYXJ0IFNxcnQoVCk7Q2hhcnQgMC4yNVQ7Q2hhcnQgLTAuNVQiIEljb249IkFzc2lzQW5hbCIgLz4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjMwMTAiIEJvdW5kcz0iMCwzLDIsMSIgTmFtZT0iQW5hbFduZE0iIEFsaWFzPSJGbG93IFBlcmlvZCBXaW5kb3ciIFR5cGU9IjEiIEljb249IkFuYWxXbmRNIiAvPg0KICAgICAgICAgICAgPENtZCBJRD0iMzAwOSIgQm91bmRzPSIwLDQsMiwxIiBOYW1lPSJBbmFsRGlzdHJpIiBBbGlhcz0iRGlzdHJpYnV0aW9uIENoYXJ0IiBUeXBlPSIxIiBFeHROYW1lcz0iQ2hhcnREZW47Q2hhcnRWaXMiIEV4dEluZm89IkNvbmNlbnRyYXRpb24gRGlzdHJpYnV0aW9uO1Zpc2Nvc2l0eSBEaXN0cmlidXRpb24iIEljb249IkFuYWxEaXN0cmkiIC8+DQogICAgICAgIDwvR3JvdXA+DQoNCiAgICAgICAgPEdyb3VwIE5hbWU9IkRhdGFGaXQiIEFsaWFzPSJJbnRlcnByZXRhdGlvbiBGaXR0aW5nIj4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjMxMDUiIEJvdW5kcz0iMCwwLDIsMSIgTmFtZT0iRGVjb252b2x2IiBBbGlhcz0iRGVjb252b2x1dGlvbihEZWJ1ZykiIEljb249IkRlY29udm9sdiIgLz4NCg0KICAgICAgICAgICAgPENtZCBJRD0iMzEwMSIgQm91bmRzPSIwLDEsMiwxIiBOYW1lPSJGaXRNb2RlbCIgQWxpYXM9IkFuYWx5dGljYWwgU29sdXRpb24iIEljb249IkZpdE1vZGVsIiAvPg0KICAgICAgICAgICAgPENtZCBJRD0iMzEwNCIgQm91bmRzPSIwLDIsMiwxIiBOYW1lPSJubUZpdE1vZGVsIiBBbGlhcz0iTnVtZXJpY2FsIFNvbHV0aW9uIiBJY29uPSJGaXRNb2RlbCIgLz4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjMxMDIiIEJvdW5kcz0iMCwzLDIsMSIgTmFtZT0iQXV0b0ZpdCIgQWxpYXM9IkF1dG8gRml0dGluZyIgSWNvbj0iQXV0b0ZpdCIgLz4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjMxMDMiIEJvdW5kcz0iMCw0LDIsMSIgTmFtZT0iUGxhdGVGaXQiIEFsaWFzPSJTZW5zaXRpdml0eSBBbmFseXNpcyIgSWNvbj0iUGxhdGVGaXQiIC8+DQogICAgICAgPC9Hcm91cD4NCg0KICAgICAgICA8R3JvdXAgTmFtZT0iQUlUZXN0IiBBbGlhcz0iSW50ZWxsaWdlbnQgV2VsbCBUZXN0aW5nIj4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjM5MDEiIEJvdW5kcz0iMCwwLDIsMSIgTmFtZT0iTW9kZWxDbGFzc2lmeSIgQWxpYXM9Ik1vZGVsIFJlY29nbml0aW9uIiBJY29uPSJNb2RlbENsYXNzaWZ5IiAvPg0KICAgICAgICA8L0dyb3VwPg0KDQogICAgICAgIDxHcm91cCBOYW1lPSJSZWxhdGl2ZVRvb2wiIEFsaWFzPSJSZWxhdGVkIFRvb2xzIj4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjMyMDEiIEJvdW5kcz0iMCwwLDIsMSIgTmFtZT0iVGltZSIgQWxpYXM9IlRpbWUiIEljb249IlRpbWUiIC8+DQogICAgICAgICAgICA8Q21kIElEPSIzMjAyIiBCb3VuZHM9IjAsMSIgTmFtZT0iU2hvd01vZGVsQ2hhcnRzIiBBbGlhcz0iTW9kZWwgU2NoZW1hdGljIiBJY29uPSJTaG93TW9kZWxDaGFydHMiIC8+DQogICAgICAgICAgICA8Q21kIElEPSIzMjA0IiBCb3VuZHM9IjEsMSIgTmFtZT0iU2F2ZUFzTW9kZWxTa2V0Y2giIEFsaWFzPSJTYXZlIEFzIFNjaGVtYXRpYyIgSWNvbj0iU2F2ZUFzTW9kZWxTa2V0Y2giIC8+DQoNCiAgICAgICA8L0dyb3VwPg0KDQo8IS0tICAgICAgICAgICAgICAgICAgICA8Q21kIElEPSIzMjAzIiBCb3VuZHM9IjAsMSIgTmFtZT0iU2hvd01vZGVsU2tldGNoIiBBbGlhcz0iVGhlb3J5IiBJY29uPSJTaG93TW9kZWxTa2V0Y2giIC8+PEdyb3VwIE5hbWU9IlRvb2xTIiBBbGlhcz0iRXh0ZW5kZWQgRnVuY3Rpb25zIj4NCiAgICAgICAgICAgIDxDbWQgSUQ9Ijk4MDEiIEJvdW5kcz0iMCwwLDIsMSIgTmFtZT0iRmxvd1RvUyIgQWxpYXM9IlJhdGUgdG8gU2tpbiBGYWN0b3IiIEljb249IkZsb3dUb1MiIFZpc2libGU9IjAiIC8+DQogICAgICAgICAgICA8Q21kIElEPSI5MjAxIiBCb3VuZHM9IjAsMSwyLDEiIE5hbWU9Ik1peFZpc2Nvc2l0eSIgQWxpYXM9Ik1peGVkIFZpc2Nvc2l0eSIgSWNvbj0iTWl4VmlzY29zaXR5IiBWaXNpYmxlPSIwIiAvPg0KICAgICAgIDwvR3JvdXA+LS0+DQoNCiAgICAgICAgPEdyb3VwIE5hbWU9IkpvYnMiIEFsaWFzPSJSZXN1bHQgTWFuYWdlbWVudCI+DQogICAgICAgICAgICA8Q21kIElEPSIxMDA4IiBCb3VuZHM9IjAsMCIgTmFtZT0iUnN0TG9hZCIgQWxpYXM9IkxvYWQgUmVzdWx0cyIgSWNvbj0iTG9hZEpvYnMiIC8+DQogICAgICAgICAgICA8Q21kIElEPSIxMDA5IiBCb3VuZHM9IjEsMCIgTmFtZT0iUnN0U2F2ZSIgVHlwZT0iMSIgRXh0TmFtZXM9IlJzdFNhdmVDdXI7UnN0U2F2ZUFsbCIgRXh0SW5mbz0iU2F2ZSBDdXJyZW50IFJlc3VsdDtTYXZlIEFsbCBSZXN1bHRzIiBBbGlhcz0iU2F2ZSBSZXN1bHRzIiBJY29uPSJTYXZlSm9icyIgLz4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjEwMTEiIEJvdW5kcz0iMCwxLDIsMSIgTmFtZT0iVG9OdW1lcmljYWwiIEFsaWFzPSJUby1OdW1lcmljYWwiIEljb249IkxvYWRKb2JzIiBWaXNpYmxlPSIwIiAvPg0KICAgICAgICA8L0dyb3VwPg0KDQogICAgICAgIDxHcm91cCBOYW1lPSJXaW5kb3ciIEFsaWFzPSJXaW5kb3cgRGlzcGxheSI+DQogICAgICAgICAgICA8Q21kIElEPSI5MDAyIiBCb3VuZHM9IjAsMCIgTmFtZT0iVmlzaWJsZU1vZGVscyIgQWxpYXM9Ik1vZGVsIFdpbmRvdyIgSWNvbj0iVmlzaWJsZU1vZGVscyIgLz4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjkwMDMiIEJvdW5kcz0iMSwwIiBOYW1lPSJWaXNpYmxlUGFyYW1ldGVycyIgQWxpYXM9IlBhcmFtZXRlciBXaW5kb3ciIEljb249IlZpc2libGVQYXJhbWV0ZXJzIiAvPg0KICAgICAgICAgICAgPENtZCBJRD0iOTEwMSIgQm91bmRzPSIwLDEiIE5hbWU9IlZpc2libGVBbmFsQmFzaWMiIEFsaWFzPSJCYXNpYyBJbmZvIiBJY29uPSJJbnB1dEJhc2ljIiAvPg0KICAgICAgICAgICAgPENtZCBJRD0iOTEwMiIgQm91bmRzPSIxLDEiIE5hbWU9IlZpc2libGVBbmFsUFZUIiBBbGlhcz0iUFZUIERhdGEiIEljb249IklucHV0Rmx1aWQiIC8+DQogICAgICAgICAgICA8Q21kIElEPSI5MTAzIiBCb3VuZHM9IjAsMiIgTmFtZT0iVmlzaWJsZUFuYWxEaWZmIiBBbGlhcz0iRElGRiBEYXRhIiBJY29uPSJJbnB1dEZsdWlkIiAvPg0KICAgICAgICAgICAgPENtZCBJRD0iOTEwNCIgQm91bmRzPSIxLDIiIE5hbWU9IlZpc2libGVBbmFsUHNldSIgQWxpYXM9IlBzZXVkbyBQcmVzc3VyZSBEYXRhIiBJY29uPSJJbnB1dEZsdWlkIiAvPg0KICAgICAgICA8L0dyb3VwPg0KICAgIDwvVGFiPg0KDQogICAgPFRhYiBJRD0iNSIgTmFtZT0iTnVtZXJpY2FsVGVzdCIgQWxpYXM9Ik1vZGVsaW5nIiA+DQogICAgICAgIDxHcm91cCBOYW1lPSJObU1hbmFnZXIiIEFsaWFzPSJBbmFseXNpcyBNYW5hZ2VtZW50IiBWaXNpYmxlPSIwIj4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjUwMDEiIEJvdW5kcz0iMCwwLDIsMSIgTmFtZT0iQW5hbE5ldyIgQWxpYXM9IlRlbXBvcmFyeSBUZXN0IDEiIEljb249IlByZXBhcmVHcmlkIiBWaXNpYmxlPSIwIiAvPg0KICAgICAgICAgICAgPENtZCBJRD0iNTAwMiIgQm91bmRzPSIwLDEsMiwxIiBOYW1lPSJQcm9wZXJ0eUxvYWQiIEFsaWFzPSJUZW1wb3JhcnkgVGVzdCAyIiBJY29uPSJQcmVwYXJlR3JpZCIgIFZpc2libGU9IjAiLz4NCiAgICAgICAgPC9Hcm91cD4NCg0KICAgICAgICA8R3JvdXAgTmFtZT0iTm1BbmFsQ2hhbmdlIiBBbGlhcz0iQW5hbHlzaXMgU3dpdGNoIj4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjUxMzAiIEJvdW5kcz0iMCwwIiBOYW1lPSJObUFuYWxDaGFuZ2UiIEFsaWFzPSJBbmFseXNpcyBTd2l0Y2giIEljb249IkpvYkVkaXQiIC8+DQogICAgICAgPC9Hcm91cD4NCg0KICAgICAgICA8R3JvdXAgTmFtZT0iTnRJbml0IiBBbGlhcz0iTW9kZWwgR2VvbWV0cmljIE9iamVjdHMiPg0KICAgICAgICAgICAgPENtZCBJRD0iNTExOCIgQm91bmRzPSIwLDAsMiwxIiBOYW1lPSJObU1hcCIgQWxpYXM9Ik1hcCIgSWNvbj0iTm1JbWFnZSIgLz4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjUxMTkiIEJvdW5kcz0iMCwxLDIsMSIgTmFtZT0iTm1VbmxvY2tlZCIgQWxpYXM9IkxvY2siIEljb249Ik5tVW5sb2NrZWQiIC8+DQogICAgICAgICAgICA8Q21kIElEPSI1MTAyIiBCb3VuZHM9IjAsMiwyLDEiIE5hbWU9Ik5tSW1hZ2UiIEFsaWFzPSJSZXNlcnZvaXIgTWFwIiBJY29uPSJObUltYWdlIiAvPg0KICAgICAgICAgICAgPENtZCBJRD0iNTEyMCIgQm91bmRzPSIwLDMsMiwxIiBOYW1lPSJObU1lYXN1cmUiIEFsaWFzPSJTY2FsZSBCYXIiIEljb249Ik5tTWVhc3VyZSIgLz4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjUxMDMiIEJvdW5kcz0iMCw0LDIsMSIgTmFtZT0iTm1Qb2x5Z29uIiBBbGlhcz0iUG9seWdvbiBCb3VuZGFyeSIgSWNvbj0iTm1Qb2x5Z29uIiAvPg0KICAgICAgICAgICAgPENtZCBJRD0iNTEwNCIgQm91bmRzPSIwLDUiIE5hbWU9Ik5tUG9seWdvbiIgQWxpYXM9IlJlY3RhbmdsZSBCb3VuZGFyeSIgSWNvbj0iTm1SZWN0YW5nbGUiIC8+DQogICAgICAgICAgICA8Q21kIElEPSI1MTA1IiBCb3VuZHM9IjEsNSIgTmFtZT0iTm1Qb2x5Z29uIiBBbGlhcz0iQ2lyY2xlIEJvdW5kYXJ5IiBJY29uPSJObVJvdW5kIiAvPg0KICAgICAgICAgICAgPENtZCBJRD0iNTEwNiIgQm91bmRzPSIwLDYsMiwxIiBOYW1lPSJObUZhdWx0IiBBbGlhcz0iRmF1bHQiIEljb249Ik5tRmF1bHQiIC8+DQogICAgICAgICAgICA8Q21kIElEPSI1MTA3IiBCb3VuZHM9IjAsNyIgTmFtZT0iTm1XZWxsIiBBbGlhcz0iU2VsZWN0IFdlbGwiIEljb249Ik5tV2VsbCIgLz4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjUxMDgiIEJvdW5kcz0iMSw3IiBOYW1lPSJObVdlbGwiIEFsaWFzPSJOZXcgV2VsbCIgSWNvbj0iTm1XZWxsIiAvPg0KICAgICAgICAgICAgPENtZCBJRD0iNTEwOSIgQm91bmRzPSIwLDgsMiwxIiBOYW1lPSJObUZhdWx0IiBBbGlhcz0iRnJhY3R1cmUiIEljb249Ik5tRmF1bHQiIC8+DQogICAgICAgICAgICA8Q21kIElEPSI1MTEwIiBCb3VuZHM9IjAsOSIgTmFtZT0iTm1MaW1pdCIgQWxpYXM9IlJlZ2lvbiIgSWNvbj0iTm1MaW1pdCIgLz4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjUxMTEiIEJvdW5kcz0iMSw5IiBOYW1lPSJObVJlZ2lvbiIgQWxpYXM9Ik1hcmsgUmVnaW9uIiBJY29uPSJObVJlZ2lvbiIgLz4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjUxMjEiIEJvdW5kcz0iMCwxMCwyLDEiIE5hbWU9Ik5tRGVsZXRlIiBBbGlhcz0iRGVsZXRlIiBJY29uPSJObURlbGV0ZSIgLz4NCiAgICAgICA8L0dyb3VwPg0KDQogICAgICAgPEdyb3VwIE5hbWU9Ik50UmVzZXJ2b2lyIiBBbGlhcz0iUmVzZXJ2b2lyIENoYXJhY3RlcmlzdGljcyI+CiAgICAgICAgICAgIDxDbWQgSUQ9IjUxMTIiIEJvdW5kcz0iMCwwLDIsMSIgTmFtZT0iTm1HZW9tZXRyeSIgQWxpYXM9IkxheWVyIERpdmlzaW9uIiBJY29uPSJObUdlb21ldHJ5IiAvPgogICAgICAgICAgICA8Q21kIElEPSI1MTEzIiBCb3VuZHM9IjAsMSwyLDEiIE5hbWU9Ik5tUHJvcGVydGllcyIgQWxpYXM9IlJlc2Vydm9pciBQcm9wZXJ0aWVzIiBJY29uPSJObVByb3BlcnRpZXMiIC8+CiAgICAgICAgICAgIDxDbWQgSUQ9IjUxMjIiIEJvdW5kcz0iMCwyLDIsMSIgTmFtZT0iTm1ERk4iIEFsaWFzPSJERk4iIEljb249Ik5tREZOIiAvPgogICAgICAgICAgICA8Q21kIElEPSI1MTI2IiBCb3VuZHM9IjAsMywyLDEiIE5hbWU9Ik5tSW50ZXJwb2xhdGlvbiIgQWxpYXM9IlByb3BlcnR5IEludGVycG9sYXRpb24iIEljb249Ik5tSW50ZXJwb2xhdGlvbiIgLz4KICAgICAgIDwvR3JvdXA+Cg0KICAgICAgIDxHcm91cCBOYW1lPSJOdE1vZGVsIiBBbGlhcz0iTW9kZWwgR2VuZXJhdGlvbiI+DQogICAgICAgICAgICAgPENtZCBJRD0iNTExNCIgQm91bmRzPSIwLDAsMiwxIiBOYW1lPSJObUdyaWQiIEFsaWFzPSJHcmlkIEdlbmVyYXRpb24iIEljb249Ik5tR3JpZCIgLz4NCiAgICAgICAgICAgICA8Q21kIElEPSI1MTE1IiBCb3VuZHM9IjAsMSwyLDEiIE5hbWU9Ik5tQ2FjdWxhdGlvbiIgQWxpYXM9IkNhbGN1bGF0aW9uIFNvbHV0aW9uIiBJY29uPSJUaW1lIiAvPg0KICAgICAgICAgICAgIDwhLS0NCiAgICAgICAgICAgICA8Q21kIElEPSI1MTE2IiBCb3VuZHM9IjAsMiwyLDEiIE5hbWU9Ik5tQmFjayIgQWxpYXM9IlBvc3QgUHJvY2Vzc2luZyIgSWNvbj0iVGltZSIgLz4NCiAgICAgICAgICAgICA8Q21kIElEPSI1MTE3IiBCb3VuZHM9IjAsMywyLDEiIE5hbWU9Ik5tUmVzdWx0IiBBbGlhcz0iUmVzdWx0IiBJY29uPSJGbG93UGVyaW9kIiAvPg0KICAgICAgICAgICAgIC0tPg0KICAgICAgIDwvR3JvdXA+DQoNCiAgICAgICAgPEdyb3VwIE5hbWU9Ik50VG9vbHMiIEFsaWFzPSJUb29scyI+DQogICAgICAgICAgICA8Q21kIElEPSI1MTI3IiBCb3VuZHM9IjAsMCIgTmFtZT0iTm1HZW9SZWZlcmVuY2UiIEFsaWFzPSJNb2RlbCBSZWZlcmVuY2UgUG9pbnQgU2V0dGluZyIgSWNvbj0iTm1HZW9SZWZlcmVuY2UiIC8+DQogICAgICAgICAgICA8Q21kIElEPSI1MTI4IiBCb3VuZHM9IjEsMCIgTmFtZT0iTm1Qb2ludGVyUG9zaXRpb24iIEFsaWFzPSJNb2RlbCBQb3NpdGlvbiBEaXNwbGF5IiBJY29uPSJObVBvaW50ZXJQb3NpdGlvbiIgLz4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjUxMjkiIEJvdW5kcz0iMCwxLDIsMSIgTmFtZT0iTm1NZWFzdXJlIiBBbGlhcz0iTW9kZWwgRGltZW5zaW9uIE1lYXN1cmVtZW50IiBJY29uPSJObU1lYXN1cmUiIC8+DQogICAgICAgPC9Hcm91cD4NCg0KICAgICAgICA8R3JvdXAgTmFtZT0iTnREaXNwbGF5IiBBbGlhcz0iRGlzcGxheSI+DQogICAgICAgICAgICA8Q21kIElEPSI1MTIzIiBCb3VuZHM9IjAsMCwyLDEiIE5hbWU9Ik5tU2hvdyIgQWxpYXM9IkRpc3BsYXkiIEljb249Ik5tU2hvdyIgLz4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjUxMjQiIEJvdW5kcz0iMCwxLDIsMSIgTmFtZT0iTm1QcmludFByZXZpZXciIEFsaWFzPSJQcmludCBQcmV2aWV3IiBJY29uPSJObVByaW50UHJldmlldyIgLz4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjUxMjUiIEJvdW5kcz0iMCwyLDIsMSIgTmFtZT0iTm1QcmludCIgQWxpYXM9IlByaW50IiBJY29uPSJObVByaW50IiAvPg0KICAgICAgIDwvR3JvdXA+DQoNCiAgICAgICAgPEdyb3VwIE5hbWU9IldpbmRvdyIgQWxpYXM9IldpbmRvdyBEaXNwbGF5IiAgVmlzaWJsZT0iMCI+DQogICAgICAgICAgICA8Q21kIElEPSI5MDAyIiBCb3VuZHM9IjAsMCIgTmFtZT0iVmlzaWJsZU1vZGVscyIgQWxpYXM9Ik1vZGVsIFdpbmRvdyIgSWNvbj0iVmlzaWJsZU1vZGVscyIgIFZpc2libGU9IjAiLz4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjkwMDMiIEJvdW5kcz0iMSwwIiBOYW1lPSJWaXNpYmxlUGFyYW1ldGVycyIgQWxpYXM9IlBhcmFtZXRlciBXaW5kb3ciIEljb249IlZpc2libGVQYXJhbWV0ZXJzIiAgVmlzaWJsZT0iMCIvPg0KICAgICAgICAgICAgPENtZCBJRD0iOTEwMSIgQm91bmRzPSIwLDEiIE5hbWU9IlZpc2libGVBbmFsQmFzaWMiIEFsaWFzPSJCYXNpYyBJbmZvIiBJY29uPSJJbnB1dEJhc2ljIiAvPg0KICAgICAgICAgICAgPENtZCBJRD0iOTEwMiIgQm91bmRzPSIxLDEiIE5hbWU9IlZpc2libGVBbmFsUFZUIiBBbGlhcz0iUFZUIERhdGEiIEljb249IklucHV0Rmx1aWQiIC8+DQogICAgICAgICAgICA8Q21kIElEPSI5MTAzIiBCb3VuZHM9IjAsMiIgTmFtZT0iVmlzaWJsZUFuYWxEaWZmIiBBbGlhcz0iRElGRiBEYXRhIiBJY29uPSJJbnB1dEZsdWlkIiAvPg0KICAgICAgICAgICAgPENtZCBJRD0iOTEwNCIgQm91bmRzPSIxLDIiIE5hbWU9IlZpc2libGVBbmFsUHNldSIgQWxpYXM9IlBzZXVkbyBQcmVzc3VyZSBEYXRhIiBJY29uPSJJbnB1dEZsdWlkIiAvPg0KICAgICAgICA8L0dyb3VwPg0KDQogICAgICAgIDxHcm91cCBOYW1lPSJObURlYnVnIiBBbGlhcz0iRnJhbWV3b3JrIFRlc3QoRGVidWcpIj4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjU5OTkiIEJvdW5kcz0iMCwwLDIsMSIgTmFtZT0iTm1EZWJ1ZyIgQWxpYXM9IkZyYW1ld29yayBDb2RlIERlYnVnZ2luZyIgSWNvbj0iUHJlcGFyZUdyaWQiIC8+DQogICAgICAgIDwvR3JvdXA+DQoNCg0KICAgIDwvVGFiPg0KDQogICAgPFRhYiBJRD0iNCIgTmFtZT0iTWluaUZyYWMiIEFsaWFzPSJNaW5pIEZyYWN0dXJpbmcoRGVidWcpIiA+DQoNCiAgICAgICAgPEdyb3VwIE5hbWU9IkFuYWxFZGl0IiBBbGlhcz0iQW5hbHlzaXMgTWFuYWdlbWVudCI+DQogICAgICAgICAgICA8Q21kIElEPSIzMDA2IiBCb3VuZHM9IjAsMCIgTmFtZT0iQW5hbE5ldyIgQWxpYXM9Ik5ldyBBbmFseXNpcyIgSWNvbj0iSm9iTmV3IiAvPg0KICAgICAgICAgICAgPENtZCBJRD0iMzAwNyIgQm91bmRzPSIxLDAiIE5hbWU9IkFuYWxFZGl0IiBBbGlhcz0iQW5hbHlzaXMgTWFuYWdlbWVudCIgSWNvbj0iSm9iRWRpdCIgLz4NCiAgICAgICAgPC9Hcm91cD4NCg0KICAgICAgICA8R3JvdXAgTmFtZT0iUEEiIEFsaWFzPSJQcmVzc3VyZSBEcm9wIEFuYWx5c2lzIj4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjQwMDIiIEJvdW5kcz0iMCwwLDMsMSIgTmFtZT0iTWluaUZyQW5hbFBBIiBBbGlhcz0iUHJlc3N1cmUgRHJvcCBQcmVwYXJhdGlvbiIgRXh0SW5mbz0iUEYiIEljb249IlBGIiAvPg0KICAgICAgICAgICAgPENtZCBJRD0iNDAwMyIgQm91bmRzPSIwLDEsMywxIiBOYW1lPSJNaW5pRnJQQSIgQWxpYXM9IlByZXNzdXJlIERyb3AgQW5hbHlzaXMiIEljb249IkZsb3dQZXJpb2QiIC8+DQoNCiAgICAgICAgICAgIDxDbWQgSUQ9IjQwMDQiIEJvdW5kcz0iMCwyLDMsMSIgTmFtZT0iQ2FsU3VkZGVuU3RvcFAiIEFsaWFzPSJJbnN0YW50YW5lb3VzIFNodXQtaW4gUHJlc3N1cmUiIEljb249IlJ1bkV4IiAvPg0KICAgICAgICAgICAgPENtZCBJRD0iNDAwNSIgQm91bmRzPSIwLDMiIE5hbWU9IkNhbEdGdW5jdGlvbiIgQWxpYXM9IkcgRnVuY3Rpb24iIEljb249IlJ1bk90aGVyIiAvPg0KICAgICAgICAgICAgPENtZCBJRD0iNDAwNiIgQm91bmRzPSIxLDMiIE5hbWU9IkNhbFNxcnRUIiBBbGlhcz0iU3F1YXJlIFJvb3Qgb2YgVGltZSIgSWNvbj0iUnVuT3RoZXIiIC8+DQogICAgICAgICAgICA8Q21kIElEPSI0MDA3IiBCb3VuZHM9IjIsMyIgTmFtZT0iQ2FsTG9nTG9nIiBBbGlhcz0iTG9nLUxvZyBQbG90IiBJY29uPSJSdW5PdGhlciIgLz4NCiAgICAgICAgPC9Hcm91cD4NCg0KDQogICAgICAgIDxHcm91cCBOYW1lPSJGQSIgQWxpYXM9IkZsb3cgUmF0ZSBBbmFseXNpcyI+DQogICAgICAgICAgICA8Q21kIElEPSI0MTAyIiBCb3VuZHM9IjAsMCwyLDEiIE5hbWU9Ik1pbmlGckFuYWxGQSIgQWxpYXM9IkZsb3cgUmF0ZSBQcmVwYXJhdGlvbiIgRXh0SW5mbz0iSVBSIiBJY29uPSJNaW5pRnJBbmFsRkEiIC8+DQogICAgICAgICAgICA8Q21kIElEPSI0MTAzIiBCb3VuZHM9IjAsMSIgTmFtZT0iTWluaUZyRkFVcCIgQWxpYXM9IlN0ZXAgVXAiIEljb249IlN0ZXBVcCIgLz4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjQxMDQiIEJvdW5kcz0iMSwxIiBOYW1lPSJNaW5pRnJGQURvd24iIEFsaWFzPSJTdGVwIERvd24iIEljb249IlN0ZXBEb3duIiAvPg0KICAgICAgIDwvR3JvdXA+DQoNCiAgICAgICAgPEdyb3VwIE5hbWU9IkpvYnMiIEFsaWFzPSJSZXN1bHQgTWFuYWdlbWVudCIgIFZpc2libGU9IjAiPg0KICAgICAgICAgICAgPENtZCBJRD0iMTAwOCIgQm91bmRzPSIwLDAiIE5hbWU9IlJzdExvYWQiIEFsaWFzPSJMb2FkIFJlc3VsdHMiIEljb249IkxvYWRKb2JzIiAvPg0KICAgICAgICAgICAgPENtZCBJRD0iMTAwOSIgQm91bmRzPSIxLDAiIE5hbWU9IlJzdFNhdmUiIFR5cGU9IjEiIEV4dE5hbWVzPSJSc3RTYXZlQ3VyO1JzdFNhdmVBbGwiIEV4dEluZm89IlNhdmUgQ3VycmVudCBSZXN1bHQ7U2F2ZSBBbGwgUmVzdWx0cyIgQWxpYXM9IlNhdmUgUmVzdWx0cyIgSWNvbj0iU2F2ZUpvYnMiIC8+DQogICAgICAgIDwvR3JvdXA+DQoNCiAgICAgICAgPEdyb3VwIE5hbWU9IldpbmRvdyIgQWxpYXM9IldpbmRvdyBEaXNwbGF5IiAgVmlzaWJsZT0iMCI+DQogICAgICAgICAgICA8Q21kIElEPSI5MDAyIiBCb3VuZHM9IjAsMCIgTmFtZT0iVmlzaWJsZU1vZGVscyIgQWxpYXM9Ik1vZGVsIFdpbmRvdyIgSWNvbj0iVmlzaWJsZU1vZGVscyIgLz4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjkwMDMiIEJvdW5kcz0iMSwwIiBOYW1lPSJWaXNpYmxlUGFyYW1ldGVycyIgQWxpYXM9IlBhcmFtZXRlciBXaW5kb3ciIEljb249IlZpc2libGVQYXJhbWV0ZXJzIiAvPg0KICAgICAgICAgICAgPENtZCBJRD0iOTEwMSIgQm91bmRzPSIwLDEiIE5hbWU9IlZpc2libGVBbmFsQmFzaWMiIEFsaWFzPSJCYXNpYyBJbmZvIiBJY29uPSJJbnB1dEJhc2ljIiAvPg0KICAgICAgICAgICAgPENtZCBJRD0iOTEwMiIgQm91bmRzPSIxLDEiIE5hbWU9IlZpc2libGVBbmFsUFZUIiBBbGlhcz0iUFZUIERhdGEiIEljb249IklucHV0Rmx1aWQiIC8+DQogICAgICAgICAgICA8Q21kIElEPSI5MTAzIiBCb3VuZHM9IjAsMiIgTmFtZT0iVmlzaWJsZUFuYWxEaWZmIiBBbGlhcz0iRElGRiBEYXRhIiBJY29uPSJJbnB1dEZsdWlkIiAvPg0KICAgICAgICAgICAgPENtZCBJRD0iOTEwNCIgQm91bmRzPSIxLDIiIE5hbWU9IlZpc2libGVBbmFsUHNldSIgQWxpYXM9IlBzZXVkbyBQcmVzc3VyZSBEYXRhIiBJY29uPSJJbnB1dEZsdWlkIiAvPg0KICAgICAgICA8L0dyb3VwPg0KDQogICAgPC9UYWI+DQoNCiAgICA8VGFiIElEPSI0MDEiIE5hbWU9IklQUiIgQWxpYXM9IldlbGwgUHJvZCBUZXN0IiA+DQoNCiAgICAgICAgPEdyb3VwIE5hbWU9IkFuYWxFZGl0IiBBbGlhcz0iQW5hbHlzaXMgTWFuYWdlbWVudCI+DQogICAgICAgICAgICA8Q21kIElEPSIzMDA2IiBCb3VuZHM9IjAsMCIgTmFtZT0iQW5hbE5ldyIgQWxpYXM9Ik5ldyBBbmFseXNpcyIgSWNvbj0iSm9iTmV3IiAvPg0KICAgICAgICAgICAgPENtZCBJRD0iMzAwNyIgQm91bmRzPSIxLDAiIE5hbWU9IkFuYWxFZGl0IiBBbGlhcz0iQW5hbHlzaXMgTWFuYWdlbWVudCIgSWNvbj0iSm9iRWRpdCIgLz4NCiAgICAgICAgPC9Hcm91cD4NCg0KICAgICAgICA8R3JvdXAgTmFtZT0iSVBSIiBBbGlhcz0iSVBSIFByZXZpb3VzIFJlZmVyZW5jZShEZWJ1ZykiPg0KICAgICAgICAgICAgPENtZCBJRD0iNjAwMiIgQm91bmRzPSIwLDAsMiwxIiBOYW1lPSJJUFJBbmFsIiBBbGlhcz0iSVBSIFByZXBhcmF0aW9uIiBFeHRJbmZvPSJJUFIiIEljb249IklQUkFuYWwiIC8+DQogICAgICAgICAgICA8Q21kIElEPSI2MDAzIiBCb3VuZHM9IjAsMSwyLDEiIE5hbWU9IklQUkNhbCIgQWxpYXM9IklQUiBDYWxjdWxhdGlvbiIgSWNvbj0iSVBSQ2FsIiAvPg0KICAgICAgICA8L0dyb3VwPg0KDQogICAgICAgIDxHcm91cCBOYW1lPSJXZHREYXRhUHJlcHJvY2VzcyIgQWxpYXM9IkRhdGEgUHJlcHJvY2Vzc2luZyIgVmlzaWJsZT0iMCI+DQogICAgICAgICAgICA8Q21kIElEPSI2MTAxIiBCb3VuZHM9IjAsMCwyLDEiIE5hbWU9IldkdERhdGFBc3NuIiBBbGlhcz0iRGF0YSBOb3JtYWxpemF0aW9uIiBFeHRJbmZvPSJJUFIiIEljb249IklQUkFuYWwiICBWaXNpYmxlPSIwIi8+DQogICAgICAgICAgICA8Q21kIElEPSI2MTAyIiBCb3VuZHM9IjAsMSwyLDEiIE5hbWU9IldkdE90aGVyIiBBbGlhcz0iT3RoZXJzIiBJY29uPSJXZHRPdGhlciIgVmlzaWJsZT0iMCIgLz4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjYxMDMiIEJvdW5kcz0iMCwzLDIsMSIgTmFtZT0iV2R0V01GIiBBbGlhcz0iV2VsbGJvcmUgTXVsdGlwaGFzZSBGbG93IiBJY29uPSJXZHRXTUYiICBWaXNpYmxlPSIwIi8+DQogICAgICAgICAgICA8Q21kIElEPSI2MTA0IiBCb3VuZHM9IjAsNCwyLDEiIE5hbWU9IldkdENob2tlIiBBbGlhcz0iQ2hva2UgRmxvdyIgSWNvbj0iV2R0Q2hva2UiICBWaXNpYmxlPSIwIi8+DQogICAgICAgIDwvR3JvdXA+DQoNCiAgICAgICAgPEdyb3VwIE5hbWU9IklQUiIgQWxpYXM9IlByb2R1Y3Rpdml0eSBBbmFseXNpcyI+DQogICAgICAgICAgICA8Q21kIElEPSI2MjAxIiBCb3VuZHM9IjAsMCwyLDEiIE5hbWU9IldkdElQUkNhbCIgQWxpYXM9IlJlc2Vydm9pciBQcm9kdWN0aXZpdHkgQ2FsY3VsYXRpb24iIEljb249IklQUkNhbCIgLz4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjYyMDIiIEJvdW5kcz0iMCwxLDIsMSIgTmFtZT0iV2VsbFBkdHkiIEFsaWFzPSJJbnRlZ3JhdGVkIFByb2R1Y3Rpdml0eSIgSWNvbj0iV2VsbFBkdHkiICBWaXNpYmxlPSIwIiAvPg0KICAgICAgICAgICAgPENtZCBJRD0iNjIwMyIgQm91bmRzPSIwLDIsMiwxIiBOYW1lPSJXZHRJUFJFeHQiIEFsaWFzPSJQcm9kdWN0aXZpdHkgV2VsbCBUZXN0W0V4dGVuZGVkXSIgSWNvbj0iSVBSRXh0Ii8+DQogICAgICAgICAgICA8Q21kIElEPSI2MjA0IiBCb3VuZHM9IjAsMywyLDEiIE5hbWU9IldkdElQUkFuYWwiIEFsaWFzPSJSZXNlcnZvaXIgUHJvZHVjdGl2aXR5IEFuYWx5c2lzIiBJY29uPSJJUFJBbmFsIiAvPg0KICAgICAgICAgICAgPENtZCBJRD0iNjIwNSIgQm91bmRzPSIwLDQsMiwxIiBOYW1lPSJXZWxsSW50ZWdBbmFsIiBBbGlhcz0iQ29tcHJlaGVuc2l2ZSBBbmFseXNpcyIgSWNvbj0iV2VsbEludGVnQW5hbCIgVmlzaWJsZT0iMCIgLz4NCiAgICAgICAgPC9Hcm91cD4NCg0KICAgICAgICA8R3JvdXAgTmFtZT0iSVBSIiBBbGlhcz0iUHJvZHVjdGl2aXR5IENhbGN1bGF0aW9uIj4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjYzMDEiIEJvdW5kcz0iMCwwLDIsMSIgTmFtZT0iV2R0Q2FsIiBBbGlhcz0iQ2FsY3VsYXRpb24iIEljb249IlJ1bkV4IiAvPg0KICAgICAgICA8L0dyb3VwPg0KDQoNCiAgICAgICAgPEdyb3VwIE5hbWU9IkpvYnMiIEFsaWFzPSJSZXN1bHQgTWFuYWdlbWVudCI+DQogICAgICAgICAgICA8Q21kIElEPSIxMDA4IiBCb3VuZHM9IjAsMCIgTmFtZT0iUnN0TG9hZCIgQWxpYXM9IkxvYWQgUmVzdWx0cyIgSWNvbj0iTG9hZEpvYnMiIC8+DQogICAgICAgICAgICA8Q21kIElEPSIxMDA5IiBCb3VuZHM9IjEsMCIgTmFtZT0iUnN0U2F2ZSIgVHlwZT0iMSIgRXh0TmFtZXM9IlJzdFNhdmVDdXI7UnN0U2F2ZUFsbCIgRXh0SW5mbz0iU2F2ZSBDdXJyZW50IFJlc3VsdDtTYXZlIEFsbCBSZXN1bHRzIiBBbGlhcz0iU2F2ZSBSZXN1bHRzIiBJY29uPSJTYXZlSm9icyIgLz4NCiAgICAgICAgPC9Hcm91cD4NCg0KICAgICAgICA8R3JvdXAgTmFtZT0iV2luZG93IiBBbGlhcz0iV2luZG93IERpc3BsYXkiPg0KICAgICAgICAgICAgPENtZCBJRD0iOTAwMiIgQm91bmRzPSIwLDAiIE5hbWU9IlZpc2libGVNb2RlbHMiIEFsaWFzPSJNb2RlbCBXaW5kb3ciIEljb249IlZpc2libGVNb2RlbHMiIC8+DQogICAgICAgICAgICA8Q21kIElEPSI5MDAzIiBCb3VuZHM9IjEsMCIgTmFtZT0iVmlzaWJsZVBhcmFtZXRlcnMiIEFsaWFzPSJQYXJhbWV0ZXIgV2luZG93IiBJY29uPSJWaXNpYmxlUGFyYW1ldGVycyIgLz4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjkxMDEiIEJvdW5kcz0iMCwxIiBOYW1lPSJWaXNpYmxlQW5hbEJhc2ljIiBBbGlhcz0iQmFzaWMgSW5mbyIgSWNvbj0iSW5wdXRCYXNpYyIgICBWaXNpYmxlPSIwIi8+DQogICAgICAgICAgICA8Q21kIElEPSI5MTAyIiBCb3VuZHM9IjAsMSIgTmFtZT0iVmlzaWJsZUFuYWxQVlQiIEFsaWFzPSJQVlQgRGF0YSIgSWNvbj0iSW5wdXRGbHVpZCIgLz4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjkxMDMiIEJvdW5kcz0iMCwyIiBOYW1lPSJWaXNpYmxlQW5hbERpZmYiIEFsaWFzPSJESUZGIERhdGEiIEljb249IklucHV0Rmx1aWQiICAgVmlzaWJsZT0iMCIvPg0KICAgICAgICAgICAgPENtZCBJRD0iOTEwNCIgQm91bmRzPSIxLDEiIE5hbWU9IlZpc2libGVBbmFsUHNldSIgQWxpYXM9IlBzZXVkbyBQcmVzc3VyZSBEYXRhIiBJY29uPSJJbnB1dEZsdWlkIiAvPg0KICAgICAgICA8L0dyb3VwPg0KDQoNCiAgICA8L1RhYj4NCg0KICAgIDxUYWIgSUQ9IjYiIE5hbWU9IkFkdmFuY2VkRnVuY3Rpb24iIEFsaWFzPSJBZHZhbmNlZCIgPg0KDQogICAgICAgIDxHcm91cCBOYW1lPSJEZXNpZ24iIEFsaWFzPSJXZWxsIFRlc3QgRGVzaWduIj4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjYwMDEiIEJvdW5kcz0iMCwwLDIsMSIgTmFtZT0iVGVzdERlc2lnbiIgQWxpYXM9IldlbGwgVGVzdCBEZXNpZ24iIEljb249IlRlc3REZXNpZ24iIEV4dEluZm89IlBGIiAgLz4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjMwMDQiIEJvdW5kcz0iMCwxLDIsMSIgTmFtZT0iQW5hbEZsb3dTZWciIEFsaWFzPSJGbG93IFBlcmlvZCBBbmFseXNpcyIgSWNvbj0iRmxvd1BlcmlvZCIgLz4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjMwMDUiIEJvdW5kcz0iMCwyLDIsMSIgTmFtZT0iQW5hbE90aGVycyIgQWxpYXM9IkNoYXJhY3RlcmlzdGljIFNlZ21lbnQgQW5hbHlzaXMiIFR5cGU9IjEiIEV4dE5hbWVzPSJDaGFydFQ7Q2hhcnRTcXJ0VDtDaGFydDI1VDtDaGFydDVUIiBFeHRJbmZvPSJDaGFydCBUO0NoYXJ0IFNxcnQoVCk7Q2hhcnQgMC4yNVQ7Q2hhcnQgLTAuNVQiIEljb249IkFzc2lzQW5hbCIgLz4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjMwMDkiIEJvdW5kcz0iMCwzLDIsMSIgTmFtZT0iQW5hbERpc3RyaSIgQWxpYXM9IkRpc3RyaWJ1dGlvbiBDaGFydCIgVHlwZT0iMSIgRXh0TmFtZXM9IkNoYXJ0RGVuO0NoYXJ0VmlzIiBFeHRJbmZvPSJDb25jZW50cmF0aW9uIERpc3RyaWJ1dGlvbjtWaXNjb3NpdHkgRGlzdHJpYnV0aW9uIiBJY29uPSJBbmFsRGlzdHJpIiAvPg0KDQogICAgICAgIDwvR3JvdXA+DQoNCiAgICAgICAgPEdyb3VwIE5hbWU9IkRhdGFGaXQiIEFsaWFzPSJJbnRlcnByZXRhdGlvbiBGaXR0aW5nIj4NCg0KICAgICAgICAgICAgPENtZCBJRD0iMzEwNSIgQm91bmRzPSIwLDAsMiwxIiBOYW1lPSJEZWNvbnZvbHYiIEFsaWFzPSJEZWNvbnZvbHV0aW9uIiBJY29uPSJEZWNvbnZvbHYiIFZpc2libGU9IjAiLz4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjMxMDEiIEJvdW5kcz0iMCwxLDIsMSIgTmFtZT0iRml0TW9kZWwiIEFsaWFzPSJBbmFseXRpY2FsIFNvbHV0aW9uIiBJY29uPSJGaXRNb2RlbCIgLz4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjMxMDQiIEJvdW5kcz0iMCwyLDIsMSIgTmFtZT0ibm1GaXRNb2RlbCIgQWxpYXM9Ik51bWVyaWNhbCBTb2x1dGlvbiIgSWNvbj0iRml0TW9kZWwiIC8+DQogICAgICAgICAgICA8Q21kIElEPSIzMTAyIiBCb3VuZHM9IjAsMywyLDEiIE5hbWU9IkF1dG9GaXQiIEFsaWFzPSJBdXRvIEZpdHRpbmciIEljb249IkF1dG9GaXQiIC8+DQogICAgICAgICAgICA8Q21kIElEPSIzMTAzIiBCb3VuZHM9IjAsNCwyLDEiIE5hbWU9IlBsYXRlRml0IiBBbGlhcz0iU2Vuc2l0aXZpdHkgQW5hbHlzaXMiIEljb249IlBsYXRlRml0IiAvPg0KICAgICAgIDwvR3JvdXA+DQoNCiAgICAgICAgPEdyb3VwIE5hbWU9IkFJVGVzdCIgQWxpYXM9IkludGVsbGlnZW50IFdlbGwgVGVzdChEZWJ1ZykiPg0KICAgICAgICAgICAgPENtZCBJRD0iMzkwMSIgQm91bmRzPSIwLDAsMiwxIiBOYW1lPSJNb2RlbENsYXNzaWZ5IiBBbGlhcz0iTW9kZWwgUmVjb2duaXRpb24iIEljb249Ik1vZGVsQ2xhc3NpZnkiIC8+DQogICAgICAgIDwvR3JvdXA+DQoNCiAgICAgICAgPEdyb3VwIE5hbWU9IlJlbGF0aXZlVG9vbCIgQWxpYXM9IlJlbGF0ZWQgVG9vbHMiIFZpc2libGU9IjAiPg0KICAgICAgICAgICAgPENtZCBJRD0iMzIwMSIgQm91bmRzPSIwLDAiIE5hbWU9IlRpbWUiIEFsaWFzPSJUaW1lIiBJY29uPSJUaW1lIiAvPg0KICAgICAgICAgICAgPENtZCBJRD0iMzIwMiIgQm91bmRzPSIxLDAiIE5hbWU9IlNob3dNb2RlbENoYXJ0cyIgQWxpYXM9Ik1vZGVsIiBJY29uPSJTaG93TW9kZWxDaGFydHMiIC8+DQogICAgICAgICAgICA8Q21kIElEPSIzMjAzIiBCb3VuZHM9IjAsMSIgTmFtZT0iU2hvd01vZGVsU2tldGNoIiBBbGlhcz0iVGhlb3J5IiBJY29uPSJTaG93TW9kZWxTa2V0Y2giIC8+DQogICAgICAgICAgICA8Q21kIElEPSIzMjA0IiBCb3VuZHM9IjEsMSIgTmFtZT0iU2F2ZUFzTW9kZWxTa2V0Y2giIEFsaWFzPSJTYXZlIEFzIFNjaGVtYXRpYyIgSWNvbj0iU2F2ZUFzTW9kZWxTa2V0Y2giIC8+DQogICAgICAgPC9Hcm91cD4NCg0KICAgICAgICA8R3JvdXAgTmFtZT0iVG9vbFMiIEFsaWFzPSJFeHRlbmRlZCBGdW5jdGlvbnMiICBWaXNpYmxlPSIwIj4NCiAgICAgICAgICAgIDxDbWQgSUQ9Ijk4MDEiIEJvdW5kcz0iMCwwLDIsMSIgTmFtZT0iRmxvd1RvUyIgQWxpYXM9IlJhdGUgdG8gU2tpbiBGYWN0b3IiIEljb249IkZsb3dUb1MiIC8+DQogICAgICAgICAgICA8Q21kIElEPSI5MjAxIiBCb3VuZHM9IjAsMSwyLDEiIE5hbWU9Ik1peFZpc2Nvc2l0eSIgQWxpYXM9Ik1peGVkIFZpc2Nvc2l0eSIgSWNvbj0iTWl4VmlzY29zaXR5IiAvPg0KICAgICAgIDwvR3JvdXA+DQoNCiAgICAgICAgPEdyb3VwIE5hbWU9IkpvYnMiIEFsaWFzPSJSZXN1bHQgTWFuYWdlbWVudCIgVmlzaWJsZT0iMCI+DQogICAgICAgICAgICA8Q21kIElEPSIxMDA4IiBCb3VuZHM9IjAsMCIgTmFtZT0iUnN0TG9hZCIgQWxpYXM9IkxvYWQgUmVzdWx0cyIgSWNvbj0iTG9hZEpvYnMiIC8+DQogICAgICAgICAgICA8Q21kIElEPSIxMDA5IiBCb3VuZHM9IjEsMCIgTmFtZT0iUnN0U2F2ZSIgVHlwZT0iMSIgRXh0TmFtZXM9IlJzdFNhdmVDdXI7UnN0U2F2ZUFsbCIgRXh0SW5mbz0iU2F2ZSBDdXJyZW50IFJlc3VsdDtTYXZlIEFsbCBSZXN1bHRzIiBBbGlhcz0iU2F2ZSBSZXN1bHRzIiBJY29uPSJTYXZlSm9icyIgLz4NCiAgICAgICAgPC9Hcm91cD4NCg0KICAgICAgICA8R3JvdXAgTmFtZT0iV2luZG93IiBBbGlhcz0iV2luZG93IERpc3BsYXkiIFZpc2libGU9IjAiPg0KICAgICAgICAgICAgPENtZCBJRD0iOTAwMiIgQm91bmRzPSIwLDAiIE5hbWU9IlZpc2libGVNb2RlbHMiIEFsaWFzPSJNb2RlbCBXaW5kb3ciIEljb249IlZpc2libGVNb2RlbHMiIC8+DQogICAgICAgICAgICA8Q21kIElEPSI5MDAzIiBCb3VuZHM9IjEsMCIgTmFtZT0iVmlzaWJsZVBhcmFtZXRlcnMiIEFsaWFzPSJQYXJhbWV0ZXIgV2luZG93IiBJY29uPSJWaXNpYmxlUGFyYW1ldGVycyIgLz4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjkxMDEiIEJvdW5kcz0iMCwxIiBOYW1lPSJWaXNpYmxlQW5hbEJhc2ljIiBBbGlhcz0iQmFzaWMgSW5mbyIgSWNvbj0iSW5wdXRCYXNpYyIgLz4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjkxMDIiIEJvdW5kcz0iMSwxIiBOYW1lPSJWaXNpYmxlQW5hbFBWVCIgQWxpYXM9IlBWVCBEYXRhIiBJY29uPSJJbnB1dEZsdWlkIiAvPg0KICAgICAgICAgICAgPENtZCBJRD0iOTEwMyIgQm91bmRzPSIwLDIiIE5hbWU9IlZpc2libGVBbmFsRGlmZiIgQWxpYXM9IkRJRkYgRGF0YSIgSWNvbj0iSW5wdXRGbHVpZCIgLz4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjkxMDQiIEJvdW5kcz0iMSwyIiBOYW1lPSJWaXNpYmxlQW5hbFBzZXUiIEFsaWFzPSJQc2V1ZG8gUHJlc3N1cmUgRGF0YSIgSWNvbj0iSW5wdXRGbHVpZCIgLz4NCiAgICAgICAgPC9Hcm91cD4NCg0KICAgIDwvVGFiPg0KDQogICAgPFRhYiBJRD0iNyIgTmFtZT0iU3lzVG9vbCIgQWxpYXM9IlN5c3RlbSBDb25maWd1cmF0aW9uIFRvb2xzKFQpIiBWaXNpYmxlPSIwIiA+DQoNCiAgICAgICAgPEdyb3VwIE5hbWU9IlN5c1Rvb2wiIEFsaWFzPSJDb25maWd1cmF0aW9uIFRvb2xzIj4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjcwMDEiIEJvdW5kcz0iMCwxLDIsMSIgTmFtZT0iU3lzVG9vbHMiIEFsaWFzPSJTeXN0ZW0gQ29uZmlndXJhdGlvbiBUb29scyIgSWNvbj0iU3lzVG9vbHMiICAvPg0KICAgICAgICA8L0dyb3VwPg0KDQogICAgICAgIDxHcm91cCBOYW1lPSJNb2RlbE1hbmFnZXIiIEFsaWFzPSJNb2RlbCBNYW5hZ2VtZW50Ij4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjcwMDIiIEJvdW5kcz0iMCwwLDIsMSIgTmFtZT0iTW9kZWxTY2FuIiBBbGlhcz0iTW9kZWwgVmlldyIgSWNvbj0iTW9kZWxTY2FuIiAvPg0KICAgICAgICA8L0dyb3VwPg0KDQogICAgPC9UYWI+DQoNCiAgICA8VGFiIElEPSI4IiBOYW1lPSJSZXN1bHQiIEFsaWFzPSJSZXN1bHRzIiA+DQoNCiAgICAgICAgPEdyb3VwIE5hbWU9IkpvYnMiIEFsaWFzPSJSZXN1bHQgTWFuYWdlbWVudCI+DQogICAgICAgICAgICA8Q21kIElEPSIxMDA4IiBCb3VuZHM9IjAsMCIgTmFtZT0iUnN0TG9hZCIgQWxpYXM9IkxvYWQgUmVzdWx0cyIgSWNvbj0iTG9hZEpvYnMiIC8+DQogICAgICAgICAgICA8Q21kIElEPSIxMDA5IiBCb3VuZHM9IjEsMCIgTmFtZT0iUnN0U2F2ZSIgVHlwZT0iMSIgRXh0TmFtZXM9IlJzdFNhdmVDdXI7UnN0U2F2ZUFsbCIgRXh0SW5mbz0iU2F2ZSBDdXJyZW50IFJlc3VsdDtTYXZlIEFsbCBSZXN1bHRzIiBBbGlhcz0iU2F2ZSBSZXN1bHRzIiBJY29uPSJTYXZlSm9icyIgLz4NCiAgICAgICAgPC9Hcm91cD4NCg0KICAgICAgICA8R3JvdXAgTmFtZT0iUmVzQ29tcGFyZSIgQWxpYXM9IlJlc3VsdCBDb21wYXJpc29uIj4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjgwMDMiIEJvdW5kcz0iMCwwLDIsMSIgTmFtZT0iUmVzQ29tcGFyZSIgQWxpYXM9IlJlc3VsdCBDb21wYXJpc29uIiBJY29uPSJSZXNDb21wYXJlIiAgLz4NCiAgICAgICAgPC9Hcm91cD4NCg0KICAgICAgICA8R3JvdXAgTmFtZT0iUHJpbnQiIEFsaWFzPSJSZXBvcnQgUHJpbnRpbmciPg0KICAgICAgICAgICAgPENtZCBJRD0iODAwMSIgQm91bmRzPSIwLDAiIE5hbWU9IlJlcG9ydENvbmZpZyIgQWxpYXM9IlJlcG9ydCBTZXR0aW5ncyIgSWNvbj0icmVwb3J0Q29uZmlnIiAgLz4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjgwMDQiIEJvdW5kcz0iMSwwIiBOYW1lPSJQcmludFByZXZpZXciIEFsaWFzPSJSZXBvcnQgUHJldmlldyIgSWNvbj0iUHJlUHJpbnQiICAvPg0KICAgICAgICAgICAgPENtZCBJRD0iODAwMiIgQm91bmRzPSIwLDEiIE5hbWU9IlByaW50IiBBbGlhcz0iUHJpbnQoSW5jbHVkZSBQREYpIiBJY29uPSJQcmludCIgIC8+DQogICAgICAgICAgICA8Q21kIElEPSI4MDA1IiBCb3VuZHM9IjEsMSIgTmFtZT0iRXhwb3J0V29yZCIgQWxpYXM9IkV4cG9ydChXb3JkKSIgSWNvbj0iV29yZDE2IiAgLz4NCiAgICAgICAgPC9Hcm91cD4NCg0KICAgICAgICA8R3JvdXAgTmFtZT0iV2luZG93IiBBbGlhcz0iV2luZG93IERpc3BsYXkiIFZpc2libGU9IjAiPg0KICAgICAgICAgICAgPENtZCBJRD0iOTAwMyIgQm91bmRzPSIwLDAsMiwxIiBOYW1lPSJWaXNpYmxlUGFyYW1ldGVycyIgQWxpYXM9IlBhcmFtZXRlciBXaW5kb3ciIEljb249IlZpc2libGVQYXJhbWV0ZXJzIiAvPg0KICAgICAgICAgICAgPENtZCBJRD0iOTAwNCIgQm91bmRzPSIwLDEsMiwxIiBOYW1lPSJWaXNpYmxlUHR5cyIgQWxpYXM9IlByb3BlcnR5IFdpbmRvdyIgSWNvbj0iUHJvcGVydHlXaW5kb3ciIC8+DQoNCiAgICAgICAgPC9Hcm91cD4NCg0KICAgIDwvVGFiPg0KDQogICAgPFRhYiBJRD0iOSIgTmFtZT0iV2luZG93IiBBbGlhcz0iV2luZG93IiA+DQoNCiAgICAgICAgPEdyb3VwIE5hbWU9IldpbmRvdyIgQWxpYXM9IkJhc2ljIj4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjkwMDEiIEJvdW5kcz0iMCwwLDIsMSIgTmFtZT0iVmlzaWJsZVByb2pUcmVlRGEiIEFsaWFzPSJQcm9qZWN0IFRyZWUiIEljb249IlByb2pUcmVlIiAvPg0KICAgICAgICAgICAgPENtZCBJRD0iOTAwOCIgQm91bmRzPSIwLDEsMiwxIiBOYW1lPSJWaXNpYmxlUHJvalRyZWVKYiIgQWxpYXM9IkFuYWx5c2lzIFRyZWUiIEljb249IlByb2pUcmVlIiAvPg0KICAgICAgICAgICAgPENtZCBJRD0iOTAwOSIgQm91bmRzPSIwLDIsMiwxIiBOYW1lPSJWaXNpYmxlUHJvalRyZWVScyIgQWxpYXM9IlJlc3VsdCBUcmVlIiBJY29uPSJQcm9qVHJlZSIgLz4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjkwMDIiIEJvdW5kcz0iMCwzIiBOYW1lPSJWaXNpYmxlTW9kZWxzIiBBbGlhcz0iTW9kZWwgV2luZG93IiBJY29uPSJWaXNpYmxlTW9kZWxzIiAvPg0KICAgICAgICAgICAgPENtZCBJRD0iOTAwMyIgQm91bmRzPSIxLDMiIE5hbWU9IlZpc2libGVQYXJhbWV0ZXJzIiBBbGlhcz0iUGFyYW1ldGVyIFdpbmRvdyIgSWNvbj0iVmlzaWJsZVBhcmFtZXRlcnMiIC8+DQogICAgICAgICAgICA8Q21kIElEPSI5MDA0IiBCb3VuZHM9IjAsNCIgTmFtZT0iVmlzaWJsZVB0eXMiIEFsaWFzPSJQcm9wZXJ0eSBXaW5kb3ciIEljb249IlByb3BlcnR5V2luZG93IiAvPg0KICAgICAgICAgICAgPENtZCBJRD0iOTAwNSIgQm91bmRzPSIxLDQiIE5hbWU9IlZpc2libGVMb2dzIiBBbGlhcz0iTG9nIFdpbmRvdyIgSWNvbj0iVmlzaWJsZUxvZ3MiIC8+DQogICAgICAgICAgICA8Q21kIElEPSI5MDA2IiBCb3VuZHM9IjAsNSIgTmFtZT0iU3RhY2tlZFByb2plY3QiIEFsaWFzPSJQcm9qZWN0IFdpbmRvdyIgSWNvbj0iU3RhY2tlZFByb2plY3QiIC8+DQogICAgICAgICAgICA8Q21kIElEPSI5MDA3IiBCb3VuZHM9IjEsNSIgTmFtZT0iU3RhY2tlZE1kaSIgQWxpYXM9IkFuYWx5c2lzIFdpbmRvdyIgSWNvbj0iU3RhY2tlZE1kaSIgLz4NCiAgICAgICAgPC9Hcm91cD4NCg0KICAgICAgICA8R3JvdXAgTmFtZT0iV2luZG93TGF5b3V0IiBBbGlhcz0iV2luZG93IExheW91dCI+DQogICAgICAgICAgICA8Q21kIElEPSI5MDExIiBCb3VuZHM9IjAsMCIgTmFtZT0iV2luZG93TGF5b3V0SCIgSWNvbk9ubHk9IjEiIFRpcHM9Ikhvcml6b250YWwgTGF5b3V0IiBJY29uPSJXaW5kb3dMYXlvdXRIIiAvPg0KICAgICAgICAgICAgPENtZCBJRD0iOTAxMiIgQm91bmRzPSIxLDAiIE5hbWU9IldpbmRvd0xheW91dFYiIEljb25Pbmx5PSIxIiBUaXBzPSJWZXJ0aWNhbCBMYXlvdXQiIEljb249IldpbmRvd0xheW91dFYiIC8+DQogICAgICAgICAgICA8Q21kIElEPSI5MDEzIiBCb3VuZHM9IjAsMSIgTmFtZT0iV2luZG93TGF5b3V0VCIgSWNvbk9ubHk9IjEiIFRpcHM9IlRpbGUgTGF5b3V0IiBJY29uPSJXaW5kb3dMYXlvdXRUIiAvPg0KICAgICAgICAgICAgPENtZCBJRD0iOTAxNCIgQm91bmRzPSIxLDEiIE5hbWU9IldpbmRvd0xheW91dEMiIEljb25Pbmx5PSIxIiBUaXBzPSJDb2xsYXBzZSBMYXlvdXQiIEljb249IldpbmRvd0xheW91dEMiIC8+DQogICAgICAgIDwvR3JvdXA+DQoNCiAgICAgICAgPEdyb3VwIE5hbWU9IkNsb3NlIiBBbGlhcz0iQ2xvc2UiPg0KICAgICAgICAgICAgPENtZCBJRD0iOTAyMSIgQm91bmRzPSIwLDAiIE5hbWU9IkNsb3NlQ3VyV25kIiBBbGlhcz0iQ2xvc2UgQ3VycmVudCIgSWNvbj0iQ2xvc2VBbGxXaW5kb3ciIC8+DQogICAgICAgICAgICA8Q21kIElEPSI5MDIyIiBCb3VuZHM9IjEsMCIgTmFtZT0iQ2xvc2VBbGxXbmRzIiBBbGlhcz0iQ2xvc2UgQWxsIiBJY29uPSJDbG9zZUFsbFdpbmRvdyIgLz4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjkwMjMiIEJvdW5kcz0iMCwxIiBOYW1lPSJQcmV2V25kIiBBbGlhcz0iUHJldmlvdXMiIEljb25Pbmx5PSIxIiBJY29uPSJVcCIgVGlwcz0iUHJldmlvdXMgV2luZG93IiAvPg0KICAgICAgICAgICAgPENtZCBJRD0iOTAyNCIgQm91bmRzPSIxLDEiIE5hbWU9Ik5leHRXbmQiIEFsaWFzPSJOZXh0IiBJY29uT25seT0iMSIgSWNvbj0iRG93biIgVGlwcz0iTmV4dCBXaW5kb3ciIC8+DQogICAgICAgICAgICA8Q21kIElEPSI5MDI1IiBCb3VuZHM9IjAsMiwyLDEiIFR5cGU9IjciIE5hbWU9Ikxpc3RXeFduZHMiIEFsaWFzPSJXaW5kb3dzIiAvPg0KICAgICAgICA8L0dyb3VwPg0KDQogICAgPC9UYWI+DQoNCiAgICA8VGFiIElEPSIxMCIgTmFtZT0iSGVscCIgQWxpYXM9IkhlbHAiID4NCg0KICAgICAgICA8R3JvdXAgTmFtZT0iSGVscCIgQWxpYXM9IkhlbHAiPg0KICAgICAgICAgICAgPENtZCBJRD0iMTAwMDEiIEJvdW5kcz0iMCwwLDIsMSIgTmFtZT0iTG9nVmlldyIgQWxpYXM9IkxvZyBWaWV3KEwpIiBJY29uPSJMb2dWaWV3IiAvPg0KICAgICAgICAgICAgPENtZCBJRD0iMTAwMDIiIEJvdW5kcz0iMCwxLDIsMSIgTmFtZT0iSGVscCIgQWxpYXM9IkhlbHAoSCkiIEljb249IkhlbHAiIC8+DQogICAgICAgICAgICA8Q21kIElEPSIxMDAwOCIgQm91bmRzPSIwLDIsMiwxIiBOYW1lPSJVcGRhdGVMaXN0cyIgQWxpYXM9IlVwZGF0ZSBMaXN0cyhJKSIgSWNvbj0iVXBkYXRlTGlzdHMiIC8+DQogICAgICAgIDwvR3JvdXA+DQoNCiAgICAgICAgPEdyb3VwIE5hbWU9IkxhbmciIEFsaWFzPSJMYW5ndWFnZSI+DQogICAgICAgICAgIDxDbWQgSUQ9IjEwMDA5IiBCb3VuZHM9IjAsMCwyLDEiIE5hbWU9IkxhbmdTd2FwIiBBbGlhcz0iU3dhcCBsYW5ndWFnZSIgSWNvbj0iTGFuZ1N3YXAiIC8+DQogICAgICAgIDwvR3JvdXA+DQoNCiAgICAgICAgPEdyb3VwIE5hbWU9IkFib3V0IiBBbGlhcz0iQWJvdXQiPg0KICAgICAgICAgICAgPENtZCBJRD0iMTAwMDMiIEJvdW5kcz0iMCwwLDIsMSIgTmFtZT0iQWJvdXQiIEFsaWFzPSJBYm91dChBKSIgSWNvbj0iV1RBSUFib3V0IiAvPg0KICAgICAgICAgICAgPENtZCBJRD0iMTAwMDQiIEJvdW5kcz0iMSwwIiBOYW1lPSJBYm91dFF0IiBBbGlhcz0iQWJvdXQgUXQoUSkiIEljb249IlF0IiBWaXNpYmxlPSIwIiAvPg0KICAgICAgICA8L0dyb3VwPg0KDQogICAgICAgIDxHcm91cCBOYW1lPSJMb2dpbiIgQWxpYXM9IkxvZ2luKERlYnVnKSI+DQogICAgICAgICAgICA8Q21kIElEPSIxMDAwNyIgQm91bmRzPSIwLDAiIE5hbWU9IlJlZ2lzdGVyIiBBbGlhcz0iKERlYnVnKVNvZnR3YXJlIFJlZ2lzdHJhdGlvbihSKSIgSWNvbj0iUmVnaXN0ZXIiIC8+DQogICAgICAgICAgICA8Q21kIElEPSIxMDAwNSIgQm91bmRzPSIxLDAiIE5hbWU9IkxvZ2luIiBBbGlhcz0iKERlYnVnKVVzZXIgTG9naW4oVSkiIEljb249IkxvZ2luIiAvPg0KICAgICAgICA8L0dyb3VwPg0KDQogICAgICAgIDxHcm91cCBOYW1lPSJEZWJ1ZyIgQWxpYXM9IkRlYnVnKERlYnVnKSI+DQogICAgICAgICAgICA8Q21kIElEPSIxMDAwNiIgQm91bmRzPSIwLDAsMiwxIiBOYW1lPSIoRGVidWcpIFN1bSBQYXJhbWV0ZXJzIiBBbGlhcz0iKERlYnVnKVN1bW1hcml6ZSBNb2RlbCBQYXJhbWV0ZXJzIiBJY29uPSJTdW1QYXJhIiAvPg0KICAgICAgIDwvR3JvdXA+DQogICAgPC9UYWI+DQoNCjwvUmliYm9uPg0K
\ No newline at end of file
+77u/PD94bWwgcup_mpadmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4NCg0KPCEtLSDnvJbovpHkvbwzy/nlKggWE1MU3B5IHYyMDA2IFUgKGh0dHA6Ly93d3cuYWx0b3ZhLmNvbSkg55SxIGFueSAoYW55KSAtLT4NCjwhLS0qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLS0+DQo8IS0tICAgIOacrOaWh+aho+eahOebrueahOaYr+W7uueri1dUQUnova/ku7bns7vnu5/nmoToj5zljZXlsYLmrKHlhbPns7so6ZKI5a+5UmliYm9u5qih5byPKSAgICAgICAgICAgICAgICAgICAgICAgLS0+DQo8IS0tICAgIEF1dGhvcihzKTogd2FuZ3pnICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPg0KPCEtLSAgICBEYXRlOiAyMDI0MDcxOCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAtLT4NCjwhLS0qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLS0+DQoNCjwhLS0qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLS0+DQo8IS0tDQogICAgVGFiIOe6p+WIqw0KICAgICAgICBJRDogICAgICAgICAg5ZSv5LiA5qCH6K+GDQogICAgICAgIE5hbWXvvJogICAgICAg5ZCN56ew77yM6YCa5bi46Iux5paHDQogICAgICAgIEFsaWFz77yaICAgICAg5Yir5ZCN77yM6YCa5bi45Lit5paHDQogICAgICAgIEZpbGVNb2RlOiAgICDmmK/lkKbmlofku7ZNZW515qih5byP77yMMSBvciAwDQogICAgICAgIFZpc2libGXvvJogICAg5piv5ZCm5Y+v6KeB77yMMSBvciAwDQogICAgICAgIFRpcHPvvJogICAgICAg6L6F5Yqp6K+05piODQoNCiAgICAgICAgR3JvdXAg57qn5YirDQogICAgICAgICAgICBOYW1l77yaICAgICAgIOWQjeensO+8jOmAmuW4uOiLseaWhw0KICAgICAgICAgICAgQWxpYXPvvJogICAgICDliKvlkI3vvIzpgJrluLjkuK3mlocNCg0KICAgICAgICAgICAgQ21kIOe6p+WIqw0KICAgICAgICAgICAgICAgIElEOiAgICAgICAgICDllK/kuIDmoIfor4YNCiAgICAgICAgICAgICAgICBUeXBlOiAgICAgICAg5a+55bqU5o6n5Lu257G75Z6LOg0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAw4oCU4oCU6buY6K6kQnV0dG9uDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIDHigJTigJTluKbkuIvmi4noj5zljZVCdXR0b24NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgMuKAlOKAlENvbWJvQm94DQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIDPigJTigJRDaGVja0JveA0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICA04oCU4oCUUmFkaW9CdXR0b24NCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNeKAlOKAlFRleHQNCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgNuKAlOKAlExhYmVsDQogICAgICAgICAgICAgICAgICAgICAgICAgICAgIDfigJTigJRMaXN0V2lkZ2V0DQogICAgICAgICAgICAgICAgTmFtZe+8miAgICAgICDlkI3np7DvvIzpgJrluLjoi7HmlocNCiAgICAgICAgICAgICAgICBBbGlhc++8miAgICAgIOWIq+WQje+8jOmAmuW4uOS4reaWhw0KICAgICAgICAgICAgICAgIEljb27vvJogICAgICAg5Zu+5qCHDQogICAgICAgICAgICAgICAgU2hvcnRLZXnvvJogICDlv6vmjbfplK4NCiAgICAgICAgICAgICAgICBCb3VuZHM6ICAgICAg5L2N572u5L+h5oGv77yM5YWo5piv5pW05pWw77yM5ZyoR3JpZExheW91dOS4rQ0KICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoMCwwLDEsMikgKDAsMCkg5YiG5Yir5Li6eHl3aA0KICAgICAgICAgICAgICAgIEV4dEluZm86ICAgICDmianlsZXkv6Hmga/vvIzlpoLmk43kvZzlr7nosaHnmoTooajlkI0s5LiL5ouJ6YCJ6aG5562JDQogICAgICAgICAgICAgICAgRXh0TmFtZXM6ICAgIOaJqeWxleS/oeaBr+WvueW6lOeahE5hbWXvvIzlpoLkuIvmi4lidXR0b27lr7nlupTnmoROYW1lDQogICAgICAgICAgICAgICAgVGlwc++8miAgICAgICDovoXliqnor7TmmI4NCi0tPg0KPCEtLSoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiotLT4NCg0KPFJpYmJvbj4NCg0KICAgIDxUYWIgSUQ9IjEiIE5hbWU9IlByb2pNYW5hZ2VyIiBBbGlhcz0iUHJvaiBNYW5hZ2VyIiBGaWxlTW9kZT0iMSIgPg0KDQogICAgICAgIDxHcm91cCBOYW1lPSJQcm9qZWN0IiBBbGlhcz0iRmlsZSI+DQogICAgICAgICAgICA8Q21kIElEPSIxMDAwIiBOYW1lPSJBcHBIb21lIiBBbGlhcz0iIiBJY29uPSJBcHBIb21lMTI4IiAvPg0KICAgICAgICAgICAgPENtZCBJRD0iLTEiIE5hbWU9IlNlcGFyYXRvciIgQWxpYXM9IlNlcGFyYXRvciIgVGlwcz0iIiAvPg0KICAgICAgICAgICAgPENtZCBJRD0iMTAwMSIgTmFtZT0iUHJvak5ldyIgQWxpYXM9Ik5ldyBwcm9qZWN0IiBTaG9ydEtleT0iQ3RybCtOIiBJY29uPSJOZXdQcm9qIiAvPg0KICAgICAgICAgICAgPENtZCBJRD0iMTAwMiIgTmFtZT0iUHJvak9wZW4iIEFsaWFzPSJPcGVuIHByb2plY3QiIFNob3J0S2V5PSJDdHJsK08iIEljb249Ik9wZW5Qcm9qIiAvPg0KICAgICAgICAgICAgPENtZCBJRD0iMTAwMyIgTmFtZT0iUHJvakNsb3NlIiBBbGlhcz0iQ2xvc2UgcHJvamVjdCIgSWNvbj0iQ2xvc2VQcm9qIiAvPg0KICAgICAgICAgICAgPENtZCBJRD0iLTEiIE5hbWU9IlNlcGFyYXRvciIgQWxpYXM9IlNlcGFyYXRvciIgVGlwcz0iIiAvPg0KICAgICAgICAgICAgPENtZCBJRD0iMTAwNSIgTmFtZT0iUHJvalNhdmUiIEFsaWFzPSJTYXZlIHByb2plY3QiIFNob3J0S2V5PSJDdHJsK1MiIEljb249IlNhdmVQcm9qIiAvPg0KICAgICAgICAgICAgPENtZCBJRD0iMTAwNiIgTmFtZT0iUHJvalNhdmVBcyIgQWxpYXM9IlNhdmUgcHJvamVjdCBhcyIgSWNvbj0iU2F2ZWFzIiAvPg0KICAgICAgICAgICAgPENtZCBJRD0iMTAwNyIgTmFtZT0iUHJvakNvbmZpZyIgQWxpYXM9IlByb2plY3RJbmZvIiBJY29uPSJQcm9qSW5mbyIgLz4NCg0KICAgICAgICAgICAgPENtZCBJRD0iLTEiIE5hbWU9IlNlcGFyYXRvciIgQWxpYXM9IlNlcGFyYXRvciIgVGlwcz0iIiAvPg0KICAgICAgICAgICAgPENtZCBJRD0iMTAwMDIiIE5hbWU9IkhlbHAiIEFsaWFzPSJIZWxwIiBJY29uPSJIZWxwIiAvPg0KICAgICAgICAgICAgPENtZCBJRD0iMTAwMDMiIE5hbWU9IkFib3V0IiBBbGlhcz0iQWJvdXQiIEljb249IldUQUlBYm91dCIgLz4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjEwMDA4IiBOYW1lPSJVcGRhdGVMaXN0cyIgQWxpYXM9IlVwZGF0ZSBsaXN0cyIgSWNvbj0iVXBkYXRlTGlzdHMiIC8+DQogICAgICAgICAgICA8Q21kIElEPSItMSIgTmFtZT0iU2VwYXJhdG9yIiBBbGlhcz0iU2VwYXJhdG9yIiBUaXBzPSIiIC8+DQogICAgICAgICAgICA8Q21kIElEPSIxMDEwIiBOYW1lPSJBcHBRdWl0IiBBbGlhcz0iUXVpdChYKSIgSWNvbj0iQ2xvc2UiIC8+DQogICAgICAgIDwvR3JvdXA+DQogICAgPC9UYWI+DQoNCiAgICA8VGFiIElEPSIwIiBOYW1lPSJXZWxDb21lIiBBbGlhcz0iU3RhcnQiID4NCg0KICAgICAgICA8R3JvdXAgTmFtZT0iRGF0YU1hbmFnZXIiIEFsaWFzPSJEYXRhIj4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjEwOTkiIEJvdW5kcz0iMCwwLDIsMSIgTmFtZT0iV2VsbE5ldyIgQWxpYXM9Ik5ldyB3ZWxsIiBJY29uPSJXZWxsTmV3IiAvPg0KICAgICAgICAgICAgPENtZCBJRD0iMjAwNSIgQm91bmRzPSIwLDEsMiwxIiBOYW1lPSJEYXRhUmF0ZSIgQWxpYXM9IlJhdGUiIEV4dEluZm89IlBfREFUQV9HQVVHRV9GIiBJY29uPSJSYXRlRGF0YSIgLz4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjIwMDYiIEJvdW5kcz0iMCwyLDIsMSIgTmFtZT0iRGF0YVByZSIgQWxpYXM9IlByZXNzdXJlIiBFeHRJbmZvPSJQX0RBVEFfR0FVR0VfUCIgSWNvbj0iUHJlc3N1cmVEYXRhIiAvPg0KICAgICAgICA8L0dyb3VwPg0KDQogICAgICAgIDxHcm91cCBOYW1lPSJBbmFsRWRpdCIgQWxpYXM9IkFuYWwiPg0KICAgICAgICAgICAgPENtZCBJRD0iMzAwNiIgQm91bmRzPSIwLDAsMiwxIiBOYW1lPSJBbmFsTmV3IiBBbGlhcz0iTmV3IGFuYWx5c2lzIiBJY29uPSJKb2JOZXciIC8+DQogICAgICAgICAgICA8Q21kIElEPSIzMDA3IiBCb3VuZHM9IjAsMSwyLDEiIE5hbWU9IkFuYWxFZGl0IiBBbGlhcz0iTWFuYWdpbmciIEljb249IkpvYkVkaXQiIFZpc2libGU9IjAiIC8+DQogICAgICAgICAgICA8Q21kIElEPSI5MTAxIiBCb3VuZHM9IjAsMSIgTmFtZT0iVmlzaWJsZUFuYWxCYXNpYyIgQWxpYXM9IkJhc2ljIGluZm8iIEljb249IklucHV0QmFzaWMiIC8+DQogICAgICAgICAgICA8Q21kIElEPSI5MTAyIiBCb3VuZHM9IjEsMSIgTmFtZT0iVmlzaWJsZUFuYWxQVlQiIEFsaWFzPSJQVlQgaW5mbyIgSWNvbj0iSW5wdXRGbHVpZCIgLz4NCiAgICAgICAgPC9Hcm91cD4NCg0KICAgICAgICA8R3JvdXAgTmFtZT0iQW5hbHl0aWNhbCIgQWxpYXM9IkZsb3cgcGVyaW9kIGFuYWwiPg0KICAgICAgICAgICAgPENtZCBJRD0iMzAwMyIgQm91bmRzPSIwLDAsMiwxIiBOYW1lPSJBbmFsUEYiIEFsaWFzPSJQZXJpb2Qgc2VsZWN0IiBFeHRJbmZvPSJQRiIgSWNvbj0iUEYiIC8+DQogICAgICAgICAgICA8Q21kIElEPSIzMDA0IiBCb3VuZHM9IjAsMSwyLDEiIE5hbWU9IkFuYWxGbG93U2VnIiBBbGlhcz0iUGVyaW9kIGFuYWwiIEljb249IkZsb3dQZXJpb2QiIC8+DQogICAgICAgIDwvR3JvdXA+DQoNCiAgICAgICAgPEdyb3VwIE5hbWU9IkFuYWx5dGljYWwiIEFsaWFzPSJJbnRlcnByZXRhdGlvbiBGaXR0aW5nIj4NCg0KICAgICAgICAgICAgPENtZCBJRD0iMzEwNSIgQm91bmRzPSIwLDAsMiwxIiBOYW1lPSJEZWNvbnZvbHYiIEFsaWFzPSJEZWNvbnZvbHV0aW9uIiBJY29uPSJEZWNvbnZvbHYiIFZpc2libGU9IjAiIC8+DQogICAgICAgICAgICA8Q21kIElEPSIzMTAxIiBCb3VuZHM9IjAsMSwyLDEiIE5hbWU9IkZpdE1vZGVsIiBBbGlhcz0iQW5hbHl0aWNhbCIgSWNvbj0iRml0TW9kZWwiIC8+DQogICAgICAgICAgICA8Q21kIElEPSIzMTA0IiBCb3VuZHM9IjAsMiwyLDEiIE5hbWU9Im5tRml0TW9kZWwiIEFsaWFzPSJOdW1lcmljYWwiIEljb249IkZpdE1vZGVsIiAvPg0KDQogICAgICAgICAgICA8Q21kIElEPSIzMTAyIiBCb3VuZHM9IjAsMywyLDEiIE5hbWU9IkF1dG9GaXQiIEFsaWFzPSJGaXR0aW5nIiBJY29uPSJBdXRvRml0IiAvPg0KICAgICAgIDwvR3JvdXA+DQoNCiAgICAgICAgPEdyb3VwIE5hbWU9Ik51bWVyaWNhbCIgQWxpYXM9Ikdlb2xvZ2ljYWwgTW9kZWxpbmcoRGVidWcpIiBWaXNpYmxlPSIwIj4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjUwMDIiIEJvdW5kcz0iMCwwLDIsMSIgTmFtZT0iUHJvcGVydHlMb2FkIiBBbGlhcz0iUHJvcGVydHkgSW1wb3J0IiBJY29uPSJQcmVwYXJlR3JpZCIgLz4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjUxMDIiIEJvdW5kcz0iMCwxLDIsMSIgTmFtZT0iUnVuR3JpZCIgQWxpYXM9IkdyaWQgR2VuZXJhdGlvbiIgSWNvbj0iUGxhdGVGaXQiIC8+DQogICAgICAgICAgICA8Q21kIElEPSI1MjAxIiBCb3VuZHM9IjAsMiwyLDEiIE5hbWU9IkFuYWxNYXAiIEFsaWFzPSJDYWxjdWxhdGlvbiIgSWNvbj0iUnVuRXgiIC8+DQogICAgICAgICAgICA8Q21kIElEPSI1MjAyIiBCb3VuZHM9IjAsMywyLDEiIE5hbWU9IkFuYWxQRiIgQWxpYXM9IkF1eGlsaWFyeSBGaXR0aW5nIiBFeHRJbmZvPSJQRiIgSWNvbj0iUnVuT3RoZXIiIFZpc2libGU9IjAiLz4NCiAgICAgICA8L0dyb3VwPg0KDQogICAgICAgIDxHcm91cCBOYW1lPSJXZWxsTWFwIiBBbGlhcz0iV2VsbCBNYXAiPg0KICAgICAgICAgICAgPENtZCBJRD0iMzAwOCIgQm91bmRzPSIwLDAsMiwxIiBOYW1lPSJBbmFsTWFwIiBBbGlhcz0iTWFwIiBJY29uPSJNYXAyRCIgVmlzaWJsZT0iMSIgLz4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjMwMTgiIEJvdW5kcz0iMCwxLDIsMSIgTmFtZT0iQW5hbEludGVyZmVyZSIgQWxpYXM9IkludGVyZmVyZW5jZSBTZXR0aW5nIiBJY29uPSJNYXAyRCIgVmlzaWJsZT0iMCIgLz4NCiAgICAgICAgPC9Hcm91cD4NCg0KICAgICAgICA8R3JvdXAgTmFtZT0iV2luZG93IiBBbGlhcz0iV2luZG93IERpc3BsYXkoRGVidWcpIiBWaXNpYmxlPSIwIiA+DQogICAgICAgICAgICA8Q21kIElEPSI5MDAyIiBCb3VuZHM9IjAsMCIgTmFtZT0iVmlzaWJsZU1vZGVscyIgQWxpYXM9Ik1vZGVsIFdpbmRvdyIgSWNvbj0iVmlzaWJsZU1vZGVscyIgLz4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjkwMDMiIEJvdW5kcz0iMSwwIiBOYW1lPSJWaXNpYmxlUGFyYW1ldGVycyIgQWxpYXM9IlBhcmFtZXRlciBXaW5kb3ciIEljb249IlZpc2libGVQYXJhbWV0ZXJzIiAvPg0KICAgICAgICAgICAgPENtZCBJRD0iOTEwMSIgQm91bmRzPSIwLDEiIE5hbWU9IlZpc2libGVBbmFsQmFzaWMiIEFsaWFzPSJCYXNpYyBJbmZvIiBJY29uPSJJbnB1dEJhc2ljIiAvPg0KICAgICAgICAgICAgPENtZCBJRD0iOTEwMiIgQm91bmRzPSIxLDEiIE5hbWU9IlZpc2libGVBbmFsUFZUIiBBbGlhcz0iUFZUIERhdGEiIEljb249IklucHV0Rmx1aWQiIC8+DQogICAgICAgICAgICA8Q21kIElEPSI5MTAzIiBCb3VuZHM9IjAsMiIgTmFtZT0iVmlzaWJsZUFuYWxEaWZmIiBBbGlhcz0iRElGRiBEYXRhIiBJY29uPSJJbnB1dEZsdWlkIiAvPg0KICAgICAgICAgICAgPENtZCBJRD0iOTEwNCIgQm91bmRzPSIxLDIiIE5hbWU9IlZpc2libGVBbmFsUHNldSIgQWxpYXM9IlBzZXVkbyBQcmVzc3VyZSBEYXRhIiBJY29uPSJJbnB1dEZsdWlkIiAvPg0KICAgICAgICA8L0dyb3VwPg0KDQogICAgICAgIDxHcm91cCBOYW1lPSJIZWxwIiBBbGlhcz0iSGVscCI+DQogICAgICAgICAgICA8Q21kIElEPSIxMDAwMiIgQm91bmRzPSIwLDAsMiwxIiBOYW1lPSJIZWxwIiBBbGlhcz0iSGVscCIgSWNvbj0iSGVscCIgLz4NCiAgICAgICAgPC9Hcm91cD4NCg0KICAgIDwvVGFiPg0KDQoNCiAgICA8VGFiIElEPSIyIiBOYW1lPSJEYXRhTWFuYWdlciIgQWxpYXM9IkRhdGEgTWFuYWdlciIgPg0KDQogICAgICAgIDxHcm91cCBOYW1lPSJEYXRhTWFuYWdlciIgQWxpYXM9IldlbGwiPg0KICAgICAgICAgICAgPENtZCBJRD0iMTA5OSIgQm91bmRzPSIwLDAsMiwxIiBOYW1lPSJXZWxsTmV3IiBBbGlhcz0iTmV3IFdlbGwoVykiIEljb249IldlbGxOZXciIC8+DQogICAgICAgIDwvR3JvdXA+DQoNCiAgICAgICAgPEdyb3VwIE5hbWU9IkRhdGFNYW5hZ2VyIiBBbGlhcz0iQmFzaWMgRGF0YSI+DQogICAgICAgICAgICA8Q21kIElEPSIyMDAxIiBCb3VuZHM9IjAsMCwyLDEiIE5hbWU9IkRhdGFXZWxsQmFzaWMiIEFsaWFzPSJXZWxsIEJhc2ljIERhdGEoQikiIEV4dEluZm89IkJfV0VMTCIgSWNvbj0iQmFzaWNEYXRhIiAvPg0KICAgICAgICAgICAgPENtZCBJRD0iMjAwMiIgQm91bmRzPSIwLDEsMiwxIiBOYW1lPSJEYXRhTGF5ZXIiIEFsaWFzPSJHZW9sb2dpY2FsIExheWVyIERhdGEoTCkiIEV4dEluZm89IkJfTEFZRVIiIEljb249IkxheWVyRGF0YSIgLz4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjIwMDMiIEJvdW5kcz0iMCwyLDIsMSIgTmFtZT0iRGF0YVJlcyIgQWxpYXM9IlJlc2Vydm9pciBEYXRhKFIpIiBFeHRJbmZvPSJQX0RBVEFfUkVTIiBJY29uPSJSZXNEYXRhIiAvPg0KICAgICAgICAgICAgPENtZCBJRD0iMjAwNCIgQm91bmRzPSIwLDMsMiwxIiBOYW1lPSJEYXRhRmx1IiBBbGlhcz0iRmx1aWQgUHJvcGVydHkgRGF0YShGKSIgRXh0SW5mbz0iUF9EQVRBX0ZMVUlEIiBJY29uPSJGbHVpZFByb3BlcnR5IiAvPg0KICAgICAgICA8L0dyb3VwPg0KDQogICAgICAgIDxHcm91cCBOYW1lPSJEYXRhTWFuYWdlciIgQWxpYXM9IlByZXNzdXJlIFJhdGUiPg0KICAgICAgICAgICAgPENtZCBJRD0iMjAwNSIgQm91bmRzPSIwLDAsMiwxIiBOYW1lPSJEYXRhUmF0ZSIgQWxpYXM9IlJhdGUgRGF0YShRKSIgRXh0SW5mbz0iUF9EQVRBX0dBVUdFX0YiIEljb249IlJhdGVEYXRhIiAvPg0KICAgICAgICAgICAgPENtZCBJRD0iMjAwNiIgQm91bmRzPSIwLDEsMiwxIiBOYW1lPSJEYXRhUHJlIiBBbGlhcz0iUHJlc3N1cmUgRGF0YShQKSIgRXh0SW5mbz0iUF9EQVRBX0dBVUdFX1AiIEljb249IlByZXNzdXJlRGF0YSIgLz4NCiAgICAgICAgPC9Hcm91cD4NCg0KICAgICAgICA8R3JvdXAgTmFtZT0iR1g2IiBBbGlhcz0iUGxhdGZvcm0gSW50ZXJvcGVyYWJpbGl0eSI+DQogICAgICAgICAgICA8Q21kIElEPSIyMDA3IiBCb3VuZHM9IjAsMCwyLDEiIE5hbWU9Ikd4NkNvbm5lY3RTZXJ2ZXIiIEFsaWFzPSJHWDYgSW50ZXJvcGVyYWJpbGl0eShDKSIgSWNvbj0iR3g2Q29ubmVjdFNlcnZlciIgLz4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjIwMDgiIEJvdW5kcz0iMCwxLDIsMSIgTmFtZT0iR3g2R2V0VGFza3MiIEFsaWFzPSJHZXQgVGFza3MoRCkiIEljb249Ikd4NkdldFRhc2tzIiAgVmlzaWJsZT0iMCIvPg0KICAgICAgICAgICAgPENtZCBJRD0iMjAwOSIgQm91bmRzPSIwLDIsMiwxIiBOYW1lPSJHeDZVcGRhdGVUYXNrcyIgQWxpYXM9IlVwZGF0ZSBTdGF0dXMoVSkiIEljb249Ikd4NlVwZGF0ZVRhc2tzIiAgVmlzaWJsZT0iMCIvPg0KICAgICAgICA8L0dyb3VwPg0KDQogICAgPC9UYWI+DQoNCiAgICA8VGFiIElEPSIyMDEiIE5hbWU9IkRhdGFFZGl0IiBBbGlhcz0iRGF0YSBFZGl0IiA+DQogICAgICAgIDxHcm91cCBOYW1lPSJEYXRhRWRpdCIgQWxpYXM9IkRhdGEgRWRpdGluZyI+DQogICAgICAgICAgICA8Q21kIElEPSIzMDAxIiBCb3VuZHM9IjAsMCwyLDEiIE5hbWU9IkFuYWxGbHUiIEFsaWFzPSJSYXRlIEVkaXRpbmciIEV4dEluZm89IkYiIE1kaVR5cGU9IkRhdGFFZGl0IiBJY29uPSJSYXRlRGF0YSIgLz4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjMwMDIiIEJvdW5kcz0iMCwxLDIsMSIgTmFtZT0iQW5hbFByZXNzIiBBbGlhcz0iUHJlc3N1cmUgRWRpdGluZyIgRXh0SW5mbz0iUCIgTWRpVHlwZT0iRGF0YUVkaXQiIEljb249IlByZXNzdXJlRGF0YSIgLz4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjMzMDMiIEJvdW5kcz0iMCwyLDIsMSIgTmFtZT0iQW5hbFByZUNvbiIgQWxpYXM9IlByZXNzdXJlIENvbnZlcnNpb24iIEV4dEluZm89IlAiIE1kaVR5cGU9IkRhdGFFZGl0IiBJY29uPSJBbmFsUHJlQ29uIiAvPg0KICAgICAgICA8L0dyb3VwPg0KICAgIDwvVGFiPg0KDQogICAgPFRhYiBJRD0iMyIgTmFtZT0iQW5hbHl0aWNhbFRlc3QiIEFsaWFzPSJJbnRlcnByZXRhdGlvbiIgPg0KDQogICAgICAgIDxHcm91cCBOYW1lPSJBbmFsRWRpdCIgQWxpYXM9IkFuYWx5c2lzIE1hbmFnZW1lbnQiPg0KICAgICAgICAgICAgPENtZCBJRD0iMzAwNiIgQm91bmRzPSIwLDAiIE5hbWU9IkFuYWxOZXciIEFsaWFzPSJOZXcgQW5hbHlzaXMiIEljb249IkpvYk5ldyIgLz4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjMwMDciIEJvdW5kcz0iMSwwIiBOYW1lPSJBbmFsRWRpdCIgQWxpYXM9IkFuYWx5c2lzIE1hbmFnZW1lbnQiIEljb249IkpvYkVkaXQiIC8+DQogICAgICAgIDwvR3JvdXA+DQoNCiAgICAgICAgPEdyb3VwIE5hbWU9IlNlZ0FuYWwiIEFsaWFzPSJGbG93IFBlcmlvZCBBbmFseXNpcyI+DQogICAgICAgICAgICA8Q21kIElEPSIzMDAzIiBCb3VuZHM9IjAsMCwyLDEiIE5hbWU9IkFuYWxQRiIgQWxpYXM9IkZsb3cgUGVyaW9kIFNlbGVjdGlvbiIgRXh0SW5mbz0iUEYiIEljb249IlBGIiAvPg0KICAgICAgICAgICAgPENtZCBJRD0iMzAwNCIgQm91bmRzPSIwLDEsMiwxIiBOYW1lPSJBbmFsRmxvd1NlZyIgQWxpYXM9IkZsb3cgUGVyaW9kIEFuYWx5c2lzIiBJY29uPSJGbG93UGVyaW9kIiAvPg0KICAgICAgICAgICAgPENtZCBJRD0iMzAwNSIgQm91bmRzPSIwLDIsMiwxIiBOYW1lPSJBbmFsT3RoZXJzIiBBbGlhcz0iQ2hhcmFjdGVyaXN0aWMgTGluZSBBbmFseXNpcyIgVHlwZT0iMSIgIFZpc2libGU9IjAiIEV4dE5hbWVzPSJDaGFydFQ7Q2hhcnRTcXJ0VDtDaGFydDI1VDtDaGFydDVUIiBFeHRJbmZvPSJDaGFydCBUO0NoYXJ0IFNxcnQoVCk7Q2hhcnQgMC4yNVQ7Q2hhcnQgLTAuNVQiIEljb249IkFzc2lzQW5hbCIgLz4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjMwMTAiIEJvdW5kcz0iMCwzLDIsMSIgTmFtZT0iQW5hbFduZE0iIEFsaWFzPSJGbG93IFBlcmlvZCBXaW5kb3ciIFR5cGU9IjEiIEljb249IkFuYWxXbmRNIiAvPg0KICAgICAgICAgICAgPENtZCBJRD0iMzAwOSIgQm91bmRzPSIwLDQsMiwxIiBOYW1lPSJBbmFsRGlzdHJpIiBBbGlhcz0iRGlzdHJpYnV0aW9uIENoYXJ0IiBUeXBlPSIxIiBFeHROYW1lcz0iQ2hhcnREZW47Q2hhcnRWaXMiIEV4dEluZm89IkNvbmNlbnRyYXRpb24gRGlzdHJpYnV0aW9uO1Zpc2Nvc2l0eSBEaXN0cmlidXRpb24iIEljb249IkFuYWxEaXN0cmkiIC8+DQogICAgICAgIDwvR3JvdXA+DQoNCiAgICAgICAgPEdyb3VwIE5hbWU9IkRhdGFGaXQiIEFsaWFzPSJJbnRlcnByZXRhdGlvbiBGaXR0aW5nIj4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjMxMDUiIEJvdW5kcz0iMCwwLDIsMSIgTmFtZT0iRGVjb252b2x2IiBBbGlhcz0iRGVjb252b2x1dGlvbihEZWJ1ZykiIEljb249IkRlY29udm9sdiIgLz4NCg0KICAgICAgICAgICAgPENtZCBJRD0iMzEwMSIgQm91bmRzPSIwLDEsMiwxIiBOYW1lPSJGaXRNb2RlbCIgQWxpYXM9IkFuYWx5dGljYWwgU29sdXRpb24iIEljb249IkZpdE1vZGVsIiAvPg0KICAgICAgICAgICAgPENtZCBJRD0iMzEwNCIgQm91bmRzPSIwLDIsMiwxIiBOYW1lPSJubUZpdE1vZGVsIiBBbGlhcz0iTnVtZXJpY2FsIFNvbHV0aW9uIiBJY29uPSJGaXRNb2RlbCIgLz4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjMxMDIiIEJvdW5kcz0iMCwzLDIsMSIgTmFtZT0iQXV0b0ZpdCIgQWxpYXM9IkF1dG8gRml0dGluZyIgSWNvbj0iQXV0b0ZpdCIgLz4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjMxMDMiIEJvdW5kcz0iMCw0LDIsMSIgTmFtZT0iUGxhdGVGaXQiIEFsaWFzPSJTZW5zaXRpdml0eSBBbmFseXNpcyIgSWNvbj0iUGxhdGVGaXQiIC8+DQogICAgICAgPC9Hcm91cD4NCg0KICAgICAgICA8R3JvdXAgTmFtZT0iQUlUZXN0IiBBbGlhcz0iSW50ZWxsaWdlbnQgV2VsbCBUZXN0aW5nIj4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjM5MDEiIEJvdW5kcz0iMCwwLDIsMSIgTmFtZT0iTW9kZWxDbGFzc2lmeSIgQWxpYXM9Ik1vZGVsIFJlY29nbml0aW9uIiBJY29uPSJNb2RlbENsYXNzaWZ5IiAvPg0KICAgICAgICA8L0dyb3VwPg0KDQogICAgICAgIDxHcm91cCBOYW1lPSJSZWxhdGl2ZVRvb2wiIEFsaWFzPSJSZWxhdGVkIFRvb2xzIj4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjMyMDEiIEJvdW5kcz0iMCwwLDIsMSIgTmFtZT0iVGltZSIgQWxpYXM9IlRpbWUiIEljb249IlRpbWUiIC8+DQogICAgICAgICAgICA8Q21kIElEPSIzMjAyIiBCb3VuZHM9IjAsMSIgTmFtZT0iU2hvd01vZGVsQ2hhcnRzIiBBbGlhcz0iTW9kZWwgU2NoZW1hdGljIiBJY29uPSJTaG93TW9kZWxDaGFydHMiIC8+DQogICAgICAgICAgICA8Q21kIElEPSIzMjA0IiBCb3VuZHM9IjEsMSIgTmFtZT0iU2F2ZUFzTW9kZWxTa2V0Y2giIEFsaWFzPSJTYXZlIEFzIFNjaGVtYXRpYyIgSWNvbj0iU2F2ZUFzTW9kZWxTa2V0Y2giIC8+DQoNCiAgICAgICA8L0dyb3VwPg0KDQo8IS0tICAgICAgICAgICAgICAgICAgICA8Q21kIElEPSIzMjAzIiBCb3VuZHM9IjAsMSIgTmFtZT0iU2hvd01vZGVsU2tldGNoIiBBbGlhcz0iVGhlb3J5IiBJY29uPSJTaG93TW9kZWxTa2V0Y2giIC8+PEdyb3VwIE5hbWU9IlRvb2xTIiBBbGlhcz0iRXh0ZW5kZWQgRnVuY3Rpb25zIj4NCiAgICAgICAgICAgIDxDbWQgSUQ9Ijk4MDEiIEJvdW5kcz0iMCwwLDIsMSIgTmFtZT0iRmxvd1RvUyIgQWxpYXM9IlJhdGUgdG8gU2tpbiBGYWN0b3IiIEljb249IkZsb3dUb1MiIFZpc2libGU9IjAiIC8+DQogICAgICAgICAgICA8Q21kIElEPSI5MjAxIiBCb3VuZHM9IjAsMSwyLDEiIE5hbWU9Ik1peFZpc2Nvc2l0eSIgQWxpYXM9Ik1peGVkIFZpc2Nvc2l0eSIgSWNvbj0iTWl4VmlzY29zaXR5IiBWaXNpYmxlPSIwIiAvPg0KICAgICAgIDwvR3JvdXA+LS0+DQoNCiAgICAgICAgPEdyb3VwIE5hbWU9IkpvYnMiIEFsaWFzPSJSZXN1bHQgTWFuYWdlbWVudCI+DQogICAgICAgICAgICA8Q21kIElEPSIxMDA4IiBCb3VuZHM9IjAsMCIgTmFtZT0iUnN0TG9hZCIgQWxpYXM9IkxvYWQgUmVzdWx0cyIgSWNvbj0iTG9hZEpvYnMiIC8+DQogICAgICAgICAgICA8Q21kIElEPSIxMDA5IiBCb3VuZHM9IjEsMCIgTmFtZT0iUnN0U2F2ZSIgVHlwZT0iMSIgRXh0TmFtZXM9IlJzdFNhdmVDdXI7UnN0U2F2ZUFsbCIgRXh0SW5mbz0iU2F2ZSBDdXJyZW50IFJlc3VsdDtTYXZlIEFsbCBSZXN1bHRzIiBBbGlhcz0iU2F2ZSBSZXN1bHRzIiBJY29uPSJTYXZlSm9icyIgLz4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjEwMTEiIEJvdW5kcz0iMCwxLDIsMSIgTmFtZT0iVG9OdW1lcmljYWwiIEFsaWFzPSJUby1OdW1lcmljYWwiIEljb249IkxvYWRKb2JzIiBWaXNpYmxlPSIwIiAvPg0KICAgICAgICA8L0dyb3VwPg0KDQogICAgICAgIDxHcm91cCBOYW1lPSJXaW5kb3ciIEFsaWFzPSJXaW5kb3cgRGlzcGxheSI+DQogICAgICAgICAgICA8Q21kIElEPSI5MDAyIiBCb3VuZHM9IjAsMCIgTmFtZT0iVmlzaWJsZU1vZGVscyIgQWxpYXM9Ik1vZGVsIFdpbmRvdyIgSWNvbj0iVmlzaWJsZU1vZGVscyIgLz4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjkwMDMiIEJvdW5kcz0iMSwwIiBOYW1lPSJWaXNpYmxlUGFyYW1ldGVycyIgQWxpYXM9IlBhcmFtZXRlciBXaW5kb3ciIEljb249IlZpc2libGVQYXJhbWV0ZXJzIiAvPg0KICAgICAgICAgICAgPENtZCBJRD0iOTEwMSIgQm91bmRzPSIwLDEiIE5hbWU9IlZpc2libGVBbmFsQmFzaWMiIEFsaWFzPSJCYXNpYyBJbmZvIiBJY29uPSJJbnB1dEJhc2ljIiAvPg0KICAgICAgICAgICAgPENtZCBJRD0iOTEwMiIgQm91bmRzPSIxLDEiIE5hbWU9IlZpc2libGVBbmFsUFZUIiBBbGlhcz0iUFZUIERhdGEiIEljb249IklucHV0Rmx1aWQiIC8+DQogICAgICAgICAgICA8Q21kIElEPSI5MTAzIiBCb3VuZHM9IjAsMiIgTmFtZT0iVmlzaWJsZUFuYWxEaWZmIiBBbGlhcz0iRElGRiBEYXRhIiBJY29uPSJJbnB1dEZsdWlkIiAvPg0KICAgICAgICAgICAgPENtZCBJRD0iOTEwNCIgQm91bmRzPSIxLDIiIE5hbWU9IlZpc2libGVBbmFsUHNldSIgQWxpYXM9IlBzZXVkbyBQcmVzc3VyZSBEYXRhIiBJY29uPSJJbnB1dEZsdWlkIiAvPg0KICAgICAgICA8L0dyb3VwPg0KICAgIDwvVGFiPg0KDQogICAgPFRhYiBJRD0iNSIgTmFtZT0iTnVtZXJpY2FsVGVzdCIgQWxpYXM9Ik1vZGVsaW5nIiA+DQogICAgICAgIDxHcm91cCBOYW1lPSJObU1hbmFnZXIiIEFsaWFzPSJBbmFseXNpcyBNYW5hZ2VtZW50IiBWaXNpYmxlPSIwIj4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjUwMDEiIEJvdW5kcz0iMCwwLDIsMSIgTmFtZT0iQW5hbE5ldyIgQWxpYXM9IlRlbXBvcmFyeSBUZXN0IDEiIEljb249IlByZXBhcmVHcmlkIiBWaXNpYmxlPSIwIiAvPg0KICAgICAgICAgICAgPENtZCBJRD0iNTAwMiIgQm91bmRzPSIwLDEsMiwxIiBOYW1lPSJQcm9wZXJ0eUxvYWQiIEFsaWFzPSJUZW1wb3JhcnkgVGVzdCAyIiBJY29uPSJQcmVwYXJlR3JpZCIgIFZpc2libGU9IjAiLz4NCiAgICAgICAgPC9Hcm91cD4NCg0KICAgICAgICA8R3JvdXAgTmFtZT0iTm1BbmFsQ2hhbmdlIiBBbGlhcz0iQW5hbHlzaXMgU3dpdGNoIj4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjUxMzAiIEJvdW5kcz0iMCwwIiBOYW1lPSJObUFuYWxDaGFuZ2UiIEFsaWFzPSJBbmFseXNpcyBTd2l0Y2giIEljb249IkpvYkVkaXQiIC8+DQogICAgICAgPC9Hcm91cD4NCg0KICAgICAgICA8R3JvdXAgTmFtZT0iTnRJbml0IiBBbGlhcz0iTW9kZWwgR2VvbWV0cmljIE9iamVjdHMiPg0KICAgICAgICAgICAgPENtZCBJRD0iNTExOCIgQm91bmRzPSIwLDAsMiwxIiBOYW1lPSJObU1hcCIgQWxpYXM9Ik1hcCIgSWNvbj0iTm1JbWFnZSIgLz4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjUxMTkiIEJvdW5kcz0iMCwxLDIsMSIgTmFtZT0iTm1VbmxvY2tlZCIgQWxpYXM9IkxvY2siIEljb249Ik5tVW5sb2NrZWQiIC8+DQogICAgICAgICAgICA8Q21kIElEPSI1MTAyIiBCb3VuZHM9IjAsMiwyLDEiIE5hbWU9Ik5tSW1hZ2UiIEFsaWFzPSJSZXNlcnZvaXIgTWFwIiBJY29uPSJObUltYWdlIiAvPg0KICAgICAgICAgICAgPENtZCBJRD0iNTEyMCIgQm91bmRzPSIwLDMsMiwxIiBOYW1lPSJObU1lYXN1cmUiIEFsaWFzPSJTY2FsZSBCYXIiIEljb249Ik5tTWVhc3VyZSIgLz4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjUxMDMiIEJvdW5kcz0iMCw0LDIsMSIgTmFtZT0iTm1Qb2x5Z29uIiBBbGlhcz0iUG9seWdvbiBCb3VuZGFyeSIgSWNvbj0iTm1Qb2x5Z29uIiAvPg0KICAgICAgICAgICAgPENtZCBJRD0iNTEwNCIgQm91bmRzPSIwLDUiIE5hbWU9Ik5tUG9seWdvbiIgQWxpYXM9IlJlY3RhbmdsZSBCb3VuZGFyeSIgSWNvbj0iTm1SZWN0YW5nbGUiIC8+DQogICAgICAgICAgICA8Q21kIElEPSI1MTA1IiBCb3VuZHM9IjEsNSIgTmFtZT0iTm1Qb2x5Z29uIiBBbGlhcz0iQ2lyY2xlIEJvdW5kYXJ5IiBJY29uPSJObVJvdW5kIiAvPg0KICAgICAgICAgICAgPENtZCBJRD0iNTEwNiIgQm91bmRzPSIwLDYsMiwxIiBOYW1lPSJObUZhdWx0IiBBbGlhcz0iRmF1bHQiIEljb249Ik5tRmF1bHQiIC8+DQogICAgICAgICAgICA8Q21kIElEPSI1MTA3IiBCb3VuZHM9IjAsNyIgTmFtZT0iTm1XZWxsIiBBbGlhcz0iU2VsZWN0IFdlbGwiIEljb249Ik5tV2VsbCIgLz4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjUxMDgiIEJvdW5kcz0iMSw3IiBOYW1lPSJObVdlbGwiIEFsaWFzPSJOZXcgV2VsbCIgSWNvbj0iTm1XZWxsIiAvPg0KICAgICAgICAgICAgPENtZCBJRD0iNTEwOSIgQm91bmRzPSIwLDgsMiwxIiBOYW1lPSJObUZhdWx0IiBBbGlhcz0iRnJhY3R1cmUiIEljb249Ik5tRmF1bHQiIC8+DQogICAgICAgICAgICA8Q21kIElEPSI1MTEwIiBCb3VuZHM9IjAsOSIgTmFtZT0iTm1MaW1pdCIgQWxpYXM9IlJlZ2lvbiIgSWNvbj0iTm1MaW1pdCIgLz4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjUxMTEiIEJvdW5kcz0iMSw5IiBOYW1lPSJObVJlZ2lvbiIgQWxpYXM9Ik1hcmsgUmVnaW9uIiBJY29uPSJObVJlZ2lvbiIgLz4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjUxMjEiIEJvdW5kcz0iMCwxMCwyLDEiIE5hbWU9Ik5tRGVsZXRlIiBBbGlhcz0iRGVsZXRlIiBJY29uPSJObURlbGV0ZSIgLz4NCiAgICAgICA8L0dyb3VwPg0KDQogICAgICAgPEdyb3VwIE5hbWU9Ik50UmVzZXJ2b2lyIiBBbGlhcz0iUmVzZXJ2b2lyIENoYXJhY3RlcmlzdGljcyI+DQogICAgICAgICAgICA8Q21kIElEPSI1MTEyIiBCb3VuZHM9IjAsMCwyLDEiIE5hbWU9Ik5tR2VvbWV0cnkiIEFsaWFzPSJMYXllciBEaXZpc2lvbiIgSWNvbj0iTm1HZW9tZXRyeSIgLz4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjUxMTMiIEJvdW5kcz0iMCwxLDIsMSIgTmFtZT0iTm1Qcm9wZXJ0aWVzIiBBbGlhcz0iUmVzZXJ2b2lyIFByb3BlcnRpZXMiIEljb249Ik5tUHJvcGVydGllcyIgLz4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjUxMjIiIEJvdW5kcz0iMCwyLDIsMSIgTmFtZT0iTm1ERk4iIEFsaWFzPSJERk4iIEljb249Ik5tREZOIiAvPg0KICAgICAgICAgICAgPENtZCBJRD0iNTEyNiIgQm91bmRzPSIwLDMsMiwxIiBOYW1lPSJObUludGVycG9sYXRpb24iIEFsaWFzPSJQcm9wZXJ0eSBJbnRlcnBvbGF0aW9uIiBJY29uPSJObUludGVycG9sYXRpb24iIC8+DQogICAgICAgPC9Hcm91cD4NCg0KICAgICAgIDxHcm91cCBOYW1lPSJOdE1vZGVsIiBBbGlhcz0iTW9kZWwgR2VuZXJhdGlvbiI+DQogICAgICAgICAgICAgPENtZCBJRD0iNTExNCIgQm91bmRzPSIwLDAsMiwxIiBOYW1lPSJObUdyaWQiIEFsaWFzPSJHcmlkIEdlbmVyYXRpb24iIEljb249Ik5tR3JpZCIgLz4NCiAgICAgICAgICAgICA8Q21kIElEPSI1MTE1IiBCb3VuZHM9IjAsMSwyLDEiIE5hbWU9Ik5tQ2FjdWxhdGlvbiIgQWxpYXM9IkNhbGN1bGF0aW9uIFNvbHV0aW9uIiBJY29uPSJUaW1lIiAvPg0KICAgICAgICAgICAgIDwhLS0NCiAgICAgICAgICAgICA8Q21kIElEPSI1MTE2IiBCb3VuZHM9IjAsMiwyLDEiIE5hbWU9Ik5tQmFjayIgQWxpYXM9IlBvc3QgUHJvY2Vzc2luZyIgSWNvbj0iVGltZSIgLz4NCiAgICAgICAgICAgICA8Q21kIElEPSI1MTE3IiBCb3VuZHM9IjAsMywyLDEiIE5hbWU9Ik5tUmVzdWx0IiBBbGlhcz0iUmVzdWx0IiBJY29uPSJGbG93UGVyaW9kIiAvPg0KICAgICAgICAgICAgIC0tPg0KICAgICAgIDwvR3JvdXA+DQoNCiAgICAgICAgPEdyb3VwIE5hbWU9Ik50VG9vbHMiIEFsaWFzPSJUb29scyI+DQogICAgICAgICAgICA8Q21kIElEPSI1MTI3IiBCb3VuZHM9IjAsMCIgTmFtZT0iTm1HZW9SZWZlcmVuY2UiIEFsaWFzPSJNb2RlbCBSZWZlcmVuY2UgUG9pbnQgU2V0dGluZyIgSWNvbj0iTm1HZW9SZWZlcmVuY2UiIC8+DQogICAgICAgICAgICA8Q21kIElEPSI1MTI4IiBCb3VuZHM9IjEsMCIgTmFtZT0iTm1Qb2ludGVyUG9zaXRpb24iIEFsaWFzPSJNb2RlbCBQb3NpdGlvbiBEaXNwbGF5IiBJY29uPSJObVBvaW50ZXJQb3NpdGlvbiIgLz4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjUxMjkiIEJvdW5kcz0iMCwxLDIsMSIgTmFtZT0iTm1NZWFzdXJlIiBBbGlhcz0iTW9kZWwgRGltZW5zaW9uIE1lYXN1cmVtZW50IiBJY29uPSJObU1lYXN1cmUiIC8+DQogICAgICAgPC9Hcm91cD4NCg0KICAgICAgICA8R3JvdXAgTmFtZT0iTnREaXNwbGF5IiBBbGlhcz0iRGlzcGxheSI+DQogICAgICAgICAgICA8Q21kIElEPSI1MTIzIiBCb3VuZHM9IjAsMCwyLDEiIE5hbWU9Ik5tU2hvdyIgQWxpYXM9IkRpc3BsYXkiIEljb249Ik5tU2hvdyIgLz4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjUxMjQiIEJvdW5kcz0iMCwxLDIsMSIgTmFtZT0iTm1QcmludFByZXZpZXciIEFsaWFzPSJQcmludCBQcmV2aWV3IiBJY29uPSJObVByaW50UHJldmlldyIgLz4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjUxMjUiIEJvdW5kcz0iMCwyLDIsMSIgTmFtZT0iTm1QcmludCIgQWxpYXM9IlByaW50IiBJY29uPSJObVByaW50IiAvPg0KICAgICAgIDwvR3JvdXA+DQoNCiAgICAgICAgPEdyb3VwIE5hbWU9IldpbmRvdyIgQWxpYXM9IldpbmRvdyBEaXNwbGF5IiAgVmlzaWJsZT0iMCI+DQogICAgICAgICAgICA8Q21kIElEPSI5MDAyIiBCb3VuZHM9IjAsMCIgTmFtZT0iVmlzaWJsZU1vZGVscyIgQWxpYXM9Ik1vZGVsIFdpbmRvdyIgSWNvbj0iVmlzaWJsZU1vZGVscyIgIFZpc2libGU9IjAiLz4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjkwMDMiIEJvdW5kcz0iMSwwIiBOYW1lPSJWaXNpYmxlUGFyYW1ldGVycyIgQWxpYXM9IlBhcmFtZXRlciBXaW5kb3ciIEljb249IlZpc2libGVQYXJhbWV0ZXJzIiAgVmlzaWJsZT0iMCIvPg0KICAgICAgICAgICAgPENtZCBJRD0iOTEwMSIgQm91bmRzPSIwLDEiIE5hbWU9IlZpc2libGVBbmFsQmFzaWMiIEFsaWFzPSJCYXNpYyBJbmZvIiBJY29uPSJJbnB1dEJhc2ljIiAvPg0KICAgICAgICAgICAgPENtZCBJRD0iOTEwMiIgQm91bmRzPSIxLDEiIE5hbWU9IlZpc2libGVBbmFsUFZUIiBBbGlhcz0iUFZUIERhdGEiIEljb249IklucHV0Rmx1aWQiIC8+DQogICAgICAgICAgICA8Q21kIElEPSI5MTAzIiBCb3VuZHM9IjAsMiIgTmFtZT0iVmlzaWJsZUFuYWxEaWZmIiBBbGlhcz0iRElGRiBEYXRhIiBJY29uPSJJbnB1dEZsdWlkIiAvPg0KICAgICAgICAgICAgPENtZCBJRD0iOTEwNCIgQm91bmRzPSIxLDIiIE5hbWU9IlZpc2libGVBbmFsUHNldSIgQWxpYXM9IlBzZXVkbyBQcmVzc3VyZSBEYXRhIiBJY29uPSJJbnB1dEZsdWlkIiAvPg0KICAgICAgICA8L0dyb3VwPg0KDQogICAgICAgIDxHcm91cCBOYW1lPSJObURlYnVnIiBBbGlhcz0iRnJhbWV3b3JrIFRlc3QoRGVidWcpIj4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjU5OTkiIEJvdW5kcz0iMCwwLDIsMSIgTmFtZT0iTm1EZWJ1ZyIgQWxpYXM9IkZyYW1ld29yayBDb2RlIERlYnVnZ2luZyIgSWNvbj0iUHJlcGFyZUdyaWQiIC8+DQogICAgICAgIDwvR3JvdXA+DQoNCg0KICAgIDwvVGFiPg0KDQogICAgPFRhYiBJRD0iNCIgTmFtZT0iTWluaUZyYWMiIEFsaWFzPSJNaW5pIEZyYWN0dXJpbmcoRGVidWcpIiA+DQoNCiAgICAgICAgPEdyb3VwIE5hbWU9IkFuYWxFZGl0IiBBbGlhcz0iQW5hbHlzaXMgTWFuYWdlbWVudCI+DQogICAgICAgICAgICA8Q21kIElEPSIzMDA2IiBCb3VuZHM9IjAsMCIgTmFtZT0iQW5hbE5ldyIgQWxpYXM9Ik5ldyBBbmFseXNpcyIgSWNvbj0iSm9iTmV3IiAvPg0KICAgICAgICAgICAgPENtZCBJRD0iMzAwNyIgQm91bmRzPSIxLDAiIE5hbWU9IkFuYWxFZGl0IiBBbGlhcz0iQW5hbHlzaXMgTWFuYWdlbWVudCIgSWNvbj0iSm9iRWRpdCIgLz4NCiAgICAgICAgPC9Hcm91cD4NCg0KICAgICAgICA8R3JvdXAgTmFtZT0iUEEiIEFsaWFzPSJQcmVzc3VyZSBEcm9wIEFuYWx5c2lzIj4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjQwMDIiIEJvdW5kcz0iMCwwLDMsMSIgTmFtZT0iTWluaUZyQW5hbFBBIiBBbGlhcz0iUHJlc3N1cmUgRHJvcCBQcmVwYXJhdGlvbiIgRXh0SW5mbz0iUEYiIEljb249IlBGIiAvPg0KICAgICAgICAgICAgPENtZCBJRD0iNDAwMyIgQm91bmRzPSIwLDEsMywxIiBOYW1lPSJNaW5pRnJQQSIgQWxpYXM9IlByZXNzdXJlIERyb3AgQW5hbHlzaXMiIEljb249IkZsb3dQZXJpb2QiIC8+DQoNCiAgICAgICAgICAgIDxDbWQgSUQ9IjQwMDQiIEJvdW5kcz0iMCwyLDMsMSIgTmFtZT0iQ2FsU3VkZGVuU3RvcFAiIEFsaWFzPSJJbnN0YW50YW5lb3VzIFNodXQtaW4gUHJlc3N1cmUiIEljb249IlJ1bkV4IiAvPg0KICAgICAgICAgICAgPENtZCBJRD0iNDAwNSIgQm91bmRzPSIwLDMiIE5hbWU9IkNhbEdGdW5jdGlvbiIgQWxpYXM9IkcgRnVuY3Rpb24iIEljb249IlJ1bk90aGVyIiAvPg0KICAgICAgICAgICAgPENtZCBJRD0iNDAwNiIgQm91bmRzPSIxLDMiIE5hbWU9IkNhbFNxcnRUIiBBbGlhcz0iU3F1YXJlIFJvb3Qgb2YgVGltZSIgSWNvbj0iUnVuT3RoZXIiIC8+DQogICAgICAgICAgICA8Q21kIElEPSI0MDA3IiBCb3VuZHM9IjIsMyIgTmFtZT0iQ2FsTG9nTG9nIiBBbGlhcz0iTG9nLUxvZyBQbG90IiBJY29uPSJSdW5PdGhlciIgLz4NCiAgICAgICAgPC9Hcm91cD4NCg0KDQogICAgICAgIDxHcm91cCBOYW1lPSJGQSIgQWxpYXM9IkZsb3cgUmF0ZSBBbmFseXNpcyI+DQogICAgICAgICAgICA8Q21kIElEPSI0MTAyIiBCb3VuZHM9IjAsMCwyLDEiIE5hbWU9Ik1pbmlGckFuYWxGQSIgQWxpYXM9IkZsb3cgUmF0ZSBQcmVwYXJhdGlvbiIgRXh0SW5mbz0iSVBSIiBJY29uPSJNaW5pRnJBbmFsRkEiIC8+DQogICAgICAgICAgICA8Q21kIElEPSI0MTAzIiBCb3VuZHM9IjAsMSIgTmFtZT0iTWluaUZyRkFVcCIgQWxpYXM9IlN0ZXAgVXAiIEljb249IlN0ZXBVcCIgLz4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjQxMDQiIEJvdW5kcz0iMSwxIiBOYW1lPSJNaW5pRnJGQURvd24iIEFsaWFzPSJTdGVwIERvd24iIEljb249IlN0ZXBEb3duIiAvPg0KICAgICAgIDwvR3JvdXA+DQoNCiAgICAgICAgPEdyb3VwIE5hbWU9IkpvYnMiIEFsaWFzPSJSZXN1bHQgTWFuYWdlbWVudCIgIFZpc2libGU9IjAiPg0KICAgICAgICAgICAgPENtZCBJRD0iMTAwOCIgQm91bmRzPSIwLDAiIE5hbWU9IlJzdExvYWQiIEFsaWFzPSJMb2FkIFJlc3VsdHMiIEljb249IkxvYWRKb2JzIiAvPg0KICAgICAgICAgICAgPENtZCBJRD0iMTAwOSIgQm91bmRzPSIxLDAiIE5hbWU9IlJzdFNhdmUiIFR5cGU9IjEiIEV4dE5hbWVzPSJSc3RTYXZlQ3VyO1JzdFNhdmVBbGwiIEV4dEluZm89IlNhdmUgQ3VycmVudCBSZXN1bHQ7U2F2ZSBBbGwgUmVzdWx0cyIgQWxpYXM9IlNhdmUgUmVzdWx0cyIgSWNvbj0iU2F2ZUpvYnMiIC8+DQogICAgICAgIDwvR3JvdXA+DQoNCiAgICAgICAgPEdyb3VwIE5hbWU9IldpbmRvdyIgQWxpYXM9IldpbmRvdyBEaXNwbGF5IiAgVmlzaWJsZT0iMCI+DQogICAgICAgICAgICA8Q21kIElEPSI5MDAyIiBCb3VuZHM9IjAsMCIgTmFtZT0iVmlzaWJsZU1vZGVscyIgQWxpYXM9Ik1vZGVsIFdpbmRvdyIgSWNvbj0iVmlzaWJsZU1vZGVscyIgLz4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjkwMDMiIEJvdW5kcz0iMSwwIiBOYW1lPSJWaXNpYmxlUGFyYW1ldGVycyIgQWxpYXM9IlBhcmFtZXRlciBXaW5kb3ciIEljb249IlZpc2libGVQYXJhbWV0ZXJzIiAvPg0KICAgICAgICAgICAgPENtZCBJRD0iOTEwMSIgQm91bmRzPSIwLDEiIE5hbWU9IlZpc2libGVBbmFsQmFzaWMiIEFsaWFzPSJCYXNpYyBJbmZvIiBJY29uPSJJbnB1dEJhc2ljIiAvPg0KICAgICAgICAgICAgPENtZCBJRD0iOTEwMiIgQm91bmRzPSIxLDEiIE5hbWU9IlZpc2libGVBbmFsUFZUIiBBbGlhcz0iUFZUIERhdGEiIEljb249IklucHV0Rmx1aWQiIC8+DQogICAgICAgICAgICA8Q21kIElEPSI5MTAzIiBCb3VuZHM9IjAsMiIgTmFtZT0iVmlzaWJsZUFuYWxEaWZmIiBBbGlhcz0iRElGRiBEYXRhIiBJY29uPSJJbnB1dEZsdWlkIiAvPg0KICAgICAgICAgICAgPENtZCBJRD0iOTEwNCIgQm91bmRzPSIxLDIiIE5hbWU9IlZpc2libGVBbmFsUHNldSIgQWxpYXM9IlBzZXVkbyBQcmVzc3VyZSBEYXRhIiBJY29uPSJJbnB1dEZsdWlkIiAvPg0KICAgICAgICA8L0dyb3VwPg0KDQogICAgPC9UYWI+DQoNCiAgICA8VGFiIElEPSI0MDEiIE5hbWU9IklQUiIgQWxpYXM9IldlbGwgUHJvZCBUZXN0IiA+DQoNCiAgICAgICAgPEdyb3VwIE5hbWU9IkFuYWxFZGl0IiBBbGlhcz0iQW5hbHlzaXMgTWFuYWdlbWVudCI+DQogICAgICAgICAgICA8Q21kIElEPSIzMDA2IiBCb3VuZHM9IjAsMCIgTmFtZT0iQW5hbE5ldyIgQWxpYXM9Ik5ldyBBbmFseXNpcyIgSWNvbj0iSm9iTmV3IiAvPg0KICAgICAgICAgICAgPENtZCBJRD0iMzAwNyIgQm91bmRzPSIxLDAiIE5hbWU9IkFuYWxFZGl0IiBBbGlhcz0iQW5hbHlzaXMgTWFuYWdlbWVudCIgSWNvbj0iSm9iRWRpdCIgLz4NCiAgICAgICAgPC9Hcm91cD4NCg0KICAgICAgICA8R3JvdXAgTmFtZT0iSVBSIiBBbGlhcz0iSVBSIFByZXZpb3VzIFJlZmVyZW5jZShEZWJ1ZykiPg0KICAgICAgICAgICAgPENtZCBJRD0iNjAwMiIgQm91bmRzPSIwLDAsMiwxIiBOYW1lPSJJUFJBbmFsIiBBbGlhcz0iSVBSIFByZXBhcmF0aW9uIiBFeHRJbmZvPSJJUFIiIEljb249IklQUkFuYWwiIC8+DQogICAgICAgICAgICA8Q21kIElEPSI2MDAzIiBCb3VuZHM9IjAsMSwyLDEiIE5hbWU9IklQUkNhbCIgQWxpYXM9IklQUiBDYWxjdWxhdGlvbiIgSWNvbj0iSVBSQ2FsIiAvPg0KICAgICAgICA8L0dyb3VwPg0KDQogICAgICAgIDxHcm91cCBOYW1lPSJXZHREYXRhUHJlcHJvY2VzcyIgQWxpYXM9IkRhdGEgUHJlcHJvY2Vzc2luZyIgVmlzaWJsZT0iMCI+DQogICAgICAgICAgICA8Q21kIElEPSI2MTAxIiBCb3VuZHM9IjAsMCwyLDEiIE5hbWU9IldkdERhdGFBc3NuIiBBbGlhcz0iRGF0YSBOb3JtYWxpemF0aW9uIiBFeHRJbmZvPSJJUFIiIEljb249IklQUkFuYWwiICBWaXNpYmxlPSIwIi8+DQogICAgICAgICAgICA8Q21kIElEPSI2MTAyIiBCb3VuZHM9IjAsMSwyLDEiIE5hbWU9IldkdE90aGVyIiBBbGlhcz0iT3RoZXJzIiBJY29uPSJXZHRPdGhlciIgVmlzaWJsZT0iMCIgLz4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjYxMDMiIEJvdW5kcz0iMCwzLDIsMSIgTmFtZT0iV2R0V01GIiBBbGlhcz0iV2VsbGJvcmUgTXVsdGlwaGFzZSBGbG93IiBJY29uPSJXZHRXTUYiICBWaXNpYmxlPSIwIi8+DQogICAgICAgICAgICA8Q21kIElEPSI2MTA0IiBCb3VuZHM9IjAsNCwyLDEiIE5hbWU9IldkdENob2tlIiBBbGlhcz0iQ2hva2UgRmxvdyIgSWNvbj0iV2R0Q2hva2UiICBWaXNpYmxlPSIwIi8+DQogICAgICAgIDwvR3JvdXA+DQoNCiAgICAgICAgPEdyb3VwIE5hbWU9IklQUiIgQWxpYXM9IlByb2R1Y3Rpdml0eSBBbmFseXNpcyI+DQogICAgICAgICAgICA8Q21kIElEPSI2MjAxIiBCb3VuZHM9IjAsMCwyLDEiIE5hbWU9IldkdElQUkNhbCIgQWxpYXM9IlJlc2Vydm9pciBQcm9kdWN0aXZpdHkgQ2FsY3VsYXRpb24iIEljb249IklQUkNhbCIgLz4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjYyMDIiIEJvdW5kcz0iMCwxLDIsMSIgTmFtZT0iV2VsbFBkdHkiIEFsaWFzPSJJbnRlZ3JhdGVkIFByb2R1Y3Rpdml0eSIgSWNvbj0iV2VsbFBkdHkiICBWaXNpYmxlPSIwIiAvPg0KICAgICAgICAgICAgPENtZCBJRD0iNjIwMyIgQm91bmRzPSIwLDIsMiwxIiBOYW1lPSJXZHRJUFJFeHQiIEFsaWFzPSJQcm9kdWN0aXZpdHkgV2VsbCBUZXN0W0V4dGVuZGVkXSIgSWNvbj0iSVBSRXh0Ii8+DQogICAgICAgICAgICA8Q21kIElEPSI2MjA0IiBCb3VuZHM9IjAsMywyLDEiIE5hbWU9IldkdElQUkFuYWwiIEFsaWFzPSJSZXNlcnZvaXIgUHJvZHVjdGl2aXR5IEFuYWx5c2lzIiBJY29uPSJJUFJBbmFsIiAvPg0KICAgICAgICAgICAgPENtZCBJRD0iNjIwNSIgQm91bmRzPSIwLDQsMiwxIiBOYW1lPSJXZWxsSW50ZWdBbmFsIiBBbGlhcz0iQ29tcHJlaGVuc2l2ZSBBbmFseXNpcyIgSWNvbj0iV2VsbEludGVnQW5hbCIgVmlzaWJsZT0iMCIgLz4NCiAgICAgICAgPC9Hcm91cD4NCg0KICAgICAgICA8R3JvdXAgTmFtZT0iSVBSIiBBbGlhcz0iUHJvZHVjdGl2aXR5IENhbGN1bGF0aW9uIj4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjYzMDEiIEJvdW5kcz0iMCwwLDIsMSIgTmFtZT0iV2R0Q2FsIiBBbGlhcz0iQ2FsY3VsYXRpb24iIEljb249IlJ1bkV4IiAvPg0KICAgICAgICA8L0dyb3VwPg0KDQoNCiAgICAgICAgPEdyb3VwIE5hbWU9IkpvYnMiIEFsaWFzPSJSZXN1bHQgTWFuYWdlbWVudCI+DQogICAgICAgICAgICA8Q21kIElEPSIxMDA4IiBCb3VuZHM9IjAsMCIgTmFtZT0iUnN0TG9hZCIgQWxpYXM9IkxvYWQgUmVzdWx0cyIgSWNvbj0iTG9hZEpvYnMiIC8+DQogICAgICAgICAgICA8Q21kIElEPSIxMDA5IiBCb3VuZHM9IjEsMCIgTmFtZT0iUnN0U2F2ZSIgVHlwZT0iMSIgRXh0TmFtZXM9IlJzdFNhdmVDdXI7UnN0U2F2ZUFsbCIgRXh0SW5mbz0iU2F2ZSBDdXJyZW50IFJlc3VsdDtTYXZlIEFsbCBSZXN1bHRzIiBBbGlhcz0iU2F2ZSBSZXN1bHRzIiBJY29uPSJTYXZlSm9icyIgLz4NCiAgICAgICAgPC9Hcm91cD4NCg0KICAgICAgICA8R3JvdXAgTmFtZT0iV2luZG93IiBBbGlhcz0iV2luZG93IERpc3BsYXkiPg0KICAgICAgICAgICAgPENtZCBJRD0iOTAwMiIgQm91bmRzPSIwLDAiIE5hbWU9IlZpc2libGVNb2RlbHMiIEFsaWFzPSJNb2RlbCBXaW5kb3ciIEljb249IlZpc2libGVNb2RlbHMiIC8+DQogICAgICAgICAgICA8Q21kIElEPSI5MDAzIiBCb3VuZHM9IjEsMCIgTmFtZT0iVmlzaWJsZVBhcmFtZXRlcnMiIEFsaWFzPSJQYXJhbWV0ZXIgV2luZG93IiBJY29uPSJWaXNpYmxlUGFyYW1ldGVycyIgLz4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjkxMDEiIEJvdW5kcz0iMCwxIiBOYW1lPSJWaXNpYmxlQW5hbEJhc2ljIiBBbGlhcz0iQmFzaWMgSW5mbyIgSWNvbj0iSW5wdXRCYXNpYyIgICBWaXNpYmxlPSIwIi8+DQogICAgICAgICAgICA8Q21kIElEPSI5MTAyIiBCb3VuZHM9IjAsMSIgTmFtZT0iVmlzaWJsZUFuYWxQVlQiIEFsaWFzPSJQVlQgRGF0YSIgSWNvbj0iSW5wdXRGbHVpZCIgLz4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjkxMDMiIEJvdW5kcz0iMCwyIiBOYW1lPSJWaXNpYmxlQW5hbERpZmYiIEFsaWFzPSJESUZGIERhdGEiIEljb249IklucHV0Rmx1aWQiICAgVmlzaWJsZT0iMCIvPg0KICAgICAgICAgICAgPENtZCBJRD0iOTEwNCIgQm91bmRzPSIxLDEiIE5hbWU9IlZpc2libGVBbmFsUHNldSIgQWxpYXM9IlBzZXVkbyBQcmVzc3VyZSBEYXRhIiBJY29uPSJJbnB1dEZsdWlkIiAvPg0KICAgICAgICA8L0dyb3VwPg0KDQoNCiAgICA8L1RhYj4NCg0KICAgIDxUYWIgSUQ9IjYiIE5hbWU9IkFkdmFuY2VkRnVuY3Rpb24iIEFsaWFzPSJBZHZhbmNlZCIgPg0KDQogICAgICAgIDxHcm91cCBOYW1lPSJEZXNpZ24iIEFsaWFzPSJXZWxsIFRlc3QgRGVzaWduIj4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjYwMDEiIEJvdW5kcz0iMCwwLDIsMSIgTmFtZT0iVGVzdERlc2lnbiIgQWxpYXM9IldlbGwgVGVzdCBEZXNpZ24iIEljb249IlRlc3REZXNpZ24iIEV4dEluZm89IlBGIiAgLz4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjMwMDQiIEJvdW5kcz0iMCwxLDIsMSIgTmFtZT0iQW5hbEZsb3dTZWciIEFsaWFzPSJGbG93IFBlcmlvZCBBbmFseXNpcyIgSWNvbj0iRmxvd1BlcmlvZCIgLz4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjMwMDUiIEJvdW5kcz0iMCwyLDIsMSIgTmFtZT0iQW5hbE90aGVycyIgQWxpYXM9IkNoYXJhY3RlcmlzdGljIFNlZ21lbnQgQW5hbHlzaXMiIFR5cGU9IjEiIEV4dE5hbWVzPSJDaGFydFQ7Q2hhcnRTcXJ0VDtDaGFydDI1VDtDaGFydDVUIiBFeHRJbmZvPSJDaGFydCBUO0NoYXJ0IFNxcnQoVCk7Q2hhcnQgMC4yNVQ7Q2hhcnQgLTAuNVQiIEljb249IkFzc2lzQW5hbCIgLz4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjMwMDkiIEJvdW5kcz0iMCwzLDIsMSIgTmFtZT0iQW5hbERpc3RyaSIgQWxpYXM9IkRpc3RyaWJ1dGlvbiBDaGFydCIgVHlwZT0iMSIgRXh0TmFtZXM9IkNoYXJ0RGVuO0NoYXJ0VmlzIiBFeHRJbmZvPSJDb25jZW50cmF0aW9uIERpc3RyaWJ1dGlvbjtWaXNjb3NpdHkgRGlzdHJpYnV0aW9uIiBJY29uPSJBbmFsRGlzdHJpIiAvPg0KDQogICAgICAgIDwvR3JvdXA+DQoNCiAgICAgICAgPEdyb3VwIE5hbWU9IkRhdGFGaXQiIEFsaWFzPSJJbnRlcnByZXRhdGlvbiBGaXR0aW5nIj4NCg0KICAgICAgICAgICAgPENtZCBJRD0iMzEwNSIgQm91bmRzPSIwLDAsMiwxIiBOYW1lPSJEZWNvbnZvbHYiIEFsaWFzPSJEZWNvbnZvbHV0aW9uIiBJY29uPSJEZWNvbnZvbHYiIFZpc2libGU9IjAiLz4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjMxMDEiIEJvdW5kcz0iMCwxLDIsMSIgTmFtZT0iRml0TW9kZWwiIEFsaWFzPSJBbmFseXRpY2FsIFNvbHV0aW9uIiBJY29uPSJGaXRNb2RlbCIgLz4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjMxMDQiIEJvdW5kcz0iMCwyLDIsMSIgTmFtZT0ibm1GaXRNb2RlbCIgQWxpYXM9Ik51bWVyaWNhbCBTb2x1dGlvbiIgSWNvbj0iRml0TW9kZWwiIC8+DQogICAgICAgICAgICA8Q21kIElEPSIzMTAyIiBCb3VuZHM9IjAsMywyLDEiIE5hbWU9IkF1dG9GaXQiIEFsaWFzPSJBdXRvIEZpdHRpbmciIEljb249IkF1dG9GaXQiIC8+DQogICAgICAgICAgICA8Q21kIElEPSIzMTAzIiBCb3VuZHM9IjAsNCwyLDEiIE5hbWU9IlBsYXRlRml0IiBBbGlhcz0iU2Vuc2l0aXZpdHkgQW5hbHlzaXMiIEljb249IlBsYXRlRml0IiAvPg0KICAgICAgIDwvR3JvdXA+DQoNCiAgICAgICAgPEdyb3VwIE5hbWU9IkFJVGVzdCIgQWxpYXM9IkludGVsbGlnZW50IFdlbGwgVGVzdChEZWJ1ZykiPg0KICAgICAgICAgICAgPENtZCBJRD0iMzkwMSIgQm91bmRzPSIwLDAsMiwxIiBOYW1lPSJNb2RlbENsYXNzaWZ5IiBBbGlhcz0iTW9kZWwgUmVjb2duaXRpb24iIEljb249Ik1vZGVsQ2xhc3NpZnkiIC8+DQogICAgICAgIDwvR3JvdXA+DQoNCiAgICAgICAgPEdyb3VwIE5hbWU9IlJlbGF0aXZlVG9vbCIgQWxpYXM9IlJlbGF0ZWQgVG9vbHMiIFZpc2libGU9IjAiPg0KICAgICAgICAgICAgPENtZCBJRD0iMzIwMSIgQm91bmRzPSIwLDAiIE5hbWU9IlRpbWUiIEFsaWFzPSJUaW1lIiBJY29uPSJUaW1lIiAvPg0KICAgICAgICAgICAgPENtZCBJRD0iMzIwMiIgQm91bmRzPSIxLDAiIE5hbWU9IlNob3dNb2RlbENoYXJ0cyIgQWxpYXM9Ik1vZGVsIiBJY29uPSJTaG93TW9kZWxDaGFydHMiIC8+DQogICAgICAgICAgICA8Q21kIElEPSIzMjAzIiBCb3VuZHM9IjAsMSIgTmFtZT0iU2hvd01vZGVsU2tldGNoIiBBbGlhcz0iVGhlb3J5IiBJY29uPSJTaG93TW9kZWxTa2V0Y2giIC8+DQogICAgICAgICAgICA8Q21kIElEPSIzMjA0IiBCb3VuZHM9IjEsMSIgTmFtZT0iU2F2ZUFzTW9kZWxTa2V0Y2giIEFsaWFzPSJTYXZlIEFzIFNjaGVtYXRpYyIgSWNvbj0iU2F2ZUFzTW9kZWxTa2V0Y2giIC8+DQogICAgICAgPC9Hcm91cD4NCg0KICAgICAgICA8R3JvdXAgTmFtZT0iVG9vbFMiIEFsaWFzPSJFeHRlbmRlZCBGdW5jdGlvbnMiICBWaXNpYmxlPSIwIj4NCiAgICAgICAgICAgIDxDbWQgSUQ9Ijk4MDEiIEJvdW5kcz0iMCwwLDIsMSIgTmFtZT0iRmxvd1RvUyIgQWxpYXM9IlJhdGUgdG8gU2tpbiBGYWN0b3IiIEljb249IkZsb3dUb1MiIC8+DQogICAgICAgICAgICA8Q21kIElEPSI5MjAxIiBCb3VuZHM9IjAsMSwyLDEiIE5hbWU9Ik1peFZpc2Nvc2l0eSIgQWxpYXM9Ik1peGVkIFZpc2Nvc2l0eSIgSWNvbj0iTWl4VmlzY29zaXR5IiAvPg0KICAgICAgIDwvR3JvdXA+DQoNCiAgICAgICAgPEdyb3VwIE5hbWU9IkpvYnMiIEFsaWFzPSJSZXN1bHQgTWFuYWdlbWVudCIgVmlzaWJsZT0iMCI+DQogICAgICAgICAgICA8Q21kIElEPSIxMDA4IiBCb3VuZHM9IjAsMCIgTmFtZT0iUnN0TG9hZCIgQWxpYXM9IkxvYWQgUmVzdWx0cyIgSWNvbj0iTG9hZEpvYnMiIC8+DQogICAgICAgICAgICA8Q21kIElEPSIxMDA5IiBCb3VuZHM9IjEsMCIgTmFtZT0iUnN0U2F2ZSIgVHlwZT0iMSIgRXh0TmFtZXM9IlJzdFNhdmVDdXI7UnN0U2F2ZUFsbCIgRXh0SW5mbz0iU2F2ZSBDdXJyZW50IFJlc3VsdDtTYXZlIEFsbCBSZXN1bHRzIiBBbGlhcz0iU2F2ZSBSZXN1bHRzIiBJY29uPSJTYXZlSm9icyIgLz4NCiAgICAgICAgPC9Hcm91cD4NCg0KICAgICAgICA8R3JvdXAgTmFtZT0iV2luZG93IiBBbGlhcz0iV2luZG93IERpc3BsYXkiIFZpc2libGU9IjAiPg0KICAgICAgICAgICAgPENtZCBJRD0iOTAwMiIgQm91bmRzPSIwLDAiIE5hbWU9IlZpc2libGVNb2RlbHMiIEFsaWFzPSJNb2RlbCBXaW5kb3ciIEljb249IlZpc2libGVNb2RlbHMiIC8+DQogICAgICAgICAgICA8Q21kIElEPSI5MDAzIiBCb3VuZHM9IjEsMCIgTmFtZT0iVmlzaWJsZVBhcmFtZXRlcnMiIEFsaWFzPSJQYXJhbWV0ZXIgV2luZG93IiBJY29uPSJWaXNpYmxlUGFyYW1ldGVycyIgLz4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjkxMDEiIEJvdW5kcz0iMCwxIiBOYW1lPSJWaXNpYmxlQW5hbEJhc2ljIiBBbGlhcz0iQmFzaWMgSW5mbyIgSWNvbj0iSW5wdXRCYXNpYyIgLz4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjkxMDIiIEJvdW5kcz0iMSwxIiBOYW1lPSJWaXNpYmxlQW5hbFBWVCIgQWxpYXM9IlBWVCBEYXRhIiBJY29uPSJJbnB1dEZsdWlkIiAvPg0KICAgICAgICAgICAgPENtZCBJRD0iOTEwMyIgQm91bmRzPSIwLDIiIE5hbWU9IlZpc2libGVBbmFsRGlmZiIgQWxpYXM9IkRJRkYgRGF0YSIgSWNvbj0iSW5wdXRGbHVpZCIgLz4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjkxMDQiIEJvdW5kcz0iMSwyIiBOYW1lPSJWaXNpYmxlQW5hbFBzZXUiIEFsaWFzPSJQc2V1ZG8gUHJlc3N1cmUgRGF0YSIgSWNvbj0iSW5wdXRGbHVpZCIgLz4NCiAgICAgICAgPC9Hcm91cD4NCg0KICAgIDwvVGFiPg0KDQogICAgPFRhYiBJRD0iNyIgTmFtZT0iU3lzVG9vbCIgQWxpYXM9IlN5c3RlbSBDb25maWd1cmF0aW9uIFRvb2xzKFQpIiBWaXNpYmxlPSIwIiA+DQoNCiAgICAgICAgPEdyb3VwIE5hbWU9IlN5c1Rvb2wiIEFsaWFzPSJDb25maWd1cmF0aW9uIFRvb2xzIj4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjcwMDEiIEJvdW5kcz0iMCwxLDIsMSIgTmFtZT0iU3lzVG9vbHMiIEFsaWFzPSJTeXN0ZW0gQ29uZmlndXJhdGlvbiBUb29scyIgSWNvbj0iU3lzVG9vbHMiICAvPg0KICAgICAgICA8L0dyb3VwPg0KDQogICAgICAgIDxHcm91cCBOYW1lPSJNb2RlbE1hbmFnZXIiIEFsaWFzPSJNb2RlbCBNYW5hZ2VtZW50Ij4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjcwMDIiIEJvdW5kcz0iMCwwLDIsMSIgTmFtZT0iTW9kZWxTY2FuIiBBbGlhcz0iTW9kZWwgVmlldyIgSWNvbj0iTW9kZWxTY2FuIiAvPg0KICAgICAgICA8L0dyb3VwPg0KDQogICAgPC9UYWI+DQoNCiAgICA8VGFiIElEPSI4IiBOYW1lPSJSZXN1bHQiIEFsaWFzPSJSZXN1bHRzIiA+DQoNCiAgICAgICAgPEdyb3VwIE5hbWU9IkpvYnMiIEFsaWFzPSJSZXN1bHQgTWFuYWdlbWVudCI+DQogICAgICAgICAgICA8Q21kIElEPSIxMDA4IiBCb3VuZHM9IjAsMCIgTmFtZT0iUnN0TG9hZCIgQWxpYXM9IkxvYWQgUmVzdWx0cyIgSWNvbj0iTG9hZEpvYnMiIC8+DQogICAgICAgICAgICA8Q21kIElEPSIxMDA5IiBCb3VuZHM9IjEsMCIgTmFtZT0iUnN0U2F2ZSIgVHlwZT0iMSIgRXh0TmFtZXM9IlJzdFNhdmVDdXI7UnN0U2F2ZUFsbCIgRXh0SW5mbz0iU2F2ZSBDdXJyZW50IFJlc3VsdDtTYXZlIEFsbCBSZXN1bHRzIiBBbGlhcz0iU2F2ZSBSZXN1bHRzIiBJY29uPSJTYXZlSm9icyIgLz4NCiAgICAgICAgPC9Hcm91cD4NCg0KICAgICAgICA8R3JvdXAgTmFtZT0iUmVzQ29tcGFyZSIgQWxpYXM9IlJlc3VsdCBDb21wYXJpc29uIj4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjgwMDMiIEJvdW5kcz0iMCwwLDIsMSIgTmFtZT0iUmVzQ29tcGFyZSIgQWxpYXM9IlJlc3VsdCBDb21wYXJpc29uIiBJY29uPSJSZXNDb21wYXJlIiAgLz4NCiAgICAgICAgPC9Hcm91cD4NCg0KICAgICAgICA8R3JvdXAgTmFtZT0iUHJpbnQiIEFsaWFzPSJSZXBvcnQgUHJpbnRpbmciPg0KICAgICAgICAgICAgPENtZCBJRD0iODAwMSIgQm91bmRzPSIwLDAiIE5hbWU9IlJlcG9ydENvbmZpZyIgQWxpYXM9IlJlcG9ydCBTZXR0aW5ncyIgSWNvbj0icmVwb3J0Q29uZmlnIiAgLz4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjgwMDQiIEJvdW5kcz0iMSwwIiBOYW1lPSJQcmludFByZXZpZXciIEFsaWFzPSJSZXBvcnQgUHJldmlldyIgSWNvbj0iUHJlUHJpbnQiICAvPg0KICAgICAgICAgICAgPENtZCBJRD0iODAwMiIgQm91bmRzPSIwLDEiIE5hbWU9IlByaW50IiBBbGlhcz0iUHJpbnQoSW5jbHVkZSBQREYpIiBJY29uPSJQcmludCIgIC8+DQogICAgICAgICAgICA8Q21kIElEPSI4MDA1IiBCb3VuZHM9IjEsMSIgTmFtZT0iRXhwb3J0V29yZCIgQWxpYXM9IkV4cG9ydChXb3JkKSIgSWNvbj0iV29yZDE2IiAgLz4NCiAgICAgICAgPC9Hcm91cD4NCg0KICAgICAgICA8R3JvdXAgTmFtZT0iV2luZG93IiBBbGlhcz0iV2luZG93IERpc3BsYXkiIFZpc2libGU9IjAiPg0KICAgICAgICAgICAgPENtZCBJRD0iOTAwMyIgQm91bmRzPSIwLDAsMiwxIiBOYW1lPSJWaXNpYmxlUGFyYW1ldGVycyIgQWxpYXM9IlBhcmFtZXRlciBXaW5kb3ciIEljb249IlZpc2libGVQYXJhbWV0ZXJzIiAvPg0KICAgICAgICAgICAgPENtZCBJRD0iOTAwNCIgQm91bmRzPSIwLDEsMiwxIiBOYW1lPSJWaXNpYmxlUHR5cyIgQWxpYXM9IlByb3BlcnR5IFdpbmRvdyIgSWNvbj0iUHJvcGVydHlXaW5kb3ciIC8+DQoNCiAgICAgICAgPC9Hcm91cD4NCg0KICAgIDwvVGFiPg0KDQogICAgPFRhYiBJRD0iOSIgTmFtZT0iV2luZG93IiBBbGlhcz0iV2luZG93IiA+DQoNCiAgICAgICAgPEdyb3VwIE5hbWU9IldpbmRvdyIgQWxpYXM9IkJhc2ljIj4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjkwMDEiIEJvdW5kcz0iMCwwLDIsMSIgTmFtZT0iVmlzaWJsZVByb2pUcmVlRGEiIEFsaWFzPSJQcm9qZWN0IFRyZWUiIEljb249IlByb2pUcmVlIiAvPg0KICAgICAgICAgICAgPENtZCBJRD0iOTAwOCIgQm91bmRzPSIwLDEsMiwxIiBOYW1lPSJWaXNpYmxlUHJvalRyZWVKYiIgQWxpYXM9IkFuYWx5c2lzIFRyZWUiIEljb249IlByb2pUcmVlIiAvPg0KICAgICAgICAgICAgPENtZCBJRD0iOTAwOSIgQm91bmRzPSIwLDIsMiwxIiBOYW1lPSJWaXNpYmxlUHJvalRyZWVScyIgQWxpYXM9IlJlc3VsdCBUcmVlIiBJY29uPSJQcm9qVHJlZSIgLz4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjkwMDIiIEJvdW5kcz0iMCwzIiBOYW1lPSJWaXNpYmxlTW9kZWxzIiBBbGlhcz0iTW9kZWwgV2luZG93IiBJY29uPSJWaXNpYmxlTW9kZWxzIiAvPg0KICAgICAgICAgICAgPENtZCBJRD0iOTAwMyIgQm91bmRzPSIxLDMiIE5hbWU9IlZpc2libGVQYXJhbWV0ZXJzIiBBbGlhcz0iUGFyYW1ldGVyIFdpbmRvdyIgSWNvbj0iVmlzaWJsZVBhcmFtZXRlcnMiIC8+DQogICAgICAgICAgICA8Q21kIElEPSI5MDA0IiBCb3VuZHM9IjAsNCIgTmFtZT0iVmlzaWJsZVB0eXMiIEFsaWFzPSJQcm9wZXJ0eSBXaW5kb3ciIEljb249IlByb3BlcnR5V2luZG93IiAvPg0KICAgICAgICAgICAgPENtZCBJRD0iOTAwNSIgQm91bmRzPSIxLDQiIE5hbWU9IlZpc2libGVMb2dzIiBBbGlhcz0iTG9nIFdpbmRvdyIgSWNvbj0iVmlzaWJsZUxvZ3MiIC8+DQogICAgICAgICAgICA8Q21kIElEPSI5MDA2IiBCb3VuZHM9IjAsNSIgTmFtZT0iU3RhY2tlZFByb2plY3QiIEFsaWFzPSJQcm9qZWN0IFdpbmRvdyIgSWNvbj0iU3RhY2tlZFByb2plY3QiIC8+DQogICAgICAgICAgICA8Q21kIElEPSI5MDA3IiBCb3VuZHM9IjEsNSIgTmFtZT0iU3RhY2tlZE1kaSIgQWxpYXM9IkFuYWx5c2lzIFdpbmRvdyIgSWNvbj0iU3RhY2tlZE1kaSIgLz4NCiAgICAgICAgPC9Hcm91cD4NCg0KICAgICAgICA8R3JvdXAgTmFtZT0iV2luZG93TGF5b3V0IiBBbGlhcz0iV2luZG93IExheW91dCI+DQogICAgICAgICAgICA8Q21kIElEPSI5MDExIiBCb3VuZHM9IjAsMCIgTmFtZT0iV2luZG93TGF5b3V0SCIgSWNvbk9ubHk9IjEiIFRpcHM9Ikhvcml6b250YWwgTGF5b3V0IiBJY29uPSJXaW5kb3dMYXlvdXRIIiAvPg0KICAgICAgICAgICAgPENtZCBJRD0iOTAxMiIgQm91bmRzPSIxLDAiIE5hbWU9IldpbmRvd0xheW91dFYiIEljb25Pbmx5PSIxIiBUaXBzPSJWZXJ0aWNhbCBMYXlvdXQiIEljb249IldpbmRvd0xheW91dFYiIC8+DQogICAgICAgICAgICA8Q21kIElEPSI5MDEzIiBCb3VuZHM9IjAsMSIgTmFtZT0iV2luZG93TGF5b3V0VCIgSWNvbk9ubHk9IjEiIFRpcHM9IlRpbGUgTGF5b3V0IiBJY29uPSJXaW5kb3dMYXlvdXRUIiAvPg0KICAgICAgICAgICAgPENtZCBJRD0iOTAxNCIgQm91bmRzPSIxLDEiIE5hbWU9IldpbmRvd0xheW91dEMiIEljb25Pbmx5PSIxIiBUaXBzPSJDb2xsYXBzZSBMYXlvdXQiIEljb249IldpbmRvd0xheW91dEMiIC8+DQogICAgICAgIDwvR3JvdXA+DQoNCiAgICAgICAgPEdyb3VwIE5hbWU9IkNsb3NlIiBBbGlhcz0iQ2xvc2UiPg0KICAgICAgICAgICAgPENtZCBJRD0iOTAyMSIgQm91bmRzPSIwLDAiIE5hbWU9IkNsb3NlQ3VyV25kIiBBbGlhcz0iQ2xvc2UgQ3VycmVudCIgSWNvbj0iQ2xvc2VBbGxXaW5kb3ciIC8+DQogICAgICAgICAgICA8Q21kIElEPSI5MDIyIiBCb3VuZHM9IjEsMCIgTmFtZT0iQ2xvc2VBbGxXbmRzIiBBbGlhcz0iQ2xvc2UgQWxsIiBJY29uPSJDbG9zZUFsbFdpbmRvdyIgLz4NCiAgICAgICAgICAgIDxDbWQgSUQ9IjkwMjMiIEJvdW5kcz0iMCwxIiBOYW1lPSJQcmV2V25kIiBBbGlhcz0iUHJldmlvdXMiIEljb25Pbmx5PSIxIiBJY29uPSJVcCIgVGlwcz0iUHJldmlvdXMgV2luZG93IiAvPg0KICAgICAgICAgICAgPENtZCBJRD0iOTAyNCIgQm91bmRzPSIxLDEiIE5hbWU9Ik5leHRXbmQiIEFsaWFzPSJOZXh0IiBJY29uT25seT0iMSIgSWNvbj0iRG93biIgVGlwcz0iTmV4dCBXaW5kb3ciIC8+DQogICAgICAgICAgICA8Q21kIElEPSI5MDI1IiBCb3VuZHM9IjAsMiwyLDEiIFR5cGU9IjciIE5hbWU9Ikxpc3RXeFduZHMiIEFsaWFzPSJXaW5kb3dzIiAvPg0KICAgICAgICA8L0dyb3VwPg0KDQogICAgPC9UYWI+DQoNCiAgICA8VGFiIElEPSIxMCIgTmFtZT0iSGVscCIgQWxpYXM9IkhlbHAiID4NCg0KICAgICAgICA8R3JvdXAgTmFtZT0iSGVscCIgQWxpYXM9IkhlbHAiPg0KICAgICAgICAgICAgPENtZCBJRD0iMTAwMDEiIEJvdW5kcz0iMCwwLDIsMSIgTmFtZT0iTG9nVmlldyIgQWxpYXM9IkxvZyBWaWV3KEwpIiBJY29uPSJMb2dWaWV3IiAvPg0KICAgICAgICAgICAgPENtZCBJRD0iMTAwMDIiIEJvdW5kcz0iMCwxLDIsMSIgTmFtZT0iSGVscCIgQWxpYXM9IkhlbHAoSCkiIEljb249IkhlbHAiIC8+DQogICAgICAgICAgICA8Q21kIElEPSIxMDAwOCIgQm91bmRzPSIwLDIsMiwxIiBOYW1lPSJVcGRhdGVMaXN0cyIgQWxpYXM9IlVwZGF0ZSBMaXN0cyhJKSIgSWNvbj0iVXBkYXRlTGlzdHMiIC8+DQogICAgICAgIDwvR3JvdXA+DQoNCiAgICAgICAgPEdyb3VwIE5hbWU9IkxhbmciIEFsaWFzPSJMYW5ndWFnZSI+DQogICAgICAgICAgIDxDbWQgSUQ9IjEwMDA5IiBCb3VuZHM9IjAsMCwyLDEiIE5hbWU9IkxhbmdTd2FwIiBBbGlhcz0iU3dhcCBsYW5ndWFnZSIgSWNvbj0iTGFuZ1N3YXAiIC8+DQogICAgICAgIDwvR3JvdXA+DQoNCiAgICAgICAgPEdyb3VwIE5hbWU9IkFib3V0IiBBbGlhcz0iQWJvdXQiPg0KICAgICAgICAgICAgPENtZCBJRD0iMTAwMDMiIEJvdW5kcz0iMCwwLDIsMSIgTmFtZT0iQWJvdXQiIEFsaWFzPSJBYm91dChBKSIgSWNvbj0iV1RBSUFib3V0IiAvPg0KICAgICAgICAgICAgPENtZCBJRD0iMTAwMDQiIEJvdW5kcz0iMSwwIiBOYW1lPSJBYm91dFF0IiBBbGlhcz0iQWJvdXQgUXQoUSkiIEljb249IlF0IiBWaXNpYmxlPSIwIiAvPg0KICAgICAgICA8L0dyb3VwPg0KDQogICAgICAgIDxHcm91cCBOYW1lPSJMb2dpbiIgQWxpYXM9IkxvZ2luKERlYnVnKSI+DQogICAgICAgICAgICA8Q21kIElEPSIxMDAwNyIgQm91bmRzPSIwLDAiIE5hbWU9IlJlZ2lzdGVyIiBBbGlhcz0iKERlYnVnKVNvZnR3YXJlIFJlZ2lzdHJhdGlvbihSKSIgSWNvbj0iUmVnaXN0ZXIiIC8+DQogICAgICAgICAgICA8Q21kIElEPSIxMDAwNSIgQm91bmRzPSIxLDAiIE5hbWU9IkxvZ2luIiBBbGlhcz0iKERlYnVnKVVzZXIgTG9naW4oVSkiIEljb249IkxvZ2luIiAvPg0KICAgICAgICA8L0dyb3VwPg0KDQogICAgICAgIDxHcm91cCBOYW1lPSJEZWJ1ZyIgQWxpYXM9IkRlYnVnKERlYnVnKSI+DQogICAgICAgICAgICA8Q21kIElEPSIxMDAwNiIgQm91bmRzPSIwLDAsMiwxIiBOYW1lPSIoRGVidWcpIFN1bSBQYXJhbWV0ZXJzIiBBbGlhcz0iKERlYnVnKVN1bW1hcml6ZSBNb2RlbCBQYXJhbWV0ZXJzIiBJY29uPSJTdW1QYXJhIiAvPg0KICAgICAgIDwvR3JvdXA+DQogICAgPC9UYWI+DQoNCjwvUmliYm9uPg0K
\ No newline at end of file
diff --git a/Bin/Config/Common/ModelParaDefinesNM_cn.dat b/Bin/Config/Common/ModelParaDefinesNM_cn.dat
index 4ad2fde..c7e0160 100644
--- a/Bin/Config/Common/ModelParaDefinesNM_cn.dat
+++ b/Bin/Config/Common/ModelParaDefinesNM_cn.dat
@@ -1 +1 @@
-PD94bWwgdmVycup_mpac2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4NCg0KPCEtLSoqKioqKioqKioqKiwzyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiotLT4NCjwhLS0gICAg5pys5paH5qGj55qE55uu55qE5piv5bu656uLV1RBSeaVsOWAvOinoyhOTSnmqKHlnZfnmoTlj4LmlbDlrprkuYkgICAgICAgICAgICAgICAgLS0+DQo8IS0tICAgIOS7heWMheWQq1BFQknmsYLop6PlmajmiYDpnIDnmoTlgqjlsYLjgIHkupXlkozlh6DkvZXlr7nosaHlj4LmlbAgICAgICAgICAgICAgICAgICAtLT4NCjwhLS0gICAgRGF0ZTogMjAyNjA2MTUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPg0KPCEtLSoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiotLT4NCg0KPCEtLQ0KICAgIOWPguaVsOiMg+WbtO+8mlBFQknmsYLop6PlmajmiYDpnIDnmoTlgqjlsYLjgIHkupXlkozlh6DkvZXlr7nosaHlj4LmlbANCiAgICDlr7nlupQgSFhfTldUTV9NT0RFTF9JTlBVVCDnu5PmnoTkvZPlrZfmrrUNCiAgICDpgJrov4cgX3BhcmFIZWxwZXItPmxvYWRQYXJhRGVmaW5lcygpIOWKoOi9ve+8jHNLZXkg5qCH6K+G5Li6IHNfTm1fU2VyaWUNCi0tPg0KDQo8Um9vdD4NCg0KICA8UGFyYUdyb3VwIE5hbWU9IiIgQWxpYXM9IuWCqOWxguWPguaVsCI+DQogICAgPFBhcmFJdGVtIE5hbWU9ImgiICAgQWxpYXM9IuWCqOWxguWOmuW6piIgICAgICAgVW5pdD0ibSIgICAgIERlZmF1bHQ9IjEwIiAgICBNYXg9IjEwMDAwIiAgTWluPSIxZS0wNSIgIERpZ2l0PSI2IiAgRGVzYz0icmVzZXJ2b2lyIHRoaWNrbmVzcyIgLz4NCiAgICA8UGFyYUl0ZW0gTmFtZT0iUGkiICBBbGlhcz0i5Yid5aeL5Y6L5YqbIiAgICAgICBVbml0PSJNUGEiICAgRGVmYXVsdD0iNDAiICAgIE1heD0iNTAwIiAgICBNaW49IjAuMSIgICAgRGlnaXQ9IjYiICBEZXNjPSJpbml0aWFsIGZvcm1hdGlvbiBwcmVzc3VyZSIgLz4NCiAgICA8UGFyYUl0ZW0gTmFtZT0iSyIgICBBbGlhcz0i5riX6YCP546HIiAgICAgICAgIFVuaXQ9IkRhcmN5IiBEZWZhdWx0PSIwLjAwMSIgTWF4PSIxMCIgICAgIE1pbj0iMCIgICAgICBEaWdpdD0iNiIgIERlc2M9InBlcm1lYWJpbGl0eSIgLz4KICAgIDxQYXJhSXRlbSBOYW1lPSJwaGkiIEFsaWFzPSLlrZTpmpnluqYiICAgICAgICAgVW5pdD0iIiAgICAgIERlZmF1bHQ9IjAuMSIgICBNYXg9IjEiICAgICAgTWluPSIxZS0wNSIgIERpZ2l0PSI2IiAgRGVzYz0icG9yb3NpdHkiIC8+DQogICAgPFBhcmFJdGVtIE5hbWU9IkN0aSIgQWxpYXM9Iue7vOWQiOWOi+e8qeezu+aVsCIgICBVbml0PSIxL01QYSIgRGVmYXVsdD0iMC4wMDEiIE1heD0iMTAiICAgICBNaW49IjFlLTMwIiAgRGlnaXQ9IjEwIiBTY2llbnRpZmljPSIxIiBEZXNjPSJ0b3RhbCBjb21wcmVzc2liaWxpdHkiIC8+DQogICAgPFBhcmFJdGVtIE5hbWU9IkNmIiAgQWxpYXM9IuWyqeefs+WOi+e8qeezu+aVsCIgICBVbml0PSIxL01QYSIgRGVmYXVsdD0iMC4wMDAxIiBNYXg9IjEwIiAgICBNaW49IjFlLTMwIiAgRGlnaXQ9IjEwIiBTY2llbnRpZmljPSIxIiBEZXNjPSJyb2NrIGNvbXByZXNzaWJpbGl0eSIgLz4NCiAgICA8UGFyYUl0ZW0gTmFtZT0iU29pIiBBbGlhcz0i5Yid5aeL5ZCr5rK56aWx5ZKM5bqmIiBVbml0PSIiICAgICAgRGVmYXVsdD0iMC44IiAgIE1heD0iMSIgICAgICBNaW49IjAiICAgICAgRGlnaXQ9IjYiICBEZXNjPSJpbml0aWFsIG9pbCBzYXR1cmF0aW9uIiAvPg0KICAgIDxQYXJhSXRlbSBOYW1lPSJTd2kiIEFsaWFzPSLliJ3lp4vlkKvmsLTppbHlkozluqYiIFVuaXQ9IiIgICAgICBEZWZhdWx0PSIwLjIiICAgTWF4PSIxIiAgICAgIE1pbj0iMCIgICAgICBEaWdpdD0iNiIgIERlc2M9ImluaXRpYWwgd2F0ZXIgc2F0dXJhdGlvbiIgLz4NCiAgPC9QYXJhR3JvdXA+DQoNCiAgPFBhcmFHcm91cCBOYW1lPSIiIEFsaWFzPSLkupXlj4LmlbAiPg0KICAgIDxQYXJhSXRlbSBOYW1lPSJXX1giICAgIEFsaWFzPSJY5Z2Q5qCHIiAgICAgICBVbml0PSJtIiAgICBEZWZhdWx0PSIwIiAgICAgTWF4PSIxMDAwMCIgIE1pbj0iLTEwMDAwIiBEaWdpdD0iNiIgIERlc2M9IndlbGwgWCBjb29yZGluYXRlIiAvPg0KICAgIDxQYXJhSXRlbSBOYW1lPSJXX1kiICAgIEFsaWFzPSJZ5Z2Q5qCHIiAgICAgICBVbml0PSJtIiAgICBEZWZhdWx0PSIwIiAgICAgTWF4PSIxMDAwMCIgIE1pbj0iLTEwMDAwIiBEaWdpdD0iNiIgIERlc2M9IndlbGwgWSBjb29yZGluYXRlIiAvPg0KICAgIDxQYXJhSXRlbSBOYW1lPSJXX1J3IiAgIEFsaWFzPSLkupXnrZLljYrlvoQiICAgIFVuaXQ9Im0iICAgIERlZmF1bHQ9IjAuMSIgICBNYXg9IjEwIiAgICAgTWluPSIwLjAwMSIgIERpZ2l0PSI2IiAgRGVzYz0id2VsbGJvcmUgcmFkaXVzIiAvPg0KICAgIDxQYXJhSXRlbSBOYW1lPSJXX1NraW4iIEFsaWFzPSLooajnmq7ns7vmlbAiICAgIFVuaXQ9IiIgICAgIERlZmF1bHQ9IjAiICAgICBNYXg9IjEwMDAiICAgTWluPSItMTAwIiAgIERpZ2l0PSI2IiAgRGVzYz0ic2tpbiBmYWN0b3IiIC8+DQogICAgPFBhcmFJdGVtIE5hbWU9IldfQyIgICAgQWxpYXM9IuS6leetkuWCqOmbhuezu+aVsCIgVW5pdD0ibV4zL01QYSIgRGVmYXVsdD0iMCIgTWF4PSIxMDAwIiAgIE1pbj0iMCIgICAgICBEaWdpdD0iNiIgIERlc2M9IndlbGxib3JlIHN0b3JhZ2UgY29lZmZpY2llbnQiIC8+DQogICAgPFBhcmFJdGVtIE5hbWU9IldfV2VsbExlbmd0aCIgICAgICAgICBBbGlhcz0i5rC05bmz5q616ZW/5bqmIiAgIFVuaXQ9Im0iICAgIERlZmF1bHQ9IjIwMCIgIE1heD0iMTAwMDAiIE1pbj0iMWUtMDUiIERpZ2l0PSI2IiBEZXNjPSJob3Jpem9udGFsIHdlbGwgbGVuZ3RoIiAvPg0KICAgIDxQYXJhSXRlbSBOYW1lPSJXX0RyYWluQW5nbGUiICAgICAgICAgQWxpYXM9IuaOkuawtOinkuW6piIgICAgIFVuaXQ9Im8iICAgIERlZmF1bHQ9IjAiICAgIE1heD0iMzYwIiAgIE1pbj0iLTM2MCIgIERpZ2l0PSI2IiBEZXNjPSJob3Jpem9udGFsIHdlbGwgZHJhaW4gYW5nbGUiIC8+DQogICAgPFBhcmFJdGVtIE5hbWU9IldfTnVtYmVyT2ZGcmFjdHVyZXMiICBBbGlhcz0i6KOC57yd5pWw6YePIiAgICAgVW5pdD0iIiAgICAgRGVmYXVsdD0iMTUiICAgTWF4PSIxMDAwIiAgTWluPSIyIiAgICAgRGlnaXQ9IjAiIERlc2M9Im51bWJlciBvZiBmcmFjdHVyZXMiIC8+DQogICAgPFBhcmFJdGVtIE5hbWU9IldfRnJhY3R1cmVIYWxmTGVuZ3RoIiBBbGlhcz0i6KOC57yd5Y2K6ZW/IiAgICAgVW5pdD0ibSIgICAgRGVmYXVsdD0iNTAiICAgTWF4PSIxMDAwMCIgTWluPSIxZS0wNSIgRGlnaXQ9IjYiIERlc2M9ImZyYWN0dXJlIGhhbGYtbGVuZ3RoIiAvPg0KICAgIDxQYXJhSXRlbSBOYW1lPSJXX0ZyYWN0dXJlQW5nbGUiICAgICAgQWxpYXM9Iuijgue8neinkuW6piIgICAgIFVuaXQ9Im8iICAgIERlZmF1bHQ9IjkwIiAgIE1heD0iMzYwIiAgIE1pbj0iLTM2MCIgIERpZ2l0PSI2IiBEZXNjPSJmcmFjdHVyZSBhbmdsZSIgLz4NCiAgICA8UGFyYUl0ZW0gTmFtZT0iV19EZmMiICAgICAgICAgICAgICAgIEFsaWFzPSLoo4LnvJ3lr7zmtYHog73lipsiIFVuaXQ9Im1kLm0iIERlZmF1bHQ9IjEwMDAiIE1heD0iMWUrMzAiIE1pbj0iMCIgICAgIERpZ2l0PSI2IiBEZXNjPSJmcmFjdHVyZSBjb25kdWN0aXZpdHkiIC8+DQogIDwvUGFyYUdyb3VwPg0KDQogIDxQYXJhR3JvdXAgTmFtZT0iIiBBbGlhcz0i54us56uL6KOC57yd5Y+C5pWwIj4NCiAgICA8UGFyYUl0ZW0gTmFtZT0iRl9YMCIgQWxpYXM9Iui1t+eCuVgwIiAgIFVuaXQ9Im0iICAgIERlZmF1bHQ9IjAiIE1heD0iMTAwMDAiIE1pbj0iLTEwMDAwIiBEaWdpdD0iNiIgRGVzYz0iZnJhY3R1cmUgc3RhcnQgWCBjb29yZGluYXRlIiAvPg0KICAgIDxQYXJhSXRlbSBOYW1lPSJGX1kwIiBBbGlhcz0i6LW354K5WTAiICAgVW5pdD0ibSIgICAgRGVmYXVsdD0iMCIgTWF4PSIxMDAwMCIgTWluPSItMTAwMDAiIERpZ2l0PSI2IiBEZXNjPSJmcmFjdHVyZSBzdGFydCBZIGNvb3JkaW5hdGUiIC8+DQogICAgPFBhcmFJdGVtIE5hbWU9IkZfWDEiIEFsaWFzPSLnu4jngrlYMSIgICBVbml0PSJtIiAgICBEZWZhdWx0PSIwIiBNYXg9IjEwMDAwIiBNaW49Ii0xMDAwMCIgRGlnaXQ9IjYiIERlc2M9ImZyYWN0dXJlIGVuZCBYIGNvb3JkaW5hdGUiIC8+DQogICAgPFBhcmFJdGVtIE5hbWU9IkZfWTEiIEFsaWFzPSLnu4jngrlZMSIgICBVbml0PSJtIiAgICBEZWZhdWx0PSIwIiBNYXg9IjEwMDAwIiBNaW49Ii0xMDAwMCIgRGlnaXQ9IjYiIERlc2M9ImZyYWN0dXJlIGVuZCBZIGNvb3JkaW5hdGUiIC8+DQogICAgPFBhcmFJdGVtIE5hbWU9IkZfRkMiIEFsaWFzPSLlr7zmtYHog73lipsiIFVuaXQ9Im1kLm0iIERlZmF1bHQ9IjEiIE1heD0iMWUrMzAiIE1pbj0iMCIgICAgICBEaWdpdD0iNiIgRGVzYz0iZnJhY3R1cmUgY29uZHVjdGl2aXR5IiAvPg0KICA8L1BhcmFHcm91cD4NCg0KICA8UGFyYUdyb3VwIE5hbWU9IiIgQWxpYXM9IuaWreWxguWPguaVsCI+DQogICAgPFBhcmFJdGVtIE5hbWU9IkZUX1gwIiBBbGlhcz0i6LW354K5WDAiIFVuaXQ9Im0iIERlZmF1bHQ9IjAiIE1heD0iMTAwMDAiIE1pbj0iLTEwMDAwIiBEaWdpdD0iNiIgRGVzYz0iZmF1bHQgc3RhcnQgWCBjb29yZGluYXRlIiAvPg0KICAgIDxQYXJhSXRlbSBOYW1lPSJGVF9ZMCIgQWxpYXM9Iui1t+eCuVkwIiBVbml0PSJtIiBEZWZhdWx0PSIwIiBNYXg9IjEwMDAwIiBNaW49Ii0xMDAwMCIgRGlnaXQ9IjYiIERlc2M9ImZhdWx0IHN0YXJ0IFkgY29vcmRpbmF0ZSIgLz4NCiAgICA8UGFyYUl0ZW0gTmFtZT0iRlRfWDEiIEFsaWFzPSLnu4jngrlYMSIgVW5pdD0ibSIgRGVmYXVsdD0iMCIgTWF4PSIxMDAwMCIgTWluPSItMTAwMDAiIERpZ2l0PSI2IiBEZXNjPSJmYXVsdCBlbmQgWCBjb29yZGluYXRlIiAvPg0KICAgIDxQYXJhSXRlbSBOYW1lPSJGVF9ZMSIgQWxpYXM9Iue7iOeCuVkxIiBVbml0PSJtIiBEZWZhdWx0PSIwIiBNYXg9IjEwMDAwIiBNaW49Ii0xMDAwMCIgRGlnaXQ9IjYiIERlc2M9ImZhdWx0IGVuZCBZIGNvb3JkaW5hdGUiIC8+DQogIDwvUGFyYUdyb3VwPg0KDQogIDxQYXJhR3JvdXAgTmFtZT0iIiBBbGlhcz0i55+p5b2i6L6555WM5Y+C5pWwIj4NCiAgICA8UGFyYUl0ZW0gTmFtZT0iQlJfWE1pbiIgQWxpYXM9IuW3pui+ueeVjFgiIFVuaXQ9Im0iIERlZmF1bHQ9IjAiIE1heD0iMTAwMDAiIE1pbj0iLTEwMDAwIiBEaWdpdD0iNiIgRGVzYz0icmVjdGFuZ2xlIGJvdW5kYXJ5IG1pbmltdW0gWCIgLz4NCiAgICA8UGFyYUl0ZW0gTmFtZT0iQlJfWU1pbiIgQWxpYXM9IuS4i+i+ueeVjFkiIFVuaXQ9Im0iIERlZmF1bHQ9IjAiIE1heD0iMTAwMDAiIE1pbj0iLTEwMDAwIiBEaWdpdD0iNiIgRGVzYz0icmVjdGFuZ2xlIGJvdW5kYXJ5IG1pbmltdW0gWSIgLz4NCiAgICA8UGFyYUl0ZW0gTmFtZT0iQlJfWE1heCIgQWxpYXM9IuWPs+i+ueeVjFgiIFVuaXQ9Im0iIERlZmF1bHQ9IjAiIE1heD0iMTAwMDAiIE1pbj0iLTEwMDAwIiBEaWdpdD0iNiIgRGVzYz0icmVjdGFuZ2xlIGJvdW5kYXJ5IG1heGltdW0gWCIgLz4NCiAgICA8UGFyYUl0ZW0gTmFtZT0iQlJfWU1heCIgQWxpYXM9IuS4iui+ueeVjFkiIFVuaXQ9Im0iIERlZmF1bHQ9IjAiIE1heD0iMTAwMDAiIE1pbj0iLTEwMDAwIiBEaWdpdD0iNiIgRGVzYz0icmVjdGFuZ2xlIGJvdW5kYXJ5IG1heGltdW0gWSIgLz4NCiAgPC9QYXJhR3JvdXA+DQoNCiAgPFBhcmFHcm91cCBOYW1lPSIiIEFsaWFzPSLlnIblvaLovrnnlYzlj4LmlbAiPg0KICAgIDxQYXJhSXRlbSBOYW1lPSJCQ19DZW50ZXJYIiBBbGlhcz0i5ZyG5b+DWCIgVW5pdD0ibSIgRGVmYXVsdD0iMCIgTWF4PSIxMDAwMCIgTWluPSItMTAwMDAiIERpZ2l0PSI2IiBEZXNjPSJjaXJjbGUgYm91bmRhcnkgY2VudGVyIFgiIC8+DQogICAgPFBhcmFJdGVtIE5hbWU9IkJDX0NlbnRlclkiIEFsaWFzPSLlnIblv4NZIiBVbml0PSJtIiBEZWZhdWx0PSIwIiBNYXg9IjEwMDAwIiBNaW49Ii0xMDAwMCIgRGlnaXQ9IjYiIERlc2M9ImNpcmNsZSBib3VuZGFyeSBjZW50ZXIgWSIgLz4NCiAgICA8UGFyYUl0ZW0gTmFtZT0iQkNfUmFkaXVzIiAgQWxpYXM9IuWNiuW+hCIgIFVuaXQ9Im0iIERlZmF1bHQ9IjEiIE1heD0iMTAwMDAiIE1pbj0iMWUtMDUiICBEaWdpdD0iNiIgRGVzYz0iY2lyY2xlIGJvdW5kYXJ5IHJhZGl1cyIgLz4NCiAgPC9QYXJhR3JvdXA+DQoNCiAgPFBhcmFHcm91cCBOYW1lPSIiIEFsaWFzPSLlpJrovrnlvaLovrnnlYzngrnlj4LmlbAiPg0KICAgIDxQYXJhSXRlbSBOYW1lPSJCUF9YIiBBbGlhcz0iWOWdkOaghyIgVW5pdD0ibSIgRGVmYXVsdD0iMCIgTWF4PSIxMDAwMCIgTWluPSItMTAwMDAiIERpZ2l0PSI2IiBEZXNjPSJwb2x5Z29uIGJvdW5kYXJ5IHZlcnRleCBYIiAvPg0KICAgIDxQYXJhSXRlbSBOYW1lPSJCUF9ZIiBBbGlhcz0iWeWdkOaghyIgVW5pdD0ibSIgRGVmYXVsdD0iMCIgTWF4PSIxMDAwMCIgTWluPSItMTAwMDAiIERpZ2l0PSI2IiBEZXNjPSJwb2x5Z29uIGJvdW5kYXJ5IHZlcnRleCBZIiAvPg0KICA8L1BhcmFHcm91cD4NCg0KICA8UGFyYUdyb3VwIE5hbWU9IiIgQWxpYXM9IuWMuuWfn+WPguaVsCI+DQogICAgPFBhcmFJdGVtIE5hbWU9IlJfTGVha2FnZSIgQWxpYXM9IuazhOmcsuezu+aVsCIgVW5pdD0iIiBEZWZhdWx0PSIxIiBNYXg9IjFlKzMwIiBNaW49IjAiIERpZ2l0PSI2IiBEZXNjPSJyZWdpb24gbGVha2FnZSBjb2VmZmljaWVudCIgLz4NCiAgPC9QYXJhR3JvdXA+DQoNCiAgPFBhcmFHcm91cCBOYW1lPSIiIEFsaWFzPSLmoIforrDljLrln5/lj4LmlbAiPg0KICAgIDxQYXJhSXRlbSBOYW1lPSJSTV9Db21XIiAgICAgICBBbGlhcz0i5YKo6IO95q+UIiBVbml0PSIiIERlZmF1bHQ9IjEiIE1heD0iMSIgICAgTWluPSIwIiAgICAgRGlnaXQ9IjYiIERlc2M9InN0b3JhZ2UgcmF0aW8iIC8+DQogICAgPFBhcmFJdGVtIE5hbWU9IlJNX0NvbUtyIiAgICAgIEFsaWFzPSLmtYHluqbmr5QiIFVuaXQ9IiIgRGVmYXVsdD0iMSIgTWF4PSIxMDAwIiBNaW49IjAuMDAxIiBEaWdpdD0iNiIgRGVzYz0ibW9iaWxpdHkgcmF0aW8iIC8+DQogICAgPFBhcmFJdGVtIE5hbWU9IlJNX05ldFRvR3Jvc3MiIEFsaWFzPSLlh4Dmr5vmr5QiIFVuaXQ9IiIgRGVmYXVsdD0iMSIgTWF4PSIxIiAgICBNaW49IjAiICAgICBEaWdpdD0iNiIgRGVzYz0ibmV0LXRvLWdyb3NzIiAvPg0KICA8L1BhcmFHcm91cD4NCg0KICA8IS0tIOe7k+aenOmdouadv+WPguaVsOWPqueUsSByZWJ1aWxkUmVzdWx0UGFyYXMoKSDpgInmi6nvvIzkuI3kvJrlh7rnjrDlnKjlt6bkvqfpnaLmnb/kuK3jgIIgLS0+DQogIDxQYXJhR3JvdXAgTmFtZT0iIiBBbGlhcz0i57uT5p6c5Y+C5pWwIj4NCiAgICA8UGFyYUl0ZW0gTmFtZT0iUmVzdWx0X1dfUnciICAgQWxpYXM9IuS6leW+hCIgICAgICAgICBVbml0PSJtIiAgICAgIERlZmF1bHQ9IjAuMSIgICAgTWF4PSIxMCIgICAgTWluPSIwLjAwMSIgIERpZ2l0PSI2IiAgRGVzYz0icmVzdWx0IHdlbGxib3JlIHJhZGl1cyIgLz4NCiAgICA8UGFyYUl0ZW0gTmFtZT0iUmVzdWx0X1dfRGZjIiAgQWxpYXM9Iuijgue8neWvvOa1geiDveWKmyIgVW5pdD0ibWQubSIgICBEZWZhdWx0PSIxMDAwIiAgIE1heD0iMWUrMzAiIE1pbj0iMCIgICAgICBEaWdpdD0iNiIgIERlc2M9InJlc3VsdCBmcmFjdHVyZSBjb25kdWN0aXZpdHkiIC8+DQogICAgPFBhcmFJdGVtIE5hbWU9IlJlc3VsdF9XX1NraW4iIEFsaWFzPSLooajnmq7ns7vmlbAiICAgICBVbml0PSIiICAgICAgIERlZmF1bHQ9IjAiICAgICAgTWF4PSIxMDAwIiAgTWluPSItMTAwIiAgIERpZ2l0PSI2IiAgRGVzYz0icmVzdWx0IHNraW4gZmFjdG9yIiAvPg0KICAgIDxQYXJhSXRlbSBOYW1lPSJSZXN1bHRfV19DIiAgICBBbGlhcz0i5LqV562S5YKo6ZuG57O75pWwIiBVbml0PSJtXjMvTVBhIiBEZWZhdWx0PSIwIiAgICAgIE1heD0iMTAwMCIgIE1pbj0iMCIgICAgICBEaWdpdD0iNiIgIERlc2M9InJlc3VsdCB3ZWxsYm9yZSBzdG9yYWdlIGNvZWZmaWNpZW50IiAvPg0KDQogICAgPFBhcmFJdGVtIE5hbWU9IlJlc3VsdF9QaSIgIEFsaWFzPSLliJ3lp4vlnLDlsYLljovlipsiICAgVW5pdD0iTVBhIiAgIERlZmF1bHQ9IjQwIiAgICAgTWF4PSI1MDAiICAgTWluPSIwLjEiICAgRGlnaXQ9IjYiICBEZXNjPSJyZXN1bHQgaW5pdGlhbCBmb3JtYXRpb24gcHJlc3N1cmUiIC8+DQogICAgPFBhcmFJdGVtIE5hbWU9IlJlc3VsdF9LIiAgIEFsaWFzPSLmuJfpgI/njociICAgICAgICAgVW5pdD0iRGFyY3kiIERlZmF1bHQ9IjAuMDAxIiAgTWF4PSIxMCIgICAgTWluPSIwIiAgICAgRGlnaXQ9IjYiICBEZXNjPSJyZXN1bHQgcGVybWVhYmlsaXR5IiAvPgogICAgPFBhcmFJdGVtIE5hbWU9IlJlc3VsdF9oIiAgIEFsaWFzPSLlgqjlsYLljprluqYiICAgICAgIFVuaXQ9Im0iICAgICBEZWZhdWx0PSIxMCIgICAgIE1heD0iMTAwMDAiIE1pbj0iMWUtMDUiIERpZ2l0PSI2IiAgRGVzYz0icmVzdWx0IHJlc2Vydm9pciB0aGlja25lc3MiIC8+DQogICAgPFBhcmFJdGVtIE5hbWU9IlJlc3VsdF9waGkiIEFsaWFzPSLlrZTpmpnluqYiICAgICAgICAgVW5pdD0iIiAgICAgIERlZmF1bHQ9IjAuMSIgICAgTWF4PSIxIiAgICAgTWluPSIxZS0wNSIgRGlnaXQ9IjYiICBEZXNjPSJyZXN1bHQgcG9yb3NpdHkiIC8+DQogICAgPFBhcmFJdGVtIE5hbWU9IlJlc3VsdF9DdGkiIEFsaWFzPSLnu7zlkIjljovnvKnns7vmlbAiICAgVW5pdD0iMS9NUGEiIERlZmF1bHQ9IjAuMDAxIiAgTWF4PSIxMCIgICAgTWluPSIxZS0zMCIgRGlnaXQ9IjEwIiBTY2llbnRpZmljPSIxIiBEZXNjPSJyZXN1bHQgdG90YWwgY29tcHJlc3NpYmlsaXR5IiAvPg0KICAgIDxQYXJhSXRlbSBOYW1lPSJSZXN1bHRfQ2YiICBBbGlhcz0i5bKp55+z5Y6L57yp57O75pWwIiAgIFVuaXQ9IjEvTVBhIiBEZWZhdWx0PSIwLjAwMDEiIE1heD0iMTAiICAgIE1pbj0iMWUtMzAiIERpZ2l0PSIxMCIgU2NpZW50aWZpYz0iMSIgRGVzYz0icmVzdWx0IHJvY2sgY29tcHJlc3NpYmlsaXR5IiAvPg0KICAgIDxQYXJhSXRlbSBOYW1lPSJSZXN1bHRfU29pIiBBbGlhcz0i5Yid5aeL5ZCr5rK56aWx5ZKM5bqmIiBVbml0PSIiICAgICAgRGVmYXVsdD0iMC44IiAgICBNYXg9IjEiICAgICBNaW49IjAiICAgICBEaWdpdD0iNiIgIERlc2M9InJlc3VsdCBpbml0aWFsIG9pbCBzYXR1cmF0aW9uIiAvPg0KICAgIDxQYXJhSXRlbSBOYW1lPSJSZXN1bHRfU2dpIiBBbGlhcz0i5Yid5aeL5ZCr5rCU6aWx5ZKM5bqmIiBVbml0PSIiICAgICAgRGVmYXVsdD0iMCIgICAgICBNYXg9IjEiICAgICBNaW49IjAiICAgICBEaWdpdD0iNiIgIERlc2M9InJlc3VsdCBpbml0aWFsIGdhcyBzYXR1cmF0aW9uIiAvPg0KICAgIDxQYXJhSXRlbSBOYW1lPSJSZXN1bHRfU3dpIiBBbGlhcz0i5Yid5aeL5ZCr5rC06aWx5ZKM5bqmIiBVbml0PSIiICAgICAgRGVmYXVsdD0iMC4yIiAgICBNYXg9IjEiICAgICBNaW49IjAiICAgICBEaWdpdD0iNiIgIERlc2M9InJlc3VsdCBpbml0aWFsIHdhdGVyIHNhdHVyYXRpb24iIC8+DQoNCiAgICA8UGFyYUl0ZW0gTmFtZT0iUmVzdWx0X0JvIiAgIEFsaWFzPSLmsrnkvZPnp6/ns7vmlbAiIFVuaXQ9Im0zL20zIiBEZWZhdWx0PSIxIiBNYXg9IjFlKzMwIiBNaW49IjAiICAgICBEaWdpdD0iNiIgIERlc2M9InJlc3VsdCBvaWwgZm9ybWF0aW9uIHZvbHVtZSBmYWN0b3IiIC8+DQogICAgPFBhcmFJdGVtIE5hbWU9IlJlc3VsdF9NaXVvIiBBbGlhcz0i5rK555u46buP5bqmIiAgIFVuaXQ9Im1QYS5zIiBEZWZhdWx0PSIxIiBNYXg9IjFlKzMwIiBNaW49IjFlLTMwIiBEaWdpdD0iNiIgIERlc2M9InJlc3VsdCBvaWwgdmlzY29zaXR5IiAvPg0KICAgIDxQYXJhSXRlbSBOYW1lPSJSZXN1bHRfQ28iICAgQWxpYXM9IuayueWOi+e8qeezu+aVsCIgVW5pdD0iMS9NUGEiIERlZmF1bHQ9IjAiIE1heD0iMWUrMzAiIE1pbj0iMCIgICAgRGlnaXQ9IjEwIiBTY2llbnRpZmljPSIxIiBEZXNjPSJyZXN1bHQgb2lsIGNvbXByZXNzaWJpbGl0eSIgLz4NCiAgICA8UGFyYUl0ZW0gTmFtZT0iUmVzdWx0X0J3IiAgIEFsaWFzPSLmsLTkvZPnp6/ns7vmlbAiIFVuaXQ9Im0zL20zIiBEZWZhdWx0PSIxIiBNYXg9IjFlKzMwIiBNaW49IjAiICAgICBEaWdpdD0iNiIgIERlc2M9InJlc3VsdCB3YXRlciBmb3JtYXRpb24gdm9sdW1lIGZhY3RvciIgLz4NCiAgICA8UGFyYUl0ZW0gTmFtZT0iUmVzdWx0X01pdXciIEFsaWFzPSLmsLTnm7jpu4/luqYiICAgVW5pdD0ibVBhLnMiIERlZmF1bHQ9IjEiIE1heD0iMWUrMzAiIE1pbj0iMWUtMzAiIERpZ2l0PSI2IiAgRGVzYz0icmVzdWx0IHdhdGVyIHZpc2Nvc2l0eSIgLz4NCiAgICA8UGFyYUl0ZW0gTmFtZT0iUmVzdWx0X0N3IiAgIEFsaWFzPSLmsLTljovnvKnns7vmlbAiIFVuaXQ9IjEvTVBhIiBEZWZhdWx0PSIwIiBNYXg9IjFlKzMwIiBNaW49IjAiICAgIERpZ2l0PSIxMCIgU2NpZW50aWZpYz0iMSIgRGVzYz0icmVzdWx0IHdhdGVyIGNvbXByZXNzaWJpbGl0eSIgLz4NCiAgICA8UGFyYUl0ZW0gTmFtZT0iUmVzdWx0X0JnIiAgIEFsaWFzPSLmsJTkvZPnp6/ns7vmlbAiIFVuaXQ9Im0zL20zIiBEZWZhdWx0PSIxIiBNYXg9IjFlKzMwIiBNaW49IjAiICAgICBEaWdpdD0iNiIgIERlc2M9InJlc3VsdCBnYXMgZm9ybWF0aW9uIHZvbHVtZSBmYWN0b3IiIC8+DQogICAgPFBhcmFJdGVtIE5hbWU9IlJlc3VsdF9NaXVnIiBBbGlhcz0i5rCU55u46buP5bqmIiAgIFVuaXQ9Im1QYS5zIiBEZWZhdWx0PSIxIiBNYXg9IjFlKzMwIiBNaW49IjFlLTMwIiBEaWdpdD0iNiIgIERlc2M9InJlc3VsdCBnYXMgdmlzY29zaXR5IiAvPg0KICAgIDxQYXJhSXRlbSBOYW1lPSJSZXN1bHRfQ2ciICAgQWxpYXM9IuawlOWOi+e8qeezu+aVsCIgVW5pdD0iMS9NUGEiIERlZmF1bHQ9IjAiIE1heD0iMWUrMzAiIE1pbj0iMCIgICAgRGlnaXQ9IjEwIiBTY2llbnRpZmljPSIxIiBEZXNjPSJyZXN1bHQgZ2FzIGNvbXByZXNzaWJpbGl0eSIgLz4NCiAgPC9QYXJhR3JvdXA+DQoNCjwvUm9vdD4NCg==
\ No newline at end of file
+PD94bWwgdmVycup_mpac2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4NCg0KPCEtLSoqKioqKioqKioqKiwzyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiotLT4NCjwhLS0gICAg5pys5paH5qGj55qE55uu55qE5piv5bu656uLV1RBSeaVsOWAvOinoyhOTSnmqKHlnZfnmoTlj4LmlbDlrprkuYkgICAgICAgICAgICAgICAgLS0+DQo8IS0tICAgIOS7heWMheWQq1BFQknmsYLop6PlmajmiYDpnIDnmoTlgqjlsYLjgIHkupXlkozlh6DkvZXlr7nosaHlj4LmlbAgICAgICAgICAgICAgICAgICAtLT4NCjwhLS0gICAgRGF0ZTogMjAyNjA2MTUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC0tPg0KPCEtLSoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiotLT4NCg0KPCEtLQ0KICAgIOWPguaVsOiMg+WbtO+8mlBFQknmsYLop6PlmajmiYDpnIDnmoTlgqjlsYLjgIHkupXlkozlh6DkvZXlr7nosaHlj4LmlbANCiAgICDlr7nlupQgSFhfTldUTV9NT0RFTF9JTlBVVCDnu5PmnoTkvZPlrZfmrrUNCiAgICDpgJrov4cgX3BhcmFIZWxwZXItPmxvYWRQYXJhRGVmaW5lcygpIOWKoOi9ve+8jHNLZXkg5qCH6K+G5Li6IHNfTm1fU2VyaWUNCi0tPg0KDQo8Um9vdD4NCg0KICA8UGFyYUdyb3VwIE5hbWU9IiIgQWxpYXM9IuWCqOWxguWPguaVsCI+DQogICAgPFBhcmFJdGVtIE5hbWU9ImgiICAgQWxpYXM9IuWCqOWxguWOmuW6piIgICAgICAgVW5pdD0ibSIgICAgIERlZmF1bHQ9IjEwIiAgICBNYXg9IjEwMDAwIiAgTWluPSIxZS0wNSIgIERpZ2l0PSI2IiAgRGVzYz0icmVzZXJ2b2lyIHRoaWNrbmVzcyIgLz4NCiAgICA8UGFyYUl0ZW0gTmFtZT0iUGkiICBBbGlhcz0i5Yid5aeL5Y6L5YqbIiAgICAgICBVbml0PSJNUGEiICAgRGVmYXVsdD0iNDAiICAgIE1heD0iNTAwIiAgICBNaW49IjAuMSIgICAgRGlnaXQ9IjYiICBEZXNjPSJpbml0aWFsIGZvcm1hdGlvbiBwcmVzc3VyZSIgLz4NCiAgICA8UGFyYUl0ZW0gTmFtZT0iSyIgICBBbGlhcz0i5riX6YCP546HIiAgICAgICAgIFVuaXQ9Im1EIiAgICBEZWZhdWx0PSIyNSIgICAgTWF4PSIxMDAwMCIgIE1pbj0iMCIgICAgICBEaWdpdD0iNiIgIERlc2M9InBlcm1lYWJpbGl0eSIgLz4NCiAgICA8UGFyYUl0ZW0gTmFtZT0icGhpIiBBbGlhcz0i5a2U6ZqZ5bqmIiAgICAgICAgIFVuaXQ9IiIgICAgICBEZWZhdWx0PSIwLjEiICAgTWF4PSIxIiAgICAgIE1pbj0iMWUtMDUiICBEaWdpdD0iNiIgIERlc2M9InBvcm9zaXR5IiAvPg0KICAgIDxQYXJhSXRlbSBOYW1lPSJCbyIgIEFsaWFzPSLmsrnkvZPnp6/ns7vmlbAiICAgICBVbml0PSIiICAgICAgRGVmYXVsdD0iMS4yIiAgIE1heD0iMTAiICAgICBNaW49IjFlLTA2IiAgRGlnaXQ9IjYiICBEZXNjPSJvaWwgZm9ybWF0aW9uIHZvbHVtZSBmYWN0b3IiIC8+DQogICAgPFBhcmFJdGVtIE5hbWU9Ik1pdW8iIEFsaWFzPSLmsrnnm7jpu4/luqYiICAgICAgVW5pdD0ibVBhLnMiIERlZmF1bHQ9IjAuNSIgICBNYXg9IjEwMDAwIiAgTWluPSIxZS0wNiIgIERpZ2l0PSI2IiAgRGVzYz0ib2lsIHZpc2Nvc2l0eSIgLz4NCiAgICA8UGFyYUl0ZW0gTmFtZT0iQnciICBBbGlhcz0i5rC05L2T56ev57O75pWwIiAgICAgVW5pdD0iIiAgICAgIERlZmF1bHQ9IjEiICAgICBNYXg9IjEwIiAgICAgTWluPSIxZS0wNiIgIERpZ2l0PSI2IiAgRGVzYz0id2F0ZXIgZm9ybWF0aW9uIHZvbHVtZSBmYWN0b3IiIC8+DQogICAgPFBhcmFJdGVtIE5hbWU9Ik1pdXciIEFsaWFzPSLmsLTnm7jpu4/luqYiICAgICAgVW5pdD0ibVBhLnMiIERlZmF1bHQ9IjEiICAgICBNYXg9IjEwMDAwIiAgTWluPSIxZS0wNiIgIERpZ2l0PSI2IiAgRGVzYz0id2F0ZXIgdmlzY29zaXR5IiAvPg0KICAgIDxQYXJhSXRlbSBOYW1lPSJDdGkiIEFsaWFzPSLnu7zlkIjljovnvKnns7vmlbAiICAgVW5pdD0iMS9NUGEiIERlZmF1bHQ9IjAuMDAxIiBNYXg9IjEwIiAgICAgTWluPSIxZS0zMCIgIERpZ2l0PSIxMCIgU2NpZW50aWZpYz0iMSIgRGVzYz0idG90YWwgY29tcHJlc3NpYmlsaXR5IiAvPg0KICAgIDxQYXJhSXRlbSBOYW1lPSJDZiIgIEFsaWFzPSLlsqnnn7PljovnvKnns7vmlbAiICAgVW5pdD0iMS9NUGEiIERlZmF1bHQ9IjAuMDAwMSIgTWF4PSIxMCIgICAgTWluPSIxZS0zMCIgIERpZ2l0PSIxMCIgU2NpZW50aWZpYz0iMSIgRGVzYz0icm9jayBjb21wcmVzc2liaWxpdHkiIC8+DQogICAgPFBhcmFJdGVtIE5hbWU9IlNvaSIgQWxpYXM9IuWIneWni+WQq+ayuemlseWSjOW6piIgVW5pdD0iIiAgICAgIERlZmF1bHQ9IjAuOCIgICBNYXg9IjEiICAgICAgTWluPSIwIiAgICAgIERpZ2l0PSI2IiAgRGVzYz0iaW5pdGlhbCBvaWwgc2F0dXJhdGlvbiIgLz4NCiAgICA8UGFyYUl0ZW0gTmFtZT0iU2dpIiBBbGlhcz0i5Yid5aeL5ZCr5rCU6aWx5ZKM5bqmIiBVbml0PSIiICAgICAgRGVmYXVsdD0iMCIgICAgIE1heD0iMSIgICAgICBNaW49IjAiICAgICAgRGlnaXQ9IjYiICBEZXNjPSJpbml0aWFsIGdhcyBzYXR1cmF0aW9uIiAvPg0KICAgIDxQYXJhSXRlbSBOYW1lPSJTd2kiIEFsaWFzPSLliJ3lp4vlkKvmsLTppbHlkozluqYiIFVuaXQ9IiIgICAgICBEZWZhdWx0PSIwLjIiICAgTWF4PSIxIiAgICAgIE1pbj0iMCIgICAgICBEaWdpdD0iNiIgIERlc2M9ImluaXRpYWwgd2F0ZXIgc2F0dXJhdGlvbiIgLz4NCiAgPC9QYXJhR3JvdXA+DQoNCiAgPFBhcmFHcm91cCBOYW1lPSIiIEFsaWFzPSLkupXlj4LmlbAiPg0KICAgIDxQYXJhSXRlbSBOYW1lPSJXX1giICAgIEFsaWFzPSJY5Z2Q5qCHIiAgICAgICBVbml0PSJtIiAgICBEZWZhdWx0PSIwIiAgICAgTWF4PSIxMDAwMCIgIE1pbj0iLTEwMDAwIiBEaWdpdD0iNiIgIERlc2M9IndlbGwgWCBjb29yZGluYXRlIiAvPg0KICAgIDxQYXJhSXRlbSBOYW1lPSJXX1kiICAgIEFsaWFzPSJZ5Z2Q5qCHIiAgICAgICBVbml0PSJtIiAgICBEZWZhdWx0PSIwIiAgICAgTWF4PSIxMDAwMCIgIE1pbj0iLTEwMDAwIiBEaWdpdD0iNiIgIERlc2M9IndlbGwgWSBjb29yZGluYXRlIiAvPg0KICAgIDxQYXJhSXRlbSBOYW1lPSJXX1J3IiAgIEFsaWFzPSLkupXnrZLljYrlvoQiICAgIFVuaXQ9Im0iICAgIERlZmF1bHQ9IjAuMSIgICBNYXg9IjEwIiAgICAgTWluPSIwLjAwMSIgIERpZ2l0PSI2IiAgRGVzYz0id2VsbGJvcmUgcmFkaXVzIiAvPg0KICAgIDxQYXJhSXRlbSBOYW1lPSJXX1NraW4iIEFsaWFzPSLooajnmq7ns7vmlbAiICAgIFVuaXQ9IiIgICAgIERlZmF1bHQ9IjAiICAgICBNYXg9IjEwMDAiICAgTWluPSItMTAwIiAgIERpZ2l0PSI2IiAgRGVzYz0ic2tpbiBmYWN0b3IiIC8+DQogICAgPFBhcmFJdGVtIE5hbWU9IldfQyIgICAgQWxpYXM9IuS6leetkuWCqOmbhuezu+aVsCIgVW5pdD0ibV4zL01QYSIgRGVmYXVsdD0iMCIgTWF4PSIxMDAwIiAgIE1pbj0iMCIgICAgICBEaWdpdD0iNiIgIERlc2M9IndlbGxib3JlIHN0b3JhZ2UgY29lZmZpY2llbnQiIC8+DQogICAgPFBhcmFJdGVtIE5hbWU9IldfV2VsbExlbmd0aCIgICAgICAgICBBbGlhcz0i5rC05bmz5q616ZW/5bqmIiAgIFVuaXQ9Im0iICAgIERlZmF1bHQ9IjIwMCIgIE1heD0iMTAwMDAiIE1pbj0iMWUtMDUiIERpZ2l0PSI2IiBEZXNjPSJob3Jpem9udGFsIHdlbGwgbGVuZ3RoIiAvPg0KICAgIDxQYXJhSXRlbSBOYW1lPSJXX0RyYWluQW5nbGUiICAgICAgICAgQWxpYXM9IuaOkuawtOinkuW6piIgICAgIFVuaXQ9ImRlZyIgIERlZmF1bHQ9IjAiICAgIE1heD0iMzYwIiAgIE1pbj0iLTM2MCIgIERpZ2l0PSI2IiBEZXNjPSJob3Jpem9udGFsIHdlbGwgZHJhaW4gYW5nbGUiIC8+DQogICAgPFBhcmFJdGVtIE5hbWU9IldfTnVtYmVyT2ZGcmFjdHVyZXMiICBBbGlhcz0i6KOC57yd5pWw6YePIiAgICAgVW5pdD0iIiAgICAgRGVmYXVsdD0iMTUiICAgTWF4PSIxMDAwIiAgTWluPSIyIiAgICAgRGlnaXQ9IjAiIERlc2M9Im51bWJlciBvZiBmcmFjdHVyZXMiIC8+DQogICAgPFBhcmFJdGVtIE5hbWU9IldfRnJhY3R1cmVIYWxmTGVuZ3RoIiBBbGlhcz0i6KOC57yd5Y2K6ZW/IiAgICAgVW5pdD0ibSIgICAgRGVmYXVsdD0iNTAiICAgTWF4PSIxMDAwMCIgTWluPSIxZS0wNSIgRGlnaXQ9IjYiIERlc2M9ImZyYWN0dXJlIGhhbGYtbGVuZ3RoIiAvPg0KICAgIDxQYXJhSXRlbSBOYW1lPSJXX0ZyYWN0dXJlQW5nbGUiICAgICAgQWxpYXM9Iuijgue8neinkuW6piIgICAgIFVuaXQ9ImRlZyIgIERlZmF1bHQ9IjkwIiAgIE1heD0iMzYwIiAgIE1pbj0iLTM2MCIgIERpZ2l0PSI2IiBEZXNjPSJmcmFjdHVyZSBhbmdsZSIgLz4NCiAgICA8UGFyYUl0ZW0gTmFtZT0iV19EZmMiICAgICAgICAgICAgICAgIEFsaWFzPSLoo4LnvJ3lr7zmtYHog73lipsiIFVuaXQ9Im1ELm0iIERlZmF1bHQ9IjEwMDAiIE1heD0iMWUrMzAiIE1pbj0iMCIgICAgIERpZ2l0PSI2IiBEZXNjPSJmcmFjdHVyZSBjb25kdWN0aXZpdHkiIC8+DQogIDwvUGFyYUdyb3VwPg0KDQogIDxQYXJhR3JvdXAgTmFtZT0iIiBBbGlhcz0i54us56uL6KOC57yd5Y+C5pWwIj4NCiAgICA8UGFyYUl0ZW0gTmFtZT0iRl9YMCIgQWxpYXM9Iui1t+eCuVgwIiAgIFVuaXQ9Im0iICAgIERlZmF1bHQ9IjAiIE1heD0iMTAwMDAiIE1pbj0iLTEwMDAwIiBEaWdpdD0iNiIgRGVzYz0iZnJhY3R1cmUgc3RhcnQgWCBjb29yZGluYXRlIiAvPg0KICAgIDxQYXJhSXRlbSBOYW1lPSJGX1kwIiBBbGlhcz0i6LW354K5WTAiICAgVW5pdD0ibSIgICAgRGVmYXVsdD0iMCIgTWF4PSIxMDAwMCIgTWluPSItMTAwMDAiIERpZ2l0PSI2IiBEZXNjPSJmcmFjdHVyZSBzdGFydCBZIGNvb3JkaW5hdGUiIC8+DQogICAgPFBhcmFJdGVtIE5hbWU9IkZfWDEiIEFsaWFzPSLnu4jngrlYMSIgICBVbml0PSJtIiAgICBEZWZhdWx0PSIwIiBNYXg9IjEwMDAwIiBNaW49Ii0xMDAwMCIgRGlnaXQ9IjYiIERlc2M9ImZyYWN0dXJlIGVuZCBYIGNvb3JkaW5hdGUiIC8+DQogICAgPFBhcmFJdGVtIE5hbWU9IkZfWTEiIEFsaWFzPSLnu4jngrlZMSIgICBVbml0PSJtIiAgICBEZWZhdWx0PSIwIiBNYXg9IjEwMDAwIiBNaW49Ii0xMDAwMCIgRGlnaXQ9IjYiIERlc2M9ImZyYWN0dXJlIGVuZCBZIGNvb3JkaW5hdGUiIC8+DQogICAgPFBhcmFJdGVtIE5hbWU9IkZfRkMiIEFsaWFzPSLlr7zmtYHog73lipsiIFVuaXQ9Im1ELm0iIERlZmF1bHQ9IjEiIE1heD0iMWUrMzAiIE1pbj0iMCIgICAgICBEaWdpdD0iNiIgRGVzYz0iZnJhY3R1cmUgY29uZHVjdGl2aXR5IiAvPg0KICAgIDxQYXJhSXRlbSBOYW1lPSJGX0RXIiBBbGlhcz0i6KOC57yd5a695bqm5Y+C5pWwIiBVbml0PSIiIERlZmF1bHQ9IjEiIE1heD0iMWUrMzAiIE1pbj0iMCIgRGlnaXQ9IjYiIERlc2M9ImZyYWN0dXJlIHdpZHRoIHBhcmFtZXRlciIgLz4NCiAgPC9QYXJhR3JvdXA+DQoNCiAgPFBhcmFHcm91cCBOYW1lPSIiIEFsaWFzPSLmlq3lsYLlj4LmlbAiPg0KICAgIDxQYXJhSXRlbSBOYW1lPSJGVF9YMCIgQWxpYXM9Iui1t+eCuVgwIiBVbml0PSJtIiBEZWZhdWx0PSIwIiBNYXg9IjEwMDAwIiBNaW49Ii0xMDAwMCIgRGlnaXQ9IjYiIERlc2M9ImZhdWx0IHN0YXJ0IFggY29vcmRpbmF0ZSIgLz4NCiAgICA8UGFyYUl0ZW0gTmFtZT0iRlRfWTAiIEFsaWFzPSLotbfngrlZMCIgVW5pdD0ibSIgRGVmYXVsdD0iMCIgTWF4PSIxMDAwMCIgTWluPSItMTAwMDAiIERpZ2l0PSI2IiBEZXNjPSJmYXVsdCBzdGFydCBZIGNvb3JkaW5hdGUiIC8+DQogICAgPFBhcmFJdGVtIE5hbWU9IkZUX1gxIiBBbGlhcz0i57uI54K5WDEiIFVuaXQ9Im0iIERlZmF1bHQ9IjAiIE1heD0iMTAwMDAiIE1pbj0iLTEwMDAwIiBEaWdpdD0iNiIgRGVzYz0iZmF1bHQgZW5kIFggY29vcmRpbmF0ZSIgLz4NCiAgICA8UGFyYUl0ZW0gTmFtZT0iRlRfWTEiIEFsaWFzPSLnu4jngrlZMSIgVW5pdD0ibSIgRGVmYXVsdD0iMCIgTWF4PSIxMDAwMCIgTWluPSItMTAwMDAiIERpZ2l0PSI2IiBEZXNjPSJmYXVsdCBlbmQgWSBjb29yZGluYXRlIiAvPg0KICAgIDxQYXJhSXRlbSBOYW1lPSJGVF9MZWFrYWdlIiBBbGlhcz0i5rOE5ryP57O75pWwIiBVbml0PSIiIERlZmF1bHQ9IjEiIE1heD0iMWUrMzAiIE1pbj0iMCIgRGlnaXQ9IjYiIERlc2M9ImZhdWx0IGxlYWthZ2UgY29lZmZpY2llbnQiIC8+DQogIDwvUGFyYUdyb3VwPg0KDQogIDxQYXJhR3JvdXAgTmFtZT0iIiBBbGlhcz0i55+p5b2i6L6555WM5Y+C5pWwIj4NCiAgICA8UGFyYUl0ZW0gTmFtZT0iQlJfWE1pbiIgQWxpYXM9IuW3pui+ueeVjFgiIFVuaXQ9Im0iIERlZmF1bHQ9IjAiIE1heD0iMTAwMDAiIE1pbj0iLTEwMDAwIiBEaWdpdD0iNiIgRGVzYz0icmVjdGFuZ2xlIGJvdW5kYXJ5IG1pbmltdW0gWCIgLz4NCiAgICA8UGFyYUl0ZW0gTmFtZT0iQlJfWU1pbiIgQWxpYXM9IuS4i+i+ueeVjFkiIFVuaXQ9Im0iIERlZmF1bHQ9IjAiIE1heD0iMTAwMDAiIE1pbj0iLTEwMDAwIiBEaWdpdD0iNiIgRGVzYz0icmVjdGFuZ2xlIGJvdW5kYXJ5IG1pbmltdW0gWSIgLz4NCiAgICA8UGFyYUl0ZW0gTmFtZT0iQlJfWE1heCIgQWxpYXM9IuWPs+i+ueeVjFgiIFVuaXQ9Im0iIERlZmF1bHQ9IjAiIE1heD0iMTAwMDAiIE1pbj0iLTEwMDAwIiBEaWdpdD0iNiIgRGVzYz0icmVjdGFuZ2xlIGJvdW5kYXJ5IG1heGltdW0gWCIgLz4NCiAgICA8UGFyYUl0ZW0gTmFtZT0iQlJfWU1heCIgQWxpYXM9IuS4iui+ueeVjFkiIFVuaXQ9Im0iIERlZmF1bHQ9IjAiIE1heD0iMTAwMDAiIE1pbj0iLTEwMDAwIiBEaWdpdD0iNiIgRGVzYz0icmVjdGFuZ2xlIGJvdW5kYXJ5IG1heGltdW0gWSIgLz4NCiAgPC9QYXJhR3JvdXA+DQoNCiAgPFBhcmFHcm91cCBOYW1lPSIiIEFsaWFzPSLlnIblvaLovrnnlYzlj4LmlbAiPg0KICAgIDxQYXJhSXRlbSBOYW1lPSJCQ19DZW50ZXJYIiBBbGlhcz0i5ZyG5b+DWCIgVW5pdD0ibSIgRGVmYXVsdD0iMCIgTWF4PSIxMDAwMCIgTWluPSItMTAwMDAiIERpZ2l0PSI2IiBEZXNjPSJjaXJjbGUgYm91bmRhcnkgY2VudGVyIFgiIC8+DQogICAgPFBhcmFJdGVtIE5hbWU9IkJDX0NlbnRlclkiIEFsaWFzPSLlnIblv4NZIiBVbml0PSJtIiBEZWZhdWx0PSIwIiBNYXg9IjEwMDAwIiBNaW49Ii0xMDAwMCIgRGlnaXQ9IjYiIERlc2M9ImNpcmNsZSBib3VuZGFyeSBjZW50ZXIgWSIgLz4NCiAgICA8UGFyYUl0ZW0gTmFtZT0iQkNfUmFkaXVzIiAgQWxpYXM9IuWNiuW+hCIgIFVuaXQ9Im0iIERlZmF1bHQ9IjEiIE1heD0iMTAwMDAiIE1pbj0iMWUtMDUiICBEaWdpdD0iNiIgRGVzYz0iY2lyY2xlIGJvdW5kYXJ5IHJhZGl1cyIgLz4NCiAgPC9QYXJhR3JvdXA+DQoNCiAgPFBhcmFHcm91cCBOYW1lPSIiIEFsaWFzPSLlpJrovrnlvaLovrnnlYzngrnlj4LmlbAiPg0KICAgIDxQYXJhSXRlbSBOYW1lPSJCUF9YIiBBbGlhcz0iWOWdkOaghyIgVW5pdD0ibSIgRGVmYXVsdD0iMCIgTWF4PSIxMDAwMCIgTWluPSItMTAwMDAiIERpZ2l0PSI2IiBEZXNjPSJwb2x5Z29uIGJvdW5kYXJ5IHZlcnRleCBYIiAvPg0KICAgIDxQYXJhSXRlbSBOYW1lPSJCUF9ZIiBBbGlhcz0iWeWdkOaghyIgVW5pdD0ibSIgRGVmYXVsdD0iMCIgTWF4PSIxMDAwMCIgTWluPSItMTAwMDAiIERpZ2l0PSI2IiBEZXNjPSJwb2x5Z29uIGJvdW5kYXJ5IHZlcnRleCBZIiAvPg0KICA8L1BhcmFHcm91cD4NCg0KICA8UGFyYUdyb3VwIE5hbWU9IiIgQWxpYXM9IuWMuuWfn+WPguaVsCI+DQogICAgPFBhcmFJdGVtIE5hbWU9IlJfTGVha2FnZSIgQWxpYXM9IuazhOmcsuezu+aVsCIgVW5pdD0iIiBEZWZhdWx0PSIxIiBNYXg9IjFlKzMwIiBNaW49IjAiIERpZ2l0PSI2IiBEZXNjPSJyZWdpb24gbGVha2FnZSBjb2VmZmljaWVudCIgLz4NCiAgPC9QYXJhR3JvdXA+DQoNCiAgPFBhcmFHcm91cCBOYW1lPSIiIEFsaWFzPSLmoIforrDljLrln5/lj4LmlbAiPg0KICAgIDxQYXJhSXRlbSBOYW1lPSJSTV9Db21XIiAgICAgICBBbGlhcz0i5YKo6IO95q+UIiBVbml0PSIiIERlZmF1bHQ9IjEiIE1heD0iMSIgICAgTWluPSIwIiAgICAgRGlnaXQ9IjYiIERlc2M9InN0b3JhZ2UgcmF0aW8iIC8+DQogICAgPFBhcmFJdGVtIE5hbWU9IlJNX0NvbUtyIiAgICAgIEFsaWFzPSLmtYHluqbmr5QiIFVuaXQ9IiIgRGVmYXVsdD0iMSIgTWF4PSIxMDAwIiBNaW49IjAuMDAxIiBEaWdpdD0iNiIgRGVzYz0ibW9iaWxpdHkgcmF0aW8iIC8+DQogICAgPFBhcmFJdGVtIE5hbWU9IlJNX05ldFRvR3Jvc3MiIEFsaWFzPSLlh4Dmr5vmr5QiIFVuaXQ9IiIgRGVmYXVsdD0iMSIgTWF4PSIxIiAgICBNaW49IjAiICAgICBEaWdpdD0iNiIgRGVzYz0ibmV0LXRvLWdyb3NzIiAvPg0KICA8L1BhcmFHcm91cD4NCg0KICA8IS0tIOe7k+aenOmdouadv+WPguaVsOWPqueUsSByZWJ1aWxkUmVzdWx0UGFyYXMoKSDpgInmi6nvvIzkuI3kvJrlh7rnjrDlnKjlt6bkvqfpnaLmnb/kuK3jgIIgLS0+DQogIDxQYXJhR3JvdXAgTmFtZT0iIiBBbGlhcz0i57uT5p6c5Y+C5pWwIj4NCiAgICA8UGFyYUl0ZW0gTmFtZT0iUmVzdWx0X1dfUnciICAgQWxpYXM9IuS6leW+hCIgICAgICAgICBVbml0PSJtIiAgICAgIERlZmF1bHQ9IjAuMSIgICAgTWF4PSIxMCIgICAgTWluPSIwLjAwMSIgIERpZ2l0PSI2IiAgRGVzYz0icmVzdWx0IHdlbGxib3JlIHJhZGl1cyIgLz4NCiAgICA8UGFyYUl0ZW0gTmFtZT0iUmVzdWx0X1dfRGZjIiAgQWxpYXM9Iuijgue8neWvvOa1geiDveWKmyIgVW5pdD0ibUQubSIgICBEZWZhdWx0PSIxMDAwIiAgIE1heD0iMWUrMzAiIE1pbj0iMCIgICAgICBEaWdpdD0iNiIgIERlc2M9InJlc3VsdCBmcmFjdHVyZSBjb25kdWN0aXZpdHkiIC8+DQogICAgPFBhcmFJdGVtIE5hbWU9IlJlc3VsdF9XX1NraW4iIEFsaWFzPSLooajnmq7ns7vmlbAiICAgICBVbml0PSIiICAgICAgIERlZmF1bHQ9IjAiICAgICAgTWF4PSIxMDAwIiAgTWluPSItMTAwIiAgIERpZ2l0PSI2IiAgRGVzYz0icmVzdWx0IHNraW4gZmFjdG9yIiAvPg0KICAgIDxQYXJhSXRlbSBOYW1lPSJSZXN1bHRfV19DIiAgICBBbGlhcz0i5LqV562S5YKo6ZuG57O75pWwIiBVbml0PSJtXjMvTVBhIiBEZWZhdWx0PSIwIiAgICAgIE1heD0iMTAwMCIgIE1pbj0iMCIgICAgICBEaWdpdD0iNiIgIERlc2M9InJlc3VsdCB3ZWxsYm9yZSBzdG9yYWdlIGNvZWZmaWNpZW50IiAvPg0KDQogICAgPFBhcmFJdGVtIE5hbWU9IlJlc3VsdF9QaSIgIEFsaWFzPSLliJ3lp4vlnLDlsYLljovlipsiICAgVW5pdD0iTVBhIiAgIERlZmF1bHQ9IjQwIiAgICAgTWF4PSI1MDAiICAgTWluPSIwLjEiICAgRGlnaXQ9IjYiICBEZXNjPSJyZXN1bHQgaW5pdGlhbCBmb3JtYXRpb24gcHJlc3N1cmUiIC8+DQogICAgPFBhcmFJdGVtIE5hbWU9IlJlc3VsdF9LIiAgIEFsaWFzPSLmuJfpgI/njociICAgICAgICAgVW5pdD0ibUQiICAgIERlZmF1bHQ9IjI1IiAgICAgTWF4PSIxMDAwMCIgTWluPSIwIiAgICAgRGlnaXQ9IjYiICBEZXNjPSJyZXN1bHQgcGVybWVhYmlsaXR5IiAvPg0KICAgIDxQYXJhSXRlbSBOYW1lPSJSZXN1bHRfaCIgICBBbGlhcz0i5YKo5bGC5Y6a5bqmIiAgICAgICBVbml0PSJtIiAgICAgRGVmYXVsdD0iMTAiICAgICBNYXg9IjEwMDAwIiBNaW49IjFlLTA1IiBEaWdpdD0iNiIgIERlc2M9InJlc3VsdCByZXNlcnZvaXIgdGhpY2tuZXNzIiAvPg0KICAgIDxQYXJhSXRlbSBOYW1lPSJSZXN1bHRfcGhpIiBBbGlhcz0i5a2U6ZqZ5bqmIiAgICAgICAgIFVuaXQ9IiIgICAgICBEZWZhdWx0PSIwLjEiICAgIE1heD0iMSIgICAgIE1pbj0iMWUtMDUiIERpZ2l0PSI2IiAgRGVzYz0icmVzdWx0IHBvcm9zaXR5IiAvPg0KICAgIDxQYXJhSXRlbSBOYW1lPSJSZXN1bHRfQ3RpIiBBbGlhcz0i57u85ZCI5Y6L57yp57O75pWwIiAgIFVuaXQ9IjEvTVBhIiBEZWZhdWx0PSIwLjAwMSIgIE1heD0iMTAiICAgIE1pbj0iMWUtMzAiIERpZ2l0PSIxMCIgU2NpZW50aWZpYz0iMSIgRGVzYz0icmVzdWx0IHRvdGFsIGNvbXByZXNzaWJpbGl0eSIgLz4NCiAgICA8UGFyYUl0ZW0gTmFtZT0iUmVzdWx0X0NmIiAgQWxpYXM9IuWyqeefs+WOi+e8qeezu+aVsCIgICBVbml0PSIxL01QYSIgRGVmYXVsdD0iMC4wMDAxIiBNYXg9IjEwIiAgICBNaW49IjFlLTMwIiBEaWdpdD0iMTAiIFNjaWVudGlmaWM9IjEiIERlc2M9InJlc3VsdCByb2NrIGNvbXByZXNzaWJpbGl0eSIgLz4NCiAgICA8UGFyYUl0ZW0gTmFtZT0iUmVzdWx0X1NvaSIgQWxpYXM9IuWIneWni+WQq+ayuemlseWSjOW6piIgVW5pdD0iIiAgICAgIERlZmF1bHQ9IjAuOCIgICAgTWF4PSIxIiAgICAgTWluPSIwIiAgICAgRGlnaXQ9IjYiICBEZXNjPSJyZXN1bHQgaW5pdGlhbCBvaWwgc2F0dXJhdGlvbiIgLz4NCiAgICA8UGFyYUl0ZW0gTmFtZT0iUmVzdWx0X1NnaSIgQWxpYXM9IuWIneWni+WQq+awlOmlseWSjOW6piIgVW5pdD0iIiAgICAgIERlZmF1bHQ9IjAiICAgICAgTWF4PSIxIiAgICAgTWluPSIwIiAgICAgRGlnaXQ9IjYiICBEZXNjPSJyZXN1bHQgaW5pdGlhbCBnYXMgc2F0dXJhdGlvbiIgLz4NCiAgICA8UGFyYUl0ZW0gTmFtZT0iUmVzdWx0X1N3aSIgQWxpYXM9IuWIneWni+WQq+awtOmlseWSjOW6piIgVW5pdD0iIiAgICAgIERlZmF1bHQ9IjAuMiIgICAgTWF4PSIxIiAgICAgTWluPSIwIiAgICAgRGlnaXQ9IjYiICBEZXNjPSJyZXN1bHQgaW5pdGlhbCB3YXRlciBzYXR1cmF0aW9uIiAvPg0KDQogICAgPFBhcmFJdGVtIE5hbWU9IlJlc3VsdF9CbyIgICBBbGlhcz0i5rK55L2T56ev57O75pWwIiBVbml0PSIiICAgICAgRGVmYXVsdD0iMSIgTWF4PSIxZSszMCIgTWluPSIwIiAgICAgRGlnaXQ9IjYiICBEZXNjPSJyZXN1bHQgb2lsIGZvcm1hdGlvbiB2b2x1bWUgZmFjdG9yIiAvPg0KICAgIDxQYXJhSXRlbSBOYW1lPSJSZXN1bHRfTWl1byIgQWxpYXM9IuayueebuOm7j+W6piIgICBVbml0PSJtUGEucyIgRGVmYXVsdD0iMSIgTWF4PSIxZSszMCIgTWluPSIxZS0zMCIgRGlnaXQ9IjYiICBEZXNjPSJyZXN1bHQgb2lsIHZpc2Nvc2l0eSIgLz4NCiAgICA8UGFyYUl0ZW0gTmFtZT0iUmVzdWx0X0NvIiAgIEFsaWFzPSLmsrnljovnvKnns7vmlbAiIFVuaXQ9IjEvTVBhIiBEZWZhdWx0PSIwIiBNYXg9IjFlKzMwIiBNaW49IjAiICAgIERpZ2l0PSIxMCIgU2NpZW50aWZpYz0iMSIgRGVzYz0icmVzdWx0IG9pbCBjb21wcmVzc2liaWxpdHkiIC8+DQogICAgPFBhcmFJdGVtIE5hbWU9IlJlc3VsdF9CdyIgICBBbGlhcz0i5rC05L2T56ev57O75pWwIiBVbml0PSJtMy9tMyIgRGVmYXVsdD0iMSIgTWF4PSIxZSszMCIgTWluPSIwIiAgICAgRGlnaXQ9IjYiICBEZXNjPSJyZXN1bHQgd2F0ZXIgZm9ybWF0aW9uIHZvbHVtZSBmYWN0b3IiIC8+DQogICAgPFBhcmFJdGVtIE5hbWU9IlJlc3VsdF9NaXV3IiBBbGlhcz0i5rC055u46buP5bqmIiAgIFVuaXQ9Im1QYS5zIiBEZWZhdWx0PSIxIiBNYXg9IjFlKzMwIiBNaW49IjFlLTMwIiBEaWdpdD0iNiIgIERlc2M9InJlc3VsdCB3YXRlciB2aXNjb3NpdHkiIC8+DQogICAgPFBhcmFJdGVtIE5hbWU9IlJlc3VsdF9DdyIgICBBbGlhcz0i5rC05Y6L57yp57O75pWwIiBVbml0PSIxL01QYSIgRGVmYXVsdD0iMCIgTWF4PSIxZSszMCIgTWluPSIwIiAgICBEaWdpdD0iMTAiIFNjaWVudGlmaWM9IjEiIERlc2M9InJlc3VsdCB3YXRlciBjb21wcmVzc2liaWxpdHkiIC8+DQogICAgPFBhcmFJdGVtIE5hbWU9IlJlc3VsdF9CZyIgICBBbGlhcz0i5rCU5L2T56ev57O75pWwIiBVbml0PSJtMy9tMyIgRGVmYXVsdD0iMSIgTWF4PSIxZSszMCIgTWluPSIwIiAgICAgRGlnaXQ9IjYiICBEZXNjPSJyZXN1bHQgZ2FzIGZvcm1hdGlvbiB2b2x1bWUgZmFjdG9yIiAvPg0KICAgIDxQYXJhSXRlbSBOYW1lPSJSZXN1bHRfTWl1ZyIgQWxpYXM9IuawlOebuOm7j+W6piIgICBVbml0PSJtUGEucyIgRGVmYXVsdD0iMSIgTWF4PSIxZSszMCIgTWluPSIxZS0zMCIgRGlnaXQ9IjYiICBEZXNjPSJyZXN1bHQgZ2FzIHZpc2Nvc2l0eSIgLz4NCiAgICA8UGFyYUl0ZW0gTmFtZT0iUmVzdWx0X0NnIiAgIEFsaWFzPSLmsJTljovnvKnns7vmlbAiIFVuaXQ9IjEvTVBhIiBEZWZhdWx0PSIwIiBNYXg9IjFlKzMwIiBNaW49IjAiICAgIERpZ2l0PSIxMCIgU2NpZW50aWZpYz0iMSIgRGVzYz0icmVzdWx0IGdhcyBjb21wcmVzc2liaWxpdHkiIC8+DQogIDwvUGFyYUdyb3VwPg0KDQo8L1Jvb3Q+DQo=
\ No newline at end of file
diff --git a/Bin/Config/Common/ModelParaDefinesNM_en.dat b/Bin/Config/Common/ModelParaDefinesNM_en.dat
index cac7ac4..29f5b0a 100644
--- a/Bin/Config/Common/ModelParaDefinesNM_en.dat
+++ b/Bin/Config/Common/ModelParaDefinesNM_en.dat
@@ -1 +1 @@
-PD94bWwgdmVycup_mpac2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4NCg0KPCEtLSoqKioqKioqKioqKiwzyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiotLT4NCjwhLS0gICAgVGhpcyBmaWxlIGRlZmluZXMgcGFyYW1ldGVycyBmb3IgdGhlIFdUQUkgTnVtZXJpY2FsIChOTSkgICAgLS0+DQo8IS0tICAgIG1vZHVsZS4gT25seSByZXNlcnZvaXIsIHdlbGwsIGFuZCBnZW9tZXRyeSBwYXJhbWV0ZXJzICAgICAgICAtLT4NCjwhLS0gICAgcmVxdWlyZWQgYnkgdGhlIFBFQkkgc29sdmVyIGFyZSBpbmNsdWRlZC4gICAgICAgICAgICAgICAgICAgIC0tPg0KPCEtLSAgICBEYXRlOiAyMDI2MDYxNSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0+DQo8IS0tKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi0tPg0KDQo8IS0tDQogICAgUGFyYW1ldGVyIHNjb3BlOiByZXNlcnZvaXIsIHdlbGwsIGFuZCBnZW9tZXRyeSBwYXJhbWV0ZXJzIHJlcXVpcmVkIGJ5IHRoZSBQRUJJIHNvbHZlcg0KICAgIENvcnJlc3BvbmRzIHRvIEhYX05XVE1fTU9ERUxfSU5QVVQgc3RydWN0IGZpZWxkcw0KICAgIExvYWRlZCB2aWEgX3BhcmFIZWxwZXItPmxvYWRQYXJhRGVmaW5lcygpLCBzS2V5ID0gc19ObV9TZXJpZQ0KLS0+DQoNCjxSb290Pg0KDQogIDxQYXJhR3JvdXAgTmFtZT0iIiBBbGlhcz0iUmVzZXJ2b2lyIFBhcmFtZXRlcnMiPg0KICAgIDxQYXJhSXRlbSBOYW1lPSJoIiAgIEFsaWFzPSJSZXNlcnZvaXIgVGhpY2tuZXNzIiAgICAgICAgIFVuaXQ9Im0iICAgICBEZWZhdWx0PSIxMCIgICAgTWF4PSIxMDAwMCIgIE1pbj0iMWUtMDUiICBEaWdpdD0iMyIgIERlc2M9InJlc2Vydm9pciB0aGlja25lc3MiIC8+DQogICAgPFBhcmFJdGVtIE5hbWU9IlBpIiAgQWxpYXM9IkluaXRpYWwgUHJlc3N1cmUiICAgICAgICAgICAgVW5pdD0iTVBhIiAgIERlZmF1bHQ9IjQwIiAgICBNYXg9IjUwMCIgICAgTWluPSIwLjEiICAgIERpZ2l0PSI1IiAgRGVzYz0iaW5pdGlhbCBmb3JtYXRpb24gcHJlc3N1cmUiIC8+DQogICAgPFBhcmFJdGVtIE5hbWU9IksiICAgQWxpYXM9IlBlcm1lYWJpbGl0eSIgICAgICAgICAgICAgICAgVW5pdD0iRGFyY3kiIERlZmF1bHQ9IjAuMDAxIiBNYXg9IjEwIiAgICAgTWluPSIwIiAgICAgIERpZ2l0PSI2IiAgRGVzYz0icGVybWVhYmlsaXR5IiAvPgogICAgPFBhcmFJdGVtIE5hbWU9InBoaSIgQWxpYXM9IlBvcm9zaXR5IiAgICAgICAgICAgICAgICAgICAgVW5pdD0iIiAgICAgIERlZmF1bHQ9IjAuMSIgICBNYXg9IjEiICAgICAgTWluPSIxZS0wNSIgIERpZ2l0PSI0IiAgRGVzYz0icG9yb3NpdHkiIC8+DQogICAgPFBhcmFJdGVtIE5hbWU9IkN0aSIgQWxpYXM9IlRvdGFsIENvbXByZXNzaWJpbGl0eSIgICAgICAgVW5pdD0iMS9NUGEiIERlZmF1bHQ9IjAuMDAxIiBNYXg9IjEwIiAgICAgTWluPSIxZS0zMCIgIERpZ2l0PSIxMCIgU2NpZW50aWZpYz0iMSIgRGVzYz0idG90YWwgY29tcHJlc3NpYmlsaXR5IiAvPg0KICAgIDxQYXJhSXRlbSBOYW1lPSJDZiIgIEFsaWFzPSJSb2NrIENvbXByZXNzaWJpbGl0eSIgICAgICAgIFVuaXQ9IjEvTVBhIiBEZWZhdWx0PSIwLjAwMDEiIE1heD0iMTAiICAgIE1pbj0iMWUtMzAiICBEaWdpdD0iMTAiIFNjaWVudGlmaWM9IjEiIERlc2M9InJvY2sgY29tcHJlc3NpYmlsaXR5IiAvPg0KICAgIDxQYXJhSXRlbSBOYW1lPSJTb2kiIEFsaWFzPSJJbml0aWFsIE9pbCBTYXR1cmF0aW9uIiAgICAgIFVuaXQ9IiIgICAgICBEZWZhdWx0PSIwLjgiICAgTWF4PSIxIiAgICAgIE1pbj0iMCIgICAgICBEaWdpdD0iNiIgIERlc2M9ImluaXRpYWwgb2lsIHNhdHVyYXRpb24iIC8+DQogICAgPFBhcmFJdGVtIE5hbWU9IlN3aSIgQWxpYXM9IkluaXRpYWwgV2F0ZXIgU2F0dXJhdGlvbiIgICAgVW5pdD0iIiAgICAgIERlZmF1bHQ9IjAuMiIgICBNYXg9IjEiICAgICAgTWluPSIwIiAgICAgIERpZ2l0PSI2IiAgRGVzYz0iaW5pdGlhbCB3YXRlciBzYXR1cmF0aW9uIiAvPg0KICA8L1BhcmFHcm91cD4NCg0KICA8UGFyYUdyb3VwIE5hbWU9IiIgQWxpYXM9IldlbGwgUGFyYW1ldGVycyI+DQogICAgPFBhcmFJdGVtIE5hbWU9IldfWCIgICAgQWxpYXM9IlggQ29vcmRpbmF0ZSIgICAgICAgICAgICBVbml0PSJtIiAgICAgIERlZmF1bHQ9IjAiICAgICBNYXg9IjEwMDAwIiAgTWluPSItMTAwMDAiIERpZ2l0PSI2IiAgRGVzYz0id2VsbCBYIGNvb3JkaW5hdGUiIC8+DQogICAgPFBhcmFJdGVtIE5hbWU9IldfWSIgICAgQWxpYXM9IlkgQ29vcmRpbmF0ZSIgICAgICAgICAgICBVbml0PSJtIiAgICAgIERlZmF1bHQ9IjAiICAgICBNYXg9IjEwMDAwIiAgTWluPSItMTAwMDAiIERpZ2l0PSI2IiAgRGVzYz0id2VsbCBZIGNvb3JkaW5hdGUiIC8+DQogICAgPFBhcmFJdGVtIE5hbWU9IldfUnciICAgQWxpYXM9IldlbGxib3JlIFJhZGl1cyIgICAgICAgICBVbml0PSJtIiAgICAgIERlZmF1bHQ9IjAuMSIgICBNYXg9IjEwIiAgICAgTWluPSIwLjAwMSIgIERpZ2l0PSI2IiAgRGVzYz0id2VsbGJvcmUgcmFkaXVzIiAvPg0KICAgIDxQYXJhSXRlbSBOYW1lPSJXX1NraW4iIEFsaWFzPSJTa2luIEZhY3RvciIgICAgICAgICAgICAgVW5pdD0iIiAgICAgICBEZWZhdWx0PSIwIiAgICAgTWF4PSIxMDAwIiAgIE1pbj0iLTEwMCIgICBEaWdpdD0iNiIgIERlc2M9InNraW4gZmFjdG9yIiAvPg0KICAgIDxQYXJhSXRlbSBOYW1lPSJXX0MiICAgIEFsaWFzPSJXZWxsYm9yZSBTdG9yYWdlIENvZWZmIiAgVW5pdD0ibV4zL01QYSIgRGVmYXVsdD0iMCIgICAgIE1heD0iMTAwMCIgICBNaW49IjAiICAgICAgRGlnaXQ9IjYiICBEZXNjPSJ3ZWxsYm9yZSBzdG9yYWdlIGNvZWZmaWNpZW50IiAvPg0KICAgIDxQYXJhSXRlbSBOYW1lPSJXX1dlbGxMZW5ndGgiICAgICAgICAgQWxpYXM9Ikhvcml6b250YWwgV2VsbCBMZW5ndGgiIFVuaXQ9Im0iICAgIERlZmF1bHQ9IjIwMCIgIE1heD0iMTAwMDAiIE1pbj0iMWUtMDUiIERpZ2l0PSI2IiBEZXNjPSJob3Jpem9udGFsIHdlbGwgbGVuZ3RoIiAvPg0KICAgIDxQYXJhSXRlbSBOYW1lPSJXX0RyYWluQW5nbGUiICAgICAgICAgQWxpYXM9IkRyYWluIEFuZ2xlIiAgICAgICAgICAgIFVuaXQ9Im8iICAgIERlZmF1bHQ9IjAiICAgIE1heD0iMzYwIiAgIE1pbj0iLTM2MCIgIERpZ2l0PSI2IiBEZXNjPSJob3Jpem9udGFsIHdlbGwgZHJhaW4gYW5nbGUiIC8+DQogICAgPFBhcmFJdGVtIE5hbWU9IldfTnVtYmVyT2ZGcmFjdHVyZXMiICBBbGlhcz0iTnVtYmVyIG9mIEZyYWN0dXJlcyIgICAgVW5pdD0iIiAgICAgRGVmYXVsdD0iMTUiICAgTWF4PSIxMDAwIiAgTWluPSIyIiAgICAgRGlnaXQ9IjAiIERlc2M9Im51bWJlciBvZiBmcmFjdHVyZXMiIC8+DQogICAgPFBhcmFJdGVtIE5hbWU9IldfRnJhY3R1cmVIYWxmTGVuZ3RoIiBBbGlhcz0iRnJhY3R1cmUgSGFsZi1MZW5ndGgiICAgVW5pdD0ibSIgICAgRGVmYXVsdD0iNTAiICAgTWF4PSIxMDAwMCIgTWluPSIxZS0wNSIgRGlnaXQ9IjYiIERlc2M9ImZyYWN0dXJlIGhhbGYtbGVuZ3RoIiAvPg0KICAgIDxQYXJhSXRlbSBOYW1lPSJXX0ZyYWN0dXJlQW5nbGUiICAgICAgQWxpYXM9IkZyYWN0dXJlIEFuZ2xlIiAgICAgICAgIFVuaXQ9Im8iICAgIERlZmF1bHQ9IjkwIiAgIE1heD0iMzYwIiAgIE1pbj0iLTM2MCIgIERpZ2l0PSI2IiBEZXNjPSJmcmFjdHVyZSBhbmdsZSIgLz4NCiAgICA8UGFyYUl0ZW0gTmFtZT0iV19EZmMiICAgICAgICAgICAgICAgIEFsaWFzPSJGcmFjdHVyZSBDb25kdWN0aXZpdHkiICBVbml0PSJtZC5tIiBEZWZhdWx0PSIxMDAwIiBNYXg9IjFlKzMwIiBNaW49IjAiICAgICBEaWdpdD0iNiIgRGVzYz0iZnJhY3R1cmUgY29uZHVjdGl2aXR5IiAvPg0KICA8L1BhcmFHcm91cD4NCg0KICA8UGFyYUdyb3VwIE5hbWU9IiIgQWxpYXM9IkluZGVwZW5kZW50IEZyYWN0dXJlIFBhcmFtZXRlcnMiPg0KICAgIDxQYXJhSXRlbSBOYW1lPSJGX1gwIiBBbGlhcz0iU3RhcnQgWDAiICAgICAgICAgICAgICBVbml0PSJtIiAgICBEZWZhdWx0PSIwIiBNYXg9IjEwMDAwIiBNaW49Ii0xMDAwMCIgRGlnaXQ9IjYiIERlc2M9ImZyYWN0dXJlIHN0YXJ0IFggY29vcmRpbmF0ZSIgLz4NCiAgICA8UGFyYUl0ZW0gTmFtZT0iRl9ZMCIgQWxpYXM9IlN0YXJ0IFkwIiAgICAgICAgICAgICAgVW5pdD0ibSIgICAgRGVmYXVsdD0iMCIgTWF4PSIxMDAwMCIgTWluPSItMTAwMDAiIERpZ2l0PSI2IiBEZXNjPSJmcmFjdHVyZSBzdGFydCBZIGNvb3JkaW5hdGUiIC8+DQogICAgPFBhcmFJdGVtIE5hbWU9IkZfWDEiIEFsaWFzPSJFbmQgWDEiICAgICAgICAgICAgICAgIFVuaXQ9Im0iICAgIERlZmF1bHQ9IjAiIE1heD0iMTAwMDAiIE1pbj0iLTEwMDAwIiBEaWdpdD0iNiIgRGVzYz0iZnJhY3R1cmUgZW5kIFggY29vcmRpbmF0ZSIgLz4NCiAgICA8UGFyYUl0ZW0gTmFtZT0iRl9ZMSIgQWxpYXM9IkVuZCBZMSIgICAgICAgICAgICAgICAgVW5pdD0ibSIgICAgRGVmYXVsdD0iMCIgTWF4PSIxMDAwMCIgTWluPSItMTAwMDAiIERpZ2l0PSI2IiBEZXNjPSJmcmFjdHVyZSBlbmQgWSBjb29yZGluYXRlIiAvPg0KICAgIDxQYXJhSXRlbSBOYW1lPSJGX0ZDIiBBbGlhcz0iRnJhY3R1cmUgQ29uZHVjdGl2aXR5IiBVbml0PSJtZC5tIiBEZWZhdWx0PSIxIiBNYXg9IjFlKzMwIiBNaW49IjAiICAgICAgRGlnaXQ9IjYiIERlc2M9ImZyYWN0dXJlIGNvbmR1Y3Rpdml0eSIgLz4NCiAgPC9QYXJhR3JvdXA+DQoNCiAgPFBhcmFHcm91cCBOYW1lPSIiIEFsaWFzPSJGYXVsdCBQYXJhbWV0ZXJzIj4NCiAgICA8UGFyYUl0ZW0gTmFtZT0iRlRfWDAiIEFsaWFzPSJTdGFydCBYMCIgVW5pdD0ibSIgRGVmYXVsdD0iMCIgTWF4PSIxMDAwMCIgTWluPSItMTAwMDAiIERpZ2l0PSI2IiBEZXNjPSJmYXVsdCBzdGFydCBYIGNvb3JkaW5hdGUiIC8+DQogICAgPFBhcmFJdGVtIE5hbWU9IkZUX1kwIiBBbGlhcz0iU3RhcnQgWTAiIFVuaXQ9Im0iIERlZmF1bHQ9IjAiIE1heD0iMTAwMDAiIE1pbj0iLTEwMDAwIiBEaWdpdD0iNiIgRGVzYz0iZmF1bHQgc3RhcnQgWSBjb29yZGluYXRlIiAvPg0KICAgIDxQYXJhSXRlbSBOYW1lPSJGVF9YMSIgQWxpYXM9IkVuZCBYMSIgVW5pdD0ibSIgRGVmYXVsdD0iMCIgTWF4PSIxMDAwMCIgTWluPSItMTAwMDAiIERpZ2l0PSI2IiBEZXNjPSJmYXVsdCBlbmQgWCBjb29yZGluYXRlIiAvPg0KICAgIDxQYXJhSXRlbSBOYW1lPSJGVF9ZMSIgQWxpYXM9IkVuZCBZMSIgVW5pdD0ibSIgRGVmYXVsdD0iMCIgTWF4PSIxMDAwMCIgTWluPSItMTAwMDAiIERpZ2l0PSI2IiBEZXNjPSJmYXVsdCBlbmQgWSBjb29yZGluYXRlIiAvPg0KICA8L1BhcmFHcm91cD4NCg0KICA8UGFyYUdyb3VwIE5hbWU9IiIgQWxpYXM9IlJlY3RhbmdsZSBCb3VuZGFyeSBQYXJhbWV0ZXJzIj4NCiAgICA8UGFyYUl0ZW0gTmFtZT0iQlJfWE1pbiIgQWxpYXM9IkxlZnQgQm91bmRhcnkgWCIgVW5pdD0ibSIgRGVmYXVsdD0iMCIgTWF4PSIxMDAwMCIgTWluPSItMTAwMDAiIERpZ2l0PSI2IiBEZXNjPSJyZWN0YW5nbGUgYm91bmRhcnkgbWluaW11bSBYIiAvPg0KICAgIDxQYXJhSXRlbSBOYW1lPSJCUl9ZTWluIiBBbGlhcz0iQm90dG9tIEJvdW5kYXJ5IFkiIFVuaXQ9Im0iIERlZmF1bHQ9IjAiIE1heD0iMTAwMDAiIE1pbj0iLTEwMDAwIiBEaWdpdD0iNiIgRGVzYz0icmVjdGFuZ2xlIGJvdW5kYXJ5IG1pbmltdW0gWSIgLz4NCiAgICA8UGFyYUl0ZW0gTmFtZT0iQlJfWE1heCIgQWxpYXM9IlJpZ2h0IEJvdW5kYXJ5IFgiIFVuaXQ9Im0iIERlZmF1bHQ9IjAiIE1heD0iMTAwMDAiIE1pbj0iLTEwMDAwIiBEaWdpdD0iNiIgRGVzYz0icmVjdGFuZ2xlIGJvdW5kYXJ5IG1heGltdW0gWCIgLz4NCiAgICA8UGFyYUl0ZW0gTmFtZT0iQlJfWU1heCIgQWxpYXM9IlRvcCBCb3VuZGFyeSBZIiBVbml0PSJtIiBEZWZhdWx0PSIwIiBNYXg9IjEwMDAwIiBNaW49Ii0xMDAwMCIgRGlnaXQ9IjYiIERlc2M9InJlY3RhbmdsZSBib3VuZGFyeSBtYXhpbXVtIFkiIC8+DQogIDwvUGFyYUdyb3VwPg0KDQogIDxQYXJhR3JvdXAgTmFtZT0iIiBBbGlhcz0iQ2lyY2xlIEJvdW5kYXJ5IFBhcmFtZXRlcnMiPg0KICAgIDxQYXJhSXRlbSBOYW1lPSJCQ19DZW50ZXJYIiBBbGlhcz0iQ2VudGVyIFgiIFVuaXQ9Im0iIERlZmF1bHQ9IjAiIE1heD0iMTAwMDAiIE1pbj0iLTEwMDAwIiBEaWdpdD0iNiIgRGVzYz0iY2lyY2xlIGJvdW5kYXJ5IGNlbnRlciBYIiAvPg0KICAgIDxQYXJhSXRlbSBOYW1lPSJCQ19DZW50ZXJZIiBBbGlhcz0iQ2VudGVyIFkiIFVuaXQ9Im0iIERlZmF1bHQ9IjAiIE1heD0iMTAwMDAiIE1pbj0iLTEwMDAwIiBEaWdpdD0iNiIgRGVzYz0iY2lyY2xlIGJvdW5kYXJ5IGNlbnRlciBZIiAvPg0KICAgIDxQYXJhSXRlbSBOYW1lPSJCQ19SYWRpdXMiICBBbGlhcz0iUmFkaXVzIiAgIFVuaXQ9Im0iIERlZmF1bHQ9IjEiIE1heD0iMTAwMDAiIE1pbj0iMWUtMDUiICBEaWdpdD0iNiIgRGVzYz0iY2lyY2xlIGJvdW5kYXJ5IHJhZGl1cyIgLz4NCiAgPC9QYXJhR3JvdXA+DQoNCiAgPFBhcmFHcm91cCBOYW1lPSIiIEFsaWFzPSJQb2x5Z29uIEJvdW5kYXJ5IFZlcnRleCBQYXJhbWV0ZXJzIj4NCiAgICA8UGFyYUl0ZW0gTmFtZT0iQlBfWCIgQWxpYXM9IlggQ29vcmRpbmF0ZSIgVW5pdD0ibSIgRGVmYXVsdD0iMCIgTWF4PSIxMDAwMCIgTWluPSItMTAwMDAiIERpZ2l0PSI2IiBEZXNjPSJwb2x5Z29uIGJvdW5kYXJ5IHZlcnRleCBYIiAvPg0KICAgIDxQYXJhSXRlbSBOYW1lPSJCUF9ZIiBBbGlhcz0iWSBDb29yZGluYXRlIiBVbml0PSJtIiBEZWZhdWx0PSIwIiBNYXg9IjEwMDAwIiBNaW49Ii0xMDAwMCIgRGlnaXQ9IjYiIERlc2M9InBvbHlnb24gYm91bmRhcnkgdmVydGV4IFkiIC8+DQogIDwvUGFyYUdyb3VwPg0KDQogIDxQYXJhR3JvdXAgTmFtZT0iIiBBbGlhcz0iUmVnaW9uIFBhcmFtZXRlcnMiPg0KICAgIDxQYXJhSXRlbSBOYW1lPSJSX0xlYWthZ2UiIEFsaWFzPSJMZWFrYWdlIENvZWZmaWNpZW50IiBVbml0PSIiIERlZmF1bHQ9IjEiIE1heD0iMWUrMzAiIE1pbj0iMCIgRGlnaXQ9IjYiIERlc2M9InJlZ2lvbiBsZWFrYWdlIGNvZWZmaWNpZW50IiAvPg0KICA8L1BhcmFHcm91cD4NCg0KICA8UGFyYUdyb3VwIE5hbWU9IiIgQWxpYXM9IlJlZ2lvbiBNYXJrIFBhcmFtZXRlcnMiPg0KICAgIDxQYXJhSXRlbSBOYW1lPSJSTV9Db21XIiAgICAgICBBbGlhcz0iU3RvcmFnZSBSYXRpbyIgVW5pdD0iIiBEZWZhdWx0PSIxIiBNYXg9IjEiICAgIE1pbj0iMCIgICAgIERpZ2l0PSI2IiBEZXNjPSJzdG9yYWdlIHJhdGlvIiAvPg0KICAgIDxQYXJhSXRlbSBOYW1lPSJSTV9Db21LciIgICAgICBBbGlhcz0iTW9iaWxpdHkgUmF0aW8iIFVuaXQ9IiIgRGVmYXVsdD0iMSIgTWF4PSIxMDAwIiBNaW49IjAuMDAxIiBEaWdpdD0iNiIgRGVzYz0ibW9iaWxpdHkgcmF0aW8iIC8+DQogICAgPFBhcmFJdGVtIE5hbWU9IlJNX05ldFRvR3Jvc3MiIEFsaWFzPSJOZXQtdG8tR3Jvc3MiIFVuaXQ9IiIgRGVmYXVsdD0iMSIgTWF4PSIxIiAgICBNaW49IjAiICAgICBEaWdpdD0iNiIgRGVzYz0ibmV0LXRvLWdyb3NzIiAvPg0KICA8L1BhcmFHcm91cD4NCg0KICA8IS0tIFJlc3VsdCBwYXJhbWV0ZXJzIGFyZSBzZWxlY3RlZCBvbmx5IGJ5IHJlYnVpbGRSZXN1bHRQYXJhcygpLiAtLT4NCiAgPFBhcmFHcm91cCBOYW1lPSIiIEFsaWFzPSJSZXN1bHQgUGFyYW1ldGVycyI+DQogICAgPFBhcmFJdGVtIE5hbWU9IlJlc3VsdF9XX1J3IiAgIEFsaWFzPSJXZWxsIFJhZGl1cyIgICAgICAgICAgICAgVW5pdD0ibSIgICAgICBEZWZhdWx0PSIwLjEiICAgIE1heD0iMTAiICAgIE1pbj0iMC4wMDEiICBEaWdpdD0iNiIgIERlc2M9InJlc3VsdCB3ZWxsYm9yZSByYWRpdXMiIC8+DQogICAgPFBhcmFJdGVtIE5hbWU9IlJlc3VsdF9XX0RmYyIgIEFsaWFzPSJGcmFjdHVyZSBDb25kdWN0aXZpdHkiICBVbml0PSJtZC5tIiAgIERlZmF1bHQ9IjEwMDAiICAgTWF4PSIxZSszMCIgTWluPSIwIiAgICAgIERpZ2l0PSI2IiAgRGVzYz0icmVzdWx0IGZyYWN0dXJlIGNvbmR1Y3Rpdml0eSIgLz4NCiAgICA8UGFyYUl0ZW0gTmFtZT0iUmVzdWx0X1dfU2tpbiIgQWxpYXM9IlNraW4gRmFjdG9yIiAgICAgICAgICAgIFVuaXQ9IiIgICAgICAgRGVmYXVsdD0iMCIgICAgICBNYXg9IjEwMDAiICBNaW49Ii0xMDAiICAgRGlnaXQ9IjYiICBEZXNjPSJyZXN1bHQgc2tpbiBmYWN0b3IiIC8+DQogICAgPFBhcmFJdGVtIE5hbWU9IlJlc3VsdF9XX0MiICAgIEFsaWFzPSJXZWxsYm9yZSBTdG9yYWdlIENvZWZmIiBVbml0PSJtXjMvTVBhIiBEZWZhdWx0PSIwIiAgICAgIE1heD0iMTAwMCIgIE1pbj0iMCIgICAgICBEaWdpdD0iNiIgIERlc2M9InJlc3VsdCB3ZWxsYm9yZSBzdG9yYWdlIGNvZWZmaWNpZW50IiAvPg0KDQogICAgPFBhcmFJdGVtIE5hbWU9IlJlc3VsdF9QaSIgIEFsaWFzPSJJbml0aWFsIEZvcm1hdGlvbiBQcmVzc3VyZSIgVW5pdD0iTVBhIiAgIERlZmF1bHQ9IjQwIiAgICAgTWF4PSI1MDAiICAgTWluPSIwLjEiICAgRGlnaXQ9IjYiICBEZXNjPSJyZXN1bHQgaW5pdGlhbCBmb3JtYXRpb24gcHJlc3N1cmUiIC8+DQogICAgPFBhcmFJdGVtIE5hbWU9IlJlc3VsdF9LIiAgIEFsaWFzPSJQZXJtZWFiaWxpdHkiICAgICAgICAgICAgICAgVW5pdD0iRGFyY3kiIERlZmF1bHQ9IjAuMDAxIiAgTWF4PSIxMCIgICAgTWluPSIwIiAgICAgRGlnaXQ9IjYiICBEZXNjPSJyZXN1bHQgcGVybWVhYmlsaXR5IiAvPgogICAgPFBhcmFJdGVtIE5hbWU9IlJlc3VsdF9oIiAgIEFsaWFzPSJSZXNlcnZvaXIgVGhpY2tuZXNzIiAgICAgICAgVW5pdD0ibSIgICAgIERlZmF1bHQ9IjEwIiAgICAgTWF4PSIxMDAwMCIgTWluPSIxZS0wNSIgRGlnaXQ9IjYiICBEZXNjPSJyZXN1bHQgcmVzZXJ2b2lyIHRoaWNrbmVzcyIgLz4NCiAgICA8UGFyYUl0ZW0gTmFtZT0iUmVzdWx0X3BoaSIgQWxpYXM9IlBvcm9zaXR5IiAgICAgICAgICAgICAgICAgICBVbml0PSIiICAgICAgRGVmYXVsdD0iMC4xIiAgICBNYXg9IjEiICAgICBNaW49IjFlLTA1IiBEaWdpdD0iNiIgIERlc2M9InJlc3VsdCBwb3Jvc2l0eSIgLz4NCiAgICA8UGFyYUl0ZW0gTmFtZT0iUmVzdWx0X0N0aSIgQWxpYXM9IlRvdGFsIENvbXByZXNzaWJpbGl0eSIgICAgICBVbml0PSIxL01QYSIgRGVmYXVsdD0iMC4wMDEiICBNYXg9IjEwIiAgICBNaW49IjFlLTMwIiBEaWdpdD0iMTAiIFNjaWVudGlmaWM9IjEiIERlc2M9InJlc3VsdCB0b3RhbCBjb21wcmVzc2liaWxpdHkiIC8+DQogICAgPFBhcmFJdGVtIE5hbWU9IlJlc3VsdF9DZiIgIEFsaWFzPSJSb2NrIENvbXByZXNzaWJpbGl0eSIgICAgICAgVW5pdD0iMS9NUGEiIERlZmF1bHQ9IjAuMDAwMSIgTWF4PSIxMCIgICAgTWluPSIxZS0zMCIgRGlnaXQ9IjEwIiBTY2llbnRpZmljPSIxIiBEZXNjPSJyZXN1bHQgcm9jayBjb21wcmVzc2liaWxpdHkiIC8+DQogICAgPFBhcmFJdGVtIE5hbWU9IlJlc3VsdF9Tb2kiIEFsaWFzPSJJbml0aWFsIE9pbCBTYXR1cmF0aW9uIiAgICAgVW5pdD0iIiAgICAgIERlZmF1bHQ9IjAuOCIgICAgTWF4PSIxIiAgICAgTWluPSIwIiAgICAgRGlnaXQ9IjYiICBEZXNjPSJyZXN1bHQgaW5pdGlhbCBvaWwgc2F0dXJhdGlvbiIgLz4NCiAgICA8UGFyYUl0ZW0gTmFtZT0iUmVzdWx0X1NnaSIgQWxpYXM9IkluaXRpYWwgR2FzIFNhdHVyYXRpb24iICAgICBVbml0PSIiICAgICAgRGVmYXVsdD0iMCIgICAgICBNYXg9IjEiICAgICBNaW49IjAiICAgICBEaWdpdD0iNiIgIERlc2M9InJlc3VsdCBpbml0aWFsIGdhcyBzYXR1cmF0aW9uIiAvPg0KICAgIDxQYXJhSXRlbSBOYW1lPSJSZXN1bHRfU3dpIiBBbGlhcz0iSW5pdGlhbCBXYXRlciBTYXR1cmF0aW9uIiAgIFVuaXQ9IiIgICAgICBEZWZhdWx0PSIwLjIiICAgIE1heD0iMSIgICAgIE1pbj0iMCIgICAgIERpZ2l0PSI2IiAgRGVzYz0icmVzdWx0IGluaXRpYWwgd2F0ZXIgc2F0dXJhdGlvbiIgLz4NCg0KICAgIDxQYXJhSXRlbSBOYW1lPSJSZXN1bHRfQm8iICAgQWxpYXM9Ik9pbCBGb3JtYXRpb24gVm9sdW1lIEZhY3RvciIgICBVbml0PSJtMy9tMyIgRGVmYXVsdD0iMSIgTWF4PSIxZSszMCIgTWluPSIwIiAgICAgRGlnaXQ9IjYiICBEZXNjPSJyZXN1bHQgb2lsIGZvcm1hdGlvbiB2b2x1bWUgZmFjdG9yIiAvPg0KICAgIDxQYXJhSXRlbSBOYW1lPSJSZXN1bHRfTWl1byIgQWxpYXM9Ik9pbCBWaXNjb3NpdHkiICAgICAgICAgICAgICAgICBVbml0PSJtUGEucyIgRGVmYXVsdD0iMSIgTWF4PSIxZSszMCIgTWluPSIxZS0zMCIgRGlnaXQ9IjYiICBEZXNjPSJyZXN1bHQgb2lsIHZpc2Nvc2l0eSIgLz4NCiAgICA8UGFyYUl0ZW0gTmFtZT0iUmVzdWx0X0NvIiAgIEFsaWFzPSJPaWwgQ29tcHJlc3NpYmlsaXR5IiAgICAgICAgICAgVW5pdD0iMS9NUGEiIERlZmF1bHQ9IjAiIE1heD0iMWUrMzAiIE1pbj0iMCIgICAgRGlnaXQ9IjEwIiBTY2llbnRpZmljPSIxIiBEZXNjPSJyZXN1bHQgb2lsIGNvbXByZXNzaWJpbGl0eSIgLz4NCiAgICA8UGFyYUl0ZW0gTmFtZT0iUmVzdWx0X0J3IiAgIEFsaWFzPSJXYXRlciBGb3JtYXRpb24gVm9sdW1lIEZhY3RvciIgVW5pdD0ibTMvbTMiIERlZmF1bHQ9IjEiIE1heD0iMWUrMzAiIE1pbj0iMCIgICAgIERpZ2l0PSI2IiAgRGVzYz0icmVzdWx0IHdhdGVyIGZvcm1hdGlvbiB2b2x1bWUgZmFjdG9yIiAvPg0KICAgIDxQYXJhSXRlbSBOYW1lPSJSZXN1bHRfTWl1dyIgQWxpYXM9IldhdGVyIFZpc2Nvc2l0eSIgICAgICAgICAgICAgICBVbml0PSJtUGEucyIgRGVmYXVsdD0iMSIgTWF4PSIxZSszMCIgTWluPSIxZS0zMCIgRGlnaXQ9IjYiICBEZXNjPSJyZXN1bHQgd2F0ZXIgdmlzY29zaXR5IiAvPg0KICAgIDxQYXJhSXRlbSBOYW1lPSJSZXN1bHRfQ3ciICAgQWxpYXM9IldhdGVyIENvbXByZXNzaWJpbGl0eSIgICAgICAgICBVbml0PSIxL01QYSIgRGVmYXVsdD0iMCIgTWF4PSIxZSszMCIgTWluPSIwIiAgICBEaWdpdD0iMTAiIFNjaWVudGlmaWM9IjEiIERlc2M9InJlc3VsdCB3YXRlciBjb21wcmVzc2liaWxpdHkiIC8+DQogICAgPFBhcmFJdGVtIE5hbWU9IlJlc3VsdF9CZyIgICBBbGlhcz0iR2FzIEZvcm1hdGlvbiBWb2x1bWUgRmFjdG9yIiAgIFVuaXQ9Im0zL20zIiBEZWZhdWx0PSIxIiBNYXg9IjFlKzMwIiBNaW49IjAiICAgICBEaWdpdD0iNiIgIERlc2M9InJlc3VsdCBnYXMgZm9ybWF0aW9uIHZvbHVtZSBmYWN0b3IiIC8+DQogICAgPFBhcmFJdGVtIE5hbWU9IlJlc3VsdF9NaXVnIiBBbGlhcz0iR2FzIFZpc2Nvc2l0eSIgICAgICAgICAgICAgICAgIFVuaXQ9Im1QYS5zIiBEZWZhdWx0PSIxIiBNYXg9IjFlKzMwIiBNaW49IjFlLTMwIiBEaWdpdD0iNiIgIERlc2M9InJlc3VsdCBnYXMgdmlzY29zaXR5IiAvPg0KICAgIDxQYXJhSXRlbSBOYW1lPSJSZXN1bHRfQ2ciICAgQWxpYXM9IkdhcyBDb21wcmVzc2liaWxpdHkiICAgICAgICAgICBVbml0PSIxL01QYSIgRGVmYXVsdD0iMCIgTWF4PSIxZSszMCIgTWluPSIwIiAgICBEaWdpdD0iMTAiIFNjaWVudGlmaWM9IjEiIERlc2M9InJlc3VsdCBnYXMgY29tcHJlc3NpYmlsaXR5IiAvPg0KICA8L1BhcmFHcm91cD4NCg0KPC9Sb290Pg0K
\ No newline at end of file
+PD94bWwgdmVycup_mpac2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4NCg0KPCEtLSoqKioqKioqKioqKiwzyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiotLT4NCjwhLS0gICAgVGhpcyBmaWxlIGRlZmluZXMgcGFyYW1ldGVycyBmb3IgdGhlIFdUQUkgTnVtZXJpY2FsIChOTSkgICAgLS0+DQo8IS0tICAgIG1vZHVsZS4gT25seSByZXNlcnZvaXIsIHdlbGwsIGFuZCBnZW9tZXRyeSBwYXJhbWV0ZXJzICAgICAgICAtLT4NCjwhLS0gICAgcmVxdWlyZWQgYnkgdGhlIFBFQkkgc29sdmVyIGFyZSBpbmNsdWRlZC4gICAgICAgICAgICAgICAgICAgIC0tPg0KPCEtLSAgICBEYXRlOiAyMDI2MDYxNSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgLS0+DQo8IS0tKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi0tPg0KDQo8IS0tDQogICAgUGFyYW1ldGVyIHNjb3BlOiByZXNlcnZvaXIsIHdlbGwsIGFuZCBnZW9tZXRyeSBwYXJhbWV0ZXJzIHJlcXVpcmVkIGJ5IHRoZSBQRUJJIHNvbHZlcg0KICAgIENvcnJlc3BvbmRzIHRvIEhYX05XVE1fTU9ERUxfSU5QVVQgc3RydWN0IGZpZWxkcw0KICAgIExvYWRlZCB2aWEgX3BhcmFIZWxwZXItPmxvYWRQYXJhRGVmaW5lcygpLCBzS2V5ID0gc19ObV9TZXJpZQ0KLS0+DQoNCjxSb290Pg0KDQogIDxQYXJhR3JvdXAgTmFtZT0iIiBBbGlhcz0iUmVzZXJ2b2lyIFBhcmFtZXRlcnMiPg0KICAgIDxQYXJhSXRlbSBOYW1lPSJoIiAgIEFsaWFzPSJSZXNlcnZvaXIgVGhpY2tuZXNzIiAgICAgICAgIFVuaXQ9Im0iICAgICBEZWZhdWx0PSIxMCIgICAgTWF4PSIxMDAwMCIgIE1pbj0iMWUtMDUiICBEaWdpdD0iMyIgIERlc2M9InJlc2Vydm9pciB0aGlja25lc3MiIC8+DQogICAgPFBhcmFJdGVtIE5hbWU9IlBpIiAgQWxpYXM9IkluaXRpYWwgUHJlc3N1cmUiICAgICAgICAgICAgVW5pdD0iTVBhIiAgIERlZmF1bHQ9IjQwIiAgICBNYXg9IjUwMCIgICAgTWluPSIwLjEiICAgIERpZ2l0PSI1IiAgRGVzYz0iaW5pdGlhbCBmb3JtYXRpb24gcHJlc3N1cmUiIC8+DQogICAgPFBhcmFJdGVtIE5hbWU9IksiICAgQWxpYXM9IlBlcm1lYWJpbGl0eSIgICAgICAgICAgICAgICAgVW5pdD0ibUQiICAgIERlZmF1bHQ9IjI1IiAgICBNYXg9IjEwMDAwIiAgTWluPSIwIiAgICAgIERpZ2l0PSI2IiAgRGVzYz0icGVybWVhYmlsaXR5IiAvPg0KICAgIDxQYXJhSXRlbSBOYW1lPSJwaGkiIEFsaWFzPSJQb3Jvc2l0eSIgICAgICAgICAgICAgICAgICAgIFVuaXQ9IiIgICAgICBEZWZhdWx0PSIwLjEiICAgTWF4PSIxIiAgICAgIE1pbj0iMWUtMDUiICBEaWdpdD0iNCIgIERlc2M9InBvcm9zaXR5IiAvPg0KICAgIDxQYXJhSXRlbSBOYW1lPSJCbyIgIEFsaWFzPSJPaWwgRm9ybWF0aW9uIFZvbHVtZSBGYWN0b3IiIFVuaXQ9IiIgICAgICBEZWZhdWx0PSIxLjIiICAgTWF4PSIxMCIgICAgIE1pbj0iMWUtMDYiICBEaWdpdD0iNiIgIERlc2M9Im9pbCBmb3JtYXRpb24gdm9sdW1lIGZhY3RvciIgLz4NCiAgICA8UGFyYUl0ZW0gTmFtZT0iTWl1byIgQWxpYXM9Ik9pbCBWaXNjb3NpdHkiICAgICAgICAgICAgICBVbml0PSJtUGEucyIgRGVmYXVsdD0iMC41IiAgIE1heD0iMTAwMDAiICBNaW49IjFlLTA2IiAgRGlnaXQ9IjYiICBEZXNjPSJvaWwgdmlzY29zaXR5IiAvPg0KICAgIDxQYXJhSXRlbSBOYW1lPSJCdyIgIEFsaWFzPSJXYXRlciBGb3JtYXRpb24gVm9sdW1lIEZhY3RvciIgVW5pdD0iIiAgICBEZWZhdWx0PSIxIiAgICAgTWF4PSIxMCIgICAgIE1pbj0iMWUtMDYiICBEaWdpdD0iNiIgIERlc2M9IndhdGVyIGZvcm1hdGlvbiB2b2x1bWUgZmFjdG9yIiAvPg0KICAgIDxQYXJhSXRlbSBOYW1lPSJNaXV3IiBBbGlhcz0iV2F0ZXIgVmlzY29zaXR5IiAgICAgICAgICAgIFVuaXQ9Im1QYS5zIiBEZWZhdWx0PSIxIiAgICAgTWF4PSIxMDAwMCIgIE1pbj0iMWUtMDYiICBEaWdpdD0iNiIgIERlc2M9IndhdGVyIHZpc2Nvc2l0eSIgLz4NCiAgICA8UGFyYUl0ZW0gTmFtZT0iQ3RpIiBBbGlhcz0iVG90YWwgQ29tcHJlc3NpYmlsaXR5IiAgICAgICBVbml0PSIxL01QYSIgRGVmYXVsdD0iMC4wMDEiIE1heD0iMTAiICAgICBNaW49IjFlLTMwIiAgRGlnaXQ9IjEwIiBTY2llbnRpZmljPSIxIiBEZXNjPSJ0b3RhbCBjb21wcmVzc2liaWxpdHkiIC8+DQogICAgPFBhcmFJdGVtIE5hbWU9IkNmIiAgQWxpYXM9IlJvY2sgQ29tcHJlc3NpYmlsaXR5IiAgICAgICAgVW5pdD0iMS9NUGEiIERlZmF1bHQ9IjAuMDAwMSIgTWF4PSIxMCIgICAgTWluPSIxZS0zMCIgIERpZ2l0PSIxMCIgU2NpZW50aWZpYz0iMSIgRGVzYz0icm9jayBjb21wcmVzc2liaWxpdHkiIC8+DQogICAgPFBhcmFJdGVtIE5hbWU9IlNvaSIgQWxpYXM9IkluaXRpYWwgT2lsIFNhdHVyYXRpb24iICAgICAgVW5pdD0iIiAgICAgIERlZmF1bHQ9IjAuOCIgICBNYXg9IjEiICAgICAgTWluPSIwIiAgICAgIERpZ2l0PSI2IiAgRGVzYz0iaW5pdGlhbCBvaWwgc2F0dXJhdGlvbiIgLz4NCiAgICA8UGFyYUl0ZW0gTmFtZT0iU2dpIiBBbGlhcz0iSW5pdGlhbCBHYXMgU2F0dXJhdGlvbiIgICAgICBVbml0PSIiICAgICAgRGVmYXVsdD0iMCIgICAgIE1heD0iMSIgICAgICBNaW49IjAiICAgICAgRGlnaXQ9IjYiICBEZXNjPSJpbml0aWFsIGdhcyBzYXR1cmF0aW9uIiAvPg0KICAgIDxQYXJhSXRlbSBOYW1lPSJTd2kiIEFsaWFzPSJJbml0aWFsIFdhdGVyIFNhdHVyYXRpb24iICAgIFVuaXQ9IiIgICAgICBEZWZhdWx0PSIwLjIiICAgTWF4PSIxIiAgICAgIE1pbj0iMCIgICAgICBEaWdpdD0iNiIgIERlc2M9ImluaXRpYWwgd2F0ZXIgc2F0dXJhdGlvbiIgLz4NCiAgPC9QYXJhR3JvdXA+DQoNCiAgPFBhcmFHcm91cCBOYW1lPSIiIEFsaWFzPSJXZWxsIFBhcmFtZXRlcnMiPg0KICAgIDxQYXJhSXRlbSBOYW1lPSJXX1giICAgIEFsaWFzPSJYIENvb3JkaW5hdGUiICAgICAgICAgICAgVW5pdD0ibSIgICAgICBEZWZhdWx0PSIwIiAgICAgTWF4PSIxMDAwMCIgIE1pbj0iLTEwMDAwIiBEaWdpdD0iNiIgIERlc2M9IndlbGwgWCBjb29yZGluYXRlIiAvPg0KICAgIDxQYXJhSXRlbSBOYW1lPSJXX1kiICAgIEFsaWFzPSJZIENvb3JkaW5hdGUiICAgICAgICAgICAgVW5pdD0ibSIgICAgICBEZWZhdWx0PSIwIiAgICAgTWF4PSIxMDAwMCIgIE1pbj0iLTEwMDAwIiBEaWdpdD0iNiIgIERlc2M9IndlbGwgWSBjb29yZGluYXRlIiAvPg0KICAgIDxQYXJhSXRlbSBOYW1lPSJXX1J3IiAgIEFsaWFzPSJXZWxsYm9yZSBSYWRpdXMiICAgICAgICAgVW5pdD0ibSIgICAgICBEZWZhdWx0PSIwLjEiICAgTWF4PSIxMCIgICAgIE1pbj0iMC4wMDEiICBEaWdpdD0iNiIgIERlc2M9IndlbGxib3JlIHJhZGl1cyIgLz4NCiAgICA8UGFyYUl0ZW0gTmFtZT0iV19Ta2luIiBBbGlhcz0iU2tpbiBGYWN0b3IiICAgICAgICAgICAgIFVuaXQ9IiIgICAgICAgRGVmYXVsdD0iMCIgICAgIE1heD0iMTAwMCIgICBNaW49Ii0xMDAiICAgRGlnaXQ9IjYiICBEZXNjPSJza2luIGZhY3RvciIgLz4NCiAgICA8UGFyYUl0ZW0gTmFtZT0iV19DIiAgICBBbGlhcz0iV2VsbGJvcmUgU3RvcmFnZSBDb2VmZiIgIFVuaXQ9Im1eMy9NUGEiIERlZmF1bHQ9IjAiICAgICBNYXg9IjEwMDAiICAgTWluPSIwIiAgICAgIERpZ2l0PSI2IiAgRGVzYz0id2VsbGJvcmUgc3RvcmFnZSBjb2VmZmljaWVudCIgLz4NCiAgICA8UGFyYUl0ZW0gTmFtZT0iV19XZWxsTGVuZ3RoIiAgICAgICAgIEFsaWFzPSJIb3Jpem9udGFsIFdlbGwgTGVuZ3RoIiBVbml0PSJtIiAgICBEZWZhdWx0PSIyMDAiICBNYXg9IjEwMDAwIiBNaW49IjFlLTA1IiBEaWdpdD0iNiIgRGVzYz0iaG9yaXpvbnRhbCB3ZWxsIGxlbmd0aCIgLz4NCiAgICA8UGFyYUl0ZW0gTmFtZT0iV19EcmFpbkFuZ2xlIiAgICAgICAgIEFsaWFzPSJEcmFpbiBBbmdsZSIgICAgICAgICAgICBVbml0PSJkZWciICBEZWZhdWx0PSIwIiAgICBNYXg9IjM2MCIgICBNaW49Ii0zNjAiICBEaWdpdD0iNiIgRGVzYz0iaG9yaXpvbnRhbCB3ZWxsIGRyYWluIGFuZ2xlIiAvPg0KICAgIDxQYXJhSXRlbSBOYW1lPSJXX051bWJlck9mRnJhY3R1cmVzIiAgQWxpYXM9Ik51bWJlciBvZiBGcmFjdHVyZXMiICAgIFVuaXQ9IiIgICAgIERlZmF1bHQ9IjE1IiAgIE1heD0iMTAwMCIgIE1pbj0iMiIgICAgIERpZ2l0PSIwIiBEZXNjPSJudW1iZXIgb2YgZnJhY3R1cmVzIiAvPg0KICAgIDxQYXJhSXRlbSBOYW1lPSJXX0ZyYWN0dXJlSGFsZkxlbmd0aCIgQWxpYXM9IkZyYWN0dXJlIEhhbGYtTGVuZ3RoIiAgIFVuaXQ9Im0iICAgIERlZmF1bHQ9IjUwIiAgIE1heD0iMTAwMDAiIE1pbj0iMWUtMDUiIERpZ2l0PSI2IiBEZXNjPSJmcmFjdHVyZSBoYWxmLWxlbmd0aCIgLz4NCiAgICA8UGFyYUl0ZW0gTmFtZT0iV19GcmFjdHVyZUFuZ2xlIiAgICAgIEFsaWFzPSJGcmFjdHVyZSBBbmdsZSIgICAgICAgICBVbml0PSJkZWciICBEZWZhdWx0PSI5MCIgICBNYXg9IjM2MCIgICBNaW49Ii0zNjAiICBEaWdpdD0iNiIgRGVzYz0iZnJhY3R1cmUgYW5nbGUiIC8+DQogICAgPFBhcmFJdGVtIE5hbWU9IldfRGZjIiAgICAgICAgICAgICAgICBBbGlhcz0iRnJhY3R1cmUgQ29uZHVjdGl2aXR5IiAgVW5pdD0ibUQubSIgRGVmYXVsdD0iMTAwMCIgTWF4PSIxZSszMCIgTWluPSIwIiAgICAgRGlnaXQ9IjYiIERlc2M9ImZyYWN0dXJlIGNvbmR1Y3Rpdml0eSIgLz4NCiAgPC9QYXJhR3JvdXA+DQoNCiAgPFBhcmFHcm91cCBOYW1lPSIiIEFsaWFzPSJJbmRlcGVuZGVudCBGcmFjdHVyZSBQYXJhbWV0ZXJzIj4NCiAgICA8UGFyYUl0ZW0gTmFtZT0iRl9YMCIgQWxpYXM9IlN0YXJ0IFgwIiAgICAgICAgICAgICAgVW5pdD0ibSIgICAgRGVmYXVsdD0iMCIgTWF4PSIxMDAwMCIgTWluPSItMTAwMDAiIERpZ2l0PSI2IiBEZXNjPSJmcmFjdHVyZSBzdGFydCBYIGNvb3JkaW5hdGUiIC8+DQogICAgPFBhcmFJdGVtIE5hbWU9IkZfWTAiIEFsaWFzPSJTdGFydCBZMCIgICAgICAgICAgICAgIFVuaXQ9Im0iICAgIERlZmF1bHQ9IjAiIE1heD0iMTAwMDAiIE1pbj0iLTEwMDAwIiBEaWdpdD0iNiIgRGVzYz0iZnJhY3R1cmUgc3RhcnQgWSBjb29yZGluYXRlIiAvPg0KICAgIDxQYXJhSXRlbSBOYW1lPSJGX1gxIiBBbGlhcz0iRW5kIFgxIiAgICAgICAgICAgICAgICBVbml0PSJtIiAgICBEZWZhdWx0PSIwIiBNYXg9IjEwMDAwIiBNaW49Ii0xMDAwMCIgRGlnaXQ9IjYiIERlc2M9ImZyYWN0dXJlIGVuZCBYIGNvb3JkaW5hdGUiIC8+DQogICAgPFBhcmFJdGVtIE5hbWU9IkZfWTEiIEFsaWFzPSJFbmQgWTEiICAgICAgICAgICAgICAgIFVuaXQ9Im0iICAgIERlZmF1bHQ9IjAiIE1heD0iMTAwMDAiIE1pbj0iLTEwMDAwIiBEaWdpdD0iNiIgRGVzYz0iZnJhY3R1cmUgZW5kIFkgY29vcmRpbmF0ZSIgLz4NCiAgICA8UGFyYUl0ZW0gTmFtZT0iRl9GQyIgQWxpYXM9IkZyYWN0dXJlIENvbmR1Y3Rpdml0eSIgVW5pdD0ibUQubSIgRGVmYXVsdD0iMSIgTWF4PSIxZSszMCIgTWluPSIwIiAgICAgIERpZ2l0PSI2IiBEZXNjPSJmcmFjdHVyZSBjb25kdWN0aXZpdHkiIC8+DQogICAgPFBhcmFJdGVtIE5hbWU9IkZfRFciIEFsaWFzPSJGcmFjdHVyZSBXaWR0aCBQYXJhbWV0ZXIiIFVuaXQ9IiIgRGVmYXVsdD0iMSIgTWF4PSIxZSszMCIgTWluPSIwIiBEaWdpdD0iNiIgRGVzYz0iZnJhY3R1cmUgd2lkdGggcGFyYW1ldGVyIiAvPg0KICA8L1BhcmFHcm91cD4NCg0KICA8UGFyYUdyb3VwIE5hbWU9IiIgQWxpYXM9IkZhdWx0IFBhcmFtZXRlcnMiPg0KICAgIDxQYXJhSXRlbSBOYW1lPSJGVF9YMCIgQWxpYXM9IlN0YXJ0IFgwIiBVbml0PSJtIiBEZWZhdWx0PSIwIiBNYXg9IjEwMDAwIiBNaW49Ii0xMDAwMCIgRGlnaXQ9IjYiIERlc2M9ImZhdWx0IHN0YXJ0IFggY29vcmRpbmF0ZSIgLz4NCiAgICA8UGFyYUl0ZW0gTmFtZT0iRlRfWTAiIEFsaWFzPSJTdGFydCBZMCIgVW5pdD0ibSIgRGVmYXVsdD0iMCIgTWF4PSIxMDAwMCIgTWluPSItMTAwMDAiIERpZ2l0PSI2IiBEZXNjPSJmYXVsdCBzdGFydCBZIGNvb3JkaW5hdGUiIC8+DQogICAgPFBhcmFJdGVtIE5hbWU9IkZUX1gxIiBBbGlhcz0iRW5kIFgxIiBVbml0PSJtIiBEZWZhdWx0PSIwIiBNYXg9IjEwMDAwIiBNaW49Ii0xMDAwMCIgRGlnaXQ9IjYiIERlc2M9ImZhdWx0IGVuZCBYIGNvb3JkaW5hdGUiIC8+DQogICAgPFBhcmFJdGVtIE5hbWU9IkZUX1kxIiBBbGlhcz0iRW5kIFkxIiBVbml0PSJtIiBEZWZhdWx0PSIwIiBNYXg9IjEwMDAwIiBNaW49Ii0xMDAwMCIgRGlnaXQ9IjYiIERlc2M9ImZhdWx0IGVuZCBZIGNvb3JkaW5hdGUiIC8+DQogICAgPFBhcmFJdGVtIE5hbWU9IkZUX0xlYWthZ2UiIEFsaWFzPSJMZWFrYWdlIENvZWZmaWNpZW50IiBVbml0PSIiIERlZmF1bHQ9IjEiIE1heD0iMWUrMzAiIE1pbj0iMCIgRGlnaXQ9IjYiIERlc2M9ImZhdWx0IGxlYWthZ2UgY29lZmZpY2llbnQiIC8+DQogIDwvUGFyYUdyb3VwPg0KDQogIDxQYXJhR3JvdXAgTmFtZT0iIiBBbGlhcz0iUmVjdGFuZ2xlIEJvdW5kYXJ5IFBhcmFtZXRlcnMiPg0KICAgIDxQYXJhSXRlbSBOYW1lPSJCUl9YTWluIiBBbGlhcz0iTGVmdCBCb3VuZGFyeSBYIiBVbml0PSJtIiBEZWZhdWx0PSIwIiBNYXg9IjEwMDAwIiBNaW49Ii0xMDAwMCIgRGlnaXQ9IjYiIERlc2M9InJlY3RhbmdsZSBib3VuZGFyeSBtaW5pbXVtIFgiIC8+DQogICAgPFBhcmFJdGVtIE5hbWU9IkJSX1lNaW4iIEFsaWFzPSJCb3R0b20gQm91bmRhcnkgWSIgVW5pdD0ibSIgRGVmYXVsdD0iMCIgTWF4PSIxMDAwMCIgTWluPSItMTAwMDAiIERpZ2l0PSI2IiBEZXNjPSJyZWN0YW5nbGUgYm91bmRhcnkgbWluaW11bSBZIiAvPg0KICAgIDxQYXJhSXRlbSBOYW1lPSJCUl9YTWF4IiBBbGlhcz0iUmlnaHQgQm91bmRhcnkgWCIgVW5pdD0ibSIgRGVmYXVsdD0iMCIgTWF4PSIxMDAwMCIgTWluPSItMTAwMDAiIERpZ2l0PSI2IiBEZXNjPSJyZWN0YW5nbGUgYm91bmRhcnkgbWF4aW11bSBYIiAvPg0KICAgIDxQYXJhSXRlbSBOYW1lPSJCUl9ZTWF4IiBBbGlhcz0iVG9wIEJvdW5kYXJ5IFkiIFVuaXQ9Im0iIERlZmF1bHQ9IjAiIE1heD0iMTAwMDAiIE1pbj0iLTEwMDAwIiBEaWdpdD0iNiIgRGVzYz0icmVjdGFuZ2xlIGJvdW5kYXJ5IG1heGltdW0gWSIgLz4NCiAgPC9QYXJhR3JvdXA+DQoNCiAgPFBhcmFHcm91cCBOYW1lPSIiIEFsaWFzPSJDaXJjbGUgQm91bmRhcnkgUGFyYW1ldGVycyI+DQogICAgPFBhcmFJdGVtIE5hbWU9IkJDX0NlbnRlclgiIEFsaWFzPSJDZW50ZXIgWCIgVW5pdD0ibSIgRGVmYXVsdD0iMCIgTWF4PSIxMDAwMCIgTWluPSItMTAwMDAiIERpZ2l0PSI2IiBEZXNjPSJjaXJjbGUgYm91bmRhcnkgY2VudGVyIFgiIC8+DQogICAgPFBhcmFJdGVtIE5hbWU9IkJDX0NlbnRlclkiIEFsaWFzPSJDZW50ZXIgWSIgVW5pdD0ibSIgRGVmYXVsdD0iMCIgTWF4PSIxMDAwMCIgTWluPSItMTAwMDAiIERpZ2l0PSI2IiBEZXNjPSJjaXJjbGUgYm91bmRhcnkgY2VudGVyIFkiIC8+DQogICAgPFBhcmFJdGVtIE5hbWU9IkJDX1JhZGl1cyIgIEFsaWFzPSJSYWRpdXMiICAgVW5pdD0ibSIgRGVmYXVsdD0iMSIgTWF4PSIxMDAwMCIgTWluPSIxZS0wNSIgIERpZ2l0PSI2IiBEZXNjPSJjaXJjbGUgYm91bmRhcnkgcmFkaXVzIiAvPg0KICA8L1BhcmFHcm91cD4NCg0KICA8UGFyYUdyb3VwIE5hbWU9IiIgQWxpYXM9IlBvbHlnb24gQm91bmRhcnkgVmVydGV4IFBhcmFtZXRlcnMiPg0KICAgIDxQYXJhSXRlbSBOYW1lPSJCUF9YIiBBbGlhcz0iWCBDb29yZGluYXRlIiBVbml0PSJtIiBEZWZhdWx0PSIwIiBNYXg9IjEwMDAwIiBNaW49Ii0xMDAwMCIgRGlnaXQ9IjYiIERlc2M9InBvbHlnb24gYm91bmRhcnkgdmVydGV4IFgiIC8+DQogICAgPFBhcmFJdGVtIE5hbWU9IkJQX1kiIEFsaWFzPSJZIENvb3JkaW5hdGUiIFVuaXQ9Im0iIERlZmF1bHQ9IjAiIE1heD0iMTAwMDAiIE1pbj0iLTEwMDAwIiBEaWdpdD0iNiIgRGVzYz0icG9seWdvbiBib3VuZGFyeSB2ZXJ0ZXggWSIgLz4NCiAgPC9QYXJhR3JvdXA+DQoNCiAgPFBhcmFHcm91cCBOYW1lPSIiIEFsaWFzPSJSZWdpb24gUGFyYW1ldGVycyI+DQogICAgPFBhcmFJdGVtIE5hbWU9IlJfTGVha2FnZSIgQWxpYXM9IkxlYWthZ2UgQ29lZmZpY2llbnQiIFVuaXQ9IiIgRGVmYXVsdD0iMSIgTWF4PSIxZSszMCIgTWluPSIwIiBEaWdpdD0iNiIgRGVzYz0icmVnaW9uIGxlYWthZ2UgY29lZmZpY2llbnQiIC8+DQogIDwvUGFyYUdyb3VwPg0KDQogIDxQYXJhR3JvdXAgTmFtZT0iIiBBbGlhcz0iUmVnaW9uIE1hcmsgUGFyYW1ldGVycyI+DQogICAgPFBhcmFJdGVtIE5hbWU9IlJNX0NvbVciICAgICAgIEFsaWFzPSJTdG9yYWdlIFJhdGlvIiBVbml0PSIiIERlZmF1bHQ9IjEiIE1heD0iMSIgICAgTWluPSIwIiAgICAgRGlnaXQ9IjYiIERlc2M9InN0b3JhZ2UgcmF0aW8iIC8+DQogICAgPFBhcmFJdGVtIE5hbWU9IlJNX0NvbUtyIiAgICAgIEFsaWFzPSJNb2JpbGl0eSBSYXRpbyIgVW5pdD0iIiBEZWZhdWx0PSIxIiBNYXg9IjEwMDAiIE1pbj0iMC4wMDEiIERpZ2l0PSI2IiBEZXNjPSJtb2JpbGl0eSByYXRpbyIgLz4NCiAgICA8UGFyYUl0ZW0gTmFtZT0iUk1fTmV0VG9Hcm9zcyIgQWxpYXM9Ik5ldC10by1Hcm9zcyIgVW5pdD0iIiBEZWZhdWx0PSIxIiBNYXg9IjEiICAgIE1pbj0iMCIgICAgIERpZ2l0PSI2IiBEZXNjPSJuZXQtdG8tZ3Jvc3MiIC8+DQogIDwvUGFyYUdyb3VwPg0KDQogIDwhLS0gUmVzdWx0IHBhcmFtZXRlcnMgYXJlIHNlbGVjdGVkIG9ubHkgYnkgcmVidWlsZFJlc3VsdFBhcmFzKCkuIC0tPg0KICA8UGFyYUdyb3VwIE5hbWU9IiIgQWxpYXM9IlJlc3VsdCBQYXJhbWV0ZXJzIj4NCiAgICA8UGFyYUl0ZW0gTmFtZT0iUmVzdWx0X1dfUnciICAgQWxpYXM9IldlbGwgUmFkaXVzIiAgICAgICAgICAgICBVbml0PSJtIiAgICAgIERlZmF1bHQ9IjAuMSIgICAgTWF4PSIxMCIgICAgTWluPSIwLjAwMSIgIERpZ2l0PSI2IiAgRGVzYz0icmVzdWx0IHdlbGxib3JlIHJhZGl1cyIgLz4NCiAgICA8UGFyYUl0ZW0gTmFtZT0iUmVzdWx0X1dfRGZjIiAgQWxpYXM9IkZyYWN0dXJlIENvbmR1Y3Rpdml0eSIgIFVuaXQ9Im1ELm0iICAgRGVmYXVsdD0iMTAwMCIgICBNYXg9IjFlKzMwIiBNaW49IjAiICAgICAgRGlnaXQ9IjYiICBEZXNjPSJyZXN1bHQgZnJhY3R1cmUgY29uZHVjdGl2aXR5IiAvPg0KICAgIDxQYXJhSXRlbSBOYW1lPSJSZXN1bHRfV19Ta2luIiBBbGlhcz0iU2tpbiBGYWN0b3IiICAgICAgICAgICAgVW5pdD0iIiAgICAgICBEZWZhdWx0PSIwIiAgICAgIE1heD0iMTAwMCIgIE1pbj0iLTEwMCIgICBEaWdpdD0iNiIgIERlc2M9InJlc3VsdCBza2luIGZhY3RvciIgLz4NCiAgICA8UGFyYUl0ZW0gTmFtZT0iUmVzdWx0X1dfQyIgICAgQWxpYXM9IldlbGxib3JlIFN0b3JhZ2UgQ29lZmYiIFVuaXQ9Im1eMy9NUGEiIERlZmF1bHQ9IjAiICAgICAgTWF4PSIxMDAwIiAgTWluPSIwIiAgICAgIERpZ2l0PSI2IiAgRGVzYz0icmVzdWx0IHdlbGxib3JlIHN0b3JhZ2UgY29lZmZpY2llbnQiIC8+DQoNCiAgICA8UGFyYUl0ZW0gTmFtZT0iUmVzdWx0X1BpIiAgQWxpYXM9IkluaXRpYWwgRm9ybWF0aW9uIFByZXNzdXJlIiBVbml0PSJNUGEiICAgRGVmYXVsdD0iNDAiICAgICBNYXg9IjUwMCIgICBNaW49IjAuMSIgICBEaWdpdD0iNiIgIERlc2M9InJlc3VsdCBpbml0aWFsIGZvcm1hdGlvbiBwcmVzc3VyZSIgLz4NCiAgICA8UGFyYUl0ZW0gTmFtZT0iUmVzdWx0X0siICAgQWxpYXM9IlBlcm1lYWJpbGl0eSIgICAgICAgICAgICAgICBVbml0PSJtRCIgICAgRGVmYXVsdD0iMjUiICAgICBNYXg9IjEwMDAwIiBNaW49IjAiICAgICBEaWdpdD0iNiIgIERlc2M9InJlc3VsdCBwZXJtZWFiaWxpdHkiIC8+DQogICAgPFBhcmFJdGVtIE5hbWU9IlJlc3VsdF9oIiAgIEFsaWFzPSJSZXNlcnZvaXIgVGhpY2tuZXNzIiAgICAgICAgVW5pdD0ibSIgICAgIERlZmF1bHQ9IjEwIiAgICAgTWF4PSIxMDAwMCIgTWluPSIxZS0wNSIgRGlnaXQ9IjYiICBEZXNjPSJyZXN1bHQgcmVzZXJ2b2lyIHRoaWNrbmVzcyIgLz4NCiAgICA8UGFyYUl0ZW0gTmFtZT0iUmVzdWx0X3BoaSIgQWxpYXM9IlBvcm9zaXR5IiAgICAgICAgICAgICAgICAgICBVbml0PSIiICAgICAgRGVmYXVsdD0iMC4xIiAgICBNYXg9IjEiICAgICBNaW49IjFlLTA1IiBEaWdpdD0iNiIgIERlc2M9InJlc3VsdCBwb3Jvc2l0eSIgLz4NCiAgICA8UGFyYUl0ZW0gTmFtZT0iUmVzdWx0X0N0aSIgQWxpYXM9IlRvdGFsIENvbXByZXNzaWJpbGl0eSIgICAgICBVbml0PSIxL01QYSIgRGVmYXVsdD0iMC4wMDEiICBNYXg9IjEwIiAgICBNaW49IjFlLTMwIiBEaWdpdD0iMTAiIFNjaWVudGlmaWM9IjEiIERlc2M9InJlc3VsdCB0b3RhbCBjb21wcmVzc2liaWxpdHkiIC8+DQogICAgPFBhcmFJdGVtIE5hbWU9IlJlc3VsdF9DZiIgIEFsaWFzPSJSb2NrIENvbXByZXNzaWJpbGl0eSIgICAgICAgVW5pdD0iMS9NUGEiIERlZmF1bHQ9IjAuMDAwMSIgTWF4PSIxMCIgICAgTWluPSIxZS0zMCIgRGlnaXQ9IjEwIiBTY2llbnRpZmljPSIxIiBEZXNjPSJyZXN1bHQgcm9jayBjb21wcmVzc2liaWxpdHkiIC8+DQogICAgPFBhcmFJdGVtIE5hbWU9IlJlc3VsdF9Tb2kiIEFsaWFzPSJJbml0aWFsIE9pbCBTYXR1cmF0aW9uIiAgICAgVW5pdD0iIiAgICAgIERlZmF1bHQ9IjAuOCIgICAgTWF4PSIxIiAgICAgTWluPSIwIiAgICAgRGlnaXQ9IjYiICBEZXNjPSJyZXN1bHQgaW5pdGlhbCBvaWwgc2F0dXJhdGlvbiIgLz4NCiAgICA8UGFyYUl0ZW0gTmFtZT0iUmVzdWx0X1NnaSIgQWxpYXM9IkluaXRpYWwgR2FzIFNhdHVyYXRpb24iICAgICBVbml0PSIiICAgICAgRGVmYXVsdD0iMCIgICAgICBNYXg9IjEiICAgICBNaW49IjAiICAgICBEaWdpdD0iNiIgIERlc2M9InJlc3VsdCBpbml0aWFsIGdhcyBzYXR1cmF0aW9uIiAvPg0KICAgIDxQYXJhSXRlbSBOYW1lPSJSZXN1bHRfU3dpIiBBbGlhcz0iSW5pdGlhbCBXYXRlciBTYXR1cmF0aW9uIiAgIFVuaXQ9IiIgICAgICBEZWZhdWx0PSIwLjIiICAgIE1heD0iMSIgICAgIE1pbj0iMCIgICAgIERpZ2l0PSI2IiAgRGVzYz0icmVzdWx0IGluaXRpYWwgd2F0ZXIgc2F0dXJhdGlvbiIgLz4NCg0KICAgIDxQYXJhSXRlbSBOYW1lPSJSZXN1bHRfQm8iICAgQWxpYXM9Ik9pbCBGb3JtYXRpb24gVm9sdW1lIEZhY3RvciIgICBVbml0PSIiICAgICAgRGVmYXVsdD0iMSIgTWF4PSIxZSszMCIgTWluPSIwIiAgICAgRGlnaXQ9IjYiICBEZXNjPSJyZXN1bHQgb2lsIGZvcm1hdGlvbiB2b2x1bWUgZmFjdG9yIiAvPg0KICAgIDxQYXJhSXRlbSBOYW1lPSJSZXN1bHRfTWl1byIgQWxpYXM9Ik9pbCBWaXNjb3NpdHkiICAgICAgICAgICAgICAgICBVbml0PSJtUGEucyIgRGVmYXVsdD0iMSIgTWF4PSIxZSszMCIgTWluPSIxZS0zMCIgRGlnaXQ9IjYiICBEZXNjPSJyZXN1bHQgb2lsIHZpc2Nvc2l0eSIgLz4NCiAgICA8UGFyYUl0ZW0gTmFtZT0iUmVzdWx0X0NvIiAgIEFsaWFzPSJPaWwgQ29tcHJlc3NpYmlsaXR5IiAgICAgICAgICAgVW5pdD0iMS9NUGEiIERlZmF1bHQ9IjAiIE1heD0iMWUrMzAiIE1pbj0iMCIgICAgRGlnaXQ9IjEwIiBTY2llbnRpZmljPSIxIiBEZXNjPSJyZXN1bHQgb2lsIGNvbXByZXNzaWJpbGl0eSIgLz4NCiAgICA8UGFyYUl0ZW0gTmFtZT0iUmVzdWx0X0J3IiAgIEFsaWFzPSJXYXRlciBGb3JtYXRpb24gVm9sdW1lIEZhY3RvciIgVW5pdD0ibTMvbTMiIERlZmF1bHQ9IjEiIE1heD0iMWUrMzAiIE1pbj0iMCIgICAgIERpZ2l0PSI2IiAgRGVzYz0icmVzdWx0IHdhdGVyIGZvcm1hdGlvbiB2b2x1bWUgZmFjdG9yIiAvPg0KICAgIDxQYXJhSXRlbSBOYW1lPSJSZXN1bHRfTWl1dyIgQWxpYXM9IldhdGVyIFZpc2Nvc2l0eSIgICAgICAgICAgICAgICBVbml0PSJtUGEucyIgRGVmYXVsdD0iMSIgTWF4PSIxZSszMCIgTWluPSIxZS0zMCIgRGlnaXQ9IjYiICBEZXNjPSJyZXN1bHQgd2F0ZXIgdmlzY29zaXR5IiAvPg0KICAgIDxQYXJhSXRlbSBOYW1lPSJSZXN1bHRfQ3ciICAgQWxpYXM9IldhdGVyIENvbXByZXNzaWJpbGl0eSIgICAgICAgICBVbml0PSIxL01QYSIgRGVmYXVsdD0iMCIgTWF4PSIxZSszMCIgTWluPSIwIiAgICBEaWdpdD0iMTAiIFNjaWVudGlmaWM9IjEiIERlc2M9InJlc3VsdCB3YXRlciBjb21wcmVzc2liaWxpdHkiIC8+DQogICAgPFBhcmFJdGVtIE5hbWU9IlJlc3VsdF9CZyIgICBBbGlhcz0iR2FzIEZvcm1hdGlvbiBWb2x1bWUgRmFjdG9yIiAgIFVuaXQ9Im0zL20zIiBEZWZhdWx0PSIxIiBNYXg9IjFlKzMwIiBNaW49IjAiICAgICBEaWdpdD0iNiIgIERlc2M9InJlc3VsdCBnYXMgZm9ybWF0aW9uIHZvbHVtZSBmYWN0b3IiIC8+DQogICAgPFBhcmFJdGVtIE5hbWU9IlJlc3VsdF9NaXVnIiBBbGlhcz0iR2FzIFZpc2Nvc2l0eSIgICAgICAgICAgICAgICAgIFVuaXQ9Im1QYS5zIiBEZWZhdWx0PSIxIiBNYXg9IjFlKzMwIiBNaW49IjFlLTMwIiBEaWdpdD0iNiIgIERlc2M9InJlc3VsdCBnYXMgdmlzY29zaXR5IiAvPg0KICAgIDxQYXJhSXRlbSBOYW1lPSJSZXN1bHRfQ2ciICAgQWxpYXM9IkdhcyBDb21wcmVzc2liaWxpdHkiICAgICAgICAgICBVbml0PSIxL01QYSIgRGVmYXVsdD0iMCIgTWF4PSIxZSszMCIgTWluPSIwIiAgICBEaWdpdD0iMTAiIFNjaWVudGlmaWM9IjEiIERlc2M9InJlc3VsdCBnYXMgY29tcHJlc3NpYmlsaXR5IiAvPg0KICA8L1BhcmFHcm91cD4NCg0KPC9Sb290Pg0K
\ No newline at end of file
diff --git a/Bin/Config/Common/UnitDefault_cn.dat b/Bin/Config/Common/UnitDefault_cn.dat
index 6271b6b..49e38fe 100644
--- a/Bin/Config/Common/UnitDefault_cn.dat
+++ b/Bin/Config/Common/UnitDefault_cn.dat
@@ -1 +1 @@
-77u/PD94bWwgcup_mpadmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4NCjxSb290Pg0KICAgIDxUeXwzyBlT2Y+DQogICAgICAgIDwhLS0gPT09PT09PT09PT09PT09PT09PT0g56ysMDHnu4TvvJrplb/luqYgPT09PT09PT09PT09PT09PT09PT0gLS0+DQogICAgICAgIDxVbml0R3JvdXAgVHlwZT0ibGVuZ3RoIiBOYW1lPSJsZW5ndGgiPg0KICAgICAgICAgICAgPFVuaXQgSUQ9IlUwMTAxIiBVbml0PSJtIiBrPSIxIiBEaWdpdD0iMyIgUmVtYXJrPSJiYXNlIHVuaXQiLz4NCiAgICAgICAgICAgIDxVbml0IElEPSJVMDEwMiIgVW5pdD0ia20iIGs9IjEwMDAiIERpZ2l0PSIwIi8+DQogICAgICAgICAgICA8VW5pdCBJRD0iVTAxMDMiIFVuaXQ9ImNtIiBrPSIwLjAxIiBEaWdpdD0iMyIvPg0KICAgICAgICAgICAgPFVuaXQgSUQ9IlUwMTA0IiBVbml0PSJtbSIgaz0iMC4wMDEiIERpZ2l0PSI0Ii8+DQogICAgICAgICAgICA8VW5pdCBJRD0iVTAxMDUiIFVuaXQ9ImluIiBrPSIwLjAyNTQiIERpZ2l0PSI0Ii8+DQogICAgICAgICAgICA8VW5pdCBJRD0iVTAxMDYiIFVuaXQ9ImZ0IiBrPSIwLjMwNDgiIERpZ2l0PSI0Ii8+DQogICAgICAgICAgICA8VW5pdCBJRD0iVTAxMDciIFVuaXQ9InlkIiBrPSIwLjkxNDQiIERpZ2l0PSI0Ii8+DQogICAgICAgICAgICA8VW5pdCBJRD0iVTAxMDgiIFVuaXQ9Im1pIiBrPSIxNjA5LjM0IiBEaWdpdD0iMiIvPg0KICAgICAgICAgICAgPFVuaXQgSUQ9IlUwMTA5IiBVbml0PSJubWlsZSIgaz0iMTg1MiIgRGlnaXQ9IjAiLz4NCiAgICAgICAgICAgIDxVbml0IElEPSJVMDExMCIgVW5pdD0ibm0iIGs9IjFlLTA5IiBEaWdpdD0iNiIvPg0KICAgICAgICA8L1VuaXRHcm91cD4NCg0KICAgICAgICA8IS0tID09PT09PT09PT09PT09PT09PT09IOesrDAy57uE77ya5pe26Ze0ID09PT09PT09PT09PT09PT09PT09IC0tPg0KICAgICAgICA8VW5pdEdyb3VwIFR5cGU9InRpbWUiIE5hbWU9InRpbWUiPg0KICAgICAgICAgICAgPFVuaXQgSUQ9IlUwMjAxIiBVbml0PSJzIiBrPSIxIiBEaWdpdD0iMyIgUmVtYXJrPSJiYXNlIHVuaXQiLz4NCiAgICAgICAgICAgIDxVbml0IElEPSJVMDIwMiIgVW5pdD0ibXMiIGs9IjAuMDAxIiBEaWdpdD0iNiIvPg0KICAgICAgICAgICAgPFVuaXQgSUQ9IlUwMjAzIiBVbml0PSJ1cyIgaz0iMWUtMDYiIERpZ2l0PSI2Ii8+DQogICAgICAgICAgICA8VW5pdCBJRD0iVTAyMDQiIFVuaXQ9Im1pbiIgaz0iNjAiIERpZ2l0PSIwIi8+DQogICAgICAgICAgICA8VW5pdCBJRD0iVTAyMDUiIFVuaXQ9ImgiIGs9IjM2MDAiIERpZ2l0PSIwIi8+DQogICAgICAgICAgICA8VW5pdCBJRD0iVTAyMDYiIFVuaXQ9ImQiIGs9Ijg2NDAwIiBEaWdpdD0iMCIvPg0KICAgICAgICA8L1VuaXRHcm91cD4NCg0KICAgICAgICA8IS0tID09PT09PT09PT09PT09PT09PT09IOesrDAz57uE77ya6LSo6YePID09PT09PT09PT09PT09PT09PT09IC0tPg0KICAgICAgICA8VW5pdEdyb3VwIFR5cGU9Im1hc3MiIE5hbWU9Im1hc3MiPg0KICAgICAgICAgICAgPFVuaXQgSUQ9IlUwMzAxIiBVbml0PSJrZyIgaz0iMSIgRGlnaXQ9IjMiIFJlbWFyaz0iYmFzZSB1bml0Ii8+DQogICAgICAgICAgICA8VW5pdCBJRD0iVTAzMDIiIFVuaXQ9ImciIGs9IjAuMDAxIiBEaWdpdD0iNiIvPg0KICAgICAgICAgICAgPFVuaXQgSUQ9IlUwMzAzIiBVbml0PSJ0b24iIGs9IjEwMDAiIERpZ2l0PSIwIi8+DQogICAgICAgICAgICA8VW5pdCBJRD0iVTAzMDQiIFVuaXQ9ImxiIiBrPSIwLjQ1MzU5MjM3IiBEaWdpdD0iNiIvPg0KICAgICAgICAgICAgPFVuaXQgSUQ9IlUwMzA1IiBVbml0PSJveiIgaz0iMC4wMjgzNDk1IiBEaWdpdD0iNiIvPg0KICAgICAgICAgICAgPFVuaXQgSUQ9IlUwMzA2IiBVbml0PSJzdG9uIiBrPSI5MDcuMTg1IiBEaWdpdD0iMyIvPg0KICAgICAgICAgICAgPFVuaXQgSUQ9IlUwMzA3IiBVbml0PSJsdG9uIiBrPSIxMDE2LjA1IiBEaWdpdD0iMiIvPg0KICAgICAgICA8L1VuaXRHcm91cD4NCg0KICAgICAgICA8IS0tID09PT09PT09PT09PT09PT09PT09IOesrDA057uE77ya6KeS5bqmID09PT09PT09PT09PT09PT09PT09IC0tPg0KICAgICAgICA8VW5pdEdyb3VwIFR5cGU9ImFuZ2xlIiBOYW1lPSJhbmdsZSI+DQogICAgICAgICAgICA8VW5pdCBJRD0iVTA0MDEiIFVuaXQ9InJhZCIgaz0iMSIgRGlnaXQ9IjYiIFJlbWFyaz0iYmFzZSB1bml0Ii8+DQogICAgICAgICAgICA8VW5pdCBJRD0iVTA0MDIiIFVuaXQ9ImRlZyIgaz0iMC4wMTc0NTMyOTI1MTk5NDMzIiBEaWdpdD0iNiIvPg0KICAgICAgICAgICAgPFVuaXQgSUQ9IlUwNDAzIiBVbml0PSJncmFkIiBrPSIwLjAxNTcwNzk2MzI2Nzk0OSIgRGlnaXQ9IjYiLz4NCiAgICAgICAgPC9Vbml0R3JvdXA+DQoNCiAgICAgICAgPCEtLSA9PT09PT09PT09PT09PT09PT09PSDnrKwwNee7hO+8mumdouenryA9PT09PT09PT09PT09PT09PT09PSAtLT4NCiAgICAgICAgPFVuaXRHcm91cCBUeXBlPSJhcmVhIiBOYW1lPSJhcmVhIj4NCiAgICAgICAgICAgIDxVbml0IElEPSJVMDUwMSIgVW5pdD0ibcKyIiBrPSIxIiBEaWdpdD0iMyIgUmVtYXJrPSJiYXNlIHVuaXQiLz4NCiAgICAgICAgICAgIDxVbml0IElEPSJVMDUwMiIgVW5pdD0ia23CsiIgaz0iMWU2IiBEaWdpdD0iMCIvPg0KICAgICAgICAgICAgPFVuaXQgSUQ9IlUwNTAzIiBVbml0PSJjbcKyIiBrPSIwLjAwMDEiIERpZ2l0PSI2Ii8+DQogICAgICAgICAgICA8VW5pdCBJRD0iVTA1MDQiIFVuaXQ9ImZ0wrIiIGs9IjAuMDkyOTAzMDQiIERpZ2l0PSI2Ii8+DQogICAgICAgICAgICA8VW5pdCBJRD0iVTA1MDUiIFVuaXQ9ImluwrIiIGs9IjAuMDAwNjQ1MTYiIERpZ2l0PSI2Ii8+DQogICAgICAgICAgICA8VW5pdCBJRD0iVTA1MDYiIFVuaXQ9ImFjcmUiIGs9IjQwNDYuODU2NDIyNCIgRGlnaXQ9IjMiLz4NCiAgICAgICAgICAgIDxVbml0IElEPSJVMDUwNyIgVW5pdD0iaGEiIGs9IjEwMDAwIiBEaWdpdD0iMCIvPg0KICAgICAgICAgICAgPFVuaXQgSUQ9IlUwNTA4IiBVbml0PSJ5ZMKyIiBrPSIwLjgzNjEyNzM2IiBEaWdpdD0iNCIvPg0KICAgICAgICA8L1VuaXRHcm91cD4NCg0KICAgICAgICA8IS0tID09PT09PT09PT09PT09PT09PT09IOesrDA257uE77ya5L2T56evID09PT09PT09PT09PT09PT09PT09IC0tPg0KICAgICAgICA8VW5pdEdyb3VwIFR5cGU9InZvbHVtZSIgTmFtZT0idm9sdW1lIj4NCiAgICAgICAgICAgIDxVbml0IElEPSJVMDYwMSIgVW5pdD0ibcKzIiBrPSIxIiBEaWdpdD0iMyIgUmVtYXJrPSJiYXNlIHVuaXQiLz4NCiAgICAgICAgICAgIDxVbml0IElEPSJVMDYwMiIgVW5pdD0iTCIgaz0iMC4wMDEiIERpZ2l0PSI0Ii8+DQogICAgICAgICAgICA8VW5pdCBJRD0iVTA2MDMiIFVuaXQ9Im1MIiBrPSIxZS0wNiIgRGlnaXQ9IjYiLz4NCiAgICAgICAgICAgIDxVbml0IElEPSJVMDYwNCIgVW5pdD0iY23CsyIgaz0iMWUtMDYiIERpZ2l0PSI2Ii8+DQogICAgICAgICAgICA8VW5pdCBJRD0iVTA2MDUiIFVuaXQ9ImNjIiBrPSIxZS0wNiIgRGlnaXQ9IjYiLz4NCiAgICAgICAgICAgIDxVbml0IElEPSJVMDYwNiIgVW5pdD0iYmJsIiBrPSIwLjE1ODk4NzI5NDkyOCIgRGlnaXQ9IjYiLz4NCiAgICAgICAgICAgIDxVbml0IElEPSJVMDYwNyIgVW5pdD0iZ2FsKFVTKSIgaz0iMC4wMDM3ODU0MTE3ODQiIERpZ2l0PSI2Ii8+DQogICAgICAgICAgICA8VW5pdCBJRD0iVTA2MDgiIFVuaXQ9ImdhbChVSykiIGs9IjAuMDA0NTQ2MDkiIERpZ2l0PSI2Ii8+DQogICAgICAgICAgICA8VW5pdCBJRD0iVTA2MDkiIFVuaXQ9ImZ0wrMiIGs9IjAuMDI4MzE2ODQ2NTkyIiBEaWdpdD0iNiIvPg0KICAgICAgICAgICAgPFVuaXQgSUQ9IlUwNjEwIiBVbml0PSJpbsKzIiBrPSIxLjYzODcwNjRlLTA1IiBEaWdpdD0iNiIvPg0KICAgICAgICAgICAgPFVuaXQgSUQ9IlUwNjExIiBVbml0PSJxdCIgaz0iMC4wMDA5NDYzNTI5NDYiIERpZ2l0PSI2Ii8+DQogICAgICAgICAgICA8VW5pdCBJRD0iVTA2MTIiIFVuaXQ9InB0IiBrPSIwLjAwMDQ3MzE3NjQ3MyIgRGlnaXQ9IjYiLz4NCiAgICAgICAgICAgIDxVbml0IElEPSJVMDYxMyIgVW5pdD0iZ2kiIGs9IjAuMDAwMTE4Mjk0MTE4IiBEaWdpdD0iNiIvPg0KICAgICAgICAgICAgPFVuaXQgSUQ9IlUwNjE0IiBVbml0PSJhY3JlLmZ0IiBrPSIxMjMzLjQ4MTgzNzU0NzUyIiBEaWdpdD0iMyIvPg0KICAgICAgICA8L1VuaXRHcm91cD4NCg0KICAgICAgICA8IS0tID09PT09PT09PT09PT09PT09PT09IOesrDA357uE77ya6YCf5bqmID09PT09PT09PT09PT09PT09PT09IC0tPg0KICAgICAgICA8VW5pdEdyb3VwIFR5cGU9InZlbG9jaXR5IiBOYW1lPSJ2ZWxvY2l0eSI+DQogICAgICAgICAgICA8VW5pdCBJRD0iVTA3MDEiIFVuaXQ9Im0vcyIgaz0iMSIgRGlnaXQ9IjMiIFJlbWFyaz0iYmFzZSB1bml0Ii8+DQogICAgICAgICAgICA8VW5pdCBJRD0iVTA3MDIiIFVuaXQ9ImttL2giIGs9IjAuMjc3Nzc3Nzc4IiBEaWdpdD0iNSIvPg0KICAgICAgICAgICAgPFVuaXQgSUQ9IlUwNzAzIiBVbml0PSJmdC9zIiBrPSIwLjMwNDgiIERpZ2l0PSI0Ii8+DQogICAgICAgICAgICA8VW5pdCBJRD0iVTA3MDQiIFVuaXQ9Im1pbGUvaCIgaz0iMC40NDcwNCIgRGlnaXQ9IjUiLz4NCiAgICAgICAgPC9Vbml0R3JvdXA+DQoNCiAgICAgICAgPCEtLSA9PT09PT09PT09PT09PT09PT09PSDnrKwwOOe7hO+8mua4qeW6piA9PT09PT09PT09PT09PT09PT09PSAtLT4NCiAgICAgICAgPFVuaXRHcm91cCBUeXBlPSJ0ZW1wZXJhdHVyZSIgTmFtZT0idGVtcGVyYXR1cmUiPg0KICAgICAgICAgICAgPFVuaXQgSUQ9IlUwODAxIiBVbml0PSJLIiBrPSIxIiBiPSIwIiBEaWdpdD0iMiIgUmVtYXJrPSJiYXNlIHVuaXQiLz4NCiAgICAgICAgICAgIDxVbml0IElEPSJVMDgwMiIgVW5pdD0i4oSDIiBrPSIxIiBiPSIyNzMuMTUiIERpZ2l0PSIyIi8+DQogICAgICAgICAgICA8VW5pdCBJRD0iVTA4MDMiIFVuaXQ9ImRlZ0MiIGs9IjEiIGI9IjI3My4xNSIgRGlnaXQ9IjIiLz4NCiAgICAgICAgICAgIDxVbml0IElEPSJVMDgwNCIgVW5pdD0iZGVnRiIgaz0iMC41NTU1NTU1NTU1NTU1NTYiIGI9IjI1NS4zNzIyMjIyMjIyMjIiIERpZ2l0PSIyIi8+DQogICAgICAgICAgICA8VW5pdCBJRD0iVTA4MDUiIFVuaXQ9IsKwRiIgaz0iMC41NTU1NTU1NTU1NTU1NTYiIGI9IjI1NS4zNzIyMjIyMjIyMjIiIERpZ2l0PSIyIi8+DQogICAgICAgICAgICA8VW5pdCBJRD0iVTA4MDYiIFVuaXQ9IlIiIGs9IjAuNTU1NTU1NTU1NTU1NTU2IiBiPSIwIiBEaWdpdD0iMiIvPg0KICAgICAgICA8L1VuaXRHcm91cD4NCg0KICAgICAgICA8IS0tID09PT09PT09PT09PT09PT09PT09IOesrDA557uE77ya5rip5beuID09PT09PT09PT09PT09PT09PT09IC0tPg0KICAgICAgICA8VW5pdEdyb3VwIFR5cGU9InRlbXBlcmF0dXJlX2RlbHRhIiBOYW1lPSJ0ZW1wZXJhdHVyZV9kZWx0YSI+DQogICAgICAgICAgICA8VW5pdCBJRD0iVTA5MDEiIFVuaXQ9IksiIGs9IjEiIERpZ2l0PSIyIiBSZW1hcms9ImJhc2UgdW5pdCIvPg0KICAgICAgICAgICAgPFVuaXQgSUQ9IlUwOTAyIiBVbml0PSLihIMiIGs9IjEiIERpZ2l0PSIyIi8+DQogICAgICAgICAgICA8VW5pdCBJRD0iVTA5MDMiIFVuaXQ9ImRlZ0MiIGs9IjEiIERpZ2l0PSIyIi8+DQogICAgICAgICAgICA8VW5pdCBJRD0iVTA5MDQiIFVuaXQ9ImRlZ0YiIGs9IjAuNTU1NTU1NTU1NTU1NTU2IiBEaWdpdD0iMiIvPg0KICAgICAgICAgICAgPFVuaXQgSUQ9IlUwOTA1IiBVbml0PSLCsEYiIGs9IjAuNTU1NTU1NTU1NTU1NTU2IiBEaWdpdD0iMiIvPg0KICAgICAgICAgICAgPFVuaXQgSUQ9IlUwOTA2IiBVbml0PSJSIiBrPSIwLjU1NTU1NTU1NTU1NTU1NiIgRGlnaXQ9IjIiLz4NCiAgICAgICAgPC9Vbml0R3JvdXA+DQoNCiAgICAgICAgPCEtLSA9PT09PT09PT09PT09PT09PT09PSDnrKwxMOe7hO+8muWcsOa4qeair+W6piA9PT09PT09PT09PT09PT09PT09PSAtLT4NCiAgICAgICAgPFVuaXRHcm91cCBUeXBlPSJnZW90aGVybWFsZ3JhZGllbnQiIE5hbWU9Imdlb3RoZXJtYWxncmFkaWVudCI+DQogICAgICAgICAgICA8VW5pdCBJRD0iVTEwMDEiIFVuaXQ9IksvbSIgaz0iMSIgRGlnaXQ9IjMiIFJlbWFyaz0iYmFzZSB1bml0Ii8+DQogICAgICAgICAgICA8VW5pdCBJRD0iVTEwMDIiIFVuaXQ9IuKEgy9rbSIgaz0iMC4wMDEiIERpZ2l0PSIzIi8+DQogICAgICAgICAgICA8VW5pdCBJRD0iVTEwMDMiIFVuaXQ9ImRlZy9rbSIgaz0iMC4wMDEiIERpZ2l0PSIzIi8+DQogICAgICAgICAgICA8VW5pdCBJRD0iVTEwMDQiIFVuaXQ9IsKwRi9mdCIgaz0iMS44MTgxODE4MTgxODE4MiIgRGlnaXQ9IjMiLz4NCiAgICAgICAgICAgIDxVbml0IElEPSJVMTAwNSIgVW5pdD0iRi9mdCIgaz0iMS44MTgxODE4MTgxODE4MiIgRGlnaXQ9IjMiLz4NCiAgICAgICAgICAgIDxVbml0IElEPSJVMTAwNiIgVW5pdD0iwrBGLzEwMGZ0IiBrPSIwLjAxODE4MTgxODE4MTgxODIiIERpZ2l0PSIzIi8+DQogICAgICAgICAgICA8VW5pdCBJRD0iVTEwMDciIFVuaXQ9IkYvbWlsZSIgaz0iMC4wMzQ0ODI3NTg2MjA2ODk3IiBEaWdpdD0iMyIvPg0KICAgICAgICA8L1VuaXRHcm91cD4NCg0KICAgICAgICA8IS0tID09PT09PT09PT09PT09PT09PT09IOesrDEx57uE77ya5Y6L5YqbID09PT09PT09PT09PT09PT09PT09IC0tPg0KICAgICAgICA8VW5pdEdyb3VwIFR5cGU9InByZXNzdXJlIiBOYW1lPSJwcmVzc3VyZSI+DQogICAgICAgICAgICA8VW5pdCBJRD0iVTExMDEiIFVuaXQ9IlBhIiBrPSIxIiBEaWdpdD0iMyIgUmVtYXJrPSJiYXNlIHVuaXQiLz4NCiAgICAgICAgICAgIDxVbml0IElEPSJVMTEwMiIgVW5pdD0ia1BhIiBrPSIxMDAwIiBEaWdpdD0iMiIvPg0KICAgICAgICAgICAgPFVuaXQgSUQ9IlUxMTAzIiBVbml0PSJNUGEiIGs9IjFlNiIgRGlnaXQ9IjMiLz4NCiAgICAgICAgICAgIDxVbml0IElEPSJVMTEwNCIgVW5pdD0iYmFyIiBrPSIxMDAwMDAiIERpZ2l0PSIzIi8+DQogICAgICAgICAgICA8VW5pdCBJRD0iVTExMDUiIFVuaXQ9Im1iYXIiIGs9IjEwMCIgRGlnaXQ9IjMiLz4NCiAgICAgICAgICAgIDxVbml0IElEPSJVMTEwNiIgVW5pdD0icHNpIiBrPSI2ODk0Ljc1NzI5IiBEaWdpdD0iMyIvPg0KICAgICAgICAgICAgPFVuaXQgSUQ9IlUxMTA3IiBVbml0PSJhdG0iIGs9IjEwMTMyNSIgRGlnaXQ9IjMiLz4NCiAgICAgICAgICAgIDxVbml0IElEPSJVMTEwOCIgVW5pdD0iYXQiIGs9Ijk4MDY2LjUiIERpZ2l0PSIzIi8+DQogICAgICAgICAgICA8VW5pdCBJRD0iVTExMDkiIFVuaXQ9ImtnZi9jbcKyIiBrPSI5ODA2Ni41IiBEaWdpdD0iMyIvPg0KICAgICAgICAgICAgPFVuaXQgSUQ9IlUxMTEwIiBVbml0PSJtbUhnIiBrPSIxMzMuMzIyMzY4IiBEaWdpdD0iMyIvPg0KICAgICAgICAgICAgPFVuaXQgSUQ9IlUxMTExIiBVbml0PSJUb3JyIiBrPSIxMzMuMzIyMzY4IiBEaWdpdD0iMyIvPg0KICAgICAgICAgICAgPFVuaXQgSUQ9IlUxMTEyIiBVbml0PSJtSDJPIiBrPSI5ODA2LjY1IiBEaWdpdD0iMyIvPg0KICAgICAgICAgICAgPFVuaXQgSUQ9IlUxMTEzIiBVbml0PSJtbUgyTyIgaz0iOS44MDY2NSIgRGlnaXQ9IjMiLz4NCiAgICAgICAgICAgIDxVbml0IElEPSJVMTExNCIgVW5pdD0iZHluL2NtwrIiIGs9IjAuMSIgRGlnaXQ9IjQiLz4NCiAgICAgICAgPC9Vbml0R3JvdXA+DQoNCiAgICAgICAgPCEtLSA9PT09PT09PT09PT09PT09PT09PSDnrKwxMue7hO+8muWvhuW6piA9PT09PT09PT09PT09PT09PT09PSAtLT4NCiAgICAgICAgPFVuaXRHcm91cCBUeXBlPSJkZW5zaXR5IiBOYW1lPSJkZW5zaXR5Ij4NCiAgICAgICAgICAgIDxVbml0IElEPSJVMTIwMSIgVW5pdD0ia2cvbcKzIiBrPSIxIiBEaWdpdD0iMyIgUmVtYXJrPSJiYXNlIHVuaXQiLz4NCiAgICAgICAgICAgIDxVbml0IElEPSJVMTIwMiIgVW5pdD0iZy9jbcKzIiBrPSIxMDAwIiBEaWdpdD0iMyIvPg0KICAgICAgICAgICAgPFVuaXQgSUQ9IlUxMjAzIiBVbml0PSJnL2NjIiBrPSIxMDAwIiBEaWdpdD0iMyIvPg0KICAgICAgICAgICAgPFVuaXQgSUQ9IlUxMjA0IiBVbml0PSJsYi9mdMKzIiBrPSIxNi4wMTg0NjM0IiBEaWdpdD0iMyIvPg0KICAgICAgICAgICAgPFVuaXQgSUQ9IlUxMjA1IiBVbml0PSJsYi9nYWwoVVMpIiBrPSIxMTkuODI2NDI3IiBEaWdpdD0iMyIvPg0KICAgICAgICAgICAgPFVuaXQgSUQ9IlUxMjA2IiBVbml0PSJsYi9nYWwoVUspIiBrPSI5OS43NzY0IiBEaWdpdD0iMyIvPg0KICAgICAgICAgICAgPFVuaXQgSUQ9IlUxMjA3IiBVbml0PSJsYi9iYmwiIGs9IjIuODUzIiBEaWdpdD0iMyIvPg0KICAgICAgICAgICAgPFVuaXQgSUQ9IlUxMjA4IiBVbml0PSJnL2Z0wrMiIGs9IjAuMDM1MzE0NyIgRGlnaXQ9IjMiLz4NCiAgICAgICAgICAgIDxVbml0IElEPSJVMTIwOSIgVW5pdD0iZy9jZiIgaz0iMC4wMzUzMTQ3IiBEaWdpdD0iMyIvPg0KICAgICAgICA8L1VuaXRHcm91cD4NCg0KICAgICAgICA8IS0tID09PT09PT09PT09PT09PT09PT09IOesrDEz57uE77ya5Yqo5Yqb57KY5bqmID09PT09PT09PT09PT09PT09PT09IC0tPg0KICAgICAgICA8VW5pdEdyb3VwIFR5cGU9InZpc2Nvc2l0eSIgTmFtZT0idmlzY29zaXR5X2R5bmFtaWMiPg0KICAgICAgICAgICAgPFVuaXQgSUQ9IlUxMzAxIiBVbml0PSJQYcK3cyIgaz0iMSIgRGlnaXQ9IjMiIFJlbWFyaz0iYmFzZSB1bml0Ii8+DQogICAgICAgICAgICA8VW5pdCBJRD0iVTEzMDIiIFVuaXQ9Im1QYcK3cyIgaz0iMC4wMDEiIERpZ2l0PSI0Ii8+DQogICAgICAgICAgICA8VW5pdCBJRD0iVTEzMDMiIFVuaXQ9ImNQIiBrPSIwLjAwMSIgRGlnaXQ9IjQiLz4NCiAgICAgICAgICAgIDxVbml0IElEPSJVMTMwNCIgVW5pdD0iUCIgaz0iMC4xIiBEaWdpdD0iNCIvPg0KICAgICAgICAgICAgPFVuaXQgSUQ9IlUxMzA1IiBVbml0PSJrZ2bCt3MvbcKyIiBrPSI5LjgwNjY1IiBEaWdpdD0iMyIvPg0KICAgICAgICAgICAgPFVuaXQgSUQ9IlUxMzA2IiBVbml0PSJsYmbCt3MvZnTCsiIgaz0iNDcuODgwMyIgRGlnaXQ9IjMiLz4NCiAgICAgICAgPC9Vbml0R3JvdXA+DQoNCiAgICAgICAgPCEtLSA9PT09PT09PT09PT09PT09PT09PSDnrKwxNOe7hO+8mui/kOWKqOeymOW6piA9PT09PT09PT09PT09PT09PT09PSAtLT4NCiAgICAgICAgPFVuaXRHcm91cCBUeXBlPSJ2aXNjb3NpdHlfa2luZW1hdGljIiBOYW1lPSJ2aXNjb3NpdHlfa2luZW1hdGljIj4NCiAgICAgICAgICAgIDxVbml0IElEPSJVMTQwMSIgVW5pdD0ibcKyL3MiIGs9IjEiIERpZ2l0PSI2IiBSZW1hcms9ImJhc2UgdW5pdCIvPg0KICAgICAgICAgICAgPFVuaXQgSUQ9IlUxNDAyIiBVbml0PSJtbcKyL3MiIGs9IjFlLTA2IiBEaWdpdD0iNiIvPg0KICAgICAgICAgICAgPFVuaXQgSUQ9IlUxNDAzIiBVbml0PSJjU3QiIGs9IjFlLTA2IiBEaWdpdD0iNiIvPg0KICAgICAgICAgICAgPFVuaXQgSUQ9IlUxNDA0IiBVbml0PSJTdCIgaz0iMC4wMDAxIiBEaWdpdD0iNiIvPg0KICAgICAgICAgICAgPFVuaXQgSUQ9IlUxNDA1IiBVbml0PSJjbcKyL3MiIGs9IjAuMDAwMSIgRGlnaXQ9IjYiLz4NCiAgICAgICAgICAgIDxVbml0IElEPSJVMTQwNiIgVW5pdD0iZnTCsi9zIiBrPSIwLjA5MjkwMzA0IiBEaWdpdD0iNiIvPg0KICAgICAgICA8L1VuaXRHcm91cD4NCg0KICAgICAgICA8IS0tID09PT09PT09PT09PT09PT09PT09IOesrDE157uE77ya5riX6YCP546HID09PT09PT09PT09PT09PT09PT09IC0tPg0KICAgICAgICA8VW5pdEdyb3VwIFR5cGU9InBlcm1lYWJpbGl0eSIgTmFtZT0icGVybWVhYmlsaXR5Ij4NCg0KICAgICAgICAgICAgPFVuaXQgSUQ9IlUxNTAxIiBVbml0PSJEYXJjeSIgaz0iMSIgRGlnaXQ9IjQiIFJlbWFyaz0iYmFzZSB1bml0Ii8+CiAgICAgICAgICAgIDxVbml0IElEPSJVMTUwMiIgVW5pdD0ibUQiIGs9IjAuMDAxIiBEaWdpdD0iNCIgLz4NCiAgICAgICAgICAgIDxVbml0IElEPSJVMTUwMyIgVW5pdD0iMS9jbcKyIiBrPSI5LjgxZSswNyIgRGlnaXQ9IjIiLz4NCg0KDQogICAgICAgIDwvVW5pdEdyb3VwPg0KDQogICAgICAgIDwhLS0gPT09PT09PT09PT09PT09PT09PT0g56ysMTbnu4TvvJrog73ph48gPT09PT09PT09PT09PT09PT09PT0gLS0+DQogICAgICAgIDxVbml0R3JvdXAgVHlwZT0iZW5lcmd5IiBOYW1lPSJlbmVyZ3kiPg0KICAgICAgICAgICAgPFVuaXQgSUQ9IlUxNjAxIiBVbml0PSJKIiBrPSIxIiBEaWdpdD0iMyIgUmVtYXJrPSJiYXNlIHVuaXQiLz4NCiAgICAgICAgICAgIDxVbml0IElEPSJVMTYwMiIgVW5pdD0ia0oiIGs9IjEwMDAiIERpZ2l0PSIyIi8+DQogICAgICAgICAgICA8VW5pdCBJRD0iVTE2MDMiIFVuaXQ9Ik1KIiBrPSIxZTYiIERpZ2l0PSIyIi8+DQogICAgICAgICAgICA8VW5pdCBJRD0iVTE2MDQiIFVuaXQ9ImNhbCIgaz0iNC4xODQiIERpZ2l0PSIzIi8+DQogICAgICAgICAgICA8VW5pdCBJRD0iVTE2MDUiIFVuaXQ9ImtjYWwiIGs9IjQxODQiIERpZ2l0PSIyIi8+DQogICAgICAgICAgICA8VW5pdCBJRD0iVTE2MDYiIFVuaXQ9IkJ0dSIgaz0iMTA1NS4wNTU4NTI2MiIgRGlnaXQ9IjMiLz4NCiAgICAgICAgICAgIDxVbml0IElEPSJVMTYwNyIgVW5pdD0iQlRVIiBrPSIxMDU1LjA1NTg1MjYyIiBEaWdpdD0iMyIvPg0KICAgICAgICAgICAgPFVuaXQgSUQ9IlUxNjA4IiBVbml0PSJrV8K3aCIgaz0iMy42ZTYiIERpZ2l0PSIzIi8+DQogICAgICAgICAgICA8VW5pdCBJRD0iVTE2MDkiIFVuaXQ9ImZ0wrdsYmYiIGs9IjEuMzU1ODE3OTQ4IiBEaWdpdD0iMyIvPg0KICAgICAgICAgICAgPFVuaXQgSUQ9IlUxNjEwIiBVbml0PSJrZ2bCt20iIGs9IjkuODA2NjUiIERpZ2l0PSIzIi8+DQogICAgICAgICAgICA8VW5pdCBJRD0iVTE2MTEiIFVuaXQ9ImhwwrdoIiBrPSIyLjY4NDUyZTYiIERpZ2l0PSIzIi8+DQogICAgICAgIDwvVW5pdEdyb3VwPg0KDQogICAgICAgIDwhLS0gPT09PT09PT09PT09PT09PT09PT0g56ysMTfnu4TvvJrlip/njocgPT09PT09PT09PT09PT09PT09PT0gLS0+DQogICAgICAgIDxVbml0R3JvdXAgVHlwZT0icG93ZXIiIE5hbWU9InBvd2VyIj4NCiAgICAgICAgICAgIDxVbml0IElEPSJVMTcwMSIgVW5pdD0iVyIgaz0iMSIgRGlnaXQ9IjMiIFJlbWFyaz0iYmFzZSB1bml0Ii8+DQogICAgICAgICAgICA8VW5pdCBJRD0iVTE3MDIiIFVuaXQ9ImtXIiBrPSIxMDAwIiBEaWdpdD0iMiIvPg0KICAgICAgICAgICAgPFVuaXQgSUQ9IlUxNzAzIiBVbml0PSJNVyIgaz0iMWU2IiBEaWdpdD0iMiIvPg0KICAgICAgICAgICAgPFVuaXQgSUQ9IlUxNzA0IiBVbml0PSJocCIgaz0iNzQ1LjY5OTg3MTU4MjI3IiBEaWdpdD0iMyIvPg0KICAgICAgICAgICAgPFVuaXQgSUQ9IlUxNzA1IiBVbml0PSJCdHUvaCIgaz0iMC4yOTMwNzEwNyIgRGlnaXQ9IjQiLz4NCiAgICAgICAgICAgIDxVbml0IElEPSJVMTcwNiIgVW5pdD0iY2FsL3MiIGs9IjQuMTg2OCIgRGlnaXQ9IjMiLz4NCiAgICAgICAgICAgIDxVbml0IElEPSJVMTcwNyIgVW5pdD0ia2dmwrdtL3MiIGs9IjkuODA2NjUiIERpZ2l0PSIzIi8+DQogICAgICAgIDwvVW5pdEdyb3VwPg0KDQogICAgICAgIDwhLS0gPT09PT09PT09PT09PT09PT09PT0g56ysMTjnu4TvvJrkvZPnp6/mtYHph48gPT09PT09PT09PT09PT09PT09PT0gLS0+DQogICAgICAgIDxVbml0R3JvdXAgVHlwZT0iZmxvd19yYXRlX3ZvbHVtZSIgTmFtZT0iZmxvd19yYXRlX3ZvbHVtZSI+DQogICAgICAgICAgICA8VW5pdCBJRD0iVTE4MDEiIFVuaXQ9Im3Csy9kIiBrPSIxIiBEaWdpdD0iMyIgUmVtYXJrPSJiYXNlIHVuaXQiLz4NCiAgICAgICAgICAgIDxVbml0IElEPSJVMTgwMiIgVW5pdD0ibcKzL3MiIGs9Ijg2NDAwIiBEaWdpdD0iNiIgUmVtYXJrPSIxIG3Csy9zID0gODY0MDAgbcKzL2QiLz4NCiAgICAgICAgICAgIDxVbml0IElEPSJVMTgwMyIgVW5pdD0ibcKzL2EiIGs9IjAuMDAyNzM5NzI2MDI3Mzk3MjYiIERpZ2l0PSI2IiBSZW1hcms9IjEgbcKzL2EgPSAxLzM2NSBtwrMvZCIvPg0KICAgICAgICAgICAgPFVuaXQgSUQ9IlUxODA0IiBVbml0PSJzdGIvZCIgaz0iMSIgRGlnaXQ9IjYiIFJlbWFyaz0iMSBzdGIvZCDiiYggMSBtwrMvZCAo5bel56iL6L+R5Ly8KSIvPg0KICAgICAgICAgICAgPFVuaXQgSUQ9IlUxODA1IiBVbml0PSJiYmwvZCIgaz0iMSIgRGlnaXQ9IjYiIFJlbWFyaz0iMSBiYmwvZCDiiYggMSBtwrMvZCAo5bel56iL6L+R5Ly8KSIvPg0KICAgICAgICAgICAgPFVuaXQgSUQ9IlUxODA2IiBVbml0PSJmdMKzL3MiIGs9IjI0NDYuNTc1IiBEaWdpdD0iNiIgUmVtYXJrPSIxIGZ0wrMvcyA9IDI0NDYuNTc1IG3Csy9kIi8+DQogICAgICAgICAgICA8VW5pdCBJRD0iVTE4MDciIFVuaXQ9ImZ0wrMvZCIgaz0iMC4wMjgzMTY4NDY1OTIiIERpZ2l0PSI2IiBSZW1hcms9IjEgZnTCsy9kID0gMC4wMjgzMTY4NDY1OTIgbcKzL2QiLz4NCiAgICAgICAgICAgIDxVbml0IElEPSJVMTgwOCIgVW5pdD0iTU1zY2YvZCIgaz0iMjgzMTYuODQ2NTkyIiBEaWdpdD0iNCIgUmVtYXJrPSIxIE1Nc2NmL2QgPSAyODMxNi44NDY1OTIgbcKzL2QgKOeQhuaDs+awlOS9kykiLz4NCiAgICAgICAgICAgIDxVbml0IElEPSJVMTgwOSIgVW5pdD0iTXNjZi9kIiBrPSIyOC4zMTY4NDY1OTIiIERpZ2l0PSI2IiBSZW1hcms9IjEgTXNjZi9kID0gMjguMzE2ODQ2NTkyIG3Csy9kICjnkIbmg7PmsJTkvZMpIi8+DQogICAgICAgICAgICA8VW5pdCBJRD0iVTE4MTAiIFVuaXQ9IjEw4oG0Km3Csy9kIiBrPSIxMDAwMCIgRGlnaXQ9IjQiIFJlbWFyaz0iMSDkuIfmlrkv5aSpID0gMTAwMDAgbcKzL2QiLz4NCiAgICAgICAgPC9Vbml0R3JvdXA+DQoNCiAgICAgICAgPCEtLSA9PT09PT09PT09PT09PT09PT09PSDnrKwxOee7hO+8muWOi+e8qeezu+aVsCA9PT09PT09PT09PT09PT09PT09PSAtLT4NCiAgICAgICAgPFVuaXRHcm91cCBUeXBlPSJjb21wcmVzc2liaWxpdHkiIE5hbWU9ImNvbXByZXNzaWJpbGl0eSI+DQogICAgICAgICAgICA8VW5pdCBJRD0iVTE5MDEiIFVuaXQ9IjEvTVBhIiBrPSIxIiBEaWdpdD0iNiIgUmVtYXJrPSJiYXNlIHVuaXQiLz4NCiAgICAgICAgICAgIDxVbml0IElEPSJVMTkwMiIgVW5pdD0iMS9QYSIgaz0iMWU2IiBEaWdpdD0iNiIvPg0KICAgICAgICAgICAgPFVuaXQgSUQ9IlUxOTAzIiBVbml0PSIxL3BzaSIgaz0iMTQ1LjAzNzczOCIgRGlnaXQ9IjYiLz4NCiAgICAgICAgICAgIDxVbml0IElEPSJVMTkwNCIgVW5pdD0iMS9hdG0iIGs9IjkuODY5MjMyNjY3MTYiIERpZ2l0PSI2Ii8+DQogICAgICAgICAgICA8VW5pdCBJRD0iVTE5MDUiIFVuaXQ9IjEvYmFyIiBrPSIxMCIgRGlnaXQ9IjYiLz4NCiAgICAgICAgPC9Vbml0R3JvdXA+DQoNCiAgICAgICAgPCEtLSA9PT09PT09PT09PT09PT09PT09PSDnrKwyMOe7hO+8mua1k+W6piA9PT09PT09PT09PT09PT09PT09PSAtLT4NCiAgICAgICAgPFVuaXRHcm91cCBUeXBlPSJjb25jZW50cmF0aW9uIiBOYW1lPSJjb25jZW50cmF0aW9uIj4NCiAgICAgICAgICAgIDxVbml0IElEPSJVMjAwMSIgVW5pdD0ia2cvbcKzIiBrPSIxIiBEaWdpdD0iMyIgUmVtYXJrPSJiYXNlIHVuaXQiLz4NCiAgICAgICAgICAgIDxVbml0IElEPSJVMjAwMiIgVW5pdD0iZy9MIiBrPSIxIiBEaWdpdD0iMyIvPg0KICAgICAgICAgICAgPFVuaXQgSUQ9IlUyMDAzIiBVbml0PSJtZy9MIiBrPSIwLjAwMSIgRGlnaXQ9IjQiLz4NCiAgICAgICAgICAgIDxVbml0IElEPSJVMjAwNCIgVW5pdD0izrxnL21MIiBrPSIwLjAwMSIgRGlnaXQ9IjQiLz4NCiAgICAgICAgICAgIDxVbml0IElEPSJVMjAwNSIgVW5pdD0icHBtIiBrPSIwLjAwMSIgRGlnaXQ9IjQiIFJlbWFyaz0iYXNzdW1pbmcgMSBwcG0gPSAxIG1nL2tnIGluIHdhdGVyIi8+DQogICAgICAgICAgICA8VW5pdCBJRD0iVTIwMDYiIFVuaXQ9IktwcG0iIGs9IjEiIERpZ2l0PSIzIi8+DQogICAgICAgICAgICA8VW5pdCBJRD0iVTIwMDciIFVuaXQ9Im1vbC9twrMiIGs9IjEiIERpZ2l0PSIzIi8+DQogICAgICAgIDwvVW5pdEdyb3VwPg0KDQogICAgICAgIDwhLS0gPT09PT09PT09PT09PT09PT09PT0g56ysMjHnu4TvvJrnmb7liIbmr5QgPT09PT09PT09PT09PT09PT09PT0gLS0+DQogICAgICAgIDxVbml0R3JvdXAgVHlwZT0icGVyY2VudCIgTmFtZT0icGVyY2VudCI+DQogICAgICAgICAgICA8VW5pdCBJRD0iVTIxMDEiIFVuaXQ9IiUiIGs9IjEiIERpZ2l0PSIyIiBSZW1hcms9ImJhc2UgdW5pdCIvPg0KICAgICAgICAgICAgPFVuaXQgSUQ9IlUyMTAyIiBVbml0PSJwdSIgaz0iMSIgRGlnaXQ9IjIiIFJlbWFyaz0icGVyIHVuaXQiLz4NCiAgICAgICAgICAgIDxVbml0IElEPSJVMjEwMyIgVW5pdD0iZnJhY3Rpb24iIGs9IjEwMCIgRGlnaXQ9IjIiLz4NCiAgICAgICAgICAgIDxVbml0IElEPSJVMjEwNCIgVW5pdD0idi92IiBrPSIxMDAiIERpZ2l0PSIyIi8+DQogICAgICAgICAgICA8VW5pdCBJRD0iVTIxMDUiIFVuaXQ9Im3Csy9twrMiIGs9IjEwMCIgRGlnaXQ9IjIiLz4NCiAgICAgICAgPC9Vbml0R3JvdXA+DQoNCiAgICAgICAgPCEtLSA9PT09PT09PT09PT09PT09PT09PSDnrKwyMue7hO+8muaFouW6pu+8iOWjsOazou+8iSA9PT09PT09PT09PT09PT09PT09PSAtLT4NCiAgICAgICAgPFVuaXRHcm91cCBUeXBlPSJzbG93bmVzcyIgTmFtZT0ic2xvd25lc3MiPg0KICAgICAgICAgICAgPFVuaXQgSUQ9IlUyMjAxIiBVbml0PSJzL20iIGs9IjEiIERpZ2l0PSIzIiBSZW1hcms9ImJhc2UgdW5pdCIvPg0KICAgICAgICAgICAgPFVuaXQgSUQ9IlUyMjAyIiBVbml0PSJ1cy9tIiBrPSIxZS0wNiIgRGlnaXQ9IjYiLz4NCiAgICAgICAgICAgIDxVbml0IElEPSJVMjIwMyIgVW5pdD0idXMvZnQiIGs9IjMuMjgwODM5ODk1MDEzMTJlLTA2IiBEaWdpdD0iNiIvPg0KICAgICAgICA8L1VuaXRHcm91cD4NCg0KICAgICAgICA8IS0tID09PT09PT09PT09PT09PT09PT09IOesrDIz57uE77ya5pS+5bCE5oCnID09PT09PT09PT09PT09PT09PT09IC0tPg0KICAgICAgICA8VW5pdEdyb3VwIFR5cGU9InJhZGlvYWN0aXZpdHkiIE5hbWU9InJhZGlvYWN0aXZpdHkiPg0KICAgICAgICAgICAgPFVuaXQgSUQ9IlUyMzAxIiBVbml0PSJBUEkiIGs9IjEiIERpZ2l0PSIxIiBSZW1hcms9ImJhc2UgdW5pdCIvPg0KICAgICAgICAgICAgPFVuaXQgSUQ9IlUyMzAyIiBVbml0PSJnQVBJIiBrPSIxIiBEaWdpdD0iMSIvPg0KICAgICAgICA8L1VuaXRHcm91cD4NCg0KICAgICAgICA8IS0tID09PT09PT09PT09PT09PT09PT09IOesrDI057uE77ya55S15Y6LID09PT09PT09PT09PT09PT09PT09IC0tPg0KICAgICAgICA8VW5pdEdyb3VwIFR5cGU9InZvbHRhZ2UiIE5hbWU9InZvbHRhZ2UiPg0KICAgICAgICAgICAgPFVuaXQgSUQ9IlUyNDAxIiBVbml0PSJWIiBrPSIxIiBEaWdpdD0iMyIgUmVtYXJrPSJiYXNlIHVuaXQiLz4NCiAgICAgICAgICAgIDxVbml0IElEPSJVMjQwMiIgVW5pdD0ibVYiIGs9IjAuMDAxIiBEaWdpdD0iNCIvPg0KICAgICAgICAgICAgPFVuaXQgSUQ9IlUyNDAzIiBVbml0PSJrViIgaz0iMTAwMCIgRGlnaXQ9IjIiLz4NCiAgICAgICAgPC9Vbml0R3JvdXA+DQoNCiAgICAgICAgPCEtLSA9PT09PT09PT09PT09PT09PT09PSDnrKwyNee7hO+8muWKmyA9PT09PT09PT09PT09PT09PT09PSAtLT4NCiAgICAgICAgPFVuaXRHcm91cCBUeXBlPSJmb3JjZSIgTmFtZT0iZm9yY2UiPg0KICAgICAgICAgICAgPFVuaXQgSUQ9IlUyNTAxIiBVbml0PSJOIiBrPSIxIiBEaWdpdD0iMyIgUmVtYXJrPSJiYXNlIHVuaXQiLz4NCiAgICAgICAgICAgIDxVbml0IElEPSJVMjUwMiIgVW5pdD0ia04iIGs9IjEwMDAiIERpZ2l0PSIyIi8+DQogICAgICAgICAgICA8VW5pdCBJRD0iVTI1MDMiIFVuaXQ9ImxiZiIgaz0iNC40NDgyMjE2MTUyNjA1IiBEaWdpdD0iMyIvPg0KICAgICAgICAgICAgPFVuaXQgSUQ9IlUyNTA0IiBVbml0PSJrZ2YiIGs9IjkuODA2NjUiIERpZ2l0PSIzIi8+DQogICAgICAgICAgICA8VW5pdCBJRD0iVTI1MDUiIFVuaXQ9ImR5biIgaz0iMWUtMDUiIERpZ2l0PSI2Ii8+DQogICAgICAgIDwvVW5pdEdyb3VwPg0KDQogICAgICAgIDwhLS0gPT09PT09PT09PT09PT09PT09PT0g56ysMjbnu4TvvJrpopHnjocgPT09PT09PT09PT09PT09PT09PT0gLS0+DQogICAgICAgIDxVbml0R3JvdXAgVHlwZT0iZnJlcXVlbmN5IiBOYW1lPSJmcmVxdWVuY3kiPg0KICAgICAgICAgICAgPFVuaXQgSUQ9IlUyNjAxIiBVbml0PSJIeiIgaz0iMSIgRGlnaXQ9IjMiIFJlbWFyaz0iYmFzZSB1bml0Ii8+DQogICAgICAgICAgICA8VW5pdCBJRD0iVTI2MDIiIFVuaXQ9ImtIeiIgaz0iMTAwMCIgRGlnaXQ9IjIiLz4NCiAgICAgICAgICAgIDxVbml0IElEPSJVMjYwMyIgVW5pdD0iTUh6IiBrPSIxZTYiIERpZ2l0PSIyIi8+DQogICAgICAgICAgICA8VW5pdCBJRD0iVTI2MDQiIFVuaXQ9IkdIeiIgaz0iMWU5IiBEaWdpdD0iMiIvPg0KICAgICAgICA8L1VuaXRHcm91cD4NCg0KICAgICAgICA8IS0tID09PT09PT09PT09PT09PT09PT09IOesrDI357uE77ya54Ot5a+8546HID09PT09PT09PT09PT09PT09PT09IC0tPg0KICAgICAgICA8VW5pdEdyb3VwIFR5cGU9InRoZXJtYWxfY29uZHVjdGl2aXR5IiBOYW1lPSJ0aGVybWFsX2NvbmR1Y3Rpdml0eSI+DQogICAgICAgICAgICA8VW5pdCBJRD0iVTI3MDEiIFVuaXQ9IlcvKG3Ct0spIiBrPSIxIiBEaWdpdD0iMyIgUmVtYXJrPSJiYXNlIHVuaXQiLz4NCiAgICAgICAgICAgIDxVbml0IElEPSJVMjcwMiIgVW5pdD0iVy8obcK34oSDKSIgaz0iMSIgRGlnaXQ9IjMiLz4NCiAgICAgICAgICAgIDxVbml0IElEPSJVMjcwMyIgVW5pdD0iQnR1LyhowrdmdMK3wrBGKSIgaz0iMS43MzA3MzUiIERpZ2l0PSIzIi8+DQogICAgICAgICAgICA8VW5pdCBJRD0iVTI3MDQiIFVuaXQ9ImNhbC8oY23Ct3PCt+KEgykiIGs9IjQxOC40IiBEaWdpdD0iMiIvPg0KICAgICAgICA8L1VuaXRHcm91cD4NCg0KICAgICAgICA8IS0tID09PT09PT09PT09PT09PT09PT09IOesrDI457uE77ya5q+U54Ot5a65ID09PT09PT09PT09PT09PT09PT09IC0tPg0KICAgICAgICA8VW5pdEdyb3VwIFR5cGU9InNwZWNpZmljX2hlYXQiIE5hbWU9InNwZWNpZmljX2hlYXQiPg0KICAgICAgICAgICAgPFVuaXQgSUQ9IlUyODAxIiBVbml0PSJKLyhrZ8K3SykiIGs9IjEiIERpZ2l0PSIzIiBSZW1hcms9ImJhc2UgdW5pdCIvPg0KICAgICAgICAgICAgPFVuaXQgSUQ9IlUyODAyIiBVbml0PSJKLyhnwrdLKSIgaz0iMTAwMCIgRGlnaXQ9IjIiLz4NCiAgICAgICAgICAgIDxVbml0IElEPSJVMjgwMyIgVW5pdD0iY2FsLyhnwrfihIMpIiBrPSI0MTg0IiBEaWdpdD0iMiIvPg0KICAgICAgICAgICAgPFVuaXQgSUQ9IlUyODA0IiBVbml0PSJCdHUvKGxiwrfCsEYpIiBrPSI0MTg2LjgiIERpZ2l0PSIyIi8+DQogICAgICAgIDwvVW5pdEdyb3VwPg0KDQogICAgICAgIDwhLS0gPT09PT09PT09PT09PT09PT09PT0g56ysMjnnu4TvvJrmkanlsJTotKjph48gPT09PT09PT09PT09PT09PT09PT0gLS0+DQogICAgICAgIDxVbml0R3JvdXAgVHlwZT0ibW9sYXJfbWFzcyIgTmFtZT0ibW9sYXJfbWFzcyI+DQogICAgICAgICAgICA8VW5pdCBJRD0iVTI5MDEiIFVuaXQ9ImtnL21vbCIgaz0iMSIgRGlnaXQ9IjMiIFJlbWFyaz0iYmFzZSB1bml0Ii8+DQogICAgICAgICAgICA8VW5pdCBJRD0iVTI5MDIiIFVuaXQ9ImcvbW9sIiBrPSIwLjAwMSIgRGlnaXQ9IjQiLz4NCiAgICAgICAgICAgIDxVbml0IElEPSJVMjkwMyIgVW5pdD0ibGIvbGJtb2wiIGs9IjAuNDUzNTkyMzciIERpZ2l0PSI0Ii8+DQogICAgICAgIDwvVW5pdEdyb3VwPg0KDQogICAgICAgIDwhLS0gPT09PT09PT09PT09PT09PT09PT0g56ysMzDnu4TvvJpVbmtub3duMSA9PT09PT09PT09PT09PT09PT09PSAtLT4NCiAgICAgICAgPFVuaXRHcm91cCBUeXBlPSJtb2xhcl9tYXNzIiBOYW1lPSJtb2xhcl9tYXNzIj4NCiAgICAgICAgICAgIDxVbml0IElEPSJVMzAwMSIgVW5pdD0ia2cvbW9sIiBrPSIxIiBEaWdpdD0iMyIgUmVtYXJrPSJiYXNlIHVuaXQiLz4NCiAgICAgICAgICAgIDxVbml0IElEPSJVMzAwMiIgVW5pdD0iZy9tb2wiIGs9IjAuMDAxIiBEaWdpdD0iNCIvPg0KICAgICAgICAgICAgPFVuaXQgSUQ9IlUzMDAzIiBVbml0PSJsYi9sYm1vbCIgaz0iMC40NTM1OTIzNyIgRGlnaXQ9IjQiLz4NCiAgICAgICAgPC9Vbml0R3JvdXA+DQoNCg0KDQogICAgICAgIDwhLS0gPT09PT09PT09PT09PT09PT09PT0g56ysMzHnu4TvvJpVbmtub3duMSA9PT09PT09PT09PT09PT09PT09PSAtLT4NCiAgICAgICAgPFVuaXRHcm91cCBUeXBlPSJ3cyIgTmFtZT0i55uQ5bqmIj4NCiAgICAgICAgICAgIDxVbml0IElEPSJVMzEwMSIgVW5pdD0ibWcvTCIgaz0iMSIvPg0KICAgICAgICAgICAgPFVuaXQgSUQ9IlUzMTAyIiBVbml0PSLOvGcvbUwiIGs9IjEiLz4NCiAgICAgICAgICAgIDxVbml0IElEPSJVMzEwMyIgVW5pdD0iZy9MIiBrPSIxMDAwIi8+DQogICAgICAgICAgICA8VW5pdCBJRD0iVTMxMDQiIFVuaXQ9ImtnL21eMyIgaz0iMC4wMDEiLz4NCiAgICAgICAgICAgIDxVbml0IElEPSJVMzEwNSIgVW5pdD0icHBtIiBrPSIxIi8+DQogICAgICAgICAgICA8VW5pdCBJRD0iVTMxMDYiIFVuaXQ9IktwcG0iIGs9IjEwMDAiLz4NCiAgICAgICAgPC9Vbml0R3JvdXA+DQoNCiAgICAgICAgPCEtLSA9PT09PT09PT09PT09PT09PT09PSDnrKwzMue7hO+8mlVua25vd24xID09PT09PT09PT09PT09PT09PT09IC0tPg0KICAgICAgICA8VW5pdEdyb3VwIFR5cGU9InZpc2Nvc2l0eSIgTmFtZT0idmlzY29zaXR5Ij4NCiAgICAgICAgICAgIDxVbml0IElEPSJVMzIwMSIgVW5pdD0iUGEucyIgaz0iMSIvPg0KICAgICAgICAgICAgPFVuaXQgSUQ9IlUzMjAyIiBVbml0PSJtUGEucyIgaz0iMC4wMDEiLz4NCiAgICAgICAgICAgIDxVbml0IElEPSJVMzIwMyIgVW5pdD0iUCIgaz0iMC4xIi8+DQogICAgICAgICAgICA8VW5pdCBJRD0iVTMyMDQiIFVuaXQ9ImNQIiBrPSIwLjAwMSIvPg0KICAgICAgICAgICAgPFVuaXQgSUQ9IlUzMjA1IiBVbml0PSJiZi5zL2Z0XjIiIGs9IjQ3Ljg4MDMiLz4NCiAgICAgICAgICAgIDxVbml0IElEPSJVMzIwNiIgVW5pdD0ia2dmLnMvbV4zIiBrPSI5LjgwNjY1Ii8+DQogICAgICAgIDwvVW5pdEdyb3VwPg0KDQogICAgICAgIDwhLS0gPT09PT09PT09PT09PT09PT09PT0g56ysMzPnu4TvvJrkupXnrZLlgqjpm4bns7vmlbAgPT09PT09PT09PT09PT09PT09PT0gLS0+DQogICAgICAgIDxVbml0R3JvdXAgVHlwZT0iVG9EbzMiIE5hbWU9IlRvRG8zIj4NCiAgICAgICAgICAgIDxVbml0IElEPSJVMzMwMSIgVW5pdD0ibV4zL01QYSIgaz0iMSIgRGlnaXQ9IjYiIFJlbWFyaz0iYmFzZSB1bml0Ii8+DQogICAgICAgIDwvVW5pdEdyb3VwPg0KDQogICAgPC9UeXBlT2Y+DQo8L1Jvb3Q+DQo=
\ No newline at end of file
+77u/PD94bWwgcup_mpadmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iVVRGLTgiPz4NCjxSb290Pg0KICAgIDxUeXwzyBlT2Y+DQogICAgICAgIDwhLS0gPT09PT09PT09PT09PT09PT09PT0g56ysMDHnu4TvvJrplb/luqYgPT09PT09PT09PT09PT09PT09PT0gLS0+DQogICAgICAgIDxVbml0R3JvdXAgVHlwZT0ibGVuZ3RoIiBOYW1lPSJsZW5ndGgiPg0KICAgICAgICAgICAgPFVuaXQgSUQ9IlUwMTAxIiBVbml0PSJtIiBrPSIxIiBEaWdpdD0iMyIgUmVtYXJrPSJiYXNlIHVuaXQiLz4NCiAgICAgICAgICAgIDxVbml0IElEPSJVMDEwMiIgVW5pdD0ia20iIGs9IjEwMDAiIERpZ2l0PSIwIi8+DQogICAgICAgICAgICA8VW5pdCBJRD0iVTAxMDMiIFVuaXQ9ImNtIiBrPSIwLjAxIiBEaWdpdD0iMyIvPg0KICAgICAgICAgICAgPFVuaXQgSUQ9IlUwMTA0IiBVbml0PSJtbSIgaz0iMC4wMDEiIERpZ2l0PSI0Ii8+DQogICAgICAgICAgICA8VW5pdCBJRD0iVTAxMDUiIFVuaXQ9ImluIiBrPSIwLjAyNTQiIERpZ2l0PSI0Ii8+DQogICAgICAgICAgICA8VW5pdCBJRD0iVTAxMDYiIFVuaXQ9ImZ0IiBrPSIwLjMwNDgiIERpZ2l0PSI0Ii8+DQogICAgICAgICAgICA8VW5pdCBJRD0iVTAxMDciIFVuaXQ9InlkIiBrPSIwLjkxNDQiIERpZ2l0PSI0Ii8+DQogICAgICAgICAgICA8VW5pdCBJRD0iVTAxMDgiIFVuaXQ9Im1pIiBrPSIxNjA5LjM0IiBEaWdpdD0iMiIvPg0KICAgICAgICAgICAgPFVuaXQgSUQ9IlUwMTA5IiBVbml0PSJubWlsZSIgaz0iMTg1MiIgRGlnaXQ9IjAiLz4NCiAgICAgICAgICAgIDxVbml0IElEPSJVMDExMCIgVW5pdD0ibm0iIGs9IjFlLTA5IiBEaWdpdD0iNiIvPg0KICAgICAgICA8L1VuaXRHcm91cD4NCg0KICAgICAgICA8IS0tID09PT09PT09PT09PT09PT09PT09IOesrDAy57uE77ya5pe26Ze0ID09PT09PT09PT09PT09PT09PT09IC0tPg0KICAgICAgICA8VW5pdEdyb3VwIFR5cGU9InRpbWUiIE5hbWU9InRpbWUiPg0KICAgICAgICAgICAgPFVuaXQgSUQ9IlUwMjAxIiBVbml0PSJzIiBrPSIxIiBEaWdpdD0iMyIgUmVtYXJrPSJiYXNlIHVuaXQiLz4NCiAgICAgICAgICAgIDxVbml0IElEPSJVMDIwMiIgVW5pdD0ibXMiIGs9IjAuMDAxIiBEaWdpdD0iNiIvPg0KICAgICAgICAgICAgPFVuaXQgSUQ9IlUwMjAzIiBVbml0PSJ1cyIgaz0iMWUtMDYiIERpZ2l0PSI2Ii8+DQogICAgICAgICAgICA8VW5pdCBJRD0iVTAyMDQiIFVuaXQ9Im1pbiIgaz0iNjAiIERpZ2l0PSIwIi8+DQogICAgICAgICAgICA8VW5pdCBJRD0iVTAyMDUiIFVuaXQ9ImgiIGs9IjM2MDAiIERpZ2l0PSIwIi8+DQogICAgICAgICAgICA8VW5pdCBJRD0iVTAyMDYiIFVuaXQ9ImQiIGs9Ijg2NDAwIiBEaWdpdD0iMCIvPg0KICAgICAgICA8L1VuaXRHcm91cD4NCg0KICAgICAgICA8IS0tID09PT09PT09PT09PT09PT09PT09IOesrDAz57uE77ya6LSo6YePID09PT09PT09PT09PT09PT09PT09IC0tPg0KICAgICAgICA8VW5pdEdyb3VwIFR5cGU9Im1hc3MiIE5hbWU9Im1hc3MiPg0KICAgICAgICAgICAgPFVuaXQgSUQ9IlUwMzAxIiBVbml0PSJrZyIgaz0iMSIgRGlnaXQ9IjMiIFJlbWFyaz0iYmFzZSB1bml0Ii8+DQogICAgICAgICAgICA8VW5pdCBJRD0iVTAzMDIiIFVuaXQ9ImciIGs9IjAuMDAxIiBEaWdpdD0iNiIvPg0KICAgICAgICAgICAgPFVuaXQgSUQ9IlUwMzAzIiBVbml0PSJ0b24iIGs9IjEwMDAiIERpZ2l0PSIwIi8+DQogICAgICAgICAgICA8VW5pdCBJRD0iVTAzMDQiIFVuaXQ9ImxiIiBrPSIwLjQ1MzU5MjM3IiBEaWdpdD0iNiIvPg0KICAgICAgICAgICAgPFVuaXQgSUQ9IlUwMzA1IiBVbml0PSJveiIgaz0iMC4wMjgzNDk1IiBEaWdpdD0iNiIvPg0KICAgICAgICAgICAgPFVuaXQgSUQ9IlUwMzA2IiBVbml0PSJzdG9uIiBrPSI5MDcuMTg1IiBEaWdpdD0iMyIvPg0KICAgICAgICAgICAgPFVuaXQgSUQ9IlUwMzA3IiBVbml0PSJsdG9uIiBrPSIxMDE2LjA1IiBEaWdpdD0iMiIvPg0KICAgICAgICA8L1VuaXRHcm91cD4NCg0KICAgICAgICA8IS0tID09PT09PT09PT09PT09PT09PT09IOesrDA057uE77ya6KeS5bqmID09PT09PT09PT09PT09PT09PT09IC0tPg0KICAgICAgICA8VW5pdEdyb3VwIFR5cGU9ImFuZ2xlIiBOYW1lPSJhbmdsZSI+DQogICAgICAgICAgICA8VW5pdCBJRD0iVTA0MDEiIFVuaXQ9InJhZCIgaz0iMSIgRGlnaXQ9IjYiIFJlbWFyaz0iYmFzZSB1bml0Ii8+DQogICAgICAgICAgICA8VW5pdCBJRD0iVTA0MDIiIFVuaXQ9ImRlZyIgaz0iMC4wMTc0NTMyOTI1MTk5NDMzIiBEaWdpdD0iNiIvPg0KICAgICAgICAgICAgPFVuaXQgSUQ9IlUwNDAzIiBVbml0PSJncmFkIiBrPSIwLjAxNTcwNzk2MzI2Nzk0OSIgRGlnaXQ9IjYiLz4NCiAgICAgICAgPC9Vbml0R3JvdXA+DQoNCiAgICAgICAgPCEtLSA9PT09PT09PT09PT09PT09PT09PSDnrKwwNee7hO+8mumdouenryA9PT09PT09PT09PT09PT09PT09PSAtLT4NCiAgICAgICAgPFVuaXRHcm91cCBUeXBlPSJhcmVhIiBOYW1lPSJhcmVhIj4NCiAgICAgICAgICAgIDxVbml0IElEPSJVMDUwMSIgVW5pdD0ibcKyIiBrPSIxIiBEaWdpdD0iMyIgUmVtYXJrPSJiYXNlIHVuaXQiLz4NCiAgICAgICAgICAgIDxVbml0IElEPSJVMDUwMiIgVW5pdD0ia23CsiIgaz0iMWU2IiBEaWdpdD0iMCIvPg0KICAgICAgICAgICAgPFVuaXQgSUQ9IlUwNTAzIiBVbml0PSJjbcKyIiBrPSIwLjAwMDEiIERpZ2l0PSI2Ii8+DQogICAgICAgICAgICA8VW5pdCBJRD0iVTA1MDQiIFVuaXQ9ImZ0wrIiIGs9IjAuMDkyOTAzMDQiIERpZ2l0PSI2Ii8+DQogICAgICAgICAgICA8VW5pdCBJRD0iVTA1MDUiIFVuaXQ9ImluwrIiIGs9IjAuMDAwNjQ1MTYiIERpZ2l0PSI2Ii8+DQogICAgICAgICAgICA8VW5pdCBJRD0iVTA1MDYiIFVuaXQ9ImFjcmUiIGs9IjQwNDYuODU2NDIyNCIgRGlnaXQ9IjMiLz4NCiAgICAgICAgICAgIDxVbml0IElEPSJVMDUwNyIgVW5pdD0iaGEiIGs9IjEwMDAwIiBEaWdpdD0iMCIvPg0KICAgICAgICAgICAgPFVuaXQgSUQ9IlUwNTA4IiBVbml0PSJ5ZMKyIiBrPSIwLjgzNjEyNzM2IiBEaWdpdD0iNCIvPg0KICAgICAgICA8L1VuaXRHcm91cD4NCg0KICAgICAgICA8IS0tID09PT09PT09PT09PT09PT09PT09IOesrDA257uE77ya5L2T56evID09PT09PT09PT09PT09PT09PT09IC0tPg0KICAgICAgICA8VW5pdEdyb3VwIFR5cGU9InZvbHVtZSIgTmFtZT0idm9sdW1lIj4NCiAgICAgICAgICAgIDxVbml0IElEPSJVMDYwMSIgVW5pdD0ibcKzIiBrPSIxIiBEaWdpdD0iMyIgUmVtYXJrPSJiYXNlIHVuaXQiLz4NCiAgICAgICAgICAgIDxVbml0IElEPSJVMDYwMiIgVW5pdD0iTCIgaz0iMC4wMDEiIERpZ2l0PSI0Ii8+DQogICAgICAgICAgICA8VW5pdCBJRD0iVTA2MDMiIFVuaXQ9Im1MIiBrPSIxZS0wNiIgRGlnaXQ9IjYiLz4NCiAgICAgICAgICAgIDxVbml0IElEPSJVMDYwNCIgVW5pdD0iY23CsyIgaz0iMWUtMDYiIERpZ2l0PSI2Ii8+DQogICAgICAgICAgICA8VW5pdCBJRD0iVTA2MDUiIFVuaXQ9ImNjIiBrPSIxZS0wNiIgRGlnaXQ9IjYiLz4NCiAgICAgICAgICAgIDxVbml0IElEPSJVMDYwNiIgVW5pdD0iYmJsIiBrPSIwLjE1ODk4NzI5NDkyOCIgRGlnaXQ9IjYiLz4NCiAgICAgICAgICAgIDxVbml0IElEPSJVMDYwNyIgVW5pdD0iZ2FsKFVTKSIgaz0iMC4wMDM3ODU0MTE3ODQiIERpZ2l0PSI2Ii8+DQogICAgICAgICAgICA8VW5pdCBJRD0iVTA2MDgiIFVuaXQ9ImdhbChVSykiIGs9IjAuMDA0NTQ2MDkiIERpZ2l0PSI2Ii8+DQogICAgICAgICAgICA8VW5pdCBJRD0iVTA2MDkiIFVuaXQ9ImZ0wrMiIGs9IjAuMDI4MzE2ODQ2NTkyIiBEaWdpdD0iNiIvPg0KICAgICAgICAgICAgPFVuaXQgSUQ9IlUwNjEwIiBVbml0PSJpbsKzIiBrPSIxLjYzODcwNjRlLTA1IiBEaWdpdD0iNiIvPg0KICAgICAgICAgICAgPFVuaXQgSUQ9IlUwNjExIiBVbml0PSJxdCIgaz0iMC4wMDA5NDYzNTI5NDYiIERpZ2l0PSI2Ii8+DQogICAgICAgICAgICA8VW5pdCBJRD0iVTA2MTIiIFVuaXQ9InB0IiBrPSIwLjAwMDQ3MzE3NjQ3MyIgRGlnaXQ9IjYiLz4NCiAgICAgICAgICAgIDxVbml0IElEPSJVMDYxMyIgVW5pdD0iZ2kiIGs9IjAuMDAwMTE4Mjk0MTE4IiBEaWdpdD0iNiIvPg0KICAgICAgICAgICAgPFVuaXQgSUQ9IlUwNjE0IiBVbml0PSJhY3JlLmZ0IiBrPSIxMjMzLjQ4MTgzNzU0NzUyIiBEaWdpdD0iMyIvPg0KICAgICAgICA8L1VuaXRHcm91cD4NCg0KICAgICAgICA8IS0tID09PT09PT09PT09PT09PT09PT09IOesrDA357uE77ya6YCf5bqmID09PT09PT09PT09PT09PT09PT09IC0tPg0KICAgICAgICA8VW5pdEdyb3VwIFR5cGU9InZlbG9jaXR5IiBOYW1lPSJ2ZWxvY2l0eSI+DQogICAgICAgICAgICA8VW5pdCBJRD0iVTA3MDEiIFVuaXQ9Im0vcyIgaz0iMSIgRGlnaXQ9IjMiIFJlbWFyaz0iYmFzZSB1bml0Ii8+DQogICAgICAgICAgICA8VW5pdCBJRD0iVTA3MDIiIFVuaXQ9ImttL2giIGs9IjAuMjc3Nzc3Nzc4IiBEaWdpdD0iNSIvPg0KICAgICAgICAgICAgPFVuaXQgSUQ9IlUwNzAzIiBVbml0PSJmdC9zIiBrPSIwLjMwNDgiIERpZ2l0PSI0Ii8+DQogICAgICAgICAgICA8VW5pdCBJRD0iVTA3MDQiIFVuaXQ9Im1pbGUvaCIgaz0iMC40NDcwNCIgRGlnaXQ9IjUiLz4NCiAgICAgICAgPC9Vbml0R3JvdXA+DQoNCiAgICAgICAgPCEtLSA9PT09PT09PT09PT09PT09PT09PSDnrKwwOOe7hO+8mua4qeW6piA9PT09PT09PT09PT09PT09PT09PSAtLT4NCiAgICAgICAgPFVuaXRHcm91cCBUeXBlPSJ0ZW1wZXJhdHVyZSIgTmFtZT0idGVtcGVyYXR1cmUiPg0KICAgICAgICAgICAgPFVuaXQgSUQ9IlUwODAxIiBVbml0PSJLIiBrPSIxIiBiPSIwIiBEaWdpdD0iMiIgUmVtYXJrPSJiYXNlIHVuaXQiLz4NCiAgICAgICAgICAgIDxVbml0IElEPSJVMDgwMiIgVW5pdD0i4oSDIiBrPSIxIiBiPSIyNzMuMTUiIERpZ2l0PSIyIi8+DQogICAgICAgICAgICA8VW5pdCBJRD0iVTA4MDMiIFVuaXQ9ImRlZ0MiIGs9IjEiIGI9IjI3My4xNSIgRGlnaXQ9IjIiLz4NCiAgICAgICAgICAgIDxVbml0IElEPSJVMDgwNCIgVW5pdD0iZGVnRiIgaz0iMC41NTU1NTU1NTU1NTU1NTYiIGI9IjI1NS4zNzIyMjIyMjIyMjIiIERpZ2l0PSIyIi8+DQogICAgICAgICAgICA8VW5pdCBJRD0iVTA4MDUiIFVuaXQ9IsKwRiIgaz0iMC41NTU1NTU1NTU1NTU1NTYiIGI9IjI1NS4zNzIyMjIyMjIyMjIiIERpZ2l0PSIyIi8+DQogICAgICAgICAgICA8VW5pdCBJRD0iVTA4MDYiIFVuaXQ9IlIiIGs9IjAuNTU1NTU1NTU1NTU1NTU2IiBiPSIwIiBEaWdpdD0iMiIvPg0KICAgICAgICA8L1VuaXRHcm91cD4NCg0KICAgICAgICA8IS0tID09PT09PT09PT09PT09PT09PT09IOesrDA557uE77ya5rip5beuID09PT09PT09PT09PT09PT09PT09IC0tPg0KICAgICAgICA8VW5pdEdyb3VwIFR5cGU9InRlbXBlcmF0dXJlX2RlbHRhIiBOYW1lPSJ0ZW1wZXJhdHVyZV9kZWx0YSI+DQogICAgICAgICAgICA8VW5pdCBJRD0iVTA5MDEiIFVuaXQ9IksiIGs9IjEiIERpZ2l0PSIyIiBSZW1hcms9ImJhc2UgdW5pdCIvPg0KICAgICAgICAgICAgPFVuaXQgSUQ9IlUwOTAyIiBVbml0PSLihIMiIGs9IjEiIERpZ2l0PSIyIi8+DQogICAgICAgICAgICA8VW5pdCBJRD0iVTA5MDMiIFVuaXQ9ImRlZ0MiIGs9IjEiIERpZ2l0PSIyIi8+DQogICAgICAgICAgICA8VW5pdCBJRD0iVTA5MDQiIFVuaXQ9ImRlZ0YiIGs9IjAuNTU1NTU1NTU1NTU1NTU2IiBEaWdpdD0iMiIvPg0KICAgICAgICAgICAgPFVuaXQgSUQ9IlUwOTA1IiBVbml0PSLCsEYiIGs9IjAuNTU1NTU1NTU1NTU1NTU2IiBEaWdpdD0iMiIvPg0KICAgICAgICAgICAgPFVuaXQgSUQ9IlUwOTA2IiBVbml0PSJSIiBrPSIwLjU1NTU1NTU1NTU1NTU1NiIgRGlnaXQ9IjIiLz4NCiAgICAgICAgPC9Vbml0R3JvdXA+DQoNCiAgICAgICAgPCEtLSA9PT09PT09PT09PT09PT09PT09PSDnrKwxMOe7hO+8muWcsOa4qeair+W6piA9PT09PT09PT09PT09PT09PT09PSAtLT4NCiAgICAgICAgPFVuaXRHcm91cCBUeXBlPSJnZW90aGVybWFsZ3JhZGllbnQiIE5hbWU9Imdlb3RoZXJtYWxncmFkaWVudCI+DQogICAgICAgICAgICA8VW5pdCBJRD0iVTEwMDEiIFVuaXQ9IksvbSIgaz0iMSIgRGlnaXQ9IjMiIFJlbWFyaz0iYmFzZSB1bml0Ii8+DQogICAgICAgICAgICA8VW5pdCBJRD0iVTEwMDIiIFVuaXQ9IuKEgy9rbSIgaz0iMC4wMDEiIERpZ2l0PSIzIi8+DQogICAgICAgICAgICA8VW5pdCBJRD0iVTEwMDMiIFVuaXQ9ImRlZy9rbSIgaz0iMC4wMDEiIERpZ2l0PSIzIi8+DQogICAgICAgICAgICA8VW5pdCBJRD0iVTEwMDQiIFVuaXQ9IsKwRi9mdCIgaz0iMS44MTgxODE4MTgxODE4MiIgRGlnaXQ9IjMiLz4NCiAgICAgICAgICAgIDxVbml0IElEPSJVMTAwNSIgVW5pdD0iRi9mdCIgaz0iMS44MTgxODE4MTgxODE4MiIgRGlnaXQ9IjMiLz4NCiAgICAgICAgICAgIDxVbml0IElEPSJVMTAwNiIgVW5pdD0iwrBGLzEwMGZ0IiBrPSIwLjAxODE4MTgxODE4MTgxODIiIERpZ2l0PSIzIi8+DQogICAgICAgICAgICA8VW5pdCBJRD0iVTEwMDciIFVuaXQ9IkYvbWlsZSIgaz0iMC4wMzQ0ODI3NTg2MjA2ODk3IiBEaWdpdD0iMyIvPg0KICAgICAgICA8L1VuaXRHcm91cD4NCg0KICAgICAgICA8IS0tID09PT09PT09PT09PT09PT09PT09IOesrDEx57uE77ya5Y6L5YqbID09PT09PT09PT09PT09PT09PT09IC0tPg0KICAgICAgICA8VW5pdEdyb3VwIFR5cGU9InByZXNzdXJlIiBOYW1lPSJwcmVzc3VyZSI+DQogICAgICAgICAgICA8VW5pdCBJRD0iVTExMDEiIFVuaXQ9IlBhIiBrPSIxIiBEaWdpdD0iMyIgUmVtYXJrPSJiYXNlIHVuaXQiLz4NCiAgICAgICAgICAgIDxVbml0IElEPSJVMTEwMiIgVW5pdD0ia1BhIiBrPSIxMDAwIiBEaWdpdD0iMiIvPg0KICAgICAgICAgICAgPFVuaXQgSUQ9IlUxMTAzIiBVbml0PSJNUGEiIGs9IjFlNiIgRGlnaXQ9IjMiLz4NCiAgICAgICAgICAgIDxVbml0IElEPSJVMTEwNCIgVW5pdD0iYmFyIiBrPSIxMDAwMDAiIERpZ2l0PSIzIi8+DQogICAgICAgICAgICA8VW5pdCBJRD0iVTExMDUiIFVuaXQ9Im1iYXIiIGs9IjEwMCIgRGlnaXQ9IjMiLz4NCiAgICAgICAgICAgIDxVbml0IElEPSJVMTEwNiIgVW5pdD0icHNpIiBrPSI2ODk0Ljc1NzI5IiBEaWdpdD0iMyIvPg0KICAgICAgICAgICAgPFVuaXQgSUQ9IlUxMTA3IiBVbml0PSJhdG0iIGs9IjEwMTMyNSIgRGlnaXQ9IjMiLz4NCiAgICAgICAgICAgIDxVbml0IElEPSJVMTEwOCIgVW5pdD0iYXQiIGs9Ijk4MDY2LjUiIERpZ2l0PSIzIi8+DQogICAgICAgICAgICA8VW5pdCBJRD0iVTExMDkiIFVuaXQ9ImtnZi9jbcKyIiBrPSI5ODA2Ni41IiBEaWdpdD0iMyIvPg0KICAgICAgICAgICAgPFVuaXQgSUQ9IlUxMTEwIiBVbml0PSJtbUhnIiBrPSIxMzMuMzIyMzY4IiBEaWdpdD0iMyIvPg0KICAgICAgICAgICAgPFVuaXQgSUQ9IlUxMTExIiBVbml0PSJUb3JyIiBrPSIxMzMuMzIyMzY4IiBEaWdpdD0iMyIvPg0KICAgICAgICAgICAgPFVuaXQgSUQ9IlUxMTEyIiBVbml0PSJtSDJPIiBrPSI5ODA2LjY1IiBEaWdpdD0iMyIvPg0KICAgICAgICAgICAgPFVuaXQgSUQ9IlUxMTEzIiBVbml0PSJtbUgyTyIgaz0iOS44MDY2NSIgRGlnaXQ9IjMiLz4NCiAgICAgICAgICAgIDxVbml0IElEPSJVMTExNCIgVW5pdD0iZHluL2NtwrIiIGs9IjAuMSIgRGlnaXQ9IjQiLz4NCiAgICAgICAgPC9Vbml0R3JvdXA+DQoNCiAgICAgICAgPCEtLSA9PT09PT09PT09PT09PT09PT09PSDnrKwxMue7hO+8muWvhuW6piA9PT09PT09PT09PT09PT09PT09PSAtLT4NCiAgICAgICAgPFVuaXRHcm91cCBUeXBlPSJkZW5zaXR5IiBOYW1lPSJkZW5zaXR5Ij4NCiAgICAgICAgICAgIDxVbml0IElEPSJVMTIwMSIgVW5pdD0ia2cvbcKzIiBrPSIxIiBEaWdpdD0iMyIgUmVtYXJrPSJiYXNlIHVuaXQiLz4NCiAgICAgICAgICAgIDxVbml0IElEPSJVMTIwMiIgVW5pdD0iZy9jbcKzIiBrPSIxMDAwIiBEaWdpdD0iMyIvPg0KICAgICAgICAgICAgPFVuaXQgSUQ9IlUxMjAzIiBVbml0PSJnL2NjIiBrPSIxMDAwIiBEaWdpdD0iMyIvPg0KICAgICAgICAgICAgPFVuaXQgSUQ9IlUxMjA0IiBVbml0PSJsYi9mdMKzIiBrPSIxNi4wMTg0NjM0IiBEaWdpdD0iMyIvPg0KICAgICAgICAgICAgPFVuaXQgSUQ9IlUxMjA1IiBVbml0PSJsYi9nYWwoVVMpIiBrPSIxMTkuODI2NDI3IiBEaWdpdD0iMyIvPg0KICAgICAgICAgICAgPFVuaXQgSUQ9IlUxMjA2IiBVbml0PSJsYi9nYWwoVUspIiBrPSI5OS43NzY0IiBEaWdpdD0iMyIvPg0KICAgICAgICAgICAgPFVuaXQgSUQ9IlUxMjA3IiBVbml0PSJsYi9iYmwiIGs9IjIuODUzIiBEaWdpdD0iMyIvPg0KICAgICAgICAgICAgPFVuaXQgSUQ9IlUxMjA4IiBVbml0PSJnL2Z0wrMiIGs9IjAuMDM1MzE0NyIgRGlnaXQ9IjMiLz4NCiAgICAgICAgICAgIDxVbml0IElEPSJVMTIwOSIgVW5pdD0iZy9jZiIgaz0iMC4wMzUzMTQ3IiBEaWdpdD0iMyIvPg0KICAgICAgICA8L1VuaXRHcm91cD4NCg0KICAgICAgICA8IS0tID09PT09PT09PT09PT09PT09PT09IOesrDEz57uE77ya5Yqo5Yqb57KY5bqmID09PT09PT09PT09PT09PT09PT09IC0tPg0KICAgICAgICA8VW5pdEdyb3VwIFR5cGU9InZpc2Nvc2l0eSIgTmFtZT0idmlzY29zaXR5X2R5bmFtaWMiPg0KICAgICAgICAgICAgPFVuaXQgSUQ9IlUxMzAxIiBVbml0PSJQYcK3cyIgaz0iMSIgRGlnaXQ9IjMiIFJlbWFyaz0iYmFzZSB1bml0Ii8+DQogICAgICAgICAgICA8VW5pdCBJRD0iVTEzMDIiIFVuaXQ9Im1QYcK3cyIgaz0iMC4wMDEiIERpZ2l0PSI0Ii8+DQogICAgICAgICAgICA8VW5pdCBJRD0iVTEzMDMiIFVuaXQ9ImNQIiBrPSIwLjAwMSIgRGlnaXQ9IjQiLz4NCiAgICAgICAgICAgIDxVbml0IElEPSJVMTMwNCIgVW5pdD0iUCIgaz0iMC4xIiBEaWdpdD0iNCIvPg0KICAgICAgICAgICAgPFVuaXQgSUQ9IlUxMzA1IiBVbml0PSJrZ2bCt3MvbcKyIiBrPSI5LjgwNjY1IiBEaWdpdD0iMyIvPg0KICAgICAgICAgICAgPFVuaXQgSUQ9IlUxMzA2IiBVbml0PSJsYmbCt3MvZnTCsiIgaz0iNDcuODgwMyIgRGlnaXQ9IjMiLz4NCiAgICAgICAgPC9Vbml0R3JvdXA+DQoNCiAgICAgICAgPCEtLSA9PT09PT09PT09PT09PT09PT09PSDnrKwxNOe7hO+8mui/kOWKqOeymOW6piA9PT09PT09PT09PT09PT09PT09PSAtLT4NCiAgICAgICAgPFVuaXRHcm91cCBUeXBlPSJ2aXNjb3NpdHlfa2luZW1hdGljIiBOYW1lPSJ2aXNjb3NpdHlfa2luZW1hdGljIj4NCiAgICAgICAgICAgIDxVbml0IElEPSJVMTQwMSIgVW5pdD0ibcKyL3MiIGs9IjEiIERpZ2l0PSI2IiBSZW1hcms9ImJhc2UgdW5pdCIvPg0KICAgICAgICAgICAgPFVuaXQgSUQ9IlUxNDAyIiBVbml0PSJtbcKyL3MiIGs9IjFlLTA2IiBEaWdpdD0iNiIvPg0KICAgICAgICAgICAgPFVuaXQgSUQ9IlUxNDAzIiBVbml0PSJjU3QiIGs9IjFlLTA2IiBEaWdpdD0iNiIvPg0KICAgICAgICAgICAgPFVuaXQgSUQ9IlUxNDA0IiBVbml0PSJTdCIgaz0iMC4wMDAxIiBEaWdpdD0iNiIvPg0KICAgICAgICAgICAgPFVuaXQgSUQ9IlUxNDA1IiBVbml0PSJjbcKyL3MiIGs9IjAuMDAwMSIgRGlnaXQ9IjYiLz4NCiAgICAgICAgICAgIDxVbml0IElEPSJVMTQwNiIgVW5pdD0iZnTCsi9zIiBrPSIwLjA5MjkwMzA0IiBEaWdpdD0iNiIvPg0KICAgICAgICA8L1VuaXRHcm91cD4NCg0KICAgICAgICA8IS0tID09PT09PT09PT09PT09PT09PT09IOesrDE157uE77ya5riX6YCP546HID09PT09PT09PT09PT09PT09PT09IC0tPg0KICAgICAgICA8VW5pdEdyb3VwIFR5cGU9InBlcm1lYWJpbGl0eSIgTmFtZT0icGVybWVhYmlsaXR5Ij4NCg0KICAgICAgICAgICAgPFVuaXQgSUQ9IlUxNTAxIiBVbml0PSJEIiBrPSIxIiBEaWdpdD0iNCIgUmVtYXJrPSJiYXNlIHVuaXQiLz4NCiAgICAgICAgICAgIDxVbml0IElEPSJVMTUwMiIgVW5pdD0ibUQiIGs9IjAuMDAxIiBEaWdpdD0iNCIgLz4NCiAgICAgICAgICAgIDxVbml0IElEPSJVMTUwMyIgVW5pdD0iMS9jbcKyIiBrPSI5LjgxZSswNyIgRGlnaXQ9IjIiLz4NCg0KDQogICAgICAgIDwvVW5pdEdyb3VwPg0KDQogICAgICAgIDwhLS0gPT09PT09PT09PT09PT09PT09PT0g56ysMTbnu4TvvJrog73ph48gPT09PT09PT09PT09PT09PT09PT0gLS0+DQogICAgICAgIDxVbml0R3JvdXAgVHlwZT0iZW5lcmd5IiBOYW1lPSJlbmVyZ3kiPg0KICAgICAgICAgICAgPFVuaXQgSUQ9IlUxNjAxIiBVbml0PSJKIiBrPSIxIiBEaWdpdD0iMyIgUmVtYXJrPSJiYXNlIHVuaXQiLz4NCiAgICAgICAgICAgIDxVbml0IElEPSJVMTYwMiIgVW5pdD0ia0oiIGs9IjEwMDAiIERpZ2l0PSIyIi8+DQogICAgICAgICAgICA8VW5pdCBJRD0iVTE2MDMiIFVuaXQ9Ik1KIiBrPSIxZTYiIERpZ2l0PSIyIi8+DQogICAgICAgICAgICA8VW5pdCBJRD0iVTE2MDQiIFVuaXQ9ImNhbCIgaz0iNC4xODQiIERpZ2l0PSIzIi8+DQogICAgICAgICAgICA8VW5pdCBJRD0iVTE2MDUiIFVuaXQ9ImtjYWwiIGs9IjQxODQiIERpZ2l0PSIyIi8+DQogICAgICAgICAgICA8VW5pdCBJRD0iVTE2MDYiIFVuaXQ9IkJ0dSIgaz0iMTA1NS4wNTU4NTI2MiIgRGlnaXQ9IjMiLz4NCiAgICAgICAgICAgIDxVbml0IElEPSJVMTYwNyIgVW5pdD0iQlRVIiBrPSIxMDU1LjA1NTg1MjYyIiBEaWdpdD0iMyIvPg0KICAgICAgICAgICAgPFVuaXQgSUQ9IlUxNjA4IiBVbml0PSJrV8K3aCIgaz0iMy42ZTYiIERpZ2l0PSIzIi8+DQogICAgICAgICAgICA8VW5pdCBJRD0iVTE2MDkiIFVuaXQ9ImZ0wrdsYmYiIGs9IjEuMzU1ODE3OTQ4IiBEaWdpdD0iMyIvPg0KICAgICAgICAgICAgPFVuaXQgSUQ9IlUxNjEwIiBVbml0PSJrZ2bCt20iIGs9IjkuODA2NjUiIERpZ2l0PSIzIi8+DQogICAgICAgICAgICA8VW5pdCBJRD0iVTE2MTEiIFVuaXQ9ImhwwrdoIiBrPSIyLjY4NDUyZTYiIERpZ2l0PSIzIi8+DQogICAgICAgIDwvVW5pdEdyb3VwPg0KDQogICAgICAgIDwhLS0gPT09PT09PT09PT09PT09PT09PT0g56ysMTfnu4TvvJrlip/njocgPT09PT09PT09PT09PT09PT09PT0gLS0+DQogICAgICAgIDxVbml0R3JvdXAgVHlwZT0icG93ZXIiIE5hbWU9InBvd2VyIj4NCiAgICAgICAgICAgIDxVbml0IElEPSJVMTcwMSIgVW5pdD0iVyIgaz0iMSIgRGlnaXQ9IjMiIFJlbWFyaz0iYmFzZSB1bml0Ii8+DQogICAgICAgICAgICA8VW5pdCBJRD0iVTE3MDIiIFVuaXQ9ImtXIiBrPSIxMDAwIiBEaWdpdD0iMiIvPg0KICAgICAgICAgICAgPFVuaXQgSUQ9IlUxNzAzIiBVbml0PSJNVyIgaz0iMWU2IiBEaWdpdD0iMiIvPg0KICAgICAgICAgICAgPFVuaXQgSUQ9IlUxNzA0IiBVbml0PSJocCIgaz0iNzQ1LjY5OTg3MTU4MjI3IiBEaWdpdD0iMyIvPg0KICAgICAgICAgICAgPFVuaXQgSUQ9IlUxNzA1IiBVbml0PSJCdHUvaCIgaz0iMC4yOTMwNzEwNyIgRGlnaXQ9IjQiLz4NCiAgICAgICAgICAgIDxVbml0IElEPSJVMTcwNiIgVW5pdD0iY2FsL3MiIGs9IjQuMTg2OCIgRGlnaXQ9IjMiLz4NCiAgICAgICAgICAgIDxVbml0IElEPSJVMTcwNyIgVW5pdD0ia2dmwrdtL3MiIGs9IjkuODA2NjUiIERpZ2l0PSIzIi8+DQogICAgICAgIDwvVW5pdEdyb3VwPg0KDQogICAgICAgIDwhLS0gPT09PT09PT09PT09PT09PT09PT0g56ysMTjnu4TvvJrkvZPnp6/mtYHph48gPT09PT09PT09PT09PT09PT09PT0gLS0+DQogICAgICAgIDxVbml0R3JvdXAgVHlwZT0iZmxvd19yYXRlX3ZvbHVtZSIgTmFtZT0iZmxvd19yYXRlX3ZvbHVtZSI+DQogICAgICAgICAgICA8VW5pdCBJRD0iVTE4MDEiIFVuaXQ9Im3Csy9kIiBrPSIxIiBEaWdpdD0iMyIgUmVtYXJrPSJiYXNlIHVuaXQiLz4NCiAgICAgICAgICAgIDxVbml0IElEPSJVMTgwMiIgVW5pdD0ibcKzL3MiIGs9Ijg2NDAwIiBEaWdpdD0iNiIgUmVtYXJrPSIxIG3Csy9zID0gODY0MDAgbcKzL2QiLz4NCiAgICAgICAgICAgIDxVbml0IElEPSJVMTgwMyIgVW5pdD0ibcKzL2EiIGs9IjAuMDAyNzM5NzI2MDI3Mzk3MjYiIERpZ2l0PSI2IiBSZW1hcms9IjEgbcKzL2EgPSAxLzM2NSBtwrMvZCIvPg0KICAgICAgICAgICAgPFVuaXQgSUQ9IlUxODA0IiBVbml0PSJzdGIvZCIgaz0iMSIgRGlnaXQ9IjYiIFJlbWFyaz0iMSBzdGIvZCDiiYggMSBtwrMvZCAo5bel56iL6L+R5Ly8KSIvPg0KICAgICAgICAgICAgPFVuaXQgSUQ9IlUxODA1IiBVbml0PSJiYmwvZCIgaz0iMSIgRGlnaXQ9IjYiIFJlbWFyaz0iMSBiYmwvZCDiiYggMSBtwrMvZCAo5bel56iL6L+R5Ly8KSIvPg0KICAgICAgICAgICAgPFVuaXQgSUQ9IlUxODA2IiBVbml0PSJmdMKzL3MiIGs9IjI0NDYuNTc1IiBEaWdpdD0iNiIgUmVtYXJrPSIxIGZ0wrMvcyA9IDI0NDYuNTc1IG3Csy9kIi8+DQogICAgICAgICAgICA8VW5pdCBJRD0iVTE4MDciIFVuaXQ9ImZ0wrMvZCIgaz0iMC4wMjgzMTY4NDY1OTIiIERpZ2l0PSI2IiBSZW1hcms9IjEgZnTCsy9kID0gMC4wMjgzMTY4NDY1OTIgbcKzL2QiLz4NCiAgICAgICAgICAgIDxVbml0IElEPSJVMTgwOCIgVW5pdD0iTU1zY2YvZCIgaz0iMjgzMTYuODQ2NTkyIiBEaWdpdD0iNCIgUmVtYXJrPSIxIE1Nc2NmL2QgPSAyODMxNi44NDY1OTIgbcKzL2QgKOeQhuaDs+awlOS9kykiLz4NCiAgICAgICAgICAgIDxVbml0IElEPSJVMTgwOSIgVW5pdD0iTXNjZi9kIiBrPSIyOC4zMTY4NDY1OTIiIERpZ2l0PSI2IiBSZW1hcms9IjEgTXNjZi9kID0gMjguMzE2ODQ2NTkyIG3Csy9kICjnkIbmg7PmsJTkvZMpIi8+DQogICAgICAgICAgICA8VW5pdCBJRD0iVTE4MTAiIFVuaXQ9IjEw4oG0Km3Csy9kIiBrPSIxMDAwMCIgRGlnaXQ9IjQiIFJlbWFyaz0iMSDkuIfmlrkv5aSpID0gMTAwMDAgbcKzL2QiLz4NCiAgICAgICAgPC9Vbml0R3JvdXA+DQoNCiAgICAgICAgPCEtLSA9PT09PT09PT09PT09PT09PT09PSDnrKwxOee7hO+8muWOi+e8qeezu+aVsCA9PT09PT09PT09PT09PT09PT09PSAtLT4NCiAgICAgICAgPFVuaXRHcm91cCBUeXBlPSJjb21wcmVzc2liaWxpdHkiIE5hbWU9ImNvbXByZXNzaWJpbGl0eSI+DQogICAgICAgICAgICA8VW5pdCBJRD0iVTE5MDEiIFVuaXQ9IjEvTVBhIiBrPSIxIiBEaWdpdD0iNiIgUmVtYXJrPSJiYXNlIHVuaXQiLz4NCiAgICAgICAgICAgIDxVbml0IElEPSJVMTkwMiIgVW5pdD0iMS9QYSIgaz0iMWU2IiBEaWdpdD0iNiIvPg0KICAgICAgICAgICAgPFVuaXQgSUQ9IlUxOTAzIiBVbml0PSIxL3BzaSIgaz0iMTQ1LjAzNzczOCIgRGlnaXQ9IjYiLz4NCiAgICAgICAgICAgIDxVbml0IElEPSJVMTkwNCIgVW5pdD0iMS9hdG0iIGs9IjkuODY5MjMyNjY3MTYiIERpZ2l0PSI2Ii8+DQogICAgICAgICAgICA8VW5pdCBJRD0iVTE5MDUiIFVuaXQ9IjEvYmFyIiBrPSIxMCIgRGlnaXQ9IjYiLz4NCiAgICAgICAgPC9Vbml0R3JvdXA+DQoNCiAgICAgICAgPCEtLSA9PT09PT09PT09PT09PT09PT09PSDnrKwyMOe7hO+8mua1k+W6piA9PT09PT09PT09PT09PT09PT09PSAtLT4NCiAgICAgICAgPFVuaXRHcm91cCBUeXBlPSJjb25jZW50cmF0aW9uIiBOYW1lPSJjb25jZW50cmF0aW9uIj4NCiAgICAgICAgICAgIDxVbml0IElEPSJVMjAwMSIgVW5pdD0ia2cvbcKzIiBrPSIxIiBEaWdpdD0iMyIgUmVtYXJrPSJiYXNlIHVuaXQiLz4NCiAgICAgICAgICAgIDxVbml0IElEPSJVMjAwMiIgVW5pdD0iZy9MIiBrPSIxIiBEaWdpdD0iMyIvPg0KICAgICAgICAgICAgPFVuaXQgSUQ9IlUyMDAzIiBVbml0PSJtZy9MIiBrPSIwLjAwMSIgRGlnaXQ9IjQiLz4NCiAgICAgICAgICAgIDxVbml0IElEPSJVMjAwNCIgVW5pdD0izrxnL21MIiBrPSIwLjAwMSIgRGlnaXQ9IjQiLz4NCiAgICAgICAgICAgIDxVbml0IElEPSJVMjAwNSIgVW5pdD0icHBtIiBrPSIwLjAwMSIgRGlnaXQ9IjQiIFJlbWFyaz0iYXNzdW1pbmcgMSBwcG0gPSAxIG1nL2tnIGluIHdhdGVyIi8+DQogICAgICAgICAgICA8VW5pdCBJRD0iVTIwMDYiIFVuaXQ9IktwcG0iIGs9IjEiIERpZ2l0PSIzIi8+DQogICAgICAgICAgICA8VW5pdCBJRD0iVTIwMDciIFVuaXQ9Im1vbC9twrMiIGs9IjEiIERpZ2l0PSIzIi8+DQogICAgICAgIDwvVW5pdEdyb3VwPg0KDQogICAgICAgIDwhLS0gPT09PT09PT09PT09PT09PT09PT0g56ysMjHnu4TvvJrnmb7liIbmr5QgPT09PT09PT09PT09PT09PT09PT0gLS0+DQogICAgICAgIDxVbml0R3JvdXAgVHlwZT0icGVyY2VudCIgTmFtZT0icGVyY2VudCI+DQogICAgICAgICAgICA8VW5pdCBJRD0iVTIxMDEiIFVuaXQ9IiUiIGs9IjEiIERpZ2l0PSIyIiBSZW1hcms9ImJhc2UgdW5pdCIvPg0KICAgICAgICAgICAgPFVuaXQgSUQ9IlUyMTAyIiBVbml0PSJwdSIgaz0iMSIgRGlnaXQ9IjIiIFJlbWFyaz0icGVyIHVuaXQiLz4NCiAgICAgICAgICAgIDxVbml0IElEPSJVMjEwMyIgVW5pdD0iZnJhY3Rpb24iIGs9IjEwMCIgRGlnaXQ9IjIiLz4NCiAgICAgICAgICAgIDxVbml0IElEPSJVMjEwNCIgVW5pdD0idi92IiBrPSIxMDAiIERpZ2l0PSIyIi8+DQogICAgICAgICAgICA8VW5pdCBJRD0iVTIxMDUiIFVuaXQ9Im3Csy9twrMiIGs9IjEwMCIgRGlnaXQ9IjIiLz4NCiAgICAgICAgPC9Vbml0R3JvdXA+DQoNCiAgICAgICAgPCEtLSA9PT09PT09PT09PT09PT09PT09PSDnrKwyMue7hO+8muaFouW6pu+8iOWjsOazou+8iSA9PT09PT09PT09PT09PT09PT09PSAtLT4NCiAgICAgICAgPFVuaXRHcm91cCBUeXBlPSJzbG93bmVzcyIgTmFtZT0ic2xvd25lc3MiPg0KICAgICAgICAgICAgPFVuaXQgSUQ9IlUyMjAxIiBVbml0PSJzL20iIGs9IjEiIERpZ2l0PSIzIiBSZW1hcms9ImJhc2UgdW5pdCIvPg0KICAgICAgICAgICAgPFVuaXQgSUQ9IlUyMjAyIiBVbml0PSJ1cy9tIiBrPSIxZS0wNiIgRGlnaXQ9IjYiLz4NCiAgICAgICAgICAgIDxVbml0IElEPSJVMjIwMyIgVW5pdD0idXMvZnQiIGs9IjMuMjgwODM5ODk1MDEzMTJlLTA2IiBEaWdpdD0iNiIvPg0KICAgICAgICA8L1VuaXRHcm91cD4NCg0KICAgICAgICA8IS0tID09PT09PT09PT09PT09PT09PT09IOesrDIz57uE77ya5pS+5bCE5oCnID09PT09PT09PT09PT09PT09PT09IC0tPg0KICAgICAgICA8VW5pdEdyb3VwIFR5cGU9InJhZGlvYWN0aXZpdHkiIE5hbWU9InJhZGlvYWN0aXZpdHkiPg0KICAgICAgICAgICAgPFVuaXQgSUQ9IlUyMzAxIiBVbml0PSJBUEkiIGs9IjEiIERpZ2l0PSIxIiBSZW1hcms9ImJhc2UgdW5pdCIvPg0KICAgICAgICAgICAgPFVuaXQgSUQ9IlUyMzAyIiBVbml0PSJnQVBJIiBrPSIxIiBEaWdpdD0iMSIvPg0KICAgICAgICA8L1VuaXRHcm91cD4NCg0KICAgICAgICA8IS0tID09PT09PT09PT09PT09PT09PT09IOesrDI057uE77ya55S15Y6LID09PT09PT09PT09PT09PT09PT09IC0tPg0KICAgICAgICA8VW5pdEdyb3VwIFR5cGU9InZvbHRhZ2UiIE5hbWU9InZvbHRhZ2UiPg0KICAgICAgICAgICAgPFVuaXQgSUQ9IlUyNDAxIiBVbml0PSJWIiBrPSIxIiBEaWdpdD0iMyIgUmVtYXJrPSJiYXNlIHVuaXQiLz4NCiAgICAgICAgICAgIDxVbml0IElEPSJVMjQwMiIgVW5pdD0ibVYiIGs9IjAuMDAxIiBEaWdpdD0iNCIvPg0KICAgICAgICAgICAgPFVuaXQgSUQ9IlUyNDAzIiBVbml0PSJrViIgaz0iMTAwMCIgRGlnaXQ9IjIiLz4NCiAgICAgICAgPC9Vbml0R3JvdXA+DQoNCiAgICAgICAgPCEtLSA9PT09PT09PT09PT09PT09PT09PSDnrKwyNee7hO+8muWKmyA9PT09PT09PT09PT09PT09PT09PSAtLT4NCiAgICAgICAgPFVuaXRHcm91cCBUeXBlPSJmb3JjZSIgTmFtZT0iZm9yY2UiPg0KICAgICAgICAgICAgPFVuaXQgSUQ9IlUyNTAxIiBVbml0PSJOIiBrPSIxIiBEaWdpdD0iMyIgUmVtYXJrPSJiYXNlIHVuaXQiLz4NCiAgICAgICAgICAgIDxVbml0IElEPSJVMjUwMiIgVW5pdD0ia04iIGs9IjEwMDAiIERpZ2l0PSIyIi8+DQogICAgICAgICAgICA8VW5pdCBJRD0iVTI1MDMiIFVuaXQ9ImxiZiIgaz0iNC40NDgyMjE2MTUyNjA1IiBEaWdpdD0iMyIvPg0KICAgICAgICAgICAgPFVuaXQgSUQ9IlUyNTA0IiBVbml0PSJrZ2YiIGs9IjkuODA2NjUiIERpZ2l0PSIzIi8+DQogICAgICAgICAgICA8VW5pdCBJRD0iVTI1MDUiIFVuaXQ9ImR5biIgaz0iMWUtMDUiIERpZ2l0PSI2Ii8+DQogICAgICAgIDwvVW5pdEdyb3VwPg0KDQogICAgICAgIDwhLS0gPT09PT09PT09PT09PT09PT09PT0g56ysMjbnu4TvvJrpopHnjocgPT09PT09PT09PT09PT09PT09PT0gLS0+DQogICAgICAgIDxVbml0R3JvdXAgVHlwZT0iZnJlcXVlbmN5IiBOYW1lPSJmcmVxdWVuY3kiPg0KICAgICAgICAgICAgPFVuaXQgSUQ9IlUyNjAxIiBVbml0PSJIeiIgaz0iMSIgRGlnaXQ9IjMiIFJlbWFyaz0iYmFzZSB1bml0Ii8+DQogICAgICAgICAgICA8VW5pdCBJRD0iVTI2MDIiIFVuaXQ9ImtIeiIgaz0iMTAwMCIgRGlnaXQ9IjIiLz4NCiAgICAgICAgICAgIDxVbml0IElEPSJVMjYwMyIgVW5pdD0iTUh6IiBrPSIxZTYiIERpZ2l0PSIyIi8+DQogICAgICAgICAgICA8VW5pdCBJRD0iVTI2MDQiIFVuaXQ9IkdIeiIgaz0iMWU5IiBEaWdpdD0iMiIvPg0KICAgICAgICA8L1VuaXRHcm91cD4NCg0KICAgICAgICA8IS0tID09PT09PT09PT09PT09PT09PT09IOesrDI357uE77ya54Ot5a+8546HID09PT09PT09PT09PT09PT09PT09IC0tPg0KICAgICAgICA8VW5pdEdyb3VwIFR5cGU9InRoZXJtYWxfY29uZHVjdGl2aXR5IiBOYW1lPSJ0aGVybWFsX2NvbmR1Y3Rpdml0eSI+DQogICAgICAgICAgICA8VW5pdCBJRD0iVTI3MDEiIFVuaXQ9IlcvKG3Ct0spIiBrPSIxIiBEaWdpdD0iMyIgUmVtYXJrPSJiYXNlIHVuaXQiLz4NCiAgICAgICAgICAgIDxVbml0IElEPSJVMjcwMiIgVW5pdD0iVy8obcK34oSDKSIgaz0iMSIgRGlnaXQ9IjMiLz4NCiAgICAgICAgICAgIDxVbml0IElEPSJVMjcwMyIgVW5pdD0iQnR1LyhowrdmdMK3wrBGKSIgaz0iMS43MzA3MzUiIERpZ2l0PSIzIi8+DQogICAgICAgICAgICA8VW5pdCBJRD0iVTI3MDQiIFVuaXQ9ImNhbC8oY23Ct3PCt+KEgykiIGs9IjQxOC40IiBEaWdpdD0iMiIvPg0KICAgICAgICA8L1VuaXRHcm91cD4NCg0KICAgICAgICA8IS0tID09PT09PT09PT09PT09PT09PT09IOesrDI457uE77ya5q+U54Ot5a65ID09PT09PT09PT09PT09PT09PT09IC0tPg0KICAgICAgICA8VW5pdEdyb3VwIFR5cGU9InNwZWNpZmljX2hlYXQiIE5hbWU9InNwZWNpZmljX2hlYXQiPg0KICAgICAgICAgICAgPFVuaXQgSUQ9IlUyODAxIiBVbml0PSJKLyhrZ8K3SykiIGs9IjEiIERpZ2l0PSIzIiBSZW1hcms9ImJhc2UgdW5pdCIvPg0KICAgICAgICAgICAgPFVuaXQgSUQ9IlUyODAyIiBVbml0PSJKLyhnwrdLKSIgaz0iMTAwMCIgRGlnaXQ9IjIiLz4NCiAgICAgICAgICAgIDxVbml0IElEPSJVMjgwMyIgVW5pdD0iY2FsLyhnwrfihIMpIiBrPSI0MTg0IiBEaWdpdD0iMiIvPg0KICAgICAgICAgICAgPFVuaXQgSUQ9IlUyODA0IiBVbml0PSJCdHUvKGxiwrfCsEYpIiBrPSI0MTg2LjgiIERpZ2l0PSIyIi8+DQogICAgICAgIDwvVW5pdEdyb3VwPg0KDQogICAgICAgIDwhLS0gPT09PT09PT09PT09PT09PT09PT0g56ysMjnnu4TvvJrmkanlsJTotKjph48gPT09PT09PT09PT09PT09PT09PT0gLS0+DQogICAgICAgIDxVbml0R3JvdXAgVHlwZT0ibW9sYXJfbWFzcyIgTmFtZT0ibW9sYXJfbWFzcyI+DQogICAgICAgICAgICA8VW5pdCBJRD0iVTI5MDEiIFVuaXQ9ImtnL21vbCIgaz0iMSIgRGlnaXQ9IjMiIFJlbWFyaz0iYmFzZSB1bml0Ii8+DQogICAgICAgICAgICA8VW5pdCBJRD0iVTI5MDIiIFVuaXQ9ImcvbW9sIiBrPSIwLjAwMSIgRGlnaXQ9IjQiLz4NCiAgICAgICAgICAgIDxVbml0IElEPSJVMjkwMyIgVW5pdD0ibGIvbGJtb2wiIGs9IjAuNDUzNTkyMzciIERpZ2l0PSI0Ii8+DQogICAgICAgIDwvVW5pdEdyb3VwPg0KDQogICAgICAgIDwhLS0gPT09PT09PT09PT09PT09PT09PT0g56ysMzDnu4TvvJpVbmtub3duMSA9PT09PT09PT09PT09PT09PT09PSAtLT4NCiAgICAgICAgPFVuaXRHcm91cCBUeXBlPSJtb2xhcl9tYXNzIiBOYW1lPSJtb2xhcl9tYXNzIj4NCiAgICAgICAgICAgIDxVbml0IElEPSJVMzAwMSIgVW5pdD0ia2cvbW9sIiBrPSIxIiBEaWdpdD0iMyIgUmVtYXJrPSJiYXNlIHVuaXQiLz4NCiAgICAgICAgICAgIDxVbml0IElEPSJVMzAwMiIgVW5pdD0iZy9tb2wiIGs9IjAuMDAxIiBEaWdpdD0iNCIvPg0KICAgICAgICAgICAgPFVuaXQgSUQ9IlUzMDAzIiBVbml0PSJsYi9sYm1vbCIgaz0iMC40NTM1OTIzNyIgRGlnaXQ9IjQiLz4NCiAgICAgICAgPC9Vbml0R3JvdXA+DQoNCg0KDQogICAgICAgIDwhLS0gPT09PT09PT09PT09PT09PT09PT0g56ysMzHnu4TvvJpVbmtub3duMSA9PT09PT09PT09PT09PT09PT09PSAtLT4NCiAgICAgICAgPFVuaXRHcm91cCBUeXBlPSJ3cyIgTmFtZT0i55uQ5bqmIj4NCiAgICAgICAgICAgIDxVbml0IElEPSJVMzEwMSIgVW5pdD0ibWcvTCIgaz0iMSIvPg0KICAgICAgICAgICAgPFVuaXQgSUQ9IlUzMTAyIiBVbml0PSLOvGcvbUwiIGs9IjEiLz4NCiAgICAgICAgICAgIDxVbml0IElEPSJVMzEwMyIgVW5pdD0iZy9MIiBrPSIxMDAwIi8+DQogICAgICAgICAgICA8VW5pdCBJRD0iVTMxMDQiIFVuaXQ9ImtnL21eMyIgaz0iMC4wMDEiLz4NCiAgICAgICAgICAgIDxVbml0IElEPSJVMzEwNSIgVW5pdD0icHBtIiBrPSIxIi8+DQogICAgICAgICAgICA8VW5pdCBJRD0iVTMxMDYiIFVuaXQ9IktwcG0iIGs9IjEwMDAiLz4NCiAgICAgICAgPC9Vbml0R3JvdXA+DQoNCiAgICAgICAgPCEtLSA9PT09PT09PT09PT09PT09PT09PSDnrKwzMue7hO+8mlVua25vd24xID09PT09PT09PT09PT09PT09PT09IC0tPg0KICAgICAgICA8VW5pdEdyb3VwIFR5cGU9InZpc2Nvc2l0eSIgTmFtZT0idmlzY29zaXR5Ij4NCiAgICAgICAgICAgIDxVbml0IElEPSJVMzIwMSIgVW5pdD0iUGEucyIgaz0iMSIvPg0KICAgICAgICAgICAgPFVuaXQgSUQ9IlUzMjAyIiBVbml0PSJtUGEucyIgaz0iMC4wMDEiLz4NCiAgICAgICAgICAgIDxVbml0IElEPSJVMzIwMyIgVW5pdD0iUCIgaz0iMC4xIi8+DQogICAgICAgICAgICA8VW5pdCBJRD0iVTMyMDQiIFVuaXQ9ImNQIiBrPSIwLjAwMSIvPg0KICAgICAgICAgICAgPFVuaXQgSUQ9IlUzMjA1IiBVbml0PSJiZi5zL2Z0XjIiIGs9IjQ3Ljg4MDMiLz4NCiAgICAgICAgICAgIDxVbml0IElEPSJVMzIwNiIgVW5pdD0ia2dmLnMvbV4zIiBrPSI5LjgwNjY1Ii8+DQogICAgICAgIDwvVW5pdEdyb3VwPg0KDQoNCiAgICAgICAgPCEtLSA9PT09PT09PT09PT09PT09PT09PSDku6XkuIvkuLrmlbDlgLzor5XkupXmqKHlnZfooaXlhYXmianlsZXljZXkvY0gPT09PT09PT09PT09PT09PT09PT0gLS0+DQoNCiAgICAgICAgPCEtLSA9PT09PT09PT09PT09PT09PT09PSDnrKwzM+e7hO+8muS6leetkuWCqOmbhuezu+aVsCA9PT09PT09PT09PT09PT09PT09PSAtLT4NCiAgICAgICAgPFVuaXRHcm91cCBUeXBlPSJUb0RvMyIgTmFtZT0iVG9EbzMiPg0KICAgICAgICAgICAgPFVuaXQgSUQ9IlUzMzAxIiBVbml0PSJtXjMvTVBhIiBrPSIxIiBEaWdpdD0iNiIgUmVtYXJrPSJiYXNlIHVuaXQiLz4NCiAgICAgICAgPC9Vbml0R3JvdXA+DQoNCiAgICAgICAgPCEtLSA9PT09PT09PT09PT09PT09PT09PSDnrKwzNOe7hO+8mua1geWKqOiDveWKmyA9PT09PT09PT09PT09PT09PT09PSAtLT4NCiAgICAgICAgPFVuaXRHcm91cCBUeXBlPSJmbG93X2NhcGFjaXR5IiBOYW1lPSJmbG93X2NhcGFjaXR5Ij4NCiAgICAgICAgICAgIDxVbml0IElEPSJVMzQwMSIgVW5pdD0ibUQubSIgaz0iMSIgRGlnaXQ9IjYiIFJlbWFyaz0iYmFzZSB1bml0Ii8+DQogICAgICAgIDwvVW5pdEdyb3VwPg0KDQogICAgPC9UeXBlT2Y+DQo8L1Jvb3Q+DQo=
\ No newline at end of file
diff --git a/Bin/Config/Lang/cn/nmNum_cn.ts b/Bin/Config/Lang/cn/nmNum_cn.ts
index efd37e2..b86f8f7 100644
--- a/Bin/Config/Lang/cn/nmNum_cn.ts
+++ b/Bin/Config/Lang/cn/nmNum_cn.ts
@@ -1,4 +1,4 @@
-
+
@@ -6480,4 +6480,75 @@ Average pressure in contour: %2 MPa
Kriging 结果中包含无效数值。
+
+ nmReservoirParameterField
+ The parameter layout is unavailable.参数布局不可用。
+ Parameter definition not found: %1未找到参数定义:%1
+ Failed to bind the unit for parameter: %1参数单位绑定失败:%1
+ Dimensionless无量纲
+
+
+ nmReservoirParameterPage
+ Object display对象显示
+ Display:显示:
+ No editable objects in this category.此分类中没有可编辑对象。
+ Initial oil and water saturations must sum to 1.初始含油饱和度与初始含水饱和度之和必须为 1。
+
+
+ nmWxReservoirPropertiesEditor
+ Reservoir properties settings储层特性设置
+ Reservoir properties储层参数
+ Help帮助
+ OK确定
+ Cancel取消
+ Basic基础
+ Wells井
+ Geometry objects几何对象
+ Reservoir parameters储层参数
+ Well parameters井参数
+ Faults断层
+ Fractures裂缝
+ Composite regions复合区
+ Region marks区域标记
+ Please correct the invalid parameter values.请修正无效的参数值。
+ Reservoir type储层类型
+ Homogeneous均质储层
+ Dual porosity pseudo steady state双重介质拟稳态
+ Fault flow model断层流动模型
+ Boundary type边界类型
+ Leaky泄漏
+ Composite limit复合边界
+ Permeable boundary可渗透边界
+ Composite boundary复合边界
+ Fracture flow model裂缝流动模型
+ Finite conductivity有限导流
+ Infinite conductivity无限导流
+ Vertical well直井
+ Fractured vertical well压裂直井
+ Multistage fractured horizontal well多段压裂水平井
+ Position and wellbore位置与井筒
+ Wellbore storage井筒储集
+ Wellbore storage and fracture井筒储集与裂缝
+ Basic and medium properties基础与介质特性
+ Fluid parameters流体参数
+ Oil phase parameters油相参数
+ Water phase parameters水相参数
+ Compressibility压缩系数
+ Compressibility and saturation压缩系数与饱和度
+ Reservoir medium parameters储层介质参数
+ Geometry几何位置
+ Flow properties流动属性
+ Conductivity properties导流属性
+ Boundary properties边界属性
+
+
+ nmSubWndMain
+ Reservoir properties储层参数
+ The current numerical well-test data is unavailable.当前数值试井数据不可用。
+
+
+ QObject
+ The current numerical well-test data is unavailable.当前数值试井数据不可用。
+ The reservoir properties editing session is unavailable.储层参数编辑会话不可用。
+
diff --git a/Bin/XmlFiles/ModelParaDefinesNM_cn.xml b/Bin/XmlFiles/ModelParaDefinesNM_cn.xml
index f26f2ef..54efcc8 100644
--- a/Bin/XmlFiles/ModelParaDefinesNM_cn.xml
+++ b/Bin/XmlFiles/ModelParaDefinesNM_cn.xml
@@ -17,11 +17,16 @@
-
+
+
+
+
+
+
@@ -32,11 +37,11 @@
-
+
-
-
+
+
@@ -44,7 +49,8 @@
-
+
+
@@ -52,6 +58,7 @@
+
@@ -85,12 +92,12 @@
-
+
-
+
@@ -99,7 +106,7 @@
-
+
diff --git a/Bin/XmlFiles/ModelParaDefinesNM_en.xml b/Bin/XmlFiles/ModelParaDefinesNM_en.xml
index ad27365..23f0745 100644
--- a/Bin/XmlFiles/ModelParaDefinesNM_en.xml
+++ b/Bin/XmlFiles/ModelParaDefinesNM_en.xml
@@ -18,11 +18,16 @@
-
+
+
+
+
+
+
@@ -33,11 +38,11 @@
-
+
-
-
+
+
@@ -45,7 +50,8 @@
-
+
+
@@ -53,6 +59,7 @@
+
@@ -86,12 +93,12 @@
-
+
-
+
@@ -100,7 +107,7 @@
-
+
diff --git a/Bin/XmlFiles/UnitDefault_cn.xml b/Bin/XmlFiles/UnitDefault_cn.xml
index 28882e7..fa19649 100644
--- a/Bin/XmlFiles/UnitDefault_cn.xml
+++ b/Bin/XmlFiles/UnitDefault_cn.xml
@@ -331,10 +331,18 @@
+
+
+
+
+
+
+
+
diff --git a/Include/nmNum/nmCalculation/nmCalculationUtils.h b/Include/nmNum/nmCalculation/nmCalculationUtils.h
index 76a5faa..3688f57 100644
--- a/Include/nmNum/nmCalculation/nmCalculationUtils.h
+++ b/Include/nmNum/nmCalculation/nmCalculationUtils.h
@@ -19,6 +19,13 @@ class NMCALCULATION_EXPORT nmCalculationUtils {
static bool writeFile(const QStringList& content, const QString &filePath);
static QStringList readFile(const QString & filePath);
+ /**
+ * @brief 将数据层使用的毫达西转换为PEBI求解器使用的达西。
+ * @param dPermeabilityMilliDarcy 渗透率,单位为mD。
+ * @return 渗透率,单位为D。
+ */
+ static double milliDarcyToDarcy(double dPermeabilityMilliDarcy);
+
// 调用求解器Kriging接口,对targetPoints中的坐标依次进行属性插值.
// measurementPoints与measurementValues按下标一一对应.
// 成功时outputValues与targetPoints数量相同且顺序一致;失败时清空outputValues.
diff --git a/Include/nmNum/nmData/nmDataAttribute.h b/Include/nmNum/nmData/nmDataAttribute.h
index b4eb34a..8afdd70 100644
--- a/Include/nmNum/nmData/nmDataAttribute.h
+++ b/Include/nmNum/nmData/nmDataAttribute.h
@@ -1,4 +1,4 @@
-#ifndef NMDATAATTRIBUTE_H
+#ifndef NMDATAATTRIBUTE_H
#define NMDATAATTRIBUTE_H
#include
@@ -15,7 +15,7 @@ enum UnitType {
UNIT_TYPE_LENGTH, // 长度:m, cm, mm, in, ft, km等
UNIT_TYPE_CONDUCTIVITY, // 导流能力:md.m, md.ft, m^3
UNIT_TYPE_PRESSURE, // 压力:MPa, psia, Pa, kPa, bar等
- UNIT_TYPE_PERMEABILITY, // 渗透率:md, Darcy, m^2, cm^2等
+ UNIT_TYPE_PERMEABILITY, // 渗透率:mD, D, m^2, cm^2等
UNIT_TYPE_ANGLE, // 角度:o (degree), radian
UNIT_TYPE_FLOW_RATE_RECIPROCAL, // 流量倒数:1/B/D, 1/m^3/D等
UNIT_TYPE_COMPRESSIBILITY, // 压缩系数:m^3/MPa, bbl/psi等
diff --git a/Include/nmNum/nmData/nmDataBinaryTools.h b/Include/nmNum/nmData/nmDataBinaryTools.h
index d6abef6..9db16c6 100644
--- a/Include/nmNum/nmData/nmDataBinaryTools.h
+++ b/Include/nmNum/nmData/nmDataBinaryTools.h
@@ -1,4 +1,4 @@
-#ifndef NMDATABINARYTOOLS_H
+#ifndef NMDATABINARYTOOLS_H
#define NMDATABINARYTOOLS_H
#include
@@ -152,7 +152,7 @@ public:
double dt_Max; // 最大时间间隔
// 注意:k, phi, h是每个网格单元一个值,数量太大不保存基准值
// Python采样时根据 Base.k_ref 给所有单元赋相同值
- double k_ref; // 渗透率参考值(用于采样)
+ double k_ref; // 渗透率参考值,写入场景文件前已转换为D
double phi_ref; // 孔隙度参考值(用于采样)
double h_ref; // 厚度参考值(用于采样)
} Base;
diff --git a/Include/nmNum/nmSubWxs/nmReservoirParameterCatalog.h b/Include/nmNum/nmSubWxs/nmReservoirParameterCatalog.h
new file mode 100644
index 0000000..37b6783
--- /dev/null
+++ b/Include/nmNum/nmSubWxs/nmReservoirParameterCatalog.h
@@ -0,0 +1,144 @@
+#pragma once
+
+#include "nmSubWxs_global.h"
+#include "nmDefines.h"
+
+#include
+#include
+
+class nmAttrRegistry;
+struct nmReservoirPropertiesSnapshot;
+
+/** @brief 储层参数编辑页面分类。 */
+enum nmReservoirPropertiesCategory
+{
+ NM_RESERVOIR_PAGE_RESERVOIR = 0, ///< 储层。
+ NM_RESERVOIR_PAGE_WELL, ///< 井。
+ NM_RESERVOIR_PAGE_FAULT, ///< 断层。
+ NM_RESERVOIR_PAGE_FRACTURE, ///< 裂缝。
+ NM_RESERVOIR_PAGE_COMPOSITE_REGION, ///< 复合区。
+ NM_RESERVOIR_PAGE_REGION_MARK, ///< 区域标记。
+ NM_RESERVOIR_PAGE_COUNT ///< 分类数量。
+};
+
+/** @brief 参数对象的具体类型。 */
+enum nmReservoirPropertiesObjectType
+{
+ NM_RESERVOIR_OBJECT_RESERVOIR = 0, ///< 储层对象。
+ NM_RESERVOIR_OBJECT_VERTICAL_WELL, ///< 直井对象。
+ NM_RESERVOIR_OBJECT_VERTICAL_FRAC_WELL, ///< 垂直压裂井对象。
+ NM_RESERVOIR_OBJECT_HORIZONTAL_FRAC_WELL,///< 水平压裂井对象。
+ NM_RESERVOIR_OBJECT_REGION_MARK, ///< 区域标记对象。
+ NM_RESERVOIR_OBJECT_FAULT, ///< 断层对象。
+ NM_RESERVOIR_OBJECT_FRACTURE, ///< 裂缝对象。
+ NM_RESERVOIR_OBJECT_REGION ///< 复合区对象。
+};
+
+/** @brief 参数字段的编辑器类型。 */
+enum nmReservoirParameterEditorType
+{
+ NM_RESERVOIR_EDITOR_NUMBER = 0, ///< 浮点数输入框。
+ NM_RESERVOIR_EDITOR_INTEGER, ///< 整数输入框。
+ NM_RESERVOIR_EDITOR_ENUM ///< 稳定code枚举下拉框。
+};
+
+/** @brief 枚举下拉框选项。 */
+struct NM_SUB_WXS_EXPORT nmReservoirEnumOption
+{
+ QString m_sCode; ///< 不随语言变化的业务代码。
+ QString m_sText; ///< 当前语言下的显示文本。
+};
+
+/**
+ * @brief 单个参数字段的界面描述。
+ * @note 稳定参数ID用于会话读写,基础参数ID用于读取XML单位和范围。
+ */
+struct NM_SUB_WXS_EXPORT nmReservoirParameterFieldInfo
+{
+ QString m_sParameterId; ///< 编辑会话中的稳定参数ID。
+ QString m_sBaseParameterId; ///< 中英文参数XML中的基础参数ID。
+ QString m_sLabel; ///< 枚举字段的显示名称;数值字段留空时读取XML别名。
+ nmReservoirParameterEditorType m_eEditorType; ///< 字段编辑器类型。
+ bool m_bUnitEnabled; ///< 是否为该字段创建单位下拉框。
+ QList m_listOptions; ///< 枚举字段的稳定选项。
+};
+
+/** @brief 参数分组的界面描述。 */
+struct NM_SUB_WXS_EXPORT nmReservoirParameterGroupInfo
+{
+ QString m_sTitle; ///< 分组标题。
+ int m_nRow; ///< 分组在页面网格中的行。
+ int m_nColumn; ///< 分组在页面网格中的列。
+ int m_nRowSpan; ///< 分组纵向跨越的行数。
+ int m_nColumnSpan; ///< 分组横跨的列数。
+ bool m_bValueRightAligned; ///< 数值输入是否右对齐。
+ bool m_bFieldsCentered; ///< 分组内字段是否水平居中并随宽度伸展。
+ QList m_listFields; ///< 分组内按显示顺序排列的字段。
+};
+
+/** @brief 单个可编辑对象的完整界面描述。 */
+struct NM_SUB_WXS_EXPORT nmReservoirPropertyObjectInfo
+{
+ nmReservoirPropertiesCategory m_eCategory; ///< 对象所属页面分类。
+ nmReservoirPropertiesObjectType m_eObjectType; ///< 对象具体类型。
+ int m_nSourceIndex; ///< 对象在工作副本容器中的索引。
+ QString m_sObjectCode; ///< 编辑会话内稳定的对象编码。
+ QString m_sDisplayName; ///< 对象显示名称。
+ QList m_listGroups; ///< 原型式分组和字段描述。
+};
+
+/**
+ * @brief 储层参数规范目录。
+ * @note 对象映射、稳定ID、页面分组和联动所需的基础ID全部在此集中维护。
+ */
+class NM_SUB_WXS_EXPORT nmReservoirParameterCatalog
+{
+public:
+ /**
+ * @brief 将工作副本中的属性注册到独立注册表。
+ * @param pRegistry 编辑会话独占的属性注册表。
+ * @param oSnapshot 可写工作副本。
+ */
+ static void registerSnapshot(nmAttrRegistry* pRegistry,
+ nmReservoirPropertiesSnapshot& oSnapshot);
+
+ /**
+ * @brief 构建指定分类的对象和原型式分组描述。
+ * @param eCategory 页面分类。
+ * @param oSnapshot 当前工作副本。
+ * @return 按界面显示顺序排列的对象描述。
+ */
+ static QList createObjectInfos(
+ nmReservoirPropertiesCategory eCategory,
+ nmReservoirPropertiesSnapshot& oSnapshot);
+
+ /**
+ * @brief 将数据类中的存储文本转换为稳定枚举code。
+ * @param sParameterId 枚举参数ID。
+ * @param sStoredValue 数据类中的存储文本。
+ * @return 稳定业务code。
+ */
+ static QString enumCodeFromStoredValue(const QString& sParameterId,
+ const QString& sStoredValue);
+
+ /**
+ * @brief 将稳定枚举code转换为数据类的存储文本。
+ * @param sParameterId 枚举参数ID。
+ * @param sCode 稳定业务code。
+ * @return 数据类使用的存储文本。
+ */
+ static QString storedValueFromEnumCode(const QString& sParameterId,
+ const QString& sCode);
+
+ /** @brief 读取工作副本中的枚举code。 */
+ static QString enumCode(const nmReservoirPropertiesSnapshot& oSnapshot,
+ const QString& sParameterId);
+
+ /** @brief 修改工作副本中的枚举code。 */
+ static bool setEnumCode(nmReservoirPropertiesSnapshot& oSnapshot,
+ const QString& sParameterId,
+ const QString& sCode);
+
+private:
+ nmReservoirParameterCatalog();
+};
diff --git a/Include/nmNum/nmSubWxs/nmReservoirParameterField.h b/Include/nmNum/nmSubWxs/nmReservoirParameterField.h
new file mode 100644
index 0000000..4409a0e
--- /dev/null
+++ b/Include/nmNum/nmSubWxs/nmReservoirParameterField.h
@@ -0,0 +1,168 @@
+#pragma once
+
+#include "nmSubWxs_global.h"
+#include "nmReservoirParameterCatalog.h"
+
+#include
+#include
+#include
+
+class iParameter;
+class iUnitGroup;
+class QComboBox;
+class QGridLayout;
+class QLabel;
+class QLineEdit;
+
+/**
+ * @brief 储层参数字段所需的最小单位服务接口。
+ * @note 主对话框负责适配iDlgBase,字段不直接依赖对话框基类或全局对象。
+ */
+class NM_SUB_WXS_EXPORT nmIReservoirParameterUnitService
+{
+public:
+ /** @brief 析构单位服务接口。 */
+ virtual ~nmIReservoirParameterUnitService() {}
+
+ /** @brief 按NM参数定义绑定一个数值编辑器和单位下拉框。 */
+ virtual bool bindUnitField(QLineEdit* pLineEdit,
+ QComboBox* pUnitComboBox,
+ const QString& sBaseParameterId) = 0;
+
+ /** @brief 将基准单位数值写入指定编辑器。 */
+ virtual void setUnitBaseValue(QLineEdit* pLineEdit,
+ double dBaseValue) = 0;
+
+ /** @brief 读取指定编辑器的基准单位数值。 */
+ virtual double unitBaseValue(QLineEdit* pLineEdit) const = 0;
+
+ /** @brief 校验指定单位编辑器。 */
+ virtual bool isUnitInputValid(QLineEdit* pLineEdit) = 0;
+
+ /** @brief 返回指定编辑器当前显示单位。 */
+ virtual QString currentUnit(QLineEdit* pLineEdit) const = 0;
+
+ /** @brief 返回指定编辑器的单位组,不转移所有权。 */
+ virtual iUnitGroup* unitGroup(QLineEdit* pLineEdit) const = 0;
+};
+
+/**
+ * @brief 原型式参数行的轻量逻辑单元。
+ * @note 本类不创建外框或子面板,只把标签、编辑器和单位控件直接加入分组网格。
+ */
+class NM_SUB_WXS_EXPORT nmReservoirParameterField : public QObject
+{
+public:
+ /**
+ * @brief 构造参数字段。
+ * @param oFieldInfo 稳定字段描述。
+ * @param pUnitService 主对话框注入的单位服务,不转移所有权。
+ * @param pParent 字段生命周期父对象。
+ */
+ nmReservoirParameterField(
+ const nmReservoirParameterFieldInfo& oFieldInfo,
+ nmIReservoirParameterUnitService* pUnitService,
+ QObject* pParent = nullptr);
+
+ /** @brief 析构字段,不单独删除由分组控件拥有的界面控件。 */
+ virtual ~nmReservoirParameterField();
+
+ /**
+ * @brief 将字段的三个直接控件加入分组网格。
+ * @param pLayout 所属分组的网格布局。
+ * @param nRow 字段所在行。
+ * @param nColumnOffset 字段起始列偏移。
+ * @param sError 初始化失败原因。
+ * @return 参数元数据和单位绑定均成功时返回true。
+ */
+ bool initialize(QGridLayout* pLayout,
+ int nRow,
+ int nColumnOffset,
+ QString& sError);
+
+ /** @brief 返回编辑会话使用的稳定参数ID。 */
+ QString parameterId() const;
+
+ /** @brief 返回XML参数定义使用的基础参数ID。 */
+ QString baseParameterId() const;
+
+ /** @brief 返回字段是否为稳定code枚举。 */
+ bool isEnum() const;
+
+ /** @brief 设置数值输入文字是否右对齐。 */
+ void setValueRightAligned(bool bRightAligned);
+
+ /** @brief 返回数值编辑列的统一最小宽度。 */
+ static int editorMinimumWidth();
+
+ /** @brief 返回单位列的统一最小宽度。 */
+ static int unitMinimumWidth();
+
+ /** @brief 返回输入框和下拉框的统一紧凑高度。 */
+ static int editorHeight();
+
+ /** @brief 设置基准单位下的数值并刷新显示。 */
+ void setBaseValue(const QVariant& oValue);
+
+ /**
+ * @brief 获取基准单位下的当前数值。
+ * @param bValid 输出当前输入是否有效。
+ * @return 有效时返回基准值,否则返回无效QVariant。
+ */
+ QVariant baseValue(bool& bValid);
+
+ /** @brief 设置枚举稳定code;不会触发业务联动。 */
+ void setEnumCode(const QString& sCode);
+
+ /** @brief 返回当前枚举稳定code。 */
+ QString enumCode() const;
+
+ /** @brief 设置页面级关联校验错误;空文字表示清除关联错误。 */
+ void setExternalValidationError(const QString& sError);
+
+ /** @brief 校验当前输入,并更新参数范围提示。 */
+ bool validate();
+
+ /** @brief 同时显示或隐藏该参数行的三个直接控件。 */
+ void setFieldVisible(bool bVisible);
+
+ /** @brief 返回参数行当前是否参与编辑和校验。 */
+ bool isFieldVisible() const;
+
+ /** @brief 返回数值输入框,供页面集中连接变化信号。 */
+ QLineEdit* valueEditor() const;
+
+ /** @brief 返回枚举下拉框,供页面集中连接变化信号。 */
+ QComboBox* enumEditor() const;
+
+private:
+ /** @brief 创建数值输入框及单位控件。 */
+ bool createNumericEditor(QGridLayout* pLayout,
+ int nRow,
+ int nColumnOffset,
+ QString& sError);
+
+ /** @brief 创建稳定code枚举下拉框。 */
+ void createEnumEditor(QGridLayout* pLayout,
+ int nRow,
+ int nColumnOffset);
+
+ /** @brief 按XML精度格式化无单位或整数参数。 */
+ QString formatBaseValue(double dValue) const;
+
+ /** @brief 更新输入框的有效状态和帮助文字。 */
+ void updateValidationAppearance(bool bValid);
+
+ nmReservoirParameterFieldInfo m_oFieldInfo; ///< 稳定字段描述。
+ nmIReservoirParameterUnitService* m_pUnitService; ///< 注入的单位服务,不拥有所有权。
+ iParameter* m_pParameter; ///< 共享XML参数定义,不拥有所有权。
+ QLabel* m_pLabel; ///< 参数名称标签。
+ QLineEdit* m_pLineEdit; ///< 数值输入框。
+ QComboBox* m_pValueComboBox; ///< 枚举值下拉框。
+ QComboBox* m_pUnitComboBox; ///< 可换算单位下拉框。
+ QLabel* m_pUnitLabel; ///< 无单位字段的空白对齐占位。
+ QColor m_clrNormalText; ///< 输入框默认文字颜色。
+ QString m_sExternalValidationError; ///< 页面级关联校验错误文字。
+ bool m_bVisible; ///< 参数行是否参与编辑。
+ bool m_bUpdating; ///< 程序写值时阻止业务信号。
+};
diff --git a/Include/nmNum/nmSubWxs/nmReservoirParameterPage.h b/Include/nmNum/nmSubWxs/nmReservoirParameterPage.h
new file mode 100644
index 0000000..db3cc1e
--- /dev/null
+++ b/Include/nmNum/nmSubWxs/nmReservoirParameterPage.h
@@ -0,0 +1,123 @@
+#pragma once
+
+#include "nmSubWxs_global.h"
+#include "nmReservoirParameterCatalog.h"
+
+#include
+#include
+#include
+
+class nmIReservoirParameterUnitService;
+class nmReservoirParameterField;
+class nmReservoirPropertiesSession;
+class QComboBox;
+class QGridLayout;
+class QGroupBox;
+class QLabel;
+class QVBoxLayout;
+
+/**
+ * @brief 储层参数分类的原型式共享页面。
+ * @note 页面是普通QWidget,只负责一层内容布局,不拥有单位系统或真实数据。
+ */
+class NM_SUB_WXS_EXPORT nmReservoirParameterPage : public QWidget
+{
+ Q_OBJECT
+
+public:
+ /**
+ * @brief 构造共享参数页面。
+ * @param eCategory 页面分类。
+ * @param pSession 编辑会话,不转移所有权。
+ * @param pUnitService 主对话框单位服务,不转移所有权。
+ * @param pParent 父窗口。
+ */
+ nmReservoirParameterPage(nmReservoirPropertiesCategory eCategory,
+ nmReservoirPropertiesSession* pSession,
+ nmIReservoirParameterUnitService* pUnitService,
+ QWidget* pParent = nullptr);
+
+ /** @brief 析构参数页面。 */
+ virtual ~nmReservoirParameterPage();
+
+ /**
+ * @brief 重新读取当前分类对象并显示第一个对象。
+ * @param sError 输出字段构建错误。
+ * @return 页面构建成功返回true。
+ */
+ bool reloadObjects(QString& sError);
+
+ /**
+ * @brief 校验并将当前可见数值写入会话工作副本。
+ * @return 输入全部有效且写入成功时返回true。
+ */
+ bool commitPendingEdits();
+
+ /** @brief 返回当前页面的可见输入是否全部有效。 */
+ bool isInputValid();
+
+ /** @brief 返回当前分类是否存在可编辑对象。 */
+ bool hasEditableObjects() const;
+
+ /** @brief 返回页面分类。 */
+ nmReservoirPropertiesCategory category() const;
+
+signals:
+ /** @brief 当前页有效状态发生变化。 */
+ void sigValidityChanged(bool bValid);
+
+private slots:
+ /** @brief 切换当前编辑对象。 */
+ void slotObjectChanged(int nIndex);
+
+ /** @brief 数值输入变化后刷新整体有效状态。 */
+ void slotFieldValueEdited();
+
+ /** @brief 枚举code变化后保存并执行集中联动。 */
+ void slotEnumIndexChanged(int nIndex);
+
+private:
+ /** @brief 创建对象显示控制区和单层参数分组区域。 */
+ void createUi();
+
+ /** @brief 构建指定对象的全部分组和字段。 */
+ bool buildObject(int nObjectIndex, QString& sError);
+
+ /** @brief 删除上一个对象的分组控件和字段对象。 */
+ void clearObjectEditors();
+
+ /** @brief 创建一个原型式参数分组。 */
+ bool buildGroup(const nmReservoirParameterGroupInfo& oGroupInfo,
+ QString& sError);
+
+ /** @brief 从工作副本加载字段初始值。 */
+ void loadFieldValue(nmReservoirParameterField* pField);
+
+ /** @brief 根据当前稳定code统一刷新字段可见性。 */
+ void applyVisibilityRules();
+
+ /** @brief 设置指定稳定参数ID的字段可见性。 */
+ void setFieldVisible(const QString& sParameterId, bool bVisible);
+
+ /** @brief 刷新有效状态并通知主对话框。 */
+ void updateValidity();
+
+ nmReservoirPropertiesCategory m_eCategory; ///< 页面分类。
+ nmReservoirPropertiesSession* m_pSession; ///< 编辑会话,不拥有所有权。
+ nmIReservoirParameterUnitService* m_pUnitService; ///< 主对话框单位服务,不拥有所有权。
+ QList m_listObjectInfos; ///< 当前分类对象描述。
+ int m_nCurrentObjectIndex; ///< 当前对象索引。
+ bool m_bUpdatingObject; ///< 阻止对象下拉框回滚重入。
+ bool m_bBuildingFields; ///< 阻止加载数据时触发业务信号。
+
+ QGroupBox* m_pObjectDisplayGroup; ///< 对象显示控制分组。
+ QLabel* m_pObjectLabel; ///< 对象显示标签。
+ QComboBox* m_pObjectComboBox; ///< 多对象选择下拉框。
+ QWidget* m_pGroupsWidget; ///< 无边框的分组布局载体。
+ QGridLayout* m_pGroupsLayout; ///< 两列分组布局。
+ QVBoxLayout* m_pMainLayout; ///< 页面主布局。
+ QLabel* m_pEmptyLabel; ///< 空对象提示。
+ QList m_listFields; ///< 当前对象全部字段。
+ QMap m_mapFields; ///< 稳定ID到字段映射。
+ QMap m_mapEditorFields; ///< 编辑器到字段映射。
+};
diff --git a/Include/nmNum/nmSubWxs/nmReservoirPropertiesDataSource.h b/Include/nmNum/nmSubWxs/nmReservoirPropertiesDataSource.h
new file mode 100644
index 0000000..6422d17
--- /dev/null
+++ b/Include/nmNum/nmSubWxs/nmReservoirPropertiesDataSource.h
@@ -0,0 +1,93 @@
+#pragma once
+
+#include "nmSubWxs_global.h"
+
+#include "nmDataReservoir.h"
+#include "nmDataVerticalWell.h"
+#include "nmDataVerticalFracturedWell.h"
+#include "nmDataHorizontalFracturedWell.h"
+#include "nmDataRegionMark.h"
+#include "nmDataFault.h"
+#include "nmDataFracture.h"
+#include "nmDataRegion.h"
+
+class nmDataAnalyzeManager;
+
+/**
+ * @brief 储层参数编辑快照。
+ * @note 快照保存一次编辑会话所需的全部数据副本,不包含普通水平井。
+ */
+struct NM_SUB_WXS_EXPORT nmReservoirPropertiesSnapshot
+{
+ /** @brief 构造空快照。 */
+ nmReservoirPropertiesSnapshot();
+
+ int m_nSolverModelType; ///< 打开对话框时的求解器模型类型数值。
+ nmDataReservoir m_oReservoir; ///< 储层参数副本。
+ QVector m_vecVerticalWells; ///< 直井参数副本。
+ QVector m_vecVerticalFracturedWells; ///< 垂直压裂井参数副本。
+ QVector m_vecHorizontalFracturedWells; ///< 水平压裂井参数副本。
+ QVector m_vecRegionMarks; ///< 区域标记参数副本。
+ QVector m_vecFaults; ///< 断层参数副本。
+ QVector m_vecFractures; ///< 裂缝参数副本,包含DFN以保持提交索引稳定。
+ QVector m_vecRegions; ///< 复合区参数副本。
+};
+
+/**
+ * @brief 储层参数数据源接口。
+ * @note 对话框只依赖此接口,不直接访问全局数据管理器。
+ */
+class NM_SUB_WXS_EXPORT nmIReservoirPropertiesDataSource
+{
+public:
+ /** @brief 析构数据源接口。 */
+ virtual ~nmIReservoirPropertiesDataSource();
+
+ /**
+ * @brief 读取当前分析窗口的数据快照。
+ * @param oSnapshot 输出的工作快照。
+ * @param sError 输出的错误信息。
+ * @return 读取成功返回true。
+ */
+ virtual bool loadSnapshot(nmReservoirPropertiesSnapshot& oSnapshot,
+ QString& sError) const = 0;
+
+ /**
+ * @brief 一次性提交编辑后的工作快照。
+ * @param oSnapshot 待提交的工作快照。
+ * @param bGeometryChanged 井坐标或几何参数是否发生变化。
+ * @param sError 输出的错误信息。
+ * @return 提交成功返回true。
+ */
+ virtual bool commitSnapshot(const nmReservoirPropertiesSnapshot& oSnapshot,
+ bool bGeometryChanged,
+ QString& sError) = 0;
+};
+
+/**
+ * @brief 基于nmDataAnalyzeManager的数据源适配器。
+ */
+class NM_SUB_WXS_EXPORT nmAnalyzeManagerReservoirDataSource :
+ public nmIReservoirPropertiesDataSource
+{
+public:
+ /**
+ * @brief 构造数据源适配器。
+ * @param pDataManager 当前分析窗口的数据管理器,不转移所有权。
+ */
+ explicit nmAnalyzeManagerReservoirDataSource(nmDataAnalyzeManager* pDataManager);
+
+ /** @brief 析构数据源适配器。 */
+ virtual ~nmAnalyzeManagerReservoirDataSource();
+
+ virtual bool loadSnapshot(nmReservoirPropertiesSnapshot& oSnapshot,
+ QString& sError) const;
+
+ virtual bool commitSnapshot(const nmReservoirPropertiesSnapshot& oSnapshot,
+ bool bGeometryChanged,
+ QString& sError);
+
+private:
+ nmDataAnalyzeManager* m_pDataManager; ///< 当前分析窗口的数据管理器,不拥有所有权。
+};
+
diff --git a/Include/nmNum/nmSubWxs/nmReservoirPropertiesSession.h b/Include/nmNum/nmSubWxs/nmReservoirPropertiesSession.h
new file mode 100644
index 0000000..fa93af9
--- /dev/null
+++ b/Include/nmNum/nmSubWxs/nmReservoirPropertiesSession.h
@@ -0,0 +1,98 @@
+#pragma once
+
+#include "nmSubWxs_global.h"
+#include "nmReservoirPropertiesDataSource.h"
+#include "nmReservoirParameterCatalog.h"
+
+#include
+#include
+
+class nmAttrRegistry;
+
+/**
+ * @brief 储层参数编辑会话。
+ * @note 会话持有独立工作副本和独立属性注册表;取消时直接销毁会话即可。
+ */
+class NM_SUB_WXS_EXPORT nmReservoirPropertiesSession
+{
+public:
+ /**
+ * @brief 构造编辑会话。
+ * @param pDataSource 参数数据源,不转移所有权。
+ */
+ explicit nmReservoirPropertiesSession(nmIReservoirPropertiesDataSource* pDataSource);
+
+ /** @brief 析构编辑会话及其独立注册表。 */
+ ~nmReservoirPropertiesSession();
+
+ /**
+ * @brief 从数据源创建原始快照和工作副本。
+ * @param sError 输出的错误信息。
+ * @return 初始化成功返回true。
+ */
+ bool initialize(QString& sError);
+
+ /**
+ * @brief 获取指定分类的对象描述。
+ * @param eCategory 页面分类。
+ * @return 对象描述列表。
+ */
+ QList objectInfos(
+ nmReservoirPropertiesCategory eCategory);
+
+ /**
+ * @brief 获取工作副本中的参数值。
+ * @param sParameterId 稳定参数ID。
+ * @return 参数值;不存在时返回无效QVariant。
+ */
+ QVariant value(const QString& sParameterId) const;
+
+ /**
+ * @brief 修改工作副本中的参数值。
+ * @param sParameterId 稳定参数ID。
+ * @param oValue 基准单位下的新值。
+ * @return 参数存在并完成修改时返回true。
+ */
+ bool setValue(const QString& sParameterId, const QVariant& oValue);
+
+ /**
+ * @brief 批量修改工作副本中的参数值。
+ * @param mapValues 稳定参数ID到基准值的映射。
+ */
+ void setValues(const QMap& mapValues);
+
+ /**
+ * @brief 获取枚举参数的稳定code。
+ * @param sParameterId 稳定枚举参数ID。
+ * @return 稳定业务code。
+ */
+ QString enumCode(const QString& sParameterId) const;
+
+ /**
+ * @brief 修改枚举参数的稳定code。
+ * @param sParameterId 稳定枚举参数ID。
+ * @param sCode 稳定业务code。
+ * @return 修改成功返回true。
+ */
+ bool setEnumCode(const QString& sParameterId, const QString& sCode);
+
+ /**
+ * @brief 提交工作副本。
+ * @param sError 输出的错误信息。
+ * @return 提交成功返回true。
+ */
+ bool commit(QString& sError);
+
+ /** @brief 获取只读工作副本,供后续导入预览或测试使用。 */
+ const nmReservoirPropertiesSnapshot& workingSnapshot() const;
+
+private:
+ /** @brief 判断井坐标或几何参数是否发生变化。 */
+ bool isGeometryChanged() const;
+
+ nmIReservoirPropertiesDataSource* m_pDataSource; ///< 参数数据源,不拥有所有权。
+ nmAttrRegistry* m_pAttrRegistry; ///< 编辑会话独占的属性注册表。
+ nmReservoirPropertiesSnapshot m_oOriginalSnapshot; ///< 打开对话框时的原始快照。
+ nmReservoirPropertiesSnapshot m_oWorkingSnapshot; ///< 所有界面编辑写入的工作副本。
+ bool m_bInitialized; ///< 会话是否初始化成功。
+};
diff --git a/Include/nmNum/nmSubWxs/nmWxReservoirPropertiesEditor.h b/Include/nmNum/nmSubWxs/nmWxReservoirPropertiesEditor.h
new file mode 100644
index 0000000..32fed00
--- /dev/null
+++ b/Include/nmNum/nmSubWxs/nmWxReservoirPropertiesEditor.h
@@ -0,0 +1,148 @@
+#pragma once
+
+#include "iDlgBase.h"
+#include "nmSubWxs_global.h"
+#include "nmReservoirParameterCatalog.h"
+#include "nmReservoirParameterField.h"
+
+class nmIReservoirPropertiesDataSource;
+class nmReservoirPropertiesSession;
+class nmReservoirParameterPage;
+class QButtonGroup;
+class QDialogButtonBox;
+class QFrame;
+class QHBoxLayout;
+class QLabel;
+class QStackedWidget;
+class QToolButton;
+
+/**
+ * @brief 数值试井储层特性参数编辑器。
+ * @note 对话框是唯一可见面板,负责原型式导航、单位服务、整体校验和统一提交。
+ */
+class NM_SUB_WXS_EXPORT nmWxReservoirPropertiesEditor :
+ public iDlgBase,
+ public nmIReservoirParameterUnitService
+{
+ Q_OBJECT
+
+public:
+ /**
+ * @brief 构造储层特性参数编辑器。
+ * @param pDataSource 参数数据源,不转移所有权。
+ * @param pParent 父窗口。
+ */
+ nmWxReservoirPropertiesEditor(
+ nmIReservoirPropertiesDataSource* pDataSource,
+ QWidget* pParent = nullptr);
+
+ /** @brief 析构编辑器。 */
+ virtual ~nmWxReservoirPropertiesEditor();
+
+ /**
+ * @brief 初始化编辑会话和全部页面。
+ * @param sError 输出初始化错误。
+ * @return 初始化成功返回true。
+ */
+ bool initialize(QString& sError);
+
+ /** @brief 通过iDlgBase按NM参数系列绑定单位控件。 */
+ virtual bool bindUnitField(QLineEdit* pLineEdit,
+ QComboBox* pUnitComboBox,
+ const QString& sBaseParameterId);
+
+ /** @brief 将基准单位数值写入字段。 */
+ virtual void setUnitBaseValue(QLineEdit* pLineEdit,
+ double dBaseValue);
+
+ /** @brief 读取字段的基准单位数值。 */
+ virtual double unitBaseValue(QLineEdit* pLineEdit) const;
+
+ /** @brief 校验单位字段输入。 */
+ virtual bool isUnitInputValid(QLineEdit* pLineEdit);
+
+ /** @brief 返回字段当前显示单位。 */
+ virtual QString currentUnit(QLineEdit* pLineEdit) const;
+
+ /** @brief 返回字段单位组,不转移所有权。 */
+ virtual iUnitGroup* unitGroup(QLineEdit* pLineEdit) const;
+
+public slots:
+ /** @brief 校验并一次性提交工作副本。 */
+ virtual void accept();
+
+ /** @brief 丢弃工作副本并关闭窗口。 */
+ virtual void reject();
+
+private slots:
+ /** @brief 切换顶部参数分类。 */
+ void slotCategoryButtonClicked(int nCategory);
+
+ /** @brief 根据各页面状态更新确定按钮。 */
+ void slotPageValidityChanged(bool bValid);
+
+ /** @brief 打开系统帮助文档。 */
+ void slotHelp();
+
+private:
+ /** @brief 创建编辑器的原型式固定布局。 */
+ void createUi();
+
+ /** @brief 创建顶部分组导航。 */
+ QWidget* createCategoryBar();
+
+ /**
+ * @brief 创建一个带底部分组标题的ribbon区域。
+ * @param sCaption 分组标题。
+ * @param pParent 父控件。
+ * @param pCommandLayout 输出的命令按钮布局,不转移所有权。
+ * @return 创建完成的分组控件。
+ */
+ QWidget* createRibbonGroup(const QString& sCaption,
+ QWidget* pParent,
+ QHBoxLayout*& pCommandLayout);
+
+ /**
+ * @brief 创建框架风格的导航分组竖向分隔线。
+ * @param pParent 分隔线所属的顶部导航面板。
+ * @return 创建完成的Qt原生分隔线。
+ */
+ QFrame* createRibbonSeparator(QWidget* pParent);
+
+ /**
+ * @brief 创建一个参数分类按钮。
+ * @param eCategory 分类枚举。
+ * @param sText 按钮文字。
+ * @param sIconName 框架图标名称。
+ * @param pParent 所属ribbon分组。
+ * @return 创建完成的工具按钮。
+ */
+ QToolButton* createCategoryButton(
+ nmReservoirPropertiesCategory eCategory,
+ const QString& sText,
+ const QString& sIconName,
+ QWidget* pParent);
+
+ /** @brief 创建帮助命令按钮。 */
+ QToolButton* createHelpButton(QWidget* pParent);
+
+ /** @brief 创建六个共享参数页面。 */
+ void createPages();
+
+ /** @brief 根据各分类的实际对象数量更新顶部按钮启用状态。 */
+ void updateCategoryButtonStates();
+
+ /** @brief 校验所有页面并更新确定按钮。 */
+ bool validateAllPages();
+
+ nmIReservoirPropertiesDataSource* m_pDataSource; ///< 参数数据源,不拥有所有权。
+ nmReservoirPropertiesSession* m_pSession; ///< 对话框独占编辑会话。
+ QButtonGroup* m_pCategoryButtonGroup; ///< 顶部分类按钮及稳定页面ID映射。
+ QStackedWidget* m_pStackedWidget; ///< 无边框分类页面堆栈。
+ QDialogButtonBox* m_pButtonBox; ///< 确定和取消按钮区。
+ QToolButton* m_pFooterHelpButton; ///< 底部帮助命令。
+ QLabel* m_pStatusLabel; ///< 校验或提交错误提示。
+ nmReservoirParameterPage* m_pPages[NM_RESERVOIR_PAGE_COUNT]; ///< 六个参数页。
+ int m_nCurrentCategory; ///< 当前显示分类。
+ bool m_bInitialized; ///< 编辑器是否初始化完成。
+};
diff --git a/Src/nmNum/nmCalculation/nmCalculationDllPebiSolverTask.cpp b/Src/nmNum/nmCalculation/nmCalculationDllPebiSolverTask.cpp
index d8d9ce5..021b101 100644
--- a/Src/nmNum/nmCalculation/nmCalculationDllPebiSolverTask.cpp
+++ b/Src/nmNum/nmCalculation/nmCalculationDllPebiSolverTask.cpp
@@ -1,4 +1,4 @@
-#include "nmCalculationDllPebiSolverTask.h"
+#include "nmCalculationDllPebiSolverTask.h"
#include "singlePhaseSolver.h"
#include "zxLogInstance.h"
#include "nmDataAnalyzeManager.h"
@@ -149,8 +149,11 @@ bool applyPropertyInterpolation(
solverValues->resize(interpolationValues.size());
for(int valueIndex = 0; valueIndex < interpolationValues.size(); ++valueIndex) {
- // 插值数据已经使用求解器基准单位,结果可直接按网格顺序写入.
- (*solverValues)[valueIndex] = interpolationValues[valueIndex];
+ // 属性插值数据层以mD保存;渗透率在写入PEBI数组时转换为D。
+ (*solverValues)[valueIndex] = dataSet.property == "k"
+ ? nmCalculationUtils::milliDarcyToDarcy(
+ interpolationValues[valueIndex])
+ : interpolationValues[valueIndex];
}
*propertyApplied = true;
}
@@ -606,7 +609,11 @@ bool nmCalculationDllPebiSolverTask::execPebiMode()
p0.Base.Swi = pReservoirData->getSwi().getValue().toDouble(); // 初始含水饱和度
// 根据网格单元数设置每个单元的参数
size_t cellCount = pGridInstance->getGridOutput2().Trinodexy.size();
- p0.Base.k = dVec1(cellCount, pReservoirData->getPermeability().getValue().toDouble());
+ // 数据层以mD保存渗透率,PEBI输入数组要求使用D。
+ const double dPermeabilityDarcy =
+ nmCalculationUtils::milliDarcyToDarcy(
+ pReservoirData->getPermeability().getValue().toDouble());
+ p0.Base.k = dVec1(cellCount, dPermeabilityDarcy);
p0.Base.phi = dVec1(cellCount, pReservoirData->getPorosity().getValue().toDouble());
p0.Base.h = dVec1(cellCount, pReservoirData->getThickness().getValue().toDouble());
}
diff --git a/Src/nmNum/nmCalculation/nmCalculationPebiGrid.cpp b/Src/nmNum/nmCalculation/nmCalculationPebiGrid.cpp
index 979accd..c61ad8b 100644
--- a/Src/nmNum/nmCalculation/nmCalculationPebiGrid.cpp
+++ b/Src/nmNum/nmCalculation/nmCalculationPebiGrid.cpp
@@ -1,4 +1,4 @@
-#include "nmCalculationPebiGrid.h"
+#include "nmCalculationPebiGrid.h"
#include
#include
#include
@@ -1069,7 +1069,9 @@ bool nmCalculationPebiGrid::generateOutputPara()
scene.Base.Swi = pReservoirData->getSwi().getValue().toDouble();
// 保存参考值(用于Python采样)
- scene.Base.k_ref = pReservoirData->getPermeability().getValue().toDouble();
+ // 训练场景最终会直接填入PEBI输入结构,写文件前转换为求解器使用的D。
+ scene.Base.k_ref = nmCalculationUtils::milliDarcyToDarcy(
+ pReservoirData->getPermeability().getValue().toDouble());
scene.Base.phi_ref = pReservoirData->getPorosity().getValue().toDouble();
scene.Base.h_ref = pReservoirData->getThickness().getValue().toDouble();
}
diff --git a/Src/nmNum/nmCalculation/nmCalculationUtils.cpp b/Src/nmNum/nmCalculation/nmCalculationUtils.cpp
index 5aca5ac..e45a18a 100644
--- a/Src/nmNum/nmCalculation/nmCalculationUtils.cpp
+++ b/Src/nmNum/nmCalculation/nmCalculationUtils.cpp
@@ -37,6 +37,12 @@ void setKrigingError(QString* errorMessage, const QString& message)
nmCalculationUtils::nmCalculationUtils() {
}
+double nmCalculationUtils::milliDarcyToDarcy(double dPermeabilityMilliDarcy)
+{
+ // PEBI输入结构使用D,数据层统一使用mD,因此仅在求解器边界换算。
+ return dPermeabilityMilliDarcy / 1000.0;
+}
+
bool nmCalculationUtils::copyFileToDir(QString filePath, QString destDir) {
// 如果文件不存在,则退出
if(!QFile::exists(filePath)) {
diff --git a/Src/nmNum/nmData/nmDataAttribute.cpp b/Src/nmNum/nmData/nmDataAttribute.cpp
index afd14f3..28dae7a 100644
--- a/Src/nmNum/nmData/nmDataAttribute.cpp
+++ b/Src/nmNum/nmData/nmDataAttribute.cpp
@@ -1,4 +1,4 @@
-#include "nmDataAttribute.h"
+#include "nmDataAttribute.h"
#include
@@ -413,7 +413,8 @@ UnitType nmDataAttribute::detectUnitType(const QString& unit) {
}
// 渗透率单位
- if (unit == "md" || unit == "Darcy" || unit == "m^2" || unit == "cm^2" || unit == "um^2") {
+ if (unit == "mD" || unit == "D" || unit == "md" || unit == "Darcy" ||
+ unit == "m^2" || unit == "cm^2" || unit == "um^2") {
return UNIT_TYPE_PERMEABILITY;
}
@@ -578,9 +579,9 @@ double nmDataAttribute::convertPermeabilityUnit(double value, const QString& fro
// 统一转换为Darcy
double valueInDarcy = value;
- if (fromUnit == "md") {
- valueInDarcy = value / 1000.0; // 1 Darcy = 1000 md
- } else if (fromUnit == "Darcy") {
+ if (fromUnit == "mD" || fromUnit == "md") {
+ valueInDarcy = value / 1000.0; // 1 D = 1000 mD
+ } else if (fromUnit == "D" || fromUnit == "Darcy") {
valueInDarcy = value;
} else if (fromUnit == "m^2") {
valueInDarcy = value * 9.869233e-13; // 1 m^2 = 9.869233e-13 Darcy
@@ -593,9 +594,9 @@ double nmDataAttribute::convertPermeabilityUnit(double value, const QString& fro
}
// 从Darcy转换为目标单位
- if (toUnit == "Darcy") {
+ if (toUnit == "D" || toUnit == "Darcy") {
return valueInDarcy;
- } else if (toUnit == "md") {
+ } else if (toUnit == "mD" || toUnit == "md") {
return valueInDarcy * 1000.0;
} else if (toUnit == "m^2") {
return valueInDarcy / 9.869233e-13;
diff --git a/Src/nmNum/nmData/nmDataAutomaticFitting.cpp b/Src/nmNum/nmData/nmDataAutomaticFitting.cpp
index af01ce0..45dd167 100644
--- a/Src/nmNum/nmData/nmDataAutomaticFitting.cpp
+++ b/Src/nmNum/nmData/nmDataAutomaticFitting.cpp
@@ -15,7 +15,7 @@ nmDataAutomaticFitting::nmDataAutomaticFitting()
m_fractureHalfLengthSelected = false; // 仅压裂井可用,默认不选中
// 拟合上下界不再使用固定默认值,由自动拟合窗口按数据对象初值和物理边界生成。
- m_permeabilityMax = nmDataAttribute("Permeability Max", QVariant(), "Darcy");
+ m_permeabilityMax = nmDataAttribute("Permeability Max", QVariant(), "mD");
m_skinMax = nmDataAttribute("Skin Max", QVariant(), "");
m_wellboreStorageMax = nmDataAttribute("Wellbore Storage Max", QVariant(), "m^3/MPa");
m_porosityMax = nmDataAttribute("Porosity Max", QVariant(), "");
@@ -26,7 +26,7 @@ nmDataAutomaticFitting::nmDataAutomaticFitting()
m_fractureConductivityMax = nmDataAttribute("Fracture Conductivity Max", QVariant(), "md.m");
m_fractureHalfLengthMax = nmDataAttribute("Fracture Half Length Max", QVariant(), "m");
- m_permeabilityMin = nmDataAttribute("Permeability Min", QVariant(), "Darcy");
+ m_permeabilityMin = nmDataAttribute("Permeability Min", QVariant(), "mD");
m_skinMin = nmDataAttribute("Skin Min", QVariant(), "");
m_wellboreStorageMin = nmDataAttribute("Wellbore Storage Min", QVariant(), "m^3/MPa");
m_porosityMin = nmDataAttribute("Porosity Min", QVariant(), "");
@@ -34,7 +34,7 @@ nmDataAutomaticFitting::nmDataAutomaticFitting()
m_ctMin = nmDataAttribute("Ct Min", QVariant(), "");
m_cfMin = nmDataAttribute("Cf Min", QVariant(), "");
m_swiMin = nmDataAttribute("Swi Min", QVariant(), "");
- m_fractureConductivityMin = nmDataAttribute("Fracture Conductivity Min", QVariant(), "md.m");
+ m_fractureConductivityMin = nmDataAttribute("Fracture Conductivity Min", QVariant(), "mD.m");
m_fractureHalfLengthMin = nmDataAttribute("Fracture Half Length Min", QVariant(), "m");
// 初始化迭代参数
@@ -187,6 +187,8 @@ void nmDataAutomaticFitting::FromJsonValue(const rapidjson::Value& jsonValue)
// 反序列化参数最大值
if (jsonValue.HasMember("PermeabilityMax") && jsonValue["PermeabilityMax"].IsObject()) {
m_permeabilityMax.FromJsonValue(jsonValue["PermeabilityMax"]);
+ // 自动拟合上下限统一按数据层基准单位mD解释,不兼容旧JSON的D数值。
+ m_permeabilityMax.setUnit("mD");
}
if (jsonValue.HasMember("SkinMax") && jsonValue["SkinMax"].IsObject()) {
m_skinMax.FromJsonValue(jsonValue["SkinMax"]);
@@ -219,6 +221,7 @@ void nmDataAutomaticFitting::FromJsonValue(const rapidjson::Value& jsonValue)
// 反序列化参数最小值
if (jsonValue.HasMember("PermeabilityMin") && jsonValue["PermeabilityMin"].IsObject()) {
m_permeabilityMin.FromJsonValue(jsonValue["PermeabilityMin"]);
+ m_permeabilityMin.setUnit("mD");
}
if (jsonValue.HasMember("SkinMin") && jsonValue["SkinMin"].IsObject()) {
m_skinMin.FromJsonValue(jsonValue["SkinMin"]);
diff --git a/Src/nmNum/nmData/nmDataDiagnostic.cpp b/Src/nmNum/nmData/nmDataDiagnostic.cpp
index 973186c..ca34818 100644
--- a/Src/nmNum/nmData/nmDataDiagnostic.cpp
+++ b/Src/nmNum/nmData/nmDataDiagnostic.cpp
@@ -1,4 +1,4 @@
-#include "nmDataDiagnostic.h"
+#include "nmDataDiagnostic.h"
#include "nmDataWellBase.h"
#include "nmDataReservoir.h"
#include
@@ -15,7 +15,7 @@ nmDataDiagnostic::nmDataDiagnostic()
{
m_diagnosticSkin = nmDataAttribute("Skin", 0.0, "");
m_diagnosticWellboreStorage = nmDataAttribute("Wellbore storage", 0.01, "m^3/MPa", UNIT_TYPE_COMPRESSIBILITY, QStringList(), QStringList() << "bbl/psi" << "m^3/bar" << "m^3/kPa" << "m^3/Pa" << "m^3.cm^2/kg" << "m^2" << "m^3/MPa");
- m_diagnosticPermeability = nmDataAttribute("Permeability", 0.025, "md", UNIT_TYPE_PERMEABILITY, QStringList(), QStringList() << "md" << "Darcy" << "m^2" << "cm^2" << "um^2");
+ m_diagnosticPermeability = nmDataAttribute("Permeability", 25.0, "mD", UNIT_TYPE_PERMEABILITY, QStringList(), QStringList() << "mD" << "D" << "m^2" << "cm^2" << "um^2");
m_diagnosticTransmissibility = nmDataAttribute("Transmissibility", 1000.0, "md.m", UNIT_TYPE_CONDUCTIVITY, QStringList(), QStringList()<< "md.ft" << "md.m" << "m^3");
}
@@ -258,7 +258,7 @@ void nmDataDiagnostic::calculateTransmissibility(const QVector>&
DEBUG_OUT(QString("=== Transmissibility Analysis Result ==="));
DEBUG_OUT(QString("Selected method: %1").arg(selectedAnalysis->description));
- DEBUG_OUT(QString("Transmissibility (kh): %1 md*m").arg(khValue, 0, 'f', 6));
+ DEBUG_OUT(QString("Transmissibility (kh): %1 mD*m").arg(khValue, 0, 'f', 6));
DEBUG_OUT(QString("Analysis time: %1 hr").arg(selectedAnalysis->avgTime, 0, 'f', 4));
DEBUG_OUT(QString("Derivative value used: %1 MPa").arg(selectedAnalysis->avgPressure, 0, 'f', 6));
} else {
@@ -292,9 +292,9 @@ void nmDataDiagnostic::calculatePermeability(nmDataWellBase* pWell, nmDataReserv
m_diagnosticPermeability.setValue(kValue);
DEBUG_OUT(QString("=== Permeability Analysis Result ==="));
- DEBUG_OUT(QString("Transmissibility (kh): %1 md*m").arg(khValue, 0, 'f', 6));
+ DEBUG_OUT(QString("Transmissibility (kh): %1 mD*m").arg(khValue, 0, 'f', 6));
DEBUG_OUT(QString("Reservoir thickness (h): %1 m").arg(thickness, 0, 'f', 2));
- DEBUG_OUT(QString("Permeability (k): %1 md").arg(kValue, 0, 'f', 6));
+ DEBUG_OUT(QString("Permeability (k): %1 mD").arg(kValue, 0, 'f', 6));
}
//void nmDataDiagnostic::calculateSkin(const QVector>& rawData,
diff --git a/Src/nmNum/nmData/nmDataReservoir.cpp b/Src/nmNum/nmData/nmDataReservoir.cpp
index e07e007..73f25b0 100644
--- a/Src/nmNum/nmData/nmDataReservoir.cpp
+++ b/Src/nmNum/nmData/nmDataReservoir.cpp
@@ -1,17 +1,18 @@
-#include "nmDataReservoir.h"
+#include "nmDataReservoir.h"
#include "ZxSerializer.h"
nmDataReservoir::nmDataReservoir() {
// 基础属性
m_initialPressure = nmDataAttribute("Initial Pressure",40.0, "MPa", UNIT_TYPE_PRESSURE, QStringList(), QStringList() << "psia" << "Pa" << "kPa" << "atm" << "bara" << "kg/cm^2" << "m" << "psig" << "bar" << "MPa" << "kPag");
- m_permeability = nmDataAttribute("Permeability", 0.025, "Darcy", UNIT_TYPE_PERMEABILITY, QStringList(), QStringList() << "md" << "Darcy" << "m^2" << "cm^2" << "um^2");
+ // 数据层基准单位固定为mD;进入PEBI求解器前再统一转换为D。
+ m_permeability = nmDataAttribute("Permeability", 25.0, "mD");
m_thickness = nmDataAttribute("Thickness", 10.0, "m", UNIT_TYPE_LENGTH, QStringList(), QStringList() << "ft" << "m" << "cm" << "mm" << "in" << "0.1 in" << "mile" << "km");
m_porosity = nmDataAttribute("Porosity", 0.1, "", UNIT_TYPE_DIMENSIONLESS, QStringList(), QStringList());
m_kxKy = nmDataAttribute("Kx/Ky", 1.0, "", UNIT_TYPE_DIMENSIONLESS, QStringList(), QStringList());
// 油相PVT单值
m_Bo = nmDataAttribute("Bo", 1.2, "");
- m_Miuo = nmDataAttribute("Miuo", 0.5, "", UNIT_TYPE_DIMENSIONLESS, QStringList(), QStringList());
+ m_Miuo = nmDataAttribute("Miuo", 0.5, "mPa.s");
// 气相PVT单值
m_Bg = nmDataAttribute("Bg", 1.0, "", UNIT_TYPE_DIMENSIONLESS, QStringList(), QStringList());
@@ -22,8 +23,8 @@ nmDataReservoir::nmDataReservoir() {
m_Miuw = nmDataAttribute("Miuw", 1.0, "", UNIT_TYPE_DIMENSIONLESS, QStringList(), QStringList());
// 压缩系数
- m_Ct = nmDataAttribute("Ct", 0.001, "", UNIT_TYPE_DIMENSIONLESS, QStringList(), QStringList());
- m_Cf = nmDataAttribute("Cf", 0.0001, "", UNIT_TYPE_DIMENSIONLESS, QStringList(), QStringList());
+ m_Ct = nmDataAttribute("Ct", 0.001, "1/MPa");
+ m_Cf = nmDataAttribute("Cf", 0.0001, "1/MPa");
// 储层类型与传导率
m_reservoirType = nmDataAttribute("Reservoir type", "Homogeneous", "", UNIT_TYPE_DIMENSIONLESS, QStringList() << "Homogeneous" << "Dual porosity pseudo steady state", QStringList());
@@ -40,7 +41,7 @@ nmDataReservoir::nmDataReservoir() {
void nmDataReservoir::resetToDefaults()
{
- m_permeability.setValue(0.025);
+ m_permeability.setValue(25.0);
m_transmissibility.setValue(1000.0);
}
@@ -147,6 +148,8 @@ void nmDataReservoir::FromJsonValue(const rapidjson::Value& jsonValue)
}
if (jsonValue.HasMember("Permeability") && jsonValue["Permeability"].IsObject()) {
m_permeability.FromJsonValue(jsonValue["Permeability"]);
+ // JSON中的单位文本不参与兼容换算,读取后的数据层单位始终固定为mD。
+ m_permeability.setUnit("mD");
}
if (jsonValue.HasMember("Thickness") && jsonValue["Thickness"].IsObject()) {
m_thickness.FromJsonValue(jsonValue["Thickness"]);
@@ -240,11 +243,11 @@ bool nmDataReservoir::_parseData(VecVariant vec, int& n) {
m_initialPressure = nmDataAttribute("Initial Pressure", vec[n++].toString(), "MPa");
m_reservoirType = nmDataAttribute("Reservoir Type", vec[n++].toString(), "");
m_Bo = nmDataAttribute("Bo", vec[n++].toString(), "");
- m_Miuo = nmDataAttribute("Miuo", vec[n++].toString(), "mPa.s(cp)");
+ m_Miuo = nmDataAttribute("Miuo", vec[n++].toString(), "mPa.s");
m_permeability = nmDataAttribute("Permeability", vec[n++].toString(), "mD");
m_thickness = nmDataAttribute("Thickness", vec[n++].toString(), "m");
m_porosity = nmDataAttribute("Porosity", vec[n++].toString(), "");
- m_Ct = nmDataAttribute("Ct", vec[n++].toString(), "");
+ m_Ct = nmDataAttribute("Ct", vec[n++].toString(), "1/MPa");
m_kxKy = nmDataAttribute("Kx/Ky", vec[n++].toString(), "");
return true;
}
@@ -280,11 +283,12 @@ void nmDataReservoir::onDeserialize(ZxSerializer* ser) {
ser->read("InitialPressure", tempValue); m_initialPressure = nmDataAttribute("Initial Pressure", tempValue, "MPa");
ser->read("ReservoirType", tempValue); m_reservoirType = nmDataAttribute("Reservoir Type", tempValue, "");
ser->read("Bo", tempValue); m_Bo = nmDataAttribute("Bo", tempValue, "");
- ser->read("Miuo", tempValue); m_Miuo = nmDataAttribute("Miuo", tempValue, "mPa.s(cp)");
+ ser->read("Miuo", tempValue); m_Miuo = nmDataAttribute("Miuo", tempValue, "mPa.s");
+ // 序列化格式只保存数值,读取时明确按数据层基准单位mD解释。
ser->read("Permeability", tempValue); m_permeability = nmDataAttribute("Permeability", tempValue, "mD");
ser->read("Thickness", tempValue); m_thickness = nmDataAttribute("Thickness", tempValue, "m");
ser->read("Porosity", tempValue); m_porosity = nmDataAttribute("Porosity", tempValue, "");
- ser->read("NetToGross", tempValue); m_Ct = nmDataAttribute("Ct", tempValue, "");
+ ser->read("Ct", tempValue); m_Ct = nmDataAttribute("Ct", tempValue, "1/MPa");
ser->read("KxKy", tempValue); m_kxKy = nmDataAttribute("Kx/Ky", tempValue, "");
}
diff --git a/Src/nmNum/nmSubWnd/nmSubWndMain.cpp b/Src/nmNum/nmSubWnd/nmSubWndMain.cpp
index 4574dbc..ec424fd 100644
--- a/Src/nmNum/nmSubWnd/nmSubWndMain.cpp
+++ b/Src/nmNum/nmSubWnd/nmSubWndMain.cpp
@@ -56,7 +56,8 @@
#include "nmWxRCDialog.h"
#include "nmWxWellLayerDlg.h"
#include "nmWxGeometryLayerDlg.h"
-#include "nmWxReservoirPropertiesDlg.h"
+#include "nmReservoirPropertiesDataSource.h"
+#include "nmWxReservoirPropertiesEditor.h"
#include "nmWxPropertyInterpolationDlg.h"
#include "nmWxPostprocessingAnimationWidget.h"
#include "nmWxGeoRefDlg.h"
@@ -1979,10 +1980,29 @@ bool nmSubWndMain::onConfirmClosing()
void nmSubWndMain::reservoirCharacteristics()
{
- nmWxReservoirPropertiesDlg dlg;
- dlg.exec();
+ // 第一步:取得当前分析窗口对应的数据管理器,避免新对话框访问全局单例。
+ nmDataAnalyzeManager* pDataManager = nmDataAnalyzeManager::getCurrentInstance();
+ if (pDataManager == nullptr)
+ {
+ QMessageBox::warning(this, tr("Reservoir properties"),
+ tr("The current numerical well-test data is unavailable."));
+ return;
+ }
+
+ // 第二步:在入口处组装数据源和编辑器,两个对象的生命周期覆盖整个模态会话。
+ nmAnalyzeManagerReservoirDataSource oDataSource(pDataManager);
+ nmWxReservoirPropertiesEditor oEditor(&oDataSource, this);
+
+ // 第三步:先建立工作副本;初始化失败时不打开不完整的参数界面。
+ QString sError;
+ if (!oEditor.initialize(sError))
+ {
+ QMessageBox::warning(this, tr("Reservoir properties"), sError);
+ return;
+ }
- // TODO: 修改完参数应该刷新画布
+ // 第四步:确定时由编辑会话一次性提交,取消时真实数据保持不变。
+ oEditor.exec();
}
void nmSubWndMain::geoLayering()
diff --git a/Src/nmNum/nmSubWxs/nmReservoirParameterCatalog.cpp b/Src/nmNum/nmSubWxs/nmReservoirParameterCatalog.cpp
new file mode 100644
index 0000000..55a636a
--- /dev/null
+++ b/Src/nmNum/nmSubWxs/nmReservoirParameterCatalog.cpp
@@ -0,0 +1,1029 @@
+#include "nmReservoirParameterCatalog.h"
+
+#include "nmReservoirPropertiesDataSource.h"
+#include "nmAttrRegistry.h"
+#include "nmDataAnalyzeManager.h"
+#include "nmDataAttribute.h"
+#include "nmDataPerforation.h"
+
+#include
+
+namespace
+{
+
+/*
+ * Qt 4.8的lupdate无法跟踪editorText()的间接参数,以下标记只用于
+ * 收集中英文资源;运行时仍由同一翻译上下文返回文字。
+ */
+static const char* const s_pCatalogTranslationMarkers[] =
+{
+ QT_TRANSLATE_NOOP("nmWxReservoirPropertiesEditor", "Reservoir type"),
+ QT_TRANSLATE_NOOP("nmWxReservoirPropertiesEditor", "Homogeneous"),
+ QT_TRANSLATE_NOOP("nmWxReservoirPropertiesEditor", "Dual porosity pseudo steady state"),
+ QT_TRANSLATE_NOOP("nmWxReservoirPropertiesEditor", "Fault flow model"),
+ QT_TRANSLATE_NOOP("nmWxReservoirPropertiesEditor", "Boundary type"),
+ QT_TRANSLATE_NOOP("nmWxReservoirPropertiesEditor", "Leaky"),
+ QT_TRANSLATE_NOOP("nmWxReservoirPropertiesEditor", "Composite limit"),
+ QT_TRANSLATE_NOOP("nmWxReservoirPropertiesEditor", "Permeable boundary"),
+ QT_TRANSLATE_NOOP("nmWxReservoirPropertiesEditor", "Composite boundary"),
+ QT_TRANSLATE_NOOP("nmWxReservoirPropertiesEditor", "Fracture flow model"),
+ QT_TRANSLATE_NOOP("nmWxReservoirPropertiesEditor", "Finite conductivity"),
+ QT_TRANSLATE_NOOP("nmWxReservoirPropertiesEditor", "Infinite conductivity"),
+ QT_TRANSLATE_NOOP("nmWxReservoirPropertiesEditor", "Position and wellbore"),
+ QT_TRANSLATE_NOOP("nmWxReservoirPropertiesEditor", "Wellbore storage"),
+ QT_TRANSLATE_NOOP("nmWxReservoirPropertiesEditor", "Wellbore storage and fracture"),
+ QT_TRANSLATE_NOOP("nmWxReservoirPropertiesEditor", "Basic and medium properties"),
+ QT_TRANSLATE_NOOP("nmWxReservoirPropertiesEditor", "Fluid parameters"),
+ QT_TRANSLATE_NOOP("nmWxReservoirPropertiesEditor", "Oil phase parameters"),
+ QT_TRANSLATE_NOOP("nmWxReservoirPropertiesEditor", "Water phase parameters"),
+ QT_TRANSLATE_NOOP("nmWxReservoirPropertiesEditor", "Compressibility"),
+ QT_TRANSLATE_NOOP("nmWxReservoirPropertiesEditor", "Compressibility and saturation"),
+ QT_TRANSLATE_NOOP("nmWxReservoirPropertiesEditor", "Reservoir parameters"),
+ QT_TRANSLATE_NOOP("nmWxReservoirPropertiesEditor", "Vertical well"),
+ QT_TRANSLATE_NOOP("nmWxReservoirPropertiesEditor", "Fractured vertical well"),
+ QT_TRANSLATE_NOOP("nmWxReservoirPropertiesEditor", "Multistage fractured horizontal well"),
+ QT_TRANSLATE_NOOP("nmWxReservoirPropertiesEditor", "Reservoir medium parameters"),
+ QT_TRANSLATE_NOOP("nmWxReservoirPropertiesEditor", "Geometry"),
+ QT_TRANSLATE_NOOP("nmWxReservoirPropertiesEditor", "Flow properties"),
+ QT_TRANSLATE_NOOP("nmWxReservoirPropertiesEditor", "Conductivity properties"),
+ QT_TRANSLATE_NOOP("nmWxReservoirPropertiesEditor", "Boundary properties")
+};
+
+/** @brief 返回当前语言下的界面文字。 */
+QString editorText(const char* pText)
+{
+ Q_UNUSED(s_pCatalogTranslationMarkers);
+ return QCoreApplication::translate("nmWxReservoirPropertiesEditor", pText);
+}
+
+/** @brief 创建一个稳定枚举选项。 */
+nmReservoirEnumOption enumOption(const QString& sCode, const char* pText)
+{
+ nmReservoirEnumOption oOption;
+ oOption.m_sCode = sCode;
+ oOption.m_sText = editorText(pText);
+ return oOption;
+}
+
+/** @brief 创建一个数值字段描述。 */
+nmReservoirParameterFieldInfo numericField(
+ const QString& sParameterId,
+ const QString& sBaseParameterId,
+ nmReservoirParameterEditorType eEditorType)
+{
+ nmReservoirParameterFieldInfo oField;
+ oField.m_sParameterId = sParameterId;
+ oField.m_sBaseParameterId = sBaseParameterId;
+ oField.m_eEditorType = eEditorType;
+ oField.m_bUnitEnabled = true;
+ return oField;
+}
+
+/** @brief 创建一个浮点数字段描述。 */
+nmReservoirParameterFieldInfo numericField(
+ const QString& sParameterId,
+ const QString& sBaseParameterId)
+{
+ return numericField(sParameterId, sBaseParameterId,
+ NM_RESERVOIR_EDITOR_NUMBER);
+}
+
+/** @brief 创建一个明确不显示单位的浮点数字段。 */
+nmReservoirParameterFieldInfo unitlessNumericField(
+ const QString& sParameterId,
+ const QString& sBaseParameterId)
+{
+ nmReservoirParameterFieldInfo oField =
+ numericField(sParameterId, sBaseParameterId);
+ oField.m_bUnitEnabled = false;
+ return oField;
+}
+
+/** @brief 创建储层类型字段。 */
+nmReservoirParameterFieldInfo reservoirModelField(
+ const QString& sParameterId)
+{
+ nmReservoirParameterFieldInfo oField;
+ oField.m_sParameterId = sParameterId;
+ oField.m_sLabel = editorText("Reservoir type");
+ oField.m_eEditorType = NM_RESERVOIR_EDITOR_ENUM;
+ oField.m_bUnitEnabled = false;
+ oField.m_listOptions.append(enumOption("homogeneous", "Homogeneous"));
+ oField.m_listOptions.append(enumOption(
+ "dual_porosity_pss", "Dual porosity pseudo steady state"));
+ return oField;
+}
+
+/** @brief 按指定显示文字创建断层或复合区流动模型字段。 */
+nmReservoirParameterFieldInfo leakageModelField(
+ const QString& sParameterId,
+ const char* pLabel,
+ const char* pLeakyText,
+ const char* pCompositeText)
+{
+ nmReservoirParameterFieldInfo oField;
+ oField.m_sParameterId = sParameterId;
+ oField.m_sLabel = editorText(pLabel);
+ oField.m_eEditorType = NM_RESERVOIR_EDITOR_ENUM;
+ oField.m_bUnitEnabled = false;
+ oField.m_listOptions.append(enumOption("leaky", pLeakyText));
+ oField.m_listOptions.append(enumOption(
+ "composite_limit", pCompositeText));
+ return oField;
+}
+
+/** @brief 创建裂缝导流模型字段。 */
+nmReservoirParameterFieldInfo fractureModelField(
+ const QString& sParameterId)
+{
+ nmReservoirParameterFieldInfo oField;
+ oField.m_sParameterId = sParameterId;
+ oField.m_sLabel = editorText("Fracture flow model");
+ oField.m_eEditorType = NM_RESERVOIR_EDITOR_ENUM;
+ oField.m_bUnitEnabled = false;
+ oField.m_listOptions.append(enumOption(
+ "finite_conductivity", "Finite conductivity"));
+ oField.m_listOptions.append(enumOption(
+ "infinite_conductivity", "Infinite conductivity"));
+ return oField;
+}
+
+/** @brief 创建页面上的一个参数分组。 */
+nmReservoirParameterGroupInfo parameterGroup(
+ const char* pTitle,
+ int nRow,
+ int nColumn,
+ int nColumnSpan)
+{
+ nmReservoirParameterGroupInfo oGroup;
+ oGroup.m_sTitle = editorText(pTitle);
+ oGroup.m_nRow = nRow;
+ oGroup.m_nColumn = nColumn;
+ oGroup.m_nRowSpan = 1;
+ oGroup.m_nColumnSpan = nColumnSpan;
+ oGroup.m_bValueRightAligned = false;
+ oGroup.m_bFieldsCentered = false;
+ return oGroup;
+}
+
+/** @brief 返回当前求解器模型对应的流体参数分组标题。 */
+const char* solverPvtGroupTitle(
+ int nSolverModelType,
+ NM_PHASE_TYPE ePhaseType)
+{
+ switch (nSolverModelType)
+ {
+ case SMT_Oil_ConstPvt:
+ return "Oil phase parameters";
+ case SMT_Water_ConstPvt:
+ return "Water phase parameters";
+ default:
+ if (nSolverModelType == 0 && ePhaseType == PHASE_Oil)
+ {
+ return "Oil phase parameters";
+ }
+ if (nSolverModelType == 0 && ePhaseType == PHASE_Water)
+ {
+ return "Water phase parameters";
+ }
+ return "Fluid parameters";
+ }
+}
+
+/** @brief 按求解器模型向流体分组添加实际使用的PVT单值参数。 */
+void appendSolverPvtFields(
+ nmReservoirParameterGroupInfo& oGroup,
+ int nSolverModelType,
+ NM_PHASE_TYPE ePhaseType)
+{
+ switch (nSolverModelType)
+ {
+ case SMT_Oil_ConstPvt:
+ oGroup.m_listFields
+ << numericField("Miuo", "Miuo")
+ << unitlessNumericField("Bo", "Bo");
+ break;
+ case SMT_Water_ConstPvt:
+ oGroup.m_listFields
+ << numericField("Miuw", "Miuw")
+ << unitlessNumericField("Bw", "Bw");
+ break;
+ default:
+ // 自定义数据源未提供模型类型时,按单相相态保留兼容入口。
+ if (nSolverModelType == 0 &&
+ (ePhaseType == PHASE_Oil ||
+ ePhaseType == PHASE_UNKNOWN))
+ {
+ oGroup.m_listFields
+ << numericField("Miuo", "Miuo")
+ << unitlessNumericField("Bo", "Bo");
+ }
+ else if (nSolverModelType == 0 &&
+ ePhaseType == PHASE_Water)
+ {
+ oGroup.m_listFields
+ << numericField("Miuw", "Miuw")
+ << unitlessNumericField("Bw", "Bw");
+ }
+ break;
+ }
+}
+
+/** @brief 判断当前模型是否需要编辑初始含水饱和度。 */
+bool solverUsesInitialWaterSaturation(
+ int nSolverModelType,
+ NM_PHASE_TYPE ePhaseType)
+{
+ return nSolverModelType == SMT_Oil_Water_TwoPhase ||
+ (nSolverModelType == 0 &&
+ ePhaseType == PHASE_Oil_Water);
+}
+
+/** @brief 判断当前模型是否需要编辑初始含油饱和度。 */
+bool solverUsesInitialOilSaturation(
+ int nSolverModelType,
+ NM_PHASE_TYPE ePhaseType)
+{
+ return nSolverModelType == SMT_Oil_Water_TwoPhase ||
+ (nSolverModelType == 0 &&
+ ePhaseType == PHASE_Oil_Water);
+}
+
+/** @brief 判断当前模型是否需要编辑初始含气饱和度。 */
+bool solverUsesInitialGasSaturation(
+ int nSolverModelType,
+ NM_PHASE_TYPE ePhaseType)
+{
+ return nSolverModelType == SMT_Gas_VariablePvt ||
+ nSolverModelType == SMT_Gas_PseudoPressure ||
+ (nSolverModelType == 0 &&
+ ePhaseType == PHASE_Gas);
+}
+
+/** @brief 按求解器模型添加实际使用的压缩系数和饱和度参数。 */
+void appendSolverCompressionFields(
+ nmReservoirParameterGroupInfo& oGroup,
+ int nSolverModelType,
+ NM_PHASE_TYPE ePhaseType)
+{
+ switch (nSolverModelType)
+ {
+ case SMT_Oil_ConstPvt:
+ case SMT_Water_ConstPvt:
+ oGroup.m_listFields.append(numericField("Cti", "Cti"));
+ break;
+ default:
+ if (nSolverModelType == 0 &&
+ (ePhaseType == PHASE_Oil ||
+ ePhaseType == PHASE_Water ||
+ ePhaseType == PHASE_UNKNOWN))
+ {
+ oGroup.m_listFields.append(numericField("Cti", "Cti"));
+ }
+ else
+ {
+ oGroup.m_listFields.append(numericField("Cf", "Cf"));
+ }
+ break;
+ }
+
+ if (solverUsesInitialOilSaturation(nSolverModelType, ePhaseType))
+ {
+ oGroup.m_listFields.append(numericField("Soi", "Soi"));
+ }
+ if (solverUsesInitialWaterSaturation(nSolverModelType, ePhaseType))
+ {
+ oGroup.m_listFields.append(numericField("Swi", "Swi"));
+ }
+ if (solverUsesInitialGasSaturation(nSolverModelType, ePhaseType))
+ {
+ oGroup.m_listFields.append(numericField("Sgi", "Sgi"));
+ }
+}
+
+/** @brief 为参数ID添加对象编码前缀。 */
+QString prefixed(const QString& sObjectCode, const char* pParameterId)
+{
+ return sObjectCode + "_" + QString::fromLatin1(pParameterId);
+}
+
+/** @brief 生成无井编码时的会话编码。 */
+QString wellCode(const nmDataWellBase& oWell,
+ const QString& sFallbackPrefix,
+ int nIndex)
+{
+ QString sCode = oWell.getWellCode();
+ if (sCode.isEmpty())
+ {
+ sCode = QString("%1%2").arg(sFallbackPrefix)
+ .arg(nIndex + 1, 4, 10, QChar('0'));
+ }
+ return sCode;
+}
+
+/** @brief 创建井对象的分组描述。 */
+void createWellGroups(nmReservoirPropertyObjectInfo& oInfo,
+ NM_WELL_MODEL eWellType,
+ bool bHasPerforation)
+{
+ nmReservoirParameterGroupInfo oPosition =
+ parameterGroup("Position and wellbore", 0, 0, 1);
+ oPosition.m_bValueRightAligned = true;
+ oPosition.m_listFields
+ << numericField(prefixed(oInfo.m_sObjectCode, "W_X"), "W_X")
+ << numericField(prefixed(oInfo.m_sObjectCode, "W_Y"), "W_Y")
+ << numericField(prefixed(oInfo.m_sObjectCode, "W_Rw"), "W_Rw");
+ if (bHasPerforation)
+ {
+ oPosition.m_listFields.append(numericField(
+ prefixed(oInfo.m_sObjectCode, "W_Skin"), "W_Skin"));
+ }
+
+ const char* pStorageGroupTitle = eWellType == Vertical_Well
+ ? "Wellbore storage" : "Wellbore storage and fracture";
+ nmReservoirParameterGroupInfo oStorage =
+ parameterGroup(pStorageGroupTitle, 0, 1, 1);
+ oStorage.m_listFields.append(numericField(
+ prefixed(oInfo.m_sObjectCode, "W_C"), "W_C"));
+ if (eWellType == Vertical_Fractured_Well)
+ {
+ oStorage.m_listFields
+ << numericField(prefixed(oInfo.m_sObjectCode,
+ "W_FractureHalfLength"),
+ "W_FractureHalfLength")
+ << numericField(prefixed(oInfo.m_sObjectCode,
+ "W_FractureAngle"),
+ "W_FractureAngle")
+ << numericField(prefixed(oInfo.m_sObjectCode,
+ "W_Dfc"), "W_Dfc");
+ }
+ else if (eWellType == Horizontal_Fractured_Well)
+ {
+ oStorage.m_listFields
+ << numericField(prefixed(oInfo.m_sObjectCode,
+ "W_WellLength"),
+ "W_WellLength")
+ << numericField(prefixed(oInfo.m_sObjectCode,
+ "W_DrainAngle"),
+ "W_DrainAngle")
+ << numericField(prefixed(oInfo.m_sObjectCode,
+ "W_NumberOfFractures"),
+ "W_NumberOfFractures",
+ NM_RESERVOIR_EDITOR_INTEGER)
+ << numericField(prefixed(oInfo.m_sObjectCode,
+ "W_FractureHalfLength"),
+ "W_FractureHalfLength")
+ << numericField(prefixed(oInfo.m_sObjectCode,
+ "W_FractureAngle"),
+ "W_FractureAngle")
+ << numericField(prefixed(oInfo.m_sObjectCode,
+ "W_Dfc"), "W_Dfc");
+ }
+ oInfo.m_listGroups << oPosition << oStorage;
+}
+
+/** @brief 注册一口井的全部可编辑数值属性。 */
+void registerWell(nmAttrRegistry* pRegistry,
+ nmDataWellBase& oWell,
+ const QString& sCode)
+{
+ pRegistry->regAttr(prefixed(sCode, "W_X"), &oWell.getX());
+ pRegistry->regAttr(prefixed(sCode, "W_Y"), &oWell.getY());
+ pRegistry->regAttr(prefixed(sCode, "W_Rw"), &oWell.getRadius());
+ pRegistry->regAttr(prefixed(sCode, "W_C"), &oWell.getWellboreStorage());
+ if (oWell.getPerforationCount() > 0 &&
+ oWell.getPerforation(0) != nullptr)
+ {
+ pRegistry->regAttr(prefixed(sCode, "W_Skin"),
+ &oWell.getPerforation(0)->getSkin());
+ }
+}
+
+/** @brief 判断对象描述中是否包含指定枚举字段。 */
+bool containsEnumField(const nmReservoirPropertyObjectInfo& oInfo,
+ const QString& sParameterId)
+{
+ for (int nGroupIndex = 0;
+ nGroupIndex < oInfo.m_listGroups.size();
+ ++nGroupIndex)
+ {
+ const nmReservoirParameterGroupInfo& oGroup =
+ oInfo.m_listGroups[nGroupIndex];
+ for (int nFieldIndex = 0;
+ nFieldIndex < oGroup.m_listFields.size();
+ ++nFieldIndex)
+ {
+ const nmReservoirParameterFieldInfo& oField =
+ oGroup.m_listFields[nFieldIndex];
+ if (oField.m_eEditorType == NM_RESERVOIR_EDITOR_ENUM &&
+ oField.m_sParameterId == sParameterId)
+ {
+ return true;
+ }
+ }
+ }
+ return false;
+}
+
+}
+
+void nmReservoirParameterCatalog::registerSnapshot(
+ nmAttrRegistry* pRegistry,
+ nmReservoirPropertiesSnapshot& oSnapshot)
+{
+ if (pRegistry == nullptr)
+ {
+ return;
+ }
+
+ // 第一步:重新建立编辑会话独占的注册表,杜绝与实时数据交叉连接。
+ pRegistry->clear();
+ pRegistry->regAttr("h", &oSnapshot.m_oReservoir.getThickness());
+ pRegistry->regAttr("Pi", &oSnapshot.m_oReservoir.getInitialPressure());
+ pRegistry->regAttr("K", &oSnapshot.m_oReservoir.getPermeability());
+ pRegistry->regAttr("phi", &oSnapshot.m_oReservoir.getPorosity());
+ pRegistry->regAttr("Cti", &oSnapshot.m_oReservoir.getCt());
+ pRegistry->regAttr("Cf", &oSnapshot.m_oReservoir.getCf());
+ pRegistry->regAttr("Soi", &oSnapshot.m_oReservoir.getSoi());
+ pRegistry->regAttr("Sgi", &oSnapshot.m_oReservoir.getSgi());
+ pRegistry->regAttr("Swi", &oSnapshot.m_oReservoir.getSwi());
+ pRegistry->regAttr("Bo", &oSnapshot.m_oReservoir.getBo());
+ pRegistry->regAttr("Miuo", &oSnapshot.m_oReservoir.getMiuo());
+ pRegistry->regAttr("Bw", &oSnapshot.m_oReservoir.getBw());
+ pRegistry->regAttr("Miuw", &oSnapshot.m_oReservoir.getMiuw());
+
+ // 第二步:注册求解器支持的三类井及其压裂参数。
+ for (int nIndex = 0;
+ nIndex < oSnapshot.m_vecVerticalWells.size();
+ ++nIndex)
+ {
+ nmDataVerticalWell& oWell = oSnapshot.m_vecVerticalWells[nIndex];
+ registerWell(pRegistry, oWell, wellCode(oWell, "VWELL", nIndex));
+ }
+ for (int nIndex = 0;
+ nIndex < oSnapshot.m_vecVerticalFracturedWells.size();
+ ++nIndex)
+ {
+ nmDataVerticalFracturedWell& oWell =
+ oSnapshot.m_vecVerticalFracturedWells[nIndex];
+ QString sCode = wellCode(oWell, "VFWELL", nIndex);
+ registerWell(pRegistry, oWell, sCode);
+ pRegistry->regAttr(prefixed(sCode, "W_FractureHalfLength"),
+ &oWell.getFractureHalfLength());
+ pRegistry->regAttr(prefixed(sCode, "W_FractureAngle"),
+ &oWell.getFractureAngle());
+ pRegistry->regAttr(prefixed(sCode, "W_Dfc"), &oWell.getDfc());
+ }
+ for (int nIndex = 0;
+ nIndex < oSnapshot.m_vecHorizontalFracturedWells.size();
+ ++nIndex)
+ {
+ nmDataHorizontalFracturedWell& oWell =
+ oSnapshot.m_vecHorizontalFracturedWells[nIndex];
+ QString sCode = wellCode(oWell, "HFWELL", nIndex);
+ registerWell(pRegistry, oWell, sCode);
+ pRegistry->regAttr(prefixed(sCode, "W_WellLength"),
+ &oWell.getWellLength());
+ pRegistry->regAttr(prefixed(sCode, "W_DrainAngle"),
+ &oWell.getDrainAngle());
+ pRegistry->regAttr(prefixed(sCode, "W_NumberOfFractures"),
+ &oWell.getNumberOfFractures());
+ pRegistry->regAttr(prefixed(sCode, "W_FractureHalfLength"),
+ &oWell.getFractureHalfLength());
+ pRegistry->regAttr(prefixed(sCode, "W_FractureAngle"),
+ &oWell.getFractureAngle());
+ pRegistry->regAttr(prefixed(sCode, "W_Dfc"), &oWell.getDfc());
+ }
+
+ // 第三步:注册区域标记和复合区数值参数。
+ for (int nIndex = 0;
+ nIndex < oSnapshot.m_vecRegionMarks.size();
+ ++nIndex)
+ {
+ QString sCode = QString("RMARK%1")
+ .arg(nIndex + 1, 4, 10, QChar('0'));
+ nmDataRegionMark& oMark = oSnapshot.m_vecRegionMarks[nIndex];
+ pRegistry->regAttr(prefixed(sCode, "RM_ComW"), &oMark.getComW());
+ pRegistry->regAttr(prefixed(sCode, "RM_ComKr"), &oMark.getComKr());
+ pRegistry->regAttr(prefixed(sCode, "RM_NetToGross"),
+ &oMark.getNetToGross());
+ }
+ for (int nIndex = 0;
+ nIndex < oSnapshot.m_vecRegions.size();
+ ++nIndex)
+ {
+ QString sCode = QString("REGION%1")
+ .arg(nIndex + 1, 4, 10, QChar('0'));
+ pRegistry->regAttr(prefixed(sCode, "R_Leakage"),
+ &oSnapshot.m_vecRegions[nIndex]
+ .getRegionLeakage());
+ }
+
+ // 第四步:注册断层和普通裂缝;DFN由专用功能维护。
+ for (int nIndex = 0;
+ nIndex < oSnapshot.m_vecFaults.size();
+ ++nIndex)
+ {
+ QString sCode = QString("FAULT%1")
+ .arg(nIndex + 1, 4, 10, QChar('0'));
+ nmDataFault& oFault = oSnapshot.m_vecFaults[nIndex];
+ pRegistry->regAttr(prefixed(sCode, "FT_X0"), &oFault.getStartX());
+ pRegistry->regAttr(prefixed(sCode, "FT_Y0"), &oFault.getStartY());
+ pRegistry->regAttr(prefixed(sCode, "FT_X1"), &oFault.getEndX());
+ pRegistry->regAttr(prefixed(sCode, "FT_Y1"), &oFault.getEndY());
+ pRegistry->regAttr(prefixed(sCode, "FT_Leakage"),
+ &oFault.getFaultLeakage());
+ }
+
+ int nVisibleFracture = 0;
+ for (int nIndex = 0;
+ nIndex < oSnapshot.m_vecFractures.size();
+ ++nIndex)
+ {
+ nmDataFracture& oFracture = oSnapshot.m_vecFractures[nIndex];
+ if (oFracture.getFractureType().getValue().toString() == "DFN")
+ {
+ continue;
+ }
+ QString sCode = QString("FRAC%1")
+ .arg(++nVisibleFracture, 4, 10, QChar('0'));
+ pRegistry->regAttr(prefixed(sCode, "F_X0"),
+ &oFracture.getStartX());
+ pRegistry->regAttr(prefixed(sCode, "F_Y0"),
+ &oFracture.getStartY());
+ pRegistry->regAttr(prefixed(sCode, "F_X1"),
+ &oFracture.getEndX());
+ pRegistry->regAttr(prefixed(sCode, "F_Y1"),
+ &oFracture.getEndY());
+ pRegistry->regAttr(prefixed(sCode, "F_FC"),
+ &oFracture.getFractureDfc());
+ pRegistry->regAttr(prefixed(sCode, "F_DW"),
+ &oFracture.getFractureDw());
+ }
+}
+
+QList
+nmReservoirParameterCatalog::createObjectInfos(
+ nmReservoirPropertiesCategory eCategory,
+ nmReservoirPropertiesSnapshot& oSnapshot)
+{
+ QList listInfos;
+
+ if (eCategory == NM_RESERVOIR_PAGE_RESERVOIR)
+ {
+ nmReservoirPropertyObjectInfo oInfo;
+ oInfo.m_eCategory = eCategory;
+ oInfo.m_eObjectType = NM_RESERVOIR_OBJECT_RESERVOIR;
+ oInfo.m_nSourceIndex = 0;
+ oInfo.m_sObjectCode = "RESERVOIR";
+ oInfo.m_sDisplayName = editorText("Reservoir parameters");
+
+ NM_PHASE_TYPE ePhaseType =
+ oSnapshot.m_oReservoir.getPhaseType();
+
+ nmReservoirParameterGroupInfo oBasic =
+ parameterGroup("Basic and medium properties", 0, 0, 1);
+ oBasic.m_nRowSpan = 2;
+ oBasic.m_bValueRightAligned = true;
+ oBasic.m_listFields
+ << numericField("Pi", "Pi")
+ << numericField("K", "K")
+ << numericField("h", "h")
+ << numericField("phi", "phi");
+
+ nmReservoirParameterGroupInfo oFluid =
+ parameterGroup(solverPvtGroupTitle(
+ oSnapshot.m_nSolverModelType,
+ ePhaseType),
+ 0, 1, 1);
+ appendSolverPvtFields(oFluid,
+ oSnapshot.m_nSolverModelType,
+ ePhaseType);
+
+ bool bUsesSaturation = solverUsesInitialWaterSaturation(
+ oSnapshot.m_nSolverModelType, ePhaseType) ||
+ solverUsesInitialGasSaturation(
+ oSnapshot.m_nSolverModelType, ePhaseType);
+ nmReservoirParameterGroupInfo oCompression =
+ parameterGroup(bUsesSaturation
+ ? "Compressibility and saturation"
+ : "Compressibility",
+ oFluid.m_listFields.isEmpty() ? 0 : 1,
+ 1, 1);
+ if (oFluid.m_listFields.isEmpty())
+ {
+ oCompression.m_nRowSpan = 2;
+ }
+ appendSolverCompressionFields(oCompression,
+ oSnapshot.m_nSolverModelType,
+ ePhaseType);
+ oInfo.m_listGroups.append(oBasic);
+ if (!oFluid.m_listFields.isEmpty())
+ {
+ oInfo.m_listGroups.append(oFluid);
+ }
+ oInfo.m_listGroups.append(oCompression);
+ listInfos.append(oInfo);
+ return listInfos;
+ }
+
+ if (eCategory == NM_RESERVOIR_PAGE_WELL)
+ {
+ for (int nIndex = 0;
+ nIndex < oSnapshot.m_vecVerticalWells.size();
+ ++nIndex)
+ {
+ nmDataVerticalWell& oWell =
+ oSnapshot.m_vecVerticalWells[nIndex];
+ nmReservoirPropertyObjectInfo oInfo;
+ oInfo.m_eCategory = eCategory;
+ oInfo.m_eObjectType = NM_RESERVOIR_OBJECT_VERTICAL_WELL;
+ oInfo.m_nSourceIndex = nIndex;
+ oInfo.m_sObjectCode = wellCode(oWell, "VWELL", nIndex);
+ oInfo.m_sDisplayName = oWell.getWellName() + " - " +
+ editorText("Vertical well");
+ createWellGroups(oInfo, Vertical_Well,
+ oWell.getPerforationCount() > 0);
+ listInfos.append(oInfo);
+ }
+ for (int nIndex = 0;
+ nIndex < oSnapshot.m_vecVerticalFracturedWells.size();
+ ++nIndex)
+ {
+ nmDataVerticalFracturedWell& oWell =
+ oSnapshot.m_vecVerticalFracturedWells[nIndex];
+ nmReservoirPropertyObjectInfo oInfo;
+ oInfo.m_eCategory = eCategory;
+ oInfo.m_eObjectType =
+ NM_RESERVOIR_OBJECT_VERTICAL_FRAC_WELL;
+ oInfo.m_nSourceIndex = nIndex;
+ oInfo.m_sObjectCode = wellCode(oWell, "VFWELL", nIndex);
+ oInfo.m_sDisplayName = oWell.getWellName() + " - " +
+ editorText("Fractured vertical well");
+ createWellGroups(oInfo, Vertical_Fractured_Well,
+ oWell.getPerforationCount() > 0);
+ listInfos.append(oInfo);
+ }
+ for (int nIndex = 0;
+ nIndex < oSnapshot.m_vecHorizontalFracturedWells.size();
+ ++nIndex)
+ {
+ nmDataHorizontalFracturedWell& oWell =
+ oSnapshot.m_vecHorizontalFracturedWells[nIndex];
+ nmReservoirPropertyObjectInfo oInfo;
+ oInfo.m_eCategory = eCategory;
+ oInfo.m_eObjectType =
+ NM_RESERVOIR_OBJECT_HORIZONTAL_FRAC_WELL;
+ oInfo.m_nSourceIndex = nIndex;
+ oInfo.m_sObjectCode = wellCode(oWell, "HFWELL", nIndex);
+ oInfo.m_sDisplayName = oWell.getWellName() + " - " +
+ editorText("Multistage fractured horizontal well");
+ createWellGroups(oInfo, Horizontal_Fractured_Well,
+ oWell.getPerforationCount() > 0);
+ listInfos.append(oInfo);
+ }
+ return listInfos;
+ }
+
+ if (eCategory == NM_RESERVOIR_PAGE_REGION_MARK)
+ {
+ for (int nIndex = 0;
+ nIndex < oSnapshot.m_vecRegionMarks.size();
+ ++nIndex)
+ {
+ nmReservoirPropertyObjectInfo oInfo;
+ oInfo.m_eCategory = eCategory;
+ oInfo.m_eObjectType = NM_RESERVOIR_OBJECT_REGION_MARK;
+ oInfo.m_nSourceIndex = nIndex;
+ oInfo.m_sObjectCode = QString("RMARK%1")
+ .arg(nIndex + 1, 4, 10, QChar('0'));
+ oInfo.m_sDisplayName =
+ oSnapshot.m_vecRegionMarks[nIndex].getRegionMarkName();
+
+ nmReservoirParameterGroupInfo oDual =
+ parameterGroup("Reservoir medium parameters", 0, 0, 2);
+ oDual.m_bFieldsCentered = true;
+ oDual.m_listFields
+ << reservoirModelField(prefixed(
+ oInfo.m_sObjectCode, "RM_ReservoirType"))
+ << numericField(prefixed(
+ oInfo.m_sObjectCode, "RM_ComW"), "RM_ComW")
+ << numericField(prefixed(
+ oInfo.m_sObjectCode, "RM_ComKr"), "RM_ComKr")
+ << numericField(prefixed(
+ oInfo.m_sObjectCode, "RM_NetToGross"),
+ "RM_NetToGross");
+ oInfo.m_listGroups.append(oDual);
+ listInfos.append(oInfo);
+ }
+ return listInfos;
+ }
+
+ if (eCategory == NM_RESERVOIR_PAGE_FAULT)
+ {
+ for (int nIndex = 0;
+ nIndex < oSnapshot.m_vecFaults.size();
+ ++nIndex)
+ {
+ nmReservoirPropertyObjectInfo oInfo;
+ oInfo.m_eCategory = eCategory;
+ oInfo.m_eObjectType = NM_RESERVOIR_OBJECT_FAULT;
+ oInfo.m_nSourceIndex = nIndex;
+ oInfo.m_sObjectCode = QString("FAULT%1")
+ .arg(nIndex + 1, 4, 10, QChar('0'));
+ oInfo.m_sDisplayName =
+ oSnapshot.m_vecFaults[nIndex].getFaultName();
+
+ nmReservoirParameterGroupInfo oGeometry =
+ parameterGroup("Geometry", 0, 0, 1);
+ oGeometry.m_bValueRightAligned = true;
+ oGeometry.m_listFields
+ << numericField(prefixed(
+ oInfo.m_sObjectCode, "FT_X0"), "FT_X0")
+ << numericField(prefixed(
+ oInfo.m_sObjectCode, "FT_Y0"), "FT_Y0")
+ << numericField(prefixed(
+ oInfo.m_sObjectCode, "FT_X1"), "FT_X1")
+ << numericField(prefixed(
+ oInfo.m_sObjectCode, "FT_Y1"), "FT_Y1");
+
+ nmReservoirParameterGroupInfo oFlow =
+ parameterGroup("Flow properties", 0, 1, 1);
+ oFlow.m_listFields
+ << leakageModelField(prefixed(
+ oInfo.m_sObjectCode, "FT_FlowModel"),
+ "Fault flow model",
+ "Leaky",
+ "Composite limit")
+ << numericField(prefixed(
+ oInfo.m_sObjectCode, "FT_Leakage"),
+ "FT_Leakage");
+ oInfo.m_listGroups << oGeometry << oFlow;
+ listInfos.append(oInfo);
+ }
+ return listInfos;
+ }
+
+ if (eCategory == NM_RESERVOIR_PAGE_FRACTURE)
+ {
+ int nVisibleFracture = 0;
+ for (int nIndex = 0;
+ nIndex < oSnapshot.m_vecFractures.size();
+ ++nIndex)
+ {
+ nmDataFracture& oFracture =
+ oSnapshot.m_vecFractures[nIndex];
+ if (oFracture.getFractureType().getValue().toString() ==
+ "DFN")
+ {
+ continue;
+ }
+ nmReservoirPropertyObjectInfo oInfo;
+ oInfo.m_eCategory = eCategory;
+ oInfo.m_eObjectType = NM_RESERVOIR_OBJECT_FRACTURE;
+ oInfo.m_nSourceIndex = nIndex;
+ oInfo.m_sObjectCode = QString("FRAC%1")
+ .arg(++nVisibleFracture, 4, 10, QChar('0'));
+ oInfo.m_sDisplayName = oFracture.getFractureName();
+
+ nmReservoirParameterGroupInfo oGeometry =
+ parameterGroup("Geometry", 0, 0, 1);
+ oGeometry.m_bValueRightAligned = true;
+ oGeometry.m_listFields
+ << numericField(prefixed(
+ oInfo.m_sObjectCode, "F_X0"), "F_X0")
+ << numericField(prefixed(
+ oInfo.m_sObjectCode, "F_Y0"), "F_Y0")
+ << numericField(prefixed(
+ oInfo.m_sObjectCode, "F_X1"), "F_X1")
+ << numericField(prefixed(
+ oInfo.m_sObjectCode, "F_Y1"), "F_Y1");
+
+ nmReservoirParameterGroupInfo oFlow =
+ parameterGroup("Conductivity properties", 0, 1, 1);
+ oFlow.m_listFields
+ << fractureModelField(prefixed(
+ oInfo.m_sObjectCode, "F_FlowModel"))
+ << numericField(prefixed(
+ oInfo.m_sObjectCode, "F_FC"), "F_FC")
+ << numericField(prefixed(
+ oInfo.m_sObjectCode, "F_DW"), "F_DW");
+ oInfo.m_listGroups << oGeometry << oFlow;
+ listInfos.append(oInfo);
+ }
+ return listInfos;
+ }
+
+ if (eCategory == NM_RESERVOIR_PAGE_COMPOSITE_REGION)
+ {
+ for (int nIndex = 0;
+ nIndex < oSnapshot.m_vecRegions.size();
+ ++nIndex)
+ {
+ nmReservoirPropertyObjectInfo oInfo;
+ oInfo.m_eCategory = eCategory;
+ oInfo.m_eObjectType = NM_RESERVOIR_OBJECT_REGION;
+ oInfo.m_nSourceIndex = nIndex;
+ oInfo.m_sObjectCode = QString("REGION%1")
+ .arg(nIndex + 1, 4, 10, QChar('0'));
+ oInfo.m_sDisplayName =
+ oSnapshot.m_vecRegions[nIndex].getRegoinName();
+
+ nmReservoirParameterGroupInfo oRegion =
+ parameterGroup("Boundary properties", 0, 0, 2);
+ oRegion.m_bFieldsCentered = true;
+ oRegion.m_listFields
+ << leakageModelField(prefixed(
+ oInfo.m_sObjectCode, "R_FlowModel"),
+ "Boundary type",
+ "Permeable boundary",
+ "Composite boundary")
+ << numericField(prefixed(
+ oInfo.m_sObjectCode, "R_Leakage"),
+ "R_Leakage");
+ oInfo.m_listGroups.append(oRegion);
+ listInfos.append(oInfo);
+ }
+ }
+ return listInfos;
+}
+
+QString nmReservoirParameterCatalog::enumCodeFromStoredValue(
+ const QString& sParameterId,
+ const QString& sStoredValue)
+{
+ QString sValue = sStoredValue.trimmed().toLower();
+ if (sParameterId.endsWith("ReservoirType"))
+ {
+ return sValue.contains("dual")
+ ? "dual_porosity_pss" : "homogeneous";
+ }
+ if (sParameterId.endsWith("F_FlowModel"))
+ {
+ return sValue.contains("infinite")
+ ? "infinite_conductivity" : "finite_conductivity";
+ }
+ if (sParameterId.endsWith("FlowModel"))
+ {
+ return sValue.contains("leaky") ? "leaky" : "composite_limit";
+ }
+ return QString();
+}
+
+QString nmReservoirParameterCatalog::storedValueFromEnumCode(
+ const QString& sParameterId,
+ const QString& sCode)
+{
+ if (sParameterId.endsWith("ReservoirType"))
+ {
+ return sCode == "dual_porosity_pss"
+ ? "Dual porosity pseudo steady state" : "Homogeneous";
+ }
+ if (sParameterId.endsWith("F_FlowModel"))
+ {
+ return sCode == "infinite_conductivity"
+ ? "Infinite Conductivity" : "Finite Conductivity";
+ }
+ if (sParameterId.endsWith("FlowModel"))
+ {
+ return sCode == "leaky" ? "Leaky" : "Composite limit";
+ }
+ return QString();
+}
+
+QString nmReservoirParameterCatalog::enumCode(
+ const nmReservoirPropertiesSnapshot& oSnapshot,
+ const QString& sParameterId)
+{
+ if (sParameterId == "ReservoirType")
+ {
+ nmDataReservoir& oReservoir =
+ const_cast(oSnapshot.m_oReservoir);
+ return enumCodeFromStoredValue(
+ sParameterId,
+ oReservoir.getReservoirType().getValue().toString());
+ }
+
+ QList listAll;
+ nmReservoirPropertiesSnapshot& oWritable =
+ const_cast(oSnapshot);
+ listAll << createObjectInfos(NM_RESERVOIR_PAGE_FAULT,
+ oWritable)
+ << createObjectInfos(NM_RESERVOIR_PAGE_FRACTURE,
+ oWritable)
+ << createObjectInfos(NM_RESERVOIR_PAGE_COMPOSITE_REGION,
+ oWritable)
+ << createObjectInfos(NM_RESERVOIR_PAGE_REGION_MARK,
+ oWritable);
+ for (int nInfoIndex = 0;
+ nInfoIndex < listAll.size();
+ ++nInfoIndex)
+ {
+ const nmReservoirPropertyObjectInfo& oInfo =
+ listAll[nInfoIndex];
+ if (!containsEnumField(oInfo, sParameterId))
+ {
+ continue;
+ }
+ if (oInfo.m_eObjectType == NM_RESERVOIR_OBJECT_REGION_MARK)
+ {
+ nmDataRegionMark& oMark =
+ oWritable.m_vecRegionMarks[oInfo.m_nSourceIndex];
+ return enumCodeFromStoredValue(
+ sParameterId,
+ oMark.getReservoirType().getValue().toString());
+ }
+ if (oInfo.m_eObjectType == NM_RESERVOIR_OBJECT_FAULT)
+ {
+ nmDataFault& oFault =
+ oWritable.m_vecFaults[oInfo.m_nSourceIndex];
+ return enumCodeFromStoredValue(
+ sParameterId,
+ oFault.getFaultFlowModel().getValue().toString());
+ }
+ if (oInfo.m_eObjectType == NM_RESERVOIR_OBJECT_FRACTURE)
+ {
+ nmDataFracture& oFracture =
+ oWritable.m_vecFractures[oInfo.m_nSourceIndex];
+ return enumCodeFromStoredValue(
+ sParameterId,
+ oFracture.getFractureFlowModel()
+ .getValue().toString());
+ }
+ if (oInfo.m_eObjectType == NM_RESERVOIR_OBJECT_REGION)
+ {
+ nmDataRegion& oRegion =
+ oWritable.m_vecRegions[oInfo.m_nSourceIndex];
+ return enumCodeFromStoredValue(
+ sParameterId,
+ oRegion.getRegionFlowModel().getValue().toString());
+ }
+ }
+ return QString();
+}
+
+bool nmReservoirParameterCatalog::setEnumCode(
+ nmReservoirPropertiesSnapshot& oSnapshot,
+ const QString& sParameterId,
+ const QString& sCode)
+{
+ QString sStoredValue =
+ storedValueFromEnumCode(sParameterId, sCode);
+ if (sStoredValue.isEmpty())
+ {
+ return false;
+ }
+
+ if (sParameterId == "ReservoirType")
+ {
+ oSnapshot.m_oReservoir.getReservoirType()
+ .setValue(sStoredValue);
+ return true;
+ }
+
+ QList listAll;
+ listAll << createObjectInfos(NM_RESERVOIR_PAGE_FAULT,
+ oSnapshot)
+ << createObjectInfos(NM_RESERVOIR_PAGE_FRACTURE,
+ oSnapshot)
+ << createObjectInfos(NM_RESERVOIR_PAGE_COMPOSITE_REGION,
+ oSnapshot)
+ << createObjectInfos(NM_RESERVOIR_PAGE_REGION_MARK,
+ oSnapshot);
+ for (int nInfoIndex = 0;
+ nInfoIndex < listAll.size();
+ ++nInfoIndex)
+ {
+ const nmReservoirPropertyObjectInfo& oInfo =
+ listAll[nInfoIndex];
+ if (!containsEnumField(oInfo, sParameterId))
+ {
+ continue;
+ }
+ if (oInfo.m_eObjectType == NM_RESERVOIR_OBJECT_REGION_MARK)
+ {
+ oSnapshot.m_vecRegionMarks[oInfo.m_nSourceIndex]
+ .getReservoirType().setValue(sStoredValue);
+ return true;
+ }
+ if (oInfo.m_eObjectType == NM_RESERVOIR_OBJECT_FAULT)
+ {
+ oSnapshot.m_vecFaults[oInfo.m_nSourceIndex]
+ .getFaultFlowModel().setValue(sStoredValue);
+ return true;
+ }
+ if (oInfo.m_eObjectType == NM_RESERVOIR_OBJECT_FRACTURE)
+ {
+ oSnapshot.m_vecFractures[oInfo.m_nSourceIndex]
+ .getFractureFlowModel().setValue(sStoredValue);
+ return true;
+ }
+ if (oInfo.m_eObjectType == NM_RESERVOIR_OBJECT_REGION)
+ {
+ oSnapshot.m_vecRegions[oInfo.m_nSourceIndex]
+ .getRegionFlowModel().setValue(sStoredValue);
+ return true;
+ }
+ }
+ return false;
+}
diff --git a/Src/nmNum/nmSubWxs/nmReservoirParameterField.cpp b/Src/nmNum/nmSubWxs/nmReservoirParameterField.cpp
new file mode 100644
index 0000000..70e2cd6
--- /dev/null
+++ b/Src/nmNum/nmSubWxs/nmReservoirParameterField.cpp
@@ -0,0 +1,487 @@
+#include "nmReservoirParameterField.h"
+
+#include "iParaItemCtrl.h"
+#include "iParameter.h"
+#include "iSysParaHelper.h"
+#include "mModuleDefines.h"
+
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+
+namespace
+{
+
+/* Qt 4.8的lupdate需要显式标记间接翻译字符串。 */
+static const char* const s_pFieldTranslationMarkers[] =
+{
+ QT_TRANSLATE_NOOP("nmReservoirParameterField", "The parameter layout is unavailable."),
+ QT_TRANSLATE_NOOP("nmReservoirParameterField", "Parameter definition not found: %1"),
+ QT_TRANSLATE_NOOP("nmReservoirParameterField", "Failed to bind the unit for parameter: %1")
+};
+
+/** @brief 返回轻量字段类使用的翻译文字。 */
+QString fieldText(const char* pText)
+{
+ Q_UNUSED(s_pFieldTranslationMarkers);
+ return QCoreApplication::translate(
+ "nmReservoirParameterField", pText);
+}
+
+/** @brief 根据有效状态生成悬浮提示文字。 */
+QString validationToolTip(const QString& sText, bool bValid)
+{
+ if (bValid)
+ {
+ return sText;
+ }
+
+ QString sEscaped = sText;
+ sEscaped.replace("&", "&");
+ sEscaped.replace("<", "<");
+ sEscaped.replace(">", ">");
+ sEscaped.replace("\"", """);
+ sEscaped.replace("\n", "
");
+ return "" +
+ sEscaped + "";
+}
+
+}
+
+nmReservoirParameterField::nmReservoirParameterField(
+ const nmReservoirParameterFieldInfo& oFieldInfo,
+ nmIReservoirParameterUnitService* pUnitService,
+ QObject* pParent)
+ : QObject(pParent),
+ m_oFieldInfo(oFieldInfo),
+ m_pUnitService(pUnitService),
+ m_pParameter(nullptr),
+ m_pLabel(nullptr),
+ m_pLineEdit(nullptr),
+ m_pValueComboBox(nullptr),
+ m_pUnitComboBox(nullptr),
+ m_pUnitLabel(nullptr),
+ m_clrNormalText(),
+ m_sExternalValidationError(),
+ m_bVisible(true),
+ m_bUpdating(false)
+{
+}
+
+nmReservoirParameterField::~nmReservoirParameterField()
+{
+ m_pUnitService = nullptr;
+ m_pParameter = nullptr;
+ m_pLabel = nullptr;
+ m_pLineEdit = nullptr;
+ m_pValueComboBox = nullptr;
+ m_pUnitComboBox = nullptr;
+ m_pUnitLabel = nullptr;
+}
+
+bool nmReservoirParameterField::initialize(QGridLayout* pLayout,
+ int nRow,
+ int nColumnOffset,
+ QString& sError)
+{
+ if (pLayout == nullptr)
+ {
+ sError = fieldText("The parameter layout is unavailable.");
+ return false;
+ }
+
+ // 第一步:枚举字段不依赖XML数值定义,直接创建稳定code下拉框。
+ if (isEnum())
+ {
+ createEnumEditor(pLayout, nRow, nColumnOffset);
+ sError.clear();
+ return true;
+ }
+
+ // 第二步:数值字段必须取得NM系列的基础参数定义。
+ m_pParameter = _paraHelper->getPara(
+ m_oFieldInfo.m_sBaseParameterId, s_Nm_Serie);
+ if (m_pParameter == nullptr)
+ {
+ sError = fieldText("Parameter definition not found: %1")
+ .arg(m_oFieldInfo.m_sBaseParameterId);
+ return false;
+ }
+
+ // 第三步:创建原型中的标签、输入框和单位列,不增加字段外框。
+ return createNumericEditor(pLayout, nRow, nColumnOffset, sError);
+}
+
+QString nmReservoirParameterField::parameterId() const
+{
+ return m_oFieldInfo.m_sParameterId;
+}
+
+QString nmReservoirParameterField::baseParameterId() const
+{
+ return m_oFieldInfo.m_sBaseParameterId;
+}
+
+bool nmReservoirParameterField::isEnum() const
+{
+ return m_oFieldInfo.m_eEditorType == NM_RESERVOIR_EDITOR_ENUM;
+}
+
+void nmReservoirParameterField::setValueRightAligned(bool bRightAligned)
+{
+ if (m_pLineEdit != nullptr)
+ {
+ m_pLineEdit->setAlignment(
+ (bRightAligned ? Qt::AlignRight : Qt::AlignLeft) |
+ Qt::AlignVCenter);
+ }
+}
+
+int nmReservoirParameterField::editorMinimumWidth()
+{
+ return 140;
+}
+
+int nmReservoirParameterField::unitMinimumWidth()
+{
+ return 86;
+}
+
+int nmReservoirParameterField::editorHeight()
+{
+ return 25;
+}
+
+bool nmReservoirParameterField::createNumericEditor(
+ QGridLayout* pLayout,
+ int nRow,
+ int nColumnOffset,
+ QString& sError)
+{
+ QWidget* pParentWidget = pLayout->parentWidget();
+ m_pLabel = new QLabel(m_pParameter->m_sAlias, pParentWidget);
+ m_pLabel->setAlignment(Qt::AlignRight | Qt::AlignVCenter);
+ m_pLabel->setWordWrap(false);
+ m_pLabel->setSizePolicy(QSizePolicy::Preferred,
+ QSizePolicy::Fixed);
+
+ m_pLineEdit = new QLineEdit(pParentWidget);
+ m_clrNormalText = m_pLineEdit->palette().color(QPalette::Text);
+ m_pLineEdit->setAlignment(Qt::AlignLeft | Qt::AlignVCenter);
+ m_pLineEdit->setFixedHeight(editorHeight());
+ m_pLineEdit->setMinimumWidth(editorMinimumWidth());
+ m_pLineEdit->setSizePolicy(QSizePolicy::Expanding,
+ QSizePolicy::Fixed);
+
+ pLayout->addWidget(m_pLabel, nRow, nColumnOffset);
+ pLayout->addWidget(m_pLineEdit, nRow, nColumnOffset + 1);
+
+ // 有单位参数直接注册到主对话框绑定器;字段只按控件指针读写,
+ // 因此多口井共用同一基础参数ID时也不会发生串值。
+ if (m_oFieldInfo.m_bUnitEnabled &&
+ !m_pParameter->m_sUnit.isEmpty())
+ {
+ m_pUnitComboBox = new QComboBox(pParentWidget);
+ m_pUnitComboBox->setFixedHeight(editorHeight());
+ m_pUnitComboBox->setMinimumWidth(unitMinimumWidth());
+ m_pUnitComboBox->setSizePolicy(QSizePolicy::Expanding,
+ QSizePolicy::Fixed);
+ pLayout->addWidget(m_pUnitComboBox, nRow, nColumnOffset + 2);
+ if (m_pUnitService == nullptr ||
+ !m_pUnitService->bindUnitField(
+ m_pLineEdit,
+ m_pUnitComboBox,
+ m_oFieldInfo.m_sBaseParameterId))
+ {
+ sError = fieldText(
+ "Failed to bind the unit for parameter: %1")
+ .arg(m_oFieldInfo.m_sBaseParameterId);
+ return false;
+ }
+ }
+ else
+ {
+ // 无单位参数保留空列用于对齐,不显示额外的单位说明文字。
+ m_pUnitLabel = new QLabel(pParentWidget);
+ m_pUnitLabel->setMinimumWidth(unitMinimumWidth());
+ m_pUnitLabel->setSizePolicy(QSizePolicy::Expanding,
+ QSizePolicy::Fixed);
+ pLayout->addWidget(m_pUnitLabel, nRow, nColumnOffset + 2);
+ }
+
+ updateValidationAppearance(true);
+ sError.clear();
+ return true;
+}
+
+void nmReservoirParameterField::createEnumEditor(QGridLayout* pLayout,
+ int nRow,
+ int nColumnOffset)
+{
+ QWidget* pParentWidget = pLayout->parentWidget();
+ m_pLabel = new QLabel(m_oFieldInfo.m_sLabel, pParentWidget);
+ m_pLabel->setAlignment(Qt::AlignRight | Qt::AlignVCenter);
+ m_pLabel->setWordWrap(false);
+ m_pLabel->setSizePolicy(QSizePolicy::Preferred,
+ QSizePolicy::Fixed);
+
+ m_pValueComboBox = new QComboBox(pParentWidget);
+ m_pValueComboBox->setFixedHeight(editorHeight());
+ m_pValueComboBox->setMinimumWidth(editorMinimumWidth());
+ m_pValueComboBox->setSizePolicy(QSizePolicy::Expanding,
+ QSizePolicy::Fixed);
+ for (int nIndex = 0;
+ nIndex < m_oFieldInfo.m_listOptions.size();
+ ++nIndex)
+ {
+ const nmReservoirEnumOption& oOption =
+ m_oFieldInfo.m_listOptions[nIndex];
+ m_pValueComboBox->addItem(oOption.m_sText, oOption.m_sCode);
+ }
+
+ // 枚举参数没有单位,空白单位列仅用于保持各行编辑器对齐。
+ m_pUnitLabel = new QLabel(pParentWidget);
+ m_pUnitLabel->setMinimumWidth(unitMinimumWidth());
+ m_pUnitLabel->setSizePolicy(QSizePolicy::Expanding,
+ QSizePolicy::Fixed);
+
+ pLayout->addWidget(m_pLabel, nRow, nColumnOffset);
+ pLayout->addWidget(m_pValueComboBox, nRow, nColumnOffset + 1);
+ pLayout->addWidget(m_pUnitLabel, nRow, nColumnOffset + 2);
+}
+
+void nmReservoirParameterField::setBaseValue(const QVariant& oValue)
+{
+ if (m_pLineEdit == nullptr || !oValue.isValid())
+ {
+ return;
+ }
+
+ m_bUpdating = true;
+ double dValue = oValue.toDouble();
+ if (m_pUnitComboBox != nullptr && m_pUnitService != nullptr)
+ {
+ m_pUnitService->setUnitBaseValue(m_pLineEdit, dValue);
+ }
+ else
+ {
+ m_pLineEdit->setText(formatBaseValue(dValue));
+ }
+ m_bUpdating = false;
+ validate();
+}
+
+QVariant nmReservoirParameterField::baseValue(bool& bValid)
+{
+ bValid = validate();
+ if (!bValid || m_pLineEdit == nullptr)
+ {
+ return QVariant();
+ }
+
+ if (m_pUnitComboBox != nullptr && m_pUnitService != nullptr)
+ {
+ return QVariant(m_pUnitService->unitBaseValue(m_pLineEdit));
+ }
+
+ bool bNumberOk = false;
+ double dValue = m_pLineEdit->text().trimmed().toDouble(&bNumberOk);
+ return bNumberOk ? QVariant(dValue) : QVariant();
+}
+
+void nmReservoirParameterField::setEnumCode(const QString& sCode)
+{
+ if (m_pValueComboBox == nullptr)
+ {
+ return;
+ }
+ int nIndex = m_pValueComboBox->findData(sCode);
+ m_bUpdating = true;
+ m_pValueComboBox->setCurrentIndex(nIndex >= 0 ? nIndex : 0);
+ m_bUpdating = false;
+}
+
+QString nmReservoirParameterField::enumCode() const
+{
+ if (m_pValueComboBox == nullptr ||
+ m_pValueComboBox->currentIndex() < 0)
+ {
+ return QString();
+ }
+ return m_pValueComboBox->itemData(
+ m_pValueComboBox->currentIndex()).toString();
+}
+
+void nmReservoirParameterField::setExternalValidationError(
+ const QString& sError)
+{
+ m_sExternalValidationError = sError;
+ validate();
+}
+
+bool nmReservoirParameterField::validate()
+{
+ if (!m_bVisible || isEnum())
+ {
+ return true;
+ }
+ if (m_pLineEdit == nullptr || m_pParameter == nullptr)
+ {
+ return false;
+ }
+
+ bool bValid = false;
+ if (m_pUnitComboBox != nullptr && m_pUnitService != nullptr)
+ {
+ bValid = m_pUnitService->isUnitInputValid(m_pLineEdit);
+ }
+ else
+ {
+ bool bNumberOk = false;
+ double dValue = m_pLineEdit->text().trimmed()
+ .toDouble(&bNumberOk);
+ bValid = bNumberOk && dValue == dValue &&
+ dValue >= m_pParameter->m_dMin &&
+ dValue <= m_pParameter->m_dMax;
+ if (bValid &&
+ m_oFieldInfo.m_eEditorType == NM_RESERVOIR_EDITOR_INTEGER)
+ {
+ bValid = dValue == static_cast(dValue);
+ }
+ }
+ bValid = bValid && m_sExternalValidationError.isEmpty();
+ updateValidationAppearance(bValid);
+ return bValid;
+}
+
+void nmReservoirParameterField::setFieldVisible(bool bVisible)
+{
+ m_bVisible = bVisible;
+ if (m_pLabel != nullptr)
+ {
+ m_pLabel->setVisible(bVisible);
+ }
+ if (m_pLineEdit != nullptr)
+ {
+ m_pLineEdit->setVisible(bVisible);
+ }
+ if (m_pValueComboBox != nullptr)
+ {
+ m_pValueComboBox->setVisible(bVisible);
+ }
+ if (m_pUnitComboBox != nullptr)
+ {
+ m_pUnitComboBox->setVisible(bVisible);
+ }
+ if (m_pUnitLabel != nullptr)
+ {
+ m_pUnitLabel->setVisible(bVisible);
+ }
+}
+
+bool nmReservoirParameterField::isFieldVisible() const
+{
+ return m_bVisible;
+}
+
+QLineEdit* nmReservoirParameterField::valueEditor() const
+{
+ return m_pLineEdit;
+}
+
+QComboBox* nmReservoirParameterField::enumEditor() const
+{
+ return m_pValueComboBox;
+}
+
+QString nmReservoirParameterField::formatBaseValue(double dValue) const
+{
+ if (m_pParameter == nullptr)
+ {
+ return QString::number(dValue, 'g', 15);
+ }
+ if (m_oFieldInfo.m_eEditorType == NM_RESERVOIR_EDITOR_INTEGER ||
+ m_pParameter->m_nDigit == 0)
+ {
+ return QString::number(dValue, 'f', 0);
+ }
+ if (m_pParameter->m_bScientific)
+ {
+ return QString::number(dValue, 'e', m_pParameter->m_nDigit);
+ }
+
+ QString sValue = QString::number(
+ dValue, 'f', m_pParameter->m_nDigit);
+ while (sValue.contains('.') && sValue.endsWith('0'))
+ {
+ sValue.chop(1);
+ }
+ if (sValue.endsWith('.'))
+ {
+ sValue.chop(1);
+ }
+ return sValue;
+}
+
+void nmReservoirParameterField::updateValidationAppearance(bool bValid)
+{
+ if (m_pLineEdit == nullptr || m_pParameter == nullptr)
+ {
+ return;
+ }
+
+ // 只修改文字色,避免Qt 4.8样式表绘制覆盖原生输入框边框。
+ QPalette oPalette = m_pLineEdit->palette();
+ oPalette.setColor(QPalette::Text,
+ bValid ? m_clrNormalText : QColor(Qt::red));
+ m_pLineEdit->setPalette(oPalette);
+
+ QString sCurrentUnit;
+ iUnitGroup* pUnitGroup = nullptr;
+ if (m_pUnitComboBox != nullptr && m_pUnitService != nullptr)
+ {
+ sCurrentUnit = m_pUnitService->currentUnit(m_pLineEdit);
+ pUnitGroup = m_pUnitService->unitGroup(m_pLineEdit);
+ }
+ QString sRange = iParaItemCtrl::getScaleStrOf(
+ m_pParameter, sCurrentUnit, pUnitGroup);
+ // 参数别名来自当前语言XML,稳定ID便于定位参数定义。
+ QString sHelp = m_pParameter->m_sAlias;
+ if (!m_pParameter->m_sName.isEmpty())
+ {
+ if (!sHelp.isEmpty())
+ {
+ sHelp += "[" + m_pParameter->m_sName + "]";
+ }
+ else
+ {
+ sHelp = m_pParameter->m_sName;
+ }
+ }
+ if (!sRange.isEmpty())
+ {
+ if (!sHelp.isEmpty())
+ {
+ sHelp += "\n";
+ }
+ sHelp += sRange;
+ }
+ if (!m_sExternalValidationError.isEmpty())
+ {
+ if (!sHelp.isEmpty())
+ {
+ sHelp += "\n";
+ }
+ sHelp += m_sExternalValidationError;
+ }
+ m_pLineEdit->setToolTip(validationToolTip(sHelp, bValid));
+ m_pLineEdit->setWhatsThis(sHelp);
+ if (m_pLabel != nullptr)
+ {
+ m_pLabel->setWhatsThis(sHelp);
+ }
+}
diff --git a/Src/nmNum/nmSubWxs/nmReservoirParameterPage.cpp b/Src/nmNum/nmSubWxs/nmReservoirParameterPage.cpp
new file mode 100644
index 0000000..8f50929
--- /dev/null
+++ b/Src/nmNum/nmSubWxs/nmReservoirParameterPage.cpp
@@ -0,0 +1,551 @@
+#include "nmReservoirParameterPage.h"
+
+#include "nmReservoirParameterField.h"
+#include "nmReservoirPropertiesSession.h"
+
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+
+nmReservoirParameterPage::nmReservoirParameterPage(
+ nmReservoirPropertiesCategory eCategory,
+ nmReservoirPropertiesSession* pSession,
+ nmIReservoirParameterUnitService* pUnitService,
+ QWidget* pParent)
+ : QWidget(pParent),
+ m_eCategory(eCategory),
+ m_pSession(pSession),
+ m_pUnitService(pUnitService),
+ m_nCurrentObjectIndex(-1),
+ m_bUpdatingObject(false),
+ m_bBuildingFields(false),
+ m_pObjectDisplayGroup(nullptr),
+ m_pObjectLabel(nullptr),
+ m_pObjectComboBox(nullptr),
+ m_pGroupsWidget(nullptr),
+ m_pGroupsLayout(nullptr),
+ m_pMainLayout(nullptr),
+ m_pEmptyLabel(nullptr)
+{
+ createUi();
+}
+
+nmReservoirParameterPage::~nmReservoirParameterPage()
+{
+ m_listFields.clear();
+ m_mapFields.clear();
+ m_mapEditorFields.clear();
+ m_pSession = nullptr;
+ m_pUnitService = nullptr;
+}
+
+void nmReservoirParameterPage::createUi()
+{
+ // 第一步:创建单行对象显示控制区,储层页自动隐藏该分组。
+ m_pMainLayout = new QVBoxLayout(this);
+ m_pMainLayout->setContentsMargins(8, 6, 8, 8);
+ m_pMainLayout->setSpacing(8);
+
+ m_pObjectDisplayGroup = new QGroupBox(tr("Object display"), this);
+ m_pObjectDisplayGroup->setSizePolicy(
+ QSizePolicy::Expanding, QSizePolicy::Fixed);
+ QHBoxLayout* pObjectLayout = new QHBoxLayout(m_pObjectDisplayGroup);
+ pObjectLayout->setContentsMargins(8, 15, 8, 8);
+ pObjectLayout->setSpacing(9);
+
+ m_pObjectLabel = new QLabel(tr("Display:"), m_pObjectDisplayGroup);
+ m_pObjectLabel->setAlignment(Qt::AlignRight | Qt::AlignVCenter);
+ m_pObjectComboBox = new QComboBox(m_pObjectDisplayGroup);
+ m_pObjectComboBox->setMinimumWidth(260);
+ m_pObjectComboBox->setMaximumWidth(420);
+ m_pObjectComboBox->setMinimumHeight(27);
+ pObjectLayout->addStretch(1);
+ pObjectLayout->addWidget(m_pObjectLabel);
+ pObjectLayout->addWidget(m_pObjectComboBox);
+ pObjectLayout->addStretch(1);
+ m_pMainLayout->addWidget(m_pObjectDisplayGroup);
+ m_pObjectDisplayGroup->setVisible(
+ m_eCategory != NM_RESERVOIR_PAGE_RESERVOIR);
+
+ // 第二步:分组载体没有边框,仅用于实现原型中的两列网格。
+ m_pGroupsWidget = new QWidget(this);
+ m_pGroupsLayout = new QGridLayout(m_pGroupsWidget);
+ m_pGroupsLayout->setContentsMargins(0, 0, 0, 0);
+ m_pGroupsLayout->setHorizontalSpacing(14);
+ m_pGroupsLayout->setVerticalSpacing(14);
+ m_pGroupsLayout->setColumnStretch(0, 1);
+ m_pGroupsLayout->setColumnStretch(1, 1);
+ m_pMainLayout->addWidget(m_pGroupsWidget);
+ m_pMainLayout->addStretch(1);
+
+ connect(m_pObjectComboBox, SIGNAL(currentIndexChanged(int)),
+ this, SLOT(slotObjectChanged(int)));
+}
+
+bool nmReservoirParameterPage::reloadObjects(QString& sError)
+{
+ // 第一步:重新取得会话对象描述,并把稳定对象code放入UserRole。
+ m_listObjectInfos = m_pSession != nullptr
+ ? m_pSession->objectInfos(m_eCategory)
+ : QList();
+ m_bUpdatingObject = true;
+ m_pObjectComboBox->clear();
+ for (int nIndex = 0; nIndex < m_listObjectInfos.size(); ++nIndex)
+ {
+ const nmReservoirPropertyObjectInfo& oInfo =
+ m_listObjectInfos[nIndex];
+ m_pObjectComboBox->addItem(oInfo.m_sDisplayName,
+ oInfo.m_sObjectCode);
+ }
+ m_bUpdatingObject = false;
+
+ bool bShowSelector = m_eCategory != NM_RESERVOIR_PAGE_RESERVOIR;
+ m_pObjectDisplayGroup->setVisible(bShowSelector);
+
+ // 第二步:构建首个对象;空分类显示无额外面板的空状态。
+ return buildObject(m_listObjectInfos.isEmpty() ? -1 : 0, sError);
+}
+
+bool nmReservoirParameterPage::hasEditableObjects() const
+{
+ return !m_listObjectInfos.isEmpty();
+}
+
+void nmReservoirParameterPage::slotObjectChanged(int nIndex)
+{
+ if (m_bUpdatingObject || nIndex == m_nCurrentObjectIndex)
+ {
+ return;
+ }
+
+ // 第一步:离开旧对象前校验并保存,非法输入时回退对象选择。
+ int nPreviousIndex = m_nCurrentObjectIndex;
+ if (nPreviousIndex >= 0 && !commitPendingEdits())
+ {
+ m_bUpdatingObject = true;
+ m_pObjectComboBox->setCurrentIndex(nPreviousIndex);
+ m_bUpdatingObject = false;
+ return;
+ }
+
+ // 第二步:构建新对象;目录已在初始化阶段验证,正常切换不会失败。
+ QString sError;
+ if (!buildObject(nIndex, sError))
+ {
+ m_bUpdatingObject = true;
+ m_pObjectComboBox->setCurrentIndex(nPreviousIndex);
+ m_bUpdatingObject = false;
+ }
+}
+
+bool nmReservoirParameterPage::buildObject(int nObjectIndex,
+ QString& sError)
+{
+ m_bBuildingFields = true;
+ clearObjectEditors();
+ m_nCurrentObjectIndex = nObjectIndex;
+
+ if (nObjectIndex < 0 || nObjectIndex >= m_listObjectInfos.size())
+ {
+ m_pEmptyLabel = new QLabel(
+ tr("No editable objects in this category."),
+ m_pGroupsWidget);
+ m_pEmptyLabel->setAlignment(Qt::AlignCenter);
+ m_pEmptyLabel->setMinimumHeight(260);
+ m_pGroupsLayout->addWidget(m_pEmptyLabel, 0, 0, 1, 2);
+ m_bBuildingFields = false;
+ sError.clear();
+ updateValidity();
+ return true;
+ }
+
+ // 第一步:按目录直接创建分组,页面不再包含对象类型专用布局代码。
+ const nmReservoirPropertyObjectInfo& oObjectInfo =
+ m_listObjectInfos[nObjectIndex];
+ for (int nGroupIndex = 0;
+ nGroupIndex < oObjectInfo.m_listGroups.size();
+ ++nGroupIndex)
+ {
+ if (!buildGroup(oObjectInfo.m_listGroups[nGroupIndex], sError))
+ {
+ m_bBuildingFields = false;
+ return false;
+ }
+ }
+
+ // 第二步:加载工作副本,随后只调整行可见性,不重建页面。
+ for (int nFieldIndex = 0;
+ nFieldIndex < m_listFields.size();
+ ++nFieldIndex)
+ {
+ loadFieldValue(m_listFields[nFieldIndex]);
+ }
+ applyVisibilityRules();
+ m_bBuildingFields = false;
+ sError.clear();
+ updateValidity();
+ return true;
+}
+
+void nmReservoirParameterPage::clearObjectEditors()
+{
+ m_listFields.clear();
+ m_mapFields.clear();
+ m_mapEditorFields.clear();
+ m_pEmptyLabel = nullptr;
+
+ // 分组载体本身保留,只删除其直接子控件和布局项。
+ while (m_pGroupsLayout->count() > 0)
+ {
+ QLayoutItem* pItem = m_pGroupsLayout->takeAt(0);
+ if (pItem->widget() != nullptr)
+ {
+ delete pItem->widget();
+ }
+ delete pItem;
+ }
+}
+
+bool nmReservoirParameterPage::buildGroup(
+ const nmReservoirParameterGroupInfo& oGroupInfo,
+ QString& sError)
+{
+ // 承载器始终横向铺满网格单元;只通过内部弹簧控制垂直位置,
+ // 避免直接设置对齐标志后分组框退回建议宽度。
+ QWidget* pGroupContainer = new QWidget(m_pGroupsWidget);
+ pGroupContainer->setSizePolicy(QSizePolicy::Expanding,
+ QSizePolicy::Expanding);
+ QVBoxLayout* pGroupContainerLayout =
+ new QVBoxLayout(pGroupContainer);
+ pGroupContainerLayout->setContentsMargins(0, 0, 0, 0);
+ pGroupContainerLayout->setSpacing(0);
+
+ QGroupBox* pGroupBox = new QGroupBox(
+ oGroupInfo.m_sTitle, pGroupContainer);
+ // 参数框只在水平方向随页面宽度调整,垂直方向始终采用内容建议高度,
+ // 避免跨行分组被网格拉伸成大面积空白框。
+ pGroupBox->setSizePolicy(QSizePolicy::Expanding,
+ QSizePolicy::Fixed);
+ QGridLayout* pFieldLayout = new QGridLayout(pGroupBox);
+ pFieldLayout->setContentsMargins(8, 15, 8, 10);
+ pFieldLayout->setHorizontalSpacing(6);
+ pFieldLayout->setVerticalSpacing(6);
+ int nFieldColumnOffset = 0;
+ // 字段较少的通栏分组使用独立的左右弹性列,
+ // 使参数区域保持居中,输入列仍可随窗口宽度适度伸展。
+ if (oGroupInfo.m_bFieldsCentered)
+ {
+ nFieldColumnOffset = 1;
+ pFieldLayout->setColumnStretch(0, 1);
+ pFieldLayout->setColumnStretch(1, 0);
+ pFieldLayout->setColumnStretch(2, 1);
+ pFieldLayout->setColumnStretch(3, 0);
+ pFieldLayout->setColumnStretch(4, 1);
+ }
+ else
+ {
+ // 常规分组由最长标签决定标签列宽,数值列和单位列按比例伸展。
+ pFieldLayout->setColumnStretch(0, 0);
+ pFieldLayout->setColumnStretch(1, 8);
+ pFieldLayout->setColumnStretch(2, 5);
+ }
+ pFieldLayout->setColumnMinimumWidth(
+ nFieldColumnOffset + 1,
+ nmReservoirParameterField::editorMinimumWidth());
+ pFieldLayout->setColumnMinimumWidth(
+ nFieldColumnOffset + 2,
+ nmReservoirParameterField::unitMinimumWidth());
+
+ // 每个字段只把三个直接控件放入此网格,不产生字段外框或子面板。
+ for (int nFieldIndex = 0;
+ nFieldIndex < oGroupInfo.m_listFields.size();
+ ++nFieldIndex)
+ {
+ nmReservoirParameterField* pField =
+ new nmReservoirParameterField(
+ oGroupInfo.m_listFields[nFieldIndex],
+ m_pUnitService,
+ pGroupBox);
+ if (!pField->initialize(pFieldLayout,
+ nFieldIndex,
+ nFieldColumnOffset,
+ sError))
+ {
+ delete pGroupContainer;
+ return false;
+ }
+ pField->setValueRightAligned(
+ oGroupInfo.m_bValueRightAligned);
+ if (pField->valueEditor() != nullptr)
+ {
+ connect(pField->valueEditor(), SIGNAL(textChanged(QString)),
+ this, SLOT(slotFieldValueEdited()));
+ m_mapEditorFields.insert(pField->valueEditor(), pField);
+ }
+ if (pField->enumEditor() != nullptr)
+ {
+ connect(pField->enumEditor(), SIGNAL(currentIndexChanged(int)),
+ this, SLOT(slotEnumIndexChanged(int)));
+ m_mapEditorFields.insert(pField->enumEditor(), pField);
+ }
+ m_listFields.append(pField);
+ m_mapFields.insert(pField->parameterId(), pField);
+ }
+
+ // 跨越多行的分组在承载区域垂直居中,普通分组保持顶部排列。
+ if (oGroupInfo.m_nRowSpan > 1)
+ {
+ pGroupContainerLayout->addStretch(1);
+ }
+ pGroupContainerLayout->addWidget(pGroupBox);
+ pGroupContainerLayout->addStretch(1);
+
+ m_pGroupsLayout->addWidget(
+ pGroupContainer,
+ oGroupInfo.m_nRow,
+ oGroupInfo.m_nColumn,
+ oGroupInfo.m_nRowSpan,
+ oGroupInfo.m_nColumnSpan);
+ return true;
+}
+
+void nmReservoirParameterPage::loadFieldValue(
+ nmReservoirParameterField* pField)
+{
+ if (pField == nullptr || m_pSession == nullptr)
+ {
+ return;
+ }
+ if (pField->isEnum())
+ {
+ pField->setEnumCode(m_pSession->enumCode(
+ pField->parameterId()));
+ }
+ else
+ {
+ pField->setBaseValue(m_pSession->value(
+ pField->parameterId()));
+ }
+}
+
+bool nmReservoirParameterPage::commitPendingEdits()
+{
+ if (m_pSession == nullptr)
+ {
+ return false;
+ }
+
+ // 第一步:先完整校验,避免部分字段已写入而后续字段失败。
+ if (!isInputValid())
+ {
+ updateValidity();
+ return false;
+ }
+
+ // 第二步:逐行按编辑器指针获取基准值,再统一写入工作副本。
+ QMap mapValues;
+ for (int nFieldIndex = 0;
+ nFieldIndex < m_listFields.size();
+ ++nFieldIndex)
+ {
+ nmReservoirParameterField* pField =
+ m_listFields[nFieldIndex];
+ if (pField == nullptr || pField->isEnum() ||
+ !pField->isFieldVisible())
+ {
+ continue;
+ }
+ bool bValid = false;
+ QVariant oValue = pField->baseValue(bValid);
+ if (!bValid || !oValue.isValid())
+ {
+ updateValidity();
+ return false;
+ }
+ mapValues.insert(pField->parameterId(), oValue);
+ }
+ m_pSession->setValues(mapValues);
+ updateValidity();
+ return true;
+}
+
+bool nmReservoirParameterPage::isInputValid()
+{
+ nmReservoirParameterField* pSoiField =
+ m_mapFields.value("Soi", nullptr);
+ nmReservoirParameterField* pSwiField =
+ m_mapFields.value("Swi", nullptr);
+ if (pSoiField != nullptr)
+ {
+ pSoiField->setExternalValidationError(QString());
+ }
+ if (pSwiField != nullptr)
+ {
+ pSwiField->setExternalValidationError(QString());
+ }
+
+ bool bAllValid = true;
+ for (int nFieldIndex = 0;
+ nFieldIndex < m_listFields.size();
+ ++nFieldIndex)
+ {
+ nmReservoirParameterField* pField =
+ m_listFields[nFieldIndex];
+ if (pField != nullptr && pField->isFieldVisible() &&
+ !pField->validate())
+ {
+ bAllValid = false;
+ }
+ }
+
+ // 油水两相同时显示两个初始饱和度时,两者之和必须为1。
+ if (pSoiField != nullptr && pSwiField != nullptr &&
+ pSoiField->isFieldVisible() &&
+ pSwiField->isFieldVisible())
+ {
+ bool bSoiValid = false;
+ bool bSwiValid = false;
+ QVariant oSoi = pSoiField->baseValue(bSoiValid);
+ QVariant oSwi = pSwiField->baseValue(bSwiValid);
+ const double dTolerance = 1.0e-6;
+ if (bSoiValid && bSwiValid &&
+ qAbs(oSoi.toDouble() + oSwi.toDouble() - 1.0) >
+ dTolerance)
+ {
+ QString sError = tr(
+ "Initial oil and water saturations must sum to 1.");
+ pSoiField->setExternalValidationError(sError);
+ pSwiField->setExternalValidationError(sError);
+ bAllValid = false;
+ }
+ }
+ return bAllValid;
+}
+
+void nmReservoirParameterPage::slotFieldValueEdited()
+{
+ if (!m_bBuildingFields)
+ {
+ nmReservoirParameterField* pField =
+ m_mapEditorFields.value(sender(), nullptr);
+ if (pField != nullptr)
+ {
+ pField->validate();
+ }
+ updateValidity();
+ }
+}
+
+void nmReservoirParameterPage::slotEnumIndexChanged(int nIndex)
+{
+ Q_UNUSED(nIndex);
+ if (m_bBuildingFields || m_pSession == nullptr)
+ {
+ return;
+ }
+
+ nmReservoirParameterField* pField =
+ m_mapEditorFields.value(sender(), nullptr);
+ if (pField == nullptr)
+ {
+ return;
+ }
+ QString sParameterId = pField->parameterId();
+
+ // 第一步:联动前保存当前可见数值;非法时回滚枚举code。
+ QString sPreviousCode = m_pSession->enumCode(sParameterId);
+ if (!commitPendingEdits())
+ {
+ m_bBuildingFields = true;
+ pField->setEnumCode(sPreviousCode);
+ m_bBuildingFields = false;
+ return;
+ }
+
+ // 第二步:只用稳定code更新工作副本,显示文字不参与业务判断。
+ if (!m_pSession->setEnumCode(sParameterId, pField->enumCode()))
+ {
+ m_bBuildingFields = true;
+ pField->setEnumCode(sPreviousCode);
+ m_bBuildingFields = false;
+ return;
+ }
+
+ // 第三步:仅显示或隐藏行,隐藏参数继续保留在工作副本中。
+ applyVisibilityRules();
+ updateValidity();
+}
+
+void nmReservoirParameterPage::applyVisibilityRules()
+{
+ if (m_pSession == nullptr || m_nCurrentObjectIndex < 0 ||
+ m_nCurrentObjectIndex >= m_listObjectInfos.size())
+ {
+ return;
+ }
+
+ const nmReservoirPropertyObjectInfo& oInfo =
+ m_listObjectInfos[m_nCurrentObjectIndex];
+
+ // 区域标记为均质储层时隐藏双重介质参数。
+ if (oInfo.m_eObjectType == NM_RESERVOIR_OBJECT_REGION_MARK)
+ {
+ QString sModelId = oInfo.m_sObjectCode +
+ "_RM_ReservoirType";
+ bool bDual = m_pSession->enumCode(sModelId) != "homogeneous";
+ setFieldVisible(oInfo.m_sObjectCode + "_RM_ComW", bDual);
+ setFieldVisible(oInfo.m_sObjectCode + "_RM_ComKr", bDual);
+ setFieldVisible(oInfo.m_sObjectCode + "_RM_NetToGross", bDual);
+ }
+
+ // 无限导流裂缝不显示有限导流能力和裂缝宽度参数。
+ if (oInfo.m_eObjectType == NM_RESERVOIR_OBJECT_FRACTURE)
+ {
+ QString sModelId = oInfo.m_sObjectCode + "_F_FlowModel";
+ bool bFinite = m_pSession->enumCode(sModelId) !=
+ "infinite_conductivity";
+ setFieldVisible(oInfo.m_sObjectCode + "_F_FC", bFinite);
+ setFieldVisible(oInfo.m_sObjectCode + "_F_DW", bFinite);
+ }
+
+ // 非泄漏断层或复合区不显示泄漏系数。
+ if (oInfo.m_eObjectType == NM_RESERVOIR_OBJECT_FAULT)
+ {
+ bool bLeaky = m_pSession->enumCode(
+ oInfo.m_sObjectCode + "_FT_FlowModel") == "leaky";
+ setFieldVisible(oInfo.m_sObjectCode + "_FT_Leakage", bLeaky);
+ }
+ if (oInfo.m_eObjectType == NM_RESERVOIR_OBJECT_REGION)
+ {
+ bool bLeaky = m_pSession->enumCode(
+ oInfo.m_sObjectCode + "_R_FlowModel") == "leaky";
+ setFieldVisible(oInfo.m_sObjectCode + "_R_Leakage", bLeaky);
+ }
+}
+
+void nmReservoirParameterPage::setFieldVisible(
+ const QString& sParameterId,
+ bool bVisible)
+{
+ nmReservoirParameterField* pField =
+ m_mapFields.value(sParameterId, nullptr);
+ if (pField != nullptr)
+ {
+ pField->setFieldVisible(bVisible);
+ }
+}
+
+void nmReservoirParameterPage::updateValidity()
+{
+ emit sigValidityChanged(isInputValid());
+}
+
+nmReservoirPropertiesCategory nmReservoirParameterPage::category() const
+{
+ return m_eCategory;
+}
diff --git a/Src/nmNum/nmSubWxs/nmReservoirPropertiesDataSource.cpp b/Src/nmNum/nmSubWxs/nmReservoirPropertiesDataSource.cpp
new file mode 100644
index 0000000..0502ac6
--- /dev/null
+++ b/Src/nmNum/nmSubWxs/nmReservoirPropertiesDataSource.cpp
@@ -0,0 +1,122 @@
+#include "nmReservoirPropertiesDataSource.h"
+
+#include "nmDataAnalyzeManager.h"
+#include "nmDataWellBase.h"
+#include "nmWxParameterProperty.h"
+
+nmReservoirPropertiesSnapshot::nmReservoirPropertiesSnapshot()
+ : m_nSolverModelType(0)
+{
+}
+
+nmIReservoirPropertiesDataSource::~nmIReservoirPropertiesDataSource()
+{
+}
+
+nmAnalyzeManagerReservoirDataSource::nmAnalyzeManagerReservoirDataSource(
+ nmDataAnalyzeManager* pDataManager)
+ : m_pDataManager(pDataManager)
+{
+}
+
+nmAnalyzeManagerReservoirDataSource::~nmAnalyzeManagerReservoirDataSource()
+{
+ m_pDataManager = nullptr;
+}
+
+bool nmAnalyzeManagerReservoirDataSource::loadSnapshot(
+ nmReservoirPropertiesSnapshot& oSnapshot,
+ QString& sError) const
+{
+ // 第一步:确认入口已经注入有效的数据管理器。
+ if (m_pDataManager == nullptr)
+ {
+ sError = QObject::tr("The current numerical well-test data is unavailable.");
+ return false;
+ }
+
+ // 第二步:复制求解器模型、储层和几何对象,确保界面编辑不会触碰实时数据。
+ oSnapshot.m_nSolverModelType =
+ static_cast(m_pDataManager->getSolverModelType());
+ oSnapshot.m_oReservoir = m_pDataManager->getReservoirDataCopy();
+ oSnapshot.m_vecRegionMarks = m_pDataManager->getRegionMarkDataListCopy();
+ oSnapshot.m_vecFaults = m_pDataManager->getFaultDataListCopy();
+ oSnapshot.m_vecFractures = m_pDataManager->getFractureDataListCopy();
+ oSnapshot.m_vecRegions = m_pDataManager->getRegionDataListCopy();
+
+ oSnapshot.m_vecVerticalWells.clear();
+ oSnapshot.m_vecVerticalFracturedWells.clear();
+ oSnapshot.m_vecHorizontalFracturedWells.clear();
+
+ // 第三步:按最具体的井型复制数据,显式排除不受求解器支持的普通水平井。
+ QVector vecWells = m_pDataManager->getWellDataList();
+ for (int nIndex = 0; nIndex < vecWells.size(); ++nIndex)
+ {
+ nmDataWellBase* pWell = vecWells[nIndex];
+ if (pWell == nullptr)
+ {
+ continue;
+ }
+
+ nmDataVerticalFracturedWell* pVerticalFractured =
+ dynamic_cast(pWell);
+ nmDataHorizontalFracturedWell* pHorizontalFractured =
+ dynamic_cast(pWell);
+ nmDataVerticalWell* pVertical = dynamic_cast(pWell);
+
+ if (pVerticalFractured != nullptr)
+ {
+ oSnapshot.m_vecVerticalFracturedWells.append(*pVerticalFractured);
+ }
+ else if (pHorizontalFractured != nullptr)
+ {
+ oSnapshot.m_vecHorizontalFracturedWells.append(*pHorizontalFractured);
+ }
+ else if (pVertical != nullptr)
+ {
+ oSnapshot.m_vecVerticalWells.append(*pVertical);
+ }
+ }
+
+ sError.clear();
+ return true;
+}
+
+bool nmAnalyzeManagerReservoirDataSource::commitSnapshot(
+ const nmReservoirPropertiesSnapshot& oSnapshot,
+ bool bGeometryChanged,
+ QString& sError)
+{
+ // 第一步:提交前再次校验数据管理器生命周期。
+ if (m_pDataManager == nullptr)
+ {
+ sError = QObject::tr("The current numerical well-test data is unavailable.");
+ return false;
+ }
+
+ // 第二步:按对象类型批量替换现有数据,不改变对象地址和列表结构。
+ m_pDataManager->updateVerticalWells(oSnapshot.m_vecVerticalWells);
+ m_pDataManager->updateVerticalFracturedWells(oSnapshot.m_vecVerticalFracturedWells);
+ m_pDataManager->updateHorizontalFracturedWells(oSnapshot.m_vecHorizontalFracturedWells);
+ m_pDataManager->updateFaultData(oSnapshot.m_vecFaults);
+ m_pDataManager->updateFractureData(oSnapshot.m_vecFractures);
+ m_pDataManager->updateRegionData(oSnapshot.m_vecRegions);
+ m_pDataManager->updateRegionMarkData(oSnapshot.m_vecRegionMarks);
+ m_pDataManager->updateReservoirData(oSnapshot.m_oReservoir);
+
+ // 第三步:重建实时注册表映射,并在几何变化时统一通知画布和网格。
+ m_pDataManager->syncWellAttrs();
+ m_pDataManager->syncGeometryAttrs();
+ if (bGeometryChanged)
+ {
+ m_pDataManager->notifyDataChanged();
+ m_pDataManager->updateWellPlotByDataManager();
+ }
+
+ // 第四步:兼容仍在使用旧参数树的窗口,提交完成后只刷新一次表格入口。
+ nmWxParameterProperty::notifyUpdateTable();
+
+ sError.clear();
+ return true;
+}
+
diff --git a/Src/nmNum/nmSubWxs/nmReservoirPropertiesSession.cpp b/Src/nmNum/nmSubWxs/nmReservoirPropertiesSession.cpp
new file mode 100644
index 0000000..293b74c
--- /dev/null
+++ b/Src/nmNum/nmSubWxs/nmReservoirPropertiesSession.cpp
@@ -0,0 +1,242 @@
+#include "nmReservoirPropertiesSession.h"
+
+#include "nmAttrRegistry.h"
+#include "nmDataAttribute.h"
+
+namespace
+{
+
+/** @brief 比较两个QVariant数值,保留字符串和整数的精确语义。 */
+bool sameValue(const QVariant& oLeft, const QVariant& oRight)
+{
+ return oLeft == oRight;
+}
+
+/** @brief 比较两口井的网格相关参数。 */
+bool sameWellGeometry(nmDataWellBase& oLeft, nmDataWellBase& oRight)
+{
+ return sameValue(oLeft.getX().getValue(), oRight.getX().getValue()) &&
+ sameValue(oLeft.getY().getValue(), oRight.getY().getValue()) &&
+ sameValue(oLeft.getRadius().getValue(), oRight.getRadius().getValue());
+}
+
+}
+
+nmReservoirPropertiesSession::nmReservoirPropertiesSession(
+ nmIReservoirPropertiesDataSource* pDataSource)
+ : m_pDataSource(pDataSource),
+ m_pAttrRegistry(new nmAttrRegistry),
+ m_bInitialized(false)
+{
+}
+
+nmReservoirPropertiesSession::~nmReservoirPropertiesSession()
+{
+ delete m_pAttrRegistry;
+ m_pAttrRegistry = nullptr;
+ m_pDataSource = nullptr;
+}
+
+bool nmReservoirPropertiesSession::initialize(QString& sError)
+{
+ // 第一步:读取一次真实数据,作为取消和变更检测的基线。
+ if (m_pDataSource == nullptr ||
+ !m_pDataSource->loadSnapshot(m_oOriginalSnapshot, sError))
+ {
+ m_bInitialized = false;
+ return false;
+ }
+
+ // 第二步:复制出独立工作副本,后续界面修改只写入此对象。
+ m_oWorkingSnapshot = m_oOriginalSnapshot;
+ nmReservoirParameterCatalog::registerSnapshot(m_pAttrRegistry,
+ m_oWorkingSnapshot);
+ m_bInitialized = true;
+ sError.clear();
+ return true;
+}
+
+QList nmReservoirPropertiesSession::objectInfos(
+ nmReservoirPropertiesCategory eCategory)
+{
+ if (!m_bInitialized)
+ {
+ return QList();
+ }
+ return nmReservoirParameterCatalog::createObjectInfos(eCategory,
+ m_oWorkingSnapshot);
+}
+
+QVariant nmReservoirPropertiesSession::value(const QString& sParameterId) const
+{
+ if (!m_bInitialized || m_pAttrRegistry == nullptr)
+ {
+ return QVariant();
+ }
+ QStringList listIds;
+ listIds << sParameterId;
+ return m_pAttrRegistry->collect(listIds).value(sParameterId, QVariant());
+}
+
+bool nmReservoirPropertiesSession::setValue(const QString& sParameterId,
+ const QVariant& oValue)
+{
+ if (!m_bInitialized || m_pAttrRegistry == nullptr ||
+ !m_pAttrRegistry->registeredNames().contains(sParameterId))
+ {
+ return false;
+ }
+ m_pAttrRegistry->setValue(sParameterId, oValue);
+ return true;
+}
+
+void nmReservoirPropertiesSession::setValues(
+ const QMap& mapValues)
+{
+ QMap::const_iterator oIterator = mapValues.constBegin();
+ for (; oIterator != mapValues.constEnd(); ++oIterator)
+ {
+ setValue(oIterator.key(), oIterator.value());
+ }
+}
+
+QString nmReservoirPropertiesSession::enumCode(const QString& sParameterId) const
+{
+ if (!m_bInitialized)
+ {
+ return QString();
+ }
+ return nmReservoirParameterCatalog::enumCode(m_oWorkingSnapshot,
+ sParameterId);
+}
+
+bool nmReservoirPropertiesSession::setEnumCode(const QString& sParameterId,
+ const QString& sCode)
+{
+ if (!m_bInitialized)
+ {
+ return false;
+ }
+ return nmReservoirParameterCatalog::setEnumCode(m_oWorkingSnapshot,
+ sParameterId,
+ sCode);
+}
+
+bool nmReservoirPropertiesSession::commit(QString& sError)
+{
+ if (!m_bInitialized || m_pDataSource == nullptr)
+ {
+ sError = QObject::tr("The reservoir properties editing session is unavailable.");
+ return false;
+ }
+
+ // 第一步:在提交前计算几何变更,供数据源决定是否重建网格和刷新画布。
+ bool bGeometryChanged = isGeometryChanged();
+
+ // 第二步:将完整工作副本一次性交给数据源;失败时继续保留当前编辑内容。
+ if (!m_pDataSource->commitSnapshot(m_oWorkingSnapshot,
+ bGeometryChanged,
+ sError))
+ {
+ return false;
+ }
+
+ // 第三步:提交成功后更新基线,防止同一会话重复识别旧变更。
+ m_oOriginalSnapshot = m_oWorkingSnapshot;
+ sError.clear();
+ return true;
+}
+
+const nmReservoirPropertiesSnapshot&
+nmReservoirPropertiesSession::workingSnapshot() const
+{
+ return m_oWorkingSnapshot;
+}
+
+bool nmReservoirPropertiesSession::isGeometryChanged() const
+{
+ // 第一步:对象数量变化视为几何变化,虽然当前对话框本身不提供增删操作。
+ if (m_oOriginalSnapshot.m_vecVerticalWells.size() !=
+ m_oWorkingSnapshot.m_vecVerticalWells.size() ||
+ m_oOriginalSnapshot.m_vecVerticalFracturedWells.size() !=
+ m_oWorkingSnapshot.m_vecVerticalFracturedWells.size() ||
+ m_oOriginalSnapshot.m_vecHorizontalFracturedWells.size() !=
+ m_oWorkingSnapshot.m_vecHorizontalFracturedWells.size())
+ {
+ return true;
+ }
+
+ // 第二步:比较三类井的位置和井径。
+ for (int nIndex = 0; nIndex < m_oWorkingSnapshot.m_vecVerticalWells.size(); ++nIndex)
+ {
+ nmDataVerticalWell& oOriginal =
+ const_cast(m_oOriginalSnapshot.m_vecVerticalWells[nIndex]);
+ nmDataVerticalWell& oWorking =
+ const_cast(m_oWorkingSnapshot.m_vecVerticalWells[nIndex]);
+ if (!sameWellGeometry(oOriginal, oWorking))
+ {
+ return true;
+ }
+ }
+ for (int nIndex = 0; nIndex < m_oWorkingSnapshot.m_vecVerticalFracturedWells.size(); ++nIndex)
+ {
+ nmDataVerticalFracturedWell& oOriginal = const_cast(
+ m_oOriginalSnapshot.m_vecVerticalFracturedWells[nIndex]);
+ nmDataVerticalFracturedWell& oWorking = const_cast(
+ m_oWorkingSnapshot.m_vecVerticalFracturedWells[nIndex]);
+ if (!sameWellGeometry(oOriginal, oWorking) ||
+ !sameValue(oOriginal.getFractureHalfLength().getValue(),
+ oWorking.getFractureHalfLength().getValue()) ||
+ !sameValue(oOriginal.getFractureAngle().getValue(),
+ oWorking.getFractureAngle().getValue()))
+ {
+ return true;
+ }
+ }
+ for (int nIndex = 0; nIndex < m_oWorkingSnapshot.m_vecHorizontalFracturedWells.size(); ++nIndex)
+ {
+ nmDataHorizontalFracturedWell& oOriginal =
+ const_cast(
+ m_oOriginalSnapshot.m_vecHorizontalFracturedWells[nIndex]);
+ nmDataHorizontalFracturedWell& oWorking =
+ const_cast(
+ m_oWorkingSnapshot.m_vecHorizontalFracturedWells[nIndex]);
+ if (!sameWellGeometry(oOriginal, oWorking) ||
+ !sameValue(oOriginal.getWellLength().getValue(), oWorking.getWellLength().getValue()) ||
+ !sameValue(oOriginal.getDrainAngle().getValue(), oWorking.getDrainAngle().getValue()) ||
+ !sameValue(oOriginal.getNumberOfFractures().getValue(),
+ oWorking.getNumberOfFractures().getValue()) ||
+ !sameValue(oOriginal.getFractureHalfLength().getValue(),
+ oWorking.getFractureHalfLength().getValue()) ||
+ !sameValue(oOriginal.getFractureAngle().getValue(),
+ oWorking.getFractureAngle().getValue()))
+ {
+ return true;
+ }
+ }
+
+ // 第三步:断层和裂缝端点也直接参与网格,因此比较完整点坐标。
+ if (m_oOriginalSnapshot.m_vecFaults.size() != m_oWorkingSnapshot.m_vecFaults.size() ||
+ m_oOriginalSnapshot.m_vecFractures.size() != m_oWorkingSnapshot.m_vecFractures.size())
+ {
+ return true;
+ }
+ for (int nIndex = 0; nIndex < m_oWorkingSnapshot.m_vecFaults.size(); ++nIndex)
+ {
+ if (m_oOriginalSnapshot.m_vecFaults[nIndex].getFaultPoints() !=
+ m_oWorkingSnapshot.m_vecFaults[nIndex].getFaultPoints())
+ {
+ return true;
+ }
+ }
+ for (int nIndex = 0; nIndex < m_oWorkingSnapshot.m_vecFractures.size(); ++nIndex)
+ {
+ if (m_oOriginalSnapshot.m_vecFractures[nIndex].getFracturePoints() !=
+ m_oWorkingSnapshot.m_vecFractures[nIndex].getFracturePoints())
+ {
+ return true;
+ }
+ }
+ return false;
+}
+
diff --git a/Src/nmNum/nmSubWxs/nmWxAutomaticFitting.cpp b/Src/nmNum/nmSubWxs/nmWxAutomaticFitting.cpp
index 6bd7312..0a11b33 100644
--- a/Src/nmNum/nmSubWxs/nmWxAutomaticFitting.cpp
+++ b/Src/nmNum/nmSubWxs/nmWxAutomaticFitting.cpp
@@ -747,7 +747,7 @@ void nmWxAutomaticFitting::setupParameterTable()
m_parameterTable->setItem(0, 2, new QTableWidgetItem(QString::number(automaticFittingData.getPermeabilityMin().getValue().toDouble())));
m_parameterTable->setItem(0, 3, new QTableWidgetItem(QString::number(reservoirData.getPermeability().getValue().toDouble())));
m_parameterTable->setItem(0, 4, new QTableWidgetItem(QString::number(automaticFittingData.getPermeabilityMax().getValue().toDouble())));
- m_parameterTable->setItem(0, 5, new QTableWidgetItem(tr("Darcy")));
+ m_parameterTable->setItem(0, 5, new QTableWidgetItem(tr("mD")));
// 表皮系数 (Skin)
m_parameterTable->setItem(1, 0, new QTableWidgetItem("2"));
diff --git a/Src/nmNum/nmSubWxs/nmWxPropertyInterpolationDlg.cpp b/Src/nmNum/nmSubWxs/nmWxPropertyInterpolationDlg.cpp
index 7c8ccf2..494016d 100644
--- a/Src/nmNum/nmSubWxs/nmWxPropertyInterpolationDlg.cpp
+++ b/Src/nmNum/nmSubWxs/nmWxPropertyInterpolationDlg.cpp
@@ -1,4 +1,4 @@
-#include "nmWxPropertyInterpolationDlg.h"
+#include "nmWxPropertyInterpolationDlg.h"
#include
#include
@@ -47,9 +47,9 @@ namespace
// 表格第0行保留给单位,实际测点从第1行开始.
const int POINT_UNIT_ROW = 0;
const int FIRST_POINT_ROW = 1;
-// 坐标和厚度以m保存,渗透率以D保存但默认使用mD显示.
+// 坐标和厚度以m保存,渗透率统一以mD保存和显示。
const char* LENGTH_BASE_UNIT = "m";
-const char* PERMEABILITY_BASE_UNIT = "D";
+const char* PERMEABILITY_BASE_UNIT = "mD";
const char* PERMEABILITY_DISPLAY_UNIT = "mD";
// 使用独立翻译上下文,便于统一维护对话框文本.
@@ -92,9 +92,7 @@ QString defaultPropertyDisplayUnit(const QString& property)
QString unitGroupLookupUnit(const QString& unit)
{
- // D与时间单位d仅大小写不同,使用唯一的mD定位渗透率单位组.
- return unit == PERMEABILITY_BASE_UNIT ?
- QString(PERMEABILITY_DISPLAY_UNIT) : unit;
+ return unit;
}
bool convertUnitValue(double sourceValue,
diff --git a/Src/nmNum/nmSubWxs/nmWxReservoirPropertiesEditor.cpp b/Src/nmNum/nmSubWxs/nmWxReservoirPropertiesEditor.cpp
new file mode 100644
index 0000000..fe0bd13
--- /dev/null
+++ b/Src/nmNum/nmSubWxs/nmWxReservoirPropertiesEditor.cpp
@@ -0,0 +1,504 @@
+#include "nmWxReservoirPropertiesEditor.h"
+
+#include "nmReservoirPropertiesDataSource.h"
+#include "nmReservoirPropertiesSession.h"
+#include "nmReservoirParameterPage.h"
+#include "iUnitGroup.h"
+#include "iUnitWxBinder.h"
+#include "mModuleDefines.h"
+#include "ZxBaseUtil.h"
+
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+#include
+
+nmWxReservoirPropertiesEditor::nmWxReservoirPropertiesEditor(
+ nmIReservoirPropertiesDataSource* pDataSource,
+ QWidget* pParent)
+ : iDlgBase(pParent),
+ m_pDataSource(pDataSource),
+ m_pSession(new nmReservoirPropertiesSession(pDataSource)),
+ m_pCategoryButtonGroup(nullptr),
+ m_pStackedWidget(nullptr),
+ m_pButtonBox(nullptr),
+ m_pFooterHelpButton(nullptr),
+ m_pStatusLabel(nullptr),
+ m_nCurrentCategory(NM_RESERVOIR_PAGE_RESERVOIR),
+ m_bInitialized(false)
+{
+ for (int nIndex = 0; nIndex < NM_RESERVOIR_PAGE_COUNT; ++nIndex)
+ {
+ m_pPages[nIndex] = nullptr;
+ }
+
+ // 单位绑定器必须先切换到数值试井参数系列,再创建任何参数字段。
+ setParaSrcTag(s_Nm_Serie);
+ createUi();
+ setWindowTitle(tr("Reservoir properties settings"));
+ setWindowFlags(windowFlags() & ~Qt::WindowContextHelpButtonHint);
+ // 首次打开使用建议尺寸,后续最小宽高均由页面内容和布局自动决定。
+ resize(880, 480);
+}
+
+nmWxReservoirPropertiesEditor::~nmWxReservoirPropertiesEditor()
+{
+ delete m_pSession;
+ m_pSession = nullptr;
+ m_pDataSource = nullptr;
+}
+
+void nmWxReservoirPropertiesEditor::createUi()
+{
+ // 第一步:创建原型中的顶部ribbon和无边框页面堆栈。
+ QVBoxLayout* pMainLayout = new QVBoxLayout(this);
+ pMainLayout->setContentsMargins(12, 10, 12, 0);
+ pMainLayout->setSpacing(0);
+ pMainLayout->addWidget(createCategoryBar());
+
+ m_pStackedWidget = new QStackedWidget(this);
+ pMainLayout->addWidget(m_pStackedWidget, 1);
+
+ // 第二步:底部左侧放帮助与状态,右侧只放确定和取消。
+ QWidget* pFooterWidget = new QWidget(this);
+ QHBoxLayout* pFooterLayout = new QHBoxLayout(pFooterWidget);
+ pFooterLayout->setContentsMargins(4, 5, 4, 5);
+ pFooterLayout->setSpacing(8);
+
+ m_pFooterHelpButton = new QToolButton(pFooterWidget);
+ m_pFooterHelpButton->setText(tr("Help"));
+ m_pFooterHelpButton->setIcon(zxLoadIcon("Help"));
+ m_pFooterHelpButton->setToolButtonStyle(Qt::ToolButtonTextBesideIcon);
+ m_pFooterHelpButton->setAutoRaise(true);
+ pFooterLayout->addWidget(m_pFooterHelpButton);
+
+ m_pStatusLabel = new QLabel(pFooterWidget);
+ m_pStatusLabel->setWordWrap(true);
+ pFooterLayout->addWidget(m_pStatusLabel, 1);
+
+ m_pButtonBox = new QDialogButtonBox(
+ QDialogButtonBox::Ok | QDialogButtonBox::Cancel,
+ Qt::Horizontal,
+ pFooterWidget);
+ QPushButton* pOkButton = m_pButtonBox->button(QDialogButtonBox::Ok);
+ QPushButton* pCancelButton =
+ m_pButtonBox->button(QDialogButtonBox::Cancel);
+ if (pOkButton != nullptr)
+ {
+ pOkButton->setIcon(zxLoadIcon("OK"));
+ pOkButton->setText(tr("OK"));
+ }
+ if (pCancelButton != nullptr)
+ {
+ pCancelButton->setIcon(zxLoadIcon("Cancel"));
+ pCancelButton->setText(tr("Cancel"));
+ }
+ pFooterLayout->addWidget(m_pButtonBox);
+ pMainLayout->addWidget(pFooterWidget);
+
+ connect(m_pButtonBox, SIGNAL(accepted()), this, SLOT(accept()));
+ connect(m_pButtonBox, SIGNAL(rejected()), this, SLOT(reject()));
+ connect(m_pFooterHelpButton, SIGNAL(clicked()),
+ this, SLOT(slotHelp()));
+}
+
+QWidget* nmWxReservoirPropertiesEditor::createCategoryBar()
+{
+ // 使用无标题分组框承载顶部导航,获得与框架工具栏相近的浅色外边框。
+ QGroupBox* pCategoryBar = new QGroupBox(this);
+
+ // 为边框和内部命令区保留少量间距,窗口拉伸时右侧空白自然扩展。
+ QHBoxLayout* pBarLayout = new QHBoxLayout(pCategoryBar);
+ pBarLayout->setContentsMargins(3, 3, 3, 3);
+ pBarLayout->setSpacing(0);
+
+ m_pCategoryButtonGroup = new QButtonGroup(this);
+
+ // 第一步:基础组只包含储层参数。
+ QHBoxLayout* pBasicLayout = nullptr;
+ QWidget* pBasicGroup = createRibbonGroup(
+ tr("Basic"), pCategoryBar, pBasicLayout);
+ pBasicLayout->insertWidget(0, createCategoryButton(
+ NM_RESERVOIR_PAGE_RESERVOIR,
+ tr("Reservoir parameters"),
+ "ResData",
+ pBasicGroup));
+ pBarLayout->addWidget(pBasicGroup);
+ pBarLayout->addWidget(createRibbonSeparator(pCategoryBar));
+
+ // 第二步:井筒参数独立成组,避免与储层内部区域对象混在一起。
+ QHBoxLayout* pWellLayout = nullptr;
+ QWidget* pWellGroup = createRibbonGroup(
+ tr("Wells"), pCategoryBar, pWellLayout);
+ pWellLayout->insertWidget(0, createCategoryButton(
+ NM_RESERVOIR_PAGE_WELL,
+ tr("Well parameters"),
+ "NmWell",
+ pWellGroup));
+ pBarLayout->addWidget(pWellGroup);
+ pBarLayout->addWidget(createRibbonSeparator(pCategoryBar));
+
+ // 第三步:四类储层平面对象按用户工作顺序放入同一个几何对象组。
+ QHBoxLayout* pGeometryLayout = nullptr;
+ QWidget* pGeometryGroup = createRibbonGroup(
+ tr("Geometry objects"),
+ pCategoryBar,
+ pGeometryLayout);
+ pGeometryLayout->insertWidget(0, createCategoryButton(
+ NM_RESERVOIR_PAGE_FAULT,
+ tr("Faults"),
+ "NmFault",
+ pGeometryGroup));
+ pGeometryLayout->insertWidget(1, createCategoryButton(
+ NM_RESERVOIR_PAGE_FRACTURE,
+ tr("Fractures"),
+ "NmFault",
+ pGeometryGroup));
+ pGeometryLayout->insertWidget(2, createCategoryButton(
+ NM_RESERVOIR_PAGE_COMPOSITE_REGION,
+ tr("Composite regions"),
+ "NmRegion",
+ pGeometryGroup));
+ pGeometryLayout->insertWidget(3, createCategoryButton(
+ NM_RESERVOIR_PAGE_REGION_MARK,
+ tr("Region marks"),
+ "RegionSelect",
+ pGeometryGroup));
+ pBarLayout->addWidget(pGeometryGroup);
+ pBarLayout->addWidget(createRibbonSeparator(pCategoryBar));
+
+ // 第四步:帮助是即时命令,不加入互斥页面按钮组。
+ QHBoxLayout* pHelpLayout = nullptr;
+ QWidget* pHelpGroup = createRibbonGroup(
+ tr("Help"), pCategoryBar, pHelpLayout);
+ pHelpLayout->insertWidget(0, createHelpButton(pHelpGroup));
+ pBarLayout->addWidget(pHelpGroup);
+ pBarLayout->addStretch(1);
+
+ connect(m_pCategoryButtonGroup, SIGNAL(buttonClicked(int)),
+ this, SLOT(slotCategoryButtonClicked(int)));
+ return pCategoryBar;
+}
+
+QWidget* nmWxReservoirPropertiesEditor::createRibbonGroup(
+ const QString& sCaption,
+ QWidget* pParent,
+ QHBoxLayout*& pCommandLayout)
+{
+ QWidget* pGroupWidget = new QWidget(pParent);
+
+ // 分组左右保留稳定留白,使按钮不会紧贴相邻分组的竖向分隔线。
+ QVBoxLayout* pGroupLayout = new QVBoxLayout(pGroupWidget);
+ pGroupLayout->setContentsMargins(11, 2, 11, 1);
+ // 按钮区与下方分组标题之间留出间距,避免两行文字贴得过近。
+ pGroupLayout->setSpacing(4);
+ QWidget* pCommandWidget = new QWidget(pGroupWidget);
+ pCommandLayout = new QHBoxLayout(pCommandWidget);
+ pCommandLayout->setContentsMargins(0, 0, 0, 0);
+ pCommandLayout->setSpacing(6);
+ pCommandLayout->addStretch();
+ pGroupLayout->addWidget(pCommandWidget, 1);
+
+ // 分组标题使用主题灰色和下划线,保持框架参考工具栏的层级表现。
+ QLabel* pCaptionLabel = new QLabel(sCaption, pGroupWidget);
+ pCaptionLabel->setAlignment(Qt::AlignCenter);
+ pCaptionLabel->setFixedHeight(16);
+ QFont oCaptionFont = pCaptionLabel->font();
+ oCaptionFont.setUnderline(true);
+ pCaptionLabel->setFont(oCaptionFont);
+ QPalette oCaptionPalette = pCaptionLabel->palette();
+ oCaptionPalette.setColor(
+ QPalette::WindowText,
+ pGroupWidget->palette().color(QPalette::Mid));
+ pCaptionLabel->setPalette(oCaptionPalette);
+ pGroupLayout->addWidget(pCaptionLabel);
+ return pGroupWidget;
+}
+
+QFrame* nmWxReservoirPropertiesEditor::createRibbonSeparator(
+ QWidget* pParent)
+{
+ // 使用单像素平直竖线,避免Sunken双线在端点形成视觉折角。
+ QFrame* pSeparator = new QFrame(pParent);
+ pSeparator->setFrameShape(QFrame::VLine);
+ pSeparator->setFrameShadow(QFrame::Plain);
+ pSeparator->setLineWidth(1);
+ QPalette oSeparatorPalette = pSeparator->palette();
+ oSeparatorPalette.setColor(
+ QPalette::WindowText,
+ pParent->palette().color(QPalette::Mid));
+ pSeparator->setPalette(oSeparatorPalette);
+ pSeparator->setSizePolicy(QSizePolicy::Fixed, QSizePolicy::Expanding);
+ return pSeparator;
+}
+
+QToolButton* nmWxReservoirPropertiesEditor::createCategoryButton(
+ nmReservoirPropertiesCategory eCategory,
+ const QString& sText,
+ const QString& sIconName,
+ QWidget* pParent)
+{
+ QToolButton* pButton = new QToolButton(pParent);
+ pButton->setText(sText);
+ pButton->setIcon(zxLoadIcon(sIconName));
+ pButton->setIconSize(QSize(25, 25));
+ pButton->setToolButtonStyle(Qt::ToolButtonTextUnderIcon);
+ // 分类按钮仅执行页面切换命令,不保留持续选中状态。
+ pButton->setCheckable(false);
+ pButton->setSizePolicy(QSizePolicy::Preferred, QSizePolicy::Fixed);
+ m_pCategoryButtonGroup->addButton(
+ pButton, static_cast(eCategory));
+ return pButton;
+}
+
+QToolButton* nmWxReservoirPropertiesEditor::createHelpButton(
+ QWidget* pParent)
+{
+ QToolButton* pButton = new QToolButton(pParent);
+ pButton->setText(tr("Help"));
+ pButton->setIcon(zxLoadIcon("Help"));
+ pButton->setIconSize(QSize(25, 25));
+ pButton->setToolButtonStyle(Qt::ToolButtonTextUnderIcon);
+ pButton->setSizePolicy(QSizePolicy::Preferred, QSizePolicy::Fixed);
+ connect(pButton, SIGNAL(clicked()), this, SLOT(slotHelp()));
+ return pButton;
+}
+
+bool nmWxReservoirPropertiesEditor::initialize(QString& sError)
+{
+ // 第一步:建立工作副本,失败时不创建不完整的字段控件。
+ if (m_pSession == nullptr || !m_pSession->initialize(sError))
+ {
+ m_bInitialized = false;
+ return false;
+ }
+
+ // 第二步:创建页面并逐页验证XML参数定义和单位绑定。
+ createPages();
+ for (int nIndex = 0; nIndex < NM_RESERVOIR_PAGE_COUNT; ++nIndex)
+ {
+ if (!m_pPages[nIndex]->reloadObjects(sError))
+ {
+ m_bInitialized = false;
+ return false;
+ }
+ }
+
+ // 第三步:没有对应对象的分类直接禁用,避免用户进入无操作价值的空页面。
+ updateCategoryButtonStates();
+ m_pStackedWidget->setCurrentIndex(NM_RESERVOIR_PAGE_RESERVOIR);
+ m_bInitialized = true;
+ validateAllPages();
+ sError.clear();
+ return true;
+}
+
+bool nmWxReservoirPropertiesEditor::bindUnitField(
+ QLineEdit* pLineEdit,
+ QComboBox* pUnitComboBox,
+ const QString& sBaseParameterId)
+{
+ // 参数XML已统一使用无歧义的mD作为渗透率基准单位,所有字段直接复用框架绑定器。
+ return bindUnitPairWxs(pLineEdit, pUnitComboBox,
+ sBaseParameterId, false);
+}
+
+void nmWxReservoirPropertiesEditor::setUnitBaseValue(
+ QLineEdit* pLineEdit,
+ double dBaseValue)
+{
+ if (m_pUnitBinder != nullptr)
+ {
+ m_pUnitBinder->setBaseValue(pLineEdit, dBaseValue);
+ }
+}
+
+double nmWxReservoirPropertiesEditor::unitBaseValue(
+ QLineEdit* pLineEdit) const
+{
+ return m_pUnitBinder != nullptr
+ ? m_pUnitBinder->getBaseValue(pLineEdit) : 0.0;
+}
+
+bool nmWxReservoirPropertiesEditor::isUnitInputValid(
+ QLineEdit* pLineEdit)
+{
+ return m_pUnitBinder != nullptr &&
+ m_pUnitBinder->isInputOK(pLineEdit, true, nullptr);
+}
+
+QString nmWxReservoirPropertiesEditor::currentUnit(
+ QLineEdit* pLineEdit) const
+{
+ return m_pUnitBinder != nullptr
+ ? m_pUnitBinder->getCurrentUnit(pLineEdit) : QString();
+}
+
+iUnitGroup* nmWxReservoirPropertiesEditor::unitGroup(
+ QLineEdit* pLineEdit) const
+{
+ return m_pUnitBinder != nullptr
+ ? m_pUnitBinder->getUnitGroup(pLineEdit) : nullptr;
+}
+
+void nmWxReservoirPropertiesEditor::createPages()
+{
+ if (m_pStackedWidget->count() > 0)
+ {
+ return;
+ }
+
+ for (int nIndex = 0; nIndex < NM_RESERVOIR_PAGE_COUNT; ++nIndex)
+ {
+ nmReservoirPropertiesCategory eCategory =
+ static_cast(nIndex);
+ m_pPages[nIndex] = new nmReservoirParameterPage(
+ eCategory,
+ m_pSession,
+ this,
+ m_pStackedWidget);
+ connect(m_pPages[nIndex], SIGNAL(sigValidityChanged(bool)),
+ this, SLOT(slotPageValidityChanged(bool)));
+ m_pStackedWidget->addWidget(m_pPages[nIndex]);
+ }
+}
+
+void nmWxReservoirPropertiesEditor::slotCategoryButtonClicked(
+ int nCategory)
+{
+ if (!m_bInitialized || nCategory < 0 ||
+ nCategory >= NM_RESERVOIR_PAGE_COUNT)
+ {
+ return;
+ }
+
+ // 分类按钮状态由对象列表决定;此处再次防御程序主动触发的非法切换。
+ QAbstractButton* pCategoryButton = m_pCategoryButtonGroup != nullptr
+ ? m_pCategoryButtonGroup->button(nCategory) : nullptr;
+ if (pCategoryButton == nullptr || !pCategoryButton->isEnabled())
+ {
+ return;
+ }
+
+ // 离开当前分类前先校验并保存,非法时保持当前页。
+ if (m_pPages[m_nCurrentCategory] != nullptr &&
+ !m_pPages[m_nCurrentCategory]->commitPendingEdits())
+ {
+ m_pStatusLabel->setText(
+ tr("Please correct the invalid parameter values."));
+ return;
+ }
+
+ m_nCurrentCategory = nCategory;
+ m_pStackedWidget->setCurrentIndex(nCategory);
+ m_pStatusLabel->clear();
+}
+
+void nmWxReservoirPropertiesEditor::updateCategoryButtonStates()
+{
+ if (m_pCategoryButtonGroup == nullptr)
+ {
+ return;
+ }
+
+ // 逐类读取页面已经加载的对象列表,页面不存在或对象为空时禁用命令。
+ for (int nIndex = 0; nIndex < NM_RESERVOIR_PAGE_COUNT; ++nIndex)
+ {
+ QAbstractButton* pCategoryButton =
+ m_pCategoryButtonGroup->button(nIndex);
+ bool bEnabled = m_pPages[nIndex] != nullptr &&
+ m_pPages[nIndex]->hasEditableObjects();
+ if (pCategoryButton != nullptr)
+ {
+ pCategoryButton->setEnabled(bEnabled);
+ }
+ }
+}
+
+void nmWxReservoirPropertiesEditor::slotPageValidityChanged(bool bValid)
+{
+ Q_UNUSED(bValid);
+ validateAllPages();
+}
+
+void nmWxReservoirPropertiesEditor::slotHelp()
+{
+ // 顶部和底部帮助命令统一打开系统帮助文档。
+ ZxBaseUtil::startHelp();
+}
+
+bool nmWxReservoirPropertiesEditor::validateAllPages()
+{
+ bool bAllValid = m_bInitialized;
+ if (m_bInitialized)
+ {
+ for (int nIndex = 0; nIndex < NM_RESERVOIR_PAGE_COUNT; ++nIndex)
+ {
+ if (m_pPages[nIndex] != nullptr &&
+ !m_pPages[nIndex]->isInputValid())
+ {
+ bAllValid = false;
+ break;
+ }
+ }
+ }
+
+ QPushButton* pOkButton = m_pButtonBox != nullptr
+ ? m_pButtonBox->button(QDialogButtonBox::Ok) : nullptr;
+ if (pOkButton != nullptr)
+ {
+ pOkButton->setEnabled(bAllValid);
+ }
+ return bAllValid;
+}
+
+void nmWxReservoirPropertiesEditor::accept()
+{
+ if (!m_bInitialized)
+ {
+ return;
+ }
+
+ // 第一步:依次提交各页面当前对象尚未离开焦点的输入。
+ for (int nIndex = 0; nIndex < NM_RESERVOIR_PAGE_COUNT; ++nIndex)
+ {
+ if (m_pPages[nIndex] != nullptr &&
+ !m_pPages[nIndex]->commitPendingEdits())
+ {
+ m_nCurrentCategory = nIndex;
+ m_pStackedWidget->setCurrentIndex(nIndex);
+ m_pStatusLabel->setText(
+ tr("Please correct the invalid parameter values."));
+ validateAllPages();
+ return;
+ }
+ }
+
+ // 第二步:把完整工作副本一次性交给数据源。
+ QString sError;
+ if (!m_pSession->commit(sError))
+ {
+ m_pStatusLabel->setText(sError);
+ QMessageBox::warning(this, tr("Reservoir properties"), sError);
+ return;
+ }
+
+ // 第三步:仅在提交成功后关闭对话框。
+ iDlgBase::accept();
+}
+
+void nmWxReservoirPropertiesEditor::reject()
+{
+ // 工作副本从未提前写入真实数据,取消时直接关闭即可。
+ iDlgBase::reject();
+}
diff --git a/Src4/nmNum/nmSubWxs/nmSubWxs.pro b/Src4/nmNum/nmSubWxs/nmSubWxs.pro
index 370bf5b..74d2e04 100644
--- a/Src4/nmNum/nmSubWxs/nmSubWxs.pro
+++ b/Src4/nmNum/nmSubWxs/nmSubWxs.pro
@@ -1,4 +1,6 @@
-QT += core sql gui widgets
+QT += core sql gui
+
+greaterThan(QT_MAJOR_VERSION, 4) : QT += widgets
greaterThan(QT_MAJOR_VERSION, 4) : QT += printsupport
#greaterThan(QT_MAJOR_VERSION, 4) : QT += axcontainer printsupport